@toa.io/extensions.exposition 0.24.0-alpha.2 → 0.24.0-alpha.21
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/cucumber.js +0 -1
- package/documentation/components.md +25 -2
- package/documentation/identity.md +7 -7
- package/documentation/protocol.md +21 -1
- package/documentation/query.md +1 -1
- package/documentation/vary.md +69 -0
- package/features/cors.feature +39 -0
- package/features/identity.feature +19 -3
- package/features/identity.federation.feature +125 -0
- package/features/octets.feature +1 -1
- package/features/response.feature +65 -0
- package/features/steps/Captures.ts +5 -0
- package/features/steps/Components.ts +5 -0
- package/features/steps/Gateway.ts +1 -2
- package/features/steps/HTTP.ts +39 -84
- 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/vary.feature +150 -0
- package/package.json +17 -18
- 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 +45 -23
- 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 +8 -2
- 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 +52 -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 +1 -2
- package/source/directives/octets/Fetch.ts +1 -1
- package/source/directives/octets/List.ts +1 -1
- package/source/directives/octets/{Family.ts → Octets.ts} +3 -4
- package/source/directives/octets/Permute.ts +1 -1
- package/source/directives/octets/Store.ts +3 -3
- package/source/directives/octets/index.ts +2 -2
- package/source/directives/octets/types.ts +3 -3
- 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/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 +148 -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 +32 -0
- package/transpiled/HTTP/messages.js +72 -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 +14 -0
- package/transpiled/directives/cors/CORS.js +42 -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 +10 -0
- package/transpiled/directives/octets/Delete.js +47 -0
- package/transpiled/directives/octets/Delete.js.map +1 -0
- package/transpiled/directives/octets/Fetch.d.ts +18 -0
- package/transpiled/directives/octets/Fetch.js +77 -0
- package/transpiled/directives/octets/Fetch.js.map +1 -0
- package/transpiled/directives/octets/List.d.ts +10 -0
- package/transpiled/directives/octets/List.js +47 -0
- package/transpiled/directives/octets/List.js.map +1 -0
- package/transpiled/directives/octets/Octets.d.ts +11 -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 +33 -0
- package/transpiled/directives/octets/Store.js +124 -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 +6 -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 +9 -0
- package/transpiled/directives/octets/types.js +3 -0
- package/transpiled/directives/octets/types.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 +61 -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 +3 -0
- package/transpiled/schemas.js +14 -0
- package/transpiled/schemas.js.map +1 -0
- package/transpiled/tsconfig.tsbuildinfo +1 -0
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { type Call, type Maybe, type Observation } from '@toa.io/types';
|
|
2
|
+
export interface Context {
|
|
3
|
+
local: {
|
|
4
|
+
observe: Observation<Entity>;
|
|
5
|
+
decrypt: Call<Maybe<DecryptOutput>, string>;
|
|
6
|
+
};
|
|
7
|
+
configuration: Configuration;
|
|
8
|
+
}
|
|
9
|
+
export interface Configuration {
|
|
10
|
+
readonly key0: string;
|
|
11
|
+
readonly key1?: string;
|
|
12
|
+
readonly lifetime: number;
|
|
13
|
+
readonly refresh: number;
|
|
14
|
+
}
|
|
15
|
+
export interface Entity {
|
|
16
|
+
identity: string;
|
|
17
|
+
revokedAt: number;
|
|
18
|
+
}
|
|
19
|
+
export interface Identity extends Record<string, any> {
|
|
20
|
+
id: string;
|
|
21
|
+
}
|
|
22
|
+
export interface AuthenticateOutput {
|
|
23
|
+
identity: Identity;
|
|
24
|
+
refresh: boolean;
|
|
25
|
+
}
|
|
26
|
+
export interface EncryptInput {
|
|
27
|
+
identity: Identity;
|
|
28
|
+
lifetime?: number;
|
|
29
|
+
}
|
|
30
|
+
export interface DecryptOutput {
|
|
31
|
+
identity: Identity;
|
|
32
|
+
iat: string;
|
|
33
|
+
exp?: string;
|
|
34
|
+
refresh: boolean;
|
|
35
|
+
}
|
|
36
|
+
export interface Claim {
|
|
37
|
+
identity: Identity;
|
|
38
|
+
iat: string;
|
|
39
|
+
exp?: string;
|
|
40
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../source/types.ts"],"names":[],"mappings":""}
|
package/cucumber.js
CHANGED
|
@@ -34,7 +34,7 @@ them).
|
|
|
34
34
|
configuration:
|
|
35
35
|
identity.basic:
|
|
36
36
|
username:
|
|
37
|
-
- ^\S{1,
|
|
37
|
+
- ^\S{1,128}$
|
|
38
38
|
password:
|
|
39
39
|
- ^\S{8,32}$
|
|
40
40
|
```
|
|
@@ -89,9 +89,32 @@ password?: string
|
|
|
89
89
|
|
|
90
90
|
Access requires basic credentials of the modified Identity or `system:identity:basic` role.
|
|
91
91
|
|
|
92
|
+
## Identity federation (OpenID connect)
|
|
93
|
+
|
|
94
|
+
The `identity.federation` component manages OpenID Connect federated identities.
|
|
95
|
+
|
|
96
|
+
Both implicit identities creation and forced [identity inception](./identity.md) are supported
|
|
97
|
+
as in case with basic credentials. `principal` is also working in the same way.
|
|
98
|
+
|
|
99
|
+
The configuration schema alongside default values is described in the [component manifest](../components/identity.federation/manifest.toa.yaml).
|
|
100
|
+
|
|
101
|
+
No federated tokens are accepted by default until at least one entry is added to the `trust` configuration.
|
|
102
|
+
|
|
103
|
+
```yaml
|
|
104
|
+
# context.toa.yaml
|
|
105
|
+
|
|
106
|
+
configuration:
|
|
107
|
+
identity.federation:
|
|
108
|
+
trust:
|
|
109
|
+
- issuer: https://token.actions.githubusercontent.com
|
|
110
|
+
audience:
|
|
111
|
+
- https://github.com/tinovyatkin
|
|
112
|
+
- https://github.com/temich
|
|
113
|
+
```
|
|
114
|
+
|
|
92
115
|
## Stateless tokens
|
|
93
116
|
|
|
94
|
-
The `identity.tokens` component manages
|
|
117
|
+
The `identity.tokens` component manages stateless authentication tokens.
|
|
95
118
|
|
|
96
119
|
These tokens carry the information required to authenticate the Identity and authorize access.
|
|
97
120
|
|
|
@@ -69,20 +69,20 @@ to [OpenID Connect Core 1.0](https://openid.net/specs/openid-connect-core-1_0.ht
|
|
|
69
69
|
Authorization: Bearer eyJhbGciOiJIUzI1...
|
|
70
70
|
```
|
|
71
71
|
|
|
72
|
-
Trusted providers are specified using the `
|
|
72
|
+
Trusted providers are specified using the `identity.federation` property within the configuration annotation.
|
|
73
73
|
|
|
74
74
|
```yaml
|
|
75
75
|
# context.toa.yaml
|
|
76
76
|
|
|
77
|
-
|
|
78
|
-
identity:
|
|
77
|
+
configuration:
|
|
78
|
+
identity.federation:
|
|
79
79
|
trust:
|
|
80
|
-
- https://accounts.google.com
|
|
81
|
-
|
|
80
|
+
- issuer: https://accounts.google.com
|
|
81
|
+
audience:
|
|
82
|
+
- <GOOGLE_CLIENT_ID>
|
|
83
|
+
- issuer: https://appleid.apple.com
|
|
82
84
|
```
|
|
83
85
|
|
|
84
|
-
The example above demonstrates the default list of trusted providers.
|
|
85
|
-
|
|
86
86
|
## Identity inception
|
|
87
87
|
|
|
88
88
|
The simplest way to establish a relationship between an Identity and an entity representing a user
|
|
@@ -27,7 +27,8 @@ foo: bar
|
|
|
27
27
|
### Multipart types
|
|
28
28
|
|
|
29
29
|
Multipart responses are endoded using content negotiation,
|
|
30
|
-
and the `content-type` of the response is set to one of the custom `multipart/` subtypes,
|
|
30
|
+
and the `content-type` of the response is set to one of the custom `multipart/` subtypes,
|
|
31
|
+
corresponding to the type of
|
|
31
32
|
the parts:
|
|
32
33
|
|
|
33
34
|
| Response type | Part type |
|
|
@@ -60,3 +61,22 @@ See also:
|
|
|
60
61
|
- [Multipart Content-Type](https://www.w3.org/Protocols/rfc1341/7_2_Multipart.html) at W3C
|
|
61
62
|
- [Content-Type: multipart](https://learn.microsoft.com/en-us/previous-versions/office/developer/exchange-server-2010/aa493937(v=exchg.140))
|
|
62
63
|
at Microsoft
|
|
64
|
+
|
|
65
|
+
## CORS
|
|
66
|
+
|
|
67
|
+
[CORS](https://www.w3.org/TR/2020/SPSD-cors-20200602/) is supported,
|
|
68
|
+
credentials, any `origin`, and any request header fields are allowed.
|
|
69
|
+
|
|
70
|
+
The following request headers are allowed:
|
|
71
|
+
|
|
72
|
+
- `accept`
|
|
73
|
+
- `authorization`
|
|
74
|
+
- `content-type`
|
|
75
|
+
- headers used by the [`vary:embed` directive](vary.md#embeddings)
|
|
76
|
+
|
|
77
|
+
The following response headers are exposed:
|
|
78
|
+
|
|
79
|
+
- `authorization`
|
|
80
|
+
- `content-type`
|
|
81
|
+
- `content-length`
|
|
82
|
+
- `etag`
|
package/documentation/query.md
CHANGED
|
@@ -107,7 +107,7 @@ Operation call will have the following query criteria:
|
|
|
107
107
|
criteria: state==hot;type==cool;rank=5
|
|
108
108
|
```
|
|
109
109
|
|
|
110
|
-
|
|
110
|
+
#### POST method
|
|
111
111
|
|
|
112
112
|
`POST` method semantically used to create a new entity instance, that is, calling a Transition
|
|
113
113
|
without Query.
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
# HTTP request details
|
|
2
|
+
|
|
3
|
+
The `vary` directives family provides the capability to include HTTP request details as input for an
|
|
4
|
+
operation call.
|
|
5
|
+
|
|
6
|
+
## TL;DR
|
|
7
|
+
|
|
8
|
+
```yaml
|
|
9
|
+
exposition:
|
|
10
|
+
realms:
|
|
11
|
+
toa: the.toa.io
|
|
12
|
+
/:
|
|
13
|
+
vary:languages: [en, fr]
|
|
14
|
+
GET:
|
|
15
|
+
vary:embed:
|
|
16
|
+
lang: language # predefined embeddings
|
|
17
|
+
realm: realm
|
|
18
|
+
token: :x-access-token # raw header value
|
|
19
|
+
endpoint: dummies.get
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
## Embeddings
|
|
23
|
+
|
|
24
|
+
Request parts are embedded into the operation call according to the mapping
|
|
25
|
+
defined by the `vary:embed` directive.
|
|
26
|
+
The keys in the embedding map are the names of the input properties details to be embedded to,
|
|
27
|
+
and the values are the names of the embedding functions.
|
|
28
|
+
If the value is an array, the first non-empty embedding function's result is used.
|
|
29
|
+
|
|
30
|
+
> If a property is already present in the input, the embedded value will overwrite its current
|
|
31
|
+
> value.
|
|
32
|
+
|
|
33
|
+
### Realm
|
|
34
|
+
|
|
35
|
+
Realm is an identifier of a domain used to access the Exposition.
|
|
36
|
+
The list of domains is defined by the `vary:realms` directive,
|
|
37
|
+
which is a map of realm names to their domain names.
|
|
38
|
+
|
|
39
|
+
The `realm` embedding substitutes the realm identified based on the `host` request header.
|
|
40
|
+
|
|
41
|
+
### Language
|
|
42
|
+
|
|
43
|
+
The `language` embedding substitutes the most matching language code based on the `accept-language`
|
|
44
|
+
request header and a list of supported languages defined by the `vary:languages` directive, and also
|
|
45
|
+
adds `accept-language` to the `vary` HTTP response header value.
|
|
46
|
+
If neither of the supported languages matches, the first supported language is used.
|
|
47
|
+
|
|
48
|
+
### Raw header values
|
|
49
|
+
|
|
50
|
+
Keys in the embedding map starting with a semicolon (:) are the names of HTTP request headers whose
|
|
51
|
+
values to be embedded into an operation call.
|
|
52
|
+
The names of these headers are then included in the `vary` HTTP response header
|
|
53
|
+
and [Access-Control-Allow-Headers](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Headers)
|
|
54
|
+
of the [CORS](protocol.md#cors).
|
|
55
|
+
|
|
56
|
+
[Multiple header fields](https://www.w3.org/Protocols/rfc2616/rfc2616-sec4.html#sec4.2) are embedded
|
|
57
|
+
as a comma-separated list.
|
|
58
|
+
|
|
59
|
+
### Fallbacks
|
|
60
|
+
|
|
61
|
+
If the embedding function is an array, the first non-empty resolved value is used.
|
|
62
|
+
|
|
63
|
+
```yaml
|
|
64
|
+
vary:embed:
|
|
65
|
+
ip: # fallbacks
|
|
66
|
+
- :CloudFront-Viewer-Address
|
|
67
|
+
- :CF-Connecting-IP
|
|
68
|
+
- :X-Appengine-User-IP
|
|
69
|
+
```
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
Feature: CORS Support
|
|
2
|
+
|
|
3
|
+
Scenario: Using CORS
|
|
4
|
+
Given the annotation:
|
|
5
|
+
"""yaml
|
|
6
|
+
/:
|
|
7
|
+
anonymous: true
|
|
8
|
+
/foo:
|
|
9
|
+
GET:
|
|
10
|
+
dev:stub: Hello
|
|
11
|
+
"""
|
|
12
|
+
When the following request is received:
|
|
13
|
+
"""
|
|
14
|
+
OPTIONS / HTTP/1.1
|
|
15
|
+
origin: https://hello.world
|
|
16
|
+
"""
|
|
17
|
+
Then the following reply is sent:
|
|
18
|
+
"""
|
|
19
|
+
204 No Content
|
|
20
|
+
access-control-allow-origin: https://hello.world
|
|
21
|
+
access-control-allow-methods: GET, POST, PUT, PATCH, DELETE
|
|
22
|
+
access-control-allow-headers: accept, authorization, content-type
|
|
23
|
+
access-control-allow-credentials: true
|
|
24
|
+
access-control-max-age: 3600
|
|
25
|
+
cache-control: public, max-age=3600
|
|
26
|
+
vary: origin
|
|
27
|
+
"""
|
|
28
|
+
When the following request is received:
|
|
29
|
+
"""
|
|
30
|
+
GET /foo/ HTTP/1.1
|
|
31
|
+
origin: https://hello.world
|
|
32
|
+
"""
|
|
33
|
+
Then the following reply is sent:
|
|
34
|
+
"""
|
|
35
|
+
200 OK
|
|
36
|
+
access-control-allow-origin: https://hello.world
|
|
37
|
+
access-control-expose-headers: authorization, content-type, content-length, etag
|
|
38
|
+
vary: origin
|
|
39
|
+
"""
|
|
@@ -17,7 +17,7 @@ Feature: Identity resource
|
|
|
17
17
|
Then the following reply is sent:
|
|
18
18
|
"""
|
|
19
19
|
200 OK
|
|
20
|
-
authorization: Token ${{ token }}
|
|
20
|
+
authorization: Token ${{ User.token }}
|
|
21
21
|
|
|
22
22
|
id: efe3a65ebbee47ed95a73edd911ea328
|
|
23
23
|
roles:
|
|
@@ -27,14 +27,30 @@ Feature: Identity resource
|
|
|
27
27
|
When the following request is received:
|
|
28
28
|
"""
|
|
29
29
|
GET /identity/ HTTP/1.1
|
|
30
|
-
authorization: Token ${{ token }}
|
|
30
|
+
authorization: Token ${{ User.token }}
|
|
31
31
|
accept: application/yaml
|
|
32
32
|
"""
|
|
33
33
|
Then the following reply is sent:
|
|
34
34
|
"""
|
|
35
35
|
200 OK
|
|
36
36
|
|
|
37
|
-
id:
|
|
37
|
+
id: ${{ User.id }}
|
|
38
|
+
roles:
|
|
39
|
+
- developer
|
|
40
|
+
- system:identity
|
|
41
|
+
"""
|
|
42
|
+
# checking that it returns the same id for given token
|
|
43
|
+
When the following request is received:
|
|
44
|
+
"""
|
|
45
|
+
GET /identity/ HTTP/1.1
|
|
46
|
+
authorization: Token ${{ User.token }}
|
|
47
|
+
accept: application/yaml
|
|
48
|
+
"""
|
|
49
|
+
Then the following reply is sent:
|
|
50
|
+
"""
|
|
51
|
+
200 OK
|
|
52
|
+
|
|
53
|
+
id: ${{ User.id }}
|
|
38
54
|
roles:
|
|
39
55
|
- developer
|
|
40
56
|
- system:identity
|
|
@@ -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
|
+
"""
|
package/features/octets.feature
CHANGED
|
@@ -248,7 +248,6 @@ Feature: Octets directive family
|
|
|
248
248
|
Scenario: Accessing an Entry and the original BLOLB
|
|
249
249
|
Given the annotation:
|
|
250
250
|
"""yaml
|
|
251
|
-
debug: true
|
|
252
251
|
/:
|
|
253
252
|
auth:anonymous: true
|
|
254
253
|
octets:context: octets
|
|
@@ -286,6 +285,7 @@ Feature: Octets directive family
|
|
|
286
285
|
When the following request is received:
|
|
287
286
|
"""
|
|
288
287
|
GET /10cf16b458f759e0d617f2f3d83599ff HTTP/1.1
|
|
288
|
+
accept: text/plain
|
|
289
289
|
"""
|
|
290
290
|
Then the following reply is sent:
|
|
291
291
|
"""
|
|
@@ -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
|
+
"""
|
|
@@ -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'
|
|
@@ -30,9 +31,13 @@ export class Components {
|
|
|
30
31
|
@given('the `{word}` is stopped')
|
|
31
32
|
public async stop (_?: string): Promise<void> {
|
|
32
33
|
await this.composition?.disconnect()
|
|
34
|
+
|
|
35
|
+
this.composition = null
|
|
33
36
|
}
|
|
34
37
|
|
|
35
38
|
private async runComponent (name: string, manifest?: object): Promise<void> {
|
|
39
|
+
assert.ok(this.composition === null, 'Composition is already running')
|
|
40
|
+
|
|
36
41
|
const path = await this.workspace.addComponent(name, manifest)
|
|
37
42
|
|
|
38
43
|
this.composition = await boot.composition([path])
|
|
@@ -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
|
}
|