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

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 (449) 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 +100 -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/operations/list.d.ts +5 -0
  48. package/components/identity.roles/operations/list.js +8 -0
  49. package/components/identity.roles/operations/list.js.map +1 -0
  50. package/components/identity.roles/operations/principal.d.ts +15 -0
  51. package/components/identity.roles/operations/principal.js +8 -0
  52. package/components/identity.roles/operations/principal.js.map +1 -0
  53. package/components/identity.roles/operations/tsconfig.tsbuildinfo +1 -0
  54. package/components/identity.tokens/manifest.toa.yaml +1 -1
  55. package/components/identity.tokens/operations/authenticate.d.ts +9 -0
  56. package/components/identity.tokens/operations/authenticate.js +32 -0
  57. package/components/identity.tokens/operations/authenticate.js.map +1 -0
  58. package/components/identity.tokens/operations/decrypt.d.ts +3 -0
  59. package/components/identity.tokens/operations/decrypt.js +32 -0
  60. package/components/identity.tokens/operations/decrypt.js.map +1 -0
  61. package/components/identity.tokens/operations/encrypt.d.ts +8 -0
  62. package/components/identity.tokens/operations/encrypt.js +22 -0
  63. package/components/identity.tokens/operations/encrypt.js.map +1 -0
  64. package/components/identity.tokens/operations/revoke.d.ts +2 -0
  65. package/components/identity.tokens/operations/revoke.js +8 -0
  66. package/components/identity.tokens/operations/revoke.js.map +1 -0
  67. package/components/identity.tokens/operations/tsconfig.tsbuildinfo +1 -0
  68. package/components/identity.tokens/operations/types.d.ts +40 -0
  69. package/components/identity.tokens/operations/types.js +3 -0
  70. package/components/identity.tokens/operations/types.js.map +1 -0
  71. package/components/octets.storage/manifest.toa.yaml +1 -0
  72. package/components/octets.storage/operations/store.js +2 -2
  73. package/cucumber.js +0 -1
  74. package/documentation/components.md +32 -2
  75. package/documentation/identity.md +14 -7
  76. package/documentation/octets.md +105 -40
  77. package/documentation/protocol.md +21 -1
  78. package/documentation/query.md +1 -1
  79. package/documentation/vary.md +69 -0
  80. package/features/cors.feature +72 -0
  81. package/features/identity.feature +19 -3
  82. package/features/identity.federation.feature +155 -0
  83. package/features/octets.entries.feature +121 -0
  84. package/features/octets.feature +2 -28
  85. package/features/octets.meta.feature +65 -0
  86. package/features/octets.workflows.feature +176 -4
  87. package/features/response.feature +65 -0
  88. package/features/routes.feature +37 -0
  89. package/features/steps/Captures.ts +6 -0
  90. package/features/steps/Components.ts +18 -6
  91. package/features/steps/Gateway.ts +1 -2
  92. package/features/steps/HTTP.ts +40 -87
  93. package/features/steps/IdP.ts +149 -0
  94. package/features/steps/Parameters.ts +8 -2
  95. package/features/steps/Workspace.ts +5 -7
  96. package/features/steps/components/echo/operations/error.js +11 -0
  97. package/features/steps/components/octets.tester/manifest.toa.yaml +3 -0
  98. package/features/steps/components/octets.tester/operations/concat.js +7 -0
  99. package/features/steps/components/octets.tester/operations/echo.js +7 -0
  100. package/features/steps/components/users/manifest.toa.yaml +3 -0
  101. package/features/steps/components/users.properties/manifest.toa.yaml +13 -0
  102. package/features/steps/tsconfig.json +1 -1
  103. package/features/vary.feature +150 -0
  104. package/package.json +17 -18
  105. package/schemas/octets/delete.cos.yaml +2 -1
  106. package/schemas/octets/list.cos.yaml +2 -1
  107. package/schemas/octets/workflow.cos.yaml +12 -0
  108. package/source/Directive.test.ts +8 -2
  109. package/source/Directive.ts +19 -16
  110. package/source/Factory.ts +8 -7
  111. package/source/Gateway.ts +22 -8
  112. package/source/HTTP/Server.fixtures.ts +0 -1
  113. package/source/HTTP/Server.test.ts +61 -134
  114. package/source/HTTP/Server.ts +91 -47
  115. package/source/HTTP/formats/msgpack.ts +9 -6
  116. package/source/HTTP/formats/text.ts +1 -1
  117. package/source/HTTP/formats/yaml.ts +1 -1
  118. package/source/HTTP/messages.ts +15 -3
  119. package/source/Interception.ts +24 -0
  120. package/source/RTD/Directives.ts +2 -2
  121. package/source/RTD/Tree.ts +3 -0
  122. package/source/RTD/syntax/parse.ts +6 -6
  123. package/source/RTD/syntax/types.ts +1 -1
  124. package/source/deployment.ts +1 -2
  125. package/source/directives/auth/{Family.ts → Authorization.ts} +29 -33
  126. package/source/directives/auth/Incept.ts +1 -1
  127. package/source/directives/auth/Rule.ts +2 -2
  128. package/source/directives/auth/index.ts +2 -2
  129. package/source/directives/auth/schemes.ts +2 -1
  130. package/source/directives/auth/types.ts +9 -6
  131. package/source/directives/cache/{Family.ts → Cache.ts} +4 -5
  132. package/source/directives/cache/index.ts +2 -2
  133. package/source/directives/cache/types.ts +1 -1
  134. package/source/directives/cors/CORS.ts +54 -0
  135. package/source/directives/cors/index.ts +3 -0
  136. package/source/directives/dev/{Family.ts → Development.ts} +3 -4
  137. package/source/directives/dev/Stub.ts +4 -4
  138. package/source/directives/dev/Throw.ts +4 -4
  139. package/source/directives/dev/index.ts +2 -2
  140. package/source/directives/dev/types.ts +1 -1
  141. package/source/directives/index.ts +10 -6
  142. package/source/directives/octets/Context.ts +1 -1
  143. package/source/directives/octets/Delete.ts +50 -9
  144. package/source/directives/octets/Fetch.ts +18 -19
  145. package/source/directives/octets/List.ts +37 -7
  146. package/source/directives/octets/{Family.ts → Octets.ts} +10 -7
  147. package/source/directives/octets/Permute.ts +3 -3
  148. package/source/directives/octets/Store.ts +57 -99
  149. package/source/directives/octets/Workflow.ts +41 -0
  150. package/source/directives/octets/index.ts +2 -2
  151. package/source/directives/octets/schemas.test.ts +21 -0
  152. package/source/directives/octets/schemas.ts +13 -6
  153. package/source/directives/octets/types.ts +4 -3
  154. package/source/directives/octets/workflows/Execution.ts +76 -0
  155. package/source/directives/octets/workflows/Workflow.ts +37 -0
  156. package/source/directives/octets/workflows/index.ts +1 -0
  157. package/source/directives/vary/Directive.ts +6 -0
  158. package/source/directives/vary/Embed.ts +62 -0
  159. package/source/directives/vary/Properties.ts +17 -0
  160. package/source/directives/vary/Vary.ts +48 -0
  161. package/source/directives/vary/embeddings/Embedding.ts +6 -0
  162. package/source/directives/vary/embeddings/Header.ts +30 -0
  163. package/source/directives/vary/embeddings/Language.ts +31 -0
  164. package/source/directives/vary/embeddings/index.ts +11 -0
  165. package/source/directives/vary/index.ts +3 -0
  166. package/source/io.ts +4 -0
  167. package/source/manifest.test.ts +6 -14
  168. package/source/manifest.ts +9 -6
  169. package/source/schemas.ts +7 -3
  170. package/transpiled/Annotation.d.ts +7 -0
  171. package/transpiled/Annotation.js +3 -0
  172. package/transpiled/Annotation.js.map +1 -0
  173. package/transpiled/Branch.d.ts +7 -0
  174. package/transpiled/Branch.js +3 -0
  175. package/transpiled/Branch.js.map +1 -0
  176. package/transpiled/Composition.d.ts +14 -0
  177. package/transpiled/Composition.js +43 -0
  178. package/transpiled/Composition.js.map +1 -0
  179. package/transpiled/Context.d.ts +5 -0
  180. package/transpiled/Context.js +3 -0
  181. package/transpiled/Context.js.map +1 -0
  182. package/transpiled/Directive.d.ts +31 -0
  183. package/transpiled/Directive.js +78 -0
  184. package/transpiled/Directive.js.map +1 -0
  185. package/transpiled/Endpoint.d.ts +20 -0
  186. package/transpiled/Endpoint.js +45 -0
  187. package/transpiled/Endpoint.js.map +1 -0
  188. package/transpiled/Factory.d.ts +9 -0
  189. package/transpiled/Factory.js +67 -0
  190. package/transpiled/Factory.js.map +1 -0
  191. package/transpiled/Gateway.d.ts +22 -0
  192. package/transpiled/Gateway.js +102 -0
  193. package/transpiled/Gateway.js.map +1 -0
  194. package/transpiled/HTTP/Server.d.ts +24 -0
  195. package/transpiled/HTTP/Server.fixtures.d.ts +10 -0
  196. package/transpiled/HTTP/Server.fixtures.js +31 -0
  197. package/transpiled/HTTP/Server.fixtures.js.map +1 -0
  198. package/transpiled/HTTP/Server.js +149 -0
  199. package/transpiled/HTTP/Server.js.map +1 -0
  200. package/transpiled/HTTP/exceptions.d.ts +34 -0
  201. package/transpiled/HTTP/exceptions.js +71 -0
  202. package/transpiled/HTTP/exceptions.js.map +1 -0
  203. package/transpiled/HTTP/formats/index.d.ts +10 -0
  204. package/transpiled/HTTP/formats/index.js +38 -0
  205. package/transpiled/HTTP/formats/index.js.map +1 -0
  206. package/transpiled/HTTP/formats/json.d.ts +6 -0
  207. package/transpiled/HTTP/formats/json.js +17 -0
  208. package/transpiled/HTTP/formats/json.js.map +1 -0
  209. package/transpiled/HTTP/formats/msgpack.d.ts +6 -0
  210. package/transpiled/HTTP/formats/msgpack.js +17 -0
  211. package/transpiled/HTTP/formats/msgpack.js.map +1 -0
  212. package/transpiled/HTTP/formats/text.d.ts +8 -0
  213. package/transpiled/HTTP/formats/text.js +15 -0
  214. package/transpiled/HTTP/formats/text.js.map +1 -0
  215. package/transpiled/HTTP/formats/yaml.d.ts +6 -0
  216. package/transpiled/HTTP/formats/yaml.js +41 -0
  217. package/transpiled/HTTP/formats/yaml.js.map +1 -0
  218. package/transpiled/HTTP/index.d.ts +3 -0
  219. package/transpiled/HTTP/index.js +20 -0
  220. package/transpiled/HTTP/index.js.map +1 -0
  221. package/transpiled/HTTP/messages.d.ts +33 -0
  222. package/transpiled/HTTP/messages.js +75 -0
  223. package/transpiled/HTTP/messages.js.map +1 -0
  224. package/transpiled/Interception.d.ts +9 -0
  225. package/transpiled/Interception.js +19 -0
  226. package/transpiled/Interception.js.map +1 -0
  227. package/transpiled/Mapping.d.ts +8 -0
  228. package/transpiled/Mapping.js +38 -0
  229. package/transpiled/Mapping.js.map +1 -0
  230. package/transpiled/Query.d.ts +13 -0
  231. package/transpiled/Query.js +107 -0
  232. package/transpiled/Query.js.map +1 -0
  233. package/transpiled/RTD/Context.d.ts +11 -0
  234. package/transpiled/RTD/Context.js +3 -0
  235. package/transpiled/RTD/Context.js.map +1 -0
  236. package/transpiled/RTD/Directives.d.ts +7 -0
  237. package/transpiled/RTD/Directives.js +3 -0
  238. package/transpiled/RTD/Directives.js.map +1 -0
  239. package/transpiled/RTD/Endpoint.d.ts +9 -0
  240. package/transpiled/RTD/Endpoint.js +3 -0
  241. package/transpiled/RTD/Endpoint.js.map +1 -0
  242. package/transpiled/RTD/Match.d.ts +11 -0
  243. package/transpiled/RTD/Match.js +3 -0
  244. package/transpiled/RTD/Match.js.map +1 -0
  245. package/transpiled/RTD/Method.d.ts +9 -0
  246. package/transpiled/RTD/Method.js +16 -0
  247. package/transpiled/RTD/Method.js.map +1 -0
  248. package/transpiled/RTD/Node.d.ts +21 -0
  249. package/transpiled/RTD/Node.js +61 -0
  250. package/transpiled/RTD/Node.js.map +1 -0
  251. package/transpiled/RTD/Route.d.ts +14 -0
  252. package/transpiled/RTD/Route.js +49 -0
  253. package/transpiled/RTD/Route.js.map +1 -0
  254. package/transpiled/RTD/Tree.d.ts +14 -0
  255. package/transpiled/RTD/Tree.js +42 -0
  256. package/transpiled/RTD/Tree.js.map +1 -0
  257. package/transpiled/RTD/factory.d.ts +6 -0
  258. package/transpiled/RTD/factory.js +36 -0
  259. package/transpiled/RTD/factory.js.map +1 -0
  260. package/transpiled/RTD/index.d.ts +8 -0
  261. package/transpiled/RTD/index.js +38 -0
  262. package/transpiled/RTD/index.js.map +1 -0
  263. package/transpiled/RTD/segment.d.ts +8 -0
  264. package/transpiled/RTD/segment.js +25 -0
  265. package/transpiled/RTD/segment.js.map +1 -0
  266. package/transpiled/RTD/syntax/index.d.ts +2 -0
  267. package/transpiled/RTD/syntax/index.js +19 -0
  268. package/transpiled/RTD/syntax/index.js.map +1 -0
  269. package/transpiled/RTD/syntax/parse.d.ts +4 -0
  270. package/transpiled/RTD/syntax/parse.js +128 -0
  271. package/transpiled/RTD/syntax/parse.js.map +1 -0
  272. package/transpiled/RTD/syntax/types.d.ts +41 -0
  273. package/transpiled/RTD/syntax/types.js +5 -0
  274. package/transpiled/RTD/syntax/types.js.map +1 -0
  275. package/transpiled/Remotes.d.ts +9 -0
  276. package/transpiled/Remotes.js +25 -0
  277. package/transpiled/Remotes.js.map +1 -0
  278. package/transpiled/Tenant.d.ts +13 -0
  279. package/transpiled/Tenant.js +34 -0
  280. package/transpiled/Tenant.js.map +1 -0
  281. package/transpiled/deployment.d.ts +3 -0
  282. package/transpiled/deployment.js +66 -0
  283. package/transpiled/deployment.js.map +1 -0
  284. package/transpiled/directives/auth/Anonymous.d.ts +6 -0
  285. package/transpiled/directives/auth/Anonymous.js +17 -0
  286. package/transpiled/directives/auth/Anonymous.js.map +1 -0
  287. package/transpiled/directives/auth/Authorization.d.ts +20 -0
  288. package/transpiled/directives/auth/Authorization.js +125 -0
  289. package/transpiled/directives/auth/Authorization.js.map +1 -0
  290. package/transpiled/directives/auth/Echo.d.ts +6 -0
  291. package/transpiled/directives/auth/Echo.js +13 -0
  292. package/transpiled/directives/auth/Echo.js.map +1 -0
  293. package/transpiled/directives/auth/Id.d.ts +7 -0
  294. package/transpiled/directives/auth/Id.js +17 -0
  295. package/transpiled/directives/auth/Id.js.map +1 -0
  296. package/transpiled/directives/auth/Incept.d.ts +10 -0
  297. package/transpiled/directives/auth/Incept.js +58 -0
  298. package/transpiled/directives/auth/Incept.js.map +1 -0
  299. package/transpiled/directives/auth/Role.d.ts +11 -0
  300. package/transpiled/directives/auth/Role.js +44 -0
  301. package/transpiled/directives/auth/Role.js.map +1 -0
  302. package/transpiled/directives/auth/Rule.d.ts +9 -0
  303. package/transpiled/directives/auth/Rule.js +22 -0
  304. package/transpiled/directives/auth/Rule.js.map +1 -0
  305. package/transpiled/directives/auth/Scheme.d.ts +7 -0
  306. package/transpiled/directives/auth/Scheme.js +47 -0
  307. package/transpiled/directives/auth/Scheme.js.map +1 -0
  308. package/transpiled/directives/auth/index.d.ts +2 -0
  309. package/transpiled/directives/auth/index.js +6 -0
  310. package/transpiled/directives/auth/index.js.map +1 -0
  311. package/transpiled/directives/auth/schemes.d.ts +3 -0
  312. package/transpiled/directives/auth/schemes.js +10 -0
  313. package/transpiled/directives/auth/schemes.js.map +1 -0
  314. package/transpiled/directives/auth/split.d.ts +2 -0
  315. package/transpiled/directives/auth/split.js +38 -0
  316. package/transpiled/directives/auth/split.js.map +1 -0
  317. package/transpiled/directives/auth/types.d.ts +31 -0
  318. package/transpiled/directives/auth/types.js +3 -0
  319. package/transpiled/directives/auth/types.js.map +1 -0
  320. package/transpiled/directives/cache/Cache.d.ts +11 -0
  321. package/transpiled/directives/cache/Cache.js +28 -0
  322. package/transpiled/directives/cache/Cache.js.map +1 -0
  323. package/transpiled/directives/cache/Control.d.ts +9 -0
  324. package/transpiled/directives/cache/Control.js +42 -0
  325. package/transpiled/directives/cache/Control.js.map +1 -0
  326. package/transpiled/directives/cache/Exact.d.ts +4 -0
  327. package/transpiled/directives/cache/Exact.js +11 -0
  328. package/transpiled/directives/cache/Exact.js.map +1 -0
  329. package/transpiled/directives/cache/index.d.ts +2 -0
  330. package/transpiled/directives/cache/index.js +6 -0
  331. package/transpiled/directives/cache/index.js.map +1 -0
  332. package/transpiled/directives/cache/types.d.ts +7 -0
  333. package/transpiled/directives/cache/types.js +3 -0
  334. package/transpiled/directives/cache/types.js.map +1 -0
  335. package/transpiled/directives/cors/CORS.d.ts +11 -0
  336. package/transpiled/directives/cors/CORS.js +44 -0
  337. package/transpiled/directives/cors/CORS.js.map +1 -0
  338. package/transpiled/directives/cors/index.d.ts +2 -0
  339. package/transpiled/directives/cors/index.js +6 -0
  340. package/transpiled/directives/cors/index.js.map +1 -0
  341. package/transpiled/directives/dev/Development.d.ts +9 -0
  342. package/transpiled/directives/dev/Development.js +29 -0
  343. package/transpiled/directives/dev/Development.js.map +1 -0
  344. package/transpiled/directives/dev/Stub.d.ts +7 -0
  345. package/transpiled/directives/dev/Stub.js +14 -0
  346. package/transpiled/directives/dev/Stub.js.map +1 -0
  347. package/transpiled/directives/dev/Throw.d.ts +7 -0
  348. package/transpiled/directives/dev/Throw.js +14 -0
  349. package/transpiled/directives/dev/Throw.js.map +1 -0
  350. package/transpiled/directives/dev/index.d.ts +2 -0
  351. package/transpiled/directives/dev/index.js +6 -0
  352. package/transpiled/directives/dev/index.js.map +1 -0
  353. package/transpiled/directives/dev/types.d.ts +4 -0
  354. package/transpiled/directives/dev/types.js +3 -0
  355. package/transpiled/directives/dev/types.js.map +1 -0
  356. package/transpiled/directives/index.d.ts +4 -0
  357. package/transpiled/directives/index.js +12 -0
  358. package/transpiled/directives/index.js.map +1 -0
  359. package/transpiled/directives/octets/Context.d.ts +8 -0
  360. package/transpiled/directives/octets/Context.js +40 -0
  361. package/transpiled/directives/octets/Context.js.map +1 -0
  362. package/transpiled/directives/octets/Delete.d.ts +19 -0
  363. package/transpiled/directives/octets/Delete.js +72 -0
  364. package/transpiled/directives/octets/Delete.js.map +1 -0
  365. package/transpiled/directives/octets/Fetch.d.ts +17 -0
  366. package/transpiled/directives/octets/Fetch.js +76 -0
  367. package/transpiled/directives/octets/Fetch.js.map +1 -0
  368. package/transpiled/directives/octets/List.d.ts +15 -0
  369. package/transpiled/directives/octets/List.js +65 -0
  370. package/transpiled/directives/octets/List.js.map +1 -0
  371. package/transpiled/directives/octets/Octets.d.ts +12 -0
  372. package/transpiled/directives/octets/Octets.js +53 -0
  373. package/transpiled/directives/octets/Octets.js.map +1 -0
  374. package/transpiled/directives/octets/Permute.d.ts +10 -0
  375. package/transpiled/directives/octets/Permute.js +51 -0
  376. package/transpiled/directives/octets/Permute.js.map +1 -0
  377. package/transpiled/directives/octets/Store.d.ts +23 -0
  378. package/transpiled/directives/octets/Store.js +88 -0
  379. package/transpiled/directives/octets/Store.js.map +1 -0
  380. package/transpiled/directives/octets/Workflow.d.ts +14 -0
  381. package/transpiled/directives/octets/Workflow.js +52 -0
  382. package/transpiled/directives/octets/Workflow.js.map +1 -0
  383. package/transpiled/directives/octets/index.d.ts +2 -0
  384. package/transpiled/directives/octets/index.js +6 -0
  385. package/transpiled/directives/octets/index.js.map +1 -0
  386. package/transpiled/directives/octets/schemas.d.ts +13 -0
  387. package/transpiled/directives/octets/schemas.js +18 -0
  388. package/transpiled/directives/octets/schemas.js.map +1 -0
  389. package/transpiled/directives/octets/types.d.ts +10 -0
  390. package/transpiled/directives/octets/types.js +3 -0
  391. package/transpiled/directives/octets/types.js.map +1 -0
  392. package/transpiled/directives/octets/workflows/Execution.d.ts +25 -0
  393. package/transpiled/directives/octets/workflows/Execution.js +54 -0
  394. package/transpiled/directives/octets/workflows/Execution.js.map +1 -0
  395. package/transpiled/directives/octets/workflows/Workflow.d.ts +12 -0
  396. package/transpiled/directives/octets/workflows/Workflow.js +25 -0
  397. package/transpiled/directives/octets/workflows/Workflow.js.map +1 -0
  398. package/transpiled/directives/octets/workflows/index.d.ts +1 -0
  399. package/transpiled/directives/octets/workflows/index.js +6 -0
  400. package/transpiled/directives/octets/workflows/index.js.map +1 -0
  401. package/transpiled/directives/vary/Directive.d.ts +5 -0
  402. package/transpiled/directives/vary/Directive.js +3 -0
  403. package/transpiled/directives/vary/Directive.js.map +1 -0
  404. package/transpiled/directives/vary/Embed.d.ts +10 -0
  405. package/transpiled/directives/vary/Embed.js +49 -0
  406. package/transpiled/directives/vary/Embed.js.map +1 -0
  407. package/transpiled/directives/vary/Properties.d.ts +9 -0
  408. package/transpiled/directives/vary/Properties.js +16 -0
  409. package/transpiled/directives/vary/Properties.js.map +1 -0
  410. package/transpiled/directives/vary/Vary.d.ts +10 -0
  411. package/transpiled/directives/vary/Vary.js +36 -0
  412. package/transpiled/directives/vary/Vary.js.map +1 -0
  413. package/transpiled/directives/vary/embeddings/Embedding.d.ts +5 -0
  414. package/transpiled/directives/vary/embeddings/Embedding.js +3 -0
  415. package/transpiled/directives/vary/embeddings/Embedding.js.map +1 -0
  416. package/transpiled/directives/vary/embeddings/Header.d.ts +7 -0
  417. package/transpiled/directives/vary/embeddings/Header.js +26 -0
  418. package/transpiled/directives/vary/embeddings/Header.js.map +1 -0
  419. package/transpiled/directives/vary/embeddings/Language.d.ts +7 -0
  420. package/transpiled/directives/vary/embeddings/Language.js +28 -0
  421. package/transpiled/directives/vary/embeddings/Language.js.map +1 -0
  422. package/transpiled/directives/vary/embeddings/index.d.ts +5 -0
  423. package/transpiled/directives/vary/embeddings/index.js +10 -0
  424. package/transpiled/directives/vary/embeddings/index.js.map +1 -0
  425. package/transpiled/directives/vary/index.d.ts +2 -0
  426. package/transpiled/directives/vary/index.js +6 -0
  427. package/transpiled/directives/vary/index.js.map +1 -0
  428. package/transpiled/discovery.d.ts +1 -0
  429. package/transpiled/discovery.js +3 -0
  430. package/transpiled/discovery.js.map +1 -0
  431. package/transpiled/exceptions.d.ts +2 -0
  432. package/transpiled/exceptions.js +39 -0
  433. package/transpiled/exceptions.js.map +1 -0
  434. package/transpiled/index.d.ts +5 -0
  435. package/transpiled/index.js +12 -0
  436. package/transpiled/index.js.map +1 -0
  437. package/transpiled/io.d.ts +3 -0
  438. package/transpiled/io.js +3 -0
  439. package/transpiled/io.js.map +1 -0
  440. package/transpiled/manifest.d.ts +3 -0
  441. package/transpiled/manifest.js +66 -0
  442. package/transpiled/manifest.js.map +1 -0
  443. package/transpiled/root.d.ts +2 -0
  444. package/transpiled/root.js +39 -0
  445. package/transpiled/root.js.map +1 -0
  446. package/transpiled/schemas.d.ts +7 -0
  447. package/transpiled/schemas.js +14 -0
  448. package/transpiled/schemas.js.map +1 -0
  449. package/transpiled/tsconfig.tsbuildinfo +1 -0
