@astrale-os/kernel-protocol 0.5.0-beta.3 → 0.5.0-beta.30
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/CHANGELOG.md +663 -0
- package/dist/artifact/index.d.ts +0 -1
- package/dist/artifact/index.js +0 -1
- package/dist/artifact/ref.d.ts +0 -1
- package/dist/artifact/ref.js +0 -1
- 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 +1 -5
- 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 +2 -3
- package/dist/invocation/admission.js +5 -8
- package/dist/invocation/binary.d.ts +1 -1
- package/dist/invocation/binary.js +14 -2
- 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 +1 -2
- package/dist/invocation/http/index.js +1 -2
- package/dist/invocation/http/negotiation.d.ts +0 -1
- package/dist/invocation/http/negotiation.js +0 -1
- 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 +1 -2
- package/dist/invocation/index.js +1 -2
- package/dist/invocation/miss.d.ts +0 -1
- package/dist/invocation/miss.js +0 -1
- package/dist/invocation/redirect.d.ts +9 -8
- package/dist/invocation/redirect.js +6 -5
- 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 +3 -3
- package/dist/invocation/routing.js +4 -4
- package/dist/invocation/schema.d.ts +2 -3
- package/dist/invocation/schema.js +2 -3
- package/dist/invocation/service-reason.d.ts +13 -13
- package/dist/invocation/service-reason.js +14 -14
- 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 +0 -1
- 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 +1 -2
- 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 +1 -2
- 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 +1 -2
- package/dist/issuer/key-set.js +3 -3
- package/dist/issuer/paths.d.ts +0 -1
- package/dist/issuer/paths.js +0 -1
- package/dist/issuer/url.d.ts +1 -2
- package/dist/issuer/url.js +3 -3
- package/dist/publication/bindings/callable.d.ts +1 -2
- 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 +8 -2
- package/dist/publication/bindings/view.js +112 -4
- package/dist/publication/bundle-admission.d.ts +4 -0
- package/dist/publication/bundle-admission.js +65 -0
- package/dist/publication/bundle-descriptor.d.ts +9 -0
- package/dist/publication/bundle-descriptor.js +19 -0
- package/dist/publication/bundle-evidence.d.ts +3 -0
- package/dist/publication/bundle-evidence.js +13 -0
- package/dist/publication/bundle.d.ts +5 -12
- package/dist/publication/bundle.js +8 -29
- package/dist/publication/content.d.ts +0 -1
- package/dist/publication/content.js +0 -1
- package/dist/publication/declaration.d.ts +11 -0
- package/dist/publication/declaration.js +1 -0
- package/dist/publication/delivery/attestation.d.ts +0 -1
- package/dist/publication/delivery/attestation.js +0 -1
- package/dist/publication/delivery/claims.d.ts +8 -8
- package/dist/publication/delivery/claims.js +6 -7
- package/dist/publication/delivery/delivery.d.ts +1 -2
- package/dist/publication/delivery/delivery.js +1 -2
- 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 +3 -4
- package/dist/publication/delivery/request.js +4 -4
- package/dist/publication/delivery-declaration.d.ts +4 -0
- package/dist/publication/delivery-declaration.js +25 -0
- 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 +0 -1
- package/dist/publication/index.d.ts +8 -5
- package/dist/publication/index.js +4 -2
- package/dist/publication/manifest.d.ts +2 -3
- package/dist/publication/manifest.js +10 -6
- package/dist/publication/publication.d.ts +3 -6
- package/dist/publication/publication.js +16 -71
- package/dist/publication/reference.d.ts +3 -3
- package/dist/publication/reference.js +7 -7
- package/dist/publication/requirements.d.ts +7 -6
- package/dist/publication/requirements.js +49 -47
- package/dist/publication/route.d.ts +6 -2
- package/dist/publication/route.js +31 -9
- package/dist/publication/schema.d.ts +3 -4
- package/dist/publication/schema.js +3 -4
- package/dist/routes/admission.d.ts +3 -0
- package/dist/routes/admission.js +89 -0
- package/dist/routes/binding.d.ts +6 -0
- package/dist/routes/binding.js +27 -0
- package/dist/routes/collision.d.ts +2 -0
- package/dist/routes/collision.js +16 -0
- package/dist/routes/compiler.d.ts +8 -0
- package/dist/routes/compiler.js +50 -0
- package/dist/routes/credential.d.ts +7 -8
- package/dist/routes/credential.js +7 -8
- package/dist/routes/decode.d.ts +4 -3
- package/dist/routes/decode.js +42 -42
- package/dist/routes/encode.d.ts +3 -3
- package/dist/routes/encode.js +31 -33
- 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 +5 -0
- package/dist/routes/evidence.js +38 -0
- package/dist/routes/index.d.ts +9 -3
- package/dist/routes/index.js +6 -3
- package/dist/routes/mapping.d.ts +1 -2
- package/dist/routes/mapping.js +4 -13
- package/dist/routes/match.d.ts +3 -4
- package/dist/routes/match.js +3 -5
- package/dist/routes/placement.d.ts +5 -0
- package/dist/routes/placement.js +18 -0
- package/dist/routes/plan.d.ts +24 -0
- package/dist/routes/plan.js +1 -0
- package/dist/routes/release-unavailable.d.ts +8 -0
- package/dist/routes/release-unavailable.js +32 -0
- package/dist/routes/request.d.ts +0 -1
- package/dist/routes/request.js +3 -2
- package/dist/routes/reservation.d.ts +3 -4
- package/dist/routes/reservation.js +8 -5
- package/dist/routes/routing.d.ts +0 -1
- package/dist/routes/routing.js +0 -1
- package/dist/routes/scalar.d.ts +4 -4
- package/dist/routes/scalar.js +14 -11
- package/dist/routes/select.d.ts +2 -3
- package/dist/routes/select.js +2 -3
- package/dist/routes/stream.d.ts +0 -1
- package/dist/routes/stream.js +0 -1
- package/dist/routes/table.d.ts +9 -0
- package/dist/routes/table.js +1 -0
- package/dist/routes/target.d.ts +13 -0
- package/dist/routes/target.js +3 -0
- package/dist/routes/template.d.ts +0 -1
- package/dist/routes/template.js +0 -1
- package/dist/runtime/artifact.d.ts +3 -4
- package/dist/runtime/artifact.js +5 -6
- package/dist/runtime/index.d.ts +0 -1
- package/dist/runtime/index.js +0 -1
- 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 +70 -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 +3 -3
- package/dist/schema/installation/introspection/codec.js +144 -204
- 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 +18 -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 +116 -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.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/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-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/compile.d.ts +0 -5
- package/dist/routes/compile.d.ts.map +0 -1
- package/dist/routes/compile.js +0 -69
- package/dist/routes/compile.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/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/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/route.d.ts +0 -13
- package/dist/routes/route.d.ts.map +0 -1
- package/dist/routes/route.js +0 -6
- package/dist/routes/route.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/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
|
@@ -1,14 +1,17 @@
|
|
|
1
|
-
export { MEDIA_TYPE, PATH, url, seal, accept, encode,
|
|
1
|
+
export { MEDIA_TYPE, PATH, url, seal, accept, encode, type Publication } from './publication.js';
|
|
2
|
+
export { acceptBundle, decodeBundle } from './bundle-admission.js';
|
|
2
3
|
export { BUNDLE_MEDIA_TYPE, describeBundle, type BundleDescriptor } from './bundle.js';
|
|
4
|
+
export { verifyBundleBytes } from './bundle-evidence.js';
|
|
3
5
|
export type { Content } from './content.js';
|
|
6
|
+
export type { Declaration, DeliveryDeclaration } from './declaration.js';
|
|
7
|
+
export { placeDelivery } from './delivery-declaration.js';
|
|
4
8
|
export type { Etag, Sha256Digest } from './etag.js';
|
|
5
9
|
export { PublicationError, type PublicationErrorCode } from './error.js';
|
|
6
10
|
export * as delivery from './delivery/index.js';
|
|
7
11
|
export type { Authentication as DeliveryAuthentication, Endpoint as DeliveryEndpoint, } from './delivery-endpoint.js';
|
|
8
12
|
export type { Manifest } from './manifest.js';
|
|
9
|
-
export { ClassOperationOrder, admitRequirements, validateRequirements, type
|
|
13
|
+
export { ClassOperationOrder, admitRequirements, validateRequirements, type CapabilityAuthorityRequirements, type CapabilityRequirements, type ClassCapabilityRequirement, type ClassOperation, type NonEmpty, type PublicationRequirements, } from './requirements.js';
|
|
10
14
|
export { acceptReference, compareReference, compareReferences, matchesReference, reference, type PublicationRef, type PublicationReferenceRelation, } from './reference.js';
|
|
11
|
-
export type { BodyPick, CredentialSource, HttpMethod, HttpRoute, RouteBody, RouteHeaders, SingleCredentialSource, } from './route.js';
|
|
15
|
+
export type { BodyPick, CredentialSource, HttpMethod, HttpRoute, HttpRouteDeclaration, RouteBody, RouteHeaders, SingleCredentialSource, } from './route.js';
|
|
12
16
|
export type { Schema } from './schema.js';
|
|
13
|
-
export { acceptInvocationEndpoints, type CallableBinding, type InvocationEndpoints, type ViewBinding, } from './bindings/index.js';
|
|
14
|
-
//# sourceMappingURL=index.d.ts.map
|
|
17
|
+
export { acceptInvocationEndpoints, type CallableBinding, type IframeRequirements, type InvocationEndpoints, type ViewBinding, } from './bindings/index.js';
|
|
@@ -1,8 +1,10 @@
|
|
|
1
|
-
export { MEDIA_TYPE, PATH, url, seal, accept, encode
|
|
1
|
+
export { MEDIA_TYPE, PATH, url, seal, accept, encode } from './publication.js';
|
|
2
|
+
export { acceptBundle, decodeBundle } from './bundle-admission.js';
|
|
2
3
|
export { BUNDLE_MEDIA_TYPE, describeBundle } from './bundle.js';
|
|
4
|
+
export { verifyBundleBytes } from './bundle-evidence.js';
|
|
5
|
+
export { placeDelivery } from './delivery-declaration.js';
|
|
3
6
|
export { PublicationError } from './error.js';
|
|
4
7
|
export * as delivery from './delivery/index.js';
|
|
5
8
|
export { ClassOperationOrder, admitRequirements, validateRequirements, } from './requirements.js';
|
|
6
9
|
export { acceptReference, compareReference, compareReferences, matchesReference, reference, } from './reference.js';
|
|
7
10
|
export { acceptInvocationEndpoints, } from './bindings/index.js';
|
|
8
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { type ViewRef } from '@astrale-os/kernel-dsl/v1/addressing';
|
|
2
2
|
export interface Manifest {
|
|
3
3
|
readonly logo?: string;
|
|
4
|
-
readonly entrypoint?:
|
|
4
|
+
readonly entrypoint?: ViewRef;
|
|
5
5
|
}
|
|
6
6
|
export declare function admitManifest(input: unknown): Manifest | undefined;
|
|
7
|
-
//# sourceMappingURL=manifest.d.ts.map
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { acceptDefinitionRef } from '@astrale-os/kernel-dsl/v1/addressing';
|
|
2
2
|
import { exact, record } from './content.js';
|
|
3
3
|
import { fail } from './error.js';
|
|
4
4
|
export function admitManifest(input) {
|
|
@@ -11,16 +11,20 @@ export function admitManifest(input) {
|
|
|
11
11
|
}
|
|
12
12
|
let entrypoint;
|
|
13
13
|
if (value.entrypoint !== undefined) {
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
14
|
+
let ref;
|
|
15
|
+
try {
|
|
16
|
+
ref = acceptDefinitionRef(value.entrypoint);
|
|
17
|
+
}
|
|
18
|
+
catch (cause) {
|
|
19
|
+
return fail('PUBLICATION_INVALID', 'Manifest entrypoint must be a root View reference.', cause);
|
|
20
|
+
}
|
|
21
|
+
if (ref.kind !== 'view') {
|
|
17
22
|
fail('PUBLICATION_INVALID', 'Manifest entrypoint must be a root View reference.');
|
|
18
23
|
}
|
|
19
|
-
entrypoint =
|
|
24
|
+
entrypoint = ref;
|
|
20
25
|
}
|
|
21
26
|
return Object.freeze({
|
|
22
27
|
...(value.logo === undefined ? {} : { logo: value.logo }),
|
|
23
28
|
...(entrypoint === undefined ? {} : { entrypoint }),
|
|
24
29
|
});
|
|
25
30
|
}
|
|
26
|
-
//# sourceMappingURL=manifest.js.map
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { Key
|
|
1
|
+
import { type IssuerId } from '@astrale-os/kernel-core/auth/issuer';
|
|
2
|
+
import { Key } from '@astrale-os/kernel-dsl/v1/addressing';
|
|
3
3
|
import type { CallableBinding, ViewBinding } from './bindings/index.js';
|
|
4
4
|
import type { Content } from './content.js';
|
|
5
5
|
import type { Endpoint as DeliveryEndpoint } from './delivery-endpoint.js';
|
|
@@ -17,7 +17,7 @@ export interface Publication {
|
|
|
17
17
|
readonly version: 2;
|
|
18
18
|
readonly origin: Key.Origin;
|
|
19
19
|
readonly identity: {
|
|
20
|
-
readonly issuer:
|
|
20
|
+
readonly issuer: IssuerId;
|
|
21
21
|
readonly subject: string;
|
|
22
22
|
};
|
|
23
23
|
readonly etag: Etag;
|
|
@@ -34,6 +34,3 @@ export interface Publication {
|
|
|
34
34
|
export declare function seal(input: Content): Publication;
|
|
35
35
|
export declare function accept(input: unknown): Publication;
|
|
36
36
|
export declare function encode(input: Publication): Uint8Array;
|
|
37
|
-
export declare function acceptBundle(input: Publication, artifact: unknown): dslBundle.Bundle;
|
|
38
|
-
export declare function decodeBundle(input: Publication, bytes: Uint8Array): dslBundle.Bundle;
|
|
39
|
-
//# sourceMappingURL=publication.d.ts.map
|
|
@@ -1,14 +1,15 @@
|
|
|
1
|
-
import
|
|
2
|
-
import {
|
|
1
|
+
import { AuthValueError } from '@astrale-os/kernel-core/auth/error';
|
|
2
|
+
import { accept as acceptIssuerId } from '@astrale-os/kernel-core/auth/issuer';
|
|
3
|
+
import { Key, patterns } from '@astrale-os/kernel-dsl/v1/addressing';
|
|
3
4
|
import * as portable from '@astrale-os/kernel-dsl/value';
|
|
4
5
|
import { admitCallableBinding, admitViewBinding } from './bindings/index.js';
|
|
5
|
-
import {
|
|
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';
|
|
10
11
|
import { admitManifest } from './manifest.js';
|
|
11
|
-
import { admitRequirements
|
|
12
|
+
import { admitRequirements } from './requirements.js';
|
|
12
13
|
import { admitRoute } from './route.js';
|
|
13
14
|
import { admitSchema } from './schema.js';
|
|
14
15
|
export const PATH = '/.well-known/astrale/domain.json';
|
|
@@ -33,7 +34,8 @@ export function url(input) {
|
|
|
33
34
|
return `${admitted.replace(/\/+$/u, '')}${PATH}`;
|
|
34
35
|
}
|
|
35
36
|
export function seal(input) {
|
|
36
|
-
|
|
37
|
+
const canonical = withoutEtag(acceptPublication({ ...input, etag: 'canonicalizing' }, false, true));
|
|
38
|
+
return acceptPublication({ ...canonical, etag: computeEtag(canonical) }, false);
|
|
37
39
|
}
|
|
38
40
|
export function accept(input) {
|
|
39
41
|
const publication = acceptPublication(input, true);
|
|
@@ -45,18 +47,7 @@ export function accept(input) {
|
|
|
45
47
|
export function encode(input) {
|
|
46
48
|
return portable.json.encode(input);
|
|
47
49
|
}
|
|
48
|
-
|
|
49
|
-
const accepted = acceptBundleValue(artifact);
|
|
50
|
-
verifyBundleBytes(input, dslBundle.encode(accepted));
|
|
51
|
-
validateBundleInventory(input, accepted);
|
|
52
|
-
return accepted;
|
|
53
|
-
}
|
|
54
|
-
export function decodeBundle(input, bytes) {
|
|
55
|
-
const decoded = decodeBundleValue(input, bytes);
|
|
56
|
-
validateBundleInventory(input, decoded);
|
|
57
|
-
return decoded;
|
|
58
|
-
}
|
|
59
|
-
function acceptPublication(input, requireEtag) {
|
|
50
|
+
function acceptPublication(input, requireEtag, canonicalizeViews = false) {
|
|
60
51
|
const value = record(input, 'PUBLICATION_INVALID', 'Expected a Publication object.');
|
|
61
52
|
exact(value, [
|
|
62
53
|
'format',
|
|
@@ -74,7 +65,7 @@ function acceptPublication(input, requireEtag) {
|
|
|
74
65
|
if (value.format !== 'astrale.domain.publication' || value.version !== 2) {
|
|
75
66
|
fail('PUBLICATION_INVALID', 'Unsupported Publication format or version.');
|
|
76
67
|
}
|
|
77
|
-
if (typeof value.origin !== 'string' || !
|
|
68
|
+
if (typeof value.origin !== 'string' || !patterns.origin.test(value.origin)) {
|
|
78
69
|
fail('PUBLICATION_INVALID', 'Publication origin is invalid.');
|
|
79
70
|
}
|
|
80
71
|
const origin = value.origin;
|
|
@@ -91,7 +82,7 @@ function acceptPublication(input, requireEtag) {
|
|
|
91
82
|
exact(bindingSet, ['callables', 'views'], 'PUBLICATION_BINDING_INVALID');
|
|
92
83
|
const callables = array(bindingSet.callables, 'PUBLICATION_BINDING_INVALID').map((entry) => admitCallableBinding(entry, origin));
|
|
93
84
|
unique(callables.map(({ callable }) => callable), 'PUBLICATION_BINDING_INVALID', 'callable binding');
|
|
94
|
-
const views = array(bindingSet.views, 'PUBLICATION_VIEW_INVALID').map((entry) => admitViewBinding(entry, origin));
|
|
85
|
+
const views = array(bindingSet.views, 'PUBLICATION_VIEW_INVALID').map((entry) => canonicalizeViews ? canonicalizeViewBinding(entry, origin) : admitViewBinding(entry, origin));
|
|
95
86
|
unique(views.map(({ view }) => view), 'PUBLICATION_VIEW_INVALID', 'View binding');
|
|
96
87
|
const routes = array(value.routes, 'PUBLICATION_ROUTE_INVALID').map((entry) => admitRoute(entry, origin));
|
|
97
88
|
unique(routes.map(({ name }) => name), 'PUBLICATION_ROUTE_INVALID', 'route name');
|
|
@@ -101,7 +92,10 @@ function acceptPublication(input, requireEtag) {
|
|
|
101
92
|
}
|
|
102
93
|
}
|
|
103
94
|
if (manifest?.entrypoint !== undefined) {
|
|
104
|
-
|
|
95
|
+
if (manifest.entrypoint.origin !== origin) {
|
|
96
|
+
fail('PUBLICATION_VIEW_INVALID', 'Manifest entrypoint must belong to the root origin.');
|
|
97
|
+
}
|
|
98
|
+
const key = Key.of(manifest.entrypoint);
|
|
105
99
|
if (!views.some(({ view }) => view === key)) {
|
|
106
100
|
fail('PUBLICATION_VIEW_INVALID', 'Manifest entrypoint must have a published View binding.');
|
|
107
101
|
}
|
|
@@ -124,60 +118,12 @@ function acceptPublication(input, requireEtag) {
|
|
|
124
118
|
...(delivery === undefined ? {} : { delivery }),
|
|
125
119
|
});
|
|
126
120
|
}
|
|
127
|
-
function validateBundleInventory(publication, bundle) {
|
|
128
|
-
const root = bundle.root;
|
|
129
|
-
if (root.origin !== publication.origin ||
|
|
130
|
-
dslSchema.revision(root) !== publication.schema.revision) {
|
|
131
|
-
fail('PUBLICATION_INVALID', 'Bundle root does not match the Publication schema.');
|
|
132
|
-
}
|
|
133
|
-
validateRequirements(root, bundle.closure, publication.requirements);
|
|
134
|
-
const callables = concreteCallables(root);
|
|
135
|
-
const publishedCallables = new Set(publication.bindings.callables.map(({ callable }) => callable));
|
|
136
|
-
if (publishedCallables.size !== callables.size ||
|
|
137
|
-
[...callables].some((key) => !publishedCallables.has(key))) {
|
|
138
|
-
fail('PUBLICATION_BINDING_INVALID', 'Callable bindings must exhaust the root Domain.');
|
|
139
|
-
}
|
|
140
|
-
const views = new Set(Object.keys(root.views).map((name) => Key.of(root.origin, Ref.definition('view', name))));
|
|
141
|
-
const publishedViews = new Set(publication.bindings.views.map(({ view }) => view));
|
|
142
|
-
if (publishedViews.size !== views.size || [...views].some((key) => !publishedViews.has(key))) {
|
|
143
|
-
fail('PUBLICATION_VIEW_INVALID', 'View bindings must exhaust the root Domain.');
|
|
144
|
-
}
|
|
145
|
-
if (publication.manifest?.entrypoint !== undefined &&
|
|
146
|
-
root.views[Ref.member(publication.manifest.entrypoint)] === undefined) {
|
|
147
|
-
fail('PUBLICATION_INVALID', 'Manifest entrypoint does not exist in the root schema.');
|
|
148
|
-
}
|
|
149
|
-
for (const route of publication.routes) {
|
|
150
|
-
if (!callables.has(route.callable)) {
|
|
151
|
-
fail('PUBLICATION_ROUTE_INVALID', `Route ${route.name} names an unknown callable.`);
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
}
|
|
155
|
-
function concreteCallables(root) {
|
|
156
|
-
const result = new Set();
|
|
157
|
-
for (const name of Object.keys(root.functions)) {
|
|
158
|
-
result.add(Key.of(root.origin, Ref.definition('function', name)));
|
|
159
|
-
}
|
|
160
|
-
addConcreteMethods(result, root.origin, 'class', root.classes);
|
|
161
|
-
addConcreteMethods(result, root.origin, 'interface', root.interfaces);
|
|
162
|
-
return result;
|
|
163
|
-
}
|
|
164
|
-
function addConcreteMethods(result, origin, kind, definitions) {
|
|
165
|
-
for (const [owner, declaration] of Object.entries(definitions)) {
|
|
166
|
-
if (declaration.family !== 'node')
|
|
167
|
-
continue;
|
|
168
|
-
for (const [name, method] of Object.entries(declaration.methods)) {
|
|
169
|
-
if (method.inheritance === 'abstract')
|
|
170
|
-
continue;
|
|
171
|
-
result.add(Key.of(origin, Ref.method(Ref.definition(kind, owner), name)));
|
|
172
|
-
}
|
|
173
|
-
}
|
|
174
|
-
}
|
|
175
121
|
function admitIssuer(input) {
|
|
176
122
|
try {
|
|
177
|
-
return
|
|
123
|
+
return acceptIssuerId(String(input));
|
|
178
124
|
}
|
|
179
125
|
catch (cause) {
|
|
180
|
-
if (cause instanceof
|
|
126
|
+
if (cause instanceof AuthValueError) {
|
|
181
127
|
return fail('PUBLICATION_INVALID', 'Publication issuer is invalid.', cause);
|
|
182
128
|
}
|
|
183
129
|
throw cause;
|
|
@@ -187,4 +133,3 @@ function withoutEtag(input) {
|
|
|
187
133
|
const { etag: _etag, ...content } = input;
|
|
188
134
|
return content;
|
|
189
135
|
}
|
|
190
|
-
//# sourceMappingURL=publication.js.map
|
|
@@ -1,11 +1,12 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import type { Revision } from '@astrale-os/kernel-dsl/v1/addressing';
|
|
2
|
+
import { type Key } from '@astrale-os/kernel-dsl/v1/addressing';
|
|
2
3
|
import type { Etag } from './etag.js';
|
|
3
4
|
import type { Publication } from './publication.js';
|
|
4
5
|
/** Compact untrusted projection that witnesses one exact Publication. */
|
|
5
6
|
export interface PublicationRef {
|
|
6
7
|
readonly origin: Key.Origin;
|
|
7
8
|
readonly identity: Publication['identity'];
|
|
8
|
-
readonly revision:
|
|
9
|
+
readonly revision: Revision;
|
|
9
10
|
readonly etag: Etag;
|
|
10
11
|
}
|
|
11
12
|
export type PublicationReferenceRelation = 'exact' | 'same-schema' | 'schema-drift' | 'identity-drift' | 'origin-drift';
|
|
@@ -14,4 +15,3 @@ export declare function acceptReference(input: unknown): PublicationRef;
|
|
|
14
15
|
export declare function compareReferences(input: PublicationRef, expected: PublicationRef): PublicationReferenceRelation;
|
|
15
16
|
export declare function compareReference(input: Publication, expected: PublicationRef): PublicationReferenceRelation;
|
|
16
17
|
export declare function matchesReference(input: Publication, expected: PublicationRef): boolean;
|
|
17
|
-
//# sourceMappingURL=reference.d.ts.map
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import
|
|
2
|
-
import {
|
|
1
|
+
import { AuthValueError } from '@astrale-os/kernel-core/auth/error';
|
|
2
|
+
import { accept as acceptIssuerId } from '@astrale-os/kernel-core/auth/issuer';
|
|
3
|
+
import { patterns } from '@astrale-os/kernel-dsl/v1/addressing';
|
|
3
4
|
import { deepFreeze, exact, record } from './content.js';
|
|
4
5
|
import { fail } from './error.js';
|
|
5
6
|
import { admitDigest } from './etag.js';
|
|
@@ -14,7 +15,7 @@ export function reference(input) {
|
|
|
14
15
|
export function acceptReference(input) {
|
|
15
16
|
const value = record(input, 'PUBLICATION_INVALID', 'Publication reference is invalid.');
|
|
16
17
|
exact(value, ['origin', 'identity', 'revision', 'etag'], 'PUBLICATION_INVALID');
|
|
17
|
-
if (typeof value.origin !== 'string' || !
|
|
18
|
+
if (typeof value.origin !== 'string' || !patterns.origin.test(value.origin)) {
|
|
18
19
|
fail('PUBLICATION_INVALID', 'Publication reference origin is invalid.');
|
|
19
20
|
}
|
|
20
21
|
const origin = value.origin;
|
|
@@ -24,7 +25,7 @@ export function acceptReference(input) {
|
|
|
24
25
|
if (identity.subject !== origin) {
|
|
25
26
|
fail('PUBLICATION_INVALID', 'Publication reference subject must equal its root origin.');
|
|
26
27
|
}
|
|
27
|
-
if (typeof value.revision !== 'string' || !
|
|
28
|
+
if (typeof value.revision !== 'string' || !patterns.revision.test(value.revision)) {
|
|
28
29
|
fail('PUBLICATION_INVALID', 'Publication reference revision is invalid.');
|
|
29
30
|
}
|
|
30
31
|
return deepFreeze({
|
|
@@ -56,13 +57,12 @@ function acceptIssuer(input) {
|
|
|
56
57
|
fail('PUBLICATION_INVALID', 'Publication reference issuer is invalid.');
|
|
57
58
|
}
|
|
58
59
|
try {
|
|
59
|
-
return
|
|
60
|
+
return acceptIssuerId(input);
|
|
60
61
|
}
|
|
61
62
|
catch (cause) {
|
|
62
|
-
if (cause instanceof
|
|
63
|
+
if (cause instanceof AuthValueError) {
|
|
63
64
|
return fail('PUBLICATION_INVALID', 'Publication reference issuer is invalid.', cause);
|
|
64
65
|
}
|
|
65
66
|
throw cause;
|
|
66
67
|
}
|
|
67
68
|
}
|
|
68
|
-
//# sourceMappingURL=reference.js.map
|
|
@@ -1,20 +1,22 @@
|
|
|
1
|
-
import type { AuthorityOperation } from '@astrale-os/kernel-core/schema';
|
|
2
|
-
import type {
|
|
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 { ClassRef, Key as SemanticKey } from '@astrale-os/kernel-dsl/v1/addressing';
|
|
3
4
|
export type NonEmpty<Value> = readonly [Value, ...Value[]];
|
|
4
5
|
export declare const ClassOperationOrder: readonly ["create", "read", "traverse", "update", "delete"];
|
|
5
6
|
export type ClassOperation = (typeof ClassOperationOrder)[number];
|
|
6
7
|
export interface ClassCapabilityRequirement {
|
|
7
|
-
readonly class:
|
|
8
|
+
readonly class: ClassRef;
|
|
8
9
|
readonly operations: NonEmpty<ClassOperation>;
|
|
9
10
|
}
|
|
10
|
-
export interface
|
|
11
|
+
export interface CapabilityAuthorityRequirements {
|
|
11
12
|
readonly grant?: NonEmpty<AuthorityOperation>;
|
|
12
13
|
readonly revoke?: NonEmpty<AuthorityOperation>;
|
|
13
14
|
}
|
|
14
15
|
export interface CapabilityRequirements {
|
|
15
16
|
readonly functions?: NonEmpty<SemanticKey.Callable>;
|
|
16
17
|
readonly classes?: NonEmpty<ClassCapabilityRequirement>;
|
|
17
|
-
readonly
|
|
18
|
+
readonly authority?: CapabilityAuthorityRequirements;
|
|
19
|
+
readonly admin?: never;
|
|
18
20
|
}
|
|
19
21
|
export interface PublicationRequirements {
|
|
20
22
|
readonly capabilities: CapabilityRequirements;
|
|
@@ -23,4 +25,3 @@ export interface PublicationRequirements {
|
|
|
23
25
|
export declare function admitRequirements(input: unknown): PublicationRequirements;
|
|
24
26
|
/** Bind explicit capability targets to exact functional dependencies in the bundle closure. */
|
|
25
27
|
export declare function validateRequirements(root: schema.DomainSchema, closure: readonly schema.DomainSchema[], requirements: PublicationRequirements): void;
|
|
26
|
-
//# sourceMappingURL=requirements.d.ts.map
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import { AuthorityOperationOrder } from '@astrale-os/kernel-core/schema';
|
|
2
|
-
import {
|
|
1
|
+
import { AuthorityOperationOrder } from '@astrale-os/kernel-core/schema/authority/operation';
|
|
2
|
+
import { acceptDefinitionRef, callableAddress, Key } from '@astrale-os/kernel-dsl/v1/addressing';
|
|
3
|
+
import { revision } from '@astrale-os/kernel-dsl/v1/schema/revision';
|
|
3
4
|
import { array, deepFreeze, exact, record, unique } from './content.js';
|
|
4
5
|
import { fail } from './error.js';
|
|
5
6
|
export const ClassOperationOrder = Object.freeze([
|
|
@@ -14,7 +15,7 @@ export function admitRequirements(input) {
|
|
|
14
15
|
const requirements = record(input, 'PUBLICATION_INVALID', 'Publication requirements are invalid.');
|
|
15
16
|
exact(requirements, ['capabilities'], 'PUBLICATION_INVALID');
|
|
16
17
|
const capabilities = record(requirements.capabilities, 'PUBLICATION_INVALID', 'Publication capability requirements are invalid.');
|
|
17
|
-
exact(capabilities, ['
|
|
18
|
+
exact(capabilities, ['authority', 'classes', 'functions'], 'PUBLICATION_INVALID');
|
|
18
19
|
const functions = capabilities.functions === undefined
|
|
19
20
|
? undefined
|
|
20
21
|
: nonEmpty(capabilities.functions, 'Function capability requirements').map(admitCallable);
|
|
@@ -29,7 +30,9 @@ export function admitRequirements(input) {
|
|
|
29
30
|
unique(classes.map((entry) => classKey(entry.class)), 'PUBLICATION_INVALID', 'Class capability requirement');
|
|
30
31
|
canonical(classes, (left, right) => compare(classKey(left.class), classKey(right.class)), 'Class capability requirements');
|
|
31
32
|
}
|
|
32
|
-
const
|
|
33
|
+
const authority = capabilities.authority === undefined
|
|
34
|
+
? undefined
|
|
35
|
+
: admitAuthorityRequirements(capabilities.authority);
|
|
33
36
|
return deepFreeze({
|
|
34
37
|
capabilities: {
|
|
35
38
|
...(functions === undefined
|
|
@@ -38,7 +41,7 @@ export function admitRequirements(input) {
|
|
|
38
41
|
...(classes === undefined
|
|
39
42
|
? {}
|
|
40
43
|
: { classes: Object.freeze(classes) }),
|
|
41
|
-
...(
|
|
44
|
+
...(authority === undefined ? {} : { authority }),
|
|
42
45
|
},
|
|
43
46
|
});
|
|
44
47
|
}
|
|
@@ -46,17 +49,15 @@ export function admitRequirements(input) {
|
|
|
46
49
|
export function validateRequirements(root, closure, requirements) {
|
|
47
50
|
const dependencies = exactDependencyClosure(root, closure);
|
|
48
51
|
for (const callable of requirements.capabilities.functions ?? []) {
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
const reference = Key.ref(callable);
|
|
52
|
-
if (!hasCallable(dependency, reference)) {
|
|
52
|
+
const dependency = capabilityOwner(root, dependencies, callable, 'Function');
|
|
53
|
+
if (!hasCallable(dependency, callable)) {
|
|
53
54
|
fail('PUBLICATION_INVALID', 'Function capability requirement names an unknown dependency callable.');
|
|
54
55
|
}
|
|
55
56
|
}
|
|
56
57
|
for (const requirement of requirements.capabilities.classes ?? []) {
|
|
57
|
-
const key = Key.
|
|
58
|
-
|
|
59
|
-
if (
|
|
58
|
+
const key = Key.of(requirement.class);
|
|
59
|
+
const dependency = capabilityOwner(root, dependencies, key, 'Class');
|
|
60
|
+
if (dependency.classes[requirement.class.name] === undefined) {
|
|
60
61
|
fail('PUBLICATION_INVALID', 'Class capability requirement names an unknown dependency Class.');
|
|
61
62
|
}
|
|
62
63
|
}
|
|
@@ -65,9 +66,9 @@ function exactDependencyClosure(root, closure) {
|
|
|
65
66
|
const supplied = new Map(closure.map((dependency) => [dependency.origin, dependency]));
|
|
66
67
|
const reachable = new Map();
|
|
67
68
|
const visit = (owner) => {
|
|
68
|
-
for (const coordinate of owner.dependencies) {
|
|
69
|
+
for (const coordinate of Object.values(owner.dependencies)) {
|
|
69
70
|
const dependency = supplied.get(coordinate.origin);
|
|
70
|
-
if (dependency === undefined ||
|
|
71
|
+
if (dependency === undefined || revision(dependency) !== coordinate.revision) {
|
|
71
72
|
fail('PUBLICATION_INVALID', 'Publication Bundle omits an exact dependency.');
|
|
72
73
|
}
|
|
73
74
|
if (reachable.has(dependency.origin))
|
|
@@ -83,8 +84,10 @@ function admitCallable(input) {
|
|
|
83
84
|
if (typeof input !== 'string' || !Key.is(input)) {
|
|
84
85
|
return fail('PUBLICATION_INVALID', 'Function capability reference is invalid.');
|
|
85
86
|
}
|
|
86
|
-
|
|
87
|
-
|
|
87
|
+
try {
|
|
88
|
+
callableAddress(input);
|
|
89
|
+
}
|
|
90
|
+
catch {
|
|
88
91
|
return fail('PUBLICATION_INVALID', 'Function capability reference must name a Function or Method.');
|
|
89
92
|
}
|
|
90
93
|
return input;
|
|
@@ -100,14 +103,14 @@ function admitClassRequirement(input) {
|
|
|
100
103
|
operations: Object.freeze(operations),
|
|
101
104
|
});
|
|
102
105
|
}
|
|
103
|
-
function
|
|
104
|
-
const
|
|
105
|
-
exact(
|
|
106
|
-
if (
|
|
107
|
-
fail('PUBLICATION_INVALID', '
|
|
106
|
+
function admitAuthorityRequirements(input) {
|
|
107
|
+
const authority = record(input, 'PUBLICATION_INVALID', 'Authority capability requirements are invalid.');
|
|
108
|
+
exact(authority, ['grant', 'revoke'], 'PUBLICATION_INVALID');
|
|
109
|
+
if (authority.grant === undefined && authority.revoke === undefined) {
|
|
110
|
+
fail('PUBLICATION_INVALID', 'Authority capability requirements cannot be empty.');
|
|
108
111
|
}
|
|
109
|
-
const grant = admitAuthorityOperations(
|
|
110
|
-
const revoke = admitAuthorityOperations(
|
|
112
|
+
const grant = admitAuthorityOperations(authority.grant, 'grant');
|
|
113
|
+
const revoke = admitAuthorityOperations(authority.revoke, 'revoke');
|
|
111
114
|
return Object.freeze({
|
|
112
115
|
...(grant === undefined ? {} : { grant }),
|
|
113
116
|
...(revoke === undefined ? {} : { revoke }),
|
|
@@ -116,22 +119,22 @@ function admitAdminRequirements(input) {
|
|
|
116
119
|
function admitAuthorityOperations(input, kind) {
|
|
117
120
|
if (input === undefined)
|
|
118
121
|
return undefined;
|
|
119
|
-
const values = nonEmpty(input, `
|
|
120
|
-
unique(values, 'PUBLICATION_INVALID', `
|
|
121
|
-
canonical(values, ordered(AuthorityOperationOrder), `
|
|
122
|
+
const values = nonEmpty(input, `Authority ${kind} operations`).map((entry) => admitOperation(entry, AuthorityOperationOrder, `Authority ${kind} operation`));
|
|
123
|
+
unique(values, 'PUBLICATION_INVALID', `authority ${kind} operation`);
|
|
124
|
+
canonical(values, ordered(AuthorityOperationOrder), `Authority ${kind} operations`);
|
|
122
125
|
return Object.freeze(values);
|
|
123
126
|
}
|
|
124
127
|
function admitClassRef(input) {
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
typeof value.name !== 'string' ||
|
|
131
|
-
!dslSchema.patterns.memberName.test(value.name)) {
|
|
128
|
+
let value;
|
|
129
|
+
try {
|
|
130
|
+
value = acceptDefinitionRef(input);
|
|
131
|
+
}
|
|
132
|
+
catch {
|
|
132
133
|
fail('PUBLICATION_INVALID', 'Class capability reference is invalid.');
|
|
133
134
|
}
|
|
134
|
-
|
|
135
|
+
if (value.kind !== 'class')
|
|
136
|
+
fail('PUBLICATION_INVALID', 'Class capability reference is invalid.');
|
|
137
|
+
return value;
|
|
135
138
|
}
|
|
136
139
|
function nonEmpty(input, label) {
|
|
137
140
|
const values = [...array(input, 'PUBLICATION_INVALID')];
|
|
@@ -157,24 +160,23 @@ function compare(left, right) {
|
|
|
157
160
|
return left < right ? -1 : left > right ? 1 : 0;
|
|
158
161
|
}
|
|
159
162
|
function classKey(input) {
|
|
160
|
-
return String(Key.
|
|
163
|
+
return String(Key.of(input));
|
|
161
164
|
}
|
|
162
|
-
function
|
|
165
|
+
function capabilityOwner(root, dependencies, key, label) {
|
|
163
166
|
const origin = Key.origin(key);
|
|
164
167
|
if (origin === root.origin)
|
|
165
168
|
fail('PUBLICATION_INVALID', `${label} capability target cannot be local.`);
|
|
166
|
-
|
|
169
|
+
const dependency = dependencies.get(origin);
|
|
170
|
+
if (dependency === undefined) {
|
|
167
171
|
fail('PUBLICATION_INVALID', `${label} capability target must belong to the exact dependency closure.`);
|
|
168
172
|
}
|
|
173
|
+
return dependency;
|
|
169
174
|
}
|
|
170
|
-
function hasCallable(dependency,
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
const
|
|
175
|
-
const
|
|
176
|
-
|
|
177
|
-
const declaration = ownerKind === 'class' ? dependency.classes[owner] : dependency.interfaces[owner];
|
|
178
|
-
return declaration?.family === 'node' && declaration.methods[method] !== undefined;
|
|
175
|
+
function hasCallable(dependency, callable) {
|
|
176
|
+
const coordinate = callableAddress(callable);
|
|
177
|
+
if (coordinate.kind === 'function')
|
|
178
|
+
return dependency.functions[coordinate.name] !== undefined;
|
|
179
|
+
const declaration = dependency.classes[coordinate.owner.name];
|
|
180
|
+
const method = declaration?.kind === 'node' ? declaration.methods[coordinate.name] : undefined;
|
|
181
|
+
return method !== undefined && method.inheritance !== 'abstract';
|
|
179
182
|
}
|
|
180
|
-
//# sourceMappingURL=requirements.js.map
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type Key } from '@astrale-os/kernel-dsl/v1';
|
|
1
|
+
import { type Key } from '@astrale-os/kernel-dsl/v1/addressing';
|
|
2
2
|
export type HttpMethod = 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE' | '*';
|
|
3
3
|
export type SingleCredentialSource = {
|
|
4
4
|
readonly in: 'header';
|
|
@@ -29,5 +29,9 @@ export interface HttpRoute {
|
|
|
29
29
|
readonly body?: RouteBody;
|
|
30
30
|
readonly credential?: CredentialSource;
|
|
31
31
|
}
|
|
32
|
+
/** Provider-neutral build input; placement replaces path with the canonical absolute href. */
|
|
33
|
+
export interface HttpRouteDeclaration extends Omit<HttpRoute, 'href'> {
|
|
34
|
+
readonly path: string;
|
|
35
|
+
}
|
|
32
36
|
export declare function admitRoute(input: unknown, origin: string): HttpRoute;
|
|
33
|
-
|
|
37
|
+
export declare function admitRouteDeclaration(input: unknown, origin: string): HttpRouteDeclaration;
|
|
@@ -1,14 +1,39 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { patterns } from '@astrale-os/kernel-dsl/v1/addressing';
|
|
2
2
|
import { admitCallableKey } from './bindings/callable.js';
|
|
3
3
|
import { absoluteHttpUrl, deepFreeze, exact, record } from './content.js';
|
|
4
4
|
import { fail } from './error.js';
|
|
5
5
|
const ROUTE_NAME = /^[A-Za-z][A-Za-z0-9_-]{0,63}$/u;
|
|
6
6
|
export function admitRoute(input, origin) {
|
|
7
7
|
const value = record(input, 'PUBLICATION_ROUTE_INVALID', 'Published HTTP route is invalid.');
|
|
8
|
+
const common = admitRouteCommon(value, origin, 'href');
|
|
9
|
+
return deepFreeze({
|
|
10
|
+
...common,
|
|
11
|
+
href: absoluteHttpUrl(value.href, false, 'PUBLICATION_ROUTE_INVALID', true),
|
|
12
|
+
});
|
|
13
|
+
}
|
|
14
|
+
export function admitRouteDeclaration(input, origin) {
|
|
15
|
+
const value = record(input, 'PUBLICATION_ROUTE_INVALID', 'HTTP route declaration is invalid.');
|
|
16
|
+
const common = admitRouteCommon(value, origin, 'path');
|
|
17
|
+
if (typeof value.path !== 'string' || !value.path.startsWith('/')) {
|
|
18
|
+
fail('PUBLICATION_ROUTE_INVALID', 'Route declaration path must be relative to one issuer.');
|
|
19
|
+
}
|
|
20
|
+
let parsed;
|
|
21
|
+
try {
|
|
22
|
+
parsed = new URL(value.path, 'https://placement.invalid');
|
|
23
|
+
}
|
|
24
|
+
catch (cause) {
|
|
25
|
+
return fail('PUBLICATION_ROUTE_INVALID', 'Route declaration path is invalid.', cause);
|
|
26
|
+
}
|
|
27
|
+
if (parsed.origin !== 'https://placement.invalid' || parsed.search !== '' || parsed.hash !== '') {
|
|
28
|
+
fail('PUBLICATION_ROUTE_INVALID', 'Route declaration path cannot select an origin, query, or fragment.');
|
|
29
|
+
}
|
|
30
|
+
return deepFreeze({ ...common, path: value.path });
|
|
31
|
+
}
|
|
32
|
+
function admitRouteCommon(value, origin, location) {
|
|
8
33
|
exact(value, [
|
|
9
34
|
'name',
|
|
10
35
|
'callable',
|
|
11
|
-
|
|
36
|
+
location,
|
|
12
37
|
'method',
|
|
13
38
|
'requestMethod',
|
|
14
39
|
'default',
|
|
@@ -29,22 +54,20 @@ export function admitRoute(input, origin) {
|
|
|
29
54
|
fail('PUBLICATION_ROUTE_INVALID', 'Route default may only be true.');
|
|
30
55
|
}
|
|
31
56
|
if (value.requestMethod !== undefined &&
|
|
32
|
-
(typeof value.requestMethod !== 'string' ||
|
|
33
|
-
!dslSchema.patterns.memberName.test(value.requestMethod))) {
|
|
57
|
+
(typeof value.requestMethod !== 'string' || !patterns.memberName.test(value.requestMethod))) {
|
|
34
58
|
fail('PUBLICATION_ROUTE_INVALID', 'Route request-method mapping is invalid.');
|
|
35
59
|
}
|
|
36
60
|
if (value.receiver !== undefined &&
|
|
37
|
-
(typeof value.receiver !== 'string' || !
|
|
61
|
+
(typeof value.receiver !== 'string' || !patterns.memberName.test(value.receiver))) {
|
|
38
62
|
fail('PUBLICATION_ROUTE_INVALID', 'Route receiver is invalid.');
|
|
39
63
|
}
|
|
40
64
|
const query = stringRecord(value.query);
|
|
41
65
|
const headers = headerRecord(value.headers);
|
|
42
66
|
const body = admitBody(value.body);
|
|
43
67
|
const credential = admitCredential(value.credential);
|
|
44
|
-
return
|
|
68
|
+
return {
|
|
45
69
|
name: value.name,
|
|
46
70
|
callable,
|
|
47
|
-
href: absoluteHttpUrl(value.href, false, 'PUBLICATION_ROUTE_INVALID', true),
|
|
48
71
|
method: value.method,
|
|
49
72
|
...(value.requestMethod === undefined ? {} : { requestMethod: value.requestMethod }),
|
|
50
73
|
...(value.default === true ? { default: true } : {}),
|
|
@@ -53,7 +76,7 @@ export function admitRoute(input, origin) {
|
|
|
53
76
|
...(headers === undefined ? {} : { headers }),
|
|
54
77
|
...(body === undefined ? {} : { body }),
|
|
55
78
|
...(credential === undefined ? {} : { credential }),
|
|
56
|
-
}
|
|
79
|
+
};
|
|
57
80
|
}
|
|
58
81
|
function admitCredential(input) {
|
|
59
82
|
if (input === undefined)
|
|
@@ -129,4 +152,3 @@ function stringRecord(input) {
|
|
|
129
152
|
}
|
|
130
153
|
return Object.freeze(output);
|
|
131
154
|
}
|
|
132
|
-
//# sourceMappingURL=route.js.map
|
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import type { BundleDescriptor } from './bundle.js';
|
|
1
|
+
import type { Revision } from '@astrale-os/kernel-dsl/v1/addressing';
|
|
2
|
+
import type { BundleDescriptor } from './bundle-descriptor.js';
|
|
3
3
|
export interface Schema {
|
|
4
|
-
readonly revision:
|
|
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
|