@sapphire/plugin-api 7.0.0-next.d27dc1c → 7.0.0-next.d2c9aaa

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 (206) hide show
  1. package/README.md +0 -1
  2. package/dist/cjs/index.cjs +21 -33
  3. package/dist/cjs/index.cjs.map +1 -1
  4. package/dist/cjs/index.d.cts +318 -212
  5. package/dist/cjs/lib/structures/Augmentations.d.cjs +1 -1
  6. package/dist/cjs/lib/structures/Augmentations.d.cjs.map +1 -1
  7. package/dist/cjs/lib/structures/Middleware.cjs +2 -2
  8. package/dist/cjs/lib/structures/Middleware.cjs.map +1 -1
  9. package/dist/cjs/lib/structures/MiddlewareStore.cjs +4 -4
  10. package/dist/cjs/lib/structures/MiddlewareStore.cjs.map +1 -1
  11. package/dist/cjs/lib/structures/Route.cjs +18 -40
  12. package/dist/cjs/lib/structures/Route.cjs.map +1 -1
  13. package/dist/cjs/lib/structures/RouteLoaderStrategy.cjs +20 -0
  14. package/dist/cjs/lib/structures/RouteLoaderStrategy.cjs.map +1 -0
  15. package/dist/cjs/lib/structures/RouteStore.cjs +6 -44
  16. package/dist/cjs/lib/structures/RouteStore.cjs.map +1 -1
  17. package/dist/cjs/lib/structures/api/ApiRequest.cjs +155 -5
  18. package/dist/cjs/lib/structures/api/ApiRequest.cjs.map +1 -1
  19. package/dist/cjs/lib/structures/api/ApiResponse.cjs +12 -7
  20. package/dist/cjs/lib/structures/api/ApiResponse.cjs.map +1 -1
  21. package/dist/cjs/lib/structures/api/CookieStore.cjs +4 -4
  22. package/dist/cjs/lib/structures/api/CookieStore.cjs.map +1 -1
  23. package/dist/cjs/lib/structures/http/Auth.cjs +2 -2
  24. package/dist/cjs/lib/structures/http/Auth.cjs.map +1 -1
  25. package/dist/cjs/lib/structures/http/HttpCodes.cjs +1 -1
  26. package/dist/cjs/lib/structures/http/HttpCodes.cjs.map +1 -1
  27. package/dist/cjs/lib/structures/http/HttpMethods.cjs +39 -7
  28. package/dist/cjs/lib/structures/http/HttpMethods.cjs.map +1 -1
  29. package/dist/cjs/lib/structures/http/Server.cjs +17 -23
  30. package/dist/cjs/lib/structures/http/Server.cjs.map +1 -1
  31. package/dist/cjs/lib/structures/router/RouterBranch.cjs +184 -0
  32. package/dist/cjs/lib/structures/router/RouterBranch.cjs.map +1 -0
  33. package/dist/cjs/lib/structures/router/RouterNode.cjs +67 -0
  34. package/dist/cjs/lib/structures/router/RouterNode.cjs.map +1 -0
  35. package/dist/cjs/lib/structures/router/RouterRoot.cjs +81 -0
  36. package/dist/cjs/lib/structures/router/RouterRoot.cjs.map +1 -0
  37. package/dist/cjs/lib/utils/MimeType.cjs +4 -0
  38. package/dist/cjs/lib/utils/MimeType.cjs.map +1 -0
  39. package/dist/cjs/lib/utils/_body/RequestHeadersProxy.cjs +100 -0
  40. package/dist/cjs/lib/utils/_body/RequestHeadersProxy.cjs.map +1 -0
  41. package/dist/cjs/lib/utils/_body/RequestProxy.cjs +123 -0
  42. package/dist/cjs/lib/utils/_body/RequestProxy.cjs.map +1 -0
  43. package/dist/cjs/lib/utils/_body/RequestURLProxy.cjs +179 -0
  44. package/dist/cjs/lib/utils/_body/RequestURLProxy.cjs.map +1 -0
  45. package/dist/cjs/lib/utils/constants.cjs +8 -0
  46. package/dist/cjs/lib/utils/constants.cjs.map +1 -0
  47. package/dist/cjs/listeners/PluginRouteError.cjs +3 -3
  48. package/dist/cjs/listeners/PluginRouteError.cjs.map +1 -1
  49. package/dist/cjs/listeners/PluginServerMiddlewareError.cjs +3 -3
  50. package/dist/cjs/listeners/PluginServerMiddlewareError.cjs.map +1 -1
  51. package/dist/cjs/listeners/PluginServerMiddlewareSuccess.cjs +5 -5
  52. package/dist/cjs/listeners/PluginServerMiddlewareSuccess.cjs.map +1 -1
  53. package/dist/cjs/listeners/PluginServerRequest.cjs +42 -8
  54. package/dist/cjs/listeners/PluginServerRequest.cjs.map +1 -1
  55. package/dist/cjs/listeners/{PluginServerMatch.cjs → PluginServerRouterBranchMethodNotAllowed.cjs} +5 -10
  56. package/dist/cjs/listeners/PluginServerRouterBranchMethodNotAllowed.cjs.map +1 -0
  57. package/dist/cjs/listeners/{PluginServerNoMatch.cjs → PluginServerRouterBranchNotFound.cjs} +3 -3
  58. package/dist/cjs/listeners/PluginServerRouterBranchNotFound.cjs.map +1 -0
  59. package/dist/cjs/listeners/PluginServerRouterFound.cjs +22 -0
  60. package/dist/cjs/listeners/PluginServerRouterFound.cjs.map +1 -0
  61. package/dist/cjs/listeners/_load.cjs +7 -5
  62. package/dist/cjs/listeners/_load.cjs.map +1 -1
  63. package/dist/cjs/middlewares/_load.cjs +1 -1
  64. package/dist/cjs/middlewares/_load.cjs.map +1 -1
  65. package/dist/cjs/middlewares/auth.cjs +2 -2
  66. package/dist/cjs/middlewares/auth.cjs.map +1 -1
  67. package/dist/cjs/middlewares/body.cjs +4 -19
  68. package/dist/cjs/middlewares/body.cjs.map +1 -1
  69. package/dist/cjs/middlewares/cookies.cjs +1 -1
  70. package/dist/cjs/middlewares/cookies.cjs.map +1 -1
  71. package/dist/cjs/middlewares/headers.cjs +19 -9
  72. package/dist/cjs/middlewares/headers.cjs.map +1 -1
  73. package/dist/cjs/register.cjs +3 -4
  74. package/dist/cjs/register.cjs.map +1 -1
  75. package/dist/cjs/register.d.cts +0 -1
  76. package/dist/cjs/routes/_load.cjs +5 -5
  77. package/dist/cjs/routes/_load.cjs.map +1 -1
  78. package/dist/cjs/routes/oauth/{callback.cjs → callback.post.cjs} +6 -7
  79. package/dist/cjs/routes/oauth/callback.post.cjs.map +1 -0
  80. package/dist/cjs/routes/oauth/{logout.cjs → logout.post.cjs} +6 -8
  81. package/dist/cjs/routes/oauth/logout.post.cjs.map +1 -0
  82. package/dist/esm/{chunk-JTFKMR4I.mjs → chunk-S573YWRP.mjs} +4 -3
  83. package/dist/esm/chunk-S573YWRP.mjs.map +1 -0
  84. package/dist/esm/index.d.mts +318 -212
  85. package/dist/esm/index.mjs +6 -8
  86. package/dist/esm/index.mjs.map +1 -1
  87. package/dist/esm/lib/structures/Augmentations.d.mjs +1 -1
  88. package/dist/esm/lib/structures/Augmentations.d.mjs.map +1 -1
  89. package/dist/esm/lib/structures/Middleware.mjs +2 -2
  90. package/dist/esm/lib/structures/Middleware.mjs.map +1 -1
  91. package/dist/esm/lib/structures/MiddlewareStore.mjs +4 -4
  92. package/dist/esm/lib/structures/MiddlewareStore.mjs.map +1 -1
  93. package/dist/esm/lib/structures/Route.mjs +19 -41
  94. package/dist/esm/lib/structures/Route.mjs.map +1 -1
  95. package/dist/esm/lib/structures/RouteLoaderStrategy.mjs +17 -0
  96. package/dist/esm/lib/structures/RouteLoaderStrategy.mjs.map +1 -0
  97. package/dist/esm/lib/structures/RouteStore.mjs +6 -44
  98. package/dist/esm/lib/structures/RouteStore.mjs.map +1 -1
  99. package/dist/esm/lib/structures/api/ApiRequest.mjs +149 -6
  100. package/dist/esm/lib/structures/api/ApiRequest.mjs.map +1 -1
  101. package/dist/esm/lib/structures/api/ApiResponse.mjs +12 -7
  102. package/dist/esm/lib/structures/api/ApiResponse.mjs.map +1 -1
  103. package/dist/esm/lib/structures/api/CookieStore.mjs +5 -5
  104. package/dist/esm/lib/structures/api/CookieStore.mjs.map +1 -1
  105. package/dist/esm/lib/structures/http/Auth.mjs +2 -2
  106. package/dist/esm/lib/structures/http/Auth.mjs.map +1 -1
  107. package/dist/esm/lib/structures/http/HttpCodes.mjs +2 -2
  108. package/dist/esm/lib/structures/http/HttpCodes.mjs.map +1 -1
  109. package/dist/esm/lib/structures/http/HttpMethods.mjs +41 -6
  110. package/dist/esm/lib/structures/http/HttpMethods.mjs.map +1 -1
  111. package/dist/esm/lib/structures/http/Server.mjs +18 -24
  112. package/dist/esm/lib/structures/http/Server.mjs.map +1 -1
  113. package/dist/esm/lib/structures/router/RouterBranch.mjs +179 -0
  114. package/dist/esm/lib/structures/router/RouterBranch.mjs.map +1 -0
  115. package/dist/esm/lib/structures/router/RouterNode.mjs +56 -0
  116. package/dist/esm/lib/structures/router/RouterNode.mjs.map +1 -0
  117. package/dist/esm/lib/structures/router/RouterRoot.mjs +78 -0
  118. package/dist/esm/lib/structures/router/RouterRoot.mjs.map +1 -0
  119. package/dist/esm/lib/utils/MimeType.mjs +3 -0
  120. package/dist/esm/lib/utils/MimeType.mjs.map +1 -0
  121. package/dist/esm/lib/utils/_body/RequestHeadersProxy.mjs +95 -0
  122. package/dist/esm/lib/utils/_body/RequestHeadersProxy.mjs.map +1 -0
  123. package/dist/esm/lib/utils/_body/RequestProxy.mjs +111 -0
  124. package/dist/esm/lib/utils/_body/RequestProxy.mjs.map +1 -0
  125. package/dist/esm/lib/utils/_body/RequestURLProxy.mjs +167 -0
  126. package/dist/esm/lib/utils/_body/RequestURLProxy.mjs.map +1 -0
  127. package/dist/esm/lib/utils/constants.mjs +8 -0
  128. package/dist/esm/lib/utils/constants.mjs.map +1 -0
  129. package/dist/esm/listeners/PluginRouteError.mjs +5 -5
  130. package/dist/esm/listeners/PluginRouteError.mjs.map +1 -1
  131. package/dist/esm/listeners/PluginServerMiddlewareError.mjs +5 -5
  132. package/dist/esm/listeners/PluginServerMiddlewareError.mjs.map +1 -1
  133. package/dist/esm/listeners/PluginServerMiddlewareSuccess.mjs +7 -7
  134. package/dist/esm/listeners/PluginServerMiddlewareSuccess.mjs.map +1 -1
  135. package/dist/esm/listeners/PluginServerRequest.mjs +38 -10
  136. package/dist/esm/listeners/PluginServerRequest.mjs.map +1 -1
  137. package/dist/esm/listeners/PluginServerRouterBranchMethodNotAllowed.mjs +18 -0
  138. package/dist/esm/listeners/PluginServerRouterBranchMethodNotAllowed.mjs.map +1 -0
  139. package/dist/esm/listeners/{PluginServerNoMatch.mjs → PluginServerRouterBranchNotFound.mjs} +5 -5
  140. package/dist/esm/listeners/PluginServerRouterBranchNotFound.mjs.map +1 -0
  141. package/dist/esm/listeners/PluginServerRouterFound.mjs +19 -0
  142. package/dist/esm/listeners/PluginServerRouterFound.mjs.map +1 -0
  143. package/dist/esm/listeners/_load.mjs +14 -12
  144. package/dist/esm/listeners/_load.mjs.map +1 -1
  145. package/dist/esm/middlewares/_load.mjs +2 -2
  146. package/dist/esm/middlewares/_load.mjs.map +1 -1
  147. package/dist/esm/middlewares/auth.mjs +2 -2
  148. package/dist/esm/middlewares/auth.mjs.map +1 -1
  149. package/dist/esm/middlewares/body.mjs +5 -18
  150. package/dist/esm/middlewares/body.mjs.map +1 -1
  151. package/dist/esm/middlewares/cookies.mjs +2 -2
  152. package/dist/esm/middlewares/cookies.mjs.map +1 -1
  153. package/dist/esm/middlewares/headers.mjs +20 -10
  154. package/dist/esm/middlewares/headers.mjs.map +1 -1
  155. package/dist/esm/register.d.mts +0 -1
  156. package/dist/esm/register.mjs +4 -5
  157. package/dist/esm/register.mjs.map +1 -1
  158. package/dist/esm/routes/_load.mjs +4 -4
  159. package/dist/esm/routes/_load.mjs.map +1 -1
  160. package/dist/esm/routes/oauth/{callback.mjs → callback.post.mjs} +6 -7
  161. package/dist/esm/routes/oauth/callback.post.mjs.map +1 -0
  162. package/dist/esm/routes/oauth/{logout.mjs → logout.post.mjs} +6 -8
  163. package/dist/esm/routes/oauth/logout.post.mjs.map +1 -0
  164. package/package.json +11 -8
  165. package/dist/cjs/lib/structures/MediaParser.cjs +0 -79
  166. package/dist/cjs/lib/structures/MediaParser.cjs.map +0 -1
  167. package/dist/cjs/lib/structures/MediaParserStore.cjs +0 -27
  168. package/dist/cjs/lib/structures/MediaParserStore.cjs.map +0 -1
  169. package/dist/cjs/lib/utils/MimeTypes.cjs +0 -26
  170. package/dist/cjs/lib/utils/MimeTypes.cjs.map +0 -1
  171. package/dist/cjs/lib/utils/RouteData.cjs +0 -62
  172. package/dist/cjs/lib/utils/RouteData.cjs.map +0 -1
  173. package/dist/cjs/listeners/PluginServerMatch.cjs.map +0 -1
  174. package/dist/cjs/listeners/PluginServerNoMatch.cjs.map +0 -1
  175. package/dist/cjs/mediaParsers/_load.cjs +0 -20
  176. package/dist/cjs/mediaParsers/_load.cjs.map +0 -1
  177. package/dist/cjs/mediaParsers/applicationFormUrlEncoded.cjs +0 -23
  178. package/dist/cjs/mediaParsers/applicationFormUrlEncoded.cjs.map +0 -1
  179. package/dist/cjs/mediaParsers/applicationJson.cjs +0 -22
  180. package/dist/cjs/mediaParsers/applicationJson.cjs.map +0 -1
  181. package/dist/cjs/mediaParsers/textPlain.cjs +0 -22
  182. package/dist/cjs/mediaParsers/textPlain.cjs.map +0 -1
  183. package/dist/cjs/routes/oauth/callback.cjs.map +0 -1
  184. package/dist/cjs/routes/oauth/logout.cjs.map +0 -1
  185. package/dist/esm/chunk-JTFKMR4I.mjs.map +0 -1
  186. package/dist/esm/lib/structures/MediaParser.mjs +0 -76
  187. package/dist/esm/lib/structures/MediaParser.mjs.map +0 -1
  188. package/dist/esm/lib/structures/MediaParserStore.mjs +0 -24
  189. package/dist/esm/lib/structures/MediaParserStore.mjs.map +0 -1
  190. package/dist/esm/lib/utils/MimeTypes.mjs +0 -26
  191. package/dist/esm/lib/utils/MimeTypes.mjs.map +0 -1
  192. package/dist/esm/lib/utils/RouteData.mjs +0 -56
  193. package/dist/esm/lib/utils/RouteData.mjs.map +0 -1
  194. package/dist/esm/listeners/PluginServerMatch.mjs +0 -23
  195. package/dist/esm/listeners/PluginServerMatch.mjs.map +0 -1
  196. package/dist/esm/listeners/PluginServerNoMatch.mjs.map +0 -1
  197. package/dist/esm/mediaParsers/_load.mjs +0 -17
  198. package/dist/esm/mediaParsers/_load.mjs.map +0 -1
  199. package/dist/esm/mediaParsers/applicationFormUrlEncoded.mjs +0 -20
  200. package/dist/esm/mediaParsers/applicationFormUrlEncoded.mjs.map +0 -1
  201. package/dist/esm/mediaParsers/applicationJson.mjs +0 -19
  202. package/dist/esm/mediaParsers/applicationJson.mjs.map +0 -1
  203. package/dist/esm/mediaParsers/textPlain.mjs +0 -19
  204. package/dist/esm/mediaParsers/textPlain.mjs.map +0 -1
  205. package/dist/esm/routes/oauth/callback.mjs.map +0 -1
  206. package/dist/esm/routes/oauth/logout.mjs.map +0 -1
