@sapphire/plugin-api 5.2.1-next.f01b974.0 → 6.0.0-next.dede596.0

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 (300) hide show
  1. package/dist/cjs/index.cjs +134 -0
  2. package/dist/cjs/index.cjs.map +1 -0
  3. package/dist/cjs/index.d.ts +1134 -0
  4. package/dist/cjs/lib/structures/Augmentations.d.cjs +4 -0
  5. package/dist/cjs/lib/structures/Augmentations.d.cjs.map +1 -0
  6. package/dist/cjs/lib/structures/MediaParser.cjs +83 -0
  7. package/dist/cjs/lib/structures/MediaParser.cjs.map +1 -0
  8. package/dist/cjs/lib/structures/MediaParserStore.cjs +27 -0
  9. package/dist/cjs/lib/structures/MediaParserStore.cjs.map +1 -0
  10. package/dist/cjs/lib/structures/Middleware.cjs +34 -0
  11. package/dist/cjs/lib/structures/Middleware.cjs.map +1 -0
  12. package/dist/cjs/lib/structures/MiddlewareStore.cjs +53 -0
  13. package/dist/cjs/lib/structures/MiddlewareStore.cjs.map +1 -0
  14. package/dist/cjs/lib/structures/Route.cjs +72 -0
  15. package/dist/cjs/lib/structures/Route.cjs.map +1 -0
  16. package/dist/cjs/lib/structures/RouteStore.cjs +68 -0
  17. package/dist/cjs/lib/structures/RouteStore.cjs.map +1 -0
  18. package/dist/cjs/lib/structures/api/ApiRequest.cjs +42 -0
  19. package/dist/cjs/lib/structures/api/ApiRequest.cjs.map +1 -0
  20. package/dist/cjs/lib/structures/api/ApiResponse.cjs +126 -0
  21. package/dist/cjs/lib/structures/api/ApiResponse.cjs.map +1 -0
  22. package/dist/cjs/lib/structures/api/CookieStore.cjs +106 -0
  23. package/dist/cjs/lib/structures/api/CookieStore.cjs.map +1 -0
  24. package/dist/cjs/lib/structures/http/Auth.cjs +152 -0
  25. package/dist/cjs/lib/structures/http/Auth.cjs.map +1 -0
  26. package/dist/cjs/lib/structures/http/HttpCodes.cjs +70 -0
  27. package/dist/cjs/lib/structures/http/HttpCodes.cjs.map +1 -0
  28. package/dist/cjs/lib/structures/http/HttpMethods.cjs +12 -0
  29. package/dist/cjs/lib/structures/http/HttpMethods.cjs.map +1 -0
  30. package/dist/cjs/lib/structures/http/Server.cjs +127 -0
  31. package/dist/cjs/lib/structures/http/Server.cjs.map +1 -0
  32. package/dist/cjs/lib/utils/MimeTypes.cjs +26 -0
  33. package/dist/cjs/lib/utils/MimeTypes.cjs.map +1 -0
  34. package/dist/cjs/lib/utils/RouteData.cjs +73 -0
  35. package/dist/cjs/lib/utils/RouteData.cjs.map +1 -0
  36. package/dist/cjs/listeners/PluginRouteError.cjs +24 -0
  37. package/dist/cjs/listeners/PluginRouteError.cjs.map +1 -0
  38. package/dist/cjs/listeners/PluginServerMatch.cjs +26 -0
  39. package/dist/cjs/listeners/PluginServerMatch.cjs.map +1 -0
  40. package/dist/cjs/listeners/PluginServerMiddlewareError.cjs +24 -0
  41. package/dist/cjs/listeners/PluginServerMiddlewareError.cjs.map +1 -0
  42. package/dist/cjs/listeners/PluginServerMiddlewareSuccess.cjs +25 -0
  43. package/dist/cjs/listeners/PluginServerMiddlewareSuccess.cjs.map +1 -0
  44. package/dist/cjs/listeners/PluginServerNoMatch.cjs +22 -0
  45. package/dist/cjs/listeners/PluginServerNoMatch.cjs.map +1 -0
  46. package/dist/cjs/listeners/PluginServerRequest.cjs +32 -0
  47. package/dist/cjs/listeners/PluginServerRequest.cjs.map +1 -0
  48. package/dist/cjs/listeners/_load.cjs +26 -0
  49. package/dist/cjs/listeners/_load.cjs.map +1 -0
  50. package/dist/cjs/mediaParsers/_load.cjs +20 -0
  51. package/dist/cjs/mediaParsers/_load.cjs.map +1 -0
  52. package/dist/cjs/mediaParsers/applicationFormUrlEncoded.cjs +23 -0
  53. package/dist/cjs/mediaParsers/applicationFormUrlEncoded.cjs.map +1 -0
  54. package/dist/cjs/mediaParsers/applicationJson.cjs +22 -0
  55. package/dist/cjs/mediaParsers/applicationJson.cjs.map +1 -0
  56. package/dist/cjs/mediaParsers/textPlain.cjs +22 -0
  57. package/dist/cjs/mediaParsers/textPlain.cjs.map +1 -0
  58. package/dist/cjs/middlewares/_load.cjs +22 -0
  59. package/dist/cjs/middlewares/_load.cjs.map +1 -0
  60. package/dist/cjs/middlewares/auth.cjs +36 -0
  61. package/dist/cjs/middlewares/auth.cjs.map +1 -0
  62. package/dist/cjs/middlewares/body.cjs +50 -0
  63. package/dist/cjs/middlewares/body.cjs.map +1 -0
  64. package/dist/cjs/middlewares/cookies.cjs +30 -0
  65. package/dist/cjs/middlewares/cookies.cjs.map +1 -0
  66. package/dist/cjs/middlewares/headers.cjs +59 -0
  67. package/dist/cjs/middlewares/headers.cjs.map +1 -0
  68. package/dist/cjs/register.cjs +37 -0
  69. package/dist/cjs/register.cjs.map +1 -0
  70. package/dist/{register.d.ts → cjs/register.d.ts} +6 -5
  71. package/dist/cjs/routes/_load.cjs +18 -0
  72. package/dist/cjs/routes/_load.cjs.map +1 -0
  73. package/dist/cjs/routes/oauth/callback.cjs +79 -0
  74. package/dist/cjs/routes/oauth/callback.cjs.map +1 -0
  75. package/dist/cjs/routes/oauth/logout.cjs +66 -0
  76. package/dist/cjs/routes/oauth/logout.cjs.map +1 -0
  77. package/dist/esm/chunk-PYETHG4R.mjs +29 -0
  78. package/dist/esm/chunk-PYETHG4R.mjs.map +1 -0
  79. package/dist/esm/index.d.mts +1134 -0
  80. package/dist/esm/index.mjs +26 -0
  81. package/dist/esm/index.mjs.map +1 -0
  82. package/dist/esm/lib/structures/Augmentations.d.mjs +3 -0
  83. package/dist/esm/lib/structures/Augmentations.d.mjs.map +1 -0
  84. package/dist/esm/lib/structures/MediaParser.mjs +80 -0
  85. package/dist/esm/lib/structures/MediaParser.mjs.map +1 -0
  86. package/dist/esm/lib/structures/MediaParserStore.mjs +24 -0
  87. package/dist/esm/lib/structures/MediaParserStore.mjs.map +1 -0
  88. package/dist/esm/lib/structures/Middleware.mjs +26 -0
  89. package/dist/esm/lib/structures/Middleware.mjs.map +1 -0
  90. package/dist/esm/lib/structures/MiddlewareStore.mjs +45 -0
  91. package/dist/esm/lib/structures/MiddlewareStore.mjs.map +1 -0
  92. package/dist/esm/lib/structures/Route.mjs +64 -0
  93. package/dist/esm/lib/structures/Route.mjs.map +1 -0
  94. package/dist/esm/lib/structures/RouteStore.mjs +60 -0
  95. package/dist/esm/lib/structures/RouteStore.mjs.map +1 -0
  96. package/dist/esm/lib/structures/api/ApiRequest.mjs +34 -0
  97. package/dist/esm/lib/structures/api/ApiRequest.mjs.map +1 -0
  98. package/dist/esm/lib/structures/api/ApiResponse.mjs +118 -0
  99. package/dist/esm/lib/structures/api/ApiResponse.mjs.map +1 -0
  100. package/dist/esm/lib/structures/api/CookieStore.mjs +98 -0
  101. package/dist/esm/lib/structures/api/CookieStore.mjs.map +1 -0
  102. package/dist/esm/lib/structures/http/Auth.mjs +126 -0
  103. package/dist/esm/lib/structures/http/Auth.mjs.map +1 -0
  104. package/dist/esm/lib/structures/http/HttpCodes.mjs +70 -0
  105. package/dist/esm/lib/structures/http/HttpCodes.mjs.map +1 -0
  106. package/dist/esm/lib/structures/http/HttpMethods.mjs +9 -0
  107. package/dist/esm/lib/structures/http/HttpMethods.mjs.map +1 -0
  108. package/dist/esm/lib/structures/http/Server.mjs +118 -0
  109. package/dist/esm/lib/structures/http/Server.mjs.map +1 -0
  110. package/dist/esm/lib/utils/MimeTypes.mjs +26 -0
  111. package/dist/esm/lib/utils/MimeTypes.mjs.map +1 -0
  112. package/dist/esm/lib/utils/RouteData.mjs +64 -0
  113. package/dist/esm/lib/utils/RouteData.mjs.map +1 -0
  114. package/dist/esm/listeners/PluginRouteError.mjs +21 -0
  115. package/dist/esm/listeners/PluginRouteError.mjs.map +1 -0
  116. package/dist/esm/listeners/PluginServerMatch.mjs +23 -0
  117. package/dist/esm/listeners/PluginServerMatch.mjs.map +1 -0
  118. package/dist/esm/listeners/PluginServerMiddlewareError.mjs +21 -0
  119. package/dist/esm/listeners/PluginServerMiddlewareError.mjs.map +1 -0
  120. package/dist/esm/listeners/PluginServerMiddlewareSuccess.mjs +22 -0
  121. package/dist/esm/listeners/PluginServerMiddlewareSuccess.mjs.map +1 -0
  122. package/dist/esm/listeners/PluginServerNoMatch.mjs +19 -0
  123. package/dist/esm/listeners/PluginServerNoMatch.mjs.map +1 -0
  124. package/dist/esm/listeners/PluginServerRequest.mjs +29 -0
  125. package/dist/esm/listeners/PluginServerRequest.mjs.map +1 -0
  126. package/dist/esm/listeners/_load.mjs +23 -0
  127. package/dist/esm/listeners/_load.mjs.map +1 -0
  128. package/dist/esm/mediaParsers/_load.mjs +17 -0
  129. package/dist/esm/mediaParsers/_load.mjs.map +1 -0
  130. package/dist/esm/mediaParsers/applicationFormUrlEncoded.mjs +20 -0
  131. package/dist/esm/mediaParsers/applicationFormUrlEncoded.mjs.map +1 -0
  132. package/dist/esm/mediaParsers/applicationJson.mjs +19 -0
  133. package/dist/esm/mediaParsers/applicationJson.mjs.map +1 -0
  134. package/dist/esm/mediaParsers/textPlain.mjs +19 -0
  135. package/dist/esm/mediaParsers/textPlain.mjs.map +1 -0
  136. package/dist/esm/middlewares/_load.mjs +19 -0
  137. package/dist/esm/middlewares/_load.mjs.map +1 -0
  138. package/dist/esm/middlewares/auth.mjs +28 -0
  139. package/dist/esm/middlewares/auth.mjs.map +1 -0
  140. package/dist/esm/middlewares/body.mjs +42 -0
  141. package/dist/esm/middlewares/body.mjs.map +1 -0
  142. package/dist/esm/middlewares/cookies.mjs +22 -0
  143. package/dist/esm/middlewares/cookies.mjs.map +1 -0
  144. package/dist/esm/middlewares/headers.mjs +51 -0
  145. package/dist/esm/middlewares/headers.mjs.map +1 -0
  146. package/dist/esm/register.d.mts +18 -0
  147. package/dist/esm/register.mjs +34 -0
  148. package/dist/esm/register.mjs.map +1 -0
  149. package/dist/esm/routes/_load.mjs +15 -0
  150. package/dist/esm/routes/_load.mjs.map +1 -0
  151. package/dist/esm/routes/oauth/callback.mjs +71 -0
  152. package/dist/esm/routes/oauth/callback.mjs.map +1 -0
  153. package/dist/esm/routes/oauth/logout.mjs +63 -0
  154. package/dist/esm/routes/oauth/logout.mjs.map +1 -0
  155. package/package.json +34 -19
  156. package/dist/index.d.ts +0 -38
  157. package/dist/index.d.ts.map +0 -1
  158. package/dist/index.js +0 -32
  159. package/dist/index.js.map +0 -1
  160. package/dist/index.mjs +0 -21
  161. package/dist/lib/structures/MediaParser.d.ts +0 -51
  162. package/dist/lib/structures/MediaParser.d.ts.map +0 -1
  163. package/dist/lib/structures/MediaParser.js +0 -94
  164. package/dist/lib/structures/MediaParser.js.map +0 -1
  165. package/dist/lib/structures/MediaParserStore.d.ts +0 -15
  166. package/dist/lib/structures/MediaParserStore.d.ts.map +0 -1
  167. package/dist/lib/structures/MediaParserStore.js +0 -24
  168. package/dist/lib/structures/MediaParserStore.js.map +0 -1
  169. package/dist/lib/structures/Middleware.d.ts +0 -49
  170. package/dist/lib/structures/Middleware.d.ts.map +0 -1
  171. package/dist/lib/structures/Middleware.js +0 -31
  172. package/dist/lib/structures/Middleware.js.map +0 -1
  173. package/dist/lib/structures/MiddlewareStore.d.ts +0 -20
  174. package/dist/lib/structures/MiddlewareStore.d.ts.map +0 -1
  175. package/dist/lib/structures/MiddlewareStore.js +0 -52
  176. package/dist/lib/structures/MiddlewareStore.js.map +0 -1
  177. package/dist/lib/structures/Route.d.ts +0 -78
  178. package/dist/lib/structures/Route.d.ts.map +0 -1
  179. package/dist/lib/structures/Route.js +0 -84
  180. package/dist/lib/structures/Route.js.map +0 -1
  181. package/dist/lib/structures/RouteStore.d.ts +0 -23
  182. package/dist/lib/structures/RouteStore.d.ts.map +0 -1
  183. package/dist/lib/structures/RouteStore.js +0 -71
  184. package/dist/lib/structures/RouteStore.js.map +0 -1
  185. package/dist/lib/structures/api/ApiRequest.d.ts +0 -26
  186. package/dist/lib/structures/api/ApiRequest.d.ts.map +0 -1
  187. package/dist/lib/structures/api/ApiRequest.js +0 -51
  188. package/dist/lib/structures/api/ApiRequest.js.map +0 -1
  189. package/dist/lib/structures/api/ApiResponse.d.ts +0 -74
  190. package/dist/lib/structures/api/ApiResponse.d.ts.map +0 -1
  191. package/dist/lib/structures/api/ApiResponse.js +0 -123
  192. package/dist/lib/structures/api/ApiResponse.js.map +0 -1
  193. package/dist/lib/structures/api/CookieStore.d.ts +0 -30
  194. package/dist/lib/structures/api/CookieStore.d.ts.map +0 -1
  195. package/dist/lib/structures/api/CookieStore.js +0 -132
  196. package/dist/lib/structures/api/CookieStore.js.map +0 -1
  197. package/dist/lib/structures/http/Auth.d.ts +0 -164
  198. package/dist/lib/structures/http/Auth.d.ts.map +0 -1
  199. package/dist/lib/structures/http/Auth.js +0 -164
  200. package/dist/lib/structures/http/Auth.js.map +0 -1
  201. package/dist/lib/structures/http/HttpCodes.d.ts +0 -378
  202. package/dist/lib/structures/http/HttpCodes.d.ts.map +0 -1
  203. package/dist/lib/structures/http/HttpCodes.js +0 -382
  204. package/dist/lib/structures/http/HttpCodes.js.map +0 -1
  205. package/dist/lib/structures/http/HttpMethods.d.ts +0 -4
  206. package/dist/lib/structures/http/HttpMethods.d.ts.map +0 -1
  207. package/dist/lib/structures/http/HttpMethods.js +0 -7
  208. package/dist/lib/structures/http/HttpMethods.js.map +0 -1
  209. package/dist/lib/structures/http/Server.d.ts +0 -180
  210. package/dist/lib/structures/http/Server.d.ts.map +0 -1
  211. package/dist/lib/structures/http/Server.js +0 -144
  212. package/dist/lib/structures/http/Server.js.map +0 -1
  213. package/dist/lib/utils/MimeTypes.d.ts +0 -19
  214. package/dist/lib/utils/MimeTypes.d.ts.map +0 -1
  215. package/dist/lib/utils/MimeTypes.js +0 -23
  216. package/dist/lib/utils/MimeTypes.js.map +0 -1
  217. package/dist/lib/utils/RouteData.d.ts +0 -34
  218. package/dist/lib/utils/RouteData.d.ts.map +0 -1
  219. package/dist/lib/utils/RouteData.js +0 -84
  220. package/dist/lib/utils/RouteData.js.map +0 -1
  221. package/dist/listeners/PluginRouteError.d.ts +0 -7
  222. package/dist/listeners/PluginRouteError.d.ts.map +0 -1
  223. package/dist/listeners/PluginRouteError.js +0 -20
  224. package/dist/listeners/PluginRouteError.js.map +0 -1
  225. package/dist/listeners/PluginServerMatch.d.ts +0 -9
  226. package/dist/listeners/PluginServerMatch.d.ts.map +0 -1
  227. package/dist/listeners/PluginServerMatch.js +0 -15
  228. package/dist/listeners/PluginServerMatch.js.map +0 -1
  229. package/dist/listeners/PluginServerMiddlewareError.d.ts +0 -7
  230. package/dist/listeners/PluginServerMiddlewareError.d.ts.map +0 -1
  231. package/dist/listeners/PluginServerMiddlewareError.js +0 -20
  232. package/dist/listeners/PluginServerMiddlewareError.js.map +0 -1
  233. package/dist/listeners/PluginServerMiddlewareSuccess.d.ts +0 -9
  234. package/dist/listeners/PluginServerMiddlewareSuccess.d.ts.map +0 -1
  235. package/dist/listeners/PluginServerMiddlewareSuccess.js +0 -20
  236. package/dist/listeners/PluginServerMiddlewareSuccess.js.map +0 -1
  237. package/dist/listeners/PluginServerNoMatch.d.ts +0 -8
  238. package/dist/listeners/PluginServerNoMatch.d.ts.map +0 -1
  239. package/dist/listeners/PluginServerNoMatch.js +0 -16
  240. package/dist/listeners/PluginServerNoMatch.js.map +0 -1
  241. package/dist/listeners/PluginServerRequest.d.ts +0 -8
  242. package/dist/listeners/PluginServerRequest.d.ts.map +0 -1
  243. package/dist/listeners/PluginServerRequest.js +0 -30
  244. package/dist/listeners/PluginServerRequest.js.map +0 -1
  245. package/dist/listeners/_load.d.ts +0 -2
  246. package/dist/listeners/_load.d.ts.map +0 -1
  247. package/dist/listeners/_load.js +0 -21
  248. package/dist/listeners/_load.js.map +0 -1
  249. package/dist/mediaParsers/_load.d.ts +0 -2
  250. package/dist/mediaParsers/_load.d.ts.map +0 -1
  251. package/dist/mediaParsers/_load.js +0 -15
  252. package/dist/mediaParsers/_load.js.map +0 -1
  253. package/dist/mediaParsers/applicationFormUrlEncoded.d.ts +0 -7
  254. package/dist/mediaParsers/applicationFormUrlEncoded.d.ts.map +0 -1
  255. package/dist/mediaParsers/applicationFormUrlEncoded.js +0 -17
  256. package/dist/mediaParsers/applicationFormUrlEncoded.js.map +0 -1
  257. package/dist/mediaParsers/applicationJson.d.ts +0 -7
  258. package/dist/mediaParsers/applicationJson.d.ts.map +0 -1
  259. package/dist/mediaParsers/applicationJson.js +0 -16
  260. package/dist/mediaParsers/applicationJson.js.map +0 -1
  261. package/dist/mediaParsers/textPlain.d.ts +0 -7
  262. package/dist/mediaParsers/textPlain.d.ts.map +0 -1
  263. package/dist/mediaParsers/textPlain.js +0 -16
  264. package/dist/mediaParsers/textPlain.js.map +0 -1
  265. package/dist/middlewares/_load.d.ts +0 -2
  266. package/dist/middlewares/_load.d.ts.map +0 -1
  267. package/dist/middlewares/_load.js +0 -17
  268. package/dist/middlewares/_load.js.map +0 -1
  269. package/dist/middlewares/auth.d.ts +0 -9
  270. package/dist/middlewares/auth.d.ts.map +0 -1
  271. package/dist/middlewares/auth.js +0 -32
  272. package/dist/middlewares/auth.js.map +0 -1
  273. package/dist/middlewares/body.d.ts +0 -10
  274. package/dist/middlewares/body.d.ts.map +0 -1
  275. package/dist/middlewares/body.js +0 -50
  276. package/dist/middlewares/body.js.map +0 -1
  277. package/dist/middlewares/cookies.d.ts +0 -10
  278. package/dist/middlewares/cookies.d.ts.map +0 -1
  279. package/dist/middlewares/cookies.js +0 -29
  280. package/dist/middlewares/cookies.js.map +0 -1
  281. package/dist/middlewares/headers.d.ts +0 -27
  282. package/dist/middlewares/headers.d.ts.map +0 -1
  283. package/dist/middlewares/headers.js +0 -59
  284. package/dist/middlewares/headers.js.map +0 -1
  285. package/dist/register.d.ts.map +0 -1
  286. package/dist/register.js +0 -42
  287. package/dist/register.js.map +0 -1
  288. package/dist/register.mjs +0 -4
  289. package/dist/routes/_load.d.ts +0 -2
  290. package/dist/routes/_load.d.ts.map +0 -1
  291. package/dist/routes/_load.js +0 -13
  292. package/dist/routes/_load.js.map +0 -1
  293. package/dist/routes/oauth/callback.d.ts +0 -28
  294. package/dist/routes/oauth/callback.d.ts.map +0 -1
  295. package/dist/routes/oauth/callback.js +0 -73
  296. package/dist/routes/oauth/callback.js.map +0 -1
  297. package/dist/routes/oauth/logout.d.ts +0 -8
  298. package/dist/routes/oauth/logout.d.ts.map +0 -1
  299. package/dist/routes/oauth/logout.js +0 -94
  300. package/dist/routes/oauth/logout.js.map +0 -1
