@toa.io/extensions.exposition 1.0.0-alpha.13 → 1.0.0-alpha.130

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.
Files changed (678) hide show
  1. package/components/context.toa.yaml +2 -2
  2. package/components/identity.bans/manifest.toa.yaml +14 -6
  3. package/components/identity.bans/operations/transit.d.ts +14 -0
  4. package/components/identity.bans/operations/transit.js +11 -0
  5. package/components/identity.bans/operations/transit.js.map +1 -0
  6. package/components/identity.bans/operations/tsconfig.tsbuildinfo +1 -0
  7. package/components/identity.bans/source/transit.ts +21 -0
  8. package/components/identity.bans/tsconfig.json +9 -0
  9. package/components/identity.basic/manifest.toa.yaml +28 -10
  10. package/components/identity.basic/operations/authenticate.d.ts +5 -1
  11. package/components/identity.basic/operations/authenticate.js +7 -4
  12. package/components/identity.basic/operations/authenticate.js.map +1 -1
  13. package/components/identity.basic/operations/incept.d.ts +12 -0
  14. package/components/identity.basic/operations/incept.js +26 -0
  15. package/components/identity.basic/operations/incept.js.map +1 -0
  16. package/components/identity.basic/operations/transit.d.ts +4 -4
  17. package/components/identity.basic/operations/transit.js +8 -6
  18. package/components/identity.basic/operations/transit.js.map +1 -1
  19. package/components/identity.basic/operations/tsconfig.tsbuildinfo +1 -1
  20. package/components/identity.basic/operations/types.d.ts +8 -4
  21. package/components/identity.basic/source/authenticate.ts +18 -7
  22. package/components/identity.basic/source/incept.ts +38 -0
  23. package/components/identity.basic/source/transit.ts +11 -9
  24. package/components/identity.basic/source/types.ts +8 -4
  25. package/components/identity.federation/manifest.toa.yaml +61 -19
  26. package/components/identity.federation/operations/authenticate.d.ts +13 -2
  27. package/components/identity.federation/operations/authenticate.js +10 -11
  28. package/components/identity.federation/operations/authenticate.js.map +1 -1
  29. package/components/identity.federation/operations/decode.d.ts +2 -0
  30. package/{transpiled/directives/octets/Permute.js → components/identity.federation/operations/decode.js} +7 -32
  31. package/components/identity.federation/operations/decode.js.map +1 -0
  32. package/components/identity.federation/operations/incept.d.ts +10 -0
  33. package/components/identity.federation/operations/incept.js +14 -0
  34. package/components/identity.federation/operations/incept.js.map +1 -0
  35. package/components/identity.federation/operations/lib/assertions-as-values.js +4 -2
  36. package/components/identity.federation/operations/lib/assertions-as-values.js.map +1 -1
  37. package/components/identity.federation/operations/lib/get.d.ts +1 -0
  38. package/components/identity.federation/operations/lib/get.js +64 -0
  39. package/components/identity.federation/operations/lib/get.js.map +1 -0
  40. package/components/identity.federation/operations/lib/jwt.d.ts +4 -5
  41. package/components/identity.federation/operations/lib/jwt.js +20 -16
  42. package/components/identity.federation/operations/lib/jwt.js.map +1 -1
  43. package/components/identity.federation/operations/tsconfig.tsbuildinfo +1 -1
  44. package/components/identity.federation/operations/types/configuration.d.ts +15 -0
  45. package/components/identity.federation/operations/types/configuration.js +3 -0
  46. package/components/identity.federation/operations/types/configuration.js.map +1 -0
  47. package/components/identity.federation/operations/{types.d.ts → types/context.d.ts} +11 -12
  48. package/{transpiled/directives/vary/embeddings/Embedding.js → components/identity.federation/operations/types/context.js} +1 -1
  49. package/components/identity.federation/operations/types/context.js.map +1 -0
  50. package/components/identity.federation/operations/types/entity.d.ts +6 -0
  51. package/components/identity.federation/operations/types/entity.js +3 -0
  52. package/components/identity.federation/operations/types/entity.js.map +1 -0
  53. package/components/identity.federation/operations/types/index.d.ts +3 -0
  54. package/components/identity.federation/operations/types/index.js +20 -0
  55. package/components/identity.federation/operations/types/index.js.map +1 -0
  56. package/components/identity.federation/source/authenticate.ts +24 -17
  57. package/components/identity.federation/source/decode.ts +9 -0
  58. package/components/identity.federation/source/incept.ts +26 -0
  59. package/components/identity.federation/source/lib/assertions-as-values.ts +5 -2
  60. package/components/identity.federation/source/lib/get.ts +82 -0
  61. package/components/identity.federation/source/lib/jwt.test.ts +127 -4
  62. package/components/identity.federation/source/lib/jwt.ts +26 -19
  63. package/components/identity.federation/source/types/configuration.ts +16 -0
  64. package/components/identity.federation/source/{types.ts → types/context.ts} +12 -12
  65. package/components/identity.federation/source/types/entity.ts +6 -0
  66. package/components/identity.federation/source/types/index.ts +3 -0
  67. package/components/identity.federation/tsconfig.json +5 -4
  68. package/components/identity.keys/manifest.toa.yaml +57 -0
  69. package/components/identity.keys/operations/create.d.ts +22 -0
  70. package/components/identity.keys/operations/create.js +16 -0
  71. package/components/identity.keys/operations/create.js.map +1 -0
  72. package/components/identity.keys/operations/tsconfig.tsbuildinfo +1 -0
  73. package/components/identity.keys/source/create.ts +35 -0
  74. package/components/identity.keys/tsconfig.json +9 -0
  75. package/components/identity.passkeys/manifest.toa.yaml +263 -0
  76. package/components/identity.passkeys/operations/authenticate.d.ts +16 -0
  77. package/components/identity.passkeys/operations/authenticate.js +34 -0
  78. package/components/identity.passkeys/operations/authenticate.js.map +1 -0
  79. package/components/identity.passkeys/operations/challenge.d.ts +31 -0
  80. package/components/identity.passkeys/operations/challenge.js +61 -0
  81. package/components/identity.passkeys/operations/challenge.js.map +1 -0
  82. package/components/identity.passkeys/operations/create.d.ts +17 -0
  83. package/components/identity.passkeys/operations/create.js +52 -0
  84. package/components/identity.passkeys/operations/create.js.map +1 -0
  85. package/components/identity.passkeys/operations/delete.d.ts +8 -0
  86. package/components/identity.passkeys/operations/delete.js +12 -0
  87. package/components/identity.passkeys/operations/delete.js.map +1 -0
  88. package/components/identity.passkeys/operations/lib/const.d.ts +1 -0
  89. package/components/identity.passkeys/operations/lib/const.js +5 -0
  90. package/components/identity.passkeys/operations/lib/const.js.map +1 -0
  91. package/components/identity.passkeys/operations/list.d.ts +7 -0
  92. package/components/identity.passkeys/operations/list.js +15 -0
  93. package/components/identity.passkeys/operations/list.js.map +1 -0
  94. package/components/identity.passkeys/operations/tsconfig.tsbuildinfo +1 -0
  95. package/components/identity.passkeys/operations/types/Configuration.d.ts +6 -0
  96. package/components/identity.passkeys/operations/types/Configuration.js +3 -0
  97. package/components/identity.passkeys/operations/types/Configuration.js.map +1 -0
  98. package/components/identity.passkeys/operations/types/Context.d.ts +16 -0
  99. package/components/identity.passkeys/operations/types/Context.js +3 -0
  100. package/components/identity.passkeys/operations/types/Context.js.map +1 -0
  101. package/components/identity.passkeys/operations/types/Passkey.d.ts +13 -0
  102. package/components/identity.passkeys/operations/types/Passkey.js +3 -0
  103. package/components/identity.passkeys/operations/types/Passkey.js.map +1 -0
  104. package/components/identity.passkeys/operations/types/index.d.ts +2 -0
  105. package/components/identity.passkeys/operations/types/index.js +3 -0
  106. package/components/identity.passkeys/operations/types/index.js.map +1 -0
  107. package/components/identity.passkeys/operations/use.d.ts +14 -0
  108. package/components/identity.passkeys/operations/use.js +52 -0
  109. package/components/identity.passkeys/operations/use.js.map +1 -0
  110. package/components/identity.passkeys/source/authenticate.ts +48 -0
  111. package/components/identity.passkeys/source/challenge.ts +97 -0
  112. package/components/identity.passkeys/source/create.ts +71 -0
  113. package/components/identity.passkeys/source/delete.ts +15 -0
  114. package/components/identity.passkeys/source/lib/const.ts +1 -0
  115. package/components/identity.passkeys/source/list.ts +17 -0
  116. package/components/identity.passkeys/source/types/Configuration.ts +6 -0
  117. package/components/identity.passkeys/source/types/Context.ts +17 -0
  118. package/components/identity.passkeys/source/types/Passkey.ts +14 -0
  119. package/components/identity.passkeys/source/types/index.ts +2 -0
  120. package/components/identity.passkeys/source/use.ts +70 -0
  121. package/components/identity.passkeys/tsconfig.json +9 -0
  122. package/components/identity.roles/manifest.toa.yaml +7 -5
  123. package/components/identity.roles/operations/grant.d.ts +1 -1
  124. package/components/identity.roles/operations/grant.js +8 -7
  125. package/components/identity.roles/operations/grant.js.map +1 -1
  126. package/components/identity.roles/operations/lib/Entity.d.ts +1 -1
  127. package/components/identity.roles/operations/tsconfig.tsbuildinfo +1 -1
  128. package/components/identity.roles/source/grant.ts +9 -8
  129. package/components/identity.roles/source/lib/Entity.ts +1 -1
  130. package/components/identity.tokens/manifest.toa.yaml +98 -13
  131. package/components/identity.tokens/operations/authenticate.d.ts +3 -3
  132. package/components/identity.tokens/operations/authenticate.js +20 -13
  133. package/components/identity.tokens/operations/authenticate.js.map +1 -1
  134. package/components/identity.tokens/operations/decrypt.d.ts +12 -3
  135. package/components/identity.tokens/operations/decrypt.js +62 -17
  136. package/components/identity.tokens/operations/decrypt.js.map +1 -1
  137. package/components/identity.tokens/operations/encrypt.d.ts +3 -3
  138. package/components/identity.tokens/operations/encrypt.js +26 -6
  139. package/components/identity.tokens/operations/encrypt.js.map +1 -1
  140. package/components/identity.tokens/operations/issue.d.ts +24 -0
  141. package/components/identity.tokens/operations/issue.js +59 -0
  142. package/components/identity.tokens/operations/issue.js.map +1 -0
  143. package/components/identity.tokens/operations/lib/index.d.ts +2 -0
  144. package/components/identity.tokens/operations/lib/index.js +19 -0
  145. package/components/identity.tokens/operations/lib/index.js.map +1 -0
  146. package/components/identity.tokens/operations/lib/pad.d.ts +1 -0
  147. package/components/identity.tokens/operations/lib/pad.js +5 -0
  148. package/components/identity.tokens/operations/lib/pad.js.map +1 -0
  149. package/components/identity.tokens/operations/lib/types.d.ts +74 -0
  150. package/components/identity.tokens/operations/lib/types.js.map +1 -0
  151. package/components/identity.tokens/operations/revoke.d.ts +2 -2
  152. package/components/identity.tokens/operations/revoke.js.map +1 -1
  153. package/components/identity.tokens/operations/tsconfig.tsbuildinfo +1 -1
  154. package/components/identity.tokens/receivers/identity.bans.created.js +3 -0
  155. package/components/identity.tokens/source/authenticate.test.ts +22 -9
  156. package/components/identity.tokens/source/authenticate.ts +23 -15
  157. package/components/identity.tokens/source/decrypt.test.ts +33 -18
  158. package/components/identity.tokens/source/decrypt.ts +91 -20
  159. package/components/identity.tokens/source/encrypt.test.ts +47 -13
  160. package/components/identity.tokens/source/encrypt.ts +37 -9
  161. package/components/identity.tokens/source/issue.ts +82 -0
  162. package/components/identity.tokens/source/lib/index.ts +2 -0
  163. package/components/identity.tokens/source/lib/pad.ts +1 -0
  164. package/components/identity.tokens/source/lib/paseto.test.ts +16 -0
  165. package/components/identity.tokens/source/lib/types.ts +85 -0
  166. package/components/identity.tokens/source/revoke.ts +2 -2
  167. package/components/octets.storage/manifest.toa.yaml +11 -11
  168. package/components/octets.storage/operations/get.js +3 -3
  169. package/components/octets.storage/operations/head.js +7 -0
  170. package/components/octets.storage/operations/put.js +135 -0
  171. package/documentation/access.md +91 -29
  172. package/documentation/authorities.md +48 -0
  173. package/documentation/cache.md +8 -1
  174. package/documentation/components.md +125 -54
  175. package/documentation/dev.md +30 -0
  176. package/documentation/flow.md +44 -0
  177. package/documentation/identity.md +30 -23
  178. package/documentation/introspection.md +82 -0
  179. package/documentation/map.md +76 -0
  180. package/documentation/octets.md +122 -69
  181. package/documentation/passkeys.md +4 -0
  182. package/documentation/protocol.md +11 -4
  183. package/documentation/query.md +29 -4
  184. package/documentation/require.md +15 -0
  185. package/documentation/tree.md +13 -0
  186. package/features/access.feature +129 -48
  187. package/features/annotation.feature +1 -0
  188. package/features/auth.claims.feature +171 -0
  189. package/features/auth.incept.feature +120 -0
  190. package/features/auth.input.feature +59 -0
  191. package/features/auth.issue.feature +32 -0
  192. package/features/authorities.basic.feature +141 -0
  193. package/features/authorities.feature +32 -0
  194. package/features/authorities.federation.feature +100 -0
  195. package/features/authorities.tokens.feature +117 -0
  196. package/features/body.feature +2 -0
  197. package/features/cache.feature +125 -5
  198. package/features/cors.feature +8 -2
  199. package/features/debug.feature +34 -0
  200. package/features/dev.feature +56 -0
  201. package/features/directives.feature +3 -0
  202. package/features/dynamic.feature +48 -0
  203. package/features/errors.feature +32 -7
  204. package/features/etag.feature +109 -1
  205. package/features/flow.feature +148 -0
  206. package/features/identity.bans.feature +137 -0
  207. package/features/identity.basic.feature +85 -28
  208. package/features/identity.feature +18 -6
  209. package/features/identity.federation.feature +89 -18
  210. package/features/identity.roles.feature +112 -19
  211. package/features/identity.tokens.feature +13 -44
  212. package/features/identtiy.tokens.custom.feature +247 -0
  213. package/features/interruptions.feature +19 -0
  214. package/features/introspection.feature +153 -0
  215. package/features/io.feature +38 -1
  216. package/features/map.feature +305 -0
  217. package/features/methods.feature +47 -0
  218. package/features/octets.cloudinary.feature +71 -0
  219. package/features/octets.download.feature +189 -0
  220. package/features/octets.entries.feature +13 -55
  221. package/features/octets.feature +90 -114
  222. package/features/octets.head.feature +40 -0
  223. package/features/octets.location.feature +83 -0
  224. package/features/octets.meta.feature +65 -15
  225. package/features/octets.workflows.feature +339 -66
  226. package/features/passkeys.feature +27 -0
  227. package/features/probes.feature +14 -0
  228. package/features/{queries.feature → query.feature} +77 -2
  229. package/features/realtime.feature +34 -0
  230. package/features/require.feature +67 -0
  231. package/features/response.feature +34 -2
  232. package/features/routes.feature +93 -2
  233. package/features/server.feature +21 -0
  234. package/features/steps/.env.example +3 -0
  235. package/features/steps/Common.ts +4 -0
  236. package/features/steps/Database.ts +16 -10
  237. package/features/steps/Gateway.ts +26 -7
  238. package/features/steps/HTTP.ts +25 -2
  239. package/features/steps/IdP.ts +63 -25
  240. package/features/steps/Identity.ts +51 -0
  241. package/features/steps/Parameters.ts +44 -1
  242. package/features/steps/Realtime.ts +151 -0
  243. package/features/steps/components/echo/manifest.toa.yaml +17 -1
  244. package/features/steps/components/echo/operations/echo.js +7 -0
  245. package/features/steps/components/echo/operations/identity.js +7 -0
  246. package/features/steps/components/echo/operations/parameters.js +7 -0
  247. package/features/steps/components/echo.beacon/manifest.toa.yaml +2 -0
  248. package/features/steps/components/echo.beacon/operations/hello.js +5 -0
  249. package/features/steps/components/greeter/manifest.toa.yaml +0 -1
  250. package/features/steps/components/octets.tester/manifest.toa.yaml +25 -3
  251. package/features/steps/components/octets.tester/operations/authority.js +7 -0
  252. package/features/steps/components/octets.tester/operations/bar.js +0 -1
  253. package/features/steps/components/octets.tester/operations/baz.js +0 -2
  254. package/features/steps/components/octets.tester/operations/echo.js +1 -1
  255. package/features/steps/components/octets.tester/operations/foo.js +1 -2
  256. package/features/steps/components/octets.tester/operations/id.js +7 -0
  257. package/features/steps/components/octets.tester/operations/identity.js +7 -0
  258. package/features/steps/components/octets.tester/operations/redirect.js +12 -0
  259. package/features/steps/components/octets.tester/operations/yex.js +16 -0
  260. package/features/steps/components/octets.tester/operations/yield.js +13 -0
  261. package/features/steps/components/pots/manifest.toa.yaml +12 -4
  262. package/features/steps/components/sequences/manifest.toa.yaml +0 -1
  263. package/features/steps/components/users/manifest.toa.yaml +4 -3
  264. package/features/steps/components/users/operations/create.js +15 -0
  265. package/features/steps/components/users.properties/manifest.toa.yaml +1 -2
  266. package/features/streams.feature +5 -0
  267. package/features/timestamps.feature +41 -0
  268. package/features/timing.feature +4 -1
  269. package/package.json +27 -13
  270. package/readme.md +19 -14
  271. package/schemas/annotation.cos.yaml +1 -1
  272. package/schemas/method.cos.yaml +2 -1
  273. package/schemas/node.cos.yaml +2 -0
  274. package/schemas/octets/put.cos.yaml +28 -0
  275. package/schemas/query.cos.yaml +4 -10
  276. package/source/Annotation.ts +3 -3
  277. package/source/Branch.ts +1 -0
  278. package/source/Composition.ts +0 -6
  279. package/source/Context.ts +1 -0
  280. package/source/Directive.test.ts +1 -1
  281. package/source/Directive.ts +16 -8
  282. package/source/Endpoint.ts +70 -17
  283. package/source/Factory.ts +22 -13
  284. package/source/Gateway.ts +73 -19
  285. package/source/HTTP/Context.ts +29 -7
  286. package/source/HTTP/Server.ts +113 -50
  287. package/source/HTTP/exceptions.ts +13 -1
  288. package/source/HTTP/formats/index.ts +3 -3
  289. package/source/HTTP/messages.test.ts +46 -2
  290. package/source/HTTP/messages.ts +41 -9
  291. package/source/Introspection.ts +11 -0
  292. package/source/Mapping.ts +68 -21
  293. package/source/Query.test.ts +3 -3
  294. package/source/Query.ts +123 -33
  295. package/source/RTD/Context.ts +1 -1
  296. package/source/RTD/Endpoint.ts +3 -0
  297. package/source/RTD/Method.ts +16 -0
  298. package/source/RTD/Node.ts +29 -13
  299. package/source/RTD/Route.ts +5 -4
  300. package/source/RTD/Tree.ts +2 -2
  301. package/source/RTD/factory.ts +5 -2
  302. package/source/RTD/syntax/parse.test.ts +1 -1
  303. package/source/RTD/syntax/parse.ts +37 -24
  304. package/source/RTD/syntax/types.ts +6 -4
  305. package/source/Remotes.ts +7 -6
  306. package/source/Tenant.ts +6 -20
  307. package/source/deployment.ts +33 -23
  308. package/source/directives/auth/Anonymous.ts +3 -3
  309. package/source/directives/auth/Anyone.ts +13 -0
  310. package/source/directives/auth/Authorization.ts +66 -26
  311. package/source/directives/auth/Delegate.ts +13 -6
  312. package/source/directives/auth/Echo.ts +16 -6
  313. package/source/directives/auth/Federation.ts +84 -0
  314. package/source/directives/auth/Id.ts +1 -1
  315. package/source/directives/auth/Incept.ts +43 -17
  316. package/source/directives/auth/Input.ts +72 -0
  317. package/source/directives/auth/Role.test.ts +53 -6
  318. package/source/directives/auth/Role.ts +23 -19
  319. package/source/directives/auth/Rule.ts +3 -5
  320. package/source/directives/auth/Scheme.ts +5 -5
  321. package/source/directives/auth/create.ts +11 -0
  322. package/source/directives/auth/schemes.ts +2 -0
  323. package/source/directives/auth/split.ts +1 -1
  324. package/source/directives/auth/types.ts +11 -6
  325. package/source/directives/cache/Cache.ts +15 -6
  326. package/source/directives/cache/Control.ts +45 -19
  327. package/source/directives/cors/CORS.ts +3 -2
  328. package/source/directives/dev/Development.ts +12 -7
  329. package/source/directives/dev/Sleep.ts +40 -0
  330. package/source/directives/dev/types.ts +1 -1
  331. package/source/directives/flow/Compose.ts +92 -0
  332. package/source/directives/flow/Fetch.ts +86 -0
  333. package/source/directives/flow/Flow.ts +42 -0
  334. package/source/directives/flow/index.ts +3 -0
  335. package/source/directives/flow/types.ts +7 -0
  336. package/source/directives/index.ts +4 -2
  337. package/source/directives/io/IO.ts +1 -1
  338. package/source/directives/io/Input.ts +8 -5
  339. package/source/directives/io/Output.ts +5 -4
  340. package/source/directives/map/Authority.ts +15 -0
  341. package/source/directives/map/Claims.ts +58 -0
  342. package/source/directives/map/Directive.ts +4 -0
  343. package/source/directives/map/Headers.ts +38 -0
  344. package/source/directives/map/Language.ts +42 -0
  345. package/source/directives/map/Languages.ts +11 -0
  346. package/source/directives/map/Map.ts +61 -0
  347. package/source/directives/map/Mapping.ts +19 -0
  348. package/source/directives/{vary → map}/Properties.ts +2 -4
  349. package/source/directives/map/Segments.ts +27 -0
  350. package/source/directives/map/index.ts +3 -0
  351. package/source/directives/octets/Context.ts +3 -2
  352. package/source/directives/octets/Delete.ts +21 -17
  353. package/source/directives/octets/Get.ts +86 -0
  354. package/source/directives/octets/Octets.ts +9 -12
  355. package/source/directives/octets/{Store.ts → Put.ts} +52 -38
  356. package/source/directives/octets/Workflow.ts +9 -3
  357. package/source/directives/octets/bytes.test.ts +30 -0
  358. package/source/directives/octets/bytes.ts +18 -0
  359. package/source/directives/octets/schemas.ts +4 -8
  360. package/source/directives/octets/types.ts +2 -0
  361. package/source/directives/octets/workflows/Execution.ts +61 -8
  362. package/source/directives/octets/workflows/Workflow.ts +17 -7
  363. package/source/directives/octets/workflows/index.ts +1 -1
  364. package/source/directives/require/Directive.ts +5 -0
  365. package/source/directives/require/Headers.ts +20 -0
  366. package/source/directives/require/Require.ts +28 -0
  367. package/source/directives/require/index.ts +3 -0
  368. package/source/exceptions.ts +14 -6
  369. package/source/manifest.ts +10 -11
  370. package/source/root.ts +16 -1
  371. package/source/schemas.ts +1 -1
  372. package/transpiled/Annotation.d.ts +3 -3
  373. package/transpiled/Branch.d.ts +1 -0
  374. package/transpiled/Composition.d.ts +0 -1
  375. package/transpiled/Composition.js +0 -4
  376. package/transpiled/Composition.js.map +1 -1
  377. package/transpiled/Context.d.ts +1 -0
  378. package/transpiled/Directive.js +15 -8
  379. package/transpiled/Directive.js.map +1 -1
  380. package/transpiled/Endpoint.d.ts +6 -4
  381. package/transpiled/Endpoint.js +46 -9
  382. package/transpiled/Endpoint.js.map +1 -1
  383. package/transpiled/Factory.d.ts +3 -2
  384. package/transpiled/Factory.js +18 -10
  385. package/transpiled/Factory.js.map +1 -1
  386. package/transpiled/Gateway.d.ts +3 -0
  387. package/transpiled/Gateway.js +55 -12
  388. package/transpiled/Gateway.js.map +1 -1
  389. package/transpiled/HTTP/Context.d.ts +9 -2
  390. package/transpiled/HTTP/Context.js +19 -6
  391. package/transpiled/HTTP/Context.js.map +1 -1
  392. package/transpiled/HTTP/Server.d.ts +15 -4
  393. package/transpiled/HTTP/Server.js +81 -41
  394. package/transpiled/HTTP/Server.js.map +1 -1
  395. package/transpiled/HTTP/exceptions.d.ts +7 -1
  396. package/transpiled/HTTP/exceptions.js +13 -1
  397. package/transpiled/HTTP/exceptions.js.map +1 -1
  398. package/transpiled/HTTP/formats/index.js +3 -3
  399. package/transpiled/HTTP/formats/index.js.map +1 -1
  400. package/transpiled/HTTP/messages.d.ts +2 -1
  401. package/transpiled/HTTP/messages.js +38 -8
  402. package/transpiled/HTTP/messages.js.map +1 -1
  403. package/transpiled/Introspection.d.ts +9 -0
  404. package/transpiled/Introspection.js +3 -0
  405. package/transpiled/Introspection.js.map +1 -0
  406. package/transpiled/Mapping.d.ts +11 -2
  407. package/transpiled/Mapping.js +50 -19
  408. package/transpiled/Mapping.js.map +1 -1
  409. package/transpiled/Query.d.ts +10 -1
  410. package/transpiled/Query.js +87 -30
  411. package/transpiled/Query.js.map +1 -1
  412. package/transpiled/RTD/Context.d.ts +1 -1
  413. package/transpiled/RTD/Endpoint.d.ts +1 -0
  414. package/transpiled/RTD/Method.d.ts +4 -0
  415. package/transpiled/RTD/Method.js +11 -0
  416. package/transpiled/RTD/Method.js.map +1 -1
  417. package/transpiled/RTD/Node.d.ts +4 -1
  418. package/transpiled/RTD/Node.js +23 -12
  419. package/transpiled/RTD/Node.js.map +1 -1
  420. package/transpiled/RTD/Route.d.ts +1 -1
  421. package/transpiled/RTD/Route.js +0 -1
  422. package/transpiled/RTD/Route.js.map +1 -1
  423. package/transpiled/RTD/Tree.d.ts +1 -1
  424. package/transpiled/RTD/Tree.js.map +1 -1
  425. package/transpiled/RTD/factory.js +5 -2
  426. package/transpiled/RTD/factory.js.map +1 -1
  427. package/transpiled/RTD/syntax/parse.js +34 -22
  428. package/transpiled/RTD/syntax/parse.js.map +1 -1
  429. package/transpiled/RTD/syntax/types.d.ts +5 -3
  430. package/transpiled/RTD/syntax/types.js +1 -1
  431. package/transpiled/RTD/syntax/types.js.map +1 -1
  432. package/transpiled/Remotes.d.ts +4 -4
  433. package/transpiled/Remotes.js +6 -5
  434. package/transpiled/Remotes.js.map +1 -1
  435. package/transpiled/Tenant.d.ts +5 -5
  436. package/transpiled/Tenant.js +2 -13
  437. package/transpiled/Tenant.js.map +1 -1
  438. package/transpiled/deployment.d.ts +1 -1
  439. package/transpiled/deployment.js +28 -20
  440. package/transpiled/deployment.js.map +1 -1
  441. package/transpiled/directives/auth/Anonymous.d.ts +2 -2
  442. package/transpiled/directives/auth/Anonymous.js +2 -2
  443. package/transpiled/directives/auth/Anonymous.js.map +1 -1
  444. package/transpiled/directives/auth/Anyone.d.ts +6 -0
  445. package/transpiled/directives/auth/Anyone.js +14 -0
  446. package/transpiled/directives/auth/Anyone.js.map +1 -0
  447. package/transpiled/directives/auth/Authorization.d.ts +4 -3
  448. package/transpiled/directives/auth/Authorization.js +50 -23
  449. package/transpiled/directives/auth/Authorization.js.map +1 -1
  450. package/transpiled/directives/auth/Delegate.d.ts +5 -4
  451. package/transpiled/directives/auth/Delegate.js +10 -4
  452. package/transpiled/directives/auth/Delegate.js.map +1 -1
  453. package/transpiled/directives/auth/Echo.d.ts +4 -4
  454. package/transpiled/directives/auth/Echo.js +11 -4
  455. package/transpiled/directives/auth/Echo.js.map +1 -1
  456. package/transpiled/directives/auth/Federation.d.ts +16 -0
  457. package/transpiled/directives/auth/Federation.js +57 -0
  458. package/transpiled/directives/auth/Federation.js.map +1 -0
  459. package/transpiled/directives/auth/Id.d.ts +1 -1
  460. package/transpiled/directives/auth/Id.js.map +1 -1
  461. package/transpiled/directives/auth/Incept.d.ts +5 -3
  462. package/transpiled/directives/auth/Incept.js +33 -13
  463. package/transpiled/directives/auth/Incept.js.map +1 -1
  464. package/transpiled/directives/auth/Input.d.ts +13 -0
  465. package/transpiled/directives/auth/Input.js +49 -0
  466. package/transpiled/directives/auth/Input.js.map +1 -0
  467. package/transpiled/directives/auth/Role.d.ts +5 -2
  468. package/transpiled/directives/auth/Role.js +22 -18
  469. package/transpiled/directives/auth/Role.js.map +1 -1
  470. package/transpiled/directives/auth/Rule.d.ts +2 -4
  471. package/transpiled/directives/auth/Rule.js +2 -2
  472. package/transpiled/directives/auth/Rule.js.map +1 -1
  473. package/transpiled/directives/auth/Scheme.d.ts +2 -2
  474. package/transpiled/directives/auth/Scheme.js +4 -4
  475. package/transpiled/directives/auth/Scheme.js.map +1 -1
  476. package/transpiled/directives/auth/create.d.ts +2 -0
  477. package/transpiled/directives/auth/create.js +14 -0
  478. package/transpiled/directives/auth/create.js.map +1 -0
  479. package/transpiled/directives/auth/schemes.d.ts +1 -0
  480. package/transpiled/directives/auth/schemes.js +2 -1
  481. package/transpiled/directives/auth/schemes.js.map +1 -1
  482. package/transpiled/directives/auth/split.js +1 -1
  483. package/transpiled/directives/auth/split.js.map +1 -1
  484. package/transpiled/directives/auth/types.d.ts +8 -5
  485. package/transpiled/directives/cache/Cache.d.ts +3 -3
  486. package/transpiled/directives/cache/Cache.js +12 -4
  487. package/transpiled/directives/cache/Cache.js.map +1 -1
  488. package/transpiled/directives/cache/Control.d.ts +3 -2
  489. package/transpiled/directives/cache/Control.js +32 -15
  490. package/transpiled/directives/cache/Control.js.map +1 -1
  491. package/transpiled/directives/cors/CORS.js +3 -2
  492. package/transpiled/directives/cors/CORS.js.map +1 -1
  493. package/transpiled/directives/dev/Development.d.ts +1 -1
  494. package/transpiled/directives/dev/Development.js +13 -7
  495. package/transpiled/directives/dev/Development.js.map +1 -1
  496. package/transpiled/directives/dev/Sleep.d.ts +8 -0
  497. package/transpiled/directives/dev/Sleep.js +36 -0
  498. package/transpiled/directives/dev/Sleep.js.map +1 -0
  499. package/transpiled/directives/dev/types.d.ts +1 -1
  500. package/transpiled/directives/flow/Compose.d.ts +9 -0
  501. package/transpiled/directives/flow/Compose.js +94 -0
  502. package/transpiled/directives/flow/Compose.js.map +1 -0
  503. package/transpiled/directives/flow/Fetch.d.ts +12 -0
  504. package/transpiled/directives/flow/Fetch.js +58 -0
  505. package/transpiled/directives/flow/Fetch.js.map +1 -0
  506. package/transpiled/directives/flow/Flow.d.ts +10 -0
  507. package/transpiled/directives/flow/Flow.js +33 -0
  508. package/transpiled/directives/flow/Flow.js.map +1 -0
  509. package/transpiled/directives/flow/index.d.ts +2 -0
  510. package/transpiled/directives/flow/index.js +6 -0
  511. package/transpiled/directives/flow/index.js.map +1 -0
  512. package/transpiled/directives/flow/types.d.ts +6 -0
  513. package/transpiled/directives/flow/types.js.map +1 -0
  514. package/transpiled/directives/index.js +4 -2
  515. package/transpiled/directives/index.js.map +1 -1
  516. package/transpiled/directives/io/IO.js +1 -1
  517. package/transpiled/directives/io/IO.js.map +1 -1
  518. package/transpiled/directives/io/Input.js +4 -2
  519. package/transpiled/directives/io/Input.js.map +1 -1
  520. package/transpiled/directives/io/Output.js +2 -2
  521. package/transpiled/directives/io/Output.js.map +1 -1
  522. package/transpiled/directives/map/Authority.d.ts +6 -0
  523. package/transpiled/directives/map/Authority.js +19 -0
  524. package/transpiled/directives/map/Authority.js.map +1 -0
  525. package/transpiled/directives/map/Claims.d.ts +10 -0
  526. package/transpiled/directives/map/Claims.js +44 -0
  527. package/transpiled/directives/map/Claims.js.map +1 -0
  528. package/transpiled/directives/map/Directive.d.ts +3 -0
  529. package/transpiled/directives/map/Directive.js.map +1 -0
  530. package/transpiled/directives/map/Headers.d.ts +7 -0
  531. package/transpiled/directives/map/Headers.js +34 -0
  532. package/transpiled/directives/map/Headers.js.map +1 -0
  533. package/transpiled/directives/map/Language.d.ts +10 -0
  534. package/transpiled/directives/map/Language.js +38 -0
  535. package/transpiled/directives/map/Language.js.map +1 -0
  536. package/transpiled/directives/map/Languages.d.ts +4 -0
  537. package/transpiled/directives/map/Languages.js +17 -0
  538. package/transpiled/directives/map/Languages.js.map +1 -0
  539. package/transpiled/directives/map/Map.d.ts +13 -0
  540. package/transpiled/directives/map/Map.js +46 -0
  541. package/transpiled/directives/map/Map.js.map +1 -0
  542. package/transpiled/directives/map/Mapping.d.ts +13 -0
  543. package/transpiled/directives/map/Mapping.js +13 -0
  544. package/transpiled/directives/map/Mapping.js.map +1 -0
  545. package/transpiled/directives/{vary → map}/Properties.d.ts +2 -2
  546. package/transpiled/directives/{vary → map}/Properties.js +1 -3
  547. package/transpiled/directives/map/Properties.js.map +1 -0
  548. package/transpiled/directives/map/Segments.d.ts +6 -0
  549. package/transpiled/directives/map/Segments.js +26 -0
  550. package/transpiled/directives/map/Segments.js.map +1 -0
  551. package/transpiled/directives/map/index.d.ts +2 -0
  552. package/transpiled/directives/map/index.js +6 -0
  553. package/transpiled/directives/map/index.js.map +1 -0
  554. package/transpiled/directives/octets/Context.js +4 -24
  555. package/transpiled/directives/octets/Context.js.map +1 -1
  556. package/transpiled/directives/octets/Delete.js +15 -12
  557. package/transpiled/directives/octets/Delete.js.map +1 -1
  558. package/transpiled/directives/octets/{Fetch.d.ts → Get.d.ts} +5 -6
  559. package/transpiled/directives/octets/{Fetch.js → Get.js} +25 -29
  560. package/transpiled/directives/octets/Get.js.map +1 -0
  561. package/transpiled/directives/octets/Octets.js +9 -12
  562. package/transpiled/directives/octets/Octets.js.map +1 -1
  563. package/transpiled/directives/octets/{Store.d.ts → Put.d.ts} +8 -2
  564. package/transpiled/directives/octets/{Store.js → Put.js} +33 -27
  565. package/transpiled/directives/octets/Put.js.map +1 -0
  566. package/transpiled/directives/octets/Workflow.js +7 -2
  567. package/transpiled/directives/octets/Workflow.js.map +1 -1
  568. package/transpiled/directives/octets/bytes.d.ts +1 -0
  569. package/transpiled/directives/octets/bytes.js +21 -0
  570. package/transpiled/directives/octets/bytes.js.map +1 -0
  571. package/transpiled/directives/octets/schemas.d.ts +4 -8
  572. package/transpiled/directives/octets/schemas.js +3 -6
  573. package/transpiled/directives/octets/schemas.js.map +1 -1
  574. package/transpiled/directives/octets/types.d.ts +2 -0
  575. package/transpiled/directives/octets/workflows/Execution.d.ts +6 -1
  576. package/transpiled/directives/octets/workflows/Execution.js +44 -9
  577. package/transpiled/directives/octets/workflows/Execution.js.map +1 -1
  578. package/transpiled/directives/octets/workflows/Workflow.d.ts +8 -3
  579. package/transpiled/directives/octets/workflows/Workflow.js +9 -4
  580. package/transpiled/directives/octets/workflows/Workflow.js.map +1 -1
  581. package/transpiled/directives/octets/workflows/index.d.ts +1 -1
  582. package/transpiled/directives/octets/workflows/index.js.map +1 -1
  583. package/transpiled/directives/require/Directive.d.ts +4 -0
  584. package/transpiled/directives/require/Directive.js +3 -0
  585. package/transpiled/directives/require/Directive.js.map +1 -0
  586. package/transpiled/directives/require/Headers.d.ts +7 -0
  587. package/transpiled/directives/require/Headers.js +19 -0
  588. package/transpiled/directives/require/Headers.js.map +1 -0
  589. package/transpiled/directives/require/Require.d.ts +9 -0
  590. package/transpiled/directives/require/Require.js +27 -0
  591. package/transpiled/directives/require/Require.js.map +1 -0
  592. package/transpiled/directives/require/index.d.ts +2 -0
  593. package/transpiled/directives/require/index.js +6 -0
  594. package/transpiled/directives/require/index.js.map +1 -0
  595. package/transpiled/exceptions.d.ts +3 -2
  596. package/transpiled/exceptions.js +8 -1
  597. package/transpiled/exceptions.js.map +1 -1
  598. package/transpiled/manifest.js +10 -11
  599. package/transpiled/manifest.js.map +1 -1
  600. package/transpiled/root.js +16 -1
  601. package/transpiled/root.js.map +1 -1
  602. package/transpiled/schemas.d.ts +1 -1
  603. package/transpiled/schemas.js +2 -2
  604. package/transpiled/schemas.js.map +1 -1
  605. package/transpiled/tsconfig.tsbuildinfo +1 -1
  606. package/components/identity.basic/operations/create.d.ts +0 -10
  607. package/components/identity.basic/operations/create.js +0 -10
  608. package/components/identity.basic/operations/create.js.map +0 -1
  609. package/components/identity.basic/source/create.ts +0 -18
  610. package/components/identity.federation/operations/create.d.ts +0 -10
  611. package/components/identity.federation/operations/create.js +0 -15
  612. package/components/identity.federation/operations/create.js.map +0 -1
  613. package/components/identity.federation/operations/schemas.d.ts +0 -59
  614. package/components/identity.federation/operations/schemas.js +0 -9
  615. package/components/identity.federation/operations/schemas.js.map +0 -1
  616. package/components/identity.federation/operations/types.js.map +0 -1
  617. package/components/identity.federation/source/create.ts +0 -26
  618. package/components/identity.federation/source/schemas.ts +0 -61
  619. package/components/identity.tokens/operations/types.d.ts +0 -40
  620. package/components/identity.tokens/operations/types.js.map +0 -1
  621. package/components/identity.tokens/source/types.ts +0 -48
  622. package/components/octets.storage/operations/fetch.js +0 -46
  623. package/components/octets.storage/operations/list.js +0 -7
  624. package/components/octets.storage/operations/permute.js +0 -7
  625. package/components/octets.storage/operations/store.js +0 -11
  626. package/documentation/vary.md +0 -69
  627. package/features/steps/components/octets.tester/operations/diversify.js +0 -14
  628. package/features/vary.feature +0 -180
  629. package/schemas/octets/context.cos.yaml +0 -1
  630. package/schemas/octets/fetch.cos.yaml +0 -3
  631. package/schemas/octets/permute.cos.yaml +0 -1
  632. package/schemas/octets/store.cos.yaml +0 -3
  633. package/source/HTTP/Server.test.ts +0 -126
  634. package/source/directives/octets/Fetch.ts +0 -100
  635. package/source/directives/octets/List.ts +0 -72
  636. package/source/directives/octets/Permute.ts +0 -44
  637. package/source/directives/vary/Directive.ts +0 -6
  638. package/source/directives/vary/Embed.ts +0 -62
  639. package/source/directives/vary/Vary.ts +0 -48
  640. package/source/directives/vary/embeddings/Embedding.ts +0 -6
  641. package/source/directives/vary/embeddings/Header.ts +0 -32
  642. package/source/directives/vary/embeddings/Language.ts +0 -31
  643. package/source/directives/vary/embeddings/index.ts +0 -11
  644. package/source/directives/vary/index.ts +0 -3
  645. package/transpiled/directives/octets/Fetch.js.map +0 -1
  646. package/transpiled/directives/octets/List.d.ts +0 -16
  647. package/transpiled/directives/octets/List.js +0 -74
  648. package/transpiled/directives/octets/List.js.map +0 -1
  649. package/transpiled/directives/octets/Permute.d.ts +0 -11
  650. package/transpiled/directives/octets/Permute.js.map +0 -1
  651. package/transpiled/directives/octets/Store.js.map +0 -1
  652. package/transpiled/directives/vary/Directive.d.ts +0 -5
  653. package/transpiled/directives/vary/Directive.js.map +0 -1
  654. package/transpiled/directives/vary/Embed.d.ts +0 -10
  655. package/transpiled/directives/vary/Embed.js +0 -49
  656. package/transpiled/directives/vary/Embed.js.map +0 -1
  657. package/transpiled/directives/vary/Properties.js.map +0 -1
  658. package/transpiled/directives/vary/Vary.d.ts +0 -10
  659. package/transpiled/directives/vary/Vary.js +0 -36
  660. package/transpiled/directives/vary/Vary.js.map +0 -1
  661. package/transpiled/directives/vary/embeddings/Embedding.d.ts +0 -5
  662. package/transpiled/directives/vary/embeddings/Embedding.js.map +0 -1
  663. package/transpiled/directives/vary/embeddings/Header.d.ts +0 -7
  664. package/transpiled/directives/vary/embeddings/Header.js +0 -28
  665. package/transpiled/directives/vary/embeddings/Header.js.map +0 -1
  666. package/transpiled/directives/vary/embeddings/Language.d.ts +0 -7
  667. package/transpiled/directives/vary/embeddings/Language.js +0 -28
  668. package/transpiled/directives/vary/embeddings/Language.js.map +0 -1
  669. package/transpiled/directives/vary/embeddings/index.d.ts +0 -5
  670. package/transpiled/directives/vary/embeddings/index.js +0 -10
  671. package/transpiled/directives/vary/embeddings/index.js.map +0 -1
  672. package/transpiled/directives/vary/index.d.ts +0 -2
  673. package/transpiled/directives/vary/index.js +0 -6
  674. package/transpiled/directives/vary/index.js.map +0 -1
  675. /package/components/{identity.federation/operations → identity.tokens/operations/lib}/types.js +0 -0
  676. /package/schemas/octets/{list.cos.yaml → get.cos.yaml} +0 -0
  677. /package/{components/identity.tokens/operations → transpiled/directives/flow}/types.js +0 -0
  678. /package/transpiled/directives/{vary → map}/Directive.js +0 -0
