@toa.io/extensions.exposition 1.0.0-alpha.0 → 1.0.0-alpha.11

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 (547) hide show
  1. package/components/context.toa.yaml +12 -0
  2. package/components/identity.bans/manifest.toa.yaml +2 -1
  3. package/components/identity.basic/manifest.toa.yaml +6 -2
  4. package/components/identity.basic/operations/authenticate.d.ts +9 -0
  5. package/components/identity.basic/operations/authenticate.js +24 -0
  6. package/components/identity.basic/operations/authenticate.js.map +1 -0
  7. package/components/identity.basic/operations/create.d.ts +10 -0
  8. package/components/identity.basic/operations/create.js +10 -0
  9. package/components/identity.basic/operations/create.js.map +1 -0
  10. package/components/identity.basic/operations/transit.d.ts +12 -0
  11. package/components/identity.basic/operations/transit.js +53 -0
  12. package/components/identity.basic/operations/transit.js.map +1 -0
  13. package/components/identity.basic/operations/tsconfig.tsbuildinfo +1 -0
  14. package/components/identity.basic/operations/types.d.ts +38 -0
  15. package/components/identity.basic/operations/types.js +3 -0
  16. package/components/identity.basic/operations/types.js.map +1 -0
  17. package/components/identity.basic/source/authenticate.ts +0 -1
  18. package/components/identity.federation/events/principal.js +22 -0
  19. package/components/identity.federation/manifest.toa.yaml +94 -0
  20. package/components/identity.federation/operations/authenticate.d.ts +3 -0
  21. package/components/identity.federation/operations/authenticate.js +20 -0
  22. package/components/identity.federation/operations/authenticate.js.map +1 -0
  23. package/components/identity.federation/operations/create.d.ts +10 -0
  24. package/components/identity.federation/operations/create.js +15 -0
  25. package/components/identity.federation/operations/create.js.map +1 -0
  26. package/components/identity.federation/operations/lib/assertions-as-values.d.ts +4 -0
  27. package/components/identity.federation/operations/lib/assertions-as-values.js +45 -0
  28. package/components/identity.federation/operations/lib/assertions-as-values.js.map +1 -0
  29. package/components/identity.federation/operations/lib/jwt.d.ts +20 -0
  30. package/components/identity.federation/operations/lib/jwt.js +136 -0
  31. package/components/identity.federation/operations/lib/jwt.js.map +1 -0
  32. package/components/identity.federation/operations/schemas.d.ts +59 -0
  33. package/components/identity.federation/operations/schemas.js +9 -0
  34. package/components/identity.federation/operations/schemas.js.map +1 -0
  35. package/components/identity.federation/operations/tsconfig.tsbuildinfo +1 -0
  36. package/components/identity.federation/operations/types.d.ts +51 -0
  37. package/components/identity.federation/operations/types.js +3 -0
  38. package/components/identity.federation/operations/types.js.map +1 -0
  39. package/components/identity.federation/source/authenticate.ts +28 -0
  40. package/components/identity.federation/source/create.ts +26 -0
  41. package/components/identity.federation/source/lib/assertions-as-values.ts +19 -0
  42. package/components/identity.federation/source/lib/jwt.test.ts +56 -0
  43. package/components/identity.federation/source/lib/jwt.ts +171 -0
  44. package/components/identity.federation/source/schemas.ts +61 -0
  45. package/components/identity.federation/source/types.ts +56 -0
  46. package/components/identity.federation/tsconfig.json +9 -0
  47. package/components/identity.roles/manifest.toa.yaml +18 -5
  48. package/components/identity.roles/operations/grant.d.ts +10 -0
  49. package/components/identity.roles/operations/grant.js +20 -0
  50. package/components/identity.roles/operations/grant.js.map +1 -0
  51. package/components/identity.roles/operations/lib/Entity.d.ts +5 -0
  52. package/components/identity.roles/operations/lib/Entity.js +3 -0
  53. package/components/identity.roles/operations/lib/Entity.js.map +1 -0
  54. package/components/identity.roles/operations/list.d.ts +2 -0
  55. package/components/identity.roles/operations/list.js +8 -0
  56. package/components/identity.roles/operations/list.js.map +1 -0
  57. package/components/identity.roles/operations/principal.d.ts +13 -0
  58. package/components/identity.roles/operations/principal.js +13 -0
  59. package/components/identity.roles/operations/principal.js.map +1 -0
  60. package/components/identity.roles/operations/tsconfig.tsbuildinfo +1 -0
  61. package/components/identity.roles/source/grant.ts +31 -0
  62. package/components/identity.roles/source/lib/Entity.ts +5 -0
  63. package/components/identity.roles/source/list.ts +2 -4
  64. package/components/identity.roles/source/principal.ts +10 -8
  65. package/components/identity.tokens/manifest.toa.yaml +1 -1
  66. package/components/identity.tokens/operations/authenticate.d.ts +9 -0
  67. package/components/identity.tokens/operations/authenticate.js +32 -0
  68. package/components/identity.tokens/operations/authenticate.js.map +1 -0
  69. package/components/identity.tokens/operations/decrypt.d.ts +3 -0
  70. package/components/identity.tokens/operations/decrypt.js +32 -0
  71. package/components/identity.tokens/operations/decrypt.js.map +1 -0
  72. package/components/identity.tokens/operations/encrypt.d.ts +8 -0
  73. package/components/identity.tokens/operations/encrypt.js +22 -0
  74. package/components/identity.tokens/operations/encrypt.js.map +1 -0
  75. package/components/identity.tokens/operations/revoke.d.ts +2 -0
  76. package/components/identity.tokens/operations/revoke.js +8 -0
  77. package/components/identity.tokens/operations/revoke.js.map +1 -0
  78. package/components/identity.tokens/operations/tsconfig.tsbuildinfo +1 -0
  79. package/components/identity.tokens/operations/types.d.ts +40 -0
  80. package/components/identity.tokens/operations/types.js +3 -0
  81. package/components/identity.tokens/operations/types.js.map +1 -0
  82. package/components/octets.storage/manifest.toa.yaml +1 -0
  83. package/components/octets.storage/operations/store.js +3 -3
  84. package/cucumber.js +0 -1
  85. package/documentation/access.md +11 -11
  86. package/documentation/components.md +49 -13
  87. package/documentation/identity.md +14 -7
  88. package/documentation/io.md +56 -0
  89. package/documentation/octets.md +105 -40
  90. package/documentation/protocol.md +21 -1
  91. package/documentation/query.md +51 -6
  92. package/documentation/tree.md +22 -4
  93. package/documentation/vary.md +69 -0
  94. package/features/access.feature +13 -2
  95. package/features/annotation.feature +1 -0
  96. package/features/body.feature +3 -1
  97. package/features/cache.feature +3 -0
  98. package/features/cors.feature +72 -0
  99. package/features/directives.feature +2 -0
  100. package/features/dynamic.feature +14 -7
  101. package/features/errors.feature +4 -3
  102. package/features/etag.feature +97 -0
  103. package/features/identity.basic.feature +68 -0
  104. package/features/identity.feature +19 -3
  105. package/features/identity.federation.feature +197 -0
  106. package/features/identity.roles.feature +151 -0
  107. package/features/identity.tokens.feature +3 -0
  108. package/features/io.feature +167 -0
  109. package/features/octets.entries.feature +123 -0
  110. package/features/octets.feature +4 -28
  111. package/features/octets.meta.feature +66 -0
  112. package/features/octets.workflows.feature +177 -4
  113. package/features/queries.feature +9 -1
  114. package/features/response.feature +68 -0
  115. package/features/routes.feature +54 -10
  116. package/features/steps/Captures.ts +6 -0
  117. package/features/steps/Components.ts +18 -6
  118. package/features/steps/Database.ts +1 -1
  119. package/features/steps/Gateway.ts +4 -2
  120. package/features/steps/HTTP.ts +40 -87
  121. package/features/steps/IdP.ts +149 -0
  122. package/features/steps/Parameters.ts +8 -2
  123. package/features/steps/Workspace.ts +5 -7
  124. package/features/steps/components/echo/manifest.toa.yaml +1 -0
  125. package/features/steps/components/echo/operations/error.js +11 -0
  126. package/features/steps/components/greeter/manifest.toa.yaml +1 -0
  127. package/features/steps/components/octets.tester/manifest.toa.yaml +4 -0
  128. package/features/steps/components/octets.tester/operations/concat.js +7 -0
  129. package/features/steps/components/octets.tester/operations/echo.js +7 -0
  130. package/features/steps/components/pots/manifest.toa.yaml +12 -3
  131. package/features/steps/components/sequences/manifest.toa.yaml +1 -0
  132. package/features/steps/components/users/manifest.toa.yaml +4 -0
  133. package/features/steps/components/users.properties/manifest.toa.yaml +14 -0
  134. package/features/steps/tsconfig.json +1 -1
  135. package/features/timing.feature +66 -0
  136. package/features/vary.feature +180 -0
  137. package/package.json +16 -20
  138. package/readme.md +7 -6
  139. package/schemas/annotation.cos.yaml +1 -0
  140. package/schemas/io/input.cos.yaml +3 -0
  141. package/schemas/io/message.cos.yaml +5 -0
  142. package/schemas/io/output.cos.yaml +5 -0
  143. package/schemas/octets/delete.cos.yaml +2 -1
  144. package/schemas/octets/list.cos.yaml +2 -1
  145. package/schemas/octets/workflow.cos.yaml +12 -0
  146. package/schemas/querystring.cos.yaml +1 -0
  147. package/source/Annotation.ts +1 -0
  148. package/source/Context.ts +6 -4
  149. package/source/Directive.test.ts +14 -8
  150. package/source/Directive.ts +26 -49
  151. package/source/Endpoint.ts +53 -6
  152. package/source/Factory.ts +23 -12
  153. package/source/Gateway.ts +45 -42
  154. package/source/HTTP/Context.ts +67 -0
  155. package/source/HTTP/Server.test.ts +61 -134
  156. package/source/HTTP/Server.ts +96 -87
  157. package/source/HTTP/Timing.ts +40 -0
  158. package/source/HTTP/formats/msgpack.ts +9 -6
  159. package/source/HTTP/formats/text.ts +1 -1
  160. package/source/HTTP/formats/yaml.ts +1 -1
  161. package/source/HTTP/index.ts +1 -0
  162. package/source/HTTP/messages.test.ts +27 -8
  163. package/source/HTTP/messages.ts +38 -42
  164. package/source/Interception.ts +24 -0
  165. package/source/Mapping.ts +7 -8
  166. package/source/RTD/Context.ts +7 -10
  167. package/source/RTD/Directives.ts +28 -4
  168. package/source/RTD/Endpoint.ts +6 -4
  169. package/source/RTD/Match.ts +2 -7
  170. package/source/RTD/Method.ts +7 -13
  171. package/source/RTD/Node.ts +13 -14
  172. package/source/RTD/Tree.ts +19 -15
  173. package/source/RTD/factory.ts +2 -5
  174. package/source/RTD/syntax/parse.ts +6 -6
  175. package/source/RTD/syntax/types.ts +1 -1
  176. package/source/deployment.ts +7 -2
  177. package/source/directives/auth/Anonymous.ts +3 -2
  178. package/source/directives/auth/{Family.ts → Authorization.ts} +39 -40
  179. package/source/directives/auth/Delegate.ts +32 -0
  180. package/source/directives/auth/Incept.ts +11 -6
  181. package/source/directives/auth/Role.ts +5 -3
  182. package/source/directives/auth/Rule.ts +2 -2
  183. package/source/directives/auth/Scheme.ts +2 -2
  184. package/source/directives/auth/index.ts +2 -2
  185. package/source/directives/auth/schemes.ts +2 -1
  186. package/source/directives/auth/types.ts +9 -6
  187. package/source/directives/cache/{Family.ts → Cache.ts} +6 -7
  188. package/source/directives/cache/Control.ts +5 -5
  189. package/source/directives/cache/index.ts +2 -2
  190. package/source/directives/cache/types.ts +2 -2
  191. package/source/directives/cors/CORS.ts +62 -0
  192. package/source/directives/cors/index.ts +3 -0
  193. package/source/directives/dev/{Family.ts → Development.ts} +4 -5
  194. package/source/directives/dev/Stub.ts +4 -4
  195. package/source/directives/dev/Throw.ts +4 -4
  196. package/source/directives/dev/index.ts +2 -2
  197. package/source/directives/dev/types.ts +1 -1
  198. package/source/directives/index.ts +11 -6
  199. package/source/directives/io/Directive.ts +11 -0
  200. package/source/directives/io/IO.ts +43 -0
  201. package/source/directives/io/Input.ts +50 -0
  202. package/source/directives/io/Message.ts +1 -0
  203. package/source/directives/io/Output.ts +69 -0
  204. package/source/directives/io/index.ts +3 -0
  205. package/source/directives/io/schemas.ts +12 -0
  206. package/source/directives/octets/Context.ts +6 -5
  207. package/source/directives/octets/Delete.ts +64 -11
  208. package/source/directives/octets/Directive.ts +10 -0
  209. package/source/directives/octets/Fetch.ts +44 -29
  210. package/source/directives/octets/List.ts +50 -10
  211. package/source/directives/octets/{Family.ts → Octets.ts} +14 -9
  212. package/source/directives/octets/Permute.ts +18 -11
  213. package/source/directives/octets/Store.ts +70 -102
  214. package/source/directives/octets/Workflow.ts +48 -0
  215. package/source/directives/octets/index.ts +2 -2
  216. package/source/directives/octets/schemas.test.ts +21 -0
  217. package/source/directives/octets/schemas.ts +13 -6
  218. package/source/directives/octets/types.ts +2 -8
  219. package/source/directives/octets/workflows/Execution.ts +76 -0
  220. package/source/directives/octets/workflows/Workflow.ts +37 -0
  221. package/source/directives/octets/workflows/index.ts +1 -0
  222. package/source/directives/vary/Directive.ts +6 -0
  223. package/source/directives/vary/Embed.ts +62 -0
  224. package/source/directives/vary/Properties.ts +17 -0
  225. package/source/directives/vary/Vary.ts +48 -0
  226. package/source/directives/vary/embeddings/Embedding.ts +6 -0
  227. package/source/directives/vary/embeddings/Header.ts +32 -0
  228. package/source/directives/vary/embeddings/Language.ts +31 -0
  229. package/source/directives/vary/embeddings/index.ts +11 -0
  230. package/source/directives/vary/index.ts +3 -0
  231. package/source/exceptions.ts +13 -9
  232. package/source/io.ts +4 -0
  233. package/source/manifest.test.ts +6 -14
  234. package/source/manifest.ts +9 -6
  235. package/source/root.ts +5 -0
  236. package/source/schemas.ts +7 -3
  237. package/transpiled/Annotation.d.ts +8 -0
  238. package/transpiled/Annotation.js +3 -0
  239. package/transpiled/Annotation.js.map +1 -0
  240. package/transpiled/Branch.d.ts +7 -0
  241. package/transpiled/Branch.js +3 -0
  242. package/transpiled/Branch.js.map +1 -0
  243. package/transpiled/Composition.d.ts +14 -0
  244. package/transpiled/Composition.js +43 -0
  245. package/transpiled/Composition.js.map +1 -0
  246. package/transpiled/Context.d.ts +7 -0
  247. package/transpiled/Context.js +3 -0
  248. package/transpiled/Context.js.map +1 -0
  249. package/transpiled/Directive.d.ts +18 -0
  250. package/transpiled/Directive.js +75 -0
  251. package/transpiled/Directive.js.map +1 -0
  252. package/transpiled/Endpoint.d.ts +22 -0
  253. package/transpiled/Endpoint.js +101 -0
  254. package/transpiled/Endpoint.js.map +1 -0
  255. package/transpiled/Factory.d.ts +9 -0
  256. package/transpiled/Factory.js +73 -0
  257. package/transpiled/Factory.js.map +1 -0
  258. package/transpiled/Gateway.d.ts +18 -0
  259. package/transpiled/Gateway.js +92 -0
  260. package/transpiled/Gateway.js.map +1 -0
  261. package/transpiled/HTTP/Context.d.ts +24 -0
  262. package/transpiled/HTTP/Context.js +47 -0
  263. package/transpiled/HTTP/Context.js.map +1 -0
  264. package/transpiled/HTTP/Server.d.ts +25 -0
  265. package/transpiled/HTTP/Server.js +141 -0
  266. package/transpiled/HTTP/Server.js.map +1 -0
  267. package/transpiled/HTTP/Timing.d.ts +10 -0
  268. package/transpiled/HTTP/Timing.js +29 -0
  269. package/transpiled/HTTP/Timing.js.map +1 -0
  270. package/transpiled/HTTP/exceptions.d.ts +34 -0
  271. package/transpiled/HTTP/exceptions.js +71 -0
  272. package/transpiled/HTTP/exceptions.js.map +1 -0
  273. package/transpiled/HTTP/formats/index.d.ts +10 -0
  274. package/transpiled/HTTP/formats/index.js +38 -0
  275. package/transpiled/HTTP/formats/index.js.map +1 -0
  276. package/transpiled/HTTP/formats/json.d.ts +6 -0
  277. package/transpiled/HTTP/formats/json.js +17 -0
  278. package/transpiled/HTTP/formats/json.js.map +1 -0
  279. package/transpiled/HTTP/formats/msgpack.d.ts +6 -0
  280. package/transpiled/HTTP/formats/msgpack.js +17 -0
  281. package/transpiled/HTTP/formats/msgpack.js.map +1 -0
  282. package/transpiled/HTTP/formats/text.d.ts +8 -0
  283. package/transpiled/HTTP/formats/text.js +15 -0
  284. package/transpiled/HTTP/formats/text.js.map +1 -0
  285. package/transpiled/HTTP/formats/yaml.d.ts +6 -0
  286. package/transpiled/HTTP/formats/yaml.js +41 -0
  287. package/transpiled/HTTP/formats/yaml.js.map +1 -0
  288. package/transpiled/HTTP/index.d.ts +4 -0
  289. package/transpiled/HTTP/index.js +21 -0
  290. package/transpiled/HTTP/index.js.map +1 -0
  291. package/transpiled/HTTP/messages.d.ts +19 -0
  292. package/transpiled/HTTP/messages.js +73 -0
  293. package/transpiled/HTTP/messages.js.map +1 -0
  294. package/transpiled/Interception.d.ts +9 -0
  295. package/transpiled/Interception.js +19 -0
  296. package/transpiled/Interception.js.map +1 -0
  297. package/transpiled/Mapping.d.ts +8 -0
  298. package/transpiled/Mapping.js +38 -0
  299. package/transpiled/Mapping.js.map +1 -0
  300. package/transpiled/Query.d.ts +13 -0
  301. package/transpiled/Query.js +107 -0
  302. package/transpiled/Query.js.map +1 -0
  303. package/transpiled/RTD/Context.d.ts +12 -0
  304. package/transpiled/RTD/Context.js +3 -0
  305. package/transpiled/RTD/Context.js.map +1 -0
  306. package/transpiled/RTD/Directives.d.ts +22 -0
  307. package/transpiled/RTD/Directives.js +3 -0
  308. package/transpiled/RTD/Directives.js.map +1 -0
  309. package/transpiled/RTD/Endpoint.d.ts +11 -0
  310. package/transpiled/RTD/Endpoint.js +3 -0
  311. package/transpiled/RTD/Endpoint.js.map +1 -0
  312. package/transpiled/RTD/Match.d.ts +9 -0
  313. package/transpiled/RTD/Match.js +3 -0
  314. package/transpiled/RTD/Match.js.map +1 -0
  315. package/transpiled/RTD/Method.d.ts +9 -0
  316. package/transpiled/RTD/Method.js +16 -0
  317. package/transpiled/RTD/Method.js.map +1 -0
  318. package/transpiled/RTD/Node.d.ts +19 -0
  319. package/transpiled/RTD/Node.js +62 -0
  320. package/transpiled/RTD/Node.js.map +1 -0
  321. package/transpiled/RTD/Route.d.ts +14 -0
  322. package/transpiled/RTD/Route.js +49 -0
  323. package/transpiled/RTD/Route.js.map +1 -0
  324. package/transpiled/RTD/Tree.d.ts +14 -0
  325. package/transpiled/RTD/Tree.js +45 -0
  326. package/transpiled/RTD/Tree.js.map +1 -0
  327. package/transpiled/RTD/factory.d.ts +4 -0
  328. package/transpiled/RTD/factory.js +36 -0
  329. package/transpiled/RTD/factory.js.map +1 -0
  330. package/transpiled/RTD/index.d.ts +8 -0
  331. package/transpiled/RTD/index.js +38 -0
  332. package/transpiled/RTD/index.js.map +1 -0
  333. package/transpiled/RTD/segment.d.ts +8 -0
  334. package/transpiled/RTD/segment.js +25 -0
  335. package/transpiled/RTD/segment.js.map +1 -0
  336. package/transpiled/RTD/syntax/index.d.ts +2 -0
  337. package/transpiled/RTD/syntax/index.js +19 -0
  338. package/transpiled/RTD/syntax/index.js.map +1 -0
  339. package/transpiled/RTD/syntax/parse.d.ts +4 -0
  340. package/transpiled/RTD/syntax/parse.js +128 -0
  341. package/transpiled/RTD/syntax/parse.js.map +1 -0
  342. package/transpiled/RTD/syntax/types.d.ts +41 -0
  343. package/transpiled/RTD/syntax/types.js +5 -0
  344. package/transpiled/RTD/syntax/types.js.map +1 -0
  345. package/transpiled/Remotes.d.ts +9 -0
  346. package/transpiled/Remotes.js +25 -0
  347. package/transpiled/Remotes.js.map +1 -0
  348. package/transpiled/Tenant.d.ts +13 -0
  349. package/transpiled/Tenant.js +34 -0
  350. package/transpiled/Tenant.js.map +1 -0
  351. package/transpiled/deployment.d.ts +3 -0
  352. package/transpiled/deployment.js +71 -0
  353. package/transpiled/deployment.js.map +1 -0
  354. package/transpiled/directives/auth/Anonymous.d.ts +6 -0
  355. package/transpiled/directives/auth/Anonymous.js +16 -0
  356. package/transpiled/directives/auth/Anonymous.js.map +1 -0
  357. package/transpiled/directives/auth/Authorization.d.ts +19 -0
  358. package/transpiled/directives/auth/Authorization.js +127 -0
  359. package/transpiled/directives/auth/Authorization.js.map +1 -0
  360. package/transpiled/directives/auth/Delegate.d.ts +8 -0
  361. package/transpiled/directives/auth/Delegate.js +27 -0
  362. package/transpiled/directives/auth/Delegate.js.map +1 -0
  363. package/transpiled/directives/auth/Echo.d.ts +6 -0
  364. package/transpiled/directives/auth/Echo.js +13 -0
  365. package/transpiled/directives/auth/Echo.js.map +1 -0
  366. package/transpiled/directives/auth/Id.d.ts +7 -0
  367. package/transpiled/directives/auth/Id.js +17 -0
  368. package/transpiled/directives/auth/Id.js.map +1 -0
  369. package/transpiled/directives/auth/Incept.d.ts +10 -0
  370. package/transpiled/directives/auth/Incept.js +63 -0
  371. package/transpiled/directives/auth/Incept.js.map +1 -0
  372. package/transpiled/directives/auth/Role.d.ts +11 -0
  373. package/transpiled/directives/auth/Role.js +46 -0
  374. package/transpiled/directives/auth/Role.js.map +1 -0
  375. package/transpiled/directives/auth/Rule.d.ts +9 -0
  376. package/transpiled/directives/auth/Rule.js +22 -0
  377. package/transpiled/directives/auth/Rule.js.map +1 -0
  378. package/transpiled/directives/auth/Scheme.d.ts +7 -0
  379. package/transpiled/directives/auth/Scheme.js +47 -0
  380. package/transpiled/directives/auth/Scheme.js.map +1 -0
  381. package/transpiled/directives/auth/index.d.ts +2 -0
  382. package/transpiled/directives/auth/index.js +6 -0
  383. package/transpiled/directives/auth/index.js.map +1 -0
  384. package/transpiled/directives/auth/schemes.d.ts +3 -0
  385. package/transpiled/directives/auth/schemes.js +10 -0
  386. package/transpiled/directives/auth/schemes.js.map +1 -0
  387. package/transpiled/directives/auth/split.d.ts +2 -0
  388. package/transpiled/directives/auth/split.js +38 -0
  389. package/transpiled/directives/auth/split.js.map +1 -0
  390. package/transpiled/directives/auth/types.d.ts +31 -0
  391. package/transpiled/directives/auth/types.js +3 -0
  392. package/transpiled/directives/auth/types.js.map +1 -0
  393. package/transpiled/directives/cache/Cache.d.ts +11 -0
  394. package/transpiled/directives/cache/Cache.js +28 -0
  395. package/transpiled/directives/cache/Cache.js.map +1 -0
  396. package/transpiled/directives/cache/Control.d.ts +9 -0
  397. package/transpiled/directives/cache/Control.js +42 -0
  398. package/transpiled/directives/cache/Control.js.map +1 -0
  399. package/transpiled/directives/cache/Exact.d.ts +4 -0
  400. package/transpiled/directives/cache/Exact.js +11 -0
  401. package/transpiled/directives/cache/Exact.js.map +1 -0
  402. package/transpiled/directives/cache/index.d.ts +2 -0
  403. package/transpiled/directives/cache/index.js +6 -0
  404. package/transpiled/directives/cache/index.js.map +1 -0
  405. package/transpiled/directives/cache/types.d.ts +7 -0
  406. package/transpiled/directives/cache/types.js +3 -0
  407. package/transpiled/directives/cache/types.js.map +1 -0
  408. package/transpiled/directives/cors/CORS.d.ts +10 -0
  409. package/transpiled/directives/cors/CORS.js +51 -0
  410. package/transpiled/directives/cors/CORS.js.map +1 -0
  411. package/transpiled/directives/cors/index.d.ts +2 -0
  412. package/transpiled/directives/cors/index.js +6 -0
  413. package/transpiled/directives/cors/index.js.map +1 -0
  414. package/transpiled/directives/dev/Development.d.ts +9 -0
  415. package/transpiled/directives/dev/Development.js +29 -0
  416. package/transpiled/directives/dev/Development.js.map +1 -0
  417. package/transpiled/directives/dev/Stub.d.ts +7 -0
  418. package/transpiled/directives/dev/Stub.js +14 -0
  419. package/transpiled/directives/dev/Stub.js.map +1 -0
  420. package/transpiled/directives/dev/Throw.d.ts +7 -0
  421. package/transpiled/directives/dev/Throw.js +14 -0
  422. package/transpiled/directives/dev/Throw.js.map +1 -0
  423. package/transpiled/directives/dev/index.d.ts +2 -0
  424. package/transpiled/directives/dev/index.js +6 -0
  425. package/transpiled/directives/dev/index.js.map +1 -0
  426. package/transpiled/directives/dev/types.d.ts +4 -0
  427. package/transpiled/directives/dev/types.js +3 -0
  428. package/transpiled/directives/dev/types.js.map +1 -0
  429. package/transpiled/directives/index.d.ts +4 -0
  430. package/transpiled/directives/index.js +13 -0
  431. package/transpiled/directives/index.js.map +1 -0
  432. package/transpiled/directives/io/Directive.d.ts +8 -0
  433. package/transpiled/directives/io/Directive.js +3 -0
  434. package/transpiled/directives/io/Directive.js.map +1 -0
  435. package/transpiled/directives/io/IO.d.ts +9 -0
  436. package/transpiled/directives/io/IO.js +33 -0
  437. package/transpiled/directives/io/IO.js.map +1 -0
  438. package/transpiled/directives/io/Input.d.ts +11 -0
  439. package/transpiled/directives/io/Input.js +63 -0
  440. package/transpiled/directives/io/Input.js.map +1 -0
  441. package/transpiled/directives/io/Message.d.ts +1 -0
  442. package/transpiled/directives/io/Message.js +3 -0
  443. package/transpiled/directives/io/Message.js.map +1 -0
  444. package/transpiled/directives/io/Output.d.ts +13 -0
  445. package/transpiled/directives/io/Output.js +76 -0
  446. package/transpiled/directives/io/Output.js.map +1 -0
  447. package/transpiled/directives/io/index.d.ts +2 -0
  448. package/transpiled/directives/io/index.js +6 -0
  449. package/transpiled/directives/io/index.js.map +1 -0
  450. package/transpiled/directives/io/schemas.d.ts +7 -0
  451. package/transpiled/directives/io/schemas.js +14 -0
  452. package/transpiled/directives/io/schemas.js.map +1 -0
  453. package/transpiled/directives/octets/Context.d.ts +8 -0
  454. package/transpiled/directives/octets/Context.js +42 -0
  455. package/transpiled/directives/octets/Context.js.map +1 -0
  456. package/transpiled/directives/octets/Delete.d.ts +20 -0
  457. package/transpiled/directives/octets/Delete.js +84 -0
  458. package/transpiled/directives/octets/Delete.js.map +1 -0
  459. package/transpiled/directives/octets/Directive.d.ts +8 -0
  460. package/transpiled/directives/octets/Directive.js +8 -0
  461. package/transpiled/directives/octets/Directive.js.map +1 -0
  462. package/transpiled/directives/octets/Fetch.d.ts +18 -0
  463. package/transpiled/directives/octets/Fetch.js +92 -0
  464. package/transpiled/directives/octets/Fetch.js.map +1 -0
  465. package/transpiled/directives/octets/List.d.ts +16 -0
  466. package/transpiled/directives/octets/List.js +74 -0
  467. package/transpiled/directives/octets/List.js.map +1 -0
  468. package/transpiled/directives/octets/Octets.d.ts +12 -0
  469. package/transpiled/directives/octets/Octets.js +55 -0
  470. package/transpiled/directives/octets/Octets.js.map +1 -0
  471. package/transpiled/directives/octets/Permute.d.ts +11 -0
  472. package/transpiled/directives/octets/Permute.js +58 -0
  473. package/transpiled/directives/octets/Permute.js.map +1 -0
  474. package/transpiled/directives/octets/Store.d.ts +24 -0
  475. package/transpiled/directives/octets/Store.js +95 -0
  476. package/transpiled/directives/octets/Store.js.map +1 -0
  477. package/transpiled/directives/octets/Workflow.d.ts +15 -0
  478. package/transpiled/directives/octets/Workflow.js +59 -0
  479. package/transpiled/directives/octets/Workflow.js.map +1 -0
  480. package/transpiled/directives/octets/index.d.ts +2 -0
  481. package/transpiled/directives/octets/index.js +6 -0
  482. package/transpiled/directives/octets/index.js.map +1 -0
  483. package/transpiled/directives/octets/schemas.d.ts +13 -0
  484. package/transpiled/directives/octets/schemas.js +18 -0
  485. package/transpiled/directives/octets/schemas.js.map +1 -0
  486. package/transpiled/directives/octets/types.d.ts +5 -0
  487. package/transpiled/directives/octets/types.js +3 -0
  488. package/transpiled/directives/octets/types.js.map +1 -0
  489. package/transpiled/directives/octets/workflows/Execution.d.ts +25 -0
  490. package/transpiled/directives/octets/workflows/Execution.js +54 -0
  491. package/transpiled/directives/octets/workflows/Execution.js.map +1 -0
  492. package/transpiled/directives/octets/workflows/Workflow.d.ts +12 -0
  493. package/transpiled/directives/octets/workflows/Workflow.js +25 -0
  494. package/transpiled/directives/octets/workflows/Workflow.js.map +1 -0
  495. package/transpiled/directives/octets/workflows/index.d.ts +1 -0
  496. package/transpiled/directives/octets/workflows/index.js +6 -0
  497. package/transpiled/directives/octets/workflows/index.js.map +1 -0
  498. package/transpiled/directives/vary/Directive.d.ts +5 -0
  499. package/transpiled/directives/vary/Directive.js +3 -0
  500. package/transpiled/directives/vary/Directive.js.map +1 -0
  501. package/transpiled/directives/vary/Embed.d.ts +10 -0
  502. package/transpiled/directives/vary/Embed.js +49 -0
  503. package/transpiled/directives/vary/Embed.js.map +1 -0
  504. package/transpiled/directives/vary/Properties.d.ts +9 -0
  505. package/transpiled/directives/vary/Properties.js +16 -0
  506. package/transpiled/directives/vary/Properties.js.map +1 -0
  507. package/transpiled/directives/vary/Vary.d.ts +10 -0
  508. package/transpiled/directives/vary/Vary.js +36 -0
  509. package/transpiled/directives/vary/Vary.js.map +1 -0
  510. package/transpiled/directives/vary/embeddings/Embedding.d.ts +5 -0
  511. package/transpiled/directives/vary/embeddings/Embedding.js +3 -0
  512. package/transpiled/directives/vary/embeddings/Embedding.js.map +1 -0
  513. package/transpiled/directives/vary/embeddings/Header.d.ts +7 -0
  514. package/transpiled/directives/vary/embeddings/Header.js +28 -0
  515. package/transpiled/directives/vary/embeddings/Header.js.map +1 -0
  516. package/transpiled/directives/vary/embeddings/Language.d.ts +7 -0
  517. package/transpiled/directives/vary/embeddings/Language.js +28 -0
  518. package/transpiled/directives/vary/embeddings/Language.js.map +1 -0
  519. package/transpiled/directives/vary/embeddings/index.d.ts +5 -0
  520. package/transpiled/directives/vary/embeddings/index.js +10 -0
  521. package/transpiled/directives/vary/embeddings/index.js.map +1 -0
  522. package/transpiled/directives/vary/index.d.ts +2 -0
  523. package/transpiled/directives/vary/index.js +6 -0
  524. package/transpiled/directives/vary/index.js.map +1 -0
  525. package/transpiled/discovery.d.ts +1 -0
  526. package/transpiled/discovery.js +3 -0
  527. package/transpiled/discovery.js.map +1 -0
  528. package/transpiled/exceptions.d.ts +2 -0
  529. package/transpiled/exceptions.js +39 -0
  530. package/transpiled/exceptions.js.map +1 -0
  531. package/transpiled/index.d.ts +5 -0
  532. package/transpiled/index.js +12 -0
  533. package/transpiled/index.js.map +1 -0
  534. package/transpiled/io.d.ts +3 -0
  535. package/transpiled/io.js +3 -0
  536. package/transpiled/io.js.map +1 -0
  537. package/transpiled/manifest.d.ts +3 -0
  538. package/transpiled/manifest.js +66 -0
  539. package/transpiled/manifest.js.map +1 -0
  540. package/transpiled/root.d.ts +2 -0
  541. package/transpiled/root.js +44 -0
  542. package/transpiled/root.js.map +1 -0
  543. package/transpiled/schemas.d.ts +7 -0
  544. package/transpiled/schemas.js +14 -0
  545. package/transpiled/schemas.js.map +1 -0
  546. package/transpiled/tsconfig.tsbuildinfo +1 -0
  547. package/source/HTTP/Server.fixtures.ts +0 -41
