@toa.io/extensions.exposition 1.0.0-alpha.4 → 1.0.0-alpha.40

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 (396) hide show
  1. package/components/context.toa.yaml +2 -2
  2. package/components/identity.bans/manifest.toa.yaml +15 -7
  3. package/components/identity.bans/operations/transit.d.ts +14 -0
  4. package/components/identity.bans/operations/transit.js +11 -0
  5. package/components/identity.bans/operations/transit.js.map +1 -0
  6. package/components/identity.bans/operations/tsconfig.tsbuildinfo +1 -0
  7. package/components/identity.bans/source/transit.ts +21 -0
  8. package/components/identity.bans/tsconfig.json +9 -0
  9. package/components/identity.basic/manifest.toa.yaml +22 -9
  10. package/components/identity.basic/operations/authenticate.d.ts +5 -1
  11. package/components/identity.basic/operations/authenticate.js +5 -2
  12. package/components/identity.basic/operations/authenticate.js.map +1 -1
  13. package/components/identity.basic/operations/incept.d.ts +12 -0
  14. package/components/identity.basic/operations/incept.js +26 -0
  15. package/components/identity.basic/operations/incept.js.map +1 -0
  16. package/components/identity.basic/operations/transit.d.ts +4 -4
  17. package/components/identity.basic/operations/transit.js +5 -3
  18. package/components/identity.basic/operations/transit.js.map +1 -1
  19. package/components/identity.basic/operations/tsconfig.tsbuildinfo +1 -1
  20. package/components/identity.basic/operations/types.d.ts +8 -4
  21. package/components/identity.basic/source/authenticate.ts +16 -5
  22. package/components/identity.basic/source/incept.ts +38 -0
  23. package/components/identity.basic/source/transit.ts +8 -6
  24. package/components/identity.basic/source/types.ts +8 -4
  25. package/components/identity.federation/manifest.toa.yaml +28 -22
  26. package/components/identity.federation/operations/authenticate.d.ts +2 -2
  27. package/components/identity.federation/operations/authenticate.js +3 -10
  28. package/components/identity.federation/operations/authenticate.js.map +1 -1
  29. package/components/identity.federation/operations/incept.d.ts +11 -0
  30. package/components/identity.federation/operations/{create.js → incept.js} +6 -7
  31. package/components/identity.federation/operations/incept.js.map +1 -0
  32. package/components/identity.federation/operations/lib/jwt.d.ts +4 -5
  33. package/components/identity.federation/operations/lib/jwt.js +3 -3
  34. package/components/identity.federation/operations/lib/jwt.js.map +1 -1
  35. package/components/identity.federation/operations/tsconfig.tsbuildinfo +1 -1
  36. package/components/identity.federation/operations/types/configuration.d.ts +14 -0
  37. package/components/identity.federation/operations/types/configuration.js +3 -0
  38. package/components/identity.federation/operations/types/configuration.js.map +1 -0
  39. package/components/identity.federation/operations/{types.d.ts → types/context.d.ts} +13 -6
  40. package/components/identity.federation/operations/types/context.js +3 -0
  41. package/components/identity.federation/operations/types/context.js.map +1 -0
  42. package/components/identity.federation/operations/types/entity.d.ts +6 -0
  43. package/components/identity.federation/operations/{types.js → types/entity.js} +1 -1
  44. package/components/identity.federation/operations/types/entity.js.map +1 -0
  45. package/components/identity.federation/operations/types/index.d.ts +3 -0
  46. package/components/identity.federation/operations/types/index.js +20 -0
  47. package/components/identity.federation/operations/types/index.js.map +1 -0
  48. package/components/identity.federation/source/authenticate.ts +5 -18
  49. package/components/identity.federation/source/{create.ts → incept.ts} +10 -9
  50. package/components/identity.federation/source/lib/jwt.test.ts +2 -2
  51. package/components/identity.federation/source/lib/jwt.ts +7 -8
  52. package/components/identity.federation/source/types/configuration.ts +15 -0
  53. package/components/identity.federation/source/{types.ts → types/context.ts} +15 -5
  54. package/components/identity.federation/source/types/entity.ts +6 -0
  55. package/components/identity.federation/source/types/index.ts +3 -0
  56. package/components/identity.federation/tsconfig.json +2 -2
  57. package/components/identity.roles/manifest.toa.yaml +18 -6
  58. package/components/identity.roles/operations/grant.d.ts +10 -0
  59. package/components/identity.roles/operations/grant.js +21 -0
  60. package/components/identity.roles/operations/grant.js.map +1 -0
  61. package/components/identity.roles/operations/lib/Entity.d.ts +5 -0
  62. package/components/identity.roles/operations/lib/Entity.js +3 -0
  63. package/components/identity.roles/operations/lib/Entity.js.map +1 -0
  64. package/components/identity.roles/operations/list.d.ts +1 -4
  65. package/components/identity.roles/operations/list.js.map +1 -1
  66. package/components/identity.roles/operations/principal.d.ts +4 -6
  67. package/components/identity.roles/operations/principal.js +6 -1
  68. package/components/identity.roles/operations/principal.js.map +1 -1
  69. package/components/identity.roles/operations/tsconfig.tsbuildinfo +1 -1
  70. package/components/identity.roles/source/grant.ts +32 -0
  71. package/components/identity.roles/source/lib/Entity.ts +5 -0
  72. package/components/identity.roles/source/list.ts +2 -4
  73. package/components/identity.roles/source/principal.ts +10 -8
  74. package/components/identity.tokens/manifest.toa.yaml +19 -5
  75. package/components/identity.tokens/operations/authenticate.d.ts +2 -2
  76. package/components/identity.tokens/operations/authenticate.js +10 -4
  77. package/components/identity.tokens/operations/authenticate.js.map +1 -1
  78. package/components/identity.tokens/operations/decrypt.js +1 -0
  79. package/components/identity.tokens/operations/decrypt.js.map +1 -1
  80. package/components/identity.tokens/operations/encrypt.js +5 -1
  81. package/components/identity.tokens/operations/encrypt.js.map +1 -1
  82. package/components/identity.tokens/operations/tsconfig.tsbuildinfo +1 -1
  83. package/components/identity.tokens/operations/types.d.ts +8 -2
  84. package/components/identity.tokens/receivers/identity.bans.created.js +3 -0
  85. package/components/identity.tokens/source/authenticate.test.ts +11 -4
  86. package/components/identity.tokens/source/authenticate.ts +12 -5
  87. package/components/identity.tokens/source/decrypt.test.ts +5 -3
  88. package/components/identity.tokens/source/decrypt.ts +9 -8
  89. package/components/identity.tokens/source/encrypt.test.ts +26 -2
  90. package/components/identity.tokens/source/encrypt.ts +5 -1
  91. package/components/identity.tokens/source/types.ts +9 -2
  92. package/components/octets.storage/manifest.toa.yaml +0 -7
  93. package/documentation/access.md +27 -16
  94. package/documentation/authorities.md +53 -0
  95. package/documentation/cache.md +8 -1
  96. package/documentation/components.md +47 -22
  97. package/documentation/identity.md +17 -22
  98. package/documentation/io.md +56 -0
  99. package/documentation/protocol.md +3 -0
  100. package/documentation/query.md +17 -11
  101. package/documentation/require.md +15 -0
  102. package/documentation/tree.md +22 -4
  103. package/documentation/vary.md +14 -14
  104. package/features/access.feature +89 -47
  105. package/features/annotation.feature +2 -0
  106. package/features/authorities.basic.feature +141 -0
  107. package/features/authorities.feature +32 -0
  108. package/features/authorities.federation.feature +99 -0
  109. package/features/authorities.tokens.feature +118 -0
  110. package/features/body.feature +4 -0
  111. package/features/cache.feature +112 -5
  112. package/features/cors.feature +7 -2
  113. package/features/debug.feature +34 -0
  114. package/features/directives.feature +5 -0
  115. package/features/dynamic.feature +18 -7
  116. package/features/errors.feature +18 -4
  117. package/features/etag.feature +18 -1
  118. package/features/identity.bans.feature +137 -0
  119. package/features/identity.basic.feature +142 -19
  120. package/features/identity.feature +7 -2
  121. package/features/identity.federation.feature +67 -14
  122. package/features/identity.roles.feature +220 -4
  123. package/features/identity.tokens.feature +57 -4
  124. package/features/io.feature +205 -0
  125. package/features/octets.entries.feature +10 -0
  126. package/features/octets.feature +60 -64
  127. package/features/octets.meta.feature +7 -3
  128. package/features/octets.workflows.feature +14 -0
  129. package/features/probes.feature +14 -0
  130. package/features/{queries.feature → query.feature} +50 -3
  131. package/features/require.feature +67 -0
  132. package/features/response.feature +12 -3
  133. package/features/routes.feature +25 -12
  134. package/features/steps/Database.ts +17 -10
  135. package/features/steps/Gateway.ts +23 -6
  136. package/features/steps/IdP.ts +28 -23
  137. package/features/steps/components/echo/manifest.toa.yaml +5 -1
  138. package/features/steps/components/echo/operations/identity.js +7 -0
  139. package/features/steps/components/pots/manifest.toa.yaml +2 -0
  140. package/features/steps/components/users.properties/manifest.toa.yaml +2 -1
  141. package/features/streams.feature +1 -0
  142. package/features/timing.feature +27 -1
  143. package/features/vary.feature +105 -3
  144. package/package.json +12 -11
  145. package/readme.md +19 -14
  146. package/schemas/annotation.cos.yaml +1 -1
  147. package/schemas/io/input.cos.yaml +3 -0
  148. package/schemas/io/message.cos.yaml +5 -0
  149. package/schemas/io/output.cos.yaml +5 -0
  150. package/source/Annotation.ts +3 -3
  151. package/source/Context.ts +6 -4
  152. package/source/Directive.test.ts +4 -4
  153. package/source/Directive.ts +11 -38
  154. package/source/Endpoint.ts +43 -8
  155. package/source/Factory.ts +11 -7
  156. package/source/Gateway.ts +16 -44
  157. package/source/HTTP/Context.ts +24 -2
  158. package/source/HTTP/Server.ts +56 -43
  159. package/source/HTTP/exceptions.ts +7 -1
  160. package/source/HTTP/messages.ts +1 -1
  161. package/source/Mapping.ts +6 -1
  162. package/source/Query.test.ts +1 -1
  163. package/source/Query.ts +35 -24
  164. package/source/RTD/Context.ts +7 -10
  165. package/source/RTD/Directives.ts +28 -4
  166. package/source/RTD/Endpoint.ts +6 -4
  167. package/source/RTD/Match.ts +2 -7
  168. package/source/RTD/Method.ts +7 -13
  169. package/source/RTD/Node.ts +13 -14
  170. package/source/RTD/Tree.ts +17 -16
  171. package/source/RTD/factory.ts +3 -6
  172. package/source/Tenant.ts +0 -8
  173. package/source/deployment.ts +32 -22
  174. package/source/directives/auth/Authorization.ts +38 -19
  175. package/source/directives/auth/Delegate.ts +42 -0
  176. package/source/directives/auth/Incept.ts +3 -2
  177. package/source/directives/auth/Role.test.ts +53 -6
  178. package/source/directives/auth/Role.ts +22 -14
  179. package/source/directives/auth/types.ts +1 -1
  180. package/source/directives/cache/Cache.ts +15 -8
  181. package/source/directives/cache/Control.ts +42 -16
  182. package/source/directives/cors/CORS.ts +13 -7
  183. package/source/directives/dev/Development.ts +4 -4
  184. package/source/directives/index.ts +6 -4
  185. package/source/directives/io/Directive.ts +11 -0
  186. package/source/directives/io/IO.ts +43 -0
  187. package/source/directives/io/Input.ts +50 -0
  188. package/source/directives/io/Message.ts +1 -0
  189. package/source/directives/io/Output.ts +69 -0
  190. package/source/directives/io/index.ts +3 -0
  191. package/source/directives/io/schemas.ts +12 -0
  192. package/source/directives/octets/Context.ts +4 -3
  193. package/source/directives/octets/Delete.ts +4 -2
  194. package/source/directives/octets/Directive.ts +10 -0
  195. package/source/directives/octets/Fetch.ts +4 -3
  196. package/source/directives/octets/List.ts +4 -2
  197. package/source/directives/octets/Octets.ts +6 -8
  198. package/source/directives/octets/Store.ts +12 -4
  199. package/source/directives/octets/Workflow.ts +10 -3
  200. package/source/directives/octets/types.ts +0 -7
  201. package/source/directives/require/Directive.ts +5 -0
  202. package/source/directives/require/Headers.ts +20 -0
  203. package/source/directives/require/Require.ts +28 -0
  204. package/source/directives/require/index.ts +3 -0
  205. package/source/directives/vary/Directive.ts +2 -1
  206. package/source/directives/vary/Embed.ts +14 -8
  207. package/source/directives/vary/Vary.ts +7 -5
  208. package/source/directives/vary/embeddings/Authority.ts +8 -0
  209. package/source/directives/vary/embeddings/Embedding.ts +2 -1
  210. package/source/directives/vary/embeddings/Header.ts +8 -6
  211. package/source/directives/vary/embeddings/Language.ts +1 -1
  212. package/source/directives/vary/embeddings/Parameter.ts +14 -0
  213. package/source/directives/vary/embeddings/index.ts +6 -4
  214. package/source/exceptions.ts +22 -11
  215. package/source/root.ts +5 -0
  216. package/source/schemas.ts +1 -1
  217. package/transpiled/Annotation.d.ts +3 -3
  218. package/transpiled/Context.d.ts +6 -4
  219. package/transpiled/Directive.d.ts +4 -17
  220. package/transpiled/Directive.js +4 -7
  221. package/transpiled/Directive.js.map +1 -1
  222. package/transpiled/Endpoint.d.ts +5 -3
  223. package/transpiled/Endpoint.js +30 -5
  224. package/transpiled/Endpoint.js.map +1 -1
  225. package/transpiled/Factory.js +9 -4
  226. package/transpiled/Factory.js.map +1 -1
  227. package/transpiled/Gateway.d.ts +1 -4
  228. package/transpiled/Gateway.js +10 -26
  229. package/transpiled/Gateway.js.map +1 -1
  230. package/transpiled/HTTP/Context.d.ts +8 -1
  231. package/transpiled/HTTP/Context.js +15 -2
  232. package/transpiled/HTTP/Context.js.map +1 -1
  233. package/transpiled/HTTP/Server.d.ts +13 -2
  234. package/transpiled/HTTP/Server.js +41 -35
  235. package/transpiled/HTTP/Server.js.map +1 -1
  236. package/transpiled/HTTP/exceptions.d.ts +4 -1
  237. package/transpiled/HTTP/exceptions.js +7 -1
  238. package/transpiled/HTTP/exceptions.js.map +1 -1
  239. package/transpiled/HTTP/messages.js +1 -1
  240. package/transpiled/HTTP/messages.js.map +1 -1
  241. package/transpiled/Mapping.js +4 -1
  242. package/transpiled/Mapping.js.map +1 -1
  243. package/transpiled/Query.d.ts +1 -0
  244. package/transpiled/Query.js +21 -20
  245. package/transpiled/Query.js.map +1 -1
  246. package/transpiled/RTD/Context.d.ts +7 -6
  247. package/transpiled/RTD/Directives.d.ts +19 -4
  248. package/transpiled/RTD/Endpoint.d.ts +6 -4
  249. package/transpiled/RTD/Match.d.ts +2 -4
  250. package/transpiled/RTD/Method.d.ts +7 -7
  251. package/transpiled/RTD/Method.js.map +1 -1
  252. package/transpiled/RTD/Node.d.ts +4 -6
  253. package/transpiled/RTD/Node.js +2 -1
  254. package/transpiled/RTD/Node.js.map +1 -1
  255. package/transpiled/RTD/Tree.d.ts +6 -6
  256. package/transpiled/RTD/Tree.js +4 -1
  257. package/transpiled/RTD/Tree.js.map +1 -1
  258. package/transpiled/RTD/factory.d.ts +2 -4
  259. package/transpiled/RTD/factory.js +1 -1
  260. package/transpiled/RTD/factory.js.map +1 -1
  261. package/transpiled/Tenant.d.ts +0 -1
  262. package/transpiled/Tenant.js +0 -6
  263. package/transpiled/Tenant.js.map +1 -1
  264. package/transpiled/deployment.d.ts +1 -1
  265. package/transpiled/deployment.js +28 -20
  266. package/transpiled/deployment.js.map +1 -1
  267. package/transpiled/directives/auth/Authorization.d.ts +2 -3
  268. package/transpiled/directives/auth/Authorization.js +26 -12
  269. package/transpiled/directives/auth/Authorization.js.map +1 -1
  270. package/transpiled/directives/auth/Delegate.d.ts +10 -0
  271. package/transpiled/directives/auth/Delegate.js +34 -0
  272. package/transpiled/directives/auth/Delegate.js.map +1 -0
  273. package/transpiled/directives/auth/Incept.js +3 -2
  274. package/transpiled/directives/auth/Incept.js.map +1 -1
  275. package/transpiled/directives/auth/Role.d.ts +4 -1
  276. package/transpiled/directives/auth/Role.js +20 -14
  277. package/transpiled/directives/auth/Role.js.map +1 -1
  278. package/transpiled/directives/cache/Cache.d.ts +5 -5
  279. package/transpiled/directives/cache/Cache.js +10 -4
  280. package/transpiled/directives/cache/Cache.js.map +1 -1
  281. package/transpiled/directives/cache/Control.d.ts +2 -1
  282. package/transpiled/directives/cache/Control.js +29 -12
  283. package/transpiled/directives/cache/Control.js.map +1 -1
  284. package/transpiled/directives/cors/CORS.d.ts +2 -3
  285. package/transpiled/directives/cors/CORS.js +13 -7
  286. package/transpiled/directives/cors/CORS.js.map +1 -1
  287. package/transpiled/directives/dev/Development.d.ts +3 -3
  288. package/transpiled/directives/dev/Development.js +1 -1
  289. package/transpiled/directives/dev/Development.js.map +1 -1
  290. package/transpiled/directives/index.d.ts +2 -2
  291. package/transpiled/directives/index.js +5 -3
  292. package/transpiled/directives/index.js.map +1 -1
  293. package/transpiled/directives/io/Directive.d.ts +8 -0
  294. package/transpiled/directives/io/Directive.js +3 -0
  295. package/transpiled/directives/io/Directive.js.map +1 -0
  296. package/transpiled/directives/io/IO.d.ts +9 -0
  297. package/transpiled/directives/io/IO.js +33 -0
  298. package/transpiled/directives/io/IO.js.map +1 -0
  299. package/transpiled/directives/io/Input.d.ts +11 -0
  300. package/transpiled/directives/{octets/Permute.js → io/Input.js} +33 -26
  301. package/transpiled/directives/io/Input.js.map +1 -0
  302. package/transpiled/directives/io/Message.d.ts +1 -0
  303. package/transpiled/directives/io/Message.js +3 -0
  304. package/transpiled/directives/io/Message.js.map +1 -0
  305. package/transpiled/directives/io/Output.d.ts +13 -0
  306. package/transpiled/directives/io/Output.js +76 -0
  307. package/transpiled/directives/io/Output.js.map +1 -0
  308. package/transpiled/directives/io/index.d.ts +2 -0
  309. package/transpiled/directives/io/index.js +6 -0
  310. package/transpiled/directives/io/index.js.map +1 -0
  311. package/transpiled/directives/io/schemas.d.ts +7 -0
  312. package/transpiled/directives/io/schemas.js +14 -0
  313. package/transpiled/directives/io/schemas.js.map +1 -0
  314. package/transpiled/directives/octets/Context.d.ts +3 -3
  315. package/transpiled/directives/octets/Context.js +4 -2
  316. package/transpiled/directives/octets/Context.js.map +1 -1
  317. package/transpiled/directives/octets/Delete.d.ts +3 -2
  318. package/transpiled/directives/octets/Delete.js +3 -1
  319. package/transpiled/directives/octets/Delete.js.map +1 -1
  320. package/transpiled/directives/octets/Directive.d.ts +8 -0
  321. package/transpiled/directives/octets/Directive.js +8 -0
  322. package/transpiled/directives/octets/Directive.js.map +1 -0
  323. package/transpiled/directives/octets/Fetch.d.ts +3 -2
  324. package/transpiled/directives/octets/Fetch.js +3 -1
  325. package/transpiled/directives/octets/Fetch.js.map +1 -1
  326. package/transpiled/directives/octets/List.d.ts +3 -2
  327. package/transpiled/directives/octets/List.js +3 -1
  328. package/transpiled/directives/octets/List.js.map +1 -1
  329. package/transpiled/directives/octets/Octets.d.ts +4 -4
  330. package/transpiled/directives/octets/Octets.js +2 -4
  331. package/transpiled/directives/octets/Octets.js.map +1 -1
  332. package/transpiled/directives/octets/Store.d.ts +3 -2
  333. package/transpiled/directives/octets/Store.js +10 -3
  334. package/transpiled/directives/octets/Store.js.map +1 -1
  335. package/transpiled/directives/octets/Workflow.d.ts +3 -2
  336. package/transpiled/directives/octets/Workflow.js +9 -2
  337. package/transpiled/directives/octets/Workflow.js.map +1 -1
  338. package/transpiled/directives/octets/types.d.ts +0 -5
  339. package/transpiled/directives/require/Directive.d.ts +4 -0
  340. package/transpiled/directives/require/Directive.js +3 -0
  341. package/transpiled/directives/require/Directive.js.map +1 -0
  342. package/transpiled/directives/require/Headers.d.ts +7 -0
  343. package/transpiled/directives/require/Headers.js +19 -0
  344. package/transpiled/directives/require/Headers.js.map +1 -0
  345. package/transpiled/directives/require/Require.d.ts +9 -0
  346. package/transpiled/directives/require/Require.js +27 -0
  347. package/transpiled/directives/require/Require.js.map +1 -0
  348. package/transpiled/directives/require/index.d.ts +2 -0
  349. package/transpiled/directives/require/index.js +6 -0
  350. package/transpiled/directives/require/index.js.map +1 -0
  351. package/transpiled/directives/vary/Directive.d.ts +2 -1
  352. package/transpiled/directives/vary/Embed.d.ts +2 -1
  353. package/transpiled/directives/vary/Embed.js +8 -6
  354. package/transpiled/directives/vary/Embed.js.map +1 -1
  355. package/transpiled/directives/vary/Vary.d.ts +3 -3
  356. package/transpiled/directives/vary/Vary.js +3 -3
  357. package/transpiled/directives/vary/Vary.js.map +1 -1
  358. package/transpiled/directives/vary/embeddings/Authority.d.ts +5 -0
  359. package/transpiled/directives/vary/embeddings/Authority.js +10 -0
  360. package/transpiled/directives/vary/embeddings/Authority.js.map +1 -0
  361. package/transpiled/directives/vary/embeddings/Embedding.d.ts +2 -1
  362. package/transpiled/directives/vary/embeddings/Header.js +8 -6
  363. package/transpiled/directives/vary/embeddings/Header.js.map +1 -1
  364. package/transpiled/directives/vary/embeddings/Language.js +1 -1
  365. package/transpiled/directives/vary/embeddings/Language.js.map +1 -1
  366. package/transpiled/directives/vary/embeddings/Parameter.d.ts +7 -0
  367. package/transpiled/directives/vary/embeddings/Parameter.js +14 -0
  368. package/transpiled/directives/vary/embeddings/Parameter.js.map +1 -0
  369. package/transpiled/directives/vary/embeddings/index.d.ts +2 -2
  370. package/transpiled/directives/vary/embeddings/index.js +8 -4
  371. package/transpiled/directives/vary/embeddings/index.js.map +1 -1
  372. package/transpiled/exceptions.d.ts +3 -2
  373. package/transpiled/exceptions.js +13 -7
  374. package/transpiled/exceptions.js.map +1 -1
  375. package/transpiled/root.js +5 -0
  376. package/transpiled/root.js.map +1 -1
  377. package/transpiled/schemas.d.ts +1 -1
  378. package/transpiled/schemas.js +2 -2
  379. package/transpiled/schemas.js.map +1 -1
  380. package/transpiled/tsconfig.tsbuildinfo +1 -1
  381. package/components/identity.basic/operations/create.d.ts +0 -10
  382. package/components/identity.basic/operations/create.js +0 -10
  383. package/components/identity.basic/operations/create.js.map +0 -1
  384. package/components/identity.basic/source/create.ts +0 -18
  385. package/components/identity.federation/operations/create.d.ts +0 -10
  386. package/components/identity.federation/operations/create.js.map +0 -1
  387. package/components/identity.federation/operations/schemas.d.ts +0 -59
  388. package/components/identity.federation/operations/schemas.js +0 -9
  389. package/components/identity.federation/operations/schemas.js.map +0 -1
  390. package/components/identity.federation/operations/types.js.map +0 -1
  391. package/components/identity.federation/source/schemas.ts +0 -61
  392. package/components/octets.storage/operations/permute.js +0 -7
  393. package/source/HTTP/Server.test.ts +0 -126
  394. package/source/directives/octets/Permute.ts +0 -43
  395. package/transpiled/directives/octets/Permute.d.ts +0 -10
  396. package/transpiled/directives/octets/Permute.js.map +0 -1