@@ -0,0 +1,71 @@
1
+ import { __publicField, __name } from '../../chunk-PYETHG4R.mjs';
2
+ import { OAuth2Routes } from 'discord.js';
3
+ import { stringify } from 'querystring';
4
+ import { fetch } from 'undici';
5
+ import { Route } from '../../lib/structures/Route.mjs';
6
+ import { HttpCodes } from '../../lib/structures/http/HttpCodes.mjs';
7
+ import { methods } from '../../lib/structures/http/HttpMethods.mjs';
8
+
9
+ var _PluginRoute = class _PluginRoute extends Route {
10
+ constructor(context) {
11
+ super(context, { route: "oauth/callback" });
12
+ __publicField(this, "redirectUri");
13
+ const { server } = this.container;
14
+ this.enabled = server.auth !== null;
15
+ this.redirectUri = server.auth?.redirect;
16
+ }
17
+ async [methods.POST](request, response) {
18
+ const body = request.body;
19
+ if (typeof body?.code !== "string") {
20
+ return response.badRequest();
21
+ }
22
+ const value = await this.fetchAuth(body);
23
+ if (value === null) {
24
+ return response.status(HttpCodes.InternalServerError).json({ error: "Failed to fetch the token." });
25
+ }
26
+ const now = Date.now();
27
+ const auth = this.container.server.auth;
28
+ const data = await auth.fetchData(value.access_token);
29
+ if (!data.user) {
30
+ return response.status(HttpCodes.InternalServerError).json({ error: "Failed to fetch the user." });
31
+ }
32
+ const token = auth.encrypt({
33
+ id: data.user.id,
34
+ expires: now + value.expires_in * 1e3,
35
+ refresh: value.refresh_token,
36
+ token: value.access_token
37
+ });
38
+ response.cookies.add(auth.cookie, token, { maxAge: value.expires_in });
39
+ return response.json(data);
40
+ }
41
+ async fetchAuth(body) {
42
+ const { id, secret } = this.container.server.auth;
43
+ const data = {
44
+ /* eslint-disable @typescript-eslint/naming-convention */
45
+ client_id: id,
46
+ client_secret: secret,
47
+ code: body.code,
48
+ grant_type: "authorization_code",
49
+ redirect_uri: this.redirectUri ?? body.redirectUri
50
+ /* eslint-enable @typescript-eslint/naming-convention */
51
+ };
52
+ const result = await fetch(OAuth2Routes.tokenURL, {
53
+ method: "POST",
54
+ body: stringify(data),
55
+ headers: {
56
+ "content-type": "application/x-www-form-urlencoded"
57
+ }
58
+ });
59
+ const json = await result.json();
60
+ if (result.ok)
61
+ return json;
62
+ this.container.logger.error(json);
63
+ return null;
64
+ }
65
+ };
66
+ __name(_PluginRoute, "PluginRoute");
67
+ var PluginRoute = _PluginRoute;
68
+
69
+ export { PluginRoute };
70
+ //# sourceMappingURL=out.js.map
71
+ //# sourceMappingURL=callback.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/routes/oauth/callback.ts"],"names":[],"mappings":";;;;;;AAAA,SAAS,oBAAwG;AACjH,SAAS,iBAAiB;AAC1B,SAAS,aAAa;AACtB,SAAS,aAAa;AAGtB,SAAS,iBAAiB;AAC1B,SAAS,eAAe;AAEjB,IAAM,eAAN,MAAM,qBAAoB,MAAM;AAAA,EAG/B,YAAY,SAA8B;AAChD,UAAM,SAAS,EAAE,OAAO,iBAAiB,CAAC;AAH3C,wBAAiB;AAKhB,UAAM,EAAE,OAAO,IAAI,KAAK;AACxB,SAAK,UAAU,OAAO,SAAS;AAC/B,SAAK,cAAc,OAAO,MAAM;AAAA,EACjC;AAAA,EAEA,OAAuB,QAAQ,IAAI,EAAE,SAAqB,UAAuB;AAChF,UAAM,OAAO,QAAQ;AACrB,QAAI,OAAO,MAAM,SAAS,UAAU;AACnC,aAAO,SAAS,WAAW;AAAA,IAC5B;AAEA,UAAM,QAAQ,MAAM,KAAK,UAAU,IAAI;AACvC,QAAI,UAAU,MAAM;AACnB,aAAO,SAAS,OAAO,UAAU,mBAAmB,EAAE,KAAK,EAAE,OAAO,6BAA6B,CAAC;AAAA,IACnG;AAEA,UAAM,MAAM,KAAK,IAAI;AACrB,UAAM,OAAO,KAAK,UAAU,OAAO;AACnC,UAAM,OAAO,MAAM,KAAK,UAAU,MAAM,YAAY;AACpD,QAAI,CAAC,KAAK,MAAM;AACf,aAAO,SAAS,OAAO,UAAU,mBAAmB,EAAE,KAAK,EAAE,OAAO,4BAA4B,CAAC;AAAA,IAClG;AAEA,UAAM,QAAQ,KAAK,QAAQ;AAAA,MAC1B,IAAI,KAAK,KAAK;AAAA,MACd,SAAS,MAAM,MAAM,aAAa;AAAA,MAClC,SAAS,MAAM;AAAA,MACf,OAAO,MAAM;AAAA,IACd,CAAC;AAED,aAAS,QAAQ,IAAI,KAAK,QAAQ,OAAO,EAAE,QAAQ,MAAM,WAAW,CAAC;AACrE,WAAO,SAAS,KAAK,IAAI;AAAA,EAC1B;AAAA,EAEA,MAAc,UAAU,MAAsB;AAC7C,UAAM,EAAE,IAAI,OAAO,IAAI,KAAK,UAAU,OAAO;AAE7C,UAAM,OAAgD;AAAA;AAAA,MAErD,WAAW;AAAA,MACX,eAAe;AAAA,MACf,MAAM,KAAK;AAAA,MACX,YAAY;AAAA,MACZ,cAAc,KAAK,eAAe,KAAK;AAAA;AAAA,IAExC;AAEA,UAAM,SAAS,MAAM,MAAM,aAAa,UAAU;AAAA,MACjD,QAAQ;AAAA,MACR,MAAM,UAAU,IAAW;AAAA,MAC3B,SAAS;AAAA,QACR,gBAAgB;AAAA,MACjB;AAAA,IACD,CAAC;AAED,UAAM,OAAO,MAAM,OAAO,KAAK;AAC/B,QAAI,OAAO;AAAI,aAAO;AAEtB,SAAK,UAAU,OAAO,MAAM,IAAI;AAChC,WAAO;AAAA,EACR;AACD;AAnEuC;AAAhC,IAAM,cAAN","sourcesContent":["import { OAuth2Routes, type RESTPostOAuth2AccessTokenResult, type RESTPostOAuth2AccessTokenURLEncodedData } from 'discord.js';\nimport { stringify } from 'querystring';\nimport { fetch } from 'undici';\nimport { Route } from '../../lib/structures/Route';\nimport type { ApiRequest } from '../../lib/structures/api/ApiRequest';\nimport type { ApiResponse } from '../../lib/structures/api/ApiResponse';\nimport { HttpCodes } from '../../lib/structures/http/HttpCodes';\nimport { methods } from '../../lib/structures/http/HttpMethods';\n\nexport class PluginRoute extends Route {\n\tprivate readonly redirectUri: string | undefined;\n\n\tpublic constructor(context: Route.LoaderContext) {\n\t\tsuper(context, { route: 'oauth/callback' });\n\n\t\tconst { server } = this.container;\n\t\tthis.enabled = server.auth !== null;\n\t\tthis.redirectUri = server.auth?.redirect;\n\t}\n\n\tpublic override async [methods.POST](request: ApiRequest, response: ApiResponse) {\n\t\tconst body = request.body as OAuth2BodyData;\n\t\tif (typeof body?.code !== 'string') {\n\t\t\treturn response.badRequest();\n\t\t}\n\n\t\tconst value = await this.fetchAuth(body);\n\t\tif (value === null) {\n\t\t\treturn response.status(HttpCodes.InternalServerError).json({ error: 'Failed to fetch the token.' });\n\t\t}\n\n\t\tconst now = Date.now();\n\t\tconst auth = this.container.server.auth!;\n\t\tconst data = await auth.fetchData(value.access_token);\n\t\tif (!data.user) {\n\t\t\treturn response.status(HttpCodes.InternalServerError).json({ error: 'Failed to fetch the user.' });\n\t\t}\n\n\t\tconst token = auth.encrypt({\n\t\t\tid: data.user.id,\n\t\t\texpires: now + value.expires_in * 1000,\n\t\t\trefresh: value.refresh_token,\n\t\t\ttoken: value.access_token\n\t\t});\n\n\t\tresponse.cookies.add(auth.cookie, token, { maxAge: value.expires_in });\n\t\treturn response.json(data);\n\t}\n\n\tprivate async fetchAuth(body: OAuth2BodyData) {\n\t\tconst { id, secret } = this.container.server.auth!;\n\n\t\tconst data: RESTPostOAuth2AccessTokenURLEncodedData = {\n\t\t\t/* eslint-disable @typescript-eslint/naming-convention */\n\t\t\tclient_id: id,\n\t\t\tclient_secret: secret,\n\t\t\tcode: body.code,\n\t\t\tgrant_type: 'authorization_code',\n\t\t\tredirect_uri: this.redirectUri ?? body.redirectUri\n\t\t\t/* eslint-enable @typescript-eslint/naming-convention */\n\t\t};\n\n\t\tconst result = await fetch(OAuth2Routes.tokenURL, {\n\t\t\tmethod: 'POST',\n\t\t\tbody: stringify(data as any),\n\t\t\theaders: {\n\t\t\t\t'content-type': 'application/x-www-form-urlencoded'\n\t\t\t}\n\t\t});\n\n\t\tconst json = await result.json();\n\t\tif (result.ok) return json as RESTPostOAuth2AccessTokenResult;\n\n\t\tthis.container.logger.error(json);\n\t\treturn null;\n\t}\n}\n\n/**\n * The OAuth2 body data sent to the callback.\n * @since 1.2.0\n */\nexport interface OAuth2BodyData {\n\t/**\n\t * The code sent by the client.\n\t * @since 1.2.0\n\t */\n\tcode: string;\n\n\t/**\n\t * The client's ID.\n\t * @since 1.2.0\n\t */\n\tclientId: string;\n\n\t/**\n\t * The redirect URI.\n\t * @since 1.2.0\n\t */\n\tredirectUri: string;\n}\n"]}
@@ -0,0 +1,63 @@
1
+ import { __name } from '../../chunk-PYETHG4R.mjs';
2
+ import { OAuth2Routes } from 'discord.js';
3
+ import { stringify } from 'querystring';
4
+ import { fetch } from 'undici';
5
+ import { promisify } from 'util';
6
+ import { Route } from '../../lib/structures/Route.mjs';
7
+ import { HttpCodes } from '../../lib/structures/http/HttpCodes.mjs';
8
+ import { methods } from '../../lib/structures/http/HttpMethods.mjs';
9
+
10
+ var sleep = promisify(setTimeout);
11
+ var _PluginRoute = class _PluginRoute extends Route {
12
+ constructor(context) {
13
+ super(context, { route: "oauth/logout" });
14
+ this.enabled = this.container.server.auth !== null;
15
+ }
16
+ async [methods.POST](request, response) {
17
+ if (!request.auth)
18
+ return response.status(HttpCodes.Unauthorized).json({ error: "Unauthorized." });
19
+ const result = await this.revoke(request.auth.token);
20
+ if (result.ok)
21
+ return this.success(response);
22
+ if (result.status === HttpCodes.ServiceUnavailable) {
23
+ const retryAfter = this.processRetryAfter(result.headers.get("Retry-After"));
24
+ if (retryAfter) {
25
+ await sleep(retryAfter);
26
+ const result2 = await this.revoke(request.auth.token);
27
+ if (result2.ok)
28
+ return this.success(response);
29
+ }
30
+ }
31
+ return response.status(HttpCodes.InternalServerError).json({ error: "Unexpected error from server." });
32
+ }
33
+ success(response) {
34
+ response.cookies.remove(this.container.server.auth.cookie);
35
+ return response.json({ success: true });
36
+ }
37
+ async revoke(token) {
38
+ const auth = this.container.server.auth;
39
+ const result = await fetch(OAuth2Routes.tokenRevocationURL, {
40
+ method: "POST",
41
+ body: stringify({
42
+ token,
43
+ /* eslint-disable @typescript-eslint/naming-convention */
44
+ client_id: auth.id,
45
+ client_secret: auth.secret
46
+ /* eslint-enable @typescript-eslint/naming-convention */
47
+ }),
48
+ headers: {
49
+ "content-type": "application/x-www-form-urlencoded"
50
+ }
51
+ });
52
+ return result;
53
+ }
54
+ processRetryAfter(retryAfter) {
55
+ return retryAfter === null ? 5e3 : Number(retryAfter) * 1e3;
56
+ }
57
+ };
58
+ __name(_PluginRoute, "PluginRoute");
59
+ var PluginRoute = _PluginRoute;
60
+
61
+ export { PluginRoute };
62
+ //# sourceMappingURL=out.js.map
63
+ //# sourceMappingURL=logout.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/routes/oauth/logout.ts"],"names":["result"],"mappings":";;;;;AAAA,SAAS,oBAAoB;AAC7B,SAAS,iBAAiB;AAC1B,SAAS,aAAa;AACtB,SAAS,iBAAiB;AAC1B,SAAS,aAAa;AAGtB,SAAS,iBAAiB;AAC1B,SAAS,eAAe;AAExB,IAAM,QAAQ,UAAU,UAAU;AAE3B,IAAM,eAAN,MAAM,qBAAoB,MAAM;AAAA,EAC/B,YAAY,SAA8B;AAChD,UAAM,SAAS,EAAE,OAAO,eAAe,CAAC;AACxC,SAAK,UAAU,KAAK,UAAU,OAAO,SAAS;AAAA,EAC/C;AAAA,EAEA,OAAuB,QAAQ,IAAI,EAAE,SAAqB,UAAuB;AAChF,QAAI,CAAC,QAAQ;AAAM,aAAO,SAAS,OAAO,UAAU,YAAY,EAAE,KAAK,EAAE,OAAO,gBAAgB,CAAC;AAEjG,UAAM,SAAS,MAAM,KAAK,OAAO,QAAQ,KAAK,KAAK;AACnD,QAAI,OAAO;AAAI,aAAO,KAAK,QAAQ,QAAQ;AAM3C,QAAI,OAAO,WAAW,UAAU,oBAAoB;AAMnD,YAAM,aAAa,KAAK,kBAAkB,OAAO,QAAQ,IAAI,aAAa,CAAC;AAC3E,UAAI,YAAY;AACf,cAAM,MAAM,UAAU;AAEtB,cAAMA,UAAS,MAAM,KAAK,OAAO,QAAQ,KAAK,KAAK;AACnD,YAAIA,QAAO;AAAI,iBAAO,KAAK,QAAQ,QAAQ;AAAA,MAC5C;AAAA,IACD;AAQA,WAAO,SAAS,OAAO,UAAU,mBAAmB,EAAE,KAAK,EAAE,OAAO,gCAAgC,CAAC;AAAA,EACtG;AAAA,EAEQ,QAAQ,UAAuB;AAEtC,aAAS,QAAQ,OAAO,KAAK,UAAU,OAAO,KAAM,MAAM;AAC1D,WAAO,SAAS,KAAK,EAAE,SAAS,KAAK,CAAC;AAAA,EACvC;AAAA,EAEA,MAAc,OAAO,OAAe;AACnC,UAAM,OAAO,KAAK,UAAU,OAAO;AAkBnC,UAAM,SAAS,MAAM,MAAM,aAAa,oBAAoB;AAAA,MAC3D,QAAQ;AAAA,MACR,MAAM,UAAU;AAAA,QACf;AAAA;AAAA,QAEA,WAAW,KAAK;AAAA,QAChB,eAAe,KAAK;AAAA;AAAA,MAErB,CAAC;AAAA,MACD,SAAS;AAAA,QACR,gBAAgB;AAAA,MACjB;AAAA,IACD,CAAC;AAED,WAAO;AAAA,EACR;AAAA,EAEQ,kBAAkB,YAA2B;AAGpD,WAAO,eAAe,OAAO,MAAO,OAAO,UAAU,IAAI;AAAA,EAC1D;AACD;AAvFuC;AAAhC,IAAM,cAAN","sourcesContent":["import { OAuth2Routes } from 'discord.js';\nimport { stringify } from 'querystring';\nimport { fetch } from 'undici';\nimport { promisify } from 'util';\nimport { Route } from '../../lib/structures/Route';\nimport type { ApiRequest } from '../../lib/structures/api/ApiRequest';\nimport type { ApiResponse } from '../../lib/structures/api/ApiResponse';\nimport { HttpCodes } from '../../lib/structures/http/HttpCodes';\nimport { methods } from '../../lib/structures/http/HttpMethods';\n\nconst sleep = promisify(setTimeout);\n\nexport class PluginRoute extends Route {\n\tpublic constructor(context: Route.LoaderContext) {\n\t\tsuper(context, { route: 'oauth/logout' });\n\t\tthis.enabled = this.container.server.auth !== null;\n\t}\n\n\tpublic override async [methods.POST](request: ApiRequest, response: ApiResponse) {\n\t\tif (!request.auth) return response.status(HttpCodes.Unauthorized).json({ error: 'Unauthorized.' });\n\n\t\tconst result = await this.revoke(request.auth.token);\n\t\tif (result.ok) return this.success(response);\n\n\t\t// RFC 7009 2.2.1. If the server responds with HTTP status code 503, the client must assume the token still\n\t\t// exists and may retry after a reasonable delay.\n\t\t// The server may include a \"Retry-After\" header in the response to indicate how long the service is expected to\n\t\t// be unavailable to the requesting client.\n\t\tif (result.status === HttpCodes.ServiceUnavailable) {\n\t\t\t// RFC 7231 7.1.3. Servers send the \"Retry-After\" header field to indicate how long the user agent ought to\n\t\t\t// wait before making a follow-up request.\n\t\t\t//\n\t\t\t// The value of this field can be either an HTTP-date or a number of seconds to delay after the response is\n\t\t\t// received.\n\t\t\tconst retryAfter = this.processRetryAfter(result.headers.get('Retry-After'));\n\t\t\tif (retryAfter) {\n\t\t\t\tawait sleep(retryAfter);\n\n\t\t\t\tconst result = await this.revoke(request.auth.token);\n\t\t\t\tif (result.ok) return this.success(response);\n\t\t\t}\n\t\t}\n\n\t\t// RFC 7009 2.2. The authorization server responds with HTTP status code 200 if the token has been revoked\n\t\t// successfully or if the client submitted an invalid token.\n\t\t//\n\t\t// Note: invalid tokens do not cause an error response since the client cannot handle such an error in a\n\t\t// reasonable way. Moreover, the purpose of the revocation request, invalidating the particular token, is\n\t\t// already achieved.\n\t\treturn response.status(HttpCodes.InternalServerError).json({ error: 'Unexpected error from server.' });\n\t}\n\n\tprivate success(response: ApiResponse) {\n\t\t// Sending an empty cookie with \"expires\" set to 1970-01-01 makes the browser instantly remove the cookie.\n\t\tresponse.cookies.remove(this.container.server.auth!.cookie);\n\t\treturn response.json({ success: true });\n\t}\n\n\tprivate async revoke(token: string) {\n\t\tconst auth = this.container.server.auth!;\n\n\t\t// RFC 7009 2.1.\n\t\t// The following parameters must be formatted as \"application/x-www-form-urlencoded\" in the HTTP request-body:\n\t\t//\n\t\t// - token: The token the client wants to be revoked.\n\t\t// - token_type_hint: [Optional]: `access_token` (RFC 6749 1.4), `refresh_token` (RFC 6749 1.5)\n\t\t//\n\t\t// The client also includes its authentication credentials, as described in RFC 6749 2.3.\n\t\t//\n\t\t// RFC 6749 2.3.1.\n\t\t// The authorization server MAY include the client credentials in the request - body using the following parameters:\n\t\t//\n\t\t// - client_id: The client identifier issued to the client during the registration process (RFC 6749 2.2)\n\t\t// - client_secret: The client secret.\n\t\t//\n\t\t// RFC 7009 2.2.\n\t\t// The content of the response body is ignored by the client as all necessary information is conveyed in the response code.\n\t\tconst result = await fetch(OAuth2Routes.tokenRevocationURL, {\n\t\t\tmethod: 'POST',\n\t\t\tbody: stringify({\n\t\t\t\ttoken,\n\t\t\t\t/* eslint-disable @typescript-eslint/naming-convention */\n\t\t\t\tclient_id: auth.id,\n\t\t\t\tclient_secret: auth.secret\n\t\t\t\t/* eslint-enable @typescript-eslint/naming-convention */\n\t\t\t}),\n\t\t\theaders: {\n\t\t\t\t'content-type': 'application/x-www-form-urlencoded'\n\t\t\t}\n\t\t});\n\n\t\treturn result;\n\t}\n\n\tprivate processRetryAfter(retryAfter: string | null) {\n\t\t// Discord sends Retry-After in seconds, never an HTTP-date, therefore, we will assume this behaviour.\n\t\t// Either way, if it's not present, we will retry in 5 seconds.\n\t\treturn retryAfter === null ? 5000 : Number(retryAfter) * 1000;\n\t}\n}\n"]}
package/package.json CHANGED
@@ -1,35 +1,48 @@
1
1
  {
2
2
  "name": "@sapphire/plugin-api",
3
- "version": "5.2.1-next.f01b974.0",
3
+ "version": "6.0.0-next.dede596.0",
4
4
  "description": "Plugin for @sapphire/framework to expose a REST API",
5
5
  "author": "@sapphire",
6
6
  "license": "MIT",
7
- "main": "dist/index.js",
8
- "module": "dist/index.mjs",
9
- "types": "dist/index.d.ts",
7
+ "main": "dist/cjs/index.cjs",
8
+ "module": "dist/esm/index.mjs",
9
+ "types": "dist/cjs/index.d.ts",
10
10
  "exports": {
11
11
  ".": {
12
- "types": "./dist/index.d.ts",
13
- "import": "./dist/index.mjs",
14
- "require": "./dist/index.js"
12
+ "import": {
13
+ "types": "./dist/esm/index.d.mts",
14
+ "default": "./dist/esm/index.mjs"
15
+ },
16
+ "require": {
17
+ "types": "./dist/cjs/index.d.ts",
18
+ "default": "./dist/cjs/index.cjs"
19
+ }
15
20
  },
16
21
  "./register": {
17
- "types": "./dist/register.d.ts",
18
- "import": "./dist/register.mjs",
19
- "require": "./dist/register.js"
22
+ "import": {
23
+ "types": "./dist/esm/register.d.mts",
24
+ "default": "./dist/esm/register.mjs"
25
+ },
26
+ "require": {
27
+ "types": "./dist/cjs/register.d.ts",
28
+ "default": "./dist/cjs/register.cjs"
29
+ }
20
30
  }
21
31
  },
22
32
  "sideEffects": [
23
- "./dist/register.js",
24
- "./dist/register.mjs"
33
+ "./dist/cjs/register.cjs",
34
+ "./dist/esm/register.mjs"
25
35
  ],
26
36
  "homepage": "https://github.com/sapphiredev/plugins/tree/main/packages/api",
27
37
  "scripts": {
28
38
  "test": "vitest run",
29
39
  "lint": "eslint src tests --ext ts --fix",
30
- "build": "tsc -b src && yarn esm:register && yarn esm:default",
31
- "esm:register": "gen-esm-wrapper dist/register.js dist/register.mjs",
32
- "esm:default": "gen-esm-wrapper dist/index.js dist/index.mjs",
40
+ "build": "tsup && yarn build:types",
41
+ "build:types": "concurrently \"yarn:build:types:*\"",
42
+ "build:types:cjs": "rollup-type-bundler -d dist/cjs",
43
+ "build:types:esm": "rollup-type-bundler -d dist/esm -t .mts",
44
+ "build:types:cleanup": "tsx ../../scripts/clean-register-imports.mts",
45
+ "typecheck": "tsc -b src",
33
46
  "docs": "typedoc-json-parser",
34
47
  "prepack": "yarn build",
35
48
  "bump": "cliff-jumper",
@@ -37,7 +50,7 @@
37
50
  },
38
51
  "dependencies": {
39
52
  "@types/ws": "^8.5.10",
40
- "tldts": "^6.0.22",
53
+ "tldts": "^6.1.0",
41
54
  "tslib": "^2.6.2",
42
55
  "undici": "^5.28.2"
43
56
  },
@@ -47,8 +60,7 @@
47
60
  "directory": "packages/api"
48
61
  },
