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

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 (442) 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/components/octets.storage/manifest.toa.yaml +1 -0
  71. package/components/octets.storage/operations/store.js +2 -2
  72. package/cucumber.js +0 -1
  73. package/documentation/components.md +25 -2
  74. package/documentation/identity.md +7 -7
  75. package/documentation/octets.md +93 -40
  76. package/documentation/protocol.md +21 -1
  77. package/documentation/query.md +1 -1
  78. package/documentation/vary.md +69 -0
  79. package/features/cors.feature +72 -0
  80. package/features/identity.feature +19 -3
  81. package/features/identity.federation.feature +125 -0
  82. package/features/octets.entries.feature +121 -0
  83. package/features/octets.feature +2 -28
  84. package/features/octets.meta.feature +65 -0
  85. package/features/octets.workflows.feature +138 -4
  86. package/features/response.feature +65 -0
  87. package/features/routes.feature +37 -0
  88. package/features/steps/Captures.ts +6 -0
  89. package/features/steps/Components.ts +18 -6
  90. package/features/steps/Gateway.ts +1 -2
  91. package/features/steps/HTTP.ts +40 -87
  92. package/features/steps/IdP.ts +120 -0
  93. package/features/steps/Parameters.ts +8 -2
  94. package/features/steps/Workspace.ts +5 -7
  95. package/features/steps/components/echo/operations/error.js +11 -0
  96. package/features/steps/components/octets.tester/manifest.toa.yaml +3 -0
  97. package/features/steps/components/octets.tester/operations/concat.js +7 -0
  98. package/features/steps/components/octets.tester/operations/echo.js +7 -0
  99. package/features/steps/components/users/manifest.toa.yaml +3 -0
  100. package/features/steps/components/users.properties/manifest.toa.yaml +13 -0
  101. package/features/steps/tsconfig.json +1 -1
  102. package/features/vary.feature +150 -0
  103. package/package.json +17 -18
  104. package/schemas/octets/delete.cos.yaml +2 -1
  105. package/schemas/octets/list.cos.yaml +2 -1
  106. package/source/Directive.test.ts +8 -2
  107. package/source/Directive.ts +19 -16
  108. package/source/Factory.ts +8 -7
  109. package/source/Gateway.ts +22 -8
  110. package/source/HTTP/Server.fixtures.ts +0 -1
  111. package/source/HTTP/Server.test.ts +61 -134
  112. package/source/HTTP/Server.ts +91 -47
  113. package/source/HTTP/formats/msgpack.ts +9 -6
  114. package/source/HTTP/formats/text.ts +1 -1
  115. package/source/HTTP/formats/yaml.ts +1 -1
  116. package/source/HTTP/messages.ts +15 -3
  117. package/source/Interception.ts +24 -0
  118. package/source/RTD/Directives.ts +2 -2
  119. package/source/RTD/Tree.ts +3 -0
  120. package/source/RTD/syntax/parse.ts +6 -6
  121. package/source/RTD/syntax/types.ts +1 -1
  122. package/source/deployment.ts +1 -2
  123. package/source/directives/auth/{Family.ts → Authorization.ts} +29 -33
  124. package/source/directives/auth/Incept.ts +1 -1
  125. package/source/directives/auth/Rule.ts +2 -2
  126. package/source/directives/auth/index.ts +2 -2
  127. package/source/directives/auth/schemes.ts +2 -1
  128. package/source/directives/auth/types.ts +9 -6
  129. package/source/directives/cache/{Family.ts → Cache.ts} +4 -5
  130. package/source/directives/cache/index.ts +2 -2
  131. package/source/directives/cache/types.ts +1 -1
  132. package/source/directives/cors/CORS.ts +54 -0
  133. package/source/directives/cors/index.ts +3 -0
  134. package/source/directives/dev/{Family.ts → Development.ts} +3 -4
  135. package/source/directives/dev/Stub.ts +4 -4
  136. package/source/directives/dev/Throw.ts +4 -4
  137. package/source/directives/dev/index.ts +2 -2
  138. package/source/directives/dev/types.ts +1 -1
  139. package/source/directives/index.ts +10 -6
  140. package/source/directives/octets/Context.ts +1 -1
  141. package/source/directives/octets/Delete.ts +50 -9
  142. package/source/directives/octets/Fetch.ts +18 -19
  143. package/source/directives/octets/List.ts +37 -7
  144. package/source/directives/octets/{Family.ts → Octets.ts} +7 -6
  145. package/source/directives/octets/Permute.ts +3 -3
  146. package/source/directives/octets/Store.ts +43 -99
  147. package/source/directives/octets/index.ts +2 -2
  148. package/source/directives/octets/schemas.ts +11 -6
  149. package/source/directives/octets/types.ts +4 -3
  150. package/source/directives/octets/workflow/Execution.ts +78 -0
  151. package/source/directives/octets/workflow/Workflow.ts +37 -0
  152. package/source/directives/octets/workflow/index.ts +1 -0
  153. package/source/directives/vary/Directive.ts +6 -0
  154. package/source/directives/vary/Embed.ts +62 -0
  155. package/source/directives/vary/Properties.ts +17 -0
  156. package/source/directives/vary/Vary.ts +48 -0
  157. package/source/directives/vary/embeddings/Embedding.ts +6 -0
  158. package/source/directives/vary/embeddings/Header.ts +30 -0
  159. package/source/directives/vary/embeddings/Language.ts +31 -0
  160. package/source/directives/vary/embeddings/index.ts +11 -0
  161. package/source/directives/vary/index.ts +3 -0
  162. package/source/io.ts +4 -0
  163. package/source/manifest.test.ts +6 -14
  164. package/source/manifest.ts +9 -6
  165. package/source/schemas.ts +7 -3
  166. package/transpiled/Annotation.d.ts +7 -0
  167. package/transpiled/Annotation.js +3 -0
  168. package/transpiled/Annotation.js.map +1 -0
  169. package/transpiled/Branch.d.ts +7 -0
  170. package/transpiled/Branch.js +3 -0
  171. package/transpiled/Branch.js.map +1 -0
  172. package/transpiled/Composition.d.ts +14 -0
  173. package/transpiled/Composition.js +43 -0
  174. package/transpiled/Composition.js.map +1 -0
  175. package/transpiled/Context.d.ts +5 -0
  176. package/transpiled/Context.js +3 -0
  177. package/transpiled/Context.js.map +1 -0
  178. package/transpiled/Directive.d.ts +31 -0
  179. package/transpiled/Directive.js +78 -0
  180. package/transpiled/Directive.js.map +1 -0
  181. package/transpiled/Endpoint.d.ts +20 -0
  182. package/transpiled/Endpoint.js +45 -0
  183. package/transpiled/Endpoint.js.map +1 -0
  184. package/transpiled/Factory.d.ts +9 -0
  185. package/transpiled/Factory.js +67 -0
  186. package/transpiled/Factory.js.map +1 -0
  187. package/transpiled/Gateway.d.ts +22 -0
  188. package/transpiled/Gateway.js +102 -0
  189. package/transpiled/Gateway.js.map +1 -0
  190. package/transpiled/HTTP/Server.d.ts +24 -0
  191. package/transpiled/HTTP/Server.fixtures.d.ts +10 -0
  192. package/transpiled/HTTP/Server.fixtures.js +31 -0
  193. package/transpiled/HTTP/Server.fixtures.js.map +1 -0
  194. package/transpiled/HTTP/Server.js +149 -0
  195. package/transpiled/HTTP/Server.js.map +1 -0
  196. package/transpiled/HTTP/exceptions.d.ts +34 -0
  197. package/transpiled/HTTP/exceptions.js +71 -0
  198. package/transpiled/HTTP/exceptions.js.map +1 -0
  199. package/transpiled/HTTP/formats/index.d.ts +10 -0
  200. package/transpiled/HTTP/formats/index.js +38 -0
  201. package/transpiled/HTTP/formats/index.js.map +1 -0
  202. package/transpiled/HTTP/formats/json.d.ts +6 -0
  203. package/transpiled/HTTP/formats/json.js +17 -0
  204. package/transpiled/HTTP/formats/json.js.map +1 -0
  205. package/transpiled/HTTP/formats/msgpack.d.ts +6 -0
  206. package/transpiled/HTTP/formats/msgpack.js +17 -0
  207. package/transpiled/HTTP/formats/msgpack.js.map +1 -0
  208. package/transpiled/HTTP/formats/text.d.ts +8 -0
  209. package/transpiled/HTTP/formats/text.js +15 -0
  210. package/transpiled/HTTP/formats/text.js.map +1 -0
  211. package/transpiled/HTTP/formats/yaml.d.ts +6 -0
  212. package/transpiled/HTTP/formats/yaml.js +41 -0
  213. package/transpiled/HTTP/formats/yaml.js.map +1 -0
  214. package/transpiled/HTTP/index.d.ts +3 -0
  215. package/transpiled/HTTP/index.js +20 -0
  216. package/transpiled/HTTP/index.js.map +1 -0
  217. package/transpiled/HTTP/messages.d.ts +33 -0
  218. package/transpiled/HTTP/messages.js +75 -0
  219. package/transpiled/HTTP/messages.js.map +1 -0
  220. package/transpiled/Interception.d.ts +9 -0
  221. package/transpiled/Interception.js +19 -0
  222. package/transpiled/Interception.js.map +1 -0
  223. package/transpiled/Mapping.d.ts +8 -0
  224. package/transpiled/Mapping.js +38 -0
  225. package/transpiled/Mapping.js.map +1 -0
  226. package/transpiled/Query.d.ts +13 -0
  227. package/transpiled/Query.js +107 -0
  228. package/transpiled/Query.js.map +1 -0
  229. package/transpiled/RTD/Context.d.ts +11 -0
  230. package/transpiled/RTD/Context.js +3 -0
  231. package/transpiled/RTD/Context.js.map +1 -0
  232. package/transpiled/RTD/Directives.d.ts +7 -0
  233. package/transpiled/RTD/Directives.js +3 -0
  234. package/transpiled/RTD/Directives.js.map +1 -0
  235. package/transpiled/RTD/Endpoint.d.ts +9 -0
  236. package/transpiled/RTD/Endpoint.js +3 -0
  237. package/transpiled/RTD/Endpoint.js.map +1 -0
  238. package/transpiled/RTD/Match.d.ts +11 -0
  239. package/transpiled/RTD/Match.js +3 -0
  240. package/transpiled/RTD/Match.js.map +1 -0
  241. package/transpiled/RTD/Method.d.ts +9 -0
  242. package/transpiled/RTD/Method.js +16 -0
  243. package/transpiled/RTD/Method.js.map +1 -0
  244. package/transpiled/RTD/Node.d.ts +21 -0
  245. package/transpiled/RTD/Node.js +61 -0
  246. package/transpiled/RTD/Node.js.map +1 -0
  247. package/transpiled/RTD/Route.d.ts +14 -0
  248. package/transpiled/RTD/Route.js +49 -0
  249. package/transpiled/RTD/Route.js.map +1 -0
  250. package/transpiled/RTD/Tree.d.ts +14 -0
  251. package/transpiled/RTD/Tree.js +42 -0
  252. package/transpiled/RTD/Tree.js.map +1 -0
  253. package/transpiled/RTD/factory.d.ts +6 -0
  254. package/transpiled/RTD/factory.js +36 -0
  255. package/transpiled/RTD/factory.js.map +1 -0
  256. package/transpiled/RTD/index.d.ts +8 -0
  257. package/transpiled/RTD/index.js +38 -0
  258. package/transpiled/RTD/index.js.map +1 -0
  259. package/transpiled/RTD/segment.d.ts +8 -0
  260. package/transpiled/RTD/segment.js +25 -0
  261. package/transpiled/RTD/segment.js.map +1 -0
  262. package/transpiled/RTD/syntax/index.d.ts +2 -0
  263. package/transpiled/RTD/syntax/index.js +19 -0
  264. package/transpiled/RTD/syntax/index.js.map +1 -0
  265. package/transpiled/RTD/syntax/parse.d.ts +4 -0
  266. package/transpiled/RTD/syntax/parse.js +128 -0
  267. package/transpiled/RTD/syntax/parse.js.map +1 -0
  268. package/transpiled/RTD/syntax/types.d.ts +41 -0
  269. package/transpiled/RTD/syntax/types.js +5 -0
  270. package/transpiled/RTD/syntax/types.js.map +1 -0
  271. package/transpiled/Remotes.d.ts +9 -0
  272. package/transpiled/Remotes.js +25 -0
  273. package/transpiled/Remotes.js.map +1 -0
  274. package/transpiled/Tenant.d.ts +13 -0
  275. package/transpiled/Tenant.js +34 -0
  276. package/transpiled/Tenant.js.map +1 -0
  277. package/transpiled/deployment.d.ts +3 -0
  278. package/transpiled/deployment.js +66 -0
  279. package/transpiled/deployment.js.map +1 -0
  280. package/transpiled/directives/auth/Anonymous.d.ts +6 -0
  281. package/transpiled/directives/auth/Anonymous.js +17 -0
  282. package/transpiled/directives/auth/Anonymous.js.map +1 -0
  283. package/transpiled/directives/auth/Authorization.d.ts +20 -0
  284. package/transpiled/directives/auth/Authorization.js +125 -0
  285. package/transpiled/directives/auth/Authorization.js.map +1 -0
  286. package/transpiled/directives/auth/Echo.d.ts +6 -0
  287. package/transpiled/directives/auth/Echo.js +13 -0
  288. package/transpiled/directives/auth/Echo.js.map +1 -0
  289. package/transpiled/directives/auth/Id.d.ts +7 -0
  290. package/transpiled/directives/auth/Id.js +17 -0
  291. package/transpiled/directives/auth/Id.js.map +1 -0
  292. package/transpiled/directives/auth/Incept.d.ts +10 -0
  293. package/transpiled/directives/auth/Incept.js +58 -0
  294. package/transpiled/directives/auth/Incept.js.map +1 -0
  295. package/transpiled/directives/auth/Role.d.ts +11 -0
  296. package/transpiled/directives/auth/Role.js +44 -0
  297. package/transpiled/directives/auth/Role.js.map +1 -0
  298. package/transpiled/directives/auth/Rule.d.ts +9 -0
  299. package/transpiled/directives/auth/Rule.js +22 -0
  300. package/transpiled/directives/auth/Rule.js.map +1 -0
  301. package/transpiled/directives/auth/Scheme.d.ts +7 -0
  302. package/transpiled/directives/auth/Scheme.js +47 -0
  303. package/transpiled/directives/auth/Scheme.js.map +1 -0
  304. package/transpiled/directives/auth/index.d.ts +2 -0
  305. package/transpiled/directives/auth/index.js +6 -0
  306. package/transpiled/directives/auth/index.js.map +1 -0
  307. package/transpiled/directives/auth/schemes.d.ts +3 -0
  308. package/transpiled/directives/auth/schemes.js +10 -0
  309. package/transpiled/directives/auth/schemes.js.map +1 -0
  310. package/transpiled/directives/auth/split.d.ts +2 -0
  311. package/transpiled/directives/auth/split.js +38 -0
  312. package/transpiled/directives/auth/split.js.map +1 -0
  313. package/transpiled/directives/auth/types.d.ts +31 -0
  314. package/transpiled/directives/auth/types.js +3 -0
  315. package/transpiled/directives/auth/types.js.map +1 -0
  316. package/transpiled/directives/cache/Cache.d.ts +11 -0
  317. package/transpiled/directives/cache/Cache.js +28 -0
  318. package/transpiled/directives/cache/Cache.js.map +1 -0
  319. package/transpiled/directives/cache/Control.d.ts +9 -0
  320. package/transpiled/directives/cache/Control.js +42 -0
  321. package/transpiled/directives/cache/Control.js.map +1 -0
  322. package/transpiled/directives/cache/Exact.d.ts +4 -0
  323. package/transpiled/directives/cache/Exact.js +11 -0
  324. package/transpiled/directives/cache/Exact.js.map +1 -0
  325. package/transpiled/directives/cache/index.d.ts +2 -0
  326. package/transpiled/directives/cache/index.js +6 -0
  327. package/transpiled/directives/cache/index.js.map +1 -0
  328. package/transpiled/directives/cache/types.d.ts +7 -0
  329. package/transpiled/directives/cache/types.js +3 -0
  330. package/transpiled/directives/cache/types.js.map +1 -0
  331. package/transpiled/directives/cors/CORS.d.ts +11 -0
  332. package/transpiled/directives/cors/CORS.js +44 -0
  333. package/transpiled/directives/cors/CORS.js.map +1 -0
  334. package/transpiled/directives/cors/index.d.ts +2 -0
  335. package/transpiled/directives/cors/index.js +6 -0
  336. package/transpiled/directives/cors/index.js.map +1 -0
  337. package/transpiled/directives/dev/Development.d.ts +9 -0
  338. package/transpiled/directives/dev/Development.js +29 -0
  339. package/transpiled/directives/dev/Development.js.map +1 -0
  340. package/transpiled/directives/dev/Stub.d.ts +7 -0
  341. package/transpiled/directives/dev/Stub.js +14 -0
  342. package/transpiled/directives/dev/Stub.js.map +1 -0
  343. package/transpiled/directives/dev/Throw.d.ts +7 -0
  344. package/transpiled/directives/dev/Throw.js +14 -0
  345. package/transpiled/directives/dev/Throw.js.map +1 -0
  346. package/transpiled/directives/dev/index.d.ts +2 -0
  347. package/transpiled/directives/dev/index.js +6 -0
  348. package/transpiled/directives/dev/index.js.map +1 -0
  349. package/transpiled/directives/dev/types.d.ts +4 -0
  350. package/transpiled/directives/dev/types.js +3 -0
  351. package/transpiled/directives/dev/types.js.map +1 -0
  352. package/transpiled/directives/index.d.ts +4 -0
  353. package/transpiled/directives/index.js +12 -0
  354. package/transpiled/directives/index.js.map +1 -0
  355. package/transpiled/directives/octets/Context.d.ts +8 -0
  356. package/transpiled/directives/octets/Context.js +40 -0
  357. package/transpiled/directives/octets/Context.js.map +1 -0
  358. package/transpiled/directives/octets/Delete.d.ts +19 -0
  359. package/transpiled/directives/octets/Delete.js +72 -0
  360. package/transpiled/directives/octets/Delete.js.map +1 -0
  361. package/transpiled/directives/octets/Fetch.d.ts +17 -0
  362. package/transpiled/directives/octets/Fetch.js +76 -0
  363. package/transpiled/directives/octets/Fetch.js.map +1 -0
  364. package/transpiled/directives/octets/List.d.ts +15 -0
  365. package/transpiled/directives/octets/List.js +65 -0
  366. package/transpiled/directives/octets/List.js.map +1 -0
  367. package/transpiled/directives/octets/Octets.d.ts +12 -0
  368. package/transpiled/directives/octets/Octets.js +51 -0
  369. package/transpiled/directives/octets/Octets.js.map +1 -0
  370. package/transpiled/directives/octets/Permute.d.ts +10 -0
  371. package/transpiled/directives/octets/Permute.js +51 -0
  372. package/transpiled/directives/octets/Permute.js.map +1 -0
  373. package/transpiled/directives/octets/Store.d.ts +22 -0
  374. package/transpiled/directives/octets/Store.js +80 -0
  375. package/transpiled/directives/octets/Store.js.map +1 -0
  376. package/transpiled/directives/octets/index.d.ts +2 -0
  377. package/transpiled/directives/octets/index.js +6 -0
  378. package/transpiled/directives/octets/index.js.map +1 -0
  379. package/transpiled/directives/octets/schemas.d.ts +11 -0
  380. package/transpiled/directives/octets/schemas.js +17 -0
  381. package/transpiled/directives/octets/schemas.js.map +1 -0
  382. package/transpiled/directives/octets/types.d.ts +10 -0
  383. package/transpiled/directives/octets/types.js +3 -0
  384. package/transpiled/directives/octets/types.js.map +1 -0
  385. package/transpiled/directives/octets/workflow/Execution.d.ts +25 -0
  386. package/transpiled/directives/octets/workflow/Execution.js +55 -0
  387. package/transpiled/directives/octets/workflow/Execution.js.map +1 -0
  388. package/transpiled/directives/octets/workflow/Workflow.d.ts +12 -0
  389. package/transpiled/directives/octets/workflow/Workflow.js +25 -0
  390. package/transpiled/directives/octets/workflow/Workflow.js.map +1 -0
  391. package/transpiled/directives/octets/workflow/index.d.ts +1 -0
  392. package/transpiled/directives/octets/workflow/index.js +6 -0
  393. package/transpiled/directives/octets/workflow/index.js.map +1 -0
  394. package/transpiled/directives/vary/Directive.d.ts +5 -0
  395. package/transpiled/directives/vary/Directive.js +3 -0
  396. package/transpiled/directives/vary/Directive.js.map +1 -0
  397. package/transpiled/directives/vary/Embed.d.ts +10 -0
  398. package/transpiled/directives/vary/Embed.js +49 -0
  399. package/transpiled/directives/vary/Embed.js.map +1 -0
  400. package/transpiled/directives/vary/Properties.d.ts +9 -0
  401. package/transpiled/directives/vary/Properties.js +16 -0
  402. package/transpiled/directives/vary/Properties.js.map +1 -0
  403. package/transpiled/directives/vary/Vary.d.ts +10 -0
  404. package/transpiled/directives/vary/Vary.js +36 -0
  405. package/transpiled/directives/vary/Vary.js.map +1 -0
  406. package/transpiled/directives/vary/embeddings/Embedding.d.ts +5 -0
  407. package/transpiled/directives/vary/embeddings/Embedding.js +3 -0
  408. package/transpiled/directives/vary/embeddings/Embedding.js.map +1 -0
  409. package/transpiled/directives/vary/embeddings/Header.d.ts +7 -0
  410. package/transpiled/directives/vary/embeddings/Header.js +26 -0
  411. package/transpiled/directives/vary/embeddings/Header.js.map +1 -0
  412. package/transpiled/directives/vary/embeddings/Language.d.ts +7 -0
  413. package/transpiled/directives/vary/embeddings/Language.js +28 -0
  414. package/transpiled/directives/vary/embeddings/Language.js.map +1 -0
  415. package/transpiled/directives/vary/embeddings/index.d.ts +5 -0
  416. package/transpiled/directives/vary/embeddings/index.js +10 -0
  417. package/transpiled/directives/vary/embeddings/index.js.map +1 -0
  418. package/transpiled/directives/vary/index.d.ts +2 -0
  419. package/transpiled/directives/vary/index.js +6 -0
  420. package/transpiled/directives/vary/index.js.map +1 -0
  421. package/transpiled/discovery.d.ts +1 -0
  422. package/transpiled/discovery.js +3 -0
  423. package/transpiled/discovery.js.map +1 -0
  424. package/transpiled/exceptions.d.ts +2 -0
  425. package/transpiled/exceptions.js +39 -0
  426. package/transpiled/exceptions.js.map +1 -0
  427. package/transpiled/index.d.ts +5 -0
  428. package/transpiled/index.js +12 -0
  429. package/transpiled/index.js.map +1 -0
  430. package/transpiled/io.d.ts +3 -0
  431. package/transpiled/io.js +3 -0
  432. package/transpiled/io.js.map +1 -0
  433. package/transpiled/manifest.d.ts +3 -0
  434. package/transpiled/manifest.js +66 -0
  435. package/transpiled/manifest.js.map +1 -0
  436. package/transpiled/root.d.ts +2 -0
  437. package/transpiled/root.js +39 -0
  438. package/transpiled/root.js.map +1 -0
  439. package/transpiled/schemas.d.ts +7 -0
  440. package/transpiled/schemas.js +14 -0
  441. package/transpiled/schemas.js.map +1 -0
  442. package/transpiled/tsconfig.tsbuildinfo +1 -0
