@toa.io/extensions.exposition 1.0.0-alpha.3 → 1.0.0-alpha.31

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 (431) hide show
  1. package/components/context.toa.yaml +2 -2
  2. package/components/identity.bans/manifest.toa.yaml +15 -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 +21 -8
  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 +20 -0
  15. package/components/identity.basic/operations/incept.js.map +1 -0
  16. package/components/identity.basic/operations/transit.d.ts +3 -3
  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 +2 -0
  21. package/components/identity.basic/source/authenticate.ts +16 -5
  22. package/components/identity.basic/source/incept.ts +32 -0
  23. package/components/identity.basic/source/transit.ts +7 -5
  24. package/components/identity.basic/source/types.ts +2 -0
  25. package/components/identity.federation/manifest.toa.yaml +28 -17
  26. package/components/identity.federation/operations/authenticate.d.ts +2 -2
  27. package/components/identity.federation/operations/authenticate.js +6 -5
  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 +3 -3
  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 +15 -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} +8 -3
  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.js → types/entity.js} +1 -1
  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 +10 -9
  49. package/components/identity.federation/source/{create.ts → incept.ts} +10 -9
  50. package/components/identity.federation/source/lib/jwt.test.ts +2 -2
  51. package/components/identity.federation/source/lib/jwt.ts +7 -8
  52. package/components/identity.federation/source/types/configuration.ts +16 -0
  53. package/components/identity.federation/source/{types.ts → types/context.ts} +9 -4
  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 -5
  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 -4
  75. package/components/identity.tokens/operations/authenticate.d.ts +2 -2
  76. package/components/identity.tokens/operations/authenticate.js +10 -4
  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 +12 -5
  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 -6
  93. package/components/octets.storage/operations/store.js +1 -1
  94. package/documentation/access.md +27 -16
  95. package/documentation/authorities.md +53 -0
  96. package/documentation/cache.md +8 -1
  97. package/documentation/components.md +52 -27
  98. package/documentation/identity.md +17 -22
  99. package/documentation/io.md +56 -0
  100. package/documentation/protocol.md +3 -0
  101. package/documentation/query.md +57 -8
  102. package/documentation/require.md +15 -0
  103. package/documentation/tree.md +22 -4
  104. package/documentation/vary.md +14 -14
  105. package/entity.json +0 -0
  106. package/features/access.feature +83 -56
  107. package/features/annotation.feature +2 -0
  108. package/features/authorities.basic.feature +141 -0
  109. package/features/authorities.feature +32 -0
  110. package/features/authorities.federation.feature +99 -0
  111. package/features/authorities.tokens.feature +118 -0
  112. package/features/body.feature +5 -1
  113. package/features/cache.feature +78 -5
  114. package/features/cors.feature +6 -2
  115. package/features/debug.feature +34 -0
  116. package/features/directives.feature +5 -0
  117. package/features/dynamic.feature +18 -7
  118. package/features/errors.feature +19 -5
  119. package/features/etag.feature +103 -0
  120. package/features/identity.bans.feature +137 -0
  121. package/features/identity.basic.feature +137 -14
  122. package/features/identity.feature +7 -2
  123. package/features/identity.federation.feature +61 -8
  124. package/features/identity.roles.feature +220 -4
  125. package/features/identity.tokens.feature +114 -4
  126. package/features/io.feature +205 -0
  127. package/features/octets.entries.feature +11 -1
  128. package/features/octets.feature +60 -64
  129. package/features/octets.meta.feature +7 -3
  130. package/features/octets.workflows.feature +14 -0
  131. package/features/probes.feature +14 -0
  132. package/features/{queries.feature → query.feature} +50 -3
  133. package/features/require.feature +67 -0
  134. package/features/response.feature +12 -3
  135. package/features/routes.feature +25 -12
  136. package/features/steps/Database.ts +17 -10
  137. package/features/steps/Gateway.ts +24 -4
  138. package/features/steps/IdP.ts +28 -23
  139. package/features/steps/components/echo/manifest.toa.yaml +5 -0
  140. package/features/steps/components/echo/operations/identity.js +7 -0
  141. package/features/steps/components/greeter/manifest.toa.yaml +1 -0
  142. package/features/steps/components/octets.tester/manifest.toa.yaml +1 -0
  143. package/features/steps/components/pots/manifest.toa.yaml +12 -3
  144. package/features/steps/components/sequences/manifest.toa.yaml +1 -0
  145. package/features/steps/components/users.properties/manifest.toa.yaml +2 -1
  146. package/features/streams.feature +1 -0
  147. package/features/timing.feature +69 -0
  148. package/features/vary.feature +105 -3
  149. package/package.json +12 -14
  150. package/readme.md +19 -13
  151. package/schemas/annotation.cos.yaml +2 -1
  152. package/schemas/io/input.cos.yaml +3 -0
  153. package/schemas/io/message.cos.yaml +5 -0
  154. package/schemas/io/output.cos.yaml +5 -0
  155. package/schemas/querystring.cos.yaml +1 -0
  156. package/source/Annotation.ts +3 -2
  157. package/source/Context.ts +6 -4
  158. package/source/Directive.test.ts +7 -7
  159. package/source/Directive.ts +19 -46
  160. package/source/Endpoint.ts +55 -6
  161. package/source/Factory.ts +17 -9
  162. package/source/Gateway.ts +38 -53
  163. package/source/HTTP/Context.ts +89 -0
  164. package/source/HTTP/Server.ts +99 -121
  165. package/source/HTTP/Timing.ts +40 -0
  166. package/source/HTTP/exceptions.ts +7 -1
  167. package/source/HTTP/index.ts +1 -0
  168. package/source/HTTP/messages.test.ts +27 -8
  169. package/source/HTTP/messages.ts +32 -48
  170. package/source/Mapping.ts +12 -8
  171. package/source/Query.test.ts +1 -1
  172. package/source/Query.ts +35 -24
  173. package/source/RTD/Context.ts +7 -10
  174. package/source/RTD/Directives.ts +28 -4
  175. package/source/RTD/Endpoint.ts +6 -4
  176. package/source/RTD/Match.ts +2 -7
  177. package/source/RTD/Method.ts +7 -13
  178. package/source/RTD/Node.ts +13 -14
  179. package/source/RTD/Tree.ts +17 -16
  180. package/source/RTD/factory.ts +3 -6
  181. package/source/Tenant.ts +0 -8
  182. package/source/deployment.ts +33 -17
  183. package/source/directives/auth/Anonymous.ts +3 -2
  184. package/source/directives/auth/Authorization.ts +34 -21
  185. package/source/directives/auth/Delegate.ts +35 -0
  186. package/source/directives/auth/Incept.ts +13 -7
  187. package/source/directives/auth/Role.test.ts +53 -6
  188. package/source/directives/auth/Role.ts +27 -17
  189. package/source/directives/auth/Scheme.ts +2 -2
  190. package/source/directives/auth/types.ts +1 -1
  191. package/source/directives/cache/Cache.ts +5 -5
  192. package/source/directives/cache/Control.ts +48 -22
  193. package/source/directives/cache/types.ts +1 -1
  194. package/source/directives/cors/CORS.ts +18 -10
  195. package/source/directives/dev/Development.ts +4 -4
  196. package/source/directives/index.ts +6 -4
  197. package/source/directives/io/Directive.ts +11 -0
  198. package/source/directives/io/IO.ts +43 -0
  199. package/source/directives/io/Input.ts +50 -0
  200. package/source/directives/io/Message.ts +1 -0
  201. package/source/directives/io/Output.ts +69 -0
  202. package/source/directives/io/index.ts +3 -0
  203. package/source/directives/io/schemas.ts +12 -0
  204. package/source/directives/octets/Context.ts +5 -4
  205. package/source/directives/octets/Delete.ts +23 -11
  206. package/source/directives/octets/Directive.ts +10 -0
  207. package/source/directives/octets/Fetch.ts +33 -17
  208. package/source/directives/octets/List.ts +18 -8
  209. package/source/directives/octets/Octets.ts +9 -9
  210. package/source/directives/octets/Store.ts +29 -19
  211. package/source/directives/octets/Workflow.ts +12 -5
  212. package/source/directives/octets/types.ts +0 -7
  213. package/source/directives/octets/workflows/Workflow.ts +2 -2
  214. package/source/directives/require/Directive.ts +5 -0
  215. package/source/directives/require/Headers.ts +20 -0
  216. package/source/directives/require/Require.ts +28 -0
  217. package/source/directives/require/index.ts +3 -0
  218. package/source/directives/vary/Directive.ts +2 -1
  219. package/source/directives/vary/Embed.ts +14 -8
  220. package/source/directives/vary/Vary.ts +8 -6
  221. package/source/directives/vary/embeddings/Authority.ts +8 -0
  222. package/source/directives/vary/embeddings/Embedding.ts +2 -1
  223. package/source/directives/vary/embeddings/Header.ts +9 -7
  224. package/source/directives/vary/embeddings/Language.ts +2 -2
  225. package/source/directives/vary/embeddings/Parameter.ts +14 -0
  226. package/source/directives/vary/embeddings/index.ts +6 -4
  227. package/source/exceptions.ts +22 -11
  228. package/source/io.ts +2 -2
  229. package/source/root.ts +5 -0
  230. package/source/schemas.ts +1 -1
  231. package/transpiled/Annotation.d.ts +3 -2
  232. package/transpiled/Context.d.ts +6 -4
  233. package/transpiled/Directive.d.ts +8 -21
  234. package/transpiled/Directive.js +11 -14
  235. package/transpiled/Directive.js.map +1 -1
  236. package/transpiled/Endpoint.d.ts +7 -5
  237. package/transpiled/Endpoint.js +60 -2
  238. package/transpiled/Endpoint.js.map +1 -1
  239. package/transpiled/Factory.js +11 -4
  240. package/transpiled/Factory.js.map +1 -1
  241. package/transpiled/Gateway.d.ts +4 -8
  242. package/transpiled/Gateway.js +25 -35
  243. package/transpiled/Gateway.js.map +1 -1
  244. package/transpiled/HTTP/Context.d.ts +31 -0
  245. package/transpiled/HTTP/Context.js +60 -0
  246. package/transpiled/HTTP/Context.js.map +1 -0
  247. package/transpiled/HTTP/Server.d.ts +21 -9
  248. package/transpiled/HTTP/Server.js +98 -100
  249. package/transpiled/HTTP/Server.js.map +1 -1
  250. package/transpiled/HTTP/Timing.d.ts +10 -0
  251. package/transpiled/HTTP/Timing.js +29 -0
  252. package/transpiled/HTTP/Timing.js.map +1 -0
  253. package/transpiled/HTTP/exceptions.d.ts +4 -1
  254. package/transpiled/HTTP/exceptions.js +7 -1
  255. package/transpiled/HTTP/exceptions.js.map +1 -1
  256. package/transpiled/HTTP/index.d.ts +1 -0
  257. package/transpiled/HTTP/index.js +1 -0
  258. package/transpiled/HTTP/index.js.map +1 -1
  259. package/transpiled/HTTP/messages.d.ts +7 -21
  260. package/transpiled/HTTP/messages.js +24 -26
  261. package/transpiled/HTTP/messages.js.map +1 -1
  262. package/transpiled/Mapping.js +11 -8
  263. package/transpiled/Mapping.js.map +1 -1
  264. package/transpiled/Query.d.ts +1 -0
  265. package/transpiled/Query.js +21 -20
  266. package/transpiled/Query.js.map +1 -1
  267. package/transpiled/RTD/Context.d.ts +7 -6
  268. package/transpiled/RTD/Directives.d.ts +19 -4
  269. package/transpiled/RTD/Endpoint.d.ts +6 -4
  270. package/transpiled/RTD/Match.d.ts +2 -4
  271. package/transpiled/RTD/Method.d.ts +7 -7
  272. package/transpiled/RTD/Method.js.map +1 -1
  273. package/transpiled/RTD/Node.d.ts +4 -6
  274. package/transpiled/RTD/Node.js +2 -1
  275. package/transpiled/RTD/Node.js.map +1 -1
  276. package/transpiled/RTD/Tree.d.ts +6 -6
  277. package/transpiled/RTD/Tree.js +4 -1
  278. package/transpiled/RTD/Tree.js.map +1 -1
  279. package/transpiled/RTD/factory.d.ts +2 -4
  280. package/transpiled/RTD/factory.js +1 -1
  281. package/transpiled/RTD/factory.js.map +1 -1
  282. package/transpiled/Tenant.d.ts +0 -1
  283. package/transpiled/Tenant.js +0 -6
  284. package/transpiled/Tenant.js.map +1 -1
  285. package/transpiled/deployment.d.ts +1 -1
  286. package/transpiled/deployment.js +28 -15
  287. package/transpiled/deployment.js.map +1 -1
  288. package/transpiled/directives/auth/Anonymous.js +3 -4
  289. package/transpiled/directives/auth/Anonymous.js.map +1 -1
  290. package/transpiled/directives/auth/Authorization.d.ts +2 -3
  291. package/transpiled/directives/auth/Authorization.js +18 -11
  292. package/transpiled/directives/auth/Authorization.js.map +1 -1
  293. package/transpiled/directives/auth/Delegate.d.ts +8 -0
  294. package/transpiled/directives/auth/Delegate.js +29 -0
  295. package/transpiled/directives/auth/Delegate.js.map +1 -0
  296. package/transpiled/directives/auth/Incept.d.ts +1 -1
  297. package/transpiled/directives/auth/Incept.js +13 -7
  298. package/transpiled/directives/auth/Incept.js.map +1 -1
  299. package/transpiled/directives/auth/Role.d.ts +4 -1
  300. package/transpiled/directives/auth/Role.js +25 -17
  301. package/transpiled/directives/auth/Role.js.map +1 -1
  302. package/transpiled/directives/auth/Scheme.js +2 -2
  303. package/transpiled/directives/auth/Scheme.js.map +1 -1
  304. package/transpiled/directives/cache/Cache.d.ts +3 -3
  305. package/transpiled/directives/cache/Cache.js +3 -3
  306. package/transpiled/directives/cache/Cache.js.map +1 -1
  307. package/transpiled/directives/cache/Control.d.ts +5 -4
  308. package/transpiled/directives/cache/Control.js +32 -15
  309. package/transpiled/directives/cache/Control.js.map +1 -1
  310. package/transpiled/directives/cache/types.d.ts +1 -1
  311. package/transpiled/directives/cors/CORS.d.ts +2 -3
  312. package/transpiled/directives/cors/CORS.js +17 -10
  313. package/transpiled/directives/cors/CORS.js.map +1 -1
  314. package/transpiled/directives/dev/Development.d.ts +3 -3
  315. package/transpiled/directives/dev/Development.js +1 -1
  316. package/transpiled/directives/dev/Development.js.map +1 -1
  317. package/transpiled/directives/index.d.ts +2 -2
  318. package/transpiled/directives/index.js +5 -3
  319. package/transpiled/directives/index.js.map +1 -1
  320. package/transpiled/directives/io/Directive.d.ts +8 -0
  321. package/transpiled/directives/io/Directive.js +3 -0
  322. package/transpiled/directives/io/Directive.js.map +1 -0
  323. package/transpiled/directives/io/IO.d.ts +9 -0
  324. package/transpiled/directives/io/IO.js +33 -0
  325. package/transpiled/directives/io/IO.js.map +1 -0
  326. package/transpiled/directives/io/Input.d.ts +11 -0
  327. package/transpiled/directives/{octets/Permute.js → io/Input.js} +33 -21
  328. package/transpiled/directives/io/Input.js.map +1 -0
  329. package/transpiled/directives/io/Message.d.ts +1 -0
  330. package/transpiled/directives/io/Message.js +3 -0
  331. package/transpiled/directives/io/Message.js.map +1 -0
  332. package/transpiled/directives/io/Output.d.ts +13 -0
  333. package/transpiled/directives/io/Output.js +76 -0
  334. package/transpiled/directives/io/Output.js.map +1 -0
  335. package/transpiled/directives/io/index.d.ts +2 -0
  336. package/transpiled/directives/io/index.js +6 -0
  337. package/transpiled/directives/io/index.js.map +1 -0
  338. package/transpiled/directives/io/schemas.d.ts +7 -0
  339. package/transpiled/directives/io/schemas.js +14 -0
  340. package/transpiled/directives/io/schemas.js.map +1 -0
  341. package/transpiled/directives/octets/Context.d.ts +4 -4
  342. package/transpiled/directives/octets/Context.js +4 -2
  343. package/transpiled/directives/octets/Context.js.map +1 -1
  344. package/transpiled/directives/octets/Delete.d.ts +4 -3
  345. package/transpiled/directives/octets/Delete.js +22 -10
  346. package/transpiled/directives/octets/Delete.js.map +1 -1
  347. package/transpiled/directives/octets/Directive.d.ts +8 -0
  348. package/transpiled/directives/octets/Directive.js +8 -0
  349. package/transpiled/directives/octets/Directive.js.map +1 -0
  350. package/transpiled/directives/octets/Fetch.d.ts +4 -3
  351. package/transpiled/directives/octets/Fetch.js +31 -15
  352. package/transpiled/directives/octets/Fetch.js.map +1 -1
  353. package/transpiled/directives/octets/List.d.ts +4 -3
  354. package/transpiled/directives/octets/List.js +16 -7
  355. package/transpiled/directives/octets/List.js.map +1 -1
  356. package/transpiled/directives/octets/Octets.d.ts +4 -4
  357. package/transpiled/directives/octets/Octets.js +5 -5
  358. package/transpiled/directives/octets/Octets.js.map +1 -1
  359. package/transpiled/directives/octets/Store.d.ts +4 -3
  360. package/transpiled/directives/octets/Store.js +20 -13
  361. package/transpiled/directives/octets/Store.js.map +1 -1
  362. package/transpiled/directives/octets/Workflow.d.ts +4 -3
  363. package/transpiled/directives/octets/Workflow.js +11 -4
  364. package/transpiled/directives/octets/Workflow.js.map +1 -1
  365. package/transpiled/directives/octets/types.d.ts +0 -5
  366. package/transpiled/directives/octets/workflows/Workflow.d.ts +1 -1
  367. package/transpiled/directives/octets/workflows/Workflow.js +2 -2
  368. package/transpiled/directives/octets/workflows/Workflow.js.map +1 -1
  369. package/transpiled/directives/require/Directive.d.ts +4 -0
  370. package/transpiled/directives/require/Directive.js +3 -0
  371. package/transpiled/directives/require/Directive.js.map +1 -0
  372. package/transpiled/directives/require/Headers.d.ts +7 -0
  373. package/transpiled/directives/require/Headers.js +19 -0
  374. package/transpiled/directives/require/Headers.js.map +1 -0
  375. package/transpiled/directives/require/Require.d.ts +9 -0
  376. package/transpiled/directives/require/Require.js +27 -0
  377. package/transpiled/directives/require/Require.js.map +1 -0
  378. package/transpiled/directives/require/index.d.ts +2 -0
  379. package/transpiled/directives/require/index.js +6 -0
  380. package/transpiled/directives/require/index.js.map +1 -0
  381. package/transpiled/directives/vary/Directive.d.ts +2 -1
  382. package/transpiled/directives/vary/Embed.d.ts +2 -1
  383. package/transpiled/directives/vary/Embed.js +8 -6
  384. package/transpiled/directives/vary/Embed.js.map +1 -1
  385. package/transpiled/directives/vary/Vary.d.ts +3 -3
  386. package/transpiled/directives/vary/Vary.js +4 -4
  387. package/transpiled/directives/vary/Vary.js.map +1 -1
  388. package/transpiled/directives/vary/embeddings/Authority.d.ts +5 -0
  389. package/transpiled/directives/vary/embeddings/Authority.js +10 -0
  390. package/transpiled/directives/vary/embeddings/Authority.js.map +1 -0
  391. package/transpiled/directives/vary/embeddings/Embedding.d.ts +2 -1
  392. package/transpiled/directives/vary/embeddings/Header.js +9 -7
  393. package/transpiled/directives/vary/embeddings/Header.js.map +1 -1
  394. package/transpiled/directives/vary/embeddings/Language.js +2 -2
  395. package/transpiled/directives/vary/embeddings/Language.js.map +1 -1
  396. package/transpiled/directives/vary/embeddings/Parameter.d.ts +7 -0
  397. package/transpiled/directives/vary/embeddings/Parameter.js +14 -0
  398. package/transpiled/directives/vary/embeddings/Parameter.js.map +1 -0
  399. package/transpiled/directives/vary/embeddings/index.d.ts +2 -2
  400. package/transpiled/directives/vary/embeddings/index.js +8 -4
  401. package/transpiled/directives/vary/embeddings/index.js.map +1 -1
  402. package/transpiled/exceptions.d.ts +3 -2
  403. package/transpiled/exceptions.js +13 -7
  404. package/transpiled/exceptions.js.map +1 -1
  405. package/transpiled/io.d.ts +2 -2
  406. package/transpiled/root.js +5 -0
  407. package/transpiled/root.js.map +1 -1
  408. package/transpiled/schemas.d.ts +1 -1
  409. package/transpiled/schemas.js +2 -2
  410. package/transpiled/schemas.js.map +1 -1
  411. package/transpiled/tsconfig.tsbuildinfo +1 -1
  412. package/components/identity.basic/operations/create.d.ts +0 -10
  413. package/components/identity.basic/operations/create.js +0 -10
  414. package/components/identity.basic/operations/create.js.map +0 -1
  415. package/components/identity.basic/source/create.ts +0 -18
  416. package/components/identity.federation/operations/create.d.ts +0 -10
  417. package/components/identity.federation/operations/create.js.map +0 -1
  418. package/components/identity.federation/operations/schemas.d.ts +0 -59
  419. package/components/identity.federation/operations/schemas.js +0 -9
  420. package/components/identity.federation/operations/schemas.js.map +0 -1
  421. package/components/identity.federation/operations/types.js.map +0 -1
  422. package/components/identity.federation/source/schemas.ts +0 -61
  423. package/components/octets.storage/operations/permute.js +0 -7
  424. package/source/HTTP/Server.fixtures.ts +0 -40
  425. package/source/HTTP/Server.test.ts +0 -126
  426. package/source/directives/octets/Permute.ts +0 -37
  427. package/transpiled/HTTP/Server.fixtures.d.ts +0 -10
  428. package/transpiled/HTTP/Server.fixtures.js +0 -31
  429. package/transpiled/HTTP/Server.fixtures.js.map +0 -1
  430. package/transpiled/directives/octets/Permute.d.ts +0 -10
  431. package/transpiled/directives/octets/Permute.js.map +0 -1