@@ -1,10 +1,11 @@
1
- import { EventEmitter } from 'node:events';
1
+ import { AsyncEventEmitter } from '@vladfrangu/async_event_emitter';
2
2
  import { IncomingMessage, ServerResponse, Server as Server$1, ServerOptions as ServerOptions$1 } from 'node:http';
3
3
  import { ListenOptions } from 'node:net';
4
- import { Store, Piece } from '@sapphire/pieces';
4
+ import { Piece, Store } from '@sapphire/pieces';
5
5
  import { Awaitable } from '@sapphire/utilities';
6
- import { Gunzip } from 'zlib';
7
- import { Snowflake, OAuth2Scopes, RESTGetAPICurrentUserResult, RESTGetAPICurrentUserGuildsResult, RESTGetAPICurrentUserConnectionsResult, Collection } from 'discord.js';
6
+ import * as undici_types from 'undici-types';
7
+ import * as buffer from 'buffer';
8
+ import { Snowflake, OAuth2Scopes, RESTGetAPICurrentUserResult, RESTGetAPICurrentUserGuildsResult, RESTGetAPICurrentUserConnectionsResult } from 'discord.js';
8
9
  import { Readable } from 'node:stream';
9
10
 
10
11
  declare class Auth {
@@ -97,7 +98,7 @@ interface ServerOptionsAuth {
97
98
  * The client's application id, this can be retrieved in Discord Developer Portal at https://discord.com/developers/applications.
98
99
  * @since 1.0.0
99
100
  */
100
- id: string;
101
+ id: Snowflake;
101
102
  /**
102
103
  * The name for the cookie, this will be used to identify a Secure HttpOnly cookie.
103
104
  * @since 1.0.0
@@ -167,81 +168,10 @@ interface LoginDataTransformer<T extends LoginData = LoginData> {
167
168
  (data: LoginData): Awaitable<T>;
168
169
  }
169
170
 
170
- declare class ApiRequest extends IncomingMessage {
171
- /**
172
- * The query parameters.
173
- */
174
- query: Record<string, string | string[]>;
175
- /**
176
- * The URI parameters.
177
- */
178
- params: Record<string, string>;
179
- /**
180
- * The body that was sent by the user.
181
- */
182
- body?: unknown;
183
- /**
184
- * The authorization information. This field indicates three possible values:
185
- *
186
- * - `undefined`: The authorization middleware has not been executed yet.
187
- * - `null`: The user is not authorized.
188
- * - `AuthData`: The user is authorized.
189
- */
190
- auth?: AuthData | null;
191
- }
192
-
193
- /**
194
- * @since 1.0.0
195
- */
196
- declare enum TypeState {
197
- /**
198
- * @since 1.0.0
199
- */
200
- Static = 0,
201
- /**
202
- * @since 1.0.0
203
- */
204
- Dynamic = 1
205
- }
206
- type MatchData = Record<string, string> | null;
207
- declare class RouteData {
208
- readonly path: string;
209
- private readonly static;
210
- private readonly parts;
211
- constructor(path: string);
212
- match(split: readonly string[]): MatchData;
213
- /**
214
- * @since 1.0.0
215
- */
216
- private static parsePart;
217
- /**
218
- * @since 1.0.0
219
- */
220
- private static split;
221
- }
222
- interface ParsedPart {
223
- value: string;
224
- type: TypeState;
225
- }
171
+ type MethodName = (typeof MethodNames)[number];
172
+ declare const MethodNames: readonly ["ACL", "BIND", "CHECKOUT", "CONNECT", "COPY", "DELETE", "GET", "HEAD", "LINK", "LOCK", "M-SEARCH", "MERGE", "MKACTIVITY", "MKCALENDAR", "MKCOL", "MOVE", "NOTIFY", "OPTIONS", "PATCH", "POST", "PROPFIND", "PROPPATCH", "PURGE", "PUT", "QUERY", "REBIND", "REPORT", "SEARCH", "SOURCE", "SUBSCRIBE", "TRACE", "UNBIND", "UNLINK", "UNLOCK", "UNSUBSCRIBE"];
226
173
 
227
- declare enum MimeTypes {
228
- ApplicationFormUrlEncoded = "application/x-www-form-urlencoded",
229
- ApplicationJson = "application/json",
230
- AudioOgg = "audio/ogg",
231
- AudioOpus = "audio/opus",
232
- AudioWebm = "audio/webm",
233
- ImageGif = "image/gif",
234
- ImageJpg = "image/jpeg",
235
- ImagePng = "image/png",
236
- ImageWebp = "image/webp",
237
- ImageXIcon = "image/x-icon",
238
- TextPlain = "text/plain",
239
- TextHtml = "text/html",
240
- VideoMp4 = "video/mp4",
241
- VideoMpeg = "video/mpeg",
242
- VideoOgg = "video/ogg",
243
- VideoWebm = "video/webm"
244
- }
174
+ type MimeType = 'application/1d-interleaved-parityfec' | 'application/3gpdash-qoe-report+xml' | 'application/3gppHal+json' | 'application/3gppHalForms+json' | 'application/3gpp-ims+xml' | 'application/A2L' | 'application/ace-groupcomm+cbor' | 'application/ace+cbor' | 'application/ace+json' | 'application/activemessage' | 'application/activity+json' | 'application/aif+cbor' | 'application/aif+json' | 'application/alto-cdni+json' | 'application/alto-cdnifilter+json' | 'application/alto-costmap+json' | 'application/alto-costmapfilter+json' | 'application/alto-directory+json' | 'application/alto-endpointprop+json' | 'application/alto-endpointpropparams+json' | 'application/alto-endpointcost+json' | 'application/alto-endpointcostparams+json' | 'application/alto-error+json' | 'application/alto-networkmapfilter+json' | 'application/alto-networkmap+json' | 'application/alto-propmap+json' | 'application/alto-propmapparams+json' | 'application/alto-tips+json' | 'application/alto-tipsparams+json' | 'application/alto-updatestreamcontrol+json' | 'application/alto-updatestreamparams+json' | 'application/AML' | 'application/andrew-inset' | 'application/applefile' | 'application/at+jwt' | 'application/ATF' | 'application/ATFX' | 'application/atom+xml' | 'application/atomcat+xml' | 'application/atomdeleted+xml' | 'application/atomicmail' | 'application/atomsvc+xml' | 'application/atsc-dwd+xml' | 'application/atsc-dynamic-event-message' | 'application/atsc-held+xml' | 'application/atsc-rdt+json' | 'application/atsc-rsat+xml' | 'application/ATXML' | 'application/auth-policy+xml' | 'application/automationml-aml+xml' | 'application/automationml-amlx+zip' | 'application/bacnet-xdd+zip' | 'application/batch-SMTP' | 'application/beep+xml' | 'application/bufr' | 'application/c2pa' | 'application/calendar+json' | 'application/calendar+xml' | 'application/call-completion' | 'application/CALS-1840' | 'application/captive+json' | 'application/cbor' | 'application/cbor-seq' | 'application/cccex' | 'application/ccmp+xml' | 'application/ccxml+xml' | 'application/cda+xml' | 'application/CDFX+XML' | 'application/cdmi-capability' | 'application/cdmi-container' | 'application/cdmi-domain' | 'application/cdmi-object' | 'application/cdmi-queue' | 'application/cdni' | 'application/CEA' | 'application/cea-2018+xml' | 'application/cellml+xml' | 'application/cfw' | 'application/cid-edhoc+cbor-seq' | 'application/city+json' | 'application/clr' | 'application/clue_info+xml' | 'application/clue+xml' | 'application/cms' | 'application/cnrp+xml' | 'application/coap-group+json' | 'application/coap-payload' | 'application/commonground' | 'application/concise-problem-details+cbor' | 'application/conference-info+xml' | 'application/cpl+xml' | 'application/cose' | 'application/cose-key' | 'application/cose-key-set' | 'application/cose-x509' | 'application/csrattrs' | 'application/csta+xml' | 'application/CSTAdata+xml' | 'application/csvm+json' | 'application/cwl' | 'application/cwl+json' | 'application/cwl+yaml' | 'application/cwt' | 'application/cybercash' | 'application/dash+xml' | 'application/dash-patch+xml' | 'application/dashdelta' | 'application/davmount+xml' | 'application/dca-rft' | 'application/DCD' | 'application/dec-dx' | 'application/dialog-info+xml' | 'application/dicom' | 'application/dicom+json' | 'application/dicom+xml' | 'application/DII' | 'application/DIT' | 'application/dns' | 'application/dns+json' | 'application/dns-message' | 'application/dots+cbor' | 'application/dpop+jwt' | 'application/dskpp+xml' | 'application/dssc+der' | 'application/dssc+xml' | 'application/dvcs' | 'application/ecmascript' | 'application/edhoc+cbor-seq' | 'application/EDI-consent' | 'application/EDIFACT' | 'application/EDI-X12' | 'application/efi' | 'application/elm+json' | 'application/elm+xml' | 'application/EmergencyCallData.cap+xml' | 'application/EmergencyCallData.Comment+xml' | 'application/EmergencyCallData.Control+xml' | 'application/EmergencyCallData.DeviceInfo+xml' | 'application/EmergencyCallData.eCall.MSD' | 'application/EmergencyCallData.LegacyESN+json' | 'application/EmergencyCallData.ProviderInfo+xml' | 'application/EmergencyCallData.ServiceInfo+xml' | 'application/EmergencyCallData.SubscriberInfo+xml' | 'application/EmergencyCallData.VEDS+xml' | 'application/emma+xml' | 'application/emotionml+xml' | 'application/encaprtp' | 'application/entity-statement+jwt' | 'application/epp+xml' | 'application/epub+zip' | 'application/eshop' | 'application/example' | 'application/exi' | 'application/expect-ct-report+json' | 'application/express' | 'application/fastinfoset' | 'application/fastsoap' | 'application/fdf' | 'application/fdt+xml' | 'application/fhir+json' | 'application/fhir+xml' | 'application/fits' | 'application/flexfec' | 'application/font-sfnt' | 'application/font-tdpfr' | 'application/font-woff' | 'application/framework-attributes+xml' | 'application/geo+json' | 'application/geo+json-seq' | 'application/geopackage+sqlite3' | 'application/geopose+json' | 'application/geoxacml+json' | 'application/geoxacml+xml' | 'application/gltf-buffer' | 'application/gml+xml' | 'application/gnap-binding-jws' | 'application/gnap-binding-jwsd' | 'application/gnap-binding-rotation-jws' | 'application/gnap-binding-rotation-jwsd' | 'application/grib' | 'application/gzip' | 'application/H224' | 'application/held+xml' | 'application/hl7v2+xml' | 'application/http' | 'application/hyperstudio' | 'application/ibe-key-request+xml' | 'application/ibe-pkg-reply+xml' | 'application/ibe-pp-data' | 'application/iges' | 'application/im-iscomposing+xml' | 'application/index' | 'application/index.cmd' | 'application/index.obj' | 'application/index.response' | 'application/index.vnd' | 'application/inkml+xml' | 'application/IOTP' | 'application/ipfix' | 'application/ipp' | 'application/ISUP' | 'application/its+xml' | 'application/java-archive' | 'application/javascript' | 'application/jf2feed+json' | 'application/jose' | 'application/jose+json' | 'application/jrd+json' | 'application/jscalendar+json' | 'application/jscontact+json' | 'application/json' | 'application/json-patch+json' | 'application/json-seq' | 'application/jsonpath' | 'application/jwk+json' | 'application/jwk-set+json' | 'application/jwk-set+jwt' | 'application/jwt' | 'application/kpml-request+xml' | 'application/kpml-response+xml' | 'application/ld+json' | 'application/lgr+xml' | 'application/link-format' | 'application/linkset' | 'application/linkset+json' | 'application/load-control+xml' | 'application/logout+jwt' | 'application/lost+xml' | 'application/lostsync+xml' | 'application/lpf+zip' | 'application/LXF' | 'application/mac-binhex40' | 'application/macwriteii' | 'application/mads+xml' | 'application/manifest+json' | 'application/marc' | 'application/marcxml+xml' | 'application/mathematica' | 'application/mathml+xml' | 'application/mathml-content+xml' | 'application/mathml-presentation+xml' | 'application/mbms-associated-procedure-description+xml' | 'application/mbms-deregister+xml' | 'application/mbms-envelope+xml' | 'application/mbms-msk-response+xml' | 'application/mbms-msk+xml' | 'application/mbms-protection-description+xml' | 'application/mbms-reception-report+xml' | 'application/mbms-register-response+xml' | 'application/mbms-register+xml' | 'application/mbms-schedule+xml' | 'application/mbms-user-service-description+xml' | 'application/mbox' | 'application/media_control+xml' | 'application/media-policy-dataset+xml' | 'application/mediaservercontrol+xml' | 'application/merge-patch+json' | 'application/metalink4+xml' | 'application/mets+xml' | 'application/MF4' | 'application/mikey' | 'application/mipc' | 'application/missing-blocks+cbor-seq' | 'application/mmt-aei+xml' | 'application/mmt-usd+xml' | 'application/mods+xml' | 'application/moss-keys' | 'application/moss-signature' | 'application/mosskey-data' | 'application/mosskey-request' | 'application/mp21' | 'application/mp4' | 'application/mpeg4-generic' | 'application/mpeg4-iod' | 'application/mpeg4-iod-xmt' | 'application/mrb-consumer+xml' | 'application/mrb-publish+xml' | 'application/msc-ivr+xml' | 'application/msc-mixer+xml' | 'application/msword' | 'application/mud+json' | 'application/multipart-core' | 'application/mxf' | 'application/n-quads' | 'application/n-triples' | 'application/nasdata' | 'application/news-checkgroups' | 'application/news-groupinfo' | 'application/news-transmission' | 'application/nlsml+xml' | 'application/node' | 'application/nss' | 'application/oauth-authz-req+jwt' | 'application/oblivious-dns-message' | 'application/ocsp-request' | 'application/ocsp-response' | 'application/octet-stream' | 'application/ODA' | 'application/odm+xml' | 'application/ODX' | 'application/oebps-package+xml' | 'application/ogg' | 'application/ohttp-keys' | 'application/opc-nodeset+xml' | 'application/oscore' | 'application/oxps' | 'application/p21' | 'application/p21+zip' | 'application/p2p-overlay+xml' | 'application/parityfec' | 'application/passport' | 'application/patch-ops-error+xml' | 'application/pdf' | 'application/PDX' | 'application/pem-certificate-chain' | 'application/pgp-encrypted' | 'application/pgp-keys' | 'application/pgp-signature' | 'application/pidf-diff+xml' | 'application/pidf+xml' | 'application/pkcs10' | 'application/pkcs7-mime' | 'application/pkcs7-signature' | 'application/pkcs8' | 'application/pkcs8-encrypted' | 'application/pkcs12' | 'application/pkix-attr-cert' | 'application/pkix-cert' | 'application/pkix-crl' | 'application/pkix-pkipath' | 'application/pkixcmp' | 'application/pls+xml' | 'application/poc-settings+xml' | 'application/postscript' | 'application/ppsp-tracker+json' | 'application/private-token-issuer-directory' | 'application/private-token-request' | 'application/private-token-response' | 'application/problem+json' | 'application/problem+xml' | 'application/provenance+xml' | 'application/prs.alvestrand.titrax-sheet' | 'application/prs.cww' | 'application/prs.cyn' | 'application/prs.hpub+zip' | 'application/prs.implied-document+xml' | 'application/prs.implied-executable' | 'application/prs.implied-object+json' | 'application/prs.implied-object+json-seq' | 'application/prs.implied-object+yaml' | 'application/prs.implied-structure' | 'application/prs.mayfile' | 'application/prs.nprend' | 'application/prs.plucker' | 'application/prs.rdf-xml-crypt' | 'application/prs.vcfbzip2' | 'application/prs.xsf+xml' | 'application/pskc+xml' | 'application/pvd+json' | 'application/rdf+xml' | 'application/route-apd+xml' | 'application/route-s-tsid+xml' | 'application/route-usd+xml' | 'application/QSIG' | 'application/raptorfec' | 'application/rdap+json' | 'application/reginfo+xml' | 'application/relax-ng-compact-syntax' | 'application/remote-printing' | 'application/reputon+json' | 'application/resolve-response+jwt' | 'application/resource-lists-diff+xml' | 'application/resource-lists+xml' | 'application/rfc+xml' | 'application/riscos' | 'application/rlmi+xml' | 'application/rls-services+xml' | 'application/rpki-checklist' | 'application/rpki-ghostbusters' | 'application/rpki-manifest' | 'application/rpki-publication' | 'application/rpki-roa' | 'application/rpki-signed-tal' | 'application/rpki-updown' | 'application/rtf' | 'application/rtploopback' | 'application/rtx' | 'application/samlassertion+xml' | 'application/samlmetadata+xml' | 'application/sarif-external-properties+json' | 'application/sarif+json' | 'application/sbe' | 'application/sbml+xml' | 'application/scaip+xml' | 'application/scim+json' | 'application/scvp-cv-request' | 'application/scvp-cv-response' | 'application/scvp-vp-request' | 'application/scvp-vp-response' | 'application/sdp' | 'application/secevent+jwt' | 'application/senml-etch+cbor' | 'application/senml-etch+json' | 'application/senml-exi' | 'application/senml+cbor' | 'application/senml+json' | 'application/senml+xml' | 'application/sensml-exi' | 'application/sensml+cbor' | 'application/sensml+json' | 'application/sensml+xml' | 'application/sep-exi' | 'application/sep+xml' | 'application/session-info' | 'application/set-payment' | 'application/set-payment-initiation' | 'application/set-registration' | 'application/set-registration-initiation' | 'application/SGML' | 'application/sgml-open-catalog' | 'application/shf+xml' | 'application/sieve' | 'application/simple-filter+xml' | 'application/simple-message-summary' | 'application/simpleSymbolContainer' | 'application/sipc' | 'application/slate' | 'application/smil' | 'application/smil+xml' | 'application/smpte336m' | 'application/soap+fastinfoset' | 'application/soap+xml' | 'application/sparql-query' | 'application/spdx+json' | 'application/sparql-results+xml' | 'application/spirits-event+xml' | 'application/sql' | 'application/srgs' | 'application/srgs+xml' | 'application/sru+xml' | 'application/sslkeylogfile' | 'application/ssml+xml' | 'application/ST2110-41' | 'application/stix+json' | 'application/stratum' | 'application/swid+cbor' | 'application/swid+xml' | 'application/tamp-apex-update' | 'application/tamp-apex-update-confirm' | 'application/tamp-community-update' | 'application/tamp-community-update-confirm' | 'application/tamp-error' | 'application/tamp-sequence-adjust' | 'application/tamp-sequence-adjust-confirm' | 'application/tamp-status-query' | 'application/tamp-status-response' | 'application/tamp-update' | 'application/tamp-update-confirm' | 'application/taxii+json' | 'application/td+json' | 'application/tei+xml' | 'application/TETRA_ISI' | 'application/thraud+xml' | 'application/timestamp-query' | 'application/timestamp-reply' | 'application/timestamped-data' | 'application/tlsrpt+gzip' | 'application/tlsrpt+json' | 'application/tm+json' | 'application/tnauthlist' | 'application/token-introspection+jwt' | 'application/toml' | 'application/trickle-ice-sdpfrag' | 'application/trig' | 'application/trust-chain+json' | 'application/trust-mark+jwt' | 'application/trust-mark-delegation+jwt' | 'application/ttml+xml' | 'application/tve-trigger' | 'application/tzif' | 'application/tzif-leap' | 'application/ulpfec' | 'application/urc-grpsheet+xml' | 'application/urc-ressheet+xml' | 'application/urc-targetdesc+xml' | 'application/urc-uisocketdesc+xml' | 'application/vc' | 'application/vcard+json' | 'application/vcard+xml' | 'application/vemmi' | 'application/vnd.1000minds.decision-model+xml' | 'application/vnd.1ob' | 'application/vnd.3gpp.5gnas' | 'application/vnd.3gpp.5gsa2x' | 'application/vnd.3gpp.5gsa2x-local-service-information' | 'application/vnd.3gpp.access-transfer-events+xml' | 'application/vnd.3gpp.bsf+xml' | 'application/vnd.3gpp.crs+xml' | 'application/vnd.3gpp.current-location-discovery+xml' | 'application/vnd.3gpp.GMOP+xml' | 'application/vnd.3gpp.gtpc' | 'application/vnd.3gpp.interworking-data' | 'application/vnd.3gpp.lpp' | 'application/vnd.3gpp.mc-signalling-ear' | 'application/vnd.3gpp.mcdata-affiliation-command+xml' | 'application/vnd.3gpp.mcdata-info+xml' | 'application/vnd.3gpp.mcdata-msgstore-ctrl-request+xml' | 'application/vnd.3gpp.mcdata-payload' | 'application/vnd.3gpp.mcdata-regroup+xml' | 'application/vnd.3gpp.mcdata-service-config+xml' | 'application/vnd.3gpp.mcdata-signalling' | 'application/vnd.3gpp.mcdata-ue-config+xml' | 'application/vnd.3gpp.mcdata-user-profile+xml' | 'application/vnd.3gpp.mcptt-affiliation-command+xml' | 'application/vnd.3gpp.mcptt-floor-request+xml' | 'application/vnd.3gpp.mcptt-info+xml' | 'application/vnd.3gpp.mcptt-location-info+xml' | 'application/vnd.3gpp.mcptt-mbms-usage-info+xml' | 'application/vnd.3gpp.mcptt-regroup+xml' | 'application/vnd.3gpp.mcptt-service-config+xml' | 'application/vnd.3gpp.mcptt-signed+xml' | 'application/vnd.3gpp.mcptt-ue-config+xml' | 'application/vnd.3gpp.mcptt-ue-init-config+xml' | 'application/vnd.3gpp.mcptt-user-profile+xml' | 'application/vnd.3gpp.mcvideo-affiliation-command+xml' | 'application/vnd.3gpp.mcvideo-affiliation-info+xml' | 'application/vnd.3gpp.mcvideo-info+xml' | 'application/vnd.3gpp.mcvideo-location-info+xml' | 'application/vnd.3gpp.mcvideo-mbms-usage-info+xml' | 'application/vnd.3gpp.mcvideo-regroup+xml' | 'application/vnd.3gpp.mcvideo-service-config+xml' | 'application/vnd.3gpp.mcvideo-transmission-request+xml' | 'application/vnd.3gpp.mcvideo-ue-config+xml' | 'application/vnd.3gpp.mcvideo-user-profile+xml' | 'application/vnd.3gpp.mid-call+xml' | 'application/vnd.3gpp.ngap' | 'application/vnd.3gpp.pfcp' | 'application/vnd.3gpp.pic-bw-large' | 'application/vnd.3gpp.pic-bw-small' | 'application/vnd.3gpp.pic-bw-var' | 'application/vnd.3gpp.pinapp-info+xml' | 'application/vnd.3gpp-prose-pc3a+xml' | 'application/vnd.3gpp-prose-pc3ach+xml' | 'application/vnd.3gpp-prose-pc3ch+xml' | 'application/vnd.3gpp-prose-pc8+xml' | 'application/vnd.3gpp-prose+xml' | 'application/vnd.3gpp.s1ap' | 'application/vnd.3gpp.seal-group-doc+xml' | 'application/vnd.3gpp.seal-info+xml' | 'application/vnd.3gpp.seal-location-info+xml' | 'application/vnd.3gpp.seal-mbms-usage-info+xml' | 'application/vnd.3gpp.seal-network-QoS-management-info+xml' | 'application/vnd.3gpp.seal-ue-config-info+xml' | 'application/vnd.3gpp.seal-unicast-info+xml' | 'application/vnd.3gpp.seal-user-profile-info+xml' | 'application/vnd.3gpp.sms' | 'application/vnd.3gpp.sms+xml' | 'application/vnd.3gpp.srvcc-ext+xml' | 'application/vnd.3gpp.SRVCC-info+xml' | 'application/vnd.3gpp.state-and-event-info+xml' | 'application/vnd.3gpp.ussd+xml' | 'application/vnd.3gpp.vae-info+xml' | 'application/vnd.3gpp-v2x-local-service-information' | 'application/vnd.3gpp2.bcmcsinfo+xml' | 'application/vnd.3gpp2.sms' | 'application/vnd.3gpp2.tcap' | 'application/vnd.3gpp.v2x' | 'application/vnd.3lightssoftware.imagescal' | 'application/vnd.3M.Post-it-Notes' | 'application/vnd.accpac.simply.aso' | 'application/vnd.accpac.simply.imp' | 'application/vnd.acm.addressxfer+json' | 'application/vnd.acm.chatbot+json' | 'application/vnd.acucobol' | 'application/vnd.acucorp' | 'application/vnd.adobe.flash.movie' | 'application/vnd.adobe.formscentral.fcdt' | 'application/vnd.adobe.fxp' | 'application/vnd.adobe.partial-upload' | 'application/vnd.adobe.xdp+xml' | 'application/vnd.aether.imp' | 'application/vnd.afpc.afplinedata' | 'application/vnd.afpc.afplinedata-pagedef' | 'application/vnd.afpc.cmoca-cmresource' | 'application/vnd.afpc.foca-charset' | 'application/vnd.afpc.foca-codedfont' | 'application/vnd.afpc.foca-codepage' | 'application/vnd.afpc.modca' | 'application/vnd.afpc.modca-cmtable' | 'application/vnd.afpc.modca-formdef' | 'application/vnd.afpc.modca-mediummap' | 'application/vnd.afpc.modca-objectcontainer' | 'application/vnd.afpc.modca-overlay' | 'application/vnd.afpc.modca-pagesegment' | 'application/vnd.age' | 'application/vnd.ah-barcode' | 'application/vnd.ahead.space' | 'application/vnd.airzip.filesecure.azf' | 'application/vnd.airzip.filesecure.azs' | 'application/vnd.amadeus+json' | 'application/vnd.amazon.mobi8-ebook' | 'application/vnd.americandynamics.acc' | 'application/vnd.amiga.ami' | 'application/vnd.amundsen.maze+xml' | 'application/vnd.android.ota' | 'application/vnd.anki' | 'application/vnd.anser-web-certificate-issue-initiation' | 'application/vnd.antix.game-component' | 'application/vnd.apache.arrow.file' | 'application/vnd.apache.arrow.stream' | 'application/vnd.apache.parquet' | 'application/vnd.apache.thrift.binary' | 'application/vnd.apache.thrift.compact' | 'application/vnd.apache.thrift.json' | 'application/vnd.apexlang' | 'application/vnd.api+json' | 'application/vnd.aplextor.warrp+json' | 'application/vnd.apothekende.reservation+json' | 'application/vnd.apple.installer+xml' | 'application/vnd.apple.keynote' | 'application/vnd.apple.mpegurl' | 'application/vnd.apple.numbers' | 'application/vnd.apple.pages' | 'application/vnd.arastra.swi' | 'application/vnd.aristanetworks.swi' | 'application/vnd.artisan+json' | 'application/vnd.artsquare' | 'application/vnd.astraea-software.iota' | 'application/vnd.audiograph' | 'application/vnd.autopackage' | 'application/vnd.avalon+json' | 'application/vnd.avistar+xml' | 'application/vnd.balsamiq.bmml+xml' | 'application/vnd.banana-accounting' | 'application/vnd.bbf.usp.error' | 'application/vnd.bbf.usp.msg' | 'application/vnd.bbf.usp.msg+json' | 'application/vnd.balsamiq.bmpr' | 'application/vnd.bekitzur-stech+json' | 'application/vnd.belightsoft.lhzd+zip' | 'application/vnd.belightsoft.lhzl+zip' | 'application/vnd.bint.med-content' | 'application/vnd.biopax.rdf+xml' | 'application/vnd.blink-idb-value-wrapper' | 'application/vnd.blueice.multipass' | 'application/vnd.bluetooth.ep.oob' | 'application/vnd.bluetooth.le.oob' | 'application/vnd.bmi' | 'application/vnd.bpf' | 'application/vnd.bpf3' | 'application/vnd.businessobjects' | 'application/vnd.byu.uapi+json' | 'application/vnd.bzip3' | 'application/vnd.c3voc.schedule+xml' | 'application/vnd.cab-jscript' | 'application/vnd.canon-cpdl' | 'application/vnd.canon-lips' | 'application/vnd.capasystems-pg+json' | 'application/vnd.cendio.thinlinc.clientconf' | 'application/vnd.century-systems.tcp_stream' | 'application/vnd.chemdraw+xml' | 'application/vnd.chess-pgn' | 'application/vnd.chipnuts.karaoke-mmd' | 'application/vnd.ciedi' | 'application/vnd.cinderella' | 'application/vnd.cirpack.isdn-ext' | 'application/vnd.citationstyles.style+xml' | 'application/vnd.claymore' | 'application/vnd.cloanto.rp9' | 'application/vnd.clonk.c4group' | 'application/vnd.cluetrust.cartomobile-config' | 'application/vnd.cluetrust.cartomobile-config-pkg' | 'application/vnd.cncf.helm.chart.content.v1.tar+gzip' | 'application/vnd.cncf.helm.chart.provenance.v1.prov' | 'application/vnd.cncf.helm.config.v1+json' | 'application/vnd.coffeescript' | 'application/vnd.collabio.xodocuments.document' | 'application/vnd.collabio.xodocuments.document-template' | 'application/vnd.collabio.xodocuments.presentation' | 'application/vnd.collabio.xodocuments.presentation-template' | 'application/vnd.collabio.xodocuments.spreadsheet' | 'application/vnd.collabio.xodocuments.spreadsheet-template' | 'application/vnd.collection.doc+json' | 'application/vnd.collection+json' | 'application/vnd.collection.next+json' | 'application/vnd.comicbook-rar' | 'application/vnd.comicbook+zip' | 'application/vnd.commerce-battelle' | 'application/vnd.commonspace' | 'application/vnd.coreos.ignition+json' | 'application/vnd.cosmocaller' | 'application/vnd.contact.cmsg' | 'application/vnd.crick.clicker' | 'application/vnd.crick.clicker.keyboard' | 'application/vnd.crick.clicker.palette' | 'application/vnd.crick.clicker.template' | 'application/vnd.crick.clicker.wordbank' | 'application/vnd.criticaltools.wbs+xml' | 'application/vnd.cryptii.pipe+json' | 'application/vnd.crypto-shade-file' | 'application/vnd.cryptomator.encrypted' | 'application/vnd.cryptomator.vault' | 'application/vnd.ctc-posml' | 'application/vnd.ctct.ws+xml' | 'application/vnd.cups-pdf' | 'application/vnd.cups-postscript' | 'application/vnd.cups-ppd' | 'application/vnd.cups-raster' | 'application/vnd.cups-raw' | 'application/vnd.curl' | 'application/vnd.cyan.dean.root+xml' | 'application/vnd.cybank' | 'application/vnd.cyclonedx+json' | 'application/vnd.cyclonedx+xml' | 'application/vnd.d2l.coursepackage1p0+zip' | 'application/vnd.d3m-dataset' | 'application/vnd.d3m-problem' | 'application/vnd.dart' | 'application/vnd.data-vision.rdz' | 'application/vnd.datalog' | 'application/vnd.datapackage+json' | 'application/vnd.dataresource+json' | 'application/vnd.dbf' | 'application/vnd.debian.binary-package' | 'application/vnd.dece.data' | 'application/vnd.dece.ttml+xml' | 'application/vnd.dece.unspecified' | 'application/vnd.dece.zip' | 'application/vnd.denovo.fcselayout-link' | 'application/vnd.desmume.movie' | 'application/vnd.dir-bi.plate-dl-nosuffix' | 'application/vnd.dm.delegation+xml' | 'application/vnd.dna' | 'application/vnd.document+json' | 'application/vnd.dolby.mobile.1' | 'application/vnd.dolby.mobile.2' | 'application/vnd.doremir.scorecloud-binary-document' | 'application/vnd.dpgraph' | 'application/vnd.dreamfactory' | 'application/vnd.drive+json' | 'application/vnd.dtg.local' | 'application/vnd.dtg.local.flash' | 'application/vnd.dtg.local.html' | 'application/vnd.dvb.ait' | 'application/vnd.dvb.dvbisl+xml' | 'application/vnd.dvb.dvbj' | 'application/vnd.dvb.esgcontainer' | 'application/vnd.dvb.ipdcdftnotifaccess' | 'application/vnd.dvb.ipdcesgaccess' | 'application/vnd.dvb.ipdcesgaccess2' | 'application/vnd.dvb.ipdcesgpdd' | 'application/vnd.dvb.ipdcroaming' | 'application/vnd.dvb.iptv.alfec-base' | 'application/vnd.dvb.iptv.alfec-enhancement' | 'application/vnd.dvb.notif-aggregate-root+xml' | 'application/vnd.dvb.notif-container+xml' | 'application/vnd.dvb.notif-generic+xml' | 'application/vnd.dvb.notif-ia-msglist+xml' | 'application/vnd.dvb.notif-ia-registration-request+xml' | 'application/vnd.dvb.notif-ia-registration-response+xml' | 'application/vnd.dvb.notif-init+xml' | 'application/vnd.dvb.pfr' | 'application/vnd.dvb.service' | 'application/vnd.dxr' | 'application/vnd.dynageo' | 'application/vnd.dzr' | 'application/vnd.easykaraoke.cdgdownload' | 'application/vnd.ecip.rlp' | 'application/vnd.ecdis-update' | 'application/vnd.eclipse.ditto+json' | 'application/vnd.ecowin.chart' | 'application/vnd.ecowin.filerequest' | 'application/vnd.ecowin.fileupdate' | 'application/vnd.ecowin.series' | 'application/vnd.ecowin.seriesrequest' | 'application/vnd.ecowin.seriesupdate' | 'application/vnd.efi.img' | 'application/vnd.efi.iso' | 'application/vnd.eln+zip' | 'application/vnd.emclient.accessrequest+xml' | 'application/vnd.enliven' | 'application/vnd.enphase.envoy' | 'application/vnd.eprints.data+xml' | 'application/vnd.epson.esf' | 'application/vnd.epson.msf' | 'application/vnd.epson.quickanime' | 'application/vnd.epson.salt' | 'application/vnd.epson.ssf' | 'application/vnd.ericsson.quickcall' | 'application/vnd.erofs' | 'application/vnd.espass-espass+zip' | 'application/vnd.eszigno3+xml' | 'application/vnd.etsi.aoc+xml' | 'application/vnd.etsi.asic-s+zip' | 'application/vnd.etsi.asic-e+zip' | 'application/vnd.etsi.cug+xml' | 'application/vnd.etsi.iptvcommand+xml' | 'application/vnd.etsi.iptvdiscovery+xml' | 'application/vnd.etsi.iptvprofile+xml' | 'application/vnd.etsi.iptvsad-bc+xml' | 'application/vnd.etsi.iptvsad-cod+xml' | 'application/vnd.etsi.iptvsad-npvr+xml' | 'application/vnd.etsi.iptvservice+xml' | 'application/vnd.etsi.iptvsync+xml' | 'application/vnd.etsi.iptvueprofile+xml' | 'application/vnd.etsi.mcid+xml' | 'application/vnd.etsi.mheg5' | 'application/vnd.etsi.overload-control-policy-dataset+xml' | 'application/vnd.etsi.pstn+xml' | 'application/vnd.etsi.sci+xml' | 'application/vnd.etsi.simservs+xml' | 'application/vnd.etsi.timestamp-token' | 'application/vnd.etsi.tsl+xml' | 'application/vnd.etsi.tsl.der' | 'application/vnd.eu.kasparian.car+json' | 'application/vnd.eudora.data' | 'application/vnd.evolv.ecig.profile' | 'application/vnd.evolv.ecig.settings' | 'application/vnd.evolv.ecig.theme' | 'application/vnd.exstream-empower+zip' | 'application/vnd.exstream-package' | 'application/vnd.ezpix-album' | 'application/vnd.ezpix-package' | 'application/vnd.f-secure.mobile' | 'application/vnd.fastcopy-disk-image' | 'application/vnd.familysearch.gedcom+zip' | 'application/vnd.fdsn.mseed' | 'application/vnd.fdsn.seed' | 'application/vnd.ffsns' | 'application/vnd.ficlab.flb+zip' | 'application/vnd.filmit.zfc' | 'application/vnd.fints' | 'application/vnd.firemonkeys.cloudcell' | 'application/vnd.FloGraphIt' | 'application/vnd.fluxtime.clip' | 'application/vnd.font-fontforge-sfd' | 'application/vnd.framemaker' | 'application/vnd.freelog.comic' | 'application/vnd.frogans.fnc' | 'application/vnd.frogans.ltf' | 'application/vnd.fsc.weblaunch' | 'application/vnd.fujifilm.fb.docuworks' | 'application/vnd.fujifilm.fb.docuworks.binder' | 'application/vnd.fujifilm.fb.docuworks.container' | 'application/vnd.fujifilm.fb.jfi+xml' | 'application/vnd.fujitsu.oasys' | 'application/vnd.fujitsu.oasys2' | 'application/vnd.fujitsu.oasys3' | 'application/vnd.fujitsu.oasysgp' | 'application/vnd.fujitsu.oasysprs' | 'application/vnd.fujixerox.ART4' | 'application/vnd.fujixerox.ART-EX' | 'application/vnd.fujixerox.ddd' | 'application/vnd.fujixerox.docuworks' | 'application/vnd.fujixerox.docuworks.binder' | 'application/vnd.fujixerox.docuworks.container' | 'application/vnd.fujixerox.HBPL' | 'application/vnd.fut-misnet' | 'application/vnd.futoin+cbor' | 'application/vnd.futoin+json' | 'application/vnd.fuzzysheet' | 'application/vnd.ga4gh.passport+jwt' | 'application/vnd.genomatix.tuxedo' | 'application/vnd.genozip' | 'application/vnd.gentics.grd+json' | 'application/vnd.gentoo.catmetadata+xml' | 'application/vnd.gentoo.ebuild' | 'application/vnd.gentoo.eclass' | 'application/vnd.gentoo.gpkg' | 'application/vnd.gentoo.manifest' | 'application/vnd.gentoo.xpak' | 'application/vnd.gentoo.pkgmetadata+xml' | 'application/vnd.geo+json' | 'application/vnd.geocube+xml' | 'application/vnd.geogebra.file' | 'application/vnd.geogebra.pinboard' | 'application/vnd.geogebra.slides' | 'application/vnd.geogebra.tool' | 'application/vnd.geometry-explorer' | 'application/vnd.geonext' | 'application/vnd.geoplan' | 'application/vnd.geospace' | 'application/vnd.gerber' | 'application/vnd.globalplatform.card-content-mgt' | 'application/vnd.globalplatform.card-content-mgt-response' | 'application/vnd.gmx' | 'application/vnd.gnu.taler.exchange+json' | 'application/vnd.gnu.taler.merchant+json' | 'application/vnd.google-earth.kml+xml' | 'application/vnd.google-earth.kmz' | 'application/vnd.gov.sk.e-form+xml' | 'application/vnd.gov.sk.e-form+zip' | 'application/vnd.gov.sk.xmldatacontainer+xml' | 'application/vnd.gpxsee.map+xml' | 'application/vnd.grafeq' | 'application/vnd.gridmp' | 'application/vnd.groove-account' | 'application/vnd.groove-help' | 'application/vnd.groove-identity-message' | 'application/vnd.groove-injector' | 'application/vnd.groove-tool-message' | 'application/vnd.groove-tool-template' | 'application/vnd.groove-vcard' | 'application/vnd.hal+json' | 'application/vnd.hal+xml' | 'application/vnd.HandHeld-Entertainment+xml' | 'application/vnd.hbci' | 'application/vnd.hc+json' | 'application/vnd.hcl-bireports' | 'application/vnd.hdt' | 'application/vnd.heroku+json' | 'application/vnd.hhe.lesson-player' | 'application/vnd.hp-HPGL' | 'application/vnd.hp-hpid' | 'application/vnd.hp-hps' | 'application/vnd.hp-jlyt' | 'application/vnd.hp-PCL' | 'application/vnd.hp-PCLXL' | 'application/vnd.hsl' | 'application/vnd.httphone' | 'application/vnd.hydrostatix.sof-data' | 'application/vnd.hyper-item+json' | 'application/vnd.hyper+json' | 'application/vnd.hyperdrive+json' | 'application/vnd.hzn-3d-crossword' | 'application/vnd.ibm.afplinedata' | 'application/vnd.ibm.electronic-media' | 'application/vnd.ibm.MiniPay' | 'application/vnd.ibm.modcap' | 'application/vnd.ibm.rights-management' | 'application/vnd.ibm.secure-container' | 'application/vnd.iccprofile' | 'application/vnd.ieee.1905' | 'application/vnd.igloader' | 'application/vnd.imagemeter.folder+zip' | 'application/vnd.imagemeter.image+zip' | 'application/vnd.immervision-ivp' | 'application/vnd.immervision-ivu' | 'application/vnd.ims.imsccv1p1' | 'application/vnd.ims.imsccv1p2' | 'application/vnd.ims.imsccv1p3' | 'application/vnd.ims.lis.v2.result+json' | 'application/vnd.ims.lti.v2.toolconsumerprofile+json' | 'application/vnd.ims.lti.v2.toolproxy.id+json' | 'application/vnd.ims.lti.v2.toolproxy+json' | 'application/vnd.ims.lti.v2.toolsettings+json' | 'application/vnd.ims.lti.v2.toolsettings.simple+json' | 'application/vnd.informedcontrol.rms+xml' | 'application/vnd.infotech.project' | 'application/vnd.infotech.project+xml' | 'application/vnd.informix-visionary' | 'application/vnd.innopath.wamp.notification' | 'application/vnd.insors.igm' | 'application/vnd.intercon.formnet' | 'application/vnd.intergeo' | 'application/vnd.intertrust.digibox' | 'application/vnd.intertrust.nncp' | 'application/vnd.intu.qbo' | 'application/vnd.intu.qfx' | 'application/vnd.ipfs.ipns-record' | 'application/vnd.ipld.car' | 'application/vnd.ipld.dag-cbor' | 'application/vnd.ipld.dag-json' | 'application/vnd.ipld.raw' | 'application/vnd.iptc.g2.catalogitem+xml' | 'application/vnd.iptc.g2.conceptitem+xml' | 'application/vnd.iptc.g2.knowledgeitem+xml' | 'application/vnd.iptc.g2.newsitem+xml' | 'application/vnd.iptc.g2.newsmessage+xml' | 'application/vnd.iptc.g2.packageitem+xml' | 'application/vnd.iptc.g2.planningitem+xml' | 'application/vnd.ipunplugged.rcprofile' | 'application/vnd.irepository.package+xml' | 'application/vnd.is-xpr' | 'application/vnd.isac.fcs' | 'application/vnd.jam' | 'application/vnd.iso11783-10+zip' | 'application/vnd.japannet-directory-service' | 'application/vnd.japannet-jpnstore-wakeup' | 'application/vnd.japannet-payment-wakeup' | 'application/vnd.japannet-registration' | 'application/vnd.japannet-registration-wakeup' | 'application/vnd.japannet-setstore-wakeup' | 'application/vnd.japannet-verification' | 'application/vnd.japannet-verification-wakeup' | 'application/vnd.jcp.javame.midlet-rms' | 'application/vnd.jisp' | 'application/vnd.joost.joda-archive' | 'application/vnd.jsk.isdn-ngn' | 'application/vnd.kahootz' | 'application/vnd.kde.karbon' | 'application/vnd.kde.kchart' | 'application/vnd.kde.kformula' | 'application/vnd.kde.kivio' | 'application/vnd.kde.kontour' | 'application/vnd.kde.kpresenter' | 'application/vnd.kde.kspread' | 'application/vnd.kde.kword' | 'application/vnd.kenameaapp' | 'application/vnd.keyman.kmp+zip' | 'application/vnd.keyman.kmx' | 'application/vnd.kidspiration' | 'application/vnd.Kinar' | 'application/vnd.koan' | 'application/vnd.kodak-descriptor' | 'application/vnd.las' | 'application/vnd.las.las+json' | 'application/vnd.las.las+xml' | 'application/vnd.laszip' | 'application/vnd.ldev.productlicensing' | 'application/vnd.leap+json' | 'application/vnd.liberty-request+xml' | 'application/vnd.llamagraphics.life-balance.desktop' | 'application/vnd.llamagraphics.life-balance.exchange+xml' | 'application/vnd.logipipe.circuit+zip' | 'application/vnd.loom' | 'application/vnd.lotus-1-2-3' | 'application/vnd.lotus-approach' | 'application/vnd.lotus-freelance' | 'application/vnd.lotus-notes' | 'application/vnd.lotus-organizer' | 'application/vnd.lotus-screencam' | 'application/vnd.lotus-wordpro' | 'application/vnd.macports.portpkg' | 'application/vnd.mapbox-vector-tile' | 'application/vnd.marlin.drm.actiontoken+xml' | 'application/vnd.marlin.drm.conftoken+xml' | 'application/vnd.marlin.drm.license+xml' | 'application/vnd.marlin.drm.mdcf' | 'application/vnd.mason+json' | 'application/vnd.maxar.archive.3tz+zip' | 'application/vnd.maxmind.maxmind-db' | 'application/vnd.mcd' | 'application/vnd.mdl' | 'application/vnd.mdl-mbsdf' | 'application/vnd.medcalcdata' | 'application/vnd.mediastation.cdkey' | 'application/vnd.medicalholodeck.recordxr' | 'application/vnd.meridian-slingshot' | 'application/vnd.mermaid' | 'application/vnd.MFER' | 'application/vnd.mfmp' | 'application/vnd.micro+json' | 'application/vnd.micrografx.flo' | 'application/vnd.micrografx.igx' | 'application/vnd.microsoft.portable-executable' | 'application/vnd.microsoft.windows.thumbnail-cache' | 'application/vnd.miele+json' | 'application/vnd.mif' | 'application/vnd.minisoft-hp3000-save' | 'application/vnd.mitsubishi.misty-guard.trustweb' | 'application/vnd.Mobius.DAF' | 'application/vnd.Mobius.DIS' | 'application/vnd.Mobius.MBK' | 'application/vnd.Mobius.MQY' | 'application/vnd.Mobius.MSL' | 'application/vnd.Mobius.PLC' | 'application/vnd.Mobius.TXF' | 'application/vnd.modl' | 'application/vnd.mophun.application' | 'application/vnd.mophun.certificate' | 'application/vnd.motorola.flexsuite' | 'application/vnd.motorola.flexsuite.adsi' | 'application/vnd.motorola.flexsuite.fis' | 'application/vnd.motorola.flexsuite.gotap' | 'application/vnd.motorola.flexsuite.kmr' | 'application/vnd.motorola.flexsuite.ttc' | 'application/vnd.motorola.flexsuite.wem' | 'application/vnd.motorola.iprm' | 'application/vnd.mozilla.xul+xml' | 'application/vnd.ms-artgalry' | 'application/vnd.ms-asf' | 'application/vnd.ms-cab-compressed' | 'application/vnd.ms-3mfdocument' | 'application/vnd.ms-excel' | 'application/vnd.ms-excel.addin.macroEnabled.12' | 'application/vnd.ms-excel.sheet.binary.macroEnabled.12' | 'application/vnd.ms-excel.sheet.macroEnabled.12' | 'application/vnd.ms-excel.template.macroEnabled.12' | 'application/vnd.ms-fontobject' | 'application/vnd.ms-htmlhelp' | 'application/vnd.ms-ims' | 'application/vnd.ms-lrm' | 'application/vnd.ms-office.activeX+xml' | 'application/vnd.ms-officetheme' | 'application/vnd.ms-playready.initiator+xml' | 'application/vnd.ms-powerpoint' | 'application/vnd.ms-powerpoint.addin.macroEnabled.12' | 'application/vnd.ms-powerpoint.presentation.macroEnabled.12' | 'application/vnd.ms-powerpoint.slide.macroEnabled.12' | 'application/vnd.ms-powerpoint.slideshow.macroEnabled.12' | 'application/vnd.ms-powerpoint.template.macroEnabled.12' | 'application/vnd.ms-PrintDeviceCapabilities+xml' | 'application/vnd.ms-PrintSchemaTicket+xml' | 'application/vnd.ms-project' | 'application/vnd.ms-tnef' | 'application/vnd.ms-windows.devicepairing' | 'application/vnd.ms-windows.nwprinting.oob' | 'application/vnd.ms-windows.printerpairing' | 'application/vnd.ms-windows.wsd.oob' | 'application/vnd.ms-wmdrm.lic-chlg-req' | 'application/vnd.ms-wmdrm.lic-resp' | 'application/vnd.ms-wmdrm.meter-chlg-req' | 'application/vnd.ms-wmdrm.meter-resp' | 'application/vnd.ms-word.document.macroEnabled.12' | 'application/vnd.ms-word.template.macroEnabled.12' | 'application/vnd.ms-works' | 'application/vnd.ms-wpl' | 'application/vnd.ms-xpsdocument' | 'application/vnd.msa-disk-image' | 'application/vnd.mseq' | 'application/vnd.msgpack' | 'application/vnd.msign' | 'application/vnd.multiad.creator' | 'application/vnd.multiad.creator.cif' | 'application/vnd.musician' | 'application/vnd.music-niff' | 'application/vnd.muvee.style' | 'application/vnd.mynfc' | 'application/vnd.nacamar.ybrid+json' | 'application/vnd.nato.bindingdataobject+cbor' | 'application/vnd.nato.bindingdataobject+json' | 'application/vnd.nato.bindingdataobject+xml' | 'application/vnd.nato.openxmlformats-package.iepd+zip' | 'application/vnd.ncd.control' | 'application/vnd.ncd.reference' | 'application/vnd.nearst.inv+json' | 'application/vnd.nebumind.line' | 'application/vnd.nervana' | 'application/vnd.netfpx' | 'application/vnd.neurolanguage.nlu' | 'application/vnd.nimn' | 'application/vnd.nintendo.snes.rom' | 'application/vnd.nintendo.nitro.rom' | 'application/vnd.nitf' | 'application/vnd.noblenet-directory' | 'application/vnd.noblenet-sealer' | 'application/vnd.noblenet-web' | 'application/vnd.nokia.catalogs' | 'application/vnd.nokia.conml+wbxml' | 'application/vnd.nokia.conml+xml' | 'application/vnd.nokia.iptv.config+xml' | 'application/vnd.nokia.iSDS-radio-presets' | 'application/vnd.nokia.landmark+wbxml' | 'application/vnd.nokia.landmark+xml' | 'application/vnd.nokia.landmarkcollection+xml' | 'application/vnd.nokia.ncd' | 'application/vnd.nokia.n-gage.ac+xml' | 'application/vnd.nokia.n-gage.data' | 'application/vnd.nokia.n-gage.symbian.install' | 'application/vnd.nokia.pcd+wbxml' | 'application/vnd.nokia.pcd+xml' | 'application/vnd.nokia.radio-preset' | 'application/vnd.nokia.radio-presets' | 'application/vnd.novadigm.EDM' | 'application/vnd.novadigm.EDX' | 'application/vnd.novadigm.EXT' | 'application/vnd.ntt-local.content-share' | 'application/vnd.ntt-local.file-transfer' | 'application/vnd.ntt-local.ogw_remote-access' | 'application/vnd.ntt-local.sip-ta_remote' | 'application/vnd.ntt-local.sip-ta_tcp_stream' | 'application/vnd.oai.workflows' | 'application/vnd.oai.workflows+json' | 'application/vnd.oai.workflows+yaml' | 'application/vnd.oasis.opendocument.base' | 'application/vnd.oasis.opendocument.chart' | 'application/vnd.oasis.opendocument.chart-template' | 'application/vnd.oasis.opendocument.database' | 'application/vnd.oasis.opendocument.formula' | 'application/vnd.oasis.opendocument.formula-template' | 'application/vnd.oasis.opendocument.graphics' | 'application/vnd.oasis.opendocument.graphics-template' | 'application/vnd.oasis.opendocument.image' | 'application/vnd.oasis.opendocument.image-template' | 'application/vnd.oasis.opendocument.presentation' | 'application/vnd.oasis.opendocument.presentation-template' | 'application/vnd.oasis.opendocument.spreadsheet' | 'application/vnd.oasis.opendocument.spreadsheet-template' | 'application/vnd.oasis.opendocument.text' | 'application/vnd.oasis.opendocument.text-master' | 'application/vnd.oasis.opendocument.text-master-template' | 'application/vnd.oasis.opendocument.text-template' | 'application/vnd.oasis.opendocument.text-web' | 'application/vnd.obn' | 'application/vnd.ocf+cbor' | 'application/vnd.oci.image.manifest.v1+json' | 'application/vnd.oftn.l10n+json' | 'application/vnd.oipf.contentaccessdownload+xml' | 'application/vnd.oipf.contentaccessstreaming+xml' | 'application/vnd.oipf.cspg-hexbinary' | 'application/vnd.oipf.dae.svg+xml' | 'application/vnd.oipf.dae.xhtml+xml' | 'application/vnd.oipf.mippvcontrolmessage+xml' | 'application/vnd.oipf.pae.gem' | 'application/vnd.oipf.spdiscovery+xml' | 'application/vnd.oipf.spdlist+xml' | 'application/vnd.oipf.ueprofile+xml' | 'application/vnd.oipf.userprofile+xml' | 'application/vnd.olpc-sugar' | 'application/vnd.oma.bcast.associated-procedure-parameter+xml' | 'application/vnd.oma.bcast.drm-trigger+xml' | 'application/vnd.oma.bcast.imd+xml' | 'application/vnd.oma.bcast.ltkm' | 'application/vnd.oma.bcast.notification+xml' | 'application/vnd.oma.bcast.provisioningtrigger' | 'application/vnd.oma.bcast.sgboot' | 'application/vnd.oma.bcast.sgdd+xml' | 'application/vnd.oma.bcast.sgdu' | 'application/vnd.oma.bcast.simple-symbol-container' | 'application/vnd.oma.bcast.smartcard-trigger+xml' | 'application/vnd.oma.bcast.sprov+xml' | 'application/vnd.oma.bcast.stkm' | 'application/vnd.oma.cab-address-book+xml' | 'application/vnd.oma.cab-feature-handler+xml' | 'application/vnd.oma.cab-pcc+xml' | 'application/vnd.oma.cab-subs-invite+xml' | 'application/vnd.oma.cab-user-prefs+xml' | 'application/vnd.oma.dcd' | 'application/vnd.oma.dcdc' | 'application/vnd.oma.dd2+xml' | 'application/vnd.oma.drm.risd+xml' | 'application/vnd.oma.group-usage-list+xml' | 'application/vnd.oma.lwm2m+cbor' | 'application/vnd.oma.lwm2m+json' | 'application/vnd.oma.lwm2m+tlv' | 'application/vnd.oma.pal+xml' | 'application/vnd.oma.poc.detailed-progress-report+xml' | 'application/vnd.oma.poc.final-report+xml' | 'application/vnd.oma.poc.groups+xml' | 'application/vnd.oma.poc.invocation-descriptor+xml' | 'application/vnd.oma.poc.optimized-progress-report+xml' | 'application/vnd.oma.push' | 'application/vnd.oma.scidm.messages+xml' | 'application/vnd.oma.xcap-directory+xml' | 'application/vnd.omads-email+xml' | 'application/vnd.omads-file+xml' | 'application/vnd.omads-folder+xml' | 'application/vnd.omaloc-supl-init' | 'application/vnd.oma-scws-config' | 'application/vnd.oma-scws-http-request' | 'application/vnd.oma-scws-http-response' | 'application/vnd.onepager' | 'application/vnd.onepagertamp' | 'application/vnd.onepagertamx' | 'application/vnd.onepagertat' | 'application/vnd.onepagertatp' | 'application/vnd.onepagertatx' | 'application/vnd.onvif.metadata' | 'application/vnd.openblox.game-binary' | 'application/vnd.openblox.game+xml' | 'application/vnd.openeye.oeb' | 'application/vnd.openstreetmap.data+xml' | 'application/vnd.opentimestamps.ots' | 'application/vnd.openvpi.dspx+json' | 'application/vnd.openxmlformats-officedocument.custom-properties+xml' | 'application/vnd.openxmlformats-officedocument.customXmlProperties+xml' | 'application/vnd.openxmlformats-officedocument.drawing+xml' | 'application/vnd.openxmlformats-officedocument.drawingml.chart+xml' | 'application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml' | 'application/vnd.openxmlformats-officedocument.drawingml.diagramColors+xml' | 'application/vnd.openxmlformats-officedocument.drawingml.diagramData+xml' | 'application/vnd.openxmlformats-officedocument.drawingml.diagramLayout+xml' | 'application/vnd.openxmlformats-officedocument.drawingml.diagramStyle+xml' | 'application/vnd.openxmlformats-officedocument.extended-properties+xml' | 'application/vnd.openxmlformats-officedocument.presentationml.commentAuthors+xml' | 'application/vnd.openxmlformats-officedocument.presentationml.comments+xml' | 'application/vnd.openxmlformats-officedocument.presentationml.handoutMaster+xml' | 'application/vnd.openxmlformats-officedocument.presentationml.notesMaster+xml' | 'application/vnd.openxmlformats-officedocument.presentationml.notesSlide+xml' | 'application/vnd.openxmlformats-officedocument.presentationml.presentation' | 'application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml' | 'application/vnd.openxmlformats-officedocument.presentationml.presProps+xml' | 'application/vnd.openxmlformats-officedocument.presentationml.slide' | 'application/vnd.openxmlformats-officedocument.presentationml.slide+xml' | 'application/vnd.openxmlformats-officedocument.presentationml.slideLayout+xml' | 'application/vnd.openxmlformats-officedocument.presentationml.slideMaster+xml' | 'application/vnd.openxmlformats-officedocument.presentationml.slideshow' | 'application/vnd.openxmlformats-officedocument.presentationml.slideshow.main+xml' | 'application/vnd.openxmlformats-officedocument.presentationml.slideUpdateInfo+xml' | 'application/vnd.openxmlformats-officedocument.presentationml.tableStyles+xml' | 'application/vnd.openxmlformats-officedocument.presentationml.tags+xml' | 'application/vnd.openxmlformats-officedocument.presentationml.template' | 'application/vnd.openxmlformats-officedocument.presentationml.template.main+xml' | 'application/vnd.openxmlformats-officedocument.presentationml.viewProps+xml' | 'application/vnd.openxmlformats-officedocument.spreadsheetml.calcChain+xml' | 'application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml' | 'application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml' | 'application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml' | 'application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml' | 'application/vnd.openxmlformats-officedocument.spreadsheetml.externalLink+xml' | 'application/vnd.openxmlformats-officedocument.spreadsheetml.pivotCacheDefinition+xml' | 'application/vnd.openxmlformats-officedocument.spreadsheetml.pivotCacheRecords+xml' | 'application/vnd.openxmlformats-officedocument.spreadsheetml.pivotTable+xml' | 'application/vnd.openxmlformats-officedocument.spreadsheetml.queryTable+xml' | 'application/vnd.openxmlformats-officedocument.spreadsheetml.revisionHeaders+xml' | 'application/vnd.openxmlformats-officedocument.spreadsheetml.revisionLog+xml' | 'application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml' | 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' | 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml' | 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheetMetadata+xml' | 'application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml' | 'application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml' | 'application/vnd.openxmlformats-officedocument.spreadsheetml.tableSingleCells+xml' | 'application/vnd.openxmlformats-officedocument.spreadsheetml.template' | 'application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml' | 'application/vnd.openxmlformats-officedocument.spreadsheetml.userNames+xml' | 'application/vnd.openxmlformats-officedocument.spreadsheetml.volatileDependencies+xml' | 'application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml' | 'application/vnd.openxmlformats-officedocument.theme+xml' | 'application/vnd.openxmlformats-officedocument.themeOverride+xml' | 'application/vnd.openxmlformats-officedocument.vmlDrawing' | 'application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml' | 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' | 'application/vnd.openxmlformats-officedocument.wordprocessingml.document.glossary+xml' | 'application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml' | 'application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes+xml' | 'application/vnd.openxmlformats-officedocument.wordprocessingml.fontTable+xml' | 'application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml' | 'application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml' | 'application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml' | 'application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml' | 'application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml' | 'application/vnd.openxmlformats-officedocument.wordprocessingml.template' | 'application/vnd.openxmlformats-officedocument.wordprocessingml.template.main+xml' | 'application/vnd.openxmlformats-officedocument.wordprocessingml.webSettings+xml' | 'application/vnd.openxmlformats-package.core-properties+xml' | 'application/vnd.openxmlformats-package.digital-signature-xmlsignature+xml' | 'application/vnd.openxmlformats-package.relationships+xml' | 'application/vnd.oracle.resource+json' | 'application/vnd.orange.indata' | 'application/vnd.osa.netdeploy' | 'application/vnd.osgeo.mapguide.package' | 'application/vnd.osgi.bundle' | 'application/vnd.osgi.dp' | 'application/vnd.osgi.subsystem' | 'application/vnd.otps.ct-kip+xml' | 'application/vnd.oxli.countgraph' | 'application/vnd.pagerduty+json' | 'application/vnd.palm' | 'application/vnd.panoply' | 'application/vnd.paos.xml' | 'application/vnd.patentdive' | 'application/vnd.patientecommsdoc' | 'application/vnd.pawaafile' | 'application/vnd.pcos' | 'application/vnd.pg.format' | 'application/vnd.pg.osasli' | 'application/vnd.piaccess.application-licence' | 'application/vnd.picsel' | 'application/vnd.pmi.widget' | 'application/vnd.poc.group-advertisement+xml' | 'application/vnd.pocketlearn' | 'application/vnd.powerbuilder6' | 'application/vnd.powerbuilder6-s' | 'application/vnd.powerbuilder7' | 'application/vnd.powerbuilder75' | 'application/vnd.powerbuilder75-s' | 'application/vnd.powerbuilder7-s' | 'application/vnd.preminet' | 'application/vnd.previewsystems.box' | 'application/vnd.proteus.magazine' | 'application/vnd.psfs' | 'application/vnd.pt.mundusmundi' | 'application/vnd.publishare-delta-tree' | 'application/vnd.pvi.ptid1' | 'application/vnd.pwg-multiplexed' | 'application/vnd.pwg-xhtml-print+xml' | 'application/vnd.qualcomm.brew-app-res' | 'application/vnd.quarantainenet' | 'application/vnd.Quark.QuarkXPress' | 'application/vnd.quobject-quoxdocument' | 'application/vnd.radisys.moml+xml' | 'application/vnd.radisys.msml-audit-conf+xml' | 'application/vnd.radisys.msml-audit-conn+xml' | 'application/vnd.radisys.msml-audit-dialog+xml' | 'application/vnd.radisys.msml-audit-stream+xml' | 'application/vnd.radisys.msml-audit+xml' | 'application/vnd.radisys.msml-conf+xml' | 'application/vnd.radisys.msml-dialog-base+xml' | 'application/vnd.radisys.msml-dialog-fax-detect+xml' | 'application/vnd.radisys.msml-dialog-fax-sendrecv+xml' | 'application/vnd.radisys.msml-dialog-group+xml' | 'application/vnd.radisys.msml-dialog-speech+xml' | 'application/vnd.radisys.msml-dialog-transform+xml' | 'application/vnd.radisys.msml-dialog+xml' | 'application/vnd.radisys.msml+xml' | 'application/vnd.rainstor.data' | 'application/vnd.rapid' | 'application/vnd.rar' | 'application/vnd.realvnc.bed' | 'application/vnd.recordare.musicxml' | 'application/vnd.recordare.musicxml+xml' | 'application/vnd.relpipe' | 'application/vnd.RenLearn.rlprint' | 'application/vnd.resilient.logic' | 'application/vnd.restful+json' | 'application/vnd.rig.cryptonote' | 'application/vnd.route66.link66+xml' | 'application/vnd.rs-274x' | 'application/vnd.ruckus.download' | 'application/vnd.s3sms' | 'application/vnd.sailingtracker.track' | 'application/vnd.sar' | 'application/vnd.sbm.cid' | 'application/vnd.sbm.mid2' | 'application/vnd.scribus' | 'application/vnd.sealed.3df' | 'application/vnd.sealed.csf' | 'application/vnd.sealed.doc' | 'application/vnd.sealed.eml' | 'application/vnd.sealed.mht' | 'application/vnd.sealed.net' | 'application/vnd.sealed.ppt' | 'application/vnd.sealed.tiff' | 'application/vnd.sealed.xls' | 'application/vnd.sealedmedia.softseal.html' | 'application/vnd.sealedmedia.softseal.pdf' | 'application/vnd.seemail' | 'application/vnd.seis+json' | 'application/vnd.sema' | 'application/vnd.semd' | 'application/vnd.semf' | 'application/vnd.shade-save-file' | 'application/vnd.shana.informed.formdata' | 'application/vnd.shana.informed.formtemplate' | 'application/vnd.shana.informed.interchange' | 'application/vnd.shana.informed.package' | 'application/vnd.shootproof+json' | 'application/vnd.shopkick+json' | 'application/vnd.shp' | 'application/vnd.shx' | 'application/vnd.sigrok.session' | 'application/vnd.SimTech-MindMapper' | 'application/vnd.siren+json' | 'application/vnd.smaf' | 'application/vnd.smart.notebook' | 'application/vnd.smart.teacher' | 'application/vnd.smintio.portals.archive' | 'application/vnd.snesdev-page-table' | 'application/vnd.software602.filler.form+xml' | 'application/vnd.software602.filler.form-xml-zip' | 'application/vnd.solent.sdkm+xml' | 'application/vnd.spotfire.dxp' | 'application/vnd.spotfire.sfs' | 'application/vnd.sqlite3' | 'application/vnd.sss-cod' | 'application/vnd.sss-dtf' | 'application/vnd.sss-ntf' | 'application/vnd.stepmania.package' | 'application/vnd.stepmania.stepchart' | 'application/vnd.street-stream' | 'application/vnd.sun.wadl+xml' | 'application/vnd.sus-calendar' | 'application/vnd.svd' | 'application/vnd.swiftview-ics' | 'application/vnd.sybyl.mol2' | 'application/vnd.sycle+xml' | 'application/vnd.syft+json' | 'application/vnd.syncml.dm.notification' | 'application/vnd.syncml.dmddf+xml' | 'application/vnd.syncml.dmtnds+wbxml' | 'application/vnd.syncml.dmtnds+xml' | 'application/vnd.syncml.dmddf+wbxml' | 'application/vnd.syncml.dm+wbxml' | 'application/vnd.syncml.dm+xml' | 'application/vnd.syncml.ds.notification' | 'application/vnd.syncml+xml' | 'application/vnd.tableschema+json' | 'application/vnd.tao.intent-module-archive' | 'application/vnd.tcpdump.pcap' | 'application/vnd.think-cell.ppttc+json' | 'application/vnd.tml' | 'application/vnd.tmd.mediaflex.api+xml' | 'application/vnd.tmobile-livetv' | 'application/vnd.tri.onesource' | 'application/vnd.trid.tpt' | 'application/vnd.triscape.mxs' | 'application/vnd.trueapp' | 'application/vnd.truedoc' | 'application/vnd.ubisoft.webplayer' | 'application/vnd.ufdl' | 'application/vnd.uic.osdm+json' | 'application/vnd.uiq.theme' | 'application/vnd.umajin' | 'application/vnd.unity' | 'application/vnd.uoml+xml' | 'application/vnd.uplanet.alert' | 'application/vnd.uplanet.alert-wbxml' | 'application/vnd.uplanet.bearer-choice' | 'application/vnd.uplanet.bearer-choice-wbxml' | 'application/vnd.uplanet.cacheop' | 'application/vnd.uplanet.cacheop-wbxml' | 'application/vnd.uplanet.channel' | 'application/vnd.uplanet.channel-wbxml' | 'application/vnd.uplanet.list' | 'application/vnd.uplanet.listcmd' | 'application/vnd.uplanet.listcmd-wbxml' | 'application/vnd.uplanet.list-wbxml' | 'application/vnd.uri-map' | 'application/vnd.uplanet.signal' | 'application/vnd.valve.source.material' | 'application/vnd.vcx' | 'application/vnd.vd-study' | 'application/vnd.vectorworks' | 'application/vnd.vel+json' | 'application/vnd.verimatrix.vcas' | 'application/vnd.veritone.aion+json' | 'application/vnd.veryant.thin' | 'application/vnd.ves.encrypted' | 'application/vnd.vidsoft.vidconference' | 'application/vnd.visio' | 'application/vnd.visionary' | 'application/vnd.vividence.scriptfile' | 'application/vnd.vsf' | 'application/vnd.wap.sic' | 'application/vnd.wap.slc' | 'application/vnd.wap.wbxml' | 'application/vnd.wap.wmlc' | 'application/vnd.wap.wmlscriptc' | 'application/vnd.wasmflow.wafl' | 'application/vnd.webturbo' | 'application/vnd.wfa.dpp' | 'application/vnd.wfa.p2p' | 'application/vnd.wfa.wsc' | 'application/vnd.windows.devicepairing' | 'application/vnd.wmc' | 'application/vnd.wmf.bootstrap' | 'application/vnd.wolfram.mathematica' | 'application/vnd.wolfram.mathematica.package' | 'application/vnd.wolfram.player' | 'application/vnd.wordlift' | 'application/vnd.wordperfect' | 'application/vnd.wqd' | 'application/vnd.wrq-hp3000-labelled' | 'application/vnd.wt.stf' | 'application/vnd.wv.csp+xml' | 'application/vnd.wv.csp+wbxml' | 'application/vnd.wv.ssp+xml' | 'application/vnd.xacml+json' | 'application/vnd.xara' | 'application/vnd.xarin.cpj' | 'application/vnd.xecrets-encrypted' | 'application/vnd.xfdl' | 'application/vnd.xfdl.webform' | 'application/vnd.xmi+xml' | 'application/vnd.xmpie.cpkg' | 'application/vnd.xmpie.dpkg' | 'application/vnd.xmpie.plan' | 'application/vnd.xmpie.ppkg' | 'application/vnd.xmpie.xlim' | 'application/vnd.yamaha.hv-dic' | 'application/vnd.yamaha.hv-script' | 'application/vnd.yamaha.hv-voice' | 'application/vnd.yamaha.openscoreformat.osfpvg+xml' | 'application/vnd.yamaha.openscoreformat' | 'application/vnd.yamaha.remote-setup' | 'application/vnd.yamaha.smaf-audio' | 'application/vnd.yamaha.smaf-phrase' | 'application/vnd.yamaha.through-ngn' | 'application/vnd.yamaha.tunnel-udpencap' | 'application/vnd.yaoweme' | 'application/vnd.yellowriver-custom-menu' | 'application/vnd.youtube.yt' | 'application/vnd.zul' | 'application/vnd.zzazz.deck+xml' | 'application/voicexml+xml' | 'application/voucher-cms+json' | 'application/vp' | 'application/vq-rtcpxr' | 'application/wasm' | 'application/watcherinfo+xml' | 'application/webpush-options+json' | 'application/whoispp-query' | 'application/whoispp-response' | 'application/widget' | 'application/wita' | 'application/wordperfect5.1' | 'application/wsdl+xml' | 'application/wspolicy+xml' | 'application/x-pki-message' | 'application/x-www-form-urlencoded' | 'application/x-x509-ca-cert' | 'application/x-x509-ca-ra-cert' | 'application/x-x509-next-ca-cert' | 'application/x400-bp' | 'application/xacml+xml' | 'application/xcap-att+xml' | 'application/xcap-caps+xml' | 'application/xcap-diff+xml' | 'application/xcap-el+xml' | 'application/xcap-error+xml' | 'application/xcap-ns+xml' | 'application/xcon-conference-info-diff+xml' | 'application/xcon-conference-info+xml' | 'application/xenc+xml' | 'application/xfdf' | 'application/xhtml+xml' | 'application/xliff+xml' | 'application/xml' | 'application/xml-dtd' | 'application/xml-external-parsed-entity' | 'application/xml-patch+xml' | 'application/xmpp+xml' | 'application/xop+xml' | 'application/xslt+xml' | 'application/xv+xml' | 'application/yaml' | 'application/yang' | 'application/yang-data+cbor' | 'application/yang-data+json' | 'application/yang-data+xml' | 'application/yang-patch+json' | 'application/yang-patch+xml' | 'application/yang-sid+json' | 'application/yin+xml' | 'application/zip' | 'application/zlib' | 'application/zstd' | 'audio/1d-interleaved-parityfec' | 'audio/32kadpcm' | 'audio/3gpp' | 'audio/3gpp2' | 'audio/aac' | 'audio/ac3' | 'audio/AMR' | 'audio/AMR-WB' | 'audio/amr-wb+' | 'audio/aptx' | 'audio/asc' | 'audio/ATRAC-ADVANCED-LOSSLESS' | 'audio/ATRAC-X' | 'audio/ATRAC3' | 'audio/basic' | 'audio/BV16' | 'audio/BV32' | 'audio/clearmode' | 'audio/CN' | 'audio/DAT12' | 'audio/dls' | 'audio/dsr-es201108' | 'audio/dsr-es202050' | 'audio/dsr-es202211' | 'audio/dsr-es202212' | 'audio/DV' | 'audio/DVI4' | 'audio/eac3' | 'audio/encaprtp' | 'audio/EVRC' | 'audio/EVRC-QCP' | 'audio/EVRC0' | 'audio/EVRC1' | 'audio/EVRCB' | 'audio/EVRCB0' | 'audio/EVRCB1' | 'audio/EVRCNW' | 'audio/EVRCNW0' | 'audio/EVRCNW1' | 'audio/EVRCWB' | 'audio/EVRCWB0' | 'audio/EVRCWB1' | 'audio/EVS' | 'audio/example' | 'audio/flac' | 'audio/flexfec' | 'audio/fwdred' | 'audio/G711-0' | 'audio/G719' | 'audio/G7221' | 'audio/G722' | 'audio/G723' | 'audio/G726-16' | 'audio/G726-24' | 'audio/G726-32' | 'audio/G726-40' | 'audio/G728' | 'audio/G729' | 'audio/G7291' | 'audio/G729D' | 'audio/G729E' | 'audio/GSM' | 'audio/GSM-EFR' | 'audio/GSM-HR-08' | 'audio/iLBC' | 'audio/ip-mr_v2.5' | 'audio/L8' | 'audio/L16' | 'audio/L20' | 'audio/L24' | 'audio/LPC' | 'audio/matroska' | 'audio/MELP' | 'audio/MELP600' | 'audio/MELP1200' | 'audio/MELP2400' | 'audio/mhas' | 'audio/midi-clip' | 'audio/mobile-xmf' | 'audio/MPA' | 'audio/mp4' | 'audio/MP4A-LATM' | 'audio/mpa-robust' | 'audio/mpeg' | 'audio/mpeg4-generic' | 'audio/ogg' | 'audio/opus' | 'audio/parityfec' | 'audio/PCMA' | 'audio/PCMA-WB' | 'audio/PCMU' | 'audio/PCMU-WB' | 'audio/prs.sid' | 'audio/QCELP' | 'audio/raptorfec' | 'audio/RED' | 'audio/rtp-enc-aescm128' | 'audio/rtploopback' | 'audio/rtp-midi' | 'audio/rtx' | 'audio/scip' | 'audio/SMV' | 'audio/SMV0' | 'audio/SMV-QCP' | 'audio/sofa' | 'audio/sp-midi' | 'audio/speex' | 'audio/t140c' | 'audio/t38' | 'audio/telephone-event' | 'audio/TETRA_ACELP' | 'audio/TETRA_ACELP_BB' | 'audio/tone' | 'audio/TSVCIS' | 'audio/UEMCLIP' | 'audio/ulpfec' | 'audio/usac' | 'audio/VDVI' | 'audio/VMR-WB' | 'audio/vnd.3gpp.iufp' | 'audio/vnd.4SB' | 'audio/vnd.audiokoz' | 'audio/vnd.CELP' | 'audio/vnd.cisco.nse' | 'audio/vnd.cmles.radio-events' | 'audio/vnd.cns.anp1' | 'audio/vnd.cns.inf1' | 'audio/vnd.dece.audio' | 'audio/vnd.digital-winds' | 'audio/vnd.dlna.adts' | 'audio/vnd.dolby.heaac.1' | 'audio/vnd.dolby.heaac.2' | 'audio/vnd.dolby.mlp' | 'audio/vnd.dolby.mps' | 'audio/vnd.dolby.pl2' | 'audio/vnd.dolby.pl2x' | 'audio/vnd.dolby.pl2z' | 'audio/vnd.dolby.pulse.1' | 'audio/vnd.dra' | 'audio/vnd.dts' | 'audio/vnd.dts.hd' | 'audio/vnd.dts.uhd' | 'audio/vnd.dvb.file' | 'audio/vnd.everad.plj' | 'audio/vnd.hns.audio' | 'audio/vnd.lucent.voice' | 'audio/vnd.ms-playready.media.pya' | 'audio/vnd.nokia.mobile-xmf' | 'audio/vnd.nortel.vbk' | 'audio/vnd.nuera.ecelp4800' | 'audio/vnd.nuera.ecelp7470' | 'audio/vnd.nuera.ecelp9600' | 'audio/vnd.octel.sbc' | 'audio/vnd.presonus.multitrack' | 'audio/vnd.qcelp' | 'audio/vnd.rhetorex.32kadpcm' | 'audio/vnd.rip' | 'audio/vnd.sealedmedia.softseal.mpeg' | 'audio/vnd.vmx.cvsd' | 'audio/vorbis' | 'audio/vorbis-config' | 'font/collection' | 'font/otf' | 'font/sfnt' | 'font/ttf' | 'font/woff' | 'font/woff2' | 'haptics/ivs' | 'haptics/hjif' | 'haptics/hmpg' | 'image/aces' | 'image/apng' | 'image/avci' | 'image/avcs' | 'image/avif' | 'image/bmp' | 'image/cgm' | 'image/dicom-rle' | 'image/dpx' | 'image/emf' | 'image/example' | 'image/fits' | 'image/g3fax' | 'image/gif' | 'image/heic' | 'image/heic-sequence' | 'image/heif' | 'image/heif-sequence' | 'image/hej2k' | 'image/hsj2' | 'image/ief' | 'image/j2c' | 'image/jls' | 'image/jp2' | 'image/jpeg' | 'image/jph' | 'image/jphc' | 'image/jpm' | 'image/jpx' | 'image/jxl' | 'image/jxr' | 'image/jxrA' | 'image/jxrS' | 'image/jxs' | 'image/jxsc' | 'image/jxsi' | 'image/jxss' | 'image/ktx' | 'image/ktx2' | 'image/naplps' | 'image/png' | 'image/prs.btif' | 'image/prs.pti' | 'image/pwg-raster' | 'image/svg+xml' | 'image/t38' | 'image/tiff' | 'image/tiff-fx' | 'image/vnd.adobe.photoshop' | 'image/vnd.airzip.accelerator.azv' | 'image/vnd.cns.inf2' | 'image/vnd.dece.graphic' | 'image/vnd.djvu' | 'image/vnd.dwg' | 'image/vnd.dxf' | 'image/vnd.dvb.subtitle' | 'image/vnd.fastbidsheet' | 'image/vnd.fpx' | 'image/vnd.fst' | 'image/vnd.fujixerox.edmics-mmr' | 'image/vnd.fujixerox.edmics-rlc' | 'image/vnd.globalgraphics.pgb' | 'image/vnd.microsoft.icon' | 'image/vnd.mix' | 'image/vnd.ms-modi' | 'image/vnd.mozilla.apng' | 'image/vnd.net-fpx' | 'image/vnd.pco.b16' | 'image/vnd.radiance' | 'image/vnd.sealed.png' | 'image/vnd.sealedmedia.softseal.gif' | 'image/vnd.sealedmedia.softseal.jpg' | 'image/vnd.svf' | 'image/vnd.tencent.tap' | 'image/vnd.valve.source.texture' | 'image/vnd.wap.wbmp' | 'image/vnd.xiff' | 'image/vnd.zbrush.pcx' | 'image/webp' | 'image/wmf' | 'message/bhttp' | 'message/CPIM' | 'message/delivery-status' | 'message/disposition-notification' | 'message/example' | 'message/external-body' | 'message/feedback-report' | 'message/global' | 'message/global-delivery-status' | 'message/global-disposition-notification' | 'message/global-headers' | 'message/http' | 'message/imdn+xml' | 'message/mls' | 'message/news' | 'message/ohttp-req' | 'message/ohttp-res' | 'message/partial' | 'message/rfc822' | 'message/s-http' | 'message/sip' | 'message/sipfrag' | 'message/tracking-status' | 'message/vnd.si.simp' | 'message/vnd.wfa.wsc' | 'model/3mf' | 'model/e57' | 'model/example' | 'model/gltf-binary' | 'model/gltf+json' | 'model/JT' | 'model/iges' | 'model/mesh' | 'model/mtl' | 'model/obj' | 'model/prc' | 'model/step' | 'model/step+xml' | 'model/step+zip' | 'model/step-xml+zip' | 'model/stl' | 'model/u3d' | 'model/vnd.bary' | 'model/vnd.cld' | 'model/vnd.collada+xml' | 'model/vnd.dwf' | 'model/vnd.flatland.3dml' | 'model/vnd.gdl' | 'model/vnd.gs-gdl' | 'model/vnd.gtw' | 'model/vnd.moml+xml' | 'model/vnd.mts' | 'model/vnd.opengex' | 'model/vnd.parasolid.transmit.binary' | 'model/vnd.parasolid.transmit.text' | 'model/vnd.pytha.pyox' | 'model/vnd.rosette.annotated-data-model' | 'model/vnd.sap.vds' | 'model/vnd.usda' | 'model/vnd.usdz+zip' | 'model/vnd.valve.source.compiled-map' | 'model/vnd.vtu' | 'model/vrml' | 'model/x3d-vrml' | 'model/x3d+fastinfoset' | 'model/x3d+xml' | 'multipart/alternative' | 'multipart/appledouble' | 'multipart/byteranges' | 'multipart/digest' | 'multipart/encrypted' | 'multipart/example' | 'multipart/form-data' | 'multipart/header-set' | 'multipart/mixed' | 'multipart/multilingual' | 'multipart/parallel' | 'multipart/related' | 'multipart/report' | 'multipart/signed' | 'multipart/vnd.bint.med-plus' | 'multipart/voice-message' | 'multipart/x-mixed-replace' | 'text/1d-interleaved-parityfec' | 'text/cache-manifest' | 'text/calendar' | 'text/cql' | 'text/cql-expression' | 'text/cql-identifier' | 'text/css' | 'text/csv' | 'text/csv-schema' | 'text/directory' | 'text/dns' | 'text/ecmascript' | 'text/encaprtp' | 'text/enriched' | 'text/example' | 'text/fhirpath' | 'text/flexfec' | 'text/fwdred' | 'text/gff3' | 'text/grammar-ref-list' | 'text/hl7v2' | 'text/html' | 'text/javascript' | 'text/jcr-cnd' | 'text/markdown' | 'text/mizar' | 'text/n3' | 'text/parameters' | 'text/parityfec' | 'text/plain' | 'text/provenance-notation' | 'text/prs.fallenstein.rst' | 'text/prs.lines.tag' | 'text/prs.prop.logic' | 'text/prs.texi' | 'text/raptorfec' | 'text/RED' | 'text/rfc822-headers' | 'text/richtext' | 'text/rtf' | 'text/rtp-enc-aescm128' | 'text/rtploopback' | 'text/rtx' | 'text/SGML' | 'text/shaclc' | 'text/shex' | 'text/spdx' | 'text/strings' | 'text/t140' | 'text/tab-separated-values' | 'text/troff' | 'text/turtle' | 'text/ulpfec' | 'text/uri-list' | 'text/vcard' | 'text/vnd.a' | 'text/vnd.abc' | 'text/vnd.ascii-art' | 'text/vnd.curl' | 'text/vnd.debian.copyright' | 'text/vnd.DMClientScript' | 'text/vnd.dvb.subtitle' | 'text/vnd.esmertec.theme-descriptor' | 'text/vnd.exchangeable' | 'text/vnd.familysearch.gedcom' | 'text/vnd.ficlab.flt' | 'text/vnd.fly' | 'text/vnd.fmi.flexstor' | 'text/vnd.gml' | 'text/vnd.graphviz' | 'text/vnd.hans' | 'text/vnd.hgl' | 'text/vnd.in3d.3dml' | 'text/vnd.in3d.spot' | 'text/vnd.IPTC.NewsML' | 'text/vnd.IPTC.NITF' | 'text/vnd.latex-z' | 'text/vnd.motorola.reflex' | 'text/vnd.ms-mediapackage' | 'text/vnd.net2phone.commcenter.command' | 'text/vnd.radisys.msml-basic-layout' | 'text/vnd.senx.warpscript' | 'text/vnd.si.uricatalogue' | 'text/vnd.sun.j2me.app-descriptor' | 'text/vnd.sosi' | 'text/vnd.trolltech.linguist' | 'text/vnd.vcf' | 'text/vnd.wap.si' | 'text/vnd.wap.sl' | 'text/vnd.wap.wml' | 'text/vnd.wap.wmlscript' | 'text/vnd.zoo.kcl' | 'text/vtt' | 'text/wgsl' | 'text/xml' | 'text/xml-external-parsed-entity' | 'video/1d-interleaved-parityfec' | 'video/3gpp' | 'video/3gpp2' | 'video/3gpp-tt' | 'video/AV1' | 'video/BMPEG' | 'video/BT656' | 'video/CelB' | 'video/DV' | 'video/encaprtp' | 'video/evc' | 'video/example' | 'video/FFV1' | 'video/flexfec' | 'video/H261' | 'video/H263' | 'video/H263-1998' | 'video/H263-2000' | 'video/H264' | 'video/H264-RCDO' | 'video/H264-SVC' | 'video/H265' | 'video/H266' | 'video/iso.segment' | 'video/JPEG' | 'video/jpeg2000' | 'video/jxsv' | 'video/matroska' | 'video/matroska-3d' | 'video/mj2' | 'video/MP1S' | 'video/MP2P' | 'video/MP2T' | 'video/mp4' | 'video/MP4V-ES' | 'video/MPV' | 'video/mpeg' | 'video/mpeg4-generic' | 'video/nv' | 'video/ogg' | 'video/parityfec' | 'video/pointer' | 'video/quicktime' | 'video/raptorfec' | 'video/raw' | 'video/rtp-enc-aescm128' | 'video/rtploopback' | 'video/rtx' | 'video/scip' | 'video/smpte291' | 'video/SMPTE292M' | 'video/ulpfec' | 'video/vc1' | 'video/vc2' | 'video/vnd.CCTV' | 'video/vnd.dece.hd' | 'video/vnd.dece.mobile' | 'video/vnd.dece.mp4' | 'video/vnd.dece.pd' | 'video/vnd.dece.sd' | 'video/vnd.dece.video' | 'video/vnd.directv.mpeg' | 'video/vnd.directv.mpeg-tts' | 'video/vnd.dlna.mpeg-tts' | 'video/vnd.dvb.file' | 'video/vnd.fvt' | 'video/vnd.hns.video' | 'video/vnd.iptvforum.1dparityfec-1010' | 'video/vnd.iptvforum.1dparityfec-2005' | 'video/vnd.iptvforum.2dparityfec-1010' | 'video/vnd.iptvforum.2dparityfec-2005' | 'video/vnd.iptvforum.ttsavc' | 'video/vnd.iptvforum.ttsmpeg2' | 'video/vnd.motorola.video' | 'video/vnd.motorola.videop' | 'video/vnd.mpegurl' | 'video/vnd.ms-playready.media.pyv' | 'video/vnd.nokia.interleaved-multimedia' | 'video/vnd.nokia.mp4vr' | 'video/vnd.nokia.videovoip' | 'video/vnd.objectvideo' | 'video/vnd.radgamettools.bink' | 'video/vnd.radgamettools.smacker' | 'video/vnd.sealed.mpeg1' | 'video/vnd.sealed.mpeg4' | 'video/vnd.sealed.swf' | 'video/vnd.sealedmedia.softseal.mov' | 'video/vnd.uvvu.mp4' | 'video/vnd.youtube.yt' | 'video/vnd.vivo' | 'video/VP8' | 'video/VP9' | `X-${string}/${string}`;
245
175
 
246
176
  declare class CookieStore extends Map<string, string> {
247
177
  protected request: ApiRequest;
@@ -307,6 +237,10 @@ declare class ApiResponse<Request extends IncomingMessage = IncomingMessage> ext
307
237
  * @since 1.0.0
308
238
  */
309
239
  notFound(data?: unknown): void;
240
+ /**
241
+ * @since 7.0.0
242
+ */
243
+ methodNotAllowed(data?: unknown): void;
310
244
  /**
311
245
  * @since 1.0.0
312
246
  */
@@ -336,10 +270,10 @@ declare class ApiResponse<Request extends IncomingMessage = IncomingMessage> ext
336
270
  *
337
271
  * Sets the image content type and sends the image data in the response.
338
272
  *
339
- * @param type - The MIME type of the image (e.g., {@link MimeTypes.ImagePng}).
273
+ * @param type - The MIME type of the image (e.g., 'image/png').
340
274
  * @param data - The image data as a `string`, {@link Buffer}, {@link Uint8Array}, or {@link ReadableStream}.
341
275
  */
342
- image(type: MimeTypes.ImageGif | MimeTypes.ImageJpg | MimeTypes.ImagePng | MimeTypes.ImageWebp | MimeTypes.ImageXIcon, data: string | Buffer | Uint8Array | Readable): void;
276
+ image(type: Extract<MimeType, `image/${string}`>, data: string | Buffer | Uint8Array | Readable): void;
343
277
  /**
344
278
  * @since 5.1.0
345
279
  */
@@ -347,35 +281,16 @@ declare class ApiResponse<Request extends IncomingMessage = IncomingMessage> ext
347
281
  /**
348
282
  * @since 1.0.0
349
283
  */
350
- setContentType(contentType: MimeTypes): this;
351
- }
352
-
353
- type Methods = 'ACL' | 'BIND' | 'CHECKOUT' | 'CONNECT' | 'COPY' | 'DELETE' | 'GET' | 'HEAD' | 'LINK' | 'LOCK' | 'M-SEARCH' | 'MERGE' | 'MKACTIVITY' | 'MKCALENDAR' | 'MKCOL' | 'MOVE' | 'NOTIFY' | 'OPTIONS' | 'PATCH' | 'POST' | 'PRI' | 'PROPFIND' | 'PROPPATCH' | 'PURGE' | 'PUT' | 'REBIND' | 'REPORT' | 'SEARCH' | 'SOURCE' | 'SUBSCRIBE' | 'TRACE' | 'UNBIND' | 'UNLINK' | 'UNLOCK' | 'UNSUBSCRIBE';
354
- declare const methods: Record<Methods, symbol>;
355
- declare const methodEntries: readonly [Methods, symbol][];
356
-
357
- interface MethodCallback {
358
- (request: ApiRequest, response: ApiResponse): unknown;
359
- }
360
- interface RouteMatch {
361
- route: Route;
362
- cb: MethodCallback;
363
- }
364
- /**
365
- * @since 1.0.0
366
- */
367
- declare class RouteStore extends Store<Route, 'routes'> {
368
- readonly table: Collection<Methods, Collection<Route<RouteOptions>, MethodCallback>>;
369
- constructor();
370
- match(request: ApiRequest): RouteMatch | null;
371
- private parseURL;
284
+ setContentType(contentType: MimeType): this;
372
285
  }
373
286
 
374
287
  interface RouteOptions extends Piece.Options {
375
288
  /**
376
289
  * The route the piece should represent.
377
290
  * @since 1.0.0
378
- * @default ''
291
+ *
292
+ * @defaultValue The filesystem-based path, or the name if the location is virtual.
293
+ *
379
294
  * @example
380
295
  * ```typescript
381
296
  * '/users'
@@ -391,18 +306,54 @@ interface RouteOptions extends Piece.Options {
391
306
  /**
392
307
  * (RFC 7230 3.3.2) The maximum decimal number of octets.
393
308
  * @since 1.0.0
394
- * @default this.context.server.options.maximumBodyLength ?? 1024 * 1024 * 50
309
+ *
310
+ * @defaultValue this.context.server.options.maximumBodyLength ?? 1024 * 1024 * 50
395
311
  */
396
312
  maximumBodyLength?: number;
397
313
  /**
398
- * The accepted content types for this route. If set to null, the route will accept any data.
399
- * @since 1.3.0
400
- * @default this.context.server.options.acceptedContentMimeTypes ?? null
314
+ * The methods this route accepts.
315
+ * @since 7.0.0
316
+ *
317
+ * @defaultValue The method defined in the piece name, or none if not set.
401
318
  */
402
- acceptedContentMimeTypes?: MimeTypeWithoutParameters[] | null;
319
+ methods?: readonly MethodName[];
403
320
  }
404
321
  /**
405
322
  * @since 1.0.0
323
+ *
324
+ * @example A simple GET route that returns a JSON response:
325
+ * ```typescript
326
+ * // hello.get.ts
327
+ * import { Route } from '@sapphire/plugin-api';
328
+ *
329
+ * export class MyRoute extends Route {
330
+ * public run(request: Route.Request, response: Route.Response) {
331
+ * return response.json({ message: 'Hello, World!' });
332
+ * }
333
+ * }
334
+ * ```
335
+ *
336
+ * ```bash
337
+ * $ curl http://localhost:4000/hello
338
+ * {"message":"Hello, World!"}
339
+ * ```
340
+ *
341
+ * @example A simple POST route that reads the body and returns it:
342
+ * ```typescript
343
+ * // echo.post.ts
344
+ * import { Route } from '@sapphire/plugin-api';
345
+ *
346
+ * export class MyRoute extends Route {
347
+ * public run(request: Route.Request, response: Route.Response) {
348
+ * return response.json(request.params);
349
+ * }
350
+ * }
351
+ * ```
352
+ *
353
+ * ```bash
354
+ * $ curl -X POST -H "Content-Type: application/json" -d '{"hello":"world"}' http://localhost:4000/echo
355
+ * {"hello":"world"}
356
+ * ```
406
357
  */
407
358
  declare abstract class Route<Options extends Route.Options = Route.Options> extends Piece<Options, 'routes'> {
408
359
  /**
@@ -410,28 +361,15 @@ declare abstract class Route<Options extends Route.Options = Route.Options> exte
410
361
  */
411
362
  readonly maximumBodyLength: number;
412
363
  /**
413
- * The accepted content types.
364
+ * The path this route represents.
414
365
  */
415
- readonly acceptedContentMimeTypes: readonly MimeTypeWithoutParameters[] | null;
416
- /**
417
- * The route information.
418
- */
419
- readonly router: RouteData;
366
+ readonly path: readonly string[];
420
367
  /**
421
368
  * The methods this route accepts.
422
369
  */
423
- readonly methods: Collection<Methods, MethodCallback>;
370
+ readonly methods: ReadonlySet<MethodName>;
424
371
  constructor(context: Route.LoaderContext, options?: Options);
425
- /**
426
- * Per-piece listener that is called when the piece is loaded into the store.
427
- * Useful to set-up asynchronous initialization tasks.
428
- */
429
- onLoad(): Awaitable<unknown>;
430
- /**
431
- * Per-piece listener that is called when the piece is unloaded from the store.
432
- * Useful to set-up clean-up tasks.
433
- */
434
- onUnload(): Awaitable<unknown>;
372
+ abstract run(request: Route.Request, response: Route.Response): Awaitable<unknown>;
435
373
  }
436
374
  declare namespace Route {
437
375
  /** @deprecated Use {@linkcode LoaderContext} instead. */
@@ -444,63 +382,220 @@ declare namespace Route {
444
382
  type Response = ApiResponse;
445
383
  }
446
384
 
447
- /**
448
- * A media parser
449
- * @since 1.3.0
450
- */
451
- declare abstract class MediaParser<Options extends MediaParser.Options = MediaParser.Options> extends Piece<Options, 'mediaParsers'> {
452
- constructor(context: MediaParser.LoaderContext, options?: Options);
385
+ declare class RouterBranch {
453
386
  /**
454
- * Parses the body data from an API request.
455
- * @since 1.3.0
387
+ * The name of the branch.
456
388
  */
457
- abstract run(request: ApiRequest): Awaitable<unknown>;
389
+ readonly name: string;
458
390
  /**
459
- * Checks if a route accepts the media type from this parser.
460
- * @since 1.3.0
461
- * @param route The route to be checked.
391
+ * Whether or not the branch is dynamic.
462
392
  */
463
- accepts(route: Route): boolean;
393
+ readonly dynamic: boolean;
464
394
  /**
465
- * Reads the content body as a string, this is useful for parsing/reading plain-text data.
466
- * @since 1.3.0
467
- * @param request The request to read the body from.
395
+ * The parent branch, if any.
468
396
  */
469
- protected readString(request: ApiRequest): Promise<string>;
397
+ readonly parent: RouterBranch | null;
470
398
  /**
471
- * Reads the content body as a buffer, this is useful for parsing/reading binary data.
472
- * @since 1.3.0
473
- * @param request The request to read the body from.
399
+ * The node this branch is associated with.
474
400
  */
475
- protected readBuffer(request: ApiRequest): Promise<Buffer>;
401
+ readonly node: RouterNode;
476
402
  /**
477
- * Reads the content stream from a request, piping the data through a transformer stream.
478
- * @since 1.3.0
479
- * @param request The request to read the body from.
403
+ * The methods supported by the branch's node or any of its children.
480
404
  */
481
- protected contentStream(request: ApiRequest): ApiRequest | Gunzip | null;
405
+ supportedMethods: readonly string[];
406
+ private _staticChildren;
407
+ private _dynamicChild;
408
+ constructor(name: string, dynamic: boolean, parent: RouterBranch | null);
409
+ /**
410
+ * The path representing this branch
411
+ * @version 7.0.0
412
+ */
413
+ get path(): string;
414
+ /**
415
+ * The branches the branch is associated with
416
+ * @version 7.0.0
417
+ */
418
+ get children(): RouterBranch[];
419
+ /**
420
+ * Whether or not the branch is empty
421
+ * @version 7.0.0
422
+ */
423
+ get empty(): boolean;
424
+ /**
425
+ * Tries to find a branch given a path
426
+ * @version 7.0.0
427
+ *
428
+ * @param parts The parts of a path to find a node from
429
+ * @returns The branch found, or null if not found
430
+ */
431
+ find(parts: readonly string[]): RouterBranch | null;
432
+ /**
433
+ * Checks if the given name matches the branch
434
+ * @version 7.0.0
435
+ *
436
+ * @param name The name to match
437
+ * @returns Whether or not the branch matches the name
438
+ */
439
+ matches(name: string): boolean;
440
+ /**
441
+ * Returns the string representation of the branch
442
+ * @version 7.0.0
443
+ *
444
+ * @returns The string representation of the branch
445
+ */
446
+ toString(): string;
447
+ nodes(): IterableIterator<RouterNode>;
448
+ protected _add(parts: readonly string[], index: number, route: Route): RouterNode;
449
+ protected _remove(parts: readonly string[], index: number, route: Route): boolean;
450
+ protected _performAdd(parts: readonly string[], index: number, route: Route): RouterNode;
451
+ protected _performRemove(parts: readonly string[], index: number, route: Route): boolean;
452
+ protected _find(parts: readonly string[], index: number): RouterBranch | null;
453
+ protected _updateSupportedChildrenMethods(): void;
482
454
  }
483
- declare namespace MediaParser {
484
- /** @deprecated Use {@linkcode LoaderContext} instead. */
485
- type Context = LoaderContext;
486
- type LoaderContext = Piece.LoaderContext<'mediaParsers'>;
487
- type Options = Piece.Options;
488
- type JSON = Piece.JSON;
489
- type LocationJSON = Piece.LocationJSON;
455
+
456
+ declare class RouterNode {
457
+ #private;
458
+ /**
459
+ * The branch containing this node.
460
+ */
461
+ readonly parent: RouterBranch;
462
+ constructor(parent: RouterBranch);
463
+ get path(): string;
464
+ extractParameters(parts: readonly string[]): Record<string, string>;
465
+ get(method: MethodName): Route | null;
466
+ set(method: MethodName, route: Route): this;
467
+ delete(method: MethodName, route: Route): boolean;
468
+ methods(): IterableIterator<MethodName>;
490
469
  }
491
470
 
492
- /**
493
- * @since 1.3.0
494
- */
495
- declare class MediaParserStore extends Store<MediaParser, 'mediaParsers'> {
496
- constructor();
471
+ declare class ApiRequest extends IncomingMessage {
472
+ #private;
473
+ /**
474
+ * The query parameters.
475
+ */
476
+ query: Record<string, string | string[]>;
477
+ /**
478
+ * The URI parameters.
479
+ */
480
+ params: Record<string, string>;
481
+ /**
482
+ * The authorization information. This field indicates three possible values:
483
+ *
484
+ * - `undefined`: The authorization middleware has not been executed yet.
485
+ * - `null`: The user is not authorized.
486
+ * - `AuthData`: The user is authorized.
487
+ */
488
+ auth?: AuthData | null;
489
+ /**
490
+ * The router node that matched the request. The field indicates three
491
+ * possible values:
492
+ *
493
+ * - `undefined`: The router handler has not been executed yet.
494
+ * - `null`: The router handler has been executed, but no node matched the
495
+ * request.
496
+ * - `RouterNode`: The router handler has been executed and a node matched
497
+ * the request.
498
+ *
499
+ * @since 7.0.0
500
+ */
501
+ routerNode?: RouterNode | null;
502
+ /**
503
+ * The route that matched the request. The field indicates three possible
504
+ * values:
505
+ *
506
+ * - `undefined`: The router handler has not been executed yet.
507
+ * - `null`: The router handler has been executed, but no route matched the
508
+ * request.
509
+ * - `Route`: The router handler has been executed and a route matched the
510
+ * request.
511
+ *
512
+ * @since 7.0.0
513
+ */
514
+ route?: Route | null;
515
+ /**
516
+ * The response object, used to validate the request's headers and body.
517
+ */
518
+ asWeb(): Request;
519
+ /**
520
+ * Reads the request body and tries to parse using JSON or form-urlencoded.
521
+ *
522
+ * @example
523
+ * ```typescript
524
+ * const body = await request.readBody();
525
+ * ```
526
+ *
527
+ * @returns The result of the body parsing
528
+ */
529
+ readBody(): Promise<unknown>;
530
+ /**
531
+ * Reads the request body as an {@link ArrayBuffer}.
532
+ *
533
+ * @returns The result of the body parsing
534
+ */
535
+ readBodyArrayBuffer(): Promise<ArrayBuffer>;
536
+ /**
537
+ * Reads the request body as a {@link Blob}.
538
+ *
539
+ * @returns The result of the body parsing
540
+ */
541
+ readBodyBlob(): Promise<buffer.Blob>;
542
+ /**
543
+ * Reads the request body as a {@link FormData}.
544
+ *
545
+ * @remarks
546
+ *
547
+ * This will throw an error if the content type is not one of the following:
548
+ *
549
+ * - `application/x-www-form-urlencoded`
550
+ * - `multipart/form-data`
551
+ *
552
+ * @returns The result of the body parsing
553
+ */
554
+ readBodyFormData(): Promise<undici_types.FormData>;
497
555
  /**
498
- * Parses a content type by getting the relevant information inside.
499
- * @since 1.3.0
500
- * @param contentType The content type to parse.
556
+ * Reads the request body as text, using {@link TextDecoder}. Afterward, it
557
+ * parses the body as JSON with {@link JSON.parse}.
558
+ *
559
+ * @returns The result of the body parsing
560
+ */
561
+ readBodyJson(): Promise<unknown>;
562
+ /**
563
+ * Reads the request body as text, using {@link TextDecoder}.
564
+ *
565
+ * @returns The result of the body parsing
566
+ */
567
+ readBodyText(): Promise<string>;
568
+ /**
569
+ * Identical to {@link ApiRequest.readBody}, but it validates the result.
570
+ *
571
+ * @param validator The validator function to use on the body parsing result
572
+ * @returns The validated body
573
+ */
574
+ readValidatedBody<Type>(validator: ValidatorFunction<unknown, Type>): Promise<Type | ((data: unknown) => data is Type)>;
575
+ /**
576
+ * Identical to {@link ApiRequest.readBodyFormData}, but it validates the
577
+ * result.
578
+ *
579
+ * @param validator The validator function to use on the body parsing result
580
+ * @returns The validated body
581
+ */
582
+ readValidatedBodyFormData<Type extends FormData>(validator: ValidatorFunction<FormData, Type>): Promise<Type | ((data: FormData) => data is Type)>;
583
+ /**
584
+ * Identical to {@link ApiRequest.readBodyJson}, but it validates the result.
585
+ *
586
+ * @param validator The validator function to use on the body parsing result
587
+ * @returns The validated body
501
588
  */
502
- parseContentType(contentType: string): string;
589
+ readValidatedBodyJson<Type>(validator: ValidatorFunction<unknown, Type>): Promise<Type | ((data: unknown) => data is Type)>;
590
+ /**
591
+ * Identical to {@link ApiRequest.readBodyText}, but it validates the result.
592
+ *
593
+ * @param validator The validator function to use on the body parsing result
594
+ * @returns The validated body
595
+ */
596
+ readValidatedBodyText<Type extends string>(validator: ValidatorFunction<string, Type>): Promise<Type | ((data: string) => data is Type)>;
503
597
  }
598
+ type ValidatorFunction<Data, Type extends Data> = (data: Data) => Type | ((data: Data) => data is Type);
504
599
 
505
600
  /**
506
601
  * The options for all middlewares.
@@ -535,7 +630,7 @@ declare abstract class Middleware<Options extends Middleware.Options = Middlewar
535
630
  * @param response The server's response.
536
631
  * @param route The route that matched this request, will be `null` if none matched.
537
632
  */
538
- abstract run(request: ApiRequest, response: ApiResponse, route: Route | null): Awaitable<unknown>;
633
+ abstract run(request: Middleware.Request, response: Middleware.Response): Awaitable<unknown>;
539
634
  }
540
635
  declare namespace Middleware {
541
636
  /** @deprecated Use {@linkcode LoaderContext} instead. */
@@ -544,6 +639,8 @@ declare namespace Middleware {
544
639
  type Options = MiddlewareOptions;
545
640
  type JSON = Piece.JSON;
546
641
  type LocationJSON = Piece.LocationJSON;
642
+ type Request = ApiRequest;
643
+ type Response = ApiResponse;
547
644
  }
548
645
 
549
646
  /**
@@ -555,26 +652,69 @@ declare class MiddlewareStore extends Store<Middleware, 'middlewares'> {
555
652
  */
556
653
  readonly sortedMiddlewares: Middleware[];
557
654
  constructor();
558
- run(request: ApiRequest, response: ApiResponse, route: Route | null): Promise<void>;
655
+ run(request: Middleware.Request, response: Middleware.Response): Promise<void>;
559
656
  set(key: string, value: Middleware): this;
560
657
  delete(key: string): boolean;
561
658
  clear(): void;
562
659
  }
563
660
 
564
- declare enum ServerEvents {
661
+ declare class RouterRoot extends RouterBranch {
662
+ constructor();
663
+ /**
664
+ * Adds a route to the branch
665
+ *
666
+ * @param route The route to add
667
+ * @returns The node the route was added to
668
+ */
669
+ add(route: Route): RouterNode;
670
+ /**
671
+ * Removes a route from the branch
672
+ *
673
+ * @param route The route to remove
674
+ * @returns Whether or not the route was removed
675
+ */
676
+ remove(route: Route): boolean;
677
+ get path(): string;
678
+ toString(): string;
679
+ static makeRoutePathForPiece(directories: readonly string[], name: string): string;
680
+ static normalize(path: string | null | undefined): string[];
681
+ static extractMethod(path: readonly string[]): MethodName | null;
682
+ }
683
+
684
+ /**
685
+ * @since 1.0.0
686
+ */
687
+ declare class RouteStore extends Store<Route, 'routes'> {
688
+ readonly router: RouterRoot;
689
+ constructor();
690
+ }
691
+
692
+ declare enum ServerEvent {
565
693
  Error = "error",
566
694
  Request = "request",
567
- Match = "match",
568
- NoMatch = "noMatch",
695
+ RouterBranchNotFound = "routerBranchNotFound",
696
+ RouterBranchMethodNotAllowed = "routerBranchMethodNotAllowed",
697
+ RouterFound = "routerFound",
569
698
  RouteError = "routeError",
570
699
  MiddlewareFailure = "middlewareFailure",
571
700
  MiddlewareError = "middlewareError",
572
701
  MiddlewareSuccess = "middlewareSuccess"
573
702
  }
703
+ interface ServerEvents {
704
+ [ServerEvent.Error]: [error: Error, request: ApiRequest, response: ApiResponse];
705
+ [ServerEvent.Request]: [request: ApiRequest, response: ApiResponse];
706
+ [ServerEvent.RouterBranchNotFound]: [request: ApiRequest, response: ApiResponse];
707
+ [ServerEvent.RouterBranchMethodNotAllowed]: [request: ApiRequest, response: ApiResponse, node: RouterBranch];
708
+ [ServerEvent.RouterFound]: [request: ApiRequest, response: ApiResponse];
709
+ [ServerEvent.RouteError]: [error: Error, request: ApiRequest, response: ApiResponse];
710
+ [ServerEvent.MiddlewareFailure]: [request: ApiRequest, response: ApiResponse];
711
+ [ServerEvent.MiddlewareSuccess]: [request: Route.Request, response: Route.Response, route: Route];
712
+ [ServerEvent.MiddlewareError]: [error: Error, request: ApiRequest, response: ApiResponse];
713
+ }
574
714
  /**
575
715
  * @since 1.0.0
576
716
  */
577
- declare class Server extends EventEmitter {
717
+ declare class Server extends AsyncEventEmitter<ServerEvents> {
578
718
  /**
579
719
  * The routes this server holds.
580
720
  * @since 1.0.0
@@ -585,11 +725,6 @@ declare class Server extends EventEmitter {
585
725
  * @since 1.0.0
586
726
  */
587
727
  readonly middlewares: MiddlewareStore;
588
- /**
589
- * The media parsers this server holds.
590
- * @since 1.3.0
591
- */
592
- readonly mediaParsers: MediaParserStore;
593
728
  /**
594
729
  * The authentication system.
595
730
  * @since 1.0.0
@@ -639,14 +774,15 @@ type ContentTypeParameter = `; ${string}=${string}`;
639
774
  /**
640
775
  * RFC 1341 4: Defines the syntax for a Content-Type field without parameters, which follows the following structure:
641
776
  * `type "/" subtype`.
777
+ * @since 7.0.0
642
778
  */
643
- type MimeTypeWithoutParameters = `${ContentTypeType}/${string}`;
779
+ type GenericMimeType = `${ContentTypeType}/${string}`;
644
780
  /**
645
781
  * RFC 1341 4: Defines the syntax for a Content-Type field, which follows the following structure:
646
782
  * `type "/" subtype *[";" parameter]`.
647
- * @since 1.3.0
783
+ * @since 7.0.0
648
784
  */
649
- type MimeType = `${MimeTypeWithoutParameters}${'' | ContentTypeParameter}`;
785
+ type GenericParametrizedMimeType = `${GenericMimeType}${'' | ContentTypeParameter}`;
650
786
  /**
651
787
  * The API options.
652
788
  * @since 1.0.0
@@ -670,12 +806,6 @@ interface ServerOptions {
670
806
  * @default 1024 * 1024 * 50
671
807
  */
672
808
  maximumBodyLength?: number;
673
- /**
674
- * The accepted content types for this route. If set to null, the route will accept any data.
675
- * @since 1.3.0
676
- * @default null
677
- */
678
- acceptedContentMimeTypes?: MimeTypeWithoutParameters[] | null;
679
809
  /**
680
810
  * The HTTP server options.
681
811
  * @since 1.0.0
@@ -707,27 +837,6 @@ interface ServerOptions {
707
837
  * @since 1.0.0
708
838
  */
709
839
  type AuthLessServerOptions = Omit<ServerOptions, 'auth'>;
710
- /**
711
- * The context sent in the error events.
712
- * @since 1.2.0
713
- */
714
- interface MiddlewareErrorContext {
715
- /**
716
- * The erroneous request.
717
- * @since 1.2.0
718
- */
719
- request: ApiRequest;
720
- /**
721
- * The server's response.
722
- * @since 1.2.0
723
- */
724
- response: ApiResponse;
725
- /**
726
- * The route match.
727
- * @since 1.2.0
728
- */
729
- match: RouteMatch;
730
- }
731
840
 
732
841
  declare enum HttpCodes {
733
842
  /**
@@ -1109,8 +1218,6 @@ declare enum HttpCodes {
1109
1218
 
1110
1219
  declare function loadListeners(): void;
1111
1220
 
1112
- declare function loadMediaParsers(): void;
1113
-
1114
1221
  declare function loadMiddlewares(): void;
1115
1222
 
1116
1223
  declare function loadRoutes(): void;
@@ -1126,7 +1233,6 @@ declare module 'discord.js' {
1126
1233
  declare module '@sapphire/pieces' {
1127
1234
  interface StoreRegistryEntries {
1128
1235
  routes: RouteStore;
1129
- mediaParsers: MediaParserStore;
1130
1236
  middlewares: MiddlewareStore;
1131
1237
  }
1132
1238
  interface Container {
@@ -1141,4 +1247,4 @@ declare module '@sapphire/pieces' {
1141
1247
  */
1142
1248
  declare const version: string;
1143
1249
 
1144
- export { ApiRequest, ApiResponse, Auth, type AuthData, type AuthLessServerOptions, type ContentTypeParameter, type ContentTypeType, CookieStore, HttpCodes, type LoginData, type LoginDataTransformer, type MatchData, MediaParser, MediaParserStore, type MethodCallback, type Methods, Middleware, type MiddlewareErrorContext, type MiddlewareOptions, MiddlewareStore, type MimeType, type MimeTypeWithoutParameters, MimeTypes, type ParsedPart, Route, RouteData, type RouteMatch, type RouteOptions, RouteStore, type SecureCookieStoreSetOptions, Server, ServerEvents, type ServerOptions, type ServerOptionsAuth, TypeState, loadListeners, loadMediaParsers, loadMiddlewares, loadRoutes, methodEntries, methods, version };
1250
+ export { ApiRequest, ApiResponse, Auth, type AuthData, type AuthLessServerOptions, type ContentTypeParameter, type ContentTypeType, CookieStore, type GenericMimeType, type GenericParametrizedMimeType, HttpCodes, type LoginData, type LoginDataTransformer, type MethodName, MethodNames, Middleware, type MiddlewareOptions, MiddlewareStore, type MimeType, Route, type RouteOptions, RouteStore, RouterBranch, RouterNode, RouterRoot, type SecureCookieStoreSetOptions, Server, ServerEvent, type ServerEvents, type ServerOptions, type ServerOptionsAuth, type ValidatorFunction, loadListeners, loadMiddlewares, loadRoutes, version };