@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
@@ -1,21 +1,21 @@
1
+ @security
1
2
  Feature: Identity Federation
2
3
 
3
4
  Background:
4
5
  Given the `identity.federation` database is empty
5
- Given local IDP is running
6
-
6
+ And local IDP is running
7
7
 
8
8
  Scenario: Getting identity for a new user
9
9
  Given the `identity.federation` configuration:
10
10
  """yaml
11
- explicit_identity_creation: false
12
11
  trust:
13
- - issuer: http://localhost:44444
12
+ - iss: http://localhost:44444
14
13
  """
15
14
  And the IDP token for User is issued
16
15
  When the following request is received:
17
16
  """
18
17
  GET /identity/ HTTP/1.1
18
+ host: nex.toa.io
19
19
  authorization: Bearer ${{ User.id_token }}
20
20
  accept: application/yaml
21
21
  content-type: application/yaml
@@ -27,39 +27,41 @@ Feature: Identity Federation
27
27
 
28
28
  id: ${{ User.id }}
29
29
  roles: []
30
- scheme: bearer
31
30
  """
32
- # validate token
31
+ # validate TOKEN
33
32
  When the following request is received:
34
33
  """
35
34
  GET /identity/ HTTP/1.1
35
+ host: nex.toa.io
36
36
  accept: application/yaml
37
37
  authorization: Token ${{ User.token }}
38
38
  """
39
39
  Then the following reply is sent:
40
40
  """
41
41
  200 OK
42
+
42
43
  id: ${{ User.id }}
43
44
  """
44
- # ensuring identity idemptotency
45
+ # ensuring identity idempotency
45
46
  When the following request is received:
46
47
  """
47
48
  GET /identity/ HTTP/1.1
49
+ host: nex.toa.io
48
50
  authorization: Bearer ${{ User.id_token }}
49
51
  accept: application/yaml
50
52
  """
51
53
  Then the following reply is sent:
52
54
  """
53
55
  200 OK
56
+
54
57
  id: ${{ User.id }}
55
58
  """
56
59
 
57
60
  Scenario: Getting identity for a user with symmetric tokens
58
61
  Given the `identity.federation` configuration:
59
62
  """yaml
60
- explicit_identity_creation: false
61
63
  trust:
62
- - issuer: http://localhost:44444
64
+ - iss: http://localhost:44444
63
65
  secrets:
64
66
  HS384:
65
67
  k1: the-secret
@@ -71,6 +73,7 @@ Feature: Identity Federation
71
73
  When the following request is received:
72
74
  """
73
75
  GET /identity/ HTTP/1.1
76
+ host: nex.toa.io
74
77
  authorization: Bearer ${{ GoodUser.id_token }}
75
78
  accept: application/yaml
76
79
  content-type: application/yaml
@@ -81,14 +84,13 @@ Feature: Identity Federation
81
84
  authorization: Token ${{ GoodUser.token }}
82
85
 
83
86
  id: ${{ GoodUser.id }}
84
- scheme: bearer
85
87
  """
86
88
 
87
- Scenario: Creating an Identity using inception with existing credentials
89
+ Scenario: Creating an Identity using inception
88
90
  Given the `identity.federation` configuration:
89
91
  """yaml
90
92
  trust:
91
- - issuer: http://localhost:44444
93
+ - iss: http://localhost:44444
92
94
  """
93
95
  Given the `users` is running with the following manifest:
94
96
  """yaml
@@ -96,7 +98,8 @@ Feature: Identity Federation
96
98
  /:
97
99
  anonymous: true
98
100
  POST:
99
- incept: id
101
+ io:output: [id]
102
+ auth:incept: id
100
103
  endpoint: create
101
104
  """
102
105
  And the IDP token for Bill is issued
@@ -104,6 +107,7 @@ Feature: Identity Federation
104
107
  # identity inception
105
108
  """
106
109
  POST /users/ HTTP/1.1
