@toa.io/extensions.exposition 1.0.0-alpha.2 → 1.0.0-alpha.21

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 (383) hide show
  1. package/components/identity.bans/manifest.toa.yaml +15 -6
  2. package/components/identity.bans/operations/transit.d.ts +14 -0
  3. package/components/identity.bans/operations/transit.js +11 -0
  4. package/components/identity.bans/operations/transit.js.map +1 -0
  5. package/components/identity.bans/operations/tsconfig.tsbuildinfo +1 -0
  6. package/components/identity.bans/source/transit.ts +21 -0
  7. package/components/identity.bans/tsconfig.json +9 -0
  8. package/components/identity.basic/manifest.toa.yaml +5 -1
  9. package/components/identity.basic/operations/tsconfig.tsbuildinfo +1 -1
  10. package/components/identity.federation/manifest.toa.yaml +13 -7
  11. package/components/identity.federation/operations/authenticate.js +4 -4
  12. package/components/identity.federation/operations/authenticate.js.map +1 -1
  13. package/components/identity.federation/operations/create.js +4 -4
  14. package/components/identity.federation/operations/create.js.map +1 -1
  15. package/components/identity.federation/operations/{assertions-as-values.cjs → lib/assertions-as-values.js} +1 -1
  16. package/components/identity.federation/operations/lib/assertions-as-values.js.map +1 -0
  17. package/components/identity.federation/operations/{jwt.d.cts → lib/jwt.d.ts} +5 -4
  18. package/components/identity.federation/operations/{jwt.cjs → lib/jwt.js} +35 -11
  19. package/components/identity.federation/operations/lib/jwt.js.map +1 -0
  20. package/components/identity.federation/operations/schemas.d.ts +16 -0
  21. package/components/identity.federation/operations/tsconfig.tsbuildinfo +1 -1
  22. package/components/identity.federation/operations/types.d.ts +1 -1
  23. package/components/identity.federation/source/authenticate.ts +2 -2
  24. package/components/identity.federation/source/create.ts +2 -2
  25. package/components/identity.federation/source/{assertions-as-values.cts → lib/assertions-as-values.ts} +1 -2
  26. package/components/identity.federation/source/lib/jwt.test.ts +56 -0
  27. package/components/identity.federation/source/{jwt.cts → lib/jwt.ts} +57 -29
  28. package/components/identity.federation/source/schemas.ts +16 -0
  29. package/components/identity.federation/source/types.ts +1 -1
  30. package/components/identity.federation/tsconfig.json +2 -2
  31. package/components/identity.roles/manifest.toa.yaml +18 -5
  32. package/components/identity.roles/operations/grant.d.ts +10 -0
  33. package/components/identity.roles/operations/grant.js +21 -0
  34. package/components/identity.roles/operations/grant.js.map +1 -0
  35. package/components/identity.roles/operations/lib/Entity.d.ts +5 -0
  36. package/components/identity.roles/operations/lib/Entity.js +3 -0
  37. package/components/identity.roles/operations/lib/Entity.js.map +1 -0
  38. package/components/identity.roles/operations/list.d.ts +1 -4
  39. package/components/identity.roles/operations/list.js.map +1 -1
  40. package/components/identity.roles/operations/principal.d.ts +4 -6
  41. package/components/identity.roles/operations/principal.js +6 -1
  42. package/components/identity.roles/operations/principal.js.map +1 -1
  43. package/components/identity.roles/operations/tsconfig.tsbuildinfo +1 -1
  44. package/components/identity.roles/source/grant.ts +32 -0
  45. package/components/identity.roles/source/lib/Entity.ts +5 -0
  46. package/components/identity.roles/source/list.ts +2 -4
  47. package/components/identity.roles/source/principal.ts +10 -8
  48. package/components/identity.tokens/manifest.toa.yaml +12 -3
  49. package/components/identity.tokens/operations/authenticate.js +5 -2
  50. package/components/identity.tokens/operations/authenticate.js.map +1 -1
  51. package/components/identity.tokens/operations/encrypt.js +4 -1
  52. package/components/identity.tokens/operations/encrypt.js.map +1 -1
  53. package/components/identity.tokens/operations/tsconfig.tsbuildinfo +1 -1
  54. package/components/identity.tokens/operations/types.d.ts +1 -2
  55. package/components/identity.tokens/receivers/identity.bans.created.js +3 -0
  56. package/components/identity.tokens/source/authenticate.ts +5 -2
  57. package/components/identity.tokens/source/encrypt.test.ts +22 -1
  58. package/components/identity.tokens/source/encrypt.ts +4 -1
  59. package/components/identity.tokens/source/types.ts +1 -2
  60. package/components/octets.storage/operations/store.js +1 -1
  61. package/documentation/access.md +27 -16
  62. package/documentation/cache.md +8 -1
  63. package/documentation/components.md +55 -23
  64. package/documentation/identity.md +7 -0
  65. package/documentation/io.md +56 -0
  66. package/documentation/octets.md +12 -0
  67. package/documentation/protocol.md +3 -0
  68. package/documentation/query.md +50 -5
  69. package/documentation/require.md +15 -0
  70. package/documentation/tree.md +22 -4
  71. package/documentation/vary.md +9 -3
  72. package/features/access.feature +28 -49
  73. package/features/annotation.feature +1 -0
  74. package/features/body.feature +3 -1
  75. package/features/cache.feature +39 -0
  76. package/features/cors.feature +2 -2
  77. package/features/directives.feature +2 -0
  78. package/features/dynamic.feature +14 -7
  79. package/features/errors.feature +7 -4
  80. package/features/etag.feature +97 -0
  81. package/features/identity.bans.feature +128 -0
  82. package/features/identity.basic.feature +68 -3
  83. package/features/identity.federation.feature +78 -5
  84. package/features/identity.roles.feature +205 -1
  85. package/features/identity.tokens.feature +98 -0
  86. package/features/io.feature +196 -0
  87. package/features/octets.entries.feature +3 -1
  88. package/features/octets.feature +32 -10
  89. package/features/octets.meta.feature +4 -3
  90. package/features/octets.workflows.feature +39 -0
  91. package/features/queries.feature +9 -1
  92. package/features/require.feature +64 -0
  93. package/features/response.feature +7 -1
  94. package/features/routes.feature +17 -10
  95. package/features/steps/Database.ts +17 -10
  96. package/features/steps/Gateway.ts +3 -0
  97. package/features/steps/IdP.ts +55 -21
  98. package/features/steps/components/echo/manifest.toa.yaml +5 -0
  99. package/features/steps/components/echo/operations/identity.js +7 -0
  100. package/features/steps/components/greeter/manifest.toa.yaml +1 -0
  101. package/features/steps/components/octets.tester/manifest.toa.yaml +1 -0
  102. package/features/steps/components/pots/manifest.toa.yaml +12 -3
  103. package/features/steps/components/sequences/manifest.toa.yaml +1 -0
  104. package/features/steps/components/users.properties/manifest.toa.yaml +2 -1
  105. package/features/timing.feature +66 -0
  106. package/features/vary.feature +56 -3
  107. package/package.json +13 -14
  108. package/readme.md +7 -6
  109. package/schemas/annotation.cos.yaml +1 -0
  110. package/schemas/io/input.cos.yaml +3 -0
  111. package/schemas/io/message.cos.yaml +5 -0
  112. package/schemas/io/output.cos.yaml +5 -0
  113. package/schemas/octets/workflow.cos.yaml +12 -0
  114. package/schemas/querystring.cos.yaml +1 -0
  115. package/source/Annotation.ts +1 -0
  116. package/source/Context.ts +6 -4
  117. package/source/Directive.test.ts +7 -7
  118. package/source/Directive.ts +19 -46
  119. package/source/Endpoint.ts +53 -6
  120. package/source/Factory.ts +17 -7
  121. package/source/Gateway.ts +40 -51
  122. package/source/HTTP/Context.ts +67 -0
  123. package/source/HTTP/Server.test.ts +1 -1
  124. package/source/HTTP/Server.ts +61 -96
  125. package/source/HTTP/Timing.ts +40 -0
  126. package/source/HTTP/exceptions.ts +1 -1
  127. package/source/HTTP/index.ts +1 -0
  128. package/source/HTTP/messages.test.ts +27 -8
  129. package/source/HTTP/messages.ts +32 -48
  130. package/source/Mapping.ts +7 -8
  131. package/source/RTD/Context.ts +7 -10
  132. package/source/RTD/Directives.ts +28 -4
  133. package/source/RTD/Endpoint.ts +6 -4
  134. package/source/RTD/Match.ts +2 -7
  135. package/source/RTD/Method.ts +7 -13
  136. package/source/RTD/Node.ts +13 -14
  137. package/source/RTD/Tree.ts +17 -16
  138. package/source/RTD/factory.ts +3 -6
  139. package/source/Tenant.ts +0 -8
  140. package/source/deployment.ts +6 -0
  141. package/source/directives/auth/Anonymous.ts +3 -2
  142. package/source/directives/auth/Authorization.ts +17 -14
  143. package/source/directives/auth/Delegate.ts +35 -0
  144. package/source/directives/auth/Incept.ts +11 -6
  145. package/source/directives/auth/Role.test.ts +53 -6
  146. package/source/directives/auth/Role.ts +27 -17
  147. package/source/directives/auth/Scheme.ts +2 -2
  148. package/source/directives/auth/types.ts +1 -1
  149. package/source/directives/cache/Cache.ts +5 -5
  150. package/source/directives/cache/Control.ts +48 -22
  151. package/source/directives/cache/types.ts +1 -1
  152. package/source/directives/cors/CORS.ts +18 -10
  153. package/source/directives/dev/Development.ts +4 -4
  154. package/source/directives/index.ts +6 -4
  155. package/source/directives/io/Directive.ts +11 -0
  156. package/source/directives/io/IO.ts +43 -0
  157. package/source/directives/io/Input.ts +50 -0
  158. package/source/directives/io/Message.ts +1 -0
  159. package/source/directives/io/Output.ts +69 -0
  160. package/source/directives/io/index.ts +3 -0
  161. package/source/directives/io/schemas.ts +12 -0
  162. package/source/directives/octets/Context.ts +5 -4
  163. package/source/directives/octets/Delete.ts +25 -13
  164. package/source/directives/octets/Directive.ts +10 -0
  165. package/source/directives/octets/Fetch.ts +33 -17
  166. package/source/directives/octets/List.ts +18 -8
  167. package/source/directives/octets/Octets.ts +12 -8
  168. package/source/directives/octets/Permute.ts +16 -9
  169. package/source/directives/octets/Store.ts +43 -19
  170. package/source/directives/octets/Workflow.ts +48 -0
  171. package/source/directives/octets/schemas.test.ts +21 -0
  172. package/source/directives/octets/schemas.ts +2 -0
  173. package/source/directives/octets/types.ts +0 -7
  174. package/source/directives/octets/{workflow → workflows}/Execution.ts +0 -2
  175. package/source/directives/octets/{workflow → workflows}/Workflow.ts +2 -2
  176. package/source/directives/require/Directive.ts +5 -0
  177. package/source/directives/require/Headers.ts +20 -0
  178. package/source/directives/require/Require.ts +28 -0
  179. package/source/directives/require/index.ts +3 -0
  180. package/source/directives/vary/Directive.ts +2 -1
  181. package/source/directives/vary/Embed.ts +14 -8
  182. package/source/directives/vary/Vary.ts +8 -6
  183. package/source/directives/vary/embeddings/Embedding.ts +2 -1
  184. package/source/directives/vary/embeddings/Header.ts +9 -7
  185. package/source/directives/vary/embeddings/Language.ts +2 -2
  186. package/source/directives/vary/embeddings/Parameter.ts +14 -0
  187. package/source/directives/vary/embeddings/index.ts +3 -3
  188. package/source/exceptions.ts +22 -11
  189. package/source/io.ts +2 -2
  190. package/source/root.ts +5 -0
  191. package/transpiled/Annotation.d.ts +1 -0
  192. package/transpiled/Context.d.ts +6 -4
  193. package/transpiled/Directive.d.ts +8 -21
  194. package/transpiled/Directive.js +11 -14
  195. package/transpiled/Directive.js.map +1 -1
  196. package/transpiled/Endpoint.d.ts +7 -5
  197. package/transpiled/Endpoint.js +58 -2
  198. package/transpiled/Endpoint.js.map +1 -1
  199. package/transpiled/Factory.js +8 -2
  200. package/transpiled/Factory.js.map +1 -1
  201. package/transpiled/Gateway.d.ts +4 -8
  202. package/transpiled/Gateway.js +23 -33
  203. package/transpiled/Gateway.js.map +1 -1
  204. package/transpiled/HTTP/Context.d.ts +24 -0
  205. package/transpiled/HTTP/Context.js +47 -0
  206. package/transpiled/HTTP/Context.js.map +1 -0
  207. package/transpiled/HTTP/Server.d.ts +8 -7
  208. package/transpiled/HTTP/Server.js +69 -77
  209. package/transpiled/HTTP/Server.js.map +1 -1
  210. package/transpiled/HTTP/Timing.d.ts +10 -0
  211. package/transpiled/HTTP/Timing.js +29 -0
  212. package/transpiled/HTTP/Timing.js.map +1 -0
  213. package/transpiled/HTTP/exceptions.d.ts +1 -1
  214. package/transpiled/HTTP/exceptions.js.map +1 -1
  215. package/transpiled/HTTP/index.d.ts +1 -0
  216. package/transpiled/HTTP/index.js +1 -0
  217. package/transpiled/HTTP/index.js.map +1 -1
  218. package/transpiled/HTTP/messages.d.ts +7 -21
  219. package/transpiled/HTTP/messages.js +24 -26
  220. package/transpiled/HTTP/messages.js.map +1 -1
  221. package/transpiled/Mapping.js +7 -7
  222. package/transpiled/Mapping.js.map +1 -1
  223. package/transpiled/RTD/Context.d.ts +7 -6
  224. package/transpiled/RTD/Directives.d.ts +19 -4
  225. package/transpiled/RTD/Endpoint.d.ts +6 -4
  226. package/transpiled/RTD/Match.d.ts +2 -4
  227. package/transpiled/RTD/Method.d.ts +7 -7
  228. package/transpiled/RTD/Method.js.map +1 -1
  229. package/transpiled/RTD/Node.d.ts +4 -6
  230. package/transpiled/RTD/Node.js +2 -1
  231. package/transpiled/RTD/Node.js.map +1 -1
  232. package/transpiled/RTD/Tree.d.ts +6 -6
  233. package/transpiled/RTD/Tree.js +4 -1
  234. package/transpiled/RTD/Tree.js.map +1 -1
  235. package/transpiled/RTD/factory.d.ts +2 -4
  236. package/transpiled/RTD/factory.js +1 -1
  237. package/transpiled/RTD/factory.js.map +1 -1
  238. package/transpiled/Tenant.d.ts +0 -1
  239. package/transpiled/Tenant.js +0 -6
  240. package/transpiled/Tenant.js.map +1 -1
  241. package/transpiled/deployment.js +5 -0
  242. package/transpiled/deployment.js.map +1 -1
  243. package/transpiled/directives/auth/Anonymous.js +3 -4
  244. package/transpiled/directives/auth/Anonymous.js.map +1 -1
  245. package/transpiled/directives/auth/Authorization.d.ts +2 -3
  246. package/transpiled/directives/auth/Authorization.js +10 -8
  247. package/transpiled/directives/auth/Authorization.js.map +1 -1
  248. package/transpiled/directives/auth/Delegate.d.ts +8 -0
  249. package/transpiled/directives/auth/Delegate.js +29 -0
  250. package/transpiled/directives/auth/Delegate.js.map +1 -0
  251. package/transpiled/directives/auth/Incept.d.ts +1 -1
  252. package/transpiled/directives/auth/Incept.js +11 -6
  253. package/transpiled/directives/auth/Incept.js.map +1 -1
  254. package/transpiled/directives/auth/Role.d.ts +4 -1
  255. package/transpiled/directives/auth/Role.js +25 -17
  256. package/transpiled/directives/auth/Role.js.map +1 -1
  257. package/transpiled/directives/auth/Scheme.js +2 -2
  258. package/transpiled/directives/auth/Scheme.js.map +1 -1
  259. package/transpiled/directives/cache/Cache.d.ts +3 -3
  260. package/transpiled/directives/cache/Cache.js +3 -3
  261. package/transpiled/directives/cache/Cache.js.map +1 -1
  262. package/transpiled/directives/cache/Control.d.ts +5 -4
  263. package/transpiled/directives/cache/Control.js +32 -15
  264. package/transpiled/directives/cache/Control.js.map +1 -1
  265. package/transpiled/directives/cache/types.d.ts +1 -1
  266. package/transpiled/directives/cors/CORS.d.ts +2 -3
  267. package/transpiled/directives/cors/CORS.js +17 -10
  268. package/transpiled/directives/cors/CORS.js.map +1 -1
  269. package/transpiled/directives/dev/Development.d.ts +3 -3
  270. package/transpiled/directives/dev/Development.js +1 -1
  271. package/transpiled/directives/dev/Development.js.map +1 -1
  272. package/transpiled/directives/index.d.ts +2 -2
  273. package/transpiled/directives/index.js +5 -3
  274. package/transpiled/directives/index.js.map +1 -1
  275. package/transpiled/directives/io/Directive.d.ts +8 -0
  276. package/transpiled/directives/io/Directive.js +3 -0
  277. package/transpiled/directives/io/Directive.js.map +1 -0
  278. package/transpiled/directives/io/IO.d.ts +9 -0
  279. package/transpiled/directives/io/IO.js +33 -0
  280. package/transpiled/directives/io/IO.js.map +1 -0
  281. package/transpiled/directives/io/Input.d.ts +11 -0
  282. package/transpiled/directives/io/Input.js +63 -0
  283. package/transpiled/directives/io/Input.js.map +1 -0
  284. package/transpiled/directives/io/Message.d.ts +1 -0
  285. package/transpiled/directives/io/Message.js +3 -0
  286. package/transpiled/directives/io/Message.js.map +1 -0
  287. package/transpiled/directives/io/Output.d.ts +13 -0
  288. package/transpiled/directives/io/Output.js +76 -0
  289. package/transpiled/directives/io/Output.js.map +1 -0
  290. package/transpiled/directives/io/index.d.ts +2 -0
  291. package/transpiled/directives/io/index.js +6 -0
  292. package/transpiled/directives/io/index.js.map +1 -0
  293. package/transpiled/directives/io/schemas.d.ts +7 -0
  294. package/transpiled/directives/io/schemas.js +14 -0
  295. package/transpiled/directives/io/schemas.js.map +1 -0
  296. package/transpiled/directives/octets/Context.d.ts +4 -4
  297. package/transpiled/directives/octets/Context.js +4 -2
  298. package/transpiled/directives/octets/Context.js.map +1 -1
  299. package/transpiled/directives/octets/Delete.d.ts +5 -4
  300. package/transpiled/directives/octets/Delete.js +24 -12
  301. package/transpiled/directives/octets/Delete.js.map +1 -1
  302. package/transpiled/directives/octets/Directive.d.ts +8 -0
  303. package/transpiled/directives/octets/Directive.js +8 -0
  304. package/transpiled/directives/octets/Directive.js.map +1 -0
  305. package/transpiled/directives/octets/Fetch.d.ts +4 -3
  306. package/transpiled/directives/octets/Fetch.js +31 -15
  307. package/transpiled/directives/octets/Fetch.js.map +1 -1
  308. package/transpiled/directives/octets/List.d.ts +4 -3
  309. package/transpiled/directives/octets/List.js +16 -7
  310. package/transpiled/directives/octets/List.js.map +1 -1
  311. package/transpiled/directives/octets/Octets.d.ts +4 -4
  312. package/transpiled/directives/octets/Octets.js +8 -4
  313. package/transpiled/directives/octets/Octets.js.map +1 -1
  314. package/transpiled/directives/octets/Permute.d.ts +4 -3
  315. package/transpiled/directives/octets/Permute.js +14 -7
  316. package/transpiled/directives/octets/Permute.js.map +1 -1
  317. package/transpiled/directives/octets/Store.d.ts +6 -4
  318. package/transpiled/directives/octets/Store.js +28 -13
  319. package/transpiled/directives/octets/Store.js.map +1 -1
  320. package/transpiled/directives/octets/Workflow.d.ts +15 -0
  321. package/transpiled/directives/octets/Workflow.js +59 -0
  322. package/transpiled/directives/octets/Workflow.js.map +1 -0
  323. package/transpiled/directives/octets/schemas.d.ts +2 -0
  324. package/transpiled/directives/octets/schemas.js +2 -1
  325. package/transpiled/directives/octets/schemas.js.map +1 -1
  326. package/transpiled/directives/octets/types.d.ts +0 -5
  327. package/transpiled/directives/octets/{workflow → workflows}/Execution.js +0 -1
  328. package/transpiled/directives/octets/workflows/Execution.js.map +1 -0
  329. package/transpiled/directives/octets/{workflow → workflows}/Workflow.d.ts +1 -1
  330. package/transpiled/directives/octets/{workflow → workflows}/Workflow.js +2 -2
  331. package/transpiled/directives/octets/workflows/Workflow.js.map +1 -0
  332. package/transpiled/directives/octets/workflows/index.js.map +1 -0
  333. package/transpiled/directives/require/Directive.d.ts +4 -0
  334. package/transpiled/directives/require/Directive.js +3 -0
  335. package/transpiled/directives/require/Directive.js.map +1 -0
  336. package/transpiled/directives/require/Headers.d.ts +7 -0
  337. package/transpiled/directives/require/Headers.js +19 -0
  338. package/transpiled/directives/require/Headers.js.map +1 -0
  339. package/transpiled/directives/require/Require.d.ts +9 -0
  340. package/transpiled/directives/require/Require.js +27 -0
  341. package/transpiled/directives/require/Require.js.map +1 -0
  342. package/transpiled/directives/require/index.d.ts +2 -0
  343. package/transpiled/directives/require/index.js +6 -0
  344. package/transpiled/directives/require/index.js.map +1 -0
  345. package/transpiled/directives/vary/Directive.d.ts +2 -1
  346. package/transpiled/directives/vary/Embed.d.ts +2 -1
  347. package/transpiled/directives/vary/Embed.js +8 -6
  348. package/transpiled/directives/vary/Embed.js.map +1 -1
  349. package/transpiled/directives/vary/Vary.d.ts +3 -3
  350. package/transpiled/directives/vary/Vary.js +4 -4
  351. package/transpiled/directives/vary/Vary.js.map +1 -1
  352. package/transpiled/directives/vary/embeddings/Embedding.d.ts +2 -1
  353. package/transpiled/directives/vary/embeddings/Header.js +9 -7
  354. package/transpiled/directives/vary/embeddings/Header.js.map +1 -1
  355. package/transpiled/directives/vary/embeddings/Language.js +2 -2
  356. package/transpiled/directives/vary/embeddings/Language.js.map +1 -1
  357. package/transpiled/directives/vary/embeddings/Parameter.d.ts +7 -0
  358. package/transpiled/directives/vary/embeddings/Parameter.js +14 -0
  359. package/transpiled/directives/vary/embeddings/Parameter.js.map +1 -0
  360. package/transpiled/directives/vary/embeddings/index.d.ts +2 -2
  361. package/transpiled/directives/vary/embeddings/index.js +5 -3
  362. package/transpiled/directives/vary/embeddings/index.js.map +1 -1
  363. package/transpiled/exceptions.d.ts +3 -2
  364. package/transpiled/exceptions.js +13 -7
  365. package/transpiled/exceptions.js.map +1 -1
  366. package/transpiled/io.d.ts +2 -2
  367. package/transpiled/root.js +5 -0
  368. package/transpiled/root.js.map +1 -1
  369. package/transpiled/tsconfig.tsbuildinfo +1 -1
  370. package/components/identity.federation/operations/assertions-as-values.cjs.map +0 -1
  371. package/components/identity.federation/operations/jwt.cjs.map +0 -1
  372. package/source/HTTP/Server.fixtures.ts +0 -40
  373. package/transpiled/HTTP/Server.fixtures.d.ts +0 -10
  374. package/transpiled/HTTP/Server.fixtures.js +0 -31
  375. package/transpiled/HTTP/Server.fixtures.js.map +0 -1
  376. package/transpiled/directives/octets/workflow/Execution.js.map +0 -1
  377. package/transpiled/directives/octets/workflow/Workflow.js.map +0 -1
  378. package/transpiled/directives/octets/workflow/index.js.map +0 -1
  379. /package/components/identity.federation/operations/{assertions-as-values.d.cts → lib/assertions-as-values.d.ts} +0 -0
  380. /package/source/directives/octets/{workflow → workflows}/index.ts +0 -0
  381. /package/transpiled/directives/octets/{workflow → workflows}/Execution.d.ts +0 -0
  382. /package/transpiled/directives/octets/{workflow → workflows}/index.d.ts +0 -0
  383. /package/transpiled/directives/octets/{workflow → workflows}/index.js +0 -0
