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

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
@@ -1,16 +1,20 @@
1
+ @security
1
2
  Feature: Roles management
2
3
 
3
- Scenario: Adding a role to an Identity
4
+ Scenario: Granting a role to an Identity
5
+ # root:secret
6
+ # user:pass
4
7
  Given the `identity.basic` database contains:
5
- | _id | username | password |
6
- | 72cf9b0ab0ac4ab2b8036e4e940ddcae | root | $2b$10$Qq/qnyyU5wjrbDXyWok14OnqAZv/z.pLhz.UddatjI6eHU/rFof4i |
7
- | 4344518184ad44228baffce7a44fd0b1 | user | $2b$10$JoiAQUS7tzobDAFIDBWhWeEIJv933dQetyjRzSmfQGaJE5ZlJbmYy |
8
+ | _id | authority | username | password |
9
+ | 72cf9b0ab0ac4ab2b8036e4e940ddcae | nex | root | $2b$10$Qq/qnyyU5wjrbDXyWok14OnqAZv/z.pLhz.UddatjI6eHU/rFof4i |
10
+ | 4344518184ad44228baffce7a44fd0b1 | nex | user | $2b$10$JoiAQUS7tzobDAFIDBWhWeEIJv933dQetyjRzSmfQGaJE5ZlJbmYy |
8
11
  And the `identity.roles` database contains:
9
12
  | _id | identity | role |
10
13
  | 9c4702490ff84f2a9e1b1da2ab64bdd4 | 72cf9b0ab0ac4ab2b8036e4e940ddcae | system:identity:roles |
11
14
  And the annotation:
12
15
  """yaml
13
16
  /:
17
+ io:output: true
14
18
  auth:role: test
15
19
  GET:
16
20
  dev:stub:
@@ -20,6 +24,7 @@ Feature: Roles management
20
24
  # user doesn't have the required role
21
25
  """
22
26
  GET / HTTP/1.1
27
+ host: nex.toa.io
23
28
  authorization: Basic dXNlcjpwYXNz
24
29
  """
25
30
  Then the following reply is sent:
@@ -30,7 +35,9 @@ Feature: Roles management
30
35
  # root adds a role to a user
31
36
  """
32
37
  POST /identity/roles/4344518184ad44228baffce7a44fd0b1/ HTTP/1.1
38
+ host: nex.toa.io
33
39
  authorization: Basic cm9vdDpzZWNyZXQ=
40
+ accept: application/yaml
34
41
  content-type: application/yaml
35
42
 
36
43
  role: test
@@ -38,14 +45,223 @@ Feature: Roles management
38
45
  Then the following reply is sent:
39
46
  """
40
47
  201 Created
48
+
49
+ grantor: 72cf9b0ab0ac4ab2b8036e4e940ddcae
41
50
  """
42
51
  When the following request is received:
43
52
  # user now have the role
44
53
  """
45
54
  GET / HTTP/1.1
55
+ host: nex.toa.io
46
56
  authorization: Basic dXNlcjpwYXNz
47
57
  """
48
58
  Then the following reply is sent:
49
59
  """
50
60
  200 OK
51
61
  """
