@eyepop.ai/eyepop 3.25.0 → 3.25.1

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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../node_modules/mime-db/db.json","../../../node_modules/mime-db/index.js","../../../node_modules/mime-types/index.js","../index.ts","../options.ts","../types.ts","../shims/http_client.ts","../semaphore.ts","../endpoint.ts","../shims/browser_session.ts","../camera.ts","../worker/worker_types.ts","../compute/compute_session.ts","../streaming.ts","../worker/webrtc_whip.ts","../worker/webrtc_base.ts","../worker/jobs.ts","../shims/local_file.ts","../worker/worker_options.ts","../worker/session_backend.ts","../shims/websockets.ts","../worker/pipeline_backend.ts","../worker/worker_endpoint.ts","../data/data_endpoint.ts","../data/data_types.ts","../data/jobs.ts","../depth.ts","../point_cloud.ts","../worker/webrtc_whep.ts"],"sourcesContent":["{\n \"application/1d-interleaved-parityfec\": {\n \"source\": \"iana\"\n },\n \"application/3gpdash-qoe-report+xml\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true\n },\n \"application/3gpp-ims+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/3gpphal+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/3gpphalforms+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/a2l\": {\n \"source\": \"iana\"\n },\n \"application/ace+cbor\": {\n \"source\": \"iana\"\n },\n \"application/activemessage\": {\n \"source\": \"iana\"\n },\n \"application/activity+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/alto-costmap+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/alto-costmapfilter+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/alto-directory+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/alto-endpointcost+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/alto-endpointcostparams+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/alto-endpointprop+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/alto-endpointpropparams+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/alto-error+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/alto-networkmap+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/alto-networkmapfilter+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/alto-updatestreamcontrol+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/alto-updatestreamparams+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/aml\": {\n \"source\": \"iana\"\n },\n \"application/andrew-inset\": {\n \"source\": \"iana\",\n \"extensions\": [\"ez\"]\n },\n \"application/applefile\": {\n \"source\": \"iana\"\n },\n \"application/applixware\": {\n \"source\": \"apache\",\n \"extensions\": [\"aw\"]\n },\n \"application/at+jwt\": {\n \"source\": \"iana\"\n },\n \"application/atf\": {\n \"source\": \"iana\"\n },\n \"application/atfx\": {\n \"source\": \"iana\"\n },\n \"application/atom+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"atom\"]\n },\n \"application/atomcat+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"atomcat\"]\n },\n \"application/atomdeleted+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"atomdeleted\"]\n },\n \"application/atomicmail\": {\n \"source\": \"iana\"\n },\n \"application/atomsvc+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"atomsvc\"]\n },\n \"application/atsc-dwd+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"dwd\"]\n },\n \"application/atsc-dynamic-event-message\": {\n \"source\": \"iana\"\n },\n \"application/atsc-held+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"held\"]\n },\n \"application/atsc-rdt+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/atsc-rsat+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"rsat\"]\n },\n \"application/atxml\": {\n \"source\": \"iana\"\n },\n \"application/auth-policy+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/bacnet-xdd+zip\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"application/batch-smtp\": {\n \"source\": \"iana\"\n },\n \"application/bdoc\": {\n \"compressible\": false,\n \"extensions\": [\"bdoc\"]\n },\n \"application/beep+xml\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true\n },\n \"application/calendar+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/calendar+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"xcs\"]\n },\n \"application/call-completion\": {\n \"source\": \"iana\"\n },\n \"application/cals-1840\": {\n \"source\": \"iana\"\n },\n \"application/captive+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/cbor\": {\n \"source\": \"iana\"\n },\n \"application/cbor-seq\": {\n \"source\": \"iana\"\n },\n \"application/cccex\": {\n \"source\": \"iana\"\n },\n \"application/ccmp+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/ccxml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"ccxml\"]\n },\n \"application/cdfx+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"cdfx\"]\n },\n \"application/cdmi-capability\": {\n \"source\": \"iana\",\n \"extensions\": [\"cdmia\"]\n },\n \"application/cdmi-container\": {\n \"source\": \"iana\",\n \"extensions\": [\"cdmic\"]\n },\n \"application/cdmi-domain\": {\n \"source\": \"iana\",\n \"extensions\": [\"cdmid\"]\n },\n \"application/cdmi-object\": {\n \"source\": \"iana\",\n \"extensions\": [\"cdmio\"]\n },\n \"application/cdmi-queue\": {\n \"source\": \"iana\",\n \"extensions\": [\"cdmiq\"]\n },\n \"application/cdni\": {\n \"source\": \"iana\"\n },\n \"application/cea\": {\n \"source\": \"iana\"\n },\n \"application/cea-2018+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/cellml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/cfw\": {\n \"source\": \"iana\"\n },\n \"application/city+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/clr\": {\n \"source\": \"iana\"\n },\n \"application/clue+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/clue_info+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/cms\": {\n \"source\": \"iana\"\n },\n \"application/cnrp+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/coap-group+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/coap-payload\": {\n \"source\": \"iana\"\n },\n \"application/commonground\": {\n \"source\": \"iana\"\n },\n \"application/conference-info+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/cose\": {\n \"source\": \"iana\"\n },\n \"application/cose-key\": {\n \"source\": \"iana\"\n },\n \"application/cose-key-set\": {\n \"source\": \"iana\"\n },\n \"application/cpl+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"cpl\"]\n },\n \"application/csrattrs\": {\n \"source\": \"iana\"\n },\n \"application/csta+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/cstadata+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/csvm+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/cu-seeme\": {\n \"source\": \"apache\",\n \"extensions\": [\"cu\"]\n },\n \"application/cwt\": {\n \"source\": \"iana\"\n },\n \"application/cybercash\": {\n \"source\": \"iana\"\n },\n \"application/dart\": {\n \"compressible\": true\n },\n \"application/dash+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"mpd\"]\n },\n \"application/dash-patch+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"mpp\"]\n },\n \"application/dashdelta\": {\n \"source\": \"iana\"\n },\n \"application/davmount+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"davmount\"]\n },\n \"application/dca-rft\": {\n \"source\": \"iana\"\n },\n \"application/dcd\": {\n \"source\": \"iana\"\n },\n \"application/dec-dx\": {\n \"source\": \"iana\"\n },\n \"application/dialog-info+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/dicom\": {\n \"source\": \"iana\"\n },\n \"application/dicom+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/dicom+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/dii\": {\n \"source\": \"iana\"\n },\n \"application/dit\": {\n \"source\": \"iana\"\n },\n \"application/dns\": {\n \"source\": \"iana\"\n },\n \"application/dns+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/dns-message\": {\n \"source\": \"iana\"\n },\n \"application/docbook+xml\": {\n \"source\": \"apache\",\n \"compressible\": true,\n \"extensions\": [\"dbk\"]\n },\n \"application/dots+cbor\": {\n \"source\": \"iana\"\n },\n \"application/dskpp+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/dssc+der\": {\n \"source\": \"iana\",\n \"extensions\": [\"dssc\"]\n },\n \"application/dssc+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"xdssc\"]\n },\n \"application/dvcs\": {\n \"source\": \"iana\"\n },\n \"application/ecmascript\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"es\",\"ecma\"]\n },\n \"application/edi-consent\": {\n \"source\": \"iana\"\n },\n \"application/edi-x12\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"application/edifact\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"application/efi\": {\n \"source\": \"iana\"\n },\n \"application/elm+json\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true\n },\n \"application/elm+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/emergencycalldata.cap+xml\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true\n },\n \"application/emergencycalldata.comment+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/emergencycalldata.control+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/emergencycalldata.deviceinfo+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/emergencycalldata.ecall.msd\": {\n \"source\": \"iana\"\n },\n \"application/emergencycalldata.providerinfo+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/emergencycalldata.serviceinfo+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/emergencycalldata.subscriberinfo+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/emergencycalldata.veds+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/emma+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"emma\"]\n },\n \"application/emotionml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"emotionml\"]\n },\n \"application/encaprtp\": {\n \"source\": \"iana\"\n },\n \"application/epp+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/epub+zip\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"epub\"]\n },\n \"application/eshop\": {\n \"source\": \"iana\"\n },\n \"application/exi\": {\n \"source\": \"iana\",\n \"extensions\": [\"exi\"]\n },\n \"application/expect-ct-report+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/express\": {\n \"source\": \"iana\",\n \"extensions\": [\"exp\"]\n },\n \"application/fastinfoset\": {\n \"source\": \"iana\"\n },\n \"application/fastsoap\": {\n \"source\": \"iana\"\n },\n \"application/fdt+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"fdt\"]\n },\n \"application/fhir+json\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true\n },\n \"application/fhir+xml\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true\n },\n \"application/fido.trusted-apps+json\": {\n \"compressible\": true\n },\n \"application/fits\": {\n \"source\": \"iana\"\n },\n \"application/flexfec\": {\n \"source\": \"iana\"\n },\n \"application/font-sfnt\": {\n \"source\": \"iana\"\n },\n \"application/font-tdpfr\": {\n \"source\": \"iana\",\n \"extensions\": [\"pfr\"]\n },\n \"application/font-woff\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"application/framework-attributes+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/geo+json\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"geojson\"]\n },\n \"application/geo+json-seq\": {\n \"source\": \"iana\"\n },\n \"application/geopackage+sqlite3\": {\n \"source\": \"iana\"\n },\n \"application/geoxacml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/gltf-buffer\": {\n \"source\": \"iana\"\n },\n \"application/gml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"gml\"]\n },\n \"application/gpx+xml\": {\n \"source\": \"apache\",\n \"compressible\": true,\n \"extensions\": [\"gpx\"]\n },\n \"application/gxf\": {\n \"source\": \"apache\",\n \"extensions\": [\"gxf\"]\n },\n \"application/gzip\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"gz\"]\n },\n \"application/h224\": {\n \"source\": \"iana\"\n },\n \"application/held+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/hjson\": {\n \"extensions\": [\"hjson\"]\n },\n \"application/http\": {\n \"source\": \"iana\"\n },\n \"application/hyperstudio\": {\n \"source\": \"iana\",\n \"extensions\": [\"stk\"]\n },\n \"application/ibe-key-request+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/ibe-pkg-reply+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/ibe-pp-data\": {\n \"source\": \"iana\"\n },\n \"application/iges\": {\n \"source\": \"iana\"\n },\n \"application/im-iscomposing+xml\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true\n },\n \"application/index\": {\n \"source\": \"iana\"\n },\n \"application/index.cmd\": {\n \"source\": \"iana\"\n },\n \"application/index.obj\": {\n \"source\": \"iana\"\n },\n \"application/index.response\": {\n \"source\": \"iana\"\n },\n \"application/index.vnd\": {\n \"source\": \"iana\"\n },\n \"application/inkml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"ink\",\"inkml\"]\n },\n \"application/iotp\": {\n \"source\": \"iana\"\n },\n \"application/ipfix\": {\n \"source\": \"iana\",\n \"extensions\": [\"ipfix\"]\n },\n \"application/ipp\": {\n \"source\": \"iana\"\n },\n \"application/isup\": {\n \"source\": \"iana\"\n },\n \"application/its+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"its\"]\n },\n \"application/java-archive\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"jar\",\"war\",\"ear\"]\n },\n \"application/java-serialized-object\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"ser\"]\n },\n \"application/java-vm\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"class\"]\n },\n \"application/javascript\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true,\n \"extensions\": [\"js\",\"mjs\"]\n },\n \"application/jf2feed+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/jose\": {\n \"source\": \"iana\"\n },\n \"application/jose+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/jrd+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/jscalendar+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/json\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true,\n \"extensions\": [\"json\",\"map\"]\n },\n \"application/json-patch+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/json-seq\": {\n \"source\": \"iana\"\n },\n \"application/json5\": {\n \"extensions\": [\"json5\"]\n },\n \"application/jsonml+json\": {\n \"source\": \"apache\",\n \"compressible\": true,\n \"extensions\": [\"jsonml\"]\n },\n \"application/jwk+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/jwk-set+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/jwt\": {\n \"source\": \"iana\"\n },\n \"application/kpml-request+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/kpml-response+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/ld+json\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"jsonld\"]\n },\n \"application/lgr+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"lgr\"]\n },\n \"application/link-format\": {\n \"source\": \"iana\"\n },\n \"application/load-control+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/lost+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"lostxml\"]\n },\n \"application/lostsync+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/lpf+zip\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"application/lxf\": {\n \"source\": \"iana\"\n },\n \"application/mac-binhex40\": {\n \"source\": \"iana\",\n \"extensions\": [\"hqx\"]\n },\n \"application/mac-compactpro\": {\n \"source\": \"apache\",\n \"extensions\": [\"cpt\"]\n },\n \"application/macwriteii\": {\n \"source\": \"iana\"\n },\n \"application/mads+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"mads\"]\n },\n \"application/manifest+json\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true,\n \"extensions\": [\"webmanifest\"]\n },\n \"application/marc\": {\n \"source\": \"iana\",\n \"extensions\": [\"mrc\"]\n },\n \"application/marcxml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"mrcx\"]\n },\n \"application/mathematica\": {\n \"source\": \"iana\",\n \"extensions\": [\"ma\",\"nb\",\"mb\"]\n },\n \"application/mathml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"mathml\"]\n },\n \"application/mathml-content+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/mathml-presentation+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/mbms-associated-procedure-description+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/mbms-deregister+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/mbms-envelope+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/mbms-msk+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/mbms-msk-response+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/mbms-protection-description+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/mbms-reception-report+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/mbms-register+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/mbms-register-response+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/mbms-schedule+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/mbms-user-service-description+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/mbox\": {\n \"source\": \"iana\",\n \"extensions\": [\"mbox\"]\n },\n \"application/media-policy-dataset+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"mpf\"]\n },\n \"application/media_control+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/mediaservercontrol+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"mscml\"]\n },\n \"application/merge-patch+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/metalink+xml\": {\n \"source\": \"apache\",\n \"compressible\": true,\n \"extensions\": [\"metalink\"]\n },\n \"application/metalink4+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"meta4\"]\n },\n \"application/mets+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"mets\"]\n },\n \"application/mf4\": {\n \"source\": \"iana\"\n },\n \"application/mikey\": {\n \"source\": \"iana\"\n },\n \"application/mipc\": {\n \"source\": \"iana\"\n },\n \"application/missing-blocks+cbor-seq\": {\n \"source\": \"iana\"\n },\n \"application/mmt-aei+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"maei\"]\n },\n \"application/mmt-usd+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"musd\"]\n },\n \"application/mods+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"mods\"]\n },\n \"application/moss-keys\": {\n \"source\": \"iana\"\n },\n \"application/moss-signature\": {\n \"source\": \"iana\"\n },\n \"application/mosskey-data\": {\n \"source\": \"iana\"\n },\n \"application/mosskey-request\": {\n \"source\": \"iana\"\n },\n \"application/mp21\": {\n \"source\": \"iana\",\n \"extensions\": [\"m21\",\"mp21\"]\n },\n \"application/mp4\": {\n \"source\": \"iana\",\n \"extensions\": [\"mp4s\",\"m4p\"]\n },\n \"application/mpeg4-generic\": {\n \"source\": \"iana\"\n },\n \"application/mpeg4-iod\": {\n \"source\": \"iana\"\n },\n \"application/mpeg4-iod-xmt\": {\n \"source\": \"iana\"\n },\n \"application/mrb-consumer+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/mrb-publish+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/msc-ivr+xml\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true\n },\n \"application/msc-mixer+xml\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true\n },\n \"application/msword\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"doc\",\"dot\"]\n },\n \"application/mud+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/multipart-core\": {\n \"source\": \"iana\"\n },\n \"application/mxf\": {\n \"source\": \"iana\",\n \"extensions\": [\"mxf\"]\n },\n \"application/n-quads\": {\n \"source\": \"iana\",\n \"extensions\": [\"nq\"]\n },\n \"application/n-triples\": {\n \"source\": \"iana\",\n \"extensions\": [\"nt\"]\n },\n \"application/nasdata\": {\n \"source\": \"iana\"\n },\n \"application/news-checkgroups\": {\n \"source\": \"iana\",\n \"charset\": \"US-ASCII\"\n },\n \"application/news-groupinfo\": {\n \"source\": \"iana\",\n \"charset\": \"US-ASCII\"\n },\n \"application/news-transmission\": {\n \"source\": \"iana\"\n },\n \"application/nlsml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/node\": {\n \"source\": \"iana\",\n \"extensions\": [\"cjs\"]\n },\n \"application/nss\": {\n \"source\": \"iana\"\n },\n \"application/oauth-authz-req+jwt\": {\n \"source\": \"iana\"\n },\n \"application/oblivious-dns-message\": {\n \"source\": \"iana\"\n },\n \"application/ocsp-request\": {\n \"source\": \"iana\"\n },\n \"application/ocsp-response\": {\n \"source\": \"iana\"\n },\n \"application/octet-stream\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"bin\",\"dms\",\"lrf\",\"mar\",\"so\",\"dist\",\"distz\",\"pkg\",\"bpk\",\"dump\",\"elc\",\"deploy\",\"exe\",\"dll\",\"deb\",\"dmg\",\"iso\",\"img\",\"msi\",\"msp\",\"msm\",\"buffer\"]\n },\n \"application/oda\": {\n \"source\": \"iana\",\n \"extensions\": [\"oda\"]\n },\n \"application/odm+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/odx\": {\n \"source\": \"iana\"\n },\n \"application/oebps-package+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"opf\"]\n },\n \"application/ogg\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"ogx\"]\n },\n \"application/omdoc+xml\": {\n \"source\": \"apache\",\n \"compressible\": true,\n \"extensions\": [\"omdoc\"]\n },\n \"application/onenote\": {\n \"source\": \"apache\",\n \"extensions\": [\"onetoc\",\"onetoc2\",\"onetmp\",\"onepkg\"]\n },\n \"application/opc-nodeset+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/oscore\": {\n \"source\": \"iana\"\n },\n \"application/oxps\": {\n \"source\": \"iana\",\n \"extensions\": [\"oxps\"]\n },\n \"application/p21\": {\n \"source\": \"iana\"\n },\n \"application/p21+zip\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"application/p2p-overlay+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"relo\"]\n },\n \"application/parityfec\": {\n \"source\": \"iana\"\n },\n \"application/passport\": {\n \"source\": \"iana\"\n },\n \"application/patch-ops-error+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"xer\"]\n },\n \"application/pdf\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"pdf\"]\n },\n \"application/pdx\": {\n \"source\": \"iana\"\n },\n \"application/pem-certificate-chain\": {\n \"source\": \"iana\"\n },\n \"application/pgp-encrypted\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"pgp\"]\n },\n \"application/pgp-keys\": {\n \"source\": \"iana\",\n \"extensions\": [\"asc\"]\n },\n \"application/pgp-signature\": {\n \"source\": \"iana\",\n \"extensions\": [\"asc\",\"sig\"]\n },\n \"application/pics-rules\": {\n \"source\": \"apache\",\n \"extensions\": [\"prf\"]\n },\n \"application/pidf+xml\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true\n },\n \"application/pidf-diff+xml\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true\n },\n \"application/pkcs10\": {\n \"source\": \"iana\",\n \"extensions\": [\"p10\"]\n },\n \"application/pkcs12\": {\n \"source\": \"iana\"\n },\n \"application/pkcs7-mime\": {\n \"source\": \"iana\",\n \"extensions\": [\"p7m\",\"p7c\"]\n },\n \"application/pkcs7-signature\": {\n \"source\": \"iana\",\n \"extensions\": [\"p7s\"]\n },\n \"application/pkcs8\": {\n \"source\": \"iana\",\n \"extensions\": [\"p8\"]\n },\n \"application/pkcs8-encrypted\": {\n \"source\": \"iana\"\n },\n \"application/pkix-attr-cert\": {\n \"source\": \"iana\",\n \"extensions\": [\"ac\"]\n },\n \"application/pkix-cert\": {\n \"source\": \"iana\",\n \"extensions\": [\"cer\"]\n },\n \"application/pkix-crl\": {\n \"source\": \"iana\",\n \"extensions\": [\"crl\"]\n },\n \"application/pkix-pkipath\": {\n \"source\": \"iana\",\n \"extensions\": [\"pkipath\"]\n },\n \"application/pkixcmp\": {\n \"source\": \"iana\",\n \"extensions\": [\"pki\"]\n },\n \"application/pls+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"pls\"]\n },\n \"application/poc-settings+xml\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true\n },\n \"application/postscript\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"ai\",\"eps\",\"ps\"]\n },\n \"application/ppsp-tracker+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/problem+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/problem+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/provenance+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"provx\"]\n },\n \"application/prs.alvestrand.titrax-sheet\": {\n \"source\": \"iana\"\n },\n \"application/prs.cww\": {\n \"source\": \"iana\",\n \"extensions\": [\"cww\"]\n },\n \"application/prs.cyn\": {\n \"source\": \"iana\",\n \"charset\": \"7-BIT\"\n },\n \"application/prs.hpub+zip\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"application/prs.nprend\": {\n \"source\": \"iana\"\n },\n \"application/prs.plucker\": {\n \"source\": \"iana\"\n },\n \"application/prs.rdf-xml-crypt\": {\n \"source\": \"iana\"\n },\n \"application/prs.xsf+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/pskc+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"pskcxml\"]\n },\n \"application/pvd+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/qsig\": {\n \"source\": \"iana\"\n },\n \"application/raml+yaml\": {\n \"compressible\": true,\n \"extensions\": [\"raml\"]\n },\n \"application/raptorfec\": {\n \"source\": \"iana\"\n },\n \"application/rdap+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/rdf+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"rdf\",\"owl\"]\n },\n \"application/reginfo+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"rif\"]\n },\n \"application/relax-ng-compact-syntax\": {\n \"source\": \"iana\",\n \"extensions\": [\"rnc\"]\n },\n \"application/remote-printing\": {\n \"source\": \"iana\"\n },\n \"application/reputon+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/resource-lists+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"rl\"]\n },\n \"application/resource-lists-diff+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"rld\"]\n },\n \"application/rfc+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/riscos\": {\n \"source\": \"iana\"\n },\n \"application/rlmi+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/rls-services+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"rs\"]\n },\n \"application/route-apd+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"rapd\"]\n },\n \"application/route-s-tsid+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"sls\"]\n },\n \"application/route-usd+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"rusd\"]\n },\n \"application/rpki-ghostbusters\": {\n \"source\": \"iana\",\n \"extensions\": [\"gbr\"]\n },\n \"application/rpki-manifest\": {\n \"source\": \"iana\",\n \"extensions\": [\"mft\"]\n },\n \"application/rpki-publication\": {\n \"source\": \"iana\"\n },\n \"application/rpki-roa\": {\n \"source\": \"iana\",\n \"extensions\": [\"roa\"]\n },\n \"application/rpki-updown\": {\n \"source\": \"iana\"\n },\n \"application/rsd+xml\": {\n \"source\": \"apache\",\n \"compressible\": true,\n \"extensions\": [\"rsd\"]\n },\n \"application/rss+xml\": {\n \"source\": \"apache\",\n \"compressible\": true,\n \"extensions\": [\"rss\"]\n },\n \"application/rtf\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"rtf\"]\n },\n \"application/rtploopback\": {\n \"source\": \"iana\"\n },\n \"application/rtx\": {\n \"source\": \"iana\"\n },\n \"application/samlassertion+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/samlmetadata+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/sarif+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/sarif-external-properties+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/sbe\": {\n \"source\": \"iana\"\n },\n \"application/sbml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"sbml\"]\n },\n \"application/scaip+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/scim+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/scvp-cv-request\": {\n \"source\": \"iana\",\n \"extensions\": [\"scq\"]\n },\n \"application/scvp-cv-response\": {\n \"source\": \"iana\",\n \"extensions\": [\"scs\"]\n },\n \"application/scvp-vp-request\": {\n \"source\": \"iana\",\n \"extensions\": [\"spq\"]\n },\n \"application/scvp-vp-response\": {\n \"source\": \"iana\",\n \"extensions\": [\"spp\"]\n },\n \"application/sdp\": {\n \"source\": \"iana\",\n \"extensions\": [\"sdp\"]\n },\n \"application/secevent+jwt\": {\n \"source\": \"iana\"\n },\n \"application/senml+cbor\": {\n \"source\": \"iana\"\n },\n \"application/senml+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/senml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"senmlx\"]\n },\n \"application/senml-etch+cbor\": {\n \"source\": \"iana\"\n },\n \"application/senml-etch+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/senml-exi\": {\n \"source\": \"iana\"\n },\n \"application/sensml+cbor\": {\n \"source\": \"iana\"\n },\n \"application/sensml+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/sensml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"sensmlx\"]\n },\n \"application/sensml-exi\": {\n \"source\": \"iana\"\n },\n \"application/sep+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/sep-exi\": {\n \"source\": \"iana\"\n },\n \"application/session-info\": {\n \"source\": \"iana\"\n },\n \"application/set-payment\": {\n \"source\": \"iana\"\n },\n \"application/set-payment-initiation\": {\n \"source\": \"iana\",\n \"extensions\": [\"setpay\"]\n },\n \"application/set-registration\": {\n \"source\": \"iana\"\n },\n \"application/set-registration-initiation\": {\n \"source\": \"iana\",\n \"extensions\": [\"setreg\"]\n },\n \"application/sgml\": {\n \"source\": \"iana\"\n },\n \"application/sgml-open-catalog\": {\n \"source\": \"iana\"\n },\n \"application/shf+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"shf\"]\n },\n \"application/sieve\": {\n \"source\": \"iana\",\n \"extensions\": [\"siv\",\"sieve\"]\n },\n \"application/simple-filter+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/simple-message-summary\": {\n \"source\": \"iana\"\n },\n \"application/simplesymbolcontainer\": {\n \"source\": \"iana\"\n },\n \"application/sipc\": {\n \"source\": \"iana\"\n },\n \"application/slate\": {\n \"source\": \"iana\"\n },\n \"application/smil\": {\n \"source\": \"iana\"\n },\n \"application/smil+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"smi\",\"smil\"]\n },\n \"application/smpte336m\": {\n \"source\": \"iana\"\n },\n \"application/soap+fastinfoset\": {\n \"source\": \"iana\"\n },\n \"application/soap+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/sparql-query\": {\n \"source\": \"iana\",\n \"extensions\": [\"rq\"]\n },\n \"application/sparql-results+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"srx\"]\n },\n \"application/spdx+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/spirits-event+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/sql\": {\n \"source\": \"iana\"\n },\n \"application/srgs\": {\n \"source\": \"iana\",\n \"extensions\": [\"gram\"]\n },\n \"application/srgs+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"grxml\"]\n },\n \"application/sru+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"sru\"]\n },\n \"application/ssdl+xml\": {\n \"source\": \"apache\",\n \"compressible\": true,\n \"extensions\": [\"ssdl\"]\n },\n \"application/ssml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"ssml\"]\n },\n \"application/stix+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/swid+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"swidtag\"]\n },\n \"application/tamp-apex-update\": {\n \"source\": \"iana\"\n },\n \"application/tamp-apex-update-confirm\": {\n \"source\": \"iana\"\n },\n \"application/tamp-community-update\": {\n \"source\": \"iana\"\n },\n \"application/tamp-community-update-confirm\": {\n \"source\": \"iana\"\n },\n \"application/tamp-error\": {\n \"source\": \"iana\"\n },\n \"application/tamp-sequence-adjust\": {\n \"source\": \"iana\"\n },\n \"application/tamp-sequence-adjust-confirm\": {\n \"source\": \"iana\"\n },\n \"application/tamp-status-query\": {\n \"source\": \"iana\"\n },\n \"application/tamp-status-response\": {\n \"source\": \"iana\"\n },\n \"application/tamp-update\": {\n \"source\": \"iana\"\n },\n \"application/tamp-update-confirm\": {\n \"source\": \"iana\"\n },\n \"application/tar\": {\n \"compressible\": true\n },\n \"application/taxii+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/td+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/tei+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"tei\",\"teicorpus\"]\n },\n \"application/tetra_isi\": {\n \"source\": \"iana\"\n },\n \"application/thraud+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"tfi\"]\n },\n \"application/timestamp-query\": {\n \"source\": \"iana\"\n },\n \"application/timestamp-reply\": {\n \"source\": \"iana\"\n },\n \"application/timestamped-data\": {\n \"source\": \"iana\",\n \"extensions\": [\"tsd\"]\n },\n \"application/tlsrpt+gzip\": {\n \"source\": \"iana\"\n },\n \"application/tlsrpt+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/tnauthlist\": {\n \"source\": \"iana\"\n },\n \"application/token-introspection+jwt\": {\n \"source\": \"iana\"\n },\n \"application/toml\": {\n \"compressible\": true,\n \"extensions\": [\"toml\"]\n },\n \"application/trickle-ice-sdpfrag\": {\n \"source\": \"iana\"\n },\n \"application/trig\": {\n \"source\": \"iana\",\n \"extensions\": [\"trig\"]\n },\n \"application/ttml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"ttml\"]\n },\n \"application/tve-trigger\": {\n \"source\": \"iana\"\n },\n \"application/tzif\": {\n \"source\": \"iana\"\n },\n \"application/tzif-leap\": {\n \"source\": \"iana\"\n },\n \"application/ubjson\": {\n \"compressible\": false,\n \"extensions\": [\"ubj\"]\n },\n \"application/ulpfec\": {\n \"source\": \"iana\"\n },\n \"application/urc-grpsheet+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/urc-ressheet+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"rsheet\"]\n },\n \"application/urc-targetdesc+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"td\"]\n },\n \"application/urc-uisocketdesc+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vcard+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vcard+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vemmi\": {\n \"source\": \"iana\"\n },\n \"application/vividence.scriptfile\": {\n \"source\": \"apache\"\n },\n \"application/vnd.1000minds.decision-model+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"1km\"]\n },\n \"application/vnd.3gpp-prose+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp-prose-pc3ch+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp-v2x-local-service-information\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.5gnas\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.access-transfer-events+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.bsf+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.gmop+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.gtpc\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.interworking-data\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.lpp\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.mc-signalling-ear\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.mcdata-affiliation-command+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mcdata-info+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mcdata-payload\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.mcdata-service-config+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mcdata-signalling\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.mcdata-ue-config+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mcdata-user-profile+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mcptt-affiliation-command+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mcptt-floor-request+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mcptt-info+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mcptt-location-info+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mcptt-mbms-usage-info+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mcptt-service-config+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mcptt-signed+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mcptt-ue-config+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mcptt-ue-init-config+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mcptt-user-profile+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mcvideo-affiliation-command+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mcvideo-affiliation-info+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mcvideo-info+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mcvideo-location-info+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mcvideo-mbms-usage-info+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mcvideo-service-config+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mcvideo-transmission-request+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mcvideo-ue-config+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mcvideo-user-profile+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mid-call+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.ngap\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.pfcp\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.pic-bw-large\": {\n \"source\": \"iana\",\n \"extensions\": [\"plb\"]\n },\n \"application/vnd.3gpp.pic-bw-small\": {\n \"source\": \"iana\",\n \"extensions\": [\"psb\"]\n },\n \"application/vnd.3gpp.pic-bw-var\": {\n \"source\": \"iana\",\n \"extensions\": [\"pvb\"]\n },\n \"application/vnd.3gpp.s1ap\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.sms\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.sms+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.srvcc-ext+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.srvcc-info+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.state-and-event-info+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.ussd+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp2.bcmcsinfo+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp2.sms\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp2.tcap\": {\n \"source\": \"iana\",\n \"extensions\": [\"tcap\"]\n },\n \"application/vnd.3lightssoftware.imagescal\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3m.post-it-notes\": {\n \"source\": \"iana\",\n \"extensions\": [\"pwn\"]\n },\n \"application/vnd.accpac.simply.aso\": {\n \"source\": \"iana\",\n \"extensions\": [\"aso\"]\n },\n \"application/vnd.accpac.simply.imp\": {\n \"source\": \"iana\",\n \"extensions\": [\"imp\"]\n },\n \"application/vnd.acucobol\": {\n \"source\": \"iana\",\n \"extensions\": [\"acu\"]\n },\n \"application/vnd.acucorp\": {\n \"source\": \"iana\",\n \"extensions\": [\"atc\",\"acutc\"]\n },\n \"application/vnd.adobe.air-application-installer-package+zip\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"air\"]\n },\n \"application/vnd.adobe.flash.movie\": {\n \"source\": \"iana\"\n },\n \"application/vnd.adobe.formscentral.fcdt\": {\n \"source\": \"iana\",\n \"extensions\": [\"fcdt\"]\n },\n \"application/vnd.adobe.fxp\": {\n \"source\": \"iana\",\n \"extensions\": [\"fxp\",\"fxpl\"]\n },\n \"application/vnd.adobe.partial-upload\": {\n \"source\": \"iana\"\n },\n \"application/vnd.adobe.xdp+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"xdp\"]\n },\n \"application/vnd.adobe.xfdf\": {\n \"source\": \"iana\",\n \"extensions\": [\"xfdf\"]\n },\n \"application/vnd.aether.imp\": {\n \"source\": \"iana\"\n },\n \"application/vnd.afpc.afplinedata\": {\n \"source\": \"iana\"\n },\n \"application/vnd.afpc.afplinedata-pagedef\": {\n \"source\": \"iana\"\n },\n \"application/vnd.afpc.cmoca-cmresource\": {\n \"source\": \"iana\"\n },\n \"application/vnd.afpc.foca-charset\": {\n \"source\": \"iana\"\n },\n \"application/vnd.afpc.foca-codedfont\": {\n \"source\": \"iana\"\n },\n \"application/vnd.afpc.foca-codepage\": {\n \"source\": \"iana\"\n },\n \"application/vnd.afpc.modca\": {\n \"source\": \"iana\"\n },\n \"application/vnd.afpc.modca-cmtable\": {\n \"source\": \"iana\"\n },\n \"application/vnd.afpc.modca-formdef\": {\n \"source\": \"iana\"\n },\n \"application/vnd.afpc.modca-mediummap\": {\n \"source\": \"iana\"\n },\n \"application/vnd.afpc.modca-objectcontainer\": {\n \"source\": \"iana\"\n },\n \"application/vnd.afpc.modca-overlay\": {\n \"source\": \"iana\"\n },\n \"application/vnd.afpc.modca-pagesegment\": {\n \"source\": \"iana\"\n },\n \"application/vnd.age\": {\n \"source\": \"iana\",\n \"extensions\": [\"age\"]\n },\n \"application/vnd.ah-barcode\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ahead.space\": {\n \"source\": \"iana\",\n \"extensions\": [\"ahead\"]\n },\n \"application/vnd.airzip.filesecure.azf\": {\n \"source\": \"iana\",\n \"extensions\": [\"azf\"]\n },\n \"application/vnd.airzip.filesecure.azs\": {\n \"source\": \"iana\",\n \"extensions\": [\"azs\"]\n },\n \"application/vnd.amadeus+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.amazon.ebook\": {\n \"source\": \"apache\",\n \"extensions\": [\"azw\"]\n },\n \"application/vnd.amazon.mobi8-ebook\": {\n \"source\": \"iana\"\n },\n \"application/vnd.americandynamics.acc\": {\n \"source\": \"iana\",\n \"extensions\": [\"acc\"]\n },\n \"application/vnd.amiga.ami\": {\n \"source\": \"iana\",\n \"extensions\": [\"ami\"]\n },\n \"application/vnd.amundsen.maze+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.android.ota\": {\n \"source\": \"iana\"\n },\n \"application/vnd.android.package-archive\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"apk\"]\n },\n \"application/vnd.anki\": {\n \"source\": \"iana\"\n },\n \"application/vnd.anser-web-certificate-issue-initiation\": {\n \"source\": \"iana\",\n \"extensions\": [\"cii\"]\n },\n \"application/vnd.anser-web-funds-transfer-initiation\": {\n \"source\": \"apache\",\n \"extensions\": [\"fti\"]\n },\n \"application/vnd.antix.game-component\": {\n \"source\": \"iana\",\n \"extensions\": [\"atx\"]\n },\n \"application/vnd.apache.arrow.file\": {\n \"source\": \"iana\"\n },\n \"application/vnd.apache.arrow.stream\": {\n \"source\": \"iana\"\n },\n \"application/vnd.apache.thrift.binary\": {\n \"source\": \"iana\"\n },\n \"application/vnd.apache.thrift.compact\": {\n \"source\": \"iana\"\n },\n \"application/vnd.apache.thrift.json\": {\n \"source\": \"iana\"\n },\n \"application/vnd.api+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.aplextor.warrp+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.apothekende.reservation+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.apple.installer+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"mpkg\"]\n },\n \"application/vnd.apple.keynote\": {\n \"source\": \"iana\",\n \"extensions\": [\"key\"]\n },\n \"application/vnd.apple.mpegurl\": {\n \"source\": \"iana\",\n \"extensions\": [\"m3u8\"]\n },\n \"application/vnd.apple.numbers\": {\n \"source\": \"iana\",\n \"extensions\": [\"numbers\"]\n },\n \"application/vnd.apple.pages\": {\n \"source\": \"iana\",\n \"extensions\": [\"pages\"]\n },\n \"application/vnd.apple.pkpass\": {\n \"compressible\": false,\n \"extensions\": [\"pkpass\"]\n },\n \"application/vnd.arastra.swi\": {\n \"source\": \"iana\"\n },\n \"application/vnd.aristanetworks.swi\": {\n \"source\": \"iana\",\n \"extensions\": [\"swi\"]\n },\n \"application/vnd.artisan+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.artsquare\": {\n \"source\": \"iana\"\n },\n \"application/vnd.astraea-software.iota\": {\n \"source\": \"iana\",\n \"extensions\": [\"iota\"]\n },\n \"application/vnd.audiograph\": {\n \"source\": \"iana\",\n \"extensions\": [\"aep\"]\n },\n \"application/vnd.autopackage\": {\n \"source\": \"iana\"\n },\n \"application/vnd.avalon+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.avistar+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.balsamiq.bmml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"bmml\"]\n },\n \"application/vnd.balsamiq.bmpr\": {\n \"source\": \"iana\"\n },\n \"application/vnd.banana-accounting\": {\n \"source\": \"iana\"\n },\n \"application/vnd.bbf.usp.error\": {\n \"source\": \"iana\"\n },\n \"application/vnd.bbf.usp.msg\": {\n \"source\": \"iana\"\n },\n \"application/vnd.bbf.usp.msg+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.bekitzur-stech+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.bint.med-content\": {\n \"source\": \"iana\"\n },\n \"application/vnd.biopax.rdf+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.blink-idb-value-wrapper\": {\n \"source\": \"iana\"\n },\n \"application/vnd.blueice.multipass\": {\n \"source\": \"iana\",\n \"extensions\": [\"mpm\"]\n },\n \"application/vnd.bluetooth.ep.oob\": {\n \"source\": \"iana\"\n },\n \"application/vnd.bluetooth.le.oob\": {\n \"source\": \"iana\"\n },\n \"application/vnd.bmi\": {\n \"source\": \"iana\",\n \"extensions\": [\"bmi\"]\n },\n \"application/vnd.bpf\": {\n \"source\": \"iana\"\n },\n \"application/vnd.bpf3\": {\n \"source\": \"iana\"\n },\n \"application/vnd.businessobjects\": {\n \"source\": \"iana\",\n \"extensions\": [\"rep\"]\n },\n \"application/vnd.byu.uapi+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.cab-jscript\": {\n \"source\": \"iana\"\n },\n \"application/vnd.canon-cpdl\": {\n \"source\": \"iana\"\n },\n \"application/vnd.canon-lips\": {\n \"source\": \"iana\"\n },\n \"application/vnd.capasystems-pg+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.cendio.thinlinc.clientconf\": {\n \"source\": \"iana\"\n },\n \"application/vnd.century-systems.tcp_stream\": {\n \"source\": \"iana\"\n },\n \"application/vnd.chemdraw+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"cdxml\"]\n },\n \"application/vnd.chess-pgn\": {\n \"source\": \"iana\"\n },\n \"application/vnd.chipnuts.karaoke-mmd\": {\n \"source\": \"iana\",\n \"extensions\": [\"mmd\"]\n },\n \"application/vnd.ciedi\": {\n \"source\": \"iana\"\n },\n \"application/vnd.cinderella\": {\n \"source\": \"iana\",\n \"extensions\": [\"cdy\"]\n },\n \"application/vnd.cirpack.isdn-ext\": {\n \"source\": \"iana\"\n },\n \"application/vnd.citationstyles.style+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"csl\"]\n },\n \"application/vnd.claymore\": {\n \"source\": \"iana\",\n \"extensions\": [\"cla\"]\n },\n \"application/vnd.cloanto.rp9\": {\n \"source\": \"iana\",\n \"extensions\": [\"rp9\"]\n },\n \"application/vnd.clonk.c4group\": {\n \"source\": \"iana\",\n \"extensions\": [\"c4g\",\"c4d\",\"c4f\",\"c4p\",\"c4u\"]\n },\n \"application/vnd.cluetrust.cartomobile-config\": {\n \"source\": \"iana\",\n \"extensions\": [\"c11amc\"]\n },\n \"application/vnd.cluetrust.cartomobile-config-pkg\": {\n \"source\": \"iana\",\n \"extensions\": [\"c11amz\"]\n },\n \"application/vnd.coffeescript\": {\n \"source\": \"iana\"\n },\n \"application/vnd.collabio.xodocuments.document\": {\n \"source\": \"iana\"\n },\n \"application/vnd.collabio.xodocuments.document-template\": {\n \"source\": \"iana\"\n },\n \"application/vnd.collabio.xodocuments.presentation\": {\n \"source\": \"iana\"\n },\n \"application/vnd.collabio.xodocuments.presentation-template\": {\n \"source\": \"iana\"\n },\n \"application/vnd.collabio.xodocuments.spreadsheet\": {\n \"source\": \"iana\"\n },\n \"application/vnd.collabio.xodocuments.spreadsheet-template\": {\n \"source\": \"iana\"\n },\n \"application/vnd.collection+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.collection.doc+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.collection.next+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.comicbook+zip\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"application/vnd.comicbook-rar\": {\n \"source\": \"iana\"\n },\n \"application/vnd.commerce-battelle\": {\n \"source\": \"iana\"\n },\n \"application/vnd.commonspace\": {\n \"source\": \"iana\",\n \"extensions\": [\"csp\"]\n },\n \"application/vnd.contact.cmsg\": {\n \"source\": \"iana\",\n \"extensions\": [\"cdbcmsg\"]\n },\n \"application/vnd.coreos.ignition+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.cosmocaller\": {\n \"source\": \"iana\",\n \"extensions\": [\"cmc\"]\n },\n \"application/vnd.crick.clicker\": {\n \"source\": \"iana\",\n \"extensions\": [\"clkx\"]\n },\n \"application/vnd.crick.clicker.keyboard\": {\n \"source\": \"iana\",\n \"extensions\": [\"clkk\"]\n },\n \"application/vnd.crick.clicker.palette\": {\n \"source\": \"iana\",\n \"extensions\": [\"clkp\"]\n },\n \"application/vnd.crick.clicker.template\": {\n \"source\": \"iana\",\n \"extensions\": [\"clkt\"]\n },\n \"application/vnd.crick.clicker.wordbank\": {\n \"source\": \"iana\",\n \"extensions\": [\"clkw\"]\n },\n \"application/vnd.criticaltools.wbs+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"wbs\"]\n },\n \"application/vnd.cryptii.pipe+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.crypto-shade-file\": {\n \"source\": \"iana\"\n },\n \"application/vnd.cryptomator.encrypted\": {\n \"source\": \"iana\"\n },\n \"application/vnd.cryptomator.vault\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ctc-posml\": {\n \"source\": \"iana\",\n \"extensions\": [\"pml\"]\n },\n \"application/vnd.ctct.ws+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.cups-pdf\": {\n \"source\": \"iana\"\n },\n \"application/vnd.cups-postscript\": {\n \"source\": \"iana\"\n },\n \"application/vnd.cups-ppd\": {\n \"source\": \"iana\",\n \"extensions\": [\"ppd\"]\n },\n \"application/vnd.cups-raster\": {\n \"source\": \"iana\"\n },\n \"application/vnd.cups-raw\": {\n \"source\": \"iana\"\n },\n \"application/vnd.curl\": {\n \"source\": \"iana\"\n },\n \"application/vnd.curl.car\": {\n \"source\": \"apache\",\n \"extensions\": [\"car\"]\n },\n \"application/vnd.curl.pcurl\": {\n \"source\": \"apache\",\n \"extensions\": [\"pcurl\"]\n },\n \"application/vnd.cyan.dean.root+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.cybank\": {\n \"source\": \"iana\"\n },\n \"application/vnd.cyclonedx+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.cyclonedx+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.d2l.coursepackage1p0+zip\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"application/vnd.d3m-dataset\": {\n \"source\": \"iana\"\n },\n \"application/vnd.d3m-problem\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dart\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"dart\"]\n },\n \"application/vnd.data-vision.rdz\": {\n \"source\": \"iana\",\n \"extensions\": [\"rdz\"]\n },\n \"application/vnd.datapackage+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.dataresource+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.dbf\": {\n \"source\": \"iana\",\n \"extensions\": [\"dbf\"]\n },\n \"application/vnd.debian.binary-package\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dece.data\": {\n \"source\": \"iana\",\n \"extensions\": [\"uvf\",\"uvvf\",\"uvd\",\"uvvd\"]\n },\n \"application/vnd.dece.ttml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"uvt\",\"uvvt\"]\n },\n \"application/vnd.dece.unspecified\": {\n \"source\": \"iana\",\n \"extensions\": [\"uvx\",\"uvvx\"]\n },\n \"application/vnd.dece.zip\": {\n \"source\": \"iana\",\n \"extensions\": [\"uvz\",\"uvvz\"]\n },\n \"application/vnd.denovo.fcselayout-link\": {\n \"source\": \"iana\",\n \"extensions\": [\"fe_launch\"]\n },\n \"application/vnd.desmume.movie\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dir-bi.plate-dl-nosuffix\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dm.delegation+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.dna\": {\n \"source\": \"iana\",\n \"extensions\": [\"dna\"]\n },\n \"application/vnd.document+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.dolby.mlp\": {\n \"source\": \"apache\",\n \"extensions\": [\"mlp\"]\n },\n \"application/vnd.dolby.mobile.1\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dolby.mobile.2\": {\n \"source\": \"iana\"\n },\n \"application/vnd.doremir.scorecloud-binary-document\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dpgraph\": {\n \"source\": \"iana\",\n \"extensions\": [\"dpg\"]\n },\n \"application/vnd.dreamfactory\": {\n \"source\": \"iana\",\n \"extensions\": [\"dfac\"]\n },\n \"application/vnd.drive+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.ds-keypoint\": {\n \"source\": \"apache\",\n \"extensions\": [\"kpxx\"]\n },\n \"application/vnd.dtg.local\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dtg.local.flash\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dtg.local.html\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.ait\": {\n \"source\": \"iana\",\n \"extensions\": [\"ait\"]\n },\n \"application/vnd.dvb.dvbisl+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.dvb.dvbj\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.esgcontainer\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.ipdcdftnotifaccess\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.ipdcesgaccess\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.ipdcesgaccess2\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.ipdcesgpdd\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.ipdcroaming\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.iptv.alfec-base\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.iptv.alfec-enhancement\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.notif-aggregate-root+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.dvb.notif-container+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.dvb.notif-generic+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.dvb.notif-ia-msglist+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.dvb.notif-ia-registration-request+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.dvb.notif-ia-registration-response+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.dvb.notif-init+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.dvb.pfr\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.service\": {\n \"source\": \"iana\",\n \"extensions\": [\"svc\"]\n },\n \"application/vnd.dxr\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dynageo\": {\n \"source\": \"iana\",\n \"extensions\": [\"geo\"]\n },\n \"application/vnd.dzr\": {\n \"source\": \"iana\"\n },\n \"application/vnd.easykaraoke.cdgdownload\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ecdis-update\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ecip.rlp\": {\n \"source\": \"iana\"\n },\n \"application/vnd.eclipse.ditto+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.ecowin.chart\": {\n \"source\": \"iana\",\n \"extensions\": [\"mag\"]\n },\n \"application/vnd.ecowin.filerequest\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ecowin.fileupdate\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ecowin.series\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ecowin.seriesrequest\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ecowin.seriesupdate\": {\n \"source\": \"iana\"\n },\n \"application/vnd.efi.img\": {\n \"source\": \"iana\"\n },\n \"application/vnd.efi.iso\": {\n \"source\": \"iana\"\n },\n \"application/vnd.emclient.accessrequest+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.enliven\": {\n \"source\": \"iana\",\n \"extensions\": [\"nml\"]\n },\n \"application/vnd.enphase.envoy\": {\n \"source\": \"iana\"\n },\n \"application/vnd.eprints.data+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.epson.esf\": {\n \"source\": \"iana\",\n \"extensions\": [\"esf\"]\n },\n \"application/vnd.epson.msf\": {\n \"source\": \"iana\",\n \"extensions\": [\"msf\"]\n },\n \"application/vnd.epson.quickanime\": {\n \"source\": \"iana\",\n \"extensions\": [\"qam\"]\n },\n \"application/vnd.epson.salt\": {\n \"source\": \"iana\",\n \"extensions\": [\"slt\"]\n },\n \"application/vnd.epson.ssf\": {\n \"source\": \"iana\",\n \"extensions\": [\"ssf\"]\n },\n \"application/vnd.ericsson.quickcall\": {\n \"source\": \"iana\"\n },\n \"application/vnd.espass-espass+zip\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"application/vnd.eszigno3+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"es3\",\"et3\"]\n },\n \"application/vnd.etsi.aoc+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.etsi.asic-e+zip\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"application/vnd.etsi.asic-s+zip\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"application/vnd.etsi.cug+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.etsi.iptvcommand+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.etsi.iptvdiscovery+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.etsi.iptvprofile+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.etsi.iptvsad-bc+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.etsi.iptvsad-cod+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.etsi.iptvsad-npvr+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.etsi.iptvservice+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.etsi.iptvsync+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.etsi.iptvueprofile+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.etsi.mcid+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.etsi.mheg5\": {\n \"source\": \"iana\"\n },\n \"application/vnd.etsi.overload-control-policy-dataset+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.etsi.pstn+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.etsi.sci+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.etsi.simservs+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.etsi.timestamp-token\": {\n \"source\": \"iana\"\n },\n \"application/vnd.etsi.tsl+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.etsi.tsl.der\": {\n \"source\": \"iana\"\n },\n \"application/vnd.eu.kasparian.car+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.eudora.data\": {\n \"source\": \"iana\"\n },\n \"application/vnd.evolv.ecig.profile\": {\n \"source\": \"iana\"\n },\n \"application/vnd.evolv.ecig.settings\": {\n \"source\": \"iana\"\n },\n \"application/vnd.evolv.ecig.theme\": {\n \"source\": \"iana\"\n },\n \"application/vnd.exstream-empower+zip\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"application/vnd.exstream-package\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ezpix-album\": {\n \"source\": \"iana\",\n \"extensions\": [\"ez2\"]\n },\n \"application/vnd.ezpix-package\": {\n \"source\": \"iana\",\n \"extensions\": [\"ez3\"]\n },\n \"application/vnd.f-secure.mobile\": {\n \"source\": \"iana\"\n },\n \"application/vnd.familysearch.gedcom+zip\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"application/vnd.fastcopy-disk-image\": {\n \"source\": \"iana\"\n },\n \"application/vnd.fdf\": {\n \"source\": \"iana\",\n \"extensions\": [\"fdf\"]\n },\n \"application/vnd.fdsn.mseed\": {\n \"source\": \"iana\",\n \"extensions\": [\"mseed\"]\n },\n \"application/vnd.fdsn.seed\": {\n \"source\": \"iana\",\n \"extensions\": [\"seed\",\"dataless\"]\n },\n \"application/vnd.ffsns\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ficlab.flb+zip\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"application/vnd.filmit.zfc\": {\n \"source\": \"iana\"\n },\n \"application/vnd.fints\": {\n \"source\": \"iana\"\n },\n \"application/vnd.firemonkeys.cloudcell\": {\n \"source\": \"iana\"\n },\n \"application/vnd.flographit\": {\n \"source\": \"iana\",\n \"extensions\": [\"gph\"]\n },\n \"application/vnd.fluxtime.clip\": {\n \"source\": \"iana\",\n \"extensions\": [\"ftc\"]\n },\n \"application/vnd.font-fontforge-sfd\": {\n \"source\": \"iana\"\n },\n \"application/vnd.framemaker\": {\n \"source\": \"iana\",\n \"extensions\": [\"fm\",\"frame\",\"maker\",\"book\"]\n },\n \"application/vnd.frogans.fnc\": {\n \"source\": \"iana\",\n \"extensions\": [\"fnc\"]\n },\n \"application/vnd.frogans.ltf\": {\n \"source\": \"iana\",\n \"extensions\": [\"ltf\"]\n },\n \"application/vnd.fsc.weblaunch\": {\n \"source\": \"iana\",\n \"extensions\": [\"fsc\"]\n },\n \"application/vnd.fujifilm.fb.docuworks\": {\n \"source\": \"iana\"\n },\n \"application/vnd.fujifilm.fb.docuworks.binder\": {\n \"source\": \"iana\"\n },\n \"application/vnd.fujifilm.fb.docuworks.container\": {\n \"source\": \"iana\"\n },\n \"application/vnd.fujifilm.fb.jfi+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.fujitsu.oasys\": {\n \"source\": \"iana\",\n \"extensions\": [\"oas\"]\n },\n \"application/vnd.fujitsu.oasys2\": {\n \"source\": \"iana\",\n \"extensions\": [\"oa2\"]\n },\n \"application/vnd.fujitsu.oasys3\": {\n \"source\": \"iana\",\n \"extensions\": [\"oa3\"]\n },\n \"application/vnd.fujitsu.oasysgp\": {\n \"source\": \"iana\",\n \"extensions\": [\"fg5\"]\n },\n \"application/vnd.fujitsu.oasysprs\": {\n \"source\": \"iana\",\n \"extensions\": [\"bh2\"]\n },\n \"application/vnd.fujixerox.art-ex\": {\n \"source\": \"iana\"\n },\n \"application/vnd.fujixerox.art4\": {\n \"source\": \"iana\"\n },\n \"application/vnd.fujixerox.ddd\": {\n \"source\": \"iana\",\n \"extensions\": [\"ddd\"]\n },\n \"application/vnd.fujixerox.docuworks\": {\n \"source\": \"iana\",\n \"extensions\": [\"xdw\"]\n },\n \"application/vnd.fujixerox.docuworks.binder\": {\n \"source\": \"iana\",\n \"extensions\": [\"xbd\"]\n },\n \"application/vnd.fujixerox.docuworks.container\": {\n \"source\": \"iana\"\n },\n \"application/vnd.fujixerox.hbpl\": {\n \"source\": \"iana\"\n },\n \"application/vnd.fut-misnet\": {\n \"source\": \"iana\"\n },\n \"application/vnd.futoin+cbor\": {\n \"source\": \"iana\"\n },\n \"application/vnd.futoin+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.fuzzysheet\": {\n \"source\": \"iana\",\n \"extensions\": [\"fzs\"]\n },\n \"application/vnd.genomatix.tuxedo\": {\n \"source\": \"iana\",\n \"extensions\": [\"txd\"]\n },\n \"application/vnd.gentics.grd+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.geo+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.geocube+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.geogebra.file\": {\n \"source\": \"iana\",\n \"extensions\": [\"ggb\"]\n },\n \"application/vnd.geogebra.slides\": {\n \"source\": \"iana\"\n },\n \"application/vnd.geogebra.tool\": {\n \"source\": \"iana\",\n \"extensions\": [\"ggt\"]\n },\n \"application/vnd.geometry-explorer\": {\n \"source\": \"iana\",\n \"extensions\": [\"gex\",\"gre\"]\n },\n \"application/vnd.geonext\": {\n \"source\": \"iana\",\n \"extensions\": [\"gxt\"]\n },\n \"application/vnd.geoplan\": {\n \"source\": \"iana\",\n \"extensions\": [\"g2w\"]\n },\n \"application/vnd.geospace\": {\n \"source\": \"iana\",\n \"extensions\": [\"g3w\"]\n },\n \"application/vnd.gerber\": {\n \"source\": \"iana\"\n },\n \"application/vnd.globalplatform.card-content-mgt\": {\n \"source\": \"iana\"\n },\n \"application/vnd.globalplatform.card-content-mgt-response\": {\n \"source\": \"iana\"\n },\n \"application/vnd.gmx\": {\n \"source\": \"iana\",\n \"extensions\": [\"gmx\"]\n },\n \"application/vnd.google-apps.document\": {\n \"compressible\": false,\n \"extensions\": [\"gdoc\"]\n },\n \"application/vnd.google-apps.presentation\": {\n \"compressible\": false,\n \"extensions\": [\"gslides\"]\n },\n \"application/vnd.google-apps.spreadsheet\": {\n \"compressible\": false,\n \"extensions\": [\"gsheet\"]\n },\n \"application/vnd.google-earth.kml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"kml\"]\n },\n \"application/vnd.google-earth.kmz\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"kmz\"]\n },\n \"application/vnd.gov.sk.e-form+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.gov.sk.e-form+zip\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"application/vnd.gov.sk.xmldatacontainer+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.grafeq\": {\n \"source\": \"iana\",\n \"extensions\": [\"gqf\",\"gqs\"]\n },\n \"application/vnd.gridmp\": {\n \"source\": \"iana\"\n },\n \"application/vnd.groove-account\": {\n \"source\": \"iana\",\n \"extensions\": [\"gac\"]\n },\n \"application/vnd.groove-help\": {\n \"source\": \"iana\",\n \"extensions\": [\"ghf\"]\n },\n \"application/vnd.groove-identity-message\": {\n \"source\": \"iana\",\n \"extensions\": [\"gim\"]\n },\n \"application/vnd.groove-injector\": {\n \"source\": \"iana\",\n \"extensions\": [\"grv\"]\n },\n \"application/vnd.groove-tool-message\": {\n \"source\": \"iana\",\n \"extensions\": [\"gtm\"]\n },\n \"application/vnd.groove-tool-template\": {\n \"source\": \"iana\",\n \"extensions\": [\"tpl\"]\n },\n \"application/vnd.groove-vcard\": {\n \"source\": \"iana\",\n \"extensions\": [\"vcg\"]\n },\n \"application/vnd.hal+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.hal+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"hal\"]\n },\n \"application/vnd.handheld-entertainment+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"zmm\"]\n },\n \"application/vnd.hbci\": {\n \"source\": \"iana\",\n \"extensions\": [\"hbci\"]\n },\n \"application/vnd.hc+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.hcl-bireports\": {\n \"source\": \"iana\"\n },\n \"application/vnd.hdt\": {\n \"source\": \"iana\"\n },\n \"application/vnd.heroku+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.hhe.lesson-player\": {\n \"source\": \"iana\",\n \"extensions\": [\"les\"]\n },\n \"application/vnd.hl7cda+xml\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true\n },\n \"application/vnd.hl7v2+xml\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true\n },\n \"application/vnd.hp-hpgl\": {\n \"source\": \"iana\",\n \"extensions\": [\"hpgl\"]\n },\n \"application/vnd.hp-hpid\": {\n \"source\": \"iana\",\n \"extensions\": [\"hpid\"]\n },\n \"application/vnd.hp-hps\": {\n \"source\": \"iana\",\n \"extensions\": [\"hps\"]\n },\n \"application/vnd.hp-jlyt\": {\n \"source\": \"iana\",\n \"extensions\": [\"jlt\"]\n },\n \"application/vnd.hp-pcl\": {\n \"source\": \"iana\",\n \"extensions\": [\"pcl\"]\n },\n \"application/vnd.hp-pclxl\": {\n \"source\": \"iana\",\n \"extensions\": [\"pclxl\"]\n },\n \"application/vnd.httphone\": {\n \"source\": \"iana\"\n },\n \"application/vnd.hydrostatix.sof-data\": {\n \"source\": \"iana\",\n \"extensions\": [\"sfd-hdstx\"]\n },\n \"application/vnd.hyper+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.hyper-item+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.hyperdrive+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.hzn-3d-crossword\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ibm.afplinedata\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ibm.electronic-media\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ibm.minipay\": {\n \"source\": \"iana\",\n \"extensions\": [\"mpy\"]\n },\n \"application/vnd.ibm.modcap\": {\n \"source\": \"iana\",\n \"extensions\": [\"afp\",\"listafp\",\"list3820\"]\n },\n \"application/vnd.ibm.rights-management\": {\n \"source\": \"iana\",\n \"extensions\": [\"irm\"]\n },\n \"application/vnd.ibm.secure-container\": {\n \"source\": \"iana\",\n \"extensions\": [\"sc\"]\n },\n \"application/vnd.iccprofile\": {\n \"source\": \"iana\",\n \"extensions\": [\"icc\",\"icm\"]\n },\n \"application/vnd.ieee.1905\": {\n \"source\": \"iana\"\n },\n \"application/vnd.igloader\": {\n \"source\": \"iana\",\n \"extensions\": [\"igl\"]\n },\n \"application/vnd.imagemeter.folder+zip\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"application/vnd.imagemeter.image+zip\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"application/vnd.immervision-ivp\": {\n \"source\": \"iana\",\n \"extensions\": [\"ivp\"]\n },\n \"application/vnd.immervision-ivu\": {\n \"source\": \"iana\",\n \"extensions\": [\"ivu\"]\n },\n \"application/vnd.ims.imsccv1p1\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ims.imsccv1p2\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ims.imsccv1p3\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ims.lis.v2.result+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.ims.lti.v2.toolconsumerprofile+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.ims.lti.v2.toolproxy+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.ims.lti.v2.toolproxy.id+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.ims.lti.v2.toolsettings+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.ims.lti.v2.toolsettings.simple+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.informedcontrol.rms+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.informix-visionary\": {\n \"source\": \"iana\"\n },\n \"application/vnd.infotech.project\": {\n \"source\": \"iana\"\n },\n \"application/vnd.infotech.project+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.innopath.wamp.notification\": {\n \"source\": \"iana\"\n },\n \"application/vnd.insors.igm\": {\n \"source\": \"iana\",\n \"extensions\": [\"igm\"]\n },\n \"application/vnd.intercon.formnet\": {\n \"source\": \"iana\",\n \"extensions\": [\"xpw\",\"xpx\"]\n },\n \"application/vnd.intergeo\": {\n \"source\": \"iana\",\n \"extensions\": [\"i2g\"]\n },\n \"application/vnd.intertrust.digibox\": {\n \"source\": \"iana\"\n },\n \"application/vnd.intertrust.nncp\": {\n \"source\": \"iana\"\n },\n \"application/vnd.intu.qbo\": {\n \"source\": \"iana\",\n \"extensions\": [\"qbo\"]\n },\n \"application/vnd.intu.qfx\": {\n \"source\": \"iana\",\n \"extensions\": [\"qfx\"]\n },\n \"application/vnd.iptc.g2.catalogitem+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.iptc.g2.conceptitem+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.iptc.g2.knowledgeitem+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.iptc.g2.newsitem+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.iptc.g2.newsmessage+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.iptc.g2.packageitem+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.iptc.g2.planningitem+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.ipunplugged.rcprofile\": {\n \"source\": \"iana\",\n \"extensions\": [\"rcprofile\"]\n },\n \"application/vnd.irepository.package+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"irp\"]\n },\n \"application/vnd.is-xpr\": {\n \"source\": \"iana\",\n \"extensions\": [\"xpr\"]\n },\n \"application/vnd.isac.fcs\": {\n \"source\": \"iana\",\n \"extensions\": [\"fcs\"]\n },\n \"application/vnd.iso11783-10+zip\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"application/vnd.jam\": {\n \"source\": \"iana\",\n \"extensions\": [\"jam\"]\n },\n \"application/vnd.japannet-directory-service\": {\n \"source\": \"iana\"\n },\n \"application/vnd.japannet-jpnstore-wakeup\": {\n \"source\": \"iana\"\n },\n \"application/vnd.japannet-payment-wakeup\": {\n \"source\": \"iana\"\n },\n \"application/vnd.japannet-registration\": {\n \"source\": \"iana\"\n },\n \"application/vnd.japannet-registration-wakeup\": {\n \"source\": \"iana\"\n },\n \"application/vnd.japannet-setstore-wakeup\": {\n \"source\": \"iana\"\n },\n \"application/vnd.japannet-verification\": {\n \"source\": \"iana\"\n },\n \"application/vnd.japannet-verification-wakeup\": {\n \"source\": \"iana\"\n },\n \"application/vnd.jcp.javame.midlet-rms\": {\n \"source\": \"iana\",\n \"extensions\": [\"rms\"]\n },\n \"application/vnd.jisp\": {\n \"source\": \"iana\",\n \"extensions\": [\"jisp\"]\n },\n \"application/vnd.joost.joda-archive\": {\n \"source\": \"iana\",\n \"extensions\": [\"joda\"]\n },\n \"application/vnd.jsk.isdn-ngn\": {\n \"source\": \"iana\"\n },\n \"application/vnd.kahootz\": {\n \"source\": \"iana\",\n \"extensions\": [\"ktz\",\"ktr\"]\n },\n \"application/vnd.kde.karbon\": {\n \"source\": \"iana\",\n \"extensions\": [\"karbon\"]\n },\n \"application/vnd.kde.kchart\": {\n \"source\": \"iana\",\n \"extensions\": [\"chrt\"]\n },\n \"application/vnd.kde.kformula\": {\n \"source\": \"iana\",\n \"extensions\": [\"kfo\"]\n },\n \"application/vnd.kde.kivio\": {\n \"source\": \"iana\",\n \"extensions\": [\"flw\"]\n },\n \"application/vnd.kde.kontour\": {\n \"source\": \"iana\",\n \"extensions\": [\"kon\"]\n },\n \"application/vnd.kde.kpresenter\": {\n \"source\": \"iana\",\n \"extensions\": [\"kpr\",\"kpt\"]\n },\n \"application/vnd.kde.kspread\": {\n \"source\": \"iana\",\n \"extensions\": [\"ksp\"]\n },\n \"application/vnd.kde.kword\": {\n \"source\": \"iana\",\n \"extensions\": [\"kwd\",\"kwt\"]\n },\n \"application/vnd.kenameaapp\": {\n \"source\": \"iana\",\n \"extensions\": [\"htke\"]\n },\n \"application/vnd.kidspiration\": {\n \"source\": \"iana\",\n \"extensions\": [\"kia\"]\n },\n \"application/vnd.kinar\": {\n \"source\": \"iana\",\n \"extensions\": [\"kne\",\"knp\"]\n },\n \"application/vnd.koan\": {\n \"source\": \"iana\",\n \"extensions\": [\"skp\",\"skd\",\"skt\",\"skm\"]\n },\n \"application/vnd.kodak-descriptor\": {\n \"source\": \"iana\",\n \"extensions\": [\"sse\"]\n },\n \"application/vnd.las\": {\n \"source\": \"iana\"\n },\n \"application/vnd.las.las+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.las.las+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"lasxml\"]\n },\n \"application/vnd.laszip\": {\n \"source\": \"iana\"\n },\n \"application/vnd.leap+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.liberty-request+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.llamagraphics.life-balance.desktop\": {\n \"source\": \"iana\",\n \"extensions\": [\"lbd\"]\n },\n \"application/vnd.llamagraphics.life-balance.exchange+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"lbe\"]\n },\n \"application/vnd.logipipe.circuit+zip\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"application/vnd.loom\": {\n \"source\": \"iana\"\n },\n \"application/vnd.lotus-1-2-3\": {\n \"source\": \"iana\",\n \"extensions\": [\"123\"]\n },\n \"application/vnd.lotus-approach\": {\n \"source\": \"iana\",\n \"extensions\": [\"apr\"]\n },\n \"application/vnd.lotus-freelance\": {\n \"source\": \"iana\",\n \"extensions\": [\"pre\"]\n },\n \"application/vnd.lotus-notes\": {\n \"source\": \"iana\",\n \"extensions\": [\"nsf\"]\n },\n \"application/vnd.lotus-organizer\": {\n \"source\": \"iana\",\n \"extensions\": [\"org\"]\n },\n \"application/vnd.lotus-screencam\": {\n \"source\": \"iana\",\n \"extensions\": [\"scm\"]\n },\n \"application/vnd.lotus-wordpro\": {\n \"source\": \"iana\",\n \"extensions\": [\"lwp\"]\n },\n \"application/vnd.macports.portpkg\": {\n \"source\": \"iana\",\n \"extensions\": [\"portpkg\"]\n },\n \"application/vnd.mapbox-vector-tile\": {\n \"source\": \"iana\",\n \"extensions\": [\"mvt\"]\n },\n \"application/vnd.marlin.drm.actiontoken+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.marlin.drm.conftoken+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.marlin.drm.license+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.marlin.drm.mdcf\": {\n \"source\": \"iana\"\n },\n \"application/vnd.mason+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.maxar.archive.3tz+zip\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"application/vnd.maxmind.maxmind-db\": {\n \"source\": \"iana\"\n },\n \"application/vnd.mcd\": {\n \"source\": \"iana\",\n \"extensions\": [\"mcd\"]\n },\n \"application/vnd.medcalcdata\": {\n \"source\": \"iana\",\n \"extensions\": [\"mc1\"]\n },\n \"application/vnd.mediastation.cdkey\": {\n \"source\": \"iana\",\n \"extensions\": [\"cdkey\"]\n },\n \"application/vnd.meridian-slingshot\": {\n \"source\": \"iana\"\n },\n \"application/vnd.mfer\": {\n \"source\": \"iana\",\n \"extensions\": [\"mwf\"]\n },\n \"application/vnd.mfmp\": {\n \"source\": \"iana\",\n \"extensions\": [\"mfm\"]\n },\n \"application/vnd.micro+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.micrografx.flo\": {\n \"source\": \"iana\",\n \"extensions\": [\"flo\"]\n },\n \"application/vnd.micrografx.igx\": {\n \"source\": \"iana\",\n \"extensions\": [\"igx\"]\n },\n \"application/vnd.microsoft.portable-executable\": {\n \"source\": \"iana\"\n },\n \"application/vnd.microsoft.windows.thumbnail-cache\": {\n \"source\": \"iana\"\n },\n \"application/vnd.miele+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.mif\": {\n \"source\": \"iana\",\n \"extensions\": [\"mif\"]\n },\n \"application/vnd.minisoft-hp3000-save\": {\n \"source\": \"iana\"\n },\n \"application/vnd.mitsubishi.misty-guard.trustweb\": {\n \"source\": \"iana\"\n },\n \"application/vnd.mobius.daf\": {\n \"source\": \"iana\",\n \"extensions\": [\"daf\"]\n },\n \"application/vnd.mobius.dis\": {\n \"source\": \"iana\",\n \"extensions\": [\"dis\"]\n },\n \"application/vnd.mobius.mbk\": {\n \"source\": \"iana\",\n \"extensions\": [\"mbk\"]\n },\n \"application/vnd.mobius.mqy\": {\n \"source\": \"iana\",\n \"extensions\": [\"mqy\"]\n },\n \"application/vnd.mobius.msl\": {\n \"source\": \"iana\",\n \"extensions\": [\"msl\"]\n },\n \"application/vnd.mobius.plc\": {\n \"source\": \"iana\",\n \"extensions\": [\"plc\"]\n },\n \"application/vnd.mobius.txf\": {\n \"source\": \"iana\",\n \"extensions\": [\"txf\"]\n },\n \"application/vnd.mophun.application\": {\n \"source\": \"iana\",\n \"extensions\": [\"mpn\"]\n },\n \"application/vnd.mophun.certificate\": {\n \"source\": \"iana\",\n \"extensions\": [\"mpc\"]\n },\n \"application/vnd.motorola.flexsuite\": {\n \"source\": \"iana\"\n },\n \"application/vnd.motorola.flexsuite.adsi\": {\n \"source\": \"iana\"\n },\n \"application/vnd.motorola.flexsuite.fis\": {\n \"source\": \"iana\"\n },\n \"application/vnd.motorola.flexsuite.gotap\": {\n \"source\": \"iana\"\n },\n \"application/vnd.motorola.flexsuite.kmr\": {\n \"source\": \"iana\"\n },\n \"application/vnd.motorola.flexsuite.ttc\": {\n \"source\": \"iana\"\n },\n \"application/vnd.motorola.flexsuite.wem\": {\n \"source\": \"iana\"\n },\n \"application/vnd.motorola.iprm\": {\n \"source\": \"iana\"\n },\n \"application/vnd.mozilla.xul+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"xul\"]\n },\n \"application/vnd.ms-3mfdocument\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ms-artgalry\": {\n \"source\": \"iana\",\n \"extensions\": [\"cil\"]\n },\n \"application/vnd.ms-asf\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ms-cab-compressed\": {\n \"source\": \"iana\",\n \"extensions\": [\"cab\"]\n },\n \"application/vnd.ms-color.iccprofile\": {\n \"source\": \"apache\"\n },\n \"application/vnd.ms-excel\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"xls\",\"xlm\",\"xla\",\"xlc\",\"xlt\",\"xlw\"]\n },\n \"application/vnd.ms-excel.addin.macroenabled.12\": {\n \"source\": \"iana\",\n \"extensions\": [\"xlam\"]\n },\n \"application/vnd.ms-excel.sheet.binary.macroenabled.12\": {\n \"source\": \"iana\",\n \"extensions\": [\"xlsb\"]\n },\n \"application/vnd.ms-excel.sheet.macroenabled.12\": {\n \"source\": \"iana\",\n \"extensions\": [\"xlsm\"]\n },\n \"application/vnd.ms-excel.template.macroenabled.12\": {\n \"source\": \"iana\",\n \"extensions\": [\"xltm\"]\n },\n \"application/vnd.ms-fontobject\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"eot\"]\n },\n \"application/vnd.ms-htmlhelp\": {\n \"source\": \"iana\",\n \"extensions\": [\"chm\"]\n },\n \"application/vnd.ms-ims\": {\n \"source\": \"iana\",\n \"extensions\": [\"ims\"]\n },\n \"application/vnd.ms-lrm\": {\n \"source\": \"iana\",\n \"extensions\": [\"lrm\"]\n },\n \"application/vnd.ms-office.activex+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.ms-officetheme\": {\n \"source\": \"iana\",\n \"extensions\": [\"thmx\"]\n },\n \"application/vnd.ms-opentype\": {\n \"source\": \"apache\",\n \"compressible\": true\n },\n \"application/vnd.ms-outlook\": {\n \"compressible\": false,\n \"extensions\": [\"msg\"]\n },\n \"application/vnd.ms-package.obfuscated-opentype\": {\n \"source\": \"apache\"\n },\n \"application/vnd.ms-pki.seccat\": {\n \"source\": \"apache\",\n \"extensions\": [\"cat\"]\n },\n \"application/vnd.ms-pki.stl\": {\n \"source\": \"apache\",\n \"extensions\": [\"stl\"]\n },\n \"application/vnd.ms-playready.initiator+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.ms-powerpoint\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"ppt\",\"pps\",\"pot\"]\n },\n \"application/vnd.ms-powerpoint.addin.macroenabled.12\": {\n \"source\": \"iana\",\n \"extensions\": [\"ppam\"]\n },\n \"application/vnd.ms-powerpoint.presentation.macroenabled.12\": {\n \"source\": \"iana\",\n \"extensions\": [\"pptm\"]\n },\n \"application/vnd.ms-powerpoint.slide.macroenabled.12\": {\n \"source\": \"iana\",\n \"extensions\": [\"sldm\"]\n },\n \"application/vnd.ms-powerpoint.slideshow.macroenabled.12\": {\n \"source\": \"iana\",\n \"extensions\": [\"ppsm\"]\n },\n \"application/vnd.ms-powerpoint.template.macroenabled.12\": {\n \"source\": \"iana\",\n \"extensions\": [\"potm\"]\n },\n \"application/vnd.ms-printdevicecapabilities+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.ms-printing.printticket+xml\": {\n \"source\": \"apache\",\n \"compressible\": true\n },\n \"application/vnd.ms-printschematicket+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.ms-project\": {\n \"source\": \"iana\",\n \"extensions\": [\"mpp\",\"mpt\"]\n },\n \"application/vnd.ms-tnef\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ms-windows.devicepairing\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ms-windows.nwprinting.oob\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ms-windows.printerpairing\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ms-windows.wsd.oob\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ms-wmdrm.lic-chlg-req\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ms-wmdrm.lic-resp\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ms-wmdrm.meter-chlg-req\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ms-wmdrm.meter-resp\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ms-word.document.macroenabled.12\": {\n \"source\": \"iana\",\n \"extensions\": [\"docm\"]\n },\n \"application/vnd.ms-word.template.macroenabled.12\": {\n \"source\": \"iana\",\n \"extensions\": [\"dotm\"]\n },\n \"application/vnd.ms-works\": {\n \"source\": \"iana\",\n \"extensions\": [\"wps\",\"wks\",\"wcm\",\"wdb\"]\n },\n \"application/vnd.ms-wpl\": {\n \"source\": \"iana\",\n \"extensions\": [\"wpl\"]\n },\n \"application/vnd.ms-xpsdocument\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"xps\"]\n },\n \"application/vnd.msa-disk-image\": {\n \"source\": \"iana\"\n },\n \"application/vnd.mseq\": {\n \"source\": \"iana\",\n \"extensions\": [\"mseq\"]\n },\n \"application/vnd.msign\": {\n \"source\": \"iana\"\n },\n \"application/vnd.multiad.creator\": {\n \"source\": \"iana\"\n },\n \"application/vnd.multiad.creator.cif\": {\n \"source\": \"iana\"\n },\n \"application/vnd.music-niff\": {\n \"source\": \"iana\"\n },\n \"application/vnd.musician\": {\n \"source\": \"iana\",\n \"extensions\": [\"mus\"]\n },\n \"application/vnd.muvee.style\": {\n \"source\": \"iana\",\n \"extensions\": [\"msty\"]\n },\n \"application/vnd.mynfc\": {\n \"source\": \"iana\",\n \"extensions\": [\"taglet\"]\n },\n \"application/vnd.nacamar.ybrid+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.ncd.control\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ncd.reference\": {\n \"source\": \"iana\"\n },\n \"application/vnd.nearst.inv+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.nebumind.line\": {\n \"source\": \"iana\"\n },\n \"application/vnd.nervana\": {\n \"source\": \"iana\"\n },\n \"application/vnd.netfpx\": {\n \"source\": \"iana\"\n },\n \"application/vnd.neurolanguage.nlu\": {\n \"source\": \"iana\",\n \"extensions\": [\"nlu\"]\n },\n \"application/vnd.nimn\": {\n \"source\": \"iana\"\n },\n \"application/vnd.nintendo.nitro.rom\": {\n \"source\": \"iana\"\n },\n \"application/vnd.nintendo.snes.rom\": {\n \"source\": \"iana\"\n },\n \"application/vnd.nitf\": {\n \"source\": \"iana\",\n \"extensions\": [\"ntf\",\"nitf\"]\n },\n \"application/vnd.noblenet-directory\": {\n \"source\": \"iana\",\n \"extensions\": [\"nnd\"]\n },\n \"application/vnd.noblenet-sealer\": {\n \"source\": \"iana\",\n \"extensions\": [\"nns\"]\n },\n \"application/vnd.noblenet-web\": {\n \"source\": \"iana\",\n \"extensions\": [\"nnw\"]\n },\n \"application/vnd.nokia.catalogs\": {\n \"source\": \"iana\"\n },\n \"application/vnd.nokia.conml+wbxml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.nokia.conml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.nokia.iptv.config+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.nokia.isds-radio-presets\": {\n \"source\": \"iana\"\n },\n \"application/vnd.nokia.landmark+wbxml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.nokia.landmark+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.nokia.landmarkcollection+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.nokia.n-gage.ac+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"ac\"]\n },\n \"application/vnd.nokia.n-gage.data\": {\n \"source\": \"iana\",\n \"extensions\": [\"ngdat\"]\n },\n \"application/vnd.nokia.n-gage.symbian.install\": {\n \"source\": \"iana\",\n \"extensions\": [\"n-gage\"]\n },\n \"application/vnd.nokia.ncd\": {\n \"source\": \"iana\"\n },\n \"application/vnd.nokia.pcd+wbxml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.nokia.pcd+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.nokia.radio-preset\": {\n \"source\": \"iana\",\n \"extensions\": [\"rpst\"]\n },\n \"application/vnd.nokia.radio-presets\": {\n \"source\": \"iana\",\n \"extensions\": [\"rpss\"]\n },\n \"application/vnd.novadigm.edm\": {\n \"source\": \"iana\",\n \"extensions\": [\"edm\"]\n },\n \"application/vnd.novadigm.edx\": {\n \"source\": \"iana\",\n \"extensions\": [\"edx\"]\n },\n \"application/vnd.novadigm.ext\": {\n \"source\": \"iana\",\n \"extensions\": [\"ext\"]\n },\n \"application/vnd.ntt-local.content-share\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ntt-local.file-transfer\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ntt-local.ogw_remote-access\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ntt-local.sip-ta_remote\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ntt-local.sip-ta_tcp_stream\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oasis.opendocument.chart\": {\n \"source\": \"iana\",\n \"extensions\": [\"odc\"]\n },\n \"application/vnd.oasis.opendocument.chart-template\": {\n \"source\": \"iana\",\n \"extensions\": [\"otc\"]\n },\n \"application/vnd.oasis.opendocument.database\": {\n \"source\": \"iana\",\n \"extensions\": [\"odb\"]\n },\n \"application/vnd.oasis.opendocument.formula\": {\n \"source\": \"iana\",\n \"extensions\": [\"odf\"]\n },\n \"application/vnd.oasis.opendocument.formula-template\": {\n \"source\": \"iana\",\n \"extensions\": [\"odft\"]\n },\n \"application/vnd.oasis.opendocument.graphics\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"odg\"]\n },\n \"application/vnd.oasis.opendocument.graphics-template\": {\n \"source\": \"iana\",\n \"extensions\": [\"otg\"]\n },\n \"application/vnd.oasis.opendocument.image\": {\n \"source\": \"iana\",\n \"extensions\": [\"odi\"]\n },\n \"application/vnd.oasis.opendocument.image-template\": {\n \"source\": \"iana\",\n \"extensions\": [\"oti\"]\n },\n \"application/vnd.oasis.opendocument.presentation\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"odp\"]\n },\n \"application/vnd.oasis.opendocument.presentation-template\": {\n \"source\": \"iana\",\n \"extensions\": [\"otp\"]\n },\n \"application/vnd.oasis.opendocument.spreadsheet\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"ods\"]\n },\n \"application/vnd.oasis.opendocument.spreadsheet-template\": {\n \"source\": \"iana\",\n \"extensions\": [\"ots\"]\n },\n \"application/vnd.oasis.opendocument.text\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"odt\"]\n },\n \"application/vnd.oasis.opendocument.text-master\": {\n \"source\": \"iana\",\n \"extensions\": [\"odm\"]\n },\n \"application/vnd.oasis.opendocument.text-template\": {\n \"source\": \"iana\",\n \"extensions\": [\"ott\"]\n },\n \"application/vnd.oasis.opendocument.text-web\": {\n \"source\": \"iana\",\n \"extensions\": [\"oth\"]\n },\n \"application/vnd.obn\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ocf+cbor\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oci.image.manifest.v1+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oftn.l10n+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oipf.contentaccessdownload+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oipf.contentaccessstreaming+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oipf.cspg-hexbinary\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oipf.dae.svg+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oipf.dae.xhtml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oipf.mippvcontrolmessage+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oipf.pae.gem\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oipf.spdiscovery+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oipf.spdlist+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oipf.ueprofile+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oipf.userprofile+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.olpc-sugar\": {\n \"source\": \"iana\",\n \"extensions\": [\"xo\"]\n },\n \"application/vnd.oma-scws-config\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma-scws-http-request\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma-scws-http-response\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.bcast.associated-procedure-parameter+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oma.bcast.drm-trigger+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oma.bcast.imd+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oma.bcast.ltkm\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.bcast.notification+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oma.bcast.provisioningtrigger\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.bcast.sgboot\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.bcast.sgdd+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oma.bcast.sgdu\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.bcast.simple-symbol-container\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.bcast.smartcard-trigger+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oma.bcast.sprov+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oma.bcast.stkm\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.cab-address-book+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oma.cab-feature-handler+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oma.cab-pcc+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oma.cab-subs-invite+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oma.cab-user-prefs+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oma.dcd\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.dcdc\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.dd2+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"dd2\"]\n },\n \"application/vnd.oma.drm.risd+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oma.group-usage-list+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oma.lwm2m+cbor\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.lwm2m+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oma.lwm2m+tlv\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.pal+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oma.poc.detailed-progress-report+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oma.poc.final-report+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oma.poc.groups+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oma.poc.invocation-descriptor+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oma.poc.optimized-progress-report+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oma.push\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.scidm.messages+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oma.xcap-directory+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.omads-email+xml\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true\n },\n \"application/vnd.omads-file+xml\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true\n },\n \"application/vnd.omads-folder+xml\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true\n },\n \"application/vnd.omaloc-supl-init\": {\n \"source\": \"iana\"\n },\n \"application/vnd.onepager\": {\n \"source\": \"iana\"\n },\n \"application/vnd.onepagertamp\": {\n \"source\": \"iana\"\n },\n \"application/vnd.onepagertamx\": {\n \"source\": \"iana\"\n },\n \"application/vnd.onepagertat\": {\n \"source\": \"iana\"\n },\n \"application/vnd.onepagertatp\": {\n \"source\": \"iana\"\n },\n \"application/vnd.onepagertatx\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openblox.game+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"obgx\"]\n },\n \"application/vnd.openblox.game-binary\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openeye.oeb\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openofficeorg.extension\": {\n \"source\": \"apache\",\n \"extensions\": [\"oxt\"]\n },\n \"application/vnd.openstreetmap.data+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"osm\"]\n },\n \"application/vnd.opentimestamps.ots\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.custom-properties+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.customxmlproperties+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.drawing+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.drawingml.chart+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.drawingml.diagramcolors+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.drawingml.diagramdata+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.drawingml.diagramlayout+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.drawingml.diagramstyle+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.extended-properties+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.commentauthors+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.comments+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.handoutmaster+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.notesmaster+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.notesslide+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.presentation\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"pptx\"]\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.presprops+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.slide\": {\n \"source\": \"iana\",\n \"extensions\": [\"sldx\"]\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.slide+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.slidelayout+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.slidemaster+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.slideshow\": {\n \"source\": \"iana\",\n \"extensions\": [\"ppsx\"]\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.slideshow.main+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.slideupdateinfo+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.tablestyles+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.tags+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.template\": {\n \"source\": \"iana\",\n \"extensions\": [\"potx\"]\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.template.main+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.viewprops+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.calcchain+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.externallink+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcachedefinition+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcacherecords+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.pivottable+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.querytable+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionheaders+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionlog+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.sharedstrings+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"xlsx\"]\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheetmetadata+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.tablesinglecells+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.template\": {\n \"source\": \"iana\",\n \"extensions\": [\"xltx\"]\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.usernames+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.volatiledependencies+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.theme+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.themeoverride+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.vmldrawing\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"docx\"]\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.document.glossary+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.fonttable+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.template\": {\n \"source\": \"iana\",\n \"extensions\": [\"dotx\"]\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.template.main+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.websettings+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-package.core-properties+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-package.digital-signature-xmlsignature+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-package.relationships+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oracle.resource+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.orange.indata\": {\n \"source\": \"iana\"\n },\n \"application/vnd.osa.netdeploy\": {\n \"source\": \"iana\"\n },\n \"application/vnd.osgeo.mapguide.package\": {\n \"source\": \"iana\",\n \"extensions\": [\"mgp\"]\n },\n \"application/vnd.osgi.bundle\": {\n \"source\": \"iana\"\n },\n \"application/vnd.osgi.dp\": {\n \"source\": \"iana\",\n \"extensions\": [\"dp\"]\n },\n \"application/vnd.osgi.subsystem\": {\n \"source\": \"iana\",\n \"extensions\": [\"esa\"]\n },\n \"application/vnd.otps.ct-kip+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oxli.countgraph\": {\n \"source\": \"iana\"\n },\n \"application/vnd.pagerduty+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.palm\": {\n \"source\": \"iana\",\n \"extensions\": [\"pdb\",\"pqa\",\"oprc\"]\n },\n \"application/vnd.panoply\": {\n \"source\": \"iana\"\n },\n \"application/vnd.paos.xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.patentdive\": {\n \"source\": \"iana\"\n },\n \"application/vnd.patientecommsdoc\": {\n \"source\": \"iana\"\n },\n \"application/vnd.pawaafile\": {\n \"source\": \"iana\",\n \"extensions\": [\"paw\"]\n },\n \"application/vnd.pcos\": {\n \"source\": \"iana\"\n },\n \"application/vnd.pg.format\": {\n \"source\": \"iana\",\n \"extensions\": [\"str\"]\n },\n \"application/vnd.pg.osasli\": {\n \"source\": \"iana\",\n \"extensions\": [\"ei6\"]\n },\n \"application/vnd.piaccess.application-licence\": {\n \"source\": \"iana\"\n },\n \"application/vnd.picsel\": {\n \"source\": \"iana\",\n \"extensions\": [\"efif\"]\n },\n \"application/vnd.pmi.widget\": {\n \"source\": \"iana\",\n \"extensions\": [\"wg\"]\n },\n \"application/vnd.poc.group-advertisement+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.pocketlearn\": {\n \"source\": \"iana\",\n \"extensions\": [\"plf\"]\n },\n \"application/vnd.powerbuilder6\": {\n \"source\": \"iana\",\n \"extensions\": [\"pbd\"]\n },\n \"application/vnd.powerbuilder6-s\": {\n \"source\": \"iana\"\n },\n \"application/vnd.powerbuilder7\": {\n \"source\": \"iana\"\n },\n \"application/vnd.powerbuilder7-s\": {\n \"source\": \"iana\"\n },\n \"application/vnd.powerbuilder75\": {\n \"source\": \"iana\"\n },\n \"application/vnd.powerbuilder75-s\": {\n \"source\": \"iana\"\n },\n \"application/vnd.preminet\": {\n \"source\": \"iana\"\n },\n \"application/vnd.previewsystems.box\": {\n \"source\": \"iana\",\n \"extensions\": [\"box\"]\n },\n \"application/vnd.proteus.magazine\": {\n \"source\": \"iana\",\n \"extensions\": [\"mgz\"]\n },\n \"application/vnd.psfs\": {\n \"source\": \"iana\"\n },\n \"application/vnd.publishare-delta-tree\": {\n \"source\": \"iana\",\n \"extensions\": [\"qps\"]\n },\n \"application/vnd.pvi.ptid1\": {\n \"source\": \"iana\",\n \"extensions\": [\"ptid\"]\n },\n \"application/vnd.pwg-multiplexed\": {\n \"source\": \"iana\"\n },\n \"application/vnd.pwg-xhtml-print+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.qualcomm.brew-app-res\": {\n \"source\": \"iana\"\n },\n \"application/vnd.quarantainenet\": {\n \"source\": \"iana\"\n },\n \"application/vnd.quark.quarkxpress\": {\n \"source\": \"iana\",\n \"extensions\": [\"qxd\",\"qxt\",\"qwd\",\"qwt\",\"qxl\",\"qxb\"]\n },\n \"application/vnd.quobject-quoxdocument\": {\n \"source\": \"iana\"\n },\n \"application/vnd.radisys.moml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.radisys.msml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.radisys.msml-audit+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.radisys.msml-audit-conf+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.radisys.msml-audit-conn+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.radisys.msml-audit-dialog+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.radisys.msml-audit-stream+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.radisys.msml-conf+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.radisys.msml-dialog+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.radisys.msml-dialog-base+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.radisys.msml-dialog-fax-detect+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.radisys.msml-dialog-fax-sendrecv+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.radisys.msml-dialog-group+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.radisys.msml-dialog-speech+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.radisys.msml-dialog-transform+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.rainstor.data\": {\n \"source\": \"iana\"\n },\n \"application/vnd.rapid\": {\n \"source\": \"iana\"\n },\n \"application/vnd.rar\": {\n \"source\": \"iana\",\n \"extensions\": [\"rar\"]\n },\n \"application/vnd.realvnc.bed\": {\n \"source\": \"iana\",\n \"extensions\": [\"bed\"]\n },\n \"application/vnd.recordare.musicxml\": {\n \"source\": \"iana\",\n \"extensions\": [\"mxl\"]\n },\n \"application/vnd.recordare.musicxml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"musicxml\"]\n },\n \"application/vnd.renlearn.rlprint\": {\n \"source\": \"iana\"\n },\n \"application/vnd.resilient.logic\": {\n \"source\": \"iana\"\n },\n \"application/vnd.restful+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.rig.cryptonote\": {\n \"source\": \"iana\",\n \"extensions\": [\"cryptonote\"]\n },\n \"application/vnd.rim.cod\": {\n \"source\": \"apache\",\n \"extensions\": [\"cod\"]\n },\n \"application/vnd.rn-realmedia\": {\n \"source\": \"apache\",\n \"extensions\": [\"rm\"]\n },\n \"application/vnd.rn-realmedia-vbr\": {\n \"source\": \"apache\",\n \"extensions\": [\"rmvb\"]\n },\n \"application/vnd.route66.link66+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"link66\"]\n },\n \"application/vnd.rs-274x\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ruckus.download\": {\n \"source\": \"iana\"\n },\n \"application/vnd.s3sms\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sailingtracker.track\": {\n \"source\": \"iana\",\n \"extensions\": [\"st\"]\n },\n \"application/vnd.sar\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sbm.cid\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sbm.mid2\": {\n \"source\": \"iana\"\n },\n \"application/vnd.scribus\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sealed.3df\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sealed.csf\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sealed.doc\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sealed.eml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sealed.mht\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sealed.net\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sealed.ppt\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sealed.tiff\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sealed.xls\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sealedmedia.softseal.html\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sealedmedia.softseal.pdf\": {\n \"source\": \"iana\"\n },\n \"application/vnd.seemail\": {\n \"source\": \"iana\",\n \"extensions\": [\"see\"]\n },\n \"application/vnd.seis+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.sema\": {\n \"source\": \"iana\",\n \"extensions\": [\"sema\"]\n },\n \"application/vnd.semd\": {\n \"source\": \"iana\",\n \"extensions\": [\"semd\"]\n },\n \"application/vnd.semf\": {\n \"source\": \"iana\",\n \"extensions\": [\"semf\"]\n },\n \"application/vnd.shade-save-file\": {\n \"source\": \"iana\"\n },\n \"application/vnd.shana.informed.formdata\": {\n \"source\": \"iana\",\n \"extensions\": [\"ifm\"]\n },\n \"application/vnd.shana.informed.formtemplate\": {\n \"source\": \"iana\",\n \"extensions\": [\"itp\"]\n },\n \"application/vnd.shana.informed.interchange\": {\n \"source\": \"iana\",\n \"extensions\": [\"iif\"]\n },\n \"application/vnd.shana.informed.package\": {\n \"source\": \"iana\",\n \"extensions\": [\"ipk\"]\n },\n \"application/vnd.shootproof+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.shopkick+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.shp\": {\n \"source\": \"iana\"\n },\n \"application/vnd.shx\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sigrok.session\": {\n \"source\": \"iana\"\n },\n \"application/vnd.simtech-mindmapper\": {\n \"source\": \"iana\",\n \"extensions\": [\"twd\",\"twds\"]\n },\n \"application/vnd.siren+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.smaf\": {\n \"source\": \"iana\",\n \"extensions\": [\"mmf\"]\n },\n \"application/vnd.smart.notebook\": {\n \"source\": \"iana\"\n },\n \"application/vnd.smart.teacher\": {\n \"source\": \"iana\",\n \"extensions\": [\"teacher\"]\n },\n \"application/vnd.snesdev-page-table\": {\n \"source\": \"iana\"\n },\n \"application/vnd.software602.filler.form+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"fo\"]\n },\n \"application/vnd.software602.filler.form-xml-zip\": {\n \"source\": \"iana\"\n },\n \"application/vnd.solent.sdkm+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"sdkm\",\"sdkd\"]\n },\n \"application/vnd.spotfire.dxp\": {\n \"source\": \"iana\",\n \"extensions\": [\"dxp\"]\n },\n \"application/vnd.spotfire.sfs\": {\n \"source\": \"iana\",\n \"extensions\": [\"sfs\"]\n },\n \"application/vnd.sqlite3\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sss-cod\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sss-dtf\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sss-ntf\": {\n \"source\": \"iana\"\n },\n \"application/vnd.stardivision.calc\": {\n \"source\": \"apache\",\n \"extensions\": [\"sdc\"]\n },\n \"application/vnd.stardivision.draw\": {\n \"source\": \"apache\",\n \"extensions\": [\"sda\"]\n },\n \"application/vnd.stardivision.impress\": {\n \"source\": \"apache\",\n \"extensions\": [\"sdd\"]\n },\n \"application/vnd.stardivision.math\": {\n \"source\": \"apache\",\n \"extensions\": [\"smf\"]\n },\n \"application/vnd.stardivision.writer\": {\n \"source\": \"apache\",\n \"extensions\": [\"sdw\",\"vor\"]\n },\n \"application/vnd.stardivision.writer-global\": {\n \"source\": \"apache\",\n \"extensions\": [\"sgl\"]\n },\n \"application/vnd.stepmania.package\": {\n \"source\": \"iana\",\n \"extensions\": [\"smzip\"]\n },\n \"application/vnd.stepmania.stepchart\": {\n \"source\": \"iana\",\n \"extensions\": [\"sm\"]\n },\n \"application/vnd.street-stream\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sun.wadl+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"wadl\"]\n },\n \"application/vnd.sun.xml.calc\": {\n \"source\": \"apache\",\n \"extensions\": [\"sxc\"]\n },\n \"application/vnd.sun.xml.calc.template\": {\n \"source\": \"apache\",\n \"extensions\": [\"stc\"]\n },\n \"application/vnd.sun.xml.draw\": {\n \"source\": \"apache\",\n \"extensions\": [\"sxd\"]\n },\n \"application/vnd.sun.xml.draw.template\": {\n \"source\": \"apache\",\n \"extensions\": [\"std\"]\n },\n \"application/vnd.sun.xml.impress\": {\n \"source\": \"apache\",\n \"extensions\": [\"sxi\"]\n },\n \"application/vnd.sun.xml.impress.template\": {\n \"source\": \"apache\",\n \"extensions\": [\"sti\"]\n },\n \"application/vnd.sun.xml.math\": {\n \"source\": \"apache\",\n \"extensions\": [\"sxm\"]\n },\n \"application/vnd.sun.xml.writer\": {\n \"source\": \"apache\",\n \"extensions\": [\"sxw\"]\n },\n \"application/vnd.sun.xml.writer.global\": {\n \"source\": \"apache\",\n \"extensions\": [\"sxg\"]\n },\n \"application/vnd.sun.xml.writer.template\": {\n \"source\": \"apache\",\n \"extensions\": [\"stw\"]\n },\n \"application/vnd.sus-calendar\": {\n \"source\": \"iana\",\n \"extensions\": [\"sus\",\"susp\"]\n },\n \"application/vnd.svd\": {\n \"source\": \"iana\",\n \"extensions\": [\"svd\"]\n },\n \"application/vnd.swiftview-ics\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sycle+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.syft+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.symbian.install\": {\n \"source\": \"apache\",\n \"extensions\": [\"sis\",\"sisx\"]\n },\n \"application/vnd.syncml+xml\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true,\n \"extensions\": [\"xsm\"]\n },\n \"application/vnd.syncml.dm+wbxml\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"extensions\": [\"bdm\"]\n },\n \"application/vnd.syncml.dm+xml\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true,\n \"extensions\": [\"xdm\"]\n },\n \"application/vnd.syncml.dm.notification\": {\n \"source\": \"iana\"\n },\n \"application/vnd.syncml.dmddf+wbxml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.syncml.dmddf+xml\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true,\n \"extensions\": [\"ddf\"]\n },\n \"application/vnd.syncml.dmtnds+wbxml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.syncml.dmtnds+xml\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true\n },\n \"application/vnd.syncml.ds.notification\": {\n \"source\": \"iana\"\n },\n \"application/vnd.tableschema+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.tao.intent-module-archive\": {\n \"source\": \"iana\",\n \"extensions\": [\"tao\"]\n },\n \"application/vnd.tcpdump.pcap\": {\n \"source\": \"iana\",\n \"extensions\": [\"pcap\",\"cap\",\"dmp\"]\n },\n \"application/vnd.think-cell.ppttc+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.tmd.mediaflex.api+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.tml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.tmobile-livetv\": {\n \"source\": \"iana\",\n \"extensions\": [\"tmo\"]\n },\n \"application/vnd.tri.onesource\": {\n \"source\": \"iana\"\n },\n \"application/vnd.trid.tpt\": {\n \"source\": \"iana\",\n \"extensions\": [\"tpt\"]\n },\n \"application/vnd.triscape.mxs\": {\n \"source\": \"iana\",\n \"extensions\": [\"mxs\"]\n },\n \"application/vnd.trueapp\": {\n \"source\": \"iana\",\n \"extensions\": [\"tra\"]\n },\n \"application/vnd.truedoc\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ubisoft.webplayer\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ufdl\": {\n \"source\": \"iana\",\n \"extensions\": [\"ufd\",\"ufdl\"]\n },\n \"application/vnd.uiq.theme\": {\n \"source\": \"iana\",\n \"extensions\": [\"utz\"]\n },\n \"application/vnd.umajin\": {\n \"source\": \"iana\",\n \"extensions\": [\"umj\"]\n },\n \"application/vnd.unity\": {\n \"source\": \"iana\",\n \"extensions\": [\"unityweb\"]\n },\n \"application/vnd.uoml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"uoml\"]\n },\n \"application/vnd.uplanet.alert\": {\n \"source\": \"iana\"\n },\n \"application/vnd.uplanet.alert-wbxml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.uplanet.bearer-choice\": {\n \"source\": \"iana\"\n },\n \"application/vnd.uplanet.bearer-choice-wbxml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.uplanet.cacheop\": {\n \"source\": \"iana\"\n },\n \"application/vnd.uplanet.cacheop-wbxml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.uplanet.channel\": {\n \"source\": \"iana\"\n },\n \"application/vnd.uplanet.channel-wbxml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.uplanet.list\": {\n \"source\": \"iana\"\n },\n \"application/vnd.uplanet.list-wbxml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.uplanet.listcmd\": {\n \"source\": \"iana\"\n },\n \"application/vnd.uplanet.listcmd-wbxml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.uplanet.signal\": {\n \"source\": \"iana\"\n },\n \"application/vnd.uri-map\": {\n \"source\": \"iana\"\n },\n \"application/vnd.valve.source.material\": {\n \"source\": \"iana\"\n },\n \"application/vnd.vcx\": {\n \"source\": \"iana\",\n \"extensions\": [\"vcx\"]\n },\n \"application/vnd.vd-study\": {\n \"source\": \"iana\"\n },\n \"application/vnd.vectorworks\": {\n \"source\": \"iana\"\n },\n \"application/vnd.vel+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.verimatrix.vcas\": {\n \"source\": \"iana\"\n },\n \"application/vnd.veritone.aion+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.veryant.thin\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ves.encrypted\": {\n \"source\": \"iana\"\n },\n \"application/vnd.vidsoft.vidconference\": {\n \"source\": \"iana\"\n },\n \"application/vnd.visio\": {\n \"source\": \"iana\",\n \"extensions\": [\"vsd\",\"vst\",\"vss\",\"vsw\"]\n },\n \"application/vnd.visionary\": {\n \"source\": \"iana\",\n \"extensions\": [\"vis\"]\n },\n \"application/vnd.vividence.scriptfile\": {\n \"source\": \"iana\"\n },\n \"application/vnd.vsf\": {\n \"source\": \"iana\",\n \"extensions\": [\"vsf\"]\n },\n \"application/vnd.wap.sic\": {\n \"source\": \"iana\"\n },\n \"application/vnd.wap.slc\": {\n \"source\": \"iana\"\n },\n \"application/vnd.wap.wbxml\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"extensions\": [\"wbxml\"]\n },\n \"application/vnd.wap.wmlc\": {\n \"source\": \"iana\",\n \"extensions\": [\"wmlc\"]\n },\n \"application/vnd.wap.wmlscriptc\": {\n \"source\": \"iana\",\n \"extensions\": [\"wmlsc\"]\n },\n \"application/vnd.webturbo\": {\n \"source\": \"iana\",\n \"extensions\": [\"wtb\"]\n },\n \"application/vnd.wfa.dpp\": {\n \"source\": \"iana\"\n },\n \"application/vnd.wfa.p2p\": {\n \"source\": \"iana\"\n },\n \"application/vnd.wfa.wsc\": {\n \"source\": \"iana\"\n },\n \"application/vnd.windows.devicepairing\": {\n \"source\": \"iana\"\n },\n \"application/vnd.wmc\": {\n \"source\": \"iana\"\n },\n \"application/vnd.wmf.bootstrap\": {\n \"source\": \"iana\"\n },\n \"application/vnd.wolfram.mathematica\": {\n \"source\": \"iana\"\n },\n \"application/vnd.wolfram.mathematica.package\": {\n \"source\": \"iana\"\n },\n \"application/vnd.wolfram.player\": {\n \"source\": \"iana\",\n \"extensions\": [\"nbp\"]\n },\n \"application/vnd.wordperfect\": {\n \"source\": \"iana\",\n \"extensions\": [\"wpd\"]\n },\n \"application/vnd.wqd\": {\n \"source\": \"iana\",\n \"extensions\": [\"wqd\"]\n },\n \"application/vnd.wrq-hp3000-labelled\": {\n \"source\": \"iana\"\n },\n \"application/vnd.wt.stf\": {\n \"source\": \"iana\",\n \"extensions\": [\"stf\"]\n },\n \"application/vnd.wv.csp+wbxml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.wv.csp+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.wv.ssp+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.xacml+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.xara\": {\n \"source\": \"iana\",\n \"extensions\": [\"xar\"]\n },\n \"application/vnd.xfdl\": {\n \"source\": \"iana\",\n \"extensions\": [\"xfdl\"]\n },\n \"application/vnd.xfdl.webform\": {\n \"source\": \"iana\"\n },\n \"application/vnd.xmi+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.xmpie.cpkg\": {\n \"source\": \"iana\"\n },\n \"application/vnd.xmpie.dpkg\": {\n \"source\": \"iana\"\n },\n \"application/vnd.xmpie.plan\": {\n \"source\": \"iana\"\n },\n \"application/vnd.xmpie.ppkg\": {\n \"source\": \"iana\"\n },\n \"application/vnd.xmpie.xlim\": {\n \"source\": \"iana\"\n },\n \"application/vnd.yamaha.hv-dic\": {\n \"source\": \"iana\",\n \"extensions\": [\"hvd\"]\n },\n \"application/vnd.yamaha.hv-script\": {\n \"source\": \"iana\",\n \"extensions\": [\"hvs\"]\n },\n \"application/vnd.yamaha.hv-voice\": {\n \"source\": \"iana\",\n \"extensions\": [\"hvp\"]\n },\n \"application/vnd.yamaha.openscoreformat\": {\n \"source\": \"iana\",\n \"extensions\": [\"osf\"]\n },\n \"application/vnd.yamaha.openscoreformat.osfpvg+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"osfpvg\"]\n },\n \"application/vnd.yamaha.remote-setup\": {\n \"source\": \"iana\"\n },\n \"application/vnd.yamaha.smaf-audio\": {\n \"source\": \"iana\",\n \"extensions\": [\"saf\"]\n },\n \"application/vnd.yamaha.smaf-phrase\": {\n \"source\": \"iana\",\n \"extensions\": [\"spf\"]\n },\n \"application/vnd.yamaha.through-ngn\": {\n \"source\": \"iana\"\n },\n \"application/vnd.yamaha.tunnel-udpencap\": {\n \"source\": \"iana\"\n },\n \"application/vnd.yaoweme\": {\n \"source\": \"iana\"\n },\n \"application/vnd.yellowriver-custom-menu\": {\n \"source\": \"iana\",\n \"extensions\": [\"cmp\"]\n },\n \"application/vnd.youtube.yt\": {\n \"source\": \"iana\"\n },\n \"application/vnd.zul\": {\n \"source\": \"iana\",\n \"extensions\": [\"zir\",\"zirz\"]\n },\n \"application/vnd.zzazz.deck+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"zaz\"]\n },\n \"application/voicexml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"vxml\"]\n },\n \"application/voucher-cms+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vq-rtcpxr\": {\n \"source\": \"iana\"\n },\n \"application/wasm\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"wasm\"]\n },\n \"application/watcherinfo+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"wif\"]\n },\n \"application/webpush-options+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/whoispp-query\": {\n \"source\": \"iana\"\n },\n \"application/whoispp-response\": {\n \"source\": \"iana\"\n },\n \"application/widget\": {\n \"source\": \"iana\",\n \"extensions\": [\"wgt\"]\n },\n \"application/winhlp\": {\n \"source\": \"apache\",\n \"extensions\": [\"hlp\"]\n },\n \"application/wita\": {\n \"source\": \"iana\"\n },\n \"application/wordperfect5.1\": {\n \"source\": \"iana\"\n },\n \"application/wsdl+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"wsdl\"]\n },\n \"application/wspolicy+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"wspolicy\"]\n },\n \"application/x-7z-compressed\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"7z\"]\n },\n \"application/x-abiword\": {\n \"source\": \"apache\",\n \"extensions\": [\"abw\"]\n },\n \"application/x-ace-compressed\": {\n \"source\": \"apache\",\n \"extensions\": [\"ace\"]\n },\n \"application/x-amf\": {\n \"source\": \"apache\"\n },\n \"application/x-apple-diskimage\": {\n \"source\": \"apache\",\n \"extensions\": [\"dmg\"]\n },\n \"application/x-arj\": {\n \"compressible\": false,\n \"extensions\": [\"arj\"]\n },\n \"application/x-authorware-bin\": {\n \"source\": \"apache\",\n \"extensions\": [\"aab\",\"x32\",\"u32\",\"vox\"]\n },\n \"application/x-authorware-map\": {\n \"source\": \"apache\",\n \"extensions\": [\"aam\"]\n },\n \"application/x-authorware-seg\": {\n \"source\": \"apache\",\n \"extensions\": [\"aas\"]\n },\n \"application/x-bcpio\": {\n \"source\": \"apache\",\n \"extensions\": [\"bcpio\"]\n },\n \"application/x-bdoc\": {\n \"compressible\": false,\n \"extensions\": [\"bdoc\"]\n },\n \"application/x-bittorrent\": {\n \"source\": \"apache\",\n \"extensions\": [\"torrent\"]\n },\n \"application/x-blorb\": {\n \"source\": \"apache\",\n \"extensions\": [\"blb\",\"blorb\"]\n },\n \"application/x-bzip\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"bz\"]\n },\n \"application/x-bzip2\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"bz2\",\"boz\"]\n },\n \"application/x-cbr\": {\n \"source\": \"apache\",\n \"extensions\": [\"cbr\",\"cba\",\"cbt\",\"cbz\",\"cb7\"]\n },\n \"application/x-cdlink\": {\n \"source\": \"apache\",\n \"extensions\": [\"vcd\"]\n },\n \"application/x-cfs-compressed\": {\n \"source\": \"apache\",\n \"extensions\": [\"cfs\"]\n },\n \"application/x-chat\": {\n \"source\": \"apache\",\n \"extensions\": [\"chat\"]\n },\n \"application/x-chess-pgn\": {\n \"source\": \"apache\",\n \"extensions\": [\"pgn\"]\n },\n \"application/x-chrome-extension\": {\n \"extensions\": [\"crx\"]\n },\n \"application/x-cocoa\": {\n \"source\": \"nginx\",\n \"extensions\": [\"cco\"]\n },\n \"application/x-compress\": {\n \"source\": \"apache\"\n },\n \"application/x-conference\": {\n \"source\": \"apache\",\n \"extensions\": [\"nsc\"]\n },\n \"application/x-cpio\": {\n \"source\": \"apache\",\n \"extensions\": [\"cpio\"]\n },\n \"application/x-csh\": {\n \"source\": \"apache\",\n \"extensions\": [\"csh\"]\n },\n \"application/x-deb\": {\n \"compressible\": false\n },\n \"application/x-debian-package\": {\n \"source\": \"apache\",\n \"extensions\": [\"deb\",\"udeb\"]\n },\n \"application/x-dgc-compressed\": {\n \"source\": \"apache\",\n \"extensions\": [\"dgc\"]\n },\n \"application/x-director\": {\n \"source\": \"apache\",\n \"extensions\": [\"dir\",\"dcr\",\"dxr\",\"cst\",\"cct\",\"cxt\",\"w3d\",\"fgd\",\"swa\"]\n },\n \"application/x-doom\": {\n \"source\": \"apache\",\n \"extensions\": [\"wad\"]\n },\n \"application/x-dtbncx+xml\": {\n \"source\": \"apache\",\n \"compressible\": true,\n \"extensions\": [\"ncx\"]\n },\n \"application/x-dtbook+xml\": {\n \"source\": \"apache\",\n \"compressible\": true,\n \"extensions\": [\"dtb\"]\n },\n \"application/x-dtbresource+xml\": {\n \"source\": \"apache\",\n \"compressible\": true,\n \"extensions\": [\"res\"]\n },\n \"application/x-dvi\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"dvi\"]\n },\n \"application/x-envoy\": {\n \"source\": \"apache\",\n \"extensions\": [\"evy\"]\n },\n \"application/x-eva\": {\n \"source\": \"apache\",\n \"extensions\": [\"eva\"]\n },\n \"application/x-font-bdf\": {\n \"source\": \"apache\",\n \"extensions\": [\"bdf\"]\n },\n \"application/x-font-dos\": {\n \"source\": \"apache\"\n },\n \"application/x-font-framemaker\": {\n \"source\": \"apache\"\n },\n \"application/x-font-ghostscript\": {\n \"source\": \"apache\",\n \"extensions\": [\"gsf\"]\n },\n \"application/x-font-libgrx\": {\n \"source\": \"apache\"\n },\n \"application/x-font-linux-psf\": {\n \"source\": \"apache\",\n \"extensions\": [\"psf\"]\n },\n \"application/x-font-pcf\": {\n \"source\": \"apache\",\n \"extensions\": [\"pcf\"]\n },\n \"application/x-font-snf\": {\n \"source\": \"apache\",\n \"extensions\": [\"snf\"]\n },\n \"application/x-font-speedo\": {\n \"source\": \"apache\"\n },\n \"application/x-font-sunos-news\": {\n \"source\": \"apache\"\n },\n \"application/x-font-type1\": {\n \"source\": \"apache\",\n \"extensions\": [\"pfa\",\"pfb\",\"pfm\",\"afm\"]\n },\n \"application/x-font-vfont\": {\n \"source\": \"apache\"\n },\n \"application/x-freearc\": {\n \"source\": \"apache\",\n \"extensions\": [\"arc\"]\n },\n \"application/x-futuresplash\": {\n \"source\": \"apache\",\n \"extensions\": [\"spl\"]\n },\n \"application/x-gca-compressed\": {\n \"source\": \"apache\",\n \"extensions\": [\"gca\"]\n },\n \"application/x-glulx\": {\n \"source\": \"apache\",\n \"extensions\": [\"ulx\"]\n },\n \"application/x-gnumeric\": {\n \"source\": \"apache\",\n \"extensions\": [\"gnumeric\"]\n },\n \"application/x-gramps-xml\": {\n \"source\": \"apache\",\n \"extensions\": [\"gramps\"]\n },\n \"application/x-gtar\": {\n \"source\": \"apache\",\n \"extensions\": [\"gtar\"]\n },\n \"application/x-gzip\": {\n \"source\": \"apache\"\n },\n \"application/x-hdf\": {\n \"source\": \"apache\",\n \"extensions\": [\"hdf\"]\n },\n \"application/x-httpd-php\": {\n \"compressible\": true,\n \"extensions\": [\"php\"]\n },\n \"application/x-install-instructions\": {\n \"source\": \"apache\",\n \"extensions\": [\"install\"]\n },\n \"application/x-iso9660-image\": {\n \"source\": \"apache\",\n \"extensions\": [\"iso\"]\n },\n \"application/x-iwork-keynote-sffkey\": {\n \"extensions\": [\"key\"]\n },\n \"application/x-iwork-numbers-sffnumbers\": {\n \"extensions\": [\"numbers\"]\n },\n \"application/x-iwork-pages-sffpages\": {\n \"extensions\": [\"pages\"]\n },\n \"application/x-java-archive-diff\": {\n \"source\": \"nginx\",\n \"extensions\": [\"jardiff\"]\n },\n \"application/x-java-jnlp-file\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"jnlp\"]\n },\n \"application/x-javascript\": {\n \"compressible\": true\n },\n \"application/x-keepass2\": {\n \"extensions\": [\"kdbx\"]\n },\n \"application/x-latex\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"latex\"]\n },\n \"application/x-lua-bytecode\": {\n \"extensions\": [\"luac\"]\n },\n \"application/x-lzh-compressed\": {\n \"source\": \"apache\",\n \"extensions\": [\"lzh\",\"lha\"]\n },\n \"application/x-makeself\": {\n \"source\": \"nginx\",\n \"extensions\": [\"run\"]\n },\n \"application/x-mie\": {\n \"source\": \"apache\",\n \"extensions\": [\"mie\"]\n },\n \"application/x-mobipocket-ebook\": {\n \"source\": \"apache\",\n \"extensions\": [\"prc\",\"mobi\"]\n },\n \"application/x-mpegurl\": {\n \"compressible\": false\n },\n \"application/x-ms-application\": {\n \"source\": \"apache\",\n \"extensions\": [\"application\"]\n },\n \"application/x-ms-shortcut\": {\n \"source\": \"apache\",\n \"extensions\": [\"lnk\"]\n },\n \"application/x-ms-wmd\": {\n \"source\": \"apache\",\n \"extensions\": [\"wmd\"]\n },\n \"application/x-ms-wmz\": {\n \"source\": \"apache\",\n \"extensions\": [\"wmz\"]\n },\n \"application/x-ms-xbap\": {\n \"source\": \"apache\",\n \"extensions\": [\"xbap\"]\n },\n \"application/x-msaccess\": {\n \"source\": \"apache\",\n \"extensions\": [\"mdb\"]\n },\n \"application/x-msbinder\": {\n \"source\": \"apache\",\n \"extensions\": [\"obd\"]\n },\n \"application/x-mscardfile\": {\n \"source\": \"apache\",\n \"extensions\": [\"crd\"]\n },\n \"application/x-msclip\": {\n \"source\": \"apache\",\n \"extensions\": [\"clp\"]\n },\n \"application/x-msdos-program\": {\n \"extensions\": [\"exe\"]\n },\n \"application/x-msdownload\": {\n \"source\": \"apache\",\n \"extensions\": [\"exe\",\"dll\",\"com\",\"bat\",\"msi\"]\n },\n \"application/x-msmediaview\": {\n \"source\": \"apache\",\n \"extensions\": [\"mvb\",\"m13\",\"m14\"]\n },\n \"application/x-msmetafile\": {\n \"source\": \"apache\",\n \"extensions\": [\"wmf\",\"wmz\",\"emf\",\"emz\"]\n },\n \"application/x-msmoney\": {\n \"source\": \"apache\",\n \"extensions\": [\"mny\"]\n },\n \"application/x-mspublisher\": {\n \"source\": \"apache\",\n \"extensions\": [\"pub\"]\n },\n \"application/x-msschedule\": {\n \"source\": \"apache\",\n \"extensions\": [\"scd\"]\n },\n \"application/x-msterminal\": {\n \"source\": \"apache\",\n \"extensions\": [\"trm\"]\n },\n \"application/x-mswrite\": {\n \"source\": \"apache\",\n \"extensions\": [\"wri\"]\n },\n \"application/x-netcdf\": {\n \"source\": \"apache\",\n \"extensions\": [\"nc\",\"cdf\"]\n },\n \"application/x-ns-proxy-autoconfig\": {\n \"compressible\": true,\n \"extensions\": [\"pac\"]\n },\n \"application/x-nzb\": {\n \"source\": \"apache\",\n \"extensions\": [\"nzb\"]\n },\n \"application/x-perl\": {\n \"source\": \"nginx\",\n \"extensions\": [\"pl\",\"pm\"]\n },\n \"application/x-pilot\": {\n \"source\": \"nginx\",\n \"extensions\": [\"prc\",\"pdb\"]\n },\n \"application/x-pkcs12\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"p12\",\"pfx\"]\n },\n \"application/x-pkcs7-certificates\": {\n \"source\": \"apache\",\n \"extensions\": [\"p7b\",\"spc\"]\n },\n \"application/x-pkcs7-certreqresp\": {\n \"source\": \"apache\",\n \"extensions\": [\"p7r\"]\n },\n \"application/x-pki-message\": {\n \"source\": \"iana\"\n },\n \"application/x-rar-compressed\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"rar\"]\n },\n \"application/x-redhat-package-manager\": {\n \"source\": \"nginx\",\n \"extensions\": [\"rpm\"]\n },\n \"application/x-research-info-systems\": {\n \"source\": \"apache\",\n \"extensions\": [\"ris\"]\n },\n \"application/x-sea\": {\n \"source\": \"nginx\",\n \"extensions\": [\"sea\"]\n },\n \"application/x-sh\": {\n \"source\": \"apache\",\n \"compressible\": true,\n \"extensions\": [\"sh\"]\n },\n \"application/x-shar\": {\n \"source\": \"apache\",\n \"extensions\": [\"shar\"]\n },\n \"application/x-shockwave-flash\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"swf\"]\n },\n \"application/x-silverlight-app\": {\n \"source\": \"apache\",\n \"extensions\": [\"xap\"]\n },\n \"application/x-sql\": {\n \"source\": \"apache\",\n \"extensions\": [\"sql\"]\n },\n \"application/x-stuffit\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"sit\"]\n },\n \"application/x-stuffitx\": {\n \"source\": \"apache\",\n \"extensions\": [\"sitx\"]\n },\n \"application/x-subrip\": {\n \"source\": \"apache\",\n \"extensions\": [\"srt\"]\n },\n \"application/x-sv4cpio\": {\n \"source\": \"apache\",\n \"extensions\": [\"sv4cpio\"]\n },\n \"application/x-sv4crc\": {\n \"source\": \"apache\",\n \"extensions\": [\"sv4crc\"]\n },\n \"application/x-t3vm-image\": {\n \"source\": \"apache\",\n \"extensions\": [\"t3\"]\n },\n \"application/x-tads\": {\n \"source\": \"apache\",\n \"extensions\": [\"gam\"]\n },\n \"application/x-tar\": {\n \"source\": \"apache\",\n \"compressible\": true,\n \"extensions\": [\"tar\"]\n },\n \"application/x-tcl\": {\n \"source\": \"apache\",\n \"extensions\": [\"tcl\",\"tk\"]\n },\n \"application/x-tex\": {\n \"source\": \"apache\",\n \"extensions\": [\"tex\"]\n },\n \"application/x-tex-tfm\": {\n \"source\": \"apache\",\n \"extensions\": [\"tfm\"]\n },\n \"application/x-texinfo\": {\n \"source\": \"apache\",\n \"extensions\": [\"texinfo\",\"texi\"]\n },\n \"application/x-tgif\": {\n \"source\": \"apache\",\n \"extensions\": [\"obj\"]\n },\n \"application/x-ustar\": {\n \"source\": \"apache\",\n \"extensions\": [\"ustar\"]\n },\n \"application/x-virtualbox-hdd\": {\n \"compressible\": true,\n \"extensions\": [\"hdd\"]\n },\n \"application/x-virtualbox-ova\": {\n \"compressible\": true,\n \"extensions\": [\"ova\"]\n },\n \"application/x-virtualbox-ovf\": {\n \"compressible\": true,\n \"extensions\": [\"ovf\"]\n },\n \"application/x-virtualbox-vbox\": {\n \"compressible\": true,\n \"extensions\": [\"vbox\"]\n },\n \"application/x-virtualbox-vbox-extpack\": {\n \"compressible\": false,\n \"extensions\": [\"vbox-extpack\"]\n },\n \"application/x-virtualbox-vdi\": {\n \"compressible\": true,\n \"extensions\": [\"vdi\"]\n },\n \"application/x-virtualbox-vhd\": {\n \"compressible\": true,\n \"extensions\": [\"vhd\"]\n },\n \"application/x-virtualbox-vmdk\": {\n \"compressible\": true,\n \"extensions\": [\"vmdk\"]\n },\n \"application/x-wais-source\": {\n \"source\": \"apache\",\n \"extensions\": [\"src\"]\n },\n \"application/x-web-app-manifest+json\": {\n \"compressible\": true,\n \"extensions\": [\"webapp\"]\n },\n \"application/x-www-form-urlencoded\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/x-x509-ca-cert\": {\n \"source\": \"iana\",\n \"extensions\": [\"der\",\"crt\",\"pem\"]\n },\n \"application/x-x509-ca-ra-cert\": {\n \"source\": \"iana\"\n },\n \"application/x-x509-next-ca-cert\": {\n \"source\": \"iana\"\n },\n \"application/x-xfig\": {\n \"source\": \"apache\",\n \"extensions\": [\"fig\"]\n },\n \"application/x-xliff+xml\": {\n \"source\": \"apache\",\n \"compressible\": true,\n \"extensions\": [\"xlf\"]\n },\n \"application/x-xpinstall\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"xpi\"]\n },\n \"application/x-xz\": {\n \"source\": \"apache\",\n \"extensions\": [\"xz\"]\n },\n \"application/x-zmachine\": {\n \"source\": \"apache\",\n \"extensions\": [\"z1\",\"z2\",\"z3\",\"z4\",\"z5\",\"z6\",\"z7\",\"z8\"]\n },\n \"application/x400-bp\": {\n \"source\": \"iana\"\n },\n \"application/xacml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/xaml+xml\": {\n \"source\": \"apache\",\n \"compressible\": true,\n \"extensions\": [\"xaml\"]\n },\n \"application/xcap-att+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"xav\"]\n },\n \"application/xcap-caps+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"xca\"]\n },\n \"application/xcap-diff+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"xdf\"]\n },\n \"application/xcap-el+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"xel\"]\n },\n \"application/xcap-error+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/xcap-ns+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"xns\"]\n },\n \"application/xcon-conference-info+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/xcon-conference-info-diff+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/xenc+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"xenc\"]\n },\n \"application/xhtml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"xhtml\",\"xht\"]\n },\n \"application/xhtml-voice+xml\": {\n \"source\": \"apache\",\n \"compressible\": true\n },\n \"application/xliff+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"xlf\"]\n },\n \"application/xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"xml\",\"xsl\",\"xsd\",\"rng\"]\n },\n \"application/xml-dtd\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"dtd\"]\n },\n \"application/xml-external-parsed-entity\": {\n \"source\": \"iana\"\n },\n \"application/xml-patch+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/xmpp+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/xop+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"xop\"]\n },\n \"application/xproc+xml\": {\n \"source\": \"apache\",\n \"compressible\": true,\n \"extensions\": [\"xpl\"]\n },\n \"application/xslt+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"xsl\",\"xslt\"]\n },\n \"application/xspf+xml\": {\n \"source\": \"apache\",\n \"compressible\": true,\n \"extensions\": [\"xspf\"]\n },\n \"application/xv+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"mxml\",\"xhvml\",\"xvml\",\"xvm\"]\n },\n \"application/yang\": {\n \"source\": \"iana\",\n \"extensions\": [\"yang\"]\n },\n \"application/yang-data+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/yang-data+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/yang-patch+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/yang-patch+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/yin+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"yin\"]\n },\n \"application/zip\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"zip\"]\n },\n \"application/zlib\": {\n \"source\": \"iana\"\n },\n \"application/zstd\": {\n \"source\": \"iana\"\n },\n \"audio/1d-interleaved-parityfec\": {\n \"source\": \"iana\"\n },\n \"audio/32kadpcm\": {\n \"source\": \"iana\"\n },\n \"audio/3gpp\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"3gpp\"]\n },\n \"audio/3gpp2\": {\n \"source\": \"iana\"\n },\n \"audio/aac\": {\n \"source\": \"iana\"\n },\n \"audio/ac3\": {\n \"source\": \"iana\"\n },\n \"audio/adpcm\": {\n \"source\": \"apache\",\n \"extensions\": [\"adp\"]\n },\n \"audio/amr\": {\n \"source\": \"iana\",\n \"extensions\": [\"amr\"]\n },\n \"audio/amr-wb\": {\n \"source\": \"iana\"\n },\n \"audio/amr-wb+\": {\n \"source\": \"iana\"\n },\n \"audio/aptx\": {\n \"source\": \"iana\"\n },\n \"audio/asc\": {\n \"source\": \"iana\"\n },\n \"audio/atrac-advanced-lossless\": {\n \"source\": \"iana\"\n },\n \"audio/atrac-x\": {\n \"source\": \"iana\"\n },\n \"audio/atrac3\": {\n \"source\": \"iana\"\n },\n \"audio/basic\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"au\",\"snd\"]\n },\n \"audio/bv16\": {\n \"source\": \"iana\"\n },\n \"audio/bv32\": {\n \"source\": \"iana\"\n },\n \"audio/clearmode\": {\n \"source\": \"iana\"\n },\n \"audio/cn\": {\n \"source\": \"iana\"\n },\n \"audio/dat12\": {\n \"source\": \"iana\"\n },\n \"audio/dls\": {\n \"source\": \"iana\"\n },\n \"audio/dsr-es201108\": {\n \"source\": \"iana\"\n },\n \"audio/dsr-es202050\": {\n \"source\": \"iana\"\n },\n \"audio/dsr-es202211\": {\n \"source\": \"iana\"\n },\n \"audio/dsr-es202212\": {\n \"source\": \"iana\"\n },\n \"audio/dv\": {\n \"source\": \"iana\"\n },\n \"audio/dvi4\": {\n \"source\": \"iana\"\n },\n \"audio/eac3\": {\n \"source\": \"iana\"\n },\n \"audio/encaprtp\": {\n \"source\": \"iana\"\n },\n \"audio/evrc\": {\n \"source\": \"iana\"\n },\n \"audio/evrc-qcp\": {\n \"source\": \"iana\"\n },\n \"audio/evrc0\": {\n \"source\": \"iana\"\n },\n \"audio/evrc1\": {\n \"source\": \"iana\"\n },\n \"audio/evrcb\": {\n \"source\": \"iana\"\n },\n \"audio/evrcb0\": {\n \"source\": \"iana\"\n },\n \"audio/evrcb1\": {\n \"source\": \"iana\"\n },\n \"audio/evrcnw\": {\n \"source\": \"iana\"\n },\n \"audio/evrcnw0\": {\n \"source\": \"iana\"\n },\n \"audio/evrcnw1\": {\n \"source\": \"iana\"\n },\n \"audio/evrcwb\": {\n \"source\": \"iana\"\n },\n \"audio/evrcwb0\": {\n \"source\": \"iana\"\n },\n \"audio/evrcwb1\": {\n \"source\": \"iana\"\n },\n \"audio/evs\": {\n \"source\": \"iana\"\n },\n \"audio/flexfec\": {\n \"source\": \"iana\"\n },\n \"audio/fwdred\": {\n \"source\": \"iana\"\n },\n \"audio/g711-0\": {\n \"source\": \"iana\"\n },\n \"audio/g719\": {\n \"source\": \"iana\"\n },\n \"audio/g722\": {\n \"source\": \"iana\"\n },\n \"audio/g7221\": {\n \"source\": \"iana\"\n },\n \"audio/g723\": {\n \"source\": \"iana\"\n },\n \"audio/g726-16\": {\n \"source\": \"iana\"\n },\n \"audio/g726-24\": {\n \"source\": \"iana\"\n },\n \"audio/g726-32\": {\n \"source\": \"iana\"\n },\n \"audio/g726-40\": {\n \"source\": \"iana\"\n },\n \"audio/g728\": {\n \"source\": \"iana\"\n },\n \"audio/g729\": {\n \"source\": \"iana\"\n },\n \"audio/g7291\": {\n \"source\": \"iana\"\n },\n \"audio/g729d\": {\n \"source\": \"iana\"\n },\n \"audio/g729e\": {\n \"source\": \"iana\"\n },\n \"audio/gsm\": {\n \"source\": \"iana\"\n },\n \"audio/gsm-efr\": {\n \"source\": \"iana\"\n },\n \"audio/gsm-hr-08\": {\n \"source\": \"iana\"\n },\n \"audio/ilbc\": {\n \"source\": \"iana\"\n },\n \"audio/ip-mr_v2.5\": {\n \"source\": \"iana\"\n },\n \"audio/isac\": {\n \"source\": \"apache\"\n },\n \"audio/l16\": {\n \"source\": \"iana\"\n },\n \"audio/l20\": {\n \"source\": \"iana\"\n },\n \"audio/l24\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"audio/l8\": {\n \"source\": \"iana\"\n },\n \"audio/lpc\": {\n \"source\": \"iana\"\n },\n \"audio/melp\": {\n \"source\": \"iana\"\n },\n \"audio/melp1200\": {\n \"source\": \"iana\"\n },\n \"audio/melp2400\": {\n \"source\": \"iana\"\n },\n \"audio/melp600\": {\n \"source\": \"iana\"\n },\n \"audio/mhas\": {\n \"source\": \"iana\"\n },\n \"audio/midi\": {\n \"source\": \"apache\",\n \"extensions\": [\"mid\",\"midi\",\"kar\",\"rmi\"]\n },\n \"audio/mobile-xmf\": {\n \"source\": \"iana\",\n \"extensions\": [\"mxmf\"]\n },\n \"audio/mp3\": {\n \"compressible\": false,\n \"extensions\": [\"mp3\"]\n },\n \"audio/mp4\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"m4a\",\"mp4a\"]\n },\n \"audio/mp4a-latm\": {\n \"source\": \"iana\"\n },\n \"audio/mpa\": {\n \"source\": \"iana\"\n },\n \"audio/mpa-robust\": {\n \"source\": \"iana\"\n },\n \"audio/mpeg\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"mpga\",\"mp2\",\"mp2a\",\"mp3\",\"m2a\",\"m3a\"]\n },\n \"audio/mpeg4-generic\": {\n \"source\": \"iana\"\n },\n \"audio/musepack\": {\n \"source\": \"apache\"\n },\n \"audio/ogg\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"oga\",\"ogg\",\"spx\",\"opus\"]\n },\n \"audio/opus\": {\n \"source\": \"iana\"\n },\n \"audio/parityfec\": {\n \"source\": \"iana\"\n },\n \"audio/pcma\": {\n \"source\": \"iana\"\n },\n \"audio/pcma-wb\": {\n \"source\": \"iana\"\n },\n \"audio/pcmu\": {\n \"source\": \"iana\"\n },\n \"audio/pcmu-wb\": {\n \"source\": \"iana\"\n },\n \"audio/prs.sid\": {\n \"source\": \"iana\"\n },\n \"audio/qcelp\": {\n \"source\": \"iana\"\n },\n \"audio/raptorfec\": {\n \"source\": \"iana\"\n },\n \"audio/red\": {\n \"source\": \"iana\"\n },\n \"audio/rtp-enc-aescm128\": {\n \"source\": \"iana\"\n },\n \"audio/rtp-midi\": {\n \"source\": \"iana\"\n },\n \"audio/rtploopback\": {\n \"source\": \"iana\"\n },\n \"audio/rtx\": {\n \"source\": \"iana\"\n },\n \"audio/s3m\": {\n \"source\": \"apache\",\n \"extensions\": [\"s3m\"]\n },\n \"audio/scip\": {\n \"source\": \"iana\"\n },\n \"audio/silk\": {\n \"source\": \"apache\",\n \"extensions\": [\"sil\"]\n },\n \"audio/smv\": {\n \"source\": \"iana\"\n },\n \"audio/smv-qcp\": {\n \"source\": \"iana\"\n },\n \"audio/smv0\": {\n \"source\": \"iana\"\n },\n \"audio/sofa\": {\n \"source\": \"iana\"\n },\n \"audio/sp-midi\": {\n \"source\": \"iana\"\n },\n \"audio/speex\": {\n \"source\": \"iana\"\n },\n \"audio/t140c\": {\n \"source\": \"iana\"\n },\n \"audio/t38\": {\n \"source\": \"iana\"\n },\n \"audio/telephone-event\": {\n \"source\": \"iana\"\n },\n \"audio/tetra_acelp\": {\n \"source\": \"iana\"\n },\n \"audio/tetra_acelp_bb\": {\n \"source\": \"iana\"\n },\n \"audio/tone\": {\n \"source\": \"iana\"\n },\n \"audio/tsvcis\": {\n \"source\": \"iana\"\n },\n \"audio/uemclip\": {\n \"source\": \"iana\"\n },\n \"audio/ulpfec\": {\n \"source\": \"iana\"\n },\n \"audio/usac\": {\n \"source\": \"iana\"\n },\n \"audio/vdvi\": {\n \"source\": \"iana\"\n },\n \"audio/vmr-wb\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.3gpp.iufp\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.4sb\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.audiokoz\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.celp\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.cisco.nse\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.cmles.radio-events\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.cns.anp1\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.cns.inf1\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.dece.audio\": {\n \"source\": \"iana\",\n \"extensions\": [\"uva\",\"uvva\"]\n },\n \"audio/vnd.digital-winds\": {\n \"source\": \"iana\",\n \"extensions\": [\"eol\"]\n },\n \"audio/vnd.dlna.adts\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.dolby.heaac.1\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.dolby.heaac.2\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.dolby.mlp\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.dolby.mps\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.dolby.pl2\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.dolby.pl2x\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.dolby.pl2z\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.dolby.pulse.1\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.dra\": {\n \"source\": \"iana\",\n \"extensions\": [\"dra\"]\n },\n \"audio/vnd.dts\": {\n \"source\": \"iana\",\n \"extensions\": [\"dts\"]\n },\n \"audio/vnd.dts.hd\": {\n \"source\": \"iana\",\n \"extensions\": [\"dtshd\"]\n },\n \"audio/vnd.dts.uhd\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.dvb.file\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.everad.plj\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.hns.audio\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.lucent.voice\": {\n \"source\": \"iana\",\n \"extensions\": [\"lvp\"]\n },\n \"audio/vnd.ms-playready.media.pya\": {\n \"source\": \"iana\",\n \"extensions\": [\"pya\"]\n },\n \"audio/vnd.nokia.mobile-xmf\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.nortel.vbk\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.nuera.ecelp4800\": {\n \"source\": \"iana\",\n \"extensions\": [\"ecelp4800\"]\n },\n \"audio/vnd.nuera.ecelp7470\": {\n \"source\": \"iana\",\n \"extensions\": [\"ecelp7470\"]\n },\n \"audio/vnd.nuera.ecelp9600\": {\n \"source\": \"iana\",\n \"extensions\": [\"ecelp9600\"]\n },\n \"audio/vnd.octel.sbc\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.presonus.multitrack\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.qcelp\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.rhetorex.32kadpcm\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.rip\": {\n \"source\": \"iana\",\n \"extensions\": [\"rip\"]\n },\n \"audio/vnd.rn-realaudio\": {\n \"compressible\": false\n },\n \"audio/vnd.sealedmedia.softseal.mpeg\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.vmx.cvsd\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.wave\": {\n \"compressible\": false\n },\n \"audio/vorbis\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"audio/vorbis-config\": {\n \"source\": \"iana\"\n },\n \"audio/wav\": {\n \"compressible\": false,\n \"extensions\": [\"wav\"]\n },\n \"audio/wave\": {\n \"compressible\": false,\n \"extensions\": [\"wav\"]\n },\n \"audio/webm\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"weba\"]\n },\n \"audio/x-aac\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"aac\"]\n },\n \"audio/x-aiff\": {\n \"source\": \"apache\",\n \"extensions\": [\"aif\",\"aiff\",\"aifc\"]\n },\n \"audio/x-caf\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"caf\"]\n },\n \"audio/x-flac\": {\n \"source\": \"apache\",\n \"extensions\": [\"flac\"]\n },\n \"audio/x-m4a\": {\n \"source\": \"nginx\",\n \"extensions\": [\"m4a\"]\n },\n \"audio/x-matroska\": {\n \"source\": \"apache\",\n \"extensions\": [\"mka\"]\n },\n \"audio/x-mpegurl\": {\n \"source\": \"apache\",\n \"extensions\": [\"m3u\"]\n },\n \"audio/x-ms-wax\": {\n \"source\": \"apache\",\n \"extensions\": [\"wax\"]\n },\n \"audio/x-ms-wma\": {\n \"source\": \"apache\",\n \"extensions\": [\"wma\"]\n },\n \"audio/x-pn-realaudio\": {\n \"source\": \"apache\",\n \"extensions\": [\"ram\",\"ra\"]\n },\n \"audio/x-pn-realaudio-plugin\": {\n \"source\": \"apache\",\n \"extensions\": [\"rmp\"]\n },\n \"audio/x-realaudio\": {\n \"source\": \"nginx\",\n \"extensions\": [\"ra\"]\n },\n \"audio/x-tta\": {\n \"source\": \"apache\"\n },\n \"audio/x-wav\": {\n \"source\": \"apache\",\n \"extensions\": [\"wav\"]\n },\n \"audio/xm\": {\n \"source\": \"apache\",\n \"extensions\": [\"xm\"]\n },\n \"chemical/x-cdx\": {\n \"source\": \"apache\",\n \"extensions\": [\"cdx\"]\n },\n \"chemical/x-cif\": {\n \"source\": \"apache\",\n \"extensions\": [\"cif\"]\n },\n \"chemical/x-cmdf\": {\n \"source\": \"apache\",\n \"extensions\": [\"cmdf\"]\n },\n \"chemical/x-cml\": {\n \"source\": \"apache\",\n \"extensions\": [\"cml\"]\n },\n \"chemical/x-csml\": {\n \"source\": \"apache\",\n \"extensions\": [\"csml\"]\n },\n \"chemical/x-pdb\": {\n \"source\": \"apache\"\n },\n \"chemical/x-xyz\": {\n \"source\": \"apache\",\n \"extensions\": [\"xyz\"]\n },\n \"font/collection\": {\n \"source\": \"iana\",\n \"extensions\": [\"ttc\"]\n },\n \"font/otf\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"otf\"]\n },\n \"font/sfnt\": {\n \"source\": \"iana\"\n },\n \"font/ttf\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"ttf\"]\n },\n \"font/woff\": {\n \"source\": \"iana\",\n \"extensions\": [\"woff\"]\n },\n \"font/woff2\": {\n \"source\": \"iana\",\n \"extensions\": [\"woff2\"]\n },\n \"image/aces\": {\n \"source\": \"iana\",\n \"extensions\": [\"exr\"]\n },\n \"image/apng\": {\n \"compressible\": false,\n \"extensions\": [\"apng\"]\n },\n \"image/avci\": {\n \"source\": \"iana\",\n \"extensions\": [\"avci\"]\n },\n \"image/avcs\": {\n \"source\": \"iana\",\n \"extensions\": [\"avcs\"]\n },\n \"image/avif\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"avif\"]\n },\n \"image/bmp\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"bmp\"]\n },\n \"image/cgm\": {\n \"source\": \"iana\",\n \"extensions\": [\"cgm\"]\n },\n \"image/dicom-rle\": {\n \"source\": \"iana\",\n \"extensions\": [\"drle\"]\n },\n \"image/emf\": {\n \"source\": \"iana\",\n \"extensions\": [\"emf\"]\n },\n \"image/fits\": {\n \"source\": \"iana\",\n \"extensions\": [\"fits\"]\n },\n \"image/g3fax\": {\n \"source\": \"iana\",\n \"extensions\": [\"g3\"]\n },\n \"image/gif\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"gif\"]\n },\n \"image/heic\": {\n \"source\": \"iana\",\n \"extensions\": [\"heic\"]\n },\n \"image/heic-sequence\": {\n \"source\": \"iana\",\n \"extensions\": [\"heics\"]\n },\n \"image/heif\": {\n \"source\": \"iana\",\n \"extensions\": [\"heif\"]\n },\n \"image/heif-sequence\": {\n \"source\": \"iana\",\n \"extensions\": [\"heifs\"]\n },\n \"image/hej2k\": {\n \"source\": \"iana\",\n \"extensions\": [\"hej2\"]\n },\n \"image/hsj2\": {\n \"source\": \"iana\",\n \"extensions\": [\"hsj2\"]\n },\n \"image/ief\": {\n \"source\": \"iana\",\n \"extensions\": [\"ief\"]\n },\n \"image/jls\": {\n \"source\": \"iana\",\n \"extensions\": [\"jls\"]\n },\n \"image/jp2\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"jp2\",\"jpg2\"]\n },\n \"image/jpeg\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"jpeg\",\"jpg\",\"jpe\"]\n },\n \"image/jph\": {\n \"source\": \"iana\",\n \"extensions\": [\"jph\"]\n },\n \"image/jphc\": {\n \"source\": \"iana\",\n \"extensions\": [\"jhc\"]\n },\n \"image/jpm\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"jpm\"]\n },\n \"image/jpx\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"jpx\",\"jpf\"]\n },\n \"image/jxr\": {\n \"source\": \"iana\",\n \"extensions\": [\"jxr\"]\n },\n \"image/jxra\": {\n \"source\": \"iana\",\n \"extensions\": [\"jxra\"]\n },\n \"image/jxrs\": {\n \"source\": \"iana\",\n \"extensions\": [\"jxrs\"]\n },\n \"image/jxs\": {\n \"source\": \"iana\",\n \"extensions\": [\"jxs\"]\n },\n \"image/jxsc\": {\n \"source\": \"iana\",\n \"extensions\": [\"jxsc\"]\n },\n \"image/jxsi\": {\n \"source\": \"iana\",\n \"extensions\": [\"jxsi\"]\n },\n \"image/jxss\": {\n \"source\": \"iana\",\n \"extensions\": [\"jxss\"]\n },\n \"image/ktx\": {\n \"source\": \"iana\",\n \"extensions\": [\"ktx\"]\n },\n \"image/ktx2\": {\n \"source\": \"iana\",\n \"extensions\": [\"ktx2\"]\n },\n \"image/naplps\": {\n \"source\": \"iana\"\n },\n \"image/pjpeg\": {\n \"compressible\": false\n },\n \"image/png\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"png\"]\n },\n \"image/prs.btif\": {\n \"source\": \"iana\",\n \"extensions\": [\"btif\"]\n },\n \"image/prs.pti\": {\n \"source\": \"iana\",\n \"extensions\": [\"pti\"]\n },\n \"image/pwg-raster\": {\n \"source\": \"iana\"\n },\n \"image/sgi\": {\n \"source\": \"apache\",\n \"extensions\": [\"sgi\"]\n },\n \"image/svg+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"svg\",\"svgz\"]\n },\n \"image/t38\": {\n \"source\": \"iana\",\n \"extensions\": [\"t38\"]\n },\n \"image/tiff\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"tif\",\"tiff\"]\n },\n \"image/tiff-fx\": {\n \"source\": \"iana\",\n \"extensions\": [\"tfx\"]\n },\n \"image/vnd.adobe.photoshop\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"psd\"]\n },\n \"image/vnd.airzip.accelerator.azv\": {\n \"source\": \"iana\",\n \"extensions\": [\"azv\"]\n },\n \"image/vnd.cns.inf2\": {\n \"source\": \"iana\"\n },\n \"image/vnd.dece.graphic\": {\n \"source\": \"iana\",\n \"extensions\": [\"uvi\",\"uvvi\",\"uvg\",\"uvvg\"]\n },\n \"image/vnd.djvu\": {\n \"source\": \"iana\",\n \"extensions\": [\"djvu\",\"djv\"]\n },\n \"image/vnd.dvb.subtitle\": {\n \"source\": \"iana\",\n \"extensions\": [\"sub\"]\n },\n \"image/vnd.dwg\": {\n \"source\": \"iana\",\n \"extensions\": [\"dwg\"]\n },\n \"image/vnd.dxf\": {\n \"source\": \"iana\",\n \"extensions\": [\"dxf\"]\n },\n \"image/vnd.fastbidsheet\": {\n \"source\": \"iana\",\n \"extensions\": [\"fbs\"]\n },\n \"image/vnd.fpx\": {\n \"source\": \"iana\",\n \"extensions\": [\"fpx\"]\n },\n \"image/vnd.fst\": {\n \"source\": \"iana\",\n \"extensions\": [\"fst\"]\n },\n \"image/vnd.fujixerox.edmics-mmr\": {\n \"source\": \"iana\",\n \"extensions\": [\"mmr\"]\n },\n \"image/vnd.fujixerox.edmics-rlc\": {\n \"source\": \"iana\",\n \"extensions\": [\"rlc\"]\n },\n \"image/vnd.globalgraphics.pgb\": {\n \"source\": \"iana\"\n },\n \"image/vnd.microsoft.icon\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"ico\"]\n },\n \"image/vnd.mix\": {\n \"source\": \"iana\"\n },\n \"image/vnd.mozilla.apng\": {\n \"source\": \"iana\"\n },\n \"image/vnd.ms-dds\": {\n \"compressible\": true,\n \"extensions\": [\"dds\"]\n },\n \"image/vnd.ms-modi\": {\n \"source\": \"iana\",\n \"extensions\": [\"mdi\"]\n },\n \"image/vnd.ms-photo\": {\n \"source\": \"apache\",\n \"extensions\": [\"wdp\"]\n },\n \"image/vnd.net-fpx\": {\n \"source\": \"iana\",\n \"extensions\": [\"npx\"]\n },\n \"image/vnd.pco.b16\": {\n \"source\": \"iana\",\n \"extensions\": [\"b16\"]\n },\n \"image/vnd.radiance\": {\n \"source\": \"iana\"\n },\n \"image/vnd.sealed.png\": {\n \"source\": \"iana\"\n },\n \"image/vnd.sealedmedia.softseal.gif\": {\n \"source\": \"iana\"\n },\n \"image/vnd.sealedmedia.softseal.jpg\": {\n \"source\": \"iana\"\n },\n \"image/vnd.svf\": {\n \"source\": \"iana\"\n },\n \"image/vnd.tencent.tap\": {\n \"source\": \"iana\",\n \"extensions\": [\"tap\"]\n },\n \"image/vnd.valve.source.texture\": {\n \"source\": \"iana\",\n \"extensions\": [\"vtf\"]\n },\n \"image/vnd.wap.wbmp\": {\n \"source\": \"iana\",\n \"extensions\": [\"wbmp\"]\n },\n \"image/vnd.xiff\": {\n \"source\": \"iana\",\n \"extensions\": [\"xif\"]\n },\n \"image/vnd.zbrush.pcx\": {\n \"source\": \"iana\",\n \"extensions\": [\"pcx\"]\n },\n \"image/webp\": {\n \"source\": \"apache\",\n \"extensions\": [\"webp\"]\n },\n \"image/wmf\": {\n \"source\": \"iana\",\n \"extensions\": [\"wmf\"]\n },\n \"image/x-3ds\": {\n \"source\": \"apache\",\n \"extensions\": [\"3ds\"]\n },\n \"image/x-cmu-raster\": {\n \"source\": \"apache\",\n \"extensions\": [\"ras\"]\n },\n \"image/x-cmx\": {\n \"source\": \"apache\",\n \"extensions\": [\"cmx\"]\n },\n \"image/x-freehand\": {\n \"source\": \"apache\",\n \"extensions\": [\"fh\",\"fhc\",\"fh4\",\"fh5\",\"fh7\"]\n },\n \"image/x-icon\": {\n \"source\": \"apache\",\n \"compressible\": true,\n \"extensions\": [\"ico\"]\n },\n \"image/x-jng\": {\n \"source\": \"nginx\",\n \"extensions\": [\"jng\"]\n },\n \"image/x-mrsid-image\": {\n \"source\": \"apache\",\n \"extensions\": [\"sid\"]\n },\n \"image/x-ms-bmp\": {\n \"source\": \"nginx\",\n \"compressible\": true,\n \"extensions\": [\"bmp\"]\n },\n \"image/x-pcx\": {\n \"source\": \"apache\",\n \"extensions\": [\"pcx\"]\n },\n \"image/x-pict\": {\n \"source\": \"apache\",\n \"extensions\": [\"pic\",\"pct\"]\n },\n \"image/x-portable-anymap\": {\n \"source\": \"apache\",\n \"extensions\": [\"pnm\"]\n },\n \"image/x-portable-bitmap\": {\n \"source\": \"apache\",\n \"extensions\": [\"pbm\"]\n },\n \"image/x-portable-graymap\": {\n \"source\": \"apache\",\n \"extensions\": [\"pgm\"]\n },\n \"image/x-portable-pixmap\": {\n \"source\": \"apache\",\n \"extensions\": [\"ppm\"]\n },\n \"image/x-rgb\": {\n \"source\": \"apache\",\n \"extensions\": [\"rgb\"]\n },\n \"image/x-tga\": {\n \"source\": \"apache\",\n \"extensions\": [\"tga\"]\n },\n \"image/x-xbitmap\": {\n \"source\": \"apache\",\n \"extensions\": [\"xbm\"]\n },\n \"image/x-xcf\": {\n \"compressible\": false\n },\n \"image/x-xpixmap\": {\n \"source\": \"apache\",\n \"extensions\": [\"xpm\"]\n },\n \"image/x-xwindowdump\": {\n \"source\": \"apache\",\n \"extensions\": [\"xwd\"]\n },\n \"message/cpim\": {\n \"source\": \"iana\"\n },\n \"message/delivery-status\": {\n \"source\": \"iana\"\n },\n \"message/disposition-notification\": {\n \"source\": \"iana\",\n \"extensions\": [\n \"disposition-notification\"\n ]\n },\n \"message/external-body\": {\n \"source\": \"iana\"\n },\n \"message/feedback-report\": {\n \"source\": \"iana\"\n },\n \"message/global\": {\n \"source\": \"iana\",\n \"extensions\": [\"u8msg\"]\n },\n \"message/global-delivery-status\": {\n \"source\": \"iana\",\n \"extensions\": [\"u8dsn\"]\n },\n \"message/global-disposition-notification\": {\n \"source\": \"iana\",\n \"extensions\": [\"u8mdn\"]\n },\n \"message/global-headers\": {\n \"source\": \"iana\",\n \"extensions\": [\"u8hdr\"]\n },\n \"message/http\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"message/imdn+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"message/news\": {\n \"source\": \"iana\"\n },\n \"message/partial\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"message/rfc822\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"eml\",\"mime\"]\n },\n \"message/s-http\": {\n \"source\": \"iana\"\n },\n \"message/sip\": {\n \"source\": \"iana\"\n },\n \"message/sipfrag\": {\n \"source\": \"iana\"\n },\n \"message/tracking-status\": {\n \"source\": \"iana\"\n },\n \"message/vnd.si.simp\": {\n \"source\": \"iana\"\n },\n \"message/vnd.wfa.wsc\": {\n \"source\": \"iana\",\n \"extensions\": [\"wsc\"]\n },\n \"model/3mf\": {\n \"source\": \"iana\",\n \"extensions\": [\"3mf\"]\n },\n \"model/e57\": {\n \"source\": \"iana\"\n },\n \"model/gltf+json\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"gltf\"]\n },\n \"model/gltf-binary\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"glb\"]\n },\n \"model/iges\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"igs\",\"iges\"]\n },\n \"model/mesh\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"msh\",\"mesh\",\"silo\"]\n },\n \"model/mtl\": {\n \"source\": \"iana\",\n \"extensions\": [\"mtl\"]\n },\n \"model/obj\": {\n \"source\": \"iana\",\n \"extensions\": [\"obj\"]\n },\n \"model/step\": {\n \"source\": \"iana\"\n },\n \"model/step+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"stpx\"]\n },\n \"model/step+zip\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"stpz\"]\n },\n \"model/step-xml+zip\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"stpxz\"]\n },\n \"model/stl\": {\n \"source\": \"iana\",\n \"extensions\": [\"stl\"]\n },\n \"model/vnd.collada+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"dae\"]\n },\n \"model/vnd.dwf\": {\n \"source\": \"iana\",\n \"extensions\": [\"dwf\"]\n },\n \"model/vnd.flatland.3dml\": {\n \"source\": \"iana\"\n },\n \"model/vnd.gdl\": {\n \"source\": \"iana\",\n \"extensions\": [\"gdl\"]\n },\n \"model/vnd.gs-gdl\": {\n \"source\": \"apache\"\n },\n \"model/vnd.gs.gdl\": {\n \"source\": \"iana\"\n },\n \"model/vnd.gtw\": {\n \"source\": \"iana\",\n \"extensions\": [\"gtw\"]\n },\n \"model/vnd.moml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"model/vnd.mts\": {\n \"source\": \"iana\",\n \"extensions\": [\"mts\"]\n },\n \"model/vnd.opengex\": {\n \"source\": \"iana\",\n \"extensions\": [\"ogex\"]\n },\n \"model/vnd.parasolid.transmit.binary\": {\n \"source\": \"iana\",\n \"extensions\": [\"x_b\"]\n },\n \"model/vnd.parasolid.transmit.text\": {\n \"source\": \"iana\",\n \"extensions\": [\"x_t\"]\n },\n \"model/vnd.pytha.pyox\": {\n \"source\": \"iana\"\n },\n \"model/vnd.rosette.annotated-data-model\": {\n \"source\": \"iana\"\n },\n \"model/vnd.sap.vds\": {\n \"source\": \"iana\",\n \"extensions\": [\"vds\"]\n },\n \"model/vnd.usdz+zip\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"usdz\"]\n },\n \"model/vnd.valve.source.compiled-map\": {\n \"source\": \"iana\",\n \"extensions\": [\"bsp\"]\n },\n \"model/vnd.vtu\": {\n \"source\": \"iana\",\n \"extensions\": [\"vtu\"]\n },\n \"model/vrml\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"wrl\",\"vrml\"]\n },\n \"model/x3d+binary\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"x3db\",\"x3dbz\"]\n },\n \"model/x3d+fastinfoset\": {\n \"source\": \"iana\",\n \"extensions\": [\"x3db\"]\n },\n \"model/x3d+vrml\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"x3dv\",\"x3dvz\"]\n },\n \"model/x3d+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"x3d\",\"x3dz\"]\n },\n \"model/x3d-vrml\": {\n \"source\": \"iana\",\n \"extensions\": [\"x3dv\"]\n },\n \"multipart/alternative\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"multipart/appledouble\": {\n \"source\": \"iana\"\n },\n \"multipart/byteranges\": {\n \"source\": \"iana\"\n },\n \"multipart/digest\": {\n \"source\": \"iana\"\n },\n \"multipart/encrypted\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"multipart/form-data\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"multipart/header-set\": {\n \"source\": \"iana\"\n },\n \"multipart/mixed\": {\n \"source\": \"iana\"\n },\n \"multipart/multilingual\": {\n \"source\": \"iana\"\n },\n \"multipart/parallel\": {\n \"source\": \"iana\"\n },\n \"multipart/related\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"multipart/report\": {\n \"source\": \"iana\"\n },\n \"multipart/signed\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"multipart/vnd.bint.med-plus\": {\n \"source\": \"iana\"\n },\n \"multipart/voice-message\": {\n \"source\": \"iana\"\n },\n \"multipart/x-mixed-replace\": {\n \"source\": \"iana\"\n },\n \"text/1d-interleaved-parityfec\": {\n \"source\": \"iana\"\n },\n \"text/cache-manifest\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"appcache\",\"manifest\"]\n },\n \"text/calendar\": {\n \"source\": \"iana\",\n \"extensions\": [\"ics\",\"ifb\"]\n },\n \"text/calender\": {\n \"compressible\": true\n },\n \"text/cmd\": {\n \"compressible\": true\n },\n \"text/coffeescript\": {\n \"extensions\": [\"coffee\",\"litcoffee\"]\n },\n \"text/cql\": {\n \"source\": \"iana\"\n },\n \"text/cql-expression\": {\n \"source\": \"iana\"\n },\n \"text/cql-identifier\": {\n \"source\": \"iana\"\n },\n \"text/css\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true,\n \"extensions\": [\"css\"]\n },\n \"text/csv\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"csv\"]\n },\n \"text/csv-schema\": {\n \"source\": \"iana\"\n },\n \"text/directory\": {\n \"source\": \"iana\"\n },\n \"text/dns\": {\n \"source\": \"iana\"\n },\n \"text/ecmascript\": {\n \"source\": \"iana\"\n },\n \"text/encaprtp\": {\n \"source\": \"iana\"\n },\n \"text/enriched\": {\n \"source\": \"iana\"\n },\n \"text/fhirpath\": {\n \"source\": \"iana\"\n },\n \"text/flexfec\": {\n \"source\": \"iana\"\n },\n \"text/fwdred\": {\n \"source\": \"iana\"\n },\n \"text/gff3\": {\n \"source\": \"iana\"\n },\n \"text/grammar-ref-list\": {\n \"source\": \"iana\"\n },\n \"text/html\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"html\",\"htm\",\"shtml\"]\n },\n \"text/jade\": {\n \"extensions\": [\"jade\"]\n },\n \"text/javascript\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"text/jcr-cnd\": {\n \"source\": \"iana\"\n },\n \"text/jsx\": {\n \"compressible\": true,\n \"extensions\": [\"jsx\"]\n },\n \"text/less\": {\n \"compressible\": true,\n \"extensions\": [\"less\"]\n },\n \"text/markdown\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"markdown\",\"md\"]\n },\n \"text/mathml\": {\n \"source\": \"nginx\",\n \"extensions\": [\"mml\"]\n },\n \"text/mdx\": {\n \"compressible\": true,\n \"extensions\": [\"mdx\"]\n },\n \"text/mizar\": {\n \"source\": \"iana\"\n },\n \"text/n3\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true,\n \"extensions\": [\"n3\"]\n },\n \"text/parameters\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\"\n },\n \"text/parityfec\": {\n \"source\": \"iana\"\n },\n \"text/plain\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"txt\",\"text\",\"conf\",\"def\",\"list\",\"log\",\"in\",\"ini\"]\n },\n \"text/provenance-notation\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\"\n },\n \"text/prs.fallenstein.rst\": {\n \"source\": \"iana\"\n },\n \"text/prs.lines.tag\": {\n \"source\": \"iana\",\n \"extensions\": [\"dsc\"]\n },\n \"text/prs.prop.logic\": {\n \"source\": \"iana\"\n },\n \"text/raptorfec\": {\n \"source\": \"iana\"\n },\n \"text/red\": {\n \"source\": \"iana\"\n },\n \"text/rfc822-headers\": {\n \"source\": \"iana\"\n },\n \"text/richtext\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"rtx\"]\n },\n \"text/rtf\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"rtf\"]\n },\n \"text/rtp-enc-aescm128\": {\n \"source\": \"iana\"\n },\n \"text/rtploopback\": {\n \"source\": \"iana\"\n },\n \"text/rtx\": {\n \"source\": \"iana\"\n },\n \"text/sgml\": {\n \"source\": \"iana\",\n \"extensions\": [\"sgml\",\"sgm\"]\n },\n \"text/shaclc\": {\n \"source\": \"iana\"\n },\n \"text/shex\": {\n \"source\": \"iana\",\n \"extensions\": [\"shex\"]\n },\n \"text/slim\": {\n \"extensions\": [\"slim\",\"slm\"]\n },\n \"text/spdx\": {\n \"source\": \"iana\",\n \"extensions\": [\"spdx\"]\n },\n \"text/strings\": {\n \"source\": \"iana\"\n },\n \"text/stylus\": {\n \"extensions\": [\"stylus\",\"styl\"]\n },\n \"text/t140\": {\n \"source\": \"iana\"\n },\n \"text/tab-separated-values\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"tsv\"]\n },\n \"text/troff\": {\n \"source\": \"iana\",\n \"extensions\": [\"t\",\"tr\",\"roff\",\"man\",\"me\",\"ms\"]\n },\n \"text/turtle\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"extensions\": [\"ttl\"]\n },\n \"text/ulpfec\": {\n \"source\": \"iana\"\n },\n \"text/uri-list\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"uri\",\"uris\",\"urls\"]\n },\n \"text/vcard\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"vcard\"]\n },\n \"text/vnd.a\": {\n \"source\": \"iana\"\n },\n \"text/vnd.abc\": {\n \"source\": \"iana\"\n },\n \"text/vnd.ascii-art\": {\n \"source\": \"iana\"\n },\n \"text/vnd.curl\": {\n \"source\": \"iana\",\n \"extensions\": [\"curl\"]\n },\n \"text/vnd.curl.dcurl\": {\n \"source\": \"apache\",\n \"extensions\": [\"dcurl\"]\n },\n \"text/vnd.curl.mcurl\": {\n \"source\": \"apache\",\n \"extensions\": [\"mcurl\"]\n },\n \"text/vnd.curl.scurl\": {\n \"source\": \"apache\",\n \"extensions\": [\"scurl\"]\n },\n \"text/vnd.debian.copyright\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\"\n },\n \"text/vnd.dmclientscript\": {\n \"source\": \"iana\"\n },\n \"text/vnd.dvb.subtitle\": {\n \"source\": \"iana\",\n \"extensions\": [\"sub\"]\n },\n \"text/vnd.esmertec.theme-descriptor\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\"\n },\n \"text/vnd.familysearch.gedcom\": {\n \"source\": \"iana\",\n \"extensions\": [\"ged\"]\n },\n \"text/vnd.ficlab.flt\": {\n \"source\": \"iana\"\n },\n \"text/vnd.fly\": {\n \"source\": \"iana\",\n \"extensions\": [\"fly\"]\n },\n \"text/vnd.fmi.flexstor\": {\n \"source\": \"iana\",\n \"extensions\": [\"flx\"]\n },\n \"text/vnd.gml\": {\n \"source\": \"iana\"\n },\n \"text/vnd.graphviz\": {\n \"source\": \"iana\",\n \"extensions\": [\"gv\"]\n },\n \"text/vnd.hans\": {\n \"source\": \"iana\"\n },\n \"text/vnd.hgl\": {\n \"source\": \"iana\"\n },\n \"text/vnd.in3d.3dml\": {\n \"source\": \"iana\",\n \"extensions\": [\"3dml\"]\n },\n \"text/vnd.in3d.spot\": {\n \"source\": \"iana\",\n \"extensions\": [\"spot\"]\n },\n \"text/vnd.iptc.newsml\": {\n \"source\": \"iana\"\n },\n \"text/vnd.iptc.nitf\": {\n \"source\": \"iana\"\n },\n \"text/vnd.latex-z\": {\n \"source\": \"iana\"\n },\n \"text/vnd.motorola.reflex\": {\n \"source\": \"iana\"\n },\n \"text/vnd.ms-mediapackage\": {\n \"source\": \"iana\"\n },\n \"text/vnd.net2phone.commcenter.command\": {\n \"source\": \"iana\"\n },\n \"text/vnd.radisys.msml-basic-layout\": {\n \"source\": \"iana\"\n },\n \"text/vnd.senx.warpscript\": {\n \"source\": \"iana\"\n },\n \"text/vnd.si.uricatalogue\": {\n \"source\": \"iana\"\n },\n \"text/vnd.sosi\": {\n \"source\": \"iana\"\n },\n \"text/vnd.sun.j2me.app-descriptor\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"extensions\": [\"jad\"]\n },\n \"text/vnd.trolltech.linguist\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\"\n },\n \"text/vnd.wap.si\": {\n \"source\": \"iana\"\n },\n \"text/vnd.wap.sl\": {\n \"source\": \"iana\"\n },\n \"text/vnd.wap.wml\": {\n \"source\": \"iana\",\n \"extensions\": [\"wml\"]\n },\n \"text/vnd.wap.wmlscript\": {\n \"source\": \"iana\",\n \"extensions\": [\"wmls\"]\n },\n \"text/vtt\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true,\n \"extensions\": [\"vtt\"]\n },\n \"text/x-asm\": {\n \"source\": \"apache\",\n \"extensions\": [\"s\",\"asm\"]\n },\n \"text/x-c\": {\n \"source\": \"apache\",\n \"extensions\": [\"c\",\"cc\",\"cxx\",\"cpp\",\"h\",\"hh\",\"dic\"]\n },\n \"text/x-component\": {\n \"source\": \"nginx\",\n \"extensions\": [\"htc\"]\n },\n \"text/x-fortran\": {\n \"source\": \"apache\",\n \"extensions\": [\"f\",\"for\",\"f77\",\"f90\"]\n },\n \"text/x-gwt-rpc\": {\n \"compressible\": true\n },\n \"text/x-handlebars-template\": {\n \"extensions\": [\"hbs\"]\n },\n \"text/x-java-source\": {\n \"source\": \"apache\",\n \"extensions\": [\"java\"]\n },\n \"text/x-jquery-tmpl\": {\n \"compressible\": true\n },\n \"text/x-lua\": {\n \"extensions\": [\"lua\"]\n },\n \"text/x-markdown\": {\n \"compressible\": true,\n \"extensions\": [\"mkd\"]\n },\n \"text/x-nfo\": {\n \"source\": \"apache\",\n \"extensions\": [\"nfo\"]\n },\n \"text/x-opml\": {\n \"source\": \"apache\",\n \"extensions\": [\"opml\"]\n },\n \"text/x-org\": {\n \"compressible\": true,\n \"extensions\": [\"org\"]\n },\n \"text/x-pascal\": {\n \"source\": \"apache\",\n \"extensions\": [\"p\",\"pas\"]\n },\n \"text/x-processing\": {\n \"compressible\": true,\n \"extensions\": [\"pde\"]\n },\n \"text/x-sass\": {\n \"extensions\": [\"sass\"]\n },\n \"text/x-scss\": {\n \"extensions\": [\"scss\"]\n },\n \"text/x-setext\": {\n \"source\": \"apache\",\n \"extensions\": [\"etx\"]\n },\n \"text/x-sfv\": {\n \"source\": \"apache\",\n \"extensions\": [\"sfv\"]\n },\n \"text/x-suse-ymp\": {\n \"compressible\": true,\n \"extensions\": [\"ymp\"]\n },\n \"text/x-uuencode\": {\n \"source\": \"apache\",\n \"extensions\": [\"uu\"]\n },\n \"text/x-vcalendar\": {\n \"source\": \"apache\",\n \"extensions\": [\"vcs\"]\n },\n \"text/x-vcard\": {\n \"source\": \"apache\",\n \"extensions\": [\"vcf\"]\n },\n \"text/xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"xml\"]\n },\n \"text/xml-external-parsed-entity\": {\n \"source\": \"iana\"\n },\n \"text/yaml\": {\n \"compressible\": true,\n \"extensions\": [\"yaml\",\"yml\"]\n },\n \"video/1d-interleaved-parityfec\": {\n \"source\": \"iana\"\n },\n \"video/3gpp\": {\n \"source\": \"iana\",\n \"extensions\": [\"3gp\",\"3gpp\"]\n },\n \"video/3gpp-tt\": {\n \"source\": \"iana\"\n },\n \"video/3gpp2\": {\n \"source\": \"iana\",\n \"extensions\": [\"3g2\"]\n },\n \"video/av1\": {\n \"source\": \"iana\"\n },\n \"video/bmpeg\": {\n \"source\": \"iana\"\n },\n \"video/bt656\": {\n \"source\": \"iana\"\n },\n \"video/celb\": {\n \"source\": \"iana\"\n },\n \"video/dv\": {\n \"source\": \"iana\"\n },\n \"video/encaprtp\": {\n \"source\": \"iana\"\n },\n \"video/ffv1\": {\n \"source\": \"iana\"\n },\n \"video/flexfec\": {\n \"source\": \"iana\"\n },\n \"video/h261\": {\n \"source\": \"iana\",\n \"extensions\": [\"h261\"]\n },\n \"video/h263\": {\n \"source\": \"iana\",\n \"extensions\": [\"h263\"]\n },\n \"video/h263-1998\": {\n \"source\": \"iana\"\n },\n \"video/h263-2000\": {\n \"source\": \"iana\"\n },\n \"video/h264\": {\n \"source\": \"iana\",\n \"extensions\": [\"h264\"]\n },\n \"video/h264-rcdo\": {\n \"source\": \"iana\"\n },\n \"video/h264-svc\": {\n \"source\": \"iana\"\n },\n \"video/h265\": {\n \"source\": \"iana\"\n },\n \"video/iso.segment\": {\n \"source\": \"iana\",\n \"extensions\": [\"m4s\"]\n },\n \"video/jpeg\": {\n \"source\": \"iana\",\n \"extensions\": [\"jpgv\"]\n },\n \"video/jpeg2000\": {\n \"source\": \"iana\"\n },\n \"video/jpm\": {\n \"source\": \"apache\",\n \"extensions\": [\"jpm\",\"jpgm\"]\n },\n \"video/jxsv\": {\n \"source\": \"iana\"\n },\n \"video/mj2\": {\n \"source\": \"iana\",\n \"extensions\": [\"mj2\",\"mjp2\"]\n },\n \"video/mp1s\": {\n \"source\": \"iana\"\n },\n \"video/mp2p\": {\n \"source\": \"iana\"\n },\n \"video/mp2t\": {\n \"source\": \"iana\",\n \"extensions\": [\"ts\"]\n },\n \"video/mp4\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"mp4\",\"mp4v\",\"mpg4\"]\n },\n \"video/mp4v-es\": {\n \"source\": \"iana\"\n },\n \"video/mpeg\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"mpeg\",\"mpg\",\"mpe\",\"m1v\",\"m2v\"]\n },\n \"video/mpeg4-generic\": {\n \"source\": \"iana\"\n },\n \"video/mpv\": {\n \"source\": \"iana\"\n },\n \"video/nv\": {\n \"source\": \"iana\"\n },\n \"video/ogg\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"ogv\"]\n },\n \"video/parityfec\": {\n \"source\": \"iana\"\n },\n \"video/pointer\": {\n \"source\": \"iana\"\n },\n \"video/quicktime\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"qt\",\"mov\"]\n },\n \"video/raptorfec\": {\n \"source\": \"iana\"\n },\n \"video/raw\": {\n \"source\": \"iana\"\n },\n \"video/rtp-enc-aescm128\": {\n \"source\": \"iana\"\n },\n \"video/rtploopback\": {\n \"source\": \"iana\"\n },\n \"video/rtx\": {\n \"source\": \"iana\"\n },\n \"video/scip\": {\n \"source\": \"iana\"\n },\n \"video/smpte291\": {\n \"source\": \"iana\"\n },\n \"video/smpte292m\": {\n \"source\": \"iana\"\n },\n \"video/ulpfec\": {\n \"source\": \"iana\"\n },\n \"video/vc1\": {\n \"source\": \"iana\"\n },\n \"video/vc2\": {\n \"source\": \"iana\"\n },\n \"video/vnd.cctv\": {\n \"source\": \"iana\"\n },\n \"video/vnd.dece.hd\": {\n \"source\": \"iana\",\n \"extensions\": [\"uvh\",\"uvvh\"]\n },\n \"video/vnd.dece.mobile\": {\n \"source\": \"iana\",\n \"extensions\": [\"uvm\",\"uvvm\"]\n },\n \"video/vnd.dece.mp4\": {\n \"source\": \"iana\"\n },\n \"video/vnd.dece.pd\": {\n \"source\": \"iana\",\n \"extensions\": [\"uvp\",\"uvvp\"]\n },\n \"video/vnd.dece.sd\": {\n \"source\": \"iana\",\n \"extensions\": [\"uvs\",\"uvvs\"]\n },\n \"video/vnd.dece.video\": {\n \"source\": \"iana\",\n \"extensions\": [\"uvv\",\"uvvv\"]\n },\n \"video/vnd.directv.mpeg\": {\n \"source\": \"iana\"\n },\n \"video/vnd.directv.mpeg-tts\": {\n \"source\": \"iana\"\n },\n \"video/vnd.dlna.mpeg-tts\": {\n \"source\": \"iana\"\n },\n \"video/vnd.dvb.file\": {\n \"source\": \"iana\",\n \"extensions\": [\"dvb\"]\n },\n \"video/vnd.fvt\": {\n \"source\": \"iana\",\n \"extensions\": [\"fvt\"]\n },\n \"video/vnd.hns.video\": {\n \"source\": \"iana\"\n },\n \"video/vnd.iptvforum.1dparityfec-1010\": {\n \"source\": \"iana\"\n },\n \"video/vnd.iptvforum.1dparityfec-2005\": {\n \"source\": \"iana\"\n },\n \"video/vnd.iptvforum.2dparityfec-1010\": {\n \"source\": \"iana\"\n },\n \"video/vnd.iptvforum.2dparityfec-2005\": {\n \"source\": \"iana\"\n },\n \"video/vnd.iptvforum.ttsavc\": {\n \"source\": \"iana\"\n },\n \"video/vnd.iptvforum.ttsmpeg2\": {\n \"source\": \"iana\"\n },\n \"video/vnd.motorola.video\": {\n \"source\": \"iana\"\n },\n \"video/vnd.motorola.videop\": {\n \"source\": \"iana\"\n },\n \"video/vnd.mpegurl\": {\n \"source\": \"iana\",\n \"extensions\": [\"mxu\",\"m4u\"]\n },\n \"video/vnd.ms-playready.media.pyv\": {\n \"source\": \"iana\",\n \"extensions\": [\"pyv\"]\n },\n \"video/vnd.nokia.interleaved-multimedia\": {\n \"source\": \"iana\"\n },\n \"video/vnd.nokia.mp4vr\": {\n \"source\": \"iana\"\n },\n \"video/vnd.nokia.videovoip\": {\n \"source\": \"iana\"\n },\n \"video/vnd.objectvideo\": {\n \"source\": \"iana\"\n },\n \"video/vnd.radgamettools.bink\": {\n \"source\": \"iana\"\n },\n \"video/vnd.radgamettools.smacker\": {\n \"source\": \"iana\"\n },\n \"video/vnd.sealed.mpeg1\": {\n \"source\": \"iana\"\n },\n \"video/vnd.sealed.mpeg4\": {\n \"source\": \"iana\"\n },\n \"video/vnd.sealed.swf\": {\n \"source\": \"iana\"\n },\n \"video/vnd.sealedmedia.softseal.mov\": {\n \"source\": \"iana\"\n },\n \"video/vnd.uvvu.mp4\": {\n \"source\": \"iana\",\n \"extensions\": [\"uvu\",\"uvvu\"]\n },\n \"video/vnd.vivo\": {\n \"source\": \"iana\",\n \"extensions\": [\"viv\"]\n },\n \"video/vnd.youtube.yt\": {\n \"source\": \"iana\"\n },\n \"video/vp8\": {\n \"source\": \"iana\"\n },\n \"video/vp9\": {\n \"source\": \"iana\"\n },\n \"video/webm\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"webm\"]\n },\n \"video/x-f4v\": {\n \"source\": \"apache\",\n \"extensions\": [\"f4v\"]\n },\n \"video/x-fli\": {\n \"source\": \"apache\",\n \"extensions\": [\"fli\"]\n },\n \"video/x-flv\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"flv\"]\n },\n \"video/x-m4v\": {\n \"source\": \"apache\",\n \"extensions\": [\"m4v\"]\n },\n \"video/x-matroska\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"mkv\",\"mk3d\",\"mks\"]\n },\n \"video/x-mng\": {\n \"source\": \"apache\",\n \"extensions\": [\"mng\"]\n },\n \"video/x-ms-asf\": {\n \"source\": \"apache\",\n \"extensions\": [\"asf\",\"asx\"]\n },\n \"video/x-ms-vob\": {\n \"source\": \"apache\",\n \"extensions\": [\"vob\"]\n },\n \"video/x-ms-wm\": {\n \"source\": \"apache\",\n \"extensions\": [\"wm\"]\n },\n \"video/x-ms-wmv\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"wmv\"]\n },\n \"video/x-ms-wmx\": {\n \"source\": \"apache\",\n \"extensions\": [\"wmx\"]\n },\n \"video/x-ms-wvx\": {\n \"source\": \"apache\",\n \"extensions\": [\"wvx\"]\n },\n \"video/x-msvideo\": {\n \"source\": \"apache\",\n \"extensions\": [\"avi\"]\n },\n \"video/x-sgi-movie\": {\n \"source\": \"apache\",\n \"extensions\": [\"movie\"]\n },\n \"video/x-smv\": {\n \"source\": \"apache\",\n \"extensions\": [\"smv\"]\n },\n \"x-conference/x-cooltalk\": {\n \"source\": \"apache\",\n \"extensions\": [\"ice\"]\n },\n \"x-shader/x-fragment\": {\n \"compressible\": true\n },\n \"x-shader/x-vertex\": {\n \"compressible\": true\n }\n}\n","/*!\n * mime-db\n * Copyright(c) 2014 Jonathan Ong\n * Copyright(c) 2015-2022 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n/**\n * Module exports.\n */\n\nmodule.exports = require('./db.json')\n","/*!\n * mime-types\n * Copyright(c) 2014 Jonathan Ong\n * Copyright(c) 2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar db = require('mime-db')\nvar extname = require('path').extname\n\n/**\n * Module variables.\n * @private\n */\n\nvar EXTRACT_TYPE_REGEXP = /^\\s*([^;\\s]*)(?:;|\\s|$)/\nvar TEXT_TYPE_REGEXP = /^text\\//i\n\n/**\n * Module exports.\n * @public\n */\n\nexports.charset = charset\nexports.charsets = { lookup: charset }\nexports.contentType = contentType\nexports.extension = extension\nexports.extensions = Object.create(null)\nexports.lookup = lookup\nexports.types = Object.create(null)\n\n// Populate the extensions/types maps\npopulateMaps(exports.extensions, exports.types)\n\n/**\n * Get the default charset for a MIME type.\n *\n * @param {string} type\n * @return {boolean|string}\n */\n\nfunction charset (type) {\n if (!type || typeof type !== 'string') {\n return false\n }\n\n // TODO: use media-typer\n var match = EXTRACT_TYPE_REGEXP.exec(type)\n var mime = match && db[match[1].toLowerCase()]\n\n if (mime && mime.charset) {\n return mime.charset\n }\n\n // default text/* to utf-8\n if (match && TEXT_TYPE_REGEXP.test(match[1])) {\n return 'UTF-8'\n }\n\n return false\n}\n\n/**\n * Create a full Content-Type header given a MIME type or extension.\n *\n * @param {string} str\n * @return {boolean|string}\n */\n\nfunction contentType (str) {\n // TODO: should this even be in this module?\n if (!str || typeof str !== 'string') {\n return false\n }\n\n var mime = str.indexOf('/') === -1\n ? exports.lookup(str)\n : str\n\n if (!mime) {\n return false\n }\n\n // TODO: use content-type or other module\n if (mime.indexOf('charset') === -1) {\n var charset = exports.charset(mime)\n if (charset) mime += '; charset=' + charset.toLowerCase()\n }\n\n return mime\n}\n\n/**\n * Get the default extension for a MIME type.\n *\n * @param {string} type\n * @return {boolean|string}\n */\n\nfunction extension (type) {\n if (!type || typeof type !== 'string') {\n return false\n }\n\n // TODO: use media-typer\n var match = EXTRACT_TYPE_REGEXP.exec(type)\n\n // get extensions\n var exts = match && exports.extensions[match[1].toLowerCase()]\n\n if (!exts || !exts.length) {\n return false\n }\n\n return exts[0]\n}\n\n/**\n * Lookup the MIME type for a file path/extension.\n *\n * @param {string} path\n * @return {boolean|string}\n */\n\nfunction lookup (path) {\n if (!path || typeof path !== 'string') {\n return false\n }\n\n // get the extension (\"ext\" or \".ext\" or full path)\n var extension = extname('x.' + path)\n .toLowerCase()\n .substr(1)\n\n if (!extension) {\n return false\n }\n\n return exports.types[extension] || false\n}\n\n/**\n * Populate the extensions and types maps.\n * @private\n */\n\nfunction populateMaps (extensions, types) {\n // source preference (least -> most)\n var preference = ['nginx', 'apache', undefined, 'iana']\n\n Object.keys(db).forEach(function forEachMimeType (type) {\n var mime = db[type]\n var exts = mime.extensions\n\n if (!exts || !exts.length) {\n return\n }\n\n // mime -> extensions\n extensions[type] = exts\n\n // extension -> mime\n for (var i = 0; i < exts.length; i++) {\n var extension = exts[i]\n\n if (types[extension]) {\n var from = preference.indexOf(db[types[extension]].source)\n var to = preference.indexOf(mime.source)\n\n if (types[extension] !== 'application/octet-stream' &&\n (from > to || (from === to && types[extension].substr(0, 12) === 'application/'))) {\n // skip the remapping\n continue\n }\n }\n\n // set the extension -> mime\n types[extension] = type\n }\n })\n}\n","import { AccessTokenAuth, ApiKeyAuth, LocalAuth, OAuth2Auth, Options, SessionAuth, resolveAuth } from './options'\n\nimport { WorkerEndpoint } from './worker/worker_endpoint'\nimport { MAX_OPEN_SOURCES, PipelineConfigurationError } from './worker/pipeline_backend'\nimport { DataEndpoint } from './data/data_endpoint'\n\nimport { TransientPopId, WorkerOptions } from './worker/worker_options'\nimport { DataOptions } from './data/data_options'\nimport { WorkerSession, validatePop } from './worker/worker_types'\nimport { DataSession } from './data/data_types'\n\nexport { WorkerEndpoint } from './worker/worker_endpoint'\nexport { DataEndpoint, EyePopDataWebSocketError } from './data/data_endpoint'\n\nexport {\n Session,\n EndpointState,\n StreamTime,\n Prediction,\n PredictedClass,\n PredictedText,\n PredictedEmbedding,\n PredictedObject,\n PredictedMesh,\n PredictedKeyPoint,\n PredictedKeyPoints,\n PredictedMotion,\n Contour,\n Mask,\n Depth,\n Point2d,\n Point3d,\n} from './types'\n\nexport { DepthMap, decodeDepthMap } from './depth'\nexport { PointCloud, CloudBox, CloudBounds, Vector3, decodePointCloud, cloudOfObject, cloudOfDepth, cloudsOfPrediction } from './point_cloud'\nexport { Camera, CameraIntrinsics, CameraDistortion, CameraExtrinsics, Quaternion, Vector3d, QUATERNION_TOLERANCE, validateCamera } from './camera'\n\nexport {\n ChangeType,\n DataSession,\n ModelType,\n ChangeEvent,\n Asset,\n AnnotationType,\n Annotation,\n AssetStatus,\n OnChangeEvent,\n Model,\n ModelStatus,\n ModelUpdate,\n ModelCreate,\n DatasetCreate,\n Dataset,\n DatasetUpdate,\n DatasetHeroAssetUpdate,\n DatasetVersion,\n UserReview,\n TranscodeMode,\n AutoAnnotateParams,\n ModelTrainingStage,\n ModelTrainingProgress,\n ModelMetrics,\n ModelSample,\n AssetImport,\n ModelExport,\n ModelExportStatus,\n ModelPrecisionType,\n ModelFormat,\n QcAiHubExportParams,\n ExportedBy,\n ArtifactType,\n DatasetParent,\n CreateWorkflowConfig,\n CreateWorkflow,\n Workflow,\n DownloadResponse,\n AssetUrlType,\n AutoAnnotateStatus,\n DatasetAutoAnnotate,\n DatasetAutoAnnotateCreate,\n DatasetAutoAnnotateUpdate,\n InferRuntimeConfig,\n TransformInto,\n ResponseSchema,\n InferRequest,\n EvaluateFilter,\n EvaluateConfig,\n EvaluateRequest,\n EvaluationStatus,\n EvaluateRunInfo,\n EvaluateResponse,\n InferRunInfo,\n VlmAbilityStatus,\n AutoPromptConfig,\n AbilityAliasEntry,\n VlmAbilityCreate,\n VlmAbilityUpdate,\n VlmAbility,\n VlmAbilityGroupCreate,\n VlmAbilityGroupUpdate,\n VlmAbilityGroup,\n AliasResolution,\n AreaType,\n BaseArea,\n RectangleArea,\n ContourArea,\n TimeSpan,\n Roi,\n TaskType,\n TaskMode,\n BaseTask,\n ClassificationTask,\n AutoTask,\n} from './data/data_types'\n\nexport {\n WorkerSession,\n FileSource,\n MediaStreamSource,\n Source,\n PathSource,\n UrlSource,\n AssetUuidSource,\n StreamSource,\n ResultStream,\n VideoMode,\n ComponentParams,\n ProcessParams,\n ProcessRequest,\n MotionDetectConfig,\n PredictionVersion,\n DEFAULT_PREDICTION_VERSION,\n PopDepthMap,\n SourceDefaults,\n validatePop,\n} from './worker/worker_types'\n\nexport { Options, Authentication, SessionAuth, ApiKeyAuth, AccessTokenAuth, OAuth2Auth, Auth0Options, HttpClient, PlatformSupport, LocalAuth } from './options'\n\nexport { DataOptions } from './data/data_options'\n\nexport { WorkerOptions, TransientPopId } from './worker/worker_options'\n\nexport { EyepopLineDecoder } from './streaming'\n\nconst readEnv = (env: string): string | undefined => {\n if (typeof process !== 'undefined') {\n return process.env?.[env] ?? undefined\n }\n return undefined\n}\n\nlet warnedAccountIdEnv = false\n\nconst readAccountUuidEnv = (): string | undefined => {\n const accountUuid = readEnv('EYEPOP_ACCOUNT_UUID')\n if (accountUuid !== undefined) {\n return accountUuid\n }\n const accountId = readEnv('EYEPOP_ACCOUNT_ID')\n if (accountId !== undefined && !warnedAccountIdEnv) {\n warnedAccountIdEnv = true\n console.warn('EYEPOP_ACCOUNT_ID is deprecated, use EYEPOP_ACCOUNT_UUID instead')\n }\n return accountId\n}\n\nconst stringToBooleanSafe = (str?: string): boolean => {\n if (typeof str == 'undefined') {\n return false\n }\n const loweCaseStr = str.toLowerCase()\n return loweCaseStr == 'true' || loweCaseStr == 'yes'\n}\n\nexport namespace EyePop {\n const envApiKey = readEnv('EYEPOP_API_KEY')\n\n const defaultAuth: ApiKeyAuth | undefined = envApiKey\n ? {\n apiKey: envApiKey,\n }\n : undefined\n\n /**\n * @deprecated use workerEndpoint() instead\n */\n export const endpoint = workerEndpoint\n\n export function workerEndpoint(options: WorkerOptions = {}): WorkerEndpoint {\n // Defaults are filled into a copy, so a caller who reuses one options object\n // gets each endpoint resolved afresh, the account included.\n const opts: WorkerOptions = { ...options }\n if (opts.pop !== undefined) {\n // the initial Pop is serialized into the session-creation body, so\n // changePop()'s check never sees it - and this is the common way to\n // set one. Synchronous here, so a Pop that cannot mean what it says\n // fails at construction rather than at connect().\n validatePop(opts.pop)\n }\n if (opts.isLocalMode === undefined) {\n opts.isLocalMode = stringToBooleanSafe(readEnv('EYEPOP_LOCAL_MODE'))\n }\n if (opts.isPipelineMode === undefined) {\n // A session handed over from a pipeline mode endpoint carries a token for the pipeline\n // API, so its mode wins over the environment; an explicit isPipelineMode wins over both.\n const shared = (resolveAuth(opts) as SessionAuth | undefined)?.session as WorkerSession | undefined\n opts.isPipelineMode = shared?.isPipelineMode ?? stringToBooleanSafe(readEnv('EYEPOP_PIPELINE_MODE'))\n }\n if (opts.isPipelineMode) {\n return pipelineEndpoint(opts)\n }\n if (opts.isLocalMode) {\n opts.eyepopUrl = 'http://127.0.0.1:8080'\n }\n _fill_default_options(opts)\n if (resolveAuth(opts) === undefined) {\n if (opts.isLocalMode) {\n opts.auth = { isLocal: true } as LocalAuth\n } else {\n throw new Error('apiKey/accessToken/session/oAuth2 option or EYEPOP_API_KEY environment variable is required')\n }\n }\n\n if (opts.sessionUuid === undefined) {\n opts.sessionUuid = readEnv('EYEPOP_SESSION_UUID')\n }\n if (opts.sessionName === undefined) {\n opts.sessionName = readEnv('EYEPOP_SESSION_NAME')\n }\n if (opts.accountId === undefined) {\n opts.accountId = readAccountUuidEnv()\n }\n if (opts.pipelineImage === undefined) {\n opts.pipelineImage = readEnv('EYEPOP_PIPELINE_IMAGE')\n }\n if (opts.pipelineVersion === undefined) {\n opts.pipelineVersion = readEnv('EYEPOP_PIPELINE_VERSION')\n }\n\n // TODO remove pop id support in 3.16\n if (opts.popId === undefined && opts.sessionUuid === undefined) {\n opts.popId = readEnv('EYEPOP_POP_ID') || TransientPopId.Transient\n }\n\n if (opts.autoStart === undefined) {\n opts.autoStart = true\n }\n\n if (opts.stopJobs === undefined) {\n opts.stopJobs = true\n }\n\n const auth = resolveAuth(opts)\n if (auth !== undefined) {\n if ((auth as SessionAuth).session !== undefined) {\n if (((auth as SessionAuth).session as WorkerSession) !== undefined) {\n if (((auth as SessionAuth).session as WorkerSession).popId) {\n opts.popId = ((auth as SessionAuth).session as WorkerSession).popId\n }\n if (((auth as SessionAuth).session as WorkerSession).accountId) {\n opts.accountId = ((auth as SessionAuth).session as WorkerSession).accountId\n }\n }\n }\n }\n return new WorkerEndpoint(opts)\n }\n\n /** A worker endpoint on the pipeline API (SDK-27), refusing what only a worker session has. */\n function pipelineEndpoint(opts: WorkerOptions): WorkerEndpoint {\n const popId = opts.popId ?? readEnv('EYEPOP_POP_ID')\n const sessionOnly: Record<string, unknown> = {\n popId: popId === TransientPopId.Transient ? undefined : popId,\n sessionUuid: opts.sessionUuid ?? readEnv('EYEPOP_SESSION_UUID'),\n sessionName: opts.sessionName,\n pipelineImage: opts.pipelineImage,\n pipelineVersion: opts.pipelineVersion,\n }\n const named = Object.entries(sessionOnly)\n .filter(([, value]) => value)\n .map(([name]) => name)\n if (named.length > 0) {\n throw new PipelineConfigurationError('session_options', `pipeline mode runs no worker session; it takes no ${named.join(', ')}`, named)\n }\n if (opts.isLocalMode && !opts.eyepopUrl) {\n // Local mode talks to the pipeline API itself, on its default listener.\n opts.eyepopUrl = readEnv('EYEPOP_URL') || 'http://127.0.0.1:9002'\n }\n if (!opts.jobQueueLength) {\n opts.jobQueueLength = MAX_OPEN_SOURCES\n }\n _fill_default_options(opts)\n if (resolveAuth(opts) === undefined) {\n if (opts.isLocalMode) {\n opts.auth = { isLocal: true } as LocalAuth\n } else {\n throw new Error('apiKey/accessToken/session/oAuth2 option or EYEPOP_API_KEY environment variable is required')\n }\n }\n if (opts.accountId === undefined) {\n opts.accountId = ((resolveAuth(opts) as SessionAuth | undefined)?.session as WorkerSession | undefined)?.accountId ?? readAccountUuidEnv()\n }\n return new WorkerEndpoint(opts)\n }\n\n export function dataEndpoint(opts: DataOptions = {}): DataEndpoint {\n _fill_default_options(opts)\n const auth = resolveAuth(opts)\n if (auth === undefined) {\n throw new Error('apiKey/accessToken/session/oAuth2 option or EYEPOP_API_KEY environment variable is required')\n }\n if (opts.accountId === undefined) {\n opts.accountId = readAccountUuidEnv()\n }\n if ((auth as SessionAuth).session !== undefined) {\n if (((auth as SessionAuth).session as DataSession) !== undefined) {\n if (((auth as SessionAuth).session as DataSession).accountId) {\n opts.accountId = ((auth as SessionAuth).session as DataSession).accountId\n }\n }\n }\n return new DataEndpoint(opts)\n }\n\n function _fill_default_options(opts: Options) {\n if (resolveAuth(opts) === undefined && defaultAuth) {\n opts.apiKey = defaultAuth.apiKey\n }\n\n const auth = resolveAuth(opts)\n if (!opts.eyepopUrl && auth && (auth as SessionAuth).session && (auth as SessionAuth).session.eyepopUrl) {\n opts.eyepopUrl = (auth as SessionAuth).session.eyepopUrl\n }\n\n if (!opts.eyepopUrl) {\n opts.eyepopUrl = readEnv('EYEPOP_URL')\n }\n\n if (!opts.eyepopUrl) {\n opts.eyepopUrl = 'https://compute.eyepop.ai'\n }\n\n if (auth) {\n if ((auth as OAuth2Auth).oAuth2 !== undefined) {\n if (typeof (auth as OAuth2Auth).oAuth2 === 'boolean') {\n const oAuth2: OAuth2Auth =\n opts.eyepopUrl && opts.eyepopUrl.match(/https:(.*).staging.eyepop.xyz/i)\n ? {\n oAuth2: {\n domain: 'dev-eyepop.us.auth0.com',\n clientId: 'jktx3YO2UnbkNPvr05PQWf26t1kNTJyg',\n audience: 'https://dev-app.eyepop.ai',\n scope: 'admin:clouds access:inference-api access:datasets',\n },\n }\n : {\n oAuth2: {\n domain: 'eyepop.us.auth0.com',\n clientId: 'Lb9ubA9Hf3jlaqWLUx8XgA0zvotgViCl',\n audience: 'https://api.eyepop.ai',\n scope: 'admin:clouds access:inference-api access:datasets',\n },\n }\n if (opts.oAuth2 !== undefined) {\n opts.oAuth2 = oAuth2.oAuth2\n } else {\n opts.auth = oAuth2\n }\n }\n }\n }\n if (!opts.jobQueueLength) {\n opts.jobQueueLength = 128\n }\n }\n}\n\nexport * from './types'\nexport * from './endpoint'\nexport * from './options'\nexport * from './semaphore'\nexport * from './streaming'\nexport * from './data/data_types'\nexport * from './data/data_options'\nexport * from './data/data_endpoint'\nexport * from './worker/worker_types'\nexport * from './worker/worker_options'\nexport { ComputeAccountMismatchError, ComputeApiError } from './compute/compute_session'\nexport * from './worker/worker_endpoint'\nexport * from './worker/worker_backend'\nexport * from './worker/session_backend'\nexport * from './worker/pipeline_backend'\nexport * from './worker/jobs'\nexport * from './worker/webrtc_base'\nexport * from './worker/webrtc_whep'\nexport * from './worker/webrtc_whip'\nexport default EyePop\n","import { Logger } from 'pino'\nimport { Session } from './types'\nimport { PathSource, StreamSource } from './worker/worker_types'\n\nexport interface Auth0Options {\n domain: string\n clientId: string\n audience: string\n scope: string\n}\n\nexport interface ApiKeyAuth {\n /**\n * Authentication api key for server side execution.\n * Defaults to process.env['EYEPOP_API_KEY'].\n */\n apiKey: string\n}\n\nexport interface AccessTokenAuth {\n /**\n * Bearer token accepted by the compute API.\n */\n accessToken: string\n}\n\nexport interface SessionAuth {\n /**\n * Temporary authentication token for client side execution.\n */\n session: Session\n}\n\nexport interface OAuth2Auth {\n /**\n * For development mode, authenticate with your dashboard.eyepop.ai account\n */\n oAuth2: true | Auth0Options\n}\n\nexport interface LocalAuth {\n /**\n * Implicit auth w/o credentials to a local endpoint.\n */\n isLocal: true\n}\n\nexport type Authentication = undefined | ApiKeyAuth | AccessTokenAuth | SessionAuth | OAuth2Auth | LocalAuth\n\nfunction nonEmptyCredential(value: string | undefined): string | undefined {\n return value && value.length > 0 ? value : undefined\n}\n\nexport function resolveAuth(options: Options): Authentication {\n const apiKey = nonEmptyCredential(options.apiKey)\n if (apiKey !== undefined) {\n return { apiKey }\n }\n const accessToken = nonEmptyCredential(options.accessToken)\n if (accessToken !== undefined) {\n return { accessToken }\n }\n if (options.session !== undefined) {\n return { session: options.session }\n }\n if (options.oAuth2 !== undefined) {\n return { oAuth2: options.oAuth2 }\n }\n return options.auth\n}\n\nexport function apiKeyCredential(auth: Authentication): string | undefined {\n if (auth === undefined) {\n return undefined\n }\n return nonEmptyCredential((auth as ApiKeyAuth).apiKey)\n}\n\nexport function accessTokenCredential(auth: Authentication): string | undefined {\n if (auth === undefined) {\n return undefined\n }\n return nonEmptyCredential((auth as AccessTokenAuth).accessToken)\n}\n\nexport interface HttpClient {\n fetch(input: RequestInfo | URL, init?: RequestInit): Promise<Response>\n close(): Promise<void>\n isFullDuplex(): boolean\n}\n\nexport interface PlatformSupport {\n createHttpClient?: (logger: Logger) => Promise<HttpClient>\n resolvePath: (source: PathSource, logger: Logger) => Promise<StreamSource>\n}\n\nexport interface Options {\n /**\n * Authentication api key for server side execution.\n * Defaults to process.env['EYEPOP_API_KEY'].\n */\n apiKey?: string | undefined\n\n /**\n * Bearer token accepted by the compute API.\n */\n accessToken?: string | undefined\n\n /**\n * Temporary authentication token for client side execution.\n */\n session?: Session | undefined\n\n /**\n * For development mode, authenticate with your dashboard.eyepop.ai account\n */\n oAuth2?: true | Auth0Options | undefined\n\n /**\n * @deprecated Pass apiKey, accessToken, session, or oAuth2 at the top level.\n */\n auth?: Authentication | undefined\n\n eyepopUrl?: string | undefined\n\n jobQueueLength?: number\n\n logger?: Logger | undefined\n\n platformSupport?: PlatformSupport\n}\n","export interface Session {\n readonly eyepopUrl: string\n readonly accessToken: string\n readonly validUntil: number\n}\n\nexport enum EndpointState {\n Idle = 'Idle',\n Busy = 'Busy',\n Authenticating = 'Authenticating',\n FetchConfig = 'FetchConfig',\n Error = 'Error',\n NotAvailable = 'NotAvailable',\n}\n\nexport interface Box {\n readonly topLeft: Point2d\n readonly bottomRight: Point2d\n}\n\nexport interface StreamTime {\n /**\n * Temporal offset of prediction from start of the media (video or audio) in nano seconds.\n */\n timestamp?: number\n /**\n * Convenience, same vale as 'timestamp' just in seconds.\n */\n seconds?: number\n /**\n * Temporal length of the chunk that was the source for this prediction in nano seconds.\n */\n duration?: number\n /**\n * Real time when the media was captured as epoch timestamp in nano seconds.\n *\n * Only provided if source provides this timestamp e.g. as timestamp/x-ntp in RTSP.\n */\n captured_at?: number\n /**\n * A media specific offset.\n *\n * For video frames, this is the frame number of prediction.\n * For audio samples, this is the offset of the first sample for this prediction.\n */\n offset?: number\n /**\n * Offset length of the chunk used for this prediction.\n *\n * It has the same format as offset.\n */\n offset_duration?: number\n}\n\nexport interface Prediction extends StreamTime {\n /**\n * The width of the source coordinate system for all prediction coordinates.\n */\n source_width: number\n /**\n * The height of the source coordinate system for all prediction coordinates.\n */\n source_height: number\n source_id?: string\n source_url?: string\n source_type?: string\n system_timestamp?: number\n objects?: Array<PredictedObject>\n classes?: Array<PredictedClass>\n texts?: Array<PredictedText>\n meshs?: Array<PredictedMesh>\n keyPoints?: Array<PredictedKeyPoints>\n embeddings?: Array<PredictedEmbedding>\n details?: Array<Record<string, any>>\n motions?: Array<PredictedMotion>\n depth?: Depth\n /**\n * Set on a selected prediction: the results of a `select_crop` or\n * `select_full` forward for one track. It arrives after later predictions,\n * carries the `timestamp` of the past frame that was selected, and its\n * selected object's `trackId` links it to that track's live predictions.\n * It is not the stream's progress: skip it where frames are drawn or\n * counted.\n */\n selected?: boolean\n}\n\nexport interface PredictedClass {\n id?: number\n confidence?: number\n classLabel: string\n category?: string\n}\n\nexport interface PredictedText {\n id?: number\n confidence?: number\n text: string\n category?: string\n}\n\nexport interface PredictedEmbedding {\n x?: number\n y?: number\n embedding: Array<number>\n category?: string\n}\n\nexport interface Contour {\n points: Array<Point2d>\n cutouts: Array<Array<Point2d>>\n}\n\n/**\n * A segmentation mask, optionally with a per-object point cloud.\n *\n * `world` is the base64 encoding of three little-endian float32 values per mask\n * pixel, row-major, exactly width*height triples - so the point for bitmap\n * pixel (i, j) is at triple index j * width + i. Points the worker could not\n * place are NaN. Use decodePointCloud() to read it.\n */\nexport interface Mask {\n bitmap: string\n width: number\n height: number\n stride: number\n world?: string\n}\n\n/**\n * A frame-level depth map as produced by depth estimation abilities\n * (e.g. eyepop.depth.*).\n *\n * `values` is the base64 encoding of width*height little-endian float32\n * values in row-major order. The map always has the aspect ratio of the\n * source frame; map a source coordinate (x, y) to the map proportionally:\n * (x * width / source_width, y * height / source_height).\n *\n * Sky pixels carry +Infinity. Use decodeDepthMap() to access the values.\n *\n * `semantic` says what the values mean, and is always present in prediction v2 -\n * \"unknown\" included - so an absent member means a worker that predates the\n * field rather than a map that declined to say:\n *\n * - \"canonical_metric\" - meters = value * focal_px / 300, with focal_px scaled\n * to the map's own resolution\n * - \"metric\" - the value is already meters\n * - \"relative\" - scale- AND shift-invariant, so ordering is meaningful but\n * distance is not. Not back-projectable: recovering a cloud from it yields a\n * distorted scene rather than a scaled one\n * - \"unknown\" - the ability declared nothing. Not back-projectable\n *\n * `world` is the scene point cloud, present when the Pop asked for\n * `depthMap.toWorld`. Same encoding as `Mask.world` - three little-endian\n * float32 per pixel, row-major - but on this map's own grid, so the point for\n * pixel (i, j) is at triple index j * width + i, exactly where that pixel's\n * value sits in `values`. Points the worker could not place are NaN; the value\n * at the same index is what says why, which is why both are sent.\n */\nexport interface Depth {\n width: number\n height: number\n values: string\n semantic?: DepthSemantic\n world?: string\n}\n\nexport type DepthSemantic = 'canonical_metric' | 'metric' | 'relative' | 'unknown'\n\nexport interface PredictedObject extends PredictedClass {\n trackId?: number\n x: number\n y: number\n width: number\n height: number\n orientation?: number\n outline?: Array<Point2d>\n contours?: Array<Contour>\n mask?: Mask\n objects?: Array<PredictedObject>\n classes?: Array<PredictedClass>\n texts?: Array<PredictedText>\n meshs?: Array<PredictedMesh>\n keyPoints?: Array<PredictedKeyPoints>\n details?: Array<Record<string, any>>\n}\n\n/**\n * A point in source pixels, optionally placed in 3D.\n *\n * `worldX`/`worldY`/`worldZ` are meters, present only when the pipeline was\n * asked for world coordinates - a Pop with `depthMap` and a component with\n * `toWorld` - and only in prediction v2. A point the worker could not place -\n * sky, outside the depth map, no usable map - carries none of the three rather\n * than a zero or a NaN, so test for undefined.\n *\n * Which frame they are in depends on the source's camera: with extrinsics, the\n * world frame those define (Z up, ground at Z = 0); without them, the camera\n * frame in the OpenCV convention (X right, Y down, Z forward from the camera).\n *\n * Only the carriers the worker enriches ever populate them: key points, outline\n * points and contour points. Bounding boxes and mesh points do not - a box is\n * not a point, and any single anchor choice would be arbitrary.\n */\nexport interface Point2d {\n x: number\n y: number\n worldX?: number\n worldY?: number\n worldZ?: number\n}\n\nexport interface PredictedMesh {\n category?: string\n id?: number\n confidence?: number\n points: Array<Point3d>\n}\n\nexport interface Point3d extends Point2d {\n z?: number\n}\n\nexport interface PredictedKeyPoints {\n category?: string\n type?: string\n points: Array<PredictedKeyPoint>\n}\n\nexport interface PredictedKeyPoint extends Point3d {\n id?: number\n confidence?: number\n classLabel?: string\n category?: string\n visible?: boolean\n}\n\nexport interface PredictedMotion {\n begin_timestamp: number\n finished_timestamp: number | undefined\n}\n","import { Logger } from 'pino'\nimport { HttpClient } from '../options'\n\nexport let createHttpClient: (logger: Logger) => Promise<HttpClient>\n\nfunction logLineFromRequest(input: RequestInfo | URL, init?: RequestInit): string {\n const url = input instanceof Request ? input.url : input\n const method = input instanceof Request ? input.method : init?.method || (init?.body !== undefined ? 'POST' : 'GET')\n return `${method} ${url}`\n}\n\nif ('document' in globalThis && 'implementation' in globalThis.document) {\n class BrowserHttpClient {\n private readonly _logger: Logger\n constructor(logger: Logger) {\n this._logger = logger\n }\n\n public async fetch(input: RequestInfo | URL, init?: RequestInit): Promise<Response> {\n const logLine = logLineFromRequest(input, init)\n this._logger.debug(`Browser fetch() BEFORE ${logLine}`)\n const response = await fetch(input, init)\n this._logger.debug(`AFTER ${logLine} -> ${response.status}`)\n return response\n }\n\n public async close(): Promise<void> {}\n public isFullDuplex() {\n return false\n }\n }\n\n createHttpClient = async (logger: Logger) => {\n return new BrowserHttpClient(logger)\n }\n} else {\n class NodeHttpClient {\n private readonly _agent: any\n private readonly _fetch: typeof fetch\n private readonly _logger: Logger\n constructor(agent: any, fetchFn: typeof fetch, logger: Logger) {\n this._agent = agent\n this._fetch = fetchFn\n this._logger = logger\n }\n\n public async fetch(input: RequestInfo | URL, init?: RequestInit): Promise<Response> {\n init ||= {}\n // @ts-ignore\n init.dispatcher = this._agent\n const logLine = logLineFromRequest(input, init)\n this._logger.debug(`Node fetch() BEFORE ${logLine}`)\n const response = await this._fetch(input, init)\n this._logger.debug(`AFTER ${logLine} -> ${response.status}`)\n return response\n }\n\n public async close(): Promise<void> {\n return this._agent.close()\n }\n public isFullDuplex() {\n return false\n }\n }\n\n createHttpClient = async (logger: Logger) => {\n const undici = require('undici')\n const agent = new undici.Agent({\n keepAliveTimeout: 10000,\n connections: 5,\n // two parallel streaming requests to the same host seem to deadlock with pipelining > 0\n pipelining: 0,\n })\n logger.debug('Using node fetch with undici agent as http client')\n return new NodeHttpClient(agent, undici.fetch, logger)\n }\n}\n","/** Semaphores are initialized with a number of permits that get aquired and released\n * over the lifecycle of the semaphore. These permits limit the number of simultaneous\n * executions of the code that the semaphore synchronizes. Functions can wait on a semaphore\n * and stop executing until a permit becomes available.\n *\n * Locks are a special case of semaphores that only allow one execution of a critical section.\n * If you need a lock, you can import the Lock class from this package.\n *\n * This Semaphore class is implemented with the help of promises that get returned\n * by functions that wait for permits to become available. This makes it possible\n * to use async/await to synchronize your code.\n */\nexport class Semaphore {\n private permits: number\n private promiseResolverQueue: Array<(v: boolean) => void> = []\n\n /**\n * Creates a semaphore.\n * @param permits The number of permits, i.e. strands of execution being allowed\n * to run in parallel.\n * This number can be initialized with a negative integer.\n */\n constructor(permits: number) {\n this.permits = permits\n }\n\n /**\n * Returns the number of available permits.\n * @returns The number of available permits.\n */\n public getPermits(): number {\n return this.permits\n }\n\n /**\n * Returns a promise used to wait for a permit to become available. This method should be awaited on.\n * @returns A promise that gets resolved when execution is allowed to proceed.\n */\n public async wait(): Promise<boolean> {\n if (this.permits > 0) {\n this.permits -= 1\n return Promise.resolve(true)\n }\n\n // If there is no permit available, we return a promise that resolves once the semaphore gets\n // signaled enough times that permits is equal to one.\n return new Promise<boolean>(resolver => this.promiseResolverQueue.push(resolver))\n }\n\n /**\n * Alias for {@linkcode Semaphore.wait}.\n * @returns A promise that gets resolved when execution is allowed to proceed.\n */\n public async acquire(): Promise<boolean> {\n return this.wait()\n }\n\n /**\n * Same as {@linkcode Semaphore.wait} except the promise returned gets resolved with false if no\n * permit becomes available in time.\n * @param milliseconds The time spent waiting before the wait is aborted. This is a lower bound,\n * you shouldn't rely on it being precise.\n * @returns A promise that gets resolved to true when execution is allowed to proceed or\n * false if the time given elapses before a permit becomes available.\n */\n public async waitFor(milliseconds: number): Promise<boolean> {\n if (this.permits > 0) {\n this.permits -= 1\n return Promise.resolve(true)\n }\n\n // We save the resolver function in the current scope so that we can resolve the promise\n // to false if the time expires.\n let resolver: (v: boolean) => void = _ => void 0\n const promise = new Promise<boolean>(r => {\n resolver = r\n })\n\n // The saved resolver gets added to our list of promise resolvers so that it gets a chance\n // to be resolved as a result of a call to signal().\n this.promiseResolverQueue.push(resolver)\n\n setTimeout(() => {\n // We have to remove the promise resolver from our list. Resolving it twice would not be\n // an issue but signal() always takes the next resolver from the queue and resolves it which\n // would swallow a permit if we didn't remove it.\n const index = this.promiseResolverQueue.indexOf(resolver)\n if (index !== -1) {\n this.promiseResolverQueue.splice(index, 1)\n } else {\n // This shouldn't happen, not much we can do at this point\n console.warn(`Semaphore.waitFor couldn't find its promise resolver in the queue`)\n }\n\n // false because the wait was unsuccessful.\n resolver(false)\n }, milliseconds)\n\n return promise\n }\n\n /**\n * Synchronous function that tries to acquire a permit and returns true if successful, false otherwise.\n * @returns Whether a permit could be acquired.\n */\n public tryAcquire(): boolean {\n if (this.permits > 0) {\n this.permits -= 1\n return true\n }\n\n return false\n }\n\n /**\n * Acquires all permits that are currently available and returns the number of acquired permits.\n * @returns Number of acquired permits.\n */\n public drainPermits(): number {\n if (this.permits > 0) {\n const permitCount = this.permits\n this.permits = 0\n return permitCount\n }\n\n return 0\n }\n\n /**\n * Increases the number of permits by one. If there are other functions waiting, one of them will\n * continue to execute in a future iteration of the event loop.\n */\n public signal(): void {\n this.permits += 1\n\n if (this.permits > 1 && this.promiseResolverQueue.length > 0) {\n console.warn('Semaphore.permits should never be > 0 when there is someone waiting.')\n } else if (this.permits === 1 && this.promiseResolverQueue.length > 0) {\n // If there is someone else waiting, immediately consume the permit that was released\n // at the beginning of this function and let the waiting function resume.\n this.permits -= 1\n\n const nextResolver = this.promiseResolverQueue.shift()\n if (nextResolver) {\n nextResolver(true)\n }\n }\n }\n\n /**\n * Alias for {@linkcode Semaphore.signal}.\n */\n public release(): void {\n this.signal()\n }\n\n /**\n * Schedules func to be called once a permit becomes available.\n * Returns a promise that resolves to the return value of func.\n * @typeparam T The return type of func.\n * @param func The function to be executed.\n * @return A promise that gets resolved with the return value of the function.\n */\n public async execute<T>(func: () => T | PromiseLike<T>): Promise<T> {\n await this.wait()\n try {\n return await func()\n } finally {\n this.signal()\n }\n }\n}\n","import { Auth0Options, HttpClient, LocalAuth, OAuth2Auth, Options, SessionAuth, accessTokenCredential, apiKeyCredential, resolveAuth } from './options'\nimport { EndpointState, Session } from './types'\nimport { createHttpClient } from './shims/http_client'\nimport { Semaphore } from './semaphore'\n\nimport { Logger, pino } from 'pino'\nimport { authenticateBrowserSession } from './shims/browser_session'\n\ninterface AccessToken {\n access_token: string\n expires_in: number\n token_type: string\n}\n\nexport class Endpoint<T extends Endpoint<T>> {\n protected _options: Options\n private _token: string | null\n private _expire_token_time: number | null\n\n protected _client: HttpClient | null\n private _statusRetryHandlers: Map<number, Function>\n\n protected _limit: Semaphore\n private _state: EndpointState\n private _message: null | string\n private _stateChangeHandler: null | ((fromState: EndpointState, toState: EndpointState) => void)\n\n protected _logger: Logger\n protected readonly _requestLogger: Logger\n\n constructor(options: Options) {\n this._options = options\n this._token = null\n this._expire_token_time = null\n this._client = null\n this._statusRetryHandlers = new Map()\n this._statusRetryHandlers.set(401, this.statusHandler401)\n\n this._limit = new Semaphore(this._options.jobQueueLength ?? 1024)\n this._state = EndpointState.Idle\n this._message = null\n this._stateChangeHandler = null\n\n let rootLogger\n if (options.logger) {\n rootLogger = options.logger\n } else {\n rootLogger = pino()\n }\n this._logger = rootLogger.child({ module: 'eyepop' })\n this._requestLogger = this._logger.child({ module: 'requests' })\n }\n\n protected setStatusRetryHandlers(statusRetryHandlers: Map<number, Function> | undefined = undefined) {\n this._statusRetryHandlers = new Map(statusRetryHandlers)\n this._statusRetryHandlers.set(401, this.statusHandler401)\n }\n\n public eyepopUrl(): string {\n if (this._options.eyepopUrl) {\n return this._options.eyepopUrl.replace(/\\/+$/, '')\n } else {\n return 'https://compute.eyepop.ai'\n }\n }\n\n // TODO: deprecated Web API endpoint needed for POP_ID support\n public eyepopWebApiUrl(): string {\n if (this._options.eyepopUrl) {\n return this._options.eyepopUrl.replace(/\\/+$/, '').replace(/compute\\./, 'web-api.')\n } else {\n return 'https://api.eyepop.ai'\n }\n }\n\n public pendingJobs(): number {\n return (this._options.jobQueueLength ?? 1024) - this._limit.getPermits()\n }\n\n public state(): EndpointState {\n return this._state\n }\n\n public lastMessage(): string | null {\n return this._message\n }\n\n public onStateChanged(handler: (fromState: EndpointState, toState: EndpointState) => void): T {\n this._stateChangeHandler = handler\n return <T>(<unknown>this)\n }\n\n protected updateState(newState: EndpointState | undefined = undefined, message: string | undefined = undefined) {\n const fromState = this._state\n if (newState == undefined) {\n if (this._limit.getPermits() == this._options.jobQueueLength) {\n newState = EndpointState.Idle\n } else {\n newState = EndpointState.Busy\n }\n }\n this._state = newState\n this._message = message ? message : null\n\n if (this._stateChangeHandler) {\n this._stateChangeHandler(fromState, this._state)\n }\n }\n\n public async connect(): Promise<T> {\n if (this._client) {\n this._logger.warn('endpoint already connected')\n return <T>(<unknown>this)\n }\n if (!this._options.eyepopUrl) {\n return Promise.reject('option eyepopUrl or environment variable EYEPOP_URL is required')\n }\n const auth = resolveAuth(this._options)\n if (auth === undefined) {\n return Promise.reject('cannot connect without defined auth option')\n }\n if ((auth as SessionAuth).session !== undefined) {\n this._token = (auth as SessionAuth).session.accessToken\n this._expire_token_time = (auth as SessionAuth).session.validUntil / 1000\n } else if ((auth as OAuth2Auth).oAuth2 !== undefined) {\n } else if (accessTokenCredential(auth) !== undefined) {\n } else if (apiKeyCredential(auth) !== undefined) {\n } else if ((auth as LocalAuth).isLocal !== undefined) {\n } else {\n return Promise.reject('option apiKey/accessToken or environment variable EYEPOP_API_KEY is required')\n }\n\n if (this._options.platformSupport?.createHttpClient !== undefined) {\n this._client = await this._options.platformSupport.createHttpClient(this._requestLogger)\n } else {\n this._client = await createHttpClient(this._requestLogger)\n }\n\n return await this.reconnect()\n }\n\n public async disconnect(wait: boolean = true): Promise<void> {\n if (wait && this._limit) {\n // @ts-ignore\n for (let j = 0; j < this._options.jobQueueLength; j++) {\n await this._limit.acquire()\n }\n }\n\n this._limit = new Semaphore(this._options.jobQueueLength ?? 1024)\n\n if (this._client) {\n await this._client.close()\n this._client = null\n }\n }\n\n public async session(): Promise<Session> {\n await this.currentAccessToken()\n if (this._token == null || this._expire_token_time == null) {\n return Promise.reject('endpoint not connected')\n }\n return {\n eyepopUrl: <string>this._options.eyepopUrl,\n accessToken: this._token,\n validUntil: this._expire_token_time * 1000,\n }\n }\n\n protected statusHandler401(_statusCode: number): void {\n this._token = null\n this._expire_token_time = null\n }\n\n protected async fetchWithRetry(fetcher: () => Promise<Response>, retries: number = 1): Promise<Response> {\n while (true) {\n try {\n const response = await fetcher()\n if (response.ok) {\n return response\n } else {\n const handler = this._statusRetryHandlers.get(response.status)\n if (handler != null) {\n handler(response.status)\n if (retries--) {\n this._requestLogger.info('received %d response, retry', response.status)\n } else {\n return response\n }\n } else {\n return response\n }\n }\n } catch (error) {\n // handle connection errors like 404s\n const handler = this._statusRetryHandlers.get(404)\n if (handler != null) {\n handler(error)\n if (retries--) {\n this._requestLogger.info('error %s, retry', error)\n } else {\n return Promise.reject(`error ${error}`)\n }\n } else {\n return Promise.reject(`error ${error}`)\n }\n }\n }\n }\n\n protected async reconnect(): Promise<T> {\n throw new Error('reconnect() not implemented')\n }\n\n protected async authorizationHeader(): Promise<string> {\n if ((resolveAuth(this._options) as LocalAuth | undefined)?.isLocal !== undefined) {\n return `Implicit`\n }\n return `Bearer ${await this.currentAccessToken()}`\n }\n\n private async currentAccessToken(): Promise<string> {\n const now = Date.now() / 1000\n if (!this._token || <number>this._expire_token_time < now) {\n this.updateState(EndpointState.Authenticating)\n try {\n const auth = resolveAuth(this._options)\n if (!this._client) {\n return Promise.reject('endpoint not connected')\n } else if ((auth as LocalAuth | undefined)?.isLocal !== undefined) {\n this._token = 'implicit'\n this._expire_token_time = Number.MAX_VALUE\n } else if ((auth as SessionAuth | undefined)?.session !== undefined) {\n return Promise.reject('temporary access token expired')\n } else if ((auth as OAuth2Auth | undefined)?.oAuth2 !== undefined && this._options.eyepopUrl) {\n const session = await authenticateBrowserSession((auth as OAuth2Auth).oAuth2 as Auth0Options, this._options)\n this._token = session.accessToken\n this._expire_token_time = session.validUntil / 1000\n } else if (accessTokenCredential(auth) !== undefined) {\n this._token = accessTokenCredential(auth) as string\n this._expire_token_time = Number.MAX_VALUE\n } else if (this._options.eyepopUrl) {\n const credential = apiKeyCredential(auth)\n if (credential === undefined) {\n return Promise.reject('no valid auth option')\n }\n const headers = { Authorization: `Bearer ${credential}` }\n const post_url = `${this.eyepopUrl()}/v1/auth/authenticate`\n const response = await this._client.fetch(post_url, {\n method: 'POST',\n headers: headers,\n })\n if (response.status != 200) {\n const message = await response.text()\n return Promise.reject(`Unexpected status ${response.status}: ${message}`)\n }\n const data = await response.json()\n const token: AccessToken = data as AccessToken\n this._token = token.access_token\n this._expire_token_time = now + token.expires_in - 60\n } else {\n return Promise.reject('no valid auth option')\n }\n } finally {\n this.updateState()\n }\n }\n this._logger.debug('using access token, valid for at least %d seconds', <number>this._expire_token_time - now)\n return <string>this._token\n }\n}\n","import { Session } from '../types'\nimport { Auth0Options, Options } from '../options'\nimport { createAuth0Client } from '@auth0/auth0-spa-js'\nimport { WorkerOptions, WorkerSession } from '../index'\n\nexport let authenticateBrowserSession: (auth0: Auth0Options, options: Options) => Promise<Session>\n\nif ('document' in globalThis && 'implementation' in globalThis.document) {\n authenticateBrowserSession = async (auth0: Auth0Options, options: Options) => {\n if (options.eyepopUrl == null) {\n return Promise.reject('options.eyepopUrl cannot be null')\n }\n const auth0ClientOptions = {\n clientId: auth0.clientId,\n domain: auth0.domain,\n authorizationParams: {\n scope: auth0.scope,\n audience: auth0.audience,\n },\n }\n const auth0Client = await createAuth0Client(auth0ClientOptions)\n if (!(await auth0Client.isAuthenticated())) {\n await auth0Client.loginWithPopup()\n }\n const accessToken = await auth0Client.getTokenSilently()\n if (!accessToken) {\n return Promise.reject('auth0 login failed')\n }\n let session: Session\n const workerOptions = options as WorkerOptions\n if (typeof workerOptions.popId != 'undefined') {\n const workerSession: WorkerSession = {\n eyepopUrl: options.eyepopUrl,\n accessToken: accessToken,\n validUntil: Date.now() + 60 * 60 * 1000,\n popId: workerOptions.popId,\n baseUrl: undefined,\n pipelineId: undefined,\n isPipelineMode: workerOptions.isPipelineMode,\n authenticationHeaders: () => {\n return { Authorization: `Bearer ${accessToken}` }\n }\n }\n session = workerSession\n } else {\n session = {\n eyepopUrl: options.eyepopUrl,\n accessToken: accessToken,\n validUntil: Date.now() + 60 * 60 * 1000,\n }\n }\n return session\n }\n} else {\n authenticateBrowserSession = (_auth0: Auth0Options, _options: Options) => {\n return Promise.reject('auth0 login not supported server-side')\n }\n}\n","/**\n * Camera calibration for a source, as accepted by the worker's setSource.\n *\n * A calibration is what turns a depth map into measurable world coordinates.\n * Without one the worker falls back to an assumed horizontal field of view,\n * which is a development scaffold rather than something to ship: for canonical\n * metric depth the guess cancels out of X and Y and survives only in Z, so\n * lateral measurements stay exact while every distance along the optical axis\n * is wrong by however wrong the guess was.\n *\n * Mirrors what the instance API accepts. validateCamera() checks it locally so\n * a bad calibration is an error here rather than a 400 halfway through an\n * upload; the worker validates authoritatively, and the two are meant to agree.\n */\n\n/**\n * How far a rotation's norm may sit from 1 and still be taken for a rotation.\n * Loose enough to survive a float round trip through JSON, tight enough to\n * catch an un-normalised or garbage one. Matches the instance and the worker.\n */\nexport const QUATERNION_TOLERANCE = 1e-3\n\n/**\n * The pinhole parameters, normalised to the frame rather than given in pixels.\n *\n * Normalised so one calibration survives a resolution change: a camera\n * calibrated at 1920x1080 and later streamed at 1280x720 keeps working. Pixel\n * values carrying no calibration resolution are wrong by exactly the resolution\n * ratio, and nothing downstream can detect it.\n *\n * `fx`/`fy` are the focal length as a fraction of the frame's width and height;\n * `cx`/`cy` are the principal point in the same normalisation.\n */\nexport interface CameraIntrinsics {\n fx: number\n fy: number\n cx: number\n cy: number\n}\n\n/** The OpenCV Brown-Conrady coefficients. All zero is a rectilinear lens. */\nexport interface CameraDistortion {\n k1?: number\n k2?: number\n p1?: number\n p2?: number\n k3?: number\n}\n\n/** A rotation, w first. Must be a unit quaternion. */\nexport interface Quaternion {\n w: number\n x: number\n y: number\n z: number\n}\n\n/** A translation in meters. */\nexport interface Vector3d {\n x: number\n y: number\n z: number\n}\n\n/**\n * The camera's pose, expressed camera -> world.\n *\n * As `P_world = R(rotation) * P_camera + translation`, so the rotation carries\n * the camera's axes onto the world's and the translation is where the camera\n * itself sits. The world frame is Z up with the ground plane at Z = 0.\n *\n * This is the inverse of what cv2.solvePnP returns; a caller holding its\n * rvec/tvec must invert both halves (R = R_cv.T, t = -R_cv.T @ t_cv), and t_cv\n * is *not* the camera position.\n *\n * Left unset, the pose is the identity and world coordinates come back in the\n * camera frame instead - OpenCV convention, X right, Y down, Z forward.\n */\nexport interface CameraExtrinsics {\n rotation?: Quaternion\n translation?: Vector3d\n}\n\n/**\n * One source's calibration.\n *\n * Exactly one of `intrinsics` and `hfovDegrees` describes the lens. Both is\n * rejected rather than resolved by precedence - two descriptions of one lens\n * that disagree have no right answer - and neither is rejected too, since\n * defaulting a focal length would be inventing a lens.\n *\n * `hfovDegrees` is the shorthand for an operator who knows their lens's field\n * of view but not its calibration matrix. It assumes square pixels and a\n * centred principal point, so it approximates a real calibration rather than\n * replacing one - but it describes the actual lens rather than the worker's\n * assumed fallback. It composes with distortion and extrinsics exactly as\n * intrinsics do.\n */\nexport interface Camera {\n intrinsics?: CameraIntrinsics\n hfovDegrees?: number\n distortion?: CameraDistortion\n extrinsics?: CameraExtrinsics\n}\n\nfunction isFinite_(value: number | undefined): boolean {\n return value === undefined || Number.isFinite(value)\n}\n\n/**\n * Throw if the calibration cannot describe a real camera.\n *\n * Checked locally so a bad one fails before an upload starts rather than as a\n * 400 partway through it. The rules are the worker's, not stricter ones.\n */\nexport function validateCamera(camera: Camera): void {\n if (camera.intrinsics !== undefined && camera.hfovDegrees !== undefined) {\n throw new Error('camera.intrinsics and camera.hfovDegrees are alternatives, supply one')\n }\n if (camera.intrinsics === undefined && camera.hfovDegrees === undefined) {\n throw new Error('camera requires either camera.intrinsics or camera.hfovDegrees')\n }\n\n if (camera.hfovDegrees !== undefined) {\n // the upper bound excludes +Infinity, and every comparison with NaN is\n // false, so this one test covers the non-finite cases too\n if (!(camera.hfovDegrees > 0 && camera.hfovDegrees < 180)) {\n throw new Error('camera.hfovDegrees must be a horizontal field of view in (0, 180) degrees')\n }\n } else {\n const intrinsics = camera.intrinsics as CameraIntrinsics\n // note +Infinity passes a bare `> 0`, so finiteness is its own test\n for (const [name, focal] of [\n ['fx', intrinsics.fx],\n ['fy', intrinsics.fy],\n ] as const) {\n if (!(focal > 0) || !Number.isFinite(focal)) {\n throw new Error(`camera.intrinsics.${name} must be a positive, finite focal length`)\n }\n }\n for (const [name, principal, extent] of [\n ['cx', intrinsics.cx, 'width'],\n ['cy', intrinsics.cy, 'height'],\n ] as const) {\n if (!(principal >= 0 && principal <= 1)) {\n throw new Error(`camera.intrinsics.${name} must be within [0, 1] of the frame ${extent}`)\n }\n }\n }\n\n if (camera.distortion !== undefined) {\n for (const name of ['k1', 'k2', 'p1', 'p2', 'k3'] as const) {\n if (!isFinite_(camera.distortion[name])) {\n throw new Error(`camera.distortion.${name} must be a finite number`)\n }\n }\n }\n\n if (camera.extrinsics !== undefined) {\n const translation = camera.extrinsics.translation\n if (translation !== undefined) {\n for (const axis of ['x', 'y', 'z'] as const) {\n if (!Number.isFinite(translation[axis])) {\n throw new Error(`camera.extrinsics.translation.${axis} must be a finite number`)\n }\n }\n }\n // a non-finite component makes the norm non-finite, so the unit test\n // below rejects it without a separate finiteness check\n const rotation = camera.extrinsics.rotation\n if (rotation !== undefined) {\n const norm = Math.sqrt(rotation.w ** 2 + rotation.x ** 2 + rotation.y ** 2 + rotation.z ** 2)\n if (!(Math.abs(norm - 1) <= QUATERNION_TOLERANCE)) {\n throw new Error('camera.extrinsics.rotation must be a unit quaternion')\n }\n }\n }\n}\n","import { Prediction, Session } from '../types'\nimport { Area } from 'EyePop/data/data_types'\nimport { Camera, validateCamera } from '../camera'\n\nexport enum PredictionVersion {\n V1 = 1,\n V2 = 2,\n /**\n * Adds selected predictions: a `select_crop` or `select_full` forward\n * reports each selection on a prediction of its own, `selected` set and\n * timed by the past frame it selected. Nothing else differs from V2.\n */\n V3 = 3,\n}\n\nexport const DEFAULT_PREDICTION_VERSION: PredictionVersion = PredictionVersion.V2\n\nexport interface WorkerSession extends Session {\n /**\n * @deprecated Pop ids are only retained for backwards compatibility.\n * Configure transient sessions with `WorkerOptions.pop`.\n */\n readonly popId: string\n /**\n * The account the compute session runs and is billed under. A worker endpoint\n * created from this session names it when it creates a compute session.\n */\n readonly accountId?: string | undefined\n readonly baseUrl: string | undefined\n /**\n * Transient sessions may not have a pipeline until the first source is processed.\n */\n readonly pipelineId: string | undefined\n /**\n * Whether this session's endpoint runs in pipeline mode, without a worker session. A worker\n * endpoint created from this session runs in pipeline mode too.\n */\n readonly isPipelineMode?: boolean | undefined\n\n authenticationHeaders(): any\n}\n\nexport enum VideoMode {\n STREAM = 'stream',\n BUFFER = 'buffer',\n}\n\nexport interface FileSource {\n readonly file: File\n readonly videoMode?: VideoMode | undefined\n}\n\nexport interface StreamSource {\n readonly stream: ReadableStream<Uint8Array> | Blob | BufferSource\n readonly mimeType: string\n readonly size?: number | undefined\n readonly videoMode?: VideoMode | undefined\n}\n\nexport interface PathSource {\n readonly path: string\n readonly mimeType?: string | undefined\n readonly videoMode?: VideoMode | undefined\n}\n\nexport interface MediaStreamSource {\n readonly mediaStream: MediaStream\n}\n\nexport interface UrlSource {\n readonly url: string\n}\n\nexport interface AssetUuidSource {\n readonly assetUuid: string\n}\n\nexport type Source = FileSource | StreamSource | PathSource | UrlSource | AssetUuidSource | MediaStreamSource\n\nexport interface ResultStream extends AsyncIterable<Prediction> {\n cancel(): void\n}\n\n// Pop definition types\n\nexport enum PopComponentType {\n FORWARD = 'forward',\n INFERENCE = 'inference',\n TRACKING = 'tracking',\n CONTOUR_FINDER = 'contour_finder',\n COMPONENT_FINDER = 'component_finder',\n}\n\nexport enum ForwardOperatorType {\n FULL = 'full',\n CROP = 'crop',\n CROP_WITH_FULL_FALLBACK = 'crop_with_full_fallback',\n /**\n * `SELECT_CROP` and `SELECT_FULL` forward one past frame per track, the one\n * of its most relevant detection, and their targets' results arrive late as\n * selected predictions. Only a tracking component's forward can select.\n */\n SELECT_CROP = 'select_crop',\n SELECT_FULL = 'select_full',\n}\n\nexport enum SelectMode {\n MOST_RELEVANT = 'most_relevant',\n}\n\n/**\n * How a `select_crop` or `select_full` forward picks one frame per track.\n *\n * `relevancyModel` (by alias) or `relevancyModelUuid` names an ability that\n * runs on every tracked object of every frame; a detection it finds nothing on\n * is never selected. Without one, relevance comes from the detection's box\n * alone.\n *\n * A track shorter than `minTrackLengthSeconds` is never selected. With\n * `intervalSeconds` the first selection comes that long after the track\n * starts, then at most one per interval and only when a more relevant\n * detection turned up; the track's end reports a final one if it improved\n * since. Without it, a track is selected once, when it ends.\n */\nexport interface PopSelect {\n mode?: SelectMode\n relevancyModelUuid?: string\n relevancyModel?: string\n minTrackLengthSeconds?: number\n intervalSeconds?: number\n}\n\nexport interface PopCrop {\n maxItems?: number\n boxPadding?: number\n orientationTargetAngle?: number\n}\n\nexport interface PopForwardOperator {\n type: ForwardOperatorType\n includeClasses?: string[]\n crop?: PopCrop\n select?: PopSelect\n}\n\nexport function isSelectOperator(operator: PopForwardOperator | undefined): boolean {\n return operator?.type === ForwardOperatorType.SELECT_CROP || operator?.type === ForwardOperatorType.SELECT_FULL\n}\n\nexport interface PopForward {\n operator?: PopForwardOperator\n targets: PopComponent[]\n}\nexport interface BaseComponent {\n type: PopComponentType\n id?: number\n forward?: PopForward\n /**\n * Enrich this component's point based predictions with world coordinates,\n * back-projected through the Pop's `depthMap`.\n *\n * Declared here because the instance declares it on one shared component\n * type, but only a component that runs its own inference can honour it -\n * inference and tracking - since that is what gives it an id for the worker\n * to select on. Asking for it on a forward, contour finder or component\n * finder is rejected when the Pop is compiled. A contour finder's points do\n * get enriched, but they belong to the object that fed it, so the request\n * goes on the inference component upstream.\n *\n * Enrichment needs a *metric* depth ability. A `relative` map is accepted\n * and silently produces no world coordinates: its shift is unknown, so a\n * cloud recovered from it would be distorted rather than merely unscaled.\n */\n toWorld?: boolean\n}\n\nexport interface ForwardComponent extends BaseComponent {}\n\nexport enum InferenceType {\n IMAGE_CLASSIFICATION = 'image_classification',\n OBJECT_DETECTION = 'object_detection',\n KEY_POINTS = 'key_points',\n OCR = 'ocr',\n MESH = 'mesh',\n FEATURE_VECTOR = 'feature_vector',\n SEMANTIC_SEGMENTATION = 'semantic_segmentation',\n SEGMENTATION = 'segmentation',\n}\n\nexport interface InferenceComponent extends BaseComponent {\n inferenceTypes?: InferenceType[]\n hidden?: boolean\n modelUuid?: string\n model?: string\n abilityUuid?: string\n ability?: string\n categoryName?: string\n confidenceThreshold?: number\n topK?: number\n topKClasses?: number\n classes?: string[]\n targetFps?: string\n videoChunkLengthSeconds?: number\n videoChunkOverlap?: number\n params?: { [index: string]: any }\n}\n\nexport enum MotionModel {\n RANDOM_WALK = 'random_walk',\n CONSTANT_VELOCITY = 'constant_velocity',\n CONSTANT_ACCELERATION = 'constant_acceleration',\n}\n\nexport interface TrackingComponent extends BaseComponent {\n reidModelUuid?: string\n reidModel?: string\n maxAgeSeconds?: number\n iouThreshold?: number\n simThreshold?: number\n agnostic?: boolean\n processNoisePosition?: number\n processNoiseVelocity?: number\n processNoiseAcceleration?: number\n processNoiseScale?: number\n processNoiseAspectRatio?: number\n measurementNoiseCx?: number\n measurementNoiseCy?: number\n measurementNoiseArea?: number\n measurementNoiseAspectRatio?: number\n motionModel?: MotionModel\n downweightLowConfidenceDetections?: boolean\n classBeta?: number\n classGamma?: number\n classHysteresis?: boolean\n classHysteresisHighThreshold?: number\n classHysteresisLowThreshold?: number\n classHysteresisMinHoldFrames?: number\n classHysteresisAllowedClasses?: string[]\n}\n\nexport enum ContourType {\n ALL_PIXELS = 'all_pixels',\n POLYGON = 'polygon',\n CONVEX_HULL = 'convex_hull',\n HOUGH_CIRCLES = 'hough_circles',\n CIRCLE = 'circle',\n TRIANGLE = 'triangle',\n RECTANGLE = 'rectangle',\n}\n\nexport interface ContourFinderComponent extends BaseComponent {\n contourType: ContourType\n areaThreshold?: number\n}\n\nexport interface ComponentFinderComponent extends BaseComponent {\n dilate?: number\n erode?: number\n keepSource?: boolean\n componentClassLabel?: string\n}\n\nexport type PopComponent = ForwardComponent | InferenceComponent | TrackingComponent | ContourFinderComponent | ComponentFinderComponent\n\n/**\n * The depth ability whose frame level map feeds world coordinates.\n *\n * `ability` names it by alias and `abilityUuid` by uuid; give exactly one. A\n * Pop has one depth map because the worker back-projects every prediction\n * through it, so a second depth source would have nowhere to go. Naming one\n * makes the converter build the depth branch itself and keep it out of the\n * response - the caller asked for coordinates, not for a megabyte of base64\n * depth per frame.\n *\n * `toWorld` back-projects the map itself, so the response carries a point cloud\n * of the whole scene rather than one per segmented object. It is also what\n * reveals the map: without it the injected branch stays out of the response\n * entirely. Read the result with cloudOfDepth().\n *\n * Use a *metric* depth ability. A `relative` one is accepted and yields no\n * world coordinates at all.\n */\nexport interface PopDepthMap {\n ability?: string\n abilityUuid?: string\n toWorld?: boolean\n}\n\n/**\n * Source level parameters a Pop applies to every source it processes, each\n * overridable per source.\n *\n * Merged per field against whatever a source supplies, so a source giving its\n * own roi but no camera keeps its roi and takes the default camera. Because the\n * camera merges as one field, a source declaring its own lens replaces a\n * defaulted one outright rather than mixing the two.\n */\nexport interface SourceDefaults {\n camera?: Camera\n roi?: Area\n fps?: string\n motionDetect?: boolean\n motionSensitivity?: number\n motionThreshold?: number\n motionGap?: number\n motionGridX?: number\n motionGridY?: number\n}\n\nexport interface Pop {\n components: PopComponent[]\n postTransform?: string\n defaults?: SourceDefaults\n depthMap?: PopDepthMap\n}\n\n/**\n * Throw if a Pop cannot mean what it says.\n *\n * Only the parts a caller can get wrong locally: the worker rejects both of\n * these too, but as a 400 once the Pop is already in flight.\n */\nexport function validatePop(pop: Pop): void {\n if (pop.depthMap !== undefined) {\n // naming no ability is a depth branch that cannot be built, and naming\n // two is a Pop with no right answer\n if ((pop.depthMap.ability === undefined) === (pop.depthMap.abilityUuid === undefined)) {\n throw new Error('depthMap requires exactly one of ability or abilityUuid')\n }\n }\n if (pop.defaults?.camera !== undefined) {\n validateCamera(pop.defaults.camera)\n }\n validateForwards(pop.components)\n}\n\n/**\n * Whether any forward of the Pop is a `select_crop` or `select_full`.\n */\nexport function popSelects(pop: Pop | null | undefined): boolean {\n const selects = (components: PopComponent[] | undefined): boolean =>\n (components ?? []).some((component) => isSelectOperator(component.forward?.operator) || selects(component.forward?.targets))\n return selects(pop?.components)\n}\n\n// the same select rules the worker applies when it compiles the Pop; that a\n// select sits on a tracking component's forward is left to the worker\nfunction validateForwards(components: PopComponent[] | undefined): void {\n for (const component of components ?? []) {\n const operator = component.forward?.operator\n if (operator !== undefined) {\n validateSelectOperator(operator)\n }\n validateForwards(component.forward?.targets)\n }\n}\n\nfunction validateSelectOperator(operator: PopForwardOperator): void {\n if (!isSelectOperator(operator)) {\n if (operator.select !== undefined) {\n throw new Error('select is only valid with the select_crop or select_full operator')\n }\n return\n }\n const select = operator.select\n if (select === undefined) {\n throw new Error(`${operator.type} requires a select block`)\n }\n if (select.mode !== undefined && select.mode !== SelectMode.MOST_RELEVANT) {\n throw new Error(`select mode ${select.mode} is not supported, the only mode is ${SelectMode.MOST_RELEVANT}`)\n }\n if (select.relevancyModel !== undefined && select.relevancyModelUuid !== undefined) {\n throw new Error('select can only have one of relevancyModelUuid or relevancyModel')\n }\n if (select.minTrackLengthSeconds !== undefined && select.minTrackLengthSeconds < 0) {\n throw new Error('select minTrackLengthSeconds cannot be negative')\n }\n if (select.intervalSeconds !== undefined && select.intervalSeconds <= 0) {\n throw new Error('select intervalSeconds must be positive')\n }\n if (operator.crop !== undefined) {\n if (operator.type !== ForwardOperatorType.SELECT_CROP) {\n throw new Error(`crop options are only valid with select_crop, not ${operator.type}`)\n }\n if (operator.crop.maxItems !== undefined) {\n throw new Error('select_crop forwards one detection per selection, maxItems does not apply')\n }\n }\n}\n\nexport interface MotionDetectConfig {\n motionDetect: boolean\n motionSensitivity?: number\n motionThreshold?: number\n motionGap?: number\n motionGridX?: number\n motionGridY?: number\n}\n\nexport interface ComponentParams {\n componentId: number\n values: { [index: string]: any }\n}\n\nexport interface ProcessParams {\n componentParams?: ComponentParams[] | undefined\n motionDetect?: MotionDetectConfig | undefined\n roi?: Area | undefined\n fps?: string | undefined\n /**\n * This source's camera calibration, overriding the Pop's `defaults.camera`.\n *\n * Without one the worker assumes a 60 degree horizontal field of view,\n * which is a development scaffold: for canonical metric depth the guess\n * cancels out of X and Y and survives only in Z, so lateral measurements\n * stay exact while every distance along the optical axis is wrong by\n * however wrong the guess was.\n */\n camera?: Camera | undefined\n /**\n * Build RTSP SETUP URLs the pre-RFC-2326 way, by appending the SDP control\n * attribute to the stream URL. Applies to an `rtsp:` source only.\n *\n * Leave unset unless a camera will not open without it. The compliant\n * construction is what a camera advertising an absolute control URL needs -\n * Axis does - and forcing the old one gives such a camera a URL with the\n * address in it twice, which it answers 404.\n */\n rtspForceNonCompliantUrl?: boolean | undefined\n}\n\nexport interface ProcessRequest extends ProcessParams {\n source: Source\n}\n","import type { HttpClient } from '../options'\nimport type { Pop } from '../worker/worker_types'\n\nexport enum SessionStatus {\n UNKNOWN = 'unknown',\n PENDING = 'pending',\n RUNNING = 'running',\n STOPPED = 'stopped',\n FAILED = 'failed',\n ERROR = 'error',\n\n PIPELINE_CREATING = 'pipeline_creating',\n PIPELINE_OK = 'pipeline_ok',\n PIPELINE_CHECKING = 'pipeline_checking',\n PIPELINE_ERROR = 'pipeline_error',\n UPGRADING = 'upgrading',\n}\n\nexport interface ComputeSession {\n session_uuid: string\n session_endpoint: string\n pipeline_uuid: string\n access_token?: string\n access_token_expires_at?: string\n access_token_expires_in?: number\n session_status: SessionStatus\n session_message: string\n session_name: string\n user_uuid: string\n account_uuid?: string\n created_at: string\n uptime: number\n pipeline_ttl?: number | undefined\n session_active: boolean\n persistent?: boolean\n pipelines?: { id?: string; pipeline_id?: string }[]\n pipeline_error?: ComputeErrorInfo\n}\n\nexport interface ComputeErrorInfo {\n code?: string\n message?: string\n details?: string\n}\n\nexport interface ResolvedComputeSession {\n session: ComputeSession\n pipelineId: string | null\n accessToken: string | null\n accessTokenValidUntil: number | null\n}\n\nexport interface ComputeSessionClientOptions {\n computeUrl: string\n httpClient: HttpClient\n authorizationHeader: () => Promise<string>\n sessionUuid?: string | undefined\n sessionName?: string | undefined\n /**\n * The account the compute session runs and is billed under, sent as `account_uuid`.\n */\n accountId?: string | undefined\n pipelineImage?: string | undefined\n pipelineVersion?: string | undefined\n pop?: Pop | undefined\n readyTimeoutMs: number\n logger?: Pick<Console, 'debug'>\n requestLogger?: Pick<Console, 'debug'>\n}\n\nconst SESSION_DEAD = new Set<SessionStatus>([SessionStatus.ERROR, SessionStatus.FAILED, SessionStatus.STOPPED, SessionStatus.PIPELINE_ERROR, SessionStatus.UNKNOWN])\n\nconst CHECK_FOR_IS_READY_INTERVAL = 250\n\nconst sleep = (ms: number) => new Promise(resolve => setTimeout(resolve, ms))\n\nexport function pipelineIdFromSession(session: ComputeSession): string | null {\n if (session.pipeline_uuid) {\n return session.pipeline_uuid\n }\n const pipeline = session.pipelines?.[0]\n return pipeline?.id || pipeline?.pipeline_id || null\n}\n\nfunction sessionCreateBody(options: ComputeSessionClientOptions): string | undefined {\n const body: any = {}\n if (options.accountId) {\n body.account_uuid = options.accountId\n }\n if (options.sessionName) {\n body.session_name = options.sessionName\n }\n if (options.pipelineImage) {\n body.pipeline_image = options.pipelineImage\n }\n if (options.pipelineVersion) {\n body.pipeline_version = options.pipelineVersion\n }\n if (options.pop) {\n body.pop = options.pop\n }\n return Object.keys(body).length > 0 ? JSON.stringify(body) : undefined\n}\n\nfunction sessionHealthReady(body: string, contentType: string): boolean {\n if (contentType.includes('application/json')) {\n const health = JSON.parse(body)\n if (health && typeof health == 'object') {\n if (health.message && !health.session_status) {\n return true\n }\n return health.session_status == SessionStatus.RUNNING\n }\n }\n return contentType.includes('text/plain') && body.includes(\"I'm fine\")\n}\n\nfunction accessTokenValidUntil(session: ComputeSession): number | null {\n if (session.access_token_expires_at) {\n const expiresAt = Date.parse(session.access_token_expires_at)\n return Number.isNaN(expiresAt) ? null : expiresAt\n }\n if (session.access_token_expires_in) {\n return Date.now() + session.access_token_expires_in * 1000\n }\n return null\n}\n\nfunction errorInfoMessage(errorInfo: ComputeErrorInfo): string {\n return [errorInfo.code, errorInfo.message, errorInfo.details].filter((part): part is string => typeof part == 'string' && part.length > 0).join(': ')\n}\n\nfunction pipelineErrorMessage(session: ComputeSession): string | null {\n if (session.pipeline_error) {\n const message = errorInfoMessage(session.pipeline_error)\n return message ? `Pipeline failed for compute session ${session.session_uuid}: ${message}` : `Pipeline failed for compute session ${session.session_uuid}`\n }\n if (session.session_status == SessionStatus.PIPELINE_ERROR) {\n return `Pipeline failed for compute session ${session.session_uuid}`\n }\n return null\n}\n\n/**\n * A compute-api request that failed. `status` is the HTTP status and `code` the\n * compute-api error code (for example `VAL_001` when no account can be derived\n * for a new session), when the response carried one. The message stays the\n * readable one callers already see.\n */\nexport class ComputeApiError extends Error {\n readonly status: number\n readonly code: string | undefined\n\n constructor(message: string, status: number, code?: string) {\n super(message)\n this.name = 'ComputeApiError'\n this.status = status\n this.code = code\n }\n}\n\n/** A compute session picked by uuid runs under another account than the one configured. */\nexport class ComputeAccountMismatchError extends Error {\n readonly sessionUuid: string\n readonly sessionAccountId: string | undefined\n readonly accountId: string\n\n constructor(sessionUuid: string, sessionAccountId: string | undefined, accountId: string) {\n super(`Compute session ${sessionUuid} runs under account ${sessionAccountId || '(none)'}, not the configured account ${accountId}`)\n this.name = 'ComputeAccountMismatchError'\n this.sessionUuid = sessionUuid\n this.sessionAccountId = sessionAccountId\n this.accountId = accountId\n }\n}\n\nasync function computeApiError(response: Response, action: string): Promise<ComputeApiError> {\n const code = await responseErrorCode(response)\n const message = await responseErrorMessage(response)\n return new ComputeApiError(`Unexpected status ${response.status} ${action}: ${message}`, response.status, code)\n}\n\nasync function responseErrorCode(response: Response): Promise<string | undefined> {\n try {\n const parsed = normalizedJsonValue(await response.clone().json())\n if (!parsed || typeof parsed != 'object') {\n return undefined\n }\n const record = parsed as Record<string, unknown>\n const nested = normalizedJsonValue(record['error'])\n const code = nested && typeof nested == 'object' ? (nested as Record<string, unknown>)['code'] : record['code']\n return typeof code == 'string' && code.length > 0 ? code : undefined\n } catch (_) {\n return undefined\n }\n}\n\nasync function responseErrorMessage(response: Response): Promise<string> {\n const contentType = response.headers.get('content-type') || ''\n if (contentType.includes('application/json')) {\n try {\n const parsed = normalizedJsonValue(await response.clone().json())\n const message = normalizedErrorMessage(parsed)\n if (message) {\n return message\n }\n } catch (_) {}\n }\n const body = await response.text()\n const message = normalizedErrorMessage(body)\n return message || body\n}\n\nfunction normalizedJsonValue(value: unknown): unknown {\n if (typeof value == 'string') {\n try {\n const parsed = JSON.parse(value)\n return normalizedJsonValue(parsed)\n } catch (_) {\n const unescaped = value.replace(/\\\\\"/g, '\"')\n if (unescaped != value) {\n try {\n const parsed = JSON.parse(unescaped)\n return normalizedJsonValue(parsed)\n } catch (_) {}\n }\n return value\n }\n }\n return value\n}\n\nasync function responseJson<T>(response: Response): Promise<T> {\n return normalizedJsonValue(await response.json()) as T\n}\n\nfunction normalizedErrorMessage(value: unknown): string | null {\n value = normalizedJsonValue(value)\n\n if (typeof value == 'string') {\n return value\n }\n if (!value || typeof value != 'object') {\n return null\n }\n\n const record = value as Record<string, unknown>\n const normalizedError = normalizedJsonValue(record['error'])\n const errorMessage = normalizedErrorMessage(normalizedError) || (typeof normalizedError == 'string' ? normalizedError : null)\n const message = [record['code'], errorMessage, record['message'], record['details']].filter((part): part is string => typeof part == 'string' && part.length > 0).join(': ')\n if (message) {\n return message\n }\n\n if (record['pipeline_error']) {\n return normalizedErrorMessage(record['pipeline_error'])\n }\n\n if (normalizedError && typeof normalizedError == 'object') {\n return normalizedErrorMessage(normalizedError)\n }\n\n try {\n return JSON.stringify(value)\n } catch (_) {\n return null\n }\n}\n\nexport class ComputeSessionClient {\n constructor(private readonly options: ComputeSessionClientOptions) {}\n\n public async resolve(): Promise<ResolvedComputeSession> {\n const session = this.options.sessionUuid ? await this.getPermanentComputeSession(this.options.sessionUuid) : await this.getOnDemandComputeSession()\n const pipelineFailure = pipelineErrorMessage(session)\n if (pipelineFailure) {\n throw new Error(pipelineFailure)\n }\n const authorizationHeader = await this.sessionAuthorizationHeader(session)\n await this.waitUntilReady(session, authorizationHeader)\n const pipelineId = pipelineIdFromSession(session)\n if (this.options.pop && !pipelineId) {\n throw new Error('Compute session did not provide a pipeline for the requested pop')\n }\n return {\n session,\n pipelineId,\n accessToken: session.access_token || null,\n accessTokenValidUntil: accessTokenValidUntil(session),\n }\n }\n\n private async getOnDemandComputeSession(): Promise<ComputeSession> {\n let session: ComputeSession | null = null\n\n const sessionsUrl = `${this.options.computeUrl}/v1/sessions`\n const headers = {\n Authorization: await this.options.authorizationHeader(),\n }\n let sessions: ComputeSession[]\n\n if (!this.options.pop) {\n this.options.requestLogger?.debug('fetching sessions from: %s', sessionsUrl)\n const response = await this.options.httpClient.fetch(sessionsUrl, {\n headers: headers,\n })\n\n if (response.status == 404) {\n sessions = []\n } else if (response.status != 200) {\n throw await computeApiError(response, 'fetching compute sessions')\n } else {\n const response_content = await responseJson<ComputeSession[]>(response)\n sessions = response_content as ComputeSession[]\n }\n if (sessions.length > 0) {\n this.options.logger?.debug(`User has ${sessions.length} sessions, inspecting for usable session`)\n for (let s of sessions) {\n if (\n !SESSION_DEAD.has(s.session_status) &&\n !s.persistent &&\n (!this.options.sessionName || s.session_name === this.options.sessionName) &&\n (!this.options.accountId || s.account_uuid === this.options.accountId)\n ) {\n session = s\n this.options.logger?.debug(`Use active session ${s.session_uuid} with pipeline ${pipelineIdFromSession(s)}`)\n break\n }\n }\n }\n }\n if (!session) {\n this.options.requestLogger?.debug('creating a new session at: %s', sessionsUrl)\n const createBody = sessionCreateBody(this.options)\n const createHeaders = {\n ...headers,\n ...(createBody ? { 'Content-Type': 'application/json' } : {}),\n }\n const request: RequestInit = {\n headers: createHeaders,\n method: 'POST',\n }\n if (createBody) {\n request.body = createBody\n }\n const query = 'wait=true'\n const response = await this.options.httpClient.fetch(`${sessionsUrl}?${query}`, request)\n if (response.status != 200) {\n throw await computeApiError(response, 'creating a compute session')\n } else {\n sessions = await responseJson<ComputeSession[]>(response)\n }\n if (sessions.length == 0) {\n throw new Error('Unexpected, no compute session after attempt to create one')\n }\n session = sessions[0] || null\n }\n if (!session) {\n throw new Error('unexpected undefined session')\n }\n return session\n }\n\n private async getPermanentComputeSession(sessionUuid: string): Promise<ComputeSession> {\n let session: ComputeSession | null = null\n\n const sessionUrl = `${this.options.computeUrl}/v1/sessions/${sessionUuid}`\n this.options.requestLogger?.debug('fetching session from: %s', sessionUrl)\n const headers = {\n Authorization: await this.options.authorizationHeader(),\n }\n let response = await this.options.httpClient.fetch(sessionUrl, {\n headers: headers,\n })\n if (response.status == 404) {\n throw new ComputeApiError(`Unexpected status ${response.status} compute sessions ${sessionUuid} not found`, response.status)\n } else if (response.status != 200) {\n throw await computeApiError(response, 'fetching compute sessions')\n } else {\n const response_content = await responseJson<ComputeSession>(response)\n session = response_content as ComputeSession\n }\n // A session picked by uuid runs under its own account. Attaching to it under\n // another one would bill and report the session against the wrong account.\n if (this.options.accountId && session.account_uuid !== this.options.accountId) {\n throw new ComputeAccountMismatchError(sessionUuid, session.account_uuid, this.options.accountId)\n }\n return session\n }\n\n private async sessionAuthorizationHeader(session: ComputeSession): Promise<string> {\n if (session.access_token) {\n return `Bearer ${session.access_token}`\n }\n return this.options.authorizationHeader()\n }\n\n private async waitUntilReady(session: ComputeSession, authorizationHeader: string): Promise<void> {\n let isReady: boolean = false\n const deadline: number = Date.now() + this.options.readyTimeoutMs\n while (!isReady) {\n const health_url = `${session.session_endpoint}/health`\n const response = await this.options.httpClient.fetch(health_url, {\n headers: {\n Authorization: authorizationHeader,\n Accept: 'application/json',\n },\n })\n if (response.status == 200) {\n const contentType = response.headers.get('content-type') || ''\n const body = await response.text()\n try {\n isReady = sessionHealthReady(body, contentType)\n } catch (error) {\n this.options.logger?.debug(`session ${session.session_uuid} health check returned invalid JSON, wait and poll for update`)\n }\n if (!isReady && Date.now() > deadline) {\n throw new Error(`Created session ${session.session_uuid} did not become healthy after ${this.options.readyTimeoutMs / 1000} seconds`)\n }\n if (!isReady) {\n this.options.logger?.debug(`session ${session.session_uuid} health check not ready, wait and poll for update`)\n await sleep(CHECK_FOR_IS_READY_INTERVAL)\n }\n } else if (Date.now() > deadline) {\n throw new Error(`Created session ${session.session_uuid} did not become healthy after ${this.options.readyTimeoutMs / 1000} seconds`)\n } else {\n this.options.logger?.debug(`session ${session.session_uuid} health check status ${response.status}, wait and poll for update`)\n await sleep(CHECK_FOR_IS_READY_INTERVAL)\n }\n }\n }\n}\n","import { v4 as uuidv4 } from 'uuid'\n\ntype Bytes = string | ArrayBuffer | Uint8Array | Buffer | null | undefined\n\nexport interface StreamEvent {\n type: string\n source_id?: string\n message?: string\n}\n\nexport class Stream<Prediction> implements AsyncIterable<Prediction> {\n controller: AbortController\n\n constructor(\n private iterator: () => AsyncIterator<Prediction>,\n controller: AbortController,\n ) {\n this.controller = controller\n }\n\n static iterFromReadableStream<Prediction>(\n readableStream: Promise<ReadableStream<Uint8Array>>,\n controller: AbortController,\n eventHandler: (event: StreamEvent) => Promise<void>,\n ): AsyncIterator<Prediction, any, undefined> {\n let consumed = false\n\n async function* iterLines(): AsyncGenerator<string, void, unknown> {\n const lineDecoder = new EyepopLineDecoder()\n const iter = readableStreamAsyncIterable<Bytes>(await readableStream)\n for await (let chunk of iter) {\n for (const line of lineDecoder.decode(chunk)) {\n yield line\n }\n }\n\n for (const line of lineDecoder.flush()) {\n yield line\n }\n }\n\n async function* iterator(): AsyncIterator<Prediction, any, undefined> {\n if (consumed) {\n throw new Error('Cannot iterate over a consumed stream, use `.tee()` to split the stream.')\n }\n consumed = true\n let done = false\n try {\n for await (const line of iterLines()) {\n if (done) continue\n if (line) {\n const message = JSON.parse(line)\n const event = message['event']\n if (event !== undefined) {\n await eventHandler(event)\n } else {\n yield message\n }\n }\n }\n done = true\n } catch (e) {\n // If the user calls `stream.controller.abort()`, we should exit without throwing.\n if (e instanceof Error && e.name === 'AbortError') return\n throw e\n } finally {\n // If the user `break`s, abort the ongoing request.\n if (!done) controller.abort()\n }\n }\n\n return iterator()\n }\n\n [Symbol.asyncIterator](): AsyncIterator<Prediction> {\n return this.iterator()\n }\n\n /**\n * Splits the stream into two streams which can be\n * independently read from at different speeds.\n */\n tee(): [Stream<Prediction>, Stream<Prediction>] {\n const left: Array<Promise<IteratorResult<Prediction>>> = []\n const right: Array<Promise<IteratorResult<Prediction>>> = []\n const iterator = this.iterator()\n\n const teeIterator = (queue: Array<Promise<IteratorResult<Prediction>>>): AsyncIterator<Prediction> => {\n return {\n next: () => {\n if (queue.length === 0) {\n const result = iterator.next()\n left.push(result)\n right.push(result)\n }\n return queue.shift()!\n },\n }\n }\n\n return [new Stream(() => teeIterator(left), this.controller), new Stream(() => teeIterator(right), this.controller)]\n }\n}\n\n/**\n * A re-implementation of httpx's `LineDecoder` in Python that handles incrementally\n * reading lines from text.\n *\n * https://github.com/encode/httpx/blob/920333ea98118e9cf617f246905d7b202510941c/httpx/_decoders.py#L258\n */\nexport class EyepopLineDecoder {\n // prettier-ignore\n static NEWLINE_CHARS = new Set(['\\n', '\\r', '\\x0b', '\\x0c', '\\x1c', '\\x1d', '\\x1e', '\\x85', '\\u2028', '\\u2029']);\n static NEWLINE_REGEXP = /\\r\\n|[\\n\\r\\x0b\\x0c\\x1c\\x1d\\x1e\\x85\\u2028\\u2029]/g\n\n buffer: string[]\n trailingCR: boolean\n textDecoder: any // TextDecoder found in browsers; not typed to avoid pulling in either \"dom\" or \"node\" types.\n\n constructor() {\n this.buffer = []\n this.trailingCR = false\n }\n\n decode(chunk: Bytes): string[] {\n let text = this.decodeText(chunk)\n\n if (this.trailingCR) {\n text = '\\r' + text\n this.trailingCR = false\n }\n if (text.endsWith('\\r')) {\n this.trailingCR = true\n text = text.slice(0, -1)\n }\n\n if (!text) {\n return []\n }\n\n const trailingNewline = EyepopLineDecoder.NEWLINE_CHARS.has(text[text.length - 1] || '')\n let lines = text.split(EyepopLineDecoder.NEWLINE_REGEXP)\n\n if (lines.length === 1 && !trailingNewline) {\n this.buffer.push(lines[0]!)\n return []\n }\n\n if (this.buffer.length > 0) {\n lines = [this.buffer.join('') + lines[0], ...lines.slice(1)]\n this.buffer = []\n }\n\n if (!trailingNewline) {\n this.buffer = [lines.pop() || '']\n }\n\n return lines\n }\n\n decodeText(bytes: Bytes): string {\n if (bytes == null) return ''\n if (typeof bytes === 'string') return bytes\n\n // Node:\n if (typeof Buffer !== 'undefined') {\n if (bytes instanceof Buffer) {\n return bytes.toString()\n }\n if (bytes instanceof Uint8Array) {\n return Buffer.from(bytes).toString()\n }\n\n throw new Error(\n `Unexpected: received non-Uint8Array (${bytes.constructor.name}) stream chunk in an environment with a global \"Buffer\" defined, which this library assumes to be Node. Please report this error.`,\n )\n }\n\n // Browser\n if (typeof TextDecoder !== 'undefined') {\n if (bytes instanceof Uint8Array || bytes instanceof ArrayBuffer) {\n this.textDecoder ??= new TextDecoder('utf8')\n return this.textDecoder.decode(bytes)\n }\n\n throw new Error(`Unexpected: received non-Uint8Array/ArrayBuffer (${(bytes as any).constructor.name}) in a web platform. Please report this error.`)\n }\n\n throw new Error(`Unexpected: neither Buffer nor TextDecoder are available as globals. Please report this error.`)\n }\n\n flush(): string[] {\n if (!this.buffer.length && !this.trailingCR) {\n return []\n }\n\n const lines = [this.buffer.join('')]\n this.buffer = []\n this.trailingCR = false\n return lines\n }\n}\n\n/**\n * Most browsers don't yet have async iterable support for ReadableStream,\n * and Node has a very different way of reading bytes from its \"ReadableStream\".\n *\n * This polyfill was pulled from https://github.com/MattiasBuelens/web-streams-polyfill/pull/122#issuecomment-1627354490\n */\nfunction readableStreamAsyncIterable<T>(stream: any): AsyncIterableIterator<T> {\n if (stream[Symbol.asyncIterator]) {\n return stream[Symbol.asyncIterator]()\n }\n\n const reader = stream.getReader()\n\n return {\n async next() {\n try {\n const result = await reader.read()\n if (result?.done) reader.releaseLock() // release lock when stream becomes closed\n return result\n } catch (e) {\n reader.releaseLock() // release lock when stream becomes errored\n throw e\n }\n },\n async return() {\n const cancelPromise = reader.cancel()\n reader.releaseLock()\n await cancelPromise\n return { done: true, value: undefined }\n },\n [Symbol.asyncIterator]() {\n return this\n },\n }\n}\nexport function readableStreamFromString(s: string): ReadableStream<Uint8Array> {\n return new ReadableStream({\n start(controller) {\n controller.enqueue(Buffer.from(s))\n controller.close()\n },\n })\n}\n\nexport type MultipartContent = ReadableStream<Uint8Array> | Blob | BufferSource | string\n\nexport interface MultipartPart {\n name: string\n contentType?: string | null\n content: MultipartContent\n}\n\nexport function randomMultipartBoundary(): string {\n return `----formdata-boundary-${uuidv4()}`\n}\n\nfunction toPartStream(content: Exclude<MultipartContent, string>): ReadableStream<Uint8Array> {\n if (content instanceof ReadableStream) {\n return content\n }\n if (content instanceof Blob) {\n return content.stream()\n }\n const bytes = ArrayBuffer.isView(content) ? new Uint8Array(content.buffer, content.byteOffset, content.byteLength) : new Uint8Array(content)\n return new ReadableStream({\n start(controller) {\n controller.enqueue(bytes)\n controller.close()\n },\n })\n}\n\nasync function cancelMultipartContent(content: MultipartContent, reason?: unknown): Promise<void> {\n if (content instanceof ReadableStream) {\n await content.cancel(reason)\n }\n}\n\n/**\n * Streams a multipart/form-data body part by part, piping each part's bytes through as they\n * become available instead of buffering any part's full content in memory first.\n */\nexport function encodeMultipartFormData(parts: MultipartPart[], boundary: string): ReadableStream<Uint8Array> {\n const encoder = new TextEncoder()\n let partIndex = 0\n let reader: ReadableStreamDefaultReader<Uint8Array> | null = null\n\n return new ReadableStream<Uint8Array>({\n async pull(controller) {\n if (reader) {\n const { done, value } = await reader.read()\n if (!done) {\n controller.enqueue(value)\n return\n }\n reader = null\n controller.enqueue(encoder.encode('\\r\\n'))\n partIndex++\n }\n if (partIndex >= parts.length) {\n controller.enqueue(encoder.encode(`--${boundary}--\\r\\n`))\n controller.close()\n return\n }\n const part = parts[partIndex]!\n let header = `--${boundary}\\r\\nContent-Disposition: form-data; name=\"${part.name}\"\\r\\n`\n if (part.contentType) {\n header += `Content-Type: ${part.contentType}\\r\\n`\n }\n header += '\\r\\n'\n controller.enqueue(encoder.encode(header))\n if (typeof part.content === 'string') {\n controller.enqueue(encoder.encode(part.content))\n controller.enqueue(encoder.encode('\\r\\n'))\n partIndex++\n } else {\n reader = toPartStream(part.content).getReader()\n }\n },\n async cancel(reason) {\n await reader?.cancel(reason)\n const firstUnstartedPart = reader ? partIndex + 1 : partIndex\n await Promise.all(parts.slice(firstUnstartedPart).map(part => cancelMultipartContent(part.content, reason)))\n },\n })\n}\n","import { v4 as uuidv4 } from 'uuid'\nimport { Logger } from 'pino'\nimport { WebrtcBase } from './webrtc_base'\nimport { WorkerSession } from '../worker/worker_types'\nimport { HttpClient } from '../options'\n\nexport class WebrtcWhip extends WebrtcBase {\n private _stream: MediaStream | null\n constructor(stream: MediaStream, getSession: () => Promise<WorkerSession>, client: HttpClient, is_pipeline_direct: boolean, requestLogger: Logger) {\n super(getSession, client, uuidv4().toString(), 'liveIngress/whip', is_pipeline_direct, requestLogger)\n this._stream = stream\n }\n public async start(): Promise<WebrtcWhip> {\n const session = await this._getSession()\n\n const ingressUrl = this.gresUrl(session)\n\n /* According to https://www.ietf.org/archive/id/draft-ietf-wish-whip-01.html\n this should be a `OPTIONS` request. Unfortunately a lot of CORS middlewares\n hijack the OPTIONS request and only return those headers that are necessary\n for the CORS preflight protocol.\n As workaround, our media endpoint expose a equivalent `GET` request to fake\n the `OPTIONS` request and bypass the CORS preflight trap\n */\n const response = await this._client.fetch(ingressUrl, {\n headers: session.authenticationHeaders(),\n method: 'GET',\n })\n if (response.status >= 300) {\n return Promise.reject(`unknown status code for GET '${ingressUrl}': ${response.status} (${response.statusText})`)\n }\n return await this.onIceServers(response)\n }\n\n public async stream(): Promise<MediaStream> {\n if (this._stream) {\n return Promise.resolve(this._stream)\n } else {\n return Promise.reject('fetching stream failed')\n }\n }\n\n protected async onRemoteAnswer(answer: RTCSessionDescription): Promise<WebrtcBase> {\n if (!this._pc) {\n throw new Error('onLocalOffer no peer connection')\n }\n await this._pc.setRemoteDescription(new RTCSessionDescription(answer))\n\n if (this._queuedCandidates.length !== 0) {\n await this.sendLocalCandidates(this._queuedCandidates)\n this._queuedCandidates = []\n }\n return this\n }\n\n private async onIceServers(response: Response): Promise<WebrtcWhip> {\n if (!this._stream) {\n throw new Error('onIceServers no stream')\n }\n const stream = this._stream\n const pc = new RTCPeerConnection({\n iceServers: WebrtcBase.linkToIceServers(response.headers.get('Link')),\n })\n\n this._pc = pc\n pc.onicecandidate = evt => this.onLocalCandidate(evt)\n\n return new Promise(async (resolve, reject) => {\n pc.oniceconnectionstatechange = () => {\n switch (pc.iceConnectionState) {\n case 'failed':\n case 'disconnected':\n reject(`peer connection: ${pc.iceConnectionState}`)\n break\n case 'connected':\n resolve(this)\n break\n }\n }\n stream.getTracks().forEach(track => {\n this._requestLogger.debug('onIceServers our stream has track: %s', track)\n pc.addTrack(track, stream)\n })\n stream.addEventListener('addtrack', trackEvent => {\n this._requestLogger.debug('onIceServers got lazy track: ', trackEvent.track)\n pc.addTrack(trackEvent.track, stream)\n })\n await this.onLocalOffer(await pc.createOffer())\n })\n }\n\n public override async close(): Promise<void> {\n const stream = this._stream\n this._stream = null\n if (stream) {\n const tracks = stream.getTracks()\n tracks.forEach(track => {\n track.stop()\n })\n }\n return super.close()\n }\n}\n","import { Logger } from 'pino'\nimport { WebrtcWhip } from './webrtc_whip'\nimport path from 'path'\nimport { WorkerSession } from '../worker/worker_types'\nimport { HttpClient } from '../options'\n\ninterface OfferData {\n iceUfrag: string\n icePwd: string\n medias: string[]\n}\nexport abstract class WebrtcBase {\n protected readonly _getSession: () => Promise<WorkerSession>\n protected readonly _client: HttpClient\n protected readonly _requestLogger: Logger\n protected readonly _urlPath: string\n protected readonly _is_pipeline_direct: boolean\n\n private readonly _ingressId: string\n\n private _location: string | null\n\n protected _pc: RTCPeerConnection | null\n protected _eTag: string\n protected _queuedCandidates: RTCIceCandidate[]\n protected _offerData: OfferData | null\n\n protected constructor(getSession: () => Promise<WorkerSession>, client: HttpClient, ingressId: string, urlBasePath: string, is_pipeline_direct: boolean, requestLogger: Logger) {\n this._getSession = getSession\n this._client = client\n this._requestLogger = requestLogger\n this._ingressId = ingressId\n this._urlPath = `${urlBasePath}/${this._ingressId}`\n this._is_pipeline_direct = is_pipeline_direct\n this._pc = null\n this._eTag = ''\n this._location = null\n this._queuedCandidates = []\n this._offerData = null\n }\n\n public async close(): Promise<void> {\n const pc = this._pc\n this._pc = null\n if (pc) {\n return pc.close()\n }\n }\n\n public ingressId(): string {\n return this._ingressId\n }\n\n protected gresUrl(session: WorkerSession, location: string | null = null): URL {\n let urlPath\n if (this._is_pipeline_direct) {\n if (!session.pipelineId) {\n throw new Error('cannot connect with is_pipeline_direct=true but !session.pipelineId')\n }\n urlPath = path.join('pipelines', session.pipelineId, this._urlPath)\n } else {\n urlPath = this._urlPath\n }\n if (location) {\n urlPath = path.join(urlPath, location)\n }\n let baseUrl\n if (session.baseUrl?.endsWith('/')) {\n baseUrl = session.baseUrl\n } else {\n baseUrl = session.baseUrl + '/'\n }\n return new URL(urlPath, baseUrl)\n }\n\n protected async onLocalOffer(offer: RTCSessionDescriptionInit): Promise<WebrtcBase> {\n if (!this._pc) {\n throw new Error('onLocalOffer no peer connection')\n }\n if (!offer.sdp) {\n throw new Error('onLocalOffer no sdp')\n }\n this._offerData = WebrtcBase.parseOffer(offer.sdp)\n await this._pc.setLocalDescription(offer)\n\n const session = await this._getSession()\n const ingressUrl = this.gresUrl(session)\n\n const headers = {\n ...session.authenticationHeaders(),\n 'Content-Type': 'application/sdp',\n }\n const response = await this._client.fetch(ingressUrl, {\n headers: headers,\n method: 'POST',\n body: offer.sdp,\n })\n if (response.status >= 300) {\n return Promise.reject(`unknown status code for POST '${ingressUrl}': ${response.status} (${response.statusText})`)\n }\n this._eTag = response.headers.get('ETag') ?? ''\n this._location = response.headers.get('Location')\n return await this.onRemoteAnswer(new RTCSessionDescription({\n type: 'answer',\n sdp: await response.text()\n }))\n }\n\n protected abstract onRemoteAnswer(answer: RTCSessionDescription): Promise<WebrtcBase>\n\n protected async sendLocalCandidates(candidates: RTCIceCandidate[]): Promise<WebrtcBase> {\n if (!this._offerData) {\n throw new Error('sendLocalCandidates no offerData')\n }\n\n const session = await this._getSession()\n const ingressUrl = this.gresUrl(session, this._location)\n\n const headers = {\n ...session.authenticationHeaders(),\n 'Content-Type': 'application/trickle-ice-sdpfrag',\n 'If-Match': this._eTag,\n }\n const response = await this._client.fetch(ingressUrl, {\n headers: headers,\n method: 'PATCH',\n body: WebrtcBase.generateSdpFragment(this._offerData, candidates),\n })\n if (response.status >= 300) {\n return Promise.reject(`unknown status code for PATCH '${ingressUrl}': ${response.status} (${response.statusText})`)\n }\n return this\n }\n\n protected async onLocalCandidate(evt: RTCPeerConnectionIceEvent): Promise<WebrtcBase> {\n if (evt.candidate !== null) {\n if (this._eTag === '') {\n this._queuedCandidates.push(evt.candidate)\n } else {\n await this.sendLocalCandidates([evt.candidate])\n }\n }\n return this\n }\n\n static linkToIceServers(links: string | null): RTCIceServer[] {\n const servers =\n links !== null\n ? links.split(', ').map(link => {\n // backward compatible to MEDIAMTX using <...>\n let m = link.match(/^<(.+?)>; rel=\"ice-server\"(; username=\"(.*?)\"; credential=\"(.*?)\"; credential-type=\"password\")?/i);\n if (!m) {\n m = link.match(/^(.+?); rel=\"ice-server\"(; username=\"(.*?)\"; credential=\"(.*?)\"; credential-type=\"password\")?/i);\n }\n if (!m) {\n return null\n }\n const iceServer: RTCIceServer = {\n urls: [m[1]] as string[],\n username: WebrtcWhip.unquoteCredential(m[3]),\n credential: WebrtcWhip.unquoteCredential(m[4]),\n // credentialType: m[3]? \"password\" : undefined\n }\n return iceServer\n })\n : []\n return <RTCIceServer[]>servers.filter(function (el: null | RTCIceServer) {\n return el != null\n })\n }\n\n protected static editAnswer(answer: string, videoCodec: string, audioCodec: string | undefined, videoBitrate: number, audioBitrate: number | undefined, audioVoice: boolean): string {\n const sections = answer.split('m=')\n\n for (let i = 0; i < sections.length; i++) {\n const section = sections[i]\n if (section && section.startsWith('video')) {\n sections[i] = WebrtcWhip.setVideoBitrate(WebrtcWhip.setCodec(section, videoCodec), videoBitrate)\n } else if (section && section.startsWith('audio')) {\n sections[i] = WebrtcWhip.setAudioBitrate(WebrtcWhip.setCodec(section, audioCodec), audioBitrate, audioVoice)\n }\n }\n\n return sections.join('m=')\n }\n\n private static setCodec(section: string, codec: string | undefined): string {\n const lines = section.split('\\r\\n')\n const lines2 = []\n const payloadFormats = []\n\n for (const line of lines) {\n if (!line.startsWith('a=rtpmap:')) {\n lines2.push(line)\n } else {\n if (codec && line.toLowerCase().includes(codec)) {\n payloadFormats.push(line.slice('a=rtpmap:'.length).split(' ')[0])\n lines2.push(line)\n }\n }\n }\n\n const lines3 = []\n\n for (const line of lines2) {\n if (line.startsWith('a=fmtp:')) {\n if (payloadFormats.includes(line.slice('a=fmtp:'.length).split(' ')[0])) {\n lines3.push(line)\n }\n } else if (line.startsWith('a=rtcp-fb:')) {\n if (payloadFormats.includes(line.slice('a=rtcp-fb:'.length).split(' ')[0])) {\n lines3.push(line)\n }\n } else {\n lines3.push(line)\n }\n }\n\n return lines3.join('\\r\\n')\n }\n\n private static setVideoBitrate(section: string, bitrate: number): string {\n let lines = section.split('\\r\\n')\n\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i]\n if (!line) {\n continue\n }\n if (line.startsWith('c=')) {\n lines = [...lines.slice(0, i + 1), 'b=TIAS:' + (bitrate * 1024).toString(), ...lines.slice(i + 1)]\n break\n }\n }\n\n return lines.join('\\r\\n')\n }\n\n private static setAudioBitrate(section: string, bitrate: number | undefined, voice: boolean) {\n let opusPayloadFormat = ''\n let lines: string[] = section.split('\\r\\n')\n\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i]\n if (!line) {\n continue\n }\n if (line.startsWith('a=rtpmap:') && line.toLowerCase().includes('opus/')) {\n opusPayloadFormat = line.slice('a=rtpmap:'.length).split(' ')[0] || ''\n break\n }\n }\n\n if (opusPayloadFormat === '') {\n return section\n }\n\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i]\n if (!line) {\n continue\n }\n if (line.startsWith('a=fmtp:' + opusPayloadFormat + ' ')) {\n if (voice) {\n lines[i] = 'a=fmtp:' + opusPayloadFormat + ' minptime=10;useinbandfec=1;maxaveragebitrate=' + ((bitrate ?? 0) * 1024).toString()\n } else {\n lines[i] = 'a=fmtp:' + opusPayloadFormat + ' maxplaybackrate=48000;stereo=1;sprop-stereo=1;maxaveragebitrate' + ((bitrate ?? 0) * 1024).toString()\n }\n }\n }\n\n return lines.join('\\r\\n')\n }\n\n static parseOffer(offer: string): OfferData {\n let medias = []\n let iceUfrag = ''\n let icePwd = ''\n\n for (const line of offer.split('\\r\\n')) {\n if (line.startsWith('m=')) {\n medias.push(line.slice('m='.length))\n } else if (iceUfrag === '' && line.startsWith('a=ice-ufrag:')) {\n iceUfrag = line.slice('a=ice-ufrag:'.length)\n } else if (icePwd === '' && line.startsWith('a=ice-pwd:')) {\n icePwd = line.slice('a=ice-pwd:'.length)\n }\n }\n\n return {\n iceUfrag: iceUfrag,\n icePwd: icePwd,\n medias: medias,\n }\n }\n\n static generateSdpFragment(offerData: OfferData, candidates: RTCIceCandidate[]) {\n const candidatesByMedia = new Map<number, RTCIceCandidate[]>()\n for (const candidate of candidates) {\n if (candidate.sdpMLineIndex !== null) {\n const mid = candidate.sdpMLineIndex\n let matched = candidatesByMedia.get(mid)\n if (matched === undefined) {\n matched = []\n candidatesByMedia.set(mid, matched)\n }\n matched.push(candidate)\n }\n }\n\n let frag = 'a=ice-ufrag:' + offerData.iceUfrag + '\\r\\n' + 'a=ice-pwd:' + offerData.icePwd + '\\r\\n'\n let mid = 0\n\n for (const media of offerData.medias) {\n let matched = candidatesByMedia.get(mid)\n if (matched !== undefined) {\n frag += 'm=' + media + '\\r\\n' + 'a=mid:' + mid + '\\r\\n'\n\n for (const candidate of matched) {\n frag += 'a=' + candidate.candidate + '\\r\\n'\n }\n }\n mid++\n }\n return frag\n }\n\n static unquoteCredential(v: string | undefined): string {\n if (!v) {\n return ''\n }\n return JSON.parse(`\"${v}\"`)\n }\n}\n","import { Prediction } from '../types'\nimport { Stream, StreamEvent, readableStreamFromString, MultipartPart, randomMultipartBoundary, encodeMultipartFormData } from '../streaming'\nimport { Logger } from 'pino'\nimport { ComponentParams, DEFAULT_PREDICTION_VERSION, PredictionVersion, ProcessParams, ResultStream, VideoMode, WorkerSession } from '../worker/worker_types'\nimport { HttpClient } from '../options'\nimport { WebrtcWhip } from './webrtc_whip'\nimport { Area } from 'EyePop/data/data_types'\n\ntype UploadBody = ReadableStream<Uint8Array> | Blob | BufferSource\n\nexport class AbstractJob implements ResultStream {\n protected _getSession: () => Promise<WorkerSession>\n\n protected _params: ProcessParams\n\n protected _responseStream: Promise<ReadableStream<Uint8Array>> | null = null\n protected _controller: AbortController = new AbortController()\n\n protected _client: HttpClient\n\n protected _requestLogger: Logger\n\n protected _version: PredictionVersion;\n\n [Symbol.asyncIterator](): AsyncIterator<Prediction> {\n if (!this._responseStream) {\n throw Error('logical bug')\n }\n return Stream.iterFromReadableStream(this._responseStream, this._controller, async (event: StreamEvent) => {\n return await this.onEvent(event)\n })\n }\n\n protected constructor(params: ProcessParams, getSession: () => Promise<WorkerSession>, client: HttpClient, requestLogger: Logger, version: PredictionVersion = DEFAULT_PREDICTION_VERSION) {\n this._getSession = getSession\n this._params = params\n this._client = client\n this._requestLogger = requestLogger\n this._version = version\n }\n\n protected async startJob(): Promise<Response> {\n return Promise.reject('abstract class')\n }\n\n protected async onEvent(event: StreamEvent): Promise<void> {\n if (event.type == 'error') {\n return Promise.reject(`Error event for source ${event.source_id}: ${event.message}`)\n }\n return Promise.resolve()\n }\n\n static n: number = 0\n\n public start(done: () => void, status: (statusCode: number) => void): AbstractJob {\n this._responseStream = new Promise<ReadableStream<Uint8Array>>(async (resolve, reject) => {\n try {\n let retries = 1\n while (true) {\n try {\n const response = await this.startJob()\n if (response.status == 401) {\n status(response.status)\n if (retries--) {\n this._requestLogger.info('received 401 response, attempt to reauthorize once')\n } else {\n reject(`response ${response.status}: ${response.statusText}`)\n break\n }\n } else if (response.status == 404) {\n status(response.status)\n if (retries--) {\n this._requestLogger.info('received 404 response, attempt to restart pop')\n } else {\n reject(`response ${response.status}: ${response.statusText}`)\n break\n }\n } else if (!response.ok) {\n reject(`upload error ${response.status}: ${await response.text()}`)\n break\n } else if (response.body) {\n resolve(response.body)\n break\n } else {\n const text = await response.text()\n if (text) {\n resolve(readableStreamFromString(text))\n break\n } else {\n reject('response body is empty')\n break\n }\n }\n } catch (error) {\n if (retries--) {\n this._requestLogger.info('unknown, attempt to restart pop (as if we received 404)', error)\n status(404)\n } else {\n status(500)\n reject(error)\n break\n }\n }\n }\n } catch (reason) {\n reject(reason)\n } finally {\n done()\n }\n })\n return this\n }\n\n public cancel(): void {\n this._controller.abort('cancelled')\n }\n}\n\nexport class UploadJob extends AbstractJob {\n private readonly _uploadStream: UploadBody\n private readonly _uploadBodyFactory: (() => Promise<UploadBody>) | undefined\n private readonly _mimeType: string\n private readonly _size: number | undefined\n private readonly _needsFullDuplex: boolean\n private readonly _videoMode: VideoMode | undefined\n get [Symbol.toStringTag](): string {\n return 'uploadJob'\n }\n\n constructor(\n stream: UploadBody,\n mimeType: string,\n size: number | undefined,\n videoMode: VideoMode | undefined,\n params: ProcessParams,\n getSession: () => Promise<WorkerSession>,\n client: HttpClient,\n requestLogger: Logger,\n uploadBodyFactory?: () => Promise<UploadBody>,\n version: PredictionVersion = DEFAULT_PREDICTION_VERSION,\n ) {\n super(params, getSession, client, requestLogger, version)\n this._uploadStream = stream\n this._uploadBodyFactory = uploadBodyFactory\n this._mimeType = mimeType\n this._size = size\n this._videoMode = videoMode\n this._needsFullDuplex = !client.isFullDuplex() && mimeType.startsWith('video/') && videoMode == VideoMode.STREAM\n }\n\n private async uploadBody(): Promise<UploadBody> {\n return this._uploadBodyFactory ? await this._uploadBodyFactory() : this._uploadStream\n }\n\n protected override async onEvent(event: StreamEvent): Promise<void> {\n if (event.type == 'prepared') {\n if (!event.source_id) {\n return Promise.reject('did not get a prepared sourceId to simulate full duplex')\n }\n const session = await this._getSession()\n if (!session.baseUrl) {\n return Promise.reject('session.baseUrl must not ne null')\n }\n let request\n const queryParams = new URLSearchParams({\n mode: 'queue',\n processing: 'async',\n sourceId: event.source_id,\n })\n if (this._videoMode !== undefined) {\n queryParams.set('videoMode', this._videoMode)\n }\n if (this._version !== undefined) {\n queryParams.set('version', this._version.toString())\n }\n if (this._params.motionDetect) {\n for (const [key, value] of Object.entries(this._params.motionDetect)) {\n queryParams.set(key, value)\n }\n }\n const postUrl: string = `${session.baseUrl.replace(/\\/+$/, '')}/pipelines/${session.pipelineId}/source?${queryParams.toString()}`\n if (this._params.componentParams || this._params.roi || this._params.camera) {\n const formData = new FormData()\n if (this._params.componentParams) {\n const blob = new Blob([JSON.stringify(this._params.componentParams)], { type: 'application/json' })\n formData.append('params', blob)\n }\n if (this._params.roi) {\n const blob = new Blob([JSON.stringify(this._params.roi)], { type: 'application/json' })\n formData.append('roi', blob)\n }\n if (this._params.fps) {\n const blob = new Blob([JSON.stringify(this._params.fps)], { type: 'application/json' })\n formData.append('fps', blob)\n }\n if (this._params.camera) {\n const blob = new Blob([JSON.stringify(this._params.camera)], { type: 'application/json' })\n formData.append('camera', blob)\n }\n const fileBlob = await new Response(await this.uploadBody()).blob()\n formData.append('file', fileBlob)\n const headers = {\n ...session.authenticationHeaders(),\n Accept: 'application/jsonl',\n }\n\n request = this._client.fetch(postUrl, {\n headers: headers,\n method: 'POST',\n body: formData,\n signal: this._controller.signal,\n // @ts-ignore\n duplex: 'half',\n eyepop: { responseStreaming: true },\n })\n } else {\n const headers = {\n ...session.authenticationHeaders(),\n Accept: 'application/jsonl',\n 'Content-Type': this._mimeType,\n }\n if (this._size) {\n headers['Content-Length'] = `${this._size}`\n }\n request = this._client.fetch(postUrl, {\n headers: headers,\n method: 'POST',\n body: await this.uploadBody(),\n signal: this._controller.signal,\n // @ts-ignore\n duplex: 'half',\n eyepop: { responseStreaming: true },\n })\n }\n request\n .then(async value => {\n if (value.status != 204) {\n this._requestLogger.debug(`unexpected status ${value.status} (${await value.text()}) for POST ${postUrl}`)\n }\n })\n .catch(reason => {\n this._requestLogger.debug(`error ${reason} for POST ${postUrl}`)\n })\n }\n return Promise.resolve()\n }\n\n protected override async startJob(): Promise<Response> {\n const session = await this._getSession()\n if (!session.baseUrl) {\n return Promise.reject('session.baseUrl must not be null')\n }\n let response\n if (this._needsFullDuplex) {\n const prepareUrl: string = `${session.baseUrl.replace(/\\/+$/, '')}/pipelines/${session.pipelineId}/prepareSource?timeout=10s`\n const headers = {\n ...session.authenticationHeaders(),\n Accept: 'application/jsonl',\n }\n response = await this._client.fetch(prepareUrl, {\n headers: headers,\n method: 'POST',\n signal: this._controller.signal,\n // @ts-ignore\n duplex: 'half',\n eyepop: { responseStreaming: true },\n })\n } else {\n const queryParams = new URLSearchParams({\n mode: 'queue',\n processing: 'sync',\n })\n if (this._videoMode !== undefined) {\n queryParams.set('videoMode', this._videoMode)\n }\n if (this._version !== undefined) {\n queryParams.set('version', this._version.toString())\n }\n if (this._params.motionDetect) {\n for (const [key, value] of Object.entries(this._params.motionDetect)) {\n queryParams.set(key, value)\n }\n }\n const postUrl: string = `${session.baseUrl.replace(/\\/+$/, '')}/pipelines/${session.pipelineId}/source?${queryParams.toString()}`\n if (this._params.componentParams || this._params.roi || this._params.camera) {\n const formData = new FormData()\n if (this._params.componentParams) {\n const blob = new Blob([JSON.stringify(this._params.componentParams)], { type: 'application/json' })\n formData.append('params', blob)\n }\n if (this._params.roi) {\n const blob = new Blob([JSON.stringify(this._params.roi)], { type: 'application/json' })\n formData.append('roi', blob)\n }\n if (this._params.fps) {\n const blob = new Blob([JSON.stringify(this._params.fps)], { type: 'application/json' })\n formData.append('fps', blob)\n }\n if (this._params.camera) {\n const blob = new Blob([JSON.stringify(this._params.camera)], { type: 'application/json' })\n formData.append('camera', blob)\n }\n const fileBlob = await new Response(await this.uploadBody()).blob()\n formData.append('file', fileBlob)\n const headers = {\n ...session.authenticationHeaders(),\n Accept: 'application/jsonl',\n }\n\n response = await this._client.fetch(postUrl, {\n headers: headers,\n method: 'POST',\n body: formData,\n signal: this._controller.signal,\n // @ts-ignore\n duplex: 'half',\n eyepop: { responseStreaming: true },\n })\n } else {\n const headers = {\n ...session.authenticationHeaders(),\n Accept: 'application/jsonl',\n 'Content-Type': this._mimeType,\n }\n if (this._size) {\n headers['Content-Length'] = `${this._size}`\n }\n response = await this._client.fetch(postUrl, {\n headers: headers,\n method: 'POST',\n body: await this.uploadBody(),\n signal: this._controller.signal,\n // @ts-ignore\n duplex: 'half',\n })\n }\n }\n return response\n }\n}\n\nexport class LoadFromJob extends AbstractJob {\n private readonly _location: string\n\n constructor(location: string, params: ProcessParams, getSession: () => Promise<WorkerSession>, client: HttpClient, requestLogger: Logger, version: PredictionVersion = DEFAULT_PREDICTION_VERSION) {\n super(params, getSession, client, requestLogger, version)\n this._location = location\n }\n\n get [Symbol.toStringTag](): string {\n return 'loadFromJob'\n }\n\n protected override async startJob(): Promise<Response> {\n const session = await this._getSession()\n if (!session.baseUrl) {\n return Promise.reject('session.baseUrl must not ne null')\n }\n const body = {\n sourceType: 'URL',\n url: this._location,\n params: this._params.componentParams,\n roi: this._params.roi,\n fps: this._params.fps,\n camera: this._params.camera,\n version: this._version,\n // undefined is dropped by JSON.stringify, so an unset option leaves\n // the worker's own default to decide rather than pinning it here.\n rtspForceNonCompliantUrl: this._params.rtspForceNonCompliantUrl,\n }\n if (this._params.motionDetect) {\n Object.assign(body, this._params.motionDetect)\n }\n const headers = {\n ...session.authenticationHeaders(),\n Accept: 'application/jsonl',\n 'Content-Type': 'application/json',\n }\n const patchUrl: string = `${session.baseUrl.replace(/\\/+$/, '')}/pipelines/${session.pipelineId}/source?mode=queue&processing=sync`\n return await this._client.fetch(patchUrl, {\n headers: headers,\n method: 'PATCH',\n body: JSON.stringify(body),\n signal: this._controller.signal,\n // @ts-ignore\n eyepop: { responseStreaming: true },\n })\n }\n}\n\nexport interface UploadSource {\n readonly stream: ReadableStream<Uint8Array> | Blob | BufferSource\n readonly mimeType: string | null\n}\n\nexport class UploadGroupJob extends AbstractJob {\n private readonly _sources: UploadSource[]\n\n get [Symbol.toStringTag](): string {\n return 'uploadGroupJob'\n }\n\n constructor(sources: UploadSource[], params: ProcessParams, getSession: () => Promise<WorkerSession>, client: HttpClient, requestLogger: Logger, version: PredictionVersion = DEFAULT_PREDICTION_VERSION) {\n super(params, getSession, client, requestLogger, version)\n if (sources.length === 0) {\n throw new Error('upload group requires at least one source')\n }\n this._sources = sources\n }\n\n protected override async startJob(): Promise<Response> {\n const session = await this._getSession()\n if (!session.baseUrl) {\n return Promise.reject(new Error('session.baseUrl must not be null'))\n }\n const queryParams = new URLSearchParams({\n mode: 'queue',\n processing: 'sync',\n })\n if (this._version !== undefined) {\n queryParams.set('version', this._version.toString())\n }\n if (this._params.motionDetect) {\n for (const [key, value] of Object.entries(this._params.motionDetect)) {\n queryParams.set(key, value)\n }\n }\n const postUrl = `${session.baseUrl.replace(/\\/+$/, '')}/pipelines/${session.pipelineId}/source?${queryParams.toString()}`\n\n const parts: MultipartPart[] = []\n if (this._params.componentParams) {\n parts.push({ name: 'params', contentType: 'application/json', content: JSON.stringify(this._params.componentParams) })\n }\n if (this._params.roi) {\n parts.push({ name: 'roi', contentType: 'application/json', content: JSON.stringify(this._params.roi) })\n }\n if (this._params.fps) {\n parts.push({ name: 'fps', contentType: 'application/json', content: JSON.stringify(this._params.fps) })\n }\n if (this._params.camera) {\n parts.push({ name: 'camera', contentType: 'application/json', content: JSON.stringify(this._params.camera) })\n }\n for (const source of this._sources) {\n parts.push({ name: 'file', contentType: source.mimeType, content: source.stream })\n }\n const boundary = randomMultipartBoundary()\n const headers = {\n ...session.authenticationHeaders(),\n Accept: 'application/jsonl',\n 'Content-Type': `multipart/form-data; boundary=${boundary}`,\n }\n return await this._client.fetch(postUrl, {\n headers,\n method: 'POST',\n body: encodeMultipartFormData(parts, boundary),\n signal: this._controller.signal,\n // @ts-ignore\n duplex: 'half',\n eyepop: { responseStreaming: true },\n })\n }\n}\n\nexport class LoadFromGroupJob extends AbstractJob {\n private readonly _urls: string[]\n\n get [Symbol.toStringTag](): string {\n return 'loadFromGroupJob'\n }\n\n constructor(urls: string[], params: ProcessParams, getSession: () => Promise<WorkerSession>, client: HttpClient, requestLogger: Logger, version: PredictionVersion = DEFAULT_PREDICTION_VERSION) {\n super(params, getSession, client, requestLogger, version)\n if (urls.length === 0) {\n throw new Error('load from group requires at least one url')\n }\n this._urls = urls\n }\n\n protected override async startJob(): Promise<Response> {\n const session = await this._getSession()\n if (!session.baseUrl) {\n return Promise.reject(new Error('session.baseUrl must not be null'))\n }\n const body: Record<string, any> = {\n sourceType: 'GROUP',\n sources: this._urls.map(url => ({ sourceType: 'URL', url })),\n version: this._version,\n }\n if (this._params.componentParams) {\n body['params'] = this._params.componentParams\n }\n if (this._params.roi) {\n body['roi'] = this._params.roi\n }\n if (this._params.camera) {\n body['camera'] = this._params.camera\n }\n if (this._params.motionDetect) {\n Object.assign(body, this._params.motionDetect)\n }\n const headers = {\n ...session.authenticationHeaders(),\n Accept: 'application/jsonl',\n 'Content-Type': 'application/json',\n }\n const patchUrl = `${session.baseUrl.replace(/\\/+$/, '')}/pipelines/${session.pipelineId}/source?mode=queue&processing=sync`\n return await this._client.fetch(patchUrl, {\n headers,\n method: 'PATCH',\n body: JSON.stringify(body),\n signal: this._controller.signal,\n // @ts-ignore\n eyepop: { responseStreaming: true },\n })\n }\n}\n\nexport class LoadFromAssetUuidJob extends AbstractJob {\n private readonly _assetUuid: string\n\n constructor(assetUuid: string, params: ProcessParams, getSession: () => Promise<WorkerSession>, client: HttpClient, requestLogger: Logger, version: PredictionVersion = DEFAULT_PREDICTION_VERSION) {\n super(params, getSession, client, requestLogger, version)\n this._assetUuid = assetUuid\n }\n\n get [Symbol.toStringTag](): string {\n return 'loadFromAssetUuidJob'\n }\n\n protected override async startJob(): Promise<Response> {\n const session = await this._getSession()\n if (!session.baseUrl) {\n return Promise.reject('session.baseUrl must not ne null')\n }\n const body = {\n sourceType: 'ASSET_UUID',\n assetUuid: this._assetUuid,\n params: this._params.componentParams,\n roi: this._params.roi,\n fps: this._params.fps,\n camera: this._params.camera,\n version: this._version,\n }\n if (this._params.motionDetect) {\n Object.assign(body, this._params.motionDetect)\n }\n const headers = {\n ...session.authenticationHeaders(),\n Accept: 'application/jsonl',\n 'Content-Type': 'application/json',\n }\n const patchUrl: string = `${session.baseUrl.replace(/\\/+$/, '')}/pipelines/${session.pipelineId}/source?mode=queue&processing=sync`\n return await this._client.fetch(patchUrl, {\n headers: headers,\n method: 'PATCH',\n body: JSON.stringify(body),\n signal: this._controller.signal,\n // @ts-ignore\n eyepop: { responseStreaming: true },\n })\n }\n}\n\nexport class LoadMediaStreamJob extends AbstractJob {\n private readonly _mediaStream: MediaStream\n\n constructor(mediaStream: MediaStream, params: ProcessParams, getSession: () => Promise<WorkerSession>, client: HttpClient, requestLogger: Logger, version: PredictionVersion = DEFAULT_PREDICTION_VERSION) {\n super(params, getSession, client, requestLogger, version)\n this._mediaStream = mediaStream\n }\n\n get [Symbol.toStringTag](): string {\n return 'loadLiveIngressJob'\n }\n\n protected override async startJob(): Promise<Response> {\n const session = await this._getSession()\n if (!session.baseUrl) {\n return Promise.reject('session.baseUrl must not ne null')\n }\n\n const whip = new WebrtcWhip(\n this._mediaStream,\n async () => {\n return session\n },\n this._client,\n true,\n this._requestLogger,\n )\n\n whip.start()\n .then(_ => {\n this._requestLogger.debug('direct whip for ingressId=%s successful', whip.ingressId())\n })\n .catch((reason: any) => {\n this._controller.abort(reason)\n })\n\n const body = {\n sourceType: 'WHIP',\n whipIngressId: whip.ingressId(),\n params: this._params.componentParams,\n roi: this._params.roi,\n fps: this._params.fps,\n camera: this._params.camera,\n version: this._version,\n }\n if (this._params.motionDetect) {\n Object.assign(body, this._params.motionDetect)\n }\n const headers = {\n ...session.authenticationHeaders(),\n Accept: 'application/jsonl',\n 'Content-Type': 'application/json',\n }\n const patchUrl: string = `${session.baseUrl.replace(/\\/+$/, '')}/pipelines/${session.pipelineId}/source?mode=preempt&processing=sync`\n return await this._client.fetch(patchUrl, {\n headers: headers,\n method: 'PATCH',\n body: JSON.stringify(body),\n signal: this._controller.signal,\n // @ts-ignore\n eyepop: { responseStreaming: true },\n })\n }\n}\n","\nimport * as fs from 'node:fs'\nimport { PathSource, StreamSource } from '../index'\nimport { Logger } from 'pino'\n\nexport let resolvePath: (source: PathSource, logger: Logger) => Promise<StreamSource>\n\nif ('document' in globalThis && 'implementation' in globalThis.document) {\n resolvePath = async (_source: PathSource, _logger: Logger) => {\n throw new DOMException('resolving a path to a file is not supported in browser')\n }\n} else {\n /**\n * From https://github.com/MattMorgis/async-stream-generator\n */\n async function* nodeStreamToIterator(stream: AsyncIterable<Uint8Array>) {\n for await (const chunk of stream) {\n yield chunk\n }\n }\n /**\n * Taken from Next.js doc\n * https://nextjs.org/docs/app/building-your-application/routing/router-handlers#streaming\n * Itself taken from mozilla doc\n * https://developer.mozilla.org/en-US/docs/Web/API/ReadableStream#convert_async_iterator_to_stream\n * @param {*} iterator\n * @returns {ReadableStream}\n */\n function iteratorToStream(iterator: AsyncGenerator<any>) {\n return new ReadableStream({\n async pull(controller) {\n const { value, done } = await iterator.next()\n\n if (done) {\n controller.close()\n } else {\n controller.enqueue(new Uint8Array(value))\n }\n },\n })\n }\n resolvePath = async (source: PathSource, _: Logger) => {\n const mime = require('mime-types')\n const filehandle = require('node:fs/promises')\n const fd = await filehandle.open(source.path, 'r')\n const size = (await fd.stat()).size\n const stream = fd.createReadStream()\n const iterator = nodeStreamToIterator(stream as AsyncIterable<Uint8Array>)\n const webStream = iteratorToStream(iterator)\n\n const mimeType = source.mimeType? source.mimeType : (mime.lookup(source.path) || 'image/*')\n return {\n stream: webStream,\n mimeType: mimeType,\n size: size,\n }\n }\n}\n","import { Options } from '../options'\nimport type { Pop } from './worker_types'\n\n/**\n * @deprecated Configure transient sessions with `WorkerOptions.pop`.\n * Support for pop id will be removed in 3.16.\n */\nexport enum TransientPopId {\n Transient = 'transient',\n}\n\nexport interface WorkerOptions extends Options {\n /**\n * @deprecated Pass `pop` for transient sessions or `sessionUuid` for persistent sessions.\n * Support for pop id will be removed in 3.16.\n */\n popId?: string | TransientPopId | undefined\n\n sessionUuid?: string | undefined\n sessionName?: string | undefined\n /**\n * The account the compute session runs and is billed under, sent to compute-api as\n * `account_uuid`. Required when the credential does not name one account.\n * Defaults to process.env['EYEPOP_ACCOUNT_UUID'], then the deprecated process.env['EYEPOP_ACCOUNT_ID'].\n */\n accountId?: string | undefined\n pipelineImage?: string | undefined\n pipelineVersion?: string | undefined\n pop?: Pop | undefined\n sessionReadyTimeoutSeconds?: number | undefined\n autoStart?: boolean\n stopJobs?: boolean\n isLocalMode?: boolean\n /**\n * Run the endpoint's jobs on the pipeline API's socket instead of a worker session. The\n * compute API at `eyepopUrl` names the pipeline API in its `/v1/configs`; with `isLocalMode`,\n * `eyepopUrl` is the pipeline API itself. Takes no option that names a session or a pop id.\n * Defaults to process.env['EYEPOP_PIPELINE_MODE'].\n */\n isPipelineMode?: boolean\n}\n","import { LocalAuth, accessTokenCredential, apiKeyCredential, resolveAuth } from '../options'\nimport { ComputeSessionClient } from '../compute/compute_session'\nimport type { ResolvedComputeSession } from '../compute/compute_session'\nimport { EndpointState, Session } from '../types'\nimport { AbstractJob, LoadFromAssetUuidJob, LoadFromGroupJob, LoadFromJob, LoadMediaStreamJob, UploadGroupJob, UploadJob, UploadSource } from './jobs'\nimport { resolvePath } from '../shims/local_file'\nimport { TransientPopId } from './worker_options'\nimport { WorkerBackend, WorkerContext, WorkerWork } from './worker_backend'\nimport {\n AssetUuidSource,\n DEFAULT_PREDICTION_VERSION,\n FileSource,\n MediaStreamSource,\n PathSource,\n Pop,\n PredictionVersion,\n ProcessParams,\n ResultStream,\n Source,\n StreamSource,\n UrlSource,\n WorkerSession,\n popSelects,\n} from './worker_types'\n\ninterface PopConfig {\n base_url: string\n pipeline_id: string\n name: string\n}\n\ninterface Pipeline {\n id: string\n startTime: string\n state: string\n pop?: Pop\n}\n\n/** Runs jobs on a worker session: a compute API session, or a named pop found through its config. */\nexport class SessionBackend implements WorkerBackend {\n private _baseUrl: string | null = null\n private _pipelineId: string | null = null\n private _popName: string | null = null\n private _sessionAccessToken: string | null = null\n private _sessionAccessTokenValidUntil: number | null = null\n // The account the connected compute session runs under, as compute-api reports it.\n private _accountId: string | undefined = undefined\n\n private _pipeline: Pipeline | null = null\n private _pipelineCreatePromise: Promise<string> | null = null\n\n constructor(private readonly ctx: WorkerContext) {}\n\n public async disconnect(closeEndpoint: () => Promise<void>): Promise<void> {\n await this.deleteOwnPipeline()\n await closeEndpoint()\n }\n\n private async deleteOwnPipeline(): Promise<void> {\n const client = this.ctx.client()\n if (this.ctx.options.popId == TransientPopId.Transient && this._pipelineId && client) {\n const deleteUrl = `${this._baseUrl}/pipelines/${this._pipelineId}`\n const headers = {\n Authorization: await this.authorizationHeader(),\n }\n let response = await client.fetch(deleteUrl, {\n method: 'DELETE',\n headers: headers,\n })\n if (response?.status != 204) {\n const message = await response?.text()\n this.ctx.logger.info(`stopping pipeline failed, status ${response?.status}: ${message}`)\n }\n }\n }\n\n public onStatus(statusCode: number): void {\n if (statusCode == 404) {\n this._pipelineId = null\n this._baseUrl = null\n }\n }\n\n public async session(): Promise<WorkerSession> {\n let session: Session | null = null\n if (this._baseUrl == null) {\n await this.reconnect()\n if (this._baseUrl == null) {\n return Promise.reject('endpoint not connected')\n }\n }\n if (this._sessionAccessToken) {\n session = {\n eyepopUrl: this.ctx.options.eyepopUrl as string,\n accessToken: this._sessionAccessToken,\n validUntil: this._sessionAccessTokenValidUntil || Number.MAX_VALUE,\n }\n } else {\n session = await this.ctx.credentialSession()\n }\n return {\n eyepopUrl: session.eyepopUrl,\n accessToken: session.accessToken,\n validUntil: session.validUntil,\n popId: this.ctx.options.popId as string,\n accountId: this._accountId ?? this.ctx.options.accountId,\n baseUrl: this._baseUrl as string,\n pipelineId: this._pipelineId || undefined,\n isPipelineMode: false,\n authenticationHeaders: () => this._authenticationHeaders(session),\n }\n }\n\n public popName(): string | null {\n return this._popName\n }\n\n public pop(): Pop | null {\n if (this._pipeline) {\n return this._pipeline.pop || null\n }\n return this.ctx.options.pop || null\n }\n\n /**\n * A select forward's results come only at V3. Only a Pop that selects asks\n * for it, so a worker too old to know V3 - which also rejects that Pop - is\n * never sent a version it would not accept.\n */\n private predictionVersion(): PredictionVersion {\n return popSelects(this.pop()) ? PredictionVersion.V3 : DEFAULT_PREDICTION_VERSION\n }\n\n public async changePop(pop: Pop): Promise<void> {\n if (this.ctx.options.popId == TransientPopId.Transient) {\n await this.changeTransientPop(pop)\n return\n }\n\n const client = this.ctx.client()\n const baseUrl = this._baseUrl\n if (!baseUrl || !client) {\n return Promise.reject('endpoint not connected, use connect()')\n }\n\n let response = await this.ctx.fetchWithRetry(async () => {\n const session = await this.session()\n let headers = {\n 'Content-Type': 'application/json',\n ...this._authenticationHeaders(session),\n }\n const patch_url = `${session.baseUrl}/pipelines/${session.pipelineId}/pop`\n return await client.fetch(patch_url, {\n method: 'PATCH',\n body: JSON.stringify(pop),\n headers: headers,\n })\n })\n if (response.status != 204) {\n const message = await response.text()\n throw new Error(`Unexpected status ${response.status}: ${message}`)\n }\n this.ctx.options.pop = pop\n if (this._pipeline) {\n this._pipeline.pop = pop\n } else {\n this._pipeline = {\n id: this._pipelineId || 'unknown',\n state: 'idle',\n startTime: new Date().toString(),\n pop: pop,\n }\n }\n }\n\n private _authenticationHeaders(session: Session): any {\n return (resolveAuth(this.ctx.options) as LocalAuth | undefined)?.isLocal !== undefined ? {} : { Authorization: `Bearer ${session.accessToken}` }\n }\n\n public async submit(work: WorkerWork): Promise<ResultStream> {\n switch (work.kind) {\n case 'source':\n return await this.process(work.source, work.params)\n case 'uploadGroup':\n return await this.uploadGroup(work.paths, work.params)\n case 'uploadStreamGroup':\n return await this.uploadStreamGroup(work.streams, work.mimeTypes, work.params)\n case 'loadFromGroup':\n return await this.loadFromGroup(work.urls, work.params)\n }\n }\n\n private async process(source: Source, params: ProcessParams): Promise<ResultStream> {\n if ((source as FileSource).file !== undefined) {\n return this.uploadFile(source as FileSource, params)\n } else if ((source as StreamSource).stream !== undefined) {\n return this.uploadStream(source as StreamSource, params)\n } else if ((source as PathSource).path !== undefined) {\n return this.uploadPath(source as PathSource, params)\n } else if ((source as UrlSource).url !== undefined) {\n return this.loadFrom(source as UrlSource, params)\n } else if ((source as AssetUuidSource).assetUuid !== undefined) {\n return this.loadFromAssetUuid(source as AssetUuidSource, params)\n } else if ((source as MediaStreamSource).mediaStream !== undefined) {\n return this.loadMediaStream(source as MediaStreamSource, params)\n } else {\n return Promise.reject('unknown source type')\n }\n }\n\n private start(job: AbstractJob): ResultStream {\n return job.start(\n () => {\n this.ctx.jobDone()\n },\n (statusCode: number) => {\n if (statusCode == 404) {\n this.onStatus(statusCode)\n } else if (statusCode == 401) {\n this.ctx.forgetCredential()\n }\n },\n )\n }\n\n private async uploadGroup(paths: string[], params: ProcessParams): Promise<ResultStream> {\n const client = this.ctx.client()\n const limit = this.ctx.limit()\n if (!this._baseUrl || !this._pipelineId || !client) {\n throw new Error('endpoint not connected, use connect()')\n }\n await limit.acquire()\n try {\n this.ctx.updateState()\n const sources: UploadSource[] = await Promise.all(\n paths.map(async (path): Promise<UploadSource> => {\n const streamSource = await this.resolvePath({ path })\n return { stream: streamSource.stream, mimeType: streamSource.mimeType }\n }),\n )\n return this.start(new UploadGroupJob(sources, params, async () => this.session(), client, this.ctx.requestLogger, this.predictionVersion()))\n } catch (e) {\n limit.release()\n throw e\n }\n }\n\n private async uploadStreamGroup(streams: Array<ReadableStream<Uint8Array> | Blob | BufferSource>, mimeTypes: string[] | undefined, params: ProcessParams): Promise<ResultStream> {\n const client = this.ctx.client()\n const limit = this.ctx.limit()\n if (!this._baseUrl || !this._pipelineId || !client) {\n throw new Error('endpoint not connected, use connect()')\n }\n await limit.acquire()\n try {\n this.ctx.updateState()\n const sources: UploadSource[] = streams.map((stream, i) => ({\n stream,\n mimeType: mimeTypes?.[i] ?? null,\n }))\n return this.start(new UploadGroupJob(sources, params, async () => this.session(), client, this.ctx.requestLogger, this.predictionVersion()))\n } catch (e) {\n limit.release()\n throw e\n }\n }\n\n private async loadFromGroup(urls: string[], params: ProcessParams): Promise<ResultStream> {\n const client = this.ctx.client()\n const limit = this.ctx.limit()\n if (!this._baseUrl || !this._pipelineId || !client) {\n throw new Error('endpoint not connected, use connect()')\n }\n await limit.acquire()\n try {\n this.ctx.updateState()\n return this.start(new LoadFromGroupJob(urls, params, async () => this.session(), client, this.ctx.requestLogger, this.predictionVersion()))\n } catch (e) {\n limit.release()\n throw e\n }\n }\n\n private async resolvePath(source: PathSource): Promise<StreamSource> {\n if (this.ctx.options.platformSupport?.resolvePath) {\n return await this.ctx.options.platformSupport.resolvePath(source, this.ctx.logger)\n }\n return await resolvePath(source, this.ctx.logger)\n }\n\n /** Start a job once the transient pipeline runs and a queue permit is held; the permit is released if it cannot start. */\n private async startConnected(makeJob: (client: NonNullable<ReturnType<WorkerContext['client']>>) => Promise<AbstractJob>, rejectsWithText: boolean = false): Promise<ResultStream> {\n await this.ensureTransientPipelineStarted()\n const client = this.ctx.client()\n const limit = this.ctx.limit()\n if (!this._baseUrl || !this._pipelineId || !client) {\n // uploadFile and uploadStream have always rejected with the bare text\n if (rejectsWithText) {\n return Promise.reject('endpoint not connected, use connect()')\n }\n throw new Error('endpoint not connected, use connect()')\n }\n await limit.acquire()\n try {\n this.ctx.updateState()\n return this.start(await makeJob(client))\n } catch (e) {\n // we'll have to reset our queue counter in case the job cannot be started\n limit.release()\n throw e\n }\n }\n\n private async uploadFile(source: FileSource, params: ProcessParams): Promise<ResultStream> {\n return await this.startConnected(\n async client =>\n new UploadJob(\n source.file,\n source.file.type,\n source.file.size,\n source.videoMode,\n params,\n async () => this.session(),\n client,\n this.ctx.requestLogger,\n undefined,\n this.predictionVersion(),\n ),\n true,\n )\n }\n\n private async uploadStream(source: StreamSource, params: ProcessParams): Promise<ResultStream> {\n return await this.startConnected(\n async client =>\n new UploadJob(source.stream, source.mimeType, source.size, source.videoMode, params, async () => this.session(), client, this.ctx.requestLogger, undefined, this.predictionVersion()),\n true,\n )\n }\n\n private async uploadPath(source: PathSource, params: ProcessParams): Promise<ResultStream> {\n return await this.startConnected(async client => {\n const streamSource = await this.resolvePath(source)\n let firstStreamPending = true\n const uploadBodyFactory = async () => {\n if (firstStreamPending) {\n firstStreamPending = false\n return streamSource.stream\n }\n return (await this.resolvePath(source)).stream\n }\n return new UploadJob(\n streamSource.stream,\n streamSource.mimeType,\n streamSource.size,\n source.videoMode,\n params,\n async () => this.session(),\n client,\n this.ctx.requestLogger,\n uploadBodyFactory,\n this.predictionVersion(),\n )\n })\n }\n\n private async loadFrom(source: UrlSource, params: ProcessParams): Promise<ResultStream> {\n if (source.url.startsWith('file://')) {\n return await this.uploadPath({ path: source.url.substring('file://'.length) }, params)\n }\n return await this.startConnected(async client => new LoadFromJob(source.url, params, async () => this.session(), client, this.ctx.requestLogger, this.predictionVersion()))\n }\n\n private async loadFromAssetUuid(source: AssetUuidSource, params: ProcessParams): Promise<ResultStream> {\n return await this.startConnected(async client => new LoadFromAssetUuidJob(source.assetUuid, params, async () => this.session(), client, this.ctx.requestLogger, this.predictionVersion()))\n }\n\n private async loadMediaStream(source: MediaStreamSource, params: ProcessParams): Promise<ResultStream> {\n return await this.startConnected(async client => new LoadMediaStreamJob(source.mediaStream, params, async () => this.session(), client, this.ctx.requestLogger, this.predictionVersion()))\n }\n\n public async reconnect(): Promise<void> {\n if (this.ctx.options.popId == TransientPopId.Transient) {\n await this.getComputeSession()\n if (this.ctx.options.pop) {\n this.setTransientPipelinePop()\n }\n } else if (this.ctx.options.sessionUuid) {\n await this.getComputeSession()\n } else {\n // TODO remove pop id support in 3.16\n await this.startWebApiSessionWithPopId()\n }\n this.ctx.updateState()\n }\n\n private async startWebApiSessionWithPopId(): Promise<void> {\n const client = this.ctx.client()\n if (!client) {\n throw new Error('endpoint not initialized')\n }\n const config_url = `${this.ctx.eyepopWebApiUrl()}/pops/${this.ctx.options.popId}/config?auto_start=false`\n const headers = {\n Authorization: await this.authorizationHeader(),\n }\n this.ctx.updateState(EndpointState.FetchConfig)\n let response = await client.fetch(config_url, { headers: headers })\n if (response.status == 401) {\n this.ctx.requestLogger.debug('GET %s: 401, about to retry with fresh access token', config_url)\n // one retry, the token might have just expired\n this.ctx.forgetCredential()\n const headers = {\n Authorization: await this.authorizationHeader(),\n }\n this.ctx.updateState(EndpointState.FetchConfig)\n response = await client.fetch(config_url, {\n headers: headers,\n })\n }\n\n if (response.status != 200) {\n const message = await response.text()\n if (response.status == 429) {\n this.ctx.updateState(EndpointState.NotAvailable, message)\n } else {\n this.ctx.updateState(EndpointState.Error, message)\n }\n throw new Error(`Unexpected status ${response.status}: ${message}`)\n }\n let config = (await response.json()) as PopConfig\n if (!config.base_url && this.ctx.options.autoStart) {\n const auto_start_config_url = `${this.ctx.eyepopWebApiUrl()}/pops/${this.ctx.options.popId}/config?auto_start=true`\n this.ctx.requestLogger.debug('pop was not running, trying to autostart with: %s', auto_start_config_url)\n // one retry the pop might just have stopped\n const headers = {\n Authorization: await this.authorizationHeader(),\n }\n response = await client.fetch(auto_start_config_url, {\n headers: headers,\n })\n if (response.status != 200) {\n this.ctx.updateState(EndpointState.Error)\n const message = await response.text()\n throw new Error(`Unexpected status ${response.status}: ${message}`)\n }\n config = (await response.json()) as PopConfig\n }\n\n const baseUrl = new URL(config.base_url, this.ctx.eyepopUrl())\n this._baseUrl = baseUrl.toString()\n\n if (this._baseUrl) {\n this._baseUrl = this._baseUrl.replace(/\\/+$/, '')\n this._pipelineId = config.pipeline_id\n this._popName = config.name\n if (!this._pipelineId || !this._baseUrl) {\n throw new Error('Pop not started')\n }\n\n const get_url = `${this._baseUrl}/pipelines/${this._pipelineId}`\n const headers = {\n Authorization: await this.authorizationHeader(),\n }\n let response = await client.fetch(get_url, {\n method: 'GET',\n headers: headers,\n })\n if (response.status > 200) {\n const message = await response.text()\n throw new Error(`Unexpected status ${response.status}: ${message}`)\n }\n this._pipeline = (await response.json()) as Pipeline\n\n if (this.ctx.options.stopJobs) {\n const body = { sourceType: 'NONE' }\n const headers = {\n Authorization: await this.authorizationHeader(),\n 'Content-Type': 'application/json',\n }\n const stop_url = `${this._baseUrl}/pipelines/${this._pipeline.id}/source?mode=preempt&processing=sync`\n let response = await client.fetch(stop_url, {\n method: 'PATCH',\n headers: headers,\n body: JSON.stringify(body),\n })\n if (response.status >= 300) {\n const message = await response.text()\n throw new Error(`Unexpected status ${response.status}: ${message}`)\n }\n }\n }\n }\n\n private static WAIT_FOR_IS_READY: number = 60 * 1000\n\n private sessionReadyTimeoutMs(): number {\n const seconds = this.ctx.options.sessionReadyTimeoutSeconds\n return typeof seconds == 'number' && Number.isFinite(seconds) && seconds > 0 ? seconds * 1000 : SessionBackend.WAIT_FOR_IS_READY\n }\n\n private async getComputeSession(): Promise<void> {\n const client = this.ctx.client()\n if (!client) {\n throw new Error('endpoint not initialized')\n }\n let resolved: ResolvedComputeSession\n try {\n resolved = await new ComputeSessionClient({\n computeUrl: this.ctx.eyepopUrl(),\n httpClient: client,\n authorizationHeader: () => this.computeAuthorizationHeader(),\n sessionUuid: this.ctx.options.sessionUuid,\n sessionName: this.ctx.options.sessionName,\n accountId: this.ctx.options.accountId,\n pipelineImage: this.ctx.options.pipelineImage,\n pipelineVersion: this.ctx.options.pipelineVersion,\n pop: this.ctx.options.pop,\n readyTimeoutMs: this.sessionReadyTimeoutMs(),\n logger: this.ctx.logger,\n requestLogger: this.ctx.requestLogger,\n }).resolve()\n } catch (error) {\n this.ctx.updateState(EndpointState.Error)\n throw error\n }\n this._sessionAccessToken = resolved.accessToken\n this._sessionAccessTokenValidUntil = resolved.accessTokenValidUntil\n this._baseUrl = resolved.session.session_endpoint\n this._accountId = resolved.session.account_uuid || undefined\n this._pipeline = null\n this._pipelineId = resolved.pipelineId\n if (this.ctx.options.pop) {\n this.setTransientPipelinePop()\n }\n }\n\n private async startTransientPipeline(): Promise<string> {\n const client = this.ctx.client()\n const baseUrl = this._baseUrl\n\n if (client == null || baseUrl == null) {\n throw new Error('endpoint not initialized')\n }\n\n let pop: Pop\n if (this.ctx.options.pop) {\n pop = this.ctx.options.pop as Pop\n } else if (this._pipeline && this._pipeline.pop) {\n pop = this._pipeline.pop\n } else {\n throw new Error('Cannot start a transient pipeline without a pop')\n }\n\n const body = {\n pop: pop,\n source: {\n sourceType: 'NONE',\n },\n idleTimeoutSeconds: 30,\n logging: ['out_meta'],\n videoOutput: 'no_output',\n }\n\n const post_url = `${baseUrl.replace(/\\/+$/, '')}/pipelines`\n\n const response = await this.ctx.fetchWithRetry(async () => {\n let headers = {\n Accept: 'application/json',\n 'Content-Type': 'application/json',\n Authorization: await this.authorizationHeader(),\n }\n return client.fetch(post_url, {\n method: 'POST',\n body: JSON.stringify(body),\n headers: headers,\n })\n })\n if (response.status != 200) {\n const message = await response.text()\n throw new Error(`Unexpected status ${response.status} starting transient pipeline: ${message.slice(0, 300)}`)\n }\n const result = await response.json()\n return result['id']\n }\n\n private async ensureTransientPipelineStarted(): Promise<void> {\n if (this.ctx.options.popId != TransientPopId.Transient || this._pipelineId) {\n return\n }\n if (!this.ctx.options.pop) {\n return\n }\n if (!this._baseUrl) {\n await this.reconnect()\n }\n if (this._pipelineId) {\n return\n }\n if (this.ctx.options.pop) {\n await this.reconnect()\n if (!this._pipelineId) {\n throw new Error('Compute session did not provide a pipeline for the requested pop')\n }\n return\n }\n if (!this._pipelineCreatePromise) {\n this._pipelineCreatePromise = this.startTransientPipeline()\n }\n try {\n this._pipelineId = await this._pipelineCreatePromise\n this.setTransientPipelinePop()\n } finally {\n this._pipelineCreatePromise = null\n }\n }\n\n private async changeTransientPop(pop: Pop): Promise<void> {\n if (!this.ctx.client()) {\n throw new Error('endpoint not initialized')\n }\n const previousPop = this.ctx.options.pop\n const previousBaseUrl = this._baseUrl\n const previousSessionAccessToken = this._sessionAccessToken\n const previousSessionAccessTokenValidUntil = this._sessionAccessTokenValidUntil\n if (this._pipelineId) {\n await this.deleteTransientPipeline(this._pipelineId)\n this._pipelineId = null\n }\n this._pipeline = null\n try {\n this.ctx.options.pop = pop\n await this.getComputeSession()\n } catch (error) {\n this.ctx.options.pop = previousPop\n this._pipeline = null\n this._pipelineId = null\n this._baseUrl = previousPop ? null : previousBaseUrl\n this._sessionAccessToken = previousSessionAccessToken\n this._sessionAccessTokenValidUntil = previousSessionAccessTokenValidUntil\n throw error\n }\n if (!this._pipelineId) {\n throw new Error('Compute session did not provide a pipeline for the requested pop')\n }\n this.setTransientPipelinePop()\n }\n\n private async deleteTransientPipeline(pipelineId: string): Promise<void> {\n const client = this.ctx.client()\n if (!client || !this._baseUrl) {\n return\n }\n const deleteUrl = `${this._baseUrl}/pipelines/${pipelineId}`\n const headers = {\n Authorization: await this.authorizationHeader(),\n }\n let response = await client.fetch(deleteUrl, {\n method: 'DELETE',\n headers: headers,\n })\n if (response.status >= 300) {\n const message = await response.text()\n this.ctx.logger.info(`stopping pipeline failed, status ${response.status}: ${message}`)\n }\n }\n\n public async authorizationHeader(): Promise<string> {\n if (this._sessionAccessToken) {\n return `Bearer ${this._sessionAccessToken}`\n }\n return this.ctx.credentialHeader()\n }\n\n private async computeAuthorizationHeader(): Promise<string> {\n const auth = resolveAuth(this.ctx.options)\n if ((auth as LocalAuth | undefined)?.isLocal !== undefined) {\n return 'Implicit'\n }\n const credential = apiKeyCredential(auth) ?? accessTokenCredential(auth)\n if (credential !== undefined) {\n return `Bearer ${credential}`\n }\n return this.ctx.credentialHeader()\n }\n\n private setTransientPipelinePop(): void {\n const pop = this.ctx.options.pop\n if (pop && this._pipelineId) {\n this._pipeline = {\n id: this._pipelineId,\n state: 'idle',\n startTime: new Date().toString(),\n pop: pop,\n }\n }\n }\n}\n","export let createWebSocket: (url: string | URL, protocols?: string | string[]) => WebSocket\n\n/**\n * The pipeline API refused the upgrade: `status` and `retryAfter` (seconds) when the runtime reports\n * them, which a browser never does.\n */\nexport class UpgradeError extends Error {\n readonly status: number | undefined\n readonly retryAfter: number | undefined\n\n constructor(message: string, status?: number, retryAfter?: number) {\n super(message)\n this.name = 'UpgradeError'\n this.status = status\n this.retryAfter = retryAfter\n }\n}\n\n/**\n * Opens a socket to the pipeline API, resolving once it is open. The token goes as the\n * `Authorization` header where the runtime can set one (Node), and otherwise as the\n * `eyepop.bearer.<jwt>` subprotocol next to `protocol`, as a browser cannot set headers.\n */\nexport let openAuthorizedWebSocket: (url: string, protocol: string, token: string | undefined) => Promise<WebSocket>\n\nconst isBrowser = 'document' in globalThis && 'implementation' in globalThis.document\n\nif (isBrowser) {\n createWebSocket = (url: string | URL, protocols?: string | string[]) => {\n return new WebSocket(url, protocols)\n }\n openAuthorizedWebSocket = (url: string, protocol: string, token: string | undefined) => {\n const protocols = token === undefined ? [protocol] : [protocol, `eyepop.bearer.${token}`]\n const ws = new WebSocket(url, protocols)\n ws.binaryType = 'arraybuffer'\n return new Promise((resolve, reject) => {\n ws.onopen = () => resolve(ws)\n ws.onerror = () => reject(new UpgradeError(`could not open ${url}`))\n })\n }\n} else {\n createWebSocket = (url: string | URL, protocols?: string | string[]) => {\n const ws = require('ws')\n return new ws.WebSocket(url, protocols)\n }\n openAuthorizedWebSocket = (url: string, protocol: string, token: string | undefined) => {\n const ws = require('ws')\n const headers = token === undefined ? {} : { Authorization: `Bearer ${token}` }\n const socket = new ws.WebSocket(url, [protocol], { headers, maxPayload: 0 })\n socket.binaryType = 'arraybuffer'\n return new Promise((resolve, reject) => {\n socket.once('open', () => resolve(socket as WebSocket))\n socket.once('unexpected-response', (_request: any, response: any) => {\n const retryAfter = Number.parseFloat(response.headers?.['retry-after'])\n reject(new UpgradeError(`the pipeline API answered the upgrade ${response.statusCode}`, response.statusCode, Number.isFinite(retryAfter) ? retryAfter : undefined))\n response.resume()\n socket.terminate()\n })\n socket.once('error', (error: Error) => reject(new UpgradeError(`could not open ${url}: ${error.message}`)))\n })\n }\n}\n","/**\n * Runs a WorkerEndpoint's jobs on the pipeline API's socket (SDK-27, the Node side of SDK-24).\n *\n * The socket protocol is eyepop-instance spec 019, `contracts/socket.md`: one socket runs its\n * own pipeline and takes commands, `setPop` and `setSource` among them, and streams every\n * source's predictions back under the source's id.\n */\nimport { LocalAuth, resolveAuth } from '../options'\nimport { Prediction } from '../types'\nimport { resolvePath } from '../shims/local_file'\nimport { UpgradeError, openAuthorizedWebSocket } from '../shims/websockets'\nimport { WorkerBackend, WorkerContext, WorkerWork } from './worker_backend'\nimport { WebrtcBase } from './webrtc_base'\nimport { AssetUuidSource, FileSource, MediaStreamSource, PathSource, Pop, ProcessParams, ResultStream, Source, StreamSource, UrlSource, WorkerSession } from './worker_types'\n\nexport const PIPELINE_PATH = '/api/v1/pipeline'\nexport const SUBPROTOCOL = 'eyepop.v1'\n/** A socket may have this many open sources; one more is answered `queue_full`. */\nexport const MAX_OPEN_SOURCES = 256\n/** Uploads up to this size go as one combined message, larger ones in chunks. */\nexport const COMBINED_UPLOAD_MAX_BYTES = 8 * 1024 * 1024\n\nconst CHUNK = 0x01\nconst COMBINED = 0x02\nconst CHUNK_BYTES = 64 * 1024\nconst HEARTBEAT_MS = 20 * 1000\nconst MAX_RETRY_MS = 30 * 1000\n// The closes after which the endpoint opens a new socket at once; after any other close it opens\n// one when the next job or changePop needs it.\nconst RECONNECT_AT_ONCE = new Set(['1008 credential_expired', '1011 overloaded', '1001 shutting_down'])\n// The longest wait before such a reconnect, when one close follows another with no source played between.\nconst MAX_RECONNECT_DELAY_MS = 30 * 1000\n\n/** Why pipeline mode refused its configuration. */\nexport type PipelineConfigurationProblem = 'session_options' | 'job_queue_length' | 'no_pipeline_api_url' | 'insecure_url'\n\n/** Pipeline mode cannot run as configured; `options` names the refused options for `session_options`. */\nexport class PipelineConfigurationError extends Error {\n readonly problem: PipelineConfigurationProblem\n readonly options: string[]\n\n constructor(problem: PipelineConfigurationProblem, message: string, options: string[] = []) {\n super(message)\n this.name = 'PipelineConfigurationError'\n this.problem = problem\n this.options = options\n }\n}\n\n/** A job in flight when the pipeline API's socket closed; the job is not sent again. */\nexport class PipelineSocketClosedError extends Error {\n readonly code: number | undefined\n readonly reason: string\n\n constructor(code: number | undefined, reason: string) {\n super(`the pipeline API closed the socket: ${code ?? ''} ${reason}`.trim())\n this.name = 'PipelineSocketClosedError'\n this.code = code\n this.reason = reason\n }\n}\n\n/** The pipeline API answered a command with an error, for instance `queue_full`. */\nexport class PipelineCommandError extends Error {\n readonly error: string\n readonly detail: string\n\n constructor(error: string, detail: string = '') {\n super(`the pipeline API refused the command: ${error} ${detail}`.trim())\n this.name = 'PipelineCommandError'\n this.error = error\n this.detail = detail\n }\n}\n\n/** A source ended with reason `error` or `preempted` rather than at its end of stream. */\nexport class PipelineSourceError extends Error {\n readonly sourceId: string\n readonly reason: string\n readonly detail: string\n\n constructor(sourceId: string, reason: string, detail: string = '') {\n super(`Error in source ${sourceId}: ${reason} ${detail}`.trim())\n this.name = 'PipelineSourceError'\n this.sourceId = sourceId\n this.reason = reason\n this.detail = detail\n }\n}\n\ntype Message = Record<string, any>\ntype UploadBody = ReadableStream<Uint8Array> | Blob | BufferSource\n\nconst CANCELLED = Symbol('cancelled')\ntype InboxItem = Message | Error | typeof CANCELLED\n\n/** An unbounded queue one consumer awaits. */\nclass Inbox<T> {\n private readonly _items: T[] = []\n private _waiter: ((item: T) => void) | null = null\n\n push(item: T): void {\n const waiter = this._waiter\n if (waiter) {\n this._waiter = null\n waiter(item)\n } else {\n this._items.push(item)\n }\n }\n\n next(): Promise<T> {\n const item = this._items.shift()\n if (item !== undefined) {\n return Promise.resolve(item)\n }\n return new Promise(resolve => (this._waiter = resolve))\n }\n}\n\nclass UploadEnded extends Error {}\n\n/** A chunked upload's credit, granted by the server's `send` and `credit`. */\nclass Credit {\n private _credit = 0\n private _ended = false\n private _waiter: (() => void) | null = null\n\n grant(n: number): void {\n this._credit += n\n this.wake()\n }\n\n end(): void {\n this._ended = true\n this.wake()\n }\n\n async take(most: number): Promise<number> {\n while (this._credit <= 0 && !this._ended) {\n await new Promise<void>(resolve => (this._waiter = resolve))\n }\n if (this._ended) {\n throw new UploadEnded()\n }\n const n = Math.min(most, this._credit)\n this._credit -= n\n return n\n }\n\n private wake(): void {\n const waiter = this._waiter\n this._waiter = null\n waiter?.()\n }\n}\n\n/** A job's source on one socket: the messages for its id, and its chunked uploads by member. */\nclass OpenSource {\n readonly inbox = new Inbox<InboxItem>()\n readonly uploads = new Map<number | null, Credit>()\n\n constructor(readonly id: string) {}\n\n close(error: Error): void {\n this.uploads.forEach(upload => upload.end())\n this.inbox.push(error)\n }\n}\n\n/** One upgraded socket: its open sources and commands by id. */\nclass PipelineSocket {\n readonly sources = new Map<string, OpenSource>()\n readonly commands = new Map<string, { resolve: (m: Message) => void; reject: (e: Error) => void }>()\n readonly closed: Promise<void>\n private _closed = false\n private _markClosed!: () => void\n\n constructor(readonly ws: WebSocket) {\n this.closed = new Promise(resolve => (this._markClosed = resolve))\n }\n\n get open(): boolean {\n return !this._closed && this.ws.readyState === 1\n }\n\n markClosed(): void {\n this._closed = true\n this._markClosed()\n }\n\n sendJson(message: Message): void {\n this.ws.send(JSON.stringify(message))\n }\n\n sendBytes(data: Uint8Array): void {\n this.ws.send(data)\n }\n}\n\n/** One upload member's bytes: a fresh body and its content type, and its size when known. */\ninterface Media {\n readonly open: () => Promise<UploadBody>\n readonly contentType: string\n readonly size: number | undefined\n}\n\n/** A job: one source on the endpoint's socket, its predictions read as an async iterable. */\nexport class PipelineJob implements ResultStream {\n private readonly _results = new Inbox<Prediction | Error | null>()\n private _consumed = false\n private _cancelled = false\n openSource: OpenSource | null = null\n // Stops the job's source on the pipeline, once it was sent.\n stopOnPipeline: (() => void) | null = null\n\n constructor(\n readonly source: Message,\n readonly media: Media[],\n readonly live: boolean,\n readonly params: ProcessParams,\n readonly mediaStream: MediaStream | undefined = undefined,\n ) {}\n\n get cancelled(): boolean {\n return this._cancelled\n }\n\n command(id: string): Message {\n const command: Message = { type: 'setSource', id, ...this.source }\n if (this.params.componentParams !== undefined) {\n command['params'] = this.params.componentParams\n }\n if (this.params.roi !== undefined) {\n command['roi'] = this.params.roi\n }\n if (this.params.camera !== undefined) {\n command['camera'] = this.params.camera\n }\n if (this.params.fps !== undefined) {\n command['fps'] = this.params.fps\n }\n return command\n }\n\n predicted(prediction: Prediction): void {\n if (!this._cancelled) {\n this._results.push(prediction)\n }\n }\n\n finish(error: Error | null = null): void {\n if (error !== null) {\n this._results.push(error)\n }\n this._results.push(null)\n }\n\n cancel(): void {\n if (this._cancelled) {\n return\n }\n this._cancelled = true\n this._results.push(null)\n this.openSource?.inbox.push(CANCELLED)\n // So that a cancelled live source stops on the pipeline instead of running until the socket closes.\n this.stopOnPipeline?.()\n }\n\n async *[Symbol.asyncIterator](): AsyncIterator<Prediction> {\n if (this._consumed) {\n throw new Error('Cannot iterate over a consumed stream')\n }\n this._consumed = true\n while (true) {\n const item = await this._results.next()\n if (item === null) {\n return\n }\n if (item instanceof Error) {\n throw item\n }\n yield item\n }\n }\n}\n\n/** Runs jobs on one socket to the pipeline API, opened when the endpoint connects. */\nexport class PipelineBackend implements WorkerBackend {\n private _pipelineApiUrl: string | null = null\n private _socket: PipelineSocket | null = null\n private _connecting: Promise<PipelineSocket> | null = null\n // Every job's setSource and every changePop goes out through this chain, in the order submitted.\n private _sendChain: Promise<unknown> = Promise.resolve()\n private _disconnecting = false\n private _nextId = 0\n private _currentPop: Pop | null\n private readonly _warned = new Set<string>()\n private _heartbeat: ReturnType<typeof setInterval> | null = null\n // Reconnects at once since a source last played.\n private _reconnects = 0\n\n constructor(private readonly ctx: WorkerContext) {\n this._currentPop = ctx.options.pop ?? null\n }\n\n // Connection\n\n public async reconnect(): Promise<void> {\n this._disconnecting = false\n await this.inOrder(() => this.ensureSocket())\n this.ctx.updateState()\n }\n\n public async disconnect(closeEndpoint: () => Promise<void>): Promise<void> {\n // The endpoint's jobs end first; then the socket, which stops whatever still runs on it.\n await closeEndpoint()\n this._disconnecting = true\n if (this._heartbeat !== null) {\n clearInterval(this._heartbeat)\n this._heartbeat = null\n }\n const socket = this._socket\n this._socket = null\n if (socket !== null) {\n socket.ws.close(1000)\n await socket.closed\n }\n }\n\n public onStatus(_statusCode: number): void {}\n\n public popName(): string | null {\n return null\n }\n\n public async authorizationHeader(): Promise<string> {\n return this.ctx.credentialHeader()\n }\n\n private inOrder<T>(work: () => Promise<T>): Promise<T> {\n const result = this._sendChain.then(work)\n this._sendChain = result.catch(() => undefined)\n return result\n }\n\n /** The open socket, or a new one with the last pop set on it. */\n private async ensureSocket(): Promise<PipelineSocket> {\n if (this._socket !== null && this._socket.open) {\n return this._socket\n }\n if (this._connecting === null) {\n this._connecting = this.openSocket().finally(() => (this._connecting = null))\n }\n return await this._connecting\n }\n\n private async openSocket(): Promise<PipelineSocket> {\n if (this.ctx.client() === null) {\n throw new PipelineSocketClosedError(undefined, 'the endpoint is not connected')\n }\n const ws = await this.upgrade(await this.socketUrl())\n const socket = new PipelineSocket(ws)\n ws.onmessage = (event: MessageEvent) => {\n if (typeof event.data === 'string') {\n try {\n this.dispatch(socket, JSON.parse(event.data))\n } catch (error) {\n this.ctx.logger.warn('unreadable message from the pipeline API: %s', error)\n }\n }\n }\n ws.onerror = () => {}\n ws.onclose = (event: CloseEvent) => this.closed(socket, event.code, event.reason)\n this._socket = socket\n this.startHeartbeat(ws)\n if (this._currentPop !== null) {\n try {\n await this.setPopOn(socket, this._currentPop)\n } catch (error) {\n // A socket whose pipeline does not run the pop runs no job.\n this._socket = null\n ws.close(1000)\n throw error\n }\n }\n return socket\n }\n\n private startHeartbeat(ws: WebSocket): void {\n if (this._heartbeat !== null) {\n clearInterval(this._heartbeat)\n }\n // A ping keeps the connection alive, nothing else; only Node's ws can send one.\n const ping = (ws as any).ping\n if (typeof ping === 'function') {\n this._heartbeat = setInterval(() => {\n if (ws.readyState === 1) {\n ping.call(ws)\n }\n }, HEARTBEAT_MS)\n ;(this._heartbeat as any).unref?.()\n }\n }\n\n private async socketUrl(): Promise<string> {\n if (this._pipelineApiUrl === null) {\n const base = this.ctx.options.isLocalMode ? this.ctx.eyepopUrl() : new URL(await this.configuredPipelineApiUrl(), this.ctx.eyepopUrl() + '/').toString()\n this._pipelineApiUrl = checkedUrl(base)\n }\n return 'ws' + this._pipelineApiUrl.slice('http'.length) + PIPELINE_PATH\n }\n\n private async configuredPipelineApiUrl(): Promise<string> {\n const client = this.ctx.client()\n if (client === null) {\n throw new Error('endpoint not connected')\n }\n let configUrl = `${this.ctx.eyepopUrl()}/v1/configs`\n const accountId = this.ctx.options.accountId\n if (accountId) {\n configUrl += `?account_uuid=${encodeURIComponent(accountId)}`\n }\n const response = await this.ctx.fetchWithRetry(async () => client.fetch(configUrl, { headers: { Authorization: await this.ctx.credentialHeader() } }))\n if (!response.ok) {\n throw new Error(`Unexpected status ${response.status} for GET ${configUrl}: ${await response.text()}`)\n }\n const config = await response.json()\n const url = config?.['pipeline_api_url']\n if (!url) {\n throw new PipelineConfigurationError('no_pipeline_api_url', `${configUrl} has no pipeline_api_url: this compute API serves no pipeline API`)\n }\n return url\n }\n\n private async token(): Promise<string | undefined> {\n if ((resolveAuth(this.ctx.options) as LocalAuth | undefined)?.isLocal !== undefined) {\n return undefined\n }\n return (await this.ctx.credentialHeader()).replace(/^Bearer /, '')\n }\n\n /** Open the socket, waiting through 503 with Retry-After and exchanging the API key again after a 401. */\n private async upgrade(url: string): Promise<WebSocket> {\n const deadline = Date.now() + MAX_RETRY_MS\n let rejected = false\n while (true) {\n try {\n this.ctx.requestLogger.debug('before upgrade %s', url)\n return await openAuthorizedWebSocket(url, SUBPROTOCOL, await this.token())\n } catch (error) {\n if (!(error instanceof UpgradeError)) {\n throw error\n }\n if (error.status === 401 && !rejected) {\n this.ctx.requestLogger.debug('the pipeline API answered 401, authenticating again')\n rejected = true\n this.ctx.forgetCredential()\n continue\n }\n const wait = error.status === 503 && error.retryAfter !== undefined ? Math.max(error.retryAfter, 1) * 1000 : undefined\n if (wait === undefined || Date.now() + wait > deadline) {\n throw error\n }\n this.ctx.requestLogger.info('the pipeline API answered 503, retrying in %d ms', wait)\n await new Promise(resolve => setTimeout(resolve, wait))\n }\n }\n }\n\n private closed(socket: PipelineSocket, code: number | undefined, reason: string): void {\n socket.markClosed()\n if (this._socket === socket) {\n this._socket = null\n }\n const error = new PipelineSocketClosedError(code, reason)\n socket.sources.forEach(source => source.close(error))\n socket.commands.forEach(command => command.reject(error))\n socket.commands.clear()\n if (this._disconnecting) {\n return\n }\n this.ctx.requestLogger.debug('the pipeline API closed the socket: %s %s', code, reason)\n if (RECONNECT_AT_ONCE.has(`${code} ${reason}`)) {\n if (reason === 'credential_expired') {\n this.ctx.forgetCredential()\n }\n // The first reconnect is at once. Should the new socket be closed the same way before a\n // source plays on it, each next one waits twice as long, so a pipeline API that keeps\n // closing is not reconnected to in a loop.\n const delay = this._reconnects === 0 ? 0 : Math.min(1000 * 2 ** (this._reconnects - 1), MAX_RECONNECT_DELAY_MS)\n this._reconnects += 1\n new Promise(resolve => setTimeout(resolve, delay))\n .then(() => (this._disconnecting ? undefined : this.inOrder(() => this.ensureSocket())))\n .catch(error => {\n // The next job or changePop tries again and reports what fails.\n this.ctx.requestLogger.info('could not reopen the pipeline API socket: %s', error)\n })\n }\n }\n\n private dispatch(socket: PipelineSocket, message: Message): void {\n const type = message['type']\n const id = message['id']\n const source = typeof id === 'string' ? socket.sources.get(id) : undefined\n if (type === 'send' || type === 'credit') {\n const upload = source?.uploads.get(message['member'] ?? null)\n upload?.grant(Number(type === 'send' ? message['credit'] : message['bytes']))\n return\n }\n const command = typeof id === 'string' ? socket.commands.get(id) : undefined\n if (command !== undefined) {\n socket.commands.delete(id)\n if (type === 'error') {\n command.reject(new PipelineCommandError(message['error'] ?? '', message['message'] ?? ''))\n } else {\n command.resolve(message)\n }\n return\n }\n if (source !== undefined) {\n if (type === 'start') {\n this._reconnects = 0\n }\n if (type === 'end') {\n source.uploads.forEach(upload => upload.end())\n }\n source.inbox.push(message)\n } else if (type === 'error') {\n if (id === undefined) {\n this.ctx.logger.warn('the pipeline API refused a message: %s %s', message['error'], message['message'])\n } else {\n // A stopSource for a source that ended meanwhile, or one a pipeline API without\n // stopSource does not know: the job ended either way.\n this.ctx.requestLogger.debug('the pipeline API refused a command for %s: %s %s', id, message['error'], message['message'])\n }\n }\n }\n\n private newId(prefix: string): string {\n this._nextId += 1\n return `${prefix}-${this._nextId}`\n }\n\n /** Send a command that is answered by `result` or `error` under its id. */\n private command(socket: PipelineSocket, message: Message): Promise<Message> {\n const id = this.newId(message['type'])\n return new Promise((resolve, reject) => {\n socket.commands.set(id, { resolve, reject })\n socket.sendJson({ ...message, id })\n })\n }\n\n // Pop\n\n public pop(): Pop | null {\n return this._currentPop\n }\n\n /** Set the pop on the socket's pipeline; a pop it refuses rejects, and the last pop it took stays. */\n public async changePop(pop: Pop): Promise<void> {\n if (this.ctx.client() === null) {\n this._currentPop = pop\n return\n }\n await this.inOrder(async () => {\n if (this._socket !== null && this._socket.open) {\n await this.setPopOn(this._socket, pop)\n this._currentPop = pop\n return\n }\n const previous = this._currentPop\n this._currentPop = pop\n try {\n await this.ensureSocket()\n } catch (error) {\n this._currentPop = previous\n throw error\n }\n })\n }\n\n private async setPopOn(socket: PipelineSocket, pop: Pop): Promise<void> {\n await this.command(socket, { type: 'setPop', pop })\n }\n\n // Jobs\n\n public async submit(work: WorkerWork): Promise<ResultStream> {\n if (this.ctx.client() === null) {\n throw new Error('endpoint not connected, use connect()')\n }\n const sourceOptions = work.kind === 'source' ? (work.source as FileSource | StreamSource | PathSource) : undefined\n this.notSent({ motionDetect: work.params.motionDetect, videoMode: sourceOptions?.videoMode, rtspForceNonCompliantUrl: work.params.rtspForceNonCompliantUrl })\n const job = await this.jobOf(work)\n const limit = this.ctx.limit()\n await limit.acquire()\n this.ctx.updateState()\n this.run(job)\n .then(\n () => job.finish(),\n error => job.finish(error instanceof Error ? error : new Error(String(error))),\n )\n .finally(() => this.ctx.jobDone())\n return job\n }\n\n private notSent(options: Record<string, unknown>): void {\n for (const [name, value] of Object.entries(options)) {\n if (value === undefined || this._warned.has(name)) {\n continue\n }\n this._warned.add(name)\n const ticket = name === 'rtspForceNonCompliantUrl' ? '' : ' (AWSU-317)'\n this.ctx.logger.warn(`${name} is not sent to the pipeline API and has no effect in pipeline mode${ticket}`)\n }\n }\n\n private async jobOf(work: WorkerWork): Promise<PipelineJob> {\n switch (work.kind) {\n case 'source':\n return await this.sourceJob(work.source, work.params)\n case 'uploadGroup': {\n const media = await Promise.all(work.paths.map(path => this.pathMedia({ path })))\n return new PipelineJob(uploadGroup(media), media, false, work.params)\n }\n case 'uploadStreamGroup': {\n const media = work.streams.map((stream, i) => bodyMedia(stream, work.mimeTypes?.[i] ?? 'application/octet-stream', undefined))\n return new PipelineJob(uploadGroup(media), media, false, work.params)\n }\n case 'loadFromGroup':\n return new PipelineJob({ group: work.urls.map(url => ({ url })) }, [], false, work.params)\n }\n }\n\n private async sourceJob(source: Source, params: ProcessParams): Promise<PipelineJob> {\n if ((source as FileSource).file !== undefined) {\n const file = (source as FileSource).file\n const media = bodyMedia(file, file.type || 'application/octet-stream', file.size)\n return new PipelineJob({ upload: { contentType: media.contentType } }, [media], false, params)\n } else if ((source as StreamSource).stream !== undefined) {\n const stream = source as StreamSource\n const media = bodyMedia(stream.stream, stream.mimeType, stream.size ?? knownSize(stream.stream))\n return new PipelineJob({ upload: { contentType: media.contentType } }, [media], false, params)\n } else if ((source as PathSource).path !== undefined) {\n const media = await this.pathMedia(source as PathSource)\n return new PipelineJob({ upload: { contentType: media.contentType } }, [media], false, params)\n } else if ((source as UrlSource).url !== undefined) {\n const url = (source as UrlSource).url\n if (url.startsWith('file://')) {\n return await this.sourceJob({ path: url.substring('file://'.length) }, params)\n }\n return new PipelineJob({ url }, [], /^(rtsp|rtmp):\\/\\//.test(url), params)\n } else if ((source as AssetUuidSource).assetUuid !== undefined) {\n return new PipelineJob({ assetUuid: (source as AssetUuidSource).assetUuid }, [], false, params)\n } else if ((source as MediaStreamSource).mediaStream !== undefined) {\n const ingressId = this.newId('whip')\n return new PipelineJob({ whip: { ingressId } }, [], true, params, (source as MediaStreamSource).mediaStream)\n }\n throw new Error('unknown source type')\n }\n\n private async pathMedia(source: PathSource): Promise<Media> {\n const options = this.ctx.options\n const resolve = async () => (options.platformSupport?.resolvePath ? await options.platformSupport.resolvePath(source, this.ctx.logger) : await resolvePath(source, this.ctx.logger))\n const first = await resolve()\n let firstPending = true\n return {\n contentType: first.mimeType,\n size: first.size,\n open: async () => {\n if (firstPending) {\n firstPending = false\n return first.stream\n }\n return (await resolve()).stream\n },\n }\n }\n\n /** Run the job's source to its end; a live source refused overloaded goes once more on a new socket. */\n private async run(job: PipelineJob): Promise<void> {\n let retried = false\n while (true) {\n const sent = await this.inOrder(() => this.setSource(job))\n if (sent === null) {\n return\n }\n const { socket, source } = sent\n const uploading = source.uploads.size > 0 ? this.upload(socket, source, job) : Promise.resolve()\n let whip: SocketWhip | null = null\n let overloaded: boolean\n try {\n overloaded = await this.follow(job, source, () => {\n if (job.mediaStream !== undefined) {\n // A WHIP that fails leaves the live source waiting for media it never gets, so the\n // failure stops it on the pipeline as well as ending the job.\n const fail = (error: unknown) => {\n job.stopOnPipeline?.()\n source.inbox.push(error instanceof Error ? error : new Error(String(error)))\n }\n whip = new SocketWhip(job.mediaStream, job.source['whip']['ingressId'], message => this.command(socket, message), fail, this.ctx.requestLogger)\n whip.start().catch(fail)\n }\n })\n } finally {\n job.openSource = null\n job.stopOnPipeline = null\n socket.sources.delete(source.id)\n source.uploads.forEach(upload => upload.end())\n await uploading\n await (whip as SocketWhip | null)?.close()\n }\n if (!overloaded) {\n return\n }\n if (retried || !job.live) {\n throw new PipelineCommandError('overloaded', 'the pipeline API has no capacity for another live source')\n }\n retried = true\n await socket.closed\n }\n }\n\n /** Send the job's setSource; the caller runs it in submission order. */\n private async setSource(job: PipelineJob): Promise<{ socket: PipelineSocket; source: OpenSource } | null> {\n if (job.cancelled) {\n // Cancelled before its turn: never sent, so it takes no source on the pipeline.\n return null\n }\n const combined = await combinedMedia(job)\n const socket = await this.ensureSocket()\n const source = new OpenSource(this.newId('source'))\n if (combined === null) {\n uploadKeys(job).forEach(key => source.uploads.set(key, new Credit()))\n }\n socket.sources.set(source.id, source)\n job.openSource = source\n job.stopOnPipeline = () => {\n if (socket.open) {\n socket.sendJson({ type: 'stopSource', id: source.id })\n }\n }\n const command = job.command(source.id)\n if (combined === null) {\n socket.sendJson(command)\n } else {\n socket.sendBytes(combinedMessage(command, combined))\n }\n return { socket, source }\n }\n\n /** Hand the source's predictions to the job until it ends; true when the pipeline API was overloaded. */\n private async follow(job: PipelineJob, source: OpenSource, onResult: () => void): Promise<boolean> {\n while (true) {\n if (job.cancelled) {\n return false\n }\n const message = await source.inbox.next()\n if (message === CANCELLED) {\n return false\n }\n if (message instanceof Error) {\n throw message\n }\n switch (message['type']) {\n case 'result':\n onResult()\n break\n case 'prediction':\n job.predicted(message['prediction'] as Prediction)\n break\n case 'end':\n if (message['reason'] === 'eos') {\n return false\n }\n throw new PipelineSourceError(source.id, message['reason'] ?? '', message['message'] ?? '')\n case 'error':\n if (message['error'] === 'overloaded') {\n return true\n }\n throw new PipelineCommandError(message['error'] ?? '', message['message'] ?? '')\n case 'dropped':\n this.ctx.requestLogger.debug('the pipeline API dropped %s predictions of a live source', message['count'])\n break\n }\n }\n }\n\n /** Send each upload member's bytes in chunks within its credit, then its uploaded. */\n private async upload(socket: PipelineSocket, source: OpenSource, job: PipelineJob): Promise<void> {\n const keys = uploadKeys(job)\n try {\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i] as number | null\n const credit = source.uploads.get(key) as Credit\n for await (let piece of pieces(await (job.media[i] as Media).open())) {\n while (piece.length > 0) {\n const n = await credit.take(Math.min(piece.length, CHUNK_BYTES))\n const chunk = new Uint8Array(n + 1)\n chunk[0] = CHUNK\n chunk.set(piece.subarray(0, n), 1)\n socket.sendBytes(chunk)\n piece = piece.subarray(n)\n }\n }\n socket.sendJson(key === null ? { type: 'uploaded', id: source.id } : { type: 'uploaded', id: source.id, member: key })\n }\n } catch (error) {\n if (!(error instanceof UploadEnded)) {\n // The source ended or the socket closed in any other case; the job reports how.\n if (socket.open) {\n source.inbox.push(error instanceof Error ? error : new Error(String(error)))\n }\n }\n }\n }\n\n public async session(): Promise<WorkerSession> {\n const token = await this.token()\n // The token's own expiry, so that a client handed this session knows when it runs out; a\n // local pipeline API takes no token, and an access token given as is has no known expiry.\n const validUntil = token === undefined ? Number.MAX_VALUE : Math.min((await this.ctx.credentialSession()).validUntil, Number.MAX_VALUE)\n return {\n eyepopUrl: this.ctx.eyepopUrl(),\n accessToken: token ?? '',\n validUntil,\n popId: 'transient',\n accountId: this.ctx.options.accountId,\n baseUrl: this._pipelineApiUrl ?? undefined,\n pipelineId: undefined,\n isPipelineMode: true,\n authenticationHeaders: () => (token === undefined ? {} : { Authorization: `Bearer ${token}` }),\n }\n }\n}\n\n/**\n * WHIP signalled over the socket (spec 019): ICE servers, the offer and each local candidate go\n * as `whipIceServers`, `whipOffer` and `whipIce` for the source's ingress; the media goes over WebRTC.\n * A connection that fails is reported through `fail`, since the pipeline only hears no media.\n */\nclass SocketWhip {\n private _pc: RTCPeerConnection | null = null\n private _answered = false\n private _queued: RTCIceCandidate[] = []\n private _offerData: ReturnType<typeof WebrtcBase.parseOffer> | null = null\n\n constructor(\n private readonly _stream: MediaStream,\n private readonly _ingressId: string,\n private readonly _command: (message: Message) => Promise<Message>,\n private readonly _fail: (error: Error) => void,\n private readonly _logger: { debug: (...args: any[]) => void },\n ) {}\n\n async start(): Promise<void> {\n const servers = await this._command({ type: 'whipIceServers', ingressId: this._ingressId })\n const iceServers = (servers['iceServers'] as string[] | undefined) ?? []\n // Only the urls: a TURN server's entry carries its credential.\n this._logger.debug('whip %s: ice servers %j', this._ingressId, iceServers.map(server => server.split(';')[0]))\n const pc = new RTCPeerConnection({ iceServers: WebrtcBase.linkToIceServers(iceServers.join(', ') || null) })\n this._pc = pc\n pc.oniceconnectionstatechange = () => {\n this._logger.debug('whip %s: ice connection %s', this._ingressId, pc.iceConnectionState)\n if (pc.iceConnectionState === 'failed' && this._pc === pc) {\n this._fail(\n new Error(\n `the WebRTC connection of whip ingress ${this._ingressId} failed: no candidate pair connected, ` +\n `so the pipeline API is likely reachable through no STUN or TURN server (ice servers: ${iceServers.length})`,\n ),\n )\n }\n }\n pc.onicecandidate = evt => {\n if (evt.candidate !== null) {\n this.candidate(evt.candidate).catch(error => this._logger.debug('whipIce failed: %s', error))\n }\n }\n this._stream.getTracks().forEach(track => pc.addTrack(track, this._stream))\n const offer = await pc.createOffer()\n if (!offer.sdp) {\n throw new Error('the local offer has no sdp')\n }\n this._offerData = WebrtcBase.parseOffer(offer.sdp)\n await pc.setLocalDescription(offer)\n const answer = await this._command({ type: 'whipOffer', ingressId: this._ingressId, sdp: offer.sdp })\n await pc.setRemoteDescription({ type: 'answer', sdp: answer['sdp'] })\n this._answered = true\n const queued = this._queued\n this._queued = []\n if (queued.length > 0) {\n await this.sendCandidates(queued)\n }\n }\n\n private async candidate(candidate: RTCIceCandidate): Promise<void> {\n if (!this._answered) {\n this._queued.push(candidate)\n return\n }\n await this.sendCandidates([candidate])\n }\n\n private async sendCandidates(candidates: RTCIceCandidate[]): Promise<void> {\n if (this._offerData === null) {\n return\n }\n await this._command({ type: 'whipIce', ingressId: this._ingressId, fragment: WebrtcBase.generateSdpFragment(this._offerData, candidates) })\n }\n\n async close(): Promise<void> {\n this._stream.getTracks().forEach(track => track.stop())\n const pc = this._pc\n this._pc = null\n pc?.close()\n }\n}\n\nfunction checkedUrl(url: string): string {\n const parsed = new URL(url)\n if (parsed.protocol !== 'http:' && parsed.protocol !== 'https:') {\n throw new PipelineConfigurationError('insecure_url', `the pipeline API url ${url} must be an http or https url`)\n }\n if (parsed.protocol === 'http:' && !isLoopback(parsed.hostname)) {\n throw new PipelineConfigurationError('insecure_url', `the pipeline API url ${url} must use https unless its host is a loopback address`)\n }\n return url.replace(/\\/+$/, '')\n}\n\nfunction isLoopback(host: string): boolean {\n return host === 'localhost' || host === '[::1]' || host === '::1' || /^127\\.\\d+\\.\\d+\\.\\d+$/.test(host)\n}\n\nfunction knownSize(body: UploadBody): number | undefined {\n if (typeof Blob !== 'undefined' && body instanceof Blob) {\n return body.size\n }\n if (ArrayBuffer.isView(body) || body instanceof ArrayBuffer) {\n return body.byteLength\n }\n return undefined\n}\n\nfunction bodyMedia(body: UploadBody, contentType: string, size: number | undefined): Media {\n return { open: async () => body, contentType, size: size ?? knownSize(body) }\n}\n\nfunction uploadGroup(media: Media[]): Message {\n return { group: media.map(m => ({ upload: { contentType: m.contentType } })) }\n}\n\n/** The member index of each upload member, or null for a source that is one upload. */\nfunction uploadKeys(job: PipelineJob): Array<number | null> {\n if (job.source['upload'] !== undefined) {\n return [null]\n }\n const group = (job.source['group'] as Message[] | undefined) ?? []\n return group.flatMap((member, i) => (member['upload'] !== undefined ? [i] : []))\n}\n\n/** The upload members' bytes when the job goes as one combined message, else null for chunked. */\nasync function combinedMedia(job: PipelineJob): Promise<Uint8Array[] | null> {\n if (job.media.length === 0 || job.live || job.media.some(m => m.size === undefined)) {\n return null\n }\n if (job.media.reduce((total, m) => total + (m.size ?? 0), 0) > COMBINED_UPLOAD_MAX_BYTES) {\n return null\n }\n const bytes: Uint8Array[] = []\n for (const media of job.media) {\n bytes.push(await readAll(await media.open()))\n }\n return bytes\n}\n\nasync function readAll(body: UploadBody): Promise<Uint8Array> {\n const parts: Uint8Array[] = []\n for await (const piece of pieces(body)) {\n parts.push(piece)\n }\n return concat(parts)\n}\n\nfunction concat(parts: Uint8Array[]): Uint8Array {\n const all = new Uint8Array(parts.reduce((total, p) => total + p.length, 0))\n let offset = 0\n for (const part of parts) {\n all.set(part, offset)\n offset += part.length\n }\n return all\n}\n\nfunction combinedMessage(command: Message, media: Uint8Array[]): Uint8Array {\n if (command['group'] !== undefined) {\n let i = 0\n command = {\n ...command,\n group: (command['group'] as Message[]).map(member => (member['upload'] !== undefined ? { upload: { ...member['upload'], bytes: (media[i++] as Uint8Array).length } } : member)),\n }\n }\n const header = new TextEncoder().encode(JSON.stringify(command))\n const prefix = new Uint8Array(5)\n prefix[0] = COMBINED\n new DataView(prefix.buffer).setUint32(1, header.length, false)\n return concat([prefix, header, ...media])\n}\n\nasync function* pieces(body: UploadBody): AsyncGenerator<Uint8Array> {\n if (typeof Blob !== 'undefined' && body instanceof Blob) {\n yield* pieces(body.stream() as ReadableStream<Uint8Array>)\n } else if (body instanceof ArrayBuffer) {\n yield new Uint8Array(body)\n } else if (ArrayBuffer.isView(body)) {\n yield new Uint8Array(body.buffer, body.byteOffset, body.byteLength)\n } else {\n const reader = (body as ReadableStream<Uint8Array>).getReader()\n try {\n while (true) {\n const { value, done } = await reader.read()\n if (done) {\n return\n }\n if (value !== undefined && value.length > 0) {\n yield value\n }\n }\n } finally {\n reader.releaseLock()\n }\n }\n}\n","import { Endpoint } from '../endpoint'\nimport { WorkerOptions } from '../worker/worker_options'\nimport { ComponentParams, Pop, ProcessParams, ProcessRequest, ResultStream, Source, WorkerSession, validatePop } from '../worker/worker_types'\nimport { validateCamera } from '../camera'\nimport { WorkerBackend, WorkerContext, WorkerWork } from './worker_backend'\nimport { SessionBackend } from './session_backend'\nimport { MAX_OPEN_SOURCES, PipelineBackend, PipelineConfigurationError } from './pipeline_backend'\n\n/**\n * Endpoint to an EyePop.ai worker. Its jobs run on a backend: a worker session by default, or with\n * `isPipelineMode` the pipeline API's socket. The methods are the same either way; a backend that\n * cannot honour an option says so.\n */\nexport class WorkerEndpoint extends Endpoint<WorkerEndpoint> {\n private readonly _backend: WorkerBackend\n\n constructor(options: WorkerOptions) {\n if (options.isPipelineMode) {\n // A socket takes 256 open sources, so that is the most jobs a pipeline mode endpoint holds;\n // a copy, so that the caller's options are left as they were.\n options = { ...options, jobQueueLength: options.jobQueueLength || MAX_OPEN_SOURCES }\n if ((options.jobQueueLength as number) > MAX_OPEN_SOURCES) {\n throw new PipelineConfigurationError('job_queue_length', `jobQueueLength ${options.jobQueueLength} exceeds ${MAX_OPEN_SOURCES}, the open sources a pipeline API socket takes`)\n }\n }\n super(options)\n const context: WorkerContext = {\n options: options,\n logger: this._logger,\n requestLogger: this._requestLogger,\n client: () => this._client,\n limit: () => this._limit,\n jobDone: () => {\n this._limit.release()\n this.updateState()\n },\n updateState: (state, message) => this.updateState(state, message),\n eyepopUrl: () => this.eyepopUrl(),\n eyepopWebApiUrl: () => this.eyepopWebApiUrl(),\n credentialHeader: () => super.authorizationHeader(),\n forgetCredential: () => this.statusHandler401(401),\n fetchWithRetry: (fetcher, retries) => this.fetchWithRetry(fetcher, retries),\n credentialSession: () => super.session(),\n }\n this._backend = options.isPipelineMode ? new PipelineBackend(context) : new SessionBackend(context)\n this.setStatusRetryHandlers(new Map<number, Function>([[404, (statusCode: number) => this._backend.onStatus(statusCode)]]))\n }\n\n private options(): WorkerOptions {\n return this._options as WorkerOptions\n }\n\n /** What runs this endpoint's jobs. */\n public backend(): WorkerBackend {\n return this._backend\n }\n\n public override async disconnect(wait: boolean = true): Promise<void> {\n await this._backend.disconnect(() => super.disconnect(wait))\n }\n\n public override async session(): Promise<WorkerSession> {\n return await this._backend.session()\n }\n\n public popName(): string | null {\n return this._backend.popName()\n }\n\n public pop(): Pop | null {\n return this._backend.pop()\n }\n\n public async changePop(pop: Pop): Promise<void> {\n // locally, so a Pop that cannot mean what it says fails here rather\n // than as a 400 from the worker that compiles it\n validatePop(pop)\n await this._backend.changePop(pop)\n }\n\n /**\n * @deprecated Pop ids are only retained for backwards compatibility.\n * Configure transient sessions with `WorkerOptions.pop`.\n */\n public popId(): string | null {\n return this.options().popId || null\n }\n\n /**\n * V1 call to process media as a source with optional component params\n *\n * @deprecated use V2 call process() with named parameters\n * @param source\n * @param params\n */\n public async process(source: Source, params?: ComponentParams[]): Promise<ResultStream>\n\n /**\n * V2 call to process media as a source with extensible named parameters\n *\n * @param source\n * @param componentParams\n * @param motionDetect\n * @param roi\n */\n public async process({ source, componentParams, motionDetect, roi }: ProcessRequest): Promise<ResultStream>\n\n public async process(param1: any, param2?: any): Promise<ResultStream> {\n if ((param1 as ProcessRequest).source !== undefined) {\n const request = param1 as ProcessRequest\n this.validateProcessParams(request)\n return await this.submit({ kind: 'source', source: request.source, params: request })\n } else {\n return await this.submit({ kind: 'source', source: param1 as Source, params: { componentParams: param2 } })\n }\n }\n\n /**\n * Reject a source's calibration before any work is started for it.\n *\n * Called by every entry point that takes ProcessParams, before the\n * concurrency limit is acquired, so a request that can never be sent\n * does not hold a slot.\n */\n private validateProcessParams(params: ProcessParams): void {\n if (params.camera !== undefined) {\n validateCamera(params.camera)\n }\n }\n\n public async uploadGroup(paths: string[], params: ProcessParams = {}): Promise<ResultStream> {\n if (paths.length === 0) {\n throw new Error('upload group requires at least one path')\n }\n this.validateProcessParams(params)\n return await this.submit({ kind: 'uploadGroup', paths, params })\n }\n\n public async uploadStreamGroup(streams: Array<ReadableStream<Uint8Array> | Blob | BufferSource>, mimeTypes?: string[], params: ProcessParams = {}): Promise<ResultStream> {\n if (streams.length === 0) {\n throw new Error('upload stream group requires at least one stream')\n }\n if (mimeTypes !== undefined && mimeTypes.length !== streams.length) {\n throw new Error('mimeTypes must have the same length as streams')\n }\n this.validateProcessParams(params)\n return await this.submit({ kind: 'uploadStreamGroup', streams, mimeTypes, params })\n }\n\n public async loadFromGroup(urls: string[], params: ProcessParams = {}): Promise<ResultStream> {\n if (urls.length === 0) {\n throw new Error('load from group requires at least one url')\n }\n this.validateProcessParams(params)\n return await this.submit({ kind: 'loadFromGroup', urls, params })\n }\n\n private async submit(work: WorkerWork): Promise<ResultStream> {\n return await this._backend.submit(work)\n }\n\n protected override async reconnect(): Promise<WorkerEndpoint> {\n await this._backend.reconnect()\n return this\n }\n\n protected override async authorizationHeader(): Promise<string> {\n return await this._backend.authorizationHeader()\n }\n}\n","import { SessionAuth, resolveAuth } from '../options'\nimport { EndpointState } from '../types'\nimport { createWebSocket } from '../shims/websockets'\nimport { Endpoint } from '../endpoint'\nimport urljoin from 'url-join'\nimport { DataOptions } from './data_options'\nimport {\n Annotation,\n AnnotationInclusionMode,\n ArtifactType,\n Asset,\n AssetImport,\n AssetInclusionMode,\n AssetUrlType,\n AutoAnnotate,\n AutoAnnotateParams,\n AutoPromptConfig,\n AutoTask,\n ChangeEvent,\n ChangeType,\n CreateWorkflow,\n DataApiType,\n DataSession,\n Dataset,\n DatasetAutoAnnotate,\n DatasetAutoAnnotateCreate,\n DatasetAutoAnnotateUpdate,\n DatasetCreate,\n DatasetHeroAssetUpdate,\n DatasetUpdate,\n DownloadResponse,\n EvaluateRequest,\n ExportedBy,\n getBaseUrl,\n InferRequest,\n ListWorkFlowItem,\n Model,\n ModelCreate,\n ModelFormat,\n ModelTrainingProgress,\n ModelUpdate,\n OnChangeEvent,\n QcAiHubExportParams,\n Roi,\n TranscodeMode,\n UserReview,\n VlmAbility,\n VlmAbilityCreate,\n VlmAbilityGroup,\n VlmAbilityGroupCreate,\n VlmAbilityGroupUpdate,\n VlmAbilityUpdate,\n AliasResolution,\n Workflow,\n WorkflowPhase,\n} from './data_types'\nimport { Prediction } from '@eyepop.ai/eyepop'\nimport { EvaluateDatasetJob, InferAssetJob } from './jobs'\n\ninterface DataConfig {\n dataset_api_url: string\n vlm_api_url: string\n}\n\nconst WS_INITIAL_RECONNECT_DELAY = 1000\nconst WS_MAX_RECONNECT_DELAY = 60000\n\nfunction ws_origin(url: string): string {\n try {\n return new URL(url).origin\n } catch {\n return url\n }\n}\n\nfunction ws_failure_reason(event: unknown, sourceError: unknown): string {\n if (sourceError instanceof Error) {\n return sourceError.message\n }\n if (typeof sourceError === 'string') {\n return sourceError\n }\n return (event as { message?: string })?.message ?? ''\n}\n\nexport class EyePopDataWebSocketError extends Error {\n readonly code = 'DATA_WEBSOCKET_CONNECTION_FAILED'\n readonly endpoint: string\n readonly sourceError: unknown\n\n constructor(url: string, event: unknown) {\n const sourceError = (event as { error?: unknown })?.error ?? event\n const reason = ws_failure_reason(event, sourceError)\n super(reason ? `EyePop Dataset event WebSocket connection failed: ${reason}` : 'EyePop Dataset event WebSocket connection failed')\n this.name = 'EyePopDataWebSocketError'\n this.endpoint = ws_origin(url)\n this.sourceError = sourceError\n }\n}\n\nfunction omit_nulls(_: any, value: any) {\n if (value === null) {\n return undefined\n }\n return value\n}\n\nexport class DataEndpoint extends Endpoint<DataEndpoint> {\n private datasetApiUrl: string | null\n private vlmApiUrl: string | null\n private _accountId: string | null\n\n private _ws: WebSocket | null\n private _ws_current_reconnect_delay: number | null\n private _ws_reconnect_timeout: ReturnType<typeof setTimeout> | null\n private _ws_reconnect_enabled: boolean\n private _ws_connecting: Promise<void> | null\n\n private _account_event_handlers: OnChangeEvent[]\n private _dataset_uuid_to_event_handlers: Map<string, OnChangeEvent[]>\n\n constructor(options: DataOptions) {\n super(options)\n this.datasetApiUrl = null\n this.vlmApiUrl = null\n this._ws = null\n this._ws_current_reconnect_delay = null\n this._ws_reconnect_timeout = null\n this._ws_reconnect_enabled = false\n this._ws_connecting = null\n this._accountId = options.accountId || null\n this._account_event_handlers = []\n this._dataset_uuid_to_event_handlers = new Map<string, OnChangeEvent[]>()\n const sessionAuth = resolveAuth(options) as SessionAuth | undefined\n if (sessionAuth?.session !== undefined) {\n const dataSession = sessionAuth.session as DataSession\n if (dataSession.accountId) {\n this._accountId = dataSession.accountId\n }\n }\n }\n\n public override async session(): Promise<DataSession> {\n const session = await super.session()\n return {\n eyepopUrl: session.eyepopUrl,\n accessToken: session.accessToken,\n validUntil: session.validUntil,\n accountId: this.options().accountId as string,\n datasetApiUrl: this.datasetApiUrl as string,\n vlmApiUrl: this.vlmApiUrl as string,\n }\n }\n\n public override async disconnect(wait: boolean = true): Promise<void> {\n this._ws_reconnect_enabled = false\n if (this._ws_reconnect_timeout) {\n clearTimeout(this._ws_reconnect_timeout)\n this._ws_reconnect_timeout = null\n }\n this.datasetApiUrl = null\n this.vlmApiUrl = null\n if (this._ws) {\n this.close_ws(this._ws, 'unsubscribe')\n this._ws = null\n }\n await super.disconnect(wait)\n }\n\n protected override async reconnect(): Promise<DataEndpoint> {\n if (!this._client) {\n return Promise.reject('endpoint not initialized')\n }\n const accountUuidQuery = this._accountId ? `?account_uuid=${this._accountId}` : ''\n const config_url = `${this.eyepopUrl()}/v1/configs${accountUuidQuery}`\n let headers = {\n Authorization: await this.authorizationHeader(),\n }\n this.updateState(EndpointState.FetchConfig)\n let response = await this._client.fetch(config_url, { headers: headers })\n if (response.status == 401) {\n this._requestLogger.debug('GET %s: 401, about to retry with fresh access token', config_url)\n // one retry, the token might have just expired\n this.statusHandler401(response.status)\n headers = {\n Authorization: await this.authorizationHeader(),\n }\n this.updateState(EndpointState.FetchConfig)\n response = await this._client.fetch(config_url, {\n headers: headers,\n })\n }\n\n if (response.status != 200) {\n this.updateState(EndpointState.Error)\n const message = await response.text()\n return Promise.reject(`Unexpected status ${response.status} for ${config_url}: ${message}`)\n }\n let config = (await response.json()) as DataConfig\n\n const datasetApiUrl = new URL(config.dataset_api_url, this.eyepopUrl())\n this.datasetApiUrl = datasetApiUrl.toString()\n const vlmApiUrl = new URL(config.vlm_api_url, this.eyepopUrl())\n this.vlmApiUrl = vlmApiUrl.toString()\n\n if (this.options().disableWs) {\n this._ws_reconnect_enabled = false\n this._logger.info('disabled ws connection')\n } else {\n await this.reconnect_ws()\n }\n\n if (this.options().useCookie) {\n const client = this._client\n const url = urljoin(this.datasetApiUrl, 'security', 'check?set_cookie=true')\n const headers = {\n Authorization: await this.authorizationHeader(),\n }\n response = await client.fetch(url, {\n headers: headers,\n })\n if (response.status != 204) {\n this.updateState(EndpointState.Error)\n const message = await response.text()\n return Promise.reject(`Unexpected status ${response.status}: ${message}`)\n }\n }\n\n this.updateState()\n return Promise.resolve(this)\n }\n\n private async reconnect_ws(): Promise<void> {\n if (this._ws_connecting) {\n return this._ws_connecting\n }\n const connecting = this.open_ws()\n this._ws_connecting = connecting\n try {\n await connecting\n } finally {\n this._ws_connecting = null\n }\n }\n\n private async open_ws(): Promise<void> {\n if (this._ws) {\n this.close_ws(this._ws, 'unsubscribe')\n this._ws = null\n }\n const baseUrl = this.datasetApiUrl?.replace('https://', 'wss://').replace('http://', 'ws://')\n if (!baseUrl) {\n return\n }\n const ws_url = urljoin(baseUrl, 'events')\n this._requestLogger.debug('about to connect ws to: %s', ws_url)\n return new Promise((resolve, reject) => {\n let settled = false\n const settle_ok = () => {\n settled = true\n resolve()\n }\n const settle_err = (error: unknown) => {\n settled = true\n reject(error)\n }\n\n const ws = createWebSocket(ws_url)\n if (!ws) {\n return settle_ok()\n }\n this._ws = ws\n\n ws.onopen = () => {\n void this.authorizationHeader()\n .then(auth_header => {\n if (this._ws !== ws) {\n this.close_ws(ws, 'unsubscribe')\n settle_ok()\n return\n }\n let msg = JSON.stringify({ authorization: auth_header })\n this._requestLogger.debug('ws send: %s', msg)\n ws.send(msg)\n msg = JSON.stringify({ subscribe: { account_uuid: this._accountId } })\n this._requestLogger.debug('ws send: %s', msg)\n ws.send(msg)\n for (const dataset_uuid of this._dataset_uuid_to_event_handlers.keys()) {\n const msg = JSON.stringify({ subscribe: { dataset_uuid: dataset_uuid } })\n this._requestLogger.debug('ws send: %s', msg)\n ws.send(msg)\n }\n this._ws_current_reconnect_delay = WS_INITIAL_RECONNECT_DELAY\n // enabling here rather than before connecting keeps a rejected connect()\n // from leaving a reconnect timer behind for a caller that already gave up\n this._ws_reconnect_enabled = true\n settle_ok()\n })\n .catch(error => {\n this.close_ws(ws, 'authorization failed', 1011)\n settle_err(error)\n })\n }\n\n ws.onmessage = event => {\n const data = JSON.parse(event.data)\n this._requestLogger.debug('received ws: %s', JSON.stringify(data))\n const change_event = data as ChangeEvent\n this.dispatchChangeEvent(change_event)\n }\n\n ws.onclose = (event: CloseEvent) => {\n const { code, reason } = event\n this._requestLogger.debug('ws closed: %d %s', code, reason)\n if (!settled) {\n settle_err(new EyePopDataWebSocketError(ws_url, new Error(`closed before the connection was established: ${code} ${reason}`)))\n }\n if (this._ws !== ws) {\n return\n }\n this._ws = null\n this.schedule_ws_reconnect()\n }\n\n ws.onerror = (event: Event): any => {\n const error = new EyePopDataWebSocketError(ws_url, event)\n this._logger.error({ err: error }, 'dataset event WebSocket connection failed')\n settle_err(error)\n return null\n }\n })\n }\n\n private close_ws(ws: WebSocket, reason: string, code: number = 1000): void {\n try {\n ws.close(code, reason)\n } catch (e) {\n this._logger.warn({ err: e }, 'ignored exception closing the dataset event WebSocket')\n }\n }\n\n private schedule_ws_reconnect(): void {\n if (!this._ws_reconnect_enabled || this._ws_reconnect_timeout) {\n return\n }\n if (!this._ws_current_reconnect_delay) {\n this._ws_current_reconnect_delay = WS_INITIAL_RECONNECT_DELAY\n } else if (this._ws_current_reconnect_delay < WS_MAX_RECONNECT_DELAY) {\n this._ws_current_reconnect_delay *= 1.5\n }\n this._ws_reconnect_timeout = setTimeout(() => {\n if (!this._ws_reconnect_enabled) {\n this._ws_reconnect_timeout = null\n return\n }\n void this.reconnect_ws()\n .catch(error => {\n this._requestLogger.debug('dataset event WebSocket reconnect failed: %s', error)\n })\n .finally(() => {\n this._ws_reconnect_timeout = null\n if (!this._ws) {\n this.schedule_ws_reconnect()\n }\n })\n }, this._ws_current_reconnect_delay)\n }\n\n private options(): DataOptions {\n return this._options as DataOptions\n }\n\n private async request(path: string, options: RequestInit = {}, disableAuth: boolean = false, dataApiType: DataApiType = DataApiType.dataset) {\n const client = this._client\n if (!client) {\n return Promise.reject('endpoint not connected')\n }\n let response = await this.fetchWithRetry(async () => {\n const session = await this.session()\n\n const baseUrl = getBaseUrl(session, dataApiType)\n const headers = {\n ...(disableAuth ? {} : { Authorization: `Bearer ${session.accessToken}` }),\n ...(options.headers || {}),\n }\n\n if (!options.body) {\n options.body = null\n }\n\n const ri = {\n headers: headers,\n method: options.method || 'GET',\n body: options.body,\n }\n this._requestLogger.debug('Request - ' + ri.method + ' ' + path + ' BODY: ' + (ri.body ? ri.body : ''))\n\n return await client.fetch(urljoin(baseUrl ?? '', path), ri)\n })\n\n if (response.status === 204) {\n return null // Return null if the response is completely empty\n }\n\n const contentType = response.headers.get('Content-Type')\n this._requestLogger.debug('Response - ' + response.status + ' ' + response.statusText)\n\n if (!response.ok) {\n if (contentType && (contentType.toLowerCase().startsWith('application/json') || contentType.toLowerCase().startsWith('text/'))) {\n throw new Error(`Request failed with ${response.status} ${response.statusText}: ${await response.text()}`)\n } else {\n throw new Error(`Request failed with ${response.status} ${response.statusText}`)\n }\n }\n\n if (contentType && contentType.toLowerCase().startsWith('application/json')) {\n return await response.json()\n }\n\n return await response.blob()\n }\n\n async listDatasets(include_stats: boolean = true, modifiable_version_only?: boolean): Promise<Dataset[]> {\n const modifiableVersionQuery = typeof modifiable_version_only !== 'undefined' ? `&modifiable_version_only=${modifiable_version_only}` : ''\n return this.request(`/datasets?account_uuid=${this._accountId}&include_stats=${include_stats}${modifiableVersionQuery}`, {\n method: 'GET',\n })\n }\n\n async createDataset(data: DatasetCreate): Promise<Dataset> {\n return this.request(`/datasets?account_uuid=${this._accountId}`, {\n method: 'POST',\n body: JSON.stringify(data),\n headers: { 'Content-Type': 'application/json' },\n })\n }\n\n async getDataset(dataset_uuid: string, include_stats: boolean = true, dataset_version?: number, modifiable_version_only?: boolean): Promise<Dataset> {\n const versionQuery = dataset_version ? `&dataset_version=${dataset_version}` : ''\n const modifiableVersionQuery = typeof modifiable_version_only !== 'undefined' ? `&modifiable_version_only=${modifiable_version_only}` : ''\n return this.request(`/datasets/${dataset_uuid}?include_stats=${include_stats}${versionQuery}${modifiableVersionQuery}`, {\n method: 'GET',\n })\n }\n\n async updateDataset(dataset_uuid: string, data: DatasetUpdate, start_auto_annotate: boolean = true): Promise<Dataset> {\n return this.request(`/datasets/${dataset_uuid}?start_auto_annotate=${start_auto_annotate}`, {\n method: 'PATCH',\n body: JSON.stringify(data),\n headers: { 'Content-Type': 'application/json' },\n })\n }\n\n async updateDatasetHeroAsset(dataset_uuid: string, update: DatasetHeroAssetUpdate): Promise<Dataset> {\n return this.request(`/datasets/${dataset_uuid}/hero_asset`, {\n method: 'PATCH',\n body: JSON.stringify(update),\n headers: { 'Content-Type': 'application/json' },\n })\n }\n\n async deleteDataset(dataset_uuid: string): Promise<void> {\n return this.request(`/datasets/${dataset_uuid}`, {\n method: 'DELETE',\n })\n }\n\n async freezeDatasetVersion(dataset_uuid: string, dataset_version?: number): Promise<Dataset> {\n const versionQuery = dataset_version ? `&dataset_version=${dataset_version}` : ''\n return this.request(`/datasets/${dataset_uuid}/freeze?${versionQuery}`, {\n method: 'POST',\n })\n }\n\n async analyzeDatasetVersion(dataset_uuid: string, dataset_version?: number): Promise<void> {\n const versionQuery = dataset_version ? `&dataset_version=${dataset_version}` : ''\n return this.request(`/datasets/${dataset_uuid}/analyze?${versionQuery}`, {\n method: 'POST',\n })\n }\n\n async autoAnnotateDatasetVersion(dataset_uuid: string, dataset_version?: number, max_assets?: number): Promise<void> {\n const versionQuery = dataset_version ? `&dataset_version=${dataset_version}` : ''\n const maxAssetsQuery = max_assets ? `&max_assets=${max_assets}` : ''\n return this.request(`/datasets/${dataset_uuid}/auto_annotate?${versionQuery}${maxAssetsQuery}`, {\n method: 'POST',\n })\n }\n\n async deleteDatasetVersion(dataset_uuid: string, dataset_version: number): Promise<Dataset> {\n return this.request(`/datasets/${dataset_uuid}/versions?dataset_version=${dataset_version}`, {\n method: 'DELETE',\n })\n }\n\n async deleteAnnotations(dataset_uuid: string, dataset_version: number, user_reviews: UserReview[] = [UserReview.unknown]): Promise<void> {\n let userReviewsQuery = ''\n for (let userReview in user_reviews) {\n userReviewsQuery += `&user_review=${userReview}`\n }\n await this.request(`/datasets/${dataset_uuid}/annotations?dataset_version=${dataset_version}${userReviewsQuery}`, {\n method: 'DELETE',\n })\n }\n\n async createDatasetAutoAnnotate(create: DatasetAutoAnnotateCreate, dataset_uuid: string, dataset_version?: number): Promise<void> {\n const versionQuery = dataset_version ? `dataset_version=${dataset_version}&` : ''\n return this.request(`/datasets/${dataset_uuid}/auto_annotates?${versionQuery}`, {\n method: 'POST',\n body: JSON.stringify(create),\n headers: { 'Content-Type': 'application/json' },\n })\n }\n\n async updateDatasetAutoAnnotate(update: DatasetAutoAnnotateUpdate, dataset_uuid: string, auto_annotate: string, source: string, dataset_version?: number): Promise<void> {\n const versionQuery = dataset_version ? `dataset_version=${dataset_version}&` : ''\n return this.request(`/datasets/${dataset_uuid}/auto_annotates?auto_annotate=${auto_annotate}&source=${encodeURIComponent(source)}&${versionQuery}`, {\n method: 'PATCH',\n body: JSON.stringify(update),\n headers: { 'Content-Type': 'application/json' },\n })\n }\n\n async listDatasetAutoAnnotates(dataset_uuid: string, auto_annotate?: string, source?: string, dataset_version?: number): Promise<DatasetAutoAnnotate[]> {\n const versionQuery = dataset_version ? `dataset_version=${dataset_version}&` : ''\n const autoAnnotateQuery = auto_annotate ? `auto_annotate=${auto_annotate}&` : ''\n const sourceQuery = source ? `source=${source}&` : ''\n return this.request(`/datasets/${dataset_uuid}/auto_annotates?${versionQuery}&${autoAnnotateQuery}&${sourceQuery}`, {\n method: 'GET',\n })\n }\n\n // Asset methods\n async uploadAsset(dataset_uuid: string, dataset_version: number | undefined, blob: Blob, external_id: string | undefined = undefined): Promise<Asset> {\n const versionQuery = dataset_version ? `&dataset_version=${dataset_version}` : ''\n let post_path: string\n if (external_id) {\n post_path = `/assets?dataset_uuid=${dataset_uuid}${versionQuery}&external_id=${external_id}`\n } else {\n post_path = `/assets?dataset_uuid=${dataset_uuid}${versionQuery}`\n }\n\n return this.request(post_path, {\n method: 'POST',\n body: blob,\n headers: {\n 'Content-Type': blob.type || 'application/octet-stream',\n },\n })\n }\n\n async importAsset(dataset_uuid: string, dataset_version: number | undefined, asset_import: AssetImport, external_id: string | undefined = undefined): Promise<Asset> {\n const versionQuery = dataset_version ? `&dataset_version=${dataset_version}` : ''\n let post_path: string\n if (external_id) {\n post_path = `/assets/imports?dataset_uuid=${dataset_uuid}${versionQuery}&external_id=${external_id}`\n } else {\n post_path = `/assets/imports?dataset_uuid=${dataset_uuid}${versionQuery}`\n }\n\n return this.request(post_path, {\n method: 'POST',\n body: JSON.stringify(asset_import),\n headers: {\n 'Content-Type': 'application/json',\n },\n })\n }\n\n async listAssets(\n dataset_uuid: string,\n dataset_version?: number,\n include_annotations: boolean = false,\n top_k?: number,\n inclusion_mode?: AssetInclusionMode,\n annotation_inclusion_mode?: AnnotationInclusionMode,\n include_partitions?: string[],\n include_auto_annotates?: AutoAnnotate[],\n include_sources?: string[],\n ): Promise<Asset[]> {\n const params = new URLSearchParams()\n params.set('dataset_uuid', dataset_uuid)\n if (dataset_version != null) params.set('dataset_version', String(dataset_version))\n if (include_annotations) params.set('include_annotations', 'true')\n if (inclusion_mode != null) params.set('inclusion_mode', inclusion_mode)\n if (annotation_inclusion_mode != null) params.set('annotation_inclusion_mode', annotation_inclusion_mode)\n for (const p of include_partitions ?? []) params.append('include_partition', p)\n for (const a of include_auto_annotates ?? []) params.append('include_auto_annotate', a)\n for (const s of include_sources ?? []) params.append('include_source', s)\n if (top_k != null) params.set('top_k', String(top_k))\n return this.request(`/assets?${params.toString()}`, {\n method: 'GET',\n })\n }\n\n async getAsset(asset_uuid: string, dataset_uuid?: string, dataset_version?: number, include_annotations: boolean = false, top_k?: number): Promise<Asset> {\n const versionQuery = dataset_version ? `&dataset_version=${dataset_version}` : ''\n const annotationsQuery = include_annotations ? '&include_annotations=true' : ''\n const datasetQuery = dataset_uuid ? `&dataset_uuid=${dataset_uuid}` : ''\n const topKQuery = top_k ? `&top_k=${top_k}` : ''\n return this.request(`/assets/${asset_uuid}?${datasetQuery}${versionQuery}${annotationsQuery}${topKQuery}`, {\n method: 'GET',\n })\n }\n\n async deleteAsset(asset_uuid: string, dataset_uuid?: string, dataset_version?: number): Promise<void> {\n const versionQuery = dataset_version ? `&dataset_version=${dataset_version}` : ''\n const datasetQuery = dataset_uuid ? `&dataset_uuid=${dataset_uuid}` : ''\n return this.request(`/assets/${asset_uuid}?${datasetQuery}${versionQuery}`, {\n method: 'DELETE',\n })\n }\n\n async resurrectAsset(asset_uuid: string, dataset_uuid: string, from_dataset_version: number, into_dataset_version?: number): Promise<void> {\n const intoVersionQuery = into_dataset_version ? `&into_dataset_version=${into_dataset_version}` : ''\n return this.request(`/assets/${asset_uuid}/resurrect?dataset_uuid=${dataset_uuid}&from_dataset_version=${from_dataset_version}${intoVersionQuery}`, {\n method: 'POST',\n })\n }\n\n async updateAssetGroundTruth(asset_uuid: string, dataset_uuid?: string, dataset_version?: number, predictions?: Prediction[]): Promise<void> {\n const versionQuery = dataset_version ? `&dataset_version=${dataset_version}` : ''\n const datasetQuery = dataset_uuid ? `&dataset_uuid=${dataset_uuid}` : ''\n return this.request(`/assets/${asset_uuid}/ground_truth?${datasetQuery}${versionQuery}`, {\n method: 'PATCH',\n body: JSON.stringify(predictions),\n headers: { 'Content-Type': 'application/json' },\n })\n }\n\n async deleteAssetGroundTruth(asset_uuid: string, dataset_uuid?: string, dataset_version?: number): Promise<void> {\n const versionQuery = dataset_version ? `&dataset_version=${dataset_version}` : ''\n const datasetQuery = dataset_uuid ? `&dataset_uuid=${dataset_uuid}` : ''\n return this.request(`/assets/${asset_uuid}/ground_truth?${datasetQuery}${versionQuery}`, {\n method: 'DELETE',\n })\n }\n\n async updateAutoAnnotationStatus(asset_uuid: string, auto_annotate: string, user_review: UserReview, approved_threshold?: number): Promise<void> {\n const validStatuses = ['approved', 'rejected', 'unknown']\n if (!validStatuses.includes(user_review)) {\n throw new Error('Invalid status')\n }\n const thresholdQuery = approved_threshold ? `?approved_threshold=${approved_threshold}` : ''\n return this.request(`/assets/${asset_uuid}/auto_annotations/${auto_annotate}/user_review/${user_review}${thresholdQuery}`, {\n method: 'PATCH',\n })\n }\n\n async addAssetAnnotation(\n asset_uuid: string,\n dataset_uuid?: string,\n dataset_version?: number,\n predictions?: Prediction[],\n auto_annotate?: string,\n source?: string,\n user_review?: UserReview,\n approved_threshold?: number,\n ): Promise<void> {\n const datasetQuery = dataset_uuid ? `dataset_uuid=${dataset_uuid}&` : ''\n const versionQuery = dataset_version ? `&dataset_version=${dataset_version}&` : ''\n const autoAnnotateQuery = auto_annotate ? `&auto_annotate=${auto_annotate}&` : ''\n const sourceQuery = source ? `&source=${encodeURIComponent(source)}&` : ''\n const userReviewQuery = user_review ? `&user_review=${user_review}&` : ''\n const approvedThresholdQuery = typeof approved_threshold !== 'undefined' ? `&approved_threshold=${approved_threshold}&` : ''\n return this.request(`/assets/${asset_uuid}/annotations?${datasetQuery}${versionQuery}${autoAnnotateQuery}${sourceQuery}${userReviewQuery}${approvedThresholdQuery}`, {\n method: 'POST',\n body: JSON.stringify(predictions),\n headers: { 'Content-Type': 'application/json' },\n })\n }\n\n async updateAssetAnnotationApproval(\n asset_uuid: string,\n dataset_uuid?: string,\n dataset_version?: number,\n auto_annotate?: string,\n source?: string,\n user_review?: UserReview,\n approved_threshold?: number,\n ): Promise<void> {\n const datasetQuery = dataset_uuid ? `dataset_uuid=${dataset_uuid}&` : ''\n const versionQuery = dataset_version ? `&dataset_version=${dataset_version}&` : ''\n const autoAnnotateQuery = auto_annotate ? `&auto_annotate=${auto_annotate}&` : ''\n const sourceQuery = source ? `&source=${encodeURIComponent(source)}&` : ''\n const userReviewQuery = user_review ? `&user_review=${user_review}&` : ''\n const approvedThresholdQuery = approved_threshold ? `&approved_threshold=${approved_threshold}&` : ''\n return this.request(`/assets/${asset_uuid}/annotations?${datasetQuery}${versionQuery}${autoAnnotateQuery}${sourceQuery}${userReviewQuery}${approvedThresholdQuery}`, {\n method: 'PATCH',\n })\n }\n\n async downloadAsset(\n asset_uuid: string,\n dataset_uuid?: string,\n dataset_version?: number,\n transcode_mode: TranscodeMode = TranscodeMode.original,\n start_timestamp?: number,\n end_timestamp?: number,\n url_type?: AssetUrlType,\n ): Promise<Blob | DownloadResponse> {\n const versionQuery = dataset_version ? `&dataset_version=${dataset_version}` : ''\n const datasetQuery = dataset_uuid ? `&dataset_uuid=${dataset_uuid}` : ''\n const startTimestampQuery = start_timestamp ? `&start_timestamp=${start_timestamp}` : ''\n const endTimestampQuery = end_timestamp ? `&end_timestamp=${end_timestamp}` : ''\n const urlTypeQuery = url_type ? `&url_type=${url_type}` : ''\n\n return this.request(`/assets/${asset_uuid}/download?transcode_mode=${transcode_mode}${datasetQuery}${versionQuery}${startTimestampQuery}${endTimestampQuery}${urlTypeQuery}`, {\n method: 'GET',\n })\n }\n\n async previewAutoAnnotateAsset(asset_uuid: string, auto_annotate: string, auto_annotate_params?: AutoAnnotateParams): Promise<Annotation> {\n return this.request(`/assets/${asset_uuid}/preview_auto_annotate?auto_annotate=${auto_annotate}`, {\n method: 'POST',\n body: auto_annotate_params ? JSON.stringify(auto_annotate_params) : null,\n headers: auto_annotate_params ? { 'Content-Type': 'application/json' } : {},\n })\n }\n\n async addAssetRoi(asset_uuid: string, roi: Roi, dataset_uuid?: string, dataset_version?: number, predictions?: Prediction[]): Promise<void> {\n const versionQuery = dataset_version ? `&dataset_version=${dataset_version}` : ''\n const datasetQuery = dataset_uuid ? `&dataset_uuid=${dataset_uuid}` : ''\n return this.request(`/assets/${asset_uuid}/rois?${datasetQuery}${versionQuery}`, {\n method: 'POST',\n body: JSON.stringify(roi),\n headers: { 'Content-Type': 'application/json' },\n })\n }\n\n async deleteAssetRoi(asset_uuid: string, name: string, dataset_uuid?: string, dataset_version?: number): Promise<void> {\n const versionQuery = dataset_version ? `&dataset_version=${dataset_version}` : ''\n const datasetQuery = dataset_uuid ? `&dataset_uuid=${dataset_uuid}` : ''\n return this.request(`/assets/${asset_uuid}/rois/${encodeURIComponent(name)}?${datasetQuery}${versionQuery}`, {\n method: 'DELETE',\n })\n }\n\n // Model methods\n async listModels(): Promise<Model[]> {\n return this.request(`/models?account_uuid=${this._accountId}`, {\n method: 'GET',\n })\n }\n\n async findModelsForDataset(dataset_uuid: string): Promise<Model[]> {\n return this.request(`/models?dataset_uuid=${dataset_uuid}`, {\n method: 'GET',\n })\n }\n\n async createModel(dataset_uuid: string, dataset_version: number, data: ModelCreate, start_training: boolean = true): Promise<Model> {\n return this.request(`/models?dataset_uuid=${dataset_uuid}&dataset_version=${dataset_version}&start_training=${start_training}`, {\n method: 'POST',\n body: JSON.stringify(data),\n headers: { 'Content-Type': 'application/json' },\n })\n }\n\n async getModel(model_uuid: string): Promise<Model> {\n return this.request(`/models/${model_uuid}`, {\n method: 'GET',\n })\n }\n\n async getModelTrainingProgress(model_uuid: string): Promise<ModelTrainingProgress> {\n return this.request(`/models/${model_uuid}/progress`, {\n method: 'GET',\n })\n }\n\n async updateModel(model_uuid: string, data: ModelUpdate): Promise<Model> {\n return this.request(`/models/${model_uuid}`, {\n method: 'PATCH',\n body: JSON.stringify(data),\n headers: { 'Content-Type': 'application/json' },\n })\n }\n\n async deleteModel(model_uuid: string): Promise<void> {\n return this.request(`/models/${model_uuid}`, {\n method: 'DELETE',\n })\n }\n\n async trainModel(model_uuid: string): Promise<Model> {\n return this.request(`/models/${model_uuid}/train`, {\n method: 'POST',\n })\n }\n\n async publishModel(model_uuid: string): Promise<Model> {\n return this.request(`/models/${model_uuid}/publish`, {\n method: 'POST',\n })\n }\n\n async exportModel(model_uuid: string, export_by: ExportedBy, params: QcAiHubExportParams[]): Promise<void> {\n if (export_by != ExportedBy.qc_ai_hub) {\n return Promise.reject(`Unexpected export_by ${export_by}, must be 'qc_ai_hub'`)\n }\n await this.request(`/models/${model_uuid}/exports/qc_ai_hub`, {\n method: 'POST',\n body: JSON.stringify(params),\n headers: { 'Content-Type': 'application/json' },\n })\n }\n\n async downloadModelArtifacts(model_uuid: string, model_formats?: ModelFormat[], device_name?: string, artifact_type?: ArtifactType) {\n const artifactTypeQuery = artifact_type ? `artifact_type=${artifact_type}&` : ''\n const deviceNameQuery = device_name ? `device_name=${encodeURIComponent(device_name)}&` : ''\n let modelFormatQuery = ''\n if (model_formats) {\n for (const model_format of model_formats) {\n modelFormatQuery += `model_format=${model_format}&`\n }\n }\n return this.request(`/exports/model_artifacts/?model_uuid=${model_uuid}&${artifactTypeQuery}${deviceNameQuery}${modelFormatQuery}`, {\n method: 'GET',\n })\n }\n\n public addAccountEventHandler(eventHandler: OnChangeEvent) {\n this._account_event_handlers.push(eventHandler)\n }\n\n public removeAccountEventHandler(eventHandler: OnChangeEvent) {\n this._account_event_handlers = this._account_event_handlers.filter(h => h !== eventHandler)\n }\n\n public addDatasetEventHandler(dataset_uuid: string, eventHandler: OnChangeEvent) {\n let event_handlers = this._dataset_uuid_to_event_handlers.get(dataset_uuid)\n this._logger.debug('addDatasetEventHandler %s', event_handlers)\n if (event_handlers === undefined) {\n event_handlers = []\n this._dataset_uuid_to_event_handlers.set(dataset_uuid, event_handlers)\n const ws = this._ws\n if (ws) {\n const msg = JSON.stringify({ subscribe: { dataset_uuid: dataset_uuid } })\n this._requestLogger.debug('ws send: %s', msg)\n ws.send(msg)\n }\n }\n if (event_handlers.find(h => h === eventHandler) !== eventHandler) {\n this._logger.debug('addDatasetEventHandler event_handlers=%s', event_handlers)\n event_handlers.push(eventHandler)\n }\n }\n\n public removeDatasetEventHandler(dataset_uuid: string, eventHandler: OnChangeEvent) {\n let event_handlers = this._dataset_uuid_to_event_handlers.get(dataset_uuid)\n if (event_handlers === undefined) {\n return\n }\n event_handlers = event_handlers.filter(h => h !== eventHandler)\n if (event_handlers.length == 0) {\n const ws = this._ws\n if (ws) {\n const msg = JSON.stringify({ unsubscribe: { dataset_uuid: dataset_uuid } })\n this._requestLogger.debug('ws send: %s', msg)\n ws.send(msg)\n }\n this._dataset_uuid_to_event_handlers.delete(dataset_uuid)\n }\n }\n\n public removeAllDatasetEventHandlers(dataset_uuid: string) {\n let event_handlers = this._dataset_uuid_to_event_handlers.get(dataset_uuid)\n if (event_handlers === undefined) {\n return\n }\n const ws = this._ws\n if (ws) {\n const msg = JSON.stringify({ unsubscribe: { dataset_uuid: dataset_uuid } })\n this._requestLogger.debug('ws send: %s', msg)\n ws.send(msg)\n }\n this._dataset_uuid_to_event_handlers.delete(dataset_uuid)\n }\n\n public async startWorkflow(account_uuid: string, template_name: string, workflow: CreateWorkflow): Promise<Workflow> {\n return this.request(`/workflows?account_uuid=${account_uuid}&template_name=${template_name}`, {\n method: 'POST',\n body: JSON.stringify(workflow),\n headers: { 'Content-Type': 'application/json' },\n })\n }\n\n public async getWorkflow(workflow_id: string, account_uuid: string): Promise<ListWorkFlowItem> {\n return this.request(`/workflows/${workflow_id}?account_uuid=${account_uuid}`, {\n method: 'GET',\n })\n }\n\n public async listWorkflows(account_uuid: string, dataset_uuids?: string[], model_uuids?: string[], phases?: WorkflowPhase[]): Promise<ListWorkFlowItem[]> {\n const datasetQuery = dataset_uuids?.map(uuid => `dataset_uuid=${uuid}`).join('&') || ''\n const modelQuery = model_uuids?.map(uuid => `model_uuid=${uuid}`).join('&') || ''\n const phaseQuery = phases?.map(p => `phase=${p}`).join('&') || ''\n const queryParams = [datasetQuery, modelQuery, phaseQuery].filter(q => q).join('&')\n\n return this.request(`/workflows?account_uuid=${account_uuid}${queryParams ? `&${queryParams}` : ''}`, {\n method: 'GET',\n })\n }\n\n public async inferAsset(\n asset_uuid: string,\n infer_request: InferRequest,\n dataset_uuid?: string,\n dataset_version?: number,\n transcode_mode?: TranscodeMode,\n start_timestamp?: number,\n end_timestamp?: number,\n ): Promise<InferAssetJob> {\n const datasetQuery = dataset_uuid ? `dataset_uuid=${dataset_uuid}&` : ''\n const versionQuery = dataset_version ? `dataset_version=${dataset_version}&` : ''\n const transcodeModeQuery = transcode_mode ? `transcode_mode=${transcode_mode}&` : ''\n const startTimestampQuery = start_timestamp ? `start_timestamp=${start_timestamp}&` : ''\n const endTimestampQuery = end_timestamp ? `end_timestamp=${end_timestamp}&` : ''\n\n const assetUrl = `ai.eyepop://data/assets/${asset_uuid}?${transcodeModeQuery}${datasetQuery}${versionQuery}${startTimestampQuery}${endTimestampQuery}`\n\n if (!this.vlmApiUrl || !this._client || !this._limit) {\n throw new Error('endpoint not connected, use connect()')\n }\n await this._limit.acquire()\n try {\n this.updateState()\n const job = new InferAssetJob(\n assetUrl,\n infer_request,\n async (path: string, options: any) => {\n return await this.request(path, options, false, DataApiType.vlm)\n },\n this._requestLogger,\n )\n return job.start(() => {\n this.jobDone(job)\n })\n } catch (e) {\n // we'll have to reset our queue counter in case the job cannot be started\n this._limit.release()\n throw e\n }\n }\n\n public async evaluateDataset(evaluate_request: EvaluateRequest, worker_release?: string): Promise<EvaluateDatasetJob> {\n if (!this.vlmApiUrl || !this._client || !this._limit) {\n throw new Error('endpoint not connected, use connect()')\n }\n await this._limit.acquire()\n try {\n this.updateState()\n const job = new EvaluateDatasetJob(\n evaluate_request,\n worker_release ?? null,\n async (path: string, options: any) => {\n return await this.request(path, options, false, DataApiType.vlm)\n },\n this._requestLogger,\n )\n return job.start(() => {\n this.jobDone(job)\n })\n } catch (e) {\n // we'll have to reset our queue counter in case the job cannot be started\n this._limit.release()\n throw e\n }\n }\n\n private jobDone(_job: object) {\n this._limit?.release()\n }\n\n private async dispatchChangeEvent(change_event: ChangeEvent): Promise<void> {\n switch (change_event.change_type) {\n // account event types\n case ChangeType.dataset_added:\n case ChangeType.dataset_modified:\n case ChangeType.dataset_removed:\n case ChangeType.dataset_version_modified:\n case ChangeType.workflow_started:\n case ChangeType.workflow_succeeded:\n case ChangeType.workflow_failed:\n case ChangeType.workflow_task_started:\n case ChangeType.workflow_task_succeeded:\n case ChangeType.workflow_task_failed:\n this._logger.debug('dispatchChangeEvent account_event_handlers=%s', this._account_event_handlers)\n for (let handler of this._account_event_handlers) {\n await handler(change_event)\n }\n break\n // dataset event types\n case ChangeType.asset_added:\n case ChangeType.asset_removed:\n case ChangeType.asset_status_modified:\n case ChangeType.asset_annotation_modified:\n case ChangeType.model_added:\n case ChangeType.model_modified:\n case ChangeType.model_removed:\n case ChangeType.model_status_modified:\n case ChangeType.model_progress:\n const event_handlers = this._dataset_uuid_to_event_handlers.get(change_event.dataset_uuid)\n this._logger.debug('dispatchChangeEvent event_handlers=%s', event_handlers)\n if (event_handlers !== undefined) {\n for (let handler of event_handlers) {\n await handler(change_event)\n }\n }\n break\n }\n }\n\n // Vlm Ability Management\n\n async listVlmAbilityGroups(): Promise<VlmAbilityGroup[]> {\n return this.request(`/vlm_ability_groups?account_uuid=${this._accountId}`, {\n method: 'GET',\n })\n }\n\n async createVlmAbilityGroup(create: VlmAbilityGroupCreate): Promise<VlmAbilityGroup> {\n return this.request(`/vlm_ability_groups?account_uuid=${this._accountId}`, {\n method: 'POST',\n body: JSON.stringify(create, omit_nulls),\n headers: { 'Content-Type': 'application/json' },\n })\n }\n\n async getVlmAbilityGroup(vlm_ability_group_uuid: string): Promise<VlmAbilityGroup> {\n return this.request(`/vlm_ability_groups/${vlm_ability_group_uuid}`, {\n method: 'GET',\n })\n }\n\n async deleteVlmAbilityGroup(vlm_ability_group_uuid: string): Promise<void> {\n return this.request(`/vlm_ability_groups/${vlm_ability_group_uuid}`, {\n method: 'DELETE',\n })\n }\n\n async updateVlmAbilityGroup(vlm_ability_group_uuid: string, update: VlmAbilityGroupUpdate): Promise<VlmAbilityGroup> {\n return this.request(`/vlm_ability_groups/${vlm_ability_group_uuid}`, {\n method: 'PATCH',\n body: JSON.stringify(update),\n headers: { 'Content-Type': 'application/json' },\n })\n }\n\n async listVlmAbilities(): Promise<VlmAbility[]> {\n return this.request(`/vlm_abilities?account_uuid=${this._accountId}`, {\n method: 'GET',\n })\n }\n\n async createVlmAbility(create: VlmAbilityCreate, vlm_ability_group_uuid?: string): Promise<VlmAbility> {\n const groupQuery = vlm_ability_group_uuid ? `&vlm_ability_group_uuid=${vlm_ability_group_uuid}` : ''\n return this.request(`/vlm_abilities?account_uuid=${this._accountId}${groupQuery}`, {\n method: 'POST',\n body: JSON.stringify(create, omit_nulls),\n headers: { 'Content-Type': 'application/json' },\n })\n }\n\n async getVlmAbility(vlm_ability_uuid: string): Promise<VlmAbility> {\n return this.request(`/vlm_abilities/${vlm_ability_uuid}`, {\n method: 'GET',\n })\n }\n\n async deleteVlmAbility(vlm_ability_uuid: string): Promise<void> {\n return this.request(`/vlm_abilities/${vlm_ability_uuid}`, {\n method: 'DELETE',\n })\n }\n\n async updateVlmAbility(vlm_ability_uuid: string, update: VlmAbilityUpdate): Promise<VlmAbility> {\n return this.request(`/vlm_abilities/${vlm_ability_uuid}`, {\n method: 'PATCH',\n body: JSON.stringify(update),\n headers: { 'Content-Type': 'application/json' },\n })\n }\n\n async refineVlmAbility(vlm_ability_uuid: string, auto_prompt: AutoPromptConfig | undefined, auto_task?: AutoTask | undefined): Promise<VlmAbility> {\n if (auto_prompt !== undefined) {\n return this.request(`/vlm_abilities/${vlm_ability_uuid}/refine`, {\n method: 'POST',\n body: JSON.stringify(auto_prompt, omit_nulls),\n headers: { 'Content-Type': 'application/json' },\n })\n } else if (auto_task !== undefined) {\n return this.request(`/vlm_abilities/${vlm_ability_uuid}/refine_task`, {\n method: 'POST',\n body: JSON.stringify(auto_task, omit_nulls),\n headers: { 'Content-Type': 'application/json' },\n })\n } else {\n return Promise.reject('refine vlm ability requires auto_prompt or auto_config parameter')\n }\n }\n\n async cloneVlmAbility(vlm_ability_uuid: string, account_uuid?: string, name?: string, default_alias_name?: string): Promise<VlmAbility> {\n const params = new URLSearchParams()\n if (account_uuid) {\n params.set('account_uuid', account_uuid)\n } else if (this._accountId) {\n params.set('account_uuid', this._accountId)\n }\n if (name) {\n params.set('name', name)\n }\n if (default_alias_name) {\n params.set('default_alias_name', default_alias_name)\n }\n return this.request(`/vlm_abilities/${vlm_ability_uuid}/clone?${params.toString()}`, {\n method: 'POST',\n })\n }\n\n async publishVlmAbility(vlm_ability_uuid: string, alias_name?: string, tag_name?: string): Promise<VlmAbility> {\n const alias_name_query = alias_name ? `alias_name=${encodeURIComponent(alias_name)}&` : ''\n const tag_name_query = tag_name ? `tag_name=${encodeURIComponent(tag_name)}&` : ''\n return this.request(`/vlm_abilities/${vlm_ability_uuid}/publish?${alias_name_query}${tag_name_query}`, {\n method: 'POST',\n })\n }\n\n async addVlmAbilityAlias(vlm_ability_uuid: string, alias_name: string, tag_name?: string): Promise<VlmAbility> {\n return this.request(`/vlm_abilities/${vlm_ability_uuid}/alias/${encodeURIComponent(alias_name)}/tag/${tag_name ? encodeURIComponent(tag_name) : ''}`, {\n method: 'POST',\n })\n }\n\n async removeVlmAbilityAlias(vlm_ability_uuid: string, alias_name: string, tag_name: string): Promise<VlmAbility> {\n return this.request(`/vlm_abilities/${vlm_ability_uuid}/alias/${encodeURIComponent(alias_name)}/tag/${encodeURIComponent(tag_name)}`, {\n method: 'DELETE',\n })\n }\n\n async listVlmAbilityEvaluations(vlm_ability_uuid: string): Promise<DatasetAutoAnnotate[]> {\n return this.request(`/vlm_abilities/${vlm_ability_uuid}/evaluations`, {\n method: 'GET',\n })\n }\n\n async getVlmAbilityEvaluation(vlm_ability_uuid: string, source: string): Promise<DatasetAutoAnnotate> {\n return this.request(`/vlm_abilities/${vlm_ability_uuid}/evaluations/${source}`, {\n method: 'GET',\n })\n }\n\n async startVlmAbilityEvaluation(vlm_ability_uuid: string, evaluate_request: EvaluateRequest): Promise<DatasetAutoAnnotate> {\n return this.request(`/vlm_abilities/${vlm_ability_uuid}/evaluations`, {\n method: 'POST',\n body: JSON.stringify(evaluate_request),\n headers: { 'Content-Type': 'application/json' },\n })\n }\n\n async resolveAliases(aliases: string[]): Promise<AliasResolution[]> {\n const params = new URLSearchParams()\n aliases.forEach(alias => {\n params.append('alias', alias)\n })\n return this.request(`/exports/aliases?${params.toString()}`, {\n method: 'GET',\n })\n }\n}\n","import type { OpenAPIV3_1 } from 'openapi-types'\n\nimport { Point2d, Prediction, Session } from '../types'\n\nexport enum DataApiType {\n dataset = 'dataset',\n vlm = 'vlm'\n}\n\nexport type AutoAnnotate = string\n\nexport interface DataSession extends Session {\n readonly accountId: string\n readonly datasetApiUrl: string | undefined\n readonly vlmApiUrl: string | undefined\n}\n\nexport function getBaseUrl(session: DataSession, dataApiType: DataApiType): string {\n switch (dataApiType) {\n case DataApiType.dataset:\n return session.datasetApiUrl ?? ''\n case DataApiType.vlm:\n return session.vlmApiUrl ?? ''\n default:\n throw new Error(`unsupported type ${dataApiType}`)\n }\n}\n\nexport interface DatasetVersionAssetStats {\n total?: number\n accepted?: number\n rejected?: number\n annotated?: number\n auto_annotated?: number\n auto_annotated_approved?: number\n ground_truth_annotated?: number\n}\n\nexport interface DatasetVersion {\n version: number\n modifiable: boolean\n created_at: Date\n updated_at: Date\n assets_modified_at: Date\n last_analysed_at?: Date\n hero_asset_uuid?: string\n asset_stats?: DatasetVersionAssetStats\n default_source_model_uuid?: string\n}\n\nexport interface DatasetParent {\n dataset_uuid: string\n dataset_version: number\n}\n\nexport interface Dataset {\n uuid: string\n name: string\n description?: string\n auto_annotates: string[]\n auto_annotate_params?: AutoAnnotateParams\n tags: string[]\n account_uuid: string\n created_at: Date\n updated_at: Date\n modifiable_version?: number\n versions: DatasetVersion[]\n parent?: DatasetParent\n searchable: boolean\n}\n\nexport interface DatasetCreate {\n name: string\n description?: string\n tags?: string[]\n auto_annotates?: string[]\n auto_annotate_params?: AutoAnnotateParams\n searchable?: boolean\n}\n\nexport interface DatasetUpdate {\n name?: string\n description?: string\n tags?: string[]\n auto_annotates?: string[]\n auto_annotate_params?: AutoAnnotateParams\n searchable?: boolean\n}\n\nexport interface DatasetHeroAssetUpdate {\n uuid: string\n}\n\nexport enum AutoAnnotateStatus {\n error = \"error\",\n requested = \"requested\",\n in_progress = \"in_progress\",\n completed = \"completed\"\n}\n\nexport interface DatasetAutoAnnotateCreate {\n auto_annotate: string\n auto_annotate_params?: Record<string, any>\n source_model_uuid?: string\n status?: AutoAnnotateStatus\n status_message?: string\n source?: string\n metrics?: Record<string, any>\n}\n\n\nexport interface DatasetAutoAnnotateUpdate {\n status?: AutoAnnotateStatus\n status_message?: string\n metrics?: Record<string, any>\n}\n\nexport interface DatasetAutoAnnotate {\n created_at?: Date\n updated_at?: Date\n dataset_uuid: string\n dataset_version: number\n source_ability_uuid?: string\n source_model_uuid?: string\n auto_annotate?: string\n auto_annotate_params?: Record<string, any>\n status?: AutoAnnotateStatus\n status_message?: string\n source?: string\n metrics?: Record<string, any>\n}\n\nexport interface AssetImport {\n url: string\n ground_truth?: Prediction\n}\n\nexport enum AssetStatus {\n rejected = 'rejected',\n upload_in_progress = 'upload_in_progress',\n upload_failed = 'upload_failed',\n transform_failed = 'transform_failed',\n transform_in_progress = 'transform_in_progress',\n accepted = 'accepted',\n}\n\nexport enum AnnotationType {\n ground_truth = 'ground_truth',\n prediction = 'prediction',\n auto = 'auto',\n}\n\nexport enum UserReview {\n approved = 'approved',\n rejected = 'rejected',\n unknown = 'unknown',\n}\n\nexport enum AssetInclusionMode {\n all_assets = 'all_assets',\n annotated_only = 'annotated_only',\n manual_annotated_only = 'manual_annotated_only',\n auto_annotated_only = 'auto_annotated_only',\n}\n\nexport enum AnnotationInclusionMode {\n all = 'all',\n user_reviewed = 'user_reviewed',\n user_approved = 'user_approved',\n ground_truth = 'ground_truth',\n}\n\nexport interface AutoAnnotatePrompt {\n prompt: string\n label: string\n}\n\nexport enum AutoAnnotateTask {\n object_detection = 'object_detection',\n image_classification = 'image_classification',\n}\n\nexport interface AutoAnnotateParams {\n /**\n * @deprecated use prompts instead\n */\n candidate_labels?: string[]\n prompts?: AutoAnnotatePrompt[]\n task?: AutoAnnotateTask\n confidence_threshold?: number\n}\n\nexport interface Annotation {\n type: AnnotationType\n user_review: UserReview\n approved_threshold?: number\n auto_annotate?: string\n source?: string\n source_ability_uuid?: string\n uncertainty_score?: number\n predictions: Prediction[]\n}\n\nexport enum TranscodeMode {\n original = 'original',\n video_original_size = 'video_original_size',\n image_original_size = 'image_original_size',\n image_fit_1024 = 'image_fit_1024',\n image_fit_640 = 'image_fit_640',\n image_fit_224 = 'image_fit_224',\n image_cover_1024 = 'image_cover_1024',\n image_cover_640 = 'image_cover_640',\n image_cover_224 = 'image_cover_224',\n}\n\nexport enum AreaType {\n RECTANGLE = \"rectangle\",\n CONTOUR = \"contour\"\n}\n\nexport interface BaseArea {\n type: AreaType\n}\n\nexport interface RectangleArea extends BaseArea {\n x: number\n y: number\n width: number\n height: number\n}\n\nexport interface ContourArea extends BaseArea {\n points: Point2d[]\n}\n\nexport type Area = RectangleArea | ContourArea\n\nexport interface TimeSpan {\n start_timestamp?: number\n end_timestamp?: number\n}\n\nexport interface Roi {\n name: string\n area?: Area\n time_span?: TimeSpan\n}\nexport interface Asset {\n uuid: string\n external_id?: string\n mime_type: string\n file_size_bytes: number\n original_image_width?: number\n original_image_height?: number\n original_duration?: number\n original_frames?: number\n status: AssetStatus\n created_at: Date\n updated_at: Date\n partition?: string\n review_priority?: number\n model_relevance?: number\n annotations: Annotation[]\n rois: Roi[]\n}\n\nexport enum ModelType {\n epdet_b1 = 'epdet_b1',\n imported = 'imported',\n vlm_ability = 'vlm_ability'\n}\n\nexport enum ModelTask {\n object_detection = 'object_detection',\n image_classification = 'image_classification',\n keypoint_detection = 'keypoint_detection'\n}\n\nexport enum ModelStatus {\n error = 'error',\n draft = 'draft',\n requested = 'requested',\n in_progress = 'in_progress',\n available = 'available',\n published = 'published',\n}\n\nexport interface ModelMetrics {\n cpr?: number[][3]\n}\n\nexport enum ModelExportStatus {\n in_progress = 'in_progress',\n finished = 'finished',\n error = 'error',\n}\n\nexport enum ExportedBy {\n eyepop = 'eyepop',\n qc_ai_hub = 'qc_ai_hub',\n}\n\nexport enum ArtifactType {\n eyepop_bundle = 'eyepop_bundle',\n weights_file = 'weights_file',\n}\n\nexport interface QcAiHubExportParams {\n device_name: string\n}\n\nexport interface ModelExport {\n format: ModelFormat\n exported_by: ExportedBy\n export_params?: QcAiHubExportParams\n status: ModelExportStatus\n status_message?: string\n}\n\nexport interface Model {\n uuid: string\n name: string\n description?: string\n external_id?: string\n pretrained_model_uuid?: string\n extra_params?: Record<string, any>\n task?: ModelTask\n classes?: string[]\n type: ModelType\n status: ModelStatus\n status_message?: string\n metrics?: ModelMetrics\n account_uuid: string\n created_at: Date\n updated_at: Date\n dataset_uuid: string\n dataset_version: number\n exports?: ModelExport[]\n}\n\nexport interface ModelCreate {\n name: string\n description: string\n external_id?: string\n pretrained_model_uuid?: string\n extra_params?: Record<string, any>\n task?: ModelTask\n classes?: string[]\n}\n\nexport interface ModelUpdate {\n name: string\n description: string\n external_id?: string\n task?: ModelTask\n classes?: string[]\n}\n\nexport enum ModelTrainingStage {\n waiting = 'waiting',\n scheduling = 'scheduling',\n preparing = 'preparing',\n training = 'training',\n exporting = 'exporting',\n}\n\nexport interface ModelSample {\n asset_uuid: string\n prediction: Prediction\n}\n\nexport interface ModelTrainingProgress {\n stage: ModelTrainingStage\n queue_length?: number\n started_at: Date\n finished_at?: Date\n metrics?: ModelMetrics\n samples?: ModelSample[]\n remaining_seconds_min?: number\n remaining_seconds_max?: number\n}\n\nexport enum ChangeType {\n dataset_added = 'dataset_added',\n dataset_removed = 'dataset_removed',\n dataset_modified = 'dataset_modified',\n dataset_version_modified = 'dataset_version_modified',\n asset_added = 'asset_added',\n asset_removed = 'asset_removed',\n asset_status_modified = 'asset_status_modified',\n asset_annotation_modified = 'asset_annotation_modified',\n model_added = 'model_added',\n model_removed = 'model_removed',\n model_modified = 'model_modified',\n model_status_modified = 'model_status_modified',\n model_progress = 'model_progress',\n events_lost = 'events_lost',\n workflow_started = 'workflow_started',\n workflow_succeeded = 'workflow_succeeded',\n workflow_failed = 'workflow_failed',\n workflow_task_started = 'workflow_task_started',\n workflow_task_succeeded = 'workflow_task_succeeded',\n workflow_task_failed = 'workflow_task_failed',\n}\n\n\nexport interface ChangeEvent {\n change_type: ChangeType\n account_uuid: string\n dataset_uuid: string\n dataset_version?: number\n asset_uuid?: string\n mdl_uuid?: string\n message?: string\n workflow_task_name?: string\n}\n\nexport type OnChangeEvent = (event: ChangeEvent) => Promise<void>\n\nexport interface CreateWorkflowConfig {\n dataset_uuid?: string\n dataset_version?: number\n model_uuid?: string\n config?: Record<string, any>\n}\n\nexport interface CreateWorkflow {\n parameters?: CreateWorkflowConfig\n}\n\nexport interface Workflow {\n workflow_id: string\n}\n\nexport interface ListWorkflowItemMetadataLabels {\n account_uuid: string\n dataset_uuid?: string\n model_uuid?: string\n phase: WorkflowPhase\n}\n\nexport interface ListWorkFlowItemMetadata {\n workflow_id: string\n created_at: Date\n labels: ListWorkflowItemMetadataLabels\n}\n\nexport interface ListWorkFlowItem {\n metadata: ListWorkFlowItemMetadata\n}\n\nexport enum WorkflowPhase {\n unknown = 'Unknown',\n pending = 'Pending',\n running = 'Running',\n succeeded = 'Succeeded',\n failed = 'Failed',\n error = 'Error',\n}\n\nexport enum ModelFormat {\n TensorFlowLite = 'TensorFlowLite',\n TensorFlowGraphDef = 'TensorFlowGraphDef',\n ONNX = 'ONNX',\n TorchScript = 'TorchScript',\n TorchScriptCpu = 'TorchScriptCpu',\n TorchScriptCuda = 'TorchScriptCuda',\n PyTorch = 'PyTorch',\n ModelLess = 'ModelLess',\n}\n\nexport enum ModelPrecisionType {\n float32 = 'float32',\n float16 = 'float16',\n int32 = 'int32',\n int8 = 'int8',\n uint8 = 'uint8',\n}\n\nexport enum AssetUrlType {\n gcs = 'gcs',\n s3 = 's3',\n https_signed = 'https_signed'\n}\n\nexport interface DownloadResponse {\n url: string\n url_type: AssetUrlType\n}\n\n/** Experimental VLM API */\n\nexport interface InferRuntimeConfig {\n max_new_tokens?: number\n image_size?: number\n fps?: number\n max_frames?: number\n min_frames?: number\n max_aspect_ratio?: number\n context_length?: number\n roi?: Area\n}\n\n/**\n * Schema to constrain a VLM's output. Where one is set, the ability is\n * guaranteed to return a structured object matching this Open API schema, and\n * the parsed object arrives on each prediction's `details` attribute.\n */\nexport type ResponseSchema = OpenAPIV3_1.SchemaObject\n\nexport interface TransformInto {\n classes?: string[]\n}\n\nexport interface InferRequest {\n worker_release?: string\n text_prompt?: string\n config: InferRuntimeConfig\n refresh?: boolean\n transform_into?: TransformInto\n response_schema?: ResponseSchema\n}\n\nexport interface EvaluateFilter {\n partitions?: string[]\n ground_truth_classes?: string[]\n}\n\nexport interface EvaluateConfig {\n dataset_uuid: string\n filter?: EvaluateFilter\n video_chunk_length_ns?: number\n video_chunk_overlap?: number\n}\n\nexport interface EvaluateRequest extends EvaluateConfig {\n ability_uuid?: string\n infer?: InferRequest\n}\n\nexport enum EvaluationStatus {\n success = \"success\",\n failed = \"failed\"\n}\n\nexport interface EvaluateRunInfo {\n num_images: number\n num_ground_truth_images: number\n num_videos: number\n num_ground_truth_videos: number\n total_tokens: number\n visual_tokens: number\n text_tokens: number\n output_tokens: number\n}\n\nexport interface EvaluateResponse {\n dataset_uuid: string\n dataset_version: number\n status: EvaluationStatus\n status_message?: string\n source: string\n metrics?: Record<string, any>\n run_info: EvaluateRunInfo\n}\n\nexport interface InferRunInfo {\n fps?: number\n image_size?: number\n total_tokens?: number\n visual_tokens?: number\n text_tokens?: number\n output_tokens?: number\n aspect_ratio?: number\n}\n\nexport interface AutoPromptConfig {\n num_samples: number\n task_description?: string\n infer: InferRequest\n response_schema?: ResponseSchema\n evaluate: EvaluateConfig\n}\n\nexport enum TaskType {\n classification = \"classification\"\n}\n\nexport enum TaskMode {\n image = \"image\",\n video = \"video\"\n}\n\nexport interface BaseTask {\n type: TaskType\n task_description?: string\n task_mode?: TaskMode\n}\n\nexport interface ClassificationTask extends BaseTask {\n classes: string[]\n dataset_uuid: string\n num_samples: number\n}\n\nexport type AutoTask = ClassificationTask\n\nexport enum VlmAbilityStatus {\n in_progress = \"in_progress\",\n draft = \"draft\",\n published = \"published\",\n}\n\nexport interface AbilityAliasEntry {\n alias: string\n tag: string\n}\n\nexport interface VlmAbilityCreate {\n name: string\n description: string\n worker_release: string\n text_prompt: string\n transform_into: TransformInto\n response_schema?: ResponseSchema\n config: InferRuntimeConfig\n is_public: boolean\n video_chunk_length_ns?: number\n video_chunk_overlap?: number\n}\n\nexport interface VlmAbilityUpdate {\n name?: string\n description?: string\n worker_release?: string\n text_prompt?: string\n transform_into?: TransformInto\n response_schema?: ResponseSchema\n config?: InferRuntimeConfig\n is_public?: boolean\n video_chunk_length_ns?: number\n video_chunk_overlap?: number\n}\n\nexport interface VlmAbility {\n uuid: string\n created_at?: Date\n updated_at?: Date\n account_uuid: string\n status: VlmAbilityStatus\n is_public: boolean\n name: string\n description: string\n vlm_ability_group_uuid?: string\n worker_release?: string\n text_prompt?: string\n transform_into?: TransformInto\n response_schema?: ResponseSchema\n config?: InferRuntimeConfig\n video_chunk_length_ns?: number\n video_chunk_overlap?: number\n alias_entries?: AbilityAliasEntry[]\n auto_prompt?: AutoPromptConfig\n auto_task?: AutoTask\n}\n\nexport interface VlmAbilityGroupCreate {\n name: string\n description: string\n auto_prompt?: AutoPromptConfig\n auto_task?: AutoTask\n default_alias_name?: string\n default_dataset_uuid?: string\n}\n\nexport interface VlmAbilityGroupUpdate {\n name: string\n description: string\n default_alias_name?: string\n default_dataset_uuid?: string\n}\n\nexport interface VlmAbilityGroup {\n uuid: string\n created_at?: Date\n updated_at?: Date\n account_uuid: string\n name: string\n description: string\n default_alias_name?: string\n default_dataset_uuid?: string\n}\n\nexport interface AliasResolution {\n alias: string\n model_uuid: string | null\n}","import { ResultStream } from '../worker/worker_types'\nimport { Logger } from 'pino'\nimport { Prediction } from '../types'\nimport { EvaluateRequest, EvaluateResponse, InferRequest, InferRunInfo } from './data_types'\n\ntype VlmFetch = (path: string, options: RequestInit) => Promise<any>\n\nexport class InferAssetJob implements ResultStream {\n protected _vlmFetch: VlmFetch\n protected _assetUrl: string\n protected _inferRequest: InferRequest\n\n protected _response: Promise<Prediction[]> | null = null\n protected _runInfo: InferRunInfo | null = null\n protected _controller: AbortController = new AbortController()\n\n protected _requestLogger: Logger;\n\n [Symbol.asyncIterator](): AsyncIterator<Prediction> {\n if (!this._response) {\n throw Error('logical bug')\n }\n let consumed = false\n const response_promise = this._response\n const controller = this._controller\n async function* iterator(): AsyncIterator<Prediction> {\n if (consumed) {\n throw new Error('Cannot iterate over a consumed stream, use `.tee()` to split the stream.')\n }\n consumed = true\n let done = false\n try {\n const predictions = await response_promise\n if (predictions) {\n for (let prediction of predictions) {\n yield prediction\n }\n }\n done = true\n } catch (e) {\n // If the user calls `stream.controller.abort()`, we should exit without throwing.\n if (e instanceof Error && e.name === 'AbortError') return\n throw e\n } finally {\n // If the user breaks, abort the ongoing request.\n if (!done) controller.abort()\n }\n }\n\n return iterator()\n }\n\n public constructor(assetUrl: string, inferRequest: InferRequest, vlmFetch: VlmFetch, requestLogger: Logger) {\n this._vlmFetch = vlmFetch\n\n this._assetUrl = assetUrl\n this._inferRequest = inferRequest\n\n this._requestLogger = requestLogger\n }\n\n public start(done: () => void): InferAssetJob {\n this._response = new Promise<Prediction[]>(async (resolve, reject) => {\n try {\n let requestId = null\n while (true) {\n let response = null\n if (requestId) {\n response = await this._vlmFetch(`/api/v1/requests/${requestId}?timeout=20`, {\n method: 'POST',\n })\n } else {\n const infer_request = new Map(Object.entries(this._inferRequest))\n infer_request.set('url', this._assetUrl)\n const body = new FormData();\n body.append('infer_request', JSON.stringify(Object.fromEntries(infer_request)))\n response = await this._vlmFetch(`/api/v1/infer?timeout=20`, {\n method: 'POST',\n body: body,\n })\n }\n const predictions = response['predictions']\n const runInfo = response['run_info']\n if (predictions) {\n this._runInfo = runInfo\n resolve(predictions)\n break\n } else {\n requestId = response['request_id']\n if (!requestId) {\n reject(`missing request_id in response: ${JSON.stringify(response)}`)\n break\n }\n }\n }\n } catch (reason) {\n reject(reason)\n } finally {\n done()\n }\n })\n return this\n }\n\n public cancel(): void {\n this._controller.abort('cancelled')\n }\n}\n\n\nexport class EvaluateDatasetJob {\n protected _vlmFetch: VlmFetch\n protected _evaluateRequest: EvaluateRequest\n protected _workerRelease: string | null\n\n protected _response: Promise<EvaluateResponse> | null = null\n protected _controller: AbortController = new AbortController()\n\n protected _requestLogger: Logger;\n\n public async response(): Promise<EvaluateResponse> {\n if (!this._response) {\n throw Error('logical bug')\n }\n return await this._response\n }\n\n public constructor(evaluateRequest: EvaluateRequest, workerRelease: string | null, vlmFetch: VlmFetch, requestLogger: Logger) {\n this._vlmFetch = vlmFetch\n\n this._evaluateRequest = evaluateRequest\n this._workerRelease = workerRelease\n\n this._requestLogger = requestLogger\n }\n\n public start(done: () => void): EvaluateDatasetJob {\n this._response = new Promise<EvaluateResponse>(async (resolve, reject) => {\n try {\n let requestId = null\n while (true) {\n let response = null\n if (requestId) {\n response = await this._vlmFetch(`/api/v1/evaluations/${requestId}?timeout=20`, {\n method: 'GET',\n })\n } else {\n const workerReleaseQuery = this._workerRelease? `&worker_release=${this._workerRelease}`: ''\n response = await this._vlmFetch(`/api/v1/evaluations?timeout=20${workerReleaseQuery}`, {\n method: 'POST',\n body: JSON.stringify(this._evaluateRequest),\n headers: { 'Content-Type': 'application/json' }\n })\n }\n const runInfo = response['run_info']\n if (runInfo) {\n resolve(response)\n break\n } else {\n requestId = response['request_id']\n if (!requestId) {\n reject(`missing request_id in response: ${JSON.stringify(response)}`)\n break\n }\n }\n }\n } catch (reason) {\n reject(reason)\n } finally {\n done()\n }\n })\n return this\n }\n\n public cancel(): void {\n this._controller.abort('cancelled')\n }\n}\n","import { Depth } from './types'\n\nconst isLittleEndianPlatform = new Uint8Array(new Uint16Array([1]).buffer)[0] === 1\n\nfunction base64ToBytes(base64: string): Uint8Array {\n if (typeof Buffer !== 'undefined') {\n const buffer = Buffer.from(base64, 'base64')\n return new Uint8Array(buffer.buffer, buffer.byteOffset, buffer.byteLength)\n }\n const binary = atob(base64)\n const bytes = new Uint8Array(binary.length)\n for (let i = 0; i < binary.length; i++) {\n bytes[i] = binary.charCodeAt(i)\n }\n return bytes\n}\n\n/**\n * A decoded frame-level depth map.\n *\n * Values are canonical metric depth in row-major order; sky pixels are +Infinity.\n * See decodeDepthMap().\n */\nexport class DepthMap {\n readonly width: number\n readonly height: number\n readonly values: Float32Array\n\n private _finiteMin: number | undefined\n private _finiteMax: number | undefined\n\n constructor(width: number, height: number, values: Float32Array) {\n this.width = width\n this.height = height\n this.values = values\n }\n\n /**\n * The depth value at map pixel (x, y), or - when sourceWidth/sourceHeight\n * are given - at source frame coordinate (x, y) mapped proportionally.\n * Returns +Infinity for sky pixels.\n */\n public at(x: number, y: number, sourceWidth?: number, sourceHeight?: number): number {\n let mapX = x\n let mapY = y\n if (sourceWidth && sourceHeight) {\n mapX = (x * this.width) / sourceWidth\n mapY = (y * this.height) / sourceHeight\n }\n const clampedX = Math.min(Math.max(Math.floor(mapX), 0), this.width - 1)\n const clampedY = Math.min(Math.max(Math.floor(mapY), 0), this.height - 1)\n return this.values[clampedY * this.width + clampedX]\n }\n\n public isSky(x: number, y: number, sourceWidth?: number, sourceHeight?: number): boolean {\n return this.at(x, y, sourceWidth, sourceHeight) === Number.POSITIVE_INFINITY\n }\n\n /** The smallest finite depth value, or undefined if the whole map is sky. */\n public get finiteMin(): number | undefined {\n this.computeFiniteRange()\n return this._finiteMin\n }\n\n /** The largest finite depth value, or undefined if the whole map is sky. */\n public get finiteMax(): number | undefined {\n this.computeFiniteRange()\n return this._finiteMax\n }\n\n private computeFiniteRange(): void {\n if (this._finiteMin !== undefined || this._finiteMax !== undefined) {\n return\n }\n let min = Number.POSITIVE_INFINITY\n let max = Number.NEGATIVE_INFINITY\n for (let i = 0; i < this.values.length; i++) {\n const value = this.values[i]\n if (Number.isFinite(value)) {\n if (value < min) min = value\n if (value > max) max = value\n }\n }\n if (max >= min) {\n this._finiteMin = min\n this._finiteMax = max\n }\n }\n}\n\n/**\n * Decode a Prediction's `depth` member into a DepthMap.\n *\n * The wire format is base64 of width*height little-endian float32 values in\n * row-major order; sky pixels are +Infinity.\n */\nexport function decodeDepthMap(depth: Depth): DepthMap {\n if (!Number.isSafeInteger(depth.width) || depth.width <= 0 || !Number.isSafeInteger(depth.height) || depth.height <= 0 || !Number.isSafeInteger(depth.width * depth.height * 4)) {\n throw new Error(`invalid depth dimensions: ${depth.width}x${depth.height}`)\n }\n const bytes = base64ToBytes(depth.values)\n const count = depth.width * depth.height\n if (bytes.byteLength !== count * 4) {\n throw new Error(`depth values hold ${bytes.byteLength} bytes, expected ${count * 4} for ${depth.width}x${depth.height} float32`)\n }\n let values: Float32Array\n if (isLittleEndianPlatform) {\n // copy to a fresh, aligned buffer (e.g. Buffer pool slices can be unaligned)\n const aligned = new Uint8Array(bytes)\n values = new Float32Array(aligned.buffer, 0, count)\n } else {\n const view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength)\n values = new Float32Array(count)\n for (let i = 0; i < count; i++) {\n values[i] = view.getFloat32(i * 4, true)\n }\n }\n return new DepthMap(depth.width, depth.height, values)\n}\n","/**\n * Decoding and sampling of point clouds.\n *\n * When a pipeline is asked for world coordinates, an object carrying a\n * segmentation mask also carries `mask.world`: three little-endian float32\n * values per mask pixel, row-major, exactly width*height triples. The point for\n * bitmap pixel (i, j) sits at triple index j * width + i, so the cloud indexes\n * exactly like the bitmap with no separate lookup.\n *\n * A Pop asking for `depthMap.toWorld` also gets `depth.world`, the same\n * encoding on the depth map's own grid: one point per map pixel rather than per\n * mask pixel, covering the whole scene.\n *\n * Points the worker could not place are NaN - sky pixels, samples outside the\n * depth map, and pixels the mask does not cover. NaN is the omission sentinel\n * here, which is why this does not share decodeDepthMap()'s validation: that\n * one rejects a payload of the wrong length, but nothing here may reject a NaN.\n */\n\nimport { Depth, Mask, Prediction, PredictedObject } from './types'\n\n/** One xyz triple per pixel, so a cloud is three float32 per pixel. */\nconst VALUES_PER_POINT = 3\n\nconst isLittleEndianPlatform = new Uint8Array(new Uint16Array([1]).buffer)[0] === 1\n\nfunction base64ToBytes(base64: string): Uint8Array {\n if (typeof Buffer !== 'undefined') {\n const buffer = Buffer.from(base64, 'base64')\n return new Uint8Array(buffer.buffer, buffer.byteOffset, buffer.byteLength)\n }\n const binary = atob(base64)\n const bytes = new Uint8Array(binary.length)\n for (let i = 0; i < binary.length; i++) {\n bytes[i] = binary.charCodeAt(i)\n }\n return bytes\n}\n\n/** Where a cloud's grid sits in the source frame, so at() can be reached from source pixels. */\nexport interface CloudBox {\n x: number\n y: number\n width: number\n height: number\n}\n\n/**\n * A decoded point cloud, per object or per scene.\n *\n * Create with decodePointCloud(), cloudOfObject(), cloudOfDepth() or\n * cloudsOfPrediction(). Coordinates are meters, in the frame the source's\n * camera extrinsics define (Z up, ground at Z = 0) or the OpenCV camera frame\n * when it supplied none.\n *\n * The grid is whatever the cloud was made from: an object's mask, which spans\n * its bounding box rather than the frame, or the depth map itself, which spans\n * the whole frame. Either way (i, j) is a source coordinate only via that box,\n * which cloudOfObject() and cloudOfDepth() record - so atSource() needs one of\n * those two.\n */\nexport class PointCloud {\n readonly width: number\n readonly height: number\n /** xyz per pixel, row-major; an omitted point is NaN in all three. */\n readonly points: Float32Array\n private readonly box: CloudBox | undefined\n\n constructor(width: number, height: number, points: Float32Array, box?: CloudBox) {\n this.width = width\n this.height = height\n this.points = points\n this.box = box\n }\n\n /**\n * The world point for pixel (i, j), or undefined where the worker placed none.\n *\n * (i, j) indexes the cloud's own grid - the mask bitmap, or the depth map\n * for a scene cloud: i is the column, j is the row.\n */\n public at(i: number, j: number): Vector3 | undefined {\n if (!(i >= 0 && i < this.width && j >= 0 && j < this.height)) {\n throw new Error(`(${i}, ${j}) is outside a ${this.width}x${this.height} cloud`)\n }\n const offset = (j * this.width + i) * VALUES_PER_POINT\n const x = this.points[offset]\n const y = this.points[offset + 1]\n const z = this.points[offset + 2]\n if (Number.isNaN(x) || Number.isNaN(y) || Number.isNaN(z)) {\n return undefined\n }\n return { x, y, z }\n }\n\n /**\n * The world point for a source frame coordinate inside the cloud's box.\n *\n * Needs a cloud built with cloudOfObject(), or with cloudOfDepth() and the\n * frame size: the grid covers a box, and nothing else knows where it sits.\n */\n public atSource(x: number, y: number): Vector3 | undefined {\n if (this.box === undefined) {\n throw new Error('atSource needs a box; build with cloudOfObject or cloudOfDepth')\n }\n if (!(this.box.width > 0) || !(this.box.height > 0)) {\n throw new Error(`invalid bounding box extent: ${this.box.width}x${this.box.height}`)\n }\n // the inverse of the worker's own grid-to-source transform, which\n // samples pixel centres: source = box + ((index + 0.5) / extent) * box_extent\n const i = Math.min(Math.max(Math.floor(((x - this.box.x) / this.box.width) * this.width), 0), this.width - 1)\n const j = Math.min(Math.max(Math.floor(((y - this.box.y) / this.box.height) * this.height), 0), this.height - 1)\n return this.at(i, j)\n }\n\n public isPlaced(i: number, j: number): boolean {\n return this.at(i, j) !== undefined\n }\n\n /**\n * Just the points the worker placed.\n *\n * The shape a scatter plot or an export wants: the grid with its NaN holes\n * dropped, and no mask to apply first.\n */\n public get placedPoints(): Vector3[] {\n const placed: Vector3[] = []\n for (let offset = 0; offset < this.points.length; offset += VALUES_PER_POINT) {\n const x = this.points[offset]\n const y = this.points[offset + 1]\n const z = this.points[offset + 2]\n if (!Number.isNaN(x) && !Number.isNaN(y) && !Number.isNaN(z)) {\n placed.push({ x, y, z })\n }\n }\n return placed\n }\n\n /**\n * Per axis (min, max) in meters over the placed points, or undefined if none were.\n *\n * The counterpart to DepthMap's finiteMin/finiteMax, which are one axis\n * because a depth map has one value per pixel.\n */\n public get bounds(): CloudBounds | undefined {\n let found = false\n const min = { x: Number.POSITIVE_INFINITY, y: Number.POSITIVE_INFINITY, z: Number.POSITIVE_INFINITY }\n const max = { x: Number.NEGATIVE_INFINITY, y: Number.NEGATIVE_INFINITY, z: Number.NEGATIVE_INFINITY }\n for (let offset = 0; offset < this.points.length; offset += VALUES_PER_POINT) {\n const x = this.points[offset]\n const y = this.points[offset + 1]\n const z = this.points[offset + 2]\n if (Number.isNaN(x) || Number.isNaN(y) || Number.isNaN(z)) {\n continue\n }\n found = true\n min.x = Math.min(min.x, x)\n min.y = Math.min(min.y, y)\n min.z = Math.min(min.z, z)\n max.x = Math.max(max.x, x)\n max.y = Math.max(max.y, y)\n max.z = Math.max(max.z, z)\n }\n return found ? { min, max } : undefined\n }\n}\n\nexport interface Vector3 {\n x: number\n y: number\n z: number\n}\n\nexport interface CloudBounds {\n min: Vector3\n max: Vector3\n}\n\nfunction decode(width: number, height: number, world: string, box: CloudBox | undefined): PointCloud {\n if (!Number.isSafeInteger(width) || width <= 0 || !Number.isSafeInteger(height) || height <= 0) {\n throw new Error(`invalid point cloud dimensions: ${width}x${height}`)\n }\n const bytes = base64ToBytes(world)\n const count = width * height * VALUES_PER_POINT\n if (bytes.byteLength !== count * 4) {\n throw new Error(`'world' holds ${bytes.byteLength} bytes, expected ${count * 4} for ${width}x${height} xyz float32`)\n }\n let points: Float32Array\n if (isLittleEndianPlatform) {\n // copy to a fresh, aligned buffer (e.g. Buffer pool slices can be unaligned)\n const aligned = new Uint8Array(bytes)\n points = new Float32Array(aligned.buffer, 0, count)\n } else {\n const view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength)\n points = new Float32Array(count)\n for (let i = 0; i < count; i++) {\n points[i] = view.getFloat32(i * 4, true)\n }\n }\n return new PointCloud(width, height, points, box)\n}\n\n/** A mask's point cloud, or undefined if it carries none. */\nexport function decodePointCloud(mask: Mask | undefined, box?: CloudBox): PointCloud | undefined {\n if (mask === undefined || mask.world === undefined) {\n return undefined\n }\n return decode(mask.width, mask.height, mask.world, box)\n}\n\n/**\n * The point cloud of a predicted object's mask, or undefined if it has none.\n *\n * Records the object's bounding box, so atSource() works.\n */\nexport function cloudOfObject(obj: PredictedObject | undefined): PointCloud | undefined {\n if (obj === undefined || obj.mask === undefined) {\n return undefined\n }\n return decodePointCloud(obj.mask, { x: obj.x, y: obj.y, width: obj.width, height: obj.height })\n}\n\n/**\n * The scene point cloud of a frame level depth map, or undefined if it has none.\n *\n * Present when the Pop asked for `depthMap.toWorld`. Unlike a mask cloud this\n * one spans the whole frame, so its grid is the depth map's rather than an\n * object's bounding box - and at(i, j) indexes map pixels, the same index that\n * pixel's value sits at in `depth.values`.\n *\n * Pass the prediction's source_width/source_height to enable atSource(); the\n * frame is the box in this case.\n */\nexport function cloudOfDepth(depth: Depth | undefined, sourceWidth?: number, sourceHeight?: number): PointCloud | undefined {\n if (depth === undefined || depth.world === undefined) {\n return undefined\n }\n const box = sourceWidth && sourceHeight ? { x: 0, y: 0, width: sourceWidth, height: sourceHeight } : undefined\n return decode(depth.width, depth.height, depth.world, box)\n}\n\n/**\n * Every point cloud in a prediction, outermost object first.\n *\n * An array rather than a single value like decodeDepthMap(), because a cloud\n * belongs to one object's mask and a prediction carries as many as it has\n * masked objects. Nested objects are included. A scene cloud, if the Pop asked\n * for one, comes last - appended rather than inserted so an existing index into\n * the object clouds keeps meaning what it did.\n */\nexport function cloudsOfPrediction(prediction: Prediction | undefined): PointCloud[] {\n const clouds: PointCloud[] = []\n if (prediction === undefined) {\n return clouds\n }\n\n const walk = (objects: Array<PredictedObject> | undefined): void => {\n for (const obj of objects ?? []) {\n const cloud = cloudOfObject(obj)\n if (cloud !== undefined) {\n clouds.push(cloud)\n }\n walk(obj.objects)\n }\n }\n walk(prediction.objects)\n\n const scene = cloudOfDepth(prediction.depth, prediction.source_width, prediction.source_height)\n if (scene !== undefined) {\n clouds.push(scene)\n }\n return clouds\n}\n","import { WebrtcBase } from './webrtc_base'\nimport { Logger } from 'pino'\nimport { WorkerSession } from '../worker/worker_types'\nimport { HttpClient } from '../options'\n\nexport class WebrtcWhep extends WebrtcBase {\n private _stream: MediaStream | null\n constructor(ingressId: string, getSession: () => Promise<WorkerSession>, client: HttpClient, requestLogger: Logger) {\n super(getSession, client, ingressId, 'liveIngress/whep', false, requestLogger)\n this._stream = null\n }\n public override async close(): Promise<void> {\n const stream = this._stream\n this._stream = null\n if (stream) {\n const tracks = stream.getTracks()\n tracks.forEach(track => {\n track.stop()\n })\n }\n return super.close()\n }\n\n public async stream(): Promise<MediaStream> {\n if (this._stream) {\n return Promise.resolve(this._stream)\n } else {\n return Promise.reject('fetching stream failed')\n }\n }\n\n public async start(): Promise<WebrtcWhep> {\n const session = await this._getSession()\n const egressUrl = this.gresUrl(session)\n /* According to https://www.ietf.org/archive/id/draft-ietf-wish-whip-01.html\n this should be a `OPTIONS` request. Unfortunately a lot of CORS middlewares\n hijack the OPTIONS request and only return those headers that are necessary\n for the CORS preflight protocol.\n As workaround, our media endpoint expose a equivalent `GET` request to fake\n the `OPTIONS` request and bypass the CORS preflight trap\n */\n const response = await this._client.fetch(egressUrl, {\n headers: session.authenticationHeaders(),\n method: 'GET',\n })\n if (response.status >= 300) {\n return Promise.reject(`unknown status code for GET '${egressUrl}': ${response.status} (${response.statusText})`)\n }\n return this.onIceServers(response)\n }\n\n protected async onRemoteAnswer(answer: RTCSessionDescription): Promise<WebrtcBase> {\n if (!this._pc) {\n throw new Error('onLocalOffer no peer connection')\n }\n\n await this._pc.setRemoteDescription(new RTCSessionDescription(answer))\n\n if (this._queuedCandidates.length !== 0) {\n await this.sendLocalCandidates(this._queuedCandidates)\n this._queuedCandidates = []\n }\n return this\n }\n\n private async onIceServers(response: Response): Promise<WebrtcWhep> {\n if (this._stream) {\n throw new Error('onIceServers has stream')\n }\n const pc = new RTCPeerConnection({\n iceServers: WebrtcBase.linkToIceServers(response.headers.get('Link')),\n })\n\n const direction = 'sendrecv'\n pc.addTransceiver('video', { direction })\n pc.onicecandidate = evt => this.onLocalCandidate(evt)\n\n this._pc = pc\n\n this._requestLogger.info(`onIceServers ${pc.iceConnectionState}`)\n\n return new Promise(async (resolve, reject) => {\n pc.ontrack = evt => {\n this._requestLogger.debug(`new track: ${evt.track.kind}`)\n this._stream = evt.streams[0] || null\n resolve(this)\n }\n pc.oniceconnectionstatechange = () => {\n switch (pc.iceConnectionState) {\n case 'failed':\n case 'disconnected':\n this._requestLogger.debug('oniceconnectionstatechange disconnected')\n reject(`peer connection: ${pc.iceConnectionState}`)\n break\n case 'connected':\n this._requestLogger.debug('oniceconnectionstatechange connected')\n break\n }\n }\n await this.onLocalOffer(await pc.createOffer())\n })\n }\n}\n"],"mappings":"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","names":["exports","module","exports","module","exports","charset","path","extension","EndpointState","PredictionVersion","VideoMode","PopComponentType","ForwardOperatorType","SelectMode","InferenceType","MotionModel","ContourType","message","_","uuidv4","import_uuid","path","mid","uuidv4","iteratorToStream","TransientPopId","path","headers","response","error","path","DataApiType","AutoAnnotateStatus","AssetStatus","AnnotationType","UserReview","AssetInclusionMode","AnnotationInclusionMode","AutoAnnotateTask","TranscodeMode","AreaType","ModelType","ModelTask","ModelStatus","ModelExportStatus","ExportedBy","ArtifactType","ModelTrainingStage","ChangeType","WorkflowPhase","ModelFormat","ModelPrecisionType","AssetUrlType","EvaluationStatus","TaskType","TaskMode","VlmAbilityStatus","urljoin","headers","msg","path","isLittleEndianPlatform","base64ToBytes","EyePop"]}
1
+ {"version":3,"sources":["../../../node_modules/mime-db/db.json","../../../node_modules/mime-db/index.js","../../../node_modules/mime-types/index.js","../index.ts","../options.ts","../types.ts","../shims/http_client.ts","../semaphore.ts","../endpoint.ts","../shims/browser_session.ts","../camera.ts","../worker/worker_types.ts","../compute/compute_session.ts","../streaming.ts","../worker/webrtc_whip.ts","../worker/webrtc_base.ts","../worker/jobs.ts","../shims/local_file.ts","../worker/worker_options.ts","../worker/session_backend.ts","../shims/websockets.ts","../worker/pipeline_backend.ts","../worker/worker_endpoint.ts","../data/data_endpoint.ts","../data/data_types.ts","../data/jobs.ts","../depth.ts","../point_cloud.ts","../worker/webrtc_whep.ts"],"sourcesContent":["{\n \"application/1d-interleaved-parityfec\": {\n \"source\": \"iana\"\n },\n \"application/3gpdash-qoe-report+xml\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true\n },\n \"application/3gpp-ims+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/3gpphal+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/3gpphalforms+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/a2l\": {\n \"source\": \"iana\"\n },\n \"application/ace+cbor\": {\n \"source\": \"iana\"\n },\n \"application/activemessage\": {\n \"source\": \"iana\"\n },\n \"application/activity+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/alto-costmap+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/alto-costmapfilter+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/alto-directory+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/alto-endpointcost+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/alto-endpointcostparams+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/alto-endpointprop+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/alto-endpointpropparams+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/alto-error+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/alto-networkmap+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/alto-networkmapfilter+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/alto-updatestreamcontrol+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/alto-updatestreamparams+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/aml\": {\n \"source\": \"iana\"\n },\n \"application/andrew-inset\": {\n \"source\": \"iana\",\n \"extensions\": [\"ez\"]\n },\n \"application/applefile\": {\n \"source\": \"iana\"\n },\n \"application/applixware\": {\n \"source\": \"apache\",\n \"extensions\": [\"aw\"]\n },\n \"application/at+jwt\": {\n \"source\": \"iana\"\n },\n \"application/atf\": {\n \"source\": \"iana\"\n },\n \"application/atfx\": {\n \"source\": \"iana\"\n },\n \"application/atom+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"atom\"]\n },\n \"application/atomcat+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"atomcat\"]\n },\n \"application/atomdeleted+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"atomdeleted\"]\n },\n \"application/atomicmail\": {\n \"source\": \"iana\"\n },\n \"application/atomsvc+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"atomsvc\"]\n },\n \"application/atsc-dwd+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"dwd\"]\n },\n \"application/atsc-dynamic-event-message\": {\n \"source\": \"iana\"\n },\n \"application/atsc-held+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"held\"]\n },\n \"application/atsc-rdt+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/atsc-rsat+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"rsat\"]\n },\n \"application/atxml\": {\n \"source\": \"iana\"\n },\n \"application/auth-policy+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/bacnet-xdd+zip\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"application/batch-smtp\": {\n \"source\": \"iana\"\n },\n \"application/bdoc\": {\n \"compressible\": false,\n \"extensions\": [\"bdoc\"]\n },\n \"application/beep+xml\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true\n },\n \"application/calendar+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/calendar+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"xcs\"]\n },\n \"application/call-completion\": {\n \"source\": \"iana\"\n },\n \"application/cals-1840\": {\n \"source\": \"iana\"\n },\n \"application/captive+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/cbor\": {\n \"source\": \"iana\"\n },\n \"application/cbor-seq\": {\n \"source\": \"iana\"\n },\n \"application/cccex\": {\n \"source\": \"iana\"\n },\n \"application/ccmp+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/ccxml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"ccxml\"]\n },\n \"application/cdfx+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"cdfx\"]\n },\n \"application/cdmi-capability\": {\n \"source\": \"iana\",\n \"extensions\": [\"cdmia\"]\n },\n \"application/cdmi-container\": {\n \"source\": \"iana\",\n \"extensions\": [\"cdmic\"]\n },\n \"application/cdmi-domain\": {\n \"source\": \"iana\",\n \"extensions\": [\"cdmid\"]\n },\n \"application/cdmi-object\": {\n \"source\": \"iana\",\n \"extensions\": [\"cdmio\"]\n },\n \"application/cdmi-queue\": {\n \"source\": \"iana\",\n \"extensions\": [\"cdmiq\"]\n },\n \"application/cdni\": {\n \"source\": \"iana\"\n },\n \"application/cea\": {\n \"source\": \"iana\"\n },\n \"application/cea-2018+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/cellml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/cfw\": {\n \"source\": \"iana\"\n },\n \"application/city+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/clr\": {\n \"source\": \"iana\"\n },\n \"application/clue+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/clue_info+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/cms\": {\n \"source\": \"iana\"\n },\n \"application/cnrp+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/coap-group+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/coap-payload\": {\n \"source\": \"iana\"\n },\n \"application/commonground\": {\n \"source\": \"iana\"\n },\n \"application/conference-info+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/cose\": {\n \"source\": \"iana\"\n },\n \"application/cose-key\": {\n \"source\": \"iana\"\n },\n \"application/cose-key-set\": {\n \"source\": \"iana\"\n },\n \"application/cpl+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"cpl\"]\n },\n \"application/csrattrs\": {\n \"source\": \"iana\"\n },\n \"application/csta+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/cstadata+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/csvm+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/cu-seeme\": {\n \"source\": \"apache\",\n \"extensions\": [\"cu\"]\n },\n \"application/cwt\": {\n \"source\": \"iana\"\n },\n \"application/cybercash\": {\n \"source\": \"iana\"\n },\n \"application/dart\": {\n \"compressible\": true\n },\n \"application/dash+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"mpd\"]\n },\n \"application/dash-patch+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"mpp\"]\n },\n \"application/dashdelta\": {\n \"source\": \"iana\"\n },\n \"application/davmount+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"davmount\"]\n },\n \"application/dca-rft\": {\n \"source\": \"iana\"\n },\n \"application/dcd\": {\n \"source\": \"iana\"\n },\n \"application/dec-dx\": {\n \"source\": \"iana\"\n },\n \"application/dialog-info+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/dicom\": {\n \"source\": \"iana\"\n },\n \"application/dicom+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/dicom+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/dii\": {\n \"source\": \"iana\"\n },\n \"application/dit\": {\n \"source\": \"iana\"\n },\n \"application/dns\": {\n \"source\": \"iana\"\n },\n \"application/dns+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/dns-message\": {\n \"source\": \"iana\"\n },\n \"application/docbook+xml\": {\n \"source\": \"apache\",\n \"compressible\": true,\n \"extensions\": [\"dbk\"]\n },\n \"application/dots+cbor\": {\n \"source\": \"iana\"\n },\n \"application/dskpp+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/dssc+der\": {\n \"source\": \"iana\",\n \"extensions\": [\"dssc\"]\n },\n \"application/dssc+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"xdssc\"]\n },\n \"application/dvcs\": {\n \"source\": \"iana\"\n },\n \"application/ecmascript\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"es\",\"ecma\"]\n },\n \"application/edi-consent\": {\n \"source\": \"iana\"\n },\n \"application/edi-x12\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"application/edifact\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"application/efi\": {\n \"source\": \"iana\"\n },\n \"application/elm+json\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true\n },\n \"application/elm+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/emergencycalldata.cap+xml\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true\n },\n \"application/emergencycalldata.comment+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/emergencycalldata.control+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/emergencycalldata.deviceinfo+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/emergencycalldata.ecall.msd\": {\n \"source\": \"iana\"\n },\n \"application/emergencycalldata.providerinfo+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/emergencycalldata.serviceinfo+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/emergencycalldata.subscriberinfo+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/emergencycalldata.veds+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/emma+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"emma\"]\n },\n \"application/emotionml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"emotionml\"]\n },\n \"application/encaprtp\": {\n \"source\": \"iana\"\n },\n \"application/epp+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/epub+zip\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"epub\"]\n },\n \"application/eshop\": {\n \"source\": \"iana\"\n },\n \"application/exi\": {\n \"source\": \"iana\",\n \"extensions\": [\"exi\"]\n },\n \"application/expect-ct-report+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/express\": {\n \"source\": \"iana\",\n \"extensions\": [\"exp\"]\n },\n \"application/fastinfoset\": {\n \"source\": \"iana\"\n },\n \"application/fastsoap\": {\n \"source\": \"iana\"\n },\n \"application/fdt+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"fdt\"]\n },\n \"application/fhir+json\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true\n },\n \"application/fhir+xml\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true\n },\n \"application/fido.trusted-apps+json\": {\n \"compressible\": true\n },\n \"application/fits\": {\n \"source\": \"iana\"\n },\n \"application/flexfec\": {\n \"source\": \"iana\"\n },\n \"application/font-sfnt\": {\n \"source\": \"iana\"\n },\n \"application/font-tdpfr\": {\n \"source\": \"iana\",\n \"extensions\": [\"pfr\"]\n },\n \"application/font-woff\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"application/framework-attributes+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/geo+json\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"geojson\"]\n },\n \"application/geo+json-seq\": {\n \"source\": \"iana\"\n },\n \"application/geopackage+sqlite3\": {\n \"source\": \"iana\"\n },\n \"application/geoxacml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/gltf-buffer\": {\n \"source\": \"iana\"\n },\n \"application/gml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"gml\"]\n },\n \"application/gpx+xml\": {\n \"source\": \"apache\",\n \"compressible\": true,\n \"extensions\": [\"gpx\"]\n },\n \"application/gxf\": {\n \"source\": \"apache\",\n \"extensions\": [\"gxf\"]\n },\n \"application/gzip\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"gz\"]\n },\n \"application/h224\": {\n \"source\": \"iana\"\n },\n \"application/held+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/hjson\": {\n \"extensions\": [\"hjson\"]\n },\n \"application/http\": {\n \"source\": \"iana\"\n },\n \"application/hyperstudio\": {\n \"source\": \"iana\",\n \"extensions\": [\"stk\"]\n },\n \"application/ibe-key-request+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/ibe-pkg-reply+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/ibe-pp-data\": {\n \"source\": \"iana\"\n },\n \"application/iges\": {\n \"source\": \"iana\"\n },\n \"application/im-iscomposing+xml\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true\n },\n \"application/index\": {\n \"source\": \"iana\"\n },\n \"application/index.cmd\": {\n \"source\": \"iana\"\n },\n \"application/index.obj\": {\n \"source\": \"iana\"\n },\n \"application/index.response\": {\n \"source\": \"iana\"\n },\n \"application/index.vnd\": {\n \"source\": \"iana\"\n },\n \"application/inkml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"ink\",\"inkml\"]\n },\n \"application/iotp\": {\n \"source\": \"iana\"\n },\n \"application/ipfix\": {\n \"source\": \"iana\",\n \"extensions\": [\"ipfix\"]\n },\n \"application/ipp\": {\n \"source\": \"iana\"\n },\n \"application/isup\": {\n \"source\": \"iana\"\n },\n \"application/its+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"its\"]\n },\n \"application/java-archive\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"jar\",\"war\",\"ear\"]\n },\n \"application/java-serialized-object\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"ser\"]\n },\n \"application/java-vm\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"class\"]\n },\n \"application/javascript\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true,\n \"extensions\": [\"js\",\"mjs\"]\n },\n \"application/jf2feed+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/jose\": {\n \"source\": \"iana\"\n },\n \"application/jose+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/jrd+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/jscalendar+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/json\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true,\n \"extensions\": [\"json\",\"map\"]\n },\n \"application/json-patch+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/json-seq\": {\n \"source\": \"iana\"\n },\n \"application/json5\": {\n \"extensions\": [\"json5\"]\n },\n \"application/jsonml+json\": {\n \"source\": \"apache\",\n \"compressible\": true,\n \"extensions\": [\"jsonml\"]\n },\n \"application/jwk+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/jwk-set+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/jwt\": {\n \"source\": \"iana\"\n },\n \"application/kpml-request+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/kpml-response+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/ld+json\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"jsonld\"]\n },\n \"application/lgr+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"lgr\"]\n },\n \"application/link-format\": {\n \"source\": \"iana\"\n },\n \"application/load-control+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/lost+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"lostxml\"]\n },\n \"application/lostsync+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/lpf+zip\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"application/lxf\": {\n \"source\": \"iana\"\n },\n \"application/mac-binhex40\": {\n \"source\": \"iana\",\n \"extensions\": [\"hqx\"]\n },\n \"application/mac-compactpro\": {\n \"source\": \"apache\",\n \"extensions\": [\"cpt\"]\n },\n \"application/macwriteii\": {\n \"source\": \"iana\"\n },\n \"application/mads+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"mads\"]\n },\n \"application/manifest+json\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true,\n \"extensions\": [\"webmanifest\"]\n },\n \"application/marc\": {\n \"source\": \"iana\",\n \"extensions\": [\"mrc\"]\n },\n \"application/marcxml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"mrcx\"]\n },\n \"application/mathematica\": {\n \"source\": \"iana\",\n \"extensions\": [\"ma\",\"nb\",\"mb\"]\n },\n \"application/mathml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"mathml\"]\n },\n \"application/mathml-content+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/mathml-presentation+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/mbms-associated-procedure-description+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/mbms-deregister+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/mbms-envelope+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/mbms-msk+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/mbms-msk-response+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/mbms-protection-description+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/mbms-reception-report+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/mbms-register+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/mbms-register-response+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/mbms-schedule+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/mbms-user-service-description+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/mbox\": {\n \"source\": \"iana\",\n \"extensions\": [\"mbox\"]\n },\n \"application/media-policy-dataset+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"mpf\"]\n },\n \"application/media_control+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/mediaservercontrol+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"mscml\"]\n },\n \"application/merge-patch+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/metalink+xml\": {\n \"source\": \"apache\",\n \"compressible\": true,\n \"extensions\": [\"metalink\"]\n },\n \"application/metalink4+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"meta4\"]\n },\n \"application/mets+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"mets\"]\n },\n \"application/mf4\": {\n \"source\": \"iana\"\n },\n \"application/mikey\": {\n \"source\": \"iana\"\n },\n \"application/mipc\": {\n \"source\": \"iana\"\n },\n \"application/missing-blocks+cbor-seq\": {\n \"source\": \"iana\"\n },\n \"application/mmt-aei+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"maei\"]\n },\n \"application/mmt-usd+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"musd\"]\n },\n \"application/mods+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"mods\"]\n },\n \"application/moss-keys\": {\n \"source\": \"iana\"\n },\n \"application/moss-signature\": {\n \"source\": \"iana\"\n },\n \"application/mosskey-data\": {\n \"source\": \"iana\"\n },\n \"application/mosskey-request\": {\n \"source\": \"iana\"\n },\n \"application/mp21\": {\n \"source\": \"iana\",\n \"extensions\": [\"m21\",\"mp21\"]\n },\n \"application/mp4\": {\n \"source\": \"iana\",\n \"extensions\": [\"mp4s\",\"m4p\"]\n },\n \"application/mpeg4-generic\": {\n \"source\": \"iana\"\n },\n \"application/mpeg4-iod\": {\n \"source\": \"iana\"\n },\n \"application/mpeg4-iod-xmt\": {\n \"source\": \"iana\"\n },\n \"application/mrb-consumer+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/mrb-publish+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/msc-ivr+xml\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true\n },\n \"application/msc-mixer+xml\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true\n },\n \"application/msword\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"doc\",\"dot\"]\n },\n \"application/mud+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/multipart-core\": {\n \"source\": \"iana\"\n },\n \"application/mxf\": {\n \"source\": \"iana\",\n \"extensions\": [\"mxf\"]\n },\n \"application/n-quads\": {\n \"source\": \"iana\",\n \"extensions\": [\"nq\"]\n },\n \"application/n-triples\": {\n \"source\": \"iana\",\n \"extensions\": [\"nt\"]\n },\n \"application/nasdata\": {\n \"source\": \"iana\"\n },\n \"application/news-checkgroups\": {\n \"source\": \"iana\",\n \"charset\": \"US-ASCII\"\n },\n \"application/news-groupinfo\": {\n \"source\": \"iana\",\n \"charset\": \"US-ASCII\"\n },\n \"application/news-transmission\": {\n \"source\": \"iana\"\n },\n \"application/nlsml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/node\": {\n \"source\": \"iana\",\n \"extensions\": [\"cjs\"]\n },\n \"application/nss\": {\n \"source\": \"iana\"\n },\n \"application/oauth-authz-req+jwt\": {\n \"source\": \"iana\"\n },\n \"application/oblivious-dns-message\": {\n \"source\": \"iana\"\n },\n \"application/ocsp-request\": {\n \"source\": \"iana\"\n },\n \"application/ocsp-response\": {\n \"source\": \"iana\"\n },\n \"application/octet-stream\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"bin\",\"dms\",\"lrf\",\"mar\",\"so\",\"dist\",\"distz\",\"pkg\",\"bpk\",\"dump\",\"elc\",\"deploy\",\"exe\",\"dll\",\"deb\",\"dmg\",\"iso\",\"img\",\"msi\",\"msp\",\"msm\",\"buffer\"]\n },\n \"application/oda\": {\n \"source\": \"iana\",\n \"extensions\": [\"oda\"]\n },\n \"application/odm+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/odx\": {\n \"source\": \"iana\"\n },\n \"application/oebps-package+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"opf\"]\n },\n \"application/ogg\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"ogx\"]\n },\n \"application/omdoc+xml\": {\n \"source\": \"apache\",\n \"compressible\": true,\n \"extensions\": [\"omdoc\"]\n },\n \"application/onenote\": {\n \"source\": \"apache\",\n \"extensions\": [\"onetoc\",\"onetoc2\",\"onetmp\",\"onepkg\"]\n },\n \"application/opc-nodeset+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/oscore\": {\n \"source\": \"iana\"\n },\n \"application/oxps\": {\n \"source\": \"iana\",\n \"extensions\": [\"oxps\"]\n },\n \"application/p21\": {\n \"source\": \"iana\"\n },\n \"application/p21+zip\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"application/p2p-overlay+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"relo\"]\n },\n \"application/parityfec\": {\n \"source\": \"iana\"\n },\n \"application/passport\": {\n \"source\": \"iana\"\n },\n \"application/patch-ops-error+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"xer\"]\n },\n \"application/pdf\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"pdf\"]\n },\n \"application/pdx\": {\n \"source\": \"iana\"\n },\n \"application/pem-certificate-chain\": {\n \"source\": \"iana\"\n },\n \"application/pgp-encrypted\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"pgp\"]\n },\n \"application/pgp-keys\": {\n \"source\": \"iana\",\n \"extensions\": [\"asc\"]\n },\n \"application/pgp-signature\": {\n \"source\": \"iana\",\n \"extensions\": [\"asc\",\"sig\"]\n },\n \"application/pics-rules\": {\n \"source\": \"apache\",\n \"extensions\": [\"prf\"]\n },\n \"application/pidf+xml\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true\n },\n \"application/pidf-diff+xml\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true\n },\n \"application/pkcs10\": {\n \"source\": \"iana\",\n \"extensions\": [\"p10\"]\n },\n \"application/pkcs12\": {\n \"source\": \"iana\"\n },\n \"application/pkcs7-mime\": {\n \"source\": \"iana\",\n \"extensions\": [\"p7m\",\"p7c\"]\n },\n \"application/pkcs7-signature\": {\n \"source\": \"iana\",\n \"extensions\": [\"p7s\"]\n },\n \"application/pkcs8\": {\n \"source\": \"iana\",\n \"extensions\": [\"p8\"]\n },\n \"application/pkcs8-encrypted\": {\n \"source\": \"iana\"\n },\n \"application/pkix-attr-cert\": {\n \"source\": \"iana\",\n \"extensions\": [\"ac\"]\n },\n \"application/pkix-cert\": {\n \"source\": \"iana\",\n \"extensions\": [\"cer\"]\n },\n \"application/pkix-crl\": {\n \"source\": \"iana\",\n \"extensions\": [\"crl\"]\n },\n \"application/pkix-pkipath\": {\n \"source\": \"iana\",\n \"extensions\": [\"pkipath\"]\n },\n \"application/pkixcmp\": {\n \"source\": \"iana\",\n \"extensions\": [\"pki\"]\n },\n \"application/pls+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"pls\"]\n },\n \"application/poc-settings+xml\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true\n },\n \"application/postscript\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"ai\",\"eps\",\"ps\"]\n },\n \"application/ppsp-tracker+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/problem+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/problem+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/provenance+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"provx\"]\n },\n \"application/prs.alvestrand.titrax-sheet\": {\n \"source\": \"iana\"\n },\n \"application/prs.cww\": {\n \"source\": \"iana\",\n \"extensions\": [\"cww\"]\n },\n \"application/prs.cyn\": {\n \"source\": \"iana\",\n \"charset\": \"7-BIT\"\n },\n \"application/prs.hpub+zip\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"application/prs.nprend\": {\n \"source\": \"iana\"\n },\n \"application/prs.plucker\": {\n \"source\": \"iana\"\n },\n \"application/prs.rdf-xml-crypt\": {\n \"source\": \"iana\"\n },\n \"application/prs.xsf+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/pskc+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"pskcxml\"]\n },\n \"application/pvd+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/qsig\": {\n \"source\": \"iana\"\n },\n \"application/raml+yaml\": {\n \"compressible\": true,\n \"extensions\": [\"raml\"]\n },\n \"application/raptorfec\": {\n \"source\": \"iana\"\n },\n \"application/rdap+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/rdf+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"rdf\",\"owl\"]\n },\n \"application/reginfo+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"rif\"]\n },\n \"application/relax-ng-compact-syntax\": {\n \"source\": \"iana\",\n \"extensions\": [\"rnc\"]\n },\n \"application/remote-printing\": {\n \"source\": \"iana\"\n },\n \"application/reputon+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/resource-lists+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"rl\"]\n },\n \"application/resource-lists-diff+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"rld\"]\n },\n \"application/rfc+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/riscos\": {\n \"source\": \"iana\"\n },\n \"application/rlmi+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/rls-services+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"rs\"]\n },\n \"application/route-apd+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"rapd\"]\n },\n \"application/route-s-tsid+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"sls\"]\n },\n \"application/route-usd+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"rusd\"]\n },\n \"application/rpki-ghostbusters\": {\n \"source\": \"iana\",\n \"extensions\": [\"gbr\"]\n },\n \"application/rpki-manifest\": {\n \"source\": \"iana\",\n \"extensions\": [\"mft\"]\n },\n \"application/rpki-publication\": {\n \"source\": \"iana\"\n },\n \"application/rpki-roa\": {\n \"source\": \"iana\",\n \"extensions\": [\"roa\"]\n },\n \"application/rpki-updown\": {\n \"source\": \"iana\"\n },\n \"application/rsd+xml\": {\n \"source\": \"apache\",\n \"compressible\": true,\n \"extensions\": [\"rsd\"]\n },\n \"application/rss+xml\": {\n \"source\": \"apache\",\n \"compressible\": true,\n \"extensions\": [\"rss\"]\n },\n \"application/rtf\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"rtf\"]\n },\n \"application/rtploopback\": {\n \"source\": \"iana\"\n },\n \"application/rtx\": {\n \"source\": \"iana\"\n },\n \"application/samlassertion+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/samlmetadata+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/sarif+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/sarif-external-properties+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/sbe\": {\n \"source\": \"iana\"\n },\n \"application/sbml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"sbml\"]\n },\n \"application/scaip+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/scim+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/scvp-cv-request\": {\n \"source\": \"iana\",\n \"extensions\": [\"scq\"]\n },\n \"application/scvp-cv-response\": {\n \"source\": \"iana\",\n \"extensions\": [\"scs\"]\n },\n \"application/scvp-vp-request\": {\n \"source\": \"iana\",\n \"extensions\": [\"spq\"]\n },\n \"application/scvp-vp-response\": {\n \"source\": \"iana\",\n \"extensions\": [\"spp\"]\n },\n \"application/sdp\": {\n \"source\": \"iana\",\n \"extensions\": [\"sdp\"]\n },\n \"application/secevent+jwt\": {\n \"source\": \"iana\"\n },\n \"application/senml+cbor\": {\n \"source\": \"iana\"\n },\n \"application/senml+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/senml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"senmlx\"]\n },\n \"application/senml-etch+cbor\": {\n \"source\": \"iana\"\n },\n \"application/senml-etch+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/senml-exi\": {\n \"source\": \"iana\"\n },\n \"application/sensml+cbor\": {\n \"source\": \"iana\"\n },\n \"application/sensml+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/sensml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"sensmlx\"]\n },\n \"application/sensml-exi\": {\n \"source\": \"iana\"\n },\n \"application/sep+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/sep-exi\": {\n \"source\": \"iana\"\n },\n \"application/session-info\": {\n \"source\": \"iana\"\n },\n \"application/set-payment\": {\n \"source\": \"iana\"\n },\n \"application/set-payment-initiation\": {\n \"source\": \"iana\",\n \"extensions\": [\"setpay\"]\n },\n \"application/set-registration\": {\n \"source\": \"iana\"\n },\n \"application/set-registration-initiation\": {\n \"source\": \"iana\",\n \"extensions\": [\"setreg\"]\n },\n \"application/sgml\": {\n \"source\": \"iana\"\n },\n \"application/sgml-open-catalog\": {\n \"source\": \"iana\"\n },\n \"application/shf+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"shf\"]\n },\n \"application/sieve\": {\n \"source\": \"iana\",\n \"extensions\": [\"siv\",\"sieve\"]\n },\n \"application/simple-filter+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/simple-message-summary\": {\n \"source\": \"iana\"\n },\n \"application/simplesymbolcontainer\": {\n \"source\": \"iana\"\n },\n \"application/sipc\": {\n \"source\": \"iana\"\n },\n \"application/slate\": {\n \"source\": \"iana\"\n },\n \"application/smil\": {\n \"source\": \"iana\"\n },\n \"application/smil+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"smi\",\"smil\"]\n },\n \"application/smpte336m\": {\n \"source\": \"iana\"\n },\n \"application/soap+fastinfoset\": {\n \"source\": \"iana\"\n },\n \"application/soap+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/sparql-query\": {\n \"source\": \"iana\",\n \"extensions\": [\"rq\"]\n },\n \"application/sparql-results+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"srx\"]\n },\n \"application/spdx+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/spirits-event+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/sql\": {\n \"source\": \"iana\"\n },\n \"application/srgs\": {\n \"source\": \"iana\",\n \"extensions\": [\"gram\"]\n },\n \"application/srgs+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"grxml\"]\n },\n \"application/sru+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"sru\"]\n },\n \"application/ssdl+xml\": {\n \"source\": \"apache\",\n \"compressible\": true,\n \"extensions\": [\"ssdl\"]\n },\n \"application/ssml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"ssml\"]\n },\n \"application/stix+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/swid+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"swidtag\"]\n },\n \"application/tamp-apex-update\": {\n \"source\": \"iana\"\n },\n \"application/tamp-apex-update-confirm\": {\n \"source\": \"iana\"\n },\n \"application/tamp-community-update\": {\n \"source\": \"iana\"\n },\n \"application/tamp-community-update-confirm\": {\n \"source\": \"iana\"\n },\n \"application/tamp-error\": {\n \"source\": \"iana\"\n },\n \"application/tamp-sequence-adjust\": {\n \"source\": \"iana\"\n },\n \"application/tamp-sequence-adjust-confirm\": {\n \"source\": \"iana\"\n },\n \"application/tamp-status-query\": {\n \"source\": \"iana\"\n },\n \"application/tamp-status-response\": {\n \"source\": \"iana\"\n },\n \"application/tamp-update\": {\n \"source\": \"iana\"\n },\n \"application/tamp-update-confirm\": {\n \"source\": \"iana\"\n },\n \"application/tar\": {\n \"compressible\": true\n },\n \"application/taxii+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/td+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/tei+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"tei\",\"teicorpus\"]\n },\n \"application/tetra_isi\": {\n \"source\": \"iana\"\n },\n \"application/thraud+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"tfi\"]\n },\n \"application/timestamp-query\": {\n \"source\": \"iana\"\n },\n \"application/timestamp-reply\": {\n \"source\": \"iana\"\n },\n \"application/timestamped-data\": {\n \"source\": \"iana\",\n \"extensions\": [\"tsd\"]\n },\n \"application/tlsrpt+gzip\": {\n \"source\": \"iana\"\n },\n \"application/tlsrpt+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/tnauthlist\": {\n \"source\": \"iana\"\n },\n \"application/token-introspection+jwt\": {\n \"source\": \"iana\"\n },\n \"application/toml\": {\n \"compressible\": true,\n \"extensions\": [\"toml\"]\n },\n \"application/trickle-ice-sdpfrag\": {\n \"source\": \"iana\"\n },\n \"application/trig\": {\n \"source\": \"iana\",\n \"extensions\": [\"trig\"]\n },\n \"application/ttml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"ttml\"]\n },\n \"application/tve-trigger\": {\n \"source\": \"iana\"\n },\n \"application/tzif\": {\n \"source\": \"iana\"\n },\n \"application/tzif-leap\": {\n \"source\": \"iana\"\n },\n \"application/ubjson\": {\n \"compressible\": false,\n \"extensions\": [\"ubj\"]\n },\n \"application/ulpfec\": {\n \"source\": \"iana\"\n },\n \"application/urc-grpsheet+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/urc-ressheet+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"rsheet\"]\n },\n \"application/urc-targetdesc+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"td\"]\n },\n \"application/urc-uisocketdesc+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vcard+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vcard+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vemmi\": {\n \"source\": \"iana\"\n },\n \"application/vividence.scriptfile\": {\n \"source\": \"apache\"\n },\n \"application/vnd.1000minds.decision-model+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"1km\"]\n },\n \"application/vnd.3gpp-prose+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp-prose-pc3ch+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp-v2x-local-service-information\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.5gnas\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.access-transfer-events+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.bsf+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.gmop+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.gtpc\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.interworking-data\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.lpp\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.mc-signalling-ear\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.mcdata-affiliation-command+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mcdata-info+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mcdata-payload\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.mcdata-service-config+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mcdata-signalling\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.mcdata-ue-config+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mcdata-user-profile+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mcptt-affiliation-command+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mcptt-floor-request+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mcptt-info+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mcptt-location-info+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mcptt-mbms-usage-info+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mcptt-service-config+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mcptt-signed+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mcptt-ue-config+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mcptt-ue-init-config+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mcptt-user-profile+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mcvideo-affiliation-command+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mcvideo-affiliation-info+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mcvideo-info+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mcvideo-location-info+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mcvideo-mbms-usage-info+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mcvideo-service-config+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mcvideo-transmission-request+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mcvideo-ue-config+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mcvideo-user-profile+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mid-call+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.ngap\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.pfcp\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.pic-bw-large\": {\n \"source\": \"iana\",\n \"extensions\": [\"plb\"]\n },\n \"application/vnd.3gpp.pic-bw-small\": {\n \"source\": \"iana\",\n \"extensions\": [\"psb\"]\n },\n \"application/vnd.3gpp.pic-bw-var\": {\n \"source\": \"iana\",\n \"extensions\": [\"pvb\"]\n },\n \"application/vnd.3gpp.s1ap\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.sms\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.sms+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.srvcc-ext+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.srvcc-info+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.state-and-event-info+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.ussd+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp2.bcmcsinfo+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp2.sms\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp2.tcap\": {\n \"source\": \"iana\",\n \"extensions\": [\"tcap\"]\n },\n \"application/vnd.3lightssoftware.imagescal\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3m.post-it-notes\": {\n \"source\": \"iana\",\n \"extensions\": [\"pwn\"]\n },\n \"application/vnd.accpac.simply.aso\": {\n \"source\": \"iana\",\n \"extensions\": [\"aso\"]\n },\n \"application/vnd.accpac.simply.imp\": {\n \"source\": \"iana\",\n \"extensions\": [\"imp\"]\n },\n \"application/vnd.acucobol\": {\n \"source\": \"iana\",\n \"extensions\": [\"acu\"]\n },\n \"application/vnd.acucorp\": {\n \"source\": \"iana\",\n \"extensions\": [\"atc\",\"acutc\"]\n },\n \"application/vnd.adobe.air-application-installer-package+zip\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"air\"]\n },\n \"application/vnd.adobe.flash.movie\": {\n \"source\": \"iana\"\n },\n \"application/vnd.adobe.formscentral.fcdt\": {\n \"source\": \"iana\",\n \"extensions\": [\"fcdt\"]\n },\n \"application/vnd.adobe.fxp\": {\n \"source\": \"iana\",\n \"extensions\": [\"fxp\",\"fxpl\"]\n },\n \"application/vnd.adobe.partial-upload\": {\n \"source\": \"iana\"\n },\n \"application/vnd.adobe.xdp+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"xdp\"]\n },\n \"application/vnd.adobe.xfdf\": {\n \"source\": \"iana\",\n \"extensions\": [\"xfdf\"]\n },\n \"application/vnd.aether.imp\": {\n \"source\": \"iana\"\n },\n \"application/vnd.afpc.afplinedata\": {\n \"source\": \"iana\"\n },\n \"application/vnd.afpc.afplinedata-pagedef\": {\n \"source\": \"iana\"\n },\n \"application/vnd.afpc.cmoca-cmresource\": {\n \"source\": \"iana\"\n },\n \"application/vnd.afpc.foca-charset\": {\n \"source\": \"iana\"\n },\n \"application/vnd.afpc.foca-codedfont\": {\n \"source\": \"iana\"\n },\n \"application/vnd.afpc.foca-codepage\": {\n \"source\": \"iana\"\n },\n \"application/vnd.afpc.modca\": {\n \"source\": \"iana\"\n },\n \"application/vnd.afpc.modca-cmtable\": {\n \"source\": \"iana\"\n },\n \"application/vnd.afpc.modca-formdef\": {\n \"source\": \"iana\"\n },\n \"application/vnd.afpc.modca-mediummap\": {\n \"source\": \"iana\"\n },\n \"application/vnd.afpc.modca-objectcontainer\": {\n \"source\": \"iana\"\n },\n \"application/vnd.afpc.modca-overlay\": {\n \"source\": \"iana\"\n },\n \"application/vnd.afpc.modca-pagesegment\": {\n \"source\": \"iana\"\n },\n \"application/vnd.age\": {\n \"source\": \"iana\",\n \"extensions\": [\"age\"]\n },\n \"application/vnd.ah-barcode\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ahead.space\": {\n \"source\": \"iana\",\n \"extensions\": [\"ahead\"]\n },\n \"application/vnd.airzip.filesecure.azf\": {\n \"source\": \"iana\",\n \"extensions\": [\"azf\"]\n },\n \"application/vnd.airzip.filesecure.azs\": {\n \"source\": \"iana\",\n \"extensions\": [\"azs\"]\n },\n \"application/vnd.amadeus+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.amazon.ebook\": {\n \"source\": \"apache\",\n \"extensions\": [\"azw\"]\n },\n \"application/vnd.amazon.mobi8-ebook\": {\n \"source\": \"iana\"\n },\n \"application/vnd.americandynamics.acc\": {\n \"source\": \"iana\",\n \"extensions\": [\"acc\"]\n },\n \"application/vnd.amiga.ami\": {\n \"source\": \"iana\",\n \"extensions\": [\"ami\"]\n },\n \"application/vnd.amundsen.maze+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.android.ota\": {\n \"source\": \"iana\"\n },\n \"application/vnd.android.package-archive\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"apk\"]\n },\n \"application/vnd.anki\": {\n \"source\": \"iana\"\n },\n \"application/vnd.anser-web-certificate-issue-initiation\": {\n \"source\": \"iana\",\n \"extensions\": [\"cii\"]\n },\n \"application/vnd.anser-web-funds-transfer-initiation\": {\n \"source\": \"apache\",\n \"extensions\": [\"fti\"]\n },\n \"application/vnd.antix.game-component\": {\n \"source\": \"iana\",\n \"extensions\": [\"atx\"]\n },\n \"application/vnd.apache.arrow.file\": {\n \"source\": \"iana\"\n },\n \"application/vnd.apache.arrow.stream\": {\n \"source\": \"iana\"\n },\n \"application/vnd.apache.thrift.binary\": {\n \"source\": \"iana\"\n },\n \"application/vnd.apache.thrift.compact\": {\n \"source\": \"iana\"\n },\n \"application/vnd.apache.thrift.json\": {\n \"source\": \"iana\"\n },\n \"application/vnd.api+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.aplextor.warrp+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.apothekende.reservation+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.apple.installer+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"mpkg\"]\n },\n \"application/vnd.apple.keynote\": {\n \"source\": \"iana\",\n \"extensions\": [\"key\"]\n },\n \"application/vnd.apple.mpegurl\": {\n \"source\": \"iana\",\n \"extensions\": [\"m3u8\"]\n },\n \"application/vnd.apple.numbers\": {\n \"source\": \"iana\",\n \"extensions\": [\"numbers\"]\n },\n \"application/vnd.apple.pages\": {\n \"source\": \"iana\",\n \"extensions\": [\"pages\"]\n },\n \"application/vnd.apple.pkpass\": {\n \"compressible\": false,\n \"extensions\": [\"pkpass\"]\n },\n \"application/vnd.arastra.swi\": {\n \"source\": \"iana\"\n },\n \"application/vnd.aristanetworks.swi\": {\n \"source\": \"iana\",\n \"extensions\": [\"swi\"]\n },\n \"application/vnd.artisan+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.artsquare\": {\n \"source\": \"iana\"\n },\n \"application/vnd.astraea-software.iota\": {\n \"source\": \"iana\",\n \"extensions\": [\"iota\"]\n },\n \"application/vnd.audiograph\": {\n \"source\": \"iana\",\n \"extensions\": [\"aep\"]\n },\n \"application/vnd.autopackage\": {\n \"source\": \"iana\"\n },\n \"application/vnd.avalon+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.avistar+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.balsamiq.bmml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"bmml\"]\n },\n \"application/vnd.balsamiq.bmpr\": {\n \"source\": \"iana\"\n },\n \"application/vnd.banana-accounting\": {\n \"source\": \"iana\"\n },\n \"application/vnd.bbf.usp.error\": {\n \"source\": \"iana\"\n },\n \"application/vnd.bbf.usp.msg\": {\n \"source\": \"iana\"\n },\n \"application/vnd.bbf.usp.msg+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.bekitzur-stech+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.bint.med-content\": {\n \"source\": \"iana\"\n },\n \"application/vnd.biopax.rdf+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.blink-idb-value-wrapper\": {\n \"source\": \"iana\"\n },\n \"application/vnd.blueice.multipass\": {\n \"source\": \"iana\",\n \"extensions\": [\"mpm\"]\n },\n \"application/vnd.bluetooth.ep.oob\": {\n \"source\": \"iana\"\n },\n \"application/vnd.bluetooth.le.oob\": {\n \"source\": \"iana\"\n },\n \"application/vnd.bmi\": {\n \"source\": \"iana\",\n \"extensions\": [\"bmi\"]\n },\n \"application/vnd.bpf\": {\n \"source\": \"iana\"\n },\n \"application/vnd.bpf3\": {\n \"source\": \"iana\"\n },\n \"application/vnd.businessobjects\": {\n \"source\": \"iana\",\n \"extensions\": [\"rep\"]\n },\n \"application/vnd.byu.uapi+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.cab-jscript\": {\n \"source\": \"iana\"\n },\n \"application/vnd.canon-cpdl\": {\n \"source\": \"iana\"\n },\n \"application/vnd.canon-lips\": {\n \"source\": \"iana\"\n },\n \"application/vnd.capasystems-pg+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.cendio.thinlinc.clientconf\": {\n \"source\": \"iana\"\n },\n \"application/vnd.century-systems.tcp_stream\": {\n \"source\": \"iana\"\n },\n \"application/vnd.chemdraw+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"cdxml\"]\n },\n \"application/vnd.chess-pgn\": {\n \"source\": \"iana\"\n },\n \"application/vnd.chipnuts.karaoke-mmd\": {\n \"source\": \"iana\",\n \"extensions\": [\"mmd\"]\n },\n \"application/vnd.ciedi\": {\n \"source\": \"iana\"\n },\n \"application/vnd.cinderella\": {\n \"source\": \"iana\",\n \"extensions\": [\"cdy\"]\n },\n \"application/vnd.cirpack.isdn-ext\": {\n \"source\": \"iana\"\n },\n \"application/vnd.citationstyles.style+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"csl\"]\n },\n \"application/vnd.claymore\": {\n \"source\": \"iana\",\n \"extensions\": [\"cla\"]\n },\n \"application/vnd.cloanto.rp9\": {\n \"source\": \"iana\",\n \"extensions\": [\"rp9\"]\n },\n \"application/vnd.clonk.c4group\": {\n \"source\": \"iana\",\n \"extensions\": [\"c4g\",\"c4d\",\"c4f\",\"c4p\",\"c4u\"]\n },\n \"application/vnd.cluetrust.cartomobile-config\": {\n \"source\": \"iana\",\n \"extensions\": [\"c11amc\"]\n },\n \"application/vnd.cluetrust.cartomobile-config-pkg\": {\n \"source\": \"iana\",\n \"extensions\": [\"c11amz\"]\n },\n \"application/vnd.coffeescript\": {\n \"source\": \"iana\"\n },\n \"application/vnd.collabio.xodocuments.document\": {\n \"source\": \"iana\"\n },\n \"application/vnd.collabio.xodocuments.document-template\": {\n \"source\": \"iana\"\n },\n \"application/vnd.collabio.xodocuments.presentation\": {\n \"source\": \"iana\"\n },\n \"application/vnd.collabio.xodocuments.presentation-template\": {\n \"source\": \"iana\"\n },\n \"application/vnd.collabio.xodocuments.spreadsheet\": {\n \"source\": \"iana\"\n },\n \"application/vnd.collabio.xodocuments.spreadsheet-template\": {\n \"source\": \"iana\"\n },\n \"application/vnd.collection+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.collection.doc+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.collection.next+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.comicbook+zip\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"application/vnd.comicbook-rar\": {\n \"source\": \"iana\"\n },\n \"application/vnd.commerce-battelle\": {\n \"source\": \"iana\"\n },\n \"application/vnd.commonspace\": {\n \"source\": \"iana\",\n \"extensions\": [\"csp\"]\n },\n \"application/vnd.contact.cmsg\": {\n \"source\": \"iana\",\n \"extensions\": [\"cdbcmsg\"]\n },\n \"application/vnd.coreos.ignition+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.cosmocaller\": {\n \"source\": \"iana\",\n \"extensions\": [\"cmc\"]\n },\n \"application/vnd.crick.clicker\": {\n \"source\": \"iana\",\n \"extensions\": [\"clkx\"]\n },\n \"application/vnd.crick.clicker.keyboard\": {\n \"source\": \"iana\",\n \"extensions\": [\"clkk\"]\n },\n \"application/vnd.crick.clicker.palette\": {\n \"source\": \"iana\",\n \"extensions\": [\"clkp\"]\n },\n \"application/vnd.crick.clicker.template\": {\n \"source\": \"iana\",\n \"extensions\": [\"clkt\"]\n },\n \"application/vnd.crick.clicker.wordbank\": {\n \"source\": \"iana\",\n \"extensions\": [\"clkw\"]\n },\n \"application/vnd.criticaltools.wbs+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"wbs\"]\n },\n \"application/vnd.cryptii.pipe+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.crypto-shade-file\": {\n \"source\": \"iana\"\n },\n \"application/vnd.cryptomator.encrypted\": {\n \"source\": \"iana\"\n },\n \"application/vnd.cryptomator.vault\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ctc-posml\": {\n \"source\": \"iana\",\n \"extensions\": [\"pml\"]\n },\n \"application/vnd.ctct.ws+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.cups-pdf\": {\n \"source\": \"iana\"\n },\n \"application/vnd.cups-postscript\": {\n \"source\": \"iana\"\n },\n \"application/vnd.cups-ppd\": {\n \"source\": \"iana\",\n \"extensions\": [\"ppd\"]\n },\n \"application/vnd.cups-raster\": {\n \"source\": \"iana\"\n },\n \"application/vnd.cups-raw\": {\n \"source\": \"iana\"\n },\n \"application/vnd.curl\": {\n \"source\": \"iana\"\n },\n \"application/vnd.curl.car\": {\n \"source\": \"apache\",\n \"extensions\": [\"car\"]\n },\n \"application/vnd.curl.pcurl\": {\n \"source\": \"apache\",\n \"extensions\": [\"pcurl\"]\n },\n \"application/vnd.cyan.dean.root+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.cybank\": {\n \"source\": \"iana\"\n },\n \"application/vnd.cyclonedx+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.cyclonedx+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.d2l.coursepackage1p0+zip\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"application/vnd.d3m-dataset\": {\n \"source\": \"iana\"\n },\n \"application/vnd.d3m-problem\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dart\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"dart\"]\n },\n \"application/vnd.data-vision.rdz\": {\n \"source\": \"iana\",\n \"extensions\": [\"rdz\"]\n },\n \"application/vnd.datapackage+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.dataresource+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.dbf\": {\n \"source\": \"iana\",\n \"extensions\": [\"dbf\"]\n },\n \"application/vnd.debian.binary-package\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dece.data\": {\n \"source\": \"iana\",\n \"extensions\": [\"uvf\",\"uvvf\",\"uvd\",\"uvvd\"]\n },\n \"application/vnd.dece.ttml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"uvt\",\"uvvt\"]\n },\n \"application/vnd.dece.unspecified\": {\n \"source\": \"iana\",\n \"extensions\": [\"uvx\",\"uvvx\"]\n },\n \"application/vnd.dece.zip\": {\n \"source\": \"iana\",\n \"extensions\": [\"uvz\",\"uvvz\"]\n },\n \"application/vnd.denovo.fcselayout-link\": {\n \"source\": \"iana\",\n \"extensions\": [\"fe_launch\"]\n },\n \"application/vnd.desmume.movie\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dir-bi.plate-dl-nosuffix\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dm.delegation+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.dna\": {\n \"source\": \"iana\",\n \"extensions\": [\"dna\"]\n },\n \"application/vnd.document+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.dolby.mlp\": {\n \"source\": \"apache\",\n \"extensions\": [\"mlp\"]\n },\n \"application/vnd.dolby.mobile.1\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dolby.mobile.2\": {\n \"source\": \"iana\"\n },\n \"application/vnd.doremir.scorecloud-binary-document\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dpgraph\": {\n \"source\": \"iana\",\n \"extensions\": [\"dpg\"]\n },\n \"application/vnd.dreamfactory\": {\n \"source\": \"iana\",\n \"extensions\": [\"dfac\"]\n },\n \"application/vnd.drive+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.ds-keypoint\": {\n \"source\": \"apache\",\n \"extensions\": [\"kpxx\"]\n },\n \"application/vnd.dtg.local\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dtg.local.flash\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dtg.local.html\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.ait\": {\n \"source\": \"iana\",\n \"extensions\": [\"ait\"]\n },\n \"application/vnd.dvb.dvbisl+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.dvb.dvbj\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.esgcontainer\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.ipdcdftnotifaccess\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.ipdcesgaccess\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.ipdcesgaccess2\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.ipdcesgpdd\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.ipdcroaming\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.iptv.alfec-base\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.iptv.alfec-enhancement\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.notif-aggregate-root+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.dvb.notif-container+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.dvb.notif-generic+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.dvb.notif-ia-msglist+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.dvb.notif-ia-registration-request+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.dvb.notif-ia-registration-response+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.dvb.notif-init+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.dvb.pfr\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.service\": {\n \"source\": \"iana\",\n \"extensions\": [\"svc\"]\n },\n \"application/vnd.dxr\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dynageo\": {\n \"source\": \"iana\",\n \"extensions\": [\"geo\"]\n },\n \"application/vnd.dzr\": {\n \"source\": \"iana\"\n },\n \"application/vnd.easykaraoke.cdgdownload\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ecdis-update\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ecip.rlp\": {\n \"source\": \"iana\"\n },\n \"application/vnd.eclipse.ditto+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.ecowin.chart\": {\n \"source\": \"iana\",\n \"extensions\": [\"mag\"]\n },\n \"application/vnd.ecowin.filerequest\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ecowin.fileupdate\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ecowin.series\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ecowin.seriesrequest\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ecowin.seriesupdate\": {\n \"source\": \"iana\"\n },\n \"application/vnd.efi.img\": {\n \"source\": \"iana\"\n },\n \"application/vnd.efi.iso\": {\n \"source\": \"iana\"\n },\n \"application/vnd.emclient.accessrequest+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.enliven\": {\n \"source\": \"iana\",\n \"extensions\": [\"nml\"]\n },\n \"application/vnd.enphase.envoy\": {\n \"source\": \"iana\"\n },\n \"application/vnd.eprints.data+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.epson.esf\": {\n \"source\": \"iana\",\n \"extensions\": [\"esf\"]\n },\n \"application/vnd.epson.msf\": {\n \"source\": \"iana\",\n \"extensions\": [\"msf\"]\n },\n \"application/vnd.epson.quickanime\": {\n \"source\": \"iana\",\n \"extensions\": [\"qam\"]\n },\n \"application/vnd.epson.salt\": {\n \"source\": \"iana\",\n \"extensions\": [\"slt\"]\n },\n \"application/vnd.epson.ssf\": {\n \"source\": \"iana\",\n \"extensions\": [\"ssf\"]\n },\n \"application/vnd.ericsson.quickcall\": {\n \"source\": \"iana\"\n },\n \"application/vnd.espass-espass+zip\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"application/vnd.eszigno3+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"es3\",\"et3\"]\n },\n \"application/vnd.etsi.aoc+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.etsi.asic-e+zip\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"application/vnd.etsi.asic-s+zip\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"application/vnd.etsi.cug+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.etsi.iptvcommand+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.etsi.iptvdiscovery+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.etsi.iptvprofile+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.etsi.iptvsad-bc+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.etsi.iptvsad-cod+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.etsi.iptvsad-npvr+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.etsi.iptvservice+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.etsi.iptvsync+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.etsi.iptvueprofile+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.etsi.mcid+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.etsi.mheg5\": {\n \"source\": \"iana\"\n },\n \"application/vnd.etsi.overload-control-policy-dataset+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.etsi.pstn+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.etsi.sci+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.etsi.simservs+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.etsi.timestamp-token\": {\n \"source\": \"iana\"\n },\n \"application/vnd.etsi.tsl+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.etsi.tsl.der\": {\n \"source\": \"iana\"\n },\n \"application/vnd.eu.kasparian.car+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.eudora.data\": {\n \"source\": \"iana\"\n },\n \"application/vnd.evolv.ecig.profile\": {\n \"source\": \"iana\"\n },\n \"application/vnd.evolv.ecig.settings\": {\n \"source\": \"iana\"\n },\n \"application/vnd.evolv.ecig.theme\": {\n \"source\": \"iana\"\n },\n \"application/vnd.exstream-empower+zip\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"application/vnd.exstream-package\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ezpix-album\": {\n \"source\": \"iana\",\n \"extensions\": [\"ez2\"]\n },\n \"application/vnd.ezpix-package\": {\n \"source\": \"iana\",\n \"extensions\": [\"ez3\"]\n },\n \"application/vnd.f-secure.mobile\": {\n \"source\": \"iana\"\n },\n \"application/vnd.familysearch.gedcom+zip\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"application/vnd.fastcopy-disk-image\": {\n \"source\": \"iana\"\n },\n \"application/vnd.fdf\": {\n \"source\": \"iana\",\n \"extensions\": [\"fdf\"]\n },\n \"application/vnd.fdsn.mseed\": {\n \"source\": \"iana\",\n \"extensions\": [\"mseed\"]\n },\n \"application/vnd.fdsn.seed\": {\n \"source\": \"iana\",\n \"extensions\": [\"seed\",\"dataless\"]\n },\n \"application/vnd.ffsns\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ficlab.flb+zip\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"application/vnd.filmit.zfc\": {\n \"source\": \"iana\"\n },\n \"application/vnd.fints\": {\n \"source\": \"iana\"\n },\n \"application/vnd.firemonkeys.cloudcell\": {\n \"source\": \"iana\"\n },\n \"application/vnd.flographit\": {\n \"source\": \"iana\",\n \"extensions\": [\"gph\"]\n },\n \"application/vnd.fluxtime.clip\": {\n \"source\": \"iana\",\n \"extensions\": [\"ftc\"]\n },\n \"application/vnd.font-fontforge-sfd\": {\n \"source\": \"iana\"\n },\n \"application/vnd.framemaker\": {\n \"source\": \"iana\",\n \"extensions\": [\"fm\",\"frame\",\"maker\",\"book\"]\n },\n \"application/vnd.frogans.fnc\": {\n \"source\": \"iana\",\n \"extensions\": [\"fnc\"]\n },\n \"application/vnd.frogans.ltf\": {\n \"source\": \"iana\",\n \"extensions\": [\"ltf\"]\n },\n \"application/vnd.fsc.weblaunch\": {\n \"source\": \"iana\",\n \"extensions\": [\"fsc\"]\n },\n \"application/vnd.fujifilm.fb.docuworks\": {\n \"source\": \"iana\"\n },\n \"application/vnd.fujifilm.fb.docuworks.binder\": {\n \"source\": \"iana\"\n },\n \"application/vnd.fujifilm.fb.docuworks.container\": {\n \"source\": \"iana\"\n },\n \"application/vnd.fujifilm.fb.jfi+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.fujitsu.oasys\": {\n \"source\": \"iana\",\n \"extensions\": [\"oas\"]\n },\n \"application/vnd.fujitsu.oasys2\": {\n \"source\": \"iana\",\n \"extensions\": [\"oa2\"]\n },\n \"application/vnd.fujitsu.oasys3\": {\n \"source\": \"iana\",\n \"extensions\": [\"oa3\"]\n },\n \"application/vnd.fujitsu.oasysgp\": {\n \"source\": \"iana\",\n \"extensions\": [\"fg5\"]\n },\n \"application/vnd.fujitsu.oasysprs\": {\n \"source\": \"iana\",\n \"extensions\": [\"bh2\"]\n },\n \"application/vnd.fujixerox.art-ex\": {\n \"source\": \"iana\"\n },\n \"application/vnd.fujixerox.art4\": {\n \"source\": \"iana\"\n },\n \"application/vnd.fujixerox.ddd\": {\n \"source\": \"iana\",\n \"extensions\": [\"ddd\"]\n },\n \"application/vnd.fujixerox.docuworks\": {\n \"source\": \"iana\",\n \"extensions\": [\"xdw\"]\n },\n \"application/vnd.fujixerox.docuworks.binder\": {\n \"source\": \"iana\",\n \"extensions\": [\"xbd\"]\n },\n \"application/vnd.fujixerox.docuworks.container\": {\n \"source\": \"iana\"\n },\n \"application/vnd.fujixerox.hbpl\": {\n \"source\": \"iana\"\n },\n \"application/vnd.fut-misnet\": {\n \"source\": \"iana\"\n },\n \"application/vnd.futoin+cbor\": {\n \"source\": \"iana\"\n },\n \"application/vnd.futoin+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.fuzzysheet\": {\n \"source\": \"iana\",\n \"extensions\": [\"fzs\"]\n },\n \"application/vnd.genomatix.tuxedo\": {\n \"source\": \"iana\",\n \"extensions\": [\"txd\"]\n },\n \"application/vnd.gentics.grd+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.geo+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.geocube+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.geogebra.file\": {\n \"source\": \"iana\",\n \"extensions\": [\"ggb\"]\n },\n \"application/vnd.geogebra.slides\": {\n \"source\": \"iana\"\n },\n \"application/vnd.geogebra.tool\": {\n \"source\": \"iana\",\n \"extensions\": [\"ggt\"]\n },\n \"application/vnd.geometry-explorer\": {\n \"source\": \"iana\",\n \"extensions\": [\"gex\",\"gre\"]\n },\n \"application/vnd.geonext\": {\n \"source\": \"iana\",\n \"extensions\": [\"gxt\"]\n },\n \"application/vnd.geoplan\": {\n \"source\": \"iana\",\n \"extensions\": [\"g2w\"]\n },\n \"application/vnd.geospace\": {\n \"source\": \"iana\",\n \"extensions\": [\"g3w\"]\n },\n \"application/vnd.gerber\": {\n \"source\": \"iana\"\n },\n \"application/vnd.globalplatform.card-content-mgt\": {\n \"source\": \"iana\"\n },\n \"application/vnd.globalplatform.card-content-mgt-response\": {\n \"source\": \"iana\"\n },\n \"application/vnd.gmx\": {\n \"source\": \"iana\",\n \"extensions\": [\"gmx\"]\n },\n \"application/vnd.google-apps.document\": {\n \"compressible\": false,\n \"extensions\": [\"gdoc\"]\n },\n \"application/vnd.google-apps.presentation\": {\n \"compressible\": false,\n \"extensions\": [\"gslides\"]\n },\n \"application/vnd.google-apps.spreadsheet\": {\n \"compressible\": false,\n \"extensions\": [\"gsheet\"]\n },\n \"application/vnd.google-earth.kml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"kml\"]\n },\n \"application/vnd.google-earth.kmz\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"kmz\"]\n },\n \"application/vnd.gov.sk.e-form+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.gov.sk.e-form+zip\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"application/vnd.gov.sk.xmldatacontainer+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.grafeq\": {\n \"source\": \"iana\",\n \"extensions\": [\"gqf\",\"gqs\"]\n },\n \"application/vnd.gridmp\": {\n \"source\": \"iana\"\n },\n \"application/vnd.groove-account\": {\n \"source\": \"iana\",\n \"extensions\": [\"gac\"]\n },\n \"application/vnd.groove-help\": {\n \"source\": \"iana\",\n \"extensions\": [\"ghf\"]\n },\n \"application/vnd.groove-identity-message\": {\n \"source\": \"iana\",\n \"extensions\": [\"gim\"]\n },\n \"application/vnd.groove-injector\": {\n \"source\": \"iana\",\n \"extensions\": [\"grv\"]\n },\n \"application/vnd.groove-tool-message\": {\n \"source\": \"iana\",\n \"extensions\": [\"gtm\"]\n },\n \"application/vnd.groove-tool-template\": {\n \"source\": \"iana\",\n \"extensions\": [\"tpl\"]\n },\n \"application/vnd.groove-vcard\": {\n \"source\": \"iana\",\n \"extensions\": [\"vcg\"]\n },\n \"application/vnd.hal+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.hal+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"hal\"]\n },\n \"application/vnd.handheld-entertainment+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"zmm\"]\n },\n \"application/vnd.hbci\": {\n \"source\": \"iana\",\n \"extensions\": [\"hbci\"]\n },\n \"application/vnd.hc+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.hcl-bireports\": {\n \"source\": \"iana\"\n },\n \"application/vnd.hdt\": {\n \"source\": \"iana\"\n },\n \"application/vnd.heroku+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.hhe.lesson-player\": {\n \"source\": \"iana\",\n \"extensions\": [\"les\"]\n },\n \"application/vnd.hl7cda+xml\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true\n },\n \"application/vnd.hl7v2+xml\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true\n },\n \"application/vnd.hp-hpgl\": {\n \"source\": \"iana\",\n \"extensions\": [\"hpgl\"]\n },\n \"application/vnd.hp-hpid\": {\n \"source\": \"iana\",\n \"extensions\": [\"hpid\"]\n },\n \"application/vnd.hp-hps\": {\n \"source\": \"iana\",\n \"extensions\": [\"hps\"]\n },\n \"application/vnd.hp-jlyt\": {\n \"source\": \"iana\",\n \"extensions\": [\"jlt\"]\n },\n \"application/vnd.hp-pcl\": {\n \"source\": \"iana\",\n \"extensions\": [\"pcl\"]\n },\n \"application/vnd.hp-pclxl\": {\n \"source\": \"iana\",\n \"extensions\": [\"pclxl\"]\n },\n \"application/vnd.httphone\": {\n \"source\": \"iana\"\n },\n \"application/vnd.hydrostatix.sof-data\": {\n \"source\": \"iana\",\n \"extensions\": [\"sfd-hdstx\"]\n },\n \"application/vnd.hyper+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.hyper-item+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.hyperdrive+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.hzn-3d-crossword\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ibm.afplinedata\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ibm.electronic-media\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ibm.minipay\": {\n \"source\": \"iana\",\n \"extensions\": [\"mpy\"]\n },\n \"application/vnd.ibm.modcap\": {\n \"source\": \"iana\",\n \"extensions\": [\"afp\",\"listafp\",\"list3820\"]\n },\n \"application/vnd.ibm.rights-management\": {\n \"source\": \"iana\",\n \"extensions\": [\"irm\"]\n },\n \"application/vnd.ibm.secure-container\": {\n \"source\": \"iana\",\n \"extensions\": [\"sc\"]\n },\n \"application/vnd.iccprofile\": {\n \"source\": \"iana\",\n \"extensions\": [\"icc\",\"icm\"]\n },\n \"application/vnd.ieee.1905\": {\n \"source\": \"iana\"\n },\n \"application/vnd.igloader\": {\n \"source\": \"iana\",\n \"extensions\": [\"igl\"]\n },\n \"application/vnd.imagemeter.folder+zip\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"application/vnd.imagemeter.image+zip\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"application/vnd.immervision-ivp\": {\n \"source\": \"iana\",\n \"extensions\": [\"ivp\"]\n },\n \"application/vnd.immervision-ivu\": {\n \"source\": \"iana\",\n \"extensions\": [\"ivu\"]\n },\n \"application/vnd.ims.imsccv1p1\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ims.imsccv1p2\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ims.imsccv1p3\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ims.lis.v2.result+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.ims.lti.v2.toolconsumerprofile+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.ims.lti.v2.toolproxy+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.ims.lti.v2.toolproxy.id+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.ims.lti.v2.toolsettings+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.ims.lti.v2.toolsettings.simple+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.informedcontrol.rms+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.informix-visionary\": {\n \"source\": \"iana\"\n },\n \"application/vnd.infotech.project\": {\n \"source\": \"iana\"\n },\n \"application/vnd.infotech.project+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.innopath.wamp.notification\": {\n \"source\": \"iana\"\n },\n \"application/vnd.insors.igm\": {\n \"source\": \"iana\",\n \"extensions\": [\"igm\"]\n },\n \"application/vnd.intercon.formnet\": {\n \"source\": \"iana\",\n \"extensions\": [\"xpw\",\"xpx\"]\n },\n \"application/vnd.intergeo\": {\n \"source\": \"iana\",\n \"extensions\": [\"i2g\"]\n },\n \"application/vnd.intertrust.digibox\": {\n \"source\": \"iana\"\n },\n \"application/vnd.intertrust.nncp\": {\n \"source\": \"iana\"\n },\n \"application/vnd.intu.qbo\": {\n \"source\": \"iana\",\n \"extensions\": [\"qbo\"]\n },\n \"application/vnd.intu.qfx\": {\n \"source\": \"iana\",\n \"extensions\": [\"qfx\"]\n },\n \"application/vnd.iptc.g2.catalogitem+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.iptc.g2.conceptitem+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.iptc.g2.knowledgeitem+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.iptc.g2.newsitem+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.iptc.g2.newsmessage+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.iptc.g2.packageitem+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.iptc.g2.planningitem+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.ipunplugged.rcprofile\": {\n \"source\": \"iana\",\n \"extensions\": [\"rcprofile\"]\n },\n \"application/vnd.irepository.package+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"irp\"]\n },\n \"application/vnd.is-xpr\": {\n \"source\": \"iana\",\n \"extensions\": [\"xpr\"]\n },\n \"application/vnd.isac.fcs\": {\n \"source\": \"iana\",\n \"extensions\": [\"fcs\"]\n },\n \"application/vnd.iso11783-10+zip\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"application/vnd.jam\": {\n \"source\": \"iana\",\n \"extensions\": [\"jam\"]\n },\n \"application/vnd.japannet-directory-service\": {\n \"source\": \"iana\"\n },\n \"application/vnd.japannet-jpnstore-wakeup\": {\n \"source\": \"iana\"\n },\n \"application/vnd.japannet-payment-wakeup\": {\n \"source\": \"iana\"\n },\n \"application/vnd.japannet-registration\": {\n \"source\": \"iana\"\n },\n \"application/vnd.japannet-registration-wakeup\": {\n \"source\": \"iana\"\n },\n \"application/vnd.japannet-setstore-wakeup\": {\n \"source\": \"iana\"\n },\n \"application/vnd.japannet-verification\": {\n \"source\": \"iana\"\n },\n \"application/vnd.japannet-verification-wakeup\": {\n \"source\": \"iana\"\n },\n \"application/vnd.jcp.javame.midlet-rms\": {\n \"source\": \"iana\",\n \"extensions\": [\"rms\"]\n },\n \"application/vnd.jisp\": {\n \"source\": \"iana\",\n \"extensions\": [\"jisp\"]\n },\n \"application/vnd.joost.joda-archive\": {\n \"source\": \"iana\",\n \"extensions\": [\"joda\"]\n },\n \"application/vnd.jsk.isdn-ngn\": {\n \"source\": \"iana\"\n },\n \"application/vnd.kahootz\": {\n \"source\": \"iana\",\n \"extensions\": [\"ktz\",\"ktr\"]\n },\n \"application/vnd.kde.karbon\": {\n \"source\": \"iana\",\n \"extensions\": [\"karbon\"]\n },\n \"application/vnd.kde.kchart\": {\n \"source\": \"iana\",\n \"extensions\": [\"chrt\"]\n },\n \"application/vnd.kde.kformula\": {\n \"source\": \"iana\",\n \"extensions\": [\"kfo\"]\n },\n \"application/vnd.kde.kivio\": {\n \"source\": \"iana\",\n \"extensions\": [\"flw\"]\n },\n \"application/vnd.kde.kontour\": {\n \"source\": \"iana\",\n \"extensions\": [\"kon\"]\n },\n \"application/vnd.kde.kpresenter\": {\n \"source\": \"iana\",\n \"extensions\": [\"kpr\",\"kpt\"]\n },\n \"application/vnd.kde.kspread\": {\n \"source\": \"iana\",\n \"extensions\": [\"ksp\"]\n },\n \"application/vnd.kde.kword\": {\n \"source\": \"iana\",\n \"extensions\": [\"kwd\",\"kwt\"]\n },\n \"application/vnd.kenameaapp\": {\n \"source\": \"iana\",\n \"extensions\": [\"htke\"]\n },\n \"application/vnd.kidspiration\": {\n \"source\": \"iana\",\n \"extensions\": [\"kia\"]\n },\n \"application/vnd.kinar\": {\n \"source\": \"iana\",\n \"extensions\": [\"kne\",\"knp\"]\n },\n \"application/vnd.koan\": {\n \"source\": \"iana\",\n \"extensions\": [\"skp\",\"skd\",\"skt\",\"skm\"]\n },\n \"application/vnd.kodak-descriptor\": {\n \"source\": \"iana\",\n \"extensions\": [\"sse\"]\n },\n \"application/vnd.las\": {\n \"source\": \"iana\"\n },\n \"application/vnd.las.las+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.las.las+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"lasxml\"]\n },\n \"application/vnd.laszip\": {\n \"source\": \"iana\"\n },\n \"application/vnd.leap+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.liberty-request+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.llamagraphics.life-balance.desktop\": {\n \"source\": \"iana\",\n \"extensions\": [\"lbd\"]\n },\n \"application/vnd.llamagraphics.life-balance.exchange+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"lbe\"]\n },\n \"application/vnd.logipipe.circuit+zip\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"application/vnd.loom\": {\n \"source\": \"iana\"\n },\n \"application/vnd.lotus-1-2-3\": {\n \"source\": \"iana\",\n \"extensions\": [\"123\"]\n },\n \"application/vnd.lotus-approach\": {\n \"source\": \"iana\",\n \"extensions\": [\"apr\"]\n },\n \"application/vnd.lotus-freelance\": {\n \"source\": \"iana\",\n \"extensions\": [\"pre\"]\n },\n \"application/vnd.lotus-notes\": {\n \"source\": \"iana\",\n \"extensions\": [\"nsf\"]\n },\n \"application/vnd.lotus-organizer\": {\n \"source\": \"iana\",\n \"extensions\": [\"org\"]\n },\n \"application/vnd.lotus-screencam\": {\n \"source\": \"iana\",\n \"extensions\": [\"scm\"]\n },\n \"application/vnd.lotus-wordpro\": {\n \"source\": \"iana\",\n \"extensions\": [\"lwp\"]\n },\n \"application/vnd.macports.portpkg\": {\n \"source\": \"iana\",\n \"extensions\": [\"portpkg\"]\n },\n \"application/vnd.mapbox-vector-tile\": {\n \"source\": \"iana\",\n \"extensions\": [\"mvt\"]\n },\n \"application/vnd.marlin.drm.actiontoken+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.marlin.drm.conftoken+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.marlin.drm.license+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.marlin.drm.mdcf\": {\n \"source\": \"iana\"\n },\n \"application/vnd.mason+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.maxar.archive.3tz+zip\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"application/vnd.maxmind.maxmind-db\": {\n \"source\": \"iana\"\n },\n \"application/vnd.mcd\": {\n \"source\": \"iana\",\n \"extensions\": [\"mcd\"]\n },\n \"application/vnd.medcalcdata\": {\n \"source\": \"iana\",\n \"extensions\": [\"mc1\"]\n },\n \"application/vnd.mediastation.cdkey\": {\n \"source\": \"iana\",\n \"extensions\": [\"cdkey\"]\n },\n \"application/vnd.meridian-slingshot\": {\n \"source\": \"iana\"\n },\n \"application/vnd.mfer\": {\n \"source\": \"iana\",\n \"extensions\": [\"mwf\"]\n },\n \"application/vnd.mfmp\": {\n \"source\": \"iana\",\n \"extensions\": [\"mfm\"]\n },\n \"application/vnd.micro+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.micrografx.flo\": {\n \"source\": \"iana\",\n \"extensions\": [\"flo\"]\n },\n \"application/vnd.micrografx.igx\": {\n \"source\": \"iana\",\n \"extensions\": [\"igx\"]\n },\n \"application/vnd.microsoft.portable-executable\": {\n \"source\": \"iana\"\n },\n \"application/vnd.microsoft.windows.thumbnail-cache\": {\n \"source\": \"iana\"\n },\n \"application/vnd.miele+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.mif\": {\n \"source\": \"iana\",\n \"extensions\": [\"mif\"]\n },\n \"application/vnd.minisoft-hp3000-save\": {\n \"source\": \"iana\"\n },\n \"application/vnd.mitsubishi.misty-guard.trustweb\": {\n \"source\": \"iana\"\n },\n \"application/vnd.mobius.daf\": {\n \"source\": \"iana\",\n \"extensions\": [\"daf\"]\n },\n \"application/vnd.mobius.dis\": {\n \"source\": \"iana\",\n \"extensions\": [\"dis\"]\n },\n \"application/vnd.mobius.mbk\": {\n \"source\": \"iana\",\n \"extensions\": [\"mbk\"]\n },\n \"application/vnd.mobius.mqy\": {\n \"source\": \"iana\",\n \"extensions\": [\"mqy\"]\n },\n \"application/vnd.mobius.msl\": {\n \"source\": \"iana\",\n \"extensions\": [\"msl\"]\n },\n \"application/vnd.mobius.plc\": {\n \"source\": \"iana\",\n \"extensions\": [\"plc\"]\n },\n \"application/vnd.mobius.txf\": {\n \"source\": \"iana\",\n \"extensions\": [\"txf\"]\n },\n \"application/vnd.mophun.application\": {\n \"source\": \"iana\",\n \"extensions\": [\"mpn\"]\n },\n \"application/vnd.mophun.certificate\": {\n \"source\": \"iana\",\n \"extensions\": [\"mpc\"]\n },\n \"application/vnd.motorola.flexsuite\": {\n \"source\": \"iana\"\n },\n \"application/vnd.motorola.flexsuite.adsi\": {\n \"source\": \"iana\"\n },\n \"application/vnd.motorola.flexsuite.fis\": {\n \"source\": \"iana\"\n },\n \"application/vnd.motorola.flexsuite.gotap\": {\n \"source\": \"iana\"\n },\n \"application/vnd.motorola.flexsuite.kmr\": {\n \"source\": \"iana\"\n },\n \"application/vnd.motorola.flexsuite.ttc\": {\n \"source\": \"iana\"\n },\n \"application/vnd.motorola.flexsuite.wem\": {\n \"source\": \"iana\"\n },\n \"application/vnd.motorola.iprm\": {\n \"source\": \"iana\"\n },\n \"application/vnd.mozilla.xul+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"xul\"]\n },\n \"application/vnd.ms-3mfdocument\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ms-artgalry\": {\n \"source\": \"iana\",\n \"extensions\": [\"cil\"]\n },\n \"application/vnd.ms-asf\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ms-cab-compressed\": {\n \"source\": \"iana\",\n \"extensions\": [\"cab\"]\n },\n \"application/vnd.ms-color.iccprofile\": {\n \"source\": \"apache\"\n },\n \"application/vnd.ms-excel\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"xls\",\"xlm\",\"xla\",\"xlc\",\"xlt\",\"xlw\"]\n },\n \"application/vnd.ms-excel.addin.macroenabled.12\": {\n \"source\": \"iana\",\n \"extensions\": [\"xlam\"]\n },\n \"application/vnd.ms-excel.sheet.binary.macroenabled.12\": {\n \"source\": \"iana\",\n \"extensions\": [\"xlsb\"]\n },\n \"application/vnd.ms-excel.sheet.macroenabled.12\": {\n \"source\": \"iana\",\n \"extensions\": [\"xlsm\"]\n },\n \"application/vnd.ms-excel.template.macroenabled.12\": {\n \"source\": \"iana\",\n \"extensions\": [\"xltm\"]\n },\n \"application/vnd.ms-fontobject\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"eot\"]\n },\n \"application/vnd.ms-htmlhelp\": {\n \"source\": \"iana\",\n \"extensions\": [\"chm\"]\n },\n \"application/vnd.ms-ims\": {\n \"source\": \"iana\",\n \"extensions\": [\"ims\"]\n },\n \"application/vnd.ms-lrm\": {\n \"source\": \"iana\",\n \"extensions\": [\"lrm\"]\n },\n \"application/vnd.ms-office.activex+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.ms-officetheme\": {\n \"source\": \"iana\",\n \"extensions\": [\"thmx\"]\n },\n \"application/vnd.ms-opentype\": {\n \"source\": \"apache\",\n \"compressible\": true\n },\n \"application/vnd.ms-outlook\": {\n \"compressible\": false,\n \"extensions\": [\"msg\"]\n },\n \"application/vnd.ms-package.obfuscated-opentype\": {\n \"source\": \"apache\"\n },\n \"application/vnd.ms-pki.seccat\": {\n \"source\": \"apache\",\n \"extensions\": [\"cat\"]\n },\n \"application/vnd.ms-pki.stl\": {\n \"source\": \"apache\",\n \"extensions\": [\"stl\"]\n },\n \"application/vnd.ms-playready.initiator+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.ms-powerpoint\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"ppt\",\"pps\",\"pot\"]\n },\n \"application/vnd.ms-powerpoint.addin.macroenabled.12\": {\n \"source\": \"iana\",\n \"extensions\": [\"ppam\"]\n },\n \"application/vnd.ms-powerpoint.presentation.macroenabled.12\": {\n \"source\": \"iana\",\n \"extensions\": [\"pptm\"]\n },\n \"application/vnd.ms-powerpoint.slide.macroenabled.12\": {\n \"source\": \"iana\",\n \"extensions\": [\"sldm\"]\n },\n \"application/vnd.ms-powerpoint.slideshow.macroenabled.12\": {\n \"source\": \"iana\",\n \"extensions\": [\"ppsm\"]\n },\n \"application/vnd.ms-powerpoint.template.macroenabled.12\": {\n \"source\": \"iana\",\n \"extensions\": [\"potm\"]\n },\n \"application/vnd.ms-printdevicecapabilities+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.ms-printing.printticket+xml\": {\n \"source\": \"apache\",\n \"compressible\": true\n },\n \"application/vnd.ms-printschematicket+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.ms-project\": {\n \"source\": \"iana\",\n \"extensions\": [\"mpp\",\"mpt\"]\n },\n \"application/vnd.ms-tnef\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ms-windows.devicepairing\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ms-windows.nwprinting.oob\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ms-windows.printerpairing\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ms-windows.wsd.oob\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ms-wmdrm.lic-chlg-req\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ms-wmdrm.lic-resp\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ms-wmdrm.meter-chlg-req\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ms-wmdrm.meter-resp\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ms-word.document.macroenabled.12\": {\n \"source\": \"iana\",\n \"extensions\": [\"docm\"]\n },\n \"application/vnd.ms-word.template.macroenabled.12\": {\n \"source\": \"iana\",\n \"extensions\": [\"dotm\"]\n },\n \"application/vnd.ms-works\": {\n \"source\": \"iana\",\n \"extensions\": [\"wps\",\"wks\",\"wcm\",\"wdb\"]\n },\n \"application/vnd.ms-wpl\": {\n \"source\": \"iana\",\n \"extensions\": [\"wpl\"]\n },\n \"application/vnd.ms-xpsdocument\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"xps\"]\n },\n \"application/vnd.msa-disk-image\": {\n \"source\": \"iana\"\n },\n \"application/vnd.mseq\": {\n \"source\": \"iana\",\n \"extensions\": [\"mseq\"]\n },\n \"application/vnd.msign\": {\n \"source\": \"iana\"\n },\n \"application/vnd.multiad.creator\": {\n \"source\": \"iana\"\n },\n \"application/vnd.multiad.creator.cif\": {\n \"source\": \"iana\"\n },\n \"application/vnd.music-niff\": {\n \"source\": \"iana\"\n },\n \"application/vnd.musician\": {\n \"source\": \"iana\",\n \"extensions\": [\"mus\"]\n },\n \"application/vnd.muvee.style\": {\n \"source\": \"iana\",\n \"extensions\": [\"msty\"]\n },\n \"application/vnd.mynfc\": {\n \"source\": \"iana\",\n \"extensions\": [\"taglet\"]\n },\n \"application/vnd.nacamar.ybrid+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.ncd.control\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ncd.reference\": {\n \"source\": \"iana\"\n },\n \"application/vnd.nearst.inv+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.nebumind.line\": {\n \"source\": \"iana\"\n },\n \"application/vnd.nervana\": {\n \"source\": \"iana\"\n },\n \"application/vnd.netfpx\": {\n \"source\": \"iana\"\n },\n \"application/vnd.neurolanguage.nlu\": {\n \"source\": \"iana\",\n \"extensions\": [\"nlu\"]\n },\n \"application/vnd.nimn\": {\n \"source\": \"iana\"\n },\n \"application/vnd.nintendo.nitro.rom\": {\n \"source\": \"iana\"\n },\n \"application/vnd.nintendo.snes.rom\": {\n \"source\": \"iana\"\n },\n \"application/vnd.nitf\": {\n \"source\": \"iana\",\n \"extensions\": [\"ntf\",\"nitf\"]\n },\n \"application/vnd.noblenet-directory\": {\n \"source\": \"iana\",\n \"extensions\": [\"nnd\"]\n },\n \"application/vnd.noblenet-sealer\": {\n \"source\": \"iana\",\n \"extensions\": [\"nns\"]\n },\n \"application/vnd.noblenet-web\": {\n \"source\": \"iana\",\n \"extensions\": [\"nnw\"]\n },\n \"application/vnd.nokia.catalogs\": {\n \"source\": \"iana\"\n },\n \"application/vnd.nokia.conml+wbxml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.nokia.conml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.nokia.iptv.config+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.nokia.isds-radio-presets\": {\n \"source\": \"iana\"\n },\n \"application/vnd.nokia.landmark+wbxml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.nokia.landmark+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.nokia.landmarkcollection+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.nokia.n-gage.ac+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"ac\"]\n },\n \"application/vnd.nokia.n-gage.data\": {\n \"source\": \"iana\",\n \"extensions\": [\"ngdat\"]\n },\n \"application/vnd.nokia.n-gage.symbian.install\": {\n \"source\": \"iana\",\n \"extensions\": [\"n-gage\"]\n },\n \"application/vnd.nokia.ncd\": {\n \"source\": \"iana\"\n },\n \"application/vnd.nokia.pcd+wbxml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.nokia.pcd+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.nokia.radio-preset\": {\n \"source\": \"iana\",\n \"extensions\": [\"rpst\"]\n },\n \"application/vnd.nokia.radio-presets\": {\n \"source\": \"iana\",\n \"extensions\": [\"rpss\"]\n },\n \"application/vnd.novadigm.edm\": {\n \"source\": \"iana\",\n \"extensions\": [\"edm\"]\n },\n \"application/vnd.novadigm.edx\": {\n \"source\": \"iana\",\n \"extensions\": [\"edx\"]\n },\n \"application/vnd.novadigm.ext\": {\n \"source\": \"iana\",\n \"extensions\": [\"ext\"]\n },\n \"application/vnd.ntt-local.content-share\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ntt-local.file-transfer\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ntt-local.ogw_remote-access\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ntt-local.sip-ta_remote\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ntt-local.sip-ta_tcp_stream\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oasis.opendocument.chart\": {\n \"source\": \"iana\",\n \"extensions\": [\"odc\"]\n },\n \"application/vnd.oasis.opendocument.chart-template\": {\n \"source\": \"iana\",\n \"extensions\": [\"otc\"]\n },\n \"application/vnd.oasis.opendocument.database\": {\n \"source\": \"iana\",\n \"extensions\": [\"odb\"]\n },\n \"application/vnd.oasis.opendocument.formula\": {\n \"source\": \"iana\",\n \"extensions\": [\"odf\"]\n },\n \"application/vnd.oasis.opendocument.formula-template\": {\n \"source\": \"iana\",\n \"extensions\": [\"odft\"]\n },\n \"application/vnd.oasis.opendocument.graphics\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"odg\"]\n },\n \"application/vnd.oasis.opendocument.graphics-template\": {\n \"source\": \"iana\",\n \"extensions\": [\"otg\"]\n },\n \"application/vnd.oasis.opendocument.image\": {\n \"source\": \"iana\",\n \"extensions\": [\"odi\"]\n },\n \"application/vnd.oasis.opendocument.image-template\": {\n \"source\": \"iana\",\n \"extensions\": [\"oti\"]\n },\n \"application/vnd.oasis.opendocument.presentation\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"odp\"]\n },\n \"application/vnd.oasis.opendocument.presentation-template\": {\n \"source\": \"iana\",\n \"extensions\": [\"otp\"]\n },\n \"application/vnd.oasis.opendocument.spreadsheet\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"ods\"]\n },\n \"application/vnd.oasis.opendocument.spreadsheet-template\": {\n \"source\": \"iana\",\n \"extensions\": [\"ots\"]\n },\n \"application/vnd.oasis.opendocument.text\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"odt\"]\n },\n \"application/vnd.oasis.opendocument.text-master\": {\n \"source\": \"iana\",\n \"extensions\": [\"odm\"]\n },\n \"application/vnd.oasis.opendocument.text-template\": {\n \"source\": \"iana\",\n \"extensions\": [\"ott\"]\n },\n \"application/vnd.oasis.opendocument.text-web\": {\n \"source\": \"iana\",\n \"extensions\": [\"oth\"]\n },\n \"application/vnd.obn\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ocf+cbor\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oci.image.manifest.v1+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oftn.l10n+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oipf.contentaccessdownload+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oipf.contentaccessstreaming+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oipf.cspg-hexbinary\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oipf.dae.svg+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oipf.dae.xhtml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oipf.mippvcontrolmessage+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oipf.pae.gem\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oipf.spdiscovery+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oipf.spdlist+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oipf.ueprofile+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oipf.userprofile+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.olpc-sugar\": {\n \"source\": \"iana\",\n \"extensions\": [\"xo\"]\n },\n \"application/vnd.oma-scws-config\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma-scws-http-request\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma-scws-http-response\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.bcast.associated-procedure-parameter+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oma.bcast.drm-trigger+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oma.bcast.imd+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oma.bcast.ltkm\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.bcast.notification+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oma.bcast.provisioningtrigger\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.bcast.sgboot\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.bcast.sgdd+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oma.bcast.sgdu\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.bcast.simple-symbol-container\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.bcast.smartcard-trigger+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oma.bcast.sprov+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oma.bcast.stkm\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.cab-address-book+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oma.cab-feature-handler+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oma.cab-pcc+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oma.cab-subs-invite+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oma.cab-user-prefs+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oma.dcd\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.dcdc\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.dd2+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"dd2\"]\n },\n \"application/vnd.oma.drm.risd+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oma.group-usage-list+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oma.lwm2m+cbor\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.lwm2m+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oma.lwm2m+tlv\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.pal+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oma.poc.detailed-progress-report+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oma.poc.final-report+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oma.poc.groups+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oma.poc.invocation-descriptor+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oma.poc.optimized-progress-report+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oma.push\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.scidm.messages+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oma.xcap-directory+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.omads-email+xml\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true\n },\n \"application/vnd.omads-file+xml\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true\n },\n \"application/vnd.omads-folder+xml\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true\n },\n \"application/vnd.omaloc-supl-init\": {\n \"source\": \"iana\"\n },\n \"application/vnd.onepager\": {\n \"source\": \"iana\"\n },\n \"application/vnd.onepagertamp\": {\n \"source\": \"iana\"\n },\n \"application/vnd.onepagertamx\": {\n \"source\": \"iana\"\n },\n \"application/vnd.onepagertat\": {\n \"source\": \"iana\"\n },\n \"application/vnd.onepagertatp\": {\n \"source\": \"iana\"\n },\n \"application/vnd.onepagertatx\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openblox.game+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"obgx\"]\n },\n \"application/vnd.openblox.game-binary\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openeye.oeb\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openofficeorg.extension\": {\n \"source\": \"apache\",\n \"extensions\": [\"oxt\"]\n },\n \"application/vnd.openstreetmap.data+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"osm\"]\n },\n \"application/vnd.opentimestamps.ots\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.custom-properties+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.customxmlproperties+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.drawing+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.drawingml.chart+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.drawingml.diagramcolors+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.drawingml.diagramdata+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.drawingml.diagramlayout+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.drawingml.diagramstyle+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.extended-properties+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.commentauthors+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.comments+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.handoutmaster+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.notesmaster+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.notesslide+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.presentation\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"pptx\"]\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.presprops+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.slide\": {\n \"source\": \"iana\",\n \"extensions\": [\"sldx\"]\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.slide+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.slidelayout+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.slidemaster+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.slideshow\": {\n \"source\": \"iana\",\n \"extensions\": [\"ppsx\"]\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.slideshow.main+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.slideupdateinfo+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.tablestyles+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.tags+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.template\": {\n \"source\": \"iana\",\n \"extensions\": [\"potx\"]\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.template.main+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.viewprops+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.calcchain+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.externallink+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcachedefinition+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcacherecords+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.pivottable+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.querytable+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionheaders+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionlog+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.sharedstrings+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"xlsx\"]\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheetmetadata+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.tablesinglecells+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.template\": {\n \"source\": \"iana\",\n \"extensions\": [\"xltx\"]\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.usernames+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.volatiledependencies+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.theme+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.themeoverride+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.vmldrawing\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"docx\"]\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.document.glossary+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.fonttable+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.template\": {\n \"source\": \"iana\",\n \"extensions\": [\"dotx\"]\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.template.main+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.websettings+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-package.core-properties+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-package.digital-signature-xmlsignature+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-package.relationships+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oracle.resource+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.orange.indata\": {\n \"source\": \"iana\"\n },\n \"application/vnd.osa.netdeploy\": {\n \"source\": \"iana\"\n },\n \"application/vnd.osgeo.mapguide.package\": {\n \"source\": \"iana\",\n \"extensions\": [\"mgp\"]\n },\n \"application/vnd.osgi.bundle\": {\n \"source\": \"iana\"\n },\n \"application/vnd.osgi.dp\": {\n \"source\": \"iana\",\n \"extensions\": [\"dp\"]\n },\n \"application/vnd.osgi.subsystem\": {\n \"source\": \"iana\",\n \"extensions\": [\"esa\"]\n },\n \"application/vnd.otps.ct-kip+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oxli.countgraph\": {\n \"source\": \"iana\"\n },\n \"application/vnd.pagerduty+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.palm\": {\n \"source\": \"iana\",\n \"extensions\": [\"pdb\",\"pqa\",\"oprc\"]\n },\n \"application/vnd.panoply\": {\n \"source\": \"iana\"\n },\n \"application/vnd.paos.xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.patentdive\": {\n \"source\": \"iana\"\n },\n \"application/vnd.patientecommsdoc\": {\n \"source\": \"iana\"\n },\n \"application/vnd.pawaafile\": {\n \"source\": \"iana\",\n \"extensions\": [\"paw\"]\n },\n \"application/vnd.pcos\": {\n \"source\": \"iana\"\n },\n \"application/vnd.pg.format\": {\n \"source\": \"iana\",\n \"extensions\": [\"str\"]\n },\n \"application/vnd.pg.osasli\": {\n \"source\": \"iana\",\n \"extensions\": [\"ei6\"]\n },\n \"application/vnd.piaccess.application-licence\": {\n \"source\": \"iana\"\n },\n \"application/vnd.picsel\": {\n \"source\": \"iana\",\n \"extensions\": [\"efif\"]\n },\n \"application/vnd.pmi.widget\": {\n \"source\": \"iana\",\n \"extensions\": [\"wg\"]\n },\n \"application/vnd.poc.group-advertisement+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.pocketlearn\": {\n \"source\": \"iana\",\n \"extensions\": [\"plf\"]\n },\n \"application/vnd.powerbuilder6\": {\n \"source\": \"iana\",\n \"extensions\": [\"pbd\"]\n },\n \"application/vnd.powerbuilder6-s\": {\n \"source\": \"iana\"\n },\n \"application/vnd.powerbuilder7\": {\n \"source\": \"iana\"\n },\n \"application/vnd.powerbuilder7-s\": {\n \"source\": \"iana\"\n },\n \"application/vnd.powerbuilder75\": {\n \"source\": \"iana\"\n },\n \"application/vnd.powerbuilder75-s\": {\n \"source\": \"iana\"\n },\n \"application/vnd.preminet\": {\n \"source\": \"iana\"\n },\n \"application/vnd.previewsystems.box\": {\n \"source\": \"iana\",\n \"extensions\": [\"box\"]\n },\n \"application/vnd.proteus.magazine\": {\n \"source\": \"iana\",\n \"extensions\": [\"mgz\"]\n },\n \"application/vnd.psfs\": {\n \"source\": \"iana\"\n },\n \"application/vnd.publishare-delta-tree\": {\n \"source\": \"iana\",\n \"extensions\": [\"qps\"]\n },\n \"application/vnd.pvi.ptid1\": {\n \"source\": \"iana\",\n \"extensions\": [\"ptid\"]\n },\n \"application/vnd.pwg-multiplexed\": {\n \"source\": \"iana\"\n },\n \"application/vnd.pwg-xhtml-print+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.qualcomm.brew-app-res\": {\n \"source\": \"iana\"\n },\n \"application/vnd.quarantainenet\": {\n \"source\": \"iana\"\n },\n \"application/vnd.quark.quarkxpress\": {\n \"source\": \"iana\",\n \"extensions\": [\"qxd\",\"qxt\",\"qwd\",\"qwt\",\"qxl\",\"qxb\"]\n },\n \"application/vnd.quobject-quoxdocument\": {\n \"source\": \"iana\"\n },\n \"application/vnd.radisys.moml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.radisys.msml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.radisys.msml-audit+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.radisys.msml-audit-conf+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.radisys.msml-audit-conn+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.radisys.msml-audit-dialog+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.radisys.msml-audit-stream+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.radisys.msml-conf+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.radisys.msml-dialog+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.radisys.msml-dialog-base+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.radisys.msml-dialog-fax-detect+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.radisys.msml-dialog-fax-sendrecv+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.radisys.msml-dialog-group+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.radisys.msml-dialog-speech+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.radisys.msml-dialog-transform+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.rainstor.data\": {\n \"source\": \"iana\"\n },\n \"application/vnd.rapid\": {\n \"source\": \"iana\"\n },\n \"application/vnd.rar\": {\n \"source\": \"iana\",\n \"extensions\": [\"rar\"]\n },\n \"application/vnd.realvnc.bed\": {\n \"source\": \"iana\",\n \"extensions\": [\"bed\"]\n },\n \"application/vnd.recordare.musicxml\": {\n \"source\": \"iana\",\n \"extensions\": [\"mxl\"]\n },\n \"application/vnd.recordare.musicxml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"musicxml\"]\n },\n \"application/vnd.renlearn.rlprint\": {\n \"source\": \"iana\"\n },\n \"application/vnd.resilient.logic\": {\n \"source\": \"iana\"\n },\n \"application/vnd.restful+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.rig.cryptonote\": {\n \"source\": \"iana\",\n \"extensions\": [\"cryptonote\"]\n },\n \"application/vnd.rim.cod\": {\n \"source\": \"apache\",\n \"extensions\": [\"cod\"]\n },\n \"application/vnd.rn-realmedia\": {\n \"source\": \"apache\",\n \"extensions\": [\"rm\"]\n },\n \"application/vnd.rn-realmedia-vbr\": {\n \"source\": \"apache\",\n \"extensions\": [\"rmvb\"]\n },\n \"application/vnd.route66.link66+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"link66\"]\n },\n \"application/vnd.rs-274x\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ruckus.download\": {\n \"source\": \"iana\"\n },\n \"application/vnd.s3sms\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sailingtracker.track\": {\n \"source\": \"iana\",\n \"extensions\": [\"st\"]\n },\n \"application/vnd.sar\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sbm.cid\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sbm.mid2\": {\n \"source\": \"iana\"\n },\n \"application/vnd.scribus\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sealed.3df\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sealed.csf\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sealed.doc\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sealed.eml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sealed.mht\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sealed.net\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sealed.ppt\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sealed.tiff\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sealed.xls\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sealedmedia.softseal.html\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sealedmedia.softseal.pdf\": {\n \"source\": \"iana\"\n },\n \"application/vnd.seemail\": {\n \"source\": \"iana\",\n \"extensions\": [\"see\"]\n },\n \"application/vnd.seis+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.sema\": {\n \"source\": \"iana\",\n \"extensions\": [\"sema\"]\n },\n \"application/vnd.semd\": {\n \"source\": \"iana\",\n \"extensions\": [\"semd\"]\n },\n \"application/vnd.semf\": {\n \"source\": \"iana\",\n \"extensions\": [\"semf\"]\n },\n \"application/vnd.shade-save-file\": {\n \"source\": \"iana\"\n },\n \"application/vnd.shana.informed.formdata\": {\n \"source\": \"iana\",\n \"extensions\": [\"ifm\"]\n },\n \"application/vnd.shana.informed.formtemplate\": {\n \"source\": \"iana\",\n \"extensions\": [\"itp\"]\n },\n \"application/vnd.shana.informed.interchange\": {\n \"source\": \"iana\",\n \"extensions\": [\"iif\"]\n },\n \"application/vnd.shana.informed.package\": {\n \"source\": \"iana\",\n \"extensions\": [\"ipk\"]\n },\n \"application/vnd.shootproof+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.shopkick+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.shp\": {\n \"source\": \"iana\"\n },\n \"application/vnd.shx\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sigrok.session\": {\n \"source\": \"iana\"\n },\n \"application/vnd.simtech-mindmapper\": {\n \"source\": \"iana\",\n \"extensions\": [\"twd\",\"twds\"]\n },\n \"application/vnd.siren+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.smaf\": {\n \"source\": \"iana\",\n \"extensions\": [\"mmf\"]\n },\n \"application/vnd.smart.notebook\": {\n \"source\": \"iana\"\n },\n \"application/vnd.smart.teacher\": {\n \"source\": \"iana\",\n \"extensions\": [\"teacher\"]\n },\n \"application/vnd.snesdev-page-table\": {\n \"source\": \"iana\"\n },\n \"application/vnd.software602.filler.form+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"fo\"]\n },\n \"application/vnd.software602.filler.form-xml-zip\": {\n \"source\": \"iana\"\n },\n \"application/vnd.solent.sdkm+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"sdkm\",\"sdkd\"]\n },\n \"application/vnd.spotfire.dxp\": {\n \"source\": \"iana\",\n \"extensions\": [\"dxp\"]\n },\n \"application/vnd.spotfire.sfs\": {\n \"source\": \"iana\",\n \"extensions\": [\"sfs\"]\n },\n \"application/vnd.sqlite3\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sss-cod\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sss-dtf\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sss-ntf\": {\n \"source\": \"iana\"\n },\n \"application/vnd.stardivision.calc\": {\n \"source\": \"apache\",\n \"extensions\": [\"sdc\"]\n },\n \"application/vnd.stardivision.draw\": {\n \"source\": \"apache\",\n \"extensions\": [\"sda\"]\n },\n \"application/vnd.stardivision.impress\": {\n \"source\": \"apache\",\n \"extensions\": [\"sdd\"]\n },\n \"application/vnd.stardivision.math\": {\n \"source\": \"apache\",\n \"extensions\": [\"smf\"]\n },\n \"application/vnd.stardivision.writer\": {\n \"source\": \"apache\",\n \"extensions\": [\"sdw\",\"vor\"]\n },\n \"application/vnd.stardivision.writer-global\": {\n \"source\": \"apache\",\n \"extensions\": [\"sgl\"]\n },\n \"application/vnd.stepmania.package\": {\n \"source\": \"iana\",\n \"extensions\": [\"smzip\"]\n },\n \"application/vnd.stepmania.stepchart\": {\n \"source\": \"iana\",\n \"extensions\": [\"sm\"]\n },\n \"application/vnd.street-stream\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sun.wadl+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"wadl\"]\n },\n \"application/vnd.sun.xml.calc\": {\n \"source\": \"apache\",\n \"extensions\": [\"sxc\"]\n },\n \"application/vnd.sun.xml.calc.template\": {\n \"source\": \"apache\",\n \"extensions\": [\"stc\"]\n },\n \"application/vnd.sun.xml.draw\": {\n \"source\": \"apache\",\n \"extensions\": [\"sxd\"]\n },\n \"application/vnd.sun.xml.draw.template\": {\n \"source\": \"apache\",\n \"extensions\": [\"std\"]\n },\n \"application/vnd.sun.xml.impress\": {\n \"source\": \"apache\",\n \"extensions\": [\"sxi\"]\n },\n \"application/vnd.sun.xml.impress.template\": {\n \"source\": \"apache\",\n \"extensions\": [\"sti\"]\n },\n \"application/vnd.sun.xml.math\": {\n \"source\": \"apache\",\n \"extensions\": [\"sxm\"]\n },\n \"application/vnd.sun.xml.writer\": {\n \"source\": \"apache\",\n \"extensions\": [\"sxw\"]\n },\n \"application/vnd.sun.xml.writer.global\": {\n \"source\": \"apache\",\n \"extensions\": [\"sxg\"]\n },\n \"application/vnd.sun.xml.writer.template\": {\n \"source\": \"apache\",\n \"extensions\": [\"stw\"]\n },\n \"application/vnd.sus-calendar\": {\n \"source\": \"iana\",\n \"extensions\": [\"sus\",\"susp\"]\n },\n \"application/vnd.svd\": {\n \"source\": \"iana\",\n \"extensions\": [\"svd\"]\n },\n \"application/vnd.swiftview-ics\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sycle+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.syft+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.symbian.install\": {\n \"source\": \"apache\",\n \"extensions\": [\"sis\",\"sisx\"]\n },\n \"application/vnd.syncml+xml\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true,\n \"extensions\": [\"xsm\"]\n },\n \"application/vnd.syncml.dm+wbxml\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"extensions\": [\"bdm\"]\n },\n \"application/vnd.syncml.dm+xml\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true,\n \"extensions\": [\"xdm\"]\n },\n \"application/vnd.syncml.dm.notification\": {\n \"source\": \"iana\"\n },\n \"application/vnd.syncml.dmddf+wbxml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.syncml.dmddf+xml\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true,\n \"extensions\": [\"ddf\"]\n },\n \"application/vnd.syncml.dmtnds+wbxml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.syncml.dmtnds+xml\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true\n },\n \"application/vnd.syncml.ds.notification\": {\n \"source\": \"iana\"\n },\n \"application/vnd.tableschema+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.tao.intent-module-archive\": {\n \"source\": \"iana\",\n \"extensions\": [\"tao\"]\n },\n \"application/vnd.tcpdump.pcap\": {\n \"source\": \"iana\",\n \"extensions\": [\"pcap\",\"cap\",\"dmp\"]\n },\n \"application/vnd.think-cell.ppttc+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.tmd.mediaflex.api+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.tml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.tmobile-livetv\": {\n \"source\": \"iana\",\n \"extensions\": [\"tmo\"]\n },\n \"application/vnd.tri.onesource\": {\n \"source\": \"iana\"\n },\n \"application/vnd.trid.tpt\": {\n \"source\": \"iana\",\n \"extensions\": [\"tpt\"]\n },\n \"application/vnd.triscape.mxs\": {\n \"source\": \"iana\",\n \"extensions\": [\"mxs\"]\n },\n \"application/vnd.trueapp\": {\n \"source\": \"iana\",\n \"extensions\": [\"tra\"]\n },\n \"application/vnd.truedoc\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ubisoft.webplayer\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ufdl\": {\n \"source\": \"iana\",\n \"extensions\": [\"ufd\",\"ufdl\"]\n },\n \"application/vnd.uiq.theme\": {\n \"source\": \"iana\",\n \"extensions\": [\"utz\"]\n },\n \"application/vnd.umajin\": {\n \"source\": \"iana\",\n \"extensions\": [\"umj\"]\n },\n \"application/vnd.unity\": {\n \"source\": \"iana\",\n \"extensions\": [\"unityweb\"]\n },\n \"application/vnd.uoml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"uoml\"]\n },\n \"application/vnd.uplanet.alert\": {\n \"source\": \"iana\"\n },\n \"application/vnd.uplanet.alert-wbxml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.uplanet.bearer-choice\": {\n \"source\": \"iana\"\n },\n \"application/vnd.uplanet.bearer-choice-wbxml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.uplanet.cacheop\": {\n \"source\": \"iana\"\n },\n \"application/vnd.uplanet.cacheop-wbxml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.uplanet.channel\": {\n \"source\": \"iana\"\n },\n \"application/vnd.uplanet.channel-wbxml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.uplanet.list\": {\n \"source\": \"iana\"\n },\n \"application/vnd.uplanet.list-wbxml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.uplanet.listcmd\": {\n \"source\": \"iana\"\n },\n \"application/vnd.uplanet.listcmd-wbxml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.uplanet.signal\": {\n \"source\": \"iana\"\n },\n \"application/vnd.uri-map\": {\n \"source\": \"iana\"\n },\n \"application/vnd.valve.source.material\": {\n \"source\": \"iana\"\n },\n \"application/vnd.vcx\": {\n \"source\": \"iana\",\n \"extensions\": [\"vcx\"]\n },\n \"application/vnd.vd-study\": {\n \"source\": \"iana\"\n },\n \"application/vnd.vectorworks\": {\n \"source\": \"iana\"\n },\n \"application/vnd.vel+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.verimatrix.vcas\": {\n \"source\": \"iana\"\n },\n \"application/vnd.veritone.aion+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.veryant.thin\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ves.encrypted\": {\n \"source\": \"iana\"\n },\n \"application/vnd.vidsoft.vidconference\": {\n \"source\": \"iana\"\n },\n \"application/vnd.visio\": {\n \"source\": \"iana\",\n \"extensions\": [\"vsd\",\"vst\",\"vss\",\"vsw\"]\n },\n \"application/vnd.visionary\": {\n \"source\": \"iana\",\n \"extensions\": [\"vis\"]\n },\n \"application/vnd.vividence.scriptfile\": {\n \"source\": \"iana\"\n },\n \"application/vnd.vsf\": {\n \"source\": \"iana\",\n \"extensions\": [\"vsf\"]\n },\n \"application/vnd.wap.sic\": {\n \"source\": \"iana\"\n },\n \"application/vnd.wap.slc\": {\n \"source\": \"iana\"\n },\n \"application/vnd.wap.wbxml\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"extensions\": [\"wbxml\"]\n },\n \"application/vnd.wap.wmlc\": {\n \"source\": \"iana\",\n \"extensions\": [\"wmlc\"]\n },\n \"application/vnd.wap.wmlscriptc\": {\n \"source\": \"iana\",\n \"extensions\": [\"wmlsc\"]\n },\n \"application/vnd.webturbo\": {\n \"source\": \"iana\",\n \"extensions\": [\"wtb\"]\n },\n \"application/vnd.wfa.dpp\": {\n \"source\": \"iana\"\n },\n \"application/vnd.wfa.p2p\": {\n \"source\": \"iana\"\n },\n \"application/vnd.wfa.wsc\": {\n \"source\": \"iana\"\n },\n \"application/vnd.windows.devicepairing\": {\n \"source\": \"iana\"\n },\n \"application/vnd.wmc\": {\n \"source\": \"iana\"\n },\n \"application/vnd.wmf.bootstrap\": {\n \"source\": \"iana\"\n },\n \"application/vnd.wolfram.mathematica\": {\n \"source\": \"iana\"\n },\n \"application/vnd.wolfram.mathematica.package\": {\n \"source\": \"iana\"\n },\n \"application/vnd.wolfram.player\": {\n \"source\": \"iana\",\n \"extensions\": [\"nbp\"]\n },\n \"application/vnd.wordperfect\": {\n \"source\": \"iana\",\n \"extensions\": [\"wpd\"]\n },\n \"application/vnd.wqd\": {\n \"source\": \"iana\",\n \"extensions\": [\"wqd\"]\n },\n \"application/vnd.wrq-hp3000-labelled\": {\n \"source\": \"iana\"\n },\n \"application/vnd.wt.stf\": {\n \"source\": \"iana\",\n \"extensions\": [\"stf\"]\n },\n \"application/vnd.wv.csp+wbxml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.wv.csp+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.wv.ssp+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.xacml+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.xara\": {\n \"source\": \"iana\",\n \"extensions\": [\"xar\"]\n },\n \"application/vnd.xfdl\": {\n \"source\": \"iana\",\n \"extensions\": [\"xfdl\"]\n },\n \"application/vnd.xfdl.webform\": {\n \"source\": \"iana\"\n },\n \"application/vnd.xmi+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.xmpie.cpkg\": {\n \"source\": \"iana\"\n },\n \"application/vnd.xmpie.dpkg\": {\n \"source\": \"iana\"\n },\n \"application/vnd.xmpie.plan\": {\n \"source\": \"iana\"\n },\n \"application/vnd.xmpie.ppkg\": {\n \"source\": \"iana\"\n },\n \"application/vnd.xmpie.xlim\": {\n \"source\": \"iana\"\n },\n \"application/vnd.yamaha.hv-dic\": {\n \"source\": \"iana\",\n \"extensions\": [\"hvd\"]\n },\n \"application/vnd.yamaha.hv-script\": {\n \"source\": \"iana\",\n \"extensions\": [\"hvs\"]\n },\n \"application/vnd.yamaha.hv-voice\": {\n \"source\": \"iana\",\n \"extensions\": [\"hvp\"]\n },\n \"application/vnd.yamaha.openscoreformat\": {\n \"source\": \"iana\",\n \"extensions\": [\"osf\"]\n },\n \"application/vnd.yamaha.openscoreformat.osfpvg+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"osfpvg\"]\n },\n \"application/vnd.yamaha.remote-setup\": {\n \"source\": \"iana\"\n },\n \"application/vnd.yamaha.smaf-audio\": {\n \"source\": \"iana\",\n \"extensions\": [\"saf\"]\n },\n \"application/vnd.yamaha.smaf-phrase\": {\n \"source\": \"iana\",\n \"extensions\": [\"spf\"]\n },\n \"application/vnd.yamaha.through-ngn\": {\n \"source\": \"iana\"\n },\n \"application/vnd.yamaha.tunnel-udpencap\": {\n \"source\": \"iana\"\n },\n \"application/vnd.yaoweme\": {\n \"source\": \"iana\"\n },\n \"application/vnd.yellowriver-custom-menu\": {\n \"source\": \"iana\",\n \"extensions\": [\"cmp\"]\n },\n \"application/vnd.youtube.yt\": {\n \"source\": \"iana\"\n },\n \"application/vnd.zul\": {\n \"source\": \"iana\",\n \"extensions\": [\"zir\",\"zirz\"]\n },\n \"application/vnd.zzazz.deck+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"zaz\"]\n },\n \"application/voicexml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"vxml\"]\n },\n \"application/voucher-cms+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vq-rtcpxr\": {\n \"source\": \"iana\"\n },\n \"application/wasm\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"wasm\"]\n },\n \"application/watcherinfo+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"wif\"]\n },\n \"application/webpush-options+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/whoispp-query\": {\n \"source\": \"iana\"\n },\n \"application/whoispp-response\": {\n \"source\": \"iana\"\n },\n \"application/widget\": {\n \"source\": \"iana\",\n \"extensions\": [\"wgt\"]\n },\n \"application/winhlp\": {\n \"source\": \"apache\",\n \"extensions\": [\"hlp\"]\n },\n \"application/wita\": {\n \"source\": \"iana\"\n },\n \"application/wordperfect5.1\": {\n \"source\": \"iana\"\n },\n \"application/wsdl+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"wsdl\"]\n },\n \"application/wspolicy+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"wspolicy\"]\n },\n \"application/x-7z-compressed\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"7z\"]\n },\n \"application/x-abiword\": {\n \"source\": \"apache\",\n \"extensions\": [\"abw\"]\n },\n \"application/x-ace-compressed\": {\n \"source\": \"apache\",\n \"extensions\": [\"ace\"]\n },\n \"application/x-amf\": {\n \"source\": \"apache\"\n },\n \"application/x-apple-diskimage\": {\n \"source\": \"apache\",\n \"extensions\": [\"dmg\"]\n },\n \"application/x-arj\": {\n \"compressible\": false,\n \"extensions\": [\"arj\"]\n },\n \"application/x-authorware-bin\": {\n \"source\": \"apache\",\n \"extensions\": [\"aab\",\"x32\",\"u32\",\"vox\"]\n },\n \"application/x-authorware-map\": {\n \"source\": \"apache\",\n \"extensions\": [\"aam\"]\n },\n \"application/x-authorware-seg\": {\n \"source\": \"apache\",\n \"extensions\": [\"aas\"]\n },\n \"application/x-bcpio\": {\n \"source\": \"apache\",\n \"extensions\": [\"bcpio\"]\n },\n \"application/x-bdoc\": {\n \"compressible\": false,\n \"extensions\": [\"bdoc\"]\n },\n \"application/x-bittorrent\": {\n \"source\": \"apache\",\n \"extensions\": [\"torrent\"]\n },\n \"application/x-blorb\": {\n \"source\": \"apache\",\n \"extensions\": [\"blb\",\"blorb\"]\n },\n \"application/x-bzip\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"bz\"]\n },\n \"application/x-bzip2\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"bz2\",\"boz\"]\n },\n \"application/x-cbr\": {\n \"source\": \"apache\",\n \"extensions\": [\"cbr\",\"cba\",\"cbt\",\"cbz\",\"cb7\"]\n },\n \"application/x-cdlink\": {\n \"source\": \"apache\",\n \"extensions\": [\"vcd\"]\n },\n \"application/x-cfs-compressed\": {\n \"source\": \"apache\",\n \"extensions\": [\"cfs\"]\n },\n \"application/x-chat\": {\n \"source\": \"apache\",\n \"extensions\": [\"chat\"]\n },\n \"application/x-chess-pgn\": {\n \"source\": \"apache\",\n \"extensions\": [\"pgn\"]\n },\n \"application/x-chrome-extension\": {\n \"extensions\": [\"crx\"]\n },\n \"application/x-cocoa\": {\n \"source\": \"nginx\",\n \"extensions\": [\"cco\"]\n },\n \"application/x-compress\": {\n \"source\": \"apache\"\n },\n \"application/x-conference\": {\n \"source\": \"apache\",\n \"extensions\": [\"nsc\"]\n },\n \"application/x-cpio\": {\n \"source\": \"apache\",\n \"extensions\": [\"cpio\"]\n },\n \"application/x-csh\": {\n \"source\": \"apache\",\n \"extensions\": [\"csh\"]\n },\n \"application/x-deb\": {\n \"compressible\": false\n },\n \"application/x-debian-package\": {\n \"source\": \"apache\",\n \"extensions\": [\"deb\",\"udeb\"]\n },\n \"application/x-dgc-compressed\": {\n \"source\": \"apache\",\n \"extensions\": [\"dgc\"]\n },\n \"application/x-director\": {\n \"source\": \"apache\",\n \"extensions\": [\"dir\",\"dcr\",\"dxr\",\"cst\",\"cct\",\"cxt\",\"w3d\",\"fgd\",\"swa\"]\n },\n \"application/x-doom\": {\n \"source\": \"apache\",\n \"extensions\": [\"wad\"]\n },\n \"application/x-dtbncx+xml\": {\n \"source\": \"apache\",\n \"compressible\": true,\n \"extensions\": [\"ncx\"]\n },\n \"application/x-dtbook+xml\": {\n \"source\": \"apache\",\n \"compressible\": true,\n \"extensions\": [\"dtb\"]\n },\n \"application/x-dtbresource+xml\": {\n \"source\": \"apache\",\n \"compressible\": true,\n \"extensions\": [\"res\"]\n },\n \"application/x-dvi\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"dvi\"]\n },\n \"application/x-envoy\": {\n \"source\": \"apache\",\n \"extensions\": [\"evy\"]\n },\n \"application/x-eva\": {\n \"source\": \"apache\",\n \"extensions\": [\"eva\"]\n },\n \"application/x-font-bdf\": {\n \"source\": \"apache\",\n \"extensions\": [\"bdf\"]\n },\n \"application/x-font-dos\": {\n \"source\": \"apache\"\n },\n \"application/x-font-framemaker\": {\n \"source\": \"apache\"\n },\n \"application/x-font-ghostscript\": {\n \"source\": \"apache\",\n \"extensions\": [\"gsf\"]\n },\n \"application/x-font-libgrx\": {\n \"source\": \"apache\"\n },\n \"application/x-font-linux-psf\": {\n \"source\": \"apache\",\n \"extensions\": [\"psf\"]\n },\n \"application/x-font-pcf\": {\n \"source\": \"apache\",\n \"extensions\": [\"pcf\"]\n },\n \"application/x-font-snf\": {\n \"source\": \"apache\",\n \"extensions\": [\"snf\"]\n },\n \"application/x-font-speedo\": {\n \"source\": \"apache\"\n },\n \"application/x-font-sunos-news\": {\n \"source\": \"apache\"\n },\n \"application/x-font-type1\": {\n \"source\": \"apache\",\n \"extensions\": [\"pfa\",\"pfb\",\"pfm\",\"afm\"]\n },\n \"application/x-font-vfont\": {\n \"source\": \"apache\"\n },\n \"application/x-freearc\": {\n \"source\": \"apache\",\n \"extensions\": [\"arc\"]\n },\n \"application/x-futuresplash\": {\n \"source\": \"apache\",\n \"extensions\": [\"spl\"]\n },\n \"application/x-gca-compressed\": {\n \"source\": \"apache\",\n \"extensions\": [\"gca\"]\n },\n \"application/x-glulx\": {\n \"source\": \"apache\",\n \"extensions\": [\"ulx\"]\n },\n \"application/x-gnumeric\": {\n \"source\": \"apache\",\n \"extensions\": [\"gnumeric\"]\n },\n \"application/x-gramps-xml\": {\n \"source\": \"apache\",\n \"extensions\": [\"gramps\"]\n },\n \"application/x-gtar\": {\n \"source\": \"apache\",\n \"extensions\": [\"gtar\"]\n },\n \"application/x-gzip\": {\n \"source\": \"apache\"\n },\n \"application/x-hdf\": {\n \"source\": \"apache\",\n \"extensions\": [\"hdf\"]\n },\n \"application/x-httpd-php\": {\n \"compressible\": true,\n \"extensions\": [\"php\"]\n },\n \"application/x-install-instructions\": {\n \"source\": \"apache\",\n \"extensions\": [\"install\"]\n },\n \"application/x-iso9660-image\": {\n \"source\": \"apache\",\n \"extensions\": [\"iso\"]\n },\n \"application/x-iwork-keynote-sffkey\": {\n \"extensions\": [\"key\"]\n },\n \"application/x-iwork-numbers-sffnumbers\": {\n \"extensions\": [\"numbers\"]\n },\n \"application/x-iwork-pages-sffpages\": {\n \"extensions\": [\"pages\"]\n },\n \"application/x-java-archive-diff\": {\n \"source\": \"nginx\",\n \"extensions\": [\"jardiff\"]\n },\n \"application/x-java-jnlp-file\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"jnlp\"]\n },\n \"application/x-javascript\": {\n \"compressible\": true\n },\n \"application/x-keepass2\": {\n \"extensions\": [\"kdbx\"]\n },\n \"application/x-latex\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"latex\"]\n },\n \"application/x-lua-bytecode\": {\n \"extensions\": [\"luac\"]\n },\n \"application/x-lzh-compressed\": {\n \"source\": \"apache\",\n \"extensions\": [\"lzh\",\"lha\"]\n },\n \"application/x-makeself\": {\n \"source\": \"nginx\",\n \"extensions\": [\"run\"]\n },\n \"application/x-mie\": {\n \"source\": \"apache\",\n \"extensions\": [\"mie\"]\n },\n \"application/x-mobipocket-ebook\": {\n \"source\": \"apache\",\n \"extensions\": [\"prc\",\"mobi\"]\n },\n \"application/x-mpegurl\": {\n \"compressible\": false\n },\n \"application/x-ms-application\": {\n \"source\": \"apache\",\n \"extensions\": [\"application\"]\n },\n \"application/x-ms-shortcut\": {\n \"source\": \"apache\",\n \"extensions\": [\"lnk\"]\n },\n \"application/x-ms-wmd\": {\n \"source\": \"apache\",\n \"extensions\": [\"wmd\"]\n },\n \"application/x-ms-wmz\": {\n \"source\": \"apache\",\n \"extensions\": [\"wmz\"]\n },\n \"application/x-ms-xbap\": {\n \"source\": \"apache\",\n \"extensions\": [\"xbap\"]\n },\n \"application/x-msaccess\": {\n \"source\": \"apache\",\n \"extensions\": [\"mdb\"]\n },\n \"application/x-msbinder\": {\n \"source\": \"apache\",\n \"extensions\": [\"obd\"]\n },\n \"application/x-mscardfile\": {\n \"source\": \"apache\",\n \"extensions\": [\"crd\"]\n },\n \"application/x-msclip\": {\n \"source\": \"apache\",\n \"extensions\": [\"clp\"]\n },\n \"application/x-msdos-program\": {\n \"extensions\": [\"exe\"]\n },\n \"application/x-msdownload\": {\n \"source\": \"apache\",\n \"extensions\": [\"exe\",\"dll\",\"com\",\"bat\",\"msi\"]\n },\n \"application/x-msmediaview\": {\n \"source\": \"apache\",\n \"extensions\": [\"mvb\",\"m13\",\"m14\"]\n },\n \"application/x-msmetafile\": {\n \"source\": \"apache\",\n \"extensions\": [\"wmf\",\"wmz\",\"emf\",\"emz\"]\n },\n \"application/x-msmoney\": {\n \"source\": \"apache\",\n \"extensions\": [\"mny\"]\n },\n \"application/x-mspublisher\": {\n \"source\": \"apache\",\n \"extensions\": [\"pub\"]\n },\n \"application/x-msschedule\": {\n \"source\": \"apache\",\n \"extensions\": [\"scd\"]\n },\n \"application/x-msterminal\": {\n \"source\": \"apache\",\n \"extensions\": [\"trm\"]\n },\n \"application/x-mswrite\": {\n \"source\": \"apache\",\n \"extensions\": [\"wri\"]\n },\n \"application/x-netcdf\": {\n \"source\": \"apache\",\n \"extensions\": [\"nc\",\"cdf\"]\n },\n \"application/x-ns-proxy-autoconfig\": {\n \"compressible\": true,\n \"extensions\": [\"pac\"]\n },\n \"application/x-nzb\": {\n \"source\": \"apache\",\n \"extensions\": [\"nzb\"]\n },\n \"application/x-perl\": {\n \"source\": \"nginx\",\n \"extensions\": [\"pl\",\"pm\"]\n },\n \"application/x-pilot\": {\n \"source\": \"nginx\",\n \"extensions\": [\"prc\",\"pdb\"]\n },\n \"application/x-pkcs12\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"p12\",\"pfx\"]\n },\n \"application/x-pkcs7-certificates\": {\n \"source\": \"apache\",\n \"extensions\": [\"p7b\",\"spc\"]\n },\n \"application/x-pkcs7-certreqresp\": {\n \"source\": \"apache\",\n \"extensions\": [\"p7r\"]\n },\n \"application/x-pki-message\": {\n \"source\": \"iana\"\n },\n \"application/x-rar-compressed\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"rar\"]\n },\n \"application/x-redhat-package-manager\": {\n \"source\": \"nginx\",\n \"extensions\": [\"rpm\"]\n },\n \"application/x-research-info-systems\": {\n \"source\": \"apache\",\n \"extensions\": [\"ris\"]\n },\n \"application/x-sea\": {\n \"source\": \"nginx\",\n \"extensions\": [\"sea\"]\n },\n \"application/x-sh\": {\n \"source\": \"apache\",\n \"compressible\": true,\n \"extensions\": [\"sh\"]\n },\n \"application/x-shar\": {\n \"source\": \"apache\",\n \"extensions\": [\"shar\"]\n },\n \"application/x-shockwave-flash\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"swf\"]\n },\n \"application/x-silverlight-app\": {\n \"source\": \"apache\",\n \"extensions\": [\"xap\"]\n },\n \"application/x-sql\": {\n \"source\": \"apache\",\n \"extensions\": [\"sql\"]\n },\n \"application/x-stuffit\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"sit\"]\n },\n \"application/x-stuffitx\": {\n \"source\": \"apache\",\n \"extensions\": [\"sitx\"]\n },\n \"application/x-subrip\": {\n \"source\": \"apache\",\n \"extensions\": [\"srt\"]\n },\n \"application/x-sv4cpio\": {\n \"source\": \"apache\",\n \"extensions\": [\"sv4cpio\"]\n },\n \"application/x-sv4crc\": {\n \"source\": \"apache\",\n \"extensions\": [\"sv4crc\"]\n },\n \"application/x-t3vm-image\": {\n \"source\": \"apache\",\n \"extensions\": [\"t3\"]\n },\n \"application/x-tads\": {\n \"source\": \"apache\",\n \"extensions\": [\"gam\"]\n },\n \"application/x-tar\": {\n \"source\": \"apache\",\n \"compressible\": true,\n \"extensions\": [\"tar\"]\n },\n \"application/x-tcl\": {\n \"source\": \"apache\",\n \"extensions\": [\"tcl\",\"tk\"]\n },\n \"application/x-tex\": {\n \"source\": \"apache\",\n \"extensions\": [\"tex\"]\n },\n \"application/x-tex-tfm\": {\n \"source\": \"apache\",\n \"extensions\": [\"tfm\"]\n },\n \"application/x-texinfo\": {\n \"source\": \"apache\",\n \"extensions\": [\"texinfo\",\"texi\"]\n },\n \"application/x-tgif\": {\n \"source\": \"apache\",\n \"extensions\": [\"obj\"]\n },\n \"application/x-ustar\": {\n \"source\": \"apache\",\n \"extensions\": [\"ustar\"]\n },\n \"application/x-virtualbox-hdd\": {\n \"compressible\": true,\n \"extensions\": [\"hdd\"]\n },\n \"application/x-virtualbox-ova\": {\n \"compressible\": true,\n \"extensions\": [\"ova\"]\n },\n \"application/x-virtualbox-ovf\": {\n \"compressible\": true,\n \"extensions\": [\"ovf\"]\n },\n \"application/x-virtualbox-vbox\": {\n \"compressible\": true,\n \"extensions\": [\"vbox\"]\n },\n \"application/x-virtualbox-vbox-extpack\": {\n \"compressible\": false,\n \"extensions\": [\"vbox-extpack\"]\n },\n \"application/x-virtualbox-vdi\": {\n \"compressible\": true,\n \"extensions\": [\"vdi\"]\n },\n \"application/x-virtualbox-vhd\": {\n \"compressible\": true,\n \"extensions\": [\"vhd\"]\n },\n \"application/x-virtualbox-vmdk\": {\n \"compressible\": true,\n \"extensions\": [\"vmdk\"]\n },\n \"application/x-wais-source\": {\n \"source\": \"apache\",\n \"extensions\": [\"src\"]\n },\n \"application/x-web-app-manifest+json\": {\n \"compressible\": true,\n \"extensions\": [\"webapp\"]\n },\n \"application/x-www-form-urlencoded\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/x-x509-ca-cert\": {\n \"source\": \"iana\",\n \"extensions\": [\"der\",\"crt\",\"pem\"]\n },\n \"application/x-x509-ca-ra-cert\": {\n \"source\": \"iana\"\n },\n \"application/x-x509-next-ca-cert\": {\n \"source\": \"iana\"\n },\n \"application/x-xfig\": {\n \"source\": \"apache\",\n \"extensions\": [\"fig\"]\n },\n \"application/x-xliff+xml\": {\n \"source\": \"apache\",\n \"compressible\": true,\n \"extensions\": [\"xlf\"]\n },\n \"application/x-xpinstall\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"xpi\"]\n },\n \"application/x-xz\": {\n \"source\": \"apache\",\n \"extensions\": [\"xz\"]\n },\n \"application/x-zmachine\": {\n \"source\": \"apache\",\n \"extensions\": [\"z1\",\"z2\",\"z3\",\"z4\",\"z5\",\"z6\",\"z7\",\"z8\"]\n },\n \"application/x400-bp\": {\n \"source\": \"iana\"\n },\n \"application/xacml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/xaml+xml\": {\n \"source\": \"apache\",\n \"compressible\": true,\n \"extensions\": [\"xaml\"]\n },\n \"application/xcap-att+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"xav\"]\n },\n \"application/xcap-caps+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"xca\"]\n },\n \"application/xcap-diff+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"xdf\"]\n },\n \"application/xcap-el+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"xel\"]\n },\n \"application/xcap-error+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/xcap-ns+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"xns\"]\n },\n \"application/xcon-conference-info+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/xcon-conference-info-diff+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/xenc+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"xenc\"]\n },\n \"application/xhtml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"xhtml\",\"xht\"]\n },\n \"application/xhtml-voice+xml\": {\n \"source\": \"apache\",\n \"compressible\": true\n },\n \"application/xliff+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"xlf\"]\n },\n \"application/xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"xml\",\"xsl\",\"xsd\",\"rng\"]\n },\n \"application/xml-dtd\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"dtd\"]\n },\n \"application/xml-external-parsed-entity\": {\n \"source\": \"iana\"\n },\n \"application/xml-patch+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/xmpp+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/xop+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"xop\"]\n },\n \"application/xproc+xml\": {\n \"source\": \"apache\",\n \"compressible\": true,\n \"extensions\": [\"xpl\"]\n },\n \"application/xslt+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"xsl\",\"xslt\"]\n },\n \"application/xspf+xml\": {\n \"source\": \"apache\",\n \"compressible\": true,\n \"extensions\": [\"xspf\"]\n },\n \"application/xv+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"mxml\",\"xhvml\",\"xvml\",\"xvm\"]\n },\n \"application/yang\": {\n \"source\": \"iana\",\n \"extensions\": [\"yang\"]\n },\n \"application/yang-data+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/yang-data+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/yang-patch+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/yang-patch+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/yin+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"yin\"]\n },\n \"application/zip\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"zip\"]\n },\n \"application/zlib\": {\n \"source\": \"iana\"\n },\n \"application/zstd\": {\n \"source\": \"iana\"\n },\n \"audio/1d-interleaved-parityfec\": {\n \"source\": \"iana\"\n },\n \"audio/32kadpcm\": {\n \"source\": \"iana\"\n },\n \"audio/3gpp\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"3gpp\"]\n },\n \"audio/3gpp2\": {\n \"source\": \"iana\"\n },\n \"audio/aac\": {\n \"source\": \"iana\"\n },\n \"audio/ac3\": {\n \"source\": \"iana\"\n },\n \"audio/adpcm\": {\n \"source\": \"apache\",\n \"extensions\": [\"adp\"]\n },\n \"audio/amr\": {\n \"source\": \"iana\",\n \"extensions\": [\"amr\"]\n },\n \"audio/amr-wb\": {\n \"source\": \"iana\"\n },\n \"audio/amr-wb+\": {\n \"source\": \"iana\"\n },\n \"audio/aptx\": {\n \"source\": \"iana\"\n },\n \"audio/asc\": {\n \"source\": \"iana\"\n },\n \"audio/atrac-advanced-lossless\": {\n \"source\": \"iana\"\n },\n \"audio/atrac-x\": {\n \"source\": \"iana\"\n },\n \"audio/atrac3\": {\n \"source\": \"iana\"\n },\n \"audio/basic\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"au\",\"snd\"]\n },\n \"audio/bv16\": {\n \"source\": \"iana\"\n },\n \"audio/bv32\": {\n \"source\": \"iana\"\n },\n \"audio/clearmode\": {\n \"source\": \"iana\"\n },\n \"audio/cn\": {\n \"source\": \"iana\"\n },\n \"audio/dat12\": {\n \"source\": \"iana\"\n },\n \"audio/dls\": {\n \"source\": \"iana\"\n },\n \"audio/dsr-es201108\": {\n \"source\": \"iana\"\n },\n \"audio/dsr-es202050\": {\n \"source\": \"iana\"\n },\n \"audio/dsr-es202211\": {\n \"source\": \"iana\"\n },\n \"audio/dsr-es202212\": {\n \"source\": \"iana\"\n },\n \"audio/dv\": {\n \"source\": \"iana\"\n },\n \"audio/dvi4\": {\n \"source\": \"iana\"\n },\n \"audio/eac3\": {\n \"source\": \"iana\"\n },\n \"audio/encaprtp\": {\n \"source\": \"iana\"\n },\n \"audio/evrc\": {\n \"source\": \"iana\"\n },\n \"audio/evrc-qcp\": {\n \"source\": \"iana\"\n },\n \"audio/evrc0\": {\n \"source\": \"iana\"\n },\n \"audio/evrc1\": {\n \"source\": \"iana\"\n },\n \"audio/evrcb\": {\n \"source\": \"iana\"\n },\n \"audio/evrcb0\": {\n \"source\": \"iana\"\n },\n \"audio/evrcb1\": {\n \"source\": \"iana\"\n },\n \"audio/evrcnw\": {\n \"source\": \"iana\"\n },\n \"audio/evrcnw0\": {\n \"source\": \"iana\"\n },\n \"audio/evrcnw1\": {\n \"source\": \"iana\"\n },\n \"audio/evrcwb\": {\n \"source\": \"iana\"\n },\n \"audio/evrcwb0\": {\n \"source\": \"iana\"\n },\n \"audio/evrcwb1\": {\n \"source\": \"iana\"\n },\n \"audio/evs\": {\n \"source\": \"iana\"\n },\n \"audio/flexfec\": {\n \"source\": \"iana\"\n },\n \"audio/fwdred\": {\n \"source\": \"iana\"\n },\n \"audio/g711-0\": {\n \"source\": \"iana\"\n },\n \"audio/g719\": {\n \"source\": \"iana\"\n },\n \"audio/g722\": {\n \"source\": \"iana\"\n },\n \"audio/g7221\": {\n \"source\": \"iana\"\n },\n \"audio/g723\": {\n \"source\": \"iana\"\n },\n \"audio/g726-16\": {\n \"source\": \"iana\"\n },\n \"audio/g726-24\": {\n \"source\": \"iana\"\n },\n \"audio/g726-32\": {\n \"source\": \"iana\"\n },\n \"audio/g726-40\": {\n \"source\": \"iana\"\n },\n \"audio/g728\": {\n \"source\": \"iana\"\n },\n \"audio/g729\": {\n \"source\": \"iana\"\n },\n \"audio/g7291\": {\n \"source\": \"iana\"\n },\n \"audio/g729d\": {\n \"source\": \"iana\"\n },\n \"audio/g729e\": {\n \"source\": \"iana\"\n },\n \"audio/gsm\": {\n \"source\": \"iana\"\n },\n \"audio/gsm-efr\": {\n \"source\": \"iana\"\n },\n \"audio/gsm-hr-08\": {\n \"source\": \"iana\"\n },\n \"audio/ilbc\": {\n \"source\": \"iana\"\n },\n \"audio/ip-mr_v2.5\": {\n \"source\": \"iana\"\n },\n \"audio/isac\": {\n \"source\": \"apache\"\n },\n \"audio/l16\": {\n \"source\": \"iana\"\n },\n \"audio/l20\": {\n \"source\": \"iana\"\n },\n \"audio/l24\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"audio/l8\": {\n \"source\": \"iana\"\n },\n \"audio/lpc\": {\n \"source\": \"iana\"\n },\n \"audio/melp\": {\n \"source\": \"iana\"\n },\n \"audio/melp1200\": {\n \"source\": \"iana\"\n },\n \"audio/melp2400\": {\n \"source\": \"iana\"\n },\n \"audio/melp600\": {\n \"source\": \"iana\"\n },\n \"audio/mhas\": {\n \"source\": \"iana\"\n },\n \"audio/midi\": {\n \"source\": \"apache\",\n \"extensions\": [\"mid\",\"midi\",\"kar\",\"rmi\"]\n },\n \"audio/mobile-xmf\": {\n \"source\": \"iana\",\n \"extensions\": [\"mxmf\"]\n },\n \"audio/mp3\": {\n \"compressible\": false,\n \"extensions\": [\"mp3\"]\n },\n \"audio/mp4\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"m4a\",\"mp4a\"]\n },\n \"audio/mp4a-latm\": {\n \"source\": \"iana\"\n },\n \"audio/mpa\": {\n \"source\": \"iana\"\n },\n \"audio/mpa-robust\": {\n \"source\": \"iana\"\n },\n \"audio/mpeg\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"mpga\",\"mp2\",\"mp2a\",\"mp3\",\"m2a\",\"m3a\"]\n },\n \"audio/mpeg4-generic\": {\n \"source\": \"iana\"\n },\n \"audio/musepack\": {\n \"source\": \"apache\"\n },\n \"audio/ogg\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"oga\",\"ogg\",\"spx\",\"opus\"]\n },\n \"audio/opus\": {\n \"source\": \"iana\"\n },\n \"audio/parityfec\": {\n \"source\": \"iana\"\n },\n \"audio/pcma\": {\n \"source\": \"iana\"\n },\n \"audio/pcma-wb\": {\n \"source\": \"iana\"\n },\n \"audio/pcmu\": {\n \"source\": \"iana\"\n },\n \"audio/pcmu-wb\": {\n \"source\": \"iana\"\n },\n \"audio/prs.sid\": {\n \"source\": \"iana\"\n },\n \"audio/qcelp\": {\n \"source\": \"iana\"\n },\n \"audio/raptorfec\": {\n \"source\": \"iana\"\n },\n \"audio/red\": {\n \"source\": \"iana\"\n },\n \"audio/rtp-enc-aescm128\": {\n \"source\": \"iana\"\n },\n \"audio/rtp-midi\": {\n \"source\": \"iana\"\n },\n \"audio/rtploopback\": {\n \"source\": \"iana\"\n },\n \"audio/rtx\": {\n \"source\": \"iana\"\n },\n \"audio/s3m\": {\n \"source\": \"apache\",\n \"extensions\": [\"s3m\"]\n },\n \"audio/scip\": {\n \"source\": \"iana\"\n },\n \"audio/silk\": {\n \"source\": \"apache\",\n \"extensions\": [\"sil\"]\n },\n \"audio/smv\": {\n \"source\": \"iana\"\n },\n \"audio/smv-qcp\": {\n \"source\": \"iana\"\n },\n \"audio/smv0\": {\n \"source\": \"iana\"\n },\n \"audio/sofa\": {\n \"source\": \"iana\"\n },\n \"audio/sp-midi\": {\n \"source\": \"iana\"\n },\n \"audio/speex\": {\n \"source\": \"iana\"\n },\n \"audio/t140c\": {\n \"source\": \"iana\"\n },\n \"audio/t38\": {\n \"source\": \"iana\"\n },\n \"audio/telephone-event\": {\n \"source\": \"iana\"\n },\n \"audio/tetra_acelp\": {\n \"source\": \"iana\"\n },\n \"audio/tetra_acelp_bb\": {\n \"source\": \"iana\"\n },\n \"audio/tone\": {\n \"source\": \"iana\"\n },\n \"audio/tsvcis\": {\n \"source\": \"iana\"\n },\n \"audio/uemclip\": {\n \"source\": \"iana\"\n },\n \"audio/ulpfec\": {\n \"source\": \"iana\"\n },\n \"audio/usac\": {\n \"source\": \"iana\"\n },\n \"audio/vdvi\": {\n \"source\": \"iana\"\n },\n \"audio/vmr-wb\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.3gpp.iufp\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.4sb\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.audiokoz\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.celp\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.cisco.nse\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.cmles.radio-events\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.cns.anp1\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.cns.inf1\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.dece.audio\": {\n \"source\": \"iana\",\n \"extensions\": [\"uva\",\"uvva\"]\n },\n \"audio/vnd.digital-winds\": {\n \"source\": \"iana\",\n \"extensions\": [\"eol\"]\n },\n \"audio/vnd.dlna.adts\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.dolby.heaac.1\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.dolby.heaac.2\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.dolby.mlp\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.dolby.mps\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.dolby.pl2\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.dolby.pl2x\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.dolby.pl2z\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.dolby.pulse.1\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.dra\": {\n \"source\": \"iana\",\n \"extensions\": [\"dra\"]\n },\n \"audio/vnd.dts\": {\n \"source\": \"iana\",\n \"extensions\": [\"dts\"]\n },\n \"audio/vnd.dts.hd\": {\n \"source\": \"iana\",\n \"extensions\": [\"dtshd\"]\n },\n \"audio/vnd.dts.uhd\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.dvb.file\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.everad.plj\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.hns.audio\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.lucent.voice\": {\n \"source\": \"iana\",\n \"extensions\": [\"lvp\"]\n },\n \"audio/vnd.ms-playready.media.pya\": {\n \"source\": \"iana\",\n \"extensions\": [\"pya\"]\n },\n \"audio/vnd.nokia.mobile-xmf\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.nortel.vbk\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.nuera.ecelp4800\": {\n \"source\": \"iana\",\n \"extensions\": [\"ecelp4800\"]\n },\n \"audio/vnd.nuera.ecelp7470\": {\n \"source\": \"iana\",\n \"extensions\": [\"ecelp7470\"]\n },\n \"audio/vnd.nuera.ecelp9600\": {\n \"source\": \"iana\",\n \"extensions\": [\"ecelp9600\"]\n },\n \"audio/vnd.octel.sbc\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.presonus.multitrack\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.qcelp\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.rhetorex.32kadpcm\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.rip\": {\n \"source\": \"iana\",\n \"extensions\": [\"rip\"]\n },\n \"audio/vnd.rn-realaudio\": {\n \"compressible\": false\n },\n \"audio/vnd.sealedmedia.softseal.mpeg\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.vmx.cvsd\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.wave\": {\n \"compressible\": false\n },\n \"audio/vorbis\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"audio/vorbis-config\": {\n \"source\": \"iana\"\n },\n \"audio/wav\": {\n \"compressible\": false,\n \"extensions\": [\"wav\"]\n },\n \"audio/wave\": {\n \"compressible\": false,\n \"extensions\": [\"wav\"]\n },\n \"audio/webm\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"weba\"]\n },\n \"audio/x-aac\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"aac\"]\n },\n \"audio/x-aiff\": {\n \"source\": \"apache\",\n \"extensions\": [\"aif\",\"aiff\",\"aifc\"]\n },\n \"audio/x-caf\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"caf\"]\n },\n \"audio/x-flac\": {\n \"source\": \"apache\",\n \"extensions\": [\"flac\"]\n },\n \"audio/x-m4a\": {\n \"source\": \"nginx\",\n \"extensions\": [\"m4a\"]\n },\n \"audio/x-matroska\": {\n \"source\": \"apache\",\n \"extensions\": [\"mka\"]\n },\n \"audio/x-mpegurl\": {\n \"source\": \"apache\",\n \"extensions\": [\"m3u\"]\n },\n \"audio/x-ms-wax\": {\n \"source\": \"apache\",\n \"extensions\": [\"wax\"]\n },\n \"audio/x-ms-wma\": {\n \"source\": \"apache\",\n \"extensions\": [\"wma\"]\n },\n \"audio/x-pn-realaudio\": {\n \"source\": \"apache\",\n \"extensions\": [\"ram\",\"ra\"]\n },\n \"audio/x-pn-realaudio-plugin\": {\n \"source\": \"apache\",\n \"extensions\": [\"rmp\"]\n },\n \"audio/x-realaudio\": {\n \"source\": \"nginx\",\n \"extensions\": [\"ra\"]\n },\n \"audio/x-tta\": {\n \"source\": \"apache\"\n },\n \"audio/x-wav\": {\n \"source\": \"apache\",\n \"extensions\": [\"wav\"]\n },\n \"audio/xm\": {\n \"source\": \"apache\",\n \"extensions\": [\"xm\"]\n },\n \"chemical/x-cdx\": {\n \"source\": \"apache\",\n \"extensions\": [\"cdx\"]\n },\n \"chemical/x-cif\": {\n \"source\": \"apache\",\n \"extensions\": [\"cif\"]\n },\n \"chemical/x-cmdf\": {\n \"source\": \"apache\",\n \"extensions\": [\"cmdf\"]\n },\n \"chemical/x-cml\": {\n \"source\": \"apache\",\n \"extensions\": [\"cml\"]\n },\n \"chemical/x-csml\": {\n \"source\": \"apache\",\n \"extensions\": [\"csml\"]\n },\n \"chemical/x-pdb\": {\n \"source\": \"apache\"\n },\n \"chemical/x-xyz\": {\n \"source\": \"apache\",\n \"extensions\": [\"xyz\"]\n },\n \"font/collection\": {\n \"source\": \"iana\",\n \"extensions\": [\"ttc\"]\n },\n \"font/otf\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"otf\"]\n },\n \"font/sfnt\": {\n \"source\": \"iana\"\n },\n \"font/ttf\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"ttf\"]\n },\n \"font/woff\": {\n \"source\": \"iana\",\n \"extensions\": [\"woff\"]\n },\n \"font/woff2\": {\n \"source\": \"iana\",\n \"extensions\": [\"woff2\"]\n },\n \"image/aces\": {\n \"source\": \"iana\",\n \"extensions\": [\"exr\"]\n },\n \"image/apng\": {\n \"compressible\": false,\n \"extensions\": [\"apng\"]\n },\n \"image/avci\": {\n \"source\": \"iana\",\n \"extensions\": [\"avci\"]\n },\n \"image/avcs\": {\n \"source\": \"iana\",\n \"extensions\": [\"avcs\"]\n },\n \"image/avif\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"avif\"]\n },\n \"image/bmp\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"bmp\"]\n },\n \"image/cgm\": {\n \"source\": \"iana\",\n \"extensions\": [\"cgm\"]\n },\n \"image/dicom-rle\": {\n \"source\": \"iana\",\n \"extensions\": [\"drle\"]\n },\n \"image/emf\": {\n \"source\": \"iana\",\n \"extensions\": [\"emf\"]\n },\n \"image/fits\": {\n \"source\": \"iana\",\n \"extensions\": [\"fits\"]\n },\n \"image/g3fax\": {\n \"source\": \"iana\",\n \"extensions\": [\"g3\"]\n },\n \"image/gif\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"gif\"]\n },\n \"image/heic\": {\n \"source\": \"iana\",\n \"extensions\": [\"heic\"]\n },\n \"image/heic-sequence\": {\n \"source\": \"iana\",\n \"extensions\": [\"heics\"]\n },\n \"image/heif\": {\n \"source\": \"iana\",\n \"extensions\": [\"heif\"]\n },\n \"image/heif-sequence\": {\n \"source\": \"iana\",\n \"extensions\": [\"heifs\"]\n },\n \"image/hej2k\": {\n \"source\": \"iana\",\n \"extensions\": [\"hej2\"]\n },\n \"image/hsj2\": {\n \"source\": \"iana\",\n \"extensions\": [\"hsj2\"]\n },\n \"image/ief\": {\n \"source\": \"iana\",\n \"extensions\": [\"ief\"]\n },\n \"image/jls\": {\n \"source\": \"iana\",\n \"extensions\": [\"jls\"]\n },\n \"image/jp2\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"jp2\",\"jpg2\"]\n },\n \"image/jpeg\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"jpeg\",\"jpg\",\"jpe\"]\n },\n \"image/jph\": {\n \"source\": \"iana\",\n \"extensions\": [\"jph\"]\n },\n \"image/jphc\": {\n \"source\": \"iana\",\n \"extensions\": [\"jhc\"]\n },\n \"image/jpm\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"jpm\"]\n },\n \"image/jpx\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"jpx\",\"jpf\"]\n },\n \"image/jxr\": {\n \"source\": \"iana\",\n \"extensions\": [\"jxr\"]\n },\n \"image/jxra\": {\n \"source\": \"iana\",\n \"extensions\": [\"jxra\"]\n },\n \"image/jxrs\": {\n \"source\": \"iana\",\n \"extensions\": [\"jxrs\"]\n },\n \"image/jxs\": {\n \"source\": \"iana\",\n \"extensions\": [\"jxs\"]\n },\n \"image/jxsc\": {\n \"source\": \"iana\",\n \"extensions\": [\"jxsc\"]\n },\n \"image/jxsi\": {\n \"source\": \"iana\",\n \"extensions\": [\"jxsi\"]\n },\n \"image/jxss\": {\n \"source\": \"iana\",\n \"extensions\": [\"jxss\"]\n },\n \"image/ktx\": {\n \"source\": \"iana\",\n \"extensions\": [\"ktx\"]\n },\n \"image/ktx2\": {\n \"source\": \"iana\",\n \"extensions\": [\"ktx2\"]\n },\n \"image/naplps\": {\n \"source\": \"iana\"\n },\n \"image/pjpeg\": {\n \"compressible\": false\n },\n \"image/png\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"png\"]\n },\n \"image/prs.btif\": {\n \"source\": \"iana\",\n \"extensions\": [\"btif\"]\n },\n \"image/prs.pti\": {\n \"source\": \"iana\",\n \"extensions\": [\"pti\"]\n },\n \"image/pwg-raster\": {\n \"source\": \"iana\"\n },\n \"image/sgi\": {\n \"source\": \"apache\",\n \"extensions\": [\"sgi\"]\n },\n \"image/svg+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"svg\",\"svgz\"]\n },\n \"image/t38\": {\n \"source\": \"iana\",\n \"extensions\": [\"t38\"]\n },\n \"image/tiff\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"tif\",\"tiff\"]\n },\n \"image/tiff-fx\": {\n \"source\": \"iana\",\n \"extensions\": [\"tfx\"]\n },\n \"image/vnd.adobe.photoshop\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"psd\"]\n },\n \"image/vnd.airzip.accelerator.azv\": {\n \"source\": \"iana\",\n \"extensions\": [\"azv\"]\n },\n \"image/vnd.cns.inf2\": {\n \"source\": \"iana\"\n },\n \"image/vnd.dece.graphic\": {\n \"source\": \"iana\",\n \"extensions\": [\"uvi\",\"uvvi\",\"uvg\",\"uvvg\"]\n },\n \"image/vnd.djvu\": {\n \"source\": \"iana\",\n \"extensions\": [\"djvu\",\"djv\"]\n },\n \"image/vnd.dvb.subtitle\": {\n \"source\": \"iana\",\n \"extensions\": [\"sub\"]\n },\n \"image/vnd.dwg\": {\n \"source\": \"iana\",\n \"extensions\": [\"dwg\"]\n },\n \"image/vnd.dxf\": {\n \"source\": \"iana\",\n \"extensions\": [\"dxf\"]\n },\n \"image/vnd.fastbidsheet\": {\n \"source\": \"iana\",\n \"extensions\": [\"fbs\"]\n },\n \"image/vnd.fpx\": {\n \"source\": \"iana\",\n \"extensions\": [\"fpx\"]\n },\n \"image/vnd.fst\": {\n \"source\": \"iana\",\n \"extensions\": [\"fst\"]\n },\n \"image/vnd.fujixerox.edmics-mmr\": {\n \"source\": \"iana\",\n \"extensions\": [\"mmr\"]\n },\n \"image/vnd.fujixerox.edmics-rlc\": {\n \"source\": \"iana\",\n \"extensions\": [\"rlc\"]\n },\n \"image/vnd.globalgraphics.pgb\": {\n \"source\": \"iana\"\n },\n \"image/vnd.microsoft.icon\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"ico\"]\n },\n \"image/vnd.mix\": {\n \"source\": \"iana\"\n },\n \"image/vnd.mozilla.apng\": {\n \"source\": \"iana\"\n },\n \"image/vnd.ms-dds\": {\n \"compressible\": true,\n \"extensions\": [\"dds\"]\n },\n \"image/vnd.ms-modi\": {\n \"source\": \"iana\",\n \"extensions\": [\"mdi\"]\n },\n \"image/vnd.ms-photo\": {\n \"source\": \"apache\",\n \"extensions\": [\"wdp\"]\n },\n \"image/vnd.net-fpx\": {\n \"source\": \"iana\",\n \"extensions\": [\"npx\"]\n },\n \"image/vnd.pco.b16\": {\n \"source\": \"iana\",\n \"extensions\": [\"b16\"]\n },\n \"image/vnd.radiance\": {\n \"source\": \"iana\"\n },\n \"image/vnd.sealed.png\": {\n \"source\": \"iana\"\n },\n \"image/vnd.sealedmedia.softseal.gif\": {\n \"source\": \"iana\"\n },\n \"image/vnd.sealedmedia.softseal.jpg\": {\n \"source\": \"iana\"\n },\n \"image/vnd.svf\": {\n \"source\": \"iana\"\n },\n \"image/vnd.tencent.tap\": {\n \"source\": \"iana\",\n \"extensions\": [\"tap\"]\n },\n \"image/vnd.valve.source.texture\": {\n \"source\": \"iana\",\n \"extensions\": [\"vtf\"]\n },\n \"image/vnd.wap.wbmp\": {\n \"source\": \"iana\",\n \"extensions\": [\"wbmp\"]\n },\n \"image/vnd.xiff\": {\n \"source\": \"iana\",\n \"extensions\": [\"xif\"]\n },\n \"image/vnd.zbrush.pcx\": {\n \"source\": \"iana\",\n \"extensions\": [\"pcx\"]\n },\n \"image/webp\": {\n \"source\": \"apache\",\n \"extensions\": [\"webp\"]\n },\n \"image/wmf\": {\n \"source\": \"iana\",\n \"extensions\": [\"wmf\"]\n },\n \"image/x-3ds\": {\n \"source\": \"apache\",\n \"extensions\": [\"3ds\"]\n },\n \"image/x-cmu-raster\": {\n \"source\": \"apache\",\n \"extensions\": [\"ras\"]\n },\n \"image/x-cmx\": {\n \"source\": \"apache\",\n \"extensions\": [\"cmx\"]\n },\n \"image/x-freehand\": {\n \"source\": \"apache\",\n \"extensions\": [\"fh\",\"fhc\",\"fh4\",\"fh5\",\"fh7\"]\n },\n \"image/x-icon\": {\n \"source\": \"apache\",\n \"compressible\": true,\n \"extensions\": [\"ico\"]\n },\n \"image/x-jng\": {\n \"source\": \"nginx\",\n \"extensions\": [\"jng\"]\n },\n \"image/x-mrsid-image\": {\n \"source\": \"apache\",\n \"extensions\": [\"sid\"]\n },\n \"image/x-ms-bmp\": {\n \"source\": \"nginx\",\n \"compressible\": true,\n \"extensions\": [\"bmp\"]\n },\n \"image/x-pcx\": {\n \"source\": \"apache\",\n \"extensions\": [\"pcx\"]\n },\n \"image/x-pict\": {\n \"source\": \"apache\",\n \"extensions\": [\"pic\",\"pct\"]\n },\n \"image/x-portable-anymap\": {\n \"source\": \"apache\",\n \"extensions\": [\"pnm\"]\n },\n \"image/x-portable-bitmap\": {\n \"source\": \"apache\",\n \"extensions\": [\"pbm\"]\n },\n \"image/x-portable-graymap\": {\n \"source\": \"apache\",\n \"extensions\": [\"pgm\"]\n },\n \"image/x-portable-pixmap\": {\n \"source\": \"apache\",\n \"extensions\": [\"ppm\"]\n },\n \"image/x-rgb\": {\n \"source\": \"apache\",\n \"extensions\": [\"rgb\"]\n },\n \"image/x-tga\": {\n \"source\": \"apache\",\n \"extensions\": [\"tga\"]\n },\n \"image/x-xbitmap\": {\n \"source\": \"apache\",\n \"extensions\": [\"xbm\"]\n },\n \"image/x-xcf\": {\n \"compressible\": false\n },\n \"image/x-xpixmap\": {\n \"source\": \"apache\",\n \"extensions\": [\"xpm\"]\n },\n \"image/x-xwindowdump\": {\n \"source\": \"apache\",\n \"extensions\": [\"xwd\"]\n },\n \"message/cpim\": {\n \"source\": \"iana\"\n },\n \"message/delivery-status\": {\n \"source\": \"iana\"\n },\n \"message/disposition-notification\": {\n \"source\": \"iana\",\n \"extensions\": [\n \"disposition-notification\"\n ]\n },\n \"message/external-body\": {\n \"source\": \"iana\"\n },\n \"message/feedback-report\": {\n \"source\": \"iana\"\n },\n \"message/global\": {\n \"source\": \"iana\",\n \"extensions\": [\"u8msg\"]\n },\n \"message/global-delivery-status\": {\n \"source\": \"iana\",\n \"extensions\": [\"u8dsn\"]\n },\n \"message/global-disposition-notification\": {\n \"source\": \"iana\",\n \"extensions\": [\"u8mdn\"]\n },\n \"message/global-headers\": {\n \"source\": \"iana\",\n \"extensions\": [\"u8hdr\"]\n },\n \"message/http\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"message/imdn+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"message/news\": {\n \"source\": \"iana\"\n },\n \"message/partial\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"message/rfc822\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"eml\",\"mime\"]\n },\n \"message/s-http\": {\n \"source\": \"iana\"\n },\n \"message/sip\": {\n \"source\": \"iana\"\n },\n \"message/sipfrag\": {\n \"source\": \"iana\"\n },\n \"message/tracking-status\": {\n \"source\": \"iana\"\n },\n \"message/vnd.si.simp\": {\n \"source\": \"iana\"\n },\n \"message/vnd.wfa.wsc\": {\n \"source\": \"iana\",\n \"extensions\": [\"wsc\"]\n },\n \"model/3mf\": {\n \"source\": \"iana\",\n \"extensions\": [\"3mf\"]\n },\n \"model/e57\": {\n \"source\": \"iana\"\n },\n \"model/gltf+json\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"gltf\"]\n },\n \"model/gltf-binary\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"glb\"]\n },\n \"model/iges\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"igs\",\"iges\"]\n },\n \"model/mesh\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"msh\",\"mesh\",\"silo\"]\n },\n \"model/mtl\": {\n \"source\": \"iana\",\n \"extensions\": [\"mtl\"]\n },\n \"model/obj\": {\n \"source\": \"iana\",\n \"extensions\": [\"obj\"]\n },\n \"model/step\": {\n \"source\": \"iana\"\n },\n \"model/step+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"stpx\"]\n },\n \"model/step+zip\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"stpz\"]\n },\n \"model/step-xml+zip\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"stpxz\"]\n },\n \"model/stl\": {\n \"source\": \"iana\",\n \"extensions\": [\"stl\"]\n },\n \"model/vnd.collada+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"dae\"]\n },\n \"model/vnd.dwf\": {\n \"source\": \"iana\",\n \"extensions\": [\"dwf\"]\n },\n \"model/vnd.flatland.3dml\": {\n \"source\": \"iana\"\n },\n \"model/vnd.gdl\": {\n \"source\": \"iana\",\n \"extensions\": [\"gdl\"]\n },\n \"model/vnd.gs-gdl\": {\n \"source\": \"apache\"\n },\n \"model/vnd.gs.gdl\": {\n \"source\": \"iana\"\n },\n \"model/vnd.gtw\": {\n \"source\": \"iana\",\n \"extensions\": [\"gtw\"]\n },\n \"model/vnd.moml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"model/vnd.mts\": {\n \"source\": \"iana\",\n \"extensions\": [\"mts\"]\n },\n \"model/vnd.opengex\": {\n \"source\": \"iana\",\n \"extensions\": [\"ogex\"]\n },\n \"model/vnd.parasolid.transmit.binary\": {\n \"source\": \"iana\",\n \"extensions\": [\"x_b\"]\n },\n \"model/vnd.parasolid.transmit.text\": {\n \"source\": \"iana\",\n \"extensions\": [\"x_t\"]\n },\n \"model/vnd.pytha.pyox\": {\n \"source\": \"iana\"\n },\n \"model/vnd.rosette.annotated-data-model\": {\n \"source\": \"iana\"\n },\n \"model/vnd.sap.vds\": {\n \"source\": \"iana\",\n \"extensions\": [\"vds\"]\n },\n \"model/vnd.usdz+zip\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"usdz\"]\n },\n \"model/vnd.valve.source.compiled-map\": {\n \"source\": \"iana\",\n \"extensions\": [\"bsp\"]\n },\n \"model/vnd.vtu\": {\n \"source\": \"iana\",\n \"extensions\": [\"vtu\"]\n },\n \"model/vrml\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"wrl\",\"vrml\"]\n },\n \"model/x3d+binary\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"x3db\",\"x3dbz\"]\n },\n \"model/x3d+fastinfoset\": {\n \"source\": \"iana\",\n \"extensions\": [\"x3db\"]\n },\n \"model/x3d+vrml\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"x3dv\",\"x3dvz\"]\n },\n \"model/x3d+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"x3d\",\"x3dz\"]\n },\n \"model/x3d-vrml\": {\n \"source\": \"iana\",\n \"extensions\": [\"x3dv\"]\n },\n \"multipart/alternative\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"multipart/appledouble\": {\n \"source\": \"iana\"\n },\n \"multipart/byteranges\": {\n \"source\": \"iana\"\n },\n \"multipart/digest\": {\n \"source\": \"iana\"\n },\n \"multipart/encrypted\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"multipart/form-data\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"multipart/header-set\": {\n \"source\": \"iana\"\n },\n \"multipart/mixed\": {\n \"source\": \"iana\"\n },\n \"multipart/multilingual\": {\n \"source\": \"iana\"\n },\n \"multipart/parallel\": {\n \"source\": \"iana\"\n },\n \"multipart/related\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"multipart/report\": {\n \"source\": \"iana\"\n },\n \"multipart/signed\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"multipart/vnd.bint.med-plus\": {\n \"source\": \"iana\"\n },\n \"multipart/voice-message\": {\n \"source\": \"iana\"\n },\n \"multipart/x-mixed-replace\": {\n \"source\": \"iana\"\n },\n \"text/1d-interleaved-parityfec\": {\n \"source\": \"iana\"\n },\n \"text/cache-manifest\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"appcache\",\"manifest\"]\n },\n \"text/calendar\": {\n \"source\": \"iana\",\n \"extensions\": [\"ics\",\"ifb\"]\n },\n \"text/calender\": {\n \"compressible\": true\n },\n \"text/cmd\": {\n \"compressible\": true\n },\n \"text/coffeescript\": {\n \"extensions\": [\"coffee\",\"litcoffee\"]\n },\n \"text/cql\": {\n \"source\": \"iana\"\n },\n \"text/cql-expression\": {\n \"source\": \"iana\"\n },\n \"text/cql-identifier\": {\n \"source\": \"iana\"\n },\n \"text/css\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true,\n \"extensions\": [\"css\"]\n },\n \"text/csv\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"csv\"]\n },\n \"text/csv-schema\": {\n \"source\": \"iana\"\n },\n \"text/directory\": {\n \"source\": \"iana\"\n },\n \"text/dns\": {\n \"source\": \"iana\"\n },\n \"text/ecmascript\": {\n \"source\": \"iana\"\n },\n \"text/encaprtp\": {\n \"source\": \"iana\"\n },\n \"text/enriched\": {\n \"source\": \"iana\"\n },\n \"text/fhirpath\": {\n \"source\": \"iana\"\n },\n \"text/flexfec\": {\n \"source\": \"iana\"\n },\n \"text/fwdred\": {\n \"source\": \"iana\"\n },\n \"text/gff3\": {\n \"source\": \"iana\"\n },\n \"text/grammar-ref-list\": {\n \"source\": \"iana\"\n },\n \"text/html\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"html\",\"htm\",\"shtml\"]\n },\n \"text/jade\": {\n \"extensions\": [\"jade\"]\n },\n \"text/javascript\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"text/jcr-cnd\": {\n \"source\": \"iana\"\n },\n \"text/jsx\": {\n \"compressible\": true,\n \"extensions\": [\"jsx\"]\n },\n \"text/less\": {\n \"compressible\": true,\n \"extensions\": [\"less\"]\n },\n \"text/markdown\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"markdown\",\"md\"]\n },\n \"text/mathml\": {\n \"source\": \"nginx\",\n \"extensions\": [\"mml\"]\n },\n \"text/mdx\": {\n \"compressible\": true,\n \"extensions\": [\"mdx\"]\n },\n \"text/mizar\": {\n \"source\": \"iana\"\n },\n \"text/n3\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true,\n \"extensions\": [\"n3\"]\n },\n \"text/parameters\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\"\n },\n \"text/parityfec\": {\n \"source\": \"iana\"\n },\n \"text/plain\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"txt\",\"text\",\"conf\",\"def\",\"list\",\"log\",\"in\",\"ini\"]\n },\n \"text/provenance-notation\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\"\n },\n \"text/prs.fallenstein.rst\": {\n \"source\": \"iana\"\n },\n \"text/prs.lines.tag\": {\n \"source\": \"iana\",\n \"extensions\": [\"dsc\"]\n },\n \"text/prs.prop.logic\": {\n \"source\": \"iana\"\n },\n \"text/raptorfec\": {\n \"source\": \"iana\"\n },\n \"text/red\": {\n \"source\": \"iana\"\n },\n \"text/rfc822-headers\": {\n \"source\": \"iana\"\n },\n \"text/richtext\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"rtx\"]\n },\n \"text/rtf\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"rtf\"]\n },\n \"text/rtp-enc-aescm128\": {\n \"source\": \"iana\"\n },\n \"text/rtploopback\": {\n \"source\": \"iana\"\n },\n \"text/rtx\": {\n \"source\": \"iana\"\n },\n \"text/sgml\": {\n \"source\": \"iana\",\n \"extensions\": [\"sgml\",\"sgm\"]\n },\n \"text/shaclc\": {\n \"source\": \"iana\"\n },\n \"text/shex\": {\n \"source\": \"iana\",\n \"extensions\": [\"shex\"]\n },\n \"text/slim\": {\n \"extensions\": [\"slim\",\"slm\"]\n },\n \"text/spdx\": {\n \"source\": \"iana\",\n \"extensions\": [\"spdx\"]\n },\n \"text/strings\": {\n \"source\": \"iana\"\n },\n \"text/stylus\": {\n \"extensions\": [\"stylus\",\"styl\"]\n },\n \"text/t140\": {\n \"source\": \"iana\"\n },\n \"text/tab-separated-values\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"tsv\"]\n },\n \"text/troff\": {\n \"source\": \"iana\",\n \"extensions\": [\"t\",\"tr\",\"roff\",\"man\",\"me\",\"ms\"]\n },\n \"text/turtle\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"extensions\": [\"ttl\"]\n },\n \"text/ulpfec\": {\n \"source\": \"iana\"\n },\n \"text/uri-list\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"uri\",\"uris\",\"urls\"]\n },\n \"text/vcard\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"vcard\"]\n },\n \"text/vnd.a\": {\n \"source\": \"iana\"\n },\n \"text/vnd.abc\": {\n \"source\": \"iana\"\n },\n \"text/vnd.ascii-art\": {\n \"source\": \"iana\"\n },\n \"text/vnd.curl\": {\n \"source\": \"iana\",\n \"extensions\": [\"curl\"]\n },\n \"text/vnd.curl.dcurl\": {\n \"source\": \"apache\",\n \"extensions\": [\"dcurl\"]\n },\n \"text/vnd.curl.mcurl\": {\n \"source\": \"apache\",\n \"extensions\": [\"mcurl\"]\n },\n \"text/vnd.curl.scurl\": {\n \"source\": \"apache\",\n \"extensions\": [\"scurl\"]\n },\n \"text/vnd.debian.copyright\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\"\n },\n \"text/vnd.dmclientscript\": {\n \"source\": \"iana\"\n },\n \"text/vnd.dvb.subtitle\": {\n \"source\": \"iana\",\n \"extensions\": [\"sub\"]\n },\n \"text/vnd.esmertec.theme-descriptor\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\"\n },\n \"text/vnd.familysearch.gedcom\": {\n \"source\": \"iana\",\n \"extensions\": [\"ged\"]\n },\n \"text/vnd.ficlab.flt\": {\n \"source\": \"iana\"\n },\n \"text/vnd.fly\": {\n \"source\": \"iana\",\n \"extensions\": [\"fly\"]\n },\n \"text/vnd.fmi.flexstor\": {\n \"source\": \"iana\",\n \"extensions\": [\"flx\"]\n },\n \"text/vnd.gml\": {\n \"source\": \"iana\"\n },\n \"text/vnd.graphviz\": {\n \"source\": \"iana\",\n \"extensions\": [\"gv\"]\n },\n \"text/vnd.hans\": {\n \"source\": \"iana\"\n },\n \"text/vnd.hgl\": {\n \"source\": \"iana\"\n },\n \"text/vnd.in3d.3dml\": {\n \"source\": \"iana\",\n \"extensions\": [\"3dml\"]\n },\n \"text/vnd.in3d.spot\": {\n \"source\": \"iana\",\n \"extensions\": [\"spot\"]\n },\n \"text/vnd.iptc.newsml\": {\n \"source\": \"iana\"\n },\n \"text/vnd.iptc.nitf\": {\n \"source\": \"iana\"\n },\n \"text/vnd.latex-z\": {\n \"source\": \"iana\"\n },\n \"text/vnd.motorola.reflex\": {\n \"source\": \"iana\"\n },\n \"text/vnd.ms-mediapackage\": {\n \"source\": \"iana\"\n },\n \"text/vnd.net2phone.commcenter.command\": {\n \"source\": \"iana\"\n },\n \"text/vnd.radisys.msml-basic-layout\": {\n \"source\": \"iana\"\n },\n \"text/vnd.senx.warpscript\": {\n \"source\": \"iana\"\n },\n \"text/vnd.si.uricatalogue\": {\n \"source\": \"iana\"\n },\n \"text/vnd.sosi\": {\n \"source\": \"iana\"\n },\n \"text/vnd.sun.j2me.app-descriptor\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"extensions\": [\"jad\"]\n },\n \"text/vnd.trolltech.linguist\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\"\n },\n \"text/vnd.wap.si\": {\n \"source\": \"iana\"\n },\n \"text/vnd.wap.sl\": {\n \"source\": \"iana\"\n },\n \"text/vnd.wap.wml\": {\n \"source\": \"iana\",\n \"extensions\": [\"wml\"]\n },\n \"text/vnd.wap.wmlscript\": {\n \"source\": \"iana\",\n \"extensions\": [\"wmls\"]\n },\n \"text/vtt\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true,\n \"extensions\": [\"vtt\"]\n },\n \"text/x-asm\": {\n \"source\": \"apache\",\n \"extensions\": [\"s\",\"asm\"]\n },\n \"text/x-c\": {\n \"source\": \"apache\",\n \"extensions\": [\"c\",\"cc\",\"cxx\",\"cpp\",\"h\",\"hh\",\"dic\"]\n },\n \"text/x-component\": {\n \"source\": \"nginx\",\n \"extensions\": [\"htc\"]\n },\n \"text/x-fortran\": {\n \"source\": \"apache\",\n \"extensions\": [\"f\",\"for\",\"f77\",\"f90\"]\n },\n \"text/x-gwt-rpc\": {\n \"compressible\": true\n },\n \"text/x-handlebars-template\": {\n \"extensions\": [\"hbs\"]\n },\n \"text/x-java-source\": {\n \"source\": \"apache\",\n \"extensions\": [\"java\"]\n },\n \"text/x-jquery-tmpl\": {\n \"compressible\": true\n },\n \"text/x-lua\": {\n \"extensions\": [\"lua\"]\n },\n \"text/x-markdown\": {\n \"compressible\": true,\n \"extensions\": [\"mkd\"]\n },\n \"text/x-nfo\": {\n \"source\": \"apache\",\n \"extensions\": [\"nfo\"]\n },\n \"text/x-opml\": {\n \"source\": \"apache\",\n \"extensions\": [\"opml\"]\n },\n \"text/x-org\": {\n \"compressible\": true,\n \"extensions\": [\"org\"]\n },\n \"text/x-pascal\": {\n \"source\": \"apache\",\n \"extensions\": [\"p\",\"pas\"]\n },\n \"text/x-processing\": {\n \"compressible\": true,\n \"extensions\": [\"pde\"]\n },\n \"text/x-sass\": {\n \"extensions\": [\"sass\"]\n },\n \"text/x-scss\": {\n \"extensions\": [\"scss\"]\n },\n \"text/x-setext\": {\n \"source\": \"apache\",\n \"extensions\": [\"etx\"]\n },\n \"text/x-sfv\": {\n \"source\": \"apache\",\n \"extensions\": [\"sfv\"]\n },\n \"text/x-suse-ymp\": {\n \"compressible\": true,\n \"extensions\": [\"ymp\"]\n },\n \"text/x-uuencode\": {\n \"source\": \"apache\",\n \"extensions\": [\"uu\"]\n },\n \"text/x-vcalendar\": {\n \"source\": \"apache\",\n \"extensions\": [\"vcs\"]\n },\n \"text/x-vcard\": {\n \"source\": \"apache\",\n \"extensions\": [\"vcf\"]\n },\n \"text/xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"xml\"]\n },\n \"text/xml-external-parsed-entity\": {\n \"source\": \"iana\"\n },\n \"text/yaml\": {\n \"compressible\": true,\n \"extensions\": [\"yaml\",\"yml\"]\n },\n \"video/1d-interleaved-parityfec\": {\n \"source\": \"iana\"\n },\n \"video/3gpp\": {\n \"source\": \"iana\",\n \"extensions\": [\"3gp\",\"3gpp\"]\n },\n \"video/3gpp-tt\": {\n \"source\": \"iana\"\n },\n \"video/3gpp2\": {\n \"source\": \"iana\",\n \"extensions\": [\"3g2\"]\n },\n \"video/av1\": {\n \"source\": \"iana\"\n },\n \"video/bmpeg\": {\n \"source\": \"iana\"\n },\n \"video/bt656\": {\n \"source\": \"iana\"\n },\n \"video/celb\": {\n \"source\": \"iana\"\n },\n \"video/dv\": {\n \"source\": \"iana\"\n },\n \"video/encaprtp\": {\n \"source\": \"iana\"\n },\n \"video/ffv1\": {\n \"source\": \"iana\"\n },\n \"video/flexfec\": {\n \"source\": \"iana\"\n },\n \"video/h261\": {\n \"source\": \"iana\",\n \"extensions\": [\"h261\"]\n },\n \"video/h263\": {\n \"source\": \"iana\",\n \"extensions\": [\"h263\"]\n },\n \"video/h263-1998\": {\n \"source\": \"iana\"\n },\n \"video/h263-2000\": {\n \"source\": \"iana\"\n },\n \"video/h264\": {\n \"source\": \"iana\",\n \"extensions\": [\"h264\"]\n },\n \"video/h264-rcdo\": {\n \"source\": \"iana\"\n },\n \"video/h264-svc\": {\n \"source\": \"iana\"\n },\n \"video/h265\": {\n \"source\": \"iana\"\n },\n \"video/iso.segment\": {\n \"source\": \"iana\",\n \"extensions\": [\"m4s\"]\n },\n \"video/jpeg\": {\n \"source\": \"iana\",\n \"extensions\": [\"jpgv\"]\n },\n \"video/jpeg2000\": {\n \"source\": \"iana\"\n },\n \"video/jpm\": {\n \"source\": \"apache\",\n \"extensions\": [\"jpm\",\"jpgm\"]\n },\n \"video/jxsv\": {\n \"source\": \"iana\"\n },\n \"video/mj2\": {\n \"source\": \"iana\",\n \"extensions\": [\"mj2\",\"mjp2\"]\n },\n \"video/mp1s\": {\n \"source\": \"iana\"\n },\n \"video/mp2p\": {\n \"source\": \"iana\"\n },\n \"video/mp2t\": {\n \"source\": \"iana\",\n \"extensions\": [\"ts\"]\n },\n \"video/mp4\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"mp4\",\"mp4v\",\"mpg4\"]\n },\n \"video/mp4v-es\": {\n \"source\": \"iana\"\n },\n \"video/mpeg\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"mpeg\",\"mpg\",\"mpe\",\"m1v\",\"m2v\"]\n },\n \"video/mpeg4-generic\": {\n \"source\": \"iana\"\n },\n \"video/mpv\": {\n \"source\": \"iana\"\n },\n \"video/nv\": {\n \"source\": \"iana\"\n },\n \"video/ogg\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"ogv\"]\n },\n \"video/parityfec\": {\n \"source\": \"iana\"\n },\n \"video/pointer\": {\n \"source\": \"iana\"\n },\n \"video/quicktime\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"qt\",\"mov\"]\n },\n \"video/raptorfec\": {\n \"source\": \"iana\"\n },\n \"video/raw\": {\n \"source\": \"iana\"\n },\n \"video/rtp-enc-aescm128\": {\n \"source\": \"iana\"\n },\n \"video/rtploopback\": {\n \"source\": \"iana\"\n },\n \"video/rtx\": {\n \"source\": \"iana\"\n },\n \"video/scip\": {\n \"source\": \"iana\"\n },\n \"video/smpte291\": {\n \"source\": \"iana\"\n },\n \"video/smpte292m\": {\n \"source\": \"iana\"\n },\n \"video/ulpfec\": {\n \"source\": \"iana\"\n },\n \"video/vc1\": {\n \"source\": \"iana\"\n },\n \"video/vc2\": {\n \"source\": \"iana\"\n },\n \"video/vnd.cctv\": {\n \"source\": \"iana\"\n },\n \"video/vnd.dece.hd\": {\n \"source\": \"iana\",\n \"extensions\": [\"uvh\",\"uvvh\"]\n },\n \"video/vnd.dece.mobile\": {\n \"source\": \"iana\",\n \"extensions\": [\"uvm\",\"uvvm\"]\n },\n \"video/vnd.dece.mp4\": {\n \"source\": \"iana\"\n },\n \"video/vnd.dece.pd\": {\n \"source\": \"iana\",\n \"extensions\": [\"uvp\",\"uvvp\"]\n },\n \"video/vnd.dece.sd\": {\n \"source\": \"iana\",\n \"extensions\": [\"uvs\",\"uvvs\"]\n },\n \"video/vnd.dece.video\": {\n \"source\": \"iana\",\n \"extensions\": [\"uvv\",\"uvvv\"]\n },\n \"video/vnd.directv.mpeg\": {\n \"source\": \"iana\"\n },\n \"video/vnd.directv.mpeg-tts\": {\n \"source\": \"iana\"\n },\n \"video/vnd.dlna.mpeg-tts\": {\n \"source\": \"iana\"\n },\n \"video/vnd.dvb.file\": {\n \"source\": \"iana\",\n \"extensions\": [\"dvb\"]\n },\n \"video/vnd.fvt\": {\n \"source\": \"iana\",\n \"extensions\": [\"fvt\"]\n },\n \"video/vnd.hns.video\": {\n \"source\": \"iana\"\n },\n \"video/vnd.iptvforum.1dparityfec-1010\": {\n \"source\": \"iana\"\n },\n \"video/vnd.iptvforum.1dparityfec-2005\": {\n \"source\": \"iana\"\n },\n \"video/vnd.iptvforum.2dparityfec-1010\": {\n \"source\": \"iana\"\n },\n \"video/vnd.iptvforum.2dparityfec-2005\": {\n \"source\": \"iana\"\n },\n \"video/vnd.iptvforum.ttsavc\": {\n \"source\": \"iana\"\n },\n \"video/vnd.iptvforum.ttsmpeg2\": {\n \"source\": \"iana\"\n },\n \"video/vnd.motorola.video\": {\n \"source\": \"iana\"\n },\n \"video/vnd.motorola.videop\": {\n \"source\": \"iana\"\n },\n \"video/vnd.mpegurl\": {\n \"source\": \"iana\",\n \"extensions\": [\"mxu\",\"m4u\"]\n },\n \"video/vnd.ms-playready.media.pyv\": {\n \"source\": \"iana\",\n \"extensions\": [\"pyv\"]\n },\n \"video/vnd.nokia.interleaved-multimedia\": {\n \"source\": \"iana\"\n },\n \"video/vnd.nokia.mp4vr\": {\n \"source\": \"iana\"\n },\n \"video/vnd.nokia.videovoip\": {\n \"source\": \"iana\"\n },\n \"video/vnd.objectvideo\": {\n \"source\": \"iana\"\n },\n \"video/vnd.radgamettools.bink\": {\n \"source\": \"iana\"\n },\n \"video/vnd.radgamettools.smacker\": {\n \"source\": \"iana\"\n },\n \"video/vnd.sealed.mpeg1\": {\n \"source\": \"iana\"\n },\n \"video/vnd.sealed.mpeg4\": {\n \"source\": \"iana\"\n },\n \"video/vnd.sealed.swf\": {\n \"source\": \"iana\"\n },\n \"video/vnd.sealedmedia.softseal.mov\": {\n \"source\": \"iana\"\n },\n \"video/vnd.uvvu.mp4\": {\n \"source\": \"iana\",\n \"extensions\": [\"uvu\",\"uvvu\"]\n },\n \"video/vnd.vivo\": {\n \"source\": \"iana\",\n \"extensions\": [\"viv\"]\n },\n \"video/vnd.youtube.yt\": {\n \"source\": \"iana\"\n },\n \"video/vp8\": {\n \"source\": \"iana\"\n },\n \"video/vp9\": {\n \"source\": \"iana\"\n },\n \"video/webm\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"webm\"]\n },\n \"video/x-f4v\": {\n \"source\": \"apache\",\n \"extensions\": [\"f4v\"]\n },\n \"video/x-fli\": {\n \"source\": \"apache\",\n \"extensions\": [\"fli\"]\n },\n \"video/x-flv\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"flv\"]\n },\n \"video/x-m4v\": {\n \"source\": \"apache\",\n \"extensions\": [\"m4v\"]\n },\n \"video/x-matroska\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"mkv\",\"mk3d\",\"mks\"]\n },\n \"video/x-mng\": {\n \"source\": \"apache\",\n \"extensions\": [\"mng\"]\n },\n \"video/x-ms-asf\": {\n \"source\": \"apache\",\n \"extensions\": [\"asf\",\"asx\"]\n },\n \"video/x-ms-vob\": {\n \"source\": \"apache\",\n \"extensions\": [\"vob\"]\n },\n \"video/x-ms-wm\": {\n \"source\": \"apache\",\n \"extensions\": [\"wm\"]\n },\n \"video/x-ms-wmv\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"wmv\"]\n },\n \"video/x-ms-wmx\": {\n \"source\": \"apache\",\n \"extensions\": [\"wmx\"]\n },\n \"video/x-ms-wvx\": {\n \"source\": \"apache\",\n \"extensions\": [\"wvx\"]\n },\n \"video/x-msvideo\": {\n \"source\": \"apache\",\n \"extensions\": [\"avi\"]\n },\n \"video/x-sgi-movie\": {\n \"source\": \"apache\",\n \"extensions\": [\"movie\"]\n },\n \"video/x-smv\": {\n \"source\": \"apache\",\n \"extensions\": [\"smv\"]\n },\n \"x-conference/x-cooltalk\": {\n \"source\": \"apache\",\n \"extensions\": [\"ice\"]\n },\n \"x-shader/x-fragment\": {\n \"compressible\": true\n },\n \"x-shader/x-vertex\": {\n \"compressible\": true\n }\n}\n","/*!\n * mime-db\n * Copyright(c) 2014 Jonathan Ong\n * Copyright(c) 2015-2022 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n/**\n * Module exports.\n */\n\nmodule.exports = require('./db.json')\n","/*!\n * mime-types\n * Copyright(c) 2014 Jonathan Ong\n * Copyright(c) 2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar db = require('mime-db')\nvar extname = require('path').extname\n\n/**\n * Module variables.\n * @private\n */\n\nvar EXTRACT_TYPE_REGEXP = /^\\s*([^;\\s]*)(?:;|\\s|$)/\nvar TEXT_TYPE_REGEXP = /^text\\//i\n\n/**\n * Module exports.\n * @public\n */\n\nexports.charset = charset\nexports.charsets = { lookup: charset }\nexports.contentType = contentType\nexports.extension = extension\nexports.extensions = Object.create(null)\nexports.lookup = lookup\nexports.types = Object.create(null)\n\n// Populate the extensions/types maps\npopulateMaps(exports.extensions, exports.types)\n\n/**\n * Get the default charset for a MIME type.\n *\n * @param {string} type\n * @return {boolean|string}\n */\n\nfunction charset (type) {\n if (!type || typeof type !== 'string') {\n return false\n }\n\n // TODO: use media-typer\n var match = EXTRACT_TYPE_REGEXP.exec(type)\n var mime = match && db[match[1].toLowerCase()]\n\n if (mime && mime.charset) {\n return mime.charset\n }\n\n // default text/* to utf-8\n if (match && TEXT_TYPE_REGEXP.test(match[1])) {\n return 'UTF-8'\n }\n\n return false\n}\n\n/**\n * Create a full Content-Type header given a MIME type or extension.\n *\n * @param {string} str\n * @return {boolean|string}\n */\n\nfunction contentType (str) {\n // TODO: should this even be in this module?\n if (!str || typeof str !== 'string') {\n return false\n }\n\n var mime = str.indexOf('/') === -1\n ? exports.lookup(str)\n : str\n\n if (!mime) {\n return false\n }\n\n // TODO: use content-type or other module\n if (mime.indexOf('charset') === -1) {\n var charset = exports.charset(mime)\n if (charset) mime += '; charset=' + charset.toLowerCase()\n }\n\n return mime\n}\n\n/**\n * Get the default extension for a MIME type.\n *\n * @param {string} type\n * @return {boolean|string}\n */\n\nfunction extension (type) {\n if (!type || typeof type !== 'string') {\n return false\n }\n\n // TODO: use media-typer\n var match = EXTRACT_TYPE_REGEXP.exec(type)\n\n // get extensions\n var exts = match && exports.extensions[match[1].toLowerCase()]\n\n if (!exts || !exts.length) {\n return false\n }\n\n return exts[0]\n}\n\n/**\n * Lookup the MIME type for a file path/extension.\n *\n * @param {string} path\n * @return {boolean|string}\n */\n\nfunction lookup (path) {\n if (!path || typeof path !== 'string') {\n return false\n }\n\n // get the extension (\"ext\" or \".ext\" or full path)\n var extension = extname('x.' + path)\n .toLowerCase()\n .substr(1)\n\n if (!extension) {\n return false\n }\n\n return exports.types[extension] || false\n}\n\n/**\n * Populate the extensions and types maps.\n * @private\n */\n\nfunction populateMaps (extensions, types) {\n // source preference (least -> most)\n var preference = ['nginx', 'apache', undefined, 'iana']\n\n Object.keys(db).forEach(function forEachMimeType (type) {\n var mime = db[type]\n var exts = mime.extensions\n\n if (!exts || !exts.length) {\n return\n }\n\n // mime -> extensions\n extensions[type] = exts\n\n // extension -> mime\n for (var i = 0; i < exts.length; i++) {\n var extension = exts[i]\n\n if (types[extension]) {\n var from = preference.indexOf(db[types[extension]].source)\n var to = preference.indexOf(mime.source)\n\n if (types[extension] !== 'application/octet-stream' &&\n (from > to || (from === to && types[extension].substr(0, 12) === 'application/'))) {\n // skip the remapping\n continue\n }\n }\n\n // set the extension -> mime\n types[extension] = type\n }\n })\n}\n","import { AccessTokenAuth, ApiKeyAuth, LocalAuth, OAuth2Auth, Options, SessionAuth, resolveAuth } from './options'\n\nimport { WorkerEndpoint } from './worker/worker_endpoint'\nimport { MAX_OPEN_SOURCES, PipelineConfigurationError } from './worker/pipeline_backend'\nimport { DataEndpoint } from './data/data_endpoint'\n\nimport { TransientPopId, WorkerOptions } from './worker/worker_options'\nimport { DataOptions } from './data/data_options'\nimport { WorkerSession, validatePop } from './worker/worker_types'\nimport { DataSession } from './data/data_types'\n\nexport { WorkerEndpoint } from './worker/worker_endpoint'\nexport { DataEndpoint, EyePopDataWebSocketError } from './data/data_endpoint'\n\nexport {\n Session,\n EndpointState,\n StreamTime,\n Prediction,\n PredictedClass,\n PredictedText,\n PredictedEmbedding,\n PredictedObject,\n PredictedMesh,\n PredictedKeyPoint,\n PredictedKeyPoints,\n PredictedMotion,\n Contour,\n Mask,\n Depth,\n Point2d,\n Point3d,\n} from './types'\n\nexport { DepthMap, decodeDepthMap } from './depth'\nexport { PointCloud, CloudBox, CloudBounds, Vector3, decodePointCloud, cloudOfObject, cloudOfDepth, cloudsOfPrediction } from './point_cloud'\nexport { Camera, CameraIntrinsics, CameraDistortion, CameraExtrinsics, Quaternion, Vector3d, QUATERNION_TOLERANCE, validateCamera } from './camera'\n\nexport {\n ChangeType,\n DataSession,\n ModelType,\n ChangeEvent,\n Asset,\n AnnotationType,\n Annotation,\n AssetStatus,\n OnChangeEvent,\n Model,\n ModelStatus,\n ModelUpdate,\n ModelCreate,\n DatasetCreate,\n Dataset,\n DatasetUpdate,\n DatasetHeroAssetUpdate,\n DatasetVersion,\n UserReview,\n TranscodeMode,\n AutoAnnotateParams,\n ModelTrainingStage,\n ModelTrainingProgress,\n ModelMetrics,\n ModelSample,\n AssetImport,\n ModelExport,\n ModelExportStatus,\n ModelPrecisionType,\n ModelFormat,\n QcAiHubExportParams,\n ExportedBy,\n ArtifactType,\n DatasetParent,\n CreateWorkflowConfig,\n CreateWorkflow,\n Workflow,\n DownloadResponse,\n AssetUrlType,\n AutoAnnotateStatus,\n DatasetAutoAnnotate,\n DatasetAutoAnnotateCreate,\n DatasetAutoAnnotateUpdate,\n InferRuntimeConfig,\n TransformInto,\n ResponseSchema,\n InferRequest,\n EvaluateFilter,\n EvaluateConfig,\n EvaluateRequest,\n EvaluationStatus,\n EvaluateRunInfo,\n EvaluateResponse,\n InferRunInfo,\n VlmAbilityStatus,\n AutoPromptConfig,\n AbilityAliasEntry,\n VlmAbilityCreate,\n VlmAbilityUpdate,\n VlmAbility,\n VlmAbilityGroupCreate,\n VlmAbilityGroupUpdate,\n VlmAbilityGroup,\n AliasResolution,\n AreaType,\n BaseArea,\n RectangleArea,\n ContourArea,\n TimeSpan,\n Roi,\n TaskType,\n TaskMode,\n BaseTask,\n ClassificationTask,\n AutoTask,\n} from './data/data_types'\n\nexport {\n WorkerSession,\n FileSource,\n MediaStreamSource,\n Source,\n PathSource,\n UrlSource,\n AssetUuidSource,\n StreamSource,\n ResultStream,\n VideoMode,\n ComponentParams,\n ProcessParams,\n ProcessRequest,\n MotionDetectConfig,\n PredictionVersion,\n DEFAULT_PREDICTION_VERSION,\n PopDepthMap,\n SourceDefaults,\n validatePop,\n} from './worker/worker_types'\n\nexport { Options, Authentication, SessionAuth, ApiKeyAuth, AccessTokenAuth, OAuth2Auth, Auth0Options, HttpClient, PlatformSupport, LocalAuth } from './options'\n\nexport { DataOptions } from './data/data_options'\n\nexport { WorkerOptions, TransientPopId } from './worker/worker_options'\n\nexport { EyepopLineDecoder } from './streaming'\n\nconst readEnv = (env: string): string | undefined => {\n if (typeof process !== 'undefined') {\n return process.env?.[env] ?? undefined\n }\n return undefined\n}\n\nlet warnedAccountIdEnv = false\n\nconst readAccountUuidEnv = (): string | undefined => {\n const accountUuid = readEnv('EYEPOP_ACCOUNT_UUID')\n if (accountUuid !== undefined) {\n return accountUuid\n }\n const accountId = readEnv('EYEPOP_ACCOUNT_ID')\n if (accountId !== undefined && !warnedAccountIdEnv) {\n warnedAccountIdEnv = true\n console.warn('EYEPOP_ACCOUNT_ID is deprecated, use EYEPOP_ACCOUNT_UUID instead')\n }\n return accountId\n}\n\nconst stringToBooleanSafe = (str?: string): boolean => {\n if (typeof str == 'undefined') {\n return false\n }\n const loweCaseStr = str.toLowerCase()\n return loweCaseStr == 'true' || loweCaseStr == 'yes'\n}\n\nexport namespace EyePop {\n const envApiKey = readEnv('EYEPOP_API_KEY')\n\n const defaultAuth: ApiKeyAuth | undefined = envApiKey\n ? {\n apiKey: envApiKey,\n }\n : undefined\n\n /**\n * @deprecated use workerEndpoint() instead\n */\n export const endpoint = workerEndpoint\n\n export function workerEndpoint(options: WorkerOptions = {}): WorkerEndpoint {\n // Defaults are filled into a copy, so a caller who reuses one options object\n // gets each endpoint resolved afresh, the account included.\n const opts: WorkerOptions = { ...options }\n if (opts.pop !== undefined) {\n // the initial Pop is serialized into the session-creation body, so\n // changePop()'s check never sees it - and this is the common way to\n // set one. Synchronous here, so a Pop that cannot mean what it says\n // fails at construction rather than at connect().\n validatePop(opts.pop)\n }\n if (opts.isLocalMode === undefined) {\n opts.isLocalMode = stringToBooleanSafe(readEnv('EYEPOP_LOCAL_MODE'))\n }\n if (opts.isPipelineMode === undefined) {\n // A session handed over from a pipeline mode endpoint carries a token for the pipeline\n // API, so its mode wins over the environment; an explicit isPipelineMode wins over both.\n const shared = (resolveAuth(opts) as SessionAuth | undefined)?.session as WorkerSession | undefined\n opts.isPipelineMode = shared?.isPipelineMode ?? stringToBooleanSafe(readEnv('EYEPOP_PIPELINE_MODE'))\n }\n if (opts.isPipelineMode) {\n return pipelineEndpoint(opts)\n }\n if (opts.isLocalMode) {\n opts.eyepopUrl = 'http://127.0.0.1:8080'\n }\n _fill_default_options(opts)\n if (resolveAuth(opts) === undefined) {\n if (opts.isLocalMode) {\n opts.auth = { isLocal: true } as LocalAuth\n } else {\n throw new Error('apiKey/accessToken/session/oAuth2 option or EYEPOP_API_KEY environment variable is required')\n }\n }\n\n if (opts.sessionUuid === undefined) {\n opts.sessionUuid = readEnv('EYEPOP_SESSION_UUID')\n }\n if (opts.sessionName === undefined) {\n opts.sessionName = readEnv('EYEPOP_SESSION_NAME')\n }\n if (opts.accountId === undefined) {\n opts.accountId = readAccountUuidEnv()\n }\n if (opts.pipelineImage === undefined) {\n opts.pipelineImage = readEnv('EYEPOP_PIPELINE_IMAGE')\n }\n if (opts.pipelineVersion === undefined) {\n opts.pipelineVersion = readEnv('EYEPOP_PIPELINE_VERSION')\n }\n\n // TODO remove pop id support in 3.16\n if (opts.popId === undefined && opts.sessionUuid === undefined) {\n opts.popId = readEnv('EYEPOP_POP_ID') || TransientPopId.Transient\n }\n\n if (opts.autoStart === undefined) {\n opts.autoStart = true\n }\n\n if (opts.stopJobs === undefined) {\n opts.stopJobs = true\n }\n\n const auth = resolveAuth(opts)\n if (auth !== undefined) {\n if ((auth as SessionAuth).session !== undefined) {\n if (((auth as SessionAuth).session as WorkerSession) !== undefined) {\n if (((auth as SessionAuth).session as WorkerSession).popId) {\n opts.popId = ((auth as SessionAuth).session as WorkerSession).popId\n }\n if (((auth as SessionAuth).session as WorkerSession).accountId) {\n opts.accountId = ((auth as SessionAuth).session as WorkerSession).accountId\n }\n }\n }\n }\n return new WorkerEndpoint(opts)\n }\n\n /** A worker endpoint on the pipeline API (SDK-27), refusing what only a worker session has. */\n function pipelineEndpoint(opts: WorkerOptions): WorkerEndpoint {\n const popId = opts.popId ?? readEnv('EYEPOP_POP_ID')\n const sessionOnly: Record<string, unknown> = {\n popId: popId === TransientPopId.Transient ? undefined : popId,\n sessionUuid: opts.sessionUuid ?? readEnv('EYEPOP_SESSION_UUID'),\n sessionName: opts.sessionName,\n pipelineImage: opts.pipelineImage,\n pipelineVersion: opts.pipelineVersion,\n }\n const named = Object.entries(sessionOnly)\n .filter(([, value]) => value)\n .map(([name]) => name)\n if (named.length > 0) {\n throw new PipelineConfigurationError('session_options', `pipeline mode runs no worker session; it takes no ${named.join(', ')}`, named)\n }\n if (opts.isLocalMode && !opts.eyepopUrl) {\n // Local mode talks to the pipeline API itself, on its default listener.\n opts.eyepopUrl = readEnv('EYEPOP_URL') || 'http://127.0.0.1:9002'\n }\n if (!opts.jobQueueLength) {\n opts.jobQueueLength = MAX_OPEN_SOURCES\n }\n _fill_default_options(opts)\n if (resolveAuth(opts) === undefined) {\n if (opts.isLocalMode) {\n opts.auth = { isLocal: true } as LocalAuth\n } else {\n throw new Error('apiKey/accessToken/session/oAuth2 option or EYEPOP_API_KEY environment variable is required')\n }\n }\n if (opts.accountId === undefined) {\n opts.accountId = ((resolveAuth(opts) as SessionAuth | undefined)?.session as WorkerSession | undefined)?.accountId ?? readAccountUuidEnv()\n }\n return new WorkerEndpoint(opts)\n }\n\n export function dataEndpoint(opts: DataOptions = {}): DataEndpoint {\n _fill_default_options(opts)\n const auth = resolveAuth(opts)\n if (auth === undefined) {\n throw new Error('apiKey/accessToken/session/oAuth2 option or EYEPOP_API_KEY environment variable is required')\n }\n if (opts.accountId === undefined) {\n opts.accountId = readAccountUuidEnv()\n }\n if ((auth as SessionAuth).session !== undefined) {\n if (((auth as SessionAuth).session as DataSession) !== undefined) {\n if (((auth as SessionAuth).session as DataSession).accountId) {\n opts.accountId = ((auth as SessionAuth).session as DataSession).accountId\n }\n }\n }\n return new DataEndpoint(opts)\n }\n\n function _fill_default_options(opts: Options) {\n if (resolveAuth(opts) === undefined && defaultAuth) {\n opts.apiKey = defaultAuth.apiKey\n }\n\n const auth = resolveAuth(opts)\n if (!opts.eyepopUrl && auth && (auth as SessionAuth).session && (auth as SessionAuth).session.eyepopUrl) {\n opts.eyepopUrl = (auth as SessionAuth).session.eyepopUrl\n }\n\n if (!opts.eyepopUrl) {\n opts.eyepopUrl = readEnv('EYEPOP_URL')\n }\n\n if (!opts.eyepopUrl) {\n opts.eyepopUrl = 'https://compute.eyepop.ai'\n }\n\n if (auth) {\n if ((auth as OAuth2Auth).oAuth2 !== undefined) {\n if (typeof (auth as OAuth2Auth).oAuth2 === 'boolean') {\n const oAuth2: OAuth2Auth =\n opts.eyepopUrl && opts.eyepopUrl.match(/https:(.*).staging.eyepop.xyz/i)\n ? {\n oAuth2: {\n domain: 'dev-eyepop.us.auth0.com',\n clientId: 'jktx3YO2UnbkNPvr05PQWf26t1kNTJyg',\n audience: 'https://dev-app.eyepop.ai',\n scope: 'admin:clouds access:inference-api access:datasets',\n },\n }\n : {\n oAuth2: {\n domain: 'eyepop.us.auth0.com',\n clientId: 'Lb9ubA9Hf3jlaqWLUx8XgA0zvotgViCl',\n audience: 'https://api.eyepop.ai',\n scope: 'admin:clouds access:inference-api access:datasets',\n },\n }\n if (opts.oAuth2 !== undefined) {\n opts.oAuth2 = oAuth2.oAuth2\n } else {\n opts.auth = oAuth2\n }\n }\n }\n }\n if (!opts.jobQueueLength) {\n opts.jobQueueLength = 128\n }\n }\n}\n\nexport * from './types'\nexport * from './endpoint'\nexport * from './options'\nexport * from './semaphore'\nexport * from './streaming'\nexport * from './data/data_types'\nexport * from './data/data_options'\nexport * from './data/data_endpoint'\nexport * from './worker/worker_types'\nexport * from './worker/worker_options'\nexport { ComputeAccountMismatchError, ComputeApiError } from './compute/compute_session'\nexport * from './worker/worker_endpoint'\nexport * from './worker/worker_backend'\nexport * from './worker/session_backend'\nexport * from './worker/pipeline_backend'\nexport * from './worker/jobs'\nexport * from './worker/webrtc_base'\nexport * from './worker/webrtc_whep'\nexport * from './worker/webrtc_whip'\nexport default EyePop\n","import { Logger } from 'pino'\nimport { Session } from './types'\nimport { PathSource, StreamSource } from './worker/worker_types'\n\nexport interface Auth0Options {\n domain: string\n clientId: string\n audience: string\n scope: string\n}\n\nexport interface ApiKeyAuth {\n /**\n * Authentication api key for server side execution.\n * Defaults to process.env['EYEPOP_API_KEY'].\n */\n apiKey: string\n}\n\nexport interface AccessTokenAuth {\n /**\n * Bearer token accepted by the compute API.\n */\n accessToken: string\n}\n\nexport interface SessionAuth {\n /**\n * Temporary authentication token for client side execution.\n */\n session: Session\n}\n\nexport interface OAuth2Auth {\n /**\n * For development mode, authenticate with your dashboard.eyepop.ai account\n */\n oAuth2: true | Auth0Options\n}\n\nexport interface LocalAuth {\n /**\n * Implicit auth w/o credentials to a local endpoint.\n */\n isLocal: true\n}\n\nexport type Authentication = undefined | ApiKeyAuth | AccessTokenAuth | SessionAuth | OAuth2Auth | LocalAuth\n\nfunction nonEmptyCredential(value: string | undefined): string | undefined {\n return value && value.length > 0 ? value : undefined\n}\n\nexport function resolveAuth(options: Options): Authentication {\n const apiKey = nonEmptyCredential(options.apiKey)\n if (apiKey !== undefined) {\n return { apiKey }\n }\n const accessToken = nonEmptyCredential(options.accessToken)\n if (accessToken !== undefined) {\n return { accessToken }\n }\n if (options.session !== undefined) {\n return { session: options.session }\n }\n if (options.oAuth2 !== undefined) {\n return { oAuth2: options.oAuth2 }\n }\n return options.auth\n}\n\nexport function apiKeyCredential(auth: Authentication): string | undefined {\n if (auth === undefined) {\n return undefined\n }\n return nonEmptyCredential((auth as ApiKeyAuth).apiKey)\n}\n\nexport function accessTokenCredential(auth: Authentication): string | undefined {\n if (auth === undefined) {\n return undefined\n }\n return nonEmptyCredential((auth as AccessTokenAuth).accessToken)\n}\n\nexport interface HttpClient {\n fetch(input: RequestInfo | URL, init?: RequestInit): Promise<Response>\n close(): Promise<void>\n isFullDuplex(): boolean\n}\n\nexport interface PlatformSupport {\n createHttpClient?: (logger: Logger) => Promise<HttpClient>\n resolvePath: (source: PathSource, logger: Logger) => Promise<StreamSource>\n}\n\nexport interface Options {\n /**\n * Authentication api key for server side execution.\n * Defaults to process.env['EYEPOP_API_KEY'].\n */\n apiKey?: string | undefined\n\n /**\n * Bearer token accepted by the compute API.\n */\n accessToken?: string | undefined\n\n /**\n * Temporary authentication token for client side execution.\n */\n session?: Session | undefined\n\n /**\n * For development mode, authenticate with your dashboard.eyepop.ai account\n */\n oAuth2?: true | Auth0Options | undefined\n\n /**\n * @deprecated Pass apiKey, accessToken, session, or oAuth2 at the top level.\n */\n auth?: Authentication | undefined\n\n eyepopUrl?: string | undefined\n\n jobQueueLength?: number\n\n logger?: Logger | undefined\n\n platformSupport?: PlatformSupport\n}\n","export interface Session {\n readonly eyepopUrl: string\n readonly accessToken: string\n readonly validUntil: number\n}\n\nexport enum EndpointState {\n Idle = 'Idle',\n Busy = 'Busy',\n Authenticating = 'Authenticating',\n FetchConfig = 'FetchConfig',\n Error = 'Error',\n NotAvailable = 'NotAvailable',\n}\n\nexport interface Box {\n readonly topLeft: Point2d\n readonly bottomRight: Point2d\n}\n\nexport interface StreamTime {\n /**\n * Temporal offset of prediction from start of the media (video or audio) in nano seconds.\n */\n timestamp?: number\n /**\n * Convenience, same vale as 'timestamp' just in seconds.\n */\n seconds?: number\n /**\n * Temporal length of the chunk that was the source for this prediction in nano seconds.\n */\n duration?: number\n /**\n * Real time when the media was captured as epoch timestamp in nano seconds.\n *\n * Only provided if source provides this timestamp e.g. as timestamp/x-ntp in RTSP.\n */\n captured_at?: number\n /**\n * A media specific offset.\n *\n * For video frames, this is the frame number of prediction.\n * For audio samples, this is the offset of the first sample for this prediction.\n */\n offset?: number\n /**\n * Offset length of the chunk used for this prediction.\n *\n * It has the same format as offset.\n */\n offset_duration?: number\n}\n\nexport interface Prediction extends StreamTime {\n /**\n * The width of the source coordinate system for all prediction coordinates.\n */\n source_width: number\n /**\n * The height of the source coordinate system for all prediction coordinates.\n */\n source_height: number\n source_id?: string\n source_url?: string\n source_type?: string\n system_timestamp?: number\n objects?: Array<PredictedObject>\n classes?: Array<PredictedClass>\n texts?: Array<PredictedText>\n meshs?: Array<PredictedMesh>\n keyPoints?: Array<PredictedKeyPoints>\n embeddings?: Array<PredictedEmbedding>\n details?: Array<Record<string, any>>\n motions?: Array<PredictedMotion>\n depth?: Depth\n /**\n * Set on a selected prediction: the results of a `select_crop` or\n * `select_full` forward for one track. It arrives after later predictions,\n * carries the `timestamp` of the past frame that was selected, and its\n * selected object's `trackId` links it to that track's live predictions.\n * It is not the stream's progress: skip it where frames are drawn or\n * counted.\n */\n selected?: boolean\n}\n\nexport interface PredictedClass {\n id?: number\n confidence?: number\n classLabel: string\n category?: string\n}\n\nexport interface PredictedText {\n id?: number\n confidence?: number\n text: string\n category?: string\n}\n\nexport interface PredictedEmbedding {\n x?: number\n y?: number\n embedding: Array<number>\n category?: string\n}\n\nexport interface Contour {\n points: Array<Point2d>\n cutouts: Array<Array<Point2d>>\n}\n\n/**\n * A segmentation mask, optionally with a per-object point cloud.\n *\n * `world` is the base64 encoding of three little-endian float32 values per mask\n * pixel, row-major, exactly width*height triples - so the point for bitmap\n * pixel (i, j) is at triple index j * width + i. Points the worker could not\n * place are NaN. Use decodePointCloud() to read it.\n */\nexport interface Mask {\n bitmap: string\n width: number\n height: number\n stride: number\n world?: string\n}\n\n/**\n * A frame-level depth map as produced by depth estimation abilities\n * (e.g. eyepop.depth.*).\n *\n * `values` is the base64 encoding of width*height little-endian float32\n * values in row-major order. The map always has the aspect ratio of the\n * source frame; map a source coordinate (x, y) to the map proportionally:\n * (x * width / source_width, y * height / source_height).\n *\n * Sky pixels carry +Infinity. Use decodeDepthMap() to access the values.\n *\n * `semantic` says what the values mean, and is always present in prediction v2 -\n * \"unknown\" included - so an absent member means a worker that predates the\n * field rather than a map that declined to say:\n *\n * - \"canonical_metric\" - meters = value * focal_px / 300, with focal_px scaled\n * to the map's own resolution\n * - \"metric\" - the value is already meters\n * - \"relative\" - scale- AND shift-invariant, so ordering is meaningful but\n * distance is not. Not back-projectable: recovering a cloud from it yields a\n * distorted scene rather than a scaled one\n * - \"unknown\" - the ability declared nothing. Not back-projectable\n *\n * `world` is the scene point cloud, present when the Pop asked for\n * `depthMap.toWorld`. Same encoding as `Mask.world` - three little-endian\n * float32 per pixel, row-major - but on this map's own grid, so the point for\n * pixel (i, j) is at triple index j * width + i, exactly where that pixel's\n * value sits in `values`. Points the worker could not place are NaN; the value\n * at the same index is what says why, which is why both are sent.\n */\nexport interface Depth {\n width: number\n height: number\n values: string\n semantic?: DepthSemantic\n world?: string\n}\n\nexport type DepthSemantic = 'canonical_metric' | 'metric' | 'relative' | 'unknown'\n\nexport interface PredictedObject extends PredictedClass {\n trackId?: number\n x: number\n y: number\n width: number\n height: number\n orientation?: number\n outline?: Array<Point2d>\n contours?: Array<Contour>\n mask?: Mask\n objects?: Array<PredictedObject>\n classes?: Array<PredictedClass>\n texts?: Array<PredictedText>\n meshs?: Array<PredictedMesh>\n keyPoints?: Array<PredictedKeyPoints>\n details?: Array<Record<string, any>>\n}\n\n/**\n * A point in source pixels, optionally placed in 3D.\n *\n * `worldX`/`worldY`/`worldZ` are meters, present only when the pipeline was\n * asked for world coordinates - a Pop with `depthMap` and a component with\n * `toWorld` - and only in prediction v2. A point the worker could not place -\n * sky, outside the depth map, no usable map - carries none of the three rather\n * than a zero or a NaN, so test for undefined.\n *\n * Which frame they are in depends on the source's camera: with extrinsics, the\n * world frame those define (Z up, ground at Z = 0); without them, the camera\n * frame in the OpenCV convention (X right, Y down, Z forward from the camera).\n *\n * Only the carriers the worker enriches ever populate them: key points, outline\n * points and contour points. Bounding boxes and mesh points do not - a box is\n * not a point, and any single anchor choice would be arbitrary.\n */\nexport interface Point2d {\n x: number\n y: number\n worldX?: number\n worldY?: number\n worldZ?: number\n}\n\nexport interface PredictedMesh {\n category?: string\n id?: number\n confidence?: number\n points: Array<Point3d>\n}\n\nexport interface Point3d extends Point2d {\n z?: number\n}\n\nexport interface PredictedKeyPoints {\n category?: string\n type?: string\n points: Array<PredictedKeyPoint>\n}\n\nexport interface PredictedKeyPoint extends Point3d {\n id?: number\n confidence?: number\n classLabel?: string\n category?: string\n visible?: boolean\n}\n\nexport interface PredictedMotion {\n begin_timestamp: number\n finished_timestamp: number | undefined\n}\n","import { Logger } from 'pino'\nimport { HttpClient } from '../options'\n\nexport let createHttpClient: (logger: Logger) => Promise<HttpClient>\n\nfunction logLineFromRequest(input: RequestInfo | URL, init?: RequestInit): string {\n const url = input instanceof Request ? input.url : input\n const method = input instanceof Request ? input.method : init?.method || (init?.body !== undefined ? 'POST' : 'GET')\n return `${method} ${url}`\n}\n\nif ('document' in globalThis && 'implementation' in globalThis.document) {\n class BrowserHttpClient {\n private readonly _logger: Logger\n constructor(logger: Logger) {\n this._logger = logger\n }\n\n public async fetch(input: RequestInfo | URL, init?: RequestInit): Promise<Response> {\n const logLine = logLineFromRequest(input, init)\n this._logger.debug(`Browser fetch() BEFORE ${logLine}`)\n const response = await fetch(input, init)\n this._logger.debug(`AFTER ${logLine} -> ${response.status}`)\n return response\n }\n\n public async close(): Promise<void> {}\n public isFullDuplex() {\n return false\n }\n }\n\n createHttpClient = async (logger: Logger) => {\n return new BrowserHttpClient(logger)\n }\n} else {\n class NodeHttpClient {\n private readonly _agent: any\n private readonly _fetch: typeof fetch\n private readonly _logger: Logger\n constructor(agent: any, fetchFn: typeof fetch, logger: Logger) {\n this._agent = agent\n this._fetch = fetchFn\n this._logger = logger\n }\n\n public async fetch(input: RequestInfo | URL, init?: RequestInit): Promise<Response> {\n init ||= {}\n // @ts-ignore\n init.dispatcher = this._agent\n const logLine = logLineFromRequest(input, init)\n this._logger.debug(`Node fetch() BEFORE ${logLine}`)\n const response = await this._fetch(input, init)\n this._logger.debug(`AFTER ${logLine} -> ${response.status}`)\n return response\n }\n\n public async close(): Promise<void> {\n return this._agent.close()\n }\n public isFullDuplex() {\n return false\n }\n }\n\n createHttpClient = async (logger: Logger) => {\n const undici = require('undici')\n const agent = new undici.Agent({\n keepAliveTimeout: 10000,\n connections: 5,\n // two parallel streaming requests to the same host seem to deadlock with pipelining > 0\n pipelining: 0,\n })\n logger.debug('Using node fetch with undici agent as http client')\n return new NodeHttpClient(agent, undici.fetch, logger)\n }\n}\n","/** Semaphores are initialized with a number of permits that get aquired and released\n * over the lifecycle of the semaphore. These permits limit the number of simultaneous\n * executions of the code that the semaphore synchronizes. Functions can wait on a semaphore\n * and stop executing until a permit becomes available.\n *\n * Locks are a special case of semaphores that only allow one execution of a critical section.\n * If you need a lock, you can import the Lock class from this package.\n *\n * This Semaphore class is implemented with the help of promises that get returned\n * by functions that wait for permits to become available. This makes it possible\n * to use async/await to synchronize your code.\n */\nexport class Semaphore {\n private permits: number\n private promiseResolverQueue: Array<(v: boolean) => void> = []\n\n /**\n * Creates a semaphore.\n * @param permits The number of permits, i.e. strands of execution being allowed\n * to run in parallel.\n * This number can be initialized with a negative integer.\n */\n constructor(permits: number) {\n this.permits = permits\n }\n\n /**\n * Returns the number of available permits.\n * @returns The number of available permits.\n */\n public getPermits(): number {\n return this.permits\n }\n\n /**\n * Returns a promise used to wait for a permit to become available. This method should be awaited on.\n * @returns A promise that gets resolved when execution is allowed to proceed.\n */\n public async wait(): Promise<boolean> {\n if (this.permits > 0) {\n this.permits -= 1\n return Promise.resolve(true)\n }\n\n // If there is no permit available, we return a promise that resolves once the semaphore gets\n // signaled enough times that permits is equal to one.\n return new Promise<boolean>(resolver => this.promiseResolverQueue.push(resolver))\n }\n\n /**\n * Alias for {@linkcode Semaphore.wait}.\n * @returns A promise that gets resolved when execution is allowed to proceed.\n */\n public async acquire(): Promise<boolean> {\n return this.wait()\n }\n\n /**\n * Same as {@linkcode Semaphore.wait} except the promise returned gets resolved with false if no\n * permit becomes available in time.\n * @param milliseconds The time spent waiting before the wait is aborted. This is a lower bound,\n * you shouldn't rely on it being precise.\n * @returns A promise that gets resolved to true when execution is allowed to proceed or\n * false if the time given elapses before a permit becomes available.\n */\n public async waitFor(milliseconds: number): Promise<boolean> {\n if (this.permits > 0) {\n this.permits -= 1\n return Promise.resolve(true)\n }\n\n // We save the resolver function in the current scope so that we can resolve the promise\n // to false if the time expires.\n let resolver: (v: boolean) => void = _ => void 0\n const promise = new Promise<boolean>(r => {\n resolver = r\n })\n\n // The saved resolver gets added to our list of promise resolvers so that it gets a chance\n // to be resolved as a result of a call to signal().\n this.promiseResolverQueue.push(resolver)\n\n setTimeout(() => {\n // We have to remove the promise resolver from our list. Resolving it twice would not be\n // an issue but signal() always takes the next resolver from the queue and resolves it which\n // would swallow a permit if we didn't remove it.\n const index = this.promiseResolverQueue.indexOf(resolver)\n if (index !== -1) {\n this.promiseResolverQueue.splice(index, 1)\n } else {\n // This shouldn't happen, not much we can do at this point\n console.warn(`Semaphore.waitFor couldn't find its promise resolver in the queue`)\n }\n\n // false because the wait was unsuccessful.\n resolver(false)\n }, milliseconds)\n\n return promise\n }\n\n /**\n * Synchronous function that tries to acquire a permit and returns true if successful, false otherwise.\n * @returns Whether a permit could be acquired.\n */\n public tryAcquire(): boolean {\n if (this.permits > 0) {\n this.permits -= 1\n return true\n }\n\n return false\n }\n\n /**\n * Acquires all permits that are currently available and returns the number of acquired permits.\n * @returns Number of acquired permits.\n */\n public drainPermits(): number {\n if (this.permits > 0) {\n const permitCount = this.permits\n this.permits = 0\n return permitCount\n }\n\n return 0\n }\n\n /**\n * Increases the number of permits by one. If there are other functions waiting, one of them will\n * continue to execute in a future iteration of the event loop.\n */\n public signal(): void {\n this.permits += 1\n\n if (this.permits > 1 && this.promiseResolverQueue.length > 0) {\n console.warn('Semaphore.permits should never be > 0 when there is someone waiting.')\n } else if (this.permits === 1 && this.promiseResolverQueue.length > 0) {\n // If there is someone else waiting, immediately consume the permit that was released\n // at the beginning of this function and let the waiting function resume.\n this.permits -= 1\n\n const nextResolver = this.promiseResolverQueue.shift()\n if (nextResolver) {\n nextResolver(true)\n }\n }\n }\n\n /**\n * Alias for {@linkcode Semaphore.signal}.\n */\n public release(): void {\n this.signal()\n }\n\n /**\n * Schedules func to be called once a permit becomes available.\n * Returns a promise that resolves to the return value of func.\n * @typeparam T The return type of func.\n * @param func The function to be executed.\n * @return A promise that gets resolved with the return value of the function.\n */\n public async execute<T>(func: () => T | PromiseLike<T>): Promise<T> {\n await this.wait()\n try {\n return await func()\n } finally {\n this.signal()\n }\n }\n}\n","import { Auth0Options, HttpClient, LocalAuth, OAuth2Auth, Options, SessionAuth, accessTokenCredential, apiKeyCredential, resolveAuth } from './options'\nimport { EndpointState, Session } from './types'\nimport { createHttpClient } from './shims/http_client'\nimport { Semaphore } from './semaphore'\n\nimport { Logger, pino } from 'pino'\nimport { authenticateBrowserSession } from './shims/browser_session'\n\ninterface AccessToken {\n access_token: string\n expires_in: number\n token_type: string\n}\n\nexport class Endpoint<T extends Endpoint<T>> {\n protected _options: Options\n private _token: string | null\n private _expire_token_time: number | null\n\n protected _client: HttpClient | null\n private _statusRetryHandlers: Map<number, Function>\n\n protected _limit: Semaphore\n private _state: EndpointState\n private _message: null | string\n private _stateChangeHandler: null | ((fromState: EndpointState, toState: EndpointState) => void)\n\n protected _logger: Logger\n protected readonly _requestLogger: Logger\n\n constructor(options: Options) {\n this._options = options\n this._token = null\n this._expire_token_time = null\n this._client = null\n this._statusRetryHandlers = new Map()\n this._statusRetryHandlers.set(401, this.statusHandler401)\n\n this._limit = new Semaphore(this._options.jobQueueLength ?? 1024)\n this._state = EndpointState.Idle\n this._message = null\n this._stateChangeHandler = null\n\n let rootLogger\n if (options.logger) {\n rootLogger = options.logger\n } else {\n rootLogger = pino()\n }\n this._logger = rootLogger.child({ module: 'eyepop' })\n this._requestLogger = this._logger.child({ module: 'requests' })\n }\n\n protected setStatusRetryHandlers(statusRetryHandlers: Map<number, Function> | undefined = undefined) {\n this._statusRetryHandlers = new Map(statusRetryHandlers)\n this._statusRetryHandlers.set(401, this.statusHandler401)\n }\n\n public eyepopUrl(): string {\n if (this._options.eyepopUrl) {\n return this._options.eyepopUrl.replace(/\\/+$/, '')\n } else {\n return 'https://compute.eyepop.ai'\n }\n }\n\n // TODO: deprecated Web API endpoint needed for POP_ID support\n public eyepopWebApiUrl(): string {\n if (this._options.eyepopUrl) {\n return this._options.eyepopUrl.replace(/\\/+$/, '').replace(/compute\\./, 'web-api.')\n } else {\n return 'https://api.eyepop.ai'\n }\n }\n\n public pendingJobs(): number {\n return (this._options.jobQueueLength ?? 1024) - this._limit.getPermits()\n }\n\n public state(): EndpointState {\n return this._state\n }\n\n public lastMessage(): string | null {\n return this._message\n }\n\n public onStateChanged(handler: (fromState: EndpointState, toState: EndpointState) => void): T {\n this._stateChangeHandler = handler\n return <T>(<unknown>this)\n }\n\n protected updateState(newState: EndpointState | undefined = undefined, message: string | undefined = undefined) {\n const fromState = this._state\n if (newState == undefined) {\n if (this._limit.getPermits() == this._options.jobQueueLength) {\n newState = EndpointState.Idle\n } else {\n newState = EndpointState.Busy\n }\n }\n this._state = newState\n this._message = message ? message : null\n\n if (this._stateChangeHandler) {\n this._stateChangeHandler(fromState, this._state)\n }\n }\n\n public async connect(): Promise<T> {\n if (this._client) {\n this._logger.warn('endpoint already connected')\n return <T>(<unknown>this)\n }\n if (!this._options.eyepopUrl) {\n return Promise.reject('option eyepopUrl or environment variable EYEPOP_URL is required')\n }\n const auth = resolveAuth(this._options)\n if (auth === undefined) {\n return Promise.reject('cannot connect without defined auth option')\n }\n if ((auth as SessionAuth).session !== undefined) {\n this._token = (auth as SessionAuth).session.accessToken\n this._expire_token_time = (auth as SessionAuth).session.validUntil / 1000\n } else if ((auth as OAuth2Auth).oAuth2 !== undefined) {\n } else if (accessTokenCredential(auth) !== undefined) {\n } else if (apiKeyCredential(auth) !== undefined) {\n } else if ((auth as LocalAuth).isLocal !== undefined) {\n } else {\n return Promise.reject('option apiKey/accessToken or environment variable EYEPOP_API_KEY is required')\n }\n\n if (this._options.platformSupport?.createHttpClient !== undefined) {\n this._client = await this._options.platformSupport.createHttpClient(this._requestLogger)\n } else {\n this._client = await createHttpClient(this._requestLogger)\n }\n\n return await this.reconnect()\n }\n\n public async disconnect(wait: boolean = true): Promise<void> {\n if (wait && this._limit) {\n // @ts-ignore\n for (let j = 0; j < this._options.jobQueueLength; j++) {\n await this._limit.acquire()\n }\n }\n\n this._limit = new Semaphore(this._options.jobQueueLength ?? 1024)\n\n if (this._client) {\n await this._client.close()\n this._client = null\n }\n }\n\n public async session(): Promise<Session> {\n await this.currentAccessToken()\n if (this._token == null || this._expire_token_time == null) {\n return Promise.reject('endpoint not connected')\n }\n return {\n eyepopUrl: <string>this._options.eyepopUrl,\n accessToken: this._token,\n validUntil: this._expire_token_time * 1000,\n }\n }\n\n protected statusHandler401(_statusCode: number): void {\n this._token = null\n this._expire_token_time = null\n }\n\n protected async fetchWithRetry(fetcher: () => Promise<Response>, retries: number = 1): Promise<Response> {\n while (true) {\n try {\n const response = await fetcher()\n if (response.ok) {\n return response\n } else {\n const handler = this._statusRetryHandlers.get(response.status)\n if (handler != null) {\n handler(response.status)\n if (retries--) {\n this._requestLogger.info('received %d response, retry', response.status)\n } else {\n return response\n }\n } else {\n return response\n }\n }\n } catch (error) {\n // handle connection errors like 404s\n const handler = this._statusRetryHandlers.get(404)\n if (handler != null) {\n handler(error)\n if (retries--) {\n this._requestLogger.info('error %s, retry', error)\n } else {\n return Promise.reject(`error ${error}`)\n }\n } else {\n return Promise.reject(`error ${error}`)\n }\n }\n }\n }\n\n protected async reconnect(): Promise<T> {\n throw new Error('reconnect() not implemented')\n }\n\n protected async authorizationHeader(): Promise<string> {\n if ((resolveAuth(this._options) as LocalAuth | undefined)?.isLocal !== undefined) {\n return `Implicit`\n }\n return `Bearer ${await this.currentAccessToken()}`\n }\n\n private async currentAccessToken(): Promise<string> {\n const now = Date.now() / 1000\n if (!this._token || <number>this._expire_token_time < now) {\n this.updateState(EndpointState.Authenticating)\n try {\n const auth = resolveAuth(this._options)\n if (!this._client) {\n return Promise.reject('endpoint not connected')\n } else if ((auth as LocalAuth | undefined)?.isLocal !== undefined) {\n this._token = 'implicit'\n this._expire_token_time = Number.MAX_VALUE\n } else if ((auth as SessionAuth | undefined)?.session !== undefined) {\n return Promise.reject('temporary access token expired')\n } else if ((auth as OAuth2Auth | undefined)?.oAuth2 !== undefined && this._options.eyepopUrl) {\n const session = await authenticateBrowserSession((auth as OAuth2Auth).oAuth2 as Auth0Options, this._options)\n this._token = session.accessToken\n this._expire_token_time = session.validUntil / 1000\n } else if (accessTokenCredential(auth) !== undefined) {\n this._token = accessTokenCredential(auth) as string\n this._expire_token_time = Number.MAX_VALUE\n } else if (this._options.eyepopUrl) {\n const credential = apiKeyCredential(auth)\n if (credential === undefined) {\n return Promise.reject('no valid auth option')\n }\n const headers = { Authorization: `Bearer ${credential}` }\n const post_url = `${this.eyepopUrl()}/v1/auth/authenticate`\n const response = await this._client.fetch(post_url, {\n method: 'POST',\n headers: headers,\n })\n if (response.status != 200) {\n const message = await response.text()\n return Promise.reject(`Unexpected status ${response.status}: ${message}`)\n }\n const data = await response.json()\n const token: AccessToken = data as AccessToken\n this._token = token.access_token\n this._expire_token_time = now + token.expires_in - 60\n } else {\n return Promise.reject('no valid auth option')\n }\n } finally {\n this.updateState()\n }\n }\n this._logger.debug('using access token, valid for at least %d seconds', <number>this._expire_token_time - now)\n return <string>this._token\n }\n}\n","import { Session } from '../types'\nimport { Auth0Options, Options } from '../options'\nimport { createAuth0Client } from '@auth0/auth0-spa-js'\nimport { WorkerOptions, WorkerSession } from '../index'\n\nexport let authenticateBrowserSession: (auth0: Auth0Options, options: Options) => Promise<Session>\n\nif ('document' in globalThis && 'implementation' in globalThis.document) {\n authenticateBrowserSession = async (auth0: Auth0Options, options: Options) => {\n if (options.eyepopUrl == null) {\n return Promise.reject('options.eyepopUrl cannot be null')\n }\n const auth0ClientOptions = {\n clientId: auth0.clientId,\n domain: auth0.domain,\n authorizationParams: {\n scope: auth0.scope,\n audience: auth0.audience,\n },\n }\n const auth0Client = await createAuth0Client(auth0ClientOptions)\n if (!(await auth0Client.isAuthenticated())) {\n await auth0Client.loginWithPopup()\n }\n const accessToken = await auth0Client.getTokenSilently()\n if (!accessToken) {\n return Promise.reject('auth0 login failed')\n }\n let session: Session\n const workerOptions = options as WorkerOptions\n if (typeof workerOptions.popId != 'undefined') {\n const workerSession: WorkerSession = {\n eyepopUrl: options.eyepopUrl,\n accessToken: accessToken,\n validUntil: Date.now() + 60 * 60 * 1000,\n popId: workerOptions.popId,\n baseUrl: undefined,\n pipelineId: undefined,\n isPipelineMode: workerOptions.isPipelineMode,\n authenticationHeaders: () => {\n return { Authorization: `Bearer ${accessToken}` }\n }\n }\n session = workerSession\n } else {\n session = {\n eyepopUrl: options.eyepopUrl,\n accessToken: accessToken,\n validUntil: Date.now() + 60 * 60 * 1000,\n }\n }\n return session\n }\n} else {\n authenticateBrowserSession = (_auth0: Auth0Options, _options: Options) => {\n return Promise.reject('auth0 login not supported server-side')\n }\n}\n","/**\n * Camera calibration for a source, as accepted by the worker's setSource.\n *\n * A calibration is what turns a depth map into measurable world coordinates.\n * Without one the worker falls back to an assumed horizontal field of view,\n * which is a development scaffold rather than something to ship: for canonical\n * metric depth the guess cancels out of X and Y and survives only in Z, so\n * lateral measurements stay exact while every distance along the optical axis\n * is wrong by however wrong the guess was.\n *\n * Mirrors what the instance API accepts. validateCamera() checks it locally so\n * a bad calibration is an error here rather than a 400 halfway through an\n * upload; the worker validates authoritatively, and the two are meant to agree.\n */\n\n/**\n * How far a rotation's norm may sit from 1 and still be taken for a rotation.\n * Loose enough to survive a float round trip through JSON, tight enough to\n * catch an un-normalised or garbage one. Matches the instance and the worker.\n */\nexport const QUATERNION_TOLERANCE = 1e-3\n\n/**\n * The pinhole parameters, normalised to the frame rather than given in pixels.\n *\n * Normalised so one calibration survives a resolution change: a camera\n * calibrated at 1920x1080 and later streamed at 1280x720 keeps working. Pixel\n * values carrying no calibration resolution are wrong by exactly the resolution\n * ratio, and nothing downstream can detect it.\n *\n * `fx`/`fy` are the focal length as a fraction of the frame's width and height;\n * `cx`/`cy` are the principal point in the same normalisation.\n */\nexport interface CameraIntrinsics {\n fx: number\n fy: number\n cx: number\n cy: number\n}\n\n/** The OpenCV Brown-Conrady coefficients. All zero is a rectilinear lens. */\nexport interface CameraDistortion {\n k1?: number\n k2?: number\n p1?: number\n p2?: number\n k3?: number\n}\n\n/** A rotation, w first. Must be a unit quaternion. */\nexport interface Quaternion {\n w: number\n x: number\n y: number\n z: number\n}\n\n/** A translation in meters. */\nexport interface Vector3d {\n x: number\n y: number\n z: number\n}\n\n/**\n * The camera's pose, expressed camera -> world.\n *\n * As `P_world = R(rotation) * P_camera + translation`, so the rotation carries\n * the camera's axes onto the world's and the translation is where the camera\n * itself sits. The world frame is Z up with the ground plane at Z = 0.\n *\n * This is the inverse of what cv2.solvePnP returns; a caller holding its\n * rvec/tvec must invert both halves (R = R_cv.T, t = -R_cv.T @ t_cv), and t_cv\n * is *not* the camera position.\n *\n * Left unset, the pose is the identity and world coordinates come back in the\n * camera frame instead - OpenCV convention, X right, Y down, Z forward.\n */\nexport interface CameraExtrinsics {\n rotation?: Quaternion\n translation?: Vector3d\n}\n\n/**\n * One source's calibration.\n *\n * Exactly one of `intrinsics` and `hfovDegrees` describes the lens. Both is\n * rejected rather than resolved by precedence - two descriptions of one lens\n * that disagree have no right answer - and neither is rejected too, since\n * defaulting a focal length would be inventing a lens.\n *\n * `hfovDegrees` is the shorthand for an operator who knows their lens's field\n * of view but not its calibration matrix. It assumes square pixels and a\n * centred principal point, so it approximates a real calibration rather than\n * replacing one - but it describes the actual lens rather than the worker's\n * assumed fallback. It composes with distortion and extrinsics exactly as\n * intrinsics do.\n */\nexport interface Camera {\n intrinsics?: CameraIntrinsics\n hfovDegrees?: number\n distortion?: CameraDistortion\n extrinsics?: CameraExtrinsics\n}\n\nfunction isFinite_(value: number | undefined): boolean {\n return value === undefined || Number.isFinite(value)\n}\n\n/**\n * Throw if the calibration cannot describe a real camera.\n *\n * Checked locally so a bad one fails before an upload starts rather than as a\n * 400 partway through it. The rules are the worker's, not stricter ones.\n */\nexport function validateCamera(camera: Camera): void {\n if (camera.intrinsics !== undefined && camera.hfovDegrees !== undefined) {\n throw new Error('camera.intrinsics and camera.hfovDegrees are alternatives, supply one')\n }\n if (camera.intrinsics === undefined && camera.hfovDegrees === undefined) {\n throw new Error('camera requires either camera.intrinsics or camera.hfovDegrees')\n }\n\n if (camera.hfovDegrees !== undefined) {\n // the upper bound excludes +Infinity, and every comparison with NaN is\n // false, so this one test covers the non-finite cases too\n if (!(camera.hfovDegrees > 0 && camera.hfovDegrees < 180)) {\n throw new Error('camera.hfovDegrees must be a horizontal field of view in (0, 180) degrees')\n }\n } else {\n const intrinsics = camera.intrinsics as CameraIntrinsics\n // note +Infinity passes a bare `> 0`, so finiteness is its own test\n for (const [name, focal] of [\n ['fx', intrinsics.fx],\n ['fy', intrinsics.fy],\n ] as const) {\n if (!(focal > 0) || !Number.isFinite(focal)) {\n throw new Error(`camera.intrinsics.${name} must be a positive, finite focal length`)\n }\n }\n for (const [name, principal, extent] of [\n ['cx', intrinsics.cx, 'width'],\n ['cy', intrinsics.cy, 'height'],\n ] as const) {\n if (!(principal >= 0 && principal <= 1)) {\n throw new Error(`camera.intrinsics.${name} must be within [0, 1] of the frame ${extent}`)\n }\n }\n }\n\n if (camera.distortion !== undefined) {\n for (const name of ['k1', 'k2', 'p1', 'p2', 'k3'] as const) {\n if (!isFinite_(camera.distortion[name])) {\n throw new Error(`camera.distortion.${name} must be a finite number`)\n }\n }\n }\n\n if (camera.extrinsics !== undefined) {\n const translation = camera.extrinsics.translation\n if (translation !== undefined) {\n for (const axis of ['x', 'y', 'z'] as const) {\n if (!Number.isFinite(translation[axis])) {\n throw new Error(`camera.extrinsics.translation.${axis} must be a finite number`)\n }\n }\n }\n // a non-finite component makes the norm non-finite, so the unit test\n // below rejects it without a separate finiteness check\n const rotation = camera.extrinsics.rotation\n if (rotation !== undefined) {\n const norm = Math.sqrt(rotation.w ** 2 + rotation.x ** 2 + rotation.y ** 2 + rotation.z ** 2)\n if (!(Math.abs(norm - 1) <= QUATERNION_TOLERANCE)) {\n throw new Error('camera.extrinsics.rotation must be a unit quaternion')\n }\n }\n }\n}\n","import { Prediction, Session } from '../types'\nimport { Area } from 'EyePop/data/data_types'\nimport { Camera, validateCamera } from '../camera'\n\nexport enum PredictionVersion {\n V1 = 1,\n V2 = 2,\n /**\n * Adds selected predictions: a `select_crop` or `select_full` forward\n * reports each selection on a prediction of its own, `selected` set and\n * timed by the past frame it selected. Nothing else differs from V2.\n */\n V3 = 3,\n}\n\nexport const DEFAULT_PREDICTION_VERSION: PredictionVersion = PredictionVersion.V2\n\nexport interface WorkerSession extends Session {\n /**\n * @deprecated Pop ids are only retained for backwards compatibility.\n * Configure transient sessions with `WorkerOptions.pop`.\n */\n readonly popId: string\n /**\n * The account the compute session runs and is billed under. A worker endpoint\n * created from this session names it when it creates a compute session.\n */\n readonly accountId?: string | undefined\n readonly baseUrl: string | undefined\n /**\n * Transient sessions may not have a pipeline until the first source is processed.\n */\n readonly pipelineId: string | undefined\n /**\n * Whether this session's endpoint runs in pipeline mode, without a worker session. A worker\n * endpoint created from this session runs in pipeline mode too.\n */\n readonly isPipelineMode?: boolean | undefined\n\n authenticationHeaders(): any\n}\n\nexport enum VideoMode {\n STREAM = 'stream',\n BUFFER = 'buffer',\n}\n\nexport interface FileSource {\n readonly file: File\n readonly videoMode?: VideoMode | undefined\n}\n\nexport interface StreamSource {\n readonly stream: ReadableStream<Uint8Array> | Blob | BufferSource\n readonly mimeType: string\n readonly size?: number | undefined\n readonly videoMode?: VideoMode | undefined\n}\n\nexport interface PathSource {\n readonly path: string\n readonly mimeType?: string | undefined\n readonly videoMode?: VideoMode | undefined\n}\n\nexport interface MediaStreamSource {\n readonly mediaStream: MediaStream\n}\n\nexport interface UrlSource {\n readonly url: string\n}\n\nexport interface AssetUuidSource {\n readonly assetUuid: string\n}\n\nexport type Source = FileSource | StreamSource | PathSource | UrlSource | AssetUuidSource | MediaStreamSource\n\nexport interface ResultStream extends AsyncIterable<Prediction> {\n cancel(): void\n}\n\n// Pop definition types\n\nexport enum PopComponentType {\n FORWARD = 'forward',\n INFERENCE = 'inference',\n TRACKING = 'tracking',\n CONTOUR_FINDER = 'contour_finder',\n COMPONENT_FINDER = 'component_finder',\n}\n\nexport enum ForwardOperatorType {\n FULL = 'full',\n CROP = 'crop',\n CROP_WITH_FULL_FALLBACK = 'crop_with_full_fallback',\n /**\n * `SELECT_CROP` and `SELECT_FULL` forward one past frame per track, the one\n * of its most relevant detection, and their targets' results arrive late as\n * selected predictions. Only a tracking component's forward can select.\n */\n SELECT_CROP = 'select_crop',\n SELECT_FULL = 'select_full',\n}\n\nexport enum SelectMode {\n MOST_RELEVANT = 'most_relevant',\n}\n\n/**\n * How a `select_crop` or `select_full` forward picks one frame per track.\n *\n * `relevancyModel` (by alias) or `relevancyModelUuid` names an ability that\n * runs on every tracked object of every frame; a detection it finds nothing on\n * is never selected. Without one, relevance comes from the detection's box\n * alone.\n *\n * A track shorter than `minTrackLengthSeconds` is never selected. With\n * `intervalSeconds` the first selection comes that long after the track\n * starts, then at most one per interval and only when a more relevant\n * detection turned up; the track's end reports a final one if it improved\n * since. Without it, a track is selected once, when it ends.\n */\nexport interface PopSelect {\n mode?: SelectMode\n relevancyModelUuid?: string\n relevancyModel?: string\n minTrackLengthSeconds?: number\n intervalSeconds?: number\n}\n\nexport interface PopCrop {\n maxItems?: number\n boxPadding?: number\n orientationTargetAngle?: number\n}\n\nexport interface PopForwardOperator {\n type: ForwardOperatorType\n includeClasses?: string[]\n crop?: PopCrop\n select?: PopSelect\n}\n\nexport function isSelectOperator(operator: PopForwardOperator | undefined): boolean {\n return operator?.type === ForwardOperatorType.SELECT_CROP || operator?.type === ForwardOperatorType.SELECT_FULL\n}\n\nexport interface PopForward {\n operator?: PopForwardOperator\n targets: PopComponent[]\n}\nexport interface BaseComponent {\n type: PopComponentType\n id?: number\n forward?: PopForward\n /**\n * Enrich this component's point based predictions with world coordinates,\n * back-projected through the Pop's `depthMap`.\n *\n * Declared here because the instance declares it on one shared component\n * type, but only a component that runs its own inference can honour it -\n * inference and tracking - since that is what gives it an id for the worker\n * to select on. Asking for it on a forward, contour finder or component\n * finder is rejected when the Pop is compiled. A contour finder's points do\n * get enriched, but they belong to the object that fed it, so the request\n * goes on the inference component upstream.\n *\n * Enrichment needs a *metric* depth ability. A `relative` map is accepted\n * and silently produces no world coordinates: its shift is unknown, so a\n * cloud recovered from it would be distorted rather than merely unscaled.\n */\n toWorld?: boolean\n}\n\nexport interface ForwardComponent extends BaseComponent {}\n\nexport enum InferenceType {\n IMAGE_CLASSIFICATION = 'image_classification',\n OBJECT_DETECTION = 'object_detection',\n KEY_POINTS = 'key_points',\n OCR = 'ocr',\n MESH = 'mesh',\n FEATURE_VECTOR = 'feature_vector',\n SEMANTIC_SEGMENTATION = 'semantic_segmentation',\n SEGMENTATION = 'segmentation',\n}\n\nexport interface InferenceComponent extends BaseComponent {\n inferenceTypes?: InferenceType[]\n hidden?: boolean\n modelUuid?: string\n model?: string\n abilityUuid?: string\n ability?: string\n categoryName?: string\n confidenceThreshold?: number\n topK?: number\n topKClasses?: number\n classes?: string[]\n targetFps?: string\n videoChunkLengthSeconds?: number\n videoChunkOverlap?: number\n params?: { [index: string]: any }\n}\n\nexport enum MotionModel {\n RANDOM_WALK = 'random_walk',\n CONSTANT_VELOCITY = 'constant_velocity',\n CONSTANT_ACCELERATION = 'constant_acceleration',\n}\n\nexport interface TrackingComponent extends BaseComponent {\n reidModelUuid?: string\n reidModel?: string\n maxAgeSeconds?: number\n iouThreshold?: number\n simThreshold?: number\n agnostic?: boolean\n processNoisePosition?: number\n processNoiseVelocity?: number\n processNoiseAcceleration?: number\n processNoiseScale?: number\n processNoiseAspectRatio?: number\n measurementNoiseCx?: number\n measurementNoiseCy?: number\n measurementNoiseArea?: number\n measurementNoiseAspectRatio?: number\n motionModel?: MotionModel\n downweightLowConfidenceDetections?: boolean\n classBeta?: number\n classGamma?: number\n classHysteresis?: boolean\n classHysteresisHighThreshold?: number\n classHysteresisLowThreshold?: number\n classHysteresisMinHoldFrames?: number\n classHysteresisAllowedClasses?: string[]\n}\n\nexport enum ContourType {\n ALL_PIXELS = 'all_pixels',\n POLYGON = 'polygon',\n CONVEX_HULL = 'convex_hull',\n HOUGH_CIRCLES = 'hough_circles',\n CIRCLE = 'circle',\n TRIANGLE = 'triangle',\n RECTANGLE = 'rectangle',\n}\n\nexport interface ContourFinderComponent extends BaseComponent {\n contourType: ContourType\n areaThreshold?: number\n}\n\nexport interface ComponentFinderComponent extends BaseComponent {\n dilate?: number\n erode?: number\n keepSource?: boolean\n componentClassLabel?: string\n}\n\nexport type PopComponent = ForwardComponent | InferenceComponent | TrackingComponent | ContourFinderComponent | ComponentFinderComponent\n\n/**\n * The depth ability whose frame level map feeds world coordinates.\n *\n * `ability` names it by alias and `abilityUuid` by uuid; give exactly one. A\n * Pop has one depth map because the worker back-projects every prediction\n * through it, so a second depth source would have nowhere to go. Naming one\n * makes the converter build the depth branch itself and keep it out of the\n * response - the caller asked for coordinates, not for a megabyte of base64\n * depth per frame.\n *\n * `toWorld` back-projects the map itself, so the response carries a point cloud\n * of the whole scene rather than one per segmented object. It is also what\n * reveals the map: without it the injected branch stays out of the response\n * entirely. Read the result with cloudOfDepth().\n *\n * Use a *metric* depth ability. A `relative` one is accepted and yields no\n * world coordinates at all.\n */\nexport interface PopDepthMap {\n ability?: string\n abilityUuid?: string\n toWorld?: boolean\n}\n\n/**\n * Source level parameters a Pop applies to every source it processes, each\n * overridable per source.\n *\n * Merged per field against whatever a source supplies, so a source giving its\n * own roi but no camera keeps its roi and takes the default camera. Because the\n * camera merges as one field, a source declaring its own lens replaces a\n * defaulted one outright rather than mixing the two.\n */\nexport interface SourceDefaults {\n camera?: Camera\n roi?: Area\n fps?: string\n motionDetect?: boolean\n motionSensitivity?: number\n motionThreshold?: number\n motionGap?: number\n motionGridX?: number\n motionGridY?: number\n}\n\nexport interface Pop {\n components: PopComponent[]\n postTransform?: string\n defaults?: SourceDefaults\n depthMap?: PopDepthMap\n}\n\n/**\n * Throw if a Pop cannot mean what it says.\n *\n * Only the parts a caller can get wrong locally: the worker rejects both of\n * these too, but as a 400 once the Pop is already in flight.\n */\nexport function validatePop(pop: Pop): void {\n if (pop.depthMap !== undefined) {\n // naming no ability is a depth branch that cannot be built, and naming\n // two is a Pop with no right answer\n if ((pop.depthMap.ability === undefined) === (pop.depthMap.abilityUuid === undefined)) {\n throw new Error('depthMap requires exactly one of ability or abilityUuid')\n }\n }\n if (pop.defaults?.camera !== undefined) {\n validateCamera(pop.defaults.camera)\n }\n validateForwards(pop.components)\n}\n\n/**\n * Whether any forward of the Pop is a `select_crop` or `select_full`.\n */\nexport function popSelects(pop: Pop | null | undefined): boolean {\n const selects = (components: PopComponent[] | undefined): boolean =>\n (components ?? []).some((component) => isSelectOperator(component.forward?.operator) || selects(component.forward?.targets))\n return selects(pop?.components)\n}\n\n// the same select rules the worker applies when it compiles the Pop; that a\n// select sits on a tracking component's forward is left to the worker\nfunction validateForwards(components: PopComponent[] | undefined): void {\n for (const component of components ?? []) {\n const operator = component.forward?.operator\n if (operator !== undefined) {\n validateSelectOperator(operator)\n }\n validateForwards(component.forward?.targets)\n }\n}\n\nfunction validateSelectOperator(operator: PopForwardOperator): void {\n if (!isSelectOperator(operator)) {\n if (operator.select !== undefined) {\n throw new Error('select is only valid with the select_crop or select_full operator')\n }\n return\n }\n const select = operator.select\n if (select === undefined) {\n throw new Error(`${operator.type} requires a select block`)\n }\n if (select.mode !== undefined && select.mode !== SelectMode.MOST_RELEVANT) {\n throw new Error(`select mode ${select.mode} is not supported, the only mode is ${SelectMode.MOST_RELEVANT}`)\n }\n if (select.relevancyModel !== undefined && select.relevancyModelUuid !== undefined) {\n throw new Error('select can only have one of relevancyModelUuid or relevancyModel')\n }\n if (select.minTrackLengthSeconds !== undefined && select.minTrackLengthSeconds < 0) {\n throw new Error('select minTrackLengthSeconds cannot be negative')\n }\n if (select.intervalSeconds !== undefined && select.intervalSeconds <= 0) {\n throw new Error('select intervalSeconds must be positive')\n }\n if (operator.crop !== undefined) {\n if (operator.type !== ForwardOperatorType.SELECT_CROP) {\n throw new Error(`crop options are only valid with select_crop, not ${operator.type}`)\n }\n if (operator.crop.maxItems !== undefined) {\n throw new Error('select_crop forwards one detection per selection, maxItems does not apply')\n }\n }\n}\n\nexport interface MotionDetectConfig {\n motionDetect: boolean\n motionSensitivity?: number\n motionThreshold?: number\n motionGap?: number\n motionGridX?: number\n motionGridY?: number\n}\n\nexport interface ComponentParams {\n componentId: number\n values: { [index: string]: any }\n}\n\nexport interface ProcessParams {\n componentParams?: ComponentParams[] | undefined\n motionDetect?: MotionDetectConfig | undefined\n roi?: Area | undefined\n fps?: string | undefined\n /**\n * This source's camera calibration, overriding the Pop's `defaults.camera`.\n *\n * Without one the worker assumes a 60 degree horizontal field of view,\n * which is a development scaffold: for canonical metric depth the guess\n * cancels out of X and Y and survives only in Z, so lateral measurements\n * stay exact while every distance along the optical axis is wrong by\n * however wrong the guess was.\n */\n camera?: Camera | undefined\n /**\n * Build RTSP SETUP URLs the pre-RFC-2326 way, by appending the SDP control\n * attribute to the stream URL. Applies to an `rtsp:` source only.\n *\n * Leave unset unless a camera will not open without it. The compliant\n * construction is what a camera advertising an absolute control URL needs -\n * Axis does - and forcing the old one gives such a camera a URL with the\n * address in it twice, which it answers 404.\n */\n rtspForceNonCompliantUrl?: boolean | undefined\n}\n\nexport interface ProcessRequest extends ProcessParams {\n source: Source\n}\n","import type { HttpClient } from '../options'\nimport type { Pop } from '../worker/worker_types'\n\nexport enum SessionStatus {\n UNKNOWN = 'unknown',\n PENDING = 'pending',\n RUNNING = 'running',\n STOPPED = 'stopped',\n FAILED = 'failed',\n ERROR = 'error',\n\n PIPELINE_CREATING = 'pipeline_creating',\n PIPELINE_OK = 'pipeline_ok',\n PIPELINE_CHECKING = 'pipeline_checking',\n PIPELINE_ERROR = 'pipeline_error',\n UPGRADING = 'upgrading',\n}\n\nexport interface ComputeSession {\n session_uuid: string\n session_endpoint: string\n pipeline_uuid: string\n access_token?: string\n access_token_expires_at?: string\n access_token_expires_in?: number\n session_status: SessionStatus\n session_message: string\n session_name: string\n user_uuid: string\n account_uuid?: string\n created_at: string\n uptime: number\n pipeline_ttl?: number | undefined\n session_active: boolean\n persistent?: boolean\n pipelines?: { id?: string; pipeline_id?: string }[]\n pipeline_error?: ComputeErrorInfo\n}\n\nexport interface ComputeErrorInfo {\n code?: string\n message?: string\n details?: string\n}\n\nexport interface ResolvedComputeSession {\n session: ComputeSession\n pipelineId: string | null\n accessToken: string | null\n accessTokenValidUntil: number | null\n}\n\nexport interface ComputeSessionClientOptions {\n computeUrl: string\n httpClient: HttpClient\n authorizationHeader: () => Promise<string>\n sessionUuid?: string | undefined\n sessionName?: string | undefined\n /**\n * The account the compute session runs and is billed under, sent as `account_uuid`.\n */\n accountId?: string | undefined\n pipelineImage?: string | undefined\n pipelineVersion?: string | undefined\n pop?: Pop | undefined\n readyTimeoutMs: number\n logger?: Pick<Console, 'debug'>\n requestLogger?: Pick<Console, 'debug'>\n}\n\nconst SESSION_DEAD = new Set<SessionStatus>([SessionStatus.ERROR, SessionStatus.FAILED, SessionStatus.STOPPED, SessionStatus.PIPELINE_ERROR, SessionStatus.UNKNOWN])\n\nconst CHECK_FOR_IS_READY_INTERVAL = 250\n\nconst sleep = (ms: number) => new Promise(resolve => setTimeout(resolve, ms))\n\nexport function pipelineIdFromSession(session: ComputeSession): string | null {\n if (session.pipeline_uuid) {\n return session.pipeline_uuid\n }\n const pipeline = session.pipelines?.[0]\n return pipeline?.id || pipeline?.pipeline_id || null\n}\n\nfunction sessionCreateBody(options: ComputeSessionClientOptions): string | undefined {\n const body: any = {}\n if (options.accountId) {\n body.account_uuid = options.accountId\n }\n if (options.sessionName) {\n body.session_name = options.sessionName\n }\n if (options.pipelineImage) {\n body.pipeline_image = options.pipelineImage\n }\n if (options.pipelineVersion) {\n body.pipeline_version = options.pipelineVersion\n }\n if (options.pop) {\n body.pop = options.pop\n }\n return Object.keys(body).length > 0 ? JSON.stringify(body) : undefined\n}\n\nfunction sessionHealthReady(body: string, contentType: string): boolean {\n if (contentType.includes('application/json')) {\n const health = JSON.parse(body)\n if (health && typeof health == 'object') {\n if (health.message && !health.session_status) {\n return true\n }\n return health.session_status == SessionStatus.RUNNING\n }\n }\n return contentType.includes('text/plain') && body.includes(\"I'm fine\")\n}\n\nfunction accessTokenValidUntil(session: ComputeSession): number | null {\n if (session.access_token_expires_at) {\n const expiresAt = Date.parse(session.access_token_expires_at)\n return Number.isNaN(expiresAt) ? null : expiresAt\n }\n if (session.access_token_expires_in) {\n return Date.now() + session.access_token_expires_in * 1000\n }\n return null\n}\n\nfunction errorInfoMessage(errorInfo: ComputeErrorInfo): string {\n return [errorInfo.code, errorInfo.message, errorInfo.details].filter((part): part is string => typeof part == 'string' && part.length > 0).join(': ')\n}\n\nfunction pipelineErrorMessage(session: ComputeSession): string | null {\n if (session.pipeline_error) {\n const message = errorInfoMessage(session.pipeline_error)\n return message ? `Pipeline failed for compute session ${session.session_uuid}: ${message}` : `Pipeline failed for compute session ${session.session_uuid}`\n }\n if (session.session_status == SessionStatus.PIPELINE_ERROR) {\n return `Pipeline failed for compute session ${session.session_uuid}`\n }\n return null\n}\n\n/**\n * A compute-api request that failed. `status` is the HTTP status and `code` the\n * compute-api error code (for example `VAL_001` when no account can be derived\n * for a new session), when the response carried one. The message stays the\n * readable one callers already see.\n */\nexport class ComputeApiError extends Error {\n readonly status: number\n readonly code: string | undefined\n\n constructor(message: string, status: number, code?: string) {\n super(message)\n this.name = 'ComputeApiError'\n this.status = status\n this.code = code\n }\n}\n\n/** A compute session picked by uuid runs under another account than the one configured. */\nexport class ComputeAccountMismatchError extends Error {\n readonly sessionUuid: string\n readonly sessionAccountId: string | undefined\n readonly accountId: string\n\n constructor(sessionUuid: string, sessionAccountId: string | undefined, accountId: string) {\n super(`Compute session ${sessionUuid} runs under account ${sessionAccountId || '(none)'}, not the configured account ${accountId}`)\n this.name = 'ComputeAccountMismatchError'\n this.sessionUuid = sessionUuid\n this.sessionAccountId = sessionAccountId\n this.accountId = accountId\n }\n}\n\nasync function computeApiError(response: Response, action: string): Promise<ComputeApiError> {\n const code = await responseErrorCode(response)\n const message = await responseErrorMessage(response)\n return new ComputeApiError(`Unexpected status ${response.status} ${action}: ${message}`, response.status, code)\n}\n\nasync function responseErrorCode(response: Response): Promise<string | undefined> {\n try {\n const parsed = normalizedJsonValue(await response.clone().json())\n if (!parsed || typeof parsed != 'object') {\n return undefined\n }\n const record = parsed as Record<string, unknown>\n const nested = normalizedJsonValue(record['error'])\n const code = nested && typeof nested == 'object' ? (nested as Record<string, unknown>)['code'] : record['code']\n return typeof code == 'string' && code.length > 0 ? code : undefined\n } catch (_) {\n return undefined\n }\n}\n\nasync function responseErrorMessage(response: Response): Promise<string> {\n const contentType = response.headers.get('content-type') || ''\n if (contentType.includes('application/json')) {\n try {\n const parsed = normalizedJsonValue(await response.clone().json())\n const message = normalizedErrorMessage(parsed)\n if (message) {\n return message\n }\n } catch (_) {}\n }\n const body = await response.text()\n const message = normalizedErrorMessage(body)\n return message || body\n}\n\nfunction normalizedJsonValue(value: unknown): unknown {\n if (typeof value == 'string') {\n try {\n const parsed = JSON.parse(value)\n return normalizedJsonValue(parsed)\n } catch (_) {\n const unescaped = value.replace(/\\\\\"/g, '\"')\n if (unescaped != value) {\n try {\n const parsed = JSON.parse(unescaped)\n return normalizedJsonValue(parsed)\n } catch (_) {}\n }\n return value\n }\n }\n return value\n}\n\nasync function responseJson<T>(response: Response): Promise<T> {\n return normalizedJsonValue(await response.json()) as T\n}\n\nfunction normalizedErrorMessage(value: unknown): string | null {\n value = normalizedJsonValue(value)\n\n if (typeof value == 'string') {\n return value\n }\n if (!value || typeof value != 'object') {\n return null\n }\n\n const record = value as Record<string, unknown>\n const normalizedError = normalizedJsonValue(record['error'])\n const errorMessage = normalizedErrorMessage(normalizedError) || (typeof normalizedError == 'string' ? normalizedError : null)\n const message = [record['code'], errorMessage, record['message'], record['details']].filter((part): part is string => typeof part == 'string' && part.length > 0).join(': ')\n if (message) {\n return message\n }\n\n if (record['pipeline_error']) {\n return normalizedErrorMessage(record['pipeline_error'])\n }\n\n if (normalizedError && typeof normalizedError == 'object') {\n return normalizedErrorMessage(normalizedError)\n }\n\n try {\n return JSON.stringify(value)\n } catch (_) {\n return null\n }\n}\n\nexport class ComputeSessionClient {\n constructor(private readonly options: ComputeSessionClientOptions) {}\n\n public async resolve(): Promise<ResolvedComputeSession> {\n const session = this.options.sessionUuid ? await this.getPermanentComputeSession(this.options.sessionUuid) : await this.getOnDemandComputeSession()\n const pipelineFailure = pipelineErrorMessage(session)\n if (pipelineFailure) {\n throw new Error(pipelineFailure)\n }\n const authorizationHeader = await this.sessionAuthorizationHeader(session)\n await this.waitUntilReady(session, authorizationHeader)\n const pipelineId = pipelineIdFromSession(session)\n if (this.options.pop && !pipelineId) {\n throw new Error('Compute session did not provide a pipeline for the requested pop')\n }\n return {\n session,\n pipelineId,\n accessToken: session.access_token || null,\n accessTokenValidUntil: accessTokenValidUntil(session),\n }\n }\n\n private async getOnDemandComputeSession(): Promise<ComputeSession> {\n let session: ComputeSession | null = null\n\n const sessionsUrl = `${this.options.computeUrl}/v1/sessions`\n const headers = {\n Authorization: await this.options.authorizationHeader(),\n }\n let sessions: ComputeSession[]\n\n if (!this.options.pop) {\n this.options.requestLogger?.debug('fetching sessions from: %s', sessionsUrl)\n const response = await this.options.httpClient.fetch(sessionsUrl, {\n headers: headers,\n })\n\n if (response.status == 404) {\n sessions = []\n } else if (response.status != 200) {\n throw await computeApiError(response, 'fetching compute sessions')\n } else {\n const response_content = await responseJson<ComputeSession[]>(response)\n sessions = response_content as ComputeSession[]\n }\n if (sessions.length > 0) {\n this.options.logger?.debug(`User has ${sessions.length} sessions, inspecting for usable session`)\n for (let s of sessions) {\n if (\n !SESSION_DEAD.has(s.session_status) &&\n !s.persistent &&\n (!this.options.sessionName || s.session_name === this.options.sessionName) &&\n (!this.options.accountId || s.account_uuid === this.options.accountId)\n ) {\n session = s\n this.options.logger?.debug(`Use active session ${s.session_uuid} with pipeline ${pipelineIdFromSession(s)}`)\n break\n }\n }\n }\n }\n if (!session) {\n this.options.requestLogger?.debug('creating a new session at: %s', sessionsUrl)\n const createBody = sessionCreateBody(this.options)\n const createHeaders = {\n ...headers,\n ...(createBody ? { 'Content-Type': 'application/json' } : {}),\n }\n const request: RequestInit = {\n headers: createHeaders,\n method: 'POST',\n }\n if (createBody) {\n request.body = createBody\n }\n const query = 'wait=true'\n const response = await this.options.httpClient.fetch(`${sessionsUrl}?${query}`, request)\n if (response.status != 200) {\n throw await computeApiError(response, 'creating a compute session')\n } else {\n sessions = await responseJson<ComputeSession[]>(response)\n }\n if (sessions.length == 0) {\n throw new Error('Unexpected, no compute session after attempt to create one')\n }\n session = sessions[0] || null\n }\n if (!session) {\n throw new Error('unexpected undefined session')\n }\n return session\n }\n\n private async getPermanentComputeSession(sessionUuid: string): Promise<ComputeSession> {\n let session: ComputeSession | null = null\n\n const sessionUrl = `${this.options.computeUrl}/v1/sessions/${sessionUuid}`\n this.options.requestLogger?.debug('fetching session from: %s', sessionUrl)\n const headers = {\n Authorization: await this.options.authorizationHeader(),\n }\n let response = await this.options.httpClient.fetch(sessionUrl, {\n headers: headers,\n })\n if (response.status == 404) {\n throw new ComputeApiError(`Unexpected status ${response.status} compute sessions ${sessionUuid} not found`, response.status)\n } else if (response.status != 200) {\n throw await computeApiError(response, 'fetching compute sessions')\n } else {\n const response_content = await responseJson<ComputeSession>(response)\n session = response_content as ComputeSession\n }\n // A session picked by uuid runs under its own account. Attaching to it under\n // another one would bill and report the session against the wrong account.\n if (this.options.accountId && session.account_uuid !== this.options.accountId) {\n throw new ComputeAccountMismatchError(sessionUuid, session.account_uuid, this.options.accountId)\n }\n return session\n }\n\n private async sessionAuthorizationHeader(session: ComputeSession): Promise<string> {\n if (session.access_token) {\n return `Bearer ${session.access_token}`\n }\n return this.options.authorizationHeader()\n }\n\n private async waitUntilReady(session: ComputeSession, authorizationHeader: string): Promise<void> {\n let isReady: boolean = false\n const deadline: number = Date.now() + this.options.readyTimeoutMs\n while (!isReady) {\n const health_url = `${session.session_endpoint}/health`\n const response = await this.options.httpClient.fetch(health_url, {\n headers: {\n Authorization: authorizationHeader,\n Accept: 'application/json',\n },\n })\n if (response.status == 200) {\n const contentType = response.headers.get('content-type') || ''\n const body = await response.text()\n try {\n isReady = sessionHealthReady(body, contentType)\n } catch (error) {\n this.options.logger?.debug(`session ${session.session_uuid} health check returned invalid JSON, wait and poll for update`)\n }\n if (!isReady && Date.now() > deadline) {\n throw new Error(`Created session ${session.session_uuid} did not become healthy after ${this.options.readyTimeoutMs / 1000} seconds`)\n }\n if (!isReady) {\n this.options.logger?.debug(`session ${session.session_uuid} health check not ready, wait and poll for update`)\n await sleep(CHECK_FOR_IS_READY_INTERVAL)\n }\n } else if (Date.now() > deadline) {\n throw new Error(`Created session ${session.session_uuid} did not become healthy after ${this.options.readyTimeoutMs / 1000} seconds`)\n } else {\n this.options.logger?.debug(`session ${session.session_uuid} health check status ${response.status}, wait and poll for update`)\n await sleep(CHECK_FOR_IS_READY_INTERVAL)\n }\n }\n }\n}\n","import { v4 as uuidv4 } from 'uuid'\n\ntype Bytes = string | ArrayBuffer | Uint8Array | Buffer | null | undefined\n\nexport interface StreamEvent {\n type: string\n source_id?: string\n message?: string\n}\n\nexport class Stream<Prediction> implements AsyncIterable<Prediction> {\n controller: AbortController\n\n constructor(\n private iterator: () => AsyncIterator<Prediction>,\n controller: AbortController,\n ) {\n this.controller = controller\n }\n\n static iterFromReadableStream<Prediction>(\n readableStream: Promise<ReadableStream<Uint8Array>>,\n controller: AbortController,\n eventHandler: (event: StreamEvent) => Promise<void>,\n ): AsyncIterator<Prediction, any, undefined> {\n let consumed = false\n\n async function* iterLines(): AsyncGenerator<string, void, unknown> {\n const lineDecoder = new EyepopLineDecoder()\n const iter = readableStreamAsyncIterable<Bytes>(await readableStream)\n for await (let chunk of iter) {\n for (const line of lineDecoder.decode(chunk)) {\n yield line\n }\n }\n\n for (const line of lineDecoder.flush()) {\n yield line\n }\n }\n\n async function* iterator(): AsyncIterator<Prediction, any, undefined> {\n if (consumed) {\n throw new Error('Cannot iterate over a consumed stream, use `.tee()` to split the stream.')\n }\n consumed = true\n let done = false\n try {\n for await (const line of iterLines()) {\n if (done) continue\n if (line) {\n const message = JSON.parse(line)\n const event = message['event']\n if (event !== undefined) {\n await eventHandler(event)\n } else {\n yield message\n }\n }\n }\n done = true\n } catch (e) {\n // If the user calls `stream.controller.abort()`, we should exit without throwing.\n if (e instanceof Error && e.name === 'AbortError') return\n throw e\n } finally {\n // If the user `break`s, abort the ongoing request.\n if (!done) controller.abort()\n }\n }\n\n return iterator()\n }\n\n [Symbol.asyncIterator](): AsyncIterator<Prediction> {\n return this.iterator()\n }\n\n /**\n * Splits the stream into two streams which can be\n * independently read from at different speeds.\n */\n tee(): [Stream<Prediction>, Stream<Prediction>] {\n const left: Array<Promise<IteratorResult<Prediction>>> = []\n const right: Array<Promise<IteratorResult<Prediction>>> = []\n const iterator = this.iterator()\n\n const teeIterator = (queue: Array<Promise<IteratorResult<Prediction>>>): AsyncIterator<Prediction> => {\n return {\n next: () => {\n if (queue.length === 0) {\n const result = iterator.next()\n left.push(result)\n right.push(result)\n }\n return queue.shift()!\n },\n }\n }\n\n return [new Stream(() => teeIterator(left), this.controller), new Stream(() => teeIterator(right), this.controller)]\n }\n}\n\n/**\n * A re-implementation of httpx's `LineDecoder` in Python that handles incrementally\n * reading lines from text.\n *\n * https://github.com/encode/httpx/blob/920333ea98118e9cf617f246905d7b202510941c/httpx/_decoders.py#L258\n */\nexport class EyepopLineDecoder {\n // prettier-ignore\n static NEWLINE_CHARS = new Set(['\\n', '\\r', '\\x0b', '\\x0c', '\\x1c', '\\x1d', '\\x1e', '\\x85', '\\u2028', '\\u2029']);\n static NEWLINE_REGEXP = /\\r\\n|[\\n\\r\\x0b\\x0c\\x1c\\x1d\\x1e\\x85\\u2028\\u2029]/g\n\n buffer: string[]\n trailingCR: boolean\n textDecoder: any // TextDecoder found in browsers; not typed to avoid pulling in either \"dom\" or \"node\" types.\n\n constructor() {\n this.buffer = []\n this.trailingCR = false\n }\n\n decode(chunk: Bytes): string[] {\n let text = this.decodeText(chunk)\n\n if (this.trailingCR) {\n text = '\\r' + text\n this.trailingCR = false\n }\n if (text.endsWith('\\r')) {\n this.trailingCR = true\n text = text.slice(0, -1)\n }\n\n if (!text) {\n return []\n }\n\n const trailingNewline = EyepopLineDecoder.NEWLINE_CHARS.has(text[text.length - 1] || '')\n let lines = text.split(EyepopLineDecoder.NEWLINE_REGEXP)\n\n if (lines.length === 1 && !trailingNewline) {\n this.buffer.push(lines[0]!)\n return []\n }\n\n if (this.buffer.length > 0) {\n lines = [this.buffer.join('') + lines[0], ...lines.slice(1)]\n this.buffer = []\n }\n\n if (!trailingNewline) {\n this.buffer = [lines.pop() || '']\n }\n\n return lines\n }\n\n decodeText(bytes: Bytes): string {\n if (bytes == null) return ''\n if (typeof bytes === 'string') return bytes\n\n // Node:\n if (typeof Buffer !== 'undefined') {\n if (bytes instanceof Buffer) {\n return bytes.toString()\n }\n if (bytes instanceof Uint8Array) {\n return Buffer.from(bytes).toString()\n }\n\n throw new Error(\n `Unexpected: received non-Uint8Array (${bytes.constructor.name}) stream chunk in an environment with a global \"Buffer\" defined, which this library assumes to be Node. Please report this error.`,\n )\n }\n\n // Browser\n if (typeof TextDecoder !== 'undefined') {\n if (bytes instanceof Uint8Array || bytes instanceof ArrayBuffer) {\n this.textDecoder ??= new TextDecoder('utf8')\n return this.textDecoder.decode(bytes)\n }\n\n throw new Error(`Unexpected: received non-Uint8Array/ArrayBuffer (${(bytes as any).constructor.name}) in a web platform. Please report this error.`)\n }\n\n throw new Error(`Unexpected: neither Buffer nor TextDecoder are available as globals. Please report this error.`)\n }\n\n flush(): string[] {\n if (!this.buffer.length && !this.trailingCR) {\n return []\n }\n\n const lines = [this.buffer.join('')]\n this.buffer = []\n this.trailingCR = false\n return lines\n }\n}\n\n/**\n * Most browsers don't yet have async iterable support for ReadableStream,\n * and Node has a very different way of reading bytes from its \"ReadableStream\".\n *\n * This polyfill was pulled from https://github.com/MattiasBuelens/web-streams-polyfill/pull/122#issuecomment-1627354490\n */\nfunction readableStreamAsyncIterable<T>(stream: any): AsyncIterableIterator<T> {\n if (stream[Symbol.asyncIterator]) {\n return stream[Symbol.asyncIterator]()\n }\n\n const reader = stream.getReader()\n\n return {\n async next() {\n try {\n const result = await reader.read()\n if (result?.done) reader.releaseLock() // release lock when stream becomes closed\n return result\n } catch (e) {\n reader.releaseLock() // release lock when stream becomes errored\n throw e\n }\n },\n async return() {\n const cancelPromise = reader.cancel()\n reader.releaseLock()\n await cancelPromise\n return { done: true, value: undefined }\n },\n [Symbol.asyncIterator]() {\n return this\n },\n }\n}\nexport function readableStreamFromString(s: string): ReadableStream<Uint8Array> {\n return new ReadableStream({\n start(controller) {\n controller.enqueue(Buffer.from(s))\n controller.close()\n },\n })\n}\n\nexport type MultipartContent = ReadableStream<Uint8Array> | Blob | BufferSource | string\n\nexport interface MultipartPart {\n name: string\n /** Marks the part as a file; servers such as Go's `ReadForm` treat a part without one as a text field. */\n filename?: string\n contentType?: string | null\n content: MultipartContent\n}\n\nexport function randomMultipartBoundary(): string {\n return `----formdata-boundary-${uuidv4()}`\n}\n\n/** Escapes a Content-Disposition value the way the HTML spec's multipart/form-data encoding does. */\nfunction escapeDispositionValue(value: string): string {\n return value.replace(/\"/g, '%22').replace(/\\r/g, '%0D').replace(/\\n/g, '%0A')\n}\n\nfunction toPartStream(content: Exclude<MultipartContent, string>): ReadableStream<Uint8Array> {\n if (content instanceof ReadableStream) {\n return content\n }\n if (content instanceof Blob) {\n return content.stream()\n }\n const bytes = ArrayBuffer.isView(content) ? new Uint8Array(content.buffer, content.byteOffset, content.byteLength) : new Uint8Array(content)\n return new ReadableStream({\n start(controller) {\n controller.enqueue(bytes)\n controller.close()\n },\n })\n}\n\nasync function cancelMultipartContent(content: MultipartContent, reason?: unknown): Promise<void> {\n if (content instanceof ReadableStream) {\n await content.cancel(reason)\n }\n}\n\n/**\n * Streams a multipart/form-data body part by part, piping each part's bytes through as they\n * become available instead of buffering any part's full content in memory first.\n */\nexport function encodeMultipartFormData(parts: MultipartPart[], boundary: string): ReadableStream<Uint8Array> {\n const encoder = new TextEncoder()\n let partIndex = 0\n let reader: ReadableStreamDefaultReader<Uint8Array> | null = null\n\n return new ReadableStream<Uint8Array>({\n async pull(controller) {\n if (reader) {\n const { done, value } = await reader.read()\n if (!done) {\n controller.enqueue(value)\n return\n }\n reader = null\n controller.enqueue(encoder.encode('\\r\\n'))\n partIndex++\n }\n if (partIndex >= parts.length) {\n controller.enqueue(encoder.encode(`--${boundary}--\\r\\n`))\n controller.close()\n return\n }\n const part = parts[partIndex]!\n let header = `--${boundary}\\r\\nContent-Disposition: form-data; name=\"${escapeDispositionValue(part.name)}\"`\n if (part.filename !== undefined) {\n header += `; filename=\"${escapeDispositionValue(part.filename)}\"`\n }\n header += '\\r\\n'\n if (part.contentType) {\n header += `Content-Type: ${part.contentType}\\r\\n`\n }\n header += '\\r\\n'\n controller.enqueue(encoder.encode(header))\n if (typeof part.content === 'string') {\n controller.enqueue(encoder.encode(part.content))\n controller.enqueue(encoder.encode('\\r\\n'))\n partIndex++\n } else {\n reader = toPartStream(part.content).getReader()\n }\n },\n async cancel(reason) {\n await reader?.cancel(reason)\n const firstUnstartedPart = reader ? partIndex + 1 : partIndex\n await Promise.all(parts.slice(firstUnstartedPart).map(part => cancelMultipartContent(part.content, reason)))\n },\n })\n}\n","import { v4 as uuidv4 } from 'uuid'\nimport { Logger } from 'pino'\nimport { WebrtcBase } from './webrtc_base'\nimport { WorkerSession } from '../worker/worker_types'\nimport { HttpClient } from '../options'\n\nexport class WebrtcWhip extends WebrtcBase {\n private _stream: MediaStream | null\n constructor(stream: MediaStream, getSession: () => Promise<WorkerSession>, client: HttpClient, is_pipeline_direct: boolean, requestLogger: Logger) {\n super(getSession, client, uuidv4().toString(), 'liveIngress/whip', is_pipeline_direct, requestLogger)\n this._stream = stream\n }\n public async start(): Promise<WebrtcWhip> {\n const session = await this._getSession()\n\n const ingressUrl = this.gresUrl(session)\n\n /* According to https://www.ietf.org/archive/id/draft-ietf-wish-whip-01.html\n this should be a `OPTIONS` request. Unfortunately a lot of CORS middlewares\n hijack the OPTIONS request and only return those headers that are necessary\n for the CORS preflight protocol.\n As workaround, our media endpoint expose a equivalent `GET` request to fake\n the `OPTIONS` request and bypass the CORS preflight trap\n */\n const response = await this._client.fetch(ingressUrl, {\n headers: session.authenticationHeaders(),\n method: 'GET',\n })\n if (response.status >= 300) {\n return Promise.reject(`unknown status code for GET '${ingressUrl}': ${response.status} (${response.statusText})`)\n }\n return await this.onIceServers(response)\n }\n\n public async stream(): Promise<MediaStream> {\n if (this._stream) {\n return Promise.resolve(this._stream)\n } else {\n return Promise.reject('fetching stream failed')\n }\n }\n\n protected async onRemoteAnswer(answer: RTCSessionDescription): Promise<WebrtcBase> {\n if (!this._pc) {\n throw new Error('onLocalOffer no peer connection')\n }\n await this._pc.setRemoteDescription(new RTCSessionDescription(answer))\n\n if (this._queuedCandidates.length !== 0) {\n await this.sendLocalCandidates(this._queuedCandidates)\n this._queuedCandidates = []\n }\n return this\n }\n\n private async onIceServers(response: Response): Promise<WebrtcWhip> {\n if (!this._stream) {\n throw new Error('onIceServers no stream')\n }\n const stream = this._stream\n const pc = new RTCPeerConnection({\n iceServers: WebrtcBase.linkToIceServers(response.headers.get('Link')),\n })\n\n this._pc = pc\n pc.onicecandidate = evt => this.onLocalCandidate(evt)\n\n return new Promise(async (resolve, reject) => {\n pc.oniceconnectionstatechange = () => {\n switch (pc.iceConnectionState) {\n case 'failed':\n case 'disconnected':\n reject(`peer connection: ${pc.iceConnectionState}`)\n break\n case 'connected':\n resolve(this)\n break\n }\n }\n stream.getTracks().forEach(track => {\n this._requestLogger.debug('onIceServers our stream has track: %s', track)\n pc.addTrack(track, stream)\n })\n stream.addEventListener('addtrack', trackEvent => {\n this._requestLogger.debug('onIceServers got lazy track: ', trackEvent.track)\n pc.addTrack(trackEvent.track, stream)\n })\n await this.onLocalOffer(await pc.createOffer())\n })\n }\n\n public override async close(): Promise<void> {\n const stream = this._stream\n this._stream = null\n if (stream) {\n const tracks = stream.getTracks()\n tracks.forEach(track => {\n track.stop()\n })\n }\n return super.close()\n }\n}\n","import { Logger } from 'pino'\nimport { WebrtcWhip } from './webrtc_whip'\nimport path from 'path'\nimport { WorkerSession } from '../worker/worker_types'\nimport { HttpClient } from '../options'\n\ninterface OfferData {\n iceUfrag: string\n icePwd: string\n medias: string[]\n}\nexport abstract class WebrtcBase {\n protected readonly _getSession: () => Promise<WorkerSession>\n protected readonly _client: HttpClient\n protected readonly _requestLogger: Logger\n protected readonly _urlPath: string\n protected readonly _is_pipeline_direct: boolean\n\n private readonly _ingressId: string\n\n private _location: string | null\n\n protected _pc: RTCPeerConnection | null\n protected _eTag: string\n protected _queuedCandidates: RTCIceCandidate[]\n protected _offerData: OfferData | null\n\n protected constructor(getSession: () => Promise<WorkerSession>, client: HttpClient, ingressId: string, urlBasePath: string, is_pipeline_direct: boolean, requestLogger: Logger) {\n this._getSession = getSession\n this._client = client\n this._requestLogger = requestLogger\n this._ingressId = ingressId\n this._urlPath = `${urlBasePath}/${this._ingressId}`\n this._is_pipeline_direct = is_pipeline_direct\n this._pc = null\n this._eTag = ''\n this._location = null\n this._queuedCandidates = []\n this._offerData = null\n }\n\n public async close(): Promise<void> {\n const pc = this._pc\n this._pc = null\n if (pc) {\n return pc.close()\n }\n }\n\n public ingressId(): string {\n return this._ingressId\n }\n\n protected gresUrl(session: WorkerSession, location: string | null = null): URL {\n let urlPath\n if (this._is_pipeline_direct) {\n if (!session.pipelineId) {\n throw new Error('cannot connect with is_pipeline_direct=true but !session.pipelineId')\n }\n urlPath = path.join('pipelines', session.pipelineId, this._urlPath)\n } else {\n urlPath = this._urlPath\n }\n if (location) {\n urlPath = path.join(urlPath, location)\n }\n let baseUrl\n if (session.baseUrl?.endsWith('/')) {\n baseUrl = session.baseUrl\n } else {\n baseUrl = session.baseUrl + '/'\n }\n return new URL(urlPath, baseUrl)\n }\n\n protected async onLocalOffer(offer: RTCSessionDescriptionInit): Promise<WebrtcBase> {\n if (!this._pc) {\n throw new Error('onLocalOffer no peer connection')\n }\n if (!offer.sdp) {\n throw new Error('onLocalOffer no sdp')\n }\n this._offerData = WebrtcBase.parseOffer(offer.sdp)\n await this._pc.setLocalDescription(offer)\n\n const session = await this._getSession()\n const ingressUrl = this.gresUrl(session)\n\n const headers = {\n ...session.authenticationHeaders(),\n 'Content-Type': 'application/sdp',\n }\n const response = await this._client.fetch(ingressUrl, {\n headers: headers,\n method: 'POST',\n body: offer.sdp,\n })\n if (response.status >= 300) {\n return Promise.reject(`unknown status code for POST '${ingressUrl}': ${response.status} (${response.statusText})`)\n }\n this._eTag = response.headers.get('ETag') ?? ''\n this._location = response.headers.get('Location')\n return await this.onRemoteAnswer(new RTCSessionDescription({\n type: 'answer',\n sdp: await response.text()\n }))\n }\n\n protected abstract onRemoteAnswer(answer: RTCSessionDescription): Promise<WebrtcBase>\n\n protected async sendLocalCandidates(candidates: RTCIceCandidate[]): Promise<WebrtcBase> {\n if (!this._offerData) {\n throw new Error('sendLocalCandidates no offerData')\n }\n\n const session = await this._getSession()\n const ingressUrl = this.gresUrl(session, this._location)\n\n const headers = {\n ...session.authenticationHeaders(),\n 'Content-Type': 'application/trickle-ice-sdpfrag',\n 'If-Match': this._eTag,\n }\n const response = await this._client.fetch(ingressUrl, {\n headers: headers,\n method: 'PATCH',\n body: WebrtcBase.generateSdpFragment(this._offerData, candidates),\n })\n if (response.status >= 300) {\n return Promise.reject(`unknown status code for PATCH '${ingressUrl}': ${response.status} (${response.statusText})`)\n }\n return this\n }\n\n protected async onLocalCandidate(evt: RTCPeerConnectionIceEvent): Promise<WebrtcBase> {\n if (evt.candidate !== null) {\n if (this._eTag === '') {\n this._queuedCandidates.push(evt.candidate)\n } else {\n await this.sendLocalCandidates([evt.candidate])\n }\n }\n return this\n }\n\n static linkToIceServers(links: string | null): RTCIceServer[] {\n const servers =\n links !== null\n ? links.split(', ').map(link => {\n // backward compatible to MEDIAMTX using <...>\n let m = link.match(/^<(.+?)>; rel=\"ice-server\"(; username=\"(.*?)\"; credential=\"(.*?)\"; credential-type=\"password\")?/i);\n if (!m) {\n m = link.match(/^(.+?); rel=\"ice-server\"(; username=\"(.*?)\"; credential=\"(.*?)\"; credential-type=\"password\")?/i);\n }\n if (!m) {\n return null\n }\n const iceServer: RTCIceServer = {\n urls: [m[1]] as string[],\n username: WebrtcWhip.unquoteCredential(m[3]),\n credential: WebrtcWhip.unquoteCredential(m[4]),\n // credentialType: m[3]? \"password\" : undefined\n }\n return iceServer\n })\n : []\n return <RTCIceServer[]>servers.filter(function (el: null | RTCIceServer) {\n return el != null\n })\n }\n\n protected static editAnswer(answer: string, videoCodec: string, audioCodec: string | undefined, videoBitrate: number, audioBitrate: number | undefined, audioVoice: boolean): string {\n const sections = answer.split('m=')\n\n for (let i = 0; i < sections.length; i++) {\n const section = sections[i]\n if (section && section.startsWith('video')) {\n sections[i] = WebrtcWhip.setVideoBitrate(WebrtcWhip.setCodec(section, videoCodec), videoBitrate)\n } else if (section && section.startsWith('audio')) {\n sections[i] = WebrtcWhip.setAudioBitrate(WebrtcWhip.setCodec(section, audioCodec), audioBitrate, audioVoice)\n }\n }\n\n return sections.join('m=')\n }\n\n private static setCodec(section: string, codec: string | undefined): string {\n const lines = section.split('\\r\\n')\n const lines2 = []\n const payloadFormats = []\n\n for (const line of lines) {\n if (!line.startsWith('a=rtpmap:')) {\n lines2.push(line)\n } else {\n if (codec && line.toLowerCase().includes(codec)) {\n payloadFormats.push(line.slice('a=rtpmap:'.length).split(' ')[0])\n lines2.push(line)\n }\n }\n }\n\n const lines3 = []\n\n for (const line of lines2) {\n if (line.startsWith('a=fmtp:')) {\n if (payloadFormats.includes(line.slice('a=fmtp:'.length).split(' ')[0])) {\n lines3.push(line)\n }\n } else if (line.startsWith('a=rtcp-fb:')) {\n if (payloadFormats.includes(line.slice('a=rtcp-fb:'.length).split(' ')[0])) {\n lines3.push(line)\n }\n } else {\n lines3.push(line)\n }\n }\n\n return lines3.join('\\r\\n')\n }\n\n private static setVideoBitrate(section: string, bitrate: number): string {\n let lines = section.split('\\r\\n')\n\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i]\n if (!line) {\n continue\n }\n if (line.startsWith('c=')) {\n lines = [...lines.slice(0, i + 1), 'b=TIAS:' + (bitrate * 1024).toString(), ...lines.slice(i + 1)]\n break\n }\n }\n\n return lines.join('\\r\\n')\n }\n\n private static setAudioBitrate(section: string, bitrate: number | undefined, voice: boolean) {\n let opusPayloadFormat = ''\n let lines: string[] = section.split('\\r\\n')\n\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i]\n if (!line) {\n continue\n }\n if (line.startsWith('a=rtpmap:') && line.toLowerCase().includes('opus/')) {\n opusPayloadFormat = line.slice('a=rtpmap:'.length).split(' ')[0] || ''\n break\n }\n }\n\n if (opusPayloadFormat === '') {\n return section\n }\n\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i]\n if (!line) {\n continue\n }\n if (line.startsWith('a=fmtp:' + opusPayloadFormat + ' ')) {\n if (voice) {\n lines[i] = 'a=fmtp:' + opusPayloadFormat + ' minptime=10;useinbandfec=1;maxaveragebitrate=' + ((bitrate ?? 0) * 1024).toString()\n } else {\n lines[i] = 'a=fmtp:' + opusPayloadFormat + ' maxplaybackrate=48000;stereo=1;sprop-stereo=1;maxaveragebitrate' + ((bitrate ?? 0) * 1024).toString()\n }\n }\n }\n\n return lines.join('\\r\\n')\n }\n\n static parseOffer(offer: string): OfferData {\n let medias = []\n let iceUfrag = ''\n let icePwd = ''\n\n for (const line of offer.split('\\r\\n')) {\n if (line.startsWith('m=')) {\n medias.push(line.slice('m='.length))\n } else if (iceUfrag === '' && line.startsWith('a=ice-ufrag:')) {\n iceUfrag = line.slice('a=ice-ufrag:'.length)\n } else if (icePwd === '' && line.startsWith('a=ice-pwd:')) {\n icePwd = line.slice('a=ice-pwd:'.length)\n }\n }\n\n return {\n iceUfrag: iceUfrag,\n icePwd: icePwd,\n medias: medias,\n }\n }\n\n static generateSdpFragment(offerData: OfferData, candidates: RTCIceCandidate[]) {\n const candidatesByMedia = new Map<number, RTCIceCandidate[]>()\n for (const candidate of candidates) {\n if (candidate.sdpMLineIndex !== null) {\n const mid = candidate.sdpMLineIndex\n let matched = candidatesByMedia.get(mid)\n if (matched === undefined) {\n matched = []\n candidatesByMedia.set(mid, matched)\n }\n matched.push(candidate)\n }\n }\n\n let frag = 'a=ice-ufrag:' + offerData.iceUfrag + '\\r\\n' + 'a=ice-pwd:' + offerData.icePwd + '\\r\\n'\n let mid = 0\n\n for (const media of offerData.medias) {\n let matched = candidatesByMedia.get(mid)\n if (matched !== undefined) {\n frag += 'm=' + media + '\\r\\n' + 'a=mid:' + mid + '\\r\\n'\n\n for (const candidate of matched) {\n frag += 'a=' + candidate.candidate + '\\r\\n'\n }\n }\n mid++\n }\n return frag\n }\n\n static unquoteCredential(v: string | undefined): string {\n if (!v) {\n return ''\n }\n return JSON.parse(`\"${v}\"`)\n }\n}\n","import { Prediction } from '../types'\nimport { Stream, StreamEvent, readableStreamFromString, MultipartPart, randomMultipartBoundary, encodeMultipartFormData } from '../streaming'\nimport { Logger } from 'pino'\nimport { ComponentParams, DEFAULT_PREDICTION_VERSION, PredictionVersion, ProcessParams, ResultStream, VideoMode, WorkerSession } from '../worker/worker_types'\nimport { HttpClient } from '../options'\nimport { WebrtcWhip } from './webrtc_whip'\nimport { Area } from 'EyePop/data/data_types'\n\ntype UploadBody = ReadableStream<Uint8Array> | Blob | BufferSource\n\nexport class AbstractJob implements ResultStream {\n protected _getSession: () => Promise<WorkerSession>\n\n protected _params: ProcessParams\n\n protected _responseStream: Promise<ReadableStream<Uint8Array>> | null = null\n protected _controller: AbortController = new AbortController()\n\n protected _client: HttpClient\n\n protected _requestLogger: Logger\n\n protected _version: PredictionVersion;\n\n [Symbol.asyncIterator](): AsyncIterator<Prediction> {\n if (!this._responseStream) {\n throw Error('logical bug')\n }\n return Stream.iterFromReadableStream(this._responseStream, this._controller, async (event: StreamEvent) => {\n return await this.onEvent(event)\n })\n }\n\n protected constructor(params: ProcessParams, getSession: () => Promise<WorkerSession>, client: HttpClient, requestLogger: Logger, version: PredictionVersion = DEFAULT_PREDICTION_VERSION) {\n this._getSession = getSession\n this._params = params\n this._client = client\n this._requestLogger = requestLogger\n this._version = version\n }\n\n protected async startJob(): Promise<Response> {\n return Promise.reject('abstract class')\n }\n\n protected async onEvent(event: StreamEvent): Promise<void> {\n if (event.type == 'error') {\n return Promise.reject(`Error event for source ${event.source_id}: ${event.message}`)\n }\n return Promise.resolve()\n }\n\n static n: number = 0\n\n public start(done: () => void, status: (statusCode: number) => void): AbstractJob {\n this._responseStream = new Promise<ReadableStream<Uint8Array>>(async (resolve, reject) => {\n try {\n let retries = 1\n while (true) {\n try {\n const response = await this.startJob()\n if (response.status == 401) {\n status(response.status)\n if (retries--) {\n this._requestLogger.info('received 401 response, attempt to reauthorize once')\n } else {\n reject(`response ${response.status}: ${response.statusText}`)\n break\n }\n } else if (response.status == 404) {\n status(response.status)\n if (retries--) {\n this._requestLogger.info('received 404 response, attempt to restart pop')\n } else {\n reject(`response ${response.status}: ${response.statusText}`)\n break\n }\n } else if (!response.ok) {\n reject(`upload error ${response.status}: ${await response.text()}`)\n break\n } else if (response.body) {\n resolve(response.body)\n break\n } else {\n const text = await response.text()\n if (text) {\n resolve(readableStreamFromString(text))\n break\n } else {\n reject('response body is empty')\n break\n }\n }\n } catch (error) {\n if (retries--) {\n this._requestLogger.info('unknown, attempt to restart pop (as if we received 404)', error)\n status(404)\n } else {\n status(500)\n reject(error)\n break\n }\n }\n }\n } catch (reason) {\n reject(reason)\n } finally {\n done()\n }\n })\n return this\n }\n\n public cancel(): void {\n this._controller.abort('cancelled')\n }\n}\n\nexport class UploadJob extends AbstractJob {\n private readonly _uploadStream: UploadBody\n private readonly _uploadBodyFactory: (() => Promise<UploadBody>) | undefined\n private readonly _mimeType: string\n private readonly _size: number | undefined\n private readonly _needsFullDuplex: boolean\n private readonly _videoMode: VideoMode | undefined\n get [Symbol.toStringTag](): string {\n return 'uploadJob'\n }\n\n constructor(\n stream: UploadBody,\n mimeType: string,\n size: number | undefined,\n videoMode: VideoMode | undefined,\n params: ProcessParams,\n getSession: () => Promise<WorkerSession>,\n client: HttpClient,\n requestLogger: Logger,\n uploadBodyFactory?: () => Promise<UploadBody>,\n version: PredictionVersion = DEFAULT_PREDICTION_VERSION,\n ) {\n super(params, getSession, client, requestLogger, version)\n this._uploadStream = stream\n this._uploadBodyFactory = uploadBodyFactory\n this._mimeType = mimeType\n this._size = size\n this._videoMode = videoMode\n this._needsFullDuplex = !client.isFullDuplex() && mimeType.startsWith('video/') && videoMode == VideoMode.STREAM\n }\n\n private async uploadBody(): Promise<UploadBody> {\n return this._uploadBodyFactory ? await this._uploadBodyFactory() : this._uploadStream\n }\n\n protected override async onEvent(event: StreamEvent): Promise<void> {\n if (event.type == 'prepared') {\n if (!event.source_id) {\n return Promise.reject('did not get a prepared sourceId to simulate full duplex')\n }\n const session = await this._getSession()\n if (!session.baseUrl) {\n return Promise.reject('session.baseUrl must not ne null')\n }\n let request\n const queryParams = new URLSearchParams({\n mode: 'queue',\n processing: 'async',\n sourceId: event.source_id,\n })\n if (this._videoMode !== undefined) {\n queryParams.set('videoMode', this._videoMode)\n }\n if (this._version !== undefined) {\n queryParams.set('version', this._version.toString())\n }\n if (this._params.motionDetect) {\n for (const [key, value] of Object.entries(this._params.motionDetect)) {\n queryParams.set(key, value)\n }\n }\n const postUrl: string = `${session.baseUrl.replace(/\\/+$/, '')}/pipelines/${session.pipelineId}/source?${queryParams.toString()}`\n if (this._params.componentParams || this._params.roi || this._params.camera) {\n const formData = new FormData()\n if (this._params.componentParams) {\n const blob = new Blob([JSON.stringify(this._params.componentParams)], { type: 'application/json' })\n formData.append('params', blob)\n }\n if (this._params.roi) {\n const blob = new Blob([JSON.stringify(this._params.roi)], { type: 'application/json' })\n formData.append('roi', blob)\n }\n if (this._params.fps) {\n const blob = new Blob([JSON.stringify(this._params.fps)], { type: 'application/json' })\n formData.append('fps', blob)\n }\n if (this._params.camera) {\n const blob = new Blob([JSON.stringify(this._params.camera)], { type: 'application/json' })\n formData.append('camera', blob)\n }\n const fileBlob = await new Response(await this.uploadBody()).blob()\n formData.append('file', fileBlob)\n const headers = {\n ...session.authenticationHeaders(),\n Accept: 'application/jsonl',\n }\n\n request = this._client.fetch(postUrl, {\n headers: headers,\n method: 'POST',\n body: formData,\n signal: this._controller.signal,\n // @ts-ignore\n duplex: 'half',\n eyepop: { responseStreaming: true },\n })\n } else {\n const headers = {\n ...session.authenticationHeaders(),\n Accept: 'application/jsonl',\n 'Content-Type': this._mimeType,\n }\n if (this._size) {\n headers['Content-Length'] = `${this._size}`\n }\n request = this._client.fetch(postUrl, {\n headers: headers,\n method: 'POST',\n body: await this.uploadBody(),\n signal: this._controller.signal,\n // @ts-ignore\n duplex: 'half',\n eyepop: { responseStreaming: true },\n })\n }\n request\n .then(async value => {\n if (value.status != 204) {\n this._requestLogger.debug(`unexpected status ${value.status} (${await value.text()}) for POST ${postUrl}`)\n }\n })\n .catch(reason => {\n this._requestLogger.debug(`error ${reason} for POST ${postUrl}`)\n })\n }\n return Promise.resolve()\n }\n\n protected override async startJob(): Promise<Response> {\n const session = await this._getSession()\n if (!session.baseUrl) {\n return Promise.reject('session.baseUrl must not be null')\n }\n let response\n if (this._needsFullDuplex) {\n const prepareUrl: string = `${session.baseUrl.replace(/\\/+$/, '')}/pipelines/${session.pipelineId}/prepareSource?timeout=10s`\n const headers = {\n ...session.authenticationHeaders(),\n Accept: 'application/jsonl',\n }\n response = await this._client.fetch(prepareUrl, {\n headers: headers,\n method: 'POST',\n signal: this._controller.signal,\n // @ts-ignore\n duplex: 'half',\n eyepop: { responseStreaming: true },\n })\n } else {\n const queryParams = new URLSearchParams({\n mode: 'queue',\n processing: 'sync',\n })\n if (this._videoMode !== undefined) {\n queryParams.set('videoMode', this._videoMode)\n }\n if (this._version !== undefined) {\n queryParams.set('version', this._version.toString())\n }\n if (this._params.motionDetect) {\n for (const [key, value] of Object.entries(this._params.motionDetect)) {\n queryParams.set(key, value)\n }\n }\n const postUrl: string = `${session.baseUrl.replace(/\\/+$/, '')}/pipelines/${session.pipelineId}/source?${queryParams.toString()}`\n if (this._params.componentParams || this._params.roi || this._params.camera) {\n const formData = new FormData()\n if (this._params.componentParams) {\n const blob = new Blob([JSON.stringify(this._params.componentParams)], { type: 'application/json' })\n formData.append('params', blob)\n }\n if (this._params.roi) {\n const blob = new Blob([JSON.stringify(this._params.roi)], { type: 'application/json' })\n formData.append('roi', blob)\n }\n if (this._params.fps) {\n const blob = new Blob([JSON.stringify(this._params.fps)], { type: 'application/json' })\n formData.append('fps', blob)\n }\n if (this._params.camera) {\n const blob = new Blob([JSON.stringify(this._params.camera)], { type: 'application/json' })\n formData.append('camera', blob)\n }\n const fileBlob = await new Response(await this.uploadBody()).blob()\n formData.append('file', fileBlob)\n const headers = {\n ...session.authenticationHeaders(),\n Accept: 'application/jsonl',\n }\n\n response = await this._client.fetch(postUrl, {\n headers: headers,\n method: 'POST',\n body: formData,\n signal: this._controller.signal,\n // @ts-ignore\n duplex: 'half',\n eyepop: { responseStreaming: true },\n })\n } else {\n const headers = {\n ...session.authenticationHeaders(),\n Accept: 'application/jsonl',\n 'Content-Type': this._mimeType,\n }\n if (this._size) {\n headers['Content-Length'] = `${this._size}`\n }\n response = await this._client.fetch(postUrl, {\n headers: headers,\n method: 'POST',\n body: await this.uploadBody(),\n signal: this._controller.signal,\n // @ts-ignore\n duplex: 'half',\n })\n }\n }\n return response\n }\n}\n\nexport class LoadFromJob extends AbstractJob {\n private readonly _location: string\n\n constructor(location: string, params: ProcessParams, getSession: () => Promise<WorkerSession>, client: HttpClient, requestLogger: Logger, version: PredictionVersion = DEFAULT_PREDICTION_VERSION) {\n super(params, getSession, client, requestLogger, version)\n this._location = location\n }\n\n get [Symbol.toStringTag](): string {\n return 'loadFromJob'\n }\n\n protected override async startJob(): Promise<Response> {\n const session = await this._getSession()\n if (!session.baseUrl) {\n return Promise.reject('session.baseUrl must not ne null')\n }\n const body = {\n sourceType: 'URL',\n url: this._location,\n params: this._params.componentParams,\n roi: this._params.roi,\n fps: this._params.fps,\n camera: this._params.camera,\n version: this._version,\n // undefined is dropped by JSON.stringify, so an unset option leaves\n // the worker's own default to decide rather than pinning it here.\n rtspForceNonCompliantUrl: this._params.rtspForceNonCompliantUrl,\n }\n if (this._params.motionDetect) {\n Object.assign(body, this._params.motionDetect)\n }\n const headers = {\n ...session.authenticationHeaders(),\n Accept: 'application/jsonl',\n 'Content-Type': 'application/json',\n }\n const patchUrl: string = `${session.baseUrl.replace(/\\/+$/, '')}/pipelines/${session.pipelineId}/source?mode=queue&processing=sync`\n return await this._client.fetch(patchUrl, {\n headers: headers,\n method: 'PATCH',\n body: JSON.stringify(body),\n signal: this._controller.signal,\n // @ts-ignore\n eyepop: { responseStreaming: true },\n })\n }\n}\n\nexport interface UploadSource {\n readonly stream: ReadableStream<Uint8Array> | Blob | BufferSource\n readonly mimeType: string | null\n}\n\nexport class UploadGroupJob extends AbstractJob {\n private readonly _sources: UploadSource[]\n\n get [Symbol.toStringTag](): string {\n return 'uploadGroupJob'\n }\n\n constructor(sources: UploadSource[], params: ProcessParams, getSession: () => Promise<WorkerSession>, client: HttpClient, requestLogger: Logger, version: PredictionVersion = DEFAULT_PREDICTION_VERSION) {\n super(params, getSession, client, requestLogger, version)\n if (sources.length === 0) {\n throw new Error('upload group requires at least one source')\n }\n this._sources = sources\n }\n\n protected override async startJob(): Promise<Response> {\n const session = await this._getSession()\n if (!session.baseUrl) {\n return Promise.reject(new Error('session.baseUrl must not be null'))\n }\n const queryParams = new URLSearchParams({\n mode: 'queue',\n processing: 'sync',\n })\n if (this._version !== undefined) {\n queryParams.set('version', this._version.toString())\n }\n if (this._params.motionDetect) {\n for (const [key, value] of Object.entries(this._params.motionDetect)) {\n queryParams.set(key, value)\n }\n }\n const postUrl = `${session.baseUrl.replace(/\\/+$/, '')}/pipelines/${session.pipelineId}/source?${queryParams.toString()}`\n\n const parts: MultipartPart[] = []\n if (this._params.componentParams) {\n parts.push({ name: 'params', contentType: 'application/json', content: JSON.stringify(this._params.componentParams) })\n }\n if (this._params.roi) {\n parts.push({ name: 'roi', contentType: 'application/json', content: JSON.stringify(this._params.roi) })\n }\n if (this._params.fps) {\n parts.push({ name: 'fps', contentType: 'application/json', content: JSON.stringify(this._params.fps) })\n }\n if (this._params.camera) {\n parts.push({ name: 'camera', contentType: 'application/json', content: JSON.stringify(this._params.camera) })\n }\n for (const source of this._sources) {\n // the worker only finds a file part that has a filename, the same \"blob\" FormData gives a single upload\n parts.push({ name: 'file', filename: 'blob', contentType: source.mimeType, content: source.stream })\n }\n const boundary = randomMultipartBoundary()\n const headers = {\n ...session.authenticationHeaders(),\n Accept: 'application/jsonl',\n 'Content-Type': `multipart/form-data; boundary=${boundary}`,\n }\n return await this._client.fetch(postUrl, {\n headers,\n method: 'POST',\n body: encodeMultipartFormData(parts, boundary),\n signal: this._controller.signal,\n // @ts-ignore\n duplex: 'half',\n eyepop: { responseStreaming: true },\n })\n }\n}\n\nexport class LoadFromGroupJob extends AbstractJob {\n private readonly _urls: string[]\n\n get [Symbol.toStringTag](): string {\n return 'loadFromGroupJob'\n }\n\n constructor(urls: string[], params: ProcessParams, getSession: () => Promise<WorkerSession>, client: HttpClient, requestLogger: Logger, version: PredictionVersion = DEFAULT_PREDICTION_VERSION) {\n super(params, getSession, client, requestLogger, version)\n if (urls.length === 0) {\n throw new Error('load from group requires at least one url')\n }\n this._urls = urls\n }\n\n protected override async startJob(): Promise<Response> {\n const session = await this._getSession()\n if (!session.baseUrl) {\n return Promise.reject(new Error('session.baseUrl must not be null'))\n }\n const body: Record<string, any> = {\n sourceType: 'GROUP',\n sources: this._urls.map(url => ({ sourceType: 'URL', url })),\n version: this._version,\n }\n if (this._params.componentParams) {\n body['params'] = this._params.componentParams\n }\n if (this._params.roi) {\n body['roi'] = this._params.roi\n }\n if (this._params.camera) {\n body['camera'] = this._params.camera\n }\n if (this._params.motionDetect) {\n Object.assign(body, this._params.motionDetect)\n }\n const headers = {\n ...session.authenticationHeaders(),\n Accept: 'application/jsonl',\n 'Content-Type': 'application/json',\n }\n const patchUrl = `${session.baseUrl.replace(/\\/+$/, '')}/pipelines/${session.pipelineId}/source?mode=queue&processing=sync`\n return await this._client.fetch(patchUrl, {\n headers,\n method: 'PATCH',\n body: JSON.stringify(body),\n signal: this._controller.signal,\n // @ts-ignore\n eyepop: { responseStreaming: true },\n })\n }\n}\n\nexport class LoadFromAssetUuidJob extends AbstractJob {\n private readonly _assetUuid: string\n\n constructor(assetUuid: string, params: ProcessParams, getSession: () => Promise<WorkerSession>, client: HttpClient, requestLogger: Logger, version: PredictionVersion = DEFAULT_PREDICTION_VERSION) {\n super(params, getSession, client, requestLogger, version)\n this._assetUuid = assetUuid\n }\n\n get [Symbol.toStringTag](): string {\n return 'loadFromAssetUuidJob'\n }\n\n protected override async startJob(): Promise<Response> {\n const session = await this._getSession()\n if (!session.baseUrl) {\n return Promise.reject('session.baseUrl must not ne null')\n }\n const body = {\n sourceType: 'ASSET_UUID',\n assetUuid: this._assetUuid,\n params: this._params.componentParams,\n roi: this._params.roi,\n fps: this._params.fps,\n camera: this._params.camera,\n version: this._version,\n }\n if (this._params.motionDetect) {\n Object.assign(body, this._params.motionDetect)\n }\n const headers = {\n ...session.authenticationHeaders(),\n Accept: 'application/jsonl',\n 'Content-Type': 'application/json',\n }\n const patchUrl: string = `${session.baseUrl.replace(/\\/+$/, '')}/pipelines/${session.pipelineId}/source?mode=queue&processing=sync`\n return await this._client.fetch(patchUrl, {\n headers: headers,\n method: 'PATCH',\n body: JSON.stringify(body),\n signal: this._controller.signal,\n // @ts-ignore\n eyepop: { responseStreaming: true },\n })\n }\n}\n\nexport class LoadMediaStreamJob extends AbstractJob {\n private readonly _mediaStream: MediaStream\n\n constructor(mediaStream: MediaStream, params: ProcessParams, getSession: () => Promise<WorkerSession>, client: HttpClient, requestLogger: Logger, version: PredictionVersion = DEFAULT_PREDICTION_VERSION) {\n super(params, getSession, client, requestLogger, version)\n this._mediaStream = mediaStream\n }\n\n get [Symbol.toStringTag](): string {\n return 'loadLiveIngressJob'\n }\n\n protected override async startJob(): Promise<Response> {\n const session = await this._getSession()\n if (!session.baseUrl) {\n return Promise.reject('session.baseUrl must not ne null')\n }\n\n const whip = new WebrtcWhip(\n this._mediaStream,\n async () => {\n return session\n },\n this._client,\n true,\n this._requestLogger,\n )\n\n whip.start()\n .then(_ => {\n this._requestLogger.debug('direct whip for ingressId=%s successful', whip.ingressId())\n })\n .catch((reason: any) => {\n this._controller.abort(reason)\n })\n\n const body = {\n sourceType: 'WHIP',\n whipIngressId: whip.ingressId(),\n params: this._params.componentParams,\n roi: this._params.roi,\n fps: this._params.fps,\n camera: this._params.camera,\n version: this._version,\n }\n if (this._params.motionDetect) {\n Object.assign(body, this._params.motionDetect)\n }\n const headers = {\n ...session.authenticationHeaders(),\n Accept: 'application/jsonl',\n 'Content-Type': 'application/json',\n }\n const patchUrl: string = `${session.baseUrl.replace(/\\/+$/, '')}/pipelines/${session.pipelineId}/source?mode=preempt&processing=sync`\n return await this._client.fetch(patchUrl, {\n headers: headers,\n method: 'PATCH',\n body: JSON.stringify(body),\n signal: this._controller.signal,\n // @ts-ignore\n eyepop: { responseStreaming: true },\n })\n }\n}\n","\nimport * as fs from 'node:fs'\nimport { PathSource, StreamSource } from '../index'\nimport { Logger } from 'pino'\n\nexport let resolvePath: (source: PathSource, logger: Logger) => Promise<StreamSource>\n\nif ('document' in globalThis && 'implementation' in globalThis.document) {\n resolvePath = async (_source: PathSource, _logger: Logger) => {\n throw new DOMException('resolving a path to a file is not supported in browser')\n }\n} else {\n /**\n * From https://github.com/MattMorgis/async-stream-generator\n */\n async function* nodeStreamToIterator(stream: AsyncIterable<Uint8Array>) {\n for await (const chunk of stream) {\n yield chunk\n }\n }\n /**\n * Taken from Next.js doc\n * https://nextjs.org/docs/app/building-your-application/routing/router-handlers#streaming\n * Itself taken from mozilla doc\n * https://developer.mozilla.org/en-US/docs/Web/API/ReadableStream#convert_async_iterator_to_stream\n * @param {*} iterator\n * @returns {ReadableStream}\n */\n function iteratorToStream(iterator: AsyncGenerator<any>) {\n return new ReadableStream({\n async pull(controller) {\n const { value, done } = await iterator.next()\n\n if (done) {\n controller.close()\n } else {\n controller.enqueue(new Uint8Array(value))\n }\n },\n })\n }\n resolvePath = async (source: PathSource, _: Logger) => {\n const mime = require('mime-types')\n const filehandle = require('node:fs/promises')\n const fd = await filehandle.open(source.path, 'r')\n const size = (await fd.stat()).size\n const stream = fd.createReadStream()\n const iterator = nodeStreamToIterator(stream as AsyncIterable<Uint8Array>)\n const webStream = iteratorToStream(iterator)\n\n const mimeType = source.mimeType? source.mimeType : (mime.lookup(source.path) || 'image/*')\n return {\n stream: webStream,\n mimeType: mimeType,\n size: size,\n }\n }\n}\n","import { Options } from '../options'\nimport type { Pop } from './worker_types'\n\n/**\n * @deprecated Configure transient sessions with `WorkerOptions.pop`.\n * Support for pop id will be removed in 3.16.\n */\nexport enum TransientPopId {\n Transient = 'transient',\n}\n\nexport interface WorkerOptions extends Options {\n /**\n * @deprecated Pass `pop` for transient sessions or `sessionUuid` for persistent sessions.\n * Support for pop id will be removed in 3.16.\n */\n popId?: string | TransientPopId | undefined\n\n sessionUuid?: string | undefined\n sessionName?: string | undefined\n /**\n * The account the compute session runs and is billed under, sent to compute-api as\n * `account_uuid`. Required when the credential does not name one account.\n * Defaults to process.env['EYEPOP_ACCOUNT_UUID'], then the deprecated process.env['EYEPOP_ACCOUNT_ID'].\n */\n accountId?: string | undefined\n pipelineImage?: string | undefined\n pipelineVersion?: string | undefined\n pop?: Pop | undefined\n sessionReadyTimeoutSeconds?: number | undefined\n autoStart?: boolean\n stopJobs?: boolean\n isLocalMode?: boolean\n /**\n * Run the endpoint's jobs on the pipeline API's socket instead of a worker session. The\n * compute API at `eyepopUrl` names the pipeline API in its `/v1/configs`; with `isLocalMode`,\n * `eyepopUrl` is the pipeline API itself. Takes no option that names a session or a pop id.\n * Defaults to process.env['EYEPOP_PIPELINE_MODE'].\n */\n isPipelineMode?: boolean\n}\n","import { LocalAuth, accessTokenCredential, apiKeyCredential, resolveAuth } from '../options'\nimport { ComputeSessionClient } from '../compute/compute_session'\nimport type { ResolvedComputeSession } from '../compute/compute_session'\nimport { EndpointState, Session } from '../types'\nimport { AbstractJob, LoadFromAssetUuidJob, LoadFromGroupJob, LoadFromJob, LoadMediaStreamJob, UploadGroupJob, UploadJob, UploadSource } from './jobs'\nimport { resolvePath } from '../shims/local_file'\nimport { TransientPopId } from './worker_options'\nimport { WorkerBackend, WorkerContext, WorkerWork } from './worker_backend'\nimport {\n AssetUuidSource,\n DEFAULT_PREDICTION_VERSION,\n FileSource,\n MediaStreamSource,\n PathSource,\n Pop,\n PredictionVersion,\n ProcessParams,\n ResultStream,\n Source,\n StreamSource,\n UrlSource,\n WorkerSession,\n popSelects,\n} from './worker_types'\n\ninterface PopConfig {\n base_url: string\n pipeline_id: string\n name: string\n}\n\ninterface Pipeline {\n id: string\n startTime: string\n state: string\n pop?: Pop\n}\n\n/** Runs jobs on a worker session: a compute API session, or a named pop found through its config. */\nexport class SessionBackend implements WorkerBackend {\n private _baseUrl: string | null = null\n private _pipelineId: string | null = null\n private _popName: string | null = null\n private _sessionAccessToken: string | null = null\n private _sessionAccessTokenValidUntil: number | null = null\n // The account the connected compute session runs under, as compute-api reports it.\n private _accountId: string | undefined = undefined\n\n private _pipeline: Pipeline | null = null\n private _pipelineCreatePromise: Promise<string> | null = null\n\n constructor(private readonly ctx: WorkerContext) {}\n\n public async disconnect(closeEndpoint: () => Promise<void>): Promise<void> {\n await this.deleteOwnPipeline()\n await closeEndpoint()\n }\n\n private async deleteOwnPipeline(): Promise<void> {\n const client = this.ctx.client()\n if (this.ctx.options.popId == TransientPopId.Transient && this._pipelineId && client) {\n const deleteUrl = `${this._baseUrl}/pipelines/${this._pipelineId}`\n const headers = {\n Authorization: await this.authorizationHeader(),\n }\n let response = await client.fetch(deleteUrl, {\n method: 'DELETE',\n headers: headers,\n })\n if (response?.status != 204) {\n const message = await response?.text()\n this.ctx.logger.info(`stopping pipeline failed, status ${response?.status}: ${message}`)\n }\n }\n }\n\n public onStatus(statusCode: number): void {\n if (statusCode == 404) {\n this._pipelineId = null\n this._baseUrl = null\n }\n }\n\n public async session(): Promise<WorkerSession> {\n let session: Session | null = null\n if (this._baseUrl == null) {\n await this.reconnect()\n if (this._baseUrl == null) {\n return Promise.reject('endpoint not connected')\n }\n }\n if (this._sessionAccessToken) {\n session = {\n eyepopUrl: this.ctx.options.eyepopUrl as string,\n accessToken: this._sessionAccessToken,\n validUntil: this._sessionAccessTokenValidUntil || Number.MAX_VALUE,\n }\n } else {\n session = await this.ctx.credentialSession()\n }\n return {\n eyepopUrl: session.eyepopUrl,\n accessToken: session.accessToken,\n validUntil: session.validUntil,\n popId: this.ctx.options.popId as string,\n accountId: this._accountId ?? this.ctx.options.accountId,\n baseUrl: this._baseUrl as string,\n pipelineId: this._pipelineId || undefined,\n isPipelineMode: false,\n authenticationHeaders: () => this._authenticationHeaders(session),\n }\n }\n\n public popName(): string | null {\n return this._popName\n }\n\n public pop(): Pop | null {\n if (this._pipeline) {\n return this._pipeline.pop || null\n }\n return this.ctx.options.pop || null\n }\n\n /**\n * A select forward's results come only at V3. Only a Pop that selects asks\n * for it, so a worker too old to know V3 - which also rejects that Pop - is\n * never sent a version it would not accept.\n */\n private predictionVersion(): PredictionVersion {\n return popSelects(this.pop()) ? PredictionVersion.V3 : DEFAULT_PREDICTION_VERSION\n }\n\n public async changePop(pop: Pop): Promise<void> {\n if (this.ctx.options.popId == TransientPopId.Transient) {\n await this.changeTransientPop(pop)\n return\n }\n\n const client = this.ctx.client()\n const baseUrl = this._baseUrl\n if (!baseUrl || !client) {\n return Promise.reject('endpoint not connected, use connect()')\n }\n\n let response = await this.ctx.fetchWithRetry(async () => {\n const session = await this.session()\n let headers = {\n 'Content-Type': 'application/json',\n ...this._authenticationHeaders(session),\n }\n const patch_url = `${session.baseUrl}/pipelines/${session.pipelineId}/pop`\n return await client.fetch(patch_url, {\n method: 'PATCH',\n body: JSON.stringify(pop),\n headers: headers,\n })\n })\n if (response.status != 204) {\n const message = await response.text()\n throw new Error(`Unexpected status ${response.status}: ${message}`)\n }\n this.ctx.options.pop = pop\n if (this._pipeline) {\n this._pipeline.pop = pop\n } else {\n this._pipeline = {\n id: this._pipelineId || 'unknown',\n state: 'idle',\n startTime: new Date().toString(),\n pop: pop,\n }\n }\n }\n\n private _authenticationHeaders(session: Session): any {\n return (resolveAuth(this.ctx.options) as LocalAuth | undefined)?.isLocal !== undefined ? {} : { Authorization: `Bearer ${session.accessToken}` }\n }\n\n public async submit(work: WorkerWork): Promise<ResultStream> {\n switch (work.kind) {\n case 'source':\n return await this.process(work.source, work.params)\n case 'uploadGroup':\n return await this.uploadGroup(work.paths, work.params)\n case 'uploadStreamGroup':\n return await this.uploadStreamGroup(work.streams, work.mimeTypes, work.params)\n case 'loadFromGroup':\n return await this.loadFromGroup(work.urls, work.params)\n }\n }\n\n private async process(source: Source, params: ProcessParams): Promise<ResultStream> {\n if ((source as FileSource).file !== undefined) {\n return this.uploadFile(source as FileSource, params)\n } else if ((source as StreamSource).stream !== undefined) {\n return this.uploadStream(source as StreamSource, params)\n } else if ((source as PathSource).path !== undefined) {\n return this.uploadPath(source as PathSource, params)\n } else if ((source as UrlSource).url !== undefined) {\n return this.loadFrom(source as UrlSource, params)\n } else if ((source as AssetUuidSource).assetUuid !== undefined) {\n return this.loadFromAssetUuid(source as AssetUuidSource, params)\n } else if ((source as MediaStreamSource).mediaStream !== undefined) {\n return this.loadMediaStream(source as MediaStreamSource, params)\n } else {\n return Promise.reject('unknown source type')\n }\n }\n\n private start(job: AbstractJob): ResultStream {\n return job.start(\n () => {\n this.ctx.jobDone()\n },\n (statusCode: number) => {\n if (statusCode == 404) {\n this.onStatus(statusCode)\n } else if (statusCode == 401) {\n this.ctx.forgetCredential()\n }\n },\n )\n }\n\n private async uploadGroup(paths: string[], params: ProcessParams): Promise<ResultStream> {\n const client = this.ctx.client()\n const limit = this.ctx.limit()\n if (!this._baseUrl || !this._pipelineId || !client) {\n throw new Error('endpoint not connected, use connect()')\n }\n await limit.acquire()\n try {\n this.ctx.updateState()\n const sources: UploadSource[] = await Promise.all(\n paths.map(async (path): Promise<UploadSource> => {\n const streamSource = await this.resolvePath({ path })\n return { stream: streamSource.stream, mimeType: streamSource.mimeType }\n }),\n )\n return this.start(new UploadGroupJob(sources, params, async () => this.session(), client, this.ctx.requestLogger, this.predictionVersion()))\n } catch (e) {\n limit.release()\n throw e\n }\n }\n\n private async uploadStreamGroup(streams: Array<ReadableStream<Uint8Array> | Blob | BufferSource>, mimeTypes: string[] | undefined, params: ProcessParams): Promise<ResultStream> {\n const client = this.ctx.client()\n const limit = this.ctx.limit()\n if (!this._baseUrl || !this._pipelineId || !client) {\n throw new Error('endpoint not connected, use connect()')\n }\n await limit.acquire()\n try {\n this.ctx.updateState()\n const sources: UploadSource[] = streams.map((stream, i) => ({\n stream,\n mimeType: mimeTypes?.[i] ?? null,\n }))\n return this.start(new UploadGroupJob(sources, params, async () => this.session(), client, this.ctx.requestLogger, this.predictionVersion()))\n } catch (e) {\n limit.release()\n throw e\n }\n }\n\n private async loadFromGroup(urls: string[], params: ProcessParams): Promise<ResultStream> {\n const client = this.ctx.client()\n const limit = this.ctx.limit()\n if (!this._baseUrl || !this._pipelineId || !client) {\n throw new Error('endpoint not connected, use connect()')\n }\n await limit.acquire()\n try {\n this.ctx.updateState()\n return this.start(new LoadFromGroupJob(urls, params, async () => this.session(), client, this.ctx.requestLogger, this.predictionVersion()))\n } catch (e) {\n limit.release()\n throw e\n }\n }\n\n private async resolvePath(source: PathSource): Promise<StreamSource> {\n if (this.ctx.options.platformSupport?.resolvePath) {\n return await this.ctx.options.platformSupport.resolvePath(source, this.ctx.logger)\n }\n return await resolvePath(source, this.ctx.logger)\n }\n\n /** Start a job once the transient pipeline runs and a queue permit is held; the permit is released if it cannot start. */\n private async startConnected(makeJob: (client: NonNullable<ReturnType<WorkerContext['client']>>) => Promise<AbstractJob>, rejectsWithText: boolean = false): Promise<ResultStream> {\n await this.ensureTransientPipelineStarted()\n const client = this.ctx.client()\n const limit = this.ctx.limit()\n if (!this._baseUrl || !this._pipelineId || !client) {\n // uploadFile and uploadStream have always rejected with the bare text\n if (rejectsWithText) {\n return Promise.reject('endpoint not connected, use connect()')\n }\n throw new Error('endpoint not connected, use connect()')\n }\n await limit.acquire()\n try {\n this.ctx.updateState()\n return this.start(await makeJob(client))\n } catch (e) {\n // we'll have to reset our queue counter in case the job cannot be started\n limit.release()\n throw e\n }\n }\n\n private async uploadFile(source: FileSource, params: ProcessParams): Promise<ResultStream> {\n return await this.startConnected(\n async client =>\n new UploadJob(\n source.file,\n source.file.type,\n source.file.size,\n source.videoMode,\n params,\n async () => this.session(),\n client,\n this.ctx.requestLogger,\n undefined,\n this.predictionVersion(),\n ),\n true,\n )\n }\n\n private async uploadStream(source: StreamSource, params: ProcessParams): Promise<ResultStream> {\n return await this.startConnected(\n async client =>\n new UploadJob(source.stream, source.mimeType, source.size, source.videoMode, params, async () => this.session(), client, this.ctx.requestLogger, undefined, this.predictionVersion()),\n true,\n )\n }\n\n private async uploadPath(source: PathSource, params: ProcessParams): Promise<ResultStream> {\n return await this.startConnected(async client => {\n const streamSource = await this.resolvePath(source)\n let firstStreamPending = true\n const uploadBodyFactory = async () => {\n if (firstStreamPending) {\n firstStreamPending = false\n return streamSource.stream\n }\n return (await this.resolvePath(source)).stream\n }\n return new UploadJob(\n streamSource.stream,\n streamSource.mimeType,\n streamSource.size,\n source.videoMode,\n params,\n async () => this.session(),\n client,\n this.ctx.requestLogger,\n uploadBodyFactory,\n this.predictionVersion(),\n )\n })\n }\n\n private async loadFrom(source: UrlSource, params: ProcessParams): Promise<ResultStream> {\n if (source.url.startsWith('file://')) {\n return await this.uploadPath({ path: source.url.substring('file://'.length) }, params)\n }\n return await this.startConnected(async client => new LoadFromJob(source.url, params, async () => this.session(), client, this.ctx.requestLogger, this.predictionVersion()))\n }\n\n private async loadFromAssetUuid(source: AssetUuidSource, params: ProcessParams): Promise<ResultStream> {\n return await this.startConnected(async client => new LoadFromAssetUuidJob(source.assetUuid, params, async () => this.session(), client, this.ctx.requestLogger, this.predictionVersion()))\n }\n\n private async loadMediaStream(source: MediaStreamSource, params: ProcessParams): Promise<ResultStream> {\n return await this.startConnected(async client => new LoadMediaStreamJob(source.mediaStream, params, async () => this.session(), client, this.ctx.requestLogger, this.predictionVersion()))\n }\n\n public async reconnect(): Promise<void> {\n if (this.ctx.options.popId == TransientPopId.Transient) {\n await this.getComputeSession()\n if (this.ctx.options.pop) {\n this.setTransientPipelinePop()\n }\n } else if (this.ctx.options.sessionUuid) {\n await this.getComputeSession()\n } else {\n // TODO remove pop id support in 3.16\n await this.startWebApiSessionWithPopId()\n }\n this.ctx.updateState()\n }\n\n private async startWebApiSessionWithPopId(): Promise<void> {\n const client = this.ctx.client()\n if (!client) {\n throw new Error('endpoint not initialized')\n }\n const config_url = `${this.ctx.eyepopWebApiUrl()}/pops/${this.ctx.options.popId}/config?auto_start=false`\n const headers = {\n Authorization: await this.authorizationHeader(),\n }\n this.ctx.updateState(EndpointState.FetchConfig)\n let response = await client.fetch(config_url, { headers: headers })\n if (response.status == 401) {\n this.ctx.requestLogger.debug('GET %s: 401, about to retry with fresh access token', config_url)\n // one retry, the token might have just expired\n this.ctx.forgetCredential()\n const headers = {\n Authorization: await this.authorizationHeader(),\n }\n this.ctx.updateState(EndpointState.FetchConfig)\n response = await client.fetch(config_url, {\n headers: headers,\n })\n }\n\n if (response.status != 200) {\n const message = await response.text()\n if (response.status == 429) {\n this.ctx.updateState(EndpointState.NotAvailable, message)\n } else {\n this.ctx.updateState(EndpointState.Error, message)\n }\n throw new Error(`Unexpected status ${response.status}: ${message}`)\n }\n let config = (await response.json()) as PopConfig\n if (!config.base_url && this.ctx.options.autoStart) {\n const auto_start_config_url = `${this.ctx.eyepopWebApiUrl()}/pops/${this.ctx.options.popId}/config?auto_start=true`\n this.ctx.requestLogger.debug('pop was not running, trying to autostart with: %s', auto_start_config_url)\n // one retry the pop might just have stopped\n const headers = {\n Authorization: await this.authorizationHeader(),\n }\n response = await client.fetch(auto_start_config_url, {\n headers: headers,\n })\n if (response.status != 200) {\n this.ctx.updateState(EndpointState.Error)\n const message = await response.text()\n throw new Error(`Unexpected status ${response.status}: ${message}`)\n }\n config = (await response.json()) as PopConfig\n }\n\n const baseUrl = new URL(config.base_url, this.ctx.eyepopUrl())\n this._baseUrl = baseUrl.toString()\n\n if (this._baseUrl) {\n this._baseUrl = this._baseUrl.replace(/\\/+$/, '')\n this._pipelineId = config.pipeline_id\n this._popName = config.name\n if (!this._pipelineId || !this._baseUrl) {\n throw new Error('Pop not started')\n }\n\n const get_url = `${this._baseUrl}/pipelines/${this._pipelineId}`\n const headers = {\n Authorization: await this.authorizationHeader(),\n }\n let response = await client.fetch(get_url, {\n method: 'GET',\n headers: headers,\n })\n if (response.status > 200) {\n const message = await response.text()\n throw new Error(`Unexpected status ${response.status}: ${message}`)\n }\n this._pipeline = (await response.json()) as Pipeline\n\n if (this.ctx.options.stopJobs) {\n const body = { sourceType: 'NONE' }\n const headers = {\n Authorization: await this.authorizationHeader(),\n 'Content-Type': 'application/json',\n }\n const stop_url = `${this._baseUrl}/pipelines/${this._pipeline.id}/source?mode=preempt&processing=sync`\n let response = await client.fetch(stop_url, {\n method: 'PATCH',\n headers: headers,\n body: JSON.stringify(body),\n })\n if (response.status >= 300) {\n const message = await response.text()\n throw new Error(`Unexpected status ${response.status}: ${message}`)\n }\n }\n }\n }\n\n private static WAIT_FOR_IS_READY: number = 60 * 1000\n\n private sessionReadyTimeoutMs(): number {\n const seconds = this.ctx.options.sessionReadyTimeoutSeconds\n return typeof seconds == 'number' && Number.isFinite(seconds) && seconds > 0 ? seconds * 1000 : SessionBackend.WAIT_FOR_IS_READY\n }\n\n private async getComputeSession(): Promise<void> {\n const client = this.ctx.client()\n if (!client) {\n throw new Error('endpoint not initialized')\n }\n let resolved: ResolvedComputeSession\n try {\n resolved = await new ComputeSessionClient({\n computeUrl: this.ctx.eyepopUrl(),\n httpClient: client,\n authorizationHeader: () => this.computeAuthorizationHeader(),\n sessionUuid: this.ctx.options.sessionUuid,\n sessionName: this.ctx.options.sessionName,\n accountId: this.ctx.options.accountId,\n pipelineImage: this.ctx.options.pipelineImage,\n pipelineVersion: this.ctx.options.pipelineVersion,\n pop: this.ctx.options.pop,\n readyTimeoutMs: this.sessionReadyTimeoutMs(),\n logger: this.ctx.logger,\n requestLogger: this.ctx.requestLogger,\n }).resolve()\n } catch (error) {\n this.ctx.updateState(EndpointState.Error)\n throw error\n }\n this._sessionAccessToken = resolved.accessToken\n this._sessionAccessTokenValidUntil = resolved.accessTokenValidUntil\n this._baseUrl = resolved.session.session_endpoint\n this._accountId = resolved.session.account_uuid || undefined\n this._pipeline = null\n this._pipelineId = resolved.pipelineId\n if (this.ctx.options.pop) {\n this.setTransientPipelinePop()\n }\n }\n\n private async startTransientPipeline(): Promise<string> {\n const client = this.ctx.client()\n const baseUrl = this._baseUrl\n\n if (client == null || baseUrl == null) {\n throw new Error('endpoint not initialized')\n }\n\n let pop: Pop\n if (this.ctx.options.pop) {\n pop = this.ctx.options.pop as Pop\n } else if (this._pipeline && this._pipeline.pop) {\n pop = this._pipeline.pop\n } else {\n throw new Error('Cannot start a transient pipeline without a pop')\n }\n\n const body = {\n pop: pop,\n source: {\n sourceType: 'NONE',\n },\n idleTimeoutSeconds: 30,\n logging: ['out_meta'],\n videoOutput: 'no_output',\n }\n\n const post_url = `${baseUrl.replace(/\\/+$/, '')}/pipelines`\n\n const response = await this.ctx.fetchWithRetry(async () => {\n let headers = {\n Accept: 'application/json',\n 'Content-Type': 'application/json',\n Authorization: await this.authorizationHeader(),\n }\n return client.fetch(post_url, {\n method: 'POST',\n body: JSON.stringify(body),\n headers: headers,\n })\n })\n if (response.status != 200) {\n const message = await response.text()\n throw new Error(`Unexpected status ${response.status} starting transient pipeline: ${message.slice(0, 300)}`)\n }\n const result = await response.json()\n return result['id']\n }\n\n private async ensureTransientPipelineStarted(): Promise<void> {\n if (this.ctx.options.popId != TransientPopId.Transient || this._pipelineId) {\n return\n }\n if (!this.ctx.options.pop) {\n return\n }\n if (!this._baseUrl) {\n await this.reconnect()\n }\n if (this._pipelineId) {\n return\n }\n if (this.ctx.options.pop) {\n await this.reconnect()\n if (!this._pipelineId) {\n throw new Error('Compute session did not provide a pipeline for the requested pop')\n }\n return\n }\n if (!this._pipelineCreatePromise) {\n this._pipelineCreatePromise = this.startTransientPipeline()\n }\n try {\n this._pipelineId = await this._pipelineCreatePromise\n this.setTransientPipelinePop()\n } finally {\n this._pipelineCreatePromise = null\n }\n }\n\n private async changeTransientPop(pop: Pop): Promise<void> {\n if (!this.ctx.client()) {\n throw new Error('endpoint not initialized')\n }\n const previousPop = this.ctx.options.pop\n const previousBaseUrl = this._baseUrl\n const previousSessionAccessToken = this._sessionAccessToken\n const previousSessionAccessTokenValidUntil = this._sessionAccessTokenValidUntil\n if (this._pipelineId) {\n await this.deleteTransientPipeline(this._pipelineId)\n this._pipelineId = null\n }\n this._pipeline = null\n try {\n this.ctx.options.pop = pop\n await this.getComputeSession()\n } catch (error) {\n this.ctx.options.pop = previousPop\n this._pipeline = null\n this._pipelineId = null\n this._baseUrl = previousPop ? null : previousBaseUrl\n this._sessionAccessToken = previousSessionAccessToken\n this._sessionAccessTokenValidUntil = previousSessionAccessTokenValidUntil\n throw error\n }\n if (!this._pipelineId) {\n throw new Error('Compute session did not provide a pipeline for the requested pop')\n }\n this.setTransientPipelinePop()\n }\n\n private async deleteTransientPipeline(pipelineId: string): Promise<void> {\n const client = this.ctx.client()\n if (!client || !this._baseUrl) {\n return\n }\n const deleteUrl = `${this._baseUrl}/pipelines/${pipelineId}`\n const headers = {\n Authorization: await this.authorizationHeader(),\n }\n let response = await client.fetch(deleteUrl, {\n method: 'DELETE',\n headers: headers,\n })\n if (response.status >= 300) {\n const message = await response.text()\n this.ctx.logger.info(`stopping pipeline failed, status ${response.status}: ${message}`)\n }\n }\n\n public async authorizationHeader(): Promise<string> {\n if (this._sessionAccessToken) {\n return `Bearer ${this._sessionAccessToken}`\n }\n return this.ctx.credentialHeader()\n }\n\n private async computeAuthorizationHeader(): Promise<string> {\n const auth = resolveAuth(this.ctx.options)\n if ((auth as LocalAuth | undefined)?.isLocal !== undefined) {\n return 'Implicit'\n }\n const credential = apiKeyCredential(auth) ?? accessTokenCredential(auth)\n if (credential !== undefined) {\n return `Bearer ${credential}`\n }\n return this.ctx.credentialHeader()\n }\n\n private setTransientPipelinePop(): void {\n const pop = this.ctx.options.pop\n if (pop && this._pipelineId) {\n this._pipeline = {\n id: this._pipelineId,\n state: 'idle',\n startTime: new Date().toString(),\n pop: pop,\n }\n }\n }\n}\n","export let createWebSocket: (url: string | URL, protocols?: string | string[]) => WebSocket\n\n/**\n * The pipeline API refused the upgrade: `status` and `retryAfter` (seconds) when the runtime reports\n * them, which a browser never does.\n */\nexport class UpgradeError extends Error {\n readonly status: number | undefined\n readonly retryAfter: number | undefined\n\n constructor(message: string, status?: number, retryAfter?: number) {\n super(message)\n this.name = 'UpgradeError'\n this.status = status\n this.retryAfter = retryAfter\n }\n}\n\n/**\n * Opens a socket to the pipeline API, resolving once it is open. The token goes as the\n * `Authorization` header where the runtime can set one (Node), and otherwise as the\n * `eyepop.bearer.<jwt>` subprotocol next to `protocol`, as a browser cannot set headers.\n */\nexport let openAuthorizedWebSocket: (url: string, protocol: string, token: string | undefined) => Promise<WebSocket>\n\nconst isBrowser = 'document' in globalThis && 'implementation' in globalThis.document\n\nif (isBrowser) {\n createWebSocket = (url: string | URL, protocols?: string | string[]) => {\n return new WebSocket(url, protocols)\n }\n openAuthorizedWebSocket = (url: string, protocol: string, token: string | undefined) => {\n const protocols = token === undefined ? [protocol] : [protocol, `eyepop.bearer.${token}`]\n const ws = new WebSocket(url, protocols)\n ws.binaryType = 'arraybuffer'\n return new Promise((resolve, reject) => {\n ws.onopen = () => resolve(ws)\n ws.onerror = () => reject(new UpgradeError(`could not open ${url}`))\n })\n }\n} else {\n createWebSocket = (url: string | URL, protocols?: string | string[]) => {\n const ws = require('ws')\n return new ws.WebSocket(url, protocols)\n }\n openAuthorizedWebSocket = (url: string, protocol: string, token: string | undefined) => {\n const ws = require('ws')\n const headers = token === undefined ? {} : { Authorization: `Bearer ${token}` }\n const socket = new ws.WebSocket(url, [protocol], { headers, maxPayload: 0 })\n socket.binaryType = 'arraybuffer'\n return new Promise((resolve, reject) => {\n socket.once('open', () => resolve(socket as WebSocket))\n socket.once('unexpected-response', (_request: any, response: any) => {\n const retryAfter = Number.parseFloat(response.headers?.['retry-after'])\n reject(new UpgradeError(`the pipeline API answered the upgrade ${response.statusCode}`, response.statusCode, Number.isFinite(retryAfter) ? retryAfter : undefined))\n response.resume()\n socket.terminate()\n })\n socket.once('error', (error: Error) => reject(new UpgradeError(`could not open ${url}: ${error.message}`)))\n })\n }\n}\n","/**\n * Runs a WorkerEndpoint's jobs on the pipeline API's socket (SDK-27, the Node side of SDK-24).\n *\n * The socket protocol is eyepop-instance spec 019, `contracts/socket.md`: one socket runs its\n * own pipeline and takes commands, `setPop` and `setSource` among them, and streams every\n * source's predictions back under the source's id.\n */\nimport { LocalAuth, resolveAuth } from '../options'\nimport { Prediction } from '../types'\nimport { resolvePath } from '../shims/local_file'\nimport { UpgradeError, openAuthorizedWebSocket } from '../shims/websockets'\nimport { WorkerBackend, WorkerContext, WorkerWork } from './worker_backend'\nimport { WebrtcBase } from './webrtc_base'\nimport { AssetUuidSource, FileSource, MediaStreamSource, PathSource, Pop, ProcessParams, ResultStream, Source, StreamSource, UrlSource, WorkerSession } from './worker_types'\n\nexport const PIPELINE_PATH = '/api/v1/pipeline'\nexport const SUBPROTOCOL = 'eyepop.v1'\n/** A socket may have this many open sources; one more is answered `queue_full`. */\nexport const MAX_OPEN_SOURCES = 256\n/** Uploads up to this size go as one combined message, larger ones in chunks. */\nexport const COMBINED_UPLOAD_MAX_BYTES = 8 * 1024 * 1024\n\nconst CHUNK = 0x01\nconst COMBINED = 0x02\nconst CHUNK_BYTES = 64 * 1024\nconst HEARTBEAT_MS = 20 * 1000\nconst MAX_RETRY_MS = 30 * 1000\n// The closes after which the endpoint opens a new socket at once; after any other close it opens\n// one when the next job or changePop needs it.\nconst RECONNECT_AT_ONCE = new Set(['1008 credential_expired', '1011 overloaded', '1001 shutting_down'])\n// The longest wait before such a reconnect, when one close follows another with no source played between.\nconst MAX_RECONNECT_DELAY_MS = 30 * 1000\n\n/** Why pipeline mode refused its configuration. */\nexport type PipelineConfigurationProblem = 'session_options' | 'job_queue_length' | 'no_pipeline_api_url' | 'insecure_url'\n\n/** Pipeline mode cannot run as configured; `options` names the refused options for `session_options`. */\nexport class PipelineConfigurationError extends Error {\n readonly problem: PipelineConfigurationProblem\n readonly options: string[]\n\n constructor(problem: PipelineConfigurationProblem, message: string, options: string[] = []) {\n super(message)\n this.name = 'PipelineConfigurationError'\n this.problem = problem\n this.options = options\n }\n}\n\n/** A job in flight when the pipeline API's socket closed; the job is not sent again. */\nexport class PipelineSocketClosedError extends Error {\n readonly code: number | undefined\n readonly reason: string\n\n constructor(code: number | undefined, reason: string) {\n super(`the pipeline API closed the socket: ${code ?? ''} ${reason}`.trim())\n this.name = 'PipelineSocketClosedError'\n this.code = code\n this.reason = reason\n }\n}\n\n/** The pipeline API answered a command with an error, for instance `queue_full`. */\nexport class PipelineCommandError extends Error {\n readonly error: string\n readonly detail: string\n\n constructor(error: string, detail: string = '') {\n super(`the pipeline API refused the command: ${error} ${detail}`.trim())\n this.name = 'PipelineCommandError'\n this.error = error\n this.detail = detail\n }\n}\n\n/** A source ended with reason `error` or `preempted` rather than at its end of stream. */\nexport class PipelineSourceError extends Error {\n readonly sourceId: string\n readonly reason: string\n readonly detail: string\n\n constructor(sourceId: string, reason: string, detail: string = '') {\n super(`Error in source ${sourceId}: ${reason} ${detail}`.trim())\n this.name = 'PipelineSourceError'\n this.sourceId = sourceId\n this.reason = reason\n this.detail = detail\n }\n}\n\ntype Message = Record<string, any>\ntype UploadBody = ReadableStream<Uint8Array> | Blob | BufferSource\n\nconst CANCELLED = Symbol('cancelled')\ntype InboxItem = Message | Error | typeof CANCELLED\n\n/** An unbounded queue one consumer awaits. */\nclass Inbox<T> {\n private readonly _items: T[] = []\n private _waiter: ((item: T) => void) | null = null\n\n push(item: T): void {\n const waiter = this._waiter\n if (waiter) {\n this._waiter = null\n waiter(item)\n } else {\n this._items.push(item)\n }\n }\n\n next(): Promise<T> {\n const item = this._items.shift()\n if (item !== undefined) {\n return Promise.resolve(item)\n }\n return new Promise(resolve => (this._waiter = resolve))\n }\n}\n\nclass UploadEnded extends Error {}\n\n/** A chunked upload's credit, granted by the server's `send` and `credit`. */\nclass Credit {\n private _credit = 0\n private _ended = false\n private _waiter: (() => void) | null = null\n\n grant(n: number): void {\n this._credit += n\n this.wake()\n }\n\n end(): void {\n this._ended = true\n this.wake()\n }\n\n async take(most: number): Promise<number> {\n while (this._credit <= 0 && !this._ended) {\n await new Promise<void>(resolve => (this._waiter = resolve))\n }\n if (this._ended) {\n throw new UploadEnded()\n }\n const n = Math.min(most, this._credit)\n this._credit -= n\n return n\n }\n\n private wake(): void {\n const waiter = this._waiter\n this._waiter = null\n waiter?.()\n }\n}\n\n/** A job's source on one socket: the messages for its id, and its chunked uploads by member. */\nclass OpenSource {\n readonly inbox = new Inbox<InboxItem>()\n readonly uploads = new Map<number | null, Credit>()\n\n constructor(readonly id: string) {}\n\n close(error: Error): void {\n this.uploads.forEach(upload => upload.end())\n this.inbox.push(error)\n }\n}\n\n/** One upgraded socket: its open sources and commands by id. */\nclass PipelineSocket {\n readonly sources = new Map<string, OpenSource>()\n readonly commands = new Map<string, { resolve: (m: Message) => void; reject: (e: Error) => void }>()\n readonly closed: Promise<void>\n private _closed = false\n private _markClosed!: () => void\n\n constructor(readonly ws: WebSocket) {\n this.closed = new Promise(resolve => (this._markClosed = resolve))\n }\n\n get open(): boolean {\n return !this._closed && this.ws.readyState === 1\n }\n\n markClosed(): void {\n this._closed = true\n this._markClosed()\n }\n\n sendJson(message: Message): void {\n this.ws.send(JSON.stringify(message))\n }\n\n sendBytes(data: Uint8Array): void {\n this.ws.send(data)\n }\n}\n\n/** One upload member's bytes: a fresh body and its content type, and its size when known. */\ninterface Media {\n readonly open: () => Promise<UploadBody>\n readonly contentType: string\n readonly size: number | undefined\n}\n\n/** A job: one source on the endpoint's socket, its predictions read as an async iterable. */\nexport class PipelineJob implements ResultStream {\n private readonly _results = new Inbox<Prediction | Error | null>()\n private _consumed = false\n private _cancelled = false\n openSource: OpenSource | null = null\n // Stops the job's source on the pipeline, once it was sent.\n stopOnPipeline: (() => void) | null = null\n\n constructor(\n readonly source: Message,\n readonly media: Media[],\n readonly live: boolean,\n readonly params: ProcessParams,\n readonly mediaStream: MediaStream | undefined = undefined,\n ) {}\n\n get cancelled(): boolean {\n return this._cancelled\n }\n\n command(id: string): Message {\n const command: Message = { type: 'setSource', id, ...this.source }\n if (this.params.componentParams !== undefined) {\n command['params'] = this.params.componentParams\n }\n if (this.params.roi !== undefined) {\n command['roi'] = this.params.roi\n }\n if (this.params.camera !== undefined) {\n command['camera'] = this.params.camera\n }\n if (this.params.fps !== undefined) {\n command['fps'] = this.params.fps\n }\n return command\n }\n\n predicted(prediction: Prediction): void {\n if (!this._cancelled) {\n this._results.push(prediction)\n }\n }\n\n finish(error: Error | null = null): void {\n if (error !== null) {\n this._results.push(error)\n }\n this._results.push(null)\n }\n\n cancel(): void {\n if (this._cancelled) {\n return\n }\n this._cancelled = true\n this._results.push(null)\n this.openSource?.inbox.push(CANCELLED)\n // So that a cancelled live source stops on the pipeline instead of running until the socket closes.\n this.stopOnPipeline?.()\n }\n\n async *[Symbol.asyncIterator](): AsyncIterator<Prediction> {\n if (this._consumed) {\n throw new Error('Cannot iterate over a consumed stream')\n }\n this._consumed = true\n while (true) {\n const item = await this._results.next()\n if (item === null) {\n return\n }\n if (item instanceof Error) {\n throw item\n }\n yield item\n }\n }\n}\n\n/** Runs jobs on one socket to the pipeline API, opened when the endpoint connects. */\nexport class PipelineBackend implements WorkerBackend {\n private _pipelineApiUrl: string | null = null\n private _socket: PipelineSocket | null = null\n private _connecting: Promise<PipelineSocket> | null = null\n // Every job's setSource and every changePop goes out through this chain, in the order submitted.\n private _sendChain: Promise<unknown> = Promise.resolve()\n private _disconnecting = false\n private _nextId = 0\n private _currentPop: Pop | null\n private readonly _warned = new Set<string>()\n private _heartbeat: ReturnType<typeof setInterval> | null = null\n // Reconnects at once since a source last played.\n private _reconnects = 0\n\n constructor(private readonly ctx: WorkerContext) {\n this._currentPop = ctx.options.pop ?? null\n }\n\n // Connection\n\n public async reconnect(): Promise<void> {\n this._disconnecting = false\n await this.inOrder(() => this.ensureSocket())\n this.ctx.updateState()\n }\n\n public async disconnect(closeEndpoint: () => Promise<void>): Promise<void> {\n // The endpoint's jobs end first; then the socket, which stops whatever still runs on it.\n await closeEndpoint()\n this._disconnecting = true\n if (this._heartbeat !== null) {\n clearInterval(this._heartbeat)\n this._heartbeat = null\n }\n const socket = this._socket\n this._socket = null\n if (socket !== null) {\n socket.ws.close(1000)\n await socket.closed\n }\n }\n\n public onStatus(_statusCode: number): void {}\n\n public popName(): string | null {\n return null\n }\n\n public async authorizationHeader(): Promise<string> {\n return this.ctx.credentialHeader()\n }\n\n private inOrder<T>(work: () => Promise<T>): Promise<T> {\n const result = this._sendChain.then(work)\n this._sendChain = result.catch(() => undefined)\n return result\n }\n\n /** The open socket, or a new one with the last pop set on it. */\n private async ensureSocket(): Promise<PipelineSocket> {\n if (this._socket !== null && this._socket.open) {\n return this._socket\n }\n if (this._connecting === null) {\n this._connecting = this.openSocket().finally(() => (this._connecting = null))\n }\n return await this._connecting\n }\n\n private async openSocket(): Promise<PipelineSocket> {\n if (this.ctx.client() === null) {\n throw new PipelineSocketClosedError(undefined, 'the endpoint is not connected')\n }\n const ws = await this.upgrade(await this.socketUrl())\n const socket = new PipelineSocket(ws)\n ws.onmessage = (event: MessageEvent) => {\n if (typeof event.data === 'string') {\n try {\n this.dispatch(socket, JSON.parse(event.data))\n } catch (error) {\n this.ctx.logger.warn('unreadable message from the pipeline API: %s', error)\n }\n }\n }\n ws.onerror = () => {}\n ws.onclose = (event: CloseEvent) => this.closed(socket, event.code, event.reason)\n this._socket = socket\n this.startHeartbeat(ws)\n if (this._currentPop !== null) {\n try {\n await this.setPopOn(socket, this._currentPop)\n } catch (error) {\n // A socket whose pipeline does not run the pop runs no job.\n this._socket = null\n ws.close(1000)\n throw error\n }\n }\n return socket\n }\n\n private startHeartbeat(ws: WebSocket): void {\n if (this._heartbeat !== null) {\n clearInterval(this._heartbeat)\n }\n // A ping keeps the connection alive, nothing else; only Node's ws can send one.\n const ping = (ws as any).ping\n if (typeof ping === 'function') {\n this._heartbeat = setInterval(() => {\n if (ws.readyState === 1) {\n ping.call(ws)\n }\n }, HEARTBEAT_MS)\n ;(this._heartbeat as any).unref?.()\n }\n }\n\n private async socketUrl(): Promise<string> {\n if (this._pipelineApiUrl === null) {\n const base = this.ctx.options.isLocalMode ? this.ctx.eyepopUrl() : new URL(await this.configuredPipelineApiUrl(), this.ctx.eyepopUrl() + '/').toString()\n this._pipelineApiUrl = checkedUrl(base)\n }\n return 'ws' + this._pipelineApiUrl.slice('http'.length) + PIPELINE_PATH\n }\n\n private async configuredPipelineApiUrl(): Promise<string> {\n const client = this.ctx.client()\n if (client === null) {\n throw new Error('endpoint not connected')\n }\n let configUrl = `${this.ctx.eyepopUrl()}/v1/configs`\n const accountId = this.ctx.options.accountId\n if (accountId) {\n configUrl += `?account_uuid=${encodeURIComponent(accountId)}`\n }\n const response = await this.ctx.fetchWithRetry(async () => client.fetch(configUrl, { headers: { Authorization: await this.ctx.credentialHeader() } }))\n if (!response.ok) {\n throw new Error(`Unexpected status ${response.status} for GET ${configUrl}: ${await response.text()}`)\n }\n const config = await response.json()\n const url = config?.['pipeline_api_url']\n if (!url) {\n throw new PipelineConfigurationError('no_pipeline_api_url', `${configUrl} has no pipeline_api_url: this compute API serves no pipeline API`)\n }\n return url\n }\n\n private async token(): Promise<string | undefined> {\n if ((resolveAuth(this.ctx.options) as LocalAuth | undefined)?.isLocal !== undefined) {\n return undefined\n }\n return (await this.ctx.credentialHeader()).replace(/^Bearer /, '')\n }\n\n /** Open the socket, waiting through 503 with Retry-After and exchanging the API key again after a 401. */\n private async upgrade(url: string): Promise<WebSocket> {\n const deadline = Date.now() + MAX_RETRY_MS\n let rejected = false\n while (true) {\n try {\n this.ctx.requestLogger.debug('before upgrade %s', url)\n return await openAuthorizedWebSocket(url, SUBPROTOCOL, await this.token())\n } catch (error) {\n if (!(error instanceof UpgradeError)) {\n throw error\n }\n if (error.status === 401 && !rejected) {\n this.ctx.requestLogger.debug('the pipeline API answered 401, authenticating again')\n rejected = true\n this.ctx.forgetCredential()\n continue\n }\n const wait = error.status === 503 && error.retryAfter !== undefined ? Math.max(error.retryAfter, 1) * 1000 : undefined\n if (wait === undefined || Date.now() + wait > deadline) {\n throw error\n }\n this.ctx.requestLogger.info('the pipeline API answered 503, retrying in %d ms', wait)\n await new Promise(resolve => setTimeout(resolve, wait))\n }\n }\n }\n\n private closed(socket: PipelineSocket, code: number | undefined, reason: string): void {\n socket.markClosed()\n if (this._socket === socket) {\n this._socket = null\n }\n const error = new PipelineSocketClosedError(code, reason)\n socket.sources.forEach(source => source.close(error))\n socket.commands.forEach(command => command.reject(error))\n socket.commands.clear()\n if (this._disconnecting) {\n return\n }\n this.ctx.requestLogger.debug('the pipeline API closed the socket: %s %s', code, reason)\n if (RECONNECT_AT_ONCE.has(`${code} ${reason}`)) {\n if (reason === 'credential_expired') {\n this.ctx.forgetCredential()\n }\n // The first reconnect is at once. Should the new socket be closed the same way before a\n // source plays on it, each next one waits twice as long, so a pipeline API that keeps\n // closing is not reconnected to in a loop.\n const delay = this._reconnects === 0 ? 0 : Math.min(1000 * 2 ** (this._reconnects - 1), MAX_RECONNECT_DELAY_MS)\n this._reconnects += 1\n new Promise(resolve => setTimeout(resolve, delay))\n .then(() => (this._disconnecting ? undefined : this.inOrder(() => this.ensureSocket())))\n .catch(error => {\n // The next job or changePop tries again and reports what fails.\n this.ctx.requestLogger.info('could not reopen the pipeline API socket: %s', error)\n })\n }\n }\n\n private dispatch(socket: PipelineSocket, message: Message): void {\n const type = message['type']\n const id = message['id']\n const source = typeof id === 'string' ? socket.sources.get(id) : undefined\n if (type === 'send' || type === 'credit') {\n const upload = source?.uploads.get(message['member'] ?? null)\n upload?.grant(Number(type === 'send' ? message['credit'] : message['bytes']))\n return\n }\n const command = typeof id === 'string' ? socket.commands.get(id) : undefined\n if (command !== undefined) {\n socket.commands.delete(id)\n if (type === 'error') {\n command.reject(new PipelineCommandError(message['error'] ?? '', message['message'] ?? ''))\n } else {\n command.resolve(message)\n }\n return\n }\n if (source !== undefined) {\n if (type === 'start') {\n this._reconnects = 0\n }\n if (type === 'end') {\n source.uploads.forEach(upload => upload.end())\n }\n source.inbox.push(message)\n } else if (type === 'error') {\n if (id === undefined) {\n this.ctx.logger.warn('the pipeline API refused a message: %s %s', message['error'], message['message'])\n } else {\n // A stopSource for a source that ended meanwhile, or one a pipeline API without\n // stopSource does not know: the job ended either way.\n this.ctx.requestLogger.debug('the pipeline API refused a command for %s: %s %s', id, message['error'], message['message'])\n }\n }\n }\n\n private newId(prefix: string): string {\n this._nextId += 1\n return `${prefix}-${this._nextId}`\n }\n\n /** Send a command that is answered by `result` or `error` under its id. */\n private command(socket: PipelineSocket, message: Message): Promise<Message> {\n const id = this.newId(message['type'])\n return new Promise((resolve, reject) => {\n socket.commands.set(id, { resolve, reject })\n socket.sendJson({ ...message, id })\n })\n }\n\n // Pop\n\n public pop(): Pop | null {\n return this._currentPop\n }\n\n /** Set the pop on the socket's pipeline; a pop it refuses rejects, and the last pop it took stays. */\n public async changePop(pop: Pop): Promise<void> {\n if (this.ctx.client() === null) {\n this._currentPop = pop\n return\n }\n await this.inOrder(async () => {\n if (this._socket !== null && this._socket.open) {\n await this.setPopOn(this._socket, pop)\n this._currentPop = pop\n return\n }\n const previous = this._currentPop\n this._currentPop = pop\n try {\n await this.ensureSocket()\n } catch (error) {\n this._currentPop = previous\n throw error\n }\n })\n }\n\n private async setPopOn(socket: PipelineSocket, pop: Pop): Promise<void> {\n await this.command(socket, { type: 'setPop', pop })\n }\n\n // Jobs\n\n public async submit(work: WorkerWork): Promise<ResultStream> {\n if (this.ctx.client() === null) {\n throw new Error('endpoint not connected, use connect()')\n }\n const sourceOptions = work.kind === 'source' ? (work.source as FileSource | StreamSource | PathSource) : undefined\n this.notSent({ motionDetect: work.params.motionDetect, videoMode: sourceOptions?.videoMode, rtspForceNonCompliantUrl: work.params.rtspForceNonCompliantUrl })\n const job = await this.jobOf(work)\n const limit = this.ctx.limit()\n await limit.acquire()\n this.ctx.updateState()\n this.run(job)\n .then(\n () => job.finish(),\n error => job.finish(error instanceof Error ? error : new Error(String(error))),\n )\n .finally(() => this.ctx.jobDone())\n return job\n }\n\n private notSent(options: Record<string, unknown>): void {\n for (const [name, value] of Object.entries(options)) {\n if (value === undefined || this._warned.has(name)) {\n continue\n }\n this._warned.add(name)\n const ticket = name === 'rtspForceNonCompliantUrl' ? '' : ' (AWSU-317)'\n this.ctx.logger.warn(`${name} is not sent to the pipeline API and has no effect in pipeline mode${ticket}`)\n }\n }\n\n private async jobOf(work: WorkerWork): Promise<PipelineJob> {\n switch (work.kind) {\n case 'source':\n return await this.sourceJob(work.source, work.params)\n case 'uploadGroup': {\n const media = await Promise.all(work.paths.map(path => this.pathMedia({ path })))\n return new PipelineJob(uploadGroup(media), media, false, work.params)\n }\n case 'uploadStreamGroup': {\n const media = work.streams.map((stream, i) => bodyMedia(stream, work.mimeTypes?.[i] ?? 'application/octet-stream', undefined))\n return new PipelineJob(uploadGroup(media), media, false, work.params)\n }\n case 'loadFromGroup':\n return new PipelineJob({ group: work.urls.map(url => ({ url })) }, [], false, work.params)\n }\n }\n\n private async sourceJob(source: Source, params: ProcessParams): Promise<PipelineJob> {\n if ((source as FileSource).file !== undefined) {\n const file = (source as FileSource).file\n const media = bodyMedia(file, file.type || 'application/octet-stream', file.size)\n return new PipelineJob({ upload: { contentType: media.contentType } }, [media], false, params)\n } else if ((source as StreamSource).stream !== undefined) {\n const stream = source as StreamSource\n const media = bodyMedia(stream.stream, stream.mimeType, stream.size ?? knownSize(stream.stream))\n return new PipelineJob({ upload: { contentType: media.contentType } }, [media], false, params)\n } else if ((source as PathSource).path !== undefined) {\n const media = await this.pathMedia(source as PathSource)\n return new PipelineJob({ upload: { contentType: media.contentType } }, [media], false, params)\n } else if ((source as UrlSource).url !== undefined) {\n const url = (source as UrlSource).url\n if (url.startsWith('file://')) {\n return await this.sourceJob({ path: url.substring('file://'.length) }, params)\n }\n return new PipelineJob({ url }, [], /^(rtsp|rtmp):\\/\\//.test(url), params)\n } else if ((source as AssetUuidSource).assetUuid !== undefined) {\n return new PipelineJob({ assetUuid: (source as AssetUuidSource).assetUuid }, [], false, params)\n } else if ((source as MediaStreamSource).mediaStream !== undefined) {\n const ingressId = this.newId('whip')\n return new PipelineJob({ whip: { ingressId } }, [], true, params, (source as MediaStreamSource).mediaStream)\n }\n throw new Error('unknown source type')\n }\n\n private async pathMedia(source: PathSource): Promise<Media> {\n const options = this.ctx.options\n const resolve = async () => (options.platformSupport?.resolvePath ? await options.platformSupport.resolvePath(source, this.ctx.logger) : await resolvePath(source, this.ctx.logger))\n const first = await resolve()\n let firstPending = true\n return {\n contentType: first.mimeType,\n size: first.size,\n open: async () => {\n if (firstPending) {\n firstPending = false\n return first.stream\n }\n return (await resolve()).stream\n },\n }\n }\n\n /** Run the job's source to its end; a live source refused overloaded goes once more on a new socket. */\n private async run(job: PipelineJob): Promise<void> {\n let retried = false\n while (true) {\n const sent = await this.inOrder(() => this.setSource(job))\n if (sent === null) {\n return\n }\n const { socket, source } = sent\n const uploading = source.uploads.size > 0 ? this.upload(socket, source, job) : Promise.resolve()\n let whip: SocketWhip | null = null\n let overloaded: boolean\n try {\n overloaded = await this.follow(job, source, () => {\n if (job.mediaStream !== undefined) {\n // A WHIP that fails leaves the live source waiting for media it never gets, so the\n // failure stops it on the pipeline as well as ending the job.\n const fail = (error: unknown) => {\n job.stopOnPipeline?.()\n source.inbox.push(error instanceof Error ? error : new Error(String(error)))\n }\n whip = new SocketWhip(job.mediaStream, job.source['whip']['ingressId'], message => this.command(socket, message), fail, this.ctx.requestLogger)\n whip.start().catch(fail)\n }\n })\n } finally {\n job.openSource = null\n job.stopOnPipeline = null\n socket.sources.delete(source.id)\n source.uploads.forEach(upload => upload.end())\n await uploading\n await (whip as SocketWhip | null)?.close()\n }\n if (!overloaded) {\n return\n }\n if (retried || !job.live) {\n throw new PipelineCommandError('overloaded', 'the pipeline API has no capacity for another live source')\n }\n retried = true\n await socket.closed\n }\n }\n\n /** Send the job's setSource; the caller runs it in submission order. */\n private async setSource(job: PipelineJob): Promise<{ socket: PipelineSocket; source: OpenSource } | null> {\n if (job.cancelled) {\n // Cancelled before its turn: never sent, so it takes no source on the pipeline.\n return null\n }\n const combined = await combinedMedia(job)\n const socket = await this.ensureSocket()\n const source = new OpenSource(this.newId('source'))\n if (combined === null) {\n uploadKeys(job).forEach(key => source.uploads.set(key, new Credit()))\n }\n socket.sources.set(source.id, source)\n job.openSource = source\n job.stopOnPipeline = () => {\n if (socket.open) {\n socket.sendJson({ type: 'stopSource', id: source.id })\n }\n }\n const command = job.command(source.id)\n if (combined === null) {\n socket.sendJson(command)\n } else {\n socket.sendBytes(combinedMessage(command, combined))\n }\n return { socket, source }\n }\n\n /** Hand the source's predictions to the job until it ends; true when the pipeline API was overloaded. */\n private async follow(job: PipelineJob, source: OpenSource, onResult: () => void): Promise<boolean> {\n while (true) {\n if (job.cancelled) {\n return false\n }\n const message = await source.inbox.next()\n if (message === CANCELLED) {\n return false\n }\n if (message instanceof Error) {\n throw message\n }\n switch (message['type']) {\n case 'result':\n onResult()\n break\n case 'prediction':\n job.predicted(message['prediction'] as Prediction)\n break\n case 'end':\n if (message['reason'] === 'eos') {\n return false\n }\n throw new PipelineSourceError(source.id, message['reason'] ?? '', message['message'] ?? '')\n case 'error':\n if (message['error'] === 'overloaded') {\n return true\n }\n throw new PipelineCommandError(message['error'] ?? '', message['message'] ?? '')\n case 'dropped':\n this.ctx.requestLogger.debug('the pipeline API dropped %s predictions of a live source', message['count'])\n break\n }\n }\n }\n\n /** Send each upload member's bytes in chunks within its credit, then its uploaded. */\n private async upload(socket: PipelineSocket, source: OpenSource, job: PipelineJob): Promise<void> {\n const keys = uploadKeys(job)\n try {\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i] as number | null\n const credit = source.uploads.get(key) as Credit\n for await (let piece of pieces(await (job.media[i] as Media).open())) {\n while (piece.length > 0) {\n const n = await credit.take(Math.min(piece.length, CHUNK_BYTES))\n const chunk = new Uint8Array(n + 1)\n chunk[0] = CHUNK\n chunk.set(piece.subarray(0, n), 1)\n socket.sendBytes(chunk)\n piece = piece.subarray(n)\n }\n }\n socket.sendJson(key === null ? { type: 'uploaded', id: source.id } : { type: 'uploaded', id: source.id, member: key })\n }\n } catch (error) {\n if (!(error instanceof UploadEnded)) {\n // The source ended or the socket closed in any other case; the job reports how.\n if (socket.open) {\n source.inbox.push(error instanceof Error ? error : new Error(String(error)))\n }\n }\n }\n }\n\n public async session(): Promise<WorkerSession> {\n const token = await this.token()\n // The token's own expiry, so that a client handed this session knows when it runs out; a\n // local pipeline API takes no token, and an access token given as is has no known expiry.\n const validUntil = token === undefined ? Number.MAX_VALUE : Math.min((await this.ctx.credentialSession()).validUntil, Number.MAX_VALUE)\n return {\n eyepopUrl: this.ctx.eyepopUrl(),\n accessToken: token ?? '',\n validUntil,\n popId: 'transient',\n accountId: this.ctx.options.accountId,\n baseUrl: this._pipelineApiUrl ?? undefined,\n pipelineId: undefined,\n isPipelineMode: true,\n authenticationHeaders: () => (token === undefined ? {} : { Authorization: `Bearer ${token}` }),\n }\n }\n}\n\n/**\n * WHIP signalled over the socket (spec 019): ICE servers, the offer and each local candidate go\n * as `whipIceServers`, `whipOffer` and `whipIce` for the source's ingress; the media goes over WebRTC.\n * A connection that fails is reported through `fail`, since the pipeline only hears no media.\n */\nclass SocketWhip {\n private _pc: RTCPeerConnection | null = null\n private _answered = false\n private _queued: RTCIceCandidate[] = []\n private _offerData: ReturnType<typeof WebrtcBase.parseOffer> | null = null\n\n constructor(\n private readonly _stream: MediaStream,\n private readonly _ingressId: string,\n private readonly _command: (message: Message) => Promise<Message>,\n private readonly _fail: (error: Error) => void,\n private readonly _logger: { debug: (...args: any[]) => void },\n ) {}\n\n async start(): Promise<void> {\n const servers = await this._command({ type: 'whipIceServers', ingressId: this._ingressId })\n const iceServers = (servers['iceServers'] as string[] | undefined) ?? []\n // Only the urls: a TURN server's entry carries its credential.\n this._logger.debug('whip %s: ice servers %j', this._ingressId, iceServers.map(server => server.split(';')[0]))\n const pc = new RTCPeerConnection({ iceServers: WebrtcBase.linkToIceServers(iceServers.join(', ') || null) })\n this._pc = pc\n pc.oniceconnectionstatechange = () => {\n this._logger.debug('whip %s: ice connection %s', this._ingressId, pc.iceConnectionState)\n if (pc.iceConnectionState === 'failed' && this._pc === pc) {\n this._fail(\n new Error(\n `the WebRTC connection of whip ingress ${this._ingressId} failed: no candidate pair connected, ` +\n `so the pipeline API is likely reachable through no STUN or TURN server (ice servers: ${iceServers.length})`,\n ),\n )\n }\n }\n pc.onicecandidate = evt => {\n if (evt.candidate !== null) {\n this.candidate(evt.candidate).catch(error => this._logger.debug('whipIce failed: %s', error))\n }\n }\n this._stream.getTracks().forEach(track => pc.addTrack(track, this._stream))\n const offer = await pc.createOffer()\n if (!offer.sdp) {\n throw new Error('the local offer has no sdp')\n }\n this._offerData = WebrtcBase.parseOffer(offer.sdp)\n await pc.setLocalDescription(offer)\n const answer = await this._command({ type: 'whipOffer', ingressId: this._ingressId, sdp: offer.sdp })\n await pc.setRemoteDescription({ type: 'answer', sdp: answer['sdp'] })\n this._answered = true\n const queued = this._queued\n this._queued = []\n if (queued.length > 0) {\n await this.sendCandidates(queued)\n }\n }\n\n private async candidate(candidate: RTCIceCandidate): Promise<void> {\n if (!this._answered) {\n this._queued.push(candidate)\n return\n }\n await this.sendCandidates([candidate])\n }\n\n private async sendCandidates(candidates: RTCIceCandidate[]): Promise<void> {\n if (this._offerData === null) {\n return\n }\n await this._command({ type: 'whipIce', ingressId: this._ingressId, fragment: WebrtcBase.generateSdpFragment(this._offerData, candidates) })\n }\n\n async close(): Promise<void> {\n this._stream.getTracks().forEach(track => track.stop())\n const pc = this._pc\n this._pc = null\n pc?.close()\n }\n}\n\nfunction checkedUrl(url: string): string {\n const parsed = new URL(url)\n if (parsed.protocol !== 'http:' && parsed.protocol !== 'https:') {\n throw new PipelineConfigurationError('insecure_url', `the pipeline API url ${url} must be an http or https url`)\n }\n if (parsed.protocol === 'http:' && !isLoopback(parsed.hostname)) {\n throw new PipelineConfigurationError('insecure_url', `the pipeline API url ${url} must use https unless its host is a loopback address`)\n }\n return url.replace(/\\/+$/, '')\n}\n\nfunction isLoopback(host: string): boolean {\n return host === 'localhost' || host === '[::1]' || host === '::1' || /^127\\.\\d+\\.\\d+\\.\\d+$/.test(host)\n}\n\nfunction knownSize(body: UploadBody): number | undefined {\n if (typeof Blob !== 'undefined' && body instanceof Blob) {\n return body.size\n }\n if (ArrayBuffer.isView(body) || body instanceof ArrayBuffer) {\n return body.byteLength\n }\n return undefined\n}\n\nfunction bodyMedia(body: UploadBody, contentType: string, size: number | undefined): Media {\n return { open: async () => body, contentType, size: size ?? knownSize(body) }\n}\n\nfunction uploadGroup(media: Media[]): Message {\n return { group: media.map(m => ({ upload: { contentType: m.contentType } })) }\n}\n\n/** The member index of each upload member, or null for a source that is one upload. */\nfunction uploadKeys(job: PipelineJob): Array<number | null> {\n if (job.source['upload'] !== undefined) {\n return [null]\n }\n const group = (job.source['group'] as Message[] | undefined) ?? []\n return group.flatMap((member, i) => (member['upload'] !== undefined ? [i] : []))\n}\n\n/** The upload members' bytes when the job goes as one combined message, else null for chunked. */\nasync function combinedMedia(job: PipelineJob): Promise<Uint8Array[] | null> {\n if (job.media.length === 0 || job.live || job.media.some(m => m.size === undefined)) {\n return null\n }\n if (job.media.reduce((total, m) => total + (m.size ?? 0), 0) > COMBINED_UPLOAD_MAX_BYTES) {\n return null\n }\n const bytes: Uint8Array[] = []\n for (const media of job.media) {\n bytes.push(await readAll(await media.open()))\n }\n return bytes\n}\n\nasync function readAll(body: UploadBody): Promise<Uint8Array> {\n const parts: Uint8Array[] = []\n for await (const piece of pieces(body)) {\n parts.push(piece)\n }\n return concat(parts)\n}\n\nfunction concat(parts: Uint8Array[]): Uint8Array {\n const all = new Uint8Array(parts.reduce((total, p) => total + p.length, 0))\n let offset = 0\n for (const part of parts) {\n all.set(part, offset)\n offset += part.length\n }\n return all\n}\n\nfunction combinedMessage(command: Message, media: Uint8Array[]): Uint8Array {\n if (command['group'] !== undefined) {\n let i = 0\n command = {\n ...command,\n group: (command['group'] as Message[]).map(member => (member['upload'] !== undefined ? { upload: { ...member['upload'], bytes: (media[i++] as Uint8Array).length } } : member)),\n }\n }\n const header = new TextEncoder().encode(JSON.stringify(command))\n const prefix = new Uint8Array(5)\n prefix[0] = COMBINED\n new DataView(prefix.buffer).setUint32(1, header.length, false)\n return concat([prefix, header, ...media])\n}\n\nasync function* pieces(body: UploadBody): AsyncGenerator<Uint8Array> {\n if (typeof Blob !== 'undefined' && body instanceof Blob) {\n yield* pieces(body.stream() as ReadableStream<Uint8Array>)\n } else if (body instanceof ArrayBuffer) {\n yield new Uint8Array(body)\n } else if (ArrayBuffer.isView(body)) {\n yield new Uint8Array(body.buffer, body.byteOffset, body.byteLength)\n } else {\n const reader = (body as ReadableStream<Uint8Array>).getReader()\n try {\n while (true) {\n const { value, done } = await reader.read()\n if (done) {\n return\n }\n if (value !== undefined && value.length > 0) {\n yield value\n }\n }\n } finally {\n reader.releaseLock()\n }\n }\n}\n","import { Endpoint } from '../endpoint'\nimport { WorkerOptions } from '../worker/worker_options'\nimport { ComponentParams, Pop, ProcessParams, ProcessRequest, ResultStream, Source, WorkerSession, validatePop } from '../worker/worker_types'\nimport { validateCamera } from '../camera'\nimport { WorkerBackend, WorkerContext, WorkerWork } from './worker_backend'\nimport { SessionBackend } from './session_backend'\nimport { MAX_OPEN_SOURCES, PipelineBackend, PipelineConfigurationError } from './pipeline_backend'\n\n/**\n * Endpoint to an EyePop.ai worker. Its jobs run on a backend: a worker session by default, or with\n * `isPipelineMode` the pipeline API's socket. The methods are the same either way; a backend that\n * cannot honour an option says so.\n */\nexport class WorkerEndpoint extends Endpoint<WorkerEndpoint> {\n private readonly _backend: WorkerBackend\n\n constructor(options: WorkerOptions) {\n if (options.isPipelineMode) {\n // A socket takes 256 open sources, so that is the most jobs a pipeline mode endpoint holds;\n // a copy, so that the caller's options are left as they were.\n options = { ...options, jobQueueLength: options.jobQueueLength || MAX_OPEN_SOURCES }\n if ((options.jobQueueLength as number) > MAX_OPEN_SOURCES) {\n throw new PipelineConfigurationError('job_queue_length', `jobQueueLength ${options.jobQueueLength} exceeds ${MAX_OPEN_SOURCES}, the open sources a pipeline API socket takes`)\n }\n }\n super(options)\n const context: WorkerContext = {\n options: options,\n logger: this._logger,\n requestLogger: this._requestLogger,\n client: () => this._client,\n limit: () => this._limit,\n jobDone: () => {\n this._limit.release()\n this.updateState()\n },\n updateState: (state, message) => this.updateState(state, message),\n eyepopUrl: () => this.eyepopUrl(),\n eyepopWebApiUrl: () => this.eyepopWebApiUrl(),\n credentialHeader: () => super.authorizationHeader(),\n forgetCredential: () => this.statusHandler401(401),\n fetchWithRetry: (fetcher, retries) => this.fetchWithRetry(fetcher, retries),\n credentialSession: () => super.session(),\n }\n this._backend = options.isPipelineMode ? new PipelineBackend(context) : new SessionBackend(context)\n this.setStatusRetryHandlers(new Map<number, Function>([[404, (statusCode: number) => this._backend.onStatus(statusCode)]]))\n }\n\n private options(): WorkerOptions {\n return this._options as WorkerOptions\n }\n\n /** What runs this endpoint's jobs. */\n public backend(): WorkerBackend {\n return this._backend\n }\n\n public override async disconnect(wait: boolean = true): Promise<void> {\n await this._backend.disconnect(() => super.disconnect(wait))\n }\n\n public override async session(): Promise<WorkerSession> {\n return await this._backend.session()\n }\n\n public popName(): string | null {\n return this._backend.popName()\n }\n\n public pop(): Pop | null {\n return this._backend.pop()\n }\n\n public async changePop(pop: Pop): Promise<void> {\n // locally, so a Pop that cannot mean what it says fails here rather\n // than as a 400 from the worker that compiles it\n validatePop(pop)\n await this._backend.changePop(pop)\n }\n\n /**\n * @deprecated Pop ids are only retained for backwards compatibility.\n * Configure transient sessions with `WorkerOptions.pop`.\n */\n public popId(): string | null {\n return this.options().popId || null\n }\n\n /**\n * V1 call to process media as a source with optional component params\n *\n * @deprecated use V2 call process() with named parameters\n * @param source\n * @param params\n */\n public async process(source: Source, params?: ComponentParams[]): Promise<ResultStream>\n\n /**\n * V2 call to process media as a source with extensible named parameters\n *\n * @param source\n * @param componentParams\n * @param motionDetect\n * @param roi\n */\n public async process({ source, componentParams, motionDetect, roi }: ProcessRequest): Promise<ResultStream>\n\n public async process(param1: any, param2?: any): Promise<ResultStream> {\n if ((param1 as ProcessRequest).source !== undefined) {\n const request = param1 as ProcessRequest\n this.validateProcessParams(request)\n return await this.submit({ kind: 'source', source: request.source, params: request })\n } else {\n return await this.submit({ kind: 'source', source: param1 as Source, params: { componentParams: param2 } })\n }\n }\n\n /**\n * Reject a source's calibration before any work is started for it.\n *\n * Called by every entry point that takes ProcessParams, before the\n * concurrency limit is acquired, so a request that can never be sent\n * does not hold a slot.\n */\n private validateProcessParams(params: ProcessParams): void {\n if (params.camera !== undefined) {\n validateCamera(params.camera)\n }\n }\n\n public async uploadGroup(paths: string[], params: ProcessParams = {}): Promise<ResultStream> {\n if (paths.length === 0) {\n throw new Error('upload group requires at least one path')\n }\n this.validateProcessParams(params)\n return await this.submit({ kind: 'uploadGroup', paths, params })\n }\n\n public async uploadStreamGroup(streams: Array<ReadableStream<Uint8Array> | Blob | BufferSource>, mimeTypes?: string[], params: ProcessParams = {}): Promise<ResultStream> {\n if (streams.length === 0) {\n throw new Error('upload stream group requires at least one stream')\n }\n if (mimeTypes !== undefined && mimeTypes.length !== streams.length) {\n throw new Error('mimeTypes must have the same length as streams')\n }\n this.validateProcessParams(params)\n return await this.submit({ kind: 'uploadStreamGroup', streams, mimeTypes, params })\n }\n\n public async loadFromGroup(urls: string[], params: ProcessParams = {}): Promise<ResultStream> {\n if (urls.length === 0) {\n throw new Error('load from group requires at least one url')\n }\n this.validateProcessParams(params)\n return await this.submit({ kind: 'loadFromGroup', urls, params })\n }\n\n private async submit(work: WorkerWork): Promise<ResultStream> {\n return await this._backend.submit(work)\n }\n\n protected override async reconnect(): Promise<WorkerEndpoint> {\n await this._backend.reconnect()\n return this\n }\n\n protected override async authorizationHeader(): Promise<string> {\n return await this._backend.authorizationHeader()\n }\n}\n","import { SessionAuth, resolveAuth } from '../options'\nimport { EndpointState } from '../types'\nimport { createWebSocket } from '../shims/websockets'\nimport { Endpoint } from '../endpoint'\nimport urljoin from 'url-join'\nimport { DataOptions } from './data_options'\nimport {\n Annotation,\n AnnotationInclusionMode,\n ArtifactType,\n Asset,\n AssetImport,\n AssetInclusionMode,\n AssetUrlType,\n AutoAnnotate,\n AutoAnnotateParams,\n AutoPromptConfig,\n AutoTask,\n ChangeEvent,\n ChangeType,\n CreateWorkflow,\n DataApiType,\n DataSession,\n Dataset,\n DatasetAutoAnnotate,\n DatasetAutoAnnotateCreate,\n DatasetAutoAnnotateUpdate,\n DatasetCreate,\n DatasetHeroAssetUpdate,\n DatasetUpdate,\n DownloadResponse,\n EvaluateRequest,\n ExportedBy,\n getBaseUrl,\n InferRequest,\n ListWorkFlowItem,\n Model,\n ModelCreate,\n ModelFormat,\n ModelTrainingProgress,\n ModelUpdate,\n OnChangeEvent,\n QcAiHubExportParams,\n Roi,\n TranscodeMode,\n UserReview,\n VlmAbility,\n VlmAbilityCreate,\n VlmAbilityGroup,\n VlmAbilityGroupCreate,\n VlmAbilityGroupUpdate,\n VlmAbilityUpdate,\n AliasResolution,\n Workflow,\n WorkflowPhase,\n} from './data_types'\nimport { Prediction } from '@eyepop.ai/eyepop'\nimport { EvaluateDatasetJob, InferAssetJob } from './jobs'\n\ninterface DataConfig {\n dataset_api_url: string\n vlm_api_url: string\n}\n\nconst WS_INITIAL_RECONNECT_DELAY = 1000\nconst WS_MAX_RECONNECT_DELAY = 60000\n\nfunction ws_origin(url: string): string {\n try {\n return new URL(url).origin\n } catch {\n return url\n }\n}\n\nfunction ws_failure_reason(event: unknown, sourceError: unknown): string {\n if (sourceError instanceof Error) {\n return sourceError.message\n }\n if (typeof sourceError === 'string') {\n return sourceError\n }\n return (event as { message?: string })?.message ?? ''\n}\n\nexport class EyePopDataWebSocketError extends Error {\n readonly code = 'DATA_WEBSOCKET_CONNECTION_FAILED'\n readonly endpoint: string\n readonly sourceError: unknown\n\n constructor(url: string, event: unknown) {\n const sourceError = (event as { error?: unknown })?.error ?? event\n const reason = ws_failure_reason(event, sourceError)\n super(reason ? `EyePop Dataset event WebSocket connection failed: ${reason}` : 'EyePop Dataset event WebSocket connection failed')\n this.name = 'EyePopDataWebSocketError'\n this.endpoint = ws_origin(url)\n this.sourceError = sourceError\n }\n}\n\nfunction omit_nulls(_: any, value: any) {\n if (value === null) {\n return undefined\n }\n return value\n}\n\nexport class DataEndpoint extends Endpoint<DataEndpoint> {\n private datasetApiUrl: string | null\n private vlmApiUrl: string | null\n private _accountId: string | null\n\n private _ws: WebSocket | null\n private _ws_current_reconnect_delay: number | null\n private _ws_reconnect_timeout: ReturnType<typeof setTimeout> | null\n private _ws_reconnect_enabled: boolean\n private _ws_connecting: Promise<void> | null\n\n private _account_event_handlers: OnChangeEvent[]\n private _dataset_uuid_to_event_handlers: Map<string, OnChangeEvent[]>\n\n constructor(options: DataOptions) {\n super(options)\n this.datasetApiUrl = null\n this.vlmApiUrl = null\n this._ws = null\n this._ws_current_reconnect_delay = null\n this._ws_reconnect_timeout = null\n this._ws_reconnect_enabled = false\n this._ws_connecting = null\n this._accountId = options.accountId || null\n this._account_event_handlers = []\n this._dataset_uuid_to_event_handlers = new Map<string, OnChangeEvent[]>()\n const sessionAuth = resolveAuth(options) as SessionAuth | undefined\n if (sessionAuth?.session !== undefined) {\n const dataSession = sessionAuth.session as DataSession\n if (dataSession.accountId) {\n this._accountId = dataSession.accountId\n }\n }\n }\n\n public override async session(): Promise<DataSession> {\n const session = await super.session()\n return {\n eyepopUrl: session.eyepopUrl,\n accessToken: session.accessToken,\n validUntil: session.validUntil,\n accountId: this.options().accountId as string,\n datasetApiUrl: this.datasetApiUrl as string,\n vlmApiUrl: this.vlmApiUrl as string,\n }\n }\n\n public override async disconnect(wait: boolean = true): Promise<void> {\n this._ws_reconnect_enabled = false\n if (this._ws_reconnect_timeout) {\n clearTimeout(this._ws_reconnect_timeout)\n this._ws_reconnect_timeout = null\n }\n this.datasetApiUrl = null\n this.vlmApiUrl = null\n if (this._ws) {\n this.close_ws(this._ws, 'unsubscribe')\n this._ws = null\n }\n await super.disconnect(wait)\n }\n\n protected override async reconnect(): Promise<DataEndpoint> {\n if (!this._client) {\n return Promise.reject('endpoint not initialized')\n }\n const accountUuidQuery = this._accountId ? `?account_uuid=${this._accountId}` : ''\n const config_url = `${this.eyepopUrl()}/v1/configs${accountUuidQuery}`\n let headers = {\n Authorization: await this.authorizationHeader(),\n }\n this.updateState(EndpointState.FetchConfig)\n let response = await this._client.fetch(config_url, { headers: headers })\n if (response.status == 401) {\n this._requestLogger.debug('GET %s: 401, about to retry with fresh access token', config_url)\n // one retry, the token might have just expired\n this.statusHandler401(response.status)\n headers = {\n Authorization: await this.authorizationHeader(),\n }\n this.updateState(EndpointState.FetchConfig)\n response = await this._client.fetch(config_url, {\n headers: headers,\n })\n }\n\n if (response.status != 200) {\n this.updateState(EndpointState.Error)\n const message = await response.text()\n return Promise.reject(`Unexpected status ${response.status} for ${config_url}: ${message}`)\n }\n let config = (await response.json()) as DataConfig\n\n const datasetApiUrl = new URL(config.dataset_api_url, this.eyepopUrl())\n this.datasetApiUrl = datasetApiUrl.toString()\n const vlmApiUrl = new URL(config.vlm_api_url, this.eyepopUrl())\n this.vlmApiUrl = vlmApiUrl.toString()\n\n if (this.options().disableWs) {\n this._ws_reconnect_enabled = false\n this._logger.info('disabled ws connection')\n } else {\n await this.reconnect_ws()\n }\n\n if (this.options().useCookie) {\n const client = this._client\n const url = urljoin(this.datasetApiUrl, 'security', 'check?set_cookie=true')\n const headers = {\n Authorization: await this.authorizationHeader(),\n }\n response = await client.fetch(url, {\n headers: headers,\n })\n if (response.status != 204) {\n this.updateState(EndpointState.Error)\n const message = await response.text()\n return Promise.reject(`Unexpected status ${response.status}: ${message}`)\n }\n }\n\n this.updateState()\n return Promise.resolve(this)\n }\n\n private async reconnect_ws(): Promise<void> {\n if (this._ws_connecting) {\n return this._ws_connecting\n }\n const connecting = this.open_ws()\n this._ws_connecting = connecting\n try {\n await connecting\n } finally {\n this._ws_connecting = null\n }\n }\n\n private async open_ws(): Promise<void> {\n if (this._ws) {\n this.close_ws(this._ws, 'unsubscribe')\n this._ws = null\n }\n const baseUrl = this.datasetApiUrl?.replace('https://', 'wss://').replace('http://', 'ws://')\n if (!baseUrl) {\n return\n }\n const ws_url = urljoin(baseUrl, 'events')\n this._requestLogger.debug('about to connect ws to: %s', ws_url)\n return new Promise((resolve, reject) => {\n let settled = false\n const settle_ok = () => {\n settled = true\n resolve()\n }\n const settle_err = (error: unknown) => {\n settled = true\n reject(error)\n }\n\n const ws = createWebSocket(ws_url)\n if (!ws) {\n return settle_ok()\n }\n this._ws = ws\n\n ws.onopen = () => {\n void this.authorizationHeader()\n .then(auth_header => {\n if (this._ws !== ws) {\n this.close_ws(ws, 'unsubscribe')\n settle_ok()\n return\n }\n let msg = JSON.stringify({ authorization: auth_header })\n this._requestLogger.debug('ws send: %s', msg)\n ws.send(msg)\n msg = JSON.stringify({ subscribe: { account_uuid: this._accountId } })\n this._requestLogger.debug('ws send: %s', msg)\n ws.send(msg)\n for (const dataset_uuid of this._dataset_uuid_to_event_handlers.keys()) {\n const msg = JSON.stringify({ subscribe: { dataset_uuid: dataset_uuid } })\n this._requestLogger.debug('ws send: %s', msg)\n ws.send(msg)\n }\n this._ws_current_reconnect_delay = WS_INITIAL_RECONNECT_DELAY\n // enabling here rather than before connecting keeps a rejected connect()\n // from leaving a reconnect timer behind for a caller that already gave up\n this._ws_reconnect_enabled = true\n settle_ok()\n })\n .catch(error => {\n this.close_ws(ws, 'authorization failed', 1011)\n settle_err(error)\n })\n }\n\n ws.onmessage = event => {\n const data = JSON.parse(event.data)\n this._requestLogger.debug('received ws: %s', JSON.stringify(data))\n const change_event = data as ChangeEvent\n this.dispatchChangeEvent(change_event)\n }\n\n ws.onclose = (event: CloseEvent) => {\n const { code, reason } = event\n this._requestLogger.debug('ws closed: %d %s', code, reason)\n if (!settled) {\n settle_err(new EyePopDataWebSocketError(ws_url, new Error(`closed before the connection was established: ${code} ${reason}`)))\n }\n if (this._ws !== ws) {\n return\n }\n this._ws = null\n this.schedule_ws_reconnect()\n }\n\n ws.onerror = (event: Event): any => {\n const error = new EyePopDataWebSocketError(ws_url, event)\n this._logger.error({ err: error }, 'dataset event WebSocket connection failed')\n settle_err(error)\n return null\n }\n })\n }\n\n private close_ws(ws: WebSocket, reason: string, code: number = 1000): void {\n try {\n ws.close(code, reason)\n } catch (e) {\n this._logger.warn({ err: e }, 'ignored exception closing the dataset event WebSocket')\n }\n }\n\n private schedule_ws_reconnect(): void {\n if (!this._ws_reconnect_enabled || this._ws_reconnect_timeout) {\n return\n }\n if (!this._ws_current_reconnect_delay) {\n this._ws_current_reconnect_delay = WS_INITIAL_RECONNECT_DELAY\n } else if (this._ws_current_reconnect_delay < WS_MAX_RECONNECT_DELAY) {\n this._ws_current_reconnect_delay *= 1.5\n }\n this._ws_reconnect_timeout = setTimeout(() => {\n if (!this._ws_reconnect_enabled) {\n this._ws_reconnect_timeout = null\n return\n }\n void this.reconnect_ws()\n .catch(error => {\n this._requestLogger.debug('dataset event WebSocket reconnect failed: %s', error)\n })\n .finally(() => {\n this._ws_reconnect_timeout = null\n if (!this._ws) {\n this.schedule_ws_reconnect()\n }\n })\n }, this._ws_current_reconnect_delay)\n }\n\n private options(): DataOptions {\n return this._options as DataOptions\n }\n\n private async request(path: string, options: RequestInit = {}, disableAuth: boolean = false, dataApiType: DataApiType = DataApiType.dataset) {\n const client = this._client\n if (!client) {\n return Promise.reject('endpoint not connected')\n }\n let response = await this.fetchWithRetry(async () => {\n const session = await this.session()\n\n const baseUrl = getBaseUrl(session, dataApiType)\n const headers = {\n ...(disableAuth ? {} : { Authorization: `Bearer ${session.accessToken}` }),\n ...(options.headers || {}),\n }\n\n if (!options.body) {\n options.body = null\n }\n\n const ri = {\n headers: headers,\n method: options.method || 'GET',\n body: options.body,\n }\n this._requestLogger.debug('Request - ' + ri.method + ' ' + path + ' BODY: ' + (ri.body ? ri.body : ''))\n\n return await client.fetch(urljoin(baseUrl ?? '', path), ri)\n })\n\n if (response.status === 204) {\n return null // Return null if the response is completely empty\n }\n\n const contentType = response.headers.get('Content-Type')\n this._requestLogger.debug('Response - ' + response.status + ' ' + response.statusText)\n\n if (!response.ok) {\n if (contentType && (contentType.toLowerCase().startsWith('application/json') || contentType.toLowerCase().startsWith('text/'))) {\n throw new Error(`Request failed with ${response.status} ${response.statusText}: ${await response.text()}`)\n } else {\n throw new Error(`Request failed with ${response.status} ${response.statusText}`)\n }\n }\n\n if (contentType && contentType.toLowerCase().startsWith('application/json')) {\n return await response.json()\n }\n\n return await response.blob()\n }\n\n async listDatasets(include_stats: boolean = true, modifiable_version_only?: boolean): Promise<Dataset[]> {\n const modifiableVersionQuery = typeof modifiable_version_only !== 'undefined' ? `&modifiable_version_only=${modifiable_version_only}` : ''\n return this.request(`/datasets?account_uuid=${this._accountId}&include_stats=${include_stats}${modifiableVersionQuery}`, {\n method: 'GET',\n })\n }\n\n async createDataset(data: DatasetCreate): Promise<Dataset> {\n return this.request(`/datasets?account_uuid=${this._accountId}`, {\n method: 'POST',\n body: JSON.stringify(data),\n headers: { 'Content-Type': 'application/json' },\n })\n }\n\n async getDataset(dataset_uuid: string, include_stats: boolean = true, dataset_version?: number, modifiable_version_only?: boolean): Promise<Dataset> {\n const versionQuery = dataset_version ? `&dataset_version=${dataset_version}` : ''\n const modifiableVersionQuery = typeof modifiable_version_only !== 'undefined' ? `&modifiable_version_only=${modifiable_version_only}` : ''\n return this.request(`/datasets/${dataset_uuid}?include_stats=${include_stats}${versionQuery}${modifiableVersionQuery}`, {\n method: 'GET',\n })\n }\n\n async updateDataset(dataset_uuid: string, data: DatasetUpdate, start_auto_annotate: boolean = true): Promise<Dataset> {\n return this.request(`/datasets/${dataset_uuid}?start_auto_annotate=${start_auto_annotate}`, {\n method: 'PATCH',\n body: JSON.stringify(data),\n headers: { 'Content-Type': 'application/json' },\n })\n }\n\n async updateDatasetHeroAsset(dataset_uuid: string, update: DatasetHeroAssetUpdate): Promise<Dataset> {\n return this.request(`/datasets/${dataset_uuid}/hero_asset`, {\n method: 'PATCH',\n body: JSON.stringify(update),\n headers: { 'Content-Type': 'application/json' },\n })\n }\n\n async deleteDataset(dataset_uuid: string): Promise<void> {\n return this.request(`/datasets/${dataset_uuid}`, {\n method: 'DELETE',\n })\n }\n\n async freezeDatasetVersion(dataset_uuid: string, dataset_version?: number): Promise<Dataset> {\n const versionQuery = dataset_version ? `&dataset_version=${dataset_version}` : ''\n return this.request(`/datasets/${dataset_uuid}/freeze?${versionQuery}`, {\n method: 'POST',\n })\n }\n\n async analyzeDatasetVersion(dataset_uuid: string, dataset_version?: number): Promise<void> {\n const versionQuery = dataset_version ? `&dataset_version=${dataset_version}` : ''\n return this.request(`/datasets/${dataset_uuid}/analyze?${versionQuery}`, {\n method: 'POST',\n })\n }\n\n async autoAnnotateDatasetVersion(dataset_uuid: string, dataset_version?: number, max_assets?: number): Promise<void> {\n const versionQuery = dataset_version ? `&dataset_version=${dataset_version}` : ''\n const maxAssetsQuery = max_assets ? `&max_assets=${max_assets}` : ''\n return this.request(`/datasets/${dataset_uuid}/auto_annotate?${versionQuery}${maxAssetsQuery}`, {\n method: 'POST',\n })\n }\n\n async deleteDatasetVersion(dataset_uuid: string, dataset_version: number): Promise<Dataset> {\n return this.request(`/datasets/${dataset_uuid}/versions?dataset_version=${dataset_version}`, {\n method: 'DELETE',\n })\n }\n\n async deleteAnnotations(dataset_uuid: string, dataset_version: number, user_reviews: UserReview[] = [UserReview.unknown]): Promise<void> {\n let userReviewsQuery = ''\n for (let userReview in user_reviews) {\n userReviewsQuery += `&user_review=${userReview}`\n }\n await this.request(`/datasets/${dataset_uuid}/annotations?dataset_version=${dataset_version}${userReviewsQuery}`, {\n method: 'DELETE',\n })\n }\n\n async createDatasetAutoAnnotate(create: DatasetAutoAnnotateCreate, dataset_uuid: string, dataset_version?: number): Promise<void> {\n const versionQuery = dataset_version ? `dataset_version=${dataset_version}&` : ''\n return this.request(`/datasets/${dataset_uuid}/auto_annotates?${versionQuery}`, {\n method: 'POST',\n body: JSON.stringify(create),\n headers: { 'Content-Type': 'application/json' },\n })\n }\n\n async updateDatasetAutoAnnotate(update: DatasetAutoAnnotateUpdate, dataset_uuid: string, auto_annotate: string, source: string, dataset_version?: number): Promise<void> {\n const versionQuery = dataset_version ? `dataset_version=${dataset_version}&` : ''\n return this.request(`/datasets/${dataset_uuid}/auto_annotates?auto_annotate=${auto_annotate}&source=${encodeURIComponent(source)}&${versionQuery}`, {\n method: 'PATCH',\n body: JSON.stringify(update),\n headers: { 'Content-Type': 'application/json' },\n })\n }\n\n async listDatasetAutoAnnotates(dataset_uuid: string, auto_annotate?: string, source?: string, dataset_version?: number): Promise<DatasetAutoAnnotate[]> {\n const versionQuery = dataset_version ? `dataset_version=${dataset_version}&` : ''\n const autoAnnotateQuery = auto_annotate ? `auto_annotate=${auto_annotate}&` : ''\n const sourceQuery = source ? `source=${source}&` : ''\n return this.request(`/datasets/${dataset_uuid}/auto_annotates?${versionQuery}&${autoAnnotateQuery}&${sourceQuery}`, {\n method: 'GET',\n })\n }\n\n // Asset methods\n async uploadAsset(dataset_uuid: string, dataset_version: number | undefined, blob: Blob, external_id: string | undefined = undefined): Promise<Asset> {\n const versionQuery = dataset_version ? `&dataset_version=${dataset_version}` : ''\n let post_path: string\n if (external_id) {\n post_path = `/assets?dataset_uuid=${dataset_uuid}${versionQuery}&external_id=${external_id}`\n } else {\n post_path = `/assets?dataset_uuid=${dataset_uuid}${versionQuery}`\n }\n\n return this.request(post_path, {\n method: 'POST',\n body: blob,\n headers: {\n 'Content-Type': blob.type || 'application/octet-stream',\n },\n })\n }\n\n async importAsset(dataset_uuid: string, dataset_version: number | undefined, asset_import: AssetImport, external_id: string | undefined = undefined): Promise<Asset> {\n const versionQuery = dataset_version ? `&dataset_version=${dataset_version}` : ''\n let post_path: string\n if (external_id) {\n post_path = `/assets/imports?dataset_uuid=${dataset_uuid}${versionQuery}&external_id=${external_id}`\n } else {\n post_path = `/assets/imports?dataset_uuid=${dataset_uuid}${versionQuery}`\n }\n\n return this.request(post_path, {\n method: 'POST',\n body: JSON.stringify(asset_import),\n headers: {\n 'Content-Type': 'application/json',\n },\n })\n }\n\n async listAssets(\n dataset_uuid: string,\n dataset_version?: number,\n include_annotations: boolean = false,\n top_k?: number,\n inclusion_mode?: AssetInclusionMode,\n annotation_inclusion_mode?: AnnotationInclusionMode,\n include_partitions?: string[],\n include_auto_annotates?: AutoAnnotate[],\n include_sources?: string[],\n ): Promise<Asset[]> {\n const params = new URLSearchParams()\n params.set('dataset_uuid', dataset_uuid)\n if (dataset_version != null) params.set('dataset_version', String(dataset_version))\n if (include_annotations) params.set('include_annotations', 'true')\n if (inclusion_mode != null) params.set('inclusion_mode', inclusion_mode)\n if (annotation_inclusion_mode != null) params.set('annotation_inclusion_mode', annotation_inclusion_mode)\n for (const p of include_partitions ?? []) params.append('include_partition', p)\n for (const a of include_auto_annotates ?? []) params.append('include_auto_annotate', a)\n for (const s of include_sources ?? []) params.append('include_source', s)\n if (top_k != null) params.set('top_k', String(top_k))\n return this.request(`/assets?${params.toString()}`, {\n method: 'GET',\n })\n }\n\n async getAsset(asset_uuid: string, dataset_uuid?: string, dataset_version?: number, include_annotations: boolean = false, top_k?: number): Promise<Asset> {\n const versionQuery = dataset_version ? `&dataset_version=${dataset_version}` : ''\n const annotationsQuery = include_annotations ? '&include_annotations=true' : ''\n const datasetQuery = dataset_uuid ? `&dataset_uuid=${dataset_uuid}` : ''\n const topKQuery = top_k ? `&top_k=${top_k}` : ''\n return this.request(`/assets/${asset_uuid}?${datasetQuery}${versionQuery}${annotationsQuery}${topKQuery}`, {\n method: 'GET',\n })\n }\n\n async deleteAsset(asset_uuid: string, dataset_uuid?: string, dataset_version?: number): Promise<void> {\n const versionQuery = dataset_version ? `&dataset_version=${dataset_version}` : ''\n const datasetQuery = dataset_uuid ? `&dataset_uuid=${dataset_uuid}` : ''\n return this.request(`/assets/${asset_uuid}?${datasetQuery}${versionQuery}`, {\n method: 'DELETE',\n })\n }\n\n async resurrectAsset(asset_uuid: string, dataset_uuid: string, from_dataset_version: number, into_dataset_version?: number): Promise<void> {\n const intoVersionQuery = into_dataset_version ? `&into_dataset_version=${into_dataset_version}` : ''\n return this.request(`/assets/${asset_uuid}/resurrect?dataset_uuid=${dataset_uuid}&from_dataset_version=${from_dataset_version}${intoVersionQuery}`, {\n method: 'POST',\n })\n }\n\n async updateAssetGroundTruth(asset_uuid: string, dataset_uuid?: string, dataset_version?: number, predictions?: Prediction[]): Promise<void> {\n const versionQuery = dataset_version ? `&dataset_version=${dataset_version}` : ''\n const datasetQuery = dataset_uuid ? `&dataset_uuid=${dataset_uuid}` : ''\n return this.request(`/assets/${asset_uuid}/ground_truth?${datasetQuery}${versionQuery}`, {\n method: 'PATCH',\n body: JSON.stringify(predictions),\n headers: { 'Content-Type': 'application/json' },\n })\n }\n\n async deleteAssetGroundTruth(asset_uuid: string, dataset_uuid?: string, dataset_version?: number): Promise<void> {\n const versionQuery = dataset_version ? `&dataset_version=${dataset_version}` : ''\n const datasetQuery = dataset_uuid ? `&dataset_uuid=${dataset_uuid}` : ''\n return this.request(`/assets/${asset_uuid}/ground_truth?${datasetQuery}${versionQuery}`, {\n method: 'DELETE',\n })\n }\n\n async updateAutoAnnotationStatus(asset_uuid: string, auto_annotate: string, user_review: UserReview, approved_threshold?: number): Promise<void> {\n const validStatuses = ['approved', 'rejected', 'unknown']\n if (!validStatuses.includes(user_review)) {\n throw new Error('Invalid status')\n }\n const thresholdQuery = approved_threshold ? `?approved_threshold=${approved_threshold}` : ''\n return this.request(`/assets/${asset_uuid}/auto_annotations/${auto_annotate}/user_review/${user_review}${thresholdQuery}`, {\n method: 'PATCH',\n })\n }\n\n async addAssetAnnotation(\n asset_uuid: string,\n dataset_uuid?: string,\n dataset_version?: number,\n predictions?: Prediction[],\n auto_annotate?: string,\n source?: string,\n user_review?: UserReview,\n approved_threshold?: number,\n ): Promise<void> {\n const datasetQuery = dataset_uuid ? `dataset_uuid=${dataset_uuid}&` : ''\n const versionQuery = dataset_version ? `&dataset_version=${dataset_version}&` : ''\n const autoAnnotateQuery = auto_annotate ? `&auto_annotate=${auto_annotate}&` : ''\n const sourceQuery = source ? `&source=${encodeURIComponent(source)}&` : ''\n const userReviewQuery = user_review ? `&user_review=${user_review}&` : ''\n const approvedThresholdQuery = typeof approved_threshold !== 'undefined' ? `&approved_threshold=${approved_threshold}&` : ''\n return this.request(`/assets/${asset_uuid}/annotations?${datasetQuery}${versionQuery}${autoAnnotateQuery}${sourceQuery}${userReviewQuery}${approvedThresholdQuery}`, {\n method: 'POST',\n body: JSON.stringify(predictions),\n headers: { 'Content-Type': 'application/json' },\n })\n }\n\n async updateAssetAnnotationApproval(\n asset_uuid: string,\n dataset_uuid?: string,\n dataset_version?: number,\n auto_annotate?: string,\n source?: string,\n user_review?: UserReview,\n approved_threshold?: number,\n ): Promise<void> {\n const datasetQuery = dataset_uuid ? `dataset_uuid=${dataset_uuid}&` : ''\n const versionQuery = dataset_version ? `&dataset_version=${dataset_version}&` : ''\n const autoAnnotateQuery = auto_annotate ? `&auto_annotate=${auto_annotate}&` : ''\n const sourceQuery = source ? `&source=${encodeURIComponent(source)}&` : ''\n const userReviewQuery = user_review ? `&user_review=${user_review}&` : ''\n const approvedThresholdQuery = approved_threshold ? `&approved_threshold=${approved_threshold}&` : ''\n return this.request(`/assets/${asset_uuid}/annotations?${datasetQuery}${versionQuery}${autoAnnotateQuery}${sourceQuery}${userReviewQuery}${approvedThresholdQuery}`, {\n method: 'PATCH',\n })\n }\n\n async downloadAsset(\n asset_uuid: string,\n dataset_uuid?: string,\n dataset_version?: number,\n transcode_mode: TranscodeMode = TranscodeMode.original,\n start_timestamp?: number,\n end_timestamp?: number,\n url_type?: AssetUrlType,\n ): Promise<Blob | DownloadResponse> {\n const versionQuery = dataset_version ? `&dataset_version=${dataset_version}` : ''\n const datasetQuery = dataset_uuid ? `&dataset_uuid=${dataset_uuid}` : ''\n const startTimestampQuery = start_timestamp ? `&start_timestamp=${start_timestamp}` : ''\n const endTimestampQuery = end_timestamp ? `&end_timestamp=${end_timestamp}` : ''\n const urlTypeQuery = url_type ? `&url_type=${url_type}` : ''\n\n return this.request(`/assets/${asset_uuid}/download?transcode_mode=${transcode_mode}${datasetQuery}${versionQuery}${startTimestampQuery}${endTimestampQuery}${urlTypeQuery}`, {\n method: 'GET',\n })\n }\n\n async previewAutoAnnotateAsset(asset_uuid: string, auto_annotate: string, auto_annotate_params?: AutoAnnotateParams): Promise<Annotation> {\n return this.request(`/assets/${asset_uuid}/preview_auto_annotate?auto_annotate=${auto_annotate}`, {\n method: 'POST',\n body: auto_annotate_params ? JSON.stringify(auto_annotate_params) : null,\n headers: auto_annotate_params ? { 'Content-Type': 'application/json' } : {},\n })\n }\n\n async addAssetRoi(asset_uuid: string, roi: Roi, dataset_uuid?: string, dataset_version?: number, predictions?: Prediction[]): Promise<void> {\n const versionQuery = dataset_version ? `&dataset_version=${dataset_version}` : ''\n const datasetQuery = dataset_uuid ? `&dataset_uuid=${dataset_uuid}` : ''\n return this.request(`/assets/${asset_uuid}/rois?${datasetQuery}${versionQuery}`, {\n method: 'POST',\n body: JSON.stringify(roi),\n headers: { 'Content-Type': 'application/json' },\n })\n }\n\n async deleteAssetRoi(asset_uuid: string, name: string, dataset_uuid?: string, dataset_version?: number): Promise<void> {\n const versionQuery = dataset_version ? `&dataset_version=${dataset_version}` : ''\n const datasetQuery = dataset_uuid ? `&dataset_uuid=${dataset_uuid}` : ''\n return this.request(`/assets/${asset_uuid}/rois/${encodeURIComponent(name)}?${datasetQuery}${versionQuery}`, {\n method: 'DELETE',\n })\n }\n\n // Model methods\n async listModels(): Promise<Model[]> {\n return this.request(`/models?account_uuid=${this._accountId}`, {\n method: 'GET',\n })\n }\n\n async findModelsForDataset(dataset_uuid: string): Promise<Model[]> {\n return this.request(`/models?dataset_uuid=${dataset_uuid}`, {\n method: 'GET',\n })\n }\n\n async createModel(dataset_uuid: string, dataset_version: number, data: ModelCreate, start_training: boolean = true): Promise<Model> {\n return this.request(`/models?dataset_uuid=${dataset_uuid}&dataset_version=${dataset_version}&start_training=${start_training}`, {\n method: 'POST',\n body: JSON.stringify(data),\n headers: { 'Content-Type': 'application/json' },\n })\n }\n\n async getModel(model_uuid: string): Promise<Model> {\n return this.request(`/models/${model_uuid}`, {\n method: 'GET',\n })\n }\n\n async getModelTrainingProgress(model_uuid: string): Promise<ModelTrainingProgress> {\n return this.request(`/models/${model_uuid}/progress`, {\n method: 'GET',\n })\n }\n\n async updateModel(model_uuid: string, data: ModelUpdate): Promise<Model> {\n return this.request(`/models/${model_uuid}`, {\n method: 'PATCH',\n body: JSON.stringify(data),\n headers: { 'Content-Type': 'application/json' },\n })\n }\n\n async deleteModel(model_uuid: string): Promise<void> {\n return this.request(`/models/${model_uuid}`, {\n method: 'DELETE',\n })\n }\n\n async trainModel(model_uuid: string): Promise<Model> {\n return this.request(`/models/${model_uuid}/train`, {\n method: 'POST',\n })\n }\n\n async publishModel(model_uuid: string): Promise<Model> {\n return this.request(`/models/${model_uuid}/publish`, {\n method: 'POST',\n })\n }\n\n async exportModel(model_uuid: string, export_by: ExportedBy, params: QcAiHubExportParams[]): Promise<void> {\n if (export_by != ExportedBy.qc_ai_hub) {\n return Promise.reject(`Unexpected export_by ${export_by}, must be 'qc_ai_hub'`)\n }\n await this.request(`/models/${model_uuid}/exports/qc_ai_hub`, {\n method: 'POST',\n body: JSON.stringify(params),\n headers: { 'Content-Type': 'application/json' },\n })\n }\n\n async downloadModelArtifacts(model_uuid: string, model_formats?: ModelFormat[], device_name?: string, artifact_type?: ArtifactType) {\n const artifactTypeQuery = artifact_type ? `artifact_type=${artifact_type}&` : ''\n const deviceNameQuery = device_name ? `device_name=${encodeURIComponent(device_name)}&` : ''\n let modelFormatQuery = ''\n if (model_formats) {\n for (const model_format of model_formats) {\n modelFormatQuery += `model_format=${model_format}&`\n }\n }\n return this.request(`/exports/model_artifacts/?model_uuid=${model_uuid}&${artifactTypeQuery}${deviceNameQuery}${modelFormatQuery}`, {\n method: 'GET',\n })\n }\n\n public addAccountEventHandler(eventHandler: OnChangeEvent) {\n this._account_event_handlers.push(eventHandler)\n }\n\n public removeAccountEventHandler(eventHandler: OnChangeEvent) {\n this._account_event_handlers = this._account_event_handlers.filter(h => h !== eventHandler)\n }\n\n public addDatasetEventHandler(dataset_uuid: string, eventHandler: OnChangeEvent) {\n let event_handlers = this._dataset_uuid_to_event_handlers.get(dataset_uuid)\n this._logger.debug('addDatasetEventHandler %s', event_handlers)\n if (event_handlers === undefined) {\n event_handlers = []\n this._dataset_uuid_to_event_handlers.set(dataset_uuid, event_handlers)\n const ws = this._ws\n if (ws) {\n const msg = JSON.stringify({ subscribe: { dataset_uuid: dataset_uuid } })\n this._requestLogger.debug('ws send: %s', msg)\n ws.send(msg)\n }\n }\n if (event_handlers.find(h => h === eventHandler) !== eventHandler) {\n this._logger.debug('addDatasetEventHandler event_handlers=%s', event_handlers)\n event_handlers.push(eventHandler)\n }\n }\n\n public removeDatasetEventHandler(dataset_uuid: string, eventHandler: OnChangeEvent) {\n let event_handlers = this._dataset_uuid_to_event_handlers.get(dataset_uuid)\n if (event_handlers === undefined) {\n return\n }\n event_handlers = event_handlers.filter(h => h !== eventHandler)\n if (event_handlers.length == 0) {\n const ws = this._ws\n if (ws) {\n const msg = JSON.stringify({ unsubscribe: { dataset_uuid: dataset_uuid } })\n this._requestLogger.debug('ws send: %s', msg)\n ws.send(msg)\n }\n this._dataset_uuid_to_event_handlers.delete(dataset_uuid)\n }\n }\n\n public removeAllDatasetEventHandlers(dataset_uuid: string) {\n let event_handlers = this._dataset_uuid_to_event_handlers.get(dataset_uuid)\n if (event_handlers === undefined) {\n return\n }\n const ws = this._ws\n if (ws) {\n const msg = JSON.stringify({ unsubscribe: { dataset_uuid: dataset_uuid } })\n this._requestLogger.debug('ws send: %s', msg)\n ws.send(msg)\n }\n this._dataset_uuid_to_event_handlers.delete(dataset_uuid)\n }\n\n public async startWorkflow(account_uuid: string, template_name: string, workflow: CreateWorkflow): Promise<Workflow> {\n return this.request(`/workflows?account_uuid=${account_uuid}&template_name=${template_name}`, {\n method: 'POST',\n body: JSON.stringify(workflow),\n headers: { 'Content-Type': 'application/json' },\n })\n }\n\n public async getWorkflow(workflow_id: string, account_uuid: string): Promise<ListWorkFlowItem> {\n return this.request(`/workflows/${workflow_id}?account_uuid=${account_uuid}`, {\n method: 'GET',\n })\n }\n\n public async listWorkflows(account_uuid: string, dataset_uuids?: string[], model_uuids?: string[], phases?: WorkflowPhase[]): Promise<ListWorkFlowItem[]> {\n const datasetQuery = dataset_uuids?.map(uuid => `dataset_uuid=${uuid}`).join('&') || ''\n const modelQuery = model_uuids?.map(uuid => `model_uuid=${uuid}`).join('&') || ''\n const phaseQuery = phases?.map(p => `phase=${p}`).join('&') || ''\n const queryParams = [datasetQuery, modelQuery, phaseQuery].filter(q => q).join('&')\n\n return this.request(`/workflows?account_uuid=${account_uuid}${queryParams ? `&${queryParams}` : ''}`, {\n method: 'GET',\n })\n }\n\n public async inferAsset(\n asset_uuid: string,\n infer_request: InferRequest,\n dataset_uuid?: string,\n dataset_version?: number,\n transcode_mode?: TranscodeMode,\n start_timestamp?: number,\n end_timestamp?: number,\n ): Promise<InferAssetJob> {\n const datasetQuery = dataset_uuid ? `dataset_uuid=${dataset_uuid}&` : ''\n const versionQuery = dataset_version ? `dataset_version=${dataset_version}&` : ''\n const transcodeModeQuery = transcode_mode ? `transcode_mode=${transcode_mode}&` : ''\n const startTimestampQuery = start_timestamp ? `start_timestamp=${start_timestamp}&` : ''\n const endTimestampQuery = end_timestamp ? `end_timestamp=${end_timestamp}&` : ''\n\n const assetUrl = `ai.eyepop://data/assets/${asset_uuid}?${transcodeModeQuery}${datasetQuery}${versionQuery}${startTimestampQuery}${endTimestampQuery}`\n\n if (!this.vlmApiUrl || !this._client || !this._limit) {\n throw new Error('endpoint not connected, use connect()')\n }\n await this._limit.acquire()\n try {\n this.updateState()\n const job = new InferAssetJob(\n assetUrl,\n infer_request,\n async (path: string, options: any) => {\n return await this.request(path, options, false, DataApiType.vlm)\n },\n this._requestLogger,\n )\n return job.start(() => {\n this.jobDone(job)\n })\n } catch (e) {\n // we'll have to reset our queue counter in case the job cannot be started\n this._limit.release()\n throw e\n }\n }\n\n public async evaluateDataset(evaluate_request: EvaluateRequest, worker_release?: string): Promise<EvaluateDatasetJob> {\n if (!this.vlmApiUrl || !this._client || !this._limit) {\n throw new Error('endpoint not connected, use connect()')\n }\n await this._limit.acquire()\n try {\n this.updateState()\n const job = new EvaluateDatasetJob(\n evaluate_request,\n worker_release ?? null,\n async (path: string, options: any) => {\n return await this.request(path, options, false, DataApiType.vlm)\n },\n this._requestLogger,\n )\n return job.start(() => {\n this.jobDone(job)\n })\n } catch (e) {\n // we'll have to reset our queue counter in case the job cannot be started\n this._limit.release()\n throw e\n }\n }\n\n private jobDone(_job: object) {\n this._limit?.release()\n }\n\n private async dispatchChangeEvent(change_event: ChangeEvent): Promise<void> {\n switch (change_event.change_type) {\n // account event types\n case ChangeType.dataset_added:\n case ChangeType.dataset_modified:\n case ChangeType.dataset_removed:\n case ChangeType.dataset_version_modified:\n case ChangeType.workflow_started:\n case ChangeType.workflow_succeeded:\n case ChangeType.workflow_failed:\n case ChangeType.workflow_task_started:\n case ChangeType.workflow_task_succeeded:\n case ChangeType.workflow_task_failed:\n this._logger.debug('dispatchChangeEvent account_event_handlers=%s', this._account_event_handlers)\n for (let handler of this._account_event_handlers) {\n await handler(change_event)\n }\n break\n // dataset event types\n case ChangeType.asset_added:\n case ChangeType.asset_removed:\n case ChangeType.asset_status_modified:\n case ChangeType.asset_annotation_modified:\n case ChangeType.model_added:\n case ChangeType.model_modified:\n case ChangeType.model_removed:\n case ChangeType.model_status_modified:\n case ChangeType.model_progress:\n const event_handlers = this._dataset_uuid_to_event_handlers.get(change_event.dataset_uuid)\n this._logger.debug('dispatchChangeEvent event_handlers=%s', event_handlers)\n if (event_handlers !== undefined) {\n for (let handler of event_handlers) {\n await handler(change_event)\n }\n }\n break\n }\n }\n\n // Vlm Ability Management\n\n async listVlmAbilityGroups(): Promise<VlmAbilityGroup[]> {\n return this.request(`/vlm_ability_groups?account_uuid=${this._accountId}`, {\n method: 'GET',\n })\n }\n\n async createVlmAbilityGroup(create: VlmAbilityGroupCreate): Promise<VlmAbilityGroup> {\n return this.request(`/vlm_ability_groups?account_uuid=${this._accountId}`, {\n method: 'POST',\n body: JSON.stringify(create, omit_nulls),\n headers: { 'Content-Type': 'application/json' },\n })\n }\n\n async getVlmAbilityGroup(vlm_ability_group_uuid: string): Promise<VlmAbilityGroup> {\n return this.request(`/vlm_ability_groups/${vlm_ability_group_uuid}`, {\n method: 'GET',\n })\n }\n\n async deleteVlmAbilityGroup(vlm_ability_group_uuid: string): Promise<void> {\n return this.request(`/vlm_ability_groups/${vlm_ability_group_uuid}`, {\n method: 'DELETE',\n })\n }\n\n async updateVlmAbilityGroup(vlm_ability_group_uuid: string, update: VlmAbilityGroupUpdate): Promise<VlmAbilityGroup> {\n return this.request(`/vlm_ability_groups/${vlm_ability_group_uuid}`, {\n method: 'PATCH',\n body: JSON.stringify(update),\n headers: { 'Content-Type': 'application/json' },\n })\n }\n\n async listVlmAbilities(): Promise<VlmAbility[]> {\n return this.request(`/vlm_abilities?account_uuid=${this._accountId}`, {\n method: 'GET',\n })\n }\n\n async createVlmAbility(create: VlmAbilityCreate, vlm_ability_group_uuid?: string): Promise<VlmAbility> {\n const groupQuery = vlm_ability_group_uuid ? `&vlm_ability_group_uuid=${vlm_ability_group_uuid}` : ''\n return this.request(`/vlm_abilities?account_uuid=${this._accountId}${groupQuery}`, {\n method: 'POST',\n body: JSON.stringify(create, omit_nulls),\n headers: { 'Content-Type': 'application/json' },\n })\n }\n\n async getVlmAbility(vlm_ability_uuid: string): Promise<VlmAbility> {\n return this.request(`/vlm_abilities/${vlm_ability_uuid}`, {\n method: 'GET',\n })\n }\n\n async deleteVlmAbility(vlm_ability_uuid: string): Promise<void> {\n return this.request(`/vlm_abilities/${vlm_ability_uuid}`, {\n method: 'DELETE',\n })\n }\n\n async updateVlmAbility(vlm_ability_uuid: string, update: VlmAbilityUpdate): Promise<VlmAbility> {\n return this.request(`/vlm_abilities/${vlm_ability_uuid}`, {\n method: 'PATCH',\n body: JSON.stringify(update),\n headers: { 'Content-Type': 'application/json' },\n })\n }\n\n async refineVlmAbility(vlm_ability_uuid: string, auto_prompt: AutoPromptConfig | undefined, auto_task?: AutoTask | undefined): Promise<VlmAbility> {\n if (auto_prompt !== undefined) {\n return this.request(`/vlm_abilities/${vlm_ability_uuid}/refine`, {\n method: 'POST',\n body: JSON.stringify(auto_prompt, omit_nulls),\n headers: { 'Content-Type': 'application/json' },\n })\n } else if (auto_task !== undefined) {\n return this.request(`/vlm_abilities/${vlm_ability_uuid}/refine_task`, {\n method: 'POST',\n body: JSON.stringify(auto_task, omit_nulls),\n headers: { 'Content-Type': 'application/json' },\n })\n } else {\n return Promise.reject('refine vlm ability requires auto_prompt or auto_config parameter')\n }\n }\n\n async cloneVlmAbility(vlm_ability_uuid: string, account_uuid?: string, name?: string, default_alias_name?: string): Promise<VlmAbility> {\n const params = new URLSearchParams()\n if (account_uuid) {\n params.set('account_uuid', account_uuid)\n } else if (this._accountId) {\n params.set('account_uuid', this._accountId)\n }\n if (name) {\n params.set('name', name)\n }\n if (default_alias_name) {\n params.set('default_alias_name', default_alias_name)\n }\n return this.request(`/vlm_abilities/${vlm_ability_uuid}/clone?${params.toString()}`, {\n method: 'POST',\n })\n }\n\n async publishVlmAbility(vlm_ability_uuid: string, alias_name?: string, tag_name?: string): Promise<VlmAbility> {\n const alias_name_query = alias_name ? `alias_name=${encodeURIComponent(alias_name)}&` : ''\n const tag_name_query = tag_name ? `tag_name=${encodeURIComponent(tag_name)}&` : ''\n return this.request(`/vlm_abilities/${vlm_ability_uuid}/publish?${alias_name_query}${tag_name_query}`, {\n method: 'POST',\n })\n }\n\n async addVlmAbilityAlias(vlm_ability_uuid: string, alias_name: string, tag_name?: string): Promise<VlmAbility> {\n return this.request(`/vlm_abilities/${vlm_ability_uuid}/alias/${encodeURIComponent(alias_name)}/tag/${tag_name ? encodeURIComponent(tag_name) : ''}`, {\n method: 'POST',\n })\n }\n\n async removeVlmAbilityAlias(vlm_ability_uuid: string, alias_name: string, tag_name: string): Promise<VlmAbility> {\n return this.request(`/vlm_abilities/${vlm_ability_uuid}/alias/${encodeURIComponent(alias_name)}/tag/${encodeURIComponent(tag_name)}`, {\n method: 'DELETE',\n })\n }\n\n async listVlmAbilityEvaluations(vlm_ability_uuid: string): Promise<DatasetAutoAnnotate[]> {\n return this.request(`/vlm_abilities/${vlm_ability_uuid}/evaluations`, {\n method: 'GET',\n })\n }\n\n async getVlmAbilityEvaluation(vlm_ability_uuid: string, source: string): Promise<DatasetAutoAnnotate> {\n return this.request(`/vlm_abilities/${vlm_ability_uuid}/evaluations/${source}`, {\n method: 'GET',\n })\n }\n\n async startVlmAbilityEvaluation(vlm_ability_uuid: string, evaluate_request: EvaluateRequest): Promise<DatasetAutoAnnotate> {\n return this.request(`/vlm_abilities/${vlm_ability_uuid}/evaluations`, {\n method: 'POST',\n body: JSON.stringify(evaluate_request),\n headers: { 'Content-Type': 'application/json' },\n })\n }\n\n async resolveAliases(aliases: string[]): Promise<AliasResolution[]> {\n const params = new URLSearchParams()\n aliases.forEach(alias => {\n params.append('alias', alias)\n })\n return this.request(`/exports/aliases?${params.toString()}`, {\n method: 'GET',\n })\n }\n}\n","import type { OpenAPIV3_1 } from 'openapi-types'\n\nimport { Point2d, Prediction, Session } from '../types'\n\nexport enum DataApiType {\n dataset = 'dataset',\n vlm = 'vlm'\n}\n\nexport type AutoAnnotate = string\n\nexport interface DataSession extends Session {\n readonly accountId: string\n readonly datasetApiUrl: string | undefined\n readonly vlmApiUrl: string | undefined\n}\n\nexport function getBaseUrl(session: DataSession, dataApiType: DataApiType): string {\n switch (dataApiType) {\n case DataApiType.dataset:\n return session.datasetApiUrl ?? ''\n case DataApiType.vlm:\n return session.vlmApiUrl ?? ''\n default:\n throw new Error(`unsupported type ${dataApiType}`)\n }\n}\n\nexport interface DatasetVersionAssetStats {\n total?: number\n accepted?: number\n rejected?: number\n annotated?: number\n auto_annotated?: number\n auto_annotated_approved?: number\n ground_truth_annotated?: number\n}\n\nexport interface DatasetVersion {\n version: number\n modifiable: boolean\n created_at: Date\n updated_at: Date\n assets_modified_at: Date\n last_analysed_at?: Date\n hero_asset_uuid?: string\n asset_stats?: DatasetVersionAssetStats\n default_source_model_uuid?: string\n}\n\nexport interface DatasetParent {\n dataset_uuid: string\n dataset_version: number\n}\n\nexport interface Dataset {\n uuid: string\n name: string\n description?: string\n auto_annotates: string[]\n auto_annotate_params?: AutoAnnotateParams\n tags: string[]\n account_uuid: string\n created_at: Date\n updated_at: Date\n modifiable_version?: number\n versions: DatasetVersion[]\n parent?: DatasetParent\n searchable: boolean\n}\n\nexport interface DatasetCreate {\n name: string\n description?: string\n tags?: string[]\n auto_annotates?: string[]\n auto_annotate_params?: AutoAnnotateParams\n searchable?: boolean\n}\n\nexport interface DatasetUpdate {\n name?: string\n description?: string\n tags?: string[]\n auto_annotates?: string[]\n auto_annotate_params?: AutoAnnotateParams\n searchable?: boolean\n}\n\nexport interface DatasetHeroAssetUpdate {\n uuid: string\n}\n\nexport enum AutoAnnotateStatus {\n error = \"error\",\n requested = \"requested\",\n in_progress = \"in_progress\",\n completed = \"completed\"\n}\n\nexport interface DatasetAutoAnnotateCreate {\n auto_annotate: string\n auto_annotate_params?: Record<string, any>\n source_model_uuid?: string\n status?: AutoAnnotateStatus\n status_message?: string\n source?: string\n metrics?: Record<string, any>\n}\n\n\nexport interface DatasetAutoAnnotateUpdate {\n status?: AutoAnnotateStatus\n status_message?: string\n metrics?: Record<string, any>\n}\n\nexport interface DatasetAutoAnnotate {\n created_at?: Date\n updated_at?: Date\n dataset_uuid: string\n dataset_version: number\n source_ability_uuid?: string\n source_model_uuid?: string\n auto_annotate?: string\n auto_annotate_params?: Record<string, any>\n status?: AutoAnnotateStatus\n status_message?: string\n source?: string\n metrics?: Record<string, any>\n}\n\nexport interface AssetImport {\n url: string\n ground_truth?: Prediction\n}\n\nexport enum AssetStatus {\n rejected = 'rejected',\n upload_in_progress = 'upload_in_progress',\n upload_failed = 'upload_failed',\n transform_failed = 'transform_failed',\n transform_in_progress = 'transform_in_progress',\n accepted = 'accepted',\n}\n\nexport enum AnnotationType {\n ground_truth = 'ground_truth',\n prediction = 'prediction',\n auto = 'auto',\n}\n\nexport enum UserReview {\n approved = 'approved',\n rejected = 'rejected',\n unknown = 'unknown',\n}\n\nexport enum AssetInclusionMode {\n all_assets = 'all_assets',\n annotated_only = 'annotated_only',\n manual_annotated_only = 'manual_annotated_only',\n auto_annotated_only = 'auto_annotated_only',\n}\n\nexport enum AnnotationInclusionMode {\n all = 'all',\n user_reviewed = 'user_reviewed',\n user_approved = 'user_approved',\n ground_truth = 'ground_truth',\n}\n\nexport interface AutoAnnotatePrompt {\n prompt: string\n label: string\n}\n\nexport enum AutoAnnotateTask {\n object_detection = 'object_detection',\n image_classification = 'image_classification',\n}\n\nexport interface AutoAnnotateParams {\n /**\n * @deprecated use prompts instead\n */\n candidate_labels?: string[]\n prompts?: AutoAnnotatePrompt[]\n task?: AutoAnnotateTask\n confidence_threshold?: number\n}\n\nexport interface Annotation {\n type: AnnotationType\n user_review: UserReview\n approved_threshold?: number\n auto_annotate?: string\n source?: string\n source_ability_uuid?: string\n uncertainty_score?: number\n predictions: Prediction[]\n}\n\nexport enum TranscodeMode {\n original = 'original',\n video_original_size = 'video_original_size',\n image_original_size = 'image_original_size',\n image_fit_1024 = 'image_fit_1024',\n image_fit_640 = 'image_fit_640',\n image_fit_224 = 'image_fit_224',\n image_cover_1024 = 'image_cover_1024',\n image_cover_640 = 'image_cover_640',\n image_cover_224 = 'image_cover_224',\n}\n\nexport enum AreaType {\n RECTANGLE = \"rectangle\",\n CONTOUR = \"contour\"\n}\n\nexport interface BaseArea {\n type: AreaType\n}\n\nexport interface RectangleArea extends BaseArea {\n x: number\n y: number\n width: number\n height: number\n}\n\nexport interface ContourArea extends BaseArea {\n points: Point2d[]\n}\n\nexport type Area = RectangleArea | ContourArea\n\nexport interface TimeSpan {\n start_timestamp?: number\n end_timestamp?: number\n}\n\nexport interface Roi {\n name: string\n area?: Area\n time_span?: TimeSpan\n}\nexport interface Asset {\n uuid: string\n external_id?: string\n mime_type: string\n file_size_bytes: number\n original_image_width?: number\n original_image_height?: number\n original_duration?: number\n original_frames?: number\n status: AssetStatus\n created_at: Date\n updated_at: Date\n partition?: string\n review_priority?: number\n model_relevance?: number\n annotations: Annotation[]\n rois: Roi[]\n}\n\nexport enum ModelType {\n epdet_b1 = 'epdet_b1',\n imported = 'imported',\n vlm_ability = 'vlm_ability'\n}\n\nexport enum ModelTask {\n object_detection = 'object_detection',\n image_classification = 'image_classification',\n keypoint_detection = 'keypoint_detection'\n}\n\nexport enum ModelStatus {\n error = 'error',\n draft = 'draft',\n requested = 'requested',\n in_progress = 'in_progress',\n available = 'available',\n published = 'published',\n}\n\nexport interface ModelMetrics {\n cpr?: number[][3]\n}\n\nexport enum ModelExportStatus {\n in_progress = 'in_progress',\n finished = 'finished',\n error = 'error',\n}\n\nexport enum ExportedBy {\n eyepop = 'eyepop',\n qc_ai_hub = 'qc_ai_hub',\n}\n\nexport enum ArtifactType {\n eyepop_bundle = 'eyepop_bundle',\n weights_file = 'weights_file',\n}\n\nexport interface QcAiHubExportParams {\n device_name: string\n}\n\nexport interface ModelExport {\n format: ModelFormat\n exported_by: ExportedBy\n export_params?: QcAiHubExportParams\n status: ModelExportStatus\n status_message?: string\n}\n\nexport interface Model {\n uuid: string\n name: string\n description?: string\n external_id?: string\n pretrained_model_uuid?: string\n extra_params?: Record<string, any>\n task?: ModelTask\n classes?: string[]\n type: ModelType\n status: ModelStatus\n status_message?: string\n metrics?: ModelMetrics\n account_uuid: string\n created_at: Date\n updated_at: Date\n dataset_uuid: string\n dataset_version: number\n exports?: ModelExport[]\n}\n\nexport interface ModelCreate {\n name: string\n description: string\n external_id?: string\n pretrained_model_uuid?: string\n extra_params?: Record<string, any>\n task?: ModelTask\n classes?: string[]\n}\n\nexport interface ModelUpdate {\n name: string\n description: string\n external_id?: string\n task?: ModelTask\n classes?: string[]\n}\n\nexport enum ModelTrainingStage {\n waiting = 'waiting',\n scheduling = 'scheduling',\n preparing = 'preparing',\n training = 'training',\n exporting = 'exporting',\n}\n\nexport interface ModelSample {\n asset_uuid: string\n prediction: Prediction\n}\n\nexport interface ModelTrainingProgress {\n stage: ModelTrainingStage\n queue_length?: number\n started_at: Date\n finished_at?: Date\n metrics?: ModelMetrics\n samples?: ModelSample[]\n remaining_seconds_min?: number\n remaining_seconds_max?: number\n}\n\nexport enum ChangeType {\n dataset_added = 'dataset_added',\n dataset_removed = 'dataset_removed',\n dataset_modified = 'dataset_modified',\n dataset_version_modified = 'dataset_version_modified',\n asset_added = 'asset_added',\n asset_removed = 'asset_removed',\n asset_status_modified = 'asset_status_modified',\n asset_annotation_modified = 'asset_annotation_modified',\n model_added = 'model_added',\n model_removed = 'model_removed',\n model_modified = 'model_modified',\n model_status_modified = 'model_status_modified',\n model_progress = 'model_progress',\n events_lost = 'events_lost',\n workflow_started = 'workflow_started',\n workflow_succeeded = 'workflow_succeeded',\n workflow_failed = 'workflow_failed',\n workflow_task_started = 'workflow_task_started',\n workflow_task_succeeded = 'workflow_task_succeeded',\n workflow_task_failed = 'workflow_task_failed',\n}\n\n\nexport interface ChangeEvent {\n change_type: ChangeType\n account_uuid: string\n dataset_uuid: string\n dataset_version?: number\n asset_uuid?: string\n mdl_uuid?: string\n message?: string\n workflow_task_name?: string\n}\n\nexport type OnChangeEvent = (event: ChangeEvent) => Promise<void>\n\nexport interface CreateWorkflowConfig {\n dataset_uuid?: string\n dataset_version?: number\n model_uuid?: string\n config?: Record<string, any>\n}\n\nexport interface CreateWorkflow {\n parameters?: CreateWorkflowConfig\n}\n\nexport interface Workflow {\n workflow_id: string\n}\n\nexport interface ListWorkflowItemMetadataLabels {\n account_uuid: string\n dataset_uuid?: string\n model_uuid?: string\n phase: WorkflowPhase\n}\n\nexport interface ListWorkFlowItemMetadata {\n workflow_id: string\n created_at: Date\n labels: ListWorkflowItemMetadataLabels\n}\n\nexport interface ListWorkFlowItem {\n metadata: ListWorkFlowItemMetadata\n}\n\nexport enum WorkflowPhase {\n unknown = 'Unknown',\n pending = 'Pending',\n running = 'Running',\n succeeded = 'Succeeded',\n failed = 'Failed',\n error = 'Error',\n}\n\nexport enum ModelFormat {\n TensorFlowLite = 'TensorFlowLite',\n TensorFlowGraphDef = 'TensorFlowGraphDef',\n ONNX = 'ONNX',\n TorchScript = 'TorchScript',\n TorchScriptCpu = 'TorchScriptCpu',\n TorchScriptCuda = 'TorchScriptCuda',\n PyTorch = 'PyTorch',\n ModelLess = 'ModelLess',\n}\n\nexport enum ModelPrecisionType {\n float32 = 'float32',\n float16 = 'float16',\n int32 = 'int32',\n int8 = 'int8',\n uint8 = 'uint8',\n}\n\nexport enum AssetUrlType {\n gcs = 'gcs',\n s3 = 's3',\n https_signed = 'https_signed'\n}\n\nexport interface DownloadResponse {\n url: string\n url_type: AssetUrlType\n}\n\n/** Experimental VLM API */\n\nexport interface InferRuntimeConfig {\n max_new_tokens?: number\n image_size?: number\n fps?: number\n max_frames?: number\n min_frames?: number\n max_aspect_ratio?: number\n context_length?: number\n roi?: Area\n}\n\n/**\n * Schema to constrain a VLM's output. Where one is set, the ability is\n * guaranteed to return a structured object matching this Open API schema, and\n * the parsed object arrives on each prediction's `details` attribute.\n */\nexport type ResponseSchema = OpenAPIV3_1.SchemaObject\n\nexport interface TransformInto {\n classes?: string[]\n}\n\nexport interface InferRequest {\n worker_release?: string\n text_prompt?: string\n config: InferRuntimeConfig\n refresh?: boolean\n transform_into?: TransformInto\n response_schema?: ResponseSchema\n}\n\nexport interface EvaluateFilter {\n partitions?: string[]\n ground_truth_classes?: string[]\n}\n\nexport interface EvaluateConfig {\n dataset_uuid: string\n filter?: EvaluateFilter\n video_chunk_length_ns?: number\n video_chunk_overlap?: number\n}\n\nexport interface EvaluateRequest extends EvaluateConfig {\n ability_uuid?: string\n infer?: InferRequest\n}\n\nexport enum EvaluationStatus {\n success = \"success\",\n failed = \"failed\"\n}\n\nexport interface EvaluateRunInfo {\n num_images: number\n num_ground_truth_images: number\n num_videos: number\n num_ground_truth_videos: number\n total_tokens: number\n visual_tokens: number\n text_tokens: number\n output_tokens: number\n}\n\nexport interface EvaluateResponse {\n dataset_uuid: string\n dataset_version: number\n status: EvaluationStatus\n status_message?: string\n source: string\n metrics?: Record<string, any>\n run_info: EvaluateRunInfo\n}\n\nexport interface InferRunInfo {\n fps?: number\n image_size?: number\n total_tokens?: number\n visual_tokens?: number\n text_tokens?: number\n output_tokens?: number\n aspect_ratio?: number\n}\n\nexport interface AutoPromptConfig {\n num_samples: number\n task_description?: string\n infer: InferRequest\n response_schema?: ResponseSchema\n evaluate: EvaluateConfig\n}\n\nexport enum TaskType {\n classification = \"classification\"\n}\n\nexport enum TaskMode {\n image = \"image\",\n video = \"video\"\n}\n\nexport interface BaseTask {\n type: TaskType\n task_description?: string\n task_mode?: TaskMode\n}\n\nexport interface ClassificationTask extends BaseTask {\n classes: string[]\n dataset_uuid: string\n num_samples: number\n}\n\nexport type AutoTask = ClassificationTask\n\nexport enum VlmAbilityStatus {\n in_progress = \"in_progress\",\n draft = \"draft\",\n published = \"published\",\n}\n\nexport interface AbilityAliasEntry {\n alias: string\n tag: string\n}\n\nexport interface VlmAbilityCreate {\n name: string\n description: string\n worker_release: string\n text_prompt: string\n transform_into: TransformInto\n response_schema?: ResponseSchema\n config: InferRuntimeConfig\n is_public: boolean\n video_chunk_length_ns?: number\n video_chunk_overlap?: number\n}\n\nexport interface VlmAbilityUpdate {\n name?: string\n description?: string\n worker_release?: string\n text_prompt?: string\n transform_into?: TransformInto\n response_schema?: ResponseSchema\n config?: InferRuntimeConfig\n is_public?: boolean\n video_chunk_length_ns?: number\n video_chunk_overlap?: number\n}\n\nexport interface VlmAbility {\n uuid: string\n created_at?: Date\n updated_at?: Date\n account_uuid: string\n status: VlmAbilityStatus\n is_public: boolean\n name: string\n description: string\n vlm_ability_group_uuid?: string\n worker_release?: string\n text_prompt?: string\n transform_into?: TransformInto\n response_schema?: ResponseSchema\n config?: InferRuntimeConfig\n video_chunk_length_ns?: number\n video_chunk_overlap?: number\n alias_entries?: AbilityAliasEntry[]\n auto_prompt?: AutoPromptConfig\n auto_task?: AutoTask\n}\n\nexport interface VlmAbilityGroupCreate {\n name: string\n description: string\n auto_prompt?: AutoPromptConfig\n auto_task?: AutoTask\n default_alias_name?: string\n default_dataset_uuid?: string\n}\n\nexport interface VlmAbilityGroupUpdate {\n name: string\n description: string\n default_alias_name?: string\n default_dataset_uuid?: string\n}\n\nexport interface VlmAbilityGroup {\n uuid: string\n created_at?: Date\n updated_at?: Date\n account_uuid: string\n name: string\n description: string\n default_alias_name?: string\n default_dataset_uuid?: string\n}\n\nexport interface AliasResolution {\n alias: string\n model_uuid: string | null\n}","import { ResultStream } from '../worker/worker_types'\nimport { Logger } from 'pino'\nimport { Prediction } from '../types'\nimport { EvaluateRequest, EvaluateResponse, InferRequest, InferRunInfo } from './data_types'\n\ntype VlmFetch = (path: string, options: RequestInit) => Promise<any>\n\nexport class InferAssetJob implements ResultStream {\n protected _vlmFetch: VlmFetch\n protected _assetUrl: string\n protected _inferRequest: InferRequest\n\n protected _response: Promise<Prediction[]> | null = null\n protected _runInfo: InferRunInfo | null = null\n protected _controller: AbortController = new AbortController()\n\n protected _requestLogger: Logger;\n\n [Symbol.asyncIterator](): AsyncIterator<Prediction> {\n if (!this._response) {\n throw Error('logical bug')\n }\n let consumed = false\n const response_promise = this._response\n const controller = this._controller\n async function* iterator(): AsyncIterator<Prediction> {\n if (consumed) {\n throw new Error('Cannot iterate over a consumed stream, use `.tee()` to split the stream.')\n }\n consumed = true\n let done = false\n try {\n const predictions = await response_promise\n if (predictions) {\n for (let prediction of predictions) {\n yield prediction\n }\n }\n done = true\n } catch (e) {\n // If the user calls `stream.controller.abort()`, we should exit without throwing.\n if (e instanceof Error && e.name === 'AbortError') return\n throw e\n } finally {\n // If the user breaks, abort the ongoing request.\n if (!done) controller.abort()\n }\n }\n\n return iterator()\n }\n\n public constructor(assetUrl: string, inferRequest: InferRequest, vlmFetch: VlmFetch, requestLogger: Logger) {\n this._vlmFetch = vlmFetch\n\n this._assetUrl = assetUrl\n this._inferRequest = inferRequest\n\n this._requestLogger = requestLogger\n }\n\n public start(done: () => void): InferAssetJob {\n this._response = new Promise<Prediction[]>(async (resolve, reject) => {\n try {\n let requestId = null\n while (true) {\n let response = null\n if (requestId) {\n response = await this._vlmFetch(`/api/v1/requests/${requestId}?timeout=20`, {\n method: 'POST',\n })\n } else {\n const infer_request = new Map(Object.entries(this._inferRequest))\n infer_request.set('url', this._assetUrl)\n const body = new FormData();\n body.append('infer_request', JSON.stringify(Object.fromEntries(infer_request)))\n response = await this._vlmFetch(`/api/v1/infer?timeout=20`, {\n method: 'POST',\n body: body,\n })\n }\n const predictions = response['predictions']\n const runInfo = response['run_info']\n if (predictions) {\n this._runInfo = runInfo\n resolve(predictions)\n break\n } else {\n requestId = response['request_id']\n if (!requestId) {\n reject(`missing request_id in response: ${JSON.stringify(response)}`)\n break\n }\n }\n }\n } catch (reason) {\n reject(reason)\n } finally {\n done()\n }\n })\n return this\n }\n\n public cancel(): void {\n this._controller.abort('cancelled')\n }\n}\n\n\nexport class EvaluateDatasetJob {\n protected _vlmFetch: VlmFetch\n protected _evaluateRequest: EvaluateRequest\n protected _workerRelease: string | null\n\n protected _response: Promise<EvaluateResponse> | null = null\n protected _controller: AbortController = new AbortController()\n\n protected _requestLogger: Logger;\n\n public async response(): Promise<EvaluateResponse> {\n if (!this._response) {\n throw Error('logical bug')\n }\n return await this._response\n }\n\n public constructor(evaluateRequest: EvaluateRequest, workerRelease: string | null, vlmFetch: VlmFetch, requestLogger: Logger) {\n this._vlmFetch = vlmFetch\n\n this._evaluateRequest = evaluateRequest\n this._workerRelease = workerRelease\n\n this._requestLogger = requestLogger\n }\n\n public start(done: () => void): EvaluateDatasetJob {\n this._response = new Promise<EvaluateResponse>(async (resolve, reject) => {\n try {\n let requestId = null\n while (true) {\n let response = null\n if (requestId) {\n response = await this._vlmFetch(`/api/v1/evaluations/${requestId}?timeout=20`, {\n method: 'GET',\n })\n } else {\n const workerReleaseQuery = this._workerRelease? `&worker_release=${this._workerRelease}`: ''\n response = await this._vlmFetch(`/api/v1/evaluations?timeout=20${workerReleaseQuery}`, {\n method: 'POST',\n body: JSON.stringify(this._evaluateRequest),\n headers: { 'Content-Type': 'application/json' }\n })\n }\n const runInfo = response['run_info']\n if (runInfo) {\n resolve(response)\n break\n } else {\n requestId = response['request_id']\n if (!requestId) {\n reject(`missing request_id in response: ${JSON.stringify(response)}`)\n break\n }\n }\n }\n } catch (reason) {\n reject(reason)\n } finally {\n done()\n }\n })\n return this\n }\n\n public cancel(): void {\n this._controller.abort('cancelled')\n }\n}\n","import { Depth } from './types'\n\nconst isLittleEndianPlatform = new Uint8Array(new Uint16Array([1]).buffer)[0] === 1\n\nfunction base64ToBytes(base64: string): Uint8Array {\n if (typeof Buffer !== 'undefined') {\n const buffer = Buffer.from(base64, 'base64')\n return new Uint8Array(buffer.buffer, buffer.byteOffset, buffer.byteLength)\n }\n const binary = atob(base64)\n const bytes = new Uint8Array(binary.length)\n for (let i = 0; i < binary.length; i++) {\n bytes[i] = binary.charCodeAt(i)\n }\n return bytes\n}\n\n/**\n * A decoded frame-level depth map.\n *\n * Values are canonical metric depth in row-major order; sky pixels are +Infinity.\n * See decodeDepthMap().\n */\nexport class DepthMap {\n readonly width: number\n readonly height: number\n readonly values: Float32Array\n\n private _finiteMin: number | undefined\n private _finiteMax: number | undefined\n\n constructor(width: number, height: number, values: Float32Array) {\n this.width = width\n this.height = height\n this.values = values\n }\n\n /**\n * The depth value at map pixel (x, y), or - when sourceWidth/sourceHeight\n * are given - at source frame coordinate (x, y) mapped proportionally.\n * Returns +Infinity for sky pixels.\n */\n public at(x: number, y: number, sourceWidth?: number, sourceHeight?: number): number {\n let mapX = x\n let mapY = y\n if (sourceWidth && sourceHeight) {\n mapX = (x * this.width) / sourceWidth\n mapY = (y * this.height) / sourceHeight\n }\n const clampedX = Math.min(Math.max(Math.floor(mapX), 0), this.width - 1)\n const clampedY = Math.min(Math.max(Math.floor(mapY), 0), this.height - 1)\n return this.values[clampedY * this.width + clampedX]\n }\n\n public isSky(x: number, y: number, sourceWidth?: number, sourceHeight?: number): boolean {\n return this.at(x, y, sourceWidth, sourceHeight) === Number.POSITIVE_INFINITY\n }\n\n /** The smallest finite depth value, or undefined if the whole map is sky. */\n public get finiteMin(): number | undefined {\n this.computeFiniteRange()\n return this._finiteMin\n }\n\n /** The largest finite depth value, or undefined if the whole map is sky. */\n public get finiteMax(): number | undefined {\n this.computeFiniteRange()\n return this._finiteMax\n }\n\n private computeFiniteRange(): void {\n if (this._finiteMin !== undefined || this._finiteMax !== undefined) {\n return\n }\n let min = Number.POSITIVE_INFINITY\n let max = Number.NEGATIVE_INFINITY\n for (let i = 0; i < this.values.length; i++) {\n const value = this.values[i]\n if (Number.isFinite(value)) {\n if (value < min) min = value\n if (value > max) max = value\n }\n }\n if (max >= min) {\n this._finiteMin = min\n this._finiteMax = max\n }\n }\n}\n\n/**\n * Decode a Prediction's `depth` member into a DepthMap.\n *\n * The wire format is base64 of width*height little-endian float32 values in\n * row-major order; sky pixels are +Infinity.\n */\nexport function decodeDepthMap(depth: Depth): DepthMap {\n if (!Number.isSafeInteger(depth.width) || depth.width <= 0 || !Number.isSafeInteger(depth.height) || depth.height <= 0 || !Number.isSafeInteger(depth.width * depth.height * 4)) {\n throw new Error(`invalid depth dimensions: ${depth.width}x${depth.height}`)\n }\n const bytes = base64ToBytes(depth.values)\n const count = depth.width * depth.height\n if (bytes.byteLength !== count * 4) {\n throw new Error(`depth values hold ${bytes.byteLength} bytes, expected ${count * 4} for ${depth.width}x${depth.height} float32`)\n }\n let values: Float32Array\n if (isLittleEndianPlatform) {\n // copy to a fresh, aligned buffer (e.g. Buffer pool slices can be unaligned)\n const aligned = new Uint8Array(bytes)\n values = new Float32Array(aligned.buffer, 0, count)\n } else {\n const view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength)\n values = new Float32Array(count)\n for (let i = 0; i < count; i++) {\n values[i] = view.getFloat32(i * 4, true)\n }\n }\n return new DepthMap(depth.width, depth.height, values)\n}\n","/**\n * Decoding and sampling of point clouds.\n *\n * When a pipeline is asked for world coordinates, an object carrying a\n * segmentation mask also carries `mask.world`: three little-endian float32\n * values per mask pixel, row-major, exactly width*height triples. The point for\n * bitmap pixel (i, j) sits at triple index j * width + i, so the cloud indexes\n * exactly like the bitmap with no separate lookup.\n *\n * A Pop asking for `depthMap.toWorld` also gets `depth.world`, the same\n * encoding on the depth map's own grid: one point per map pixel rather than per\n * mask pixel, covering the whole scene.\n *\n * Points the worker could not place are NaN - sky pixels, samples outside the\n * depth map, and pixels the mask does not cover. NaN is the omission sentinel\n * here, which is why this does not share decodeDepthMap()'s validation: that\n * one rejects a payload of the wrong length, but nothing here may reject a NaN.\n */\n\nimport { Depth, Mask, Prediction, PredictedObject } from './types'\n\n/** One xyz triple per pixel, so a cloud is three float32 per pixel. */\nconst VALUES_PER_POINT = 3\n\nconst isLittleEndianPlatform = new Uint8Array(new Uint16Array([1]).buffer)[0] === 1\n\nfunction base64ToBytes(base64: string): Uint8Array {\n if (typeof Buffer !== 'undefined') {\n const buffer = Buffer.from(base64, 'base64')\n return new Uint8Array(buffer.buffer, buffer.byteOffset, buffer.byteLength)\n }\n const binary = atob(base64)\n const bytes = new Uint8Array(binary.length)\n for (let i = 0; i < binary.length; i++) {\n bytes[i] = binary.charCodeAt(i)\n }\n return bytes\n}\n\n/** Where a cloud's grid sits in the source frame, so at() can be reached from source pixels. */\nexport interface CloudBox {\n x: number\n y: number\n width: number\n height: number\n}\n\n/**\n * A decoded point cloud, per object or per scene.\n *\n * Create with decodePointCloud(), cloudOfObject(), cloudOfDepth() or\n * cloudsOfPrediction(). Coordinates are meters, in the frame the source's\n * camera extrinsics define (Z up, ground at Z = 0) or the OpenCV camera frame\n * when it supplied none.\n *\n * The grid is whatever the cloud was made from: an object's mask, which spans\n * its bounding box rather than the frame, or the depth map itself, which spans\n * the whole frame. Either way (i, j) is a source coordinate only via that box,\n * which cloudOfObject() and cloudOfDepth() record - so atSource() needs one of\n * those two.\n */\nexport class PointCloud {\n readonly width: number\n readonly height: number\n /** xyz per pixel, row-major; an omitted point is NaN in all three. */\n readonly points: Float32Array\n private readonly box: CloudBox | undefined\n\n constructor(width: number, height: number, points: Float32Array, box?: CloudBox) {\n this.width = width\n this.height = height\n this.points = points\n this.box = box\n }\n\n /**\n * The world point for pixel (i, j), or undefined where the worker placed none.\n *\n * (i, j) indexes the cloud's own grid - the mask bitmap, or the depth map\n * for a scene cloud: i is the column, j is the row.\n */\n public at(i: number, j: number): Vector3 | undefined {\n if (!(i >= 0 && i < this.width && j >= 0 && j < this.height)) {\n throw new Error(`(${i}, ${j}) is outside a ${this.width}x${this.height} cloud`)\n }\n const offset = (j * this.width + i) * VALUES_PER_POINT\n const x = this.points[offset]\n const y = this.points[offset + 1]\n const z = this.points[offset + 2]\n if (Number.isNaN(x) || Number.isNaN(y) || Number.isNaN(z)) {\n return undefined\n }\n return { x, y, z }\n }\n\n /**\n * The world point for a source frame coordinate inside the cloud's box.\n *\n * Needs a cloud built with cloudOfObject(), or with cloudOfDepth() and the\n * frame size: the grid covers a box, and nothing else knows where it sits.\n */\n public atSource(x: number, y: number): Vector3 | undefined {\n if (this.box === undefined) {\n throw new Error('atSource needs a box; build with cloudOfObject or cloudOfDepth')\n }\n if (!(this.box.width > 0) || !(this.box.height > 0)) {\n throw new Error(`invalid bounding box extent: ${this.box.width}x${this.box.height}`)\n }\n // the inverse of the worker's own grid-to-source transform, which\n // samples pixel centres: source = box + ((index + 0.5) / extent) * box_extent\n const i = Math.min(Math.max(Math.floor(((x - this.box.x) / this.box.width) * this.width), 0), this.width - 1)\n const j = Math.min(Math.max(Math.floor(((y - this.box.y) / this.box.height) * this.height), 0), this.height - 1)\n return this.at(i, j)\n }\n\n public isPlaced(i: number, j: number): boolean {\n return this.at(i, j) !== undefined\n }\n\n /**\n * Just the points the worker placed.\n *\n * The shape a scatter plot or an export wants: the grid with its NaN holes\n * dropped, and no mask to apply first.\n */\n public get placedPoints(): Vector3[] {\n const placed: Vector3[] = []\n for (let offset = 0; offset < this.points.length; offset += VALUES_PER_POINT) {\n const x = this.points[offset]\n const y = this.points[offset + 1]\n const z = this.points[offset + 2]\n if (!Number.isNaN(x) && !Number.isNaN(y) && !Number.isNaN(z)) {\n placed.push({ x, y, z })\n }\n }\n return placed\n }\n\n /**\n * Per axis (min, max) in meters over the placed points, or undefined if none were.\n *\n * The counterpart to DepthMap's finiteMin/finiteMax, which are one axis\n * because a depth map has one value per pixel.\n */\n public get bounds(): CloudBounds | undefined {\n let found = false\n const min = { x: Number.POSITIVE_INFINITY, y: Number.POSITIVE_INFINITY, z: Number.POSITIVE_INFINITY }\n const max = { x: Number.NEGATIVE_INFINITY, y: Number.NEGATIVE_INFINITY, z: Number.NEGATIVE_INFINITY }\n for (let offset = 0; offset < this.points.length; offset += VALUES_PER_POINT) {\n const x = this.points[offset]\n const y = this.points[offset + 1]\n const z = this.points[offset + 2]\n if (Number.isNaN(x) || Number.isNaN(y) || Number.isNaN(z)) {\n continue\n }\n found = true\n min.x = Math.min(min.x, x)\n min.y = Math.min(min.y, y)\n min.z = Math.min(min.z, z)\n max.x = Math.max(max.x, x)\n max.y = Math.max(max.y, y)\n max.z = Math.max(max.z, z)\n }\n return found ? { min, max } : undefined\n }\n}\n\nexport interface Vector3 {\n x: number\n y: number\n z: number\n}\n\nexport interface CloudBounds {\n min: Vector3\n max: Vector3\n}\n\nfunction decode(width: number, height: number, world: string, box: CloudBox | undefined): PointCloud {\n if (!Number.isSafeInteger(width) || width <= 0 || !Number.isSafeInteger(height) || height <= 0) {\n throw new Error(`invalid point cloud dimensions: ${width}x${height}`)\n }\n const bytes = base64ToBytes(world)\n const count = width * height * VALUES_PER_POINT\n if (bytes.byteLength !== count * 4) {\n throw new Error(`'world' holds ${bytes.byteLength} bytes, expected ${count * 4} for ${width}x${height} xyz float32`)\n }\n let points: Float32Array\n if (isLittleEndianPlatform) {\n // copy to a fresh, aligned buffer (e.g. Buffer pool slices can be unaligned)\n const aligned = new Uint8Array(bytes)\n points = new Float32Array(aligned.buffer, 0, count)\n } else {\n const view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength)\n points = new Float32Array(count)\n for (let i = 0; i < count; i++) {\n points[i] = view.getFloat32(i * 4, true)\n }\n }\n return new PointCloud(width, height, points, box)\n}\n\n/** A mask's point cloud, or undefined if it carries none. */\nexport function decodePointCloud(mask: Mask | undefined, box?: CloudBox): PointCloud | undefined {\n if (mask === undefined || mask.world === undefined) {\n return undefined\n }\n return decode(mask.width, mask.height, mask.world, box)\n}\n\n/**\n * The point cloud of a predicted object's mask, or undefined if it has none.\n *\n * Records the object's bounding box, so atSource() works.\n */\nexport function cloudOfObject(obj: PredictedObject | undefined): PointCloud | undefined {\n if (obj === undefined || obj.mask === undefined) {\n return undefined\n }\n return decodePointCloud(obj.mask, { x: obj.x, y: obj.y, width: obj.width, height: obj.height })\n}\n\n/**\n * The scene point cloud of a frame level depth map, or undefined if it has none.\n *\n * Present when the Pop asked for `depthMap.toWorld`. Unlike a mask cloud this\n * one spans the whole frame, so its grid is the depth map's rather than an\n * object's bounding box - and at(i, j) indexes map pixels, the same index that\n * pixel's value sits at in `depth.values`.\n *\n * Pass the prediction's source_width/source_height to enable atSource(); the\n * frame is the box in this case.\n */\nexport function cloudOfDepth(depth: Depth | undefined, sourceWidth?: number, sourceHeight?: number): PointCloud | undefined {\n if (depth === undefined || depth.world === undefined) {\n return undefined\n }\n const box = sourceWidth && sourceHeight ? { x: 0, y: 0, width: sourceWidth, height: sourceHeight } : undefined\n return decode(depth.width, depth.height, depth.world, box)\n}\n\n/**\n * Every point cloud in a prediction, outermost object first.\n *\n * An array rather than a single value like decodeDepthMap(), because a cloud\n * belongs to one object's mask and a prediction carries as many as it has\n * masked objects. Nested objects are included. A scene cloud, if the Pop asked\n * for one, comes last - appended rather than inserted so an existing index into\n * the object clouds keeps meaning what it did.\n */\nexport function cloudsOfPrediction(prediction: Prediction | undefined): PointCloud[] {\n const clouds: PointCloud[] = []\n if (prediction === undefined) {\n return clouds\n }\n\n const walk = (objects: Array<PredictedObject> | undefined): void => {\n for (const obj of objects ?? []) {\n const cloud = cloudOfObject(obj)\n if (cloud !== undefined) {\n clouds.push(cloud)\n }\n walk(obj.objects)\n }\n }\n walk(prediction.objects)\n\n const scene = cloudOfDepth(prediction.depth, prediction.source_width, prediction.source_height)\n if (scene !== undefined) {\n clouds.push(scene)\n }\n return clouds\n}\n","import { WebrtcBase } from './webrtc_base'\nimport { Logger } from 'pino'\nimport { WorkerSession } from '../worker/worker_types'\nimport { HttpClient } from '../options'\n\nexport class WebrtcWhep extends WebrtcBase {\n private _stream: MediaStream | null\n constructor(ingressId: string, getSession: () => Promise<WorkerSession>, client: HttpClient, requestLogger: Logger) {\n super(getSession, client, ingressId, 'liveIngress/whep', false, requestLogger)\n this._stream = null\n }\n public override async close(): Promise<void> {\n const stream = this._stream\n this._stream = null\n if (stream) {\n const tracks = stream.getTracks()\n tracks.forEach(track => {\n track.stop()\n })\n }\n return super.close()\n }\n\n public async stream(): Promise<MediaStream> {\n if (this._stream) {\n return Promise.resolve(this._stream)\n } else {\n return Promise.reject('fetching stream failed')\n }\n }\n\n public async start(): Promise<WebrtcWhep> {\n const session = await this._getSession()\n const egressUrl = this.gresUrl(session)\n /* According to https://www.ietf.org/archive/id/draft-ietf-wish-whip-01.html\n this should be a `OPTIONS` request. Unfortunately a lot of CORS middlewares\n hijack the OPTIONS request and only return those headers that are necessary\n for the CORS preflight protocol.\n As workaround, our media endpoint expose a equivalent `GET` request to fake\n the `OPTIONS` request and bypass the CORS preflight trap\n */\n const response = await this._client.fetch(egressUrl, {\n headers: session.authenticationHeaders(),\n method: 'GET',\n })\n if (response.status >= 300) {\n return Promise.reject(`unknown status code for GET '${egressUrl}': ${response.status} (${response.statusText})`)\n }\n return this.onIceServers(response)\n }\n\n protected async onRemoteAnswer(answer: RTCSessionDescription): Promise<WebrtcBase> {\n if (!this._pc) {\n throw new Error('onLocalOffer no peer connection')\n }\n\n await this._pc.setRemoteDescription(new RTCSessionDescription(answer))\n\n if (this._queuedCandidates.length !== 0) {\n await this.sendLocalCandidates(this._queuedCandidates)\n this._queuedCandidates = []\n }\n return this\n }\n\n private async onIceServers(response: Response): Promise<WebrtcWhep> {\n if (this._stream) {\n throw new Error('onIceServers has stream')\n }\n const pc = new RTCPeerConnection({\n iceServers: WebrtcBase.linkToIceServers(response.headers.get('Link')),\n })\n\n const direction = 'sendrecv'\n pc.addTransceiver('video', { direction })\n pc.onicecandidate = evt => this.onLocalCandidate(evt)\n\n this._pc = pc\n\n this._requestLogger.info(`onIceServers ${pc.iceConnectionState}`)\n\n return new Promise(async (resolve, reject) => {\n pc.ontrack = evt => {\n this._requestLogger.debug(`new track: ${evt.track.kind}`)\n this._stream = evt.streams[0] || null\n resolve(this)\n }\n pc.oniceconnectionstatechange = () => {\n switch (pc.iceConnectionState) {\n case 'failed':\n case 'disconnected':\n this._requestLogger.debug('oniceconnectionstatechange disconnected')\n reject(`peer connection: ${pc.iceConnectionState}`)\n break\n case 'connected':\n this._requestLogger.debug('oniceconnectionstatechange connected')\n break\n }\n }\n await this.onLocalOffer(await pc.createOffer())\n })\n }\n}\n"],"mappings":"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","names":["exports","module","exports","module","exports","charset","path","extension","EndpointState","PredictionVersion","VideoMode","PopComponentType","ForwardOperatorType","SelectMode","InferenceType","MotionModel","ContourType","message","_","uuidv4","import_uuid","path","mid","uuidv4","iteratorToStream","TransientPopId","path","headers","response","error","path","DataApiType","AutoAnnotateStatus","AssetStatus","AnnotationType","UserReview","AssetInclusionMode","AnnotationInclusionMode","AutoAnnotateTask","TranscodeMode","AreaType","ModelType","ModelTask","ModelStatus","ModelExportStatus","ExportedBy","ArtifactType","ModelTrainingStage","ChangeType","WorkflowPhase","ModelFormat","ModelPrecisionType","AssetUrlType","EvaluationStatus","TaskType","TaskMode","VlmAbilityStatus","urljoin","headers","msg","path","isLittleEndianPlatform","base64ToBytes","EyePop"]}