@astrale-os/kernel-protocol 0.5.0-beta.2
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/LICENSE +202 -0
- package/dist/artifact/index.d.ts +2 -0
- package/dist/artifact/index.d.ts.map +1 -0
- package/dist/artifact/index.js +2 -0
- package/dist/artifact/index.js.map +1 -0
- package/dist/artifact/ref.d.ts +11 -0
- package/dist/artifact/ref.d.ts.map +1 -0
- package/dist/artifact/ref.js +71 -0
- package/dist/artifact/ref.js.map +1 -0
- package/dist/codecs/codec.d.ts +14 -0
- package/dist/codecs/codec.d.ts.map +1 -0
- package/dist/codecs/codec.js +7 -0
- package/dist/codecs/codec.js.map +1 -0
- package/dist/codecs/index.d.ts +5 -0
- package/dist/codecs/index.d.ts.map +1 -0
- package/dist/codecs/index.js +5 -0
- package/dist/codecs/index.js.map +1 -0
- package/dist/codecs/json.d.ts +3 -0
- package/dist/codecs/json.d.ts.map +1 -0
- package/dist/codecs/json.js +21 -0
- package/dist/codecs/json.js.map +1 -0
- package/dist/codecs/media-types.d.ts +3 -0
- package/dist/codecs/media-types.d.ts.map +1 -0
- package/dist/codecs/media-types.js +3 -0
- package/dist/codecs/media-types.js.map +1 -0
- package/dist/codecs/msgpack.d.ts +5 -0
- package/dist/codecs/msgpack.d.ts.map +1 -0
- package/dist/codecs/msgpack.js +51 -0
- package/dist/codecs/msgpack.js.map +1 -0
- package/dist/errors/codes.d.ts +24 -0
- package/dist/errors/codes.d.ts.map +1 -0
- package/dist/errors/codes.js +23 -0
- package/dist/errors/codes.js.map +1 -0
- package/dist/errors/http-status.d.ts +3 -0
- package/dist/errors/http-status.d.ts.map +1 -0
- package/dist/errors/http-status.js +26 -0
- package/dist/errors/http-status.js.map +1 -0
- package/dist/errors/index.d.ts +6 -0
- package/dist/errors/index.d.ts.map +1 -0
- package/dist/errors/index.js +6 -0
- package/dist/errors/index.js.map +1 -0
- package/dist/errors/payload.d.ts +9 -0
- package/dist/errors/payload.d.ts.map +1 -0
- package/dist/errors/payload.js +37 -0
- package/dist/errors/payload.js.map +1 -0
- package/dist/errors/protocol-error.d.ts +7 -0
- package/dist/errors/protocol-error.d.ts.map +1 -0
- package/dist/errors/protocol-error.js +10 -0
- package/dist/errors/protocol-error.js.map +1 -0
- package/dist/errors/reason.d.ts +8 -0
- package/dist/errors/reason.d.ts.map +1 -0
- package/dist/errors/reason.js +44 -0
- package/dist/errors/reason.js.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +9 -0
- package/dist/index.js.map +1 -0
- package/dist/invocation/admission.d.ts +22 -0
- package/dist/invocation/admission.d.ts.map +1 -0
- package/dist/invocation/admission.js +169 -0
- package/dist/invocation/admission.js.map +1 -0
- package/dist/invocation/binary.d.ts +10 -0
- package/dist/invocation/binary.d.ts.map +1 -0
- package/dist/invocation/binary.js +24 -0
- package/dist/invocation/binary.js.map +1 -0
- package/dist/invocation/binding-codecs.d.ts +9 -0
- package/dist/invocation/binding-codecs.d.ts.map +1 -0
- package/dist/invocation/binding-codecs.js +28 -0
- package/dist/invocation/binding-codecs.js.map +1 -0
- package/dist/invocation/cancellation.d.ts +9 -0
- package/dist/invocation/cancellation.d.ts.map +1 -0
- package/dist/invocation/cancellation.js +17 -0
- package/dist/invocation/cancellation.js.map +1 -0
- package/dist/invocation/correlation.d.ts +3 -0
- package/dist/invocation/correlation.d.ts.map +1 -0
- package/dist/invocation/correlation.js +8 -0
- package/dist/invocation/correlation.js.map +1 -0
- package/dist/invocation/delegate.d.ts +25 -0
- package/dist/invocation/delegate.d.ts.map +1 -0
- package/dist/invocation/delegate.js +44 -0
- package/dist/invocation/delegate.js.map +1 -0
- package/dist/invocation/http/binary.d.ts +6 -0
- package/dist/invocation/http/binary.d.ts.map +1 -0
- package/dist/invocation/http/binary.js +89 -0
- package/dist/invocation/http/binary.js.map +1 -0
- package/dist/invocation/http/index.d.ts +5 -0
- package/dist/invocation/http/index.d.ts.map +1 -0
- package/dist/invocation/http/index.js +5 -0
- package/dist/invocation/http/index.js.map +1 -0
- package/dist/invocation/http/negotiation.d.ts +4 -0
- package/dist/invocation/http/negotiation.d.ts.map +1 -0
- package/dist/invocation/http/negotiation.js +208 -0
- package/dist/invocation/http/negotiation.js.map +1 -0
- package/dist/invocation/http/stream.d.ts +6 -0
- package/dist/invocation/http/stream.d.ts.map +1 -0
- package/dist/invocation/http/stream.js +16 -0
- package/dist/invocation/http/stream.js.map +1 -0
- package/dist/invocation/http/trace.d.ts +7 -0
- package/dist/invocation/http/trace.d.ts.map +1 -0
- package/dist/invocation/http/trace.js +25 -0
- package/dist/invocation/http/trace.js.map +1 -0
- package/dist/invocation/idempotency.d.ts +11 -0
- package/dist/invocation/idempotency.d.ts.map +1 -0
- package/dist/invocation/idempotency.js +14 -0
- package/dist/invocation/idempotency.js.map +1 -0
- package/dist/invocation/index.d.ts +20 -0
- package/dist/invocation/index.d.ts.map +1 -0
- package/dist/invocation/index.js +20 -0
- package/dist/invocation/index.js.map +1 -0
- package/dist/invocation/miss.d.ts +8 -0
- package/dist/invocation/miss.d.ts.map +1 -0
- package/dist/invocation/miss.js +14 -0
- package/dist/invocation/miss.js.map +1 -0
- package/dist/invocation/redirect.d.ts +33 -0
- package/dist/invocation/redirect.d.ts.map +1 -0
- package/dist/invocation/redirect.js +68 -0
- package/dist/invocation/redirect.js.map +1 -0
- package/dist/invocation/request.d.ts +22 -0
- package/dist/invocation/request.d.ts.map +1 -0
- package/dist/invocation/request.js +55 -0
- package/dist/invocation/request.js.map +1 -0
- package/dist/invocation/response.d.ts +17 -0
- package/dist/invocation/response.d.ts.map +1 -0
- package/dist/invocation/response.js +34 -0
- package/dist/invocation/response.js.map +1 -0
- package/dist/invocation/routing.d.ts +14 -0
- package/dist/invocation/routing.d.ts.map +1 -0
- package/dist/invocation/routing.js +34 -0
- package/dist/invocation/routing.js.map +1 -0
- package/dist/invocation/schema.d.ts +10 -0
- package/dist/invocation/schema.d.ts.map +1 -0
- package/dist/invocation/schema.js +20 -0
- package/dist/invocation/schema.js.map +1 -0
- package/dist/invocation/service-reason.d.ts +41 -0
- package/dist/invocation/service-reason.d.ts.map +1 -0
- package/dist/invocation/service-reason.js +74 -0
- package/dist/invocation/service-reason.js.map +1 -0
- package/dist/invocation/stale-route.d.ts +11 -0
- package/dist/invocation/stale-route.d.ts.map +1 -0
- package/dist/invocation/stale-route.js +19 -0
- package/dist/invocation/stale-route.js.map +1 -0
- package/dist/invocation/stream.d.ts +26 -0
- package/dist/invocation/stream.d.ts.map +1 -0
- package/dist/invocation/stream.js +41 -0
- package/dist/invocation/stream.js.map +1 -0
- package/dist/invocation/target.d.ts +9 -0
- package/dist/invocation/target.d.ts.map +1 -0
- package/dist/invocation/target.js +12 -0
- package/dist/invocation/target.js.map +1 -0
- package/dist/invocation/trace.d.ts +10 -0
- package/dist/invocation/trace.d.ts.map +1 -0
- package/dist/invocation/trace.js +87 -0
- package/dist/invocation/trace.js.map +1 -0
- package/dist/invocation/version.d.ts +3 -0
- package/dist/invocation/version.d.ts.map +1 -0
- package/dist/invocation/version.js +2 -0
- package/dist/invocation/version.js.map +1 -0
- package/dist/invocation/websocket/binary.d.ts +4 -0
- package/dist/invocation/websocket/binary.d.ts.map +1 -0
- package/dist/invocation/websocket/binary.js +71 -0
- package/dist/invocation/websocket/binary.js.map +1 -0
- package/dist/invocation/websocket/index.d.ts +3 -0
- package/dist/invocation/websocket/index.d.ts.map +1 -0
- package/dist/invocation/websocket/index.js +3 -0
- package/dist/invocation/websocket/index.js.map +1 -0
- package/dist/invocation/websocket/subprotocol.d.ts +11 -0
- package/dist/invocation/websocket/subprotocol.d.ts.map +1 -0
- package/dist/invocation/websocket/subprotocol.js +30 -0
- package/dist/invocation/websocket/subprotocol.js.map +1 -0
- package/dist/issuer/configuration.d.ts +15 -0
- package/dist/issuer/configuration.d.ts.map +1 -0
- package/dist/issuer/configuration.js +87 -0
- package/dist/issuer/configuration.js.map +1 -0
- package/dist/issuer/error.d.ts +8 -0
- package/dist/issuer/error.d.ts.map +1 -0
- package/dist/issuer/error.js +12 -0
- package/dist/issuer/error.js.map +1 -0
- package/dist/issuer/exchange.d.ts +26 -0
- package/dist/issuer/exchange.d.ts.map +1 -0
- package/dist/issuer/exchange.js +130 -0
- package/dist/issuer/exchange.js.map +1 -0
- package/dist/issuer/hosted.d.ts +3 -0
- package/dist/issuer/hosted.d.ts.map +1 -0
- package/dist/issuer/hosted.js +8 -0
- package/dist/issuer/hosted.js.map +1 -0
- package/dist/issuer/index.d.ts +7 -0
- package/dist/issuer/index.d.ts.map +1 -0
- package/dist/issuer/index.js +7 -0
- package/dist/issuer/index.js.map +1 -0
- package/dist/issuer/key-set.d.ts +7 -0
- package/dist/issuer/key-set.d.ts.map +1 -0
- package/dist/issuer/key-set.js +48 -0
- package/dist/issuer/key-set.js.map +1 -0
- package/dist/issuer/paths.d.ts +7 -0
- package/dist/issuer/paths.d.ts.map +1 -0
- package/dist/issuer/paths.js +11 -0
- package/dist/issuer/paths.js.map +1 -0
- package/dist/issuer/url.d.ts +3 -0
- package/dist/issuer/url.d.ts.map +1 -0
- package/dist/issuer/url.js +34 -0
- package/dist/issuer/url.js.map +1 -0
- package/dist/publication/bindings/callable.d.ts +9 -0
- package/dist/publication/bindings/callable.d.ts.map +1 -0
- package/dist/publication/bindings/callable.js +32 -0
- package/dist/publication/bindings/callable.js.map +1 -0
- package/dist/publication/bindings/index.d.ts +4 -0
- package/dist/publication/bindings/index.d.ts.map +1 -0
- package/dist/publication/bindings/index.js +4 -0
- package/dist/publication/bindings/index.js.map +1 -0
- package/dist/publication/bindings/invocation.d.ts +6 -0
- package/dist/publication/bindings/invocation.d.ts.map +1 -0
- package/dist/publication/bindings/invocation.js +14 -0
- package/dist/publication/bindings/invocation.js.map +1 -0
- package/dist/publication/bindings/view.d.ts +8 -0
- package/dist/publication/bindings/view.d.ts.map +1 -0
- package/dist/publication/bindings/view.js +29 -0
- package/dist/publication/bindings/view.js.map +1 -0
- package/dist/publication/bundle.d.ts +16 -0
- package/dist/publication/bundle.d.ts.map +1 -0
- package/dist/publication/bundle.js +65 -0
- package/dist/publication/bundle.js.map +1 -0
- package/dist/publication/content.d.ts +11 -0
- package/dist/publication/content.d.ts.map +1 -0
- package/dist/publication/content.js +56 -0
- package/dist/publication/content.js.map +1 -0
- package/dist/publication/delivery/attestation.d.ts +7 -0
- package/dist/publication/delivery/attestation.d.ts.map +1 -0
- package/dist/publication/delivery/attestation.js +11 -0
- package/dist/publication/delivery/attestation.js.map +1 -0
- package/dist/publication/delivery/claims.d.ts +16 -0
- package/dist/publication/delivery/claims.d.ts.map +1 -0
- package/dist/publication/delivery/claims.js +62 -0
- package/dist/publication/delivery/claims.js.map +1 -0
- package/dist/publication/delivery/delivery.d.ts +10 -0
- package/dist/publication/delivery/delivery.d.ts.map +1 -0
- package/dist/publication/delivery/delivery.js +30 -0
- package/dist/publication/delivery/delivery.js.map +1 -0
- package/dist/publication/delivery/error.d.ts +8 -0
- package/dist/publication/delivery/error.d.ts.map +1 -0
- package/dist/publication/delivery/error.js +12 -0
- package/dist/publication/delivery/error.js.map +1 -0
- package/dist/publication/delivery/index.d.ts +7 -0
- package/dist/publication/delivery/index.d.ts.map +1 -0
- package/dist/publication/delivery/index.js +7 -0
- package/dist/publication/delivery/index.js.map +1 -0
- package/dist/publication/delivery/limits.d.ts +5 -0
- package/dist/publication/delivery/limits.d.ts.map +1 -0
- package/dist/publication/delivery/limits.js +5 -0
- package/dist/publication/delivery/limits.js.map +1 -0
- package/dist/publication/delivery/request.d.ts +16 -0
- package/dist/publication/delivery/request.d.ts.map +1 -0
- package/dist/publication/delivery/request.js +52 -0
- package/dist/publication/delivery/request.js.map +1 -0
- package/dist/publication/delivery-endpoint.d.ts +12 -0
- package/dist/publication/delivery-endpoint.d.ts.map +1 -0
- package/dist/publication/delivery-endpoint.js +23 -0
- package/dist/publication/delivery-endpoint.js.map +1 -0
- package/dist/publication/error.d.ts +8 -0
- package/dist/publication/error.d.ts.map +1 -0
- package/dist/publication/error.js +12 -0
- package/dist/publication/error.js.map +1 -0
- package/dist/publication/etag.d.ts +7 -0
- package/dist/publication/etag.d.ts.map +1 -0
- package/dist/publication/etag.js +80 -0
- package/dist/publication/etag.js.map +1 -0
- package/dist/publication/index.d.ts +14 -0
- package/dist/publication/index.d.ts.map +1 -0
- package/dist/publication/index.js +8 -0
- package/dist/publication/index.js.map +1 -0
- package/dist/publication/manifest.d.ts +7 -0
- package/dist/publication/manifest.d.ts.map +1 -0
- package/dist/publication/manifest.js +26 -0
- package/dist/publication/manifest.js.map +1 -0
- package/dist/publication/publication.d.ts +39 -0
- package/dist/publication/publication.d.ts.map +1 -0
- package/dist/publication/publication.js +190 -0
- package/dist/publication/publication.js.map +1 -0
- package/dist/publication/reference.d.ts +17 -0
- package/dist/publication/reference.d.ts.map +1 -0
- package/dist/publication/reference.js +68 -0
- package/dist/publication/reference.js.map +1 -0
- package/dist/publication/requirements.d.ts +26 -0
- package/dist/publication/requirements.d.ts.map +1 -0
- package/dist/publication/requirements.js +180 -0
- package/dist/publication/requirements.js.map +1 -0
- package/dist/publication/route.d.ts +33 -0
- package/dist/publication/route.d.ts.map +1 -0
- package/dist/publication/route.js +132 -0
- package/dist/publication/route.js.map +1 -0
- package/dist/publication/schema.d.ts +8 -0
- package/dist/publication/schema.d.ts.map +1 -0
- package/dist/publication/schema.js +16 -0
- package/dist/publication/schema.js.map +1 -0
- package/dist/routes/compile.d.ts +5 -0
- package/dist/routes/compile.d.ts.map +1 -0
- package/dist/routes/compile.js +69 -0
- package/dist/routes/compile.js.map +1 -0
- package/dist/routes/credential.d.ts +9 -0
- package/dist/routes/credential.d.ts.map +1 -0
- package/dist/routes/credential.js +119 -0
- package/dist/routes/credential.js.map +1 -0
- package/dist/routes/decode.d.ts +4 -0
- package/dist/routes/decode.d.ts.map +1 -0
- package/dist/routes/decode.js +147 -0
- package/dist/routes/decode.js.map +1 -0
- package/dist/routes/encode.d.ts +4 -0
- package/dist/routes/encode.d.ts.map +1 -0
- package/dist/routes/encode.js +147 -0
- package/dist/routes/encode.js.map +1 -0
- package/dist/routes/error-response.d.ts +6 -0
- package/dist/routes/error-response.d.ts.map +1 -0
- package/dist/routes/error-response.js +32 -0
- package/dist/routes/error-response.js.map +1 -0
- package/dist/routes/error.d.ts +9 -0
- package/dist/routes/error.d.ts.map +1 -0
- package/dist/routes/error.js +15 -0
- package/dist/routes/error.js.map +1 -0
- package/dist/routes/index.d.ts +13 -0
- package/dist/routes/index.d.ts.map +1 -0
- package/dist/routes/index.js +13 -0
- package/dist/routes/index.js.map +1 -0
- package/dist/routes/mapping.d.ts +6 -0
- package/dist/routes/mapping.d.ts.map +1 -0
- package/dist/routes/mapping.js +135 -0
- package/dist/routes/mapping.js.map +1 -0
- package/dist/routes/match.d.ts +5 -0
- package/dist/routes/match.d.ts.map +1 -0
- package/dist/routes/match.js +9 -0
- package/dist/routes/match.js.map +1 -0
- package/dist/routes/request.d.ts +27 -0
- package/dist/routes/request.d.ts.map +1 -0
- package/dist/routes/request.js +52 -0
- package/dist/routes/request.js.map +1 -0
- package/dist/routes/reservation.d.ts +4 -0
- package/dist/routes/reservation.d.ts.map +1 -0
- package/dist/routes/reservation.js +34 -0
- package/dist/routes/reservation.js.map +1 -0
- package/dist/routes/route.d.ts +13 -0
- package/dist/routes/route.d.ts.map +1 -0
- package/dist/routes/route.js +6 -0
- package/dist/routes/route.js.map +1 -0
- package/dist/routes/routing.d.ts +23 -0
- package/dist/routes/routing.d.ts.map +1 -0
- package/dist/routes/routing.js +88 -0
- package/dist/routes/routing.js.map +1 -0
- package/dist/routes/scalar.d.ts +7 -0
- package/dist/routes/scalar.d.ts.map +1 -0
- package/dist/routes/scalar.js +58 -0
- package/dist/routes/scalar.js.map +1 -0
- package/dist/routes/select.d.ts +4 -0
- package/dist/routes/select.d.ts.map +1 -0
- package/dist/routes/select.js +17 -0
- package/dist/routes/select.js.map +1 -0
- package/dist/routes/stream.d.ts +15 -0
- package/dist/routes/stream.d.ts.map +1 -0
- package/dist/routes/stream.js +51 -0
- package/dist/routes/stream.js.map +1 -0
- package/dist/routes/template.d.ts +9 -0
- package/dist/routes/template.d.ts.map +1 -0
- package/dist/routes/template.js +228 -0
- package/dist/routes/template.js.map +1 -0
- package/dist/runtime/artifact.d.ts +48 -0
- package/dist/runtime/artifact.d.ts.map +1 -0
- package/dist/runtime/artifact.js +177 -0
- package/dist/runtime/artifact.js.map +1 -0
- package/dist/runtime/index.d.ts +2 -0
- package/dist/runtime/index.d.ts.map +1 -0
- package/dist/runtime/index.js +2 -0
- package/dist/runtime/index.js.map +1 -0
- package/dist/schema/index.d.ts +2 -0
- package/dist/schema/index.d.ts.map +1 -0
- package/dist/schema/index.js +2 -0
- package/dist/schema/index.js.map +1 -0
- package/dist/schema/installation/index.d.ts +2 -0
- package/dist/schema/installation/index.d.ts.map +1 -0
- package/dist/schema/installation/index.js +2 -0
- package/dist/schema/installation/index.js.map +1 -0
- package/dist/schema/installation/introspection/codec.d.ts +6 -0
- package/dist/schema/installation/introspection/codec.d.ts.map +1 -0
- package/dist/schema/installation/introspection/codec.js +273 -0
- package/dist/schema/installation/introspection/codec.js.map +1 -0
- package/dist/schema/installation/introspection/index.d.ts +3 -0
- package/dist/schema/installation/introspection/index.d.ts.map +1 -0
- package/dist/schema/installation/introspection/index.js +2 -0
- package/dist/schema/installation/introspection/index.js.map +1 -0
- package/dist/schema/installation/introspection/result.d.ts +34 -0
- package/dist/schema/installation/introspection/result.d.ts.map +1 -0
- package/dist/schema/installation/introspection/result.js +2 -0
- package/dist/schema/installation/introspection/result.js.map +1 -0
- package/package.json +59 -0
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { Key, type schema } from '@astrale-os/kernel-dsl/v1';
|
|
2
|
+
import type { HttpRoute, PublicationRef } from '../publication/index.js';
|
|
3
|
+
export interface CompiledRoute {
|
|
4
|
+
readonly name: string;
|
|
5
|
+
readonly callable: Key.Callable;
|
|
6
|
+
readonly publication: PublicationRef;
|
|
7
|
+
readonly owner: schema.DomainSchema;
|
|
8
|
+
readonly declaration: schema.FunctionDeclaration | schema.MethodDeclaration;
|
|
9
|
+
readonly route: HttpRoute;
|
|
10
|
+
readonly default: boolean;
|
|
11
|
+
}
|
|
12
|
+
export declare function requiresReceiver(entry: CompiledRoute): boolean;
|
|
13
|
+
//# sourceMappingURL=route.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"route.d.ts","sourceRoot":"","sources":["../../routes/route.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAO,KAAK,MAAM,EAAE,MAAM,2BAA2B,CAAA;AAEjE,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AAExE,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,QAAQ,EAAE,GAAG,CAAC,QAAQ,CAAA;IAC/B,QAAQ,CAAC,WAAW,EAAE,cAAc,CAAA;IACpC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,YAAY,CAAA;IACnC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC,mBAAmB,GAAG,MAAM,CAAC,iBAAiB,CAAA;IAC3E,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAA;IACzB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;CAC1B;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAK9D"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"route.js","sourceRoot":"","sources":["../../routes/route.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,GAAG,EAAe,MAAM,2BAA2B,CAAA;AAcjE,MAAM,UAAU,gBAAgB,CAAC,KAAoB;IACnD,OAAO,CACL,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACpC,KAAK,CAAC,WAAwC,CAAC,MAAM,KAAK,IAAI,CAChE,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type * as invocation from '../invocation/index.js';
|
|
2
|
+
import type { Etag, PublicationRef } from '../publication/index.js';
|
|
3
|
+
import type { HttpRequest } from './request.js';
|
|
4
|
+
export interface StaleControl {
|
|
5
|
+
readonly kind: 'stale';
|
|
6
|
+
readonly current: Etag;
|
|
7
|
+
}
|
|
8
|
+
export interface MissControl {
|
|
9
|
+
readonly kind: 'miss';
|
|
10
|
+
}
|
|
11
|
+
export declare const HTTP_ROUTE_PUBLICATION: 'if-match';
|
|
12
|
+
export declare const HTTP_ROUTE_ISSUER: 'x-astrale-issuer';
|
|
13
|
+
export declare const HTTP_ROUTE_STALE: 'x-astrale-route-stale';
|
|
14
|
+
export declare const HTTP_ROUTE_STALE_STATUS: 412;
|
|
15
|
+
export declare const HTTP_ROUTE_MISS: 'x-astrale-route-miss';
|
|
16
|
+
export declare const HTTP_ROUTE_MISS_STATUS: 421;
|
|
17
|
+
export declare function decodeRouting(input: Pick<HttpRequest, 'headers'>, publication: PublicationRef): invocation.Via | undefined;
|
|
18
|
+
export declare function staleHeaders(current: Etag): Readonly<Record<string, string>>;
|
|
19
|
+
export declare function decodeStale(status: number, headers: HttpRequest['headers']): StaleControl | undefined;
|
|
20
|
+
export declare function missHeaders(): Readonly<Record<string, string>>;
|
|
21
|
+
export declare function decodeMiss(status: number, headers: HttpRequest['headers']): MissControl | undefined;
|
|
22
|
+
export declare function encodeStrongEtag(input: Etag): string;
|
|
23
|
+
//# sourceMappingURL=routing.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"routing.d.ts","sourceRoot":"","sources":["../../routes/routing.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,UAAU,MAAM,wBAAwB,CAAA;AACzD,OAAO,KAAK,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AACnE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAI/C,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAA;IACtB,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAA;CACvB;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CACtB;AAED,eAAO,MAAM,sBAAsB,EAAG,UAAmB,CAAA;AACzD,eAAO,MAAM,iBAAiB,EAAG,kBAA2B,CAAA;AAC5D,eAAO,MAAM,gBAAgB,EAAG,uBAAgC,CAAA;AAChE,eAAO,MAAM,uBAAuB,EAAG,GAAY,CAAA;AACnD,eAAO,MAAM,eAAe,EAAG,sBAA+B,CAAA;AAC9D,eAAO,MAAM,sBAAsB,EAAG,GAAY,CAAA;AAIlD,wBAAgB,aAAa,CAC3B,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC,EACnC,WAAW,EAAE,cAAc,GAC1B,UAAU,CAAC,GAAG,GAAG,SAAS,CAwB5B;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,IAAI,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAK5E;AAED,wBAAgB,WAAW,CACzB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,WAAW,CAAC,SAAS,CAAC,GAC9B,YAAY,GAAG,SAAS,CAa1B;AAED,wBAAgB,WAAW,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAE9D;AAED,wBAAgB,UAAU,CACxB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,WAAW,CAAC,SAAS,CAAC,GAC9B,WAAW,GAAG,SAAS,CAUzB;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,IAAI,GAAG,MAAM,CAEpD"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import * as auth from '@astrale-os/kernel-core/auth';
|
|
2
|
+
import { fail } from './error.js';
|
|
3
|
+
export const HTTP_ROUTE_PUBLICATION = 'if-match';
|
|
4
|
+
export const HTTP_ROUTE_ISSUER = 'x-astrale-issuer';
|
|
5
|
+
export const HTTP_ROUTE_STALE = 'x-astrale-route-stale';
|
|
6
|
+
export const HTTP_ROUTE_STALE_STATUS = 412;
|
|
7
|
+
export const HTTP_ROUTE_MISS = 'x-astrale-route-miss';
|
|
8
|
+
export const HTTP_ROUTE_MISS_STATUS = 421;
|
|
9
|
+
const STRONG_ETAG = /^"(sha256:[0-9a-f]{64})"$/u;
|
|
10
|
+
export function decodeRouting(input, publication) {
|
|
11
|
+
const encodedEtag = routingHeader(input.headers, HTTP_ROUTE_PUBLICATION);
|
|
12
|
+
const encodedIssuer = routingHeader(input.headers, HTTP_ROUTE_ISSUER);
|
|
13
|
+
if (encodedEtag === undefined && encodedIssuer === undefined)
|
|
14
|
+
return undefined;
|
|
15
|
+
if (encodedEtag === undefined || encodedIssuer === undefined) {
|
|
16
|
+
fail('NATIVE_ROUTE_ROUTING_INVALID', `${HTTP_ROUTE_PUBLICATION} and ${HTTP_ROUTE_ISSUER} must occur together.`);
|
|
17
|
+
}
|
|
18
|
+
const etag = decodeStrongEtag(encodedEtag, 'If-Match');
|
|
19
|
+
if (etag !== publication.etag) {
|
|
20
|
+
fail('NATIVE_ROUTE_ROUTING_INVALID', 'If-Match does not name the compiled Publication.');
|
|
21
|
+
}
|
|
22
|
+
let issuer;
|
|
23
|
+
try {
|
|
24
|
+
issuer = auth.issuer.accept(encodedIssuer);
|
|
25
|
+
}
|
|
26
|
+
catch (cause) {
|
|
27
|
+
if (cause instanceof auth.AuthValueError) {
|
|
28
|
+
return fail('NATIVE_ROUTE_ROUTING_INVALID', `${HTTP_ROUTE_ISSUER} is invalid.`, cause);
|
|
29
|
+
}
|
|
30
|
+
throw cause;
|
|
31
|
+
}
|
|
32
|
+
return Object.freeze({ kind: 'via', publication, issuer });
|
|
33
|
+
}
|
|
34
|
+
export function staleHeaders(current) {
|
|
35
|
+
return Object.freeze({
|
|
36
|
+
[HTTP_ROUTE_STALE]: encodeStrongEtag(current),
|
|
37
|
+
'cache-control': 'no-store',
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
export function decodeStale(status, headers) {
|
|
41
|
+
const encoded = routingHeader(headers, HTTP_ROUTE_STALE);
|
|
42
|
+
if (encoded === undefined)
|
|
43
|
+
return undefined;
|
|
44
|
+
if (status !== HTTP_ROUTE_STALE_STATUS) {
|
|
45
|
+
fail('NATIVE_ROUTE_ROUTING_INVALID', `Header ${HTTP_ROUTE_STALE} is reserved for status ${HTTP_ROUTE_STALE_STATUS}.`);
|
|
46
|
+
}
|
|
47
|
+
return Object.freeze({
|
|
48
|
+
kind: 'stale',
|
|
49
|
+
current: decodeStrongEtag(encoded, HTTP_ROUTE_STALE),
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
export function missHeaders() {
|
|
53
|
+
return Object.freeze({ [HTTP_ROUTE_MISS]: '1', 'cache-control': 'no-store' });
|
|
54
|
+
}
|
|
55
|
+
export function decodeMiss(status, headers) {
|
|
56
|
+
const encoded = routingHeader(headers, HTTP_ROUTE_MISS);
|
|
57
|
+
if (encoded === undefined)
|
|
58
|
+
return undefined;
|
|
59
|
+
if (status !== HTTP_ROUTE_MISS_STATUS || encoded !== '1') {
|
|
60
|
+
fail('NATIVE_ROUTE_ROUTING_INVALID', `Header ${HTTP_ROUTE_MISS} is reserved for status ${HTTP_ROUTE_MISS_STATUS} with value 1.`);
|
|
61
|
+
}
|
|
62
|
+
return Object.freeze({ kind: 'miss' });
|
|
63
|
+
}
|
|
64
|
+
export function encodeStrongEtag(input) {
|
|
65
|
+
return `"${input}"`;
|
|
66
|
+
}
|
|
67
|
+
function decodeStrongEtag(input, label) {
|
|
68
|
+
const matched = STRONG_ETAG.exec(input);
|
|
69
|
+
if (matched === null) {
|
|
70
|
+
fail('NATIVE_ROUTE_ROUTING_INVALID', `${label} must contain exactly one strong quoted Publication ETag.`);
|
|
71
|
+
}
|
|
72
|
+
return matched[1];
|
|
73
|
+
}
|
|
74
|
+
function routingHeader(input, name) {
|
|
75
|
+
if (input instanceof Headers)
|
|
76
|
+
return input.get(name) ?? undefined;
|
|
77
|
+
let found;
|
|
78
|
+
for (const [candidate, value] of Object.entries(input ?? {})) {
|
|
79
|
+
if (candidate.toLowerCase() !== name || value === undefined)
|
|
80
|
+
continue;
|
|
81
|
+
if (found !== undefined || (Array.isArray(value) && value.length !== 1)) {
|
|
82
|
+
fail('NATIVE_ROUTE_ROUTING_INVALID', `Header ${name} must occur at most once.`);
|
|
83
|
+
}
|
|
84
|
+
found = typeof value === 'string' ? value : value[0];
|
|
85
|
+
}
|
|
86
|
+
return found;
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=routing.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"routing.js","sourceRoot":"","sources":["../../routes/routing.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type * as portable from '@astrale-os/kernel-dsl/value';
|
|
2
|
+
import type { CompiledRoute } from './route.js';
|
|
3
|
+
export declare function encodeScalar(entry: CompiledRoute, name: string, value: unknown): string;
|
|
4
|
+
export declare function decodeScalar(entry: CompiledRoute, name: string, encoded: string): portable.Value;
|
|
5
|
+
export declare function scalar(value: unknown): string;
|
|
6
|
+
export declare function asObject(value: unknown): Record<string, portable.Value>;
|
|
7
|
+
//# sourceMappingURL=scalar.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scalar.d.ts","sourceRoot":"","sources":["../../routes/scalar.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,QAAQ,MAAM,8BAA8B,CAAA;AAI7D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAM/C,wBAAgB,YAAY,CAAC,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,MAAM,CAUvF;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,QAAQ,CAAC,KAAK,CA0BhG;AAED,wBAAgB,MAAM,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAO7C;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,KAAK,CAAC,CAKvE"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { schema } from '@astrale-os/kernel-dsl/v1';
|
|
2
|
+
import { invalidRequest } from './error.js';
|
|
3
|
+
const JSON_NUMBER = /^-?(?:0|[1-9]\d*)(?:\.\d+)?(?:[eE][+-]?\d+)?$/u;
|
|
4
|
+
export function encodeScalar(entry, name, value) {
|
|
5
|
+
const encoded = scalar(value);
|
|
6
|
+
if (name === entry.route.receiver)
|
|
7
|
+
return encoded;
|
|
8
|
+
const decoded = decodeScalar(entry, name, encoded);
|
|
9
|
+
if (!sameScalar(decoded, value)) {
|
|
10
|
+
invalidRequest(`Native route field ${name} does not round-trip through its declared value schema.`);
|
|
11
|
+
}
|
|
12
|
+
return encoded;
|
|
13
|
+
}
|
|
14
|
+
export function decodeScalar(entry, name, encoded) {
|
|
15
|
+
if (name === entry.route.receiver)
|
|
16
|
+
return encoded;
|
|
17
|
+
const input = asObject(entry.declaration.input);
|
|
18
|
+
const contract = asObject(input.properties)[name];
|
|
19
|
+
if (contract === undefined)
|
|
20
|
+
invalidRequest(`Native route maps unknown input field ${name}.`);
|
|
21
|
+
const candidates = [encoded];
|
|
22
|
+
if (encoded === 'true')
|
|
23
|
+
candidates.push(true);
|
|
24
|
+
else if (encoded === 'false')
|
|
25
|
+
candidates.push(false);
|
|
26
|
+
else if (encoded === 'null')
|
|
27
|
+
candidates.push(null);
|
|
28
|
+
if (JSON_NUMBER.test(encoded)) {
|
|
29
|
+
const number = Number(encoded);
|
|
30
|
+
if (Number.isFinite(number))
|
|
31
|
+
candidates.push(number);
|
|
32
|
+
}
|
|
33
|
+
const accepted = candidates.filter((candidate) => schema.values.validate(entry.owner, contract, candidate).length === 0);
|
|
34
|
+
if (accepted.length === 0) {
|
|
35
|
+
invalidRequest(`Native route field ${name} is invalid under its declared value schema.`);
|
|
36
|
+
}
|
|
37
|
+
if (accepted.length > 1) {
|
|
38
|
+
invalidRequest(`Native route field ${name} has an ambiguous scalar wire representation.`);
|
|
39
|
+
}
|
|
40
|
+
return accepted[0];
|
|
41
|
+
}
|
|
42
|
+
export function scalar(value) {
|
|
43
|
+
if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') {
|
|
44
|
+
return String(value);
|
|
45
|
+
}
|
|
46
|
+
return invalidRequest('Native route field must be a string, number, or boolean at this wire source.');
|
|
47
|
+
}
|
|
48
|
+
export function asObject(value) {
|
|
49
|
+
if (value === null || typeof value !== 'object' || Array.isArray(value)) {
|
|
50
|
+
invalidRequest('Native route input must be an object.');
|
|
51
|
+
}
|
|
52
|
+
return value;
|
|
53
|
+
}
|
|
54
|
+
function sameScalar(left, right) {
|
|
55
|
+
return (Object.is(left, right) ||
|
|
56
|
+
(typeof left === 'number' && typeof right === 'number' && left === 0 && right === 0));
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=scalar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scalar.js","sourceRoot":"","sources":["../../routes/scalar.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { Key } from '@astrale-os/kernel-dsl/v1';
|
|
2
|
+
import type { CompiledRoute } from './route.js';
|
|
3
|
+
export declare function select(entries: readonly CompiledRoute[], callable: Key.Callable, route?: string): CompiledRoute | undefined;
|
|
4
|
+
//# sourceMappingURL=select.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"select.d.ts","sourceRoot":"","sources":["../../routes/select.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,2BAA2B,CAAA;AAEpD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAI/C,wBAAgB,MAAM,CACpB,OAAO,EAAE,SAAS,aAAa,EAAE,EACjC,QAAQ,EAAE,GAAG,CAAC,QAAQ,EACtB,KAAK,CAAC,EAAE,MAAM,GACb,aAAa,GAAG,SAAS,CAY3B"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { RouteError } from './error.js';
|
|
2
|
+
export function select(entries, callable, route) {
|
|
3
|
+
const candidates = entries.filter((entry) => entry.callable === callable);
|
|
4
|
+
if (route !== undefined) {
|
|
5
|
+
const selected = candidates.find((entry) => entry.name === route);
|
|
6
|
+
if (selected === undefined) {
|
|
7
|
+
throw new RouteError('NATIVE_ROUTE_NOT_FOUND', `Unknown route ${route} for ${callable}.`);
|
|
8
|
+
}
|
|
9
|
+
return selected;
|
|
10
|
+
}
|
|
11
|
+
if (candidates.length === 0)
|
|
12
|
+
return undefined;
|
|
13
|
+
if (candidates.length === 1)
|
|
14
|
+
return candidates[0];
|
|
15
|
+
return candidates.find((entry) => entry.default);
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=select.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"select.js","sourceRoot":"","sources":["../../routes/select.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAEvC,MAAM,UAAU,MAAM,CACpB,OAAiC,EACjC,QAAsB,EACtB,KAAc;IAEd,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAA;IACzE,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,MAAM,QAAQ,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,CAAA;QACjE,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC3B,MAAM,IAAI,UAAU,CAAC,wBAAwB,EAAE,iBAAiB,KAAK,QAAQ,QAAQ,GAAG,CAAC,CAAA;QAC3F,CAAC;QACD,OAAO,QAAQ,CAAA;IACjB,CAAC;IACD,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAA;IAC7C,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,UAAU,CAAC,CAAC,CAAC,CAAA;IACjD,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;AAClD,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { type Value } from '@astrale-os/kernel-dsl/value';
|
|
2
|
+
import type { ErrorPayload } from '../errors/index.js';
|
|
3
|
+
export declare const STREAM_MEDIA_TYPE: 'text/event-stream';
|
|
4
|
+
export type StreamFrame = {
|
|
5
|
+
readonly kind: 'item';
|
|
6
|
+
readonly value: Value;
|
|
7
|
+
} | {
|
|
8
|
+
readonly kind: 'end';
|
|
9
|
+
} | {
|
|
10
|
+
readonly kind: 'error';
|
|
11
|
+
readonly error: ErrorPayload;
|
|
12
|
+
};
|
|
13
|
+
export declare function encodeStreamFrame(input: StreamFrame): string;
|
|
14
|
+
export declare function decodeStreamFrame(event: string, data: string): StreamFrame;
|
|
15
|
+
//# sourceMappingURL=stream.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stream.d.ts","sourceRoot":"","sources":["../../routes/stream.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqB,KAAK,KAAK,EAAE,MAAM,8BAA8B,CAAA;AAE5E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAKtD,eAAO,MAAM,iBAAiB,EAAG,mBAA4B,CAAA;AAE7D,MAAM,MAAM,WAAW,GACnB;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAA;CAAE,GAChD;IAAE,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAA;CAAE,GACxB;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAA;CAAE,CAAA;AAE5D,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,CAS5D;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,WAAW,CAuC1E"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { DecodeError, json } from '@astrale-os/kernel-dsl/value';
|
|
2
|
+
import { acceptPayload } from '../errors/index.js';
|
|
3
|
+
import { fail } from './error.js';
|
|
4
|
+
export const STREAM_MEDIA_TYPE = 'text/event-stream';
|
|
5
|
+
export function encodeStreamFrame(input) {
|
|
6
|
+
switch (input.kind) {
|
|
7
|
+
case 'item':
|
|
8
|
+
return `data: ${json.serialize(input.value)}\n\n`;
|
|
9
|
+
case 'end':
|
|
10
|
+
return 'event: end\ndata: {}\n\n';
|
|
11
|
+
case 'error':
|
|
12
|
+
return `event: error\ndata: ${json.serialize(input.error)}\n\n`;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
export function decodeStreamFrame(event, data) {
|
|
16
|
+
let value;
|
|
17
|
+
try {
|
|
18
|
+
value = json.decode(data);
|
|
19
|
+
}
|
|
20
|
+
catch (cause) {
|
|
21
|
+
if (cause instanceof DecodeError) {
|
|
22
|
+
return fail('NATIVE_ROUTE_RESPONSE_INVALID', 'Native stream event data is invalid.', cause);
|
|
23
|
+
}
|
|
24
|
+
throw cause;
|
|
25
|
+
}
|
|
26
|
+
if (event === '' || event === 'message') {
|
|
27
|
+
return Object.freeze({ kind: 'item', value });
|
|
28
|
+
}
|
|
29
|
+
if (event === 'end') {
|
|
30
|
+
if (value === null ||
|
|
31
|
+
typeof value !== 'object' ||
|
|
32
|
+
Array.isArray(value) ||
|
|
33
|
+
Reflect.ownKeys(value).length !== 0) {
|
|
34
|
+
fail('NATIVE_ROUTE_RESPONSE_INVALID', 'Native stream end event is invalid.');
|
|
35
|
+
}
|
|
36
|
+
return Object.freeze({ kind: 'end' });
|
|
37
|
+
}
|
|
38
|
+
if (event === 'error') {
|
|
39
|
+
try {
|
|
40
|
+
return Object.freeze({ kind: 'error', error: acceptPayload(value) });
|
|
41
|
+
}
|
|
42
|
+
catch (cause) {
|
|
43
|
+
if (cause instanceof TypeError) {
|
|
44
|
+
return fail('NATIVE_ROUTE_RESPONSE_INVALID', 'Native stream error event is invalid.', cause);
|
|
45
|
+
}
|
|
46
|
+
throw cause;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
return fail('NATIVE_ROUTE_RESPONSE_INVALID', `Unknown native stream event ${JSON.stringify(event)}.`);
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=stream.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stream.js","sourceRoot":"","sources":["../../routes/stream.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,IAAI,EAAc,MAAM,8BAA8B,CAAA;AAI5E,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAClD,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAA;AAEjC,MAAM,CAAC,MAAM,iBAAiB,GAAG,mBAA4B,CAAA;AAO7D,MAAM,UAAU,iBAAiB,CAAC,KAAkB;IAClD,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;QACnB,KAAK,MAAM;YACT,OAAO,SAAS,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAA;QACnD,KAAK,KAAK;YACR,OAAO,0BAA0B,CAAA;QACnC,KAAK,OAAO;YACV,OAAO,uBAAuB,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAA;IACnE,CAAC;AACH,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,KAAa,EAAE,IAAY;IAC3D,IAAI,KAAY,CAAA;IAChB,IAAI,CAAC;QACH,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IAC3B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,WAAW,EAAE,CAAC;YACjC,OAAO,IAAI,CAAC,+BAA+B,EAAE,sCAAsC,EAAE,KAAK,CAAC,CAAA;QAC7F,CAAC;QACD,MAAM,KAAK,CAAA;IACb,CAAC;IAED,IAAI,KAAK,KAAK,EAAE,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxC,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAA;IAC/C,CAAC;IACD,IAAI,KAAK,KAAK,KAAK,EAAE,CAAC;QACpB,IACE,KAAK,KAAK,IAAI;YACd,OAAO,KAAK,KAAK,QAAQ;YACzB,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;YACpB,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC,EACnC,CAAC;YACD,IAAI,CAAC,+BAA+B,EAAE,qCAAqC,CAAC,CAAA;QAC9E,CAAC;QACD,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAA;IACvC,CAAC;IACD,IAAI,KAAK,KAAK,OAAO,EAAE,CAAC;QACtB,IAAI,CAAC;YACH,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;QACtE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,SAAS,EAAE,CAAC;gBAC/B,OAAO,IAAI,CAAC,+BAA+B,EAAE,uCAAuC,EAAE,KAAK,CAAC,CAAA;YAC9F,CAAC;YACD,MAAM,KAAK,CAAA;QACb,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CACT,+BAA+B,EAC/B,+BAA+B,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CACxD,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export declare const PLACEHOLDER: RegExp;
|
|
2
|
+
export declare function validateTemplate(href: string): void;
|
|
3
|
+
export declare function templateUrl(href: string): URL;
|
|
4
|
+
export declare function routePattern(href: string): string;
|
|
5
|
+
export declare function templatesOverlap(left: string, right: string): boolean;
|
|
6
|
+
export declare function matchTemplate(template: string, input: string): Record<string, string> | undefined;
|
|
7
|
+
export declare function encodeTemplate(value: unknown, catchall: string | undefined, host: boolean): string;
|
|
8
|
+
export declare function authorityEnd(input: string): number;
|
|
9
|
+
//# sourceMappingURL=template.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"template.d.ts","sourceRoot":"","sources":["../../routes/template.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,WAAW,QAAyC,CAAA;AAIjE,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CA0BnD;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,GAAG,CAyB7C;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAIjD;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAwCrE;AAED,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAyCjG;AAED,wBAAgB,cAAc,CAC5B,KAAK,EAAE,OAAO,EACd,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,IAAI,EAAE,OAAO,GACZ,MAAM,CAcR;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAIlD"}
|
|
@@ -0,0 +1,228 @@
|
|
|
1
|
+
import { fail, invalidRequest } from './error.js';
|
|
2
|
+
export const PLACEHOLDER = /\{([A-Za-z][A-Za-z0-9_]*)([+*])?\}/gu;
|
|
3
|
+
const WHOLE_PLACEHOLDER = /^\{([A-Za-z][A-Za-z0-9_]*)([+*])?\}$/u;
|
|
4
|
+
const HOST_LABEL = /^[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?$/u;
|
|
5
|
+
export function validateTemplate(href) {
|
|
6
|
+
validateHostTemplate(href);
|
|
7
|
+
const pathname = rawTemplatePath(href);
|
|
8
|
+
for (const segment of pathname.split('/')) {
|
|
9
|
+
if ((segment.includes('{') || segment.includes('}')) && !WHOLE_PLACEHOLDER.test(segment)) {
|
|
10
|
+
fail('NATIVE_ROUTE_DECLARATION_INVALID', 'Route placeholders must occupy one complete path segment.');
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
const placeholders = [...href.matchAll(PLACEHOLDER)];
|
|
14
|
+
const names = placeholders.map((match) => match[1]);
|
|
15
|
+
if (new Set(names).size !== names.length) {
|
|
16
|
+
fail('NATIVE_ROUTE_MAPPING_AMBIGUOUS', 'Route href uses one placeholder more than once.');
|
|
17
|
+
}
|
|
18
|
+
const catchalls = placeholders.filter((match) => match[2] !== undefined);
|
|
19
|
+
if (catchalls.length > 1 ||
|
|
20
|
+
(catchalls[0] !== undefined && catchalls[0].index + catchalls[0][0].length !== href.length)) {
|
|
21
|
+
fail('NATIVE_ROUTE_DECLARATION_INVALID', 'A catchall placeholder must be unique and terminal.');
|
|
22
|
+
}
|
|
23
|
+
templateUrl(href);
|
|
24
|
+
}
|
|
25
|
+
export function templateUrl(href) {
|
|
26
|
+
try {
|
|
27
|
+
const substituted = href.replaceAll(PLACEHOLDER, 'astrale-placeholder');
|
|
28
|
+
const url = new URL(substituted);
|
|
29
|
+
if ((url.protocol !== 'http:' && url.protocol !== 'https:') ||
|
|
30
|
+
url.username !== '' ||
|
|
31
|
+
url.password !== '' ||
|
|
32
|
+
url.search !== '' ||
|
|
33
|
+
url.hash !== '' ||
|
|
34
|
+
url.toString() !== substituted) {
|
|
35
|
+
throw new TypeError();
|
|
36
|
+
}
|
|
37
|
+
return url;
|
|
38
|
+
}
|
|
39
|
+
catch (cause) {
|
|
40
|
+
if (cause instanceof TypeError) {
|
|
41
|
+
return fail('NATIVE_ROUTE_DECLARATION_INVALID', 'Route href must be an absolute HTTP(S) template without credentials, query, or fragment.', cause);
|
|
42
|
+
}
|
|
43
|
+
throw cause;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
export function routePattern(href) {
|
|
47
|
+
return href.replaceAll(PLACEHOLDER, (_whole, _name, catchall) => catchall === '+' ? '{+}' : catchall === '*' ? '{*}' : '{}');
|
|
48
|
+
}
|
|
49
|
+
export function templatesOverlap(left, right) {
|
|
50
|
+
const leftUrl = templateUrl(left);
|
|
51
|
+
const rightUrl = templateUrl(right);
|
|
52
|
+
if (leftUrl.protocol !== rightUrl.protocol || leftUrl.port !== rightUrl.port)
|
|
53
|
+
return false;
|
|
54
|
+
const leftHost = templateHostSegments(left);
|
|
55
|
+
const rightHost = templateHostSegments(right);
|
|
56
|
+
if (leftHost.length !== rightHost.length ||
|
|
57
|
+
leftHost.some((segment, index) => !hostSegmentsOverlap(segment, rightHost[index]))) {
|
|
58
|
+
return false;
|
|
59
|
+
}
|
|
60
|
+
const leftSegments = templateSegments(left);
|
|
61
|
+
const rightSegments = templateSegments(right);
|
|
62
|
+
const leftCatchall = leftSegments.findIndex((segment) => segment.kind.endsWith('catchall'));
|
|
63
|
+
const rightCatchall = rightSegments.findIndex((segment) => segment.kind.endsWith('catchall'));
|
|
64
|
+
const shared = Math.min(leftCatchall < 0 ? leftSegments.length : leftCatchall, rightCatchall < 0 ? rightSegments.length : rightCatchall);
|
|
65
|
+
for (let index = 0; index < shared; index += 1) {
|
|
66
|
+
if (!segmentsOverlap(leftSegments[index], rightSegments[index]))
|
|
67
|
+
return false;
|
|
68
|
+
}
|
|
69
|
+
if (leftCatchall < 0 && rightCatchall < 0) {
|
|
70
|
+
return leftSegments.length === rightSegments.length;
|
|
71
|
+
}
|
|
72
|
+
if (leftCatchall >= 0 && rightCatchall >= 0)
|
|
73
|
+
return true;
|
|
74
|
+
const catchall = leftCatchall >= 0 ? leftCatchall : rightCatchall;
|
|
75
|
+
const catchallSegment = (leftCatchall >= 0 ? leftSegments : rightSegments)[catchall];
|
|
76
|
+
const fixed = leftCatchall >= 0 ? rightSegments : leftSegments;
|
|
77
|
+
const remainder = fixed.slice(catchall);
|
|
78
|
+
if (catchallSegment.kind === 'optional-catchall')
|
|
79
|
+
return remainder.length > 0;
|
|
80
|
+
return (remainder.length > 1 ||
|
|
81
|
+
(remainder[0] !== undefined &&
|
|
82
|
+
(remainder[0].kind !== 'literal' || remainder[0].value.length > 0)));
|
|
83
|
+
}
|
|
84
|
+
export function matchTemplate(template, input) {
|
|
85
|
+
try {
|
|
86
|
+
const url = new URL(input);
|
|
87
|
+
url.search = '';
|
|
88
|
+
url.hash = '';
|
|
89
|
+
input = url.toString();
|
|
90
|
+
}
|
|
91
|
+
catch (cause) {
|
|
92
|
+
if (cause instanceof TypeError)
|
|
93
|
+
return undefined;
|
|
94
|
+
throw cause;
|
|
95
|
+
}
|
|
96
|
+
const names = [];
|
|
97
|
+
let cursor = 0;
|
|
98
|
+
let pattern = '^';
|
|
99
|
+
for (const match of template.matchAll(PLACEHOLDER)) {
|
|
100
|
+
pattern += escapePattern(template.slice(cursor, match.index));
|
|
101
|
+
names.push(match[1]);
|
|
102
|
+
pattern +=
|
|
103
|
+
match.index < authorityEnd(template)
|
|
104
|
+
? '([a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)'
|
|
105
|
+
: match[2] === '+'
|
|
106
|
+
? '(.+)'
|
|
107
|
+
: match[2] === '*'
|
|
108
|
+
? '(.*)'
|
|
109
|
+
: '([^/?#]+)';
|
|
110
|
+
cursor = match.index + match[0].length;
|
|
111
|
+
}
|
|
112
|
+
pattern += `${escapePattern(template.slice(cursor))}$`;
|
|
113
|
+
const matched = new RegExp(pattern, 'u').exec(input);
|
|
114
|
+
if (matched === null)
|
|
115
|
+
return undefined;
|
|
116
|
+
const output = {};
|
|
117
|
+
for (const [index, name] of names.entries()) {
|
|
118
|
+
try {
|
|
119
|
+
output[name] = decodeURIComponent(matched[index + 1]);
|
|
120
|
+
}
|
|
121
|
+
catch (cause) {
|
|
122
|
+
if (cause instanceof URIError)
|
|
123
|
+
return undefined;
|
|
124
|
+
throw cause;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
return output;
|
|
128
|
+
}
|
|
129
|
+
export function encodeTemplate(value, catchall, host) {
|
|
130
|
+
if (typeof value !== 'string')
|
|
131
|
+
invalidRequest('Native route template value must be a string.');
|
|
132
|
+
if (host) {
|
|
133
|
+
if (!HOST_LABEL.test(value)) {
|
|
134
|
+
invalidRequest('Native route host field must be one canonical DNS label.');
|
|
135
|
+
}
|
|
136
|
+
return value;
|
|
137
|
+
}
|
|
138
|
+
if (catchall === '+' && value.length === 0) {
|
|
139
|
+
invalidRequest('A required catchall route value cannot be empty.');
|
|
140
|
+
}
|
|
141
|
+
return catchall === '+' || catchall === '*'
|
|
142
|
+
? value.split('/').map(encodeURIComponent).join('/')
|
|
143
|
+
: encodeURIComponent(value);
|
|
144
|
+
}
|
|
145
|
+
export function authorityEnd(input) {
|
|
146
|
+
const start = input.indexOf('://') + 3;
|
|
147
|
+
const end = input.indexOf('/', start);
|
|
148
|
+
return end < 0 ? input.length : end;
|
|
149
|
+
}
|
|
150
|
+
function templateHostSegments(input) {
|
|
151
|
+
validateHostTemplate(input);
|
|
152
|
+
const url = templateUrl(input);
|
|
153
|
+
const raw = authority(input);
|
|
154
|
+
const hostname = raw.startsWith('[')
|
|
155
|
+
? raw.slice(0, raw.indexOf(']') + 1)
|
|
156
|
+
: url.port === ''
|
|
157
|
+
? raw
|
|
158
|
+
: raw.slice(0, -(url.port.length + 1));
|
|
159
|
+
return hostname
|
|
160
|
+
.split('.')
|
|
161
|
+
.map((segment) => WHOLE_PLACEHOLDER.test(segment)
|
|
162
|
+
? Object.freeze({ kind: 'parameter' })
|
|
163
|
+
: Object.freeze({ kind: 'literal', value: segment }));
|
|
164
|
+
}
|
|
165
|
+
function hostSegmentsOverlap(left, right) {
|
|
166
|
+
if (left.kind === 'literal' && right.kind === 'literal')
|
|
167
|
+
return left.value === right.value;
|
|
168
|
+
const literal = left.kind === 'literal' ? left.value : right.kind === 'literal' ? right.value : undefined;
|
|
169
|
+
return literal === undefined || HOST_LABEL.test(literal);
|
|
170
|
+
}
|
|
171
|
+
function validateHostTemplate(input) {
|
|
172
|
+
const start = input.indexOf('://') + 3;
|
|
173
|
+
const end = authorityEnd(input);
|
|
174
|
+
for (const match of input.matchAll(PLACEHOLDER)) {
|
|
175
|
+
if (match.index >= end)
|
|
176
|
+
continue;
|
|
177
|
+
const after = match.index + match[0].length;
|
|
178
|
+
if (match[2] !== undefined ||
|
|
179
|
+
(match.index !== start && input[match.index - 1] !== '.') ||
|
|
180
|
+
(after !== end && input[after] !== '.' && input[after] !== ':')) {
|
|
181
|
+
fail('NATIVE_ROUTE_DECLARATION_INVALID', 'A host placeholder must occupy one complete DNS label and cannot be a catchall.');
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
function authority(input) {
|
|
186
|
+
const start = input.indexOf('://') + 3;
|
|
187
|
+
return input.slice(start, authorityEnd(input));
|
|
188
|
+
}
|
|
189
|
+
function rawTemplatePath(input) {
|
|
190
|
+
const authority = input.indexOf('://');
|
|
191
|
+
const start = input.indexOf('/', authority + 3);
|
|
192
|
+
return start < 0 ? '/' : input.slice(start);
|
|
193
|
+
}
|
|
194
|
+
function templateSegments(input) {
|
|
195
|
+
templateUrl(input);
|
|
196
|
+
validateHostTemplate(input);
|
|
197
|
+
return rawTemplatePath(input)
|
|
198
|
+
.split('/')
|
|
199
|
+
.slice(1)
|
|
200
|
+
.map((segment) => {
|
|
201
|
+
const placeholder = WHOLE_PLACEHOLDER.exec(segment);
|
|
202
|
+
if (placeholder !== null) {
|
|
203
|
+
return Object.freeze({
|
|
204
|
+
kind: placeholder[2] === '+'
|
|
205
|
+
? 'catchall'
|
|
206
|
+
: placeholder[2] === '*'
|
|
207
|
+
? 'optional-catchall'
|
|
208
|
+
: 'parameter',
|
|
209
|
+
});
|
|
210
|
+
}
|
|
211
|
+
if (segment.includes('{') || segment.includes('}')) {
|
|
212
|
+
fail('NATIVE_ROUTE_DECLARATION_INVALID', 'Route placeholders must occupy one complete path segment.');
|
|
213
|
+
}
|
|
214
|
+
return Object.freeze({ kind: 'literal', value: segment });
|
|
215
|
+
});
|
|
216
|
+
}
|
|
217
|
+
function segmentsOverlap(left, right) {
|
|
218
|
+
if (left.kind !== 'literal' && right.kind !== 'literal')
|
|
219
|
+
return true;
|
|
220
|
+
if (left.kind === 'literal' && right.kind === 'literal')
|
|
221
|
+
return left.value === right.value;
|
|
222
|
+
const literal = left.kind === 'literal' ? left.value : right.value;
|
|
223
|
+
return literal.length > 0;
|
|
224
|
+
}
|
|
225
|
+
function escapePattern(value) {
|
|
226
|
+
return value.replace(/[.*+?^${}()|[\]\\]/gu, '\\$&');
|
|
227
|
+
}
|
|
228
|
+
//# sourceMappingURL=template.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"template.js","sourceRoot":"","sources":["../../routes/template.ts"],"names":[],"mappings":"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"}
|