@toa.io/extensions.exposition 1.0.0-alpha.9 → 1.0.0-alpha.91

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 (489) 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 +20 -10
  10. package/components/identity.basic/operations/authenticate.d.ts +5 -1
  11. package/components/identity.basic/operations/authenticate.js +5 -2
  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 +16 -5
  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 +32 -15
  26. package/components/identity.federation/operations/authenticate.d.ts +2 -2
  27. package/components/identity.federation/operations/authenticate.js +4 -11
  28. package/components/identity.federation/operations/authenticate.js.map +1 -1
  29. package/components/identity.federation/operations/incept.d.ts +11 -0
  30. package/components/identity.federation/operations/{create.js → incept.js} +6 -7
  31. package/components/identity.federation/operations/incept.js.map +1 -0
  32. package/components/identity.federation/operations/lib/assertions-as-values.js +4 -2
  33. package/components/identity.federation/operations/lib/assertions-as-values.js.map +1 -1
  34. package/components/identity.federation/operations/lib/jwt.d.ts +5 -5
  35. package/components/identity.federation/operations/lib/jwt.js +25 -12
  36. package/components/identity.federation/operations/lib/jwt.js.map +1 -1
  37. package/components/identity.federation/operations/tsconfig.tsbuildinfo +1 -1
  38. package/components/identity.federation/operations/types/configuration.d.ts +14 -0
  39. package/components/identity.federation/operations/types/configuration.js +3 -0
  40. package/components/identity.federation/operations/types/configuration.js.map +1 -0
  41. package/components/identity.federation/operations/{types.d.ts → types/context.d.ts} +15 -7
  42. package/components/identity.federation/operations/types/context.js +3 -0
  43. package/components/identity.federation/operations/types/context.js.map +1 -0
  44. package/components/identity.federation/operations/types/entity.d.ts +6 -0
  45. package/components/identity.federation/operations/types/entity.js +3 -0
  46. package/components/identity.federation/operations/types/entity.js.map +1 -0
  47. package/components/identity.federation/operations/types/index.d.ts +3 -0
  48. package/components/identity.federation/operations/types/index.js +20 -0
  49. package/components/identity.federation/operations/types/index.js.map +1 -0
  50. package/components/identity.federation/source/authenticate.ts +6 -19
  51. package/components/identity.federation/source/{create.ts → incept.ts} +10 -9
  52. package/components/identity.federation/source/lib/assertions-as-values.ts +5 -2
  53. package/components/identity.federation/source/lib/jwt.test.ts +123 -4
  54. package/components/identity.federation/source/lib/jwt.ts +36 -16
  55. package/components/identity.federation/source/types/configuration.ts +15 -0
  56. package/components/identity.federation/source/{types.ts → types/context.ts} +17 -6
  57. package/components/identity.federation/source/types/entity.ts +6 -0
  58. package/components/identity.federation/source/types/index.ts +3 -0
  59. package/components/identity.federation/tsconfig.json +5 -4
  60. package/components/identity.roles/manifest.toa.yaml +16 -6
  61. package/components/identity.roles/operations/grant.d.ts +10 -0
  62. package/components/identity.roles/operations/grant.js +21 -0
  63. package/components/identity.roles/operations/grant.js.map +1 -0
  64. package/components/identity.roles/operations/lib/Entity.d.ts +5 -0
  65. package/components/identity.roles/operations/lib/Entity.js +3 -0
  66. package/components/identity.roles/operations/lib/Entity.js.map +1 -0
  67. package/components/identity.roles/operations/list.d.ts +1 -4
  68. package/components/identity.roles/operations/list.js.map +1 -1
  69. package/components/identity.roles/operations/principal.d.ts +4 -6
  70. package/components/identity.roles/operations/principal.js +6 -1
  71. package/components/identity.roles/operations/principal.js.map +1 -1
  72. package/components/identity.roles/operations/tsconfig.tsbuildinfo +1 -1
  73. package/components/identity.roles/source/grant.ts +32 -0
  74. package/components/identity.roles/source/lib/Entity.ts +5 -0
  75. package/components/identity.roles/source/list.ts +2 -4
  76. package/components/identity.roles/source/principal.ts +10 -8
  77. package/components/identity.tokens/manifest.toa.yaml +19 -4
  78. package/components/identity.tokens/operations/authenticate.d.ts +2 -2
  79. package/components/identity.tokens/operations/authenticate.js +12 -5
  80. package/components/identity.tokens/operations/authenticate.js.map +1 -1
  81. package/components/identity.tokens/operations/decrypt.js +1 -0
  82. package/components/identity.tokens/operations/decrypt.js.map +1 -1
  83. package/components/identity.tokens/operations/encrypt.js +5 -1
  84. package/components/identity.tokens/operations/encrypt.js.map +1 -1
  85. package/components/identity.tokens/operations/tsconfig.tsbuildinfo +1 -1
  86. package/components/identity.tokens/operations/types.d.ts +8 -2
  87. package/components/identity.tokens/receivers/identity.bans.created.js +3 -0
  88. package/components/identity.tokens/source/authenticate.test.ts +11 -4
  89. package/components/identity.tokens/source/authenticate.ts +14 -6
  90. package/components/identity.tokens/source/decrypt.test.ts +5 -3
  91. package/components/identity.tokens/source/decrypt.ts +9 -8
  92. package/components/identity.tokens/source/encrypt.test.ts +26 -2
  93. package/components/identity.tokens/source/encrypt.ts +5 -1
  94. package/components/identity.tokens/source/types.ts +9 -2
  95. package/components/octets.storage/manifest.toa.yaml +9 -11
  96. package/components/octets.storage/operations/get.js +3 -3
  97. package/components/octets.storage/operations/head.js +7 -0
  98. package/components/octets.storage/operations/put.js +121 -0
  99. package/documentation/access.md +75 -38
  100. package/documentation/authorities.md +49 -0
  101. package/documentation/cache.md +8 -1
  102. package/documentation/components.md +61 -22
  103. package/documentation/flow.md +44 -0
  104. package/documentation/identity.md +17 -22
  105. package/documentation/introspection.md +82 -0
  106. package/documentation/octets.md +95 -67
  107. package/documentation/protocol.md +13 -3
  108. package/documentation/query.md +29 -4
  109. package/documentation/require.md +15 -0
  110. package/documentation/tree.md +13 -0
  111. package/documentation/vary.md +14 -14
  112. package/features/access.feature +77 -46
  113. package/features/annotation.feature +1 -0
  114. package/features/auth.claim.feature +170 -0
  115. package/features/authorities.basic.feature +141 -0
  116. package/features/authorities.feature +32 -0
  117. package/features/authorities.federation.feature +100 -0
  118. package/features/authorities.tokens.feature +117 -0
  119. package/features/body.feature +2 -0
  120. package/features/cache.feature +109 -5
  121. package/features/cors.feature +6 -1
  122. package/features/debug.feature +34 -0
  123. package/features/directives.feature +3 -0
  124. package/features/dynamic.feature +48 -0
  125. package/features/errors.feature +32 -7
  126. package/features/etag.feature +108 -0
  127. package/features/flow.feature +96 -0
  128. package/features/identity.bans.feature +137 -0
  129. package/features/identity.basic.feature +97 -26
  130. package/features/identity.feature +18 -6
  131. package/features/identity.federation.feature +66 -11
  132. package/features/identity.roles.feature +250 -7
  133. package/features/identity.tokens.feature +54 -4
  134. package/features/introspection.feature +153 -0
  135. package/features/io.feature +38 -1
  136. package/features/methods.feature +47 -0
  137. package/features/{octets.meta.feature → octets.attributes.feature} +16 -12
  138. package/features/octets.cloudinary.feature +68 -0
  139. package/features/octets.download.feature +189 -0
  140. package/features/octets.entries.feature +13 -55
  141. package/features/octets.feature +83 -107
  142. package/features/octets.workflows.feature +242 -58
  143. package/features/probes.feature +14 -0
  144. package/features/{queries.feature → query.feature} +77 -2
  145. package/features/realtime.feature +34 -0
  146. package/features/require.feature +67 -0
  147. package/features/response.feature +38 -3
  148. package/features/routes.feature +93 -2
  149. package/features/server.feature +21 -0
  150. package/features/steps/.env.example +3 -0
  151. package/features/steps/Database.ts +16 -9
  152. package/features/steps/Gateway.ts +23 -6
  153. package/features/steps/IdP.ts +30 -25
  154. package/features/steps/Parameters.ts +44 -1
  155. package/features/steps/Realtime.ts +151 -0
  156. package/features/steps/components/echo/manifest.toa.yaml +14 -1
  157. package/features/steps/components/echo/operations/identity.js +7 -0
  158. package/features/steps/components/echo/operations/parameters.js +7 -0
  159. package/features/steps/components/echo.beacon/manifest.toa.yaml +2 -0
  160. package/features/steps/components/echo.beacon/operations/hello.js +5 -0
  161. package/features/steps/components/octets.tester/manifest.toa.yaml +22 -2
  162. package/features/steps/components/octets.tester/operations/authority.js +7 -0
  163. package/features/steps/components/octets.tester/operations/bar.js +0 -1
  164. package/features/steps/components/octets.tester/operations/baz.js +0 -2
  165. package/features/steps/components/octets.tester/operations/foo.js +1 -2
  166. package/features/steps/components/octets.tester/operations/redirect.js +12 -0
  167. package/features/steps/components/octets.tester/operations/yex.js +16 -0
  168. package/features/steps/components/octets.tester/operations/yield.js +13 -0
  169. package/features/steps/components/pots/manifest.toa.yaml +14 -3
  170. package/features/steps/components/users/manifest.toa.yaml +0 -1
  171. package/features/steps/components/users.properties/manifest.toa.yaml +1 -1
  172. package/features/streams.feature +5 -0
  173. package/features/timing.feature +4 -1
  174. package/features/vary.feature +71 -0
  175. package/package.json +23 -14
  176. package/readme.md +19 -14
  177. package/schemas/annotation.cos.yaml +1 -1
  178. package/schemas/method.cos.yaml +1 -1
  179. package/schemas/node.cos.yaml +2 -0
  180. package/schemas/octets/put.cos.yaml +25 -0
  181. package/schemas/query.cos.yaml +4 -10
  182. package/source/Annotation.ts +3 -3
  183. package/source/Branch.ts +1 -0
  184. package/source/Composition.ts +0 -6
  185. package/source/Context.ts +1 -0
  186. package/source/Directive.test.ts +1 -1
  187. package/source/Directive.ts +5 -6
  188. package/source/Endpoint.ts +59 -17
  189. package/source/Factory.ts +22 -13
  190. package/source/Gateway.ts +65 -18
  191. package/source/HTTP/Context.ts +26 -3
  192. package/source/HTTP/Server.ts +60 -46
  193. package/source/HTTP/exceptions.ts +13 -1
  194. package/source/HTTP/formats/index.ts +3 -3
  195. package/source/HTTP/messages.test.ts +45 -2
  196. package/source/HTTP/messages.ts +32 -8
  197. package/source/Introspection.ts +11 -0
  198. package/source/Mapping.ts +68 -21
  199. package/source/Query.test.ts +3 -3
  200. package/source/Query.ts +123 -33
  201. package/source/RTD/Context.ts +1 -1
  202. package/source/RTD/Endpoint.ts +3 -0
  203. package/source/RTD/Method.ts +16 -0
  204. package/source/RTD/Node.ts +29 -13
  205. package/source/RTD/Route.ts +5 -4
  206. package/source/RTD/Tree.ts +2 -2
  207. package/source/RTD/factory.ts +5 -2
  208. package/source/RTD/syntax/parse.test.ts +1 -1
  209. package/source/RTD/syntax/parse.ts +37 -24
  210. package/source/RTD/syntax/types.ts +6 -4
  211. package/source/Remotes.ts +7 -6
  212. package/source/Tenant.ts +6 -20
  213. package/source/deployment.ts +33 -23
  214. package/source/directives/auth/Authorization.ts +45 -22
  215. package/source/directives/auth/Delegate.ts +42 -0
  216. package/source/directives/auth/Echo.ts +19 -5
  217. package/source/directives/auth/Federation.ts +84 -0
  218. package/source/directives/auth/Incept.ts +4 -3
  219. package/source/directives/auth/Role.test.ts +53 -6
  220. package/source/directives/auth/Role.ts +22 -14
  221. package/source/directives/auth/Scheme.ts +1 -1
  222. package/source/directives/auth/split.ts +1 -1
  223. package/source/directives/auth/types.ts +2 -2
  224. package/source/directives/cache/Cache.ts +13 -6
  225. package/source/directives/cache/Control.ts +42 -16
  226. package/source/directives/cors/CORS.ts +1 -1
  227. package/source/directives/dev/Development.ts +1 -1
  228. package/source/directives/flow/Compose.ts +68 -0
  229. package/source/directives/flow/Fetch.ts +86 -0
  230. package/source/directives/flow/Flow.ts +42 -0
  231. package/source/directives/flow/index.ts +3 -0
  232. package/source/directives/flow/types.ts +7 -0
  233. package/source/directives/index.ts +3 -1
  234. package/source/directives/io/IO.ts +1 -1
  235. package/source/directives/io/Input.ts +4 -4
  236. package/source/directives/io/Output.ts +5 -4
  237. package/source/directives/octets/Context.ts +3 -2
  238. package/source/directives/octets/Delete.ts +11 -11
  239. package/source/directives/octets/Get.ts +84 -0
  240. package/source/directives/octets/Octets.ts +8 -12
  241. package/source/directives/octets/{Store.ts → Put.ts} +36 -21
  242. package/source/directives/octets/Workflow.ts +1 -1
  243. package/source/directives/octets/bytes.test.ts +30 -0
  244. package/source/directives/octets/bytes.ts +18 -0
  245. package/source/directives/octets/schemas.ts +4 -8
  246. package/source/directives/octets/workflows/Execution.ts +60 -8
  247. package/source/directives/octets/workflows/Workflow.ts +4 -4
  248. package/source/directives/require/Directive.ts +5 -0
  249. package/source/directives/require/Headers.ts +20 -0
  250. package/source/directives/require/Require.ts +28 -0
  251. package/source/directives/require/index.ts +3 -0
  252. package/source/directives/vary/Directive.ts +2 -1
  253. package/source/directives/vary/Embed.ts +14 -8
  254. package/source/directives/vary/Vary.ts +6 -4
  255. package/source/directives/vary/embeddings/Authority.ts +8 -0
  256. package/source/directives/vary/embeddings/Embedding.ts +2 -1
  257. package/source/directives/vary/embeddings/Language.ts +2 -2
  258. package/source/directives/vary/embeddings/Parameter.ts +14 -0
  259. package/source/directives/vary/embeddings/index.ts +6 -4
  260. package/source/exceptions.ts +17 -11
  261. package/source/manifest.ts +10 -11
  262. package/source/root.ts +5 -5
  263. package/source/schemas.ts +1 -1
  264. package/transpiled/Annotation.d.ts +3 -3
  265. package/transpiled/Branch.d.ts +1 -0
  266. package/transpiled/Composition.d.ts +0 -1
  267. package/transpiled/Composition.js +0 -4
  268. package/transpiled/Composition.js.map +1 -1
  269. package/transpiled/Context.d.ts +1 -0
  270. package/transpiled/Directive.js +5 -5
  271. package/transpiled/Directive.js.map +1 -1
  272. package/transpiled/Endpoint.d.ts +6 -4
  273. package/transpiled/Endpoint.js +39 -9
  274. package/transpiled/Endpoint.js.map +1 -1
  275. package/transpiled/Factory.d.ts +3 -2
  276. package/transpiled/Factory.js +18 -10
  277. package/transpiled/Factory.js.map +1 -1
  278. package/transpiled/Gateway.d.ts +3 -0
  279. package/transpiled/Gateway.js +49 -10
  280. package/transpiled/Gateway.js.map +1 -1
  281. package/transpiled/HTTP/Context.d.ts +9 -2
  282. package/transpiled/HTTP/Context.js +16 -2
  283. package/transpiled/HTTP/Context.js.map +1 -1
  284. package/transpiled/HTTP/Server.d.ts +13 -2
  285. package/transpiled/HTTP/Server.js +46 -39
  286. package/transpiled/HTTP/Server.js.map +1 -1
  287. package/transpiled/HTTP/exceptions.d.ts +7 -1
  288. package/transpiled/HTTP/exceptions.js +13 -1
  289. package/transpiled/HTTP/exceptions.js.map +1 -1
  290. package/transpiled/HTTP/formats/index.js +3 -3
  291. package/transpiled/HTTP/formats/index.js.map +1 -1
  292. package/transpiled/HTTP/messages.d.ts +2 -1
  293. package/transpiled/HTTP/messages.js +30 -7
  294. package/transpiled/HTTP/messages.js.map +1 -1
  295. package/transpiled/Introspection.d.ts +9 -0
  296. package/transpiled/Introspection.js +3 -0
  297. package/transpiled/Introspection.js.map +1 -0
  298. package/transpiled/Mapping.d.ts +11 -2
  299. package/transpiled/Mapping.js +50 -19
  300. package/transpiled/Mapping.js.map +1 -1
  301. package/transpiled/Query.d.ts +10 -1
  302. package/transpiled/Query.js +87 -30
  303. package/transpiled/Query.js.map +1 -1
  304. package/transpiled/RTD/Context.d.ts +1 -1
  305. package/transpiled/RTD/Endpoint.d.ts +1 -0
  306. package/transpiled/RTD/Method.d.ts +4 -0
  307. package/transpiled/RTD/Method.js +11 -0
  308. package/transpiled/RTD/Method.js.map +1 -1
  309. package/transpiled/RTD/Node.d.ts +4 -1
  310. package/transpiled/RTD/Node.js +23 -12
  311. package/transpiled/RTD/Node.js.map +1 -1
  312. package/transpiled/RTD/Route.d.ts +1 -1
  313. package/transpiled/RTD/Route.js +0 -1
  314. package/transpiled/RTD/Route.js.map +1 -1
  315. package/transpiled/RTD/Tree.d.ts +1 -1
  316. package/transpiled/RTD/Tree.js.map +1 -1
  317. package/transpiled/RTD/factory.js +5 -2
  318. package/transpiled/RTD/factory.js.map +1 -1
  319. package/transpiled/RTD/syntax/parse.js +34 -22
  320. package/transpiled/RTD/syntax/parse.js.map +1 -1
  321. package/transpiled/RTD/syntax/types.d.ts +5 -3
  322. package/transpiled/RTD/syntax/types.js +1 -1
  323. package/transpiled/RTD/syntax/types.js.map +1 -1
  324. package/transpiled/Remotes.d.ts +4 -4
  325. package/transpiled/Remotes.js +6 -5
  326. package/transpiled/Remotes.js.map +1 -1
  327. package/transpiled/Tenant.d.ts +5 -5
  328. package/transpiled/Tenant.js +2 -13
  329. package/transpiled/Tenant.js.map +1 -1
  330. package/transpiled/deployment.d.ts +1 -1
  331. package/transpiled/deployment.js +28 -20
  332. package/transpiled/deployment.js.map +1 -1
  333. package/transpiled/directives/auth/Authorization.d.ts +1 -1
  334. package/transpiled/directives/auth/Authorization.js +33 -19
  335. package/transpiled/directives/auth/Authorization.js.map +1 -1
  336. package/transpiled/directives/auth/Delegate.d.ts +10 -0
  337. package/transpiled/directives/auth/Delegate.js +34 -0
  338. package/transpiled/directives/auth/Delegate.js.map +1 -0
  339. package/transpiled/directives/auth/Echo.d.ts +4 -3
  340. package/transpiled/directives/auth/Echo.js +13 -3
  341. package/transpiled/directives/auth/Echo.js.map +1 -1
  342. package/transpiled/directives/auth/Federation.d.ts +16 -0
  343. package/transpiled/directives/auth/Federation.js +57 -0
  344. package/transpiled/directives/auth/Federation.js.map +1 -0
  345. package/transpiled/directives/auth/Incept.js +4 -3
  346. package/transpiled/directives/auth/Incept.js.map +1 -1
  347. package/transpiled/directives/auth/Role.d.ts +4 -1
  348. package/transpiled/directives/auth/Role.js +20 -14
  349. package/transpiled/directives/auth/Role.js.map +1 -1
  350. package/transpiled/directives/auth/Scheme.js +1 -1
  351. package/transpiled/directives/auth/Scheme.js.map +1 -1
  352. package/transpiled/directives/auth/split.js +1 -1
  353. package/transpiled/directives/auth/split.js.map +1 -1
  354. package/transpiled/directives/auth/types.d.ts +1 -1
  355. package/transpiled/directives/cache/Cache.d.ts +3 -3
  356. package/transpiled/directives/cache/Cache.js +10 -4
  357. package/transpiled/directives/cache/Cache.js.map +1 -1
  358. package/transpiled/directives/cache/Control.d.ts +2 -1
  359. package/transpiled/directives/cache/Control.js +29 -12
  360. package/transpiled/directives/cache/Control.js.map +1 -1
  361. package/transpiled/directives/cors/CORS.js +1 -1
  362. package/transpiled/directives/cors/CORS.js.map +1 -1
  363. package/transpiled/directives/dev/Development.js +1 -1
  364. package/transpiled/directives/dev/Development.js.map +1 -1
  365. package/transpiled/directives/flow/Compose.d.ts +8 -0
  366. package/transpiled/directives/flow/Compose.js +74 -0
  367. package/transpiled/directives/flow/Compose.js.map +1 -0
  368. package/transpiled/directives/flow/Fetch.d.ts +12 -0
  369. package/transpiled/directives/flow/Fetch.js +58 -0
  370. package/transpiled/directives/flow/Fetch.js.map +1 -0
  371. package/transpiled/directives/flow/Flow.d.ts +10 -0
  372. package/transpiled/directives/flow/Flow.js +33 -0
  373. package/transpiled/directives/flow/Flow.js.map +1 -0
  374. package/transpiled/directives/flow/index.d.ts +2 -0
  375. package/transpiled/directives/flow/index.js +6 -0
  376. package/transpiled/directives/flow/index.js.map +1 -0
  377. package/transpiled/directives/flow/types.d.ts +6 -0
  378. package/transpiled/directives/flow/types.js.map +1 -0
  379. package/transpiled/directives/index.js +3 -1
  380. package/transpiled/directives/index.js.map +1 -1
  381. package/transpiled/directives/io/IO.js +1 -1
  382. package/transpiled/directives/io/IO.js.map +1 -1
  383. package/transpiled/directives/io/Input.js +2 -2
  384. package/transpiled/directives/io/Input.js.map +1 -1
  385. package/transpiled/directives/io/Output.js +2 -2
  386. package/transpiled/directives/io/Output.js.map +1 -1
  387. package/transpiled/directives/octets/Context.js +4 -24
  388. package/transpiled/directives/octets/Context.js.map +1 -1
  389. package/transpiled/directives/octets/Delete.js +8 -8
  390. package/transpiled/directives/octets/Delete.js.map +1 -1
  391. package/transpiled/directives/octets/{Fetch.d.ts → Get.d.ts} +5 -6
  392. package/transpiled/directives/octets/{Fetch.js → Get.js} +24 -29
  393. package/transpiled/directives/octets/Get.js.map +1 -0
  394. package/transpiled/directives/octets/Octets.js +8 -12
  395. package/transpiled/directives/octets/Octets.js.map +1 -1
  396. package/transpiled/directives/octets/{Store.d.ts → Put.d.ts} +7 -2
  397. package/transpiled/directives/octets/{Store.js → Put.js} +26 -19
  398. package/transpiled/directives/octets/Put.js.map +1 -0
  399. package/transpiled/directives/octets/Workflow.js +1 -1
  400. package/transpiled/directives/octets/Workflow.js.map +1 -1
  401. package/transpiled/directives/octets/bytes.d.ts +1 -0
  402. package/transpiled/directives/octets/bytes.js +21 -0
  403. package/transpiled/directives/octets/bytes.js.map +1 -0
  404. package/transpiled/directives/octets/schemas.d.ts +4 -8
  405. package/transpiled/directives/octets/schemas.js +3 -6
  406. package/transpiled/directives/octets/schemas.js.map +1 -1
  407. package/transpiled/directives/octets/workflows/Execution.d.ts +5 -1
  408. package/transpiled/directives/octets/workflows/Execution.js +44 -9
  409. package/transpiled/directives/octets/workflows/Execution.js.map +1 -1
  410. package/transpiled/directives/octets/workflows/Workflow.d.ts +1 -1
  411. package/transpiled/directives/octets/workflows/Workflow.js +2 -1
  412. package/transpiled/directives/octets/workflows/Workflow.js.map +1 -1
  413. package/transpiled/directives/require/Directive.d.ts +4 -0
  414. package/transpiled/directives/require/Directive.js +3 -0
  415. package/transpiled/directives/require/Directive.js.map +1 -0
  416. package/transpiled/directives/require/Headers.d.ts +7 -0
  417. package/transpiled/directives/require/Headers.js +19 -0
  418. package/transpiled/directives/require/Headers.js.map +1 -0
  419. package/transpiled/directives/require/Require.d.ts +9 -0
  420. package/transpiled/directives/require/Require.js +27 -0
  421. package/transpiled/directives/require/Require.js.map +1 -0
  422. package/transpiled/directives/require/index.d.ts +2 -0
  423. package/transpiled/directives/require/index.js +6 -0
  424. package/transpiled/directives/require/index.js.map +1 -0
  425. package/transpiled/directives/vary/Directive.d.ts +2 -1
  426. package/transpiled/directives/vary/Embed.d.ts +2 -1
  427. package/transpiled/directives/vary/Embed.js +8 -6
  428. package/transpiled/directives/vary/Embed.js.map +1 -1
  429. package/transpiled/directives/vary/Vary.d.ts +2 -2
  430. package/transpiled/directives/vary/Vary.js +3 -3
  431. package/transpiled/directives/vary/Vary.js.map +1 -1
  432. package/transpiled/directives/vary/embeddings/Authority.d.ts +5 -0
  433. package/transpiled/directives/vary/embeddings/Authority.js +10 -0
  434. package/transpiled/directives/vary/embeddings/Authority.js.map +1 -0
  435. package/transpiled/directives/vary/embeddings/Embedding.d.ts +2 -1
  436. package/transpiled/directives/vary/embeddings/Language.js +2 -2
  437. package/transpiled/directives/vary/embeddings/Language.js.map +1 -1
  438. package/transpiled/directives/vary/embeddings/Parameter.d.ts +7 -0
  439. package/transpiled/directives/vary/embeddings/Parameter.js +14 -0
  440. package/transpiled/directives/vary/embeddings/Parameter.js.map +1 -0
  441. package/transpiled/directives/vary/embeddings/index.d.ts +2 -2
  442. package/transpiled/directives/vary/embeddings/index.js +8 -4
  443. package/transpiled/directives/vary/embeddings/index.js.map +1 -1
  444. package/transpiled/exceptions.d.ts +3 -2
  445. package/transpiled/exceptions.js +10 -5
  446. package/transpiled/exceptions.js.map +1 -1
  447. package/transpiled/manifest.js +10 -11
  448. package/transpiled/manifest.js.map +1 -1
  449. package/transpiled/root.js +5 -5
  450. package/transpiled/root.js.map +1 -1
  451. package/transpiled/schemas.d.ts +1 -1
  452. package/transpiled/schemas.js +2 -2
  453. package/transpiled/schemas.js.map +1 -1
  454. package/transpiled/tsconfig.tsbuildinfo +1 -1
  455. package/tsconfig.json +8 -2
  456. package/components/identity.basic/operations/create.d.ts +0 -10
  457. package/components/identity.basic/operations/create.js +0 -10
  458. package/components/identity.basic/operations/create.js.map +0 -1
  459. package/components/identity.basic/source/create.ts +0 -18
  460. package/components/identity.federation/operations/create.d.ts +0 -10
  461. package/components/identity.federation/operations/create.js.map +0 -1
  462. package/components/identity.federation/operations/schemas.d.ts +0 -59
  463. package/components/identity.federation/operations/schemas.js +0 -9
  464. package/components/identity.federation/operations/schemas.js.map +0 -1
  465. package/components/identity.federation/operations/types.js.map +0 -1
  466. package/components/identity.federation/source/schemas.ts +0 -61
  467. package/components/octets.storage/operations/fetch.js +0 -46
  468. package/components/octets.storage/operations/list.js +0 -7
  469. package/components/octets.storage/operations/permute.js +0 -7
  470. package/components/octets.storage/operations/store.js +0 -11
  471. package/features/steps/components/octets.tester/operations/diversify.js +0 -14
  472. package/schemas/octets/context.cos.yaml +0 -1
  473. package/schemas/octets/fetch.cos.yaml +0 -3
  474. package/schemas/octets/permute.cos.yaml +0 -1
  475. package/schemas/octets/store.cos.yaml +0 -3
  476. package/source/HTTP/Server.test.ts +0 -126
  477. package/source/directives/octets/Fetch.ts +0 -100
  478. package/source/directives/octets/List.ts +0 -72
  479. package/source/directives/octets/Permute.ts +0 -44
  480. package/transpiled/directives/octets/Fetch.js.map +0 -1
  481. package/transpiled/directives/octets/List.d.ts +0 -16
  482. package/transpiled/directives/octets/List.js +0 -74
  483. package/transpiled/directives/octets/List.js.map +0 -1
  484. package/transpiled/directives/octets/Permute.d.ts +0 -11
  485. package/transpiled/directives/octets/Permute.js +0 -58
  486. package/transpiled/directives/octets/Permute.js.map +0 -1
  487. package/transpiled/directives/octets/Store.js.map +0 -1
  488. /package/schemas/octets/{list.cos.yaml → get.cos.yaml} +0 -0
  489. /package/{components/identity.federation/operations → transpiled/directives/flow}/types.js +0 -0
