@astrale-os/kernel-protocol 0.5.0-beta.7 → 0.5.0-beta.71
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 +0 -21
- package/dist/invocation/delegate.js +4 -36
- 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 +6 -4
- package/dist/invocation/index.js +5 -4
- package/dist/invocation/legacy/delegate.d.ts +17 -0
- package/dist/invocation/legacy/delegate.js +37 -0
- 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/release/manifest.d.ts +10 -0
- package/dist/release/manifest.js +66 -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 +0 -7
- 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
|
@@ -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;
|
package/dist/routes/encode.js
CHANGED
|
@@ -1,33 +1,36 @@
|
|
|
1
|
+
import { targetPath } from '@astrale-os/kernel-core/callable';
|
|
1
2
|
import { Path } from '@astrale-os/kernel-core/path';
|
|
2
|
-
import {
|
|
3
|
+
import { callableAddress } from '@astrale-os/kernel-dsl/v1/addressing';
|
|
3
4
|
import * as portable from '@astrale-os/kernel-dsl/value';
|
|
5
|
+
import { routedDigest } from '../invocation/index.js';
|
|
4
6
|
import { firstCredentialIsAmbient, putCredential, specificHeaderWires, withoutCredentialHeaders, } from './credential.js';
|
|
5
7
|
import { fail, invalidRequest } from './error.js';
|
|
6
8
|
import { isReservedHeader } from './mapping.js';
|
|
7
|
-
import { encodeStrongEtag,
|
|
9
|
+
import { encodeStrongEtag, HTTP_ROUTE_DIGEST, HTTP_ROUTE_ISSUER } from './routing.js';
|
|
8
10
|
import { asObject, encodeScalar, scalar } from './scalar.js';
|
|
9
|
-
import { requiresReceiver } from './target.js';
|
|
11
|
+
import { requiresReceiver, routeFingerprint } from './target.js';
|
|
10
12
|
import { authorityEnd, encodeTemplate, PLACEHOLDER } from './template.js';
|
|
11
|
-
export function encode(entry, invocation,
|
|
13
|
+
export function encode(entry, invocation, domain) {
|
|
14
|
+
if (typeof invocation.call.target !== 'string' &&
|
|
15
|
+
invocation.call.target.fingerprint !== undefined &&
|
|
16
|
+
invocation.call.target.fingerprint !== routeFingerprint(domain, entry.callable)) {
|
|
17
|
+
invalidRequest('Invocation Target fingerprint does not match the selected route Domain.');
|
|
18
|
+
}
|
|
12
19
|
const input = asObject(invocation.call.input);
|
|
13
|
-
const target = Path.from(invocation.call.target);
|
|
20
|
+
const target = Path.from(targetPath(invocation.call.target));
|
|
14
21
|
const needsReceiver = requiresReceiver(entry);
|
|
15
|
-
const
|
|
16
|
-
const methodName =
|
|
22
|
+
const coordinate = callableAddress(entry.callable);
|
|
23
|
+
const methodName = coordinate.kind === 'method' ? coordinate.name : undefined;
|
|
17
24
|
const receiver = needsReceiver ? instanceSource(target, methodName) : undefined;
|
|
18
25
|
const source = receiver?.raw;
|
|
19
26
|
const expected = needsReceiver
|
|
20
|
-
? Path.instanceMethod(receiver,
|
|
21
|
-
:
|
|
22
|
-
? Path.staticMethod(Path.project(
|
|
23
|
-
origin: Key.origin(entry.callable),
|
|
24
|
-
kind: Ref.namespace(ref),
|
|
25
|
-
name: Ref.member(ref),
|
|
26
|
-
}), methodName).raw
|
|
27
|
+
? Path.instanceMethod(receiver, entry.callable).raw
|
|
28
|
+
: coordinate.kind === 'method'
|
|
29
|
+
? Path.staticMethod(Path.project(coordinate.owner), methodName).raw
|
|
27
30
|
: Path.project({
|
|
28
|
-
origin:
|
|
31
|
+
origin: coordinate.origin,
|
|
29
32
|
kind: 'function',
|
|
30
|
-
name:
|
|
33
|
+
name: coordinate.name,
|
|
31
34
|
}).raw;
|
|
32
35
|
if (target.raw !== expected)
|
|
33
36
|
invalidRequest('Invocation Path does not match the selected route.');
|
|
@@ -35,7 +38,7 @@ export function encode(entry, invocation, validator) {
|
|
|
35
38
|
? entry.target.receiver
|
|
36
39
|
: undefined;
|
|
37
40
|
const field = (name) => (name === receiverName ? source : input[name]);
|
|
38
|
-
const wireField = (name) => encodeScalar(entry, name, field(name),
|
|
41
|
+
const wireField = (name) => encodeScalar(entry, name, field(name), domain);
|
|
39
42
|
const hostEnd = authorityEnd(entry.href);
|
|
40
43
|
let url = entry.href.replaceAll(PLACEHOLDER, (_whole, name, catchall, offset) => encodeTemplate(wireField(name), catchall, offset < hostEnd));
|
|
41
44
|
const parsed = new URL(url);
|
|
@@ -107,13 +110,13 @@ export function encode(entry, invocation, validator) {
|
|
|
107
110
|
}
|
|
108
111
|
}
|
|
109
112
|
if (invocation.routing !== undefined) {
|
|
110
|
-
headers[
|
|
113
|
+
headers[HTTP_ROUTE_DIGEST] = encodeStrongEtag(routedDigest(invocation.routing));
|
|
111
114
|
headers[HTTP_ROUTE_ISSUER] = invocation.routing.issuer;
|
|
112
115
|
}
|
|
113
116
|
url = parsed.toString();
|
|
114
117
|
const mappedMethod = entry.requestMethod === undefined
|
|
115
118
|
? undefined
|
|
116
|
-
: encodeScalar(entry, entry.requestMethod, input[entry.requestMethod],
|
|
119
|
+
: encodeScalar(entry, entry.requestMethod, input[entry.requestMethod], domain).toUpperCase();
|
|
117
120
|
const requestedMethod = invocation.method?.toUpperCase();
|
|
118
121
|
if (mappedMethod !== undefined &&
|
|
119
122
|
requestedMethod !== undefined &&
|
|
@@ -147,4 +150,3 @@ function instanceSource(target, name) {
|
|
|
147
150
|
}
|
|
148
151
|
return Path.fromAST({ anchor: target.ast.anchor, steps: steps.slice(0, -1) });
|
|
149
152
|
}
|
|
150
|
-
//# sourceMappingURL=encode.js.map
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { Domain } from '@astrale-os/kernel-dsl/v1';
|
|
2
|
+
import type { Object as JsonObject, Value as JsonValue } from '@astrale-os/kernel-dsl/value';
|
|
3
|
+
import type { Plan } from './plan.js';
|
|
4
|
+
import type { Placed } from './reservation.js';
|
|
5
|
+
import type { Route } from './table.js';
|
|
6
|
+
type Meaning = Pick<Domain, 'origin' | 'revision' | 'callable'>;
|
|
7
|
+
/**
|
|
8
|
+
* The coordinate in which a served document differs from one Plan placed at `publicUrl`: its
|
|
9
|
+
* origin or schema revision (`identity`), or its route wire (`routes`). Each Table words its own
|
|
10
|
+
* refusal after the document it binds.
|
|
11
|
+
*/
|
|
12
|
+
export declare function placementMismatch(plan: Plan, deployed: Placed, domain: Domain, publicUrl: string): 'identity' | 'routes' | undefined;
|
|
13
|
+
/** The entries of one placed Plan at the hrefs its served document publishes. */
|
|
14
|
+
export declare function placedEntries(plan: Plan, deployed: Pick<Placed, 'routes'>): readonly Route[];
|
|
15
|
+
/** Whether entries carry exactly the route wire and Domain identity of one served document. */
|
|
16
|
+
export declare function sameServedWire(entries: readonly Route[], deployed: Pick<Placed, 'origin' | 'schema' | 'routes'>, domain: Meaning): boolean;
|
|
17
|
+
/** Refuse an entry whose target, auth or output differs from the Domain's callable meaning. */
|
|
18
|
+
export declare function verifyMeaning(entries: readonly Route[], domain: Meaning): void;
|
|
19
|
+
/** Admit one portable Table object holding exactly `fields`. */
|
|
20
|
+
export declare function tableObject(input: unknown, fields: readonly string[]): JsonObject;
|
|
21
|
+
/** Admit the entries of one Table bound to `origin`; an invalid route wire is a `ReleaseError`. */
|
|
22
|
+
export declare function acceptEntries(input: JsonValue | undefined, origin: string): readonly Route[];
|
|
23
|
+
export {};
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
import { accept as acceptPortable, json } from '@astrale-os/kernel-dsl/value';
|
|
2
|
+
import { admitRoute } from '../release/route.js';
|
|
3
|
+
import { fail } from './error.js';
|
|
4
|
+
import { place } from './placement.js';
|
|
5
|
+
const AUTH = new Set(['anonymous', 'authenticated', 'authorized']);
|
|
6
|
+
const OUTPUT = new Set(['value', 'stream', 'binary']);
|
|
7
|
+
/**
|
|
8
|
+
* The coordinate in which a served document differs from one Plan placed at `publicUrl`: its
|
|
9
|
+
* origin or schema revision (`identity`), or its route wire (`routes`). Each Table words its own
|
|
10
|
+
* refusal after the document it binds.
|
|
11
|
+
*/
|
|
12
|
+
export function placementMismatch(plan, deployed, domain, publicUrl) {
|
|
13
|
+
if (plan.origin !== deployed.origin ||
|
|
14
|
+
plan.origin !== domain.origin ||
|
|
15
|
+
plan.revision !== deployed.schema.revision ||
|
|
16
|
+
plan.revision !== domain.revision) {
|
|
17
|
+
return 'identity';
|
|
18
|
+
}
|
|
19
|
+
return json.serialize(place(plan, publicUrl)) ===
|
|
20
|
+
json.serialize(deployed.routes)
|
|
21
|
+
? undefined
|
|
22
|
+
: 'routes';
|
|
23
|
+
}
|
|
24
|
+
/** The entries of one placed Plan at the hrefs its served document publishes. */
|
|
25
|
+
export function placedEntries(plan, deployed) {
|
|
26
|
+
return Object.freeze(plan.entries.map((entry, index) => {
|
|
27
|
+
const { path: _path, ...portable } = entry;
|
|
28
|
+
return Object.freeze({ ...portable, href: deployed.routes[index].href });
|
|
29
|
+
}));
|
|
30
|
+
}
|
|
31
|
+
/** Whether entries carry exactly the route wire and Domain identity of one served document. */
|
|
32
|
+
export function sameServedWire(entries, deployed, domain) {
|
|
33
|
+
return (domain.origin === deployed.origin &&
|
|
34
|
+
domain.revision === deployed.schema.revision &&
|
|
35
|
+
json.serialize(entries.map(wireRoute)) === json.serialize(deployed.routes));
|
|
36
|
+
}
|
|
37
|
+
/** Refuse an entry whose target, auth or output differs from the Domain's callable meaning. */
|
|
38
|
+
export function verifyMeaning(entries, domain) {
|
|
39
|
+
for (const entry of entries) {
|
|
40
|
+
const meaning = domain.callable(entry.callable);
|
|
41
|
+
const targetMatches = meaning !== undefined &&
|
|
42
|
+
((entry.target.kind === 'function' && !isMethod(meaning)) ||
|
|
43
|
+
(entry.target.kind === 'method' &&
|
|
44
|
+
isMethod(meaning) &&
|
|
45
|
+
meaning.executable &&
|
|
46
|
+
entry.target.dispatch === (meaning.static ? 'static' : 'instance')));
|
|
47
|
+
if (!targetMatches || meaning.auth !== entry.auth || meaning.output.mode !== entry.output) {
|
|
48
|
+
fail('NATIVE_ROUTE_BINDING_INVALID', `Route ${entry.name} differs from Domain meaning.`);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
/** Admit one portable Table object holding exactly `fields`. */
|
|
53
|
+
export function tableObject(input, fields) {
|
|
54
|
+
const value = object(acceptPortable(input), 'Route Table');
|
|
55
|
+
exact(value, fields, 'Route Table');
|
|
56
|
+
return value;
|
|
57
|
+
}
|
|
58
|
+
/** Admit the entries of one Table bound to `origin`; an invalid route wire is a `ReleaseError`. */
|
|
59
|
+
export function acceptEntries(input, origin) {
|
|
60
|
+
if (!Array.isArray(input))
|
|
61
|
+
invalid('Route Table entries');
|
|
62
|
+
const entries = input.map((entry) => acceptRoute(entry, origin));
|
|
63
|
+
if (new Set(entries.map(({ name }) => name)).size !== entries.length) {
|
|
64
|
+
fail('NATIVE_ROUTE_BINDING_INVALID', 'Route Table names must be unique.');
|
|
65
|
+
}
|
|
66
|
+
return Object.freeze(entries);
|
|
67
|
+
}
|
|
68
|
+
function acceptRoute(input, origin) {
|
|
69
|
+
const value = object(input, 'Route Table entry');
|
|
70
|
+
exact(value, ['name', 'callable', 'target', 'auth', 'output', 'href', 'method', 'default'], 'Route Table entry', ['requestMethod', 'query', 'headers', 'body', 'credential']);
|
|
71
|
+
if (typeof value.default !== 'boolean')
|
|
72
|
+
invalid('Route Table default');
|
|
73
|
+
if (typeof value.auth !== 'string' || !AUTH.has(value.auth)) {
|
|
74
|
+
invalid('Route Table auth');
|
|
75
|
+
}
|
|
76
|
+
if (typeof value.output !== 'string' || !OUTPUT.has(value.output))
|
|
77
|
+
invalid('Route Table output');
|
|
78
|
+
const wire = admitRoute({
|
|
79
|
+
name: value.name,
|
|
80
|
+
callable: value.callable,
|
|
81
|
+
href: value.href,
|
|
82
|
+
method: value.method,
|
|
83
|
+
...(value.default === true ? { default: true } : {}),
|
|
84
|
+
...(value.requestMethod === undefined ? {} : { requestMethod: value.requestMethod }),
|
|
85
|
+
...(value.query === undefined ? {} : { query: value.query }),
|
|
86
|
+
...(value.headers === undefined ? {} : { headers: value.headers }),
|
|
87
|
+
...(value.body === undefined ? {} : { body: value.body }),
|
|
88
|
+
...(value.credential === undefined ? {} : { credential: value.credential }),
|
|
89
|
+
...receiver(value.target),
|
|
90
|
+
}, origin);
|
|
91
|
+
const { default: _default, receiver: _receiver, ...common } = wire;
|
|
92
|
+
return Object.freeze({
|
|
93
|
+
...common,
|
|
94
|
+
target: target(value.target),
|
|
95
|
+
auth: value.auth,
|
|
96
|
+
output: value.output,
|
|
97
|
+
default: value.default,
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
function target(input) {
|
|
101
|
+
const value = object(input, 'Route target');
|
|
102
|
+
if (value.kind === 'function') {
|
|
103
|
+
exact(value, ['kind'], 'Route Function target');
|
|
104
|
+
return Object.freeze({ kind: 'function' });
|
|
105
|
+
}
|
|
106
|
+
if (value.kind !== 'method' || (value.dispatch !== 'static' && value.dispatch !== 'instance')) {
|
|
107
|
+
invalid('Route Method target');
|
|
108
|
+
}
|
|
109
|
+
if (value.dispatch === 'static') {
|
|
110
|
+
exact(value, ['kind', 'dispatch'], 'Route static Method target');
|
|
111
|
+
return Object.freeze({ kind: 'method', dispatch: 'static' });
|
|
112
|
+
}
|
|
113
|
+
exact(value, ['kind', 'dispatch', 'receiver'], 'Route instance Method target');
|
|
114
|
+
if (typeof value.receiver !== 'string')
|
|
115
|
+
invalid('Route receiver');
|
|
116
|
+
return Object.freeze({ kind: 'method', dispatch: 'instance', receiver: value.receiver });
|
|
117
|
+
}
|
|
118
|
+
function receiver(input) {
|
|
119
|
+
const admitted = target(input);
|
|
120
|
+
return admitted.kind === 'method' && admitted.dispatch === 'instance'
|
|
121
|
+
? { receiver: admitted.receiver }
|
|
122
|
+
: {};
|
|
123
|
+
}
|
|
124
|
+
function isMethod(meaning) {
|
|
125
|
+
return 'owner' in meaning;
|
|
126
|
+
}
|
|
127
|
+
function wireRoute(entry) {
|
|
128
|
+
const { target, auth: _auth, output: _output, default: isDefault, ...wire } = entry;
|
|
129
|
+
return {
|
|
130
|
+
...wire,
|
|
131
|
+
...(isDefault ? { default: true } : {}),
|
|
132
|
+
...(target.kind === 'method' && target.dispatch === 'instance'
|
|
133
|
+
? { receiver: target.receiver }
|
|
134
|
+
: {}),
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
function object(input, label) {
|
|
138
|
+
if (input === null || typeof input !== 'object' || Array.isArray(input))
|
|
139
|
+
invalid(label);
|
|
140
|
+
return input;
|
|
141
|
+
}
|
|
142
|
+
function exact(value, required, label, optional = []) {
|
|
143
|
+
const allowed = new Set([...required, ...optional]);
|
|
144
|
+
if (Object.keys(value).some((key) => !allowed.has(key)) ||
|
|
145
|
+
required.some((key) => !Object.hasOwn(value, key)))
|
|
146
|
+
invalid(label);
|
|
147
|
+
}
|
|
148
|
+
function invalid(label) {
|
|
149
|
+
return fail('NATIVE_ROUTE_BINDING_INVALID', `${label} is invalid.`);
|
|
150
|
+
}
|
package/dist/routes/error.d.ts
CHANGED
package/dist/routes/error.js
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
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 { Table } from './table.js';
|
|
4
|
-
/** Verify that an admitted Table carries the exact
|
|
5
|
-
export declare function verifyTable(table: Table, deployed:
|
|
6
|
-
//# sourceMappingURL=evidence.d.ts.map
|
|
4
|
+
/** Verify that an admitted Table carries the exact released wire and Domain meaning. */
|
|
5
|
+
export declare function verifyTable(table: Table, deployed: DomainRelease, domain: Pick<Domain, 'origin' | 'revision' | 'callable'>): Table;
|
package/dist/routes/evidence.js
CHANGED
|
@@ -1,38 +1,12 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { compareReferences, reference } from '../release/reference.js';
|
|
2
|
+
import { sameServedWire, verifyMeaning } from './entries.js';
|
|
3
3
|
import { fail } from './error.js';
|
|
4
|
-
/** Verify that an admitted Table carries the exact
|
|
5
|
-
export function verifyTable(table, deployed,
|
|
6
|
-
if (compareReferences(table.
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
json.serialize(table.entries.map(wireRoute)) !==
|
|
10
|
-
json.serialize(deployed.routes)) {
|
|
11
|
-
fail('NATIVE_ROUTE_BINDING_INVALID', 'Route Table evidence differs from its Publication.');
|
|
12
|
-
}
|
|
13
|
-
for (const entry of table.entries) {
|
|
14
|
-
const meaning = validator.callable(entry.callable);
|
|
15
|
-
const targetMatches = meaning !== undefined &&
|
|
16
|
-
((entry.target.kind === 'function' && meaning.target.kind === 'function') ||
|
|
17
|
-
(entry.target.kind === 'method' &&
|
|
18
|
-
meaning.target.kind === 'method' &&
|
|
19
|
-
entry.target.dispatch === meaning.target.dispatch));
|
|
20
|
-
if (!targetMatches ||
|
|
21
|
-
meaning.authentication !== entry.authentication ||
|
|
22
|
-
meaning.output !== entry.output) {
|
|
23
|
-
fail('NATIVE_ROUTE_BINDING_INVALID', `Route ${entry.name} differs from Validator meaning.`);
|
|
24
|
-
}
|
|
4
|
+
/** Verify that an admitted Table carries the exact released wire and Domain meaning. */
|
|
5
|
+
export function verifyTable(table, deployed, domain) {
|
|
6
|
+
if (compareReferences(table.release, reference(deployed)) !== 'exact' ||
|
|
7
|
+
!sameServedWire(table.entries, deployed, domain)) {
|
|
8
|
+
fail('NATIVE_ROUTE_BINDING_INVALID', 'Route Table evidence differs from its Release.');
|
|
25
9
|
}
|
|
10
|
+
verifyMeaning(table.entries, domain);
|
|
26
11
|
return table;
|
|
27
12
|
}
|
|
28
|
-
function wireRoute(entry) {
|
|
29
|
-
const { target, authentication: _authentication, output: _output, default: isDefault, ...wire } = entry;
|
|
30
|
-
return {
|
|
31
|
-
...wire,
|
|
32
|
-
...(isDefault ? { default: true } : {}),
|
|
33
|
-
...(target.kind === 'method' && target.dispatch === 'instance'
|
|
34
|
-
? { receiver: target.receiver }
|
|
35
|
-
: {}),
|
|
36
|
-
};
|
|
37
|
-
}
|
|
38
|
-
//# sourceMappingURL=evidence.js.map
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import * as auth from '@astrale-os/kernel-core/auth';
|
|
2
|
+
import type { Sha256Digest } from '../release/digest.js';
|
|
3
|
+
import type { HttpRequest } from './request.js';
|
|
4
|
+
/** The digest one header value names as exactly one strong quoted digest, else undefined. */
|
|
5
|
+
export declare function strongDigest(input: string): Sha256Digest | undefined;
|
|
6
|
+
/** Read one reserved header, which occurs at most once in any spelling. */
|
|
7
|
+
export declare function reservedHeader(input: HttpRequest['headers'], name: string): string | undefined;
|
|
8
|
+
/** Admit the routing Kernel issuer one native route request names in header `name`. */
|
|
9
|
+
export declare function acceptIssuerHeader(encoded: string, name: string): auth.IssuerId;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import * as auth from '@astrale-os/kernel-core/auth';
|
|
2
|
+
import { fail } from './error.js';
|
|
3
|
+
const STRONG_DIGEST = /^"(sha256:[0-9a-f]{64})"$/u;
|
|
4
|
+
/** The digest one header value names as exactly one strong quoted digest, else undefined. */
|
|
5
|
+
export function strongDigest(input) {
|
|
6
|
+
return STRONG_DIGEST.exec(input)?.[1];
|
|
7
|
+
}
|
|
8
|
+
/** Read one reserved header, which occurs at most once in any spelling. */
|
|
9
|
+
export function reservedHeader(input, name) {
|
|
10
|
+
if (input instanceof Headers)
|
|
11
|
+
return input.get(name) ?? undefined;
|
|
12
|
+
let found;
|
|
13
|
+
for (const [candidate, value] of Object.entries(input ?? {})) {
|
|
14
|
+
if (candidate.toLowerCase() !== name || value === undefined)
|
|
15
|
+
continue;
|
|
16
|
+
if (found !== undefined || (Array.isArray(value) && value.length !== 1)) {
|
|
17
|
+
fail('NATIVE_ROUTE_ROUTING_INVALID', `Header ${name} must occur at most once.`);
|
|
18
|
+
}
|
|
19
|
+
found = typeof value === 'string' ? value : value[0];
|
|
20
|
+
}
|
|
21
|
+
return found;
|
|
22
|
+
}
|
|
23
|
+
/** Admit the routing Kernel issuer one native route request names in header `name`. */
|
|
24
|
+
export function acceptIssuerHeader(encoded, name) {
|
|
25
|
+
try {
|
|
26
|
+
return auth.issuer.accept(encoded);
|
|
27
|
+
}
|
|
28
|
+
catch (cause) {
|
|
29
|
+
if (cause instanceof auth.AuthValueError) {
|
|
30
|
+
return fail('NATIVE_ROUTE_ROUTING_INVALID', `${name} is invalid.`, cause);
|
|
31
|
+
}
|
|
32
|
+
throw cause;
|
|
33
|
+
}
|
|
34
|
+
}
|
package/dist/routes/index.d.ts
CHANGED
|
@@ -12,9 +12,11 @@ export type { Plan, PlanEntry } from './plan.js';
|
|
|
12
12
|
export type { Route, Table } from './table.js';
|
|
13
13
|
export type { RouteTarget } from './target.js';
|
|
14
14
|
export { place } from './placement.js';
|
|
15
|
-
export {
|
|
16
|
-
export { decodeRouting, decodeMiss, decodeStale,
|
|
15
|
+
export { decodeDeploymentRetired, deploymentRetiredBody, deploymentRetiredHeaders, HTTP_DEPLOYMENT_RETIRED, HTTP_DEPLOYMENT_RETIRED_STATUS, type DeploymentRetired, } from './deployment-retired.js';
|
|
16
|
+
export { decodeRouting, decodeMiss, decodeStale, HTTP_ROUTE_DIGEST, HTTP_ROUTE_ISSUER, HTTP_ROUTE_MISS, HTTP_ROUTE_MISS_STATUS, HTTP_ROUTE_STALE, HTTP_ROUTE_STALE_STATUS, missHeaders, staleHeaders, type MissControl, type ServedReferences, type StaleControl, } from './routing.js';
|
|
17
17
|
export { select } from './select.js';
|
|
18
18
|
export { decodeStreamFrame, encodeStreamFrame, STREAM_MEDIA_TYPE, type StreamFrame, } from './stream.js';
|
|
19
19
|
export { templatesOverlap } from './template.js';
|
|
20
|
-
|
|
20
|
+
/** @deprecated Native routes of a v3-input destination; use the release-bound Table and decoders. */
|
|
21
|
+
export * as legacy from './legacy/index.js';
|
|
22
|
+
export { HTTP_ROUTE_PUBLICATION } from './legacy/index.js';
|
package/dist/routes/index.js
CHANGED
|
@@ -9,9 +9,11 @@ export { RouteError } from './error.js';
|
|
|
9
9
|
export { match } from './match.js';
|
|
10
10
|
export {} from './request.js';
|
|
11
11
|
export { place } from './placement.js';
|
|
12
|
-
export {
|
|
13
|
-
export { decodeRouting, decodeMiss, decodeStale,
|
|
12
|
+
export { decodeDeploymentRetired, deploymentRetiredBody, deploymentRetiredHeaders, HTTP_DEPLOYMENT_RETIRED, HTTP_DEPLOYMENT_RETIRED_STATUS, } from './deployment-retired.js';
|
|
13
|
+
export { decodeRouting, decodeMiss, decodeStale, HTTP_ROUTE_DIGEST, HTTP_ROUTE_ISSUER, HTTP_ROUTE_MISS, HTTP_ROUTE_MISS_STATUS, HTTP_ROUTE_STALE, HTTP_ROUTE_STALE_STATUS, missHeaders, staleHeaders, } from './routing.js';
|
|
14
14
|
export { select } from './select.js';
|
|
15
15
|
export { decodeStreamFrame, encodeStreamFrame, STREAM_MEDIA_TYPE, } from './stream.js';
|
|
16
16
|
export { templatesOverlap } from './template.js';
|
|
17
|
-
|
|
17
|
+
/** @deprecated Native routes of a v3-input destination; use the release-bound Table and decoders. */
|
|
18
|
+
export * as legacy from './legacy/index.js';
|
|
19
|
+
export { HTTP_ROUTE_PUBLICATION } from './legacy/index.js';
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Native routes bound to a v2/v3 Publication and its ETag. Binding also reserves `release.json`
|
|
3
|
+
* to prevent routes from shadowing the release document.
|
|
4
|
+
* Superseded by release-based Tables and routing from `@astrale-os/kernel-protocol/routes`.
|
|
5
|
+
*
|
|
6
|
+
* Short-term consumers: every destination sealed from a v2/v3 Publication, the legacy stable
|
|
7
|
+
* Workers and the SDK's v3 seal and preflight (`legacy.bind`, `legacy.verifyTable`,
|
|
8
|
+
* `legacy.Table`, adopted at its Kernel pin bump), and the Server's Publication-backed native
|
|
9
|
+
* routes (`server/routes/routes.ts`, `server/release/legacy/`) that serve them.
|
|
10
|
+
*
|
|
11
|
+
* Removal, in a separate breaking release: the conditions of `protocol/release/legacy/index.ts`
|
|
12
|
+
* hold (no stable Worker serves a v2/v3 document, no installation pins one) and every supported
|
|
13
|
+
* client relays `Via`. Then delete, in the same PR:
|
|
14
|
+
* - this folder with its tests and laws, the `legacy` namespace and `HTTP_ROUTE_PUBLICATION`
|
|
15
|
+
* re-export of `routes/index.ts`, and the `./routes/legacy` subpaths (source and `dist`) of
|
|
16
|
+
* `protocol/package.json`;
|
|
17
|
+
* - the projection branch of the canonical `decodeRouting` (`routing.ts`) with
|
|
18
|
+
* `ServedReferences.projection`, so stale reports the release digest as `current`, and the
|
|
19
|
+
* projection vectors of TEST-DECODES-ROUTING-BY-SERVED-REFERENCE;
|
|
20
|
+
* - the Publication-backed native routes of the Server (`server/routes/routes.ts`,
|
|
21
|
+
* `server/release/legacy/`, and #508 in `server/invocation/legacy/`), which read this module;
|
|
22
|
+
* - rebase `protocol/__tests__/publication-routes.test.ts`, which exercises the shared compile,
|
|
23
|
+
* placement and reservation laws through this Table, on the release Table;
|
|
24
|
+
* - `ServedReferences.projection` from law PROTOCOL-LEGACY-WIRE-FIELDS and its test.
|
|
25
|
+
* The shared entry mechanics (`entries.ts`, `header.ts`) and `reservation.ts` stay: they carry no
|
|
26
|
+
* document label.
|
|
27
|
+
*/
|
|
28
|
+
export { acceptTable, bind, verifyTable, type Table } from './table.js';
|
|
29
|
+
export { decode, decodeRouting, HTTP_ROUTE_PUBLICATION } from './routing.js';
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Native routes bound to a v2/v3 Publication and its ETag. Binding also reserves `release.json`
|
|
3
|
+
* to prevent routes from shadowing the release document.
|
|
4
|
+
* Superseded by release-based Tables and routing from `@astrale-os/kernel-protocol/routes`.
|
|
5
|
+
*
|
|
6
|
+
* Short-term consumers: every destination sealed from a v2/v3 Publication, the legacy stable
|
|
7
|
+
* Workers and the SDK's v3 seal and preflight (`legacy.bind`, `legacy.verifyTable`,
|
|
8
|
+
* `legacy.Table`, adopted at its Kernel pin bump), and the Server's Publication-backed native
|
|
9
|
+
* routes (`server/routes/routes.ts`, `server/release/legacy/`) that serve them.
|
|
10
|
+
*
|
|
11
|
+
* Removal, in a separate breaking release: the conditions of `protocol/release/legacy/index.ts`
|
|
12
|
+
* hold (no stable Worker serves a v2/v3 document, no installation pins one) and every supported
|
|
13
|
+
* client relays `Via`. Then delete, in the same PR:
|
|
14
|
+
* - this folder with its tests and laws, the `legacy` namespace and `HTTP_ROUTE_PUBLICATION`
|
|
15
|
+
* re-export of `routes/index.ts`, and the `./routes/legacy` subpaths (source and `dist`) of
|
|
16
|
+
* `protocol/package.json`;
|
|
17
|
+
* - the projection branch of the canonical `decodeRouting` (`routing.ts`) with
|
|
18
|
+
* `ServedReferences.projection`, so stale reports the release digest as `current`, and the
|
|
19
|
+
* projection vectors of TEST-DECODES-ROUTING-BY-SERVED-REFERENCE;
|
|
20
|
+
* - the Publication-backed native routes of the Server (`server/routes/routes.ts`,
|
|
21
|
+
* `server/release/legacy/`, and #508 in `server/invocation/legacy/`), which read this module;
|
|
22
|
+
* - rebase `protocol/__tests__/publication-routes.test.ts`, which exercises the shared compile,
|
|
23
|
+
* placement and reservation laws through this Table, on the release Table;
|
|
24
|
+
* - `ServedReferences.projection` from law PROTOCOL-LEGACY-WIRE-FIELDS and its test.
|
|
25
|
+
* The shared entry mechanics (`entries.ts`, `header.ts`) and `reservation.ts` stay: they carry no
|
|
26
|
+
* document label.
|
|
27
|
+
*/
|
|
28
|
+
export { acceptTable, bind, verifyTable } from './table.js';
|
|
29
|
+
export { decode, decodeRouting, HTTP_ROUTE_PUBLICATION } from './routing.js';
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { Domain } from '@astrale-os/kernel-dsl/v1';
|
|
2
|
+
import type { PublicationVia } from '../../invocation/index.js';
|
|
3
|
+
import type { PublicationRef } from '../../release/legacy/reference.js';
|
|
4
|
+
import type { HttpRequest, Invocation } from '../request.js';
|
|
5
|
+
import type { Route } from '../table.js';
|
|
6
|
+
/**
|
|
7
|
+
* The If-Match header native routing reads, named for the Publication ETag it carried.
|
|
8
|
+
*
|
|
9
|
+
* @deprecated Successor: `HTTP_ROUTE_DIGEST`, the same header named for the routed digest.
|
|
10
|
+
*/
|
|
11
|
+
export declare const HTTP_ROUTE_PUBLICATION: "if-match";
|
|
12
|
+
/**
|
|
13
|
+
* Decode only the native strong If-Match representation of Publication routing, served by a
|
|
14
|
+
* v3-input destination; a mismatched ETag is invalid here because the Server answers stale first.
|
|
15
|
+
*
|
|
16
|
+
* @deprecated Successor: `decodeRouting`, which serves a release and its v3 projection.
|
|
17
|
+
*/
|
|
18
|
+
export declare function decodeRouting(input: Pick<HttpRequest, 'headers'>, publication: PublicationRef): PublicationVia | undefined;
|
|
19
|
+
/**
|
|
20
|
+
* Decode one native route request served by a v3-input destination.
|
|
21
|
+
*
|
|
22
|
+
* @deprecated Successor: `decode`, which serves a release and its v3 projection.
|
|
23
|
+
*/
|
|
24
|
+
export declare function decode(entry: Route, request: HttpRequest, domain: Domain, served: PublicationRef): Invocation;
|