@toa.io/extensions.exposition 1.0.0-alpha.19 → 1.0.0-alpha.190
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/components/context.toa.yaml +2 -2
- package/components/identity.bans/operations/tsconfig.tsbuildinfo +1 -1
- package/components/identity.basic/manifest.toa.yaml +65 -13
- package/components/identity.basic/operations/add.d.ts +3 -0
- package/components/identity.basic/operations/add.js +16 -0
- package/components/identity.basic/operations/add.js.map +1 -0
- package/components/identity.basic/operations/authenticate.d.ts +5 -1
- package/components/identity.basic/operations/authenticate.js +7 -4
- package/components/identity.basic/operations/authenticate.js.map +1 -1
- package/components/identity.basic/operations/check.d.ts +7 -0
- package/components/identity.basic/operations/check.js +15 -0
- package/components/identity.basic/operations/check.js.map +1 -0
- package/components/identity.basic/operations/incept.d.ts +12 -0
- package/components/identity.basic/operations/incept.js +26 -0
- package/components/identity.basic/operations/incept.js.map +1 -0
- package/components/identity.basic/operations/transit.d.ts +4 -4
- package/components/identity.basic/operations/transit.js +13 -7
- package/components/identity.basic/operations/transit.js.map +1 -1
- package/components/identity.basic/operations/tsconfig.tsbuildinfo +1 -1
- package/components/identity.basic/operations/types.d.ts +14 -4
- package/components/identity.basic/source/add.ts +14 -0
- package/components/identity.basic/source/authenticate.ts +18 -7
- package/components/identity.basic/source/check.ts +20 -0
- package/components/identity.basic/source/incept.ts +38 -0
- package/components/identity.basic/source/transit.ts +16 -10
- package/components/identity.basic/source/types.ts +15 -4
- package/components/identity.federation/manifest.toa.yaml +80 -38
- package/components/identity.federation/operations/authenticate.d.ts +16 -3
- package/components/identity.federation/operations/authenticate.js +25 -15
- package/components/identity.federation/operations/authenticate.js.map +1 -1
- package/components/identity.federation/operations/decode.d.ts +3 -0
- package/components/identity.federation/operations/decode.js +12 -0
- package/components/identity.federation/operations/decode.js.map +1 -0
- package/components/identity.federation/operations/incept.d.ts +11 -0
- package/components/identity.federation/operations/incept.js +23 -0
- package/components/identity.federation/operations/incept.js.map +1 -0
- package/components/identity.federation/operations/lib/Configuration.d.ts +39 -0
- package/components/identity.federation/operations/lib/Configuration.js +3 -0
- package/components/identity.federation/operations/lib/Configuration.js.map +1 -0
- package/components/identity.federation/operations/lib/Context.d.ts +7 -0
- package/{transpiled/directives/vary/embeddings/Embedding.js → components/identity.federation/operations/lib/Context.js} +1 -1
- package/components/identity.federation/operations/lib/Context.js.map +1 -0
- package/components/identity.federation/operations/lib/Ctx.d.ts +6 -0
- package/components/identity.federation/operations/lib/Ctx.js +3 -0
- package/components/identity.federation/operations/lib/Ctx.js.map +1 -0
- package/components/identity.federation/operations/lib/Payload.d.ts +5 -0
- package/components/identity.federation/operations/lib/Payload.js +3 -0
- package/components/identity.federation/operations/lib/Payload.js.map +1 -0
- package/components/identity.federation/operations/lib/decode.d.ts +3 -0
- package/components/identity.federation/operations/lib/{assertions-as-values.js → decode.js} +19 -19
- package/components/identity.federation/operations/lib/decode.js.map +1 -0
- package/components/identity.federation/operations/lib/discovery.d.ts +4 -0
- package/components/identity.federation/operations/lib/discovery.js +49 -0
- package/components/identity.federation/operations/lib/discovery.js.map +1 -0
- package/components/identity.federation/operations/lib/errors.d.ts +11 -0
- package/components/identity.federation/operations/lib/errors.js +15 -0
- package/components/identity.federation/operations/lib/errors.js.map +1 -0
- package/components/identity.federation/operations/lib/exchange.d.ts +3 -0
- package/components/identity.federation/operations/lib/exchange.js +107 -0
- package/components/identity.federation/operations/lib/exchange.js.map +1 -0
- package/components/identity.federation/operations/lib/index.d.ts +3 -0
- package/components/identity.federation/operations/lib/index.js +8 -0
- package/components/identity.federation/operations/lib/index.js.map +1 -0
- package/components/identity.federation/operations/tsconfig.tsbuildinfo +1 -1
- package/components/identity.federation/operations/types/Scheme.d.ts +1 -0
- package/components/identity.federation/operations/types/Scheme.js +3 -0
- package/components/identity.federation/operations/types/Scheme.js.map +1 -0
- package/components/identity.federation/operations/types/configuration.d.ts +20 -0
- package/components/identity.federation/operations/types/configuration.js +3 -0
- package/components/identity.federation/operations/types/configuration.js.map +1 -0
- package/components/identity.federation/operations/types/context.d.ts +36 -0
- package/components/identity.federation/operations/types/context.js +3 -0
- package/components/identity.federation/operations/types/context.js.map +1 -0
- package/components/identity.federation/operations/types/entity.d.ts +6 -0
- package/components/identity.federation/operations/types/entity.js +3 -0
- package/components/identity.federation/operations/types/entity.js.map +1 -0
- package/components/identity.federation/operations/types/index.d.ts +4 -0
- package/components/identity.federation/operations/types/index.js +21 -0
- package/components/identity.federation/operations/types/index.js.map +1 -0
- package/components/identity.federation/source/authenticate.ts +44 -19
- package/components/identity.federation/source/decode.ts +10 -0
- package/components/identity.federation/source/incept.ts +37 -0
- package/components/identity.federation/source/lib/Configuration.ts +39 -0
- package/components/identity.federation/source/lib/Ctx.ts +7 -0
- package/components/identity.federation/source/lib/Payload.ts +6 -0
- package/components/identity.federation/source/lib/decode.ts +28 -0
- package/components/identity.federation/source/lib/discovery.ts +30 -0
- package/components/identity.federation/source/lib/errors.ts +12 -0
- package/components/identity.federation/source/lib/exchange.ts +116 -0
- package/components/identity.federation/source/lib/index.ts +3 -0
- package/components/identity.federation/source/types/Scheme.ts +1 -0
- package/components/identity.federation/source/types/configuration.ts +21 -0
- package/components/identity.federation/source/types/context.ts +40 -0
- package/components/identity.federation/source/types/entity.ts +6 -0
- package/components/identity.federation/source/types/index.ts +4 -0
- package/components/identity.federation/tsconfig.json +5 -4
- package/components/identity.keys/manifest.toa.yaml +57 -0
- package/components/identity.keys/operations/create.d.ts +22 -0
- package/components/identity.keys/operations/create.js +16 -0
- package/components/identity.keys/operations/create.js.map +1 -0
- package/components/identity.keys/operations/tsconfig.tsbuildinfo +1 -0
- package/components/identity.keys/source/create.ts +35 -0
- package/components/identity.keys/tsconfig.json +9 -0
- package/components/identity.otp/manifest.toa.yaml +54 -0
- package/components/identity.otp/operations/authenticate.d.ts +12 -0
- package/components/identity.otp/operations/authenticate.js +30 -0
- package/components/identity.otp/operations/authenticate.js.map +1 -0
- package/components/identity.otp/operations/issue.d.ts +12 -0
- package/components/identity.otp/operations/issue.js +22 -0
- package/components/identity.otp/operations/issue.js.map +1 -0
- package/components/identity.otp/operations/lib/Context.d.ts +13 -0
- package/components/identity.otp/operations/lib/Context.js +3 -0
- package/components/identity.otp/operations/lib/Context.js.map +1 -0
- package/components/identity.otp/operations/lib/Entity.d.ts +5 -0
- package/components/identity.otp/operations/lib/Entity.js +3 -0
- package/components/identity.otp/operations/lib/Entity.js.map +1 -0
- package/components/identity.otp/operations/lib/index.d.ts +1 -0
- package/components/identity.otp/operations/lib/index.js +3 -0
- package/components/identity.otp/operations/lib/index.js.map +1 -0
- package/components/identity.otp/operations/tsconfig.tsbuildinfo +1 -0
- package/components/identity.otp/source/authenticate.ts +46 -0
- package/components/identity.otp/source/issue.ts +35 -0
- package/components/identity.otp/source/lib/Context.ts +14 -0
- package/components/identity.otp/source/lib/Entity.ts +5 -0
- package/components/identity.otp/source/lib/index.ts +1 -0
- package/components/identity.otp/tsconfig.json +9 -0
- package/components/identity.passkeys/manifest.toa.yaml +268 -0
- package/components/identity.passkeys/operations/authenticate.d.ts +16 -0
- package/components/identity.passkeys/operations/authenticate.js +34 -0
- package/components/identity.passkeys/operations/authenticate.js.map +1 -0
- package/components/identity.passkeys/operations/challenge.d.ts +35 -0
- package/components/identity.passkeys/operations/challenge.js +73 -0
- package/components/identity.passkeys/operations/challenge.js.map +1 -0
- package/components/identity.passkeys/operations/create.d.ts +19 -0
- package/components/identity.passkeys/operations/create.js +58 -0
- package/components/identity.passkeys/operations/create.js.map +1 -0
- package/components/identity.passkeys/operations/delete.d.ts +8 -0
- package/components/identity.passkeys/operations/delete.js +12 -0
- package/components/identity.passkeys/operations/delete.js.map +1 -0
- package/components/identity.passkeys/operations/lib/const.d.ts +1 -0
- package/components/identity.passkeys/operations/lib/const.js +5 -0
- package/components/identity.passkeys/operations/lib/const.js.map +1 -0
- package/components/identity.passkeys/operations/list.d.ts +7 -0
- package/components/identity.passkeys/operations/list.js +15 -0
- package/components/identity.passkeys/operations/list.js.map +1 -0
- package/components/identity.passkeys/operations/tsconfig.tsbuildinfo +1 -0
- package/components/identity.passkeys/operations/types/Configuration.d.ts +6 -0
- package/components/identity.passkeys/operations/types/Configuration.js +3 -0
- package/components/identity.passkeys/operations/types/Configuration.js.map +1 -0
- package/components/identity.passkeys/operations/types/Context.d.ts +15 -0
- package/components/identity.passkeys/operations/types/Context.js +3 -0
- package/components/identity.passkeys/operations/types/Context.js.map +1 -0
- package/components/identity.passkeys/operations/types/Passkey.d.ts +13 -0
- package/components/identity.passkeys/operations/types/Passkey.js +3 -0
- package/components/identity.passkeys/operations/types/Passkey.js.map +1 -0
- package/components/identity.passkeys/operations/types/index.d.ts +2 -0
- package/components/identity.passkeys/operations/types/index.js +3 -0
- package/components/identity.passkeys/operations/types/index.js.map +1 -0
- package/components/identity.passkeys/operations/use.d.ts +16 -0
- package/components/identity.passkeys/operations/use.js +57 -0
- package/components/identity.passkeys/operations/use.js.map +1 -0
- package/components/identity.passkeys/source/authenticate.ts +48 -0
- package/components/identity.passkeys/source/challenge.ts +115 -0
- package/components/identity.passkeys/source/create.ts +77 -0
- package/components/identity.passkeys/source/delete.ts +15 -0
- package/components/identity.passkeys/source/lib/const.ts +1 -0
- package/components/identity.passkeys/source/list.ts +17 -0
- package/components/identity.passkeys/source/types/Configuration.ts +6 -0
- package/components/identity.passkeys/source/types/Context.ts +16 -0
- package/components/identity.passkeys/source/types/Passkey.ts +14 -0
- package/components/identity.passkeys/source/types/index.ts +2 -0
- package/components/identity.passkeys/source/use.ts +75 -0
- package/components/identity.passkeys/tsconfig.json +9 -0
- package/components/identity.roles/manifest.toa.yaml +4 -2
- package/components/identity.roles/operations/grant.js +2 -2
- package/components/identity.roles/operations/grant.js.map +1 -1
- package/components/identity.roles/operations/tsconfig.tsbuildinfo +1 -1
- package/components/identity.roles/source/grant.ts +2 -2
- package/components/identity.tokens/manifest.toa.yaml +95 -12
- package/components/identity.tokens/operations/authenticate.d.ts +3 -3
- package/components/identity.tokens/operations/authenticate.js +15 -11
- package/components/identity.tokens/operations/authenticate.js.map +1 -1
- package/components/identity.tokens/operations/decrypt.d.ts +13 -3
- package/components/identity.tokens/operations/decrypt.js +65 -17
- package/components/identity.tokens/operations/decrypt.js.map +1 -1
- package/components/identity.tokens/operations/encrypt.d.ts +3 -3
- package/components/identity.tokens/operations/encrypt.js +24 -7
- package/components/identity.tokens/operations/encrypt.js.map +1 -1
- package/components/identity.tokens/operations/issue.d.ts +24 -0
- package/components/identity.tokens/operations/issue.js +59 -0
- package/components/identity.tokens/operations/issue.js.map +1 -0
- package/components/identity.tokens/operations/lib/index.d.ts +2 -0
- package/components/identity.tokens/operations/lib/index.js +19 -0
- package/components/identity.tokens/operations/lib/index.js.map +1 -0
- package/components/identity.tokens/operations/lib/pad.d.ts +1 -0
- package/components/identity.tokens/operations/lib/pad.js +5 -0
- package/components/identity.tokens/operations/lib/pad.js.map +1 -0
- package/components/identity.tokens/operations/lib/types.d.ts +75 -0
- package/components/identity.tokens/operations/lib/types.js.map +1 -0
- package/components/identity.tokens/operations/revoke.d.ts +2 -2
- package/components/identity.tokens/operations/revoke.js.map +1 -1
- package/components/identity.tokens/operations/tsconfig.tsbuildinfo +1 -1
- package/components/identity.tokens/source/authenticate.test.ts +22 -9
- package/components/identity.tokens/source/authenticate.ts +18 -13
- package/components/identity.tokens/source/decrypt.test.ts +33 -18
- package/components/identity.tokens/source/decrypt.ts +95 -20
- package/components/identity.tokens/source/encrypt.test.ts +51 -13
- package/components/identity.tokens/source/encrypt.ts +36 -11
- package/components/identity.tokens/source/issue.ts +82 -0
- package/components/identity.tokens/source/lib/index.ts +2 -0
- package/components/identity.tokens/source/lib/pad.ts +1 -0
- package/components/identity.tokens/source/lib/paseto.test.ts +16 -0
- package/components/identity.tokens/source/lib/types.ts +86 -0
- package/components/identity.tokens/source/revoke.ts +2 -2
- package/components/octets.storage/manifest.toa.yaml +13 -11
- package/components/octets.storage/operations/get.js +3 -3
- package/components/octets.storage/operations/head.js +7 -0
- package/components/octets.storage/operations/put.js +135 -0
- package/documentation/access.md +78 -27
- package/documentation/authorities.md +48 -0
- package/documentation/components.md +117 -42
- package/documentation/dev.md +30 -0
- package/documentation/flow.md +44 -0
- package/documentation/identity.md +129 -24
- package/documentation/introspection.md +82 -0
- package/documentation/io.md +42 -2
- package/documentation/map.md +96 -0
- package/documentation/notes/desync.jpg +0 -0
- package/documentation/notes/peers.md +59 -0
- package/documentation/notes/throttling.md +82 -0
- package/documentation/octets.md +122 -69
- package/documentation/passkeys.md +4 -0
- package/documentation/protocol.md +11 -4
- package/documentation/query.md +51 -4
- package/documentation/require.md +15 -0
- package/documentation/tree.md +13 -0
- package/features/access.feature +122 -9
- package/features/annotation.feature +1 -0
- package/features/auth.assert.feature +57 -0
- package/features/auth.claims.feature +170 -0
- package/features/auth.incept.feature +120 -0
- package/features/auth.input.feature +59 -0
- package/features/auth.issue.feature +32 -0
- package/features/authorities.basic.feature +141 -0
- package/features/authorities.feature +32 -0
- package/features/authorities.federation.feature +99 -0
- package/features/authorities.tokens.feature +117 -0
- package/features/body.feature +2 -0
- package/features/cache.feature +131 -8
- package/features/cors.feature +32 -7
- package/features/debug.feature +34 -0
- package/features/dev.feature +56 -0
- package/features/directives.feature +3 -0
- package/features/dynamic.feature +48 -0
- package/features/errors.feature +29 -6
- package/features/etag.feature +140 -1
- package/features/flow.feature +148 -0
- package/features/identity.bans.feature +12 -3
- package/features/identity.basic.feature +154 -21
- package/features/identity.feature +18 -6
- package/features/identity.federation.feature +134 -44
- package/features/identity.otp.feature +71 -0
- package/features/identity.roles.feature +81 -20
- package/features/identity.tokens.feature +11 -97
- package/features/identtiy.tokens.custom.feature +247 -0
- package/features/interruptions.feature +19 -0
- package/features/introspection.feature +153 -0
- package/features/io.feature +9 -1
- package/features/io.throttle.feature +40 -0
- package/features/map.feature +328 -0
- package/features/methods.feature +47 -0
- package/features/octets.cloudinary.feature +223 -0
- package/features/octets.download.feature +189 -0
- package/features/octets.entries.feature +13 -55
- package/features/octets.feature +70 -114
- package/features/octets.head.feature +40 -0
- package/features/octets.location.feature +83 -0
- package/features/octets.meta.feature +65 -15
- package/features/octets.workflows.feature +344 -66
- package/features/passkeys.feature +66 -0
- package/features/probes.feature +14 -0
- package/features/{queries.feature → query.feature} +142 -2
- package/features/realtime.feature +34 -0
- package/features/require.feature +67 -0
- package/features/response.feature +34 -2
- package/features/routes.feature +93 -2
- package/features/server.feature +21 -0
- package/features/steps/.env.example +5 -0
- package/features/steps/Common.ts +4 -0
- package/features/steps/Gateway.ts +26 -7
- package/features/steps/HTTP.ts +26 -3
- package/features/steps/IDP.ts +334 -0
- package/features/steps/Identity.ts +51 -0
- package/features/steps/OTP.ts +39 -0
- package/features/steps/Parameters.ts +88 -2
- package/features/steps/Realtime.ts +151 -0
- package/features/steps/components/echo/manifest.toa.yaml +12 -0
- package/features/steps/components/echo/operations/echo.js +7 -0
- package/features/steps/components/echo/operations/parameters.js +7 -0
- package/features/steps/components/echo/operations/ping.js +7 -0
- package/features/steps/components/echo.beacon/manifest.toa.yaml +2 -0
- package/features/steps/components/echo.beacon/operations/hello.js +5 -0
- package/features/steps/components/greeter/manifest.toa.yaml +0 -1
- package/features/steps/components/octets.tester/manifest.toa.yaml +26 -3
- package/features/steps/components/octets.tester/operations/authority.js +7 -0
- package/features/steps/components/octets.tester/operations/bar.js +0 -1
- package/features/steps/components/octets.tester/operations/baz.js +1 -1
- package/features/steps/components/octets.tester/operations/echo.js +1 -1
- package/features/steps/components/octets.tester/operations/foo.js +2 -2
- package/features/steps/components/octets.tester/operations/id.js +7 -0
- package/features/steps/components/octets.tester/operations/identity.js +7 -0
- package/features/steps/components/octets.tester/operations/redirect.js +12 -0
- package/features/steps/components/octets.tester/operations/yex.js +16 -0
- package/features/steps/components/octets.tester/operations/yield.js +13 -0
- package/features/steps/components/pots/manifest.toa.yaml +15 -4
- package/features/steps/components/sequences/manifest.toa.yaml +0 -1
- package/features/steps/components/users/manifest.toa.yaml +4 -2
- package/features/steps/components/users/operations/create.js +15 -0
- package/features/steps/components/users.properties/manifest.toa.yaml +0 -1
- package/features/streams.feature +5 -0
- package/features/timestamps.feature +41 -0
- package/features/timing.feature +4 -1
- package/package.json +30 -18
- package/readme.md +19 -14
- package/schemas/annotation.cos.yaml +8 -1
- package/schemas/io/throttle.cos.yaml +36 -0
- package/schemas/method.cos.yaml +2 -1
- package/schemas/node.cos.yaml +2 -0
- package/schemas/octets/put.cos.yaml +28 -0
- package/schemas/query.cos.yaml +6 -10
- package/schemas/querystring.cos.yaml +1 -0
- package/source/Annotation.ts +6 -3
- package/source/Branch.ts +1 -0
- package/source/Composition.ts +0 -6
- package/source/Context.ts +1 -0
- package/source/Directive.test.ts +5 -3
- package/source/Directive.ts +30 -6
- package/source/Endpoint.ts +89 -24
- package/source/Factory.ts +22 -13
- package/source/Gateway.ts +75 -19
- package/source/HTTP/Context.ts +32 -7
- package/source/HTTP/Server.ts +153 -56
- package/source/HTTP/exceptions.ts +25 -7
- package/source/HTTP/formats/index.ts +3 -4
- package/source/HTTP/formats/json.ts +0 -2
- package/source/HTTP/formats/msgpack.ts +0 -1
- package/source/HTTP/formats/text.ts +0 -2
- package/source/HTTP/formats/yaml.ts +0 -1
- package/source/HTTP/messages.test.ts +46 -2
- package/source/HTTP/messages.ts +94 -9
- package/source/Introspection.ts +11 -0
- package/source/Mapping.ts +69 -21
- package/source/Query.test.ts +3 -3
- package/source/Query.ts +131 -33
- package/source/RTD/Context.ts +1 -1
- package/source/RTD/Directives.ts +4 -0
- package/source/RTD/Endpoint.ts +3 -0
- package/source/RTD/Method.ts +16 -0
- package/source/RTD/Node.ts +29 -13
- package/source/RTD/Route.ts +12 -5
- package/source/RTD/Tree.ts +6 -2
- package/source/RTD/factory.ts +4 -1
- package/source/RTD/segment.ts +2 -0
- package/source/RTD/syntax/parse.test.ts +1 -1
- package/source/RTD/syntax/parse.ts +37 -24
- package/source/RTD/syntax/types.ts +8 -4
- package/source/Remotes.ts +7 -6
- package/source/Tenant.ts +6 -12
- package/source/deployment.ts +34 -24
- package/source/directives/auth/Anonymous.ts +3 -3
- package/source/directives/auth/Anyone.ts +13 -0
- package/source/directives/auth/Assert.ts +35 -0
- package/source/directives/auth/Authorization.ts +69 -26
- package/source/directives/auth/Delegate.ts +9 -5
- package/source/directives/auth/Echo.ts +16 -6
- package/source/directives/auth/Federation.ts +84 -0
- package/source/directives/auth/Id.ts +1 -1
- package/source/directives/auth/Incept.ts +68 -24
- package/source/directives/auth/Input.ts +72 -0
- package/source/directives/auth/Role.test.ts +1 -1
- package/source/directives/auth/Role.ts +5 -9
- package/source/directives/auth/Rule.ts +3 -5
- package/source/directives/auth/Scheme.ts +5 -5
- package/source/directives/auth/create.ts +11 -0
- package/source/directives/auth/schemes.ts +5 -2
- package/source/directives/auth/split.ts +1 -1
- package/source/directives/auth/types.ts +12 -7
- package/source/directives/cache/Cache.ts +15 -6
- package/source/directives/cache/Control.ts +16 -16
- package/source/directives/cors/CORS.ts +9 -9
- package/source/directives/dev/Development.ts +12 -7
- package/source/directives/dev/Sleep.ts +55 -0
- package/source/directives/dev/types.ts +1 -1
- package/source/directives/flow/Compose.ts +92 -0
- package/source/directives/flow/Fetch.ts +86 -0
- package/source/directives/flow/Flow.ts +42 -0
- package/source/directives/flow/index.ts +3 -0
- package/source/directives/flow/types.ts +7 -0
- package/source/directives/index.ts +4 -2
- package/source/directives/io/Directive.ts +5 -2
- package/source/directives/io/IO.ts +18 -6
- package/source/directives/io/Input.ts +9 -6
- package/source/directives/io/Output.ts +6 -5
- package/source/directives/io/Throttle.ts +32 -0
- package/source/directives/io/lib/throttle/Configuration.test.ts +40 -0
- package/source/directives/io/lib/throttle/Configuration.ts +58 -0
- package/source/directives/io/lib/throttle/Interval.ts +31 -0
- package/source/directives/io/lib/throttle/Keys.ts +40 -0
- package/source/directives/io/lib/throttle/Quota.ts +22 -0
- package/source/directives/io/lib/throttle/Quotas.test.ts +136 -0
- package/source/directives/io/lib/throttle/Quotas.ts +83 -0
- package/source/directives/io/lib/throttle/components/Component.ts +5 -0
- package/source/directives/io/lib/throttle/components/IP.ts +40 -0
- package/source/directives/io/lib/throttle/components/Path.ts +8 -0
- package/source/directives/io/lib/throttle/components/index.ts +13 -0
- package/source/directives/io/lib/throttle/conditions/Condition.ts +5 -0
- package/source/directives/io/lib/throttle/conditions/Status.ts +17 -0
- package/source/directives/io/lib/throttle/conditions/index.ts +11 -0
- package/source/directives/io/lib/throttle/index.ts +2 -0
- package/source/directives/io/schemas.test.ts +9 -0
- package/source/directives/io/schemas.ts +3 -0
- package/source/directives/map/Authority.ts +15 -0
- package/source/directives/map/Claims.ts +58 -0
- package/source/directives/map/Directive.ts +4 -0
- package/source/directives/map/Headers.ts +38 -0
- package/source/directives/map/Language.ts +42 -0
- package/source/directives/map/Languages.ts +11 -0
- package/source/directives/map/Map.ts +61 -0
- package/source/directives/map/Mapping.ts +19 -0
- package/source/directives/{vary → map}/Properties.ts +2 -4
- package/source/directives/map/Segments.ts +33 -0
- package/source/directives/map/index.ts +3 -0
- package/source/directives/octets/Context.ts +3 -2
- package/source/directives/octets/Delete.ts +21 -17
- package/source/directives/octets/Get.ts +96 -0
- package/source/directives/octets/Octets.ts +9 -12
- package/source/directives/octets/{Store.ts → Put.ts} +52 -38
- package/source/directives/octets/Workflow.ts +9 -3
- package/source/directives/octets/bytes.test.ts +30 -0
- package/source/directives/octets/bytes.ts +18 -0
- package/source/directives/octets/schemas.ts +4 -8
- package/source/directives/octets/types.ts +2 -0
- package/source/directives/octets/workflows/Execution.ts +62 -8
- package/source/directives/octets/workflows/Workflow.ts +18 -7
- package/source/directives/octets/workflows/index.ts +1 -1
- package/source/directives/require/Directive.ts +5 -0
- package/source/directives/require/Headers.ts +20 -0
- package/source/directives/require/Require.ts +28 -0
- package/source/directives/require/index.ts +3 -0
- package/source/exceptions.ts +16 -4
- package/source/manifest.ts +10 -11
- package/source/root.ts +16 -1
- package/source/schemas.ts +1 -1
- package/transpiled/Annotation.d.ts +5 -3
- package/transpiled/Branch.d.ts +1 -0
- package/transpiled/Composition.d.ts +0 -1
- package/transpiled/Composition.js +0 -4
- package/transpiled/Composition.js.map +1 -1
- package/transpiled/Context.d.ts +1 -0
- package/transpiled/Directive.d.ts +3 -0
- package/transpiled/Directive.js +24 -6
- package/transpiled/Directive.js.map +1 -1
- package/transpiled/Endpoint.d.ts +6 -4
- package/transpiled/Endpoint.js +64 -16
- package/transpiled/Endpoint.js.map +1 -1
- package/transpiled/Factory.d.ts +3 -2
- package/transpiled/Factory.js +18 -10
- package/transpiled/Factory.js.map +1 -1
- package/transpiled/Gateway.d.ts +3 -0
- package/transpiled/Gateway.js +56 -12
- package/transpiled/Gateway.js.map +1 -1
- package/transpiled/HTTP/Context.d.ts +10 -2
- package/transpiled/HTTP/Context.js +22 -6
- package/transpiled/HTTP/Context.js.map +1 -1
- package/transpiled/HTTP/Server.d.ts +15 -4
- package/transpiled/HTTP/Server.js +116 -45
- package/transpiled/HTTP/Server.js.map +1 -1
- package/transpiled/HTTP/exceptions.d.ts +13 -4
- package/transpiled/HTTP/exceptions.js +28 -10
- package/transpiled/HTTP/exceptions.js.map +1 -1
- package/transpiled/HTTP/formats/index.d.ts +1 -1
- package/transpiled/HTTP/formats/index.js +3 -3
- package/transpiled/HTTP/formats/index.js.map +1 -1
- package/transpiled/HTTP/formats/json.d.ts +1 -1
- package/transpiled/HTTP/formats/json.js +1 -2
- package/transpiled/HTTP/formats/json.js.map +1 -1
- package/transpiled/HTTP/formats/msgpack.d.ts +1 -1
- package/transpiled/HTTP/formats/msgpack.js.map +1 -1
- package/transpiled/HTTP/formats/text.d.ts +1 -1
- package/transpiled/HTTP/formats/text.js +1 -2
- package/transpiled/HTTP/formats/text.js.map +1 -1
- package/transpiled/HTTP/formats/yaml.d.ts +1 -1
- package/transpiled/HTTP/formats/yaml.js +1 -2
- package/transpiled/HTTP/formats/yaml.js.map +1 -1
- package/transpiled/HTTP/messages.d.ts +4 -1
- package/transpiled/HTTP/messages.js +65 -8
- package/transpiled/HTTP/messages.js.map +1 -1
- package/transpiled/Introspection.d.ts +9 -0
- package/transpiled/Introspection.js +3 -0
- package/transpiled/Introspection.js.map +1 -0
- package/transpiled/Mapping.d.ts +11 -2
- package/transpiled/Mapping.js +51 -19
- package/transpiled/Mapping.js.map +1 -1
- package/transpiled/Query.d.ts +12 -1
- package/transpiled/Query.js +93 -30
- package/transpiled/Query.js.map +1 -1
- package/transpiled/RTD/Context.d.ts +1 -1
- package/transpiled/RTD/Directives.d.ts +3 -0
- package/transpiled/RTD/Endpoint.d.ts +1 -0
- package/transpiled/RTD/Method.d.ts +4 -0
- package/transpiled/RTD/Method.js +11 -0
- package/transpiled/RTD/Method.js.map +1 -1
- package/transpiled/RTD/Node.d.ts +4 -1
- package/transpiled/RTD/Node.js +23 -12
- package/transpiled/RTD/Node.js.map +1 -1
- package/transpiled/RTD/Route.d.ts +2 -1
- package/transpiled/RTD/Route.js +7 -3
- package/transpiled/RTD/Route.js.map +1 -1
- package/transpiled/RTD/Tree.d.ts +2 -1
- package/transpiled/RTD/Tree.js +3 -0
- package/transpiled/RTD/Tree.js.map +1 -1
- package/transpiled/RTD/factory.js +4 -1
- package/transpiled/RTD/factory.js.map +1 -1
- package/transpiled/RTD/segment.d.ts +1 -0
- package/transpiled/RTD/segment.js +2 -0
- package/transpiled/RTD/segment.js.map +1 -1
- package/transpiled/RTD/syntax/parse.js +34 -22
- package/transpiled/RTD/syntax/parse.js.map +1 -1
- package/transpiled/RTD/syntax/types.d.ts +7 -3
- package/transpiled/RTD/syntax/types.js +1 -1
- package/transpiled/RTD/syntax/types.js.map +1 -1
- package/transpiled/Remotes.d.ts +4 -4
- package/transpiled/Remotes.js +6 -5
- package/transpiled/Remotes.js.map +1 -1
- package/transpiled/Tenant.d.ts +5 -4
- package/transpiled/Tenant.js +2 -7
- package/transpiled/Tenant.js.map +1 -1
- package/transpiled/deployment.d.ts +1 -1
- package/transpiled/deployment.js +29 -21
- package/transpiled/deployment.js.map +1 -1
- package/transpiled/directives/auth/Anonymous.d.ts +2 -2
- package/transpiled/directives/auth/Anonymous.js +2 -2
- package/transpiled/directives/auth/Anonymous.js.map +1 -1
- package/transpiled/directives/auth/Anyone.d.ts +6 -0
- package/transpiled/directives/auth/Anyone.js +14 -0
- package/transpiled/directives/auth/Anyone.js.map +1 -0
- package/transpiled/directives/auth/Assert.d.ts +7 -0
- package/transpiled/directives/auth/Assert.js +57 -0
- package/transpiled/directives/auth/Assert.js.map +1 -0
- package/transpiled/directives/auth/Authorization.d.ts +4 -3
- package/transpiled/directives/auth/Authorization.js +53 -23
- package/transpiled/directives/auth/Authorization.js.map +1 -1
- package/transpiled/directives/auth/Delegate.d.ts +5 -4
- package/transpiled/directives/auth/Delegate.js +7 -3
- package/transpiled/directives/auth/Delegate.js.map +1 -1
- package/transpiled/directives/auth/Echo.d.ts +4 -4
- package/transpiled/directives/auth/Echo.js +11 -4
- package/transpiled/directives/auth/Echo.js.map +1 -1
- package/transpiled/directives/auth/Federation.d.ts +16 -0
- package/transpiled/directives/auth/Federation.js +57 -0
- package/transpiled/directives/auth/Federation.js.map +1 -0
- package/transpiled/directives/auth/Id.d.ts +1 -1
- package/transpiled/directives/auth/Id.js.map +1 -1
- package/transpiled/directives/auth/Incept.d.ts +7 -5
- package/transpiled/directives/auth/Incept.js +52 -18
- package/transpiled/directives/auth/Incept.js.map +1 -1
- package/transpiled/directives/auth/Input.d.ts +13 -0
- package/transpiled/directives/auth/Input.js +49 -0
- package/transpiled/directives/auth/Input.js.map +1 -0
- package/transpiled/directives/auth/Role.d.ts +1 -1
- package/transpiled/directives/auth/Role.js +4 -6
- package/transpiled/directives/auth/Role.js.map +1 -1
- package/transpiled/directives/auth/Rule.d.ts +2 -4
- package/transpiled/directives/auth/Rule.js +2 -2
- package/transpiled/directives/auth/Rule.js.map +1 -1
- package/transpiled/directives/auth/Scheme.d.ts +2 -2
- package/transpiled/directives/auth/Scheme.js +4 -4
- package/transpiled/directives/auth/Scheme.js.map +1 -1
- package/transpiled/directives/auth/create.d.ts +2 -0
- package/transpiled/directives/auth/create.js +14 -0
- package/transpiled/directives/auth/create.js.map +1 -0
- package/transpiled/directives/auth/schemes.d.ts +2 -1
- package/transpiled/directives/auth/schemes.js +5 -2
- package/transpiled/directives/auth/schemes.js.map +1 -1
- package/transpiled/directives/auth/split.js +1 -1
- package/transpiled/directives/auth/split.js.map +1 -1
- package/transpiled/directives/auth/types.d.ts +10 -7
- package/transpiled/directives/cache/Cache.d.ts +3 -3
- package/transpiled/directives/cache/Cache.js +12 -4
- package/transpiled/directives/cache/Cache.js.map +1 -1
- package/transpiled/directives/cache/Control.d.ts +2 -2
- package/transpiled/directives/cache/Control.js +12 -12
- package/transpiled/directives/cache/Control.js.map +1 -1
- package/transpiled/directives/cors/CORS.js +7 -7
- package/transpiled/directives/cors/CORS.js.map +1 -1
- package/transpiled/directives/dev/Development.d.ts +1 -1
- package/transpiled/directives/dev/Development.js +13 -7
- package/transpiled/directives/dev/Development.js.map +1 -1
- package/transpiled/directives/dev/Sleep.d.ts +9 -0
- package/transpiled/directives/dev/Sleep.js +48 -0
- package/transpiled/directives/dev/Sleep.js.map +1 -0
- package/transpiled/directives/dev/types.d.ts +1 -1
- package/transpiled/directives/flow/Compose.d.ts +9 -0
- package/transpiled/directives/flow/Compose.js +94 -0
- package/transpiled/directives/flow/Compose.js.map +1 -0
- package/transpiled/directives/flow/Fetch.d.ts +12 -0
- package/transpiled/directives/flow/Fetch.js +58 -0
- package/transpiled/directives/flow/Fetch.js.map +1 -0
- package/transpiled/directives/flow/Flow.d.ts +10 -0
- package/transpiled/directives/flow/Flow.js +33 -0
- package/transpiled/directives/flow/Flow.js.map +1 -0
- package/transpiled/directives/flow/index.d.ts +2 -0
- package/transpiled/directives/flow/index.js +6 -0
- package/transpiled/directives/flow/index.js.map +1 -0
- package/transpiled/directives/flow/types.d.ts +6 -0
- package/transpiled/directives/flow/types.js.map +1 -0
- package/transpiled/directives/index.js +4 -2
- package/transpiled/directives/index.js.map +1 -1
- package/transpiled/directives/io/Directive.d.ts +5 -2
- package/transpiled/directives/io/IO.d.ts +4 -2
- package/transpiled/directives/io/IO.js +14 -4
- package/transpiled/directives/io/IO.js.map +1 -1
- package/transpiled/directives/io/Input.d.ts +1 -1
- package/transpiled/directives/io/Input.js +5 -3
- package/transpiled/directives/io/Input.js.map +1 -1
- package/transpiled/directives/io/Output.d.ts +1 -1
- package/transpiled/directives/io/Output.js +3 -3
- package/transpiled/directives/io/Output.js.map +1 -1
- package/transpiled/directives/io/Throttle.d.ts +11 -0
- package/transpiled/directives/{octets/Permute.js → io/Throttle.js} +21 -28
- package/transpiled/directives/io/Throttle.js.map +1 -0
- package/transpiled/directives/io/lib/throttle/Configuration.d.ts +23 -0
- package/transpiled/directives/io/lib/throttle/Configuration.js +27 -0
- package/transpiled/directives/io/lib/throttle/Configuration.js.map +1 -0
- package/transpiled/directives/io/lib/throttle/Interval.d.ts +9 -0
- package/transpiled/directives/io/lib/throttle/Interval.js +31 -0
- package/transpiled/directives/io/lib/throttle/Interval.js.map +1 -0
- package/transpiled/directives/io/lib/throttle/Keys.d.ts +12 -0
- package/transpiled/directives/io/lib/throttle/Keys.js +34 -0
- package/transpiled/directives/io/lib/throttle/Keys.js.map +1 -0
- package/transpiled/directives/io/lib/throttle/Quota.d.ts +8 -0
- package/transpiled/directives/io/lib/throttle/Quota.js +22 -0
- package/transpiled/directives/io/lib/throttle/Quota.js.map +1 -0
- package/transpiled/directives/io/lib/throttle/Quotas.d.ts +26 -0
- package/transpiled/directives/io/lib/throttle/Quotas.js +61 -0
- package/transpiled/directives/io/lib/throttle/Quotas.js.map +1 -0
- package/transpiled/directives/io/lib/throttle/components/Component.d.ts +4 -0
- package/transpiled/directives/io/lib/throttle/components/Component.js +3 -0
- package/transpiled/directives/io/lib/throttle/components/Component.js.map +1 -0
- package/transpiled/directives/io/lib/throttle/components/IP.d.ts +6 -0
- package/transpiled/directives/io/lib/throttle/components/IP.js +33 -0
- package/transpiled/directives/io/lib/throttle/components/IP.js.map +1 -0
- package/transpiled/directives/io/lib/throttle/components/Path.d.ts +5 -0
- package/transpiled/directives/io/lib/throttle/components/Path.js +10 -0
- package/transpiled/directives/io/lib/throttle/components/Path.js.map +1 -0
- package/transpiled/directives/io/lib/throttle/components/index.d.ts +5 -0
- package/transpiled/directives/io/lib/throttle/components/index.js +10 -0
- package/transpiled/directives/io/lib/throttle/components/index.js.map +1 -0
- package/transpiled/directives/io/lib/throttle/conditions/Condition.d.ts +4 -0
- package/transpiled/directives/io/lib/throttle/conditions/Condition.js +3 -0
- package/transpiled/directives/io/lib/throttle/conditions/Condition.js.map +1 -0
- package/transpiled/directives/io/lib/throttle/conditions/Status.d.ts +7 -0
- package/transpiled/directives/io/lib/throttle/conditions/Status.js +19 -0
- package/transpiled/directives/io/lib/throttle/conditions/Status.js.map +1 -0
- package/transpiled/directives/io/lib/throttle/conditions/index.d.ts +5 -0
- package/transpiled/directives/io/lib/throttle/conditions/index.js +8 -0
- package/transpiled/directives/io/lib/throttle/conditions/index.js.map +1 -0
- package/transpiled/directives/io/lib/throttle/index.d.ts +2 -0
- package/transpiled/directives/io/lib/throttle/index.js +8 -0
- package/transpiled/directives/io/lib/throttle/index.js.map +1 -0
- package/transpiled/directives/io/schemas.d.ts +2 -0
- package/transpiled/directives/io/schemas.js +2 -1
- package/transpiled/directives/io/schemas.js.map +1 -1
- package/transpiled/directives/map/Authority.d.ts +6 -0
- package/transpiled/directives/map/Authority.js +19 -0
- package/transpiled/directives/map/Authority.js.map +1 -0
- package/transpiled/directives/map/Claims.d.ts +10 -0
- package/transpiled/directives/map/Claims.js +44 -0
- package/transpiled/directives/map/Claims.js.map +1 -0
- package/transpiled/directives/map/Directive.d.ts +3 -0
- package/transpiled/directives/map/Directive.js.map +1 -0
- package/transpiled/directives/map/Headers.d.ts +7 -0
- package/transpiled/directives/map/Headers.js +34 -0
- package/transpiled/directives/map/Headers.js.map +1 -0
- package/transpiled/directives/map/Language.d.ts +10 -0
- package/transpiled/directives/map/Language.js +38 -0
- package/transpiled/directives/map/Language.js.map +1 -0
- package/transpiled/directives/map/Languages.d.ts +4 -0
- package/transpiled/directives/map/Languages.js +17 -0
- package/transpiled/directives/map/Languages.js.map +1 -0
- package/transpiled/directives/map/Map.d.ts +13 -0
- package/transpiled/directives/map/Map.js +46 -0
- package/transpiled/directives/map/Map.js.map +1 -0
- package/transpiled/directives/map/Mapping.d.ts +13 -0
- package/transpiled/directives/map/Mapping.js +13 -0
- package/transpiled/directives/map/Mapping.js.map +1 -0
- package/transpiled/directives/{vary → map}/Properties.d.ts +2 -2
- package/transpiled/directives/{vary → map}/Properties.js +1 -3
- package/transpiled/directives/map/Properties.js.map +1 -0
- package/transpiled/directives/map/Segments.d.ts +6 -0
- package/transpiled/directives/map/Segments.js +30 -0
- package/transpiled/directives/map/Segments.js.map +1 -0
- package/transpiled/directives/map/index.d.ts +2 -0
- package/transpiled/directives/map/index.js +6 -0
- package/transpiled/directives/map/index.js.map +1 -0
- package/transpiled/directives/octets/Context.js +4 -24
- package/transpiled/directives/octets/Context.js.map +1 -1
- package/transpiled/directives/octets/Delete.js +15 -12
- package/transpiled/directives/octets/Delete.js.map +1 -1
- package/transpiled/directives/octets/{Fetch.d.ts → Get.d.ts} +5 -6
- package/transpiled/directives/octets/{Fetch.js → Get.js} +34 -30
- package/transpiled/directives/octets/Get.js.map +1 -0
- package/transpiled/directives/octets/Octets.js +9 -12
- package/transpiled/directives/octets/Octets.js.map +1 -1
- package/transpiled/directives/octets/{Store.d.ts → Put.d.ts} +8 -2
- package/transpiled/directives/octets/{Store.js → Put.js} +33 -27
- package/transpiled/directives/octets/Put.js.map +1 -0
- package/transpiled/directives/octets/Workflow.js +7 -2
- package/transpiled/directives/octets/Workflow.js.map +1 -1
- package/transpiled/directives/octets/bytes.d.ts +1 -0
- package/transpiled/directives/octets/bytes.js +21 -0
- package/transpiled/directives/octets/bytes.js.map +1 -0
- package/transpiled/directives/octets/schemas.d.ts +4 -8
- package/transpiled/directives/octets/schemas.js +3 -6
- package/transpiled/directives/octets/schemas.js.map +1 -1
- package/transpiled/directives/octets/types.d.ts +2 -0
- package/transpiled/directives/octets/workflows/Execution.d.ts +7 -1
- package/transpiled/directives/octets/workflows/Execution.js +44 -9
- package/transpiled/directives/octets/workflows/Execution.js.map +1 -1
- package/transpiled/directives/octets/workflows/Workflow.d.ts +8 -3
- package/transpiled/directives/octets/workflows/Workflow.js +10 -4
- 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.map +1 -1
- package/transpiled/directives/require/Directive.d.ts +4 -0
- package/transpiled/directives/require/Directive.js +3 -0
- package/transpiled/directives/require/Directive.js.map +1 -0
- package/transpiled/directives/require/Headers.d.ts +7 -0
- package/transpiled/directives/require/Headers.js +19 -0
- package/transpiled/directives/require/Headers.js.map +1 -0
- package/transpiled/directives/require/Require.d.ts +9 -0
- package/transpiled/directives/require/Require.js +27 -0
- package/transpiled/directives/require/Require.js.map +1 -0
- package/transpiled/directives/require/index.d.ts +2 -0
- package/transpiled/directives/require/index.js +6 -0
- package/transpiled/directives/require/index.js.map +1 -0
- package/transpiled/exceptions.js +11 -2
- package/transpiled/exceptions.js.map +1 -1
- package/transpiled/manifest.js +10 -11
- package/transpiled/manifest.js.map +1 -1
- package/transpiled/root.js +16 -1
- package/transpiled/root.js.map +1 -1
- package/transpiled/schemas.d.ts +1 -1
- package/transpiled/schemas.js +2 -2
- package/transpiled/schemas.js.map +1 -1
- package/transpiled/tsconfig.tsbuildinfo +1 -1
- package/components/identity.basic/operations/create.d.ts +0 -10
- package/components/identity.basic/operations/create.js +0 -10
- package/components/identity.basic/operations/create.js.map +0 -1
- package/components/identity.basic/source/create.ts +0 -18
- package/components/identity.federation/operations/create.d.ts +0 -10
- package/components/identity.federation/operations/create.js +0 -15
- package/components/identity.federation/operations/create.js.map +0 -1
- package/components/identity.federation/operations/lib/assertions-as-values.d.ts +0 -4
- package/components/identity.federation/operations/lib/assertions-as-values.js.map +0 -1
- package/components/identity.federation/operations/lib/jwt.d.ts +0 -20
- package/components/identity.federation/operations/lib/jwt.js +0 -136
- package/components/identity.federation/operations/lib/jwt.js.map +0 -1
- package/components/identity.federation/operations/schemas.d.ts +0 -59
- package/components/identity.federation/operations/schemas.js +0 -9
- package/components/identity.federation/operations/schemas.js.map +0 -1
- package/components/identity.federation/operations/types.d.ts +0 -51
- package/components/identity.federation/operations/types.js.map +0 -1
- package/components/identity.federation/source/create.ts +0 -26
- package/components/identity.federation/source/lib/assertions-as-values.ts +0 -19
- package/components/identity.federation/source/lib/jwt.test.ts +0 -56
- package/components/identity.federation/source/lib/jwt.ts +0 -171
- package/components/identity.federation/source/schemas.ts +0 -61
- package/components/identity.federation/source/types.ts +0 -56
- package/components/identity.tokens/operations/types.d.ts +0 -39
- package/components/identity.tokens/operations/types.js.map +0 -1
- package/components/identity.tokens/source/types.ts +0 -47
- package/components/octets.storage/operations/fetch.js +0 -46
- package/components/octets.storage/operations/list.js +0 -7
- package/components/octets.storage/operations/permute.js +0 -7
- package/components/octets.storage/operations/store.js +0 -11
- package/documentation/vary.md +0 -75
- package/features/steps/IdP.ts +0 -154
- package/features/steps/components/octets.tester/operations/diversify.js +0 -14
- package/features/vary.feature +0 -203
- package/schemas/octets/context.cos.yaml +0 -1
- package/schemas/octets/fetch.cos.yaml +0 -3
- package/schemas/octets/permute.cos.yaml +0 -1
- package/schemas/octets/store.cos.yaml +0 -3
- package/source/HTTP/Server.test.ts +0 -126
- package/source/directives/octets/Fetch.ts +0 -100
- package/source/directives/octets/List.ts +0 -72
- package/source/directives/octets/Permute.ts +0 -44
- package/source/directives/vary/Directive.ts +0 -7
- package/source/directives/vary/Embed.ts +0 -68
- package/source/directives/vary/Vary.ts +0 -50
- package/source/directives/vary/embeddings/Embedding.ts +0 -7
- package/source/directives/vary/embeddings/Header.ts +0 -32
- package/source/directives/vary/embeddings/Language.ts +0 -31
- package/source/directives/vary/embeddings/Parameter.ts +0 -14
- package/source/directives/vary/embeddings/index.ts +0 -11
- package/source/directives/vary/index.ts +0 -3
- package/transpiled/directives/octets/Fetch.js.map +0 -1
- package/transpiled/directives/octets/List.d.ts +0 -16
- package/transpiled/directives/octets/List.js +0 -74
- package/transpiled/directives/octets/List.js.map +0 -1
- package/transpiled/directives/octets/Permute.d.ts +0 -11
- package/transpiled/directives/octets/Permute.js.map +0 -1
- package/transpiled/directives/octets/Store.js.map +0 -1
- package/transpiled/directives/vary/Directive.d.ts +0 -6
- package/transpiled/directives/vary/Directive.js.map +0 -1
- package/transpiled/directives/vary/Embed.d.ts +0 -11
- package/transpiled/directives/vary/Embed.js +0 -51
- package/transpiled/directives/vary/Embed.js.map +0 -1
- package/transpiled/directives/vary/Properties.js.map +0 -1
- package/transpiled/directives/vary/Vary.d.ts +0 -10
- package/transpiled/directives/vary/Vary.js +0 -36
- package/transpiled/directives/vary/Vary.js.map +0 -1
- package/transpiled/directives/vary/embeddings/Embedding.d.ts +0 -6
- package/transpiled/directives/vary/embeddings/Embedding.js.map +0 -1
- package/transpiled/directives/vary/embeddings/Header.d.ts +0 -7
- package/transpiled/directives/vary/embeddings/Header.js +0 -28
- package/transpiled/directives/vary/embeddings/Header.js.map +0 -1
- package/transpiled/directives/vary/embeddings/Language.d.ts +0 -7
- package/transpiled/directives/vary/embeddings/Language.js +0 -28
- package/transpiled/directives/vary/embeddings/Language.js.map +0 -1
- package/transpiled/directives/vary/embeddings/Parameter.d.ts +0 -7
- package/transpiled/directives/vary/embeddings/Parameter.js +0 -14
- package/transpiled/directives/vary/embeddings/Parameter.js.map +0 -1
- package/transpiled/directives/vary/embeddings/index.d.ts +0 -5
- package/transpiled/directives/vary/embeddings/index.js +0 -12
- package/transpiled/directives/vary/embeddings/index.js.map +0 -1
- package/transpiled/directives/vary/index.d.ts +0 -2
- package/transpiled/directives/vary/index.js +0 -6
- package/transpiled/directives/vary/index.js.map +0 -1
- /package/components/{identity.federation/operations → identity.tokens/operations/lib}/types.js +0 -0
- /package/schemas/octets/{list.cos.yaml → get.cos.yaml} +0 -0
- /package/{components/identity.tokens/operations → transpiled/directives/flow}/types.js +0 -0
- /package/transpiled/directives/{vary → map}/Directive.js +0 -0
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
'use strict'
|
|
2
|
+
|
|
3
|
+
const { Readable } = require('node:stream')
|
|
4
|
+
const { posix } = require('node:path')
|
|
5
|
+
const { Err } = require('error-value')
|
|
6
|
+
const { match } = require('matchacho')
|
|
7
|
+
|
|
8
|
+
async function put (input, context) {
|
|
9
|
+
const { storage, request, location, accept, limit, trust } = input
|
|
10
|
+
const url = request.url
|
|
11
|
+
const id = request.headers['content-id']
|
|
12
|
+
const claim = request.headers['content-type']
|
|
13
|
+
const attributes = parseAttributes(request.headers['content-attributes'])
|
|
14
|
+
const reference = request.headers['content-location']
|
|
15
|
+
|
|
16
|
+
/** @type {Readable} */
|
|
17
|
+
let body = request
|
|
18
|
+
|
|
19
|
+
const options = { claim, accept, attributes }
|
|
20
|
+
|
|
21
|
+
if (id !== undefined) {
|
|
22
|
+
if (!ID_RX.test(id))
|
|
23
|
+
return ERR_INVALID_ID
|
|
24
|
+
|
|
25
|
+
options.id = id
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
if (reference !== undefined) {
|
|
29
|
+
const length = Number.parseInt(request.headers['content-length'])
|
|
30
|
+
|
|
31
|
+
if (length !== 0)
|
|
32
|
+
return ERR_LENGTH
|
|
33
|
+
|
|
34
|
+
if (!trusted(reference, trust))
|
|
35
|
+
return ERR_UNTRUSTED
|
|
36
|
+
|
|
37
|
+
body = await download(reference)
|
|
38
|
+
|
|
39
|
+
if (body instanceof Error)
|
|
40
|
+
return body
|
|
41
|
+
|
|
42
|
+
options.origin = reference
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
if (limit !== undefined)
|
|
46
|
+
options.limit = limit
|
|
47
|
+
|
|
48
|
+
const path = posix.resolve(url, location ?? '.')
|
|
49
|
+
|
|
50
|
+
return context.storages[storage].put(path, body, options)
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* @param {string | string[] | undefined} values
|
|
55
|
+
* @returns {Record<string, string>}
|
|
56
|
+
*/
|
|
57
|
+
function parseAttributes (values) {
|
|
58
|
+
const attributes = {}
|
|
59
|
+
|
|
60
|
+
if (values === undefined)
|
|
61
|
+
return attributes
|
|
62
|
+
|
|
63
|
+
if (typeof values === 'string')
|
|
64
|
+
values = values.split(',')
|
|
65
|
+
|
|
66
|
+
for (const pair of values) {
|
|
67
|
+
const eq = pair.indexOf('=')
|
|
68
|
+
const key = (eq === -1 ? pair : pair.slice(0, eq)).trim()
|
|
69
|
+
|
|
70
|
+
attributes[key] = eq === -1 ? 'true' : pair.slice(eq + 1).trim()
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
return attributes
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* @param {string} location
|
|
78
|
+
* @return {Readable | Error}
|
|
79
|
+
*/
|
|
80
|
+
async function download (location) {
|
|
81
|
+
const response = await fetch(location)
|
|
82
|
+
|
|
83
|
+
if (!response.ok)
|
|
84
|
+
return ERR_UNAVAILABLE
|
|
85
|
+
|
|
86
|
+
return response.body === null ? ERR_UNAVAILABLE : Readable.fromWeb(
|
|
87
|
+
/** @type {import('node:stream/web').ReadableStream} **/ response.body)
|
|
88
|
+
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
/**
|
|
92
|
+
* @param {string} location
|
|
93
|
+
* @param {Trust | undefined} trust
|
|
94
|
+
* @return {boolean}
|
|
95
|
+
*/
|
|
96
|
+
function trusted (location, trust) {
|
|
97
|
+
if (trust === undefined)
|
|
98
|
+
return false
|
|
99
|
+
|
|
100
|
+
const url = toURL(location)
|
|
101
|
+
|
|
102
|
+
if (url === null)
|
|
103
|
+
return false
|
|
104
|
+
|
|
105
|
+
for (const permission of trust) {
|
|
106
|
+
const ok = match(permission,
|
|
107
|
+
String, (origin) => url.origin === origin,
|
|
108
|
+
RegExp, (pattern) => pattern.test(url.origin))
|
|
109
|
+
|
|
110
|
+
if (ok)
|
|
111
|
+
return true
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
return false
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
function toURL (location) {
|
|
118
|
+
try {
|
|
119
|
+
return new URL(location)
|
|
120
|
+
} catch (error) {
|
|
121
|
+
return null
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
const ERR_UNTRUSTED = new Err('LOCATION_UNTRUSTED', 'Location is not trusted')
|
|
126
|
+
const ERR_LENGTH = new Err('LOCATION_LENGTH', 'Content-Length must be 0 when Content-Location is used')
|
|
127
|
+
const ERR_UNAVAILABLE = new Err('LOCATION_UNAVAILABLE', 'Location is not available')
|
|
128
|
+
const ERR_INVALID_ID = new Err('INVALID_ID', 'Invalid Content-ID')
|
|
129
|
+
|
|
130
|
+
const ID_RX = /^[a-zA-Z0-9-_]{1,32}$/
|
|
131
|
+
|
|
132
|
+
exports.effect = put
|
|
133
|
+
|
|
134
|
+
/** @typedef {Array<string | RegExp>} Trust */
|
|
135
|
+
/** @typedef {import('node:stream').Readable} Readable */
|
package/documentation/access.md
CHANGED
|
@@ -25,7 +25,11 @@ responds with an authorization error.
|
|
|
25
25
|
Grants access if its value is `true` and no credentials were provided[^1].
|
|
26
26
|
|
|
27
27
|
[^1]: Credentials in the request make the
|
|
28
|
-
response [non-
|
|
28
|
+
response [non-cacheable](https://datatracker.ietf.org/doc/html/rfc7234#section-3).
|
|
29
|
+
|
|
30
|
+
### `anyone`
|
|
31
|
+
|
|
32
|
+
Grants access if its value is `true` and valid credentials were provided.
|
|
29
33
|
|
|
30
34
|
### `id`
|
|
31
35
|
|
|
@@ -37,11 +41,8 @@ the directive's value.
|
|
|
37
41
|
Given the Route declaration and corresponding HTTP request:
|
|
38
42
|
|
|
39
43
|
```yaml
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
exposition:
|
|
43
|
-
/users/:user-id:
|
|
44
|
-
id: "user-id"
|
|
44
|
+
/users/:user-id:
|
|
45
|
+
id: "user-id"
|
|
45
46
|
```
|
|
46
47
|
|
|
47
48
|
```http
|
|
@@ -57,11 +58,8 @@ is `87480f2bd88048518c529d7957475ecd`.
|
|
|
57
58
|
Grants access if resolved Identity has a role matching the directive's value or one of its values.
|
|
58
59
|
|
|
59
60
|
```yaml
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
exposition:
|
|
63
|
-
/code:
|
|
64
|
-
role: [developer, reviewer]
|
|
61
|
+
/code:
|
|
62
|
+
role: [developer, reviewer]
|
|
65
63
|
```
|
|
66
64
|
|
|
67
65
|
Access will be granted if the resolved Identity has a role that matches `developer` or `reviewer`.
|
|
@@ -73,11 +71,50 @@ Read [Roles](#roles) section for more details.
|
|
|
73
71
|
The `role` directive can be used with a placeholder in the route.
|
|
74
72
|
|
|
75
73
|
```yaml
|
|
76
|
-
|
|
74
|
+
/:org-id:
|
|
75
|
+
role: app:{org-id}:moderator
|
|
76
|
+
```
|
|
77
77
|
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
78
|
+
### `claims`
|
|
79
|
+
|
|
80
|
+
Grants access if `Bearer` authentication scheme is used
|
|
81
|
+
and the Token's claims matches the specified values.
|
|
82
|
+
|
|
83
|
+
```yaml
|
|
84
|
+
/:
|
|
85
|
+
auth:claims:
|
|
86
|
+
iss: https://id.example.com
|
|
87
|
+
sub: someone
|
|
88
|
+
aud: stars
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
> If OIDC token claim contains `aud`
|
|
92
|
+
> as [an array](https://openid.net/specs/openid-connect-core-1_0.html#IDTokenValidation), the
|
|
93
|
+
> directive will match if at least one value.
|
|
94
|
+
|
|
95
|
+
At least one property is required.
|
|
96
|
+
|
|
97
|
+
Values may refer to the Route parameters or the request authority:
|
|
98
|
+
|
|
99
|
+
```yaml
|
|
100
|
+
/secrets/:org-id:
|
|
101
|
+
auth:claims:
|
|
102
|
+
iss: https://id.org.com
|
|
103
|
+
sub: /:org-id
|
|
104
|
+
aud: :authority
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
An expression `:domain` will match if the domain in the value of `iss` matches the request
|
|
108
|
+
authority, excluding the most specific subdomain.
|
|
109
|
+
|
|
110
|
+
Issuer `https://accounts.example.com` matches request authorities `images.example.com`
|
|
111
|
+
and `sub.images.example.com`, but not `images.another.com`.
|
|
112
|
+
|
|
113
|
+
```yaml
|
|
114
|
+
/images/:user-id:
|
|
115
|
+
auth:claims:
|
|
116
|
+
iss: :domain
|
|
117
|
+
sub: /:org-id
|
|
81
118
|
```
|
|
82
119
|
|
|
83
120
|
### `rule`
|
|
@@ -88,17 +125,34 @@ directives grant access. The value of the `rule` directive can be a single Rule
|
|
|
88
125
|
#### Example
|
|
89
126
|
|
|
90
127
|
```yaml
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
rule:
|
|
96
|
-
id: user-id
|
|
97
|
-
role: developer
|
|
128
|
+
/commits/:user-id:
|
|
129
|
+
rule:
|
|
130
|
+
id: user-id
|
|
131
|
+
role: developer
|
|
98
132
|
```
|
|
99
133
|
|
|
100
134
|
Access will be granted if an Identity matches a `user-id` placeholder and has a Role of `developer`.
|
|
101
135
|
|
|
136
|
+
### `input`
|
|
137
|
+
|
|
138
|
+
Restricts access based on the request body (which must be an object).
|
|
139
|
+
|
|
140
|
+
```yaml
|
|
141
|
+
/commits/:id:
|
|
142
|
+
PUT:
|
|
143
|
+
auth:role: [developer, reviewer]
|
|
144
|
+
auth:input:
|
|
145
|
+
- prop: approved
|
|
146
|
+
role: reviewer
|
|
147
|
+
- prop: message
|
|
148
|
+
role: developer
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
The example above restricts access to the `approved` property of the request body to the identity
|
|
152
|
+
with the `reviewer` role, and the `message` property to the identity with the `developer` role.
|
|
153
|
+
|
|
154
|
+
> `auth:input` directive does not grant access by itself.
|
|
155
|
+
|
|
102
156
|
### `delegate`
|
|
103
157
|
|
|
104
158
|
Embeds the value of the current Identity into the request body as a property named after the value
|
|
@@ -124,11 +178,8 @@ directive.
|
|
|
124
178
|
#### Example
|
|
125
179
|
|
|
126
180
|
```yaml
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
/exposition:
|
|
130
|
-
/commits/:user-id:
|
|
131
|
-
role: developer:senior
|
|
181
|
+
/commits/:user-id:
|
|
182
|
+
role: developer:senior
|
|
132
183
|
```
|
|
133
184
|
|
|
134
185
|
The example above defines a `role` directive with the specified `developer:senior` Role Scope.
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# Authorities
|
|
2
|
+
|
|
3
|
+
Authorities are a mechanism that allows serving multiple domains from a single instance of the
|
|
4
|
+
application.
|
|
5
|
+
|
|
6
|
+
## Definition
|
|
7
|
+
|
|
8
|
+
The `authorities` definition is a map of authority identifiers to the `:authority` pseudo-header
|
|
9
|
+
values.
|
|
10
|
+
|
|
11
|
+
```yaml
|
|
12
|
+
# context.toa.yaml
|
|
13
|
+
|
|
14
|
+
exposition:
|
|
15
|
+
authorities:
|
|
16
|
+
one: the.one.com
|
|
17
|
+
two: the.two.com
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
## Mappings
|
|
21
|
+
|
|
22
|
+
To pass the requested authority to the operation call, [`map:authority` directive](map#embeddings)
|
|
23
|
+
can be used.
|
|
24
|
+
|
|
25
|
+
```yaml
|
|
26
|
+
# manifest.toa.yaml
|
|
27
|
+
|
|
28
|
+
exposition:
|
|
29
|
+
/:
|
|
30
|
+
GET:
|
|
31
|
+
map:authority: hostname
|
|
32
|
+
endpoint: observe
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
If the value of the `authority` pseudo-header is not present in the `authorities` definition,
|
|
36
|
+
then the value is embedded as is.
|
|
37
|
+
|
|
38
|
+
## Identity
|
|
39
|
+
|
|
40
|
+
Credentials stored or issued by the [authentication system](identity.md) are associated with an
|
|
41
|
+
authority.
|
|
42
|
+
Credentials in one authority are not valid in another,
|
|
43
|
+
or may be associated with a different Identity; in other words, Identity exists in the context of an
|
|
44
|
+
authority.
|
|
45
|
+
|
|
46
|
+
> :warning:<br/>
|
|
47
|
+
> Changing the authority identifier will break compatibility with existing stored or issued
|
|
48
|
+
> credentials.
|
|
@@ -20,7 +20,7 @@ and pepper.
|
|
|
20
20
|
configuration:
|
|
21
21
|
identity.basic:
|
|
22
22
|
rounds: 10 # salt rounds
|
|
23
|
-
|
|
23
|
+
pepper: '' # hashing pepper
|
|
24
24
|
```
|
|
25
25
|
|
|
26
26
|
### Credentials constraints
|
|
@@ -74,6 +74,12 @@ username: string
|
|
|
74
74
|
password: string
|
|
75
75
|
```
|
|
76
76
|
|
|
77
|
+
Returns `201 Created` if the Identity is created,
|
|
78
|
+
or `422 Unprocessable Entity` with one of the error codes:
|
|
79
|
+
|
|
80
|
+
- `INVALID_USERNAME` - `username` does not match constraints
|
|
81
|
+
- `INVALID_PASSWORD` - `password` does not match constraints
|
|
82
|
+
|
|
77
83
|
Access is [anonymous](access.md#anonymous).
|
|
78
84
|
|
|
79
85
|
#### `/identity/basic/:id/`
|
|
@@ -89,6 +95,23 @@ password?: string
|
|
|
89
95
|
|
|
90
96
|
Access requires basic credentials of the modified Identity or `system:identity:basic` role.
|
|
91
97
|
|
|
98
|
+
<code>POST</code> Incept new basic credentials. Request body is as follows:
|
|
99
|
+
|
|
100
|
+
```yaml
|
|
101
|
+
username: string
|
|
102
|
+
password: string
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
Identity should not have associated basic credentials. Access requires any credentials of the Identity.
|
|
106
|
+
|
|
107
|
+
#### `/identity/basic/usernames/:username/`
|
|
108
|
+
|
|
109
|
+
<code>GET</code> Check if the username is available.
|
|
110
|
+
|
|
111
|
+
`username` must be Base64 URL encoded.
|
|
112
|
+
|
|
113
|
+
Returns empty response with status `204` if the username is already taken or `404` if it is available.
|
|
114
|
+
|
|
92
115
|
## Identity federation (OpenID connect)
|
|
93
116
|
|
|
94
117
|
The `identity.federation` component manages OpenID Connect federated identities.
|
|
@@ -111,8 +134,8 @@ secrets.
|
|
|
111
134
|
configuration:
|
|
112
135
|
identity.federation:
|
|
113
136
|
trust:
|
|
114
|
-
-
|
|
115
|
-
|
|
137
|
+
- iss: https://token.actions.githubusercontent.com
|
|
138
|
+
aud:
|
|
116
139
|
- https://github.com/tinovyatkin
|
|
117
140
|
- https://github.com/temich
|
|
118
141
|
|
|
@@ -122,9 +145,9 @@ configuration:
|
|
|
122
145
|
k1: <secret-to-be-used-for-hs256>
|
|
123
146
|
```
|
|
124
147
|
|
|
125
|
-
##
|
|
148
|
+
## Local tokens
|
|
126
149
|
|
|
127
|
-
The `identity.tokens` component manages
|
|
150
|
+
The `identity.tokens` component manages local authentication tokens.
|
|
128
151
|
|
|
129
152
|
These tokens carry the information required to authenticate the Identity and authorize access.
|
|
130
153
|
|
|
@@ -143,21 +166,84 @@ authorization: Token ...
|
|
|
143
166
|
cache-control: no-store
|
|
144
167
|
```
|
|
145
168
|
|
|
169
|
+
### Custom tokens
|
|
170
|
+
|
|
171
|
+
Custom tokens can be issued with a specific set of permissions and scopes for the own Identity or by
|
|
172
|
+
an Identity with the `system:identity:tokens` role.
|
|
173
|
+
|
|
174
|
+
Tokens are issued with custom secret keys and are not subject to [token rotation](#token-rotation).
|
|
175
|
+
To invalidate a custom token, its secret key must be deleted.
|
|
176
|
+
|
|
177
|
+
Custom tokens have no `refresh` period, that is, never become obsolete and never refreshed.
|
|
178
|
+
|
|
179
|
+
```
|
|
180
|
+
POST /identity/tokens/<identity>/
|
|
181
|
+
host: nex.toa.io
|
|
182
|
+
authorization: ...
|
|
183
|
+
accept: application/yaml
|
|
184
|
+
content-type: application/yaml
|
|
185
|
+
|
|
186
|
+
lifetime: 3600
|
|
187
|
+
scopes: [app:developer]
|
|
188
|
+
permissions:
|
|
189
|
+
/users/fc8e66dd/: [GET, PUT]
|
|
190
|
+
/posts/fc8e66dd/**/comments/: [*]
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
```
|
|
194
|
+
201 Created
|
|
195
|
+
content-type: application/yaml
|
|
196
|
+
|
|
197
|
+
token: <token>
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
- `lifetime`: Issued token will be valid for this period
|
|
201
|
+
(default is specified in [the configuration](#token-rotation)).
|
|
202
|
+
The value of `0` means the token will not expire, which is supported, but
|
|
203
|
+
**strongly not recommended** for production environments.
|
|
204
|
+
- `scopes`: Issued token will assume only specified [role scopes](access.md#roles).
|
|
205
|
+
- `permissions`: Issued token will have permissions to access only specified resources and methods.
|
|
206
|
+
Supports [glob patterns](https://www.gnu.org/software/bash/manual/html_node/Pattern-Matching.html)
|
|
207
|
+
and a wildcard method.
|
|
208
|
+
|
|
209
|
+
> `roles` and `permissions` are additional restrictions applied on top of the Identity’s inherent
|
|
210
|
+
> privileges.
|
|
211
|
+
|
|
212
|
+
### Custom token invalidation
|
|
213
|
+
|
|
214
|
+
Custom tokens can be invalidated by deleting the secret key used to issue them.
|
|
215
|
+
This can be done by the Identity that issued the token or by an Identity with
|
|
216
|
+
the `system:identity:keys` role.
|
|
217
|
+
|
|
218
|
+
```
|
|
219
|
+
DELETE /identity/keys/<identity>/<key.id>/
|
|
220
|
+
authorization: ...
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
Token secret key `id` can be obtained from the list of issued tokens (or from the footer of the
|
|
224
|
+
token itself).
|
|
225
|
+
|
|
226
|
+
```
|
|
227
|
+
GET /identity/keys/<identity>/
|
|
228
|
+
authorization: ...
|
|
229
|
+
```
|
|
230
|
+
|
|
146
231
|
### Token encryption
|
|
147
232
|
|
|
148
233
|
Issued tokens are encrypted
|
|
149
234
|
with [PASETO V3 encryption](https://github.com/panva/paseto/blob/main/docs/README.md#v3encryptpayload-key-options)
|
|
150
|
-
using the `
|
|
235
|
+
using the first key from the `keys` configuration value.
|
|
151
236
|
|
|
152
237
|
```yaml
|
|
153
238
|
# context.toa.yaml
|
|
154
239
|
|
|
155
240
|
configuration:
|
|
156
241
|
identity.tokens:
|
|
157
|
-
|
|
242
|
+
keys:
|
|
243
|
+
2024q1: $TOKEN_SECRET_2024Q1
|
|
158
244
|
```
|
|
159
245
|
|
|
160
|
-
|
|
246
|
+
At least one key in the `keys` configuration value is required.
|
|
161
247
|
|
|
162
248
|
> Valid secret key may be generated using the [`toa key` command](/runtime/cli/readme.md#key).
|
|
163
249
|
|
|
@@ -197,43 +283,18 @@ Token revocation takes effect once the `refresh` period of the currently issued
|
|
|
197
283
|
|
|
198
284
|
### Secret rotation
|
|
199
285
|
|
|
200
|
-
Tokens are always encrypted using the `
|
|
201
|
-
|
|
202
|
-
the `key0` and `key1` values in order.
|
|
203
|
-
|
|
204
|
-
`key0` is considered the "current key," and `key1` is considered the "previous key."
|
|
205
|
-
|
|
206
|
-
```yaml
|
|
207
|
-
# context.toa.yaml
|
|
208
|
-
|
|
209
|
-
configuration:
|
|
210
|
-
identity.tokens:
|
|
211
|
-
key0: $TOKEN_ENCRYPTION_KEY_2023Q3
|
|
212
|
-
key1: $TOKEN_ENCRYPTION_KEY_2023Q2
|
|
213
|
-
```
|
|
214
|
-
|
|
215
|
-
Secret rotation is performed by adding a new key as the `key0` value and moving the existing `key0`
|
|
216
|
-
to the `key1` value.
|
|
217
|
-
|
|
218
|
-
When rolling out the new secret key, there will be a period of time when the new key is deployed to
|
|
219
|
-
some Exposition
|
|
220
|
-
instances. During this time, these instances will start using the new key to encrypt tokens, while
|
|
221
|
-
other instances will
|
|
222
|
-
continue using the current key and will not be able to decrypt tokens encrypted with the new key.
|
|
286
|
+
Tokens are always encrypted using the first key from the `keys` configuration value,
|
|
287
|
+
and decrypted by the key used to encrypt them.
|
|
223
288
|
|
|
224
|
-
To
|
|
289
|
+
To rotate the secret key, a new key must be added to the top of the `keys` configuration value, that
|
|
290
|
+
is, it will be used to encrypt new tokens.
|
|
225
291
|
|
|
226
|
-
|
|
292
|
+
Old keys must be removed only after the `refresh` period of the previously issued tokens has
|
|
293
|
+
expired.
|
|
227
294
|
|
|
228
|
-
>
|
|
229
|
-
>
|
|
230
|
-
>
|
|
231
|
-
> the current `key1`
|
|
232
|
-
> value.
|
|
233
|
-
|
|
234
|
-
1. Deploy the new secret key to all Exposition instances as `key1`. This enables all instances to
|
|
235
|
-
decrypt tokens
|
|
236
|
-
encrypted with the new key while still using the current key for encryption.
|
|
295
|
+
> Let's say you are adding a new secret key each quarter: `2024Q1`, `2024Q2` and so on.
|
|
296
|
+
> The old key `2024Q1` must be removed from the configuration only when the `refresh` period after
|
|
297
|
+
> the new key `2024Q2` was added has expired.
|
|
237
298
|
|
|
238
299
|
```yaml
|
|
239
300
|
# context.toa.yaml
|
|
@@ -329,3 +390,17 @@ roles:
|
|
|
329
390
|
- developer
|
|
330
391
|
- system:identity:roles
|
|
331
392
|
```
|
|
393
|
+
|
|
394
|
+
When no credentials are provided, transient Identity is created.
|
|
395
|
+
|
|
396
|
+
```http
|
|
397
|
+
GET /identity/
|
|
398
|
+
accept: application/yaml
|
|
399
|
+
```
|
|
400
|
+
|
|
401
|
+
```
|
|
402
|
+
201 Created
|
|
403
|
+
|
|
404
|
+
id: 332017649c814649b25ee466c1fe4534
|
|
405
|
+
roles: []
|
|
406
|
+
```
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# Development tools
|
|
2
|
+
|
|
3
|
+
## `dev:stub`
|
|
4
|
+
|
|
5
|
+
Returns a successful response with the given body.
|
|
6
|
+
|
|
7
|
+
```yaml
|
|
8
|
+
/foo:
|
|
9
|
+
dev:sub: Hello!
|
|
10
|
+
/bar:
|
|
11
|
+
dev:sub:
|
|
12
|
+
hello: world
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
## `dev:sleep`
|
|
16
|
+
|
|
17
|
+
Enables random delay before processing the request, up to given maximum time in milliseconds.
|
|
18
|
+
|
|
19
|
+
Desired delay range can be set in the `sleep` request header as a JSON array of two numbers, the minimum
|
|
20
|
+
and maximum delay in milliseconds.
|
|
21
|
+
|
|
22
|
+
```yaml
|
|
23
|
+
/foo:
|
|
24
|
+
dev:sleep: 1000
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
```http
|
|
28
|
+
GET /foo/ HTTP/1.1
|
|
29
|
+
sleep: [500, 1000]
|
|
30
|
+
```
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# Request flow
|
|
2
|
+
|
|
3
|
+
## `flow:fetch`
|
|
4
|
+
|
|
5
|
+
Fetches the content from the resource returned by the specified endpoint.
|
|
6
|
+
|
|
7
|
+
The value of the directive is a `string` specifying endpoint to be called for the redirection
|
|
8
|
+
request.
|
|
9
|
+
|
|
10
|
+
Request `authority`, `path` and `parameters` are passed as input to the redirection endpoint,
|
|
11
|
+
and it must return a URL `string`, an `Error` or an object with the following properties:
|
|
12
|
+
|
|
13
|
+
```yaml
|
|
14
|
+
url: string
|
|
15
|
+
options?:
|
|
16
|
+
method?: string
|
|
17
|
+
headers?: Record<string, string>
|
|
18
|
+
body?: string
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
If it returns a URL or Request, then the response to the specified request is returned as the
|
|
22
|
+
response to the original request, along with the `content-type`, `content-length`, and `etag`
|
|
23
|
+
headers.
|
|
24
|
+
|
|
25
|
+
## `flow:compose`
|
|
26
|
+
|
|
27
|
+
Compose an object from a response stream in object mode.
|
|
28
|
+
|
|
29
|
+
The value of the directive is an object whose values are JavaScript expressions
|
|
30
|
+
accessing the response stream objects composed into an array named `$`.
|
|
31
|
+
|
|
32
|
+
```yaml
|
|
33
|
+
flow:compose:
|
|
34
|
+
one: $[0].status
|
|
35
|
+
two: $[1].data.foo
|
|
36
|
+
three: $[2].amount
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
```yaml
|
|
40
|
+
flow:compose:
|
|
41
|
+
sum: $[0].value + $[1].value
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
Be careful.
|