@@ -15,8 +15,7 @@ The Authorization is implemented as a set of [RTD Directives](tree.md#directives
15
15
 
16
16
  Directives are executed in a predetermined order until one of them grants access to a resource.
17
17
  If none of the directives grants access, then the Authorization interrupts request processing and
18
- responds with an
19
- authorization error.
18
+ responds with an authorization error.
20
19
 
21
20
  > The Authorization directive provider is named `authorization`,
22
21
  > so the full names of the directives are `authorization:{directive}`.
@@ -26,7 +25,11 @@ authorization error.
26
25
  Grants access if its value is `true` and no credentials were provided[^1].
27
26
 
28
27
  [^1]: Credentials in the request make the
29
- response [non-chachable](https://datatracker.ietf.org/doc/html/rfc7234#section-3).
28
+ response [non-cacheable](https://datatracker.ietf.org/doc/html/rfc7234#section-3).
29
+
30
+ ### `anyone`
31
+
32
+ Grants access if its value is `true` and valid credentials were provided.
30
33
 
31
34
  ### `id`
32
35
 
@@ -38,11 +41,8 @@ the directive's value.
38
41
  Given the Route declaration and corresponding HTTP request:
39
42
 
40
43
  ```yaml
41
- # context.toa.yaml
42
-
43
- exposition:
44
- /users/:user-id:
45
- id: "user-id"
44
+ /users/:user-id:
45
+ id: "user-id"
46
46
  ```
47
47
 
48
48
  ```http
@@ -57,20 +57,66 @@ is `87480f2bd88048518c529d7957475ecd`.
57
57
 
58
58
  Grants access if resolved Identity has a role matching the directive's value or one of its values.
59
59
 
60
- #### Example
61
-
62
60
  ```yaml
63
- # context.toa.yaml
64
-
65
- exposition:
66
- /code:
67
- role: [developer, reviewer]
61
+ /code:
62
+ role: [developer, reviewer]
68
63
  ```
69
64
 
70
65
  Access will be granted if the resolved Identity has a role that matches `developer` or `reviewer`.
71
66
 
72
67
  Read [Roles](#roles) section for more details.
73
68
 
69
+ #### Dynamic roles
70
+
71
+ The `role` directive can be used with a placeholder in the route.
72
+
73
+ ```yaml
74
+ /:org-id:
75
+ role: app:{org-id}:moderator
76
+ ```
77
+
78
+ ### `claims`
79
+
80
+ Grants access if `Bearer` authentication scheme is used
81
+ and the Token's claims matches the specified values.
82
+
83
+ ```yaml
84
+ /:
85
+ auth:claims:
86
+ iss: https://id.example.com
87
+ sub: someone
88
+ aud: stars
89
+ ```
90
+
91
+ > If OIDC token claim contains `aud`
92
+ > as [an array](https://openid.net/specs/openid-connect-core-1_0.html#IDTokenValidation), the
93
+ > directive will match if at least one value.
94
+
95
+ At least one property is required.
96
+
97
+ Values may refer to the Route parameters or the request authority:
98
+
99
+ ```yaml
100
+ /secrets/:org-id:
101
+ auth:claims:
102
+ iss: https://id.org.com
103
+ sub: /:org-id
104
+ aud: :authority
105
+ ```
106
+
107
+ An expression `:domain` will match if the domain in the value of `iss` matches the request
108
+ authority, excluding the most specific subdomain.
109
+
110
+ Issuer `https://accounts.example.com` matches request authorities `images.example.com`
111
+ and `sub.images.example.com`, but not `images.another.com`.
112
+
113
+ ```yaml
114
+ /images/:user-id:
115
+ auth:claims:
116
+ iss: :domain
117
+ sub: /:org-id
118
+ ```
119
+
74
120
  ### `rule`
75
121
 
76
122
  The Rule is a collection of authorization directives. It allows access only if all the specified
@@ -79,23 +125,43 @@ directives grant access. The value of the `rule` directive can be a single Rule
79
125
  #### Example
80
126
 
81
127
  ```yaml
82
- # context.toa.yaml
83
-
84
- exposition:
85
- /commits/:user-id:
86
- rule:
87
- id: user-id
88
- role: developer
128
+ /commits/:user-id:
129
+ rule:
130
+ id: user-id
131
+ role: developer
89
132
  ```
90
133
 
91
134
  Access will be granted if an Identity matches a `user-id` placeholder and has a Role of `developer`.
92
135
 
136
+ ### `input`
137
+
138
+ Restricts access based on the request body (which must be an object).
139
+
140
+ ```yaml
141
+ /commits/:id:
142
+ PUT:
143
+ auth:role: [developer, reviewer]
144
+ auth:input:
145
+ - prop: approved
146
+ role: reviewer
147
+ - prop: message
148
+ role: developer
149
+ ```
150
+
151
+ The example above restricts access to the `approved` property of the request body to the identity
152
+ with the `reviewer` role, and the `message` property to the identity with the `developer` role.
153
+
154
+ > `auth:input` directive does not grant access by itself.
155
+
93
156
  ### `delegate`
94
157
 
95
158
  Embeds the value of the current Identity into the request body as a property named after the value
96
159
  of the directive value, and grants access.
160
+ The request body must be an object.
97
161
 
98
- > The request body must be an object.
162
+ > :warning:<br/>
163
+ > The intended use case for this directive is audit.
164
+ > **Using it to pass Identity to the application logic is strongly discouraged.**
99
165
 
100
166
  ## Roles
101
167
 
@@ -112,11 +178,8 @@ directive.
112
178
  #### Example
113
179
 
114
180
  ```yaml
115
- # context.toa.yaml
116
-
117
- /exposition:
118
- /commits/:user-id:
119
- role: developer:senior
181
+ /commits/:user-id:
182
+ role: developer:senior
120
183
  ```
121
184
 
122
185
  The example above defines a `role` directive with the specified `developer:senior` Role Scope.
@@ -131,7 +194,6 @@ In other words, the Identity must have a specified or more general Role.
131
194
  </picture>
132
195
  </a>
133
196
 
134
-
135
197
  > The root-level Role Scope `system` is preserved and cannot be used with the `role` directives.
136
198
 
137
199
  See also [role management resources](components.md#roles).
@@ -0,0 +1,48 @@
1
+ # Authorities
2
+
3
+ Authorities are a mechanism that allows serving multiple domains from a single instance of the
4
+ application.
5
+
6
+ ## Definition
7
+
8
+ The `authorities` definition is a map of authority identifiers to the `:authority` pseudo-header
9
+ values.
10
+
11
+ ```yaml
12
+ # context.toa.yaml
13
+
14
+ exposition:
15
+ authorities:
16
+ one: the.one.com
17
+ two: the.two.com
18
+ ```
19
+
20
+ ## Mappings
21
+
22
+ To pass the requested authority to the operation call, [`map:authority` directive](map#embeddings)
23
+ can be used.
24
+
25
+ ```yaml
26
+ # manifest.toa.yaml
27
+
28
+ exposition:
29
+ /:
30
+ GET:
31
+ map:authority: hostname
32
+ endpoint: observe
33
+ ```
34
+
35
+ If the value of the `authority` pseudo-header is not present in the `authorities` definition,
36
+ then the value is embedded as is.
37
+
38
+ ## Identity
39
+
40
+ Credentials stored or issued by the [authentication system](identity.md) are associated with an
41
+ authority.
42
+ Credentials in one authority are not valid in another,
43
+ or may be associated with a different Identity; in other words, Identity exists in the context of an
44
+ authority.
45
+
46
+ > :warning:<br/>
47
+ > Changing the authority identifier will break compatibility with existing stored or issued
48
+ > credentials.
@@ -17,7 +17,7 @@ to [safe HTTP methods](https://developer.mozilla.org/en-US/docs/Glossary/Safe/HT
17
17
 
18
18
  ### Implicit modifications
19
19
 
20
- In terms of security, the following implicit modifications are made to the `Cache-Control` header:
20
+ In terms of security, the following implicit modifications are made to the `cache-control` header:
21
21
 
22
22
  - If it contains the `public` directive without `no-cache` and the request is authenticated,
23
23
  the `no-cache` directive is added.
@@ -25,6 +25,13 @@ In terms of security, the following implicit modifications are made to the `Cach
25
25
  - If it does not contain the `private` directive and the request is authenticated, the `private`
26
26
  directive is added.
27
27
  This is to prevent the storage of private data in shared caches.
28
+ - If it contains `private` directive and the request is authenticated, then `vary: authorization` is
29
+ added.
30
+ This is to prevent the reuse of private data when authenticated as another identity.[^1]
31
+
32
+ [^1]: This also will invalidate the cache each time a new token is used for the same identity, thus
33
+ limiting the `max-age` value to the token's `refresh` time.
34
+ See [Issuing tokens](components.md#issuing-tokens).
28
35
 
29
36
  ## `cache:exact`
30
37
 
@@ -20,7 +20,7 @@ and pepper.
20
20
  configuration:
21
21
  identity.basic:
22
22
  rounds: 10 # salt rounds
23
- peper: '' # hashing pepper
23
+ pepper: '' # hashing pepper
24
24
  ```
25
25
 
26
26
  ### Credentials constraints
@@ -111,8 +111,8 @@ secrets.
111
111
  configuration:
112
112
  identity.federation:
113
113
  trust:
114
- - issuer: https://token.actions.githubusercontent.com
115
- audience:
114
+ - iss: https://token.actions.githubusercontent.com
115
+ aud:
116
116
  - https://github.com/tinovyatkin
117
117
  - https://github.com/temich
118
118
 
@@ -122,9 +122,9 @@ configuration:
122
122
  k1: <secret-to-be-used-for-hs256>
123
123
  ```
124
124
 
125
- ## Stateless tokens
125
+ ## Local tokens
126
126
 
127
- The `identity.tokens` component manages stateless authentication tokens.
127
+ The `identity.tokens` component manages local authentication tokens.
128
128
 
129
129
  These tokens carry the information required to authenticate the Identity and authorize access.
130
130
 
@@ -135,40 +135,108 @@ The new token is issued each time the request is made:
135
135
  1. Using authentication scheme other than `Token`.
136
136
  2. Using `Token` authentication scheme with an [obsolete token](#token-rotation).
137
137
 
138
+ When the token is issued it is sent in the `authorization` response header and the `cache-control`
139
+ is set to `no-store`.
140
+
141
+ ```http
142
+ authorization: Token ...
143
+ cache-control: no-store
144
+ ```
145
+
146
+ ### Custom tokens
147
+
148
+ Custom tokens can be issued with a specific set of permissions and scopes for the own Identity or by
149
+ an Identity with the `system:identity:tokens` role.
150
+
151
+ Tokens are issued with custom secret keys and are not subject to [token rotation](#token-rotation).
152
+ To invalidate a custom token, its secret key must be deleted.
153
+
154
+ Custom tokens have no `refresh` period, that is, never become obsolete and never refreshed.
155
+
156
+ ```
157
+ POST /identity/tokens/<identity>/
158
+ host: nex.toa.io
159
+ authorization: ...
160
+ accept: application/yaml
161
+ content-type: application/yaml
162
+
163
+ lifetime: 3600
164
+ scopes: [app:developer]
165
+ permissions:
166
+ /users/fc8e66dd/: [GET, PUT]
167
+ /posts/fc8e66dd/**/comments/: [*]
168
+ ```
169
+
170
+ ```
171
+ 201 Created
172
+ content-type: application/yaml
173
+
174
+ token: <token>
175
+ ```
176
+
177
+ - `lifetime`: Issued token will be valid for this period
178
+ (default is specified in [the configuration](#token-rotation)).
179
+ The value of `0` means the token will not expire, which is supported, but
180
+ **strongly not recommended** for production environments.
181
+ - `scopes`: Issued token will assume only specified [role scopes](access.md#roles).
182
+ - `permissions`: Issued token will have permissions to access only specified resources and methods.
183
+ Supports [glob patterns](https://www.gnu.org/software/bash/manual/html_node/Pattern-Matching.html)
184
+ and a wildcard method.
185
+
186
+ > `roles` and `permissions` are additional restrictions applied on top of the Identity’s inherent
187
+ > privileges.
188
+
189
+ ### Custom token invalidation
190
+
191
+ Custom tokens can be invalidated by deleting the secret key used to issue them.
192
+ This can be done by the Identity that issued the token or by an Identity with
193
+ the `system:identity:keys` role.
194
+
195
+ ```
196
+ DELETE /identity/keys/<identity>/<key.id>/
197
+ authorization: ...
198
+ ```
199
+
200
+ Token secret key `id` can be obtained from the list of issued tokens (or from the footer of the
201
+ token itself).
202
+
203
+ ```
204
+ GET /identity/keys/<identity>/
205
+ authorization: ...
206
+ ```
207
+
138
208
  ### Token encryption
139
209
 
140
210
  Issued tokens are encrypted
141
211
  with [PASETO V3 encryption](https://github.com/panva/paseto/blob/main/docs/README.md#v3encryptpayload-key-options)
142
- using the `key0` configuration value as a secret.
212
+ using the first key from the `keys` configuration value.
143
213
 
144
214
  ```yaml
145
215
  # context.toa.yaml
146
216
 
147
217
  configuration:
148
218
  identity.tokens:
149
- key0: $TOKEN_ENCRYPTION_KEY
219
+ keys:
220
+ 2024q1: $TOKEN_SECRET_2024Q1
150
221
  ```
151
222
 
152
- The `key0` configuration value is required.
223
+ At least one key in the `keys` configuration value is required.
153
224
 
154
225
  > Valid secret key may be generated using the [`toa key` command](/runtime/cli/readme.md#key).
155
226
 
156
227
  ### Token rotation
157
228
 
158
229
  Issued tokens are valid for a `lifetime` period defined in the configuration. After the `refresh`
159
- period, the token is
160
- considered obsolete (yet still valid), and a new token is [issued](#issuing-tokens) unless the
161
- provided one has
162
- been [revoked](#token-revocation).
230
+ period, the token is considered obsolete (yet still valid), and a new token
231
+ is [issued](#issuing-tokens) unless the provided one has been [revoked](#token-revocation).
163
232
 
164
233
  This essentially means that if the client uses the token at least once every `lifetime` period, it
165
- will always have a
166
- valid token to authenticate with. Also, token revocation or changing roles of an Identity will take
167
- effect once
168
- the `refresh` period of the currently issued tokens has expired.
234
+ will always have a valid token to authenticate with.
235
+ Also, token revocation or changing roles of an Identity will take effect once the `refresh` period
236
+ of the currently issued tokens has expired.
169
237
 
170
238
  Adjusting these two values is a delicate trade-off between security, performance and client
171
- convinience.
239
+ convenience.
172
240
 
173
241
  ```yaml
174
242
  # context.toa.yaml
@@ -192,43 +260,18 @@ Token revocation takes effect once the `refresh` period of the currently issued
192
260
 
193
261
  ### Secret rotation
194
262
 
195
- Tokens are always encrypted using the `key0` configuration value, and they will be decrypted by
196
- attempting both
197
- the `key0` and `key1` values in order.
263
+ Tokens are always encrypted using the first key from the `keys` configuration value,
264
+ and decrypted by the key used to encrypt them.
198
265
 
199
- `key0` is considered the "current key," and `key1` is considered the "previous key."
266
+ To rotate the secret key, a new key must be added to the top of the `keys` configuration value, that
267
+ is, it will be used to encrypt new tokens.
200
268
 
201
- ```yaml
202
- # context.toa.yaml
203
-
204
- configuration:
205
- identity.tokens:
206
- key0: $TOKEN_ENCRYPTION_KEY_2023Q3
207
- key1: $TOKEN_ENCRYPTION_KEY_2023Q2
208
- ```
209
-
210
- Secret rotation is performed by adding a new key as the `key0` value and moving the existing `key0`
211
- to the `key1` value.
269
+ Old keys must be removed only after the `refresh` period of the previously issued tokens has
270
+ expired.
212
271
 
213
- When rolling out the new secret key, there will be a period of time when the new key is deployed to
214
- some Exposition
215
- instances. During this time, these instances will start using the new key to encrypt tokens, while
216
- other instances will
217
- continue using the current key and will not be able to decrypt tokens encrypted with the new key.
218
-
219
- To address this issue, the `key1` configuration value may be used as a "transient key."
220
-
221
- The secret rotation is a 2-step process:
222
-
223
- > The process **must not** be performed earlier than the `lifetime` period since the last rotation,
224
- > as it may invalidate
225
- > tokens before they expire. Therefore, it is guaranteed that there are no valid tokens issued with
226
- > the current `key1`
227
- > value.
228
-
229
- 1. Deploy the new secret key to all Exposition instances as `key1`. This enables all instances to
230
- decrypt tokens
231
- encrypted with the new key while still using the current key for encryption.
272
+ > Let's say you are adding a new secret key each quarter: `2024Q1`, `2024Q2` and so on.
273
+ > The old key `2024Q1` must be removed from the configuration only when the `refresh` period after
274
+ > the new key `2024Q2` was added has expired.
232
275
 
233
276
  ```yaml
234
277
  # context.toa.yaml
@@ -252,6 +295,20 @@ configuration:
252
295
  key1: $TOKEN_ENCRYPTION_KEY_2023Q3
253
296
  ```
254
297
 
298
+ ### Token resources
299
+
300
+ `/identity/tokens/`
301
+
302
+ `POST` Issue a new token for the Identity. Request body is as follows:
303
+
304
+ ```yaml
305
+ lifetime?: number # seconds
306
+ ```
307
+
308
+ Providing a value of `0` will result in the token being issued with no expiration.
309
+ However, it will still become invalid once the encryption key used is out
310
+ of [rotation](#secret-rotation).
311
+
255
312
  ## Roles
256
313
 
257
314
  The `identity.roles` component manages roles of an Identity used
@@ -277,9 +334,8 @@ Role Scopes (see [Role Hierarchies](access.md#hierarchies)).
277
334
  ## Banned Identities
278
335
 
279
336
  The `identity.bans` component manages banned identities.
280
- A banned identity will fail to authenticate with any associated credentials (
281
- except [tokens](#stateless-tokens) within
282
- the `refresh` period).
337
+ A banned identity will fail to authenticate with any associated credentials
338
+ (except [tokens](#stateless-tokens) within the `refresh` period).
283
339
 
284
340
  ```http
285
341
  PUT /identity/bans/:id/
@@ -287,6 +343,7 @@ authorization: Basic dXNlcm5hbWU6cGFzc3dvcmQ=
287
343
  content-type: application/yaml
288
344
 
289
345
  banned: true
346
+ comment: Bye bye
290
347
  ```
291
348
 
292
349
  Access requires `system:identity:bans` role.
@@ -310,3 +367,17 @@ roles:
310
367
  - developer
311
368
  - system:identity:roles
312
369
  ```
370
+
371
+ When no credentials are provided, transient Identity is created.
372
+
373
+ ```http
374
+ GET /identity/
375
+ accept: application/yaml
376
+ ```
377
+
378
+ ```
379
+ 201 Created
380
+
381
+ id: 332017649c814649b25ee466c1fe4534
382
+ roles: []
383
+ ```
@@ -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 delay before processing the request, up to given maximum time in milliseconds (unlimited by
18
+ if value is
19
+ `0`).
20
+ Desired delay can be set in the `sleep` request header.
21
+
22
+ ```yaml
23
+ /foo:
24
+ dev:sleep: 1000
25
+ ```
26
+
27
+ ```http
28
+ GET /foo/ HTTP/1.1
29
+ sleep: 500
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.