@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/source/Tenant.ts
DELETED
|
@@ -1,73 +0,0 @@
|
|
|
1
|
-
import { setTimeout } from 'node:timers/promises'
|
|
2
|
-
import { Connector } from '@toa.io/core'
|
|
3
|
-
import { BRANCH_TTL } from './const.js'
|
|
4
|
-
import type { bindings } from '@toa.io/core/types'
|
|
5
|
-
import type { Label } from './discovery.js'
|
|
6
|
-
import type { Branch } from './Branch.js'
|
|
7
|
-
|
|
8
|
-
export class Tenant extends Connector {
|
|
9
|
-
private readonly broadcast: Broadcast
|
|
10
|
-
private readonly branch: Omit<Branch, 'timestamp'>
|
|
11
|
-
private started = 0
|
|
12
|
-
private stopped = false
|
|
13
|
-
|
|
14
|
-
public constructor(broadcast: Broadcast, branch: Omit<Branch, 'timestamp'>) {
|
|
15
|
-
super()
|
|
16
|
-
|
|
17
|
-
this.broadcast = broadcast
|
|
18
|
-
this.branch = branch
|
|
19
|
-
|
|
20
|
-
this.depends(broadcast)
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
public override async open(): Promise<void> {
|
|
24
|
-
this.started = Date.now()
|
|
25
|
-
|
|
26
|
-
await this.expose()
|
|
27
|
-
await this.broadcast.receive('ping', this.expose.bind(this))
|
|
28
|
-
|
|
29
|
-
void this.announce()
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
/**
|
|
33
|
-
* Announcing is stopped where the teardown begins, not in `dispose`, which a connector
|
|
34
|
-
* runs after every one of its dependencies has gone. A component on its way out that
|
|
35
|
-
* announces itself once more has its routes held open by whoever is listening, and the
|
|
36
|
-
* requests that follow reach nothing.
|
|
37
|
-
*/
|
|
38
|
-
protected override async close(): Promise<void> {
|
|
39
|
-
this.stopped = true
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
private async announce(): Promise<void> {
|
|
43
|
-
while (!this.stopped) {
|
|
44
|
-
const delay = exposeInterval(Date.now() - this.started)
|
|
45
|
-
|
|
46
|
-
await setTimeout(delay, undefined, { ref: false })
|
|
47
|
-
|
|
48
|
-
if (this.stopped) break
|
|
49
|
-
|
|
50
|
-
await this.expose()
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
private async expose(): Promise<void> {
|
|
55
|
-
// the ping subscription outlives the announcing loop, and answering one on the way out
|
|
56
|
-
// is the same announcement by another route
|
|
57
|
-
if (this.stopped) return
|
|
58
|
-
|
|
59
|
-
await this.broadcast.transmit('expose', { ...this.branch, timestamp: this.started })
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
function exposeInterval(uptime: number): number {
|
|
64
|
-
return Math.round(
|
|
65
|
-
EXPOSE_MAX - (EXPOSE_MAX - EXPOSE_MIN) * Math.exp(-uptime / EXPOSE_TAU)
|
|
66
|
-
)
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
const EXPOSE_MIN = 5_000
|
|
70
|
-
const EXPOSE_MAX = Math.round(BRANCH_TTL / 2.1)
|
|
71
|
-
const EXPOSE_TAU = 900_000
|
|
72
|
-
|
|
73
|
-
type Broadcast = bindings.Broadcast<Label>
|
package/source/const.ts
DELETED
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
export const BRANCH_TTL = 1_800_000
|
|
2
|
-
|
|
3
|
-
/** The broadcast the gateway and its tenants share. */
|
|
4
|
-
export const CHANNEL = 'exposition'
|
|
5
|
-
|
|
6
|
-
/** The replicas of the gateway decide together, whatever context they serve. */
|
|
7
|
-
export const ATOM_GROUP = 'exposition'
|
|
8
|
-
|
|
9
|
-
/**
|
|
10
|
-
* Where JSON-RPC is served, for every procedure at once. Pinned rather than configured: a
|
|
11
|
-
* path an application could choose is a path it could collide with a route of its own.
|
|
12
|
-
*/
|
|
13
|
-
export const RPC = '/.rpc'
|
|
14
|
-
|
|
15
|
-
/** Calls one request may carry where the annotation does not say. */
|
|
16
|
-
export const BATCH = 32
|
|
17
|
-
|
|
18
|
-
/**
|
|
19
|
-
* Where the Model Context Protocol is served. Pinned for the reason `/.rpc` is: a path an
|
|
20
|
-
* application could choose is a path it could collide with a route of its own.
|
|
21
|
-
*/
|
|
22
|
-
export const MCP = '/.mcp'
|
|
23
|
-
|
|
24
|
-
/**
|
|
25
|
-
* Where the resource tree and the page that reads it are served. Pinned for the reason
|
|
26
|
-
* `/.rpc` is: a path an application could choose is a path it could collide with a route of
|
|
27
|
-
* its own. Unlike those two it is not annotated — every entry it carries is what `OPTIONS`
|
|
28
|
-
* on that path already answers to the same caller, and what it adds is the enumeration.
|
|
29
|
-
*/
|
|
30
|
-
export const DISCOVERY = '/.discovery'
|
|
31
|
-
|
|
32
|
-
/** Where the gateway serves. */
|
|
33
|
-
export const PORT = 8000
|
|
34
|
-
|
|
35
|
-
/**
|
|
36
|
-
* Reserved for the readiness probe. `8001` is the Telemetry readiness probe's, and `toa export`
|
|
37
|
-
* refuses a port claimed twice — `toa mono` and a local run put every service in one process.
|
|
38
|
-
*/
|
|
39
|
-
export const PROBE = 8004
|
|
40
|
-
|
|
41
|
-
/**
|
|
42
|
-
* The initial delay of the readiness probe. The server does not sleep for it: whoever
|
|
43
|
-
* probes is the one that waits, and doing it here as well only delayed the process twice.
|
|
44
|
-
*/
|
|
45
|
-
export const DELAY = 3 // seconds
|
package/source/deployment.ts
DELETED
|
@@ -1,96 +0,0 @@
|
|
|
1
|
-
import { readFileSync } from 'node:fs'
|
|
2
|
-
import assert from 'node:assert'
|
|
3
|
-
import { type Dependency, type Service } from '@toa.io/operations'
|
|
4
|
-
import { type Annotation } from './Annotation.js'
|
|
5
|
-
import * as schemas from './schemas.js'
|
|
6
|
-
import { shortcuts } from './shortcuts.js'
|
|
7
|
-
import { components } from './Composition.js'
|
|
8
|
-
import { parse } from './RTD/syntax/index.js'
|
|
9
|
-
import { DELAY, PORT, PROBE } from './const.js'
|
|
10
|
-
|
|
11
|
-
/** Where Toa's release publishes this service's image. An application takes it
|
|
12
|
-
* instead of building one when its context says `registry.services: published`. */
|
|
13
|
-
export const image = 'ghcr.io/toa-io/extension-exposition-gateway'
|
|
14
|
-
|
|
15
|
-
export function deployment(_: unknown, annotation?: Annotation): Dependency {
|
|
16
|
-
assert.ok(annotation !== undefined, 'Exposition context annotation is required')
|
|
17
|
-
schemas.annotation.validate(annotation)
|
|
18
|
-
|
|
19
|
-
const labels = components().labels
|
|
20
|
-
|
|
21
|
-
const service: Service = {
|
|
22
|
-
group: 'exposition',
|
|
23
|
-
name: 'gateway',
|
|
24
|
-
image,
|
|
25
|
-
port: PORT,
|
|
26
|
-
version: JSON.parse(readFileSync(new URL('../package.json', import.meta.url), 'utf8'))
|
|
27
|
-
.version,
|
|
28
|
-
variables: [],
|
|
29
|
-
components: labels,
|
|
30
|
-
resources: annotation.resources,
|
|
31
|
-
ingress: { path: '/', hosts: [] },
|
|
32
|
-
probe: {
|
|
33
|
-
path: '/.ready',
|
|
34
|
-
port: PROBE,
|
|
35
|
-
delay: DELAY
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
if (annotation?.['/'] !== undefined) {
|
|
40
|
-
const tree = parse(annotation['/'], shortcuts)
|
|
41
|
-
|
|
42
|
-
service.variables!.push({
|
|
43
|
-
name: 'TOA_EXPOSITION',
|
|
44
|
-
value: JSON.stringify(tree)
|
|
45
|
-
})
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
const { debug, authorities } = annotation
|
|
49
|
-
|
|
50
|
-
service.ingress!.hosts = Object.values(authorities)
|
|
51
|
-
|
|
52
|
-
// leaving these undefined lets the context's own ingress section supply them
|
|
53
|
-
if (annotation.class !== undefined) service.ingress!.class = annotation.class
|
|
54
|
-
|
|
55
|
-
if (annotation.annotations !== undefined)
|
|
56
|
-
service.ingress!.annotations = annotation.annotations
|
|
57
|
-
|
|
58
|
-
if (annotation.service?.annotations !== undefined)
|
|
59
|
-
service.annotations = annotation.service.annotations
|
|
60
|
-
|
|
61
|
-
const properties: Properties = { authorities }
|
|
62
|
-
|
|
63
|
-
if (debug === true) properties.debug = true
|
|
64
|
-
|
|
65
|
-
if (annotation.protocol !== undefined) properties.protocol = annotation.protocol
|
|
66
|
-
|
|
67
|
-
if (annotation.ip !== undefined) properties.ip = annotation.ip
|
|
68
|
-
|
|
69
|
-
if (annotation.bouncer !== undefined) properties.bouncer = annotation.bouncer
|
|
70
|
-
|
|
71
|
-
if (annotation.oauth !== undefined) properties.oauth = annotation.oauth
|
|
72
|
-
|
|
73
|
-
if (annotation.rpc !== undefined) properties.rpc = annotation.rpc
|
|
74
|
-
|
|
75
|
-
if (annotation.mcp !== undefined) properties.mcp = annotation.mcp
|
|
76
|
-
|
|
77
|
-
service.variables!.push({
|
|
78
|
-
name: 'TOA_EXPOSITION_PROPERTIES',
|
|
79
|
-
value: JSON.stringify(properties)
|
|
80
|
-
})
|
|
81
|
-
|
|
82
|
-
// The identity composition nested in this process connects before route discovery settles,
|
|
83
|
-
// so telemetry's probe — which tracks that composition — would report ready too early.
|
|
84
|
-
// The gateway answers for itself, on the same port telemetry would have used.
|
|
85
|
-
service.variables!.push({
|
|
86
|
-
name: 'TOA_TELEMETRY_READY',
|
|
87
|
-
value: JSON.stringify(false)
|
|
88
|
-
})
|
|
89
|
-
|
|
90
|
-
return { services: [service] }
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
type Properties = Pick<
|
|
94
|
-
Annotation,
|
|
95
|
-
'authorities' | 'debug' | 'protocol' | 'bouncer' | 'ip' | 'oauth' | 'rpc' | 'mcp'
|
|
96
|
-
>
|
|
@@ -1,70 +0,0 @@
|
|
|
1
|
-
import { describe, it } from 'node:test'
|
|
2
|
-
import assert from 'node:assert/strict'
|
|
3
|
-
|
|
4
|
-
import { Anonymous } from './Anonymous.js'
|
|
5
|
-
import type { Context } from './types.js'
|
|
6
|
-
|
|
7
|
-
const context = (
|
|
8
|
-
headers: Record<string, string>,
|
|
9
|
-
flags: { procedural?: boolean; exploratory?: boolean } = {}
|
|
10
|
-
): Context =>
|
|
11
|
-
({
|
|
12
|
-
request: { headers },
|
|
13
|
-
procedural: false,
|
|
14
|
-
exploratory: false,
|
|
15
|
-
...flags
|
|
16
|
-
}) as unknown as Context
|
|
17
|
-
|
|
18
|
-
describe('anonymous', () => {
|
|
19
|
-
it('should admit a request that presents nothing', () => {
|
|
20
|
-
assert.equal(new Anonymous(true).authorize(null, context({})), true)
|
|
21
|
-
})
|
|
22
|
-
|
|
23
|
-
it('should refuse a request that presents a credential', () => {
|
|
24
|
-
// it would make the reply uncacheable, which is the whole of the rule
|
|
25
|
-
assert.equal(
|
|
26
|
-
new Anonymous(true).authorize(null, context({ authorization: 'Token x' })),
|
|
27
|
-
false
|
|
28
|
-
)
|
|
29
|
-
})
|
|
30
|
-
|
|
31
|
-
it('should admit a procedure whatever the request presented', () => {
|
|
32
|
-
// what a procedure answers is a value in an envelope, and the envelope is `no-store`
|
|
33
|
-
const procedural = context({ authorization: 'Token x' }, { procedural: true })
|
|
34
|
-
|
|
35
|
-
assert.equal(new Anonymous(true).authorize(null, procedural), true)
|
|
36
|
-
})
|
|
37
|
-
|
|
38
|
-
it('should admit a description whatever the request presented', () => {
|
|
39
|
-
// a description is not the reply a cache would hold, and varies by who asked in any case
|
|
40
|
-
const exploratory = context({ authorization: 'Token x' }, { exploratory: true })
|
|
41
|
-
|
|
42
|
-
assert.equal(new Anonymous(true).authorize(null, exploratory), true)
|
|
43
|
-
})
|
|
44
|
-
|
|
45
|
-
it('should refuse where it admits nobody', () => {
|
|
46
|
-
assert.equal(new Anonymous(false).authorize(null, context({})), false)
|
|
47
|
-
assert.equal(
|
|
48
|
-
new Anonymous(false).authorize(null, context({}, { procedural: true })),
|
|
49
|
-
false
|
|
50
|
-
)
|
|
51
|
-
assert.equal(
|
|
52
|
-
new Anonymous(false).authorize(null, context({}, { exploratory: true })),
|
|
53
|
-
false
|
|
54
|
-
)
|
|
55
|
-
})
|
|
56
|
-
|
|
57
|
-
it('should describe a method as it authorizes one', () => {
|
|
58
|
-
const directive = new Anonymous(true)
|
|
59
|
-
|
|
60
|
-
assert.equal(directive.admits(null, context({ authorization: 'Token x' })), false)
|
|
61
|
-
assert.equal(
|
|
62
|
-
directive.admits(null, context({ authorization: 'Token x' }, { procedural: true })),
|
|
63
|
-
true
|
|
64
|
-
)
|
|
65
|
-
assert.equal(
|
|
66
|
-
directive.admits(null, context({ authorization: 'Token x' }, { exploratory: true })),
|
|
67
|
-
true
|
|
68
|
-
)
|
|
69
|
-
})
|
|
70
|
-
})
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
import { type Directive, type Context } from './types.js'
|
|
2
|
-
import type { Introspection } from '../../Introspection.js'
|
|
3
|
-
|
|
4
|
-
export class Anonymous implements Directive {
|
|
5
|
-
private readonly allow: boolean
|
|
6
|
-
|
|
7
|
-
public constructor(allow: boolean) {
|
|
8
|
-
this.allow = allow
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
/**
|
|
12
|
-
* A credential refuses, because it would make the reply uncacheable — which is the whole
|
|
13
|
-
* of the rule, and none of it applies to a procedure, nor to a description. What a
|
|
14
|
-
* procedure answers is a value in an envelope, and the envelope is the one thing that is
|
|
15
|
-
* cached or not; what a description answers is what the resource is, which is not the
|
|
16
|
-
* reply a cache would hold and varies by who asked in any case.
|
|
17
|
-
*/
|
|
18
|
-
public authorize(_: any, context: Context): boolean {
|
|
19
|
-
if (context.procedural || context.exploratory) return this.allow
|
|
20
|
-
|
|
21
|
-
return 'authorization' in context.request.headers ? false : this.allow
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
public admits(_: any, context: Context): boolean {
|
|
25
|
-
return this.authorize(_, context)
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
/**
|
|
29
|
-
* That nothing guards it is something said rather than something left unsaid: it is also
|
|
30
|
-
* what refuses a caller presenting a credential, and a client with one has to know which
|
|
31
|
-
* methods not to present it to.
|
|
32
|
-
*/
|
|
33
|
-
public describe(introspection: Introspection): Introspection {
|
|
34
|
-
return this.allow ? { ...introspection, anonymous: true } : introspection
|
|
35
|
-
}
|
|
36
|
-
}
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import { type Directive, type Context } from './types.js'
|
|
2
|
-
import type { Introspection } from '../../Introspection.js'
|
|
3
|
-
|
|
4
|
-
export class Anyone implements Directive {
|
|
5
|
-
private readonly allow: boolean
|
|
6
|
-
|
|
7
|
-
public constructor(allow: boolean) {
|
|
8
|
-
this.allow = allow
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
public authorize(_: any, context: Context): boolean {
|
|
12
|
-
return context.identity !== null && this.allow
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
public admits(_: any, context: Context): boolean {
|
|
16
|
-
return this.authorize(_, context)
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
/** Whoever asks, as long as they are somebody. */
|
|
20
|
-
public describe(introspection: Introspection): Introspection {
|
|
21
|
-
return this.allow ? { ...introspection, authenticated: true } : introspection
|
|
22
|
-
}
|
|
23
|
-
}
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
import assert from 'node:assert'
|
|
2
|
-
import { newid } from '@toa.io/generic'
|
|
3
|
-
import * as http from '../../HTTP/index.js'
|
|
4
|
-
import { Incept } from './Incept.js'
|
|
5
|
-
import type { Context, Directive, Identity } from './types.js'
|
|
6
|
-
|
|
7
|
-
export class Assert implements Directive {
|
|
8
|
-
private readonly disabled: boolean
|
|
9
|
-
|
|
10
|
-
public constructor(enabled: boolean) {
|
|
11
|
-
assert.ok(
|
|
12
|
-
typeof enabled === 'boolean',
|
|
13
|
-
'`auth:assert` directive value must be a boolean'
|
|
14
|
-
)
|
|
15
|
-
|
|
16
|
-
this.disabled = !enabled
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
/** It admits nobody: it is there to require a credential, not to authorize one. */
|
|
20
|
-
public admits(): boolean {
|
|
21
|
-
return false
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
public async authorize(identity: Identity | null, context: Context): Promise<boolean> {
|
|
25
|
-
if (!this.disabled) await this.incept(context, identity)
|
|
26
|
-
|
|
27
|
-
return false
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
private async incept(context: Context, identity: Identity | null): Promise<void> {
|
|
31
|
-
if (context.request.headers.authorization === undefined) throw new http.Unauthorized()
|
|
32
|
-
|
|
33
|
-
if (identity === null) {
|
|
34
|
-
if (!Incept.acceptable(context)) throw new http.Unauthorized()
|
|
35
|
-
|
|
36
|
-
context.identity = await Incept.incept(context, newid())
|
|
37
|
-
|
|
38
|
-
context.pipelines.response.push((response) => {
|
|
39
|
-
response.status = 201
|
|
40
|
-
})
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
}
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import { it } from 'node:test'
|
|
2
|
-
import assert from 'node:assert/strict'
|
|
3
|
-
|
|
4
|
-
import { permits } from './Authorization.js'
|
|
5
|
-
|
|
6
|
-
const permissions = { '/users/me/**': ['GET'], '/notes/': ['*'] }
|
|
7
|
-
|
|
8
|
-
it('should permit a matching method and path', () => {
|
|
9
|
-
assert.equal(permits(permissions, 'GET', '/users/me/posts/'), true)
|
|
10
|
-
assert.equal(permits(permissions, 'DELETE', '/notes/'), true)
|
|
11
|
-
})
|
|
12
|
-
|
|
13
|
-
it('should refuse another method or path', () => {
|
|
14
|
-
assert.equal(permits(permissions, 'POST', '/users/me/posts/'), false)
|
|
15
|
-
assert.equal(permits(permissions, 'GET', '/admin/'), false)
|
|
16
|
-
})
|
|
17
|
-
|
|
18
|
-
it('should be matched on the routed path, not on the request URL', () => {
|
|
19
|
-
const raw = '/users/me/%2e%2e/admin/'
|
|
20
|
-
const routed = new URL(raw, 'https://example.com').pathname
|
|
21
|
-
|
|
22
|
-
assert.equal(routed, '/users/admin/')
|
|
23
|
-
assert.equal(permits(permissions, 'GET', routed), false)
|
|
24
|
-
})
|