@toa.io/extensions.exposition 1.0.0-alpha.2 → 1.0.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/identity.bans/manifest.toa.yaml +15 -6
- package/components/identity.bans/operations/transit.d.ts +14 -0
- package/components/identity.bans/operations/transit.js +11 -0
- package/components/identity.bans/operations/transit.js.map +1 -0
- package/components/identity.bans/operations/tsconfig.tsbuildinfo +1 -0
- package/components/identity.bans/source/transit.ts +21 -0
- package/components/identity.bans/tsconfig.json +9 -0
- package/components/identity.basic/manifest.toa.yaml +5 -1
- package/components/identity.basic/operations/tsconfig.tsbuildinfo +1 -1
- package/components/identity.federation/manifest.toa.yaml +13 -7
- package/components/identity.federation/operations/authenticate.js +4 -4
- package/components/identity.federation/operations/authenticate.js.map +1 -1
- package/components/identity.federation/operations/create.js +4 -4
- package/components/identity.federation/operations/create.js.map +1 -1
- package/components/identity.federation/operations/{assertions-as-values.cjs → lib/assertions-as-values.js} +1 -1
- package/components/identity.federation/operations/lib/assertions-as-values.js.map +1 -0
- package/components/identity.federation/operations/{jwt.d.cts → lib/jwt.d.ts} +5 -4
- package/components/identity.federation/operations/{jwt.cjs → lib/jwt.js} +35 -11
- package/components/identity.federation/operations/lib/jwt.js.map +1 -0
- package/components/identity.federation/operations/schemas.d.ts +16 -0
- package/components/identity.federation/operations/tsconfig.tsbuildinfo +1 -1
- package/components/identity.federation/operations/types.d.ts +1 -1
- package/components/identity.federation/source/authenticate.ts +2 -2
- package/components/identity.federation/source/create.ts +2 -2
- package/components/identity.federation/source/{assertions-as-values.cts → lib/assertions-as-values.ts} +1 -2
- package/components/identity.federation/source/lib/jwt.test.ts +56 -0
- package/components/identity.federation/source/{jwt.cts → lib/jwt.ts} +57 -29
- package/components/identity.federation/source/schemas.ts +16 -0
- package/components/identity.federation/source/types.ts +1 -1
- package/components/identity.federation/tsconfig.json +2 -2
- package/components/identity.roles/manifest.toa.yaml +18 -5
- package/components/identity.roles/operations/grant.d.ts +10 -0
- package/components/identity.roles/operations/grant.js +21 -0
- package/components/identity.roles/operations/grant.js.map +1 -0
- package/components/identity.roles/operations/lib/Entity.d.ts +5 -0
- package/components/identity.roles/operations/lib/Entity.js +3 -0
- package/components/identity.roles/operations/lib/Entity.js.map +1 -0
- package/components/identity.roles/operations/list.d.ts +1 -4
- package/components/identity.roles/operations/list.js.map +1 -1
- package/components/identity.roles/operations/principal.d.ts +4 -6
- package/components/identity.roles/operations/principal.js +6 -1
- package/components/identity.roles/operations/principal.js.map +1 -1
- package/components/identity.roles/operations/tsconfig.tsbuildinfo +1 -1
- package/components/identity.roles/source/grant.ts +32 -0
- package/components/identity.roles/source/lib/Entity.ts +5 -0
- package/components/identity.roles/source/list.ts +2 -4
- package/components/identity.roles/source/principal.ts +10 -8
- package/components/identity.tokens/manifest.toa.yaml +12 -3
- package/components/identity.tokens/operations/authenticate.js +5 -2
- package/components/identity.tokens/operations/authenticate.js.map +1 -1
- package/components/identity.tokens/operations/encrypt.js +4 -1
- package/components/identity.tokens/operations/encrypt.js.map +1 -1
- package/components/identity.tokens/operations/tsconfig.tsbuildinfo +1 -1
- package/components/identity.tokens/operations/types.d.ts +1 -2
- package/components/identity.tokens/receivers/identity.bans.created.js +3 -0
- package/components/identity.tokens/source/authenticate.ts +5 -2
- package/components/identity.tokens/source/encrypt.test.ts +22 -1
- package/components/identity.tokens/source/encrypt.ts +4 -1
- package/components/identity.tokens/source/types.ts +1 -2
- package/components/octets.storage/operations/store.js +1 -1
- package/documentation/access.md +27 -16
- package/documentation/cache.md +8 -1
- package/documentation/components.md +55 -23
- package/documentation/identity.md +7 -0
- package/documentation/io.md +56 -0
- package/documentation/octets.md +12 -0
- package/documentation/protocol.md +3 -0
- package/documentation/query.md +50 -5
- package/documentation/require.md +15 -0
- package/documentation/tree.md +22 -4
- package/documentation/vary.md +9 -3
- package/features/access.feature +28 -49
- package/features/annotation.feature +1 -0
- package/features/body.feature +3 -1
- package/features/cache.feature +39 -0
- package/features/cors.feature +2 -2
- package/features/directives.feature +2 -0
- package/features/dynamic.feature +14 -7
- package/features/errors.feature +7 -4
- package/features/etag.feature +97 -0
- package/features/identity.bans.feature +128 -0
- package/features/identity.basic.feature +68 -3
- package/features/identity.federation.feature +78 -5
- package/features/identity.roles.feature +205 -1
- package/features/identity.tokens.feature +98 -0
- package/features/io.feature +196 -0
- package/features/octets.entries.feature +3 -1
- package/features/octets.feature +32 -10
- package/features/octets.meta.feature +4 -3
- package/features/octets.workflows.feature +39 -0
- package/features/queries.feature +9 -1
- package/features/require.feature +64 -0
- package/features/response.feature +7 -1
- package/features/routes.feature +17 -10
- package/features/steps/Database.ts +17 -10
- package/features/steps/Gateway.ts +3 -0
- package/features/steps/IdP.ts +55 -21
- package/features/steps/components/echo/manifest.toa.yaml +5 -0
- package/features/steps/components/echo/operations/identity.js +7 -0
- package/features/steps/components/greeter/manifest.toa.yaml +1 -0
- package/features/steps/components/octets.tester/manifest.toa.yaml +1 -0
- package/features/steps/components/pots/manifest.toa.yaml +12 -3
- package/features/steps/components/sequences/manifest.toa.yaml +1 -0
- package/features/steps/components/users.properties/manifest.toa.yaml +2 -1
- package/features/timing.feature +66 -0
- package/features/vary.feature +56 -3
- package/package.json +13 -14
- package/readme.md +7 -6
- package/schemas/annotation.cos.yaml +1 -0
- package/schemas/io/input.cos.yaml +3 -0
- package/schemas/io/message.cos.yaml +5 -0
- package/schemas/io/output.cos.yaml +5 -0
- package/schemas/octets/workflow.cos.yaml +12 -0
- package/schemas/querystring.cos.yaml +1 -0
- package/source/Annotation.ts +1 -0
- package/source/Context.ts +6 -4
- package/source/Directive.test.ts +7 -7
- package/source/Directive.ts +19 -46
- package/source/Endpoint.ts +53 -6
- package/source/Factory.ts +17 -7
- package/source/Gateway.ts +40 -51
- package/source/HTTP/Context.ts +67 -0
- package/source/HTTP/Server.test.ts +1 -1
- package/source/HTTP/Server.ts +61 -96
- package/source/HTTP/Timing.ts +40 -0
- package/source/HTTP/exceptions.ts +1 -1
- package/source/HTTP/index.ts +1 -0
- package/source/HTTP/messages.test.ts +27 -8
- package/source/HTTP/messages.ts +32 -48
- package/source/Mapping.ts +7 -8
- package/source/RTD/Context.ts +7 -10
- package/source/RTD/Directives.ts +28 -4
- package/source/RTD/Endpoint.ts +6 -4
- package/source/RTD/Match.ts +2 -7
- package/source/RTD/Method.ts +7 -13
- package/source/RTD/Node.ts +13 -14
- package/source/RTD/Tree.ts +17 -16
- package/source/RTD/factory.ts +3 -6
- package/source/Tenant.ts +0 -8
- package/source/deployment.ts +6 -0
- package/source/directives/auth/Anonymous.ts +3 -2
- package/source/directives/auth/Authorization.ts +17 -14
- package/source/directives/auth/Delegate.ts +35 -0
- package/source/directives/auth/Incept.ts +11 -6
- package/source/directives/auth/Role.test.ts +53 -6
- package/source/directives/auth/Role.ts +27 -17
- package/source/directives/auth/Scheme.ts +2 -2
- package/source/directives/auth/types.ts +1 -1
- package/source/directives/cache/Cache.ts +5 -5
- package/source/directives/cache/Control.ts +48 -22
- package/source/directives/cache/types.ts +1 -1
- package/source/directives/cors/CORS.ts +18 -10
- package/source/directives/dev/Development.ts +4 -4
- package/source/directives/index.ts +6 -4
- package/source/directives/io/Directive.ts +11 -0
- package/source/directives/io/IO.ts +43 -0
- package/source/directives/io/Input.ts +50 -0
- package/source/directives/io/Message.ts +1 -0
- package/source/directives/io/Output.ts +69 -0
- package/source/directives/io/index.ts +3 -0
- package/source/directives/io/schemas.ts +12 -0
- package/source/directives/octets/Context.ts +5 -4
- package/source/directives/octets/Delete.ts +25 -13
- package/source/directives/octets/Directive.ts +10 -0
- package/source/directives/octets/Fetch.ts +33 -17
- package/source/directives/octets/List.ts +18 -8
- package/source/directives/octets/Octets.ts +12 -8
- package/source/directives/octets/Permute.ts +16 -9
- package/source/directives/octets/Store.ts +43 -19
- package/source/directives/octets/Workflow.ts +48 -0
- package/source/directives/octets/schemas.test.ts +21 -0
- package/source/directives/octets/schemas.ts +2 -0
- package/source/directives/octets/types.ts +0 -7
- package/source/directives/octets/{workflow → workflows}/Execution.ts +0 -2
- package/source/directives/octets/{workflow → workflows}/Workflow.ts +2 -2
- package/source/directives/require/Directive.ts +5 -0
- package/source/directives/require/Headers.ts +20 -0
- package/source/directives/require/Require.ts +28 -0
- package/source/directives/require/index.ts +3 -0
- package/source/directives/vary/Directive.ts +2 -1
- package/source/directives/vary/Embed.ts +14 -8
- package/source/directives/vary/Vary.ts +8 -6
- package/source/directives/vary/embeddings/Embedding.ts +2 -1
- package/source/directives/vary/embeddings/Header.ts +9 -7
- package/source/directives/vary/embeddings/Language.ts +2 -2
- package/source/directives/vary/embeddings/Parameter.ts +14 -0
- package/source/directives/vary/embeddings/index.ts +3 -3
- package/source/exceptions.ts +22 -11
- package/source/io.ts +2 -2
- package/source/root.ts +5 -0
- package/transpiled/Annotation.d.ts +1 -0
- package/transpiled/Context.d.ts +6 -4
- package/transpiled/Directive.d.ts +8 -21
- package/transpiled/Directive.js +11 -14
- package/transpiled/Directive.js.map +1 -1
- package/transpiled/Endpoint.d.ts +7 -5
- package/transpiled/Endpoint.js +58 -2
- package/transpiled/Endpoint.js.map +1 -1
- package/transpiled/Factory.js +8 -2
- package/transpiled/Factory.js.map +1 -1
- package/transpiled/Gateway.d.ts +4 -8
- package/transpiled/Gateway.js +23 -33
- package/transpiled/Gateway.js.map +1 -1
- package/transpiled/HTTP/Context.d.ts +24 -0
- package/transpiled/HTTP/Context.js +47 -0
- package/transpiled/HTTP/Context.js.map +1 -0
- package/transpiled/HTTP/Server.d.ts +8 -7
- package/transpiled/HTTP/Server.js +69 -77
- package/transpiled/HTTP/Server.js.map +1 -1
- package/transpiled/HTTP/Timing.d.ts +10 -0
- package/transpiled/HTTP/Timing.js +29 -0
- package/transpiled/HTTP/Timing.js.map +1 -0
- package/transpiled/HTTP/exceptions.d.ts +1 -1
- package/transpiled/HTTP/exceptions.js.map +1 -1
- package/transpiled/HTTP/index.d.ts +1 -0
- package/transpiled/HTTP/index.js +1 -0
- package/transpiled/HTTP/index.js.map +1 -1
- package/transpiled/HTTP/messages.d.ts +7 -21
- package/transpiled/HTTP/messages.js +24 -26
- package/transpiled/HTTP/messages.js.map +1 -1
- package/transpiled/Mapping.js +7 -7
- package/transpiled/Mapping.js.map +1 -1
- package/transpiled/RTD/Context.d.ts +7 -6
- package/transpiled/RTD/Directives.d.ts +19 -4
- package/transpiled/RTD/Endpoint.d.ts +6 -4
- package/transpiled/RTD/Match.d.ts +2 -4
- package/transpiled/RTD/Method.d.ts +7 -7
- package/transpiled/RTD/Method.js.map +1 -1
- package/transpiled/RTD/Node.d.ts +4 -6
- package/transpiled/RTD/Node.js +2 -1
- package/transpiled/RTD/Node.js.map +1 -1
- package/transpiled/RTD/Tree.d.ts +6 -6
- package/transpiled/RTD/Tree.js +4 -1
- package/transpiled/RTD/Tree.js.map +1 -1
- package/transpiled/RTD/factory.d.ts +2 -4
- package/transpiled/RTD/factory.js +1 -1
- package/transpiled/RTD/factory.js.map +1 -1
- package/transpiled/Tenant.d.ts +0 -1
- package/transpiled/Tenant.js +0 -6
- package/transpiled/Tenant.js.map +1 -1
- package/transpiled/deployment.js +5 -0
- package/transpiled/deployment.js.map +1 -1
- package/transpiled/directives/auth/Anonymous.js +3 -4
- package/transpiled/directives/auth/Anonymous.js.map +1 -1
- package/transpiled/directives/auth/Authorization.d.ts +2 -3
- package/transpiled/directives/auth/Authorization.js +10 -8
- package/transpiled/directives/auth/Authorization.js.map +1 -1
- package/transpiled/directives/auth/Delegate.d.ts +8 -0
- package/transpiled/directives/auth/Delegate.js +29 -0
- package/transpiled/directives/auth/Delegate.js.map +1 -0
- package/transpiled/directives/auth/Incept.d.ts +1 -1
- package/transpiled/directives/auth/Incept.js +11 -6
- package/transpiled/directives/auth/Incept.js.map +1 -1
- package/transpiled/directives/auth/Role.d.ts +4 -1
- package/transpiled/directives/auth/Role.js +25 -17
- package/transpiled/directives/auth/Role.js.map +1 -1
- package/transpiled/directives/auth/Scheme.js +2 -2
- package/transpiled/directives/auth/Scheme.js.map +1 -1
- package/transpiled/directives/cache/Cache.d.ts +3 -3
- package/transpiled/directives/cache/Cache.js +3 -3
- package/transpiled/directives/cache/Cache.js.map +1 -1
- package/transpiled/directives/cache/Control.d.ts +5 -4
- package/transpiled/directives/cache/Control.js +32 -15
- package/transpiled/directives/cache/Control.js.map +1 -1
- package/transpiled/directives/cache/types.d.ts +1 -1
- package/transpiled/directives/cors/CORS.d.ts +2 -3
- package/transpiled/directives/cors/CORS.js +17 -10
- package/transpiled/directives/cors/CORS.js.map +1 -1
- package/transpiled/directives/dev/Development.d.ts +3 -3
- package/transpiled/directives/dev/Development.js +1 -1
- package/transpiled/directives/dev/Development.js.map +1 -1
- package/transpiled/directives/index.d.ts +2 -2
- package/transpiled/directives/index.js +5 -3
- package/transpiled/directives/index.js.map +1 -1
- package/transpiled/directives/io/Directive.d.ts +8 -0
- package/transpiled/directives/io/Directive.js +3 -0
- package/transpiled/directives/io/Directive.js.map +1 -0
- package/transpiled/directives/io/IO.d.ts +9 -0
- package/transpiled/directives/io/IO.js +33 -0
- package/transpiled/directives/io/IO.js.map +1 -0
- package/transpiled/directives/io/Input.d.ts +11 -0
- package/transpiled/directives/io/Input.js +63 -0
- package/transpiled/directives/io/Input.js.map +1 -0
- package/transpiled/directives/io/Message.d.ts +1 -0
- package/transpiled/directives/io/Message.js +3 -0
- package/transpiled/directives/io/Message.js.map +1 -0
- package/transpiled/directives/io/Output.d.ts +13 -0
- package/transpiled/directives/io/Output.js +76 -0
- package/transpiled/directives/io/Output.js.map +1 -0
- package/transpiled/directives/io/index.d.ts +2 -0
- package/transpiled/directives/io/index.js +6 -0
- package/transpiled/directives/io/index.js.map +1 -0
- package/transpiled/directives/io/schemas.d.ts +7 -0
- package/transpiled/directives/io/schemas.js +14 -0
- package/transpiled/directives/io/schemas.js.map +1 -0
- package/transpiled/directives/octets/Context.d.ts +4 -4
- package/transpiled/directives/octets/Context.js +4 -2
- package/transpiled/directives/octets/Context.js.map +1 -1
- package/transpiled/directives/octets/Delete.d.ts +5 -4
- package/transpiled/directives/octets/Delete.js +24 -12
- package/transpiled/directives/octets/Delete.js.map +1 -1
- package/transpiled/directives/octets/Directive.d.ts +8 -0
- package/transpiled/directives/octets/Directive.js +8 -0
- package/transpiled/directives/octets/Directive.js.map +1 -0
- package/transpiled/directives/octets/Fetch.d.ts +4 -3
- package/transpiled/directives/octets/Fetch.js +31 -15
- package/transpiled/directives/octets/Fetch.js.map +1 -1
- package/transpiled/directives/octets/List.d.ts +4 -3
- package/transpiled/directives/octets/List.js +16 -7
- package/transpiled/directives/octets/List.js.map +1 -1
- package/transpiled/directives/octets/Octets.d.ts +4 -4
- package/transpiled/directives/octets/Octets.js +8 -4
- package/transpiled/directives/octets/Octets.js.map +1 -1
- package/transpiled/directives/octets/Permute.d.ts +4 -3
- package/transpiled/directives/octets/Permute.js +14 -7
- package/transpiled/directives/octets/Permute.js.map +1 -1
- package/transpiled/directives/octets/Store.d.ts +6 -4
- package/transpiled/directives/octets/Store.js +28 -13
- package/transpiled/directives/octets/Store.js.map +1 -1
- package/transpiled/directives/octets/Workflow.d.ts +15 -0
- package/transpiled/directives/octets/Workflow.js +59 -0
- package/transpiled/directives/octets/Workflow.js.map +1 -0
- package/transpiled/directives/octets/schemas.d.ts +2 -0
- package/transpiled/directives/octets/schemas.js +2 -1
- package/transpiled/directives/octets/schemas.js.map +1 -1
- package/transpiled/directives/octets/types.d.ts +0 -5
- package/transpiled/directives/octets/{workflow → workflows}/Execution.js +0 -1
- package/transpiled/directives/octets/workflows/Execution.js.map +1 -0
- package/transpiled/directives/octets/{workflow → workflows}/Workflow.d.ts +1 -1
- package/transpiled/directives/octets/{workflow → workflows}/Workflow.js +2 -2
- package/transpiled/directives/octets/workflows/Workflow.js.map +1 -0
- package/transpiled/directives/octets/workflows/index.js.map +1 -0
- package/transpiled/directives/require/Directive.d.ts +4 -0
- package/transpiled/directives/require/Directive.js +3 -0
- package/transpiled/directives/require/Directive.js.map +1 -0
- package/transpiled/directives/require/Headers.d.ts +7 -0
- package/transpiled/directives/require/Headers.js +19 -0
- package/transpiled/directives/require/Headers.js.map +1 -0
- package/transpiled/directives/require/Require.d.ts +9 -0
- package/transpiled/directives/require/Require.js +27 -0
- package/transpiled/directives/require/Require.js.map +1 -0
- package/transpiled/directives/require/index.d.ts +2 -0
- package/transpiled/directives/require/index.js +6 -0
- package/transpiled/directives/require/index.js.map +1 -0
- package/transpiled/directives/vary/Directive.d.ts +2 -1
- package/transpiled/directives/vary/Embed.d.ts +2 -1
- package/transpiled/directives/vary/Embed.js +8 -6
- package/transpiled/directives/vary/Embed.js.map +1 -1
- package/transpiled/directives/vary/Vary.d.ts +3 -3
- package/transpiled/directives/vary/Vary.js +4 -4
- package/transpiled/directives/vary/Vary.js.map +1 -1
- package/transpiled/directives/vary/embeddings/Embedding.d.ts +2 -1
- package/transpiled/directives/vary/embeddings/Header.js +9 -7
- package/transpiled/directives/vary/embeddings/Header.js.map +1 -1
- package/transpiled/directives/vary/embeddings/Language.js +2 -2
- package/transpiled/directives/vary/embeddings/Language.js.map +1 -1
- package/transpiled/directives/vary/embeddings/Parameter.d.ts +7 -0
- package/transpiled/directives/vary/embeddings/Parameter.js +14 -0
- package/transpiled/directives/vary/embeddings/Parameter.js.map +1 -0
- package/transpiled/directives/vary/embeddings/index.d.ts +2 -2
- package/transpiled/directives/vary/embeddings/index.js +5 -3
- package/transpiled/directives/vary/embeddings/index.js.map +1 -1
- package/transpiled/exceptions.d.ts +3 -2
- package/transpiled/exceptions.js +13 -7
- package/transpiled/exceptions.js.map +1 -1
- package/transpiled/io.d.ts +2 -2
- package/transpiled/root.js +5 -0
- package/transpiled/root.js.map +1 -1
- package/transpiled/tsconfig.tsbuildinfo +1 -1
- package/components/identity.federation/operations/assertions-as-values.cjs.map +0 -1
- package/components/identity.federation/operations/jwt.cjs.map +0 -1
- package/source/HTTP/Server.fixtures.ts +0 -40
- package/transpiled/HTTP/Server.fixtures.d.ts +0 -10
- package/transpiled/HTTP/Server.fixtures.js +0 -31
- package/transpiled/HTTP/Server.fixtures.js.map +0 -1
- package/transpiled/directives/octets/workflow/Execution.js.map +0 -1
- package/transpiled/directives/octets/workflow/Workflow.js.map +0 -1
- package/transpiled/directives/octets/workflow/index.js.map +0 -1
- /package/components/identity.federation/operations/{assertions-as-values.d.cts → lib/assertions-as-values.d.ts} +0 -0
- /package/source/directives/octets/{workflow → workflows}/index.ts +0 -0
- /package/transpiled/directives/octets/{workflow → workflows}/Execution.d.ts +0 -0
- /package/transpiled/directives/octets/{workflow → workflows}/index.d.ts +0 -0
- /package/transpiled/directives/octets/{workflow → workflows}/index.js +0 -0
package/features/vary.feature
CHANGED
|
@@ -5,6 +5,7 @@ Feature: The Vary directive family
|
|
|
5
5
|
"""yaml
|
|
6
6
|
exposition:
|
|
7
7
|
/:
|
|
8
|
+
io:output: true
|
|
8
9
|
vary:languages: [en, fr]
|
|
9
10
|
GET:
|
|
10
11
|
vary:embed:
|
|
@@ -43,6 +44,7 @@ Feature: The Vary directive family
|
|
|
43
44
|
"""yaml
|
|
44
45
|
exposition:
|
|
45
46
|
/:
|
|
47
|
+
io:output: true
|
|
46
48
|
GET:
|
|
47
49
|
anonymous: true
|
|
48
50
|
vary:embed:
|
|
@@ -62,12 +64,12 @@ Feature: The Vary directive family
|
|
|
62
64
|
content-language: fr
|
|
63
65
|
"""
|
|
64
66
|
|
|
65
|
-
|
|
66
67
|
Scenario: Embedding a value of an arbitrary header
|
|
67
68
|
Given the `echo` is running with the following manifest:
|
|
68
69
|
"""yaml
|
|
69
70
|
exposition:
|
|
70
71
|
/:
|
|
72
|
+
io:output: true
|
|
71
73
|
GET:
|
|
72
74
|
vary:embed:
|
|
73
75
|
name: :foo
|
|
@@ -88,11 +90,38 @@ Feature: The Vary directive family
|
|
|
88
90
|
Hello bar
|
|
89
91
|
"""
|
|
90
92
|
|
|
93
|
+
Scenario: Embedding a `host` header value
|
|
94
|
+
Given the `echo` is running with the following manifest:
|
|
95
|
+
"""yaml
|
|
96
|
+
exposition:
|
|
97
|
+
/:
|
|
98
|
+
io:output: true
|
|
99
|
+
GET:
|
|
100
|
+
vary:embed:
|
|
101
|
+
name: :Host
|
|
102
|
+
endpoint: compute
|
|
103
|
+
"""
|
|
104
|
+
When the following request is received:
|
|
105
|
+
"""
|
|
106
|
+
GET /echo/ HTTP/1.1
|
|
107
|
+
accept: application/yaml
|
|
108
|
+
foo: bar
|
|
109
|
+
"""
|
|
110
|
+
Then the following reply is sent:
|
|
111
|
+
"""
|
|
112
|
+
200 OK
|
|
113
|
+
content-type: application/yaml
|
|
114
|
+
vary: accept
|
|
115
|
+
|
|
116
|
+
Hello 127.0.0.1:8000
|
|
117
|
+
"""
|
|
118
|
+
|
|
91
119
|
Scenario Outline: Embedding a value from the list of options
|
|
92
120
|
Given the `echo` is running with the following manifest:
|
|
93
121
|
"""yaml
|
|
94
122
|
exposition:
|
|
95
123
|
/:
|
|
124
|
+
io:output: true
|
|
96
125
|
vary:languages: [en, fr]
|
|
97
126
|
GET:
|
|
98
127
|
vary:embed:
|
|
@@ -122,11 +151,35 @@ Feature: The Vary directive family
|
|
|
122
151
|
| bar | baz |
|
|
123
152
|
| accept-language | en |
|
|
124
153
|
|
|
154
|
+
Scenario: Embedding route parameter
|
|
155
|
+
Given the `echo` is running with the following manifest:
|
|
156
|
+
"""yaml
|
|
157
|
+
exposition:
|
|
158
|
+
/:friend:
|
|
159
|
+
io:output: true
|
|
160
|
+
GET:
|
|
161
|
+
vary:embed:
|
|
162
|
+
name: /:friend
|
|
163
|
+
endpoint: compute
|
|
164
|
+
"""
|
|
165
|
+
When the following request is received:
|
|
166
|
+
"""
|
|
167
|
+
GET /echo/Ken/ HTTP/1.1
|
|
168
|
+
accept: text/plain
|
|
169
|
+
"""
|
|
170
|
+
Then the following reply is sent:
|
|
171
|
+
"""
|
|
172
|
+
200 OK
|
|
173
|
+
|
|
174
|
+
Hello Ken
|
|
175
|
+
"""
|
|
176
|
+
|
|
125
177
|
Scenario: Adding headers used by defined embeddings to CORS permissions
|
|
126
178
|
Given the `echo` is running with the following manifest:
|
|
127
179
|
"""yaml
|
|
128
180
|
exposition:
|
|
129
181
|
/:
|
|
182
|
+
io:output: true
|
|
130
183
|
vary:languages: [en, fr]
|
|
131
184
|
GET:
|
|
132
185
|
vary:embed:
|
|
@@ -140,11 +193,11 @@ Feature: The Vary directive family
|
|
|
140
193
|
When the following request is received:
|
|
141
194
|
"""
|
|
142
195
|
OPTIONS / HTTP/1.1
|
|
143
|
-
origin:
|
|
196
|
+
origin: https://example.com
|
|
144
197
|
access-control-request-headers: whatever
|
|
145
198
|
"""
|
|
146
199
|
Then the following reply is sent:
|
|
147
200
|
"""
|
|
148
201
|
204 No Content
|
|
149
|
-
access-control-allow-headers: accept, authorization, content-type, accept-language, foo, bar
|
|
202
|
+
access-control-allow-headers: accept, authorization, content-type, etag, if-match, if-none-match, accept-language, foo, bar
|
|
150
203
|
"""
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@toa.io/extensions.exposition",
|
|
3
|
-
"version": "1.0.0-alpha.
|
|
3
|
+
"version": "1.0.0-alpha.21",
|
|
4
4
|
"description": "Toa Exposition",
|
|
5
5
|
"author": "temich <tema.gurtovoy@gmail.com>",
|
|
6
6
|
"homepage": "https://github.com/toa-io/toa#readme",
|
|
@@ -17,13 +17,11 @@
|
|
|
17
17
|
"access": "public"
|
|
18
18
|
},
|
|
19
19
|
"dependencies": {
|
|
20
|
-
"@toa.io/core": "1.0.0-alpha.
|
|
21
|
-
"@toa.io/generic": "1.0.0-alpha.
|
|
22
|
-
"@toa.io/schemas": "1.0.0-alpha.
|
|
23
|
-
"@toa.io/streams": "1.0.0-alpha.2",
|
|
20
|
+
"@toa.io/core": "1.0.0-alpha.21",
|
|
21
|
+
"@toa.io/generic": "1.0.0-alpha.21",
|
|
22
|
+
"@toa.io/schemas": "1.0.0-alpha.21",
|
|
24
23
|
"bcryptjs": "2.4.3",
|
|
25
24
|
"error-value": "0.3.0",
|
|
26
|
-
"express": "4.18.2",
|
|
27
25
|
"js-yaml": "4.1.0",
|
|
28
26
|
"matchacho": "0.3.5",
|
|
29
27
|
"msgpackr": "1.10.1",
|
|
@@ -36,21 +34,22 @@
|
|
|
36
34
|
},
|
|
37
35
|
"scripts": {
|
|
38
36
|
"test": "jest",
|
|
39
|
-
"transpile": "tsc && npm run transpile:basic && npm run transpile:tokens && npm run transpile:roles && npm run transpile:federation",
|
|
37
|
+
"transpile": "tsc && npm run transpile:bans && npm run transpile:basic && npm run transpile:tokens && npm run transpile:roles && npm run transpile:federation",
|
|
38
|
+
"transpile:bans": "tsc -p ./components/identity.bans",
|
|
40
39
|
"transpile:basic": "tsc -p ./components/identity.basic",
|
|
41
|
-
"pretranspile:federation": "js-yaml components/identity.federation/manifest.toa.yaml | jq -M '{ type: \"object\", properties: {configuration: .configuration.schema, entity: .entity.schema }, additionalProperties: false}' > schemas.json && json2ts -i schemas.json -o components/identity.federation/source/schemas.ts && rm schemas.json",
|
|
42
|
-
"transpile:federation": "tsc -p ./components/identity.federation",
|
|
43
40
|
"transpile:tokens": "tsc -p ./components/identity.tokens",
|
|
44
41
|
"transpile:roles": "tsc -p ./components/identity.roles",
|
|
45
|
-
"
|
|
42
|
+
"pretranspile:federation": "js-yaml components/identity.federation/manifest.toa.yaml | jq -M '{ type: \"object\", properties: {configuration: .configuration.schema, entity: .entity.schema }, additionalProperties: false}' > schemas.json && json2ts -i schemas.json -o components/identity.federation/source/schemas.ts && rm schemas.json",
|
|
43
|
+
"transpile:federation": "tsc -p ./components/identity.federation",
|
|
44
|
+
"features": "cucumber-js",
|
|
45
|
+
"features:security": "cucumber-js --tags @security"
|
|
46
46
|
},
|
|
47
47
|
"devDependencies": {
|
|
48
|
-
"@toa.io/agent": "1.0.0-alpha.
|
|
49
|
-
"@toa.io/extensions.storages": "1.0.0-alpha.
|
|
48
|
+
"@toa.io/agent": "1.0.0-alpha.21",
|
|
49
|
+
"@toa.io/extensions.storages": "1.0.0-alpha.21",
|
|
50
50
|
"@types/bcryptjs": "2.4.3",
|
|
51
51
|
"@types/cors": "2.8.13",
|
|
52
|
-
"@types/express": "4.17.17",
|
|
53
52
|
"@types/negotiator": "0.6.1"
|
|
54
53
|
},
|
|
55
|
-
"gitHead": "
|
|
54
|
+
"gitHead": "da9f4c278f6ab02a28f65c6e25c713c013cbfce9"
|
|
56
55
|
}
|
package/readme.md
CHANGED
|
@@ -127,12 +127,13 @@ exposition:
|
|
|
127
127
|
host: the.example.com
|
|
128
128
|
```
|
|
129
129
|
|
|
130
|
-
| Option | Type | Description
|
|
131
|
-
|
|
132
|
-
| `host` | `string` | Domain name to be used for the corresponding Kubernetes Ingress.
|
|
133
|
-
| `class` | `string` | Ingress class
|
|
134
|
-
| `annotations` | `object` | Ingress annotations
|
|
135
|
-
| `debug` | `boolean` | Output server errors. Default `false`.
|
|
130
|
+
| Option | Type | Description |
|
|
131
|
+
|---------------|-----------|-------------------------------------------------------------------------------------------------------------------|
|
|
132
|
+
| `host` | `string` | Domain name to be used for the corresponding Kubernetes Ingress. |
|
|
133
|
+
| `class` | `string` | Ingress class |
|
|
134
|
+
| `annotations` | `object` | Ingress annotations |
|
|
135
|
+
| `debug` | `boolean` | Output server errors. Default `false`. |
|
|
136
|
+
| `trace` | `boolean` | Output [server timing](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Server-Timing). Default `false`. |
|
|
136
137
|
|
|
137
138
|
### Context resources
|
|
138
139
|
|
package/source/Annotation.ts
CHANGED
package/source/Context.ts
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
|
-
import { type Endpoint } from './Endpoint'
|
|
2
|
-
import { type Directives } from './Directive'
|
|
3
|
-
import { type Branch } from './Branch'
|
|
4
1
|
import type * as RTD from './RTD'
|
|
5
2
|
|
|
6
|
-
export type Context = RTD.Context<
|
|
3
|
+
export type Context = RTD.Context<Extension>
|
|
4
|
+
|
|
5
|
+
interface Extension {
|
|
6
|
+
namespace: string
|
|
7
|
+
component: string
|
|
8
|
+
}
|
package/source/Directive.test.ts
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import assert from 'node:assert'
|
|
2
2
|
import { generate } from 'randomstring'
|
|
3
|
-
import { DirectivesFactory
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
3
|
+
import { DirectivesFactory } from './Directive'
|
|
4
|
+
import type { syntax, DirectiveFamily } from './RTD'
|
|
5
|
+
import type { Remotes } from './Remotes'
|
|
6
|
+
import type { Context } from './HTTP'
|
|
7
7
|
|
|
8
|
-
const families: Array<jest.MockedObjectDeep<
|
|
8
|
+
const families: Array<jest.MockedObjectDeep<DirectiveFamily>> = [
|
|
9
9
|
{
|
|
10
10
|
name: 'foo',
|
|
11
11
|
mandatory: true,
|
|
@@ -76,7 +76,7 @@ it('should apply directive', async () => {
|
|
|
76
76
|
}
|
|
77
77
|
|
|
78
78
|
const directives = factory.create([declaration])
|
|
79
|
-
const request = generate() as unknown as
|
|
79
|
+
const request = generate() as unknown as Context
|
|
80
80
|
const directive = families[0].create.mock.results[0].value
|
|
81
81
|
|
|
82
82
|
await directives.preflight(request, [])
|
|
@@ -89,7 +89,7 @@ it('should apply directive', async () => {
|
|
|
89
89
|
|
|
90
90
|
it('should apply mandatory families', async () => {
|
|
91
91
|
const directives = factory.create([])
|
|
92
|
-
const request = generate() as unknown as
|
|
92
|
+
const request = generate() as unknown as Context
|
|
93
93
|
|
|
94
94
|
await directives.preflight(request, [])
|
|
95
95
|
|
package/source/Directive.ts
CHANGED
|
@@ -1,49 +1,42 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { Context, OutgoingMessage } from './HTTP'
|
|
2
2
|
import type { Remotes } from './Remotes'
|
|
3
3
|
import type { Output } from './io'
|
|
4
4
|
import type * as RTD from './RTD'
|
|
5
5
|
|
|
6
|
-
export class Directives implements RTD.Directives
|
|
7
|
-
private readonly sets: DirectiveSet[]
|
|
6
|
+
export class Directives implements RTD.Directives {
|
|
7
|
+
private readonly sets: RTD.DirectiveSet[]
|
|
8
8
|
|
|
9
|
-
public constructor (sets: DirectiveSet[]) {
|
|
9
|
+
public constructor (sets: RTD.DirectiveSet[]) {
|
|
10
10
|
this.sets = sets
|
|
11
11
|
}
|
|
12
12
|
|
|
13
|
-
public async preflight (
|
|
13
|
+
public async preflight (context: Context, parameters: RTD.Parameter[]): Promise<Output> {
|
|
14
14
|
for (const set of this.sets) {
|
|
15
15
|
if (set.family.preflight === undefined)
|
|
16
16
|
continue
|
|
17
17
|
|
|
18
|
-
const output = await set.family.preflight(set.directives,
|
|
19
|
-
|
|
20
|
-
if (output !== null) {
|
|
21
|
-
await this.settle(request, output)
|
|
18
|
+
const output = await set.family.preflight(set.directives, context, parameters)
|
|
22
19
|
|
|
20
|
+
if (output !== null)
|
|
23
21
|
return output
|
|
24
|
-
}
|
|
25
22
|
}
|
|
26
23
|
|
|
27
24
|
return null
|
|
28
25
|
}
|
|
29
26
|
|
|
30
|
-
public async settle (
|
|
27
|
+
public async settle (context: Context, response: OutgoingMessage): Promise<void> {
|
|
31
28
|
for (const set of this.sets)
|
|
32
29
|
if (set.family.settle !== undefined)
|
|
33
|
-
await set.family.settle(set.directives,
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
public merge (directives: Directives): void {
|
|
37
|
-
this.sets.push(...directives.sets)
|
|
30
|
+
await set.family.settle(set.directives, context, response)
|
|
38
31
|
}
|
|
39
32
|
}
|
|
40
33
|
|
|
41
|
-
export class DirectivesFactory implements RTD.
|
|
42
|
-
private readonly
|
|
43
|
-
private readonly families: Record<string,
|
|
34
|
+
export class DirectivesFactory implements RTD.DirectiveFactory {
|
|
35
|
+
private readonly remotes: Remotes
|
|
36
|
+
private readonly families: Record<string, RTD.DirectiveFamily> = {}
|
|
44
37
|
private readonly mandatory: string[] = []
|
|
45
38
|
|
|
46
|
-
public constructor (families:
|
|
39
|
+
public constructor (families: RTD.DirectiveFamily[], remotes: Remotes) {
|
|
47
40
|
for (const family of families) {
|
|
48
41
|
this.families[family.name] = family
|
|
49
42
|
|
|
@@ -51,7 +44,7 @@ export class DirectivesFactory implements RTD.DirectivesFactory<Directives> {
|
|
|
51
44
|
this.mandatory.push(family.name)
|
|
52
45
|
}
|
|
53
46
|
|
|
54
|
-
this.
|
|
47
|
+
this.remotes = remotes
|
|
55
48
|
}
|
|
56
49
|
|
|
57
50
|
public create (declarations: RTD.syntax.Directive[]): Directives {
|
|
@@ -67,14 +60,14 @@ export class DirectivesFactory implements RTD.DirectivesFactory<Directives> {
|
|
|
67
60
|
if (family === undefined)
|
|
68
61
|
throw new Error(`Directive family '${declaration.family}' is not found.`)
|
|
69
62
|
|
|
70
|
-
const directive = family.create(declaration.name, declaration.value, this.
|
|
63
|
+
const directive = family.create(declaration.name, declaration.value, this.remotes)
|
|
71
64
|
|
|
72
65
|
groups[family.name] ??= []
|
|
73
66
|
groups[family.name].push(directive)
|
|
74
67
|
mandatory.delete(family.name)
|
|
75
68
|
}
|
|
76
69
|
|
|
77
|
-
const sets: DirectiveSet[] = []
|
|
70
|
+
const sets: RTD.DirectiveSet[] = []
|
|
78
71
|
|
|
79
72
|
for (const family of mandatory)
|
|
80
73
|
sets.push({
|
|
@@ -97,27 +90,7 @@ export const shortcuts: RTD.syntax.Shortcuts = new Map([
|
|
|
97
90
|
['id', 'auth:id'],
|
|
98
91
|
['role', 'auth:role'],
|
|
99
92
|
['rule', 'auth:rule'],
|
|
100
|
-
['incept', 'auth:incept']
|
|
93
|
+
['incept', 'auth:incept'],
|
|
94
|
+
['input', 'io:input'],
|
|
95
|
+
['output', 'io:output']
|
|
101
96
|
])
|
|
102
|
-
|
|
103
|
-
export interface Family<TDirective = any, TExtension = any> {
|
|
104
|
-
readonly name: string
|
|
105
|
-
readonly mandatory: boolean
|
|
106
|
-
|
|
107
|
-
// produce: (declarations: RTD.syntax.Directive[], remotes: Remotes) => TDirective[]
|
|
108
|
-
|
|
109
|
-
create: (name: string, value: any, remotes: Remotes) => TDirective
|
|
110
|
-
|
|
111
|
-
preflight?: (directives: TDirective[],
|
|
112
|
-
request: IncomingMessage & TExtension,
|
|
113
|
-
parameters: RTD.Parameter[]) => Output | Promise<Output>
|
|
114
|
-
|
|
115
|
-
settle?: (directives: TDirective[],
|
|
116
|
-
request: IncomingMessage & TExtension,
|
|
117
|
-
response: OutgoingMessage) => void | Promise<void>
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
interface DirectiveSet {
|
|
121
|
-
family: Family
|
|
122
|
-
directives: any[]
|
|
123
|
-
}
|
package/source/Endpoint.ts
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import { type Component
|
|
1
|
+
import { type Component } from '@toa.io/core'
|
|
2
2
|
import { type Remotes } from './Remotes'
|
|
3
3
|
import { Mapping } from './Mapping'
|
|
4
4
|
import { type Context } from './Context'
|
|
5
|
+
import * as http from './HTTP'
|
|
5
6
|
import type * as RTD from './RTD'
|
|
6
|
-
import type * as http from './HTTP'
|
|
7
7
|
|
|
8
|
-
export class Endpoint implements RTD.Endpoint
|
|
8
|
+
export class Endpoint implements RTD.Endpoint {
|
|
9
9
|
private readonly endpoint: string
|
|
10
10
|
private readonly mapping: Mapping
|
|
11
11
|
private readonly discovery: Promise<Component>
|
|
@@ -17,12 +17,38 @@ export class Endpoint implements RTD.Endpoint<Endpoint> {
|
|
|
17
17
|
this.discovery = discovery
|
|
18
18
|
}
|
|
19
19
|
|
|
20
|
-
public async call
|
|
20
|
+
public async call
|
|
21
|
+
(context: http.Context, parameters: RTD.Parameter[]): Promise<http.OutgoingMessage> {
|
|
22
|
+
const body = await context.body()
|
|
23
|
+
const query = this.query(context)
|
|
21
24
|
const request = this.mapping.fit(body, query, parameters)
|
|
22
25
|
|
|
23
26
|
this.remote ??= await this.discovery
|
|
24
27
|
|
|
25
|
-
|
|
28
|
+
const reply = await this.remote.invoke(this.endpoint, request)
|
|
29
|
+
|
|
30
|
+
if (reply instanceof Error)
|
|
31
|
+
throw new http.Conflict(reply)
|
|
32
|
+
|
|
33
|
+
const message: http.OutgoingMessage = {}
|
|
34
|
+
|
|
35
|
+
if (typeof reply === 'object' && reply !== null && '_version' in reply) {
|
|
36
|
+
const etag = context.request.headers['if-none-match']
|
|
37
|
+
|
|
38
|
+
message.headers ??= new Headers()
|
|
39
|
+
|
|
40
|
+
if (etag !== undefined && reply._version === this.version(etag)) {
|
|
41
|
+
message.status = 304
|
|
42
|
+
message.headers.set('etag', etag)
|
|
43
|
+
|
|
44
|
+
return message
|
|
45
|
+
} else
|
|
46
|
+
message.headers.set('etag', `"${reply._version.toString()}"`)
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
message.body = reply
|
|
50
|
+
|
|
51
|
+
return message
|
|
26
52
|
}
|
|
27
53
|
|
|
28
54
|
public async close (): Promise<void> {
|
|
@@ -30,9 +56,28 @@ export class Endpoint implements RTD.Endpoint<Endpoint> {
|
|
|
30
56
|
|
|
31
57
|
await this.remote.disconnect(INTERRUPT)
|
|
32
58
|
}
|
|
59
|
+
|
|
60
|
+
private query (context: http.Context): http.Query {
|
|
61
|
+
const query: http.Query = Object.fromEntries(context.url.searchParams)
|
|
62
|
+
const etag = context.request.headers['if-match']
|
|
63
|
+
|
|
64
|
+
if (etag !== undefined)
|
|
65
|
+
query.version = this.version(etag)
|
|
66
|
+
|
|
67
|
+
return query
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
private version (etag: string): number {
|
|
71
|
+
const match = etag.match(ETAG)
|
|
72
|
+
|
|
73
|
+
if (match === null)
|
|
74
|
+
throw new http.BadRequest('Invalid ETag.')
|
|
75
|
+
|
|
76
|
+
return Number.parseInt(match.groups!.version)
|
|
77
|
+
}
|
|
33
78
|
}
|
|
34
79
|
|
|
35
|
-
export class EndpointsFactory implements RTD.EndpointsFactory
|
|
80
|
+
export class EndpointsFactory implements RTD.EndpointsFactory {
|
|
36
81
|
private readonly remotes: Remotes
|
|
37
82
|
|
|
38
83
|
public constructor (remotes: Remotes) {
|
|
@@ -56,4 +101,6 @@ export class EndpointsFactory implements RTD.EndpointsFactory<Endpoint> {
|
|
|
56
101
|
}
|
|
57
102
|
}
|
|
58
103
|
|
|
104
|
+
const ETAG = /^"(?<version>\d{1,32})"$/
|
|
105
|
+
|
|
59
106
|
const INTERRUPT = true
|
package/source/Factory.ts
CHANGED
|
@@ -3,12 +3,13 @@ import { Gateway } from './Gateway'
|
|
|
3
3
|
import { Remotes } from './Remotes'
|
|
4
4
|
import { Tree, syntax } from './RTD'
|
|
5
5
|
import { Server } from './HTTP'
|
|
6
|
-
import {
|
|
6
|
+
import { EndpointsFactory } from './Endpoint'
|
|
7
7
|
import { families, interceptors } from './directives'
|
|
8
|
-
import {
|
|
8
|
+
import { DirectivesFactory } from './Directive'
|
|
9
9
|
import { Composition } from './Composition'
|
|
10
10
|
import * as root from './root'
|
|
11
11
|
import { Interception } from './Interception'
|
|
12
|
+
import type { Broadcast } from './Gateway'
|
|
12
13
|
import type { Connector, Locator, extensions } from '@toa.io/core'
|
|
13
14
|
|
|
14
15
|
export class Factory implements extensions.Factory {
|
|
@@ -19,27 +20,36 @@ export class Factory implements extensions.Factory {
|
|
|
19
20
|
}
|
|
20
21
|
|
|
21
22
|
public tenant (locator: Locator, node: syntax.Node): Connector {
|
|
22
|
-
const broadcast = this.boot.bindings.broadcast(CHANNEL, locator.id)
|
|
23
|
+
const broadcast: Broadcast = this.boot.bindings.broadcast(CHANNEL, locator.id)
|
|
23
24
|
|
|
24
25
|
return new Tenant(broadcast, locator, node)
|
|
25
26
|
}
|
|
26
27
|
|
|
27
28
|
public service (): Connector | null {
|
|
28
29
|
const debug = process.env.TOA_EXPOSITION_DEBUG === '1'
|
|
29
|
-
const
|
|
30
|
-
const
|
|
30
|
+
const trace = process.env.TOA_EXPOSITION_TRACE === '1'
|
|
31
|
+
const broadcast: Broadcast = this.boot.bindings.broadcast(CHANNEL)
|
|
32
|
+
|
|
33
|
+
const server = Server.create({
|
|
34
|
+
methods: syntax.verbs,
|
|
35
|
+
debug,
|
|
36
|
+
trace
|
|
37
|
+
})
|
|
38
|
+
|
|
31
39
|
const remotes = new Remotes(this.boot)
|
|
32
40
|
const node = root.resolve()
|
|
33
41
|
const methods = new EndpointsFactory(remotes)
|
|
34
42
|
const directives = new DirectivesFactory(families, remotes)
|
|
35
43
|
const interception = new Interception(interceptors)
|
|
36
|
-
const tree = new Tree
|
|
44
|
+
const tree = new Tree(node, methods, directives)
|
|
37
45
|
|
|
38
46
|
const composition = new Composition(this.boot)
|
|
39
|
-
const gateway = new Gateway(broadcast,
|
|
47
|
+
const gateway = new Gateway(broadcast, tree, interception)
|
|
40
48
|
|
|
41
49
|
gateway.depends(remotes)
|
|
42
50
|
gateway.depends(composition)
|
|
51
|
+
|
|
52
|
+
server.attach(gateway.process.bind(gateway))
|
|
43
53
|
server.depends(gateway)
|
|
44
54
|
|
|
45
55
|
return server
|