@toa.io/extensions.exposition 1.0.0-alpha.4 → 1.0.0-alpha.40
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 +2 -2
- package/components/identity.bans/manifest.toa.yaml +15 -7
- 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 +22 -9
- package/components/identity.basic/operations/authenticate.d.ts +5 -1
- package/components/identity.basic/operations/authenticate.js +5 -2
- package/components/identity.basic/operations/authenticate.js.map +1 -1
- package/components/identity.basic/operations/incept.d.ts +12 -0
- package/components/identity.basic/operations/incept.js +26 -0
- package/components/identity.basic/operations/incept.js.map +1 -0
- package/components/identity.basic/operations/transit.d.ts +4 -4
- package/components/identity.basic/operations/transit.js +5 -3
- package/components/identity.basic/operations/transit.js.map +1 -1
- package/components/identity.basic/operations/tsconfig.tsbuildinfo +1 -1
- package/components/identity.basic/operations/types.d.ts +8 -4
- package/components/identity.basic/source/authenticate.ts +16 -5
- package/components/identity.basic/source/incept.ts +38 -0
- package/components/identity.basic/source/transit.ts +8 -6
- package/components/identity.basic/source/types.ts +8 -4
- package/components/identity.federation/manifest.toa.yaml +28 -22
- package/components/identity.federation/operations/authenticate.d.ts +2 -2
- package/components/identity.federation/operations/authenticate.js +3 -10
- package/components/identity.federation/operations/authenticate.js.map +1 -1
- package/components/identity.federation/operations/incept.d.ts +11 -0
- package/components/identity.federation/operations/{create.js → incept.js} +6 -7
- package/components/identity.federation/operations/incept.js.map +1 -0
- package/components/identity.federation/operations/lib/jwt.d.ts +4 -5
- package/components/identity.federation/operations/lib/jwt.js +3 -3
- package/components/identity.federation/operations/lib/jwt.js.map +1 -1
- package/components/identity.federation/operations/tsconfig.tsbuildinfo +1 -1
- package/components/identity.federation/operations/types/configuration.d.ts +14 -0
- package/components/identity.federation/operations/types/configuration.js +3 -0
- package/components/identity.federation/operations/types/configuration.js.map +1 -0
- package/components/identity.federation/operations/{types.d.ts → types/context.d.ts} +13 -6
- package/components/identity.federation/operations/types/context.js +3 -0
- package/components/identity.federation/operations/types/context.js.map +1 -0
- package/components/identity.federation/operations/types/entity.d.ts +6 -0
- package/components/identity.federation/operations/{types.js → types/entity.js} +1 -1
- package/components/identity.federation/operations/types/entity.js.map +1 -0
- package/components/identity.federation/operations/types/index.d.ts +3 -0
- package/components/identity.federation/operations/types/index.js +20 -0
- package/components/identity.federation/operations/types/index.js.map +1 -0
- package/components/identity.federation/source/authenticate.ts +5 -18
- package/components/identity.federation/source/{create.ts → incept.ts} +10 -9
- package/components/identity.federation/source/lib/jwt.test.ts +2 -2
- package/components/identity.federation/source/lib/jwt.ts +7 -8
- package/components/identity.federation/source/types/configuration.ts +15 -0
- package/components/identity.federation/source/{types.ts → types/context.ts} +15 -5
- package/components/identity.federation/source/types/entity.ts +6 -0
- package/components/identity.federation/source/types/index.ts +3 -0
- package/components/identity.federation/tsconfig.json +2 -2
- package/components/identity.roles/manifest.toa.yaml +18 -6
- 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 +19 -5
- package/components/identity.tokens/operations/authenticate.d.ts +2 -2
- package/components/identity.tokens/operations/authenticate.js +10 -4
- package/components/identity.tokens/operations/authenticate.js.map +1 -1
- package/components/identity.tokens/operations/decrypt.js +1 -0
- package/components/identity.tokens/operations/decrypt.js.map +1 -1
- package/components/identity.tokens/operations/encrypt.js +5 -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 +8 -2
- package/components/identity.tokens/receivers/identity.bans.created.js +3 -0
- package/components/identity.tokens/source/authenticate.test.ts +11 -4
- package/components/identity.tokens/source/authenticate.ts +12 -5
- package/components/identity.tokens/source/decrypt.test.ts +5 -3
- package/components/identity.tokens/source/decrypt.ts +9 -8
- package/components/identity.tokens/source/encrypt.test.ts +26 -2
- package/components/identity.tokens/source/encrypt.ts +5 -1
- package/components/identity.tokens/source/types.ts +9 -2
- package/components/octets.storage/manifest.toa.yaml +0 -7
- package/documentation/access.md +27 -16
- package/documentation/authorities.md +53 -0
- package/documentation/cache.md +8 -1
- package/documentation/components.md +47 -22
- package/documentation/identity.md +17 -22
- package/documentation/io.md +56 -0
- package/documentation/protocol.md +3 -0
- package/documentation/query.md +17 -11
- package/documentation/require.md +15 -0
- package/documentation/tree.md +22 -4
- package/documentation/vary.md +14 -14
- package/features/access.feature +89 -47
- package/features/annotation.feature +2 -0
- package/features/authorities.basic.feature +141 -0
- package/features/authorities.feature +32 -0
- package/features/authorities.federation.feature +99 -0
- package/features/authorities.tokens.feature +118 -0
- package/features/body.feature +4 -0
- package/features/cache.feature +112 -5
- package/features/cors.feature +7 -2
- package/features/debug.feature +34 -0
- package/features/directives.feature +5 -0
- package/features/dynamic.feature +18 -7
- package/features/errors.feature +18 -4
- package/features/etag.feature +18 -1
- package/features/identity.bans.feature +137 -0
- package/features/identity.basic.feature +142 -19
- package/features/identity.feature +7 -2
- package/features/identity.federation.feature +67 -14
- package/features/identity.roles.feature +220 -4
- package/features/identity.tokens.feature +57 -4
- package/features/io.feature +205 -0
- package/features/octets.entries.feature +10 -0
- package/features/octets.feature +60 -64
- package/features/octets.meta.feature +7 -3
- package/features/octets.workflows.feature +14 -0
- package/features/probes.feature +14 -0
- package/features/{queries.feature → query.feature} +50 -3
- package/features/require.feature +67 -0
- package/features/response.feature +12 -3
- package/features/routes.feature +25 -12
- package/features/steps/Database.ts +17 -10
- package/features/steps/Gateway.ts +23 -6
- package/features/steps/IdP.ts +28 -23
- package/features/steps/components/echo/manifest.toa.yaml +5 -1
- package/features/steps/components/echo/operations/identity.js +7 -0
- package/features/steps/components/pots/manifest.toa.yaml +2 -0
- package/features/steps/components/users.properties/manifest.toa.yaml +2 -1
- package/features/streams.feature +1 -0
- package/features/timing.feature +27 -1
- package/features/vary.feature +105 -3
- package/package.json +12 -11
- package/readme.md +19 -14
- package/schemas/annotation.cos.yaml +1 -1
- 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/source/Annotation.ts +3 -3
- package/source/Context.ts +6 -4
- package/source/Directive.test.ts +4 -4
- package/source/Directive.ts +11 -38
- package/source/Endpoint.ts +43 -8
- package/source/Factory.ts +11 -7
- package/source/Gateway.ts +16 -44
- package/source/HTTP/Context.ts +24 -2
- package/source/HTTP/Server.ts +56 -43
- package/source/HTTP/exceptions.ts +7 -1
- package/source/HTTP/messages.ts +1 -1
- package/source/Mapping.ts +6 -1
- package/source/Query.test.ts +1 -1
- package/source/Query.ts +35 -24
- 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 +32 -22
- package/source/directives/auth/Authorization.ts +38 -19
- package/source/directives/auth/Delegate.ts +42 -0
- package/source/directives/auth/Incept.ts +3 -2
- package/source/directives/auth/Role.test.ts +53 -6
- package/source/directives/auth/Role.ts +22 -14
- package/source/directives/auth/types.ts +1 -1
- package/source/directives/cache/Cache.ts +15 -8
- package/source/directives/cache/Control.ts +42 -16
- package/source/directives/cors/CORS.ts +13 -7
- 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 +4 -3
- package/source/directives/octets/Delete.ts +4 -2
- package/source/directives/octets/Directive.ts +10 -0
- package/source/directives/octets/Fetch.ts +4 -3
- package/source/directives/octets/List.ts +4 -2
- package/source/directives/octets/Octets.ts +6 -8
- package/source/directives/octets/Store.ts +12 -4
- package/source/directives/octets/Workflow.ts +10 -3
- package/source/directives/octets/types.ts +0 -7
- 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 +7 -5
- package/source/directives/vary/embeddings/Authority.ts +8 -0
- package/source/directives/vary/embeddings/Embedding.ts +2 -1
- package/source/directives/vary/embeddings/Header.ts +8 -6
- package/source/directives/vary/embeddings/Language.ts +1 -1
- package/source/directives/vary/embeddings/Parameter.ts +14 -0
- package/source/directives/vary/embeddings/index.ts +6 -4
- package/source/exceptions.ts +22 -11
- package/source/root.ts +5 -0
- package/source/schemas.ts +1 -1
- package/transpiled/Annotation.d.ts +3 -3
- package/transpiled/Context.d.ts +6 -4
- package/transpiled/Directive.d.ts +4 -17
- package/transpiled/Directive.js +4 -7
- package/transpiled/Directive.js.map +1 -1
- package/transpiled/Endpoint.d.ts +5 -3
- package/transpiled/Endpoint.js +30 -5
- package/transpiled/Endpoint.js.map +1 -1
- package/transpiled/Factory.js +9 -4
- package/transpiled/Factory.js.map +1 -1
- package/transpiled/Gateway.d.ts +1 -4
- package/transpiled/Gateway.js +10 -26
- package/transpiled/Gateway.js.map +1 -1
- package/transpiled/HTTP/Context.d.ts +8 -1
- package/transpiled/HTTP/Context.js +15 -2
- package/transpiled/HTTP/Context.js.map +1 -1
- package/transpiled/HTTP/Server.d.ts +13 -2
- package/transpiled/HTTP/Server.js +41 -35
- package/transpiled/HTTP/Server.js.map +1 -1
- package/transpiled/HTTP/exceptions.d.ts +4 -1
- package/transpiled/HTTP/exceptions.js +7 -1
- package/transpiled/HTTP/exceptions.js.map +1 -1
- package/transpiled/HTTP/messages.js +1 -1
- package/transpiled/HTTP/messages.js.map +1 -1
- package/transpiled/Mapping.js +4 -1
- package/transpiled/Mapping.js.map +1 -1
- package/transpiled/Query.d.ts +1 -0
- package/transpiled/Query.js +21 -20
- package/transpiled/Query.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.d.ts +1 -1
- package/transpiled/deployment.js +28 -20
- package/transpiled/deployment.js.map +1 -1
- package/transpiled/directives/auth/Authorization.d.ts +2 -3
- package/transpiled/directives/auth/Authorization.js +26 -12
- package/transpiled/directives/auth/Authorization.js.map +1 -1
- package/transpiled/directives/auth/Delegate.d.ts +10 -0
- package/transpiled/directives/auth/Delegate.js +34 -0
- package/transpiled/directives/auth/Delegate.js.map +1 -0
- package/transpiled/directives/auth/Incept.js +3 -2
- package/transpiled/directives/auth/Incept.js.map +1 -1
- package/transpiled/directives/auth/Role.d.ts +4 -1
- package/transpiled/directives/auth/Role.js +20 -14
- package/transpiled/directives/auth/Role.js.map +1 -1
- package/transpiled/directives/cache/Cache.d.ts +5 -5
- package/transpiled/directives/cache/Cache.js +10 -4
- package/transpiled/directives/cache/Cache.js.map +1 -1
- package/transpiled/directives/cache/Control.d.ts +2 -1
- package/transpiled/directives/cache/Control.js +29 -12
- package/transpiled/directives/cache/Control.js.map +1 -1
- package/transpiled/directives/cors/CORS.d.ts +2 -3
- package/transpiled/directives/cors/CORS.js +13 -7
- 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/{octets/Permute.js → io/Input.js} +33 -26
- 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 +3 -3
- package/transpiled/directives/octets/Context.js +4 -2
- package/transpiled/directives/octets/Context.js.map +1 -1
- package/transpiled/directives/octets/Delete.d.ts +3 -2
- package/transpiled/directives/octets/Delete.js +3 -1
- 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 +3 -2
- package/transpiled/directives/octets/Fetch.js +3 -1
- package/transpiled/directives/octets/Fetch.js.map +1 -1
- package/transpiled/directives/octets/List.d.ts +3 -2
- package/transpiled/directives/octets/List.js +3 -1
- package/transpiled/directives/octets/List.js.map +1 -1
- package/transpiled/directives/octets/Octets.d.ts +4 -4
- package/transpiled/directives/octets/Octets.js +2 -4
- package/transpiled/directives/octets/Octets.js.map +1 -1
- package/transpiled/directives/octets/Store.d.ts +3 -2
- package/transpiled/directives/octets/Store.js +10 -3
- package/transpiled/directives/octets/Store.js.map +1 -1
- package/transpiled/directives/octets/Workflow.d.ts +3 -2
- package/transpiled/directives/octets/Workflow.js +9 -2
- package/transpiled/directives/octets/Workflow.js.map +1 -1
- package/transpiled/directives/octets/types.d.ts +0 -5
- 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 +3 -3
- package/transpiled/directives/vary/Vary.js.map +1 -1
- package/transpiled/directives/vary/embeddings/Authority.d.ts +5 -0
- package/transpiled/directives/vary/embeddings/Authority.js +10 -0
- package/transpiled/directives/vary/embeddings/Authority.js.map +1 -0
- package/transpiled/directives/vary/embeddings/Embedding.d.ts +2 -1
- package/transpiled/directives/vary/embeddings/Header.js +8 -6
- package/transpiled/directives/vary/embeddings/Header.js.map +1 -1
- package/transpiled/directives/vary/embeddings/Language.js +1 -1
- 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 +8 -4
- 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/root.js +5 -0
- package/transpiled/root.js.map +1 -1
- package/transpiled/schemas.d.ts +1 -1
- package/transpiled/schemas.js +2 -2
- package/transpiled/schemas.js.map +1 -1
- package/transpiled/tsconfig.tsbuildinfo +1 -1
- package/components/identity.basic/operations/create.d.ts +0 -10
- package/components/identity.basic/operations/create.js +0 -10
- package/components/identity.basic/operations/create.js.map +0 -1
- package/components/identity.basic/source/create.ts +0 -18
- package/components/identity.federation/operations/create.d.ts +0 -10
- package/components/identity.federation/operations/create.js.map +0 -1
- package/components/identity.federation/operations/schemas.d.ts +0 -59
- package/components/identity.federation/operations/schemas.js +0 -9
- package/components/identity.federation/operations/schemas.js.map +0 -1
- package/components/identity.federation/operations/types.js.map +0 -1
- package/components/identity.federation/source/schemas.ts +0 -61
- package/components/octets.storage/operations/permute.js +0 -7
- package/source/HTTP/Server.test.ts +0 -126
- package/source/directives/octets/Permute.ts +0 -43
- package/transpiled/directives/octets/Permute.d.ts +0 -10
- package/transpiled/directives/octets/Permute.js.map +0 -1
|
@@ -13,11 +13,13 @@ Feature: Queries
|
|
|
13
13
|
"""yaml
|
|
14
14
|
exposition:
|
|
15
15
|
/pot:
|
|
16
|
+
io:output: true
|
|
16
17
|
GET: observe
|
|
17
18
|
"""
|
|
18
19
|
When the following request is received:
|
|
19
20
|
"""
|
|
20
21
|
GET /pots/pot/?id=99988d785d7d445cad45dbf8531f560b HTTP/1.1
|
|
22
|
+
host: nex.toa.io
|
|
21
23
|
accept: application/yaml
|
|
22
24
|
"""
|
|
23
25
|
Then the following reply is sent:
|
|
@@ -35,11 +37,13 @@ Feature: Queries
|
|
|
35
37
|
"""yaml
|
|
36
38
|
exposition:
|
|
37
39
|
/:
|
|
40
|
+
io:output: true
|
|
38
41
|
GET: enumerate
|
|
39
42
|
"""
|
|
40
43
|
When the following request is received:
|
|
41
44
|
"""
|
|
42
45
|
GET /pots/?criteria=volume<300&limit=10 HTTP/1.1
|
|
46
|
+
host: nex.toa.io
|
|
43
47
|
accept: application/yaml
|
|
44
48
|
"""
|
|
45
49
|
Then the following reply is sent:
|
|
@@ -60,11 +64,13 @@ Feature: Queries
|
|
|
60
64
|
"""yaml
|
|
61
65
|
exposition:
|
|
62
66
|
/:
|
|
67
|
+
io:output: true
|
|
63
68
|
GET: enumerate
|
|
64
69
|
"""
|
|
65
70
|
When the following request is received:
|
|
66
71
|
"""
|
|
67
72
|
GET /pots/?omit=1&limit=2 HTTP/1.1
|
|
73
|
+
host: nex.toa.io
|
|
68
74
|
accept: application/yaml
|
|
69
75
|
"""
|
|
70
76
|
Then the following reply is sent:
|
|
@@ -85,11 +91,13 @@ Feature: Queries
|
|
|
85
91
|
"""yaml
|
|
86
92
|
exposition:
|
|
87
93
|
/:
|
|
94
|
+
io:output: true
|
|
88
95
|
GET: enumerate
|
|
89
96
|
"""
|
|
90
97
|
When the following request is received:
|
|
91
98
|
"""
|
|
92
99
|
GET /pots/?sort=volume:desc&limit=2 HTTP/1.1
|
|
100
|
+
host: nex.toa.io
|
|
93
101
|
accept: application/yaml
|
|
94
102
|
"""
|
|
95
103
|
Then the following reply is sent:
|
|
@@ -105,16 +113,18 @@ Feature: Queries
|
|
|
105
113
|
volume: 300
|
|
106
114
|
"""
|
|
107
115
|
|
|
108
|
-
Scenario: Request to a route with
|
|
116
|
+
Scenario: Request to a route with path variable
|
|
109
117
|
Given the `pots` is running with the following manifest:
|
|
110
118
|
"""yaml
|
|
111
119
|
exposition:
|
|
112
120
|
/:id:
|
|
121
|
+
io:output: true
|
|
113
122
|
GET: observe
|
|
114
123
|
"""
|
|
115
124
|
When the following request is received:
|
|
116
125
|
"""
|
|
117
126
|
GET /pots/99988d785d7d445cad45dbf8531f560b/ HTTP/1.1
|
|
127
|
+
host: nex.toa.io
|
|
118
128
|
accept: application/yaml
|
|
119
129
|
"""
|
|
120
130
|
Then the following reply is sent:
|
|
@@ -127,11 +137,43 @@ Feature: Queries
|
|
|
127
137
|
volume: 200
|
|
128
138
|
"""
|
|
129
139
|
|
|
130
|
-
Scenario: Request to a route with
|
|
140
|
+
Scenario: Request to a route with path variable using OR operator
|
|
141
|
+
Given the `pots` is running with the following manifest:
|
|
142
|
+
"""yaml
|
|
143
|
+
exposition:
|
|
144
|
+
/:volume:
|
|
145
|
+
io:output: true
|
|
146
|
+
GET:
|
|
147
|
+
query:
|
|
148
|
+
criteria: ',volume==100'
|
|
149
|
+
endpoint: enumerate
|
|
150
|
+
"""
|
|
151
|
+
When the following request is received:
|
|
152
|
+
"""
|
|
153
|
+
GET /pots/200/ HTTP/1.1
|
|
154
|
+
host: nex.toa.io
|
|
155
|
+
accept: application/yaml
|
|
156
|
+
"""
|
|
157
|
+
Then the following reply is sent:
|
|
158
|
+
"""
|
|
159
|
+
200 OK
|
|
160
|
+
content-type: application/yaml
|
|
161
|
+
|
|
162
|
+
- id: 4c4759e6f9c74da989d64511df42d6f4
|
|
163
|
+
title: First pot
|
|
164
|
+
volume: 100
|
|
165
|
+
temperature: 80
|
|
166
|
+
- id: 99988d785d7d445cad45dbf8531f560b
|
|
167
|
+
title: Second pot
|
|
168
|
+
volume: 200
|
|
169
|
+
"""
|
|
170
|
+
|
|
171
|
+
Scenario: Request to a route with predefined criteria
|
|
131
172
|
Given the `pots` is running with the following manifest:
|
|
132
173
|
"""yaml
|
|
133
174
|
exposition:
|
|
134
175
|
/big:
|
|
176
|
+
io:output: true
|
|
135
177
|
GET:
|
|
136
178
|
endpoint: enumerate
|
|
137
179
|
query:
|
|
@@ -140,6 +182,7 @@ Feature: Queries
|
|
|
140
182
|
When the following request is received:
|
|
141
183
|
"""
|
|
142
184
|
GET /pots/big/ HTTP/1.1
|
|
185
|
+
host: nex.toa.io
|
|
143
186
|
accept: application/yaml
|
|
144
187
|
"""
|
|
145
188
|
Then the following reply is sent:
|
|
@@ -155,11 +198,12 @@ Feature: Queries
|
|
|
155
198
|
volume: 400
|
|
156
199
|
"""
|
|
157
200
|
|
|
158
|
-
Scenario: Request to a route with
|
|
201
|
+
Scenario: Request to a route with open criteria
|
|
159
202
|
Given the `pots` is running with the following manifest:
|
|
160
203
|
"""yaml
|
|
161
204
|
exposition:
|
|
162
205
|
/big:
|
|
206
|
+
io:output: true
|
|
163
207
|
GET:
|
|
164
208
|
endpoint: enumerate
|
|
165
209
|
query:
|
|
@@ -168,6 +212,7 @@ Feature: Queries
|
|
|
168
212
|
When the following request is received:
|
|
169
213
|
"""
|
|
170
214
|
GET /pots/big/?criteria=temperature>50 HTTP/1.1
|
|
215
|
+
host: nex.toa.io
|
|
171
216
|
accept: application/yaml
|
|
172
217
|
"""
|
|
173
218
|
Then the following reply is sent:
|
|
@@ -186,6 +231,7 @@ Feature: Queries
|
|
|
186
231
|
"""yaml
|
|
187
232
|
exposition:
|
|
188
233
|
/hottest2:
|
|
234
|
+
io:output: true
|
|
189
235
|
GET:
|
|
190
236
|
endpoint: enumerate
|
|
191
237
|
query:
|
|
@@ -196,6 +242,7 @@ Feature: Queries
|
|
|
196
242
|
When the following request is received:
|
|
197
243
|
"""
|
|
198
244
|
GET /pots/hottest2/ HTTP/1.1
|
|
245
|
+
host: nex.toa.io
|
|
199
246
|
accept: application/yaml
|
|
200
247
|
"""
|
|
201
248
|
Then the following reply is sent:
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
Feature: Request requirements
|
|
2
|
+
|
|
3
|
+
Scenario Outline: Require headers
|
|
4
|
+
Given the `pots` is running with the following manifest:
|
|
5
|
+
"""yaml
|
|
6
|
+
exposition:
|
|
7
|
+
/:
|
|
8
|
+
io:output: true
|
|
9
|
+
POST: create
|
|
10
|
+
/one/:id:
|
|
11
|
+
require:header: if-match
|
|
12
|
+
PUT: transit
|
|
13
|
+
/two/:id:
|
|
14
|
+
require:headers: [if-match]
|
|
15
|
+
PUT: transit
|
|
16
|
+
"""
|
|
17
|
+
When the following request is received:
|
|
18
|
+
"""
|
|
19
|
+
POST /pots/ HTTP/1.1
|
|
20
|
+
host: nex.toa.io
|
|
21
|
+
content-type: application/yaml
|
|
22
|
+
accept: application/yaml
|
|
23
|
+
|
|
24
|
+
title: Hello
|
|
25
|
+
volume: 1.5
|
|
26
|
+
"""
|
|
27
|
+
Then the following reply is sent:
|
|
28
|
+
"""
|
|
29
|
+
201 Created
|
|
30
|
+
etag: ${{ etag }}
|
|
31
|
+
|
|
32
|
+
id: ${{ id }}
|
|
33
|
+
"""
|
|
34
|
+
When the following request is received:
|
|
35
|
+
"""
|
|
36
|
+
PUT /pots/<variant>/${{ id }}/ HTTP/1.1
|
|
37
|
+
host: nex.toa.io
|
|
38
|
+
content-type: application/yaml
|
|
39
|
+
accept: text/plain
|
|
40
|
+
|
|
41
|
+
title: Hello
|
|
42
|
+
volume: 1.5
|
|
43
|
+
"""
|
|
44
|
+
Then the following reply is sent:
|
|
45
|
+
"""
|
|
46
|
+
400 Bad Request
|
|
47
|
+
|
|
48
|
+
Header required: if-match
|
|
49
|
+
"""
|
|
50
|
+
When the following request is received:
|
|
51
|
+
"""
|
|
52
|
+
PUT /pots/<variant>/${{ id }}/ HTTP/1.1
|
|
53
|
+
host: nex.toa.io
|
|
54
|
+
content-type: application/yaml
|
|
55
|
+
accept: text/plain
|
|
56
|
+
if-match: ${{ etag }}
|
|
57
|
+
|
|
58
|
+
title: Bye
|
|
59
|
+
"""
|
|
60
|
+
Then the following reply is sent:
|
|
61
|
+
"""
|
|
62
|
+
200 OK
|
|
63
|
+
"""
|
|
64
|
+
Examples:
|
|
65
|
+
| variant |
|
|
66
|
+
| one |
|
|
67
|
+
| two |
|
|
@@ -4,13 +4,16 @@ Feature: Response
|
|
|
4
4
|
Given the annotation:
|
|
5
5
|
"""yaml
|
|
6
6
|
/:
|
|
7
|
+
io:output: true
|
|
7
8
|
GET:
|
|
8
9
|
anonymous: true
|
|
9
|
-
dev:stub:
|
|
10
|
+
dev:stub:
|
|
11
|
+
hello: world
|
|
10
12
|
"""
|
|
11
13
|
When the following request is received:
|
|
12
14
|
"""
|
|
13
15
|
GET / HTTP/1.1
|
|
16
|
+
host: nex.toa.io
|
|
14
17
|
accept: application/json
|
|
15
18
|
"""
|
|
16
19
|
Then the following reply is sent:
|
|
@@ -18,6 +21,8 @@ Feature: Response
|
|
|
18
21
|
200 OK
|
|
19
22
|
content-type: application/json
|
|
20
23
|
vary: accept
|
|
24
|
+
|
|
25
|
+
{"hello":"world"}
|
|
21
26
|
"""
|
|
22
27
|
|
|
23
28
|
Scenario: Error as YAML
|
|
@@ -25,16 +30,18 @@ Feature: Response
|
|
|
25
30
|
"""yaml
|
|
26
31
|
exposition:
|
|
27
32
|
/:
|
|
33
|
+
io:output: true
|
|
28
34
|
GET: error
|
|
29
35
|
"""
|
|
30
36
|
When the following request is received:
|
|
31
37
|
"""
|
|
32
38
|
GET /echo/ HTTP/1.1
|
|
39
|
+
host: nex.toa.io
|
|
33
40
|
accept: application/yaml
|
|
34
41
|
"""
|
|
35
42
|
Then the following reply is sent:
|
|
36
43
|
"""
|
|
37
|
-
|
|
44
|
+
422 Unprocessable Entity
|
|
38
45
|
content-type: application/yaml
|
|
39
46
|
|
|
40
47
|
code: CODE
|
|
@@ -46,16 +53,18 @@ Feature: Response
|
|
|
46
53
|
"""yaml
|
|
47
54
|
exposition:
|
|
48
55
|
/:
|
|
56
|
+
io:output: true
|
|
49
57
|
GET: error
|
|
50
58
|
"""
|
|
51
59
|
When the following request is received:
|
|
52
60
|
"""
|
|
53
61
|
GET /echo/ HTTP/1.1
|
|
62
|
+
host: nex.toa.io
|
|
54
63
|
accept: application/msgpack
|
|
55
64
|
"""
|
|
56
65
|
Then the following reply is sent:
|
|
57
66
|
"""
|
|
58
|
-
|
|
67
|
+
422 Unprocessable Entity
|
|
59
68
|
content-type: application/msgpack
|
|
60
69
|
"""
|
|
61
70
|
And response body contains MessagePack-encoded value:
|
package/features/routes.feature
CHANGED
|
@@ -6,16 +6,19 @@ Feature: Routes
|
|
|
6
6
|
namespace: basic
|
|
7
7
|
|
|
8
8
|
exposition:
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
9
|
+
/:
|
|
10
|
+
io:output: true
|
|
11
|
+
/strict:
|
|
12
|
+
GET:
|
|
13
|
+
endpoint: greet
|
|
14
|
+
/shortcuts:
|
|
15
|
+
/operation:
|
|
16
|
+
GET: greet
|
|
15
17
|
"""
|
|
16
18
|
When the following request is received:
|
|
17
19
|
"""
|
|
18
20
|
GET /basic/greeter<route> HTTP/1.1
|
|
21
|
+
host: nex.toa.io
|
|
19
22
|
accept: text/plain
|
|
20
23
|
"""
|
|
21
24
|
Then the following reply is sent:
|
|
@@ -34,11 +37,13 @@ Feature: Routes
|
|
|
34
37
|
"""yaml
|
|
35
38
|
exposition:
|
|
36
39
|
/:
|
|
40
|
+
io:output: true
|
|
37
41
|
GET: greet
|
|
38
42
|
"""
|
|
39
43
|
When the following request is received:
|
|
40
44
|
"""
|
|
41
45
|
GET /greeter/ HTTP/1.1
|
|
46
|
+
host: nex.toa.io
|
|
42
47
|
accept: text/plain
|
|
43
48
|
"""
|
|
44
49
|
Then the following reply is sent:
|
|
@@ -52,14 +57,17 @@ Feature: Routes
|
|
|
52
57
|
Given the `greeter` is running with the following manifest:
|
|
53
58
|
"""yaml
|
|
54
59
|
exposition:
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
60
|
+
/:
|
|
61
|
+
io:output: true
|
|
62
|
+
/*:
|
|
63
|
+
GET: greet
|
|
64
|
+
/foo/*/bar:
|
|
65
|
+
GET: greet
|
|
59
66
|
"""
|
|
60
67
|
When the following request is received:
|
|
61
68
|
"""
|
|
62
69
|
GET /greeter/baz/ HTTP/1.1
|
|
70
|
+
host: nex.toa.io
|
|
63
71
|
accept: text/plain
|
|
64
72
|
"""
|
|
65
73
|
Then the following reply is sent:
|
|
@@ -71,6 +79,7 @@ Feature: Routes
|
|
|
71
79
|
When the following request is received:
|
|
72
80
|
"""
|
|
73
81
|
GET /greeter/baz/qux/ HTTP/1.1
|
|
82
|
+
host: nex.toa.io
|
|
74
83
|
"""
|
|
75
84
|
Then the following reply is sent:
|
|
76
85
|
"""
|
|
@@ -79,6 +88,7 @@ Feature: Routes
|
|
|
79
88
|
When the following request is received:
|
|
80
89
|
"""
|
|
81
90
|
GET /greeter/foo/baz/bar/ HTTP/1.1
|
|
91
|
+
host: nex.toa.io
|
|
82
92
|
accept: text/plain
|
|
83
93
|
"""
|
|
84
94
|
Then the following reply is sent:
|
|
@@ -89,22 +99,24 @@ Feature: Routes
|
|
|
89
99
|
"""
|
|
90
100
|
|
|
91
101
|
Scenario: Routes with naming conflicts
|
|
92
|
-
Given the
|
|
93
|
-
And the `users` is running with the following manifest:
|
|
102
|
+
Given the `users` is running with the following manifest:
|
|
94
103
|
"""yaml
|
|
95
104
|
exposition:
|
|
96
105
|
/:
|
|
106
|
+
io:output: true
|
|
97
107
|
POST: create
|
|
98
108
|
"""
|
|
99
109
|
And the `users.properties` is running with the following manifest:
|
|
100
110
|
"""yaml
|
|
101
111
|
exposition:
|
|
102
112
|
/:id:
|
|
113
|
+
io:output: true
|
|
103
114
|
GET: observe
|
|
104
115
|
"""
|
|
105
116
|
When the following request is received:
|
|
106
117
|
"""
|
|
107
118
|
GET /users/properties/b5534021e30042259badffbd1831e472/ HTTP/1.1
|
|
119
|
+
host: nex.toa.io
|
|
108
120
|
accept: application/yaml
|
|
109
121
|
"""
|
|
110
122
|
Then the following reply is sent:
|
|
@@ -116,6 +128,7 @@ Feature: Routes
|
|
|
116
128
|
When the following request is received:
|
|
117
129
|
"""
|
|
118
130
|
POST /users/ HTTP/1.1
|
|
131
|
+
host: nex.toa.io
|
|
119
132
|
content-type: application/yaml
|
|
120
133
|
|
|
121
134
|
name: Alice
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { afterAll, beforeAll, binding, given } from 'cucumber-tsflow'
|
|
2
|
-
import { type DataTable } from '@cucumber/cucumber'
|
|
3
2
|
import { MongoClient } from 'mongodb'
|
|
3
|
+
import type { Collection } from 'mongodb'
|
|
4
|
+
import type { DataTable } from '@cucumber/cucumber'
|
|
4
5
|
|
|
5
6
|
@binding()
|
|
6
7
|
export class Database {
|
|
@@ -8,9 +9,7 @@ export class Database {
|
|
|
8
9
|
|
|
9
10
|
@given('the `{word}` database contains:')
|
|
10
11
|
public async upsert (id: string, table: DataTable): Promise<void> {
|
|
11
|
-
const
|
|
12
|
-
const collection = Database.client.db(namespace).collection(name)
|
|
13
|
-
|
|
12
|
+
const collection = this.collection(id)
|
|
14
13
|
const columns = table.raw()[0]
|
|
15
14
|
const rows = table.rows()
|
|
16
15
|
const documents: Document[] = []
|
|
@@ -22,7 +21,11 @@ export class Database {
|
|
|
22
21
|
const str = rows[r][c]
|
|
23
22
|
const int = parseInt(str)
|
|
24
23
|
|
|
25
|
-
document[columns[c]] = int.toString() === str
|
|
24
|
+
document[columns[c]] = int.toString() === str
|
|
25
|
+
? int
|
|
26
|
+
: str === 'null'
|
|
27
|
+
? null
|
|
28
|
+
: str
|
|
26
29
|
}
|
|
27
30
|
|
|
28
31
|
documents.push(document)
|
|
@@ -36,10 +39,7 @@ export class Database {
|
|
|
36
39
|
|
|
37
40
|
@given('the `{word}` database is empty')
|
|
38
41
|
public async truncate (id: string): Promise<void> {
|
|
39
|
-
|
|
40
|
-
const collection = Database.client.db(namespace).collection(name)
|
|
41
|
-
|
|
42
|
-
await collection.deleteMany({})
|
|
42
|
+
await this.collection(id).deleteMany({})
|
|
43
43
|
}
|
|
44
44
|
|
|
45
45
|
@beforeAll()
|
|
@@ -53,6 +53,13 @@ export class Database {
|
|
|
53
53
|
public static async disconnect (): Promise<void> {
|
|
54
54
|
await this.client.close()
|
|
55
55
|
}
|
|
56
|
+
|
|
57
|
+
private collection (id: string): Collection {
|
|
58
|
+
const [name, namespace = 'default'] = id.split('.').reverse()
|
|
59
|
+
const collection = `${namespace}_${name}`.toLowerCase()
|
|
60
|
+
|
|
61
|
+
return Database.client.db('toa-dev').collection(collection)
|
|
62
|
+
}
|
|
56
63
|
}
|
|
57
64
|
|
|
58
|
-
type Document = Record<string, string | number>
|
|
65
|
+
type Document = Record<string, string | number | null>
|
|
@@ -6,6 +6,7 @@ import { encode, timeout } from '@toa.io/generic'
|
|
|
6
6
|
import { Factory } from '../../source'
|
|
7
7
|
import * as syntax from '../../source/RTD/syntax'
|
|
8
8
|
import { shortcuts } from '../../source/Directive'
|
|
9
|
+
import type * as http from '../../source/HTTP'
|
|
9
10
|
|
|
10
11
|
let instance: Connector | null = null
|
|
11
12
|
|
|
@@ -23,11 +24,19 @@ export class Gateway {
|
|
|
23
24
|
process.env.TOA_EXPOSITION = encode(tree)
|
|
24
25
|
}
|
|
25
26
|
|
|
26
|
-
|
|
27
|
-
|
|
27
|
+
const { debug, trace, authorities } = annotation
|
|
28
|
+
const properties = Object.assign({}, DEFAULT_PROPERTIES)
|
|
28
29
|
|
|
29
|
-
if (
|
|
30
|
-
|
|
30
|
+
if (debug !== undefined)
|
|
31
|
+
properties.debug = debug
|
|
32
|
+
|
|
33
|
+
if (trace !== undefined)
|
|
34
|
+
properties.trace = trace
|
|
35
|
+
|
|
36
|
+
if (authorities !== undefined)
|
|
37
|
+
properties.authorities = authorities
|
|
38
|
+
|
|
39
|
+
process.env.TOA_EXPOSITION_PROPERTIES = encode(properties)
|
|
31
40
|
|
|
32
41
|
await Gateway.stop()
|
|
33
42
|
|
|
@@ -54,7 +63,8 @@ export class Gateway {
|
|
|
54
63
|
if (instance !== null)
|
|
55
64
|
return
|
|
56
65
|
|
|
57
|
-
process.env.TOA_EXPOSITION ??=
|
|
66
|
+
process.env.TOA_EXPOSITION ??= DEFAULT_TREE
|
|
67
|
+
process.env.TOA_EXPOSITION_PROPERTIES ??= encode(DEFAULT_PROPERTIES)
|
|
58
68
|
|
|
59
69
|
this.writeConfiguration()
|
|
60
70
|
|
|
@@ -76,6 +86,7 @@ export class Gateway {
|
|
|
76
86
|
return
|
|
77
87
|
|
|
78
88
|
delete process.env.TOA_EXPOSITION
|
|
89
|
+
delete process.env.TOA_EXPOSITION_PROPERTIES
|
|
79
90
|
|
|
80
91
|
await Gateway.stop()
|
|
81
92
|
}
|
|
@@ -96,7 +107,7 @@ export class Gateway {
|
|
|
96
107
|
}
|
|
97
108
|
}
|
|
98
109
|
|
|
99
|
-
const
|
|
110
|
+
const DEFAULT_TREE = encode({
|
|
100
111
|
routes: [],
|
|
101
112
|
methods: [],
|
|
102
113
|
directives: [
|
|
@@ -108,6 +119,12 @@ const DEFAULT_ANNOTATION = encode({
|
|
|
108
119
|
]
|
|
109
120
|
} satisfies syntax.Node)
|
|
110
121
|
|
|
122
|
+
const DEFAULT_PROPERTIES: Partial<http.Options> = {
|
|
123
|
+
authorities: {
|
|
124
|
+
nex: 'nex.toa.io'
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
|
|
111
128
|
const DEFAULT_CONFIGURATION: Record<string, object> = {
|
|
112
129
|
'identity.tokens': {
|
|
113
130
|
key0: 'k3.local.pIZT8-9Fa6U_QtfQHOSStfGtmyzPINyKQq2Xk-hd7vA'
|
package/features/steps/IdP.ts
CHANGED
|
@@ -14,7 +14,8 @@ export class IdP {
|
|
|
14
14
|
private static privateKey?: crypto.KeyObject
|
|
15
15
|
private static issuer?: string
|
|
16
16
|
|
|
17
|
-
public constructor (private readonly captures: Captures) {
|
|
17
|
+
public constructor (private readonly captures: Captures) {
|
|
18
|
+
}
|
|
18
19
|
|
|
19
20
|
@afterAll()
|
|
20
21
|
public static async stop (): Promise<void> {
|
|
@@ -29,14 +30,21 @@ export class IdP {
|
|
|
29
30
|
if (IdP.server instanceof http.Server) return
|
|
30
31
|
|
|
31
32
|
// creating the key
|
|
32
|
-
const {
|
|
33
|
+
const {
|
|
34
|
+
publicKey,
|
|
35
|
+
privateKey
|
|
36
|
+
} = await util.promisify(crypto.generateKeyPair)('rsa', {
|
|
33
37
|
modulusLength: 2048
|
|
34
38
|
})
|
|
35
39
|
|
|
36
40
|
IdP.privateKey = privateKey
|
|
37
41
|
|
|
38
42
|
const jwk = JSON.stringify({
|
|
39
|
-
keys: [{
|
|
43
|
+
keys: [{
|
|
44
|
+
use: 'sig',
|
|
45
|
+
alg: 'RS256',
|
|
46
|
+
...publicKey.export({ format: 'jwk' })
|
|
47
|
+
}]
|
|
40
48
|
})
|
|
41
49
|
|
|
42
50
|
const JWK_URL = '/.well-known/jwks'
|
|
@@ -54,24 +62,23 @@ export class IdP {
|
|
|
54
62
|
response.end(jwk)
|
|
55
63
|
break
|
|
56
64
|
|
|
57
|
-
case '/.well-known/openid-configuration':
|
|
58
|
-
{
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
}
|
|
65
|
+
case '/.well-known/openid-configuration': {
|
|
66
|
+
const openIdConfiguration = JSON.stringify({
|
|
67
|
+
issuer: IdP.issuer,
|
|
68
|
+
jwks_uri: IdP.issuer + JWK_URL,
|
|
69
|
+
response_types_supported: ['id_token'],
|
|
70
|
+
subject_types_supported: ['public'],
|
|
71
|
+
id_token_signing_alg_values_supported: ['RS256'],
|
|
72
|
+
scopes_supported: ['openid']
|
|
73
|
+
})
|
|
74
|
+
|
|
75
|
+
response.writeHead(200, {
|
|
76
|
+
'Content-Type': 'application/json',
|
|
77
|
+
'Cache-Control': 'public, max-age=3600',
|
|
78
|
+
'Content-Length': openIdConfiguration.length
|
|
79
|
+
})
|
|
80
|
+
response.end(openIdConfiguration)
|
|
81
|
+
}
|
|
75
82
|
|
|
76
83
|
break
|
|
77
84
|
|
|
@@ -120,8 +127,6 @@ export class IdP {
|
|
|
120
127
|
|
|
121
128
|
@given('the IDP {word} token for {word} is issued with following secret:')
|
|
122
129
|
public async issueSymmetricToken (alg: string, user: string, secret: string): Promise<void> {
|
|
123
|
-
console.log('Sym token for %s with secret "%s"', user, secret)
|
|
124
|
-
|
|
125
130
|
const jwt = [
|
|
126
131
|
{
|
|
127
132
|
typ: 'JWT',
|