@toa.io/extensions.exposition 1.0.0-alpha.5 → 1.0.0-alpha.51

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (443) hide show
  1. package/components/context.toa.yaml +2 -2
  2. package/components/identity.bans/manifest.toa.yaml +15 -7
  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 +22 -9
  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 +5 -3
  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 +8 -6
  24. package/components/identity.basic/source/types.ts +8 -4
  25. package/components/identity.federation/manifest.toa.yaml +32 -22
  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/jwt.d.ts +4 -5
  33. package/components/identity.federation/operations/lib/jwt.js +12 -7
  34. package/components/identity.federation/operations/lib/jwt.js.map +1 -1
  35. package/components/identity.federation/operations/tsconfig.tsbuildinfo +1 -1
  36. package/components/identity.federation/operations/types/configuration.d.ts +14 -0
  37. package/components/identity.federation/operations/types/configuration.js +3 -0
  38. package/components/identity.federation/operations/types/configuration.js.map +1 -0
  39. package/components/identity.federation/operations/{types.d.ts → types/context.d.ts} +15 -7
  40. package/components/identity.federation/operations/types/context.js +3 -0
  41. package/components/identity.federation/operations/types/context.js.map +1 -0
  42. package/components/identity.federation/operations/types/entity.d.ts +6 -0
  43. package/components/identity.federation/operations/types/entity.js +3 -0
  44. package/components/identity.federation/operations/types/entity.js.map +1 -0
  45. package/components/identity.federation/operations/types/index.d.ts +3 -0
  46. package/components/identity.federation/operations/types/index.js +20 -0
  47. package/components/identity.federation/operations/types/index.js.map +1 -0
  48. package/components/identity.federation/source/authenticate.ts +6 -19
  49. package/components/identity.federation/source/{create.ts → incept.ts} +10 -9
  50. package/components/identity.federation/source/lib/jwt.test.ts +50 -4
  51. package/components/identity.federation/source/lib/jwt.ts +20 -12
  52. package/components/identity.federation/source/types/configuration.ts +15 -0
  53. package/components/identity.federation/source/{types.ts → types/context.ts} +17 -6
  54. package/components/identity.federation/source/types/entity.ts +6 -0
  55. package/components/identity.federation/source/types/index.ts +3 -0
  56. package/components/identity.federation/tsconfig.json +2 -2
  57. package/components/identity.roles/manifest.toa.yaml +18 -6
  58. package/components/identity.roles/operations/grant.d.ts +10 -0
  59. package/components/identity.roles/operations/grant.js +21 -0
  60. package/components/identity.roles/operations/grant.js.map +1 -0
  61. package/components/identity.roles/operations/lib/Entity.d.ts +5 -0
  62. package/components/identity.roles/operations/lib/Entity.js +3 -0
  63. package/components/identity.roles/operations/lib/Entity.js.map +1 -0
  64. package/components/identity.roles/operations/list.d.ts +1 -4
  65. package/components/identity.roles/operations/list.js.map +1 -1
  66. package/components/identity.roles/operations/principal.d.ts +4 -6
  67. package/components/identity.roles/operations/principal.js +6 -1
  68. package/components/identity.roles/operations/principal.js.map +1 -1
  69. package/components/identity.roles/operations/tsconfig.tsbuildinfo +1 -1
  70. package/components/identity.roles/source/grant.ts +32 -0
  71. package/components/identity.roles/source/lib/Entity.ts +5 -0
  72. package/components/identity.roles/source/list.ts +2 -4
  73. package/components/identity.roles/source/principal.ts +10 -8
  74. package/components/identity.tokens/manifest.toa.yaml +19 -5
  75. package/components/identity.tokens/operations/authenticate.d.ts +2 -2
  76. package/components/identity.tokens/operations/authenticate.js +12 -5
  77. package/components/identity.tokens/operations/authenticate.js.map +1 -1
  78. package/components/identity.tokens/operations/decrypt.js +1 -0
  79. package/components/identity.tokens/operations/decrypt.js.map +1 -1
  80. package/components/identity.tokens/operations/encrypt.js +5 -1
  81. package/components/identity.tokens/operations/encrypt.js.map +1 -1
  82. package/components/identity.tokens/operations/tsconfig.tsbuildinfo +1 -1
  83. package/components/identity.tokens/operations/types.d.ts +8 -2
  84. package/components/identity.tokens/receivers/identity.bans.created.js +3 -0
  85. package/components/identity.tokens/source/authenticate.test.ts +11 -4
  86. package/components/identity.tokens/source/authenticate.ts +14 -6
  87. package/components/identity.tokens/source/decrypt.test.ts +5 -3
  88. package/components/identity.tokens/source/decrypt.ts +9 -8
  89. package/components/identity.tokens/source/encrypt.test.ts +26 -2
  90. package/components/identity.tokens/source/encrypt.ts +5 -1
  91. package/components/identity.tokens/source/types.ts +9 -2
  92. package/components/octets.storage/manifest.toa.yaml +0 -7
  93. package/documentation/access.md +75 -38
  94. package/documentation/authorities.md +49 -0
  95. package/documentation/cache.md +8 -1
  96. package/documentation/components.md +47 -22
  97. package/documentation/flow.md +31 -0
  98. package/documentation/identity.md +17 -22
  99. package/documentation/introspection.md +68 -0
  100. package/documentation/io.md +56 -0
  101. package/documentation/octets.md +34 -23
  102. package/documentation/protocol.md +3 -0
  103. package/documentation/query.md +17 -11
  104. package/documentation/require.md +15 -0
  105. package/documentation/tree.md +35 -4
  106. package/documentation/vary.md +14 -14
  107. package/features/access.feature +89 -47
  108. package/features/annotation.feature +2 -0
  109. package/features/auth.claim.feature +170 -0
  110. package/features/authorities.basic.feature +141 -0
  111. package/features/authorities.feature +32 -0
  112. package/features/authorities.federation.feature +100 -0
  113. package/features/authorities.tokens.feature +117 -0
  114. package/features/body.feature +4 -0
  115. package/features/cache.feature +112 -5
  116. package/features/cors.feature +5 -0
  117. package/features/debug.feature +34 -0
  118. package/features/directives.feature +5 -0
  119. package/features/dynamic.feature +18 -7
  120. package/features/errors.feature +18 -4
  121. package/features/etag.feature +7 -0
  122. package/features/flow.feature +45 -0
  123. package/features/identity.bans.feature +137 -0
  124. package/features/identity.basic.feature +142 -19
  125. package/features/identity.feature +7 -2
  126. package/features/identity.federation.feature +68 -15
  127. package/features/identity.roles.feature +251 -7
  128. package/features/identity.tokens.feature +57 -4
  129. package/features/introspection.feature +76 -0
  130. package/features/io.feature +205 -0
  131. package/features/octets.entries.feature +10 -1
  132. package/features/octets.feature +60 -64
  133. package/features/octets.meta.feature +7 -3
  134. package/features/octets.workflows.feature +240 -19
  135. package/features/probes.feature +14 -0
  136. package/features/{queries.feature → query.feature} +50 -3
  137. package/features/require.feature +67 -0
  138. package/features/response.feature +12 -3
  139. package/features/routes.feature +110 -12
  140. package/features/steps/Database.ts +17 -10
  141. package/features/steps/Gateway.ts +23 -6
  142. package/features/steps/IdP.ts +30 -25
  143. package/features/steps/components/echo/manifest.toa.yaml +12 -1
  144. package/features/steps/components/echo/operations/identity.js +7 -0
  145. package/features/steps/components/echo/operations/parameters.js +7 -0
  146. package/features/steps/components/echo.beacon/manifest.toa.yaml +2 -0
  147. package/features/steps/components/echo.beacon/operations/hello.js +5 -0
  148. package/features/steps/components/octets.tester/manifest.toa.yaml +22 -1
  149. package/features/steps/components/octets.tester/operations/authority.js +7 -0
  150. package/features/steps/components/octets.tester/operations/baz.js +1 -2
  151. package/features/steps/components/octets.tester/operations/diversify.js +3 -1
  152. package/features/steps/components/octets.tester/operations/foo.js +2 -2
  153. package/features/steps/components/octets.tester/operations/redirect.js +12 -0
  154. package/features/steps/components/octets.tester/operations/yex.js +16 -0
  155. package/features/steps/components/octets.tester/operations/yield.js +13 -0
  156. package/features/steps/components/pots/manifest.toa.yaml +16 -3
  157. package/features/steps/components/users.properties/manifest.toa.yaml +2 -1
  158. package/features/streams.feature +1 -0
  159. package/features/timing.feature +27 -1
  160. package/features/vary.feature +104 -3
  161. package/package.json +12 -11
  162. package/readme.md +19 -14
  163. package/schemas/annotation.cos.yaml +1 -1
  164. package/schemas/io/input.cos.yaml +3 -0
  165. package/schemas/io/message.cos.yaml +5 -0
  166. package/schemas/io/output.cos.yaml +5 -0
  167. package/schemas/node.cos.yaml +1 -0
  168. package/source/Annotation.ts +3 -3
  169. package/source/Composition.ts +2 -2
  170. package/source/Directive.ts +4 -5
  171. package/source/Endpoint.ts +18 -12
  172. package/source/Factory.ts +10 -11
  173. package/source/Gateway.ts +55 -20
  174. package/source/HTTP/Context.ts +24 -2
  175. package/source/HTTP/Server.ts +51 -43
  176. package/source/HTTP/exceptions.ts +7 -1
  177. package/source/HTTP/messages.test.ts +39 -2
  178. package/source/HTTP/messages.ts +7 -3
  179. package/source/Mapping.ts +6 -1
  180. package/source/Query.test.ts +1 -1
  181. package/source/Query.ts +35 -24
  182. package/source/RTD/Endpoint.ts +3 -0
  183. package/source/RTD/Method.ts +4 -0
  184. package/source/RTD/Node.ts +10 -2
  185. package/source/RTD/Route.ts +5 -4
  186. package/source/RTD/factory.ts +5 -2
  187. package/source/RTD/syntax/parse.ts +37 -24
  188. package/source/RTD/syntax/types.ts +2 -1
  189. package/source/Remotes.ts +4 -4
  190. package/source/Tenant.ts +0 -8
  191. package/source/deployment.ts +32 -22
  192. package/source/directives/auth/Authorization.ts +40 -17
  193. package/source/directives/auth/Delegate.ts +42 -0
  194. package/source/directives/auth/Federation.ts +84 -0
  195. package/source/directives/auth/Incept.ts +4 -3
  196. package/source/directives/auth/Role.test.ts +53 -6
  197. package/source/directives/auth/Role.ts +22 -14
  198. package/source/directives/auth/types.ts +1 -1
  199. package/source/directives/cache/Cache.ts +13 -6
  200. package/source/directives/cache/Control.ts +42 -16
  201. package/source/directives/dev/Development.ts +1 -1
  202. package/source/directives/flow/Fetch.ts +88 -0
  203. package/source/directives/flow/Flow.ts +34 -0
  204. package/source/directives/flow/index.ts +3 -0
  205. package/source/directives/flow/types.ts +6 -0
  206. package/source/directives/index.ts +6 -3
  207. package/source/directives/io/Directive.ts +11 -0
  208. package/source/directives/io/IO.ts +43 -0
  209. package/source/directives/io/Input.ts +50 -0
  210. package/source/directives/io/Message.ts +1 -0
  211. package/source/directives/io/Output.ts +69 -0
  212. package/source/directives/io/index.ts +3 -0
  213. package/source/directives/io/schemas.ts +12 -0
  214. package/source/directives/octets/Context.ts +4 -3
  215. package/source/directives/octets/Delete.ts +4 -2
  216. package/source/directives/octets/Directive.ts +10 -0
  217. package/source/directives/octets/Fetch.ts +14 -12
  218. package/source/directives/octets/List.ts +9 -7
  219. package/source/directives/octets/Octets.ts +4 -5
  220. package/source/directives/octets/Store.ts +4 -2
  221. package/source/directives/octets/Workflow.ts +10 -3
  222. package/source/directives/octets/schemas.ts +4 -4
  223. package/source/directives/octets/types.ts +0 -7
  224. package/source/directives/octets/workflows/Execution.ts +59 -8
  225. package/source/directives/octets/workflows/Workflow.ts +2 -1
  226. package/source/directives/require/Directive.ts +5 -0
  227. package/source/directives/require/Headers.ts +20 -0
  228. package/source/directives/require/Require.ts +28 -0
  229. package/source/directives/require/index.ts +3 -0
  230. package/source/directives/vary/Directive.ts +2 -1
  231. package/source/directives/vary/Embed.ts +14 -8
  232. package/source/directives/vary/Vary.ts +6 -4
  233. package/source/directives/vary/embeddings/Authority.ts +8 -0
  234. package/source/directives/vary/embeddings/Embedding.ts +2 -1
  235. package/source/directives/vary/embeddings/Header.ts +8 -6
  236. package/source/directives/vary/embeddings/Parameter.ts +14 -0
  237. package/source/directives/vary/embeddings/index.ts +6 -4
  238. package/source/exceptions.ts +22 -11
  239. package/source/manifest.ts +8 -9
  240. package/source/root.ts +5 -0
  241. package/source/schemas.ts +1 -1
  242. package/transpiled/Annotation.d.ts +3 -3
  243. package/transpiled/Composition.js +2 -2
  244. package/transpiled/Composition.js.map +1 -1
  245. package/transpiled/Directive.js +4 -4
  246. package/transpiled/Directive.js.map +1 -1
  247. package/transpiled/Endpoint.d.ts +5 -4
  248. package/transpiled/Endpoint.js +8 -4
  249. package/transpiled/Endpoint.js.map +1 -1
  250. package/transpiled/Factory.d.ts +1 -1
  251. package/transpiled/Factory.js +9 -8
  252. package/transpiled/Factory.js.map +1 -1
  253. package/transpiled/Gateway.d.ts +2 -0
  254. package/transpiled/Gateway.js +39 -12
  255. package/transpiled/Gateway.js.map +1 -1
  256. package/transpiled/HTTP/Context.d.ts +8 -1
  257. package/transpiled/HTTP/Context.js +15 -2
  258. package/transpiled/HTTP/Context.js.map +1 -1
  259. package/transpiled/HTTP/Server.d.ts +13 -2
  260. package/transpiled/HTTP/Server.js +38 -35
  261. package/transpiled/HTTP/Server.js.map +1 -1
  262. package/transpiled/HTTP/exceptions.d.ts +4 -1
  263. package/transpiled/HTTP/exceptions.js +7 -1
  264. package/transpiled/HTTP/exceptions.js.map +1 -1
  265. package/transpiled/HTTP/messages.d.ts +1 -0
  266. package/transpiled/HTTP/messages.js +9 -3
  267. package/transpiled/HTTP/messages.js.map +1 -1
  268. package/transpiled/Mapping.js +4 -1
  269. package/transpiled/Mapping.js.map +1 -1
  270. package/transpiled/Query.d.ts +1 -0
  271. package/transpiled/Query.js +21 -20
  272. package/transpiled/Query.js.map +1 -1
  273. package/transpiled/RTD/Endpoint.d.ts +1 -0
  274. package/transpiled/RTD/Method.d.ts +1 -0
  275. package/transpiled/RTD/Method.js +3 -0
  276. package/transpiled/RTD/Method.js.map +1 -1
  277. package/transpiled/RTD/Node.d.ts +2 -0
  278. package/transpiled/RTD/Node.js +9 -2
  279. package/transpiled/RTD/Node.js.map +1 -1
  280. package/transpiled/RTD/Route.d.ts +1 -1
  281. package/transpiled/RTD/Route.js +0 -1
  282. package/transpiled/RTD/Route.js.map +1 -1
  283. package/transpiled/RTD/factory.js +5 -2
  284. package/transpiled/RTD/factory.js.map +1 -1
  285. package/transpiled/RTD/syntax/parse.js +34 -22
  286. package/transpiled/RTD/syntax/parse.js.map +1 -1
  287. package/transpiled/RTD/syntax/types.d.ts +1 -0
  288. package/transpiled/RTD/syntax/types.js +1 -1
  289. package/transpiled/RTD/syntax/types.js.map +1 -1
  290. package/transpiled/Remotes.d.ts +2 -2
  291. package/transpiled/Remotes.js.map +1 -1
  292. package/transpiled/Tenant.d.ts +0 -1
  293. package/transpiled/Tenant.js +0 -6
  294. package/transpiled/Tenant.js.map +1 -1
  295. package/transpiled/deployment.d.ts +1 -1
  296. package/transpiled/deployment.js +28 -20
  297. package/transpiled/deployment.js.map +1 -1
  298. package/transpiled/directives/auth/Authorization.js +28 -12
  299. package/transpiled/directives/auth/Authorization.js.map +1 -1
  300. package/transpiled/directives/auth/Delegate.d.ts +10 -0
  301. package/transpiled/directives/auth/Delegate.js +34 -0
  302. package/transpiled/directives/auth/Delegate.js.map +1 -0
  303. package/transpiled/directives/auth/Federation.d.ts +16 -0
  304. package/transpiled/directives/auth/Federation.js +57 -0
  305. package/transpiled/directives/auth/Federation.js.map +1 -0
  306. package/transpiled/directives/auth/Incept.js +4 -3
  307. package/transpiled/directives/auth/Incept.js.map +1 -1
  308. package/transpiled/directives/auth/Role.d.ts +4 -1
  309. package/transpiled/directives/auth/Role.js +20 -14
  310. package/transpiled/directives/auth/Role.js.map +1 -1
  311. package/transpiled/directives/cache/Cache.d.ts +3 -3
  312. package/transpiled/directives/cache/Cache.js +10 -4
  313. package/transpiled/directives/cache/Cache.js.map +1 -1
  314. package/transpiled/directives/cache/Control.d.ts +2 -1
  315. package/transpiled/directives/cache/Control.js +29 -12
  316. package/transpiled/directives/cache/Control.js.map +1 -1
  317. package/transpiled/directives/dev/Development.js +1 -1
  318. package/transpiled/directives/dev/Development.js.map +1 -1
  319. package/transpiled/directives/flow/Fetch.d.ts +13 -0
  320. package/transpiled/directives/flow/Fetch.js +59 -0
  321. package/transpiled/directives/flow/Fetch.js.map +1 -0
  322. package/transpiled/directives/flow/Flow.d.ts +10 -0
  323. package/transpiled/directives/flow/Flow.js +27 -0
  324. package/transpiled/directives/flow/Flow.js.map +1 -0
  325. package/transpiled/directives/flow/index.d.ts +2 -0
  326. package/transpiled/directives/flow/index.js +6 -0
  327. package/transpiled/directives/flow/index.js.map +1 -0
  328. package/transpiled/directives/flow/types.d.ts +5 -0
  329. package/transpiled/directives/flow/types.js.map +1 -0
  330. package/transpiled/directives/index.js +6 -3
  331. package/transpiled/directives/index.js.map +1 -1
  332. package/transpiled/directives/io/Directive.d.ts +8 -0
  333. package/transpiled/directives/io/Directive.js +3 -0
  334. package/transpiled/directives/io/Directive.js.map +1 -0
  335. package/transpiled/directives/io/IO.d.ts +9 -0
  336. package/transpiled/directives/io/IO.js +33 -0
  337. package/transpiled/directives/io/IO.js.map +1 -0
  338. package/transpiled/directives/io/Input.d.ts +11 -0
  339. package/transpiled/directives/{octets/Permute.js → io/Input.js} +33 -26
  340. package/transpiled/directives/io/Input.js.map +1 -0
  341. package/transpiled/directives/io/Message.d.ts +1 -0
  342. package/transpiled/directives/io/Message.js +3 -0
  343. package/transpiled/directives/io/Message.js.map +1 -0
  344. package/transpiled/directives/io/Output.d.ts +13 -0
  345. package/transpiled/directives/io/Output.js +76 -0
  346. package/transpiled/directives/io/Output.js.map +1 -0
  347. package/transpiled/directives/io/index.d.ts +2 -0
  348. package/transpiled/directives/io/index.js +6 -0
  349. package/transpiled/directives/io/index.js.map +1 -0
  350. package/transpiled/directives/io/schemas.d.ts +7 -0
  351. package/transpiled/directives/io/schemas.js +14 -0
  352. package/transpiled/directives/io/schemas.js.map +1 -0
  353. package/transpiled/directives/octets/Context.d.ts +3 -3
  354. package/transpiled/directives/octets/Context.js +4 -2
  355. package/transpiled/directives/octets/Context.js.map +1 -1
  356. package/transpiled/directives/octets/Delete.d.ts +3 -2
  357. package/transpiled/directives/octets/Delete.js +3 -1
  358. package/transpiled/directives/octets/Delete.js.map +1 -1
  359. package/transpiled/directives/octets/Directive.d.ts +8 -0
  360. package/transpiled/directives/octets/Directive.js +8 -0
  361. package/transpiled/directives/octets/Directive.js.map +1 -0
  362. package/transpiled/directives/octets/Fetch.d.ts +6 -5
  363. package/transpiled/directives/octets/Fetch.js +10 -8
  364. package/transpiled/directives/octets/Fetch.js.map +1 -1
  365. package/transpiled/directives/octets/List.d.ts +6 -5
  366. package/transpiled/directives/octets/List.js +6 -4
  367. package/transpiled/directives/octets/List.js.map +1 -1
  368. package/transpiled/directives/octets/Octets.d.ts +2 -1
  369. package/transpiled/directives/octets/Octets.js +2 -4
  370. package/transpiled/directives/octets/Octets.js.map +1 -1
  371. package/transpiled/directives/octets/Store.d.ts +3 -2
  372. package/transpiled/directives/octets/Store.js +3 -1
  373. package/transpiled/directives/octets/Store.js.map +1 -1
  374. package/transpiled/directives/octets/Workflow.d.ts +3 -2
  375. package/transpiled/directives/octets/Workflow.js +9 -2
  376. package/transpiled/directives/octets/Workflow.js.map +1 -1
  377. package/transpiled/directives/octets/schemas.d.ts +4 -4
  378. package/transpiled/directives/octets/schemas.js.map +1 -1
  379. package/transpiled/directives/octets/types.d.ts +0 -5
  380. package/transpiled/directives/octets/workflows/Execution.d.ts +5 -1
  381. package/transpiled/directives/octets/workflows/Execution.js +43 -9
  382. package/transpiled/directives/octets/workflows/Execution.js.map +1 -1
  383. package/transpiled/directives/octets/workflows/Workflow.js +2 -1
  384. package/transpiled/directives/octets/workflows/Workflow.js.map +1 -1
  385. package/transpiled/directives/require/Directive.d.ts +4 -0
  386. package/transpiled/directives/require/Directive.js +3 -0
  387. package/transpiled/directives/require/Directive.js.map +1 -0
  388. package/transpiled/directives/require/Headers.d.ts +7 -0
  389. package/transpiled/directives/require/Headers.js +19 -0
  390. package/transpiled/directives/require/Headers.js.map +1 -0
  391. package/transpiled/directives/require/Require.d.ts +9 -0
  392. package/transpiled/directives/require/Require.js +27 -0
  393. package/transpiled/directives/require/Require.js.map +1 -0
  394. package/transpiled/directives/require/index.d.ts +2 -0
  395. package/transpiled/directives/require/index.js +6 -0
  396. package/transpiled/directives/require/index.js.map +1 -0
  397. package/transpiled/directives/vary/Directive.d.ts +2 -1
  398. package/transpiled/directives/vary/Embed.d.ts +2 -1
  399. package/transpiled/directives/vary/Embed.js +8 -6
  400. package/transpiled/directives/vary/Embed.js.map +1 -1
  401. package/transpiled/directives/vary/Vary.d.ts +2 -2
  402. package/transpiled/directives/vary/Vary.js +3 -3
  403. package/transpiled/directives/vary/Vary.js.map +1 -1
  404. package/transpiled/directives/vary/embeddings/Authority.d.ts +5 -0
  405. package/transpiled/directives/vary/embeddings/Authority.js +10 -0
  406. package/transpiled/directives/vary/embeddings/Authority.js.map +1 -0
  407. package/transpiled/directives/vary/embeddings/Embedding.d.ts +2 -1
  408. package/transpiled/directives/vary/embeddings/Header.js +8 -6
  409. package/transpiled/directives/vary/embeddings/Header.js.map +1 -1
  410. package/transpiled/directives/vary/embeddings/Parameter.d.ts +7 -0
  411. package/transpiled/directives/vary/embeddings/Parameter.js +14 -0
  412. package/transpiled/directives/vary/embeddings/Parameter.js.map +1 -0
  413. package/transpiled/directives/vary/embeddings/index.d.ts +2 -2
  414. package/transpiled/directives/vary/embeddings/index.js +8 -4
  415. package/transpiled/directives/vary/embeddings/index.js.map +1 -1
  416. package/transpiled/exceptions.d.ts +3 -2
  417. package/transpiled/exceptions.js +13 -7
  418. package/transpiled/exceptions.js.map +1 -1
  419. package/transpiled/manifest.js +8 -9
  420. package/transpiled/manifest.js.map +1 -1
  421. package/transpiled/root.js +5 -0
  422. package/transpiled/root.js.map +1 -1
  423. package/transpiled/schemas.d.ts +1 -1
  424. package/transpiled/schemas.js +2 -2
  425. package/transpiled/schemas.js.map +1 -1
  426. package/transpiled/tsconfig.tsbuildinfo +1 -1
  427. package/components/identity.basic/operations/create.d.ts +0 -10
  428. package/components/identity.basic/operations/create.js +0 -10
  429. package/components/identity.basic/operations/create.js.map +0 -1
  430. package/components/identity.basic/source/create.ts +0 -18
  431. package/components/identity.federation/operations/create.d.ts +0 -10
  432. package/components/identity.federation/operations/create.js.map +0 -1
  433. package/components/identity.federation/operations/schemas.d.ts +0 -59
  434. package/components/identity.federation/operations/schemas.js +0 -9
  435. package/components/identity.federation/operations/schemas.js.map +0 -1
  436. package/components/identity.federation/operations/types.js.map +0 -1
  437. package/components/identity.federation/source/schemas.ts +0 -61
  438. package/components/octets.storage/operations/permute.js +0 -7
  439. package/source/HTTP/Server.test.ts +0 -126
  440. package/source/directives/octets/Permute.ts +0 -43
  441. package/transpiled/directives/octets/Permute.d.ts +0 -10
  442. package/transpiled/directives/octets/Permute.js.map +0 -1
  443. /package/{components/identity.federation/operations → transpiled/directives/flow}/types.js +0 -0
