@astrale-os/kernel-protocol 0.5.0-beta.8 → 1.0.0-beta.1
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 +1 -3
- package/dist/codecs/index.js +1 -3
- package/dist/codecs/json.d.ts +0 -1
- package/dist/codecs/json.js +0 -1
- package/dist/codecs/media-types.d.ts +0 -2
- package/dist/codecs/media-types.js +0 -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 +1 -1
- package/dist/errors/index.js +1 -1
- package/dist/errors/payload.d.ts +0 -1
- package/dist/errors/payload.js +0 -1
- package/dist/errors/protocol-error.d.ts +0 -1
- package/dist/errors/protocol-error.js +0 -1
- package/dist/errors/reason.d.ts +0 -1
- package/dist/errors/reason.js +0 -1
- package/dist/errors/retry.d.ts +23 -0
- package/dist/errors/retry.js +44 -0
- package/dist/index.d.ts +1 -2
- package/dist/index.js +1 -2
- package/dist/invocation/admission.d.ts +2 -3
- package/dist/invocation/admission.js +5 -6
- package/dist/invocation/binary.d.ts +1 -1
- package/dist/invocation/binary.js +21 -5
- package/dist/invocation/binding-codecs.d.ts +3 -3
- package/dist/invocation/binding-codecs.js +1 -7
- 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 -21
- package/dist/invocation/delegate.js +2 -35
- package/dist/invocation/http/binary.d.ts +3 -2
- package/dist/invocation/http/binary.js +6 -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 +3 -11
- package/dist/invocation/http/request.d.ts +11 -0
- package/dist/invocation/http/request.js +69 -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 +3 -4
- package/dist/invocation/index.js +3 -4
- package/dist/invocation/miss.d.ts +0 -1
- package/dist/invocation/miss.js +0 -1
- package/dist/invocation/redirect.d.ts +10 -13
- package/dist/invocation/redirect.js +10 -23
- package/dist/invocation/request.d.ts +0 -1
- package/dist/invocation/request.js +2 -3
- package/dist/invocation/response.d.ts +0 -1
- package/dist/invocation/response.js +0 -1
- package/dist/invocation/routing.d.ts +14 -5
- package/dist/invocation/routing.js +35 -21
- package/dist/invocation/schema.d.ts +6 -5
- package/dist/invocation/schema.js +5 -12
- package/dist/invocation/service-reason.d.ts +20 -16
- package/dist/invocation/service-reason.js +27 -20
- package/dist/invocation/stale-route.d.ts +3 -4
- 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 +5 -3
- package/dist/invocation/target.js +25 -4
- 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 +1 -1
- package/dist/invocation/websocket/index.d.ts +1 -2
- package/dist/invocation/websocket/index.js +1 -2
- package/dist/invocation/websocket/subprotocol.d.ts +1 -3
- package/dist/invocation/websocket/subprotocol.js +3 -5
- package/dist/issuer/claims.d.ts +7 -0
- package/dist/issuer/claims.js +7 -0
- 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 +2 -1
- package/dist/issuer/index.js +2 -1
- package/dist/issuer/key-set.d.ts +0 -1
- package/dist/issuer/key-set.js +0 -1
- package/dist/issuer/paths.d.ts +2 -1
- package/dist/issuer/paths.js +1 -1
- package/dist/issuer/url.d.ts +0 -1
- package/dist/issuer/url.js +0 -1
- package/dist/issuer/workflow-engine.d.ts +18 -0
- package/dist/issuer/workflow-engine.js +59 -0
- package/dist/{publication → release}/bindings/callable.d.ts +0 -1
- package/dist/{publication → release}/bindings/callable.js +6 -7
- package/dist/{publication → release}/bindings/index.d.ts +0 -1
- package/dist/{publication → release}/bindings/index.js +0 -1
- package/dist/{publication → release}/bindings/invocation.d.ts +0 -1
- package/dist/release/bindings/invocation.js +13 -0
- package/dist/release/bindings/view.d.ts +11 -0
- package/dist/release/bindings/view.js +54 -0
- package/dist/release/build.d.ts +6 -0
- package/dist/release/build.js +7 -0
- package/dist/release/bundle-admission.d.ts +21 -0
- package/dist/{publication → release}/bundle-admission.js +15 -21
- package/dist/{publication → release}/bundle-descriptor.d.ts +0 -1
- package/dist/release/bundle-descriptor.js +19 -0
- package/dist/release/bundle-evidence.d.ts +3 -0
- package/dist/release/bundle-evidence.js +13 -0
- package/dist/{publication → release}/bundle.d.ts +5 -3
- package/dist/{publication → release}/bundle.js +13 -8
- package/dist/{publication → release}/declaration.d.ts +0 -1
- package/dist/release/declaration.js +1 -0
- package/dist/{publication → release}/delivery/attestation.d.ts +1 -1
- package/dist/{publication → release}/delivery/attestation.js +0 -1
- package/dist/{publication → release}/delivery/claims.d.ts +7 -3
- package/dist/{publication → release}/delivery/claims.js +20 -14
- package/dist/release/delivery/delivery.d.ts +11 -0
- package/dist/{publication → release}/delivery/delivery.js +7 -13
- package/dist/{publication → release}/delivery/error.d.ts +2 -1
- package/dist/{publication → release}/delivery/error.js +1 -1
- package/dist/{publication → release}/delivery/index.d.ts +5 -2
- package/dist/{publication → release}/delivery/index.js +4 -1
- package/dist/{publication → release}/delivery/limits.d.ts +2 -2
- package/dist/release/delivery/limits.js +5 -0
- package/dist/{publication → release}/delivery/request.d.ts +10 -10
- package/dist/{publication → release}/delivery/request.js +9 -11
- package/dist/{publication → release}/delivery-declaration.d.ts +0 -1
- package/dist/{publication → release}/delivery-declaration.js +4 -5
- package/dist/{publication → release}/delivery-endpoint.d.ts +0 -1
- package/dist/release/delivery-endpoint.js +22 -0
- package/dist/release/digest.d.ts +13 -0
- package/dist/{publication/etag.js → release/digest.js} +1 -7
- package/dist/release/error.d.ts +7 -0
- package/dist/release/error.js +11 -0
- package/dist/release/index.d.ts +17 -0
- package/dist/release/index.js +10 -0
- package/dist/release/issuer.d.ts +5 -0
- package/dist/release/issuer.js +34 -0
- package/dist/release/manifest.d.ts +6 -0
- package/dist/release/manifest.js +22 -0
- package/dist/release/reference.d.ts +26 -0
- package/dist/release/reference.js +70 -0
- package/dist/release/release.d.ts +60 -0
- package/dist/release/release.js +125 -0
- package/dist/release/requirements.d.ts +41 -0
- package/dist/release/requirements.js +306 -0
- package/dist/{publication → release}/route.d.ts +0 -1
- package/dist/{publication → release}/route.js +24 -25
- package/dist/{publication → release}/schema.d.ts +0 -1
- package/dist/{publication → release}/schema.js +4 -5
- package/dist/release/served.d.ts +27 -0
- package/dist/release/served.js +56 -0
- package/dist/release/shape.d.ts +8 -0
- package/dist/{publication/content.js → release/shape.js} +0 -1
- package/dist/routes/admission.d.ts +1 -2
- package/dist/routes/admission.js +7 -86
- package/dist/routes/binding.d.ts +3 -4
- package/dist/routes/binding.js +11 -22
- 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 +7 -4
- package/dist/routes/credential.d.ts +12 -3
- package/dist/routes/credential.js +9 -5
- package/dist/routes/decode.d.ts +5 -3
- package/dist/routes/decode.js +24 -18
- package/dist/routes/deployment-retired.d.ts +30 -0
- package/dist/routes/deployment-retired.js +96 -0
- package/dist/routes/encode.d.ts +0 -1
- package/dist/routes/encode.js +12 -6
- package/dist/routes/entries.d.ts +23 -0
- package/dist/routes/entries.js +150 -0
- 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 +7 -34
- package/dist/routes/header.d.ts +9 -0
- package/dist/routes/header.js +34 -0
- package/dist/routes/index.d.ts +2 -3
- package/dist/routes/index.js +2 -3
- package/dist/routes/mapping.d.ts +1 -2
- package/dist/routes/mapping.js +4 -5
- package/dist/routes/match.d.ts +1 -2
- package/dist/routes/match.js +0 -1
- package/dist/routes/placement.d.ts +2 -3
- package/dist/routes/placement.js +0 -1
- package/dist/routes/plan.d.ts +1 -2
- package/dist/routes/plan.js +0 -1
- package/dist/routes/request.d.ts +3 -2
- package/dist/routes/request.js +0 -1
- package/dist/routes/reservation.d.ts +4 -3
- package/dist/routes/reservation.js +14 -9
- package/dist/routes/routing.d.ts +18 -7
- package/dist/routes/routing.js +28 -50
- package/dist/routes/scalar.d.ts +0 -1
- package/dist/routes/scalar.js +0 -1
- package/dist/routes/select.d.ts +1 -2
- 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 +3 -3
- package/dist/routes/table.js +0 -1
- package/dist/routes/target.d.ts +5 -1
- package/dist/routes/target.js +16 -1
- package/dist/routes/template.d.ts +0 -2
- package/dist/routes/template.js +0 -4
- package/dist/runtime/artifact.d.ts +5 -5
- package/dist/runtime/artifact.js +7 -5
- 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 +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 +5 -3
- package/dist/schema/installation/introspection/codec.js +307 -196
- 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 +72 -26
- 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 +23 -78
- 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 +0 -5
- package/dist/codecs/msgpack.d.ts.map +0 -1
- package/dist/codecs/msgpack.js +0 -51
- 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 +0 -14
- package/dist/publication/bindings/invocation.js.map +0 -1
- package/dist/publication/bindings/view.d.ts +0 -8
- package/dist/publication/bindings/view.d.ts.map +0 -1
- package/dist/publication/bindings/view.js +0 -29
- package/dist/publication/bindings/view.js.map +0 -1
- package/dist/publication/bundle-admission.d.ts +0 -5
- 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 +0 -20
- package/dist/publication/bundle-descriptor.js.map +0 -1
- package/dist/publication/bundle-evidence.d.ts +0 -4
- package/dist/publication/bundle-evidence.d.ts.map +0 -1
- package/dist/publication/bundle-evidence.js +0 -14
- 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 +0 -11
- 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 +0 -2
- 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 +0 -10
- 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 +0 -5
- 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 +0 -23
- package/dist/publication/delivery-endpoint.js.map +0 -1
- package/dist/publication/error.d.ts +0 -8
- package/dist/publication/error.d.ts.map +0 -1
- package/dist/publication/error.js +0 -12
- package/dist/publication/error.js.map +0 -1
- package/dist/publication/etag.d.ts +0 -7
- package/dist/publication/etag.d.ts.map +0 -1
- package/dist/publication/etag.js.map +0 -1
- package/dist/publication/index.d.ts +0 -18
- package/dist/publication/index.d.ts.map +0 -1
- package/dist/publication/index.js +0 -11
- package/dist/publication/index.js.map +0 -1
- package/dist/publication/manifest.d.ts +0 -7
- package/dist/publication/manifest.d.ts.map +0 -1
- package/dist/publication/manifest.js +0 -31
- package/dist/publication/manifest.js.map +0 -1
- package/dist/publication/publication.d.ts +0 -37
- package/dist/publication/publication.d.ts.map +0 -1
- package/dist/publication/publication.js +0 -134
- package/dist/publication/publication.js.map +0 -1
- package/dist/publication/reference.d.ts +0 -18
- package/dist/publication/reference.d.ts.map +0 -1
- package/dist/publication/reference.js +0 -69
- package/dist/publication/reference.js.map +0 -1
- package/dist/publication/requirements.d.ts +0 -27
- package/dist/publication/requirements.d.ts.map +0 -1
- package/dist/publication/requirements.js +0 -181
- 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 +0 -9
- package/dist/routes/release-unavailable.d.ts.map +0 -1
- package/dist/routes/release-unavailable.js +0 -33
- 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
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { admitDigest } from './digest.js';
|
|
2
|
+
import { exact, record } from './shape.js';
|
|
3
|
+
export function admitBuild(input) {
|
|
4
|
+
const value = record(input, 'RELEASE_INVALID', 'Release build is invalid.');
|
|
5
|
+
exact(value, ['digest'], 'RELEASE_INVALID');
|
|
6
|
+
return Object.freeze({ digest: admitDigest(value.digest) });
|
|
7
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { Key } from '@astrale-os/kernel-dsl/v1/addressing';
|
|
2
|
+
import * as dslBundle from '@astrale-os/kernel-dsl/v1/bundle';
|
|
3
|
+
import type { CallableBinding, ViewBinding } from './bindings/index.js';
|
|
4
|
+
import type { Manifest } from './manifest.js';
|
|
5
|
+
import type { Requirements } from './requirements.js';
|
|
6
|
+
import type { HttpRoute } from './route.js';
|
|
7
|
+
import type { Schema } from './schema.js';
|
|
8
|
+
/** The served release content one external Schema Bundle must exactly match. */
|
|
9
|
+
export interface ServedRelease {
|
|
10
|
+
readonly origin: Key.Origin;
|
|
11
|
+
readonly schema: Schema;
|
|
12
|
+
readonly requirements: Requirements;
|
|
13
|
+
readonly manifest?: Manifest;
|
|
14
|
+
readonly bindings: {
|
|
15
|
+
readonly callables: readonly CallableBinding[];
|
|
16
|
+
readonly views: readonly ViewBinding[];
|
|
17
|
+
};
|
|
18
|
+
readonly routes: readonly HttpRoute[];
|
|
19
|
+
}
|
|
20
|
+
export declare function acceptBundle(input: ServedRelease, artifact: unknown): dslBundle.Bundle;
|
|
21
|
+
export declare function decodeBundle(input: ServedRelease, bytes: Uint8Array): dslBundle.Bundle;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { Key, MethodKey } from '@astrale-os/kernel-dsl/v1/addressing';
|
|
2
2
|
import * as dslBundle from '@astrale-os/kernel-dsl/v1/bundle';
|
|
3
|
+
import { isMethodExecutable } from '@astrale-os/kernel-dsl/v1/language';
|
|
3
4
|
import { revision } from '@astrale-os/kernel-dsl/v1/schema/revision';
|
|
4
5
|
import { acceptBundleValue, decodeBundleValue, verifyBundleBytes } from './bundle.js';
|
|
5
6
|
import { fail } from './error.js';
|
|
@@ -15,32 +16,26 @@ export function decodeBundle(input, bytes) {
|
|
|
15
16
|
validateInventory(input, decoded);
|
|
16
17
|
return decoded;
|
|
17
18
|
}
|
|
18
|
-
function validateInventory(
|
|
19
|
+
function validateInventory(release, bundle) {
|
|
19
20
|
const root = bundle.root;
|
|
20
|
-
if (root.origin !==
|
|
21
|
-
fail('
|
|
21
|
+
if (root.origin !== release.origin || revision(root) !== release.schema.revision) {
|
|
22
|
+
fail('RELEASE_INVALID', 'Bundle root does not match the release schema.');
|
|
22
23
|
}
|
|
23
|
-
validateRequirements(root, bundle.closure,
|
|
24
|
+
validateRequirements(root, bundle.closure, release.requirements);
|
|
24
25
|
const callables = concreteCallables(root);
|
|
25
|
-
const
|
|
26
|
-
if (
|
|
27
|
-
[...callables].some((key) => !
|
|
28
|
-
fail('
|
|
26
|
+
const boundCallables = new Set(release.bindings.callables.map(({ callable }) => callable));
|
|
27
|
+
if (boundCallables.size !== callables.size ||
|
|
28
|
+
[...callables].some((key) => !boundCallables.has(key))) {
|
|
29
|
+
fail('RELEASE_BINDING_INVALID', 'Callable bindings must exhaust the root Domain.');
|
|
29
30
|
}
|
|
30
31
|
const views = new Set(Object.keys(root.views).map((name) => Key.of({ origin: root.origin, kind: 'view', name })));
|
|
31
|
-
const
|
|
32
|
-
if (
|
|
33
|
-
fail('
|
|
32
|
+
const boundViews = new Set(release.bindings.views.map(({ view }) => view));
|
|
33
|
+
if (boundViews.size !== views.size || [...views].some((key) => !boundViews.has(key))) {
|
|
34
|
+
fail('RELEASE_VIEW_INVALID', 'View bindings must exhaust the root Domain.');
|
|
34
35
|
}
|
|
35
|
-
|
|
36
|
-
(publication.manifest.entrypoint.origin !== root.origin ||
|
|
37
|
-
publication.manifest.entrypoint.kind !== 'view' ||
|
|
38
|
-
root.views[publication.manifest.entrypoint.name] === undefined)) {
|
|
39
|
-
fail('PUBLICATION_INVALID', 'Manifest entrypoint does not exist in the root schema.');
|
|
40
|
-
}
|
|
41
|
-
for (const route of publication.routes) {
|
|
36
|
+
for (const route of release.routes) {
|
|
42
37
|
if (!callables.has(route.callable)) {
|
|
43
|
-
fail('
|
|
38
|
+
fail('RELEASE_ROUTE_INVALID', `Route ${route.name} names an unknown callable.`);
|
|
44
39
|
}
|
|
45
40
|
}
|
|
46
41
|
}
|
|
@@ -57,10 +52,9 @@ function addClassMethods(result, origin, definitions) {
|
|
|
57
52
|
if (declaration.kind !== 'node')
|
|
58
53
|
continue;
|
|
59
54
|
for (const [name, method] of Object.entries(declaration.methods)) {
|
|
60
|
-
if (method
|
|
55
|
+
if (!isMethodExecutable(declaration, method))
|
|
61
56
|
continue;
|
|
62
57
|
result.add(MethodKey.of({ origin, kind: 'class', name: owner }, name));
|
|
63
58
|
}
|
|
64
59
|
}
|
|
65
60
|
}
|
|
66
|
-
//# sourceMappingURL=bundle-admission.js.map
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import * as artifact from '../artifact/index.js';
|
|
2
|
+
import { fail } from './error.js';
|
|
3
|
+
import { absoluteHttpUrl, exact, record } from './shape.js';
|
|
4
|
+
export const BUNDLE_MEDIA_TYPE = 'application/vnd.astrale.domain-bundle+json;v=1';
|
|
5
|
+
export function admitBundleDescriptor(input) {
|
|
6
|
+
const value = record(input, 'RELEASE_INVALID', 'Bundle descriptor is invalid.');
|
|
7
|
+
exact(value, ['href', 'ref'], 'RELEASE_INVALID');
|
|
8
|
+
const ref = artifact.accept(value.ref);
|
|
9
|
+
if (ref.mediaType !== BUNDLE_MEDIA_TYPE) {
|
|
10
|
+
fail('RELEASE_INVALID', 'Bundle media type is unsupported.');
|
|
11
|
+
}
|
|
12
|
+
if (ref.size < 1) {
|
|
13
|
+
fail('RELEASE_INVALID', 'Bundle size is invalid.');
|
|
14
|
+
}
|
|
15
|
+
return Object.freeze({
|
|
16
|
+
href: absoluteHttpUrl(value.href, true, 'RELEASE_INVALID'),
|
|
17
|
+
ref: Object.freeze({ ...ref, mediaType: BUNDLE_MEDIA_TYPE }),
|
|
18
|
+
});
|
|
19
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { sha256Hex } from './digest.js';
|
|
2
|
+
import { fail } from './error.js';
|
|
3
|
+
/** Verify exact artifact bytes without decoding an authored Schema Bundle. */
|
|
4
|
+
export function verifyBundleBytes(release, bytes) {
|
|
5
|
+
if (!(bytes instanceof Uint8Array)) {
|
|
6
|
+
fail('RELEASE_INVALID', 'Bundle artifact bytes are invalid.');
|
|
7
|
+
}
|
|
8
|
+
const descriptor = release.schema.bundle;
|
|
9
|
+
if (bytes.byteLength !== descriptor.ref.size ||
|
|
10
|
+
`sha256:${sha256Hex(bytes)}` !== descriptor.ref.digest) {
|
|
11
|
+
fail('RELEASE_INVALID', 'Bundle artifact does not match its descriptor.');
|
|
12
|
+
}
|
|
13
|
+
}
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
import * as bundle from '@astrale-os/kernel-dsl/v1/bundle/transport';
|
|
2
|
+
import type { ServedRelease } from './bundle-admission.js';
|
|
2
3
|
import type { BundleDescriptor } from './bundle-descriptor.js';
|
|
3
|
-
import
|
|
4
|
+
import * as artifact from '../artifact/index.js';
|
|
4
5
|
import { verifyBundleBytes } from './bundle-evidence.js';
|
|
6
|
+
/** Resolve immutable bundle bytes beneath the exact serving issuer. */
|
|
7
|
+
export declare function bundleUrl(issuer: string, ref: artifact.Ref): string;
|
|
5
8
|
export declare function describeBundle(input: bundle.Bundle, href: string): BundleDescriptor;
|
|
6
9
|
export declare function acceptBundleValue(input: unknown): bundle.Bundle;
|
|
7
|
-
export declare function decodeBundleValue(
|
|
10
|
+
export declare function decodeBundleValue(release: Pick<ServedRelease, 'schema'>, bytes: Uint8Array): bundle.Bundle;
|
|
8
11
|
export { verifyBundleBytes };
|
|
9
12
|
export { admitBundleDescriptor, BUNDLE_MEDIA_TYPE, type BundleDescriptor, } from './bundle-descriptor.js';
|
|
10
|
-
//# sourceMappingURL=bundle.d.ts.map
|
|
@@ -2,12 +2,18 @@ import * as bundle from '@astrale-os/kernel-dsl/v1/bundle/transport';
|
|
|
2
2
|
import * as artifact from '../artifact/index.js';
|
|
3
3
|
import { BUNDLE_MEDIA_TYPE } from './bundle-descriptor.js';
|
|
4
4
|
import { verifyBundleBytes } from './bundle-evidence.js';
|
|
5
|
-
import { absoluteHttpUrl } from './content.js';
|
|
6
5
|
import { fail } from './error.js';
|
|
6
|
+
import { servedUrl } from './issuer.js';
|
|
7
|
+
import { absoluteHttpUrl } from './shape.js';
|
|
8
|
+
/** Resolve immutable bundle bytes beneath the exact serving issuer. */
|
|
9
|
+
export function bundleUrl(issuer, ref) {
|
|
10
|
+
const digest = ref.digest.slice('sha256:'.length);
|
|
11
|
+
return servedUrl(issuer, `/.well-known/astrale/bundles/sha256/${digest}.json`);
|
|
12
|
+
}
|
|
7
13
|
export function describeBundle(input, href) {
|
|
8
14
|
const bytes = bundle.encode(input);
|
|
9
15
|
return Object.freeze({
|
|
10
|
-
href: absoluteHttpUrl(href, true, '
|
|
16
|
+
href: absoluteHttpUrl(href, true, 'RELEASE_INVALID'),
|
|
11
17
|
ref: Object.freeze({
|
|
12
18
|
...artifact.identify(bytes, BUNDLE_MEDIA_TYPE),
|
|
13
19
|
mediaType: BUNDLE_MEDIA_TYPE,
|
|
@@ -20,26 +26,25 @@ export function acceptBundleValue(input) {
|
|
|
20
26
|
}
|
|
21
27
|
catch (cause) {
|
|
22
28
|
if (cause instanceof bundle.Error) {
|
|
23
|
-
return fail('
|
|
29
|
+
return fail('RELEASE_INVALID', 'Release bundle is invalid.', cause);
|
|
24
30
|
}
|
|
25
31
|
throw cause;
|
|
26
32
|
}
|
|
27
33
|
}
|
|
28
|
-
export function decodeBundleValue(
|
|
34
|
+
export function decodeBundleValue(release, bytes) {
|
|
29
35
|
if (!(bytes instanceof Uint8Array)) {
|
|
30
|
-
fail('
|
|
36
|
+
fail('RELEASE_INVALID', 'Bundle artifact bytes are invalid.');
|
|
31
37
|
}
|
|
32
|
-
verifyBundleBytes(
|
|
38
|
+
verifyBundleBytes(release, bytes);
|
|
33
39
|
try {
|
|
34
40
|
return bundle.decode(bytes);
|
|
35
41
|
}
|
|
36
42
|
catch (cause) {
|
|
37
43
|
if (cause instanceof bundle.Error) {
|
|
38
|
-
return fail('
|
|
44
|
+
return fail('RELEASE_INVALID', 'Bundle artifact cannot be decoded.', cause);
|
|
39
45
|
}
|
|
40
46
|
throw cause;
|
|
41
47
|
}
|
|
42
48
|
}
|
|
43
49
|
export { verifyBundleBytes };
|
|
44
50
|
export { admitBundleDescriptor, BUNDLE_MEDIA_TYPE, } from './bundle-descriptor.js';
|
|
45
|
-
//# sourceMappingURL=bundle.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
declare const ATTESTATION: unique symbol;
|
|
2
|
+
/** Opaque, bounded attestation text a Delivery carries; Core Auth verifies it. */
|
|
2
3
|
export type Attestation = string & {
|
|
3
4
|
readonly [ATTESTATION]: true;
|
|
4
5
|
};
|
|
5
6
|
export declare function acceptAttestation(input: unknown): Attestation;
|
|
6
7
|
export {};
|
|
7
|
-
//# sourceMappingURL=attestation.d.ts.map
|
|
@@ -1,17 +1,21 @@
|
|
|
1
1
|
import type { Subject } from '@astrale-os/kernel-core/auth/identity';
|
|
2
2
|
import type { Revision } from '@astrale-os/kernel-dsl/v1/addressing';
|
|
3
3
|
import { type IssuerId } from '@astrale-os/kernel-core/auth/issuer';
|
|
4
|
-
import type {
|
|
4
|
+
import type { ReleaseDigest } from '../digest.js';
|
|
5
5
|
import { PURPOSE } from './limits.js';
|
|
6
|
+
/**
|
|
7
|
+
* What a verified Delivery v2 attestation asserts: the serving Domain identity delivers the release
|
|
8
|
+
* with this digest and schema revision to the requesting Kernel, for its challenge nonce.
|
|
9
|
+
*/
|
|
6
10
|
export interface Claims {
|
|
7
11
|
readonly purpose: typeof PURPOSE;
|
|
8
12
|
readonly iss: IssuerId;
|
|
9
13
|
readonly sub: Subject;
|
|
10
14
|
readonly aud: IssuerId;
|
|
11
15
|
readonly nonce: string;
|
|
12
|
-
readonly
|
|
16
|
+
readonly release: ReleaseDigest;
|
|
13
17
|
readonly schemaRevision: Revision;
|
|
14
18
|
readonly exp: number;
|
|
15
19
|
}
|
|
20
|
+
/** Admit the claims of an attestation Core Auth already verified. */
|
|
16
21
|
export declare function acceptClaims(input: unknown): Claims;
|
|
17
|
-
//# sourceMappingURL=claims.d.ts.map
|
|
@@ -1,15 +1,26 @@
|
|
|
1
1
|
import { AuthValueError } from '@astrale-os/kernel-core/auth/error';
|
|
2
2
|
import { accept as acceptIssuerId } from '@astrale-os/kernel-core/auth/issuer';
|
|
3
3
|
import { patterns } from '@astrale-os/kernel-dsl/v1/addressing';
|
|
4
|
+
import { deepFreeze } from '../shape.js';
|
|
4
5
|
import { fail } from './error.js';
|
|
5
6
|
import { NONCE_MAX_LENGTH, NONCE_MIN_LENGTH, PURPOSE } from './limits.js';
|
|
7
|
+
const FIELDS = [
|
|
8
|
+
'purpose',
|
|
9
|
+
'iss',
|
|
10
|
+
'sub',
|
|
11
|
+
'aud',
|
|
12
|
+
'nonce',
|
|
13
|
+
'release',
|
|
14
|
+
'schemaRevision',
|
|
15
|
+
'exp',
|
|
16
|
+
];
|
|
17
|
+
/** Admit the claims of an attestation Core Auth already verified. */
|
|
6
18
|
export function acceptClaims(input) {
|
|
7
19
|
if (input === null || typeof input !== 'object' || Array.isArray(input)) {
|
|
8
20
|
fail('DELIVERY_CLAIMS_INVALID', 'Expected delivery claims.');
|
|
9
21
|
}
|
|
10
22
|
const value = input;
|
|
11
|
-
|
|
12
|
-
if (Object.keys(value).some((field) => !expected.includes(field))) {
|
|
23
|
+
if (Object.keys(value).some((field) => !FIELDS.includes(field))) {
|
|
13
24
|
fail('DELIVERY_CLAIMS_INVALID', 'Delivery claims contain unknown fields.');
|
|
14
25
|
}
|
|
15
26
|
if (value.purpose !== PURPOSE ||
|
|
@@ -24,8 +35,8 @@ export function acceptClaims(input) {
|
|
|
24
35
|
}
|
|
25
36
|
const iss = acceptIssuer(value.iss);
|
|
26
37
|
const aud = acceptIssuer(value.aud);
|
|
27
|
-
if (typeof value.
|
|
28
|
-
fail('DELIVERY_CLAIMS_INVALID', 'Delivery claims
|
|
38
|
+
if (typeof value.release !== 'string' || !/^sha256:[0-9a-f]{64}$/u.test(value.release)) {
|
|
39
|
+
fail('DELIVERY_CLAIMS_INVALID', 'Delivery claims release digest is invalid.');
|
|
29
40
|
}
|
|
30
41
|
if (typeof value.schemaRevision !== 'string' || !patterns.revision.test(value.schemaRevision)) {
|
|
31
42
|
fail('DELIVERY_CLAIMS_INVALID', 'Schema revision is invalid.');
|
|
@@ -36,14 +47,17 @@ export function acceptClaims(input) {
|
|
|
36
47
|
sub: value.sub,
|
|
37
48
|
aud,
|
|
38
49
|
nonce: value.nonce,
|
|
39
|
-
|
|
50
|
+
release: value.release,
|
|
40
51
|
schemaRevision: value.schemaRevision,
|
|
41
52
|
exp: value.exp,
|
|
42
53
|
});
|
|
43
54
|
}
|
|
44
55
|
function acceptIssuer(input) {
|
|
56
|
+
if (typeof input !== 'string') {
|
|
57
|
+
fail('DELIVERY_CLAIMS_INVALID', 'Delivery claims issuer is invalid.');
|
|
58
|
+
}
|
|
45
59
|
try {
|
|
46
|
-
return acceptIssuerId(
|
|
60
|
+
return acceptIssuerId(input);
|
|
47
61
|
}
|
|
48
62
|
catch (cause) {
|
|
49
63
|
if (cause instanceof AuthValueError) {
|
|
@@ -52,11 +66,3 @@ function acceptIssuer(input) {
|
|
|
52
66
|
throw cause;
|
|
53
67
|
}
|
|
54
68
|
}
|
|
55
|
-
function deepFreeze(value) {
|
|
56
|
-
if (value === null || typeof value !== 'object' || Object.isFrozen(value))
|
|
57
|
-
return value;
|
|
58
|
-
for (const nested of Object.values(value))
|
|
59
|
-
deepFreeze(nested);
|
|
60
|
-
return Object.freeze(value);
|
|
61
|
-
}
|
|
62
|
-
//# sourceMappingURL=claims.js.map
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { DomainRelease } from '../release.js';
|
|
2
|
+
import type { Attestation } from './attestation.js';
|
|
3
|
+
/** The challenge-bound envelope carrying the exact `DomainRelease` a Kernel asked for. */
|
|
4
|
+
export interface Delivery {
|
|
5
|
+
readonly format: 'astrale.domain.delivery';
|
|
6
|
+
readonly version: 2;
|
|
7
|
+
readonly release: DomainRelease;
|
|
8
|
+
readonly attestation: Attestation;
|
|
9
|
+
}
|
|
10
|
+
/** Admit one Delivery v2 envelope: its release is admitted whole, its attestation stays opaque. */
|
|
11
|
+
export declare function accept(input: unknown): Delivery;
|
|
@@ -1,30 +1,24 @@
|
|
|
1
|
-
import { accept as
|
|
1
|
+
import { accept as acceptRelease } from '../release.js';
|
|
2
|
+
import { deepFreeze } from '../shape.js';
|
|
2
3
|
import { acceptAttestation } from './attestation.js';
|
|
3
4
|
import { fail } from './error.js';
|
|
5
|
+
/** Admit one Delivery v2 envelope: its release is admitted whole, its attestation stays opaque. */
|
|
4
6
|
export function accept(input) {
|
|
5
7
|
if (input === null || typeof input !== 'object' || Array.isArray(input)) {
|
|
6
8
|
fail('DELIVERY_INVALID', 'Expected a Delivery object.');
|
|
7
9
|
}
|
|
8
10
|
const value = input;
|
|
9
|
-
const expected = new Set(['format', 'version', '
|
|
11
|
+
const expected = new Set(['format', 'version', 'release', 'attestation']);
|
|
10
12
|
if (Object.keys(value).some((field) => !expected.has(field))) {
|
|
11
13
|
fail('DELIVERY_INVALID', 'Delivery contains unknown fields.');
|
|
12
14
|
}
|
|
13
|
-
if (value.format !== 'astrale.domain.delivery' || value.version !==
|
|
15
|
+
if (value.format !== 'astrale.domain.delivery' || value.version !== 2) {
|
|
14
16
|
fail('DELIVERY_INVALID', 'Unsupported Delivery format or version.');
|
|
15
17
|
}
|
|
16
18
|
return deepFreeze({
|
|
17
19
|
format: 'astrale.domain.delivery',
|
|
18
|
-
version:
|
|
19
|
-
|
|
20
|
+
version: 2,
|
|
21
|
+
release: acceptRelease(value.release),
|
|
20
22
|
attestation: acceptAttestation(value.attestation),
|
|
21
23
|
});
|
|
22
24
|
}
|
|
23
|
-
function deepFreeze(value) {
|
|
24
|
-
if (value === null || typeof value !== 'object' || Object.isFrozen(value))
|
|
25
|
-
return value;
|
|
26
|
-
for (const nested of Object.values(value))
|
|
27
|
-
deepFreeze(nested);
|
|
28
|
-
return Object.freeze(value);
|
|
29
|
-
}
|
|
30
|
-
//# sourceMappingURL=delivery.js.map
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
+
/** Failure code of a Delivery request, envelope, or claims set, whatever its version. */
|
|
1
2
|
export type DeliveryErrorCode = 'DELIVERY_INVALID' | 'DELIVERY_REQUEST_INVALID' | 'DELIVERY_CLAIMS_INVALID';
|
|
3
|
+
/** Reported by every Delivery decoder, v1 and v2. */
|
|
2
4
|
export declare class DeliveryError extends Error {
|
|
3
5
|
readonly code: DeliveryErrorCode;
|
|
4
6
|
readonly name = "DeliveryError";
|
|
5
7
|
constructor(code: DeliveryErrorCode, message: string, options?: ErrorOptions);
|
|
6
8
|
}
|
|
7
9
|
export declare function fail(code: DeliveryErrorCode, message: string, cause?: unknown): never;
|
|
8
|
-
//# sourceMappingURL=error.d.ts.map
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
/** Reported by every Delivery decoder, v1 and v2. */
|
|
1
2
|
export class DeliveryError extends Error {
|
|
2
3
|
code;
|
|
3
4
|
name = 'DeliveryError';
|
|
@@ -9,4 +10,3 @@ export class DeliveryError extends Error {
|
|
|
9
10
|
export function fail(code, message, cause) {
|
|
10
11
|
throw new DeliveryError(code, message, cause === undefined ? undefined : { cause });
|
|
11
12
|
}
|
|
12
|
-
//# sourceMappingURL=error.js.map
|
|
@@ -1,7 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Delivery v2: the challenge-bound envelope carrying the exact `DomainRelease` a Kernel fetched at
|
|
3
|
+
* `release.json`, bound to its release digest. Only the version 2 request is admitted.
|
|
4
|
+
*/
|
|
1
5
|
export { type Attestation } from './attestation.js';
|
|
2
6
|
export { acceptClaims, type Claims } from './claims.js';
|
|
3
7
|
export { DeliveryError as Error, type DeliveryErrorCode as ErrorCode } from './error.js';
|
|
4
8
|
export { accept, type Delivery } from './delivery.js';
|
|
5
9
|
export { ATTESTATION_MAX_BYTES, NONCE_MAX_LENGTH, NONCE_MIN_LENGTH, PURPOSE } from './limits.js';
|
|
6
|
-
export { acceptRequest, type
|
|
7
|
-
//# sourceMappingURL=index.d.ts.map
|
|
10
|
+
export { acceptRequest, type Request, type Token } from './request.js';
|
|
@@ -1,7 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Delivery v2: the challenge-bound envelope carrying the exact `DomainRelease` a Kernel fetched at
|
|
3
|
+
* `release.json`, bound to its release digest. Only the version 2 request is admitted.
|
|
4
|
+
*/
|
|
1
5
|
export {} from './attestation.js';
|
|
2
6
|
export { acceptClaims } from './claims.js';
|
|
3
7
|
export { DeliveryError as Error } from './error.js';
|
|
4
8
|
export { accept } from './delivery.js';
|
|
5
9
|
export { ATTESTATION_MAX_BYTES, NONCE_MAX_LENGTH, NONCE_MIN_LENGTH, PURPOSE } from './limits.js';
|
|
6
10
|
export { acceptRequest } from './request.js';
|
|
7
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
|
|
1
|
+
/** Purpose of Delivery v2 attestations, which bind a release digest. */
|
|
2
|
+
export declare const PURPOSE: 'astrale.domain.delivery.v2';
|
|
2
3
|
export declare const NONCE_MIN_LENGTH = 16;
|
|
3
4
|
export declare const NONCE_MAX_LENGTH = 256;
|
|
4
5
|
export declare const ATTESTATION_MAX_BYTES = 16384;
|
|
5
|
-
//# sourceMappingURL=limits.d.ts.map
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
import { type IssuerId } from '@astrale-os/kernel-core/auth/issuer';
|
|
2
|
-
import type {
|
|
3
|
-
|
|
4
|
-
readonly version: 1;
|
|
5
|
-
readonly kernel: IssuerId;
|
|
6
|
-
readonly nonce: string;
|
|
7
|
-
readonly etag: Etag;
|
|
8
|
-
}
|
|
9
|
-
/** Exact bearer credential admitted by a Delivery transport boundary. */
|
|
2
|
+
import type { ReleaseDigest } from '../digest.js';
|
|
3
|
+
/** Exact bearer credential admitted by a Delivery transport boundary; never inside a document. */
|
|
10
4
|
export interface Token {
|
|
11
5
|
readonly kind: 'bearer';
|
|
12
6
|
readonly token: string;
|
|
13
7
|
}
|
|
14
|
-
/**
|
|
8
|
+
/** A requesting Kernel's challenge for the one exact release it fetched at `release.json`. */
|
|
9
|
+
export interface Request {
|
|
10
|
+
readonly version: 2;
|
|
11
|
+
readonly kernel: IssuerId;
|
|
12
|
+
readonly nonce: string;
|
|
13
|
+
readonly release: ReleaseDigest;
|
|
14
|
+
}
|
|
15
|
+
/** Admit the exact version-two challenge at a Delivery transport boundary. */
|
|
15
16
|
export declare function acceptRequest(input: unknown): Request;
|
|
16
|
-
//# sourceMappingURL=request.d.ts.map
|
|
@@ -2,19 +2,19 @@ import { AuthValueError } from '@astrale-os/kernel-core/auth/error';
|
|
|
2
2
|
import { accept as acceptIssuer } from '@astrale-os/kernel-core/auth/issuer';
|
|
3
3
|
import { fail } from './error.js';
|
|
4
4
|
import { NONCE_MAX_LENGTH, NONCE_MIN_LENGTH } from './limits.js';
|
|
5
|
-
|
|
5
|
+
const FIELDS = ['version', 'kernel', 'nonce', 'release'];
|
|
6
|
+
/** Admit the exact version-two challenge at a Delivery transport boundary. */
|
|
6
7
|
export function acceptRequest(input) {
|
|
7
8
|
if (input === null || typeof input !== 'object' || Array.isArray(input)) {
|
|
8
9
|
fail('DELIVERY_REQUEST_INVALID', 'Expected a Delivery request.');
|
|
9
10
|
}
|
|
10
|
-
const expected = ['version', 'kernel', 'nonce', 'etag'];
|
|
11
11
|
const value = {};
|
|
12
12
|
const fields = Reflect.ownKeys(input);
|
|
13
|
-
if (fields.length !==
|
|
13
|
+
if (fields.length !== FIELDS.length) {
|
|
14
14
|
fail('DELIVERY_REQUEST_INVALID', 'Delivery request is invalid.');
|
|
15
15
|
}
|
|
16
16
|
for (const field of fields) {
|
|
17
|
-
if (typeof field !== 'string' || !
|
|
17
|
+
if (typeof field !== 'string' || !FIELDS.includes(field)) {
|
|
18
18
|
fail('DELIVERY_REQUEST_INVALID', 'Delivery request is invalid.');
|
|
19
19
|
}
|
|
20
20
|
const descriptor = Object.getOwnPropertyDescriptor(input, field);
|
|
@@ -23,14 +23,13 @@ export function acceptRequest(input) {
|
|
|
23
23
|
}
|
|
24
24
|
value[field] = descriptor.value;
|
|
25
25
|
}
|
|
26
|
-
if (
|
|
27
|
-
value.version !== 1 ||
|
|
26
|
+
if (value.version !== 2 ||
|
|
28
27
|
typeof value.kernel !== 'string' ||
|
|
29
28
|
typeof value.nonce !== 'string' ||
|
|
30
29
|
value.nonce.length < NONCE_MIN_LENGTH ||
|
|
31
30
|
value.nonce.length > NONCE_MAX_LENGTH ||
|
|
32
|
-
typeof value.
|
|
33
|
-
!/^sha256:[0-9a-f]{64}$/u.test(value.
|
|
31
|
+
typeof value.release !== 'string' ||
|
|
32
|
+
!/^sha256:[0-9a-f]{64}$/u.test(value.release)) {
|
|
34
33
|
fail('DELIVERY_REQUEST_INVALID', 'Delivery request is invalid.');
|
|
35
34
|
}
|
|
36
35
|
let kernel;
|
|
@@ -44,10 +43,9 @@ export function acceptRequest(input) {
|
|
|
44
43
|
throw cause;
|
|
45
44
|
}
|
|
46
45
|
return Object.freeze({
|
|
47
|
-
version:
|
|
46
|
+
version: 2,
|
|
48
47
|
kernel,
|
|
49
48
|
nonce: value.nonce,
|
|
50
|
-
|
|
49
|
+
release: value.release,
|
|
51
50
|
});
|
|
52
51
|
}
|
|
53
|
-
//# sourceMappingURL=request.js.map
|
|
@@ -2,4 +2,3 @@ import type { DeliveryDeclaration } from './declaration.js';
|
|
|
2
2
|
import type { Endpoint } from './delivery-endpoint.js';
|
|
3
3
|
/** Place one provider-neutral Delivery declaration beneath an exact serving issuer. */
|
|
4
4
|
export declare function placeDelivery(input: DeliveryDeclaration, issuer: string, bundleHref: string): Endpoint;
|
|
5
|
-
//# sourceMappingURL=delivery-declaration.d.ts.map
|
|
@@ -3,24 +3,23 @@ import { fail } from './error.js';
|
|
|
3
3
|
/** Place one provider-neutral Delivery declaration beneath an exact serving issuer. */
|
|
4
4
|
export function placeDelivery(input, issuer, bundleHref) {
|
|
5
5
|
if (input === null || typeof input !== 'object' || Array.isArray(input)) {
|
|
6
|
-
fail('
|
|
6
|
+
fail('RELEASE_INVALID', 'Delivery declaration is invalid.');
|
|
7
7
|
}
|
|
8
8
|
if (Reflect.ownKeys(input).some((key) => key !== 'path' && key !== 'authentication') ||
|
|
9
9
|
typeof input.path !== 'string' ||
|
|
10
10
|
!input.path.startsWith('/')) {
|
|
11
|
-
fail('
|
|
11
|
+
fail('RELEASE_INVALID', 'Delivery declaration is invalid.');
|
|
12
12
|
}
|
|
13
13
|
let href;
|
|
14
14
|
try {
|
|
15
15
|
const url = new URL(input.path, issuer);
|
|
16
16
|
if (url.origin !== new URL(issuer).origin || url.search !== '' || url.hash !== '') {
|
|
17
|
-
fail('
|
|
17
|
+
fail('RELEASE_INVALID', 'Delivery declaration must be one relative path.');
|
|
18
18
|
}
|
|
19
19
|
href = url.href;
|
|
20
20
|
}
|
|
21
21
|
catch (cause) {
|
|
22
|
-
return fail('
|
|
22
|
+
return fail('RELEASE_INVALID', 'Delivery declaration path is invalid.', cause);
|
|
23
23
|
}
|
|
24
24
|
return admitEndpoint({ href, method: 'POST', authentication: input.authentication }, bundleHref);
|
|
25
25
|
}
|
|
26
|
-
//# sourceMappingURL=delivery-declaration.js.map
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { fail } from './error.js';
|
|
2
|
+
import { absoluteHttpUrl, exact, record } from './shape.js';
|
|
3
|
+
export function admitEndpoint(input, publicUrl) {
|
|
4
|
+
if (input === undefined)
|
|
5
|
+
return undefined;
|
|
6
|
+
const value = record(input, 'RELEASE_INVALID', 'Delivery endpoint is invalid.');
|
|
7
|
+
exact(value, ['href', 'method', 'authentication'], 'RELEASE_INVALID');
|
|
8
|
+
const href = absoluteHttpUrl(value.href, true, 'RELEASE_INVALID');
|
|
9
|
+
if (new URL(href).origin !== new URL(publicUrl).origin || value.method !== 'POST') {
|
|
10
|
+
fail('RELEASE_INVALID', 'Delivery endpoint must be same-origin POST.');
|
|
11
|
+
}
|
|
12
|
+
const authentication = record(value.authentication, 'RELEASE_INVALID', 'Delivery authentication is invalid.');
|
|
13
|
+
exact(authentication, ['kind'], 'RELEASE_INVALID');
|
|
14
|
+
if (authentication.kind !== 'public' && authentication.kind !== 'bearer') {
|
|
15
|
+
fail('RELEASE_INVALID', 'Delivery authentication kind is invalid.');
|
|
16
|
+
}
|
|
17
|
+
return Object.freeze({
|
|
18
|
+
href,
|
|
19
|
+
method: 'POST',
|
|
20
|
+
authentication: Object.freeze({ kind: authentication.kind }),
|
|
21
|
+
});
|
|
22
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export type Sha256Digest = `sha256:${string}`;
|
|
2
|
+
/**
|
|
3
|
+
* Digest of one canonical `DomainRelease`: its build, its addresses and issuer, and through the
|
|
4
|
+
* address the variables frozen at deploy. One per deployment.
|
|
5
|
+
*/
|
|
6
|
+
export type ReleaseDigest = Sha256Digest;
|
|
7
|
+
/**
|
|
8
|
+
* Hash of the bytes one build produced (modules, assets, schema, requirements). An address, key or
|
|
9
|
+
* secret never enters those bytes, so the same build has the same digest in every environment.
|
|
10
|
+
*/
|
|
11
|
+
export type BuildDigest = Sha256Digest;
|
|
12
|
+
export declare function admitDigest(input: unknown): Sha256Digest;
|
|
13
|
+
export declare function sha256Hex(input: Uint8Array): string;
|