@@ -0,0 +1,149 @@
1
+ import { once } from 'node:events'
2
+ import * as crypto from 'node:crypto'
3
+ import * as http from 'node:http'
4
+ import * as assert from 'node:assert'
5
+ import * as util from 'node:util'
6
+ import { binding, given, afterAll } from 'cucumber-tsflow'
7
+ import { Captures } from './Captures'
8
+
9
+ import type { AddressInfo } from 'node:net'
10
+
11
+ @binding([Captures])
12
+ export class IdP {
13
+ private static server?: http.Server
14
+ private static privateKey?: crypto.KeyObject
15
+ private static issuer?: string
16
+
17
+ public constructor (private readonly captures: Captures) {}
18
+
19
+ @afterAll()
20
+ public static async stop (): Promise<void> {
21
+ if (this.server instanceof http.Server) {
22
+ this.server.close()
23
+ await once(this.server, 'close')
24
+ }
25
+ }
26
+
27
+ @given(/local IDP is running/i)
28
+ public async start (): Promise<void> {
29
+ if (IdP.server instanceof http.Server) return
30
+
31
+ // creating the key
32
+ const { publicKey, privateKey } = await util.promisify(crypto.generateKeyPair)('rsa', {
33
+ modulusLength: 2048
34
+ })
35
+
36
+ IdP.privateKey = privateKey
37
+
38
+ const jwk = JSON.stringify({
39
+ keys: [{ use: 'sig', alg: 'RS256', ...publicKey.export({ format: 'jwk' }) }]
40
+ })
41
+
42
+ const JWK_URL = '/.well-known/jwks'
43
+
44
+ const server = http.createServer((request, response) => {
45
+ switch (request.url) {
46
+ case JWK_URL:
47
+ response.writeHead(200, {
48
+ 'Content-Type': 'application/json',
49
+ 'Content-Length': jwk.length,
50
+ 'Cache-Control': 'no-cache, no-store, must-revalidate',
51
+ Pragma: 'no-cache',
52
+ Expires: '0'
53
+ })
54
+ response.end(jwk)
55
+ break
56
+
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
+ }
75
+
76
+ break
77
+
78
+ default:
79
+ response.writeHead(404, 'Not found')
80
+ response.end()
81
+ }
82
+ })
83
+
84
+ server.listen(44444, 'localhost')
85
+ await once(server, 'listening')
86
+
87
+ const address = server.address() as AddressInfo
88
+
89
+ console.log('IdP is listening on %s:%s', address.address, address.port)
90
+ IdP.server = server
91
+ IdP.issuer = `http://localhost:${address.port}`
92
+ }
93
+
94
+ @given('the IDP token for {word} is issued')
95
+ public async issueToken (user: string): Promise<void> {
96
+ assert.ok(IdP.privateKey, 'IdP private key is not available')
97
+
98
+ const jwt = [
99
+ {
100
+ typ: 'JWT',
101
+ alg: 'RS256'
102
+ },
103
+ {
104
+ iss: IdP.issuer,
105
+ sub: `${user}-mock-id`,
106
+ aud: 'test',
107
+ iat: Math.floor(Date.now() / 1000),
108
+ exp: Math.floor((Date.now() + 1000 * 60 * 5) / 1000)
109
+ }
110
+ ]
111
+ .map((v) => Buffer.from(JSON.stringify(v)).toString('base64url'))
112
+ .join('.')
113
+
114
+ const signature = crypto.createSign('RSA-SHA256').end(jwt).sign(IdP.privateKey, 'base64url')
115
+
116
+ const idToken = `${jwt}.${signature}`
117
+
118
+ this.captures.set(`${user}.id_token`, idToken)
119
+ }
120
+
121
+ @given('the IDP {word} token for {word} is issued with following secret:')
122
+ public async issueSymmetricToken (alg: string, user: string, secret: string): Promise<void> {
123
+ console.log('Sym token for %s with secret "%s"', user, secret)
124
+
125
+ const jwt = [
126
+ {
127
+ typ: 'JWT',
128
+ alg
129
+ },
130
+ {
131
+ iss: IdP.issuer,
132
+ sub: `${user}-mock-id`,
133
+ aud: 'test',
134
+ iat: Math.floor(Date.now() / 1000),
135
+ exp: Math.floor((Date.now() + 1000 * 60 * 5) / 1000)
136
+ }
137
+ ]
138
+ .map((v) => Buffer.from(JSON.stringify(v)).toString('base64url'))
139
+ .join('.')
140
+
141
+ const signature = crypto.createHmac(alg.replace(/^HS(\d{3})$/, 'sha$1'), secret)
142
+ .update(jwt)
143
+ .digest('base64url')
144
+
145
+ const idToken = `${jwt}.${signature}`
146
+
147
+ this.captures.set(`${user}.id_token`, idToken)
148
+ }
149
+ }
@@ -1,4 +1,5 @@
1
1
  import { setDefaultTimeout } from '@cucumber/cucumber'
