@toa.io/extensions.exposition 1.0.0-alpha.291 → 1.0.0-alpha.293
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/identity.basic/package.json +8 -0
- package/components/identity.federation/package.json +8 -0
- package/components/identity.passkeys/package.json +8 -0
- package/components/identity.tokens/package.json +10 -0
- package/package.json +25 -13
- package/transpiled/Discovery/Explorer.js +1 -1
- package/transpiled/Discovery/Explorer.js.map +1 -1
- package/transpiled/Discovery/Site.js +1 -1
- package/transpiled/Discovery/Site.js.map +1 -1
- package/transpiled/Discovery/trunk.js +1 -1
- package/transpiled/Discovery/trunk.js.map +1 -1
- package/transpiled/Endpoint.js +3 -0
- package/transpiled/Endpoint.js.map +1 -1
- package/transpiled/Factory.js +1 -1
- package/transpiled/Factory.js.map +1 -1
- package/transpiled/Gateway.js +1 -1
- package/transpiled/Gateway.js.map +1 -1
- package/transpiled/HTTP/Server.d.ts +1 -1
- package/transpiled/HTTP/Server.js +1 -1
- package/transpiled/HTTP/Server.js.map +1 -1
- package/transpiled/Introspection.d.ts +6 -0
- package/transpiled/Introspection.js +1 -0
- package/transpiled/Introspection.js.map +1 -1
- package/transpiled/MCP/Server.d.ts +1 -1
- package/transpiled/MCP/Server.js +1 -1
- package/transpiled/MCP/Server.js.map +1 -1
- package/transpiled/MCP/discover.d.ts +1 -1
- package/transpiled/MCP/schema.js +2 -2
- package/transpiled/Query.d.ts +2 -12
- package/transpiled/Query.js +3 -13
- package/transpiled/Query.js.map +1 -1
- package/transpiled/RPC/Dispatcher.d.ts +1 -1
- package/transpiled/RPC/Dispatcher.js +2 -2
- package/transpiled/RPC/Dispatcher.js.map +1 -1
- package/transpiled/RTD/Endpoint.d.ts +2 -3
- package/transpiled/RTD/Tree.js +1 -1
- package/transpiled/RTD/Tree.js.map +1 -1
- package/transpiled/RTD/factory.js +1 -1
- package/transpiled/RTD/factory.js.map +1 -1
- package/transpiled/RTD/syntax/index.d.ts +1 -2
- package/transpiled/RTD/syntax/index.js +1 -2
- package/transpiled/RTD/syntax/index.js.map +1 -1
- package/transpiled/Tenant.js +1 -1
- package/transpiled/Tenant.js.map +1 -1
- package/transpiled/directives/auth/Authorization.js +1 -1
- package/transpiled/directives/auth/Authorization.js.map +1 -1
- package/transpiled/directives/io/IO.js +1 -1
- package/transpiled/directives/io/IO.js.map +1 -1
- package/transpiled/directives/oauth/documents.d.ts +1 -1
- package/transpiled/index.d.ts +0 -2
- package/transpiled/index.js +0 -2
- package/transpiled/index.js.map +1 -1
- package/transpiled/service.js +1 -1
- package/transpiled/service.js.map +1 -1
- package/ui/dist/_app/immutable/assets/0.Cu0AnR_8.css +2 -0
- package/ui/dist/_app/immutable/assets/2.BghF56l_.css +1 -0
- package/ui/dist/_app/immutable/assets/ui.C8aD6zzF.css +1 -0
- package/ui/dist/_app/immutable/chunks/B8GvXrmq.js +1 -0
- package/ui/dist/_app/immutable/chunks/BVDJTrf4.js +3 -0
- package/ui/dist/_app/immutable/chunks/D6q28_Ok.js +86 -0
- package/ui/dist/_app/immutable/chunks/{D9tE1yyO.js → DVlaUfVU.js} +1 -1
- package/ui/dist/_app/immutable/chunks/DpB73ZB6.js +6 -0
- package/ui/dist/_app/immutable/entry/app.CTava8yn.js +2 -0
- package/ui/dist/_app/immutable/entry/start.yWN0gSLA.js +1 -0
- package/ui/dist/_app/immutable/nodes/0.HKRDBYrC.js +1 -0
- package/ui/dist/_app/immutable/nodes/1.CLa0ydOi.js +1 -0
- package/ui/dist/_app/immutable/nodes/2.C9Kaym8C.js +8 -0
- package/ui/dist/_app/immutable/nodes/3.C1X4_rXZ.js +1 -0
- package/ui/dist/_app/immutable/nodes/4.DdzDIi9E.js +1 -0
- package/ui/dist/_app/immutable/nodes/5.DpbmCMdw.js +1 -0
- package/ui/dist/_app/version.json +1 -1
- package/ui/dist/index.html +12 -12
- package/CHANGELOG.md +0 -35
- package/components/identity.bans/tsconfig.tsbuildinfo +0 -1
- package/components/identity.basic/source/lib/credentials.test.ts +0 -18
- package/components/identity.basic/tsconfig.tsbuildinfo +0 -1
- package/components/identity.clients/source/lib/canonical.test.ts +0 -43
- package/components/identity.clients/source/lib/cimd.test.ts +0 -122
- package/components/identity.clients/source/lib/redirect.test.ts +0 -47
- package/components/identity.clients/tsconfig.tsbuildinfo +0 -1
- package/components/identity.credentials/source/list.test.ts +0 -70
- package/components/identity.credentials/tsconfig.tsbuildinfo +0 -1
- package/components/identity.federation/source/lib/discovery.test.ts +0 -60
- package/components/identity.federation/source/list.test.ts +0 -41
- package/components/identity.federation/tsconfig.tsbuildinfo +0 -1
- package/components/identity.grants/tsconfig.tsbuildinfo +0 -1
- package/components/identity.keys/tsconfig.tsbuildinfo +0 -1
- package/components/identity.otp/tsconfig.tsbuildinfo +0 -1
- package/components/identity.passkeys/source/errors.test.ts +0 -34
- package/components/identity.passkeys/source/webauthn.test.ts +0 -26
- package/components/identity.passkeys/tsconfig.tsbuildinfo +0 -1
- package/components/identity.roles/tsconfig.tsbuildinfo +0 -1
- package/components/identity.tokens/source/authenticate.test.ts +0 -112
- package/components/identity.tokens/source/decrypt.test.ts +0 -216
- package/components/identity.tokens/source/encrypt.test.ts +0 -150
- package/components/identity.tokens/source/issue.test.ts +0 -73
- package/components/identity.tokens/source/lib/form.test.ts +0 -25
- package/components/identity.tokens/source/lib/paseto.test.ts +0 -62
- package/components/identity.tokens/tsconfig.tsbuildinfo +0 -1
- package/context.toa.yaml +0 -31
- package/cucumber.mjs +0 -7
- package/documentation/.assets/ia3-dark.jpg +0 -0
- package/documentation/.assets/ia3-light.jpg +0 -0
- package/documentation/.assets/overview-dark.jpg +0 -0
- package/documentation/.assets/overview-light.jpg +0 -0
- package/documentation/.assets/role-scopes-dark.jpg +0 -0
- package/documentation/.assets/role-scopes-light.jpg +0 -0
- package/documentation/.assets/rtd-dark.jpg +0 -0
- package/documentation/.assets/rtd-light.jpg +0 -0
- package/documentation/access.md +0 -350
- package/documentation/authorities.md +0 -51
- package/documentation/cache.md +0 -72
- package/documentation/components.md +0 -472
- package/documentation/consent.md +0 -101
- package/documentation/credentials.md +0 -88
- package/documentation/dev.md +0 -30
- package/documentation/discovery.md +0 -81
- package/documentation/flow.md +0 -44
- package/documentation/help.md +0 -122
- package/documentation/identity.md +0 -304
- package/documentation/introspection.md +0 -123
- package/documentation/io.md +0 -167
- package/documentation/ip.md +0 -24
- package/documentation/map.md +0 -123
- package/documentation/mcp.md +0 -183
- package/documentation/notes/desync.jpg +0 -0
- package/documentation/notes/peers.md +0 -59
- package/documentation/notes/sse.md +0 -71
- package/documentation/notes/throttling.md +0 -122
- package/documentation/oauth.md +0 -180
- package/documentation/octets.md +0 -334
- package/documentation/passkeys.md +0 -11
- package/documentation/protocol.md +0 -120
- package/documentation/query.md +0 -324
- package/documentation/require.md +0 -15
- package/documentation/rpc.md +0 -154
- package/documentation/tracing.md +0 -70
- package/documentation/tree.md +0 -199
- package/features/access.feature +0 -596
- package/features/annotation.feature +0 -32
- package/features/auth.assert.feature +0 -55
- package/features/auth.bearer.feature +0 -120
- package/features/auth.claims.feature +0 -171
- package/features/auth.incept.feature +0 -166
- package/features/auth.input.feature +0 -59
- package/features/authorities.basic.feature +0 -141
- package/features/authorities.feature +0 -71
- package/features/authorities.federation.feature +0 -100
- package/features/authorities.tokens.feature +0 -117
- package/features/body.feature +0 -76
- package/features/cache.feature +0 -368
- package/features/configuration.feature +0 -206
- package/features/cors.feature +0 -127
- package/features/credentials.feature +0 -106
- package/features/debug.feature +0 -34
- package/features/dev.feature +0 -90
- package/features/directives.feature +0 -61
- package/features/discovery.feature +0 -213
- package/features/discovery.ui.feature +0 -213
- package/features/dynamic.feature +0 -192
- package/features/errors.feature +0 -258
- package/features/etag.feature +0 -239
- package/features/flow.feature +0 -148
- package/features/help.feature +0 -512
- package/features/identity.bans.feature +0 -200
- package/features/identity.basic.feature +0 -666
- package/features/identity.feature +0 -240
- package/features/identity.federation.feature +0 -396
- package/features/identity.otp.feature +0 -142
- package/features/identity.roles.feature +0 -568
- package/features/identity.tokens.custom.feature +0 -430
- package/features/identity.tokens.feature +0 -131
- package/features/interruptions.feature +0 -20
- package/features/introspection.feature +0 -565
- package/features/introspection.map.feature +0 -108
- package/features/io.feature +0 -204
- package/features/io.throttle.feature +0 -166
- package/features/map.feature +0 -360
- package/features/mcp.feature +0 -753
- package/features/methods.feature +0 -48
- package/features/oauth.clients.feature +0 -195
- package/features/oauth.discovery.feature +0 -164
- package/features/oauth.grants.feature +0 -301
- package/features/octets.cloudinary.feature +0 -233
- package/features/octets.download.feature +0 -194
- package/features/octets.entries.feature +0 -83
- package/features/octets.feature +0 -306
- package/features/octets.head.feature +0 -40
- package/features/octets.location.feature +0 -83
- package/features/octets.meta.feature +0 -117
- package/features/octets.workflows.feature +0 -565
- package/features/passkeys.feature +0 -66
- package/features/probes.feature +0 -18
- package/features/query.feature +0 -389
- package/features/realtime.feature +0 -34
- package/features/require.feature +0 -66
- package/features/response.feature +0 -103
- package/features/routes.feature +0 -224
- package/features/rpc.feature +0 -429
- package/features/server.feature +0 -21
- package/features/site/_app/immutable/asset.js +0 -1
- package/features/site/favicon.ico +0 -0
- package/features/site/index.html +0 -10
- package/features/steps/.env.example +0 -5
- package/features/steps/Captures.ts +0 -20
- package/features/steps/Cloudinary.ts +0 -12
- package/features/steps/Common.ts +0 -38
- package/features/steps/Components.ts +0 -115
- package/features/steps/Database.ts +0 -106
- package/features/steps/Gateway.ts +0 -240
- package/features/steps/HTTP.ts +0 -96
- package/features/steps/IDP.ts +0 -361
- package/features/steps/Identity.ts +0 -54
- package/features/steps/OTP.ts +0 -42
- package/features/steps/Parameters.ts +0 -162
- package/features/steps/Probe.ts +0 -38
- package/features/steps/Realtime.ts +0 -175
- package/features/steps/Workspace.ts +0 -48
- package/features/steps/components/audit/manifest.toa.yaml +0 -20
- package/features/steps/components/audit/operations/record.js +0 -5
- package/features/steps/components/echo/manifest.toa.yaml +0 -59
- package/features/steps/components/echo/operations/affect.js +0 -3
- package/features/steps/components/echo/operations/compute.js +0 -3
- package/features/steps/components/echo/operations/echo.js +0 -3
- package/features/steps/components/echo/operations/error.js +0 -7
- package/features/steps/components/echo/operations/identity.js +0 -3
- package/features/steps/components/echo/operations/parameters.js +0 -3
- package/features/steps/components/echo/operations/ping.js +0 -3
- package/features/steps/components/echo/operations/unwrap.js +0 -3
- package/features/steps/components/echo.beacon/manifest.toa.yaml +0 -2
- package/features/steps/components/echo.beacon/operations/hello.js +0 -3
- package/features/steps/components/greeter/manifest.toa.yaml +0 -5
- package/features/steps/components/greeter/operations/greet.js +0 -3
- package/features/steps/components/notify/manifest.toa.yaml +0 -20
- package/features/steps/components/notify/operations/send.js +0 -5
- package/features/steps/components/octets.tester/manifest.toa.yaml +0 -73
- package/features/steps/components/octets.tester/operations/authority.js +0 -3
- package/features/steps/components/octets.tester/operations/bar.js +0 -9
- package/features/steps/components/octets.tester/operations/baz.js +0 -9
- package/features/steps/components/octets.tester/operations/concat.js +0 -5
- package/features/steps/components/octets.tester/operations/echo.js +0 -5
- package/features/steps/components/octets.tester/operations/err.js +0 -14
- package/features/steps/components/octets.tester/operations/foo.js +0 -5
- package/features/steps/components/octets.tester/operations/id.js +0 -5
- package/features/steps/components/octets.tester/operations/identity.js +0 -5
- package/features/steps/components/octets.tester/operations/lenna.png +0 -0
- package/features/steps/components/octets.tester/operations/redirect.js +0 -17
- package/features/steps/components/octets.tester/operations/yex.js +0 -14
- package/features/steps/components/octets.tester/operations/yield.js +0 -11
- package/features/steps/components/orders/manifest.toa.yaml +0 -30
- package/features/steps/components/orders/operations/create.js +0 -7
- package/features/steps/components/pots/manifest.toa.yaml +0 -91
- package/features/steps/components/pots/migrations/0002-indexes.yaml +0 -4
- package/features/steps/components/pricing/manifest.toa.yaml +0 -13
- package/features/steps/components/pricing/operations/quote.js +0 -3
- package/features/steps/components/sequences/manifest.toa.yaml +0 -11
- package/features/steps/components/sequences/operations/numbers.js +0 -5
- package/features/steps/components/sequences/operations/tokens.js +0 -14
- package/features/steps/components/users/manifest.toa.yaml +0 -30
- package/features/steps/components/users/operations/create.js +0 -11
- package/features/steps/components/users.properties/manifest.toa.yaml +0 -22
- package/features/steps/map.ts +0 -30
- package/features/steps/tsconfig.json +0 -9
- package/features/streams.feature +0 -35
- package/features/timestamps.feature +0 -41
- package/features/timing.feature +0 -49
- package/features/tracing.feature +0 -123
- package/schemas/annotation.cos.yaml +0 -125
- package/schemas/call.cos.yaml +0 -18
- package/schemas/directive.cos.yaml +0 -7
- package/schemas/method.cos.yaml +0 -23
- package/schemas/node.cos.yaml +0 -22
- package/schemas/query.cos.yaml +0 -31
- package/schemas/querystring.cos.yaml +0 -19
- package/schemas/range.cos.yaml +0 -10
- package/schemas/route.cos.yaml +0 -6
- package/source/Annotation.ts +0 -89
- package/source/Branch.test.ts +0 -40
- package/source/Branch.ts +0 -44
- package/source/Composition.ts +0 -51
- package/source/Context.ts +0 -11
- package/source/Directive.test.ts +0 -199
- package/source/Directive.ts +0 -248
- package/source/Discovery/Explorer.ts +0 -34
- package/source/Discovery/Site.test.ts +0 -147
- package/source/Discovery/Site.ts +0 -202
- package/source/Discovery/index.ts +0 -3
- package/source/Discovery/tree.test.ts +0 -175
- package/source/Discovery/tree.ts +0 -77
- package/source/Discovery/trunk.ts +0 -33
- package/source/Endpoint.test.ts +0 -67
- package/source/Endpoint.ts +0 -157
- package/source/Factory.ts +0 -42
- package/source/Gateway.ts +0 -390
- package/source/HTTP/Context.ts +0 -143
- package/source/HTTP/Probe.ts +0 -99
- package/source/HTTP/Server.ts +0 -430
- package/source/HTTP/Timing.ts +0 -14
- package/source/HTTP/address.test.ts +0 -28
- package/source/HTTP/address.ts +0 -16
- package/source/HTTP/exceptions.ts +0 -99
- package/source/HTTP/formats/form.ts +0 -21
- package/source/HTTP/formats/index.ts +0 -36
- package/source/HTTP/formats/json.ts +0 -14
- package/source/HTTP/formats/msgpack.ts +0 -14
- package/source/HTTP/formats/text.ts +0 -10
- package/source/HTTP/formats/yaml.test.ts +0 -22
- package/source/HTTP/formats/yaml.ts +0 -40
- package/source/HTTP/index.ts +0 -6
- package/source/HTTP/messages.test.ts +0 -196
- package/source/HTTP/messages.ts +0 -186
- package/source/HTTP/types.ts +0 -39
- package/source/Interception.ts +0 -37
- package/source/Introspection.ts +0 -179
- package/source/MCP/Server.ts +0 -335
- package/source/MCP/discover.ts +0 -51
- package/source/MCP/errors.ts +0 -80
- package/source/MCP/index.ts +0 -1
- package/source/MCP/schema.test.ts +0 -91
- package/source/MCP/schema.ts +0 -94
- package/source/MCP/tools.ts +0 -144
- package/source/MCP/types.ts +0 -84
- package/source/Mapping.ts +0 -101
- package/source/Query.test.ts +0 -54
- package/source/Query.ts +0 -277
- package/source/RPC/Context.ts +0 -75
- package/source/RPC/Dispatcher.ts +0 -150
- package/source/RPC/errors.test.ts +0 -77
- package/source/RPC/errors.ts +0 -82
- package/source/RPC/index.ts +0 -1
- package/source/RPC/names.test.ts +0 -141
- package/source/RPC/names.ts +0 -176
- package/source/RPC/types.ts +0 -34
- package/source/RTD/Context.ts +0 -16
- package/source/RTD/Directives.ts +0 -126
- package/source/RTD/Endpoint.ts +0 -27
- package/source/RTD/Match.ts +0 -11
- package/source/RTD/Method.ts +0 -39
- package/source/RTD/Node.ts +0 -169
- package/source/RTD/Route.ts +0 -93
- package/source/RTD/Tree.ts +0 -137
- package/source/RTD/expiration.test.ts +0 -81
- package/source/RTD/factory.ts +0 -105
- package/source/RTD/index.ts +0 -8
- package/source/RTD/segment.test.ts +0 -35
- package/source/RTD/segment.ts +0 -51
- package/source/RTD/syntax/index.ts +0 -2
- package/source/RTD/syntax/parse.test.ts +0 -196
- package/source/RTD/syntax/parse.ts +0 -171
- package/source/RTD/syntax/types.ts +0 -69
- package/source/RTD/walk.test.ts +0 -147
- package/source/Remotes.test.ts +0 -79
- package/source/Remotes.ts +0 -39
- package/source/Tenant.ts +0 -73
- package/source/const.ts +0 -45
- package/source/deployment.ts +0 -96
- package/source/directives/auth/Anonymous.test.ts +0 -70
- package/source/directives/auth/Anonymous.ts +0 -36
- package/source/directives/auth/Anyone.ts +0 -23
- package/source/directives/auth/Assert.ts +0 -43
- package/source/directives/auth/Authorization.test.ts +0 -24
- package/source/directives/auth/Authorization.ts +0 -388
- package/source/directives/auth/Delegate.test.ts +0 -36
- package/source/directives/auth/Delegate.ts +0 -54
- package/source/directives/auth/Echo.ts +0 -24
- package/source/directives/auth/Federation.ts +0 -104
- package/source/directives/auth/Id.ts +0 -37
- package/source/directives/auth/Incept.ts +0 -117
- package/source/directives/auth/Input.ts +0 -92
- package/source/directives/auth/Role.test.ts +0 -147
- package/source/directives/auth/Role.ts +0 -99
- package/source/directives/auth/Rule.ts +0 -59
- package/source/directives/auth/Scheme.ts +0 -31
- package/source/directives/auth/create.ts +0 -11
- package/source/directives/auth/index.ts +0 -3
- package/source/directives/auth/schemes.test.ts +0 -18
- package/source/directives/auth/schemes.ts +0 -39
- package/source/directives/auth/split.ts +0 -14
- package/source/directives/auth/types.ts +0 -75
- package/source/directives/cache/Cache.ts +0 -92
- package/source/directives/cache/Control.ts +0 -81
- package/source/directives/cache/Exact.ts +0 -7
- package/source/directives/cache/etag.ts +0 -38
- package/source/directives/cache/index.ts +0 -3
- package/source/directives/cache/types.ts +0 -9
- package/source/directives/cors/CORS.test.ts +0 -75
- package/source/directives/cors/CORS.ts +0 -88
- package/source/directives/cors/index.ts +0 -3
- package/source/directives/dev/Development.ts +0 -41
- package/source/directives/dev/Faulty.ts +0 -31
- package/source/directives/dev/Sleep.ts +0 -53
- package/source/directives/dev/Stub.ts +0 -14
- package/source/directives/dev/Throw.ts +0 -14
- package/source/directives/dev/index.ts +0 -3
- package/source/directives/dev/types.ts +0 -5
- package/source/directives/flow/Compose.ts +0 -98
- package/source/directives/flow/Fetch.ts +0 -86
- package/source/directives/flow/Flow.ts +0 -43
- package/source/directives/flow/index.ts +0 -3
- package/source/directives/flow/types.ts +0 -7
- package/source/directives/help/Family.ts +0 -122
- package/source/directives/help/Help.test.ts +0 -227
- package/source/directives/help/Help.ts +0 -47
- package/source/directives/help/Parameters.ts +0 -47
- package/source/directives/help/described.ts +0 -57
- package/source/directives/help/index.ts +0 -45
- package/source/directives/index.ts +0 -33
- package/source/directives/io/Directive.ts +0 -17
- package/source/directives/io/IO.ts +0 -118
- package/source/directives/io/Input.ts +0 -55
- package/source/directives/io/Message.ts +0 -1
- package/source/directives/io/Output.ts +0 -81
- package/source/directives/io/Status.test.ts +0 -88
- package/source/directives/io/Status.ts +0 -47
- package/source/directives/io/Throttle.ts +0 -30
- package/source/directives/io/index.ts +0 -3
- package/source/directives/io/lib/throttle/Configuration.test.ts +0 -72
- package/source/directives/io/lib/throttle/Configuration.ts +0 -68
- package/source/directives/io/lib/throttle/Keys.ts +0 -53
- package/source/directives/io/lib/throttle/Quotas.test.ts +0 -411
- package/source/directives/io/lib/throttle/Quotas.ts +0 -190
- package/source/directives/io/lib/throttle/Sync.test.ts +0 -163
- package/source/directives/io/lib/throttle/Sync.ts +0 -93
- package/source/directives/io/lib/throttle/Warning.test.ts +0 -32
- package/source/directives/io/lib/throttle/Warning.ts +0 -29
- package/source/directives/io/lib/throttle/components/Component.ts +0 -7
- package/source/directives/io/lib/throttle/components/IP.ts +0 -30
- package/source/directives/io/lib/throttle/components/Identity.ts +0 -19
- package/source/directives/io/lib/throttle/components/Path.ts +0 -8
- package/source/directives/io/lib/throttle/components/Route.ts +0 -19
- package/source/directives/io/lib/throttle/components/Segment.ts +0 -19
- package/source/directives/io/lib/throttle/components/index.ts +0 -19
- package/source/directives/io/lib/throttle/conditions/Condition.ts +0 -5
- package/source/directives/io/lib/throttle/conditions/Status.ts +0 -17
- package/source/directives/io/lib/throttle/conditions/index.ts +0 -11
- package/source/directives/io/lib/throttle/index.ts +0 -4
- package/source/directives/io/schemas.test.ts +0 -40
- package/source/directives/io/schemas.ts +0 -16
- package/source/directives/map/Authority.ts +0 -15
- package/source/directives/map/Buffer.ts +0 -15
- package/source/directives/map/Claims.ts +0 -63
- package/source/directives/map/Directive.ts +0 -4
- package/source/directives/map/Headers.ts +0 -60
- package/source/directives/map/Language.ts +0 -45
- package/source/directives/map/Languages.ts +0 -17
- package/source/directives/map/Map.ts +0 -85
- package/source/directives/map/Mapping.ts +0 -45
- package/source/directives/map/Properties.ts +0 -15
- package/source/directives/map/Segments.ts +0 -52
- package/source/directives/map/index.ts +0 -3
- package/source/directives/mcp/MCP.ts +0 -33
- package/source/directives/mcp/Tool.test.ts +0 -56
- package/source/directives/mcp/Tool.ts +0 -32
- package/source/directives/mcp/index.ts +0 -6
- package/source/directives/oauth/Discovery.ts +0 -66
- package/source/directives/oauth/documents.ts +0 -110
- package/source/directives/oauth/index.ts +0 -3
- package/source/directives/octets/Context.ts +0 -23
- package/source/directives/octets/Delete.ts +0 -96
- package/source/directives/octets/Directive.ts +0 -21
- package/source/directives/octets/Get.ts +0 -88
- package/source/directives/octets/Octets.ts +0 -82
- package/source/directives/octets/Put.ts +0 -186
- package/source/directives/octets/Workflow.ts +0 -60
- package/source/directives/octets/bytes.test.ts +0 -33
- package/source/directives/octets/bytes.ts +0 -18
- package/source/directives/octets/index.ts +0 -3
- package/source/directives/octets/schemas.test.ts +0 -20
- package/source/directives/octets/schemas.ts +0 -15
- package/source/directives/octets/types.ts +0 -9
- package/source/directives/octets/workflows/Execution.ts +0 -130
- package/source/directives/octets/workflows/Workflow.ts +0 -51
- package/source/directives/octets/workflows/index.ts +0 -1
- package/source/directives/require/Directive.ts +0 -5
- package/source/directives/require/Headers.ts +0 -19
- package/source/directives/require/Require.ts +0 -27
- package/source/directives/require/index.ts +0 -3
- package/source/discovery.ts +0 -1
- package/source/exceptions.ts +0 -47
- package/source/index.ts +0 -12
- package/source/io.ts +0 -4
- package/source/manifest.test.ts +0 -56
- package/source/manifest.ts +0 -56
- package/source/octets.d.ts +0 -17
- package/source/root.ts +0 -59
- package/source/schemas.test.ts +0 -31
- package/source/schemas.ts +0 -15
- package/source/service.ts +0 -94
- package/source/shortcuts.ts +0 -14
- package/source/userland.ts +0 -47
- package/transpiled/Annotation.d.ts +0 -70
- package/transpiled/Annotation.js +0 -2
- package/transpiled/Annotation.js.map +0 -1
- package/transpiled/RTD/syntax/parse.d.ts +0 -4
- package/transpiled/RTD/syntax/parse.js +0 -112
- package/transpiled/RTD/syntax/parse.js.map +0 -1
- package/transpiled/RTD/syntax/types.d.ts +0 -52
- package/transpiled/RTD/syntax/types.js +0 -11
- package/transpiled/RTD/syntax/types.js.map +0 -1
- package/transpiled/const.d.ts +0 -36
- package/transpiled/const.js +0 -37
- package/transpiled/const.js.map +0 -1
- package/transpiled/deployment.d.ts +0 -6
- package/transpiled/deployment.js +0 -76
- package/transpiled/deployment.js.map +0 -1
- package/transpiled/manifest.d.ts +0 -3
- package/transpiled/manifest.js +0 -39
- package/transpiled/manifest.js.map +0 -1
- package/transpiled/schemas.d.ts +0 -9
- package/transpiled/schemas.js +0 -9
- package/transpiled/schemas.js.map +0 -1
- package/transpiled/shortcuts.d.ts +0 -3
- package/transpiled/shortcuts.js +0 -13
- package/transpiled/shortcuts.js.map +0 -1
- package/tsconfig.json +0 -13
- package/tsconfig.tsbuildinfo +0 -1
- package/ui/dist/_app/immutable/assets/0.Bl7vLmIK.css +0 -2
- package/ui/dist/_app/immutable/assets/2.BC0-Jhqu.css +0 -1
- package/ui/dist/_app/immutable/chunks/B_pK3U1C.js +0 -6
- package/ui/dist/_app/immutable/chunks/CiKbPLyY.js +0 -1
- package/ui/dist/_app/immutable/chunks/DjIYL2zC.js +0 -3
- package/ui/dist/_app/immutable/entry/app.DMqmL4NY.js +0 -2
- package/ui/dist/_app/immutable/entry/start.CRe7HWBI.js +0 -1
- package/ui/dist/_app/immutable/nodes/0.D9m-6cbM.js +0 -1
- package/ui/dist/_app/immutable/nodes/1.Cgi_RcSO.js +0 -1
- package/ui/dist/_app/immutable/nodes/2.D_Cbxgz4.js +0 -14
package/documentation/access.md
DELETED
|
@@ -1,350 +0,0 @@
|
|
|
1
|
-
# Access authorization
|
|
2
|
-
|
|
3
|
-
> The Authorization is intrinsically linked with the [Authentication](./identity.md).
|
|
4
|
-
|
|
5
|
-
<a href="">
|
|
6
|
-
<picture>
|
|
7
|
-
<source media="(prefers-color-scheme: dark)" srcset="./.assets/ia3-dark.jpg">
|
|
8
|
-
<img alt="IA3" width="600" height="507" src="./.assets/ia3-light.jpg">
|
|
9
|
-
</picture>
|
|
10
|
-
</a>
|
|
11
|
-
|
|
12
|
-
## Directives
|
|
13
|
-
|
|
14
|
-
The Authorization is implemented as a set of [RTD Directives](tree.md#directives).
|
|
15
|
-
|
|
16
|
-
Directives are executed in a predetermined order until one of them grants access to a resource.
|
|
17
|
-
If none of the directives grants access, then the Authorization interrupts request processing and
|
|
18
|
-
responds with an authorization error.
|
|
19
|
-
|
|
20
|
-
> The Authorization directive provider is named `authorization`,
|
|
21
|
-
> so the full names of the directives are `authorization:{directive}`.
|
|
22
|
-
|
|
23
|
-
### `anonymous`
|
|
24
|
-
|
|
25
|
-
Grants access if its value is `true` and no credentials were provided[^1].
|
|
26
|
-
|
|
27
|
-
A [procedure](rpc.md) is the exception: it grants access whatever the request presented. The rule
|
|
28
|
-
is about a cacheable reply, and what a procedure answers is not one — it is a value in an envelope
|
|
29
|
-
the gateway answers `no-store`, and the procedure's own headers are discarded. So a request that
|
|
30
|
-
carries a credential reaches an `anonymous` route through `/.rpc` and `/.mcp`, where the same
|
|
31
|
-
request would be refused at the route itself. Describing one is the same exception: `OPTIONS` and
|
|
32
|
-
[discovery](discovery.md) answer what the route is whatever the request presented.
|
|
33
|
-
|
|
34
|
-
[^1]:
|
|
35
|
-
Credentials in the request make the
|
|
36
|
-
response [non-cacheable](https://datatracker.ietf.org/doc/html/rfc7234#section-3).
|
|
37
|
-
|
|
38
|
-
### `anyone`
|
|
39
|
-
|
|
40
|
-
Grants access if its value is `true` and valid credentials were provided.
|
|
41
|
-
|
|
42
|
-
### `id`
|
|
43
|
-
|
|
44
|
-
Grants access if resolved Identity matches the value of the URL path segment placeholder named after
|
|
45
|
-
the directive's value.
|
|
46
|
-
|
|
47
|
-
#### Example
|
|
48
|
-
|
|
49
|
-
Given the Route declaration and corresponding HTTP request:
|
|
50
|
-
|
|
51
|
-
```yaml
|
|
52
|
-
/users/:user-id:
|
|
53
|
-
id: 'user-id'
|
|
54
|
-
```
|
|
55
|
-
|
|
56
|
-
```http
|
|
57
|
-
GET /users/87480f2bd88048518c529d7957475ecd/
|
|
58
|
-
Authorization: ...
|
|
59
|
-
```
|
|
60
|
-
|
|
61
|
-
For this request access will be granted if the resolved Identity value
|
|
62
|
-
is `87480f2bd88048518c529d7957475ecd`.
|
|
63
|
-
|
|
64
|
-
### `role`
|
|
65
|
-
|
|
66
|
-
Grants access if resolved Identity has a role matching the directive's value or one of its values.
|
|
67
|
-
|
|
68
|
-
```yaml
|
|
69
|
-
/code:
|
|
70
|
-
role: [developer, reviewer]
|
|
71
|
-
```
|
|
72
|
-
|
|
73
|
-
Access will be granted if the resolved Identity has a role that matches `developer` or `reviewer`.
|
|
74
|
-
|
|
75
|
-
Read [Roles](#roles) section for more details.
|
|
76
|
-
|
|
77
|
-
#### Dynamic roles
|
|
78
|
-
|
|
79
|
-
The `role` directive can be used with a placeholder in the route.
|
|
80
|
-
|
|
81
|
-
```yaml
|
|
82
|
-
/:org-id:
|
|
83
|
-
role: app:{org-id}:moderator
|
|
84
|
-
```
|
|
85
|
-
|
|
86
|
-
### `claims`
|
|
87
|
-
|
|
88
|
-
Grants access if `Bearer` authentication scheme is used
|
|
89
|
-
and the Token's claims matches the specified values.
|
|
90
|
-
|
|
91
|
-
```yaml
|
|
92
|
-
/:
|
|
93
|
-
auth:claims:
|
|
94
|
-
iss: https://id.example.com
|
|
95
|
-
sub: someone
|
|
96
|
-
aud: stars
|
|
97
|
-
```
|
|
98
|
-
|
|
99
|
-
> If OIDC token claim contains `aud`
|
|
100
|
-
> as [an array](https://openid.net/specs/openid-connect-core-1_0.html#IDTokenValidation), the
|
|
101
|
-
> directive will match if at least one value.
|
|
102
|
-
|
|
103
|
-
At least one property is required.
|
|
104
|
-
|
|
105
|
-
Values may refer to the Route parameters or the request authority:
|
|
106
|
-
|
|
107
|
-
```yaml
|
|
108
|
-
/secrets/:org-id:
|
|
109
|
-
auth:claims:
|
|
110
|
-
iss: https://id.org.com
|
|
111
|
-
sub: /:org-id
|
|
112
|
-
aud: :authority
|
|
113
|
-
```
|
|
114
|
-
|
|
115
|
-
An expression `:domain` will match if the domain in the value of `iss` matches the request
|
|
116
|
-
authority, excluding the most specific subdomain.
|
|
117
|
-
|
|
118
|
-
Issuer `https://accounts.example.com` matches request authorities `images.example.com`
|
|
119
|
-
and `sub.images.example.com`, but not `images.another.com`.
|
|
120
|
-
|
|
121
|
-
```yaml
|
|
122
|
-
/images/:user-id:
|
|
123
|
-
auth:claims:
|
|
124
|
-
iss: :domain
|
|
125
|
-
sub: /:org-id
|
|
126
|
-
```
|
|
127
|
-
|
|
128
|
-
### `rule`
|
|
129
|
-
|
|
130
|
-
The Rule is a collection of authorization directives. It allows access only if all the specified
|
|
131
|
-
directives grant access. The value of the `rule` directive can be a single Rule or a list of Rules.
|
|
132
|
-
|
|
133
|
-
#### Example
|
|
134
|
-
|
|
135
|
-
```yaml
|
|
136
|
-
/commits/:user-id:
|
|
137
|
-
rule:
|
|
138
|
-
id: user-id
|
|
139
|
-
role: developer
|
|
140
|
-
```
|
|
141
|
-
|
|
142
|
-
Access will be granted if an Identity matches a `user-id` placeholder and has a Role of `developer`.
|
|
143
|
-
|
|
144
|
-
### `input`
|
|
145
|
-
|
|
146
|
-
Restricts access based on the request body (which must be an object).
|
|
147
|
-
|
|
148
|
-
```yaml
|
|
149
|
-
/commits/:id:
|
|
150
|
-
PUT:
|
|
151
|
-
auth:role: [developer, reviewer]
|
|
152
|
-
auth:input:
|
|
153
|
-
- prop: approved
|
|
154
|
-
role: reviewer
|
|
155
|
-
- prop: message
|
|
156
|
-
role: developer
|
|
157
|
-
```
|
|
158
|
-
|
|
159
|
-
The example above restricts access to the `approved` property of the request body to the identity
|
|
160
|
-
with the `reviewer` role, and the `message` property to the identity with the `developer` role.
|
|
161
|
-
|
|
162
|
-
> `auth:input` directive does not grant access by itself.
|
|
163
|
-
|
|
164
|
-
### `delegate`
|
|
165
|
-
|
|
166
|
-
Embeds the value of the current Identity into the request body as a property named after the value
|
|
167
|
-
of the directive value, and grants access.
|
|
168
|
-
The request body must be an object.
|
|
169
|
-
|
|
170
|
-
> :warning:<br/>
|
|
171
|
-
> The intended use case for this directive is audit.
|
|
172
|
-
> **Using it to pass Identity to the application logic is strongly discouraged.**
|
|
173
|
-
|
|
174
|
-
## Roles
|
|
175
|
-
|
|
176
|
-
Role values are strings that can be assigned to an Identity and used for matching with values of
|
|
177
|
-
the [`role` directive](#role).
|
|
178
|
-
|
|
179
|
-
### Hierarchies
|
|
180
|
-
|
|
181
|
-
Role values are alphanumeric tokens separated by a colon (`:`).
|
|
182
|
-
Each token defines a Role Scope, forming a hierarchy.
|
|
183
|
-
A Role matches the value of the `rule` directive if that Role has the specified Scope in a
|
|
184
|
-
directive.
|
|
185
|
-
|
|
186
|
-
#### Example
|
|
187
|
-
|
|
188
|
-
```yaml
|
|
189
|
-
/commits/:user-id:
|
|
190
|
-
role: developer:senior
|
|
191
|
-
```
|
|
192
|
-
|
|
193
|
-
The example above defines a `role` directive with the specified `developer:senior` Role Scope.
|
|
194
|
-
This directive matches the roles `developer:senior` and `developer`,
|
|
195
|
-
but it **does not** match the Role `developer:senior:javascript`.
|
|
196
|
-
In other words, the Identity must have a specified or more general Role.
|
|
197
|
-
|
|
198
|
-
<a href="https://miro.com/app/board/uXjVOoy0ImU=/?moveToWidget=3458764556008550471&cot=14">
|
|
199
|
-
<picture>
|
|
200
|
-
<source media="(prefers-color-scheme: dark)" srcset=".assets/role-scopes-dark.jpg">
|
|
201
|
-
<img alt="IA3" width="600" height="425" src=".assets/role-scopes-light.jpg">
|
|
202
|
-
</picture>
|
|
203
|
-
</a>
|
|
204
|
-
|
|
205
|
-
> The root-level Role Scope `system` is preserved and cannot be used with the `role` directives.
|
|
206
|
-
|
|
207
|
-
See also [role management resources](components.md#roles).
|
|
208
|
-
|
|
209
|
-
## Policies
|
|
210
|
-
|
|
211
|
-
Component Resource branches cannot have authorization directives.
|
|
212
|
-
Instead, they must declare Authorization Policies using `policy` directive to
|
|
213
|
-
be attached in the Context to a Resource Tree as a set of Authorization Directives
|
|
214
|
-
using `attachment` directive.
|
|
215
|
-
|
|
216
|
-
This restriction provides a separation of concerns, allowing components to be reused in different
|
|
217
|
-
Contexts with varying
|
|
218
|
-
access rules.
|
|
219
|
-
|
|
220
|
-
```yaml
|
|
221
|
-
# manifest.toa.yaml
|
|
222
|
-
|
|
223
|
-
name: posts
|
|
224
|
-
|
|
225
|
-
exposition:
|
|
226
|
-
/:user-id:
|
|
227
|
-
GET:
|
|
228
|
-
endpoint: observe
|
|
229
|
-
policy: read:list
|
|
230
|
-
POST:
|
|
231
|
-
endpoint: transit
|
|
232
|
-
policy: post:submit
|
|
233
|
-
/:post-id:
|
|
234
|
-
GET:
|
|
235
|
-
endpoint: observe
|
|
236
|
-
policy: read:post
|
|
237
|
-
PUT:
|
|
238
|
-
endpoint: assign
|
|
239
|
-
policy: post:edit
|
|
240
|
-
```
|
|
241
|
-
|
|
242
|
-
```yaml
|
|
243
|
-
# context.toa.yaml
|
|
244
|
-
|
|
245
|
-
exposition:
|
|
246
|
-
/posts:
|
|
247
|
-
attachment:
|
|
248
|
-
read:
|
|
249
|
-
anonymous: true
|
|
250
|
-
post:
|
|
251
|
-
id: user-id
|
|
252
|
-
post:edit:
|
|
253
|
-
role: app:posts:editor
|
|
254
|
-
```
|
|
255
|
-
|
|
256
|
-
Policy values as well as [Role](#roles) values define hierarchical Policy Scopes.
|
|
257
|
-
|
|
258
|
-
In the example above:
|
|
259
|
-
|
|
260
|
-
- an Attachment `read` attaches Directive `anonymous: true` to both `read:list` and `read:post`
|
|
261
|
-
Policy Scopes.
|
|
262
|
-
This means that a list of posts and each post can be accessed without authorization.
|
|
263
|
-
- an Attachment `post` attaches Directive `id: user-id` to both `post:submit` and `post:edit` Policy
|
|
264
|
-
Scopes.
|
|
265
|
-
This means that an Identity can submit and edit their own posts.
|
|
266
|
-
- an Attachment `post:edit` attaches Directive `role: app:posts:editor` to `post:edit` Policy Scope.
|
|
267
|
-
This means that an identity with the role scope `app:posts:editor` can edit posts by any author,
|
|
268
|
-
in addition to the fact that the author themselves can do this thanks to the previous Attachment.
|
|
269
|
-
|
|
270
|
-
### Nesting
|
|
271
|
-
|
|
272
|
-
Policies are namespace-scoped, meaning they can be attached to any Route under the
|
|
273
|
-
corresponding `/{namespace}` prefix.
|
|
274
|
-
|
|
275
|
-
Attachment is applied to the node where it is declared, as well as its nested nodes.
|
|
276
|
-
Directives of the Attachment are applied to the node where the attached Policies are declared, as
|
|
277
|
-
well as their nested nodes.
|
|
278
|
-
|
|
279
|
-
Here's an example of how this works:
|
|
280
|
-
|
|
281
|
-
```yaml
|
|
282
|
-
# manifest.toa.yaml
|
|
283
|
-
|
|
284
|
-
name: posts
|
|
285
|
-
|
|
286
|
-
exposition:
|
|
287
|
-
/:user-id:
|
|
288
|
-
GET:
|
|
289
|
-
endpoint: observe
|
|
290
|
-
policy: read
|
|
291
|
-
/:user-id/:post-id:
|
|
292
|
-
GET:
|
|
293
|
-
endpoint: observe
|
|
294
|
-
policy: read
|
|
295
|
-
```
|
|
296
|
-
|
|
297
|
-
```yaml
|
|
298
|
-
# context.toa.yaml
|
|
299
|
-
|
|
300
|
-
exposition:
|
|
301
|
-
/posts:
|
|
302
|
-
/:user-id:
|
|
303
|
-
attachment:
|
|
304
|
-
read:
|
|
305
|
-
anonymous: true
|
|
306
|
-
/:user-id/:post-id:
|
|
307
|
-
attachment:
|
|
308
|
-
read:
|
|
309
|
-
role: reader
|
|
310
|
-
```
|
|
311
|
-
|
|
312
|
-
In the example above, the same Policy `read` is attached to two Routes with different Directives.
|
|
313
|
-
|
|
314
|
-
The following example demonstrates the attachment of the `read` Policy to both Routes with the same
|
|
315
|
-
Directive:
|
|
316
|
-
|
|
317
|
-
```yaml
|
|
318
|
-
# context.toa.yaml
|
|
319
|
-
|
|
320
|
-
exposition:
|
|
321
|
-
/posts:
|
|
322
|
-
attachment:
|
|
323
|
-
read:
|
|
324
|
-
anonymous: true
|
|
325
|
-
```
|
|
326
|
-
|
|
327
|
-
## Introspection
|
|
328
|
-
|
|
329
|
-
[`OPTIONS`](introspection.md) answers only the methods this identity may reach, and `403` where it
|
|
330
|
-
may reach none. So does [discovery](discovery.md), which omits a resource they may reach no method
|
|
331
|
-
of, and so does MCP's `tools/list`: all three read the same description.
|
|
332
|
-
|
|
333
|
-
What is decided from the identity decides here — `anonymous`, `anyone`, `role`, `delegate`. `id`
|
|
334
|
-
and `federation` decide from one too: *which* identity needs the request, and a description has no
|
|
335
|
-
route variable to read, but a caller with no identity at all is refused whatever the value would
|
|
336
|
-
have been — and is not shown it. `assert` and `input` admit nobody: they require a credential and
|
|
337
|
-
constrain a body, and whoever is admitted is admitted by something else.
|
|
338
|
-
|
|
339
|
-
`anonymous` is the exception it is for a procedure: a description is not the reply a cache would
|
|
340
|
-
hold, so a route it admits is described whatever the request presented.
|
|
341
|
-
|
|
342
|
-
What guards a method is said in the description as well: `authenticated` where reaching it takes
|
|
343
|
-
being someone and no more — `anyone`, `delegate`, `claims` — `private` where `id` decides it,
|
|
344
|
-
`protected` where `role` does, and `system` besides where that role is one of the `system` scope.
|
|
345
|
-
`rule` says whatever each directive it composes says. A resource carries whichever of the four any
|
|
346
|
-
of its methods does.
|
|
347
|
-
|
|
348
|
-
`anonymous` says so too, which is what tells a client where not to present a credential: it is
|
|
349
|
-
the one that refuses a caller carrying one. A method that says nothing at all — `echo` is the
|
|
350
|
-
one — takes a credential where there is one and answers without it where there is not.
|
|
@@ -1,51 +0,0 @@
|
|
|
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.md#authority)
|
|
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
|
-
The value is lowercased before the lookup. A value that is not a host name or a bracketed IPv6
|
|
39
|
-
literal, each with an optional port, is answered with `400 Bad Request`.
|
|
40
|
-
|
|
41
|
-
## Identity
|
|
42
|
-
|
|
43
|
-
Credentials stored or issued by the [authentication system](identity.md) are associated with an
|
|
44
|
-
authority.
|
|
45
|
-
Credentials in one authority are not valid in another,
|
|
46
|
-
or may be associated with a different Identity; in other words, Identity exists in the context of an
|
|
47
|
-
authority.
|
|
48
|
-
|
|
49
|
-
> :warning:<br/>
|
|
50
|
-
> Changing the authority identifier will break compatibility with existing stored or issued
|
|
51
|
-
> credentials.
|
package/documentation/cache.md
DELETED
|
@@ -1,72 +0,0 @@
|
|
|
1
|
-
# Caching
|
|
2
|
-
|
|
3
|
-
Directive family `cache` implements the
|
|
4
|
-
HTTP [Cache-Control](https://datatracker.ietf.org/doc/html/rfc2616#section-14.9).
|
|
5
|
-
|
|
6
|
-
## `cache:control`
|
|
7
|
-
|
|
8
|
-
Sets the value of the `Cache-Control` header
|
|
9
|
-
for [successful responses](https://datatracker.ietf.org/doc/html/rfc2616#section-10.2)
|
|
10
|
-
to [safe HTTP methods](https://developer.mozilla.org/en-US/docs/Glossary/Safe/HTTP).
|
|
11
|
-
|
|
12
|
-
```yaml
|
|
13
|
-
/:
|
|
14
|
-
GET:
|
|
15
|
-
cache:control: max-age=60000
|
|
16
|
-
```
|
|
17
|
-
|
|
18
|
-
### Implicit modifications
|
|
19
|
-
|
|
20
|
-
In terms of security, the following implicit modifications are made to the `cache-control` header:
|
|
21
|
-
|
|
22
|
-
- If it contains the `public` directive without `no-cache` and the request is authenticated,
|
|
23
|
-
the `no-cache` directive is added.
|
|
24
|
-
This is done to prevent the storage of authentication tokens in shared caches.
|
|
25
|
-
- If it does not contain the `private` directive and the request is authenticated, the `private`
|
|
26
|
-
directive is added.
|
|
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]:
|
|
33
|
-
This also will invalidate the cache each time a new token is used for the same identity, thus
|
|
34
|
-
limiting the `max-age` value to the token's `refresh` time.
|
|
35
|
-
See [Issuing tokens](components.md#issuing-tokens).
|
|
36
|
-
|
|
37
|
-
## `cache:exact`
|
|
38
|
-
|
|
39
|
-
Same as `cache:control` without implicit modifications, and set whatever the method.
|
|
40
|
-
|
|
41
|
-
```yaml
|
|
42
|
-
/:
|
|
43
|
-
GET:
|
|
44
|
-
cache:exact: public, max-age=60000
|
|
45
|
-
```
|
|
46
|
-
|
|
47
|
-
`cache:control` and the implicit value are set on `GET` and `HEAD` only. `cache:exact` is set on
|
|
48
|
-
any method, so a reply that must not be stored can say so:
|
|
49
|
-
|
|
50
|
-
```yaml
|
|
51
|
-
/tokens/:
|
|
52
|
-
POST:
|
|
53
|
-
cache:exact: no-store
|
|
54
|
-
```
|
|
55
|
-
|
|
56
|
-
## Validators
|
|
57
|
-
|
|
58
|
-
A reply that carries an `UPDATED` or `CREATED` timestamp says so in `last-modified`, whatever
|
|
59
|
-
the method. A reply to a safe request (`GET`, `HEAD`) that carries a `VERSION` is tagged with
|
|
60
|
-
it: `etag: "3"`. A request sending the tag back in `if-none-match`, strong or weak (`W/"3"`), is
|
|
61
|
-
answered `304 Not Modified` with the tag as it was sent.
|
|
62
|
-
|
|
63
|
-
A reply that carries no version has no tag, and a reply to an unsafe request has none either:
|
|
64
|
-
its `VERSION` is in the body, and the next `GET` is what a cache validates.
|
|
65
|
-
|
|
66
|
-
`if-match` is [concurrency control](query.md#optimistic-concurrency-control), which is the
|
|
67
|
-
request's, whatever its method.
|
|
68
|
-
|
|
69
|
-
## References
|
|
70
|
-
|
|
71
|
-
- HTTP 14.9.1 [What is cacheable](https://datatracker.ietf.org/doc/html/rfc2616#section-14.9.1)
|
|
72
|
-
- See also [features](/extensions/exposition/features/cache.feature)
|