@@ -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
@@ -45,7 +45,7 @@ Undefined `query` denies any query arguments in requests.
45
45
 
46
46
  ## Criteria
47
47
 
48
- Search critaria in [RSQL](https://github.com/jirutka/rsql-parser) format.
48
+ Search criteria in [RSQL](https://github.com/jirutka/rsql-parser) format.
49
49
 
50
50
  The `criteria` property is considered as *open* when it ends with a `;`, allowing the combination of
51
51
  request query criteria using `and` logic.
@@ -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 logial 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
@@ -224,3 +228,48 @@ A list of Entity properties to be included in the Observation result.
224
228
  ```yaml
225
229
  projection: [id, title, timestamp]
226
230
  ```
231
+
232
+ ## Optimistic concurrency control
233
+
234
+ If an operation returns an object with `_version` property,
235
+ then its value is passed as the value of
236
+ the [`etag` header](https://datatracker.ietf.org/doc/html/rfc7232#section-2.3) in the response
237
+ (and removed from the object).
238
+
239
+ Client can use the `if-match` request header to perform an operation only if the corresponding
240
+ object has not been modified since the last retrieval.
241
+
242
+ ```http
243
+ GET /dummies/5e82ed5e/ HTTP/1.1
244
+
245
+ ---
246
+
247
+ HTTP/1.1 200 OK
248
+ etag: "1"
249
+
250
+ foo: bar
251
+ ```
252
+
253
+ ```http request
254
+ PUT /dummies/5e82ed5e/ HTTP/1.1
255
+ if-match: "1"
256
+
257
+ foo: baz
258
+ ```
259
+
260
+ ```http
261
+ 200 OK
262
+ ```
263
+
264
+ ```http request
265
+ PUT /dummies/5e82ed5e/ HTTP/1.1
266
+ if-match: "never"
267
+
268
+ foo: baz
269
+ ```
270
+
271
+ ```http
272
+ 412 Precondition Failed
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
+ ```
@@ -102,7 +102,7 @@ HTTP methods can only be mapped to operations of the corresponding types.
102
102
  | `GET` | **Observation**<br/>**Computation** |
103
103
  | `PATCH` | **Assignment**<br/>**Effect** |
104
104
 
105
- As method mapping is unambiguous for Observation, Assignent, and Computation, a consice syntax is
105
+ As method mapping is unambiguous for Observation, Assignment, and Computation, a concise syntax is
106
106
  available:
107
107
 
108
108
  ```yaml
@@ -110,7 +110,23 @@ available:
110
110
  /items/:id: [observe, assign]
111
111
  ```
112
112
 
113
- ### Intermediate Nodes
113
+ ### Projections
114
+
115
+ A Method can have a `projection` key that specifies the fields of the operation result to be
116
+ included in the response.
117
+
118
+ ```yaml
119
+ /teapots:
120
+ GET:
121
+ endpoint: select
122
+ projection:
123
+ - name
124
+ - state
125
+ ```
126
+
127
+ > `id` is always included in the projection.
128
+
129
+ ## Intermediate Nodes
114
130
 
115
131
  An RTD Node that has a Route with a key `/` is an _intermediate_ Node.
116
132
  Intermediate Nodes must not have Methods as they are unreachable.
@@ -124,8 +140,10 @@ Intermediate Nodes must not have Methods as they are unreachable.
124
140
 
125
141
  ## Directives
126
142
 
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
143
+ RTD Directives are declared using RTD node or Method keys following the `{family}:{directive}`
144
+ pattern and can be used
145
+ to add or modify the behavior of request processing. Directive declarations are applied to the RTD
146
+ node where they are
129
147
  declared and to all nested nodes.
130
148
 
131
149
  ```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.
package/entity.json ADDED
File without changes
@@ -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,31 @@ 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
- 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
471
 
424
- banned: true
425
- """
426
- Then the following reply is sent:
427
- """
428
- 204 No Content
429
- """
430
- # accessing a resource with a banned Identity
431
- When the following request is received:
432
- """
433
- GET /e8e4f9c2a68d419b861403d71fabc915/ HTTP/1.1
434
- authorization: Basic dXNlcjoxMjM0NQ==
435
- """
436
- Then the following reply is sent:
437
- """
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 }}
445
- """
446
- Then the following reply is sent:
447
- """
448
- 401 Unauthorized
472
+ identity:
473
+ id: efe3a65ebbee47ed95a73edd911ea328
474
+ roles:
475
+ - developer
449
476
  """
@@ -4,6 +4,7 @@ Feature: Annotation
4
4
  Given the annotation:
5
5
  """yaml
6
6
  /:
7
+ io:output: true
7
8
  anonymous: true
8
9
  /foo:
9
10
  GET:
@@ -17,6 +18,7 @@ Feature: Annotation
17
18
  When the following request is received:
18
19
  """
19
20
  GET /foo/ HTTP/1.1
21
+ host: nex.toa.io
20
22
  accept: application/yaml
21
23
  """
22
24
  Then the following reply is sent: