@toa.io/extensions.exposition 1.0.0-alpha.13 → 1.0.0-alpha.131
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/manifest.toa.yaml +14 -6
- package/components/identity.bans/operations/transit.d.ts +14 -0
- package/components/identity.bans/operations/transit.js +11 -0
- package/components/identity.bans/operations/transit.js.map +1 -0
- package/components/identity.bans/operations/tsconfig.tsbuildinfo +1 -0
- package/components/identity.bans/source/transit.ts +21 -0
- package/components/identity.bans/tsconfig.json +9 -0
- package/components/identity.basic/manifest.toa.yaml +28 -10
- 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/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 +8 -6
- 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 +8 -4
- package/components/identity.basic/source/authenticate.ts +18 -7
- package/components/identity.basic/source/incept.ts +38 -0
- package/components/identity.basic/source/transit.ts +11 -9
- package/components/identity.basic/source/types.ts +8 -4
- package/components/identity.federation/manifest.toa.yaml +61 -19
- package/components/identity.federation/operations/authenticate.d.ts +13 -2
- package/components/identity.federation/operations/authenticate.js +10 -11
- package/components/identity.federation/operations/authenticate.js.map +1 -1
- package/components/identity.federation/operations/decode.d.ts +2 -0
- package/{transpiled/directives/octets/Permute.js → components/identity.federation/operations/decode.js} +7 -32
- package/components/identity.federation/operations/decode.js.map +1 -0
- package/components/identity.federation/operations/incept.d.ts +10 -0
- package/components/identity.federation/operations/incept.js +14 -0
- package/components/identity.federation/operations/incept.js.map +1 -0
- package/components/identity.federation/operations/lib/assertions-as-values.js +4 -2
- package/components/identity.federation/operations/lib/assertions-as-values.js.map +1 -1
- package/components/identity.federation/operations/lib/get.d.ts +1 -0
- package/components/identity.federation/operations/lib/get.js +64 -0
- package/components/identity.federation/operations/lib/get.js.map +1 -0
- package/components/identity.federation/operations/lib/jwt.d.ts +4 -5
- package/components/identity.federation/operations/lib/jwt.js +20 -16
- package/components/identity.federation/operations/lib/jwt.js.map +1 -1
- package/components/identity.federation/operations/tsconfig.tsbuildinfo +1 -1
- package/components/identity.federation/operations/types/configuration.d.ts +15 -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.d.ts → types/context.d.ts} +11 -12
- package/{transpiled/directives/vary/embeddings/Embedding.js → components/identity.federation/operations/types/context.js} +1 -1
- 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 +3 -0
- package/components/identity.federation/operations/types/index.js +20 -0
- package/components/identity.federation/operations/types/index.js.map +1 -0
- package/components/identity.federation/source/authenticate.ts +24 -17
- package/components/identity.federation/source/decode.ts +9 -0
- package/components/identity.federation/source/incept.ts +26 -0
- package/components/identity.federation/source/lib/assertions-as-values.ts +5 -2
- package/components/identity.federation/source/lib/get.ts +82 -0
- package/components/identity.federation/source/lib/jwt.test.ts +127 -4
- package/components/identity.federation/source/lib/jwt.ts +26 -19
- package/components/identity.federation/source/types/configuration.ts +16 -0
- package/components/identity.federation/source/{types.ts → types/context.ts} +12 -12
- package/components/identity.federation/source/types/entity.ts +6 -0
- package/components/identity.federation/source/types/index.ts +3 -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.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 +70 -0
- package/components/identity.passkeys/operations/challenge.js.map +1 -0
- package/components/identity.passkeys/operations/create.d.ts +17 -0
- package/components/identity.passkeys/operations/create.js +52 -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 +16 -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 +14 -0
- package/components/identity.passkeys/operations/use.js +52 -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 +111 -0
- package/components/identity.passkeys/source/create.ts +71 -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 +17 -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 +70 -0
- package/components/identity.passkeys/tsconfig.json +9 -0
- package/components/identity.roles/manifest.toa.yaml +7 -5
- package/components/identity.roles/operations/grant.d.ts +1 -1
- package/components/identity.roles/operations/grant.js +8 -7
- package/components/identity.roles/operations/grant.js.map +1 -1
- package/components/identity.roles/operations/lib/Entity.d.ts +1 -1
- package/components/identity.roles/operations/tsconfig.tsbuildinfo +1 -1
- package/components/identity.roles/source/grant.ts +9 -8
- package/components/identity.roles/source/lib/Entity.ts +1 -1
- package/components/identity.tokens/manifest.toa.yaml +98 -13
- package/components/identity.tokens/operations/authenticate.d.ts +3 -3
- package/components/identity.tokens/operations/authenticate.js +20 -13
- package/components/identity.tokens/operations/authenticate.js.map +1 -1
- package/components/identity.tokens/operations/decrypt.d.ts +12 -3
- package/components/identity.tokens/operations/decrypt.js +62 -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 +26 -6
- 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 +74 -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/receivers/identity.bans.created.js +3 -0
- package/components/identity.tokens/source/authenticate.test.ts +22 -9
- package/components/identity.tokens/source/authenticate.ts +23 -15
- package/components/identity.tokens/source/decrypt.test.ts +33 -18
- package/components/identity.tokens/source/decrypt.ts +91 -20
- package/components/identity.tokens/source/encrypt.test.ts +47 -13
- package/components/identity.tokens/source/encrypt.ts +37 -9
- 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 +85 -0
- package/components/identity.tokens/source/revoke.ts +2 -2
- package/components/octets.storage/manifest.toa.yaml +11 -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 +91 -29
- package/documentation/authorities.md +48 -0
- package/documentation/cache.md +8 -1
- package/documentation/components.md +125 -54
- package/documentation/dev.md +30 -0
- package/documentation/flow.md +44 -0
- package/documentation/identity.md +30 -23
- package/documentation/introspection.md +82 -0
- package/documentation/map.md +76 -0
- package/documentation/octets.md +122 -69
- package/documentation/passkeys.md +4 -0
- package/documentation/protocol.md +11 -4
- package/documentation/query.md +29 -4
- package/documentation/require.md +15 -0
- package/documentation/tree.md +13 -0
- package/features/access.feature +129 -48
- package/features/annotation.feature +1 -0
- package/features/auth.claims.feature +171 -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 +100 -0
- package/features/authorities.tokens.feature +117 -0
- package/features/body.feature +2 -0
- package/features/cache.feature +125 -5
- package/features/cors.feature +8 -2
- 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 +32 -7
- package/features/etag.feature +109 -1
- package/features/flow.feature +148 -0
- package/features/identity.bans.feature +137 -0
- package/features/identity.basic.feature +85 -28
- package/features/identity.feature +18 -6
- package/features/identity.federation.feature +89 -18
- package/features/identity.roles.feature +112 -19
- package/features/identity.tokens.feature +13 -44
- package/features/identtiy.tokens.custom.feature +247 -0
- package/features/interruptions.feature +19 -0
- package/features/introspection.feature +153 -0
- package/features/io.feature +38 -1
- package/features/map.feature +305 -0
- package/features/methods.feature +47 -0
- package/features/octets.cloudinary.feature +71 -0
- package/features/octets.download.feature +189 -0
- package/features/octets.entries.feature +13 -55
- package/features/octets.feature +90 -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 +339 -66
- package/features/passkeys.feature +61 -0
- package/features/probes.feature +14 -0
- package/features/{queries.feature → query.feature} +77 -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 +3 -0
- package/features/steps/Common.ts +4 -0
- package/features/steps/Database.ts +16 -10
- package/features/steps/Gateway.ts +26 -7
- package/features/steps/HTTP.ts +25 -2
- package/features/steps/IdP.ts +63 -25
- package/features/steps/Identity.ts +51 -0
- package/features/steps/Parameters.ts +44 -1
- package/features/steps/Realtime.ts +151 -0
- package/features/steps/components/echo/manifest.toa.yaml +17 -1
- package/features/steps/components/echo/operations/echo.js +7 -0
- package/features/steps/components/echo/operations/identity.js +7 -0
- package/features/steps/components/echo/operations/parameters.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 +25 -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 +0 -2
- package/features/steps/components/octets.tester/operations/echo.js +1 -1
- package/features/steps/components/octets.tester/operations/foo.js +1 -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 +12 -4
- package/features/steps/components/sequences/manifest.toa.yaml +0 -1
- package/features/steps/components/users/manifest.toa.yaml +4 -3
- package/features/steps/components/users/operations/create.js +15 -0
- package/features/steps/components/users.properties/manifest.toa.yaml +1 -2
- package/features/streams.feature +5 -0
- package/features/timestamps.feature +41 -0
- package/features/timing.feature +4 -1
- package/package.json +27 -13
- package/readme.md +19 -14
- package/schemas/annotation.cos.yaml +1 -1
- 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 +4 -10
- package/source/Annotation.ts +3 -3
- package/source/Branch.ts +1 -0
- package/source/Composition.ts +0 -6
- package/source/Context.ts +1 -0
- package/source/Directive.test.ts +1 -1
- package/source/Directive.ts +16 -8
- package/source/Endpoint.ts +70 -17
- package/source/Factory.ts +22 -13
- package/source/Gateway.ts +73 -19
- package/source/HTTP/Context.ts +29 -7
- package/source/HTTP/Server.ts +113 -50
- package/source/HTTP/exceptions.ts +13 -1
- package/source/HTTP/formats/index.ts +3 -3
- package/source/HTTP/messages.test.ts +46 -2
- package/source/HTTP/messages.ts +41 -9
- package/source/Introspection.ts +11 -0
- package/source/Mapping.ts +68 -21
- package/source/Query.test.ts +3 -3
- package/source/Query.ts +123 -33
- package/source/RTD/Context.ts +1 -1
- 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 +5 -4
- package/source/RTD/Tree.ts +2 -2
- package/source/RTD/factory.ts +5 -2
- package/source/RTD/syntax/parse.test.ts +1 -1
- package/source/RTD/syntax/parse.ts +37 -24
- package/source/RTD/syntax/types.ts +6 -4
- package/source/Remotes.ts +7 -6
- package/source/Tenant.ts +6 -20
- package/source/deployment.ts +33 -23
- package/source/directives/auth/Anonymous.ts +3 -3
- package/source/directives/auth/Anyone.ts +13 -0
- package/source/directives/auth/Authorization.ts +66 -26
- package/source/directives/auth/Delegate.ts +13 -6
- 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 +54 -17
- package/source/directives/auth/Input.ts +72 -0
- package/source/directives/auth/Role.test.ts +53 -6
- package/source/directives/auth/Role.ts +23 -19
- 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 +2 -0
- package/source/directives/auth/split.ts +1 -1
- package/source/directives/auth/types.ts +11 -6
- package/source/directives/cache/Cache.ts +15 -6
- package/source/directives/cache/Control.ts +45 -19
- package/source/directives/cors/CORS.ts +3 -2
- package/source/directives/dev/Development.ts +12 -7
- package/source/directives/dev/Sleep.ts +40 -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/IO.ts +1 -1
- package/source/directives/io/Input.ts +8 -5
- package/source/directives/io/Output.ts +5 -4
- 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 +27 -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 +86 -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 +61 -8
- package/source/directives/octets/workflows/Workflow.ts +17 -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 +14 -6
- package/source/manifest.ts +10 -11
- package/source/root.ts +16 -1
- package/source/schemas.ts +1 -1
- package/transpiled/Annotation.d.ts +3 -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.js +15 -8
- package/transpiled/Directive.js.map +1 -1
- package/transpiled/Endpoint.d.ts +6 -4
- package/transpiled/Endpoint.js +46 -9
- 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 +55 -12
- package/transpiled/Gateway.js.map +1 -1
- package/transpiled/HTTP/Context.d.ts +9 -2
- package/transpiled/HTTP/Context.js +19 -6
- package/transpiled/HTTP/Context.js.map +1 -1
- package/transpiled/HTTP/Server.d.ts +15 -4
- package/transpiled/HTTP/Server.js +81 -41
- package/transpiled/HTTP/Server.js.map +1 -1
- package/transpiled/HTTP/exceptions.d.ts +7 -1
- package/transpiled/HTTP/exceptions.js +13 -1
- package/transpiled/HTTP/exceptions.js.map +1 -1
- package/transpiled/HTTP/formats/index.js +3 -3
- package/transpiled/HTTP/formats/index.js.map +1 -1
- package/transpiled/HTTP/messages.d.ts +2 -1
- package/transpiled/HTTP/messages.js +38 -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 +50 -19
- package/transpiled/Mapping.js.map +1 -1
- package/transpiled/Query.d.ts +10 -1
- package/transpiled/Query.js +87 -30
- package/transpiled/Query.js.map +1 -1
- package/transpiled/RTD/Context.d.ts +1 -1
- 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 +1 -1
- package/transpiled/RTD/Route.js +0 -1
- package/transpiled/RTD/Route.js.map +1 -1
- package/transpiled/RTD/Tree.d.ts +1 -1
- package/transpiled/RTD/Tree.js.map +1 -1
- package/transpiled/RTD/factory.js +5 -2
- package/transpiled/RTD/factory.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 +5 -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 -5
- package/transpiled/Tenant.js +2 -13
- package/transpiled/Tenant.js.map +1 -1
- package/transpiled/deployment.d.ts +1 -1
- package/transpiled/deployment.js +28 -20
- 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/Authorization.d.ts +4 -3
- package/transpiled/directives/auth/Authorization.js +50 -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 +10 -4
- 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 +5 -3
- package/transpiled/directives/auth/Incept.js +42 -13
- 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 +5 -2
- package/transpiled/directives/auth/Role.js +22 -18
- 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 +1 -0
- package/transpiled/directives/auth/schemes.js +2 -1
- 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 +8 -5
- 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 +3 -2
- package/transpiled/directives/cache/Control.js +32 -15
- package/transpiled/directives/cache/Control.js.map +1 -1
- package/transpiled/directives/cors/CORS.js +3 -2
- 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 +8 -0
- package/transpiled/directives/dev/Sleep.js +36 -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/IO.js +1 -1
- package/transpiled/directives/io/IO.js.map +1 -1
- package/transpiled/directives/io/Input.js +4 -2
- package/transpiled/directives/io/Input.js.map +1 -1
- package/transpiled/directives/io/Output.js +2 -2
- package/transpiled/directives/io/Output.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 +26 -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} +25 -29
- 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 +6 -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 +9 -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.d.ts +3 -2
- package/transpiled/exceptions.js +8 -1
- 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/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.js.map +0 -1
- package/components/identity.federation/source/create.ts +0 -26
- package/components/identity.federation/source/schemas.ts +0 -61
- package/components/identity.tokens/operations/types.d.ts +0 -40
- package/components/identity.tokens/operations/types.js.map +0 -1
- package/components/identity.tokens/source/types.ts +0 -48
- 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 -69
- package/features/steps/components/octets.tester/operations/diversify.js +0 -14
- package/features/vary.feature +0 -180
- 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 -6
- package/source/directives/vary/Embed.ts +0 -62
- package/source/directives/vary/Vary.ts +0 -48
- package/source/directives/vary/embeddings/Embedding.ts +0 -6
- package/source/directives/vary/embeddings/Header.ts +0 -32
- package/source/directives/vary/embeddings/Language.ts +0 -31
- 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 -5
- package/transpiled/directives/vary/Directive.js.map +0 -1
- package/transpiled/directives/vary/Embed.d.ts +0 -10
- package/transpiled/directives/vary/Embed.js +0 -49
- 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 -5
- 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/index.d.ts +0 -5
- package/transpiled/directives/vary/embeddings/index.js +0 -10
- 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
package/documentation/access.md
CHANGED
|
@@ -15,8 +15,7 @@ The Authorization is implemented as a set of [RTD Directives](tree.md#directives
|
|
|
15
15
|
|
|
16
16
|
Directives are executed in a predetermined order until one of them grants access to a resource.
|
|
17
17
|
If none of the directives grants access, then the Authorization interrupts request processing and
|
|
18
|
-
responds with an
|
|
19
|
-
authorization error.
|
|
18
|
+
responds with an authorization error.
|
|
20
19
|
|
|
21
20
|
> The Authorization directive provider is named `authorization`,
|
|
22
21
|
> so the full names of the directives are `authorization:{directive}`.
|
|
@@ -26,7 +25,11 @@ authorization error.
|
|
|
26
25
|
Grants access if its value is `true` and no credentials were provided[^1].
|
|
27
26
|
|
|
28
27
|
[^1]: Credentials in the request make the
|
|
29
|
-
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.
|
|
30
33
|
|
|
31
34
|
### `id`
|
|
32
35
|
|
|
@@ -38,11 +41,8 @@ the directive's value.
|
|
|
38
41
|
Given the Route declaration and corresponding HTTP request:
|
|
39
42
|
|
|
40
43
|
```yaml
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
exposition:
|
|
44
|
-
/users/:user-id:
|
|
45
|
-
id: "user-id"
|
|
44
|
+
/users/:user-id:
|
|
45
|
+
id: "user-id"
|
|
46
46
|
```
|
|
47
47
|
|
|
48
48
|
```http
|
|
@@ -57,20 +57,66 @@ is `87480f2bd88048518c529d7957475ecd`.
|
|
|
57
57
|
|
|
58
58
|
Grants access if resolved Identity has a role matching the directive's value or one of its values.
|
|
59
59
|
|
|
60
|
-
#### Example
|
|
61
|
-
|
|
62
60
|
```yaml
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
exposition:
|
|
66
|
-
/code:
|
|
67
|
-
role: [developer, reviewer]
|
|
61
|
+
/code:
|
|
62
|
+
role: [developer, reviewer]
|
|
68
63
|
```
|
|
69
64
|
|
|
70
65
|
Access will be granted if the resolved Identity has a role that matches `developer` or `reviewer`.
|
|
71
66
|
|
|
72
67
|
Read [Roles](#roles) section for more details.
|
|
73
68
|
|
|
69
|
+
#### Dynamic roles
|
|
70
|
+
|
|
71
|
+
The `role` directive can be used with a placeholder in the route.
|
|
72
|
+
|
|
73
|
+
```yaml
|
|
74
|
+
/:org-id:
|
|
75
|
+
role: app:{org-id}:moderator
|
|
76
|
+
```
|
|
77
|
+
|
|
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
|
|
118
|
+
```
|
|
119
|
+
|
|
74
120
|
### `rule`
|
|
75
121
|
|
|
76
122
|
The Rule is a collection of authorization directives. It allows access only if all the specified
|
|
@@ -79,23 +125,43 @@ directives grant access. The value of the `rule` directive can be a single Rule
|
|
|
79
125
|
#### Example
|
|
80
126
|
|
|
81
127
|
```yaml
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
rule:
|
|
87
|
-
id: user-id
|
|
88
|
-
role: developer
|
|
128
|
+
/commits/:user-id:
|
|
129
|
+
rule:
|
|
130
|
+
id: user-id
|
|
131
|
+
role: developer
|
|
89
132
|
```
|
|
90
133
|
|
|
91
134
|
Access will be granted if an Identity matches a `user-id` placeholder and has a Role of `developer`.
|
|
92
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
|
+
|
|
93
156
|
### `delegate`
|
|
94
157
|
|
|
95
158
|
Embeds the value of the current Identity into the request body as a property named after the value
|
|
96
159
|
of the directive value, and grants access.
|
|
160
|
+
The request body must be an object.
|
|
97
161
|
|
|
98
|
-
>
|
|
162
|
+
> :warning:<br/>
|
|
163
|
+
> The intended use case for this directive is audit.
|
|
164
|
+
> **Using it to pass Identity to the application logic is strongly discouraged.**
|
|
99
165
|
|
|
100
166
|
## Roles
|
|
101
167
|
|
|
@@ -112,11 +178,8 @@ directive.
|
|
|
112
178
|
#### Example
|
|
113
179
|
|
|
114
180
|
```yaml
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
/exposition:
|
|
118
|
-
/commits/:user-id:
|
|
119
|
-
role: developer:senior
|
|
181
|
+
/commits/:user-id:
|
|
182
|
+
role: developer:senior
|
|
120
183
|
```
|
|
121
184
|
|
|
122
185
|
The example above defines a `role` directive with the specified `developer:senior` Role Scope.
|
|
@@ -131,7 +194,6 @@ In other words, the Identity must have a specified or more general Role.
|
|
|
131
194
|
</picture>
|
|
132
195
|
</a>
|
|
133
196
|
|
|
134
|
-
|
|
135
197
|
> The root-level Role Scope `system` is preserved and cannot be used with the `role` directives.
|
|
136
198
|
|
|
137
199
|
See also [role management resources](components.md#roles).
|
|
@@ -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.
|
package/documentation/cache.md
CHANGED
|
@@ -17,7 +17,7 @@ to [safe HTTP methods](https://developer.mozilla.org/en-US/docs/Glossary/Safe/HT
|
|
|
17
17
|
|
|
18
18
|
### Implicit modifications
|
|
19
19
|
|
|
20
|
-
In terms of security, the following implicit modifications are made to the `
|
|
20
|
+
In terms of security, the following implicit modifications are made to the `cache-control` header:
|
|
21
21
|
|
|
22
22
|
- If it contains the `public` directive without `no-cache` and the request is authenticated,
|
|
23
23
|
the `no-cache` directive is added.
|
|
@@ -25,6 +25,13 @@ In terms of security, the following implicit modifications are made to the `Cach
|
|
|
25
25
|
- If it does not contain the `private` directive and the request is authenticated, the `private`
|
|
26
26
|
directive is added.
|
|
27
27
|
This is to prevent the storage of private data in shared caches.
|
|
28
|
+
- If it contains `private` directive and the request is authenticated, then `vary: authorization` is
|
|
29
|
+
added.
|
|
30
|
+
This is to prevent the reuse of private data when authenticated as another identity.[^1]
|
|
31
|
+
|
|
32
|
+
[^1]: This also will invalidate the cache each time a new token is used for the same identity, thus
|
|
33
|
+
limiting the `max-age` value to the token's `refresh` time.
|
|
34
|
+
See [Issuing tokens](components.md#issuing-tokens).
|
|
28
35
|
|
|
29
36
|
## `cache:exact`
|
|
30
37
|
|
|
@@ -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
|
|
@@ -111,8 +111,8 @@ secrets.
|
|
|
111
111
|
configuration:
|
|
112
112
|
identity.federation:
|
|
113
113
|
trust:
|
|
114
|
-
-
|
|
115
|
-
|
|
114
|
+
- iss: https://token.actions.githubusercontent.com
|
|
115
|
+
aud:
|
|
116
116
|
- https://github.com/tinovyatkin
|
|
117
117
|
- https://github.com/temich
|
|
118
118
|
|
|
@@ -122,9 +122,9 @@ configuration:
|
|
|
122
122
|
k1: <secret-to-be-used-for-hs256>
|
|
123
123
|
```
|
|
124
124
|
|
|
125
|
-
##
|
|
125
|
+
## Local tokens
|
|
126
126
|
|
|
127
|
-
The `identity.tokens` component manages
|
|
127
|
+
The `identity.tokens` component manages local authentication tokens.
|
|
128
128
|
|
|
129
129
|
These tokens carry the information required to authenticate the Identity and authorize access.
|
|
130
130
|
|
|
@@ -135,40 +135,108 @@ The new token is issued each time the request is made:
|
|
|
135
135
|
1. Using authentication scheme other than `Token`.
|
|
136
136
|
2. Using `Token` authentication scheme with an [obsolete token](#token-rotation).
|
|
137
137
|
|
|
138
|
+
When the token is issued it is sent in the `authorization` response header and the `cache-control`
|
|
139
|
+
is set to `no-store`.
|
|
140
|
+
|
|
141
|
+
```http
|
|
142
|
+
authorization: Token ...
|
|
143
|
+
cache-control: no-store
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
### Custom tokens
|
|
147
|
+
|
|
148
|
+
Custom tokens can be issued with a specific set of permissions and scopes for the own Identity or by
|
|
149
|
+
an Identity with the `system:identity:tokens` role.
|
|
150
|
+
|
|
151
|
+
Tokens are issued with custom secret keys and are not subject to [token rotation](#token-rotation).
|
|
152
|
+
To invalidate a custom token, its secret key must be deleted.
|
|
153
|
+
|
|
154
|
+
Custom tokens have no `refresh` period, that is, never become obsolete and never refreshed.
|
|
155
|
+
|
|
156
|
+
```
|
|
157
|
+
POST /identity/tokens/<identity>/
|
|
158
|
+
host: nex.toa.io
|
|
159
|
+
authorization: ...
|
|
160
|
+
accept: application/yaml
|
|
161
|
+
content-type: application/yaml
|
|
162
|
+
|
|
163
|
+
lifetime: 3600
|
|
164
|
+
scopes: [app:developer]
|
|
165
|
+
permissions:
|
|
166
|
+
/users/fc8e66dd/: [GET, PUT]
|
|
167
|
+
/posts/fc8e66dd/**/comments/: [*]
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
```
|
|
171
|
+
201 Created
|
|
172
|
+
content-type: application/yaml
|
|
173
|
+
|
|
174
|
+
token: <token>
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
- `lifetime`: Issued token will be valid for this period
|
|
178
|
+
(default is specified in [the configuration](#token-rotation)).
|
|
179
|
+
The value of `0` means the token will not expire, which is supported, but
|
|
180
|
+
**strongly not recommended** for production environments.
|
|
181
|
+
- `scopes`: Issued token will assume only specified [role scopes](access.md#roles).
|
|
182
|
+
- `permissions`: Issued token will have permissions to access only specified resources and methods.
|
|
183
|
+
Supports [glob patterns](https://www.gnu.org/software/bash/manual/html_node/Pattern-Matching.html)
|
|
184
|
+
and a wildcard method.
|
|
185
|
+
|
|
186
|
+
> `roles` and `permissions` are additional restrictions applied on top of the Identity’s inherent
|
|
187
|
+
> privileges.
|
|
188
|
+
|
|
189
|
+
### Custom token invalidation
|
|
190
|
+
|
|
191
|
+
Custom tokens can be invalidated by deleting the secret key used to issue them.
|
|
192
|
+
This can be done by the Identity that issued the token or by an Identity with
|
|
193
|
+
the `system:identity:keys` role.
|
|
194
|
+
|
|
195
|
+
```
|
|
196
|
+
DELETE /identity/keys/<identity>/<key.id>/
|
|
197
|
+
authorization: ...
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
Token secret key `id` can be obtained from the list of issued tokens (or from the footer of the
|
|
201
|
+
token itself).
|
|
202
|
+
|
|
203
|
+
```
|
|
204
|
+
GET /identity/keys/<identity>/
|
|
205
|
+
authorization: ...
|
|
206
|
+
```
|
|
207
|
+
|
|
138
208
|
### Token encryption
|
|
139
209
|
|
|
140
210
|
Issued tokens are encrypted
|
|
141
211
|
with [PASETO V3 encryption](https://github.com/panva/paseto/blob/main/docs/README.md#v3encryptpayload-key-options)
|
|
142
|
-
using the `
|
|
212
|
+
using the first key from the `keys` configuration value.
|
|
143
213
|
|
|
144
214
|
```yaml
|
|
145
215
|
# context.toa.yaml
|
|
146
216
|
|
|
147
217
|
configuration:
|
|
148
218
|
identity.tokens:
|
|
149
|
-
|
|
219
|
+
keys:
|
|
220
|
+
2024q1: $TOKEN_SECRET_2024Q1
|
|
150
221
|
```
|
|
151
222
|
|
|
152
|
-
|
|
223
|
+
At least one key in the `keys` configuration value is required.
|
|
153
224
|
|
|
154
225
|
> Valid secret key may be generated using the [`toa key` command](/runtime/cli/readme.md#key).
|
|
155
226
|
|
|
156
227
|
### Token rotation
|
|
157
228
|
|
|
158
229
|
Issued tokens are valid for a `lifetime` period defined in the configuration. After the `refresh`
|
|
159
|
-
period, the token is
|
|
160
|
-
|
|
161
|
-
provided one has
|
|
162
|
-
been [revoked](#token-revocation).
|
|
230
|
+
period, the token is considered obsolete (yet still valid), and a new token
|
|
231
|
+
is [issued](#issuing-tokens) unless the provided one has been [revoked](#token-revocation).
|
|
163
232
|
|
|
164
233
|
This essentially means that if the client uses the token at least once every `lifetime` period, it
|
|
165
|
-
will always have a
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
the `refresh` period of the currently issued tokens has expired.
|
|
234
|
+
will always have a valid token to authenticate with.
|
|
235
|
+
Also, token revocation or changing roles of an Identity will take effect once the `refresh` period
|
|
236
|
+
of the currently issued tokens has expired.
|
|
169
237
|
|
|
170
238
|
Adjusting these two values is a delicate trade-off between security, performance and client
|
|
171
|
-
|
|
239
|
+
convenience.
|
|
172
240
|
|
|
173
241
|
```yaml
|
|
174
242
|
# context.toa.yaml
|
|
@@ -192,43 +260,18 @@ Token revocation takes effect once the `refresh` period of the currently issued
|
|
|
192
260
|
|
|
193
261
|
### Secret rotation
|
|
194
262
|
|
|
195
|
-
Tokens are always encrypted using the `
|
|
196
|
-
|
|
197
|
-
the `key0` and `key1` values in order.
|
|
263
|
+
Tokens are always encrypted using the first key from the `keys` configuration value,
|
|
264
|
+
and decrypted by the key used to encrypt them.
|
|
198
265
|
|
|
199
|
-
|
|
266
|
+
To rotate the secret key, a new key must be added to the top of the `keys` configuration value, that
|
|
267
|
+
is, it will be used to encrypt new tokens.
|
|
200
268
|
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
configuration:
|
|
205
|
-
identity.tokens:
|
|
206
|
-
key0: $TOKEN_ENCRYPTION_KEY_2023Q3
|
|
207
|
-
key1: $TOKEN_ENCRYPTION_KEY_2023Q2
|
|
208
|
-
```
|
|
209
|
-
|
|
210
|
-
Secret rotation is performed by adding a new key as the `key0` value and moving the existing `key0`
|
|
211
|
-
to the `key1` value.
|
|
269
|
+
Old keys must be removed only after the `refresh` period of the previously issued tokens has
|
|
270
|
+
expired.
|
|
212
271
|
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
other instances will
|
|
217
|
-
continue using the current key and will not be able to decrypt tokens encrypted with the new key.
|
|
218
|
-
|
|
219
|
-
To address this issue, the `key1` configuration value may be used as a "transient key."
|
|
220
|
-
|
|
221
|
-
The secret rotation is a 2-step process:
|
|
222
|
-
|
|
223
|
-
> The process **must not** be performed earlier than the `lifetime` period since the last rotation,
|
|
224
|
-
> as it may invalidate
|
|
225
|
-
> tokens before they expire. Therefore, it is guaranteed that there are no valid tokens issued with
|
|
226
|
-
> the current `key1`
|
|
227
|
-
> value.
|
|
228
|
-
|
|
229
|
-
1. Deploy the new secret key to all Exposition instances as `key1`. This enables all instances to
|
|
230
|
-
decrypt tokens
|
|
231
|
-
encrypted with the new key while still using the current key for encryption.
|
|
272
|
+
> Let's say you are adding a new secret key each quarter: `2024Q1`, `2024Q2` and so on.
|
|
273
|
+
> The old key `2024Q1` must be removed from the configuration only when the `refresh` period after
|
|
274
|
+
> the new key `2024Q2` was added has expired.
|
|
232
275
|
|
|
233
276
|
```yaml
|
|
234
277
|
# context.toa.yaml
|
|
@@ -252,6 +295,20 @@ configuration:
|
|
|
252
295
|
key1: $TOKEN_ENCRYPTION_KEY_2023Q3
|
|
253
296
|
```
|
|
254
297
|
|
|
298
|
+
### Token resources
|
|
299
|
+
|
|
300
|
+
`/identity/tokens/`
|
|
301
|
+
|
|
302
|
+
`POST` Issue a new token for the Identity. Request body is as follows:
|
|
303
|
+
|
|
304
|
+
```yaml
|
|
305
|
+
lifetime?: number # seconds
|
|
306
|
+
```
|
|
307
|
+
|
|
308
|
+
Providing a value of `0` will result in the token being issued with no expiration.
|
|
309
|
+
However, it will still become invalid once the encryption key used is out
|
|
310
|
+
of [rotation](#secret-rotation).
|
|
311
|
+
|
|
255
312
|
## Roles
|
|
256
313
|
|
|
257
314
|
The `identity.roles` component manages roles of an Identity used
|
|
@@ -277,9 +334,8 @@ Role Scopes (see [Role Hierarchies](access.md#hierarchies)).
|
|
|
277
334
|
## Banned Identities
|
|
278
335
|
|
|
279
336
|
The `identity.bans` component manages banned identities.
|
|
280
|
-
A banned identity will fail to authenticate with any associated credentials
|
|
281
|
-
except [tokens](#stateless-tokens) within
|
|
282
|
-
the `refresh` period).
|
|
337
|
+
A banned identity will fail to authenticate with any associated credentials
|
|
338
|
+
(except [tokens](#stateless-tokens) within the `refresh` period).
|
|
283
339
|
|
|
284
340
|
```http
|
|
285
341
|
PUT /identity/bans/:id/
|
|
@@ -287,6 +343,7 @@ authorization: Basic dXNlcm5hbWU6cGFzc3dvcmQ=
|
|
|
287
343
|
content-type: application/yaml
|
|
288
344
|
|
|
289
345
|
banned: true
|
|
346
|
+
comment: Bye bye
|
|
290
347
|
```
|
|
291
348
|
|
|
292
349
|
Access requires `system:identity:bans` role.
|
|
@@ -310,3 +367,17 @@ roles:
|
|
|
310
367
|
- developer
|
|
311
368
|
- system:identity:roles
|
|
312
369
|
```
|
|
370
|
+
|
|
371
|
+
When no credentials are provided, transient Identity is created.
|
|
372
|
+
|
|
373
|
+
```http
|
|
374
|
+
GET /identity/
|
|
375
|
+
accept: application/yaml
|
|
376
|
+
```
|
|
377
|
+
|
|
378
|
+
```
|
|
379
|
+
201 Created
|
|
380
|
+
|
|
381
|
+
id: 332017649c814649b25ee466c1fe4534
|
|
382
|
+
roles: []
|
|
383
|
+
```
|
|
@@ -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 delay before processing the request, up to given maximum time in milliseconds (unlimited by
|
|
18
|
+
if value is
|
|
19
|
+
`0`).
|
|
20
|
+
Desired delay can be set in the `sleep` request header.
|
|
21
|
+
|
|
22
|
+
```yaml
|
|
23
|
+
/foo:
|
|
24
|
+
dev:sleep: 1000
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
```http
|
|
28
|
+
GET /foo/ HTTP/1.1
|
|
29
|
+
sleep: 500
|
|
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.
|