@toa.io/extensions.exposition 1.0.0-alpha.285 → 1.0.0-alpha.286
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/exposition.octets/operations/delete.js +1 -1
- package/components/exposition.octets/operations/get.js +5 -2
- package/components/exposition.octets/operations/head.js +1 -1
- package/components/exposition.octets/operations/put.js +29 -37
- package/components/exposition.octets/types/toa.d.ts +1 -1
- package/components/identity.bans/manifest.toa.yaml +12 -13
- package/components/identity.bans/migrations/0001-system-properties.yaml +14 -0
- package/components/identity.bans/operations/transit.js +1 -1
- package/components/identity.bans/source/transit.ts +1 -1
- package/components/identity.bans/tsconfig.tsbuildinfo +1 -1
- package/components/identity.bans/types/toa.d.ts +5 -5
- package/components/identity.basic/events/principal.js +3 -1
- package/components/identity.basic/manifest.toa.yaml +17 -23
- package/components/identity.basic/migrations/0001-system-properties.yaml +14 -0
- package/components/identity.basic/migrations/0002-indexes.yaml +13 -0
- package/components/identity.basic/operations/add.js +1 -1
- package/components/identity.basic/operations/authenticate.js +2 -2
- package/components/identity.basic/operations/check.js +4 -2
- package/components/identity.basic/operations/delete.js +1 -1
- package/components/identity.basic/operations/incept.js +1 -1
- package/components/identity.basic/operations/info.js +1 -1
- package/components/identity.basic/operations/lib/credentials.js +1 -1
- package/components/identity.basic/operations/transit.js +7 -8
- package/components/identity.basic/source/add.ts +5 -2
- package/components/identity.basic/source/authenticate.ts +11 -13
- package/components/identity.basic/source/check.ts +9 -6
- package/components/identity.basic/source/delete.ts +4 -1
- package/components/identity.basic/source/incept.ts +13 -10
- package/components/identity.basic/source/info.ts +4 -1
- package/components/identity.basic/source/lib/credentials.ts +2 -3
- package/components/identity.basic/source/transit.ts +27 -21
- package/components/identity.basic/tsconfig.tsbuildinfo +1 -1
- package/components/identity.basic/types/index.d.ts +7 -3
- package/components/identity.basic/types/toa.d.ts +5 -5
- package/components/identity.clients/manifest.toa.yaml +36 -40
- package/components/identity.clients/migrations/0001-system-properties.yaml +14 -0
- package/components/identity.clients/migrations/0002-indexes.yaml +4 -0
- package/components/identity.clients/operations/describe.js +1 -1
- package/components/identity.clients/operations/lib/canonical.js +1 -1
- package/components/identity.clients/operations/lib/cimd.js +3 -2
- package/components/identity.clients/operations/lib/redirect.js +7 -4
- package/components/identity.clients/operations/register.js +2 -2
- package/components/identity.clients/source/describe.ts +6 -8
- package/components/identity.clients/source/lib/Context.ts +6 -3
- package/components/identity.clients/source/lib/Entity.ts +1 -1
- package/components/identity.clients/source/lib/canonical.ts +1 -1
- package/components/identity.clients/source/lib/cimd.test.ts +8 -6
- package/components/identity.clients/source/lib/cimd.ts +24 -19
- package/components/identity.clients/source/lib/redirect.test.ts +8 -2
- package/components/identity.clients/source/lib/redirect.ts +12 -8
- package/components/identity.clients/source/register.ts +18 -18
- package/components/identity.clients/tsconfig.tsbuildinfo +1 -1
- package/components/identity.clients/types/toa.d.ts +5 -5
- package/components/identity.credentials/manifest.toa.yaml +4 -4
- package/components/identity.credentials/operations/list.js +8 -4
- package/components/identity.credentials/source/list.test.ts +39 -20
- package/components/identity.credentials/source/list.ts +12 -8
- package/components/identity.credentials/tsconfig.tsbuildinfo +1 -1
- package/components/identity.credentials/types/toa.d.ts +2 -2
- package/components/identity.federation/manifest.toa.yaml +23 -32
- package/components/identity.federation/migrations/0001-system-properties.yaml +14 -0
- package/components/identity.federation/migrations/0002-indexes.yaml +25 -0
- package/components/identity.federation/operations/authenticate.js +4 -2
- package/components/identity.federation/operations/create.js +2 -2
- package/components/identity.federation/operations/decode.js +1 -1
- package/components/identity.federation/operations/delete.js +1 -1
- package/components/identity.federation/operations/incept.js +1 -1
- package/components/identity.federation/operations/lib/decode.js +1 -1
- package/components/identity.federation/operations/lib/discovery.js +2 -2
- package/components/identity.federation/operations/lib/exchange.js +8 -4
- package/components/identity.federation/operations/lib/principal.js +1 -1
- package/components/identity.federation/operations/lib/resolve.js +1 -1
- package/components/identity.federation/operations/list.js +2 -2
- package/components/identity.federation/source/authenticate.ts +19 -17
- package/components/identity.federation/source/create.ts +6 -7
- package/components/identity.federation/source/decode.ts +4 -1
- package/components/identity.federation/source/delete.ts +4 -1
- package/components/identity.federation/source/incept.ts +2 -3
- package/components/identity.federation/source/lib/decode.ts +4 -7
- package/components/identity.federation/source/lib/discovery.test.ts +15 -5
- package/components/identity.federation/source/lib/discovery.ts +10 -9
- package/components/identity.federation/source/lib/exchange.ts +18 -15
- package/components/identity.federation/source/lib/jose.d.ts +1 -1
- package/components/identity.federation/source/lib/principal.ts +5 -3
- package/components/identity.federation/source/lib/resolve.ts +5 -1
- package/components/identity.federation/source/list.test.ts +26 -10
- package/components/identity.federation/source/list.ts +5 -2
- package/components/identity.federation/source/types/context.ts +5 -2
- package/components/identity.federation/source/types/entity.ts +2 -2
- package/components/identity.federation/tsconfig.tsbuildinfo +1 -1
- package/components/identity.federation/types/toa.d.ts +5 -5
- package/components/identity.grants/manifest.toa.yaml +27 -31
- package/components/identity.grants/migrations/0001-system-properties.yaml +14 -0
- package/components/identity.grants/migrations/0002-indexes.yaml +5 -0
- package/components/identity.grants/operations/authorize.js +1 -1
- package/components/identity.grants/operations/exchange.js +5 -2
- package/components/identity.grants/operations/lib/code.js +1 -1
- package/components/identity.grants/operations/lib/identify.js +1 -1
- package/components/identity.grants/operations/list.js +1 -1
- package/components/identity.grants/operations/revoke.js +3 -2
- package/components/identity.grants/source/authorize.ts +27 -19
- package/components/identity.grants/source/exchange.ts +15 -11
- package/components/identity.grants/source/lib/code.ts +20 -8
- package/components/identity.grants/source/lib/identify.ts +1 -1
- package/components/identity.grants/source/list.ts +2 -2
- package/components/identity.grants/source/revoke.ts +9 -7
- package/components/identity.grants/tsconfig.tsbuildinfo +1 -1
- package/components/identity.grants/types/index.d.ts +3 -3
- package/components/identity.grants/types/toa.d.ts +5 -5
- package/components/identity.keys/manifest.toa.yaml +18 -23
- package/components/identity.keys/migrations/0001-system-properties.yaml +14 -0
- package/components/identity.keys/migrations/0002-indexes.yaml +4 -0
- package/components/identity.keys/operations/create.js +1 -1
- package/components/identity.keys/operations/disable.js +1 -1
- package/components/identity.keys/operations/revoke.js +1 -1
- package/components/identity.keys/source/create.ts +2 -3
- package/components/identity.keys/source/disable.ts +1 -1
- package/components/identity.keys/source/revoke.ts +2 -2
- package/components/identity.keys/tsconfig.tsbuildinfo +1 -1
- package/components/identity.keys/types/toa.d.ts +5 -5
- package/components/identity.otp/manifest.toa.yaml +16 -24
- package/components/identity.otp/migrations/0001-system-properties.yaml +14 -0
- package/components/identity.otp/migrations/0002-indexes.yaml +5 -0
- package/components/identity.otp/operations/authenticate.js +1 -1
- package/components/identity.otp/operations/issue.js +1 -1
- package/components/identity.otp/source/authenticate.ts +4 -7
- package/components/identity.otp/source/issue.ts +1 -1
- package/components/identity.otp/source/lib/Context.ts +1 -1
- package/components/identity.otp/tsconfig.tsbuildinfo +1 -1
- package/components/identity.otp/types/toa.d.ts +5 -5
- package/components/identity.passkeys/manifest.toa.yaml +45 -53
- package/components/identity.passkeys/migrations/0001-system-properties.yaml +14 -0
- package/components/identity.passkeys/migrations/0002-indexes.yaml +11 -0
- package/components/identity.passkeys/operations/authenticate.js +1 -1
- package/components/identity.passkeys/operations/challenge.js +6 -3
- package/components/identity.passkeys/operations/create.js +1 -1
- package/components/identity.passkeys/operations/delete.js +1 -1
- package/components/identity.passkeys/operations/list.js +1 -1
- package/components/identity.passkeys/operations/use.js +1 -1
- package/components/identity.passkeys/source/authenticate.ts +3 -4
- package/components/identity.passkeys/source/challenge.ts +29 -25
- package/components/identity.passkeys/source/create.ts +8 -6
- package/components/identity.passkeys/source/delete.ts +4 -1
- package/components/identity.passkeys/source/list.ts +4 -1
- package/components/identity.passkeys/source/types/Context.ts +1 -1
- package/components/identity.passkeys/source/use.ts +12 -10
- package/components/identity.passkeys/tsconfig.tsbuildinfo +1 -1
- package/components/identity.passkeys/types/toa.d.ts +5 -5
- package/components/identity.roles/manifest.toa.yaml +12 -16
- package/components/identity.roles/migrations/0001-system-properties.yaml +14 -0
- package/components/identity.roles/migrations/0002-indexes.yaml +8 -0
- package/components/identity.roles/operations/grant.js +1 -1
- package/components/identity.roles/operations/list.js +1 -1
- package/components/identity.roles/operations/principal.js +2 -2
- package/components/identity.roles/source/grant.ts +7 -6
- package/components/identity.roles/source/list.ts +1 -1
- package/components/identity.roles/source/principal.ts +5 -7
- package/components/identity.roles/tsconfig.tsbuildinfo +1 -1
- package/components/identity.roles/types/toa.d.ts +5 -5
- package/components/identity.tokens/manifest.toa.yaml +17 -15
- package/components/identity.tokens/migrations/0001-system-properties.yaml +14 -0
- package/components/identity.tokens/operations/authenticate.js +2 -2
- package/components/identity.tokens/operations/decrypt.js +11 -5
- package/components/identity.tokens/operations/encrypt.js +2 -2
- package/components/identity.tokens/operations/issue.js +2 -4
- package/components/identity.tokens/operations/lib/form.js +1 -1
- package/components/identity.tokens/operations/lib/key.js +1 -1
- package/components/identity.tokens/operations/revoke.js +1 -1
- package/components/identity.tokens/source/authenticate.test.ts +22 -16
- package/components/identity.tokens/source/authenticate.ts +7 -10
- package/components/identity.tokens/source/decrypt.test.ts +62 -29
- package/components/identity.tokens/source/decrypt.ts +30 -27
- package/components/identity.tokens/source/encrypt.test.ts +21 -16
- package/components/identity.tokens/source/encrypt.ts +8 -11
- package/components/identity.tokens/source/issue.test.ts +4 -2
- package/components/identity.tokens/source/issue.ts +6 -8
- package/components/identity.tokens/source/lib/form.ts +5 -9
- package/components/identity.tokens/source/lib/jose.d.ts +1 -1
- package/components/identity.tokens/source/lib/key.ts +1 -1
- package/components/identity.tokens/source/lib/paseto.test.ts +17 -6
- package/components/identity.tokens/source/revoke.ts +1 -1
- package/components/identity.tokens/tsconfig.tsbuildinfo +1 -1
- package/components/identity.tokens/types/index.d.ts +13 -4
- package/components/identity.tokens/types/toa.d.ts +5 -5
- package/context.toa.yaml +2 -2
- package/cucumber.mjs +3 -0
- package/documentation/access.md +4 -3
- package/documentation/cache.md +17 -3
- package/documentation/components.md +2 -2
- package/documentation/credentials.md +2 -2
- package/documentation/identity.md +7 -9
- package/documentation/map.md +2 -2
- package/documentation/mcp.md +16 -16
- package/documentation/notes/peers.md +1 -1
- package/documentation/notes/throttling.md +1 -1
- package/documentation/octets.md +4 -4
- package/documentation/protocol.md +3 -3
- package/documentation/query.md +14 -8
- package/documentation/rpc.md +31 -21
- package/documentation/tracing.md +3 -3
- package/documentation/tree.md +1 -1
- package/features/auth.assert.feature +2 -2
- package/features/auth.bearer.feature +1 -1
- package/features/auth.claims.feature +5 -5
- package/features/auth.incept.feature +2 -2
- package/features/authorities.federation.feature +1 -1
- package/features/configuration.feature +3 -4
- package/features/credentials.feature +9 -9
- package/features/dev.feature +1 -0
- package/features/dynamic.feature +1 -0
- package/features/errors.feature +21 -0
- package/features/etag.feature +0 -86
- package/features/identity.bans.feature +3 -3
- package/features/identity.basic.feature +9 -9
- package/features/identity.federation.feature +11 -11
- package/features/identity.tokens.custom.feature +5 -5
- package/features/identity.tokens.feature +2 -2
- package/features/interruptions.feature +1 -0
- package/features/introspection.map.feature +4 -4
- package/features/io.throttle.feature +1 -0
- package/features/map.feature +2 -2
- package/features/octets.cloudinary.feature +1 -1
- package/features/octets.download.feature +1 -0
- package/features/require.feature +1 -2
- package/features/steps/Captures.ts +1 -1
- package/features/steps/Cloudinary.ts +1 -2
- package/features/steps/Common.ts +4 -5
- package/features/steps/Components.ts +17 -12
- package/features/steps/Database.ts +42 -23
- package/features/steps/Gateway.ts +55 -72
- package/features/steps/HTTP.ts +12 -15
- package/features/steps/IDP.ts +118 -94
- package/features/steps/Identity.ts +3 -3
- package/features/steps/OTP.ts +3 -3
- package/features/steps/Parameters.ts +20 -10
- package/features/steps/Probe.ts +9 -7
- package/features/steps/Realtime.ts +40 -22
- package/features/steps/Workspace.ts +10 -7
- package/features/steps/components/audit/operations/record.js +1 -1
- package/features/steps/components/echo/operations/affect.js +1 -1
- package/features/steps/components/echo/operations/compute.js +1 -1
- package/features/steps/components/echo/operations/echo.js +1 -1
- package/features/steps/components/echo/operations/error.js +1 -1
- package/features/steps/components/echo/operations/identity.js +1 -1
- package/features/steps/components/echo/operations/parameters.js +1 -1
- package/features/steps/components/echo/operations/ping.js +1 -1
- package/features/steps/components/echo/operations/unwrap.js +1 -1
- package/features/steps/components/greeter/operations/greet.js +1 -1
- package/features/steps/components/notify/operations/send.js +1 -1
- package/features/steps/components/octets.tester/operations/authority.js +1 -1
- package/features/steps/components/octets.tester/operations/bar.js +1 -1
- package/features/steps/components/octets.tester/operations/baz.js +1 -1
- package/features/steps/components/octets.tester/operations/concat.js +1 -1
- package/features/steps/components/octets.tester/operations/echo.js +1 -1
- package/features/steps/components/octets.tester/operations/err.js +1 -1
- package/features/steps/components/octets.tester/operations/foo.js +1 -1
- package/features/steps/components/octets.tester/operations/id.js +1 -1
- package/features/steps/components/octets.tester/operations/identity.js +1 -1
- package/features/steps/components/octets.tester/operations/redirect.js +6 -4
- package/features/steps/components/octets.tester/operations/yex.js +1 -1
- package/features/steps/components/octets.tester/operations/yield.js +1 -1
- package/features/steps/components/orders/manifest.toa.yaml +10 -12
- package/features/steps/components/orders/operations/create.js +4 -2
- package/features/steps/components/pots/manifest.toa.yaml +15 -20
- package/features/steps/components/pots/migrations/0002-indexes.yaml +4 -0
- package/features/steps/components/pricing/operations/quote.js +1 -1
- package/features/steps/components/sequences/manifest.toa.yaml +0 -1
- package/features/steps/components/sequences/operations/numbers.js +1 -1
- package/features/steps/components/sequences/operations/tokens.js +3 -3
- package/features/steps/components/users/manifest.toa.yaml +3 -5
- package/features/steps/components/users/operations/create.js +1 -1
- package/features/steps/components/users.properties/manifest.toa.yaml +5 -6
- package/features/steps/map.ts +2 -2
- package/features/timestamps.feature +1 -1
- package/package.json +7 -7
- package/readme.md +11 -11
- package/schemas/annotation.cos.yaml +1 -3
- package/schemas/method.cos.yaml +2 -0
- package/source/Branch.test.ts +2 -2
- package/source/Branch.ts +3 -5
- package/source/Composition.ts +5 -5
- package/source/Directive.test.ts +38 -20
- package/source/Directive.ts +61 -47
- package/source/Endpoint.test.ts +1 -1
- package/source/Endpoint.ts +27 -92
- package/source/Factory.ts +26 -12
- package/source/Gateway.ts +87 -76
- package/source/HTTP/Context.ts +23 -30
- package/source/HTTP/Probe.ts +7 -9
- package/source/HTTP/Server.ts +88 -69
- package/source/HTTP/Timing.ts +6 -21
- package/source/HTTP/address.test.ts +8 -2
- package/source/HTTP/address.ts +2 -3
- package/source/HTTP/exceptions.ts +20 -18
- package/source/HTTP/formats/form.ts +1 -1
- package/source/HTTP/formats/json.ts +2 -2
- package/source/HTTP/formats/msgpack.ts +3 -4
- package/source/HTTP/formats/text.ts +2 -2
- package/source/HTTP/formats/yaml.test.ts +4 -1
- package/source/HTTP/formats/yaml.ts +14 -11
- package/source/HTTP/messages.test.ts +38 -28
- package/source/HTTP/messages.ts +44 -98
- package/source/Interception.ts +3 -4
- package/source/Introspection.ts +26 -14
- package/source/MCP/Server.ts +114 -54
- package/source/MCP/discover.ts +6 -7
- package/source/MCP/errors.ts +7 -8
- package/source/MCP/schema.test.ts +9 -3
- package/source/MCP/schema.ts +12 -16
- package/source/MCP/tools.ts +33 -28
- package/source/Mapping.ts +25 -27
- package/source/Query.ts +58 -44
- package/source/RPC/Context.ts +8 -11
- package/source/RPC/Dispatcher.ts +46 -26
- package/source/RPC/errors.test.ts +41 -16
- package/source/RPC/errors.ts +9 -10
- package/source/RPC/names.test.ts +35 -16
- package/source/RPC/names.ts +22 -29
- package/source/RTD/Directives.ts +21 -10
- package/source/RTD/Endpoint.ts +4 -1
- package/source/RTD/Method.ts +8 -6
- package/source/RTD/Node.ts +32 -34
- package/source/RTD/Route.ts +18 -21
- package/source/RTD/Tree.ts +18 -18
- package/source/RTD/factory.ts +13 -16
- package/source/RTD/segment.ts +12 -10
- package/source/RTD/syntax/parse.test.ts +12 -6
- package/source/RTD/syntax/parse.ts +30 -26
- package/source/RTD/syntax/types.ts +17 -1
- package/source/RTD/walk.test.ts +59 -22
- package/source/Remotes.test.ts +25 -4
- package/source/Remotes.ts +9 -4
- package/source/Tenant.ts +12 -12
- package/source/deployment.ts +20 -20
- package/source/directives/auth/Anonymous.test.ts +8 -2
- package/source/directives/auth/Anonymous.ts +5 -8
- package/source/directives/auth/Anyone.ts +3 -3
- package/source/directives/auth/Assert.ts +10 -10
- package/source/directives/auth/Authorization.ts +83 -69
- package/source/directives/auth/Delegate.test.ts +2 -2
- package/source/directives/auth/Delegate.ts +8 -10
- package/source/directives/auth/Echo.ts +5 -8
- package/source/directives/auth/Federation.ts +30 -21
- package/source/directives/auth/Id.ts +7 -4
- package/source/directives/auth/Incept.ts +32 -26
- package/source/directives/auth/Input.ts +36 -20
- package/source/directives/auth/Role.test.ts +49 -23
- package/source/directives/auth/Role.ts +29 -22
- package/source/directives/auth/Rule.ts +13 -8
- package/source/directives/auth/Scheme.ts +7 -7
- package/source/directives/auth/create.ts +1 -1
- package/source/directives/auth/schemes.ts +1 -1
- package/source/directives/auth/split.ts +2 -3
- package/source/directives/auth/types.ts +5 -2
- package/source/directives/cache/Cache.ts +44 -9
- package/source/directives/cache/Control.ts +25 -26
- package/source/directives/cache/Exact.ts +1 -1
- package/source/directives/cache/etag.ts +38 -0
- package/source/directives/cors/CORS.ts +9 -7
- package/source/directives/dev/Development.ts +3 -4
- package/source/directives/dev/Faulty.ts +11 -6
- package/source/directives/dev/Sleep.ts +5 -7
- package/source/directives/dev/Stub.ts +2 -2
- package/source/directives/dev/Throw.ts +2 -2
- package/source/directives/flow/Compose.ts +26 -20
- package/source/directives/flow/Fetch.ts +15 -15
- package/source/directives/flow/Flow.ts +9 -8
- package/source/directives/index.ts +11 -2
- package/source/directives/io/IO.ts +29 -20
- package/source/directives/io/Input.ts +9 -12
- package/source/directives/io/Output.ts +20 -23
- package/source/directives/io/Status.test.ts +12 -8
- package/source/directives/io/Status.ts +9 -8
- package/source/directives/io/Throttle.ts +6 -7
- package/source/directives/io/lib/throttle/Configuration.test.ts +32 -23
- package/source/directives/io/lib/throttle/Configuration.ts +14 -9
- package/source/directives/io/lib/throttle/Keys.ts +15 -10
- package/source/directives/io/lib/throttle/Quotas.test.ts +33 -17
- package/source/directives/io/lib/throttle/Quotas.ts +20 -26
- package/source/directives/io/lib/throttle/Sync.test.ts +14 -10
- package/source/directives/io/lib/throttle/Sync.ts +9 -12
- package/source/directives/io/lib/throttle/Warning.ts +3 -4
- package/source/directives/io/lib/throttle/components/IP.ts +4 -5
- package/source/directives/io/lib/throttle/components/Identity.ts +1 -1
- package/source/directives/io/lib/throttle/components/Path.ts +1 -1
- package/source/directives/io/lib/throttle/components/Route.ts +2 -2
- package/source/directives/io/lib/throttle/components/Segment.ts +2 -2
- package/source/directives/io/lib/throttle/conditions/Status.ts +2 -2
- package/source/directives/io/schemas.test.ts +12 -6
- package/source/directives/map/Authority.ts +2 -2
- package/source/directives/map/Buffer.ts +2 -2
- package/source/directives/map/Claims.ts +25 -20
- package/source/directives/map/Headers.ts +17 -13
- package/source/directives/map/Language.ts +8 -5
- package/source/directives/map/Languages.ts +9 -3
- package/source/directives/map/Map.ts +25 -12
- package/source/directives/map/Mapping.ts +9 -6
- package/source/directives/map/Properties.ts +1 -1
- package/source/directives/map/Segments.ts +22 -15
- package/source/directives/mcp/MCP.ts +9 -7
- package/source/directives/mcp/Tool.test.ts +21 -9
- package/source/directives/mcp/Tool.ts +23 -11
- package/source/directives/oauth/Discovery.ts +7 -11
- package/source/directives/oauth/documents.ts +11 -14
- package/source/directives/octets/Context.ts +6 -3
- package/source/directives/octets/Delete.ts +33 -25
- package/source/directives/octets/Directive.ts +5 -1
- package/source/directives/octets/Get.ts +13 -21
- package/source/directives/octets/Octets.ts +20 -15
- package/source/directives/octets/Put.ts +62 -27
- package/source/directives/octets/Workflow.ts +18 -12
- package/source/directives/octets/bytes.ts +1 -1
- package/source/directives/octets/schemas.test.ts +8 -14
- package/source/directives/octets/workflows/Execution.ts +19 -21
- package/source/directives/octets/workflows/Workflow.ts +10 -7
- package/source/directives/require/Headers.ts +3 -4
- package/source/directives/require/Require.ts +3 -4
- package/source/exceptions.ts +19 -12
- package/source/index.ts +1 -1
- package/source/manifest.test.ts +4 -1
- package/source/manifest.ts +19 -13
- package/source/octets.d.ts +1 -1
- package/source/root.ts +3 -2
- package/source/schemas.test.ts +17 -3
- package/transpiled/Branch.js.map +1 -1
- package/transpiled/Composition.js.map +1 -1
- package/transpiled/Directive.js +6 -2
- package/transpiled/Directive.js.map +1 -1
- package/transpiled/Endpoint.d.ts +0 -2
- package/transpiled/Endpoint.js +11 -52
- package/transpiled/Endpoint.js.map +1 -1
- package/transpiled/Factory.d.ts +2 -1
- package/transpiled/Factory.js +1 -0
- package/transpiled/Factory.js.map +1 -1
- package/transpiled/Gateway.d.ts +2 -1
- package/transpiled/Gateway.js +24 -15
- package/transpiled/Gateway.js.map +1 -1
- package/transpiled/HTTP/Context.d.ts +0 -3
- package/transpiled/HTTP/Context.js +7 -9
- package/transpiled/HTTP/Context.js.map +1 -1
- package/transpiled/HTTP/Probe.js.map +1 -1
- package/transpiled/HTTP/Server.js +19 -4
- package/transpiled/HTTP/Server.js.map +1 -1
- package/transpiled/HTTP/Timing.d.ts +1 -2
- package/transpiled/HTTP/Timing.js +2 -10
- package/transpiled/HTTP/Timing.js.map +1 -1
- package/transpiled/HTTP/address.js.map +1 -1
- package/transpiled/HTTP/exceptions.js.map +1 -1
- package/transpiled/HTTP/formats/form.js.map +1 -1
- package/transpiled/HTTP/formats/json.js.map +1 -1
- package/transpiled/HTTP/formats/msgpack.js.map +1 -1
- package/transpiled/HTTP/formats/text.js.map +1 -1
- package/transpiled/HTTP/formats/yaml.js +4 -1
- package/transpiled/HTTP/formats/yaml.js.map +1 -1
- package/transpiled/HTTP/messages.d.ts +3 -2
- package/transpiled/HTTP/messages.js +1 -43
- package/transpiled/HTTP/messages.js.map +1 -1
- package/transpiled/Interception.js.map +1 -1
- package/transpiled/Introspection.js +13 -2
- package/transpiled/Introspection.js.map +1 -1
- package/transpiled/MCP/Server.js +15 -4
- package/transpiled/MCP/Server.js.map +1 -1
- package/transpiled/MCP/discover.js.map +1 -1
- package/transpiled/MCP/errors.js.map +1 -1
- package/transpiled/MCP/schema.js +1 -1
- package/transpiled/MCP/schema.js.map +1 -1
- package/transpiled/MCP/tools.js +10 -7
- package/transpiled/MCP/tools.js.map +1 -1
- package/transpiled/Mapping.d.ts +2 -2
- package/transpiled/Mapping.js +3 -5
- package/transpiled/Mapping.js.map +1 -1
- package/transpiled/Query.d.ts +6 -2
- package/transpiled/Query.js +23 -8
- package/transpiled/Query.js.map +1 -1
- package/transpiled/RPC/Context.js +0 -7
- package/transpiled/RPC/Context.js.map +1 -1
- package/transpiled/RPC/Dispatcher.js +4 -1
- package/transpiled/RPC/Dispatcher.js.map +1 -1
- package/transpiled/RPC/errors.js.map +1 -1
- package/transpiled/RPC/names.js.map +1 -1
- package/transpiled/RTD/Directives.d.ts +1 -1
- package/transpiled/RTD/Method.js +1 -3
- package/transpiled/RTD/Method.js.map +1 -1
- package/transpiled/RTD/Node.js +5 -4
- package/transpiled/RTD/Node.js.map +1 -1
- package/transpiled/RTD/Route.js +4 -1
- package/transpiled/RTD/Route.js.map +1 -1
- package/transpiled/RTD/Tree.js +1 -1
- package/transpiled/RTD/Tree.js.map +1 -1
- package/transpiled/RTD/factory.js.map +1 -1
- package/transpiled/RTD/segment.js.map +1 -1
- package/transpiled/RTD/syntax/parse.js.map +1 -1
- package/transpiled/RTD/syntax/types.d.ts +6 -0
- package/transpiled/RTD/syntax/types.js +10 -1
- package/transpiled/RTD/syntax/types.js.map +1 -1
- package/transpiled/Remotes.js.map +1 -1
- package/transpiled/Tenant.d.ts +1 -1
- package/transpiled/Tenant.js.map +1 -1
- package/transpiled/deployment.d.ts +3 -0
- package/transpiled/deployment.js +6 -1
- package/transpiled/deployment.js.map +1 -1
- package/transpiled/directives/auth/Anonymous.js +1 -3
- package/transpiled/directives/auth/Anonymous.js.map +1 -1
- package/transpiled/directives/auth/Anyone.js.map +1 -1
- package/transpiled/directives/auth/Assert.js.map +1 -1
- package/transpiled/directives/auth/Authorization.js +7 -3
- package/transpiled/directives/auth/Authorization.js.map +1 -1
- package/transpiled/directives/auth/Delegate.js.map +1 -1
- package/transpiled/directives/auth/Echo.js +1 -3
- package/transpiled/directives/auth/Echo.js.map +1 -1
- package/transpiled/directives/auth/Federation.js +3 -7
- package/transpiled/directives/auth/Federation.js.map +1 -1
- package/transpiled/directives/auth/Id.js.map +1 -1
- package/transpiled/directives/auth/Incept.js +1 -1
- package/transpiled/directives/auth/Incept.js.map +1 -1
- package/transpiled/directives/auth/Input.js.map +1 -1
- package/transpiled/directives/auth/Role.js.map +1 -1
- package/transpiled/directives/auth/Rule.js.map +1 -1
- package/transpiled/directives/auth/Scheme.js +1 -2
- package/transpiled/directives/auth/Scheme.js.map +1 -1
- package/transpiled/directives/auth/create.js.map +1 -1
- package/transpiled/directives/auth/schemes.js.map +1 -1
- package/transpiled/directives/auth/split.js.map +1 -1
- package/transpiled/directives/auth/types.d.ts +3 -1
- package/transpiled/directives/cache/Cache.js +28 -2
- package/transpiled/directives/cache/Cache.js.map +1 -1
- package/transpiled/directives/cache/Control.js +1 -1
- package/transpiled/directives/cache/Control.js.map +1 -1
- package/transpiled/directives/cache/etag.d.ts +10 -0
- package/transpiled/directives/cache/etag.js +30 -0
- package/transpiled/directives/cache/etag.js.map +1 -0
- package/transpiled/directives/cors/CORS.js.map +1 -1
- package/transpiled/directives/dev/Development.js.map +1 -1
- package/transpiled/directives/dev/Faulty.js.map +1 -1
- package/transpiled/directives/dev/Sleep.js.map +1 -1
- package/transpiled/directives/dev/Stub.js.map +1 -1
- package/transpiled/directives/dev/Throw.js.map +1 -1
- package/transpiled/directives/flow/Compose.js +7 -3
- package/transpiled/directives/flow/Compose.js.map +1 -1
- package/transpiled/directives/flow/Fetch.js.map +1 -1
- package/transpiled/directives/flow/Flow.js.map +1 -1
- package/transpiled/directives/index.js +11 -1
- package/transpiled/directives/index.js.map +1 -1
- package/transpiled/directives/io/IO.d.ts +1 -1
- package/transpiled/directives/io/IO.js.map +1 -1
- package/transpiled/directives/io/Input.js +1 -1
- package/transpiled/directives/io/Input.js.map +1 -1
- package/transpiled/directives/io/Output.js +3 -3
- package/transpiled/directives/io/Output.js.map +1 -1
- package/transpiled/directives/io/Status.js.map +1 -1
- package/transpiled/directives/io/Throttle.js +1 -1
- package/transpiled/directives/io/Throttle.js.map +1 -1
- package/transpiled/directives/io/lib/throttle/Configuration.js +8 -2
- package/transpiled/directives/io/lib/throttle/Configuration.js.map +1 -1
- package/transpiled/directives/io/lib/throttle/Keys.js.map +1 -1
- package/transpiled/directives/io/lib/throttle/Quotas.js +4 -3
- package/transpiled/directives/io/lib/throttle/Quotas.js.map +1 -1
- package/transpiled/directives/io/lib/throttle/Sync.d.ts +1 -1
- package/transpiled/directives/io/lib/throttle/Sync.js.map +1 -1
- package/transpiled/directives/io/lib/throttle/Warning.js.map +1 -1
- package/transpiled/directives/io/lib/throttle/components/IP.js.map +1 -1
- package/transpiled/directives/io/lib/throttle/components/Identity.js.map +1 -1
- package/transpiled/directives/io/lib/throttle/components/Path.js.map +1 -1
- package/transpiled/directives/io/lib/throttle/components/Route.js.map +1 -1
- package/transpiled/directives/io/lib/throttle/components/Segment.js.map +1 -1
- package/transpiled/directives/io/lib/throttle/conditions/Status.js.map +1 -1
- package/transpiled/directives/map/Authority.js.map +1 -1
- package/transpiled/directives/map/Buffer.js.map +1 -1
- package/transpiled/directives/map/Claims.js.map +1 -1
- package/transpiled/directives/map/Headers.js.map +1 -1
- package/transpiled/directives/map/Language.js.map +1 -1
- package/transpiled/directives/map/Languages.js.map +1 -1
- package/transpiled/directives/map/Map.js.map +1 -1
- package/transpiled/directives/map/Mapping.js.map +1 -1
- package/transpiled/directives/map/Properties.js.map +1 -1
- package/transpiled/directives/map/Segments.js.map +1 -1
- package/transpiled/directives/mcp/MCP.js +1 -1
- package/transpiled/directives/mcp/MCP.js.map +1 -1
- package/transpiled/directives/mcp/Tool.js +3 -1
- package/transpiled/directives/mcp/Tool.js.map +1 -1
- package/transpiled/directives/oauth/Discovery.js.map +1 -1
- package/transpiled/directives/oauth/documents.js.map +1 -1
- package/transpiled/directives/octets/Context.js +1 -1
- package/transpiled/directives/octets/Context.js.map +1 -1
- package/transpiled/directives/octets/Delete.js.map +1 -1
- package/transpiled/directives/octets/Directive.js.map +1 -1
- package/transpiled/directives/octets/Get.js.map +1 -1
- package/transpiled/directives/octets/Octets.js +1 -1
- package/transpiled/directives/octets/Octets.js.map +1 -1
- package/transpiled/directives/octets/Put.js.map +1 -1
- package/transpiled/directives/octets/Workflow.js.map +1 -1
- package/transpiled/directives/octets/bytes.js.map +1 -1
- package/transpiled/directives/octets/workflows/Execution.js +1 -2
- package/transpiled/directives/octets/workflows/Execution.js.map +1 -1
- package/transpiled/directives/octets/workflows/Workflow.js.map +1 -1
- package/transpiled/directives/require/Headers.js.map +1 -1
- package/transpiled/directives/require/Require.js.map +1 -1
- package/transpiled/exceptions.js.map +1 -1
- package/transpiled/index.d.ts +1 -1
- package/transpiled/index.js +1 -1
- package/transpiled/index.js.map +1 -1
- package/transpiled/manifest.js +5 -1
- package/transpiled/manifest.js.map +1 -1
- package/transpiled/root.js.map +1 -1
- package/tsconfig.tsbuildinfo +1 -1
- package/CHANGELOG.md +0 -552
- package/source/redact.test.ts +0 -27
- package/source/redact.ts +0 -21
- package/transpiled/redact.d.ts +0 -5
- package/transpiled/redact.js +0 -17
- package/transpiled/redact.js.map +0 -1
|
@@ -2,13 +2,12 @@ namespace: users
|
|
|
2
2
|
name: properties
|
|
3
3
|
|
|
4
4
|
entity:
|
|
5
|
-
schema:
|
|
6
|
-
properties:
|
|
7
|
-
newbie:
|
|
8
|
-
type: boolean
|
|
9
|
-
default: false
|
|
10
|
-
type: object
|
|
11
5
|
associated: true
|
|
6
|
+
properties:
|
|
7
|
+
newbie:
|
|
8
|
+
type: boolean
|
|
9
|
+
blank:
|
|
10
|
+
newbie: false
|
|
12
11
|
|
|
13
12
|
operations:
|
|
14
13
|
transit:
|
package/features/steps/map.ts
CHANGED
|
@@ -12,14 +12,14 @@ const COMPONENTS = ['introspection.nodes', 'introspection.edges']
|
|
|
12
12
|
* The map's own components, as the introspection package ships them. Mounted rather
|
|
13
13
|
* than copied on purpose: a scenario about a manifest must read that manifest.
|
|
14
14
|
*/
|
|
15
|
-
export function components
|
|
15
|
+
export function components(): string[] {
|
|
16
16
|
const root = dirname(require.resolve(PACKAGE + '/package.json'))
|
|
17
17
|
|
|
18
18
|
return COMPONENTS.map((name) => join(root, 'components', name))
|
|
19
19
|
}
|
|
20
20
|
|
|
21
21
|
/** `norm` declares `component` as a namespace of types; the runtime export is a function. */
|
|
22
|
-
export async function manifests
|
|
22
|
+
export async function manifests(): Promise<Manifest[]> {
|
|
23
23
|
const { component } = norm as unknown as Norm
|
|
24
24
|
|
|
25
25
|
return await Promise.all(components().map(async (path) => await component(path)))
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@toa.io/extensions.exposition",
|
|
3
|
-
"version": "1.0.0-alpha.
|
|
3
|
+
"version": "1.0.0-alpha.286",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Toa Exposition",
|
|
6
6
|
"author": "temich <tema.gurtovoy@gmail.com>",
|
|
@@ -18,11 +18,11 @@
|
|
|
18
18
|
"access": "public"
|
|
19
19
|
},
|
|
20
20
|
"dependencies": {
|
|
21
|
+
"@node-rs/bcrypt": "1.10.8",
|
|
21
22
|
"@simplewebauthn/server": "14.0.0",
|
|
22
|
-
"@toa.io/core": "1.0.0-alpha.
|
|
23
|
-
"@toa.io/generic": "1.0.0-alpha.
|
|
24
|
-
"@toa.io/schemas": "1.0.0-alpha.
|
|
25
|
-
"bcryptjs": "3.0.3",
|
|
23
|
+
"@toa.io/core": "1.0.0-alpha.286",
|
|
24
|
+
"@toa.io/generic": "1.0.0-alpha.286",
|
|
25
|
+
"@toa.io/schemas": "1.0.0-alpha.286",
|
|
26
26
|
"content-type": "3.0.0",
|
|
27
27
|
"jose": "6.2.10",
|
|
28
28
|
"js-yaml": "5.4.1",
|
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
"minimatch": "10.2.6",
|
|
32
32
|
"msgpackr": "2.1.0",
|
|
33
33
|
"negotiator": "1.1.0",
|
|
34
|
-
"openspan": "1.0.0-alpha.
|
|
34
|
+
"openspan": "1.0.0-alpha.286",
|
|
35
35
|
"paseto": "4.0.0"
|
|
36
36
|
},
|
|
37
37
|
"scripts": {
|
|
@@ -58,5 +58,5 @@
|
|
|
58
58
|
"@types/cors": "2.8.19",
|
|
59
59
|
"@types/negotiator": "0.6.5"
|
|
60
60
|
},
|
|
61
|
-
"gitHead": "
|
|
61
|
+
"gitHead": "81f3d0688f17668b902be336d1749cc715edcdb6"
|
|
62
62
|
}
|
package/readme.md
CHANGED
|
@@ -130,18 +130,18 @@ exposition:
|
|
|
130
130
|
example: the.example.com
|
|
131
131
|
```
|
|
132
132
|
|
|
133
|
-
| Option | Description
|
|
134
|
-
|
|
135
|
-
| `auhorities` | Mapping of authority identifiers to domain names. See [Authorities](documentation/authorities.md).
|
|
136
|
-
| `class` | Ingress class.
|
|
137
|
-
| `annotations` | Ingress annotations.
|
|
138
|
-
| `debug` | Output server errors. Default `false`.
|
|
139
|
-
| `ip` | Header the client address is read from. See [Client address](documentation/ip.md).
|
|
133
|
+
| Option | Description |
|
|
134
|
+
| ------------- | ----------------------------------------------------------------------------------------------------------------------------- |
|
|
135
|
+
| `auhorities` | Mapping of authority identifiers to domain names. See [Authorities](documentation/authorities.md). |
|
|
136
|
+
| `class` | Ingress class. |
|
|
137
|
+
| `annotations` | Ingress annotations. |
|
|
138
|
+
| `debug` | Output server errors. Default `false`. |
|
|
139
|
+
| `ip` | Header the client address is read from. See [Client address](documentation/ip.md). |
|
|
140
140
|
| `bouncer` | Meter of failed authentications per address. See [Identity authentication](documentation/identity.md#failed-authentications). |
|
|
141
|
-
| `oauth` | Authorization server exposed to OAuth clients. See [OAuth](documentation/oauth.md).
|
|
142
|
-
| `protocol` | `h1` or `h2c`. See [Protocol](documentation/protocol.md).
|
|
143
|
-
| `rpc` | JSON-RPC at `/.rpc`; none is served without it. See [JSON-RPC](documentation/rpc.md).
|
|
144
|
-
| `mcp` | MCP at `/.mcp`; none is served without it. See [MCP](documentation/mcp.md).
|
|
141
|
+
| `oauth` | Authorization server exposed to OAuth clients. See [OAuth](documentation/oauth.md). |
|
|
142
|
+
| `protocol` | `h1` or `h2c`. See [Protocol](documentation/protocol.md). |
|
|
143
|
+
| `rpc` | JSON-RPC at `/.rpc`; none is served without it. See [JSON-RPC](documentation/rpc.md). |
|
|
144
|
+
| `mcp` | MCP at `/.mcp`; none is served without it. See [MCP](documentation/mcp.md). |
|
|
145
145
|
|
|
146
146
|
### Observability
|
|
147
147
|
|
|
@@ -3,7 +3,7 @@ properties:
|
|
|
3
3
|
type: string
|
|
4
4
|
resources:
|
|
5
5
|
# `null` deploys the service without any, which every deployment has to state one way
|
|
6
|
-
# or the other — see `migrations/
|
|
6
|
+
# or the other — see `migrations/262.md`.
|
|
7
7
|
type: object
|
|
8
8
|
nullable: true
|
|
9
9
|
properties:
|
|
@@ -76,7 +76,6 @@ properties:
|
|
|
76
76
|
registration:
|
|
77
77
|
type: string
|
|
78
78
|
enum: [open, closed]
|
|
79
|
-
default: closed
|
|
80
79
|
required:
|
|
81
80
|
- authorize
|
|
82
81
|
additionalProperties: false
|
|
@@ -109,7 +108,6 @@ properties:
|
|
|
109
108
|
anonymous:
|
|
110
109
|
description: Whether the endpoint answers without a credential
|
|
111
110
|
type: boolean
|
|
112
|
-
default: false
|
|
113
111
|
required:
|
|
114
112
|
- name
|
|
115
113
|
additionalProperties: false
|
package/schemas/method.cos.yaml
CHANGED
package/source/Branch.test.ts
CHANGED
|
@@ -4,7 +4,7 @@ import assert from 'node:assert/strict'
|
|
|
4
4
|
import { decide } from './Branch.js'
|
|
5
5
|
import type { Branch, Exposed } from './Branch.js'
|
|
6
6
|
|
|
7
|
-
function branch
|
|
7
|
+
function branch(version: string, timestamp: number): Branch {
|
|
8
8
|
return {
|
|
9
9
|
namespace: 'default',
|
|
10
10
|
component: 'one',
|
|
@@ -15,7 +15,7 @@ function branch (version: string, timestamp: number): Branch {
|
|
|
15
15
|
}
|
|
16
16
|
}
|
|
17
17
|
|
|
18
|
-
function exposed
|
|
18
|
+
function exposed(version: string, timestamp: number): Exposed {
|
|
19
19
|
return { version, timestamp, nodes: [] }
|
|
20
20
|
}
|
|
21
21
|
|
package/source/Branch.ts
CHANGED
|
@@ -33,12 +33,10 @@ export interface Exposed {
|
|
|
33
33
|
* - `superseded`: it came from a tenant that started before the one exposed now
|
|
34
34
|
* - `merge`: everything else
|
|
35
35
|
*/
|
|
36
|
-
export function decide
|
|
37
|
-
if (exposed.version === branch.version)
|
|
38
|
-
return 'refresh'
|
|
36
|
+
export function decide(exposed: Exposed, branch: Branch): Decision {
|
|
37
|
+
if (exposed.version === branch.version) return 'refresh'
|
|
39
38
|
|
|
40
|
-
if (branch.timestamp < exposed.timestamp)
|
|
41
|
-
return 'superseded'
|
|
39
|
+
if (branch.timestamp < exposed.timestamp) return 'superseded'
|
|
42
40
|
|
|
43
41
|
return 'merge'
|
|
44
42
|
}
|
package/source/Composition.ts
CHANGED
|
@@ -6,12 +6,12 @@ import { type Host } from './Factory.js'
|
|
|
6
6
|
export class Composition extends Connector {
|
|
7
7
|
private readonly host: Host
|
|
8
8
|
|
|
9
|
-
public constructor
|
|
9
|
+
public constructor(host: Host) {
|
|
10
10
|
super()
|
|
11
11
|
this.host = host
|
|
12
12
|
}
|
|
13
13
|
|
|
14
|
-
protected override async open
|
|
14
|
+
protected override async open(): Promise<void> {
|
|
15
15
|
const paths = find()
|
|
16
16
|
const composition = await this.host.composition(paths)
|
|
17
17
|
|
|
@@ -21,17 +21,17 @@ export class Composition extends Connector {
|
|
|
21
21
|
}
|
|
22
22
|
}
|
|
23
23
|
|
|
24
|
-
function find
|
|
24
|
+
function find(): string[] {
|
|
25
25
|
return entries().map((entry) => resolve(ROOT, entry.name))
|
|
26
26
|
}
|
|
27
27
|
|
|
28
|
-
function entries
|
|
28
|
+
function entries(): Dirent[] {
|
|
29
29
|
const entries = readdirSync(ROOT, { withFileTypes: true })
|
|
30
30
|
|
|
31
31
|
return entries.filter((entry) => entry.isDirectory())
|
|
32
32
|
}
|
|
33
33
|
|
|
34
|
-
export function components
|
|
34
|
+
export function components(): Components {
|
|
35
35
|
const labels: string[] = []
|
|
36
36
|
const paths: string[] = []
|
|
37
37
|
|
package/source/Directive.test.ts
CHANGED
|
@@ -16,7 +16,10 @@ const families: Array<DirectiveFamily> = [
|
|
|
16
16
|
mandatory: true,
|
|
17
17
|
create: mock.fn((_0: any, _1: any, _2: any) => generate() as any),
|
|
18
18
|
arrange: mock.fn(),
|
|
19
|
-
precall: mock.fn(() => {
|
|
19
|
+
precall: mock.fn(() => {
|
|
20
|
+
sequence.push('foo')
|
|
21
|
+
return null
|
|
22
|
+
}),
|
|
20
23
|
settle: mock.fn(),
|
|
21
24
|
dispose: mock.fn()
|
|
22
25
|
},
|
|
@@ -25,7 +28,10 @@ const families: Array<DirectiveFamily> = [
|
|
|
25
28
|
mandatory: true,
|
|
26
29
|
create: mock.fn((_0: any, _1: any, _2: any) => generate() as any),
|
|
27
30
|
arrange: mock.fn(),
|
|
28
|
-
precall: mock.fn(() => {
|
|
31
|
+
precall: mock.fn(() => {
|
|
32
|
+
sequence.push('qux')
|
|
33
|
+
return null
|
|
34
|
+
}),
|
|
29
35
|
settle: mock.fn(),
|
|
30
36
|
dispose: mock.fn()
|
|
31
37
|
},
|
|
@@ -34,7 +40,10 @@ const families: Array<DirectiveFamily> = [
|
|
|
34
40
|
mandatory: false,
|
|
35
41
|
create: mock.fn((_0: string, _1: any, _2: any) => generate() as any),
|
|
36
42
|
arrange: mock.fn(),
|
|
37
|
-
precall: mock.fn(() => {
|
|
43
|
+
precall: mock.fn(() => {
|
|
44
|
+
sequence.push('bar')
|
|
45
|
+
return null
|
|
46
|
+
}),
|
|
38
47
|
settle: mock.fn(),
|
|
39
48
|
dispose: mock.fn()
|
|
40
49
|
}
|
|
@@ -49,11 +58,18 @@ beforeEach(() => {
|
|
|
49
58
|
for (const family of families) {
|
|
50
59
|
assert.ok(family.precall !== undefined)
|
|
51
60
|
|
|
52
|
-
family.precall.mock.mockImplementation(() => {
|
|
61
|
+
family.precall.mock.mockImplementation(() => {
|
|
62
|
+
sequence.push(family.name)
|
|
63
|
+
return null
|
|
64
|
+
})
|
|
53
65
|
}
|
|
54
66
|
|
|
55
|
-
factory = new DirectivesFactory(
|
|
56
|
-
|
|
67
|
+
factory = new DirectivesFactory(
|
|
68
|
+
families,
|
|
69
|
+
{} as unknown as Remotes,
|
|
70
|
+
{} as unknown as Host,
|
|
71
|
+
{ authorities: {} }
|
|
72
|
+
)
|
|
57
73
|
})
|
|
58
74
|
|
|
59
75
|
it('should create directive', async () => {
|
|
@@ -95,8 +111,11 @@ it('should throw error if directive family is not found', async () => {
|
|
|
95
111
|
value: generate()
|
|
96
112
|
}
|
|
97
113
|
|
|
98
|
-
assert.throws(
|
|
99
|
-
(
|
|
114
|
+
assert.throws(
|
|
115
|
+
() => factory.create([declaration]),
|
|
116
|
+
(error: Error) =>
|
|
117
|
+
error.message.includes(`Directive family '${declaration.family}' is not found`)
|
|
118
|
+
)
|
|
100
119
|
})
|
|
101
120
|
|
|
102
121
|
it('should apply directive', async () => {
|
|
@@ -129,7 +148,7 @@ it('should apply mandatory families', async () => {
|
|
|
129
148
|
|
|
130
149
|
describe('order', () => {
|
|
131
150
|
// the order the families actually ran, as each precall recorded it
|
|
132
|
-
function order
|
|
151
|
+
function order(): string[] {
|
|
133
152
|
return sequence
|
|
134
153
|
}
|
|
135
154
|
|
|
@@ -145,18 +164,17 @@ describe('order', () => {
|
|
|
145
164
|
assert.deepStrictEqual(order(), ['foo', 'qux'])
|
|
146
165
|
})
|
|
147
166
|
|
|
148
|
-
it('should run a mandatory family before a declared one it is not declared with',
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
])
|
|
167
|
+
it('should run a mandatory family before a declared one it is not declared with', async () => {
|
|
168
|
+
// only `qux` is declared: `foo` still has to run first, not merely first of
|
|
169
|
+
// whatever had no declarations
|
|
170
|
+
const directives = factory.create([
|
|
171
|
+
{ family: 'qux', name: generate(), value: generate() }
|
|
172
|
+
])
|
|
155
173
|
|
|
156
|
-
|
|
174
|
+
await directives.precall(generate() as unknown as Context, [])
|
|
157
175
|
|
|
158
|
-
|
|
159
|
-
|
|
176
|
+
assert.deepStrictEqual(order(), ['foo', 'qux'])
|
|
177
|
+
})
|
|
160
178
|
|
|
161
179
|
it('should run mandatory families before the rest', async () => {
|
|
162
180
|
const directives = factory.create([
|
|
@@ -170,7 +188,7 @@ describe('order', () => {
|
|
|
170
188
|
})
|
|
171
189
|
})
|
|
172
190
|
|
|
173
|
-
function resetCalls
|
|
191
|
+
function resetCalls(target = [families], seen = new Set()) {
|
|
174
192
|
if (target === null || typeof target !== 'object' || seen.has(target)) return
|
|
175
193
|
|
|
176
194
|
seen.add(target)
|
package/source/Directive.ts
CHANGED
|
@@ -12,7 +12,7 @@ export class Directives implements RTD.Directives {
|
|
|
12
12
|
/** the span of a stage depends only on the set, so it is built once per route */
|
|
13
13
|
private readonly spans: Spans[]
|
|
14
14
|
|
|
15
|
-
public constructor
|
|
15
|
+
public constructor(sets: RTD.DirectiveSet[]) {
|
|
16
16
|
this.sets = sets
|
|
17
17
|
this.spans = sets.map((set) => ({
|
|
18
18
|
precall: options(set, 'precall'),
|
|
@@ -21,29 +21,29 @@ export class Directives implements RTD.Directives {
|
|
|
21
21
|
}))
|
|
22
22
|
}
|
|
23
23
|
|
|
24
|
-
public declared<T>
|
|
25
|
-
return this.sets.find((set) => set.family.name === family)?.directives as
|
|
24
|
+
public declared<T>(family: string): T[] | undefined {
|
|
25
|
+
return this.sets.find((set) => set.family.name === family)?.directives as
|
|
26
|
+
| T[]
|
|
27
|
+
| undefined
|
|
26
28
|
}
|
|
27
29
|
|
|
28
|
-
public async precall
|
|
30
|
+
public async precall(context: Context, parameters: RTD.Parameter[]): Promise<Output> {
|
|
29
31
|
let output = null
|
|
30
32
|
|
|
31
33
|
for (let i = 0; i < this.sets.length; i++) {
|
|
32
34
|
const set = this.sets[i]
|
|
33
35
|
|
|
34
|
-
if (set.family.precall === undefined)
|
|
35
|
-
continue
|
|
36
|
+
if (set.family.precall === undefined) continue
|
|
36
37
|
|
|
37
|
-
const out = await console.span(
|
|
38
|
-
|
|
38
|
+
const out = await console.span(
|
|
39
|
+
this.spans[i].precall,
|
|
40
|
+
async () => await set.family.precall!(set.directives, context, parameters)
|
|
41
|
+
)
|
|
39
42
|
|
|
40
|
-
if (out === null)
|
|
41
|
-
continue
|
|
43
|
+
if (out === null) continue
|
|
42
44
|
|
|
43
|
-
if (output !== null)
|
|
44
|
-
|
|
45
|
-
else
|
|
46
|
-
output = out
|
|
45
|
+
if (output !== null) throw new Error('Multiple precall directives responded')
|
|
46
|
+
else output = out
|
|
47
47
|
}
|
|
48
48
|
|
|
49
49
|
return output
|
|
@@ -54,21 +54,23 @@ export class Directives implements RTD.Directives {
|
|
|
54
54
|
* what the one before it returned, and the first to refuse ends it: a method this caller
|
|
55
55
|
* cannot reach is not described at all.
|
|
56
56
|
*/
|
|
57
|
-
public async explain
|
|
58
|
-
|
|
57
|
+
public async explain(
|
|
58
|
+
context: Context,
|
|
59
|
+
introspection: Introspection
|
|
60
|
+
): Promise<Introspection | null> {
|
|
59
61
|
let described: Introspection = introspection
|
|
60
62
|
|
|
61
63
|
for (let i = 0; i < this.sets.length; i++) {
|
|
62
64
|
const set = this.sets[i]
|
|
63
65
|
|
|
64
|
-
if (set.family.explain === undefined)
|
|
65
|
-
continue
|
|
66
|
+
if (set.family.explain === undefined) continue
|
|
66
67
|
|
|
67
|
-
const next = await console.span(
|
|
68
|
-
|
|
68
|
+
const next = await console.span(
|
|
69
|
+
this.spans[i].explain,
|
|
70
|
+
async () => await set.family.explain!(set.directives, context, described)
|
|
71
|
+
)
|
|
69
72
|
|
|
70
|
-
if (next === null)
|
|
71
|
-
return null
|
|
73
|
+
if (next === null) return null
|
|
72
74
|
|
|
73
75
|
described = next
|
|
74
76
|
}
|
|
@@ -76,19 +78,20 @@ export class Directives implements RTD.Directives {
|
|
|
76
78
|
return described
|
|
77
79
|
}
|
|
78
80
|
|
|
79
|
-
public async settle
|
|
81
|
+
public async settle(context: Context, response: OutgoingMessage): Promise<void> {
|
|
80
82
|
for (let i = 0; i < this.sets.length; i++) {
|
|
81
83
|
const set = this.sets[i]
|
|
82
84
|
|
|
83
85
|
if (set.family.settle !== undefined)
|
|
84
|
-
await console.span(
|
|
85
|
-
|
|
86
|
+
await console.span(
|
|
87
|
+
this.spans[i].settle,
|
|
88
|
+
async () => await set.family.settle!(set.directives, context, response)
|
|
89
|
+
)
|
|
86
90
|
}
|
|
87
91
|
}
|
|
88
92
|
|
|
89
|
-
public dispose
|
|
90
|
-
for (const set of this.sets)
|
|
91
|
-
set.family.dispose?.(set.directives)
|
|
93
|
+
public dispose(): void {
|
|
94
|
+
for (const set of this.sets) set.family.dispose?.(set.directives)
|
|
92
95
|
}
|
|
93
96
|
}
|
|
94
97
|
|
|
@@ -102,14 +105,17 @@ export class DirectivesFactory implements RTD.DirectiveFactory {
|
|
|
102
105
|
private readonly stages: Stage[] = []
|
|
103
106
|
|
|
104
107
|
// eslint-disable-next-line max-params
|
|
105
|
-
public constructor
|
|
106
|
-
|
|
108
|
+
public constructor(
|
|
109
|
+
families: RTD.DirectiveFamily[],
|
|
110
|
+
remotes: Remotes,
|
|
111
|
+
host: Host,
|
|
112
|
+
options: Options
|
|
113
|
+
) {
|
|
107
114
|
for (const family of families) {
|
|
108
115
|
family.mount?.(host, options)
|
|
109
116
|
this.families[family.name] = family
|
|
110
117
|
|
|
111
|
-
if (family.mandatory)
|
|
112
|
-
this.mandatory.push(family.name)
|
|
118
|
+
if (family.mandatory) this.mandatory.push(family.name)
|
|
113
119
|
|
|
114
120
|
this.stages.push({
|
|
115
121
|
family,
|
|
@@ -125,22 +131,24 @@ export class DirectivesFactory implements RTD.DirectiveFactory {
|
|
|
125
131
|
* Request-scoped, before anything is routed, so no directives are passed: a family
|
|
126
132
|
* answers here only for what it does on its own behalf.
|
|
127
133
|
*/
|
|
128
|
-
public async preflight
|
|
134
|
+
public async preflight(context: Context): Promise<void> {
|
|
129
135
|
for (const stage of this.stages)
|
|
130
136
|
if (stage.family.preflight !== undefined)
|
|
131
|
-
await console.span(stage.preflight,
|
|
132
|
-
|
|
137
|
+
await console.span(stage.preflight, async () => {
|
|
138
|
+
await stage.family.preflight!(context)
|
|
139
|
+
})
|
|
133
140
|
}
|
|
134
141
|
|
|
135
142
|
/** Request-scoped, on the message going back. */
|
|
136
|
-
public async depart
|
|
143
|
+
public async depart(context: Context, response: OutgoingMessage): Promise<void> {
|
|
137
144
|
for (const stage of this.stages)
|
|
138
145
|
if (stage.family.depart !== undefined)
|
|
139
|
-
await console.span(stage.depart,
|
|
140
|
-
|
|
146
|
+
await console.span(stage.depart, async () => {
|
|
147
|
+
await stage.family.depart!(context, response)
|
|
148
|
+
})
|
|
141
149
|
}
|
|
142
150
|
|
|
143
|
-
public create
|
|
151
|
+
public create(declarations: RTD.syntax.Directive[], route: string = ''): Directives {
|
|
144
152
|
const groups: Record<string, any> = {}
|
|
145
153
|
const mandatory = new Set(this.mandatory)
|
|
146
154
|
|
|
@@ -152,7 +160,12 @@ export class DirectivesFactory implements RTD.DirectiveFactory {
|
|
|
152
160
|
if (family === undefined)
|
|
153
161
|
throw new Error(`Directive family '${declaration.family}' is not found`)
|
|
154
162
|
|
|
155
|
-
const directive = family.create(
|
|
163
|
+
const directive = family.create(
|
|
164
|
+
declaration.name,
|
|
165
|
+
declaration.value,
|
|
166
|
+
this.remotes,
|
|
167
|
+
route
|
|
168
|
+
)
|
|
156
169
|
|
|
157
170
|
groups[family.name] ??= []
|
|
158
171
|
groups[family.name].push(directive)
|
|
@@ -184,8 +197,7 @@ export class DirectivesFactory implements RTD.DirectiveFactory {
|
|
|
184
197
|
sets.sort((a, b) => this.rank(a.family.name) - this.rank(b.family.name))
|
|
185
198
|
|
|
186
199
|
// whatever order a family needs among its own directives is fixed here, not per request
|
|
187
|
-
for (const set of sets)
|
|
188
|
-
set.family.arrange?.(set.directives)
|
|
200
|
+
for (const set of sets) set.family.arrange?.(set.directives)
|
|
189
201
|
|
|
190
202
|
const directives = new Directives(sets)
|
|
191
203
|
|
|
@@ -194,20 +206,22 @@ export class DirectivesFactory implements RTD.DirectiveFactory {
|
|
|
194
206
|
return directives
|
|
195
207
|
}
|
|
196
208
|
|
|
197
|
-
public dispose
|
|
198
|
-
for (const directives of this.instances)
|
|
199
|
-
directives.dispose()
|
|
209
|
+
public dispose(): void {
|
|
210
|
+
for (const directives of this.instances) directives.dispose()
|
|
200
211
|
}
|
|
201
212
|
|
|
202
213
|
/** Mandatory families first, in their own order; everything else keeps its own. */
|
|
203
|
-
private rank
|
|
214
|
+
private rank(family: string): number {
|
|
204
215
|
const index = this.mandatory.indexOf(family)
|
|
205
216
|
|
|
206
217
|
return index === -1 ? this.mandatory.length : index
|
|
207
218
|
}
|
|
208
219
|
}
|
|
209
220
|
|
|
210
|
-
function options
|
|
221
|
+
function options(
|
|
222
|
+
set: RTD.DirectiveSet,
|
|
223
|
+
stage: 'precall' | 'settle' | 'explain'
|
|
224
|
+
): SpanOptions {
|
|
211
225
|
const options: SpanOptions = { name: `${set.family.name} ${stage}` }
|
|
212
226
|
|
|
213
227
|
if (set.names !== undefined && set.names.length > 0)
|
package/source/Endpoint.test.ts
CHANGED
|
@@ -10,7 +10,7 @@ import type { Parameter } from './RTD/index.js'
|
|
|
10
10
|
* What `Remote.explain` answers is the contract's own object, the same one every time and
|
|
11
11
|
* on every route that mounts the endpoint — which is what this stands in for.
|
|
12
12
|
*/
|
|
13
|
-
function remote
|
|
13
|
+
function remote(): Promise<Remote> {
|
|
14
14
|
const explanation = {
|
|
15
15
|
input: {
|
|
16
16
|
type: 'object',
|