62
+
63
+ Scenario Outline: Delegating roles
64
+ # moderator:secret
65
+ # assistant:pass
66
+ Given the `identity.basic` database contains:
67
+ | _id | authority | username | password |
68
+ | 72cf9b0ab0ac4ab2b8036e4e940ddcae | nex | moderator | $2b$10$Qq/qnyyU5wjrbDXyWok14OnqAZv/z.pLhz.UddatjI6eHU/rFof4i |
69
+ | 4344518184ad44228baffce7a44fd0b1 | nex | assistant | $2b$10$JoiAQUS7tzobDAFIDBWhWeEIJv933dQetyjRzSmfQGaJE5ZlJbmYy |
70
+ And the `identity.roles` database contains:
71
+ | _id | identity | role |
72
+ | 9c4702490ff84f2a9e1b1da2ab64bdd4 | 72cf9b0ab0ac4ab2b8036e4e940ddcae | system:identity:roles:delegation |
73
+ | 30c969e05ff6437097ed5f07fc52358e | 72cf9b0ab0ac4ab2b8036e4e940ddcae | app:moderation |
74
+ And the annotation:
75
+ """yaml
76
+ /:
77
+ io:output: true
78
+ auth:role: app:moderation:photos
79
+ GET:
80
+ dev:stub:
81
+ access: granted!
82
+ """
83
+ When the following request is received:
84
+ # assistant doesn't have the required role
85
+ """
86
+ GET / HTTP/1.1
87
+ host: nex.toa.io
88
+ authorization: Basic YXNzaXN0YW50OnBhc3M=
89
+ """
90
+ Then the following reply is sent:
91
+ """
92
+ 403 Forbidden
93
+ """
94
+ When the following request is received:
95
+ # moderator delegates a role to an assistant
96
+ """
97
+ POST /identity/roles/4344518184ad44228baffce7a44fd0b1/ HTTP/1.1
98
+ host: nex.toa.io
99
+ authorization: Basic bW9kZXJhdG9yOnNlY3JldA==
100
+ content-type: application/yaml
101
+
102
+ role: <role>
103
+ """
104
+ Then the following reply is sent:
105
+ """
106
+ 201 Created
107
+ """
108
+ When the following request is received:
109
+ # assistant has access
110
+ """
111
+ GET / HTTP/1.1
112
+ host: nex.toa.io
113
+ authorization: Basic YXNzaXN0YW50OnBhc3M=
114
+ """
115
+ Then the following reply is sent:
116
+ """
117
+ 200 OK
118
+ """
119
+ Examples:
120
+ | role |
121
+ | app:moderation |
122
+ | app:moderation:photos |
123
+
124
+ Scenario: Delegating role out of own scope
125
+ Given the `identity.basic` database contains:
126
+ | _id | authority | username | password |
127
+ | 72cf9b0ab0ac4ab2b8036e4e940ddcae | nex | moderator | $2b$10$Qq/qnyyU5wjrbDXyWok14OnqAZv/z.pLhz.UddatjI6eHU/rFof4i |
128
+ | 4344518184ad44228baffce7a44fd0b1 | nex | assistant | $2b$10$JoiAQUS7tzobDAFIDBWhWeEIJv933dQetyjRzSmfQGaJE5ZlJbmYy |
129
+ And the `identity.roles` database contains:
130
+ | _id | identity | role |
131
+ | 9c4702490ff84f2a9e1b1da2ab64bdd4 | 72cf9b0ab0ac4ab2b8036e4e940ddcae | system:identity:roles:delegation |
132
+ | 30c969e05ff6437097ed5f07fc52358e | 72cf9b0ab0ac4ab2b8036e4e940ddcae | app:moderation |
133
+ And the annotation:
134
+ """yaml
135
+ /:
136
+ io:output: true
137
+ auth:role: app:moderation:photos
138
+ GET:
139
+ dev:stub:
140
+ access: granted!
141
+ """
142
+ When the following request is received:
143
+ """
144
+ POST /identity/roles/4344518184ad44228baffce7a44fd0b1/ HTTP/1.1
145
+ host: nex.toa.io
146
+ accept: application/yaml
147
+ content-type: application/yaml
148
+ authorization: Basic bW9kZXJhdG9yOnNlY3JldA==
149
+
150
+ role: app:finance
151
+ """
152
+ Then the following reply is sent:
153
+ """
154
+ 422 Unprocessable Entity
155
+
156
+ code: OUT_OF_SCOPE
157
+ """
158
+
159
+ Scenario: Delegating role without `system:identity:roles:delegation` role
160
+ Given the `identity.basic` database contains:
161
+ | _id | authority | username | password |
162
+ | 72cf9b0ab0ac4ab2b8036e4e940ddcae | nex | moderator | $2b$10$Qq/qnyyU5wjrbDXyWok14OnqAZv/z.pLhz.UddatjI6eHU/rFof4i |
163
+ | 4344518184ad44228baffce7a44fd0b1 | nex | assistant | $2b$10$JoiAQUS7tzobDAFIDBWhWeEIJv933dQetyjRzSmfQGaJE5ZlJbmYy |
164
+ And the `identity.roles` database contains:
165
+ | _id | identity | role |
166
+ | 30c969e05ff6437097ed5f07fc52358e | 72cf9b0ab0ac4ab2b8036e4e940ddcae | app:moderation |
167
+ And the annotation:
168
+ """yaml
169
+ /:
170
+ io:output: true
171
+ auth:role: app:moderation:photos
172
+ GET:
173
+ dev:stub:
174
+ access: granted!
175
+ """
176
+ When the following request is received:
177
+ """
178
+ POST /identity/roles/4344518184ad44228baffce7a44fd0b1/ HTTP/1.1
179
+ host: nex.toa.io
180
+ content-type: application/yaml
181
+ authorization: Basic bW9kZXJhdG9yOnNlY3JldA==
182
+
183
+ role: app:moderation
184
+ """
185
+ Then the following reply is sent:
186
+ """
187
+ 403 Forbidden
188
+ """
189
+
190
+ Scenario Outline: Invalid role name
191
+ Given the `identity.basic` database contains:
192
+ | _id | authority | username | password |
193
+ | 72cf9b0ab0ac4ab2b8036e4e940ddcae | nex | root | $2b$10$Qq/qnyyU5wjrbDXyWok14OnqAZv/z.pLhz.UddatjI6eHU/rFof4i |
194
+ And the `identity.roles` database contains:
195
+ | _id | identity | role |
196
+ | 9c4702490ff84f2a9e1b1da2ab64bdd4 | 72cf9b0ab0ac4ab2b8036e4e940ddcae | system:identity:roles |
197
+ When the following request is received:
198
+ # root adds a role to a user
199
+ """
200
+ POST /identity/roles/4344518184ad44228baffce7a44fd0b1/ HTTP/1.1
201
+ host: nex.toa.io
202
+ authorization: Basic cm9vdDpzZWNyZXQ=
203
+ content-type: application/yaml
204
+
205
+ role: <role>
206
+ """
207
+ Then the following reply is sent:
208
+ """
209
+ 400 Bad Request
210
+ """
211
+ Examples:
212
+ | role |
213
+ | app! |
214
+ | app: |
215
+ | app:no spaces |
216
+
217
+ Scenario: Dynamic roles
218
+ Given the `identity.basic` database contains:
219
+ | _id | authority | username | password |
220
+ | 72cf9b0ab0ac4ab2b8036e4e940ddcae | nex | moderator | $2b$10$Qq/qnyyU5wjrbDXyWok14OnqAZv/z.pLhz.UddatjI6eHU/rFof4i |
221
+ And the `identity.roles` database contains:
222
+ | _id | identity | role |
223
+ | 30c969e05ff6437097ed5f07fc52358e | 72cf9b0ab0ac4ab2b8036e4e940ddcae | app:29e54ae1:moderation |
224
+ And the annotation:
225
+ """yaml
226
+ /:
227
+ /broken:
228
+ auth:role: app:{org}:moderation
229
+ GET:
230
+ dev:stub: never
231
+ /:org:
232
+ io:output: true
233
+ auth:role: app:{org}:moderation
234
+ GET:
235
+ dev:stub:
236
+ access: granted!
237
+ """
238
+ When the following request is received:
239
+ """
240
+ GET /29e54ae1/ HTTP/1.1
241
+ host: nex.toa.io
242
+ authorization: Basic bW9kZXJhdG9yOnNlY3JldA==
243
+ """
244
+ Then the following reply is sent:
245
+ """
246
+ 200 OK
247
+ """
248
+ When the following request is received:
249
+ """
250
+ GET /88584c9b/ HTTP/1.1
251
+ host: nex.toa.io
252
+ authorization: Basic bW9kZXJhdG9yOnNlY3JldA==
253
+ """
254
+ Then the following reply is sent:
255
+ """
256
+ 403 Forbidden
257
+ """
258
+ When the following request is received:
259
+ """
260
+ GET /broken/ HTTP/1.1
261
+ host: nex.toa.io
262
+ authorization: Basic bW9kZXJhdG9yOnNlY3JldA==
263
+ """
264
+ Then the following reply is sent:
265
+ """
266
+ 500 Internal Server Error
267
+ """
@@ -1,12 +1,14 @@
1
+ @security
1
2
  Feature: Tokens lifecycle