@@ -15,6 +15,7 @@ Feature: Octets storage workflows
15
15
  - add-baz: octets.tester.baz
16
16
  - diversify: octets.tester.diversify
17
17
  /*:
18
+ io:output: true
18
19
  GET:
19
20
  octets:fetch:
20
21
  meta: true
@@ -246,3 +247,41 @@ Feature: Octets storage workflows
246
247
  concat: hello world
247
248
  --cut--
248
249
  """
250
+
251
+ Scenario: Executing a workflow with `octets:workflow`
252
+ Given the `octets.tester` is running
253
+ And the annotation:
254
+ """yaml
255
+ /:
256
+ auth:anonymous: true
257
+ octets:context: octets
258
+ POST:
259
+ octets:store: ~
260
+ /*:
261
+ DELETE:
262
+ octets:workflow:
263
+ echo: octets.tester.echo
264
+ """
265
+ When the stream of `lenna.ascii` is received with the following headers:
266
+ """
267
+ POST / HTTP/1.1
268
+ content-type: application/octet-stream
269
+ """
270
+ Then the following reply is sent:
271
+ """
272
+ 201 Created
273
+ """
274
+ When the following request is received:
275
+ """
276
+ DELETE /10cf16b458f759e0d617f2f3d83599ff HTTP/1.1
277
+ accept: application/yaml
278
+ """
279
+ Then the following reply is sent:
280
+ """
281
+ 202 Accepted
282
+ content-type: multipart/yaml; boundary=cut
283
+
284
+ --cut
285
+ echo: 10cf16b458f759e0d617f2f3d83599ff
286
+ --cut--
287
+ """
@@ -13,6 +13,7 @@ Feature: Queries
13
13
  """yaml
14
14
  exposition:
15
15
  /pot:
16
+ io:output: true
16
17
  GET: observe
17
18
  """
18
19
  When the following request is received:
@@ -35,6 +36,7 @@ Feature: Queries
35
36
  """yaml
36
37
  exposition:
37
38
  /:
39
+ io:output: true
38
40
  GET: enumerate
39
41
  """
40
42
  When the following request is received:
@@ -60,6 +62,7 @@ Feature: Queries
60
62
  """yaml
61
63
  exposition:
62
64
  /:
65
+ io:output: true
63
66
  GET: enumerate
64
67
  """
65
68
  When the following request is received:
@@ -85,6 +88,7 @@ Feature: Queries
85
88
  """yaml
86
89
  exposition:
87
90
  /:
91
+ io:output: true
88
92
  GET: enumerate
89
93
  """
90
94
  When the following request is received:
@@ -110,6 +114,7 @@ Feature: Queries
110
114
  """yaml
111
115
  exposition:
112
116
  /:id:
117
+ io:output: true
113
118
  GET: observe
114
119
  """
115
120
  When the following request is received:
@@ -127,11 +132,12 @@ Feature: Queries
127
132
  volume: 200
128
133
  """
129
134
 
130
- Scenario: Request to a route with predefined criretia
135
+ Scenario: Request to a route with predefined criteria
131
136
  Given the `pots` is running with the following manifest:
132
137
  """yaml
133
138
  exposition:
134
139
  /big:
140
+ io:output: true
135
141
  GET:
136
142
  endpoint: enumerate
137
143
  query:
@@ -160,6 +166,7 @@ Feature: Queries
160
166
  """yaml
161
167
  exposition:
162
168
  /big:
169
+ io:output: true
163
170
  GET:
164
171
  endpoint: enumerate
165
172
  query:
@@ -186,6 +193,7 @@ Feature: Queries
186
193
  """yaml
187
194
  exposition:
188
195
  /hottest2:
196
+ io:output: true
189
197
  GET:
190
198
  endpoint: enumerate
191
199
  query:
@@ -0,0 +1,64 @@
1
+ Feature: Request requirements
2
+
3
+ Scenario Outline: Require headers
4
+ Given the `pots` is running with the following manifest:
5
+ """yaml
6
+ exposition:
7
+ /:
8
+ io:output: true
9
+ POST: create
10
+ /one/:id:
11
+ require:header: if-match
12
+ PUT: transit
13
+ /two/:id:
14
+ require:headers: [if-match]
15
+ PUT: transit
16
+ """
17
+ When the following request is received:
18
+ """
19
+ POST /pots/ HTTP/1.1
20
+ content-type: application/yaml
21
+ accept: application/yaml
22
+
23
+ title: Hello
24
+ volume: 1.5
25
+ """
26
+ Then the following reply is sent:
27
+ """
28
+ 201 Created
29
+ etag: ${{ etag }}
30
+
31
+ id: ${{ id }}
32
+ """
33
+ When the following request is received:
34
+ """
35
+ PUT /pots/<variant>/${{ id }}/ HTTP/1.1
36
+ content-type: application/yaml
37
+ accept: text/plain
38
+
39
+ title: Hello
40
+ volume: 1.5
41
+ """
42
+ Then the following reply is sent:
43
+ """
44
+ 400 Bad Request
45
+
46
+ Header required: if-match
47
+ """
48
+ When the following request is received:
49
+ """
50
+ PUT /pots/<variant>/${{ id }}/ HTTP/1.1
51
+ content-type: application/yaml
52
+ accept: text/plain
53
+ if-match: ${{ etag }}
54
+
55
+ title: Bye
56
+ """
57
+ Then the following reply is sent:
58
+ """
59
+ 200 OK
60
+ """
61
+ Examples:
62
+ | variant |
63
+ | one |
64
+ | two |
@@ -4,9 +4,11 @@ Feature: Response
4
4
  Given the annotation:
5
5
  """yaml
6
6
  /:
7
+ io:output: true
7
8
  GET:
8
9
  anonymous: true
9
- dev:stub: hello
10
+ dev:stub:
11
+ hello: world
10
12
  """
11
13
  When the following request is received:
12
14
  """
@@ -18,6 +20,8 @@ Feature: Response
18
20
  200 OK
19
21
  content-type: application/json
20
22
  vary: accept
23
+
24
+ {"hello":"world"}
21
25
  """
22
26
 
23
27
  Scenario: Error as YAML
@@ -25,6 +29,7 @@ Feature: Response
25
29
  """yaml
26
30
  exposition:
27
31
  /:
32
+ io:output: true
28
33
  GET: error
29
34
  """
30
35
  When the following request is received:
@@ -46,6 +51,7 @@ Feature: Response
46
51
  """yaml
47
52
  exposition:
48
53
  /:
54
+ io:output: true
49
55
  GET: error
50
56
  """
51
57
  When the following request is received:
@@ -6,12 +6,14 @@ Feature: Routes
6
6
  namespace: basic
7
7
 
8
8
  exposition:
9
- /strict:
10
- GET:
11
- endpoint: greet
12
- /shortcuts:
13
- /operation:
14
- GET: greet
9
+ /:
10
+ io:output: true
11
+ /strict:
12
+ GET:
13
+ endpoint: greet
14
+ /shortcuts:
15
+ /operation:
16
+ GET: greet
15
17
  """
16
18
  When the following request is received:
17
19
  """
@@ -34,6 +36,7 @@ Feature: Routes
34
36
  """yaml
35
37
  exposition:
36
38
  /:
39
+ io:output: true
37
40
  GET: greet
38
41
  """
39
42
  When the following request is received:
@@ -52,10 +55,12 @@ Feature: Routes
52
55
  Given the `greeter` is running with the following manifest:
53
56
  """yaml
54
57
  exposition:
55
- /*:
56
- GET: greet
57
- /foo/*/bar:
58
- GET: greet
58
+ /:
59
+ io:output: true
60
+ /*:
61
+ GET: greet
62
+ /foo/*/bar:
63
+ GET: greet
59
64
  """
60
65
  When the following request is received:
61
66
  """
