@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
package/source/HTTP/messages.ts
DELETED
|
@@ -1,186 +0,0 @@
|
|
|
1
|
-
import { readFileSync } from 'node:fs'
|
|
2
|
-
import { Readable } from 'node:stream'
|
|
3
|
-
import { pipeline } from 'node:stream/promises'
|
|
4
|
-
import * as contentType from 'content-type'
|
|
5
|
-
import { console } from 'openspan'
|
|
6
|
-
import { type Format, decoders } from './formats/index.js'
|
|
7
|
-
import { BadRequest, NotAcceptable, UnsupportedMediaType } from './exceptions.js'
|
|
8
|
-
import { environment } from '@toa.io/generic'
|
|
9
|
-
import type { Context } from './Context.js'
|
|
10
|
-
import type { ServerResponse } from './types.js'
|
|
11
|
-
|
|
12
|
-
const context = environment.get('TOA_CONTEXT')
|
|
13
|
-
const env = environment.get('TOA_ENV')
|
|
14
|
-
const server =
|
|
15
|
-
`Exposition/${JSON.parse(readFileSync(new URL('../../package.json', import.meta.url), 'utf8')).version}` +
|
|
16
|
-
((context === undefined ? '' : ` ${context}`) + (env === undefined ? '' : `/${env}`))
|
|
17
|
-
|
|
18
|
-
/**
|
|
19
|
-
* Applies what the request accumulated in `pipelines.response` — an `io:output` restriction,
|
|
20
|
-
* a `vary` a `map` directive owes. Separate from `write` because a message is not always
|
|
21
|
-
* written: one call of several produces a value the reply is assembled from.
|
|
22
|
-
*/
|
|
23
|
-
export async function shape(context: Context, message: OutgoingMessage): Promise<void> {
|
|
24
|
-
for (const transform of context.pipelines.response) await transform(message)
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
export async function write(
|
|
28
|
-
context: Context,
|
|
29
|
-
response: ServerResponse,
|
|
30
|
-
message: OutgoingMessage
|
|
31
|
-
): Promise<void> {
|
|
32
|
-
await shape(context, message)
|
|
33
|
-
|
|
34
|
-
if (message?.status !== undefined) response.statusCode = message.status
|
|
35
|
-
|
|
36
|
-
response.setHeader('server', server)
|
|
37
|
-
message.headers?.forEach((value, key) => response.setHeader(key, value))
|
|
38
|
-
context.timing.append(response)
|
|
39
|
-
|
|
40
|
-
if (response.destroyed) {
|
|
41
|
-
console.warn('Request destroyed prematurely', { path: context.url.pathname })
|
|
42
|
-
|
|
43
|
-
return
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
response.on('error', (exception: Error) =>
|
|
47
|
-
console.warn('HTTP response error', { path: context.url.pathname, exception })
|
|
48
|
-
)
|
|
49
|
-
|
|
50
|
-
if (message.body instanceof Readable) stream(message, context, response)
|
|
51
|
-
else send(message, context, response)
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
export async function read(context: Context): Promise<any> {
|
|
55
|
-
const header = context.request.headers['content-type']
|
|
56
|
-
|
|
57
|
-
if (header === undefined) return undefined
|
|
58
|
-
|
|
59
|
-
const { type, parameters } = contentType.parse(header)
|
|
60
|
-
|
|
61
|
-
if (!(type in decoders)) throw new UnsupportedMediaType()
|
|
62
|
-
|
|
63
|
-
const format = decoders[type]
|
|
64
|
-
const buf = await context.buffer()
|
|
65
|
-
|
|
66
|
-
try {
|
|
67
|
-
return format.decode(buf, parameters.charset)
|
|
68
|
-
} catch (error: unknown) {
|
|
69
|
-
console.debug('Failed to decode message', {
|
|
70
|
-
path: context.url.pathname,
|
|
71
|
-
error: error?.toString?.()
|
|
72
|
-
})
|
|
73
|
-
|
|
74
|
-
throw new BadRequest()
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
function send(
|
|
79
|
-
message: OutgoingMessage,
|
|
80
|
-
context: Context,
|
|
81
|
-
response: ServerResponse
|
|
82
|
-
): void {
|
|
83
|
-
if (message.body === undefined || message.body === null) {
|
|
84
|
-
// a HEAD reply carries no body but must still report the length a GET would
|
|
85
|
-
// have returned, so a length already set by a directive is left alone
|
|
86
|
-
if (!response.hasHeader('content-length')) response.setHeader('content-length', '0')
|
|
87
|
-
|
|
88
|
-
response.end()
|
|
89
|
-
|
|
90
|
-
return
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
if (context.encoder === null) throw new NotAcceptable()
|
|
94
|
-
|
|
95
|
-
const buf = context.encoder.encode(message.body)
|
|
96
|
-
|
|
97
|
-
response.setHeader('content-type', context.encoder.type)
|
|
98
|
-
response.setHeader('content-length', buf.length.toString())
|
|
99
|
-
response.appendHeader('vary', 'accept')
|
|
100
|
-
response.end(buf)
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
function stream(
|
|
104
|
-
message: OutgoingMessage,
|
|
105
|
-
context: Context,
|
|
106
|
-
response: ServerResponse
|
|
107
|
-
): void {
|
|
108
|
-
const encoded = message.headers !== undefined && message.headers.has('content-type')
|
|
109
|
-
const source: Readable = encoded ? message.body : multipart(message, context, response)
|
|
110
|
-
|
|
111
|
-
// not awaited: a reply that streams is written long after the request is answered, and a
|
|
112
|
-
// realtime subscription outlives the span the reply was produced in
|
|
113
|
-
//
|
|
114
|
-
// `pipeline` carries an error to every stage and destroys them. `pipe` leaves the stages it
|
|
115
|
-
// built behind, and an `error` on a stream nobody listens to is an uncaught exception.
|
|
116
|
-
pipeline(source, response).catch((exception: Error) =>
|
|
117
|
-
console.warn('Message stream error', { path: context.url.pathname, exception })
|
|
118
|
-
)
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
/**
|
|
122
|
-
* Frames an object stream as `multipart/*`: an `ACK` part, the parts themselves, then `FIN`.
|
|
123
|
-
* The body is a `Readable`; `write` reached here by testing it.
|
|
124
|
-
*/
|
|
125
|
-
export function multipart(
|
|
126
|
-
message: OutgoingMessage,
|
|
127
|
-
context: Context,
|
|
128
|
-
response: ServerResponse
|
|
129
|
-
): Readable {
|
|
130
|
-
if (context.encoder === null) throw new NotAcceptable()
|
|
131
|
-
|
|
132
|
-
const encoder = context.encoder
|
|
133
|
-
|
|
134
|
-
response.setHeader('content-type', `${encoder.multipart}; boundary=${BOUNDARY}`)
|
|
135
|
-
|
|
136
|
-
return Readable.from(frames(message.body as Readable, encoder))
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
async function* frames(body: Readable, encoder: Format): AsyncGenerator<Buffer> {
|
|
140
|
-
yield Buffer.concat([CUT, CRLF, encoder.encode('ACK'), CRLF, CUT])
|
|
141
|
-
|
|
142
|
-
for await (const part of body)
|
|
143
|
-
yield Buffer.concat([
|
|
144
|
-
CRLF /* indicates no boundary headers */,
|
|
145
|
-
encoder.encode(part),
|
|
146
|
-
CRLF,
|
|
147
|
-
CUT
|
|
148
|
-
])
|
|
149
|
-
|
|
150
|
-
yield Buffer.concat([CRLF, encoder.encode('FIN'), CRLF, FINALCUT])
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
const BOUNDARY = 'cut'
|
|
154
|
-
const CUT = Buffer.from(`--${BOUNDARY}\r\n`)
|
|
155
|
-
const CRLF = Buffer.from('\r\n')
|
|
156
|
-
const FINALCUT = Buffer.from(`--${BOUNDARY}--`)
|
|
157
|
-
|
|
158
|
-
export interface OutgoingMessage {
|
|
159
|
-
status?: number
|
|
160
|
-
headers?: Headers
|
|
161
|
-
body?: any
|
|
162
|
-
|
|
163
|
-
/** what the reply carries for a cache to validate by; the `cache` family sets the headers */
|
|
164
|
-
version?: number
|
|
165
|
-
modified?: number | string
|
|
166
|
-
|
|
167
|
-
/**
|
|
168
|
-
* Built by the gateway rather than returned by an operation, as a request is `authentic`
|
|
169
|
-
* when it was made by one: what is in it is the gateway's own, and the checks that answer
|
|
170
|
-
* for what an operation returns have nothing to say about it.
|
|
171
|
-
*/
|
|
172
|
-
authentic?: boolean
|
|
173
|
-
}
|
|
174
|
-
|
|
175
|
-
export interface Query {
|
|
176
|
-
[key: string]: string | number | undefined
|
|
177
|
-
|
|
178
|
-
id?: string
|
|
179
|
-
criteria?: string
|
|
180
|
-
search?: string
|
|
181
|
-
sample?: number
|
|
182
|
-
sort?: string
|
|
183
|
-
omit?: string
|
|
184
|
-
limit?: string
|
|
185
|
-
version?: number
|
|
186
|
-
}
|
package/source/HTTP/types.ts
DELETED
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
import type { Readable, Writable } from 'node:stream'
|
|
2
|
-
import type { OutgoingHttpHeaders } from 'node:http'
|
|
3
|
-
import type { IncomingHttpHeaders } from 'node:http2'
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* What Exposition requires of a request. Both `http.IncomingMessage` and
|
|
7
|
-
* `http2.Http2ServerRequest` satisfy it, so the pipeline is written once.
|
|
8
|
-
*/
|
|
9
|
-
export interface IncomingMessage extends Readable {
|
|
10
|
-
url: string
|
|
11
|
-
method: string
|
|
12
|
-
complete: boolean
|
|
13
|
-
headers: IncomingHeaders
|
|
14
|
-
socket: { remoteAddress?: string | undefined }
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
/**
|
|
18
|
-
* What Exposition requires of a response.
|
|
19
|
-
*
|
|
20
|
-
* `setHeader` and `appendHeader` return `void` because `Http2ServerResponse` returns
|
|
21
|
-
* nothing from them, so neither can be chained.
|
|
22
|
-
*/
|
|
23
|
-
export interface ServerResponse extends Writable {
|
|
24
|
-
statusCode: number
|
|
25
|
-
writableEnded: boolean
|
|
26
|
-
setHeader: (name: string, value: number | string | string[]) => void
|
|
27
|
-
appendHeader: (name: string, value: string | string[]) => void
|
|
28
|
-
hasHeader: (name: string) => boolean
|
|
29
|
-
writeHead: (status: number, headers?: OutgoingHttpHeaders) => ServerResponse
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
/**
|
|
33
|
-
* HTTP/2's header map: HTTP/1.1's, plus the pseudo-headers. `:authority` is typed here
|
|
34
|
-
* so the authority can be read without narrowing at every call site.
|
|
35
|
-
*/
|
|
36
|
-
export type IncomingHeaders = IncomingHttpHeaders
|
|
37
|
-
|
|
38
|
-
/** `h2c` is cleartext HTTP/2: there is no in-process TLS to negotiate ALPN with. */
|
|
39
|
-
export type Protocol = 'h1' | 'h2c'
|
package/source/Interception.ts
DELETED
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
import type * as http from './HTTP/index.js'
|
|
2
|
-
import type { Input, Output } from './io.js'
|
|
3
|
-
|
|
4
|
-
export class Interception implements Interceptor {
|
|
5
|
-
private readonly interceptors: Interceptor[]
|
|
6
|
-
|
|
7
|
-
public constructor(interceptors: Interceptor[], options: http.Options) {
|
|
8
|
-
this.interceptors = interceptors
|
|
9
|
-
|
|
10
|
-
// interceptors are module singletons, so a second gateway in one process —
|
|
11
|
-
// which is how the features run — would otherwise inherit the first one's state
|
|
12
|
-
for (const interceptor of interceptors) {
|
|
13
|
-
interceptor.reset?.()
|
|
14
|
-
interceptor.mount?.(options)
|
|
15
|
-
}
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
public async intercept(input: Input): Promise<Output> {
|
|
19
|
-
for (const interceptor of this.interceptors) {
|
|
20
|
-
const output = await interceptor.intercept(input)
|
|
21
|
-
|
|
22
|
-
if (output !== null) return output
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
return null
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
export interface Interceptor {
|
|
30
|
-
intercept: (input: Input) => Output | Promise<Output>
|
|
31
|
-
|
|
32
|
-
/** Discards whatever the interceptor accumulated while serving. */
|
|
33
|
-
reset?: () => void
|
|
34
|
-
|
|
35
|
-
/** What the annotation says, for an interceptor that answers from it. */
|
|
36
|
-
mount?: (options: http.Options) => void
|
|
37
|
-
}
|
package/source/Introspection.ts
DELETED
|
@@ -1,179 +0,0 @@
|
|
|
1
|
-
import type { Remote } from '@toa.io/core'
|
|
2
|
-
import type { Context } from './HTTP/index.js'
|
|
3
|
-
|
|
4
|
-
export interface Introspection {
|
|
5
|
-
/**
|
|
6
|
-
* What the route states this method is. The operation states what it is too, and that is
|
|
7
|
-
* not this: an operation is written without knowledge of any route, and a method is an
|
|
8
|
-
* operation and a route together — the same operation mounted twice is two methods, and
|
|
9
|
-
* one sentence cannot be true of both. The operation's own is for the Introspection.
|
|
10
|
-
*/
|
|
11
|
-
description?: string
|
|
12
|
-
|
|
13
|
-
/** what a person is shown where a client lists this method, which a name is not */
|
|
14
|
-
title?: string
|
|
15
|
-
|
|
16
|
-
/**
|
|
17
|
-
* whether reaching it takes nothing at all — `auth:anonymous`. Said rather than left
|
|
18
|
-
* unsaid, because it is also what refuses a caller presenting a credential: a client
|
|
19
|
-
* cannot know that from an answer that says nothing.
|
|
20
|
-
*/
|
|
21
|
-
anonymous?: boolean
|
|
22
|
-
|
|
23
|
-
/** whether reaching it takes being someone, whoever — `auth:anyone` and its like */
|
|
24
|
-
authenticated?: boolean
|
|
25
|
-
|
|
26
|
-
/** whether reaching it is being the identity it is about — `auth:id` */
|
|
27
|
-
private?: boolean
|
|
28
|
-
|
|
29
|
-
/** whether reaching it takes a role — `auth:role` */
|
|
30
|
-
protected?: boolean
|
|
31
|
-
|
|
32
|
-
/** and whether that role is one of the `system` scope */
|
|
33
|
-
system?: boolean
|
|
34
|
-
|
|
35
|
-
/** whether the route publishes this method to a model — [`mcp:tool`](mcp.md) */
|
|
36
|
-
mcp?: boolean
|
|
37
|
-
route?: Record<string, Schema>
|
|
38
|
-
query?: Record<string, Schema>
|
|
39
|
-
|
|
40
|
-
/** what the body is, where it is a file rather than a value — [`octets:put`](octets.md) */
|
|
41
|
-
octets?: Octets
|
|
42
|
-
input?: Schema
|
|
43
|
-
output?: Schema
|
|
44
|
-
errors?: string[]
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
/** What sending a file to a resource takes, which is not something a schema states. */
|
|
48
|
-
export interface Octets {
|
|
49
|
-
/** what may be sent, in the syntax of an `accept` header; anything where unstated */
|
|
50
|
-
accept?: string
|
|
51
|
-
|
|
52
|
-
/** the largest body it takes, as it is written and as a refusal reports it */
|
|
53
|
-
limit: string
|
|
54
|
-
|
|
55
|
-
/**
|
|
56
|
-
* Whether the reply arrives as a stream of parts rather than as one object: a workflow
|
|
57
|
-
* runs on what was stored, and each step answers as it finishes. The first part is the
|
|
58
|
-
* entry itself, which is what a caller that wants nothing else reads and stops.
|
|
59
|
-
*/
|
|
60
|
-
stream?: boolean
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
export type Schema = Awaited<ReturnType<Remote['explain']>>['input']
|
|
64
|
-
|
|
65
|
-
/**
|
|
66
|
-
* The same request, as a description of a resource rather than a call to one. A directive
|
|
67
|
-
* that answers differently to the two reads `exploratory` — `Anonymous` is the one that
|
|
68
|
-
* does, because the rule refusing a credential at an `anonymous` route is about a reply a
|
|
69
|
-
* cache would hold, and a description is not one.
|
|
70
|
-
*/
|
|
71
|
-
export function describing(context: Context): Context {
|
|
72
|
-
return Object.create(context, {
|
|
73
|
-
exploratory: { value: true, enumerable: true }
|
|
74
|
-
}) as Context
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
/**
|
|
78
|
-
* The same, in the order the shape states — whatever order the families that filled it ran
|
|
79
|
-
* in. What a resource says about itself is read, so it is written the way it is documented.
|
|
80
|
-
*/
|
|
81
|
-
export function order(introspection: Introspection): Introspection {
|
|
82
|
-
const ordered: Introspection = {}
|
|
83
|
-
|
|
84
|
-
for (const key of KEYS)
|
|
85
|
-
if (introspection[key] !== undefined) (ordered[key] as unknown) = introspection[key]
|
|
86
|
-
|
|
87
|
-
return ordered
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
const KEYS = [
|
|
91
|
-
'title',
|
|
92
|
-
'description',
|
|
93
|
-
'anonymous',
|
|
94
|
-
'authenticated',
|
|
95
|
-
'private',
|
|
96
|
-
'protected',
|
|
97
|
-
'system',
|
|
98
|
-
'mcp',
|
|
99
|
-
'route',
|
|
100
|
-
'query',
|
|
101
|
-
'octets',
|
|
102
|
-
'input',
|
|
103
|
-
'output',
|
|
104
|
-
'errors'
|
|
105
|
-
] as const
|
|
106
|
-
|
|
107
|
-
/**
|
|
108
|
-
* The schema of one input property, taken out of it: a property another family fills is
|
|
109
|
-
* not the caller's to send, and what took it says where it comes from instead.
|
|
110
|
-
*/
|
|
111
|
-
export function take(carrier: Carrier, property: string): Schema | undefined {
|
|
112
|
-
const input = carrier.input as Shape | null | undefined
|
|
113
|
-
const properties = input?.properties
|
|
114
|
-
|
|
115
|
-
if (
|
|
116
|
-
input === undefined ||
|
|
117
|
-
input === null ||
|
|
118
|
-
properties === undefined ||
|
|
119
|
-
!(property in properties)
|
|
120
|
-
)
|
|
121
|
-
return undefined
|
|
122
|
-
|
|
123
|
-
const schema = properties[property]
|
|
124
|
-
|
|
125
|
-
delete properties[property]
|
|
126
|
-
|
|
127
|
-
if (input.required !== undefined)
|
|
128
|
-
input.required = input.required.filter((name) => name !== property)
|
|
129
|
-
|
|
130
|
-
return schema
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
/**
|
|
134
|
-
* A schema restricted to the properties a whitelist admits, and an array's items where it
|
|
135
|
-
* describes an array. What is not an object of properties is left alone: a whitelist has
|
|
136
|
-
* nothing to say about a string.
|
|
137
|
-
*/
|
|
138
|
-
export function restrict(
|
|
139
|
-
schema: Schema | undefined,
|
|
140
|
-
allowed: Set<string>
|
|
141
|
-
): Schema | undefined {
|
|
142
|
-
const shape = schema as Shape | null | undefined
|
|
143
|
-
|
|
144
|
-
if (shape === undefined || shape === null) return schema
|
|
145
|
-
|
|
146
|
-
if (shape.items !== undefined)
|
|
147
|
-
return { ...shape, items: restrict(shape.items, allowed) } as unknown as Schema
|
|
148
|
-
|
|
149
|
-
if (shape.properties === undefined) return schema
|
|
150
|
-
|
|
151
|
-
const properties: Record<string, Schema> = {}
|
|
152
|
-
|
|
153
|
-
for (const [name, property] of Object.entries(shape.properties))
|
|
154
|
-
if (allowed.has(name)) properties[name] = property
|
|
155
|
-
|
|
156
|
-
const restricted: Shape = { ...shape, properties }
|
|
157
|
-
|
|
158
|
-
if (shape.required !== undefined)
|
|
159
|
-
restricted.required = shape.required.filter((name) => allowed.has(name))
|
|
160
|
-
|
|
161
|
-
return restricted as unknown as Schema
|
|
162
|
-
}
|
|
163
|
-
|
|
164
|
-
/**
|
|
165
|
-
* What a schema is read as here: the keywords these narrow, and whatever else it carries.
|
|
166
|
-
* `Schema` as core declares it requires `properties`, which a schema of a string has not,
|
|
167
|
-
* so the two are cast through rather than assigned.
|
|
168
|
-
*/
|
|
169
|
-
/** Whatever states an input: an explanation as the operation gave it, or as a route left it. */
|
|
170
|
-
interface Carrier {
|
|
171
|
-
input?: Schema
|
|
172
|
-
}
|
|
173
|
-
|
|
174
|
-
interface Shape {
|
|
175
|
-
properties?: Record<string, Schema>
|
|
176
|
-
required?: string[]
|
|
177
|
-
items?: Schema
|
|
178
|
-
[keyword: string]: unknown
|
|
179
|
-
}
|