2
3
 
3
4
  Scenario: Switching to Token authentication scheme
4
5
  Given the `identity.basic` database contains:
5
- | _id | username | password |
6
- | efe3a65ebbee47ed95a73edd911ea328 | developer | $2b$10$ZRSKkgZoGnrcTNA5w5eCcu3pxDzdTduhteVYXcp56AaNcilNkwJ.O |
6
+ | _id | authority | username | password |
7
+ | efe3a65ebbee47ed95a73edd911ea328 | nex | developer | $2b$10$ZRSKkgZoGnrcTNA5w5eCcu3pxDzdTduhteVYXcp56AaNcilNkwJ.O |
7
8
  Given the annotation:
8
9
  """yaml
9
10
  /:
11
+ io:output: true
10
12
  /hello/:id:
11
13
  auth:id: id
12
14
  GET:
@@ -15,6 +17,7 @@ Feature: Tokens lifecycle
15
17
  When the following request is received:
16
18
  """
17
19
  GET /hello/efe3a65ebbee47ed95a73edd911ea328/ HTTP/1.1
20
+ host: nex.toa.io
18
21
  authorization: Basic ZGV2ZWxvcGVyOnNlY3JldA==
19
22
  accept: text/plain
20
23
  """
@@ -35,6 +38,7 @@ Feature: Tokens lifecycle
35
38
  And the annotation:
36
39
  """yaml
