@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/features/methods.feature
DELETED
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
Feature: Supported methods
|
|
2
|
-
|
|
3
|
-
Scenario Outline: <method> is supported
|
|
4
|
-
Given the annotation:
|
|
5
|
-
"""yaml
|
|
6
|
-
/:
|
|
7
|
-
<method>:
|
|
8
|
-
dev:stub:
|
|
9
|
-
hello: world
|
|
10
|
-
"""
|
|
11
|
-
And the `greeter` is running with the following manifest:
|
|
12
|
-
"""yaml
|
|
13
|
-
exposition:
|
|
14
|
-
/:
|
|
15
|
-
<method>:
|
|
16
|
-
dev:stub:
|
|
17
|
-
hello: world
|
|
18
|
-
"""
|
|
19
|
-
Examples:
|
|
20
|
-
| method |
|
|
21
|
-
| GET |
|
|
22
|
-
| POST |
|
|
23
|
-
| PUT |
|
|
24
|
-
| DELETE |
|
|
25
|
-
| PATCH |
|
|
26
|
-
| LOCK |
|
|
27
|
-
| UNLOCK |
|
|
28
|
-
|
|
29
|
-
Scenario: CORS allowed methods
|
|
30
|
-
Given the annotation:
|
|
31
|
-
"""yaml
|
|
32
|
-
/:
|
|
33
|
-
GET:
|
|
34
|
-
dev:stub:
|
|
35
|
-
hello: world
|
|
36
|
-
"""
|
|
37
|
-
When the following request is received:
|
|
38
|
-
"""
|
|
39
|
-
OPTIONS / HTTP/1.1
|
|
40
|
-
access-control-request-method: GET
|
|
41
|
-
host: nex.toa.io
|
|
42
|
-
origin: https://hello.world
|
|
43
|
-
"""
|
|
44
|
-
Then the following reply is sent:
|
|
45
|
-
"""
|
|
46
|
-
204 No Content
|
|
47
|
-
access-control-allow-methods: GET, POST, PUT, PATCH, DELETE, LOCK, UNLOCK, OPTIONS
|
|
48
|
-
"""
|
|
@@ -1,195 +0,0 @@
|
|
|
1
|
-
@security
|
|
2
|
-
Feature: Client registration
|
|
3
|
-
|
|
4
|
-
A client that speaks nothing else registers what it is and is given an identifier for it.
|
|
5
|
-
The identifier is a hash of the metadata, so a client that cannot remember it registered
|
|
6
|
-
here does not leave another row every time it connects.
|
|
7
|
-
|
|
8
|
-
Background:
|
|
9
|
-
Given the `identity.clients` database is empty
|
|
10
|
-
And the `identity.basic` database contains:
|
|
11
|
-
| _id | authority | username | password |
|
|
12
|
-
| efe3a65ebbee47ed95a73edd911ea328 | nex | developer | $2b$10$ZRSKkgZoGnrcTNA5w5eCcu3pxDzdTduhteVYXcp56AaNcilNkwJ.O |
|
|
13
|
-
And the annotation:
|
|
14
|
-
"""yaml
|
|
15
|
-
authorities:
|
|
16
|
-
nex: nex.toa.io
|
|
17
|
-
oauth:
|
|
18
|
-
authorize: https://app.nex.toa.io/oauth/authorize
|
|
19
|
-
registration: open
|
|
20
|
-
"""
|
|
21
|
-
|
|
22
|
-
Scenario: A client registers what it is
|
|
23
|
-
When the following request is received:
|
|
24
|
-
"""
|
|
25
|
-
POST /identity/clients/ HTTP/1.1
|
|
26
|
-
host: nex.toa.io
|
|
27
|
-
content-type: application/yaml
|
|
28
|
-
accept: application/yaml
|
|
29
|
-
|
|
30
|
-
client_name: Claude
|
|
31
|
-
redirect_uris:
|
|
32
|
-
- https://claude.ai/api/mcp/auth_callback
|
|
33
|
-
token_endpoint_auth_method: none
|
|
34
|
-
"""
|
|
35
|
-
Then the following reply is sent:
|
|
36
|
-
"""
|
|
37
|
-
201 Created
|
|
38
|
-
cache-control: no-store
|
|
39
|
-
|
|
40
|
-
client_id: ${{ client }}
|
|
41
|
-
client_name: Claude
|
|
42
|
-
redirect_uris:
|
|
43
|
-
- https://claude.ai/api/mcp/auth_callback
|
|
44
|
-
grant_types:
|
|
45
|
-
- authorization_code
|
|
46
|
-
response_types:
|
|
47
|
-
- code
|
|
48
|
-
token_endpoint_auth_method: none
|
|
49
|
-
"""
|
|
50
|
-
|
|
51
|
-
Scenario: The same client is the same client
|
|
52
|
-
When the following request is received:
|
|
53
|
-
"""
|
|
54
|
-
POST /identity/clients/ HTTP/1.1
|
|
55
|
-
host: nex.toa.io
|
|
56
|
-
content-type: application/yaml
|
|
57
|
-
accept: application/yaml
|
|
58
|
-
|
|
59
|
-
client_name: Claude
|
|
60
|
-
redirect_uris:
|
|
61
|
-
- https://claude.ai/api/mcp/auth_callback
|
|
62
|
-
- http://localhost/callback
|
|
63
|
-
"""
|
|
64
|
-
Then the following reply is sent:
|
|
65
|
-
"""
|
|
66
|
-
201 Created
|
|
67
|
-
|
|
68
|
-
client_id: ${{ first }}
|
|
69
|
-
"""
|
|
70
|
-
# the same metadata, written in another order
|
|
71
|
-
When the following request is received:
|
|
72
|
-
"""
|
|
73
|
-
POST /identity/clients/ HTTP/1.1
|
|
74
|
-
host: nex.toa.io
|
|
75
|
-
content-type: application/yaml
|
|
76
|
-
accept: application/yaml
|
|
77
|
-
|
|
78
|
-
client_name: Claude
|
|
79
|
-
redirect_uris:
|
|
80
|
-
- http://localhost/callback
|
|
81
|
-
- https://claude.ai/api/mcp/auth_callback
|
|
82
|
-
"""
|
|
83
|
-
Then the following reply is sent:
|
|
84
|
-
"""
|
|
85
|
-
201 Created
|
|
86
|
-
|
|
87
|
-
client_id: ${{ first }}
|
|
88
|
-
"""
|
|
89
|
-
|
|
90
|
-
Scenario: A redirect a code must not be sent to
|
|
91
|
-
When the following request is received:
|
|
92
|
-
"""
|
|
93
|
-
POST /identity/clients/ HTTP/1.1
|
|
94
|
-
host: nex.toa.io
|
|
95
|
-
content-type: application/yaml
|
|
96
|
-
accept: application/yaml
|
|
97
|
-
|
|
98
|
-
client_name: Insecure
|
|
99
|
-
redirect_uris:
|
|
100
|
-
- http://example.com/callback
|
|
101
|
-
"""
|
|
102
|
-
Then the following reply is sent:
|
|
103
|
-
"""
|
|
104
|
-
400 Bad Request
|
|
105
|
-
cache-control: no-store
|
|
106
|
-
|
|
107
|
-
error: invalid_redirect_uri
|
|
108
|
-
"""
|
|
109
|
-
|
|
110
|
-
Scenario: A client that would authenticate at the token endpoint
|
|
111
|
-
When the following request is received:
|
|
112
|
-
"""
|
|
113
|
-
POST /identity/clients/ HTTP/1.1
|
|
114
|
-
host: nex.toa.io
|
|
115
|
-
content-type: application/yaml
|
|
116
|
-
accept: application/yaml
|
|
117
|
-
|
|
118
|
-
client_name: Confidential
|
|
119
|
-
redirect_uris:
|
|
120
|
-
- https://claude.ai/api/mcp/auth_callback
|
|
121
|
-
token_endpoint_auth_method: client_secret_post
|
|
122
|
-
"""
|
|
123
|
-
Then the following reply is sent:
|
|
124
|
-
"""
|
|
125
|
-
400 Bad Request
|
|
126
|
-
|
|
127
|
-
error: invalid_client_metadata
|
|
128
|
-
"""
|
|
129
|
-
|
|
130
|
-
Scenario: Registration is advertised once it is opened
|
|
131
|
-
When the following request is received:
|
|
132
|
-
"""
|
|
133
|
-
GET /.well-known/oauth-authorization-server HTTP/1.1
|
|
134
|
-
host: nex.toa.io
|
|
135
|
-
accept: application/yaml
|
|
136
|
-
"""
|
|
137
|
-
Then the following reply is sent:
|
|
138
|
-
"""
|
|
139
|
-
200 OK
|
|
140
|
-
|
|
141
|
-
registration_endpoint: https://nex.toa.io/identity/clients/
|
|
142
|
-
"""
|
|
143
|
-
|
|
144
|
-
Scenario: The consent page reads who is asking
|
|
145
|
-
When the following request is received:
|
|
146
|
-
"""
|
|
147
|
-
POST /identity/clients/ HTTP/1.1
|
|
148
|
-
host: nex.toa.io
|
|
149
|
-
content-type: application/yaml
|
|
150
|
-
accept: application/yaml
|
|
151
|
-
|
|
152
|
-
client_name: Claude
|
|
153
|
-
client_uri: https://claude.ai
|
|
154
|
-
redirect_uris:
|
|
155
|
-
- https://claude.ai/api/mcp/auth_callback
|
|
156
|
-
"""
|
|
157
|
-
Then the following reply is sent:
|
|
158
|
-
"""
|
|
159
|
-
201 Created
|
|
160
|
-
|
|
161
|
-
client_id: ${{ client }}
|
|
162
|
-
"""
|
|
163
|
-
# the page is authenticated by the time it asks, so this is not anonymous
|
|
164
|
-
When the following request is received:
|
|
165
|
-
"""
|
|
166
|
-
GET /identity/clients/${{ client }}/ HTTP/1.1
|
|
167
|
-
host: nex.toa.io
|
|
168
|
-
authorization: Basic ZGV2ZWxvcGVyOnNlY3JldA==
|
|
169
|
-
accept: application/yaml
|
|
170
|
-
"""
|
|
171
|
-
Then the following reply is sent:
|
|
172
|
-
"""
|
|
173
|
-
200 OK
|
|
174
|
-
|
|
175
|
-
client_id: ${{ client }}
|
|
176
|
-
client_name: Claude
|
|
177
|
-
client_uri: https://claude.ai
|
|
178
|
-
redirect_uris:
|
|
179
|
-
- https://claude.ai/api/mcp/auth_callback
|
|
180
|
-
"""
|
|
181
|
-
|
|
182
|
-
Scenario: A client nobody registered
|
|
183
|
-
When the following request is received:
|
|
184
|
-
"""
|
|
185
|
-
GET /identity/clients/00000000000000000000000000000000/ HTTP/1.1
|
|
186
|
-
host: nex.toa.io
|
|
187
|
-
authorization: Basic ZGV2ZWxvcGVyOnNlY3JldA==
|
|
188
|
-
accept: application/yaml
|
|
189
|
-
"""
|
|
190
|
-
Then the following reply is sent:
|
|
191
|
-
"""
|
|
192
|
-
422 Unprocessable Entity
|
|
193
|
-
|
|
194
|
-
code: UNKNOWN_CLIENT
|
|
195
|
-
"""
|
|
@@ -1,164 +0,0 @@
|
|
|
1
|
-
@security
|
|
2
|
-
Feature: Authorization server discovery
|
|
3
|
-
|
|
4
|
-
What a client reads before it can authenticate. Both documents are public, are a
|
|
5
|
-
function of the annotation alone, and are answered before anything is routed.
|
|
6
|
-
|
|
7
|
-
Background:
|
|
8
|
-
Given the annotation:
|
|
9
|
-
"""yaml
|
|
10
|
-
authorities:
|
|
11
|
-
nex: nex.toa.io
|
|
12
|
-
oauth:
|
|
13
|
-
authorize: https://app.nex.toa.io/oauth/authorize
|
|
14
|
-
resources: ['/.mcp']
|
|
15
|
-
scopes: [app:notes]
|
|
16
|
-
mcp:
|
|
17
|
-
name: Teapots
|
|
18
|
-
"""
|
|
19
|
-
|
|
20
|
-
Scenario: The authorization server names its endpoints
|
|
21
|
-
When the following request is received:
|
|
22
|
-
"""
|
|
23
|
-
GET /.well-known/oauth-authorization-server HTTP/1.1
|
|
24
|
-
host: nex.toa.io
|
|
25
|
-
accept: application/yaml
|
|
26
|
-
"""
|
|
27
|
-
Then the following reply is sent:
|
|
28
|
-
"""
|
|
29
|
-
200 OK
|
|
30
|
-
|
|
31
|
-
issuer: https://nex.toa.io
|
|
32
|
-
authorization_endpoint: https://app.nex.toa.io/oauth/authorize
|
|
33
|
-
token_endpoint: https://nex.toa.io/identity/grants/
|
|
34
|
-
response_types_supported:
|
|
35
|
-
- code
|
|
36
|
-
grant_types_supported:
|
|
37
|
-
- authorization_code
|
|
38
|
-
code_challenge_methods_supported:
|
|
39
|
-
- S256
|
|
40
|
-
token_endpoint_auth_methods_supported:
|
|
41
|
-
- none
|
|
42
|
-
client_id_metadata_document_supported: true
|
|
43
|
-
authorization_response_iss_parameter_supported: true
|
|
44
|
-
scopes_supported:
|
|
45
|
-
- app:notes
|
|
46
|
-
"""
|
|
47
|
-
|
|
48
|
-
Scenario: Registration is not advertised unless it is opened
|
|
49
|
-
When the following request is received:
|
|
50
|
-
"""
|
|
51
|
-
GET /.well-known/oauth-authorization-server HTTP/1.1
|
|
52
|
-
host: nex.toa.io
|
|
53
|
-
accept: application/yaml
|
|
54
|
-
"""
|
|
55
|
-
Then the reply does not contain:
|
|
56
|
-
"""
|
|
57
|
-
registration_endpoint
|
|
58
|
-
"""
|
|
59
|
-
|
|
60
|
-
Scenario: The protected resource is named by the path it is reached at
|
|
61
|
-
When the following request is received:
|
|
62
|
-
"""
|
|
63
|
-
GET /.well-known/oauth-protected-resource/.mcp HTTP/1.1
|
|
64
|
-
host: nex.toa.io
|
|
65
|
-
accept: application/yaml
|
|
66
|
-
"""
|
|
67
|
-
Then the following reply is sent:
|
|
68
|
-
"""
|
|
69
|
-
200 OK
|
|
70
|
-
|
|
71
|
-
resource: https://nex.toa.io/.mcp
|
|
72
|
-
authorization_servers:
|
|
73
|
-
- https://nex.toa.io
|
|
74
|
-
bearer_methods_supported:
|
|
75
|
-
- header
|
|
76
|
-
scopes_supported:
|
|
77
|
-
- app:notes
|
|
78
|
-
"""
|
|
79
|
-
|
|
80
|
-
Scenario: The origin has a document of its own
|
|
81
|
-
When the following request is received:
|
|
82
|
-
"""
|
|
83
|
-
GET /.well-known/oauth-protected-resource HTTP/1.1
|
|
84
|
-
host: nex.toa.io
|
|
85
|
-
accept: application/yaml
|
|
86
|
-
"""
|
|
87
|
-
Then the following reply is sent:
|
|
88
|
-
"""
|
|
89
|
-
200 OK
|
|
90
|
-
|
|
91
|
-
resource: https://nex.toa.io
|
|
92
|
-
authorization_servers:
|
|
93
|
-
- https://nex.toa.io
|
|
94
|
-
bearer_methods_supported:
|
|
95
|
-
- header
|
|
96
|
-
scopes_supported:
|
|
97
|
-
- app:notes
|
|
98
|
-
"""
|
|
99
|
-
|
|
100
|
-
Scenario: A client holding a stale token still reads discovery
|
|
101
|
-
When the following request is received:
|
|
102
|
-
"""
|
|
103
|
-
GET /.well-known/oauth-authorization-server HTTP/1.1
|
|
104
|
-
host: nex.toa.io
|
|
105
|
-
authorization: Bearer expired.and.useless
|
|
106
|
-
accept: application/yaml
|
|
107
|
-
"""
|
|
108
|
-
Then the following reply is sent:
|
|
109
|
-
"""
|
|
110
|
-
200 OK
|
|
111
|
-
|
|
112
|
-
issuer: https://nex.toa.io
|
|
113
|
-
"""
|
|
114
|
-
|
|
115
|
-
Scenario: The challenge names the resource the request was refused at
|
|
116
|
-
When the following request is received:
|
|
117
|
-
"""
|
|
118
|
-
POST /.mcp HTTP/1.1
|
|
119
|
-
host: nex.toa.io
|
|
120
|
-
accept: text/plain
|
|
121
|
-
content-type: application/json
|
|
122
|
-
|
|
123
|
-
{"jsonrpc": "2.0", "id": 1, "method": "tools/list", "params": {}}
|
|
124
|
-
"""
|
|
125
|
-
Then the following reply is sent:
|
|
126
|
-
"""
|
|
127
|
-
401 Unauthorized
|
|
128
|
-
www-authenticate: Bearer resource_metadata="https://nex.toa.io/.well-known/oauth-protected-resource/.mcp", scope="app:notes"
|
|
129
|
-
"""
|
|
130
|
-
|
|
131
|
-
Scenario: A host named after a property a plain object answers on its own
|
|
132
|
-
When the following request is received:
|
|
133
|
-
"""
|
|
134
|
-
GET /.well-known/oauth-authorization-server HTTP/1.1
|
|
135
|
-
host: constructor
|
|
136
|
-
accept: application/yaml
|
|
137
|
-
"""
|
|
138
|
-
Then the following reply is sent:
|
|
139
|
-
"""
|
|
140
|
-
404 Not Found
|
|
141
|
-
"""
|
|
142
|
-
|
|
143
|
-
Scenario: An authorization server nobody annotated is not discovered
|
|
144
|
-
Given the annotation:
|
|
145
|
-
"""yaml
|
|
146
|
-
authorities:
|
|
147
|
-
nex: nex.toa.io
|
|
148
|
-
/:
|
|
149
|
-
io:output: true
|
|
150
|
-
/hello/:
|
|
151
|
-
anonymous: true
|
|
152
|
-
GET:
|
|
153
|
-
dev:stub: Hello
|
|
154
|
-
"""
|
|
155
|
-
When the following request is received:
|
|
156
|
-
"""
|
|
157
|
-
GET /.well-known/oauth-authorization-server HTTP/1.1
|
|
158
|
-
host: nex.toa.io
|
|
159
|
-
accept: application/yaml
|
|
160
|
-
"""
|
|
161
|
-
Then the following reply is sent:
|
|
162
|
-
"""
|
|
163
|
-
404 Not Found
|
|
164
|
-
"""
|
|
@@ -1,301 +0,0 @@
|
|
|
1
|
-
@security
|
|
2
|
-
Feature: Authorization code flow
|
|
3
|
-
|
|
4
|
-
A client is refused, finds the authorization server, registers, is consented to by a user,
|
|
5
|
-
and exchanges the code it was given for a token it can come back with. The consent page is
|
|
6
|
-
the application's own — the two calls in the background are what it would make.
|
|
7
|
-
|
|
8
|
-
Background:
|
|
9
|
-
Given the `identity.clients` database is empty
|
|
10
|
-
And the `identity.grants` database is empty
|
|
11
|
-
And the `identity.basic` database contains:
|
|
12
|
-
| _id | authority | username | password |
|
|
13
|
-
| efe3a65ebbee47ed95a73edd911ea328 | nex | developer | $2b$10$ZRSKkgZoGnrcTNA5w5eCcu3pxDzdTduhteVYXcp56AaNcilNkwJ.O |
|
|
14
|
-
And the annotation:
|
|
15
|
-
"""yaml
|
|
16
|
-
authorities:
|
|
17
|
-
nex: nex.toa.io
|
|
18
|
-
oauth:
|
|
19
|
-
authorize: https://app.nex.toa.io/oauth/authorize
|
|
20
|
-
resources: ['/.mcp']
|
|
21
|
-
registration: open
|
|
22
|
-
mcp:
|
|
23
|
-
name: Teapots
|
|
24
|
-
/:
|
|
25
|
-
io:output: true
|
|
26
|
-
/pots:
|
|
27
|
-
anyone: true
|
|
28
|
-
GET:
|
|
29
|
-
mcp:tool: true
|
|
30
|
-
help:method:
|
|
31
|
-
description: Every pot there is.
|
|
32
|
-
dev:stub: Kettles and teapots.
|
|
33
|
-
"""
|
|
34
|
-
When the following request is received:
|
|
35
|
-
"""
|
|
36
|
-
POST /identity/clients/ HTTP/1.1
|
|
37
|
-
host: nex.toa.io
|
|
38
|
-
content-type: application/yaml
|
|
39
|
-
accept: application/yaml
|
|
40
|
-
|
|
41
|
-
client_name: Claude
|
|
42
|
-
redirect_uris:
|
|
43
|
-
- https://claude.ai/api/mcp/auth_callback
|
|
44
|
-
"""
|
|
45
|
-
Then the following reply is sent:
|
|
46
|
-
"""
|
|
47
|
-
201 Created
|
|
48
|
-
|
|
49
|
-
client_id: ${{ client }}
|
|
50
|
-
"""
|
|
51
|
-
When the following request is received:
|
|
52
|
-
"""
|
|
53
|
-
POST /identity/grants/efe3a65ebbee47ed95a73edd911ea328/ HTTP/1.1
|
|
54
|
-
host: nex.toa.io
|
|
55
|
-
authorization: Basic ZGV2ZWxvcGVyOnNlY3JldA==
|
|
56
|
-
content-type: application/yaml
|
|
57
|
-
accept: application/yaml
|
|
58
|
-
|
|
59
|
-
client: ${{ client }}
|
|
60
|
-
redirect: https://claude.ai/api/mcp/auth_callback
|
|
61
|
-
challenge: E9Melhoa2OwvFrEMTJguCHaoeK1t8URWbuGJSstw-cM
|
|
62
|
-
method: S256
|
|
63
|
-
"""
|
|
64
|
-
Then the following reply is sent:
|
|
65
|
-
"""
|
|
66
|
-
201 Created
|
|
67
|
-
cache-control: no-store
|
|
68
|
-
|
|
69
|
-
code: ${{ code }}
|
|
70
|
-
expires_in: 60
|
|
71
|
-
"""
|
|
72
|
-
|
|
73
|
-
Scenario: A client comes back with the token it was given
|
|
74
|
-
# nothing yet, and the client is told where to get one
|
|
75
|
-
When the following request is received:
|
|
76
|
-
"""
|
|
77
|
-
POST /.mcp HTTP/1.1
|
|
78
|
-
host: nex.toa.io
|
|
79
|
-
accept: application/yaml
|
|
80
|
-
content-type: application/json
|
|
81
|
-
|
|
82
|
-
{"jsonrpc": "2.0", "id": 1, "method": "tools/list", "params": {}}
|
|
83
|
-
"""
|
|
84
|
-
Then the following reply is sent:
|
|
85
|
-
"""
|
|
86
|
-
401 Unauthorized
|
|
87
|
-
www-authenticate: Bearer resource_metadata="https://nex.toa.io/.well-known/oauth-protected-resource/.mcp"
|
|
88
|
-
"""
|
|
89
|
-
When the following request is received:
|
|
90
|
-
"""
|
|
91
|
-
POST /identity/grants/ HTTP/1.1
|
|
92
|
-
host: nex.toa.io
|
|
93
|
-
content-type: application/x-www-form-urlencoded
|
|
94
|
-
accept: application/yaml
|
|
95
|
-
|
|
96
|
-
grant_type=authorization_code&code=${{ code }}&code_verifier=dBjftJeZ4CVP-mB92K27uhbUJU1p1r_wW1gFWFOEjXk&redirect_uri=https%3A%2F%2Fclaude.ai%2Fapi%2Fmcp%2Fauth_callback&client_id=${{ client }}
|
|
97
|
-
"""
|
|
98
|
-
Then the following reply is sent:
|
|
99
|
-
"""
|
|
100
|
-
200 OK
|
|
101
|
-
cache-control: no-store
|
|
102
|
-
|
|
103
|
-
access_token: ${{ access_token }}
|
|
104
|
-
token_type: Bearer
|
|
105
|
-
"""
|
|
106
|
-
When the following request is received:
|
|
107
|
-
"""
|
|
108
|
-
POST /.mcp HTTP/1.1
|
|
109
|
-
host: nex.toa.io
|
|
110
|
-
authorization: Bearer ${{ access_token }}
|
|
111
|
-
accept: application/yaml
|
|
112
|
-
content-type: application/json
|
|
113
|
-
|
|
114
|
-
{"jsonrpc": "2.0", "id": 1, "method": "tools/list", "params": {}}
|
|
115
|
-
"""
|
|
116
|
-
Then the following reply is sent:
|
|
117
|
-
"""
|
|
118
|
-
200 OK
|
|
119
|
-
|
|
120
|
-
jsonrpc: '2.0'
|
|
121
|
-
id: 1
|
|
122
|
-
result:
|
|
123
|
-
tools:
|
|
124
|
-
- name: pots.GET
|
|
125
|
-
"""
|
|
126
|
-
|
|
127
|
-
Scenario: A code is spent once
|
|
128
|
-
When the following request is received:
|
|
129
|
-
"""
|
|
130
|
-
POST /identity/grants/ HTTP/1.1
|
|
131
|
-
host: nex.toa.io
|
|
132
|
-
content-type: application/x-www-form-urlencoded
|
|
133
|
-
accept: application/yaml
|
|
134
|
-
|
|
135
|
-
grant_type=authorization_code&code=${{ code }}&code_verifier=dBjftJeZ4CVP-mB92K27uhbUJU1p1r_wW1gFWFOEjXk
|
|
136
|
-
"""
|
|
137
|
-
Then the following reply is sent:
|
|
138
|
-
"""
|
|
139
|
-
200 OK
|
|
140
|
-
"""
|
|
141
|
-
When the following request is received:
|
|
142
|
-
"""
|
|
143
|
-
POST /identity/grants/ HTTP/1.1
|
|
144
|
-
host: nex.toa.io
|
|
145
|
-
content-type: application/x-www-form-urlencoded
|
|
146
|
-
accept: application/yaml
|
|
147
|
-
|
|
148
|
-
grant_type=authorization_code&code=${{ code }}&code_verifier=dBjftJeZ4CVP-mB92K27uhbUJU1p1r_wW1gFWFOEjXk
|
|
149
|
-
"""
|
|
150
|
-
Then the following reply is sent:
|
|
151
|
-
"""
|
|
152
|
-
400 Bad Request
|
|
153
|
-
|
|
154
|
-
error: invalid_grant
|
|
155
|
-
"""
|
|
156
|
-
|
|
157
|
-
Scenario: A verifier that did not make that challenge
|
|
158
|
-
When the following request is received:
|
|
159
|
-
"""
|
|
160
|
-
POST /identity/grants/ HTTP/1.1
|
|
161
|
-
host: nex.toa.io
|
|
162
|
-
content-type: application/x-www-form-urlencoded
|
|
163
|
-
accept: application/yaml
|
|
164
|
-
|
|
165
|
-
grant_type=authorization_code&code=${{ code }}&code_verifier=this-is-not-the-verifier-that-made-that-challenge
|
|
166
|
-
"""
|
|
167
|
-
Then the following reply is sent:
|
|
168
|
-
"""
|
|
169
|
-
400 Bad Request
|
|
170
|
-
|
|
171
|
-
error: invalid_grant
|
|
172
|
-
"""
|
|
173
|
-
# the code was spent trying, so guessing at it buys nothing
|
|
174
|
-
When the following request is received:
|
|
175
|
-
"""
|
|
176
|
-
POST /identity/grants/ HTTP/1.1
|
|
177
|
-
host: nex.toa.io
|
|
178
|
-
content-type: application/x-www-form-urlencoded
|
|
179
|
-
accept: application/yaml
|
|
180
|
-
|
|
181
|
-
grant_type=authorization_code&code=${{ code }}&code_verifier=dBjftJeZ4CVP-mB92K27uhbUJU1p1r_wW1gFWFOEjXk
|
|
182
|
-
"""
|
|
183
|
-
Then the following reply is sent:
|
|
184
|
-
"""
|
|
185
|
-
400 Bad Request
|
|
186
|
-
|
|
187
|
-
error: invalid_grant
|
|
188
|
-
"""
|
|
189
|
-
|
|
190
|
-
Scenario: A redirect swapped between authorizing and exchanging
|
|
191
|
-
When the following request is received:
|
|
192
|
-
"""
|
|
193
|
-
POST /identity/grants/ HTTP/1.1
|
|
194
|
-
host: nex.toa.io
|
|
195
|
-
content-type: application/x-www-form-urlencoded
|
|
196
|
-
accept: application/yaml
|
|
197
|
-
|
|
198
|
-
grant_type=authorization_code&code=${{ code }}&code_verifier=dBjftJeZ4CVP-mB92K27uhbUJU1p1r_wW1gFWFOEjXk&redirect_uri=https%3A%2F%2Fevil.example%2Fcallback
|
|
199
|
-
"""
|
|
200
|
-
Then the following reply is sent:
|
|
201
|
-
"""
|
|
202
|
-
400 Bad Request
|
|
203
|
-
|
|
204
|
-
error: invalid_grant
|
|
205
|
-
"""
|
|
206
|
-
|
|
207
|
-
Scenario: A grant nobody may be sent a code for
|
|
208
|
-
When the following request is received:
|
|
209
|
-
"""
|
|
210
|
-
POST /identity/grants/efe3a65ebbee47ed95a73edd911ea328/ HTTP/1.1
|
|
211
|
-
host: nex.toa.io
|
|
212
|
-
authorization: Basic ZGV2ZWxvcGVyOnNlY3JldA==
|
|
213
|
-
content-type: application/yaml
|
|
214
|
-
accept: application/yaml
|
|
215
|
-
|
|
216
|
-
client: ${{ client }}
|
|
217
|
-
redirect: https://evil.example/callback
|
|
218
|
-
challenge: E9Melhoa2OwvFrEMTJguCHaoeK1t8URWbuGJSstw-cM
|
|
219
|
-
method: S256
|
|
220
|
-
"""
|
|
221
|
-
Then the following reply is sent:
|
|
222
|
-
"""
|
|
223
|
-
400 Bad Request
|
|
224
|
-
|
|
225
|
-
error: invalid_request
|
|
226
|
-
"""
|
|
227
|
-
|
|
228
|
-
Scenario: A challenge method that proves nothing
|
|
229
|
-
When the following request is received:
|
|
230
|
-
"""
|
|
231
|
-
POST /identity/grants/efe3a65ebbee47ed95a73edd911ea328/ HTTP/1.1
|
|
232
|
-
host: nex.toa.io
|
|
233
|
-
authorization: Basic ZGV2ZWxvcGVyOnNlY3JldA==
|
|
234
|
-
content-type: application/yaml
|
|
235
|
-
accept: application/yaml
|
|
236
|
-
|
|
237
|
-
client: ${{ client }}
|
|
238
|
-
redirect: https://claude.ai/api/mcp/auth_callback
|
|
239
|
-
challenge: E9Melhoa2OwvFrEMTJguCHaoeK1t8URWbuGJSstw-cM
|
|
240
|
-
method: plain
|
|
241
|
-
"""
|
|
242
|
-
Then the following reply is sent:
|
|
243
|
-
"""
|
|
244
|
-
400 Bad Request
|
|
245
|
-
|
|
246
|
-
error: invalid_request
|
|
247
|
-
"""
|
|
248
|
-
|
|
249
|
-
Scenario: A grant only its own identity may see
|
|
250
|
-
When the following request is received:
|
|
251
|
-
"""
|
|
252
|
-
GET /identity/grants/00000000000000000000000000000000/ HTTP/1.1
|
|
253
|
-
host: nex.toa.io
|
|
254
|
-
authorization: Basic ZGV2ZWxvcGVyOnNlY3JldA==
|
|
255
|
-
accept: application/yaml
|
|
256
|
-
"""
|
|
257
|
-
Then the following reply is sent:
|
|
258
|
-
"""
|
|
259
|
-
403 Forbidden
|
|
260
|
-
"""
|
|
261
|
-
|
|
262
|
-
Scenario: Taking back what was allowed
|
|
263
|
-
When the following request is received:
|
|
264
|
-
"""
|
|
265
|
-
POST /identity/grants/ HTTP/1.1
|
|
266
|
-
host: nex.toa.io
|
|
267
|
-
content-type: application/x-www-form-urlencoded
|
|
268
|
-
accept: application/yaml
|
|
269
|
-
|
|
270
|
-
grant_type=authorization_code&code=${{ code }}&code_verifier=dBjftJeZ4CVP-mB92K27uhbUJU1p1r_wW1gFWFOEjXk
|
|
271
|
-
"""
|
|
272
|
-
Then the following reply is sent:
|
|
273
|
-
"""
|
|
274
|
-
200 OK
|
|
275
|
-
|
|
276
|
-
access_token: ${{ access_token }}
|
|
277
|
-
"""
|
|
278
|
-
When the following request is received:
|
|
279
|
-
"""
|
|
280
|
-
GET /identity/grants/efe3a65ebbee47ed95a73edd911ea328/ HTTP/1.1
|
|
281
|
-
host: nex.toa.io
|
|
282
|
-
authorization: Basic ZGV2ZWxvcGVyOnNlY3JldA==
|
|
283
|
-
accept: application/yaml
|
|
284
|
-
"""
|
|
285
|
-
Then the following reply is sent:
|
|
286
|
-
"""
|
|
287
|
-
200 OK
|
|
288
|
-
|
|
289
|
-
- id: ${{ grant }}
|
|
290
|
-
client: ${{ client }}
|
|
291
|
-
"""
|
|
292
|
-
When the following request is received:
|
|
293
|
-
"""
|
|
294
|
-
DELETE /identity/grants/efe3a65ebbee47ed95a73edd911ea328/${{ grant }}/ HTTP/1.1
|
|
295
|
-
host: nex.toa.io
|
|
296
|
-
authorization: Basic ZGV2ZWxvcGVyOnNlY3JldA==
|
|
297
|
-
"""
|
|
298
|
-
Then the following reply is sent:
|
|
299
|
-
"""
|
|
300
|
-
204 No Content
|
|
301
|
-
"""
|