@astrale-os/kernel-protocol 0.5.0-beta.6 → 0.5.0-beta.61
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/artifact/index.d.ts +1 -2
- package/dist/artifact/index.js +1 -2
- package/dist/artifact/ref.d.ts +2 -1
- package/dist/artifact/ref.js +4 -4
- package/dist/codecs/codec.d.ts +0 -1
- package/dist/codecs/codec.js +0 -1
- package/dist/codecs/index.d.ts +0 -1
- package/dist/codecs/index.js +0 -1
- package/dist/codecs/json.d.ts +0 -1
- package/dist/codecs/json.js +0 -1
- package/dist/codecs/media-types.d.ts +0 -1
- package/dist/codecs/media-types.js +0 -1
- package/dist/codecs/msgpack.d.ts +0 -1
- package/dist/codecs/msgpack.js +4 -2
- package/dist/errors/codes.d.ts +0 -1
- package/dist/errors/codes.js +0 -1
- package/dist/errors/http-status.d.ts +0 -1
- package/dist/errors/http-status.js +0 -1
- package/dist/errors/index.d.ts +0 -1
- package/dist/errors/index.js +0 -1
- package/dist/errors/payload.d.ts +0 -1
- package/dist/errors/payload.js +3 -3
- package/dist/errors/protocol-error.d.ts +0 -1
- package/dist/errors/protocol-error.js +4 -3
- package/dist/errors/reason.d.ts +0 -1
- package/dist/errors/reason.js +0 -1
- package/dist/index.d.ts +0 -1
- package/dist/index.js +0 -1
- package/dist/invocation/admission.d.ts +0 -1
- package/dist/invocation/admission.js +2 -6
- package/dist/invocation/binary.d.ts +1 -1
- package/dist/invocation/binary.js +21 -5
- package/dist/invocation/binding-codecs.d.ts +0 -1
- package/dist/invocation/binding-codecs.js +0 -1
- package/dist/invocation/cancellation.d.ts +0 -1
- package/dist/invocation/cancellation.js +0 -1
- package/dist/invocation/correlation.d.ts +0 -1
- package/dist/invocation/correlation.js +0 -1
- package/dist/invocation/delegate.d.ts +0 -1
- package/dist/invocation/delegate.js +0 -1
- package/dist/invocation/http/binary.d.ts +3 -2
- package/dist/invocation/http/binary.js +4 -2
- package/dist/invocation/http/index.d.ts +2 -2
- package/dist/invocation/http/index.js +2 -2
- package/dist/invocation/http/negotiation.d.ts +0 -1
- package/dist/invocation/http/negotiation.js +0 -1
- package/dist/invocation/http/request.d.ts +9 -0
- package/dist/invocation/http/request.js +61 -0
- package/dist/invocation/http/stream.d.ts +0 -1
- package/dist/invocation/http/stream.js +0 -1
- package/dist/invocation/http/trace.d.ts +0 -1
- package/dist/invocation/http/trace.js +0 -1
- package/dist/invocation/idempotency.d.ts +0 -1
- package/dist/invocation/idempotency.js +0 -1
- package/dist/invocation/identity.d.ts +0 -1
- package/dist/invocation/identity.js +0 -1
- package/dist/invocation/index.d.ts +2 -3
- package/dist/invocation/index.js +2 -3
- package/dist/invocation/miss.d.ts +0 -1
- package/dist/invocation/miss.js +0 -1
- package/dist/invocation/redirect.d.ts +0 -1
- package/dist/invocation/redirect.js +0 -1
- package/dist/invocation/request.d.ts +0 -1
- package/dist/invocation/request.js +0 -1
- package/dist/invocation/response.d.ts +0 -1
- package/dist/invocation/response.js +0 -1
- package/dist/invocation/routing.d.ts +0 -1
- package/dist/invocation/routing.js +0 -1
- package/dist/invocation/schema.d.ts +10 -4
- package/dist/invocation/schema.js +7 -7
- package/dist/invocation/service-reason.d.ts +16 -12
- package/dist/invocation/service-reason.js +15 -9
- package/dist/invocation/stale-route.d.ts +0 -1
- package/dist/invocation/stale-route.js +0 -1
- package/dist/invocation/stream.d.ts +0 -1
- package/dist/invocation/stream.js +0 -1
- package/dist/invocation/target.d.ts +2 -3
- package/dist/invocation/target.js +17 -3
- package/dist/invocation/trace.d.ts +0 -1
- package/dist/invocation/trace.js +0 -1
- package/dist/invocation/version.d.ts +0 -1
- package/dist/invocation/version.js +0 -1
- package/dist/invocation/websocket/binary.d.ts +0 -1
- package/dist/invocation/websocket/binary.js +2 -2
- package/dist/invocation/websocket/index.d.ts +0 -1
- package/dist/invocation/websocket/index.js +0 -1
- package/dist/invocation/websocket/subprotocol.d.ts +0 -1
- package/dist/invocation/websocket/subprotocol.js +0 -1
- package/dist/issuer/configuration.d.ts +0 -1
- package/dist/issuer/configuration.js +0 -1
- package/dist/issuer/error.d.ts +0 -1
- package/dist/issuer/error.js +0 -1
- package/dist/issuer/exchange.d.ts +0 -1
- package/dist/issuer/exchange.js +0 -1
- package/dist/issuer/hosted.d.ts +0 -1
- package/dist/issuer/hosted.js +0 -1
- package/dist/issuer/index.d.ts +0 -1
- package/dist/issuer/index.js +0 -1
- package/dist/issuer/key-set.d.ts +0 -1
- package/dist/issuer/key-set.js +0 -1
- package/dist/issuer/paths.d.ts +0 -1
- package/dist/issuer/paths.js +0 -1
- package/dist/issuer/url.d.ts +0 -1
- package/dist/issuer/url.js +0 -1
- package/dist/publication/bindings/callable.d.ts +0 -1
- package/dist/publication/bindings/callable.js +8 -6
- package/dist/publication/bindings/index.d.ts +1 -2
- package/dist/publication/bindings/index.js +0 -1
- package/dist/publication/bindings/invocation.d.ts +0 -1
- package/dist/publication/bindings/invocation.js +0 -1
- package/dist/publication/bindings/view.d.ts +9 -1
- package/dist/publication/bindings/view.js +122 -3
- package/dist/publication/bundle-admission.d.ts +0 -1
- package/dist/publication/bundle-admission.js +14 -14
- package/dist/publication/bundle-descriptor.d.ts +0 -1
- package/dist/publication/bundle-descriptor.js +0 -1
- package/dist/publication/bundle-evidence.d.ts +0 -1
- package/dist/publication/bundle-evidence.js +0 -1
- package/dist/publication/bundle.d.ts +4 -2
- package/dist/publication/bundle.js +9 -4
- package/dist/publication/content.d.ts +0 -1
- package/dist/publication/content.js +0 -1
- package/dist/publication/declaration.d.ts +0 -1
- package/dist/publication/declaration.js +0 -1
- package/dist/publication/delivery/attestation.d.ts +0 -1
- package/dist/publication/delivery/attestation.js +0 -1
- package/dist/publication/delivery/claims.d.ts +1 -2
- package/dist/publication/delivery/claims.js +0 -1
- package/dist/publication/delivery/delivery.d.ts +0 -1
- package/dist/publication/delivery/delivery.js +0 -1
- package/dist/publication/delivery/error.d.ts +0 -1
- package/dist/publication/delivery/error.js +0 -1
- package/dist/publication/delivery/index.d.ts +0 -1
- package/dist/publication/delivery/index.js +0 -1
- package/dist/publication/delivery/limits.d.ts +0 -1
- package/dist/publication/delivery/limits.js +0 -1
- package/dist/publication/delivery/request.d.ts +0 -1
- package/dist/publication/delivery/request.js +0 -1
- package/dist/publication/delivery-declaration.d.ts +0 -1
- package/dist/publication/delivery-declaration.js +0 -1
- package/dist/publication/delivery-endpoint.d.ts +0 -1
- package/dist/publication/delivery-endpoint.js +0 -1
- package/dist/publication/error.d.ts +0 -1
- package/dist/publication/error.js +0 -1
- package/dist/publication/etag.d.ts +0 -1
- package/dist/publication/etag.js +5 -2
- package/dist/publication/index.d.ts +4 -5
- package/dist/publication/index.js +2 -3
- package/dist/publication/legacy-requirements.d.ts +12 -0
- package/dist/publication/legacy-requirements.js +23 -0
- package/dist/publication/manifest.d.ts +2 -3
- package/dist/publication/manifest.js +10 -6
- package/dist/publication/publication.d.ts +4 -3
- package/dist/publication/publication.js +27 -12
- package/dist/publication/reference.d.ts +1 -2
- package/dist/publication/reference.js +0 -1
- package/dist/publication/requirements.d.ts +15 -8
- package/dist/publication/requirements.js +147 -45
- package/dist/publication/route.d.ts +0 -1
- package/dist/publication/route.js +0 -1
- package/dist/publication/schema.d.ts +1 -2
- package/dist/publication/schema.js +0 -1
- package/dist/routes/admission.d.ts +0 -1
- package/dist/routes/admission.js +5 -6
- package/dist/routes/binding.d.ts +3 -4
- package/dist/routes/binding.js +6 -8
- package/dist/routes/collision.d.ts +0 -1
- package/dist/routes/collision.js +0 -1
- package/dist/routes/compiler.d.ts +2 -3
- package/dist/routes/compiler.js +18 -12
- package/dist/routes/credential.d.ts +0 -1
- package/dist/routes/credential.js +0 -1
- package/dist/routes/decode.d.ts +2 -3
- package/dist/routes/decode.js +14 -25
- package/dist/routes/encode.d.ts +2 -3
- package/dist/routes/encode.js +18 -17
- package/dist/routes/error-response.d.ts +0 -1
- package/dist/routes/error-response.js +0 -1
- package/dist/routes/error.d.ts +0 -1
- package/dist/routes/error.js +0 -1
- package/dist/routes/evidence.d.ts +3 -4
- package/dist/routes/evidence.js +15 -14
- package/dist/routes/index.d.ts +0 -1
- package/dist/routes/index.js +0 -1
- package/dist/routes/mapping.d.ts +0 -1
- package/dist/routes/mapping.js +0 -1
- package/dist/routes/match.d.ts +0 -1
- package/dist/routes/match.js +0 -1
- package/dist/routes/placement.d.ts +0 -1
- package/dist/routes/placement.js +1 -2
- package/dist/routes/plan.d.ts +5 -5
- package/dist/routes/plan.js +0 -1
- package/dist/routes/release-unavailable.d.ts +0 -1
- package/dist/routes/release-unavailable.js +0 -1
- package/dist/routes/request.d.ts +0 -1
- package/dist/routes/request.js +3 -2
- package/dist/routes/reservation.d.ts +0 -1
- package/dist/routes/reservation.js +7 -2
- package/dist/routes/routing.d.ts +0 -1
- package/dist/routes/routing.js +0 -1
- package/dist/routes/scalar.d.ts +3 -4
- package/dist/routes/scalar.js +5 -6
- package/dist/routes/select.d.ts +0 -1
- package/dist/routes/select.js +0 -1
- package/dist/routes/stream.d.ts +0 -1
- package/dist/routes/stream.js +0 -1
- package/dist/routes/table.d.ts +0 -1
- package/dist/routes/table.js +0 -1
- package/dist/routes/target.d.ts +0 -1
- package/dist/routes/target.js +0 -1
- package/dist/routes/template.d.ts +0 -1
- package/dist/routes/template.js +0 -1
- package/dist/runtime/artifact.d.ts +6 -5
- package/dist/runtime/artifact.js +22 -10
- package/dist/runtime/index.d.ts +1 -2
- package/dist/runtime/index.js +1 -2
- package/dist/schema/index.d.ts +0 -1
- package/dist/schema/index.js +0 -1
- package/dist/schema/installation/codec.d.ts +4 -0
- package/dist/schema/installation/codec.js +71 -0
- package/dist/schema/installation/index.d.ts +2 -1
- package/dist/schema/installation/index.js +1 -1
- package/dist/schema/installation/introspection/codec.d.ts +5 -3
- package/dist/schema/installation/introspection/codec.js +184 -192
- package/dist/schema/installation/introspection/index.d.ts +2 -3
- package/dist/schema/installation/introspection/index.js +1 -2
- package/dist/schema/installation/introspection/result.d.ts +36 -23
- package/dist/schema/installation/introspection/result.js +0 -1
- package/dist/schema/installation/result.d.ts +9 -0
- package/dist/schema/installation/result.js +1 -0
- package/package.json +27 -13
- package/dist/artifact/index.d.ts.map +0 -1
- package/dist/artifact/index.js.map +0 -1
- package/dist/artifact/ref.d.ts.map +0 -1
- package/dist/artifact/ref.js.map +0 -1
- package/dist/codecs/codec.d.ts.map +0 -1
- package/dist/codecs/codec.js.map +0 -1
- package/dist/codecs/index.d.ts.map +0 -1
- package/dist/codecs/index.js.map +0 -1
- package/dist/codecs/json.d.ts.map +0 -1
- package/dist/codecs/json.js.map +0 -1
- package/dist/codecs/media-types.d.ts.map +0 -1
- package/dist/codecs/media-types.js.map +0 -1
- package/dist/codecs/msgpack.d.ts.map +0 -1
- package/dist/codecs/msgpack.js.map +0 -1
- package/dist/errors/codes.d.ts.map +0 -1
- package/dist/errors/codes.js.map +0 -1
- package/dist/errors/http-status.d.ts.map +0 -1
- package/dist/errors/http-status.js.map +0 -1
- package/dist/errors/index.d.ts.map +0 -1
- package/dist/errors/index.js.map +0 -1
- package/dist/errors/payload.d.ts.map +0 -1
- package/dist/errors/payload.js.map +0 -1
- package/dist/errors/protocol-error.d.ts.map +0 -1
- package/dist/errors/protocol-error.js.map +0 -1
- package/dist/errors/reason.d.ts.map +0 -1
- package/dist/errors/reason.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/invocation/admission.d.ts.map +0 -1
- package/dist/invocation/admission.js.map +0 -1
- package/dist/invocation/binary.d.ts.map +0 -1
- package/dist/invocation/binary.js.map +0 -1
- package/dist/invocation/binding-codecs.d.ts.map +0 -1
- package/dist/invocation/binding-codecs.js.map +0 -1
- package/dist/invocation/cancellation.d.ts.map +0 -1
- package/dist/invocation/cancellation.js.map +0 -1
- package/dist/invocation/correlation.d.ts.map +0 -1
- package/dist/invocation/correlation.js.map +0 -1
- package/dist/invocation/delegate.d.ts.map +0 -1
- package/dist/invocation/delegate.js.map +0 -1
- package/dist/invocation/http/binary.d.ts.map +0 -1
- package/dist/invocation/http/binary.js.map +0 -1
- package/dist/invocation/http/index.d.ts.map +0 -1
- package/dist/invocation/http/index.js.map +0 -1
- package/dist/invocation/http/negotiation.d.ts.map +0 -1
- package/dist/invocation/http/negotiation.js.map +0 -1
- package/dist/invocation/http/stream.d.ts.map +0 -1
- package/dist/invocation/http/stream.js.map +0 -1
- package/dist/invocation/http/trace.d.ts.map +0 -1
- package/dist/invocation/http/trace.js.map +0 -1
- package/dist/invocation/idempotency.d.ts.map +0 -1
- package/dist/invocation/idempotency.js.map +0 -1
- package/dist/invocation/identity.d.ts.map +0 -1
- package/dist/invocation/identity.js.map +0 -1
- package/dist/invocation/index.d.ts.map +0 -1
- package/dist/invocation/index.js.map +0 -1
- package/dist/invocation/miss.d.ts.map +0 -1
- package/dist/invocation/miss.js.map +0 -1
- package/dist/invocation/redirect.d.ts.map +0 -1
- package/dist/invocation/redirect.js.map +0 -1
- package/dist/invocation/request.d.ts.map +0 -1
- package/dist/invocation/request.js.map +0 -1
- package/dist/invocation/response.d.ts.map +0 -1
- package/dist/invocation/response.js.map +0 -1
- package/dist/invocation/routing.d.ts.map +0 -1
- package/dist/invocation/routing.js.map +0 -1
- package/dist/invocation/schema.d.ts.map +0 -1
- package/dist/invocation/schema.js.map +0 -1
- package/dist/invocation/service-reason.d.ts.map +0 -1
- package/dist/invocation/service-reason.js.map +0 -1
- package/dist/invocation/stale-route.d.ts.map +0 -1
- package/dist/invocation/stale-route.js.map +0 -1
- package/dist/invocation/stream.d.ts.map +0 -1
- package/dist/invocation/stream.js.map +0 -1
- package/dist/invocation/target.d.ts.map +0 -1
- package/dist/invocation/target.js.map +0 -1
- package/dist/invocation/trace.d.ts.map +0 -1
- package/dist/invocation/trace.js.map +0 -1
- package/dist/invocation/version.d.ts.map +0 -1
- package/dist/invocation/version.js.map +0 -1
- package/dist/invocation/websocket/binary.d.ts.map +0 -1
- package/dist/invocation/websocket/binary.js.map +0 -1
- package/dist/invocation/websocket/index.d.ts.map +0 -1
- package/dist/invocation/websocket/index.js.map +0 -1
- package/dist/invocation/websocket/subprotocol.d.ts.map +0 -1
- package/dist/invocation/websocket/subprotocol.js.map +0 -1
- package/dist/issuer/configuration.d.ts.map +0 -1
- package/dist/issuer/configuration.js.map +0 -1
- package/dist/issuer/error.d.ts.map +0 -1
- package/dist/issuer/error.js.map +0 -1
- package/dist/issuer/exchange.d.ts.map +0 -1
- package/dist/issuer/exchange.js.map +0 -1
- package/dist/issuer/hosted.d.ts.map +0 -1
- package/dist/issuer/hosted.js.map +0 -1
- package/dist/issuer/index.d.ts.map +0 -1
- package/dist/issuer/index.js.map +0 -1
- package/dist/issuer/key-set.d.ts.map +0 -1
- package/dist/issuer/key-set.js.map +0 -1
- package/dist/issuer/paths.d.ts.map +0 -1
- package/dist/issuer/paths.js.map +0 -1
- package/dist/issuer/url.d.ts.map +0 -1
- package/dist/issuer/url.js.map +0 -1
- package/dist/publication/bindings/callable.d.ts.map +0 -1
- package/dist/publication/bindings/callable.js.map +0 -1
- package/dist/publication/bindings/index.d.ts.map +0 -1
- package/dist/publication/bindings/index.js.map +0 -1
- package/dist/publication/bindings/invocation.d.ts.map +0 -1
- package/dist/publication/bindings/invocation.js.map +0 -1
- package/dist/publication/bindings/view.d.ts.map +0 -1
- package/dist/publication/bindings/view.js.map +0 -1
- package/dist/publication/bundle-admission.d.ts.map +0 -1
- package/dist/publication/bundle-admission.js.map +0 -1
- package/dist/publication/bundle-descriptor.d.ts.map +0 -1
- package/dist/publication/bundle-descriptor.js.map +0 -1
- package/dist/publication/bundle-evidence.d.ts.map +0 -1
- package/dist/publication/bundle-evidence.js.map +0 -1
- package/dist/publication/bundle.d.ts.map +0 -1
- package/dist/publication/bundle.js.map +0 -1
- package/dist/publication/content.d.ts.map +0 -1
- package/dist/publication/content.js.map +0 -1
- package/dist/publication/declaration.d.ts.map +0 -1
- package/dist/publication/declaration.js.map +0 -1
- package/dist/publication/delivery/attestation.d.ts.map +0 -1
- package/dist/publication/delivery/attestation.js.map +0 -1
- package/dist/publication/delivery/claims.d.ts.map +0 -1
- package/dist/publication/delivery/claims.js.map +0 -1
- package/dist/publication/delivery/delivery.d.ts.map +0 -1
- package/dist/publication/delivery/delivery.js.map +0 -1
- package/dist/publication/delivery/error.d.ts.map +0 -1
- package/dist/publication/delivery/error.js.map +0 -1
- package/dist/publication/delivery/index.d.ts.map +0 -1
- package/dist/publication/delivery/index.js.map +0 -1
- package/dist/publication/delivery/limits.d.ts.map +0 -1
- package/dist/publication/delivery/limits.js.map +0 -1
- package/dist/publication/delivery/request.d.ts.map +0 -1
- package/dist/publication/delivery/request.js.map +0 -1
- package/dist/publication/delivery-declaration.d.ts.map +0 -1
- package/dist/publication/delivery-declaration.js.map +0 -1
- package/dist/publication/delivery-endpoint.d.ts.map +0 -1
- package/dist/publication/delivery-endpoint.js.map +0 -1
- package/dist/publication/error.d.ts.map +0 -1
- package/dist/publication/error.js.map +0 -1
- package/dist/publication/etag.d.ts.map +0 -1
- package/dist/publication/etag.js.map +0 -1
- package/dist/publication/index.d.ts.map +0 -1
- package/dist/publication/index.js.map +0 -1
- package/dist/publication/manifest.d.ts.map +0 -1
- package/dist/publication/manifest.js.map +0 -1
- package/dist/publication/publication.d.ts.map +0 -1
- package/dist/publication/publication.js.map +0 -1
- package/dist/publication/reference.d.ts.map +0 -1
- package/dist/publication/reference.js.map +0 -1
- package/dist/publication/requirements.d.ts.map +0 -1
- package/dist/publication/requirements.js.map +0 -1
- package/dist/publication/route.d.ts.map +0 -1
- package/dist/publication/route.js.map +0 -1
- package/dist/publication/schema.d.ts.map +0 -1
- package/dist/publication/schema.js.map +0 -1
- package/dist/routes/admission.d.ts.map +0 -1
- package/dist/routes/admission.js.map +0 -1
- package/dist/routes/binding.d.ts.map +0 -1
- package/dist/routes/binding.js.map +0 -1
- package/dist/routes/collision.d.ts.map +0 -1
- package/dist/routes/collision.js.map +0 -1
- package/dist/routes/compiler.d.ts.map +0 -1
- package/dist/routes/compiler.js.map +0 -1
- package/dist/routes/credential.d.ts.map +0 -1
- package/dist/routes/credential.js.map +0 -1
- package/dist/routes/decode.d.ts.map +0 -1
- package/dist/routes/decode.js.map +0 -1
- package/dist/routes/encode.d.ts.map +0 -1
- package/dist/routes/encode.js.map +0 -1
- package/dist/routes/error-response.d.ts.map +0 -1
- package/dist/routes/error-response.js.map +0 -1
- package/dist/routes/error.d.ts.map +0 -1
- package/dist/routes/error.js.map +0 -1
- package/dist/routes/evidence.d.ts.map +0 -1
- package/dist/routes/evidence.js.map +0 -1
- package/dist/routes/index.d.ts.map +0 -1
- package/dist/routes/index.js.map +0 -1
- package/dist/routes/mapping.d.ts.map +0 -1
- package/dist/routes/mapping.js.map +0 -1
- package/dist/routes/match.d.ts.map +0 -1
- package/dist/routes/match.js.map +0 -1
- package/dist/routes/placement.d.ts.map +0 -1
- package/dist/routes/placement.js.map +0 -1
- package/dist/routes/plan.d.ts.map +0 -1
- package/dist/routes/plan.js.map +0 -1
- package/dist/routes/release-unavailable.d.ts.map +0 -1
- package/dist/routes/release-unavailable.js.map +0 -1
- package/dist/routes/request.d.ts.map +0 -1
- package/dist/routes/request.js.map +0 -1
- package/dist/routes/reservation.d.ts.map +0 -1
- package/dist/routes/reservation.js.map +0 -1
- package/dist/routes/routing.d.ts.map +0 -1
- package/dist/routes/routing.js.map +0 -1
- package/dist/routes/scalar.d.ts.map +0 -1
- package/dist/routes/scalar.js.map +0 -1
- package/dist/routes/select.d.ts.map +0 -1
- package/dist/routes/select.js.map +0 -1
- package/dist/routes/stream.d.ts.map +0 -1
- package/dist/routes/stream.js.map +0 -1
- package/dist/routes/table.d.ts.map +0 -1
- package/dist/routes/table.js.map +0 -1
- package/dist/routes/target.d.ts.map +0 -1
- package/dist/routes/target.js.map +0 -1
- package/dist/routes/template.d.ts.map +0 -1
- package/dist/routes/template.js.map +0 -1
- package/dist/runtime/artifact.d.ts.map +0 -1
- package/dist/runtime/artifact.js.map +0 -1
- package/dist/runtime/index.d.ts.map +0 -1
- package/dist/runtime/index.js.map +0 -1
- package/dist/schema/index.d.ts.map +0 -1
- package/dist/schema/index.js.map +0 -1
- package/dist/schema/installation/index.d.ts.map +0 -1
- package/dist/schema/installation/index.js.map +0 -1
- package/dist/schema/installation/introspection/codec.d.ts.map +0 -1
- package/dist/schema/installation/introspection/codec.js.map +0 -1
- package/dist/schema/installation/introspection/index.d.ts.map +0 -1
- package/dist/schema/installation/introspection/index.js.map +0 -1
- package/dist/schema/installation/introspection/result.d.ts.map +0 -1
- package/dist/schema/installation/introspection/result.js.map +0 -1
|
@@ -3,16 +3,22 @@ import { accept as acceptIssuerId } from '@astrale-os/kernel-core/auth/issuer';
|
|
|
3
3
|
import { Key, patterns } from '@astrale-os/kernel-dsl/v1/addressing';
|
|
4
4
|
import * as portable from '@astrale-os/kernel-dsl/value';
|
|
5
5
|
import { admitCallableBinding, admitViewBinding } from './bindings/index.js';
|
|
6
|
+
import { canonicalizeViewBinding } from './bindings/view.js';
|
|
6
7
|
import { array, deepFreeze, exact, record, unique } from './content.js';
|
|
7
8
|
import { admitEndpoint as admitDeliveryEndpoint } from './delivery-endpoint.js';
|
|
8
9
|
import { fail } from './error.js';
|
|
9
10
|
import { admitDigest, computeEtag } from './etag.js';
|
|
11
|
+
import { decodeLegacyRequirements, encodeLegacyRequirements } from './legacy-requirements.js';
|
|
10
12
|
import { admitManifest } from './manifest.js';
|
|
11
13
|
import { admitRequirements } from './requirements.js';
|
|
12
14
|
import { admitRoute } from './route.js';
|
|
13
15
|
import { admitSchema } from './schema.js';
|
|
14
16
|
export const PATH = '/.well-known/astrale/domain.json';
|
|
15
|
-
export const MEDIA_TYPE = 'application/vnd.astrale.domain-publication+json;v=
|
|
17
|
+
export const MEDIA_TYPE = 'application/vnd.astrale.domain-publication+json;v=3';
|
|
18
|
+
export const LEGACY_MEDIA_TYPE = 'application/vnd.astrale.domain-publication+json;v=2';
|
|
19
|
+
export function mediaType(input) {
|
|
20
|
+
return input.version === 2 ? LEGACY_MEDIA_TYPE : MEDIA_TYPE;
|
|
21
|
+
}
|
|
16
22
|
/** Resolve the canonical Publication URL beneath one exact HTTP(S) serving issuer. */
|
|
17
23
|
export function url(input) {
|
|
18
24
|
const admitted = admitIssuer(input);
|
|
@@ -33,19 +39,23 @@ export function url(input) {
|
|
|
33
39
|
return `${admitted.replace(/\/+$/u, '')}${PATH}`;
|
|
34
40
|
}
|
|
35
41
|
export function seal(input) {
|
|
36
|
-
|
|
42
|
+
const canonical = withoutEtag(acceptPublication({ ...input, etag: 'canonicalizing' }, 'seal'));
|
|
43
|
+
return acceptPublication({ ...canonical, etag: computeEtag(canonical) }, 'canonical');
|
|
37
44
|
}
|
|
38
45
|
export function accept(input) {
|
|
39
|
-
const publication = acceptPublication(input,
|
|
46
|
+
const publication = acceptPublication(input, 'wire');
|
|
40
47
|
if (publication.etag !== computeEtag(withoutEtag(publication))) {
|
|
41
48
|
fail('PUBLICATION_ETAG_MISMATCH', 'Publication ETag does not match its canonical content.');
|
|
42
49
|
}
|
|
43
50
|
return publication;
|
|
44
51
|
}
|
|
45
52
|
export function encode(input) {
|
|
46
|
-
|
|
53
|
+
const wire = input.version === 2
|
|
54
|
+
? { ...input, requirements: encodeLegacyRequirements(input.requirements) }
|
|
55
|
+
: input;
|
|
56
|
+
return portable.json.encode(wire);
|
|
47
57
|
}
|
|
48
|
-
function acceptPublication(input,
|
|
58
|
+
function acceptPublication(input, mode) {
|
|
49
59
|
const value = record(input, 'PUBLICATION_INVALID', 'Expected a Publication object.');
|
|
50
60
|
exact(value, [
|
|
51
61
|
'format',
|
|
@@ -60,7 +70,8 @@ function acceptPublication(input, requireEtag) {
|
|
|
60
70
|
'routes',
|
|
61
71
|
'delivery',
|
|
62
72
|
], 'PUBLICATION_INVALID');
|
|
63
|
-
if (value.format !== 'astrale.domain.publication' ||
|
|
73
|
+
if (value.format !== 'astrale.domain.publication' ||
|
|
74
|
+
(value.version !== 2 && value.version !== 3)) {
|
|
64
75
|
fail('PUBLICATION_INVALID', 'Unsupported Publication format or version.');
|
|
65
76
|
}
|
|
66
77
|
if (typeof value.origin !== 'string' || !patterns.origin.test(value.origin)) {
|
|
@@ -74,13 +85,15 @@ function acceptPublication(input, requireEtag) {
|
|
|
74
85
|
fail('PUBLICATION_INVALID', 'Publication identity subject must equal its root origin.');
|
|
75
86
|
}
|
|
76
87
|
const publishedSchema = admitSchema(value.schema);
|
|
77
|
-
const requirements =
|
|
88
|
+
const requirements = value.version === 2 && mode === 'wire'
|
|
89
|
+
? decodeLegacyRequirements(value.requirements)
|
|
90
|
+
: admitRequirements(value.requirements);
|
|
78
91
|
const manifest = admitManifest(value.manifest);
|
|
79
92
|
const bindingSet = record(value.bindings, 'PUBLICATION_BINDING_INVALID', 'Publication bindings are invalid.');
|
|
80
93
|
exact(bindingSet, ['callables', 'views'], 'PUBLICATION_BINDING_INVALID');
|
|
81
94
|
const callables = array(bindingSet.callables, 'PUBLICATION_BINDING_INVALID').map((entry) => admitCallableBinding(entry, origin));
|
|
82
95
|
unique(callables.map(({ callable }) => callable), 'PUBLICATION_BINDING_INVALID', 'callable binding');
|
|
83
|
-
const views = array(bindingSet.views, 'PUBLICATION_VIEW_INVALID').map((entry) => admitViewBinding(entry, origin));
|
|
96
|
+
const views = array(bindingSet.views, 'PUBLICATION_VIEW_INVALID').map((entry) => mode === 'seal' ? canonicalizeViewBinding(entry, origin) : admitViewBinding(entry, origin));
|
|
84
97
|
unique(views.map(({ view }) => view), 'PUBLICATION_VIEW_INVALID', 'View binding');
|
|
85
98
|
const routes = array(value.routes, 'PUBLICATION_ROUTE_INVALID').map((entry) => admitRoute(entry, origin));
|
|
86
99
|
unique(routes.map(({ name }) => name), 'PUBLICATION_ROUTE_INVALID', 'route name');
|
|
@@ -90,18 +103,21 @@ function acceptPublication(input, requireEtag) {
|
|
|
90
103
|
}
|
|
91
104
|
}
|
|
92
105
|
if (manifest?.entrypoint !== undefined) {
|
|
93
|
-
|
|
106
|
+
if (manifest.entrypoint.origin !== origin) {
|
|
107
|
+
fail('PUBLICATION_VIEW_INVALID', 'Manifest entrypoint must belong to the root origin.');
|
|
108
|
+
}
|
|
109
|
+
const key = Key.of(manifest.entrypoint);
|
|
94
110
|
if (!views.some(({ view }) => view === key)) {
|
|
95
111
|
fail('PUBLICATION_VIEW_INVALID', 'Manifest entrypoint must have a published View binding.');
|
|
96
112
|
}
|
|
97
113
|
}
|
|
98
114
|
const delivery = admitDeliveryEndpoint(value.delivery, publishedSchema.bundle.href);
|
|
99
|
-
const admittedEtag =
|
|
115
|
+
const admittedEtag = mode === 'wire' ? admitDigest(value.etag) : value.etag;
|
|
100
116
|
if (typeof admittedEtag !== 'string')
|
|
101
117
|
fail('PUBLICATION_INVALID', 'Publication ETag is missing.');
|
|
102
118
|
return deepFreeze({
|
|
103
119
|
format: 'astrale.domain.publication',
|
|
104
|
-
version:
|
|
120
|
+
version: value.version,
|
|
105
121
|
origin,
|
|
106
122
|
identity: { issuer, subject: origin },
|
|
107
123
|
etag: admittedEtag,
|
|
@@ -128,4 +144,3 @@ function withoutEtag(input) {
|
|
|
128
144
|
const { etag: _etag, ...content } = input;
|
|
129
145
|
return content;
|
|
130
146
|
}
|
|
131
|
-
//# sourceMappingURL=publication.js.map
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { Revision } from '@astrale-os/kernel-dsl/v1/
|
|
1
|
+
import type { Revision } from '@astrale-os/kernel-dsl/v1/addressing';
|
|
2
2
|
import { type Key } from '@astrale-os/kernel-dsl/v1/addressing';
|
|
3
3
|
import type { Etag } from './etag.js';
|
|
4
4
|
import type { Publication } from './publication.js';
|
|
@@ -15,4 +15,3 @@ export declare function acceptReference(input: unknown): PublicationRef;
|
|
|
15
15
|
export declare function compareReferences(input: PublicationRef, expected: PublicationRef): PublicationReferenceRelation;
|
|
16
16
|
export declare function compareReference(input: Publication, expected: PublicationRef): PublicationReferenceRelation;
|
|
17
17
|
export declare function matchesReference(input: Publication, expected: PublicationRef): boolean;
|
|
18
|
-
//# sourceMappingURL=reference.d.ts.map
|
|
@@ -1,27 +1,34 @@
|
|
|
1
1
|
import type { AuthorityOperation } from '@astrale-os/kernel-core/schema/authority/operation';
|
|
2
|
-
import type { schema } from '@astrale-os/kernel-dsl/v1';
|
|
3
|
-
import type { Key as SemanticKey } from '@astrale-os/kernel-dsl/v1/addressing';
|
|
2
|
+
import type { schema as schemaLanguage } from '@astrale-os/kernel-dsl/v1';
|
|
3
|
+
import type { ClassRef, CoreRef, Key as SemanticKey } from '@astrale-os/kernel-dsl/v1/addressing';
|
|
4
4
|
export type NonEmpty<Value> = readonly [Value, ...Value[]];
|
|
5
5
|
export declare const ClassOperationOrder: readonly ["create", "read", "traverse", "update", "delete"];
|
|
6
6
|
export type ClassOperation = (typeof ClassOperationOrder)[number];
|
|
7
7
|
export interface ClassCapabilityRequirement {
|
|
8
|
-
readonly class:
|
|
8
|
+
readonly class: ClassRef;
|
|
9
9
|
readonly operations: NonEmpty<ClassOperation>;
|
|
10
10
|
}
|
|
11
|
-
export interface
|
|
11
|
+
export interface CapabilityAuthorityRequirements {
|
|
12
12
|
readonly grant?: NonEmpty<AuthorityOperation>;
|
|
13
13
|
readonly revoke?: NonEmpty<AuthorityOperation>;
|
|
14
14
|
}
|
|
15
15
|
export interface CapabilityRequirements {
|
|
16
16
|
readonly functions?: NonEmpty<SemanticKey.Callable>;
|
|
17
17
|
readonly classes?: NonEmpty<ClassCapabilityRequirement>;
|
|
18
|
-
readonly
|
|
18
|
+
readonly authority?: CapabilityAuthorityRequirements;
|
|
19
|
+
readonly core?: NonEmpty<CoreCapabilityRequirement>;
|
|
20
|
+
}
|
|
21
|
+
/** Installation-owned authority materialized onto one local Core Identity. */
|
|
22
|
+
export interface CoreCapabilityRequirement {
|
|
23
|
+
readonly subject: CoreRef;
|
|
24
|
+
readonly functions?: NonEmpty<SemanticKey.Callable>;
|
|
25
|
+
readonly classes?: NonEmpty<ClassCapabilityRequirement>;
|
|
26
|
+
readonly authority?: CapabilityAuthorityRequirements;
|
|
19
27
|
}
|
|
20
28
|
export interface PublicationRequirements {
|
|
21
29
|
readonly capabilities: CapabilityRequirements;
|
|
22
30
|
}
|
|
23
|
-
/** Admit the exact closed
|
|
31
|
+
/** Admit the exact closed canonical requirements object used by Publication v3. */
|
|
24
32
|
export declare function admitRequirements(input: unknown): PublicationRequirements;
|
|
25
33
|
/** Bind explicit capability targets to exact functional dependencies in the bundle closure. */
|
|
26
|
-
export declare function validateRequirements(root:
|
|
27
|
-
//# sourceMappingURL=requirements.d.ts.map
|
|
34
|
+
export declare function validateRequirements(root: schemaLanguage.DomainSchema, closure: readonly schemaLanguage.DomainSchema[], requirements: PublicationRequirements): void;
|
|
@@ -1,9 +1,14 @@
|
|
|
1
|
-
import { KernelSchema } from '@astrale-os/kernel-core/schema';
|
|
2
1
|
import { AuthorityOperationOrder } from '@astrale-os/kernel-core/schema/authority/operation';
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
2
|
+
import { acceptDefinitionRef, callableAddress, Key } from '@astrale-os/kernel-dsl/v1/addressing';
|
|
3
|
+
import { isMethodExecutable } from '@astrale-os/kernel-dsl/v1/language';
|
|
4
|
+
import { revision } from '@astrale-os/kernel-dsl/v1/schema/revision';
|
|
5
5
|
import { array, deepFreeze, exact, record, unique } from './content.js';
|
|
6
6
|
import { fail } from './error.js';
|
|
7
|
+
const KernelIdentityClass = Object.freeze({
|
|
8
|
+
origin: 'kernel.astrale.ai',
|
|
9
|
+
kind: 'class',
|
|
10
|
+
name: 'Identity',
|
|
11
|
+
});
|
|
7
12
|
export const ClassOperationOrder = Object.freeze([
|
|
8
13
|
'create',
|
|
9
14
|
'read',
|
|
@@ -11,12 +16,12 @@ export const ClassOperationOrder = Object.freeze([
|
|
|
11
16
|
'update',
|
|
12
17
|
'delete',
|
|
13
18
|
]);
|
|
14
|
-
/** Admit the exact closed
|
|
19
|
+
/** Admit the exact closed canonical requirements object used by Publication v3. */
|
|
15
20
|
export function admitRequirements(input) {
|
|
16
21
|
const requirements = record(input, 'PUBLICATION_INVALID', 'Publication requirements are invalid.');
|
|
17
22
|
exact(requirements, ['capabilities'], 'PUBLICATION_INVALID');
|
|
18
23
|
const capabilities = record(requirements.capabilities, 'PUBLICATION_INVALID', 'Publication capability requirements are invalid.');
|
|
19
|
-
exact(capabilities, ['
|
|
24
|
+
exact(capabilities, ['authority', 'classes', 'functions', 'core'], 'PUBLICATION_INVALID');
|
|
20
25
|
const functions = capabilities.functions === undefined
|
|
21
26
|
? undefined
|
|
22
27
|
: nonEmpty(capabilities.functions, 'Function capability requirements').map(admitCallable);
|
|
@@ -31,7 +36,16 @@ export function admitRequirements(input) {
|
|
|
31
36
|
unique(classes.map((entry) => classKey(entry.class)), 'PUBLICATION_INVALID', 'Class capability requirement');
|
|
32
37
|
canonical(classes, (left, right) => compare(classKey(left.class), classKey(right.class)), 'Class capability requirements');
|
|
33
38
|
}
|
|
34
|
-
const
|
|
39
|
+
const authority = capabilities.authority === undefined
|
|
40
|
+
? undefined
|
|
41
|
+
: admitAuthorityRequirements(capabilities.authority);
|
|
42
|
+
const core = capabilities.core === undefined
|
|
43
|
+
? undefined
|
|
44
|
+
: nonEmpty(capabilities.core, 'Core capability requirements').map(admitCoreCapabilityRequirement);
|
|
45
|
+
if (core !== undefined) {
|
|
46
|
+
unique(core.map(({ subject }) => Key.of(subject)), 'PUBLICATION_INVALID', 'Core capability subject');
|
|
47
|
+
canonical(core, (left, right) => compare(Key.of(left.subject), Key.of(right.subject)), 'Core capability requirements');
|
|
48
|
+
}
|
|
35
49
|
return deepFreeze({
|
|
36
50
|
capabilities: {
|
|
37
51
|
...(functions === undefined
|
|
@@ -40,35 +54,113 @@ export function admitRequirements(input) {
|
|
|
40
54
|
...(classes === undefined
|
|
41
55
|
? {}
|
|
42
56
|
: { classes: Object.freeze(classes) }),
|
|
43
|
-
...(
|
|
57
|
+
...(authority === undefined ? {} : { authority }),
|
|
58
|
+
...(core === undefined
|
|
59
|
+
? {}
|
|
60
|
+
: { core: Object.freeze(core) }),
|
|
44
61
|
},
|
|
45
62
|
});
|
|
46
63
|
}
|
|
64
|
+
function admitCoreCapabilityRequirement(input) {
|
|
65
|
+
const requirement = record(input, 'PUBLICATION_INVALID', 'Core capability requirement is invalid.');
|
|
66
|
+
exact(requirement, ['authority', 'classes', 'functions', 'subject'], 'PUBLICATION_INVALID');
|
|
67
|
+
const subject = admitCoreRef(requirement.subject);
|
|
68
|
+
const functions = requirement.functions === undefined
|
|
69
|
+
? undefined
|
|
70
|
+
: nonEmpty(requirement.functions, 'Core capability Function requirements').map(admitCallable);
|
|
71
|
+
if (functions !== undefined) {
|
|
72
|
+
unique(functions, 'PUBLICATION_INVALID', 'Core capability Function requirement');
|
|
73
|
+
canonical(functions, compare, 'Core capability Function requirements');
|
|
74
|
+
}
|
|
75
|
+
const classes = requirement.classes === undefined
|
|
76
|
+
? undefined
|
|
77
|
+
: nonEmpty(requirement.classes, 'Core capability Class requirements').map(admitClassRequirement);
|
|
78
|
+
if (classes !== undefined) {
|
|
79
|
+
unique(classes.map((entry) => classKey(entry.class)), 'PUBLICATION_INVALID', 'Core capability Class requirement');
|
|
80
|
+
canonical(classes, (left, right) => compare(classKey(left.class), classKey(right.class)), 'Core capability Class requirements');
|
|
81
|
+
}
|
|
82
|
+
const authority = requirement.authority === undefined
|
|
83
|
+
? undefined
|
|
84
|
+
: admitAuthorityRequirements(requirement.authority);
|
|
85
|
+
if (functions === undefined && classes === undefined && authority === undefined) {
|
|
86
|
+
fail('PUBLICATION_INVALID', 'Core capability requirements cannot be empty.');
|
|
87
|
+
}
|
|
88
|
+
return Object.freeze({
|
|
89
|
+
subject,
|
|
90
|
+
...(functions === undefined
|
|
91
|
+
? {}
|
|
92
|
+
: { functions: Object.freeze(functions) }),
|
|
93
|
+
...(classes === undefined
|
|
94
|
+
? {}
|
|
95
|
+
: { classes: Object.freeze(classes) }),
|
|
96
|
+
...(authority === undefined ? {} : { authority }),
|
|
97
|
+
});
|
|
98
|
+
}
|
|
47
99
|
/** Bind explicit capability targets to exact functional dependencies in the bundle closure. */
|
|
48
100
|
export function validateRequirements(root, closure, requirements) {
|
|
49
101
|
const dependencies = exactDependencyClosure(root, closure);
|
|
50
102
|
for (const callable of requirements.capabilities.functions ?? []) {
|
|
51
103
|
const dependency = capabilityOwner(root, dependencies, callable, 'Function');
|
|
52
|
-
|
|
53
|
-
if (!hasCallable(dependency, reference)) {
|
|
104
|
+
if (!hasCallable(dependency, callable)) {
|
|
54
105
|
fail('PUBLICATION_INVALID', 'Function capability requirement names an unknown dependency callable.');
|
|
55
106
|
}
|
|
56
107
|
}
|
|
57
108
|
for (const requirement of requirements.capabilities.classes ?? []) {
|
|
58
|
-
const key = Key.
|
|
109
|
+
const key = Key.of(requirement.class);
|
|
59
110
|
const dependency = capabilityOwner(root, dependencies, key, 'Class');
|
|
60
111
|
if (dependency.classes[requirement.class.name] === undefined) {
|
|
61
112
|
fail('PUBLICATION_INVALID', 'Class capability requirement names an unknown dependency Class.');
|
|
62
113
|
}
|
|
63
114
|
}
|
|
115
|
+
for (const requirement of requirements.capabilities.core ?? []) {
|
|
116
|
+
const subject = root.core.nodes[requirement.subject.name];
|
|
117
|
+
if (requirement.subject.origin !== root.origin ||
|
|
118
|
+
subject === undefined ||
|
|
119
|
+
!classSatisfies(root, dependencies, subject.class, KernelIdentityClass)) {
|
|
120
|
+
fail('PUBLICATION_INVALID', 'Core capability subject must name one local Core Identity.');
|
|
121
|
+
}
|
|
122
|
+
for (const callable of requirement.functions ?? []) {
|
|
123
|
+
const owner = Key.origin(callable) === root.origin
|
|
124
|
+
? root
|
|
125
|
+
: capabilityOwner(root, dependencies, callable, 'Function');
|
|
126
|
+
if (!hasCallable(owner, callable)) {
|
|
127
|
+
fail('PUBLICATION_INVALID', 'Core capability Function requirement names an unknown or non-executable callable.');
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
for (const classRequirement of requirement.classes ?? []) {
|
|
131
|
+
const key = Key.of(classRequirement.class);
|
|
132
|
+
const owner = classRequirement.class.origin === root.origin
|
|
133
|
+
? root
|
|
134
|
+
: capabilityOwner(root, dependencies, key, 'Class');
|
|
135
|
+
if (owner.classes[classRequirement.class.name] === undefined) {
|
|
136
|
+
fail('PUBLICATION_INVALID', 'Core capability Class requirement names an unknown dependency Class.');
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
function classSatisfies(root, dependencies, candidate, expected) {
|
|
142
|
+
const expectedKey = Key.of(expected);
|
|
143
|
+
const visited = new Set();
|
|
144
|
+
const visit = (reference) => {
|
|
145
|
+
const key = Key.of(reference);
|
|
146
|
+
if (key === expectedKey)
|
|
147
|
+
return true;
|
|
148
|
+
if (visited.has(key))
|
|
149
|
+
return false;
|
|
150
|
+
visited.add(key);
|
|
151
|
+
const owner = reference.origin === root.origin ? root : dependencies.get(reference.origin);
|
|
152
|
+
const definition = owner?.classes[reference.name];
|
|
153
|
+
return definition?.kind === 'node' && definition.extends.some(visit);
|
|
154
|
+
};
|
|
155
|
+
return visit(candidate);
|
|
64
156
|
}
|
|
65
157
|
function exactDependencyClosure(root, closure) {
|
|
66
158
|
const supplied = new Map(closure.map((dependency) => [dependency.origin, dependency]));
|
|
67
159
|
const reachable = new Map();
|
|
68
160
|
const visit = (owner) => {
|
|
69
|
-
for (const coordinate of owner.dependencies) {
|
|
161
|
+
for (const coordinate of Object.values(owner.dependencies)) {
|
|
70
162
|
const dependency = supplied.get(coordinate.origin);
|
|
71
|
-
if (dependency === undefined ||
|
|
163
|
+
if (dependency === undefined || revision(dependency) !== coordinate.revision) {
|
|
72
164
|
fail('PUBLICATION_INVALID', 'Publication Bundle omits an exact dependency.');
|
|
73
165
|
}
|
|
74
166
|
if (reachable.has(dependency.origin))
|
|
@@ -84,8 +176,10 @@ function admitCallable(input) {
|
|
|
84
176
|
if (typeof input !== 'string' || !Key.is(input)) {
|
|
85
177
|
return fail('PUBLICATION_INVALID', 'Function capability reference is invalid.');
|
|
86
178
|
}
|
|
87
|
-
|
|
88
|
-
|
|
179
|
+
try {
|
|
180
|
+
callableAddress(input);
|
|
181
|
+
}
|
|
182
|
+
catch {
|
|
89
183
|
return fail('PUBLICATION_INVALID', 'Function capability reference must name a Function or Method.');
|
|
90
184
|
}
|
|
91
185
|
return input;
|
|
@@ -101,14 +195,14 @@ function admitClassRequirement(input) {
|
|
|
101
195
|
operations: Object.freeze(operations),
|
|
102
196
|
});
|
|
103
197
|
}
|
|
104
|
-
function
|
|
105
|
-
const
|
|
106
|
-
exact(
|
|
107
|
-
if (
|
|
108
|
-
fail('PUBLICATION_INVALID', '
|
|
198
|
+
function admitAuthorityRequirements(input) {
|
|
199
|
+
const authority = record(input, 'PUBLICATION_INVALID', 'Authority capability requirements are invalid.');
|
|
200
|
+
exact(authority, ['grant', 'revoke'], 'PUBLICATION_INVALID');
|
|
201
|
+
if (authority.grant === undefined && authority.revoke === undefined) {
|
|
202
|
+
fail('PUBLICATION_INVALID', 'Authority capability requirements cannot be empty.');
|
|
109
203
|
}
|
|
110
|
-
const grant = admitAuthorityOperations(
|
|
111
|
-
const revoke = admitAuthorityOperations(
|
|
204
|
+
const grant = admitAuthorityOperations(authority.grant, 'grant');
|
|
205
|
+
const revoke = admitAuthorityOperations(authority.revoke, 'revoke');
|
|
112
206
|
return Object.freeze({
|
|
113
207
|
...(grant === undefined ? {} : { grant }),
|
|
114
208
|
...(revoke === undefined ? {} : { revoke }),
|
|
@@ -117,22 +211,35 @@ function admitAdminRequirements(input) {
|
|
|
117
211
|
function admitAuthorityOperations(input, kind) {
|
|
118
212
|
if (input === undefined)
|
|
119
213
|
return undefined;
|
|
120
|
-
const values = nonEmpty(input, `
|
|
121
|
-
unique(values, 'PUBLICATION_INVALID', `
|
|
122
|
-
canonical(values, ordered(AuthorityOperationOrder), `
|
|
214
|
+
const values = nonEmpty(input, `Authority ${kind} operations`).map((entry) => admitOperation(entry, AuthorityOperationOrder, `Authority ${kind} operation`));
|
|
215
|
+
unique(values, 'PUBLICATION_INVALID', `authority ${kind} operation`);
|
|
216
|
+
canonical(values, ordered(AuthorityOperationOrder), `Authority ${kind} operations`);
|
|
123
217
|
return Object.freeze(values);
|
|
124
218
|
}
|
|
125
219
|
function admitClassRef(input) {
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
typeof value.name !== 'string' ||
|
|
132
|
-
!patterns.memberName.test(value.name)) {
|
|
220
|
+
let value;
|
|
221
|
+
try {
|
|
222
|
+
value = acceptDefinitionRef(input);
|
|
223
|
+
}
|
|
224
|
+
catch {
|
|
133
225
|
fail('PUBLICATION_INVALID', 'Class capability reference is invalid.');
|
|
134
226
|
}
|
|
135
|
-
|
|
227
|
+
if (value.kind !== 'class')
|
|
228
|
+
fail('PUBLICATION_INVALID', 'Class capability reference is invalid.');
|
|
229
|
+
return value;
|
|
230
|
+
}
|
|
231
|
+
function admitCoreRef(input) {
|
|
232
|
+
let value;
|
|
233
|
+
try {
|
|
234
|
+
value = acceptDefinitionRef(input);
|
|
235
|
+
}
|
|
236
|
+
catch {
|
|
237
|
+
fail('PUBLICATION_INVALID', 'Core capability subject is invalid.');
|
|
238
|
+
}
|
|
239
|
+
if (value.kind !== 'core') {
|
|
240
|
+
fail('PUBLICATION_INVALID', 'Core capability subject must be one local Core reference.');
|
|
241
|
+
}
|
|
242
|
+
return value;
|
|
136
243
|
}
|
|
137
244
|
function nonEmpty(input, label) {
|
|
138
245
|
const values = [...array(input, 'PUBLICATION_INVALID')];
|
|
@@ -158,28 +265,23 @@ function compare(left, right) {
|
|
|
158
265
|
return left < right ? -1 : left > right ? 1 : 0;
|
|
159
266
|
}
|
|
160
267
|
function classKey(input) {
|
|
161
|
-
return String(Key.
|
|
268
|
+
return String(Key.of(input));
|
|
162
269
|
}
|
|
163
270
|
function capabilityOwner(root, dependencies, key, label) {
|
|
164
271
|
const origin = Key.origin(key);
|
|
165
272
|
if (origin === root.origin)
|
|
166
273
|
fail('PUBLICATION_INVALID', `${label} capability target cannot be local.`);
|
|
167
|
-
if (origin === KernelSchema.origin)
|
|
168
|
-
return KernelSchema;
|
|
169
274
|
const dependency = dependencies.get(origin);
|
|
170
275
|
if (dependency === undefined) {
|
|
171
276
|
fail('PUBLICATION_INVALID', `${label} capability target must belong to the exact dependency closure.`);
|
|
172
277
|
}
|
|
173
278
|
return dependency;
|
|
174
279
|
}
|
|
175
|
-
function hasCallable(dependency,
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
const
|
|
180
|
-
const
|
|
181
|
-
|
|
182
|
-
const declaration = ownerKind === 'class' ? dependency.classes[owner] : dependency.interfaces[owner];
|
|
183
|
-
return declaration?.family === 'node' && declaration.methods[method] !== undefined;
|
|
280
|
+
function hasCallable(dependency, callable) {
|
|
281
|
+
const coordinate = callableAddress(callable);
|
|
282
|
+
if (coordinate.kind === 'function')
|
|
283
|
+
return dependency.functions[coordinate.name] !== undefined;
|
|
284
|
+
const declaration = dependency.classes[coordinate.owner.name];
|
|
285
|
+
const method = declaration?.kind === 'node' ? declaration.methods[coordinate.name] : undefined;
|
|
286
|
+
return method !== undefined && isMethodExecutable(declaration, method);
|
|
184
287
|
}
|
|
185
|
-
//# sourceMappingURL=requirements.js.map
|
|
@@ -35,4 +35,3 @@ export interface HttpRouteDeclaration extends Omit<HttpRoute, 'href'> {
|
|
|
35
35
|
}
|
|
36
36
|
export declare function admitRoute(input: unknown, origin: string): HttpRoute;
|
|
37
37
|
export declare function admitRouteDeclaration(input: unknown, origin: string): HttpRouteDeclaration;
|
|
38
|
-
//# sourceMappingURL=route.d.ts.map
|
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
import type { Revision } from '@astrale-os/kernel-dsl/v1/
|
|
1
|
+
import type { Revision } from '@astrale-os/kernel-dsl/v1/addressing';
|
|
2
2
|
import type { BundleDescriptor } from './bundle-descriptor.js';
|
|
3
3
|
export interface Schema {
|
|
4
4
|
readonly revision: Revision;
|
|
5
5
|
readonly bundle: BundleDescriptor;
|
|
6
6
|
}
|
|
7
7
|
export declare function admitSchema(input: unknown): Schema;
|
|
8
|
-
//# sourceMappingURL=schema.d.ts.map
|
package/dist/routes/admission.js
CHANGED
|
@@ -2,7 +2,7 @@ import { accept as acceptPortable } from '@astrale-os/kernel-dsl/value';
|
|
|
2
2
|
import { acceptReference } from '../publication/reference.js';
|
|
3
3
|
import { admitRoute } from '../publication/route.js';
|
|
4
4
|
import { fail } from './error.js';
|
|
5
|
-
const
|
|
5
|
+
const AUTH = new Set(['anonymous', 'authenticated', 'authorized']);
|
|
6
6
|
const OUTPUT = new Set(['value', 'stream', 'binary']);
|
|
7
7
|
/** Admit one emitted portable Table before Server composition. */
|
|
8
8
|
export function acceptTable(input) {
|
|
@@ -19,11 +19,11 @@ export function acceptTable(input) {
|
|
|
19
19
|
}
|
|
20
20
|
function acceptRoute(input, origin) {
|
|
21
21
|
const value = object(input, 'Route Table entry');
|
|
22
|
-
exact(value, ['name', 'callable', 'target', '
|
|
22
|
+
exact(value, ['name', 'callable', 'target', 'auth', 'output', 'href', 'method', 'default'], 'Route Table entry', ['requestMethod', 'query', 'headers', 'body', 'credential']);
|
|
23
23
|
if (typeof value.default !== 'boolean')
|
|
24
24
|
invalid('Route Table default');
|
|
25
|
-
if (typeof value.
|
|
26
|
-
invalid('Route Table
|
|
25
|
+
if (typeof value.auth !== 'string' || !AUTH.has(value.auth)) {
|
|
26
|
+
invalid('Route Table auth');
|
|
27
27
|
}
|
|
28
28
|
if (typeof value.output !== 'string' || !OUTPUT.has(value.output))
|
|
29
29
|
invalid('Route Table output');
|
|
@@ -44,7 +44,7 @@ function acceptRoute(input, origin) {
|
|
|
44
44
|
return Object.freeze({
|
|
45
45
|
...common,
|
|
46
46
|
target: target(value.target),
|
|
47
|
-
|
|
47
|
+
auth: value.auth,
|
|
48
48
|
output: value.output,
|
|
49
49
|
default: value.default,
|
|
50
50
|
});
|
|
@@ -87,4 +87,3 @@ function exact(value, required, label, optional = []) {
|
|
|
87
87
|
function invalid(label) {
|
|
88
88
|
return fail('NATIVE_ROUTE_BINDING_INVALID', `${label} is invalid.`);
|
|
89
89
|
}
|
|
90
|
-
//# sourceMappingURL=admission.js.map
|
package/dist/routes/binding.d.ts
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { Domain } from '@astrale-os/kernel-dsl/v1';
|
|
2
2
|
import type { Publication } from '../publication/publication.js';
|
|
3
3
|
import type { Plan } from './plan.js';
|
|
4
4
|
import type { Table } from './table.js';
|
|
5
|
-
/** Bind one Plan to an exact placed Publication and matching
|
|
6
|
-
export declare function bind(plan: Plan, deployed: Publication,
|
|
7
|
-
//# sourceMappingURL=binding.d.ts.map
|
|
5
|
+
/** Bind one Plan to an exact placed Publication and matching resolved Domain. */
|
|
6
|
+
export declare function bind(plan: Plan, deployed: Publication, domain: Domain, publicUrl?: string): Table;
|
package/dist/routes/binding.js
CHANGED
|
@@ -3,16 +3,15 @@ import { reference } from '../publication/reference.js';
|
|
|
3
3
|
import { fail } from './error.js';
|
|
4
4
|
import { place } from './placement.js';
|
|
5
5
|
import { rejectReserved } from './reservation.js';
|
|
6
|
-
/** Bind one Plan to an exact placed Publication and matching
|
|
7
|
-
export function bind(plan, deployed,
|
|
6
|
+
/** Bind one Plan to an exact placed Publication and matching resolved Domain. */
|
|
7
|
+
export function bind(plan, deployed, domain, publicUrl = deployed.identity.issuer) {
|
|
8
8
|
if (plan.origin !== deployed.origin ||
|
|
9
|
-
plan.origin !==
|
|
9
|
+
plan.origin !== domain.origin ||
|
|
10
10
|
plan.revision !== deployed.schema.revision ||
|
|
11
|
-
plan.revision !==
|
|
12
|
-
fail('NATIVE_ROUTE_BINDING_INVALID', 'Route Plan, Publication, and
|
|
11
|
+
plan.revision !== domain.revision) {
|
|
12
|
+
fail('NATIVE_ROUTE_BINDING_INVALID', 'Route Plan, Publication, and Domain identity differ.');
|
|
13
13
|
}
|
|
14
|
-
if (json.serialize(place(plan, deployed.
|
|
15
|
-
json.serialize(deployed.routes)) {
|
|
14
|
+
if (json.serialize(place(plan, publicUrl)) !== json.serialize(deployed.routes)) {
|
|
16
15
|
fail('NATIVE_ROUTE_BINDING_INVALID', 'Publication routes differ from the placed Route Plan.');
|
|
17
16
|
}
|
|
18
17
|
const entries = plan.entries.map((entry, index) => {
|
|
@@ -25,4 +24,3 @@ export function bind(plan, deployed, validator) {
|
|
|
25
24
|
entries: Object.freeze(entries),
|
|
26
25
|
});
|
|
27
26
|
}
|
|
28
|
-
//# sourceMappingURL=binding.js.map
|
package/dist/routes/collision.js
CHANGED
|
@@ -1,9 +1,8 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { Domain } from '@astrale-os/kernel-dsl/v1';
|
|
2
2
|
import type * as publication from '../publication/index.js';
|
|
3
3
|
import type { Plan } from './plan.js';
|
|
4
4
|
export interface CompileInput {
|
|
5
5
|
readonly routes: readonly publication.HttpRouteDeclaration[];
|
|
6
|
-
readonly
|
|
6
|
+
readonly domain: Domain;
|
|
7
7
|
}
|
|
8
8
|
export declare function compile(input: CompileInput): Plan;
|
|
9
|
-
//# sourceMappingURL=compiler.d.ts.map
|