@astrale-os/kernel-core 0.9.0-beta.9 → 1.0.0-beta.2
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 +39 -0
- package/dist/auth/authority/semantics/composition.js +112 -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 +11 -0
- package/dist/auth/authority/semantics/index.js +5 -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/snapshot.d.ts +40 -0
- package/dist/auth/authority/semantics/terms.d.ts +20 -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 +2 -2
- 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 +269 -0
- package/dist/schema/callables/execution.js +32 -0
- package/dist/schema/callables/function.d.ts +3400 -55
- package/dist/schema/callables/function.js +4 -3
- 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 +8737 -5086
- 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 +60 -0
- package/dist/schema/kernel/syscalls/contracts/execution.js +46 -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 +149 -217
- package/dist/schema/kernel/syscalls/contracts/install.js +22 -26
- package/dist/schema/kernel/syscalls/contracts/installation.d.ts +65 -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 +232 -222
- package/dist/schema/kernel/syscalls/contracts/query.js +10 -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 +54 -148
- package/dist/schema/kernel/syscalls/contracts/uninstall.js +6 -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 +105 -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 +870 -1323
- package/dist/schema/kernel/syscalls/declarations/index.js +18 -2
- package/dist/schema/kernel/syscalls/declarations/install.d.ts +29 -172
- package/dist/schema/kernel/syscalls/declarations/install.js +7 -5
- 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 +235 -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 +49 -153
- package/dist/schema/kernel/syscalls/declarations/uninstall.js +4 -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 +153 -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,18 +1,20 @@
|
|
|
1
1
|
import { type builder } from '@astrale-os/kernel-dsl/v1';
|
|
2
2
|
export declare const Iconable: builder.NodeClass<{
|
|
3
|
+
readonly depth: 1;
|
|
3
4
|
readonly abstract: true;
|
|
4
|
-
readonly extends: readonly [builder.
|
|
5
|
+
readonly extends: readonly [builder.ClassReferenceProjection<"node", {
|
|
5
6
|
readonly abstract: true;
|
|
6
|
-
readonly
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
readonly depth: 0;
|
|
8
|
+
readonly properties: never;
|
|
9
|
+
readonly methods: Readonly<Record<never, never>>;
|
|
10
|
+
}, never, never, never>];
|
|
9
11
|
readonly properties: {
|
|
10
|
-
icon: builder.
|
|
11
|
-
readonly type: 'string';
|
|
12
|
-
readonly minLength: 1;
|
|
13
|
-
readonly maxLength: 8000;
|
|
14
|
-
}>, {
|
|
15
|
-
readonly required: false;
|
|
16
|
-
}>;
|
|
12
|
+
readonly icon: builder.AuthoredPropertyProjection<import("@astrale-os/kernel-dsl/value").Value, import("@astrale-os/kernel-dsl/value").Value, false, "icon", "self", never>;
|
|
17
13
|
};
|
|
14
|
+
readonly methods: Readonly<Record<never, never>>;
|
|
15
|
+
readonly effectiveProperties: builder.AuthoredPropertyProjection<import("@astrale-os/kernel-dsl/value").Value, import("@astrale-os/kernel-dsl/value").Value, false, "icon", "self", never>;
|
|
16
|
+
readonly abstractInstanceMethods: never;
|
|
17
|
+
readonly abstractStaticMethods: never;
|
|
18
|
+
readonly effectiveInstanceMethods: never;
|
|
19
|
+
readonly effectiveStaticMethods: never;
|
|
18
20
|
}>;
|
|
@@ -1,16 +1,20 @@
|
|
|
1
1
|
import { type builder } from '@astrale-os/kernel-dsl/v1';
|
|
2
2
|
export declare const Named: builder.NodeClass<{
|
|
3
|
+
readonly depth: 1;
|
|
3
4
|
readonly abstract: true;
|
|
4
|
-
readonly extends: readonly [builder.
|
|
5
|
+
readonly extends: readonly [builder.ClassReferenceProjection<"node", {
|
|
5
6
|
readonly abstract: true;
|
|
6
|
-
readonly
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
readonly depth: 0;
|
|
8
|
+
readonly properties: never;
|
|
9
|
+
readonly methods: Readonly<Record<never, never>>;
|
|
10
|
+
}, never, never, never>];
|
|
9
11
|
readonly properties: {
|
|
10
|
-
readonly name:
|
|
11
|
-
readonly type: "string";
|
|
12
|
-
readonly minLength: 1;
|
|
13
|
-
readonly maxLength: 100;
|
|
14
|
-
};
|
|
12
|
+
readonly name: builder.AuthoredPropertyProjection<import("@astrale-os/kernel-dsl/value").Value, import("@astrale-os/kernel-dsl/value").Value, true, "name", "self", undefined>;
|
|
15
13
|
};
|
|
14
|
+
readonly methods: Readonly<Record<never, never>>;
|
|
15
|
+
readonly effectiveProperties: builder.AuthoredPropertyProjection<import("@astrale-os/kernel-dsl/value").Value, import("@astrale-os/kernel-dsl/value").Value, true, "name", "self", undefined>;
|
|
16
|
+
readonly abstractInstanceMethods: never;
|
|
17
|
+
readonly abstractStaticMethods: never;
|
|
18
|
+
readonly effectiveInstanceMethods: never;
|
|
19
|
+
readonly effectiveStaticMethods: never;
|
|
16
20
|
}>;
|
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
import { type builder } from '@astrale-os/kernel-dsl/v1';
|
|
2
2
|
export declare const Node: builder.NodeClass<{
|
|
3
|
+
readonly depth: 0;
|
|
3
4
|
readonly abstract: true;
|
|
4
|
-
readonly
|
|
5
|
+
readonly extends: readonly [];
|
|
6
|
+
readonly properties: never;
|
|
7
|
+
readonly methods: Readonly<Record<never, never>>;
|
|
8
|
+
readonly effectiveProperties: never;
|
|
9
|
+
readonly abstractInstanceMethods: never;
|
|
10
|
+
readonly abstractStaticMethods: never;
|
|
11
|
+
readonly effectiveInstanceMethods: never;
|
|
12
|
+
readonly effectiveStaticMethods: never;
|
|
5
13
|
}>;
|
|
@@ -1,29 +1,22 @@
|
|
|
1
1
|
import { type builder } from '@astrale-os/kernel-dsl/v1';
|
|
2
2
|
export declare const Remotable: builder.NodeClass<{
|
|
3
|
+
readonly depth: 1;
|
|
3
4
|
readonly abstract: true;
|
|
4
|
-
readonly extends: readonly [builder.
|
|
5
|
+
readonly extends: readonly [builder.ClassReferenceProjection<"node", {
|
|
5
6
|
readonly abstract: true;
|
|
6
|
-
readonly
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
readonly depth: 0;
|
|
8
|
+
readonly properties: never;
|
|
9
|
+
readonly methods: Readonly<Record<never, never>>;
|
|
10
|
+
}, never, never, never>];
|
|
9
11
|
readonly properties: {
|
|
10
|
-
externalId: builder.
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
readonly maxLength: 512;
|
|
14
|
-
}, {
|
|
15
|
-
readonly required: false;
|
|
16
|
-
}>;
|
|
17
|
-
onConflict: builder.Property<{
|
|
18
|
-
readonly enum: readonly ["defaults", "error", "merge", "replace", "skip"];
|
|
19
|
-
}, {
|
|
20
|
-
readonly required: false;
|
|
21
|
-
}>;
|
|
22
|
-
updatedAt: builder.Property<Readonly<{
|
|
23
|
-
readonly type: 'string';
|
|
24
|
-
readonly 'x-astrale-value-kind': 'instant';
|
|
25
|
-
}>, {
|
|
26
|
-
readonly required: false;
|
|
27
|
-
}>;
|
|
12
|
+
readonly externalId: builder.AuthoredPropertyProjection<import("@astrale-os/kernel-dsl/value").Value, import("@astrale-os/kernel-dsl/value").Value, false, "externalId", "self", never>;
|
|
13
|
+
readonly onConflict: builder.AuthoredPropertyProjection<import("@astrale-os/kernel-dsl/value").Value, import("@astrale-os/kernel-dsl/value").Value, false, "onConflict", "self", never>;
|
|
14
|
+
readonly updatedAt: builder.AuthoredPropertyProjection<import("@astrale-os/kernel-dsl/value").Value, import("@astrale-os/kernel-dsl/value").Value, false, "updatedAt", "self", never>;
|
|
28
15
|
};
|
|
16
|
+
readonly methods: Readonly<Record<never, never>>;
|
|
17
|
+
readonly effectiveProperties: builder.AuthoredPropertyProjection<import("@astrale-os/kernel-dsl/value").Value, import("@astrale-os/kernel-dsl/value").Value, false, "externalId", "self", never> | builder.AuthoredPropertyProjection<import("@astrale-os/kernel-dsl/value").Value, import("@astrale-os/kernel-dsl/value").Value, false, "onConflict", "self", never> | builder.AuthoredPropertyProjection<import("@astrale-os/kernel-dsl/value").Value, import("@astrale-os/kernel-dsl/value").Value, false, "updatedAt", "self", never>;
|
|
18
|
+
readonly abstractInstanceMethods: never;
|
|
19
|
+
readonly abstractStaticMethods: never;
|
|
20
|
+
readonly effectiveInstanceMethods: never;
|
|
21
|
+
readonly effectiveStaticMethods: never;
|
|
29
22
|
}>;
|
|
@@ -1,14 +1,20 @@
|
|
|
1
1
|
import { type builder } from '@astrale-os/kernel-dsl/v1';
|
|
2
2
|
export declare const Statused: builder.NodeClass<{
|
|
3
|
+
readonly depth: 1;
|
|
3
4
|
readonly abstract: true;
|
|
4
|
-
readonly extends: readonly [builder.
|
|
5
|
+
readonly extends: readonly [builder.ClassReferenceProjection<"node", {
|
|
5
6
|
readonly abstract: true;
|
|
6
|
-
readonly
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
readonly depth: 0;
|
|
8
|
+
readonly properties: never;
|
|
9
|
+
readonly methods: Readonly<Record<never, never>>;
|
|
10
|
+
}, never, never, never>];
|
|
9
11
|
readonly properties: {
|
|
10
|
-
readonly status:
|
|
11
|
-
readonly enum: readonly ["active", "creating", "deleting", "error", "updating"];
|
|
12
|
-
};
|
|
12
|
+
readonly status: builder.AuthoredPropertyProjection<import("@astrale-os/kernel-dsl/value").Value, import("@astrale-os/kernel-dsl/value").Value, true, "status", "self", undefined>;
|
|
13
13
|
};
|
|
14
|
+
readonly methods: Readonly<Record<never, never>>;
|
|
15
|
+
readonly effectiveProperties: builder.AuthoredPropertyProjection<import("@astrale-os/kernel-dsl/value").Value, import("@astrale-os/kernel-dsl/value").Value, true, "status", "self", undefined>;
|
|
16
|
+
readonly abstractInstanceMethods: never;
|
|
17
|
+
readonly abstractStaticMethods: never;
|
|
18
|
+
readonly effectiveInstanceMethods: never;
|
|
19
|
+
readonly effectiveStaticMethods: never;
|
|
14
20
|
}>;
|
|
@@ -1,19 +1,21 @@
|
|
|
1
1
|
import { type builder } from '@astrale-os/kernel-dsl/v1';
|
|
2
2
|
export declare const Timestamped: builder.NodeClass<{
|
|
3
|
+
readonly depth: 1;
|
|
3
4
|
readonly abstract: true;
|
|
4
|
-
readonly extends: readonly [builder.
|
|
5
|
+
readonly extends: readonly [builder.ClassReferenceProjection<"node", {
|
|
5
6
|
readonly abstract: true;
|
|
6
|
-
readonly
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
readonly depth: 0;
|
|
8
|
+
readonly properties: never;
|
|
9
|
+
readonly methods: Readonly<Record<never, never>>;
|
|
10
|
+
}, never, never, never>];
|
|
9
11
|
readonly properties: {
|
|
10
|
-
createdAt: builder.
|
|
11
|
-
|
|
12
|
-
readonly 'x-astrale-value-kind': 'instant';
|
|
13
|
-
}>, builder.PropertyOptions>>;
|
|
14
|
-
updatedAt: builder.AutoProperty<builder.Property<Readonly<{
|
|
15
|
-
readonly type: 'string';
|
|
16
|
-
readonly 'x-astrale-value-kind': 'instant';
|
|
17
|
-
}>, builder.PropertyOptions>>;
|
|
12
|
+
readonly createdAt: builder.AuthoredPropertyProjection<never, import("@astrale-os/kernel-dsl/value").Value, true, "createdAt", "self", undefined>;
|
|
13
|
+
readonly updatedAt: builder.AuthoredPropertyProjection<never, import("@astrale-os/kernel-dsl/value").Value, true, "updatedAt", "self", undefined>;
|
|
18
14
|
};
|
|
15
|
+
readonly methods: Readonly<Record<never, never>>;
|
|
16
|
+
readonly effectiveProperties: builder.AuthoredPropertyProjection<never, import("@astrale-os/kernel-dsl/value").Value, true, "createdAt", "self", undefined> | builder.AuthoredPropertyProjection<never, import("@astrale-os/kernel-dsl/value").Value, true, "updatedAt", "self", undefined>;
|
|
17
|
+
readonly abstractInstanceMethods: never;
|
|
18
|
+
readonly abstractStaticMethods: never;
|
|
19
|
+
readonly effectiveInstanceMethods: never;
|
|
20
|
+
readonly effectiveStaticMethods: never;
|
|
19
21
|
}>;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@astrale-os/kernel-core",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "1.0.0-beta.2",
|
|
4
4
|
"description": "Astrale Kernel Core - Types, Invariants, and Pure Logic",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"repository": {
|
|
@@ -160,18 +160,21 @@
|
|
|
160
160
|
"access": "public"
|
|
161
161
|
},
|
|
162
162
|
"dependencies": {
|
|
163
|
-
"@astrale-os/kernel-dsl": "
|
|
163
|
+
"@astrale-os/kernel-dsl": "1.0.0-beta.2",
|
|
164
164
|
"@noble/hashes": "2.3.0",
|
|
165
165
|
"@types/json-schema": "^7.0.15",
|
|
166
|
-
"dequal": "2.0.3"
|
|
167
|
-
"zod": "^4.3.6"
|
|
166
|
+
"dequal": "2.0.3"
|
|
168
167
|
},
|
|
169
168
|
"devDependencies": {
|
|
170
169
|
"@astrale/typescript-config": "npm:@jsr/astrale__typescript-config@~1.1.0",
|
|
171
170
|
"@types/node": "^25.2.3",
|
|
172
171
|
"tsx": "4.23.12",
|
|
173
172
|
"typescript": "7.0.2",
|
|
174
|
-
"vitest": "^
|
|
173
|
+
"vitest": "^5.0.1",
|
|
174
|
+
"zod": "4.4.3"
|
|
175
|
+
},
|
|
176
|
+
"peerDependencies": {
|
|
177
|
+
"zod": "^4.4.3"
|
|
175
178
|
},
|
|
176
179
|
"scripts": {
|
|
177
180
|
"build": "tsc",
|
|
@@ -183,7 +186,6 @@
|
|
|
183
186
|
"test": "vitest run",
|
|
184
187
|
"test:file": "vitest run",
|
|
185
188
|
"test:watch": "vitest",
|
|
186
|
-
"typecheck": "tsc --noEmit && tsc --noEmit -p tsconfig.types.json && tsc --noEmit -p schema/.module/tsconfig.json"
|
|
187
|
-
"preinstall": "node -e \"try{require('./.check-workspace.cjs')}catch{}\""
|
|
189
|
+
"typecheck": "tsc --noEmit && tsc --noEmit -p tsconfig.types.json && tsc --noEmit -p schema/.module/tsconfig.json && tsc -p tsconfig.workers.json"
|
|
188
190
|
}
|
|
189
191
|
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import * as portable from '@astrale-os/kernel-dsl/value';
|
|
2
|
-
import type { IdentityExpr } from '../language/index.js';
|
|
3
|
-
export declare const EXPRESSION_DEPTH_LIMIT = 32;
|
|
4
|
-
export declare const EXPRESSION_OPERAND_LIMIT = 64;
|
|
5
|
-
/** Validate and canonicalize a resolved expression. */
|
|
6
|
-
export declare function canonicalize(expr: IdentityExpr): IdentityExpr;
|
|
7
|
-
export declare function admitResolvedExpression(input: portable.Value, path: string, depth: number): IdentityExpr;
|
|
@@ -1,102 +0,0 @@
|
|
|
1
|
-
import * as portable from '@astrale-os/kernel-dsl/value';
|
|
2
|
-
import { NodeId } from '../../../graph/node/index.js';
|
|
3
|
-
import { AuthValueError } from '../../error.js';
|
|
4
|
-
export const EXPRESSION_DEPTH_LIMIT = 32;
|
|
5
|
-
export const EXPRESSION_OPERAND_LIMIT = 64;
|
|
6
|
-
/** Validate and canonicalize a resolved expression. */
|
|
7
|
-
export function canonicalize(expr) {
|
|
8
|
-
try {
|
|
9
|
-
return admit(portable.accept(expr), '', 0);
|
|
10
|
-
}
|
|
11
|
-
catch (cause) {
|
|
12
|
-
if (cause instanceof AuthValueError)
|
|
13
|
-
throw cause;
|
|
14
|
-
throw new AuthValueError('AUTH_GRANT_INVALID', 'Expected a resolved Identity expression', '', {
|
|
15
|
-
cause,
|
|
16
|
-
});
|
|
17
|
-
}
|
|
18
|
-
}
|
|
19
|
-
export function admitResolvedExpression(input, path, depth) {
|
|
20
|
-
return admit(input, path, depth);
|
|
21
|
-
}
|
|
22
|
-
function admit(input, path, depth) {
|
|
23
|
-
if (depth > EXPRESSION_DEPTH_LIMIT)
|
|
24
|
-
invalid(path, 'Identity expression exceeds its depth limit');
|
|
25
|
-
const value = record(input, path);
|
|
26
|
-
switch (value.kind) {
|
|
27
|
-
case 'identity':
|
|
28
|
-
exact(value, ['id', 'kind'], path);
|
|
29
|
-
if (typeof value.id !== 'string')
|
|
30
|
-
invalid(`${path}/id`, 'Expected a NodeId');
|
|
31
|
-
return Object.freeze({ kind: 'identity', id: NodeId(value.id) });
|
|
32
|
-
case 'union':
|
|
33
|
-
case 'intersect': {
|
|
34
|
-
exact(value, ['kind', 'operands'], path);
|
|
35
|
-
const source = list(value.operands, `${path}/operands`, 2);
|
|
36
|
-
const kind = value.kind;
|
|
37
|
-
const operands = unique(source
|
|
38
|
-
.map((operand, index) => admit(operand, `${path}/operands/${index}`, depth + 1))
|
|
39
|
-
.flatMap((operand) => (operand.kind === kind ? operand.operands : [operand])));
|
|
40
|
-
if (operands.length > EXPRESSION_OPERAND_LIMIT) {
|
|
41
|
-
invalid(`${path}/operands`, `Expected 2-${EXPRESSION_OPERAND_LIMIT} operands`);
|
|
42
|
-
}
|
|
43
|
-
return operands.length === 1
|
|
44
|
-
? operands[0]
|
|
45
|
-
: Object.freeze({ kind, operands: Object.freeze(operands) });
|
|
46
|
-
}
|
|
47
|
-
case 'exclude': {
|
|
48
|
-
exact(value, ['base', 'excluded', 'kind'], path);
|
|
49
|
-
const excluded = unique(list(value.excluded, `${path}/excluded`, 1)
|
|
50
|
-
.map((operand, index) => admit(operand, `${path}/excluded/${index}`, depth + 1))
|
|
51
|
-
.flatMap((operand) => (operand.kind === 'union' ? operand.operands : [operand])));
|
|
52
|
-
if (excluded.length > EXPRESSION_OPERAND_LIMIT) {
|
|
53
|
-
invalid(`${path}/excluded`, `Expected 1-${EXPRESSION_OPERAND_LIMIT} operands`);
|
|
54
|
-
}
|
|
55
|
-
return Object.freeze({
|
|
56
|
-
kind: 'exclude',
|
|
57
|
-
base: admit(required(value.base, `${path}/base`), `${path}/base`, depth + 1),
|
|
58
|
-
excluded: Object.freeze(excluded),
|
|
59
|
-
});
|
|
60
|
-
}
|
|
61
|
-
default:
|
|
62
|
-
invalid(`${path}/kind`, 'Expected identity, union, intersect, or exclude');
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
function unique(input) {
|
|
66
|
-
const keyed = input
|
|
67
|
-
.map((expr) => ({ expr, key: portable.json.serialize(expr) }))
|
|
68
|
-
.sort((left, right) => compare(left.key, right.key));
|
|
69
|
-
return keyed
|
|
70
|
-
.filter((entry, index) => index === 0 || entry.key !== keyed[index - 1].key)
|
|
71
|
-
.map((entry) => entry.expr);
|
|
72
|
-
}
|
|
73
|
-
function record(input, path) {
|
|
74
|
-
if (input === null || Array.isArray(input) || typeof input !== 'object') {
|
|
75
|
-
invalid(path, 'Expected an object');
|
|
76
|
-
}
|
|
77
|
-
return input;
|
|
78
|
-
}
|
|
79
|
-
function list(input, path, minimum) {
|
|
80
|
-
if (!Array.isArray(input) || input.length < minimum || input.length > EXPRESSION_OPERAND_LIMIT) {
|
|
81
|
-
invalid(path, `Expected ${minimum}-${EXPRESSION_OPERAND_LIMIT} operands`);
|
|
82
|
-
}
|
|
83
|
-
return input;
|
|
84
|
-
}
|
|
85
|
-
function required(input, path) {
|
|
86
|
-
if (input === undefined)
|
|
87
|
-
invalid(path, 'Expected a value');
|
|
88
|
-
return input;
|
|
89
|
-
}
|
|
90
|
-
function exact(value, expected, path) {
|
|
91
|
-
const actual = Object.keys(value).sort(compare);
|
|
92
|
-
const wanted = [...expected].sort(compare);
|
|
93
|
-
if (actual.length !== wanted.length || actual.some((key, index) => key !== wanted[index])) {
|
|
94
|
-
invalid(path, `Expected exactly ${expected.join(', ')}`);
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
function compare(left, right) {
|
|
98
|
-
return left < right ? -1 : left > right ? 1 : 0;
|
|
99
|
-
}
|
|
100
|
-
function invalid(path, message) {
|
|
101
|
-
throw new AuthValueError('AUTH_GRANT_INVALID', message, path);
|
|
102
|
-
}
|
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
/** Raise every positive-position exclusion into one Grant-wide veto. */
|
|
2
|
-
export function raiseDenials(expr) {
|
|
3
|
-
const denials = [...collectDenials(expr, new WeakMap())];
|
|
4
|
-
if (denials.length === 0)
|
|
5
|
-
return expr;
|
|
6
|
-
return Object.freeze({
|
|
7
|
-
kind: 'exclude',
|
|
8
|
-
base: stripExcludes(expr, new WeakMap()),
|
|
9
|
-
excluded: Object.freeze(denials),
|
|
10
|
-
});
|
|
11
|
-
}
|
|
12
|
-
function stripExcludes(expr, memo) {
|
|
13
|
-
const cached = memo.get(expr);
|
|
14
|
-
if (cached !== undefined)
|
|
15
|
-
return cached;
|
|
16
|
-
let stripped;
|
|
17
|
-
switch (expr.kind) {
|
|
18
|
-
case 'identity':
|
|
19
|
-
stripped = expr;
|
|
20
|
-
break;
|
|
21
|
-
case 'union':
|
|
22
|
-
case 'intersect':
|
|
23
|
-
stripped = Object.freeze({
|
|
24
|
-
kind: expr.kind,
|
|
25
|
-
operands: Object.freeze(expr.operands.map((operand) => stripExcludes(operand, memo))),
|
|
26
|
-
});
|
|
27
|
-
break;
|
|
28
|
-
case 'exclude':
|
|
29
|
-
stripped = stripExcludes(expr.base, memo);
|
|
30
|
-
break;
|
|
31
|
-
}
|
|
32
|
-
memo.set(expr, stripped);
|
|
33
|
-
return stripped;
|
|
34
|
-
}
|
|
35
|
-
function collectDenials(expr, memo) {
|
|
36
|
-
const cached = memo.get(expr);
|
|
37
|
-
if (cached !== undefined)
|
|
38
|
-
return cached;
|
|
39
|
-
const denials = new Set();
|
|
40
|
-
switch (expr.kind) {
|
|
41
|
-
case 'identity':
|
|
42
|
-
break;
|
|
43
|
-
case 'union':
|
|
44
|
-
case 'intersect':
|
|
45
|
-
for (const operand of expr.operands) {
|
|
46
|
-
for (const denial of collectDenials(operand, memo))
|
|
47
|
-
denials.add(denial);
|
|
48
|
-
}
|
|
49
|
-
break;
|
|
50
|
-
case 'exclude':
|
|
51
|
-
for (const excluded of expr.excluded)
|
|
52
|
-
denials.add(excluded);
|
|
53
|
-
for (const denial of collectDenials(expr.base, memo))
|
|
54
|
-
denials.add(denial);
|
|
55
|
-
break;
|
|
56
|
-
}
|
|
57
|
-
memo.set(expr, denials);
|
|
58
|
-
return denials;
|
|
59
|
-
}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import type { ProvisionRequest } from '../index.js';
|
|
2
|
-
declare const PROVISION_FINGERPRINT: unique symbol;
|
|
3
|
-
/** Digest of the semantic request. Self-proof bytes are deliberately excluded. */
|
|
4
|
-
export type ProvisionFingerprint = `sha256:${string}` & {
|
|
5
|
-
readonly [PROVISION_FINGERPRINT]: true;
|
|
6
|
-
};
|
|
7
|
-
/** Compute a deterministic semantic request digest without retaining bearer proof bytes. */
|
|
8
|
-
export declare function fingerprint(request: ProvisionRequest): Promise<ProvisionFingerprint>;
|
|
9
|
-
export {};
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
import * as portable from '@astrale-os/kernel-dsl/value';
|
|
2
|
-
import { MutationAST } from '../../../graph/mutate/index.js';
|
|
3
|
-
/** Compute a deterministic semantic request digest without retaining bearer proof bytes. */
|
|
4
|
-
export async function fingerprint(request) {
|
|
5
|
-
const identities = Object.fromEntries(Object.entries(request.identities)
|
|
6
|
-
.sort(([left], [right]) => compare(left, right))
|
|
7
|
-
.map(([binding, input]) => [
|
|
8
|
-
binding,
|
|
9
|
-
input.credentials !== undefined
|
|
10
|
-
? {
|
|
11
|
-
credentials: { publicKey: input.credentials.publicKey },
|
|
12
|
-
requiredClaims: input.requiredClaims ?? [],
|
|
13
|
-
}
|
|
14
|
-
: {
|
|
15
|
-
issuer: input.issuer,
|
|
16
|
-
subject: input.subject,
|
|
17
|
-
requiredClaims: input.requiredClaims ?? [],
|
|
18
|
-
},
|
|
19
|
-
]));
|
|
20
|
-
const basis = portable.json.encode(portable.accept({
|
|
21
|
-
idempotencyKey: request.idempotencyKey,
|
|
22
|
-
mutation: MutationAST.encode(request.mutation),
|
|
23
|
-
identities,
|
|
24
|
-
}));
|
|
25
|
-
const digest = await crypto.subtle.digest('SHA-256', Uint8Array.from(basis).buffer);
|
|
26
|
-
return `sha256:${hex(new Uint8Array(digest))}`;
|
|
27
|
-
}
|
|
28
|
-
function compare(left, right) {
|
|
29
|
-
return left < right ? -1 : left > right ? 1 : 0;
|
|
30
|
-
}
|
|
31
|
-
function hex(input) {
|
|
32
|
-
return [...input].map((value) => value.toString(16).padStart(2, '0')).join('');
|
|
33
|
-
}
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
export { fingerprint } from './fingerprint/index.js';
|
|
2
|
-
export type { ProvisionFingerprint } from './fingerprint/index.js';
|
|
3
|
-
export { accept, isSelfIssuer, selfIssuer } from './request/index.js';
|
|
4
|
-
export type { AssertedIdentityProvision, IdentityProvisionInput, ProvisionRequest, RequiredClaims, SelfIdentityProvision, } from './request/index.js';
|
|
5
|
-
export type { ProvisionedIdentity, ProvisionResult } from './result/index.js';
|
|
@@ -1,125 +0,0 @@
|
|
|
1
|
-
import * as portable from '@astrale-os/kernel-dsl/value';
|
|
2
|
-
import { isLocalBinding } from '../../../graph/graph/index.js';
|
|
3
|
-
import { MutationAST } from '../../../graph/mutate/index.js';
|
|
4
|
-
import { admitConstraint, MAX_REQUIRED_CLAIMS } from '../../claims/admission/index.js';
|
|
5
|
-
import { AuthValueError } from '../../error.js';
|
|
6
|
-
import { accept as acceptIssuer } from '../../issuer/index.js';
|
|
7
|
-
import { acceptPublic } from '../../jwk/index.js';
|
|
8
|
-
const PROOF_BYTES_LIMIT = 64 * 1024;
|
|
9
|
-
const textEncoder = new TextEncoder();
|
|
10
|
-
/** Admit unknown input into the exact immutable Provision request language. */
|
|
11
|
-
export function accept(input) {
|
|
12
|
-
if (!isRecord(input))
|
|
13
|
-
invalid('', 'Expected a Provision request object');
|
|
14
|
-
exact(input, ['idempotencyKey', 'identities', 'mutation'], '');
|
|
15
|
-
if (typeof input.idempotencyKey !== 'string' || input.idempotencyKey.length === 0) {
|
|
16
|
-
invalid('/idempotencyKey', 'Expected a non-empty idempotency key');
|
|
17
|
-
}
|
|
18
|
-
const mutation = MutationAST.decode(input.mutation);
|
|
19
|
-
if (!isRecord(input.identities))
|
|
20
|
-
invalid('/identities', 'Expected an Identity binding map');
|
|
21
|
-
const identities = {};
|
|
22
|
-
for (const binding of Object.keys(input.identities).sort(compare)) {
|
|
23
|
-
if (!isLocalBinding(binding))
|
|
24
|
-
invalid(`/identities/${pointer(binding)}`, 'Invalid LocalBinding');
|
|
25
|
-
identities[binding] = identityInput(input.identities[binding], `/identities/${pointer(binding)}`);
|
|
26
|
-
}
|
|
27
|
-
return Object.freeze({
|
|
28
|
-
idempotencyKey: input.idempotencyKey,
|
|
29
|
-
mutation,
|
|
30
|
-
identities: Object.freeze(identities),
|
|
31
|
-
});
|
|
32
|
-
}
|
|
33
|
-
function identityInput(input, path) {
|
|
34
|
-
if (!isRecord(input))
|
|
35
|
-
invalid(path, 'Expected an Identity provision object');
|
|
36
|
-
const requiredClaims = constraints(input.requiredClaims, `${path}/requiredClaims`);
|
|
37
|
-
if (Object.hasOwn(input, 'credentials')) {
|
|
38
|
-
exact(input, input.requiredClaims === undefined ? ['credentials'] : ['credentials', 'requiredClaims'], path);
|
|
39
|
-
if (!isRecord(input.credentials))
|
|
40
|
-
invalid(`${path}/credentials`, 'Expected credentials');
|
|
41
|
-
exact(input.credentials, ['proof', 'publicKey'], `${path}/credentials`);
|
|
42
|
-
return Object.freeze({
|
|
43
|
-
credentials: Object.freeze({
|
|
44
|
-
publicKey: publicJwk(input.credentials.publicKey, `${path}/credentials/publicKey`),
|
|
45
|
-
proof: credentialProof(input.credentials.proof, `${path}/credentials/proof`),
|
|
46
|
-
}),
|
|
47
|
-
...(requiredClaims.length === 0 ? {} : { requiredClaims }),
|
|
48
|
-
});
|
|
49
|
-
}
|
|
50
|
-
exact(input, input.requiredClaims === undefined
|
|
51
|
-
? ['issuer', 'subject']
|
|
52
|
-
: ['issuer', 'requiredClaims', 'subject'], path);
|
|
53
|
-
if (typeof input.issuer !== 'string')
|
|
54
|
-
invalid(`${path}/issuer`, 'Expected an issuer');
|
|
55
|
-
let issuer;
|
|
56
|
-
try {
|
|
57
|
-
issuer = acceptIssuer(input.issuer);
|
|
58
|
-
}
|
|
59
|
-
catch (cause) {
|
|
60
|
-
invalid(`${path}/issuer`, 'Expected a canonical issuer', cause);
|
|
61
|
-
}
|
|
62
|
-
if (typeof input.subject !== 'string' || input.subject.length === 0)
|
|
63
|
-
invalid(`${path}/subject`, 'Expected a non-empty subject');
|
|
64
|
-
return Object.freeze({
|
|
65
|
-
issuer,
|
|
66
|
-
subject: input.subject,
|
|
67
|
-
...(requiredClaims.length === 0 ? {} : { requiredClaims }),
|
|
68
|
-
});
|
|
69
|
-
}
|
|
70
|
-
function credentialProof(input, path) {
|
|
71
|
-
if (typeof input === 'string') {
|
|
72
|
-
const bytes = textEncoder.encode(input).byteLength;
|
|
73
|
-
if (bytes === 0 || bytes > PROOF_BYTES_LIMIT)
|
|
74
|
-
invalid(path, `Credential proof must contain 1-${PROOF_BYTES_LIMIT} bytes`);
|
|
75
|
-
return input;
|
|
76
|
-
}
|
|
77
|
-
if (!(input instanceof Uint8Array) ||
|
|
78
|
-
input.byteLength === 0 ||
|
|
79
|
-
input.byteLength > PROOF_BYTES_LIMIT) {
|
|
80
|
-
invalid(path, `Credential proof must contain 1-${PROOF_BYTES_LIMIT} bytes`);
|
|
81
|
-
}
|
|
82
|
-
return input.slice();
|
|
83
|
-
}
|
|
84
|
-
function publicJwk(input, path) {
|
|
85
|
-
try {
|
|
86
|
-
return acceptPublic(input);
|
|
87
|
-
}
|
|
88
|
-
catch (cause) {
|
|
89
|
-
invalid(path, 'Expected a thumbprintable public JWK', cause);
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
function constraints(input, path) {
|
|
93
|
-
if (input === undefined)
|
|
94
|
-
return Object.freeze([]);
|
|
95
|
-
if (!Array.isArray(input) || input.length > MAX_REQUIRED_CLAIMS)
|
|
96
|
-
invalid(path, `Expected at most ${MAX_REQUIRED_CLAIMS} required-claim constraints`);
|
|
97
|
-
return Object.freeze(input.map((item, index) => {
|
|
98
|
-
let admitted;
|
|
99
|
-
try {
|
|
100
|
-
admitted = portable.accept(item);
|
|
101
|
-
}
|
|
102
|
-
catch (cause) {
|
|
103
|
-
invalid(`${path}/${index}`, 'Expected a portable claim constraint', cause);
|
|
104
|
-
}
|
|
105
|
-
return admitConstraint(admitted, `${path}/${index}`, invalid);
|
|
106
|
-
}));
|
|
107
|
-
}
|
|
108
|
-
function isRecord(input) {
|
|
109
|
-
return input !== null && typeof input === 'object' && !Array.isArray(input);
|
|
110
|
-
}
|
|
111
|
-
function exact(input, expected, path) {
|
|
112
|
-
const actual = Object.keys(input).sort(compare);
|
|
113
|
-
const wanted = [...expected].sort(compare);
|
|
114
|
-
if (actual.length !== wanted.length || actual.some((key, index) => key !== wanted[index]))
|
|
115
|
-
invalid(path, `Expected exactly ${expected.join(', ')}`);
|
|
116
|
-
}
|
|
117
|
-
function pointer(input) {
|
|
118
|
-
return input.replaceAll('~', '~0').replaceAll('/', '~1');
|
|
119
|
-
}
|
|
120
|
-
function compare(left, right) {
|
|
121
|
-
return left < right ? -1 : left > right ? 1 : 0;
|
|
122
|
-
}
|
|
123
|
-
function invalid(path, message, cause) {
|
|
124
|
-
throw new AuthValueError('AUTH_PROVISION_REQUEST_INVALID', message, path, cause === undefined ? undefined : { cause });
|
|
125
|
-
}
|