@@ -1,13 +1,16 @@
1
1
  import { type Buffer } from 'node:buffer'
2
- import * as msgpack from 'msgpackr'
3
-
4
- export const type = 'application/msgpack'
5
- export const multipart = 'multipart/msgpack'
2
+ import { pack, unpack } from 'msgpackr'
6
3
 
7
4
  export function decode (buffer: Buffer): any {
8
- return msgpack.decode(buffer)
5
+ return unpack(buffer)
9
6
  }
10
7
 
11
8
  export function encode (value: any): Buffer {
12
- return msgpack.encode(value)
9
+ if (typeof value === 'object' && value !== null)
10
+ Object.setPrototypeOf(value, null)
11
+
12
+ return pack(value)
13
13
  }
14
+
15
+ export const type = 'application/msgpack'
16
+ export const multipart = 'multipart/msgpack'
@@ -7,6 +7,6 @@ export function decode (buffer: Buffer): any {
7
7
  return buffer.toString()
8
8
  }
9
9
 
10
- export function encode (value: any): Buffer {
10
+ export function encode (value: { toString: () => string }): Buffer {
11
11
  return Buffer.from(value.toString())
12
12
  }
@@ -11,7 +11,7 @@ export function decode (buffer: Buffer): any {
11
11
  }
12
12
 
13
13
  export function encode (value: any): Buffer {
14
- const text = yaml.dump(value)
14
+ const text = yaml.dump(value, { lineWidth: -1, noRefs: true })
15
15
 
16
16
  return Buffer.from(text)
17
17
  }
@@ -9,6 +9,11 @@ import type { Format } from './formats'
9
9
 
10
10
  export function write
11
11
  (request: IncomingMessage, response: Response, message: OutgoingMessage): void {
12
+ for (const transform of request.pipelines.response)
13
+ transform(message)
14
+
15
+ message.headers?.forEach((value, key) => response.set(key, value))
16
+
12
17
  if (message.body instanceof Readable)
13
18
  stream(message, request, response)
14
19
  else
@@ -36,7 +41,7 @@ export async function read (request: Request): Promise<any> {
36
41
  }
37
42
 
38
43
  function send (message: OutgoingMessage, request: IncomingMessage, response: Response): void {
39
- if (message.body === undefined) {
44
+ if (message.body === undefined || message.body === null) {
40
45
  response.end()
41
46
 
42
47
  return
@@ -47,8 +52,10 @@ function send (message: OutgoingMessage, request: IncomingMessage, response: Res
47
52
 
48
53
  const buf = request.encoder.encode(message.body)
49
54
 
50
- response.set('content-type', request.encoder.type)
51
- response.end(buf)
55
+ response
56
+ .set('content-type', request.encoder.type)
57
+ .append('vary', 'accept')
58
+ .end(buf)
52
59
  }
53
60
 
54
61
  function stream
@@ -97,6 +104,11 @@ export interface IncomingMessage extends Request {
97
104
  query: Query
98
105
  parse: <T> () => Promise<T>
99
106
  encoder: Format | null
107
+ subtype: string | null
108
+ pipelines: {
109
+ body: Array<(input: unknown) => unknown>
110
+ response: Array<(output: OutgoingMessage) => void>
111
+ }
100
112
  }
101
113
 
102
114
  export interface OutgoingMessage {
@@ -0,0 +1,24 @@
1
+ import type { Input, Output } from './io'
2
+
3
+ export class Interception implements Interceptor {
4
+ private readonly interceptors: Interceptor[]
5
+
6
+ public constructor (interceptors: Interceptor[]) {
7
+ this.interceptors = interceptors
8
+ }
9
+
10
+ public async intercept (input: Input): Promise<Output> {
11
+ for (const interceptor of this.interceptors) {
12
+ const output = await interceptor.intercept(input)
13
+
14
+ if (output !== null)
15
+ return output
16
+ }
17
+
18
+ return null
19
+ }
20
+ }
21
+
22
+ export interface Interceptor {
23
+ intercept: (input: Input) => Output | Promise<Output>
24
+ }
@@ -1,7 +1,7 @@
1
1
  import type * as syntax from './syntax'
2
2
 
3
- export interface Directives<T = any> {
4
- merge: (directive: T) => void
3
+ export interface Directives<TDirective = any> {
4
+ merge: (directive: TDirective) => void
5
5
  }
6
6
 
7
7
  export interface DirectivesFactory<T = any> {
@@ -25,6 +25,9 @@ export class Tree<
25
25
  }
26
26
 
27
27
  public match (path: string): Match<TEndpoint, TDirectives> | null {
28
+ if (path === '/')
29
+ return { node: this.trunk, parameters: [] }
30
+
28
31
  const fragments = fragment(path)
29
32
 
30
33
  return this.trunk.match(fragments)
@@ -28,7 +28,7 @@ function parseNode (input: object, shortcuts?: Shortcuts): Node {
28
28
  }
29
29
 
30
30
  if (key[0] === '/') {
31
- const route = parseRoute(key, value, shortcuts)
31
+ const route = parseRoute(key, value as Node, shortcuts)
32
32
 
33
33
  node.routes.push(route)
34
34
 
@@ -36,7 +36,7 @@ function parseNode (input: object, shortcuts?: Shortcuts): Node {
36
36
  }
37
37
 
38
38
  if (verbs.has(key)) {
39
- const method = parseMethod(key, value, shortcuts)
39
+ const method = parseMethod(key, value as Mapping, shortcuts)
40
40
 
41
41
  node.methods.push(method)
42
42
 
@@ -65,7 +65,7 @@ export function createNode (): Node {
65
65
  }
66
66
  }
67
67
 
68
- function parseRoute (path: string, value: object, shortcuts?: Shortcuts): Route {
68
+ function parseRoute (path: string, value: Node, shortcuts?: Shortcuts): Route {
69
69
  const node = parse(value, shortcuts)
70
70
 
71
71
  return createRoute(path, node)
@@ -106,10 +106,10 @@ function parseQuery (mapping: any): void {
106
106
  return
107
107
 
108
108
  if (typeof query.limit === 'number')
109
- query.limit = expandRange(query.limit)
109
+ query.limit = expandRange(query.limit as number)
110
110
 
111
111
  if (typeof query.omit === 'number')
112
- query.omit = expandRange(query.omit)
112
+ query.omit = expandRange(query.omit as number)
113
113
  }
114
114
 
115
115
  function parseDirectives (mapping: Record<string, any>, shortcuts?: Shortcuts): Directive[] {
@@ -132,7 +132,7 @@ function parseDirectives (mapping: Record<string, any>, shortcuts?: Shortcuts):
132
132
 
133
133
  function parseDirective (key: string, value: any, shortcuts?: Shortcuts): Directive | null {
134
134
  if (shortcuts?.has(key) === true)
135
- key = shortcuts.get(key) as string
135
+ key = shortcuts.get(key)! // eslint-disable-line @typescript-eslint/no-non-null-assertion
136
136
 
137
137
  const match = key.match(DIRECTIVE_RX)
138
138
 
@@ -45,4 +45,4 @@ export interface Range {
45
45
  range: [number, number]
46
46
  }
47
47
 
48
- export const verbs = new Set<string>(['GET', 'POST', 'PUT', 'PATCH', 'DELETE'])
48
+ export const verbs = new Set<string>(['GET', 'POST', 'PUT', 'PATCH', 'DELETE', 'OPTIONS'])
@@ -27,8 +27,7 @@ export function deployment (_: unknown, annotation: Annotation | undefined): Dep
27
27
  }
28
28
 
29
29
  if (annotation?.['/'] !== undefined) {
30
- const node = { '/': annotation['/'] }
31
- const tree = parse(node, shortcuts)
30
+ const tree = parse(annotation['/'], shortcuts)
32
31
 
33
32
  service.variables.push({
34
33
  name: 'TOA_EXPOSITION',
@@ -1,3 +1,4 @@
1
+ import assert from 'node:assert'
1
2
  import { match } from 'matchacho'
2
3
  import * as http from '../../HTTP'
3
4
  import { Anonymous } from './Anonymous'
@@ -9,9 +10,10 @@ import { Echo } from './Echo'
9
10
  import { split } from './split'
10
11
  import { Scheme } from './Scheme'
11
12
  import { PRIMARY, PROVIDERS } from './schemes'
13
+ import type { Output } from '../../io'
12
14
  import type { Component } from '@toa.io/core'
13
15
  import type { Remotes } from '../../Remotes'
14
- import type { Family, Output } from '../../Directive'
16
+ import type { Family } from '../../Directive'
15
17
  import type { Parameter } from '../../RTD'
16
18
  import type {
17
19
  AuthenticationResult,
@@ -25,7 +27,8 @@ import type {
25
27
  Schemes
26
28
  } from './types'
27
29
 
28
- class Authorization implements Family<Directive, Extension> {
30
+ export class Authorization implements Family<Directive, Extension> {
31
+ public readonly depends: string[] = ['Vary']
29
32
  public readonly name: string = 'auth'
30
33
  public readonly mandatory: boolean = true
31
34
 
@@ -35,23 +38,24 @@ class Authorization implements Family<Directive, Extension> {
35
38
  private bans: Component | null = null
36
39
 
37
40
  public create (name: string, value: any, remotes: Remotes): Directive {
38
- const Class = CLASSES[name]
41
+ assert.ok(name in CLASSES,
42
+ `Directive '${name}' is not provided by the '${this.name}' family.`)
39
43
 
40
- if (Class === undefined)
41
- throw new Error(`Directive '${name}' is not provided by the '${this.name}' family.`)
44
+ const Class = CLASSES[name]
42
45
 
43
46
  for (const name of REMOTES)
44
47
  this.discovery[name] ??= remotes.discover('identity', name)
45
48
 
46
49
  return match(Class,
47
- Role, () => new Role(value, this.discovery.roles),
48
- Rule, () => new Rule(value, this.create.bind(this)),
49
- Incept, () => new Incept(value, this.discovery),
50
+ Role, () => new Role(value as string | string[], this.discovery.roles),
51
+ Rule, () => new Rule(value as Record<string, string>, this.create.bind(this)),
52
+ Incept, () => new Incept(value as string, this.discovery),
50
53
  () => new Class(value))
51
54
  }
52
55
 
53
- public async preflight
54
- (directives: Directive[], input: Input, parameters: Parameter[]): Promise<Output> {
56
+ public async preflight (directives: Directive[],
57
+ input: Input,
58
+ parameters: Parameter[]): Promise<Output> {
55
59
  const identity = await this.resolve(input.headers.authorization)
56
60
 
57
61
  input.identity = identity
@@ -67,37 +71,32 @@ class Authorization implements Family<Directive, Extension> {
67
71
  else throw new http.Forbidden()
68
72
  }
69
73
 
70
- public async settle
71
- (directives: Directive[], request: Input, response: http.OutgoingMessage): Promise<void> {
72
- for (const directive of directives)
73
- await directive.settle?.(request, response)
74
+ public async settle (directives: Directive[],
75
+ request: Input,
76
+ response: http.OutgoingMessage): Promise<void> {
77
+ for (const directive of directives) await directive.settle?.(request, response)
74
78
 
75
79
  const identity = request.identity
76
80
 
77
- if (identity === null)
78
- return
81
+ if (identity === null) return
79
82
 
80
- if (identity.scheme === PRIMARY && !identity.refresh)
81
- return
83
+ if (identity.scheme === PRIMARY && !identity.refresh) return
82
84
 
83
85
  // Role directive may have already set the value
84
- if (identity.roles === undefined)
85
- await Role.set(identity, this.discovery.roles)
86
+ if (identity.roles === undefined) await Role.set(identity, this.discovery.roles)
86
87
 
87
88
  this.tokens ??= await this.discovery.tokens
88
89
 
89
90
  const token = await this.tokens.invoke<string>('encrypt', { input: { identity } })
90
91
  const authorization = `Token ${token}`
91
92
 
92
- if (response.headers === undefined)
93
- response.headers = new Headers()
93
+ if (response.headers === undefined) response.headers = new Headers()
94
94
 
95
95
  response.headers.set('authorization', authorization)
96
96
  }
97
97
 
98
98
  private async resolve (authorization: string | undefined): Promise<Identity | null> {
99
- if (authorization === undefined)
100
- return null
99
+ if (authorization === undefined) return null
101
100
 
102
101
  const [scheme, credentials] = split(authorization)
103
102
  const provider = PROVIDERS[scheme]
@@ -107,16 +106,15 @@ class Authorization implements Family<Directive, Extension> {
107
106
 
108
107
  this.schemes[scheme] ??= await this.discovery[provider]
109
108
 
110
- const result = await this.schemes[scheme]
111
- .invoke<AuthenticationResult>('authenticate', { input: credentials })
109
+ const result = await this.schemes[scheme].invoke<AuthenticationResult>('authenticate', {
110
+ input: credentials
111
+ })
112
112
 
113
- if (result instanceof Error)
114
- return null
113
+ if (result instanceof Error) return null
115
114
 
116
115
  const identity = result.identity
117
116
 
118
- if (scheme !== PRIMARY && await this.banned(identity))
119
- throw new http.Unauthorized()
117
+ if (scheme !== PRIMARY && (await this.banned(identity))) throw new http.Unauthorized()
120
118
 
121
119
  identity.scheme = scheme
122
120
  identity.refresh = result.refresh
@@ -143,6 +141,4 @@ const CLASSES: Record<string, new (value: any, argument?: any) => Directive> = {
143
141
  echo: Echo
144
142
  }
145
143
 
146
- const REMOTES: Remote[] = ['basic', 'tokens', 'roles', 'bans']
147
-
148
- export = new Authorization()
144
+ const REMOTES: Remote[] = ['basic', 'federation', 'tokens', 'roles', 'bans']
@@ -25,7 +25,7 @@ export class Incept implements Directive {
25
25
  throw new http.Conflict('Identity inception has failed as the response body ' +
26
26
  ` does not contain the '${this.property}' property.`)
27
27
 
28
- const [scheme, credentials] = split(request.headers.authorization as string)
28
+ const [scheme, credentials] = split(request.headers.authorization!)
29
29
  const provider = PROVIDERS[scheme]
30
30
 
31
31
  this.schemes[scheme] ??= await this.discovery[provider]
@@ -1,5 +1,5 @@
1
1
  import { type Parameter } from '../../RTD'
2
- import { type Directive, type Identity } from './types'
2
+ import type { Input, Directive, Identity } from './types'
3
3
 
4
4
  export class Rule implements Directive {
5
5
  private readonly directives: Directive[] = []
@@ -13,7 +13,7 @@ export class Rule implements Directive {
13
13
  }
14
14
 
15
15
  public async authorize
16
- (identity: Identity | null, input: any, parameters: Parameter[]): Promise<boolean> {
16
+ (identity: Identity | null, input: Input, parameters: Parameter[]): Promise<boolean> {
17
17
  for (const directive of this.directives) {
18
18
  const authorized = await directive.authorize(identity, input, parameters)
19
19
 
@@ -1,3 +1,3 @@
1
- import Family from './Family'
1
+ import { Authorization } from './Authorization'
2
2
 
3
- export = Family
3
+ export const authorization = new Authorization()
@@ -2,7 +2,8 @@ import { type Remote, type Scheme } from './types'
2
2
 
3
3
  export const PROVIDERS: Record<Scheme, Remote> = {
4
4
  basic: 'basic',
5
- token: 'tokens'
5
+ token: 'tokens',
6
+ bearer: 'federation'
6
7
  }
7
8
 
8
9
  export const PRIMARY: Scheme = 'token'
@@ -2,11 +2,14 @@ import { type Component } from '@toa.io/core'
2
2
  import { type Maybe } from '@toa.io/types'
3
3
  import { type Parameter } from '../../RTD'
4
4
  import type * as http from '../../HTTP'
5
- import type * as directive from '../../Directive'
5
+ import type * as io from '../../io'
6
6
 
7
7
  export interface Directive {
8
- authorize: (identity: Identity | null, input: Input, parameters: Parameter[]) =>
9
- boolean | Promise<boolean>
8
+ authorize: (
9
+ identity: Identity | null,
10
+ input: Input,
11
+ parameters: Parameter[],
12
+ ) => boolean | Promise<boolean>
10
13
 
11
14
  reply?: (identity: Identity | null) => http.OutgoingMessage
12
15
 
@@ -28,10 +31,10 @@ export interface Ban {
28
31
  banned: boolean
29
32
  }
30
33
 
31
- export type Input = directive.Input & Extension
34
+ export type Input = io.Input & Extension
32
35
  export type AuthenticationResult = Maybe<{ identity: Identity, refresh: boolean }>
33
36
 
34
- export type Scheme = 'basic' | 'token'
35
- export type Remote = 'basic' | 'tokens' | 'roles' | 'bans'
37
+ export type Scheme = 'basic' | 'token' | 'bearer'
38
+ export type Remote = 'basic' | 'federation' | 'tokens' | 'roles' | 'bans'
36
39
  export type Discovery = Record<Remote, Promise<Component>>
37
40
  export type Schemes = Record<Scheme, Component>
@@ -1,10 +1,11 @@
1
- import { type Input, type Output, type Family } from '../../Directive'
2
1
  import { Control } from './Control'
3
- import { type Directive } from './types'
4
2
  import { Exact } from './Exact'
3
+ import type { Input, Output } from '../../io'
4
+ import type { Directive } from './types'
5
+ import type { Family } from '../../Directive'
5
6
  import type * as http from '../../HTTP'
6
7
 
7
- class Cache implements Family<Directive> {
8
+ export class Cache implements Family<Directive> {
8
9
  public readonly name: string = 'cache'
9
10
  public readonly mandatory: boolean = false
10
11
 
@@ -32,5 +33,3 @@ const constructors: Record<string, new (value: any) => Directive> = {
32
33
  control: Control,
33
34
  exact: Exact
34
35
  }
35
-
36
- export = new Cache()
@@ -1,3 +1,3 @@
1
- import Family from './Family'
1
+ import { Cache } from './Cache'
2
2
 
3
- export = Family
3
+ export const cache = new Cache()
@@ -1,4 +1,4 @@
1
- import { type Input } from '../../Directive'
1
+ import type { Input } from '../../io'
2
2
 
3
3
  export interface Directive {
4
4
  set: (input: Input, headers: Headers) => void
@@ -0,0 +1,54 @@
1
+ import type { Input, Output } from '../../io'
2
+ import type { Interceptor } from '../../Interception'
3
+
4
+ export class CORS implements Interceptor {
5
+ public readonly name = 'cors'
6
+ public readonly mandatory = true
7
+
8
+ private readonly allowedHeaders = new Set<string>(['accept', 'authorization', 'content-type'])
9
+
10
+ private readonly headers = new Headers({
11
+ 'access-control-allow-methods': 'GET, POST, PUT, PATCH, DELETE',
12
+ 'access-control-allow-credentials': 'true',
13
+ 'access-control-allow-headers': Array.from(this.allowedHeaders).join(', '),
14
+ 'access-control-max-age': '3600',
15
+ 'cache-control': 'public, max-age=3600',
16
+ vary: 'origin'
17
+ })
18
+
19
+ public intercept (input: Input): Output {
20
+ const origin = input.headers.origin
21
+
22
+ if (origin === undefined)
23
+ return null
24
+
25
+ if (input.method === 'OPTIONS')
26
+ return this.preflightResponse(origin)
27
+
28
+ input.pipelines.response.push((output) => {
29
+ output.headers ??= new Headers()
30
+ output.headers.set('access-control-allow-origin', origin)
31
+ output.headers.set('access-control-expose-headers',
32
+ 'authorization, content-type, content-length, etag')
33
+
34
+ if (input.method === 'GET' || input.method === 'HEAD' || input.method === 'OPTIONS')
35
+ output.headers.append('vary', 'origin')
36
+ })
37
+
38
+ return null
39
+ }
40
+
41
+ public allowHeader (header: string): void {
42
+ this.allowedHeaders.add(header.toLowerCase())
43
+ this.headers.set('access-control-allow-headers', Array.from(this.allowedHeaders).join(', '))
44
+ }
45
+
46
+ private preflightResponse (origin: string): Output {
47
+ this.headers.set('access-control-allow-origin', origin)
48
+
49
+ return {
50
+ status: 204,
51
+ headers: this.headers
52
+ }
53
+ }
54
+ }
@@ -0,0 +1,3 @@
1
+ import { CORS } from './CORS'
2
+
3
+ export const cors = new CORS()
@@ -1,9 +1,10 @@
1
- import { type Input, type Output, type Family } from '../../Directive'
2
1
  import { Stub } from './Stub'
3
2
  import { Throw } from './Throw'
4
3
  import { type Directive } from './types'
4
+ import type { Input, Output } from '../../io'
5
+ import type { Family } from '../../Directive'
5
6
 
6
- class Development implements Family<Directive> {
7
+ export class Development implements Family<Directive> {
7
8
  public readonly name: string = 'dev'
8
9
  public readonly mandatory: boolean = false
9
10
 
@@ -32,5 +33,3 @@ const constructors: Record<string, new (value: any) => Directive> = {
32
33
  stub: Stub,
33
34
  throw: Throw
34
35
  }
35
-
36
- export = new Development()
@@ -1,10 +1,10 @@
1
- import { type Output } from '../../Directive'
2
- import { type Directive } from './types'
1
+ import type { Output } from '../../io'
2
+ import type { Directive } from './types'
3
3
 
4
4
  export class Stub implements Directive {
5
- private readonly value: any
5
+ private readonly value: unknown
6
6
 
7
- public constructor (value: any) {
7
+ public constructor (value: unknown) {
8
8
  this.value = value
9
9
  }
10
10
 
@@ -1,10 +1,10 @@
1
- import { type Output } from '../../Directive'
2
- import { type Directive } from './types'
1
+ import type { Output } from '../../io'
2
+ import type { Directive } from './types'
3
3
 
4
4
  export class Throw implements Directive {
5
- private readonly message: any
5
+ private readonly message: string
6
6
 
7
- public constructor (message: any) {
7
+ public constructor (message: string) {
8
8
  this.message = message
9
9
  }
10
10
 
@@ -1,3 +1,3 @@
1
- import Family from './Family'
1
+ import { Development } from './Development'
2
2
 
3
- export = Family
3
+ export const dev = new Development()
@@ -1,4 +1,4 @@
1
- import { type Input, type Output } from '../../Directive'
1
+ import type { Input, Output } from '../../io'
2
2
 
3
3
  export interface Directive {
4
4
  apply: (input: Input) => Output
@@ -1,7 +1,11 @@
1
- import { type Family } from '../Directive'
2
- import Dev from './dev'
3
- import Auth from './auth'
4
- import Cache from './cache'
5
- import Octets from './octets'
1
+ import { dev } from './dev'
2
+ import { authorization } from './auth'
3
+ import { cache } from './cache'
4
+ import { octets } from './octets'
5
+ import { cors } from './cors'
6
+ import { vary } from './vary'
7
+ import type { Family } from '../Directive'
8
+ import type { Interceptor } from '../Interception'
6
9
 
7
- export const families: Family[] = [Auth, Octets, Dev, Cache]
10
+ export const families: Family[] = [authorization, cache, octets, vary, dev]
11
+ export const interceptors: Interceptor[] = [cors]
@@ -1,5 +1,5 @@
1
1
  import * as schemas from './schemas'
2
- import type { Output } from '../../Directive'
2
+ import type { Output } from '../../io'
3
3
  import type { Directive } from './types'
4
4
 
5
5
  export class Context implements Directive {