37
40
  /:
41
+ io:output: true
38
42
  /hello/:id:
39
43
  auth:id: id
40
44
  GET:
@@ -43,6 +47,7 @@ Feature: Tokens lifecycle
43
47
  When the following request is received:
44
48
  """
45
49
  GET /hello/efe3a65ebbee47ed95a73edd911ea328/ HTTP/1.1
50
+ host: nex.toa.io
46
51
  authorization: Basic ZGV2ZWxvcGVyOnNlY3JldA==
47
52
  accept: text/plain
48
53
  """
@@ -57,6 +62,7 @@ Feature: Tokens lifecycle
57
62
  When the following request is received:
58
63
  """
59
64
  GET /hello/efe3a65ebbee47ed95a73edd911ea328/ HTTP/1.1
65
+ host: nex.toa.io
60
66
  authorization: Token ${{ token }}
61
67
  accept: text/plain
62
68
  """
@@ -64,6 +70,7 @@ Feature: Tokens lifecycle
64
70
  """
65
71
  200 OK
66
72
  authorization: Token
73
+ cache-control: no-store
67
74
 
68
75
  Hello
69
76
  """
@@ -72,6 +79,7 @@ Feature: Tokens lifecycle
72
79
  Given the annotation:
73
80
  """yaml
74
81
  /:
82
+ io:output: true
75
83
  /:id:
76
84
  id: id
77
85
  GET:
@@ -83,11 +91,12 @@ Feature: Tokens lifecycle
83
91
  refresh: 0.1
84
92
  """
85
93
  And the `identity.basic` database contains:
86
- | _id | _version | username | password |
87
- | efe3a65ebbee47ed95a73edd911ea328 | 1 | developer | $2b$10$ZRSKkgZoGnrcTNA5w5eCcu3pxDzdTduhteVYXcp56AaNcilNkwJ.O |
94
+ | _id | _version | authority | username | password |
95
+ | efe3a65ebbee47ed95a73edd911ea328 | 1 | nex | developer | $2b$10$ZRSKkgZoGnrcTNA5w5eCcu3pxDzdTduhteVYXcp56AaNcilNkwJ.O |
88
96
  When the following request is received:
89
97
  """
90
98
  GET /efe3a65ebbee47ed95a73edd911ea328/ HTTP/1.1
99
+ host: nex.toa.io
91
100
  authorization: Basic ZGV2ZWxvcGVyOnNlY3JldA==
92
101
  """
93
102
  Then the following reply is sent:
@@ -98,6 +107,7 @@ Feature: Tokens lifecycle
98
107
  When the following request is received:
99
108
  """
100
109
  PATCH /identity/basic/efe3a65ebbee47ed95a73edd911ea328/ HTTP/1.1
110
+ host: nex.toa.io
101
111
  authorization: Basic ZGV2ZWxvcGVyOnNlY3JldA==
102
112
  content-type: application/yaml
103
113
 
@@ -111,9 +121,109 @@ Feature: Tokens lifecycle
111
121
  When the following request is received:
112
122
  """
113
123
  GET /efe3a65ebbee47ed95a73edd911ea328/ HTTP/1.1
124
+ host: nex.toa.io
114
125
  authorization: Token ${{ token }}
115
126
  """
116
127
  Then the following reply is sent:
117
128
  """
118
129
  401 Unauthorized
