@toa.io/extensions.exposition 1.0.0-alpha.26 → 1.0.0-alpha.262
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/CHANGELOG.md +71 -0
- package/components/identity.bans/operations/tsconfig.tsbuildinfo +1 -1
- package/components/identity.basic/manifest.toa.yaml +93 -11
- package/components/identity.basic/operations/add.d.ts +3 -0
- package/components/identity.basic/operations/add.js +17 -0
- package/components/identity.basic/operations/add.js.map +1 -0
- package/components/identity.basic/operations/authenticate.js +2 -2
- package/components/identity.basic/operations/authenticate.js.map +1 -1
- package/components/identity.basic/operations/check.d.ts +7 -0
- package/components/identity.basic/operations/check.js +15 -0
- package/components/identity.basic/operations/check.js.map +1 -0
- package/components/identity.basic/operations/delete.d.ts +7 -0
- package/components/identity.basic/operations/delete.js +11 -0
- package/components/identity.basic/operations/delete.js.map +1 -0
- package/components/identity.basic/operations/incept.d.ts +1 -1
- package/components/identity.basic/operations/incept.js +9 -3
- package/components/identity.basic/operations/incept.js.map +1 -1
- package/components/identity.basic/operations/info.d.ts +10 -0
- package/components/identity.basic/operations/info.js +11 -0
- package/components/identity.basic/operations/info.js.map +1 -0
- package/components/identity.basic/operations/transit.d.ts +2 -2
- package/components/identity.basic/operations/transit.js +11 -7
- 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 +18 -7
- package/components/identity.basic/source/add.ts +15 -0
- package/components/identity.basic/source/authenticate.ts +2 -2
- package/components/identity.basic/source/check.ts +20 -0
- package/components/identity.basic/source/delete.ts +15 -0
- package/components/identity.basic/source/incept.ts +10 -4
- package/components/identity.basic/source/info.ts +19 -0
- package/components/identity.basic/source/transit.ts +14 -11
- package/components/identity.basic/source/types.ts +20 -7
- package/components/identity.credentials/manifest.toa.yaml +57 -0
- package/components/identity.credentials/operations/list.d.ts +51 -0
- package/components/identity.credentials/operations/list.js +32 -0
- package/components/identity.credentials/operations/list.js.map +1 -0
- package/components/identity.credentials/operations/tsconfig.tsbuildinfo +1 -0
- package/components/identity.credentials/source/list.test.ts +47 -0
- package/components/identity.credentials/source/list.ts +87 -0
- package/components/identity.credentials/tsconfig.json +7 -0
- package/components/identity.federation/events/principal.js +2 -2
- package/components/identity.federation/manifest.toa.yaml +110 -40
- package/components/identity.federation/operations/authenticate.d.ts +16 -3
- package/components/identity.federation/operations/authenticate.js +24 -16
- package/components/identity.federation/operations/authenticate.js.map +1 -1
- package/components/identity.federation/operations/create.d.ts +8 -0
- package/components/identity.federation/operations/create.js +27 -0
- package/components/identity.federation/operations/create.js.map +1 -0
- package/components/identity.federation/operations/decode.d.ts +3 -0
- package/components/identity.federation/operations/decode.js +13 -0
- package/components/identity.federation/operations/decode.js.map +1 -0
- package/components/identity.federation/operations/delete.d.ts +8 -0
- package/components/identity.federation/operations/delete.js +11 -0
- package/components/identity.federation/operations/delete.js.map +1 -0
- package/components/identity.federation/operations/incept.d.ts +6 -6
- package/components/identity.federation/operations/incept.js +5 -9
- package/components/identity.federation/operations/incept.js.map +1 -1
- package/components/identity.federation/operations/lib/Configuration.d.ts +39 -0
- package/components/identity.federation/operations/lib/Configuration.js +3 -0
- package/components/identity.federation/operations/lib/Configuration.js.map +1 -0
- package/components/identity.federation/operations/lib/Ctx.d.ts +8 -0
- package/{transpiled/directives/vary/embeddings/Embedding.js → components/identity.federation/operations/lib/Ctx.js} +1 -1
- package/components/identity.federation/operations/lib/Ctx.js.map +1 -0
- package/components/identity.federation/operations/lib/Payload.d.ts +5 -0
- package/components/identity.federation/operations/lib/Payload.js +3 -0
- package/components/identity.federation/operations/lib/Payload.js.map +1 -0
- package/components/identity.federation/operations/lib/decode.d.ts +3 -0
- package/components/identity.federation/operations/lib/decode.js +22 -0
- package/components/identity.federation/operations/lib/decode.js.map +1 -0
- package/components/identity.federation/operations/lib/discovery.d.ts +5 -0
- package/components/identity.federation/operations/lib/discovery.js +39 -0
- package/components/identity.federation/operations/lib/discovery.js.map +1 -0
- package/components/identity.federation/operations/lib/errors.d.ts +11 -0
- package/components/identity.federation/operations/lib/errors.js +15 -0
- package/components/identity.federation/operations/lib/errors.js.map +1 -0
- package/components/identity.federation/operations/lib/exchange.d.ts +3 -0
- package/components/identity.federation/operations/lib/exchange.js +108 -0
- package/components/identity.federation/operations/lib/exchange.js.map +1 -0
- package/components/identity.federation/operations/lib/index.d.ts +4 -0
- package/components/identity.federation/operations/lib/index.js +10 -0
- package/components/identity.federation/operations/lib/index.js.map +1 -0
- package/components/identity.federation/operations/lib/jose.d.ts +41 -0
- package/components/identity.federation/operations/lib/{assertions-as-values.js → jose.js} +4 -22
- package/components/identity.federation/operations/lib/jose.js.map +1 -0
- package/components/identity.federation/operations/lib/resolve.d.ts +3 -0
- package/components/identity.federation/operations/lib/resolve.js +17 -0
- package/components/identity.federation/operations/lib/resolve.js.map +1 -0
- package/components/identity.federation/operations/list.d.ts +7 -0
- package/components/identity.federation/operations/list.js +15 -0
- package/components/identity.federation/operations/list.js.map +1 -0
- package/components/identity.federation/operations/tsconfig.tsbuildinfo +1 -1
- package/components/identity.federation/operations/types/Scheme.d.ts +1 -0
- package/components/identity.federation/operations/types/Scheme.js +3 -0
- package/components/identity.federation/operations/types/Scheme.js.map +1 -0
- package/components/identity.federation/operations/types/configuration.d.ts +20 -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/context.d.ts +35 -0
- 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 +9 -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 +4 -0
- package/components/identity.federation/operations/types/index.js +21 -0
- package/components/identity.federation/operations/types/index.js.map +1 -0
- package/components/identity.federation/source/authenticate.ts +41 -21
- package/components/identity.federation/source/create.ts +39 -0
- package/components/identity.federation/source/decode.ts +11 -0
- package/components/identity.federation/source/delete.ts +16 -0
- package/components/identity.federation/source/incept.ts +9 -17
- package/components/identity.federation/source/lib/Configuration.ts +39 -0
- package/components/identity.federation/source/lib/Ctx.ts +9 -0
- package/components/identity.federation/source/lib/Payload.ts +6 -0
- package/components/identity.federation/source/lib/decode.ts +27 -0
- package/components/identity.federation/source/lib/discovery.test.ts +45 -0
- package/components/identity.federation/source/lib/discovery.ts +49 -0
- package/components/identity.federation/source/lib/errors.ts +12 -0
- package/components/identity.federation/source/lib/exchange.ts +116 -0
- package/components/identity.federation/source/lib/index.ts +4 -0
- package/components/identity.federation/source/lib/jose.d.ts +1 -0
- package/components/identity.federation/source/lib/jose.js +5 -0
- package/components/identity.federation/source/lib/resolve.ts +17 -0
- package/components/identity.federation/source/list.test.ts +22 -0
- package/components/identity.federation/source/list.ts +17 -0
- package/components/identity.federation/source/types/Scheme.ts +1 -0
- package/components/identity.federation/source/types/configuration.ts +21 -0
- package/components/identity.federation/source/types/context.ts +38 -0
- package/components/identity.federation/source/types/entity.ts +9 -0
- package/components/identity.federation/source/types/index.ts +4 -0
- package/components/identity.federation/tsconfig.json +1 -3
- package/components/identity.keys/manifest.toa.yaml +58 -0
- package/components/identity.keys/operations/create.d.ts +22 -0
- package/components/identity.keys/operations/create.js +16 -0
- package/components/identity.keys/operations/create.js.map +1 -0
- package/components/identity.keys/operations/tsconfig.tsbuildinfo +1 -0
- package/components/identity.keys/source/create.ts +35 -0
- package/components/identity.keys/tsconfig.json +9 -0
- package/components/identity.otp/manifest.toa.yaml +69 -0
- package/components/identity.otp/operations/authenticate.d.ts +12 -0
- package/components/identity.otp/operations/authenticate.js +31 -0
- package/components/identity.otp/operations/authenticate.js.map +1 -0
- package/components/identity.otp/operations/issue.d.ts +12 -0
- package/components/identity.otp/operations/issue.js +22 -0
- package/components/identity.otp/operations/issue.js.map +1 -0
- package/components/identity.otp/operations/lib/Context.d.ts +13 -0
- package/components/identity.otp/operations/lib/Context.js +3 -0
- package/components/identity.otp/operations/lib/Context.js.map +1 -0
- package/components/identity.otp/operations/lib/Entity.d.ts +6 -0
- package/components/identity.otp/operations/lib/Entity.js +3 -0
- package/components/identity.otp/operations/lib/Entity.js.map +1 -0
- package/components/identity.otp/operations/lib/index.d.ts +1 -0
- package/components/identity.otp/operations/lib/index.js +3 -0
- package/components/identity.otp/operations/lib/index.js.map +1 -0
- package/components/identity.otp/operations/tsconfig.tsbuildinfo +1 -0
- package/components/identity.otp/source/authenticate.ts +48 -0
- package/components/identity.otp/source/issue.ts +34 -0
- package/components/identity.otp/source/lib/Context.ts +14 -0
- package/components/identity.otp/source/lib/Entity.ts +6 -0
- package/components/identity.otp/source/lib/index.ts +1 -0
- package/components/identity.otp/tsconfig.json +9 -0
- package/components/identity.passkeys/manifest.toa.yaml +276 -0
- package/components/identity.passkeys/operations/authenticate.d.ts +16 -0
- package/components/identity.passkeys/operations/authenticate.js +34 -0
- package/components/identity.passkeys/operations/authenticate.js.map +1 -0
- package/components/identity.passkeys/operations/challenge.d.ts +35 -0
- package/components/identity.passkeys/operations/challenge.js +73 -0
- package/components/identity.passkeys/operations/challenge.js.map +1 -0
- package/components/identity.passkeys/operations/create.d.ts +19 -0
- package/components/identity.passkeys/operations/create.js +58 -0
- package/components/identity.passkeys/operations/create.js.map +1 -0
- package/components/identity.passkeys/operations/delete.d.ts +8 -0
- package/components/identity.passkeys/operations/delete.js +12 -0
- package/components/identity.passkeys/operations/delete.js.map +1 -0
- package/components/identity.passkeys/operations/lib/const.d.ts +1 -0
- package/components/identity.passkeys/operations/lib/const.js +5 -0
- package/components/identity.passkeys/operations/lib/const.js.map +1 -0
- package/components/identity.passkeys/operations/list.d.ts +7 -0
- package/components/identity.passkeys/operations/list.js +15 -0
- package/components/identity.passkeys/operations/list.js.map +1 -0
- package/components/identity.passkeys/operations/tsconfig.tsbuildinfo +1 -0
- package/components/identity.passkeys/operations/types/Configuration.d.ts +6 -0
- package/components/identity.passkeys/operations/types/Configuration.js +3 -0
- package/components/identity.passkeys/operations/types/Configuration.js.map +1 -0
- package/components/identity.passkeys/operations/types/Context.d.ts +15 -0
- package/components/identity.passkeys/operations/types/Context.js +3 -0
- package/components/identity.passkeys/operations/types/Context.js.map +1 -0
- package/components/identity.passkeys/operations/types/Passkey.d.ts +13 -0
- package/components/identity.passkeys/operations/types/Passkey.js +3 -0
- package/components/identity.passkeys/operations/types/Passkey.js.map +1 -0
- package/components/identity.passkeys/operations/types/index.d.ts +2 -0
- package/components/identity.passkeys/operations/types/index.js +3 -0
- package/components/identity.passkeys/operations/types/index.js.map +1 -0
- package/components/identity.passkeys/operations/use.d.ts +16 -0
- package/components/identity.passkeys/operations/use.js +57 -0
- package/components/identity.passkeys/operations/use.js.map +1 -0
- package/components/identity.passkeys/source/authenticate.ts +48 -0
- package/components/identity.passkeys/source/challenge.ts +115 -0
- package/components/identity.passkeys/source/create.ts +77 -0
- package/components/identity.passkeys/source/delete.ts +15 -0
- package/components/identity.passkeys/source/lib/const.ts +1 -0
- package/components/identity.passkeys/source/list.ts +17 -0
- package/components/identity.passkeys/source/types/Configuration.ts +6 -0
- package/components/identity.passkeys/source/types/Context.ts +16 -0
- package/components/identity.passkeys/source/types/Passkey.ts +14 -0
- package/components/identity.passkeys/source/types/index.ts +2 -0
- package/components/identity.passkeys/source/use.ts +75 -0
- package/components/identity.passkeys/tsconfig.json +9 -0
- package/components/identity.roles/manifest.toa.yaml +4 -2
- package/components/identity.roles/operations/grant.js +2 -2
- package/components/identity.roles/operations/grant.js.map +1 -1
- package/components/identity.roles/operations/tsconfig.tsbuildinfo +1 -1
- package/components/identity.roles/receivers/identity.federation.principal.js +6 -0
- package/components/identity.roles/source/grant.ts +2 -2
- package/components/identity.tokens/manifest.toa.yaml +110 -13
- package/components/identity.tokens/operations/authenticate.d.ts +2 -2
- package/components/identity.tokens/operations/authenticate.js +13 -12
- package/components/identity.tokens/operations/authenticate.js.map +1 -1
- package/components/identity.tokens/operations/decrypt.d.ts +15 -3
- package/components/identity.tokens/operations/decrypt.js +115 -20
- package/components/identity.tokens/operations/decrypt.js.map +1 -1
- package/components/identity.tokens/operations/encrypt.d.ts +3 -3
- package/components/identity.tokens/operations/encrypt.js +30 -13
- package/components/identity.tokens/operations/encrypt.js.map +1 -1
- package/components/identity.tokens/operations/issue.d.ts +24 -0
- package/components/identity.tokens/operations/issue.js +59 -0
- package/components/identity.tokens/operations/issue.js.map +1 -0
- package/components/identity.tokens/operations/lib/index.d.ts +3 -0
- package/components/identity.tokens/operations/lib/index.js +22 -0
- package/components/identity.tokens/operations/lib/index.js.map +1 -0
- package/components/identity.tokens/operations/lib/jose.d.ts +41 -0
- package/components/identity.tokens/operations/lib/jose.js +27 -0
- package/components/identity.tokens/operations/lib/jose.js.map +1 -0
- package/components/identity.tokens/operations/lib/key.d.ts +1 -0
- package/components/identity.tokens/operations/lib/key.js +11 -0
- package/components/identity.tokens/operations/lib/key.js.map +1 -0
- package/components/identity.tokens/operations/lib/pad.d.ts +1 -0
- package/components/identity.tokens/operations/lib/pad.js +5 -0
- package/components/identity.tokens/operations/lib/pad.js.map +1 -0
- package/components/identity.tokens/operations/lib/types.d.ts +84 -0
- package/components/identity.tokens/operations/lib/types.js.map +1 -0
- package/components/identity.tokens/operations/revoke.d.ts +2 -2
- package/components/identity.tokens/operations/revoke.js.map +1 -1
- package/components/identity.tokens/operations/tsconfig.tsbuildinfo +1 -1
- package/components/identity.tokens/source/authenticate.test.ts +14 -7
- package/components/identity.tokens/source/authenticate.ts +15 -14
- package/components/identity.tokens/source/decrypt.test.ts +90 -16
- package/components/identity.tokens/source/decrypt.ts +152 -20
- package/components/identity.tokens/source/encrypt.test.ts +75 -13
- package/components/identity.tokens/source/encrypt.ts +42 -16
- package/components/identity.tokens/source/issue.ts +82 -0
- package/components/identity.tokens/source/lib/index.ts +3 -0
- package/components/identity.tokens/source/lib/jose.d.ts +1 -0
- package/components/identity.tokens/source/lib/jose.js +5 -0
- package/components/identity.tokens/source/lib/key.ts +8 -0
- package/components/identity.tokens/source/lib/pad.ts +1 -0
- package/components/identity.tokens/source/lib/paseto.test.ts +16 -0
- package/components/identity.tokens/source/lib/types.ts +97 -0
- package/components/identity.tokens/source/revoke.ts +2 -2
- package/components/octets.storage/manifest.toa.yaml +13 -5
- package/components/octets.storage/operations/get.js +3 -3
- package/components/octets.storage/operations/head.js +7 -0
- package/components/octets.storage/operations/put.js +135 -0
- package/{components/context.toa.yaml → context.toa.yaml} +6 -2
- package/documentation/access.md +78 -27
- package/documentation/authorities.md +6 -11
- package/documentation/components.md +174 -56
- package/documentation/credentials.md +88 -0
- package/documentation/dev.md +30 -0
- package/documentation/flow.md +44 -0
- package/documentation/identity.md +125 -14
- package/documentation/introspection.md +82 -0
- package/documentation/io.md +42 -2
- package/documentation/map.md +115 -0
- package/documentation/notes/desync.jpg +0 -0
- package/documentation/notes/peers.md +59 -0
- package/documentation/notes/throttling.md +82 -0
- package/documentation/octets.md +122 -69
- package/documentation/passkeys.md +5 -0
- package/documentation/protocol.md +11 -4
- package/documentation/query.md +43 -0
- package/documentation/tracing.md +70 -0
- package/documentation/tree.md +13 -0
- package/features/access.feature +68 -3
- package/features/auth.assert.feature +57 -0
- package/features/auth.claims.feature +170 -0
- package/features/auth.incept.feature +120 -0
- package/features/auth.input.feature +59 -0
- package/features/auth.issue.feature +32 -0
- package/features/authorities.feature +3 -3
- package/features/authorities.federation.feature +20 -20
- package/features/authorities.tokens.feature +1 -2
- package/features/body.feature +27 -0
- package/features/cache.feature +97 -8
- package/features/cors.feature +29 -8
- package/features/credentials.feature +106 -0
- package/features/debug.feature +34 -0
- package/features/dev.feature +87 -0
- package/features/dynamic.feature +82 -1
- package/features/errors.feature +17 -5
- package/features/etag.feature +173 -1
- package/features/flow.feature +148 -0
- package/features/identity.basic.feature +136 -7
- package/features/identity.feature +11 -4
- package/features/identity.federation.feature +210 -33
- package/features/identity.otp.feature +101 -0
- package/features/identity.roles.feature +53 -4
- package/features/identity.tokens.feature +4 -102
- package/features/identtiy.tokens.custom.feature +247 -0
- package/features/interruptions.feature +19 -0
- package/features/introspection.feature +153 -0
- package/features/introspection.map.feature +92 -0
- package/features/io.feature +0 -1
- package/features/io.throttle.feature +40 -0
- package/features/map.feature +357 -0
- package/features/methods.feature +47 -0
- package/features/octets.cloudinary.feature +223 -0
- package/features/octets.download.feature +189 -0
- package/features/octets.entries.feature +8 -58
- package/features/octets.feature +58 -65
- package/features/octets.head.feature +40 -0
- package/features/octets.location.feature +83 -0
- package/features/octets.meta.feature +62 -15
- package/features/octets.workflows.feature +332 -67
- package/features/passkeys.feature +66 -0
- package/features/probes.feature +1 -1
- package/features/query.feature +101 -0
- package/features/realtime.feature +34 -0
- package/features/response.feature +29 -0
- package/features/routes.feature +86 -2
- package/features/server.feature +21 -0
- package/features/steps/.env.example +5 -0
- package/features/steps/Captures.ts +12 -0
- package/features/steps/Common.ts +4 -0
- package/features/steps/Components.ts +14 -0
- package/features/steps/Database.ts +6 -2
- package/features/steps/Gateway.ts +51 -5
- package/features/steps/HTTP.ts +27 -3
- package/features/steps/IDP.ts +334 -0
- package/features/steps/Identity.ts +51 -0
- package/features/steps/OTP.ts +39 -0
- package/features/steps/Parameters.ts +94 -2
- package/features/steps/Realtime.ts +151 -0
- package/features/steps/Workspace.ts +1 -2
- package/features/steps/components/audit/manifest.toa.yaml +13 -0
- package/features/steps/components/audit/operations/record.js +9 -0
- package/features/steps/components/echo/manifest.toa.yaml +17 -0
- package/features/steps/components/echo/operations/echo.js +7 -0
- package/features/steps/components/echo/operations/parameters.js +7 -0
- package/features/steps/components/echo/operations/ping.js +7 -0
- package/features/steps/components/echo/operations/unwrap.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/greeter/manifest.toa.yaml +0 -1
- package/features/steps/components/notify/manifest.toa.yaml +13 -0
- package/features/steps/components/notify/operations/send.js +9 -0
- package/features/steps/components/octets.tester/manifest.toa.yaml +26 -3
- package/features/steps/components/octets.tester/operations/authority.js +7 -0
- package/features/steps/components/octets.tester/operations/bar.js +0 -1
- package/features/steps/components/octets.tester/operations/baz.js +1 -1
- package/features/steps/components/octets.tester/operations/echo.js +1 -1
- package/features/steps/components/octets.tester/operations/foo.js +2 -2
- package/features/steps/components/octets.tester/operations/id.js +7 -0
- package/features/steps/components/octets.tester/operations/identity.js +7 -0
- 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/orders/manifest.toa.yaml +15 -0
- package/features/steps/components/orders/operations/create.js +9 -0
- package/features/steps/components/pots/manifest.toa.yaml +15 -4
- package/features/steps/components/pricing/manifest.toa.yaml +7 -0
- package/features/steps/components/pricing/operations/quote.js +7 -0
- package/features/steps/components/sequences/manifest.toa.yaml +0 -1
- package/features/steps/components/users/manifest.toa.yaml +4 -2
- package/features/steps/components/users/operations/create.js +15 -0
- package/features/steps/components/users.properties/manifest.toa.yaml +0 -1
- package/features/steps/map.ts +26 -0
- package/features/streams.feature +4 -0
- package/features/timestamps.feature +41 -0
- package/features/timing.feature +2 -22
- package/features/tracing.feature +123 -0
- package/package.json +35 -24
- package/readme.md +26 -1
- package/schemas/annotation.cos.yaml +7 -1
- package/schemas/io/throttle.cos.yaml +36 -0
- package/schemas/method.cos.yaml +2 -1
- package/schemas/node.cos.yaml +2 -0
- package/schemas/octets/put.cos.yaml +28 -0
- package/schemas/query.cos.yaml +7 -10
- package/schemas/querystring.cos.yaml +1 -0
- package/source/Annotation.ts +3 -1
- package/source/Branch.ts +1 -0
- package/source/Composition.ts +0 -6
- package/source/Context.ts +4 -1
- package/source/Directive.test.ts +5 -3
- package/source/Directive.ts +51 -9
- package/source/Endpoint.ts +117 -25
- package/source/Factory.ts +32 -3
- package/source/Gateway.ts +164 -13
- package/source/HTTP/Context.ts +32 -8
- package/source/HTTP/Server.ts +207 -44
- package/source/HTTP/Timing.ts +1 -12
- package/source/HTTP/exceptions.ts +30 -12
- package/source/HTTP/formats/index.ts +4 -5
- package/source/HTTP/formats/json.ts +2 -4
- package/source/HTTP/formats/msgpack.ts +0 -1
- package/source/HTTP/formats/text.ts +2 -4
- package/source/HTTP/formats/yaml.test.ts +9 -0
- package/source/HTTP/formats/yaml.ts +4 -4
- package/source/HTTP/messages.test.ts +70 -7
- package/source/HTTP/messages.ts +99 -19
- package/source/Introspection.ts +11 -0
- package/source/Mapping.ts +69 -21
- package/source/Query.test.ts +3 -3
- package/source/Query.ts +107 -17
- package/source/RTD/Context.ts +1 -1
- package/source/RTD/Directives.ts +7 -0
- package/source/RTD/Endpoint.ts +3 -0
- package/source/RTD/Method.ts +16 -0
- package/source/RTD/Node.ts +65 -23
- package/source/RTD/Route.ts +19 -9
- package/source/RTD/Tree.ts +22 -9
- package/source/RTD/expiration.test.ts +78 -0
- package/source/RTD/factory.ts +19 -1
- package/source/RTD/segment.ts +2 -0
- package/source/RTD/syntax/parse.test.ts +1 -1
- package/source/RTD/syntax/parse.ts +37 -24
- package/source/RTD/syntax/types.ts +9 -4
- package/source/Remotes.test.ts +11 -3
- package/source/Remotes.ts +11 -7
- package/source/Tenant.ts +39 -12
- package/source/const.ts +1 -0
- package/source/deployment.ts +21 -13
- package/source/directives/auth/Anonymous.ts +3 -3
- package/source/directives/auth/Anyone.ts +13 -0
- package/source/directives/auth/Assert.ts +35 -0
- package/source/directives/auth/Authorization.ts +58 -22
- package/source/directives/auth/Delegate.ts +9 -5
- package/source/directives/auth/Echo.ts +16 -6
- package/source/directives/auth/Federation.ts +84 -0
- package/source/directives/auth/Id.ts +1 -1
- package/source/directives/auth/Incept.ts +75 -23
- package/source/directives/auth/Input.ts +71 -0
- package/source/directives/auth/Role.test.ts +2 -3
- package/source/directives/auth/Role.ts +6 -11
- package/source/directives/auth/Rule.ts +3 -6
- package/source/directives/auth/Scheme.ts +5 -5
- package/source/directives/auth/create.ts +11 -0
- package/source/directives/auth/schemes.ts +5 -2
- package/source/directives/auth/split.ts +1 -1
- package/source/directives/auth/types.ts +12 -7
- package/source/directives/cache/Cache.ts +20 -7
- package/source/directives/cache/Control.ts +16 -16
- package/source/directives/cors/CORS.ts +9 -9
- package/source/directives/dev/Development.ts +14 -7
- package/source/directives/dev/Faulty.ts +26 -0
- package/source/directives/dev/Sleep.ts +55 -0
- package/source/directives/dev/types.ts +1 -1
- package/source/directives/flow/Compose.ts +92 -0
- package/source/directives/flow/Fetch.ts +86 -0
- package/source/directives/flow/Flow.ts +42 -0
- package/source/directives/flow/index.ts +3 -0
- package/source/directives/flow/types.ts +7 -0
- package/source/directives/index.ts +3 -2
- package/source/directives/io/Directive.ts +5 -2
- package/source/directives/io/IO.ts +18 -6
- package/source/directives/io/Input.ts +9 -6
- package/source/directives/io/Output.ts +6 -5
- package/source/directives/io/Throttle.ts +32 -0
- package/source/directives/io/lib/throttle/Configuration.test.ts +40 -0
- package/source/directives/io/lib/throttle/Configuration.ts +58 -0
- package/source/directives/io/lib/throttle/Interval.ts +40 -0
- package/source/directives/io/lib/throttle/Keys.ts +40 -0
- package/source/directives/io/lib/throttle/Quota.ts +22 -0
- package/source/directives/io/lib/throttle/Quotas.test.ts +136 -0
- package/source/directives/io/lib/throttle/Quotas.ts +83 -0
- package/source/directives/io/lib/throttle/components/Component.ts +5 -0
- package/source/directives/io/lib/throttle/components/IP.ts +40 -0
- package/source/directives/io/lib/throttle/components/Path.ts +8 -0
- package/source/directives/io/lib/throttle/components/index.ts +13 -0
- package/source/directives/io/lib/throttle/conditions/Condition.ts +5 -0
- package/source/directives/io/lib/throttle/conditions/Status.ts +17 -0
- package/source/directives/io/lib/throttle/conditions/index.ts +11 -0
- package/source/directives/io/lib/throttle/index.ts +2 -0
- package/source/directives/io/schemas.test.ts +9 -0
- package/source/directives/io/schemas.ts +3 -0
- package/source/directives/map/Authority.ts +15 -0
- package/source/directives/map/Buffer.ts +15 -0
- package/source/directives/map/Claims.ts +58 -0
- package/source/directives/map/Directive.ts +4 -0
- package/source/directives/map/Headers.ts +38 -0
- package/source/directives/map/Language.ts +42 -0
- package/source/directives/map/Languages.ts +11 -0
- package/source/directives/map/Map.ts +63 -0
- package/source/directives/map/Mapping.ts +19 -0
- package/source/directives/{vary → map}/Properties.ts +2 -4
- package/source/directives/map/Segments.ts +33 -0
- package/source/directives/map/index.ts +3 -0
- package/source/directives/octets/Context.ts +3 -2
- package/source/directives/octets/Delete.ts +22 -19
- package/source/directives/octets/Get.ts +96 -0
- package/source/directives/octets/Octets.ts +10 -12
- package/source/directives/octets/Put.ts +138 -0
- package/source/directives/octets/Workflow.ts +9 -3
- package/source/directives/octets/bytes.test.ts +30 -0
- package/source/directives/octets/bytes.ts +18 -0
- package/source/directives/octets/schemas.ts +4 -8
- package/source/directives/octets/types.ts +2 -0
- package/source/directives/octets/workflows/Execution.ts +62 -8
- package/source/directives/octets/workflows/Workflow.ts +18 -7
- package/source/directives/octets/workflows/index.ts +1 -1
- package/source/exceptions.ts +16 -4
- package/source/manifest.ts +10 -11
- package/source/root.ts +16 -1
- package/transpiled/Annotation.d.ts +2 -1
- package/transpiled/Branch.d.ts +1 -0
- package/transpiled/Composition.d.ts +0 -1
- package/transpiled/Composition.js +0 -4
- package/transpiled/Composition.js.map +1 -1
- package/transpiled/Context.d.ts +2 -1
- package/transpiled/Directive.d.ts +3 -0
- package/transpiled/Directive.js +39 -9
- package/transpiled/Directive.js.map +1 -1
- package/transpiled/Endpoint.d.ts +8 -4
- package/transpiled/Endpoint.js +79 -19
- package/transpiled/Endpoint.js.map +1 -1
- package/transpiled/Factory.d.ts +1 -1
- package/transpiled/Factory.js +23 -2
- package/transpiled/Factory.js.map +1 -1
- package/transpiled/Gateway.d.ts +15 -0
- package/transpiled/Gateway.js +118 -13
- package/transpiled/Gateway.js.map +1 -1
- package/transpiled/HTTP/Context.d.ts +7 -2
- package/transpiled/HTTP/Context.js +23 -5
- package/transpiled/HTTP/Context.js.map +1 -1
- package/transpiled/HTTP/Server.d.ts +5 -3
- package/transpiled/HTTP/Server.js +163 -37
- package/transpiled/HTTP/Server.js.map +1 -1
- package/transpiled/HTTP/Timing.d.ts +0 -2
- package/transpiled/HTTP/Timing.js +0 -8
- package/transpiled/HTTP/Timing.js.map +1 -1
- package/transpiled/HTTP/exceptions.d.ts +16 -7
- package/transpiled/HTTP/exceptions.js +34 -16
- package/transpiled/HTTP/exceptions.js.map +1 -1
- package/transpiled/HTTP/formats/index.d.ts +2 -2
- package/transpiled/HTTP/formats/index.js +3 -3
- package/transpiled/HTTP/formats/index.js.map +1 -1
- package/transpiled/HTTP/formats/json.d.ts +2 -2
- package/transpiled/HTTP/formats/json.js +3 -4
- package/transpiled/HTTP/formats/json.js.map +1 -1
- package/transpiled/HTTP/formats/msgpack.d.ts +1 -1
- package/transpiled/HTTP/formats/msgpack.js.map +1 -1
- package/transpiled/HTTP/formats/text.d.ts +2 -2
- package/transpiled/HTTP/formats/text.js +3 -4
- package/transpiled/HTTP/formats/text.js.map +1 -1
- package/transpiled/HTTP/formats/yaml.d.ts +2 -2
- package/transpiled/HTTP/formats/yaml.js +5 -5
- package/transpiled/HTTP/formats/yaml.js.map +1 -1
- package/transpiled/HTTP/messages.d.ts +4 -1
- package/transpiled/HTTP/messages.js +94 -13
- package/transpiled/HTTP/messages.js.map +1 -1
- package/transpiled/Introspection.d.ts +9 -0
- package/transpiled/Introspection.js +3 -0
- package/transpiled/Introspection.js.map +1 -0
- package/transpiled/Mapping.d.ts +11 -2
- package/transpiled/Mapping.js +51 -19
- package/transpiled/Mapping.js.map +1 -1
- package/transpiled/Query.d.ts +11 -1
- package/transpiled/Query.js +78 -14
- package/transpiled/Query.js.map +1 -1
- package/transpiled/RTD/Context.d.ts +1 -1
- package/transpiled/RTD/Directives.d.ts +5 -0
- package/transpiled/RTD/Endpoint.d.ts +1 -0
- package/transpiled/RTD/Method.d.ts +4 -0
- package/transpiled/RTD/Method.js +11 -0
- package/transpiled/RTD/Method.js.map +1 -1
- package/transpiled/RTD/Node.d.ts +13 -2
- package/transpiled/RTD/Node.js +46 -17
- package/transpiled/RTD/Node.js.map +1 -1
- package/transpiled/RTD/Route.d.ts +5 -4
- package/transpiled/RTD/Route.js +10 -4
- package/transpiled/RTD/Route.js.map +1 -1
- package/transpiled/RTD/Tree.d.ts +8 -1
- package/transpiled/RTD/Tree.js +15 -3
- package/transpiled/RTD/Tree.js.map +1 -1
- package/transpiled/RTD/factory.d.ts +1 -0
- package/transpiled/RTD/factory.js +16 -2
- package/transpiled/RTD/factory.js.map +1 -1
- package/transpiled/RTD/segment.d.ts +1 -0
- package/transpiled/RTD/segment.js +2 -0
- package/transpiled/RTD/segment.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 +8 -3
- package/transpiled/RTD/syntax/types.js +1 -1
- package/transpiled/RTD/syntax/types.js.map +1 -1
- package/transpiled/Remotes.d.ts +4 -4
- package/transpiled/Remotes.js +9 -6
- package/transpiled/Remotes.js.map +1 -1
- package/transpiled/Tenant.d.ts +9 -4
- package/transpiled/Tenant.js +26 -7
- package/transpiled/Tenant.js.map +1 -1
- package/transpiled/const.d.ts +1 -0
- package/transpiled/const.js +5 -0
- package/transpiled/const.js.map +1 -0
- package/transpiled/deployment.js +17 -11
- package/transpiled/deployment.js.map +1 -1
- package/transpiled/directives/auth/Anonymous.d.ts +2 -2
- package/transpiled/directives/auth/Anonymous.js +2 -2
- package/transpiled/directives/auth/Anonymous.js.map +1 -1
- package/transpiled/directives/auth/Anyone.d.ts +6 -0
- package/transpiled/directives/auth/Anyone.js +14 -0
- package/transpiled/directives/auth/Anyone.js.map +1 -0
- package/transpiled/directives/auth/Assert.d.ts +7 -0
- package/transpiled/directives/auth/Assert.js +57 -0
- package/transpiled/directives/auth/Assert.js.map +1 -0
- package/transpiled/directives/auth/Authorization.d.ts +4 -3
- package/transpiled/directives/auth/Authorization.js +48 -21
- package/transpiled/directives/auth/Authorization.js.map +1 -1
- package/transpiled/directives/auth/Delegate.d.ts +5 -4
- package/transpiled/directives/auth/Delegate.js +7 -3
- package/transpiled/directives/auth/Delegate.js.map +1 -1
- package/transpiled/directives/auth/Echo.d.ts +4 -4
- package/transpiled/directives/auth/Echo.js +11 -4
- package/transpiled/directives/auth/Echo.js.map +1 -1
- 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/Id.d.ts +1 -1
- package/transpiled/directives/auth/Id.js.map +1 -1
- package/transpiled/directives/auth/Incept.d.ts +8 -5
- package/transpiled/directives/auth/Incept.js +56 -18
- package/transpiled/directives/auth/Incept.js.map +1 -1
- package/transpiled/directives/auth/Input.d.ts +13 -0
- package/transpiled/directives/auth/Input.js +49 -0
- package/transpiled/directives/auth/Input.js.map +1 -0
- package/transpiled/directives/auth/Role.d.ts +1 -1
- package/transpiled/directives/auth/Role.js +4 -6
- package/transpiled/directives/auth/Role.js.map +1 -1
- package/transpiled/directives/auth/Rule.d.ts +2 -4
- package/transpiled/directives/auth/Rule.js +2 -2
- package/transpiled/directives/auth/Rule.js.map +1 -1
- package/transpiled/directives/auth/Scheme.d.ts +2 -2
- package/transpiled/directives/auth/Scheme.js +4 -4
- package/transpiled/directives/auth/Scheme.js.map +1 -1
- package/transpiled/directives/auth/create.d.ts +2 -0
- package/transpiled/directives/auth/create.js +14 -0
- package/transpiled/directives/auth/create.js.map +1 -0
- package/transpiled/directives/auth/schemes.d.ts +2 -1
- package/transpiled/directives/auth/schemes.js +5 -2
- package/transpiled/directives/auth/schemes.js.map +1 -1
- package/transpiled/directives/auth/split.js +1 -1
- package/transpiled/directives/auth/split.js.map +1 -1
- package/transpiled/directives/auth/types.d.ts +10 -7
- package/transpiled/directives/cache/Cache.d.ts +3 -3
- package/transpiled/directives/cache/Cache.js +15 -4
- package/transpiled/directives/cache/Cache.js.map +1 -1
- package/transpiled/directives/cache/Control.d.ts +2 -2
- package/transpiled/directives/cache/Control.js +12 -12
- package/transpiled/directives/cache/Control.js.map +1 -1
- package/transpiled/directives/cors/CORS.js +7 -7
- package/transpiled/directives/cors/CORS.js.map +1 -1
- package/transpiled/directives/dev/Development.d.ts +1 -1
- package/transpiled/directives/dev/Development.js +15 -7
- package/transpiled/directives/dev/Development.js.map +1 -1
- package/transpiled/directives/dev/Faulty.d.ts +8 -0
- package/transpiled/directives/dev/Faulty.js +26 -0
- package/transpiled/directives/dev/Faulty.js.map +1 -0
- package/transpiled/directives/dev/Sleep.d.ts +9 -0
- package/transpiled/directives/dev/Sleep.js +48 -0
- package/transpiled/directives/dev/Sleep.js.map +1 -0
- package/transpiled/directives/dev/types.d.ts +1 -1
- package/transpiled/directives/flow/Compose.d.ts +9 -0
- package/transpiled/directives/flow/Compose.js +94 -0
- package/transpiled/directives/flow/Compose.js.map +1 -0
- package/transpiled/directives/flow/Fetch.d.ts +12 -0
- package/transpiled/directives/flow/Fetch.js +58 -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 +33 -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 +6 -0
- package/transpiled/directives/flow/types.js.map +1 -0
- package/transpiled/directives/index.js +3 -2
- package/transpiled/directives/index.js.map +1 -1
- package/transpiled/directives/io/Directive.d.ts +5 -2
- package/transpiled/directives/io/IO.d.ts +4 -2
- package/transpiled/directives/io/IO.js +14 -4
- package/transpiled/directives/io/IO.js.map +1 -1
- package/transpiled/directives/io/Input.d.ts +1 -1
- package/transpiled/directives/io/Input.js +5 -3
- package/transpiled/directives/io/Input.js.map +1 -1
- package/transpiled/directives/io/Output.d.ts +1 -1
- package/transpiled/directives/io/Output.js +3 -3
- package/transpiled/directives/io/Output.js.map +1 -1
- package/transpiled/directives/io/Throttle.d.ts +11 -0
- package/transpiled/directives/io/Throttle.js +51 -0
- package/transpiled/directives/io/Throttle.js.map +1 -0
- package/transpiled/directives/io/lib/throttle/Configuration.d.ts +23 -0
- package/transpiled/directives/io/lib/throttle/Configuration.js +27 -0
- package/transpiled/directives/io/lib/throttle/Configuration.js.map +1 -0
- package/transpiled/directives/io/lib/throttle/Interval.d.ts +10 -0
- package/transpiled/directives/io/lib/throttle/Interval.js +39 -0
- package/transpiled/directives/io/lib/throttle/Interval.js.map +1 -0
- package/transpiled/directives/io/lib/throttle/Keys.d.ts +12 -0
- package/transpiled/directives/io/lib/throttle/Keys.js +34 -0
- package/transpiled/directives/io/lib/throttle/Keys.js.map +1 -0
- package/transpiled/directives/io/lib/throttle/Quota.d.ts +8 -0
- package/transpiled/directives/io/lib/throttle/Quota.js +22 -0
- package/transpiled/directives/io/lib/throttle/Quota.js.map +1 -0
- package/transpiled/directives/io/lib/throttle/Quotas.d.ts +26 -0
- package/transpiled/directives/io/lib/throttle/Quotas.js +61 -0
- package/transpiled/directives/io/lib/throttle/Quotas.js.map +1 -0
- package/transpiled/directives/io/lib/throttle/components/Component.d.ts +4 -0
- package/transpiled/directives/io/lib/throttle/components/Component.js +3 -0
- package/transpiled/directives/io/lib/throttle/components/Component.js.map +1 -0
- package/transpiled/directives/io/lib/throttle/components/IP.d.ts +6 -0
- package/transpiled/directives/io/lib/throttle/components/IP.js +33 -0
- package/transpiled/directives/io/lib/throttle/components/IP.js.map +1 -0
- package/transpiled/directives/io/lib/throttle/components/Path.d.ts +5 -0
- package/transpiled/directives/io/lib/throttle/components/Path.js +10 -0
- package/transpiled/directives/io/lib/throttle/components/Path.js.map +1 -0
- package/transpiled/directives/io/lib/throttle/components/index.d.ts +5 -0
- package/transpiled/directives/io/lib/throttle/components/index.js +10 -0
- package/transpiled/directives/io/lib/throttle/components/index.js.map +1 -0
- package/transpiled/directives/io/lib/throttle/conditions/Condition.d.ts +4 -0
- package/transpiled/directives/io/lib/throttle/conditions/Condition.js +3 -0
- package/transpiled/directives/io/lib/throttle/conditions/Condition.js.map +1 -0
- package/transpiled/directives/io/lib/throttle/conditions/Status.d.ts +7 -0
- package/transpiled/directives/io/lib/throttle/conditions/Status.js +19 -0
- package/transpiled/directives/io/lib/throttle/conditions/Status.js.map +1 -0
- package/transpiled/directives/io/lib/throttle/conditions/index.d.ts +5 -0
- package/transpiled/directives/io/lib/throttle/conditions/index.js +8 -0
- package/transpiled/directives/io/lib/throttle/conditions/index.js.map +1 -0
- package/transpiled/directives/io/lib/throttle/index.d.ts +2 -0
- package/transpiled/directives/io/lib/throttle/index.js +8 -0
- package/transpiled/directives/io/lib/throttle/index.js.map +1 -0
- package/transpiled/directives/io/schemas.d.ts +2 -0
- package/transpiled/directives/io/schemas.js +2 -1
- package/transpiled/directives/io/schemas.js.map +1 -1
- package/transpiled/directives/map/Authority.d.ts +6 -0
- package/transpiled/directives/map/Authority.js +19 -0
- package/transpiled/directives/map/Authority.js.map +1 -0
- package/transpiled/directives/map/Buffer.d.ts +6 -0
- package/transpiled/directives/map/Buffer.js +19 -0
- package/transpiled/directives/map/Buffer.js.map +1 -0
- package/transpiled/directives/map/Claims.d.ts +10 -0
- package/transpiled/directives/map/Claims.js +44 -0
- package/transpiled/directives/map/Claims.js.map +1 -0
- package/transpiled/directives/map/Directive.d.ts +3 -0
- package/transpiled/directives/map/Directive.js.map +1 -0
- package/transpiled/directives/map/Headers.d.ts +7 -0
- package/transpiled/directives/map/Headers.js +34 -0
- package/transpiled/directives/map/Headers.js.map +1 -0
- package/transpiled/directives/map/Language.d.ts +10 -0
- package/transpiled/directives/map/Language.js +38 -0
- package/transpiled/directives/map/Language.js.map +1 -0
- package/transpiled/directives/map/Languages.d.ts +4 -0
- package/transpiled/directives/map/Languages.js +17 -0
- package/transpiled/directives/map/Languages.js.map +1 -0
- package/transpiled/directives/map/Map.d.ts +13 -0
- package/transpiled/directives/map/Map.js +48 -0
- package/transpiled/directives/map/Map.js.map +1 -0
- package/transpiled/directives/map/Mapping.d.ts +13 -0
- package/transpiled/directives/map/Mapping.js +13 -0
- package/transpiled/directives/map/Mapping.js.map +1 -0
- package/transpiled/directives/{vary → map}/Properties.d.ts +2 -2
- package/transpiled/directives/{vary → map}/Properties.js +1 -3
- package/transpiled/directives/map/Properties.js.map +1 -0
- package/transpiled/directives/map/Segments.d.ts +6 -0
- package/transpiled/directives/map/Segments.js +30 -0
- package/transpiled/directives/map/Segments.js.map +1 -0
- package/transpiled/directives/map/index.d.ts +2 -0
- package/transpiled/directives/map/index.js +6 -0
- package/transpiled/directives/map/index.js.map +1 -0
- package/transpiled/directives/octets/Context.js +4 -24
- package/transpiled/directives/octets/Context.js.map +1 -1
- package/transpiled/directives/octets/Delete.js +15 -12
- package/transpiled/directives/octets/Delete.js.map +1 -1
- package/transpiled/directives/octets/{Fetch.d.ts → Get.d.ts} +5 -6
- package/transpiled/directives/octets/{Fetch.js → Get.js} +34 -30
- package/transpiled/directives/octets/Get.js.map +1 -0
- package/transpiled/directives/octets/Octets.js +9 -10
- package/transpiled/directives/octets/Octets.js.map +1 -1
- package/transpiled/directives/octets/{Store.d.ts → Put.d.ts} +8 -2
- package/transpiled/directives/octets/{Store.js → Put.js} +33 -27
- package/transpiled/directives/octets/Put.js.map +1 -0
- package/transpiled/directives/octets/Workflow.js +7 -2
- package/transpiled/directives/octets/Workflow.js.map +1 -1
- package/transpiled/directives/octets/bytes.d.ts +1 -0
- package/transpiled/directives/octets/bytes.js +21 -0
- package/transpiled/directives/octets/bytes.js.map +1 -0
- package/transpiled/directives/octets/schemas.d.ts +4 -8
- package/transpiled/directives/octets/schemas.js +3 -6
- package/transpiled/directives/octets/schemas.js.map +1 -1
- package/transpiled/directives/octets/types.d.ts +2 -0
- package/transpiled/directives/octets/workflows/Execution.d.ts +7 -1
- package/transpiled/directives/octets/workflows/Execution.js +44 -9
- package/transpiled/directives/octets/workflows/Execution.js.map +1 -1
- package/transpiled/directives/octets/workflows/Workflow.d.ts +8 -3
- package/transpiled/directives/octets/workflows/Workflow.js +10 -4
- package/transpiled/directives/octets/workflows/Workflow.js.map +1 -1
- package/transpiled/directives/octets/workflows/index.d.ts +1 -1
- package/transpiled/directives/octets/workflows/index.js.map +1 -1
- package/transpiled/exceptions.js +11 -2
- package/transpiled/exceptions.js.map +1 -1
- package/transpiled/manifest.js +10 -11
- package/transpiled/manifest.js.map +1 -1
- package/transpiled/root.js +16 -1
- package/transpiled/root.js.map +1 -1
- package/transpiled/tsconfig.tsbuildinfo +1 -1
- package/components/identity.federation/operations/lib/assertions-as-values.d.ts +0 -4
- package/components/identity.federation/operations/lib/assertions-as-values.js.map +0 -1
- package/components/identity.federation/operations/lib/jwt.d.ts +0 -20
- package/components/identity.federation/operations/lib/jwt.js +0 -136
- package/components/identity.federation/operations/lib/jwt.js.map +0 -1
- package/components/identity.federation/operations/schemas.d.ts +0 -63
- 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.d.ts +0 -56
- package/components/identity.federation/operations/types.js.map +0 -1
- package/components/identity.federation/source/lib/assertions-as-values.ts +0 -19
- package/components/identity.federation/source/lib/jwt.test.ts +0 -56
- package/components/identity.federation/source/lib/jwt.ts +0 -171
- package/components/identity.federation/source/schemas.ts +0 -65
- package/components/identity.federation/source/types.ts +0 -62
- package/components/identity.tokens/operations/types.d.ts +0 -46
- package/components/identity.tokens/operations/types.js.map +0 -1
- package/components/identity.tokens/source/types.ts +0 -55
- package/components/octets.storage/operations/fetch.js +0 -46
- package/components/octets.storage/operations/list.js +0 -7
- package/components/octets.storage/operations/store.js +0 -11
- package/documentation/vary.md +0 -69
- package/features/steps/IdP.ts +0 -154
- package/features/steps/components/octets.tester/operations/diversify.js +0 -14
- package/features/vary.feature +0 -252
- package/schemas/octets/context.cos.yaml +0 -1
- package/schemas/octets/fetch.cos.yaml +0 -3
- package/schemas/octets/permute.cos.yaml +0 -1
- package/schemas/octets/store.cos.yaml +0 -3
- package/source/directives/octets/Fetch.ts +0 -100
- package/source/directives/octets/List.ts +0 -72
- package/source/directives/octets/Store.ts +0 -126
- package/source/directives/vary/Directive.ts +0 -7
- package/source/directives/vary/Embed.ts +0 -68
- package/source/directives/vary/Vary.ts +0 -50
- package/source/directives/vary/embeddings/Authority.ts +0 -8
- package/source/directives/vary/embeddings/Embedding.ts +0 -7
- package/source/directives/vary/embeddings/Header.ts +0 -32
- package/source/directives/vary/embeddings/Language.ts +0 -31
- package/source/directives/vary/embeddings/Parameter.ts +0 -14
- package/source/directives/vary/embeddings/index.ts +0 -13
- package/source/directives/vary/index.ts +0 -3
- package/transpiled/directives/octets/Fetch.js.map +0 -1
- package/transpiled/directives/octets/List.d.ts +0 -16
- package/transpiled/directives/octets/List.js +0 -74
- package/transpiled/directives/octets/List.js.map +0 -1
- package/transpiled/directives/octets/Store.js.map +0 -1
- package/transpiled/directives/vary/Directive.d.ts +0 -6
- package/transpiled/directives/vary/Directive.js.map +0 -1
- package/transpiled/directives/vary/Embed.d.ts +0 -11
- package/transpiled/directives/vary/Embed.js +0 -51
- package/transpiled/directives/vary/Embed.js.map +0 -1
- package/transpiled/directives/vary/Properties.js.map +0 -1
- package/transpiled/directives/vary/Vary.d.ts +0 -10
- package/transpiled/directives/vary/Vary.js +0 -36
- package/transpiled/directives/vary/Vary.js.map +0 -1
- package/transpiled/directives/vary/embeddings/Authority.d.ts +0 -5
- package/transpiled/directives/vary/embeddings/Authority.js +0 -10
- package/transpiled/directives/vary/embeddings/Authority.js.map +0 -1
- package/transpiled/directives/vary/embeddings/Embedding.d.ts +0 -6
- package/transpiled/directives/vary/embeddings/Embedding.js.map +0 -1
- package/transpiled/directives/vary/embeddings/Header.d.ts +0 -7
- package/transpiled/directives/vary/embeddings/Header.js +0 -28
- package/transpiled/directives/vary/embeddings/Header.js.map +0 -1
- package/transpiled/directives/vary/embeddings/Language.d.ts +0 -7
- package/transpiled/directives/vary/embeddings/Language.js +0 -28
- package/transpiled/directives/vary/embeddings/Language.js.map +0 -1
- package/transpiled/directives/vary/embeddings/Parameter.d.ts +0 -7
- package/transpiled/directives/vary/embeddings/Parameter.js +0 -14
- package/transpiled/directives/vary/embeddings/Parameter.js.map +0 -1
- package/transpiled/directives/vary/embeddings/index.d.ts +0 -5
- package/transpiled/directives/vary/embeddings/index.js +0 -14
- package/transpiled/directives/vary/embeddings/index.js.map +0 -1
- package/transpiled/directives/vary/index.d.ts +0 -2
- package/transpiled/directives/vary/index.js +0 -6
- package/transpiled/directives/vary/index.js.map +0 -1
- /package/components/{identity.federation/operations → identity.tokens/operations/lib}/types.js +0 -0
- /package/schemas/octets/{list.cos.yaml → get.cos.yaml} +0 -0
- /package/{components/identity.tokens/operations → transpiled/directives/flow}/types.js +0 -0
- /package/transpiled/directives/{vary → map}/Directive.js +0 -0
|
@@ -5,6 +5,9 @@ configured in the same
|
|
|
5
5
|
way as if they were a part of the Context. Resources exposed by the components
|
|
6
6
|
are [isolated](tree.md#directives).
|
|
7
7
|
|
|
8
|
+
See [Persistent credentials](credentials.md) for the centralized Basic, federation, and passkey
|
|
9
|
+
management API.
|
|
10
|
+
|
|
8
11
|
## Basic credentials
|
|
9
12
|
|
|
10
13
|
The `identity.basic` component stores basic credentials.
|
|
@@ -74,6 +77,12 @@ username: string
|
|
|
74
77
|
password: string
|
|
75
78
|
```
|
|
76
79
|
|
|
80
|
+
Returns `201 Created` if the Identity is created,
|
|
81
|
+
or `422 Unprocessable Entity` with one of the error codes:
|
|
82
|
+
|
|
83
|
+
- `INVALID_USERNAME` - `username` does not match constraints
|
|
84
|
+
- `INVALID_PASSWORD` - `password` does not match constraints
|
|
85
|
+
|
|
77
86
|
Access is [anonymous](access.md#anonymous).
|
|
78
87
|
|
|
79
88
|
#### `/identity/basic/:id/`
|
|
@@ -89,6 +98,23 @@ password?: string
|
|
|
89
98
|
|
|
90
99
|
Access requires basic credentials of the modified Identity or `system:identity:basic` role.
|
|
91
100
|
|
|
101
|
+
<code>POST</code> Incept new basic credentials. Request body is as follows:
|
|
102
|
+
|
|
103
|
+
```yaml
|
|
104
|
+
username: string
|
|
105
|
+
password: string
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
Identity should not have associated basic credentials. Access requires any credentials of the Identity.
|
|
109
|
+
|
|
110
|
+
#### `/identity/basic/usernames/:username/`
|
|
111
|
+
|
|
112
|
+
<code>GET</code> Check if the username is available.
|
|
113
|
+
|
|
114
|
+
`username` must be Base64 URL encoded.
|
|
115
|
+
|
|
116
|
+
Returns empty response with status `204` if the username is already taken or `404` if it is available.
|
|
117
|
+
|
|
92
118
|
## Identity federation (OpenID connect)
|
|
93
119
|
|
|
94
120
|
The `identity.federation` component manages OpenID Connect federated identities.
|
|
@@ -102,8 +128,10 @@ the [component manifest](../components/identity.federation/manifest.toa.yaml).
|
|
|
102
128
|
No federated tokens are accepted by default until at least one entry is added to the `trust`
|
|
103
129
|
configuration.
|
|
104
130
|
|
|
105
|
-
|
|
106
|
-
|
|
131
|
+
Issuer metadata is loaded from `<iss>/.well-known/openid-configuration`; signing keys are then
|
|
132
|
+
loaded from its `jwks_uri`. These requests, including Authorization Code token exchange, use the
|
|
133
|
+
built-in `context.fetch`, so they participate in standard HTTP telemetry and connection pooling.
|
|
134
|
+
JWKS resolvers are cached per fetch instance and issuer.
|
|
107
135
|
|
|
108
136
|
```yaml
|
|
109
137
|
# context.toa.yaml
|
|
@@ -116,15 +144,13 @@ configuration:
|
|
|
116
144
|
- https://github.com/tinovyatkin
|
|
117
145
|
- https://github.com/temich
|
|
118
146
|
|
|
119
|
-
-
|
|
120
|
-
|
|
121
|
-
HS256:
|
|
122
|
-
k1: <secret-to-be-used-for-hs256>
|
|
147
|
+
- iss: https://accounts.google.com
|
|
148
|
+
aud: <GOOGLE_CLIENT_ID>
|
|
123
149
|
```
|
|
124
150
|
|
|
125
|
-
##
|
|
151
|
+
## Local tokens
|
|
126
152
|
|
|
127
|
-
The `identity.tokens` component manages
|
|
153
|
+
The `identity.tokens` component manages local authentication tokens.
|
|
128
154
|
|
|
129
155
|
These tokens carry the information required to authenticate the Identity and authorize access.
|
|
130
156
|
|
|
@@ -143,21 +169,109 @@ authorization: Token ...
|
|
|
143
169
|
cache-control: no-store
|
|
144
170
|
```
|
|
145
171
|
|
|
172
|
+
### Custom tokens
|
|
173
|
+
|
|
174
|
+
Custom tokens can be issued with a specific set of permissions and scopes for the own Identity or by
|
|
175
|
+
an Identity with the `system:identity:tokens` role.
|
|
176
|
+
|
|
177
|
+
Tokens are issued with custom secret keys and are not subject to [token rotation](#token-rotation).
|
|
178
|
+
To invalidate a custom token, its secret key must be deleted.
|
|
179
|
+
|
|
180
|
+
Custom tokens have no `refresh` period, that is, never become obsolete and never refreshed.
|
|
181
|
+
|
|
182
|
+
```
|
|
183
|
+
POST /identity/tokens/<identity>/
|
|
184
|
+
host: nex.toa.io
|
|
185
|
+
authorization: ...
|
|
186
|
+
accept: application/yaml
|
|
187
|
+
content-type: application/yaml
|
|
188
|
+
|
|
189
|
+
lifetime: 3600
|
|
190
|
+
label: CI deployment token
|
|
191
|
+
scopes: [app:developer]
|
|
192
|
+
permissions:
|
|
193
|
+
/users/fc8e66dd/: [GET, PUT]
|
|
194
|
+
/posts/fc8e66dd/**/comments/: [*]
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
```
|
|
198
|
+
201 Created
|
|
199
|
+
content-type: application/yaml
|
|
200
|
+
|
|
201
|
+
kid: <key-id>
|
|
202
|
+
exp: <unix-time-ms>
|
|
203
|
+
token: <token>
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
- `lifetime`: Issued token will be valid for this period
|
|
207
|
+
(default is specified in [the configuration](#token-rotation)).
|
|
208
|
+
The value of `0` means the token will not expire, which is supported, but
|
|
209
|
+
**strongly not recommended** for production environments.
|
|
210
|
+
- `label`: Required human-readable name used when listing and revoking issued tokens.
|
|
211
|
+
- `scopes`: Issued token will assume only specified [role scopes](access.md#roles).
|
|
212
|
+
- `permissions`: Issued token will have permissions to access only specified resources and methods.
|
|
213
|
+
Supports [glob patterns](https://www.gnu.org/software/bash/manual/html_node/Pattern-Matching.html)
|
|
214
|
+
and a wildcard method.
|
|
215
|
+
|
|
216
|
+
> `roles` and `permissions` are additional restrictions applied on top of the Identity’s inherent
|
|
217
|
+
> privileges.
|
|
218
|
+
|
|
219
|
+
### Custom token invalidation
|
|
220
|
+
|
|
221
|
+
Custom tokens can be invalidated by deleting the secret key used to issue them.
|
|
222
|
+
This can be done by the Identity that issued the token or by an Identity with
|
|
223
|
+
the `system:identity:keys` role.
|
|
224
|
+
|
|
225
|
+
```
|
|
226
|
+
DELETE /identity/keys/<identity>/<key.id>/
|
|
227
|
+
authorization: ...
|
|
228
|
+
```
|
|
229
|
+
|
|
230
|
+
The key `id` is returned as `kid` when the token is issued, is visible in the JWE protected header,
|
|
231
|
+
and can also be obtained by listing issued token keys. The secret key itself is never returned by
|
|
232
|
+
the listing endpoint.
|
|
233
|
+
|
|
234
|
+
```
|
|
235
|
+
GET /identity/keys/<identity>/
|
|
236
|
+
authorization: ...
|
|
237
|
+
```
|
|
238
|
+
|
|
239
|
+
The listing returns `id`, `label`, optional `expires`, and `_created`. Deletion prevents new cache
|
|
240
|
+
lookups from finding the key. A runtime that already cached it can continue accepting the token for
|
|
241
|
+
up to `identity.tokens.cache.ttl` milliseconds (10 minutes by default).
|
|
242
|
+
|
|
243
|
+
Both listing and deletion require credentials of the owning Identity or the
|
|
244
|
+
`system:identity:keys` role. Key creation is internal to `identity.tokens`; there is no public
|
|
245
|
+
endpoint that returns a stored secret.
|
|
246
|
+
|
|
146
247
|
### Token encryption
|
|
147
248
|
|
|
148
|
-
Issued tokens are encrypted
|
|
149
|
-
|
|
150
|
-
|
|
249
|
+
Issued tokens are compact JWE tokens encrypted with direct symmetric encryption. Their protected
|
|
250
|
+
header is `{ alg: 'dir', enc: 'A256GCM', typ: 'JWT', kid: <key id> }`. Keys are configured in one
|
|
251
|
+
`keys` array. The first entry whose `format` is `jwe` or omitted is the active issuance key.
|
|
252
|
+
Keys are 256-bit secrets encoded with base64url and can be generated with `toa key`.
|
|
253
|
+
|
|
254
|
+
The optional `format` is `jwe` by default. Entries with `format: paseto` contain legacy PASETO
|
|
255
|
+
V3.local secrets and are used only to read old tokens. Legacy tokens are always marked for refresh;
|
|
256
|
+
only JWE tokens are issued.
|
|
257
|
+
The `format` property is transitional and can be removed together with the PASETO entries after the
|
|
258
|
+
legacy compatibility window ends.
|
|
151
259
|
|
|
152
260
|
```yaml
|
|
153
261
|
# context.toa.yaml
|
|
154
262
|
|
|
155
263
|
configuration:
|
|
156
264
|
identity.tokens:
|
|
157
|
-
|
|
265
|
+
keys:
|
|
266
|
+
- id: 2026q3
|
|
267
|
+
key: $IDENTITY_TOKENS_ENCRYPTION_KEY0
|
|
268
|
+
- id: legacy
|
|
269
|
+
key: $IDENTITY_TOKENS_KEY0
|
|
270
|
+
format: paseto
|
|
158
271
|
```
|
|
159
272
|
|
|
160
|
-
|
|
273
|
+
At least one JWE entry is required. PASETO entries are required only while previously issued legacy
|
|
274
|
+
tokens must remain readable.
|
|
161
275
|
|
|
162
276
|
> Valid secret key may be generated using the [`toa key` command](/runtime/cli/readme.md#key).
|
|
163
277
|
|
|
@@ -190,73 +304,63 @@ configuration:
|
|
|
190
304
|
|
|
191
305
|
All currently issued tokens of an Identity are revoked when:
|
|
192
306
|
|
|
193
|
-
1. Basic credentials associated with the Identity are
|
|
307
|
+
1. [Basic credentials](#basic-credentials) associated with the Identity are modified.
|
|
194
308
|
2. Identity is [banned](#banned-identities).
|
|
195
309
|
|
|
196
310
|
Token revocation takes effect once the `refresh` period of the currently issued tokens has expired.
|
|
197
311
|
|
|
198
312
|
### Secret rotation
|
|
199
313
|
|
|
200
|
-
Tokens are always encrypted using the
|
|
201
|
-
|
|
202
|
-
the `key0` and `key1` values in order.
|
|
203
|
-
|
|
204
|
-
`key0` is considered the "current key," and `key1` is considered the "previous key."
|
|
205
|
-
|
|
206
|
-
```yaml
|
|
207
|
-
# context.toa.yaml
|
|
314
|
+
Tokens are always encrypted using the first JWE entry of the `keys` array and decrypted by the
|
|
315
|
+
entry in the corresponding format branch whose `id` matches the token's `kid`.
|
|
208
316
|
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
key1: $TOKEN_ENCRYPTION_KEY_2023Q2
|
|
213
|
-
```
|
|
317
|
+
Rotation uses array order rather than object property order: index `0` is active for issuance and
|
|
318
|
+
the remaining entries are decrypt-only. Use the staged procedure below so every runtime knows the
|
|
319
|
+
new key before it becomes active.
|
|
214
320
|
|
|
215
|
-
|
|
216
|
-
|
|
321
|
+
Old keys must remain configured until every token issued with them has expired. In the default
|
|
322
|
+
configuration this means retaining them for at least `lifetime` (30 days) after making a new key
|
|
323
|
+
active. The shorter `refresh` interval only controls replacement during active client use and is
|
|
324
|
+
not a safe removal window for clients that remain idle.
|
|
217
325
|
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
other instances will
|
|
222
|
-
continue using the current key and will not be able to decrypt tokens encrypted with the new key.
|
|
223
|
-
|
|
224
|
-
To address this issue, the `key1` configuration value may be used as a "transient key."
|
|
225
|
-
|
|
226
|
-
The secret rotation is a 2-step process:
|
|
227
|
-
|
|
228
|
-
> The process **must not** be performed earlier than the `lifetime` period since the last rotation,
|
|
229
|
-
> as it may invalidate
|
|
230
|
-
> tokens before they expire. Therefore, it is guaranteed that there are no valid tokens issued with
|
|
231
|
-
> the current `key1`
|
|
232
|
-
> value.
|
|
233
|
-
|
|
234
|
-
1. Deploy the new secret key to all Exposition instances as `key1`. This enables all instances to
|
|
235
|
-
decrypt tokens
|
|
236
|
-
encrypted with the new key while still using the current key for encryption.
|
|
326
|
+
> Let's say you are adding a new secret key each quarter: `2024Q1`, `2024Q2` and so on.
|
|
327
|
+
> The old key `2024Q1` must be removed only after the maximum lifetime of tokens issued with it has
|
|
328
|
+
> elapsed.
|
|
237
329
|
|
|
238
330
|
```yaml
|
|
239
331
|
# context.toa.yaml
|
|
240
332
|
|
|
241
333
|
configuration:
|
|
242
334
|
identity.tokens:
|
|
243
|
-
|
|
244
|
-
|
|
335
|
+
keys:
|
|
336
|
+
- id: 2026q3
|
|
337
|
+
key: $TOKEN_ENCRYPTION_KEY_2026Q3
|
|
338
|
+
- id: 2026q4
|
|
339
|
+
key: $TOKEN_ENCRYPTION_KEY_2026Q4
|
|
245
340
|
```
|
|
246
341
|
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
342
|
+
1. First deploy both keys everywhere with the current key at index `0`, as shown above.
|
|
343
|
+
2. In an atomic rollout, move the new entry to index `0` and keep the current entry after it.
|
|
344
|
+
All instances can then decrypt tokens encrypted with both the new key and the current key.
|
|
250
345
|
|
|
251
346
|
```yaml
|
|
252
347
|
# context.toa.yaml
|
|
253
348
|
|
|
254
349
|
configuration:
|
|
255
350
|
identity.tokens:
|
|
256
|
-
|
|
257
|
-
|
|
351
|
+
keys:
|
|
352
|
+
- id: 2026q4
|
|
353
|
+
key: $TOKEN_ENCRYPTION_KEY_2026Q4
|
|
354
|
+
- id: 2026q3
|
|
355
|
+
key: $TOKEN_ENCRYPTION_KEY_2026Q3
|
|
258
356
|
```
|
|
259
357
|
|
|
358
|
+
3. Remove `2026q3` only after its last possible token has expired.
|
|
359
|
+
|
|
360
|
+
The PASETO-to-JWE runtime migration must also be atomic: legacy runtimes cannot decrypt newly
|
|
361
|
+
issued JWE tokens. Keep every `format: paseto` entry until its last token has expired;
|
|
362
|
+
`toa key --format paseto` exists only for maintaining those legacy secrets.
|
|
363
|
+
|
|
260
364
|
### Token resources
|
|
261
365
|
|
|
262
366
|
`/identity/tokens/`
|
|
@@ -297,7 +401,7 @@ Role Scopes (see [Role Hierarchies](access.md#hierarchies)).
|
|
|
297
401
|
|
|
298
402
|
The `identity.bans` component manages banned identities.
|
|
299
403
|
A banned identity will fail to authenticate with any associated credentials
|
|
300
|
-
(except [tokens](#
|
|
404
|
+
(except [tokens](#local-tokens) within the `refresh` period).
|
|
301
405
|
|
|
302
406
|
```http
|
|
303
407
|
PUT /identity/bans/:id/
|
|
@@ -329,3 +433,17 @@ roles:
|
|
|
329
433
|
- developer
|
|
330
434
|
- system:identity:roles
|
|
331
435
|
```
|
|
436
|
+
|
|
437
|
+
When no credentials are provided, transient Identity is created.
|
|
438
|
+
|
|
439
|
+
```http
|
|
440
|
+
GET /identity/
|
|
441
|
+
accept: application/yaml
|
|
442
|
+
```
|
|
443
|
+
|
|
444
|
+
```
|
|
445
|
+
201 Created
|
|
446
|
+
|
|
447
|
+
id: 332017649c814649b25ee466c1fe4534
|
|
448
|
+
roles: []
|
|
449
|
+
```
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
# Persistent credentials
|
|
2
|
+
|
|
3
|
+
Persistent credentials associate an [Identity](identity.md) with a reusable authentication method.
|
|
4
|
+
Exposition stores Basic, OpenID Connect federation, and WebAuthn passkey credentials. Local tokens
|
|
5
|
+
and one-time passwords are not persistent credentials: tokens are stateless and OTP records expire.
|
|
6
|
+
|
|
7
|
+
See [Features](../features/credentials.feature).
|
|
8
|
+
|
|
9
|
+
## Listing credentials
|
|
10
|
+
|
|
11
|
+
`GET /identity/credentials/:identity/` returns all persistent credentials associated with the
|
|
12
|
+
Identity in the current authority. Access requires credentials of that Identity.
|
|
13
|
+
|
|
14
|
+
```http
|
|
15
|
+
GET /identity/credentials/fc8e66ddd51d45eea89602c9dd38a542/ HTTP/1.1
|
|
16
|
+
authorization: Token ...
|
|
17
|
+
accept: application/yaml
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
```yaml
|
|
21
|
+
basic:
|
|
22
|
+
username: user@example.com
|
|
23
|
+
federation:
|
|
24
|
+
- id: 09200d0bcc2448c5863e3f50ae18af84
|
|
25
|
+
iss: https://accounts.google.com
|
|
26
|
+
_created: 1754899200000
|
|
27
|
+
passkeys:
|
|
28
|
+
- id: 54ed430804324e81b39756ea4708b546
|
|
29
|
+
aid: adce0002-35bc-c60a-648b-0b25f1f05503
|
|
30
|
+
synced: true
|
|
31
|
+
label: Personal iPhone
|
|
32
|
+
_created: 1754899200000
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
`basic` is `null` when Basic credentials do not exist. `federation` and `passkeys` are always
|
|
36
|
+
arrays. Secret and authentication data, including password hashes, federation subjects, public
|
|
37
|
+
keys, signature counters, and transports, are not returned.
|
|
38
|
+
|
|
39
|
+
The federation issuer identifies the provider. For example, Google uses
|
|
40
|
+
`https://accounts.google.com` and Apple uses `https://appleid.apple.com`. Applications should map
|
|
41
|
+
trusted issuers to their own provider names and presentation.
|
|
42
|
+
|
|
43
|
+
The passkey `aid` is its
|
|
44
|
+
[AAGUID](https://www.w3.org/TR/webauthn-2/#aaguid), which can be resolved against an authenticator
|
|
45
|
+
metadata catalog. `synced` indicates whether the credential was backed up and is therefore likely
|
|
46
|
+
available on more than one device.
|
|
47
|
+
|
|
48
|
+
## Basic credentials
|
|
49
|
+
|
|
50
|
+
- `POST /identity/basic/:identity/` adds Basic credentials to an Identity.
|
|
51
|
+
- `PATCH /identity/basic/:identity/` changes its username or password.
|
|
52
|
+
- `DELETE /identity/basic/:identity/` removes its Basic credentials.
|
|
53
|
+
|
|
54
|
+
An Identity can have at most one Basic credential in an authority. See
|
|
55
|
+
[Basic credentials configuration](components.md#basic-credentials) for password hashing,
|
|
56
|
+
constraints, and principal configuration.
|
|
57
|
+
|
|
58
|
+
## Federated credentials
|
|
59
|
+
|
|
60
|
+
- `POST /identity/federation/:identity/` associates credentials from a trusted issuer and returns
|
|
61
|
+
the associated credential as it is listed.
|
|
62
|
+
- `GET /identity/federation/:identity/` lists federated credentials.
|
|
63
|
+
- `DELETE /identity/federation/:identity/:credential/` removes one federated credential.
|
|
64
|
+
|
|
65
|
+
If the credentials are already associated with the Identity, the existing credential is returned.
|
|
66
|
+
|
|
67
|
+
An Identity can have credentials from multiple issuers and can have multiple subjects from the
|
|
68
|
+
same issuer. The `:credential` segment is the `id` returned by any of these resources. Federation
|
|
69
|
+
resources are provider-independent; issuer-specific authorization flows remain the responsibility
|
|
70
|
+
of the application.
|
|
71
|
+
|
|
72
|
+
## Passkeys
|
|
73
|
+
|
|
74
|
+
Passkey registration consists of a challenge followed by credential creation:
|
|
75
|
+
|
|
76
|
+
- `POST /identity/passkeys/challenges/:identity/` creates a registration challenge.
|
|
77
|
+
- `POST /identity/passkeys/:identity/` verifies the response and stores the passkey.
|
|
78
|
+
- `GET /identity/passkeys/:identity/` lists passkeys.
|
|
79
|
+
- `DELETE /identity/passkeys/:identity/:credential/` removes one passkey.
|
|
80
|
+
|
|
81
|
+
See [Web Authentication](passkeys.md) for standards and feature scenarios.
|
|
82
|
+
|
|
83
|
+
## Removing the last credential
|
|
84
|
+
|
|
85
|
+
Credential components intentionally do not coordinate with one another. Consequently, credentials
|
|
86
|
+
can be removed without checking whether another persistent credential exists.
|
|
87
|
+
Applications that require a recoverable login must prevent removal of the last usable credential
|
|
88
|
+
in their client workflow.
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# Development tools
|
|
2
|
+
|
|
3
|
+
## `dev:stub`
|
|
4
|
+
|
|
5
|
+
Returns a successful response with the given body.
|
|
6
|
+
|
|
7
|
+
```yaml
|
|
8
|
+
/foo:
|
|
9
|
+
dev:sub: Hello!
|
|
10
|
+
/bar:
|
|
11
|
+
dev:sub:
|
|
12
|
+
hello: world
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
## `dev:sleep`
|
|
16
|
+
|
|
17
|
+
Enables random delay before processing the request, up to given maximum time in milliseconds.
|
|
18
|
+
|
|
19
|
+
Desired delay range can be set in the `sleep` request header as a JSON array of two numbers, the minimum
|
|
20
|
+
and maximum delay in milliseconds.
|
|
21
|
+
|
|
22
|
+
```yaml
|
|
23
|
+
/foo:
|
|
24
|
+
dev:sleep: 1000
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
```http
|
|
28
|
+
GET /foo/ HTTP/1.1
|
|
29
|
+
sleep: [500, 1000]
|
|
30
|
+
```
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# Request flow
|
|
2
|
+
|
|
3
|
+
## `flow:fetch`
|
|
4
|
+
|
|
5
|
+
Fetches the content from the resource returned by the specified endpoint.
|
|
6
|
+
|
|
7
|
+
The value of the directive is a `string` specifying endpoint to be called for the redirection
|
|
8
|
+
request.
|
|
9
|
+
|
|
10
|
+
Request `authority`, `path` and `parameters` are passed as input to the redirection endpoint,
|
|
11
|
+
and it must return a URL `string`, an `Error` or an object with the following properties:
|
|
12
|
+
|
|
13
|
+
```yaml
|
|
14
|
+
url: string
|
|
15
|
+
options?:
|
|
16
|
+
method?: string
|
|
17
|
+
headers?: Record<string, string>
|
|
18
|
+
body?: string
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
If it returns a URL or Request, then the response to the specified request is returned as the
|
|
22
|
+
response to the original request, along with the `content-type`, `content-length`, and `etag`
|
|
23
|
+
headers.
|
|
24
|
+
|
|
25
|
+
## `flow:compose`
|
|
26
|
+
|
|
27
|
+
Compose an object from a response stream in object mode.
|
|
28
|
+
|
|
29
|
+
The value of the directive is an object whose values are JavaScript expressions
|
|
30
|
+
accessing the response stream objects composed into an array named `$`.
|
|
31
|
+
|
|
32
|
+
```yaml
|
|
33
|
+
flow:compose:
|
|
34
|
+
one: $[0].status
|
|
35
|
+
two: $[1].data.foo
|
|
36
|
+
three: $[2].amount
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
```yaml
|
|
40
|
+
flow:compose:
|
|
41
|
+
sum: $[0].value + $[1].value
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
Be careful.
|
|
@@ -6,6 +6,9 @@ identifier** of an individual, organization, application or device.
|
|
|
6
6
|
To prove its Identity, the request originator must provide a valid _credentials_ that are associated
|
|
7
7
|
with that Identity.
|
|
8
8
|
|
|
9
|
+
Persistent authentication methods and their management resources are described in
|
|
10
|
+
[Persistent credentials](credentials.md).
|
|
11
|
+
|
|
9
12
|
Identity is intrinsically linked to credentials, as an Identity is established only when the first
|
|
10
13
|
set of credentials for that Identity is created.
|
|
11
14
|
In other words, the creation of credentials marks the inception of an Identity.
|
|
@@ -38,19 +41,22 @@ See [`identity.basic` component](components.md#basic-credentials).
|
|
|
38
41
|
|
|
39
42
|
### Token scheme
|
|
40
43
|
|
|
41
|
-
Tokens issued by the Authentication system.
|
|
44
|
+
Tokens issued by the Authentication system. New tokens are compact
|
|
45
|
+
[JSON Web Encryption (JWE)](https://www.rfc-editor.org/rfc/rfc7516) values using direct symmetric
|
|
46
|
+
encryption (`alg: dir`) and AES-256-GCM (`enc: A256GCM`). Legacy PASETO V3.local tokens remain
|
|
47
|
+
accepted during migration and are always replaced on successful authentication.
|
|
42
48
|
|
|
43
49
|
```http
|
|
44
|
-
|
|
50
|
+
Authorization: Token eyJhbGciOiJkaXIiLCJlbmMiOiJBMjU2R0NNIiwidHlwIjoiSldUIiwia2lkIjo...
|
|
45
51
|
```
|
|
46
52
|
|
|
47
53
|
The `Token` is the **primary** authentication scheme.
|
|
48
54
|
If request originators use an alternative authentication scheme, they will receive a response
|
|
49
|
-
containing `Token`credentials and will be required to switch to the `Token` scheme for any
|
|
55
|
+
containing `Token` credentials and will be required to switch to the `Token` scheme for any
|
|
50
56
|
subsequent requests.
|
|
51
57
|
Continued use of other authentication schemes will result in temporary blocking of requests.
|
|
52
58
|
|
|
53
|
-
See [`identity.tokens` component](components.md#
|
|
59
|
+
See [`identity.tokens` component](components.md#local-tokens).
|
|
54
60
|
|
|
55
61
|
### Bearer scheme
|
|
56
62
|
|
|
@@ -63,8 +69,8 @@ to [OpenID Connect Core 1.0](https://openid.net/specs/openid-connect-core-1_0.ht
|
|
|
63
69
|
Authorization: Bearer eyJhbGciOiJIUzI1...
|
|
64
70
|
```
|
|
65
71
|
|
|
66
|
-
Trusted providers are specified using the `identity.federation`
|
|
67
|
-
|
|
72
|
+
Trusted providers are specified using the `identity.federation` configuration. Provider metadata
|
|
73
|
+
and signing keys are discovered using OpenID Connect discovery and JWKS.
|
|
68
74
|
|
|
69
75
|
```yaml
|
|
70
76
|
# context.toa.yaml
|
|
@@ -73,16 +79,93 @@ configuration:
|
|
|
73
79
|
identity.federation:
|
|
74
80
|
trust:
|
|
75
81
|
- iss: https://accounts.google.com
|
|
76
|
-
aud:
|
|
77
|
-
- <GOOGLE_CLIENT_ID>
|
|
82
|
+
aud: <GOOGLE_CLIENT_ID>
|
|
78
83
|
|
|
79
84
|
- iss: https://appleid.apple.com
|
|
85
|
+
aud: <APPLE_CLIENT_ID>
|
|
86
|
+
secret: <APPLE_CLIENT_SECRET> # enables Authorization Code Flow
|
|
87
|
+
principal:
|
|
88
|
+
iss: https://accounts.google.com
|
|
89
|
+
sub: 4218230498234
|
|
90
|
+
assert: true
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
`principal` specifies the values of the `iss` and `sub` claims of an Identity that will be granted
|
|
94
|
+
with a `system` role.
|
|
95
|
+
|
|
96
|
+
`assert` indicates whether the Identity should be implicitly created when valid credentials for a
|
|
97
|
+
non-existent Identity are provided (default `true`).
|
|
98
|
+
|
|
99
|
+
### Authorization Code Flow
|
|
100
|
+
|
|
101
|
+
[OAuth 2.0 RFC 6749, section 4.1](https://datatracker.ietf.org/doc/html/rfc6749#section-4.1)
|
|
102
|
+
|
|
103
|
+
```
|
|
104
|
+
GET /identity/
|
|
105
|
+
authorization: Code <credentials>
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
`<credentials>` is a base64-encoded JSON containing the following properties:
|
|
109
|
+
|
|
110
|
+
```yaml
|
|
111
|
+
code: authorization code
|
|
112
|
+
iss: code issuer
|
|
113
|
+
for: redirect URI
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
Trust configuration for the issuer requires `aud` and either `secret` or `signature`
|
|
117
|
+
values to enable the Authorization Code Flow.
|
|
118
|
+
|
|
119
|
+
> If `aud` is an array, the first value is used.
|
|
120
|
+
|
|
121
|
+
```yaml
|
|
122
|
+
# context.toa.yaml
|
|
123
|
+
configuration:
|
|
124
|
+
identity.federation:
|
|
125
|
+
trust:
|
|
126
|
+
- iss: https://accounts.google.com
|
|
127
|
+
aud: 1045282659797-n705sf85j4b2rodtpdn43od43tvseiet.apps.googleusercontent.com
|
|
128
|
+
secret: $GOOGLE_CLIENT_SECRET
|
|
129
|
+
- iss: https://appleid.apple.com
|
|
130
|
+
aud: io.toa.services.id
|
|
131
|
+
signature:
|
|
132
|
+
iss: team-id
|
|
133
|
+
kid: key-id
|
|
134
|
+
key: $APPLE_PRIVATE_KEY # PKCS8 PEM, as in the .p8 file
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
### OTP scheme
|
|
138
|
+
|
|
139
|
+
One-time passwords.
|
|
140
|
+
|
|
141
|
+
Passwords can be issued by calling `identity.otp.issue` operation, with the following input:
|
|
80
142
|
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
143
|
+
```yaml
|
|
144
|
+
authority: string
|
|
145
|
+
username: string
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
The reply will contain the `code` property of type `string` formed as a random 6-digit number,
|
|
149
|
+
valid for 60 seconds by default.
|
|
150
|
+
|
|
151
|
+
```yaml
|
|
152
|
+
code: 123456
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
OTP can be used with `OTP` authentication formatted as `base64(username:password)`.
|
|
156
|
+
|
|
157
|
+
```
|
|
158
|
+
GET /identity/ HTTP/1.1
|
|
159
|
+
authentication: OTP dXNlcm5hbWU6MTIzNDU2
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
OTP expiration time can be configured using the `identity.otp` configuration.
|
|
163
|
+
|
|
164
|
+
```yaml
|
|
165
|
+
# context.toa.yaml
|
|
166
|
+
configuration:
|
|
167
|
+
identity.otp:
|
|
168
|
+
lifetime: 60 # seconds
|
|
86
169
|
```
|
|
87
170
|
|
|
88
171
|
## Identity inception
|
|
@@ -110,7 +193,7 @@ exposition:
|
|
|
110
193
|
The value of the `auth:incept` directive refers to the name of the response property that will be
|
|
111
194
|
returned by the `POST` operation, containing the created entity identifier.
|
|
112
195
|
|
|
113
|
-
A request with Identity inception
|
|
196
|
+
A request with Identity inception may contain (non-existent) credentials that will be associated
|
|
114
197
|
with the created Identity.
|
|
115
198
|
|
|
116
199
|
```http
|
|
@@ -132,6 +215,34 @@ id: 2428c31ecb6e4a51a24ef52f0c4181b9
|
|
|
132
215
|
As a result of processing the above request, the provided Basic credentials associated with the
|
|
133
216
|
Identity `2428c31ecb6e4a51a24ef52f0c4181b9` are created.
|
|
134
217
|
|
|
218
|
+
> `auth:incept` directive may have a `null` value, which means that the Identity will be created
|
|
219
|
+
> without any associated entity.
|
|
220
|
+
|
|
221
|
+
Inception is supported for `Basic` and `Bearer` authentication schemes.
|
|
222
|
+
|
|
223
|
+
## Identity assertion
|
|
224
|
+
|
|
225
|
+
`auth:assert` directive is used to ensure that given credentials are associated with an existing
|
|
226
|
+
Identity or to create a new Identity if it does not exist.
|
|
227
|
+
The directive itself does not allow or deny access to the requested resource.
|
|
228
|
+
|
|
229
|
+
> Used authentication scheme must support inception.
|
|
230
|
+
|
|
231
|
+
```yaml
|
|
232
|
+
/accounts/echo:
|
|
233
|
+
auth:assert: true
|
|
234
|
+
auth:anyone: true
|
|
235
|
+
endpoint: echo
|
|
236
|
+
```
|
|
237
|
+
|
|
238
|
+
```http
|
|
239
|
+
GET /accounts/echo/
|
|
240
|
+
authorization: Basic new-or-existent-credentials
|
|
241
|
+
```
|
|
242
|
+
|
|
243
|
+
If new Identity is created and endpoint returns a successful response, the status code `201 Created`
|
|
244
|
+
is returned.
|
|
245
|
+
|
|
135
246
|
## FAQ
|
|
136
247
|
|
|
137
248
|
<dl>
|