package/source/Gateway.ts CHANGED
@@ -5,16 +5,13 @@ import type { Interception } from './Interception'
5
5
  import type { Method, Parameter, Tree } from './RTD'
6
6
  import type { Label } from './discovery'
7
7
  import type { Branch } from './Branch'
8
- import type { Endpoint } from './Endpoint'
9
- import type { Directives } from './Directive'
10
8
 
11
9
  export class Gateway extends Connector {
12
10
  private readonly broadcast: Broadcast
13
- private readonly tree: Tree<Endpoint, Directives>
11
+ private readonly tree: Tree
14
12
  private readonly interceptor: Interception
15
13
 
16
- // eslint-disable-next-line max-len
17
- public constructor (broadcast: Broadcast, tree: Tree<Endpoint, Directives>, interception: Interception) {
14
+ public constructor (broadcast: Broadcast, tree: Tree, interception: Interception) {
18
15
  super()
19
16
 
20
17
  this.broadcast = broadcast
@@ -25,7 +22,7 @@ export class Gateway extends Connector {
25
22
  }
26
23
 
27
24
  public async process (context: http.Context): Promise<http.OutgoingMessage> {
28
- const interception = await context.timing.capture('gate:intercept',
25
+ const interception = await context.timing.capture('intercept',
29
26
  this.interceptor.intercept(context))
30
27
 
31
28
  if (interception !== null)
@@ -34,25 +31,23 @@ export class Gateway extends Connector {
34
31
  const match = this.tree.match(context.url.pathname)
35
32
 
36
33
  if (match === null)
37
- throw new http.NotFound()
34
+ throw new http.NotFound('Route not found')
38
35
 
39
- const {
40
- node,
41
- parameters
42
- } = match
36
+ const { node, parameters } = match
43
37
 
44
38
  if (!(context.request.method in node.methods))
45
39
  throw new http.MethodNotAllowed()
46
40
 
47
41
  const method = node.methods[context.request.method]
48
42
 
49
- const interruption = await context.timing.capture('gate:preflight',
50
- method.directives.preflight(context, parameters))
43
+ const interruption = await context.timing.capture('preflight',
44
+ method.directives.preflight(context, parameters)).catch(rethrow)
51
45
 
52
46
  const response = interruption ??
53
- await context.timing.capture('gate:call', this.call(method, context, parameters))
47
+ await context.timing.capture('call', this.call(method, context, parameters))
54
48
 
55
- await context.timing.capture('gate:settle', method.directives.settle(context, response))
49
+ await context.timing.capture('settle',
50
+ method.directives.settle(context, response)).catch(rethrow)
56
51
 
57
52
  return response
58
53
  }
@@ -60,18 +55,16 @@ export class Gateway extends Connector {
60
55
  protected override async open (): Promise<void> {
61
56
  await this.discover()
62
57
 
63
- console.info('Gateway has started and is awaiting resource branches.')
58
+ console.info('Gateway has started and is awaiting resource branches')
64
59
  }
65
60
 
66
61
  protected override dispose (): void {
67
- console.info('Gateway is closed.')
62
+ console.info('Gateway is closed')
68
63
  }
69
64
 
70
- private async call
71
- (method: Method<Endpoint, Directives>, context: http.Context, parameters: Parameter[]):
72
- Promise<http.OutgoingMessage> {
65
+ private async call (method: Method, context: http.Context, parameters: Parameter[]): Promise<http.OutgoingMessage> {
73
66
  if (context.url.pathname[context.url.pathname.length - 1] !== '/')
74
- throw new http.NotFound('Trailing slash is required.')
67
+ throw new http.NotFound('Trailing slash is required')
75
68
 
76
69
  if (context.encoder === null)
77
70
  throw new http.NotAcceptable()
@@ -79,30 +72,11 @@ export class Gateway extends Connector {
79
72
  if (method.endpoint === null)
80
73
  throw new http.MethodNotAllowed()
81
74
 
82
- const body = await context.body()
83
- const query = this.query(context)
84
-
85
75
  return await method.endpoint
86
- .call(body, query, parameters)
76
+ .call(context, parameters)
87
77
  .catch(rethrow) as http.OutgoingMessage
88
78
  }
89
79
 
90
- private query (context: http.Context): http.Query {
91
- const query: http.Query = Object.fromEntries(context.url.searchParams)
92
- const etag = context.request.headers['if-match']
93
-
94
- if (etag !== undefined) {
95
- const match = etag.match(ETAG)
96
-
97
- if (match === null)
98
- throw new http.BadRequest('Invalid ETag.')
99
- else
100
- query.version = parseInt(match.groups!.version)
101
- }
102
-
103
- return query
104
- }
105
-
106
80
  private async discover (): Promise<void> {
107
81
  await this.broadcast.receive<Branch>('expose', this.merge.bind(this))
108
82
  await this.broadcast.transmit<null>('ping', null)
@@ -113,13 +87,11 @@ export class Gateway extends Connector {
113
87
  this.tree.merge(branch.node, branch)
114
88
 
115
89
  console.info('Resource branch of ' +
116
- `'${branch.namespace}.${branch.component}' has been merged.`)
90
+ `'${branch.namespace}.${branch.component}' has been merged`)
117
91
  } catch (exception) {
118
92
  console.error(exception)
119
93
  }
120
94
  }
121
95
  }
122
96
 
123
- const ETAG = /^"(?<version>\d{1,32})"$/
124
-
125
97
  export type Broadcast = bindings.Broadcast<Label>
@@ -6,22 +6,29 @@ import type { OutgoingMessage } from './messages'
6
6
  import type * as http from 'node:http'
7
7
 
8
8
  export class Context {
9
+ public readonly authority: string
9
10
  public readonly request: IncomingMessage
10
11
  public readonly url: URL
11
12
  public readonly subtype: string | null = null
12
13
  public readonly encoder: Format | null = null
13
14
  public readonly timing: Timing
15
+ public readonly debug: boolean
14
16
 
15
17
  public readonly pipelines: Pipelines = {
16
18
  body: [],
17
19
  response: []
18
20
  }
19
21
 
20
- public constructor (request: IncomingMessage, trace = false) {
22
+ public constructor (authority: string, request: IncomingMessage, properties: Properties) {
23
+ this.authority = authority
21
24
  this.request = request
22
25
 
23
26
  this.url = new URL(request.url, `https://${request.headers.host}`)
24
- this.timing = new Timing(trace)
27
+ this.timing = new Timing(properties.trace)
28
+ this.debug = properties.debug
29
+
30
+ if (this.debug)
31
+ this.log(request)
25
32
 
26
33
  if (this.request.headers.accept !== undefined) {
27
34
  const match = SUBTYPE.exec(this.request.headers.accept)
@@ -52,6 +59,16 @@ export class Context {
52
59
  ? value
53
60
  : this.pipelines.body.reduce((value, transform) => transform(value), value)
54
61
  }
62
+
63
+ private log (request: IncomingMessage): void {
64
+ const message = `${request.method} ${request.url}`
65
+ const { authorization, ...headers } = request.headers
66
+
67
+ if (authorization !== undefined)
68
+ headers.authorization = authorization.slice(0, authorization.indexOf(' '))
69
+
70
+ console.debug(message, headers)
71
+ }
55
72
  }
56
73
 
57
74
  export interface IncomingMessage extends http.IncomingMessage {
@@ -64,4 +81,9 @@ interface Pipelines {
64
81
  response: Array<(output: OutgoingMessage) => void>
65
82
  }
66
83
 
84
+ interface Properties {
85
+ debug: boolean
86
+ trace: boolean
87
+ }
88
+
67
89
  const SUBTYPE = /^(?<type>\w{1,32})\/(vnd\.toa\.(?<subtype>\S{1,32})\+)(?<suffix>\S{1,32})$/
@@ -1,10 +1,9 @@
1
1
  import fs from 'node:fs'
2
2
  import os from 'node:os'
3
3
  import * as http from 'node:http'
4
- import assert from 'node:assert'
5
4
  import { once } from 'node:events'
5
+ import { setTimeout } from 'node:timers/promises'
6
6
  import { Connector } from '@toa.io/core'
7
- import { promex } from '@toa.io/generic'
8
7
  import { type OutgoingMessage, write } from './messages'
9
8
  import { ClientError, Exception } from './exceptions'
10
9
  import { Context } from './Context'
@@ -13,32 +12,22 @@ import type { IncomingMessage } from './Context'
13
12
  export class Server extends Connector {
14
13
  private readonly server: http.Server = http.createServer()
15
14
  private readonly properties: Properties
15
+ private readonly authorities: Record<string, string>
16
16
  private process?: Processing
17
+ private ready: boolean = false
18
+ private startedAt: number = 0
17
19
 
18
20
  private constructor (properties: Properties) {
19
21
  super()
20
22
 
21
23
  this.properties = properties
24
+ this.authorities = Object.fromEntries(Object.entries(properties.authorities).map(([key, value]) => [value, key]))
22
25
 
23
26
  this.server.on('request', (req, res) => this.listener(req, res))
24
27
  }
25
28
 
26
- public get port (): number {
27
- if (this.properties.port !== 0)
28
- return this.properties.port
29
-
30
- const address = this.server.address()
31
-
32
- if (address === null || typeof address === 'string')
33
- throw new Error('Server is not listening on a port.')
34
-
35
- return address.port
36
- }
37
-
38
- public static create (options?: Partial<Properties>): Server {
39
- const properties = options === undefined
40
- ? DEFAULTS
41
- : { ...DEFAULTS, ...options }
29
+ public static create (options: Options): Server {
30
+ const properties: Properties = Object.assign({}, DEFAULTS, options)
42
31
 
43
32
  return new Server(properties)
44
33
  }
@@ -48,21 +37,29 @@ export class Server extends Connector {
48
37
  }
49
38
 
50
39
  protected override async open (): Promise<void> {
40
+ this.startedAt = Date.now()
51
41
  this.server.listen(this.properties.port)
52
42
 
53
43
  await once(this.server, 'listening')
54
44
 
55
- console.info('HTTP Server is listening.')
45
+ console.info('HTTP Server is listening')
46
+
47
+ await setTimeout(this.properties.delay)
48
+
49
+ this.ready = true
50
+
51
+ console.info('Ready')
56
52
  }
57
53
 
58
54
  protected override async close (): Promise<void> {
59
55
  this.server.close()
56
+ this.ready = false
60
57
 
61
- console.info('HTTP Server stopped accepting new connections.')
58
+ console.info('HTTP Server stopped accepting new connections')
62
59
 
63
60
  await once(this.server, 'close')
64
61
 
65
- console.info('HTTP Server has been stopped.')
62
+ console.info('HTTP Server has been stopped')
66
63
  }
67
64
 
68
65
  private listener (request: http.IncomingMessage, response: http.ServerResponse): void {
@@ -72,18 +69,28 @@ export class Server extends Connector {
72
69
  return
73
70
  }
74
71
 
75
- if (request.url === undefined) {
76
- response.writeHead(400).end()
72
+ if (request.url === '/.ready') {
73
+ if (this.ready)
74
+ response.writeHead(200, { 'cache-control': 'no-store' }).end()
75
+ else {
76
+ const remaining = (Math.ceil((Date.now() - this.startedAt) / 1000)).toString()
77
+
78
+ response.writeHead(503, { 'retry-after': remaining }).end()
79
+ }
77
80
 
78
81
  return
79
82
  }
80
83
 
81
- assert.ok(this.process !== undefined,
82
- 'No processing function has been attached to the server.')
84
+ if (request.headers.host === undefined || !(request.headers.host in this.authorities)) {
85
+ response.writeHead(404).end('Unknown authority')
86
+
87
+ return
88
+ }
83
89
 
84
- const context = new Context(request as IncomingMessage, this.properties.trace)
90
+ const authority = this.authorities[request.headers.host]
91
+ const context = new Context(authority, request as IncomingMessage, this.properties)
85
92
 
86
- this.process(context)
93
+ this.process!(context)
87
94
  .then(this.success(context, response))
88
95
  .catch(this.fail(context, response))
89
96
  }
@@ -102,7 +109,7 @@ export class Server extends Connector {
102
109
  else
103
110
  status = 200
104
111
 
105
- response.statusCode = status
112
+ response.statusCode = message.status = status
106
113
  write(context, response, message)
107
114
  }
108
115
  }
@@ -112,17 +119,16 @@ export class Server extends Connector {
112
119
  if (!context.request.complete)
113
120
  await adam(context.request)
114
121
 
115
- response.statusCode = exception instanceof Exception
116
- ? exception.status
117
- : 500
122
+ response.statusCode = exception instanceof Exception ? exception.status : 500
118
123
 
119
- const message: OutgoingMessage = {}
124
+ const message: OutgoingMessage = { status: response.statusCode }
120
125
  const verbose = exception instanceof ClientError || this.properties.debug
121
126
 
122
127
  if (verbose)
123
- message.body = exception instanceof Exception
124
- ? exception.body
125
- : (exception.stack ?? exception.message)
128
+ message.body =
129
+ exception instanceof Exception
130
+ ? exception.body
131
+ : exception.stack ?? exception.message
126
132
 
127
133
  write(context, response, message)
128
134
  }
@@ -130,29 +136,36 @@ export class Server extends Connector {
130
136
  }
131
137
 
132
138
  // https://github.com/whatwg/fetch/issues/1254
133
- async function adam (request: http.IncomingMessage): Promise<void> {
134
- const completed = promex()
139
+ async function adam (request: http.IncomingMessage): Promise<any> {
135
140
  const devnull = fs.createWriteStream(os.devNull)
136
141
 
137
- request
138
- .on('end', completed.callback)
139
- .pipe(devnull)
142
+ request.pipe(devnull)
140
143
 
141
- return completed
144
+ return once(request, 'end')
142
145
  }
143
146
 
144
- const DEFAULTS: Properties = {
147
+ export const PORT = 8000
148
+ export const DELAY = 3 // seconds
149
+
150
+ const DEFAULTS: Omit<Properties, 'authorities'> = {
145
151
  methods: new Set<string>(['GET', 'POST', 'PUT', 'PATCH', 'DELETE', 'OPTIONS']),
146
152
  debug: false,
147
153
  trace: false,
148
- port: 8000
154
+ port: PORT,
155
+ delay: DELAY * 1000
149
156
  }
150
157
 
151
158
  interface Properties {
159
+ authorities: Record<string, string>
152
160
  methods: Set<string>
153
161
  debug: boolean
154
162
  trace: boolean
155
163
  port: number
164
+ delay: number
165
+ }
166
+
167
+ export type Options = { authorities: Properties['authorities'] } & {
168
+ [K in Exclude<keyof Properties, 'authorities'>]?: Properties[K]
156
169
  }
157
170
 
158
171
  export type Processing = (input: Context) => Promise<OutgoingMessage>
@@ -37,11 +37,17 @@ export class NotFound extends ClientError {
37
37
  }
38
38
 
39
39
  export class Conflict extends ClientError {
40
- public constructor (body: any) {
40
+ public constructor (body?: any) {
41
41
  super(409, body)
42
42
  }
43
43
  }
44
44
 
45
+ export class UnprocessableEntity extends ClientError {
46
+ public constructor (body?: any) {
47
+ super(422, body)
48
+ }
49
+ }
50
+
45
51
  export class MethodNotAllowed extends ClientError {
46
52
  public constructor () {
47
53
  super(405)
@@ -29,7 +29,7 @@ export async function read (context: Context): Promise<any> {
29
29
  throw new UnsupportedMediaType()
30
30
 
31
31
  const format = formats[type]
32
- const buf = await context.timing.capture('req:buffer', buffer(context.request))
32
+ const buf = await context.timing.capture('buffer', buffer(context.request))
33
33
 
34
34
  try {
35
35
  return format.decode(buf)
package/source/Mapping.ts CHANGED
@@ -38,6 +38,8 @@ class QueryableMapping extends Mapping {
38
38
 
39
39
  class InputMapping extends Mapping {
40
40
  public fit (input: any, _: unknown, parameters: Parameter[]): core.Request {
41
+ const request: core.Request = {}
42
+
41
43
  if (input === undefined && parameters.length > 0)
42
44
  input = {}
43
45
 
@@ -45,6 +47,9 @@ class InputMapping extends Mapping {
45
47
  for (const parameter of parameters)
46
48
  input[parameter.name] = parameter.value
47
49
 
48
- return { input }
50
+ if (input !== undefined)
51
+ request.input = input
52
+
53
+ return request
49
54
  }
50
55
  }
@@ -16,7 +16,7 @@ it('should combine request criteria', async () => {
16
16
  const instance = new Query(query)
17
17
  const result = instance.fit({ criteria: 'qux==4' }, parameters)
18
18
 
19
- expect(result.criteria).toStrictEqual('(foo==1);(bar==2;baz==3);(qux==4)')
19
+ expect(result.criteria).toStrictEqual('(bar==2;baz==3);(foo==1);(qux==4)')
20
20
  })
21
21
 
22
22
  it('should set id parameter as query.id', async () => {
package/source/Query.ts CHANGED
@@ -7,13 +7,20 @@ import type * as core from '@toa.io/core'
7
7
  export class Query {
8
8
  private readonly query: syntax.Query
9
9
  private readonly closed: boolean = false
10
+ private readonly prepend: ',' | ';' = ';'
10
11
 
11
12
  public constructor (query: syntax.Query) {
12
13
  if (query.criteria !== undefined) {
13
- const open = query.criteria[query.criteria.length - 1] === ';'
14
+ if (query.criteria.endsWith(';'))
15
+ query.criteria = query.criteria.slice(0, -1)
16
+ else
17
+ this.closed = true
14
18
 
15
- if (open) query.criteria = query.criteria.slice(0, -1)
16
- else this.closed = true
19
+ if (query.criteria.startsWith(',') || query.criteria.startsWith(';')) {
20
+ this.prepend = query.criteria[0] as ',' | ';'
21
+
22
+ query.criteria = query.criteria.slice(1)
23
+ }
17
24
  }
18
25
 
19
26
  this.query = query
@@ -33,11 +40,7 @@ export class Query {
33
40
  }
34
41
 
35
42
  private fitCriteria (query: http.Query, parameters: Parameter[]): void {
36
- const criteria: string[] = []
37
-
38
- if (this.query.criteria !== undefined)
39
- criteria.push(this.query.criteria)
40
-
43
+ const groups: CriteriaGroup[] = []
41
44
  const idx = parameters.findIndex((parameter) => parameter.name === 'id')
42
45
 
43
46
  if (idx !== -1) {
@@ -47,27 +50,28 @@ export class Query {
47
50
  }
48
51
 
49
52
  if (parameters.length > 0) {
50
- const chunks = parameters
53
+ const criteria = parameters
51
54
  .map(({ name, value }) => `${name}==${value}`)
52
55
  .join(';')
53
56
 
54
- criteria.push(chunks)
57
+ groups.push({ criteria, operator: this.prepend })
55
58
  }
56
59
 
60
+ if (this.query.criteria !== undefined)
61
+ groups.push({ criteria: this.query.criteria, operator: ';' })
62
+
57
63
  if (query.criteria !== undefined)
58
- if (this.closed) throw new http.BadRequest('Query criteria is closed.')
59
- else criteria.push(query.criteria)
60
-
61
- switch (criteria.length) {
62
- case 0:
63
- break
64
- case 1:
65
- query.criteria = criteria[0]
66
- break
67
- default:
68
- query.criteria = '(' + criteria.join(');(') + ')'
69
- break
70
- }
64
+ if (this.closed)
65
+ throw new http.BadRequest('Query criteria is closed')
66
+ else
67
+ groups.push({ criteria: query.criteria, operator: WHATEVER })
68
+
69
+ if (groups.length > 0)
70
+ query.criteria = groups.reduce((acc, { criteria, operator }, i) => {
71
+ return i === groups.length - 1
72
+ ? `${acc}(${criteria})`
73
+ : `${acc}(${criteria})${operator}`
74
+ }, '')
71
75
  }
72
76
 
73
77
  private fitRanges (qs: http.Query): void {
@@ -99,7 +103,14 @@ function fit (string: string, range: [number, number], name: string): number {
99
103
 
100
104
  if (number < range[0] || number > range[1])
101
105
  throw new http.BadRequest(`Query ${name} must be between ` +
102
- `${range[0]} and ${range[1]} inclusive.`)
106
+ `${range[0]} and ${range[1]} inclusive`)
103
107
 
104
108
  return number
105
109
  }
110
+
111
+ const WHATEVER = ';'
112
+
113
+ interface CriteriaGroup {
114
+ criteria: string
115
+ operator: ',' | ';'
116
+ }
@@ -1,16 +1,13 @@
1
- import { type Directives, type DirectivesFactory } from './Directives'
2
- import { type Endpoint, type EndpointsFactory } from './Endpoint'
1
+ import { type DirectiveFactory } from './Directives'
2
+ import { type EndpointsFactory } from './Endpoint'
3
+ import type { Directive } from './syntax'
3
4
 
4
- export interface Context<
5
- TEndpoint extends Endpoint = any,
6
- TDirectives extends Directives<TDirectives> = any,
7
- TExtension = any
8
- > {
5
+ export interface Context<TExtension = any> {
9
6
  readonly protected: boolean
10
- readonly endpoints: EndpointsFactory<TEndpoint>
7
+ readonly endpoints: EndpointsFactory
11
8
  readonly directives: {
12
- readonly factory: DirectivesFactory
13
- stack: TDirectives[]
9
+ readonly factory: DirectiveFactory
10
+ stack: Directive[]
14
11
  }
15
12
  readonly extension?: TExtension
16
13
  }
@@ -1,9 +1,33 @@
1
+ import type { Parameter } from './Match'
1
2
  import type * as syntax from './syntax'
3
+ import type { Context, OutgoingMessage } from '../HTTP'
4
+ import type { Output } from '../io'
2
5
 
3
- export interface Directives<TDirective = any> {
4
- merge: (directive: TDirective) => void
6
+ export interface Directives {
7
+ preflight: (context: Context, parameters: Parameter[]) => Promise<Output>
8
+ settle: (context: Context, response: OutgoingMessage) => Promise<void>
5
9
  }
6
10
 
7
- export interface DirectivesFactory<T = any> {
8
- create: (directives: syntax.Directive[]) => T
11
+ export interface DirectiveFactory {
12
+ create: (directives: syntax.Directive[]) => Directives
13
+ }
14
+
15
+ export interface DirectiveSet {
16
+ family: DirectiveFamily
17
+ directives: any[]
18
+ }
19
+
20
+ export interface DirectiveFamily<TDirective = any, TExtension = any> {
21
+ readonly name: string
22
+ readonly mandatory: boolean
23
+
24
+ create: (name: string, ...rest: any[]) => TDirective
25
+
26
+ preflight?: (directives: TDirective[],
27
+ request: Context & TExtension,
28
+ parameters: Parameter[]) => Output | Promise<Output>
29
+
30
+ settle?: (directives: TDirective[],
31
+ request: Context & TExtension,
32
+ response: OutgoingMessage) => void | Promise<void>
9
33
  }
@@ -1,11 +1,13 @@
1
1
  import { type Context } from './Context'
2
+ import type * as http from '../HTTP'
2
3
  import type * as syntax from './syntax'
4
+ import type * as RTD from './index'
3
5
 
4
- export interface Endpoint<T extends Endpoint = any> {
5
- call: T['call']
6
+ export interface Endpoint {
7
+ call: (context: http.Context, parameters: RTD.Parameter[]) => Promise<http.OutgoingMessage>
6
8
  close: () => Promise<void>
7
9
  }
8
10
 
9
- export interface EndpointsFactory<T extends Endpoint<T> = any> {
10
- create: (method: syntax.Method, context: Context) => T
11
+ export interface EndpointsFactory {
12
+ create: (method: syntax.Method, context: Context) => Endpoint
11
13
  }
@@ -1,12 +1,7 @@
1
1
  import { type Node } from './Node'
2
- import { type Directives } from './Directives'
3
- import { type Endpoint } from './Endpoint'
4
2
 
5
- export interface Match<
6
- TEndpoint extends Endpoint<TEndpoint> = any,
7
- TDirectives extends Directives<TDirectives> = any
8
- > {
9
- node: Node<TEndpoint, TDirectives>
3
+ export interface Match {
4
+ node: Node
10
5
  parameters: Parameter[]
11
6
  }
12
7
 
@@ -1,14 +1,11 @@
1
- import { type Directives } from './Directives'
2
- import { type Endpoint } from './Endpoint'
1
+ import type { Endpoint } from './Endpoint'
2
+ import type { Directives } from './Directives'
3
3
 
4
- export class Method<
5
- TEndpoint extends Endpoint<TEndpoint> = any,
6
- TDirectives extends Directives<TDirectives> = any
7
- > {
8
- public readonly endpoint: TEndpoint | null
9
- public readonly directives: TDirectives
4
+ export class Method {
5
+ public readonly endpoint: Endpoint | null
6
+ public readonly directives: Directives
10
7
 
11
- public constructor (endpoint: TEndpoint | null, directives: TDirectives) {
8
+ public constructor (endpoint: Endpoint | null, directives: Directives) {
12
9
  this.endpoint = endpoint
13
10
  this.directives = directives
14
11
  }
@@ -18,7 +15,4 @@ export class Method<
18
15
  }
19
16
  }
20
17
 
21
- export type Methods<
22
- TEndpoint extends Endpoint<TEndpoint> = any,
23
- TDirectives extends Directives<TDirectives> = any
24
- > = Record<string, Method<TEndpoint, TDirectives>>
18
+ export type Methods = Record<string, Method>