@astrale-os/kernel-protocol 0.5.0-beta.3 → 0.5.0-beta.31
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +683 -0
- package/dist/artifact/index.d.ts +0 -1
- package/dist/artifact/index.js +0 -1
- package/dist/artifact/ref.d.ts +0 -1
- package/dist/artifact/ref.js +0 -1
- package/dist/codecs/codec.d.ts +0 -1
- package/dist/codecs/codec.js +0 -1
- package/dist/codecs/index.d.ts +0 -1
- package/dist/codecs/index.js +0 -1
- package/dist/codecs/json.d.ts +0 -1
- package/dist/codecs/json.js +0 -1
- package/dist/codecs/media-types.d.ts +0 -1
- package/dist/codecs/media-types.js +0 -1
- package/dist/codecs/msgpack.d.ts +0 -1
- package/dist/codecs/msgpack.js +1 -5
- package/dist/errors/codes.d.ts +0 -1
- package/dist/errors/codes.js +0 -1
- package/dist/errors/http-status.d.ts +0 -1
- package/dist/errors/http-status.js +0 -1
- package/dist/errors/index.d.ts +0 -1
- package/dist/errors/index.js +0 -1
- package/dist/errors/payload.d.ts +0 -1
- package/dist/errors/payload.js +3 -3
- package/dist/errors/protocol-error.d.ts +0 -1
- package/dist/errors/protocol-error.js +4 -3
- package/dist/errors/reason.d.ts +0 -1
- package/dist/errors/reason.js +0 -1
- package/dist/index.d.ts +0 -1
- package/dist/index.js +0 -1
- package/dist/invocation/admission.d.ts +2 -3
- package/dist/invocation/admission.js +5 -8
- package/dist/invocation/binary.d.ts +1 -1
- package/dist/invocation/binary.js +14 -2
- package/dist/invocation/binding-codecs.d.ts +0 -1
- package/dist/invocation/binding-codecs.js +0 -1
- package/dist/invocation/cancellation.d.ts +0 -1
- package/dist/invocation/cancellation.js +0 -1
- package/dist/invocation/correlation.d.ts +0 -1
- package/dist/invocation/correlation.js +0 -1
- package/dist/invocation/delegate.d.ts +0 -1
- package/dist/invocation/delegate.js +0 -1
- package/dist/invocation/http/binary.d.ts +3 -2
- package/dist/invocation/http/binary.js +4 -2
- package/dist/invocation/http/index.d.ts +1 -2
- package/dist/invocation/http/index.js +1 -2
- package/dist/invocation/http/negotiation.d.ts +0 -1
- package/dist/invocation/http/negotiation.js +0 -1
- package/dist/invocation/http/stream.d.ts +0 -1
- package/dist/invocation/http/stream.js +0 -1
- package/dist/invocation/http/trace.d.ts +0 -1
- package/dist/invocation/http/trace.js +0 -1
- package/dist/invocation/idempotency.d.ts +0 -1
- package/dist/invocation/idempotency.js +0 -1
- package/dist/invocation/identity.d.ts +0 -1
- package/dist/invocation/identity.js +0 -1
- package/dist/invocation/index.d.ts +1 -2
- package/dist/invocation/index.js +1 -2
- package/dist/invocation/miss.d.ts +0 -1
- package/dist/invocation/miss.js +0 -1
- package/dist/invocation/redirect.d.ts +9 -8
- package/dist/invocation/redirect.js +6 -5
- package/dist/invocation/request.d.ts +0 -1
- package/dist/invocation/request.js +0 -1
- package/dist/invocation/response.d.ts +0 -1
- package/dist/invocation/response.js +0 -1
- package/dist/invocation/routing.d.ts +3 -3
- package/dist/invocation/routing.js +4 -4
- package/dist/invocation/schema.d.ts +2 -3
- package/dist/invocation/schema.js +2 -3
- package/dist/invocation/service-reason.d.ts +13 -13
- package/dist/invocation/service-reason.js +14 -14
- package/dist/invocation/stale-route.d.ts +0 -1
- package/dist/invocation/stale-route.js +0 -1
- package/dist/invocation/stream.d.ts +0 -1
- package/dist/invocation/stream.js +0 -1
- package/dist/invocation/target.d.ts +2 -3
- package/dist/invocation/target.js +0 -1
- package/dist/invocation/trace.d.ts +0 -1
- package/dist/invocation/trace.js +0 -1
- package/dist/invocation/version.d.ts +0 -1
- package/dist/invocation/version.js +0 -1
- package/dist/invocation/websocket/binary.d.ts +0 -1
- package/dist/invocation/websocket/binary.js +2 -2
- package/dist/invocation/websocket/index.d.ts +0 -1
- package/dist/invocation/websocket/index.js +0 -1
- package/dist/invocation/websocket/subprotocol.d.ts +0 -1
- package/dist/invocation/websocket/subprotocol.js +0 -1
- package/dist/issuer/configuration.d.ts +1 -2
- package/dist/issuer/configuration.js +0 -1
- package/dist/issuer/error.d.ts +0 -1
- package/dist/issuer/error.js +0 -1
- package/dist/issuer/exchange.d.ts +0 -1
- package/dist/issuer/exchange.js +0 -1
- package/dist/issuer/hosted.d.ts +1 -2
- package/dist/issuer/hosted.js +0 -1
- package/dist/issuer/index.d.ts +0 -1
- package/dist/issuer/index.js +0 -1
- package/dist/issuer/key-set.d.ts +1 -2
- package/dist/issuer/key-set.js +3 -3
- package/dist/issuer/paths.d.ts +0 -1
- package/dist/issuer/paths.js +0 -1
- package/dist/issuer/url.d.ts +1 -2
- package/dist/issuer/url.js +3 -3
- package/dist/publication/bindings/callable.d.ts +1 -2
- package/dist/publication/bindings/callable.js +8 -6
- package/dist/publication/bindings/index.d.ts +1 -2
- package/dist/publication/bindings/index.js +0 -1
- package/dist/publication/bindings/invocation.d.ts +0 -1
- package/dist/publication/bindings/invocation.js +0 -1
- package/dist/publication/bindings/view.d.ts +8 -2
- package/dist/publication/bindings/view.js +112 -4
- package/dist/publication/bundle-admission.d.ts +4 -0
- package/dist/publication/bundle-admission.js +65 -0
- package/dist/publication/bundle-descriptor.d.ts +9 -0
- package/dist/publication/bundle-descriptor.js +19 -0
- package/dist/publication/bundle-evidence.d.ts +3 -0
- package/dist/publication/bundle-evidence.js +13 -0
- package/dist/publication/bundle.d.ts +5 -12
- package/dist/publication/bundle.js +8 -29
- package/dist/publication/content.d.ts +0 -1
- package/dist/publication/content.js +0 -1
- package/dist/publication/declaration.d.ts +11 -0
- package/dist/publication/declaration.js +1 -0
- package/dist/publication/delivery/attestation.d.ts +0 -1
- package/dist/publication/delivery/attestation.js +0 -1
- package/dist/publication/delivery/claims.d.ts +8 -8
- package/dist/publication/delivery/claims.js +6 -7
- package/dist/publication/delivery/delivery.d.ts +1 -2
- package/dist/publication/delivery/delivery.js +1 -2
- package/dist/publication/delivery/error.d.ts +0 -1
- package/dist/publication/delivery/error.js +0 -1
- package/dist/publication/delivery/index.d.ts +0 -1
- package/dist/publication/delivery/index.js +0 -1
- package/dist/publication/delivery/limits.d.ts +0 -1
- package/dist/publication/delivery/limits.js +0 -1
- package/dist/publication/delivery/request.d.ts +3 -4
- package/dist/publication/delivery/request.js +4 -4
- package/dist/publication/delivery-declaration.d.ts +4 -0
- package/dist/publication/delivery-declaration.js +25 -0
- package/dist/publication/delivery-endpoint.d.ts +0 -1
- package/dist/publication/delivery-endpoint.js +0 -1
- package/dist/publication/error.d.ts +0 -1
- package/dist/publication/error.js +0 -1
- package/dist/publication/etag.d.ts +0 -1
- package/dist/publication/etag.js +0 -1
- package/dist/publication/index.d.ts +8 -5
- package/dist/publication/index.js +4 -2
- package/dist/publication/manifest.d.ts +2 -3
- package/dist/publication/manifest.js +10 -6
- package/dist/publication/publication.d.ts +13 -6
- package/dist/publication/publication.js +50 -71
- package/dist/publication/reference.d.ts +3 -3
- package/dist/publication/reference.js +7 -7
- package/dist/publication/requirements.d.ts +15 -7
- package/dist/publication/requirements.js +137 -47
- package/dist/publication/route.d.ts +6 -2
- package/dist/publication/route.js +31 -9
- package/dist/publication/schema.d.ts +3 -4
- package/dist/publication/schema.js +3 -4
- package/dist/routes/admission.d.ts +3 -0
- package/dist/routes/admission.js +89 -0
- package/dist/routes/binding.d.ts +6 -0
- package/dist/routes/binding.js +27 -0
- package/dist/routes/collision.d.ts +2 -0
- package/dist/routes/collision.js +16 -0
- package/dist/routes/compiler.d.ts +8 -0
- package/dist/routes/compiler.js +50 -0
- package/dist/routes/credential.d.ts +7 -8
- package/dist/routes/credential.js +7 -8
- package/dist/routes/decode.d.ts +4 -3
- package/dist/routes/decode.js +42 -42
- package/dist/routes/encode.d.ts +3 -3
- package/dist/routes/encode.js +31 -33
- package/dist/routes/error-response.d.ts +0 -1
- package/dist/routes/error-response.js +0 -1
- package/dist/routes/error.d.ts +0 -1
- package/dist/routes/error.js +0 -1
- package/dist/routes/evidence.d.ts +5 -0
- package/dist/routes/evidence.js +38 -0
- package/dist/routes/index.d.ts +9 -3
- package/dist/routes/index.js +6 -3
- package/dist/routes/mapping.d.ts +1 -2
- package/dist/routes/mapping.js +4 -13
- package/dist/routes/match.d.ts +3 -4
- package/dist/routes/match.js +3 -5
- package/dist/routes/placement.d.ts +5 -0
- package/dist/routes/placement.js +18 -0
- package/dist/routes/plan.d.ts +24 -0
- package/dist/routes/plan.js +1 -0
- package/dist/routes/release-unavailable.d.ts +8 -0
- package/dist/routes/release-unavailable.js +32 -0
- package/dist/routes/request.d.ts +0 -1
- package/dist/routes/request.js +3 -2
- package/dist/routes/reservation.d.ts +3 -4
- package/dist/routes/reservation.js +8 -5
- package/dist/routes/routing.d.ts +0 -1
- package/dist/routes/routing.js +0 -1
- package/dist/routes/scalar.d.ts +4 -4
- package/dist/routes/scalar.js +14 -11
- package/dist/routes/select.d.ts +2 -3
- package/dist/routes/select.js +2 -3
- package/dist/routes/stream.d.ts +0 -1
- package/dist/routes/stream.js +0 -1
- package/dist/routes/table.d.ts +9 -0
- package/dist/routes/table.js +1 -0
- package/dist/routes/target.d.ts +13 -0
- package/dist/routes/target.js +3 -0
- package/dist/routes/template.d.ts +0 -1
- package/dist/routes/template.js +0 -1
- package/dist/runtime/artifact.d.ts +3 -4
- package/dist/runtime/artifact.js +5 -6
- package/dist/runtime/index.d.ts +0 -1
- package/dist/runtime/index.js +0 -1
- package/dist/schema/index.d.ts +0 -1
- package/dist/schema/index.js +0 -1
- package/dist/schema/installation/codec.d.ts +4 -0
- package/dist/schema/installation/codec.js +70 -0
- package/dist/schema/installation/index.d.ts +2 -1
- package/dist/schema/installation/index.js +1 -1
- package/dist/schema/installation/introspection/codec.d.ts +3 -3
- package/dist/schema/installation/introspection/codec.js +144 -204
- package/dist/schema/installation/introspection/index.d.ts +2 -3
- package/dist/schema/installation/introspection/index.js +1 -2
- package/dist/schema/installation/introspection/result.d.ts +18 -23
- package/dist/schema/installation/introspection/result.js +0 -1
- package/dist/schema/installation/result.d.ts +9 -0
- package/dist/schema/installation/result.js +1 -0
- package/package.json +116 -13
- package/dist/artifact/index.d.ts.map +0 -1
- package/dist/artifact/index.js.map +0 -1
- package/dist/artifact/ref.d.ts.map +0 -1
- package/dist/artifact/ref.js.map +0 -1
- package/dist/codecs/codec.d.ts.map +0 -1
- package/dist/codecs/codec.js.map +0 -1
- package/dist/codecs/index.d.ts.map +0 -1
- package/dist/codecs/index.js.map +0 -1
- package/dist/codecs/json.d.ts.map +0 -1
- package/dist/codecs/json.js.map +0 -1
- package/dist/codecs/media-types.d.ts.map +0 -1
- package/dist/codecs/media-types.js.map +0 -1
- package/dist/codecs/msgpack.d.ts.map +0 -1
- package/dist/codecs/msgpack.js.map +0 -1
- package/dist/errors/codes.d.ts.map +0 -1
- package/dist/errors/codes.js.map +0 -1
- package/dist/errors/http-status.d.ts.map +0 -1
- package/dist/errors/http-status.js.map +0 -1
- package/dist/errors/index.d.ts.map +0 -1
- package/dist/errors/index.js.map +0 -1
- package/dist/errors/payload.d.ts.map +0 -1
- package/dist/errors/payload.js.map +0 -1
- package/dist/errors/protocol-error.d.ts.map +0 -1
- package/dist/errors/protocol-error.js.map +0 -1
- package/dist/errors/reason.d.ts.map +0 -1
- package/dist/errors/reason.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/invocation/admission.d.ts.map +0 -1
- package/dist/invocation/admission.js.map +0 -1
- package/dist/invocation/binary.d.ts.map +0 -1
- package/dist/invocation/binary.js.map +0 -1
- package/dist/invocation/binding-codecs.d.ts.map +0 -1
- package/dist/invocation/binding-codecs.js.map +0 -1
- package/dist/invocation/cancellation.d.ts.map +0 -1
- package/dist/invocation/cancellation.js.map +0 -1
- package/dist/invocation/correlation.d.ts.map +0 -1
- package/dist/invocation/correlation.js.map +0 -1
- package/dist/invocation/delegate.d.ts.map +0 -1
- package/dist/invocation/delegate.js.map +0 -1
- package/dist/invocation/http/binary.d.ts.map +0 -1
- package/dist/invocation/http/binary.js.map +0 -1
- package/dist/invocation/http/index.d.ts.map +0 -1
- package/dist/invocation/http/index.js.map +0 -1
- package/dist/invocation/http/negotiation.d.ts.map +0 -1
- package/dist/invocation/http/negotiation.js.map +0 -1
- package/dist/invocation/http/stream.d.ts.map +0 -1
- package/dist/invocation/http/stream.js.map +0 -1
- package/dist/invocation/http/trace.d.ts.map +0 -1
- package/dist/invocation/http/trace.js.map +0 -1
- package/dist/invocation/idempotency.d.ts.map +0 -1
- package/dist/invocation/idempotency.js.map +0 -1
- package/dist/invocation/identity.d.ts.map +0 -1
- package/dist/invocation/identity.js.map +0 -1
- package/dist/invocation/index.d.ts.map +0 -1
- package/dist/invocation/index.js.map +0 -1
- package/dist/invocation/miss.d.ts.map +0 -1
- package/dist/invocation/miss.js.map +0 -1
- package/dist/invocation/redirect.d.ts.map +0 -1
- package/dist/invocation/redirect.js.map +0 -1
- package/dist/invocation/request.d.ts.map +0 -1
- package/dist/invocation/request.js.map +0 -1
- package/dist/invocation/response.d.ts.map +0 -1
- package/dist/invocation/response.js.map +0 -1
- package/dist/invocation/routing.d.ts.map +0 -1
- package/dist/invocation/routing.js.map +0 -1
- package/dist/invocation/schema.d.ts.map +0 -1
- package/dist/invocation/schema.js.map +0 -1
- package/dist/invocation/service-reason.d.ts.map +0 -1
- package/dist/invocation/service-reason.js.map +0 -1
- package/dist/invocation/stale-route.d.ts.map +0 -1
- package/dist/invocation/stale-route.js.map +0 -1
- package/dist/invocation/stream.d.ts.map +0 -1
- package/dist/invocation/stream.js.map +0 -1
- package/dist/invocation/target.d.ts.map +0 -1
- package/dist/invocation/target.js.map +0 -1
- package/dist/invocation/trace.d.ts.map +0 -1
- package/dist/invocation/trace.js.map +0 -1
- package/dist/invocation/version.d.ts.map +0 -1
- package/dist/invocation/version.js.map +0 -1
- package/dist/invocation/websocket/binary.d.ts.map +0 -1
- package/dist/invocation/websocket/binary.js.map +0 -1
- package/dist/invocation/websocket/index.d.ts.map +0 -1
- package/dist/invocation/websocket/index.js.map +0 -1
- package/dist/invocation/websocket/subprotocol.d.ts.map +0 -1
- package/dist/invocation/websocket/subprotocol.js.map +0 -1
- package/dist/issuer/configuration.d.ts.map +0 -1
- package/dist/issuer/configuration.js.map +0 -1
- package/dist/issuer/error.d.ts.map +0 -1
- package/dist/issuer/error.js.map +0 -1
- package/dist/issuer/exchange.d.ts.map +0 -1
- package/dist/issuer/exchange.js.map +0 -1
- package/dist/issuer/hosted.d.ts.map +0 -1
- package/dist/issuer/hosted.js.map +0 -1
- package/dist/issuer/index.d.ts.map +0 -1
- package/dist/issuer/index.js.map +0 -1
- package/dist/issuer/key-set.d.ts.map +0 -1
- package/dist/issuer/key-set.js.map +0 -1
- package/dist/issuer/paths.d.ts.map +0 -1
- package/dist/issuer/paths.js.map +0 -1
- package/dist/issuer/url.d.ts.map +0 -1
- package/dist/issuer/url.js.map +0 -1
- package/dist/publication/bindings/callable.d.ts.map +0 -1
- package/dist/publication/bindings/callable.js.map +0 -1
- package/dist/publication/bindings/index.d.ts.map +0 -1
- package/dist/publication/bindings/index.js.map +0 -1
- package/dist/publication/bindings/invocation.d.ts.map +0 -1
- package/dist/publication/bindings/invocation.js.map +0 -1
- package/dist/publication/bindings/view.d.ts.map +0 -1
- package/dist/publication/bindings/view.js.map +0 -1
- package/dist/publication/bundle.d.ts.map +0 -1
- package/dist/publication/bundle.js.map +0 -1
- package/dist/publication/content.d.ts.map +0 -1
- package/dist/publication/content.js.map +0 -1
- package/dist/publication/delivery/attestation.d.ts.map +0 -1
- package/dist/publication/delivery/attestation.js.map +0 -1
- package/dist/publication/delivery/claims.d.ts.map +0 -1
- package/dist/publication/delivery/claims.js.map +0 -1
- package/dist/publication/delivery/delivery.d.ts.map +0 -1
- package/dist/publication/delivery/delivery.js.map +0 -1
- package/dist/publication/delivery/error.d.ts.map +0 -1
- package/dist/publication/delivery/error.js.map +0 -1
- package/dist/publication/delivery/index.d.ts.map +0 -1
- package/dist/publication/delivery/index.js.map +0 -1
- package/dist/publication/delivery/limits.d.ts.map +0 -1
- package/dist/publication/delivery/limits.js.map +0 -1
- package/dist/publication/delivery/request.d.ts.map +0 -1
- package/dist/publication/delivery/request.js.map +0 -1
- package/dist/publication/delivery-endpoint.d.ts.map +0 -1
- package/dist/publication/delivery-endpoint.js.map +0 -1
- package/dist/publication/error.d.ts.map +0 -1
- package/dist/publication/error.js.map +0 -1
- package/dist/publication/etag.d.ts.map +0 -1
- package/dist/publication/etag.js.map +0 -1
- package/dist/publication/index.d.ts.map +0 -1
- package/dist/publication/index.js.map +0 -1
- package/dist/publication/manifest.d.ts.map +0 -1
- package/dist/publication/manifest.js.map +0 -1
- package/dist/publication/publication.d.ts.map +0 -1
- package/dist/publication/publication.js.map +0 -1
- package/dist/publication/reference.d.ts.map +0 -1
- package/dist/publication/reference.js.map +0 -1
- package/dist/publication/requirements.d.ts.map +0 -1
- package/dist/publication/requirements.js.map +0 -1
- package/dist/publication/route.d.ts.map +0 -1
- package/dist/publication/route.js.map +0 -1
- package/dist/publication/schema.d.ts.map +0 -1
- package/dist/publication/schema.js.map +0 -1
- package/dist/routes/compile.d.ts +0 -5
- package/dist/routes/compile.d.ts.map +0 -1
- package/dist/routes/compile.js +0 -69
- package/dist/routes/compile.js.map +0 -1
- package/dist/routes/credential.d.ts.map +0 -1
- package/dist/routes/credential.js.map +0 -1
- package/dist/routes/decode.d.ts.map +0 -1
- package/dist/routes/decode.js.map +0 -1
- package/dist/routes/encode.d.ts.map +0 -1
- package/dist/routes/encode.js.map +0 -1
- package/dist/routes/error-response.d.ts.map +0 -1
- package/dist/routes/error-response.js.map +0 -1
- package/dist/routes/error.d.ts.map +0 -1
- package/dist/routes/error.js.map +0 -1
- package/dist/routes/index.d.ts.map +0 -1
- package/dist/routes/index.js.map +0 -1
- package/dist/routes/mapping.d.ts.map +0 -1
- package/dist/routes/mapping.js.map +0 -1
- package/dist/routes/match.d.ts.map +0 -1
- package/dist/routes/match.js.map +0 -1
- package/dist/routes/request.d.ts.map +0 -1
- package/dist/routes/request.js.map +0 -1
- package/dist/routes/reservation.d.ts.map +0 -1
- package/dist/routes/reservation.js.map +0 -1
- package/dist/routes/route.d.ts +0 -13
- package/dist/routes/route.d.ts.map +0 -1
- package/dist/routes/route.js +0 -6
- package/dist/routes/route.js.map +0 -1
- package/dist/routes/routing.d.ts.map +0 -1
- package/dist/routes/routing.js.map +0 -1
- package/dist/routes/scalar.d.ts.map +0 -1
- package/dist/routes/scalar.js.map +0 -1
- package/dist/routes/select.d.ts.map +0 -1
- package/dist/routes/select.js.map +0 -1
- package/dist/routes/stream.d.ts.map +0 -1
- package/dist/routes/stream.js.map +0 -1
- package/dist/routes/template.d.ts.map +0 -1
- package/dist/routes/template.js.map +0 -1
- package/dist/runtime/artifact.d.ts.map +0 -1
- package/dist/runtime/artifact.js.map +0 -1
- package/dist/runtime/index.d.ts.map +0 -1
- package/dist/runtime/index.js.map +0 -1
- package/dist/schema/index.d.ts.map +0 -1
- package/dist/schema/index.js.map +0 -1
- package/dist/schema/installation/index.d.ts.map +0 -1
- package/dist/schema/installation/index.js.map +0 -1
- package/dist/schema/installation/introspection/codec.d.ts.map +0 -1
- package/dist/schema/installation/introspection/codec.js.map +0 -1
- package/dist/schema/installation/introspection/index.d.ts.map +0 -1
- package/dist/schema/installation/introspection/index.js.map +0 -1
- package/dist/schema/installation/introspection/result.d.ts.map +0 -1
- package/dist/schema/installation/introspection/result.js.map +0 -1
|
@@ -4,19 +4,19 @@ export function credentialSources(route) {
|
|
|
4
4
|
return Array.isArray(source) ? source : [source];
|
|
5
5
|
}
|
|
6
6
|
export function firstCredentialIsAmbient(entry) {
|
|
7
|
-
return credentialSources(entry
|
|
7
|
+
return credentialSources(entry)[0].in === 'cookie';
|
|
8
8
|
}
|
|
9
9
|
export function specificHeaderWires(entry) {
|
|
10
|
-
return new Set(Object.values(entry.
|
|
10
|
+
return new Set(Object.values(entry.headers ?? {})
|
|
11
11
|
.filter((wire) => wire !== '*')
|
|
12
12
|
.map((wire) => wire.toLowerCase()));
|
|
13
13
|
}
|
|
14
14
|
export function putCredential(entry, url, headers, credential) {
|
|
15
|
-
if (entry.
|
|
15
|
+
if (entry.credential === undefined) {
|
|
16
16
|
headers.authorization = `Bearer ${credential}`;
|
|
17
17
|
return;
|
|
18
18
|
}
|
|
19
|
-
const source = credentialSources(entry
|
|
19
|
+
const source = credentialSources(entry)[0];
|
|
20
20
|
if (source.in === 'header') {
|
|
21
21
|
headers[(source.name ?? 'authorization').toLowerCase()] = credential;
|
|
22
22
|
}
|
|
@@ -36,7 +36,7 @@ export function withoutCredentialHeaders(entry, input) {
|
|
|
36
36
|
}
|
|
37
37
|
output[canonical] = value;
|
|
38
38
|
}
|
|
39
|
-
for (const source of credentialSources(entry
|
|
39
|
+
for (const source of credentialSources(entry)) {
|
|
40
40
|
if (source.in === 'header') {
|
|
41
41
|
delete output[(source.name ?? 'authorization').toLowerCase()];
|
|
42
42
|
continue;
|
|
@@ -53,7 +53,7 @@ export function withoutCredentialHeaders(entry, input) {
|
|
|
53
53
|
}
|
|
54
54
|
export function readCredential(entry, url, headers) {
|
|
55
55
|
const found = [];
|
|
56
|
-
if (entry.
|
|
56
|
+
if (entry.credential === undefined) {
|
|
57
57
|
const authorization = headers.authorization;
|
|
58
58
|
if (authorization === undefined)
|
|
59
59
|
return undefined;
|
|
@@ -62,7 +62,7 @@ export function readCredential(entry, url, headers) {
|
|
|
62
62
|
invalidRequest('Authorization must contain one Bearer credential.');
|
|
63
63
|
return matched[1];
|
|
64
64
|
}
|
|
65
|
-
for (const source of credentialSources(entry
|
|
65
|
+
for (const source of credentialSources(entry)) {
|
|
66
66
|
let value;
|
|
67
67
|
if (source.in === 'header') {
|
|
68
68
|
value = headers[(source.name ?? 'authorization').toLowerCase()];
|
|
@@ -116,4 +116,3 @@ function withoutCookie(header, name) {
|
|
|
116
116
|
.join('; ');
|
|
117
117
|
return value.length === 0 ? undefined : value;
|
|
118
118
|
}
|
|
119
|
-
//# sourceMappingURL=credential.js.map
|
package/dist/routes/decode.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
+
import type { Domain } from '@astrale-os/kernel-dsl/v1';
|
|
2
|
+
import type { PublicationRef } from '../publication/index.js';
|
|
1
3
|
import type { HttpRequest, Invocation } from './request.js';
|
|
2
|
-
import type {
|
|
3
|
-
export declare function decode(entry:
|
|
4
|
-
//# sourceMappingURL=decode.d.ts.map
|
|
4
|
+
import type { Route } from './table.js';
|
|
5
|
+
export declare function decode(entry: Route, request: HttpRequest, domain: Domain, served: PublicationRef): Invocation;
|
package/dist/routes/decode.js
CHANGED
|
@@ -1,27 +1,27 @@
|
|
|
1
1
|
import { NodePath, Path } from '@astrale-os/kernel-core/path';
|
|
2
|
-
import {
|
|
2
|
+
import { callableAddress } from '@astrale-os/kernel-dsl/v1/addressing';
|
|
3
3
|
import * as portable from '@astrale-os/kernel-dsl/value';
|
|
4
4
|
import { readCredential, specificHeaderWires, withoutCredentialHeaders } from './credential.js';
|
|
5
5
|
import { fail, invalidRequest } from './error.js';
|
|
6
6
|
import { isReservedHeader } from './mapping.js';
|
|
7
7
|
import { methodMatches } from './match.js';
|
|
8
8
|
import { bodyText, normalizeHeaders, parseJsonObject } from './request.js';
|
|
9
|
-
import { requiresReceiver } from './route.js';
|
|
10
9
|
import { decodeRouting } from './routing.js';
|
|
11
|
-
import {
|
|
10
|
+
import { decodeScalar } from './scalar.js';
|
|
11
|
+
import { requiresReceiver } from './target.js';
|
|
12
12
|
import { matchTemplate, PLACEHOLDER } from './template.js';
|
|
13
|
-
export function decode(entry, request) {
|
|
13
|
+
export function decode(entry, request, domain, served) {
|
|
14
14
|
if (!methodMatches(entry, request.method))
|
|
15
15
|
invalidRequest('HTTP method does not match the route.');
|
|
16
|
-
const matched = matchTemplate(entry.
|
|
16
|
+
const matched = matchTemplate(entry.href, request.url);
|
|
17
17
|
if (matched === undefined)
|
|
18
18
|
invalidRequest('URL does not match the route template.');
|
|
19
19
|
const values = {};
|
|
20
20
|
for (const [name, value] of Object.entries(matched)) {
|
|
21
|
-
values[name] = decodeScalar(entry, name, value);
|
|
21
|
+
values[name] = decodeScalar(entry, name, value, domain);
|
|
22
22
|
}
|
|
23
|
-
if (entry.
|
|
24
|
-
values[entry.
|
|
23
|
+
if (entry.requestMethod !== undefined) {
|
|
24
|
+
values[entry.requestMethod] = decodeScalar(entry, entry.requestMethod, request.method.toUpperCase(), domain);
|
|
25
25
|
}
|
|
26
26
|
let url;
|
|
27
27
|
try {
|
|
@@ -35,32 +35,32 @@ export function decode(entry, request) {
|
|
|
35
35
|
}
|
|
36
36
|
const headers = normalizeHeaders(request.headers);
|
|
37
37
|
const credential = readCredential(entry, url, headers);
|
|
38
|
-
const routing = decodeRouting(request,
|
|
38
|
+
const routing = decodeRouting(request, served);
|
|
39
39
|
const applicationHeaders = withoutCredentialHeaders(entry, headers);
|
|
40
|
-
for (const [name, wire] of Object.entries(entry.
|
|
40
|
+
for (const [name, wire] of Object.entries(entry.query ?? {})) {
|
|
41
41
|
const found = url.searchParams.getAll(wire);
|
|
42
42
|
if (found.length !== 1)
|
|
43
43
|
invalidRequest(`Query parameter ${wire} must occur exactly once.`);
|
|
44
|
-
values[name] = decodeScalar(entry, name, found[0]);
|
|
44
|
+
values[name] = decodeScalar(entry, name, found[0], domain);
|
|
45
45
|
}
|
|
46
|
-
for (const [name, pick] of Object.entries(entry.
|
|
46
|
+
for (const [name, pick] of Object.entries(entry.headers ?? {})) {
|
|
47
47
|
if (pick === '*') {
|
|
48
48
|
const explicit = specificHeaderWires(entry);
|
|
49
49
|
values[name] = Object.fromEntries(Object.entries(applicationHeaders).filter(([header]) => !explicit.has(header) &&
|
|
50
50
|
header !== 'accept' &&
|
|
51
51
|
!isReservedHeader(header) &&
|
|
52
|
-
(entry.
|
|
52
|
+
(entry.body === undefined || header !== 'content-type')));
|
|
53
53
|
}
|
|
54
54
|
else {
|
|
55
55
|
const value = headers[pick.toLowerCase()];
|
|
56
56
|
if (value === undefined)
|
|
57
57
|
invalidRequest(`Missing header ${pick}.`);
|
|
58
|
-
values[name] = decodeScalar(entry, name, value);
|
|
58
|
+
values[name] = decodeScalar(entry, name, value, domain);
|
|
59
59
|
}
|
|
60
60
|
}
|
|
61
|
-
if (entry.
|
|
61
|
+
if (entry.body === '*') {
|
|
62
62
|
const body = parseJsonObject(request.body);
|
|
63
|
-
const allowed = remainderFields(entry);
|
|
63
|
+
const allowed = remainderFields(entry, domain);
|
|
64
64
|
for (const name of Object.keys(body)) {
|
|
65
65
|
if (!allowed.has(name)) {
|
|
66
66
|
invalidRequest(`JSON body field ${name} is not owned by the route remainder mapping.`);
|
|
@@ -68,10 +68,10 @@ export function decode(entry, request) {
|
|
|
68
68
|
}
|
|
69
69
|
Object.assign(values, body);
|
|
70
70
|
}
|
|
71
|
-
else if (entry.
|
|
72
|
-
const needsText = Object.values(entry.
|
|
71
|
+
else if (entry.body !== undefined) {
|
|
72
|
+
const needsText = Object.values(entry.body).some((pick) => typeof pick !== 'string');
|
|
73
73
|
const body = needsText ? bodyText(request.body) : parseJsonObject(request.body);
|
|
74
|
-
for (const [name, pick] of Object.entries(entry.
|
|
74
|
+
for (const [name, pick] of Object.entries(entry.body)) {
|
|
75
75
|
if (typeof pick !== 'string') {
|
|
76
76
|
values[name] = body;
|
|
77
77
|
}
|
|
@@ -85,7 +85,10 @@ export function decode(entry, request) {
|
|
|
85
85
|
}
|
|
86
86
|
let receiver;
|
|
87
87
|
if (requiresReceiver(entry)) {
|
|
88
|
-
const
|
|
88
|
+
const receiverName = entry.target.kind === 'method' && entry.target.dispatch === 'instance'
|
|
89
|
+
? entry.target.receiver
|
|
90
|
+
: undefined;
|
|
91
|
+
const encodedReceiver = receiverName === undefined ? undefined : values[receiverName];
|
|
89
92
|
if (typeof encodedReceiver !== 'string')
|
|
90
93
|
invalidRequest('Instance route receiver is missing.');
|
|
91
94
|
try {
|
|
@@ -97,7 +100,7 @@ export function decode(entry, request) {
|
|
|
97
100
|
}
|
|
98
101
|
throw cause;
|
|
99
102
|
}
|
|
100
|
-
delete values[
|
|
103
|
+
delete values[receiverName];
|
|
101
104
|
}
|
|
102
105
|
let input;
|
|
103
106
|
try {
|
|
@@ -109,19 +112,15 @@ export function decode(entry, request) {
|
|
|
109
112
|
}
|
|
110
113
|
throw cause;
|
|
111
114
|
}
|
|
112
|
-
const
|
|
113
|
-
const target =
|
|
115
|
+
const coordinate = callableAddress(entry.callable);
|
|
116
|
+
const target = coordinate.kind === 'method'
|
|
114
117
|
? receiver === undefined
|
|
115
|
-
? Path.staticMethod(Path.project(
|
|
116
|
-
|
|
117
|
-
kind: Ref.namespace(ref),
|
|
118
|
-
name: Ref.member(ref),
|
|
119
|
-
}), Ref.child(ref)).raw
|
|
120
|
-
: Path.instanceMethod(Path.from(receiver), Ref.child(ref)).raw
|
|
118
|
+
? Path.staticMethod(Path.project(coordinate.owner), coordinate.name).raw
|
|
119
|
+
: Path.instanceMethod(Path.from(receiver), coordinate.name).raw
|
|
121
120
|
: Path.project({
|
|
122
|
-
origin:
|
|
121
|
+
origin: coordinate.origin,
|
|
123
122
|
kind: 'function',
|
|
124
|
-
name:
|
|
123
|
+
name: coordinate.name,
|
|
125
124
|
}).raw;
|
|
126
125
|
return Object.freeze({
|
|
127
126
|
call: Object.freeze({ target, input }),
|
|
@@ -129,19 +128,20 @@ export function decode(entry, request) {
|
|
|
129
128
|
...(routing === undefined ? {} : { routing }),
|
|
130
129
|
});
|
|
131
130
|
}
|
|
132
|
-
function remainderFields(entry) {
|
|
131
|
+
function remainderFields(entry, domain) {
|
|
133
132
|
const claimed = new Set([
|
|
134
|
-
...[...entry.
|
|
135
|
-
...(entry.
|
|
136
|
-
...Object.keys(entry.
|
|
137
|
-
...Object.keys(entry.
|
|
133
|
+
...[...entry.href.matchAll(PLACEHOLDER)].map((item) => item[1]),
|
|
134
|
+
...(entry.requestMethod === undefined ? [] : [entry.requestMethod]),
|
|
135
|
+
...Object.keys(entry.query ?? {}),
|
|
136
|
+
...Object.keys(entry.headers ?? {}),
|
|
138
137
|
]);
|
|
139
|
-
const
|
|
140
|
-
const
|
|
141
|
-
const
|
|
142
|
-
|
|
143
|
-
|
|
138
|
+
const fields = domain.callable(entry.callable)?.inputFields ?? [];
|
|
139
|
+
const allowed = new Set(fields.filter((name) => !claimed.has(name)));
|
|
140
|
+
const receiver = entry.target.kind === 'method' && entry.target.dispatch === 'instance'
|
|
141
|
+
? entry.target.receiver
|
|
142
|
+
: undefined;
|
|
143
|
+
if (receiver !== undefined && !claimed.has(receiver)) {
|
|
144
|
+
allowed.add(receiver);
|
|
144
145
|
}
|
|
145
146
|
return allowed;
|
|
146
147
|
}
|
|
147
|
-
//# sourceMappingURL=decode.js.map
|
package/dist/routes/encode.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
+
import type { Domain } from '@astrale-os/kernel-dsl/v1';
|
|
1
2
|
import type { Invocation, Request } from './request.js';
|
|
2
|
-
import type {
|
|
3
|
-
export declare function encode(entry:
|
|
4
|
-
//# sourceMappingURL=encode.d.ts.map
|
|
3
|
+
import type { Route } from './table.js';
|
|
4
|
+
export declare function encode(entry: Route, invocation: Invocation, domain: Domain): Request;
|
package/dist/routes/encode.js
CHANGED
|
@@ -1,50 +1,49 @@
|
|
|
1
1
|
import { Path } from '@astrale-os/kernel-core/path';
|
|
2
|
-
import {
|
|
2
|
+
import { callableAddress } from '@astrale-os/kernel-dsl/v1/addressing';
|
|
3
3
|
import * as portable from '@astrale-os/kernel-dsl/value';
|
|
4
4
|
import { firstCredentialIsAmbient, putCredential, specificHeaderWires, withoutCredentialHeaders, } from './credential.js';
|
|
5
5
|
import { fail, invalidRequest } from './error.js';
|
|
6
6
|
import { isReservedHeader } from './mapping.js';
|
|
7
|
-
import { requiresReceiver } from './route.js';
|
|
8
7
|
import { encodeStrongEtag, HTTP_ROUTE_ISSUER, HTTP_ROUTE_PUBLICATION } from './routing.js';
|
|
9
8
|
import { asObject, encodeScalar, scalar } from './scalar.js';
|
|
9
|
+
import { requiresReceiver } from './target.js';
|
|
10
10
|
import { authorityEnd, encodeTemplate, PLACEHOLDER } from './template.js';
|
|
11
|
-
export function encode(entry, invocation) {
|
|
11
|
+
export function encode(entry, invocation, domain) {
|
|
12
12
|
const input = asObject(invocation.call.input);
|
|
13
13
|
const target = Path.from(invocation.call.target);
|
|
14
14
|
const needsReceiver = requiresReceiver(entry);
|
|
15
|
-
const
|
|
16
|
-
const methodName =
|
|
15
|
+
const coordinate = callableAddress(entry.callable);
|
|
16
|
+
const methodName = coordinate.kind === 'method' ? coordinate.name : undefined;
|
|
17
17
|
const receiver = needsReceiver ? instanceSource(target, methodName) : undefined;
|
|
18
18
|
const source = receiver?.raw;
|
|
19
19
|
const expected = needsReceiver
|
|
20
20
|
? Path.instanceMethod(receiver, methodName).raw
|
|
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
|
|
21
|
+
: coordinate.kind === 'method'
|
|
22
|
+
? Path.staticMethod(Path.project(coordinate.owner), methodName).raw
|
|
27
23
|
: Path.project({
|
|
28
|
-
origin:
|
|
24
|
+
origin: coordinate.origin,
|
|
29
25
|
kind: 'function',
|
|
30
|
-
name:
|
|
26
|
+
name: coordinate.name,
|
|
31
27
|
}).raw;
|
|
32
28
|
if (target.raw !== expected)
|
|
33
29
|
invalidRequest('Invocation Path does not match the selected route.');
|
|
34
|
-
const
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
30
|
+
const receiverName = entry.target.kind === 'method' && entry.target.dispatch === 'instance'
|
|
31
|
+
? entry.target.receiver
|
|
32
|
+
: undefined;
|
|
33
|
+
const field = (name) => (name === receiverName ? source : input[name]);
|
|
34
|
+
const wireField = (name) => encodeScalar(entry, name, field(name), domain);
|
|
35
|
+
const hostEnd = authorityEnd(entry.href);
|
|
36
|
+
let url = entry.href.replaceAll(PLACEHOLDER, (_whole, name, catchall, offset) => encodeTemplate(wireField(name), catchall, offset < hostEnd));
|
|
38
37
|
const parsed = new URL(url);
|
|
39
|
-
for (const [name, wire] of Object.entries(entry.
|
|
38
|
+
for (const [name, wire] of Object.entries(entry.query ?? {})) {
|
|
40
39
|
parsed.searchParams.append(wire, wireField(name));
|
|
41
40
|
}
|
|
42
41
|
let headers = {};
|
|
43
|
-
for (const [name, pick] of Object.entries(entry.
|
|
42
|
+
for (const [name, pick] of Object.entries(entry.headers ?? {})) {
|
|
44
43
|
if (pick !== '*')
|
|
45
44
|
headers[pick] = wireField(name);
|
|
46
45
|
}
|
|
47
|
-
const headerRemainder = Object.entries(entry.
|
|
46
|
+
const headerRemainder = Object.entries(entry.headers ?? {}).find(([, pick]) => pick === '*');
|
|
48
47
|
if (headerRemainder !== undefined) {
|
|
49
48
|
const explicit = specificHeaderWires(entry);
|
|
50
49
|
for (const [header, headerValue] of Object.entries(asObject(field(headerRemainder[0])))) {
|
|
@@ -56,27 +55,27 @@ export function encode(entry, invocation) {
|
|
|
56
55
|
}
|
|
57
56
|
}
|
|
58
57
|
let body;
|
|
59
|
-
if (entry.
|
|
58
|
+
if (entry.body === '*') {
|
|
60
59
|
const claimed = new Set([
|
|
61
|
-
...[...entry.
|
|
62
|
-
...(entry.
|
|
63
|
-
...Object.keys(entry.
|
|
64
|
-
...Object.keys(entry.
|
|
60
|
+
...[...entry.href.matchAll(PLACEHOLDER)].map((item) => item[1]),
|
|
61
|
+
...(entry.requestMethod === undefined ? [] : [entry.requestMethod]),
|
|
62
|
+
...Object.keys(entry.query ?? {}),
|
|
63
|
+
...Object.keys(entry.headers ?? {}),
|
|
65
64
|
]);
|
|
66
65
|
const output = {};
|
|
67
66
|
for (const [name, value] of Object.entries(input)) {
|
|
68
67
|
if (!claimed.has(name))
|
|
69
68
|
output[name] = value;
|
|
70
69
|
}
|
|
71
|
-
if (
|
|
72
|
-
output[
|
|
70
|
+
if (receiverName !== undefined && !claimed.has(receiverName)) {
|
|
71
|
+
output[receiverName] = source;
|
|
73
72
|
}
|
|
74
73
|
body = portable.json.serialize(output);
|
|
75
74
|
headers['content-type'] = 'application/json';
|
|
76
75
|
}
|
|
77
|
-
else if (entry.
|
|
76
|
+
else if (entry.body !== undefined) {
|
|
78
77
|
const output = {};
|
|
79
|
-
for (const [name, pick] of Object.entries(entry.
|
|
78
|
+
for (const [name, pick] of Object.entries(entry.body)) {
|
|
80
79
|
if (typeof pick !== 'string')
|
|
81
80
|
body = scalar(field(name));
|
|
82
81
|
else
|
|
@@ -108,16 +107,16 @@ export function encode(entry, invocation) {
|
|
|
108
107
|
headers[HTTP_ROUTE_ISSUER] = invocation.routing.issuer;
|
|
109
108
|
}
|
|
110
109
|
url = parsed.toString();
|
|
111
|
-
const mappedMethod = entry.
|
|
110
|
+
const mappedMethod = entry.requestMethod === undefined
|
|
112
111
|
? undefined
|
|
113
|
-
: encodeScalar(entry, entry.
|
|
112
|
+
: encodeScalar(entry, entry.requestMethod, input[entry.requestMethod], domain).toUpperCase();
|
|
114
113
|
const requestedMethod = invocation.method?.toUpperCase();
|
|
115
114
|
if (mappedMethod !== undefined &&
|
|
116
115
|
requestedMethod !== undefined &&
|
|
117
116
|
mappedMethod !== requestedMethod) {
|
|
118
117
|
invalidRequest('Native route request method differs from its mapped input field.');
|
|
119
118
|
}
|
|
120
|
-
const methodCandidate = entry.
|
|
119
|
+
const methodCandidate = entry.method === '*' ? (requestedMethod ?? mappedMethod) : entry.method;
|
|
121
120
|
if (methodCandidate === undefined) {
|
|
122
121
|
fail('NATIVE_ROUTE_REQUEST_INVALID', 'Wildcard route invocation requires an HTTP method.');
|
|
123
122
|
}
|
|
@@ -144,4 +143,3 @@ function instanceSource(target, name) {
|
|
|
144
143
|
}
|
|
145
144
|
return Path.fromAST({ anchor: target.ast.anchor, steps: steps.slice(0, -1) });
|
|
146
145
|
}
|
|
147
|
-
//# sourceMappingURL=encode.js.map
|
package/dist/routes/error.d.ts
CHANGED
package/dist/routes/error.js
CHANGED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { Domain } from '@astrale-os/kernel-dsl/v1';
|
|
2
|
+
import type { Publication } from '../publication/publication.js';
|
|
3
|
+
import type { Table } from './table.js';
|
|
4
|
+
/** Verify that an admitted Table carries the exact published wire and Domain meaning. */
|
|
5
|
+
export declare function verifyTable(table: Table, deployed: Publication, domain: Pick<Domain, 'origin' | 'revision' | 'callable'>): Table;
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { json } from '@astrale-os/kernel-dsl/value';
|
|
2
|
+
import { compareReferences, reference } from '../publication/reference.js';
|
|
3
|
+
import { fail } from './error.js';
|
|
4
|
+
/** Verify that an admitted Table carries the exact published wire and Domain meaning. */
|
|
5
|
+
export function verifyTable(table, deployed, domain) {
|
|
6
|
+
if (compareReferences(table.publication, reference(deployed)) !== 'exact' ||
|
|
7
|
+
domain.origin !== deployed.origin ||
|
|
8
|
+
domain.revision !== deployed.schema.revision ||
|
|
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 = domain.callable(entry.callable);
|
|
15
|
+
const targetMatches = meaning !== undefined &&
|
|
16
|
+
((entry.target.kind === 'function' && !isMethod(meaning)) ||
|
|
17
|
+
(entry.target.kind === 'method' &&
|
|
18
|
+
isMethod(meaning) &&
|
|
19
|
+
entry.target.dispatch === (meaning.static ? 'static' : 'instance')));
|
|
20
|
+
if (!targetMatches || meaning.auth !== entry.auth || meaning.output.mode !== entry.output) {
|
|
21
|
+
fail('NATIVE_ROUTE_BINDING_INVALID', `Route ${entry.name} differs from Domain meaning.`);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
return table;
|
|
25
|
+
}
|
|
26
|
+
function isMethod(meaning) {
|
|
27
|
+
return 'owner' in meaning;
|
|
28
|
+
}
|
|
29
|
+
function wireRoute(entry) {
|
|
30
|
+
const { target, auth: _auth, output: _output, default: isDefault, ...wire } = entry;
|
|
31
|
+
return {
|
|
32
|
+
...wire,
|
|
33
|
+
...(isDefault ? { default: true } : {}),
|
|
34
|
+
...(target.kind === 'method' && target.dispatch === 'instance'
|
|
35
|
+
? { receiver: target.receiver }
|
|
36
|
+
: {}),
|
|
37
|
+
};
|
|
38
|
+
}
|
package/dist/routes/index.d.ts
CHANGED
|
@@ -1,13 +1,19 @@
|
|
|
1
|
-
export {
|
|
1
|
+
export { bind } from './binding.js';
|
|
2
|
+
export { acceptTable } from './admission.js';
|
|
3
|
+
export { compile, type CompileInput } from './compiler.js';
|
|
2
4
|
export { decode } from './decode.js';
|
|
3
5
|
export { decodeErrorResponse, type ErrorResponse } from './error-response.js';
|
|
4
6
|
export { encode } from './encode.js';
|
|
7
|
+
export { verifyTable } from './evidence.js';
|
|
5
8
|
export { type ErrorCode, RouteError } from './error.js';
|
|
6
9
|
export { match } from './match.js';
|
|
7
10
|
export { type HttpRequest, type Invocation, type Request } from './request.js';
|
|
8
|
-
export {
|
|
11
|
+
export type { Plan, PlanEntry } from './plan.js';
|
|
12
|
+
export type { Route, Table } from './table.js';
|
|
13
|
+
export type { RouteTarget } from './target.js';
|
|
14
|
+
export { place } from './placement.js';
|
|
15
|
+
export { decodeReleaseUnavailable, HTTP_ROUTE_RELEASE_UNAVAILABLE, HTTP_ROUTE_RELEASE_UNAVAILABLE_STATUS, releaseUnavailableHeaders, type ReleaseUnavailable, } from './release-unavailable.js';
|
|
9
16
|
export { decodeRouting, decodeMiss, decodeStale, HTTP_ROUTE_PUBLICATION, HTTP_ROUTE_ISSUER, HTTP_ROUTE_MISS, HTTP_ROUTE_MISS_STATUS, HTTP_ROUTE_STALE, HTTP_ROUTE_STALE_STATUS, missHeaders, staleHeaders, type MissControl, type StaleControl, } from './routing.js';
|
|
10
17
|
export { select } from './select.js';
|
|
11
18
|
export { decodeStreamFrame, encodeStreamFrame, STREAM_MEDIA_TYPE, type StreamFrame, } from './stream.js';
|
|
12
19
|
export { templatesOverlap } from './template.js';
|
|
13
|
-
//# sourceMappingURL=index.d.ts.map
|
package/dist/routes/index.js
CHANGED
|
@@ -1,13 +1,16 @@
|
|
|
1
|
-
export {
|
|
1
|
+
export { bind } from './binding.js';
|
|
2
|
+
export { acceptTable } from './admission.js';
|
|
3
|
+
export { compile } from './compiler.js';
|
|
2
4
|
export { decode } from './decode.js';
|
|
3
5
|
export { decodeErrorResponse } from './error-response.js';
|
|
4
6
|
export { encode } from './encode.js';
|
|
7
|
+
export { verifyTable } from './evidence.js';
|
|
5
8
|
export { RouteError } from './error.js';
|
|
6
9
|
export { match } from './match.js';
|
|
7
10
|
export {} from './request.js';
|
|
8
|
-
export {} from './
|
|
11
|
+
export { place } from './placement.js';
|
|
12
|
+
export { decodeReleaseUnavailable, HTTP_ROUTE_RELEASE_UNAVAILABLE, HTTP_ROUTE_RELEASE_UNAVAILABLE_STATUS, releaseUnavailableHeaders, } from './release-unavailable.js';
|
|
9
13
|
export { decodeRouting, decodeMiss, decodeStale, HTTP_ROUTE_PUBLICATION, HTTP_ROUTE_ISSUER, HTTP_ROUTE_MISS, HTTP_ROUTE_MISS_STATUS, HTTP_ROUTE_STALE, HTTP_ROUTE_STALE_STATUS, missHeaders, staleHeaders, } from './routing.js';
|
|
10
14
|
export { select } from './select.js';
|
|
11
15
|
export { decodeStreamFrame, encodeStreamFrame, STREAM_MEDIA_TYPE, } from './stream.js';
|
|
12
16
|
export { templatesOverlap } from './template.js';
|
|
13
|
-
//# sourceMappingURL=index.js.map
|
package/dist/routes/mapping.d.ts
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import type { HttpRoute } from '../publication/index.js';
|
|
2
|
-
export declare function validateMapping(route: HttpRoute,
|
|
2
|
+
export declare function validateMapping(route: HttpRoute, fields: readonly string[] | undefined, instanceMethod: boolean): void;
|
|
3
3
|
export declare function validateWireMapping(route: HttpRoute): void;
|
|
4
4
|
export declare function validateCredentialMapping(route: HttpRoute): void;
|
|
5
5
|
export declare function isReservedHeader(input: string): boolean;
|
|
6
|
-
//# sourceMappingURL=mapping.d.ts.map
|
package/dist/routes/mapping.js
CHANGED
|
@@ -1,17 +1,13 @@
|
|
|
1
1
|
import { HTTP_IDEMPOTENCY_KEY } from '../invocation/index.js';
|
|
2
2
|
import { credentialSources } from './credential.js';
|
|
3
3
|
import { fail } from './error.js';
|
|
4
|
+
import { HTTP_ROUTE_RELEASE_UNAVAILABLE } from './release-unavailable.js';
|
|
4
5
|
import { HTTP_ROUTE_ISSUER, HTTP_ROUTE_MISS, HTTP_ROUTE_PUBLICATION, HTTP_ROUTE_STALE, } from './routing.js';
|
|
5
6
|
import { PLACEHOLDER } from './template.js';
|
|
6
|
-
export function validateMapping(route,
|
|
7
|
-
|
|
8
|
-
const properties = asRecord(contract?.properties);
|
|
9
|
-
if (contract?.type !== 'object' ||
|
|
10
|
-
properties === undefined ||
|
|
11
|
-
contract.additionalProperties !== false) {
|
|
7
|
+
export function validateMapping(route, fields, instanceMethod) {
|
|
8
|
+
if (fields === undefined) {
|
|
12
9
|
fail('NATIVE_ROUTE_DECLARATION_INVALID', `Route ${route.name} requires a closed object input schema.`);
|
|
13
10
|
}
|
|
14
|
-
const fields = Object.keys(properties);
|
|
15
11
|
if (route.receiver !== undefined && fields.includes(route.receiver)) {
|
|
16
12
|
fail('NATIVE_ROUTE_MAPPING_AMBIGUOUS', `Route ${route.name} receiver cannot also be a callable input field.`);
|
|
17
13
|
}
|
|
@@ -117,6 +113,7 @@ const RESERVED_HEADERS = new Set([
|
|
|
117
113
|
HTTP_ROUTE_ISSUER,
|
|
118
114
|
HTTP_ROUTE_MISS,
|
|
119
115
|
HTTP_ROUTE_PUBLICATION,
|
|
116
|
+
HTTP_ROUTE_RELEASE_UNAVAILABLE,
|
|
120
117
|
HTTP_ROUTE_STALE,
|
|
121
118
|
]);
|
|
122
119
|
export function isReservedHeader(input) {
|
|
@@ -127,9 +124,3 @@ function uniqueWires(route, kind, wires) {
|
|
|
127
124
|
fail('NATIVE_ROUTE_MAPPING_AMBIGUOUS', `Route ${route.name} maps one ${kind} wire source more than once.`);
|
|
128
125
|
}
|
|
129
126
|
}
|
|
130
|
-
function asRecord(value) {
|
|
131
|
-
return value !== null && typeof value === 'object' && !Array.isArray(value)
|
|
132
|
-
? value
|
|
133
|
-
: undefined;
|
|
134
|
-
}
|
|
135
|
-
//# sourceMappingURL=mapping.js.map
|
package/dist/routes/match.d.ts
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import type { HttpRequest } from './request.js';
|
|
2
|
-
import type {
|
|
3
|
-
export declare function match(
|
|
4
|
-
export declare function methodMatches(entry:
|
|
5
|
-
//# sourceMappingURL=match.d.ts.map
|
|
2
|
+
import type { Route, Table } from './table.js';
|
|
3
|
+
export declare function match(table: Table, request: Pick<HttpRequest, 'url' | 'method'>): Route | undefined;
|
|
4
|
+
export declare function methodMatches(entry: Route, method: string): boolean;
|
package/dist/routes/match.js
CHANGED
|
@@ -1,9 +1,7 @@
|
|
|
1
1
|
import { matchTemplate } from './template.js';
|
|
2
|
-
export function match(
|
|
3
|
-
return entries.find((entry) => methodMatches(entry, request.method) &&
|
|
4
|
-
matchTemplate(entry.route.href, request.url) !== undefined);
|
|
2
|
+
export function match(table, request) {
|
|
3
|
+
return table.entries.find((entry) => methodMatches(entry, request.method) && matchTemplate(entry.href, request.url) !== undefined);
|
|
5
4
|
}
|
|
6
5
|
export function methodMatches(entry, method) {
|
|
7
|
-
return entry.
|
|
6
|
+
return entry.method === '*' || entry.method === method.toUpperCase();
|
|
8
7
|
}
|
|
9
|
-
//# sourceMappingURL=match.js.map
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type * as publication from '../publication/index.js';
|
|
2
|
+
import type { Plan } from './plan.js';
|
|
3
|
+
/** Resolve a provider-neutral Plan beneath one exact serving issuer. */
|
|
4
|
+
export declare function place(plan: Plan, issuer: string): readonly publication.HttpRoute[];
|
|
5
|
+
export declare function placePath(path: string, issuer: string): string;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/** Resolve a provider-neutral Plan beneath one exact serving issuer. */
|
|
2
|
+
export function place(plan, issuer) {
|
|
3
|
+
return Object.freeze(plan.entries.map((entry) => {
|
|
4
|
+
const { path, target, auth: _auth, output: _output, default: isDefault, ...wire } = entry;
|
|
5
|
+
return Object.freeze({
|
|
6
|
+
...wire,
|
|
7
|
+
href: placePath(path, issuer),
|
|
8
|
+
...(isDefault ? { default: true } : {}),
|
|
9
|
+
...(target.kind === 'method' && target.dispatch === 'instance'
|
|
10
|
+
? { receiver: target.receiver }
|
|
11
|
+
: {}),
|
|
12
|
+
});
|
|
13
|
+
}));
|
|
14
|
+
}
|
|
15
|
+
export function placePath(path, issuer) {
|
|
16
|
+
const base = new URL(issuer);
|
|
17
|
+
return `${base.origin}${path}`;
|
|
18
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { FunctionAuth, Key, Revision } from '@astrale-os/kernel-dsl/v1';
|
|
2
|
+
import type { OutputMode } from '@astrale-os/kernel-dsl/v1/language';
|
|
3
|
+
import type { CredentialSource, HttpMethod, RouteBody, RouteHeaders } from '../publication/index.js';
|
|
4
|
+
import type { RouteTarget } from './target.js';
|
|
5
|
+
export interface PlanEntry {
|
|
6
|
+
readonly name: string;
|
|
7
|
+
readonly callable: Key.Callable;
|
|
8
|
+
readonly target: RouteTarget;
|
|
9
|
+
readonly auth: FunctionAuth;
|
|
10
|
+
readonly output: OutputMode;
|
|
11
|
+
readonly path: string;
|
|
12
|
+
readonly method: HttpMethod;
|
|
13
|
+
readonly requestMethod?: string;
|
|
14
|
+
readonly default: boolean;
|
|
15
|
+
readonly query?: Readonly<Record<string, string>>;
|
|
16
|
+
readonly headers?: RouteHeaders;
|
|
17
|
+
readonly body?: RouteBody;
|
|
18
|
+
readonly credential?: CredentialSource;
|
|
19
|
+
}
|
|
20
|
+
export interface Plan {
|
|
21
|
+
readonly origin: Key.Origin;
|
|
22
|
+
readonly revision: Revision;
|
|
23
|
+
readonly entries: readonly PlanEntry[];
|
|
24
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { HttpRequest } from './request.js';
|
|
2
|
+
export interface ReleaseUnavailable {
|
|
3
|
+
readonly kind: 'release-unavailable';
|
|
4
|
+
}
|
|
5
|
+
export declare const HTTP_ROUTE_RELEASE_UNAVAILABLE: 'x-astrale-release-unavailable';
|
|
6
|
+
export declare const HTTP_ROUTE_RELEASE_UNAVAILABLE_STATUS: 410;
|
|
7
|
+
export declare function releaseUnavailableHeaders(): Readonly<Record<string, string>>;
|
|
8
|
+
export declare function decodeReleaseUnavailable(status: number, headers: HttpRequest['headers']): ReleaseUnavailable | undefined;
|