@toa.io/extensions.exposition 0.24.0-alpha.2 → 0.24.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 (411) hide show
  1. package/components/context.toa.yaml +12 -0
  2. package/components/identity.bans/manifest.toa.yaml +1 -1
  3. package/components/identity.basic/manifest.toa.yaml +2 -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 +88 -0
  20. package/components/identity.federation/operations/assertions-as-values.cjs +45 -0
  21. package/components/identity.federation/operations/assertions-as-values.cjs.map +1 -0
  22. package/components/identity.federation/operations/assertions-as-values.d.cts +4 -0
  23. package/components/identity.federation/operations/authenticate.d.ts +3 -0
  24. package/components/identity.federation/operations/authenticate.js +20 -0
  25. package/components/identity.federation/operations/authenticate.js.map +1 -0
  26. package/components/identity.federation/operations/create.d.ts +10 -0
  27. package/components/identity.federation/operations/create.js +15 -0
  28. package/components/identity.federation/operations/create.js.map +1 -0
  29. package/components/identity.federation/operations/jwt.cjs +112 -0
  30. package/components/identity.federation/operations/jwt.cjs.map +1 -0
  31. package/components/identity.federation/operations/jwt.d.cts +19 -0
  32. package/components/identity.federation/operations/schemas.d.ts +43 -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/assertions-as-values.cts +20 -0
  40. package/components/identity.federation/source/authenticate.ts +28 -0
  41. package/components/identity.federation/source/create.ts +26 -0
  42. package/components/identity.federation/source/jwt.cts +143 -0
  43. package/components/identity.federation/source/schemas.ts +45 -0
  44. package/components/identity.federation/source/types.ts +56 -0
  45. package/components/identity.federation/tsconfig.json +9 -0
  46. package/components/identity.roles/operations/list.d.ts +5 -0
  47. package/components/identity.roles/operations/list.js +8 -0
  48. package/components/identity.roles/operations/list.js.map +1 -0
  49. package/components/identity.roles/operations/principal.d.ts +15 -0
  50. package/components/identity.roles/operations/principal.js +8 -0
  51. package/components/identity.roles/operations/principal.js.map +1 -0
  52. package/components/identity.roles/operations/tsconfig.tsbuildinfo +1 -0
  53. package/components/identity.tokens/manifest.toa.yaml +1 -1
  54. package/components/identity.tokens/operations/authenticate.d.ts +9 -0
  55. package/components/identity.tokens/operations/authenticate.js +32 -0
  56. package/components/identity.tokens/operations/authenticate.js.map +1 -0
  57. package/components/identity.tokens/operations/decrypt.d.ts +3 -0
  58. package/components/identity.tokens/operations/decrypt.js +32 -0
  59. package/components/identity.tokens/operations/decrypt.js.map +1 -0
  60. package/components/identity.tokens/operations/encrypt.d.ts +8 -0
  61. package/components/identity.tokens/operations/encrypt.js +22 -0
  62. package/components/identity.tokens/operations/encrypt.js.map +1 -0
  63. package/components/identity.tokens/operations/revoke.d.ts +2 -0
  64. package/components/identity.tokens/operations/revoke.js +8 -0
  65. package/components/identity.tokens/operations/revoke.js.map +1 -0
  66. package/components/identity.tokens/operations/tsconfig.tsbuildinfo +1 -0
  67. package/components/identity.tokens/operations/types.d.ts +40 -0
  68. package/components/identity.tokens/operations/types.js +3 -0
  69. package/components/identity.tokens/operations/types.js.map +1 -0
  70. package/cucumber.js +0 -1
  71. package/documentation/components.md +25 -2
  72. package/documentation/identity.md +7 -7
  73. package/documentation/protocol.md +21 -1
  74. package/documentation/query.md +1 -1
  75. package/documentation/vary.md +69 -0
  76. package/features/cors.feature +39 -0
  77. package/features/identity.feature +19 -3
  78. package/features/identity.federation.feature +125 -0
  79. package/features/octets.feature +1 -1
  80. package/features/response.feature +65 -0
  81. package/features/steps/Captures.ts +5 -0
  82. package/features/steps/Components.ts +5 -0
  83. package/features/steps/Gateway.ts +1 -2
  84. package/features/steps/HTTP.ts +39 -84
  85. package/features/steps/IdP.ts +120 -0
  86. package/features/steps/Parameters.ts +8 -2
  87. package/features/steps/Workspace.ts +5 -7
  88. package/features/steps/components/echo/operations/error.js +11 -0
  89. package/features/vary.feature +150 -0
  90. package/package.json +17 -18
  91. package/source/Directive.test.ts +8 -2
  92. package/source/Directive.ts +19 -16
  93. package/source/Factory.ts +8 -7
  94. package/source/Gateway.ts +22 -8
  95. package/source/HTTP/Server.fixtures.ts +0 -1
  96. package/source/HTTP/Server.test.ts +61 -134
  97. package/source/HTTP/Server.ts +45 -23
  98. package/source/HTTP/formats/msgpack.ts +9 -6
  99. package/source/HTTP/formats/text.ts +1 -1
  100. package/source/HTTP/formats/yaml.ts +1 -1
  101. package/source/HTTP/messages.ts +8 -2
  102. package/source/Interception.ts +24 -0
  103. package/source/RTD/Directives.ts +2 -2
  104. package/source/RTD/Tree.ts +3 -0
  105. package/source/RTD/syntax/parse.ts +6 -6
  106. package/source/RTD/syntax/types.ts +1 -1
  107. package/source/deployment.ts +1 -2
  108. package/source/directives/auth/{Family.ts → Authorization.ts} +29 -33
  109. package/source/directives/auth/Incept.ts +1 -1
  110. package/source/directives/auth/Rule.ts +2 -2
  111. package/source/directives/auth/index.ts +2 -2
  112. package/source/directives/auth/schemes.ts +2 -1
  113. package/source/directives/auth/types.ts +9 -6
  114. package/source/directives/cache/{Family.ts → Cache.ts} +4 -5
  115. package/source/directives/cache/index.ts +2 -2
  116. package/source/directives/cache/types.ts +1 -1
  117. package/source/directives/cors/CORS.ts +52 -0
  118. package/source/directives/cors/index.ts +3 -0
  119. package/source/directives/dev/{Family.ts → Development.ts} +3 -4
  120. package/source/directives/dev/Stub.ts +4 -4
  121. package/source/directives/dev/Throw.ts +4 -4
  122. package/source/directives/dev/index.ts +2 -2
  123. package/source/directives/dev/types.ts +1 -1
  124. package/source/directives/index.ts +10 -6
  125. package/source/directives/octets/Context.ts +1 -1
  126. package/source/directives/octets/Delete.ts +1 -2
  127. package/source/directives/octets/Fetch.ts +1 -1
  128. package/source/directives/octets/List.ts +1 -1
  129. package/source/directives/octets/{Family.ts → Octets.ts} +3 -4
  130. package/source/directives/octets/Permute.ts +1 -1
  131. package/source/directives/octets/Store.ts +3 -3
  132. package/source/directives/octets/index.ts +2 -2
  133. package/source/directives/octets/types.ts +3 -3
  134. package/source/directives/vary/Directive.ts +6 -0
  135. package/source/directives/vary/Embed.ts +62 -0
  136. package/source/directives/vary/Properties.ts +17 -0
  137. package/source/directives/vary/Vary.ts +48 -0
  138. package/source/directives/vary/embeddings/Embedding.ts +6 -0
  139. package/source/directives/vary/embeddings/Header.ts +30 -0
  140. package/source/directives/vary/embeddings/Language.ts +31 -0
  141. package/source/directives/vary/embeddings/index.ts +11 -0
  142. package/source/directives/vary/index.ts +3 -0
  143. package/source/io.ts +4 -0
  144. package/transpiled/Annotation.d.ts +7 -0
  145. package/transpiled/Annotation.js +3 -0
  146. package/transpiled/Annotation.js.map +1 -0
  147. package/transpiled/Branch.d.ts +7 -0
  148. package/transpiled/Branch.js +3 -0
  149. package/transpiled/Branch.js.map +1 -0
  150. package/transpiled/Composition.d.ts +14 -0
  151. package/transpiled/Composition.js +43 -0
  152. package/transpiled/Composition.js.map +1 -0
  153. package/transpiled/Context.d.ts +5 -0
  154. package/transpiled/Context.js +3 -0
  155. package/transpiled/Context.js.map +1 -0
  156. package/transpiled/Directive.d.ts +31 -0
  157. package/transpiled/Directive.js +78 -0
  158. package/transpiled/Directive.js.map +1 -0
  159. package/transpiled/Endpoint.d.ts +20 -0
  160. package/transpiled/Endpoint.js +45 -0
  161. package/transpiled/Endpoint.js.map +1 -0
  162. package/transpiled/Factory.d.ts +9 -0
  163. package/transpiled/Factory.js +67 -0
  164. package/transpiled/Factory.js.map +1 -0
  165. package/transpiled/Gateway.d.ts +22 -0
  166. package/transpiled/Gateway.js +102 -0
  167. package/transpiled/Gateway.js.map +1 -0
  168. package/transpiled/HTTP/Server.d.ts +24 -0
  169. package/transpiled/HTTP/Server.fixtures.d.ts +10 -0
  170. package/transpiled/HTTP/Server.fixtures.js +31 -0
  171. package/transpiled/HTTP/Server.fixtures.js.map +1 -0
  172. package/transpiled/HTTP/Server.js +148 -0
  173. package/transpiled/HTTP/Server.js.map +1 -0
  174. package/transpiled/HTTP/exceptions.d.ts +34 -0
  175. package/transpiled/HTTP/exceptions.js +71 -0
  176. package/transpiled/HTTP/exceptions.js.map +1 -0
  177. package/transpiled/HTTP/formats/index.d.ts +10 -0
  178. package/transpiled/HTTP/formats/index.js +38 -0
  179. package/transpiled/HTTP/formats/index.js.map +1 -0
  180. package/transpiled/HTTP/formats/json.d.ts +6 -0
  181. package/transpiled/HTTP/formats/json.js +17 -0
  182. package/transpiled/HTTP/formats/json.js.map +1 -0
  183. package/transpiled/HTTP/formats/msgpack.d.ts +6 -0
  184. package/transpiled/HTTP/formats/msgpack.js +17 -0
  185. package/transpiled/HTTP/formats/msgpack.js.map +1 -0
  186. package/transpiled/HTTP/formats/text.d.ts +8 -0
  187. package/transpiled/HTTP/formats/text.js +15 -0
  188. package/transpiled/HTTP/formats/text.js.map +1 -0
  189. package/transpiled/HTTP/formats/yaml.d.ts +6 -0
  190. package/transpiled/HTTP/formats/yaml.js +41 -0
  191. package/transpiled/HTTP/formats/yaml.js.map +1 -0
  192. package/transpiled/HTTP/index.d.ts +3 -0
  193. package/transpiled/HTTP/index.js +20 -0
  194. package/transpiled/HTTP/index.js.map +1 -0
  195. package/transpiled/HTTP/messages.d.ts +32 -0
  196. package/transpiled/HTTP/messages.js +72 -0
  197. package/transpiled/HTTP/messages.js.map +1 -0
  198. package/transpiled/Interception.d.ts +9 -0
  199. package/transpiled/Interception.js +19 -0
  200. package/transpiled/Interception.js.map +1 -0
  201. package/transpiled/Mapping.d.ts +8 -0
  202. package/transpiled/Mapping.js +38 -0
  203. package/transpiled/Mapping.js.map +1 -0
  204. package/transpiled/Query.d.ts +13 -0
  205. package/transpiled/Query.js +107 -0
  206. package/transpiled/Query.js.map +1 -0
  207. package/transpiled/RTD/Context.d.ts +11 -0
  208. package/transpiled/RTD/Context.js +3 -0
  209. package/transpiled/RTD/Context.js.map +1 -0
  210. package/transpiled/RTD/Directives.d.ts +7 -0
  211. package/transpiled/RTD/Directives.js +3 -0
  212. package/transpiled/RTD/Directives.js.map +1 -0
  213. package/transpiled/RTD/Endpoint.d.ts +9 -0
  214. package/transpiled/RTD/Endpoint.js +3 -0
  215. package/transpiled/RTD/Endpoint.js.map +1 -0
  216. package/transpiled/RTD/Match.d.ts +11 -0
  217. package/transpiled/RTD/Match.js +3 -0
  218. package/transpiled/RTD/Match.js.map +1 -0
  219. package/transpiled/RTD/Method.d.ts +9 -0
  220. package/transpiled/RTD/Method.js +16 -0
  221. package/transpiled/RTD/Method.js.map +1 -0
  222. package/transpiled/RTD/Node.d.ts +21 -0
  223. package/transpiled/RTD/Node.js +61 -0
  224. package/transpiled/RTD/Node.js.map +1 -0
  225. package/transpiled/RTD/Route.d.ts +14 -0
  226. package/transpiled/RTD/Route.js +49 -0
  227. package/transpiled/RTD/Route.js.map +1 -0
  228. package/transpiled/RTD/Tree.d.ts +14 -0
  229. package/transpiled/RTD/Tree.js +42 -0
  230. package/transpiled/RTD/Tree.js.map +1 -0
  231. package/transpiled/RTD/factory.d.ts +6 -0
  232. package/transpiled/RTD/factory.js +36 -0
  233. package/transpiled/RTD/factory.js.map +1 -0
  234. package/transpiled/RTD/index.d.ts +8 -0
  235. package/transpiled/RTD/index.js +38 -0
  236. package/transpiled/RTD/index.js.map +1 -0
  237. package/transpiled/RTD/segment.d.ts +8 -0
  238. package/transpiled/RTD/segment.js +25 -0
  239. package/transpiled/RTD/segment.js.map +1 -0
  240. package/transpiled/RTD/syntax/index.d.ts +2 -0
  241. package/transpiled/RTD/syntax/index.js +19 -0
  242. package/transpiled/RTD/syntax/index.js.map +1 -0
  243. package/transpiled/RTD/syntax/parse.d.ts +4 -0
  244. package/transpiled/RTD/syntax/parse.js +128 -0
  245. package/transpiled/RTD/syntax/parse.js.map +1 -0
  246. package/transpiled/RTD/syntax/types.d.ts +41 -0
  247. package/transpiled/RTD/syntax/types.js +5 -0
  248. package/transpiled/RTD/syntax/types.js.map +1 -0
  249. package/transpiled/Remotes.d.ts +9 -0
  250. package/transpiled/Remotes.js +25 -0
  251. package/transpiled/Remotes.js.map +1 -0
  252. package/transpiled/Tenant.d.ts +13 -0
  253. package/transpiled/Tenant.js +34 -0
  254. package/transpiled/Tenant.js.map +1 -0
  255. package/transpiled/deployment.d.ts +3 -0
  256. package/transpiled/deployment.js +66 -0
  257. package/transpiled/deployment.js.map +1 -0
  258. package/transpiled/directives/auth/Anonymous.d.ts +6 -0
  259. package/transpiled/directives/auth/Anonymous.js +17 -0
  260. package/transpiled/directives/auth/Anonymous.js.map +1 -0
  261. package/transpiled/directives/auth/Authorization.d.ts +20 -0
  262. package/transpiled/directives/auth/Authorization.js +125 -0
  263. package/transpiled/directives/auth/Authorization.js.map +1 -0
  264. package/transpiled/directives/auth/Echo.d.ts +6 -0
  265. package/transpiled/directives/auth/Echo.js +13 -0
  266. package/transpiled/directives/auth/Echo.js.map +1 -0
  267. package/transpiled/directives/auth/Id.d.ts +7 -0
  268. package/transpiled/directives/auth/Id.js +17 -0
  269. package/transpiled/directives/auth/Id.js.map +1 -0
  270. package/transpiled/directives/auth/Incept.d.ts +10 -0
  271. package/transpiled/directives/auth/Incept.js +58 -0
  272. package/transpiled/directives/auth/Incept.js.map +1 -0
  273. package/transpiled/directives/auth/Role.d.ts +11 -0
  274. package/transpiled/directives/auth/Role.js +44 -0
  275. package/transpiled/directives/auth/Role.js.map +1 -0
  276. package/transpiled/directives/auth/Rule.d.ts +9 -0
  277. package/transpiled/directives/auth/Rule.js +22 -0
  278. package/transpiled/directives/auth/Rule.js.map +1 -0
  279. package/transpiled/directives/auth/Scheme.d.ts +7 -0
  280. package/transpiled/directives/auth/Scheme.js +47 -0
  281. package/transpiled/directives/auth/Scheme.js.map +1 -0
  282. package/transpiled/directives/auth/index.d.ts +2 -0
  283. package/transpiled/directives/auth/index.js +6 -0
  284. package/transpiled/directives/auth/index.js.map +1 -0
  285. package/transpiled/directives/auth/schemes.d.ts +3 -0
  286. package/transpiled/directives/auth/schemes.js +10 -0
  287. package/transpiled/directives/auth/schemes.js.map +1 -0
  288. package/transpiled/directives/auth/split.d.ts +2 -0
  289. package/transpiled/directives/auth/split.js +38 -0
  290. package/transpiled/directives/auth/split.js.map +1 -0
  291. package/transpiled/directives/auth/types.d.ts +31 -0
  292. package/transpiled/directives/auth/types.js +3 -0
  293. package/transpiled/directives/auth/types.js.map +1 -0
  294. package/transpiled/directives/cache/Cache.d.ts +11 -0
  295. package/transpiled/directives/cache/Cache.js +28 -0
  296. package/transpiled/directives/cache/Cache.js.map +1 -0
  297. package/transpiled/directives/cache/Control.d.ts +9 -0
  298. package/transpiled/directives/cache/Control.js +42 -0
  299. package/transpiled/directives/cache/Control.js.map +1 -0
  300. package/transpiled/directives/cache/Exact.d.ts +4 -0
  301. package/transpiled/directives/cache/Exact.js +11 -0
  302. package/transpiled/directives/cache/Exact.js.map +1 -0
  303. package/transpiled/directives/cache/index.d.ts +2 -0
  304. package/transpiled/directives/cache/index.js +6 -0
  305. package/transpiled/directives/cache/index.js.map +1 -0
  306. package/transpiled/directives/cache/types.d.ts +7 -0
  307. package/transpiled/directives/cache/types.js +3 -0
  308. package/transpiled/directives/cache/types.js.map +1 -0
  309. package/transpiled/directives/cors/CORS.d.ts +14 -0
  310. package/transpiled/directives/cors/CORS.js +42 -0
  311. package/transpiled/directives/cors/CORS.js.map +1 -0
  312. package/transpiled/directives/cors/index.d.ts +2 -0
  313. package/transpiled/directives/cors/index.js +6 -0
  314. package/transpiled/directives/cors/index.js.map +1 -0
  315. package/transpiled/directives/dev/Development.d.ts +9 -0
  316. package/transpiled/directives/dev/Development.js +29 -0
  317. package/transpiled/directives/dev/Development.js.map +1 -0
  318. package/transpiled/directives/dev/Stub.d.ts +7 -0
  319. package/transpiled/directives/dev/Stub.js +14 -0
  320. package/transpiled/directives/dev/Stub.js.map +1 -0
  321. package/transpiled/directives/dev/Throw.d.ts +7 -0
  322. package/transpiled/directives/dev/Throw.js +14 -0
  323. package/transpiled/directives/dev/Throw.js.map +1 -0
  324. package/transpiled/directives/dev/index.d.ts +2 -0
  325. package/transpiled/directives/dev/index.js +6 -0
  326. package/transpiled/directives/dev/index.js.map +1 -0
  327. package/transpiled/directives/dev/types.d.ts +4 -0
  328. package/transpiled/directives/dev/types.js +3 -0
  329. package/transpiled/directives/dev/types.js.map +1 -0
  330. package/transpiled/directives/index.d.ts +4 -0
  331. package/transpiled/directives/index.js +12 -0
  332. package/transpiled/directives/index.js.map +1 -0
  333. package/transpiled/directives/octets/Context.d.ts +8 -0
  334. package/transpiled/directives/octets/Context.js +40 -0
  335. package/transpiled/directives/octets/Context.js.map +1 -0
  336. package/transpiled/directives/octets/Delete.d.ts +10 -0
  337. package/transpiled/directives/octets/Delete.js +47 -0
  338. package/transpiled/directives/octets/Delete.js.map +1 -0
  339. package/transpiled/directives/octets/Fetch.d.ts +18 -0
  340. package/transpiled/directives/octets/Fetch.js +77 -0
  341. package/transpiled/directives/octets/Fetch.js.map +1 -0
  342. package/transpiled/directives/octets/List.d.ts +10 -0
  343. package/transpiled/directives/octets/List.js +47 -0
  344. package/transpiled/directives/octets/List.js.map +1 -0
  345. package/transpiled/directives/octets/Octets.d.ts +11 -0
  346. package/transpiled/directives/octets/Octets.js +51 -0
  347. package/transpiled/directives/octets/Octets.js.map +1 -0
  348. package/transpiled/directives/octets/Permute.d.ts +10 -0
  349. package/transpiled/directives/octets/Permute.js +51 -0
  350. package/transpiled/directives/octets/Permute.js.map +1 -0
  351. package/transpiled/directives/octets/Store.d.ts +33 -0
  352. package/transpiled/directives/octets/Store.js +124 -0
  353. package/transpiled/directives/octets/Store.js.map +1 -0
  354. package/transpiled/directives/octets/index.d.ts +2 -0
  355. package/transpiled/directives/octets/index.js +6 -0
  356. package/transpiled/directives/octets/index.js.map +1 -0
  357. package/transpiled/directives/octets/schemas.d.ts +6 -0
  358. package/transpiled/directives/octets/schemas.js +17 -0
  359. package/transpiled/directives/octets/schemas.js.map +1 -0
  360. package/transpiled/directives/octets/types.d.ts +9 -0
  361. package/transpiled/directives/octets/types.js +3 -0
  362. package/transpiled/directives/octets/types.js.map +1 -0
  363. package/transpiled/directives/vary/Directive.d.ts +5 -0
  364. package/transpiled/directives/vary/Directive.js +3 -0
  365. package/transpiled/directives/vary/Directive.js.map +1 -0
  366. package/transpiled/directives/vary/Embed.d.ts +10 -0
  367. package/transpiled/directives/vary/Embed.js +49 -0
  368. package/transpiled/directives/vary/Embed.js.map +1 -0
  369. package/transpiled/directives/vary/Properties.d.ts +9 -0
  370. package/transpiled/directives/vary/Properties.js +16 -0
  371. package/transpiled/directives/vary/Properties.js.map +1 -0
  372. package/transpiled/directives/vary/Vary.d.ts +10 -0
  373. package/transpiled/directives/vary/Vary.js +36 -0
  374. package/transpiled/directives/vary/Vary.js.map +1 -0
  375. package/transpiled/directives/vary/embeddings/Embedding.d.ts +5 -0
  376. package/transpiled/directives/vary/embeddings/Embedding.js +3 -0
  377. package/transpiled/directives/vary/embeddings/Embedding.js.map +1 -0
  378. package/transpiled/directives/vary/embeddings/Header.d.ts +7 -0
  379. package/transpiled/directives/vary/embeddings/Header.js +26 -0
  380. package/transpiled/directives/vary/embeddings/Header.js.map +1 -0
  381. package/transpiled/directives/vary/embeddings/Language.d.ts +7 -0
  382. package/transpiled/directives/vary/embeddings/Language.js +28 -0
  383. package/transpiled/directives/vary/embeddings/Language.js.map +1 -0
  384. package/transpiled/directives/vary/embeddings/index.d.ts +5 -0
  385. package/transpiled/directives/vary/embeddings/index.js +10 -0
  386. package/transpiled/directives/vary/embeddings/index.js.map +1 -0
  387. package/transpiled/directives/vary/index.d.ts +2 -0
  388. package/transpiled/directives/vary/index.js +6 -0
  389. package/transpiled/directives/vary/index.js.map +1 -0
  390. package/transpiled/discovery.d.ts +1 -0
  391. package/transpiled/discovery.js +3 -0
  392. package/transpiled/discovery.js.map +1 -0
  393. package/transpiled/exceptions.d.ts +2 -0
  394. package/transpiled/exceptions.js +39 -0
  395. package/transpiled/exceptions.js.map +1 -0
  396. package/transpiled/index.d.ts +5 -0
  397. package/transpiled/index.js +12 -0
  398. package/transpiled/index.js.map +1 -0
  399. package/transpiled/io.d.ts +3 -0
  400. package/transpiled/io.js +3 -0
  401. package/transpiled/io.js.map +1 -0
  402. package/transpiled/manifest.d.ts +3 -0
  403. package/transpiled/manifest.js +61 -0
  404. package/transpiled/manifest.js.map +1 -0
  405. package/transpiled/root.d.ts +2 -0
  406. package/transpiled/root.js +39 -0
  407. package/transpiled/root.js.map +1 -0
  408. package/transpiled/schemas.d.ts +3 -0
  409. package/transpiled/schemas.js +14 -0
  410. package/transpiled/schemas.js.map +1 -0
  411. package/transpiled/tsconfig.tsbuildinfo +1 -0
