@sapphire/plugin-api 7.0.0-next.fc8e636 → 7.0.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 (193) hide show
  1. package/CHANGELOG.md +61 -0
  2. package/README.md +0 -1
  3. package/dist/cjs/index.cjs +6 -32
  4. package/dist/cjs/index.cjs.map +1 -1
  5. package/dist/cjs/index.d.cts +91 -109
  6. package/dist/cjs/lib/structures/Augmentations.d.cjs +1 -1
  7. package/dist/cjs/lib/structures/Augmentations.d.cjs.map +1 -1
  8. package/dist/cjs/lib/structures/Middleware.cjs +2 -2
  9. package/dist/cjs/lib/structures/Middleware.cjs.map +1 -1
  10. package/dist/cjs/lib/structures/MiddlewareStore.cjs +2 -2
  11. package/dist/cjs/lib/structures/MiddlewareStore.cjs.map +1 -1
  12. package/dist/cjs/lib/structures/Route.cjs +5 -10
  13. package/dist/cjs/lib/structures/Route.cjs.map +1 -1
  14. package/dist/cjs/lib/structures/RouteLoaderStrategy.cjs +1 -1
  15. package/dist/cjs/lib/structures/RouteLoaderStrategy.cjs.map +1 -1
  16. package/dist/cjs/lib/structures/RouteStore.cjs +2 -2
  17. package/dist/cjs/lib/structures/RouteStore.cjs.map +1 -1
  18. package/dist/cjs/lib/structures/api/ApiRequest.cjs +129 -5
  19. package/dist/cjs/lib/structures/api/ApiRequest.cjs.map +1 -1
  20. package/dist/cjs/lib/structures/api/ApiResponse.cjs +6 -7
  21. package/dist/cjs/lib/structures/api/ApiResponse.cjs.map +1 -1
  22. package/dist/cjs/lib/structures/api/CookieStore.cjs +1 -1
  23. package/dist/cjs/lib/structures/api/CookieStore.cjs.map +1 -1
  24. package/dist/cjs/lib/structures/http/Auth.cjs +2 -2
  25. package/dist/cjs/lib/structures/http/Auth.cjs.map +1 -1
  26. package/dist/cjs/lib/structures/http/HttpCodes.cjs +1 -1
  27. package/dist/cjs/lib/structures/http/HttpCodes.cjs.map +1 -1
  28. package/dist/cjs/lib/structures/http/HttpMethods.cjs +2 -1
  29. package/dist/cjs/lib/structures/http/HttpMethods.cjs.map +1 -1
  30. package/dist/cjs/lib/structures/http/Server.cjs +2 -9
  31. package/dist/cjs/lib/structures/http/Server.cjs.map +1 -1
  32. package/dist/cjs/lib/structures/router/RouterBranch.cjs +1 -1
  33. package/dist/cjs/lib/structures/router/RouterBranch.cjs.map +1 -1
  34. package/dist/cjs/lib/structures/router/RouterNode.cjs +2 -2
  35. package/dist/cjs/lib/structures/router/RouterNode.cjs.map +1 -1
  36. package/dist/cjs/lib/structures/router/RouterRoot.cjs +12 -2
  37. package/dist/cjs/lib/structures/router/RouterRoot.cjs.map +1 -1
  38. package/dist/cjs/lib/utils/MimeType.cjs +4 -0
  39. package/dist/cjs/lib/utils/MimeType.cjs.map +1 -0
  40. package/dist/cjs/lib/utils/_body/RequestHeadersProxy.cjs +100 -0
  41. package/dist/cjs/lib/utils/_body/RequestHeadersProxy.cjs.map +1 -0
  42. package/dist/cjs/lib/utils/_body/RequestProxy.cjs +124 -0
  43. package/dist/cjs/lib/utils/_body/RequestProxy.cjs.map +1 -0
  44. package/dist/cjs/lib/utils/_body/RequestURLProxy.cjs +179 -0
  45. package/dist/cjs/lib/utils/_body/RequestURLProxy.cjs.map +1 -0
  46. package/dist/cjs/lib/utils/constants.cjs +8 -0
  47. package/dist/cjs/lib/utils/constants.cjs.map +1 -0
  48. package/dist/cjs/listeners/PluginRouteError.cjs +1 -1
  49. package/dist/cjs/listeners/PluginRouteError.cjs.map +1 -1
  50. package/dist/cjs/listeners/PluginServerMiddlewareError.cjs +1 -1
  51. package/dist/cjs/listeners/PluginServerMiddlewareError.cjs.map +1 -1
  52. package/dist/cjs/listeners/PluginServerMiddlewareSuccess.cjs +1 -1
  53. package/dist/cjs/listeners/PluginServerMiddlewareSuccess.cjs.map +1 -1
  54. package/dist/cjs/listeners/PluginServerRequest.cjs +2 -2
  55. package/dist/cjs/listeners/PluginServerRequest.cjs.map +1 -1
  56. package/dist/cjs/listeners/PluginServerRouterBranchMethodNotAllowed.cjs +1 -1
  57. package/dist/cjs/listeners/PluginServerRouterBranchMethodNotAllowed.cjs.map +1 -1
  58. package/dist/cjs/listeners/PluginServerRouterBranchNotFound.cjs +1 -1
  59. package/dist/cjs/listeners/PluginServerRouterBranchNotFound.cjs.map +1 -1
  60. package/dist/cjs/listeners/PluginServerRouterFound.cjs +3 -2
  61. package/dist/cjs/listeners/PluginServerRouterFound.cjs.map +1 -1
  62. package/dist/cjs/listeners/_load.cjs +1 -1
  63. package/dist/cjs/listeners/_load.cjs.map +1 -1
  64. package/dist/cjs/middlewares/_load.cjs +1 -1
  65. package/dist/cjs/middlewares/_load.cjs.map +1 -1
  66. package/dist/cjs/middlewares/auth.cjs +2 -2
  67. package/dist/cjs/middlewares/auth.cjs.map +1 -1
  68. package/dist/cjs/middlewares/body.cjs +2 -18
  69. package/dist/cjs/middlewares/body.cjs.map +1 -1
  70. package/dist/cjs/middlewares/cookies.cjs +1 -1
  71. package/dist/cjs/middlewares/cookies.cjs.map +1 -1
  72. package/dist/cjs/middlewares/headers.cjs +1 -1
  73. package/dist/cjs/middlewares/headers.cjs.map +1 -1
  74. package/dist/cjs/register.cjs +3 -4
  75. package/dist/cjs/register.cjs.map +1 -1
  76. package/dist/cjs/register.d.cts +0 -1
  77. package/dist/cjs/routes/_load.cjs +1 -1
  78. package/dist/cjs/routes/_load.cjs.map +1 -1
  79. package/dist/cjs/routes/oauth/callback.post.cjs +3 -3
  80. package/dist/cjs/routes/oauth/callback.post.cjs.map +1 -1
  81. package/dist/cjs/routes/oauth/logout.post.cjs +1 -1
  82. package/dist/cjs/routes/oauth/logout.post.cjs.map +1 -1
  83. package/dist/esm/chunk-S573YWRP.mjs +1 -1
  84. package/dist/esm/chunk-S573YWRP.mjs.map +1 -1
  85. package/dist/esm/index.d.mts +91 -109
  86. package/dist/esm/index.mjs +2 -6
  87. package/dist/esm/index.mjs.map +1 -1
  88. package/dist/esm/lib/structures/Augmentations.d.mjs +1 -1
  89. package/dist/esm/lib/structures/Augmentations.d.mjs.map +1 -1
  90. package/dist/esm/lib/structures/Middleware.mjs +1 -1
  91. package/dist/esm/lib/structures/Middleware.mjs.map +1 -1
  92. package/dist/esm/lib/structures/MiddlewareStore.mjs +1 -1
  93. package/dist/esm/lib/structures/MiddlewareStore.mjs.map +1 -1
  94. package/dist/esm/lib/structures/Route.mjs +5 -10
  95. package/dist/esm/lib/structures/Route.mjs.map +1 -1
  96. package/dist/esm/lib/structures/RouteLoaderStrategy.mjs +1 -1
  97. package/dist/esm/lib/structures/RouteLoaderStrategy.mjs.map +1 -1
  98. package/dist/esm/lib/structures/RouteStore.mjs +1 -1
  99. package/dist/esm/lib/structures/RouteStore.mjs.map +1 -1
  100. package/dist/esm/lib/structures/api/ApiRequest.mjs +123 -6
  101. package/dist/esm/lib/structures/api/ApiRequest.mjs.map +1 -1
  102. package/dist/esm/lib/structures/api/ApiResponse.mjs +5 -6
  103. package/dist/esm/lib/structures/api/ApiResponse.mjs.map +1 -1
  104. package/dist/esm/lib/structures/api/CookieStore.mjs +1 -1
  105. package/dist/esm/lib/structures/api/CookieStore.mjs.map +1 -1
  106. package/dist/esm/lib/structures/http/Auth.mjs +1 -1
  107. package/dist/esm/lib/structures/http/Auth.mjs.map +1 -1
  108. package/dist/esm/lib/structures/http/HttpCodes.mjs +1 -1
  109. package/dist/esm/lib/structures/http/HttpCodes.mjs.map +1 -1
  110. package/dist/esm/lib/structures/http/HttpMethods.mjs +2 -1
  111. package/dist/esm/lib/structures/http/HttpMethods.mjs.map +1 -1
  112. package/dist/esm/lib/structures/http/Server.mjs +2 -9
  113. package/dist/esm/lib/structures/http/Server.mjs.map +1 -1
  114. package/dist/esm/lib/structures/router/RouterBranch.mjs +1 -1
  115. package/dist/esm/lib/structures/router/RouterBranch.mjs.map +1 -1
  116. package/dist/esm/lib/structures/router/RouterNode.mjs +1 -1
  117. package/dist/esm/lib/structures/router/RouterNode.mjs.map +1 -1
  118. package/dist/esm/lib/structures/router/RouterRoot.mjs +12 -2
  119. package/dist/esm/lib/structures/router/RouterRoot.mjs.map +1 -1
  120. package/dist/esm/lib/utils/MimeType.mjs +3 -0
  121. package/dist/esm/lib/utils/MimeType.mjs.map +1 -0
  122. package/dist/esm/lib/utils/_body/RequestHeadersProxy.mjs +95 -0
  123. package/dist/esm/lib/utils/_body/RequestHeadersProxy.mjs.map +1 -0
  124. package/dist/esm/lib/utils/_body/RequestProxy.mjs +112 -0
  125. package/dist/esm/lib/utils/_body/RequestProxy.mjs.map +1 -0
  126. package/dist/esm/lib/utils/_body/RequestURLProxy.mjs +167 -0
  127. package/dist/esm/lib/utils/_body/RequestURLProxy.mjs.map +1 -0
  128. package/dist/esm/lib/utils/constants.mjs +8 -0
  129. package/dist/esm/lib/utils/constants.mjs.map +1 -0
  130. package/dist/esm/listeners/PluginRouteError.mjs +1 -1
  131. package/dist/esm/listeners/PluginRouteError.mjs.map +1 -1
  132. package/dist/esm/listeners/PluginServerMiddlewareError.mjs +1 -1
  133. package/dist/esm/listeners/PluginServerMiddlewareError.mjs.map +1 -1
  134. package/dist/esm/listeners/PluginServerMiddlewareSuccess.mjs +1 -1
  135. package/dist/esm/listeners/PluginServerMiddlewareSuccess.mjs.map +1 -1
  136. package/dist/esm/listeners/PluginServerRequest.mjs +2 -2
  137. package/dist/esm/listeners/PluginServerRequest.mjs.map +1 -1
  138. package/dist/esm/listeners/PluginServerRouterBranchMethodNotAllowed.mjs +1 -1
  139. package/dist/esm/listeners/PluginServerRouterBranchMethodNotAllowed.mjs.map +1 -1
  140. package/dist/esm/listeners/PluginServerRouterBranchNotFound.mjs +1 -1
  141. package/dist/esm/listeners/PluginServerRouterBranchNotFound.mjs.map +1 -1
  142. package/dist/esm/listeners/PluginServerRouterFound.mjs +3 -2
  143. package/dist/esm/listeners/PluginServerRouterFound.mjs.map +1 -1
  144. package/dist/esm/listeners/_load.mjs +1 -1
  145. package/dist/esm/listeners/_load.mjs.map +1 -1
  146. package/dist/esm/middlewares/_load.mjs +1 -1
  147. package/dist/esm/middlewares/_load.mjs.map +1 -1
  148. package/dist/esm/middlewares/auth.mjs +1 -1
  149. package/dist/esm/middlewares/auth.mjs.map +1 -1
  150. package/dist/esm/middlewares/body.mjs +3 -17
  151. package/dist/esm/middlewares/body.mjs.map +1 -1
  152. package/dist/esm/middlewares/cookies.mjs +1 -1
  153. package/dist/esm/middlewares/cookies.mjs.map +1 -1
  154. package/dist/esm/middlewares/headers.mjs +1 -1
  155. package/dist/esm/middlewares/headers.mjs.map +1 -1
  156. package/dist/esm/register.d.mts +0 -1
  157. package/dist/esm/register.mjs +3 -4
  158. package/dist/esm/register.mjs.map +1 -1
  159. package/dist/esm/routes/_load.mjs +1 -1
  160. package/dist/esm/routes/_load.mjs.map +1 -1
  161. package/dist/esm/routes/oauth/callback.post.mjs +2 -2
  162. package/dist/esm/routes/oauth/callback.post.mjs.map +1 -1
  163. package/dist/esm/routes/oauth/logout.post.mjs +1 -1
  164. package/dist/esm/routes/oauth/logout.post.mjs.map +1 -1
  165. package/package.json +14 -12
  166. package/dist/cjs/lib/structures/MediaParser.cjs +0 -79
  167. package/dist/cjs/lib/structures/MediaParser.cjs.map +0 -1
  168. package/dist/cjs/lib/structures/MediaParserStore.cjs +0 -27
  169. package/dist/cjs/lib/structures/MediaParserStore.cjs.map +0 -1
  170. package/dist/cjs/lib/utils/MimeTypes.cjs +0 -26
  171. package/dist/cjs/lib/utils/MimeTypes.cjs.map +0 -1
  172. package/dist/cjs/mediaParsers/_load.cjs +0 -20
  173. package/dist/cjs/mediaParsers/_load.cjs.map +0 -1
  174. package/dist/cjs/mediaParsers/applicationFormUrlEncoded.cjs +0 -23
  175. package/dist/cjs/mediaParsers/applicationFormUrlEncoded.cjs.map +0 -1
  176. package/dist/cjs/mediaParsers/applicationJson.cjs +0 -22
  177. package/dist/cjs/mediaParsers/applicationJson.cjs.map +0 -1
  178. package/dist/cjs/mediaParsers/textPlain.cjs +0 -22
  179. package/dist/cjs/mediaParsers/textPlain.cjs.map +0 -1
  180. package/dist/esm/lib/structures/MediaParser.mjs +0 -76
  181. package/dist/esm/lib/structures/MediaParser.mjs.map +0 -1
  182. package/dist/esm/lib/structures/MediaParserStore.mjs +0 -24
  183. package/dist/esm/lib/structures/MediaParserStore.mjs.map +0 -1
  184. package/dist/esm/lib/utils/MimeTypes.mjs +0 -26
  185. package/dist/esm/lib/utils/MimeTypes.mjs.map +0 -1
  186. package/dist/esm/mediaParsers/_load.mjs +0 -17
  187. package/dist/esm/mediaParsers/_load.mjs.map +0 -1
  188. package/dist/esm/mediaParsers/applicationFormUrlEncoded.mjs +0 -20
  189. package/dist/esm/mediaParsers/applicationFormUrlEncoded.mjs.map +0 -1
  190. package/dist/esm/mediaParsers/applicationJson.mjs +0 -19
  191. package/dist/esm/mediaParsers/applicationJson.mjs.map +0 -1
  192. package/dist/esm/mediaParsers/textPlain.mjs +0 -19
  193. package/dist/esm/mediaParsers/textPlain.mjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/register.ts"],"names":[],"mappings":";;;;;AAAA,OAAO;AAEP,SAAS,QAAQ,oBAAoB,UAAU,sBAAsB;AAErE,SAAS,eAAe,kBAAkB,iBAAiB,YAAY,cAAc;AAK9E,IAAM,OAAN,MAAM,aAAY,OAAO;AAAA;AAAA;AAAA;AAAA,EAI/B,QAAe,kBAAkB,EAAwB,SAA8B;AACtF,SAAK,SAAS,IAAI,OAAO,QAAQ,GAAG;AACpC,SAAK,OACH,SAAS,KAAK,OAAO,MAAM,EAC3B,SAAS,KAAK,OAAO,YAAY,EACjC,SAAS,KAAK,OAAO,WAAW;AAElC,kBAAc;AACd,qBAAiB;AACjB,oBAAgB;AAChB,eAAW;AAAA,EACZ;AAAA;AAAA;AAAA;AAAA,EAKA,cAAqB,QAAQ,IAAuC;AACnE,QAAI,EAAE,KAAK,OAAO,QAAQ,wBAAwB,OAAO;AACxD;AAAA,IACD;AAEA,UAAM,KAAK,OAAO,QAAQ;AAAA,EAC3B;AACD;AA3BgC;AAAzB,IAAM,MAAN;AA6BP,eAAe,QAAQ,+BAA+B,IAAI,kBAAkB,GAAG,wBAAwB;AACvG,eAAe,QAAQ,qBAAqB,IAAI,QAAQ,GAAG,cAAc","sourcesContent":["import './index';\n\nimport { Plugin, postInitialization, preLogin, SapphireClient } from '@sapphire/framework';\nimport type { ClientOptions } from 'discord.js';\nimport { loadListeners, loadMediaParsers, loadMiddlewares, loadRoutes, Server } from './index';\n\n/**\n * @since 1.0.0\n */\nexport class Api extends Plugin {\n\t/**\n\t * @since 1.0.0\n\t */\n\tpublic static [postInitialization](this: SapphireClient, options: ClientOptions): void {\n\t\tthis.server = new Server(options.api);\n\t\tthis.stores\n\t\t\t.register(this.server.routes) //\n\t\t\t.register(this.server.mediaParsers)\n\t\t\t.register(this.server.middlewares);\n\n\t\tloadListeners();\n\t\tloadMediaParsers();\n\t\tloadMiddlewares();\n\t\tloadRoutes();\n\t}\n\n\t/**\n\t * @since 1.0.0\n\t */\n\tpublic static async [preLogin](this: SapphireClient): Promise<void> {\n\t\tif (!(this.server.options.automaticallyConnect ?? true)) {\n\t\t\treturn;\n\t\t}\n\n\t\tawait this.server.connect();\n\t}\n}\n\nSapphireClient.plugins.registerPostInitializationHook(Api[postInitialization], 'API-PostInitialization');\nSapphireClient.plugins.registerPreLoginHook(Api[preLogin], 'API-PreLogin');\n"]}
1
+ {"version":3,"sources":["../../src/register.ts"],"names":[],"mappings":";;;;AAOO,IAAM,IAAA,GAAN,MAAM,IAAA,SAAY,MAAO,CAAA;AAAA;AAAA;AAAA;AAAA,EAI/B,QAAe,kBAAkB,CAAA,CAAwB,OAA8B,EAAA;AACtF,IAAA,IAAA,CAAK,MAAS,GAAA,IAAI,MAAO,CAAA,OAAA,CAAQ,GAAG,CAAA;AACpC,IAAK,IAAA,CAAA,MAAA,CACH,SAAS,IAAK,CAAA,MAAA,CAAO,MAAM,CAC3B,CAAA,QAAA,CAAS,IAAK,CAAA,MAAA,CAAO,WAAW,CAAA;AAElC,IAAc,aAAA,EAAA;AACd,IAAgB,eAAA,EAAA;AAChB,IAAW,UAAA,EAAA;AAAA;AACZ;AAAA;AAAA;AAAA,EAKA,cAAqB,QAAQ,CAAuC,GAAA;AACnE,IAAA,IAAI,EAAE,IAAA,CAAK,MAAO,CAAA,OAAA,CAAQ,wBAAwB,IAAO,CAAA,EAAA;AACxD,MAAA;AAAA;AAGD,IAAM,MAAA,IAAA,CAAK,OAAO,OAAQ,EAAA;AAAA;AAE5B,CAAA;AAzBgC,MAAA,CAAA,IAAA,EAAA,KAAA,CAAA;AAAzB,IAAM,GAAN,GAAA;AA2BP,cAAA,CAAe,OAAQ,CAAA,8BAAA,CAA+B,GAAI,CAAA,kBAAkB,GAAG,wBAAwB,CAAA;AACvG,cAAA,CAAe,OAAQ,CAAA,oBAAA,CAAqB,GAAI,CAAA,QAAQ,GAAG,cAAc,CAAA","file":"register.mjs","sourcesContent":["import { Plugin, postInitialization, preLogin, SapphireClient } from '@sapphire/framework';\nimport type { ClientOptions } from 'discord.js';\nimport { loadListeners, loadMiddlewares, loadRoutes, Server } from './index';\n\n/**\n * @since 1.0.0\n */\nexport class Api extends Plugin {\n\t/**\n\t * @since 1.0.0\n\t */\n\tpublic static [postInitialization](this: SapphireClient, options: ClientOptions): void {\n\t\tthis.server = new Server(options.api);\n\t\tthis.stores\n\t\t\t.register(this.server.routes) //\n\t\t\t.register(this.server.middlewares);\n\n\t\tloadListeners();\n\t\tloadMiddlewares();\n\t\tloadRoutes();\n\t}\n\n\t/**\n\t * @since 1.0.0\n\t */\n\tpublic static async [preLogin](this: SapphireClient): Promise<void> {\n\t\tif (!(this.server.options.automaticallyConnect ?? true)) {\n\t\t\treturn;\n\t\t}\n\n\t\tawait this.server.connect();\n\t}\n}\n\nSapphireClient.plugins.registerPostInitializationHook(Api[postInitialization], 'API-PostInitialization');\nSapphireClient.plugins.registerPreLoginHook(Api[preLogin], 'API-PreLogin');\n"]}
@@ -11,5 +11,5 @@ function loadRoutes() {
11
11
  __name(loadRoutes, "loadRoutes");
12
12
 
13
13
  export { loadRoutes };
14
- //# sourceMappingURL=out.js.map
14
+ //# sourceMappingURL=_load.mjs.map
15
15
  //# sourceMappingURL=_load.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/routes/_load.ts"],"names":[],"mappings":";;;;;AAAA,SAAS,iBAAiB;AAC1B,SAAS,eAAe,2BAA2B;AACnD,SAAS,eAAe,yBAAyB;AAE1C,SAAS,aAAa;AAC5B,QAAM,QAAQ;AACd,OAAK,UAAU,OAAO,UAAU,EAAE,MAAM,YAAY,OAAO,qBAAqB,MAAM,CAAC;AACvF,OAAK,UAAU,OAAO,UAAU,EAAE,MAAM,UAAU,OAAO,mBAAmB,MAAM,CAAC;AACpF;AAJgB","sourcesContent":["import { container } from '@sapphire/pieces';\nimport { PluginRoute as PluginOAuthCallback } from './oauth/callback.post';\nimport { PluginRoute as PluginOAuthLogout } from './oauth/logout.post';\n\nexport function loadRoutes() {\n\tconst store = 'routes' as const;\n\tvoid container.stores.loadPiece({ name: 'callback', piece: PluginOAuthCallback, store });\n\tvoid container.stores.loadPiece({ name: 'logout', piece: PluginOAuthLogout, store });\n}\n"]}
1
+ {"version":3,"sources":["../../../src/routes/_load.ts"],"names":["PluginOAuthCallback","PluginOAuthLogout"],"mappings":";;;;;AAIO,SAAS,UAAa,GAAA;AAC5B,EAAA,MAAM,KAAQ,GAAA,QAAA;AACd,EAAK,KAAA,SAAA,CAAU,OAAO,SAAU,CAAA,EAAE,MAAM,UAAY,EAAA,KAAA,EAAOA,WAAqB,EAAA,KAAA,EAAO,CAAA;AACvF,EAAK,KAAA,SAAA,CAAU,OAAO,SAAU,CAAA,EAAE,MAAM,QAAU,EAAA,KAAA,EAAOC,aAAmB,EAAA,KAAA,EAAO,CAAA;AACpF;AAJgB,MAAA,CAAA,UAAA,EAAA,YAAA,CAAA","file":"_load.mjs","sourcesContent":["import { container } from '@sapphire/pieces';\nimport { PluginRoute as PluginOAuthCallback } from './oauth/callback.post';\nimport { PluginRoute as PluginOAuthLogout } from './oauth/logout.post';\n\nexport function loadRoutes() {\n\tconst store = 'routes';\n\tvoid container.stores.loadPiece({ name: 'callback', piece: PluginOAuthCallback, store });\n\tvoid container.stores.loadPiece({ name: 'logout', piece: PluginOAuthLogout, store });\n}\n"]}
@@ -14,7 +14,7 @@ var _PluginRoute = class _PluginRoute extends Route {
14
14
  this.redirectUri = server.auth?.redirect;
15
15
  }
16
16
  async run(request, response) {
17
- const body = request.body;
17
+ const body = await request.readBodyJson();
18
18
  if (typeof body?.code !== "string") {
19
19
  return response.badRequest();
20
20
  }
@@ -65,5 +65,5 @@ __name(_PluginRoute, "PluginRoute");
65
65
  var PluginRoute = _PluginRoute;
66
66
 
67
67
  export { PluginRoute };
68
- //# sourceMappingURL=out.js.map
68
+ //# sourceMappingURL=callback.post.mjs.map
69
69
  //# sourceMappingURL=callback.post.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/routes/oauth/callback.post.ts"],"names":[],"mappings":";;;;;;AAAA,SAAS,oBAAwG;AACjH,SAAS,iBAAiB;AAC1B,SAAS,aAAa;AACtB,SAAS,aAAa;AACtB,SAAS,iBAAiB;AAEnB,IAAM,eAAN,MAAM,qBAAoB,MAAM;AAAA,EAG/B,YAAY,SAA8B;AAChD,UAAM,SAAS,EAAE,OAAO,kBAAkB,SAAS,CAAC,MAAM,EAAE,CAAC;AAH9D,wBAAiB;AAKhB,UAAM,EAAE,OAAO,IAAI,KAAK;AACxB,SAAK,UAAU,OAAO,SAAS;AAC/B,SAAK,cAAc,OAAO,MAAM;AAAA,EACjC;AAAA,EAEA,MAAsB,IAAI,SAAwB,UAA0B;AAC3E,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,GAAI,QAAO;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 { HttpCodes } from '../../lib/structures/http/HttpCodes';\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', methods: ['POST'] });\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 run(request: Route.Request, response: Route.Response) {\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"]}
1
+ {"version":3,"sources":["../../../../src/routes/oauth/callback.post.ts"],"names":[],"mappings":";;;;;;;AAMO,IAAM,YAAA,GAAN,MAAM,YAAA,SAAoB,KAAM,CAAA;AAAA,EAG/B,YAAY,OAA8B,EAAA;AAChD,IAAM,KAAA,CAAA,OAAA,EAAS,EAAE,KAAO,EAAA,gBAAA,EAAkB,SAAS,CAAC,MAAM,GAAG,CAAA;AAH9D,IAAiB,aAAA,CAAA,IAAA,EAAA,aAAA,CAAA;AAKhB,IAAM,MAAA,EAAE,MAAO,EAAA,GAAI,IAAK,CAAA,SAAA;AACxB,IAAK,IAAA,CAAA,OAAA,GAAU,OAAO,IAAS,KAAA,IAAA;AAC/B,IAAK,IAAA,CAAA,WAAA,GAAc,OAAO,IAAM,EAAA,QAAA;AAAA;AACjC,EAEA,MAAsB,GAAI,CAAA,OAAA,EAAwB,QAA0B,EAAA;AAC3E,IAAM,MAAA,IAAA,GAAQ,MAAM,OAAA,CAAQ,YAAa,EAAA;AACzC,IAAI,IAAA,OAAO,IAAM,EAAA,IAAA,KAAS,QAAU,EAAA;AACnC,MAAA,OAAO,SAAS,UAAW,EAAA;AAAA;AAG5B,IAAA,MAAM,KAAQ,GAAA,MAAM,IAAK,CAAA,SAAA,CAAU,IAAI,CAAA;AACvC,IAAA,IAAI,UAAU,IAAM,EAAA;AACnB,MAAO,OAAA,QAAA,CAAS,OAAO,SAAU,CAAA,mBAAmB,EAAE,IAAK,CAAA,EAAE,KAAO,EAAA,4BAAA,EAA8B,CAAA;AAAA;AAGnG,IAAM,MAAA,GAAA,GAAM,KAAK,GAAI,EAAA;AACrB,IAAM,MAAA,IAAA,GAAO,IAAK,CAAA,SAAA,CAAU,MAAO,CAAA,IAAA;AACnC,IAAA,MAAM,IAAO,GAAA,MAAM,IAAK,CAAA,SAAA,CAAU,MAAM,YAAY,CAAA;AACpD,IAAI,IAAA,CAAC,KAAK,IAAM,EAAA;AACf,MAAO,OAAA,QAAA,CAAS,OAAO,SAAU,CAAA,mBAAmB,EAAE,IAAK,CAAA,EAAE,KAAO,EAAA,2BAAA,EAA6B,CAAA;AAAA;AAGlG,IAAM,MAAA,KAAA,GAAQ,KAAK,OAAQ,CAAA;AAAA,MAC1B,EAAA,EAAI,KAAK,IAAK,CAAA,EAAA;AAAA,MACd,OAAA,EAAS,GAAM,GAAA,KAAA,CAAM,UAAa,GAAA,GAAA;AAAA,MAClC,SAAS,KAAM,CAAA,aAAA;AAAA,MACf,OAAO,KAAM,CAAA;AAAA,KACb,CAAA;AAED,IAAS,QAAA,CAAA,OAAA,CAAQ,IAAI,IAAK,CAAA,MAAA,EAAQ,OAAO,EAAE,MAAA,EAAQ,KAAM,CAAA,UAAA,EAAY,CAAA;AACrE,IAAO,OAAA,QAAA,CAAS,KAAK,IAAI,CAAA;AAAA;AAC1B,EAEA,MAAc,UAAU,IAAsB,EAAA;AAC7C,IAAA,MAAM,EAAE,EAAI,EAAA,MAAA,EAAW,GAAA,IAAA,CAAK,UAAU,MAAO,CAAA,IAAA;AAE7C,IAAA,MAAM,IAAgD,GAAA;AAAA;AAAA,MAErD,SAAW,EAAA,EAAA;AAAA,MACX,aAAe,EAAA,MAAA;AAAA,MACf,MAAM,IAAK,CAAA,IAAA;AAAA,MACX,UAAY,EAAA,oBAAA;AAAA,MACZ,YAAA,EAAc,IAAK,CAAA,WAAA,IAAe,IAAK,CAAA;AAAA;AAAA,KAExC;AAEA,IAAA,MAAM,MAAS,GAAA,MAAM,KAAM,CAAA,YAAA,CAAa,QAAU,EAAA;AAAA,MACjD,MAAQ,EAAA,MAAA;AAAA,MACR,IAAA,EAAM,UAAU,IAAW,CAAA;AAAA,MAC3B,OAAS,EAAA;AAAA,QACR,cAAgB,EAAA;AAAA;AACjB,KACA,CAAA;AAED,IAAM,MAAA,IAAA,GAAO,MAAM,MAAA,CAAO,IAAK,EAAA;AAC/B,IAAI,IAAA,MAAA,CAAO,IAAW,OAAA,IAAA;AAEtB,IAAK,IAAA,CAAA,SAAA,CAAU,MAAO,CAAA,KAAA,CAAM,IAAI,CAAA;AAChC,IAAO,OAAA,IAAA;AAAA;AAET,CAAA;AAnEuC,MAAA,CAAA,YAAA,EAAA,aAAA,CAAA;AAAhC,IAAM,WAAN,GAAA","file":"callback.post.mjs","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 { HttpCodes } from '../../lib/structures/http/HttpCodes';\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', methods: ['POST'] });\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 run(request: Route.Request, response: Route.Response) {\n\t\tconst body = (await request.readBodyJson()) 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"]}
@@ -54,5 +54,5 @@ __name(_PluginRoute, "PluginRoute");
54
54
  var PluginRoute = _PluginRoute;
55
55
 
56
56
  export { PluginRoute };
57
- //# sourceMappingURL=out.js.map
57
+ //# sourceMappingURL=logout.post.mjs.map
58
58
  //# sourceMappingURL=logout.post.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/routes/oauth/logout.post.ts"],"names":["result"],"mappings":";;;;;AAAA,SAAS,aAAa;AACtB,SAAS,oBAAoB;AAC7B,SAAS,iBAAiB;AAC1B,SAAS,aAAa;AACtB,SAAS,aAAa;AACtB,SAAS,iBAAiB;AAEnB,IAAM,eAAN,MAAM,qBAAoB,MAAM;AAAA,EAC/B,YAAY,SAA8B;AAChD,UAAM,SAAS,EAAE,OAAO,gBAAgB,SAAS,CAAC,MAAM,EAAE,CAAC;AAC3D,SAAK,UAAU,KAAK,UAAU,OAAO,SAAS;AAAA,EAC/C;AAAA,EAEA,MAAsB,IAAI,SAAwB,UAA0B;AAC3E,QAAI,CAAC,QAAQ,KAAM,QAAO,SAAS,OAAO,UAAU,YAAY,EAAE,KAAK,EAAE,OAAO,gBAAgB,CAAC;AAEjG,UAAM,SAAS,MAAM,KAAK,OAAO,QAAQ,KAAK,KAAK;AACnD,QAAI,OAAO,GAAI,QAAO,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,GAAI,QAAO,KAAK,QAAQ,QAAQ;AAAA,MAC5C;AAAA,IACD;AAQA,WAAO,SAAS,OAAO,UAAU,mBAAmB,EAAE,KAAK,EAAE,OAAO,gCAAgC,CAAC;AAAA,EACtG;AAAA,EAEQ,QAAQ,UAA0B;AAEzC,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 { sleep } from '@sapphire/utilities';\nimport { OAuth2Routes } from 'discord.js';\nimport { stringify } from 'querystring';\nimport { fetch } from 'undici';\nimport { Route } from '../../lib/structures/Route';\nimport { HttpCodes } from '../../lib/structures/http/HttpCodes';\n\nexport class PluginRoute extends Route {\n\tpublic constructor(context: Route.LoaderContext) {\n\t\tsuper(context, { route: 'oauth/logout', methods: ['POST'] });\n\t\tthis.enabled = this.container.server.auth !== null;\n\t}\n\n\tpublic override async run(request: Route.Request, response: Route.Response) {\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: Route.Response) {\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"]}
1
+ {"version":3,"sources":["../../../../src/routes/oauth/logout.post.ts"],"names":["result"],"mappings":";;;;;;;;AAOO,IAAM,YAAA,GAAN,MAAM,YAAA,SAAoB,KAAM,CAAA;AAAA,EAC/B,YAAY,OAA8B,EAAA;AAChD,IAAM,KAAA,CAAA,OAAA,EAAS,EAAE,KAAO,EAAA,cAAA,EAAgB,SAAS,CAAC,MAAM,GAAG,CAAA;AAC3D,IAAA,IAAA,CAAK,OAAU,GAAA,IAAA,CAAK,SAAU,CAAA,MAAA,CAAO,IAAS,KAAA,IAAA;AAAA;AAC/C,EAEA,MAAsB,GAAI,CAAA,OAAA,EAAwB,QAA0B,EAAA;AAC3E,IAAA,IAAI,CAAC,OAAA,CAAQ,IAAM,EAAA,OAAO,QAAS,CAAA,MAAA,CAAO,SAAU,CAAA,YAAY,CAAE,CAAA,IAAA,CAAK,EAAE,KAAA,EAAO,iBAAiB,CAAA;AAEjG,IAAA,MAAM,SAAS,MAAM,IAAA,CAAK,MAAO,CAAA,OAAA,CAAQ,KAAK,KAAK,CAAA;AACnD,IAAA,IAAI,MAAO,CAAA,EAAA,EAAW,OAAA,IAAA,CAAK,QAAQ,QAAQ,CAAA;AAM3C,IAAI,IAAA,MAAA,CAAO,MAAW,KAAA,SAAA,CAAU,kBAAoB,EAAA;AAMnD,MAAA,MAAM,aAAa,IAAK,CAAA,iBAAA,CAAkB,OAAO,OAAQ,CAAA,GAAA,CAAI,aAAa,CAAC,CAAA;AAC3E,MAAA,IAAI,UAAY,EAAA;AACf,QAAA,MAAM,MAAM,UAAU,CAAA;AAEtB,QAAA,MAAMA,UAAS,MAAM,IAAA,CAAK,MAAO,CAAA,OAAA,CAAQ,KAAK,KAAK,CAAA;AACnD,QAAA,IAAIA,OAAO,CAAA,EAAA,EAAW,OAAA,IAAA,CAAK,QAAQ,QAAQ,CAAA;AAAA;AAC5C;AASD,IAAO,OAAA,QAAA,CAAS,OAAO,SAAU,CAAA,mBAAmB,EAAE,IAAK,CAAA,EAAE,KAAO,EAAA,+BAAA,EAAiC,CAAA;AAAA;AACtG,EAEQ,QAAQ,QAA0B,EAAA;AAEzC,IAAA,QAAA,CAAS,QAAQ,MAAO,CAAA,IAAA,CAAK,SAAU,CAAA,MAAA,CAAO,KAAM,MAAM,CAAA;AAC1D,IAAA,OAAO,QAAS,CAAA,IAAA,CAAK,EAAE,OAAA,EAAS,MAAM,CAAA;AAAA;AACvC,EAEA,MAAc,OAAO,KAAe,EAAA;AACnC,IAAM,MAAA,IAAA,GAAO,IAAK,CAAA,SAAA,CAAU,MAAO,CAAA,IAAA;AAkBnC,IAAA,MAAM,MAAS,GAAA,MAAM,KAAM,CAAA,YAAA,CAAa,kBAAoB,EAAA;AAAA,MAC3D,MAAQ,EAAA,MAAA;AAAA,MACR,MAAM,SAAU,CAAA;AAAA,QACf,KAAA;AAAA;AAAA,QAEA,WAAW,IAAK,CAAA,EAAA;AAAA,QAChB,eAAe,IAAK,CAAA;AAAA;AAAA,OAEpB,CAAA;AAAA,MACD,OAAS,EAAA;AAAA,QACR,cAAgB,EAAA;AAAA;AACjB,KACA,CAAA;AAED,IAAO,OAAA,MAAA;AAAA;AACR,EAEQ,kBAAkB,UAA2B,EAAA;AAGpD,IAAA,OAAO,UAAe,KAAA,IAAA,GAAO,GAAO,GAAA,MAAA,CAAO,UAAU,CAAI,GAAA,GAAA;AAAA;AAE3D,CAAA;AAvFuC,MAAA,CAAA,YAAA,EAAA,aAAA,CAAA;AAAhC,IAAM,WAAN,GAAA","file":"logout.post.mjs","sourcesContent":["import { sleep } from '@sapphire/utilities';\nimport { OAuth2Routes } from 'discord.js';\nimport { stringify } from 'querystring';\nimport { fetch } from 'undici';\nimport { Route } from '../../lib/structures/Route';\nimport { HttpCodes } from '../../lib/structures/http/HttpCodes';\n\nexport class PluginRoute extends Route {\n\tpublic constructor(context: Route.LoaderContext) {\n\t\tsuper(context, { route: 'oauth/logout', methods: ['POST'] });\n\t\tthis.enabled = this.container.server.auth !== null;\n\t}\n\n\tpublic override async run(request: Route.Request, response: Route.Response) {\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: Route.Response) {\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,6 +1,6 @@
1
1
  {
2
2
  "name": "@sapphire/plugin-api",
3
- "version": "7.0.0-next.fc8e636",
3
+ "version": "7.0.0",
4
4
  "description": "Plugin for @sapphire/framework to expose a REST API",
5
5
  "author": "@sapphire",
6
6
  "license": "MIT",
@@ -43,17 +43,19 @@
43
43
  "build:types:esm": "rollup-type-bundler -d dist/esm -t .mts",
44
44
  "build:types:cleanup": "tsx ../../scripts/clean-register-imports.mts",
45
45
  "build:rename-cjs-register": "tsx ../../scripts/rename-cjs-register.mts",
46
+ "sync-mime-types": "tsx scripts/sync-mime-types.mts",
46
47
  "typecheck": "tsc -b src",
47
- "docs": "typedoc-json-parser",
48
+ "docs": "echo \"temporarily disabled\" || typedoc-json-parser",
48
49
  "prepack": "yarn build",
49
50
  "bump": "cliff-jumper",
50
51
  "check-update": "cliff-jumper --dry-run"
51
52
  },
52
53
  "dependencies": {
53
- "@types/ws": "^8.5.10",
54
- "@vladfrangu/async_event_emitter": "2.4.1",
55
- "tldts": "^6.1.31",
56
- "undici": "^6.19.2"
54
+ "@types/ws": "^8.5.13",
55
+ "@vladfrangu/async_event_emitter": "2.4.6",
56
+ "cookie-es": "^1.2.2",
57
+ "tldts": "^6.1.58",
58
+ "undici": "^6.20.1"
57
59
  },
58
60
  "repository": {
59
61
  "type": "git",
@@ -84,13 +86,13 @@
84
86
  "access": "public"
85
87
  },
86
88
  "devDependencies": {
87
- "@favware/cliff-jumper": "^4.0.2",
89
+ "@favware/cliff-jumper": "^5.0.0",
88
90
  "@favware/rollup-type-bundler": "^3.3.0",
89
- "concurrently": "^8.2.2",
90
- "tsup": "^8.1.0",
91
- "tsx": "^4.16.2",
92
- "typedoc": "^0.25.13",
93
- "typedoc-json-parser": "^10.0.0",
91
+ "concurrently": "^9.0.1",
92
+ "tsup": "^8.3.5",
93
+ "tsx": "^4.19.2",
94
+ "typedoc": "^0.26.11",
95
+ "typedoc-json-parser": "^10.2.0",
94
96
  "typescript": "~5.4.5"
95
97
  }
96
98
  }
@@ -1,79 +0,0 @@
1
- 'use strict';
2
-
3
- var pieces = require('@sapphire/pieces');
4
- var zlib = require('zlib');
5
-
6
- var __defProp = Object.defineProperty;
7
- var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
8
- var _MediaParser = class _MediaParser extends pieces.Piece {
9
- constructor(context, options = {}) {
10
- super(context, options);
11
- }
12
- /**
13
- * Checks if a route accepts the media type from this parser.
14
- * @since 1.3.0
15
- * @param route The route to be checked.
16
- */
17
- accepts(route) {
18
- return route.acceptedContentMimeTypes === null || route.acceptedContentMimeTypes.includes(this.name);
19
- }
20
- /**
21
- * Reads the content body as a string, this is useful for parsing/reading plain-text data.
22
- * @since 1.3.0
23
- * @param request The request to read the body from.
24
- */
25
- async readString(request) {
26
- const stream = this.contentStream(request);
27
- if (stream === null) return "";
28
- let body = "";
29
- for await (const chunk of stream) body += chunk;
30
- return body;
31
- }
32
- /**
33
- * Reads the content body as a buffer, this is useful for parsing/reading binary data.
34
- * @since 1.3.0
35
- * @param request The request to read the body from.
36
- */
37
- async readBuffer(request) {
38
- const stream = this.contentStream(request);
39
- if (stream === null) return Buffer.alloc(0);
40
- const bodies = [];
41
- for await (const chunk of stream) bodies.push(chunk);
42
- return Buffer.concat(bodies);
43
- }
44
- /**
45
- * Reads the content stream from a request, piping the data through a transformer stream.
46
- * @since 1.3.0
47
- * @param request The request to read the body from.
48
- */
49
- contentStream(request) {
50
- switch ((request.headers["content-encoding"] ?? "identity").toLowerCase()) {
51
- case "deflate": {
52
- const stream = zlib.createInflate();
53
- request.pipe(stream);
54
- return stream;
55
- }
56
- case "x-gzip":
57
- case "gzip": {
58
- const stream = zlib.createGunzip();
59
- request.pipe(stream);
60
- return stream;
61
- }
62
- case "br": {
63
- const stream = zlib.createBrotliDecompress();
64
- request.pipe(stream);
65
- return stream;
66
- }
67
- case "identity": {
68
- return request;
69
- }
70
- }
71
- return null;
72
- }
73
- };
74
- __name(_MediaParser, "MediaParser");
75
- var MediaParser = _MediaParser;
76
-
77
- exports.MediaParser = MediaParser;
78
- //# sourceMappingURL=out.js.map
79
- //# sourceMappingURL=MediaParser.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../src/lib/structures/MediaParser.ts"],"names":[],"mappings":";;;;AAAA,SAAS,aAAa;AAEtB,SAAS,wBAAwB,cAAc,qBAAkC;AAS1E,IAAe,eAAf,MAAe,qBAA+E,MAA+B;AAAA,EAC5H,YAAY,SAAoC,UAAmB,CAAC,GAAc;AACxF,UAAM,SAAS,OAAO;AAAA,EACvB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAaO,QAAQ,OAAuB;AACrC,WAAO,MAAM,6BAA6B,QAAQ,MAAM,yBAAyB,SAAS,KAAK,IAAiC;AAAA,EACjI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAgB,WAAW,SAA+C;AACzE,UAAM,SAAS,KAAK,cAAc,OAAO;AACzC,QAAI,WAAW,KAAM,QAAO;AAE5B,QAAI,OAAO;AACX,qBAAiB,SAAS,OAAQ,SAAQ;AAE1C,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAgB,WAAW,SAA+C;AACzE,UAAM,SAAS,KAAK,cAAc,OAAO;AACzC,QAAI,WAAW,KAAM,QAAO,OAAO,MAAM,CAAC;AAE1C,UAAM,SAAmB,CAAC;AAC1B,qBAAiB,SAAS,OAAQ,QAAO,KAAK,KAAK;AAEnD,WAAO,OAAO,OAAO,MAAM;AAAA,EAC5B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOU,cAAc,SAAmE;AAC1F,aAAS,QAAQ,QAAQ,kBAAkB,KAAK,YAAY,YAAY,GAAG;AAAA,MAK1E,KAAK,WAAW;AACf,cAAM,SAAS,cAAc;AAC7B,gBAAQ,KAAK,MAAM;AACnB,eAAO;AAAA,MACR;AAAA,MAMA,KAAK;AAAA,MACL,KAAK,QAAQ;AACZ,cAAM,SAAS,aAAa;AAC5B,gBAAQ,KAAK,MAAM;AACnB,eAAO;AAAA,MACR;AAAA,MAKA,KAAK,MAAM;AACV,cAAM,SAAS,uBAAuB;AACtC,gBAAQ,KAAK,MAAM;AACnB,eAAO;AAAA,MACR;AAAA,MAIA,KAAK,YAAY;AAChB,eAAO;AAAA,MACR;AAAA,IACD;AAEA,WAAO;AAAA,EACR;AACD;AAhGoI;AAA7H,IAAe,cAAf","sourcesContent":["import { Piece } from '@sapphire/pieces';\nimport type { Awaitable } from '@sapphire/utilities';\nimport { createBrotliDecompress, createGunzip, createInflate, type Gunzip } from 'zlib';\nimport type { ApiRequest } from './api/ApiRequest';\nimport type { MimeTypeWithoutParameters } from './http/Server';\nimport type { Route } from './Route';\n\n/**\n * A media parser\n * @since 1.3.0\n */\nexport abstract class MediaParser<Options extends MediaParser.Options = MediaParser.Options> extends Piece<Options, 'mediaParsers'> {\n\tpublic constructor(context: MediaParser.LoaderContext, options: Options = {} as Options) {\n\t\tsuper(context, options);\n\t}\n\n\t/**\n\t * Parses the body data from an API request.\n\t * @since 1.3.0\n\t */\n\tpublic abstract run(request: MediaParser.Request): Awaitable<unknown>;\n\n\t/**\n\t * Checks if a route accepts the media type from this parser.\n\t * @since 1.3.0\n\t * @param route The route to be checked.\n\t */\n\tpublic accepts(route: Route): boolean {\n\t\treturn route.acceptedContentMimeTypes === null || route.acceptedContentMimeTypes.includes(this.name as MimeTypeWithoutParameters);\n\t}\n\n\t/**\n\t * Reads the content body as a string, this is useful for parsing/reading plain-text data.\n\t * @since 1.3.0\n\t * @param request The request to read the body from.\n\t */\n\tprotected async readString(request: MediaParser.Request): Promise<string> {\n\t\tconst stream = this.contentStream(request);\n\t\tif (stream === null) return '';\n\n\t\tlet body = '';\n\t\tfor await (const chunk of stream) body += chunk;\n\n\t\treturn body;\n\t}\n\n\t/**\n\t * Reads the content body as a buffer, this is useful for parsing/reading binary data.\n\t * @since 1.3.0\n\t * @param request The request to read the body from.\n\t */\n\tprotected async readBuffer(request: MediaParser.Request): Promise<Buffer> {\n\t\tconst stream = this.contentStream(request);\n\t\tif (stream === null) return Buffer.alloc(0);\n\n\t\tconst bodies: Buffer[] = [];\n\t\tfor await (const chunk of stream) bodies.push(chunk);\n\n\t\treturn Buffer.concat(bodies);\n\t}\n\n\t/**\n\t * Reads the content stream from a request, piping the data through a transformer stream.\n\t * @since 1.3.0\n\t * @param request The request to read the body from.\n\t */\n\tprotected contentStream(request: MediaParser.Request): MediaParser.Request | Gunzip | null {\n\t\tswitch ((request.headers['content-encoding'] ?? 'identity').toLowerCase()) {\n\t\t\t// RFC 7230 4.2.2:\n\t\t\t//\n\t\t\t// The \"deflate\" coding is a \"zlib\" data format (RFC 1950) containing a \"deflate\" compressed data stream\n\t\t\t// (RFC 1951) that uses a combination of the Lempel-Ziv (LZ77) compression algorithm and Huffman coding.\n\t\t\tcase 'deflate': {\n\t\t\t\tconst stream = createInflate();\n\t\t\t\trequest.pipe(stream);\n\t\t\t\treturn stream;\n\t\t\t}\n\n\t\t\t// RFC 7230 4.2.3\n\t\t\t//\n\t\t\t// The \"gzip\" coding is an LZ77 coding with a 32-bit Cyclic Redundancy Check (CRC) that is commonly produced\n\t\t\t// by the gzip file compression program (RFC 1952).\n\t\t\tcase 'x-gzip':\n\t\t\tcase 'gzip': {\n\t\t\t\tconst stream = createGunzip();\n\t\t\t\trequest.pipe(stream);\n\t\t\t\treturn stream;\n\t\t\t}\n\n\t\t\t// RFC 7932\n\t\t\t//\n\t\t\t// A format using the Brotli algorithm.\n\t\t\tcase 'br': {\n\t\t\t\tconst stream = createBrotliDecompress();\n\t\t\t\trequest.pipe(stream);\n\t\t\t\treturn stream;\n\t\t\t}\n\n\t\t\t// An \"identity\" token is used as a synonym for \"no encoding\" in order to communicate when no encoding is\n\t\t\t// preferred.\n\t\t\tcase 'identity': {\n\t\t\t\treturn request;\n\t\t\t}\n\t\t}\n\n\t\treturn null;\n\t}\n}\n\nexport namespace MediaParser {\n\t/** @deprecated Use {@linkcode LoaderContext} instead. */\n\texport type Context = LoaderContext;\n\texport type LoaderContext = Piece.LoaderContext<'mediaParsers'>;\n\texport type Options = Piece.Options;\n\texport type JSON = Piece.JSON;\n\texport type LocationJSON = Piece.LocationJSON;\n\n\texport type Request = ApiRequest;\n}\n"]}
@@ -1,27 +0,0 @@
1
- 'use strict';
2
-
3
- var pieces = require('@sapphire/pieces');
4
- var MediaParser_cjs = require('./MediaParser.cjs');
5
-
6
- var __defProp = Object.defineProperty;
7
- var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
8
- var _MediaParserStore = class _MediaParserStore extends pieces.Store {
9
- constructor() {
10
- super(MediaParser_cjs.MediaParser, { name: "mediaParsers" });
11
- }
12
- /**
13
- * Parses a content type by getting the relevant information inside.
14
- * @since 1.3.0
15
- * @param contentType The content type to parse.
16
- */
17
- parseContentType(contentType) {
18
- const index = contentType.indexOf(";");
19
- return index === -1 ? contentType : contentType.slice(0, index);
20
- }
21
- };
22
- __name(_MediaParserStore, "MediaParserStore");
23
- var MediaParserStore = _MediaParserStore;
24
-
25
- exports.MediaParserStore = MediaParserStore;
26
- //# sourceMappingURL=out.js.map
27
- //# sourceMappingURL=MediaParserStore.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../src/lib/structures/MediaParserStore.ts"],"names":[],"mappings":";;;;AAAA,SAAS,aAAa;AACtB,SAAS,mBAAmB;AAKrB,IAAM,oBAAN,MAAM,0BAAyB,MAAmC;AAAA,EACjE,cAAc;AACpB,UAAM,aAAa,EAAE,MAAM,eAAe,CAAC;AAAA,EAC5C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,iBAAiB,aAA6B;AACpD,UAAM,QAAQ,YAAY,QAAQ,GAAG;AACrC,WAAO,UAAU,KAAK,cAAc,YAAY,MAAM,GAAG,KAAK;AAAA,EAC/D;AACD;AAdyE;AAAlE,IAAM,mBAAN","sourcesContent":["import { Store } from '@sapphire/pieces';\nimport { MediaParser } from './MediaParser';\n\n/**\n * @since 1.3.0\n */\nexport class MediaParserStore extends Store<MediaParser, 'mediaParsers'> {\n\tpublic constructor() {\n\t\tsuper(MediaParser, { name: 'mediaParsers' });\n\t}\n\n\t/**\n\t * Parses a content type by getting the relevant information inside.\n\t * @since 1.3.0\n\t * @param contentType The content type to parse.\n\t */\n\tpublic parseContentType(contentType: string): string {\n\t\tconst index = contentType.indexOf(';');\n\t\treturn index === -1 ? contentType : contentType.slice(0, index);\n\t}\n}\n"]}
@@ -1,26 +0,0 @@
1
- 'use strict';
2
-
3
- // src/lib/utils/MimeTypes.ts
4
- var MimeTypes = /* @__PURE__ */ ((MimeTypes2) => {
5
- MimeTypes2["ApplicationFormUrlEncoded"] = "application/x-www-form-urlencoded";
6
- MimeTypes2["ApplicationJson"] = "application/json";
7
- MimeTypes2["AudioOgg"] = "audio/ogg";
8
- MimeTypes2["AudioOpus"] = "audio/opus";
9
- MimeTypes2["AudioWebm"] = "audio/webm";
10
- MimeTypes2["ImageGif"] = "image/gif";
11
- MimeTypes2["ImageJpg"] = "image/jpeg";
12
- MimeTypes2["ImagePng"] = "image/png";
13
- MimeTypes2["ImageWebp"] = "image/webp";
14
- MimeTypes2["ImageXIcon"] = "image/x-icon";
15
- MimeTypes2["TextPlain"] = "text/plain";
16
- MimeTypes2["TextHtml"] = "text/html";
17
- MimeTypes2["VideoMp4"] = "video/mp4";
18
- MimeTypes2["VideoMpeg"] = "video/mpeg";
19
- MimeTypes2["VideoOgg"] = "video/ogg";
20
- MimeTypes2["VideoWebm"] = "video/webm";
21
- return MimeTypes2;
22
- })(MimeTypes || {});
23
-
24
- exports.MimeTypes = MimeTypes;
25
- //# sourceMappingURL=out.js.map
26
- //# sourceMappingURL=MimeTypes.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../src/lib/utils/MimeTypes.ts"],"names":["MimeTypes"],"mappings":";AAAO,IAAK,YAAL,kBAAKA,eAAL;AACN,EAAAA,WAAA,+BAA4B;AAC5B,EAAAA,WAAA,qBAAkB;AAClB,EAAAA,WAAA,cAAW;AACX,EAAAA,WAAA,eAAY;AACZ,EAAAA,WAAA,eAAY;AACZ,EAAAA,WAAA,cAAW;AACX,EAAAA,WAAA,cAAW;AACX,EAAAA,WAAA,cAAW;AACX,EAAAA,WAAA,eAAY;AACZ,EAAAA,WAAA,gBAAa;AACb,EAAAA,WAAA,eAAY;AACZ,EAAAA,WAAA,cAAW;AACX,EAAAA,WAAA,cAAW;AACX,EAAAA,WAAA,eAAY;AACZ,EAAAA,WAAA,cAAW;AACX,EAAAA,WAAA,eAAY;AAhBD,SAAAA;AAAA,GAAA","sourcesContent":["export enum MimeTypes {\n\tApplicationFormUrlEncoded = 'application/x-www-form-urlencoded',\n\tApplicationJson = 'application/json',\n\tAudioOgg = 'audio/ogg',\n\tAudioOpus = 'audio/opus',\n\tAudioWebm = 'audio/webm',\n\tImageGif = 'image/gif',\n\tImageJpg = 'image/jpeg',\n\tImagePng = 'image/png',\n\tImageWebp = 'image/webp',\n\tImageXIcon = 'image/x-icon',\n\tTextPlain = 'text/plain',\n\tTextHtml = 'text/html',\n\tVideoMp4 = 'video/mp4',\n\tVideoMpeg = 'video/mpeg',\n\tVideoOgg = 'video/ogg',\n\tVideoWebm = 'video/webm'\n}\n"]}
@@ -1,20 +0,0 @@
1
- 'use strict';
2
-
3
- var pieces = require('@sapphire/pieces');
4
- var applicationFormUrlEncoded_cjs = require('./applicationFormUrlEncoded.cjs');
5
- var applicationJson_cjs = require('./applicationJson.cjs');
6
- var textPlain_cjs = require('./textPlain.cjs');
7
-
8
- var __defProp = Object.defineProperty;
9
- var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
10
- function loadMediaParsers() {
11
- const store = "mediaParsers";
12
- void pieces.container.stores.loadPiece({ name: "applicationFormUrlEncoded", piece: applicationFormUrlEncoded_cjs.PluginMediaParser, store });
13
- void pieces.container.stores.loadPiece({ name: "applicationJson", piece: applicationJson_cjs.PluginMediaParser, store });
14
- void pieces.container.stores.loadPiece({ name: "textPlain", piece: textPlain_cjs.PluginMediaParser, store });
15
- }
16
- __name(loadMediaParsers, "loadMediaParsers");
17
-
18
- exports.loadMediaParsers = loadMediaParsers;
19
- //# sourceMappingURL=out.js.map
20
- //# sourceMappingURL=_load.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/mediaParsers/_load.ts"],"names":[],"mappings":";;;;AAAA,SAAS,iBAAiB;AAC1B,SAAS,qBAAqB,uCAAuC;AACrE,SAAS,qBAAqB,6BAA6B;AAC3D,SAAS,qBAAqB,uBAAuB;AAE9C,SAAS,mBAAmB;AAClC,QAAM,QAAQ;AACd,OAAK,UAAU,OAAO,UAAU,EAAE,MAAM,6BAA6B,OAAO,iCAAiC,MAAM,CAAC;AACpH,OAAK,UAAU,OAAO,UAAU,EAAE,MAAM,mBAAmB,OAAO,uBAAuB,MAAM,CAAC;AAChG,OAAK,UAAU,OAAO,UAAU,EAAE,MAAM,aAAa,OAAO,iBAAiB,MAAM,CAAC;AACrF;AALgB","sourcesContent":["import { container } from '@sapphire/pieces';\nimport { PluginMediaParser as PluginApplicationFormUrlEncoded } from './applicationFormUrlEncoded';\nimport { PluginMediaParser as PluginApplicationJson } from './applicationJson';\nimport { PluginMediaParser as PluginTextPlain } from './textPlain';\n\nexport function loadMediaParsers() {\n\tconst store = 'mediaParsers' as const;\n\tvoid container.stores.loadPiece({ name: 'applicationFormUrlEncoded', piece: PluginApplicationFormUrlEncoded, store });\n\tvoid container.stores.loadPiece({ name: 'applicationJson', piece: PluginApplicationJson, store });\n\tvoid container.stores.loadPiece({ name: 'textPlain', piece: PluginTextPlain, store });\n}\n"]}
@@ -1,23 +0,0 @@
1
- 'use strict';
2
-
3
- var url = require('url');
4
- var MediaParser_cjs = require('../lib/structures/MediaParser.cjs');
5
- var MimeTypes_cjs = require('../lib/utils/MimeTypes.cjs');
6
-
7
- var __defProp = Object.defineProperty;
8
- var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
9
- var _PluginMediaParser = class _PluginMediaParser extends MediaParser_cjs.MediaParser {
10
- constructor(context) {
11
- super(context, { name: MimeTypes_cjs.MimeTypes.ApplicationFormUrlEncoded });
12
- }
13
- async run(request) {
14
- const body = await this.readString(request);
15
- return body.length === 0 ? null : Object.fromEntries(new url.URLSearchParams(body).entries());
16
- }
17
- };
18
- __name(_PluginMediaParser, "PluginMediaParser");
19
- var PluginMediaParser = _PluginMediaParser;
20
-
21
- exports.PluginMediaParser = PluginMediaParser;
22
- //# sourceMappingURL=out.js.map
23
- //# sourceMappingURL=applicationFormUrlEncoded.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/mediaParsers/applicationFormUrlEncoded.ts"],"names":[],"mappings":";;;;AAAA,SAAS,uBAAuB;AAChC,SAAS,mBAAmB;AAE5B,SAAS,iBAAiB;AAEnB,IAAM,qBAAN,MAAM,2BAA0B,YAAY;AAAA,EAC3C,YAAY,SAAoC;AACtD,UAAM,SAAS,EAAE,MAAM,UAAU,0BAA0B,CAAC;AAAA,EAC7D;AAAA,EAEA,MAAsB,IAAI,SAAuC;AAChE,UAAM,OAAO,MAAM,KAAK,WAAW,OAAO;AAC1C,WAAO,KAAK,WAAW,IAAI,OAAO,OAAO,YAAY,IAAI,gBAAgB,IAAI,EAAE,QAAQ,CAAC;AAAA,EACzF;AACD;AATmD;AAA5C,IAAM,oBAAN","sourcesContent":["import { URLSearchParams } from 'url';\nimport { MediaParser } from '../lib/structures/MediaParser';\nimport type { ApiRequest } from '../lib/structures/api/ApiRequest';\nimport { MimeTypes } from '../lib/utils/MimeTypes';\n\nexport class PluginMediaParser extends MediaParser {\n\tpublic constructor(context: MediaParser.LoaderContext) {\n\t\tsuper(context, { name: MimeTypes.ApplicationFormUrlEncoded });\n\t}\n\n\tpublic override async run(request: ApiRequest): Promise<unknown> {\n\t\tconst body = await this.readString(request);\n\t\treturn body.length === 0 ? null : Object.fromEntries(new URLSearchParams(body).entries());\n\t}\n}\n"]}
@@ -1,22 +0,0 @@
1
- 'use strict';
2
-
3
- var MediaParser_cjs = require('../lib/structures/MediaParser.cjs');
4
- var MimeTypes_cjs = require('../lib/utils/MimeTypes.cjs');
5
-
6
- var __defProp = Object.defineProperty;
7
- var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
8
- var _PluginMediaParser = class _PluginMediaParser extends MediaParser_cjs.MediaParser {
9
- constructor(context) {
10
- super(context, { name: MimeTypes_cjs.MimeTypes.ApplicationJson });
11
- }
12
- async run(request) {
13
- const body = await this.readString(request);
14
- return body.length === 0 ? null : JSON.parse(body);
15
- }
16
- };
17
- __name(_PluginMediaParser, "PluginMediaParser");
18
- var PluginMediaParser = _PluginMediaParser;
19
-
20
- exports.PluginMediaParser = PluginMediaParser;
21
- //# sourceMappingURL=out.js.map
22
- //# sourceMappingURL=applicationJson.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/mediaParsers/applicationJson.ts"],"names":[],"mappings":";;;;AAAA,SAAS,mBAAmB;AAC5B,SAAS,iBAAiB;AAEnB,IAAM,qBAAN,MAAM,2BAA0B,YAAY;AAAA,EAC3C,YAAY,SAAoC;AACtD,UAAM,SAAS,EAAE,MAAM,UAAU,gBAAgB,CAAC;AAAA,EACnD;AAAA,EAEA,MAAsB,IAAI,SAAgD;AACzE,UAAM,OAAO,MAAM,KAAK,WAAW,OAAO;AAC1C,WAAO,KAAK,WAAW,IAAI,OAAO,KAAK,MAAM,IAAI;AAAA,EAClD;AACD;AATmD;AAA5C,IAAM,oBAAN","sourcesContent":["import { MediaParser } from '../lib/structures/MediaParser';\nimport { MimeTypes } from '../lib/utils/MimeTypes';\n\nexport class PluginMediaParser extends MediaParser {\n\tpublic constructor(context: MediaParser.LoaderContext) {\n\t\tsuper(context, { name: MimeTypes.ApplicationJson });\n\t}\n\n\tpublic override async run(request: MediaParser.Request): Promise<unknown> {\n\t\tconst body = await this.readString(request);\n\t\treturn body.length === 0 ? null : JSON.parse(body);\n\t}\n}\n"]}
@@ -1,22 +0,0 @@
1
- 'use strict';
2
-
3
- var MediaParser_cjs = require('../lib/structures/MediaParser.cjs');
4
- var MimeTypes_cjs = require('../lib/utils/MimeTypes.cjs');
5
-
6
- var __defProp = Object.defineProperty;
7
- var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
8
- var _PluginMediaParser = class _PluginMediaParser extends MediaParser_cjs.MediaParser {
9
- constructor(context) {
10
- super(context, { name: MimeTypes_cjs.MimeTypes.TextPlain });
11
- }
12
- async run(request) {
13
- const body = await this.readString(request);
14
- return body.length === 0 ? null : body;
15
- }
16
- };
17
- __name(_PluginMediaParser, "PluginMediaParser");
18
- var PluginMediaParser = _PluginMediaParser;
19
-
20
- exports.PluginMediaParser = PluginMediaParser;
21
- //# sourceMappingURL=out.js.map
22
- //# sourceMappingURL=textPlain.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/mediaParsers/textPlain.ts"],"names":[],"mappings":";;;;AAAA,SAAS,mBAAmB;AAC5B,SAAS,iBAAiB;AAEnB,IAAM,qBAAN,MAAM,2BAA0B,YAAY;AAAA,EAC3C,YAAY,SAAoC;AACtD,UAAM,SAAS,EAAE,MAAM,UAAU,UAAU,CAAC;AAAA,EAC7C;AAAA,EAEA,MAAsB,IAAI,SAAgD;AACzE,UAAM,OAAO,MAAM,KAAK,WAAW,OAAO;AAC1C,WAAO,KAAK,WAAW,IAAI,OAAO;AAAA,EACnC;AACD;AATmD;AAA5C,IAAM,oBAAN","sourcesContent":["import { MediaParser } from '../lib/structures/MediaParser';\nimport { MimeTypes } from '../lib/utils/MimeTypes';\n\nexport class PluginMediaParser extends MediaParser {\n\tpublic constructor(context: MediaParser.LoaderContext) {\n\t\tsuper(context, { name: MimeTypes.TextPlain });\n\t}\n\n\tpublic override async run(request: MediaParser.Request): Promise<unknown> {\n\t\tconst body = await this.readString(request);\n\t\treturn body.length === 0 ? null : body;\n\t}\n}\n"]}
@@ -1,76 +0,0 @@
1
- import { __name } from '../../chunk-S573YWRP.mjs';
2
- import { Piece } from '@sapphire/pieces';
3
- import { createBrotliDecompress, createGunzip, createInflate } from 'zlib';
4
-
5
- var _MediaParser = class _MediaParser extends Piece {
6
- constructor(context, options = {}) {
7
- super(context, options);
8
- }
9
- /**
10
- * Checks if a route accepts the media type from this parser.
11
- * @since 1.3.0
12
- * @param route The route to be checked.
13
- */
14
- accepts(route) {
15
- return route.acceptedContentMimeTypes === null || route.acceptedContentMimeTypes.includes(this.name);
16
- }
17
- /**
18
- * Reads the content body as a string, this is useful for parsing/reading plain-text data.
19
- * @since 1.3.0
20
- * @param request The request to read the body from.
21
- */
22
- async readString(request) {
23
- const stream = this.contentStream(request);
24
- if (stream === null) return "";
25
- let body = "";
26
- for await (const chunk of stream) body += chunk;
27
- return body;
28
- }
29
- /**
30
- * Reads the content body as a buffer, this is useful for parsing/reading binary data.
31
- * @since 1.3.0
32
- * @param request The request to read the body from.
33
- */
34
- async readBuffer(request) {
35
- const stream = this.contentStream(request);
36
- if (stream === null) return Buffer.alloc(0);
37
- const bodies = [];
38
- for await (const chunk of stream) bodies.push(chunk);
39
- return Buffer.concat(bodies);
40
- }
41
- /**
42
- * Reads the content stream from a request, piping the data through a transformer stream.
43
- * @since 1.3.0
44
- * @param request The request to read the body from.
45
- */
46
- contentStream(request) {
47
- switch ((request.headers["content-encoding"] ?? "identity").toLowerCase()) {
48
- case "deflate": {
49
- const stream = createInflate();
50
- request.pipe(stream);
51
- return stream;
52
- }
53
- case "x-gzip":
54
- case "gzip": {
55
- const stream = createGunzip();
56
- request.pipe(stream);
57
- return stream;
58
- }
59
- case "br": {
60
- const stream = createBrotliDecompress();
61
- request.pipe(stream);
62
- return stream;
63
- }
64
- case "identity": {
65
- return request;
66
- }
67
- }
68
- return null;
69
- }
70
- };
71
- __name(_MediaParser, "MediaParser");
72
- var MediaParser = _MediaParser;
73
-
74
- export { MediaParser };
75
- //# sourceMappingURL=out.js.map
76
- //# sourceMappingURL=MediaParser.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../src/lib/structures/MediaParser.ts"],"names":[],"mappings":";;;;;AAAA,SAAS,aAAa;AAEtB,SAAS,wBAAwB,cAAc,qBAAkC;AAS1E,IAAe,eAAf,MAAe,qBAA+E,MAA+B;AAAA,EAC5H,YAAY,SAAoC,UAAmB,CAAC,GAAc;AACxF,UAAM,SAAS,OAAO;AAAA,EACvB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAaO,QAAQ,OAAuB;AACrC,WAAO,MAAM,6BAA6B,QAAQ,MAAM,yBAAyB,SAAS,KAAK,IAAiC;AAAA,EACjI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAgB,WAAW,SAA+C;AACzE,UAAM,SAAS,KAAK,cAAc,OAAO;AACzC,QAAI,WAAW,KAAM,QAAO;AAE5B,QAAI,OAAO;AACX,qBAAiB,SAAS,OAAQ,SAAQ;AAE1C,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAgB,WAAW,SAA+C;AACzE,UAAM,SAAS,KAAK,cAAc,OAAO;AACzC,QAAI,WAAW,KAAM,QAAO,OAAO,MAAM,CAAC;AAE1C,UAAM,SAAmB,CAAC;AAC1B,qBAAiB,SAAS,OAAQ,QAAO,KAAK,KAAK;AAEnD,WAAO,OAAO,OAAO,MAAM;AAAA,EAC5B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOU,cAAc,SAAmE;AAC1F,aAAS,QAAQ,QAAQ,kBAAkB,KAAK,YAAY,YAAY,GAAG;AAAA,MAK1E,KAAK,WAAW;AACf,cAAM,SAAS,cAAc;AAC7B,gBAAQ,KAAK,MAAM;AACnB,eAAO;AAAA,MACR;AAAA,MAMA,KAAK;AAAA,MACL,KAAK,QAAQ;AACZ,cAAM,SAAS,aAAa;AAC5B,gBAAQ,KAAK,MAAM;AACnB,eAAO;AAAA,MACR;AAAA,MAKA,KAAK,MAAM;AACV,cAAM,SAAS,uBAAuB;AACtC,gBAAQ,KAAK,MAAM;AACnB,eAAO;AAAA,MACR;AAAA,MAIA,KAAK,YAAY;AAChB,eAAO;AAAA,MACR;AAAA,IACD;AAEA,WAAO;AAAA,EACR;AACD;AAhGoI;AAA7H,IAAe,cAAf","sourcesContent":["import { Piece } from '@sapphire/pieces';\nimport type { Awaitable } from '@sapphire/utilities';\nimport { createBrotliDecompress, createGunzip, createInflate, type Gunzip } from 'zlib';\nimport type { ApiRequest } from './api/ApiRequest';\nimport type { MimeTypeWithoutParameters } from './http/Server';\nimport type { Route } from './Route';\n\n/**\n * A media parser\n * @since 1.3.0\n */\nexport abstract class MediaParser<Options extends MediaParser.Options = MediaParser.Options> extends Piece<Options, 'mediaParsers'> {\n\tpublic constructor(context: MediaParser.LoaderContext, options: Options = {} as Options) {\n\t\tsuper(context, options);\n\t}\n\n\t/**\n\t * Parses the body data from an API request.\n\t * @since 1.3.0\n\t */\n\tpublic abstract run(request: MediaParser.Request): Awaitable<unknown>;\n\n\t/**\n\t * Checks if a route accepts the media type from this parser.\n\t * @since 1.3.0\n\t * @param route The route to be checked.\n\t */\n\tpublic accepts(route: Route): boolean {\n\t\treturn route.acceptedContentMimeTypes === null || route.acceptedContentMimeTypes.includes(this.name as MimeTypeWithoutParameters);\n\t}\n\n\t/**\n\t * Reads the content body as a string, this is useful for parsing/reading plain-text data.\n\t * @since 1.3.0\n\t * @param request The request to read the body from.\n\t */\n\tprotected async readString(request: MediaParser.Request): Promise<string> {\n\t\tconst stream = this.contentStream(request);\n\t\tif (stream === null) return '';\n\n\t\tlet body = '';\n\t\tfor await (const chunk of stream) body += chunk;\n\n\t\treturn body;\n\t}\n\n\t/**\n\t * Reads the content body as a buffer, this is useful for parsing/reading binary data.\n\t * @since 1.3.0\n\t * @param request The request to read the body from.\n\t */\n\tprotected async readBuffer(request: MediaParser.Request): Promise<Buffer> {\n\t\tconst stream = this.contentStream(request);\n\t\tif (stream === null) return Buffer.alloc(0);\n\n\t\tconst bodies: Buffer[] = [];\n\t\tfor await (const chunk of stream) bodies.push(chunk);\n\n\t\treturn Buffer.concat(bodies);\n\t}\n\n\t/**\n\t * Reads the content stream from a request, piping the data through a transformer stream.\n\t * @since 1.3.0\n\t * @param request The request to read the body from.\n\t */\n\tprotected contentStream(request: MediaParser.Request): MediaParser.Request | Gunzip | null {\n\t\tswitch ((request.headers['content-encoding'] ?? 'identity').toLowerCase()) {\n\t\t\t// RFC 7230 4.2.2:\n\t\t\t//\n\t\t\t// The \"deflate\" coding is a \"zlib\" data format (RFC 1950) containing a \"deflate\" compressed data stream\n\t\t\t// (RFC 1951) that uses a combination of the Lempel-Ziv (LZ77) compression algorithm and Huffman coding.\n\t\t\tcase 'deflate': {\n\t\t\t\tconst stream = createInflate();\n\t\t\t\trequest.pipe(stream);\n\t\t\t\treturn stream;\n\t\t\t}\n\n\t\t\t// RFC 7230 4.2.3\n\t\t\t//\n\t\t\t// The \"gzip\" coding is an LZ77 coding with a 32-bit Cyclic Redundancy Check (CRC) that is commonly produced\n\t\t\t// by the gzip file compression program (RFC 1952).\n\t\t\tcase 'x-gzip':\n\t\t\tcase 'gzip': {\n\t\t\t\tconst stream = createGunzip();\n\t\t\t\trequest.pipe(stream);\n\t\t\t\treturn stream;\n\t\t\t}\n\n\t\t\t// RFC 7932\n\t\t\t//\n\t\t\t// A format using the Brotli algorithm.\n\t\t\tcase 'br': {\n\t\t\t\tconst stream = createBrotliDecompress();\n\t\t\t\trequest.pipe(stream);\n\t\t\t\treturn stream;\n\t\t\t}\n\n\t\t\t// An \"identity\" token is used as a synonym for \"no encoding\" in order to communicate when no encoding is\n\t\t\t// preferred.\n\t\t\tcase 'identity': {\n\t\t\t\treturn request;\n\t\t\t}\n\t\t}\n\n\t\treturn null;\n\t}\n}\n\nexport namespace MediaParser {\n\t/** @deprecated Use {@linkcode LoaderContext} instead. */\n\texport type Context = LoaderContext;\n\texport type LoaderContext = Piece.LoaderContext<'mediaParsers'>;\n\texport type Options = Piece.Options;\n\texport type JSON = Piece.JSON;\n\texport type LocationJSON = Piece.LocationJSON;\n\n\texport type Request = ApiRequest;\n}\n"]}
@@ -1,24 +0,0 @@
1
- import { __name } from '../../chunk-S573YWRP.mjs';
2
- import { Store } from '@sapphire/pieces';
3
- import { MediaParser } from './MediaParser.mjs';
4
-
5
- var _MediaParserStore = class _MediaParserStore extends Store {
6
- constructor() {
7
- super(MediaParser, { name: "mediaParsers" });
8
- }
9
- /**
10
- * Parses a content type by getting the relevant information inside.
11
- * @since 1.3.0
12
- * @param contentType The content type to parse.
13
- */
14
- parseContentType(contentType) {
15
- const index = contentType.indexOf(";");
16
- return index === -1 ? contentType : contentType.slice(0, index);
17
- }
18
- };
19
- __name(_MediaParserStore, "MediaParserStore");
20
- var MediaParserStore = _MediaParserStore;
21
-
22
- export { MediaParserStore };
23
- //# sourceMappingURL=out.js.map
24
- //# sourceMappingURL=MediaParserStore.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../src/lib/structures/MediaParserStore.ts"],"names":[],"mappings":";;;;;AAAA,SAAS,aAAa;AACtB,SAAS,mBAAmB;AAKrB,IAAM,oBAAN,MAAM,0BAAyB,MAAmC;AAAA,EACjE,cAAc;AACpB,UAAM,aAAa,EAAE,MAAM,eAAe,CAAC;AAAA,EAC5C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,iBAAiB,aAA6B;AACpD,UAAM,QAAQ,YAAY,QAAQ,GAAG;AACrC,WAAO,UAAU,KAAK,cAAc,YAAY,MAAM,GAAG,KAAK;AAAA,EAC/D;AACD;AAdyE;AAAlE,IAAM,mBAAN","sourcesContent":["import { Store } from '@sapphire/pieces';\nimport { MediaParser } from './MediaParser';\n\n/**\n * @since 1.3.0\n */\nexport class MediaParserStore extends Store<MediaParser, 'mediaParsers'> {\n\tpublic constructor() {\n\t\tsuper(MediaParser, { name: 'mediaParsers' });\n\t}\n\n\t/**\n\t * Parses a content type by getting the relevant information inside.\n\t * @since 1.3.0\n\t * @param contentType The content type to parse.\n\t */\n\tpublic parseContentType(contentType: string): string {\n\t\tconst index = contentType.indexOf(';');\n\t\treturn index === -1 ? contentType : contentType.slice(0, index);\n\t}\n}\n"]}
@@ -1,26 +0,0 @@
1
- import '../../chunk-S573YWRP.mjs';
2
-
3
- // src/lib/utils/MimeTypes.ts
4
- var MimeTypes = /* @__PURE__ */ ((MimeTypes2) => {
5
- MimeTypes2["ApplicationFormUrlEncoded"] = "application/x-www-form-urlencoded";
6
- MimeTypes2["ApplicationJson"] = "application/json";
7
- MimeTypes2["AudioOgg"] = "audio/ogg";
8
- MimeTypes2["AudioOpus"] = "audio/opus";
9
- MimeTypes2["AudioWebm"] = "audio/webm";
10
- MimeTypes2["ImageGif"] = "image/gif";
11
- MimeTypes2["ImageJpg"] = "image/jpeg";
12
- MimeTypes2["ImagePng"] = "image/png";
13
- MimeTypes2["ImageWebp"] = "image/webp";
14
- MimeTypes2["ImageXIcon"] = "image/x-icon";
15
- MimeTypes2["TextPlain"] = "text/plain";
16
- MimeTypes2["TextHtml"] = "text/html";
17
- MimeTypes2["VideoMp4"] = "video/mp4";
18
- MimeTypes2["VideoMpeg"] = "video/mpeg";
19
- MimeTypes2["VideoOgg"] = "video/ogg";
20
- MimeTypes2["VideoWebm"] = "video/webm";
21
- return MimeTypes2;
22
- })(MimeTypes || {});
23
-
24
- export { MimeTypes };
25
- //# sourceMappingURL=out.js.map
26
- //# sourceMappingURL=MimeTypes.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../src/lib/utils/MimeTypes.ts"],"names":["MimeTypes"],"mappings":";;;AAAO,IAAK,YAAL,kBAAKA,eAAL;AACN,EAAAA,WAAA,+BAA4B;AAC5B,EAAAA,WAAA,qBAAkB;AAClB,EAAAA,WAAA,cAAW;AACX,EAAAA,WAAA,eAAY;AACZ,EAAAA,WAAA,eAAY;AACZ,EAAAA,WAAA,cAAW;AACX,EAAAA,WAAA,cAAW;AACX,EAAAA,WAAA,cAAW;AACX,EAAAA,WAAA,eAAY;AACZ,EAAAA,WAAA,gBAAa;AACb,EAAAA,WAAA,eAAY;AACZ,EAAAA,WAAA,cAAW;AACX,EAAAA,WAAA,cAAW;AACX,EAAAA,WAAA,eAAY;AACZ,EAAAA,WAAA,cAAW;AACX,EAAAA,WAAA,eAAY;AAhBD,SAAAA;AAAA,GAAA","sourcesContent":["export enum MimeTypes {\n\tApplicationFormUrlEncoded = 'application/x-www-form-urlencoded',\n\tApplicationJson = 'application/json',\n\tAudioOgg = 'audio/ogg',\n\tAudioOpus = 'audio/opus',\n\tAudioWebm = 'audio/webm',\n\tImageGif = 'image/gif',\n\tImageJpg = 'image/jpeg',\n\tImagePng = 'image/png',\n\tImageWebp = 'image/webp',\n\tImageXIcon = 'image/x-icon',\n\tTextPlain = 'text/plain',\n\tTextHtml = 'text/html',\n\tVideoMp4 = 'video/mp4',\n\tVideoMpeg = 'video/mpeg',\n\tVideoOgg = 'video/ogg',\n\tVideoWebm = 'video/webm'\n}\n"]}