110
+ host: nex.toa.io
107
111
  authorization: Bearer ${{ Bill.id_token }}
108
112
  accept: application/yaml
109
113
  content-type: application/yaml
@@ -121,6 +125,7 @@ Feature: Identity Federation
121
125
  When the following request is received:
122
126
  """
123
127
  GET /identity/ HTTP/1.1
128
+ host: nex.toa.io
124
129
  authorization: Token ${{ Bill.token }}
125
130
  accept: application/yaml
126
131
  """
@@ -132,24 +137,72 @@ Feature: Identity Federation
132
137
  When the following request is received:
133
138
  """
134
139
  GET /identity/ HTTP/1.1
140
+ host: nex.toa.io
135
141
  authorization: Bearer ${{ Bill.id_token }}
136
142
  accept: application/yaml
137
143
  """
138
144
  Then the following reply is sent:
139
145
  """
140
146
  200 OK
147
+
141
148
  id: ${{ Bill.id }}
142
149
  """
143
150
  And the following request is received:
144
151
  # same credentials
145
152
  """
146
153
  POST /users/ HTTP/1.1
154
+ host: nex.toa.io
147
155
  authorization: Bearer ${{ Bill.id_token }}
148
- content-type: text/plain
156
+ content-type: application/yaml
149
157
 
150
158
  name: Mary Louis
151
159
  """
152
160
  Then the following reply is sent:
153
161
  """
154
- 403 Forbidden
162
+ 409 Conflict
163
+ """
164
+
165
+ Scenario: Granting a `system` role to a Principal
166
+ Given the `identity.federation` configuration:
167
+ """yaml
168
+ trust:
169
+ - iss: http://localhost:44444
170
+ principal:
171
+ iss: http://localhost:44444
172
+ sub: root
173
+ """
174
+ And the IDP token for root is issued
175
+
176
+ # create an identity
177
+ When the following request is received:
178
+ """
179
+ GET /identity/ HTTP/1.1
180
+ host: nex.toa.io
181
+ authorization: Bearer ${{ root.id_token }}
182
+ accept: application/yaml
183
+ content-type: application/yaml
184
+ """
185
+ Then the following reply is sent:
186
+ """
187
+ 200 OK
188
+ authorization: Token ${{ root.token }}
189
+
190
+ id: ${{ root.id }}
191
+ """
192
+
193
+ # check the role
194
+ When the following request is received:
195
+ """
196
+ GET /identity/ HTTP/1.1
197
+ host: nex.toa.io
198
+ accept: application/yaml
199
+ authorization: Token ${{ root.token }}
200
+ """
201
+ Then the following reply is sent:
202
+ """
203
+ 200 OK
204
+
205
+ id: ${{ root.id }}
206
+ roles:
207
+ - system
155
208
  """
@@ -1,17 +1,21 @@
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
  /:
14
- auth:role: test
17
+ io:output: true
18
+ auth:role: foo:bar
15
19
  GET:
16
20
  dev:stub:
17
21
  access: granted!
@@ -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,22 +35,261 @@ 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
- role: test
43
+ role: foo:bar
37
44
  """
38
45
  Then the following reply is sent:
39
46
  """
40
47
  201 Created
48
+
49
+ grantor: 72cf9b0ab0ac4ab2b8036e4e940ddcae
50
+ """
51
+ When the following request is received:
52
+ # root adds a role to a user
53
+ """
54
+ POST /identity/roles/4344518184ad44228baffce7a44fd0b1/ HTTP/1.1
55
+ host: nex.toa.io
56
+ authorization: Basic cm9vdDpzZWNyZXQ=
57
+ accept: application/yaml
58
+ content-type: application/yaml
59
+
60
+ role: foo:baz
41
61
  """
62
+ Then the following reply is sent:
63
+ """
64
+ 201 Created
65
+ """
66
+
67
+ # user now have the role
42
68
  When the following request is received:
43
- # user now have the role
44
69
  """
45
70
  GET / HTTP/1.1
