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