@toa.io/extensions.exposition 1.0.0-alpha.0 → 1.0.0-alpha.2
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/context.toa.yaml +12 -0
- package/components/identity.bans/manifest.toa.yaml +1 -1
- package/components/identity.basic/manifest.toa.yaml +2 -2
- package/components/identity.basic/operations/authenticate.d.ts +9 -0
- package/components/identity.basic/operations/authenticate.js +24 -0
- package/components/identity.basic/operations/authenticate.js.map +1 -0
- package/components/identity.basic/operations/create.d.ts +10 -0
- package/components/identity.basic/operations/create.js +10 -0
- package/components/identity.basic/operations/create.js.map +1 -0
- package/components/identity.basic/operations/transit.d.ts +12 -0
- package/components/identity.basic/operations/transit.js +53 -0
- package/components/identity.basic/operations/transit.js.map +1 -0
- package/components/identity.basic/operations/tsconfig.tsbuildinfo +1 -0
- package/components/identity.basic/operations/types.d.ts +38 -0
- package/components/identity.basic/operations/types.js +3 -0
- package/components/identity.basic/operations/types.js.map +1 -0
- package/components/identity.basic/source/authenticate.ts +0 -1
- package/components/identity.federation/events/principal.js +22 -0
- package/components/identity.federation/manifest.toa.yaml +88 -0
- package/components/identity.federation/operations/assertions-as-values.cjs +45 -0
- package/components/identity.federation/operations/assertions-as-values.cjs.map +1 -0
- package/components/identity.federation/operations/assertions-as-values.d.cts +4 -0
- package/components/identity.federation/operations/authenticate.d.ts +3 -0
- package/components/identity.federation/operations/authenticate.js +20 -0
- package/components/identity.federation/operations/authenticate.js.map +1 -0
- package/components/identity.federation/operations/create.d.ts +10 -0
- package/components/identity.federation/operations/create.js +15 -0
- package/components/identity.federation/operations/create.js.map +1 -0
- package/components/identity.federation/operations/jwt.cjs +112 -0
- package/components/identity.federation/operations/jwt.cjs.map +1 -0
- package/components/identity.federation/operations/jwt.d.cts +19 -0
- package/components/identity.federation/operations/schemas.d.ts +43 -0
- package/components/identity.federation/operations/schemas.js +9 -0
- package/components/identity.federation/operations/schemas.js.map +1 -0
- package/components/identity.federation/operations/tsconfig.tsbuildinfo +1 -0
- package/components/identity.federation/operations/types.d.ts +51 -0
- package/components/identity.federation/operations/types.js +3 -0
- package/components/identity.federation/operations/types.js.map +1 -0
- package/components/identity.federation/source/assertions-as-values.cts +20 -0
- package/components/identity.federation/source/authenticate.ts +28 -0
- package/components/identity.federation/source/create.ts +26 -0
- package/components/identity.federation/source/jwt.cts +143 -0
- package/components/identity.federation/source/schemas.ts +45 -0
- package/components/identity.federation/source/types.ts +56 -0
- package/components/identity.federation/tsconfig.json +9 -0
- package/components/identity.roles/operations/list.d.ts +5 -0
- package/components/identity.roles/operations/list.js +8 -0
- package/components/identity.roles/operations/list.js.map +1 -0
- package/components/identity.roles/operations/principal.d.ts +15 -0
- package/components/identity.roles/operations/principal.js +8 -0
- package/components/identity.roles/operations/principal.js.map +1 -0
- package/components/identity.roles/operations/tsconfig.tsbuildinfo +1 -0
- package/components/identity.tokens/manifest.toa.yaml +1 -1
- package/components/identity.tokens/operations/authenticate.d.ts +9 -0
- package/components/identity.tokens/operations/authenticate.js +32 -0
- package/components/identity.tokens/operations/authenticate.js.map +1 -0
- package/components/identity.tokens/operations/decrypt.d.ts +3 -0
- package/components/identity.tokens/operations/decrypt.js +32 -0
- package/components/identity.tokens/operations/decrypt.js.map +1 -0
- package/components/identity.tokens/operations/encrypt.d.ts +8 -0
- package/components/identity.tokens/operations/encrypt.js +22 -0
- package/components/identity.tokens/operations/encrypt.js.map +1 -0
- package/components/identity.tokens/operations/revoke.d.ts +2 -0
- package/components/identity.tokens/operations/revoke.js +8 -0
- package/components/identity.tokens/operations/revoke.js.map +1 -0
- package/components/identity.tokens/operations/tsconfig.tsbuildinfo +1 -0
- package/components/identity.tokens/operations/types.d.ts +40 -0
- package/components/identity.tokens/operations/types.js +3 -0
- package/components/identity.tokens/operations/types.js.map +1 -0
- package/components/octets.storage/manifest.toa.yaml +1 -0
- package/components/octets.storage/operations/store.js +2 -2
- package/cucumber.js +0 -1
- package/documentation/components.md +25 -2
- package/documentation/identity.md +7 -7
- package/documentation/octets.md +93 -40
- package/documentation/protocol.md +21 -1
- package/documentation/query.md +1 -1
- package/documentation/vary.md +69 -0
- package/features/cors.feature +72 -0
- package/features/identity.feature +19 -3
- package/features/identity.federation.feature +125 -0
- package/features/octets.entries.feature +121 -0
- package/features/octets.feature +2 -28
- package/features/octets.meta.feature +65 -0
- package/features/octets.workflows.feature +138 -4
- package/features/response.feature +65 -0
- package/features/routes.feature +37 -0
- package/features/steps/Captures.ts +6 -0
- package/features/steps/Components.ts +18 -6
- package/features/steps/Gateway.ts +1 -2
- package/features/steps/HTTP.ts +40 -87
- package/features/steps/IdP.ts +120 -0
- package/features/steps/Parameters.ts +8 -2
- package/features/steps/Workspace.ts +5 -7
- package/features/steps/components/echo/operations/error.js +11 -0
- package/features/steps/components/octets.tester/manifest.toa.yaml +3 -0
- package/features/steps/components/octets.tester/operations/concat.js +7 -0
- package/features/steps/components/octets.tester/operations/echo.js +7 -0
- package/features/steps/components/users/manifest.toa.yaml +3 -0
- package/features/steps/components/users.properties/manifest.toa.yaml +13 -0
- package/features/steps/tsconfig.json +1 -1
- package/features/vary.feature +150 -0
- package/package.json +17 -18
- package/schemas/octets/delete.cos.yaml +2 -1
- package/schemas/octets/list.cos.yaml +2 -1
- package/source/Directive.test.ts +8 -2
- package/source/Directive.ts +19 -16
- package/source/Factory.ts +8 -7
- package/source/Gateway.ts +22 -8
- package/source/HTTP/Server.fixtures.ts +0 -1
- package/source/HTTP/Server.test.ts +61 -134
- package/source/HTTP/Server.ts +91 -47
- package/source/HTTP/formats/msgpack.ts +9 -6
- package/source/HTTP/formats/text.ts +1 -1
- package/source/HTTP/formats/yaml.ts +1 -1
- package/source/HTTP/messages.ts +15 -3
- package/source/Interception.ts +24 -0
- package/source/RTD/Directives.ts +2 -2
- package/source/RTD/Tree.ts +3 -0
- package/source/RTD/syntax/parse.ts +6 -6
- package/source/RTD/syntax/types.ts +1 -1
- package/source/deployment.ts +1 -2
- package/source/directives/auth/{Family.ts → Authorization.ts} +29 -33
- package/source/directives/auth/Incept.ts +1 -1
- package/source/directives/auth/Rule.ts +2 -2
- package/source/directives/auth/index.ts +2 -2
- package/source/directives/auth/schemes.ts +2 -1
- package/source/directives/auth/types.ts +9 -6
- package/source/directives/cache/{Family.ts → Cache.ts} +4 -5
- package/source/directives/cache/index.ts +2 -2
- package/source/directives/cache/types.ts +1 -1
- package/source/directives/cors/CORS.ts +54 -0
- package/source/directives/cors/index.ts +3 -0
- package/source/directives/dev/{Family.ts → Development.ts} +3 -4
- package/source/directives/dev/Stub.ts +4 -4
- package/source/directives/dev/Throw.ts +4 -4
- package/source/directives/dev/index.ts +2 -2
- package/source/directives/dev/types.ts +1 -1
- package/source/directives/index.ts +10 -6
- package/source/directives/octets/Context.ts +1 -1
- package/source/directives/octets/Delete.ts +50 -9
- package/source/directives/octets/Fetch.ts +18 -19
- package/source/directives/octets/List.ts +37 -7
- package/source/directives/octets/{Family.ts → Octets.ts} +7 -6
- package/source/directives/octets/Permute.ts +3 -3
- package/source/directives/octets/Store.ts +43 -99
- package/source/directives/octets/index.ts +2 -2
- package/source/directives/octets/schemas.ts +11 -6
- package/source/directives/octets/types.ts +4 -3
- package/source/directives/octets/workflow/Execution.ts +78 -0
- package/source/directives/octets/workflow/Workflow.ts +37 -0
- package/source/directives/octets/workflow/index.ts +1 -0
- package/source/directives/vary/Directive.ts +6 -0
- package/source/directives/vary/Embed.ts +62 -0
- package/source/directives/vary/Properties.ts +17 -0
- package/source/directives/vary/Vary.ts +48 -0
- package/source/directives/vary/embeddings/Embedding.ts +6 -0
- package/source/directives/vary/embeddings/Header.ts +30 -0
- package/source/directives/vary/embeddings/Language.ts +31 -0
- package/source/directives/vary/embeddings/index.ts +11 -0
- package/source/directives/vary/index.ts +3 -0
- package/source/io.ts +4 -0
- package/source/manifest.test.ts +6 -14
- package/source/manifest.ts +9 -6
- package/source/schemas.ts +7 -3
- package/transpiled/Annotation.d.ts +7 -0
- package/transpiled/Annotation.js +3 -0
- package/transpiled/Annotation.js.map +1 -0
- package/transpiled/Branch.d.ts +7 -0
- package/transpiled/Branch.js +3 -0
- package/transpiled/Branch.js.map +1 -0
- package/transpiled/Composition.d.ts +14 -0
- package/transpiled/Composition.js +43 -0
- package/transpiled/Composition.js.map +1 -0
- package/transpiled/Context.d.ts +5 -0
- package/transpiled/Context.js +3 -0
- package/transpiled/Context.js.map +1 -0
- package/transpiled/Directive.d.ts +31 -0
- package/transpiled/Directive.js +78 -0
- package/transpiled/Directive.js.map +1 -0
- package/transpiled/Endpoint.d.ts +20 -0
- package/transpiled/Endpoint.js +45 -0
- package/transpiled/Endpoint.js.map +1 -0
- package/transpiled/Factory.d.ts +9 -0
- package/transpiled/Factory.js +67 -0
- package/transpiled/Factory.js.map +1 -0
- package/transpiled/Gateway.d.ts +22 -0
- package/transpiled/Gateway.js +102 -0
- package/transpiled/Gateway.js.map +1 -0
- package/transpiled/HTTP/Server.d.ts +24 -0
- package/transpiled/HTTP/Server.fixtures.d.ts +10 -0
- package/transpiled/HTTP/Server.fixtures.js +31 -0
- package/transpiled/HTTP/Server.fixtures.js.map +1 -0
- package/transpiled/HTTP/Server.js +149 -0
- package/transpiled/HTTP/Server.js.map +1 -0
- package/transpiled/HTTP/exceptions.d.ts +34 -0
- package/transpiled/HTTP/exceptions.js +71 -0
- package/transpiled/HTTP/exceptions.js.map +1 -0
- package/transpiled/HTTP/formats/index.d.ts +10 -0
- package/transpiled/HTTP/formats/index.js +38 -0
- package/transpiled/HTTP/formats/index.js.map +1 -0
- package/transpiled/HTTP/formats/json.d.ts +6 -0
- package/transpiled/HTTP/formats/json.js +17 -0
- package/transpiled/HTTP/formats/json.js.map +1 -0
- package/transpiled/HTTP/formats/msgpack.d.ts +6 -0
- package/transpiled/HTTP/formats/msgpack.js +17 -0
- package/transpiled/HTTP/formats/msgpack.js.map +1 -0
- package/transpiled/HTTP/formats/text.d.ts +8 -0
- package/transpiled/HTTP/formats/text.js +15 -0
- package/transpiled/HTTP/formats/text.js.map +1 -0
- package/transpiled/HTTP/formats/yaml.d.ts +6 -0
- package/transpiled/HTTP/formats/yaml.js +41 -0
- package/transpiled/HTTP/formats/yaml.js.map +1 -0
- package/transpiled/HTTP/index.d.ts +3 -0
- package/transpiled/HTTP/index.js +20 -0
- package/transpiled/HTTP/index.js.map +1 -0
- package/transpiled/HTTP/messages.d.ts +33 -0
- package/transpiled/HTTP/messages.js +75 -0
- package/transpiled/HTTP/messages.js.map +1 -0
- package/transpiled/Interception.d.ts +9 -0
- package/transpiled/Interception.js +19 -0
- package/transpiled/Interception.js.map +1 -0
- package/transpiled/Mapping.d.ts +8 -0
- package/transpiled/Mapping.js +38 -0
- package/transpiled/Mapping.js.map +1 -0
- package/transpiled/Query.d.ts +13 -0
- package/transpiled/Query.js +107 -0
- package/transpiled/Query.js.map +1 -0
- package/transpiled/RTD/Context.d.ts +11 -0
- package/transpiled/RTD/Context.js +3 -0
- package/transpiled/RTD/Context.js.map +1 -0
- package/transpiled/RTD/Directives.d.ts +7 -0
- package/transpiled/RTD/Directives.js +3 -0
- package/transpiled/RTD/Directives.js.map +1 -0
- package/transpiled/RTD/Endpoint.d.ts +9 -0
- package/transpiled/RTD/Endpoint.js +3 -0
- package/transpiled/RTD/Endpoint.js.map +1 -0
- package/transpiled/RTD/Match.d.ts +11 -0
- package/transpiled/RTD/Match.js +3 -0
- package/transpiled/RTD/Match.js.map +1 -0
- package/transpiled/RTD/Method.d.ts +9 -0
- package/transpiled/RTD/Method.js +16 -0
- package/transpiled/RTD/Method.js.map +1 -0
- package/transpiled/RTD/Node.d.ts +21 -0
- package/transpiled/RTD/Node.js +61 -0
- package/transpiled/RTD/Node.js.map +1 -0
- package/transpiled/RTD/Route.d.ts +14 -0
- package/transpiled/RTD/Route.js +49 -0
- package/transpiled/RTD/Route.js.map +1 -0
- package/transpiled/RTD/Tree.d.ts +14 -0
- package/transpiled/RTD/Tree.js +42 -0
- package/transpiled/RTD/Tree.js.map +1 -0
- package/transpiled/RTD/factory.d.ts +6 -0
- package/transpiled/RTD/factory.js +36 -0
- package/transpiled/RTD/factory.js.map +1 -0
- package/transpiled/RTD/index.d.ts +8 -0
- package/transpiled/RTD/index.js +38 -0
- package/transpiled/RTD/index.js.map +1 -0
- package/transpiled/RTD/segment.d.ts +8 -0
- package/transpiled/RTD/segment.js +25 -0
- package/transpiled/RTD/segment.js.map +1 -0
- package/transpiled/RTD/syntax/index.d.ts +2 -0
- package/transpiled/RTD/syntax/index.js +19 -0
- package/transpiled/RTD/syntax/index.js.map +1 -0
- package/transpiled/RTD/syntax/parse.d.ts +4 -0
- package/transpiled/RTD/syntax/parse.js +128 -0
- package/transpiled/RTD/syntax/parse.js.map +1 -0
- package/transpiled/RTD/syntax/types.d.ts +41 -0
- package/transpiled/RTD/syntax/types.js +5 -0
- package/transpiled/RTD/syntax/types.js.map +1 -0
- package/transpiled/Remotes.d.ts +9 -0
- package/transpiled/Remotes.js +25 -0
- package/transpiled/Remotes.js.map +1 -0
- package/transpiled/Tenant.d.ts +13 -0
- package/transpiled/Tenant.js +34 -0
- package/transpiled/Tenant.js.map +1 -0
- package/transpiled/deployment.d.ts +3 -0
- package/transpiled/deployment.js +66 -0
- package/transpiled/deployment.js.map +1 -0
- package/transpiled/directives/auth/Anonymous.d.ts +6 -0
- package/transpiled/directives/auth/Anonymous.js +17 -0
- package/transpiled/directives/auth/Anonymous.js.map +1 -0
- package/transpiled/directives/auth/Authorization.d.ts +20 -0
- package/transpiled/directives/auth/Authorization.js +125 -0
- package/transpiled/directives/auth/Authorization.js.map +1 -0
- package/transpiled/directives/auth/Echo.d.ts +6 -0
- package/transpiled/directives/auth/Echo.js +13 -0
- package/transpiled/directives/auth/Echo.js.map +1 -0
- package/transpiled/directives/auth/Id.d.ts +7 -0
- package/transpiled/directives/auth/Id.js +17 -0
- package/transpiled/directives/auth/Id.js.map +1 -0
- package/transpiled/directives/auth/Incept.d.ts +10 -0
- package/transpiled/directives/auth/Incept.js +58 -0
- package/transpiled/directives/auth/Incept.js.map +1 -0
- package/transpiled/directives/auth/Role.d.ts +11 -0
- package/transpiled/directives/auth/Role.js +44 -0
- package/transpiled/directives/auth/Role.js.map +1 -0
- package/transpiled/directives/auth/Rule.d.ts +9 -0
- package/transpiled/directives/auth/Rule.js +22 -0
- package/transpiled/directives/auth/Rule.js.map +1 -0
- package/transpiled/directives/auth/Scheme.d.ts +7 -0
- package/transpiled/directives/auth/Scheme.js +47 -0
- package/transpiled/directives/auth/Scheme.js.map +1 -0
- package/transpiled/directives/auth/index.d.ts +2 -0
- package/transpiled/directives/auth/index.js +6 -0
- package/transpiled/directives/auth/index.js.map +1 -0
- package/transpiled/directives/auth/schemes.d.ts +3 -0
- package/transpiled/directives/auth/schemes.js +10 -0
- package/transpiled/directives/auth/schemes.js.map +1 -0
- package/transpiled/directives/auth/split.d.ts +2 -0
- package/transpiled/directives/auth/split.js +38 -0
- package/transpiled/directives/auth/split.js.map +1 -0
- package/transpiled/directives/auth/types.d.ts +31 -0
- package/transpiled/directives/auth/types.js +3 -0
- package/transpiled/directives/auth/types.js.map +1 -0
- package/transpiled/directives/cache/Cache.d.ts +11 -0
- package/transpiled/directives/cache/Cache.js +28 -0
- package/transpiled/directives/cache/Cache.js.map +1 -0
- package/transpiled/directives/cache/Control.d.ts +9 -0
- package/transpiled/directives/cache/Control.js +42 -0
- package/transpiled/directives/cache/Control.js.map +1 -0
- package/transpiled/directives/cache/Exact.d.ts +4 -0
- package/transpiled/directives/cache/Exact.js +11 -0
- package/transpiled/directives/cache/Exact.js.map +1 -0
- package/transpiled/directives/cache/index.d.ts +2 -0
- package/transpiled/directives/cache/index.js +6 -0
- package/transpiled/directives/cache/index.js.map +1 -0
- package/transpiled/directives/cache/types.d.ts +7 -0
- package/transpiled/directives/cache/types.js +3 -0
- package/transpiled/directives/cache/types.js.map +1 -0
- package/transpiled/directives/cors/CORS.d.ts +11 -0
- package/transpiled/directives/cors/CORS.js +44 -0
- package/transpiled/directives/cors/CORS.js.map +1 -0
- package/transpiled/directives/cors/index.d.ts +2 -0
- package/transpiled/directives/cors/index.js +6 -0
- package/transpiled/directives/cors/index.js.map +1 -0
- package/transpiled/directives/dev/Development.d.ts +9 -0
- package/transpiled/directives/dev/Development.js +29 -0
- package/transpiled/directives/dev/Development.js.map +1 -0
- package/transpiled/directives/dev/Stub.d.ts +7 -0
- package/transpiled/directives/dev/Stub.js +14 -0
- package/transpiled/directives/dev/Stub.js.map +1 -0
- package/transpiled/directives/dev/Throw.d.ts +7 -0
- package/transpiled/directives/dev/Throw.js +14 -0
- package/transpiled/directives/dev/Throw.js.map +1 -0
- package/transpiled/directives/dev/index.d.ts +2 -0
- package/transpiled/directives/dev/index.js +6 -0
- package/transpiled/directives/dev/index.js.map +1 -0
- package/transpiled/directives/dev/types.d.ts +4 -0
- package/transpiled/directives/dev/types.js +3 -0
- package/transpiled/directives/dev/types.js.map +1 -0
- package/transpiled/directives/index.d.ts +4 -0
- package/transpiled/directives/index.js +12 -0
- package/transpiled/directives/index.js.map +1 -0
- package/transpiled/directives/octets/Context.d.ts +8 -0
- package/transpiled/directives/octets/Context.js +40 -0
- package/transpiled/directives/octets/Context.js.map +1 -0
- package/transpiled/directives/octets/Delete.d.ts +19 -0
- package/transpiled/directives/octets/Delete.js +72 -0
- package/transpiled/directives/octets/Delete.js.map +1 -0
- package/transpiled/directives/octets/Fetch.d.ts +17 -0
- package/transpiled/directives/octets/Fetch.js +76 -0
- package/transpiled/directives/octets/Fetch.js.map +1 -0
- package/transpiled/directives/octets/List.d.ts +15 -0
- package/transpiled/directives/octets/List.js +65 -0
- package/transpiled/directives/octets/List.js.map +1 -0
- package/transpiled/directives/octets/Octets.d.ts +12 -0
- package/transpiled/directives/octets/Octets.js +51 -0
- package/transpiled/directives/octets/Octets.js.map +1 -0
- package/transpiled/directives/octets/Permute.d.ts +10 -0
- package/transpiled/directives/octets/Permute.js +51 -0
- package/transpiled/directives/octets/Permute.js.map +1 -0
- package/transpiled/directives/octets/Store.d.ts +22 -0
- package/transpiled/directives/octets/Store.js +80 -0
- package/transpiled/directives/octets/Store.js.map +1 -0
- package/transpiled/directives/octets/index.d.ts +2 -0
- package/transpiled/directives/octets/index.js +6 -0
- package/transpiled/directives/octets/index.js.map +1 -0
- package/transpiled/directives/octets/schemas.d.ts +11 -0
- package/transpiled/directives/octets/schemas.js +17 -0
- package/transpiled/directives/octets/schemas.js.map +1 -0
- package/transpiled/directives/octets/types.d.ts +10 -0
- package/transpiled/directives/octets/types.js +3 -0
- package/transpiled/directives/octets/types.js.map +1 -0
- package/transpiled/directives/octets/workflow/Execution.d.ts +25 -0
- package/transpiled/directives/octets/workflow/Execution.js +55 -0
- package/transpiled/directives/octets/workflow/Execution.js.map +1 -0
- package/transpiled/directives/octets/workflow/Workflow.d.ts +12 -0
- package/transpiled/directives/octets/workflow/Workflow.js +25 -0
- package/transpiled/directives/octets/workflow/Workflow.js.map +1 -0
- package/transpiled/directives/octets/workflow/index.d.ts +1 -0
- package/transpiled/directives/octets/workflow/index.js +6 -0
- package/transpiled/directives/octets/workflow/index.js.map +1 -0
- package/transpiled/directives/vary/Directive.d.ts +5 -0
- package/transpiled/directives/vary/Directive.js +3 -0
- package/transpiled/directives/vary/Directive.js.map +1 -0
- package/transpiled/directives/vary/Embed.d.ts +10 -0
- package/transpiled/directives/vary/Embed.js +49 -0
- package/transpiled/directives/vary/Embed.js.map +1 -0
- package/transpiled/directives/vary/Properties.d.ts +9 -0
- package/transpiled/directives/vary/Properties.js +16 -0
- package/transpiled/directives/vary/Properties.js.map +1 -0
- package/transpiled/directives/vary/Vary.d.ts +10 -0
- package/transpiled/directives/vary/Vary.js +36 -0
- package/transpiled/directives/vary/Vary.js.map +1 -0
- package/transpiled/directives/vary/embeddings/Embedding.d.ts +5 -0
- package/transpiled/directives/vary/embeddings/Embedding.js +3 -0
- package/transpiled/directives/vary/embeddings/Embedding.js.map +1 -0
- package/transpiled/directives/vary/embeddings/Header.d.ts +7 -0
- package/transpiled/directives/vary/embeddings/Header.js +26 -0
- package/transpiled/directives/vary/embeddings/Header.js.map +1 -0
- package/transpiled/directives/vary/embeddings/Language.d.ts +7 -0
- package/transpiled/directives/vary/embeddings/Language.js +28 -0
- package/transpiled/directives/vary/embeddings/Language.js.map +1 -0
- package/transpiled/directives/vary/embeddings/index.d.ts +5 -0
- package/transpiled/directives/vary/embeddings/index.js +10 -0
- package/transpiled/directives/vary/embeddings/index.js.map +1 -0
- package/transpiled/directives/vary/index.d.ts +2 -0
- package/transpiled/directives/vary/index.js +6 -0
- package/transpiled/directives/vary/index.js.map +1 -0
- package/transpiled/discovery.d.ts +1 -0
- package/transpiled/discovery.js +3 -0
- package/transpiled/discovery.js.map +1 -0
- package/transpiled/exceptions.d.ts +2 -0
- package/transpiled/exceptions.js +39 -0
- package/transpiled/exceptions.js.map +1 -0
- package/transpiled/index.d.ts +5 -0
- package/transpiled/index.js +12 -0
- package/transpiled/index.js.map +1 -0
- package/transpiled/io.d.ts +3 -0
- package/transpiled/io.js +3 -0
- package/transpiled/io.js.map +1 -0
- package/transpiled/manifest.d.ts +3 -0
- package/transpiled/manifest.js +66 -0
- package/transpiled/manifest.js.map +1 -0
- package/transpiled/root.d.ts +2 -0
- package/transpiled/root.js +39 -0
- package/transpiled/root.js.map +1 -0
- package/transpiled/schemas.d.ts +7 -0
- package/transpiled/schemas.js +14 -0
- package/transpiled/schemas.js.map +1 -0
- package/transpiled/tsconfig.tsbuildinfo +1 -0
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
Feature: Identity Federation
|
|
2
|
+
|
|
3
|
+
Background:
|
|
4
|
+
Given the `identity.federation` database is empty
|
|
5
|
+
Given local IDP is running
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
Scenario: Getting identity for a new user
|
|
9
|
+
Given the `identity.federation` configuration:
|
|
10
|
+
"""yaml
|
|
11
|
+
explicit_identity_creation: false
|
|
12
|
+
trust:
|
|
13
|
+
- issuer: http://localhost:44444
|
|
14
|
+
"""
|
|
15
|
+
And the IDP token for User is issued
|
|
16
|
+
When the following request is received:
|
|
17
|
+
"""
|
|
18
|
+
GET /identity/ HTTP/1.1
|
|
19
|
+
authorization: Bearer ${{ User.id_token }}
|
|
20
|
+
accept: application/yaml
|
|
21
|
+
content-type: application/yaml
|
|
22
|
+
"""
|
|
23
|
+
Then the following reply is sent:
|
|
24
|
+
"""
|
|
25
|
+
200 OK
|
|
26
|
+
authorization: Token ${{ User.token }}
|
|
27
|
+
|
|
28
|
+
id: ${{ User.id }}
|
|
29
|
+
roles: []
|
|
30
|
+
scheme: bearer
|
|
31
|
+
"""
|
|
32
|
+
# validate token
|
|
33
|
+
When the following request is received:
|
|
34
|
+
"""
|
|
35
|
+
GET /identity/ HTTP/1.1
|
|
36
|
+
accept: application/yaml
|
|
37
|
+
authorization: Token ${{ User.token }}
|
|
38
|
+
"""
|
|
39
|
+
Then the following reply is sent:
|
|
40
|
+
"""
|
|
41
|
+
200 OK
|
|
42
|
+
id: ${{ User.id }}
|
|
43
|
+
"""
|
|
44
|
+
# ensuring identity idemptotency
|
|
45
|
+
When the following request is received:
|
|
46
|
+
"""
|
|
47
|
+
GET /identity/ HTTP/1.1
|
|
48
|
+
authorization: Bearer ${{ User.id_token }}
|
|
49
|
+
accept: application/yaml
|
|
50
|
+
"""
|
|
51
|
+
Then the following reply is sent:
|
|
52
|
+
"""
|
|
53
|
+
200 OK
|
|
54
|
+
id: ${{ User.id }}
|
|
55
|
+
"""
|
|
56
|
+
|
|
57
|
+
Scenario: Creating an Identity using inception with existing credentials
|
|
58
|
+
Given the `identity.federation` configuration:
|
|
59
|
+
"""yaml
|
|
60
|
+
trust:
|
|
61
|
+
- issuer: http://localhost:44444
|
|
62
|
+
"""
|
|
63
|
+
Given the `users` is running with the following manifest:
|
|
64
|
+
"""yaml
|
|
65
|
+
exposition:
|
|
66
|
+
/:
|
|
67
|
+
anonymous: true
|
|
68
|
+
POST:
|
|
69
|
+
incept: id
|
|
70
|
+
endpoint: transit
|
|
71
|
+
"""
|
|
72
|
+
And the IDP token for Bill is issued
|
|
73
|
+
When the following request is received:
|
|
74
|
+
# identity inception
|
|
75
|
+
"""
|
|
76
|
+
POST /users/ HTTP/1.1
|
|
77
|
+
authorization: Bearer ${{ Bill.id_token }}
|
|
78
|
+
accept: application/yaml
|
|
79
|
+
content-type: application/yaml
|
|
80
|
+
|
|
81
|
+
name: Bill Smith
|
|
82
|
+
"""
|
|
83
|
+
Then the following reply is sent:
|
|
84
|
+
"""
|
|
85
|
+
201 Created
|
|
86
|
+
authorization: Token ${{ Bill.token }}
|
|
87
|
+
|
|
88
|
+
id: ${{ Bill.id }}
|
|
89
|
+
"""
|
|
90
|
+
# check that both tokens corresponds to the same id
|
|
91
|
+
When the following request is received:
|
|
92
|
+
"""
|
|
93
|
+
GET /identity/ HTTP/1.1
|
|
94
|
+
authorization: Token ${{ Bill.token }}
|
|
95
|
+
accept: application/yaml
|
|
96
|
+
"""
|
|
97
|
+
Then the following reply is sent:
|
|
98
|
+
"""
|
|
99
|
+
200 OK
|
|
100
|
+
id: ${{ Bill.id }}
|
|
101
|
+
"""
|
|
102
|
+
When the following request is received:
|
|
103
|
+
"""
|
|
104
|
+
GET /identity/ HTTP/1.1
|
|
105
|
+
authorization: Bearer ${{ Bill.id_token }}
|
|
106
|
+
accept: application/yaml
|
|
107
|
+
"""
|
|
108
|
+
Then the following reply is sent:
|
|
109
|
+
"""
|
|
110
|
+
200 OK
|
|
111
|
+
id: ${{ Bill.id }}
|
|
112
|
+
"""
|
|
113
|
+
And the following request is received:
|
|
114
|
+
# same credentials
|
|
115
|
+
"""
|
|
116
|
+
POST /users/ HTTP/1.1
|
|
117
|
+
authorization: Bearer ${{ Bill.id_token }}
|
|
118
|
+
content-type: text/plain
|
|
119
|
+
|
|
120
|
+
name: Mary Louis
|
|
121
|
+
"""
|
|
122
|
+
Then the following reply is sent:
|
|
123
|
+
"""
|
|
124
|
+
403 Forbidden
|
|
125
|
+
"""
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
Feature: Accessing entires
|
|
2
|
+
|
|
3
|
+
Scenario: Entries are not accessible by default
|
|
4
|
+
Given the annotation:
|
|
5
|
+
"""yaml
|
|
6
|
+
/:
|
|
7
|
+
auth:anonymous: true
|
|
8
|
+
octets:context: octets
|
|
9
|
+
POST:
|
|
10
|
+
octets:store: ~
|
|
11
|
+
GET:
|
|
12
|
+
octets:list: ~
|
|
13
|
+
/*:
|
|
14
|
+
GET:
|
|
15
|
+
octets:fetch: ~
|
|
16
|
+
"""
|
|
17
|
+
When the stream of `lenna.ascii` is received with the following headers:
|
|
18
|
+
"""
|
|
19
|
+
POST / HTTP/1.1
|
|
20
|
+
content-type: application/octet-stream
|
|
21
|
+
"""
|
|
22
|
+
Then the following reply is sent:
|
|
23
|
+
"""
|
|
24
|
+
201 Created
|
|
25
|
+
"""
|
|
26
|
+
When the following request is received:
|
|
27
|
+
"""
|
|
28
|
+
GET / HTTP/1.1
|
|
29
|
+
accept: application/vnd.toa.octets.entries+yaml
|
|
30
|
+
"""
|
|
31
|
+
Then the following reply is sent:
|
|
32
|
+
"""
|
|
33
|
+
403 Forbidden
|
|
34
|
+
|
|
35
|
+
Metadata is not accessible.
|
|
36
|
+
"""
|
|
37
|
+
When the following request is received:
|
|
38
|
+
"""
|
|
39
|
+
GET /10cf16b458f759e0d617f2f3d83599ff HTTP/1.1
|
|
40
|
+
accept: text/vnd.toa.octets.entry+plain
|
|
41
|
+
"""
|
|
42
|
+
Then the following reply is sent:
|
|
43
|
+
"""
|
|
44
|
+
403 Forbidden
|
|
45
|
+
|
|
46
|
+
Metadata is not accessible.
|
|
47
|
+
"""
|
|
48
|
+
|
|
49
|
+
Scenario: Accessing entries
|
|
50
|
+
Given the annotation:
|
|
51
|
+
"""yaml
|
|
52
|
+
/:
|
|
53
|
+
auth:anonymous: true
|
|
54
|
+
octets:context: octets
|
|
55
|
+
POST:
|
|
56
|
+
octets:store: ~
|
|
57
|
+
GET:
|
|
58
|
+
octets:list:
|
|
59
|
+
meta: true
|
|
60
|
+
/*:
|
|
61
|
+
GET:
|
|
62
|
+
octets:fetch:
|
|
63
|
+
meta: true
|
|
64
|
+
"""
|
|
65
|
+
When the stream of `lenna.ascii` is received with the following headers:
|
|
66
|
+
"""
|
|
67
|
+
POST / HTTP/1.1
|
|
68
|
+
accept: application/yaml
|
|
69
|
+
content-type: application/octet-stream
|
|
70
|
+
"""
|
|
71
|
+
And the stream of `lenna.png` is received with the following headers:
|
|
72
|
+
"""
|
|
73
|
+
POST / HTTP/1.1
|
|
74
|
+
accept: application/yaml
|
|
75
|
+
content-type: application/octet-stream
|
|
76
|
+
"""
|
|
77
|
+
When the following request is received:
|
|
78
|
+
"""
|
|
79
|
+
GET / HTTP/1.1
|
|
80
|
+
accept: application/yaml
|
|
81
|
+
"""
|
|
82
|
+
Then the following reply is sent:
|
|
83
|
+
"""
|
|
84
|
+
200 OK
|
|
85
|
+
content-type: application/yaml
|
|
86
|
+
|
|
87
|
+
- 10cf16b458f759e0d617f2f3d83599ff
|
|
88
|
+
- 814a0034f5549e957ee61360d87457e5
|
|
89
|
+
"""
|
|
90
|
+
When the following request is received:
|
|
91
|
+
"""
|
|
92
|
+
GET / HTTP/1.1
|
|
93
|
+
accept: application/vnd.toa.octets.entries+yaml
|
|
94
|
+
"""
|
|
95
|
+
Then the following reply is sent:
|
|
96
|
+
"""
|
|
97
|
+
200 OK
|
|
98
|
+
content-type: application/yaml
|
|
99
|
+
|
|
100
|
+
- id: 10cf16b458f759e0d617f2f3d83599ff
|
|
101
|
+
size: 8169
|
|
102
|
+
type: application/octet-stream
|
|
103
|
+
- id: 814a0034f5549e957ee61360d87457e5
|
|
104
|
+
size: 473831
|
|
105
|
+
type: image/png
|
|
106
|
+
"""
|
|
107
|
+
When the following request is received:
|
|
108
|
+
"""
|
|
109
|
+
GET /10cf16b458f759e0d617f2f3d83599ff HTTP/1.1
|
|
110
|
+
accept: application/vnd.toa.octets.entry+yaml
|
|
111
|
+
"""
|
|
112
|
+
Then the following reply is sent:
|
|
113
|
+
"""
|
|
114
|
+
200 OK
|
|
115
|
+
content-type: application/yaml
|
|
116
|
+
content-length: 124
|
|
117
|
+
|
|
118
|
+
id: 10cf16b458f759e0d617f2f3d83599ff
|
|
119
|
+
type: application/octet-stream
|
|
120
|
+
size: 8169
|
|
121
|
+
"""
|
package/features/octets.feature
CHANGED
|
@@ -70,17 +70,6 @@ Feature: Octets directive family
|
|
|
70
70
|
"""
|
|
71
71
|
304 Not Modified
|
|
72
72
|
"""
|
|
73
|
-
When the following request is received:
|
|
74
|
-
"""
|
|
75
|
-
GET /10cf16b458f759e0d617f2f3d83599ff:meta HTTP/1.1
|
|
76
|
-
accept: text/plain
|
|
77
|
-
"""
|
|
78
|
-
Then the following reply is sent:
|
|
79
|
-
"""
|
|
80
|
-
403 Forbidden
|
|
81
|
-
|
|
82
|
-
Metadata is not accessible.
|
|
83
|
-
"""
|
|
84
73
|
When the following request is received:
|
|
85
74
|
"""
|
|
86
75
|
GET / HTTP/1.1
|
|
@@ -245,10 +234,9 @@ Feature: Octets directive family
|
|
|
245
234
|
Trailing slash is redundant.
|
|
246
235
|
"""
|
|
247
236
|
|
|
248
|
-
Scenario:
|
|
237
|
+
Scenario: Original BLOLB is not accessible
|
|
249
238
|
Given the annotation:
|
|
250
239
|
"""yaml
|
|
251
|
-
debug: true
|
|
252
240
|
/:
|
|
253
241
|
auth:anonymous: true
|
|
254
242
|
octets:context: octets
|
|
@@ -268,24 +256,10 @@ Feature: Octets directive family
|
|
|
268
256
|
"""
|
|
269
257
|
201 Created
|
|
270
258
|
"""
|
|
271
|
-
When the following request is received:
|
|
272
|
-
"""
|
|
273
|
-
GET /10cf16b458f759e0d617f2f3d83599ff:meta HTTP/1.1
|
|
274
|
-
accept: application/yaml
|
|
275
|
-
"""
|
|
276
|
-
Then the following reply is sent:
|
|
277
|
-
"""
|
|
278
|
-
200 OK
|
|
279
|
-
content-type: application/yaml
|
|
280
|
-
content-length: 124
|
|
281
|
-
|
|
282
|
-
id: 10cf16b458f759e0d617f2f3d83599ff
|
|
283
|
-
type: application/octet-stream
|
|
284
|
-
size: 8169
|
|
285
|
-
"""
|
|
286
259
|
When the following request is received:
|
|
287
260
|
"""
|
|
288
261
|
GET /10cf16b458f759e0d617f2f3d83599ff HTTP/1.1
|
|
262
|
+
accept: text/plain
|
|
289
263
|
"""
|
|
290
264
|
Then the following reply is sent:
|
|
291
265
|
"""
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
Feature: Octets `content-meta` header
|
|
2
|
+
|
|
3
|
+
Scenario: Sending `content-meta` header
|
|
4
|
+
Given the `octets.tester` is running
|
|
5
|
+
And the annotation:
|
|
6
|
+
"""yaml
|
|
7
|
+
/:
|
|
8
|
+
auth:anonymous: true
|
|
9
|
+
octets:context: octets
|
|
10
|
+
/*:
|
|
11
|
+
POST:
|
|
12
|
+
octets:store: ~
|
|
13
|
+
/*:
|
|
14
|
+
GET:
|
|
15
|
+
octets:fetch:
|
|
16
|
+
meta: true
|
|
17
|
+
"""
|
|
18
|
+
When the stream of `lenna.ascii` is received with the following headers:
|
|
19
|
+
"""
|
|
20
|
+
POST /meta-header/ HTTP/1.1
|
|
21
|
+
content-type: application/octet-stream
|
|
22
|
+
content-meta: foo, bar=baz=1
|
|
23
|
+
content-meta: baz=1
|
|
24
|
+
"""
|
|
25
|
+
Then the following reply is sent:
|
|
26
|
+
"""
|
|
27
|
+
201 Created
|
|
28
|
+
"""
|
|
29
|
+
When the following request is received:
|
|
30
|
+
"""
|
|
31
|
+
GET /meta-header/10cf16b458f759e0d617f2f3d83599ff HTTP/1.1
|
|
32
|
+
accept: application/vnd.toa.octets.entry+yaml
|
|
33
|
+
"""
|
|
34
|
+
Then the following reply is sent:
|
|
35
|
+
"""
|
|
36
|
+
200 OK
|
|
37
|
+
|
|
38
|
+
id: 10cf16b458f759e0d617f2f3d83599ff
|
|
39
|
+
type: application/octet-stream
|
|
40
|
+
size: 8169
|
|
41
|
+
meta:
|
|
42
|
+
foo: 'true'
|
|
43
|
+
bar: baz=1
|
|
44
|
+
baz: '1'
|
|
45
|
+
"""
|
|
46
|
+
|
|
47
|
+
Scenario: CORS allows `content-meta` header
|
|
48
|
+
Given the annotation:
|
|
49
|
+
"""yaml
|
|
50
|
+
/:
|
|
51
|
+
octets:context: octets
|
|
52
|
+
POST:
|
|
53
|
+
octets:store: ~
|
|
54
|
+
"""
|
|
55
|
+
When the following request is received:
|
|
56
|
+
"""
|
|
57
|
+
OPTIONS / HTTP/1.1
|
|
58
|
+
origin: http://example.com
|
|
59
|
+
"""
|
|
60
|
+
Then the following reply is sent:
|
|
61
|
+
"""
|
|
62
|
+
204 No Content
|
|
63
|
+
access-control-allow-origin: http://example.com
|
|
64
|
+
access-control-allow-headers: accept, authorization, content-type, content-meta
|
|
65
|
+
"""
|
|
@@ -2,7 +2,7 @@ Feature: Octets storage workflows
|
|
|
2
2
|
|
|
3
3
|
Scenario: Running a workflow
|
|
4
4
|
Given the `octets.tester` is running
|
|
5
|
-
|
|
5
|
+
And the annotation:
|
|
6
6
|
"""yaml
|
|
7
7
|
/:
|
|
8
8
|
auth:anonymous: true
|
|
@@ -47,8 +47,8 @@ Feature: Octets storage workflows
|
|
|
47
47
|
"""
|
|
48
48
|
When the following request is received:
|
|
49
49
|
"""
|
|
50
|
-
GET /10cf16b458f759e0d617f2f3d83599ff
|
|
51
|
-
accept: application/yaml
|
|
50
|
+
GET /10cf16b458f759e0d617f2f3d83599ff HTTP/1.1
|
|
51
|
+
accept: application/vnd.toa.octets.entry+yaml
|
|
52
52
|
"""
|
|
53
53
|
Then the following reply is sent:
|
|
54
54
|
"""
|
|
@@ -74,7 +74,7 @@ Feature: Octets storage workflows
|
|
|
74
74
|
content-length: 473831
|
|
75
75
|
"""
|
|
76
76
|
|
|
77
|
-
Scenario: Getting error when
|
|
77
|
+
Scenario: Getting error when running workflow on `store`
|
|
78
78
|
Given the `octets.tester` is running
|
|
79
79
|
Given the annotation:
|
|
80
80
|
"""yaml
|
|
@@ -112,3 +112,137 @@ Feature: Octets storage workflows
|
|
|
112
112
|
message: Something went wrong
|
|
113
113
|
--cut--
|
|
114
114
|
"""
|
|
115
|
+
|
|
116
|
+
Scenario: Running a workflow on `delete`
|
|
117
|
+
Given the `octets.tester` is running
|
|
118
|
+
And the annotation:
|
|
119
|
+
"""yaml
|
|
120
|
+
/:
|
|
121
|
+
auth:anonymous: true
|
|
122
|
+
octets:context: octets
|
|
123
|
+
POST:
|
|
124
|
+
octets:store: ~
|
|
125
|
+
/*:
|
|
126
|
+
GET:
|
|
127
|
+
octets:fetch: ~
|
|
128
|
+
DELETE:
|
|
129
|
+
octets:delete:
|
|
130
|
+
workflow:
|
|
131
|
+
echo: octets.tester.echo
|
|
132
|
+
"""
|
|
133
|
+
When the stream of `lenna.ascii` is received with the following headers:
|
|
134
|
+
"""
|
|
135
|
+
POST / HTTP/1.1
|
|
136
|
+
content-type: application/octet-stream
|
|
137
|
+
"""
|
|
138
|
+
Then the following reply is sent:
|
|
139
|
+
"""
|
|
140
|
+
201 Created
|
|
141
|
+
"""
|
|
142
|
+
When the following request is received:
|
|
143
|
+
"""
|
|
144
|
+
DELETE /10cf16b458f759e0d617f2f3d83599ff HTTP/1.1
|
|
145
|
+
accept: application/yaml
|
|
146
|
+
"""
|
|
147
|
+
Then the following reply is sent:
|
|
148
|
+
"""
|
|
149
|
+
202 Accepted
|
|
150
|
+
content-type: multipart/yaml; boundary=cut
|
|
151
|
+
|
|
152
|
+
--cut
|
|
153
|
+
echo: 10cf16b458f759e0d617f2f3d83599ff
|
|
154
|
+
--cut--
|
|
155
|
+
"""
|
|
156
|
+
When the following request is received:
|
|
157
|
+
"""
|
|
158
|
+
GET /10cf16b458f759e0d617f2f3d83599ff HTTP/1.1
|
|
159
|
+
"""
|
|
160
|
+
Then the following reply is sent:
|
|
161
|
+
"""
|
|
162
|
+
404 Not Found
|
|
163
|
+
"""
|
|
164
|
+
|
|
165
|
+
Scenario: Error in the workflow on `delete`
|
|
166
|
+
Given the `octets.tester` is running
|
|
167
|
+
And the annotation:
|
|
168
|
+
"""yaml
|
|
169
|
+
/:
|
|
170
|
+
auth:anonymous: true
|
|
171
|
+
octets:context: octets
|
|
172
|
+
POST:
|
|
173
|
+
octets:store: ~
|
|
174
|
+
/*:
|
|
175
|
+
GET:
|
|
176
|
+
octets:fetch: ~
|
|
177
|
+
DELETE:
|
|
178
|
+
octets:delete:
|
|
179
|
+
workflow:
|
|
180
|
+
err: octets.tester.err
|
|
181
|
+
"""
|
|
182
|
+
When the stream of `lenna.ascii` is received with the following headers:
|
|
183
|
+
"""
|
|
184
|
+
POST / HTTP/1.1
|
|
185
|
+
content-type: application/octet-stream
|
|
186
|
+
"""
|
|
187
|
+
Then the following reply is sent:
|
|
188
|
+
"""
|
|
189
|
+
201 Created
|
|
190
|
+
"""
|
|
191
|
+
When the following request is received:
|
|
192
|
+
"""
|
|
193
|
+
DELETE /10cf16b458f759e0d617f2f3d83599ff HTTP/1.1
|
|
194
|
+
accept: application/yaml
|
|
195
|
+
"""
|
|
196
|
+
Then the following reply is sent:
|
|
197
|
+
"""
|
|
198
|
+
202 Accepted
|
|
199
|
+
content-type: multipart/yaml; boundary=cut
|
|
200
|
+
|
|
201
|
+
--cut
|
|
202
|
+
error:
|
|
203
|
+
step: err
|
|
204
|
+
code: ERROR
|
|
205
|
+
message: Something went wrong
|
|
206
|
+
--cut--
|
|
207
|
+
"""
|
|
208
|
+
When the following request is received:
|
|
209
|
+
"""
|
|
210
|
+
GET /10cf16b458f759e0d617f2f3d83599ff HTTP/1.1
|
|
211
|
+
"""
|
|
212
|
+
Then the following reply is sent:
|
|
213
|
+
"""
|
|
214
|
+
200 OK
|
|
215
|
+
"""
|
|
216
|
+
|
|
217
|
+
Scenario: Passing parameters to the workflow
|
|
218
|
+
Given the `octets.tester` is running
|
|
219
|
+
And the annotation:
|
|
220
|
+
"""yaml
|
|
221
|
+
/:
|
|
222
|
+
/:a/:b:
|
|
223
|
+
auth:anonymous: true
|
|
224
|
+
octets:context: octets
|
|
225
|
+
POST:
|
|
226
|
+
octets:store:
|
|
227
|
+
workflow:
|
|
228
|
+
concat: octets.tester.concat
|
|
229
|
+
"""
|
|
230
|
+
When the stream of `lenna.ascii` is received with the following headers:
|
|
231
|
+
"""
|
|
232
|
+
POST /hello/world/ HTTP/1.1
|
|
233
|
+
accept: application/yaml
|
|
234
|
+
content-type: application/octet-stream
|
|
235
|
+
"""
|
|
236
|
+
Then the following reply is sent:
|
|
237
|
+
"""
|
|
238
|
+
201 Created
|
|
239
|
+
content-type: multipart/yaml; boundary=cut
|
|
240
|
+
|
|
241
|
+
--cut
|
|
242
|
+
id: 10cf16b458f759e0d617f2f3d83599ff
|
|
243
|
+
type: application/octet-stream
|
|
244
|
+
size: 8169
|
|
245
|
+
--cut
|
|
246
|
+
concat: hello world
|
|
247
|
+
--cut--
|
|
248
|
+
"""
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
Feature: Response
|
|
2
|
+
|
|
3
|
+
Scenario: Content negotiation
|
|
4
|
+
Given the annotation:
|
|
5
|
+
"""yaml
|
|
6
|
+
/:
|
|
7
|
+
GET:
|
|
8
|
+
anonymous: true
|
|
9
|
+
dev:stub: hello
|
|
10
|
+
"""
|
|
11
|
+
When the following request is received:
|
|
12
|
+
"""
|
|
13
|
+
GET / HTTP/1.1
|
|
14
|
+
accept: application/json
|
|
15
|
+
"""
|
|
16
|
+
Then the following reply is sent:
|
|
17
|
+
"""
|
|
18
|
+
200 OK
|
|
19
|
+
content-type: application/json
|
|
20
|
+
vary: accept
|
|
21
|
+
"""
|
|
22
|
+
|
|
23
|
+
Scenario: Error as YAML
|
|
24
|
+
Given the `echo` is running with the following manifest:
|
|
25
|
+
"""yaml
|
|
26
|
+
exposition:
|
|
27
|
+
/:
|
|
28
|
+
GET: error
|
|
29
|
+
"""
|
|
30
|
+
When the following request is received:
|
|
31
|
+
"""
|
|
32
|
+
GET /echo/ HTTP/1.1
|
|
33
|
+
accept: application/yaml
|
|
34
|
+
"""
|
|
35
|
+
Then the following reply is sent:
|
|
36
|
+
"""
|
|
37
|
+
409 Conflict
|
|
38
|
+
content-type: application/yaml
|
|
39
|
+
|
|
40
|
+
code: CODE
|
|
41
|
+
message: message
|
|
42
|
+
"""
|
|
43
|
+
|
|
44
|
+
Scenario: Error as MessagePack
|
|
45
|
+
Given the `echo` is running with the following manifest:
|
|
46
|
+
"""yaml
|
|
47
|
+
exposition:
|
|
48
|
+
/:
|
|
49
|
+
GET: error
|
|
50
|
+
"""
|
|
51
|
+
When the following request is received:
|
|
52
|
+
"""
|
|
53
|
+
GET /echo/ HTTP/1.1
|
|
54
|
+
accept: application/msgpack
|
|
55
|
+
"""
|
|
56
|
+
Then the following reply is sent:
|
|
57
|
+
"""
|
|
58
|
+
409 Conflict
|
|
59
|
+
content-type: application/msgpack
|
|
60
|
+
"""
|
|
61
|
+
And response body contains MessagePack-encoded value:
|
|
62
|
+
"""yaml
|
|
63
|
+
code: CODE
|
|
64
|
+
message: message
|
|
65
|
+
"""
|
package/features/routes.feature
CHANGED
|
@@ -87,3 +87,40 @@ Feature: Routes
|
|
|
87
87
|
|
|
88
88
|
Hello
|
|
89
89
|
"""
|
|
90
|
+
|
|
91
|
+
Scenario: Routes with naming conflicts
|
|
92
|
+
Given the Gateway is running
|
|
93
|
+
And the `users` is running with the following manifest:
|
|
94
|
+
"""yaml
|
|
95
|
+
exposition:
|
|
96
|
+
/:
|
|
97
|
+
POST: create
|
|
98
|
+
"""
|
|
99
|
+
And the `users.properties` is running with the following manifest:
|
|
100
|
+
"""yaml
|
|
101
|
+
exposition:
|
|
102
|
+
/:id:
|
|
103
|
+
GET: observe
|
|
104
|
+
"""
|
|
105
|
+
When the following request is received:
|
|
106
|
+
"""
|
|
107
|
+
GET /users/properties/b5534021e30042259badffbd1831e472/ HTTP/1.1
|
|
108
|
+
accept: application/yaml
|
|
109
|
+
"""
|
|
110
|
+
Then the following reply is sent:
|
|
111
|
+
"""
|
|
112
|
+
200 OK
|
|
113
|
+
|
|
114
|
+
newbie: false
|
|
115
|
+
"""
|
|
116
|
+
When the following request is received:
|
|
117
|
+
"""
|
|
118
|
+
POST /users/ HTTP/1.1
|
|
119
|
+
content-type: application/yaml
|
|
120
|
+
|
|
121
|
+
name: Alice
|
|
122
|
+
"""
|
|
123
|
+
Then the following reply is sent:
|
|
124
|
+
"""
|
|
125
|
+
201 Created
|
|
126
|
+
"""
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import * as assert from 'node:assert'
|
|
1
2
|
import { after, binding, given } from 'cucumber-tsflow'
|
|
2
3
|
import * as boot from '@toa.io/boot'
|
|
3
4
|
import { timeout } from '@toa.io/generic'
|
|
@@ -8,7 +9,7 @@ import { Workspace } from './Workspace'
|
|
|
8
9
|
@binding([Workspace])
|
|
9
10
|
export class Components {
|
|
10
11
|
private readonly workspace: Workspace
|
|
11
|
-
private
|
|
12
|
+
private compositions: Record<string, Connector> = {}
|
|
12
13
|
|
|
13
14
|
public constructor (workspace: Workspace) {
|
|
14
15
|
this.workspace = workspace
|
|
@@ -26,18 +27,29 @@ export class Components {
|
|
|
26
27
|
await this.runComponent(name, manifest)
|
|
27
28
|
}
|
|
28
29
|
|
|
29
|
-
@after()
|
|
30
30
|
@given('the `{word}` is stopped')
|
|
31
|
-
public async stop (
|
|
32
|
-
|
|
31
|
+
public async stop (name: string): Promise<void> {
|
|
32
|
+
assert.ok(name in this.compositions, `Composition '${name}' is not running`)
|
|
33
|
+
|
|
34
|
+
await this.compositions[name].disconnect()
|
|
35
|
+
delete this.compositions[name]
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
@after()
|
|
39
|
+
public async shutdown (): Promise<void> {
|
|
40
|
+
const promises = Object.values(this.compositions).map((composition) => composition.disconnect())
|
|
41
|
+
|
|
42
|
+
await Promise.all(promises)
|
|
33
43
|
}
|
|
34
44
|
|
|
35
45
|
private async runComponent (name: string, manifest?: object): Promise<void> {
|
|
46
|
+
assert.ok(!(name in this.compositions), `Composition '${name}' is already running`)
|
|
47
|
+
|
|
36
48
|
const path = await this.workspace.addComponent(name, manifest)
|
|
37
49
|
|
|
38
|
-
this.
|
|
50
|
+
this.compositions[name] = await boot.composition([path])
|
|
39
51
|
|
|
40
|
-
await this.
|
|
52
|
+
await this.compositions[name].connect()
|
|
41
53
|
await timeout(50) // discovery
|
|
42
54
|
}
|
|
43
55
|
}
|
|
@@ -18,8 +18,7 @@ export class Gateway {
|
|
|
18
18
|
const annotation = parse(yaml)
|
|
19
19
|
|
|
20
20
|
if ('/' in annotation) {
|
|
21
|
-
const
|
|
22
|
-
const tree = syntax.parse(node, shortcuts)
|
|
21
|
+
const tree = syntax.parse(annotation['/'], shortcuts)
|
|
23
22
|
|
|
24
23
|
process.env.TOA_EXPOSITION = encode(tree)
|
|
25
24
|
}
|