@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
package/features/etag.feature
CHANGED
|
@@ -24,7 +24,6 @@ Feature: Optimistic concurrency control
|
|
|
24
24
|
Then the following reply is sent:
|
|
25
25
|
"""
|
|
26
26
|
201 Created
|
|
27
|
-
etag: "1"
|
|
28
27
|
|
|
29
28
|
id: ${{ id }}
|
|
30
29
|
"""
|
|
@@ -74,88 +73,6 @@ Feature: Optimistic concurrency control
|
|
|
74
73
|
Then the following reply is sent:
|
|
75
74
|
"""
|
|
76
75
|
200 OK
|
|
77
|
-
etag: "2"
|
|
78
|
-
"""
|
|
79
|
-
|
|
80
|
-
Scenario: Using etag with enumeration
|
|
81
|
-
Given the `pots` is running with the following manifest:
|
|
82
|
-
"""yaml
|
|
83
|
-
exposition:
|
|
84
|
-
/:
|
|
85
|
-
io:output: true
|
|
86
|
-
GET: enumerate
|
|
87
|
-
"""
|
|
88
|
-
# sorted and bounded, or the collection does not enumerate the same way twice
|
|
89
|
-
When the following request is received:
|
|
90
|
-
"""
|
|
91
|
-
GET /pots/?sort=id:asc&limit=2 HTTP/1.1
|
|
92
|
-
host: nex.toa.io
|
|
93
|
-
accept: application/yaml
|
|
94
|
-
"""
|
|
95
|
-
Then the following reply is sent:
|
|
96
|
-
"""
|
|
97
|
-
200 OK
|
|
98
|
-
etag: "${{ etag }}"
|
|
99
|
-
"""
|
|
100
|
-
# the same representation must be asked for, the tag identifies it
|
|
101
|
-
When the following request is received:
|
|
102
|
-
"""
|
|
103
|
-
GET /pots/?sort=id:asc&limit=2 HTTP/1.1
|
|
104
|
-
host: nex.toa.io
|
|
105
|
-
accept: application/yaml
|
|
106
|
-
if-none-match: "${{ etag }}"
|
|
107
|
-
"""
|
|
108
|
-
Then the following reply is sent:
|
|
109
|
-
"""
|
|
110
|
-
304 Not Modified
|
|
111
|
-
etag: "${{ etag }}"
|
|
112
|
-
"""
|
|
113
|
-
|
|
114
|
-
Scenario: `etag` of a reply that carries no version
|
|
115
|
-
Given the `echo` is running with the following manifest:
|
|
116
|
-
"""yaml
|
|
117
|
-
exposition:
|
|
118
|
-
/:name:
|
|
119
|
-
io:output: true
|
|
120
|
-
GET: compute
|
|
121
|
-
"""
|
|
122
|
-
When the following request is received:
|
|
123
|
-
"""
|
|
124
|
-
GET /echo/Bob/ HTTP/1.1
|
|
125
|
-
host: nex.toa.io
|
|
126
|
-
accept: text/plain
|
|
127
|
-
"""
|
|
128
|
-
Then the following reply is sent:
|
|
129
|
-
"""
|
|
130
|
-
200 OK
|
|
131
|
-
etag: "2d6a12ffc0a952fbd09f8909de4e0e4b20ba2b906cd12ac22bbef4ee5bd9003e"
|
|
132
|
-
|
|
133
|
-
Hello Bob
|
|
134
|
-
"""
|
|
135
|
-
When the following request is received:
|
|
136
|
-
"""
|
|
137
|
-
GET /echo/Bob/ HTTP/1.1
|
|
138
|
-
host: nex.toa.io
|
|
139
|
-
accept: text/plain
|
|
140
|
-
if-none-match: "2d6a12ffc0a952fbd09f8909de4e0e4b20ba2b906cd12ac22bbef4ee5bd9003e"
|
|
141
|
-
"""
|
|
142
|
-
Then the following reply is sent:
|
|
143
|
-
"""
|
|
144
|
-
304 Not Modified
|
|
145
|
-
etag: "2d6a12ffc0a952fbd09f8909de4e0e4b20ba2b906cd12ac22bbef4ee5bd9003e"
|
|
146
|
-
"""
|
|
147
|
-
# the tag identifies the representation, which is what `vary: accept` says
|
|
148
|
-
When the following request is received:
|
|
149
|
-
"""
|
|
150
|
-
GET /echo/Bob/ HTTP/1.1
|
|
151
|
-
host: nex.toa.io
|
|
152
|
-
accept: application/yaml
|
|
153
|
-
if-none-match: "2d6a12ffc0a952fbd09f8909de4e0e4b20ba2b906cd12ac22bbef4ee5bd9003e"
|
|
154
|
-
"""
|
|
155
|
-
Then the following reply is sent:
|
|
156
|
-
"""
|
|
157
|
-
200 OK
|
|
158
|
-
etag: "360c52c694c418b4a793a4815e611206ab17fe04836351a65638a15d1491810b"
|
|
159
76
|
"""
|
|
160
77
|
|
|
161
78
|
Scenario: Weak `etag`
|
|
@@ -182,7 +99,6 @@ Feature: Optimistic concurrency control
|
|
|
182
99
|
Then the following reply is sent:
|
|
183
100
|
"""
|
|
184
101
|
201 Created
|
|
185
|
-
etag: "1"
|
|
186
102
|
|
|
187
103
|
id: ${{ id }}
|
|
188
104
|
"""
|
|
@@ -232,7 +148,6 @@ Feature: Optimistic concurrency control
|
|
|
232
148
|
Then the following reply is sent:
|
|
233
149
|
"""
|
|
234
150
|
200 OK
|
|
235
|
-
etag: "2"
|
|
236
151
|
"""
|
|
237
152
|
|
|
238
153
|
Scenario: Hash `if-none-match` on versioned resource
|
|
@@ -258,7 +173,6 @@ Feature: Optimistic concurrency control
|
|
|
258
173
|
Then the following reply is sent:
|
|
259
174
|
"""
|
|
260
175
|
201 Created
|
|
261
|
-
etag: "1"
|
|
262
176
|
|
|
263
177
|
id: ${{ id }}
|
|
264
178
|
"""
|
|
@@ -5,9 +5,9 @@ Feature: Bans
|
|
|
5
5
|
Given the `identity.basic` database contains:
|
|
6
6
|
# developer:secret
|
|
7
7
|
# user:12345
|
|
8
|
-
| _id | authority | username | password |
|
|
9
|
-
| efe3a65ebbee47ed95a73edd911ea328 | nex | developer | $2b$10$ZRSKkgZoGnrcTNA5w5eCcu3pxDzdTduhteVYXcp56AaNcilNkwJ.O | null
|
|
10
|
-
| e8e4f9c2a68d419b861403d71fabc915 | nex | user | $2b$10$Frszmrmsz9iwSXzBbRRMKeDVKsNxozkrLNSsN.SnVC.KPxLtQr/bK | null
|
|
8
|
+
| _id | authority | username | password | DELETED |
|
|
9
|
+
| efe3a65ebbee47ed95a73edd911ea328 | nex | developer | $2b$10$ZRSKkgZoGnrcTNA5w5eCcu3pxDzdTduhteVYXcp56AaNcilNkwJ.O | null |
|
|
10
|
+
| e8e4f9c2a68d419b861403d71fabc915 | nex | user | $2b$10$Frszmrmsz9iwSXzBbRRMKeDVKsNxozkrLNSsN.SnVC.KPxLtQr/bK | null |
|
|
11
11
|
And the `identity.bans` database is empty
|
|
12
12
|
|
|
13
13
|
Scenario: Banning an Identity
|
|
@@ -132,8 +132,8 @@ Feature: Basic authentication
|
|
|
132
132
|
access: granted!
|
|
133
133
|
"""
|
|
134
134
|
And the `identity.basic` database contains:
|
|
135
|
-
| _id |
|
|
136
|
-
| efe3a65ebbee47ed95a73edd911ea328 | 1
|
|
135
|
+
| _id | VERSION | authority | username | password |
|
|
136
|
+
| efe3a65ebbee47ed95a73edd911ea328 | 1 | nex | developer | $2b$10$ZRSKkgZoGnrcTNA5w5eCcu3pxDzdTduhteVYXcp56AaNcilNkwJ.O |
|
|
137
137
|
When the following request is received:
|
|
138
138
|
"""
|
|
139
139
|
PATCH /identity/basic/efe3a65ebbee47ed95a73edd911ea328/ HTTP/1.1
|
|
@@ -173,9 +173,9 @@ Feature: Basic authentication
|
|
|
173
173
|
|
|
174
174
|
Scenario: Changing other identity's password
|
|
175
175
|
Given the `identity.basic` database contains:
|
|
176
|
-
| _id | authority | username | password |
|
|
177
|
-
| efe3a65ebbee47ed95a73edd911ea328 | nex | developer | $2b$10$ZRSKkgZoGnrcTNA5w5eCcu3pxDzdTduhteVYXcp56AaNcilNkwJ.O | 1
|
|
178
|
-
| 6c0be50cbfb043acafe69cc7d3895f84 | nex | attacker | $2b$10$ZRSKkgZoGnrcTNA5w5eCcu3pxDzdTduhteVYXcp56AaNcilNkwJ.O | 1
|
|
176
|
+
| _id | authority | username | password | VERSION |
|
|
177
|
+
| efe3a65ebbee47ed95a73edd911ea328 | nex | developer | $2b$10$ZRSKkgZoGnrcTNA5w5eCcu3pxDzdTduhteVYXcp56AaNcilNkwJ.O | 1 |
|
|
178
|
+
| 6c0be50cbfb043acafe69cc7d3895f84 | nex | attacker | $2b$10$ZRSKkgZoGnrcTNA5w5eCcu3pxDzdTduhteVYXcp56AaNcilNkwJ.O | 1 |
|
|
179
179
|
When the following request is received:
|
|
180
180
|
"""
|
|
181
181
|
PATCH /identity/basic/efe3a65ebbee47ed95a73edd911ea328/ HTTP/1.1
|
|
@@ -222,8 +222,8 @@ Feature: Basic authentication
|
|
|
222
222
|
- ^[^A]{1,16}$ # should not contain 'A'
|
|
223
223
|
"""
|
|
224
224
|
And the `identity.basic` database contains:
|
|
225
|
-
| _id |
|
|
226
|
-
| efe3a65ebbee47ed95a73edd911ea328 | 1
|
|
225
|
+
| _id | VERSION | authority | username | password |
|
|
226
|
+
| efe3a65ebbee47ed95a73edd911ea328 | 1 | nex | developer | $2b$10$ZRSKkgZoGnrcTNA5w5eCcu3pxDzdTduhteVYXcp56AaNcilNkwJ.O |
|
|
227
227
|
When the following request is received:
|
|
228
228
|
"""
|
|
229
229
|
PATCH /identity/basic/efe3a65ebbee47ed95a73edd911ea328/ HTTP/1.1
|
|
@@ -508,8 +508,8 @@ Feature: Basic authentication
|
|
|
508
508
|
|
|
509
509
|
Scenario: Check if username is available
|
|
510
510
|
Given the `identity.basic` database contains:
|
|
511
|
-
| _id | authority | username | password |
|
|
512
|
-
| efe3a65ebbee47ed95a73edd911ea328 | nex | developer | $2b$10$ZRSKkgZoGnrcTNA5w5eCcu3pxDzdTduhteVYXcp56AaNcilNkwJ.O | 1
|
|
511
|
+
| _id | authority | username | password | VERSION |
|
|
512
|
+
| efe3a65ebbee47ed95a73edd911ea328 | nex | developer | $2b$10$ZRSKkgZoGnrcTNA5w5eCcu3pxDzdTduhteVYXcp56AaNcilNkwJ.O | 1 |
|
|
513
513
|
When the following request is received:
|
|
514
514
|
"""
|
|
515
515
|
GET /identity/basic/usernames/ZGV2ZWxvcGVy/ HTTP/1.1
|
|
@@ -9,7 +9,7 @@ Feature: Identity Federation
|
|
|
9
9
|
Given the `identity.federation` configuration:
|
|
10
10
|
"""yaml
|
|
11
11
|
trust:
|
|
12
|
-
- iss: http://localhost:
|
|
12
|
+
- iss: http://localhost:31005
|
|
13
13
|
aud: test
|
|
14
14
|
"""
|
|
15
15
|
And the IDP token for User is issued
|
|
@@ -68,14 +68,14 @@ Feature: Identity Federation
|
|
|
68
68
|
200 OK
|
|
69
69
|
|
|
70
70
|
- id: ${{ User.credential }}
|
|
71
|
-
iss: http://localhost:
|
|
71
|
+
iss: http://localhost:31005
|
|
72
72
|
"""
|
|
73
73
|
|
|
74
74
|
Scenario: Creating an Identity using inception
|
|
75
75
|
Given the `identity.federation` configuration:
|
|
76
76
|
"""yaml
|
|
77
77
|
trust:
|
|
78
|
-
- iss: http://localhost:
|
|
78
|
+
- iss: http://localhost:31005
|
|
79
79
|
aud: test
|
|
80
80
|
assert: false
|
|
81
81
|
"""
|
|
@@ -150,7 +150,7 @@ Feature: Identity Federation
|
|
|
150
150
|
200 OK
|
|
151
151
|
|
|
152
152
|
- id: ${{ Bill.credential }}
|
|
153
|
-
iss: http://localhost:
|
|
153
|
+
iss: http://localhost:31005
|
|
154
154
|
"""
|
|
155
155
|
And the following request is received:
|
|
156
156
|
# same credentials
|
|
@@ -171,11 +171,11 @@ Feature: Identity Federation
|
|
|
171
171
|
Given the `identity.federation` configuration:
|
|
172
172
|
"""yaml
|
|
173
173
|
trust:
|
|
174
|
-
- iss: http://localhost:
|
|
174
|
+
- iss: http://localhost:31005
|
|
175
175
|
aud: test
|
|
176
176
|
principal:
|
|
177
177
|
authority: nex
|
|
178
|
-
iss: http://localhost:
|
|
178
|
+
iss: http://localhost:31005
|
|
179
179
|
sub: root
|
|
180
180
|
"""
|
|
181
181
|
And the IDP token for root is issued
|
|
@@ -218,7 +218,7 @@ Feature: Identity Federation
|
|
|
218
218
|
Given the `identity.federation` configuration:
|
|
219
219
|
"""yaml
|
|
220
220
|
trust:
|
|
221
|
-
- iss: http://localhost:
|
|
221
|
+
- iss: http://localhost:31005
|
|
222
222
|
aud: test
|
|
223
223
|
"""
|
|
224
224
|
And the `identity.basic` database is empty
|
|
@@ -260,7 +260,7 @@ Feature: Identity Federation
|
|
|
260
260
|
201 Created
|
|
261
261
|
|
|
262
262
|
id: ${{ Bob.credential }}
|
|
263
|
-
iss: http://localhost:
|
|
263
|
+
iss: http://localhost:31005
|
|
264
264
|
"""
|
|
265
265
|
# the created credential is listed as is
|
|
266
266
|
When the following request is received:
|
|
@@ -275,7 +275,7 @@ Feature: Identity Federation
|
|
|
275
275
|
200 OK
|
|
276
276
|
|
|
277
277
|
- id: ${{ Bob.credential }}
|
|
278
|
-
iss: http://localhost:
|
|
278
|
+
iss: http://localhost:31005
|
|
279
279
|
"""
|
|
280
280
|
And the following request is received:
|
|
281
281
|
"""
|
|
@@ -335,7 +335,7 @@ Feature: Identity Federation
|
|
|
335
335
|
Given the `identity.federation` configuration:
|
|
336
336
|
"""yaml
|
|
337
337
|
trust:
|
|
338
|
-
- iss: http://localhost:
|
|
338
|
+
- iss: http://localhost:31005
|
|
339
339
|
aud: nex
|
|
340
340
|
secret: $IDP_SECRET
|
|
341
341
|
"""
|
|
@@ -363,7 +363,7 @@ Feature: Identity Federation
|
|
|
363
363
|
Given the `identity.federation` configuration:
|
|
364
364
|
"""yaml
|
|
365
365
|
trust:
|
|
366
|
-
- iss: http://localhost:
|
|
366
|
+
- iss: http://localhost:31005
|
|
367
367
|
aud: nex
|
|
368
368
|
signature:
|
|
369
369
|
iss: io.toa.nex.id
|
|
@@ -82,8 +82,8 @@ Feature: Custom tokens
|
|
|
82
82
|
| efe3a65ebbee47ed95a73edd911ea328 | nex | developer | $2b$10$ZRSKkgZoGnrcTNA5w5eCcu3pxDzdTduhteVYXcp56AaNcilNkwJ.O |
|
|
83
83
|
| e8e4f9c2a68d419b861403d71fabc915 | nex | user | $2b$10$Frszmrmsz9iwSXzBbRRMKeDVKsNxozkrLNSsN.SnVC.KPxLtQr/bK |
|
|
84
84
|
And the `identity.roles` database contains:
|
|
85
|
-
| _id | identity | role
|
|
86
|
-
| 9c4702490ff84f2a9e1b1da2ab64bdd4 | efe3a65ebbee47ed95a73edd911ea328 | system:identity:tokens
|
|
85
|
+
| _id | identity | role |
|
|
86
|
+
| 9c4702490ff84f2a9e1b1da2ab64bdd4 | efe3a65ebbee47ed95a73edd911ea328 | system:identity:tokens |
|
|
87
87
|
When the following request is received:
|
|
88
88
|
"""
|
|
89
89
|
POST /identity/tokens/e8e4f9c2a68d419b861403d71fabc915/ HTTP/1.1
|
|
@@ -258,7 +258,7 @@ Feature: Custom tokens
|
|
|
258
258
|
200 OK
|
|
259
259
|
|
|
260
260
|
- id: ${{ kid }}
|
|
261
|
-
|
|
261
|
+
CREATED: ${{ created }}
|
|
262
262
|
label: One-time token
|
|
263
263
|
expires: ${{ expires }}
|
|
264
264
|
"""
|
|
@@ -369,8 +369,8 @@ Feature: Custom tokens
|
|
|
369
369
|
|
|
370
370
|
Scenario: Changing the password revokes custom tokens
|
|
371
371
|
Given the `identity.basic` database contains:
|
|
372
|
-
| _id |
|
|
373
|
-
| efe3a65ebbee47ed95a73edd911ea328 | 1
|
|
372
|
+
| _id | VERSION | authority | username | password |
|
|
373
|
+
| efe3a65ebbee47ed95a73edd911ea328 | 1 | nex | developer | $2b$10$ZRSKkgZoGnrcTNA5w5eCcu3pxDzdTduhteVYXcp56AaNcilNkwJ.O |
|
|
374
374
|
And the `identity.tokens` configuration:
|
|
375
375
|
"""yaml
|
|
376
376
|
cache:
|
|
@@ -92,8 +92,8 @@ Feature: Tokens lifecycle
|
|
|
92
92
|
refresh: 1
|
|
93
93
|
"""
|
|
94
94
|
And the `identity.basic` database contains:
|
|
95
|
-
| _id |
|
|
96
|
-
| efe3a65ebbee47ed95a73edd911ea328 | 1
|
|
95
|
+
| _id | VERSION | authority | username | password |
|
|
96
|
+
| efe3a65ebbee47ed95a73edd911ea328 | 1 | nex | developer | $2b$10$ZRSKkgZoGnrcTNA5w5eCcu3pxDzdTduhteVYXcp56AaNcilNkwJ.O |
|
|
97
97
|
When the following request is received:
|
|
98
98
|
"""
|
|
99
99
|
GET /efe3a65ebbee47ed95a73edd911ea328/ HTTP/1.1
|
|
@@ -20,8 +20,8 @@ Feature: Reading the introspection map
|
|
|
20
20
|
|
|
21
21
|
Scenario: Reading the nodes
|
|
22
22
|
Given the `introspection.nodes` database contains:
|
|
23
|
-
| _id | namespace | component | version |
|
|
24
|
-
| 70e1a6551346c6932657cdb2526df0fa | pots | tea | 7bb04bba | 1
|
|
23
|
+
| _id | namespace | component | version | VERSION | DELETED |
|
|
24
|
+
| 70e1a6551346c6932657cdb2526df0fa | pots | tea | 7bb04bba | 1 | null |
|
|
25
25
|
When the following request is received:
|
|
26
26
|
"""
|
|
27
27
|
GET /introspection/nodes/ HTTP/1.1
|
|
@@ -42,8 +42,8 @@ Feature: Reading the introspection map
|
|
|
42
42
|
|
|
43
43
|
Scenario: Reading one node
|
|
44
44
|
Given the `introspection.nodes` database contains:
|
|
45
|
-
| _id | namespace | component | version |
|
|
46
|
-
| 70e1a6551346c6932657cdb2526df0fa | pots | tea | 7bb04bba | 1
|
|
45
|
+
| _id | namespace | component | version | VERSION | DELETED |
|
|
46
|
+
| 70e1a6551346c6932657cdb2526df0fa | pots | tea | 7bb04bba | 1 | null |
|
|
47
47
|
When the following request is received:
|
|
48
48
|
"""
|
|
49
49
|
GET /introspection/nodes/70e1a6551346c6932657cdb2526df0fa/ HTTP/1.1
|
package/features/map.feature
CHANGED
|
@@ -234,7 +234,7 @@ Feature: HTTP context mapping
|
|
|
234
234
|
And the `identity.federation` configuration:
|
|
235
235
|
"""yaml
|
|
236
236
|
trust:
|
|
237
|
-
- iss: http://localhost:
|
|
237
|
+
- iss: http://localhost:31005
|
|
238
238
|
aud: test
|
|
239
239
|
"""
|
|
240
240
|
And the `echo` is running with the following manifest:
|
|
@@ -269,7 +269,7 @@ Feature: HTTP context mapping
|
|
|
269
269
|
And the `identity.federation` configuration:
|
|
270
270
|
"""yaml
|
|
271
271
|
trust:
|
|
272
|
-
- iss: http://localhost:
|
|
272
|
+
- iss: http://localhost:31005
|
|
273
273
|
aud: test
|
|
274
274
|
assert: false
|
|
275
275
|
"""
|
package/features/require.feature
CHANGED
|
@@ -27,7 +27,6 @@ Feature: Request requirements
|
|
|
27
27
|
Then the following reply is sent:
|
|
28
28
|
"""
|
|
29
29
|
201 Created
|
|
30
|
-
etag: "${{ etag }}"
|
|
31
30
|
|
|
32
31
|
id: ${{ id }}
|
|
33
32
|
"""
|
|
@@ -53,7 +52,7 @@ Feature: Request requirements
|
|
|
53
52
|
host: nex.toa.io
|
|
54
53
|
content-type: application/yaml
|
|
55
54
|
accept: text/plain
|
|
56
|
-
if-match: "
|
|
55
|
+
if-match: "1"
|
|
57
56
|
|
|
58
57
|
title: Bye
|
|
59
58
|
"""
|
|
@@ -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 }
|