@toa.io/extensions.exposition 1.0.0-alpha.292 → 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 +24 -13
- package/transpiled/Endpoint.js +3 -0
- package/transpiled/Endpoint.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/schema.js +2 -2
- package/transpiled/Query.d.ts +2 -12
- package/transpiled/Query.js +2 -12
- package/transpiled/Query.js.map +1 -1
- package/transpiled/RTD/Endpoint.d.ts +2 -3
- 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/{aLpTDmOc.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 -42
- 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 -239
- 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/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 -435
- 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 -1
- 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/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 -10
- package/source/io.ts +0 -4
- package/source/octets.d.ts +0 -17
- package/source/root.ts +0 -59
- package/source/service.ts +0 -95
- package/source/userland.ts +0 -47
- 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/BaWe3aOV.js +0 -1
- package/ui/dist/_app/immutable/chunks/DjIYL2zC.js +0 -3
- package/ui/dist/_app/immutable/chunks/GZTfV0ks.js +0 -6
- package/ui/dist/_app/immutable/entry/app.D5v4JoUx.js +0 -2
- package/ui/dist/_app/immutable/entry/start.CWxFoIyZ.js +0 -1
- package/ui/dist/_app/immutable/nodes/0.DIh5T_5-.js +0 -1
- package/ui/dist/_app/immutable/nodes/1.CY-bFzHC.js +0 -1
- package/ui/dist/_app/immutable/nodes/2.6Ubd1ItY.js +0 -14
|
@@ -1,81 +0,0 @@
|
|
|
1
|
-
import { Stream } from 'node:stream'
|
|
2
|
-
import { console } from 'openspan'
|
|
3
|
-
import * as schemas from './schemas.js'
|
|
4
|
-
import type { Message } from './Message.js'
|
|
5
|
-
import type { Directive } from './Directive.js'
|
|
6
|
-
import type { Input as Context } from '../../io.js'
|
|
7
|
-
import type { OutgoingMessage } from '../../HTTP/index.js'
|
|
8
|
-
|
|
9
|
-
export class Output implements Directive {
|
|
10
|
-
/** whether the reply passes whole, which is when the schema is the operation's own */
|
|
11
|
-
public readonly disabled: boolean = false
|
|
12
|
-
|
|
13
|
-
/** what a reply may carry, which is therefore what the output schema states */
|
|
14
|
-
public readonly allowed: Set<string>
|
|
15
|
-
private readonly omitted: boolean = true
|
|
16
|
-
private readonly permissions: string[] = []
|
|
17
|
-
|
|
18
|
-
public constructor(permissions: Permissions) {
|
|
19
|
-
if (typeof permissions === 'boolean')
|
|
20
|
-
if (permissions) this.disabled = true
|
|
21
|
-
else this.omitted = false
|
|
22
|
-
else this.permissions = permissions
|
|
23
|
-
|
|
24
|
-
this.allowed = new Set(this.permissions)
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
public static validate(permissions: unknown): asserts permissions is Permissions {
|
|
28
|
-
schemas.output.validate(permissions, "Incorrect 'io:output' format")
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
public precall(context: Context): void {
|
|
32
|
-
context.pipelines.response.push(this.restriction(context))
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
private restriction(context: Context) {
|
|
36
|
-
return (message: OutgoingMessage): void => {
|
|
37
|
-
// what the gateway built is its own — a code and a message — and a restriction has
|
|
38
|
-
// nothing to say about it; everything else is a reply the operation returned, and is
|
|
39
|
-
// restricted whatever status it carries
|
|
40
|
-
const error = message.authentic === true
|
|
41
|
-
const stream = message.body instanceof Stream
|
|
42
|
-
const none = message.body === undefined || message.body === null
|
|
43
|
-
|
|
44
|
-
if (this.disabled || error || stream || none) return
|
|
45
|
-
|
|
46
|
-
if (typeof message.body !== 'object' || this.permissions.length === 0) {
|
|
47
|
-
if (this.omitted)
|
|
48
|
-
console.warn(
|
|
49
|
-
"Permissions for 'io:output' are not specified properly, response omitted",
|
|
50
|
-
{ path: context.url.pathname }
|
|
51
|
-
)
|
|
52
|
-
|
|
53
|
-
delete message.body
|
|
54
|
-
|
|
55
|
-
return
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
schemas.message.validate<Message>(
|
|
59
|
-
message.body,
|
|
60
|
-
"'io:output' expects response to be an object or array of objects"
|
|
61
|
-
)
|
|
62
|
-
|
|
63
|
-
if (Array.isArray(message.body))
|
|
64
|
-
message.body = message.body.map((entity) => this.fit(entity as Message))
|
|
65
|
-
else message.body = this.fit(message.body)
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
/** Runs per entity of a collection, hence the set and the absence of intermediates. */
|
|
70
|
-
private fit(message: Message): Message {
|
|
71
|
-
const output: Message = {}
|
|
72
|
-
|
|
73
|
-
// the keys of the entity, so that the response keeps the order it was built in
|
|
74
|
-
for (const key of Object.keys(message))
|
|
75
|
-
if (this.allowed.has(key)) output[key] = message[key]
|
|
76
|
-
|
|
77
|
-
return output
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
export type Permissions = string[] | boolean
|
|
@@ -1,88 +0,0 @@
|
|
|
1
|
-
import { it } from 'node:test'
|
|
2
|
-
import assert from 'node:assert/strict'
|
|
3
|
-
|
|
4
|
-
import { Status } from './Status.js'
|
|
5
|
-
import { Output } from './Output.js'
|
|
6
|
-
import type { Input as Context } from '../../io.js'
|
|
7
|
-
import type { OutgoingMessage } from '../../HTTP/index.js'
|
|
8
|
-
|
|
9
|
-
const status = new Status('status')
|
|
10
|
-
|
|
11
|
-
function context(): Context {
|
|
12
|
-
return {
|
|
13
|
-
pipelines: { body: [], response: [] },
|
|
14
|
-
url: { pathname: '/' }
|
|
15
|
-
} as unknown as Context
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
it('should take the status from the property and remove it', () => {
|
|
19
|
-
const response: OutgoingMessage = { body: { status: 400, error: 'invalid_request' } }
|
|
20
|
-
|
|
21
|
-
status.settle(context(), response)
|
|
22
|
-
|
|
23
|
-
assert.equal(response.status, 400)
|
|
24
|
-
assert.deepEqual(response.body, { error: 'invalid_request' })
|
|
25
|
-
})
|
|
26
|
-
|
|
27
|
-
it('should leave a reply that states no status alone', () => {
|
|
28
|
-
const response: OutgoingMessage = { body: { id: 'x' } }
|
|
29
|
-
|
|
30
|
-
status.settle(context(), response)
|
|
31
|
-
|
|
32
|
-
assert.equal(response.status, undefined)
|
|
33
|
-
assert.deepEqual(response.body, { id: 'x' })
|
|
34
|
-
})
|
|
35
|
-
|
|
36
|
-
it('should refuse a status that is not one', () => {
|
|
37
|
-
for (const value of ['400', null, {}, true])
|
|
38
|
-
assert.throws(() => {
|
|
39
|
-
status.settle(context(), { body: { status: value } } as OutgoingMessage)
|
|
40
|
-
}, /`io:status` expects 'status' to be a number/)
|
|
41
|
-
})
|
|
42
|
-
|
|
43
|
-
it('should refuse a declaration that is not a property name', () => {
|
|
44
|
-
for (const value of [1, null, {}, ['status']])
|
|
45
|
-
assert.throws(() => Status.validate(value), /`io:status` must be a string/)
|
|
46
|
-
})
|
|
47
|
-
|
|
48
|
-
it('should have a reply it named the status of restricted, whatever that status is', () => {
|
|
49
|
-
for (const stated of [200, 400]) {
|
|
50
|
-
const ctx = context()
|
|
51
|
-
const output = new Output(['code', 'error'])
|
|
52
|
-
|
|
53
|
-
output.precall(ctx, [])
|
|
54
|
-
|
|
55
|
-
const response: OutgoingMessage = {
|
|
56
|
-
body: { status: stated, code: 'SplxlO', error: 'invalid_grant', secret: 'x' }
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
status.settle(ctx, response)
|
|
60
|
-
|
|
61
|
-
for (const transform of ctx.pipelines.response) transform(response)
|
|
62
|
-
|
|
63
|
-
assert.equal(response.status, stated)
|
|
64
|
-
assert.deepEqual(response.body, { code: 'SplxlO', error: 'invalid_grant' })
|
|
65
|
-
}
|
|
66
|
-
})
|
|
67
|
-
|
|
68
|
-
it('should leave a failure the gateway built alone, on such a route too', () => {
|
|
69
|
-
const ctx = context()
|
|
70
|
-
const output = new Output(['code'])
|
|
71
|
-
|
|
72
|
-
output.precall(ctx, [])
|
|
73
|
-
|
|
74
|
-
// what `Server.fail` builds out of an exception, on a route that also declares `io:status`
|
|
75
|
-
const response: OutgoingMessage = {
|
|
76
|
-
status: 422,
|
|
77
|
-
authentic: true,
|
|
78
|
-
body: { code: 'NOT_FOUND', message: 'nope' }
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
for (const transform of ctx.pipelines.response) transform(response)
|
|
82
|
-
|
|
83
|
-
assert.deepEqual(
|
|
84
|
-
response.body,
|
|
85
|
-
{ code: 'NOT_FOUND', message: 'nope' },
|
|
86
|
-
'a code and a message are not what a restriction has anything to say about'
|
|
87
|
-
)
|
|
88
|
-
})
|
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
import assert from 'node:assert'
|
|
2
|
-
import type { Directive } from './Directive.js'
|
|
3
|
-
import type * as http from '../../HTTP/index.js'
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* The status of the reply, taken from a property of what the operation returned and removed
|
|
7
|
-
* from it — an outcome the operation knows and the transport does not, like a protocol that
|
|
8
|
-
* states its error as a body rather than as a status of its own.
|
|
9
|
-
*
|
|
10
|
-
* Settled rather than transformed, so the status is set before anything reads it. A reply of
|
|
11
|
-
* 300 or above is left as the operation built it, which `io:output` does not restrict: a
|
|
12
|
-
* failure and a success are different shapes, and one list of permitted properties does not
|
|
13
|
-
* describe both.
|
|
14
|
-
*/
|
|
15
|
-
export class Status implements Directive {
|
|
16
|
-
private readonly property: string
|
|
17
|
-
|
|
18
|
-
public constructor(property: unknown) {
|
|
19
|
-
this.property = property as string
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
public static validate(value: unknown): asserts value is string {
|
|
23
|
-
assert.ok(typeof value === 'string', '`io:status` must be a string')
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
public precall(): void {
|
|
27
|
-
// nothing to do until the operation has answered
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
public settle(_: unknown, response: http.OutgoingMessage): void {
|
|
31
|
-
const body: unknown = response.body
|
|
32
|
-
|
|
33
|
-
if (body === null || typeof body !== 'object' || !(this.property in body)) return
|
|
34
|
-
|
|
35
|
-
const value: unknown = (body as Record<string, unknown>)[this.property]
|
|
36
|
-
|
|
37
|
-
assert.ok(
|
|
38
|
-
typeof value === 'number',
|
|
39
|
-
`\`io:status\` expects '${this.property}' to be a number`
|
|
40
|
-
)
|
|
41
|
-
|
|
42
|
-
response.status = value
|
|
43
|
-
|
|
44
|
-
// eslint-disable-next-line @typescript-eslint/no-dynamic-delete
|
|
45
|
-
delete (body as Record<string, unknown>)[this.property]
|
|
46
|
-
}
|
|
47
|
-
}
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
import { TooManyRequests } from '../../HTTP/index.js'
|
|
2
|
-
import * as schemas from './schemas.js'
|
|
3
|
-
import { parse, Quotas, type Declaration, type Sync } from './lib/throttle/index.js'
|
|
4
|
-
import type * as http from '../../HTTP/index.js'
|
|
5
|
-
import type { Parameter } from '../../RTD/index.js'
|
|
6
|
-
import type { Directive } from './Directive.js'
|
|
7
|
-
|
|
8
|
-
export class Throttle implements Directive {
|
|
9
|
-
private readonly quotas: Quotas
|
|
10
|
-
|
|
11
|
-
public constructor(declaration: Declaration, sync: Sync, route: string) {
|
|
12
|
-
this.quotas = Quotas.create(parse(declaration), route)
|
|
13
|
-
|
|
14
|
-
sync.register(this.quotas)
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
public static validate(declaration: unknown): asserts declaration is Declaration {
|
|
18
|
-
schemas.throttle.validate(declaration, "Incorrect 'io:throttle' format")
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
public precall(context: http.Context, parameters: Parameter[]): void {
|
|
22
|
-
const retry = this.quotas.check(context, parameters)
|
|
23
|
-
|
|
24
|
-
if (retry > 0) throw new TooManyRequests(retry)
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
public settle(context: http.Context, output: http.OutgoingMessage): void {
|
|
28
|
-
this.quotas.use(context, output)
|
|
29
|
-
}
|
|
30
|
-
}
|
|
@@ -1,72 +0,0 @@
|
|
|
1
|
-
import { it } from 'node:test'
|
|
2
|
-
import assert from 'node:assert/strict'
|
|
3
|
-
|
|
4
|
-
import { parse, type Configuration } from './Configuration.js'
|
|
5
|
-
|
|
6
|
-
const rest: Omit<Configuration, 'key' | 'condition'> = {
|
|
7
|
-
interval: 1,
|
|
8
|
-
requests: 1
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
it('should convert key', () => {
|
|
12
|
-
const result: Partial<Configuration> = {
|
|
13
|
-
key: [
|
|
14
|
-
{
|
|
15
|
-
method: 'ip'
|
|
16
|
-
}
|
|
17
|
-
]
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
assert.partialDeepStrictEqual(parse({ key: 'ip', ...rest }), result)
|
|
21
|
-
assert.partialDeepStrictEqual(parse({ key: ['ip'], ...rest }), result)
|
|
22
|
-
})
|
|
23
|
-
|
|
24
|
-
it('should convert condition', () => {
|
|
25
|
-
assert.partialDeepStrictEqual(
|
|
26
|
-
parse({ key: ['ip', 'path'], condition: { status: '404' }, ...rest }),
|
|
27
|
-
{
|
|
28
|
-
condition: [
|
|
29
|
-
{
|
|
30
|
-
method: 'status',
|
|
31
|
-
options: '404'
|
|
32
|
-
}
|
|
33
|
-
]
|
|
34
|
-
}
|
|
35
|
-
)
|
|
36
|
-
|
|
37
|
-
assert.partialDeepStrictEqual(
|
|
38
|
-
parse({ key: 'ip', condition: { status: '404' }, ...rest }),
|
|
39
|
-
{
|
|
40
|
-
condition: [
|
|
41
|
-
{
|
|
42
|
-
method: 'status',
|
|
43
|
-
options: '404'
|
|
44
|
-
}
|
|
45
|
-
]
|
|
46
|
-
}
|
|
47
|
-
)
|
|
48
|
-
})
|
|
49
|
-
|
|
50
|
-
it('should convert a key component that takes an argument', () => {
|
|
51
|
-
assert.partialDeepStrictEqual(parse({ key: { segment: 'id' }, ...rest }), {
|
|
52
|
-
key: [
|
|
53
|
-
{
|
|
54
|
-
method: 'segment',
|
|
55
|
-
options: 'id'
|
|
56
|
-
}
|
|
57
|
-
]
|
|
58
|
-
})
|
|
59
|
-
})
|
|
60
|
-
|
|
61
|
-
it('should convert a mixed key', () => {
|
|
62
|
-
assert.partialDeepStrictEqual(
|
|
63
|
-
parse({ key: ['route', { segment: 'id' }, 'identity'], ...rest }),
|
|
64
|
-
{
|
|
65
|
-
key: [
|
|
66
|
-
{ method: 'route' },
|
|
67
|
-
{ method: 'segment', options: 'id' },
|
|
68
|
-
{ method: 'identity' }
|
|
69
|
-
]
|
|
70
|
-
}
|
|
71
|
-
)
|
|
72
|
-
})
|
|
@@ -1,68 +0,0 @@
|
|
|
1
|
-
export interface Configuration {
|
|
2
|
-
key: KeyComponent[]
|
|
3
|
-
condition?: KeyCondition[]
|
|
4
|
-
requests: number
|
|
5
|
-
interval: number
|
|
6
|
-
}
|
|
7
|
-
|
|
8
|
-
interface Rule<T, K = unknown> {
|
|
9
|
-
method: T
|
|
10
|
-
options?: K
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
export type KeyComponentMethod = 'ip' | 'path' | 'route' | 'identity' | 'segment'
|
|
14
|
-
export type KeyConditionMethod = 'status'
|
|
15
|
-
|
|
16
|
-
export type KeyComponent = Rule<KeyComponentMethod>
|
|
17
|
-
export type KeyCondition = Rule<KeyConditionMethod>
|
|
18
|
-
|
|
19
|
-
/** A bare component, or the one that takes an argument. */
|
|
20
|
-
type KeyEntry = KeyComponentMethod | { segment: string }
|
|
21
|
-
type KeyDeclaration = KeyEntry | KeyEntry[]
|
|
22
|
-
|
|
23
|
-
type ConditionDeclaration =
|
|
24
|
-
| Record<KeyConditionMethod, unknown>
|
|
25
|
-
| Array<Record<KeyConditionMethod, unknown>>
|
|
26
|
-
|
|
27
|
-
export interface Declaration extends Omit<Configuration, 'key' | 'condition'> {
|
|
28
|
-
key: KeyDeclaration
|
|
29
|
-
condition?: ConditionDeclaration
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
export function parse(declaration: Declaration): Configuration {
|
|
33
|
-
const { key, condition, requests, interval } = declaration
|
|
34
|
-
|
|
35
|
-
return {
|
|
36
|
-
key: mapKey(key),
|
|
37
|
-
condition: mapCondition(condition),
|
|
38
|
-
requests,
|
|
39
|
-
interval: interval * 1000
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
function mapKey(declaration: KeyDeclaration): KeyComponent[] {
|
|
44
|
-
const entries = Array.isArray(declaration) ? declaration : [declaration]
|
|
45
|
-
|
|
46
|
-
// a bare `path`, or `segment: id` for the ones that take an argument
|
|
47
|
-
return entries.flatMap((entry): KeyComponent[] =>
|
|
48
|
-
typeof entry === 'string'
|
|
49
|
-
? [{ method: entry }]
|
|
50
|
-
: Object.entries(entry).map(([method, options]) => ({
|
|
51
|
-
method: method as KeyComponentMethod,
|
|
52
|
-
options
|
|
53
|
-
}))
|
|
54
|
-
)
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
function mapCondition(declaration?: ConditionDeclaration): KeyCondition[] | undefined {
|
|
58
|
-
if (declaration === undefined) return
|
|
59
|
-
|
|
60
|
-
// reduce to a single object, then map entries to rules
|
|
61
|
-
const conditions = Array.isArray(declaration) ? declaration : [declaration]
|
|
62
|
-
const single = conditions.reduce((acc, condition) => ({ ...acc, ...condition }), {})
|
|
63
|
-
|
|
64
|
-
return Object.entries(single).map(([method, options]) => ({
|
|
65
|
-
method,
|
|
66
|
-
options
|
|
67
|
-
})) as KeyCondition[]
|
|
68
|
-
}
|
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
import { createHash } from 'node:crypto'
|
|
2
|
-
import { Components, type Component } from './components/index.js'
|
|
3
|
-
import { Conditions, type Condition } from './conditions/index.js'
|
|
4
|
-
import type { KeyComponent, KeyCondition } from './Configuration.js'
|
|
5
|
-
import type { Parameter } from '../../../../RTD/index.js'
|
|
6
|
-
import type { Input as Context, Output } from '../../../../io.js'
|
|
7
|
-
|
|
8
|
-
const NONE: Parameter[] = []
|
|
9
|
-
|
|
10
|
-
export class Keys {
|
|
11
|
-
private readonly components: Component[]
|
|
12
|
-
private readonly conditions?: Condition[]
|
|
13
|
-
|
|
14
|
-
public constructor(components: Component[], conditions?: Condition[]) {
|
|
15
|
-
this.components = components
|
|
16
|
-
this.conditions = conditions
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
public static create(
|
|
20
|
-
componentRules: KeyComponent[],
|
|
21
|
-
conditionRules?: KeyCondition[],
|
|
22
|
-
route: string = ''
|
|
23
|
-
): Keys {
|
|
24
|
-
const components = componentRules.map(
|
|
25
|
-
(rule) => new Components[rule.method](rule.options, route)
|
|
26
|
-
)
|
|
27
|
-
|
|
28
|
-
const conditions = conditionRules?.map(
|
|
29
|
-
(rule) => new Conditions[rule.method](rule.options)
|
|
30
|
-
)
|
|
31
|
-
|
|
32
|
-
return new this(components, conditions)
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
/** The key of the request, or nothing when a component cannot key it. */
|
|
36
|
-
public get(context: Context, parameters: Parameter[] = NONE): string | undefined {
|
|
37
|
-
const hash = createHash('sha256')
|
|
38
|
-
|
|
39
|
-
for (const component of this.components) {
|
|
40
|
-
const part = component.get(context, parameters)
|
|
41
|
-
|
|
42
|
-
if (part === undefined) return
|
|
43
|
-
|
|
44
|
-
hash.update(part)
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
return hash.digest('hex')
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
public matches(input: Context, output: Output): boolean {
|
|
51
|
-
return this.conditions?.some((condition) => !condition.match(input, output)) !== true
|
|
52
|
-
}
|
|
53
|
-
}
|