@toa.io/extensions.exposition 1.0.0-alpha.274 → 1.0.0-alpha.277
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 +21 -0
- package/components/exposition.atom/operations/meter.js +1 -3
- package/components/exposition.octets/operations/delete.js +1 -3
- package/components/exposition.octets/operations/get.js +1 -3
- package/components/exposition.octets/operations/head.js +1 -3
- package/components/exposition.octets/operations/put.js +6 -6
- package/components/identity.bans/operations/transit.js +1 -5
- package/components/identity.bans/operations/transit.js.map +1 -1
- package/components/identity.bans/tsconfig.json +1 -0
- package/components/identity.bans/tsconfig.tsbuildinfo +1 -0
- package/components/identity.basic/events/principal.js +2 -4
- package/components/identity.basic/operations/add.d.ts +1 -1
- package/components/identity.basic/operations/add.js +1 -5
- package/components/identity.basic/operations/add.js.map +1 -1
- package/components/identity.basic/operations/authenticate.d.ts +1 -1
- package/components/identity.basic/operations/authenticate.js +3 -7
- package/components/identity.basic/operations/authenticate.js.map +1 -1
- package/components/identity.basic/operations/check.d.ts +1 -1
- package/components/identity.basic/operations/check.js +1 -5
- package/components/identity.basic/operations/check.js.map +1 -1
- package/components/identity.basic/operations/delete.d.ts +1 -1
- package/components/identity.basic/operations/delete.js +1 -5
- package/components/identity.basic/operations/delete.js.map +1 -1
- package/components/identity.basic/operations/incept.d.ts +1 -1
- package/components/identity.basic/operations/incept.js +1 -5
- package/components/identity.basic/operations/incept.js.map +1 -1
- package/components/identity.basic/operations/info.d.ts +1 -1
- package/components/identity.basic/operations/info.js +1 -5
- package/components/identity.basic/operations/info.js.map +1 -1
- package/components/identity.basic/operations/transit.d.ts +1 -1
- package/components/identity.basic/operations/transit.js +4 -8
- package/components/identity.basic/operations/transit.js.map +1 -1
- package/components/identity.basic/operations/types.js +1 -2
- package/components/identity.basic/source/add.ts +1 -1
- package/components/identity.basic/source/authenticate.ts +1 -1
- package/components/identity.basic/source/check.ts +1 -1
- package/components/identity.basic/source/delete.ts +1 -1
- package/components/identity.basic/source/incept.ts +1 -1
- package/components/identity.basic/source/info.ts +1 -1
- package/components/identity.basic/source/transit.ts +1 -1
- package/components/identity.basic/tsconfig.json +1 -0
- package/components/identity.basic/tsconfig.tsbuildinfo +1 -0
- package/components/identity.credentials/operations/list.js +1 -5
- package/components/identity.credentials/operations/list.js.map +1 -1
- package/components/identity.credentials/source/list.test.ts +12 -8
- package/components/identity.credentials/tsconfig.json +2 -1
- package/components/identity.credentials/tsconfig.tsbuildinfo +1 -0
- package/components/identity.federation/events/principal.js +5 -7
- package/components/identity.federation/operations/authenticate.d.ts +1 -1
- package/components/identity.federation/operations/authenticate.js +5 -9
- package/components/identity.federation/operations/authenticate.js.map +1 -1
- package/components/identity.federation/operations/create.d.ts +1 -1
- package/components/identity.federation/operations/create.js +3 -7
- package/components/identity.federation/operations/create.js.map +1 -1
- package/components/identity.federation/operations/decode.d.ts +1 -1
- package/components/identity.federation/operations/decode.js +3 -7
- package/components/identity.federation/operations/decode.js.map +1 -1
- package/components/identity.federation/operations/delete.d.ts +1 -1
- package/components/identity.federation/operations/delete.js +1 -5
- package/components/identity.federation/operations/delete.js.map +1 -1
- package/components/identity.federation/operations/incept.d.ts +1 -1
- package/components/identity.federation/operations/incept.js +3 -7
- package/components/identity.federation/operations/incept.js.map +1 -1
- package/components/identity.federation/operations/lib/Configuration.js +1 -2
- package/components/identity.federation/operations/lib/Ctx.d.ts +2 -2
- package/components/identity.federation/operations/lib/Ctx.js +1 -2
- package/components/identity.federation/operations/lib/Payload.js +1 -2
- package/components/identity.federation/operations/lib/decode.d.ts +2 -2
- package/components/identity.federation/operations/lib/decode.js +9 -13
- package/components/identity.federation/operations/lib/decode.js.map +1 -1
- package/components/identity.federation/operations/lib/discovery.d.ts +2 -2
- package/components/identity.federation/operations/lib/discovery.js +4 -9
- package/components/identity.federation/operations/lib/discovery.js.map +1 -1
- package/components/identity.federation/operations/lib/errors.d.ts +10 -10
- package/components/identity.federation/operations/lib/errors.js +10 -13
- package/components/identity.federation/operations/lib/errors.js.map +1 -1
- package/components/identity.federation/operations/lib/exchange.d.ts +2 -2
- package/components/identity.federation/operations/lib/exchange.js +8 -35
- package/components/identity.federation/operations/lib/exchange.js.map +1 -1
- package/components/identity.federation/operations/lib/index.d.ts +4 -4
- package/components/identity.federation/operations/lib/index.js +3 -9
- package/components/identity.federation/operations/lib/index.js.map +1 -1
- package/components/identity.federation/operations/lib/jose.d.ts +1 -41
- package/components/identity.federation/operations/lib/jose.js +1 -26
- package/components/identity.federation/operations/lib/jose.js.map +1 -1
- package/components/identity.federation/operations/lib/resolve.d.ts +2 -2
- package/components/identity.federation/operations/lib/resolve.js +5 -9
- package/components/identity.federation/operations/lib/resolve.js.map +1 -1
- package/components/identity.federation/operations/list.d.ts +1 -1
- package/components/identity.federation/operations/list.js +1 -5
- package/components/identity.federation/operations/list.js.map +1 -1
- package/components/identity.federation/operations/types/Scheme.js +1 -2
- package/components/identity.federation/operations/types/configuration.js +1 -2
- package/components/identity.federation/operations/types/context.d.ts +2 -2
- package/components/identity.federation/operations/types/context.js +1 -2
- package/components/identity.federation/operations/types/entity.js +1 -2
- package/components/identity.federation/operations/types/index.d.ts +4 -4
- package/components/identity.federation/operations/types/index.js +4 -20
- package/components/identity.federation/operations/types/index.js.map +1 -1
- package/components/identity.federation/source/authenticate.ts +2 -2
- package/components/identity.federation/source/create.ts +2 -2
- package/components/identity.federation/source/decode.ts +2 -2
- package/components/identity.federation/source/delete.ts +1 -1
- package/components/identity.federation/source/incept.ts +2 -2
- package/components/identity.federation/source/lib/Ctx.ts +2 -2
- package/components/identity.federation/source/lib/decode.ts +5 -5
- package/components/identity.federation/source/lib/discovery.test.ts +17 -12
- package/components/identity.federation/source/lib/discovery.ts +3 -3
- package/components/identity.federation/source/lib/exchange.ts +6 -6
- package/components/identity.federation/source/lib/index.ts +4 -4
- package/components/identity.federation/source/lib/jose.js +1 -5
- package/components/identity.federation/source/lib/resolve.ts +5 -5
- package/components/identity.federation/source/list.test.ts +9 -6
- package/components/identity.federation/source/list.ts +1 -1
- package/components/identity.federation/source/types/context.ts +2 -2
- package/components/identity.federation/source/types/index.ts +4 -4
- package/components/identity.federation/tsconfig.json +2 -1
- package/components/identity.federation/tsconfig.tsbuildinfo +1 -0
- package/components/identity.keys/operations/create.js +3 -7
- package/components/identity.keys/operations/create.js.map +1 -1
- package/components/identity.keys/tsconfig.json +1 -0
- package/components/identity.keys/tsconfig.tsbuildinfo +1 -0
- package/components/identity.otp/operations/authenticate.d.ts +1 -1
- package/components/identity.otp/operations/authenticate.js +1 -5
- package/components/identity.otp/operations/authenticate.js.map +1 -1
- package/components/identity.otp/operations/issue.d.ts +1 -1
- package/components/identity.otp/operations/issue.js +1 -5
- package/components/identity.otp/operations/issue.js.map +1 -1
- package/components/identity.otp/operations/lib/Context.d.ts +1 -1
- package/components/identity.otp/operations/lib/Context.js +1 -2
- package/components/identity.otp/operations/lib/Entity.js +1 -2
- package/components/identity.otp/operations/lib/index.d.ts +1 -1
- package/components/identity.otp/operations/lib/index.js +1 -2
- package/components/identity.otp/source/authenticate.ts +1 -1
- package/components/identity.otp/source/issue.ts +1 -1
- package/components/identity.otp/source/lib/Context.ts +1 -1
- package/components/identity.otp/source/lib/index.ts +1 -1
- package/components/identity.otp/tsconfig.json +1 -0
- package/components/identity.otp/tsconfig.tsbuildinfo +1 -0
- package/components/identity.passkeys/operations/authenticate.d.ts +1 -1
- package/components/identity.passkeys/operations/authenticate.js +1 -5
- package/components/identity.passkeys/operations/authenticate.js.map +1 -1
- package/components/identity.passkeys/operations/challenge.d.ts +1 -1
- package/components/identity.passkeys/operations/challenge.js +7 -11
- package/components/identity.passkeys/operations/challenge.js.map +1 -1
- package/components/identity.passkeys/operations/create.d.ts +1 -1
- package/components/identity.passkeys/operations/create.js +3 -7
- package/components/identity.passkeys/operations/create.js.map +1 -1
- package/components/identity.passkeys/operations/delete.d.ts +1 -1
- package/components/identity.passkeys/operations/delete.js +1 -5
- package/components/identity.passkeys/operations/delete.js.map +1 -1
- package/components/identity.passkeys/operations/lib/const.js +1 -4
- package/components/identity.passkeys/operations/lib/const.js.map +1 -1
- package/components/identity.passkeys/operations/list.d.ts +1 -1
- package/components/identity.passkeys/operations/list.js +3 -7
- package/components/identity.passkeys/operations/list.js.map +1 -1
- package/components/identity.passkeys/operations/types/Configuration.js +1 -2
- package/components/identity.passkeys/operations/types/Context.d.ts +3 -3
- package/components/identity.passkeys/operations/types/Context.js +1 -2
- package/components/identity.passkeys/operations/types/Passkey.d.ts +1 -2
- package/components/identity.passkeys/operations/types/Passkey.js +1 -2
- package/components/identity.passkeys/operations/types/index.d.ts +2 -2
- package/components/identity.passkeys/operations/types/index.js +1 -2
- package/components/identity.passkeys/operations/use.d.ts +1 -1
- package/components/identity.passkeys/operations/use.js +3 -7
- package/components/identity.passkeys/operations/use.js.map +1 -1
- package/components/identity.passkeys/source/authenticate.ts +1 -1
- package/components/identity.passkeys/source/challenge.ts +2 -2
- package/components/identity.passkeys/source/create.ts +1 -1
- package/components/identity.passkeys/source/delete.ts +1 -1
- package/components/identity.passkeys/source/list.ts +2 -2
- package/components/identity.passkeys/source/types/Context.ts +3 -3
- package/components/identity.passkeys/source/types/Passkey.ts +1 -3
- package/components/identity.passkeys/source/types/index.ts +2 -2
- package/components/identity.passkeys/source/use.ts +1 -1
- package/components/identity.passkeys/tsconfig.json +1 -0
- package/components/identity.passkeys/tsconfig.tsbuildinfo +1 -0
- package/components/identity.roles/operations/grant.d.ts +1 -1
- package/components/identity.roles/operations/grant.js +1 -5
- package/components/identity.roles/operations/grant.js.map +1 -1
- package/components/identity.roles/operations/lib/Entity.js +1 -2
- package/components/identity.roles/operations/list.d.ts +1 -1
- package/components/identity.roles/operations/list.js +1 -5
- package/components/identity.roles/operations/list.js.map +1 -1
- package/components/identity.roles/operations/principal.d.ts +2 -2
- package/components/identity.roles/operations/principal.js +1 -5
- package/components/identity.roles/operations/principal.js.map +1 -1
- package/components/identity.roles/receivers/identity.federation.principal.js +1 -3
- package/components/identity.roles/source/grant.ts +1 -1
- package/components/identity.roles/source/list.ts +1 -1
- package/components/identity.roles/source/principal.ts +2 -2
- package/components/identity.roles/tsconfig.json +1 -0
- package/components/identity.roles/tsconfig.tsbuildinfo +1 -0
- package/components/identity.tokens/operations/authenticate.d.ts +1 -1
- package/components/identity.tokens/operations/authenticate.js +1 -5
- package/components/identity.tokens/operations/authenticate.js.map +1 -1
- package/components/identity.tokens/operations/decrypt.d.ts +1 -1
- package/components/identity.tokens/operations/decrypt.js +15 -14
- package/components/identity.tokens/operations/decrypt.js.map +1 -1
- package/components/identity.tokens/operations/encrypt.d.ts +1 -1
- package/components/identity.tokens/operations/encrypt.js +5 -9
- package/components/identity.tokens/operations/encrypt.js.map +1 -1
- package/components/identity.tokens/operations/issue.d.ts +1 -1
- package/components/identity.tokens/operations/issue.js +1 -5
- package/components/identity.tokens/operations/issue.js.map +1 -1
- package/components/identity.tokens/operations/lib/index.d.ts +3 -3
- package/components/identity.tokens/operations/lib/index.js +3 -21
- package/components/identity.tokens/operations/lib/index.js.map +1 -1
- package/components/identity.tokens/operations/lib/jose.d.ts +1 -41
- package/components/identity.tokens/operations/lib/jose.js +1 -26
- package/components/identity.tokens/operations/lib/jose.js.map +1 -1
- package/components/identity.tokens/operations/lib/key.js +1 -5
- package/components/identity.tokens/operations/lib/key.js.map +1 -1
- package/components/identity.tokens/operations/lib/pad.js +1 -4
- package/components/identity.tokens/operations/lib/pad.js.map +1 -1
- package/components/identity.tokens/operations/lib/types.js +1 -2
- package/components/identity.tokens/operations/revoke.d.ts +1 -1
- package/components/identity.tokens/operations/revoke.js +1 -5
- package/components/identity.tokens/operations/revoke.js.map +1 -1
- package/components/identity.tokens/receivers/identity.bans.created.js +1 -3
- package/components/identity.tokens/receivers/identity.bans.updated.js +1 -3
- package/components/identity.tokens/source/authenticate.test.ts +14 -10
- package/components/identity.tokens/source/authenticate.ts +1 -1
- package/components/identity.tokens/source/decrypt.test.ts +25 -17
- package/components/identity.tokens/source/decrypt.ts +12 -5
- package/components/identity.tokens/source/encrypt.test.ts +14 -10
- package/components/identity.tokens/source/encrypt.ts +3 -3
- package/components/identity.tokens/source/issue.ts +1 -1
- package/components/identity.tokens/source/lib/index.ts +3 -3
- package/components/identity.tokens/source/lib/jose.js +1 -5
- package/components/identity.tokens/source/lib/paseto.test.ts +45 -10
- package/components/identity.tokens/source/revoke.ts +1 -1
- package/components/identity.tokens/tsconfig.json +1 -0
- package/components/identity.tokens/tsconfig.tsbuildinfo +1 -0
- package/cucumber.mjs +4 -0
- package/documentation/protocol.md +24 -0
- package/features/octets.cloudinary.feature +8 -2
- package/features/octets.download.feature +3 -1
- package/features/probes.feature +8 -4
- package/features/steps/Captures.ts +3 -1
- package/features/steps/Common.ts +27 -2
- package/features/steps/Components.ts +10 -4
- package/features/steps/Database.ts +4 -1
- package/features/steps/Gateway.ts +19 -8
- package/features/steps/HTTP.ts +8 -5
- package/features/steps/IDP.ts +5 -2
- package/features/steps/Identity.ts +7 -4
- package/features/steps/OTP.ts +5 -2
- package/features/steps/Parameters.ts +5 -1
- package/features/steps/Probe.ts +36 -0
- package/features/steps/Realtime.ts +8 -5
- package/features/steps/Workspace.ts +1 -1
- package/features/steps/components/audit/operations/record.js +1 -5
- package/features/steps/components/echo/operations/affect.js +1 -5
- package/features/steps/components/echo/operations/compute.js +1 -5
- package/features/steps/components/echo/operations/echo.js +1 -5
- package/features/steps/components/echo/operations/error.js +1 -5
- package/features/steps/components/echo/operations/identity.js +1 -5
- package/features/steps/components/echo/operations/parameters.js +1 -5
- package/features/steps/components/echo/operations/ping.js +1 -5
- package/features/steps/components/echo/operations/unwrap.js +1 -5
- package/features/steps/components/echo.beacon/operations/hello.js +1 -3
- package/features/steps/components/greeter/operations/greet.js +1 -5
- package/features/steps/components/notify/operations/send.js +1 -5
- package/features/steps/components/octets.tester/operations/authority.js +1 -5
- package/features/steps/components/octets.tester/operations/bar.js +1 -3
- package/features/steps/components/octets.tester/operations/baz.js +1 -3
- package/features/steps/components/octets.tester/operations/concat.js +1 -3
- package/features/steps/components/octets.tester/operations/echo.js +1 -3
- package/features/steps/components/octets.tester/operations/err.js +1 -3
- package/features/steps/components/octets.tester/operations/foo.js +1 -3
- package/features/steps/components/octets.tester/operations/id.js +1 -3
- package/features/steps/components/octets.tester/operations/identity.js +1 -3
- package/features/steps/components/octets.tester/operations/redirect.js +1 -3
- package/features/steps/components/octets.tester/operations/yex.js +1 -3
- package/features/steps/components/octets.tester/operations/yield.js +1 -3
- package/features/steps/components/orders/operations/create.js +1 -5
- package/features/steps/components/pricing/operations/quote.js +1 -5
- package/features/steps/components/sequences/operations/numbers.js +1 -3
- package/features/steps/components/sequences/operations/tokens.js +2 -4
- package/features/steps/components/users/operations/create.js +1 -5
- package/features/steps/map.ts +5 -1
- package/package.json +16 -21
- package/readme.md +7 -13
- package/schemas/annotation.cos.yaml +11 -0
- package/source/Annotation.ts +11 -0
- package/source/Branch.test.ts +10 -7
- package/source/Branch.ts +2 -2
- package/source/Composition.ts +2 -2
- package/source/Context.ts +1 -1
- package/source/Directive.test.ts +52 -40
- package/source/Directive.ts +4 -4
- package/source/Endpoint.ts +6 -6
- package/source/Factory.ts +18 -18
- package/source/Gateway.ts +7 -7
- package/source/HTTP/Context.ts +5 -10
- package/source/HTTP/Probe.ts +112 -0
- package/source/HTTP/Server.ts +126 -77
- package/source/HTTP/Timing.ts +1 -1
- package/source/HTTP/formats/index.ts +4 -4
- package/source/HTTP/formats/yaml.test.ts +6 -4
- package/source/HTTP/formats/yaml.ts +1 -1
- package/source/HTTP/index.ts +6 -4
- package/source/HTTP/messages.test.ts +31 -21
- package/source/HTTP/messages.ts +42 -45
- package/source/HTTP/types.ts +39 -0
- package/source/Interception.ts +1 -1
- package/source/Mapping.ts +6 -6
- package/source/Query.test.ts +8 -5
- package/source/Query.ts +6 -6
- package/source/RTD/Context.ts +3 -3
- package/source/RTD/Directives.ts +4 -4
- package/source/RTD/Endpoint.ts +4 -4
- package/source/RTD/Match.ts +1 -1
- package/source/RTD/Method.ts +3 -3
- package/source/RTD/Node.ts +3 -3
- package/source/RTD/Route.ts +3 -3
- package/source/RTD/Tree.ts +8 -8
- package/source/RTD/expiration.test.ts +20 -17
- package/source/RTD/factory.ts +7 -7
- package/source/RTD/index.ts +8 -8
- package/source/RTD/segment.test.ts +13 -10
- package/source/RTD/syntax/index.ts +2 -2
- package/source/RTD/syntax/parse.test.ts +30 -28
- package/source/RTD/syntax/parse.ts +2 -2
- package/source/Remotes.test.ts +27 -14
- package/source/Remotes.ts +1 -1
- package/source/Tenant.ts +3 -3
- package/source/deployment.ts +19 -10
- package/source/directives/auth/Anonymous.ts +1 -1
- package/source/directives/auth/Anyone.ts +1 -1
- package/source/directives/auth/Assert.ts +3 -3
- package/source/directives/auth/Authorization.ts +19 -19
- package/source/directives/auth/Delegate.ts +3 -3
- package/source/directives/auth/Echo.ts +3 -3
- package/source/directives/auth/Federation.ts +2 -2
- package/source/directives/auth/Id.ts +2 -2
- package/source/directives/auth/Incept.ts +6 -6
- package/source/directives/auth/Input.ts +3 -3
- package/source/directives/auth/Role.test.ts +32 -19
- package/source/directives/auth/Role.ts +2 -2
- package/source/directives/auth/Rule.ts +2 -2
- package/source/directives/auth/Scheme.ts +3 -3
- package/source/directives/auth/create.ts +1 -1
- package/source/directives/auth/index.ts +1 -1
- package/source/directives/auth/schemes.ts +1 -1
- package/source/directives/auth/split.ts +2 -2
- package/source/directives/auth/types.ts +3 -3
- package/source/directives/cache/Cache.ts +6 -6
- package/source/directives/cache/Control.ts +1 -1
- package/source/directives/cache/Exact.ts +1 -1
- package/source/directives/cache/index.ts +1 -1
- package/source/directives/cache/types.ts +1 -1
- package/source/directives/cors/CORS.ts +2 -2
- package/source/directives/cors/index.ts +1 -1
- package/source/directives/dev/Development.ts +7 -7
- package/source/directives/dev/Faulty.ts +4 -4
- package/source/directives/dev/Sleep.ts +5 -5
- package/source/directives/dev/Stub.ts +2 -2
- package/source/directives/dev/Throw.ts +2 -2
- package/source/directives/dev/index.ts +1 -1
- package/source/directives/dev/types.ts +1 -1
- package/source/directives/flow/Compose.ts +3 -3
- package/source/directives/flow/Fetch.ts +6 -6
- package/source/directives/flow/Flow.ts +6 -6
- package/source/directives/flow/index.ts +1 -1
- package/source/directives/flow/types.ts +2 -2
- package/source/directives/index.ts +11 -11
- package/source/directives/io/Directive.ts +4 -4
- package/source/directives/io/IO.ts +8 -8
- package/source/directives/io/Input.ts +5 -5
- package/source/directives/io/Output.ts +5 -5
- package/source/directives/io/Throttle.ts +6 -6
- package/source/directives/io/index.ts +1 -1
- package/source/directives/io/lib/throttle/Configuration.test.ts +10 -7
- package/source/directives/io/lib/throttle/Keys.ts +5 -5
- package/source/directives/io/lib/throttle/Quotas.test.ts +48 -45
- package/source/directives/io/lib/throttle/Quotas.ts +5 -5
- package/source/directives/io/lib/throttle/Sync.test.ts +28 -20
- package/source/directives/io/lib/throttle/Sync.ts +1 -1
- package/source/directives/io/lib/throttle/components/Component.ts +2 -2
- package/source/directives/io/lib/throttle/components/IP.ts +2 -2
- package/source/directives/io/lib/throttle/components/Identity.ts +2 -2
- package/source/directives/io/lib/throttle/components/Path.ts +2 -2
- package/source/directives/io/lib/throttle/components/Route.ts +1 -1
- package/source/directives/io/lib/throttle/components/Segment.ts +3 -3
- package/source/directives/io/lib/throttle/components/index.ts +7 -7
- package/source/directives/io/lib/throttle/conditions/Condition.ts +1 -1
- package/source/directives/io/lib/throttle/conditions/Status.ts +2 -2
- package/source/directives/io/lib/throttle/conditions/index.ts +3 -3
- package/source/directives/io/lib/throttle/index.ts +3 -3
- package/source/directives/io/schemas.test.ts +12 -9
- package/source/directives/io/schemas.ts +7 -6
- package/source/directives/map/Authority.ts +2 -2
- package/source/directives/map/Buffer.ts +2 -2
- package/source/directives/map/Claims.ts +3 -3
- package/source/directives/map/Directive.ts +2 -2
- package/source/directives/map/Headers.ts +3 -3
- package/source/directives/map/Language.ts +6 -6
- package/source/directives/map/Languages.ts +1 -1
- package/source/directives/map/Map.ts +14 -14
- package/source/directives/map/Mapping.ts +4 -4
- package/source/directives/map/Segments.ts +2 -2
- package/source/directives/map/index.ts +1 -1
- package/source/directives/octets/Context.ts +2 -2
- package/source/directives/octets/Delete.ts +9 -9
- package/source/directives/octets/Directive.ts +3 -3
- package/source/directives/octets/Get.ts +8 -8
- package/source/directives/octets/Octets.ts +11 -11
- package/source/directives/octets/Put.ts +11 -11
- package/source/directives/octets/Workflow.ts +9 -9
- package/source/directives/octets/bytes.test.ts +21 -18
- package/source/directives/octets/index.ts +1 -1
- package/source/directives/octets/schemas.test.ts +10 -5
- package/source/directives/octets/schemas.ts +6 -6
- package/source/directives/octets/types.ts +2 -2
- package/source/directives/octets/workflows/Execution.ts +2 -2
- package/source/directives/octets/workflows/Workflow.ts +4 -4
- package/source/directives/octets/workflows/index.ts +1 -1
- package/source/directives/require/Directive.ts +1 -1
- package/source/directives/require/Headers.ts +3 -3
- package/source/directives/require/Require.ts +4 -4
- package/source/directives/require/index.ts +1 -1
- package/source/exceptions.ts +2 -2
- package/source/index.ts +5 -5
- package/source/io.ts +1 -1
- package/source/manifest.test.ts +12 -10
- package/source/manifest.ts +3 -3
- package/source/root.ts +1 -1
- package/source/schemas.ts +5 -5
- package/transpiled/Annotation.d.ts +10 -0
- package/transpiled/Annotation.js +1 -2
- package/transpiled/Branch.d.ts +2 -2
- package/transpiled/Branch.js +1 -5
- package/transpiled/Branch.js.map +1 -1
- package/transpiled/Composition.d.ts +1 -1
- package/transpiled/Composition.js +9 -14
- package/transpiled/Composition.js.map +1 -1
- package/transpiled/Context.d.ts +1 -1
- package/transpiled/Context.js +1 -2
- package/transpiled/Directive.d.ts +4 -4
- package/transpiled/Directive.js +6 -11
- package/transpiled/Directive.js.map +1 -1
- package/transpiled/Endpoint.d.ts +6 -6
- package/transpiled/Endpoint.js +10 -38
- package/transpiled/Endpoint.js.map +1 -1
- package/transpiled/Factory.d.ts +3 -3
- package/transpiled/Factory.js +31 -61
- package/transpiled/Factory.js.map +1 -1
- package/transpiled/Gateway.d.ts +4 -4
- package/transpiled/Gateway.js +25 -55
- package/transpiled/Gateway.js.map +1 -1
- package/transpiled/HTTP/Context.d.ts +4 -11
- package/transpiled/HTTP/Context.js +15 -22
- package/transpiled/HTTP/Context.js.map +1 -1
- package/transpiled/HTTP/Probe.d.ts +36 -0
- package/transpiled/HTTP/Probe.js +90 -0
- package/transpiled/HTTP/Probe.js.map +1 -0
- package/transpiled/HTTP/Server.d.ts +13 -9
- package/transpiled/HTTP/Server.js +134 -130
- package/transpiled/HTTP/Server.js.map +1 -1
- package/transpiled/HTTP/Timing.d.ts +1 -2
- package/transpiled/HTTP/Timing.js +6 -10
- package/transpiled/HTTP/Timing.js.map +1 -1
- package/transpiled/HTTP/exceptions.js +15 -33
- package/transpiled/HTTP/exceptions.js.map +1 -1
- package/transpiled/HTTP/formats/index.d.ts +0 -2
- package/transpiled/HTTP/formats/index.js +6 -32
- package/transpiled/HTTP/formats/index.js.map +1 -1
- package/transpiled/HTTP/formats/json.d.ts +0 -2
- package/transpiled/HTTP/formats/json.js +4 -9
- package/transpiled/HTTP/formats/json.js.map +1 -1
- package/transpiled/HTTP/formats/msgpack.d.ts +0 -2
- package/transpiled/HTTP/formats/msgpack.js +7 -12
- package/transpiled/HTTP/formats/msgpack.js.map +1 -1
- package/transpiled/HTTP/formats/text.d.ts +0 -2
- package/transpiled/HTTP/formats/text.js +4 -9
- package/transpiled/HTTP/formats/text.js.map +1 -1
- package/transpiled/HTTP/formats/yaml.d.ts +0 -2
- package/transpiled/HTTP/formats/yaml.js +5 -33
- package/transpiled/HTTP/formats/yaml.js.map +1 -1
- package/transpiled/HTTP/index.d.ts +6 -4
- package/transpiled/HTTP/index.js +6 -20
- package/transpiled/HTTP/index.js.map +1 -1
- package/transpiled/HTTP/messages.d.ts +9 -5
- package/transpiled/HTTP/messages.js +56 -90
- package/transpiled/HTTP/messages.js.map +1 -1
- package/transpiled/HTTP/types.d.ts +37 -0
- package/transpiled/HTTP/types.js +2 -0
- package/transpiled/HTTP/types.js.map +1 -0
- package/transpiled/Interception.d.ts +1 -1
- package/transpiled/Interception.js +1 -5
- package/transpiled/Interception.js.map +1 -1
- package/transpiled/Introspection.js +1 -2
- package/transpiled/Mapping.d.ts +6 -6
- package/transpiled/Mapping.js +4 -9
- package/transpiled/Mapping.js.map +1 -1
- package/transpiled/Query.d.ts +4 -4
- package/transpiled/Query.js +8 -38
- package/transpiled/Query.js.map +1 -1
- package/transpiled/RTD/Context.d.ts +3 -3
- package/transpiled/RTD/Context.js +1 -2
- package/transpiled/RTD/Directives.d.ts +4 -4
- package/transpiled/RTD/Directives.js +1 -2
- package/transpiled/RTD/Endpoint.d.ts +4 -4
- package/transpiled/RTD/Endpoint.js +1 -2
- package/transpiled/RTD/Match.d.ts +1 -1
- package/transpiled/RTD/Match.js +1 -2
- package/transpiled/RTD/Method.d.ts +3 -3
- package/transpiled/RTD/Method.js +1 -5
- package/transpiled/RTD/Method.js.map +1 -1
- package/transpiled/RTD/Node.d.ts +3 -3
- package/transpiled/RTD/Node.js +1 -5
- package/transpiled/RTD/Node.js.map +1 -1
- package/transpiled/RTD/Route.d.ts +3 -3
- package/transpiled/RTD/Route.js +1 -5
- package/transpiled/RTD/Route.js.map +1 -1
- package/transpiled/RTD/Tree.d.ts +5 -5
- package/transpiled/RTD/Tree.js +6 -10
- package/transpiled/RTD/Tree.js.map +1 -1
- package/transpiled/RTD/factory.d.ts +3 -3
- package/transpiled/RTD/factory.js +13 -18
- package/transpiled/RTD/factory.js.map +1 -1
- package/transpiled/RTD/index.d.ts +8 -8
- package/transpiled/RTD/index.js +8 -37
- package/transpiled/RTD/index.js.map +1 -1
- package/transpiled/RTD/segment.js +2 -7
- package/transpiled/RTD/segment.js.map +1 -1
- package/transpiled/RTD/syntax/index.d.ts +2 -2
- package/transpiled/RTD/syntax/index.js +2 -18
- package/transpiled/RTD/syntax/index.js.map +1 -1
- package/transpiled/RTD/syntax/parse.d.ts +1 -1
- package/transpiled/RTD/syntax/parse.js +5 -33
- package/transpiled/RTD/syntax/parse.js.map +1 -1
- package/transpiled/RTD/syntax/types.js +1 -4
- package/transpiled/RTD/syntax/types.js.map +1 -1
- package/transpiled/Remotes.d.ts +1 -1
- package/transpiled/Remotes.js +3 -7
- package/transpiled/Remotes.js.map +1 -1
- package/transpiled/Tenant.d.ts +2 -2
- package/transpiled/Tenant.js +6 -10
- package/transpiled/Tenant.js.map +1 -1
- package/transpiled/const.js +1 -4
- package/transpiled/const.js.map +1 -1
- package/transpiled/deployment.d.ts +1 -1
- package/transpiled/deployment.js +22 -45
- package/transpiled/deployment.js.map +1 -1
- package/transpiled/directives/auth/Anonymous.d.ts +1 -1
- package/transpiled/directives/auth/Anonymous.js +1 -5
- package/transpiled/directives/auth/Anonymous.js.map +1 -1
- package/transpiled/directives/auth/Anyone.d.ts +1 -1
- package/transpiled/directives/auth/Anyone.js +1 -5
- package/transpiled/directives/auth/Anyone.js.map +1 -1
- package/transpiled/directives/auth/Assert.d.ts +1 -1
- package/transpiled/directives/auth/Assert.js +7 -37
- package/transpiled/directives/auth/Assert.js.map +1 -1
- package/transpiled/directives/auth/Authorization.d.ts +5 -5
- package/transpiled/directives/auth/Authorization.js +41 -71
- package/transpiled/directives/auth/Authorization.js.map +1 -1
- package/transpiled/directives/auth/Delegate.d.ts +1 -1
- package/transpiled/directives/auth/Delegate.js +5 -9
- package/transpiled/directives/auth/Delegate.js.map +1 -1
- package/transpiled/directives/auth/Echo.d.ts +2 -2
- package/transpiled/directives/auth/Echo.js +3 -7
- package/transpiled/directives/auth/Echo.js.map +1 -1
- package/transpiled/directives/auth/Federation.d.ts +2 -2
- package/transpiled/directives/auth/Federation.js +3 -10
- package/transpiled/directives/auth/Federation.js.map +1 -1
- package/transpiled/directives/auth/Id.d.ts +2 -2
- package/transpiled/directives/auth/Id.js +1 -5
- package/transpiled/directives/auth/Id.js.map +1 -1
- package/transpiled/directives/auth/Incept.d.ts +2 -2
- package/transpiled/directives/auth/Incept.js +16 -46
- package/transpiled/directives/auth/Incept.js.map +1 -1
- package/transpiled/directives/auth/Input.d.ts +2 -2
- package/transpiled/directives/auth/Input.js +3 -7
- package/transpiled/directives/auth/Input.js.map +1 -1
- package/transpiled/directives/auth/Role.d.ts +2 -2
- package/transpiled/directives/auth/Role.js +3 -10
- package/transpiled/directives/auth/Role.js.map +1 -1
- package/transpiled/directives/auth/Rule.d.ts +2 -2
- package/transpiled/directives/auth/Rule.js +1 -5
- package/transpiled/directives/auth/Rule.js.map +1 -1
- package/transpiled/directives/auth/Scheme.d.ts +1 -1
- package/transpiled/directives/auth/Scheme.js +4 -31
- package/transpiled/directives/auth/Scheme.js.map +1 -1
- package/transpiled/directives/auth/create.d.ts +1 -1
- package/transpiled/directives/auth/create.js +3 -7
- package/transpiled/directives/auth/create.js.map +1 -1
- package/transpiled/directives/auth/index.d.ts +1 -1
- package/transpiled/directives/auth/index.js +2 -5
- package/transpiled/directives/auth/index.js.map +1 -1
- package/transpiled/directives/auth/schemes.d.ts +1 -1
- package/transpiled/directives/auth/schemes.js +3 -6
- package/transpiled/directives/auth/schemes.js.map +1 -1
- package/transpiled/directives/auth/split.d.ts +1 -1
- package/transpiled/directives/auth/split.js +2 -29
- package/transpiled/directives/auth/split.js.map +1 -1
- package/transpiled/directives/auth/types.d.ts +3 -3
- package/transpiled/directives/auth/types.js +1 -2
- package/transpiled/directives/cache/Cache.d.ts +4 -4
- package/transpiled/directives/cache/Cache.js +6 -10
- package/transpiled/directives/cache/Cache.js.map +1 -1
- package/transpiled/directives/cache/Control.d.ts +1 -1
- package/transpiled/directives/cache/Control.js +3 -7
- package/transpiled/directives/cache/Control.js.map +1 -1
- package/transpiled/directives/cache/Exact.d.ts +1 -1
- package/transpiled/directives/cache/Exact.js +2 -6
- package/transpiled/directives/cache/Exact.js.map +1 -1
- package/transpiled/directives/cache/index.d.ts +1 -1
- package/transpiled/directives/cache/index.js +2 -5
- package/transpiled/directives/cache/index.js.map +1 -1
- package/transpiled/directives/cache/types.d.ts +1 -1
- package/transpiled/directives/cache/types.js +1 -2
- package/transpiled/directives/cors/CORS.d.ts +2 -2
- package/transpiled/directives/cors/CORS.js +1 -5
- package/transpiled/directives/cors/CORS.js.map +1 -1
- package/transpiled/directives/cors/index.d.ts +1 -1
- package/transpiled/directives/cors/index.js +2 -5
- package/transpiled/directives/cors/index.js.map +1 -1
- package/transpiled/directives/dev/Development.d.ts +3 -3
- package/transpiled/directives/dev/Development.js +9 -13
- package/transpiled/directives/dev/Development.js.map +1 -1
- package/transpiled/directives/dev/Faulty.d.ts +2 -2
- package/transpiled/directives/dev/Faulty.js +8 -15
- package/transpiled/directives/dev/Faulty.js.map +1 -1
- package/transpiled/directives/dev/Sleep.d.ts +2 -2
- package/transpiled/directives/dev/Sleep.js +13 -20
- package/transpiled/directives/dev/Sleep.js.map +1 -1
- package/transpiled/directives/dev/Stub.d.ts +2 -2
- package/transpiled/directives/dev/Stub.js +1 -5
- package/transpiled/directives/dev/Stub.js.map +1 -1
- package/transpiled/directives/dev/Throw.d.ts +2 -2
- package/transpiled/directives/dev/Throw.js +1 -5
- package/transpiled/directives/dev/Throw.js.map +1 -1
- package/transpiled/directives/dev/index.d.ts +1 -1
- package/transpiled/directives/dev/index.js +2 -5
- package/transpiled/directives/dev/index.js.map +1 -1
- package/transpiled/directives/dev/types.d.ts +1 -1
- package/transpiled/directives/dev/types.js +1 -2
- package/transpiled/directives/flow/Compose.d.ts +2 -2
- package/transpiled/directives/flow/Compose.js +10 -37
- package/transpiled/directives/flow/Compose.js.map +1 -1
- package/transpiled/directives/flow/Fetch.d.ts +5 -5
- package/transpiled/directives/flow/Fetch.js +10 -17
- package/transpiled/directives/flow/Fetch.js.map +1 -1
- package/transpiled/directives/flow/Flow.d.ts +4 -4
- package/transpiled/directives/flow/Flow.js +5 -9
- package/transpiled/directives/flow/Flow.js.map +1 -1
- package/transpiled/directives/flow/index.d.ts +1 -1
- package/transpiled/directives/flow/index.js +2 -5
- package/transpiled/directives/flow/index.js.map +1 -1
- package/transpiled/directives/flow/types.d.ts +2 -2
- package/transpiled/directives/flow/types.js +1 -2
- package/transpiled/directives/index.d.ts +2 -2
- package/transpiled/directives/index.js +11 -14
- package/transpiled/directives/index.js.map +1 -1
- package/transpiled/directives/io/Directive.d.ts +4 -4
- package/transpiled/directives/io/Directive.js +1 -2
- package/transpiled/directives/io/IO.d.ts +4 -4
- package/transpiled/directives/io/IO.js +11 -15
- package/transpiled/directives/io/IO.js.map +1 -1
- package/transpiled/directives/io/Input.d.ts +2 -2
- package/transpiled/directives/io/Input.js +5 -32
- package/transpiled/directives/io/Input.js.map +1 -1
- package/transpiled/directives/io/Message.js +1 -2
- package/transpiled/directives/io/Output.d.ts +2 -2
- package/transpiled/directives/io/Output.js +6 -33
- package/transpiled/directives/io/Output.js.map +1 -1
- package/transpiled/directives/io/Throttle.d.ts +4 -4
- package/transpiled/directives/io/Throttle.js +6 -33
- package/transpiled/directives/io/Throttle.js.map +1 -1
- package/transpiled/directives/io/index.d.ts +1 -1
- package/transpiled/directives/io/index.js +2 -5
- package/transpiled/directives/io/index.js.map +1 -1
- package/transpiled/directives/io/lib/throttle/Configuration.js +1 -5
- package/transpiled/directives/io/lib/throttle/Configuration.js.map +1 -1
- package/transpiled/directives/io/lib/throttle/Keys.d.ts +5 -5
- package/transpiled/directives/io/lib/throttle/Keys.js +7 -11
- package/transpiled/directives/io/lib/throttle/Keys.js.map +1 -1
- package/transpiled/directives/io/lib/throttle/Quotas.d.ts +5 -5
- package/transpiled/directives/io/lib/throttle/Quotas.js +3 -7
- package/transpiled/directives/io/lib/throttle/Quotas.js.map +1 -1
- package/transpiled/directives/io/lib/throttle/Sync.d.ts +1 -1
- package/transpiled/directives/io/lib/throttle/Sync.js +3 -7
- package/transpiled/directives/io/lib/throttle/Sync.js.map +1 -1
- package/transpiled/directives/io/lib/throttle/components/Component.d.ts +2 -2
- package/transpiled/directives/io/lib/throttle/components/Component.js +1 -2
- package/transpiled/directives/io/lib/throttle/components/IP.d.ts +2 -2
- package/transpiled/directives/io/lib/throttle/components/IP.js +1 -5
- package/transpiled/directives/io/lib/throttle/components/IP.js.map +1 -1
- package/transpiled/directives/io/lib/throttle/components/Identity.d.ts +2 -2
- package/transpiled/directives/io/lib/throttle/components/Identity.js +1 -5
- package/transpiled/directives/io/lib/throttle/components/Identity.js.map +1 -1
- package/transpiled/directives/io/lib/throttle/components/Path.d.ts +2 -2
- package/transpiled/directives/io/lib/throttle/components/Path.js +1 -5
- package/transpiled/directives/io/lib/throttle/components/Path.js.map +1 -1
- package/transpiled/directives/io/lib/throttle/components/Route.d.ts +1 -1
- package/transpiled/directives/io/lib/throttle/components/Route.js +1 -5
- package/transpiled/directives/io/lib/throttle/components/Route.js.map +1 -1
- package/transpiled/directives/io/lib/throttle/components/Segment.d.ts +3 -3
- package/transpiled/directives/io/lib/throttle/components/Segment.js +3 -10
- package/transpiled/directives/io/lib/throttle/components/Segment.js.map +1 -1
- package/transpiled/directives/io/lib/throttle/components/index.d.ts +2 -2
- package/transpiled/directives/io/lib/throttle/components/index.js +11 -14
- package/transpiled/directives/io/lib/throttle/components/index.js.map +1 -1
- package/transpiled/directives/io/lib/throttle/conditions/Condition.d.ts +1 -1
- package/transpiled/directives/io/lib/throttle/conditions/Condition.js +1 -2
- package/transpiled/directives/io/lib/throttle/conditions/Status.d.ts +2 -2
- package/transpiled/directives/io/lib/throttle/conditions/Status.js +3 -10
- package/transpiled/directives/io/lib/throttle/conditions/Status.js.map +1 -1
- package/transpiled/directives/io/lib/throttle/conditions/index.d.ts +2 -2
- package/transpiled/directives/io/lib/throttle/conditions/index.js +3 -6
- package/transpiled/directives/io/lib/throttle/conditions/index.js.map +1 -1
- package/transpiled/directives/io/lib/throttle/index.d.ts +3 -3
- package/transpiled/directives/io/lib/throttle/index.js +3 -9
- package/transpiled/directives/io/lib/throttle/index.js.map +1 -1
- package/transpiled/directives/io/schemas.d.ts +5 -5
- package/transpiled/directives/io/schemas.js +8 -14
- package/transpiled/directives/io/schemas.js.map +1 -1
- package/transpiled/directives/map/Authority.d.ts +2 -2
- package/transpiled/directives/map/Authority.js +4 -11
- package/transpiled/directives/map/Authority.js.map +1 -1
- package/transpiled/directives/map/Buffer.d.ts +2 -2
- package/transpiled/directives/map/Buffer.js +4 -11
- package/transpiled/directives/map/Buffer.js.map +1 -1
- package/transpiled/directives/map/Claims.d.ts +3 -3
- package/transpiled/directives/map/Claims.js +5 -12
- package/transpiled/directives/map/Claims.js.map +1 -1
- package/transpiled/directives/map/Directive.d.ts +2 -2
- package/transpiled/directives/map/Directive.js +1 -2
- package/transpiled/directives/map/Headers.d.ts +2 -2
- package/transpiled/directives/map/Headers.js +7 -14
- package/transpiled/directives/map/Headers.js.map +1 -1
- package/transpiled/directives/map/Language.d.ts +4 -4
- package/transpiled/directives/map/Language.js +10 -17
- package/transpiled/directives/map/Language.js.map +1 -1
- package/transpiled/directives/map/Languages.d.ts +1 -1
- package/transpiled/directives/map/Languages.js +5 -12
- package/transpiled/directives/map/Languages.js.map +1 -1
- package/transpiled/directives/map/Map.d.ts +6 -6
- package/transpiled/directives/map/Map.js +20 -24
- package/transpiled/directives/map/Map.js.map +1 -1
- package/transpiled/directives/map/Mapping.d.ts +4 -4
- package/transpiled/directives/map/Mapping.js +1 -5
- package/transpiled/directives/map/Mapping.js.map +1 -1
- package/transpiled/directives/map/Properties.js +2 -6
- package/transpiled/directives/map/Properties.js.map +1 -1
- package/transpiled/directives/map/Segments.d.ts +2 -2
- package/transpiled/directives/map/Segments.js +6 -13
- package/transpiled/directives/map/Segments.js.map +1 -1
- package/transpiled/directives/map/index.d.ts +1 -1
- package/transpiled/directives/map/index.js +2 -5
- package/transpiled/directives/map/index.js.map +1 -1
- package/transpiled/directives/octets/Context.d.ts +2 -2
- package/transpiled/directives/octets/Context.js +4 -11
- package/transpiled/directives/octets/Context.js.map +1 -1
- package/transpiled/directives/octets/Delete.d.ts +6 -6
- package/transpiled/directives/octets/Delete.js +9 -36
- package/transpiled/directives/octets/Delete.js.map +1 -1
- package/transpiled/directives/octets/Directive.d.ts +3 -3
- package/transpiled/directives/octets/Directive.js +1 -5
- package/transpiled/directives/octets/Directive.js.map +1 -1
- package/transpiled/directives/octets/Get.d.ts +3 -3
- package/transpiled/directives/octets/Get.js +10 -37
- package/transpiled/directives/octets/Get.js.map +1 -1
- package/transpiled/directives/octets/Octets.d.ts +5 -5
- package/transpiled/directives/octets/Octets.js +15 -19
- package/transpiled/directives/octets/Octets.js.map +1 -1
- package/transpiled/directives/octets/Put.d.ts +6 -6
- package/transpiled/directives/octets/Put.js +17 -44
- package/transpiled/directives/octets/Put.js.map +1 -1
- package/transpiled/directives/octets/Workflow.d.ts +6 -6
- package/transpiled/directives/octets/Workflow.js +7 -34
- package/transpiled/directives/octets/Workflow.js.map +1 -1
- package/transpiled/directives/octets/bytes.js +3 -10
- package/transpiled/directives/octets/bytes.js.map +1 -1
- package/transpiled/directives/octets/index.d.ts +1 -1
- package/transpiled/directives/octets/index.js +2 -5
- package/transpiled/directives/octets/index.js.map +1 -1
- package/transpiled/directives/octets/schemas.d.ts +4 -4
- package/transpiled/directives/octets/schemas.js +8 -14
- package/transpiled/directives/octets/schemas.js.map +1 -1
- package/transpiled/directives/octets/types.d.ts +2 -2
- package/transpiled/directives/octets/types.js +1 -2
- package/transpiled/directives/octets/workflows/Execution.d.ts +2 -3
- package/transpiled/directives/octets/workflows/Execution.js +5 -9
- package/transpiled/directives/octets/workflows/Execution.js.map +1 -1
- package/transpiled/directives/octets/workflows/Workflow.d.ts +3 -3
- package/transpiled/directives/octets/workflows/Workflow.js +7 -11
- package/transpiled/directives/octets/workflows/Workflow.js.map +1 -1
- package/transpiled/directives/octets/workflows/index.d.ts +1 -1
- package/transpiled/directives/octets/workflows/index.js +1 -5
- package/transpiled/directives/octets/workflows/index.js.map +1 -1
- package/transpiled/directives/require/Directive.d.ts +1 -1
- package/transpiled/directives/require/Directive.js +1 -2
- package/transpiled/directives/require/Headers.d.ts +2 -2
- package/transpiled/directives/require/Headers.js +3 -7
- package/transpiled/directives/require/Headers.js.map +1 -1
- package/transpiled/directives/require/Require.d.ts +3 -3
- package/transpiled/directives/require/Require.js +6 -13
- package/transpiled/directives/require/Require.js.map +1 -1
- package/transpiled/directives/require/index.d.ts +1 -1
- package/transpiled/directives/require/index.js +2 -5
- package/transpiled/directives/require/index.js.map +1 -1
- package/transpiled/discovery.js +1 -2
- package/transpiled/exceptions.d.ts +1 -1
- package/transpiled/exceptions.js +8 -35
- package/transpiled/exceptions.js.map +1 -1
- package/transpiled/index.d.ts +5 -5
- package/transpiled/index.js +4 -11
- package/transpiled/index.js.map +1 -1
- package/transpiled/io.d.ts +1 -1
- package/transpiled/io.js +1 -2
- package/transpiled/manifest.d.ts +1 -1
- package/transpiled/manifest.js +8 -38
- package/transpiled/manifest.js.map +1 -1
- package/transpiled/root.d.ts +1 -1
- package/transpiled/root.js +5 -9
- package/transpiled/root.js.map +1 -1
- package/transpiled/schemas.d.ts +3 -3
- package/transpiled/schemas.js +7 -13
- package/transpiled/schemas.js.map +1 -1
- package/tsconfig.json +2 -1
- package/tsconfig.tsbuildinfo +1 -0
- package/components/identity.bans/operations/tsconfig.tsbuildinfo +0 -1
- package/components/identity.basic/operations/tsconfig.tsbuildinfo +0 -1
- package/components/identity.credentials/operations/tsconfig.tsbuildinfo +0 -1
- package/components/identity.federation/operations/tsconfig.tsbuildinfo +0 -1
- package/components/identity.keys/operations/tsconfig.tsbuildinfo +0 -1
- package/components/identity.otp/operations/tsconfig.tsbuildinfo +0 -1
- package/components/identity.passkeys/operations/tsconfig.tsbuildinfo +0 -1
- package/components/identity.roles/operations/tsconfig.tsbuildinfo +0 -1
- package/components/identity.tokens/operations/tsconfig.tsbuildinfo +0 -1
- package/cucumber.js +0 -7
- package/source/index.test.ts +0 -9
- package/transpiled/tsconfig.tsbuildinfo +0 -1
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
import * as http from 'node:http'
|
|
2
|
+
import { console } from 'openspan'
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* The readiness probe, on a port of its own.
|
|
6
|
+
*
|
|
7
|
+
* It cannot share the port the gateway serves traffic on: kubelet speaks HTTP/1.1 only, and a
|
|
8
|
+
* cleartext HTTP/2 server answers nothing else on its port — there is no ALPN to negotiate with.
|
|
9
|
+
*
|
|
10
|
+
* It is the gateway's own readiness, not the process's. The identity composition nested in this
|
|
11
|
+
* process connects before route discovery has settled, so a probe tied to that composition would
|
|
12
|
+
* report ready while the gateway still had no routes and no open port.
|
|
13
|
+
*/
|
|
14
|
+
export class Probe {
|
|
15
|
+
private readonly server = http.createServer()
|
|
16
|
+
private readonly port: number
|
|
17
|
+
private readonly path: string
|
|
18
|
+
|
|
19
|
+
private ready = false
|
|
20
|
+
private startedAt = 0
|
|
21
|
+
private listening = false
|
|
22
|
+
private skipped = false
|
|
23
|
+
|
|
24
|
+
public constructor (port: number, path: string = PATH) {
|
|
25
|
+
this.port = port
|
|
26
|
+
this.path = path
|
|
27
|
+
|
|
28
|
+
this.server.on('request', (request, response) => this.listener(request, response))
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
public async listen (): Promise<void> {
|
|
32
|
+
this.startedAt = Date.now()
|
|
33
|
+
|
|
34
|
+
try {
|
|
35
|
+
await new Promise<void>((resolve, reject) => {
|
|
36
|
+
this.server.once('error', reject)
|
|
37
|
+
this.server.listen(this.port, () => {
|
|
38
|
+
this.server.removeListener('error', reject)
|
|
39
|
+
resolve()
|
|
40
|
+
})
|
|
41
|
+
})
|
|
42
|
+
} catch (error: any) {
|
|
43
|
+
// processes sharing a host share the port; in a pod nothing else claims it
|
|
44
|
+
if (error?.code === 'EADDRINUSE') {
|
|
45
|
+
this.skipped = true
|
|
46
|
+
|
|
47
|
+
console.warn('Ready probe port already in use, skipping', { port: this.port })
|
|
48
|
+
|
|
49
|
+
return
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
throw error
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
this.listening = true
|
|
56
|
+
|
|
57
|
+
// a probe answers while the process runs; it must never be the reason it keeps running
|
|
58
|
+
this.server.unref()
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/** The gateway is listening and has routes: answer `200`. */
|
|
62
|
+
public complete (): void {
|
|
63
|
+
this.ready = true
|
|
64
|
+
|
|
65
|
+
// the IPC signal is not tied to the probe: a process that gave up the shared port is
|
|
66
|
+
// still ready, and pm2 `wait_ready` would otherwise block until `listen_timeout`
|
|
67
|
+
process.send?.('ready')
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
public async close (): Promise<void> {
|
|
71
|
+
this.ready = false
|
|
72
|
+
|
|
73
|
+
if (!this.listening || this.skipped)
|
|
74
|
+
return
|
|
75
|
+
|
|
76
|
+
this.listening = false
|
|
77
|
+
|
|
78
|
+
// keep-alive connections would otherwise hold the server handle, delaying the exit
|
|
79
|
+
this.server.closeAllConnections()
|
|
80
|
+
|
|
81
|
+
await new Promise<void>((resolve) => this.server.close(() => resolve()))
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
private listener (request: http.IncomingMessage, response: http.ServerResponse): void {
|
|
85
|
+
if (request.url !== this.path) {
|
|
86
|
+
response.writeHead(404).end()
|
|
87
|
+
|
|
88
|
+
return
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
if (this.ready)
|
|
92
|
+
response.writeHead(200, { 'cache-control': 'no-store' }).end()
|
|
93
|
+
else {
|
|
94
|
+
const remaining = Math.ceil((Date.now() - this.startedAt) / 1000).toString()
|
|
95
|
+
|
|
96
|
+
response.writeHead(503, { 'retry-after': remaining }).end()
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
/**
|
|
102
|
+
* Reserved for this probe. `8001` is the Telemetry readiness probe's, and `toa export` refuses a
|
|
103
|
+
* port claimed twice — `toa mono` and a local run put every service in one process.
|
|
104
|
+
*/
|
|
105
|
+
export const PROBE = 8004
|
|
106
|
+
export const PATH = '/.ready'
|
|
107
|
+
|
|
108
|
+
/**
|
|
109
|
+
* The initial delay of the readiness probe. The server does not sleep for it: whoever
|
|
110
|
+
* probes is the one that waits, and doing it here as well only delayed the process twice.
|
|
111
|
+
*/
|
|
112
|
+
export const DELAY = 3 // seconds
|
package/source/HTTP/Server.ts
CHANGED
|
@@ -2,36 +2,42 @@ import assert from 'node:assert'
|
|
|
2
2
|
import fs from 'node:fs'
|
|
3
3
|
import os from 'node:os'
|
|
4
4
|
import * as http from 'node:http'
|
|
5
|
+
import * as http2 from 'node:http2'
|
|
5
6
|
import { once } from 'node:events'
|
|
6
7
|
import { setTimeout } from 'node:timers/promises'
|
|
7
8
|
import { console, current, decide, decode, run, type SpanContext } from 'openspan'
|
|
8
9
|
import { Connector } from '@toa.io/core'
|
|
9
|
-
import { type OutgoingMessage, write } from './messages'
|
|
10
|
-
import { ClientError, Exception } from './exceptions'
|
|
11
|
-
import { Context
|
|
10
|
+
import { type OutgoingMessage, write } from './messages.js'
|
|
11
|
+
import { ClientError, Exception } from './exceptions.js'
|
|
12
|
+
import { Context } from './Context.js'
|
|
13
|
+
import { PROBE, Probe } from './Probe.js'
|
|
14
|
+
import type { IncomingMessage, Protocol, ServerResponse } from './types.js'
|
|
12
15
|
|
|
13
16
|
export class Server extends Connector {
|
|
14
|
-
private readonly server: http.Server
|
|
17
|
+
private readonly server: http.Server | http2.Http2Server
|
|
15
18
|
private readonly properties: Properties
|
|
16
19
|
private readonly authorities: Record<string, string>
|
|
20
|
+
|
|
21
|
+
/** Tracked for the drain: `Http2Server` has no `closeIdleConnections`. */
|
|
22
|
+
private readonly sessions = new Set<http2.ServerHttp2Session>()
|
|
23
|
+
|
|
24
|
+
private readonly probe: Probe
|
|
25
|
+
|
|
17
26
|
private process?: Processor
|
|
18
|
-
private ready: boolean = false
|
|
19
|
-
private startedAt: number = 0
|
|
20
27
|
|
|
21
28
|
private constructor (properties: Properties) {
|
|
22
29
|
super()
|
|
23
30
|
|
|
24
31
|
this.properties = properties
|
|
25
32
|
this.authorities = Object.fromEntries(Object.entries(properties.authorities).map(([key, value]) => [value, key]))
|
|
33
|
+
this.server = instantiate(properties.protocol)
|
|
34
|
+
this.probe = new Probe(properties.probe)
|
|
26
35
|
|
|
27
|
-
this.server.on('request', (req, res) =>
|
|
36
|
+
this.server.on('request', (req, res) =>
|
|
37
|
+
this.listener(req as unknown as IncomingMessage, res as unknown as ServerResponse))
|
|
28
38
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
if (socket.writable) socket.end('HTTP/1.1 400 Bad Request\r\n\r\n')
|
|
33
|
-
else socket.destroy()
|
|
34
|
-
})
|
|
39
|
+
if (properties.protocol === 'h1') this.h1(this.server as http.Server)
|
|
40
|
+
else this.h2(this.server as http2.Http2Server)
|
|
35
41
|
}
|
|
36
42
|
|
|
37
43
|
public static create (options: Options): Server {
|
|
@@ -45,24 +51,30 @@ export class Server extends Connector {
|
|
|
45
51
|
}
|
|
46
52
|
|
|
47
53
|
protected override async open (): Promise<void> {
|
|
48
|
-
|
|
54
|
+
// answers 503 from here; the gateway's dependencies have settled by the time `open` runs
|
|
55
|
+
await this.probe.listen()
|
|
56
|
+
|
|
49
57
|
this.server.listen(this.properties.port)
|
|
50
58
|
|
|
51
59
|
await once(this.server, 'listening')
|
|
52
60
|
|
|
53
61
|
console.info('HTTP Server is listening')
|
|
54
62
|
|
|
55
|
-
this.
|
|
63
|
+
this.probe.complete()
|
|
56
64
|
|
|
57
65
|
console.info('Ready')
|
|
58
|
-
process.send?.('ready')
|
|
59
66
|
}
|
|
60
67
|
|
|
61
68
|
protected override async close (): Promise<void> {
|
|
62
|
-
this.
|
|
69
|
+
await this.probe.close()
|
|
63
70
|
|
|
64
71
|
this.server.close()
|
|
65
|
-
|
|
72
|
+
|
|
73
|
+
// GOAWAY lets in-flight streams finish; `Http2Server` has no `closeIdleConnections`
|
|
74
|
+
if (this.properties.protocol === 'h1')
|
|
75
|
+
(this.server as http.Server).closeIdleConnections()
|
|
76
|
+
else
|
|
77
|
+
for (const session of this.sessions) session.close()
|
|
66
78
|
|
|
67
79
|
console.info('Stopped accepting new connections')
|
|
68
80
|
|
|
@@ -72,12 +84,41 @@ export class Server extends Connector {
|
|
|
72
84
|
setTimeout(this.properties.drain, undefined, { ref: false })
|
|
73
85
|
])
|
|
74
86
|
|
|
75
|
-
this.
|
|
87
|
+
if (this.properties.protocol === 'h1')
|
|
88
|
+
(this.server as http.Server).closeAllConnections()
|
|
89
|
+
else
|
|
90
|
+
for (const session of this.sessions) session.destroy()
|
|
76
91
|
|
|
77
92
|
console.info('Stopped')
|
|
78
93
|
}
|
|
79
94
|
|
|
80
|
-
|
|
95
|
+
/** A malformed HTTP/1.1 request has no framing to answer in, so the status line is written by hand. */
|
|
96
|
+
private h1 (server: http.Server): void {
|
|
97
|
+
server.on('clientError', (error, socket) => {
|
|
98
|
+
console.warn('Client connection error', error)
|
|
99
|
+
|
|
100
|
+
if (socket.writable) socket.end('HTTP/1.1 400 Bad Request\r\n\r\n')
|
|
101
|
+
else socket.destroy()
|
|
102
|
+
})
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
/** HTTP/2 has no `clientError`: failures surface per session, per stream, or per frame. */
|
|
106
|
+
private h2 (server: http2.Http2Server): void {
|
|
107
|
+
server.on('session', (session) => {
|
|
108
|
+
this.sessions.add(session)
|
|
109
|
+
session.on('close', () => this.sessions.delete(session))
|
|
110
|
+
})
|
|
111
|
+
|
|
112
|
+
server.on('sessionError', (error) => console.warn('Session error', error))
|
|
113
|
+
server.on('streamError', (error) => console.warn('Stream error', error))
|
|
114
|
+
|
|
115
|
+
server.on('unknownProtocol', (socket) => {
|
|
116
|
+
console.warn('Unknown protocol')
|
|
117
|
+
socket.destroy()
|
|
118
|
+
})
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
private listener (request: IncomingMessage, response: ServerResponse): void {
|
|
81
122
|
request.once('error', (error) => {
|
|
82
123
|
console.warn('Request error', errorAttributes(request, error))
|
|
83
124
|
|
|
@@ -85,14 +126,24 @@ export class Server extends Connector {
|
|
|
85
126
|
response.destroy()
|
|
86
127
|
})
|
|
87
128
|
|
|
88
|
-
request.socket
|
|
89
|
-
|
|
129
|
+
// no listener on `request.socket`: under HTTP/2 it is the session's socket, shared by
|
|
130
|
+
// every concurrent stream, and removing listeners on it would strip the siblings'
|
|
90
131
|
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
132
|
+
const host = authorityOf(request)
|
|
133
|
+
|
|
134
|
+
if (host === undefined) {
|
|
135
|
+
console.warn('Request without an authority', errorAttributes(request, new Error('No authority')))
|
|
94
136
|
|
|
95
|
-
|
|
137
|
+
response.writeHead(400).end()
|
|
138
|
+
|
|
139
|
+
return
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
// directives and components read `host`; HTTP/2 sends `:authority` instead, and what a
|
|
143
|
+
// component sees must not depend on the protocol the request arrived over
|
|
144
|
+
request.headers.host ??= host
|
|
145
|
+
|
|
146
|
+
const url = parse(request, host)
|
|
96
147
|
|
|
97
148
|
if (url instanceof Error) {
|
|
98
149
|
console.warn('Invalid request', errorAttributes(request, url))
|
|
@@ -108,21 +159,8 @@ export class Server extends Connector {
|
|
|
108
159
|
return
|
|
109
160
|
}
|
|
110
161
|
|
|
111
|
-
if (request.url === '/.ready') {
|
|
112
|
-
if (this.ready)
|
|
113
|
-
response.writeHead(200, { 'cache-control': 'no-store' }).end()
|
|
114
|
-
else {
|
|
115
|
-
const remaining = (Math.ceil((Date.now() - this.startedAt) / 1000)).toString()
|
|
116
|
-
|
|
117
|
-
response.writeHead(503, { 'retry-after': remaining }).end()
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
return
|
|
121
|
-
}
|
|
122
|
-
|
|
123
162
|
assert(this.process !== undefined, 'Request processor is not attached')
|
|
124
163
|
|
|
125
|
-
const host = request.headers.host!
|
|
126
164
|
const authority = this.authorities[host] ?? host
|
|
127
165
|
|
|
128
166
|
// if the request carries no trace context, the trace starts here
|
|
@@ -141,8 +179,8 @@ export class Server extends Connector {
|
|
|
141
179
|
}
|
|
142
180
|
|
|
143
181
|
// eslint-disable-next-line max-params
|
|
144
|
-
private async serve (request:
|
|
145
|
-
response:
|
|
182
|
+
private async serve (request: IncomingMessage,
|
|
183
|
+
response: ServerResponse,
|
|
146
184
|
authority: string,
|
|
147
185
|
url: URL): Promise<void> {
|
|
148
186
|
await console.span({
|
|
@@ -153,19 +191,16 @@ export class Server extends Connector {
|
|
|
153
191
|
}, async () => {
|
|
154
192
|
response.setHeader('ray', current()!.traceId)
|
|
155
193
|
|
|
156
|
-
const context = new Context(authority, request
|
|
194
|
+
const context = new Context(authority, request, this.properties, url)
|
|
157
195
|
|
|
158
196
|
await this.process!(context)
|
|
159
197
|
.then(this.success(context, response))
|
|
160
198
|
.catch(this.fail(context, response))
|
|
161
|
-
.finally(() =>
|
|
162
|
-
request.removeAllListeners('error')
|
|
163
|
-
request.socket.removeAllListeners('error')
|
|
164
|
-
})
|
|
199
|
+
.finally(() => request.removeAllListeners('error'))
|
|
165
200
|
})
|
|
166
201
|
}
|
|
167
202
|
|
|
168
|
-
private success (context: Context, response:
|
|
203
|
+
private success (context: Context, response: ServerResponse) {
|
|
169
204
|
return async (message: OutgoingMessage) => {
|
|
170
205
|
let status = message.status
|
|
171
206
|
|
|
@@ -185,10 +220,12 @@ export class Server extends Connector {
|
|
|
185
220
|
}
|
|
186
221
|
}
|
|
187
222
|
|
|
188
|
-
private fail (context: Context, response:
|
|
223
|
+
private fail (context: Context, response: ServerResponse) {
|
|
189
224
|
return async (exception: Error) => {
|
|
190
225
|
try {
|
|
191
|
-
|
|
226
|
+
// Over HTTP/2 the reply is followed by RST_STREAM(NO_ERROR), which tells the client
|
|
227
|
+
// to stop sending without discarding the response — so the body is never read.
|
|
228
|
+
if (!context.request.complete && this.properties.protocol === 'h1')
|
|
192
229
|
await adam(context.request)
|
|
193
230
|
|
|
194
231
|
const status = exception instanceof Exception ? exception.status : 500
|
|
@@ -224,7 +261,7 @@ export class Server extends Connector {
|
|
|
224
261
|
if (!response.writableEnded)
|
|
225
262
|
try {
|
|
226
263
|
response.writeHead(500).end()
|
|
227
|
-
} catch
|
|
264
|
+
} catch {
|
|
228
265
|
// Nothing more we can do
|
|
229
266
|
}
|
|
230
267
|
}
|
|
@@ -232,17 +269,36 @@ export class Server extends Connector {
|
|
|
232
269
|
}
|
|
233
270
|
}
|
|
234
271
|
|
|
272
|
+
function instantiate (protocol: Protocol): http.Server | http2.Http2Server {
|
|
273
|
+
if (protocol === 'h1')
|
|
274
|
+
return http.createServer()
|
|
275
|
+
|
|
276
|
+
return http2.createServer({
|
|
277
|
+
// realtime pins one stream per subscription, and they all share a session
|
|
278
|
+
maxSessionMemory: SESSION_MEMORY,
|
|
279
|
+
settings: { initialWindowSize: WINDOW }
|
|
280
|
+
})
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
/**
|
|
284
|
+
* The authority the request is addressed to. HTTP/2 carries it in `:authority` and omits
|
|
285
|
+
* `host` entirely, so reading `host` alone would leave every HTTP/2 request unattributed.
|
|
286
|
+
*/
|
|
287
|
+
function authorityOf (request: IncomingMessage): string | undefined {
|
|
288
|
+
return request.headers[':authority'] ?? request.headers.host
|
|
289
|
+
}
|
|
290
|
+
|
|
235
291
|
/** Parsing the URL is how a request is validated, so the `Context` is handed the result. */
|
|
236
|
-
function parse (request:
|
|
292
|
+
function parse (request: IncomingMessage, authority: string): URL | Error {
|
|
237
293
|
try {
|
|
238
|
-
return new URL(request.url
|
|
294
|
+
return new URL(request.url, `https://${authority}`)
|
|
239
295
|
} catch (error) {
|
|
240
296
|
return error as Error
|
|
241
297
|
}
|
|
242
298
|
}
|
|
243
299
|
|
|
244
300
|
// https://github.com/whatwg/fetch/issues/1254
|
|
245
|
-
async function adam (request:
|
|
301
|
+
async function adam (request: IncomingMessage): Promise<void> {
|
|
246
302
|
const devnull = fs.createWriteStream(os.devNull)
|
|
247
303
|
|
|
248
304
|
devnull.on('error', () => undefined)
|
|
@@ -251,10 +307,10 @@ async function adam (request: http.IncomingMessage): Promise<void> {
|
|
|
251
307
|
await once(request, 'end')
|
|
252
308
|
}
|
|
253
309
|
|
|
254
|
-
function errorAttributes (request:
|
|
310
|
+
function errorAttributes (request: IncomingMessage, error: Error & any): RequestErrorAttributes {
|
|
255
311
|
const attributes: RequestErrorAttributes = {
|
|
256
|
-
path: request.url
|
|
257
|
-
method: request.method
|
|
312
|
+
path: request.url,
|
|
313
|
+
method: request.method,
|
|
258
314
|
name: error.name
|
|
259
315
|
}
|
|
260
316
|
|
|
@@ -269,20 +325,21 @@ function errorAttributes (request: http.IncomingMessage, error: Error & any): Re
|
|
|
269
325
|
|
|
270
326
|
export const PORT = 8000
|
|
271
327
|
|
|
272
|
-
/**
|
|
273
|
-
* The initial delay of the readiness probe. The server does not sleep for it: whoever
|
|
274
|
-
* probes is the one that waits, and doing it here as well only delayed the process twice.
|
|
275
|
-
*/
|
|
276
|
-
export const DELAY = 3 // seconds
|
|
277
328
|
export const DRAIN = 10 // seconds
|
|
278
329
|
|
|
330
|
+
/** Megabytes a single HTTP/2 session may hold, over Node's default of 10. */
|
|
331
|
+
const SESSION_MEMORY = 128
|
|
332
|
+
|
|
333
|
+
/** Per-stream flow control window. The default 64 KiB throttles in proportion to RTT. */
|
|
334
|
+
const WINDOW = 1024 * 1024
|
|
335
|
+
|
|
279
336
|
/**
|
|
280
337
|
* Extracts the remote trace context from the request headers.
|
|
281
338
|
*
|
|
282
339
|
* The `ray` header adopts the trace by ID only and does not bypass sampling:
|
|
283
340
|
* the sampling decision is made by the server.
|
|
284
341
|
*/
|
|
285
|
-
function trace (headers:
|
|
342
|
+
function trace (headers: IncomingMessage['headers']): SpanContext | null {
|
|
286
343
|
if (typeof headers.traceparent === 'string')
|
|
287
344
|
return decode(headers.traceparent)
|
|
288
345
|
|
|
@@ -300,7 +357,9 @@ const DEFAULTS: Omit<Properties, 'authorities'> = {
|
|
|
300
357
|
methods: new Set<string>(['OPTIONS', 'GET', 'HEAD', 'POST', 'PUT', 'PATCH', 'DELETE', 'LOCK', 'UNLOCK']),
|
|
301
358
|
debug: false,
|
|
302
359
|
port: PORT,
|
|
303
|
-
drain: DRAIN * 1000
|
|
360
|
+
drain: DRAIN * 1000,
|
|
361
|
+
protocol: 'h1',
|
|
362
|
+
probe: PROBE
|
|
304
363
|
}
|
|
305
364
|
|
|
306
365
|
interface Properties {
|
|
@@ -309,6 +368,10 @@ interface Properties {
|
|
|
309
368
|
debug: boolean
|
|
310
369
|
port: number
|
|
311
370
|
drain: number
|
|
371
|
+
protocol: Protocol
|
|
372
|
+
|
|
373
|
+
/** Port of the readiness probe, which is HTTP/1.1 whatever the gateway serves. */
|
|
374
|
+
probe: number
|
|
312
375
|
}
|
|
313
376
|
|
|
314
377
|
export type Options = { authorities: Properties['authorities'] } & {
|
|
@@ -324,17 +387,3 @@ interface RequestErrorAttributes {
|
|
|
324
387
|
code?: string
|
|
325
388
|
stack?: string
|
|
326
389
|
}
|
|
327
|
-
|
|
328
|
-
/**
|
|
329
|
-
* I'm too fucking dumb to figure out how to handle this in a better way.
|
|
330
|
-
* It can be reproduced by calling `response.destroy()` on the client side while reading
|
|
331
|
-
* an empty stream.
|
|
332
|
-
*/
|
|
333
|
-
process.on('uncaughtException', (err: unknown) => {
|
|
334
|
-
const code = (err as { code?: string }).code
|
|
335
|
-
|
|
336
|
-
if (code === 'ECONNRESET' || code === 'EPIPE')
|
|
337
|
-
console.warn('Connection reset by peer', code)
|
|
338
|
-
else
|
|
339
|
-
throw err
|
|
340
|
-
})
|
package/source/HTTP/Timing.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import * as json from './json'
|
|
2
|
-
import * as yaml from './yaml'
|
|
3
|
-
import * as msgpack from './msgpack'
|
|
4
|
-
import * as text from './text'
|
|
1
|
+
import * as json from './json.js'
|
|
2
|
+
import * as yaml from './yaml.js'
|
|
3
|
+
import * as msgpack from './msgpack.js'
|
|
4
|
+
import * as text from './text.js'
|
|
5
5
|
|
|
6
6
|
export const formats: Record<string, Format> = {
|
|
7
7
|
[json.type]: json,
|
|
@@ -1,4 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { it } from 'node:test'
|
|
2
|
+
import assert from 'node:assert/strict'
|
|
3
|
+
|
|
4
|
+
import { encode } from './yaml.js'
|
|
2
5
|
|
|
3
6
|
it('encodes error values as their public properties', () => {
|
|
4
7
|
const value = new (class InvalidUsernameError extends Error {
|
|
@@ -6,12 +9,11 @@ it('encodes error values as their public properties', () => {
|
|
|
6
9
|
public override readonly message = 'Username is not meeting the requirements'
|
|
7
10
|
})()
|
|
8
11
|
|
|
9
|
-
|
|
10
|
-
.toBe('code: INVALID_USERNAME\nmessage: Username is not meeting the requirements\n')
|
|
12
|
+
assert.strictEqual(encode(value).toString(), 'code: INVALID_USERNAME\nmessage: Username is not meeting the requirements\n')
|
|
11
13
|
})
|
|
12
14
|
|
|
13
15
|
it('writes a value the way its toJSON says', () => {
|
|
14
16
|
const secret = { unwrap: () => 's3cret', toJSON: () => '<REDACTED>' }
|
|
15
17
|
|
|
16
|
-
|
|
18
|
+
assert.strictEqual(encode({ a: 1, b: secret }).toString(), 'a: 1\nb: <REDACTED>\n')
|
|
17
19
|
})
|
package/source/HTTP/index.ts
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
export * from './Server'
|
|
2
|
-
export * from './messages'
|
|
3
|
-
export * from './exceptions'
|
|
4
|
-
export * from './Context'
|
|
1
|
+
export * from './Server.js'
|
|
2
|
+
export * from './messages.js'
|
|
3
|
+
export * from './exceptions.js'
|
|
4
|
+
export * from './Context.js'
|
|
5
|
+
export * from './types.js'
|
|
6
|
+
export * from './Probe.js'
|
|
@@ -1,17 +1,19 @@
|
|
|
1
|
+
import { describe, it, beforeEach } from 'node:test'
|
|
2
|
+
import assert from 'node:assert/strict'
|
|
3
|
+
|
|
1
4
|
import { PassThrough, Readable } from 'node:stream'
|
|
2
5
|
import * as streamConsumers from 'node:stream/consumers'
|
|
3
|
-
import { once } from 'node:events'
|
|
4
6
|
import { generate } from 'randomstring'
|
|
5
7
|
import * as msgpack from 'msgpackr'
|
|
6
|
-
import { multipart, read, type OutgoingMessage } from './messages'
|
|
7
|
-
import { BadRequest, UnsupportedMediaType } from './exceptions'
|
|
8
|
-
import { formats } from './formats'
|
|
9
|
-
import { Timing } from './Timing'
|
|
8
|
+
import { multipart, read, type OutgoingMessage } from './messages.js'
|
|
9
|
+
import { BadRequest, UnsupportedMediaType } from './exceptions.js'
|
|
10
|
+
import { formats } from './formats/index.js'
|
|
11
|
+
import { Timing } from './Timing.js'
|
|
10
12
|
import type * as http from 'node:http'
|
|
11
|
-
import type { Context } from './Context'
|
|
13
|
+
import type { Context } from './Context.js'
|
|
12
14
|
|
|
13
15
|
beforeEach(() => {
|
|
14
|
-
|
|
16
|
+
resetCalls()
|
|
15
17
|
})
|
|
16
18
|
|
|
17
19
|
describe('read', () => {
|
|
@@ -23,7 +25,7 @@ describe('read', () => {
|
|
|
23
25
|
const context = createContext(path, headers, json)
|
|
24
26
|
const output = await read(context)
|
|
25
27
|
|
|
26
|
-
|
|
28
|
+
assert.deepStrictEqual(output, input)
|
|
27
29
|
})
|
|
28
30
|
|
|
29
31
|
it('should parse application/yaml', async () => {
|
|
@@ -33,7 +35,7 @@ describe('read', () => {
|
|
|
33
35
|
const request = createContext(path, headers, yaml)
|
|
34
36
|
const value = await read(request)
|
|
35
37
|
|
|
36
|
-
|
|
38
|
+
assert.deepStrictEqual(value, { foo: 1 })
|
|
37
39
|
})
|
|
38
40
|
|
|
39
41
|
it('should parse application/mskpack', async () => {
|
|
@@ -44,7 +46,7 @@ describe('read', () => {
|
|
|
44
46
|
const request = createContext(path, headers, msg)
|
|
45
47
|
const output = await read(request)
|
|
46
48
|
|
|
47
|
-
|
|
49
|
+
assert.deepStrictEqual(output, input)
|
|
48
50
|
})
|
|
49
51
|
|
|
50
52
|
it('should parse text/plain', async () => {
|
|
@@ -54,7 +56,7 @@ describe('read', () => {
|
|
|
54
56
|
const request = createContext(path, headers, input)
|
|
55
57
|
const output = await read(request)
|
|
56
58
|
|
|
57
|
-
|
|
59
|
+
assert.deepStrictEqual(output, input)
|
|
58
60
|
})
|
|
59
61
|
|
|
60
62
|
it('should parse application/json with charset parameter', async () => {
|
|
@@ -65,7 +67,7 @@ describe('read', () => {
|
|
|
65
67
|
const context = createContext(path, headers, json)
|
|
66
68
|
const output = await read(context)
|
|
67
69
|
|
|
68
|
-
|
|
70
|
+
assert.deepStrictEqual(output, input)
|
|
69
71
|
})
|
|
70
72
|
|
|
71
73
|
it('should throw on unsupported request media type', async () => {
|
|
@@ -73,7 +75,7 @@ describe('read', () => {
|
|
|
73
75
|
const headers = { 'content-type': 'wtf/' + generate() }
|
|
74
76
|
const request = createContext(path, headers)
|
|
75
77
|
|
|
76
|
-
await
|
|
78
|
+
await assert.rejects(read(request), UnsupportedMediaType)
|
|
77
79
|
})
|
|
78
80
|
|
|
79
81
|
it('should throw on malformed content', async () => {
|
|
@@ -82,7 +84,7 @@ describe('read', () => {
|
|
|
82
84
|
const headers = { 'content-type': 'application/json' }
|
|
83
85
|
const request = createContext(path, headers, text)
|
|
84
86
|
|
|
85
|
-
await
|
|
87
|
+
await assert.rejects(read(request), BadRequest)
|
|
86
88
|
})
|
|
87
89
|
|
|
88
90
|
it('should output correct mulitpart format', async () => {
|
|
@@ -99,13 +101,11 @@ describe('read', () => {
|
|
|
99
101
|
const context = { encoder: formats['text/plain'] } as unknown as Context
|
|
100
102
|
const message = { body: Readable.from(['Hello', 'New', 'World']) } as unknown as OutgoingMessage
|
|
101
103
|
|
|
102
|
-
multipart(message, context, response as unknown as http.ServerResponse)
|
|
103
|
-
|
|
104
|
-
await once(message.body, 'end')
|
|
104
|
+
const framed = multipart(message, context, response as unknown as http.ServerResponse)
|
|
105
105
|
|
|
106
|
-
const result = await streamConsumers.text(
|
|
106
|
+
const result = await streamConsumers.text(framed)
|
|
107
107
|
|
|
108
|
-
|
|
108
|
+
assert.strictEqual(result, [
|
|
109
109
|
'--cut',
|
|
110
110
|
'',
|
|
111
111
|
'ACK',
|
|
@@ -126,7 +126,7 @@ describe('read', () => {
|
|
|
126
126
|
})
|
|
127
127
|
|
|
128
128
|
export function createContext (url: string, headers: Record<string, string> = {}, content: string | Buffer = ''):
|
|
129
|
-
|
|
129
|
+
Context {
|
|
130
130
|
const data = Buffer.isBuffer(content) ? content : Buffer.from(content)
|
|
131
131
|
const stream = Readable.from(data)
|
|
132
132
|
let consumed = false
|
|
@@ -148,5 +148,15 @@ jest.MockedObject<Context> {
|
|
|
148
148
|
}
|
|
149
149
|
}
|
|
150
150
|
|
|
151
|
-
return mock as unknown as
|
|
151
|
+
return mock as unknown as Context
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
function resetCalls (target = [], seen = new Set()) {
|
|
155
|
+
if (target === null || typeof target !== 'object' || seen.has(target)) return
|
|
156
|
+
|
|
157
|
+
seen.add(target)
|
|
158
|
+
|
|
159
|
+
for (const value of Object.values(target))
|
|
160
|
+
if (typeof value === 'function' && value.mock !== undefined) value.mock.resetCalls()
|
|
161
|
+
else resetCalls(value, seen)
|
|
152
162
|
}
|