@toa.io/extensions.exposition 1.0.0-alpha.0 → 1.0.0-alpha.10
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 +2 -1
- package/components/identity.basic/manifest.toa.yaml +6 -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 +94 -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/lib/assertions-as-values.d.ts +4 -0
- package/components/identity.federation/operations/lib/assertions-as-values.js +45 -0
- package/components/identity.federation/operations/lib/assertions-as-values.js.map +1 -0
- package/components/identity.federation/operations/lib/jwt.d.ts +20 -0
- package/components/identity.federation/operations/lib/jwt.js +136 -0
- package/components/identity.federation/operations/lib/jwt.js.map +1 -0
- package/components/identity.federation/operations/schemas.d.ts +59 -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/authenticate.ts +28 -0
- package/components/identity.federation/source/create.ts +26 -0
- package/components/identity.federation/source/lib/assertions-as-values.ts +19 -0
- package/components/identity.federation/source/lib/jwt.test.ts +56 -0
- package/components/identity.federation/source/lib/jwt.ts +171 -0
- package/components/identity.federation/source/schemas.ts +61 -0
- package/components/identity.federation/source/types.ts +56 -0
- package/components/identity.federation/tsconfig.json +9 -0
- package/components/identity.roles/manifest.toa.yaml +17 -5
- package/components/identity.roles/operations/grant.d.ts +10 -0
- package/components/identity.roles/operations/grant.js +20 -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 +2 -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 +13 -0
- package/components/identity.roles/operations/principal.js +13 -0
- package/components/identity.roles/operations/principal.js.map +1 -0
- package/components/identity.roles/operations/tsconfig.tsbuildinfo +1 -0
- package/components/identity.roles/source/grant.ts +31 -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 +1 -1
- package/components/identity.tokens/operations/authenticate.d.ts +9 -0
- package/components/identity.tokens/operations/authenticate.js +32 -0
- package/components/identity.tokens/operations/authenticate.js.map +1 -0
- package/components/identity.tokens/operations/decrypt.d.ts +3 -0
- package/components/identity.tokens/operations/decrypt.js +32 -0
- package/components/identity.tokens/operations/decrypt.js.map +1 -0
- package/components/identity.tokens/operations/encrypt.d.ts +8 -0
- package/components/identity.tokens/operations/encrypt.js +22 -0
- package/components/identity.tokens/operations/encrypt.js.map +1 -0
- package/components/identity.tokens/operations/revoke.d.ts +2 -0
- package/components/identity.tokens/operations/revoke.js +8 -0
- package/components/identity.tokens/operations/revoke.js.map +1 -0
- package/components/identity.tokens/operations/tsconfig.tsbuildinfo +1 -0
- package/components/identity.tokens/operations/types.d.ts +40 -0
- package/components/identity.tokens/operations/types.js +3 -0
- package/components/identity.tokens/operations/types.js.map +1 -0
- package/components/octets.storage/manifest.toa.yaml +1 -0
- package/components/octets.storage/operations/store.js +3 -3
- package/cucumber.js +0 -1
- package/documentation/access.md +11 -11
- package/documentation/components.md +49 -13
- package/documentation/identity.md +14 -7
- package/documentation/io.md +56 -0
- package/documentation/octets.md +105 -40
- package/documentation/protocol.md +21 -1
- package/documentation/query.md +51 -6
- package/documentation/tree.md +22 -4
- package/documentation/vary.md +69 -0
- package/features/access.feature +13 -2
- package/features/annotation.feature +1 -0
- package/features/body.feature +3 -1
- package/features/cache.feature +3 -0
- package/features/cors.feature +72 -0
- package/features/directives.feature +2 -0
- package/features/dynamic.feature +14 -7
- package/features/errors.feature +4 -3
- package/features/etag.feature +97 -0
- package/features/identity.basic.feature +68 -0
- package/features/identity.feature +19 -3
- package/features/identity.federation.feature +153 -0
- package/features/identity.roles.feature +151 -0
- package/features/identity.tokens.feature +3 -0
- package/features/io.feature +167 -0
- package/features/octets.entries.feature +123 -0
- package/features/octets.feature +4 -28
- package/features/octets.meta.feature +66 -0
- package/features/octets.workflows.feature +177 -4
- package/features/queries.feature +9 -1
- package/features/response.feature +68 -0
- package/features/routes.feature +54 -10
- package/features/steps/Captures.ts +6 -0
- package/features/steps/Components.ts +18 -6
- package/features/steps/Database.ts +1 -1
- package/features/steps/Gateway.ts +4 -2
- package/features/steps/HTTP.ts +40 -87
- package/features/steps/IdP.ts +149 -0
- package/features/steps/Parameters.ts +8 -2
- package/features/steps/Workspace.ts +5 -7
- package/features/steps/components/echo/manifest.toa.yaml +1 -0
- package/features/steps/components/echo/operations/error.js +11 -0
- package/features/steps/components/greeter/manifest.toa.yaml +1 -0
- package/features/steps/components/octets.tester/manifest.toa.yaml +4 -0
- package/features/steps/components/octets.tester/operations/concat.js +7 -0
- package/features/steps/components/octets.tester/operations/echo.js +7 -0
- package/features/steps/components/pots/manifest.toa.yaml +12 -3
- package/features/steps/components/sequences/manifest.toa.yaml +1 -0
- package/features/steps/components/users/manifest.toa.yaml +4 -0
- package/features/steps/components/users.properties/manifest.toa.yaml +14 -0
- package/features/steps/tsconfig.json +1 -1
- package/features/timing.feature +66 -0
- package/features/vary.feature +180 -0
- package/package.json +16 -20
- 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/delete.cos.yaml +2 -1
- package/schemas/octets/list.cos.yaml +2 -1
- 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 +14 -8
- package/source/Directive.ts +26 -49
- package/source/Endpoint.ts +53 -6
- package/source/Factory.ts +23 -12
- package/source/Gateway.ts +45 -42
- package/source/HTTP/Context.ts +67 -0
- package/source/HTTP/Server.test.ts +61 -134
- package/source/HTTP/Server.ts +96 -87
- package/source/HTTP/Timing.ts +40 -0
- 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/index.ts +1 -0
- package/source/HTTP/messages.test.ts +27 -8
- package/source/HTTP/messages.ts +38 -42
- package/source/Interception.ts +24 -0
- 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 +19 -15
- package/source/RTD/factory.ts +2 -5
- package/source/RTD/syntax/parse.ts +6 -6
- package/source/RTD/syntax/types.ts +1 -1
- package/source/deployment.ts +7 -2
- package/source/directives/auth/Anonymous.ts +3 -2
- package/source/directives/auth/{Family.ts → Authorization.ts} +39 -40
- package/source/directives/auth/Delegate.ts +32 -0
- package/source/directives/auth/Incept.ts +11 -6
- package/source/directives/auth/Role.ts +5 -3
- package/source/directives/auth/Rule.ts +2 -2
- package/source/directives/auth/Scheme.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} +6 -7
- package/source/directives/cache/Control.ts +5 -5
- package/source/directives/cache/index.ts +2 -2
- package/source/directives/cache/types.ts +2 -2
- package/source/directives/cors/CORS.ts +62 -0
- package/source/directives/cors/index.ts +3 -0
- package/source/directives/dev/{Family.ts → Development.ts} +4 -5
- 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 +11 -6
- 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 +6 -5
- package/source/directives/octets/Delete.ts +64 -11
- package/source/directives/octets/Directive.ts +10 -0
- package/source/directives/octets/Fetch.ts +44 -29
- package/source/directives/octets/List.ts +50 -10
- package/source/directives/octets/{Family.ts → Octets.ts} +14 -9
- package/source/directives/octets/Permute.ts +18 -11
- package/source/directives/octets/Store.ts +70 -102
- package/source/directives/octets/Workflow.ts +48 -0
- package/source/directives/octets/index.ts +2 -2
- package/source/directives/octets/schemas.test.ts +21 -0
- package/source/directives/octets/schemas.ts +13 -6
- package/source/directives/octets/types.ts +2 -8
- package/source/directives/octets/workflows/Execution.ts +76 -0
- package/source/directives/octets/workflows/Workflow.ts +37 -0
- package/source/directives/octets/workflows/index.ts +1 -0
- package/source/directives/vary/Directive.ts +6 -0
- package/source/directives/vary/Embed.ts +62 -0
- package/source/directives/vary/Properties.ts +17 -0
- package/source/directives/vary/Vary.ts +48 -0
- package/source/directives/vary/embeddings/Embedding.ts +6 -0
- package/source/directives/vary/embeddings/Header.ts +32 -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/exceptions.ts +13 -9
- package/source/io.ts +4 -0
- package/source/manifest.test.ts +6 -14
- package/source/manifest.ts +9 -6
- package/source/root.ts +5 -0
- package/source/schemas.ts +7 -3
- package/transpiled/Annotation.d.ts +8 -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 +7 -0
- package/transpiled/Context.js +3 -0
- package/transpiled/Context.js.map +1 -0
- package/transpiled/Directive.d.ts +18 -0
- package/transpiled/Directive.js +75 -0
- package/transpiled/Directive.js.map +1 -0
- package/transpiled/Endpoint.d.ts +22 -0
- package/transpiled/Endpoint.js +101 -0
- package/transpiled/Endpoint.js.map +1 -0
- package/transpiled/Factory.d.ts +9 -0
- package/transpiled/Factory.js +73 -0
- package/transpiled/Factory.js.map +1 -0
- package/transpiled/Gateway.d.ts +18 -0
- package/transpiled/Gateway.js +92 -0
- package/transpiled/Gateway.js.map +1 -0
- 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 +25 -0
- package/transpiled/HTTP/Server.js +141 -0
- package/transpiled/HTTP/Server.js.map +1 -0
- 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 +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 +4 -0
- package/transpiled/HTTP/index.js +21 -0
- package/transpiled/HTTP/index.js.map +1 -0
- package/transpiled/HTTP/messages.d.ts +19 -0
- package/transpiled/HTTP/messages.js +73 -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 +12 -0
- package/transpiled/RTD/Context.js +3 -0
- package/transpiled/RTD/Context.js.map +1 -0
- package/transpiled/RTD/Directives.d.ts +22 -0
- package/transpiled/RTD/Directives.js +3 -0
- package/transpiled/RTD/Directives.js.map +1 -0
- package/transpiled/RTD/Endpoint.d.ts +11 -0
- package/transpiled/RTD/Endpoint.js +3 -0
- package/transpiled/RTD/Endpoint.js.map +1 -0
- package/transpiled/RTD/Match.d.ts +9 -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 +19 -0
- package/transpiled/RTD/Node.js +62 -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 +45 -0
- package/transpiled/RTD/Tree.js.map +1 -0
- package/transpiled/RTD/factory.d.ts +4 -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 +71 -0
- package/transpiled/deployment.js.map +1 -0
- package/transpiled/directives/auth/Anonymous.d.ts +6 -0
- package/transpiled/directives/auth/Anonymous.js +16 -0
- package/transpiled/directives/auth/Anonymous.js.map +1 -0
- package/transpiled/directives/auth/Authorization.d.ts +19 -0
- package/transpiled/directives/auth/Authorization.js +127 -0
- package/transpiled/directives/auth/Authorization.js.map +1 -0
- package/transpiled/directives/auth/Delegate.d.ts +8 -0
- package/transpiled/directives/auth/Delegate.js +27 -0
- package/transpiled/directives/auth/Delegate.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 +63 -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 +46 -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 +10 -0
- package/transpiled/directives/cors/CORS.js +51 -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 +13 -0
- package/transpiled/directives/index.js.map +1 -0
- 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 +8 -0
- package/transpiled/directives/octets/Context.js +42 -0
- package/transpiled/directives/octets/Context.js.map +1 -0
- package/transpiled/directives/octets/Delete.d.ts +20 -0
- package/transpiled/directives/octets/Delete.js +84 -0
- package/transpiled/directives/octets/Delete.js.map +1 -0
- 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 +18 -0
- package/transpiled/directives/octets/Fetch.js +92 -0
- package/transpiled/directives/octets/Fetch.js.map +1 -0
- package/transpiled/directives/octets/List.d.ts +16 -0
- package/transpiled/directives/octets/List.js +74 -0
- package/transpiled/directives/octets/List.js.map +1 -0
- package/transpiled/directives/octets/Octets.d.ts +12 -0
- package/transpiled/directives/octets/Octets.js +55 -0
- package/transpiled/directives/octets/Octets.js.map +1 -0
- package/transpiled/directives/octets/Permute.d.ts +11 -0
- package/transpiled/directives/octets/Permute.js +58 -0
- package/transpiled/directives/octets/Permute.js.map +1 -0
- package/transpiled/directives/octets/Store.d.ts +24 -0
- package/transpiled/directives/octets/Store.js +95 -0
- package/transpiled/directives/octets/Store.js.map +1 -0
- 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/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 +13 -0
- package/transpiled/directives/octets/schemas.js +18 -0
- package/transpiled/directives/octets/schemas.js.map +1 -0
- package/transpiled/directives/octets/types.d.ts +5 -0
- package/transpiled/directives/octets/types.js +3 -0
- package/transpiled/directives/octets/types.js.map +1 -0
- package/transpiled/directives/octets/workflows/Execution.d.ts +25 -0
- package/transpiled/directives/octets/workflows/Execution.js +54 -0
- package/transpiled/directives/octets/workflows/Execution.js.map +1 -0
- package/transpiled/directives/octets/workflows/Workflow.d.ts +12 -0
- package/transpiled/directives/octets/workflows/Workflow.js +25 -0
- package/transpiled/directives/octets/workflows/Workflow.js.map +1 -0
- package/transpiled/directives/octets/workflows/index.d.ts +1 -0
- package/transpiled/directives/octets/workflows/index.js +6 -0
- package/transpiled/directives/octets/workflows/index.js.map +1 -0
- package/transpiled/directives/vary/Directive.d.ts +5 -0
- package/transpiled/directives/vary/Directive.js +3 -0
- package/transpiled/directives/vary/Directive.js.map +1 -0
- package/transpiled/directives/vary/Embed.d.ts +10 -0
- package/transpiled/directives/vary/Embed.js +49 -0
- package/transpiled/directives/vary/Embed.js.map +1 -0
- package/transpiled/directives/vary/Properties.d.ts +9 -0
- package/transpiled/directives/vary/Properties.js +16 -0
- package/transpiled/directives/vary/Properties.js.map +1 -0
- package/transpiled/directives/vary/Vary.d.ts +10 -0
- package/transpiled/directives/vary/Vary.js +36 -0
- package/transpiled/directives/vary/Vary.js.map +1 -0
- package/transpiled/directives/vary/embeddings/Embedding.d.ts +5 -0
- package/transpiled/directives/vary/embeddings/Embedding.js +3 -0
- package/transpiled/directives/vary/embeddings/Embedding.js.map +1 -0
- package/transpiled/directives/vary/embeddings/Header.d.ts +7 -0
- package/transpiled/directives/vary/embeddings/Header.js +28 -0
- package/transpiled/directives/vary/embeddings/Header.js.map +1 -0
- package/transpiled/directives/vary/embeddings/Language.d.ts +7 -0
- package/transpiled/directives/vary/embeddings/Language.js +28 -0
- package/transpiled/directives/vary/embeddings/Language.js.map +1 -0
- package/transpiled/directives/vary/embeddings/index.d.ts +5 -0
- package/transpiled/directives/vary/embeddings/index.js +10 -0
- package/transpiled/directives/vary/embeddings/index.js.map +1 -0
- package/transpiled/directives/vary/index.d.ts +2 -0
- package/transpiled/directives/vary/index.js +6 -0
- package/transpiled/directives/vary/index.js.map +1 -0
- package/transpiled/discovery.d.ts +1 -0
- package/transpiled/discovery.js +3 -0
- package/transpiled/discovery.js.map +1 -0
- package/transpiled/exceptions.d.ts +2 -0
- package/transpiled/exceptions.js +39 -0
- package/transpiled/exceptions.js.map +1 -0
- package/transpiled/index.d.ts +5 -0
- package/transpiled/index.js +12 -0
- package/transpiled/index.js.map +1 -0
- package/transpiled/io.d.ts +3 -0
- package/transpiled/io.js +3 -0
- package/transpiled/io.js.map +1 -0
- package/transpiled/manifest.d.ts +3 -0
- package/transpiled/manifest.js +66 -0
- package/transpiled/manifest.js.map +1 -0
- package/transpiled/root.d.ts +2 -0
- package/transpiled/root.js +44 -0
- package/transpiled/root.js.map +1 -0
- package/transpiled/schemas.d.ts +7 -0
- package/transpiled/schemas.js +14 -0
- package/transpiled/schemas.js.map +1 -0
- package/transpiled/tsconfig.tsbuildinfo +1 -0
- package/source/HTTP/Server.fixtures.ts +0 -41
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# I/O restrictions
|
|
2
|
+
|
|
3
|
+
The Exposition comes with `io` directives to control access to the operation's input and output
|
|
4
|
+
properties.
|
|
5
|
+
|
|
6
|
+
## `io:input`
|
|
7
|
+
|
|
8
|
+
The `io:input` optional directive contains a list of properties that are allowed to be specified in
|
|
9
|
+
the request body.
|
|
10
|
+
|
|
11
|
+
```yaml
|
|
12
|
+
POST:
|
|
13
|
+
endpoint: create
|
|
14
|
+
io:input: [name, location]
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
The list must be a valid subset of the operation's input properties.
|
|
18
|
+
|
|
19
|
+
If `io:input` is specified and the request body is not an object, or contains properties that are
|
|
20
|
+
not in the list, the request will be rejected with a `400` status code.
|
|
21
|
+
|
|
22
|
+
> Therefore, `io:input` is only applicable to operations which input is an object or an
|
|
23
|
+
> array of objects.
|
|
24
|
+
|
|
25
|
+
## `io:output`
|
|
26
|
+
|
|
27
|
+
The `io:output` mandatory directive contains a list of properties that are allowed to be included in
|
|
28
|
+
the response body.
|
|
29
|
+
|
|
30
|
+
```yaml
|
|
31
|
+
GET:
|
|
32
|
+
endpoint: observe
|
|
33
|
+
io:output: [name, location]
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
When an operation does not return an object (e.g., a primitive or a stream), or an object is dynamic
|
|
37
|
+
and its properties are not known in advance, `io:output` may have a value of `true` to disable
|
|
38
|
+
output restrictions.
|
|
39
|
+
|
|
40
|
+
```yaml
|
|
41
|
+
GET:
|
|
42
|
+
endpoint: proxy
|
|
43
|
+
io:output: true
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
If a method declaration lacks `io:output` directive, it will trigger a warning, and its
|
|
47
|
+
response will consistently be empty.
|
|
48
|
+
If this behavior is intended, a `false` value can be employed to suppress warnings.
|
|
49
|
+
|
|
50
|
+
```yaml
|
|
51
|
+
GET:
|
|
52
|
+
endpoint: conceal
|
|
53
|
+
io:output: false
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
Output restrictions are not applied to stream responses and errors.
|
package/documentation/octets.md
CHANGED
|
@@ -23,7 +23,7 @@ If request's `content-type` is not acceptable, or if the request body does not p
|
|
|
23
23
|
the [validation](/extensions/storages/readme.md#async-putpath-string-stream-readable-type-typecontrol-maybeentry),
|
|
24
24
|
the request is rejected with a `415 Unsupported Media Type` response.
|
|
25
25
|
|
|
26
|
-
The value of the directive is an object with the following properties:
|
|
26
|
+
The value of the directive is `null` or an object with the following properties:
|
|
27
27
|
|
|
28
28
|
- `accept`: a media type or an array of media types that are acceptable.
|
|
29
29
|
If the `accept` property is not specified, any media type is acceptable (which is the default).
|
|
@@ -43,43 +43,27 @@ The value of the directive is an object with the following properties:
|
|
|
43
43
|
analyze: images.analyze
|
|
44
44
|
```
|
|
45
45
|
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
A workflow is a list of endpoints to be called.
|
|
49
|
-
The following input will be passed to each endpoint:
|
|
50
|
-
|
|
51
|
-
```yaml
|
|
52
|
-
storage: string
|
|
53
|
-
path: string
|
|
54
|
-
entry: Entry
|
|
55
|
-
```
|
|
56
|
-
|
|
57
|
-
See [Entry](/extensions/storages/readme.md#entry) and an
|
|
58
|
-
example [workflow step processor](../features/steps/components/octets.tester).
|
|
46
|
+
Non-standard `content-meta` header can be used
|
|
47
|
+
to set initial [metadata](/extensions/storages/readme.md#entry) value for the Entry.
|
|
59
48
|
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
Steps within a workflow unit are executed in parallel.
|
|
49
|
+
The value of the `content-meta` header is a comma-separated list of key-value string pairs.
|
|
50
|
+
If no value is provided for a key, the string `true` is used.
|
|
63
51
|
|
|
64
|
-
```
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
52
|
+
```http
|
|
53
|
+
POST /images/ HTTP/1.1
|
|
54
|
+
content-type: image/jpeg
|
|
55
|
+
content-meta: foo, bar=baz
|
|
56
|
+
content-meta: baz=1
|
|
69
57
|
```
|
|
70
58
|
|
|
71
|
-
A workflow can be a single unit, or an array of units.
|
|
72
|
-
If it's an array, the workflow units are executed in sequence.
|
|
73
|
-
|
|
74
59
|
```yaml
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
analyze: images.analyze # executed in parallel with `resize`
|
|
60
|
+
meta:
|
|
61
|
+
foo: 'true'
|
|
62
|
+
bar: 'baz'
|
|
63
|
+
baz: '1'
|
|
80
64
|
```
|
|
81
65
|
|
|
82
|
-
If
|
|
66
|
+
If the Entry already exists, the `content-meta` header is ignored.
|
|
83
67
|
|
|
84
68
|
### Response
|
|
85
69
|
|
|
@@ -114,9 +98,9 @@ created: 1698004822358
|
|
|
114
98
|
optimize: null
|
|
115
99
|
--cut
|
|
116
100
|
error:
|
|
117
|
-
step: resize
|
|
118
|
-
code: TOO_SMALL
|
|
119
|
-
message: Image is too small
|
|
101
|
+
step: resize
|
|
102
|
+
code: TOO_SMALL
|
|
103
|
+
message: Image is too small
|
|
120
104
|
--cut--
|
|
121
105
|
```
|
|
122
106
|
|
|
@@ -147,26 +131,42 @@ The value of the directive is an object with the following properties:
|
|
|
147
131
|
meta: true # allow access to an Entry
|
|
148
132
|
```
|
|
149
133
|
|
|
150
|
-
|
|
134
|
+
The `octets:fetch: ~` declaration is equivalent to defaults.
|
|
135
|
+
|
|
136
|
+
To access an Entry, the `accept` request header must contain the `octets.entry` subtype
|
|
137
|
+
in
|
|
138
|
+
the `toa` [vendor tree](https://datatracker.ietf.org/doc/html/rfc6838#section-3.2):
|
|
151
139
|
|
|
152
140
|
```http
|
|
153
|
-
GET /images/eecd837c
|
|
141
|
+
GET /images/eecd837c HTTP/1.1
|
|
142
|
+
accept: application/vnd.toa.octets.entry+yaml
|
|
154
143
|
```
|
|
155
144
|
|
|
156
|
-
The `octets:fetch: ~` declaration is equivalent to defaults.
|
|
157
|
-
|
|
158
145
|
## `octets:list`
|
|
159
146
|
|
|
160
147
|
Lists the entries stored under the request path.
|
|
161
148
|
|
|
149
|
+
The value of the directive is an object with the following properties:
|
|
150
|
+
|
|
151
|
+
- `meta`: `boolean` indicating whether the list of Entries is accessible.
|
|
152
|
+
Defaults to `false`, which means that only entry identifiers are returned.
|
|
153
|
+
|
|
162
154
|
```yaml
|
|
163
155
|
/images:
|
|
164
156
|
octets:context: images
|
|
165
157
|
GET:
|
|
166
|
-
octets:list:
|
|
158
|
+
octets:list:
|
|
159
|
+
meta: true
|
|
167
160
|
```
|
|
168
161
|
|
|
169
|
-
|
|
162
|
+
The `octets:list: ~` declaration is equivalent to defaults.
|
|
163
|
+
|
|
164
|
+
To access a list of Entries, the `accept` request header must contain the `octets.entries` subtype:
|
|
165
|
+
|
|
166
|
+
```http
|
|
167
|
+
GET /images/ HTTP/1.1
|
|
168
|
+
accept: application/vnd.toa.octets.entries+yaml
|
|
169
|
+
```
|
|
170
170
|
|
|
171
171
|
## `octets:delete`
|
|
172
172
|
|
|
@@ -179,6 +179,20 @@ Delete the entry corresponding to the request path.
|
|
|
179
179
|
octets:delete: ~
|
|
180
180
|
```
|
|
181
181
|
|
|
182
|
+
The value of the directive may contain a [workflow](#workflows) declaration, to be executed before
|
|
183
|
+
the entry is deleted.
|
|
184
|
+
|
|
185
|
+
```yaml
|
|
186
|
+
/images:
|
|
187
|
+
octets:context: images
|
|
188
|
+
DELETE:
|
|
189
|
+
octets:delete:
|
|
190
|
+
workflow:
|
|
191
|
+
cleanup: images.cleanup
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
The error returned by the workflow prevents the deletion of the entry.
|
|
195
|
+
|
|
182
196
|
## `octets:permute`
|
|
183
197
|
|
|
184
198
|
Performs
|
|
@@ -194,3 +208,54 @@ under the request path.
|
|
|
194
208
|
```
|
|
195
209
|
|
|
196
210
|
The request body must be a list of entry identifiers.
|
|
211
|
+
|
|
212
|
+
## `octets:workflow`
|
|
213
|
+
|
|
214
|
+
Execute a [workflow](#workflows) on the entry under the request path.
|
|
215
|
+
|
|
216
|
+
```yaml
|
|
217
|
+
/images:
|
|
218
|
+
/*:
|
|
219
|
+
DELETE:
|
|
220
|
+
octets:workflow:
|
|
221
|
+
archive: images.archive
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
## Workflows
|
|
225
|
+
|
|
226
|
+
A workflow is a list of endpoints to be called.
|
|
227
|
+
The following input will be passed to each endpoint:
|
|
228
|
+
|
|
229
|
+
```yaml
|
|
230
|
+
storage: string
|
|
231
|
+
path: string
|
|
232
|
+
entry: Entry
|
|
233
|
+
parameters: Record<string, string> # route parameters
|
|
234
|
+
```
|
|
235
|
+
|
|
236
|
+
See [Entry](/extensions/storages/readme.md#entry) and an
|
|
237
|
+
example [workflow step processor](../features/steps/components/octets.tester).
|
|
238
|
+
|
|
239
|
+
A _workflow unit_ is an object with keys referencing the workflow step identifier, and an endpoint
|
|
240
|
+
as value.
|
|
241
|
+
Steps within a workflow unit are executed in parallel.
|
|
242
|
+
|
|
243
|
+
```yaml
|
|
244
|
+
octets:store:
|
|
245
|
+
workflow:
|
|
246
|
+
resize: images.resize
|
|
247
|
+
analyze: images.analyze
|
|
248
|
+
```
|
|
249
|
+
|
|
250
|
+
A workflow can be a single unit, or an array of units.
|
|
251
|
+
If it's an array, the workflow units are executed in sequence.
|
|
252
|
+
|
|
253
|
+
```yaml
|
|
254
|
+
octets:store:
|
|
255
|
+
workflow:
|
|
256
|
+
- optimize: images.optimize # executed first
|
|
257
|
+
- resize: images.resize # executed second
|
|
258
|
+
analyze: images.analyze # executed in parallel with `resize`
|
|
259
|
+
```
|
|
260
|
+
|
|
261
|
+
If one of the workflow units returns an error, the execution of the workflow is interrupted.
|
|
@@ -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
|
@@ -6,10 +6,10 @@
|
|
|
6
6
|
id?: string
|
|
7
7
|
criteria?: string
|
|
8
8
|
sort?: string
|
|
9
|
-
omit?:
|
|
10
|
-
limit?:
|
|
9
|
+
omit?: integer
|
|
10
|
+
limit?: integer
|
|
11
11
|
selectors?: string[]
|
|
12
|
-
projection?: [
|
|
12
|
+
projection?: string[]
|
|
13
13
|
```
|
|
14
14
|
|
|
15
15
|
```yaml
|
|
@@ -45,7 +45,7 @@ Undefined `query` denies any query arguments in requests.
|
|
|
45
45
|
|
|
46
46
|
## Criteria
|
|
47
47
|
|
|
48
|
-
Search
|
|
48
|
+
Search criteria in [RSQL](https://github.com/jirutka/rsql-parser) format.
|
|
49
49
|
|
|
50
50
|
The `criteria` property is considered as *open* when it ends with a `;`, allowing the combination of
|
|
51
51
|
request query criteria using `and` logic.
|
|
@@ -77,7 +77,7 @@ query:
|
|
|
77
77
|
|
|
78
78
|
### Path variables
|
|
79
79
|
|
|
80
|
-
Path variables are prepended to the `criteria` request query parameter using
|
|
80
|
+
Path variables are prepended to the `criteria` request query parameter using logical AND,
|
|
81
81
|
except for the [`POST` method](#post-method).
|
|
82
82
|
|
|
83
83
|
Given the following declaration:
|
|
@@ -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.
|
|
@@ -224,3 +224,48 @@ A list of Entity properties to be included in the Observation result.
|
|
|
224
224
|
```yaml
|
|
225
225
|
projection: [id, title, timestamp]
|
|
226
226
|
```
|
|
227
|
+
|
|
228
|
+
## Optimistic concurrency control
|
|
229
|
+
|
|
230
|
+
If an operation returns an object with `_version` property,
|
|
231
|
+
then its value is passed as the value of
|
|
232
|
+
the [`etag` header](https://datatracker.ietf.org/doc/html/rfc7232#section-2.3) in the response
|
|
233
|
+
(and removed from the object).
|
|
234
|
+
|
|
235
|
+
Client can use the `if-match` request header to perform an operation only if the corresponding
|
|
236
|
+
object has not been modified since the last retrieval.
|
|
237
|
+
|
|
238
|
+
```http
|
|
239
|
+
GET /dummies/5e82ed5e/ HTTP/1.1
|
|
240
|
+
|
|
241
|
+
---
|
|
242
|
+
|
|
243
|
+
HTTP/1.1 200 OK
|
|
244
|
+
etag: "1"
|
|
245
|
+
|
|
246
|
+
foo: bar
|
|
247
|
+
```
|
|
248
|
+
|
|
249
|
+
```http request
|
|
250
|
+
PUT /dummies/5e82ed5e/ HTTP/1.1
|
|
251
|
+
if-match: "1"
|
|
252
|
+
|
|
253
|
+
foo: baz
|
|
254
|
+
```
|
|
255
|
+
|
|
256
|
+
```http
|
|
257
|
+
200 OK
|
|
258
|
+
```
|
|
259
|
+
|
|
260
|
+
```http request
|
|
261
|
+
PUT /dummies/5e82ed5e/ HTTP/1.1
|
|
262
|
+
if-match: "never"
|
|
263
|
+
|
|
264
|
+
foo: baz
|
|
265
|
+
```
|
|
266
|
+
|
|
267
|
+
```http
|
|
268
|
+
412 Precondition Failed
|
|
269
|
+
```
|
|
270
|
+
|
|
271
|
+
The value within the quotes is mapped to the `version` property of operation call query.
|
package/documentation/tree.md
CHANGED
|
@@ -102,7 +102,7 @@ HTTP methods can only be mapped to operations of the corresponding types.
|
|
|
102
102
|
| `GET` | **Observation**<br/>**Computation** |
|
|
103
103
|
| `PATCH` | **Assignment**<br/>**Effect** |
|
|
104
104
|
|
|
105
|
-
As method mapping is unambiguous for Observation,
|
|
105
|
+
As method mapping is unambiguous for Observation, Assignment, and Computation, a concise syntax is
|
|
106
106
|
available:
|
|
107
107
|
|
|
108
108
|
```yaml
|
|
@@ -110,7 +110,23 @@ available:
|
|
|
110
110
|
/items/:id: [observe, assign]
|
|
111
111
|
```
|
|
112
112
|
|
|
113
|
-
###
|
|
113
|
+
### Projections
|
|
114
|
+
|
|
115
|
+
A Method can have a `projection` key that specifies the fields of the operation result to be
|
|
116
|
+
included in the response.
|
|
117
|
+
|
|
118
|
+
```yaml
|
|
119
|
+
/teapots:
|
|
120
|
+
GET:
|
|
121
|
+
endpoint: select
|
|
122
|
+
projection:
|
|
123
|
+
- name
|
|
124
|
+
- state
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
> `id` is always included in the projection.
|
|
128
|
+
|
|
129
|
+
## Intermediate Nodes
|
|
114
130
|
|
|
115
131
|
An RTD Node that has a Route with a key `/` is an _intermediate_ Node.
|
|
116
132
|
Intermediate Nodes must not have Methods as they are unreachable.
|
|
@@ -124,8 +140,10 @@ Intermediate Nodes must not have Methods as they are unreachable.
|
|
|
124
140
|
|
|
125
141
|
## Directives
|
|
126
142
|
|
|
127
|
-
RTD Directives are declared using RTD node or Method keys following the `{family}:{directive}`
|
|
128
|
-
|
|
143
|
+
RTD Directives are declared using RTD node or Method keys following the `{family}:{directive}`
|
|
144
|
+
pattern and can be used
|
|
145
|
+
to add or modify the behavior of request processing. Directive declarations are applied to the RTD
|
|
146
|
+
node where they are
|
|
129
147
|
declared and to all nested nodes.
|
|
130
148
|
|
|
131
149
|
```yaml
|
|
@@ -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
|
+
```
|
package/features/access.feature
CHANGED
|
@@ -30,6 +30,7 @@ Feature: Access authorization
|
|
|
30
30
|
Given the annotation:
|
|
31
31
|
"""yaml
|
|
32
32
|
/:
|
|
33
|
+
io:output: true
|
|
33
34
|
auth:anonymous: true
|
|
34
35
|
GET:
|
|
35
36
|
dev:stub:
|
|
@@ -71,6 +72,7 @@ Feature: Access authorization
|
|
|
71
72
|
Given the annotation:
|
|
72
73
|
"""yaml
|
|
73
74
|
/:
|
|
75
|
+
io:output: true
|
|
74
76
|
/:id:
|
|
75
77
|
auth:id: id
|
|
76
78
|
GET:
|
|
@@ -109,6 +111,7 @@ Feature: Access authorization
|
|
|
109
111
|
And the annotation:
|
|
110
112
|
"""yaml
|
|
111
113
|
/:
|
|
114
|
+
io:output: true
|
|
112
115
|
auth:role: developer
|
|
113
116
|
GET:
|
|
114
117
|
dev:stub:
|
|
@@ -146,6 +149,7 @@ Feature: Access authorization
|
|
|
146
149
|
And the annotation:
|
|
147
150
|
"""yaml
|
|
148
151
|
/:
|
|
152
|
+
io:output: true
|
|
149
153
|
/:
|
|
150
154
|
auth:role: developer:rust:junior # role scope matches
|
|
151
155
|
/nested:
|
|
@@ -190,6 +194,7 @@ Feature: Access authorization
|
|
|
190
194
|
- developer
|
|
191
195
|
- admin
|
|
192
196
|
GET:
|
|
197
|
+
io:output: true
|
|
193
198
|
dev:stub:
|
|
194
199
|
access: granted!
|
|
195
200
|
"""
|
|
@@ -215,6 +220,7 @@ Feature: Access authorization
|
|
|
215
220
|
And the annotation:
|
|
216
221
|
"""yaml
|
|
217
222
|
/:
|
|
223
|
+
io:output: true
|
|
218
224
|
/rust/:id:
|
|
219
225
|
auth:rule:
|
|
220
226
|
id: id
|
|
@@ -257,6 +263,7 @@ Feature: Access authorization
|
|
|
257
263
|
Given the annotation:
|
|
258
264
|
"""yaml
|
|
259
265
|
/:
|
|
266
|
+
io:output: true
|
|
260
267
|
/:id:
|
|
261
268
|
auth:id: id
|
|
262
269
|
GET:
|
|
@@ -295,6 +302,7 @@ Feature: Access authorization
|
|
|
295
302
|
Given the annotation:
|
|
296
303
|
"""yaml
|
|
297
304
|
/:
|
|
305
|
+
io:output: true
|
|
298
306
|
auth:role: developer
|
|
299
307
|
GET:
|
|
300
308
|
dev:stub:
|
|
@@ -335,6 +343,7 @@ Feature: Access authorization
|
|
|
335
343
|
Given the annotation:
|
|
336
344
|
"""yaml
|
|
337
345
|
/:
|
|
346
|
+
io:output: true
|
|
338
347
|
/:id:
|
|
339
348
|
auth:scheme: basic
|
|
340
349
|
auth:id: id
|
|
@@ -374,7 +383,8 @@ Feature: Access authorization
|
|
|
374
383
|
|
|
375
384
|
Given the annotation:
|
|
376
385
|
"""yaml
|
|
377
|
-
|
|
386
|
+
/:
|
|
387
|
+
anonymous: true
|
|
378
388
|
"""
|
|
379
389
|
When the following request is received:
|
|
380
390
|
"""
|
|
@@ -396,6 +406,7 @@ Feature: Access authorization
|
|
|
396
406
|
"""yaml
|
|
397
407
|
/:
|
|
398
408
|
/:id:
|
|
409
|
+
io:output: true
|
|
399
410
|
auth:id: id
|
|
400
411
|
GET:
|
|
401
412
|
dev:stub:
|
|
@@ -425,7 +436,7 @@ Feature: Access authorization
|
|
|
425
436
|
"""
|
|
426
437
|
Then the following reply is sent:
|
|
427
438
|
"""
|
|
428
|
-
|
|
439
|
+
200 OK
|
|
429
440
|
"""
|
|
430
441
|
# accessing a resource with a banned Identity
|
|
431
442
|
When the following request is received:
|
package/features/body.feature
CHANGED
|
@@ -5,7 +5,8 @@ Feature: Request body
|
|
|
5
5
|
"""yaml
|
|
6
6
|
exposition:
|
|
7
7
|
/:
|
|
8
|
-
|
|
8
|
+
io:output: true
|
|
9
|
+
POST: create
|
|
9
10
|
"""
|
|
10
11
|
When the following request is received:
|
|
11
12
|
"""
|
|
@@ -25,6 +26,7 @@ Feature: Request body
|
|
|
25
26
|
"""yaml
|
|
26
27
|
exposition:
|
|
27
28
|
/:name:
|
|
29
|
+
io:output: true
|
|
28
30
|
GET: <operation>
|
|
29
31
|
"""
|
|
30
32
|
When the following request is received:
|
package/features/cache.feature
CHANGED
|
@@ -14,6 +14,7 @@ Feature: Caching
|
|
|
14
14
|
Given the annotation:
|
|
15
15
|
"""yaml
|
|
16
16
|
/:
|
|
17
|
+
io:output: true
|
|
17
18
|
anonymous: true
|
|
18
19
|
GET:
|
|
19
20
|
cache:control: max-age=60000
|
|
@@ -37,6 +38,7 @@ Feature: Caching
|
|
|
37
38
|
Given the annotation:
|
|
38
39
|
"""yaml
|
|
39
40
|
/:
|
|
41
|
+
io:output: true
|
|
40
42
|
cache:control: max-age=30000
|
|
41
43
|
GET:
|
|
42
44
|
anonymous: true
|
|
@@ -120,6 +122,7 @@ Feature: Caching
|
|
|
120
122
|
Given the annotation:
|
|
121
123
|
"""yaml
|
|
122
124
|
/:
|
|
125
|
+
io:output: true
|
|
123
126
|
auth:role: developer
|
|
124
127
|
cache:exact: max-age=60000, public
|
|
125
128
|
GET:
|