@@ -4,24 +4,22 @@ name: storage
4
4
  storages: ~
5
5
 
6
6
  operations:
7
- store:
7
+ put:
8
8
  bindings: ~
9
9
  input:
10
10
  storage*: string
11
11
  request*: ~
12
12
  accept: string
13
- meta: <string>
14
- fetch: &simple
13
+ limit: number
14
+ trust: ~ # array of strings or regular expressions
15
+ errors:
16
+ - LOCATION_UNTRUSTED
17
+ - LOCATION_LENGTH
18
+ - LOCATION_UNAVAILABLE
19
+ get: &simple
15
20
  bindings: ~
16
21
  input:
17
22
  storage*: string
18
23
  path*: string
19
- get: *simple
20
- list: *simple
24
+ head: *simple
21
25
  delete: *simple
22
- permute:
23
- bindings: ~
24
- input:
25
- storage*: string
26
- path*: string
27
- list*: [string]
@@ -1,7 +1,7 @@
1
1
  'use strict'
2
2
 
3
- function get (input, context) {
4
- return context.storages[input.storage].get(input.path)
3
+ async function get (input, context) {
4
+ return await context.storages[input.storage].get(input.path)
5
5
  }
6
6
 
7
- exports.computation = get
7
+ exports.effect = get
@@ -0,0 +1,7 @@
1
+ 'use strict'
2
+
3
+ async function head (input, context) {
4
+ return await context.storages[input.storage].head(input.path)
5
+ }
6
+
7
+ exports.computation = head
@@ -0,0 +1,121 @@
1
+ 'use strict'
2
+
3
+ const { Readable } = require('node:stream')
4
+ const { Err } = require('error-value')
5
+ const { match } = require('matchacho')
6
+
7
+ async function put (input, context) {
8
+ const { storage, request, accept, limit, trust } = input
9
+ const path = request.url
10
+ const claim = request.headers['content-type']
11
+ const attributes = parseAttributes(request.headers['content-attributes'])
12
+ const location = request.headers['content-location']
13
+
14
+ /** @type {Readable} */
15
+ let body = request
16
+
17
+ const options = { claim, accept, attributes }
18
+
19
+ if (location !== undefined) {
20
+ const length = Number.parseInt(request.headers['content-length'])
21
+
22
+ if (length !== 0)
23
+ return ERR_LENGTH
24
+
25
+ if (!trusted(location, trust))
26
+ return ERR_UNTRUSTED
27
+
28
+ body = await download(location)
29
+
30
+ if (body instanceof Error)
31
+ return body
32
+
33
+ options.origin = location
34
+ }
35
+
36
+ if (limit !== undefined)
37
+ options.limit = limit
38
+
39
+ return context.storages[storage].put(path, body, options)
40
+ }
41
+
42
+ /**
43
+ * @param {string | string[] | undefined} values
44
+ * @returns {Record<string, string>}
45
+ */
46
+ function parseAttributes (values) {
47
+ const attributes = {}
48
+
49
+ if (values === undefined)
50
+ return attributes
51
+
52
+ if (typeof values === 'string')
53
+ values = values.split(',')
54
+
55
+ for (const pair of values) {
56
+ const eq = pair.indexOf('=')
57
+ const key = (eq === -1 ? pair : pair.slice(0, eq)).trim()
58
+
59
+ attributes[key] = eq === -1 ? 'true' : pair.slice(eq + 1).trim()
60
+ }
61
+
62
+ return attributes
63
+ }
64
+
65
+ /**
66
+ * @param {string} location
67
+ * @return {Readable | Error}
68
+ */
69
+ async function download (location) {
70
+ const response = await fetch(location)
71
+
72
+ if (!response.ok)
73
+ return ERR_UNAVAILABLE
74
+
75
+ return response.body === null ? ERR_UNAVAILABLE : Readable.fromWeb(
76
+ /** @type {import('node:stream/web').ReadableStream} **/ response.body)
77
+
78
+ }
79
+
80
+ /**
81
+ * @param {string} location
82
+ * @param {Trust | undefined} trust
83
+ * @return {boolean}
84
+ */
85
+ function trusted (location, trust) {
86
+ if (trust === undefined)
87
+ return false
88
+
89
+ const url = toURL(location)
90
+
91
+ if (url === null)
92
+ return false
93
+
94
+ for (const permission of trust) {
95
+ const ok = match(permission,
96
+ String, (origin) => url.origin === origin,
97
+ RegExp, (pattern) => pattern.test(url.origin))
98
+
99
+ if (ok)
100
+ return true
101
+ }
102
+
103
+ return false
104
+ }
105
+
106
+ function toURL (location) {
107
+ try {
108
+ return new URL(location)
109
+ } catch (error) {
110
+ return null
111
+ }
112
+ }
113
+
114
+ const ERR_UNTRUSTED = Err('LOCATION_UNTRUSTED', 'Location is not trusted')
115
+ const ERR_LENGTH = Err('LOCATION_LENGTH', 'Content-Length must be 0 when Content-Location is used')
116
+ const ERR_UNAVAILABLE = Err('LOCATION_UNAVAILABLE', 'Location is not available')
117
+
118
+ exports.effect = put
119
+
120
+ /** @typedef {Array<string | RegExp>} Trust */
121
+ /** @typedef {import('node:stream').Readable} Readable */
@@ -14,8 +14,8 @@
14
14
  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
- If none of the directives grants access, then the Authorization interrupts request processing and responds with an
18
- authorization error.
17
+ If none of the directives grants access, then the Authorization interrupts request processing and
18
+ responds with an authorization error.
19
19
 
20
20
  > The Authorization directive provider is named `authorization`,
21
21
  > so the full names of the directives are `authorization:{directive}`.
@@ -25,7 +25,7 @@ authorization error.
25
25
  Grants access if its value is `true` and no credentials were provided[^1].
26
26
 
27
27
  [^1]: Credentials in the request make the
28
- response [non-chachable](https://datatracker.ietf.org/doc/html/rfc7234#section-3).
28
+ response [non-cachable](https://datatracker.ietf.org/doc/html/rfc7234#section-3).
29
29
 
30
30
  ### `id`
31
31
 
@@ -37,11 +37,8 @@ the directive's value.
37
37
  Given the Route declaration and corresponding HTTP request:
38
38
 
39
39
  ```yaml
40
- # context.toa.yaml
41
-
42
- exposition:
43
- /users/:user-id:
44
- id: "user-id"
40
+ /users/:user-id:
41
+ id: "user-id"
45
42
  ```
46
43
 
47
44
  ```http
@@ -56,46 +53,97 @@ is `87480f2bd88048518c529d7957475ecd`.
56
53
 
57
54
  Grants access if resolved Identity has a role matching the directive's value or one of its values.
58
55
 
59
- #### Example
60
-
61
56
  ```yaml
62
- # context.toa.yaml
63
-
64
- exposition:
65
- /code:
66
- role: [developer, reviewer]
57
+ /code:
58
+ role: [developer, reviewer]
67
59
  ```
68
60
 
69
61
  Access will be granted if the resolved Identity has a role that matches `developer` or `reviewer`.
70
62
 
71
63
  Read [Roles](#roles) section for more details.
72
64
 
65
+ #### Dynamic roles
66
+
67
+ The `role` directive can be used with a placeholder in the route.
68
+
69
+ ```yaml
70
+ /:org-id:
71
+ role: app:{org-id}:moderator
72
+ ```
73
+
74
+ ### `claim`
75
+
76
+ Grants access if `Bearer` authentication scheme is used and the claim's property matches specified.
77
+
78
+ ```yaml
79
+ /:
80
+ auth:claim:
81
+ iss: https://id.example.com
82
+ sub: someone
83
+ aud: stars
84
+ ```
85
+
86
+ > If OIDC token claim contains `aud`
87
+ > as [an array](https://openid.net/specs/openid-connect-core-1_0.html#IDTokenValidation), the
88
+ > directive will match if at least one value.
89
+
90
+ At least one property is required.
91
+
92
+ Values may refer to the Route parameters, or a request authority:
93
+
94
+ ```yaml
95
+ /secrets/:org-id:
96
+ auth:claim:
97
+ iss: https://id.org.com
98
+ sub: /:org-id
99
+ aud: :authority
100
+ ```
101
+
102
+ An expression `:domain` will match if the domain in the value of `iss` matches the request
103
+ authority, excluding the most specific subdomain.
104
+
105
+ Issuer `https://accounts.example.com` matches request authorities `images.example.com`
106
+ and `sub.images.example.com`, but not `images.another.com`.
107
+
108
+ ```yaml
109
+ /images/:user-id:
110
+ auth:claim:
111
+ iss: :domain
112
+ sub: /:org-id
113
+ ```
114
+
73
115
  ### `rule`
74
116
 
75
117
  The Rule is a collection of authorization directives. It allows access only if all the specified
76
- directives grant
77
- access. The value of the `rule` directive can be a single Rule or a list of Rules.
118
+ directives grant access. The value of the `rule` directive can be a single Rule or a list of Rules.
78
119
 
79
120
  #### Example
80
121
 
81
122
  ```yaml
82
- # context.toa.yaml
83
-
84
- exposition:
85
- /commits/:user-id:
86
- rule:
87
- id: user-id
88
- role: developer
123
+ /commits/:user-id:
124
+ rule:
125
+ id: user-id
126
+ role: developer
89
127
  ```
90
128
 
91
129
  Access will be granted if an Identity matches a `user-id` placeholder and has a Role of `developer`.
92
130
 
131
+ ### `delegate`
132
+
133
+ Embeds the value of the current Identity into the request body as a property named after the value
134
+ of the directive value, and grants access.
135
+ The request body must be an object.
136
+
137
+ > :warning:<br/>
138
+ > The intended use case for this directive is audit.
139
+ > **Using it to pass Identity to the application logic is strongly discouraged.**
140
+
93
141
  ## Roles
94
142
 
95
143
  Role values are strings that can be assigned to an Identity and used for matching with values of
96
144
  the [`role` directive](#role).
97
145
 
98
- ### Hierarchy
146
+ ### Hierarchies
99
147
 
100
148
  Role values are alphanumeric tokens separated by a colon (`:`).
101
149
  Each token defines a Role Scope, forming a hierarchy.
@@ -105,11 +153,8 @@ directive.
105
153
  #### Example
106
154
 
107
155
  ```yaml
108
- # context.toa.yaml
109
-
110
- /exposition:
111
- /commits/:user-id:
112
- role: developer:senior
156
+ /commits/:user-id:
157
+ role: developer:senior
113
158
  ```
114
159
 
115
160
  The example above defines a `role` directive with the specified `developer:senior` Role Scope.
@@ -124,18 +169,10 @@ In other words, the Identity must have a specified or more general Role.
124
169
  </picture>
125
170
  </a>
126
171
 
127
-
128
172
  > The root-level Role Scope `system` is preserved and cannot be used with the `role` directives.
129
173
 
130
174
  See also [role management resources](components.md#roles).
131
175
 
132
- #### Authorization Directives
133
-
134
- ```yaml
135
- /identity/roles/:id:
136
- role: system:roles
137
- ````
138
-
139
176
  ## Policies
140
177
 
141
178
  Component Resource branches cannot have authorization directives.
@@ -0,0 +1,49 @@
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
+ ## Embedding
21
+
22
+ To pass the requested authority to the operation call, [`vary:embed` directive](vary.md#embeddings)
23
+ can be used.
24
+
25
+ ```yaml
26
+ # manifest.toa.yaml
27
+
28
+ exposition:
29
+ /:
30
+ GET:
31
+ vary:embed:
32
+ app: authority
33
+ endpoint: observe
34
+ ```
35
+
36
+ If the value of the `authority` pseudo-header is not present in the `authorities` definition,
37
+ then the value of the `authority` pseudo-header is embedded as is.
38
+
39
+ ## Identity
40
+
41
+ Credentials stored or issued by the [authentication system](identity.md) are associated with an
42
+ authority.
43
+ Credentials in one authority are not valid in another,
44
+ or may be associated with a different Identity; in other words, Identity exists in the context of an
45
+ authority.
46
+
47
+ > :warning:<br/>
48
+ > Changing the authority identifier will break compatibility with existing stored or issued
49
+ > 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
@@ -96,11 +96,14 @@ The `identity.federation` component manages OpenID Connect federated identities.
96
96
  Both implicit identities creation and forced [identity inception](./identity.md) are supported
97
97
  as in case with basic credentials. `principal` is also working in the same way.
98
98
 
99
- The configuration schema alongside default values is described in the [component manifest](../components/identity.federation/manifest.toa.yaml).
99
+ The configuration schema alongside default values is described in
100
+ the [component manifest](../components/identity.federation/manifest.toa.yaml).
100
101
 
101
- No federated tokens are accepted by default until at least one entry is added to the `trust` configuration.
102
+ No federated tokens are accepted by default until at least one entry is added to the `trust`
103
+ configuration.
102
104
 
103
- Toa supports either asymmetric RS256 or symmetric HS256 / HS384 / HS512 tokens with pre-shared secrets.
105
+ Toa supports either asymmetric RS256 or symmetric HS256 / HS384 / HS512 tokens with pre-shared
106
+ secrets.
104
107
 
105
108
  ```yaml
106
109
  # context.toa.yaml
@@ -108,8 +111,8 @@ Toa supports either asymmetric RS256 or symmetric HS256 / HS384 / HS512 tokens w
108
111
  configuration:
109
112
  identity.federation:
110
113
  trust:
111
- - issuer: https://token.actions.githubusercontent.com
112
- audience:
114
+ - iss: https://token.actions.githubusercontent.com
115
+ aud:
113
116
  - https://github.com/tinovyatkin
114
117
  - https://github.com/temich
115
118
 
@@ -132,6 +135,14 @@ The new token is issued each time the request is made:
132
135
  1. Using authentication scheme other than `Token`.
133
136
  2. Using `Token` authentication scheme with an [obsolete token](#token-rotation).
134
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
+
135
146
  ### Token encryption
136
147
 
137
148
  Issued tokens are encrypted
@@ -153,19 +164,16 @@ The `key0` configuration value is required.
153
164
  ### Token rotation
154
165
 
155
166
  Issued tokens are valid for a `lifetime` period defined in the configuration. After the `refresh`
156
- period, the token is
157
- considered obsolete (yet still valid), and a new token is [issued](#issuing-tokens) unless the
158
- provided one has
159
- been [revoked](#token-revocation).
167
+ period, the token is considered obsolete (yet still valid), and a new token
168
+ is [issued](#issuing-tokens) unless the provided one has been [revoked](#token-revocation).
160
169
 
161
170
  This essentially means that if the client uses the token at least once every `lifetime` period, it
162
- will always have a
163
- valid token to authenticate with. Also, token revocation or changing roles of an Identity will take
164
- effect once
165
- the `refresh` period of the currently issued tokens has expired.
171
+ will always have a valid token to authenticate with.
172
+ Also, token revocation or changing roles of an Identity will take effect once the `refresh` period
173
+ of the currently issued tokens has expired.
166
174
 
167
175
  Adjusting these two values is a delicate trade-off between security, performance and client
168
- convinience.
176
+ convenience.
169
177
 
170
178
  ```yaml
171
179
  # context.toa.yaml
@@ -249,13 +257,26 @@ configuration:
249
257
  key1: $TOKEN_ENCRYPTION_KEY_2023Q3
250
258
  ```
251
259
 
252
- ## Roles
260
+ ### Token resources
261
+
262
+ `/identity/tokens/`
253
263
 
254
- The `identity.roles` component manages roles of an Identity used by [access authorization](access.md#role).
264
+ `POST` Issue a new token for the Identity. Request body is as follows:
265
+
266
+ ```yaml
267
+ lifetime?: number # seconds
268
+ ```
269
+
270
+ Providing a value of `0` will result in the token being issued with no expiration.
271
+ However, it will still become invalid once the encryption key used is out
272
+ of [rotation](#secret-rotation).
273
+
274
+ ## Roles
255
275
 
256
- ### Role resources
276
+ The `identity.roles` component manages roles of an Identity used
277
+ by [access authorization](access.md#role).
257
278
 
258
- #### `/identity/roles/:id/`
279
+ ### `/identity/roles/:id/`
259
280
 
260
281
  `GET` Get roles of an Identity.
261
282
 
@@ -267,13 +288,16 @@ Access requires credentials of the Identity or `system:identity:roles` role.
267
288
  role: string
268
289
  ```
269
290
 
270
- Access requires `system:identity:roles` role.
291
+ To assign arbitrary roles, the `system:identity:roles` role is required.
292
+
293
+ An Identity having `system:identity:roles:delegation` role can delegate roles within its own
294
+ Role Scopes (see [Role Hierarchies](access.md#hierarchies)).
271
295
 
272
296
  ## Banned Identities
273
297
 
274
298
  The `identity.bans` component manages banned identities.
275
- A banned identity will fail to authenticate with any associated credentials (except [tokens](#stateless-tokens) within
276
- the `refresh` period).
299
+ A banned identity will fail to authenticate with any associated credentials
300
+ (except [tokens](#stateless-tokens) within the `refresh` period).
277
301
 
278
302
  ```http
279
303
  PUT /identity/bans/:id/
@@ -281,6 +305,7 @@ authorization: Basic dXNlcm5hbWU6cGFzc3dvcmQ=
281
305
  content-type: application/yaml
282
306
 
283
307
  banned: true
308
+ comment: Bye bye
284
309
  ```
285
310
 
286
311
  Access requires `system:identity:bans` role.
@@ -304,3 +329,17 @@ roles:
304
329
  - developer
305
330
  - system:identity:roles
306
331
  ```
332
+
333
+ When no credentials are provided, transient Identity is created.
334
+
335
+ ```http
336
+ GET /identity/
337
+ accept: application/yaml
338
+ ```
339
+
340
+ ```
341
+ 201 Created
342
+
343
+ id: 332017649c814649b25ee466c1fe4534
344
+ roles: []
345
+ ```
@@ -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.