mirror of https://git.lenooby09.tech/LeNooby09/social-app.git
1import {BskyAgent} from '@atproto/api'
2import {isBskyAppUrl} from '../strings/url-helpers'
3import {extractBskyMeta} from './bsky'
4import {LINK_META_PROXY} from 'lib/constants'
5
6export enum LikelyType {
7 HTML,
8 Text,
9 Image,
10 Video,
11 Audio,
12 AtpData,
13 Other,
14}
15
16export interface LinkMeta {
17 error?: string
18 likelyType: LikelyType
19 url: string
20 title?: string
21 description?: string
22 image?: string
23}
24
25export async function getLinkMeta(
26 agent: BskyAgent,
27 url: string,
28 timeout = 5e3,
29): Promise<LinkMeta> {
30 if (isBskyAppUrl(url)) {
31 return extractBskyMeta(agent, url)
32 }
33
34 let urlp
35 try {
36 urlp = new URL(url)
37 } catch (e) {
38 return {
39 error: 'Invalid URL',
40 likelyType: LikelyType.Other,
41 url,
42 }
43 }
44 const likelyType = getLikelyType(urlp)
45 const meta: LinkMeta = {
46 likelyType,
47 url,
48 }
49 if (likelyType !== LikelyType.HTML) {
50 return meta
51 }
52
53 try {
54 const controller = new AbortController()
55 const to = setTimeout(() => controller.abort(), timeout || 5e3)
56
57 const response = await fetch(
58 `${LINK_META_PROXY(agent.service.toString() || '')}${encodeURIComponent(
59 url,
60 )}`,
61 {signal: controller.signal},
62 )
63
64 const body = await response.json()
65 clearTimeout(to)
66
67 const {description, error, image, title} = body
68
69 if (error !== '') {
70 throw new Error(error)
71 }
72
73 meta.description = description
74 meta.image = image
75 meta.title = title
76 } catch (e) {
77 // failed
78 console.error(e)
79 meta.error = e instanceof Error ? e.toString() : 'Failed to fetch link'
80 }
81
82 return meta
83}
84
85export function getLikelyType(url: URL | string): LikelyType {
86 if (typeof url === 'string') {
87 try {
88 url = new URL(url)
89 } catch (e) {
90 return LikelyType.Other
91 }
92 }
93
94 const ext = url.pathname.split('.').pop() || ''
95 if (ext === 'html' || ext === 'htm' || ext === 'php') {
96 return LikelyType.HTML
97 }
98 const mimeType = EXT_MIME_TYPES[ext]
99 if (!mimeType) {
100 return LikelyType.HTML
101 }
102 if (mimeType.startsWith('text/')) {
103 return LikelyType.Text
104 }
105 if (mimeType.startsWith('image/')) {
106 return LikelyType.Image
107 }
108 if (mimeType.startsWith('video/')) {
109 return LikelyType.Video
110 }
111 if (mimeType.startsWith('audio/')) {
112 return LikelyType.Audio
113 }
114 return LikelyType.Other
115}
116
117const EXT_MIME_TYPES: Record<string, string> = {
118 '123': 'application/vnd.lotus-1-2-3',
119 '1km': 'application/vnd.1000minds.decision-model+xml',
120 '3dml': 'text/vnd.in3d.3dml',
121 '3ds': 'image/x-3ds',
122 '3g2': 'video/3gpp2',
123 '3gp': 'video/3gpp',
124 '3gpp': 'video/3gpp',
125 '3mf': 'model/3mf',
126 '7z': 'application/x-7z-compressed',
127 aab: 'application/x-authorware-bin',
128 aac: 'audio/x-aac',
129 aam: 'application/x-authorware-map',
130 aas: 'application/x-authorware-seg',
131 abw: 'application/x-abiword',
132 ac: 'application/vnd.nokia.n-gage.ac+xml',
133 acc: 'application/vnd.americandynamics.acc',
134 ace: 'application/x-ace-compressed',
135 acu: 'application/vnd.acucobol',
136 acutc: 'application/vnd.acucorp',
137 adp: 'audio/adpcm',
138 aep: 'application/vnd.audiograph',
139 afm: 'application/x-font-type1',
140 afp: 'application/vnd.ibm.modcap',
141 age: 'application/vnd.age',
142 ahead: 'application/vnd.ahead.space',
143 ai: 'application/postscript',
144 aif: 'audio/x-aiff',
145 aifc: 'audio/x-aiff',
146 aiff: 'audio/x-aiff',
147 air: 'application/vnd.adobe.air-application-installer-package+zip',
148 ait: 'application/vnd.dvb.ait',
149 ami: 'application/vnd.amiga.ami',
150 amr: 'audio/amr',
151 apk: 'application/vnd.android.package-archive',
152 apng: 'image/apng',
153 appcache: 'text/cache-manifest',
154 application: 'application/x-ms-application',
155 apr: 'application/vnd.lotus-approach',
156 arc: 'application/x-freearc',
157 arj: 'application/x-arj',
158 asc: 'application/pgp-signature',
159 asf: 'video/x-ms-asf',
160 asm: 'text/x-asm',
161 aso: 'application/vnd.accpac.simply.aso',
162 asx: 'video/x-ms-asf',
163 atc: 'application/vnd.acucorp',
164 atom: 'application/atom+xml',
165 atomcat: 'application/atomcat+xml',
166 atomdeleted: 'application/atomdeleted+xml',
167 atomsvc: 'application/atomsvc+xml',
168 atx: 'application/vnd.antix.game-component',
169 au: 'audio/basic',
170 avi: 'video/x-msvideo',
171 avif: 'image/avif',
172 aw: 'application/applixware',
173 azf: 'application/vnd.airzip.filesecure.azf',
174 azs: 'application/vnd.airzip.filesecure.azs',
175 azv: 'image/vnd.airzip.accelerator.azv',
176 azw: 'application/vnd.amazon.ebook',
177 b16: 'image/vnd.pco.b16',
178 bat: 'application/x-msdownload',
179 bcpio: 'application/x-bcpio',
180 bdf: 'application/x-font-bdf',
181 bdm: 'application/vnd.syncml.dm+wbxml',
182 bdoc: 'application/x-bdoc',
183 bed: 'application/vnd.realvnc.bed',
184 bh2: 'application/vnd.fujitsu.oasysprs',
185 bin: 'application/octet-stream',
186 blb: 'application/x-blorb',
187 blorb: 'application/x-blorb',
188 bmi: 'application/vnd.bmi',
189 bmml: 'application/vnd.balsamiq.bmml+xml',
190 bmp: 'image/x-ms-bmp',
191 book: 'application/vnd.framemaker',
192 box: 'application/vnd.previewsystems.box',
193 boz: 'application/x-bzip2',
194 bpk: 'application/octet-stream',
195 bsp: 'model/vnd.valve.source.compiled-map',
196 btif: 'image/prs.btif',
197 buffer: 'application/octet-stream',
198 bz: 'application/x-bzip',
199 bz2: 'application/x-bzip2',
200 c: 'text/x-c',
201 c11amc: 'application/vnd.cluetrust.cartomobile-config',
202 c11amz: 'application/vnd.cluetrust.cartomobile-config-pkg',
203 c4d: 'application/vnd.clonk.c4group',
204 c4f: 'application/vnd.clonk.c4group',
205 c4g: 'application/vnd.clonk.c4group',
206 c4p: 'application/vnd.clonk.c4group',
207 c4u: 'application/vnd.clonk.c4group',
208 cab: 'application/vnd.ms-cab-compressed',
209 caf: 'audio/x-caf',
210 cap: 'application/vnd.tcpdump.pcap',
211 car: 'application/vnd.curl.car',
212 cat: 'application/vnd.ms-pki.seccat',
213 cb7: 'application/x-cbr',
214 cba: 'application/x-cbr',
215 cbr: 'application/x-cbr',
216 cbt: 'application/x-cbr',
217 cbz: 'application/x-cbr',
218 cc: 'text/x-c',
219 cco: 'application/x-cocoa',
220 cct: 'application/x-director',
221 ccxml: 'application/ccxml+xml',
222 cdbcmsg: 'application/vnd.contact.cmsg',
223 cdf: 'application/x-netcdf',
224 cdfx: 'application/cdfx+xml',
225 cdkey: 'application/vnd.mediastation.cdkey',
226 cdmia: 'application/cdmi-capability',
227 cdmic: 'application/cdmi-container',
228 cdmid: 'application/cdmi-domain',
229 cdmio: 'application/cdmi-object',
230 cdmiq: 'application/cdmi-queue',
231 cdx: 'chemical/x-cdx',
232 cdxml: 'application/vnd.chemdraw+xml',
233 cdy: 'application/vnd.cinderella',
234 cer: 'application/pkix-cert',
235 cfs: 'application/x-cfs-compressed',
236 cgm: 'image/cgm',
237 chat: 'application/x-chat',
238 chm: 'application/vnd.ms-htmlhelp',
239 chrt: 'application/vnd.kde.kchart',
240 cif: 'chemical/x-cif',
241 cii: 'application/vnd.anser-web-certificate-issue-initiation',
242 cil: 'application/vnd.ms-artgalry',
243 cjs: 'application/node',
244 cla: 'application/vnd.claymore',
245 class: 'application/java-vm',
246 clkk: 'application/vnd.crick.clicker.keyboard',
247 clkp: 'application/vnd.crick.clicker.palette',
248 clkt: 'application/vnd.crick.clicker.template',
249 clkw: 'application/vnd.crick.clicker.wordbank',
250 clkx: 'application/vnd.crick.clicker',
251 clp: 'application/x-msclip',
252 cmc: 'application/vnd.cosmocaller',
253 cmdf: 'chemical/x-cmdf',
254 cml: 'chemical/x-cml',
255 cmp: 'application/vnd.yellowriver-custom-menu',
256 cmx: 'image/x-cmx',
257 cod: 'application/vnd.rim.cod',
258 coffee: 'text/coffeescript',
259 com: 'application/x-msdownload',
260 conf: 'text/plain',
261 cpio: 'application/x-cpio',
262 cpp: 'text/x-c',
263 cpt: 'application/mac-compactpro',
264 crd: 'application/x-mscardfile',
265 crl: 'application/pkix-crl',
266 crt: 'application/x-x509-ca-cert',
267 crx: 'application/x-chrome-extension',
268 cryptonote: 'application/vnd.rig.cryptonote',
269 csh: 'application/x-csh',
270 csl: 'application/vnd.citationstyles.style+xml',
271 csml: 'chemical/x-csml',
272 csp: 'application/vnd.commonspace',
273 css: 'text/css',
274 cst: 'application/x-director',
275 csv: 'text/csv',
276 cu: 'application/cu-seeme',
277 curl: 'text/vnd.curl',
278 cww: 'application/prs.cww',
279 cxt: 'application/x-director',
280 cxx: 'text/x-c',
281 dae: 'model/vnd.collada+xml',
282 daf: 'application/vnd.mobius.daf',
283 dart: 'application/vnd.dart',
284 dataless: 'application/vnd.fdsn.seed',
285 davmount: 'application/davmount+xml',
286 dbf: 'application/vnd.dbf',
287 dbk: 'application/docbook+xml',
288 dcr: 'application/x-director',
289 dcurl: 'text/vnd.curl.dcurl',
290 dd2: 'application/vnd.oma.dd2+xml',
291 ddd: 'application/vnd.fujixerox.ddd',
292 ddf: 'application/vnd.syncml.dmddf+xml',
293 dds: 'image/vnd.ms-dds',
294 deb: 'application/x-debian-package',
295 def: 'text/plain',
296 deploy: 'application/octet-stream',
297 der: 'application/x-x509-ca-cert',
298 dfac: 'application/vnd.dreamfactory',
299 dgc: 'application/x-dgc-compressed',
300 dic: 'text/x-c',
301 dir: 'application/x-director',
302 dis: 'application/vnd.mobius.dis',
303 'disposition-notification': 'message/disposition-notification',
304 dist: 'application/octet-stream',
305 distz: 'application/octet-stream',
306 djv: 'image/vnd.djvu',
307 djvu: 'image/vnd.djvu',
308 dll: 'application/x-msdownload',
309 dmg: 'application/x-apple-diskimage',
310 dmp: 'application/vnd.tcpdump.pcap',
311 dms: 'application/octet-stream',
312 dna: 'application/vnd.dna',
313 doc: 'application/msword',
314 docm: 'application/vnd.ms-word.document.macroenabled.12',
315 docx: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
316 dot: 'application/msword',
317 dotm: 'application/vnd.ms-word.template.macroenabled.12',
318 dotx: 'application/vnd.openxmlformats-officedocument.wordprocessingml.template',
319 dp: 'application/vnd.osgi.dp',
320 dpg: 'application/vnd.dpgraph',
321 dra: 'audio/vnd.dra',
322 drle: 'image/dicom-rle',
323 dsc: 'text/prs.lines.tag',
324 dssc: 'application/dssc+der',
325 dtb: 'application/x-dtbook+xml',
326 dtd: 'application/xml-dtd',
327 dts: 'audio/vnd.dts',
328 dtshd: 'audio/vnd.dts.hd',
329 dump: 'application/octet-stream',
330 dvb: 'video/vnd.dvb.file',
331 dvi: 'application/x-dvi',
332 dwd: 'application/atsc-dwd+xml',
333 dwf: 'model/vnd.dwf',
334 dwg: 'image/vnd.dwg',
335 dxf: 'image/vnd.dxf',
336 dxp: 'application/vnd.spotfire.dxp',
337 dxr: 'application/x-director',
338 ear: 'application/java-archive',
339 ecelp4800: 'audio/vnd.nuera.ecelp4800',
340 ecelp7470: 'audio/vnd.nuera.ecelp7470',
341 ecelp9600: 'audio/vnd.nuera.ecelp9600',
342 ecma: 'application/ecmascript',
343 edm: 'application/vnd.novadigm.edm',
344 edx: 'application/vnd.novadigm.edx',
345 efif: 'application/vnd.picsel',
346 ei6: 'application/vnd.pg.osasli',
347 elc: 'application/octet-stream',
348 emf: 'image/emf',
349 eml: 'message/rfc822',
350 emma: 'application/emma+xml',
351 emotionml: 'application/emotionml+xml',
352 emz: 'application/x-msmetafile',
353 eol: 'audio/vnd.digital-winds',
354 eot: 'application/vnd.ms-fontobject',
355 eps: 'application/postscript',
356 epub: 'application/epub+zip',
357 es: 'application/ecmascript',
358 es3: 'application/vnd.eszigno3+xml',
359 esa: 'application/vnd.osgi.subsystem',
360 esf: 'application/vnd.epson.esf',
361 et3: 'application/vnd.eszigno3+xml',
362 etx: 'text/x-setext',
363 eva: 'application/x-eva',
364 evy: 'application/x-envoy',
365 exe: 'application/x-msdownload',
366 exi: 'application/exi',
367 exp: 'application/express',
368 exr: 'image/aces',
369 ext: 'application/vnd.novadigm.ext',
370 ez: 'application/andrew-inset',
371 ez2: 'application/vnd.ezpix-album',
372 ez3: 'application/vnd.ezpix-package',
373 f: 'text/x-fortran',
374 f4v: 'video/x-f4v',
375 f77: 'text/x-fortran',
376 f90: 'text/x-fortran',
377 fbs: 'image/vnd.fastbidsheet',
378 fcdt: 'application/vnd.adobe.formscentral.fcdt',
379 fcs: 'application/vnd.isac.fcs',
380 fdf: 'application/vnd.fdf',
381 fdt: 'application/fdt+xml',
382 fe_launch: 'application/vnd.denovo.fcselayout-link',
383 fg5: 'application/vnd.fujitsu.oasysgp',
384 fgd: 'application/x-director',
385 fh: 'image/x-freehand',
386 fh4: 'image/x-freehand',
387 fh5: 'image/x-freehand',
388 fh7: 'image/x-freehand',
389 fhc: 'image/x-freehand',
390 fig: 'application/x-xfig',
391 fits: 'image/fits',
392 flac: 'audio/x-flac',
393 fli: 'video/x-fli',
394 flo: 'application/vnd.micrografx.flo',
395 flv: 'video/x-flv',
396 flw: 'application/vnd.kde.kivio',
397 flx: 'text/vnd.fmi.flexstor',
398 fly: 'text/vnd.fly',
399 fm: 'application/vnd.framemaker',
400 fnc: 'application/vnd.frogans.fnc',
401 fo: 'application/vnd.software602.filler.form+xml',
402 for: 'text/x-fortran',
403 fpx: 'image/vnd.fpx',
404 frame: 'application/vnd.framemaker',
405 fsc: 'application/vnd.fsc.weblaunch',
406 fst: 'image/vnd.fst',
407 ftc: 'application/vnd.fluxtime.clip',
408 fti: 'application/vnd.anser-web-funds-transfer-initiation',
409 fvt: 'video/vnd.fvt',
410 fxp: 'application/vnd.adobe.fxp',
411 fxpl: 'application/vnd.adobe.fxp',
412 fzs: 'application/vnd.fuzzysheet',
413 g2w: 'application/vnd.geoplan',
414 g3: 'image/g3fax',
415 g3w: 'application/vnd.geospace',
416 gac: 'application/vnd.groove-account',
417 gam: 'application/x-tads',
418 gbr: 'application/rpki-ghostbusters',
419 gca: 'application/x-gca-compressed',
420 gdl: 'model/vnd.gdl',
421 gdoc: 'application/vnd.google-apps.document',
422 ged: 'text/vnd.familysearch.gedcom',
423 geo: 'application/vnd.dynageo',
424 geojson: 'application/geo+json',
425 gex: 'application/vnd.geometry-explorer',
426 ggb: 'application/vnd.geogebra.file',
427 ggt: 'application/vnd.geogebra.tool',
428 ghf: 'application/vnd.groove-help',
429 gif: 'image/gif',
430 gim: 'application/vnd.groove-identity-message',
431 glb: 'model/gltf-binary',
432 gltf: 'model/gltf+json',
433 gml: 'application/gml+xml',
434 gmx: 'application/vnd.gmx',
435 gnumeric: 'application/x-gnumeric',
436 gph: 'application/vnd.flographit',
437 gpx: 'application/gpx+xml',
438 gqf: 'application/vnd.grafeq',
439 gqs: 'application/vnd.grafeq',
440 gram: 'application/srgs',
441 gramps: 'application/x-gramps-xml',
442 gre: 'application/vnd.geometry-explorer',
443 grv: 'application/vnd.groove-injector',
444 grxml: 'application/srgs+xml',
445 gsf: 'application/x-font-ghostscript',
446 gsheet: 'application/vnd.google-apps.spreadsheet',
447 gslides: 'application/vnd.google-apps.presentation',
448 gtar: 'application/x-gtar',
449 gtm: 'application/vnd.groove-tool-message',
450 gtw: 'model/vnd.gtw',
451 gv: 'text/vnd.graphviz',
452 gxf: 'application/gxf',
453 gxt: 'application/vnd.geonext',
454 gz: 'application/gzip',
455 h: 'text/x-c',
456 h261: 'video/h261',
457 h263: 'video/h263',
458 h264: 'video/h264',
459 hal: 'application/vnd.hal+xml',
460 hbci: 'application/vnd.hbci',
461 hbs: 'text/x-handlebars-template',
462 hdd: 'application/x-virtualbox-hdd',
463 hdf: 'application/x-hdf',
464 heic: 'image/heic',
465 heics: 'image/heic-sequence',
466 heif: 'image/heif',
467 heifs: 'image/heif-sequence',
468 hej2: 'image/hej2k',
469 held: 'application/atsc-held+xml',
470 hh: 'text/x-c',
471 hjson: 'application/hjson',
472 hlp: 'application/winhlp',
473 hpgl: 'application/vnd.hp-hpgl',
474 hpid: 'application/vnd.hp-hpid',
475 hps: 'application/vnd.hp-hps',
476 hqx: 'application/mac-binhex40',
477 hsj2: 'image/hsj2',
478 htc: 'text/x-component',
479 htke: 'application/vnd.kenameaapp',
480 htm: 'text/html',
481 html: 'text/html',
482 hvd: 'application/vnd.yamaha.hv-dic',
483 hvp: 'application/vnd.yamaha.hv-voice',
484 hvs: 'application/vnd.yamaha.hv-script',
485 i2g: 'application/vnd.intergeo',
486 icc: 'application/vnd.iccprofile',
487 ice: 'x-conference/x-cooltalk',
488 icm: 'application/vnd.iccprofile',
489 ico: 'image/x-icon',
490 ics: 'text/calendar',
491 ief: 'image/ief',
492 ifb: 'text/calendar',
493 ifm: 'application/vnd.shana.informed.formdata',
494 iges: 'model/iges',
495 igl: 'application/vnd.igloader',
496 igm: 'application/vnd.insors.igm',
497 igs: 'model/iges',
498 igx: 'application/vnd.micrografx.igx',
499 iif: 'application/vnd.shana.informed.interchange',
500 img: 'application/octet-stream',
501 imp: 'application/vnd.accpac.simply.imp',
502 ims: 'application/vnd.ms-ims',
503 in: 'text/plain',
504 ini: 'text/plain',
505 ink: 'application/inkml+xml',
506 inkml: 'application/inkml+xml',
507 install: 'application/x-install-instructions',
508 iota: 'application/vnd.astraea-software.iota',
509 ipfix: 'application/ipfix',
510 ipk: 'application/vnd.shana.informed.package',
511 irm: 'application/vnd.ibm.rights-management',
512 irp: 'application/vnd.irepository.package+xml',
513 iso: 'application/x-iso9660-image',
514 itp: 'application/vnd.shana.informed.formtemplate',
515 its: 'application/its+xml',
516 ivp: 'application/vnd.immervision-ivp',
517 ivu: 'application/vnd.immervision-ivu',
518 jad: 'text/vnd.sun.j2me.app-descriptor',
519 jade: 'text/jade',
520 jam: 'application/vnd.jam',
521 jar: 'application/java-archive',
522 jardiff: 'application/x-java-archive-diff',
523 java: 'text/x-java-source',
524 jhc: 'image/jphc',
525 jisp: 'application/vnd.jisp',
526 jls: 'image/jls',
527 jlt: 'application/vnd.hp-jlyt',
528 jng: 'image/x-jng',
529 jnlp: 'application/x-java-jnlp-file',
530 joda: 'application/vnd.joost.joda-archive',
531 jp2: 'image/jp2',
532 jpe: 'image/jpeg',
533 jpeg: 'image/jpeg',
534 jpf: 'image/jpx',
535 jpg: 'image/jpeg',
536 jpg2: 'image/jp2',
537 jpgm: 'video/jpm',
538 jpgv: 'video/jpeg',
539 jph: 'image/jph',
540 jpm: 'video/jpm',
541 jpx: 'image/jpx',
542 js: 'application/javascript',
543 json: 'application/json',
544 json5: 'application/json5',
545 jsonld: 'application/ld+json',
546 jsonml: 'application/jsonml+json',
547 jsx: 'text/jsx',
548 jxr: 'image/jxr',
549 jxra: 'image/jxra',
550 jxrs: 'image/jxrs',
551 jxs: 'image/jxs',
552 jxsc: 'image/jxsc',
553 jxsi: 'image/jxsi',
554 jxss: 'image/jxss',
555 kar: 'audio/midi',
556 karbon: 'application/vnd.kde.karbon',
557 kdbx: 'application/x-keepass2',
558 key: 'application/x-iwork-keynote-sffkey',
559 kfo: 'application/vnd.kde.kformula',
560 kia: 'application/vnd.kidspiration',
561 kml: 'application/vnd.google-earth.kml+xml',
562 kmz: 'application/vnd.google-earth.kmz',
563 kne: 'application/vnd.kinar',
564 knp: 'application/vnd.kinar',
565 kon: 'application/vnd.kde.kontour',
566 kpr: 'application/vnd.kde.kpresenter',
567 kpt: 'application/vnd.kde.kpresenter',
568 kpxx: 'application/vnd.ds-keypoint',
569 ksp: 'application/vnd.kde.kspread',
570 ktr: 'application/vnd.kahootz',
571 ktx: 'image/ktx',
572 ktx2: 'image/ktx2',
573 ktz: 'application/vnd.kahootz',
574 kwd: 'application/vnd.kde.kword',
575 kwt: 'application/vnd.kde.kword',
576 lasxml: 'application/vnd.las.las+xml',
577 latex: 'application/x-latex',
578 lbd: 'application/vnd.llamagraphics.life-balance.desktop',
579 lbe: 'application/vnd.llamagraphics.life-balance.exchange+xml',
580 les: 'application/vnd.hhe.lesson-player',
581 less: 'text/less',
582 lgr: 'application/lgr+xml',
583 lha: 'application/x-lzh-compressed',
584 link66: 'application/vnd.route66.link66+xml',
585 list: 'text/plain',
586 list3820: 'application/vnd.ibm.modcap',
587 listafp: 'application/vnd.ibm.modcap',
588 litcoffee: 'text/coffeescript',
589 lnk: 'application/x-ms-shortcut',
590 log: 'text/plain',
591 lostxml: 'application/lost+xml',
592 lrf: 'application/octet-stream',
593 lrm: 'application/vnd.ms-lrm',
594 ltf: 'application/vnd.frogans.ltf',
595 lua: 'text/x-lua',
596 luac: 'application/x-lua-bytecode',
597 lvp: 'audio/vnd.lucent.voice',
598 lwp: 'application/vnd.lotus-wordpro',
599 lzh: 'application/x-lzh-compressed',
600 m13: 'application/x-msmediaview',
601 m14: 'application/x-msmediaview',
602 m1v: 'video/mpeg',
603 m21: 'application/mp21',
604 m2a: 'audio/mpeg',
605 m2v: 'video/mpeg',
606 m3a: 'audio/mpeg',
607 m3u: 'audio/x-mpegurl',
608 m3u8: 'application/vnd.apple.mpegurl',
609 m4a: 'audio/x-m4a',
610 m4p: 'application/mp4',
611 m4s: 'video/iso.segment',
612 m4u: 'video/vnd.mpegurl',
613 m4v: 'video/x-m4v',
614 ma: 'application/mathematica',
615 mads: 'application/mads+xml',
616 maei: 'application/mmt-aei+xml',
617 mag: 'application/vnd.ecowin.chart',
618 maker: 'application/vnd.framemaker',
619 man: 'text/troff',
620 manifest: 'text/cache-manifest',
621 map: 'application/json',
622 mar: 'application/octet-stream',
623 markdown: 'text/markdown',
624 mathml: 'application/mathml+xml',
625 mb: 'application/mathematica',
626 mbk: 'application/vnd.mobius.mbk',
627 mbox: 'application/mbox',
628 mc1: 'application/vnd.medcalcdata',
629 mcd: 'application/vnd.mcd',
630 mcurl: 'text/vnd.curl.mcurl',
631 md: 'text/markdown',
632 mdb: 'application/x-msaccess',
633 mdi: 'image/vnd.ms-modi',
634 mdx: 'text/mdx',
635 me: 'text/troff',
636 mesh: 'model/mesh',
637 meta4: 'application/metalink4+xml',
638 metalink: 'application/metalink+xml',
639 mets: 'application/mets+xml',
640 mfm: 'application/vnd.mfmp',
641 mft: 'application/rpki-manifest',
642 mgp: 'application/vnd.osgeo.mapguide.package',
643 mgz: 'application/vnd.proteus.magazine',
644 mid: 'audio/midi',
645 midi: 'audio/midi',
646 mie: 'application/x-mie',
647 mif: 'application/vnd.mif',
648 mime: 'message/rfc822',
649 mj2: 'video/mj2',
650 mjp2: 'video/mj2',
651 mjs: 'application/javascript',
652 mk3d: 'video/x-matroska',
653 mka: 'audio/x-matroska',
654 mkd: 'text/x-markdown',
655 mks: 'video/x-matroska',
656 mkv: 'video/x-matroska',
657 mlp: 'application/vnd.dolby.mlp',
658 mmd: 'application/vnd.chipnuts.karaoke-mmd',
659 mmf: 'application/vnd.smaf',
660 mml: 'text/mathml',
661 mmr: 'image/vnd.fujixerox.edmics-mmr',
662 mng: 'video/x-mng',
663 mny: 'application/x-msmoney',
664 mobi: 'application/x-mobipocket-ebook',
665 mods: 'application/mods+xml',
666 mov: 'video/quicktime',
667 movie: 'video/x-sgi-movie',
668 mp2: 'audio/mpeg',
669 mp21: 'application/mp21',
670 mp2a: 'audio/mpeg',
671 mp3: 'audio/mpeg',
672 mp4: 'video/mp4',
673 mp4a: 'audio/mp4',
674 mp4s: 'application/mp4',
675 mp4v: 'video/mp4',
676 mpc: 'application/vnd.mophun.certificate',
677 mpd: 'application/dash+xml',
678 mpe: 'video/mpeg',
679 mpeg: 'video/mpeg',
680 mpg: 'video/mpeg',
681 mpg4: 'video/mp4',
682 mpga: 'audio/mpeg',
683 mpkg: 'application/vnd.apple.installer+xml',
684 mpm: 'application/vnd.blueice.multipass',
685 mpn: 'application/vnd.mophun.application',
686 mpp: 'application/vnd.ms-project',
687 mpt: 'application/vnd.ms-project',
688 mpy: 'application/vnd.ibm.minipay',
689 mqy: 'application/vnd.mobius.mqy',
690 mrc: 'application/marc',
691 mrcx: 'application/marcxml+xml',
692 ms: 'text/troff',
693 mscml: 'application/mediaservercontrol+xml',
694 mseed: 'application/vnd.fdsn.mseed',
695 mseq: 'application/vnd.mseq',
696 msf: 'application/vnd.epson.msf',
697 msg: 'application/vnd.ms-outlook',
698 msh: 'model/mesh',
699 msi: 'application/x-msdownload',
700 msl: 'application/vnd.mobius.msl',
701 msm: 'application/octet-stream',
702 msp: 'application/octet-stream',
703 msty: 'application/vnd.muvee.style',
704 mtl: 'model/mtl',
705 mts: 'model/vnd.mts',
706 mus: 'application/vnd.musician',
707 musd: 'application/mmt-usd+xml',
708 musicxml: 'application/vnd.recordare.musicxml+xml',
709 mvb: 'application/x-msmediaview',
710 mvt: 'application/vnd.mapbox-vector-tile',
711 mwf: 'application/vnd.mfer',
712 mxf: 'application/mxf',
713 mxl: 'application/vnd.recordare.musicxml',
714 mxmf: 'audio/mobile-xmf',
715 mxml: 'application/xv+xml',
716 mxs: 'application/vnd.triscape.mxs',
717 mxu: 'video/vnd.mpegurl',
718 'n-gage': 'application/vnd.nokia.n-gage.symbian.install',
719 n3: 'text/n3',
720 nb: 'application/mathematica',
721 nbp: 'application/vnd.wolfram.player',
722 nc: 'application/x-netcdf',
723 ncx: 'application/x-dtbncx+xml',
724 nfo: 'text/x-nfo',
725 ngdat: 'application/vnd.nokia.n-gage.data',
726 nitf: 'application/vnd.nitf',
727 nlu: 'application/vnd.neurolanguage.nlu',
728 nml: 'application/vnd.enliven',
729 nnd: 'application/vnd.noblenet-directory',
730 nns: 'application/vnd.noblenet-sealer',
731 nnw: 'application/vnd.noblenet-web',
732 npx: 'image/vnd.net-fpx',
733 nq: 'application/n-quads',
734 nsc: 'application/x-conference',
735 nsf: 'application/vnd.lotus-notes',
736 nt: 'application/n-triples',
737 ntf: 'application/vnd.nitf',
738 numbers: 'application/x-iwork-numbers-sffnumbers',
739 nzb: 'application/x-nzb',
740 oa2: 'application/vnd.fujitsu.oasys2',
741 oa3: 'application/vnd.fujitsu.oasys3',
742 oas: 'application/vnd.fujitsu.oasys',
743 obd: 'application/x-msbinder',
744 obgx: 'application/vnd.openblox.game+xml',
745 obj: 'model/obj',
746 oda: 'application/oda',
747 odb: 'application/vnd.oasis.opendocument.database',
748 odc: 'application/vnd.oasis.opendocument.chart',
749 odf: 'application/vnd.oasis.opendocument.formula',
750 odft: 'application/vnd.oasis.opendocument.formula-template',
751 odg: 'application/vnd.oasis.opendocument.graphics',
752 odi: 'application/vnd.oasis.opendocument.image',
753 odm: 'application/vnd.oasis.opendocument.text-master',
754 odp: 'application/vnd.oasis.opendocument.presentation',
755 ods: 'application/vnd.oasis.opendocument.spreadsheet',
756 odt: 'application/vnd.oasis.opendocument.text',
757 oga: 'audio/ogg',
758 ogex: 'model/vnd.opengex',
759 ogg: 'audio/ogg',
760 ogv: 'video/ogg',
761 ogx: 'application/ogg',
762 omdoc: 'application/omdoc+xml',
763 onepkg: 'application/onenote',
764 onetmp: 'application/onenote',
765 onetoc: 'application/onenote',
766 onetoc2: 'application/onenote',
767 opf: 'application/oebps-package+xml',
768 opml: 'text/x-opml',
769 oprc: 'application/vnd.palm',
770 opus: 'audio/ogg',
771 org: 'text/x-org',
772 osf: 'application/vnd.yamaha.openscoreformat',
773 osfpvg: 'application/vnd.yamaha.openscoreformat.osfpvg+xml',
774 osm: 'application/vnd.openstreetmap.data+xml',
775 otc: 'application/vnd.oasis.opendocument.chart-template',
776 otf: 'font/otf',
777 otg: 'application/vnd.oasis.opendocument.graphics-template',
778 oth: 'application/vnd.oasis.opendocument.text-web',
779 oti: 'application/vnd.oasis.opendocument.image-template',
780 otp: 'application/vnd.oasis.opendocument.presentation-template',
781 ots: 'application/vnd.oasis.opendocument.spreadsheet-template',
782 ott: 'application/vnd.oasis.opendocument.text-template',
783 ova: 'application/x-virtualbox-ova',
784 ovf: 'application/x-virtualbox-ovf',
785 owl: 'application/rdf+xml',
786 oxps: 'application/oxps',
787 oxt: 'application/vnd.openofficeorg.extension',
788 p: 'text/x-pascal',
789 p10: 'application/pkcs10',
790 p12: 'application/x-pkcs12',
791 p7b: 'application/x-pkcs7-certificates',
792 p7c: 'application/pkcs7-mime',
793 p7m: 'application/pkcs7-mime',
794 p7r: 'application/x-pkcs7-certreqresp',
795 p7s: 'application/pkcs7-signature',
796 p8: 'application/pkcs8',
797 pac: 'application/x-ns-proxy-autoconfig',
798 pages: 'application/x-iwork-pages-sffpages',
799 pas: 'text/x-pascal',
800 paw: 'application/vnd.pawaafile',
801 pbd: 'application/vnd.powerbuilder6',
802 pbm: 'image/x-portable-bitmap',
803 pcap: 'application/vnd.tcpdump.pcap',
804 pcf: 'application/x-font-pcf',
805 pcl: 'application/vnd.hp-pcl',
806 pclxl: 'application/vnd.hp-pclxl',
807 pct: 'image/x-pict',
808 pcurl: 'application/vnd.curl.pcurl',
809 pcx: 'image/x-pcx',
810 pdb: 'application/x-pilot',
811 pde: 'text/x-processing',
812 pdf: 'application/pdf',
813 pem: 'application/x-x509-ca-cert',
814 pfa: 'application/x-font-type1',
815 pfb: 'application/x-font-type1',
816 pfm: 'application/x-font-type1',
817 pfr: 'application/font-tdpfr',
818 pfx: 'application/x-pkcs12',
819 pgm: 'image/x-portable-graymap',
820 pgn: 'application/x-chess-pgn',
821 pgp: 'application/pgp-encrypted',
822 php: 'application/x-httpd-php',
823 pic: 'image/x-pict',
824 pkg: 'application/octet-stream',
825 pki: 'application/pkixcmp',
826 pkipath: 'application/pkix-pkipath',
827 pkpass: 'application/vnd.apple.pkpass',
828 pl: 'application/x-perl',
829 plb: 'application/vnd.3gpp.pic-bw-large',
830 plc: 'application/vnd.mobius.plc',
831 plf: 'application/vnd.pocketlearn',
832 pls: 'application/pls+xml',
833 pm: 'application/x-perl',
834 pml: 'application/vnd.ctc-posml',
835 png: 'image/png',
836 pnm: 'image/x-portable-anymap',
837 portpkg: 'application/vnd.macports.portpkg',
838 pot: 'application/vnd.ms-powerpoint',
839 potm: 'application/vnd.ms-powerpoint.template.macroenabled.12',
840 potx: 'application/vnd.openxmlformats-officedocument.presentationml.template',
841 ppam: 'application/vnd.ms-powerpoint.addin.macroenabled.12',
842 ppd: 'application/vnd.cups-ppd',
843 ppm: 'image/x-portable-pixmap',
844 pps: 'application/vnd.ms-powerpoint',
845 ppsm: 'application/vnd.ms-powerpoint.slideshow.macroenabled.12',
846 ppsx: 'application/vnd.openxmlformats-officedocument.presentationml.slideshow',
847 ppt: 'application/vnd.ms-powerpoint',
848 pptm: 'application/vnd.ms-powerpoint.presentation.macroenabled.12',
849 pptx: 'application/vnd.openxmlformats-officedocument.presentationml.presentation',
850 pqa: 'application/vnd.palm',
851 prc: 'application/x-pilot',
852 pre: 'application/vnd.lotus-freelance',
853 prf: 'application/pics-rules',
854 provx: 'application/provenance+xml',
855 ps: 'application/postscript',
856 psb: 'application/vnd.3gpp.pic-bw-small',
857 psd: 'image/vnd.adobe.photoshop',
858 psf: 'application/x-font-linux-psf',
859 pskcxml: 'application/pskc+xml',
860 pti: 'image/prs.pti',
861 ptid: 'application/vnd.pvi.ptid1',
862 pub: 'application/x-mspublisher',
863 pvb: 'application/vnd.3gpp.pic-bw-var',
864 pwn: 'application/vnd.3m.post-it-notes',
865 pya: 'audio/vnd.ms-playready.media.pya',
866 pyv: 'video/vnd.ms-playready.media.pyv',
867 qam: 'application/vnd.epson.quickanime',
868 qbo: 'application/vnd.intu.qbo',
869 qfx: 'application/vnd.intu.qfx',
870 qps: 'application/vnd.publishare-delta-tree',
871 qt: 'video/quicktime',
872 qwd: 'application/vnd.quark.quarkxpress',
873 qwt: 'application/vnd.quark.quarkxpress',
874 qxb: 'application/vnd.quark.quarkxpress',
875 qxd: 'application/vnd.quark.quarkxpress',
876 qxl: 'application/vnd.quark.quarkxpress',
877 qxt: 'application/vnd.quark.quarkxpress',
878 ra: 'audio/x-realaudio',
879 ram: 'audio/x-pn-realaudio',
880 raml: 'application/raml+yaml',
881 rapd: 'application/route-apd+xml',
882 rar: 'application/x-rar-compressed',
883 ras: 'image/x-cmu-raster',
884 rcprofile: 'application/vnd.ipunplugged.rcprofile',
885 rdf: 'application/rdf+xml',
886 rdz: 'application/vnd.data-vision.rdz',
887 relo: 'application/p2p-overlay+xml',
888 rep: 'application/vnd.businessobjects',
889 res: 'application/x-dtbresource+xml',
890 rgb: 'image/x-rgb',
891 rif: 'application/reginfo+xml',
892 rip: 'audio/vnd.rip',
893 ris: 'application/x-research-info-systems',
894 rl: 'application/resource-lists+xml',
895 rlc: 'image/vnd.fujixerox.edmics-rlc',
896 rld: 'application/resource-lists-diff+xml',
897 rm: 'application/vnd.rn-realmedia',
898 rmi: 'audio/midi',
899 rmp: 'audio/x-pn-realaudio-plugin',
900 rms: 'application/vnd.jcp.javame.midlet-rms',
901 rmvb: 'application/vnd.rn-realmedia-vbr',
902 rnc: 'application/relax-ng-compact-syntax',
903 rng: 'application/xml',
904 roa: 'application/rpki-roa',
905 roff: 'text/troff',
906 rp9: 'application/vnd.cloanto.rp9',
907 rpm: 'application/x-redhat-package-manager',
908 rpss: 'application/vnd.nokia.radio-presets',
909 rpst: 'application/vnd.nokia.radio-preset',
910 rq: 'application/sparql-query',
911 rs: 'application/rls-services+xml',
912 rsat: 'application/atsc-rsat+xml',
913 rsd: 'application/rsd+xml',
914 rsheet: 'application/urc-ressheet+xml',
915 rss: 'application/rss+xml',
916 rtf: 'text/rtf',
917 rtx: 'text/richtext',
918 run: 'application/x-makeself',
919 rusd: 'application/route-usd+xml',
920 s: 'text/x-asm',
921 s3m: 'audio/s3m',
922 saf: 'application/vnd.yamaha.smaf-audio',
923 sass: 'text/x-sass',
924 sbml: 'application/sbml+xml',
925 sc: 'application/vnd.ibm.secure-container',
926 scd: 'application/x-msschedule',
927 scm: 'application/vnd.lotus-screencam',
928 scq: 'application/scvp-cv-request',
929 scs: 'application/scvp-cv-response',
930 scss: 'text/x-scss',
931 scurl: 'text/vnd.curl.scurl',
932 sda: 'application/vnd.stardivision.draw',
933 sdc: 'application/vnd.stardivision.calc',
934 sdd: 'application/vnd.stardivision.impress',
935 sdkd: 'application/vnd.solent.sdkm+xml',
936 sdkm: 'application/vnd.solent.sdkm+xml',
937 sdp: 'application/sdp',
938 sdw: 'application/vnd.stardivision.writer',
939 sea: 'application/x-sea',
940 see: 'application/vnd.seemail',
941 seed: 'application/vnd.fdsn.seed',
942 sema: 'application/vnd.sema',
943 semd: 'application/vnd.semd',
944 semf: 'application/vnd.semf',
945 senmlx: 'application/senml+xml',
946 sensmlx: 'application/sensml+xml',
947 ser: 'application/java-serialized-object',
948 setpay: 'application/set-payment-initiation',
949 setreg: 'application/set-registration-initiation',
950 'sfd-hdstx': 'application/vnd.hydrostatix.sof-data',
951 sfs: 'application/vnd.spotfire.sfs',
952 sfv: 'text/x-sfv',
953 sgi: 'image/sgi',
954 sgl: 'application/vnd.stardivision.writer-global',
955 sgm: 'text/sgml',
956 sgml: 'text/sgml',
957 sh: 'application/x-sh',
958 shar: 'application/x-shar',
959 shex: 'text/shex',
960 shf: 'application/shf+xml',
961 shtml: 'text/html',
962 sid: 'image/x-mrsid-image',
963 sieve: 'application/sieve',
964 sig: 'application/pgp-signature',
965 sil: 'audio/silk',
966 silo: 'model/mesh',
967 sis: 'application/vnd.symbian.install',
968 sisx: 'application/vnd.symbian.install',
969 sit: 'application/x-stuffit',
970 sitx: 'application/x-stuffitx',
971 siv: 'application/sieve',
972 skd: 'application/vnd.koan',
973 skm: 'application/vnd.koan',
974 skp: 'application/vnd.koan',
975 skt: 'application/vnd.koan',
976 sldm: 'application/vnd.ms-powerpoint.slide.macroenabled.12',
977 sldx: 'application/vnd.openxmlformats-officedocument.presentationml.slide',
978 slim: 'text/slim',
979 slm: 'text/slim',
980 sls: 'application/route-s-tsid+xml',
981 slt: 'application/vnd.epson.salt',
982 sm: 'application/vnd.stepmania.stepchart',
983 smf: 'application/vnd.stardivision.math',
984 smi: 'application/smil+xml',
985 smil: 'application/smil+xml',
986 smv: 'video/x-smv',
987 smzip: 'application/vnd.stepmania.package',
988 snd: 'audio/basic',
989 snf: 'application/x-font-snf',
990 so: 'application/octet-stream',
991 spc: 'application/x-pkcs7-certificates',
992 spdx: 'text/spdx',
993 spf: 'application/vnd.yamaha.smaf-phrase',
994 spl: 'application/x-futuresplash',
995 spot: 'text/vnd.in3d.spot',
996 spp: 'application/scvp-vp-response',
997 spq: 'application/scvp-vp-request',
998 spx: 'audio/ogg',
999 sql: 'application/x-sql',
1000 src: 'application/x-wais-source',
1001 srt: 'application/x-subrip',
1002 sru: 'application/sru+xml',
1003 srx: 'application/sparql-results+xml',
1004 ssdl: 'application/ssdl+xml',
1005 sse: 'application/vnd.kodak-descriptor',
1006 ssf: 'application/vnd.epson.ssf',
1007 ssml: 'application/ssml+xml',
1008 st: 'application/vnd.sailingtracker.track',
1009 stc: 'application/vnd.sun.xml.calc.template',
1010 std: 'application/vnd.sun.xml.draw.template',
1011 stf: 'application/vnd.wt.stf',
1012 sti: 'application/vnd.sun.xml.impress.template',
1013 stk: 'application/hyperstudio',
1014 stl: 'model/stl',
1015 stpx: 'model/step+xml',
1016 stpxz: 'model/step-xml+zip',
1017 stpz: 'model/step+zip',
1018 str: 'application/vnd.pg.format',
1019 stw: 'application/vnd.sun.xml.writer.template',
1020 styl: 'text/stylus',
1021 stylus: 'text/stylus',
1022 sub: 'text/vnd.dvb.subtitle',
1023 sus: 'application/vnd.sus-calendar',
1024 susp: 'application/vnd.sus-calendar',
1025 sv4cpio: 'application/x-sv4cpio',
1026 sv4crc: 'application/x-sv4crc',
1027 svc: 'application/vnd.dvb.service',
1028 svd: 'application/vnd.svd',
1029 svg: 'image/svg+xml',
1030 svgz: 'image/svg+xml',
1031 swa: 'application/x-director',
1032 swf: 'application/x-shockwave-flash',
1033 swi: 'application/vnd.aristanetworks.swi',
1034 swidtag: 'application/swid+xml',
1035 sxc: 'application/vnd.sun.xml.calc',
1036 sxd: 'application/vnd.sun.xml.draw',
1037 sxg: 'application/vnd.sun.xml.writer.global',
1038 sxi: 'application/vnd.sun.xml.impress',
1039 sxm: 'application/vnd.sun.xml.math',
1040 sxw: 'application/vnd.sun.xml.writer',
1041 t: 'text/troff',
1042 t3: 'application/x-t3vm-image',
1043 t38: 'image/t38',
1044 taglet: 'application/vnd.mynfc',
1045 tao: 'application/vnd.tao.intent-module-archive',
1046 tap: 'image/vnd.tencent.tap',
1047 tar: 'application/x-tar',
1048 tcap: 'application/vnd.3gpp2.tcap',
1049 tcl: 'application/x-tcl',
1050 td: 'application/urc-targetdesc+xml',
1051 teacher: 'application/vnd.smart.teacher',
1052 tei: 'application/tei+xml',
1053 teicorpus: 'application/tei+xml',
1054 tex: 'application/x-tex',
1055 texi: 'application/x-texinfo',
1056 texinfo: 'application/x-texinfo',
1057 text: 'text/plain',
1058 tfi: 'application/thraud+xml',
1059 tfm: 'application/x-tex-tfm',
1060 tfx: 'image/tiff-fx',
1061 tga: 'image/x-tga',
1062 thmx: 'application/vnd.ms-officetheme',
1063 tif: 'image/tiff',
1064 tiff: 'image/tiff',
1065 tk: 'application/x-tcl',
1066 tmo: 'application/vnd.tmobile-livetv',
1067 toml: 'application/toml',
1068 torrent: 'application/x-bittorrent',
1069 tpl: 'application/vnd.groove-tool-template',
1070 tpt: 'application/vnd.trid.tpt',
1071 tr: 'text/troff',
1072 tra: 'application/vnd.trueapp',
1073 trig: 'application/trig',
1074 trm: 'application/x-msterminal',
1075 ts: 'video/mp2t',
1076 tsd: 'application/timestamped-data',
1077 tsv: 'text/tab-separated-values',
1078 ttc: 'font/collection',
1079 ttf: 'font/ttf',
1080 ttl: 'text/turtle',
1081 ttml: 'application/ttml+xml',
1082 twd: 'application/vnd.simtech-mindmapper',
1083 twds: 'application/vnd.simtech-mindmapper',
1084 txd: 'application/vnd.genomatix.tuxedo',
1085 txf: 'application/vnd.mobius.txf',
1086 txt: 'text/plain',
1087 u32: 'application/x-authorware-bin',
1088 u8dsn: 'message/global-delivery-status',
1089 u8hdr: 'message/global-headers',
1090 u8mdn: 'message/global-disposition-notification',
1091 u8msg: 'message/global',
1092 ubj: 'application/ubjson',
1093 udeb: 'application/x-debian-package',
1094 ufd: 'application/vnd.ufdl',
1095 ufdl: 'application/vnd.ufdl',
1096 ulx: 'application/x-glulx',
1097 umj: 'application/vnd.umajin',
1098 unityweb: 'application/vnd.unity',
1099 uoml: 'application/vnd.uoml+xml',
1100 uri: 'text/uri-list',
1101 uris: 'text/uri-list',
1102 urls: 'text/uri-list',
1103 usdz: 'model/vnd.usdz+zip',
1104 ustar: 'application/x-ustar',
1105 utz: 'application/vnd.uiq.theme',
1106 uu: 'text/x-uuencode',
1107 uva: 'audio/vnd.dece.audio',
1108 uvd: 'application/vnd.dece.data',
1109 uvf: 'application/vnd.dece.data',
1110 uvg: 'image/vnd.dece.graphic',
1111 uvh: 'video/vnd.dece.hd',
1112 uvi: 'image/vnd.dece.graphic',
1113 uvm: 'video/vnd.dece.mobile',
1114 uvp: 'video/vnd.dece.pd',
1115 uvs: 'video/vnd.dece.sd',
1116 uvt: 'application/vnd.dece.ttml+xml',
1117 uvu: 'video/vnd.uvvu.mp4',
1118 uvv: 'video/vnd.dece.video',
1119 uvva: 'audio/vnd.dece.audio',
1120 uvvd: 'application/vnd.dece.data',
1121 uvvf: 'application/vnd.dece.data',
1122 uvvg: 'image/vnd.dece.graphic',
1123 uvvh: 'video/vnd.dece.hd',
1124 uvvi: 'image/vnd.dece.graphic',
1125 uvvm: 'video/vnd.dece.mobile',
1126 uvvp: 'video/vnd.dece.pd',
1127 uvvs: 'video/vnd.dece.sd',
1128 uvvt: 'application/vnd.dece.ttml+xml',
1129 uvvu: 'video/vnd.uvvu.mp4',
1130 uvvv: 'video/vnd.dece.video',
1131 uvvx: 'application/vnd.dece.unspecified',
1132 uvvz: 'application/vnd.dece.zip',
1133 uvx: 'application/vnd.dece.unspecified',
1134 uvz: 'application/vnd.dece.zip',
1135 vbox: 'application/x-virtualbox-vbox',
1136 'vbox-extpack': 'application/x-virtualbox-vbox-extpack',
1137 vcard: 'text/vcard',
1138 vcd: 'application/x-cdlink',
1139 vcf: 'text/x-vcard',
1140 vcg: 'application/vnd.groove-vcard',
1141 vcs: 'text/x-vcalendar',
1142 vcx: 'application/vnd.vcx',
1143 vdi: 'application/x-virtualbox-vdi',
1144 vds: 'model/vnd.sap.vds',
1145 vhd: 'application/x-virtualbox-vhd',
1146 vis: 'application/vnd.visionary',
1147 viv: 'video/vnd.vivo',
1148 vmdk: 'application/x-virtualbox-vmdk',
1149 vob: 'video/x-ms-vob',
1150 vor: 'application/vnd.stardivision.writer',
1151 vox: 'application/x-authorware-bin',
1152 vrml: 'model/vrml',
1153 vsd: 'application/vnd.visio',
1154 vsf: 'application/vnd.vsf',
1155 vss: 'application/vnd.visio',
1156 vst: 'application/vnd.visio',
1157 vsw: 'application/vnd.visio',
1158 vtf: 'image/vnd.valve.source.texture',
1159 vtt: 'text/vtt',
1160 vtu: 'model/vnd.vtu',
1161 vxml: 'application/voicexml+xml',
1162 w3d: 'application/x-director',
1163 wad: 'application/x-doom',
1164 wadl: 'application/vnd.sun.wadl+xml',
1165 war: 'application/java-archive',
1166 wasm: 'application/wasm',
1167 wav: 'audio/x-wav',
1168 wax: 'audio/x-ms-wax',
1169 wbmp: 'image/vnd.wap.wbmp',
1170 wbs: 'application/vnd.criticaltools.wbs+xml',
1171 wbxml: 'application/vnd.wap.wbxml',
1172 wcm: 'application/vnd.ms-works',
1173 wdb: 'application/vnd.ms-works',
1174 wdp: 'image/vnd.ms-photo',
1175 weba: 'audio/webm',
1176 webapp: 'application/x-web-app-manifest+json',
1177 webm: 'video/webm',
1178 webmanifest: 'application/manifest+json',
1179 webp: 'image/webp',
1180 wg: 'application/vnd.pmi.widget',
1181 wgt: 'application/widget',
1182 wks: 'application/vnd.ms-works',
1183 wm: 'video/x-ms-wm',
1184 wma: 'audio/x-ms-wma',
1185 wmd: 'application/x-ms-wmd',
1186 wmf: 'image/wmf',
1187 wml: 'text/vnd.wap.wml',
1188 wmlc: 'application/vnd.wap.wmlc',
1189 wmls: 'text/vnd.wap.wmlscript',
1190 wmlsc: 'application/vnd.wap.wmlscriptc',
1191 wmv: 'video/x-ms-wmv',
1192 wmx: 'video/x-ms-wmx',
1193 wmz: 'application/x-msmetafile',
1194 woff: 'font/woff',
1195 woff2: 'font/woff2',
1196 wpd: 'application/vnd.wordperfect',
1197 wpl: 'application/vnd.ms-wpl',
1198 wps: 'application/vnd.ms-works',
1199 wqd: 'application/vnd.wqd',
1200 wri: 'application/x-mswrite',
1201 wrl: 'model/vrml',
1202 wsc: 'message/vnd.wfa.wsc',
1203 wsdl: 'application/wsdl+xml',
1204 wspolicy: 'application/wspolicy+xml',
1205 wtb: 'application/vnd.webturbo',
1206 wvx: 'video/x-ms-wvx',
1207 x32: 'application/x-authorware-bin',
1208 x3d: 'model/x3d+xml',
1209 x3db: 'model/x3d+fastinfoset',
1210 x3dbz: 'model/x3d+binary',
1211 x3dv: 'model/x3d-vrml',
1212 x3dvz: 'model/x3d+vrml',
1213 x3dz: 'model/x3d+xml',
1214 x_b: 'model/vnd.parasolid.transmit.binary',
1215 x_t: 'model/vnd.parasolid.transmit.text',
1216 xaml: 'application/xaml+xml',
1217 xap: 'application/x-silverlight-app',
1218 xar: 'application/vnd.xara',
1219 xav: 'application/xcap-att+xml',
1220 xbap: 'application/x-ms-xbap',
1221 xbd: 'application/vnd.fujixerox.docuworks.binder',
1222 xbm: 'image/x-xbitmap',
1223 xca: 'application/xcap-caps+xml',
1224 xcs: 'application/calendar+xml',
1225 xdf: 'application/xcap-diff+xml',
1226 xdm: 'application/vnd.syncml.dm+xml',
1227 xdp: 'application/vnd.adobe.xdp+xml',
1228 xdssc: 'application/dssc+xml',
1229 xdw: 'application/vnd.fujixerox.docuworks',
1230 xel: 'application/xcap-el+xml',
1231 xenc: 'application/xenc+xml',
1232 xer: 'application/patch-ops-error+xml',
1233 xfdf: 'application/vnd.adobe.xfdf',
1234 xfdl: 'application/vnd.xfdl',
1235 xht: 'application/xhtml+xml',
1236 xhtml: 'application/xhtml+xml',
1237 xhvml: 'application/xv+xml',
1238 xif: 'image/vnd.xiff',
1239 xla: 'application/vnd.ms-excel',
1240 xlam: 'application/vnd.ms-excel.addin.macroenabled.12',
1241 xlc: 'application/vnd.ms-excel',
1242 xlf: 'application/xliff+xml',
1243 xlm: 'application/vnd.ms-excel',
1244 xls: 'application/vnd.ms-excel',
1245 xlsb: 'application/vnd.ms-excel.sheet.binary.macroenabled.12',
1246 xlsm: 'application/vnd.ms-excel.sheet.macroenabled.12',
1247 xlsx: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
1248 xlt: 'application/vnd.ms-excel',
1249 xltm: 'application/vnd.ms-excel.template.macroenabled.12',
1250 xltx: 'application/vnd.openxmlformats-officedocument.spreadsheetml.template',
1251 xlw: 'application/vnd.ms-excel',
1252 xm: 'audio/xm',
1253 xml: 'text/xml',
1254 xns: 'application/xcap-ns+xml',
1255 xo: 'application/vnd.olpc-sugar',
1256 xop: 'application/xop+xml',
1257 xpi: 'application/x-xpinstall',
1258 xpl: 'application/xproc+xml',
1259 xpm: 'image/x-xpixmap',
1260 xpr: 'application/vnd.is-xpr',
1261 xps: 'application/vnd.ms-xpsdocument',
1262 xpw: 'application/vnd.intercon.formnet',
1263 xpx: 'application/vnd.intercon.formnet',
1264 xsd: 'application/xml',
1265 xsl: 'application/xslt+xml',
1266 xslt: 'application/xslt+xml',
1267 xsm: 'application/vnd.syncml+xml',
1268 xspf: 'application/xspf+xml',
1269 xul: 'application/vnd.mozilla.xul+xml',
1270 xvm: 'application/xv+xml',
1271 xvml: 'application/xv+xml',
1272 xwd: 'image/x-xwindowdump',
1273 xyz: 'chemical/x-xyz',
1274 xz: 'application/x-xz',
1275 yaml: 'text/yaml',
1276 yang: 'application/yang',
1277 yin: 'application/yin+xml',
1278 yml: 'text/yaml',
1279 ymp: 'text/x-suse-ymp',
1280 z1: 'application/x-zmachine',
1281 z2: 'application/x-zmachine',
1282 z3: 'application/x-zmachine',
1283 z4: 'application/x-zmachine',
1284 z5: 'application/x-zmachine',
1285 z6: 'application/x-zmachine',
1286 z7: 'application/x-zmachine',
1287 z8: 'application/x-zmachine',
1288 zaz: 'application/vnd.zzazz.deck+xml',
1289 zip: 'application/zip',
1290 zir: 'application/vnd.zul',
1291 zirz: 'application/vnd.zul',
1292 zmm: 'application/vnd.handheld-entertainment+xml',
1293}