@@ -0,0 +1,40 @@
1
+ import { type Call, type Maybe, type Observation } from '@toa.io/types';
2
+ export interface Context {
3
+ local: {
4
+ observe: Observation<Entity>;
5
+ decrypt: Call<Maybe<DecryptOutput>, string>;
6
+ };
7
+ configuration: Configuration;
8
+ }
9
+ export interface Configuration {
10
+ readonly key0: string;
11
+ readonly key1?: string;
12
+ readonly lifetime: number;
13
+ readonly refresh: number;
14
+ }
15
+ export interface Entity {
16
+ identity: string;
17
+ revokedAt: number;
18
+ }
19
+ export interface Identity extends Record<string, any> {
20
+ id: string;
21
+ }
22
+ export interface AuthenticateOutput {
23
+ identity: Identity;
24
+ refresh: boolean;
25
+ }
26
+ export interface EncryptInput {
27
+ identity: Identity;
28
+ lifetime?: number;
29
+ }
30
+ export interface DecryptOutput {
31
+ identity: Identity;
32
+ iat: string;
33
+ exp?: string;
34
+ refresh: boolean;
35
+ }
36
+ export interface Claim {
37
+ identity: Identity;
38
+ iat: string;
39
+ exp?: string;
40
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../source/types.ts"],"names":[],"mappings":""}
package/cucumber.js CHANGED
@@ -1,6 +1,5 @@
1
1
  module.exports = {
2
2
  default: {
3
- paths: ['features/**/*.feature'],
4
3
  requireModule: ['ts-node/register'],
5
4
  require: ['./features/**/*.ts'],
6
5
  failFast: true
@@ -34,7 +34,7 @@ them).
34
34
  configuration:
35
35
  identity.basic:
36
36
  username:
37
- - ^\S{1,16}$
37
+ - ^\S{1,128}$
38
38
  password:
39
39
  - ^\S{8,32}$
40
40
  ```
@@ -89,9 +89,32 @@ password?: string
89
89
 
90
90
  Access requires basic credentials of the modified Identity or `system:identity:basic` role.
91
91
 
92
+ ## Identity federation (OpenID connect)
93
+
94
+ The `identity.federation` component manages OpenID Connect federated identities.
95
+
96
+ Both implicit identities creation and forced [identity inception](./identity.md) are supported
97
+ as in case with basic credentials. `principal` is also working in the same way.
98
+
99
+ The configuration schema alongside default values is described in the [component manifest](../components/identity.federation/manifest.toa.yaml).
100
+
101
+ No federated tokens are accepted by default until at least one entry is added to the `trust` configuration.
102
+
103
+ ```yaml
104
+ # context.toa.yaml
105
+
106
+ configuration:
107
+ identity.federation:
108
+ trust:
109
+ - issuer: https://token.actions.githubusercontent.com
110
+ audience:
111
+ - https://github.com/tinovyatkin
112
+ - https://github.com/temich
113
+ ```
114
+
92
115
  ## Stateless tokens
93
116
 
94
- The `identity.tokens` component manages statless authentication tokens.
117
+ The `identity.tokens` component manages stateless authentication tokens.
95
118
 
96
119
  These tokens carry the information required to authenticate the Identity and authorize access.
97
120
 
@@ -69,20 +69,20 @@ to [OpenID Connect Core 1.0](https://openid.net/specs/openid-connect-core-1_0.ht
69
69
  Authorization: Bearer eyJhbGciOiJIUzI1...
70
70
  ```
71
71
 
72
- Trusted providers are specified using the `idenity.trust` property within the Exposition annotation.
72
+ Trusted providers are specified using the `identity.federation` property within the configuration annotation.
73
73
 
74
74
  ```yaml
75
75
  # context.toa.yaml
76
76
 
77
- exposition:
78
- identity:
77
+ configuration:
78
+ identity.federation:
79
79
  trust:
80
- - https://accounts.google.com
81
- - https://appleid.apple.com
80
+ - issuer: https://accounts.google.com
81
+ audience:
82
+ - <GOOGLE_CLIENT_ID>
83
+ - issuer: https://appleid.apple.com
82
84
  ```
83
85
 
84
- The example above demonstrates the default list of trusted providers.
85
-
86
86
  ## Identity inception
87
87
 
88
88
  The simplest way to establish a relationship between an Identity and an entity representing a user
@@ -27,7 +27,8 @@ foo: bar
27
27
  ### Multipart types
28
28
 
29
29
  Multipart responses are endoded using content negotiation,
30
- and the `content-type` of the response is set to one of the custom `multipart/` subtypes, corresponding to the type of
30
+ and the `content-type` of the response is set to one of the custom `multipart/` subtypes,
31
+ corresponding to the type of
31
32
  the parts:
32
33
 
33
34
  | Response type | Part type |
@@ -60,3 +61,22 @@ See also:
60
61
  - [Multipart Content-Type](https://www.w3.org/Protocols/rfc1341/7_2_Multipart.html) at W3C
61
62
  - [Content-Type: multipart](https://learn.microsoft.com/en-us/previous-versions/office/developer/exchange-server-2010/aa493937(v=exchg.140))
62
63
  at Microsoft
64
+
65
+ ## CORS
66
+
67
+ [CORS](https://www.w3.org/TR/2020/SPSD-cors-20200602/) is supported,
68
+ credentials, any `origin`, and any request header fields are allowed.
69
+
70
+ The following request headers are allowed:
71
+
72
+ - `accept`
73
+ - `authorization`
74
+ - `content-type`
75
+ - headers used by the [`vary:embed` directive](vary.md#embeddings)
76
+
77
+ The following response headers are exposed:
78
+
79
+ - `authorization`
80
+ - `content-type`
81
+ - `content-length`
82
+ - `etag`
@@ -107,7 +107,7 @@ Operation call will have the following query criteria:
107
107
  criteria: state==hot;type==cool;rank=5
108
108
  ```
109
109
 
110
- ### POST method
110
+ #### POST method
111
111
 
112
112
  `POST` method semantically used to create a new entity instance, that is, calling a Transition
113
113
  without Query.
@@ -0,0 +1,69 @@
1
+ # HTTP request details
2
+
3
+ The `vary` directives family provides the capability to include HTTP request details as input for an
4
+ operation call.
5
+
6
+ ## TL;DR
7
+
8
+ ```yaml
9
+ exposition:
10
+ realms:
11
+ toa: the.toa.io
12
+ /:
13
+ vary:languages: [en, fr]
14
+ GET:
15
+ vary:embed:
16
+ lang: language # predefined embeddings
17
+ realm: realm
18
+ token: :x-access-token # raw header value
19
+ endpoint: dummies.get
20
+ ```
21
+
22
+ ## Embeddings
23
+
24
+ Request parts are embedded into the operation call according to the mapping
25
+ defined by the `vary:embed` directive.
26
+ The keys in the embedding map are the names of the input properties details to be embedded to,
27
+ and the values are the names of the embedding functions.
28
+ If the value is an array, the first non-empty embedding function's result is used.
29
+
30
+ > If a property is already present in the input, the embedded value will overwrite its current
31
+ > value.
32
+
33
+ ### Realm
34
+
35
+ Realm is an identifier of a domain used to access the Exposition.
36
+ The list of domains is defined by the `vary:realms` directive,
37
+ which is a map of realm names to their domain names.
38
+
39
+ The `realm` embedding substitutes the realm identified based on the `host` request header.
40
+
41
+ ### Language
42
+
43
+ The `language` embedding substitutes the most matching language code based on the `accept-language`
44
+ request header and a list of supported languages defined by the `vary:languages` directive, and also
45
+ adds `accept-language` to the `vary` HTTP response header value.
46
+ If neither of the supported languages matches, the first supported language is used.
47
+
48
+ ### Raw header values
49
+
50
+ Keys in the embedding map starting with a semicolon (:) are the names of HTTP request headers whose
51
+ values to be embedded into an operation call.
52
+ The names of these headers are then included in the `vary` HTTP response header
53
+ and [Access-Control-Allow-Headers](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Headers)
54
+ of the [CORS](protocol.md#cors).
55
+
56
+ [Multiple header fields](https://www.w3.org/Protocols/rfc2616/rfc2616-sec4.html#sec4.2) are embedded
57
+ as a comma-separated list.
58
+
59
+ ### Fallbacks
60
+
61
+ If the embedding function is an array, the first non-empty resolved value is used.
62
+
63
+ ```yaml
64
+ vary:embed:
65
+ ip: # fallbacks
66
+ - :CloudFront-Viewer-Address
67
+ - :CF-Connecting-IP
68
+ - :X-Appengine-User-IP
69
+ ```
@@ -0,0 +1,39 @@
1
+ Feature: CORS Support
2
+
3
+ Scenario: Using CORS
4
+ Given the annotation:
5
+ """yaml
6
+ /:
7
+ anonymous: true
8
+ /foo:
9
+ GET:
10
+ dev:stub: Hello
11
+ """
12
+ When the following request is received:
13
+ """
14
+ OPTIONS / HTTP/1.1
15
+ origin: https://hello.world
16
+ """
17
+ Then the following reply is sent:
18
+ """
19
+ 204 No Content
20
+ access-control-allow-origin: https://hello.world
21
+ access-control-allow-methods: GET, POST, PUT, PATCH, DELETE
22
+ access-control-allow-headers: accept, authorization, content-type
23
+ access-control-allow-credentials: true
24
+ access-control-max-age: 3600
25
+ cache-control: public, max-age=3600
26
+ vary: origin
27
+ """
28
+ When the following request is received:
29
+ """
30
+ GET /foo/ HTTP/1.1
31
+ origin: https://hello.world
32
+ """
33
+ Then the following reply is sent:
34
+ """
35
+ 200 OK
36
+ access-control-allow-origin: https://hello.world
37
+ access-control-expose-headers: authorization, content-type, content-length, etag
38
+ vary: origin
39
+ """
@@ -17,7 +17,7 @@ Feature: Identity resource
17
17
  Then the following reply is sent:
18
18
  """
19
19
  200 OK
20
- authorization: Token ${{ token }}
20
+ authorization: Token ${{ User.token }}
21
21
 
22
22
  id: efe3a65ebbee47ed95a73edd911ea328
23
23
  roles:
@@ -27,14 +27,30 @@ Feature: Identity resource
27
27
  When the following request is received:
28
28
  """
29
29
  GET /identity/ HTTP/1.1
30
- authorization: Token ${{ token }}
30
+ authorization: Token ${{ User.token }}
31
31
  accept: application/yaml
32
32
  """
33
33
  Then the following reply is sent:
34
34
  """
35
35
  200 OK
36
36
 
37
- id: efe3a65ebbee47ed95a73edd911ea328
37
+ id: ${{ User.id }}
38
+ roles:
39
+ - developer
40
+ - system:identity
41
+ """
42
+ # checking that it returns the same id for given token
43
+ When the following request is received:
44
+ """
45
+ GET /identity/ HTTP/1.1
46
+ authorization: Token ${{ User.token }}
47
+ accept: application/yaml
48
+ """
49
+ Then the following reply is sent:
50
+ """
51
+ 200 OK
52
+
53
+ id: ${{ User.id }}
38
54
  roles:
39
55
  - developer
40
56
  - system:identity
@@ -0,0 +1,125 @@
1
+ Feature: Identity Federation
2
+
3
+ Background:
4
+ Given the `identity.federation` database is empty
5
+ Given local IDP is running
6
+
7
+
8
+ Scenario: Getting identity for a new user
9
+ Given the `identity.federation` configuration:
10
+ """yaml
11
+ explicit_identity_creation: false
12
+ trust:
13
+ - issuer: http://localhost:44444
14
+ """
15
+ And the IDP token for User is issued
16
+ When the following request is received:
17
+ """
18
+ GET /identity/ HTTP/1.1
19
+ authorization: Bearer ${{ User.id_token }}
20
+ accept: application/yaml
21
+ content-type: application/yaml
22
+ """
23
+ Then the following reply is sent:
24
+ """
25
+ 200 OK
26
+ authorization: Token ${{ User.token }}
27
+
28
+ id: ${{ User.id }}
29
+ roles: []
30
+ scheme: bearer
31
+ """
32
+ # validate token
33
+ When the following request is received:
34
+ """
35
+ GET /identity/ HTTP/1.1
36
+ accept: application/yaml
37
+ authorization: Token ${{ User.token }}
38
+ """
39
+ Then the following reply is sent:
40
+ """
41
+ 200 OK
42
+ id: ${{ User.id }}
43
+ """
44
+ # ensuring identity idemptotency
45
+ When the following request is received:
46
+ """
47
+ GET /identity/ HTTP/1.1
48
+ authorization: Bearer ${{ User.id_token }}
49
+ accept: application/yaml
50
+ """
51
+ Then the following reply is sent:
52
+ """
53
+ 200 OK
54
+ id: ${{ User.id }}
55
+ """
56
+
57
+ Scenario: Creating an Identity using inception with existing credentials
58
+ Given the `identity.federation` configuration:
59
+ """yaml
60
+ trust:
61
+ - issuer: http://localhost:44444
62
+ """
63
+ Given the `users` is running with the following manifest:
64
+ """yaml
65
+ exposition:
66
+ /:
67
+ anonymous: true
68
+ POST:
69
+ incept: id
70
+ endpoint: transit
71
+ """
72
+ And the IDP token for Bill is issued
73
+ When the following request is received:
74
+ # identity inception
75
+ """
76
+ POST /users/ HTTP/1.1
77
+ authorization: Bearer ${{ Bill.id_token }}
78
+ accept: application/yaml
79
+ content-type: application/yaml
80
+
81
+ name: Bill Smith
82
+ """
83
+ Then the following reply is sent:
84
+ """
85
+ 201 Created
86
+ authorization: Token ${{ Bill.token }}
87
+
88
+ id: ${{ Bill.id }}
89
+ """
90
+ # check that both tokens corresponds to the same id
91
+ When the following request is received:
92
+ """
93
+ GET /identity/ HTTP/1.1
94
+ authorization: Token ${{ Bill.token }}
95
+ accept: application/yaml
96
+ """
97
+ Then the following reply is sent:
98
+ """
99
+ 200 OK
100
+ id: ${{ Bill.id }}
101
+ """
102
+ When the following request is received:
103
+ """
104
+ GET /identity/ HTTP/1.1
105
+ authorization: Bearer ${{ Bill.id_token }}
106
+ accept: application/yaml
107
+ """
108
+ Then the following reply is sent:
109
+ """
110
+ 200 OK
111
+ id: ${{ Bill.id }}
112
+ """
113
+ And the following request is received:
114
+ # same credentials
115
+ """
116
+ POST /users/ HTTP/1.1
117
+ authorization: Bearer ${{ Bill.id_token }}
118
+ content-type: text/plain
119
+
120
+ name: Mary Louis
121
+ """
122
+ Then the following reply is sent:
123
+ """
124
+ 403 Forbidden
125
+ """
@@ -248,7 +248,6 @@ Feature: Octets directive family
248
248
  Scenario: Accessing an Entry and the original BLOLB
249
249
  Given the annotation:
250
250
  """yaml
251
- debug: true
252
251
  /:
253
252
  auth:anonymous: true
254
253
  octets:context: octets
@@ -286,6 +285,7 @@ Feature: Octets directive family
286
285
  When the following request is received:
287
286
  """
288
287
  GET /10cf16b458f759e0d617f2f3d83599ff HTTP/1.1
288
+ accept: text/plain
289
289
  """
290
290
  Then the following reply is sent:
291
291
  """
@@ -0,0 +1,65 @@
1
+ Feature: Response
2
+
3
+ Scenario: Content negotiation
4
+ Given the annotation:
5
+ """yaml
6
+ /:
7
+ GET:
8
+ anonymous: true
9
+ dev:stub: hello
10
+ """
11
+ When the following request is received:
12
+ """
13
+ GET / HTTP/1.1
14
+ accept: application/json
15
+ """
16
+ Then the following reply is sent:
17
+ """
18
+ 200 OK
19
+ content-type: application/json
20
+ vary: accept
21
+ """
22
+
23
+ Scenario: Error as YAML
24
+ Given the `echo` is running with the following manifest:
25
+ """yaml
26
+ exposition:
27
+ /:
28
+ GET: error
29
+ """
30
+ When the following request is received:
31
+ """
32
+ GET /echo/ HTTP/1.1
33
+ accept: application/yaml
34
+ """
35
+ Then the following reply is sent:
36
+ """
37
+ 409 Conflict
38
+ content-type: application/yaml
39
+
40
+ code: CODE
41
+ message: message
42
+ """
43
+
44
+ Scenario: Error as MessagePack
45
+ Given the `echo` is running with the following manifest:
46
+ """yaml
47
+ exposition:
48
+ /:
49
+ GET: error
50
+ """
51
+ When the following request is received:
52
+ """
53
+ GET /echo/ HTTP/1.1
54
+ accept: application/msgpack
55
+ """
56
+ Then the following reply is sent:
57
+ """
58
+ 409 Conflict
59
+ content-type: application/msgpack
60
+ """
61
+ And response body contains MessagePack-encoded value:
62
+ """yaml
63
+ code: CODE
64
+ message: message
65
+ """
@@ -0,0 +1,5 @@
1
+ import * as http from '@toa.io/http'
2
+ import { binding } from 'cucumber-tsflow'
3
+
4
+ @binding()
5
+ export class Captures extends http.Captures {}
@@ -1,3 +1,4 @@
1
+ import * as assert from 'node:assert'
1
2
  import { after, binding, given } from 'cucumber-tsflow'
2
3
  import * as boot from '@toa.io/boot'
3
4
  import { timeout } from '@toa.io/generic'
@@ -30,9 +31,13 @@ export class Components {
30
31
  @given('the `{word}` is stopped')
31
32
  public async stop (_?: string): Promise<void> {
32
33
  await this.composition?.disconnect()
34
+
35
+ this.composition = null
33
36
  }
34
37
 
35
38
  private async runComponent (name: string, manifest?: object): Promise<void> {
39
+ assert.ok(this.composition === null, 'Composition is already running')
40
+
36
41
  const path = await this.workspace.addComponent(name, manifest)
37
42
 
38
43
  this.composition = await boot.composition([path])
@@ -18,8 +18,7 @@ export class Gateway {
18
18
  const annotation = parse(yaml)
19
19
 
20
20
  if ('/' in annotation) {
21
- const node = { '/': annotation['/'] }
22
- const tree = syntax.parse(node, shortcuts)
21
+ const tree = syntax.parse(annotation['/'], shortcuts)
23
22
 
24
23
  process.env.TOA_EXPOSITION = encode(tree)
25
24
  }