2
+ import { encode } from '@toa.io/generic'
2
3
 
3
4
  export class Parameters {
4
5
  public readonly origin: string
@@ -9,7 +10,12 @@ export class Parameters {
9
10
  }
10
11
 
11
12
  setDefaultTimeout(30 * 1000)
13
+
12
14
  process.env.TOA_DEV = '1'
13
15
 
14
- // { octets: tmp:///exposition-octets }
15
- process.env.TOA_STORAGES = '3gABpm9jdGV0c7h0bXA6Ly8vZXhwb3NpdGlvbi1vY3RldHM='
16
+ process.env.TOA_STORAGES = encode({
17
+ octets: {
18
+ provider: 'tmp',
19
+ directory: 'exposition'
20
+ }
21
+ })
@@ -1,17 +1,17 @@
1
1
  import { join } from 'node:path'
2
- import { tmpdir } from 'node:os'
3
- import { mkdtemp, copy } from 'fs-extra'
2
+ import { tmpdir, devNull } from 'node:os'
3
+ import { mkdtemp, cp } from 'node:fs/promises'
4
4
  import * as yaml from '@toa.io/yaml'
5
5
 
6
6
  export class Workspace {
7
- private root: string = devnull
7
+ private root: string = devNull
8
8
 
9
9
  public static exists
10
10
  (_0: unknown, _1: unknown, descriptor: PropertyDescriptor): PropertyDescriptor {
11
11
  const method = descriptor.value
12
12
 
13
13
  descriptor.value = async function (this: Workspace, ...args: any[]): Promise<any> {
14
- if (this.root === devnull) this.root =
14
+ if (this.root === devNull) this.root =
15
15
  await mkdtemp(join(tmpdir(), Math.random().toString(36).slice(2)))
16
16
 
17
17
  return method.apply(this, args)
@@ -25,7 +25,7 @@ export class Workspace {
25
25
  const source = join(__dirname, 'components', name)
26
26
  const target = join(this.root, name)
27
27
 
28
- await copy(source, target)
28
+ await cp(source, target, { force: true, recursive: true })
29
29
 
30
30
  if (patch !== undefined)
31
31
  await this.patchManifest(target, patch)
@@ -39,5 +39,3 @@ export class Workspace {
39
39
  await yaml.patch(path, patch)
40
40
  }
41
41
  }
42
-
43
- const devnull = '/dev/null'
@@ -1,4 +1,5 @@
1
1
  name: echo
2
+ version: 0.0.0
2
3
 
3
4
  operations:
4
5
  compute:
@@ -0,0 +1,11 @@
1
+ 'use strict'
2
+
3
+ function computation () {
4
+ const err = { code: 'CODE', message: 'message' }
5
+
6
+ Object.setPrototypeOf(err, Error.prototype)
7
+
8
+ return err
9
+ }
10
+
11
+ 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
 
@@ -9,7 +10,10 @@ operations:
9
10
  storage*: string
10
11
  path*: string
11
12
  entry: object
13
+ parameters: object
12
14
  bar: *operation
13
15
  baz: *operation
14
16
  err: *operation
17
+ echo: *operation
18
+ concat: *operation
15
19
  diversify: *operation
@@ -0,0 +1,7 @@
1
+ 'use strict'
2
+
3
+ function concat (input) {
4
+ return input.parameters.a + ' ' + input.parameters.b
5
+ }
6
+
7
+ exports.computation = concat
@@ -0,0 +1,7 @@
1
+ 'use strict'
2
+
3
+ function echo (input) {
4
+ return input.entry.id
5
+ }
6
+
7
+ exports.computation = echo
@@ -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,4 +1,5 @@
1
1
  name: users
2
+ version: 0.0.0
2
3
 
3
4
  entity:
4
5
  schema:
@@ -9,3 +10,6 @@ operations:
9
10
  concurrency: retry
10
11
  input:
11
12
  name*: ~
13
+ create:
14
+ query: false
15
+ forward: transit
@@ -0,0 +1,14 @@
1
+ namespace: users
2
+ name: properties
3
+ version: 0.0.0
4
+
5
+ entity:
6
+ schema:
7
+ newbie: false
8
+ dependent: true
9
+
10
+ operations:
11
+ transit:
12
+ concurrency: retry
13
+ input:
14
+ newbie*: .
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "compilerOptions": {
3
3
  "target": "ESNext",
4
- "outDir": "/dev/null",
4
+ "noEmit": true,
5
5
  "moduleResolution": "node",
6
6
  "experimentalDecorators": true,
7
7
  "emitDecoratorMetadata": true
@@ -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
+ """
@@ -0,0 +1,180 @@
1
+ Feature: The Vary directive family
2
+
3
+ Scenario Outline: Embedding a `<result>` language code
4
+ Given the `echo` is running with the following manifest:
5
+ """yaml
6
+ exposition:
7
+ /:
8
+ io:output: true
9
+ vary:languages: [en, fr]
10
+ GET:
11
+ vary:embed:
12
+ name: language # embed resolved language code as a `name` property of the operation input
13
+ endpoint: compute
14
+ """
15
+ When the following request is received:
16
+ """
17
+ GET /echo/ HTTP/1.1
18
+ accept: application/yaml
19
+ accept-language: <accept>
20
+ """
21
+ Then the following reply is sent:
22
+ """
23
+ 200 OK
24
+ content-type: application/yaml
25
+ content-language: <result>
26
+ vary: accept-language, accept
27
+
28
+ Hello <result>
29
+ """
30
+ Examples:
31
+ | accept | result |
32
+ | en | en |
33
+ | en_US | en |
34
+ | fr | fr |
35
+ | sw | en |
36
+
37
+ Scenario: Listing languages on the root
38
+ Given the annotation:
39
+ """
40
+ /:
41
+ vary:languages: [en, fr]
42
+ """
43
+ And the `echo` is running with the following manifest:
44
+ """yaml
45
+ exposition:
46
+ /:
47
+ io:output: true
48
+ GET:
49
+ anonymous: true
50
+ vary:embed:
51
+ name: language
52
+ endpoint: compute
53
+ """
54
+ When the following request is received:
55
+ """
56
+ GET /echo/ HTTP/1.1
57
+ accept: application/yaml
58
+ accept-language: fr
59
+ """
60
+ Then the following reply is sent:
61
+ """
62
+ 200 OK
63
+ content-type: application/yaml
64
+ content-language: fr
65
+ """
66
+
67
+ Scenario: Embedding a value of an arbitrary header
68
+ Given the `echo` is running with the following manifest:
69
+ """yaml
70
+ exposition:
71
+ /:
72
+ io:output: true
73
+ GET:
74
+ vary:embed:
75
+ name: :foo
76
+ endpoint: compute
77
+ """
78
+ When the following request is received:
79
+ """
80
+ GET /echo/ HTTP/1.1
81
+ accept: application/yaml
82
+ foo: bar
83
+ """
84
+ Then the following reply is sent:
85
+ """
86
+ 200 OK
87
+ content-type: application/yaml
88
+ vary: foo, accept
89
+
90
+ Hello bar
91
+ """
92
+
93
+ Scenario: Embedding a `host` header value
94
+ Given the `echo` is running with the following manifest:
95
+ """yaml
96
+ exposition:
97
+ /:
98
+ io:output: true
99
+ GET:
100
+ vary:embed:
101
+ name: :Host
102
+ endpoint: compute
103
+ """
104
+ When the following request is received:
105
+ """
106
+ GET /echo/ HTTP/1.1
107
+ accept: application/yaml
108
+ foo: bar
109
+ """
110
+ Then the following reply is sent:
111
+ """
112
+ 200 OK
113
+ content-type: application/yaml
114
+ vary: accept
115
+
116
+ Hello 127.0.0.1:8000
117
+ """
118
+
119
+ Scenario Outline: Embedding a value from the list of options
120
+ Given the `echo` is running with the following manifest:
121
+ """yaml
122
+ exposition:
123
+ /:
124
+ io:output: true
125
+ vary:languages: [en, fr]
126
+ GET:
127
+ vary:embed:
128
+ name:
129
+ - :foo
130
+ - :bar
131
+ - language
132
+ endpoint: compute
133
+ """
134
+ When the following request is received:
135
+ """
136
+ GET /echo/ HTTP/1.1
137
+ accept: application/yaml
138
+ <header>: <value>
139
+ """
140
+ Then the following reply is sent:
141
+ """
142
+ 200 OK
143
+ content-type: application/yaml
144
+ vary: <header>, accept
145
+
146
+ Hello <value>
147
+ """
148
+ Examples:
149
+ | header | value |
150
+ | foo | bar |
151
+ | bar | baz |
152
+ | accept-language | en |
153
+
154
+ Scenario: Adding headers used by defined embeddings to CORS permissions
155
+ Given the `echo` is running with the following manifest:
156
+ """yaml
157
+ exposition:
158
+ /:
159
+ io:output: true
160
+ vary:languages: [en, fr]
161
+ GET:
162
+ vary:embed:
163
+ name:
164
+ - language
165
+ - :foo
166
+ - :FOO
167
+ - :bar
168
+ endpoint: compute
169
+ """
170
+ When the following request is received:
171
+ """
172
+ OPTIONS / HTTP/1.1
173
+ origin: https://example.com
174
+ access-control-request-headers: whatever
175
+ """
176
+ Then the following reply is sent:
177
+ """
178
+ 204 No Content
179
+ access-control-allow-headers: accept, authorization, content-type, etag, if-match, if-none-match, accept-language, foo, bar
180
+ """
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@toa.io/extensions.exposition",
3
- "version": "1.0.0-alpha.0",
3
+ "version": "1.0.0-alpha.11",
4
4
  "description": "Toa Exposition",
5
5
  "author": "temich <tema.gurtovoy@gmail.com>",
6
6
  "homepage": "https://github.com/toa-io/toa#readme",
@@ -17,18 +17,14 @@
17
17
  "access": "public"
18
18
  },
19
19
  "dependencies": {
20
- "@toa.io/core": "1.0.0-alpha.0",
21
- "@toa.io/generic": "1.0.0-alpha.0",
22
- "@toa.io/http": "1.0.0-alpha.0",
23
- "@toa.io/schemas": "1.0.0-alpha.0",
24
- "@toa.io/streams": "1.0.0-alpha.0",
20
+ "@toa.io/core": "1.0.0-alpha.11",
21
+ "@toa.io/generic": "1.0.0-alpha.11",
22
+ "@toa.io/schemas": "1.0.0-alpha.11",
25
23
  "bcryptjs": "2.4.3",
26
- "cors": "2.8.5",
27
24
  "error-value": "0.3.0",
28
- "express": "4.18.2",
29
25
  "js-yaml": "4.1.0",
30
26
  "matchacho": "0.3.5",
31
- "msgpackr": "1.9.5",
27
+ "msgpackr": "1.10.1",
32
28
  "negotiator": "0.6.3",
33
29
  "paseto": "3.1.4"
34
30
  },
@@ -38,20 +34,20 @@
38
34
  },
39
35
  "scripts": {
40
36
  "test": "jest",
41
- "transpile": "rm -rf transpiled && npx tsc && npm run transpile:basic && npm run transpile:tokens && npm run transpile:roles",
42
- "transpile:basic": "rm -rf ./components/identity.basic/operations && npx tsc -p ./components/identity.basic",
43
- "transpile:tokens": "rm -rf ./components/identity.tokens/operations && npx tsc -p ./components/identity.tokens",
44
- "transpile:roles": "rm -rf ./components/identity.roles/operations && npx tsc -p ./components/identity.roles",
45
- "features": "npx cucumber-js"
37
+ "transpile": "tsc && npm run transpile:basic && npm run transpile:tokens && npm run transpile:roles && npm run transpile:federation",
38
+ "transpile:basic": "tsc -p ./components/identity.basic",
39
+ "transpile:tokens": "tsc -p ./components/identity.tokens",
40
+ "transpile:roles": "tsc -p ./components/identity.roles",
41
+ "pretranspile:federation": "js-yaml components/identity.federation/manifest.toa.yaml | jq -M '{ type: \"object\", properties: {configuration: .configuration.schema, entity: .entity.schema }, additionalProperties: false}' > schemas.json && json2ts -i schemas.json -o components/identity.federation/source/schemas.ts && rm schemas.json",
42
+ "transpile:federation": "tsc -p ./components/identity.federation",
43
+ "features": "cucumber-js"
46
44
  },
47
45
  "devDependencies": {
48
- "@toa.io/extensions.storages": "1.0.0-alpha.0",
46
+ "@toa.io/agent": "1.0.0-alpha.11",
47
+ "@toa.io/extensions.storages": "1.0.0-alpha.11",
49
48
  "@types/bcryptjs": "2.4.3",
50
49
  "@types/cors": "2.8.13",
51
- "@types/express": "4.17.17",
52
- "@types/fs-extra": "11.0.4",
53
- "@types/negotiator": "0.6.1",
54
- "fs-extra": "11.1.1"
50
+ "@types/negotiator": "0.6.1"
55
51
  },
56
- "gitHead": "06c64546f6292cc07c52f74b31415101037f7616"
52
+ "gitHead": "e343ac81eef12957cfa5e520119b1276b8ec0ad2"
57
53
  }
package/readme.md CHANGED
@@ -127,12 +127,13 @@ exposition:
127
127
  host: the.example.com
128
128
  ```
129
129
 
130
- | Option | Type | Description |
131
- |---------------|-----------|------------------------------------------------------------------|
132
- | `host` | `string` | Domain name to be used for the corresponding Kubernetes Ingress. |
133
- | `class` | `string` | Ingress class |
134
- | `annotations` | `object` | Ingress annotations |
135
- | `debug` | `boolean` | Output server errors. Default `false`. |
130
+ | Option | Type | Description |
131
+ |---------------|-----------|-------------------------------------------------------------------------------------------------------------------|
132
+ | `host` | `string` | Domain name to be used for the corresponding Kubernetes Ingress. |
133
+ | `class` | `string` | Ingress class |
134
+ | `annotations` | `object` | Ingress annotations |
135
+ | `debug` | `boolean` | Output server errors. Default `false`. |
136
+ | `trace` | `boolean` | Output [server timing](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Server-Timing). Default `false`. |
136
137
 
137
138
  ### Context resources
138
139
 
@@ -2,4 +2,5 @@ host: string
2
2
  class: string
3
3
  annotations: <string>
4
4
  debug: boolean
5
+ trace: boolean
5
6
  /: ~