71
+ host: nex.toa.io
46
72
  authorization: Basic dXNlcjpwYXNz
47
73
  """
48
74
  Then the following reply is sent:
49
75
  """
50
76
  200 OK
77
+ authorization: Token ${{ token }}
78
+ """
79
+ # repeat with token
80
+ When the following request is received:
81
+ """
82
+ GET / HTTP/1.1
83
+ host: nex.toa.io
84
+ authorization: Token ${{ token }}
85
+ """
86
+ Then the following reply is sent:
87
+ """
88
+ 200 OK
89
+ """
90
+
91
+ Scenario Outline: Delegating roles
92
+ # moderator:secret
93
+ # assistant:pass
94
+ Given the `identity.basic` database contains:
95
+ | _id | authority | username | password |
96
+ | 72cf9b0ab0ac4ab2b8036e4e940ddcae | nex | moderator | $2b$10$Qq/qnyyU5wjrbDXyWok14OnqAZv/z.pLhz.UddatjI6eHU/rFof4i |
97
+ | 4344518184ad44228baffce7a44fd0b1 | nex | assistant | $2b$10$JoiAQUS7tzobDAFIDBWhWeEIJv933dQetyjRzSmfQGaJE5ZlJbmYy |
98
+ And the `identity.roles` database contains:
99
+ | _id | identity | role |
100
+ | 9c4702490ff84f2a9e1b1da2ab64bdd4 | 72cf9b0ab0ac4ab2b8036e4e940ddcae | system:identity:roles:delegation |
101
+ | 30c969e05ff6437097ed5f07fc52358e | 72cf9b0ab0ac4ab2b8036e4e940ddcae | app:moderation |
102
+ And the annotation:
103
+ """yaml
104
+ /:
105
+ io:output: true
106
+ auth:role: app:moderation:photos
107
+ GET:
108
+ dev:stub:
109
+ access: granted!
110
+ """
111
+ When the following request is received:
112
+ # assistant doesn't have the required role
113
+ """
114
+ GET / HTTP/1.1
115
+ host: nex.toa.io
116
+ authorization: Basic YXNzaXN0YW50OnBhc3M=
117
+ """
118
+ Then the following reply is sent:
119
+ """
120
+ 403 Forbidden
121
+ """
122
+ When the following request is received:
123
+ # moderator delegates a role to an assistant
124
+ """
125
+ POST /identity/roles/4344518184ad44228baffce7a44fd0b1/ HTTP/1.1
126
+ host: nex.toa.io
127
+ authorization: Basic bW9kZXJhdG9yOnNlY3JldA==
128
+ content-type: application/yaml
129
+
130
+ role: <role>
131
+ """
132
+ Then the following reply is sent:
133
+ """
134
+ 201 Created
135
+ """
136
+ When the following request is received:
137
+ # assistant has access
138
+ """
139
+ GET / HTTP/1.1
140
+ host: nex.toa.io
141
+ authorization: Basic YXNzaXN0YW50OnBhc3M=
142
+ """
143
+ Then the following reply is sent:
144
+ """
145
+ 200 OK
146
+ """
147
+ Examples:
148
+ | role |
149
+ | app:moderation |
150
+ | app:moderation:photos |
151
+
152
+ Scenario: Delegating role out of own scope
153
+ Given the `identity.basic` database contains:
154
+ | _id | authority | username | password |
155
+ | 72cf9b0ab0ac4ab2b8036e4e940ddcae | nex | moderator | $2b$10$Qq/qnyyU5wjrbDXyWok14OnqAZv/z.pLhz.UddatjI6eHU/rFof4i |
156
+ | 4344518184ad44228baffce7a44fd0b1 | nex | assistant | $2b$10$JoiAQUS7tzobDAFIDBWhWeEIJv933dQetyjRzSmfQGaJE5ZlJbmYy |
157
+ And the `identity.roles` database contains:
158
+ | _id | identity | role |
159
+ | 9c4702490ff84f2a9e1b1da2ab64bdd4 | 72cf9b0ab0ac4ab2b8036e4e940ddcae | system:identity:roles:delegation |
160
+ | 30c969e05ff6437097ed5f07fc52358e | 72cf9b0ab0ac4ab2b8036e4e940ddcae | app:moderation |
161
+ And the annotation:
162
+ """yaml
163
+ /:
164
+ io:output: true
165
+ auth:role: app:moderation:photos
166
+ GET:
167
+ dev:stub:
168
+ access: granted!
169
+ """
170
+ When the following request is received:
171
+ """
172
+ POST /identity/roles/4344518184ad44228baffce7a44fd0b1/ HTTP/1.1
173
+ host: nex.toa.io
174
+ accept: application/yaml
175
+ content-type: application/yaml
176
+ authorization: Basic bW9kZXJhdG9yOnNlY3JldA==
177
+
178
+ role: app:finance
179
+ """
180
+ Then the following reply is sent:
181
+ """
182
+ 422 Unprocessable Entity
183
+
184
+ code: OUT_OF_SCOPE
185
+ """
186
+
187
+ Scenario: Delegating role without `system:identity:roles:delegation` role
188
+ Given the `identity.basic` database contains:
189
+ | _id | authority | username | password |
190
+ | 72cf9b0ab0ac4ab2b8036e4e940ddcae | nex | moderator | $2b$10$Qq/qnyyU5wjrbDXyWok14OnqAZv/z.pLhz.UddatjI6eHU/rFof4i |
191
+ | 4344518184ad44228baffce7a44fd0b1 | nex | assistant | $2b$10$JoiAQUS7tzobDAFIDBWhWeEIJv933dQetyjRzSmfQGaJE5ZlJbmYy |
192
+ And the `identity.roles` database contains:
193
+ | _id | identity | role |
194
+ | 30c969e05ff6437097ed5f07fc52358e | 72cf9b0ab0ac4ab2b8036e4e940ddcae | app:moderation |
195
+ And the annotation:
196
+ """yaml
197
+ /:
198
+ io:output: true
199
+ auth:role: app:moderation:photos
200
+ GET:
201
+ dev:stub:
202
+ access: granted!
203
+ """
204
+ When the following request is received:
205
+ """
206
+ POST /identity/roles/4344518184ad44228baffce7a44fd0b1/ HTTP/1.1
207
+ host: nex.toa.io
208
+ content-type: application/yaml
209
+ authorization: Basic bW9kZXJhdG9yOnNlY3JldA==
210
+
211
+ role: app:moderation
212
+ """
213
+ Then the following reply is sent:
214
+ """
215
+ 403 Forbidden
216
+ """
217
+
218
+ Scenario Outline: Invalid role name
219
+ Given the `identity.basic` database contains:
220
+ | _id | authority | username | password |
221
+ | 72cf9b0ab0ac4ab2b8036e4e940ddcae | nex | root | $2b$10$Qq/qnyyU5wjrbDXyWok14OnqAZv/z.pLhz.UddatjI6eHU/rFof4i |
222
+ And the `identity.roles` database contains:
223
+ | _id | identity | role |
224
+ | 9c4702490ff84f2a9e1b1da2ab64bdd4 | 72cf9b0ab0ac4ab2b8036e4e940ddcae | system:identity:roles |
225
+ When the following request is received:
226
+ # root adds a role to a user
227
+ """
228
+ POST /identity/roles/4344518184ad44228baffce7a44fd0b1/ HTTP/1.1
229
+ host: nex.toa.io
230
+ authorization: Basic cm9vdDpzZWNyZXQ=
231
+ content-type: application/yaml
232
+
233
+ role: <role>
234
+ """
235
+ Then the following reply is sent:
236
+ """
237
+ 400 Bad Request
238
+ """
239
+ Examples:
240
+ | role |
241
+ | app! |
242
+ | app: |
243
+ | app:no spaces |
244
+
245
+ Scenario: Dynamic roles
246
+ Given the `identity.basic` database contains:
247
+ | _id | authority | username | password |
248
+ | 72cf9b0ab0ac4ab2b8036e4e940ddcae | nex | moderator | $2b$10$Qq/qnyyU5wjrbDXyWok14OnqAZv/z.pLhz.UddatjI6eHU/rFof4i |
249
+ And the `identity.roles` database contains:
250
+ | _id | identity | role |
251
+ | 30c969e05ff6437097ed5f07fc52358e | 72cf9b0ab0ac4ab2b8036e4e940ddcae | app:29e54ae1:moderation |
252
+ And the annotation:
253
+ """yaml
254
+ /:
255
+ /broken:
256
+ auth:role: app:{org}:moderation
257
+ GET:
258
+ dev:stub: never
259
+ /:org:
260
+ io:output: true
261
+ auth:role: app:{org}:moderation
262
+ GET:
263
+ dev:stub:
264
+ access: granted!
265
+ """
266
+ When the following request is received:
267
+ """
268
+ GET /29e54ae1/ HTTP/1.1
269
+ host: nex.toa.io
270
+ authorization: Basic bW9kZXJhdG9yOnNlY3JldA==
271
+ """
272
+ Then the following reply is sent:
273
+ """
274
+ 200 OK
275
+ """
276
+ When the following request is received:
277
+ """
278
+ GET /88584c9b/ HTTP/1.1
279
+ host: nex.toa.io
280
+ authorization: Basic bW9kZXJhdG9yOnNlY3JldA==
281
+ """
282
+ Then the following reply is sent:
283
+ """
284
+ 403 Forbidden
285
+ """
286
+ When the following request is received:
287
+ """
288
+ GET /broken/ HTTP/1.1
289
+ host: nex.toa.io
290
+ authorization: Basic bW9kZXJhdG9yOnNlY3JldA==
291
+ """
292
+ Then the following reply is sent:
293
+ """
294
+ 500 Internal Server Error
51
295
  """
@@ -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
  """