@@ -20,7 +20,7 @@ Stores the content of the request body into a storage, under the request path wi
20
20
  specified `content-type`.
21
21
 
22
22
  If request's `content-type` is not acceptable, or if the request body does not pass
23
- the [validation](/extensions/storages/readme.md#async-putpath-string-stream-readable-type-typecontrol-maybeentry),
23
+ the [validation](/extensions/storages/readme.md#async-putpath-string-stream-readable-options-options-maybeentry),
24
24
  the request is rejected with a `415 Unsupported Media Type` response.
25
25
 
26
26
  The value of the directive is `null` or an object with the following properties:
@@ -83,7 +83,8 @@ is [multipart](protocol.md#multipart-types).
83
83
  The first part represents the created Entry, which is sent immediately after the BLOB is stored,
84
84
  while subsequent parts are results from the workflow endpoints, sent as soon as they are available.
85
85
 
86
- In case a workflow endpoint returns an `Error`, the error part is sent, and the response is closed.
86
+ In case a workflow endpoint returns an `Error`, the error part is sent,
87
+ and the response is closed.
87
88
  Error's properties are added to the error part, among with the `step` identifier.
88
89
 
89
90
  ```
@@ -91,16 +92,29 @@ Error's properties are added to the error part, among with the `step` identifier
91
92
  content-type: multipart/yaml; boundary=cut
92
93
 
93
94
  --cut
95
+
94
96
  id: eecd837c
95
97
  type: image/jpeg
96
98
  created: 1698004822358
99
+
97
100
  --cut
98
- optimize: null
101
+
102
+ step: optimize
103
+ status: completed
104
+
99
105
  --cut
106
+
107
+ step: resize
100
108
  error:
101
- step: resize
102
109
  code: TOO_SMALL
103
110
  message: Image is too small
111
+ status: completed
112
+
113
+ --cut
114
+
115
+ step: analyze
116
+ status: exception
117
+
104
118
  --cut--
105
119
  ```
106
120
 
@@ -193,22 +207,6 @@ the entry is deleted.
193
207
 
194
208
  The error returned by the workflow prevents the deletion of the entry.
195
209
 
196
- ## `octets:permute`
197
-
198
- Performs
199
- a [permutation](/extensions/storages/readme.md#async-permutepath-string-ids-string-maybevoid) on the
200
- entries
201
- under the request path.
202
-
203
- ```yaml
204
- /images:
205
- octets:context: images
206
- PUT:
207
- octets:permute: ~
208
- ```
209
-
210
- The request body must be a list of entry identifiers.
211
-
212
210
  ## `octets:workflow`
213
211
 
214
212
  Execute a [workflow](#workflows) on the entry under the request path.
@@ -227,14 +225,16 @@ A workflow is a list of endpoints to be called.
227
225
  The following input will be passed to each endpoint:
228
226
 
229
227
  ```yaml
228
+ authority: string
230
229
  storage: string
231
230
  path: string
232
231
  entry: Entry
233
232
  parameters: Record<string, string> # route parameters
234
233
  ```
235
234
 
236
- See [Entry](/extensions/storages/readme.md#entry) and an
237
- example [workflow step processor](../features/steps/components/octets.tester).
235
+ - [Storages](/extensions/storages/readme.md)
236
+ - [Authorities](authorities.md)
237
+ - Example [workflow step processor](../features/steps/components/octets.tester)
238
238
 
239
239
  A _workflow unit_ is an object with keys referencing the workflow step identifier, and an endpoint
240
240
  as value.
@@ -258,4 +258,15 @@ octets:store:
258
258
  analyze: images.analyze # executed in parallel with `resize`
259
259
  ```
260
260
 
261
- If one of the workflow units returns an error, the execution of the workflow is interrupted.
261
+ If one of the workflow units returns or throws an error,
262
+ the execution of the workflow is interrupted.
263
+
264
+ ### Workflow tasks
265
+
266
+ A workflow unit which value starts with `task:` prefix will be executed as a Task.
267
+
268
+ ```yaml
269
+ octets:store:
270
+ workflow:
271
+ optimize: task:images.optimize
272
+ ```
@@ -72,6 +72,9 @@ The following request headers are allowed:
72
72
  - `accept`
73
73
  - `authorization`
74
74
  - `content-type`
75
+ - `etag`
76
+ - `if-match`
77
+ - `if-none-match`
75
78
  - headers used by the [`vary:embed` directive](vary.md#embeddings)
76
79
 
77
80
  The following response headers are exposed:
@@ -6,10 +6,10 @@
6
6
  id?: string
7
7
  criteria?: string
8
8
  sort?: string
9
- omit?: [integer]
10
- limit?: [integer]
9
+ omit?: integer
10
+ limit?: integer
11
11
  selectors?: string[]
12
- projection?: [string]
12
+ projection?: string[]
13
13
  ```
14
14
 
15
15
  ```yaml
@@ -77,8 +77,12 @@ query:
77
77
 
78
78
  ### Path variables
79
79
 
80
- Path variables are prepended to the `criteria` request query parameter using logical AND,
81
- except for the [`POST` method](#post-method).
80
+ Path variables are prepended to the `criteria` request query parameter except for
81
+ the [`POST` method](#post-method).
82
+
83
+ If query criteria starts with logical operator (`,` or `;`), then path variables are prepended
84
+ accordingly.
85
+ `AND` logical operator is used by default.
82
86
 
83
87
  Given the following declaration:
84
88
 
@@ -92,7 +96,7 @@ exposition:
92
96
  GET:
93
97
  endpoint: observe
94
98
  query:
95
- criteria: state==hot; # open criteria
99
+ criteria: ,state==hot; # open criteria
96
100
  ```
97
101
 
98
102
  and the following request:
@@ -104,7 +108,7 @@ GET /dummies/cool/?criteria=rank==5
104
108
  Operation call will have the following query criteria:
105
109
 
106
110
  ```yaml
107
- criteria: state==hot;type==cool;rank=5
111
+ criteria: (type==cool,state==hot);(rank=5)
108
112
  ```
109
113
 
110
114
  #### POST method
@@ -251,9 +255,9 @@ PUT /dummies/5e82ed5e/ HTTP/1.1
251
255
  if-match: "1"
252
256
 
253
257
  foo: baz
258
+ ```
254
259
 
255
- ---
256
-
260
+ ```http
257
261
  200 OK
258
262
  ```
259
263
 
@@ -262,8 +266,10 @@ PUT /dummies/5e82ed5e/ HTTP/1.1
262
266
  if-match: "never"
263
267
 
264
268
  foo: baz
269
+ ```
265
270
 
266
- ---
267
-
271
+ ```http
268
272
  412 Precondition Failed
269
273
  ```
274
+
275
+ The value within the quotes is mapped to the `version` property of operation call query.
@@ -0,0 +1,15 @@
1
+ # Directive family Require
2
+
3
+ The `require` directive family provides the ability to specify HTTP request requirements to be met.
4
+
5
+ ## Headers
6
+
7
+ `require:header` requires a specific header to be present in the request, and `require:headers`
8
+ requires a set of headers to be present.
9
+
10
+ ```yaml
11
+ exposition:
12
+ /:id:
13
+ require:header: if-match # enforce concurrency control
14
+ PUT: transit
15
+ ```
@@ -56,6 +56,19 @@ as it provides a more specific match compared to the generic `/users/:id` route.
56
56
 
57
57
  The priority of Routes with the same specificity is determined by the order of declaration.
58
58
 
59
+ ## Route forwarding
60
+
61
+ A Route can be forwarded to another Route by specifying the destination Route as the value of the
62
+ Route.
63
+
64
+ ```yaml
65
+ /destination/:var: ...
66
+ /static: /destination/hello
67
+ /variables/:bar: /destination/:bar
68
+ ```
69
+
70
+ Forwarding Route variables are mapped to the forwarded Route variables if they have the same name.
71
+
59
72
  ## Methods
60
73
 
61
74
  Methods are mappings of the HTTP methods to the corresponding operations.
@@ -102,7 +115,7 @@ HTTP methods can only be mapped to operations of the corresponding types.
102
115
  | `GET` | **Observation**<br/>**Computation** |
103
116
  | `PATCH` | **Assignment**<br/>**Effect** |
104
117
 
105
- As method mapping is unambiguous for Observation, Assignent, and Computation, a consice syntax is
118
+ As method mapping is unambiguous for Observation, Assignment, and Computation, a concise syntax is
106
119
  available:
107
120
 
108
121
  ```yaml
@@ -110,7 +123,23 @@ available:
110
123
  /items/:id: [observe, assign]
111
124
  ```
112
125
 
113
- ### Intermediate Nodes
126
+ ### Projections
127
+
128
+ A Method can have a `projection` key that specifies the fields of the operation result to be
129
+ included in the response.
130
+
131
+ ```yaml
132
+ /teapots:
133
+ GET:
134
+ endpoint: select
135
+ projection:
136
+ - name
137
+ - state
138
+ ```
139
+
140
+ > `id` is always included in the projection.
141
+
142
+ ## Intermediate Nodes
114
143
 
115
144
  An RTD Node that has a Route with a key `/` is an _intermediate_ Node.
116
145
  Intermediate Nodes must not have Methods as they are unreachable.
@@ -124,8 +153,10 @@ Intermediate Nodes must not have Methods as they are unreachable.
124
153
 
125
154
  ## Directives
126
155
 
127
- RTD Directives are declared using RTD node or Method keys following the `{family}:{directive}` pattern and can be used
128
- to add or modify the behavior of request processing. Directive declarations are applied to the RTD node where they are
156
+ RTD Directives are declared using RTD node or Method keys following the `{family}:{directive}`
157
+ pattern and can be used
158
+ to add or modify the behavior of request processing. Directive declarations are applied to the RTD
159
+ node where they are
129
160
  declared and to all nested nodes.
130
161
 
131
162
  ```yaml
@@ -7,16 +7,15 @@ operation call.
7
7
 
8
8
  ```yaml
9
9
  exposition:
10
- realms:
11
- toa: the.toa.io
12
- /:
10
+ /:group:
13
11
  vary:languages: [en, fr]
14
12
  GET:
15
13
  vary:embed:
16
- lang: language # predefined embeddings
17
- realm: realm
14
+ app: authority # predefined embeddings
15
+ lang: language
18
16
  token: :x-access-token # raw header value
19
- endpoint: dummies.get
17
+ group: /:group # route parameter
18
+ endpoint: observe
20
19
  ```
21
20
 
22
21
  ## Embeddings
@@ -30,13 +29,9 @@ If the value is an array, the first non-empty embedding function's result is use
30
29
  > If a property is already present in the input, the embedded value will overwrite its current
31
30
  > value.
32
31
 
33
- ### Realm
32
+ ### Authority
34
33
 
35
- Realm is an identifier of a domain used to access the Exposition.
36
- The list of domains is defined by the `vary:realms` directive,
37
- which is a map of realm names to their domain names.
38
-
39
- The `realm` embedding substitutes the realm identified based on the `host` request header.
34
+ The `authority` embedding substitutes request [authority identifier](authorities.md).
40
35
 
41
36
  ### Language
42
37
 
@@ -47,8 +42,8 @@ If neither of the supported languages matches, the first supported language is u
47
42
 
48
43
  ### Raw header values
49
44
 
50
- Keys in the embedding map starting with a semicolon (:) are the names of HTTP request headers whose
51
- values to be embedded into an operation call.
45
+ Values in the embedding map starting with a semicolon (:) are the names of HTTP request headers
46
+ whose values to be embedded into an operation call.
52
47
  The names of these headers are then included in the `vary` HTTP response header
53
48
  and [Access-Control-Allow-Headers](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Headers)
54
49
  of the [CORS](protocol.md#cors).
@@ -56,6 +51,11 @@ of the [CORS](protocol.md#cors).
56
51
  [Multiple header fields](https://www.w3.org/Protocols/rfc2616/rfc2616-sec4.html#sec4.2) are embedded
57
52
  as a comma-separated list.
58
53
 
54
+ ### Route parameters
55
+
56
+ Values in the embedding map starting with `/:` are the names of route parameters whose values
57
+ to be embedded into an operation call.
58
+
59
59
  ### Fallbacks
60
60
 
61
61
  If the embedding function is an array, the first non-empty resolved value is used.
@@ -1,12 +1,13 @@
1
+ @security
1
2
  Feature: Access authorization
2
3
 
3
4
  Background:
4
5
  Given the `identity.basic` database contains:
5
6
  # developer:secret
6
7
  # user:12345
7
- | _id | username | password |
8
- | efe3a65ebbee47ed95a73edd911ea328 | developer | $2b$10$ZRSKkgZoGnrcTNA5w5eCcu3pxDzdTduhteVYXcp56AaNcilNkwJ.O |
9
- | e8e4f9c2a68d419b861403d71fabc915 | user | $2b$10$Frszmrmsz9iwSXzBbRRMKeDVKsNxozkrLNSsN.SnVC.KPxLtQr/bK |
8
+ | _id | authority | username | password |
9
+ | efe3a65ebbee47ed95a73edd911ea328 | nex | developer | $2b$10$ZRSKkgZoGnrcTNA5w5eCcu3pxDzdTduhteVYXcp56AaNcilNkwJ.O |
10
+ | e8e4f9c2a68d419b861403d71fabc915 | nex | user | $2b$10$Frszmrmsz9iwSXzBbRRMKeDVKsNxozkrLNSsN.SnVC.KPxLtQr/bK |
10
11
  And the `identity.bans` database is empty
11
12
 
12
13
  Scenario: Deny by default
@@ -20,6 +21,7 @@ Feature: Access authorization
20
21
  When the following request is received:
21
22
  """
22
23
  GET / HTTP/1.1
24
+ host: nex.toa.io
23
25
  """
24
26
  Then the following reply is sent:
25
27
  """
@@ -30,6 +32,7 @@ Feature: Access authorization
30
32
  Given the annotation:
31
33
  """yaml
32
34
  /:
35
+ io:output: true
33
36
  auth:anonymous: true
34
37
  GET:
35
38
  dev:stub:
@@ -38,6 +41,7 @@ Feature: Access authorization
38
41
  When the following request is received:
39
42
  """
40
43
  GET / HTTP/1.1
44
+ host: nex.toa.io
41
45
  accept: application/yaml
42
46
  """
43
47
  Then the following reply is sent:
@@ -60,6 +64,7 @@ Feature: Access authorization
60
64
  When the following request is received:
61
65
  """
62
66
  GET / HTTP/1.1
67
+ host: nex.toa.io
63
68
  authorization: Basic ZGV2ZWxvcGVyOnNlY3JldA==
64
69
  """
65
70
  Then the following reply is sent:
@@ -71,6 +76,7 @@ Feature: Access authorization
71
76
  Given the annotation:
72
77
  """yaml
73
78
  /:
79
+ io:output: true
74
80
  /:id:
75
81
  auth:id: id
76
82
  GET:
@@ -80,6 +86,7 @@ Feature: Access authorization
80
86
  When the following request is received:
81
87
  """
82
88
  GET /efe3a65ebbee47ed95a73edd911ea328/ HTTP/1.1
89
+ host: nex.toa.io
83
90
  authorization: Basic ZGV2ZWxvcGVyOnNlY3JldA==
84
91
  accept: application/yaml
85
92
  """
@@ -93,6 +100,7 @@ Feature: Access authorization
93
100
  When the following request is received:
94
101
  """
95
102
  GET /efe3a65ebbee47ed95a73edd911ea328/ HTTP/1.1
103
+ host: nex.toa.io
96
104
  authorization: Basic dXNlcjoxMjM0NQ==
97
105
  accept: application/yaml
98
106
  """
@@ -109,6 +117,7 @@ Feature: Access authorization
109
117
  And the annotation:
110
118
  """yaml
111
119
  /:
120
+ io:output: true
112
121
  auth:role: developer
113
122
  GET:
114
123
  dev:stub:
@@ -118,6 +127,7 @@ Feature: Access authorization
118
127
  # identity with `developer` and `user` roles
119
128
  """
120
129
  GET / HTTP/1.1
130
+ host: nex.toa.io
121
131
  authorization: Basic ZGV2ZWxvcGVyOnNlY3JldA==
122
132
  accept: application/yaml
123
133
  """
@@ -132,6 +142,7 @@ Feature: Access authorization
132
142
  # identity with no roles
133
143
  """
134
144
  GET / HTTP/1.1
145
+ host: nex.toa.io
135
146
  authorization: Basic dXNlcjoxMjM0NQ==
136
147
  """
137
148
  Then the following reply is sent:
@@ -146,6 +157,7 @@ Feature: Access authorization
146
157
  And the annotation:
147
158
  """yaml
148
159
  /:
160
+ io:output: true
149
161
  /:
150
162
  auth:role: developer:rust:junior # role scope matches
151
163
  /nested:
@@ -159,6 +171,7 @@ Feature: Access authorization
159
171
  When the following request is received:
160
172
  """
161
173
  GET /nested/ HTTP/1.1
174
+ host: nex.toa.io
162
175
  authorization: Basic ZGV2ZWxvcGVyOnNlY3JldA==
163
176
  accept: text/plain
164
177
  """
@@ -172,6 +185,7 @@ Feature: Access authorization
172
185
  When the following request is received:
173
186
  """
174
187
  GET /javascript/ HTTP/1.1
188
+ host: nex.toa.io
175
189
  authorization: Basic ZGV2ZWxvcGVyOnNlY3JldA==
176
190
  """
177
191
  Then the following reply is sent:
@@ -190,6 +204,7 @@ Feature: Access authorization
190
204
  - developer
191
205
  - admin
192
206
  GET:
207
+ io:output: true
193
208
  dev:stub:
194
209
  access: granted!
195
210
  """
@@ -197,6 +212,7 @@ Feature: Access authorization
197
212
  # identity with `developer` and `user` roles
198
213
  """
199
214
  GET / HTTP/1.1
215
+ host: nex.toa.io
200
216
  authorization: Basic ZGV2ZWxvcGVyOnNlY3JldA==
201
217
  accept: application/yaml
202
218
  """
@@ -215,6 +231,7 @@ Feature: Access authorization
215
231
  And the annotation:
216
232
  """yaml
217
233
  /:
234
+ io:output: true
218
235
  /rust/:id:
219
236
  auth:rule:
220
237
  id: id
@@ -233,6 +250,7 @@ Feature: Access authorization
233
250
  When the following request is received:
234
251
  """
235
252
  GET /rust/efe3a65ebbee47ed95a73edd911ea328/ HTTP/1.1
253
+ host: nex.toa.io
236
254
  authorization: Basic ZGV2ZWxvcGVyOnNlY3JldA==
237
255
  accept: application/yaml
238
256
  """
@@ -246,6 +264,7 @@ Feature: Access authorization
246
264
  When the following request is received:
247
265
  """
248
266
  GET /javascript/efe3a65ebbee47ed95a73edd911ea328/ HTTP/1.1
267
+ host: nex.toa.io
249
268
  authorization: Basic ZGV2ZWxvcGVyOnNlY3JldA==
250
269
  """
251
270
  Then the following reply is sent:
@@ -257,6 +276,7 @@ Feature: Access authorization
257
276
  Given the annotation:
258
277
  """yaml
259
278
  /:
279
+ io:output: true
260
280
  /:id:
261
281
  auth:id: id
262
282
  GET:
@@ -265,8 +285,37 @@ Feature: Access authorization
265
285
  """
266
286
  When the following request is received:
267
287
  """
268
- GET /efe3a65ebbee47ed95a73edd911ea328/ HTTP/1.1
269
- authorization: Token v3.local.9oEtVJkfRw4cOJ8M4DxuVuAN29dGT26XMYyPAoXtwrkdkiJVSVj46sMNAOdlxwKGszJZV_ReOL26dxDVlsQ7QAIuRhRPlvsHYNOhcD-LApoAXV0S3IK16EMoEv7tE9z70FCLC3WoIW9RIQ8PR3uZhAdhSgBilsVOpWrk4XtnfCIlVwhYMKu79a66oZZhV2Q7Kl3nfYsf84-6rAL_1H0MsqCDUHVXuIg
288
+ GET /identity/ HTTP/1.1
289
+ host: nex.toa.io
290
+ authorization: Basic ZGV2ZWxvcGVyOnNlY3JldA==
291
+ accept: application/yaml
292
+ """
293
+ Then the following reply is sent:
294
+ """
295
+ 200 OK
296
+ authorization: Token ${{ developer.token }}
297
+
298
+ id: ${{ developer.id }}
299
+ """
300
+ When the following request is received:
301
+ """
302
+ GET /identity/ HTTP/1.1
303
+ host: nex.toa.io
304
+ authorization: Basic dXNlcjoxMjM0NQ==
305
+ accept: application/yaml
306
+ """
307
+ Then the following reply is sent:
308
+ """
309
+ 200 OK
310
+ authorization: Token ${{ user.token }}
311
+
312
+ id: ${{ user.id }}
313
+ """
314
+ When the following request is received:
315
+ """
316
+ GET /${{ developer.id }}/ HTTP/1.1
317
+ host: nex.toa.io
318
+ authorization: Token ${{ developer.token }}
270
319
  accept: application/yaml
271
320
  """
272
321
  Then the following reply is sent:
@@ -282,8 +331,9 @@ Feature: Access authorization
282
331
  """
283
332
  When the following request is received:
284
333
  """
285
- GET /efe3a65ebbee47ed95a73edd911ea328/ HTTP/1.1
286
- authorization: Token v3.local.cjlxn4IJ9hI92KuksguzDx7_kYxgDFFGFnfNchf0cWnmos34dqX2XpTAUBd-LqgqfuH-lVGfNvjBUkw5JtHRBiIAVaPHF3Ncc0eafwgH2DPme9pndZL92fWryGnJ-sMHA28Q6UcXsIfhgd2JZ0n-585SBhwlosC3gKTcVHK7XNljeaTen4jZPw8uY-pdbsm6dDq3aKMzl8K78_BTTfiNPG2cI_aNuHw
334
+ GET /${{ user.id }}/ HTTP/1.1
335
+ host: nex.toa.io
336
+ authorization: Token ${{ developer.token }}
287
337
  accept: application/yaml
288
338
  """
289
339
  Then the following reply is sent:
@@ -295,6 +345,7 @@ Feature: Access authorization
295
345
  Given the annotation:
296
346
  """yaml
297
347
  /:
348
+ io:output: true
298
349
  auth:role: developer
299
350
  GET:
300
351
  dev:stub:
@@ -306,6 +357,7 @@ Feature: Access authorization
306
357
  When the following request is received:
307
358
  """
308
359
  GET / HTTP/1.1
360
+ host: nex.toa.io
309
361
  authorization: Basic ZGV2ZWxvcGVyOnNlY3JldA==
310
362
  accept: application/yaml
311
363
  """
@@ -320,6 +372,7 @@ Feature: Access authorization
320
372
  When the following request is received:
321
373
  """
322
374
  GET / HTTP/1.1
375
+ host: nex.toa.io
323
376
  authorization: Token ${{ token }}
324
377
  accept: application/yaml
325
378
  """
@@ -335,6 +388,7 @@ Feature: Access authorization
335
388
  Given the annotation:
336
389
  """yaml
337
390
  /:
391
+ io:output: true
338
392
  /:id:
339
393
  auth:scheme: basic
340
394
  auth:id: id
@@ -345,6 +399,7 @@ Feature: Access authorization
345
399
  When the following request is received:
346
400
  """
347
401
  GET /efe3a65ebbee47ed95a73edd911ea328/ HTTP/1.1
402
+ host: nex.toa.io
348
403
  authorization: Basic ZGV2ZWxvcGVyOnNlY3JldA==
349
404
  accept: application/yaml
350
405
  """
@@ -358,6 +413,7 @@ Feature: Access authorization
358
413
  When the following request is received:
359
414
  """
360
415
  GET /efe3a65ebbee47ed95a73edd911ea328/ HTTP/1.1
416
+ host: nex.toa.io
361
417
  authorization: Token v3.local.9oEtVJkfRw4cOJ8M4DxuVuAN29dGT26XMYyPAoXtwrkdkiJVSVj46sMNAOdlxwKGszJZV_ReOL26dxDVlsQ7QAIuRhRPlvsHYNOhcD-LApoAXV0S3IK16EMoEv7tE9z70FCLC3WoIW9RIQ8PR3uZhAdhSgBilsVOpWrk4XtnfCIlVwhYMKu79a66oZZhV2Q7Kl3nfYsf84-6rAL_1H0MsqCDUHVXuIg
362
418
  accept: text/plain
363
419
  """
@@ -374,11 +430,13 @@ Feature: Access authorization
374
430
 
375
431
  Given the annotation:
376
432
  """yaml
377
- anonymous: true
433
+ /:
434
+ anonymous: true
378
435
  """
379
436
  When the following request is received:
380
437
  """
381
438
  POST /identity/roles/efe3a65ebbee47ed95a73edd911ea328/ HTTP/1.1
439
+ host: nex.toa.io
382
440
  content-type: application/yaml
383
441
 
384
442
  role: developer
@@ -388,62 +446,46 @@ Feature: Access authorization
388
446
  401 Unauthorized
389
447
  """
390
448
 
391
- Scenario: Banning an Identity
449
+ Scenario: Authorization delegation
392
450
  Given the `identity.roles` database contains:
393
- | _id | identity | role |
394
- | 775a648d054e4ce1a65f8f17e5b51803 | efe3a65ebbee47ed95a73edd911ea328 | system |
395
- And the annotation:
396
- """yaml
397
- /:
398
- /:id:
399
- auth:id: id
400
- GET:
401
- dev:stub:
402
- access: granted!
403
- """
404
- And the `identity.tokens` configuration:
451
+ | _id | identity | role |
452
+ | 775a648d054e4ce1a65f8f17e5b51803 | efe3a65ebbee47ed95a73edd911ea328 | developer |
453
+ And the `echo` is running with the following manifest:
405
454
  """yaml
406
- refresh: 1
455
+ exposition:
456
+ /:
457
+ io:output: true
458
+ auth:delegate: identity
459
+ GET: identity
407
460
  """
408
461
  When the following request is received:
409
462
  """
410
- GET /e8e4f9c2a68d419b861403d71fabc915/ HTTP/1.1
411
- authorization: Basic dXNlcjoxMjM0NQ==
463
+ GET /echo/ HTTP/1.1
464
+ host: nex.toa.io
465
+ authorization: Basic ZGV2ZWxvcGVyOnNlY3JldA==
466
+ accept: application/yaml
412
467
  """
413
468
  Then the following reply is sent:
414
469
  """
415
470
  200 OK
416
471
  authorization: Token ${{ token }}
417
- """
418
- When the following request is received:
419
- """
420
- PUT /identity/bans/e8e4f9c2a68d419b861403d71fabc915/ HTTP/1.1
421
- authorization: Basic ZGV2ZWxvcGVyOnNlY3JldA==
422
- content-type: application/yaml
423
472
 
424
- banned: true
425
- """
426
- Then the following reply is sent:
427
- """
428
- 204 No Content
473
+ identity:
474
+ id: efe3a65ebbee47ed95a73edd911ea328
475
+ roles:
476
+ - developer
429
477
  """
430
- # accessing a resource with a banned Identity
431
478
  When the following request is received:
432
479
  """
433
- GET /e8e4f9c2a68d419b861403d71fabc915/ HTTP/1.1
434
- authorization: Basic dXNlcjoxMjM0NQ==
480
+ GET /echo/ HTTP/1.1
481
+ host: nex.toa.io
482
+ authorization: Token ${{ token }}
435
483
  """
436
484
  Then the following reply is sent:
437
485
  """
438
- 401 Unauthorized
439
- """
440
- Then after 1 second
441
- When the following request is received:
442
- """
443
- GET /e8e4f9c2a68d419b861403d71fabc915/ HTTP/1.1
444
- authorization: Token ${{ token }}
486
+ 200 OK
445
487
  """
446
- Then the following reply is sent:
488
+ And the reply does not contain:
447
489
  """
448
- 401 Unauthorized
490
+ authorization: Token
449
491
  """