@@ -94,12 +99,14 @@ Feature: Routes
94
99
  """yaml
95
100
  exposition:
96
101
  /:
102
+ io:output: true
97
103
  POST: create
98
104
  """
99
105
  And the `users.properties` is running with the following manifest:
100
106
  """yaml
101
107
  exposition:
102
108
  /:id:
109
+ io:output: true
103
110
  GET: observe
104
111
  """
105
112
  When the following request is received:
@@ -1,6 +1,7 @@
1
1
  import { afterAll, beforeAll, binding, given } from 'cucumber-tsflow'
2
- import { type DataTable } from '@cucumber/cucumber'
3
2
  import { MongoClient } from 'mongodb'
3
+ import type { Collection } from 'mongodb'
4
+ import type { DataTable } from '@cucumber/cucumber'
4
5
 
5
6
  @binding()
6
7
  export class Database {
@@ -8,9 +9,7 @@ export class Database {
8
9
 
9
10
  @given('the `{word}` database contains:')
10
11
  public async upsert (id: string, table: DataTable): Promise<void> {
11
- const [name, namespace = 'default'] = id.split('.').reverse()
12
- const collection = Database.client.db(namespace).collection(name)
13
-
12
+ const collection = this.collection(id)
14
13
  const columns = table.raw()[0]
15
14
  const rows = table.rows()
16
15
  const documents: Document[] = []
@@ -22,7 +21,11 @@ export class Database {
22
21
  const str = rows[r][c]
23
22
  const int = parseInt(str)
24
23
 
25
- document[columns[c]] = int.toString() === str ? int : str
24
+ document[columns[c]] = int.toString() === str
25
+ ? int
26
+ : str === 'null'
27
+ ? null
28
+ : str
26
29
  }
27
30
 
28
31
  documents.push(document)
@@ -36,10 +39,7 @@ export class Database {
36
39
 
37
40
  @given('the `{word}` database is empty')
38
41
  public async truncate (id: string): Promise<void> {
39
- const [name, namespace = 'default'] = id.split('.').reverse()
40
- const collection = Database.client.db(namespace).collection(name)
41
-
42
- await collection.deleteMany({})
42
+ await this.collection(id).deleteMany({})
43
43
  }
44
44
 
45
45
  @beforeAll()
@@ -53,6 +53,13 @@ export class Database {
53
53
  public static async disconnect (): Promise<void> {
54
54
  await this.client.close()
55
55
  }
56
+
57
+ private collection (id: string): Collection {
58
+ const [name, namespace = 'default'] = id.split('.').reverse()
59
+ const collection = `${namespace}_${name}`.toLowerCase()
60
+
61
+ return Database.client.db('toa-dev').collection(collection)
62
+ }
56
63
  }
57
64
 
58
- type Document = Record<string, string | number>
65
+ type Document = Record<string, string | number | null>
@@ -26,6 +26,9 @@ export class Gateway {
26
26
  if (annotation.debug === true)
27
27
  process.env.TOA_EXPOSITION_DEBUG = '1'
28
28
 
29
+ if (annotation.trace === true)
30
+ process.env.TOA_EXPOSITION_TRACE = '1'
31
+
29
32
  await Gateway.stop()
30
33
 
31
34
  this.default = false
@@ -14,7 +14,8 @@ export class IdP {
14
14
  private static privateKey?: crypto.KeyObject
15
15
  private static issuer?: string
16
16
 
17
- public constructor (private readonly captures: Captures) {}
17
+ public constructor (private readonly captures: Captures) {
18
+ }
18
19
 
19
20
  @afterAll()
20
21
  public static async stop (): Promise<void> {
@@ -29,14 +30,21 @@ export class IdP {
29
30
  if (IdP.server instanceof http.Server) return
30
31
 
31
32
  // creating the key
32
- const { publicKey, privateKey } = await util.promisify(crypto.generateKeyPair)('rsa', {
33
+ const {
34
+ publicKey,
35
+ privateKey
36
+ } = await util.promisify(crypto.generateKeyPair)('rsa', {
33
37
  modulusLength: 2048
34
38
  })
35
39
 
36
40
  IdP.privateKey = privateKey
37
41
 
38
42
  const jwk = JSON.stringify({
39
- keys: [{ use: 'sig', alg: 'RS256', ...publicKey.export({ format: 'jwk' }) }]
43
+ keys: [{
44
+ use: 'sig',
45
+ alg: 'RS256',
46
+ ...publicKey.export({ format: 'jwk' })
47
+ }]
40
48
  })
41
49
 
42
50
  const JWK_URL = '/.well-known/jwks'
@@ -54,24 +62,23 @@ export class IdP {
54
62
  response.end(jwk)
55
63
  break
56
64
 
57
- case '/.well-known/openid-configuration':
58
- {
59
- const openIdConfiguration = JSON.stringify({
60
- issuer: IdP.issuer,
61
- jwks_uri: IdP.issuer + JWK_URL,
62
- response_types_supported: ['id_token'],
63
- subject_types_supported: ['public'],
64
- id_token_signing_alg_values_supported: ['RS256'],
65
- scopes_supported: ['openid']
66
- })
67
-
68
- response.writeHead(200, {
69
- 'Content-Type': 'application/json',
70
- 'Cache-Control': 'public, max-age=3600',
71
- 'Content-Length': openIdConfiguration.length
72
- })
73
- response.end(openIdConfiguration)
74
- }
65
+ case '/.well-known/openid-configuration': {
66
+ const openIdConfiguration = JSON.stringify({
67
+ issuer: IdP.issuer,
68
+ jwks_uri: IdP.issuer + JWK_URL,
69
+ response_types_supported: ['id_token'],
70
+ subject_types_supported: ['public'],
71
+ id_token_signing_alg_values_supported: ['RS256'],
72
+ scopes_supported: ['openid']
73
+ })
74
+
75
+ response.writeHead(200, {
76
+ 'Content-Type': 'application/json',
77
+ 'Cache-Control': 'public, max-age=3600',
78
+ 'Content-Length': openIdConfiguration.length
79
+ })
80
+ response.end(openIdConfiguration)
81
+ }
75
82
 
76
83
  break
77
84
 
@@ -117,4 +124,31 @@ export class IdP {
117
124
 
118
125
  this.captures.set(`${user}.id_token`, idToken)
119
126
  }
127
+
128
+ @given('the IDP {word} token for {word} is issued with following secret:')
129
+ public async issueSymmetricToken (alg: string, user: string, secret: string): Promise<void> {
130
+ const jwt = [
131
+ {
132
+ typ: 'JWT',
133
+ alg
134
+ },
135
+ {
136
+ iss: IdP.issuer,
137
+ sub: `${user}-mock-id`,
138
+ aud: 'test',
139
+ iat: Math.floor(Date.now() / 1000),
140
+ exp: Math.floor((Date.now() + 1000 * 60 * 5) / 1000)
141
+ }
142
+ ]
143
+ .map((v) => Buffer.from(JSON.stringify(v)).toString('base64url'))
144
+ .join('.')
145
+
146
+ const signature = crypto.createHmac(alg.replace(/^HS(\d{3})$/, 'sha$1'), secret)
147
+ .update(jwt)
148
+ .digest('base64url')
149
+
150
+ const idToken = `${jwt}.${signature}`
151
+
152
+ this.captures.set(`${user}.id_token`, idToken)
153
+ }
120
154
  }
@@ -7,3 +7,8 @@ operations:
7
7
  affect:
8
8
  input:
9
9
  name*: string
10
+ identity:
11
+ input:
12
+ identity:
13
+ id: string
14
+ roles: [string]
@@ -0,0 +1,7 @@
1
+ 'use strict'
2
+
3
+ function computation (input) {
4
+ return input
5
+ }
6
+
7
+ exports.computation = computation
@@ -1,4 +1,5 @@
1
1
  name: greeter
2
+ version: 0.0.0
2
3
 
3
4
  exposition:
4
5
  /:
@@ -1,5 +1,6 @@
1
1
  namespace: octets
2
2
  name: tester
3
+ version: 0.0.0
3
4
 
4
5
  storages: octets
5
6
 
@@ -1,4 +1,5 @@
1
1
  name: pots
2
+ version: 0.0.0
2
3
 
3
4
  entity:
4
5
  schema:
@@ -7,11 +8,19 @@ entity:
7
8
  temperature?: number
8
9
 
9
10
  operations:
10
- transit:
11
+ create:
11
12
  query: false
13
+ forward: transit
14
+ input:
15
+ title*: .
16
+ volume*: .
17
+ temperature: .
18
+ transit:
19
+ concurrency: retry
12
20
  input:
13
- title*: ~
14
- volume*: ~
21
+ title: .
22
+ volume: .
23
+ temperature: .
15
24
  observe:
16
25
  output:
17
26
  id: string
@@ -1,4 +1,5 @@
1
1
  name: sequences
2
+ version: 0.0.0
2
3
 
3
4
  operations:
4
5
  numbers:
@@ -1,10 +1,11 @@
1
1
  namespace: users
2
2
  name: properties
3
+ version: 0.0.0
3
4
 
4
5
  entity:
5
6
  schema:
6
7
  newbie: false
7
- dependent: true
8
+ associated: true
8
9
 
9
10
  operations:
10
11
  transit:
@@ -0,0 +1,66 @@
1
+ Feature: Server timing
2
+
3
+ Background:
4
+ Given the `pots` is running with the following manifest:
5
+ """yaml
6
+ exposition:
7
+ /:
8
+ POST: create
9
+ """
10
+
11
+ Scenario: Server timing is not available by default
12
+ When the following request is received:
13
+ """
14
+ POST /pots/ HTTP/1.1
15
+ content-type: application/yaml
16
+
17
+ title: Hello
18
+ volume: 1.5
19
+ """
20
+ Then the reply does not contain:
21
+ """
22
+ server-timing:
23
+ """
24
+
25
+ Scenario: Server timing is sent when debug is enabled
26
+ Given the annotation:
27
+ """
28
+ trace: true
29
+ """
30
+ When the following request is received:
31
+ """
32
+ POST /pots/ HTTP/1.1
33
+ content-type: application/yaml
34
+
35
+ title: Hello
36
+ volume: 1.5
37
+ """
38
+ # to debug, break it and look at the console
39
+ Then the following reply is sent:
40
+ """
41
+ 201 Created
42
+ server-timing:
43
+ """
44
+
45
+ Scenario: Octets timing
46
+ Given the annotation:
47
+ """yaml
48
+ trace: true
49
+ /:
50
+ io:output: true
51
+ auth:anonymous: true
52
+ octets:context: octets
53
+ POST:
54
+ octets:store: ~
55
+ """
56
+ When the stream of `lenna.png` is received with the following headers:
57
+ """
58
+ POST / HTTP/1.1
59
+ content-type: application/octet-stream
60
+ """
61
+ # to debug, break it and look at the console
62
+ Then the following reply is sent:
63
+ """
64
+ 201 Created
65
+ server-timing:
66
+ """