@@ -72,6 +78,7 @@ Feature: Tokens lifecycle
72
78
  Given the annotation:
73
79
  """yaml
74
80
  /:
81
+ io:output: true
75
82
  /:id:
76
83
  id: id
77
84
  GET:
@@ -83,11 +90,12 @@ Feature: Tokens lifecycle
83
90
  refresh: 0.1
84
91
  """
85
92
  And the `identity.basic` database contains:
86
- | _id | _version | username | password |
87
- | efe3a65ebbee47ed95a73edd911ea328 | 1 | developer | $2b$10$ZRSKkgZoGnrcTNA5w5eCcu3pxDzdTduhteVYXcp56AaNcilNkwJ.O |
93
+ | _id | _version | authority | username | password |
94
+ | efe3a65ebbee47ed95a73edd911ea328 | 1 | nex | developer | $2b$10$ZRSKkgZoGnrcTNA5w5eCcu3pxDzdTduhteVYXcp56AaNcilNkwJ.O |
88
95
  When the following request is received:
89
96
  """
90
97
  GET /efe3a65ebbee47ed95a73edd911ea328/ HTTP/1.1
98
+ host: nex.toa.io
91
99
  authorization: Basic ZGV2ZWxvcGVyOnNlY3JldA==
92
100
  """
93
101
  Then the following reply is sent:
@@ -98,6 +106,7 @@ Feature: Tokens lifecycle
98
106
  When the following request is received:
99
107
  """
100
108
  PATCH /identity/basic/efe3a65ebbee47ed95a73edd911ea328/ HTTP/1.1
109
+ host: nex.toa.io
101
110
  authorization: Basic ZGV2ZWxvcGVyOnNlY3JldA==
102
111
  content-type: application/yaml
103
112
 
@@ -111,9 +120,53 @@ Feature: Tokens lifecycle
111
120
  When the following request is received:
112
121
  """
113
122
  GET /efe3a65ebbee47ed95a73edd911ea328/ HTTP/1.1
123
+ host: nex.toa.io
114
124
  authorization: Token ${{ token }}
115
125
  """
116
126
  Then the following reply is sent:
117
127
  """
118
128
  401 Unauthorized
119
129
  """
130
+
131
+ Scenario: Issuing own token
132
+ Given the `identity.basic` database contains:
133
+ | _id | authority | username | password |
134
+ | efe3a65ebbee47ed95a73edd911ea328 | nex | developer | $2b$10$ZRSKkgZoGnrcTNA5w5eCcu3pxDzdTduhteVYXcp56AaNcilNkwJ.O |
135
+ When the following request is received:
136
+ """
137
+ GET /identity/ HTTP/1.1
138
+ host: nex.toa.io
139
+ authorization: Basic ZGV2ZWxvcGVyOnNlY3JldA==
140
+ """
141
+ Then the following reply is sent:
142
+ """
143
+ 200 OK
144
+ authorization: Token ${{ token }}
145
+ """
146
+ When the following request is received:
147
+ """
148
+ POST /identity/tokens/ HTTP/1.1
149
+ host: nex.toa.io
150
+ authorization: Token ${{ token }}
151
+ content-type: application/yaml
152
+
153
+ lifetime: 0
154
+ """
155
+ Then the following reply is sent:
156
+ """
157
+ 201 Created
158
+ """
159
+ # Token scheme must be used
160
+ When the following request is received:
161
+ """
162
+ POST /identity/tokens/ HTTP/1.1
163
+ host: nex.toa.io
164
+ authorization: Basic ZGV2ZWxvcGVyOnNlY3JldA==
165
+ content-type: application/yaml
166
+
167
+ lifetime: 60
168
+ """
169
+ Then the following reply is sent:
170
+ """
171
+ 403 Forbidden
172
+ """
@@ -0,0 +1,76 @@
1
+ Feature: Introspection
2
+
3
+ Scenario: Resource introspection
4
+ Given the `pots` is running with the following manifest:
5
+ """yaml
6
+ exposition:
7
+ /:
8
+ io:output: true
9
+ GET: enumerate
10
+ POST: create
11
+ """
12
+ When the following request is received:
13
+ """
14
+ OPTIONS /pots/ HTTP/1.1
15
+ host: nex.toa.io
16
+ accept: application/yaml
17
+ """
18
+ Then the following reply is sent:
19
+ """
20
+ 200 OK
21
+ Allow: GET, POST, OPTIONS
22
+
23
+ GET:
24
+ type: array
25
+ items:
26
+ type: object
27
+ properties:
28
+ id:
29
+ type: string
30
+ pattern: ^[a-fA-F0-9]{32}$
31
+ title:
32
+ type: string
33
+ maxLength: 64
34
+ volume:
35
+ type: number
36
+ exclusiveMinimum: 0
37
+ maximum: 1000
38
+ temperature:
39
+ type: number
40
+ exclusiveMinimum: 0
41
+ maximum: 300
42
+ additionalProperties: false
43
+ required:
44
+ - id
45
+ - title
46
+ - volume
47
+ POST:
48
+ input:
49
+ type: object
50
+ properties:
51
+ title:
52
+ type: string
53
+ maxLength: 64
54
+ temperature:
55
+ type: number
56
+ exclusiveMinimum: 0
57
+ maximum: 300
58
+ volume:
59
+ type: number
60
+ exclusiveMinimum: 0
61
+ maximum: 1000
62
+ additionalProperties: false
63
+ required:
64
+ - title
65
+ - volume
66
+ output:
67
+ type: object
68
+ properties:
69
+ id:
70
+ type: string
71
+ pattern: ^[a-fA-F0-9]{32}$
72
+ additionalProperties: false
73
+ errors:
74
+ - NO_WAY
75
+ - WONT_CREATE
76
+ """