@toa.io/extensions.exposition 1.0.0-alpha.5 → 1.0.0-alpha.51
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 +32 -22
- package/components/identity.federation/operations/authenticate.d.ts +2 -2
- package/components/identity.federation/operations/authenticate.js +4 -11
- 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 +12 -7
- 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} +15 -7
- 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/entity.js +3 -0
- 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 +6 -19
- package/components/identity.federation/source/{create.ts → incept.ts} +10 -9
- package/components/identity.federation/source/lib/jwt.test.ts +50 -4
- package/components/identity.federation/source/lib/jwt.ts +20 -12
- package/components/identity.federation/source/types/configuration.ts +15 -0
- package/components/identity.federation/source/{types.ts → types/context.ts} +17 -6
- 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 +12 -5
- 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 +14 -6
- 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 +75 -38
- package/documentation/authorities.md +49 -0
- package/documentation/cache.md +8 -1
- package/documentation/components.md +47 -22
- package/documentation/flow.md +31 -0
- package/documentation/identity.md +17 -22
- package/documentation/introspection.md +68 -0
- package/documentation/io.md +56 -0
- package/documentation/octets.md +34 -23
- package/documentation/protocol.md +3 -0
- package/documentation/query.md +17 -11
- package/documentation/require.md +15 -0
- package/documentation/tree.md +35 -4
- package/documentation/vary.md +14 -14
- package/features/access.feature +89 -47
- package/features/annotation.feature +2 -0
- package/features/auth.claim.feature +170 -0
- package/features/authorities.basic.feature +141 -0
- package/features/authorities.feature +32 -0
- package/features/authorities.federation.feature +100 -0
- package/features/authorities.tokens.feature +117 -0
- package/features/body.feature +4 -0
- package/features/cache.feature +112 -5
- package/features/cors.feature +5 -0
- 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 +7 -0
- package/features/flow.feature +45 -0
- 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 +68 -15
- package/features/identity.roles.feature +251 -7
- package/features/identity.tokens.feature +57 -4
- package/features/introspection.feature +76 -0
- package/features/io.feature +205 -0
- package/features/octets.entries.feature +10 -1
- package/features/octets.feature +60 -64
- package/features/octets.meta.feature +7 -3
- package/features/octets.workflows.feature +240 -19
- 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 +110 -12
- package/features/steps/Database.ts +17 -10
- package/features/steps/Gateway.ts +23 -6
- package/features/steps/IdP.ts +30 -25
- package/features/steps/components/echo/manifest.toa.yaml +12 -1
- package/features/steps/components/echo/operations/identity.js +7 -0
- package/features/steps/components/echo/operations/parameters.js +7 -0
- package/features/steps/components/echo.beacon/manifest.toa.yaml +2 -0
- package/features/steps/components/echo.beacon/operations/hello.js +5 -0
- package/features/steps/components/octets.tester/manifest.toa.yaml +22 -1
- package/features/steps/components/octets.tester/operations/authority.js +7 -0
- package/features/steps/components/octets.tester/operations/baz.js +1 -2
- package/features/steps/components/octets.tester/operations/diversify.js +3 -1
- package/features/steps/components/octets.tester/operations/foo.js +2 -2
- package/features/steps/components/octets.tester/operations/redirect.js +12 -0
- package/features/steps/components/octets.tester/operations/yex.js +16 -0
- package/features/steps/components/octets.tester/operations/yield.js +13 -0
- package/features/steps/components/pots/manifest.toa.yaml +16 -3
- 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 +104 -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/schemas/node.cos.yaml +1 -0
- package/source/Annotation.ts +3 -3
- package/source/Composition.ts +2 -2
- package/source/Directive.ts +4 -5
- package/source/Endpoint.ts +18 -12
- package/source/Factory.ts +10 -11
- package/source/Gateway.ts +55 -20
- package/source/HTTP/Context.ts +24 -2
- package/source/HTTP/Server.ts +51 -43
- package/source/HTTP/exceptions.ts +7 -1
- package/source/HTTP/messages.test.ts +39 -2
- package/source/HTTP/messages.ts +7 -3
- package/source/Mapping.ts +6 -1
- package/source/Query.test.ts +1 -1
- package/source/Query.ts +35 -24
- package/source/RTD/Endpoint.ts +3 -0
- package/source/RTD/Method.ts +4 -0
- package/source/RTD/Node.ts +10 -2
- package/source/RTD/Route.ts +5 -4
- package/source/RTD/factory.ts +5 -2
- package/source/RTD/syntax/parse.ts +37 -24
- package/source/RTD/syntax/types.ts +2 -1
- package/source/Remotes.ts +4 -4
- package/source/Tenant.ts +0 -8
- package/source/deployment.ts +32 -22
- package/source/directives/auth/Authorization.ts +40 -17
- package/source/directives/auth/Delegate.ts +42 -0
- package/source/directives/auth/Federation.ts +84 -0
- package/source/directives/auth/Incept.ts +4 -3
- 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 +13 -6
- package/source/directives/cache/Control.ts +42 -16
- package/source/directives/dev/Development.ts +1 -1
- package/source/directives/flow/Fetch.ts +88 -0
- package/source/directives/flow/Flow.ts +34 -0
- package/source/directives/flow/index.ts +3 -0
- package/source/directives/flow/types.ts +6 -0
- package/source/directives/index.ts +6 -3
- 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 +14 -12
- package/source/directives/octets/List.ts +9 -7
- package/source/directives/octets/Octets.ts +4 -5
- package/source/directives/octets/Store.ts +4 -2
- package/source/directives/octets/Workflow.ts +10 -3
- package/source/directives/octets/schemas.ts +4 -4
- package/source/directives/octets/types.ts +0 -7
- package/source/directives/octets/workflows/Execution.ts +59 -8
- package/source/directives/octets/workflows/Workflow.ts +2 -1
- 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 +6 -4
- 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/Parameter.ts +14 -0
- package/source/directives/vary/embeddings/index.ts +6 -4
- package/source/exceptions.ts +22 -11
- package/source/manifest.ts +8 -9
- package/source/root.ts +5 -0
- package/source/schemas.ts +1 -1
- package/transpiled/Annotation.d.ts +3 -3
- package/transpiled/Composition.js +2 -2
- package/transpiled/Composition.js.map +1 -1
- package/transpiled/Directive.js +4 -4
- package/transpiled/Directive.js.map +1 -1
- package/transpiled/Endpoint.d.ts +5 -4
- package/transpiled/Endpoint.js +8 -4
- package/transpiled/Endpoint.js.map +1 -1
- package/transpiled/Factory.d.ts +1 -1
- package/transpiled/Factory.js +9 -8
- package/transpiled/Factory.js.map +1 -1
- package/transpiled/Gateway.d.ts +2 -0
- package/transpiled/Gateway.js +39 -12
- 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 +38 -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.d.ts +1 -0
- package/transpiled/HTTP/messages.js +9 -3
- 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/Endpoint.d.ts +1 -0
- package/transpiled/RTD/Method.d.ts +1 -0
- package/transpiled/RTD/Method.js +3 -0
- package/transpiled/RTD/Method.js.map +1 -1
- package/transpiled/RTD/Node.d.ts +2 -0
- package/transpiled/RTD/Node.js +9 -2
- package/transpiled/RTD/Node.js.map +1 -1
- package/transpiled/RTD/Route.d.ts +1 -1
- package/transpiled/RTD/Route.js +0 -1
- package/transpiled/RTD/Route.js.map +1 -1
- package/transpiled/RTD/factory.js +5 -2
- package/transpiled/RTD/factory.js.map +1 -1
- package/transpiled/RTD/syntax/parse.js +34 -22
- package/transpiled/RTD/syntax/parse.js.map +1 -1
- package/transpiled/RTD/syntax/types.d.ts +1 -0
- package/transpiled/RTD/syntax/types.js +1 -1
- package/transpiled/RTD/syntax/types.js.map +1 -1
- package/transpiled/Remotes.d.ts +2 -2
- package/transpiled/Remotes.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.js +28 -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/Federation.d.ts +16 -0
- package/transpiled/directives/auth/Federation.js +57 -0
- package/transpiled/directives/auth/Federation.js.map +1 -0
- package/transpiled/directives/auth/Incept.js +4 -3
- 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 +3 -3
- 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/dev/Development.js +1 -1
- package/transpiled/directives/dev/Development.js.map +1 -1
- package/transpiled/directives/flow/Fetch.d.ts +13 -0
- package/transpiled/directives/flow/Fetch.js +59 -0
- package/transpiled/directives/flow/Fetch.js.map +1 -0
- package/transpiled/directives/flow/Flow.d.ts +10 -0
- package/transpiled/directives/flow/Flow.js +27 -0
- package/transpiled/directives/flow/Flow.js.map +1 -0
- package/transpiled/directives/flow/index.d.ts +2 -0
- package/transpiled/directives/flow/index.js +6 -0
- package/transpiled/directives/flow/index.js.map +1 -0
- package/transpiled/directives/flow/types.d.ts +5 -0
- package/transpiled/directives/flow/types.js.map +1 -0
- package/transpiled/directives/index.js +6 -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 +6 -5
- package/transpiled/directives/octets/Fetch.js +10 -8
- package/transpiled/directives/octets/Fetch.js.map +1 -1
- package/transpiled/directives/octets/List.d.ts +6 -5
- package/transpiled/directives/octets/List.js +6 -4
- package/transpiled/directives/octets/List.js.map +1 -1
- package/transpiled/directives/octets/Octets.d.ts +2 -1
- 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 +3 -1
- 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/schemas.d.ts +4 -4
- package/transpiled/directives/octets/schemas.js.map +1 -1
- package/transpiled/directives/octets/types.d.ts +0 -5
- package/transpiled/directives/octets/workflows/Execution.d.ts +5 -1
- package/transpiled/directives/octets/workflows/Execution.js +43 -9
- package/transpiled/directives/octets/workflows/Execution.js.map +1 -1
- package/transpiled/directives/octets/workflows/Workflow.js +2 -1
- package/transpiled/directives/octets/workflows/Workflow.js.map +1 -1
- 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 +2 -2
- 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/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/manifest.js +8 -9
- package/transpiled/manifest.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
- /package/{components/identity.federation/operations → transpiled/directives/flow}/types.js +0 -0
|
@@ -1,29 +1,31 @@
|
|
|
1
1
|
import { posix } from 'node:path'
|
|
2
2
|
import { Forbidden, NotFound } from '../../HTTP'
|
|
3
3
|
import * as schemas from './schemas'
|
|
4
|
+
import { Directive } from './Directive'
|
|
5
|
+
import type { Readable } from 'node:stream'
|
|
4
6
|
import type { Maybe } from '@toa.io/types'
|
|
5
7
|
import type { Entry } from '@toa.io/extensions.storages'
|
|
6
|
-
import type { Readable } from 'node:stream'
|
|
7
8
|
import type { Component } from '@toa.io/core'
|
|
8
9
|
import type { Output } from '../../io'
|
|
10
|
+
import type { Input } from './types'
|
|
9
11
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
export class Fetch implements Directive {
|
|
12
|
+
export class Fetch extends Directive {
|
|
13
13
|
public readonly targeted = true
|
|
14
14
|
|
|
15
|
-
private readonly
|
|
15
|
+
private readonly options: Required<Options> = {
|
|
16
16
|
blob: true,
|
|
17
17
|
meta: false
|
|
18
18
|
}
|
|
19
19
|
|
|
20
20
|
private readonly discovery: Promise<Component>
|
|
21
|
-
private storage
|
|
21
|
+
private storage!: Component
|
|
22
|
+
|
|
23
|
+
public constructor (options: Options | null, discovery: Promise<Component>) {
|
|
24
|
+
super()
|
|
22
25
|
|
|
23
|
-
|
|
24
|
-
|
|
26
|
+
schemas.fetch.validate(options)
|
|
27
|
+
Object.assign(this.options, options)
|
|
25
28
|
|
|
26
|
-
Object.assign(this.permissions, permissions)
|
|
27
29
|
this.discovery = discovery
|
|
28
30
|
}
|
|
29
31
|
|
|
@@ -34,12 +36,12 @@ export class Fetch implements Directive {
|
|
|
34
36
|
const metadata = input.subtype === 'octets.entry'
|
|
35
37
|
|
|
36
38
|
if (!variant && metadata)
|
|
37
|
-
if (this.
|
|
39
|
+
if (this.options.meta)
|
|
38
40
|
return this.get(storage, input)
|
|
39
41
|
else
|
|
40
42
|
throw new Forbidden('Metadata is not accessible.')
|
|
41
43
|
|
|
42
|
-
if (!variant && !this.
|
|
44
|
+
if (!variant && !this.options.blob)
|
|
43
45
|
throw new Forbidden('BLOB variant must be specified.')
|
|
44
46
|
|
|
45
47
|
return await this.fetch(storage, input)
|
|
@@ -86,7 +88,7 @@ export class Fetch implements Directive {
|
|
|
86
88
|
}
|
|
87
89
|
}
|
|
88
90
|
|
|
89
|
-
export interface
|
|
91
|
+
export interface Options {
|
|
90
92
|
blob?: boolean
|
|
91
93
|
meta?: boolean
|
|
92
94
|
}
|
|
@@ -1,24 +1,26 @@
|
|
|
1
1
|
import { posix } from 'node:path'
|
|
2
2
|
import { Forbidden, NotFound } from '../../HTTP'
|
|
3
3
|
import * as schemas from './schemas'
|
|
4
|
+
import { Directive } from './Directive'
|
|
4
5
|
import type { Entry } from '@toa.io/extensions.storages'
|
|
5
6
|
import type { Maybe } from '@toa.io/types'
|
|
6
7
|
import type { Component } from '@toa.io/core'
|
|
7
8
|
import type { Output } from '../../io'
|
|
8
9
|
|
|
9
|
-
import type {
|
|
10
|
+
import type { Input } from './types'
|
|
10
11
|
|
|
11
|
-
export class List
|
|
12
|
+
export class List extends Directive {
|
|
12
13
|
public readonly targeted = false
|
|
13
14
|
|
|
14
|
-
private readonly
|
|
15
|
+
private readonly options: Required<Options> = { meta: false }
|
|
15
16
|
private readonly discovery: Promise<Component>
|
|
16
17
|
private storage: Component | null = null
|
|
17
18
|
|
|
18
|
-
public constructor (permissions:
|
|
19
|
+
public constructor (permissions: Options | null, discovery: Promise<Component>) {
|
|
20
|
+
super()
|
|
19
21
|
schemas.list.validate(permissions)
|
|
20
22
|
|
|
21
|
-
Object.assign(this.
|
|
23
|
+
Object.assign(this.options, permissions)
|
|
22
24
|
this.discovery = discovery
|
|
23
25
|
}
|
|
24
26
|
|
|
@@ -27,7 +29,7 @@ export class List implements Directive {
|
|
|
27
29
|
|
|
28
30
|
const metadata = input.subtype === 'octets.entries'
|
|
29
31
|
|
|
30
|
-
if (metadata && !this.
|
|
32
|
+
if (metadata && !this.options.meta)
|
|
31
33
|
throw new Forbidden('Metadata is not accessible.')
|
|
32
34
|
|
|
33
35
|
const list = await this.storage.invoke<Maybe<string[]>>('list', {
|
|
@@ -65,6 +67,6 @@ export class List implements Directive {
|
|
|
65
67
|
}
|
|
66
68
|
}
|
|
67
69
|
|
|
68
|
-
export interface
|
|
70
|
+
export interface Options {
|
|
69
71
|
meta?: boolean
|
|
70
72
|
}
|
|
@@ -4,13 +4,13 @@ import { Store } from './Store'
|
|
|
4
4
|
import { Fetch } from './Fetch'
|
|
5
5
|
import { List } from './List'
|
|
6
6
|
import { Delete } from './Delete'
|
|
7
|
-
import { Permute } from './Permute'
|
|
8
7
|
import { WorkflowDirective } from './Workflow'
|
|
8
|
+
import type { Directive } from './Directive'
|
|
9
9
|
import type { Output } from '../../io'
|
|
10
10
|
import type { Component } from '@toa.io/core'
|
|
11
11
|
import type { Remotes } from '../../Remotes'
|
|
12
12
|
import type { Parameter, DirectiveFamily } from '../../RTD'
|
|
13
|
-
import type {
|
|
13
|
+
import type { Input } from './types'
|
|
14
14
|
|
|
15
15
|
export class Octets implements DirectiveFamily<Directive> {
|
|
16
16
|
public readonly name: string = 'octets'
|
|
@@ -22,7 +22,7 @@ export class Octets implements DirectiveFamily<Directive> {
|
|
|
22
22
|
const Class = DIRECTIVES[name]
|
|
23
23
|
|
|
24
24
|
if (Class === undefined)
|
|
25
|
-
throw new Error(`Directive '
|
|
25
|
+
throw new Error(`Directive 'octets:${name}' is not implemented.`)
|
|
26
26
|
|
|
27
27
|
this.discovery ??= remotes.discover('octets', 'storage')
|
|
28
28
|
|
|
@@ -55,7 +55,7 @@ export class Octets implements DirectiveFamily<Directive> {
|
|
|
55
55
|
throw new NotFound(`Trailing slash is ${action.targeted ? 'redundant' : 'required'}.`)
|
|
56
56
|
|
|
57
57
|
// noinspection JSObjectNullOrUndefined
|
|
58
|
-
return action.apply(context.storage, input, parameters)
|
|
58
|
+
return await input.timing.capture(action.name, action.apply(context.storage, input, parameters))
|
|
59
59
|
}
|
|
60
60
|
}
|
|
61
61
|
|
|
@@ -65,7 +65,6 @@ const DIRECTIVES: Record<string, Constructor> = {
|
|
|
65
65
|
fetch: Fetch,
|
|
66
66
|
list: List,
|
|
67
67
|
delete: Delete,
|
|
68
|
-
permute: Permute,
|
|
69
68
|
workflow: WorkflowDirective
|
|
70
69
|
}
|
|
71
70
|
|
|
@@ -4,6 +4,7 @@ import { BadRequest, UnsupportedMediaType } from '../../HTTP'
|
|
|
4
4
|
import { cors } from '../cors'
|
|
5
5
|
import * as schemas from './schemas'
|
|
6
6
|
import { Workflow } from './workflows'
|
|
7
|
+
import { Directive } from './Directive'
|
|
7
8
|
import type { Readable } from 'stream'
|
|
8
9
|
import type { Parameter } from '../../RTD'
|
|
9
10
|
import type { Unit } from './workflows'
|
|
@@ -12,9 +13,9 @@ import type { Remotes } from '../../Remotes'
|
|
|
12
13
|
import type { ErrorType } from 'error-value'
|
|
13
14
|
import type { Component } from '@toa.io/core'
|
|
14
15
|
import type { Output } from '../../io'
|
|
15
|
-
import type {
|
|
16
|
+
import type { Input } from './types'
|
|
16
17
|
|
|
17
|
-
export class Store
|
|
18
|
+
export class Store extends Directive {
|
|
18
19
|
public readonly targeted = false
|
|
19
20
|
|
|
20
21
|
private readonly accept?: string
|
|
@@ -24,6 +25,7 @@ export class Store implements Directive {
|
|
|
24
25
|
|
|
25
26
|
public constructor
|
|
26
27
|
(options: Options | null, discovery: Promise<Component>, remotes: Remotes) {
|
|
28
|
+
super()
|
|
27
29
|
schemas.store.validate(options)
|
|
28
30
|
|
|
29
31
|
this.accept = match(options?.accept,
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { NotFound } from '../../HTTP'
|
|
2
2
|
import * as schemas from './schemas'
|
|
3
3
|
import { Workflow } from './workflows'
|
|
4
|
+
import { Directive } from './Directive'
|
|
4
5
|
import type { Unit } from './workflows'
|
|
5
|
-
import type {
|
|
6
|
+
import type { Input } from './types'
|
|
6
7
|
import type { Component } from '@toa.io/core'
|
|
7
8
|
import type { Output } from '../../io'
|
|
8
9
|
import type { Remotes } from '../../Remotes'
|
|
@@ -10,7 +11,7 @@ import type { Maybe } from '@toa.io/types'
|
|
|
10
11
|
import type { Entry } from '@toa.io/extensions.storages'
|
|
11
12
|
import type { Parameter } from '../../RTD'
|
|
12
13
|
|
|
13
|
-
export class WorkflowDirective
|
|
14
|
+
export class WorkflowDirective extends Directive {
|
|
14
15
|
public readonly targeted = true
|
|
15
16
|
|
|
16
17
|
private readonly workflow: Workflow
|
|
@@ -18,6 +19,7 @@ export class WorkflowDirective implements Directive {
|
|
|
18
19
|
private storage: Component | null = null
|
|
19
20
|
|
|
20
21
|
public constructor (units: Unit[] | Unit, discovery: Promise<Component>, remotes: Remotes) {
|
|
22
|
+
super()
|
|
21
23
|
schemas.workflow.validate(units)
|
|
22
24
|
|
|
23
25
|
this.workflow = new Workflow(units, remotes)
|
|
@@ -28,7 +30,12 @@ export class WorkflowDirective implements Directive {
|
|
|
28
30
|
this.storage ??= await this.discovery
|
|
29
31
|
|
|
30
32
|
const entry = await this.storage.invoke<Maybe<Entry>>('get',
|
|
31
|
-
{
|
|
33
|
+
{
|
|
34
|
+
input: {
|
|
35
|
+
storage,
|
|
36
|
+
path: input.request.url
|
|
37
|
+
}
|
|
38
|
+
})
|
|
32
39
|
|
|
33
40
|
if (entry instanceof Error)
|
|
34
41
|
throw new NotFound()
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { resolve } from 'node:path'
|
|
2
2
|
import schemas from '@toa.io/schemas'
|
|
3
|
-
import type {
|
|
4
|
-
import type {
|
|
3
|
+
import type { Options as FetchOptions } from './Fetch'
|
|
4
|
+
import type { Options as ListOptions } from './List'
|
|
5
5
|
import type { Options as StoreOptions } from './Store'
|
|
6
6
|
import type { Options as DeleteOptions } from './Delete'
|
|
7
7
|
import type { Schema } from '@toa.io/schemas'
|
|
@@ -12,8 +12,8 @@ const namespace = schemas.namespace(path)
|
|
|
12
12
|
|
|
13
13
|
export const context: Schema<string> = namespace.schema('context')
|
|
14
14
|
export const store: Schema<StoreOptions | null> = namespace.schema('store')
|
|
15
|
-
export const fetch: Schema<
|
|
15
|
+
export const fetch: Schema<FetchOptions | null> = namespace.schema('fetch')
|
|
16
16
|
export const remove: Schema<DeleteOptions | null> = namespace.schema('delete')
|
|
17
|
-
export const list: Schema<
|
|
17
|
+
export const list: Schema<ListOptions | null> = namespace.schema('list')
|
|
18
18
|
export const permute: Schema<null> = namespace.schema('permute')
|
|
19
19
|
export const workflow: Schema<Unit[] | Unit> = namespace.schema('workflow')
|
|
@@ -1,12 +1,5 @@
|
|
|
1
|
-
import type { Parameter } from '../../RTD'
|
|
2
1
|
import type * as io from '../../io'
|
|
3
2
|
|
|
4
|
-
export interface Directive {
|
|
5
|
-
readonly targeted: boolean
|
|
6
|
-
|
|
7
|
-
apply: (storage: string, input: Input, parameters: Parameter[]) => io.Output | Promise<io.Output>
|
|
8
|
-
}
|
|
9
|
-
|
|
10
3
|
export interface Extension {
|
|
11
4
|
octets?: string
|
|
12
5
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Readable } from 'stream'
|
|
1
|
+
import { Readable } from 'node:stream'
|
|
2
2
|
import type { Unit } from './Workflow'
|
|
3
3
|
import type { Remotes } from '../../../Remotes'
|
|
4
4
|
import type { Component } from '@toa.io/core'
|
|
@@ -39,25 +39,68 @@ export class Execution extends Readable {
|
|
|
39
39
|
|
|
40
40
|
private async execute (unit: Unit): Promise<void> {
|
|
41
41
|
const promises = Object.entries(unit).map(async ([step, endpoint]) => {
|
|
42
|
-
|
|
42
|
+
try {
|
|
43
|
+
const result = await this.call(endpoint)
|
|
43
44
|
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
45
|
+
if (result instanceof Readable)
|
|
46
|
+
return await this.stream(step, result)
|
|
47
|
+
|
|
48
|
+
this.report(step, result)
|
|
49
|
+
} catch (e: unknown) {
|
|
50
|
+
this.exception(step, e)
|
|
51
|
+
}
|
|
49
52
|
})
|
|
50
53
|
|
|
51
54
|
await Promise.all(promises)
|
|
52
55
|
}
|
|
53
56
|
|
|
57
|
+
private async stream (step: string, stream: Readable): Promise<void> {
|
|
58
|
+
try {
|
|
59
|
+
for await (const result of stream)
|
|
60
|
+
this.report(step, result, false)
|
|
61
|
+
|
|
62
|
+
this.report(step, undefined, true)
|
|
63
|
+
} catch (e: unknown) {
|
|
64
|
+
this.exception(step, e)
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
private report (step: string, result?: Maybe<unknown>, completed = true): void {
|
|
69
|
+
const report: Report = { step }
|
|
70
|
+
|
|
71
|
+
if (completed)
|
|
72
|
+
report.status = 'completed'
|
|
73
|
+
|
|
74
|
+
if (result instanceof Error) {
|
|
75
|
+
report.error = result
|
|
76
|
+
this.interrupted = true
|
|
77
|
+
} else if (result !== undefined)
|
|
78
|
+
report.output = result
|
|
79
|
+
|
|
80
|
+
this.push(report)
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
private exception (step: string, error: unknown): void {
|
|
84
|
+
this.push({ step, status: 'exception' } satisfies Report)
|
|
85
|
+
this.interrupted = true
|
|
86
|
+
|
|
87
|
+
console.error(error)
|
|
88
|
+
}
|
|
89
|
+
|
|
54
90
|
private async call (endpoint: string): Promise<Maybe<unknown>> {
|
|
91
|
+
let task = false
|
|
92
|
+
|
|
93
|
+
if (endpoint.startsWith('task:')) {
|
|
94
|
+
endpoint = endpoint.slice(5)
|
|
95
|
+
task = true
|
|
96
|
+
}
|
|
97
|
+
|
|
55
98
|
const [operation, component, namespace = 'default'] = endpoint.split('.').reverse()
|
|
56
99
|
const key = `${namespace}.${component}`
|
|
57
100
|
|
|
58
101
|
this.components[key] ??= await this.discover(key, namespace, component)
|
|
59
102
|
|
|
60
|
-
return
|
|
103
|
+
return this.components[key].invoke(operation, { input: this.context, task })
|
|
61
104
|
}
|
|
62
105
|
|
|
63
106
|
private async discover (key: string, namespace: string, component: string): Promise<Component> {
|
|
@@ -69,8 +112,16 @@ export class Execution extends Readable {
|
|
|
69
112
|
}
|
|
70
113
|
|
|
71
114
|
export interface Context {
|
|
115
|
+
authority: string
|
|
72
116
|
storage: string
|
|
73
117
|
path: string
|
|
74
118
|
entry: Entry
|
|
75
119
|
parameters: Record<string, string>
|
|
76
120
|
}
|
|
121
|
+
|
|
122
|
+
interface Report {
|
|
123
|
+
step: string
|
|
124
|
+
status?: 'completed' | 'exception'
|
|
125
|
+
output?: unknown
|
|
126
|
+
error?: Error
|
|
127
|
+
}
|
|
@@ -23,12 +23,13 @@ export class Workflow {
|
|
|
23
23
|
public execute
|
|
24
24
|
(input: Input, storage: string, entry: Entry, params: Parameter[]): Execution {
|
|
25
25
|
const path = posix.join(input.request.url, entry.id)
|
|
26
|
+
const authority = input.authority
|
|
26
27
|
const parameters: Record<string, string> = {}
|
|
27
28
|
|
|
28
29
|
for (const { name, value } of params)
|
|
29
30
|
parameters[name] = value
|
|
30
31
|
|
|
31
|
-
const context: Context = { storage, path, entry, parameters }
|
|
32
|
+
const context: Context = { authority, storage, path, entry, parameters }
|
|
32
33
|
|
|
33
34
|
return new Execution(context, this.units, this.remotes)
|
|
34
35
|
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { BadRequest } from '../../HTTP'
|
|
2
|
+
import type { Input } from '../../io'
|
|
3
|
+
import type { Directive } from './Directive'
|
|
4
|
+
|
|
5
|
+
export class Headers implements Directive {
|
|
6
|
+
private readonly headers: string[]
|
|
7
|
+
|
|
8
|
+
public constructor (headers: string[]) {
|
|
9
|
+
if (!Array.isArray(headers))
|
|
10
|
+
headers = [headers]
|
|
11
|
+
|
|
12
|
+
this.headers = headers
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
public preflight (context: Input): void {
|
|
16
|
+
for (const header of this.headers)
|
|
17
|
+
if (context.request.headers[header] === undefined)
|
|
18
|
+
throw new BadRequest(`Header required: ${header}`)
|
|
19
|
+
}
|
|
20
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import assert from 'node:assert'
|
|
2
|
+
import { Headers } from './Headers'
|
|
3
|
+
import type { Input } from '../../io'
|
|
4
|
+
import type { Directive } from './Directive'
|
|
5
|
+
import type { DirectiveFamily } from '../../RTD'
|
|
6
|
+
|
|
7
|
+
export class Require implements DirectiveFamily {
|
|
8
|
+
public readonly name = 'require'
|
|
9
|
+
public readonly mandatory = false
|
|
10
|
+
|
|
11
|
+
public create (name: string, value: unknown): Directive {
|
|
12
|
+
assert.ok(name in directives, `Unknown directive: require:${name}`)
|
|
13
|
+
|
|
14
|
+
return new directives[name](value)
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
public preflight (instances: Directive[], context: Input): null {
|
|
18
|
+
for (const instance of instances)
|
|
19
|
+
instance.preflight(context)
|
|
20
|
+
|
|
21
|
+
return null
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
const directives: Record<string, new (value: any) => Directive> = {
|
|
26
|
+
header: Headers,
|
|
27
|
+
headers: Headers
|
|
28
|
+
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { Properties } from './Properties'
|
|
2
2
|
import type { Input } from '../../io'
|
|
3
|
+
import type { Parameter } from '../../RTD'
|
|
3
4
|
|
|
4
5
|
export interface Directive {
|
|
5
|
-
preflight: (
|
|
6
|
+
preflight: (context: Input, properties: Properties, parameters: Parameter[]) => void
|
|
6
7
|
}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import assert from 'node:assert'
|
|
2
|
-
import { Header, embeddings } from './embeddings'
|
|
2
|
+
import { Header, embeddings, Parameter } from './embeddings'
|
|
3
3
|
import type { Embedding } from './embeddings'
|
|
4
4
|
import type { Input } from '../../io'
|
|
5
5
|
import type { Directive } from './Directive'
|
|
6
6
|
import type { Properties } from './Properties'
|
|
7
|
+
import type * as RTD from '../../RTD'
|
|
7
8
|
|
|
8
9
|
export class Embed implements Directive {
|
|
9
10
|
private readonly embeddings: Array<[string, Embedding[]]> = []
|
|
@@ -16,6 +17,9 @@ export class Embed implements Directive {
|
|
|
16
17
|
if (name[0] === ':')
|
|
17
18
|
return new Header(name.slice(1))
|
|
18
19
|
|
|
20
|
+
if (name.slice(0, 2) === '/:')
|
|
21
|
+
return new Parameter(name.slice(2))
|
|
22
|
+
|
|
19
23
|
assert.ok(name in embeddings, `Unknown embedding: ${name}`)
|
|
20
24
|
|
|
21
25
|
return new embeddings[name]()
|
|
@@ -25,27 +29,29 @@ export class Embed implements Directive {
|
|
|
25
29
|
}
|
|
26
30
|
}
|
|
27
31
|
|
|
28
|
-
public preflight (
|
|
32
|
+
public preflight (context: Input, properties: Properties, parameters: RTD.Parameter[]): void {
|
|
29
33
|
const values: Record<string, unknown> = {}
|
|
30
34
|
|
|
31
35
|
for (const [key, instances] of this.embeddings)
|
|
32
|
-
values[key] = this.resolve(instances,
|
|
36
|
+
values[key] = this.resolve(instances, context, properties, parameters)
|
|
33
37
|
|
|
34
|
-
|
|
38
|
+
context.pipelines.body.push(this.embedding(values))
|
|
35
39
|
}
|
|
36
40
|
|
|
37
|
-
|
|
41
|
+
// eslint-disable-next-line max-params
|
|
42
|
+
private resolve (instances: Embedding[],
|
|
43
|
+
input: Input,
|
|
44
|
+
properties: Properties,
|
|
45
|
+
parameters: RTD.Parameter[]): unknown {
|
|
38
46
|
let value
|
|
39
47
|
|
|
40
48
|
for (const instance of instances) {
|
|
41
|
-
value = instance.resolve(input, properties)
|
|
49
|
+
value = instance.resolve(input, properties, parameters)
|
|
42
50
|
|
|
43
51
|
if (value !== undefined)
|
|
44
52
|
break
|
|
45
53
|
}
|
|
46
54
|
|
|
47
|
-
assert.ok(value !== undefined, 'Neither embedding resolved a value.')
|
|
48
|
-
|
|
49
55
|
return value
|
|
50
56
|
}
|
|
51
57
|
|
|
@@ -3,7 +3,7 @@ import { properties, Property } from './Properties'
|
|
|
3
3
|
import { Embed } from './Embed'
|
|
4
4
|
import type { Properties } from './Properties'
|
|
5
5
|
import type { Directive } from './Directive'
|
|
6
|
-
import type { DirectiveFamily } from '../../RTD'
|
|
6
|
+
import type { DirectiveFamily, Parameter } from '../../RTD'
|
|
7
7
|
import type { Input, Output } from '../../io'
|
|
8
8
|
|
|
9
9
|
export class Vary implements DirectiveFamily {
|
|
@@ -15,11 +15,13 @@ export class Vary implements DirectiveFamily {
|
|
|
15
15
|
() => name in properties, (name: PN) => new Property(name, value as PV),
|
|
16
16
|
() => name in directives, (name: keyof typeof directives) => new directives[name](value),
|
|
17
17
|
() => {
|
|
18
|
-
throw new Error(`
|
|
18
|
+
throw new Error(`Directive 'vary:${name}' is not implemented.`)
|
|
19
19
|
})
|
|
20
20
|
}
|
|
21
21
|
|
|
22
|
-
public preflight (instances: Array<Directive | Property>,
|
|
22
|
+
public preflight (instances: Array<Directive | Property>,
|
|
23
|
+
context: Input,
|
|
24
|
+
parameters: Parameter[]): Output {
|
|
23
25
|
/*
|
|
24
26
|
To stop constructing `properties` object on each request, Directive Families must be refactored
|
|
25
27
|
from singleton factories to per-Node instances on the Tree.
|
|
@@ -34,7 +36,7 @@ export class Vary implements DirectiveFamily {
|
|
|
34
36
|
directives.push(instance)
|
|
35
37
|
|
|
36
38
|
for (const directive of directives)
|
|
37
|
-
directive.preflight(
|
|
39
|
+
directive.preflight(context, properties, parameters)
|
|
38
40
|
|
|
39
41
|
return null
|
|
40
42
|
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { Properties } from '../Properties'
|
|
2
2
|
import type { Input } from '../../../io'
|
|
3
|
+
import type { Parameter } from '../../../RTD'
|
|
3
4
|
|
|
4
5
|
export interface Embedding {
|
|
5
|
-
resolve: (input: Input, properties: Properties) => string | undefined
|
|
6
|
+
resolve: (input: Input, properties: Properties, parameters: Parameter[]) => string | undefined
|
|
6
7
|
}
|
|
@@ -6,9 +6,10 @@ export class Header implements Embedding {
|
|
|
6
6
|
private readonly name: string
|
|
7
7
|
|
|
8
8
|
public constructor (name: string) {
|
|
9
|
-
this.name = name
|
|
9
|
+
this.name = name.toLowerCase()
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
if (this.name !== 'host')
|
|
12
|
+
cors.allow(this.name)
|
|
12
13
|
}
|
|
13
14
|
|
|
14
15
|
public resolve (input: Input): string | undefined {
|
|
@@ -17,10 +18,11 @@ export class Header implements Embedding {
|
|
|
17
18
|
if (value === undefined)
|
|
18
19
|
return value
|
|
19
20
|
|
|
20
|
-
|
|
21
|
-
response.
|
|
22
|
-
|
|
23
|
-
|
|
21
|
+
if (this.name !== 'host')
|
|
22
|
+
input.pipelines.response.push((response) => {
|
|
23
|
+
response.headers ??= new Headers()
|
|
24
|
+
response.headers.append('vary', this.name)
|
|
25
|
+
})
|
|
24
26
|
|
|
25
27
|
if (Array.isArray(value))
|
|
26
28
|
return value.join(', ')
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { Embedding } from './Embedding'
|
|
2
|
+
import type * as RTD from '../../../RTD'
|
|
3
|
+
|
|
4
|
+
export class Parameter implements Embedding {
|
|
5
|
+
private readonly name: string
|
|
6
|
+
|
|
7
|
+
public constructor (name: string) {
|
|
8
|
+
this.name = name
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
public resolve (_: unknown, __: unknown, parameters: RTD.Parameter[]): string | undefined {
|
|
12
|
+
return parameters.find((parameter) => parameter.name === this.name)?.value
|
|
13
|
+
}
|
|
14
|
+
}
|
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
import { Language } from './Language'
|
|
2
|
-
import {
|
|
3
|
-
|
|
2
|
+
import { Authority } from './Authority'
|
|
4
3
|
import type { Embedding } from './Embedding'
|
|
5
4
|
|
|
6
5
|
export const embeddings: Record<string, new () => Embedding> = {
|
|
7
|
-
language: Language
|
|
6
|
+
language: Language,
|
|
7
|
+
authority: Authority
|
|
8
8
|
}
|
|
9
9
|
|
|
10
|
-
export { Header }
|
|
11
10
|
export type { Embedding }
|
|
11
|
+
|
|
12
|
+
export { Header } from './Header'
|
|
13
|
+
export { Parameter } from './Parameter'
|
package/source/exceptions.ts
CHANGED
|
@@ -1,17 +1,28 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { match } from 'matchacho'
|
|
2
2
|
import * as http from './HTTP'
|
|
3
|
+
import { Exception as HTTPException } from './HTTP'
|
|
4
|
+
import type { Exception } from '@toa.io/core'
|
|
3
5
|
|
|
4
|
-
export function rethrow (exception: Exception): void {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
if ((exception.code >= 200 && exception.code < 210) || exception.code === 221)
|
|
8
|
-
throw new http.BadRequest(exception.message)
|
|
6
|
+
export function rethrow (exception: Exception | HTTPException): void {
|
|
7
|
+
if (exception instanceof HTTPException)
|
|
8
|
+
throw exception
|
|
9
9
|
|
|
10
|
-
|
|
11
|
-
|
|
10
|
+
// see /runtime/core/src/exceptions.js
|
|
11
|
+
throw match(exception.code,
|
|
12
|
+
badRequest, () => new http.BadRequest(exception.message),
|
|
13
|
+
302, NOT_FOUND,
|
|
14
|
+
303, PRECONDITION_FAILED,
|
|
15
|
+
306, () => new http.Conflict(),
|
|
16
|
+
() => {
|
|
17
|
+
console.error(exception)
|
|
12
18
|
|
|
13
|
-
|
|
14
|
-
|
|
19
|
+
return exception
|
|
20
|
+
})
|
|
21
|
+
}
|
|
15
22
|
|
|
16
|
-
|
|
23
|
+
function badRequest (code: number): boolean {
|
|
24
|
+
return (code >= 200 && code < 210) || code === 221
|
|
17
25
|
}
|
|
26
|
+
|
|
27
|
+
const NOT_FOUND = new http.NotFound()
|
|
28
|
+
const PRECONDITION_FAILED = new http.PreconditionFailed()
|