@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/io.md
DELETED
|
@@ -1,167 +0,0 @@
|
|
|
1
|
-
# I/O restrictions
|
|
2
|
-
|
|
3
|
-
The Exposition comes with `io` directives to control access to the operation's input and output
|
|
4
|
-
properties, and to let an operation state the status of its reply.
|
|
5
|
-
|
|
6
|
-
## Input
|
|
7
|
-
|
|
8
|
-
The `io:input` optional directive contains a list of properties that are allowed to be specified in
|
|
9
|
-
the request body.
|
|
10
|
-
|
|
11
|
-
```yaml
|
|
12
|
-
POST:
|
|
13
|
-
endpoint: create
|
|
14
|
-
io:input: [name, location]
|
|
15
|
-
```
|
|
16
|
-
|
|
17
|
-
The list must be a valid subset of the operation's input properties.
|
|
18
|
-
|
|
19
|
-
If `io:input` is specified and the request body is not an object, or contains properties that are
|
|
20
|
-
not in the list, the request will be rejected with a `400` status code.
|
|
21
|
-
|
|
22
|
-
> Therefore, `io:input` is only applicable to operations which input is an object or an
|
|
23
|
-
> array of objects.
|
|
24
|
-
|
|
25
|
-
## Output
|
|
26
|
-
|
|
27
|
-
The `io:output` mandatory directive contains a list of properties that are allowed to be included in
|
|
28
|
-
the response body.
|
|
29
|
-
|
|
30
|
-
```yaml
|
|
31
|
-
GET:
|
|
32
|
-
endpoint: observe
|
|
33
|
-
io:output: [name, location]
|
|
34
|
-
```
|
|
35
|
-
|
|
36
|
-
When an operation does not return an object (e.g., a primitive or a stream), or an object is dynamic
|
|
37
|
-
and its properties are not known in advance, `io:output` may have a value of `true` to disable
|
|
38
|
-
output restrictions.
|
|
39
|
-
|
|
40
|
-
```yaml
|
|
41
|
-
GET:
|
|
42
|
-
endpoint: proxy
|
|
43
|
-
io:output: true
|
|
44
|
-
```
|
|
45
|
-
|
|
46
|
-
If a method declaration lacks `io:output` directive, it will trigger a warning, and its
|
|
47
|
-
response will consistently be empty.
|
|
48
|
-
If this behavior is intended, a `false` value can be employed to suppress warnings.
|
|
49
|
-
|
|
50
|
-
```yaml
|
|
51
|
-
GET:
|
|
52
|
-
endpoint: conceal
|
|
53
|
-
io:output: false
|
|
54
|
-
```
|
|
55
|
-
|
|
56
|
-
Output restrictions are not applied to stream responses, nor to a reply the gateway built out of an
|
|
57
|
-
exception — an operation that returns an error is answered with a code and a message of the
|
|
58
|
-
gateway's own, and a list of permitted properties has nothing to say about those. A reply the
|
|
59
|
-
operation returned is restricted whatever status it carries, see [Status](#status).
|
|
60
|
-
|
|
61
|
-
## Status
|
|
62
|
-
|
|
63
|
-
The `io:status` optional directive names a property of the reply that carries the status of the
|
|
64
|
-
response. The property is removed from the body.
|
|
65
|
-
|
|
66
|
-
```yaml
|
|
67
|
-
POST:
|
|
68
|
-
endpoint: register
|
|
69
|
-
io:status: status
|
|
70
|
-
io:output: [client_id, client_name, error, error_description]
|
|
71
|
-
```
|
|
72
|
-
|
|
73
|
-
```javascript
|
|
74
|
-
return { status: 400, error: 'invalid_redirect_uri' }
|
|
75
|
-
```
|
|
76
|
-
|
|
77
|
-
```http
|
|
78
|
-
400 Bad Request
|
|
79
|
-
|
|
80
|
-
error: invalid_redirect_uri
|
|
81
|
-
```
|
|
82
|
-
|
|
83
|
-
A reply that does not carry the property is answered with the status it would have been. A property
|
|
84
|
-
that is not a number is an error.
|
|
85
|
-
|
|
86
|
-
This is for an outcome the operation knows and the transport does not — a protocol that states its
|
|
87
|
-
error as a body rather than as a status of its own, or a request that created where it might have
|
|
88
|
-
updated. Such an operation returns no error: both replies are its output, and `io:output` permits
|
|
89
|
-
the properties of both. An operation that does return an error is unaffected — that reply is the
|
|
90
|
-
gateway's, and is not restricted.
|
|
91
|
-
|
|
92
|
-
## Throttling
|
|
93
|
-
|
|
94
|
-
The `io:throttle` directive limits the rate of requests meeting the specified criteria.
|
|
95
|
-
|
|
96
|
-
```yaml
|
|
97
|
-
exposition:
|
|
98
|
-
/:
|
|
99
|
-
io:throttle:
|
|
100
|
-
key:
|
|
101
|
-
- route
|
|
102
|
-
- ip
|
|
103
|
-
condition:
|
|
104
|
-
status: 404
|
|
105
|
-
requests: 500
|
|
106
|
-
interval: 30
|
|
107
|
-
```
|
|
108
|
-
|
|
109
|
-
Requests are metered per `key`. A key may spend `requests` at once, and earns them back at a rate of
|
|
110
|
-
`requests` per `interval` seconds. A request carrying a key with nothing left to spend is answered
|
|
111
|
-
`429 Too Many Requests`, with a `Retry-After` saying how long until one would be admitted again.
|
|
112
|
-
`interval` is in seconds.
|
|
113
|
-
|
|
114
|
-
So `requests` is the burst, and `requests / interval` the rate it is repaid at. There is no window to
|
|
115
|
-
save a budget up in and spend twice across the edge of, and no lockout to sit out: a key that has
|
|
116
|
-
overspent is admitted again as soon as it has earned a single request back, and a client that keeps
|
|
117
|
-
asking meanwhile is not penalised for it.
|
|
118
|
-
|
|
119
|
-
`requests` is a budget for the **whole group** of gateway instances, not for one of them. Instances
|
|
120
|
-
reconcile through Redis on a timer, so they converge on one number rather than each enforcing the
|
|
121
|
-
limit separately. Between two of those, an instance goes on what it alone has spent — so the group
|
|
122
|
-
can overshoot by what the other instances admit within that window, and by no more. The window is a
|
|
123
|
-
tenth of `interval`, between a quarter of a second and two seconds, whatever `interval` is. Precise
|
|
124
|
-
per-request enforcement is not what this is for.
|
|
125
|
-
|
|
126
|
-
An instance that cannot reach Redis keeps throttling on what it has seen itself and keeps serving,
|
|
127
|
-
and reports what it could not the next time it gets through.
|
|
128
|
-
|
|
129
|
-
### Key components
|
|
130
|
-
|
|
131
|
-
What a request is metered against. Give one, or a list — a list keys on the combination, so
|
|
132
|
-
`[route, ip]` meters each address separately on each route.
|
|
133
|
-
|
|
134
|
-
- `ip` — the client address, as the request context resolved it. See [Client address](ip.md) for
|
|
135
|
-
where it is read from and why.
|
|
136
|
-
- `path` — the path the request came in on, `/users/1`.
|
|
137
|
-
- `route` — the route as declared, `/users/:id`. Every path matching the route shares one budget,
|
|
138
|
-
which `path` cannot do: keyed on `path`, walking ids is a way around the limit.
|
|
139
|
-
- `identity` — the authenticated identity. Requests carrying none share a single budget between
|
|
140
|
-
them, so pair it with `ip` if that matters.
|
|
141
|
-
- `segment: <name>` — the value bound to a named route segment, `1` for `:id` in `/users/:id`.
|
|
142
|
-
|
|
143
|
-
### Conditions
|
|
144
|
-
|
|
145
|
-
What is metered, as opposed to what it is metered against. A request that fails a condition is served
|
|
146
|
-
and costs nothing. Conditions are evaluated against the response, so they cannot decide whether to
|
|
147
|
-
refuse a request — only whether it is charged for, once it has been answered.
|
|
148
|
-
|
|
149
|
-
- `status: <code>` — charge only for responses with this status.
|
|
150
|
-
|
|
151
|
-
```yaml
|
|
152
|
-
io:throttle:
|
|
153
|
-
key: ip
|
|
154
|
-
condition:
|
|
155
|
-
status: 404
|
|
156
|
-
requests: 20
|
|
157
|
-
interval: 600
|
|
158
|
-
```
|
|
159
|
-
|
|
160
|
-
An address may probe for twenty missing paths at once, and thereafter for one every thirty seconds.
|
|
161
|
-
Requests that find something are served and never counted against it.
|
|
162
|
-
|
|
163
|
-
## Introspection
|
|
164
|
-
|
|
165
|
-
What these admit is what [`OPTIONS`](introspection.md) states: `io:input` restricts the input
|
|
166
|
-
schema, `io:output` the output schema, and a method declaring no `io:output` states no output at
|
|
167
|
-
all — nothing of the reply is sent.
|
package/documentation/ip.md
DELETED
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
# Client address
|
|
2
|
-
|
|
3
|
-
The address a request comes from is resolved once, into the request context, and read from there
|
|
4
|
-
by whatever keys on it: the meter of [failed authentications](identity.md#failed-authentications)
|
|
5
|
-
and the `ip` key of [`io:throttle`](io.md#key-components).
|
|
6
|
-
|
|
7
|
-
```yaml
|
|
8
|
-
# context.toa.yaml
|
|
9
|
-
|
|
10
|
-
exposition:
|
|
11
|
-
ip: cf-connecting-ip
|
|
12
|
-
```
|
|
13
|
-
|
|
14
|
-
`ip` names the header the address is read from. In production the gateway sits behind a load
|
|
15
|
-
balancer, an ingress or a CDN: the connection it accepts comes from that machine, so every client
|
|
16
|
-
shares one address and nothing tells them apart. The edge is the one that saw the client connect,
|
|
17
|
-
and it writes the client's address into a header of its own, `CF-Connecting-IP`, `X-Real-IP` or
|
|
18
|
-
`X-Forwarded-For`, depending on the infrastructure. A client may send any of these headers too, so
|
|
19
|
-
the gateway trusts none of them on its own: the deployment names the one its edge overwrites, and
|
|
20
|
-
where the header holds a list, the last value is the one the edge appended.
|
|
21
|
-
|
|
22
|
-
The connection's address is never used. Without `ip`, or for a request that does not carry the
|
|
23
|
-
header, the request has no address: the bouncer and a throttle keyed on `ip` let it through and
|
|
24
|
-
say so in the log, once per hundred seconds rather than once per request.
|
package/documentation/map.md
DELETED
|
@@ -1,123 +0,0 @@
|
|
|
1
|
-
# HTTP context mapping
|
|
2
|
-
|
|
3
|
-
The `map` directive family is used to map HTTP request parts to operation call input properties.
|
|
4
|
-
|
|
5
|
-
[Features](../features/map.feature).
|
|
6
|
-
|
|
7
|
-
## TL;DR
|
|
8
|
-
|
|
9
|
-
```yaml
|
|
10
|
-
exposition:
|
|
11
|
-
/:group:
|
|
12
|
-
languages: [en, fr] # supported languages
|
|
13
|
-
GET:
|
|
14
|
-
map:authority: hostname # request authority (e.g., hostname)
|
|
15
|
-
map:language: lang # requested language
|
|
16
|
-
map:headers: # raw header values
|
|
17
|
-
token: x-access-token
|
|
18
|
-
map:buffer: body # unparsed request body
|
|
19
|
-
map:segments: # route parameters
|
|
20
|
-
group: group
|
|
21
|
-
map:claims: # Bearer token claims
|
|
22
|
-
address: email
|
|
23
|
-
verified: email_verified
|
|
24
|
-
endpoint: observe
|
|
25
|
-
```
|
|
26
|
-
|
|
27
|
-
The operation input type must be an object.
|
|
28
|
-
If the input already contains the specified keys, they will be overwritten.
|
|
29
|
-
|
|
30
|
-
## Authority
|
|
31
|
-
|
|
32
|
-
The `map:authority` directive maps the [authority identifier](authorities.md) to an operation call
|
|
33
|
-
input property specified by the directive value.
|
|
34
|
-
|
|
35
|
-
### Language
|
|
36
|
-
|
|
37
|
-
The `map:language` mapping sets the [most matching](https://github.com/jshttp/negotiator) language
|
|
38
|
-
code based on the `accept-language` request header and a list of supported languages defined by
|
|
39
|
-
the `map:languages` directive, and also adds `accept-language` to the `Vary` HTTP response header
|
|
40
|
-
value.
|
|
41
|
-
|
|
42
|
-
If none of the supported languages match, the first supported language is used.
|
|
43
|
-
|
|
44
|
-
> `map:languages` has a shorthand form: `languages: [en, fr]`.
|
|
45
|
-
|
|
46
|
-
## Header values
|
|
47
|
-
|
|
48
|
-
The `map:headers` directive maps the values of HTTP request headers to operation call input
|
|
49
|
-
properties.
|
|
50
|
-
The value of the directive is a map where keys are the names of the input properties and values are
|
|
51
|
-
the names of the HTTP request headers.
|
|
52
|
-
|
|
53
|
-
The names of these headers are then included in the `Vary` HTTP response header
|
|
54
|
-
and [Access-Control-Allow-Headers](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Headers)
|
|
55
|
-
of the [CORS](protocol.md#cors).
|
|
56
|
-
|
|
57
|
-
[Multiple header fields](https://www.w3.org/Protocols/rfc2616/rfc2616-sec4.html#sec4.2) are combined
|
|
58
|
-
as a comma-separated list.
|
|
59
|
-
|
|
60
|
-
## Raw body
|
|
61
|
-
|
|
62
|
-
The `map:buffer` directive maps the unparsed request body to an operation call input property.
|
|
63
|
-
The directive value is the name of the input property.
|
|
64
|
-
|
|
65
|
-
```yaml
|
|
66
|
-
/webhook:
|
|
67
|
-
POST:
|
|
68
|
-
map:buffer: body
|
|
69
|
-
map:headers:
|
|
70
|
-
signature: x-signature
|
|
71
|
-
endpoint: verify
|
|
72
|
-
```
|
|
73
|
-
|
|
74
|
-
The body is read from the request stream as raw bytes and delivered as a UTF-8 string.
|
|
75
|
-
|
|
76
|
-
Body parsing is bypassed, so the route does not depend on a supported `Content-Type` or format decoding. The request stream is consumed; a route with `map:buffer` cannot also receive a parsed body from the same request.
|
|
77
|
-
|
|
78
|
-
## Route parameters
|
|
79
|
-
|
|
80
|
-
The `map:segments` directive maps the values of route parameters to operation call input properties.
|
|
81
|
-
The value of the directive is a map where keys are the names of the input properties, and values are
|
|
82
|
-
the names of the route parameters.
|
|
83
|
-
|
|
84
|
-
Parameter name may be prefixed with `~`
|
|
85
|
-
to indicate that the parameter should not be available to the
|
|
86
|
-
remaining directives or used as criteria in the operation call.
|
|
87
|
-
|
|
88
|
-
```yaml
|
|
89
|
-
/:id/:tag:
|
|
90
|
-
POST:
|
|
91
|
-
map:segments:
|
|
92
|
-
id: id
|
|
93
|
-
tag: ~tag
|
|
94
|
-
endpoint: create
|
|
95
|
-
```
|
|
96
|
-
|
|
97
|
-
Wildcard routes are supported by using `**` as the parameter name.
|
|
98
|
-
|
|
99
|
-
```yaml
|
|
100
|
-
/path/to/**:
|
|
101
|
-
GET:
|
|
102
|
-
map:segments:
|
|
103
|
-
path: '**'
|
|
104
|
-
endpoint: observe
|
|
105
|
-
```
|
|
106
|
-
|
|
107
|
-
## Bearer token claims
|
|
108
|
-
|
|
109
|
-
The `map:claims` directive maps the values of
|
|
110
|
-
the [token claims](https://datatracker.ietf.org/doc/html/rfc7519#section-4).
|
|
111
|
-
The value of the directive is a map where keys are the names of the input properties and values are
|
|
112
|
-
the names of the claims.
|
|
113
|
-
|
|
114
|
-
If the claim is not present in the token or the request is not authenticated using
|
|
115
|
-
the [`Bearer` scheme](identity.md#bearer-scheme), the input properties are not set.
|
|
116
|
-
|
|
117
|
-
## Introspection
|
|
118
|
-
|
|
119
|
-
A property a mapping fills is not the caller's to send, so [`OPTIONS`](introspection.md) takes it
|
|
120
|
-
out of the input. `map:headers` states it under `headers`, naming the header it is read from, and
|
|
121
|
-
`map:segments` under `route`, named as the property rather than as the segment. The rest —
|
|
122
|
-
`map:claims`, `map:authority`, `map:language`, `map:buffer` — come from the request itself, and a
|
|
123
|
-
caller has nowhere to put one.
|
package/documentation/mcp.md
DELETED
|
@@ -1,183 +0,0 @@
|
|
|
1
|
-
# Model Context Protocol
|
|
2
|
-
|
|
3
|
-
An application annotates it, and the methods it names as tools are what a model may call.
|
|
4
|
-
|
|
5
|
-
```yaml
|
|
6
|
-
exposition:
|
|
7
|
-
mcp:
|
|
8
|
-
name: Teapots
|
|
9
|
-
instructions: A pot is read by its id. A pot that is brewing cannot be emptied.
|
|
10
|
-
origins: [https://claude.ai]
|
|
11
|
-
```
|
|
12
|
-
|
|
13
|
-
<dl>
|
|
14
|
-
<dt><code>name</code></dt>
|
|
15
|
-
<dd>Required. What the server calls itself, which a client shows a user.</dd>
|
|
16
|
-
<dt><code>instructions</code></dt>
|
|
17
|
-
<dd>What a model is told before it calls anything here.</dd>
|
|
18
|
-
<dt><code>origins</code></dt>
|
|
19
|
-
<dd>Browser origins the endpoint answers. A request carrying an <code>Origin</code> that is not
|
|
20
|
-
listed is <code>403</code>, and an empty list admits none; a request carrying none is unaffected.</dd>
|
|
21
|
-
<dt><code>anonymous</code></dt>
|
|
22
|
-
<dd>Whether the endpoint answers without a credential. It does not unless it says so.</dd>
|
|
23
|
-
</dl>
|
|
24
|
-
|
|
25
|
-
Without the annotation `/.mcp` is a path like any other, and nothing answers there. The path is
|
|
26
|
-
fixed: one an application could choose is one it could collide with a route of its own.
|
|
27
|
-
|
|
28
|
-
## What a tool is
|
|
29
|
-
|
|
30
|
-
A tool is an RTD method that says it is one, named as the [procedure](rpc.md#the-name) it is:
|
|
31
|
-
|
|
32
|
-
```yaml
|
|
33
|
-
/pots:
|
|
34
|
-
GET:
|
|
35
|
-
mcp:tool: true
|
|
36
|
-
help:method: Every pot there is, newest first.
|
|
37
|
-
endpoint: enumerate
|
|
38
|
-
/hot:
|
|
39
|
-
GET:
|
|
40
|
-
query: { criteria: temperature=gt=80 }
|
|
41
|
-
mcp:tool: true
|
|
42
|
-
help:method:
|
|
43
|
-
title: Hot pots
|
|
44
|
-
description: The pots that are too hot to pour.
|
|
45
|
-
endpoint: enumerate
|
|
46
|
-
```
|
|
47
|
-
|
|
48
|
-
A default denies, and a tree holds everything an application serves — its identity endpoints, its
|
|
49
|
-
uploads, the machinery of the authorization flow the model already came through. Publishing all of
|
|
50
|
-
it would spend a model's context on what it has no business calling.
|
|
51
|
-
|
|
52
|
-
`mcp:tool` says only whether the method is published. What the tool is called and what it is for is
|
|
53
|
-
[`help:method`](help.md), which is what describes the method everywhere else as well — a tool a
|
|
54
|
-
model cannot read the purpose of is one it cannot choose, so declare one beside the other.
|
|
55
|
-
|
|
56
|
-
A declaration is inherited by everything below it, as every directive is, and the nearer one wins —
|
|
57
|
-
so a node publishes a subtree, and `mcp:tool: false` withdraws one method of it.
|
|
58
|
-
|
|
59
|
-
A route whose name a client [cannot spell](rpc.md#what-has-a-name) is refused where the directive
|
|
60
|
-
is built, rather than served as a tool that is quietly never listed.
|
|
61
|
-
|
|
62
|
-
`tools/list` answers every published method this caller may reach — a method whose directives refuse
|
|
63
|
-
them is not listed, and a route with [no name](rpc.md#what-has-a-name) is not either. `tools/call`
|
|
64
|
-
answers `404` to a name that is not published, whether or not a route would have taken it: what an
|
|
65
|
-
application did not publish is not reachable by guessing what it would have been called.
|
|
66
|
-
|
|
67
|
-
`annotations` are read from the verb: `GET` and `HEAD` are `readOnlyHint`, `DELETE` is
|
|
68
|
-
`destructiveHint`, `PUT` and `DELETE` are `idempotentHint`.
|
|
69
|
-
|
|
70
|
-
## What a tool takes
|
|
71
|
-
|
|
72
|
-
`inputSchema` is the procedure's `params`, which is what the method
|
|
73
|
-
[says of itself](introspection.md): a route variable by the name the template gives it, the
|
|
74
|
-
querystring under `query`, and what is left is the body. `io:input` restricts it, and a property
|
|
75
|
-
`map` fills is not there — a call carries no headers of its own.
|
|
76
|
-
|
|
77
|
-
`query` carries what selects records — `criteria`, `sort`, `limit`, `omit`, `search` — beside the
|
|
78
|
-
parameters the resource declares. `OPTIONS` states only the latter, because the former is the same
|
|
79
|
-
of every queryable resource; here it is stated, because here it is something the caller sends.
|
|
80
|
-
|
|
81
|
-
```yaml
|
|
82
|
-
type: object
|
|
83
|
-
properties:
|
|
84
|
-
id: { type: string, pattern: ^[a-fA-F0-9]{32}$ }
|
|
85
|
-
query:
|
|
86
|
-
type: object
|
|
87
|
-
properties:
|
|
88
|
-
criteria: { type: string }
|
|
89
|
-
sort: { type: string }
|
|
90
|
-
limit: { type: integer, minimum: 1, maximum: 100, default: 10 }
|
|
91
|
-
omit: { type: integer, minimum: 0, maximum: 1000, default: 0 }
|
|
92
|
-
required: [id]
|
|
93
|
-
additionalProperties: false
|
|
94
|
-
```
|
|
95
|
-
|
|
96
|
-
## What a tool answers
|
|
97
|
-
|
|
98
|
-
`content` carries one `text` block holding the reply's JSON, and `structuredContent` the reply
|
|
99
|
-
itself. A reply of nothing is an empty `content`.
|
|
100
|
-
|
|
101
|
-
`outputSchema` is what the operation declares, restricted by `io:output`. An operation's `output` is
|
|
102
|
-
optional and normalizes to `{}`, which describes nothing, and none is stated for it — an
|
|
103
|
-
application that wants the schema declares the operation's `output`.
|
|
104
|
-
|
|
105
|
-
An operation that refuses answers a result with `isError: true` carrying its message, not an error
|
|
106
|
-
of the protocol: it is something a model reads and may correct itself by.
|
|
107
|
-
|
|
108
|
-
## Two revisions
|
|
109
|
-
|
|
110
|
-
Both are answered from one endpoint that remembers nothing between requests.
|
|
111
|
-
[`2026-07-28`](https://modelcontextprotocol.io/specification/2026-07-28) carries the version and
|
|
112
|
-
the client's capabilities in every request; `2025-11-25` opens with `initialize`. Which one a
|
|
113
|
-
request is, is read from `MCP-Protocol-Version`, or from
|
|
114
|
-
`_meta['io.modelcontextprotocol/protocolVersion']` where the header is absent; `initialize` is one
|
|
115
|
-
by itself, and a request naming no version is of a revision that sent none.
|
|
116
|
-
|
|
117
|
-
| method | |
|
|
118
|
-
| --------------------------- | -------------------------------------------------------------------------- |
|
|
119
|
-
| `server/discover` | what is served, and who serves it |
|
|
120
|
-
| `tools/list` | every tool this caller may reach, in a stable order |
|
|
121
|
-
| `tools/call` | the call the tool is |
|
|
122
|
-
| `initialize` | the same as `server/discover`, in the shape a client of `2025-11-25` reads |
|
|
123
|
-
| `notifications/initialized` | `202`, and nothing done |
|
|
124
|
-
| `ping` | `{}` |
|
|
125
|
-
|
|
126
|
-
`POST` only, one message per request; `GET` and `DELETE` are `405`. An `Mcp-Session-Id` is ignored
|
|
127
|
-
and none is minted, a `Last-Event-ID` is ignored, and `accept` is negotiated as everywhere else.
|
|
128
|
-
|
|
129
|
-
Of the modern revision, `MCP-Protocol-Version` and `Mcp-Method` are required, and `Mcp-Name` for a
|
|
130
|
-
`tools/call`; each must say what the body says. `_meta` states the protocol version and the client's
|
|
131
|
-
capabilities. Every result carries `resultType` and names the server in its own `_meta`, and a
|
|
132
|
-
`server/discover` or a `tools/list` carries how long it may be held: half an hour, `public` for the
|
|
133
|
-
first and `private` for the second, which is filtered by the identity that asked.
|
|
134
|
-
|
|
135
|
-
Neither `listChanged` nor a subscription is declared: both are a stream held open, and this endpoint
|
|
136
|
-
holds none.
|
|
137
|
-
|
|
138
|
-
## Authorization
|
|
139
|
-
|
|
140
|
-
The endpoint is a protected resource, and an application advertises it as one:
|
|
141
|
-
|
|
142
|
-
```yaml
|
|
143
|
-
exposition:
|
|
144
|
-
oauth:
|
|
145
|
-
authorize: https://app.example.com/oauth/authorize
|
|
146
|
-
resources: ['/.mcp']
|
|
147
|
-
```
|
|
148
|
-
|
|
149
|
-
Its RFC 9728 document is then read at `/.well-known/oauth-protected-resource/.mcp`, and the
|
|
150
|
-
canonical URI of the resource is `https://api.example.com/.mcp`. See [OAuth](oauth.md).
|
|
151
|
-
|
|
152
|
-
A request without a credential is `401`, carrying the challenge that names that document — which is
|
|
153
|
-
where the flow starts. A call the identity is not authorized to make is `403` with
|
|
154
|
-
`error="insufficient_scope"`. Each tool is authorized as the resource it is, against the path and
|
|
155
|
-
the verb its name states.
|
|
156
|
-
|
|
157
|
-
A route that is [`anonymous`](access.md#anonymous) is reached here whatever the client presented:
|
|
158
|
-
the rule that refuses a credentialed request is about a cacheable reply, and what a tool answers is
|
|
159
|
-
not one. So a resource that is public over HTTP is a public tool, and nothing in a manifest has to
|
|
160
|
-
say it twice.
|
|
161
|
-
|
|
162
|
-
## What refuses
|
|
163
|
-
|
|
164
|
-
| | |
|
|
165
|
-
| -------- | ------------------------------------------------------ |
|
|
166
|
-
| `-32700` | the body is not readable |
|
|
167
|
-
| `-32600` | the body is not one JSON-RPC message |
|
|
168
|
-
| `-32601` | no method of that name, at `404` |
|
|
169
|
-
| `-32602` | the arguments do not fit, or `_meta` states too little |
|
|
170
|
-
| `-32603` | anything the gateway did not mean to answer |
|
|
171
|
-
| `-32020` | a header says one thing and the body another |
|
|
172
|
-
| `-32022` | a revision neither served, naming both |
|
|
173
|
-
|
|
174
|
-
The codes MCP reserves for itself are `-32020` to `-32099`, and it has an implementation use none of
|
|
175
|
-
`-32000` to `-32019` — which is where [JSON-RPC](rpc.md#what-refuses) has this gateway's own, so none
|
|
176
|
-
of those is answered here.
|
|
177
|
-
|
|
178
|
-
## References
|
|
179
|
-
|
|
180
|
-
- [The specification](https://modelcontextprotocol.io/specification/2026-07-28)
|
|
181
|
-
- [JSON-RPC](rpc.md), where a procedure gets its name
|
|
182
|
-
- [Introspection](introspection.md), which is what a tool's schemas are
|
|
183
|
-
- [Features](../features/mcp.feature)
|
|
Binary file
|
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
# Distributed Peer Discovery
|
|
2
|
-
|
|
3
|
-
## Problem
|
|
4
|
-
|
|
5
|
-
Modulo partitioning algorithm `taks.id % replicas == index` requires
|
|
6
|
-
to know the number of task processing instances running in the cluster,
|
|
7
|
-
and the own index of the current instance.
|
|
8
|
-
|
|
9
|
-
## Forces
|
|
10
|
-
|
|
11
|
-
1. Static configuration is not an option (due to dynamic scaling / failover).
|
|
12
|
-
2. In a distributed system, there is no concept of a _global current time_.
|
|
13
|
-
|
|
14
|
-
## Solution
|
|
15
|
-
|
|
16
|
-
An algorithm that emits `(index, replicas)` once per `interval` seconds, using common Redis
|
|
17
|
-
key and atomic increment.
|
|
18
|
-
|
|
19
|
-
Define the following parameters:
|
|
20
|
-
|
|
21
|
-
- `name`: a name of the task processing (e.g. `mail-sender`)
|
|
22
|
-
- `interval`: indexing interval that is deliberately greater than the expected clock skew among
|
|
23
|
-
instances
|
|
24
|
-
|
|
25
|
-
At the start of each `interval` in [Unix epoch](https://en.wikipedia.org/wiki/Unix_time):
|
|
26
|
-
|
|
27
|
-
1. Calculate an ordinal number of the current interval: `number = ceil(now() / interval)`
|
|
28
|
-
2. Compose a `key` as `{name}:{number}`
|
|
29
|
-
3. Atomically increment a `key` in Redis ([INCR](https://redis.io/docs/latest/commands/incr/))
|
|
30
|
-
4. If `index` is defined (see 5)
|
|
31
|
-
|
|
32
|
-
- get the value of previous key `{name}:{number-1}` as `replicas`
|
|
33
|
-
- if the `replicas` is defined, emit `(index, replicas)` **algorithm result**
|
|
34
|
-
|
|
35
|
-
5. Store the response (3) in `index`.
|
|
36
|
-
|
|
37
|
-
## Safe index transition
|
|
38
|
-
|
|
39
|
-
If the `index` or `replicas` changes, the algorithm consumer must stop consuming new tasks
|
|
40
|
-
and execute _safe index transition_, to prevent task duplication or loss.
|
|
41
|
-
|
|
42
|
-
The transition can be implemented in a manner similar to the described algorithm, using a dedicated
|
|
43
|
-
`{name}:transition` key.
|
|
44
|
-
However, this process is considered outside the scope of this document.
|
|
45
|
-
|
|
46
|
-
## Extension
|
|
47
|
-
|
|
48
|
-
If the system clocks are too precisely synchronized (skew is less than a round-trip time to Redis),
|
|
49
|
-
this may result in continuous [index transitions](#safe-index-transition).
|
|
50
|
-
|
|
51
|
-
To mitigate this, the algorithm can be extended with a random delay:
|
|
52
|
-
|
|
53
|
-
1. Before starting the algorithm, define a random constant clock skew, significantly smaller than
|
|
54
|
-
`interval`: `skew = random() * (interval / 2)`
|
|
55
|
-
2. Start the algorithm at each `interval + skew`.
|
|
56
|
-
|
|
57
|
-
## Caveats
|
|
58
|
-
|
|
59
|
-
- The first result will become known between `interval` and `interval × 2` seconds.
|
|
@@ -1,71 +0,0 @@
|
|
|
1
|
-
# Note: Server Sent Events
|
|
2
|
-
|
|
3
|
-
## TL;DR
|
|
4
|
-
|
|
5
|
-
1. Doesn't exist.
|
|
6
|
-
2. Ridiculous.
|
|
7
|
-
3. Redundant.
|
|
8
|
-
|
|
9
|
-
## There is no SSE
|
|
10
|
-
|
|
11
|
-
The initial premise of SSE is to deliver real-time events specifically targeted at a particular user. It's evident that
|
|
12
|
-
to access these events, user authentication is essential, typically implemented through
|
|
13
|
-
an [HTTP Authentication framework](https://datatracker.ietf.org/doc/html/rfc2617).
|
|
14
|
-
|
|
15
|
-
However, despite this being the most straightforward
|
|
16
|
-
scenario, [it does not work this way](https://github.com/whatwg/html/issues/2177). The only viable way to use SSE is
|
|
17
|
-
to avoid the standard `EventSource` implementation.
|
|
18
|
-
|
|
19
|
-
## Peculiar event format
|
|
20
|
-
|
|
21
|
-
### SLAP
|
|
22
|
-
|
|
23
|
-
[Event stream format](https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events/Using_server-sent_events#event_stream_format)
|
|
24
|
-
defines four fields: `event`, `data`, `id`, `retry`.
|
|
25
|
-
|
|
26
|
-
In practice, code capable of producing such an object is forced to break the Single Level of Abstraction Principle. This
|
|
27
|
-
requires knowledge of both event structures and connection properties. In real-world systems, these may be handled by
|
|
28
|
-
different processes, such as an Events microservice and an API Gateway.
|
|
29
|
-
|
|
30
|
-
### Content negotiation
|
|
31
|
-
|
|
32
|
-
The `data` property is expected to be an arbitrary string, although real-world event data is often structured as an
|
|
33
|
-
object.
|
|
34
|
-
|
|
35
|
-
Furthermore, since the Event stream format defines its own content type, there is no built-in way to negotiate the
|
|
36
|
-
format of the events.
|
|
37
|
-
|
|
38
|
-
Additionally, the `data` value is limited to a single line, which hinders the use of
|
|
39
|
-
more [human-friendly formats](https://yaml.org) in a straightforward manner.
|
|
40
|
-
|
|
41
|
-
## HTTP is enough
|
|
42
|
-
|
|
43
|
-
Rather than resorting to a non-standard client and a predefined content format, a basic HTTP request can provide a
|
|
44
|
-
solution:
|
|
45
|
-
|
|
46
|
-
```http
|
|
47
|
-
GET /events/ HTTP/1.1
|
|
48
|
-
accept: application/yaml
|
|
49
|
-
```
|
|
50
|
-
|
|
51
|
-
```
|
|
52
|
-
200 OK
|
|
53
|
-
content-type: application/yaml
|
|
54
|
-
transfer-encoding: chunked
|
|
55
|
-
|
|
56
|
-
id: 1
|
|
57
|
-
event: created
|
|
58
|
-
data:
|
|
59
|
-
foo: bar
|
|
60
|
-
|
|
61
|
-
id: 2
|
|
62
|
-
event: deleted
|
|
63
|
-
data:
|
|
64
|
-
bar: baz
|
|
65
|
-
```
|
|
66
|
-
|
|
67
|
-
Server-side implementation with flow control and stream termination handling is trivial:
|
|
68
|
-
|
|
69
|
-
```javascript
|
|
70
|
-
eventStream.pipe(response)
|
|
71
|
-
```
|