@toa.io/extensions.exposition 1.0.0-alpha.284 → 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 +23 -17
- 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 +45 -31
- 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/mcp.feature +32 -28
- package/features/oauth.grants.feature +1 -1
- package/features/octets.cloudinary.feature +1 -1
- package/features/octets.download.feature +1 -0
- package/features/require.feature +1 -2
- package/features/rpc.feature +21 -21
- 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 -71
- 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 +29 -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 -27
- package/source/MCP/types.ts +4 -1
- 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 +51 -32
- package/source/RPC/names.ts +26 -32
- 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 +64 -27
- 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 +14 -5
- package/source/directives/mcp/Tool.test.ts +42 -6
- package/source/directives/mcp/Tool.ts +38 -7
- 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.d.ts +2 -0
- 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 -6
- package/transpiled/MCP/tools.js.map +1 -1
- package/transpiled/MCP/types.d.ts +3 -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.d.ts +3 -2
- package/transpiled/RPC/names.js +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 +7 -1
- package/transpiled/directives/mcp/MCP.js.map +1 -1
- package/transpiled/directives/mcp/Tool.d.ts +6 -1
- package/transpiled/directives/mcp/Tool.js +16 -3
- 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 -541
- 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
package/features/rpc.feature
CHANGED
|
@@ -43,7 +43,7 @@ Feature: JSON-RPC
|
|
|
43
43
|
accept: application/yaml
|
|
44
44
|
content-type: application/json
|
|
45
45
|
|
|
46
|
-
{"jsonrpc": "2.0", "id": 1, "method": "pots
|
|
46
|
+
{"jsonrpc": "2.0", "id": 1, "method": "pots._id.GET",
|
|
47
47
|
"params": {"id": "4c4759e6f9c74da989d64511df42d6f4"}}
|
|
48
48
|
"""
|
|
49
49
|
Then the following reply is sent:
|
|
@@ -67,7 +67,7 @@ Feature: JSON-RPC
|
|
|
67
67
|
accept: application/yaml
|
|
68
68
|
content-type: application/json
|
|
69
69
|
|
|
70
|
-
{"jsonrpc": "2.0", "id": 2, "method": "pots
|
|
70
|
+
{"jsonrpc": "2.0", "id": 2, "method": "pots.POST",
|
|
71
71
|
"params": {"title": "Kettle", "volume": 1.7}}
|
|
72
72
|
"""
|
|
73
73
|
Then the following reply is sent:
|
|
@@ -88,7 +88,7 @@ Feature: JSON-RPC
|
|
|
88
88
|
accept: application/yaml
|
|
89
89
|
content-type: application/json
|
|
90
90
|
|
|
91
|
-
{"jsonrpc": "2.0", "id": 3, "method": "pots
|
|
91
|
+
{"jsonrpc": "2.0", "id": 3, "method": "pots.GET",
|
|
92
92
|
"params": {"query": {"limit": 1}}}
|
|
93
93
|
"""
|
|
94
94
|
Then the following reply is sent:
|
|
@@ -108,7 +108,7 @@ Feature: JSON-RPC
|
|
|
108
108
|
host: nex.toa.io
|
|
109
109
|
content-type: application/json
|
|
110
110
|
|
|
111
|
-
{"jsonrpc": "2.0", "method": "pots
|
|
111
|
+
{"jsonrpc": "2.0", "method": "pots.POST", "params": {"title": "Pot", "volume": 1}}
|
|
112
112
|
"""
|
|
113
113
|
Then the following reply is sent:
|
|
114
114
|
"""
|
|
@@ -123,7 +123,7 @@ Feature: JSON-RPC
|
|
|
123
123
|
accept: application/yaml
|
|
124
124
|
content-type: application/json
|
|
125
125
|
|
|
126
|
-
{"jsonrpc": "2.0", "id": 4, "method": "kettles
|
|
126
|
+
{"jsonrpc": "2.0", "id": 4, "method": "kettles.GET", "params": {}}
|
|
127
127
|
"""
|
|
128
128
|
Then the following reply is sent:
|
|
129
129
|
"""
|
|
@@ -163,7 +163,7 @@ Feature: JSON-RPC
|
|
|
163
163
|
accept: application/yaml
|
|
164
164
|
content-type: application/json
|
|
165
165
|
|
|
166
|
-
{"jsonrpc": "2.0", "id": 17, "method": "pots
|
|
166
|
+
{"jsonrpc": "2.0", "id": 17, "method": "pots.GET", "params": {}}
|
|
167
167
|
"""
|
|
168
168
|
Then the following reply is sent:
|
|
169
169
|
"""
|
|
@@ -216,7 +216,7 @@ Feature: JSON-RPC
|
|
|
216
216
|
accept: application/yaml
|
|
217
217
|
content-type: application/json
|
|
218
218
|
|
|
219
|
-
{"jsonrpc": "2.0", "id": 5, "method": "pots
|
|
219
|
+
{"jsonrpc": "2.0", "id": 5, "method": "pots._id.GET", "params": {}}
|
|
220
220
|
"""
|
|
221
221
|
Then the following reply is sent:
|
|
222
222
|
"""
|
|
@@ -236,7 +236,7 @@ Feature: JSON-RPC
|
|
|
236
236
|
accept: application/yaml
|
|
237
237
|
content-type: application/json
|
|
238
238
|
|
|
239
|
-
{"jsonrpc": "2.0", "id": 6, "method": "pots
|
|
239
|
+
{"jsonrpc": "2.0", "id": 6, "method": "pots.faulty.GET", "params": {}}
|
|
240
240
|
"""
|
|
241
241
|
Then the following reply is sent:
|
|
242
242
|
"""
|
|
@@ -256,7 +256,7 @@ Feature: JSON-RPC
|
|
|
256
256
|
accept: application/yaml
|
|
257
257
|
content-type: application/json
|
|
258
258
|
|
|
259
|
-
{"jsonrpc": "2.0", "id": 7, "method": "pots
|
|
259
|
+
{"jsonrpc": "2.0", "id": 7, "method": "pots.guarded.GET", "params": {}}
|
|
260
260
|
"""
|
|
261
261
|
Then the following reply is sent:
|
|
262
262
|
"""
|
|
@@ -271,10 +271,10 @@ Feature: JSON-RPC
|
|
|
271
271
|
accept: application/yaml
|
|
272
272
|
content-type: application/json
|
|
273
273
|
|
|
274
|
-
[{"jsonrpc": "2.0", "id": 8, "method": "pots
|
|
274
|
+
[{"jsonrpc": "2.0", "id": 8, "method": "pots._id.GET",
|
|
275
275
|
"params": {"id": "4c4759e6f9c74da989d64511df42d6f4"}},
|
|
276
|
-
{"jsonrpc": "2.0", "id": 9, "method": "kettles
|
|
277
|
-
{"jsonrpc": "2.0", "method": "pots
|
|
276
|
+
{"jsonrpc": "2.0", "id": 9, "method": "kettles.GET", "params": {}},
|
|
277
|
+
{"jsonrpc": "2.0", "method": "pots.POST", "params": {"title": "Pot", "volume": 1}}]
|
|
278
278
|
"""
|
|
279
279
|
Then the following reply is sent:
|
|
280
280
|
"""
|
|
@@ -299,9 +299,9 @@ Feature: JSON-RPC
|
|
|
299
299
|
accept: application/yaml
|
|
300
300
|
content-type: application/json
|
|
301
301
|
|
|
302
|
-
[{"jsonrpc": "2.0", "id": 13, "method": "pots
|
|
303
|
-
{"jsonrpc": "2.0", "id": 14, "method": "pots
|
|
304
|
-
{"jsonrpc": "2.0", "id": 15, "method": "pots
|
|
302
|
+
[{"jsonrpc": "2.0", "id": 13, "method": "pots.GET", "params": {}},
|
|
303
|
+
{"jsonrpc": "2.0", "id": 14, "method": "pots.GET", "params": {}},
|
|
304
|
+
{"jsonrpc": "2.0", "id": 15, "method": "pots.GET", "params": {}}]
|
|
305
305
|
"""
|
|
306
306
|
Then the following reply is sent:
|
|
307
307
|
"""
|
|
@@ -320,8 +320,8 @@ Feature: JSON-RPC
|
|
|
320
320
|
host: nex.toa.io
|
|
321
321
|
content-type: application/json
|
|
322
322
|
|
|
323
|
-
[{"jsonrpc": "2.0", "method": "pots
|
|
324
|
-
{"jsonrpc": "2.0", "method": "pots
|
|
323
|
+
[{"jsonrpc": "2.0", "method": "pots.POST", "params": {"title": "One", "volume": 1}},
|
|
324
|
+
{"jsonrpc": "2.0", "method": "pots.POST", "params": {"title": "Two", "volume": 2}}]
|
|
325
325
|
"""
|
|
326
326
|
Then the following reply is sent:
|
|
327
327
|
"""
|
|
@@ -356,7 +356,7 @@ Feature: JSON-RPC
|
|
|
356
356
|
accept: application/yaml
|
|
357
357
|
content-type: application/json
|
|
358
358
|
|
|
359
|
-
{"jsonrpc": "1.0", "id": 10, "method": "pots
|
|
359
|
+
{"jsonrpc": "1.0", "id": 10, "method": "pots.GET"}
|
|
360
360
|
"""
|
|
361
361
|
Then the following reply is sent:
|
|
362
362
|
"""
|
|
@@ -394,8 +394,8 @@ Feature: JSON-RPC
|
|
|
394
394
|
accept: application/yaml
|
|
395
395
|
content-type: application/json
|
|
396
396
|
|
|
397
|
-
[{"jsonrpc": "2.0", "id": 11, "method": "pots
|
|
398
|
-
{"jsonrpc": "2.0", "id": 12, "method": "pots
|
|
397
|
+
[{"jsonrpc": "2.0", "id": 11, "method": "pots.GET", "params": {}},
|
|
398
|
+
{"jsonrpc": "2.0", "id": 12, "method": "pots.GET", "params": {}}]
|
|
399
399
|
"""
|
|
400
400
|
Then the following reply is sent:
|
|
401
401
|
"""
|
|
@@ -421,7 +421,7 @@ Feature: JSON-RPC
|
|
|
421
421
|
accept: application/yaml
|
|
422
422
|
content-type: application/json
|
|
423
423
|
|
|
424
|
-
{"jsonrpc": "2.0", "id": 9, "method": "pots
|
|
424
|
+
{"jsonrpc": "2.0", "id": 9, "method": "pots.GET", "params": {}}
|
|
425
425
|
"""
|
|
426
426
|
Then the following reply is sent:
|
|
427
427
|
"""
|
|
@@ -8,6 +8,5 @@ import { Before } from '@cucumber/cucumber'
|
|
|
8
8
|
* fresh machine; with one they run, no flag to remember.
|
|
9
9
|
*/
|
|
10
10
|
Before({ tags: '@cloudinary' }, function () {
|
|
11
|
-
if (process.env.CLOUDINARY_ENVIRONMENT === undefined)
|
|
12
|
-
return 'skipped'
|
|
11
|
+
if (process.env.CLOUDINARY_ENVIRONMENT === undefined) return 'skipped'
|
|
13
12
|
})
|
package/features/steps/Common.ts
CHANGED
|
@@ -9,25 +9,24 @@ const { binding, given } = tsflow
|
|
|
9
9
|
export class Common {
|
|
10
10
|
private readonly captures: Captures
|
|
11
11
|
|
|
12
|
-
public constructor
|
|
12
|
+
public constructor(captures: Captures) {
|
|
13
13
|
this.captures = captures
|
|
14
14
|
}
|
|
15
15
|
|
|
16
16
|
@given('after {float} second(s)')
|
|
17
|
-
public async timeout
|
|
17
|
+
public async timeout(interval: number): Promise<void> {
|
|
18
18
|
await timeout(interval * 1000)
|
|
19
19
|
}
|
|
20
20
|
|
|
21
21
|
@given('the process is running')
|
|
22
|
-
public async noop
|
|
23
|
-
}
|
|
22
|
+
public async noop(): Promise<void> {}
|
|
24
23
|
|
|
25
24
|
/**
|
|
26
25
|
* A remote resource is whatever it is today. A scenario downloading one compares the reply
|
|
27
26
|
* against what the origin actually serves, not against a literal that goes stale when it changes.
|
|
28
27
|
*/
|
|
29
28
|
@given('the length of `{}` is captured as `{word}`')
|
|
30
|
-
public async length
|
|
29
|
+
public async length(url: string, name: string): Promise<void> {
|
|
31
30
|
const response = await fetch(url)
|
|
32
31
|
|
|
33
32
|
assert.equal(response.status, 200, `${url} answered ${response.status}`)
|
|
@@ -23,18 +23,18 @@ export class Components {
|
|
|
23
23
|
private readonly gateway: Gateway
|
|
24
24
|
private compositions: Record<string, Connector> = {}
|
|
25
25
|
|
|
26
|
-
public constructor
|
|
26
|
+
public constructor(workspace: Workspace, gateway: Gateway) {
|
|
27
27
|
this.workspace = workspace
|
|
28
28
|
this.gateway = gateway
|
|
29
29
|
}
|
|
30
30
|
|
|
31
31
|
@given('the `{word}` is running')
|
|
32
|
-
public async run
|
|
32
|
+
public async run(name: string): Promise<void> {
|
|
33
33
|
await this.runComponent(name)
|
|
34
34
|
}
|
|
35
35
|
|
|
36
36
|
@given('the `{word}` is running with the following manifest:')
|
|
37
|
-
public async patchAndRun
|
|
37
|
+
public async patchAndRun(name: string, yaml: string): Promise<void> {
|
|
38
38
|
const manifest = parse(yaml) as object
|
|
39
39
|
|
|
40
40
|
await this.runComponent(name, manifest)
|
|
@@ -42,7 +42,7 @@ export class Components {
|
|
|
42
42
|
|
|
43
43
|
/** One composition, as the explorer hosts them. */
|
|
44
44
|
@given('the introspection components are running')
|
|
45
|
-
public async runMap
|
|
45
|
+
public async runMap(): Promise<void> {
|
|
46
46
|
assert.ok(!(MAP in this.compositions), `Composition '${MAP}' is already running`)
|
|
47
47
|
|
|
48
48
|
this.compositions[MAP] = await boot.composition(map())
|
|
@@ -52,8 +52,11 @@ export class Components {
|
|
|
52
52
|
|
|
53
53
|
/** The values component, as the configuration extension ships it; the service hosts it alone. */
|
|
54
54
|
@given('the configuration values are running')
|
|
55
|
-
public async runValues
|
|
56
|
-
assert.ok(
|
|
55
|
+
public async runValues(): Promise<void> {
|
|
56
|
+
assert.ok(
|
|
57
|
+
!(VALUES in this.compositions),
|
|
58
|
+
`Composition '${VALUES}' is already running`
|
|
59
|
+
)
|
|
57
60
|
|
|
58
61
|
await this.gateway.start()
|
|
59
62
|
|
|
@@ -64,12 +67,12 @@ export class Components {
|
|
|
64
67
|
|
|
65
68
|
/** What the deployment would tell the values service, as the scenario needs it. */
|
|
66
69
|
@given('the configuration values are deployed:')
|
|
67
|
-
public deployValues
|
|
70
|
+
public deployValues(yaml: string): void {
|
|
68
71
|
process.env.TOA_CONFIGURATION_VALUES = JSON.stringify(parse(yaml))
|
|
69
72
|
}
|
|
70
73
|
|
|
71
74
|
@given('the `{word}` is stopped')
|
|
72
|
-
public async stop
|
|
75
|
+
public async stop(name: string): Promise<void> {
|
|
73
76
|
assert.ok(name in this.compositions, `Composition '${name}' is not running`)
|
|
74
77
|
|
|
75
78
|
await this.compositions[name].disconnect()
|
|
@@ -77,15 +80,17 @@ export class Components {
|
|
|
77
80
|
}
|
|
78
81
|
|
|
79
82
|
@after()
|
|
80
|
-
public async shutdown
|
|
81
|
-
const promises = Object.values(this.compositions).map((composition) =>
|
|
83
|
+
public async shutdown(): Promise<void> {
|
|
84
|
+
const promises = Object.values(this.compositions).map((composition) =>
|
|
85
|
+
composition.disconnect()
|
|
86
|
+
)
|
|
82
87
|
|
|
83
88
|
await Promise.all(promises)
|
|
84
89
|
|
|
85
90
|
delete process.env.TOA_CONFIGURATION_VALUES
|
|
86
91
|
}
|
|
87
92
|
|
|
88
|
-
private async runComponent
|
|
93
|
+
private async runComponent(name: string, manifest?: object): Promise<void> {
|
|
89
94
|
assert.ok(!(name in this.compositions), `Composition '${name}' is already running`)
|
|
90
95
|
|
|
91
96
|
// the gateway first: a component announces itself when it opens, and that only
|
|
@@ -101,7 +106,7 @@ export class Components {
|
|
|
101
106
|
}
|
|
102
107
|
}
|
|
103
108
|
|
|
104
|
-
function values
|
|
109
|
+
function values(): string {
|
|
105
110
|
const root = dirname(require.resolve('@toa.io/extensions.configuration/package.json'))
|
|
106
111
|
|
|
107
112
|
return join(root, 'components', 'configuration.values')
|
|
@@ -11,66 +11,84 @@ export class Database {
|
|
|
11
11
|
private static client: MongoClient
|
|
12
12
|
|
|
13
13
|
@given('the `{word}` database contains:')
|
|
14
|
-
public async upsert
|
|
14
|
+
public async upsert(id: string, table: DataTable): Promise<void> {
|
|
15
15
|
const collection = this.collection(id)
|
|
16
16
|
const columns = table.raw()[0]
|
|
17
17
|
const rows = table.rows()
|
|
18
18
|
const documents: Document[] = []
|
|
19
19
|
|
|
20
20
|
for (let r = 0; r < rows.length; r++) {
|
|
21
|
-
const document
|
|
21
|
+
const document = {} as Document
|
|
22
22
|
|
|
23
23
|
for (let c = 0; c < columns.length; c++) {
|
|
24
24
|
const str = rows[r][c]
|
|
25
25
|
const int = parseInt(str)
|
|
26
26
|
|
|
27
|
-
document[columns[c]] =
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
27
|
+
document[columns[c]] =
|
|
28
|
+
int.toString() === str
|
|
29
|
+
? int
|
|
30
|
+
: str === 'null'
|
|
31
|
+
? null
|
|
32
|
+
: str === 'true'
|
|
33
|
+
? true
|
|
34
|
+
: str === 'false'
|
|
35
|
+
? false
|
|
36
|
+
: str
|
|
36
37
|
}
|
|
37
38
|
|
|
38
39
|
/*
|
|
39
40
|
* A record that has never been written carries no timestamps, and the entity stamps
|
|
40
41
|
* the ones it is missing as it is read — with the time it was read. The same row then
|
|
41
|
-
* enumerates differently on every request, which is a
|
|
42
|
-
* that is never unmodified.
|
|
42
|
+
* enumerates differently on every request, which is a `last-modified` that moves and a
|
|
43
|
+
* collection that is never unmodified.
|
|
43
44
|
*/
|
|
44
|
-
document.
|
|
45
|
-
document.
|
|
45
|
+
document.CREATED ??= Date.now()
|
|
46
|
+
document.UPDATED ??= document.CREATED
|
|
46
47
|
|
|
47
48
|
documents.push(document)
|
|
48
49
|
}
|
|
49
50
|
|
|
50
|
-
|
|
51
|
+
/*
|
|
52
|
+
* A component the scenario has already started writes to this collection too, and it may
|
|
53
|
+
* write the very row named here — introspection records a node under the same `_id` this
|
|
54
|
+
* derives. Emptying the collection and inserting leaves a window for it to land in
|
|
55
|
+
* between, and the insert then fails on a duplicate key. Replacing each row named, and
|
|
56
|
+
* deleting only what is not, has no such window.
|
|
57
|
+
*/
|
|
58
|
+
const ids = documents.map((document) => document._id)
|
|
59
|
+
|
|
60
|
+
await collection.deleteMany({ _id: { $nin: ids } })
|
|
51
61
|
|
|
52
62
|
if (documents.length > 0)
|
|
53
|
-
await collection.
|
|
63
|
+
await collection.bulkWrite(
|
|
64
|
+
documents.map((document) => ({
|
|
65
|
+
replaceOne: {
|
|
66
|
+
filter: { _id: document._id },
|
|
67
|
+
replacement: document,
|
|
68
|
+
upsert: true
|
|
69
|
+
}
|
|
70
|
+
}))
|
|
71
|
+
)
|
|
54
72
|
}
|
|
55
73
|
|
|
56
74
|
@given('the `{word}` database is empty')
|
|
57
|
-
public async truncate
|
|
75
|
+
public async truncate(id: string): Promise<void> {
|
|
58
76
|
await this.collection(id).deleteMany({})
|
|
59
77
|
}
|
|
60
78
|
|
|
61
79
|
@beforeAll()
|
|
62
|
-
public static async connect
|
|
63
|
-
this.client = new MongoClient('mongodb://developer:secret@localhost:
|
|
80
|
+
public static async connect(): Promise<void> {
|
|
81
|
+
this.client = new MongoClient('mongodb://developer:secret@localhost:31020')
|
|
64
82
|
|
|
65
83
|
await this.client.connect()
|
|
66
84
|
}
|
|
67
85
|
|
|
68
86
|
@afterAll()
|
|
69
|
-
public static async disconnect
|
|
87
|
+
public static async disconnect(): Promise<void> {
|
|
70
88
|
await this.client.close()
|
|
71
89
|
}
|
|
72
90
|
|
|
73
|
-
private collection
|
|
91
|
+
private collection(id: string): Collection<Document> {
|
|
74
92
|
const [name, namespace = 'default'] = id.split('.').reverse()
|
|
75
93
|
const collection = `${namespace}_${name}`.toLowerCase()
|
|
76
94
|
|
|
@@ -78,4 +96,5 @@ export class Database {
|
|
|
78
96
|
}
|
|
79
97
|
}
|
|
80
98
|
|
|
81
|
-
|
|
99
|
+
/** Every fixture table names an `_id`, which is what a row is replaced by. */
|
|
100
|
+
type Document = Record<string, string | number | boolean | null> & { _id: string }
|
|
@@ -3,24 +3,24 @@ import tsflow from 'cucumber-tsflow'
|
|
|
3
3
|
import * as boot from '@toa.io/boot'
|
|
4
4
|
import { type Connector } from '@toa.io/core'
|
|
5
5
|
import { load as parse } from 'js-yaml'
|
|
6
|
-
import { timeout } from '@toa.io/generic'
|
|
7
6
|
import { Factory } from '../../source/index.js'
|
|
8
7
|
import * as syntax from '../../source/RTD/syntax/index.js'
|
|
9
8
|
import { shortcuts } from '../../source/Directive.js'
|
|
10
9
|
import { manifests } from './map.js'
|
|
10
|
+
import { PORT, PROBE } from './Parameters.js'
|
|
11
11
|
import type * as http from '../../source/HTTP/index.js'
|
|
12
12
|
|
|
13
13
|
const { after, afterAll, binding, given } = tsflow
|
|
14
14
|
|
|
15
15
|
let instance: Connector | null = null
|
|
16
|
+
let deployment: string | null = null
|
|
16
17
|
|
|
17
18
|
@binding()
|
|
18
19
|
export class Gateway {
|
|
19
|
-
private default: boolean = true
|
|
20
20
|
private written: string[] = []
|
|
21
21
|
|
|
22
22
|
@given('the annotation:')
|
|
23
|
-
public async annotate
|
|
23
|
+
public async annotate(yaml: string): Promise<void> {
|
|
24
24
|
const annotation = parse(yaml) as Partial<http.Options> & { '/'?: object }
|
|
25
25
|
|
|
26
26
|
if (annotation['/'] !== undefined) {
|
|
@@ -32,32 +32,21 @@ export class Gateway {
|
|
|
32
32
|
const { debug, authorities, bouncer, ip, oauth, rpc, mcp } = annotation
|
|
33
33
|
const properties = Object.assign({}, DEFAULT_PROPERTIES)
|
|
34
34
|
|
|
35
|
-
if (debug !== undefined)
|
|
36
|
-
properties.debug = debug
|
|
35
|
+
if (debug !== undefined) properties.debug = debug
|
|
37
36
|
|
|
38
|
-
if (bouncer !== undefined)
|
|
39
|
-
properties.bouncer = bouncer
|
|
37
|
+
if (bouncer !== undefined) properties.bouncer = bouncer
|
|
40
38
|
|
|
41
|
-
if (ip !== undefined)
|
|
42
|
-
properties.ip = ip
|
|
39
|
+
if (ip !== undefined) properties.ip = ip
|
|
43
40
|
|
|
44
|
-
if (authorities !== undefined)
|
|
45
|
-
properties.authorities = authorities
|
|
41
|
+
if (authorities !== undefined) properties.authorities = authorities
|
|
46
42
|
|
|
47
|
-
if (oauth !== undefined)
|
|
48
|
-
properties.oauth = oauth
|
|
43
|
+
if (oauth !== undefined) properties.oauth = oauth
|
|
49
44
|
|
|
50
|
-
if (rpc !== undefined)
|
|
51
|
-
properties.rpc = rpc
|
|
45
|
+
if (rpc !== undefined) properties.rpc = rpc
|
|
52
46
|
|
|
53
|
-
if (mcp !== undefined)
|
|
54
|
-
properties.mcp = mcp
|
|
47
|
+
if (mcp !== undefined) properties.mcp = mcp
|
|
55
48
|
|
|
56
49
|
process.env.TOA_EXPOSITION_PROPERTIES = JSON.stringify(properties)
|
|
57
|
-
|
|
58
|
-
await Gateway.stop()
|
|
59
|
-
|
|
60
|
-
this.default = false
|
|
61
50
|
}
|
|
62
51
|
|
|
63
52
|
/**
|
|
@@ -65,16 +54,17 @@ export class Gateway {
|
|
|
65
54
|
* exposition extension over them, so what lands here is what a deployment would carry.
|
|
66
55
|
*/
|
|
67
56
|
@given('the annotation of the introspection map')
|
|
68
|
-
public async annotateMap
|
|
57
|
+
public async annotateMap(): Promise<void> {
|
|
69
58
|
await this.annotateMapUnder()
|
|
70
59
|
}
|
|
71
60
|
|
|
72
61
|
/** The same routes under a root of the scenario's own: what an application declares around the map. */
|
|
73
62
|
@given('the annotation of the introspection map under:')
|
|
74
|
-
public async annotateMapUnder
|
|
75
|
-
const tree: syntax.Node =
|
|
76
|
-
|
|
77
|
-
|
|
63
|
+
public async annotateMapUnder(yaml?: string): Promise<void> {
|
|
64
|
+
const tree: syntax.Node =
|
|
65
|
+
yaml === undefined
|
|
66
|
+
? { routes: [], methods: [], directives: [] }
|
|
67
|
+
: syntax.parse((parse(yaml) as { '/': object })['/'], shortcuts)
|
|
78
68
|
|
|
79
69
|
for (const manifest of await manifests()) {
|
|
80
70
|
const node = manifest.extensions?.[EXPOSITION] as syntax.Node | undefined
|
|
@@ -87,14 +77,10 @@ export class Gateway {
|
|
|
87
77
|
|
|
88
78
|
process.env.TOA_EXPOSITION = JSON.stringify(tree)
|
|
89
79
|
process.env.TOA_EXPOSITION_PROPERTIES = JSON.stringify(DEFAULT_PROPERTIES)
|
|
90
|
-
|
|
91
|
-
await Gateway.stop()
|
|
92
|
-
|
|
93
|
-
this.default = false
|
|
94
80
|
}
|
|
95
81
|
|
|
96
82
|
@given('the `{word}` configuration:')
|
|
97
|
-
public async configure
|
|
83
|
+
public async configure(id: string, yaml: string): Promise<void> {
|
|
98
84
|
const [name, namespace = 'default'] = id.split('.').reverse()
|
|
99
85
|
const key = `TOA_CONFIGURATION_${namespace.toUpperCase()}_${name.toUpperCase()}`
|
|
100
86
|
const def = DEFAULT_CONFIGURATION[id] ?? {}
|
|
@@ -105,90 +91,89 @@ export class Gateway {
|
|
|
105
91
|
// outlives the secrets it points at, and the next scenario cannot resolve them
|
|
106
92
|
this.written.push(key)
|
|
107
93
|
process.env[key] = JSON.stringify(configuration)
|
|
108
|
-
|
|
109
|
-
await Gateway.stop()
|
|
110
|
-
|
|
111
|
-
this.default = false
|
|
112
94
|
}
|
|
113
95
|
|
|
114
96
|
/** The secrets a scenario's configuration refers to. */
|
|
115
97
|
@given('the configuration secrets:')
|
|
116
|
-
public async secrets
|
|
98
|
+
public async secrets(yaml: string): Promise<void> {
|
|
117
99
|
const secrets = parse(yaml) as Record<string, string>
|
|
118
100
|
|
|
119
101
|
for (const [name, value] of Object.entries(secrets)) {
|
|
120
102
|
this.written.push(SECRET + name)
|
|
121
103
|
process.env[SECRET + name] = value
|
|
122
104
|
}
|
|
123
|
-
|
|
124
|
-
await Gateway.stop()
|
|
125
|
-
|
|
126
|
-
this.default = false
|
|
127
105
|
}
|
|
128
106
|
|
|
129
107
|
@given('the branch TTL is {float} second(s)')
|
|
130
|
-
public async setBranchTTL
|
|
108
|
+
public async setBranchTTL(seconds: number): Promise<void> {
|
|
131
109
|
process.env.__TESTING_EXPOSITION_BRANCH_TTL = String(seconds * 1000)
|
|
132
|
-
|
|
133
|
-
await Gateway.stop()
|
|
134
|
-
|
|
135
|
-
this.default = false
|
|
136
110
|
}
|
|
137
111
|
|
|
138
112
|
@given('the Gateway is running')
|
|
139
|
-
public async start
|
|
140
|
-
if (instance !== null)
|
|
141
|
-
return
|
|
142
|
-
|
|
113
|
+
public async start(): Promise<void> {
|
|
143
114
|
process.env.TOA_EXPOSITION ??= DEFAULT_TREE
|
|
144
115
|
process.env.TOA_EXPOSITION_PROPERTIES ??= JSON.stringify(DEFAULT_PROPERTIES)
|
|
145
116
|
|
|
146
117
|
this.writeConfiguration()
|
|
147
118
|
|
|
119
|
+
const signature = Gateway.signature()
|
|
120
|
+
|
|
121
|
+
/*
|
|
122
|
+
* A component is published without restarting the gateway, and a scenario that asks for
|
|
123
|
+
* the deployment already running gets that one. Only a different deployment is a restart,
|
|
124
|
+
* which is what an annotation, a configuration or a branch TTL of its own amounts to.
|
|
125
|
+
*/
|
|
126
|
+
if (instance !== null && signature === deployment) return
|
|
127
|
+
|
|
128
|
+
await Gateway.stop()
|
|
129
|
+
|
|
148
130
|
const factory = new Factory(boot.host())
|
|
149
131
|
const service = await factory.service()
|
|
150
132
|
|
|
151
|
-
if (service === null)
|
|
152
|
-
throw new Error('?')
|
|
133
|
+
if (service === null) throw new Error('?')
|
|
153
134
|
|
|
154
135
|
instance = service
|
|
155
136
|
|
|
156
137
|
await service.connect()
|
|
157
138
|
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
139
|
+
deployment = signature
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
/** What the running gateway was built from: a different value is a different deployment. */
|
|
143
|
+
private static signature(): string {
|
|
144
|
+
const configuration = Object.keys(process.env)
|
|
145
|
+
.filter((key) => key.startsWith('TOA_CONFIGURATION_'))
|
|
146
|
+
.sort()
|
|
147
|
+
.map((key) => [key, process.env[key]])
|
|
148
|
+
|
|
149
|
+
return JSON.stringify([
|
|
150
|
+
process.env.TOA_EXPOSITION,
|
|
151
|
+
process.env.TOA_EXPOSITION_PROPERTIES,
|
|
152
|
+
process.env.__TESTING_EXPOSITION_BRANCH_TTL,
|
|
153
|
+
configuration
|
|
154
|
+
])
|
|
165
155
|
}
|
|
166
156
|
|
|
167
157
|
@after()
|
|
168
|
-
public async cleanup
|
|
158
|
+
public async cleanup(): Promise<void> {
|
|
169
159
|
delete process.env.__TESTING_EXPOSITION_BRANCH_TTL
|
|
170
160
|
|
|
171
|
-
for (const key of this.written)
|
|
172
|
-
delete process.env[key]
|
|
161
|
+
for (const key of this.written) delete process.env[key]
|
|
173
162
|
|
|
174
163
|
this.written = []
|
|
175
164
|
|
|
176
|
-
if (this.default)
|
|
177
|
-
return
|
|
178
|
-
|
|
179
165
|
delete process.env.TOA_EXPOSITION
|
|
180
166
|
delete process.env.TOA_EXPOSITION_PROPERTIES
|
|
181
|
-
|
|
182
|
-
await Gateway.stop()
|
|
183
167
|
}
|
|
184
168
|
|
|
185
169
|
@afterAll()
|
|
186
|
-
public static async stop
|
|
170
|
+
public static async stop(): Promise<void> {
|
|
187
171
|
await instance?.disconnect()
|
|
188
172
|
instance = null
|
|
173
|
+
deployment = null
|
|
189
174
|
}
|
|
190
175
|
|
|
191
|
-
private writeConfiguration
|
|
176
|
+
private writeConfiguration(): void {
|
|
192
177
|
for (const [id, configuration] of Object.entries(DEFAULT_CONFIGURATION)) {
|
|
193
178
|
const [name, namespace = 'default'] = id.split('.').reverse()
|
|
194
179
|
const key = `TOA_CONFIGURATION_${namespace.toUpperCase()}_${name.toUpperCase()}`
|
|
@@ -216,13 +201,12 @@ const DEFAULT_TREE = JSON.stringify({
|
|
|
216
201
|
]
|
|
217
202
|
} satisfies syntax.Node)
|
|
218
203
|
|
|
219
|
-
/** Milliseconds a composition is given to finish connecting what it needs. */
|
|
220
|
-
const DISCOVERY = 100
|
|
221
|
-
|
|
222
204
|
const DEFAULT_PROPERTIES: Partial<http.Options> = {
|
|
223
205
|
authorities: {
|
|
224
206
|
nex: 'nex.toa.io'
|
|
225
207
|
},
|
|
208
|
+
port: PORT,
|
|
209
|
+
probe: PROBE,
|
|
226
210
|
// `npm run features:h2c` runs the whole suite over cleartext HTTP/2
|
|
227
211
|
protocol: process.env.TOA_EXPOSITION_PROTOCOL === 'h2c' ? 'h2c' : 'h1'
|
|
228
212
|
}
|