49
62
  "files": [
50
- "dist/",
51
- "!dist/.tsbuildinfo"
63
+ "dist/"
52
64
  ],
53
65
  "engines": {
54
66
  "node": ">=v18",
@@ -72,7 +84,10 @@
72
84
  },
73
85
  "devDependencies": {
74
86
  "@favware/cliff-jumper": "^2.2.3",
75
- "gen-esm-wrapper": "^1.1.3",
87
+ "@favware/rollup-type-bundler": "^3.2.1",
88
+ "concurrently": "^8.2.2",
89
+ "tsup": "^8.0.1",
90
+ "tsx": "^4.6.2",
76
91
  "typedoc": "^0.25.4",
77
92
  "typedoc-json-parser": "^9.0.1",
78
93
  "typescript": "^5.3.2"
package/dist/index.d.ts DELETED
@@ -1,38 +0,0 @@
1
- import type { Server, ServerOptions } from './lib/structures/http/Server';
2
- import type { MediaParserStore } from './lib/structures/MediaParserStore';
3
- import type { MiddlewareStore } from './lib/structures/MiddlewareStore';
4
- import type { RouteStore } from './lib/structures/RouteStore';
5
- export * from './lib/structures/api/ApiRequest';
6
- export * from './lib/structures/api/ApiResponse';
7
- export * from './lib/structures/api/CookieStore';
8
- export * from './lib/structures/http/Auth';
9
- export * from './lib/structures/http/HttpCodes';
10
- export * from './lib/structures/http/HttpMethods';
11
- export * from './lib/structures/http/Server';
12
- export * from './lib/structures/MediaParser';
13
- export * from './lib/structures/MediaParserStore';
14
- export * from './lib/structures/Middleware';
15
- export * from './lib/structures/MiddlewareStore';
16
- export * from './lib/structures/Route';
17
- export * from './lib/structures/RouteStore';
18
- export * from './lib/utils/MimeTypes';
19
- export * from './lib/utils/RouteData';
20
- declare module 'discord.js' {
21
- interface Client {
22
- server: Server;
23
- }
24
- interface ClientOptions {
25
- api?: ServerOptions;
26
- }
27
- }
28
- declare module '@sapphire/pieces' {
29
- interface StoreRegistryEntries {
30
- routes: RouteStore;
31
- mediaParsers: MediaParserStore;
32
- middlewares: MiddlewareStore;
33
- }
34
- interface Container {
35
- server: Server;
36
- }
37
- }
38
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC1E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AAC1E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACxE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAE9D,cAAc,iCAAiC,CAAC;AAChD,cAAc,kCAAkC,CAAC;AACjD,cAAc,kCAAkC,CAAC;AACjD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,iCAAiC,CAAC;AAChD,cAAc,mCAAmC,CAAC;AAClD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,mCAAmC,CAAC;AAClD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,kCAAkC,CAAC;AACjD,cAAc,wBAAwB,CAAC;AACvC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AAEtC,OAAO,QAAQ,YAAY,CAAC;IAC3B,UAAU,MAAM;QACf,MAAM,EAAE,MAAM,CAAC;KACf;IAED,UAAU,aAAa;QACtB,GAAG,CAAC,EAAE,aAAa,CAAC;KACpB;CACD;AAED,OAAO,QAAQ,kBAAkB,CAAC;IACjC,UAAU,oBAAoB;QAC7B,MAAM,EAAE,UAAU,CAAC;QACnB,YAAY,EAAE,gBAAgB,CAAC;QAC/B,WAAW,EAAE,eAAe,CAAC;KAC7B;IAED,UAAU,SAAS;QAClB,MAAM,EAAE,MAAM,CAAC;KACf;CACD"}
package/dist/index.js DELETED
@@ -1,32 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
- for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
- };
16
- Object.defineProperty(exports, "__esModule", { value: true });
17
- __exportStar(require("./lib/structures/api/ApiRequest"), exports);
18
- __exportStar(require("./lib/structures/api/ApiResponse"), exports);
19
- __exportStar(require("./lib/structures/api/CookieStore"), exports);
20
- __exportStar(require("./lib/structures/http/Auth"), exports);
21
- __exportStar(require("./lib/structures/http/HttpCodes"), exports);
22
- __exportStar(require("./lib/structures/http/HttpMethods"), exports);
23
- __exportStar(require("./lib/structures/http/Server"), exports);
24
- __exportStar(require("./lib/structures/MediaParser"), exports);
25
- __exportStar(require("./lib/structures/MediaParserStore"), exports);
26
- __exportStar(require("./lib/structures/Middleware"), exports);
27
- __exportStar(require("./lib/structures/MiddlewareStore"), exports);
28
- __exportStar(require("./lib/structures/Route"), exports);
29
- __exportStar(require("./lib/structures/RouteStore"), exports);
30
- __exportStar(require("./lib/utils/MimeTypes"), exports);
31
- __exportStar(require("./lib/utils/RouteData"), exports);
32
- //# sourceMappingURL=index.js.map
package/dist/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAKA,kEAAgD;AAChD,mEAAiD;AACjD,mEAAiD;AACjD,6DAA2C;AAC3C,kEAAgD;AAChD,oEAAkD;AAClD,+DAA6C;AAC7C,+DAA6C;AAC7C,oEAAkD;AAClD,8DAA4C;AAC5C,mEAAiD;AACjD,yDAAuC;AACvC,8DAA4C;AAC5C,wDAAsC;AACtC,wDAAsC"}
package/dist/index.mjs DELETED
@@ -1,21 +0,0 @@
1
- import mod from "./index.js";
2
-
3
- export default mod;
4
- export const ApiRequest = mod.ApiRequest;
5
- export const ApiResponse = mod.ApiResponse;
6
- export const Auth = mod.Auth;
7
- export const CookieStore = mod.CookieStore;
8
- export const HttpCodes = mod.HttpCodes;
9
- export const MediaParser = mod.MediaParser;
10
- export const MediaParserStore = mod.MediaParserStore;
11
- export const Middleware = mod.Middleware;
12
- export const MiddlewareStore = mod.MiddlewareStore;
13
- export const MimeTypes = mod.MimeTypes;
14
- export const Route = mod.Route;
15
- export const RouteData = mod.RouteData;
16
- export const RouteStore = mod.RouteStore;
17
- export const Server = mod.Server;
18
- export const ServerEvents = mod.ServerEvents;
19
- export const TypeState = mod.TypeState;
20
- export const methodEntries = mod.methodEntries;
21
- export const methods = mod.methods;
@@ -1,51 +0,0 @@
1
- /// <reference types="node" />
2
- /// <reference types="node" />
3
- import { Piece } from '@sapphire/pieces';
4
- import type { Awaitable } from '@sapphire/utilities';
5
- import type { Route } from './Route';
6
- import type { ApiRequest } from './api/ApiRequest';
7
- /**
8
- * A media parser
9
- * @since 1.3.0
10
- */
11
- export declare abstract class MediaParser<Options extends MediaParser.Options = MediaParser.Options> extends Piece<Options, 'mediaParsers'> {
12
- constructor(context: MediaParser.LoaderContext, options?: Options);
13
- /**
14
- * Parses the body data from an API request.
15
- * @since 1.3.0
16
- */
17
- abstract run(request: ApiRequest): Awaitable<unknown>;
18
- /**
19
- * Checks if a route accepts the media type from this parser.
20
- * @since 1.3.0
21
- * @param route The route to be checked.
22
- */
23
- accepts(route: Route): boolean;
24
- /**
25
- * Reads the content body as a string, this is useful for parsing/reading plain-text data.
26
- * @since 1.3.0
27
- * @param request The request to read the body from.
28
- */
29
- protected readString(request: ApiRequest): Promise<string>;
30
- /**
31
- * Reads the content body as a buffer, this is useful for parsing/reading binary data.
32
- * @since 1.3.0
33
- * @param request The request to read the body from.
34
- */
35
- protected readBuffer(request: ApiRequest): Promise<Buffer>;
36
- /**
37
- * Reads the content stream from a request, piping the data through a transformer stream.
38
- * @since 1.3.0
39
- * @param request The request to read the body from.
40
- */
41
- protected contentStream(request: ApiRequest): import("zlib").BrotliDecompress | ApiRequest | null;
42
- }
43
- export declare namespace MediaParser {
44
- /** @deprecated Use {@linkcode LoaderContext} instead. */
45
- type Context = LoaderContext;
46
- type LoaderContext = Piece.LoaderContext<'mediaParsers'>;
47
- type Options = Piece.Options;
48
- type JSON = Piece.JSON;
49
- type LocationJSON = Piece.LocationJSON;
50
- }
51
- //# sourceMappingURL=MediaParser.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"MediaParser.d.ts","sourceRoot":"","sources":["../../../src/lib/structures/MediaParser.ts"],"names":[],"mappings":";;AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAErD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAGnD;;;GAGG;AACH,8BAAsB,WAAW,CAAC,OAAO,SAAS,WAAW,CAAC,OAAO,GAAG,WAAW,CAAC,OAAO,CAAE,SAAQ,KAAK,CAAC,OAAO,EAAE,cAAc,CAAC;gBAC/G,OAAO,EAAE,WAAW,CAAC,aAAa,EAAE,OAAO,GAAE,OAAuB;IAIvF;;;OAGG;aACa,GAAG,CAAC,OAAO,EAAE,UAAU,GAAG,SAAS,CAAC,OAAO,CAAC;IAE5D;;;;OAIG;IACI,OAAO,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO;IAIrC;;;;OAIG;cACa,UAAU,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC;IAUhE;;;;OAIG;cACa,UAAU,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC;IAUhE;;;;OAIG;IACH,SAAS,CAAC,aAAa,CAAC,OAAO,EAAE,UAAU;CAyC3C;AAED,yBAAiB,WAAW,CAAC;IAC5B,yDAAyD;IACzD,KAAY,OAAO,GAAG,aAAa,CAAC;IACpC,KAAY,aAAa,GAAG,KAAK,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC;IAChE,KAAY,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;IACpC,KAAY,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;IAC9B,KAAY,YAAY,GAAG,KAAK,CAAC,YAAY,CAAC;CAC9C"}
@@ -1,94 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.MediaParser = void 0;
4
- const pieces_1 = require("@sapphire/pieces");
5
- const zlib_1 = require("zlib");
6
- /**
7
- * A media parser
8
- * @since 1.3.0
9
- */
10
- class MediaParser extends pieces_1.Piece {
11
- constructor(context, options = {}) {
12
- super(context, options);
13
- }
14
- /**
15
- * Checks if a route accepts the media type from this parser.
16
- * @since 1.3.0
17
- * @param route The route to be checked.
18
- */
19
- accepts(route) {
20
- return route.acceptedContentMimeTypes === null || route.acceptedContentMimeTypes.includes(this.name);
21
- }
22
- /**
23
- * Reads the content body as a string, this is useful for parsing/reading plain-text data.
24
- * @since 1.3.0
25
- * @param request The request to read the body from.
26
- */
27
- async readString(request) {
28
- const stream = this.contentStream(request);
29
- if (stream === null)
30
- return '';
31
- let body = '';
32
- for await (const chunk of stream)
33
- body += chunk;
34
- return body;
35
- }
36
- /**
37
- * Reads the content body as a buffer, this is useful for parsing/reading binary data.
38
- * @since 1.3.0
39
- * @param request The request to read the body from.
40
- */
41
- async readBuffer(request) {
42
- const stream = this.contentStream(request);
43
- if (stream === null)
44
- return Buffer.alloc(0);
45
- const bodies = [];
46
- for await (const chunk of stream)
47
- bodies.push(chunk);
48
- return Buffer.concat(bodies);
49
- }
50
- /**
51
- * Reads the content stream from a request, piping the data through a transformer stream.
52
- * @since 1.3.0
53
- * @param request The request to read the body from.
54
- */
55
- contentStream(request) {
56
- switch ((request.headers['content-encoding'] ?? 'identity').toLowerCase()) {
57
- // RFC 7230 4.2.2:
58
- //
59
- // The "deflate" coding is a "zlib" data format (RFC 1950) containing a "deflate" compressed data stream
60
- // (RFC 1951) that uses a combination of the Lempel-Ziv (LZ77) compression algorithm and Huffman coding.
61
- case 'deflate': {
62
- const stream = (0, zlib_1.createInflate)();
63
- request.pipe(stream);
64
- return stream;
65
- }
66
- // RFC 7230 4.2.3
67
- //
68
- // The "gzip" coding is an LZ77 coding with a 32-bit Cyclic Redundancy Check (CRC) that is commonly produced
69
- // by the gzip file compression program (RFC 1952).
70
- case 'x-gzip':
71
- case 'gzip': {
72
- const stream = (0, zlib_1.createGunzip)();
73
- request.pipe(stream);
74
- return stream;
75
- }
76
- // RFC 7932
77
- //
78
- // A format using the Brotli algorithm.
79
- case 'br': {
80
- const stream = (0, zlib_1.createBrotliDecompress)();
81
- request.pipe(stream);
82
- return stream;
83
- }
84
- // An "identity" token is used as a synonym for "no encoding" in order to communicate when no encoding is
85
- // preferred.
86
- case 'identity': {
87
- return request;
88
- }
89
- }
90
- return null;
91
- }
92
- }
93
- exports.MediaParser = MediaParser;
94
- //# sourceMappingURL=MediaParser.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"MediaParser.js","sourceRoot":"","sources":["../../../src/lib/structures/MediaParser.ts"],"names":[],"mappings":";;;AAAA,6CAAyC;AAEzC,+BAA2E;AAK3E;;;GAGG;AACH,MAAsB,WAAuE,SAAQ,cAA8B;IAClI,YAAmB,OAAkC,EAAE,UAAmB,EAAa;QACtF,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACzB,CAAC;IAQD;;;;OAIG;IACI,OAAO,CAAC,KAAY;QAC1B,OAAO,KAAK,CAAC,wBAAwB,KAAK,IAAI,IAAI,KAAK,CAAC,wBAAwB,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAiC,CAAC,CAAC;IACnI,CAAC;IAED;;;;OAIG;IACO,KAAK,CAAC,UAAU,CAAC,OAAmB;QAC7C,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QAC3C,IAAI,MAAM,KAAK,IAAI;YAAE,OAAO,EAAE,CAAC;QAE/B,IAAI,IAAI,GAAG,EAAE,CAAC;QACd,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,MAAM;YAAE,IAAI,IAAI,KAAK,CAAC;QAEhD,OAAO,IAAI,CAAC;IACb,CAAC;IAED;;;;OAIG;IACO,KAAK,CAAC,UAAU,CAAC,OAAmB;QAC7C,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QAC3C,IAAI,MAAM,KAAK,IAAI;YAAE,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAE5C,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,MAAM;YAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAErD,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC9B,CAAC;IAED;;;;OAIG;IACO,aAAa,CAAC,OAAmB;QAC1C,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,kBAAkB,CAAC,IAAI,UAAU,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC;YAC3E,kBAAkB;YAClB,EAAE;YACF,wGAAwG;YACxG,wGAAwG;YACxG,KAAK,SAAS,CAAC,CAAC,CAAC;gBAChB,MAAM,MAAM,GAAG,IAAA,oBAAa,GAAE,CAAC;gBAC/B,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBACrB,OAAO,MAAM,CAAC;YACf,CAAC;YAED,iBAAiB;YACjB,EAAE;YACF,4GAA4G;YAC5G,mDAAmD;YACnD,KAAK,QAAQ,CAAC;YACd,KAAK,MAAM,CAAC,CAAC,CAAC;gBACb,MAAM,MAAM,GAAG,IAAA,mBAAY,GAAE,CAAC;gBAC9B,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBACrB,OAAO,MAAM,CAAC;YACf,CAAC;YAED,WAAW;YACX,EAAE;YACF,uCAAuC;YACvC,KAAK,IAAI,CAAC,CAAC,CAAC;gBACX,MAAM,MAAM,GAAG,IAAA,6BAAsB,GAAE,CAAC;gBACxC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBACrB,OAAO,MAAM,CAAC;YACf,CAAC;YAED,yGAAyG;YACzG,aAAa;YACb,KAAK,UAAU,CAAC,CAAC,CAAC;gBACjB,OAAO,OAAO,CAAC;YAChB,CAAC;QACF,CAAC;QAED,OAAO,IAAI,CAAC;IACb,CAAC;CACD;AAhGD,kCAgGC"}
@@ -1,15 +0,0 @@
1
- import { Store } from '@sapphire/pieces';
2
- import { MediaParser } from './MediaParser';
3
- /**
4
- * @since 1.3.0
5
- */
6
- export declare class MediaParserStore extends Store<MediaParser, 'mediaParsers'> {
7
- constructor();
8
- /**
9
- * Parses a content type by getting the relevant information inside.
10
- * @since 1.3.0
11
- * @param contentType The content type to parse.
12
- */
13
- parseContentType(contentType: string): string;
14
- }
15
- //# sourceMappingURL=MediaParserStore.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"MediaParserStore.d.ts","sourceRoot":"","sources":["../../../src/lib/structures/MediaParserStore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C;;GAEG;AACH,qBAAa,gBAAiB,SAAQ,KAAK,CAAC,WAAW,EAAE,cAAc,CAAC;;IAKvE;;;;OAIG;IACI,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM;CAIpD"}
@@ -1,24 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.MediaParserStore = void 0;
4
- const pieces_1 = require("@sapphire/pieces");
5
- const MediaParser_1 = require("./MediaParser");
6
- /**
7
- * @since 1.3.0
8
- */
9
- class MediaParserStore extends pieces_1.Store {
10
- constructor() {
11
- super(MediaParser_1.MediaParser, { name: 'mediaParsers' });
12
- }
13
- /**
14
- * Parses a content type by getting the relevant information inside.
15
- * @since 1.3.0
16
- * @param contentType The content type to parse.
17
- */
18
- parseContentType(contentType) {
19
- const index = contentType.indexOf(';');
20
- return index === -1 ? contentType : contentType.slice(0, index);
21
- }
22
- }
23
- exports.MediaParserStore = MediaParserStore;
24
- //# sourceMappingURL=MediaParserStore.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"MediaParserStore.js","sourceRoot":"","sources":["../../../src/lib/structures/MediaParserStore.ts"],"names":[],"mappings":";;;AAAA,6CAAyC;AACzC,+CAA4C;AAE5C;;GAEG;AACH,MAAa,gBAAiB,SAAQ,cAAkC;IACvE;QACC,KAAK,CAAC,yBAAW,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC,CAAC;IAC9C,CAAC;IAED;;;;OAIG;IACI,gBAAgB,CAAC,WAAmB;QAC1C,MAAM,KAAK,GAAG,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACvC,OAAO,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IACjE,CAAC;CACD;AAdD,4CAcC"}
@@ -1,49 +0,0 @@
1
- import { Piece } from '@sapphire/pieces';
2
- import type { Awaitable } from '@sapphire/utilities';
3
- import type { Route } from './Route';
4
- import type { ApiRequest } from './api/ApiRequest';
5
- import type { ApiResponse } from './api/ApiResponse';
6
- /**
7
- * @since 1.0.0
8
- */
9
- export declare abstract class Middleware<Options extends Middleware.Options = Middleware.Options> extends Piece<Options, 'middlewares'> {
10
- /**
11
- * The position the middleware has. The {@link MiddlewareStore} will run all middlewares with lower position than
12
- * this one.
13
- *
14
- * The built-in middlewares follow the following positions:
15
- * - headers: 10
16
- * - body: 20
17
- * - cookies: 30
18
- * - auth: 40
19
- */
20
- readonly position: number;
21
- constructor(context: Middleware.LoaderContext, options?: Options);
22
- /**
23
- * The method to be overridden by other middlewares.
24
- * @param request The client's request.
25
- * @param response The server's response.
26
- * @param route The route that matched this request, will be `null` if none matched.
27
- */
28
- abstract run(request: ApiRequest, response: ApiResponse, route: Route | null): Awaitable<unknown>;
29
- }
30
- /**
31
- * The options for all middlewares.
32
- */
33
- export interface MiddlewareOptions extends Piece.Options {
34
- /**
35
- * The position to insert the middleware at.
36
- * @see Middleware#position
37
- * @default 1000
38
- */
39
- position?: number;
40
- }
41
- export declare namespace Middleware {
42
- /** @deprecated Use {@linkcode LoaderContext} instead. */
43
- type Context = LoaderContext;
44
- type LoaderContext = Piece.LoaderContext<'middlewares'>;
45
- type Options = MiddlewareOptions;
46
- type JSON = Piece.JSON;
47
- type LocationJSON = Piece.LocationJSON;
48
- }
49
- //# sourceMappingURL=Middleware.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Middleware.d.ts","sourceRoot":"","sources":["../../../src/lib/structures/Middleware.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD;;GAEG;AACH,8BAAsB,UAAU,CAAC,OAAO,SAAS,UAAU,CAAC,OAAO,GAAG,UAAU,CAAC,OAAO,CAAE,SAAQ,KAAK,CAAC,OAAO,EAAE,aAAa,CAAC;IAC9H;;;;;;;;;OASG;IACH,SAAgB,QAAQ,EAAE,MAAM,CAAC;gBAEd,OAAO,EAAE,UAAU,CAAC,aAAa,EAAE,OAAO,GAAE,OAAuB;IAKtF;;;;;OAKG;aACa,GAAG,CAAC,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,WAAW,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI,GAAG,SAAS,CAAC,OAAO,CAAC;CACxG;AAED;;GAEG;AACH,MAAM,WAAW,iBAAkB,SAAQ,KAAK,CAAC,OAAO;IACvD;;;;OAIG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,yBAAiB,UAAU,CAAC;IAC3B,yDAAyD;IACzD,KAAY,OAAO,GAAG,aAAa,CAAC;IACpC,KAAY,aAAa,GAAG,KAAK,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC;IAC/D,KAAY,OAAO,GAAG,iBAAiB,CAAC;IACxC,KAAY,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;IAC9B,KAAY,YAAY,GAAG,KAAK,CAAC,YAAY,CAAC;CAC9C"}