@astrale-os/kernel-protocol 0.5.0-beta.7 → 0.5.0-beta.70
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 +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/errors/retry.d.ts +23 -0
- package/dist/errors/retry.js +44 -0
- package/dist/index.d.ts +3 -2
- package/dist/index.js +3 -2
- package/dist/invocation/admission.d.ts +2 -3
- package/dist/invocation/admission.js +7 -11
- package/dist/invocation/binary.d.ts +1 -1
- package/dist/invocation/binary.js +21 -5
- package/dist/invocation/binding-codecs.d.ts +1 -2
- 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 +1 -11
- package/dist/invocation/delegate.js +4 -19
- 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 +9 -0
- package/dist/invocation/http/request.js +61 -0
- package/dist/invocation/http/stream.d.ts +0 -1
- package/dist/invocation/http/stream.js +0 -1
- package/dist/invocation/http/trace.d.ts +0 -1
- package/dist/invocation/http/trace.js +0 -1
- package/dist/invocation/idempotency.d.ts +0 -1
- package/dist/invocation/idempotency.js +0 -1
- package/dist/invocation/identity.d.ts +0 -1
- package/dist/invocation/identity.js +0 -1
- package/dist/invocation/index.d.ts +6 -4
- package/dist/invocation/index.js +5 -4
- package/dist/invocation/legacy/index.d.ts +29 -0
- package/dist/invocation/legacy/index.js +28 -0
- package/dist/invocation/legacy/route.d.ts +14 -0
- package/dist/invocation/legacy/route.js +25 -0
- package/dist/invocation/legacy/via.d.ts +30 -0
- package/dist/invocation/legacy/via.js +15 -0
- package/dist/invocation/miss.d.ts +0 -1
- package/dist/invocation/miss.js +0 -1
- package/dist/invocation/redirect.d.ts +15 -13
- package/dist/invocation/redirect.js +9 -22
- 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 +19 -6
- package/dist/invocation/routing.js +50 -21
- package/dist/invocation/schema.d.ts +6 -5
- package/dist/invocation/schema.js +5 -12
- package/dist/invocation/service-reason.d.ts +21 -17
- package/dist/invocation/service-reason.js +27 -20
- package/dist/invocation/stale-route.d.ts +1 -2
- 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/release/bindings/callable.js +34 -0
- package/dist/{publication → release}/bindings/index.d.ts +1 -2
- 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 +16 -0
- package/dist/release/bindings/view.js +148 -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/release/bundle-admission.js +66 -0
- 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/release/bundle.d.ts +12 -0
- package/dist/{publication → release}/bundle.js +16 -11
- 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/release/delivery/claims.d.ts +21 -0
- package/dist/release/delivery/claims.js +68 -0
- package/dist/release/delivery/delivery.d.ts +11 -0
- package/dist/release/delivery/delivery.js +24 -0
- 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 +6 -2
- package/dist/{publication → release}/delivery/index.js +5 -1
- package/dist/{publication → release}/delivery/limits.d.ts +2 -2
- package/dist/release/delivery/limits.js +5 -0
- package/dist/release/delivery/request.d.ts +21 -0
- package/dist/release/delivery/request.js +60 -0
- 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 +21 -0
- package/dist/release/index.js +14 -0
- package/dist/release/issuer.d.ts +5 -0
- package/dist/release/issuer.js +34 -0
- package/dist/release/legacy/bindings.d.ts +14 -0
- package/dist/release/legacy/bindings.js +11 -0
- package/dist/release/legacy/bundle-admission.d.ts +6 -0
- package/dist/release/legacy/bundle-admission.js +10 -0
- package/dist/release/legacy/bundle-evidence.d.ts +8 -0
- package/dist/release/legacy/bundle-evidence.js +11 -0
- package/dist/release/legacy/bundle.d.ts +24 -0
- package/dist/release/legacy/bundle.js +31 -0
- package/dist/release/legacy/delivery/attestation.d.ts +6 -0
- package/dist/release/legacy/delivery/attestation.js +1 -0
- package/dist/{publication → release/legacy}/delivery/claims.d.ts +10 -2
- package/dist/{publication → release/legacy}/delivery/claims.js +7 -3
- package/dist/release/legacy/delivery/delivery.d.ts +18 -0
- package/dist/{publication → release/legacy}/delivery/delivery.js +6 -3
- package/dist/release/legacy/delivery/error.d.ts +16 -0
- package/dist/release/legacy/delivery/error.js +6 -0
- package/dist/release/legacy/delivery/index.d.ts +13 -0
- package/dist/release/legacy/delivery/index.js +13 -0
- package/dist/release/legacy/delivery/limits.d.ts +21 -0
- package/dist/release/legacy/delivery/limits.js +22 -0
- package/dist/release/legacy/delivery/request.d.ts +26 -0
- package/dist/{publication → release/legacy}/delivery/request.js +8 -4
- package/dist/release/legacy/delivery-declaration.d.ts +9 -0
- package/dist/release/legacy/delivery-declaration.js +11 -0
- package/dist/release/legacy/error.d.ts +26 -0
- package/dist/release/legacy/error.js +114 -0
- package/dist/release/legacy/etag.d.ts +12 -0
- package/dist/release/legacy/etag.js +14 -0
- package/dist/release/legacy/index.d.ts +75 -0
- package/dist/release/legacy/index.js +15 -0
- package/dist/release/legacy/profiles.d.ts +23 -0
- package/dist/release/legacy/profiles.js +36 -0
- package/dist/release/legacy/projection.d.ts +13 -0
- package/dist/release/legacy/projection.js +25 -0
- package/dist/release/legacy/publication.d.ts +90 -0
- package/dist/release/legacy/publication.js +124 -0
- package/dist/release/legacy/reference.d.ts +47 -0
- package/dist/{publication → release/legacy}/reference.js +27 -4
- package/dist/release/legacy/requirements.d.ts +30 -0
- package/dist/release/legacy/requirements.js +20 -0
- package/dist/{publication → release}/manifest.d.ts +2 -3
- package/dist/release/manifest.js +30 -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 +123 -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 +1 -2
- package/dist/{publication → release}/schema.js +4 -5
- package/dist/release/served.d.ts +26 -0
- package/dist/release/served.js +65 -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 +4 -5
- 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 +4 -5
- package/dist/routes/compiler.js +20 -13
- package/dist/routes/credential.d.ts +12 -2
- package/dist/routes/credential.js +11 -4
- package/dist/routes/decode.d.ts +6 -4
- package/dist/routes/decode.js +32 -30
- package/dist/routes/deployment-retired.d.ts +30 -0
- package/dist/routes/deployment-retired.js +96 -0
- package/dist/routes/encode.d.ts +2 -3
- package/dist/routes/encode.js +22 -20
- 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 +4 -5
- package/dist/routes/evidence.js +8 -34
- package/dist/routes/header.d.ts +9 -0
- package/dist/routes/header.js +34 -0
- package/dist/routes/index.d.ts +5 -3
- package/dist/routes/index.js +5 -3
- package/dist/routes/legacy/index.d.ts +29 -0
- package/dist/routes/legacy/index.js +29 -0
- package/dist/routes/legacy/routing.d.ts +24 -0
- package/dist/routes/legacy/routing.js +45 -0
- package/dist/routes/legacy/table.d.ts +34 -0
- package/dist/routes/legacy/table.js +50 -0
- 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 +1 -2
- package/dist/routes/plan.d.ts +6 -6
- package/dist/routes/plan.js +0 -1
- package/dist/routes/request.d.ts +5 -4
- package/dist/routes/request.js +0 -1
- package/dist/routes/reservation.d.ts +4 -3
- package/dist/routes/reservation.js +10 -4
- package/dist/routes/routing.d.ts +30 -7
- package/dist/routes/routing.js +34 -50
- package/dist/routes/scalar.d.ts +3 -4
- package/dist/routes/scalar.js +5 -6
- 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 -1
- package/dist/routes/template.js +0 -1
- package/dist/runtime/artifact.d.ts +8 -7
- package/dist/runtime/artifact.js +23 -11
- 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 +9 -0
- package/dist/schema/installation/codec.js +74 -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 +14 -3
- package/dist/schema/installation/introspection/codec.js +323 -194
- 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 +96 -23
- package/dist/schema/installation/introspection/result.js +0 -1
- package/dist/schema/installation/legacy/index.d.ts +39 -0
- package/dist/schema/installation/legacy/index.js +39 -0
- package/dist/schema/installation/legacy/installation.d.ts +9 -0
- package/dist/schema/installation/legacy/installation.js +28 -0
- package/dist/schema/installation/legacy/introspection.d.ts +10 -0
- package/dist/schema/installation/legacy/introspection.js +70 -0
- package/dist/schema/installation/legacy/msgpack.d.ts +1 -0
- package/dist/schema/installation/legacy/msgpack.js +143 -0
- package/dist/schema/installation/result.d.ts +9 -0
- package/dist/schema/installation/result.js +1 -0
- package/package.json +78 -37
- 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 +0 -32
- 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 +0 -66
- 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 +0 -10
- 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 +0 -16
- 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.map +0 -1
- package/dist/publication/manifest.js +0 -26
- 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 -131
- 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.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 -185
- 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
package/dist/routes/admission.js
CHANGED
|
@@ -1,90 +1,11 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
import { fail } from './error.js';
|
|
5
|
-
const AUTHENTICATION = new Set(['anonymous', 'authenticated', 'authorized']);
|
|
6
|
-
const OUTPUT = new Set(['value', 'stream', 'binary']);
|
|
7
|
-
/** Admit one emitted portable Table before Server composition. */
|
|
1
|
+
import { acceptReference } from '../release/reference.js';
|
|
2
|
+
import { acceptEntries, tableObject } from './entries.js';
|
|
3
|
+
/** Admit one emitted portable release Table before Server composition. */
|
|
8
4
|
export function acceptTable(input) {
|
|
9
|
-
const value =
|
|
10
|
-
|
|
11
|
-
const reference = acceptReference(value.publication);
|
|
12
|
-
if (!Array.isArray(value.entries))
|
|
13
|
-
invalid('Route Table entries');
|
|
14
|
-
const entries = value.entries.map((entry) => acceptRoute(entry, reference.origin));
|
|
15
|
-
if (new Set(entries.map(({ name }) => name)).size !== entries.length) {
|
|
16
|
-
fail('NATIVE_ROUTE_BINDING_INVALID', 'Route Table names must be unique.');
|
|
17
|
-
}
|
|
18
|
-
return Object.freeze({ publication: reference, entries: Object.freeze(entries) });
|
|
19
|
-
}
|
|
20
|
-
function acceptRoute(input, origin) {
|
|
21
|
-
const value = object(input, 'Route Table entry');
|
|
22
|
-
exact(value, ['name', 'callable', 'target', 'authentication', 'output', 'href', 'method', 'default'], 'Route Table entry', ['requestMethod', 'query', 'headers', 'body', 'credential']);
|
|
23
|
-
if (typeof value.default !== 'boolean')
|
|
24
|
-
invalid('Route Table default');
|
|
25
|
-
if (typeof value.authentication !== 'string' || !AUTHENTICATION.has(value.authentication)) {
|
|
26
|
-
invalid('Route Table authentication');
|
|
27
|
-
}
|
|
28
|
-
if (typeof value.output !== 'string' || !OUTPUT.has(value.output))
|
|
29
|
-
invalid('Route Table output');
|
|
30
|
-
const wire = admitRoute({
|
|
31
|
-
name: value.name,
|
|
32
|
-
callable: value.callable,
|
|
33
|
-
href: value.href,
|
|
34
|
-
method: value.method,
|
|
35
|
-
...(value.default === true ? { default: true } : {}),
|
|
36
|
-
...(value.requestMethod === undefined ? {} : { requestMethod: value.requestMethod }),
|
|
37
|
-
...(value.query === undefined ? {} : { query: value.query }),
|
|
38
|
-
...(value.headers === undefined ? {} : { headers: value.headers }),
|
|
39
|
-
...(value.body === undefined ? {} : { body: value.body }),
|
|
40
|
-
...(value.credential === undefined ? {} : { credential: value.credential }),
|
|
41
|
-
...receiver(value.target),
|
|
42
|
-
}, origin);
|
|
43
|
-
const { default: _default, receiver: _receiver, ...common } = wire;
|
|
5
|
+
const value = tableObject(input, ['release', 'entries']);
|
|
6
|
+
const reference = acceptReference(value.release);
|
|
44
7
|
return Object.freeze({
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
authentication: value.authentication,
|
|
48
|
-
output: value.output,
|
|
49
|
-
default: value.default,
|
|
8
|
+
release: reference,
|
|
9
|
+
entries: acceptEntries(value.entries, reference.origin),
|
|
50
10
|
});
|
|
51
11
|
}
|
|
52
|
-
function target(input) {
|
|
53
|
-
const value = object(input, 'Route target');
|
|
54
|
-
if (value.kind === 'function') {
|
|
55
|
-
exact(value, ['kind'], 'Route Function target');
|
|
56
|
-
return Object.freeze({ kind: 'function' });
|
|
57
|
-
}
|
|
58
|
-
if (value.kind !== 'method' || (value.dispatch !== 'static' && value.dispatch !== 'instance')) {
|
|
59
|
-
invalid('Route Method target');
|
|
60
|
-
}
|
|
61
|
-
if (value.dispatch === 'static') {
|
|
62
|
-
exact(value, ['kind', 'dispatch'], 'Route static Method target');
|
|
63
|
-
return Object.freeze({ kind: 'method', dispatch: 'static' });
|
|
64
|
-
}
|
|
65
|
-
exact(value, ['kind', 'dispatch', 'receiver'], 'Route instance Method target');
|
|
66
|
-
if (typeof value.receiver !== 'string')
|
|
67
|
-
invalid('Route receiver');
|
|
68
|
-
return Object.freeze({ kind: 'method', dispatch: 'instance', receiver: value.receiver });
|
|
69
|
-
}
|
|
70
|
-
function receiver(input) {
|
|
71
|
-
const admitted = target(input);
|
|
72
|
-
return admitted.kind === 'method' && admitted.dispatch === 'instance'
|
|
73
|
-
? { receiver: admitted.receiver }
|
|
74
|
-
: {};
|
|
75
|
-
}
|
|
76
|
-
function object(input, label) {
|
|
77
|
-
if (input === null || typeof input !== 'object' || Array.isArray(input))
|
|
78
|
-
invalid(label);
|
|
79
|
-
return input;
|
|
80
|
-
}
|
|
81
|
-
function exact(value, required, label, optional = []) {
|
|
82
|
-
const allowed = new Set([...required, ...optional]);
|
|
83
|
-
if (Object.keys(value).some((key) => !allowed.has(key)) ||
|
|
84
|
-
required.some((key) => !Object.hasOwn(value, key)))
|
|
85
|
-
invalid(label);
|
|
86
|
-
}
|
|
87
|
-
function invalid(label) {
|
|
88
|
-
return fail('NATIVE_ROUTE_BINDING_INVALID', `${label} is invalid.`);
|
|
89
|
-
}
|
|
90
|
-
//# sourceMappingURL=admission.js.map
|
package/dist/routes/binding.d.ts
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
import type {
|
|
1
|
+
import type { Domain } from '@astrale-os/kernel-dsl/v1';
|
|
2
|
+
import type { DomainRelease } from '../release/release.js';
|
|
3
3
|
import type { Plan } from './plan.js';
|
|
4
4
|
import type { Table } from './table.js';
|
|
5
|
-
/** Bind one Plan to an exact placed
|
|
6
|
-
export declare function bind(plan: Plan, deployed:
|
|
7
|
-
//# sourceMappingURL=binding.d.ts.map
|
|
5
|
+
/** Bind one Plan to an exact placed release and matching resolved Domain. */
|
|
6
|
+
export declare function bind(plan: Plan, deployed: DomainRelease, domain: Domain, publicUrl?: string): Table;
|
package/dist/routes/binding.js
CHANGED
|
@@ -1,28 +1,17 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { reference } from '../release/reference.js';
|
|
2
|
+
import { placedEntries, placementMismatch } from './entries.js';
|
|
3
3
|
import { fail } from './error.js';
|
|
4
|
-
import { place } from './placement.js';
|
|
5
4
|
import { rejectReserved } from './reservation.js';
|
|
6
|
-
/** Bind one Plan to an exact placed
|
|
7
|
-
export function bind(plan, deployed,
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
plan.revision !== validator.revision) {
|
|
12
|
-
fail('NATIVE_ROUTE_BINDING_INVALID', 'Route Plan, Publication, and Validator identity differ.');
|
|
5
|
+
/** Bind one Plan to an exact placed release and matching resolved Domain. */
|
|
6
|
+
export function bind(plan, deployed, domain, publicUrl = deployed.identity.issuer) {
|
|
7
|
+
const mismatch = placementMismatch(plan, deployed, domain, publicUrl);
|
|
8
|
+
if (mismatch === 'identity') {
|
|
9
|
+
fail('NATIVE_ROUTE_BINDING_INVALID', 'Route Plan, Release, and Domain identity differ.');
|
|
13
10
|
}
|
|
14
|
-
if (
|
|
15
|
-
|
|
16
|
-
fail('NATIVE_ROUTE_BINDING_INVALID', 'Publication routes differ from the placed Route Plan.');
|
|
11
|
+
if (mismatch === 'routes') {
|
|
12
|
+
fail('NATIVE_ROUTE_BINDING_INVALID', 'Release routes differ from the placed Route Plan.');
|
|
17
13
|
}
|
|
18
|
-
const entries = plan
|
|
19
|
-
const { path: _path, ...portable } = entry;
|
|
20
|
-
return Object.freeze({ ...portable, href: deployed.routes[index].href });
|
|
21
|
-
});
|
|
14
|
+
const entries = placedEntries(plan, deployed);
|
|
22
15
|
rejectReserved(deployed, entries);
|
|
23
|
-
return Object.freeze({
|
|
24
|
-
publication: reference(deployed),
|
|
25
|
-
entries: Object.freeze(entries),
|
|
26
|
-
});
|
|
16
|
+
return Object.freeze({ release: reference(deployed), entries });
|
|
27
17
|
}
|
|
28
|
-
//# sourceMappingURL=binding.js.map
|
package/dist/routes/collision.js
CHANGED
|
@@ -1,9 +1,8 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
import type
|
|
1
|
+
import type { Domain } from '@astrale-os/kernel-dsl/v1';
|
|
2
|
+
import type { HttpRouteDeclaration } from '../release/route.js';
|
|
3
3
|
import type { Plan } from './plan.js';
|
|
4
4
|
export interface CompileInput {
|
|
5
|
-
readonly routes: readonly
|
|
6
|
-
readonly
|
|
5
|
+
readonly routes: readonly HttpRouteDeclaration[];
|
|
6
|
+
readonly domain: Domain;
|
|
7
7
|
}
|
|
8
8
|
export declare function compile(input: CompileInput): Plan;
|
|
9
|
-
//# sourceMappingURL=compiler.d.ts.map
|
package/dist/routes/compiler.js
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { isBinaryInput } from '@astrale-os/kernel-dsl/v1/language';
|
|
2
|
+
import { withPublicationError } from '../release/legacy/error.js';
|
|
3
|
+
import { admitRouteDeclaration } from '../release/route.js';
|
|
2
4
|
import { rejectCollisions } from './collision.js';
|
|
3
5
|
import { fail } from './error.js';
|
|
4
6
|
import { validateCredentialMapping, validateMapping, validateWireMapping } from './mapping.js';
|
|
@@ -8,41 +10,46 @@ export function compile(input) {
|
|
|
8
10
|
if (input === null || typeof input !== 'object' || !Array.isArray(input.routes)) {
|
|
9
11
|
throw new TypeError('Route compilation input is invalid.');
|
|
10
12
|
}
|
|
11
|
-
const authored = input.routes.map((entry) => admitRouteDeclaration(entry, input.
|
|
13
|
+
const authored = input.routes.map((entry) => withPublicationError(() => admitRouteDeclaration(entry, input.domain.origin)));
|
|
12
14
|
const entries = authored.map((declaration) => {
|
|
13
|
-
const meaning = input.
|
|
14
|
-
if (meaning === undefined) {
|
|
15
|
-
fail('NATIVE_ROUTE_BINDING_INVALID', `
|
|
15
|
+
const meaning = input.domain.callable(declaration.callable);
|
|
16
|
+
if (meaning === undefined || (isMethod(meaning) && !meaning.executable)) {
|
|
17
|
+
fail('NATIVE_ROUTE_BINDING_INVALID', `Unavailable callable ${declaration.callable}.`);
|
|
18
|
+
}
|
|
19
|
+
if (isBinaryInput(meaning.definition.input)) {
|
|
20
|
+
fail('NATIVE_ROUTE_BINDING_INVALID', `Native route ${declaration.name} cannot bind a binary-input Function.`);
|
|
16
21
|
}
|
|
17
22
|
const href = placePath(declaration.path, 'https://routes.invalid');
|
|
18
23
|
const route = { ...declaration, href };
|
|
19
24
|
validateTemplate(href);
|
|
20
|
-
validateMapping(route, meaning.
|
|
25
|
+
validateMapping(route, meaning.inputFields, isMethod(meaning) && !meaning.static);
|
|
21
26
|
validateWireMapping(route);
|
|
22
27
|
validateCredentialMapping(route);
|
|
23
28
|
if (route.method === 'GET' && route.body !== undefined) {
|
|
24
29
|
fail('NATIVE_ROUTE_DECLARATION_INVALID', `GET route ${route.name} cannot declare a body.`);
|
|
25
30
|
}
|
|
26
|
-
const target = meaning
|
|
31
|
+
const target = !isMethod(meaning)
|
|
27
32
|
? { kind: 'function' }
|
|
28
|
-
: meaning.
|
|
33
|
+
: meaning.static
|
|
29
34
|
? { kind: 'method', dispatch: 'static' }
|
|
30
35
|
: { kind: 'method', dispatch: 'instance', receiver: route.receiver };
|
|
31
36
|
const { href: _href, receiver: _receiver, ...portable } = route;
|
|
32
37
|
return Object.freeze({
|
|
33
38
|
...portable,
|
|
34
39
|
target,
|
|
35
|
-
|
|
36
|
-
output: meaning.output,
|
|
40
|
+
auth: meaning.auth,
|
|
41
|
+
output: meaning.output.mode,
|
|
37
42
|
path: declaration.path,
|
|
38
43
|
default: declaration.default === true,
|
|
39
44
|
});
|
|
40
45
|
});
|
|
41
46
|
rejectCollisions(entries.map((entry) => ({ ...entry, href: placePath(entry.path, 'https://routes.invalid') })));
|
|
42
47
|
return Object.freeze({
|
|
43
|
-
origin: input.
|
|
44
|
-
revision: input.
|
|
48
|
+
origin: input.domain.origin,
|
|
49
|
+
revision: input.domain.revision,
|
|
45
50
|
entries: Object.freeze(entries),
|
|
46
51
|
});
|
|
47
52
|
}
|
|
48
|
-
|
|
53
|
+
function isMethod(meaning) {
|
|
54
|
+
return 'owner' in meaning;
|
|
55
|
+
}
|
|
@@ -1,9 +1,19 @@
|
|
|
1
|
-
import type { HttpRoute, SingleCredentialSource } from '../
|
|
1
|
+
import type { HttpRoute, SingleCredentialSource } from '../release/route.js';
|
|
2
2
|
import type { Route } from './table.js';
|
|
3
3
|
export declare function credentialSources(route: Pick<HttpRoute, 'credential'>): readonly SingleCredentialSource[];
|
|
4
4
|
export declare function firstCredentialIsAmbient(entry: Route): boolean;
|
|
5
5
|
export declare function specificHeaderWires(entry: Route): ReadonlySet<string>;
|
|
6
6
|
export declare function putCredential(entry: Route, url: URL, headers: Record<string, string>, credential: string): void;
|
|
7
7
|
export declare function withoutCredentialHeaders(entry: Route, input: Readonly<Record<string, string>>): Record<string, string>;
|
|
8
|
+
/** A credential value together with the request channel that actually carried it. */
|
|
9
|
+
export interface LocatedCredential {
|
|
10
|
+
readonly value: string;
|
|
11
|
+
readonly in: SingleCredentialSource['in'];
|
|
12
|
+
}
|
|
8
13
|
export declare function readCredential(entry: Route, url: URL, headers: Record<string, string>): string | undefined;
|
|
9
|
-
|
|
14
|
+
/**
|
|
15
|
+
* Read the request credential and report which declared channel supplied it. A `cookie` channel is
|
|
16
|
+
* ambient (the browser attaches it automatically), which the Server uses to decide CSRF defense; a
|
|
17
|
+
* `header` (Bearer) or `query` channel is caller-chosen and not CSRF-exposed.
|
|
18
|
+
*/
|
|
19
|
+
export declare function locateCredential(entry: Route, url: URL, headers: Record<string, string>): LocatedCredential | undefined;
|
|
@@ -52,7 +52,14 @@ export function withoutCredentialHeaders(entry, input) {
|
|
|
52
52
|
return output;
|
|
53
53
|
}
|
|
54
54
|
export function readCredential(entry, url, headers) {
|
|
55
|
-
|
|
55
|
+
return locateCredential(entry, url, headers)?.value;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Read the request credential and report which declared channel supplied it. A `cookie` channel is
|
|
59
|
+
* ambient (the browser attaches it automatically), which the Server uses to decide CSRF defense; a
|
|
60
|
+
* `header` (Bearer) or `query` channel is caller-chosen and not CSRF-exposed.
|
|
61
|
+
*/
|
|
62
|
+
export function locateCredential(entry, url, headers) {
|
|
56
63
|
if (entry.credential === undefined) {
|
|
57
64
|
const authorization = headers.authorization;
|
|
58
65
|
if (authorization === undefined)
|
|
@@ -60,8 +67,9 @@ export function readCredential(entry, url, headers) {
|
|
|
60
67
|
const matched = /^Bearer[ \t]+([^\s]+)$/iu.exec(authorization.trim());
|
|
61
68
|
if (matched === null)
|
|
62
69
|
invalidRequest('Authorization must contain one Bearer credential.');
|
|
63
|
-
return matched[1];
|
|
70
|
+
return { value: matched[1], in: 'header' };
|
|
64
71
|
}
|
|
72
|
+
const found = [];
|
|
65
73
|
for (const source of credentialSources(entry)) {
|
|
66
74
|
let value;
|
|
67
75
|
if (source.in === 'header') {
|
|
@@ -78,7 +86,7 @@ export function readCredential(entry, url, headers) {
|
|
|
78
86
|
value = cookie(headers.cookie, source.name);
|
|
79
87
|
}
|
|
80
88
|
if (value !== undefined)
|
|
81
|
-
found.push(value);
|
|
89
|
+
found.push({ value, in: source.in });
|
|
82
90
|
}
|
|
83
91
|
if (found.length > 1)
|
|
84
92
|
invalidRequest('Request supplies more than one Astrale credential channel.');
|
|
@@ -116,4 +124,3 @@ function withoutCookie(header, name) {
|
|
|
116
124
|
.join('; ');
|
|
117
125
|
return value.length === 0 ? undefined : value;
|
|
118
126
|
}
|
|
119
|
-
//# sourceMappingURL=credential.js.map
|
package/dist/routes/decode.d.ts
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
import type { PublicationRef } from '../publication/index.js';
|
|
1
|
+
import type { Domain } from '@astrale-os/kernel-dsl/v1';
|
|
3
2
|
import type { HttpRequest, Invocation } from './request.js';
|
|
3
|
+
import type { ServedReferences } from './routing.js';
|
|
4
4
|
import type { Route } from './table.js';
|
|
5
|
-
|
|
6
|
-
|
|
5
|
+
/** Decode one native route request served by a release-backed destination. */
|
|
6
|
+
export declare function decode(entry: Route, request: HttpRequest, domain: Domain, served: ServedReferences): Invocation;
|
|
7
|
+
/** Decode one native route request, reading its routing pair with `routing` at its fixed step. */
|
|
8
|
+
export declare function decodeInvocation(entry: Route, request: HttpRequest, domain: Domain, routing: (input: HttpRequest) => Invocation['routing']): Invocation;
|
package/dist/routes/decode.js
CHANGED
|
@@ -1,16 +1,26 @@
|
|
|
1
|
-
import { NodePath
|
|
2
|
-
import { Key, Ref } from '@astrale-os/kernel-dsl/v1/addressing';
|
|
1
|
+
import { NodePath } from '@astrale-os/kernel-core/path';
|
|
3
2
|
import * as portable from '@astrale-os/kernel-dsl/value';
|
|
4
|
-
import {
|
|
3
|
+
import { locateCredential, specificHeaderWires, withoutCredentialHeaders } from './credential.js';
|
|
5
4
|
import { fail, invalidRequest } from './error.js';
|
|
6
5
|
import { isReservedHeader } from './mapping.js';
|
|
7
6
|
import { methodMatches } from './match.js';
|
|
8
7
|
import { bodyText, normalizeHeaders, parseJsonObject } from './request.js';
|
|
9
8
|
import { decodeRouting } from './routing.js';
|
|
10
9
|
import { decodeScalar } from './scalar.js';
|
|
11
|
-
import { requiresReceiver } from './target.js';
|
|
10
|
+
import { requiresReceiver, routeFingerprint } from './target.js';
|
|
12
11
|
import { matchTemplate, PLACEHOLDER } from './template.js';
|
|
13
|
-
|
|
12
|
+
/** Decode one native route request served by a release-backed destination. */
|
|
13
|
+
export function decode(entry, request, domain, served) {
|
|
14
|
+
return decodeInvocation(entry, request, domain, (input) => {
|
|
15
|
+
const routing = decodeRouting(input, served);
|
|
16
|
+
if (routing?.kind === 'stale') {
|
|
17
|
+
fail('NATIVE_ROUTE_ROUTING_INVALID', 'If-Match does not name the served release.');
|
|
18
|
+
}
|
|
19
|
+
return routing;
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
/** Decode one native route request, reading its routing pair with `routing` at its fixed step. */
|
|
23
|
+
export function decodeInvocation(entry, request, domain, routing) {
|
|
14
24
|
if (!methodMatches(entry, request.method))
|
|
15
25
|
invalidRequest('HTTP method does not match the route.');
|
|
16
26
|
const matched = matchTemplate(entry.href, request.url);
|
|
@@ -18,10 +28,10 @@ export function decode(entry, request, validator, served) {
|
|
|
18
28
|
invalidRequest('URL does not match the route template.');
|
|
19
29
|
const values = {};
|
|
20
30
|
for (const [name, value] of Object.entries(matched)) {
|
|
21
|
-
values[name] = decodeScalar(entry, name, value,
|
|
31
|
+
values[name] = decodeScalar(entry, name, value, domain);
|
|
22
32
|
}
|
|
23
33
|
if (entry.requestMethod !== undefined) {
|
|
24
|
-
values[entry.requestMethod] = decodeScalar(entry, entry.requestMethod, request.method.toUpperCase(),
|
|
34
|
+
values[entry.requestMethod] = decodeScalar(entry, entry.requestMethod, request.method.toUpperCase(), domain);
|
|
25
35
|
}
|
|
26
36
|
let url;
|
|
27
37
|
try {
|
|
@@ -34,14 +44,15 @@ export function decode(entry, request, validator, served) {
|
|
|
34
44
|
throw cause;
|
|
35
45
|
}
|
|
36
46
|
const headers = normalizeHeaders(request.headers);
|
|
37
|
-
const
|
|
38
|
-
const
|
|
47
|
+
const located = locateCredential(entry, url, headers);
|
|
48
|
+
const credential = located?.value;
|
|
49
|
+
const routed = routing(request);
|
|
39
50
|
const applicationHeaders = withoutCredentialHeaders(entry, headers);
|
|
40
51
|
for (const [name, wire] of Object.entries(entry.query ?? {})) {
|
|
41
52
|
const found = url.searchParams.getAll(wire);
|
|
42
53
|
if (found.length !== 1)
|
|
43
54
|
invalidRequest(`Query parameter ${wire} must occur exactly once.`);
|
|
44
|
-
values[name] = decodeScalar(entry, name, found[0],
|
|
55
|
+
values[name] = decodeScalar(entry, name, found[0], domain);
|
|
45
56
|
}
|
|
46
57
|
for (const [name, pick] of Object.entries(entry.headers ?? {})) {
|
|
47
58
|
if (pick === '*') {
|
|
@@ -55,12 +66,12 @@ export function decode(entry, request, validator, served) {
|
|
|
55
66
|
const value = headers[pick.toLowerCase()];
|
|
56
67
|
if (value === undefined)
|
|
57
68
|
invalidRequest(`Missing header ${pick}.`);
|
|
58
|
-
values[name] = decodeScalar(entry, name, value,
|
|
69
|
+
values[name] = decodeScalar(entry, name, value, domain);
|
|
59
70
|
}
|
|
60
71
|
}
|
|
61
72
|
if (entry.body === '*') {
|
|
62
73
|
const body = parseJsonObject(request.body);
|
|
63
|
-
const allowed = remainderFields(entry,
|
|
74
|
+
const allowed = remainderFields(entry, domain);
|
|
64
75
|
for (const name of Object.keys(body)) {
|
|
65
76
|
if (!allowed.has(name)) {
|
|
66
77
|
invalidRequest(`JSON body field ${name} is not owned by the route remainder mapping.`);
|
|
@@ -112,34 +123,26 @@ export function decode(entry, request, validator, served) {
|
|
|
112
123
|
}
|
|
113
124
|
throw cause;
|
|
114
125
|
}
|
|
115
|
-
const
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
kind: Ref.namespace(ref),
|
|
121
|
-
name: Ref.member(ref),
|
|
122
|
-
}), Ref.child(ref)).raw
|
|
123
|
-
: Path.instanceMethod(Path.from(receiver), Ref.child(ref)).raw
|
|
124
|
-
: Path.project({
|
|
125
|
-
origin: Key.origin(entry.callable),
|
|
126
|
-
kind: 'function',
|
|
127
|
-
name: Ref.member(ref),
|
|
128
|
-
}).raw;
|
|
126
|
+
const target = Object.freeze({
|
|
127
|
+
callable: entry.callable,
|
|
128
|
+
fingerprint: routeFingerprint(domain, entry.callable),
|
|
129
|
+
...(receiver === undefined ? {} : { instance: receiver }),
|
|
130
|
+
});
|
|
129
131
|
return Object.freeze({
|
|
130
132
|
call: Object.freeze({ target, input }),
|
|
131
133
|
...(credential === undefined ? {} : { credential }),
|
|
132
|
-
...(
|
|
134
|
+
...(located === undefined ? {} : { credentialIn: located.in }),
|
|
135
|
+
...(routed === undefined ? {} : { routing: routed }),
|
|
133
136
|
});
|
|
134
137
|
}
|
|
135
|
-
function remainderFields(entry,
|
|
138
|
+
function remainderFields(entry, domain) {
|
|
136
139
|
const claimed = new Set([
|
|
137
140
|
...[...entry.href.matchAll(PLACEHOLDER)].map((item) => item[1]),
|
|
138
141
|
...(entry.requestMethod === undefined ? [] : [entry.requestMethod]),
|
|
139
142
|
...Object.keys(entry.query ?? {}),
|
|
140
143
|
...Object.keys(entry.headers ?? {}),
|
|
141
144
|
]);
|
|
142
|
-
const fields =
|
|
145
|
+
const fields = domain.callable(entry.callable)?.inputFields ?? [];
|
|
143
146
|
const allowed = new Set(fields.filter((name) => !claimed.has(name)));
|
|
144
147
|
const receiver = entry.target.kind === 'method' && entry.target.dispatch === 'instance'
|
|
145
148
|
? entry.target.receiver
|
|
@@ -149,4 +152,3 @@ function remainderFields(entry, validator) {
|
|
|
149
152
|
}
|
|
150
153
|
return allowed;
|
|
151
154
|
}
|
|
152
|
-
//# sourceMappingURL=decode.js.map
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { type IssuerId } from '@astrale-os/kernel-core/auth/issuer';
|
|
2
|
+
import type { DeploymentRetiredReason, ErrorResponse } from '../invocation/index.js';
|
|
3
|
+
import type { ReleaseDigest } from '../release/digest.js';
|
|
4
|
+
import type { HttpRequest } from './request.js';
|
|
5
|
+
/**
|
|
6
|
+
* Reserved control of a deployment that no longer serves. Every emitter (the deployment
|
|
7
|
+
* dispatchers, a release-snapshot server) answers every path with the same 410, headers and
|
|
8
|
+
* envelope, and never runs other code in its place.
|
|
9
|
+
*/
|
|
10
|
+
export interface DeploymentRetired {
|
|
11
|
+
readonly kind: 'deployment-retired';
|
|
12
|
+
readonly reason: DeploymentRetiredReason;
|
|
13
|
+
}
|
|
14
|
+
export declare const HTTP_DEPLOYMENT_RETIRED: 'x-astrale-deployment-retired';
|
|
15
|
+
export declare const HTTP_DEPLOYMENT_RETIRED_STATUS: 410;
|
|
16
|
+
export declare function deploymentRetiredHeaders(): Readonly<Record<string, string>>;
|
|
17
|
+
/**
|
|
18
|
+
* The envelope every deployed client already decodes from any status: a not-found Service error
|
|
19
|
+
* carrying `DEPLOYMENT_RETIRED`, attributed to the deployment rather than to one request. An
|
|
20
|
+
* emitter passing a deployment that is not a canonical issuer origin, or a release that is not a
|
|
21
|
+
* release digest, gets a `TypeError` naming that argument.
|
|
22
|
+
*/
|
|
23
|
+
export declare function deploymentRetiredBody(deployment: IssuerId, release?: ReleaseDigest): ErrorResponse;
|
|
24
|
+
/**
|
|
25
|
+
* Recognize only the reserved status, header, `no-store` and envelope together. A 410 without the
|
|
26
|
+
* header is ordinary application behavior; the header with another status or value, without
|
|
27
|
+
* `Cache-Control: no-store`, or beside any other body (including one correlated to a request or
|
|
28
|
+
* whose invocation source is not the retired deployment), is an invalid response.
|
|
29
|
+
*/
|
|
30
|
+
export declare function decodeDeploymentRetired(status: number, headers: HttpRequest['headers'], body: unknown): DeploymentRetired | undefined;
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import { is as isIssuer } from '@astrale-os/kernel-core/auth/issuer';
|
|
2
|
+
import { CONTENT_TYPE_JSON } from '../codecs/media-types.js';
|
|
3
|
+
import { CODES, ProtocolError } from '../errors/index.js';
|
|
4
|
+
import { DEPLOYMENT_RETIRED, decodeResponse, serviceErrorOf } from '../invocation/index.js';
|
|
5
|
+
import { fail } from './error.js';
|
|
6
|
+
import { reservedHeader } from './header.js';
|
|
7
|
+
export const HTTP_DEPLOYMENT_RETIRED = 'x-astrale-deployment-retired';
|
|
8
|
+
export const HTTP_DEPLOYMENT_RETIRED_STATUS = 410;
|
|
9
|
+
const MESSAGE = 'This deployment is retired.';
|
|
10
|
+
const DIGEST = /^sha256:[0-9a-f]{64}$/u;
|
|
11
|
+
export function deploymentRetiredHeaders() {
|
|
12
|
+
return Object.freeze({
|
|
13
|
+
[HTTP_DEPLOYMENT_RETIRED]: '1',
|
|
14
|
+
'cache-control': 'no-store',
|
|
15
|
+
'content-type': CONTENT_TYPE_JSON,
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* The envelope every deployed client already decodes from any status: a not-found Service error
|
|
20
|
+
* carrying `DEPLOYMENT_RETIRED`, attributed to the deployment rather than to one request. An
|
|
21
|
+
* emitter passing a deployment that is not a canonical issuer origin, or a release that is not a
|
|
22
|
+
* release digest, gets a `TypeError` naming that argument.
|
|
23
|
+
*/
|
|
24
|
+
export function deploymentRetiredBody(deployment, release) {
|
|
25
|
+
assertEmitterInput(deployment, release);
|
|
26
|
+
return decodeRetired({
|
|
27
|
+
requestId: null,
|
|
28
|
+
invocation: { source: deployment, id: 'unavailable' },
|
|
29
|
+
error: {
|
|
30
|
+
code: CODES.NOT_FOUND,
|
|
31
|
+
message: MESSAGE,
|
|
32
|
+
data: {
|
|
33
|
+
code: DEPLOYMENT_RETIRED,
|
|
34
|
+
details: { deployment, ...(release === undefined ? {} : { release }) },
|
|
35
|
+
},
|
|
36
|
+
},
|
|
37
|
+
}).envelope;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Recognize only the reserved status, header, `no-store` and envelope together. A 410 without the
|
|
41
|
+
* header is ordinary application behavior; the header with another status or value, without
|
|
42
|
+
* `Cache-Control: no-store`, or beside any other body (including one correlated to a request or
|
|
43
|
+
* whose invocation source is not the retired deployment), is an invalid response.
|
|
44
|
+
*/
|
|
45
|
+
export function decodeDeploymentRetired(status, headers, body) {
|
|
46
|
+
const encoded = reservedHeader(headers, HTTP_DEPLOYMENT_RETIRED);
|
|
47
|
+
if (encoded === undefined)
|
|
48
|
+
return undefined;
|
|
49
|
+
if (status !== HTTP_DEPLOYMENT_RETIRED_STATUS || encoded !== '1') {
|
|
50
|
+
fail('NATIVE_ROUTE_ROUTING_INVALID', `${HTTP_DEPLOYMENT_RETIRED} is reserved for status ${HTTP_DEPLOYMENT_RETIRED_STATUS} with value 1.`);
|
|
51
|
+
}
|
|
52
|
+
if (!cacheDirectives(headers).includes('no-store')) {
|
|
53
|
+
fail('NATIVE_ROUTE_ROUTING_INVALID', `${HTTP_DEPLOYMENT_RETIRED} requires Cache-Control: no-store.`);
|
|
54
|
+
}
|
|
55
|
+
return Object.freeze({ kind: 'deployment-retired', reason: decodeRetired(body).reason });
|
|
56
|
+
}
|
|
57
|
+
function decodeRetired(input) {
|
|
58
|
+
let envelope;
|
|
59
|
+
try {
|
|
60
|
+
envelope = decodeResponse(input);
|
|
61
|
+
}
|
|
62
|
+
catch (cause) {
|
|
63
|
+
if (cause instanceof ProtocolError)
|
|
64
|
+
return invalid(cause);
|
|
65
|
+
throw cause;
|
|
66
|
+
}
|
|
67
|
+
const failure = 'error' in envelope ? serviceErrorOf(envelope.error) : undefined;
|
|
68
|
+
if (failure === undefined ||
|
|
69
|
+
failure.data.code !== DEPLOYMENT_RETIRED ||
|
|
70
|
+
envelope.requestId !== null ||
|
|
71
|
+
envelope.invocation.source !== failure.data.details.deployment) {
|
|
72
|
+
return invalid();
|
|
73
|
+
}
|
|
74
|
+
return { envelope: envelope, reason: failure.data };
|
|
75
|
+
}
|
|
76
|
+
/** Every `Cache-Control` directive, lower-cased, across repeated fields in any spelling. */
|
|
77
|
+
function cacheDirectives(input) {
|
|
78
|
+
const fields = input instanceof Headers
|
|
79
|
+
? [input.get('cache-control') ?? '']
|
|
80
|
+
: Object.entries(input ?? {})
|
|
81
|
+
.filter(([name]) => name.toLowerCase() === 'cache-control')
|
|
82
|
+
.flatMap(([, value]) => value ?? []);
|
|
83
|
+
return fields.flatMap((field) => field.split(',').map((d) => d.trim().toLowerCase()));
|
|
84
|
+
}
|
|
85
|
+
/** Emitter-side programmer invariant: never reported as a received-response decode failure. */
|
|
86
|
+
function assertEmitterInput(deployment, release) {
|
|
87
|
+
if (!isIssuer(deployment)) {
|
|
88
|
+
throw new TypeError('deploymentRetiredBody: deployment must be a canonical issuer origin.');
|
|
89
|
+
}
|
|
90
|
+
if (release !== undefined && (typeof release !== 'string' || !DIGEST.test(release))) {
|
|
91
|
+
throw new TypeError('deploymentRetiredBody: release must be a sha256 release digest.');
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
function invalid(cause) {
|
|
95
|
+
return fail('NATIVE_ROUTE_ROUTING_INVALID', `${HTTP_DEPLOYMENT_RETIRED} requires the deployment-retired error envelope.`, cause);
|
|
96
|
+
}
|
package/dist/routes/encode.d.ts
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { Domain } from '@astrale-os/kernel-dsl/v1';
|
|
2
2
|
import type { Invocation, Request } from './request.js';
|
|
3
3
|
import type { Route } from './table.js';
|
|
4
|
-
export declare function encode(entry: Route, invocation: Invocation,
|
|
5
|
-
//# sourceMappingURL=encode.d.ts.map
|
|
4
|
+
export declare function encode(entry: Route, invocation: Invocation, domain: Domain): Request;
|