@@ -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'
@@ -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
@@ -9,7 +9,10 @@ operations:
9
9
  storage*: string
10
10
  path*: string
11
11
  entry: object
12
+ parameters: object
12
13
  bar: *operation
13
14
  baz: *operation
14
15
  err: *operation
16
+ echo: *operation
17
+ concat: *operation
15
18
  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
@@ -9,3 +9,6 @@ operations:
9
9
  concurrency: retry
10
10
  input:
11
11
  name*: ~
12
+ create:
13
+ query: false
14
+ forward: transit
@@ -0,0 +1,13 @@
1
+ namespace: users
2
+ name: properties
3
+
4
+ entity:
5
+ schema:
6
+ newbie: false
7
+ dependent: true
8
+
9
+ operations:
10
+ transit:
11
+ concurrency: retry
12
+ input:
13
+ 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,150 @@
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
+ vary:languages: [en, fr]
9
+ GET:
10
+ vary:embed:
11
+ name: language # embed resolved language code as a `name` property of the operation input
12
+ endpoint: compute
13
+ """
14
+ When the following request is received:
15
+ """
16
+ GET /echo/ HTTP/1.1
17
+ accept: application/yaml
18
+ accept-language: <accept>
19
+ """
20
+ Then the following reply is sent:
21
+ """
22
+ 200 OK
23
+ content-type: application/yaml
24
+ content-language: <result>
25
+ vary: accept-language, accept
26
+
27
+ Hello <result>
28
+ """
29
+ Examples:
30
+ | accept | result |
31
+ | en | en |
32
+ | en_US | en |
33
+ | fr | fr |
34
+ | sw | en |
35
+
36
+ Scenario: Listing languages on the root
37
+ Given the annotation:
38
+ """
39
+ /:
40
+ vary:languages: [en, fr]
41
+ """
42
+ And the `echo` is running with the following manifest:
43
+ """yaml
44
+ exposition:
45
+ /:
46
+ GET:
47
+ anonymous: true
48
+ vary:embed:
49
+ name: language
50
+ endpoint: compute
51
+ """
52
+ When the following request is received:
53
+ """
54
+ GET /echo/ HTTP/1.1
55
+ accept: application/yaml
56
+ accept-language: fr
57
+ """
58
+ Then the following reply is sent:
59
+ """
60
+ 200 OK
61
+ content-type: application/yaml
62
+ content-language: fr
63
+ """
64
+
65
+
66
+ Scenario: Embedding a value of an arbitrary header
67
+ Given the `echo` is running with the following manifest:
68
+ """yaml
69
+ exposition:
70
+ /:
71
+ GET:
72
+ vary:embed:
73
+ name: :foo
74
+ endpoint: compute
75
+ """
76
+ When the following request is received:
77
+ """
78
+ GET /echo/ HTTP/1.1
79
+ accept: application/yaml
80
+ foo: bar
81
+ """
82
+ Then the following reply is sent:
83
+ """
84
+ 200 OK
85
+ content-type: application/yaml
86
+ vary: foo, accept
87
+
88
+ Hello bar
89
+ """
90
+
91
+ Scenario Outline: Embedding a value from the list of options
92
+ Given the `echo` is running with the following manifest:
93
+ """yaml
94
+ exposition:
95
+ /:
96
+ vary:languages: [en, fr]
97
+ GET:
98
+ vary:embed:
99
+ name:
100
+ - :foo
101
+ - :bar
102
+ - language
103
+ endpoint: compute
104
+ """
105
+ When the following request is received:
106
+ """
107
+ GET /echo/ HTTP/1.1
108
+ accept: application/yaml
109
+ <header>: <value>
110
+ """
111
+ Then the following reply is sent:
112
+ """
113
+ 200 OK
114
+ content-type: application/yaml
115
+ vary: <header>, accept
116
+
117
+ Hello <value>
118
+ """
119
+ Examples:
120
+ | header | value |
121
+ | foo | bar |
122
+ | bar | baz |
123
+ | accept-language | en |
124
+
125
+ Scenario: Adding headers used by defined embeddings to CORS permissions
126
+ Given the `echo` is running with the following manifest:
127
+ """yaml
128
+ exposition:
129
+ /:
130
+ vary:languages: [en, fr]
131
+ GET:
132
+ vary:embed:
133
+ name:
134
+ - language
135
+ - :foo
136
+ - :FOO
137
+ - :bar
138
+ endpoint: compute
139
+ """
140
+ When the following request is received:
141
+ """
142
+ OPTIONS / HTTP/1.1
143
+ origin: http://example.com
144
+ access-control-request-headers: whatever
145
+ """
146
+ Then the following reply is sent:
147
+ """
148
+ 204 No Content
149
+ access-control-allow-headers: accept, authorization, content-type, accept-language, foo, bar
150
+ """
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.3",
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,16 @@
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.3",
21
+ "@toa.io/generic": "1.0.0-alpha.3",
22
+ "@toa.io/schemas": "1.0.0-alpha.3",
23
+ "@toa.io/streams": "1.0.0-alpha.3",
25
24
  "bcryptjs": "2.4.3",
26
- "cors": "2.8.5",
27
25
  "error-value": "0.3.0",
28
26
  "express": "4.18.2",
29
27
  "js-yaml": "4.1.0",
30
28
  "matchacho": "0.3.5",
31
- "msgpackr": "1.9.5",
29
+ "msgpackr": "1.10.1",
32
30
  "negotiator": "0.6.3",
33
31
  "paseto": "3.1.4"
34
32
  },
@@ -38,20 +36,21 @@
38
36
  },
39
37
  "scripts": {
40
38
  "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"
39
+ "transpile": "tsc && npm run transpile:basic && npm run transpile:tokens && npm run transpile:roles && npm run transpile:federation",
40
+ "transpile:basic": "tsc -p ./components/identity.basic",
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
+ "transpile:tokens": "tsc -p ./components/identity.tokens",
44
+ "transpile:roles": "tsc -p ./components/identity.roles",
45
+ "features": "cucumber-js"
46
46
  },
47
47
  "devDependencies": {
48
- "@toa.io/extensions.storages": "1.0.0-alpha.0",
48
+ "@toa.io/agent": "1.0.0-alpha.3",
49
+ "@toa.io/extensions.storages": "1.0.0-alpha.3",
49
50
  "@types/bcryptjs": "2.4.3",
50
51
  "@types/cors": "2.8.13",
51
52
  "@types/express": "4.17.17",
52
- "@types/fs-extra": "11.0.4",
53
- "@types/negotiator": "0.6.1",
54
- "fs-extra": "11.1.1"
53
+ "@types/negotiator": "0.6.1"
55
54
  },
56
- "gitHead": "06c64546f6292cc07c52f74b31415101037f7616"
55
+ "gitHead": "e36ac7871fc14d15863aaf8f9bbdeace8bdfa9f0"
57
56
  }
@@ -1 +1,2 @@
1
- ~
1
+ workflow+: <string>
2
+ _: true
@@ -1 +1,2 @@
1
- ~
1
+ meta: boolean
2
+ _: true
@@ -0,0 +1,12 @@
1
+ definitions:
2
+ unit:
3
+ type: object
4
+ patternProperties:
5
+ ^[a-zA-Z0-9_]+$:
6
+ type: string
7
+
8
+ oneOf:
9
+ - $ref: '#/definitions/unit'
10
+ - type: array
11
+ items:
12
+ $ref: '#/definitions/unit'
@@ -1,10 +1,11 @@
1
+ import assert from 'node:assert'
1
2
  import { generate } from 'randomstring'
2
3
  import { DirectivesFactory, type Family } from './Directive'
3
4
  import { type syntax } from './RTD'
4
5
  import { type IncomingMessage } from './HTTP'
5
6
  import { type Remotes } from './Remotes'
6
7
 
7
- const families: Array<jest.MockedObject<Family>> = [
8
+ const families: Array<jest.MockedObjectDeep<Family>> = [
8
9
  {
9
10
  name: 'foo',
10
11
  mandatory: true,
@@ -26,6 +27,9 @@ let factory: DirectivesFactory
26
27
  beforeEach(() => {
27
28
  jest.clearAllMocks()
28
29
 
30
+ assert.ok(families[0].preflight !== undefined)
31
+ assert.ok(families[1].preflight !== undefined)
32
+
29
33
  families[0].preflight.mockImplementation(() => null)
30
34
  families[1].preflight.mockImplementation(() => null)
31
35
  factory = new DirectivesFactory(families, {} as unknown as Remotes)
@@ -61,7 +65,7 @@ it('should throw error if directive family is not found', async () => {
61
65
  }
62
66
 
63
67
  expect(() => factory.create([declaration]))
64
- .toThrowError(`Directive family '${declaration.family}' not found.`)
68
+ .toThrowError(`Directive family '${declaration.family}' is not found.`)
65
69
  })
66
70
 
67
71
  it('should apply directive', async () => {
@@ -77,6 +81,8 @@ it('should apply directive', async () => {
77
81
 
78
82
  await directives.preflight(request, [])
79
83
 
84
+ assert.ok(families[0].preflight !== undefined)
85
+
80
86
  expect(families[0].preflight.mock.calls[0][0]).toStrictEqual([directive])
81
87
  expect(families[0].preflight.mock.calls[0][1]).toEqual(request)
82
88
  })
@@ -1,17 +1,21 @@
1
- import { type IncomingMessage, type OutgoingMessage } from './HTTP'
2
- import { type Remotes } from './Remotes'
1
+ import type { IncomingMessage, OutgoingMessage } from './HTTP'
2
+ import type { Remotes } from './Remotes'
3
+ import type { Output } from './io'
3
4
  import type * as RTD from './RTD'
4
5
 
5
6
  export class Directives implements RTD.Directives<Directives> {
6
- private readonly directives: DirectiveSet[]
7
+ private readonly sets: DirectiveSet[]
7
8
 
8
- public constructor (directives: DirectiveSet[]) {
9
- this.directives = directives
9
+ public constructor (sets: DirectiveSet[]) {
10
+ this.sets = sets
10
11
  }
11
12
 
12
13
  public async preflight (request: IncomingMessage, parameters: RTD.Parameter[]): Promise<Output> {
13
- for (const directive of this.directives) {
14
- const output = await directive.family.preflight(directive.directives, request, parameters)
14
+ for (const set of this.sets) {
15
+ if (set.family.preflight === undefined)
16
+ continue
17
+
18
+ const output = await set.family.preflight(set.directives, request, parameters)
15
19
 
16
20
  if (output !== null) {
17
21
  await this.settle(request, output)
@@ -24,13 +28,13 @@ export class Directives implements RTD.Directives<Directives> {
24
28
  }
25
29
 
26
30
  public async settle (request: IncomingMessage, response: OutgoingMessage): Promise<void> {
27
- for (const directive of this.directives)
28
- if (directive.family.settle !== undefined)
29
- await directive.family.settle(directive.directives, request, response)
31
+ for (const set of this.sets)
32
+ if (set.family.settle !== undefined)
33
+ await set.family.settle(set.directives, request, response)
30
34
  }
31
35
 
32
36
  public merge (directives: Directives): void {
33
- this.directives.push(...directives.directives)
37
+ this.sets.push(...directives.sets)
34
38
  }
35
39
  }
36
40
 
@@ -61,7 +65,7 @@ export class DirectivesFactory implements RTD.DirectivesFactory<Directives> {
61
65
  const family = this.families[declaration.family]
62
66
 
63
67
  if (family === undefined)
64
- throw new Error(`Directive family '${declaration.family}' not found.`)
68
+ throw new Error(`Directive family '${declaration.family}' is not found.`)
65
69
 
66
70
  const directive = family.create(declaration.name, declaration.value, this.remtoes)
67
71
 
@@ -100,9 +104,11 @@ export interface Family<TDirective = any, TExtension = any> {
100
104
  readonly name: string
101
105
  readonly mandatory: boolean
102
106
 
107
+ // produce: (declarations: RTD.syntax.Directive[], remotes: Remotes) => TDirective[]
108
+
103
109
  create: (name: string, value: any, remotes: Remotes) => TDirective
104
110
 
105
- preflight: (directives: TDirective[],
111
+ preflight?: (directives: TDirective[],
106
112
  request: IncomingMessage & TExtension,
107
113
  parameters: RTD.Parameter[]) => Output | Promise<Output>
108
114
 
@@ -115,6 +121,3 @@ interface DirectiveSet {
115
121
  family: Family
116
122
  directives: any[]
117
123
  }
118
-
119
- export type Input = IncomingMessage
120
- export type Output = OutgoingMessage | null
package/source/Factory.ts CHANGED
@@ -4,19 +4,18 @@ import { Remotes } from './Remotes'
4
4
  import { Tree, syntax } from './RTD'
5
5
  import { Server } from './HTTP'
6
6
  import { type Endpoint, EndpointsFactory } from './Endpoint'
7
- import * as directives from './directives'
8
- import { type Directives, DirectivesFactory, type Family } from './Directive'
7
+ import { families, interceptors } from './directives'
8
+ import { type Directives, DirectivesFactory } from './Directive'
9
9
  import { Composition } from './Composition'
10
10
  import * as root from './root'
11
+ import { Interception } from './Interception'
11
12
  import type { Connector, Locator, extensions } from '@toa.io/core'
12
13
 
13
14
  export class Factory implements extensions.Factory {
14
15
  private readonly boot: Bootloader
15
- private readonly families: Family[]
16
16
 
17
17
  public constructor (boot: Bootloader) {
18
18
  this.boot = boot
19
- this.families = directives.families
20
19
  }
21
20
 
22
21
  public tenant (locator: Locator, node: syntax.Node): Connector {
@@ -32,16 +31,18 @@ export class Factory implements extensions.Factory {
32
31
  const remotes = new Remotes(this.boot)
33
32
  const node = root.resolve()
34
33
  const methods = new EndpointsFactory(remotes)
35
- const directives = new DirectivesFactory(this.families, remotes)
34
+ const directives = new DirectivesFactory(families, remotes)
35
+ const interception = new Interception(interceptors)
36
36
  const tree = new Tree<Endpoint, Directives>(node, methods, directives)
37
37
 
38
38
  const composition = new Composition(this.boot)
39
- const gateway = new Gateway(broadcast, server, tree)
39
+ const gateway = new Gateway(broadcast, server, tree, interception)
40
40
 
41
41
  gateway.depends(remotes)
42
42
  gateway.depends(composition)
43
+ server.depends(gateway)
43
44
 
44
- return gateway
45
+ return server
45
46
  }
46
47
  }
47
48
 
package/source/Gateway.ts CHANGED
@@ -1,25 +1,31 @@
1
1
  import { type bindings, Connector } from '@toa.io/core'
2
- import { type Maybe } from '@toa.io/types'
3
2
  import * as http from './HTTP'
4
3
  import { rethrow } from './exceptions'
5
- import { type Method, type Parameter, type Tree } from './RTD'
6
- import { type Label } from './discovery'
7
- import { type Branch } from './Branch'
8
- import { type Endpoint } from './Endpoint'
9
- import { type Directives } from './Directive'
4
+ import type { Interceptor } from './Interception'
5
+ import type { Maybe } from '@toa.io/types'
6
+ import type { Method, Parameter, Tree } from './RTD'
7
+ import type { Label } from './discovery'
8
+ import type { Branch } from './Branch'
9
+ import type { Endpoint } from './Endpoint'
10
+ import type { Directives } from './Directive'
10
11
 
11
12
  export class Gateway extends Connector {
12
13
  private readonly broadcast: Broadcast
13
14
  private readonly tree: Tree<Endpoint, Directives>
15
+ private readonly interceptor: Interceptor
16
+ private readonly server: Connector
14
17
 
15
- public constructor (broadcast: Broadcast, server: http.Server, tree: Tree<Endpoint, Directives>) {
18
+ // eslint-disable-next-line max-params, max-len
19
+ public constructor (broadcast: Broadcast, server: http.Server, tree: Tree<Endpoint, Directives>, interception: Interceptor) {
16
20
  super()
17
21
 
18
22
  this.broadcast = broadcast
19
23
  this.tree = tree
24
+ this.interceptor = interception
25
+ this.server = server
20
26
 
21
27
  this.depends(broadcast)
22
- this.depends(server)
28
+ // this.depends(server)
23
29
 
24
30
  server.attach(this.process.bind(this))
25
31
  }
@@ -35,6 +41,11 @@ export class Gateway extends Connector {
35
41
  }
36
42
 
37
43
  private async process (request: http.IncomingMessage): Promise<http.OutgoingMessage> {
44
+ const interception = await this.interceptor.intercept(request)
45
+
46
+ if (interception !== null)
47
+ return interception
48
+
38
49
  const match = this.tree.match(request.path)
39
50
 
40
51
  if (match === null)
@@ -68,6 +79,9 @@ export class Gateway extends Connector {
68
79
 
69
80
  const body = await request.parse()
70
81
 
82
+ if ('embed' in request && typeof body === 'object' && body !== null)
83
+ Object.assign(body, request.embed)
84
+
71
85
  const reply = await method.endpoint
72
86
  .call(body, request.query, parameters)
73
87
  .catch(rethrow) as Maybe<unknown>
@@ -1,4 +1,3 @@
1
- import { Buffer } from 'buffer'
2
1
  import { Readable } from 'stream'
3
2
  import type { IncomingMessage } from './messages'
4
3
  import type * as http from 'node:http'