119
130
  """
131
+
132
+ Scenario: Issuing own token
133
+ Given the `identity.basic` database contains:
134
+ | _id | authority | username | password |
135
+ | efe3a65ebbee47ed95a73edd911ea328 | nex | developer | $2b$10$ZRSKkgZoGnrcTNA5w5eCcu3pxDzdTduhteVYXcp56AaNcilNkwJ.O |
136
+ When the following request is received:
137
+ """
138
+ GET /identity/ HTTP/1.1
139
+ host: nex.toa.io
140
+ authorization: Basic ZGV2ZWxvcGVyOnNlY3JldA==
141
+ """
142
+ Then the following reply is sent:
143
+ """
144
+ 200 OK
145
+ authorization: Token ${{ token }}
146
+ """
147
+ When the following request is received:
148
+ """
149
+ POST /identity/tokens/ HTTP/1.1
150
+ host: nex.toa.io
151
+ authorization: Token ${{ token }}
152
+ content-type: application/yaml
153
+
154
+ lifetime: 0
155
+ """
156
+ Then the following reply is sent:
157
+ """
158
+ 201 Created
159
+ """
160
+ # Token scheme must be used
161
+ When the following request is received:
162
+ """
163
+ POST /identity/tokens/ HTTP/1.1
164
+ host: nex.toa.io
165
+ authorization: Basic ZGV2ZWxvcGVyOnNlY3JldA==
166
+ content-type: application/yaml
167
+
168
+ lifetime: 60
169
+ """
170
+ Then the following reply is sent:
171
+ """
172
+ 403 Forbidden
173
+ """
174
+
175
+ Scenario: Responses with tokens comes with `no-store`
176
+ Given the `identity.tokens` configuration:
177
+ """yaml
178
+ refresh: 1
179
+ """
180
+ And the annotation:
181
+ """yaml
182
+ /:
183
+ io:output: true
184
+ /hello/:id:
185
+ auth:id: id
186
+ GET:
187
+ dev:stub: Hello
188
+ /cacheable/:id:
189
+ auth:id: id
190
+ cache:control: max-age=10000
191
+ GET:
192
+ dev:stub: Keep it
193
+ """
194
+ When the following request is received:
195
+ """
196
+ GET /hello/efe3a65ebbee47ed95a73edd911ea328/ HTTP/1.1
197
+ host: nex.toa.io
198
+ authorization: Basic ZGV2ZWxvcGVyOnNlY3JldA==
199
+ """
200
+ Then the following reply is sent:
201
+ """
202
+ 200 OK
203
+ authorization: Token ${{ token }}
204
+ cache-control: no-store
205
+ """
206
+ Then after 1 second
207
+ When the following request is received:
208
+ """
209
+ GET /cacheable/efe3a65ebbee47ed95a73edd911ea328/ HTTP/1.1
210
+ host: nex.toa.io
211
+ authorization: Token ${{ token }}
212
+ """
213
+ Then the following reply is sent:
214
+ """
215
+ 200 OK
216
+ authorization: Token ${{ fresh_token }}
217
+ cache-control: no-store
218
+ """
219
+ When the following request is received:
220
+ """
221
+ GET /cacheable/efe3a65ebbee47ed95a73edd911ea328/ HTTP/1.1
222
+ host: nex.toa.io
223
+ authorization: Token ${{ fresh_token }}
224
+ """
225
+ Then the following reply is sent:
226
+ """
227
+ 200 OK
228
+ cache-control: private, max-age=10000
229
+ """
@@ -0,0 +1,205 @@
1
+ @security
2
+ Feature: IO restrictions
3
+
4
+ Background:
5
+ Given the `pots` database contains:
6
+ | _id | title | volume | temperature |
7
+ | 4c4759e6f9c74da989d64511df42d6f4 | First pot | 100 | 80 |
8
+ | 99988d785d7d445cad45dbf8531f560b | Second pot | 200 | 30 |
9
+
10
+ Scenario: Output is omitted by default
11
+ Given the `pots` is running with the following manifest:
12
+ """yaml
13
+ exposition:
14
+ /:
15
+ GET: enumerate
16
+ /:id:
17
+ GET: observe
18
+ """
19
+ When the following request is received:
20
+ """
21
+ GET /pots/4c4759e6f9c74da989d64511df42d6f4/ HTTP/1.1
22
+ host: nex.toa.io
23
+ """
24
+ Then the following reply is sent:
25
+ """
26
+ 200 OK
27
+ content-length: 0
28
+ """
29
+ When the following request is received:
30
+ """
31
+ GET /pots/ HTTP/1.1
32
+ host: nex.toa.io
33
+ accept: application/yaml
34
+ """
35
+ Then the following reply is sent:
36
+ """
37
+ 200 OK
38
+ content-length: 0
39
+ """
40
+
41
+ Scenario: Output is omitted by intention
42
+ Given the `pots` is running with the following manifest:
43
+ """yaml
44
+ exposition:
45
+ /:id:
46
+ io:output: false
47
+ GET: observe
48
+ """
49
+ When the following request is received:
50
+ """
51
+ GET /pots/4c4759e6f9c74da989d64511df42d6f4/ HTTP/1.1
52
+ host: nex.toa.io
53
+ accept: application/yaml
54
+ """
55
+ Then the following reply is sent:
56
+ """
57
+ 200 OK
58
+ content-length: 0
59
+ """
60
+
61
+ Scenario: Output permissions
62
+ Given the `pots` is running with the following manifest:
63
+ """yaml
64
+ exposition:
65
+ /:
66
+ io:output: [id, volume]
67
+ GET: enumerate
68
+ /:id:
69
+ GET: observe
70
+ """
71
+ When the following request is received:
72
+ """
73
+ GET /pots/4c4759e6f9c74da989d64511df42d6f4/ HTTP/1.1
74
+ host: nex.toa.io
75
+ accept: application/yaml
76
+ """
77
+ Then the following reply is sent:
78
+ """
79
+ 200 OK
80
+
81
+ id: 4c4759e6f9c74da989d64511df42d6f4
82
+ volume: 100
83
+ """
84
+ And the reply does not contain:
85
+ """
86
+ title:
87
+ temperature:
88
+ """
89
+ When the following request is received:
90
+ """
91
+ GET /pots/ HTTP/1.1
92
+ host: nex.toa.io
93
+ accept: application/yaml
94
+ """
95
+ Then the following reply is sent:
96
+ """
97
+ 200 OK
98
+ content-type: application/yaml
99
+
100
+ - id: 4c4759e6f9c74da989d64511df42d6f4
101
+ volume: 100
102
+ - id: 99988d785d7d445cad45dbf8531f560b
103
+ volume: 200
104
+ """
105
+ And the reply does not contain:
106
+ """
107
+ title:
108
+ temperature:
109
+ """
110
+
111
+ Scenario: Input is unrestricted by default
112
+ Given the `pots` is running with the following manifest:
113
+ """yaml
114
+ exposition:
115
+ /:
116
+ io:output: true
117
+ POST: create
118
+ """
119
+ When the following request is received:
120
+ """
121
+ POST /pots/ HTTP/1.1
122
+ host: nex.toa.io
123
+ accept: application/yaml
124
+ content-type: application/yaml
125
+
126
+ title: Hello
127
+ volume: 1.5
128
+ temperature: 80
129
+ """
130
+ Then the following reply is sent:
131
+ """
132
+ 201 Created
133
+
134
+ title: Hello
135
+ volume: 1.5
136
+ temperature: 80
137
+ """
138
+
139
+ Scenario: Input permissions
140
+ Given the `pots` is running with the following manifest:
141
+ """yaml
142
+ exposition:
143
+ /:
144
+ io:input: [title, volume]
145
+ io:output: [id]
146
+ POST: create
147
+ """
148
+ When the following request is received:
149
+ """
150
+ POST /pots/ HTTP/1.1
151
+ host: nex.toa.io
152
+ accept: text/plain
153
+ content-type: application/yaml
154
+
155
+ title: Hello
156
+ volume: 1.5
157
+ temperature: 80
158
+ """
159
+ Then the following reply is sent:
160
+ """
161
+ 400 Bad Request
162
+
163
+ Unexpected input: temperature
164
+ """
165
+ When the following request is received:
166
+ """
167
+ POST /pots/ HTTP/1.1
168
+ host: nex.toa.io
169
+ content-type: application/yaml
170
+
171
+ title: Hello
172
+ volume: 1.5
173
+ """
174
+ Then the following reply is sent:
175
+ """
176
+ 201 Created
177
+ """
178
+
179
+ Scenario: IO shortcuts
180
+ Given the `pots` is running with the following manifest:
181
+ """yaml
182
+ exposition:
183
+ /:
184
+ input: [title, volume]
185
+ output: [id, title, volume]
186
+ POST: create
187
+ """
188
+ When the following request is received:
189
+ """
190
+ POST /pots/ HTTP/1.1
191
+ host: nex.toa.io
192
+ accept: application/yaml
193
+ content-type: application/yaml
194
+
195
+ title: Hello
196
+ volume: 1.5
197
+ """
198
+ Then the following reply is sent:
199
+ """
200
+ 201 Created
201
+
202
+ id:
203
+ title: Hello
204
+ volume: 1.5
205
+ """