"use strict"; var __create = Object.create; var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __getProtoOf = Object.getPrototypeOf; var __hasOwnProp = Object.prototype.hasOwnProperty; var __commonJS = (cb, mod) => function __require() { return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; }; var __copyProps = (to, from, except, desc) => { if (from && typeof from === "object" || typeof from === "function") { for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); } return to; }; var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( // If the importer is in node compatibility mode or this is not an ESM // file that has been converted to a CommonJS file using a Babel- // compatible transform (i.e. "__esModule" has not been set), then set // "default" to the CommonJS "module.exports" for node compatibility. isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, mod )); // node_modules/.pnpm/negotiator@0.6.3/node_modules/negotiator/lib/charset.js var require_charset = __commonJS({ "node_modules/.pnpm/negotiator@0.6.3/node_modules/negotiator/lib/charset.js"(exports2, module2) { "use strict"; module2.exports = preferredCharsets; module2.exports.preferredCharsets = preferredCharsets; var simpleCharsetRegExp = /^\s*([^\s;]+)\s*(?:;(.*))?$/; function parseAcceptCharset(accept) { var accepts = accept.split(","); for (var i = 0, j = 0; i < accepts.length; i++) { var charset = parseCharset(accepts[i].trim(), i); if (charset) { accepts[j++] = charset; } } accepts.length = j; return accepts; } function parseCharset(str, i) { var match = simpleCharsetRegExp.exec(str); if (!match) return null; var charset = match[1]; var q = 1; if (match[2]) { var params = match[2].split(";"); for (var j = 0; j < params.length; j++) { var p = params[j].trim().split("="); if (p[0] === "q") { q = parseFloat(p[1]); break; } } } return { charset, q, i }; } function getCharsetPriority(charset, accepted, index) { var priority = { o: -1, q: 0, s: 0 }; for (var i = 0; i < accepted.length; i++) { var spec = specify(charset, accepted[i], index); if (spec && (priority.s - spec.s || priority.q - spec.q || priority.o - spec.o) < 0) { priority = spec; } } return priority; } function specify(charset, spec, index) { var s = 0; if (spec.charset.toLowerCase() === charset.toLowerCase()) { s |= 1; } else if (spec.charset !== "*") { return null; } return { i: index, o: spec.i, q: spec.q, s }; } function preferredCharsets(accept, provided) { var accepts = parseAcceptCharset(accept === void 0 ? "*" : accept || ""); if (!provided) { return accepts.filter(isQuality).sort(compareSpecs).map(getFullCharset); } var priorities = provided.map(function getPriority(type, index) { return getCharsetPriority(type, accepts, index); }); return priorities.filter(isQuality).sort(compareSpecs).map(function getCharset(priority) { return provided[priorities.indexOf(priority)]; }); } function compareSpecs(a, b) { return b.q - a.q || b.s - a.s || a.o - b.o || a.i - b.i || 0; } function getFullCharset(spec) { return spec.charset; } function isQuality(spec) { return spec.q > 0; } } }); // node_modules/.pnpm/negotiator@0.6.3/node_modules/negotiator/lib/encoding.js var require_encoding = __commonJS({ "node_modules/.pnpm/negotiator@0.6.3/node_modules/negotiator/lib/encoding.js"(exports2, module2) { "use strict"; module2.exports = preferredEncodings; module2.exports.preferredEncodings = preferredEncodings; var simpleEncodingRegExp = /^\s*([^\s;]+)\s*(?:;(.*))?$/; function parseAcceptEncoding(accept) { var accepts = accept.split(","); var hasIdentity = false; var minQuality = 1; for (var i = 0, j = 0; i < accepts.length; i++) { var encoding = parseEncoding(accepts[i].trim(), i); if (encoding) { accepts[j++] = encoding; hasIdentity = hasIdentity || specify("identity", encoding); minQuality = Math.min(minQuality, encoding.q || 1); } } if (!hasIdentity) { accepts[j++] = { encoding: "identity", q: minQuality, i }; } accepts.length = j; return accepts; } function parseEncoding(str, i) { var match = simpleEncodingRegExp.exec(str); if (!match) return null; var encoding = match[1]; var q = 1; if (match[2]) { var params = match[2].split(";"); for (var j = 0; j < params.length; j++) { var p = params[j].trim().split("="); if (p[0] === "q") { q = parseFloat(p[1]); break; } } } return { encoding, q, i }; } function getEncodingPriority(encoding, accepted, index) { var priority = { o: -1, q: 0, s: 0 }; for (var i = 0; i < accepted.length; i++) { var spec = specify(encoding, accepted[i], index); if (spec && (priority.s - spec.s || priority.q - spec.q || priority.o - spec.o) < 0) { priority = spec; } } return priority; } function specify(encoding, spec, index) { var s = 0; if (spec.encoding.toLowerCase() === encoding.toLowerCase()) { s |= 1; } else if (spec.encoding !== "*") { return null; } return { i: index, o: spec.i, q: spec.q, s }; } function preferredEncodings(accept, provided) { var accepts = parseAcceptEncoding(accept || ""); if (!provided) { return accepts.filter(isQuality).sort(compareSpecs).map(getFullEncoding); } var priorities = provided.map(function getPriority(type, index) { return getEncodingPriority(type, accepts, index); }); return priorities.filter(isQuality).sort(compareSpecs).map(function getEncoding(priority) { return provided[priorities.indexOf(priority)]; }); } function compareSpecs(a, b) { return b.q - a.q || b.s - a.s || a.o - b.o || a.i - b.i || 0; } function getFullEncoding(spec) { return spec.encoding; } function isQuality(spec) { return spec.q > 0; } } }); // node_modules/.pnpm/negotiator@0.6.3/node_modules/negotiator/lib/language.js var require_language = __commonJS({ "node_modules/.pnpm/negotiator@0.6.3/node_modules/negotiator/lib/language.js"(exports2, module2) { "use strict"; module2.exports = preferredLanguages; module2.exports.preferredLanguages = preferredLanguages; var simpleLanguageRegExp = /^\s*([^\s\-;]+)(?:-([^\s;]+))?\s*(?:;(.*))?$/; function parseAcceptLanguage(accept) { var accepts = accept.split(","); for (var i = 0, j = 0; i < accepts.length; i++) { var language = parseLanguage(accepts[i].trim(), i); if (language) { accepts[j++] = language; } } accepts.length = j; return accepts; } function parseLanguage(str, i) { var match = simpleLanguageRegExp.exec(str); if (!match) return null; var prefix = match[1]; var suffix = match[2]; var full = prefix; if (suffix) full += "-" + suffix; var q = 1; if (match[3]) { var params = match[3].split(";"); for (var j = 0; j < params.length; j++) { var p = params[j].split("="); if (p[0] === "q") q = parseFloat(p[1]); } } return { prefix, suffix, q, i, full }; } function getLanguagePriority(language, accepted, index) { var priority = { o: -1, q: 0, s: 0 }; for (var i = 0; i < accepted.length; i++) { var spec = specify(language, accepted[i], index); if (spec && (priority.s - spec.s || priority.q - spec.q || priority.o - spec.o) < 0) { priority = spec; } } return priority; } function specify(language, spec, index) { var p = parseLanguage(language); if (!p) return null; var s = 0; if (spec.full.toLowerCase() === p.full.toLowerCase()) { s |= 4; } else if (spec.prefix.toLowerCase() === p.full.toLowerCase()) { s |= 2; } else if (spec.full.toLowerCase() === p.prefix.toLowerCase()) { s |= 1; } else if (spec.full !== "*") { return null; } return { i: index, o: spec.i, q: spec.q, s }; } function preferredLanguages(accept, provided) { var accepts = parseAcceptLanguage(accept === void 0 ? "*" : accept || ""); if (!provided) { return accepts.filter(isQuality).sort(compareSpecs).map(getFullLanguage); } var priorities = provided.map(function getPriority(type, index) { return getLanguagePriority(type, accepts, index); }); return priorities.filter(isQuality).sort(compareSpecs).map(function getLanguage(priority) { return provided[priorities.indexOf(priority)]; }); } function compareSpecs(a, b) { return b.q - a.q || b.s - a.s || a.o - b.o || a.i - b.i || 0; } function getFullLanguage(spec) { return spec.full; } function isQuality(spec) { return spec.q > 0; } } }); // node_modules/.pnpm/negotiator@0.6.3/node_modules/negotiator/lib/mediaType.js var require_mediaType = __commonJS({ "node_modules/.pnpm/negotiator@0.6.3/node_modules/negotiator/lib/mediaType.js"(exports2, module2) { "use strict"; module2.exports = preferredMediaTypes; module2.exports.preferredMediaTypes = preferredMediaTypes; var simpleMediaTypeRegExp = /^\s*([^\s\/;]+)\/([^;\s]+)\s*(?:;(.*))?$/; function parseAccept(accept) { var accepts = splitMediaTypes(accept); for (var i = 0, j = 0; i < accepts.length; i++) { var mediaType = parseMediaType(accepts[i].trim(), i); if (mediaType) { accepts[j++] = mediaType; } } accepts.length = j; return accepts; } function parseMediaType(str, i) { var match = simpleMediaTypeRegExp.exec(str); if (!match) return null; var params = /* @__PURE__ */ Object.create(null); var q = 1; var subtype = match[2]; var type = match[1]; if (match[3]) { var kvps = splitParameters(match[3]).map(splitKeyValuePair); for (var j = 0; j < kvps.length; j++) { var pair = kvps[j]; var key = pair[0].toLowerCase(); var val = pair[1]; var value = val && val[0] === '"' && val[val.length - 1] === '"' ? val.substr(1, val.length - 2) : val; if (key === "q") { q = parseFloat(value); break; } params[key] = value; } } return { type, subtype, params, q, i }; } function getMediaTypePriority(type, accepted, index) { var priority = { o: -1, q: 0, s: 0 }; for (var i = 0; i < accepted.length; i++) { var spec = specify(type, accepted[i], index); if (spec && (priority.s - spec.s || priority.q - spec.q || priority.o - spec.o) < 0) { priority = spec; } } return priority; } function specify(type, spec, index) { var p = parseMediaType(type); var s = 0; if (!p) { return null; } if (spec.type.toLowerCase() == p.type.toLowerCase()) { s |= 4; } else if (spec.type != "*") { return null; } if (spec.subtype.toLowerCase() == p.subtype.toLowerCase()) { s |= 2; } else if (spec.subtype != "*") { return null; } var keys = Object.keys(spec.params); if (keys.length > 0) { if (keys.every(function(k) { return spec.params[k] == "*" || (spec.params[k] || "").toLowerCase() == (p.params[k] || "").toLowerCase(); })) { s |= 1; } else { return null; } } return { i: index, o: spec.i, q: spec.q, s }; } function preferredMediaTypes(accept, provided) { var accepts = parseAccept(accept === void 0 ? "*/*" : accept || ""); if (!provided) { return accepts.filter(isQuality).sort(compareSpecs).map(getFullType); } var priorities = provided.map(function getPriority(type, index) { return getMediaTypePriority(type, accepts, index); }); return priorities.filter(isQuality).sort(compareSpecs).map(function getType(priority) { return provided[priorities.indexOf(priority)]; }); } function compareSpecs(a, b) { return b.q - a.q || b.s - a.s || a.o - b.o || a.i - b.i || 0; } function getFullType(spec) { return spec.type + "/" + spec.subtype; } function isQuality(spec) { return spec.q > 0; } function quoteCount(string) { var count = 0; var index = 0; while ((index = string.indexOf('"', index)) !== -1) { count++; index++; } return count; } function splitKeyValuePair(str) { var index = str.indexOf("="); var key; var val; if (index === -1) { key = str; } else { key = str.substr(0, index); val = str.substr(index + 1); } return [key, val]; } function splitMediaTypes(accept) { var accepts = accept.split(","); for (var i = 1, j = 0; i < accepts.length; i++) { if (quoteCount(accepts[j]) % 2 == 0) { accepts[++j] = accepts[i]; } else { accepts[j] += "," + accepts[i]; } } accepts.length = j + 1; return accepts; } function splitParameters(str) { var parameters = str.split(";"); for (var i = 1, j = 0; i < parameters.length; i++) { if (quoteCount(parameters[j]) % 2 == 0) { parameters[++j] = parameters[i]; } else { parameters[j] += ";" + parameters[i]; } } parameters.length = j + 1; for (var i = 0; i < parameters.length; i++) { parameters[i] = parameters[i].trim(); } return parameters; } } }); // node_modules/.pnpm/negotiator@0.6.3/node_modules/negotiator/index.js var require_negotiator = __commonJS({ "node_modules/.pnpm/negotiator@0.6.3/node_modules/negotiator/index.js"(exports2, module2) { "use strict"; var preferredCharsets = require_charset(); var preferredEncodings = require_encoding(); var preferredLanguages = require_language(); var preferredMediaTypes = require_mediaType(); module2.exports = Negotiator; module2.exports.Negotiator = Negotiator; function Negotiator(request) { if (!(this instanceof Negotiator)) { return new Negotiator(request); } this.request = request; } Negotiator.prototype.charset = function charset(available) { var set = this.charsets(available); return set && set[0]; }; Negotiator.prototype.charsets = function charsets(available) { return preferredCharsets(this.request.headers["accept-charset"], available); }; Negotiator.prototype.encoding = function encoding(available) { var set = this.encodings(available); return set && set[0]; }; Negotiator.prototype.encodings = function encodings(available) { return preferredEncodings(this.request.headers["accept-encoding"], available); }; Negotiator.prototype.language = function language(available) { var set = this.languages(available); return set && set[0]; }; Negotiator.prototype.languages = function languages(available) { return preferredLanguages(this.request.headers["accept-language"], available); }; Negotiator.prototype.mediaType = function mediaType(available) { var set = this.mediaTypes(available); return set && set[0]; }; Negotiator.prototype.mediaTypes = function mediaTypes(available) { return preferredMediaTypes(this.request.headers.accept, available); }; Negotiator.prototype.preferredCharset = Negotiator.prototype.charset; Negotiator.prototype.preferredCharsets = Negotiator.prototype.charsets; Negotiator.prototype.preferredEncoding = Negotiator.prototype.encoding; Negotiator.prototype.preferredEncodings = Negotiator.prototype.encodings; Negotiator.prototype.preferredLanguage = Negotiator.prototype.language; Negotiator.prototype.preferredLanguages = Negotiator.prototype.languages; Negotiator.prototype.preferredMediaType = Negotiator.prototype.mediaType; Negotiator.prototype.preferredMediaTypes = Negotiator.prototype.mediaTypes; } }); // node_modules/.pnpm/mime-db@1.52.0/node_modules/mime-db/db.json var require_db = __commonJS({ "node_modules/.pnpm/mime-db@1.52.0/node_modules/mime-db/db.json"(exports2, module2) { module2.exports = { "application/1d-interleaved-parityfec": { source: "iana" }, "application/3gpdash-qoe-report+xml": { source: "iana", charset: "UTF-8", compressible: true }, "application/3gpp-ims+xml": { source: "iana", compressible: true }, "application/3gpphal+json": { source: "iana", compressible: true }, "application/3gpphalforms+json": { source: "iana", compressible: true }, "application/a2l": { source: "iana" }, "application/ace+cbor": { source: "iana" }, "application/activemessage": { source: "iana" }, "application/activity+json": { source: "iana", compressible: true }, "application/alto-costmap+json": { source: "iana", compressible: true }, "application/alto-costmapfilter+json": { source: "iana", compressible: true }, "application/alto-directory+json": { source: "iana", compressible: true }, "application/alto-endpointcost+json": { source: "iana", compressible: true }, "application/alto-endpointcostparams+json": { source: "iana", compressible: true }, "application/alto-endpointprop+json": { source: "iana", compressible: true }, "application/alto-endpointpropparams+json": { source: "iana", compressible: true }, "application/alto-error+json": { source: "iana", compressible: true }, "application/alto-networkmap+json": { source: "iana", compressible: true }, "application/alto-networkmapfilter+json": { source: "iana", compressible: true }, "application/alto-updatestreamcontrol+json": { source: "iana", compressible: true }, "application/alto-updatestreamparams+json": { source: "iana", compressible: true }, "application/aml": { source: "iana" }, "application/andrew-inset": { source: "iana", extensions: ["ez"] }, "application/applefile": { source: "iana" }, "application/applixware": { source: "apache", extensions: ["aw"] }, "application/at+jwt": { source: "iana" }, "application/atf": { source: "iana" }, "application/atfx": { source: "iana" }, "application/atom+xml": { source: "iana", compressible: true, extensions: ["atom"] }, "application/atomcat+xml": { source: "iana", compressible: true, extensions: ["atomcat"] }, "application/atomdeleted+xml": { source: "iana", compressible: true, extensions: ["atomdeleted"] }, "application/atomicmail": { source: "iana" }, "application/atomsvc+xml": { source: "iana", compressible: true, extensions: ["atomsvc"] }, "application/atsc-dwd+xml": { source: "iana", compressible: true, extensions: ["dwd"] }, "application/atsc-dynamic-event-message": { source: "iana" }, "application/atsc-held+xml": { source: "iana", compressible: true, extensions: ["held"] }, "application/atsc-rdt+json": { source: "iana", compressible: true }, "application/atsc-rsat+xml": { source: "iana", compressible: true, extensions: ["rsat"] }, "application/atxml": { source: "iana" }, "application/auth-policy+xml": { source: "iana", compressible: true }, "application/bacnet-xdd+zip": { source: "iana", compressible: false }, "application/batch-smtp": { source: "iana" }, "application/bdoc": { compressible: false, extensions: ["bdoc"] }, "application/beep+xml": { source: "iana", charset: "UTF-8", compressible: true }, "application/calendar+json": { source: "iana", compressible: true }, "application/calendar+xml": { source: "iana", compressible: true, extensions: ["xcs"] }, "application/call-completion": { source: "iana" }, "application/cals-1840": { source: "iana" }, "application/captive+json": { source: "iana", compressible: true }, "application/cbor": { source: "iana" }, "application/cbor-seq": { source: "iana" }, "application/cccex": { source: "iana" }, "application/ccmp+xml": { source: "iana", compressible: true }, "application/ccxml+xml": { source: "iana", compressible: true, extensions: ["ccxml"] }, "application/cdfx+xml": { source: "iana", compressible: true, extensions: ["cdfx"] }, "application/cdmi-capability": { source: "iana", extensions: ["cdmia"] }, "application/cdmi-container": { source: "iana", extensions: ["cdmic"] }, "application/cdmi-domain": { source: "iana", extensions: ["cdmid"] }, "application/cdmi-object": { source: "iana", extensions: ["cdmio"] }, "application/cdmi-queue": { source: "iana", extensions: ["cdmiq"] }, "application/cdni": { source: "iana" }, "application/cea": { source: "iana" }, "application/cea-2018+xml": { source: "iana", compressible: true }, "application/cellml+xml": { source: "iana", compressible: true }, "application/cfw": { source: "iana" }, "application/city+json": { source: "iana", compressible: true }, "application/clr": { source: "iana" }, "application/clue+xml": { source: "iana", compressible: true }, "application/clue_info+xml": { source: "iana", compressible: true }, "application/cms": { source: "iana" }, "application/cnrp+xml": { source: "iana", compressible: true }, "application/coap-group+json": { source: "iana", compressible: true }, "application/coap-payload": { source: "iana" }, "application/commonground": { source: "iana" }, "application/conference-info+xml": { source: "iana", compressible: true }, "application/cose": { source: "iana" }, "application/cose-key": { source: "iana" }, "application/cose-key-set": { source: "iana" }, "application/cpl+xml": { source: "iana", compressible: true, extensions: ["cpl"] }, "application/csrattrs": { source: "iana" }, "application/csta+xml": { source: "iana", compressible: true }, "application/cstadata+xml": { source: "iana", compressible: true }, "application/csvm+json": { source: "iana", compressible: true }, "application/cu-seeme": { source: "apache", extensions: ["cu"] }, "application/cwt": { source: "iana" }, "application/cybercash": { source: "iana" }, "application/dart": { compressible: true }, "application/dash+xml": { source: "iana", compressible: true, extensions: ["mpd"] }, "application/dash-patch+xml": { source: "iana", compressible: true, extensions: ["mpp"] }, "application/dashdelta": { source: "iana" }, "application/davmount+xml": { source: "iana", compressible: true, extensions: ["davmount"] }, "application/dca-rft": { source: "iana" }, "application/dcd": { source: "iana" }, "application/dec-dx": { source: "iana" }, "application/dialog-info+xml": { source: "iana", compressible: true }, "application/dicom": { source: "iana" }, "application/dicom+json": { source: "iana", compressible: true }, "application/dicom+xml": { source: "iana", compressible: true }, "application/dii": { source: "iana" }, "application/dit": { source: "iana" }, "application/dns": { source: "iana" }, "application/dns+json": { source: "iana", compressible: true }, "application/dns-message": { source: "iana" }, "application/docbook+xml": { source: "apache", compressible: true, extensions: ["dbk"] }, "application/dots+cbor": { source: "iana" }, "application/dskpp+xml": { source: "iana", compressible: true }, "application/dssc+der": { source: "iana", extensions: ["dssc"] }, "application/dssc+xml": { source: "iana", compressible: true, extensions: ["xdssc"] }, "application/dvcs": { source: "iana" }, "application/ecmascript": { source: "iana", compressible: true, extensions: ["es", "ecma"] }, "application/edi-consent": { source: "iana" }, "application/edi-x12": { source: "iana", compressible: false }, "application/edifact": { source: "iana", compressible: false }, "application/efi": { source: "iana" }, "application/elm+json": { source: "iana", charset: "UTF-8", compressible: true }, "application/elm+xml": { source: "iana", compressible: true }, "application/emergencycalldata.cap+xml": { source: "iana", charset: "UTF-8", compressible: true }, "application/emergencycalldata.comment+xml": { source: "iana", compressible: true }, "application/emergencycalldata.control+xml": { source: "iana", compressible: true }, "application/emergencycalldata.deviceinfo+xml": { source: "iana", compressible: true }, "application/emergencycalldata.ecall.msd": { source: "iana" }, "application/emergencycalldata.providerinfo+xml": { source: "iana", compressible: true }, "application/emergencycalldata.serviceinfo+xml": { source: "iana", compressible: true }, "application/emergencycalldata.subscriberinfo+xml": { source: "iana", compressible: true }, "application/emergencycalldata.veds+xml": { source: "iana", compressible: true }, "application/emma+xml": { source: "iana", compressible: true, extensions: ["emma"] }, "application/emotionml+xml": { source: "iana", compressible: true, extensions: ["emotionml"] }, "application/encaprtp": { source: "iana" }, "application/epp+xml": { source: "iana", compressible: true }, "application/epub+zip": { source: "iana", compressible: false, extensions: ["epub"] }, "application/eshop": { source: "iana" }, "application/exi": { source: "iana", extensions: ["exi"] }, "application/expect-ct-report+json": { source: "iana", compressible: true }, "application/express": { source: "iana", extensions: ["exp"] }, "application/fastinfoset": { source: "iana" }, "application/fastsoap": { source: "iana" }, "application/fdt+xml": { source: "iana", compressible: true, extensions: ["fdt"] }, "application/fhir+json": { source: "iana", charset: "UTF-8", compressible: true }, "application/fhir+xml": { source: "iana", charset: "UTF-8", compressible: true }, "application/fido.trusted-apps+json": { compressible: true }, "application/fits": { source: "iana" }, "application/flexfec": { source: "iana" }, "application/font-sfnt": { source: "iana" }, "application/font-tdpfr": { source: "iana", extensions: ["pfr"] }, "application/font-woff": { source: "iana", compressible: false }, "application/framework-attributes+xml": { source: "iana", compressible: true }, "application/geo+json": { source: "iana", compressible: true, extensions: ["geojson"] }, "application/geo+json-seq": { source: "iana" }, "application/geopackage+sqlite3": { source: "iana" }, "application/geoxacml+xml": { source: "iana", compressible: true }, "application/gltf-buffer": { source: "iana" }, "application/gml+xml": { source: "iana", compressible: true, extensions: ["gml"] }, "application/gpx+xml": { source: "apache", compressible: true, extensions: ["gpx"] }, "application/gxf": { source: "apache", extensions: ["gxf"] }, "application/gzip": { source: "iana", compressible: false, extensions: ["gz"] }, "application/h224": { source: "iana" }, "application/held+xml": { source: "iana", compressible: true }, "application/hjson": { extensions: ["hjson"] }, "application/http": { source: "iana" }, "application/hyperstudio": { source: "iana", extensions: ["stk"] }, "application/ibe-key-request+xml": { source: "iana", compressible: true }, "application/ibe-pkg-reply+xml": { source: "iana", compressible: true }, "application/ibe-pp-data": { source: "iana" }, "application/iges": { source: "iana" }, "application/im-iscomposing+xml": { source: "iana", charset: "UTF-8", compressible: true }, "application/index": { source: "iana" }, "application/index.cmd": { source: "iana" }, "application/index.obj": { source: "iana" }, "application/index.response": { source: "iana" }, "application/index.vnd": { source: "iana" }, "application/inkml+xml": { source: "iana", compressible: true, extensions: ["ink", "inkml"] }, "application/iotp": { source: "iana" }, "application/ipfix": { source: "iana", extensions: ["ipfix"] }, "application/ipp": { source: "iana" }, "application/isup": { source: "iana" }, "application/its+xml": { source: "iana", compressible: true, extensions: ["its"] }, "application/java-archive": { source: "apache", compressible: false, extensions: ["jar", "war", "ear"] }, "application/java-serialized-object": { source: "apache", compressible: false, extensions: ["ser"] }, "application/java-vm": { source: "apache", compressible: false, extensions: ["class"] }, "application/javascript": { source: "iana", charset: "UTF-8", compressible: true, extensions: ["js", "mjs"] }, "application/jf2feed+json": { source: "iana", compressible: true }, "application/jose": { source: "iana" }, "application/jose+json": { source: "iana", compressible: true }, "application/jrd+json": { source: "iana", compressible: true }, "application/jscalendar+json": { source: "iana", compressible: true }, "application/json": { source: "iana", charset: "UTF-8", compressible: true, extensions: ["json", "map"] }, "application/json-patch+json": { source: "iana", compressible: true }, "application/json-seq": { source: "iana" }, "application/json5": { extensions: ["json5"] }, "application/jsonml+json": { source: "apache", compressible: true, extensions: ["jsonml"] }, "application/jwk+json": { source: "iana", compressible: true }, "application/jwk-set+json": { source: "iana", compressible: true }, "application/jwt": { source: "iana" }, "application/kpml-request+xml": { source: "iana", compressible: true }, "application/kpml-response+xml": { source: "iana", compressible: true }, "application/ld+json": { source: "iana", compressible: true, extensions: ["jsonld"] }, "application/lgr+xml": { source: "iana", compressible: true, extensions: ["lgr"] }, "application/link-format": { source: "iana" }, "application/load-control+xml": { source: "iana", compressible: true }, "application/lost+xml": { source: "iana", compressible: true, extensions: ["lostxml"] }, "application/lostsync+xml": { source: "iana", compressible: true }, "application/lpf+zip": { source: "iana", compressible: false }, "application/lxf": { source: "iana" }, "application/mac-binhex40": { source: "iana", extensions: ["hqx"] }, "application/mac-compactpro": { source: "apache", extensions: ["cpt"] }, "application/macwriteii": { source: "iana" }, "application/mads+xml": { source: "iana", compressible: true, extensions: ["mads"] }, "application/manifest+json": { source: "iana", charset: "UTF-8", compressible: true, extensions: ["webmanifest"] }, "application/marc": { source: "iana", extensions: ["mrc"] }, "application/marcxml+xml": { source: "iana", compressible: true, extensions: ["mrcx"] }, "application/mathematica": { source: "iana", extensions: ["ma", "nb", "mb"] }, "application/mathml+xml": { source: "iana", compressible: true, extensions: ["mathml"] }, "application/mathml-content+xml": { source: "iana", compressible: true }, "application/mathml-presentation+xml": { source: "iana", compressible: true }, "application/mbms-associated-procedure-description+xml": { source: "iana", compressible: true }, "application/mbms-deregister+xml": { source: "iana", compressible: true }, "application/mbms-envelope+xml": { source: "iana", compressible: true }, "application/mbms-msk+xml": { source: "iana", compressible: true }, "application/mbms-msk-response+xml": { source: "iana", compressible: true }, "application/mbms-protection-description+xml": { source: "iana", compressible: true }, "application/mbms-reception-report+xml": { source: "iana", compressible: true }, "application/mbms-register+xml": { source: "iana", compressible: true }, "application/mbms-register-response+xml": { source: "iana", compressible: true }, "application/mbms-schedule+xml": { source: "iana", compressible: true }, "application/mbms-user-service-description+xml": { source: "iana", compressible: true }, "application/mbox": { source: "iana", extensions: ["mbox"] }, "application/media-policy-dataset+xml": { source: "iana", compressible: true, extensions: ["mpf"] }, "application/media_control+xml": { source: "iana", compressible: true }, "application/mediaservercontrol+xml": { source: "iana", compressible: true, extensions: ["mscml"] }, "application/merge-patch+json": { source: "iana", compressible: true }, "application/metalink+xml": { source: "apache", compressible: true, extensions: ["metalink"] }, "application/metalink4+xml": { source: "iana", compressible: true, extensions: ["meta4"] }, "application/mets+xml": { source: "iana", compressible: true, extensions: ["mets"] }, "application/mf4": { source: "iana" }, "application/mikey": { source: "iana" }, "application/mipc": { source: "iana" }, "application/missing-blocks+cbor-seq": { source: "iana" }, "application/mmt-aei+xml": { source: "iana", compressible: true, extensions: ["maei"] }, "application/mmt-usd+xml": { source: "iana", compressible: true, extensions: ["musd"] }, "application/mods+xml": { source: "iana", compressible: true, extensions: ["mods"] }, "application/moss-keys": { source: "iana" }, "application/moss-signature": { source: "iana" }, "application/mosskey-data": { source: "iana" }, "application/mosskey-request": { source: "iana" }, "application/mp21": { source: "iana", extensions: ["m21", "mp21"] }, "application/mp4": { source: "iana", extensions: ["mp4s", "m4p"] }, "application/mpeg4-generic": { source: "iana" }, "application/mpeg4-iod": { source: "iana" }, "application/mpeg4-iod-xmt": { source: "iana" }, "application/mrb-consumer+xml": { source: "iana", compressible: true }, "application/mrb-publish+xml": { source: "iana", compressible: true }, "application/msc-ivr+xml": { source: "iana", charset: "UTF-8", compressible: true }, "application/msc-mixer+xml": { source: "iana", charset: "UTF-8", compressible: true }, "application/msword": { source: "iana", compressible: false, extensions: ["doc", "dot"] }, "application/mud+json": { source: "iana", compressible: true }, "application/multipart-core": { source: "iana" }, "application/mxf": { source: "iana", extensions: ["mxf"] }, "application/n-quads": { source: "iana", extensions: ["nq"] }, "application/n-triples": { source: "iana", extensions: ["nt"] }, "application/nasdata": { source: "iana" }, "application/news-checkgroups": { source: "iana", charset: "US-ASCII" }, "application/news-groupinfo": { source: "iana", charset: "US-ASCII" }, "application/news-transmission": { source: "iana" }, "application/nlsml+xml": { source: "iana", compressible: true }, "application/node": { source: "iana", extensions: ["cjs"] }, "application/nss": { source: "iana" }, "application/oauth-authz-req+jwt": { source: "iana" }, "application/oblivious-dns-message": { source: "iana" }, "application/ocsp-request": { source: "iana" }, "application/ocsp-response": { source: "iana" }, "application/octet-stream": { source: "iana", compressible: false, extensions: ["bin", "dms", "lrf", "mar", "so", "dist", "distz", "pkg", "bpk", "dump", "elc", "deploy", "exe", "dll", "deb", "dmg", "iso", "img", "msi", "msp", "msm", "buffer"] }, "application/oda": { source: "iana", extensions: ["oda"] }, "application/odm+xml": { source: "iana", compressible: true }, "application/odx": { source: "iana" }, "application/oebps-package+xml": { source: "iana", compressible: true, extensions: ["opf"] }, "application/ogg": { source: "iana", compressible: false, extensions: ["ogx"] }, "application/omdoc+xml": { source: "apache", compressible: true, extensions: ["omdoc"] }, "application/onenote": { source: "apache", extensions: ["onetoc", "onetoc2", "onetmp", "onepkg"] }, "application/opc-nodeset+xml": { source: "iana", compressible: true }, "application/oscore": { source: "iana" }, "application/oxps": { source: "iana", extensions: ["oxps"] }, "application/p21": { source: "iana" }, "application/p21+zip": { source: "iana", compressible: false }, "application/p2p-overlay+xml": { source: "iana", compressible: true, extensions: ["relo"] }, "application/parityfec": { source: "iana" }, "application/passport": { source: "iana" }, "application/patch-ops-error+xml": { source: "iana", compressible: true, extensions: ["xer"] }, "application/pdf": { source: "iana", compressible: false, extensions: ["pdf"] }, "application/pdx": { source: "iana" }, "application/pem-certificate-chain": { source: "iana" }, "application/pgp-encrypted": { source: "iana", compressible: false, extensions: ["pgp"] }, "application/pgp-keys": { source: "iana", extensions: ["asc"] }, "application/pgp-signature": { source: "iana", extensions: ["asc", "sig"] }, "application/pics-rules": { source: "apache", extensions: ["prf"] }, "application/pidf+xml": { source: "iana", charset: "UTF-8", compressible: true }, "application/pidf-diff+xml": { source: "iana", charset: "UTF-8", compressible: true }, "application/pkcs10": { source: "iana", extensions: ["p10"] }, "application/pkcs12": { source: "iana" }, "application/pkcs7-mime": { source: "iana", extensions: ["p7m", "p7c"] }, "application/pkcs7-signature": { source: "iana", extensions: ["p7s"] }, "application/pkcs8": { source: "iana", extensions: ["p8"] }, "application/pkcs8-encrypted": { source: "iana" }, "application/pkix-attr-cert": { source: "iana", extensions: ["ac"] }, "application/pkix-cert": { source: "iana", extensions: ["cer"] }, "application/pkix-crl": { source: "iana", extensions: ["crl"] }, "application/pkix-pkipath": { source: "iana", extensions: ["pkipath"] }, "application/pkixcmp": { source: "iana", extensions: ["pki"] }, "application/pls+xml": { source: "iana", compressible: true, extensions: ["pls"] }, "application/poc-settings+xml": { source: "iana", charset: "UTF-8", compressible: true }, "application/postscript": { source: "iana", compressible: true, extensions: ["ai", "eps", "ps"] }, "application/ppsp-tracker+json": { source: "iana", compressible: true }, "application/problem+json": { source: "iana", compressible: true }, "application/problem+xml": { source: "iana", compressible: true }, "application/provenance+xml": { source: "iana", compressible: true, extensions: ["provx"] }, "application/prs.alvestrand.titrax-sheet": { source: "iana" }, "application/prs.cww": { source: "iana", extensions: ["cww"] }, "application/prs.cyn": { source: "iana", charset: "7-BIT" }, "application/prs.hpub+zip": { source: "iana", compressible: false }, "application/prs.nprend": { source: "iana" }, "application/prs.plucker": { source: "iana" }, "application/prs.rdf-xml-crypt": { source: "iana" }, "application/prs.xsf+xml": { source: "iana", compressible: true }, "application/pskc+xml": { source: "iana", compressible: true, extensions: ["pskcxml"] }, "application/pvd+json": { source: "iana", compressible: true }, "application/qsig": { source: "iana" }, "application/raml+yaml": { compressible: true, extensions: ["raml"] }, "application/raptorfec": { source: "iana" }, "application/rdap+json": { source: "iana", compressible: true }, "application/rdf+xml": { source: "iana", compressible: true, extensions: ["rdf", "owl"] }, "application/reginfo+xml": { source: "iana", compressible: true, extensions: ["rif"] }, "application/relax-ng-compact-syntax": { source: "iana", extensions: ["rnc"] }, "application/remote-printing": { source: "iana" }, "application/reputon+json": { source: "iana", compressible: true }, "application/resource-lists+xml": { source: "iana", compressible: true, extensions: ["rl"] }, "application/resource-lists-diff+xml": { source: "iana", compressible: true, extensions: ["rld"] }, "application/rfc+xml": { source: "iana", compressible: true }, "application/riscos": { source: "iana" }, "application/rlmi+xml": { source: "iana", compressible: true }, "application/rls-services+xml": { source: "iana", compressible: true, extensions: ["rs"] }, "application/route-apd+xml": { source: "iana", compressible: true, extensions: ["rapd"] }, "application/route-s-tsid+xml": { source: "iana", compressible: true, extensions: ["sls"] }, "application/route-usd+xml": { source: "iana", compressible: true, extensions: ["rusd"] }, "application/rpki-ghostbusters": { source: "iana", extensions: ["gbr"] }, "application/rpki-manifest": { source: "iana", extensions: ["mft"] }, "application/rpki-publication": { source: "iana" }, "application/rpki-roa": { source: "iana", extensions: ["roa"] }, "application/rpki-updown": { source: "iana" }, "application/rsd+xml": { source: "apache", compressible: true, extensions: ["rsd"] }, "application/rss+xml": { source: "apache", compressible: true, extensions: ["rss"] }, "application/rtf": { source: "iana", compressible: true, extensions: ["rtf"] }, "application/rtploopback": { source: "iana" }, "application/rtx": { source: "iana" }, "application/samlassertion+xml": { source: "iana", compressible: true }, "application/samlmetadata+xml": { source: "iana", compressible: true }, "application/sarif+json": { source: "iana", compressible: true }, "application/sarif-external-properties+json": { source: "iana", compressible: true }, "application/sbe": { source: "iana" }, "application/sbml+xml": { source: "iana", compressible: true, extensions: ["sbml"] }, "application/scaip+xml": { source: "iana", compressible: true }, "application/scim+json": { source: "iana", compressible: true }, "application/scvp-cv-request": { source: "iana", extensions: ["scq"] }, "application/scvp-cv-response": { source: "iana", extensions: ["scs"] }, "application/scvp-vp-request": { source: "iana", extensions: ["spq"] }, "application/scvp-vp-response": { source: "iana", extensions: ["spp"] }, "application/sdp": { source: "iana", extensions: ["sdp"] }, "application/secevent+jwt": { source: "iana" }, "application/senml+cbor": { source: "iana" }, "application/senml+json": { source: "iana", compressible: true }, "application/senml+xml": { source: "iana", compressible: true, extensions: ["senmlx"] }, "application/senml-etch+cbor": { source: "iana" }, "application/senml-etch+json": { source: "iana", compressible: true }, "application/senml-exi": { source: "iana" }, "application/sensml+cbor": { source: "iana" }, "application/sensml+json": { source: "iana", compressible: true }, "application/sensml+xml": { source: "iana", compressible: true, extensions: ["sensmlx"] }, "application/sensml-exi": { source: "iana" }, "application/sep+xml": { source: "iana", compressible: true }, "application/sep-exi": { source: "iana" }, "application/session-info": { source: "iana" }, "application/set-payment": { source: "iana" }, "application/set-payment-initiation": { source: "iana", extensions: ["setpay"] }, "application/set-registration": { source: "iana" }, "application/set-registration-initiation": { source: "iana", extensions: ["setreg"] }, "application/sgml": { source: "iana" }, "application/sgml-open-catalog": { source: "iana" }, "application/shf+xml": { source: "iana", compressible: true, extensions: ["shf"] }, "application/sieve": { source: "iana", extensions: ["siv", "sieve"] }, "application/simple-filter+xml": { source: "iana", compressible: true }, "application/simple-message-summary": { source: "iana" }, "application/simplesymbolcontainer": { source: "iana" }, "application/sipc": { source: "iana" }, "application/slate": { source: "iana" }, "application/smil": { source: "iana" }, "application/smil+xml": { source: "iana", compressible: true, extensions: ["smi", "smil"] }, "application/smpte336m": { source: "iana" }, "application/soap+fastinfoset": { source: "iana" }, "application/soap+xml": { source: "iana", compressible: true }, "application/sparql-query": { source: "iana", extensions: ["rq"] }, "application/sparql-results+xml": { source: "iana", compressible: true, extensions: ["srx"] }, "application/spdx+json": { source: "iana", compressible: true }, "application/spirits-event+xml": { source: "iana", compressible: true }, "application/sql": { source: "iana" }, "application/srgs": { source: "iana", extensions: ["gram"] }, "application/srgs+xml": { source: "iana", compressible: true, extensions: ["grxml"] }, "application/sru+xml": { source: "iana", compressible: true, extensions: ["sru"] }, "application/ssdl+xml": { source: "apache", compressible: true, extensions: ["ssdl"] }, "application/ssml+xml": { source: "iana", compressible: true, extensions: ["ssml"] }, "application/stix+json": { source: "iana", compressible: true }, "application/swid+xml": { source: "iana", compressible: true, extensions: ["swidtag"] }, "application/tamp-apex-update": { source: "iana" }, "application/tamp-apex-update-confirm": { source: "iana" }, "application/tamp-community-update": { source: "iana" }, "application/tamp-community-update-confirm": { source: "iana" }, "application/tamp-error": { source: "iana" }, "application/tamp-sequence-adjust": { source: "iana" }, "application/tamp-sequence-adjust-confirm": { source: "iana" }, "application/tamp-status-query": { source: "iana" }, "application/tamp-status-response": { source: "iana" }, "application/tamp-update": { source: "iana" }, "application/tamp-update-confirm": { source: "iana" }, "application/tar": { compressible: true }, "application/taxii+json": { source: "iana", compressible: true }, "application/td+json": { source: "iana", compressible: true }, "application/tei+xml": { source: "iana", compressible: true, extensions: ["tei", "teicorpus"] }, "application/tetra_isi": { source: "iana" }, "application/thraud+xml": { source: "iana", compressible: true, extensions: ["tfi"] }, "application/timestamp-query": { source: "iana" }, "application/timestamp-reply": { source: "iana" }, "application/timestamped-data": { source: "iana", extensions: ["tsd"] }, "application/tlsrpt+gzip": { source: "iana" }, "application/tlsrpt+json": { source: "iana", compressible: true }, "application/tnauthlist": { source: "iana" }, "application/token-introspection+jwt": { source: "iana" }, "application/toml": { compressible: true, extensions: ["toml"] }, "application/trickle-ice-sdpfrag": { source: "iana" }, "application/trig": { source: "iana", extensions: ["trig"] }, "application/ttml+xml": { source: "iana", compressible: true, extensions: ["ttml"] }, "application/tve-trigger": { source: "iana" }, "application/tzif": { source: "iana" }, "application/tzif-leap": { source: "iana" }, "application/ubjson": { compressible: false, extensions: ["ubj"] }, "application/ulpfec": { source: "iana" }, "application/urc-grpsheet+xml": { source: "iana", compressible: true }, "application/urc-ressheet+xml": { source: "iana", compressible: true, extensions: ["rsheet"] }, "application/urc-targetdesc+xml": { source: "iana", compressible: true, extensions: ["td"] }, "application/urc-uisocketdesc+xml": { source: "iana", compressible: true }, "application/vcard+json": { source: "iana", compressible: true }, "application/vcard+xml": { source: "iana", compressible: true }, "application/vemmi": { source: "iana" }, "application/vividence.scriptfile": { source: "apache" }, "application/vnd.1000minds.decision-model+xml": { source: "iana", compressible: true, extensions: ["1km"] }, "application/vnd.3gpp-prose+xml": { source: "iana", compressible: true }, "application/vnd.3gpp-prose-pc3ch+xml": { source: "iana", compressible: true }, "application/vnd.3gpp-v2x-local-service-information": { source: "iana" }, "application/vnd.3gpp.5gnas": { source: "iana" }, "application/vnd.3gpp.access-transfer-events+xml": { source: "iana", compressible: true }, "application/vnd.3gpp.bsf+xml": { source: "iana", compressible: true }, "application/vnd.3gpp.gmop+xml": { source: "iana", compressible: true }, "application/vnd.3gpp.gtpc": { source: "iana" }, "application/vnd.3gpp.interworking-data": { source: "iana" }, "application/vnd.3gpp.lpp": { source: "iana" }, "application/vnd.3gpp.mc-signalling-ear": { source: "iana" }, "application/vnd.3gpp.mcdata-affiliation-command+xml": { source: "iana", compressible: true }, "application/vnd.3gpp.mcdata-info+xml": { source: "iana", compressible: true }, "application/vnd.3gpp.mcdata-payload": { source: "iana" }, "application/vnd.3gpp.mcdata-service-config+xml": { source: "iana", compressible: true }, "application/vnd.3gpp.mcdata-signalling": { source: "iana" }, "application/vnd.3gpp.mcdata-ue-config+xml": { source: "iana", compressible: true }, "application/vnd.3gpp.mcdata-user-profile+xml": { source: "iana", compressible: true }, "application/vnd.3gpp.mcptt-affiliation-command+xml": { source: "iana", compressible: true }, "application/vnd.3gpp.mcptt-floor-request+xml": { source: "iana", compressible: true }, "application/vnd.3gpp.mcptt-info+xml": { source: "iana", compressible: true }, "application/vnd.3gpp.mcptt-location-info+xml": { source: "iana", compressible: true }, "application/vnd.3gpp.mcptt-mbms-usage-info+xml": { source: "iana", compressible: true }, "application/vnd.3gpp.mcptt-service-config+xml": { source: "iana", compressible: true }, "application/vnd.3gpp.mcptt-signed+xml": { source: "iana", compressible: true }, "application/vnd.3gpp.mcptt-ue-config+xml": { source: "iana", compressible: true }, "application/vnd.3gpp.mcptt-ue-init-config+xml": { source: "iana", compressible: true }, "application/vnd.3gpp.mcptt-user-profile+xml": { source: "iana", compressible: true }, "application/vnd.3gpp.mcvideo-affiliation-command+xml": { source: "iana", compressible: true }, "application/vnd.3gpp.mcvideo-affiliation-info+xml": { source: "iana", compressible: true }, "application/vnd.3gpp.mcvideo-info+xml": { source: "iana", compressible: true }, "application/vnd.3gpp.mcvideo-location-info+xml": { source: "iana", compressible: true }, "application/vnd.3gpp.mcvideo-mbms-usage-info+xml": { source: "iana", compressible: true }, "application/vnd.3gpp.mcvideo-service-config+xml": { source: "iana", compressible: true }, "application/vnd.3gpp.mcvideo-transmission-request+xml": { source: "iana", compressible: true }, "application/vnd.3gpp.mcvideo-ue-config+xml": { source: "iana", compressible: true }, "application/vnd.3gpp.mcvideo-user-profile+xml": { source: "iana", compressible: true }, "application/vnd.3gpp.mid-call+xml": { source: "iana", compressible: true }, "application/vnd.3gpp.ngap": { source: "iana" }, "application/vnd.3gpp.pfcp": { source: "iana" }, "application/vnd.3gpp.pic-bw-large": { source: "iana", extensions: ["plb"] }, "application/vnd.3gpp.pic-bw-small": { source: "iana", extensions: ["psb"] }, "application/vnd.3gpp.pic-bw-var": { source: "iana", extensions: ["pvb"] }, "application/vnd.3gpp.s1ap": { source: "iana" }, "application/vnd.3gpp.sms": { source: "iana" }, "application/vnd.3gpp.sms+xml": { source: "iana", compressible: true }, "application/vnd.3gpp.srvcc-ext+xml": { source: "iana", compressible: true }, "application/vnd.3gpp.srvcc-info+xml": { source: "iana", compressible: true }, "application/vnd.3gpp.state-and-event-info+xml": { source: "iana", compressible: true }, "application/vnd.3gpp.ussd+xml": { source: "iana", compressible: true }, "application/vnd.3gpp2.bcmcsinfo+xml": { source: "iana", compressible: true }, "application/vnd.3gpp2.sms": { source: "iana" }, "application/vnd.3gpp2.tcap": { source: "iana", extensions: ["tcap"] }, "application/vnd.3lightssoftware.imagescal": { source: "iana" }, "application/vnd.3m.post-it-notes": { source: "iana", extensions: ["pwn"] }, "application/vnd.accpac.simply.aso": { source: "iana", extensions: ["aso"] }, "application/vnd.accpac.simply.imp": { source: "iana", extensions: ["imp"] }, "application/vnd.acucobol": { source: "iana", extensions: ["acu"] }, "application/vnd.acucorp": { source: "iana", extensions: ["atc", "acutc"] }, "application/vnd.adobe.air-application-installer-package+zip": { source: "apache", compressible: false, extensions: ["air"] }, "application/vnd.adobe.flash.movie": { source: "iana" }, "application/vnd.adobe.formscentral.fcdt": { source: "iana", extensions: ["fcdt"] }, "application/vnd.adobe.fxp": { source: "iana", extensions: ["fxp", "fxpl"] }, "application/vnd.adobe.partial-upload": { source: "iana" }, "application/vnd.adobe.xdp+xml": { source: "iana", compressible: true, extensions: ["xdp"] }, "application/vnd.adobe.xfdf": { source: "iana", extensions: ["xfdf"] }, "application/vnd.aether.imp": { source: "iana" }, "application/vnd.afpc.afplinedata": { source: "iana" }, "application/vnd.afpc.afplinedata-pagedef": { source: "iana" }, "application/vnd.afpc.cmoca-cmresource": { source: "iana" }, "application/vnd.afpc.foca-charset": { source: "iana" }, "application/vnd.afpc.foca-codedfont": { source: "iana" }, "application/vnd.afpc.foca-codepage": { source: "iana" }, "application/vnd.afpc.modca": { source: "iana" }, "application/vnd.afpc.modca-cmtable": { source: "iana" }, "application/vnd.afpc.modca-formdef": { source: "iana" }, "application/vnd.afpc.modca-mediummap": { source: "iana" }, "application/vnd.afpc.modca-objectcontainer": { source: "iana" }, "application/vnd.afpc.modca-overlay": { source: "iana" }, "application/vnd.afpc.modca-pagesegment": { source: "iana" }, "application/vnd.age": { source: "iana", extensions: ["age"] }, "application/vnd.ah-barcode": { source: "iana" }, "application/vnd.ahead.space": { source: "iana", extensions: ["ahead"] }, "application/vnd.airzip.filesecure.azf": { source: "iana", extensions: ["azf"] }, "application/vnd.airzip.filesecure.azs": { source: "iana", extensions: ["azs"] }, "application/vnd.amadeus+json": { source: "iana", compressible: true }, "application/vnd.amazon.ebook": { source: "apache", extensions: ["azw"] }, "application/vnd.amazon.mobi8-ebook": { source: "iana" }, "application/vnd.americandynamics.acc": { source: "iana", extensions: ["acc"] }, "application/vnd.amiga.ami": { source: "iana", extensions: ["ami"] }, "application/vnd.amundsen.maze+xml": { source: "iana", compressible: true }, "application/vnd.android.ota": { source: "iana" }, "application/vnd.android.package-archive": { source: "apache", compressible: false, extensions: ["apk"] }, "application/vnd.anki": { source: "iana" }, "application/vnd.anser-web-certificate-issue-initiation": { source: "iana", extensions: ["cii"] }, "application/vnd.anser-web-funds-transfer-initiation": { source: "apache", extensions: ["fti"] }, "application/vnd.antix.game-component": { source: "iana", extensions: ["atx"] }, "application/vnd.apache.arrow.file": { source: "iana" }, "application/vnd.apache.arrow.stream": { source: "iana" }, "application/vnd.apache.thrift.binary": { source: "iana" }, "application/vnd.apache.thrift.compact": { source: "iana" }, "application/vnd.apache.thrift.json": { source: "iana" }, "application/vnd.api+json": { source: "iana", compressible: true }, "application/vnd.aplextor.warrp+json": { source: "iana", compressible: true }, "application/vnd.apothekende.reservation+json": { source: "iana", compressible: true }, "application/vnd.apple.installer+xml": { source: "iana", compressible: true, extensions: ["mpkg"] }, "application/vnd.apple.keynote": { source: "iana", extensions: ["key"] }, "application/vnd.apple.mpegurl": { source: "iana", extensions: ["m3u8"] }, "application/vnd.apple.numbers": { source: "iana", extensions: ["numbers"] }, "application/vnd.apple.pages": { source: "iana", extensions: ["pages"] }, "application/vnd.apple.pkpass": { compressible: false, extensions: ["pkpass"] }, "application/vnd.arastra.swi": { source: "iana" }, "application/vnd.aristanetworks.swi": { source: "iana", extensions: ["swi"] }, "application/vnd.artisan+json": { source: "iana", compressible: true }, "application/vnd.artsquare": { source: "iana" }, "application/vnd.astraea-software.iota": { source: "iana", extensions: ["iota"] }, "application/vnd.audiograph": { source: "iana", extensions: ["aep"] }, "application/vnd.autopackage": { source: "iana" }, "application/vnd.avalon+json": { source: "iana", compressible: true }, "application/vnd.avistar+xml": { source: "iana", compressible: true }, "application/vnd.balsamiq.bmml+xml": { source: "iana", compressible: true, extensions: ["bmml"] }, "application/vnd.balsamiq.bmpr": { source: "iana" }, "application/vnd.banana-accounting": { source: "iana" }, "application/vnd.bbf.usp.error": { source: "iana" }, "application/vnd.bbf.usp.msg": { source: "iana" }, "application/vnd.bbf.usp.msg+json": { source: "iana", compressible: true }, "application/vnd.bekitzur-stech+json": { source: "iana", compressible: true }, "application/vnd.bint.med-content": { source: "iana" }, "application/vnd.biopax.rdf+xml": { source: "iana", compressible: true }, "application/vnd.blink-idb-value-wrapper": { source: "iana" }, "application/vnd.blueice.multipass": { source: "iana", extensions: ["mpm"] }, "application/vnd.bluetooth.ep.oob": { source: "iana" }, "application/vnd.bluetooth.le.oob": { source: "iana" }, "application/vnd.bmi": { source: "iana", extensions: ["bmi"] }, "application/vnd.bpf": { source: "iana" }, "application/vnd.bpf3": { source: "iana" }, "application/vnd.businessobjects": { source: "iana", extensions: ["rep"] }, "application/vnd.byu.uapi+json": { source: "iana", compressible: true }, "application/vnd.cab-jscript": { source: "iana" }, "application/vnd.canon-cpdl": { source: "iana" }, "application/vnd.canon-lips": { source: "iana" }, "application/vnd.capasystems-pg+json": { source: "iana", compressible: true }, "application/vnd.cendio.thinlinc.clientconf": { source: "iana" }, "application/vnd.century-systems.tcp_stream": { source: "iana" }, "application/vnd.chemdraw+xml": { source: "iana", compressible: true, extensions: ["cdxml"] }, "application/vnd.chess-pgn": { source: "iana" }, "application/vnd.chipnuts.karaoke-mmd": { source: "iana", extensions: ["mmd"] }, "application/vnd.ciedi": { source: "iana" }, "application/vnd.cinderella": { source: "iana", extensions: ["cdy"] }, "application/vnd.cirpack.isdn-ext": { source: "iana" }, "application/vnd.citationstyles.style+xml": { source: "iana", compressible: true, extensions: ["csl"] }, "application/vnd.claymore": { source: "iana", extensions: ["cla"] }, "application/vnd.cloanto.rp9": { source: "iana", extensions: ["rp9"] }, "application/vnd.clonk.c4group": { source: "iana", extensions: ["c4g", "c4d", "c4f", "c4p", "c4u"] }, "application/vnd.cluetrust.cartomobile-config": { source: "iana", extensions: ["c11amc"] }, "application/vnd.cluetrust.cartomobile-config-pkg": { source: "iana", extensions: ["c11amz"] }, "application/vnd.coffeescript": { source: "iana" }, "application/vnd.collabio.xodocuments.document": { source: "iana" }, "application/vnd.collabio.xodocuments.document-template": { source: "iana" }, "application/vnd.collabio.xodocuments.presentation": { source: "iana" }, "application/vnd.collabio.xodocuments.presentation-template": { source: "iana" }, "application/vnd.collabio.xodocuments.spreadsheet": { source: "iana" }, "application/vnd.collabio.xodocuments.spreadsheet-template": { source: "iana" }, "application/vnd.collection+json": { source: "iana", compressible: true }, "application/vnd.collection.doc+json": { source: "iana", compressible: true }, "application/vnd.collection.next+json": { source: "iana", compressible: true }, "application/vnd.comicbook+zip": { source: "iana", compressible: false }, "application/vnd.comicbook-rar": { source: "iana" }, "application/vnd.commerce-battelle": { source: "iana" }, "application/vnd.commonspace": { source: "iana", extensions: ["csp"] }, "application/vnd.contact.cmsg": { source: "iana", extensions: ["cdbcmsg"] }, "application/vnd.coreos.ignition+json": { source: "iana", compressible: true }, "application/vnd.cosmocaller": { source: "iana", extensions: ["cmc"] }, "application/vnd.crick.clicker": { source: "iana", extensions: ["clkx"] }, "application/vnd.crick.clicker.keyboard": { source: "iana", extensions: ["clkk"] }, "application/vnd.crick.clicker.palette": { source: "iana", extensions: ["clkp"] }, "application/vnd.crick.clicker.template": { source: "iana", extensions: ["clkt"] }, "application/vnd.crick.clicker.wordbank": { source: "iana", extensions: ["clkw"] }, "application/vnd.criticaltools.wbs+xml": { source: "iana", compressible: true, extensions: ["wbs"] }, "application/vnd.cryptii.pipe+json": { source: "iana", compressible: true }, "application/vnd.crypto-shade-file": { source: "iana" }, "application/vnd.cryptomator.encrypted": { source: "iana" }, "application/vnd.cryptomator.vault": { source: "iana" }, "application/vnd.ctc-posml": { source: "iana", extensions: ["pml"] }, "application/vnd.ctct.ws+xml": { source: "iana", compressible: true }, "application/vnd.cups-pdf": { source: "iana" }, "application/vnd.cups-postscript": { source: "iana" }, "application/vnd.cups-ppd": { source: "iana", extensions: ["ppd"] }, "application/vnd.cups-raster": { source: "iana" }, "application/vnd.cups-raw": { source: "iana" }, "application/vnd.curl": { source: "iana" }, "application/vnd.curl.car": { source: "apache", extensions: ["car"] }, "application/vnd.curl.pcurl": { source: "apache", extensions: ["pcurl"] }, "application/vnd.cyan.dean.root+xml": { source: "iana", compressible: true }, "application/vnd.cybank": { source: "iana" }, "application/vnd.cyclonedx+json": { source: "iana", compressible: true }, "application/vnd.cyclonedx+xml": { source: "iana", compressible: true }, "application/vnd.d2l.coursepackage1p0+zip": { source: "iana", compressible: false }, "application/vnd.d3m-dataset": { source: "iana" }, "application/vnd.d3m-problem": { source: "iana" }, "application/vnd.dart": { source: "iana", compressible: true, extensions: ["dart"] }, "application/vnd.data-vision.rdz": { source: "iana", extensions: ["rdz"] }, "application/vnd.datapackage+json": { source: "iana", compressible: true }, "application/vnd.dataresource+json": { source: "iana", compressible: true }, "application/vnd.dbf": { source: "iana", extensions: ["dbf"] }, "application/vnd.debian.binary-package": { source: "iana" }, "application/vnd.dece.data": { source: "iana", extensions: ["uvf", "uvvf", "uvd", "uvvd"] }, "application/vnd.dece.ttml+xml": { source: "iana", compressible: true, extensions: ["uvt", "uvvt"] }, "application/vnd.dece.unspecified": { source: "iana", extensions: ["uvx", "uvvx"] }, "application/vnd.dece.zip": { source: "iana", extensions: ["uvz", "uvvz"] }, "application/vnd.denovo.fcselayout-link": { source: "iana", extensions: ["fe_launch"] }, "application/vnd.desmume.movie": { source: "iana" }, "application/vnd.dir-bi.plate-dl-nosuffix": { source: "iana" }, "application/vnd.dm.delegation+xml": { source: "iana", compressible: true }, "application/vnd.dna": { source: "iana", extensions: ["dna"] }, "application/vnd.document+json": { source: "iana", compressible: true }, "application/vnd.dolby.mlp": { source: "apache", extensions: ["mlp"] }, "application/vnd.dolby.mobile.1": { source: "iana" }, "application/vnd.dolby.mobile.2": { source: "iana" }, "application/vnd.doremir.scorecloud-binary-document": { source: "iana" }, "application/vnd.dpgraph": { source: "iana", extensions: ["dpg"] }, "application/vnd.dreamfactory": { source: "iana", extensions: ["dfac"] }, "application/vnd.drive+json": { source: "iana", compressible: true }, "application/vnd.ds-keypoint": { source: "apache", extensions: ["kpxx"] }, "application/vnd.dtg.local": { source: "iana" }, "application/vnd.dtg.local.flash": { source: "iana" }, "application/vnd.dtg.local.html": { source: "iana" }, "application/vnd.dvb.ait": { source: "iana", extensions: ["ait"] }, "application/vnd.dvb.dvbisl+xml": { source: "iana", compressible: true }, "application/vnd.dvb.dvbj": { source: "iana" }, "application/vnd.dvb.esgcontainer": { source: "iana" }, "application/vnd.dvb.ipdcdftnotifaccess": { source: "iana" }, "application/vnd.dvb.ipdcesgaccess": { source: "iana" }, "application/vnd.dvb.ipdcesgaccess2": { source: "iana" }, "application/vnd.dvb.ipdcesgpdd": { source: "iana" }, "application/vnd.dvb.ipdcroaming": { source: "iana" }, "application/vnd.dvb.iptv.alfec-base": { source: "iana" }, "application/vnd.dvb.iptv.alfec-enhancement": { source: "iana" }, "application/vnd.dvb.notif-aggregate-root+xml": { source: "iana", compressible: true }, "application/vnd.dvb.notif-container+xml": { source: "iana", compressible: true }, "application/vnd.dvb.notif-generic+xml": { source: "iana", compressible: true }, "application/vnd.dvb.notif-ia-msglist+xml": { source: "iana", compressible: true }, "application/vnd.dvb.notif-ia-registration-request+xml": { source: "iana", compressible: true }, "application/vnd.dvb.notif-ia-registration-response+xml": { source: "iana", compressible: true }, "application/vnd.dvb.notif-init+xml": { source: "iana", compressible: true }, "application/vnd.dvb.pfr": { source: "iana" }, "application/vnd.dvb.service": { source: "iana", extensions: ["svc"] }, "application/vnd.dxr": { source: "iana" }, "application/vnd.dynageo": { source: "iana", extensions: ["geo"] }, "application/vnd.dzr": { source: "iana" }, "application/vnd.easykaraoke.cdgdownload": { source: "iana" }, "application/vnd.ecdis-update": { source: "iana" }, "application/vnd.ecip.rlp": { source: "iana" }, "application/vnd.eclipse.ditto+json": { source: "iana", compressible: true }, "application/vnd.ecowin.chart": { source: "iana", extensions: ["mag"] }, "application/vnd.ecowin.filerequest": { source: "iana" }, "application/vnd.ecowin.fileupdate": { source: "iana" }, "application/vnd.ecowin.series": { source: "iana" }, "application/vnd.ecowin.seriesrequest": { source: "iana" }, "application/vnd.ecowin.seriesupdate": { source: "iana" }, "application/vnd.efi.img": { source: "iana" }, "application/vnd.efi.iso": { source: "iana" }, "application/vnd.emclient.accessrequest+xml": { source: "iana", compressible: true }, "application/vnd.enliven": { source: "iana", extensions: ["nml"] }, "application/vnd.enphase.envoy": { source: "iana" }, "application/vnd.eprints.data+xml": { source: "iana", compressible: true }, "application/vnd.epson.esf": { source: "iana", extensions: ["esf"] }, "application/vnd.epson.msf": { source: "iana", extensions: ["msf"] }, "application/vnd.epson.quickanime": { source: "iana", extensions: ["qam"] }, "application/vnd.epson.salt": { source: "iana", extensions: ["slt"] }, "application/vnd.epson.ssf": { source: "iana", extensions: ["ssf"] }, "application/vnd.ericsson.quickcall": { source: "iana" }, "application/vnd.espass-espass+zip": { source: "iana", compressible: false }, "application/vnd.eszigno3+xml": { source: "iana", compressible: true, extensions: ["es3", "et3"] }, "application/vnd.etsi.aoc+xml": { source: "iana", compressible: true }, "application/vnd.etsi.asic-e+zip": { source: "iana", compressible: false }, "application/vnd.etsi.asic-s+zip": { source: "iana", compressible: false }, "application/vnd.etsi.cug+xml": { source: "iana", compressible: true }, "application/vnd.etsi.iptvcommand+xml": { source: "iana", compressible: true }, "application/vnd.etsi.iptvdiscovery+xml": { source: "iana", compressible: true }, "application/vnd.etsi.iptvprofile+xml": { source: "iana", compressible: true }, "application/vnd.etsi.iptvsad-bc+xml": { source: "iana", compressible: true }, "application/vnd.etsi.iptvsad-cod+xml": { source: "iana", compressible: true }, "application/vnd.etsi.iptvsad-npvr+xml": { source: "iana", compressible: true }, "application/vnd.etsi.iptvservice+xml": { source: "iana", compressible: true }, "application/vnd.etsi.iptvsync+xml": { source: "iana", compressible: true }, "application/vnd.etsi.iptvueprofile+xml": { source: "iana", compressible: true }, "application/vnd.etsi.mcid+xml": { source: "iana", compressible: true }, "application/vnd.etsi.mheg5": { source: "iana" }, "application/vnd.etsi.overload-control-policy-dataset+xml": { source: "iana", compressible: true }, "application/vnd.etsi.pstn+xml": { source: "iana", compressible: true }, "application/vnd.etsi.sci+xml": { source: "iana", compressible: true }, "application/vnd.etsi.simservs+xml": { source: "iana", compressible: true }, "application/vnd.etsi.timestamp-token": { source: "iana" }, "application/vnd.etsi.tsl+xml": { source: "iana", compressible: true }, "application/vnd.etsi.tsl.der": { source: "iana" }, "application/vnd.eu.kasparian.car+json": { source: "iana", compressible: true }, "application/vnd.eudora.data": { source: "iana" }, "application/vnd.evolv.ecig.profile": { source: "iana" }, "application/vnd.evolv.ecig.settings": { source: "iana" }, "application/vnd.evolv.ecig.theme": { source: "iana" }, "application/vnd.exstream-empower+zip": { source: "iana", compressible: false }, "application/vnd.exstream-package": { source: "iana" }, "application/vnd.ezpix-album": { source: "iana", extensions: ["ez2"] }, "application/vnd.ezpix-package": { source: "iana", extensions: ["ez3"] }, "application/vnd.f-secure.mobile": { source: "iana" }, "application/vnd.familysearch.gedcom+zip": { source: "iana", compressible: false }, "application/vnd.fastcopy-disk-image": { source: "iana" }, "application/vnd.fdf": { source: "iana", extensions: ["fdf"] }, "application/vnd.fdsn.mseed": { source: "iana", extensions: ["mseed"] }, "application/vnd.fdsn.seed": { source: "iana", extensions: ["seed", "dataless"] }, "application/vnd.ffsns": { source: "iana" }, "application/vnd.ficlab.flb+zip": { source: "iana", compressible: false }, "application/vnd.filmit.zfc": { source: "iana" }, "application/vnd.fints": { source: "iana" }, "application/vnd.firemonkeys.cloudcell": { source: "iana" }, "application/vnd.flographit": { source: "iana", extensions: ["gph"] }, "application/vnd.fluxtime.clip": { source: "iana", extensions: ["ftc"] }, "application/vnd.font-fontforge-sfd": { source: "iana" }, "application/vnd.framemaker": { source: "iana", extensions: ["fm", "frame", "maker", "book"] }, "application/vnd.frogans.fnc": { source: "iana", extensions: ["fnc"] }, "application/vnd.frogans.ltf": { source: "iana", extensions: ["ltf"] }, "application/vnd.fsc.weblaunch": { source: "iana", extensions: ["fsc"] }, "application/vnd.fujifilm.fb.docuworks": { source: "iana" }, "application/vnd.fujifilm.fb.docuworks.binder": { source: "iana" }, "application/vnd.fujifilm.fb.docuworks.container": { source: "iana" }, "application/vnd.fujifilm.fb.jfi+xml": { source: "iana", compressible: true }, "application/vnd.fujitsu.oasys": { source: "iana", extensions: ["oas"] }, "application/vnd.fujitsu.oasys2": { source: "iana", extensions: ["oa2"] }, "application/vnd.fujitsu.oasys3": { source: "iana", extensions: ["oa3"] }, "application/vnd.fujitsu.oasysgp": { source: "iana", extensions: ["fg5"] }, "application/vnd.fujitsu.oasysprs": { source: "iana", extensions: ["bh2"] }, "application/vnd.fujixerox.art-ex": { source: "iana" }, "application/vnd.fujixerox.art4": { source: "iana" }, "application/vnd.fujixerox.ddd": { source: "iana", extensions: ["ddd"] }, "application/vnd.fujixerox.docuworks": { source: "iana", extensions: ["xdw"] }, "application/vnd.fujixerox.docuworks.binder": { source: "iana", extensions: ["xbd"] }, "application/vnd.fujixerox.docuworks.container": { source: "iana" }, "application/vnd.fujixerox.hbpl": { source: "iana" }, "application/vnd.fut-misnet": { source: "iana" }, "application/vnd.futoin+cbor": { source: "iana" }, "application/vnd.futoin+json": { source: "iana", compressible: true }, "application/vnd.fuzzysheet": { source: "iana", extensions: ["fzs"] }, "application/vnd.genomatix.tuxedo": { source: "iana", extensions: ["txd"] }, "application/vnd.gentics.grd+json": { source: "iana", compressible: true }, "application/vnd.geo+json": { source: "iana", compressible: true }, "application/vnd.geocube+xml": { source: "iana", compressible: true }, "application/vnd.geogebra.file": { source: "iana", extensions: ["ggb"] }, "application/vnd.geogebra.slides": { source: "iana" }, "application/vnd.geogebra.tool": { source: "iana", extensions: ["ggt"] }, "application/vnd.geometry-explorer": { source: "iana", extensions: ["gex", "gre"] }, "application/vnd.geonext": { source: "iana", extensions: ["gxt"] }, "application/vnd.geoplan": { source: "iana", extensions: ["g2w"] }, "application/vnd.geospace": { source: "iana", extensions: ["g3w"] }, "application/vnd.gerber": { source: "iana" }, "application/vnd.globalplatform.card-content-mgt": { source: "iana" }, "application/vnd.globalplatform.card-content-mgt-response": { source: "iana" }, "application/vnd.gmx": { source: "iana", extensions: ["gmx"] }, "application/vnd.google-apps.document": { compressible: false, extensions: ["gdoc"] }, "application/vnd.google-apps.presentation": { compressible: false, extensions: ["gslides"] }, "application/vnd.google-apps.spreadsheet": { compressible: false, extensions: ["gsheet"] }, "application/vnd.google-earth.kml+xml": { source: "iana", compressible: true, extensions: ["kml"] }, "application/vnd.google-earth.kmz": { source: "iana", compressible: false, extensions: ["kmz"] }, "application/vnd.gov.sk.e-form+xml": { source: "iana", compressible: true }, "application/vnd.gov.sk.e-form+zip": { source: "iana", compressible: false }, "application/vnd.gov.sk.xmldatacontainer+xml": { source: "iana", compressible: true }, "application/vnd.grafeq": { source: "iana", extensions: ["gqf", "gqs"] }, "application/vnd.gridmp": { source: "iana" }, "application/vnd.groove-account": { source: "iana", extensions: ["gac"] }, "application/vnd.groove-help": { source: "iana", extensions: ["ghf"] }, "application/vnd.groove-identity-message": { source: "iana", extensions: ["gim"] }, "application/vnd.groove-injector": { source: "iana", extensions: ["grv"] }, "application/vnd.groove-tool-message": { source: "iana", extensions: ["gtm"] }, "application/vnd.groove-tool-template": { source: "iana", extensions: ["tpl"] }, "application/vnd.groove-vcard": { source: "iana", extensions: ["vcg"] }, "application/vnd.hal+json": { source: "iana", compressible: true }, "application/vnd.hal+xml": { source: "iana", compressible: true, extensions: ["hal"] }, "application/vnd.handheld-entertainment+xml": { source: "iana", compressible: true, extensions: ["zmm"] }, "application/vnd.hbci": { source: "iana", extensions: ["hbci"] }, "application/vnd.hc+json": { source: "iana", compressible: true }, "application/vnd.hcl-bireports": { source: "iana" }, "application/vnd.hdt": { source: "iana" }, "application/vnd.heroku+json": { source: "iana", compressible: true }, "application/vnd.hhe.lesson-player": { source: "iana", extensions: ["les"] }, "application/vnd.hl7cda+xml": { source: "iana", charset: "UTF-8", compressible: true }, "application/vnd.hl7v2+xml": { source: "iana", charset: "UTF-8", compressible: true }, "application/vnd.hp-hpgl": { source: "iana", extensions: ["hpgl"] }, "application/vnd.hp-hpid": { source: "iana", extensions: ["hpid"] }, "application/vnd.hp-hps": { source: "iana", extensions: ["hps"] }, "application/vnd.hp-jlyt": { source: "iana", extensions: ["jlt"] }, "application/vnd.hp-pcl": { source: "iana", extensions: ["pcl"] }, "application/vnd.hp-pclxl": { source: "iana", extensions: ["pclxl"] }, "application/vnd.httphone": { source: "iana" }, "application/vnd.hydrostatix.sof-data": { source: "iana", extensions: ["sfd-hdstx"] }, "application/vnd.hyper+json": { source: "iana", compressible: true }, "application/vnd.hyper-item+json": { source: "iana", compressible: true }, "application/vnd.hyperdrive+json": { source: "iana", compressible: true }, "application/vnd.hzn-3d-crossword": { source: "iana" }, "application/vnd.ibm.afplinedata": { source: "iana" }, "application/vnd.ibm.electronic-media": { source: "iana" }, "application/vnd.ibm.minipay": { source: "iana", extensions: ["mpy"] }, "application/vnd.ibm.modcap": { source: "iana", extensions: ["afp", "listafp", "list3820"] }, "application/vnd.ibm.rights-management": { source: "iana", extensions: ["irm"] }, "application/vnd.ibm.secure-container": { source: "iana", extensions: ["sc"] }, "application/vnd.iccprofile": { source: "iana", extensions: ["icc", "icm"] }, "application/vnd.ieee.1905": { source: "iana" }, "application/vnd.igloader": { source: "iana", extensions: ["igl"] }, "application/vnd.imagemeter.folder+zip": { source: "iana", compressible: false }, "application/vnd.imagemeter.image+zip": { source: "iana", compressible: false }, "application/vnd.immervision-ivp": { source: "iana", extensions: ["ivp"] }, "application/vnd.immervision-ivu": { source: "iana", extensions: ["ivu"] }, "application/vnd.ims.imsccv1p1": { source: "iana" }, "application/vnd.ims.imsccv1p2": { source: "iana" }, "application/vnd.ims.imsccv1p3": { source: "iana" }, "application/vnd.ims.lis.v2.result+json": { source: "iana", compressible: true }, "application/vnd.ims.lti.v2.toolconsumerprofile+json": { source: "iana", compressible: true }, "application/vnd.ims.lti.v2.toolproxy+json": { source: "iana", compressible: true }, "application/vnd.ims.lti.v2.toolproxy.id+json": { source: "iana", compressible: true }, "application/vnd.ims.lti.v2.toolsettings+json": { source: "iana", compressible: true }, "application/vnd.ims.lti.v2.toolsettings.simple+json": { source: "iana", compressible: true }, "application/vnd.informedcontrol.rms+xml": { source: "iana", compressible: true }, "application/vnd.informix-visionary": { source: "iana" }, "application/vnd.infotech.project": { source: "iana" }, "application/vnd.infotech.project+xml": { source: "iana", compressible: true }, "application/vnd.innopath.wamp.notification": { source: "iana" }, "application/vnd.insors.igm": { source: "iana", extensions: ["igm"] }, "application/vnd.intercon.formnet": { source: "iana", extensions: ["xpw", "xpx"] }, "application/vnd.intergeo": { source: "iana", extensions: ["i2g"] }, "application/vnd.intertrust.digibox": { source: "iana" }, "application/vnd.intertrust.nncp": { source: "iana" }, "application/vnd.intu.qbo": { source: "iana", extensions: ["qbo"] }, "application/vnd.intu.qfx": { source: "iana", extensions: ["qfx"] }, "application/vnd.iptc.g2.catalogitem+xml": { source: "iana", compressible: true }, "application/vnd.iptc.g2.conceptitem+xml": { source: "iana", compressible: true }, "application/vnd.iptc.g2.knowledgeitem+xml": { source: "iana", compressible: true }, "application/vnd.iptc.g2.newsitem+xml": { source: "iana", compressible: true }, "application/vnd.iptc.g2.newsmessage+xml": { source: "iana", compressible: true }, "application/vnd.iptc.g2.packageitem+xml": { source: "iana", compressible: true }, "application/vnd.iptc.g2.planningitem+xml": { source: "iana", compressible: true }, "application/vnd.ipunplugged.rcprofile": { source: "iana", extensions: ["rcprofile"] }, "application/vnd.irepository.package+xml": { source: "iana", compressible: true, extensions: ["irp"] }, "application/vnd.is-xpr": { source: "iana", extensions: ["xpr"] }, "application/vnd.isac.fcs": { source: "iana", extensions: ["fcs"] }, "application/vnd.iso11783-10+zip": { source: "iana", compressible: false }, "application/vnd.jam": { source: "iana", extensions: ["jam"] }, "application/vnd.japannet-directory-service": { source: "iana" }, "application/vnd.japannet-jpnstore-wakeup": { source: "iana" }, "application/vnd.japannet-payment-wakeup": { source: "iana" }, "application/vnd.japannet-registration": { source: "iana" }, "application/vnd.japannet-registration-wakeup": { source: "iana" }, "application/vnd.japannet-setstore-wakeup": { source: "iana" }, "application/vnd.japannet-verification": { source: "iana" }, "application/vnd.japannet-verification-wakeup": { source: "iana" }, "application/vnd.jcp.javame.midlet-rms": { source: "iana", extensions: ["rms"] }, "application/vnd.jisp": { source: "iana", extensions: ["jisp"] }, "application/vnd.joost.joda-archive": { source: "iana", extensions: ["joda"] }, "application/vnd.jsk.isdn-ngn": { source: "iana" }, "application/vnd.kahootz": { source: "iana", extensions: ["ktz", "ktr"] }, "application/vnd.kde.karbon": { source: "iana", extensions: ["karbon"] }, "application/vnd.kde.kchart": { source: "iana", extensions: ["chrt"] }, "application/vnd.kde.kformula": { source: "iana", extensions: ["kfo"] }, "application/vnd.kde.kivio": { source: "iana", extensions: ["flw"] }, "application/vnd.kde.kontour": { source: "iana", extensions: ["kon"] }, "application/vnd.kde.kpresenter": { source: "iana", extensions: ["kpr", "kpt"] }, "application/vnd.kde.kspread": { source: "iana", extensions: ["ksp"] }, "application/vnd.kde.kword": { source: "iana", extensions: ["kwd", "kwt"] }, "application/vnd.kenameaapp": { source: "iana", extensions: ["htke"] }, "application/vnd.kidspiration": { source: "iana", extensions: ["kia"] }, "application/vnd.kinar": { source: "iana", extensions: ["kne", "knp"] }, "application/vnd.koan": { source: "iana", extensions: ["skp", "skd", "skt", "skm"] }, "application/vnd.kodak-descriptor": { source: "iana", extensions: ["sse"] }, "application/vnd.las": { source: "iana" }, "application/vnd.las.las+json": { source: "iana", compressible: true }, "application/vnd.las.las+xml": { source: "iana", compressible: true, extensions: ["lasxml"] }, "application/vnd.laszip": { source: "iana" }, "application/vnd.leap+json": { source: "iana", compressible: true }, "application/vnd.liberty-request+xml": { source: "iana", compressible: true }, "application/vnd.llamagraphics.life-balance.desktop": { source: "iana", extensions: ["lbd"] }, "application/vnd.llamagraphics.life-balance.exchange+xml": { source: "iana", compressible: true, extensions: ["lbe"] }, "application/vnd.logipipe.circuit+zip": { source: "iana", compressible: false }, "application/vnd.loom": { source: "iana" }, "application/vnd.lotus-1-2-3": { source: "iana", extensions: ["123"] }, "application/vnd.lotus-approach": { source: "iana", extensions: ["apr"] }, "application/vnd.lotus-freelance": { source: "iana", extensions: ["pre"] }, "application/vnd.lotus-notes": { source: "iana", extensions: ["nsf"] }, "application/vnd.lotus-organizer": { source: "iana", extensions: ["org"] }, "application/vnd.lotus-screencam": { source: "iana", extensions: ["scm"] }, "application/vnd.lotus-wordpro": { source: "iana", extensions: ["lwp"] }, "application/vnd.macports.portpkg": { source: "iana", extensions: ["portpkg"] }, "application/vnd.mapbox-vector-tile": { source: "iana", extensions: ["mvt"] }, "application/vnd.marlin.drm.actiontoken+xml": { source: "iana", compressible: true }, "application/vnd.marlin.drm.conftoken+xml": { source: "iana", compressible: true }, "application/vnd.marlin.drm.license+xml": { source: "iana", compressible: true }, "application/vnd.marlin.drm.mdcf": { source: "iana" }, "application/vnd.mason+json": { source: "iana", compressible: true }, "application/vnd.maxar.archive.3tz+zip": { source: "iana", compressible: false }, "application/vnd.maxmind.maxmind-db": { source: "iana" }, "application/vnd.mcd": { source: "iana", extensions: ["mcd"] }, "application/vnd.medcalcdata": { source: "iana", extensions: ["mc1"] }, "application/vnd.mediastation.cdkey": { source: "iana", extensions: ["cdkey"] }, "application/vnd.meridian-slingshot": { source: "iana" }, "application/vnd.mfer": { source: "iana", extensions: ["mwf"] }, "application/vnd.mfmp": { source: "iana", extensions: ["mfm"] }, "application/vnd.micro+json": { source: "iana", compressible: true }, "application/vnd.micrografx.flo": { source: "iana", extensions: ["flo"] }, "application/vnd.micrografx.igx": { source: "iana", extensions: ["igx"] }, "application/vnd.microsoft.portable-executable": { source: "iana" }, "application/vnd.microsoft.windows.thumbnail-cache": { source: "iana" }, "application/vnd.miele+json": { source: "iana", compressible: true }, "application/vnd.mif": { source: "iana", extensions: ["mif"] }, "application/vnd.minisoft-hp3000-save": { source: "iana" }, "application/vnd.mitsubishi.misty-guard.trustweb": { source: "iana" }, "application/vnd.mobius.daf": { source: "iana", extensions: ["daf"] }, "application/vnd.mobius.dis": { source: "iana", extensions: ["dis"] }, "application/vnd.mobius.mbk": { source: "iana", extensions: ["mbk"] }, "application/vnd.mobius.mqy": { source: "iana", extensions: ["mqy"] }, "application/vnd.mobius.msl": { source: "iana", extensions: ["msl"] }, "application/vnd.mobius.plc": { source: "iana", extensions: ["plc"] }, "application/vnd.mobius.txf": { source: "iana", extensions: ["txf"] }, "application/vnd.mophun.application": { source: "iana", extensions: ["mpn"] }, "application/vnd.mophun.certificate": { source: "iana", extensions: ["mpc"] }, "application/vnd.motorola.flexsuite": { source: "iana" }, "application/vnd.motorola.flexsuite.adsi": { source: "iana" }, "application/vnd.motorola.flexsuite.fis": { source: "iana" }, "application/vnd.motorola.flexsuite.gotap": { source: "iana" }, "application/vnd.motorola.flexsuite.kmr": { source: "iana" }, "application/vnd.motorola.flexsuite.ttc": { source: "iana" }, "application/vnd.motorola.flexsuite.wem": { source: "iana" }, "application/vnd.motorola.iprm": { source: "iana" }, "application/vnd.mozilla.xul+xml": { source: "iana", compressible: true, extensions: ["xul"] }, "application/vnd.ms-3mfdocument": { source: "iana" }, "application/vnd.ms-artgalry": { source: "iana", extensions: ["cil"] }, "application/vnd.ms-asf": { source: "iana" }, "application/vnd.ms-cab-compressed": { source: "iana", extensions: ["cab"] }, "application/vnd.ms-color.iccprofile": { source: "apache" }, "application/vnd.ms-excel": { source: "iana", compressible: false, extensions: ["xls", "xlm", "xla", "xlc", "xlt", "xlw"] }, "application/vnd.ms-excel.addin.macroenabled.12": { source: "iana", extensions: ["xlam"] }, "application/vnd.ms-excel.sheet.binary.macroenabled.12": { source: "iana", extensions: ["xlsb"] }, "application/vnd.ms-excel.sheet.macroenabled.12": { source: "iana", extensions: ["xlsm"] }, "application/vnd.ms-excel.template.macroenabled.12": { source: "iana", extensions: ["xltm"] }, "application/vnd.ms-fontobject": { source: "iana", compressible: true, extensions: ["eot"] }, "application/vnd.ms-htmlhelp": { source: "iana", extensions: ["chm"] }, "application/vnd.ms-ims": { source: "iana", extensions: ["ims"] }, "application/vnd.ms-lrm": { source: "iana", extensions: ["lrm"] }, "application/vnd.ms-office.activex+xml": { source: "iana", compressible: true }, "application/vnd.ms-officetheme": { source: "iana", extensions: ["thmx"] }, "application/vnd.ms-opentype": { source: "apache", compressible: true }, "application/vnd.ms-outlook": { compressible: false, extensions: ["msg"] }, "application/vnd.ms-package.obfuscated-opentype": { source: "apache" }, "application/vnd.ms-pki.seccat": { source: "apache", extensions: ["cat"] }, "application/vnd.ms-pki.stl": { source: "apache", extensions: ["stl"] }, "application/vnd.ms-playready.initiator+xml": { source: "iana", compressible: true }, "application/vnd.ms-powerpoint": { source: "iana", compressible: false, extensions: ["ppt", "pps", "pot"] }, "application/vnd.ms-powerpoint.addin.macroenabled.12": { source: "iana", extensions: ["ppam"] }, "application/vnd.ms-powerpoint.presentation.macroenabled.12": { source: "iana", extensions: ["pptm"] }, "application/vnd.ms-powerpoint.slide.macroenabled.12": { source: "iana", extensions: ["sldm"] }, "application/vnd.ms-powerpoint.slideshow.macroenabled.12": { source: "iana", extensions: ["ppsm"] }, "application/vnd.ms-powerpoint.template.macroenabled.12": { source: "iana", extensions: ["potm"] }, "application/vnd.ms-printdevicecapabilities+xml": { source: "iana", compressible: true }, "application/vnd.ms-printing.printticket+xml": { source: "apache", compressible: true }, "application/vnd.ms-printschematicket+xml": { source: "iana", compressible: true }, "application/vnd.ms-project": { source: "iana", extensions: ["mpp", "mpt"] }, "application/vnd.ms-tnef": { source: "iana" }, "application/vnd.ms-windows.devicepairing": { source: "iana" }, "application/vnd.ms-windows.nwprinting.oob": { source: "iana" }, "application/vnd.ms-windows.printerpairing": { source: "iana" }, "application/vnd.ms-windows.wsd.oob": { source: "iana" }, "application/vnd.ms-wmdrm.lic-chlg-req": { source: "iana" }, "application/vnd.ms-wmdrm.lic-resp": { source: "iana" }, "application/vnd.ms-wmdrm.meter-chlg-req": { source: "iana" }, "application/vnd.ms-wmdrm.meter-resp": { source: "iana" }, "application/vnd.ms-word.document.macroenabled.12": { source: "iana", extensions: ["docm"] }, "application/vnd.ms-word.template.macroenabled.12": { source: "iana", extensions: ["dotm"] }, "application/vnd.ms-works": { source: "iana", extensions: ["wps", "wks", "wcm", "wdb"] }, "application/vnd.ms-wpl": { source: "iana", extensions: ["wpl"] }, "application/vnd.ms-xpsdocument": { source: "iana", compressible: false, extensions: ["xps"] }, "application/vnd.msa-disk-image": { source: "iana" }, "application/vnd.mseq": { source: "iana", extensions: ["mseq"] }, "application/vnd.msign": { source: "iana" }, "application/vnd.multiad.creator": { source: "iana" }, "application/vnd.multiad.creator.cif": { source: "iana" }, "application/vnd.music-niff": { source: "iana" }, "application/vnd.musician": { source: "iana", extensions: ["mus"] }, "application/vnd.muvee.style": { source: "iana", extensions: ["msty"] }, "application/vnd.mynfc": { source: "iana", extensions: ["taglet"] }, "application/vnd.nacamar.ybrid+json": { source: "iana", compressible: true }, "application/vnd.ncd.control": { source: "iana" }, "application/vnd.ncd.reference": { source: "iana" }, "application/vnd.nearst.inv+json": { source: "iana", compressible: true }, "application/vnd.nebumind.line": { source: "iana" }, "application/vnd.nervana": { source: "iana" }, "application/vnd.netfpx": { source: "iana" }, "application/vnd.neurolanguage.nlu": { source: "iana", extensions: ["nlu"] }, "application/vnd.nimn": { source: "iana" }, "application/vnd.nintendo.nitro.rom": { source: "iana" }, "application/vnd.nintendo.snes.rom": { source: "iana" }, "application/vnd.nitf": { source: "iana", extensions: ["ntf", "nitf"] }, "application/vnd.noblenet-directory": { source: "iana", extensions: ["nnd"] }, "application/vnd.noblenet-sealer": { source: "iana", extensions: ["nns"] }, "application/vnd.noblenet-web": { source: "iana", extensions: ["nnw"] }, "application/vnd.nokia.catalogs": { source: "iana" }, "application/vnd.nokia.conml+wbxml": { source: "iana" }, "application/vnd.nokia.conml+xml": { source: "iana", compressible: true }, "application/vnd.nokia.iptv.config+xml": { source: "iana", compressible: true }, "application/vnd.nokia.isds-radio-presets": { source: "iana" }, "application/vnd.nokia.landmark+wbxml": { source: "iana" }, "application/vnd.nokia.landmark+xml": { source: "iana", compressible: true }, "application/vnd.nokia.landmarkcollection+xml": { source: "iana", compressible: true }, "application/vnd.nokia.n-gage.ac+xml": { source: "iana", compressible: true, extensions: ["ac"] }, "application/vnd.nokia.n-gage.data": { source: "iana", extensions: ["ngdat"] }, "application/vnd.nokia.n-gage.symbian.install": { source: "iana", extensions: ["n-gage"] }, "application/vnd.nokia.ncd": { source: "iana" }, "application/vnd.nokia.pcd+wbxml": { source: "iana" }, "application/vnd.nokia.pcd+xml": { source: "iana", compressible: true }, "application/vnd.nokia.radio-preset": { source: "iana", extensions: ["rpst"] }, "application/vnd.nokia.radio-presets": { source: "iana", extensions: ["rpss"] }, "application/vnd.novadigm.edm": { source: "iana", extensions: ["edm"] }, "application/vnd.novadigm.edx": { source: "iana", extensions: ["edx"] }, "application/vnd.novadigm.ext": { source: "iana", extensions: ["ext"] }, "application/vnd.ntt-local.content-share": { source: "iana" }, "application/vnd.ntt-local.file-transfer": { source: "iana" }, "application/vnd.ntt-local.ogw_remote-access": { source: "iana" }, "application/vnd.ntt-local.sip-ta_remote": { source: "iana" }, "application/vnd.ntt-local.sip-ta_tcp_stream": { source: "iana" }, "application/vnd.oasis.opendocument.chart": { source: "iana", extensions: ["odc"] }, "application/vnd.oasis.opendocument.chart-template": { source: "iana", extensions: ["otc"] }, "application/vnd.oasis.opendocument.database": { source: "iana", extensions: ["odb"] }, "application/vnd.oasis.opendocument.formula": { source: "iana", extensions: ["odf"] }, "application/vnd.oasis.opendocument.formula-template": { source: "iana", extensions: ["odft"] }, "application/vnd.oasis.opendocument.graphics": { source: "iana", compressible: false, extensions: ["odg"] }, "application/vnd.oasis.opendocument.graphics-template": { source: "iana", extensions: ["otg"] }, "application/vnd.oasis.opendocument.image": { source: "iana", extensions: ["odi"] }, "application/vnd.oasis.opendocument.image-template": { source: "iana", extensions: ["oti"] }, "application/vnd.oasis.opendocument.presentation": { source: "iana", compressible: false, extensions: ["odp"] }, "application/vnd.oasis.opendocument.presentation-template": { source: "iana", extensions: ["otp"] }, "application/vnd.oasis.opendocument.spreadsheet": { source: "iana", compressible: false, extensions: ["ods"] }, "application/vnd.oasis.opendocument.spreadsheet-template": { source: "iana", extensions: ["ots"] }, "application/vnd.oasis.opendocument.text": { source: "iana", compressible: false, extensions: ["odt"] }, "application/vnd.oasis.opendocument.text-master": { source: "iana", extensions: ["odm"] }, "application/vnd.oasis.opendocument.text-template": { source: "iana", extensions: ["ott"] }, "application/vnd.oasis.opendocument.text-web": { source: "iana", extensions: ["oth"] }, "application/vnd.obn": { source: "iana" }, "application/vnd.ocf+cbor": { source: "iana" }, "application/vnd.oci.image.manifest.v1+json": { source: "iana", compressible: true }, "application/vnd.oftn.l10n+json": { source: "iana", compressible: true }, "application/vnd.oipf.contentaccessdownload+xml": { source: "iana", compressible: true }, "application/vnd.oipf.contentaccessstreaming+xml": { source: "iana", compressible: true }, "application/vnd.oipf.cspg-hexbinary": { source: "iana" }, "application/vnd.oipf.dae.svg+xml": { source: "iana", compressible: true }, "application/vnd.oipf.dae.xhtml+xml": { source: "iana", compressible: true }, "application/vnd.oipf.mippvcontrolmessage+xml": { source: "iana", compressible: true }, "application/vnd.oipf.pae.gem": { source: "iana" }, "application/vnd.oipf.spdiscovery+xml": { source: "iana", compressible: true }, "application/vnd.oipf.spdlist+xml": { source: "iana", compressible: true }, "application/vnd.oipf.ueprofile+xml": { source: "iana", compressible: true }, "application/vnd.oipf.userprofile+xml": { source: "iana", compressible: true }, "application/vnd.olpc-sugar": { source: "iana", extensions: ["xo"] }, "application/vnd.oma-scws-config": { source: "iana" }, "application/vnd.oma-scws-http-request": { source: "iana" }, "application/vnd.oma-scws-http-response": { source: "iana" }, "application/vnd.oma.bcast.associated-procedure-parameter+xml": { source: "iana", compressible: true }, "application/vnd.oma.bcast.drm-trigger+xml": { source: "iana", compressible: true }, "application/vnd.oma.bcast.imd+xml": { source: "iana", compressible: true }, "application/vnd.oma.bcast.ltkm": { source: "iana" }, "application/vnd.oma.bcast.notification+xml": { source: "iana", compressible: true }, "application/vnd.oma.bcast.provisioningtrigger": { source: "iana" }, "application/vnd.oma.bcast.sgboot": { source: "iana" }, "application/vnd.oma.bcast.sgdd+xml": { source: "iana", compressible: true }, "application/vnd.oma.bcast.sgdu": { source: "iana" }, "application/vnd.oma.bcast.simple-symbol-container": { source: "iana" }, "application/vnd.oma.bcast.smartcard-trigger+xml": { source: "iana", compressible: true }, "application/vnd.oma.bcast.sprov+xml": { source: "iana", compressible: true }, "application/vnd.oma.bcast.stkm": { source: "iana" }, "application/vnd.oma.cab-address-book+xml": { source: "iana", compressible: true }, "application/vnd.oma.cab-feature-handler+xml": { source: "iana", compressible: true }, "application/vnd.oma.cab-pcc+xml": { source: "iana", compressible: true }, "application/vnd.oma.cab-subs-invite+xml": { source: "iana", compressible: true }, "application/vnd.oma.cab-user-prefs+xml": { source: "iana", compressible: true }, "application/vnd.oma.dcd": { source: "iana" }, "application/vnd.oma.dcdc": { source: "iana" }, "application/vnd.oma.dd2+xml": { source: "iana", compressible: true, extensions: ["dd2"] }, "application/vnd.oma.drm.risd+xml": { source: "iana", compressible: true }, "application/vnd.oma.group-usage-list+xml": { source: "iana", compressible: true }, "application/vnd.oma.lwm2m+cbor": { source: "iana" }, "application/vnd.oma.lwm2m+json": { source: "iana", compressible: true }, "application/vnd.oma.lwm2m+tlv": { source: "iana" }, "application/vnd.oma.pal+xml": { source: "iana", compressible: true }, "application/vnd.oma.poc.detailed-progress-report+xml": { source: "iana", compressible: true }, "application/vnd.oma.poc.final-report+xml": { source: "iana", compressible: true }, "application/vnd.oma.poc.groups+xml": { source: "iana", compressible: true }, "application/vnd.oma.poc.invocation-descriptor+xml": { source: "iana", compressible: true }, "application/vnd.oma.poc.optimized-progress-report+xml": { source: "iana", compressible: true }, "application/vnd.oma.push": { source: "iana" }, "application/vnd.oma.scidm.messages+xml": { source: "iana", compressible: true }, "application/vnd.oma.xcap-directory+xml": { source: "iana", compressible: true }, "application/vnd.omads-email+xml": { source: "iana", charset: "UTF-8", compressible: true }, "application/vnd.omads-file+xml": { source: "iana", charset: "UTF-8", compressible: true }, "application/vnd.omads-folder+xml": { source: "iana", charset: "UTF-8", compressible: true }, "application/vnd.omaloc-supl-init": { source: "iana" }, "application/vnd.onepager": { source: "iana" }, "application/vnd.onepagertamp": { source: "iana" }, "application/vnd.onepagertamx": { source: "iana" }, "application/vnd.onepagertat": { source: "iana" }, "application/vnd.onepagertatp": { source: "iana" }, "application/vnd.onepagertatx": { source: "iana" }, "application/vnd.openblox.game+xml": { source: "iana", compressible: true, extensions: ["obgx"] }, "application/vnd.openblox.game-binary": { source: "iana" }, "application/vnd.openeye.oeb": { source: "iana" }, "application/vnd.openofficeorg.extension": { source: "apache", extensions: ["oxt"] }, "application/vnd.openstreetmap.data+xml": { source: "iana", compressible: true, extensions: ["osm"] }, "application/vnd.opentimestamps.ots": { source: "iana" }, "application/vnd.openxmlformats-officedocument.custom-properties+xml": { source: "iana", compressible: true }, "application/vnd.openxmlformats-officedocument.customxmlproperties+xml": { source: "iana", compressible: true }, "application/vnd.openxmlformats-officedocument.drawing+xml": { source: "iana", compressible: true }, "application/vnd.openxmlformats-officedocument.drawingml.chart+xml": { source: "iana", compressible: true }, "application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml": { source: "iana", compressible: true }, "application/vnd.openxmlformats-officedocument.drawingml.diagramcolors+xml": { source: "iana", compressible: true }, "application/vnd.openxmlformats-officedocument.drawingml.diagramdata+xml": { source: "iana", compressible: true }, "application/vnd.openxmlformats-officedocument.drawingml.diagramlayout+xml": { source: "iana", compressible: true }, "application/vnd.openxmlformats-officedocument.drawingml.diagramstyle+xml": { source: "iana", compressible: true }, "application/vnd.openxmlformats-officedocument.extended-properties+xml": { source: "iana", compressible: true }, "application/vnd.openxmlformats-officedocument.presentationml.commentauthors+xml": { source: "iana", compressible: true }, "application/vnd.openxmlformats-officedocument.presentationml.comments+xml": { source: "iana", compressible: true }, "application/vnd.openxmlformats-officedocument.presentationml.handoutmaster+xml": { source: "iana", compressible: true }, "application/vnd.openxmlformats-officedocument.presentationml.notesmaster+xml": { source: "iana", compressible: true }, "application/vnd.openxmlformats-officedocument.presentationml.notesslide+xml": { source: "iana", compressible: true }, "application/vnd.openxmlformats-officedocument.presentationml.presentation": { source: "iana", compressible: false, extensions: ["pptx"] }, "application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml": { source: "iana", compressible: true }, "application/vnd.openxmlformats-officedocument.presentationml.presprops+xml": { source: "iana", compressible: true }, "application/vnd.openxmlformats-officedocument.presentationml.slide": { source: "iana", extensions: ["sldx"] }, "application/vnd.openxmlformats-officedocument.presentationml.slide+xml": { source: "iana", compressible: true }, "application/vnd.openxmlformats-officedocument.presentationml.slidelayout+xml": { source: "iana", compressible: true }, "application/vnd.openxmlformats-officedocument.presentationml.slidemaster+xml": { source: "iana", compressible: true }, "application/vnd.openxmlformats-officedocument.presentationml.slideshow": { source: "iana", extensions: ["ppsx"] }, "application/vnd.openxmlformats-officedocument.presentationml.slideshow.main+xml": { source: "iana", compressible: true }, "application/vnd.openxmlformats-officedocument.presentationml.slideupdateinfo+xml": { source: "iana", compressible: true }, "application/vnd.openxmlformats-officedocument.presentationml.tablestyles+xml": { source: "iana", compressible: true }, "application/vnd.openxmlformats-officedocument.presentationml.tags+xml": { source: "iana", compressible: true }, "application/vnd.openxmlformats-officedocument.presentationml.template": { source: "iana", extensions: ["potx"] }, "application/vnd.openxmlformats-officedocument.presentationml.template.main+xml": { source: "iana", compressible: true }, "application/vnd.openxmlformats-officedocument.presentationml.viewprops+xml": { source: "iana", compressible: true }, "application/vnd.openxmlformats-officedocument.spreadsheetml.calcchain+xml": { source: "iana", compressible: true }, "application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml": { source: "iana", compressible: true }, "application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml": { source: "iana", compressible: true }, "application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml": { source: "iana", compressible: true }, "application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml": { source: "iana", compressible: true }, "application/vnd.openxmlformats-officedocument.spreadsheetml.externallink+xml": { source: "iana", compressible: true }, "application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcachedefinition+xml": { source: "iana", compressible: true }, "application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcacherecords+xml": { source: "iana", compressible: true }, "application/vnd.openxmlformats-officedocument.spreadsheetml.pivottable+xml": { source: "iana", compressible: true }, "application/vnd.openxmlformats-officedocument.spreadsheetml.querytable+xml": { source: "iana", compressible: true }, "application/vnd.openxmlformats-officedocument.spreadsheetml.revisionheaders+xml": { source: "iana", compressible: true }, "application/vnd.openxmlformats-officedocument.spreadsheetml.revisionlog+xml": { source: "iana", compressible: true }, "application/vnd.openxmlformats-officedocument.spreadsheetml.sharedstrings+xml": { source: "iana", compressible: true }, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet": { source: "iana", compressible: false, extensions: ["xlsx"] }, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml": { source: "iana", compressible: true }, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheetmetadata+xml": { source: "iana", compressible: true }, "application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml": { source: "iana", compressible: true }, "application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml": { source: "iana", compressible: true }, "application/vnd.openxmlformats-officedocument.spreadsheetml.tablesinglecells+xml": { source: "iana", compressible: true }, "application/vnd.openxmlformats-officedocument.spreadsheetml.template": { source: "iana", extensions: ["xltx"] }, "application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml": { source: "iana", compressible: true }, "application/vnd.openxmlformats-officedocument.spreadsheetml.usernames+xml": { source: "iana", compressible: true }, "application/vnd.openxmlformats-officedocument.spreadsheetml.volatiledependencies+xml": { source: "iana", compressible: true }, "application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml": { source: "iana", compressible: true }, "application/vnd.openxmlformats-officedocument.theme+xml": { source: "iana", compressible: true }, "application/vnd.openxmlformats-officedocument.themeoverride+xml": { source: "iana", compressible: true }, "application/vnd.openxmlformats-officedocument.vmldrawing": { source: "iana" }, "application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml": { source: "iana", compressible: true }, "application/vnd.openxmlformats-officedocument.wordprocessingml.document": { source: "iana", compressible: false, extensions: ["docx"] }, "application/vnd.openxmlformats-officedocument.wordprocessingml.document.glossary+xml": { source: "iana", compressible: true }, "application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml": { source: "iana", compressible: true }, "application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes+xml": { source: "iana", compressible: true }, "application/vnd.openxmlformats-officedocument.wordprocessingml.fonttable+xml": { source: "iana", compressible: true }, "application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml": { source: "iana", compressible: true }, "application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml": { source: "iana", compressible: true }, "application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml": { source: "iana", compressible: true }, "application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml": { source: "iana", compressible: true }, "application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml": { source: "iana", compressible: true }, "application/vnd.openxmlformats-officedocument.wordprocessingml.template": { source: "iana", extensions: ["dotx"] }, "application/vnd.openxmlformats-officedocument.wordprocessingml.template.main+xml": { source: "iana", compressible: true }, "application/vnd.openxmlformats-officedocument.wordprocessingml.websettings+xml": { source: "iana", compressible: true }, "application/vnd.openxmlformats-package.core-properties+xml": { source: "iana", compressible: true }, "application/vnd.openxmlformats-package.digital-signature-xmlsignature+xml": { source: "iana", compressible: true }, "application/vnd.openxmlformats-package.relationships+xml": { source: "iana", compressible: true }, "application/vnd.oracle.resource+json": { source: "iana", compressible: true }, "application/vnd.orange.indata": { source: "iana" }, "application/vnd.osa.netdeploy": { source: "iana" }, "application/vnd.osgeo.mapguide.package": { source: "iana", extensions: ["mgp"] }, "application/vnd.osgi.bundle": { source: "iana" }, "application/vnd.osgi.dp": { source: "iana", extensions: ["dp"] }, "application/vnd.osgi.subsystem": { source: "iana", extensions: ["esa"] }, "application/vnd.otps.ct-kip+xml": { source: "iana", compressible: true }, "application/vnd.oxli.countgraph": { source: "iana" }, "application/vnd.pagerduty+json": { source: "iana", compressible: true }, "application/vnd.palm": { source: "iana", extensions: ["pdb", "pqa", "oprc"] }, "application/vnd.panoply": { source: "iana" }, "application/vnd.paos.xml": { source: "iana" }, "application/vnd.patentdive": { source: "iana" }, "application/vnd.patientecommsdoc": { source: "iana" }, "application/vnd.pawaafile": { source: "iana", extensions: ["paw"] }, "application/vnd.pcos": { source: "iana" }, "application/vnd.pg.format": { source: "iana", extensions: ["str"] }, "application/vnd.pg.osasli": { source: "iana", extensions: ["ei6"] }, "application/vnd.piaccess.application-licence": { source: "iana" }, "application/vnd.picsel": { source: "iana", extensions: ["efif"] }, "application/vnd.pmi.widget": { source: "iana", extensions: ["wg"] }, "application/vnd.poc.group-advertisement+xml": { source: "iana", compressible: true }, "application/vnd.pocketlearn": { source: "iana", extensions: ["plf"] }, "application/vnd.powerbuilder6": { source: "iana", extensions: ["pbd"] }, "application/vnd.powerbuilder6-s": { source: "iana" }, "application/vnd.powerbuilder7": { source: "iana" }, "application/vnd.powerbuilder7-s": { source: "iana" }, "application/vnd.powerbuilder75": { source: "iana" }, "application/vnd.powerbuilder75-s": { source: "iana" }, "application/vnd.preminet": { source: "iana" }, "application/vnd.previewsystems.box": { source: "iana", extensions: ["box"] }, "application/vnd.proteus.magazine": { source: "iana", extensions: ["mgz"] }, "application/vnd.psfs": { source: "iana" }, "application/vnd.publishare-delta-tree": { source: "iana", extensions: ["qps"] }, "application/vnd.pvi.ptid1": { source: "iana", extensions: ["ptid"] }, "application/vnd.pwg-multiplexed": { source: "iana" }, "application/vnd.pwg-xhtml-print+xml": { source: "iana", compressible: true }, "application/vnd.qualcomm.brew-app-res": { source: "iana" }, "application/vnd.quarantainenet": { source: "iana" }, "application/vnd.quark.quarkxpress": { source: "iana", extensions: ["qxd", "qxt", "qwd", "qwt", "qxl", "qxb"] }, "application/vnd.quobject-quoxdocument": { source: "iana" }, "application/vnd.radisys.moml+xml": { source: "iana", compressible: true }, "application/vnd.radisys.msml+xml": { source: "iana", compressible: true }, "application/vnd.radisys.msml-audit+xml": { source: "iana", compressible: true }, "application/vnd.radisys.msml-audit-conf+xml": { source: "iana", compressible: true }, "application/vnd.radisys.msml-audit-conn+xml": { source: "iana", compressible: true }, "application/vnd.radisys.msml-audit-dialog+xml": { source: "iana", compressible: true }, "application/vnd.radisys.msml-audit-stream+xml": { source: "iana", compressible: true }, "application/vnd.radisys.msml-conf+xml": { source: "iana", compressible: true }, "application/vnd.radisys.msml-dialog+xml": { source: "iana", compressible: true }, "application/vnd.radisys.msml-dialog-base+xml": { source: "iana", compressible: true }, "application/vnd.radisys.msml-dialog-fax-detect+xml": { source: "iana", compressible: true }, "application/vnd.radisys.msml-dialog-fax-sendrecv+xml": { source: "iana", compressible: true }, "application/vnd.radisys.msml-dialog-group+xml": { source: "iana", compressible: true }, "application/vnd.radisys.msml-dialog-speech+xml": { source: "iana", compressible: true }, "application/vnd.radisys.msml-dialog-transform+xml": { source: "iana", compressible: true }, "application/vnd.rainstor.data": { source: "iana" }, "application/vnd.rapid": { source: "iana" }, "application/vnd.rar": { source: "iana", extensions: ["rar"] }, "application/vnd.realvnc.bed": { source: "iana", extensions: ["bed"] }, "application/vnd.recordare.musicxml": { source: "iana", extensions: ["mxl"] }, "application/vnd.recordare.musicxml+xml": { source: "iana", compressible: true, extensions: ["musicxml"] }, "application/vnd.renlearn.rlprint": { source: "iana" }, "application/vnd.resilient.logic": { source: "iana" }, "application/vnd.restful+json": { source: "iana", compressible: true }, "application/vnd.rig.cryptonote": { source: "iana", extensions: ["cryptonote"] }, "application/vnd.rim.cod": { source: "apache", extensions: ["cod"] }, "application/vnd.rn-realmedia": { source: "apache", extensions: ["rm"] }, "application/vnd.rn-realmedia-vbr": { source: "apache", extensions: ["rmvb"] }, "application/vnd.route66.link66+xml": { source: "iana", compressible: true, extensions: ["link66"] }, "application/vnd.rs-274x": { source: "iana" }, "application/vnd.ruckus.download": { source: "iana" }, "application/vnd.s3sms": { source: "iana" }, "application/vnd.sailingtracker.track": { source: "iana", extensions: ["st"] }, "application/vnd.sar": { source: "iana" }, "application/vnd.sbm.cid": { source: "iana" }, "application/vnd.sbm.mid2": { source: "iana" }, "application/vnd.scribus": { source: "iana" }, "application/vnd.sealed.3df": { source: "iana" }, "application/vnd.sealed.csf": { source: "iana" }, "application/vnd.sealed.doc": { source: "iana" }, "application/vnd.sealed.eml": { source: "iana" }, "application/vnd.sealed.mht": { source: "iana" }, "application/vnd.sealed.net": { source: "iana" }, "application/vnd.sealed.ppt": { source: "iana" }, "application/vnd.sealed.tiff": { source: "iana" }, "application/vnd.sealed.xls": { source: "iana" }, "application/vnd.sealedmedia.softseal.html": { source: "iana" }, "application/vnd.sealedmedia.softseal.pdf": { source: "iana" }, "application/vnd.seemail": { source: "iana", extensions: ["see"] }, "application/vnd.seis+json": { source: "iana", compressible: true }, "application/vnd.sema": { source: "iana", extensions: ["sema"] }, "application/vnd.semd": { source: "iana", extensions: ["semd"] }, "application/vnd.semf": { source: "iana", extensions: ["semf"] }, "application/vnd.shade-save-file": { source: "iana" }, "application/vnd.shana.informed.formdata": { source: "iana", extensions: ["ifm"] }, "application/vnd.shana.informed.formtemplate": { source: "iana", extensions: ["itp"] }, "application/vnd.shana.informed.interchange": { source: "iana", extensions: ["iif"] }, "application/vnd.shana.informed.package": { source: "iana", extensions: ["ipk"] }, "application/vnd.shootproof+json": { source: "iana", compressible: true }, "application/vnd.shopkick+json": { source: "iana", compressible: true }, "application/vnd.shp": { source: "iana" }, "application/vnd.shx": { source: "iana" }, "application/vnd.sigrok.session": { source: "iana" }, "application/vnd.simtech-mindmapper": { source: "iana", extensions: ["twd", "twds"] }, "application/vnd.siren+json": { source: "iana", compressible: true }, "application/vnd.smaf": { source: "iana", extensions: ["mmf"] }, "application/vnd.smart.notebook": { source: "iana" }, "application/vnd.smart.teacher": { source: "iana", extensions: ["teacher"] }, "application/vnd.snesdev-page-table": { source: "iana" }, "application/vnd.software602.filler.form+xml": { source: "iana", compressible: true, extensions: ["fo"] }, "application/vnd.software602.filler.form-xml-zip": { source: "iana" }, "application/vnd.solent.sdkm+xml": { source: "iana", compressible: true, extensions: ["sdkm", "sdkd"] }, "application/vnd.spotfire.dxp": { source: "iana", extensions: ["dxp"] }, "application/vnd.spotfire.sfs": { source: "iana", extensions: ["sfs"] }, "application/vnd.sqlite3": { source: "iana" }, "application/vnd.sss-cod": { source: "iana" }, "application/vnd.sss-dtf": { source: "iana" }, "application/vnd.sss-ntf": { source: "iana" }, "application/vnd.stardivision.calc": { source: "apache", extensions: ["sdc"] }, "application/vnd.stardivision.draw": { source: "apache", extensions: ["sda"] }, "application/vnd.stardivision.impress": { source: "apache", extensions: ["sdd"] }, "application/vnd.stardivision.math": { source: "apache", extensions: ["smf"] }, "application/vnd.stardivision.writer": { source: "apache", extensions: ["sdw", "vor"] }, "application/vnd.stardivision.writer-global": { source: "apache", extensions: ["sgl"] }, "application/vnd.stepmania.package": { source: "iana", extensions: ["smzip"] }, "application/vnd.stepmania.stepchart": { source: "iana", extensions: ["sm"] }, "application/vnd.street-stream": { source: "iana" }, "application/vnd.sun.wadl+xml": { source: "iana", compressible: true, extensions: ["wadl"] }, "application/vnd.sun.xml.calc": { source: "apache", extensions: ["sxc"] }, "application/vnd.sun.xml.calc.template": { source: "apache", extensions: ["stc"] }, "application/vnd.sun.xml.draw": { source: "apache", extensions: ["sxd"] }, "application/vnd.sun.xml.draw.template": { source: "apache", extensions: ["std"] }, "application/vnd.sun.xml.impress": { source: "apache", extensions: ["sxi"] }, "application/vnd.sun.xml.impress.template": { source: "apache", extensions: ["sti"] }, "application/vnd.sun.xml.math": { source: "apache", extensions: ["sxm"] }, "application/vnd.sun.xml.writer": { source: "apache", extensions: ["sxw"] }, "application/vnd.sun.xml.writer.global": { source: "apache", extensions: ["sxg"] }, "application/vnd.sun.xml.writer.template": { source: "apache", extensions: ["stw"] }, "application/vnd.sus-calendar": { source: "iana", extensions: ["sus", "susp"] }, "application/vnd.svd": { source: "iana", extensions: ["svd"] }, "application/vnd.swiftview-ics": { source: "iana" }, "application/vnd.sycle+xml": { source: "iana", compressible: true }, "application/vnd.syft+json": { source: "iana", compressible: true }, "application/vnd.symbian.install": { source: "apache", extensions: ["sis", "sisx"] }, "application/vnd.syncml+xml": { source: "iana", charset: "UTF-8", compressible: true, extensions: ["xsm"] }, "application/vnd.syncml.dm+wbxml": { source: "iana", charset: "UTF-8", extensions: ["bdm"] }, "application/vnd.syncml.dm+xml": { source: "iana", charset: "UTF-8", compressible: true, extensions: ["xdm"] }, "application/vnd.syncml.dm.notification": { source: "iana" }, "application/vnd.syncml.dmddf+wbxml": { source: "iana" }, "application/vnd.syncml.dmddf+xml": { source: "iana", charset: "UTF-8", compressible: true, extensions: ["ddf"] }, "application/vnd.syncml.dmtnds+wbxml": { source: "iana" }, "application/vnd.syncml.dmtnds+xml": { source: "iana", charset: "UTF-8", compressible: true }, "application/vnd.syncml.ds.notification": { source: "iana" }, "application/vnd.tableschema+json": { source: "iana", compressible: true }, "application/vnd.tao.intent-module-archive": { source: "iana", extensions: ["tao"] }, "application/vnd.tcpdump.pcap": { source: "iana", extensions: ["pcap", "cap", "dmp"] }, "application/vnd.think-cell.ppttc+json": { source: "iana", compressible: true }, "application/vnd.tmd.mediaflex.api+xml": { source: "iana", compressible: true }, "application/vnd.tml": { source: "iana" }, "application/vnd.tmobile-livetv": { source: "iana", extensions: ["tmo"] }, "application/vnd.tri.onesource": { source: "iana" }, "application/vnd.trid.tpt": { source: "iana", extensions: ["tpt"] }, "application/vnd.triscape.mxs": { source: "iana", extensions: ["mxs"] }, "application/vnd.trueapp": { source: "iana", extensions: ["tra"] }, "application/vnd.truedoc": { source: "iana" }, "application/vnd.ubisoft.webplayer": { source: "iana" }, "application/vnd.ufdl": { source: "iana", extensions: ["ufd", "ufdl"] }, "application/vnd.uiq.theme": { source: "iana", extensions: ["utz"] }, "application/vnd.umajin": { source: "iana", extensions: ["umj"] }, "application/vnd.unity": { source: "iana", extensions: ["unityweb"] }, "application/vnd.uoml+xml": { source: "iana", compressible: true, extensions: ["uoml"] }, "application/vnd.uplanet.alert": { source: "iana" }, "application/vnd.uplanet.alert-wbxml": { source: "iana" }, "application/vnd.uplanet.bearer-choice": { source: "iana" }, "application/vnd.uplanet.bearer-choice-wbxml": { source: "iana" }, "application/vnd.uplanet.cacheop": { source: "iana" }, "application/vnd.uplanet.cacheop-wbxml": { source: "iana" }, "application/vnd.uplanet.channel": { source: "iana" }, "application/vnd.uplanet.channel-wbxml": { source: "iana" }, "application/vnd.uplanet.list": { source: "iana" }, "application/vnd.uplanet.list-wbxml": { source: "iana" }, "application/vnd.uplanet.listcmd": { source: "iana" }, "application/vnd.uplanet.listcmd-wbxml": { source: "iana" }, "application/vnd.uplanet.signal": { source: "iana" }, "application/vnd.uri-map": { source: "iana" }, "application/vnd.valve.source.material": { source: "iana" }, "application/vnd.vcx": { source: "iana", extensions: ["vcx"] }, "application/vnd.vd-study": { source: "iana" }, "application/vnd.vectorworks": { source: "iana" }, "application/vnd.vel+json": { source: "iana", compressible: true }, "application/vnd.verimatrix.vcas": { source: "iana" }, "application/vnd.veritone.aion+json": { source: "iana", compressible: true }, "application/vnd.veryant.thin": { source: "iana" }, "application/vnd.ves.encrypted": { source: "iana" }, "application/vnd.vidsoft.vidconference": { source: "iana" }, "application/vnd.visio": { source: "iana", extensions: ["vsd", "vst", "vss", "vsw"] }, "application/vnd.visionary": { source: "iana", extensions: ["vis"] }, "application/vnd.vividence.scriptfile": { source: "iana" }, "application/vnd.vsf": { source: "iana", extensions: ["vsf"] }, "application/vnd.wap.sic": { source: "iana" }, "application/vnd.wap.slc": { source: "iana" }, "application/vnd.wap.wbxml": { source: "iana", charset: "UTF-8", extensions: ["wbxml"] }, "application/vnd.wap.wmlc": { source: "iana", extensions: ["wmlc"] }, "application/vnd.wap.wmlscriptc": { source: "iana", extensions: ["wmlsc"] }, "application/vnd.webturbo": { source: "iana", extensions: ["wtb"] }, "application/vnd.wfa.dpp": { source: "iana" }, "application/vnd.wfa.p2p": { source: "iana" }, "application/vnd.wfa.wsc": { source: "iana" }, "application/vnd.windows.devicepairing": { source: "iana" }, "application/vnd.wmc": { source: "iana" }, "application/vnd.wmf.bootstrap": { source: "iana" }, "application/vnd.wolfram.mathematica": { source: "iana" }, "application/vnd.wolfram.mathematica.package": { source: "iana" }, "application/vnd.wolfram.player": { source: "iana", extensions: ["nbp"] }, "application/vnd.wordperfect": { source: "iana", extensions: ["wpd"] }, "application/vnd.wqd": { source: "iana", extensions: ["wqd"] }, "application/vnd.wrq-hp3000-labelled": { source: "iana" }, "application/vnd.wt.stf": { source: "iana", extensions: ["stf"] }, "application/vnd.wv.csp+wbxml": { source: "iana" }, "application/vnd.wv.csp+xml": { source: "iana", compressible: true }, "application/vnd.wv.ssp+xml": { source: "iana", compressible: true }, "application/vnd.xacml+json": { source: "iana", compressible: true }, "application/vnd.xara": { source: "iana", extensions: ["xar"] }, "application/vnd.xfdl": { source: "iana", extensions: ["xfdl"] }, "application/vnd.xfdl.webform": { source: "iana" }, "application/vnd.xmi+xml": { source: "iana", compressible: true }, "application/vnd.xmpie.cpkg": { source: "iana" }, "application/vnd.xmpie.dpkg": { source: "iana" }, "application/vnd.xmpie.plan": { source: "iana" }, "application/vnd.xmpie.ppkg": { source: "iana" }, "application/vnd.xmpie.xlim": { source: "iana" }, "application/vnd.yamaha.hv-dic": { source: "iana", extensions: ["hvd"] }, "application/vnd.yamaha.hv-script": { source: "iana", extensions: ["hvs"] }, "application/vnd.yamaha.hv-voice": { source: "iana", extensions: ["hvp"] }, "application/vnd.yamaha.openscoreformat": { source: "iana", extensions: ["osf"] }, "application/vnd.yamaha.openscoreformat.osfpvg+xml": { source: "iana", compressible: true, extensions: ["osfpvg"] }, "application/vnd.yamaha.remote-setup": { source: "iana" }, "application/vnd.yamaha.smaf-audio": { source: "iana", extensions: ["saf"] }, "application/vnd.yamaha.smaf-phrase": { source: "iana", extensions: ["spf"] }, "application/vnd.yamaha.through-ngn": { source: "iana" }, "application/vnd.yamaha.tunnel-udpencap": { source: "iana" }, "application/vnd.yaoweme": { source: "iana" }, "application/vnd.yellowriver-custom-menu": { source: "iana", extensions: ["cmp"] }, "application/vnd.youtube.yt": { source: "iana" }, "application/vnd.zul": { source: "iana", extensions: ["zir", "zirz"] }, "application/vnd.zzazz.deck+xml": { source: "iana", compressible: true, extensions: ["zaz"] }, "application/voicexml+xml": { source: "iana", compressible: true, extensions: ["vxml"] }, "application/voucher-cms+json": { source: "iana", compressible: true }, "application/vq-rtcpxr": { source: "iana" }, "application/wasm": { source: "iana", compressible: true, extensions: ["wasm"] }, "application/watcherinfo+xml": { source: "iana", compressible: true, extensions: ["wif"] }, "application/webpush-options+json": { source: "iana", compressible: true }, "application/whoispp-query": { source: "iana" }, "application/whoispp-response": { source: "iana" }, "application/widget": { source: "iana", extensions: ["wgt"] }, "application/winhlp": { source: "apache", extensions: ["hlp"] }, "application/wita": { source: "iana" }, "application/wordperfect5.1": { source: "iana" }, "application/wsdl+xml": { source: "iana", compressible: true, extensions: ["wsdl"] }, "application/wspolicy+xml": { source: "iana", compressible: true, extensions: ["wspolicy"] }, "application/x-7z-compressed": { source: "apache", compressible: false, extensions: ["7z"] }, "application/x-abiword": { source: "apache", extensions: ["abw"] }, "application/x-ace-compressed": { source: "apache", extensions: ["ace"] }, "application/x-amf": { source: "apache" }, "application/x-apple-diskimage": { source: "apache", extensions: ["dmg"] }, "application/x-arj": { compressible: false, extensions: ["arj"] }, "application/x-authorware-bin": { source: "apache", extensions: ["aab", "x32", "u32", "vox"] }, "application/x-authorware-map": { source: "apache", extensions: ["aam"] }, "application/x-authorware-seg": { source: "apache", extensions: ["aas"] }, "application/x-bcpio": { source: "apache", extensions: ["bcpio"] }, "application/x-bdoc": { compressible: false, extensions: ["bdoc"] }, "application/x-bittorrent": { source: "apache", extensions: ["torrent"] }, "application/x-blorb": { source: "apache", extensions: ["blb", "blorb"] }, "application/x-bzip": { source: "apache", compressible: false, extensions: ["bz"] }, "application/x-bzip2": { source: "apache", compressible: false, extensions: ["bz2", "boz"] }, "application/x-cbr": { source: "apache", extensions: ["cbr", "cba", "cbt", "cbz", "cb7"] }, "application/x-cdlink": { source: "apache", extensions: ["vcd"] }, "application/x-cfs-compressed": { source: "apache", extensions: ["cfs"] }, "application/x-chat": { source: "apache", extensions: ["chat"] }, "application/x-chess-pgn": { source: "apache", extensions: ["pgn"] }, "application/x-chrome-extension": { extensions: ["crx"] }, "application/x-cocoa": { source: "nginx", extensions: ["cco"] }, "application/x-compress": { source: "apache" }, "application/x-conference": { source: "apache", extensions: ["nsc"] }, "application/x-cpio": { source: "apache", extensions: ["cpio"] }, "application/x-csh": { source: "apache", extensions: ["csh"] }, "application/x-deb": { compressible: false }, "application/x-debian-package": { source: "apache", extensions: ["deb", "udeb"] }, "application/x-dgc-compressed": { source: "apache", extensions: ["dgc"] }, "application/x-director": { source: "apache", extensions: ["dir", "dcr", "dxr", "cst", "cct", "cxt", "w3d", "fgd", "swa"] }, "application/x-doom": { source: "apache", extensions: ["wad"] }, "application/x-dtbncx+xml": { source: "apache", compressible: true, extensions: ["ncx"] }, "application/x-dtbook+xml": { source: "apache", compressible: true, extensions: ["dtb"] }, "application/x-dtbresource+xml": { source: "apache", compressible: true, extensions: ["res"] }, "application/x-dvi": { source: "apache", compressible: false, extensions: ["dvi"] }, "application/x-envoy": { source: "apache", extensions: ["evy"] }, "application/x-eva": { source: "apache", extensions: ["eva"] }, "application/x-font-bdf": { source: "apache", extensions: ["bdf"] }, "application/x-font-dos": { source: "apache" }, "application/x-font-framemaker": { source: "apache" }, "application/x-font-ghostscript": { source: "apache", extensions: ["gsf"] }, "application/x-font-libgrx": { source: "apache" }, "application/x-font-linux-psf": { source: "apache", extensions: ["psf"] }, "application/x-font-pcf": { source: "apache", extensions: ["pcf"] }, "application/x-font-snf": { source: "apache", extensions: ["snf"] }, "application/x-font-speedo": { source: "apache" }, "application/x-font-sunos-news": { source: "apache" }, "application/x-font-type1": { source: "apache", extensions: ["pfa", "pfb", "pfm", "afm"] }, "application/x-font-vfont": { source: "apache" }, "application/x-freearc": { source: "apache", extensions: ["arc"] }, "application/x-futuresplash": { source: "apache", extensions: ["spl"] }, "application/x-gca-compressed": { source: "apache", extensions: ["gca"] }, "application/x-glulx": { source: "apache", extensions: ["ulx"] }, "application/x-gnumeric": { source: "apache", extensions: ["gnumeric"] }, "application/x-gramps-xml": { source: "apache", extensions: ["gramps"] }, "application/x-gtar": { source: "apache", extensions: ["gtar"] }, "application/x-gzip": { source: "apache" }, "application/x-hdf": { source: "apache", extensions: ["hdf"] }, "application/x-httpd-php": { compressible: true, extensions: ["php"] }, "application/x-install-instructions": { source: "apache", extensions: ["install"] }, "application/x-iso9660-image": { source: "apache", extensions: ["iso"] }, "application/x-iwork-keynote-sffkey": { extensions: ["key"] }, "application/x-iwork-numbers-sffnumbers": { extensions: ["numbers"] }, "application/x-iwork-pages-sffpages": { extensions: ["pages"] }, "application/x-java-archive-diff": { source: "nginx", extensions: ["jardiff"] }, "application/x-java-jnlp-file": { source: "apache", compressible: false, extensions: ["jnlp"] }, "application/x-javascript": { compressible: true }, "application/x-keepass2": { extensions: ["kdbx"] }, "application/x-latex": { source: "apache", compressible: false, extensions: ["latex"] }, "application/x-lua-bytecode": { extensions: ["luac"] }, "application/x-lzh-compressed": { source: "apache", extensions: ["lzh", "lha"] }, "application/x-makeself": { source: "nginx", extensions: ["run"] }, "application/x-mie": { source: "apache", extensions: ["mie"] }, "application/x-mobipocket-ebook": { source: "apache", extensions: ["prc", "mobi"] }, "application/x-mpegurl": { compressible: false }, "application/x-ms-application": { source: "apache", extensions: ["application"] }, "application/x-ms-shortcut": { source: "apache", extensions: ["lnk"] }, "application/x-ms-wmd": { source: "apache", extensions: ["wmd"] }, "application/x-ms-wmz": { source: "apache", extensions: ["wmz"] }, "application/x-ms-xbap": { source: "apache", extensions: ["xbap"] }, "application/x-msaccess": { source: "apache", extensions: ["mdb"] }, "application/x-msbinder": { source: "apache", extensions: ["obd"] }, "application/x-mscardfile": { source: "apache", extensions: ["crd"] }, "application/x-msclip": { source: "apache", extensions: ["clp"] }, "application/x-msdos-program": { extensions: ["exe"] }, "application/x-msdownload": { source: "apache", extensions: ["exe", "dll", "com", "bat", "msi"] }, "application/x-msmediaview": { source: "apache", extensions: ["mvb", "m13", "m14"] }, "application/x-msmetafile": { source: "apache", extensions: ["wmf", "wmz", "emf", "emz"] }, "application/x-msmoney": { source: "apache", extensions: ["mny"] }, "application/x-mspublisher": { source: "apache", extensions: ["pub"] }, "application/x-msschedule": { source: "apache", extensions: ["scd"] }, "application/x-msterminal": { source: "apache", extensions: ["trm"] }, "application/x-mswrite": { source: "apache", extensions: ["wri"] }, "application/x-netcdf": { source: "apache", extensions: ["nc", "cdf"] }, "application/x-ns-proxy-autoconfig": { compressible: true, extensions: ["pac"] }, "application/x-nzb": { source: "apache", extensions: ["nzb"] }, "application/x-perl": { source: "nginx", extensions: ["pl", "pm"] }, "application/x-pilot": { source: "nginx", extensions: ["prc", "pdb"] }, "application/x-pkcs12": { source: "apache", compressible: false, extensions: ["p12", "pfx"] }, "application/x-pkcs7-certificates": { source: "apache", extensions: ["p7b", "spc"] }, "application/x-pkcs7-certreqresp": { source: "apache", extensions: ["p7r"] }, "application/x-pki-message": { source: "iana" }, "application/x-rar-compressed": { source: "apache", compressible: false, extensions: ["rar"] }, "application/x-redhat-package-manager": { source: "nginx", extensions: ["rpm"] }, "application/x-research-info-systems": { source: "apache", extensions: ["ris"] }, "application/x-sea": { source: "nginx", extensions: ["sea"] }, "application/x-sh": { source: "apache", compressible: true, extensions: ["sh"] }, "application/x-shar": { source: "apache", extensions: ["shar"] }, "application/x-shockwave-flash": { source: "apache", compressible: false, extensions: ["swf"] }, "application/x-silverlight-app": { source: "apache", extensions: ["xap"] }, "application/x-sql": { source: "apache", extensions: ["sql"] }, "application/x-stuffit": { source: "apache", compressible: false, extensions: ["sit"] }, "application/x-stuffitx": { source: "apache", extensions: ["sitx"] }, "application/x-subrip": { source: "apache", extensions: ["srt"] }, "application/x-sv4cpio": { source: "apache", extensions: ["sv4cpio"] }, "application/x-sv4crc": { source: "apache", extensions: ["sv4crc"] }, "application/x-t3vm-image": { source: "apache", extensions: ["t3"] }, "application/x-tads": { source: "apache", extensions: ["gam"] }, "application/x-tar": { source: "apache", compressible: true, extensions: ["tar"] }, "application/x-tcl": { source: "apache", extensions: ["tcl", "tk"] }, "application/x-tex": { source: "apache", extensions: ["tex"] }, "application/x-tex-tfm": { source: "apache", extensions: ["tfm"] }, "application/x-texinfo": { source: "apache", extensions: ["texinfo", "texi"] }, "application/x-tgif": { source: "apache", extensions: ["obj"] }, "application/x-ustar": { source: "apache", extensions: ["ustar"] }, "application/x-virtualbox-hdd": { compressible: true, extensions: ["hdd"] }, "application/x-virtualbox-ova": { compressible: true, extensions: ["ova"] }, "application/x-virtualbox-ovf": { compressible: true, extensions: ["ovf"] }, "application/x-virtualbox-vbox": { compressible: true, extensions: ["vbox"] }, "application/x-virtualbox-vbox-extpack": { compressible: false, extensions: ["vbox-extpack"] }, "application/x-virtualbox-vdi": { compressible: true, extensions: ["vdi"] }, "application/x-virtualbox-vhd": { compressible: true, extensions: ["vhd"] }, "application/x-virtualbox-vmdk": { compressible: true, extensions: ["vmdk"] }, "application/x-wais-source": { source: "apache", extensions: ["src"] }, "application/x-web-app-manifest+json": { compressible: true, extensions: ["webapp"] }, "application/x-www-form-urlencoded": { source: "iana", compressible: true }, "application/x-x509-ca-cert": { source: "iana", extensions: ["der", "crt", "pem"] }, "application/x-x509-ca-ra-cert": { source: "iana" }, "application/x-x509-next-ca-cert": { source: "iana" }, "application/x-xfig": { source: "apache", extensions: ["fig"] }, "application/x-xliff+xml": { source: "apache", compressible: true, extensions: ["xlf"] }, "application/x-xpinstall": { source: "apache", compressible: false, extensions: ["xpi"] }, "application/x-xz": { source: "apache", extensions: ["xz"] }, "application/x-zmachine": { source: "apache", extensions: ["z1", "z2", "z3", "z4", "z5", "z6", "z7", "z8"] }, "application/x400-bp": { source: "iana" }, "application/xacml+xml": { source: "iana", compressible: true }, "application/xaml+xml": { source: "apache", compressible: true, extensions: ["xaml"] }, "application/xcap-att+xml": { source: "iana", compressible: true, extensions: ["xav"] }, "application/xcap-caps+xml": { source: "iana", compressible: true, extensions: ["xca"] }, "application/xcap-diff+xml": { source: "iana", compressible: true, extensions: ["xdf"] }, "application/xcap-el+xml": { source: "iana", compressible: true, extensions: ["xel"] }, "application/xcap-error+xml": { source: "iana", compressible: true }, "application/xcap-ns+xml": { source: "iana", compressible: true, extensions: ["xns"] }, "application/xcon-conference-info+xml": { source: "iana", compressible: true }, "application/xcon-conference-info-diff+xml": { source: "iana", compressible: true }, "application/xenc+xml": { source: "iana", compressible: true, extensions: ["xenc"] }, "application/xhtml+xml": { source: "iana", compressible: true, extensions: ["xhtml", "xht"] }, "application/xhtml-voice+xml": { source: "apache", compressible: true }, "application/xliff+xml": { source: "iana", compressible: true, extensions: ["xlf"] }, "application/xml": { source: "iana", compressible: true, extensions: ["xml", "xsl", "xsd", "rng"] }, "application/xml-dtd": { source: "iana", compressible: true, extensions: ["dtd"] }, "application/xml-external-parsed-entity": { source: "iana" }, "application/xml-patch+xml": { source: "iana", compressible: true }, "application/xmpp+xml": { source: "iana", compressible: true }, "application/xop+xml": { source: "iana", compressible: true, extensions: ["xop"] }, "application/xproc+xml": { source: "apache", compressible: true, extensions: ["xpl"] }, "application/xslt+xml": { source: "iana", compressible: true, extensions: ["xsl", "xslt"] }, "application/xspf+xml": { source: "apache", compressible: true, extensions: ["xspf"] }, "application/xv+xml": { source: "iana", compressible: true, extensions: ["mxml", "xhvml", "xvml", "xvm"] }, "application/yang": { source: "iana", extensions: ["yang"] }, "application/yang-data+json": { source: "iana", compressible: true }, "application/yang-data+xml": { source: "iana", compressible: true }, "application/yang-patch+json": { source: "iana", compressible: true }, "application/yang-patch+xml": { source: "iana", compressible: true }, "application/yin+xml": { source: "iana", compressible: true, extensions: ["yin"] }, "application/zip": { source: "iana", compressible: false, extensions: ["zip"] }, "application/zlib": { source: "iana" }, "application/zstd": { source: "iana" }, "audio/1d-interleaved-parityfec": { source: "iana" }, "audio/32kadpcm": { source: "iana" }, "audio/3gpp": { source: "iana", compressible: false, extensions: ["3gpp"] }, "audio/3gpp2": { source: "iana" }, "audio/aac": { source: "iana" }, "audio/ac3": { source: "iana" }, "audio/adpcm": { source: "apache", extensions: ["adp"] }, "audio/amr": { source: "iana", extensions: ["amr"] }, "audio/amr-wb": { source: "iana" }, "audio/amr-wb+": { source: "iana" }, "audio/aptx": { source: "iana" }, "audio/asc": { source: "iana" }, "audio/atrac-advanced-lossless": { source: "iana" }, "audio/atrac-x": { source: "iana" }, "audio/atrac3": { source: "iana" }, "audio/basic": { source: "iana", compressible: false, extensions: ["au", "snd"] }, "audio/bv16": { source: "iana" }, "audio/bv32": { source: "iana" }, "audio/clearmode": { source: "iana" }, "audio/cn": { source: "iana" }, "audio/dat12": { source: "iana" }, "audio/dls": { source: "iana" }, "audio/dsr-es201108": { source: "iana" }, "audio/dsr-es202050": { source: "iana" }, "audio/dsr-es202211": { source: "iana" }, "audio/dsr-es202212": { source: "iana" }, "audio/dv": { source: "iana" }, "audio/dvi4": { source: "iana" }, "audio/eac3": { source: "iana" }, "audio/encaprtp": { source: "iana" }, "audio/evrc": { source: "iana" }, "audio/evrc-qcp": { source: "iana" }, "audio/evrc0": { source: "iana" }, "audio/evrc1": { source: "iana" }, "audio/evrcb": { source: "iana" }, "audio/evrcb0": { source: "iana" }, "audio/evrcb1": { source: "iana" }, "audio/evrcnw": { source: "iana" }, "audio/evrcnw0": { source: "iana" }, "audio/evrcnw1": { source: "iana" }, "audio/evrcwb": { source: "iana" }, "audio/evrcwb0": { source: "iana" }, "audio/evrcwb1": { source: "iana" }, "audio/evs": { source: "iana" }, "audio/flexfec": { source: "iana" }, "audio/fwdred": { source: "iana" }, "audio/g711-0": { source: "iana" }, "audio/g719": { source: "iana" }, "audio/g722": { source: "iana" }, "audio/g7221": { source: "iana" }, "audio/g723": { source: "iana" }, "audio/g726-16": { source: "iana" }, "audio/g726-24": { source: "iana" }, "audio/g726-32": { source: "iana" }, "audio/g726-40": { source: "iana" }, "audio/g728": { source: "iana" }, "audio/g729": { source: "iana" }, "audio/g7291": { source: "iana" }, "audio/g729d": { source: "iana" }, "audio/g729e": { source: "iana" }, "audio/gsm": { source: "iana" }, "audio/gsm-efr": { source: "iana" }, "audio/gsm-hr-08": { source: "iana" }, "audio/ilbc": { source: "iana" }, "audio/ip-mr_v2.5": { source: "iana" }, "audio/isac": { source: "apache" }, "audio/l16": { source: "iana" }, "audio/l20": { source: "iana" }, "audio/l24": { source: "iana", compressible: false }, "audio/l8": { source: "iana" }, "audio/lpc": { source: "iana" }, "audio/melp": { source: "iana" }, "audio/melp1200": { source: "iana" }, "audio/melp2400": { source: "iana" }, "audio/melp600": { source: "iana" }, "audio/mhas": { source: "iana" }, "audio/midi": { source: "apache", extensions: ["mid", "midi", "kar", "rmi"] }, "audio/mobile-xmf": { source: "iana", extensions: ["mxmf"] }, "audio/mp3": { compressible: false, extensions: ["mp3"] }, "audio/mp4": { source: "iana", compressible: false, extensions: ["m4a", "mp4a"] }, "audio/mp4a-latm": { source: "iana" }, "audio/mpa": { source: "iana" }, "audio/mpa-robust": { source: "iana" }, "audio/mpeg": { source: "iana", compressible: false, extensions: ["mpga", "mp2", "mp2a", "mp3", "m2a", "m3a"] }, "audio/mpeg4-generic": { source: "iana" }, "audio/musepack": { source: "apache" }, "audio/ogg": { source: "iana", compressible: false, extensions: ["oga", "ogg", "spx", "opus"] }, "audio/opus": { source: "iana" }, "audio/parityfec": { source: "iana" }, "audio/pcma": { source: "iana" }, "audio/pcma-wb": { source: "iana" }, "audio/pcmu": { source: "iana" }, "audio/pcmu-wb": { source: "iana" }, "audio/prs.sid": { source: "iana" }, "audio/qcelp": { source: "iana" }, "audio/raptorfec": { source: "iana" }, "audio/red": { source: "iana" }, "audio/rtp-enc-aescm128": { source: "iana" }, "audio/rtp-midi": { source: "iana" }, "audio/rtploopback": { source: "iana" }, "audio/rtx": { source: "iana" }, "audio/s3m": { source: "apache", extensions: ["s3m"] }, "audio/scip": { source: "iana" }, "audio/silk": { source: "apache", extensions: ["sil"] }, "audio/smv": { source: "iana" }, "audio/smv-qcp": { source: "iana" }, "audio/smv0": { source: "iana" }, "audio/sofa": { source: "iana" }, "audio/sp-midi": { source: "iana" }, "audio/speex": { source: "iana" }, "audio/t140c": { source: "iana" }, "audio/t38": { source: "iana" }, "audio/telephone-event": { source: "iana" }, "audio/tetra_acelp": { source: "iana" }, "audio/tetra_acelp_bb": { source: "iana" }, "audio/tone": { source: "iana" }, "audio/tsvcis": { source: "iana" }, "audio/uemclip": { source: "iana" }, "audio/ulpfec": { source: "iana" }, "audio/usac": { source: "iana" }, "audio/vdvi": { source: "iana" }, "audio/vmr-wb": { source: "iana" }, "audio/vnd.3gpp.iufp": { source: "iana" }, "audio/vnd.4sb": { source: "iana" }, "audio/vnd.audiokoz": { source: "iana" }, "audio/vnd.celp": { source: "iana" }, "audio/vnd.cisco.nse": { source: "iana" }, "audio/vnd.cmles.radio-events": { source: "iana" }, "audio/vnd.cns.anp1": { source: "iana" }, "audio/vnd.cns.inf1": { source: "iana" }, "audio/vnd.dece.audio": { source: "iana", extensions: ["uva", "uvva"] }, "audio/vnd.digital-winds": { source: "iana", extensions: ["eol"] }, "audio/vnd.dlna.adts": { source: "iana" }, "audio/vnd.dolby.heaac.1": { source: "iana" }, "audio/vnd.dolby.heaac.2": { source: "iana" }, "audio/vnd.dolby.mlp": { source: "iana" }, "audio/vnd.dolby.mps": { source: "iana" }, "audio/vnd.dolby.pl2": { source: "iana" }, "audio/vnd.dolby.pl2x": { source: "iana" }, "audio/vnd.dolby.pl2z": { source: "iana" }, "audio/vnd.dolby.pulse.1": { source: "iana" }, "audio/vnd.dra": { source: "iana", extensions: ["dra"] }, "audio/vnd.dts": { source: "iana", extensions: ["dts"] }, "audio/vnd.dts.hd": { source: "iana", extensions: ["dtshd"] }, "audio/vnd.dts.uhd": { source: "iana" }, "audio/vnd.dvb.file": { source: "iana" }, "audio/vnd.everad.plj": { source: "iana" }, "audio/vnd.hns.audio": { source: "iana" }, "audio/vnd.lucent.voice": { source: "iana", extensions: ["lvp"] }, "audio/vnd.ms-playready.media.pya": { source: "iana", extensions: ["pya"] }, "audio/vnd.nokia.mobile-xmf": { source: "iana" }, "audio/vnd.nortel.vbk": { source: "iana" }, "audio/vnd.nuera.ecelp4800": { source: "iana", extensions: ["ecelp4800"] }, "audio/vnd.nuera.ecelp7470": { source: "iana", extensions: ["ecelp7470"] }, "audio/vnd.nuera.ecelp9600": { source: "iana", extensions: ["ecelp9600"] }, "audio/vnd.octel.sbc": { source: "iana" }, "audio/vnd.presonus.multitrack": { source: "iana" }, "audio/vnd.qcelp": { source: "iana" }, "audio/vnd.rhetorex.32kadpcm": { source: "iana" }, "audio/vnd.rip": { source: "iana", extensions: ["rip"] }, "audio/vnd.rn-realaudio": { compressible: false }, "audio/vnd.sealedmedia.softseal.mpeg": { source: "iana" }, "audio/vnd.vmx.cvsd": { source: "iana" }, "audio/vnd.wave": { compressible: false }, "audio/vorbis": { source: "iana", compressible: false }, "audio/vorbis-config": { source: "iana" }, "audio/wav": { compressible: false, extensions: ["wav"] }, "audio/wave": { compressible: false, extensions: ["wav"] }, "audio/webm": { source: "apache", compressible: false, extensions: ["weba"] }, "audio/x-aac": { source: "apache", compressible: false, extensions: ["aac"] }, "audio/x-aiff": { source: "apache", extensions: ["aif", "aiff", "aifc"] }, "audio/x-caf": { source: "apache", compressible: false, extensions: ["caf"] }, "audio/x-flac": { source: "apache", extensions: ["flac"] }, "audio/x-m4a": { source: "nginx", extensions: ["m4a"] }, "audio/x-matroska": { source: "apache", extensions: ["mka"] }, "audio/x-mpegurl": { source: "apache", extensions: ["m3u"] }, "audio/x-ms-wax": { source: "apache", extensions: ["wax"] }, "audio/x-ms-wma": { source: "apache", extensions: ["wma"] }, "audio/x-pn-realaudio": { source: "apache", extensions: ["ram", "ra"] }, "audio/x-pn-realaudio-plugin": { source: "apache", extensions: ["rmp"] }, "audio/x-realaudio": { source: "nginx", extensions: ["ra"] }, "audio/x-tta": { source: "apache" }, "audio/x-wav": { source: "apache", extensions: ["wav"] }, "audio/xm": { source: "apache", extensions: ["xm"] }, "chemical/x-cdx": { source: "apache", extensions: ["cdx"] }, "chemical/x-cif": { source: "apache", extensions: ["cif"] }, "chemical/x-cmdf": { source: "apache", extensions: ["cmdf"] }, "chemical/x-cml": { source: "apache", extensions: ["cml"] }, "chemical/x-csml": { source: "apache", extensions: ["csml"] }, "chemical/x-pdb": { source: "apache" }, "chemical/x-xyz": { source: "apache", extensions: ["xyz"] }, "font/collection": { source: "iana", extensions: ["ttc"] }, "font/otf": { source: "iana", compressible: true, extensions: ["otf"] }, "font/sfnt": { source: "iana" }, "font/ttf": { source: "iana", compressible: true, extensions: ["ttf"] }, "font/woff": { source: "iana", extensions: ["woff"] }, "font/woff2": { source: "iana", extensions: ["woff2"] }, "image/aces": { source: "iana", extensions: ["exr"] }, "image/apng": { compressible: false, extensions: ["apng"] }, "image/avci": { source: "iana", extensions: ["avci"] }, "image/avcs": { source: "iana", extensions: ["avcs"] }, "image/avif": { source: "iana", compressible: false, extensions: ["avif"] }, "image/bmp": { source: "iana", compressible: true, extensions: ["bmp"] }, "image/cgm": { source: "iana", extensions: ["cgm"] }, "image/dicom-rle": { source: "iana", extensions: ["drle"] }, "image/emf": { source: "iana", extensions: ["emf"] }, "image/fits": { source: "iana", extensions: ["fits"] }, "image/g3fax": { source: "iana", extensions: ["g3"] }, "image/gif": { source: "iana", compressible: false, extensions: ["gif"] }, "image/heic": { source: "iana", extensions: ["heic"] }, "image/heic-sequence": { source: "iana", extensions: ["heics"] }, "image/heif": { source: "iana", extensions: ["heif"] }, "image/heif-sequence": { source: "iana", extensions: ["heifs"] }, "image/hej2k": { source: "iana", extensions: ["hej2"] }, "image/hsj2": { source: "iana", extensions: ["hsj2"] }, "image/ief": { source: "iana", extensions: ["ief"] }, "image/jls": { source: "iana", extensions: ["jls"] }, "image/jp2": { source: "iana", compressible: false, extensions: ["jp2", "jpg2"] }, "image/jpeg": { source: "iana", compressible: false, extensions: ["jpeg", "jpg", "jpe"] }, "image/jph": { source: "iana", extensions: ["jph"] }, "image/jphc": { source: "iana", extensions: ["jhc"] }, "image/jpm": { source: "iana", compressible: false, extensions: ["jpm"] }, "image/jpx": { source: "iana", compressible: false, extensions: ["jpx", "jpf"] }, "image/jxr": { source: "iana", extensions: ["jxr"] }, "image/jxra": { source: "iana", extensions: ["jxra"] }, "image/jxrs": { source: "iana", extensions: ["jxrs"] }, "image/jxs": { source: "iana", extensions: ["jxs"] }, "image/jxsc": { source: "iana", extensions: ["jxsc"] }, "image/jxsi": { source: "iana", extensions: ["jxsi"] }, "image/jxss": { source: "iana", extensions: ["jxss"] }, "image/ktx": { source: "iana", extensions: ["ktx"] }, "image/ktx2": { source: "iana", extensions: ["ktx2"] }, "image/naplps": { source: "iana" }, "image/pjpeg": { compressible: false }, "image/png": { source: "iana", compressible: false, extensions: ["png"] }, "image/prs.btif": { source: "iana", extensions: ["btif"] }, "image/prs.pti": { source: "iana", extensions: ["pti"] }, "image/pwg-raster": { source: "iana" }, "image/sgi": { source: "apache", extensions: ["sgi"] }, "image/svg+xml": { source: "iana", compressible: true, extensions: ["svg", "svgz"] }, "image/t38": { source: "iana", extensions: ["t38"] }, "image/tiff": { source: "iana", compressible: false, extensions: ["tif", "tiff"] }, "image/tiff-fx": { source: "iana", extensions: ["tfx"] }, "image/vnd.adobe.photoshop": { source: "iana", compressible: true, extensions: ["psd"] }, "image/vnd.airzip.accelerator.azv": { source: "iana", extensions: ["azv"] }, "image/vnd.cns.inf2": { source: "iana" }, "image/vnd.dece.graphic": { source: "iana", extensions: ["uvi", "uvvi", "uvg", "uvvg"] }, "image/vnd.djvu": { source: "iana", extensions: ["djvu", "djv"] }, "image/vnd.dvb.subtitle": { source: "iana", extensions: ["sub"] }, "image/vnd.dwg": { source: "iana", extensions: ["dwg"] }, "image/vnd.dxf": { source: "iana", extensions: ["dxf"] }, "image/vnd.fastbidsheet": { source: "iana", extensions: ["fbs"] }, "image/vnd.fpx": { source: "iana", extensions: ["fpx"] }, "image/vnd.fst": { source: "iana", extensions: ["fst"] }, "image/vnd.fujixerox.edmics-mmr": { source: "iana", extensions: ["mmr"] }, "image/vnd.fujixerox.edmics-rlc": { source: "iana", extensions: ["rlc"] }, "image/vnd.globalgraphics.pgb": { source: "iana" }, "image/vnd.microsoft.icon": { source: "iana", compressible: true, extensions: ["ico"] }, "image/vnd.mix": { source: "iana" }, "image/vnd.mozilla.apng": { source: "iana" }, "image/vnd.ms-dds": { compressible: true, extensions: ["dds"] }, "image/vnd.ms-modi": { source: "iana", extensions: ["mdi"] }, "image/vnd.ms-photo": { source: "apache", extensions: ["wdp"] }, "image/vnd.net-fpx": { source: "iana", extensions: ["npx"] }, "image/vnd.pco.b16": { source: "iana", extensions: ["b16"] }, "image/vnd.radiance": { source: "iana" }, "image/vnd.sealed.png": { source: "iana" }, "image/vnd.sealedmedia.softseal.gif": { source: "iana" }, "image/vnd.sealedmedia.softseal.jpg": { source: "iana" }, "image/vnd.svf": { source: "iana" }, "image/vnd.tencent.tap": { source: "iana", extensions: ["tap"] }, "image/vnd.valve.source.texture": { source: "iana", extensions: ["vtf"] }, "image/vnd.wap.wbmp": { source: "iana", extensions: ["wbmp"] }, "image/vnd.xiff": { source: "iana", extensions: ["xif"] }, "image/vnd.zbrush.pcx": { source: "iana", extensions: ["pcx"] }, "image/webp": { source: "apache", extensions: ["webp"] }, "image/wmf": { source: "iana", extensions: ["wmf"] }, "image/x-3ds": { source: "apache", extensions: ["3ds"] }, "image/x-cmu-raster": { source: "apache", extensions: ["ras"] }, "image/x-cmx": { source: "apache", extensions: ["cmx"] }, "image/x-freehand": { source: "apache", extensions: ["fh", "fhc", "fh4", "fh5", "fh7"] }, "image/x-icon": { source: "apache", compressible: true, extensions: ["ico"] }, "image/x-jng": { source: "nginx", extensions: ["jng"] }, "image/x-mrsid-image": { source: "apache", extensions: ["sid"] }, "image/x-ms-bmp": { source: "nginx", compressible: true, extensions: ["bmp"] }, "image/x-pcx": { source: "apache", extensions: ["pcx"] }, "image/x-pict": { source: "apache", extensions: ["pic", "pct"] }, "image/x-portable-anymap": { source: "apache", extensions: ["pnm"] }, "image/x-portable-bitmap": { source: "apache", extensions: ["pbm"] }, "image/x-portable-graymap": { source: "apache", extensions: ["pgm"] }, "image/x-portable-pixmap": { source: "apache", extensions: ["ppm"] }, "image/x-rgb": { source: "apache", extensions: ["rgb"] }, "image/x-tga": { source: "apache", extensions: ["tga"] }, "image/x-xbitmap": { source: "apache", extensions: ["xbm"] }, "image/x-xcf": { compressible: false }, "image/x-xpixmap": { source: "apache", extensions: ["xpm"] }, "image/x-xwindowdump": { source: "apache", extensions: ["xwd"] }, "message/cpim": { source: "iana" }, "message/delivery-status": { source: "iana" }, "message/disposition-notification": { source: "iana", extensions: [ "disposition-notification" ] }, "message/external-body": { source: "iana" }, "message/feedback-report": { source: "iana" }, "message/global": { source: "iana", extensions: ["u8msg"] }, "message/global-delivery-status": { source: "iana", extensions: ["u8dsn"] }, "message/global-disposition-notification": { source: "iana", extensions: ["u8mdn"] }, "message/global-headers": { source: "iana", extensions: ["u8hdr"] }, "message/http": { source: "iana", compressible: false }, "message/imdn+xml": { source: "iana", compressible: true }, "message/news": { source: "iana" }, "message/partial": { source: "iana", compressible: false }, "message/rfc822": { source: "iana", compressible: true, extensions: ["eml", "mime"] }, "message/s-http": { source: "iana" }, "message/sip": { source: "iana" }, "message/sipfrag": { source: "iana" }, "message/tracking-status": { source: "iana" }, "message/vnd.si.simp": { source: "iana" }, "message/vnd.wfa.wsc": { source: "iana", extensions: ["wsc"] }, "model/3mf": { source: "iana", extensions: ["3mf"] }, "model/e57": { source: "iana" }, "model/gltf+json": { source: "iana", compressible: true, extensions: ["gltf"] }, "model/gltf-binary": { source: "iana", compressible: true, extensions: ["glb"] }, "model/iges": { source: "iana", compressible: false, extensions: ["igs", "iges"] }, "model/mesh": { source: "iana", compressible: false, extensions: ["msh", "mesh", "silo"] }, "model/mtl": { source: "iana", extensions: ["mtl"] }, "model/obj": { source: "iana", extensions: ["obj"] }, "model/step": { source: "iana" }, "model/step+xml": { source: "iana", compressible: true, extensions: ["stpx"] }, "model/step+zip": { source: "iana", compressible: false, extensions: ["stpz"] }, "model/step-xml+zip": { source: "iana", compressible: false, extensions: ["stpxz"] }, "model/stl": { source: "iana", extensions: ["stl"] }, "model/vnd.collada+xml": { source: "iana", compressible: true, extensions: ["dae"] }, "model/vnd.dwf": { source: "iana", extensions: ["dwf"] }, "model/vnd.flatland.3dml": { source: "iana" }, "model/vnd.gdl": { source: "iana", extensions: ["gdl"] }, "model/vnd.gs-gdl": { source: "apache" }, "model/vnd.gs.gdl": { source: "iana" }, "model/vnd.gtw": { source: "iana", extensions: ["gtw"] }, "model/vnd.moml+xml": { source: "iana", compressible: true }, "model/vnd.mts": { source: "iana", extensions: ["mts"] }, "model/vnd.opengex": { source: "iana", extensions: ["ogex"] }, "model/vnd.parasolid.transmit.binary": { source: "iana", extensions: ["x_b"] }, "model/vnd.parasolid.transmit.text": { source: "iana", extensions: ["x_t"] }, "model/vnd.pytha.pyox": { source: "iana" }, "model/vnd.rosette.annotated-data-model": { source: "iana" }, "model/vnd.sap.vds": { source: "iana", extensions: ["vds"] }, "model/vnd.usdz+zip": { source: "iana", compressible: false, extensions: ["usdz"] }, "model/vnd.valve.source.compiled-map": { source: "iana", extensions: ["bsp"] }, "model/vnd.vtu": { source: "iana", extensions: ["vtu"] }, "model/vrml": { source: "iana", compressible: false, extensions: ["wrl", "vrml"] }, "model/x3d+binary": { source: "apache", compressible: false, extensions: ["x3db", "x3dbz"] }, "model/x3d+fastinfoset": { source: "iana", extensions: ["x3db"] }, "model/x3d+vrml": { source: "apache", compressible: false, extensions: ["x3dv", "x3dvz"] }, "model/x3d+xml": { source: "iana", compressible: true, extensions: ["x3d", "x3dz"] }, "model/x3d-vrml": { source: "iana", extensions: ["x3dv"] }, "multipart/alternative": { source: "iana", compressible: false }, "multipart/appledouble": { source: "iana" }, "multipart/byteranges": { source: "iana" }, "multipart/digest": { source: "iana" }, "multipart/encrypted": { source: "iana", compressible: false }, "multipart/form-data": { source: "iana", compressible: false }, "multipart/header-set": { source: "iana" }, "multipart/mixed": { source: "iana" }, "multipart/multilingual": { source: "iana" }, "multipart/parallel": { source: "iana" }, "multipart/related": { source: "iana", compressible: false }, "multipart/report": { source: "iana" }, "multipart/signed": { source: "iana", compressible: false }, "multipart/vnd.bint.med-plus": { source: "iana" }, "multipart/voice-message": { source: "iana" }, "multipart/x-mixed-replace": { source: "iana" }, "text/1d-interleaved-parityfec": { source: "iana" }, "text/cache-manifest": { source: "iana", compressible: true, extensions: ["appcache", "manifest"] }, "text/calendar": { source: "iana", extensions: ["ics", "ifb"] }, "text/calender": { compressible: true }, "text/cmd": { compressible: true }, "text/coffeescript": { extensions: ["coffee", "litcoffee"] }, "text/cql": { source: "iana" }, "text/cql-expression": { source: "iana" }, "text/cql-identifier": { source: "iana" }, "text/css": { source: "iana", charset: "UTF-8", compressible: true, extensions: ["css"] }, "text/csv": { source: "iana", compressible: true, extensions: ["csv"] }, "text/csv-schema": { source: "iana" }, "text/directory": { source: "iana" }, "text/dns": { source: "iana" }, "text/ecmascript": { source: "iana" }, "text/encaprtp": { source: "iana" }, "text/enriched": { source: "iana" }, "text/fhirpath": { source: "iana" }, "text/flexfec": { source: "iana" }, "text/fwdred": { source: "iana" }, "text/gff3": { source: "iana" }, "text/grammar-ref-list": { source: "iana" }, "text/html": { source: "iana", compressible: true, extensions: ["html", "htm", "shtml"] }, "text/jade": { extensions: ["jade"] }, "text/javascript": { source: "iana", compressible: true }, "text/jcr-cnd": { source: "iana" }, "text/jsx": { compressible: true, extensions: ["jsx"] }, "text/less": { compressible: true, extensions: ["less"] }, "text/markdown": { source: "iana", compressible: true, extensions: ["markdown", "md"] }, "text/mathml": { source: "nginx", extensions: ["mml"] }, "text/mdx": { compressible: true, extensions: ["mdx"] }, "text/mizar": { source: "iana" }, "text/n3": { source: "iana", charset: "UTF-8", compressible: true, extensions: ["n3"] }, "text/parameters": { source: "iana", charset: "UTF-8" }, "text/parityfec": { source: "iana" }, "text/plain": { source: "iana", compressible: true, extensions: ["txt", "text", "conf", "def", "list", "log", "in", "ini"] }, "text/provenance-notation": { source: "iana", charset: "UTF-8" }, "text/prs.fallenstein.rst": { source: "iana" }, "text/prs.lines.tag": { source: "iana", extensions: ["dsc"] }, "text/prs.prop.logic": { source: "iana" }, "text/raptorfec": { source: "iana" }, "text/red": { source: "iana" }, "text/rfc822-headers": { source: "iana" }, "text/richtext": { source: "iana", compressible: true, extensions: ["rtx"] }, "text/rtf": { source: "iana", compressible: true, extensions: ["rtf"] }, "text/rtp-enc-aescm128": { source: "iana" }, "text/rtploopback": { source: "iana" }, "text/rtx": { source: "iana" }, "text/sgml": { source: "iana", extensions: ["sgml", "sgm"] }, "text/shaclc": { source: "iana" }, "text/shex": { source: "iana", extensions: ["shex"] }, "text/slim": { extensions: ["slim", "slm"] }, "text/spdx": { source: "iana", extensions: ["spdx"] }, "text/strings": { source: "iana" }, "text/stylus": { extensions: ["stylus", "styl"] }, "text/t140": { source: "iana" }, "text/tab-separated-values": { source: "iana", compressible: true, extensions: ["tsv"] }, "text/troff": { source: "iana", extensions: ["t", "tr", "roff", "man", "me", "ms"] }, "text/turtle": { source: "iana", charset: "UTF-8", extensions: ["ttl"] }, "text/ulpfec": { source: "iana" }, "text/uri-list": { source: "iana", compressible: true, extensions: ["uri", "uris", "urls"] }, "text/vcard": { source: "iana", compressible: true, extensions: ["vcard"] }, "text/vnd.a": { source: "iana" }, "text/vnd.abc": { source: "iana" }, "text/vnd.ascii-art": { source: "iana" }, "text/vnd.curl": { source: "iana", extensions: ["curl"] }, "text/vnd.curl.dcurl": { source: "apache", extensions: ["dcurl"] }, "text/vnd.curl.mcurl": { source: "apache", extensions: ["mcurl"] }, "text/vnd.curl.scurl": { source: "apache", extensions: ["scurl"] }, "text/vnd.debian.copyright": { source: "iana", charset: "UTF-8" }, "text/vnd.dmclientscript": { source: "iana" }, "text/vnd.dvb.subtitle": { source: "iana", extensions: ["sub"] }, "text/vnd.esmertec.theme-descriptor": { source: "iana", charset: "UTF-8" }, "text/vnd.familysearch.gedcom": { source: "iana", extensions: ["ged"] }, "text/vnd.ficlab.flt": { source: "iana" }, "text/vnd.fly": { source: "iana", extensions: ["fly"] }, "text/vnd.fmi.flexstor": { source: "iana", extensions: ["flx"] }, "text/vnd.gml": { source: "iana" }, "text/vnd.graphviz": { source: "iana", extensions: ["gv"] }, "text/vnd.hans": { source: "iana" }, "text/vnd.hgl": { source: "iana" }, "text/vnd.in3d.3dml": { source: "iana", extensions: ["3dml"] }, "text/vnd.in3d.spot": { source: "iana", extensions: ["spot"] }, "text/vnd.iptc.newsml": { source: "iana" }, "text/vnd.iptc.nitf": { source: "iana" }, "text/vnd.latex-z": { source: "iana" }, "text/vnd.motorola.reflex": { source: "iana" }, "text/vnd.ms-mediapackage": { source: "iana" }, "text/vnd.net2phone.commcenter.command": { source: "iana" }, "text/vnd.radisys.msml-basic-layout": { source: "iana" }, "text/vnd.senx.warpscript": { source: "iana" }, "text/vnd.si.uricatalogue": { source: "iana" }, "text/vnd.sosi": { source: "iana" }, "text/vnd.sun.j2me.app-descriptor": { source: "iana", charset: "UTF-8", extensions: ["jad"] }, "text/vnd.trolltech.linguist": { source: "iana", charset: "UTF-8" }, "text/vnd.wap.si": { source: "iana" }, "text/vnd.wap.sl": { source: "iana" }, "text/vnd.wap.wml": { source: "iana", extensions: ["wml"] }, "text/vnd.wap.wmlscript": { source: "iana", extensions: ["wmls"] }, "text/vtt": { source: "iana", charset: "UTF-8", compressible: true, extensions: ["vtt"] }, "text/x-asm": { source: "apache", extensions: ["s", "asm"] }, "text/x-c": { source: "apache", extensions: ["c", "cc", "cxx", "cpp", "h", "hh", "dic"] }, "text/x-component": { source: "nginx", extensions: ["htc"] }, "text/x-fortran": { source: "apache", extensions: ["f", "for", "f77", "f90"] }, "text/x-gwt-rpc": { compressible: true }, "text/x-handlebars-template": { extensions: ["hbs"] }, "text/x-java-source": { source: "apache", extensions: ["java"] }, "text/x-jquery-tmpl": { compressible: true }, "text/x-lua": { extensions: ["lua"] }, "text/x-markdown": { compressible: true, extensions: ["mkd"] }, "text/x-nfo": { source: "apache", extensions: ["nfo"] }, "text/x-opml": { source: "apache", extensions: ["opml"] }, "text/x-org": { compressible: true, extensions: ["org"] }, "text/x-pascal": { source: "apache", extensions: ["p", "pas"] }, "text/x-processing": { compressible: true, extensions: ["pde"] }, "text/x-sass": { extensions: ["sass"] }, "text/x-scss": { extensions: ["scss"] }, "text/x-setext": { source: "apache", extensions: ["etx"] }, "text/x-sfv": { source: "apache", extensions: ["sfv"] }, "text/x-suse-ymp": { compressible: true, extensions: ["ymp"] }, "text/x-uuencode": { source: "apache", extensions: ["uu"] }, "text/x-vcalendar": { source: "apache", extensions: ["vcs"] }, "text/x-vcard": { source: "apache", extensions: ["vcf"] }, "text/xml": { source: "iana", compressible: true, extensions: ["xml"] }, "text/xml-external-parsed-entity": { source: "iana" }, "text/yaml": { compressible: true, extensions: ["yaml", "yml"] }, "video/1d-interleaved-parityfec": { source: "iana" }, "video/3gpp": { source: "iana", extensions: ["3gp", "3gpp"] }, "video/3gpp-tt": { source: "iana" }, "video/3gpp2": { source: "iana", extensions: ["3g2"] }, "video/av1": { source: "iana" }, "video/bmpeg": { source: "iana" }, "video/bt656": { source: "iana" }, "video/celb": { source: "iana" }, "video/dv": { source: "iana" }, "video/encaprtp": { source: "iana" }, "video/ffv1": { source: "iana" }, "video/flexfec": { source: "iana" }, "video/h261": { source: "iana", extensions: ["h261"] }, "video/h263": { source: "iana", extensions: ["h263"] }, "video/h263-1998": { source: "iana" }, "video/h263-2000": { source: "iana" }, "video/h264": { source: "iana", extensions: ["h264"] }, "video/h264-rcdo": { source: "iana" }, "video/h264-svc": { source: "iana" }, "video/h265": { source: "iana" }, "video/iso.segment": { source: "iana", extensions: ["m4s"] }, "video/jpeg": { source: "iana", extensions: ["jpgv"] }, "video/jpeg2000": { source: "iana" }, "video/jpm": { source: "apache", extensions: ["jpm", "jpgm"] }, "video/jxsv": { source: "iana" }, "video/mj2": { source: "iana", extensions: ["mj2", "mjp2"] }, "video/mp1s": { source: "iana" }, "video/mp2p": { source: "iana" }, "video/mp2t": { source: "iana", extensions: ["ts"] }, "video/mp4": { source: "iana", compressible: false, extensions: ["mp4", "mp4v", "mpg4"] }, "video/mp4v-es": { source: "iana" }, "video/mpeg": { source: "iana", compressible: false, extensions: ["mpeg", "mpg", "mpe", "m1v", "m2v"] }, "video/mpeg4-generic": { source: "iana" }, "video/mpv": { source: "iana" }, "video/nv": { source: "iana" }, "video/ogg": { source: "iana", compressible: false, extensions: ["ogv"] }, "video/parityfec": { source: "iana" }, "video/pointer": { source: "iana" }, "video/quicktime": { source: "iana", compressible: false, extensions: ["qt", "mov"] }, "video/raptorfec": { source: "iana" }, "video/raw": { source: "iana" }, "video/rtp-enc-aescm128": { source: "iana" }, "video/rtploopback": { source: "iana" }, "video/rtx": { source: "iana" }, "video/scip": { source: "iana" }, "video/smpte291": { source: "iana" }, "video/smpte292m": { source: "iana" }, "video/ulpfec": { source: "iana" }, "video/vc1": { source: "iana" }, "video/vc2": { source: "iana" }, "video/vnd.cctv": { source: "iana" }, "video/vnd.dece.hd": { source: "iana", extensions: ["uvh", "uvvh"] }, "video/vnd.dece.mobile": { source: "iana", extensions: ["uvm", "uvvm"] }, "video/vnd.dece.mp4": { source: "iana" }, "video/vnd.dece.pd": { source: "iana", extensions: ["uvp", "uvvp"] }, "video/vnd.dece.sd": { source: "iana", extensions: ["uvs", "uvvs"] }, "video/vnd.dece.video": { source: "iana", extensions: ["uvv", "uvvv"] }, "video/vnd.directv.mpeg": { source: "iana" }, "video/vnd.directv.mpeg-tts": { source: "iana" }, "video/vnd.dlna.mpeg-tts": { source: "iana" }, "video/vnd.dvb.file": { source: "iana", extensions: ["dvb"] }, "video/vnd.fvt": { source: "iana", extensions: ["fvt"] }, "video/vnd.hns.video": { source: "iana" }, "video/vnd.iptvforum.1dparityfec-1010": { source: "iana" }, "video/vnd.iptvforum.1dparityfec-2005": { source: "iana" }, "video/vnd.iptvforum.2dparityfec-1010": { source: "iana" }, "video/vnd.iptvforum.2dparityfec-2005": { source: "iana" }, "video/vnd.iptvforum.ttsavc": { source: "iana" }, "video/vnd.iptvforum.ttsmpeg2": { source: "iana" }, "video/vnd.motorola.video": { source: "iana" }, "video/vnd.motorola.videop": { source: "iana" }, "video/vnd.mpegurl": { source: "iana", extensions: ["mxu", "m4u"] }, "video/vnd.ms-playready.media.pyv": { source: "iana", extensions: ["pyv"] }, "video/vnd.nokia.interleaved-multimedia": { source: "iana" }, "video/vnd.nokia.mp4vr": { source: "iana" }, "video/vnd.nokia.videovoip": { source: "iana" }, "video/vnd.objectvideo": { source: "iana" }, "video/vnd.radgamettools.bink": { source: "iana" }, "video/vnd.radgamettools.smacker": { source: "iana" }, "video/vnd.sealed.mpeg1": { source: "iana" }, "video/vnd.sealed.mpeg4": { source: "iana" }, "video/vnd.sealed.swf": { source: "iana" }, "video/vnd.sealedmedia.softseal.mov": { source: "iana" }, "video/vnd.uvvu.mp4": { source: "iana", extensions: ["uvu", "uvvu"] }, "video/vnd.vivo": { source: "iana", extensions: ["viv"] }, "video/vnd.youtube.yt": { source: "iana" }, "video/vp8": { source: "iana" }, "video/vp9": { source: "iana" }, "video/webm": { source: "apache", compressible: false, extensions: ["webm"] }, "video/x-f4v": { source: "apache", extensions: ["f4v"] }, "video/x-fli": { source: "apache", extensions: ["fli"] }, "video/x-flv": { source: "apache", compressible: false, extensions: ["flv"] }, "video/x-m4v": { source: "apache", extensions: ["m4v"] }, "video/x-matroska": { source: "apache", compressible: false, extensions: ["mkv", "mk3d", "mks"] }, "video/x-mng": { source: "apache", extensions: ["mng"] }, "video/x-ms-asf": { source: "apache", extensions: ["asf", "asx"] }, "video/x-ms-vob": { source: "apache", extensions: ["vob"] }, "video/x-ms-wm": { source: "apache", extensions: ["wm"] }, "video/x-ms-wmv": { source: "apache", compressible: false, extensions: ["wmv"] }, "video/x-ms-wmx": { source: "apache", extensions: ["wmx"] }, "video/x-ms-wvx": { source: "apache", extensions: ["wvx"] }, "video/x-msvideo": { source: "apache", extensions: ["avi"] }, "video/x-sgi-movie": { source: "apache", extensions: ["movie"] }, "video/x-smv": { source: "apache", extensions: ["smv"] }, "x-conference/x-cooltalk": { source: "apache", extensions: ["ice"] }, "x-shader/x-fragment": { compressible: true }, "x-shader/x-vertex": { compressible: true } }; } }); // node_modules/.pnpm/mime-db@1.52.0/node_modules/mime-db/index.js var require_mime_db = __commonJS({ "node_modules/.pnpm/mime-db@1.52.0/node_modules/mime-db/index.js"(exports2, module2) { module2.exports = require_db(); } }); // node_modules/.pnpm/mime-types@2.1.35/node_modules/mime-types/index.js var require_mime_types = __commonJS({ "node_modules/.pnpm/mime-types@2.1.35/node_modules/mime-types/index.js"(exports2) { "use strict"; var db = require_mime_db(); var extname = require("path").extname; var EXTRACT_TYPE_REGEXP = /^\s*([^;\s]*)(?:;|\s|$)/; var TEXT_TYPE_REGEXP = /^text\//i; exports2.charset = charset; exports2.charsets = { lookup: charset }; exports2.contentType = contentType; exports2.extension = extension; exports2.extensions = /* @__PURE__ */ Object.create(null); exports2.lookup = lookup; exports2.types = /* @__PURE__ */ Object.create(null); populateMaps(exports2.extensions, exports2.types); function charset(type) { if (!type || typeof type !== "string") { return false; } var match = EXTRACT_TYPE_REGEXP.exec(type); var mime = match && db[match[1].toLowerCase()]; if (mime && mime.charset) { return mime.charset; } if (match && TEXT_TYPE_REGEXP.test(match[1])) { return "UTF-8"; } return false; } function contentType(str) { if (!str || typeof str !== "string") { return false; } var mime = str.indexOf("/") === -1 ? exports2.lookup(str) : str; if (!mime) { return false; } if (mime.indexOf("charset") === -1) { var charset2 = exports2.charset(mime); if (charset2) mime += "; charset=" + charset2.toLowerCase(); } return mime; } function extension(type) { if (!type || typeof type !== "string") { return false; } var match = EXTRACT_TYPE_REGEXP.exec(type); var exts = match && exports2.extensions[match[1].toLowerCase()]; if (!exts || !exts.length) { return false; } return exts[0]; } function lookup(path) { if (!path || typeof path !== "string") { return false; } var extension2 = extname("x." + path).toLowerCase().substr(1); if (!extension2) { return false; } return exports2.types[extension2] || false; } function populateMaps(extensions, types) { var preference = ["nginx", "apache", void 0, "iana"]; Object.keys(db).forEach(function forEachMimeType(type) { var mime = db[type]; var exts = mime.extensions; if (!exts || !exts.length) { return; } extensions[type] = exts; for (var i = 0; i < exts.length; i++) { var extension2 = exts[i]; if (types[extension2]) { var from = preference.indexOf(db[types[extension2]].source); var to = preference.indexOf(mime.source); if (types[extension2] !== "application/octet-stream" && (from > to || from === to && types[extension2].substr(0, 12) === "application/")) { continue; } } types[extension2] = type; } }); } } }); // node_modules/.pnpm/accepts@1.3.8/node_modules/accepts/index.js var require_accepts = __commonJS({ "node_modules/.pnpm/accepts@1.3.8/node_modules/accepts/index.js"(exports2, module2) { "use strict"; var Negotiator = require_negotiator(); var mime = require_mime_types(); module2.exports = Accepts; function Accepts(req) { if (!(this instanceof Accepts)) { return new Accepts(req); } this.headers = req.headers; this.negotiator = new Negotiator(req); } Accepts.prototype.type = Accepts.prototype.types = function(types_) { var types = types_; if (types && !Array.isArray(types)) { types = new Array(arguments.length); for (var i = 0; i < types.length; i++) { types[i] = arguments[i]; } } if (!types || types.length === 0) { return this.negotiator.mediaTypes(); } if (!this.headers.accept) { return types[0]; } var mimes = types.map(extToMime); var accepts = this.negotiator.mediaTypes(mimes.filter(validMime)); var first = accepts[0]; return first ? types[mimes.indexOf(first)] : false; }; Accepts.prototype.encoding = Accepts.prototype.encodings = function(encodings_) { var encodings = encodings_; if (encodings && !Array.isArray(encodings)) { encodings = new Array(arguments.length); for (var i = 0; i < encodings.length; i++) { encodings[i] = arguments[i]; } } if (!encodings || encodings.length === 0) { return this.negotiator.encodings(); } return this.negotiator.encodings(encodings)[0] || false; }; Accepts.prototype.charset = Accepts.prototype.charsets = function(charsets_) { var charsets = charsets_; if (charsets && !Array.isArray(charsets)) { charsets = new Array(arguments.length); for (var i = 0; i < charsets.length; i++) { charsets[i] = arguments[i]; } } if (!charsets || charsets.length === 0) { return this.negotiator.charsets(); } return this.negotiator.charsets(charsets)[0] || false; }; Accepts.prototype.lang = Accepts.prototype.langs = Accepts.prototype.language = Accepts.prototype.languages = function(languages_) { var languages = languages_; if (languages && !Array.isArray(languages)) { languages = new Array(arguments.length); for (var i = 0; i < languages.length; i++) { languages[i] = arguments[i]; } } if (!languages || languages.length === 0) { return this.negotiator.languages(); } return this.negotiator.languages(languages)[0] || false; }; function extToMime(type) { return type.indexOf("/") === -1 ? mime.lookup(type) : type; } function validMime(type) { return typeof type === "string"; } } }); // node_modules/.pnpm/base64id@2.0.0/node_modules/base64id/lib/base64id.js var require_base64id = __commonJS({ "node_modules/.pnpm/base64id@2.0.0/node_modules/base64id/lib/base64id.js"(exports2, module2) { var crypto = require("crypto"); var Base64Id = function() { }; Base64Id.prototype.getRandomBytes = function(bytes) { var BUFFER_SIZE = 4096; var self = this; bytes = bytes || 12; if (bytes > BUFFER_SIZE) { return crypto.randomBytes(bytes); } var bytesInBuffer = parseInt(BUFFER_SIZE / bytes); var threshold = parseInt(bytesInBuffer * 0.85); if (!threshold) { return crypto.randomBytes(bytes); } if (this.bytesBufferIndex == null) { this.bytesBufferIndex = -1; } if (this.bytesBufferIndex == bytesInBuffer) { this.bytesBuffer = null; this.bytesBufferIndex = -1; } if (this.bytesBufferIndex == -1 || this.bytesBufferIndex > threshold) { if (!this.isGeneratingBytes) { this.isGeneratingBytes = true; crypto.randomBytes(BUFFER_SIZE, function(err, bytes2) { self.bytesBuffer = bytes2; self.bytesBufferIndex = 0; self.isGeneratingBytes = false; }); } if (this.bytesBufferIndex == -1) { return crypto.randomBytes(bytes); } } var result = this.bytesBuffer.slice(bytes * this.bytesBufferIndex, bytes * (this.bytesBufferIndex + 1)); this.bytesBufferIndex++; return result; }; Base64Id.prototype.generateId = function() { var rand = Buffer.alloc(15); if (!rand.writeInt32BE) { return Math.abs(Math.random() * Math.random() * Date.now() | 0).toString() + Math.abs(Math.random() * Math.random() * Date.now() | 0).toString(); } this.sequenceNumber = this.sequenceNumber + 1 | 0; rand.writeInt32BE(this.sequenceNumber, 11); if (crypto.randomBytes) { this.getRandomBytes(12).copy(rand); } else { [0, 4, 8].forEach(function(i) { rand.writeInt32BE(Math.random() * Math.pow(2, 32) | 0, i); }); } return rand.toString("base64").replace(/\//g, "_").replace(/\+/g, "-"); }; exports2 = module2.exports = new Base64Id(); } }); // node_modules/.pnpm/engine.io-parser@5.2.1/node_modules/engine.io-parser/build/cjs/commons.js var require_commons = __commonJS({ "node_modules/.pnpm/engine.io-parser@5.2.1/node_modules/engine.io-parser/build/cjs/commons.js"(exports2) { "use strict"; Object.defineProperty(exports2, "__esModule", { value: true }); exports2.ERROR_PACKET = exports2.PACKET_TYPES_REVERSE = exports2.PACKET_TYPES = void 0; var PACKET_TYPES = /* @__PURE__ */ Object.create(null); exports2.PACKET_TYPES = PACKET_TYPES; PACKET_TYPES["open"] = "0"; PACKET_TYPES["close"] = "1"; PACKET_TYPES["ping"] = "2"; PACKET_TYPES["pong"] = "3"; PACKET_TYPES["message"] = "4"; PACKET_TYPES["upgrade"] = "5"; PACKET_TYPES["noop"] = "6"; var PACKET_TYPES_REVERSE = /* @__PURE__ */ Object.create(null); exports2.PACKET_TYPES_REVERSE = PACKET_TYPES_REVERSE; Object.keys(PACKET_TYPES).forEach((key) => { PACKET_TYPES_REVERSE[PACKET_TYPES[key]] = key; }); var ERROR_PACKET = { type: "error", data: "parser error" }; exports2.ERROR_PACKET = ERROR_PACKET; } }); // node_modules/.pnpm/engine.io-parser@5.2.1/node_modules/engine.io-parser/build/cjs/encodePacket.js var require_encodePacket = __commonJS({ "node_modules/.pnpm/engine.io-parser@5.2.1/node_modules/engine.io-parser/build/cjs/encodePacket.js"(exports2) { "use strict"; Object.defineProperty(exports2, "__esModule", { value: true }); exports2.encodePacketToBinary = exports2.encodePacket = void 0; var commons_js_1 = require_commons(); var encodePacket = ({ type, data }, supportsBinary, callback) => { if (data instanceof ArrayBuffer || ArrayBuffer.isView(data)) { return callback(supportsBinary ? data : "b" + toBuffer(data, true).toString("base64")); } return callback(commons_js_1.PACKET_TYPES[type] + (data || "")); }; exports2.encodePacket = encodePacket; var toBuffer = (data, forceBufferConversion) => { if (Buffer.isBuffer(data) || data instanceof Uint8Array && !forceBufferConversion) { return data; } else if (data instanceof ArrayBuffer) { return Buffer.from(data); } else { return Buffer.from(data.buffer, data.byteOffset, data.byteLength); } }; var TEXT_ENCODER; function encodePacketToBinary(packet, callback) { if (packet.data instanceof ArrayBuffer || ArrayBuffer.isView(packet.data)) { return callback(toBuffer(packet.data, false)); } (0, exports2.encodePacket)(packet, true, (encoded) => { if (!TEXT_ENCODER) { TEXT_ENCODER = new TextEncoder(); } callback(TEXT_ENCODER.encode(encoded)); }); } exports2.encodePacketToBinary = encodePacketToBinary; } }); // node_modules/.pnpm/engine.io-parser@5.2.1/node_modules/engine.io-parser/build/cjs/decodePacket.js var require_decodePacket = __commonJS({ "node_modules/.pnpm/engine.io-parser@5.2.1/node_modules/engine.io-parser/build/cjs/decodePacket.js"(exports2) { "use strict"; Object.defineProperty(exports2, "__esModule", { value: true }); exports2.decodePacket = void 0; var commons_js_1 = require_commons(); var decodePacket = (encodedPacket, binaryType) => { if (typeof encodedPacket !== "string") { return { type: "message", data: mapBinary(encodedPacket, binaryType) }; } const type = encodedPacket.charAt(0); if (type === "b") { const buffer = Buffer.from(encodedPacket.substring(1), "base64"); return { type: "message", data: mapBinary(buffer, binaryType) }; } if (!commons_js_1.PACKET_TYPES_REVERSE[type]) { return commons_js_1.ERROR_PACKET; } return encodedPacket.length > 1 ? { type: commons_js_1.PACKET_TYPES_REVERSE[type], data: encodedPacket.substring(1) } : { type: commons_js_1.PACKET_TYPES_REVERSE[type] }; }; exports2.decodePacket = decodePacket; var mapBinary = (data, binaryType) => { switch (binaryType) { case "arraybuffer": if (data instanceof ArrayBuffer) { return data; } else if (Buffer.isBuffer(data)) { return data.buffer.slice(data.byteOffset, data.byteOffset + data.byteLength); } else { return data.buffer; } case "nodebuffer": default: if (Buffer.isBuffer(data)) { return data; } else { return Buffer.from(data); } } }; } }); // node_modules/.pnpm/engine.io-parser@5.2.1/node_modules/engine.io-parser/build/cjs/index.js var require_cjs = __commonJS({ "node_modules/.pnpm/engine.io-parser@5.2.1/node_modules/engine.io-parser/build/cjs/index.js"(exports2) { "use strict"; Object.defineProperty(exports2, "__esModule", { value: true }); exports2.decodePayload = exports2.decodePacket = exports2.encodePayload = exports2.encodePacket = exports2.protocol = exports2.createPacketDecoderStream = exports2.createPacketEncoderStream = void 0; var encodePacket_js_1 = require_encodePacket(); Object.defineProperty(exports2, "encodePacket", { enumerable: true, get: function() { return encodePacket_js_1.encodePacket; } }); var decodePacket_js_1 = require_decodePacket(); Object.defineProperty(exports2, "decodePacket", { enumerable: true, get: function() { return decodePacket_js_1.decodePacket; } }); var commons_js_1 = require_commons(); var SEPARATOR = String.fromCharCode(30); var encodePayload = (packets, callback) => { const length = packets.length; const encodedPackets = new Array(length); let count = 0; packets.forEach((packet, i) => { (0, encodePacket_js_1.encodePacket)(packet, false, (encodedPacket) => { encodedPackets[i] = encodedPacket; if (++count === length) { callback(encodedPackets.join(SEPARATOR)); } }); }); }; exports2.encodePayload = encodePayload; var decodePayload = (encodedPayload, binaryType) => { const encodedPackets = encodedPayload.split(SEPARATOR); const packets = []; for (let i = 0; i < encodedPackets.length; i++) { const decodedPacket = (0, decodePacket_js_1.decodePacket)(encodedPackets[i], binaryType); packets.push(decodedPacket); if (decodedPacket.type === "error") { break; } } return packets; }; exports2.decodePayload = decodePayload; function createPacketEncoderStream() { return new TransformStream({ transform(packet, controller) { (0, encodePacket_js_1.encodePacketToBinary)(packet, (encodedPacket) => { const payloadLength = encodedPacket.length; let header; if (payloadLength < 126) { header = new Uint8Array(1); new DataView(header.buffer).setUint8(0, payloadLength); } else if (payloadLength < 65536) { header = new Uint8Array(3); const view = new DataView(header.buffer); view.setUint8(0, 126); view.setUint16(1, payloadLength); } else { header = new Uint8Array(9); const view = new DataView(header.buffer); view.setUint8(0, 127); view.setBigUint64(1, BigInt(payloadLength)); } if (packet.data && typeof packet.data !== "string") { header[0] |= 128; } controller.enqueue(header); controller.enqueue(encodedPacket); }); } }); } exports2.createPacketEncoderStream = createPacketEncoderStream; var TEXT_DECODER; function totalLength(chunks) { return chunks.reduce((acc, chunk) => acc + chunk.length, 0); } function concatChunks(chunks, size) { if (chunks[0].length === size) { return chunks.shift(); } const buffer = new Uint8Array(size); let j = 0; for (let i = 0; i < size; i++) { buffer[i] = chunks[0][j++]; if (j === chunks[0].length) { chunks.shift(); j = 0; } } if (chunks.length && j < chunks[0].length) { chunks[0] = chunks[0].slice(j); } return buffer; } function createPacketDecoderStream(maxPayload, binaryType) { if (!TEXT_DECODER) { TEXT_DECODER = new TextDecoder(); } const chunks = []; let state = 0; let expectedLength = -1; let isBinary = false; return new TransformStream({ transform(chunk, controller) { chunks.push(chunk); while (true) { if (state === 0) { if (totalLength(chunks) < 1) { break; } const header = concatChunks(chunks, 1); isBinary = (header[0] & 128) === 128; expectedLength = header[0] & 127; if (expectedLength < 126) { state = 3; } else if (expectedLength === 126) { state = 1; } else { state = 2; } } else if (state === 1) { if (totalLength(chunks) < 2) { break; } const headerArray = concatChunks(chunks, 2); expectedLength = new DataView(headerArray.buffer, headerArray.byteOffset, headerArray.length).getUint16(0); state = 3; } else if (state === 2) { if (totalLength(chunks) < 8) { break; } const headerArray = concatChunks(chunks, 8); const view = new DataView(headerArray.buffer, headerArray.byteOffset, headerArray.length); const n = view.getUint32(0); if (n > Math.pow(2, 53 - 32) - 1) { controller.enqueue(commons_js_1.ERROR_PACKET); break; } expectedLength = n * Math.pow(2, 32) + view.getUint32(4); state = 3; } else { if (totalLength(chunks) < expectedLength) { break; } const data = concatChunks(chunks, expectedLength); controller.enqueue((0, decodePacket_js_1.decodePacket)(isBinary ? data : TEXT_DECODER.decode(data), binaryType)); state = 0; } if (expectedLength === 0 || expectedLength > maxPayload) { controller.enqueue(commons_js_1.ERROR_PACKET); break; } } } }); } exports2.createPacketDecoderStream = createPacketDecoderStream; exports2.protocol = 4; } }); // node_modules/.pnpm/engine.io@6.5.2/node_modules/engine.io/build/parser-v3/utf8.js var require_utf8 = __commonJS({ "node_modules/.pnpm/engine.io@6.5.2/node_modules/engine.io/build/parser-v3/utf8.js"(exports2, module2) { var stringFromCharCode = String.fromCharCode; function ucs2decode(string) { var output = []; var counter = 0; var length = string.length; var value; var extra; while (counter < length) { value = string.charCodeAt(counter++); if (value >= 55296 && value <= 56319 && counter < length) { extra = string.charCodeAt(counter++); if ((extra & 64512) == 56320) { output.push(((value & 1023) << 10) + (extra & 1023) + 65536); } else { output.push(value); counter--; } } else { output.push(value); } } return output; } function ucs2encode(array) { var length = array.length; var index = -1; var value; var output = ""; while (++index < length) { value = array[index]; if (value > 65535) { value -= 65536; output += stringFromCharCode(value >>> 10 & 1023 | 55296); value = 56320 | value & 1023; } output += stringFromCharCode(value); } return output; } function checkScalarValue(codePoint, strict) { if (codePoint >= 55296 && codePoint <= 57343) { if (strict) { throw Error("Lone surrogate U+" + codePoint.toString(16).toUpperCase() + " is not a scalar value"); } return false; } return true; } function createByte(codePoint, shift) { return stringFromCharCode(codePoint >> shift & 63 | 128); } function encodeCodePoint(codePoint, strict) { if ((codePoint & 4294967168) == 0) { return stringFromCharCode(codePoint); } var symbol = ""; if ((codePoint & 4294965248) == 0) { symbol = stringFromCharCode(codePoint >> 6 & 31 | 192); } else if ((codePoint & 4294901760) == 0) { if (!checkScalarValue(codePoint, strict)) { codePoint = 65533; } symbol = stringFromCharCode(codePoint >> 12 & 15 | 224); symbol += createByte(codePoint, 6); } else if ((codePoint & 4292870144) == 0) { symbol = stringFromCharCode(codePoint >> 18 & 7 | 240); symbol += createByte(codePoint, 12); symbol += createByte(codePoint, 6); } symbol += stringFromCharCode(codePoint & 63 | 128); return symbol; } function utf8encode(string, opts) { opts = opts || {}; var strict = false !== opts.strict; var codePoints = ucs2decode(string); var length = codePoints.length; var index = -1; var codePoint; var byteString = ""; while (++index < length) { codePoint = codePoints[index]; byteString += encodeCodePoint(codePoint, strict); } return byteString; } function readContinuationByte() { if (byteIndex >= byteCount) { throw Error("Invalid byte index"); } var continuationByte = byteArray[byteIndex] & 255; byteIndex++; if ((continuationByte & 192) == 128) { return continuationByte & 63; } throw Error("Invalid continuation byte"); } function decodeSymbol(strict) { var byte1; var byte2; var byte3; var byte4; var codePoint; if (byteIndex > byteCount) { throw Error("Invalid byte index"); } if (byteIndex == byteCount) { return false; } byte1 = byteArray[byteIndex] & 255; byteIndex++; if ((byte1 & 128) == 0) { return byte1; } if ((byte1 & 224) == 192) { byte2 = readContinuationByte(); codePoint = (byte1 & 31) << 6 | byte2; if (codePoint >= 128) { return codePoint; } else { throw Error("Invalid continuation byte"); } } if ((byte1 & 240) == 224) { byte2 = readContinuationByte(); byte3 = readContinuationByte(); codePoint = (byte1 & 15) << 12 | byte2 << 6 | byte3; if (codePoint >= 2048) { return checkScalarValue(codePoint, strict) ? codePoint : 65533; } else { throw Error("Invalid continuation byte"); } } if ((byte1 & 248) == 240) { byte2 = readContinuationByte(); byte3 = readContinuationByte(); byte4 = readContinuationByte(); codePoint = (byte1 & 7) << 18 | byte2 << 12 | byte3 << 6 | byte4; if (codePoint >= 65536 && codePoint <= 1114111) { return codePoint; } } throw Error("Invalid UTF-8 detected"); } var byteArray; var byteCount; var byteIndex; function utf8decode(byteString, opts) { opts = opts || {}; var strict = false !== opts.strict; byteArray = ucs2decode(byteString); byteCount = byteArray.length; byteIndex = 0; var codePoints = []; var tmp; while ((tmp = decodeSymbol(strict)) !== false) { codePoints.push(tmp); } return ucs2encode(codePoints); } module2.exports = { version: "2.1.2", encode: utf8encode, decode: utf8decode }; } }); // node_modules/.pnpm/engine.io@6.5.2/node_modules/engine.io/build/parser-v3/index.js var require_parser_v3 = __commonJS({ "node_modules/.pnpm/engine.io@6.5.2/node_modules/engine.io/build/parser-v3/index.js"(exports2) { "use strict"; Object.defineProperty(exports2, "__esModule", { value: true }); exports2.decodePayloadAsBinary = exports2.encodePayloadAsBinary = exports2.decodePayload = exports2.encodePayload = exports2.decodeBase64Packet = exports2.decodePacket = exports2.encodeBase64Packet = exports2.encodePacket = exports2.packets = exports2.protocol = void 0; var utf8 = require_utf8(); exports2.protocol = 3; var hasBinary = (packets) => { for (const packet of packets) { if (packet.data instanceof ArrayBuffer || ArrayBuffer.isView(packet.data)) { return true; } } return false; }; exports2.packets = { open: 0, close: 1, ping: 2, pong: 3, message: 4, upgrade: 5, noop: 6 }; var packetslist = Object.keys(exports2.packets); var err = { type: "error", data: "parser error" }; var EMPTY_BUFFER = Buffer.concat([]); function encodePacket(packet, supportsBinary, utf8encode, callback) { if (typeof supportsBinary === "function") { callback = supportsBinary; supportsBinary = null; } if (typeof utf8encode === "function") { callback = utf8encode; utf8encode = null; } if (Buffer.isBuffer(packet.data)) { return encodeBuffer(packet, supportsBinary, callback); } else if (packet.data && (packet.data.buffer || packet.data) instanceof ArrayBuffer) { return encodeBuffer({ type: packet.type, data: arrayBufferToBuffer(packet.data) }, supportsBinary, callback); } var encoded = exports2.packets[packet.type]; if (void 0 !== packet.data) { encoded += utf8encode ? utf8.encode(String(packet.data), { strict: false }) : String(packet.data); } return callback("" + encoded); } exports2.encodePacket = encodePacket; function encodeBuffer(packet, supportsBinary, callback) { if (!supportsBinary) { return encodeBase64Packet(packet, callback); } var data = packet.data; var typeBuffer = Buffer.allocUnsafe(1); typeBuffer[0] = exports2.packets[packet.type]; return callback(Buffer.concat([typeBuffer, data])); } function encodeBase64Packet(packet, callback) { var data = Buffer.isBuffer(packet.data) ? packet.data : arrayBufferToBuffer(packet.data); var message = "b" + exports2.packets[packet.type]; message += data.toString("base64"); return callback(message); } exports2.encodeBase64Packet = encodeBase64Packet; function decodePacket(data, binaryType, utf8decode) { if (data === void 0) { return err; } var type; if (typeof data === "string") { type = data.charAt(0); if (type === "b") { return decodeBase64Packet(data.slice(1), binaryType); } if (utf8decode) { data = tryDecode(data); if (data === false) { return err; } } if (Number(type) != type || !packetslist[type]) { return err; } if (data.length > 1) { return { type: packetslist[type], data: data.slice(1) }; } else { return { type: packetslist[type] }; } } if (binaryType === "arraybuffer") { var intArray = new Uint8Array(data); type = intArray[0]; return { type: packetslist[type], data: intArray.buffer.slice(1) }; } if (data instanceof ArrayBuffer) { data = arrayBufferToBuffer(data); } type = data[0]; return { type: packetslist[type], data: data.slice(1) }; } exports2.decodePacket = decodePacket; function tryDecode(data) { try { data = utf8.decode(data, { strict: false }); } catch (e) { return false; } return data; } function decodeBase64Packet(msg, binaryType) { var type = packetslist[msg.charAt(0)]; var data = Buffer.from(msg.slice(1), "base64"); if (binaryType === "arraybuffer") { var abv = new Uint8Array(data.length); for (var i = 0; i < abv.length; i++) { abv[i] = data[i]; } data = abv.buffer; } return { type, data }; } exports2.decodeBase64Packet = decodeBase64Packet; function encodePayload(packets, supportsBinary, callback) { if (typeof supportsBinary === "function") { callback = supportsBinary; supportsBinary = null; } if (supportsBinary && hasBinary(packets)) { return encodePayloadAsBinary(packets, callback); } if (!packets.length) { return callback("0:"); } function encodeOne(packet, doneCallback) { encodePacket(packet, supportsBinary, false, function(message) { doneCallback(null, setLengthHeader(message)); }); } map(packets, encodeOne, function(err2, results) { return callback(results.join("")); }); } exports2.encodePayload = encodePayload; function setLengthHeader(message) { return message.length + ":" + message; } function map(ary, each, done) { const results = new Array(ary.length); let count = 0; for (let i = 0; i < ary.length; i++) { each(ary[i], (error, msg) => { results[i] = msg; if (++count === ary.length) { done(null, results); } }); } } function decodePayload(data, binaryType, callback) { if (typeof data !== "string") { return decodePayloadAsBinary(data, binaryType, callback); } if (typeof binaryType === "function") { callback = binaryType; binaryType = null; } if (data === "") { return callback(err, 0, 1); } var length = "", n, msg, packet; for (var i = 0, l = data.length; i < l; i++) { var chr = data.charAt(i); if (chr !== ":") { length += chr; continue; } if (length === "" || length != (n = Number(length))) { return callback(err, 0, 1); } msg = data.slice(i + 1, i + 1 + n); if (length != msg.length) { return callback(err, 0, 1); } if (msg.length) { packet = decodePacket(msg, binaryType, false); if (err.type === packet.type && err.data === packet.data) { return callback(err, 0, 1); } var more = callback(packet, i + n, l); if (false === more) return; } i += n; length = ""; } if (length !== "") { return callback(err, 0, 1); } } exports2.decodePayload = decodePayload; function bufferToString(buffer) { var str = ""; for (var i = 0, l = buffer.length; i < l; i++) { str += String.fromCharCode(buffer[i]); } return str; } function stringToBuffer(string) { var buf = Buffer.allocUnsafe(string.length); for (var i = 0, l = string.length; i < l; i++) { buf.writeUInt8(string.charCodeAt(i), i); } return buf; } function arrayBufferToBuffer(data) { var length = data.byteLength || data.length; var offset = data.byteOffset || 0; return Buffer.from(data.buffer || data, offset, length); } function encodePayloadAsBinary(packets, callback) { if (!packets.length) { return callback(EMPTY_BUFFER); } map(packets, encodeOneBinaryPacket, function(err2, results) { return callback(Buffer.concat(results)); }); } exports2.encodePayloadAsBinary = encodePayloadAsBinary; function encodeOneBinaryPacket(p, doneCallback) { function onBinaryPacketEncode(packet) { var encodingLength = "" + packet.length; var sizeBuffer; if (typeof packet === "string") { sizeBuffer = Buffer.allocUnsafe(encodingLength.length + 2); sizeBuffer[0] = 0; for (var i = 0; i < encodingLength.length; i++) { sizeBuffer[i + 1] = parseInt(encodingLength[i], 10); } sizeBuffer[sizeBuffer.length - 1] = 255; return doneCallback(null, Buffer.concat([sizeBuffer, stringToBuffer(packet)])); } sizeBuffer = Buffer.allocUnsafe(encodingLength.length + 2); sizeBuffer[0] = 1; for (var i = 0; i < encodingLength.length; i++) { sizeBuffer[i + 1] = parseInt(encodingLength[i], 10); } sizeBuffer[sizeBuffer.length - 1] = 255; doneCallback(null, Buffer.concat([sizeBuffer, packet])); } encodePacket(p, true, true, onBinaryPacketEncode); } function decodePayloadAsBinary(data, binaryType, callback) { if (typeof binaryType === "function") { callback = binaryType; binaryType = null; } var bufferTail = data; var buffers = []; var i; while (bufferTail.length > 0) { var strLen = ""; var isString = bufferTail[0] === 0; for (i = 1; ; i++) { if (bufferTail[i] === 255) break; if (strLen.length > 310) { return callback(err, 0, 1); } strLen += "" + bufferTail[i]; } bufferTail = bufferTail.slice(strLen.length + 1); var msgLength = parseInt(strLen, 10); var msg = bufferTail.slice(1, msgLength + 1); if (isString) msg = bufferToString(msg); buffers.push(msg); bufferTail = bufferTail.slice(msgLength + 1); } var total = buffers.length; for (i = 0; i < total; i++) { var buffer = buffers[i]; callback(decodePacket(buffer, binaryType, true), i, total); } } exports2.decodePayloadAsBinary = decodePayloadAsBinary; } }); // node_modules/.pnpm/ms@2.1.2/node_modules/ms/index.js var require_ms = __commonJS({ "node_modules/.pnpm/ms@2.1.2/node_modules/ms/index.js"(exports2, module2) { var s = 1e3; var m = s * 60; var h = m * 60; var d = h * 24; var w = d * 7; var y = d * 365.25; module2.exports = function(val, options) { options = options || {}; var type = typeof val; if (type === "string" && val.length > 0) { return parse(val); } else if (type === "number" && isFinite(val)) { return options.long ? fmtLong(val) : fmtShort(val); } throw new Error( "val is not a non-empty string or a valid number. val=" + JSON.stringify(val) ); }; function parse(str) { str = String(str); if (str.length > 100) { return; } var match = /^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec( str ); if (!match) { return; } var n = parseFloat(match[1]); var type = (match[2] || "ms").toLowerCase(); switch (type) { case "years": case "year": case "yrs": case "yr": case "y": return n * y; case "weeks": case "week": case "w": return n * w; case "days": case "day": case "d": return n * d; case "hours": case "hour": case "hrs": case "hr": case "h": return n * h; case "minutes": case "minute": case "mins": case "min": case "m": return n * m; case "seconds": case "second": case "secs": case "sec": case "s": return n * s; case "milliseconds": case "millisecond": case "msecs": case "msec": case "ms": return n; default: return void 0; } } function fmtShort(ms) { var msAbs = Math.abs(ms); if (msAbs >= d) { return Math.round(ms / d) + "d"; } if (msAbs >= h) { return Math.round(ms / h) + "h"; } if (msAbs >= m) { return Math.round(ms / m) + "m"; } if (msAbs >= s) { return Math.round(ms / s) + "s"; } return ms + "ms"; } function fmtLong(ms) { var msAbs = Math.abs(ms); if (msAbs >= d) { return plural(ms, msAbs, d, "day"); } if (msAbs >= h) { return plural(ms, msAbs, h, "hour"); } if (msAbs >= m) { return plural(ms, msAbs, m, "minute"); } if (msAbs >= s) { return plural(ms, msAbs, s, "second"); } return ms + " ms"; } function plural(ms, msAbs, n, name) { var isPlural = msAbs >= n * 1.5; return Math.round(ms / n) + " " + name + (isPlural ? "s" : ""); } } }); // node_modules/.pnpm/debug@4.3.4/node_modules/debug/src/common.js var require_common = __commonJS({ "node_modules/.pnpm/debug@4.3.4/node_modules/debug/src/common.js"(exports2, module2) { function setup(env) { createDebug.debug = createDebug; createDebug.default = createDebug; createDebug.coerce = coerce; createDebug.disable = disable; createDebug.enable = enable; createDebug.enabled = enabled; createDebug.humanize = require_ms(); createDebug.destroy = destroy; Object.keys(env).forEach((key) => { createDebug[key] = env[key]; }); createDebug.names = []; createDebug.skips = []; createDebug.formatters = {}; function selectColor(namespace) { let hash = 0; for (let i = 0; i < namespace.length; i++) { hash = (hash << 5) - hash + namespace.charCodeAt(i); hash |= 0; } return createDebug.colors[Math.abs(hash) % createDebug.colors.length]; } createDebug.selectColor = selectColor; function createDebug(namespace) { let prevTime; let enableOverride = null; let namespacesCache; let enabledCache; function debug(...args) { if (!debug.enabled) { return; } const self = debug; const curr = Number(/* @__PURE__ */ new Date()); const ms = curr - (prevTime || curr); self.diff = ms; self.prev = prevTime; self.curr = curr; prevTime = curr; args[0] = createDebug.coerce(args[0]); if (typeof args[0] !== "string") { args.unshift("%O"); } let index = 0; args[0] = args[0].replace(/%([a-zA-Z%])/g, (match, format) => { if (match === "%%") { return "%"; } index++; const formatter = createDebug.formatters[format]; if (typeof formatter === "function") { const val = args[index]; match = formatter.call(self, val); args.splice(index, 1); index--; } return match; }); createDebug.formatArgs.call(self, args); const logFn = self.log || createDebug.log; logFn.apply(self, args); } debug.namespace = namespace; debug.useColors = createDebug.useColors(); debug.color = createDebug.selectColor(namespace); debug.extend = extend; debug.destroy = createDebug.destroy; Object.defineProperty(debug, "enabled", { enumerable: true, configurable: false, get: () => { if (enableOverride !== null) { return enableOverride; } if (namespacesCache !== createDebug.namespaces) { namespacesCache = createDebug.namespaces; enabledCache = createDebug.enabled(namespace); } return enabledCache; }, set: (v) => { enableOverride = v; } }); if (typeof createDebug.init === "function") { createDebug.init(debug); } return debug; } function extend(namespace, delimiter) { const newDebug = createDebug(this.namespace + (typeof delimiter === "undefined" ? ":" : delimiter) + namespace); newDebug.log = this.log; return newDebug; } function enable(namespaces) { createDebug.save(namespaces); createDebug.namespaces = namespaces; createDebug.names = []; createDebug.skips = []; let i; const split = (typeof namespaces === "string" ? namespaces : "").split(/[\s,]+/); const len = split.length; for (i = 0; i < len; i++) { if (!split[i]) { continue; } namespaces = split[i].replace(/\*/g, ".*?"); if (namespaces[0] === "-") { createDebug.skips.push(new RegExp("^" + namespaces.slice(1) + "$")); } else { createDebug.names.push(new RegExp("^" + namespaces + "$")); } } } function disable() { const namespaces = [ ...createDebug.names.map(toNamespace), ...createDebug.skips.map(toNamespace).map((namespace) => "-" + namespace) ].join(","); createDebug.enable(""); return namespaces; } function enabled(name) { if (name[name.length - 1] === "*") { return true; } let i; let len; for (i = 0, len = createDebug.skips.length; i < len; i++) { if (createDebug.skips[i].test(name)) { return false; } } for (i = 0, len = createDebug.names.length; i < len; i++) { if (createDebug.names[i].test(name)) { return true; } } return false; } function toNamespace(regexp) { return regexp.toString().substring(2, regexp.toString().length - 2).replace(/\.\*\?$/, "*"); } function coerce(val) { if (val instanceof Error) { return val.stack || val.message; } return val; } function destroy() { console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`."); } createDebug.enable(createDebug.load()); return createDebug; } module2.exports = setup; } }); // node_modules/.pnpm/debug@4.3.4/node_modules/debug/src/browser.js var require_browser = __commonJS({ "node_modules/.pnpm/debug@4.3.4/node_modules/debug/src/browser.js"(exports2, module2) { exports2.formatArgs = formatArgs; exports2.save = save; exports2.load = load; exports2.useColors = useColors; exports2.storage = localstorage(); exports2.destroy = (() => { let warned = false; return () => { if (!warned) { warned = true; console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`."); } }; })(); exports2.colors = [ "#0000CC", "#0000FF", "#0033CC", "#0033FF", "#0066CC", "#0066FF", "#0099CC", "#0099FF", "#00CC00", "#00CC33", "#00CC66", "#00CC99", "#00CCCC", "#00CCFF", "#3300CC", "#3300FF", "#3333CC", "#3333FF", "#3366CC", "#3366FF", "#3399CC", "#3399FF", "#33CC00", "#33CC33", "#33CC66", "#33CC99", "#33CCCC", "#33CCFF", "#6600CC", "#6600FF", "#6633CC", "#6633FF", "#66CC00", "#66CC33", "#9900CC", "#9900FF", "#9933CC", "#9933FF", "#99CC00", "#99CC33", "#CC0000", "#CC0033", "#CC0066", "#CC0099", "#CC00CC", "#CC00FF", "#CC3300", "#CC3333", "#CC3366", "#CC3399", "#CC33CC", "#CC33FF", "#CC6600", "#CC6633", "#CC9900", "#CC9933", "#CCCC00", "#CCCC33", "#FF0000", "#FF0033", "#FF0066", "#FF0099", "#FF00CC", "#FF00FF", "#FF3300", "#FF3333", "#FF3366", "#FF3399", "#FF33CC", "#FF33FF", "#FF6600", "#FF6633", "#FF9900", "#FF9933", "#FFCC00", "#FFCC33" ]; function useColors() { if (typeof window !== "undefined" && window.process && (window.process.type === "renderer" || window.process.__nwjs)) { return true; } if (typeof navigator !== "undefined" && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/)) { return false; } return typeof document !== "undefined" && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance || // Is firebug? http://stackoverflow.com/a/398120/376773 typeof window !== "undefined" && window.console && (window.console.firebug || window.console.exception && window.console.table) || // Is firefox >= v31? // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages typeof navigator !== "undefined" && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/) && parseInt(RegExp.$1, 10) >= 31 || // Double check webkit in userAgent just in case we are in a worker typeof navigator !== "undefined" && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/); } function formatArgs(args) { args[0] = (this.useColors ? "%c" : "") + this.namespace + (this.useColors ? " %c" : " ") + args[0] + (this.useColors ? "%c " : " ") + "+" + module2.exports.humanize(this.diff); if (!this.useColors) { return; } const c = "color: " + this.color; args.splice(1, 0, c, "color: inherit"); let index = 0; let lastC = 0; args[0].replace(/%[a-zA-Z%]/g, (match) => { if (match === "%%") { return; } index++; if (match === "%c") { lastC = index; } }); args.splice(lastC, 0, c); } exports2.log = console.debug || console.log || (() => { }); function save(namespaces) { try { if (namespaces) { exports2.storage.setItem("debug", namespaces); } else { exports2.storage.removeItem("debug"); } } catch (error) { } } function load() { let r; try { r = exports2.storage.getItem("debug"); } catch (error) { } if (!r && typeof process !== "undefined" && "env" in process) { r = process.env.DEBUG; } return r; } function localstorage() { try { return localStorage; } catch (error) { } } module2.exports = require_common()(exports2); var { formatters } = module2.exports; formatters.j = function(v) { try { return JSON.stringify(v); } catch (error) { return "[UnexpectedJSONParseError]: " + error.message; } }; } }); // node_modules/.pnpm/has-flag@3.0.0/node_modules/has-flag/index.js var require_has_flag = __commonJS({ "node_modules/.pnpm/has-flag@3.0.0/node_modules/has-flag/index.js"(exports2, module2) { "use strict"; module2.exports = (flag, argv) => { argv = argv || process.argv; const prefix = flag.startsWith("-") ? "" : flag.length === 1 ? "-" : "--"; const pos = argv.indexOf(prefix + flag); const terminatorPos = argv.indexOf("--"); return pos !== -1 && (terminatorPos === -1 ? true : pos < terminatorPos); }; } }); // node_modules/.pnpm/supports-color@5.5.0/node_modules/supports-color/index.js var require_supports_color = __commonJS({ "node_modules/.pnpm/supports-color@5.5.0/node_modules/supports-color/index.js"(exports2, module2) { "use strict"; var os = require("os"); var hasFlag = require_has_flag(); var env = process.env; var forceColor; if (hasFlag("no-color") || hasFlag("no-colors") || hasFlag("color=false")) { forceColor = false; } else if (hasFlag("color") || hasFlag("colors") || hasFlag("color=true") || hasFlag("color=always")) { forceColor = true; } if ("FORCE_COLOR" in env) { forceColor = env.FORCE_COLOR.length === 0 || parseInt(env.FORCE_COLOR, 10) !== 0; } function translateLevel(level) { if (level === 0) { return false; } return { level, hasBasic: true, has256: level >= 2, has16m: level >= 3 }; } function supportsColor(stream) { if (forceColor === false) { return 0; } if (hasFlag("color=16m") || hasFlag("color=full") || hasFlag("color=truecolor")) { return 3; } if (hasFlag("color=256")) { return 2; } if (stream && !stream.isTTY && forceColor !== true) { return 0; } const min = forceColor ? 1 : 0; if (process.platform === "win32") { const osRelease = os.release().split("."); if (Number(process.versions.node.split(".")[0]) >= 8 && Number(osRelease[0]) >= 10 && Number(osRelease[2]) >= 10586) { return Number(osRelease[2]) >= 14931 ? 3 : 2; } return 1; } if ("CI" in env) { if (["TRAVIS", "CIRCLECI", "APPVEYOR", "GITLAB_CI"].some((sign) => sign in env) || env.CI_NAME === "codeship") { return 1; } return min; } if ("TEAMCITY_VERSION" in env) { return /^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(env.TEAMCITY_VERSION) ? 1 : 0; } if (env.COLORTERM === "truecolor") { return 3; } if ("TERM_PROGRAM" in env) { const version = parseInt((env.TERM_PROGRAM_VERSION || "").split(".")[0], 10); switch (env.TERM_PROGRAM) { case "iTerm.app": return version >= 3 ? 3 : 2; case "Apple_Terminal": return 2; } } if (/-256(color)?$/i.test(env.TERM)) { return 2; } if (/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(env.TERM)) { return 1; } if ("COLORTERM" in env) { return 1; } if (env.TERM === "dumb") { return min; } return min; } function getSupportLevel(stream) { const level = supportsColor(stream); return translateLevel(level); } module2.exports = { supportsColor: getSupportLevel, stdout: getSupportLevel(process.stdout), stderr: getSupportLevel(process.stderr) }; } }); // node_modules/.pnpm/debug@4.3.4/node_modules/debug/src/node.js var require_node = __commonJS({ "node_modules/.pnpm/debug@4.3.4/node_modules/debug/src/node.js"(exports2, module2) { var tty = require("tty"); var util = require("util"); exports2.init = init; exports2.log = log; exports2.formatArgs = formatArgs; exports2.save = save; exports2.load = load; exports2.useColors = useColors; exports2.destroy = util.deprecate( () => { }, "Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`." ); exports2.colors = [6, 2, 3, 4, 5, 1]; try { const supportsColor = require_supports_color(); if (supportsColor && (supportsColor.stderr || supportsColor).level >= 2) { exports2.colors = [ 20, 21, 26, 27, 32, 33, 38, 39, 40, 41, 42, 43, 44, 45, 56, 57, 62, 63, 68, 69, 74, 75, 76, 77, 78, 79, 80, 81, 92, 93, 98, 99, 112, 113, 128, 129, 134, 135, 148, 149, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 178, 179, 184, 185, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 214, 215, 220, 221 ]; } } catch (error) { } exports2.inspectOpts = Object.keys(process.env).filter((key) => { return /^debug_/i.test(key); }).reduce((obj, key) => { const prop = key.substring(6).toLowerCase().replace(/_([a-z])/g, (_, k) => { return k.toUpperCase(); }); let val = process.env[key]; if (/^(yes|on|true|enabled)$/i.test(val)) { val = true; } else if (/^(no|off|false|disabled)$/i.test(val)) { val = false; } else if (val === "null") { val = null; } else { val = Number(val); } obj[prop] = val; return obj; }, {}); function useColors() { return "colors" in exports2.inspectOpts ? Boolean(exports2.inspectOpts.colors) : tty.isatty(process.stderr.fd); } function formatArgs(args) { const { namespace: name, useColors: useColors2 } = this; if (useColors2) { const c = this.color; const colorCode = "\x1B[3" + (c < 8 ? c : "8;5;" + c); const prefix = ` ${colorCode};1m${name} \x1B[0m`; args[0] = prefix + args[0].split("\n").join("\n" + prefix); args.push(colorCode + "m+" + module2.exports.humanize(this.diff) + "\x1B[0m"); } else { args[0] = getDate() + name + " " + args[0]; } } function getDate() { if (exports2.inspectOpts.hideDate) { return ""; } return (/* @__PURE__ */ new Date()).toISOString() + " "; } function log(...args) { return process.stderr.write(util.format(...args) + "\n"); } function save(namespaces) { if (namespaces) { process.env.DEBUG = namespaces; } else { delete process.env.DEBUG; } } function load() { return process.env.DEBUG; } function init(debug) { debug.inspectOpts = {}; const keys = Object.keys(exports2.inspectOpts); for (let i = 0; i < keys.length; i++) { debug.inspectOpts[keys[i]] = exports2.inspectOpts[keys[i]]; } } module2.exports = require_common()(exports2); var { formatters } = module2.exports; formatters.o = function(v) { this.inspectOpts.colors = this.useColors; return util.inspect(v, this.inspectOpts).split("\n").map((str) => str.trim()).join(" "); }; formatters.O = function(v) { this.inspectOpts.colors = this.useColors; return util.inspect(v, this.inspectOpts); }; } }); // node_modules/.pnpm/debug@4.3.4/node_modules/debug/src/index.js var require_src = __commonJS({ "node_modules/.pnpm/debug@4.3.4/node_modules/debug/src/index.js"(exports2, module2) { if (typeof process === "undefined" || process.type === "renderer" || process.browser === true || process.__nwjs) { module2.exports = require_browser(); } else { module2.exports = require_node(); } } }); // node_modules/.pnpm/engine.io@6.5.2/node_modules/engine.io/build/transport.js var require_transport = __commonJS({ "node_modules/.pnpm/engine.io@6.5.2/node_modules/engine.io/build/transport.js"(exports2) { "use strict"; Object.defineProperty(exports2, "__esModule", { value: true }); exports2.Transport = void 0; var events_1 = require("events"); var parser_v4 = require_cjs(); var parser_v3 = require_parser_v3(); var debug_1 = require_src(); var debug = (0, debug_1.default)("engine:transport"); function noop() { } var Transport = class extends events_1.EventEmitter { /** * Transport constructor. * * @param {http.IncomingMessage} request * @api public */ constructor(req) { super(); this.readyState = "open"; this.discarded = false; this.protocol = req._query.EIO === "4" ? 4 : 3; this.parser = this.protocol === 4 ? parser_v4 : parser_v3; } get readyState() { return this._readyState; } set readyState(state) { debug("readyState updated from %s to %s (%s)", this._readyState, state, this.name); this._readyState = state; } /** * Flags the transport as discarded. * * @api private */ discard() { this.discarded = true; } /** * Called with an incoming HTTP request. * * @param {http.IncomingMessage} request * @api protected */ onRequest(req) { debug("setting request"); this.req = req; } /** * Closes the transport. * * @api private */ close(fn) { if ("closed" === this.readyState || "closing" === this.readyState) return; this.readyState = "closing"; this.doClose(fn || noop); } /** * Called with a transport error. * * @param {String} message error * @param {Object} error description * @api protected */ onError(msg, desc) { if (this.listeners("error").length) { const err = new Error(msg); err.type = "TransportError"; err.description = desc; this.emit("error", err); } else { debug("ignored transport error %s (%s)", msg, desc); } } /** * Called with parsed out a packets from the data stream. * * @param {Object} packet * @api protected */ onPacket(packet) { this.emit("packet", packet); } /** * Called with the encoded packet data. * * @param {String} data * @api protected */ onData(data) { this.onPacket(this.parser.decodePacket(data)); } /** * Called upon transport close. * * @api protected */ onClose() { this.readyState = "closed"; this.emit("close"); } }; exports2.Transport = Transport; } }); // node_modules/.pnpm/engine.io@6.5.2/node_modules/engine.io/build/transports/polling.js var require_polling = __commonJS({ "node_modules/.pnpm/engine.io@6.5.2/node_modules/engine.io/build/transports/polling.js"(exports2) { "use strict"; Object.defineProperty(exports2, "__esModule", { value: true }); exports2.Polling = void 0; var transport_1 = require_transport(); var zlib_1 = require("zlib"); var accepts = require_accepts(); var debug_1 = require_src(); var debug = (0, debug_1.default)("engine:polling"); var compressionMethods = { gzip: zlib_1.createGzip, deflate: zlib_1.createDeflate }; var Polling = class extends transport_1.Transport { /** * HTTP polling constructor. * * @api public. */ constructor(req) { super(req); this.closeTimeout = 30 * 1e3; } /** * Transport name * * @api public */ get name() { return "polling"; } get supportsFraming() { return false; } /** * Overrides onRequest. * * @param {http.IncomingMessage} * @api private */ onRequest(req) { const res = req.res; if ("GET" === req.method) { this.onPollRequest(req, res); } else if ("POST" === req.method) { this.onDataRequest(req, res); } else { res.writeHead(500); res.end(); } } /** * The client sends a request awaiting for us to send data. * * @api private */ onPollRequest(req, res) { if (this.req) { debug("request overlap"); this.onError("overlap from client"); res.writeHead(400); res.end(); return; } debug("setting request"); this.req = req; this.res = res; const onClose = () => { this.onError("poll connection closed prematurely"); }; const cleanup = () => { req.removeListener("close", onClose); this.req = this.res = null; }; req.cleanup = cleanup; req.on("close", onClose); this.writable = true; this.emit("drain"); if (this.writable && this.shouldClose) { debug("triggering empty send to append close packet"); this.send([{ type: "noop" }]); } } /** * The client sends a request with data. * * @api private */ onDataRequest(req, res) { if (this.dataReq) { this.onError("data request overlap from client"); res.writeHead(400); res.end(); return; } const isBinary = "application/octet-stream" === req.headers["content-type"]; if (isBinary && this.protocol === 4) { return this.onError("invalid content"); } this.dataReq = req; this.dataRes = res; let chunks = isBinary ? Buffer.concat([]) : ""; const cleanup = () => { req.removeListener("data", onData); req.removeListener("end", onEnd); req.removeListener("close", onClose); this.dataReq = this.dataRes = chunks = null; }; const onClose = () => { cleanup(); this.onError("data request connection closed prematurely"); }; const onData = (data) => { let contentLength; if (isBinary) { chunks = Buffer.concat([chunks, data]); contentLength = chunks.length; } else { chunks += data; contentLength = Buffer.byteLength(chunks); } if (contentLength > this.maxHttpBufferSize) { res.writeHead(413).end(); cleanup(); } }; const onEnd = () => { this.onData(chunks); const headers = { // text/html is required instead of text/plain to avoid an // unwanted download dialog on certain user-agents (GH-43) "Content-Type": "text/html", "Content-Length": 2 }; res.writeHead(200, this.headers(req, headers)); res.end("ok"); cleanup(); }; req.on("close", onClose); if (!isBinary) req.setEncoding("utf8"); req.on("data", onData); req.on("end", onEnd); } /** * Processes the incoming data payload. * * @param {String} encoded payload * @api private */ onData(data) { debug('received "%s"', data); const callback = (packet) => { if ("close" === packet.type) { debug("got xhr close packet"); this.onClose(); return false; } this.onPacket(packet); }; if (this.protocol === 3) { this.parser.decodePayload(data, callback); } else { this.parser.decodePayload(data).forEach(callback); } } /** * Overrides onClose. * * @api private */ onClose() { if (this.writable) { this.send([{ type: "noop" }]); } super.onClose(); } /** * Writes a packet payload. * * @param {Object} packet * @api private */ send(packets) { this.writable = false; if (this.shouldClose) { debug("appending close packet to payload"); packets.push({ type: "close" }); this.shouldClose(); this.shouldClose = null; } const doWrite = (data) => { const compress = packets.some((packet) => { return packet.options && packet.options.compress; }); this.write(data, { compress }); }; if (this.protocol === 3) { this.parser.encodePayload(packets, this.supportsBinary, doWrite); } else { this.parser.encodePayload(packets, doWrite); } } /** * Writes data as response to poll request. * * @param {String} data * @param {Object} options * @api private */ write(data, options) { debug('writing "%s"', data); this.doWrite(data, options, () => { this.req.cleanup(); }); } /** * Performs the write. * * @api private */ doWrite(data, options, callback) { const isString = typeof data === "string"; const contentType = isString ? "text/plain; charset=UTF-8" : "application/octet-stream"; const headers = { "Content-Type": contentType }; const respond = (data2) => { headers["Content-Length"] = "string" === typeof data2 ? Buffer.byteLength(data2) : data2.length; this.res.writeHead(200, this.headers(this.req, headers)); this.res.end(data2); callback(); }; if (!this.httpCompression || !options.compress) { respond(data); return; } const len = isString ? Buffer.byteLength(data) : data.length; if (len < this.httpCompression.threshold) { respond(data); return; } const encoding = accepts(this.req).encodings(["gzip", "deflate"]); if (!encoding) { respond(data); return; } this.compress(data, encoding, (err, data2) => { if (err) { this.res.writeHead(500); this.res.end(); callback(err); return; } headers["Content-Encoding"] = encoding; respond(data2); }); } /** * Compresses data. * * @api private */ compress(data, encoding, callback) { debug("compressing"); const buffers = []; let nread = 0; compressionMethods[encoding](this.httpCompression).on("error", callback).on("data", function(chunk) { buffers.push(chunk); nread += chunk.length; }).on("end", function() { callback(null, Buffer.concat(buffers, nread)); }).end(data); } /** * Closes the transport. * * @api private */ doClose(fn) { debug("closing"); let closeTimeoutTimer; if (this.dataReq) { debug("aborting ongoing data request"); this.dataReq.destroy(); } const onClose = () => { clearTimeout(closeTimeoutTimer); fn(); this.onClose(); }; if (this.writable) { debug("transport writable - closing right away"); this.send([{ type: "close" }]); onClose(); } else if (this.discarded) { debug("transport discarded - closing right away"); onClose(); } else { debug("transport not writable - buffering orderly close"); this.shouldClose = onClose; closeTimeoutTimer = setTimeout(onClose, this.closeTimeout); } } /** * Returns headers for a response. * * @param {http.IncomingMessage} request * @param {Object} extra headers * @api private */ headers(req, headers) { headers = headers || {}; const ua = req.headers["user-agent"]; if (ua && (~ua.indexOf(";MSIE") || ~ua.indexOf("Trident/"))) { headers["X-XSS-Protection"] = "0"; } this.emit("headers", headers, req); return headers; } }; exports2.Polling = Polling; } }); // node_modules/.pnpm/engine.io@6.5.2/node_modules/engine.io/build/transports/polling-jsonp.js var require_polling_jsonp = __commonJS({ "node_modules/.pnpm/engine.io@6.5.2/node_modules/engine.io/build/transports/polling-jsonp.js"(exports2) { "use strict"; Object.defineProperty(exports2, "__esModule", { value: true }); exports2.JSONP = void 0; var polling_1 = require_polling(); var qs = require("querystring"); var rDoubleSlashes = /\\\\n/g; var rSlashes = /(\\)?\\n/g; var JSONP = class extends polling_1.Polling { /** * JSON-P polling transport. * * @api public */ constructor(req) { super(req); this.head = "___eio[" + (req._query.j || "").replace(/[^0-9]/g, "") + "]("; this.foot = ");"; } /** * Handles incoming data. * Due to a bug in \n handling by browsers, we expect a escaped string. * * @api private */ onData(data) { data = qs.parse(data).d; if ("string" === typeof data) { data = data.replace(rSlashes, function(match, slashes) { return slashes ? match : "\n"; }); super.onData(data.replace(rDoubleSlashes, "\\n")); } } /** * Performs the write. * * @api private */ doWrite(data, options, callback) { const js = JSON.stringify(data).replace(/\u2028/g, "\\u2028").replace(/\u2029/g, "\\u2029"); data = this.head + js + this.foot; super.doWrite(data, options, callback); } }; exports2.JSONP = JSONP; } }); // node_modules/.pnpm/engine.io@6.5.2/node_modules/engine.io/build/transports/websocket.js var require_websocket = __commonJS({ "node_modules/.pnpm/engine.io@6.5.2/node_modules/engine.io/build/transports/websocket.js"(exports2) { "use strict"; Object.defineProperty(exports2, "__esModule", { value: true }); exports2.WebSocket = void 0; var transport_1 = require_transport(); var debug_1 = require_src(); var debug = (0, debug_1.default)("engine:ws"); var WebSocket = class extends transport_1.Transport { /** * WebSocket transport * * @param {http.IncomingMessage} * @api public */ constructor(req) { super(req); this.socket = req.websocket; this.socket.on("message", (data, isBinary) => { const message = isBinary ? data : data.toString(); debug('received "%s"', message); super.onData(message); }); this.socket.once("close", this.onClose.bind(this)); this.socket.on("error", this.onError.bind(this)); this.writable = true; this.perMessageDeflate = null; } /** * Transport name * * @api public */ get name() { return "websocket"; } /** * Advertise upgrade support. * * @api public */ get handlesUpgrades() { return true; } /** * Advertise framing support. * * @api public */ get supportsFraming() { return true; } /** * Writes a packet payload. * * @param {Array} packets * @api private */ send(packets) { this.writable = false; for (let i = 0; i < packets.length; i++) { const packet = packets[i]; const isLast = i + 1 === packets.length; const opts = {}; if (packet.options) { opts.compress = packet.options.compress; } const onSent = (err) => { if (err) { return this.onError("write error", err.stack); } else if (isLast) { this.writable = true; this.emit("drain"); } }; const send = (data) => { if (this.perMessageDeflate) { const len = "string" === typeof data ? Buffer.byteLength(data) : data.length; if (len < this.perMessageDeflate.threshold) { opts.compress = false; } } debug('writing "%s"', data); this.socket.send(data, opts, onSent); }; if (packet.options && typeof packet.options.wsPreEncoded === "string") { send(packet.options.wsPreEncoded); } else if (this._canSendPreEncodedFrame(packet)) { this.socket._sender.sendFrame(packet.options.wsPreEncodedFrame, onSent); } else { this.parser.encodePacket(packet, this.supportsBinary, send); } } } /** * Whether the encoding of the WebSocket frame can be skipped. * @param packet * @private */ _canSendPreEncodedFrame(packet) { var _a, _b, _c; return !this.perMessageDeflate && typeof ((_b = (_a = this.socket) === null || _a === void 0 ? void 0 : _a._sender) === null || _b === void 0 ? void 0 : _b.sendFrame) === "function" && ((_c = packet.options) === null || _c === void 0 ? void 0 : _c.wsPreEncodedFrame) !== void 0; } /** * Closes the transport. * * @api private */ doClose(fn) { debug("closing"); this.socket.close(); fn && fn(); } }; exports2.WebSocket = WebSocket; } }); // node_modules/.pnpm/engine.io@6.5.2/node_modules/engine.io/build/transports/webtransport.js var require_webtransport = __commonJS({ "node_modules/.pnpm/engine.io@6.5.2/node_modules/engine.io/build/transports/webtransport.js"(exports2) { "use strict"; Object.defineProperty(exports2, "__esModule", { value: true }); exports2.WebTransport = void 0; var transport_1 = require_transport(); var debug_1 = require_src(); var engine_io_parser_1 = require_cjs(); var debug = (0, debug_1.default)("engine:webtransport"); var WebTransport = class extends transport_1.Transport { constructor(session, stream, reader) { super({ _query: { EIO: "4" } }); this.session = session; const transformStream = (0, engine_io_parser_1.createPacketEncoderStream)(); transformStream.readable.pipeTo(stream.writable); this.writer = transformStream.writable.getWriter(); (async () => { try { while (true) { const { value, done } = await reader.read(); if (done) { debug("session is closed"); break; } debug("received chunk: %o", value); this.onPacket(value); } } catch (e) { debug("error while reading: %s", e.message); } })(); session.closed.then(() => this.onClose()); this.writable = true; } get name() { return "webtransport"; } get supportsFraming() { return true; } async send(packets) { this.writable = false; try { for (let i = 0; i < packets.length; i++) { const packet = packets[i]; await this.writer.write(packet); } } catch (e) { debug("error while writing: %s", e.message); } this.writable = true; this.emit("drain"); } doClose(fn) { debug("closing WebTransport session"); this.session.close(); fn && fn(); } }; exports2.WebTransport = WebTransport; } }); // node_modules/.pnpm/engine.io@6.5.2/node_modules/engine.io/build/transports/index.js var require_transports = __commonJS({ "node_modules/.pnpm/engine.io@6.5.2/node_modules/engine.io/build/transports/index.js"(exports2) { "use strict"; Object.defineProperty(exports2, "__esModule", { value: true }); var polling_1 = require_polling(); var polling_jsonp_1 = require_polling_jsonp(); var websocket_1 = require_websocket(); var webtransport_1 = require_webtransport(); exports2.default = { polling, websocket: websocket_1.WebSocket, webtransport: webtransport_1.WebTransport }; function polling(req) { if ("string" === typeof req._query.j) { return new polling_jsonp_1.JSONP(req); } else { return new polling_1.Polling(req); } } polling.upgradesTo = ["websocket", "webtransport"]; } }); // node_modules/.pnpm/engine.io@6.5.2/node_modules/engine.io/build/socket.js var require_socket = __commonJS({ "node_modules/.pnpm/engine.io@6.5.2/node_modules/engine.io/build/socket.js"(exports2) { "use strict"; Object.defineProperty(exports2, "__esModule", { value: true }); exports2.Socket = void 0; var events_1 = require("events"); var debug_1 = require_src(); var timers_1 = require("timers"); var debug = (0, debug_1.default)("engine:socket"); var Socket2 = class extends events_1.EventEmitter { /** * Client class (abstract). * * @api private */ constructor(id, server2, transport, req, protocol) { super(); this.id = id; this.server = server2; this.upgrading = false; this.upgraded = false; this.readyState = "opening"; this.writeBuffer = []; this.packetsFn = []; this.sentCallbackFn = []; this.cleanupFn = []; this.request = req; this.protocol = protocol; if (req) { if (req.websocket && req.websocket._socket) { this.remoteAddress = req.websocket._socket.remoteAddress; } else { this.remoteAddress = req.connection.remoteAddress; } } else { } this.checkIntervalTimer = null; this.upgradeTimeoutTimer = null; this.pingTimeoutTimer = null; this.pingIntervalTimer = null; this.setTransport(transport); this.onOpen(); } get readyState() { return this._readyState; } set readyState(state) { debug("readyState updated from %s to %s", this._readyState, state); this._readyState = state; } /** * Called upon transport considered open. * * @api private */ onOpen() { this.readyState = "open"; this.transport.sid = this.id; this.sendPacket("open", JSON.stringify({ sid: this.id, upgrades: this.getAvailableUpgrades(), pingInterval: this.server.opts.pingInterval, pingTimeout: this.server.opts.pingTimeout, maxPayload: this.server.opts.maxHttpBufferSize })); if (this.server.opts.initialPacket) { this.sendPacket("message", this.server.opts.initialPacket); } this.emit("open"); if (this.protocol === 3) { this.resetPingTimeout(this.server.opts.pingInterval + this.server.opts.pingTimeout); } else { this.schedulePing(); } } /** * Called upon transport packet. * * @param {Object} packet * @api private */ onPacket(packet) { if ("open" !== this.readyState) { return debug("packet received with closed socket"); } debug(`received packet ${packet.type}`); this.emit("packet", packet); this.resetPingTimeout(this.server.opts.pingInterval + this.server.opts.pingTimeout); switch (packet.type) { case "ping": if (this.transport.protocol !== 3) { this.onError("invalid heartbeat direction"); return; } debug("got ping"); this.sendPacket("pong"); this.emit("heartbeat"); break; case "pong": if (this.transport.protocol === 3) { this.onError("invalid heartbeat direction"); return; } debug("got pong"); this.pingIntervalTimer.refresh(); this.emit("heartbeat"); break; case "error": this.onClose("parse error"); break; case "message": this.emit("data", packet.data); this.emit("message", packet.data); break; } } /** * Called upon transport error. * * @param {Error} error object * @api private */ onError(err) { debug("transport error"); this.onClose("transport error", err); } /** * Pings client every `this.pingInterval` and expects response * within `this.pingTimeout` or closes connection. * * @api private */ schedulePing() { this.pingIntervalTimer = (0, timers_1.setTimeout)(() => { debug("writing ping packet - expecting pong within %sms", this.server.opts.pingTimeout); this.sendPacket("ping"); this.resetPingTimeout(this.server.opts.pingTimeout); }, this.server.opts.pingInterval); } /** * Resets ping timeout. * * @api private */ resetPingTimeout(timeout) { (0, timers_1.clearTimeout)(this.pingTimeoutTimer); this.pingTimeoutTimer = (0, timers_1.setTimeout)(() => { if (this.readyState === "closed") return; this.onClose("ping timeout"); }, timeout); } /** * Attaches handlers for the given transport. * * @param {Transport} transport * @api private */ setTransport(transport) { const onError = this.onError.bind(this); const onPacket = this.onPacket.bind(this); const flush = this.flush.bind(this); const onClose = this.onClose.bind(this, "transport close"); this.transport = transport; this.transport.once("error", onError); this.transport.on("packet", onPacket); this.transport.on("drain", flush); this.transport.once("close", onClose); this.setupSendCallback(); this.cleanupFn.push(function() { transport.removeListener("error", onError); transport.removeListener("packet", onPacket); transport.removeListener("drain", flush); transport.removeListener("close", onClose); }); } /** * Upgrades socket to the given transport * * @param {Transport} transport * @api private */ maybeUpgrade(transport) { debug('might upgrade socket transport from "%s" to "%s"', this.transport.name, transport.name); this.upgrading = true; this.upgradeTimeoutTimer = (0, timers_1.setTimeout)(() => { debug("client did not complete upgrade - closing transport"); cleanup(); if ("open" === transport.readyState) { transport.close(); } }, this.server.opts.upgradeTimeout); const onPacket = (packet) => { if ("ping" === packet.type && "probe" === packet.data) { debug("got probe ping packet, sending pong"); transport.send([{ type: "pong", data: "probe" }]); this.emit("upgrading", transport); clearInterval(this.checkIntervalTimer); this.checkIntervalTimer = setInterval(check, 100); } else if ("upgrade" === packet.type && this.readyState !== "closed") { debug("got upgrade packet - upgrading"); cleanup(); this.transport.discard(); this.upgraded = true; this.clearTransport(); this.setTransport(transport); this.emit("upgrade", transport); this.flush(); if (this.readyState === "closing") { transport.close(() => { this.onClose("forced close"); }); } } else { cleanup(); transport.close(); } }; const check = () => { if ("polling" === this.transport.name && this.transport.writable) { debug("writing a noop packet to polling for fast upgrade"); this.transport.send([{ type: "noop" }]); } }; const cleanup = () => { this.upgrading = false; clearInterval(this.checkIntervalTimer); this.checkIntervalTimer = null; (0, timers_1.clearTimeout)(this.upgradeTimeoutTimer); this.upgradeTimeoutTimer = null; transport.removeListener("packet", onPacket); transport.removeListener("close", onTransportClose); transport.removeListener("error", onError); this.removeListener("close", onClose); }; const onError = (err) => { debug("client did not complete upgrade - %s", err); cleanup(); transport.close(); transport = null; }; const onTransportClose = () => { onError("transport closed"); }; const onClose = () => { onError("socket closed"); }; transport.on("packet", onPacket); transport.once("close", onTransportClose); transport.once("error", onError); this.once("close", onClose); } /** * Clears listeners and timers associated with current transport. * * @api private */ clearTransport() { let cleanup; const toCleanUp = this.cleanupFn.length; for (let i = 0; i < toCleanUp; i++) { cleanup = this.cleanupFn.shift(); cleanup(); } this.transport.on("error", function() { debug("error triggered by discarded transport"); }); this.transport.close(); (0, timers_1.clearTimeout)(this.pingTimeoutTimer); } /** * Called upon transport considered closed. * Possible reasons: `ping timeout`, `client error`, `parse error`, * `transport error`, `server close`, `transport close` */ onClose(reason, description) { if ("closed" !== this.readyState) { this.readyState = "closed"; (0, timers_1.clearTimeout)(this.pingIntervalTimer); (0, timers_1.clearTimeout)(this.pingTimeoutTimer); clearInterval(this.checkIntervalTimer); this.checkIntervalTimer = null; (0, timers_1.clearTimeout)(this.upgradeTimeoutTimer); process.nextTick(() => { this.writeBuffer = []; }); this.packetsFn = []; this.sentCallbackFn = []; this.clearTransport(); this.emit("close", reason, description); } } /** * Setup and manage send callback * * @api private */ setupSendCallback() { const onDrain = () => { if (this.sentCallbackFn.length > 0) { const seqFn = this.sentCallbackFn.splice(0, 1)[0]; if ("function" === typeof seqFn) { debug("executing send callback"); seqFn(this.transport); } else if (Array.isArray(seqFn)) { debug("executing batch send callback"); const l = seqFn.length; let i = 0; for (; i < l; i++) { if ("function" === typeof seqFn[i]) { seqFn[i](this.transport); } } } } }; this.transport.on("drain", onDrain); this.cleanupFn.push(() => { this.transport.removeListener("drain", onDrain); }); } /** * Sends a message packet. * * @param {Object} data * @param {Object} options * @param {Function} callback * @return {Socket} for chaining * @api public */ send(data, options, callback) { this.sendPacket("message", data, options, callback); return this; } /** * Alias of {@link send}. * * @param data * @param options * @param callback */ write(data, options, callback) { this.sendPacket("message", data, options, callback); return this; } /** * Sends a packet. * * @param {String} type - packet type * @param {String} data * @param {Object} options * @param {Function} callback * * @api private */ sendPacket(type, data, options = {}, callback) { if ("function" === typeof options) { callback = options; options = {}; } if ("closing" !== this.readyState && "closed" !== this.readyState) { debug('sending packet "%s" (%s)', type, data); options.compress = options.compress !== false; const packet = { type, options }; if (data) packet.data = data; this.emit("packetCreate", packet); this.writeBuffer.push(packet); if (callback) this.packetsFn.push(callback); this.flush(); } } /** * Attempts to flush the packets buffer. * * @api private */ flush() { if ("closed" !== this.readyState && this.transport.writable && this.writeBuffer.length) { debug("flushing buffer to transport"); this.emit("flush", this.writeBuffer); this.server.emit("flush", this, this.writeBuffer); const wbuf = this.writeBuffer; this.writeBuffer = []; if (!this.transport.supportsFraming) { this.sentCallbackFn.push(this.packetsFn); } else { this.sentCallbackFn.push.apply(this.sentCallbackFn, this.packetsFn); } this.packetsFn = []; this.transport.send(wbuf); this.emit("drain"); this.server.emit("drain", this); } } /** * Get available upgrades for this socket. * * @api private */ getAvailableUpgrades() { const availableUpgrades = []; const allUpgrades = this.server.upgrades(this.transport.name); let i = 0; const l = allUpgrades.length; for (; i < l; ++i) { const upg = allUpgrades[i]; if (this.server.opts.transports.indexOf(upg) !== -1) { availableUpgrades.push(upg); } } return availableUpgrades; } /** * Closes the socket and underlying transport. * * @param {Boolean} discard - optional, discard the transport * @return {Socket} for chaining * @api public */ close(discard) { if ("open" !== this.readyState) return; this.readyState = "closing"; if (this.writeBuffer.length) { debug("there are %d remaining packets in the buffer, waiting for the 'drain' event", this.writeBuffer.length); this.once("drain", () => { debug("all packets have been sent, closing the transport"); this.closeTransport(discard); }); return; } debug("the buffer is empty, closing the transport right away", discard); this.closeTransport(discard); } /** * Closes the underlying transport. * * @param {Boolean} discard * @api private */ closeTransport(discard) { debug("closing the transport (discard? %s)", discard); if (discard) this.transport.discard(); this.transport.close(this.onClose.bind(this, "forced close")); } }; exports2.Socket = Socket2; } }); // node_modules/.pnpm/cookie@0.4.2/node_modules/cookie/index.js var require_cookie = __commonJS({ "node_modules/.pnpm/cookie@0.4.2/node_modules/cookie/index.js"(exports2) { "use strict"; exports2.parse = parse; exports2.serialize = serialize; var decode = decodeURIComponent; var encode = encodeURIComponent; var fieldContentRegExp = /^[\u0009\u0020-\u007e\u0080-\u00ff]+$/; function parse(str, options) { if (typeof str !== "string") { throw new TypeError("argument str must be a string"); } var obj = {}; var opt = options || {}; var pairs = str.split(";"); var dec = opt.decode || decode; for (var i = 0; i < pairs.length; i++) { var pair = pairs[i]; var index = pair.indexOf("="); if (index < 0) { continue; } var key = pair.substring(0, index).trim(); if (void 0 == obj[key]) { var val = pair.substring(index + 1, pair.length).trim(); if (val[0] === '"') { val = val.slice(1, -1); } obj[key] = tryDecode(val, dec); } } return obj; } function serialize(name, val, options) { var opt = options || {}; var enc = opt.encode || encode; if (typeof enc !== "function") { throw new TypeError("option encode is invalid"); } if (!fieldContentRegExp.test(name)) { throw new TypeError("argument name is invalid"); } var value = enc(val); if (value && !fieldContentRegExp.test(value)) { throw new TypeError("argument val is invalid"); } var str = name + "=" + value; if (null != opt.maxAge) { var maxAge = opt.maxAge - 0; if (isNaN(maxAge) || !isFinite(maxAge)) { throw new TypeError("option maxAge is invalid"); } str += "; Max-Age=" + Math.floor(maxAge); } if (opt.domain) { if (!fieldContentRegExp.test(opt.domain)) { throw new TypeError("option domain is invalid"); } str += "; Domain=" + opt.domain; } if (opt.path) { if (!fieldContentRegExp.test(opt.path)) { throw new TypeError("option path is invalid"); } str += "; Path=" + opt.path; } if (opt.expires) { if (typeof opt.expires.toUTCString !== "function") { throw new TypeError("option expires is invalid"); } str += "; Expires=" + opt.expires.toUTCString(); } if (opt.httpOnly) { str += "; HttpOnly"; } if (opt.secure) { str += "; Secure"; } if (opt.sameSite) { var sameSite = typeof opt.sameSite === "string" ? opt.sameSite.toLowerCase() : opt.sameSite; switch (sameSite) { case true: str += "; SameSite=Strict"; break; case "lax": str += "; SameSite=Lax"; break; case "strict": str += "; SameSite=Strict"; break; case "none": str += "; SameSite=None"; break; default: throw new TypeError("option sameSite is invalid"); } } return str; } function tryDecode(str, decode2) { try { return decode2(str); } catch (e) { return str; } } } }); // node_modules/.pnpm/ws@8.11.0/node_modules/ws/lib/constants.js var require_constants = __commonJS({ "node_modules/.pnpm/ws@8.11.0/node_modules/ws/lib/constants.js"(exports2, module2) { "use strict"; module2.exports = { BINARY_TYPES: ["nodebuffer", "arraybuffer", "fragments"], EMPTY_BUFFER: Buffer.alloc(0), GUID: "258EAFA5-E914-47DA-95CA-C5AB0DC85B11", kForOnEventAttribute: Symbol("kIsForOnEventAttribute"), kListener: Symbol("kListener"), kStatusCode: Symbol("status-code"), kWebSocket: Symbol("websocket"), NOOP: () => { } }; } }); // node_modules/.pnpm/ws@8.11.0/node_modules/ws/lib/buffer-util.js var require_buffer_util = __commonJS({ "node_modules/.pnpm/ws@8.11.0/node_modules/ws/lib/buffer-util.js"(exports2, module2) { "use strict"; var { EMPTY_BUFFER } = require_constants(); function concat(list, totalLength) { if (list.length === 0) return EMPTY_BUFFER; if (list.length === 1) return list[0]; const target = Buffer.allocUnsafe(totalLength); let offset = 0; for (let i = 0; i < list.length; i++) { const buf = list[i]; target.set(buf, offset); offset += buf.length; } if (offset < totalLength) return target.slice(0, offset); return target; } function _mask(source2, mask, output, offset, length) { for (let i = 0; i < length; i++) { output[offset + i] = source2[i] ^ mask[i & 3]; } } function _unmask(buffer, mask) { for (let i = 0; i < buffer.length; i++) { buffer[i] ^= mask[i & 3]; } } function toArrayBuffer(buf) { if (buf.byteLength === buf.buffer.byteLength) { return buf.buffer; } return buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength); } function toBuffer(data) { toBuffer.readOnly = true; if (Buffer.isBuffer(data)) return data; let buf; if (data instanceof ArrayBuffer) { buf = Buffer.from(data); } else if (ArrayBuffer.isView(data)) { buf = Buffer.from(data.buffer, data.byteOffset, data.byteLength); } else { buf = Buffer.from(data); toBuffer.readOnly = false; } return buf; } module2.exports = { concat, mask: _mask, toArrayBuffer, toBuffer, unmask: _unmask }; if (!process.env.WS_NO_BUFFER_UTIL) { try { const bufferUtil = require("bufferutil"); module2.exports.mask = function(source2, mask, output, offset, length) { if (length < 48) _mask(source2, mask, output, offset, length); else bufferUtil.mask(source2, mask, output, offset, length); }; module2.exports.unmask = function(buffer, mask) { if (buffer.length < 32) _unmask(buffer, mask); else bufferUtil.unmask(buffer, mask); }; } catch (e) { } } } }); // node_modules/.pnpm/ws@8.11.0/node_modules/ws/lib/limiter.js var require_limiter = __commonJS({ "node_modules/.pnpm/ws@8.11.0/node_modules/ws/lib/limiter.js"(exports2, module2) { "use strict"; var kDone = Symbol("kDone"); var kRun = Symbol("kRun"); var Limiter = class { /** * Creates a new `Limiter`. * * @param {Number} [concurrency=Infinity] The maximum number of jobs allowed * to run concurrently */ constructor(concurrency) { this[kDone] = () => { this.pending--; this[kRun](); }; this.concurrency = concurrency || Infinity; this.jobs = []; this.pending = 0; } /** * Adds a job to the queue. * * @param {Function} job The job to run * @public */ add(job) { this.jobs.push(job); this[kRun](); } /** * Removes a job from the queue and runs it if possible. * * @private */ [kRun]() { if (this.pending === this.concurrency) return; if (this.jobs.length) { const job = this.jobs.shift(); this.pending++; job(this[kDone]); } } }; module2.exports = Limiter; } }); // node_modules/.pnpm/ws@8.11.0/node_modules/ws/lib/permessage-deflate.js var require_permessage_deflate = __commonJS({ "node_modules/.pnpm/ws@8.11.0/node_modules/ws/lib/permessage-deflate.js"(exports2, module2) { "use strict"; var zlib = require("zlib"); var bufferUtil = require_buffer_util(); var Limiter = require_limiter(); var { kStatusCode } = require_constants(); var TRAILER = Buffer.from([0, 0, 255, 255]); var kPerMessageDeflate = Symbol("permessage-deflate"); var kTotalLength = Symbol("total-length"); var kCallback = Symbol("callback"); var kBuffers = Symbol("buffers"); var kError = Symbol("error"); var zlibLimiter; var PerMessageDeflate = class { /** * Creates a PerMessageDeflate instance. * * @param {Object} [options] Configuration options * @param {(Boolean|Number)} [options.clientMaxWindowBits] Advertise support * for, or request, a custom client window size * @param {Boolean} [options.clientNoContextTakeover=false] Advertise/ * acknowledge disabling of client context takeover * @param {Number} [options.concurrencyLimit=10] The number of concurrent * calls to zlib * @param {(Boolean|Number)} [options.serverMaxWindowBits] Request/confirm the * use of a custom server window size * @param {Boolean} [options.serverNoContextTakeover=false] Request/accept * disabling of server context takeover * @param {Number} [options.threshold=1024] Size (in bytes) below which * messages should not be compressed if context takeover is disabled * @param {Object} [options.zlibDeflateOptions] Options to pass to zlib on * deflate * @param {Object} [options.zlibInflateOptions] Options to pass to zlib on * inflate * @param {Boolean} [isServer=false] Create the instance in either server or * client mode * @param {Number} [maxPayload=0] The maximum allowed message length */ constructor(options, isServer, maxPayload) { this._maxPayload = maxPayload | 0; this._options = options || {}; this._threshold = this._options.threshold !== void 0 ? this._options.threshold : 1024; this._isServer = !!isServer; this._deflate = null; this._inflate = null; this.params = null; if (!zlibLimiter) { const concurrency = this._options.concurrencyLimit !== void 0 ? this._options.concurrencyLimit : 10; zlibLimiter = new Limiter(concurrency); } } /** * @type {String} */ static get extensionName() { return "permessage-deflate"; } /** * Create an extension negotiation offer. * * @return {Object} Extension parameters * @public */ offer() { const params = {}; if (this._options.serverNoContextTakeover) { params.server_no_context_takeover = true; } if (this._options.clientNoContextTakeover) { params.client_no_context_takeover = true; } if (this._options.serverMaxWindowBits) { params.server_max_window_bits = this._options.serverMaxWindowBits; } if (this._options.clientMaxWindowBits) { params.client_max_window_bits = this._options.clientMaxWindowBits; } else if (this._options.clientMaxWindowBits == null) { params.client_max_window_bits = true; } return params; } /** * Accept an extension negotiation offer/response. * * @param {Array} configurations The extension negotiation offers/reponse * @return {Object} Accepted configuration * @public */ accept(configurations) { configurations = this.normalizeParams(configurations); this.params = this._isServer ? this.acceptAsServer(configurations) : this.acceptAsClient(configurations); return this.params; } /** * Releases all resources used by the extension. * * @public */ cleanup() { if (this._inflate) { this._inflate.close(); this._inflate = null; } if (this._deflate) { const callback = this._deflate[kCallback]; this._deflate.close(); this._deflate = null; if (callback) { callback( new Error( "The deflate stream was closed while data was being processed" ) ); } } } /** * Accept an extension negotiation offer. * * @param {Array} offers The extension negotiation offers * @return {Object} Accepted configuration * @private */ acceptAsServer(offers) { const opts = this._options; const accepted = offers.find((params) => { if (opts.serverNoContextTakeover === false && params.server_no_context_takeover || params.server_max_window_bits && (opts.serverMaxWindowBits === false || typeof opts.serverMaxWindowBits === "number" && opts.serverMaxWindowBits > params.server_max_window_bits) || typeof opts.clientMaxWindowBits === "number" && !params.client_max_window_bits) { return false; } return true; }); if (!accepted) { throw new Error("None of the extension offers can be accepted"); } if (opts.serverNoContextTakeover) { accepted.server_no_context_takeover = true; } if (opts.clientNoContextTakeover) { accepted.client_no_context_takeover = true; } if (typeof opts.serverMaxWindowBits === "number") { accepted.server_max_window_bits = opts.serverMaxWindowBits; } if (typeof opts.clientMaxWindowBits === "number") { accepted.client_max_window_bits = opts.clientMaxWindowBits; } else if (accepted.client_max_window_bits === true || opts.clientMaxWindowBits === false) { delete accepted.client_max_window_bits; } return accepted; } /** * Accept the extension negotiation response. * * @param {Array} response The extension negotiation response * @return {Object} Accepted configuration * @private */ acceptAsClient(response) { const params = response[0]; if (this._options.clientNoContextTakeover === false && params.client_no_context_takeover) { throw new Error('Unexpected parameter "client_no_context_takeover"'); } if (!params.client_max_window_bits) { if (typeof this._options.clientMaxWindowBits === "number") { params.client_max_window_bits = this._options.clientMaxWindowBits; } } else if (this._options.clientMaxWindowBits === false || typeof this._options.clientMaxWindowBits === "number" && params.client_max_window_bits > this._options.clientMaxWindowBits) { throw new Error( 'Unexpected or invalid parameter "client_max_window_bits"' ); } return params; } /** * Normalize parameters. * * @param {Array} configurations The extension negotiation offers/reponse * @return {Array} The offers/response with normalized parameters * @private */ normalizeParams(configurations) { configurations.forEach((params) => { Object.keys(params).forEach((key) => { let value = params[key]; if (value.length > 1) { throw new Error(`Parameter "${key}" must have only a single value`); } value = value[0]; if (key === "client_max_window_bits") { if (value !== true) { const num = +value; if (!Number.isInteger(num) || num < 8 || num > 15) { throw new TypeError( `Invalid value for parameter "${key}": ${value}` ); } value = num; } else if (!this._isServer) { throw new TypeError( `Invalid value for parameter "${key}": ${value}` ); } } else if (key === "server_max_window_bits") { const num = +value; if (!Number.isInteger(num) || num < 8 || num > 15) { throw new TypeError( `Invalid value for parameter "${key}": ${value}` ); } value = num; } else if (key === "client_no_context_takeover" || key === "server_no_context_takeover") { if (value !== true) { throw new TypeError( `Invalid value for parameter "${key}": ${value}` ); } } else { throw new Error(`Unknown parameter "${key}"`); } params[key] = value; }); }); return configurations; } /** * Decompress data. Concurrency limited. * * @param {Buffer} data Compressed data * @param {Boolean} fin Specifies whether or not this is the last fragment * @param {Function} callback Callback * @public */ decompress(data, fin, callback) { zlibLimiter.add((done) => { this._decompress(data, fin, (err, result) => { done(); callback(err, result); }); }); } /** * Compress data. Concurrency limited. * * @param {(Buffer|String)} data Data to compress * @param {Boolean} fin Specifies whether or not this is the last fragment * @param {Function} callback Callback * @public */ compress(data, fin, callback) { zlibLimiter.add((done) => { this._compress(data, fin, (err, result) => { done(); callback(err, result); }); }); } /** * Decompress data. * * @param {Buffer} data Compressed data * @param {Boolean} fin Specifies whether or not this is the last fragment * @param {Function} callback Callback * @private */ _decompress(data, fin, callback) { const endpoint = this._isServer ? "client" : "server"; if (!this._inflate) { const key = `${endpoint}_max_window_bits`; const windowBits = typeof this.params[key] !== "number" ? zlib.Z_DEFAULT_WINDOWBITS : this.params[key]; this._inflate = zlib.createInflateRaw({ ...this._options.zlibInflateOptions, windowBits }); this._inflate[kPerMessageDeflate] = this; this._inflate[kTotalLength] = 0; this._inflate[kBuffers] = []; this._inflate.on("error", inflateOnError); this._inflate.on("data", inflateOnData); } this._inflate[kCallback] = callback; this._inflate.write(data); if (fin) this._inflate.write(TRAILER); this._inflate.flush(() => { const err = this._inflate[kError]; if (err) { this._inflate.close(); this._inflate = null; callback(err); return; } const data2 = bufferUtil.concat( this._inflate[kBuffers], this._inflate[kTotalLength] ); if (this._inflate._readableState.endEmitted) { this._inflate.close(); this._inflate = null; } else { this._inflate[kTotalLength] = 0; this._inflate[kBuffers] = []; if (fin && this.params[`${endpoint}_no_context_takeover`]) { this._inflate.reset(); } } callback(null, data2); }); } /** * Compress data. * * @param {(Buffer|String)} data Data to compress * @param {Boolean} fin Specifies whether or not this is the last fragment * @param {Function} callback Callback * @private */ _compress(data, fin, callback) { const endpoint = this._isServer ? "server" : "client"; if (!this._deflate) { const key = `${endpoint}_max_window_bits`; const windowBits = typeof this.params[key] !== "number" ? zlib.Z_DEFAULT_WINDOWBITS : this.params[key]; this._deflate = zlib.createDeflateRaw({ ...this._options.zlibDeflateOptions, windowBits }); this._deflate[kTotalLength] = 0; this._deflate[kBuffers] = []; this._deflate.on("data", deflateOnData); } this._deflate[kCallback] = callback; this._deflate.write(data); this._deflate.flush(zlib.Z_SYNC_FLUSH, () => { if (!this._deflate) { return; } let data2 = bufferUtil.concat( this._deflate[kBuffers], this._deflate[kTotalLength] ); if (fin) data2 = data2.slice(0, data2.length - 4); this._deflate[kCallback] = null; this._deflate[kTotalLength] = 0; this._deflate[kBuffers] = []; if (fin && this.params[`${endpoint}_no_context_takeover`]) { this._deflate.reset(); } callback(null, data2); }); } }; module2.exports = PerMessageDeflate; function deflateOnData(chunk) { this[kBuffers].push(chunk); this[kTotalLength] += chunk.length; } function inflateOnData(chunk) { this[kTotalLength] += chunk.length; if (this[kPerMessageDeflate]._maxPayload < 1 || this[kTotalLength] <= this[kPerMessageDeflate]._maxPayload) { this[kBuffers].push(chunk); return; } this[kError] = new RangeError("Max payload size exceeded"); this[kError].code = "WS_ERR_UNSUPPORTED_MESSAGE_LENGTH"; this[kError][kStatusCode] = 1009; this.removeListener("data", inflateOnData); this.reset(); } function inflateOnError(err) { this[kPerMessageDeflate]._inflate = null; err[kStatusCode] = 1007; this[kCallback](err); } } }); // node_modules/.pnpm/ws@8.11.0/node_modules/ws/lib/validation.js var require_validation = __commonJS({ "node_modules/.pnpm/ws@8.11.0/node_modules/ws/lib/validation.js"(exports2, module2) { "use strict"; var tokenChars = [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 0 - 15 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 16 - 31 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, // 32 - 47 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, // 48 - 63 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 64 - 79 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, // 80 - 95 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 96 - 111 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0 // 112 - 127 ]; function isValidStatusCode(code) { return code >= 1e3 && code <= 1014 && code !== 1004 && code !== 1005 && code !== 1006 || code >= 3e3 && code <= 4999; } function _isValidUTF8(buf) { const len = buf.length; let i = 0; while (i < len) { if ((buf[i] & 128) === 0) { i++; } else if ((buf[i] & 224) === 192) { if (i + 1 === len || (buf[i + 1] & 192) !== 128 || (buf[i] & 254) === 192) { return false; } i += 2; } else if ((buf[i] & 240) === 224) { if (i + 2 >= len || (buf[i + 1] & 192) !== 128 || (buf[i + 2] & 192) !== 128 || buf[i] === 224 && (buf[i + 1] & 224) === 128 || // Overlong buf[i] === 237 && (buf[i + 1] & 224) === 160) { return false; } i += 3; } else if ((buf[i] & 248) === 240) { if (i + 3 >= len || (buf[i + 1] & 192) !== 128 || (buf[i + 2] & 192) !== 128 || (buf[i + 3] & 192) !== 128 || buf[i] === 240 && (buf[i + 1] & 240) === 128 || // Overlong buf[i] === 244 && buf[i + 1] > 143 || buf[i] > 244) { return false; } i += 4; } else { return false; } } return true; } module2.exports = { isValidStatusCode, isValidUTF8: _isValidUTF8, tokenChars }; if (!process.env.WS_NO_UTF_8_VALIDATE) { try { const isValidUTF8 = require("utf-8-validate"); module2.exports.isValidUTF8 = function(buf) { return buf.length < 150 ? _isValidUTF8(buf) : isValidUTF8(buf); }; } catch (e) { } } } }); // node_modules/.pnpm/ws@8.11.0/node_modules/ws/lib/receiver.js var require_receiver = __commonJS({ "node_modules/.pnpm/ws@8.11.0/node_modules/ws/lib/receiver.js"(exports2, module2) { "use strict"; var { Writable } = require("stream"); var PerMessageDeflate = require_permessage_deflate(); var { BINARY_TYPES, EMPTY_BUFFER, kStatusCode, kWebSocket } = require_constants(); var { concat, toArrayBuffer, unmask } = require_buffer_util(); var { isValidStatusCode, isValidUTF8 } = require_validation(); var GET_INFO = 0; var GET_PAYLOAD_LENGTH_16 = 1; var GET_PAYLOAD_LENGTH_64 = 2; var GET_MASK = 3; var GET_DATA = 4; var INFLATING = 5; var Receiver = class extends Writable { /** * Creates a Receiver instance. * * @param {Object} [options] Options object * @param {String} [options.binaryType=nodebuffer] The type for binary data * @param {Object} [options.extensions] An object containing the negotiated * extensions * @param {Boolean} [options.isServer=false] Specifies whether to operate in * client or server mode * @param {Number} [options.maxPayload=0] The maximum allowed message length * @param {Boolean} [options.skipUTF8Validation=false] Specifies whether or * not to skip UTF-8 validation for text and close messages */ constructor(options = {}) { super(); this._binaryType = options.binaryType || BINARY_TYPES[0]; this._extensions = options.extensions || {}; this._isServer = !!options.isServer; this._maxPayload = options.maxPayload | 0; this._skipUTF8Validation = !!options.skipUTF8Validation; this[kWebSocket] = void 0; this._bufferedBytes = 0; this._buffers = []; this._compressed = false; this._payloadLength = 0; this._mask = void 0; this._fragmented = 0; this._masked = false; this._fin = false; this._opcode = 0; this._totalPayloadLength = 0; this._messageLength = 0; this._fragments = []; this._state = GET_INFO; this._loop = false; } /** * Implements `Writable.prototype._write()`. * * @param {Buffer} chunk The chunk of data to write * @param {String} encoding The character encoding of `chunk` * @param {Function} cb Callback * @private */ _write(chunk, encoding, cb) { if (this._opcode === 8 && this._state == GET_INFO) return cb(); this._bufferedBytes += chunk.length; this._buffers.push(chunk); this.startLoop(cb); } /** * Consumes `n` bytes from the buffered data. * * @param {Number} n The number of bytes to consume * @return {Buffer} The consumed bytes * @private */ consume(n) { this._bufferedBytes -= n; if (n === this._buffers[0].length) return this._buffers.shift(); if (n < this._buffers[0].length) { const buf = this._buffers[0]; this._buffers[0] = buf.slice(n); return buf.slice(0, n); } const dst = Buffer.allocUnsafe(n); do { const buf = this._buffers[0]; const offset = dst.length - n; if (n >= buf.length) { dst.set(this._buffers.shift(), offset); } else { dst.set(new Uint8Array(buf.buffer, buf.byteOffset, n), offset); this._buffers[0] = buf.slice(n); } n -= buf.length; } while (n > 0); return dst; } /** * Starts the parsing loop. * * @param {Function} cb Callback * @private */ startLoop(cb) { let err; this._loop = true; do { switch (this._state) { case GET_INFO: err = this.getInfo(); break; case GET_PAYLOAD_LENGTH_16: err = this.getPayloadLength16(); break; case GET_PAYLOAD_LENGTH_64: err = this.getPayloadLength64(); break; case GET_MASK: this.getMask(); break; case GET_DATA: err = this.getData(cb); break; default: this._loop = false; return; } } while (this._loop); cb(err); } /** * Reads the first two bytes of a frame. * * @return {(RangeError|undefined)} A possible error * @private */ getInfo() { if (this._bufferedBytes < 2) { this._loop = false; return; } const buf = this.consume(2); if ((buf[0] & 48) !== 0) { this._loop = false; return error( RangeError, "RSV2 and RSV3 must be clear", true, 1002, "WS_ERR_UNEXPECTED_RSV_2_3" ); } const compressed = (buf[0] & 64) === 64; if (compressed && !this._extensions[PerMessageDeflate.extensionName]) { this._loop = false; return error( RangeError, "RSV1 must be clear", true, 1002, "WS_ERR_UNEXPECTED_RSV_1" ); } this._fin = (buf[0] & 128) === 128; this._opcode = buf[0] & 15; this._payloadLength = buf[1] & 127; if (this._opcode === 0) { if (compressed) { this._loop = false; return error( RangeError, "RSV1 must be clear", true, 1002, "WS_ERR_UNEXPECTED_RSV_1" ); } if (!this._fragmented) { this._loop = false; return error( RangeError, "invalid opcode 0", true, 1002, "WS_ERR_INVALID_OPCODE" ); } this._opcode = this._fragmented; } else if (this._opcode === 1 || this._opcode === 2) { if (this._fragmented) { this._loop = false; return error( RangeError, `invalid opcode ${this._opcode}`, true, 1002, "WS_ERR_INVALID_OPCODE" ); } this._compressed = compressed; } else if (this._opcode > 7 && this._opcode < 11) { if (!this._fin) { this._loop = false; return error( RangeError, "FIN must be set", true, 1002, "WS_ERR_EXPECTED_FIN" ); } if (compressed) { this._loop = false; return error( RangeError, "RSV1 must be clear", true, 1002, "WS_ERR_UNEXPECTED_RSV_1" ); } if (this._payloadLength > 125) { this._loop = false; return error( RangeError, `invalid payload length ${this._payloadLength}`, true, 1002, "WS_ERR_INVALID_CONTROL_PAYLOAD_LENGTH" ); } } else { this._loop = false; return error( RangeError, `invalid opcode ${this._opcode}`, true, 1002, "WS_ERR_INVALID_OPCODE" ); } if (!this._fin && !this._fragmented) this._fragmented = this._opcode; this._masked = (buf[1] & 128) === 128; if (this._isServer) { if (!this._masked) { this._loop = false; return error( RangeError, "MASK must be set", true, 1002, "WS_ERR_EXPECTED_MASK" ); } } else if (this._masked) { this._loop = false; return error( RangeError, "MASK must be clear", true, 1002, "WS_ERR_UNEXPECTED_MASK" ); } if (this._payloadLength === 126) this._state = GET_PAYLOAD_LENGTH_16; else if (this._payloadLength === 127) this._state = GET_PAYLOAD_LENGTH_64; else return this.haveLength(); } /** * Gets extended payload length (7+16). * * @return {(RangeError|undefined)} A possible error * @private */ getPayloadLength16() { if (this._bufferedBytes < 2) { this._loop = false; return; } this._payloadLength = this.consume(2).readUInt16BE(0); return this.haveLength(); } /** * Gets extended payload length (7+64). * * @return {(RangeError|undefined)} A possible error * @private */ getPayloadLength64() { if (this._bufferedBytes < 8) { this._loop = false; return; } const buf = this.consume(8); const num = buf.readUInt32BE(0); if (num > Math.pow(2, 53 - 32) - 1) { this._loop = false; return error( RangeError, "Unsupported WebSocket frame: payload length > 2^53 - 1", false, 1009, "WS_ERR_UNSUPPORTED_DATA_PAYLOAD_LENGTH" ); } this._payloadLength = num * Math.pow(2, 32) + buf.readUInt32BE(4); return this.haveLength(); } /** * Payload length has been read. * * @return {(RangeError|undefined)} A possible error * @private */ haveLength() { if (this._payloadLength && this._opcode < 8) { this._totalPayloadLength += this._payloadLength; if (this._totalPayloadLength > this._maxPayload && this._maxPayload > 0) { this._loop = false; return error( RangeError, "Max payload size exceeded", false, 1009, "WS_ERR_UNSUPPORTED_MESSAGE_LENGTH" ); } } if (this._masked) this._state = GET_MASK; else this._state = GET_DATA; } /** * Reads mask bytes. * * @private */ getMask() { if (this._bufferedBytes < 4) { this._loop = false; return; } this._mask = this.consume(4); this._state = GET_DATA; } /** * Reads data bytes. * * @param {Function} cb Callback * @return {(Error|RangeError|undefined)} A possible error * @private */ getData(cb) { let data = EMPTY_BUFFER; if (this._payloadLength) { if (this._bufferedBytes < this._payloadLength) { this._loop = false; return; } data = this.consume(this._payloadLength); if (this._masked && (this._mask[0] | this._mask[1] | this._mask[2] | this._mask[3]) !== 0) { unmask(data, this._mask); } } if (this._opcode > 7) return this.controlMessage(data); if (this._compressed) { this._state = INFLATING; this.decompress(data, cb); return; } if (data.length) { this._messageLength = this._totalPayloadLength; this._fragments.push(data); } return this.dataMessage(); } /** * Decompresses data. * * @param {Buffer} data Compressed data * @param {Function} cb Callback * @private */ decompress(data, cb) { const perMessageDeflate = this._extensions[PerMessageDeflate.extensionName]; perMessageDeflate.decompress(data, this._fin, (err, buf) => { if (err) return cb(err); if (buf.length) { this._messageLength += buf.length; if (this._messageLength > this._maxPayload && this._maxPayload > 0) { return cb( error( RangeError, "Max payload size exceeded", false, 1009, "WS_ERR_UNSUPPORTED_MESSAGE_LENGTH" ) ); } this._fragments.push(buf); } const er = this.dataMessage(); if (er) return cb(er); this.startLoop(cb); }); } /** * Handles a data message. * * @return {(Error|undefined)} A possible error * @private */ dataMessage() { if (this._fin) { const messageLength = this._messageLength; const fragments = this._fragments; this._totalPayloadLength = 0; this._messageLength = 0; this._fragmented = 0; this._fragments = []; if (this._opcode === 2) { let data; if (this._binaryType === "nodebuffer") { data = concat(fragments, messageLength); } else if (this._binaryType === "arraybuffer") { data = toArrayBuffer(concat(fragments, messageLength)); } else { data = fragments; } this.emit("message", data, true); } else { const buf = concat(fragments, messageLength); if (!this._skipUTF8Validation && !isValidUTF8(buf)) { this._loop = false; return error( Error, "invalid UTF-8 sequence", true, 1007, "WS_ERR_INVALID_UTF8" ); } this.emit("message", buf, false); } } this._state = GET_INFO; } /** * Handles a control message. * * @param {Buffer} data Data to handle * @return {(Error|RangeError|undefined)} A possible error * @private */ controlMessage(data) { if (this._opcode === 8) { this._loop = false; if (data.length === 0) { this.emit("conclude", 1005, EMPTY_BUFFER); this.end(); } else if (data.length === 1) { return error( RangeError, "invalid payload length 1", true, 1002, "WS_ERR_INVALID_CONTROL_PAYLOAD_LENGTH" ); } else { const code = data.readUInt16BE(0); if (!isValidStatusCode(code)) { return error( RangeError, `invalid status code ${code}`, true, 1002, "WS_ERR_INVALID_CLOSE_CODE" ); } const buf = data.slice(2); if (!this._skipUTF8Validation && !isValidUTF8(buf)) { return error( Error, "invalid UTF-8 sequence", true, 1007, "WS_ERR_INVALID_UTF8" ); } this.emit("conclude", code, buf); this.end(); } } else if (this._opcode === 9) { this.emit("ping", data); } else { this.emit("pong", data); } this._state = GET_INFO; } }; module2.exports = Receiver; function error(ErrorCtor, message, prefix, statusCode, errorCode) { const err = new ErrorCtor( prefix ? `Invalid WebSocket frame: ${message}` : message ); Error.captureStackTrace(err, error); err.code = errorCode; err[kStatusCode] = statusCode; return err; } } }); // node_modules/.pnpm/ws@8.11.0/node_modules/ws/lib/sender.js var require_sender = __commonJS({ "node_modules/.pnpm/ws@8.11.0/node_modules/ws/lib/sender.js"(exports2, module2) { "use strict"; var net = require("net"); var tls = require("tls"); var { randomFillSync } = require("crypto"); var PerMessageDeflate = require_permessage_deflate(); var { EMPTY_BUFFER } = require_constants(); var { isValidStatusCode } = require_validation(); var { mask: applyMask, toBuffer } = require_buffer_util(); var kByteLength = Symbol("kByteLength"); var maskBuffer = Buffer.alloc(4); var Sender = class _Sender { /** * Creates a Sender instance. * * @param {(net.Socket|tls.Socket)} socket The connection socket * @param {Object} [extensions] An object containing the negotiated extensions * @param {Function} [generateMask] The function used to generate the masking * key */ constructor(socket, extensions, generateMask) { this._extensions = extensions || {}; if (generateMask) { this._generateMask = generateMask; this._maskBuffer = Buffer.alloc(4); } this._socket = socket; this._firstFragment = true; this._compress = false; this._bufferedBytes = 0; this._deflating = false; this._queue = []; } /** * Frames a piece of data according to the HyBi WebSocket protocol. * * @param {(Buffer|String)} data The data to frame * @param {Object} options Options object * @param {Boolean} [options.fin=false] Specifies whether or not to set the * FIN bit * @param {Function} [options.generateMask] The function used to generate the * masking key * @param {Boolean} [options.mask=false] Specifies whether or not to mask * `data` * @param {Buffer} [options.maskBuffer] The buffer used to store the masking * key * @param {Number} options.opcode The opcode * @param {Boolean} [options.readOnly=false] Specifies whether `data` can be * modified * @param {Boolean} [options.rsv1=false] Specifies whether or not to set the * RSV1 bit * @return {(Buffer|String)[]} The framed data * @public */ static frame(data, options) { let mask; let merge = false; let offset = 2; let skipMasking = false; if (options.mask) { mask = options.maskBuffer || maskBuffer; if (options.generateMask) { options.generateMask(mask); } else { randomFillSync(mask, 0, 4); } skipMasking = (mask[0] | mask[1] | mask[2] | mask[3]) === 0; offset = 6; } let dataLength; if (typeof data === "string") { if ((!options.mask || skipMasking) && options[kByteLength] !== void 0) { dataLength = options[kByteLength]; } else { data = Buffer.from(data); dataLength = data.length; } } else { dataLength = data.length; merge = options.mask && options.readOnly && !skipMasking; } let payloadLength = dataLength; if (dataLength >= 65536) { offset += 8; payloadLength = 127; } else if (dataLength > 125) { offset += 2; payloadLength = 126; } const target = Buffer.allocUnsafe(merge ? dataLength + offset : offset); target[0] = options.fin ? options.opcode | 128 : options.opcode; if (options.rsv1) target[0] |= 64; target[1] = payloadLength; if (payloadLength === 126) { target.writeUInt16BE(dataLength, 2); } else if (payloadLength === 127) { target[2] = target[3] = 0; target.writeUIntBE(dataLength, 4, 6); } if (!options.mask) return [target, data]; target[1] |= 128; target[offset - 4] = mask[0]; target[offset - 3] = mask[1]; target[offset - 2] = mask[2]; target[offset - 1] = mask[3]; if (skipMasking) return [target, data]; if (merge) { applyMask(data, mask, target, offset, dataLength); return [target]; } applyMask(data, mask, data, 0, dataLength); return [target, data]; } /** * Sends a close message to the other peer. * * @param {Number} [code] The status code component of the body * @param {(String|Buffer)} [data] The message component of the body * @param {Boolean} [mask=false] Specifies whether or not to mask the message * @param {Function} [cb] Callback * @public */ close(code, data, mask, cb) { let buf; if (code === void 0) { buf = EMPTY_BUFFER; } else if (typeof code !== "number" || !isValidStatusCode(code)) { throw new TypeError("First argument must be a valid error code number"); } else if (data === void 0 || !data.length) { buf = Buffer.allocUnsafe(2); buf.writeUInt16BE(code, 0); } else { const length = Buffer.byteLength(data); if (length > 123) { throw new RangeError("The message must not be greater than 123 bytes"); } buf = Buffer.allocUnsafe(2 + length); buf.writeUInt16BE(code, 0); if (typeof data === "string") { buf.write(data, 2); } else { buf.set(data, 2); } } const options = { [kByteLength]: buf.length, fin: true, generateMask: this._generateMask, mask, maskBuffer: this._maskBuffer, opcode: 8, readOnly: false, rsv1: false }; if (this._deflating) { this.enqueue([this.dispatch, buf, false, options, cb]); } else { this.sendFrame(_Sender.frame(buf, options), cb); } } /** * Sends a ping message to the other peer. * * @param {*} data The message to send * @param {Boolean} [mask=false] Specifies whether or not to mask `data` * @param {Function} [cb] Callback * @public */ ping(data, mask, cb) { let byteLength; let readOnly; if (typeof data === "string") { byteLength = Buffer.byteLength(data); readOnly = false; } else { data = toBuffer(data); byteLength = data.length; readOnly = toBuffer.readOnly; } if (byteLength > 125) { throw new RangeError("The data size must not be greater than 125 bytes"); } const options = { [kByteLength]: byteLength, fin: true, generateMask: this._generateMask, mask, maskBuffer: this._maskBuffer, opcode: 9, readOnly, rsv1: false }; if (this._deflating) { this.enqueue([this.dispatch, data, false, options, cb]); } else { this.sendFrame(_Sender.frame(data, options), cb); } } /** * Sends a pong message to the other peer. * * @param {*} data The message to send * @param {Boolean} [mask=false] Specifies whether or not to mask `data` * @param {Function} [cb] Callback * @public */ pong(data, mask, cb) { let byteLength; let readOnly; if (typeof data === "string") { byteLength = Buffer.byteLength(data); readOnly = false; } else { data = toBuffer(data); byteLength = data.length; readOnly = toBuffer.readOnly; } if (byteLength > 125) { throw new RangeError("The data size must not be greater than 125 bytes"); } const options = { [kByteLength]: byteLength, fin: true, generateMask: this._generateMask, mask, maskBuffer: this._maskBuffer, opcode: 10, readOnly, rsv1: false }; if (this._deflating) { this.enqueue([this.dispatch, data, false, options, cb]); } else { this.sendFrame(_Sender.frame(data, options), cb); } } /** * Sends a data message to the other peer. * * @param {*} data The message to send * @param {Object} options Options object * @param {Boolean} [options.binary=false] Specifies whether `data` is binary * or text * @param {Boolean} [options.compress=false] Specifies whether or not to * compress `data` * @param {Boolean} [options.fin=false] Specifies whether the fragment is the * last one * @param {Boolean} [options.mask=false] Specifies whether or not to mask * `data` * @param {Function} [cb] Callback * @public */ send(data, options, cb) { const perMessageDeflate = this._extensions[PerMessageDeflate.extensionName]; let opcode = options.binary ? 2 : 1; let rsv1 = options.compress; let byteLength; let readOnly; if (typeof data === "string") { byteLength = Buffer.byteLength(data); readOnly = false; } else { data = toBuffer(data); byteLength = data.length; readOnly = toBuffer.readOnly; } if (this._firstFragment) { this._firstFragment = false; if (rsv1 && perMessageDeflate && perMessageDeflate.params[perMessageDeflate._isServer ? "server_no_context_takeover" : "client_no_context_takeover"]) { rsv1 = byteLength >= perMessageDeflate._threshold; } this._compress = rsv1; } else { rsv1 = false; opcode = 0; } if (options.fin) this._firstFragment = true; if (perMessageDeflate) { const opts = { [kByteLength]: byteLength, fin: options.fin, generateMask: this._generateMask, mask: options.mask, maskBuffer: this._maskBuffer, opcode, readOnly, rsv1 }; if (this._deflating) { this.enqueue([this.dispatch, data, this._compress, opts, cb]); } else { this.dispatch(data, this._compress, opts, cb); } } else { this.sendFrame( _Sender.frame(data, { [kByteLength]: byteLength, fin: options.fin, generateMask: this._generateMask, mask: options.mask, maskBuffer: this._maskBuffer, opcode, readOnly, rsv1: false }), cb ); } } /** * Dispatches a message. * * @param {(Buffer|String)} data The message to send * @param {Boolean} [compress=false] Specifies whether or not to compress * `data` * @param {Object} options Options object * @param {Boolean} [options.fin=false] Specifies whether or not to set the * FIN bit * @param {Function} [options.generateMask] The function used to generate the * masking key * @param {Boolean} [options.mask=false] Specifies whether or not to mask * `data` * @param {Buffer} [options.maskBuffer] The buffer used to store the masking * key * @param {Number} options.opcode The opcode * @param {Boolean} [options.readOnly=false] Specifies whether `data` can be * modified * @param {Boolean} [options.rsv1=false] Specifies whether or not to set the * RSV1 bit * @param {Function} [cb] Callback * @private */ dispatch(data, compress, options, cb) { if (!compress) { this.sendFrame(_Sender.frame(data, options), cb); return; } const perMessageDeflate = this._extensions[PerMessageDeflate.extensionName]; this._bufferedBytes += options[kByteLength]; this._deflating = true; perMessageDeflate.compress(data, options.fin, (_, buf) => { if (this._socket.destroyed) { const err = new Error( "The socket was closed while data was being compressed" ); if (typeof cb === "function") cb(err); for (let i = 0; i < this._queue.length; i++) { const params = this._queue[i]; const callback = params[params.length - 1]; if (typeof callback === "function") callback(err); } return; } this._bufferedBytes -= options[kByteLength]; this._deflating = false; options.readOnly = false; this.sendFrame(_Sender.frame(buf, options), cb); this.dequeue(); }); } /** * Executes queued send operations. * * @private */ dequeue() { while (!this._deflating && this._queue.length) { const params = this._queue.shift(); this._bufferedBytes -= params[3][kByteLength]; Reflect.apply(params[0], this, params.slice(1)); } } /** * Enqueues a send operation. * * @param {Array} params Send operation parameters. * @private */ enqueue(params) { this._bufferedBytes += params[3][kByteLength]; this._queue.push(params); } /** * Sends a frame. * * @param {Buffer[]} list The frame to send * @param {Function} [cb] Callback * @private */ sendFrame(list, cb) { if (list.length === 2) { this._socket.cork(); this._socket.write(list[0]); this._socket.write(list[1], cb); this._socket.uncork(); } else { this._socket.write(list[0], cb); } } }; module2.exports = Sender; } }); // node_modules/.pnpm/ws@8.11.0/node_modules/ws/lib/event-target.js var require_event_target = __commonJS({ "node_modules/.pnpm/ws@8.11.0/node_modules/ws/lib/event-target.js"(exports2, module2) { "use strict"; var { kForOnEventAttribute, kListener } = require_constants(); var kCode = Symbol("kCode"); var kData = Symbol("kData"); var kError = Symbol("kError"); var kMessage = Symbol("kMessage"); var kReason = Symbol("kReason"); var kTarget = Symbol("kTarget"); var kType = Symbol("kType"); var kWasClean = Symbol("kWasClean"); var Event = class { /** * Create a new `Event`. * * @param {String} type The name of the event * @throws {TypeError} If the `type` argument is not specified */ constructor(type) { this[kTarget] = null; this[kType] = type; } /** * @type {*} */ get target() { return this[kTarget]; } /** * @type {String} */ get type() { return this[kType]; } }; Object.defineProperty(Event.prototype, "target", { enumerable: true }); Object.defineProperty(Event.prototype, "type", { enumerable: true }); var CloseEvent = class extends Event { /** * Create a new `CloseEvent`. * * @param {String} type The name of the event * @param {Object} [options] A dictionary object that allows for setting * attributes via object members of the same name * @param {Number} [options.code=0] The status code explaining why the * connection was closed * @param {String} [options.reason=''] A human-readable string explaining why * the connection was closed * @param {Boolean} [options.wasClean=false] Indicates whether or not the * connection was cleanly closed */ constructor(type, options = {}) { super(type); this[kCode] = options.code === void 0 ? 0 : options.code; this[kReason] = options.reason === void 0 ? "" : options.reason; this[kWasClean] = options.wasClean === void 0 ? false : options.wasClean; } /** * @type {Number} */ get code() { return this[kCode]; } /** * @type {String} */ get reason() { return this[kReason]; } /** * @type {Boolean} */ get wasClean() { return this[kWasClean]; } }; Object.defineProperty(CloseEvent.prototype, "code", { enumerable: true }); Object.defineProperty(CloseEvent.prototype, "reason", { enumerable: true }); Object.defineProperty(CloseEvent.prototype, "wasClean", { enumerable: true }); var ErrorEvent = class extends Event { /** * Create a new `ErrorEvent`. * * @param {String} type The name of the event * @param {Object} [options] A dictionary object that allows for setting * attributes via object members of the same name * @param {*} [options.error=null] The error that generated this event * @param {String} [options.message=''] The error message */ constructor(type, options = {}) { super(type); this[kError] = options.error === void 0 ? null : options.error; this[kMessage] = options.message === void 0 ? "" : options.message; } /** * @type {*} */ get error() { return this[kError]; } /** * @type {String} */ get message() { return this[kMessage]; } }; Object.defineProperty(ErrorEvent.prototype, "error", { enumerable: true }); Object.defineProperty(ErrorEvent.prototype, "message", { enumerable: true }); var MessageEvent = class extends Event { /** * Create a new `MessageEvent`. * * @param {String} type The name of the event * @param {Object} [options] A dictionary object that allows for setting * attributes via object members of the same name * @param {*} [options.data=null] The message content */ constructor(type, options = {}) { super(type); this[kData] = options.data === void 0 ? null : options.data; } /** * @type {*} */ get data() { return this[kData]; } }; Object.defineProperty(MessageEvent.prototype, "data", { enumerable: true }); var EventTarget = { /** * Register an event listener. * * @param {String} type A string representing the event type to listen for * @param {(Function|Object)} handler The listener to add * @param {Object} [options] An options object specifies characteristics about * the event listener * @param {Boolean} [options.once=false] A `Boolean` indicating that the * listener should be invoked at most once after being added. If `true`, * the listener would be automatically removed when invoked. * @public */ addEventListener(type, handler, options = {}) { for (const listener of this.listeners(type)) { if (!options[kForOnEventAttribute] && listener[kListener] === handler && !listener[kForOnEventAttribute]) { return; } } let wrapper; if (type === "message") { wrapper = function onMessage(data, isBinary) { const event = new MessageEvent("message", { data: isBinary ? data : data.toString() }); event[kTarget] = this; callListener(handler, this, event); }; } else if (type === "close") { wrapper = function onClose(code, message) { const event = new CloseEvent("close", { code, reason: message.toString(), wasClean: this._closeFrameReceived && this._closeFrameSent }); event[kTarget] = this; callListener(handler, this, event); }; } else if (type === "error") { wrapper = function onError(error) { const event = new ErrorEvent("error", { error, message: error.message }); event[kTarget] = this; callListener(handler, this, event); }; } else if (type === "open") { wrapper = function onOpen() { const event = new Event("open"); event[kTarget] = this; callListener(handler, this, event); }; } else { return; } wrapper[kForOnEventAttribute] = !!options[kForOnEventAttribute]; wrapper[kListener] = handler; if (options.once) { this.once(type, wrapper); } else { this.on(type, wrapper); } }, /** * Remove an event listener. * * @param {String} type A string representing the event type to remove * @param {(Function|Object)} handler The listener to remove * @public */ removeEventListener(type, handler) { for (const listener of this.listeners(type)) { if (listener[kListener] === handler && !listener[kForOnEventAttribute]) { this.removeListener(type, listener); break; } } } }; module2.exports = { CloseEvent, ErrorEvent, Event, EventTarget, MessageEvent }; function callListener(listener, thisArg, event) { if (typeof listener === "object" && listener.handleEvent) { listener.handleEvent.call(listener, event); } else { listener.call(thisArg, event); } } } }); // node_modules/.pnpm/ws@8.11.0/node_modules/ws/lib/extension.js var require_extension = __commonJS({ "node_modules/.pnpm/ws@8.11.0/node_modules/ws/lib/extension.js"(exports2, module2) { "use strict"; var { tokenChars } = require_validation(); function push(dest, name, elem) { if (dest[name] === void 0) dest[name] = [elem]; else dest[name].push(elem); } function parse(header) { const offers = /* @__PURE__ */ Object.create(null); let params = /* @__PURE__ */ Object.create(null); let mustUnescape = false; let isEscaping = false; let inQuotes = false; let extensionName; let paramName; let start = -1; let code = -1; let end = -1; let i = 0; for (; i < header.length; i++) { code = header.charCodeAt(i); if (extensionName === void 0) { if (end === -1 && tokenChars[code] === 1) { if (start === -1) start = i; } else if (i !== 0 && (code === 32 || code === 9)) { if (end === -1 && start !== -1) end = i; } else if (code === 59 || code === 44) { if (start === -1) { throw new SyntaxError(`Unexpected character at index ${i}`); } if (end === -1) end = i; const name = header.slice(start, end); if (code === 44) { push(offers, name, params); params = /* @__PURE__ */ Object.create(null); } else { extensionName = name; } start = end = -1; } else { throw new SyntaxError(`Unexpected character at index ${i}`); } } else if (paramName === void 0) { if (end === -1 && tokenChars[code] === 1) { if (start === -1) start = i; } else if (code === 32 || code === 9) { if (end === -1 && start !== -1) end = i; } else if (code === 59 || code === 44) { if (start === -1) { throw new SyntaxError(`Unexpected character at index ${i}`); } if (end === -1) end = i; push(params, header.slice(start, end), true); if (code === 44) { push(offers, extensionName, params); params = /* @__PURE__ */ Object.create(null); extensionName = void 0; } start = end = -1; } else if (code === 61 && start !== -1 && end === -1) { paramName = header.slice(start, i); start = end = -1; } else { throw new SyntaxError(`Unexpected character at index ${i}`); } } else { if (isEscaping) { if (tokenChars[code] !== 1) { throw new SyntaxError(`Unexpected character at index ${i}`); } if (start === -1) start = i; else if (!mustUnescape) mustUnescape = true; isEscaping = false; } else if (inQuotes) { if (tokenChars[code] === 1) { if (start === -1) start = i; } else if (code === 34 && start !== -1) { inQuotes = false; end = i; } else if (code === 92) { isEscaping = true; } else { throw new SyntaxError(`Unexpected character at index ${i}`); } } else if (code === 34 && header.charCodeAt(i - 1) === 61) { inQuotes = true; } else if (end === -1 && tokenChars[code] === 1) { if (start === -1) start = i; } else if (start !== -1 && (code === 32 || code === 9)) { if (end === -1) end = i; } else if (code === 59 || code === 44) { if (start === -1) { throw new SyntaxError(`Unexpected character at index ${i}`); } if (end === -1) end = i; let value = header.slice(start, end); if (mustUnescape) { value = value.replace(/\\/g, ""); mustUnescape = false; } push(params, paramName, value); if (code === 44) { push(offers, extensionName, params); params = /* @__PURE__ */ Object.create(null); extensionName = void 0; } paramName = void 0; start = end = -1; } else { throw new SyntaxError(`Unexpected character at index ${i}`); } } } if (start === -1 || inQuotes || code === 32 || code === 9) { throw new SyntaxError("Unexpected end of input"); } if (end === -1) end = i; const token = header.slice(start, end); if (extensionName === void 0) { push(offers, token, params); } else { if (paramName === void 0) { push(params, token, true); } else if (mustUnescape) { push(params, paramName, token.replace(/\\/g, "")); } else { push(params, paramName, token); } push(offers, extensionName, params); } return offers; } function format(extensions) { return Object.keys(extensions).map((extension) => { let configurations = extensions[extension]; if (!Array.isArray(configurations)) configurations = [configurations]; return configurations.map((params) => { return [extension].concat( Object.keys(params).map((k) => { let values = params[k]; if (!Array.isArray(values)) values = [values]; return values.map((v) => v === true ? k : `${k}=${v}`).join("; "); }) ).join("; "); }).join(", "); }).join(", "); } module2.exports = { format, parse }; } }); // node_modules/.pnpm/ws@8.11.0/node_modules/ws/lib/websocket.js var require_websocket2 = __commonJS({ "node_modules/.pnpm/ws@8.11.0/node_modules/ws/lib/websocket.js"(exports2, module2) { "use strict"; var EventEmitter = require("events"); var https = require("https"); var http = require("http"); var net = require("net"); var tls = require("tls"); var { randomBytes, createHash } = require("crypto"); var { Readable } = require("stream"); var { URL } = require("url"); var PerMessageDeflate = require_permessage_deflate(); var Receiver = require_receiver(); var Sender = require_sender(); var { BINARY_TYPES, EMPTY_BUFFER, GUID, kForOnEventAttribute, kListener, kStatusCode, kWebSocket, NOOP } = require_constants(); var { EventTarget: { addEventListener, removeEventListener } } = require_event_target(); var { format, parse } = require_extension(); var { toBuffer } = require_buffer_util(); var closeTimeout = 30 * 1e3; var kAborted = Symbol("kAborted"); var protocolVersions = [8, 13]; var readyStates = ["CONNECTING", "OPEN", "CLOSING", "CLOSED"]; var subprotocolRegex = /^[!#$%&'*+\-.0-9A-Z^_`|a-z~]+$/; var WebSocket = class _WebSocket extends EventEmitter { /** * Create a new `WebSocket`. * * @param {(String|URL)} address The URL to which to connect * @param {(String|String[])} [protocols] The subprotocols * @param {Object} [options] Connection options */ constructor(address, protocols, options) { super(); this._binaryType = BINARY_TYPES[0]; this._closeCode = 1006; this._closeFrameReceived = false; this._closeFrameSent = false; this._closeMessage = EMPTY_BUFFER; this._closeTimer = null; this._extensions = {}; this._paused = false; this._protocol = ""; this._readyState = _WebSocket.CONNECTING; this._receiver = null; this._sender = null; this._socket = null; if (address !== null) { this._bufferedAmount = 0; this._isServer = false; this._redirects = 0; if (protocols === void 0) { protocols = []; } else if (!Array.isArray(protocols)) { if (typeof protocols === "object" && protocols !== null) { options = protocols; protocols = []; } else { protocols = [protocols]; } } initAsClient(this, address, protocols, options); } else { this._isServer = true; } } /** * This deviates from the WHATWG interface since ws doesn't support the * required default "blob" type (instead we define a custom "nodebuffer" * type). * * @type {String} */ get binaryType() { return this._binaryType; } set binaryType(type) { if (!BINARY_TYPES.includes(type)) return; this._binaryType = type; if (this._receiver) this._receiver._binaryType = type; } /** * @type {Number} */ get bufferedAmount() { if (!this._socket) return this._bufferedAmount; return this._socket._writableState.length + this._sender._bufferedBytes; } /** * @type {String} */ get extensions() { return Object.keys(this._extensions).join(); } /** * @type {Boolean} */ get isPaused() { return this._paused; } /** * @type {Function} */ /* istanbul ignore next */ get onclose() { return null; } /** * @type {Function} */ /* istanbul ignore next */ get onerror() { return null; } /** * @type {Function} */ /* istanbul ignore next */ get onopen() { return null; } /** * @type {Function} */ /* istanbul ignore next */ get onmessage() { return null; } /** * @type {String} */ get protocol() { return this._protocol; } /** * @type {Number} */ get readyState() { return this._readyState; } /** * @type {String} */ get url() { return this._url; } /** * Set up the socket and the internal resources. * * @param {(net.Socket|tls.Socket)} socket The network socket between the * server and client * @param {Buffer} head The first packet of the upgraded stream * @param {Object} options Options object * @param {Function} [options.generateMask] The function used to generate the * masking key * @param {Number} [options.maxPayload=0] The maximum allowed message size * @param {Boolean} [options.skipUTF8Validation=false] Specifies whether or * not to skip UTF-8 validation for text and close messages * @private */ setSocket(socket, head, options) { const receiver = new Receiver({ binaryType: this.binaryType, extensions: this._extensions, isServer: this._isServer, maxPayload: options.maxPayload, skipUTF8Validation: options.skipUTF8Validation }); this._sender = new Sender(socket, this._extensions, options.generateMask); this._receiver = receiver; this._socket = socket; receiver[kWebSocket] = this; socket[kWebSocket] = this; receiver.on("conclude", receiverOnConclude); receiver.on("drain", receiverOnDrain); receiver.on("error", receiverOnError); receiver.on("message", receiverOnMessage); receiver.on("ping", receiverOnPing); receiver.on("pong", receiverOnPong); socket.setTimeout(0); socket.setNoDelay(); if (head.length > 0) socket.unshift(head); socket.on("close", socketOnClose); socket.on("data", socketOnData); socket.on("end", socketOnEnd); socket.on("error", socketOnError); this._readyState = _WebSocket.OPEN; this.emit("open"); } /** * Emit the `'close'` event. * * @private */ emitClose() { if (!this._socket) { this._readyState = _WebSocket.CLOSED; this.emit("close", this._closeCode, this._closeMessage); return; } if (this._extensions[PerMessageDeflate.extensionName]) { this._extensions[PerMessageDeflate.extensionName].cleanup(); } this._receiver.removeAllListeners(); this._readyState = _WebSocket.CLOSED; this.emit("close", this._closeCode, this._closeMessage); } /** * Start a closing handshake. * * +----------+ +-----------+ +----------+ * - - -|ws.close()|-->|close frame|-->|ws.close()|- - - * | +----------+ +-----------+ +----------+ | * +----------+ +-----------+ | * CLOSING |ws.close()|<--|close frame|<--+-----+ CLOSING * +----------+ +-----------+ | * | | | +---+ | * +------------------------+-->|fin| - - - - * | +---+ | +---+ * - - - - -|fin|<---------------------+ * +---+ * * @param {Number} [code] Status code explaining why the connection is closing * @param {(String|Buffer)} [data] The reason why the connection is * closing * @public */ close(code, data) { if (this.readyState === _WebSocket.CLOSED) return; if (this.readyState === _WebSocket.CONNECTING) { const msg = "WebSocket was closed before the connection was established"; return abortHandshake(this, this._req, msg); } if (this.readyState === _WebSocket.CLOSING) { if (this._closeFrameSent && (this._closeFrameReceived || this._receiver._writableState.errorEmitted)) { this._socket.end(); } return; } this._readyState = _WebSocket.CLOSING; this._sender.close(code, data, !this._isServer, (err) => { if (err) return; this._closeFrameSent = true; if (this._closeFrameReceived || this._receiver._writableState.errorEmitted) { this._socket.end(); } }); this._closeTimer = setTimeout( this._socket.destroy.bind(this._socket), closeTimeout ); } /** * Pause the socket. * * @public */ pause() { if (this.readyState === _WebSocket.CONNECTING || this.readyState === _WebSocket.CLOSED) { return; } this._paused = true; this._socket.pause(); } /** * Send a ping. * * @param {*} [data] The data to send * @param {Boolean} [mask] Indicates whether or not to mask `data` * @param {Function} [cb] Callback which is executed when the ping is sent * @public */ ping(data, mask, cb) { if (this.readyState === _WebSocket.CONNECTING) { throw new Error("WebSocket is not open: readyState 0 (CONNECTING)"); } if (typeof data === "function") { cb = data; data = mask = void 0; } else if (typeof mask === "function") { cb = mask; mask = void 0; } if (typeof data === "number") data = data.toString(); if (this.readyState !== _WebSocket.OPEN) { sendAfterClose(this, data, cb); return; } if (mask === void 0) mask = !this._isServer; this._sender.ping(data || EMPTY_BUFFER, mask, cb); } /** * Send a pong. * * @param {*} [data] The data to send * @param {Boolean} [mask] Indicates whether or not to mask `data` * @param {Function} [cb] Callback which is executed when the pong is sent * @public */ pong(data, mask, cb) { if (this.readyState === _WebSocket.CONNECTING) { throw new Error("WebSocket is not open: readyState 0 (CONNECTING)"); } if (typeof data === "function") { cb = data; data = mask = void 0; } else if (typeof mask === "function") { cb = mask; mask = void 0; } if (typeof data === "number") data = data.toString(); if (this.readyState !== _WebSocket.OPEN) { sendAfterClose(this, data, cb); return; } if (mask === void 0) mask = !this._isServer; this._sender.pong(data || EMPTY_BUFFER, mask, cb); } /** * Resume the socket. * * @public */ resume() { if (this.readyState === _WebSocket.CONNECTING || this.readyState === _WebSocket.CLOSED) { return; } this._paused = false; if (!this._receiver._writableState.needDrain) this._socket.resume(); } /** * Send a data message. * * @param {*} data The message to send * @param {Object} [options] Options object * @param {Boolean} [options.binary] Specifies whether `data` is binary or * text * @param {Boolean} [options.compress] Specifies whether or not to compress * `data` * @param {Boolean} [options.fin=true] Specifies whether the fragment is the * last one * @param {Boolean} [options.mask] Specifies whether or not to mask `data` * @param {Function} [cb] Callback which is executed when data is written out * @public */ send(data, options, cb) { if (this.readyState === _WebSocket.CONNECTING) { throw new Error("WebSocket is not open: readyState 0 (CONNECTING)"); } if (typeof options === "function") { cb = options; options = {}; } if (typeof data === "number") data = data.toString(); if (this.readyState !== _WebSocket.OPEN) { sendAfterClose(this, data, cb); return; } const opts = { binary: typeof data !== "string", mask: !this._isServer, compress: true, fin: true, ...options }; if (!this._extensions[PerMessageDeflate.extensionName]) { opts.compress = false; } this._sender.send(data || EMPTY_BUFFER, opts, cb); } /** * Forcibly close the connection. * * @public */ terminate() { if (this.readyState === _WebSocket.CLOSED) return; if (this.readyState === _WebSocket.CONNECTING) { const msg = "WebSocket was closed before the connection was established"; return abortHandshake(this, this._req, msg); } if (this._socket) { this._readyState = _WebSocket.CLOSING; this._socket.destroy(); } } }; Object.defineProperty(WebSocket, "CONNECTING", { enumerable: true, value: readyStates.indexOf("CONNECTING") }); Object.defineProperty(WebSocket.prototype, "CONNECTING", { enumerable: true, value: readyStates.indexOf("CONNECTING") }); Object.defineProperty(WebSocket, "OPEN", { enumerable: true, value: readyStates.indexOf("OPEN") }); Object.defineProperty(WebSocket.prototype, "OPEN", { enumerable: true, value: readyStates.indexOf("OPEN") }); Object.defineProperty(WebSocket, "CLOSING", { enumerable: true, value: readyStates.indexOf("CLOSING") }); Object.defineProperty(WebSocket.prototype, "CLOSING", { enumerable: true, value: readyStates.indexOf("CLOSING") }); Object.defineProperty(WebSocket, "CLOSED", { enumerable: true, value: readyStates.indexOf("CLOSED") }); Object.defineProperty(WebSocket.prototype, "CLOSED", { enumerable: true, value: readyStates.indexOf("CLOSED") }); [ "binaryType", "bufferedAmount", "extensions", "isPaused", "protocol", "readyState", "url" ].forEach((property) => { Object.defineProperty(WebSocket.prototype, property, { enumerable: true }); }); ["open", "error", "close", "message"].forEach((method) => { Object.defineProperty(WebSocket.prototype, `on${method}`, { enumerable: true, get() { for (const listener of this.listeners(method)) { if (listener[kForOnEventAttribute]) return listener[kListener]; } return null; }, set(handler) { for (const listener of this.listeners(method)) { if (listener[kForOnEventAttribute]) { this.removeListener(method, listener); break; } } if (typeof handler !== "function") return; this.addEventListener(method, handler, { [kForOnEventAttribute]: true }); } }); }); WebSocket.prototype.addEventListener = addEventListener; WebSocket.prototype.removeEventListener = removeEventListener; module2.exports = WebSocket; function initAsClient(websocket, address, protocols, options) { const opts = { protocolVersion: protocolVersions[1], maxPayload: 100 * 1024 * 1024, skipUTF8Validation: false, perMessageDeflate: true, followRedirects: false, maxRedirects: 10, ...options, createConnection: void 0, socketPath: void 0, hostname: void 0, protocol: void 0, timeout: void 0, method: "GET", host: void 0, path: void 0, port: void 0 }; if (!protocolVersions.includes(opts.protocolVersion)) { throw new RangeError( `Unsupported protocol version: ${opts.protocolVersion} (supported versions: ${protocolVersions.join(", ")})` ); } let parsedUrl; if (address instanceof URL) { parsedUrl = address; websocket._url = address.href; } else { try { parsedUrl = new URL(address); } catch (e) { throw new SyntaxError(`Invalid URL: ${address}`); } websocket._url = address; } const isSecure = parsedUrl.protocol === "wss:"; const isIpcUrl = parsedUrl.protocol === "ws+unix:"; let invalidUrlMessage; if (parsedUrl.protocol !== "ws:" && !isSecure && !isIpcUrl) { invalidUrlMessage = `The URL's protocol must be one of "ws:", "wss:", or "ws+unix:"`; } else if (isIpcUrl && !parsedUrl.pathname) { invalidUrlMessage = "The URL's pathname is empty"; } else if (parsedUrl.hash) { invalidUrlMessage = "The URL contains a fragment identifier"; } if (invalidUrlMessage) { const err = new SyntaxError(invalidUrlMessage); if (websocket._redirects === 0) { throw err; } else { emitErrorAndClose(websocket, err); return; } } const defaultPort = isSecure ? 443 : 80; const key = randomBytes(16).toString("base64"); const request = isSecure ? https.request : http.request; const protocolSet = /* @__PURE__ */ new Set(); let perMessageDeflate; opts.createConnection = isSecure ? tlsConnect : netConnect; opts.defaultPort = opts.defaultPort || defaultPort; opts.port = parsedUrl.port || defaultPort; opts.host = parsedUrl.hostname.startsWith("[") ? parsedUrl.hostname.slice(1, -1) : parsedUrl.hostname; opts.headers = { ...opts.headers, "Sec-WebSocket-Version": opts.protocolVersion, "Sec-WebSocket-Key": key, Connection: "Upgrade", Upgrade: "websocket" }; opts.path = parsedUrl.pathname + parsedUrl.search; opts.timeout = opts.handshakeTimeout; if (opts.perMessageDeflate) { perMessageDeflate = new PerMessageDeflate( opts.perMessageDeflate !== true ? opts.perMessageDeflate : {}, false, opts.maxPayload ); opts.headers["Sec-WebSocket-Extensions"] = format({ [PerMessageDeflate.extensionName]: perMessageDeflate.offer() }); } if (protocols.length) { for (const protocol of protocols) { if (typeof protocol !== "string" || !subprotocolRegex.test(protocol) || protocolSet.has(protocol)) { throw new SyntaxError( "An invalid or duplicated subprotocol was specified" ); } protocolSet.add(protocol); } opts.headers["Sec-WebSocket-Protocol"] = protocols.join(","); } if (opts.origin) { if (opts.protocolVersion < 13) { opts.headers["Sec-WebSocket-Origin"] = opts.origin; } else { opts.headers.Origin = opts.origin; } } if (parsedUrl.username || parsedUrl.password) { opts.auth = `${parsedUrl.username}:${parsedUrl.password}`; } if (isIpcUrl) { const parts = opts.path.split(":"); opts.socketPath = parts[0]; opts.path = parts[1]; } let req; if (opts.followRedirects) { if (websocket._redirects === 0) { websocket._originalIpc = isIpcUrl; websocket._originalSecure = isSecure; websocket._originalHostOrSocketPath = isIpcUrl ? opts.socketPath : parsedUrl.host; const headers = options && options.headers; options = { ...options, headers: {} }; if (headers) { for (const [key2, value] of Object.entries(headers)) { options.headers[key2.toLowerCase()] = value; } } } else if (websocket.listenerCount("redirect") === 0) { const isSameHost = isIpcUrl ? websocket._originalIpc ? opts.socketPath === websocket._originalHostOrSocketPath : false : websocket._originalIpc ? false : parsedUrl.host === websocket._originalHostOrSocketPath; if (!isSameHost || websocket._originalSecure && !isSecure) { delete opts.headers.authorization; delete opts.headers.cookie; if (!isSameHost) delete opts.headers.host; opts.auth = void 0; } } if (opts.auth && !options.headers.authorization) { options.headers.authorization = "Basic " + Buffer.from(opts.auth).toString("base64"); } req = websocket._req = request(opts); if (websocket._redirects) { websocket.emit("redirect", websocket.url, req); } } else { req = websocket._req = request(opts); } if (opts.timeout) { req.on("timeout", () => { abortHandshake(websocket, req, "Opening handshake has timed out"); }); } req.on("error", (err) => { if (req === null || req[kAborted]) return; req = websocket._req = null; emitErrorAndClose(websocket, err); }); req.on("response", (res) => { const location = res.headers.location; const statusCode = res.statusCode; if (location && opts.followRedirects && statusCode >= 300 && statusCode < 400) { if (++websocket._redirects > opts.maxRedirects) { abortHandshake(websocket, req, "Maximum redirects exceeded"); return; } req.abort(); let addr; try { addr = new URL(location, address); } catch (e) { const err = new SyntaxError(`Invalid URL: ${location}`); emitErrorAndClose(websocket, err); return; } initAsClient(websocket, addr, protocols, options); } else if (!websocket.emit("unexpected-response", req, res)) { abortHandshake( websocket, req, `Unexpected server response: ${res.statusCode}` ); } }); req.on("upgrade", (res, socket, head) => { websocket.emit("upgrade", res); if (websocket.readyState !== WebSocket.CONNECTING) return; req = websocket._req = null; if (res.headers.upgrade.toLowerCase() !== "websocket") { abortHandshake(websocket, socket, "Invalid Upgrade header"); return; } const digest = createHash("sha1").update(key + GUID).digest("base64"); if (res.headers["sec-websocket-accept"] !== digest) { abortHandshake(websocket, socket, "Invalid Sec-WebSocket-Accept header"); return; } const serverProt = res.headers["sec-websocket-protocol"]; let protError; if (serverProt !== void 0) { if (!protocolSet.size) { protError = "Server sent a subprotocol but none was requested"; } else if (!protocolSet.has(serverProt)) { protError = "Server sent an invalid subprotocol"; } } else if (protocolSet.size) { protError = "Server sent no subprotocol"; } if (protError) { abortHandshake(websocket, socket, protError); return; } if (serverProt) websocket._protocol = serverProt; const secWebSocketExtensions = res.headers["sec-websocket-extensions"]; if (secWebSocketExtensions !== void 0) { if (!perMessageDeflate) { const message = "Server sent a Sec-WebSocket-Extensions header but no extension was requested"; abortHandshake(websocket, socket, message); return; } let extensions; try { extensions = parse(secWebSocketExtensions); } catch (err) { const message = "Invalid Sec-WebSocket-Extensions header"; abortHandshake(websocket, socket, message); return; } const extensionNames = Object.keys(extensions); if (extensionNames.length !== 1 || extensionNames[0] !== PerMessageDeflate.extensionName) { const message = "Server indicated an extension that was not requested"; abortHandshake(websocket, socket, message); return; } try { perMessageDeflate.accept(extensions[PerMessageDeflate.extensionName]); } catch (err) { const message = "Invalid Sec-WebSocket-Extensions header"; abortHandshake(websocket, socket, message); return; } websocket._extensions[PerMessageDeflate.extensionName] = perMessageDeflate; } websocket.setSocket(socket, head, { generateMask: opts.generateMask, maxPayload: opts.maxPayload, skipUTF8Validation: opts.skipUTF8Validation }); }); req.end(); } function emitErrorAndClose(websocket, err) { websocket._readyState = WebSocket.CLOSING; websocket.emit("error", err); websocket.emitClose(); } function netConnect(options) { options.path = options.socketPath; return net.connect(options); } function tlsConnect(options) { options.path = void 0; if (!options.servername && options.servername !== "") { options.servername = net.isIP(options.host) ? "" : options.host; } return tls.connect(options); } function abortHandshake(websocket, stream, message) { websocket._readyState = WebSocket.CLOSING; const err = new Error(message); Error.captureStackTrace(err, abortHandshake); if (stream.setHeader) { stream[kAborted] = true; stream.abort(); if (stream.socket && !stream.socket.destroyed) { stream.socket.destroy(); } process.nextTick(emitErrorAndClose, websocket, err); } else { stream.destroy(err); stream.once("error", websocket.emit.bind(websocket, "error")); stream.once("close", websocket.emitClose.bind(websocket)); } } function sendAfterClose(websocket, data, cb) { if (data) { const length = toBuffer(data).length; if (websocket._socket) websocket._sender._bufferedBytes += length; else websocket._bufferedAmount += length; } if (cb) { const err = new Error( `WebSocket is not open: readyState ${websocket.readyState} (${readyStates[websocket.readyState]})` ); cb(err); } } function receiverOnConclude(code, reason) { const websocket = this[kWebSocket]; websocket._closeFrameReceived = true; websocket._closeMessage = reason; websocket._closeCode = code; if (websocket._socket[kWebSocket] === void 0) return; websocket._socket.removeListener("data", socketOnData); process.nextTick(resume, websocket._socket); if (code === 1005) websocket.close(); else websocket.close(code, reason); } function receiverOnDrain() { const websocket = this[kWebSocket]; if (!websocket.isPaused) websocket._socket.resume(); } function receiverOnError(err) { const websocket = this[kWebSocket]; if (websocket._socket[kWebSocket] !== void 0) { websocket._socket.removeListener("data", socketOnData); process.nextTick(resume, websocket._socket); websocket.close(err[kStatusCode]); } websocket.emit("error", err); } function receiverOnFinish() { this[kWebSocket].emitClose(); } function receiverOnMessage(data, isBinary) { this[kWebSocket].emit("message", data, isBinary); } function receiverOnPing(data) { const websocket = this[kWebSocket]; websocket.pong(data, !websocket._isServer, NOOP); websocket.emit("ping", data); } function receiverOnPong(data) { this[kWebSocket].emit("pong", data); } function resume(stream) { stream.resume(); } function socketOnClose() { const websocket = this[kWebSocket]; this.removeListener("close", socketOnClose); this.removeListener("data", socketOnData); this.removeListener("end", socketOnEnd); websocket._readyState = WebSocket.CLOSING; let chunk; if (!this._readableState.endEmitted && !websocket._closeFrameReceived && !websocket._receiver._writableState.errorEmitted && (chunk = websocket._socket.read()) !== null) { websocket._receiver.write(chunk); } websocket._receiver.end(); this[kWebSocket] = void 0; clearTimeout(websocket._closeTimer); if (websocket._receiver._writableState.finished || websocket._receiver._writableState.errorEmitted) { websocket.emitClose(); } else { websocket._receiver.on("error", receiverOnFinish); websocket._receiver.on("finish", receiverOnFinish); } } function socketOnData(chunk) { if (!this[kWebSocket]._receiver.write(chunk)) { this.pause(); } } function socketOnEnd() { const websocket = this[kWebSocket]; websocket._readyState = WebSocket.CLOSING; websocket._receiver.end(); this.end(); } function socketOnError() { const websocket = this[kWebSocket]; this.removeListener("error", socketOnError); this.on("error", NOOP); if (websocket) { websocket._readyState = WebSocket.CLOSING; this.destroy(); } } } }); // node_modules/.pnpm/ws@8.11.0/node_modules/ws/lib/stream.js var require_stream = __commonJS({ "node_modules/.pnpm/ws@8.11.0/node_modules/ws/lib/stream.js"(exports2, module2) { "use strict"; var { Duplex } = require("stream"); function emitClose(stream) { stream.emit("close"); } function duplexOnEnd() { if (!this.destroyed && this._writableState.finished) { this.destroy(); } } function duplexOnError(err) { this.removeListener("error", duplexOnError); this.destroy(); if (this.listenerCount("error") === 0) { this.emit("error", err); } } function createWebSocketStream(ws, options) { let terminateOnDestroy = true; const duplex = new Duplex({ ...options, autoDestroy: false, emitClose: false, objectMode: false, writableObjectMode: false }); ws.on("message", function message(msg, isBinary) { const data = !isBinary && duplex._readableState.objectMode ? msg.toString() : msg; if (!duplex.push(data)) ws.pause(); }); ws.once("error", function error(err) { if (duplex.destroyed) return; terminateOnDestroy = false; duplex.destroy(err); }); ws.once("close", function close() { if (duplex.destroyed) return; duplex.push(null); }); duplex._destroy = function(err, callback) { if (ws.readyState === ws.CLOSED) { callback(err); process.nextTick(emitClose, duplex); return; } let called = false; ws.once("error", function error(err2) { called = true; callback(err2); }); ws.once("close", function close() { if (!called) callback(err); process.nextTick(emitClose, duplex); }); if (terminateOnDestroy) ws.terminate(); }; duplex._final = function(callback) { if (ws.readyState === ws.CONNECTING) { ws.once("open", function open() { duplex._final(callback); }); return; } if (ws._socket === null) return; if (ws._socket._writableState.finished) { callback(); if (duplex._readableState.endEmitted) duplex.destroy(); } else { ws._socket.once("finish", function finish() { callback(); }); ws.close(); } }; duplex._read = function() { if (ws.isPaused) ws.resume(); }; duplex._write = function(chunk, encoding, callback) { if (ws.readyState === ws.CONNECTING) { ws.once("open", function open() { duplex._write(chunk, encoding, callback); }); return; } ws.send(chunk, callback); }; duplex.on("end", duplexOnEnd); duplex.on("error", duplexOnError); return duplex; } module2.exports = createWebSocketStream; } }); // node_modules/.pnpm/ws@8.11.0/node_modules/ws/lib/subprotocol.js var require_subprotocol = __commonJS({ "node_modules/.pnpm/ws@8.11.0/node_modules/ws/lib/subprotocol.js"(exports2, module2) { "use strict"; var { tokenChars } = require_validation(); function parse(header) { const protocols = /* @__PURE__ */ new Set(); let start = -1; let end = -1; let i = 0; for (i; i < header.length; i++) { const code = header.charCodeAt(i); if (end === -1 && tokenChars[code] === 1) { if (start === -1) start = i; } else if (i !== 0 && (code === 32 || code === 9)) { if (end === -1 && start !== -1) end = i; } else if (code === 44) { if (start === -1) { throw new SyntaxError(`Unexpected character at index ${i}`); } if (end === -1) end = i; const protocol2 = header.slice(start, end); if (protocols.has(protocol2)) { throw new SyntaxError(`The "${protocol2}" subprotocol is duplicated`); } protocols.add(protocol2); start = end = -1; } else { throw new SyntaxError(`Unexpected character at index ${i}`); } } if (start === -1 || end !== -1) { throw new SyntaxError("Unexpected end of input"); } const protocol = header.slice(start, i); if (protocols.has(protocol)) { throw new SyntaxError(`The "${protocol}" subprotocol is duplicated`); } protocols.add(protocol); return protocols; } module2.exports = { parse }; } }); // node_modules/.pnpm/ws@8.11.0/node_modules/ws/lib/websocket-server.js var require_websocket_server = __commonJS({ "node_modules/.pnpm/ws@8.11.0/node_modules/ws/lib/websocket-server.js"(exports2, module2) { "use strict"; var EventEmitter = require("events"); var http = require("http"); var https = require("https"); var net = require("net"); var tls = require("tls"); var { createHash } = require("crypto"); var extension = require_extension(); var PerMessageDeflate = require_permessage_deflate(); var subprotocol = require_subprotocol(); var WebSocket = require_websocket2(); var { GUID, kWebSocket } = require_constants(); var keyRegex = /^[+/0-9A-Za-z]{22}==$/; var RUNNING = 0; var CLOSING = 1; var CLOSED = 2; var WebSocketServer = class extends EventEmitter { /** * Create a `WebSocketServer` instance. * * @param {Object} options Configuration options * @param {Number} [options.backlog=511] The maximum length of the queue of * pending connections * @param {Boolean} [options.clientTracking=true] Specifies whether or not to * track clients * @param {Function} [options.handleProtocols] A hook to handle protocols * @param {String} [options.host] The hostname where to bind the server * @param {Number} [options.maxPayload=104857600] The maximum allowed message * size * @param {Boolean} [options.noServer=false] Enable no server mode * @param {String} [options.path] Accept only connections matching this path * @param {(Boolean|Object)} [options.perMessageDeflate=false] Enable/disable * permessage-deflate * @param {Number} [options.port] The port where to bind the server * @param {(http.Server|https.Server)} [options.server] A pre-created HTTP/S * server to use * @param {Boolean} [options.skipUTF8Validation=false] Specifies whether or * not to skip UTF-8 validation for text and close messages * @param {Function} [options.verifyClient] A hook to reject connections * @param {Function} [options.WebSocket=WebSocket] Specifies the `WebSocket` * class to use. It must be the `WebSocket` class or class that extends it * @param {Function} [callback] A listener for the `listening` event */ constructor(options, callback) { super(); options = { maxPayload: 100 * 1024 * 1024, skipUTF8Validation: false, perMessageDeflate: false, handleProtocols: null, clientTracking: true, verifyClient: null, noServer: false, backlog: null, // use default (511 as implemented in net.js) server: null, host: null, path: null, port: null, WebSocket, ...options }; if (options.port == null && !options.server && !options.noServer || options.port != null && (options.server || options.noServer) || options.server && options.noServer) { throw new TypeError( 'One and only one of the "port", "server", or "noServer" options must be specified' ); } if (options.port != null) { this._server = http.createServer((req, res) => { const body = http.STATUS_CODES[426]; res.writeHead(426, { "Content-Length": body.length, "Content-Type": "text/plain" }); res.end(body); }); this._server.listen( options.port, options.host, options.backlog, callback ); } else if (options.server) { this._server = options.server; } if (this._server) { const emitConnection = this.emit.bind(this, "connection"); this._removeListeners = addListeners(this._server, { listening: this.emit.bind(this, "listening"), error: this.emit.bind(this, "error"), upgrade: (req, socket, head) => { this.handleUpgrade(req, socket, head, emitConnection); } }); } if (options.perMessageDeflate === true) options.perMessageDeflate = {}; if (options.clientTracking) { this.clients = /* @__PURE__ */ new Set(); this._shouldEmitClose = false; } this.options = options; this._state = RUNNING; } /** * Returns the bound address, the address family name, and port of the server * as reported by the operating system if listening on an IP socket. * If the server is listening on a pipe or UNIX domain socket, the name is * returned as a string. * * @return {(Object|String|null)} The address of the server * @public */ address() { if (this.options.noServer) { throw new Error('The server is operating in "noServer" mode'); } if (!this._server) return null; return this._server.address(); } /** * Stop the server from accepting new connections and emit the `'close'` event * when all existing connections are closed. * * @param {Function} [cb] A one-time listener for the `'close'` event * @public */ close(cb) { if (this._state === CLOSED) { if (cb) { this.once("close", () => { cb(new Error("The server is not running")); }); } process.nextTick(emitClose, this); return; } if (cb) this.once("close", cb); if (this._state === CLOSING) return; this._state = CLOSING; if (this.options.noServer || this.options.server) { if (this._server) { this._removeListeners(); this._removeListeners = this._server = null; } if (this.clients) { if (!this.clients.size) { process.nextTick(emitClose, this); } else { this._shouldEmitClose = true; } } else { process.nextTick(emitClose, this); } } else { const server2 = this._server; this._removeListeners(); this._removeListeners = this._server = null; server2.close(() => { emitClose(this); }); } } /** * See if a given request should be handled by this server instance. * * @param {http.IncomingMessage} req Request object to inspect * @return {Boolean} `true` if the request is valid, else `false` * @public */ shouldHandle(req) { if (this.options.path) { const index = req.url.indexOf("?"); const pathname = index !== -1 ? req.url.slice(0, index) : req.url; if (pathname !== this.options.path) return false; } return true; } /** * Handle a HTTP Upgrade request. * * @param {http.IncomingMessage} req The request object * @param {(net.Socket|tls.Socket)} socket The network socket between the * server and client * @param {Buffer} head The first packet of the upgraded stream * @param {Function} cb Callback * @public */ handleUpgrade(req, socket, head, cb) { socket.on("error", socketOnError); const key = req.headers["sec-websocket-key"]; const version = +req.headers["sec-websocket-version"]; if (req.method !== "GET") { const message = "Invalid HTTP method"; abortHandshakeOrEmitwsClientError(this, req, socket, 405, message); return; } if (req.headers.upgrade.toLowerCase() !== "websocket") { const message = "Invalid Upgrade header"; abortHandshakeOrEmitwsClientError(this, req, socket, 400, message); return; } if (!key || !keyRegex.test(key)) { const message = "Missing or invalid Sec-WebSocket-Key header"; abortHandshakeOrEmitwsClientError(this, req, socket, 400, message); return; } if (version !== 8 && version !== 13) { const message = "Missing or invalid Sec-WebSocket-Version header"; abortHandshakeOrEmitwsClientError(this, req, socket, 400, message); return; } if (!this.shouldHandle(req)) { abortHandshake(socket, 400); return; } const secWebSocketProtocol = req.headers["sec-websocket-protocol"]; let protocols = /* @__PURE__ */ new Set(); if (secWebSocketProtocol !== void 0) { try { protocols = subprotocol.parse(secWebSocketProtocol); } catch (err) { const message = "Invalid Sec-WebSocket-Protocol header"; abortHandshakeOrEmitwsClientError(this, req, socket, 400, message); return; } } const secWebSocketExtensions = req.headers["sec-websocket-extensions"]; const extensions = {}; if (this.options.perMessageDeflate && secWebSocketExtensions !== void 0) { const perMessageDeflate = new PerMessageDeflate( this.options.perMessageDeflate, true, this.options.maxPayload ); try { const offers = extension.parse(secWebSocketExtensions); if (offers[PerMessageDeflate.extensionName]) { perMessageDeflate.accept(offers[PerMessageDeflate.extensionName]); extensions[PerMessageDeflate.extensionName] = perMessageDeflate; } } catch (err) { const message = "Invalid or unacceptable Sec-WebSocket-Extensions header"; abortHandshakeOrEmitwsClientError(this, req, socket, 400, message); return; } } if (this.options.verifyClient) { const info = { origin: req.headers[`${version === 8 ? "sec-websocket-origin" : "origin"}`], secure: !!(req.socket.authorized || req.socket.encrypted), req }; if (this.options.verifyClient.length === 2) { this.options.verifyClient(info, (verified, code, message, headers) => { if (!verified) { return abortHandshake(socket, code || 401, message, headers); } this.completeUpgrade( extensions, key, protocols, req, socket, head, cb ); }); return; } if (!this.options.verifyClient(info)) return abortHandshake(socket, 401); } this.completeUpgrade(extensions, key, protocols, req, socket, head, cb); } /** * Upgrade the connection to WebSocket. * * @param {Object} extensions The accepted extensions * @param {String} key The value of the `Sec-WebSocket-Key` header * @param {Set} protocols The subprotocols * @param {http.IncomingMessage} req The request object * @param {(net.Socket|tls.Socket)} socket The network socket between the * server and client * @param {Buffer} head The first packet of the upgraded stream * @param {Function} cb Callback * @throws {Error} If called more than once with the same socket * @private */ completeUpgrade(extensions, key, protocols, req, socket, head, cb) { if (!socket.readable || !socket.writable) return socket.destroy(); if (socket[kWebSocket]) { throw new Error( "server.handleUpgrade() was called more than once with the same socket, possibly due to a misconfiguration" ); } if (this._state > RUNNING) return abortHandshake(socket, 503); const digest = createHash("sha1").update(key + GUID).digest("base64"); const headers = [ "HTTP/1.1 101 Switching Protocols", "Upgrade: websocket", "Connection: Upgrade", `Sec-WebSocket-Accept: ${digest}` ]; const ws = new this.options.WebSocket(null); if (protocols.size) { const protocol = this.options.handleProtocols ? this.options.handleProtocols(protocols, req) : protocols.values().next().value; if (protocol) { headers.push(`Sec-WebSocket-Protocol: ${protocol}`); ws._protocol = protocol; } } if (extensions[PerMessageDeflate.extensionName]) { const params = extensions[PerMessageDeflate.extensionName].params; const value = extension.format({ [PerMessageDeflate.extensionName]: [params] }); headers.push(`Sec-WebSocket-Extensions: ${value}`); ws._extensions = extensions; } this.emit("headers", headers, req); socket.write(headers.concat("\r\n").join("\r\n")); socket.removeListener("error", socketOnError); ws.setSocket(socket, head, { maxPayload: this.options.maxPayload, skipUTF8Validation: this.options.skipUTF8Validation }); if (this.clients) { this.clients.add(ws); ws.on("close", () => { this.clients.delete(ws); if (this._shouldEmitClose && !this.clients.size) { process.nextTick(emitClose, this); } }); } cb(ws, req); } }; module2.exports = WebSocketServer; function addListeners(server2, map) { for (const event of Object.keys(map)) server2.on(event, map[event]); return function removeListeners() { for (const event of Object.keys(map)) { server2.removeListener(event, map[event]); } }; } function emitClose(server2) { server2._state = CLOSED; server2.emit("close"); } function socketOnError() { this.destroy(); } function abortHandshake(socket, code, message, headers) { message = message || http.STATUS_CODES[code]; headers = { Connection: "close", "Content-Type": "text/html", "Content-Length": Buffer.byteLength(message), ...headers }; socket.once("finish", socket.destroy); socket.end( `HTTP/1.1 ${code} ${http.STATUS_CODES[code]}\r ` + Object.keys(headers).map((h) => `${h}: ${headers[h]}`).join("\r\n") + "\r\n\r\n" + message ); } function abortHandshakeOrEmitwsClientError(server2, req, socket, code, message) { if (server2.listenerCount("wsClientError")) { const err = new Error(message); Error.captureStackTrace(err, abortHandshakeOrEmitwsClientError); server2.emit("wsClientError", err, socket, req); } else { abortHandshake(socket, code, message); } } } }); // node_modules/.pnpm/ws@8.11.0/node_modules/ws/index.js var require_ws = __commonJS({ "node_modules/.pnpm/ws@8.11.0/node_modules/ws/index.js"(exports2, module2) { "use strict"; var WebSocket = require_websocket2(); WebSocket.createWebSocketStream = require_stream(); WebSocket.Server = require_websocket_server(); WebSocket.Receiver = require_receiver(); WebSocket.Sender = require_sender(); WebSocket.WebSocket = WebSocket; WebSocket.WebSocketServer = WebSocket.Server; module2.exports = WebSocket; } }); // node_modules/.pnpm/object-assign@4.1.1/node_modules/object-assign/index.js var require_object_assign = __commonJS({ "node_modules/.pnpm/object-assign@4.1.1/node_modules/object-assign/index.js"(exports2, module2) { "use strict"; var getOwnPropertySymbols = Object.getOwnPropertySymbols; var hasOwnProperty = Object.prototype.hasOwnProperty; var propIsEnumerable = Object.prototype.propertyIsEnumerable; function toObject(val) { if (val === null || val === void 0) { throw new TypeError("Object.assign cannot be called with null or undefined"); } return Object(val); } function shouldUseNative() { try { if (!Object.assign) { return false; } var test1 = new String("abc"); test1[5] = "de"; if (Object.getOwnPropertyNames(test1)[0] === "5") { return false; } var test2 = {}; for (var i = 0; i < 10; i++) { test2["_" + String.fromCharCode(i)] = i; } var order2 = Object.getOwnPropertyNames(test2).map(function(n) { return test2[n]; }); if (order2.join("") !== "0123456789") { return false; } var test3 = {}; "abcdefghijklmnopqrst".split("").forEach(function(letter) { test3[letter] = letter; }); if (Object.keys(Object.assign({}, test3)).join("") !== "abcdefghijklmnopqrst") { return false; } return true; } catch (err) { return false; } } module2.exports = shouldUseNative() ? Object.assign : function(target, source2) { var from; var to = toObject(target); var symbols; for (var s = 1; s < arguments.length; s++) { from = Object(arguments[s]); for (var key in from) { if (hasOwnProperty.call(from, key)) { to[key] = from[key]; } } if (getOwnPropertySymbols) { symbols = getOwnPropertySymbols(from); for (var i = 0; i < symbols.length; i++) { if (propIsEnumerable.call(from, symbols[i])) { to[symbols[i]] = from[symbols[i]]; } } } } return to; }; } }); // node_modules/.pnpm/vary@1.1.2/node_modules/vary/index.js var require_vary = __commonJS({ "node_modules/.pnpm/vary@1.1.2/node_modules/vary/index.js"(exports2, module2) { "use strict"; module2.exports = vary; module2.exports.append = append; var FIELD_NAME_REGEXP = /^[!#$%&'*+\-.^_`|~0-9A-Za-z]+$/; function append(header, field) { if (typeof header !== "string") { throw new TypeError("header argument is required"); } if (!field) { throw new TypeError("field argument is required"); } var fields = !Array.isArray(field) ? parse(String(field)) : field; for (var j = 0; j < fields.length; j++) { if (!FIELD_NAME_REGEXP.test(fields[j])) { throw new TypeError("field argument contains an invalid header name"); } } if (header === "*") { return header; } var val = header; var vals = parse(header.toLowerCase()); if (fields.indexOf("*") !== -1 || vals.indexOf("*") !== -1) { return "*"; } for (var i = 0; i < fields.length; i++) { var fld = fields[i].toLowerCase(); if (vals.indexOf(fld) === -1) { vals.push(fld); val = val ? val + ", " + fields[i] : fields[i]; } } return val; } function parse(header) { var end = 0; var list = []; var start = 0; for (var i = 0, len = header.length; i < len; i++) { switch (header.charCodeAt(i)) { case 32: if (start === end) { start = end = i + 1; } break; case 44: list.push(header.substring(start, end)); start = end = i + 1; break; default: end = i + 1; break; } } list.push(header.substring(start, end)); return list; } function vary(res, field) { if (!res || !res.getHeader || !res.setHeader) { throw new TypeError("res argument is required"); } var val = res.getHeader("Vary") || ""; var header = Array.isArray(val) ? val.join(", ") : String(val); if (val = append(header, field)) { res.setHeader("Vary", val); } } } }); // node_modules/.pnpm/cors@2.8.5/node_modules/cors/lib/index.js var require_lib = __commonJS({ "node_modules/.pnpm/cors@2.8.5/node_modules/cors/lib/index.js"(exports2, module2) { (function() { "use strict"; var assign = require_object_assign(); var vary = require_vary(); var defaults = { origin: "*", methods: "GET,HEAD,PUT,PATCH,POST,DELETE", preflightContinue: false, optionsSuccessStatus: 204 }; function isString(s) { return typeof s === "string" || s instanceof String; } function isOriginAllowed(origin, allowedOrigin) { if (Array.isArray(allowedOrigin)) { for (var i = 0; i < allowedOrigin.length; ++i) { if (isOriginAllowed(origin, allowedOrigin[i])) { return true; } } return false; } else if (isString(allowedOrigin)) { return origin === allowedOrigin; } else if (allowedOrigin instanceof RegExp) { return allowedOrigin.test(origin); } else { return !!allowedOrigin; } } function configureOrigin(options, req) { var requestOrigin = req.headers.origin, headers = [], isAllowed; if (!options.origin || options.origin === "*") { headers.push([{ key: "Access-Control-Allow-Origin", value: "*" }]); } else if (isString(options.origin)) { headers.push([{ key: "Access-Control-Allow-Origin", value: options.origin }]); headers.push([{ key: "Vary", value: "Origin" }]); } else { isAllowed = isOriginAllowed(requestOrigin, options.origin); headers.push([{ key: "Access-Control-Allow-Origin", value: isAllowed ? requestOrigin : false }]); headers.push([{ key: "Vary", value: "Origin" }]); } return headers; } function configureMethods(options) { var methods = options.methods; if (methods.join) { methods = options.methods.join(","); } return { key: "Access-Control-Allow-Methods", value: methods }; } function configureCredentials(options) { if (options.credentials === true) { return { key: "Access-Control-Allow-Credentials", value: "true" }; } return null; } function configureAllowedHeaders(options, req) { var allowedHeaders = options.allowedHeaders || options.headers; var headers = []; if (!allowedHeaders) { allowedHeaders = req.headers["access-control-request-headers"]; headers.push([{ key: "Vary", value: "Access-Control-Request-Headers" }]); } else if (allowedHeaders.join) { allowedHeaders = allowedHeaders.join(","); } if (allowedHeaders && allowedHeaders.length) { headers.push([{ key: "Access-Control-Allow-Headers", value: allowedHeaders }]); } return headers; } function configureExposedHeaders(options) { var headers = options.exposedHeaders; if (!headers) { return null; } else if (headers.join) { headers = headers.join(","); } if (headers && headers.length) { return { key: "Access-Control-Expose-Headers", value: headers }; } return null; } function configureMaxAge(options) { var maxAge = (typeof options.maxAge === "number" || options.maxAge) && options.maxAge.toString(); if (maxAge && maxAge.length) { return { key: "Access-Control-Max-Age", value: maxAge }; } return null; } function applyHeaders(headers, res) { for (var i = 0, n = headers.length; i < n; i++) { var header = headers[i]; if (header) { if (Array.isArray(header)) { applyHeaders(header, res); } else if (header.key === "Vary" && header.value) { vary(res, header.value); } else if (header.value) { res.setHeader(header.key, header.value); } } } } function cors(options, req, res, next) { var headers = [], method = req.method && req.method.toUpperCase && req.method.toUpperCase(); if (method === "OPTIONS") { headers.push(configureOrigin(options, req)); headers.push(configureCredentials(options, req)); headers.push(configureMethods(options, req)); headers.push(configureAllowedHeaders(options, req)); headers.push(configureMaxAge(options, req)); headers.push(configureExposedHeaders(options, req)); applyHeaders(headers, res); if (options.preflightContinue) { next(); } else { res.statusCode = options.optionsSuccessStatus; res.setHeader("Content-Length", "0"); res.end(); } } else { headers.push(configureOrigin(options, req)); headers.push(configureCredentials(options, req)); headers.push(configureExposedHeaders(options, req)); applyHeaders(headers, res); next(); } } function middlewareWrapper(o) { var optionsCallback = null; if (typeof o === "function") { optionsCallback = o; } else { optionsCallback = function(req, cb) { cb(null, o); }; } return function corsMiddleware(req, res, next) { optionsCallback(req, function(err, options) { if (err) { next(err); } else { var corsOptions = assign({}, defaults, options); var originCallback = null; if (corsOptions.origin && typeof corsOptions.origin === "function") { originCallback = corsOptions.origin; } else if (corsOptions.origin) { originCallback = function(origin, cb) { cb(null, corsOptions.origin); }; } if (originCallback) { originCallback(req.headers.origin, function(err2, origin) { if (err2 || !origin) { next(err2); } else { corsOptions.origin = origin; cors(corsOptions, req, res, next); } }); } else { next(); } } }); }; } module2.exports = middlewareWrapper; })(); } }); // node_modules/.pnpm/engine.io@6.5.2/node_modules/engine.io/build/server.js var require_server = __commonJS({ "node_modules/.pnpm/engine.io@6.5.2/node_modules/engine.io/build/server.js"(exports2) { "use strict"; Object.defineProperty(exports2, "__esModule", { value: true }); exports2.Server = exports2.BaseServer = void 0; var qs = require("querystring"); var url_1 = require("url"); var base64id = require_base64id(); var transports_1 = require_transports(); var events_1 = require("events"); var socket_1 = require_socket(); var debug_1 = require_src(); var cookie_1 = require_cookie(); var ws_1 = require_ws(); var webtransport_1 = require_webtransport(); var engine_io_parser_1 = require_cjs(); var debug = (0, debug_1.default)("engine"); var kResponseHeaders = Symbol("responseHeaders"); function parseSessionId(data) { try { const parsed = JSON.parse(data); if (typeof parsed.sid === "string") { return parsed.sid; } } catch (e) { } } var BaseServer = class extends events_1.EventEmitter { /** * Server constructor. * * @param {Object} opts - options * @api public */ constructor(opts = {}) { super(); this.middlewares = []; this.clients = {}; this.clientsCount = 0; this.opts = Object.assign({ wsEngine: ws_1.Server, pingTimeout: 2e4, pingInterval: 25e3, upgradeTimeout: 1e4, maxHttpBufferSize: 1e6, transports: ["polling", "websocket"], allowUpgrades: true, httpCompression: { threshold: 1024 }, cors: false, allowEIO3: false }, opts); if (opts.cookie) { this.opts.cookie = Object.assign({ name: "io", path: "/", // @ts-ignore httpOnly: opts.cookie.path !== false, sameSite: "lax" }, opts.cookie); } if (this.opts.cors) { this.use(require_lib()(this.opts.cors)); } if (opts.perMessageDeflate) { this.opts.perMessageDeflate = Object.assign({ threshold: 1024 }, opts.perMessageDeflate); } this.init(); } /** * Compute the pathname of the requests that are handled by the server * @param options * @protected */ _computePath(options) { let path = (options.path || "/engine.io").replace(/\/$/, ""); if (options.addTrailingSlash !== false) { path += "/"; } return path; } /** * Returns a list of available transports for upgrade given a certain transport. * * @return {Array} * @api public */ upgrades(transport) { if (!this.opts.allowUpgrades) return []; return transports_1.default[transport].upgradesTo || []; } /** * Verifies a request. * * @param {http.IncomingMessage} * @return {Boolean} whether the request is valid * @api private */ verify(req, upgrade, fn) { const transport = req._query.transport; if (!~this.opts.transports.indexOf(transport) || transport === "webtransport") { debug('unknown transport "%s"', transport); return fn(Server2.errors.UNKNOWN_TRANSPORT, { transport }); } const isOriginInvalid = checkInvalidHeaderChar(req.headers.origin); if (isOriginInvalid) { const origin = req.headers.origin; req.headers.origin = null; debug("origin header invalid"); return fn(Server2.errors.BAD_REQUEST, { name: "INVALID_ORIGIN", origin }); } const sid = req._query.sid; if (sid) { if (!this.clients.hasOwnProperty(sid)) { debug('unknown sid "%s"', sid); return fn(Server2.errors.UNKNOWN_SID, { sid }); } const previousTransport = this.clients[sid].transport.name; if (!upgrade && previousTransport !== transport) { debug("bad request: unexpected transport without upgrade"); return fn(Server2.errors.BAD_REQUEST, { name: "TRANSPORT_MISMATCH", transport, previousTransport }); } } else { if ("GET" !== req.method) { return fn(Server2.errors.BAD_HANDSHAKE_METHOD, { method: req.method }); } if (transport === "websocket" && !upgrade) { debug("invalid transport upgrade"); return fn(Server2.errors.BAD_REQUEST, { name: "TRANSPORT_HANDSHAKE_ERROR" }); } if (!this.opts.allowRequest) return fn(); return this.opts.allowRequest(req, (message, success) => { if (!success) { return fn(Server2.errors.FORBIDDEN, { message }); } fn(); }); } fn(); } /** * Adds a new middleware. * * @example * import helmet from "helmet"; * * engine.use(helmet()); * * @param fn */ use(fn) { this.middlewares.push(fn); } /** * Apply the middlewares to the request. * * @param req * @param res * @param callback * @protected */ _applyMiddlewares(req, res, callback) { if (this.middlewares.length === 0) { debug("no middleware to apply, skipping"); return callback(); } const apply = (i) => { debug("applying middleware n\xB0%d", i + 1); this.middlewares[i](req, res, (err) => { if (err) { return callback(err); } if (i + 1 < this.middlewares.length) { apply(i + 1); } else { callback(); } }); }; apply(0); } /** * Closes all clients. * * @api public */ close() { debug("closing all open clients"); for (let i in this.clients) { if (this.clients.hasOwnProperty(i)) { this.clients[i].close(true); } } this.cleanup(); return this; } /** * generate a socket id. * Overwrite this method to generate your custom socket id * * @param {Object} request object * @api public */ generateId(req) { return base64id.generateId(); } /** * Handshakes a new client. * * @param {String} transport name * @param {Object} request object * @param {Function} closeConnection * * @api protected */ async handshake(transportName, req, closeConnection) { const protocol = req._query.EIO === "4" ? 4 : 3; if (protocol === 3 && !this.opts.allowEIO3) { debug("unsupported protocol version"); this.emit("connection_error", { req, code: Server2.errors.UNSUPPORTED_PROTOCOL_VERSION, message: Server2.errorMessages[Server2.errors.UNSUPPORTED_PROTOCOL_VERSION], context: { protocol } }); closeConnection(Server2.errors.UNSUPPORTED_PROTOCOL_VERSION); return; } let id; try { id = await this.generateId(req); } catch (e) { debug("error while generating an id"); this.emit("connection_error", { req, code: Server2.errors.BAD_REQUEST, message: Server2.errorMessages[Server2.errors.BAD_REQUEST], context: { name: "ID_GENERATION_ERROR", error: e } }); closeConnection(Server2.errors.BAD_REQUEST); return; } debug('handshaking client "%s"', id); try { var transport = this.createTransport(transportName, req); if ("polling" === transportName) { transport.maxHttpBufferSize = this.opts.maxHttpBufferSize; transport.httpCompression = this.opts.httpCompression; } else if ("websocket" === transportName) { transport.perMessageDeflate = this.opts.perMessageDeflate; } if (req._query && req._query.b64) { transport.supportsBinary = false; } else { transport.supportsBinary = true; } } catch (e) { debug('error handshaking to transport "%s"', transportName); this.emit("connection_error", { req, code: Server2.errors.BAD_REQUEST, message: Server2.errorMessages[Server2.errors.BAD_REQUEST], context: { name: "TRANSPORT_HANDSHAKE_ERROR", error: e } }); closeConnection(Server2.errors.BAD_REQUEST); return; } const socket = new socket_1.Socket(id, this, transport, req, protocol); transport.on("headers", (headers, req2) => { const isInitialRequest = !req2._query.sid; if (isInitialRequest) { if (this.opts.cookie) { headers["Set-Cookie"] = [ // @ts-ignore (0, cookie_1.serialize)(this.opts.cookie.name, id, this.opts.cookie) ]; } this.emit("initial_headers", headers, req2); } this.emit("headers", headers, req2); }); transport.onRequest(req); this.clients[id] = socket; this.clientsCount++; socket.once("close", () => { delete this.clients[id]; this.clientsCount--; }); this.emit("connection", socket); return transport; } async onWebTransportSession(session) { const timeout = setTimeout(() => { debug("the client failed to establish a bidirectional stream in the given period"); session.close(); }, this.opts.upgradeTimeout); const streamReader = session.incomingBidirectionalStreams.getReader(); const result = await streamReader.read(); if (result.done) { debug("session is closed"); return; } const stream = result.value; const transformStream = (0, engine_io_parser_1.createPacketDecoderStream)(this.opts.maxHttpBufferSize, "nodebuffer"); const reader = stream.readable.pipeThrough(transformStream).getReader(); const { value, done } = await reader.read(); if (done) { debug("stream is closed"); return; } clearTimeout(timeout); if (value.type !== "open") { debug("invalid WebTransport handshake"); return session.close(); } if (value.data === void 0) { const transport = new webtransport_1.WebTransport(session, stream, reader); const id = base64id.generateId(); debug('handshaking client "%s" (WebTransport)', id); const socket = new socket_1.Socket(id, this, transport, null, 4); this.clients[id] = socket; this.clientsCount++; socket.once("close", () => { delete this.clients[id]; this.clientsCount--; }); this.emit("connection", socket); return; } const sid = parseSessionId(value.data); if (!sid) { debug("invalid WebTransport handshake"); return session.close(); } const client = this.clients[sid]; if (!client) { debug("upgrade attempt for closed client"); session.close(); } else if (client.upgrading) { debug("transport has already been trying to upgrade"); session.close(); } else if (client.upgraded) { debug("transport had already been upgraded"); session.close(); } else { debug("upgrading existing transport"); const transport = new webtransport_1.WebTransport(session, stream, reader); client.maybeUpgrade(transport); } } }; exports2.BaseServer = BaseServer; BaseServer.errors = { UNKNOWN_TRANSPORT: 0, UNKNOWN_SID: 1, BAD_HANDSHAKE_METHOD: 2, BAD_REQUEST: 3, FORBIDDEN: 4, UNSUPPORTED_PROTOCOL_VERSION: 5 }; BaseServer.errorMessages = { 0: "Transport unknown", 1: "Session ID unknown", 2: "Bad handshake method", 3: "Bad request", 4: "Forbidden", 5: "Unsupported protocol version" }; var WebSocketResponse = class { constructor(req, socket) { this.req = req; this.socket = socket; req[kResponseHeaders] = {}; } setHeader(name, value) { this.req[kResponseHeaders][name] = value; } getHeader(name) { return this.req[kResponseHeaders][name]; } removeHeader(name) { delete this.req[kResponseHeaders][name]; } write() { } writeHead() { } end() { this.socket.destroy(); } }; var Server2 = class _Server extends BaseServer { /** * Initialize websocket server * * @api protected */ init() { if (!~this.opts.transports.indexOf("websocket")) return; if (this.ws) this.ws.close(); this.ws = new this.opts.wsEngine({ noServer: true, clientTracking: false, perMessageDeflate: this.opts.perMessageDeflate, maxPayload: this.opts.maxHttpBufferSize }); if (typeof this.ws.on === "function") { this.ws.on("headers", (headersArray, req) => { const additionalHeaders = req[kResponseHeaders] || {}; delete req[kResponseHeaders]; const isInitialRequest = !req._query.sid; if (isInitialRequest) { this.emit("initial_headers", additionalHeaders, req); } this.emit("headers", additionalHeaders, req); debug("writing headers: %j", additionalHeaders); Object.keys(additionalHeaders).forEach((key) => { headersArray.push(`${key}: ${additionalHeaders[key]}`); }); }); } } cleanup() { if (this.ws) { debug("closing webSocketServer"); this.ws.close(); } } /** * Prepares a request by processing the query string. * * @api private */ prepare(req) { if (!req._query) { req._query = ~req.url.indexOf("?") ? qs.parse((0, url_1.parse)(req.url).query) : {}; } } createTransport(transportName, req) { return new transports_1.default[transportName](req); } /** * Handles an Engine.IO HTTP request. * * @param {IncomingMessage} req * @param {ServerResponse} res * @api public */ handleRequest(req, res) { debug('handling "%s" http request "%s"', req.method, req.url); this.prepare(req); req.res = res; const callback = (errorCode, errorContext) => { if (errorCode !== void 0) { this.emit("connection_error", { req, code: errorCode, message: _Server.errorMessages[errorCode], context: errorContext }); abortRequest(res, errorCode, errorContext); return; } if (req._query.sid) { debug("setting new request for existing client"); this.clients[req._query.sid].transport.onRequest(req); } else { const closeConnection = (errorCode2, errorContext2) => abortRequest(res, errorCode2, errorContext2); this.handshake(req._query.transport, req, closeConnection); } }; this._applyMiddlewares(req, res, (err) => { if (err) { callback(_Server.errors.BAD_REQUEST, { name: "MIDDLEWARE_FAILURE" }); } else { this.verify(req, false, callback); } }); } /** * Handles an Engine.IO HTTP Upgrade. * * @api public */ handleUpgrade(req, socket, upgradeHead) { this.prepare(req); const res = new WebSocketResponse(req, socket); const callback = (errorCode, errorContext) => { if (errorCode !== void 0) { this.emit("connection_error", { req, code: errorCode, message: _Server.errorMessages[errorCode], context: errorContext }); abortUpgrade(socket, errorCode, errorContext); return; } const head = Buffer.from(upgradeHead); upgradeHead = null; res.writeHead(); this.ws.handleUpgrade(req, socket, head, (websocket) => { this.onWebSocket(req, socket, websocket); }); }; this._applyMiddlewares(req, res, (err) => { if (err) { callback(_Server.errors.BAD_REQUEST, { name: "MIDDLEWARE_FAILURE" }); } else { this.verify(req, true, callback); } }); } /** * Called upon a ws.io connection. * * @param {ws.Socket} websocket * @api private */ onWebSocket(req, socket, websocket) { websocket.on("error", onUpgradeError); if (transports_1.default[req._query.transport] !== void 0 && !transports_1.default[req._query.transport].prototype.handlesUpgrades) { debug("transport doesnt handle upgraded requests"); websocket.close(); return; } const id = req._query.sid; req.websocket = websocket; if (id) { const client = this.clients[id]; if (!client) { debug("upgrade attempt for closed client"); websocket.close(); } else if (client.upgrading) { debug("transport has already been trying to upgrade"); websocket.close(); } else if (client.upgraded) { debug("transport had already been upgraded"); websocket.close(); } else { debug("upgrading existing transport"); websocket.removeListener("error", onUpgradeError); const transport = this.createTransport(req._query.transport, req); if (req._query && req._query.b64) { transport.supportsBinary = false; } else { transport.supportsBinary = true; } transport.perMessageDeflate = this.opts.perMessageDeflate; client.maybeUpgrade(transport); } } else { const closeConnection = (errorCode, errorContext) => abortUpgrade(socket, errorCode, errorContext); this.handshake(req._query.transport, req, closeConnection); } function onUpgradeError() { debug("websocket error before upgrade"); } } /** * Captures upgrade requests for a http.Server. * * @param {http.Server} server * @param {Object} options * @api public */ attach(server2, options = {}) { const path = this._computePath(options); const destroyUpgradeTimeout = options.destroyUpgradeTimeout || 1e3; function check(req) { return path === req.url.slice(0, path.length); } const listeners = server2.listeners("request").slice(0); server2.removeAllListeners("request"); server2.on("close", this.close.bind(this)); server2.on("listening", this.init.bind(this)); server2.on("request", (req, res) => { if (check(req)) { debug('intercepting request for path "%s"', path); this.handleRequest(req, res); } else { let i = 0; const l = listeners.length; for (; i < l; i++) { listeners[i].call(server2, req, res); } } }); if (~this.opts.transports.indexOf("websocket")) { server2.on("upgrade", (req, socket, head) => { if (check(req)) { this.handleUpgrade(req, socket, head); } else if (false !== options.destroyUpgrade) { setTimeout(function() { if (socket.writable && socket.bytesWritten <= 0) { socket.on("error", (e) => { debug("error while destroying upgrade: %s", e.message); }); return socket.end(); } }, destroyUpgradeTimeout); } }); } } }; exports2.Server = Server2; function abortRequest(res, errorCode, errorContext) { const statusCode = errorCode === Server2.errors.FORBIDDEN ? 403 : 400; const message = errorContext && errorContext.message ? errorContext.message : Server2.errorMessages[errorCode]; res.writeHead(statusCode, { "Content-Type": "application/json" }); res.end(JSON.stringify({ code: errorCode, message })); } function abortUpgrade(socket, errorCode, errorContext = {}) { socket.on("error", () => { debug("ignoring error from closed connection"); }); if (socket.writable) { const message = errorContext.message || Server2.errorMessages[errorCode]; const length = Buffer.byteLength(message); socket.write("HTTP/1.1 400 Bad Request\r\nConnection: close\r\nContent-type: text/html\r\nContent-Length: " + length + "\r\n\r\n" + message); } socket.destroy(); } var validHdrChars = [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 // ... 255 ]; function checkInvalidHeaderChar(val) { val += ""; if (val.length < 1) return false; if (!validHdrChars[val.charCodeAt(0)]) { debug('invalid header, index 0, char "%s"', val.charCodeAt(0)); return true; } if (val.length < 2) return false; if (!validHdrChars[val.charCodeAt(1)]) { debug('invalid header, index 1, char "%s"', val.charCodeAt(1)); return true; } if (val.length < 3) return false; if (!validHdrChars[val.charCodeAt(2)]) { debug('invalid header, index 2, char "%s"', val.charCodeAt(2)); return true; } if (val.length < 4) return false; if (!validHdrChars[val.charCodeAt(3)]) { debug('invalid header, index 3, char "%s"', val.charCodeAt(3)); return true; } for (let i = 4; i < val.length; ++i) { if (!validHdrChars[val.charCodeAt(i)]) { debug('invalid header, index "%i", char "%s"', i, val.charCodeAt(i)); return true; } } return false; } } }); // node_modules/.pnpm/engine.io@6.5.2/node_modules/engine.io/build/transports-uws/polling.js var require_polling2 = __commonJS({ "node_modules/.pnpm/engine.io@6.5.2/node_modules/engine.io/build/transports-uws/polling.js"(exports2) { "use strict"; Object.defineProperty(exports2, "__esModule", { value: true }); exports2.Polling = void 0; var transport_1 = require_transport(); var zlib_1 = require("zlib"); var accepts = require_accepts(); var debug_1 = require_src(); var debug = (0, debug_1.default)("engine:polling"); var compressionMethods = { gzip: zlib_1.createGzip, deflate: zlib_1.createDeflate }; var Polling = class extends transport_1.Transport { /** * HTTP polling constructor. * * @api public. */ constructor(req) { super(req); this.closeTimeout = 30 * 1e3; } /** * Transport name * * @api public */ get name() { return "polling"; } get supportsFraming() { return false; } /** * Overrides onRequest. * * @param req * * @api private */ onRequest(req) { const res = req.res; if (req.getMethod() === "get") { this.onPollRequest(req, res); } else if (req.getMethod() === "post") { this.onDataRequest(req, res); } else { res.writeStatus("500 Internal Server Error"); res.end(); } } /** * The client sends a request awaiting for us to send data. * * @api private */ onPollRequest(req, res) { if (this.req) { debug("request overlap"); this.onError("overlap from client"); res.writeStatus("500 Internal Server Error"); res.end(); return; } debug("setting request"); this.req = req; this.res = res; const onClose = () => { this.writable = false; this.onError("poll connection closed prematurely"); }; const cleanup = () => { this.req = this.res = null; }; req.cleanup = cleanup; res.onAborted(onClose); this.writable = true; this.emit("drain"); if (this.writable && this.shouldClose) { debug("triggering empty send to append close packet"); this.send([{ type: "noop" }]); } } /** * The client sends a request with data. * * @api private */ onDataRequest(req, res) { if (this.dataReq) { this.onError("data request overlap from client"); res.writeStatus("500 Internal Server Error"); res.end(); return; } const expectedContentLength = Number(req.headers["content-length"]); if (!expectedContentLength) { this.onError("content-length header required"); res.writeStatus("411 Length Required").end(); return; } if (expectedContentLength > this.maxHttpBufferSize) { this.onError("payload too large"); res.writeStatus("413 Payload Too Large").end(); return; } const isBinary = "application/octet-stream" === req.headers["content-type"]; if (isBinary && this.protocol === 4) { return this.onError("invalid content"); } this.dataReq = req; this.dataRes = res; let buffer; let offset = 0; const headers = { // text/html is required instead of text/plain to avoid an // unwanted download dialog on certain user-agents (GH-43) "Content-Type": "text/html" }; this.headers(req, headers); for (let key in headers) { res.writeHeader(key, String(headers[key])); } const onEnd = (buffer2) => { this.onData(buffer2.toString()); this.onDataRequestCleanup(); res.cork(() => { res.end("ok"); }); }; res.onAborted(() => { this.onDataRequestCleanup(); this.onError("data request connection closed prematurely"); }); res.onData((arrayBuffer, isLast) => { const totalLength = offset + arrayBuffer.byteLength; if (totalLength > expectedContentLength) { this.onError("content-length mismatch"); res.close(); return; } if (!buffer) { if (isLast) { onEnd(Buffer.from(arrayBuffer)); return; } buffer = Buffer.allocUnsafe(expectedContentLength); } Buffer.from(arrayBuffer).copy(buffer, offset); if (isLast) { if (totalLength != expectedContentLength) { this.onError("content-length mismatch"); res.writeStatus("400 Content-Length Mismatch").end(); this.onDataRequestCleanup(); return; } onEnd(buffer); return; } offset = totalLength; }); } /** * Cleanup request. * * @api private */ onDataRequestCleanup() { this.dataReq = this.dataRes = null; } /** * Processes the incoming data payload. * * @param {String} encoded payload * @api private */ onData(data) { debug('received "%s"', data); const callback = (packet) => { if ("close" === packet.type) { debug("got xhr close packet"); this.onClose(); return false; } this.onPacket(packet); }; if (this.protocol === 3) { this.parser.decodePayload(data, callback); } else { this.parser.decodePayload(data).forEach(callback); } } /** * Overrides onClose. * * @api private */ onClose() { if (this.writable) { this.send([{ type: "noop" }]); } super.onClose(); } /** * Writes a packet payload. * * @param {Object} packet * @api private */ send(packets) { this.writable = false; if (this.shouldClose) { debug("appending close packet to payload"); packets.push({ type: "close" }); this.shouldClose(); this.shouldClose = null; } const doWrite = (data) => { const compress = packets.some((packet) => { return packet.options && packet.options.compress; }); this.write(data, { compress }); }; if (this.protocol === 3) { this.parser.encodePayload(packets, this.supportsBinary, doWrite); } else { this.parser.encodePayload(packets, doWrite); } } /** * Writes data as response to poll request. * * @param {String} data * @param {Object} options * @api private */ write(data, options) { debug('writing "%s"', data); this.doWrite(data, options, () => { this.req.cleanup(); }); } /** * Performs the write. * * @api private */ doWrite(data, options, callback) { const isString = typeof data === "string"; const contentType = isString ? "text/plain; charset=UTF-8" : "application/octet-stream"; const headers = { "Content-Type": contentType }; const respond = (data2) => { this.headers(this.req, headers); this.res.cork(() => { Object.keys(headers).forEach((key) => { this.res.writeHeader(key, String(headers[key])); }); this.res.end(data2); }); callback(); }; if (!this.httpCompression || !options.compress) { respond(data); return; } const len = isString ? Buffer.byteLength(data) : data.length; if (len < this.httpCompression.threshold) { respond(data); return; } const encoding = accepts(this.req).encodings(["gzip", "deflate"]); if (!encoding) { respond(data); return; } this.compress(data, encoding, (err, data2) => { if (err) { this.res.writeStatus("500 Internal Server Error"); this.res.end(); callback(err); return; } headers["Content-Encoding"] = encoding; respond(data2); }); } /** * Compresses data. * * @api private */ compress(data, encoding, callback) { debug("compressing"); const buffers = []; let nread = 0; compressionMethods[encoding](this.httpCompression).on("error", callback).on("data", function(chunk) { buffers.push(chunk); nread += chunk.length; }).on("end", function() { callback(null, Buffer.concat(buffers, nread)); }).end(data); } /** * Closes the transport. * * @api private */ doClose(fn) { debug("closing"); let closeTimeoutTimer; const onClose = () => { clearTimeout(closeTimeoutTimer); fn(); this.onClose(); }; if (this.writable) { debug("transport writable - closing right away"); this.send([{ type: "close" }]); onClose(); } else if (this.discarded) { debug("transport discarded - closing right away"); onClose(); } else { debug("transport not writable - buffering orderly close"); this.shouldClose = onClose; closeTimeoutTimer = setTimeout(onClose, this.closeTimeout); } } /** * Returns headers for a response. * * @param req - request * @param {Object} extra headers * @api private */ headers(req, headers) { headers = headers || {}; const ua = req.headers["user-agent"]; if (ua && (~ua.indexOf(";MSIE") || ~ua.indexOf("Trident/"))) { headers["X-XSS-Protection"] = "0"; } this.emit("headers", headers, req); return headers; } }; exports2.Polling = Polling; } }); // node_modules/.pnpm/engine.io@6.5.2/node_modules/engine.io/build/transports-uws/websocket.js var require_websocket3 = __commonJS({ "node_modules/.pnpm/engine.io@6.5.2/node_modules/engine.io/build/transports-uws/websocket.js"(exports2) { "use strict"; Object.defineProperty(exports2, "__esModule", { value: true }); exports2.WebSocket = void 0; var transport_1 = require_transport(); var debug_1 = require_src(); var debug = (0, debug_1.default)("engine:ws"); var WebSocket = class extends transport_1.Transport { /** * WebSocket transport * * @param req * @api public */ constructor(req) { super(req); this.writable = false; this.perMessageDeflate = null; } /** * Transport name * * @api public */ get name() { return "websocket"; } /** * Advertise upgrade support. * * @api public */ get handlesUpgrades() { return true; } /** * Advertise framing support. * * @api public */ get supportsFraming() { return true; } /** * Writes a packet payload. * * @param {Array} packets * @api private */ send(packets) { this.writable = false; for (let i = 0; i < packets.length; i++) { const packet = packets[i]; const isLast = i + 1 === packets.length; const send = (data) => { const isBinary = typeof data !== "string"; const compress = this.perMessageDeflate && Buffer.byteLength(data) > this.perMessageDeflate.threshold; debug('writing "%s"', data); this.socket.send(data, isBinary, compress); if (isLast) { this.writable = true; this.emit("drain"); } }; if (packet.options && typeof packet.options.wsPreEncoded === "string") { send(packet.options.wsPreEncoded); } else { this.parser.encodePacket(packet, this.supportsBinary, send); } } } /** * Closes the transport. * * @api private */ doClose(fn) { debug("closing"); fn && fn(); this.socket.end(); } }; exports2.WebSocket = WebSocket; } }); // node_modules/.pnpm/engine.io@6.5.2/node_modules/engine.io/build/transports-uws/index.js var require_transports_uws = __commonJS({ "node_modules/.pnpm/engine.io@6.5.2/node_modules/engine.io/build/transports-uws/index.js"(exports2) { "use strict"; Object.defineProperty(exports2, "__esModule", { value: true }); var polling_1 = require_polling2(); var websocket_1 = require_websocket3(); exports2.default = { polling: polling_1.Polling, websocket: websocket_1.WebSocket }; } }); // node_modules/.pnpm/engine.io@6.5.2/node_modules/engine.io/build/userver.js var require_userver = __commonJS({ "node_modules/.pnpm/engine.io@6.5.2/node_modules/engine.io/build/userver.js"(exports2) { "use strict"; Object.defineProperty(exports2, "__esModule", { value: true }); exports2.uServer = void 0; var debug_1 = require_src(); var server_1 = require_server(); var transports_uws_1 = require_transports_uws(); var debug = (0, debug_1.default)("engine:uws"); var uServer = class extends server_1.BaseServer { init() { } cleanup() { } /** * Prepares a request by processing the query string. * * @api private */ prepare(req, res) { req.method = req.getMethod().toUpperCase(); req.url = req.getUrl(); const params = new URLSearchParams(req.getQuery()); req._query = Object.fromEntries(params.entries()); req.headers = {}; req.forEach((key, value) => { req.headers[key] = value; }); req.connection = { remoteAddress: Buffer.from(res.getRemoteAddressAsText()).toString() }; res.onAborted(() => { debug("response has been aborted"); }); } createTransport(transportName, req) { return new transports_uws_1.default[transportName](req); } /** * Attach the engine to a µWebSockets.js server * @param app * @param options */ attach(app, options = {}) { const path = this._computePath(options); app.any(path, this.handleRequest.bind(this)).ws(path, { compression: options.compression, idleTimeout: options.idleTimeout, maxBackpressure: options.maxBackpressure, maxPayloadLength: this.opts.maxHttpBufferSize, upgrade: this.handleUpgrade.bind(this), open: (ws) => { const transport = ws.getUserData().transport; transport.socket = ws; transport.writable = true; transport.emit("drain"); }, message: (ws, message, isBinary) => { ws.getUserData().transport.onData(isBinary ? message : Buffer.from(message).toString()); }, close: (ws, code, message) => { ws.getUserData().transport.onClose(code, message); } }); } _applyMiddlewares(req, res, callback) { if (this.middlewares.length === 0) { return callback(); } req.res = new ResponseWrapper(res); super._applyMiddlewares(req, req.res, (err) => { req.res.writeHead(); callback(err); }); } handleRequest(res, req) { debug('handling "%s" http request "%s"', req.getMethod(), req.getUrl()); this.prepare(req, res); req.res = res; const callback = (errorCode, errorContext) => { if (errorCode !== void 0) { this.emit("connection_error", { req, code: errorCode, message: server_1.Server.errorMessages[errorCode], context: errorContext }); this.abortRequest(req.res, errorCode, errorContext); return; } if (req._query.sid) { debug("setting new request for existing client"); this.clients[req._query.sid].transport.onRequest(req); } else { const closeConnection = (errorCode2, errorContext2) => this.abortRequest(res, errorCode2, errorContext2); this.handshake(req._query.transport, req, closeConnection); } }; this._applyMiddlewares(req, res, (err) => { if (err) { callback(server_1.Server.errors.BAD_REQUEST, { name: "MIDDLEWARE_FAILURE" }); } else { this.verify(req, false, callback); } }); } handleUpgrade(res, req, context) { debug("on upgrade"); this.prepare(req, res); req.res = res; const callback = async (errorCode, errorContext) => { if (errorCode !== void 0) { this.emit("connection_error", { req, code: errorCode, message: server_1.Server.errorMessages[errorCode], context: errorContext }); this.abortRequest(res, errorCode, errorContext); return; } const id = req._query.sid; let transport; if (id) { const client = this.clients[id]; if (!client) { debug("upgrade attempt for closed client"); res.close(); } else if (client.upgrading) { debug("transport has already been trying to upgrade"); res.close(); } else if (client.upgraded) { debug("transport had already been upgraded"); res.close(); } else { debug("upgrading existing transport"); transport = this.createTransport(req._query.transport, req); client.maybeUpgrade(transport); } } else { transport = await this.handshake(req._query.transport, req, (errorCode2, errorContext2) => this.abortRequest(res, errorCode2, errorContext2)); if (!transport) { return; } } req.res.writeStatus("101 Switching Protocols"); res.upgrade({ transport }, req.getHeader("sec-websocket-key"), req.getHeader("sec-websocket-protocol"), req.getHeader("sec-websocket-extensions"), context); }; this._applyMiddlewares(req, res, (err) => { if (err) { callback(server_1.Server.errors.BAD_REQUEST, { name: "MIDDLEWARE_FAILURE" }); } else { this.verify(req, true, callback); } }); } abortRequest(res, errorCode, errorContext) { const statusCode = errorCode === server_1.Server.errors.FORBIDDEN ? "403 Forbidden" : "400 Bad Request"; const message = errorContext && errorContext.message ? errorContext.message : server_1.Server.errorMessages[errorCode]; res.writeStatus(statusCode); res.writeHeader("Content-Type", "application/json"); res.end(JSON.stringify({ code: errorCode, message })); } }; exports2.uServer = uServer; var ResponseWrapper = class { constructor(res) { this.res = res; this.statusWritten = false; this.headers = []; this.isAborted = false; } set statusCode(status) { if (!status) { return; } this.writeStatus(status === 200 ? "200 OK" : "204 No Content"); } writeHead(status) { this.statusCode = status; } setHeader(key, value) { if (Array.isArray(value)) { value.forEach((val) => { this.writeHeader(key, val); }); } else { this.writeHeader(key, value); } } removeHeader() { } // needed by vary: https://github.com/jshttp/vary/blob/5d725d059b3871025cf753e9dfa08924d0bcfa8f/index.js#L134 getHeader() { } writeStatus(status) { if (this.isAborted) return; this.res.writeStatus(status); this.statusWritten = true; this.writeBufferedHeaders(); return this; } writeHeader(key, value) { if (this.isAborted) return; if (key === "Content-Length") { return; } if (this.statusWritten) { this.res.writeHeader(key, value); } else { this.headers.push([key, value]); } } writeBufferedHeaders() { this.headers.forEach(([key, value]) => { this.res.writeHeader(key, value); }); } end(data) { if (this.isAborted) return; this.res.cork(() => { if (!this.statusWritten) { this.writeBufferedHeaders(); } this.res.end(data); }); } onData(fn) { if (this.isAborted) return; this.res.onData(fn); } onAborted(fn) { if (this.isAborted) return; this.res.onAborted(() => { this.isAborted = true; fn(); }); } cork(fn) { if (this.isAborted) return; this.res.cork(fn); } }; } }); // node_modules/.pnpm/engine.io@6.5.2/node_modules/engine.io/build/engine.io.js var require_engine_io = __commonJS({ "node_modules/.pnpm/engine.io@6.5.2/node_modules/engine.io/build/engine.io.js"(exports2) { "use strict"; Object.defineProperty(exports2, "__esModule", { value: true }); exports2.protocol = exports2.Transport = exports2.Socket = exports2.uServer = exports2.parser = exports2.attach = exports2.listen = exports2.transports = exports2.Server = void 0; var http_1 = require("http"); var server_1 = require_server(); Object.defineProperty(exports2, "Server", { enumerable: true, get: function() { return server_1.Server; } }); var index_1 = require_transports(); exports2.transports = index_1.default; var parser = require_cjs(); exports2.parser = parser; var userver_1 = require_userver(); Object.defineProperty(exports2, "uServer", { enumerable: true, get: function() { return userver_1.uServer; } }); var socket_1 = require_socket(); Object.defineProperty(exports2, "Socket", { enumerable: true, get: function() { return socket_1.Socket; } }); var transport_1 = require_transport(); Object.defineProperty(exports2, "Transport", { enumerable: true, get: function() { return transport_1.Transport; } }); exports2.protocol = parser.protocol; function listen(port2, options, fn) { if ("function" === typeof options) { fn = options; options = {}; } const server2 = (0, http_1.createServer)(function(req, res) { res.writeHead(501); res.end("Not Implemented"); }); const engine = attach(server2, options); engine.httpServer = server2; server2.listen(port2, fn); return engine; } exports2.listen = listen; function attach(server2, options) { const engine = new server_1.Server(options); engine.attach(server2, options); return engine; } exports2.attach = attach; } }); // node_modules/.pnpm/@socket.io+component-emitter@3.1.0/node_modules/@socket.io/component-emitter/index.js var require_component_emitter = __commonJS({ "node_modules/.pnpm/@socket.io+component-emitter@3.1.0/node_modules/@socket.io/component-emitter/index.js"(exports2) { exports2.Emitter = Emitter; function Emitter(obj) { if (obj) return mixin(obj); } function mixin(obj) { for (var key in Emitter.prototype) { obj[key] = Emitter.prototype[key]; } return obj; } Emitter.prototype.on = Emitter.prototype.addEventListener = function(event, fn) { this._callbacks = this._callbacks || {}; (this._callbacks["$" + event] = this._callbacks["$" + event] || []).push(fn); return this; }; Emitter.prototype.once = function(event, fn) { function on2() { this.off(event, on2); fn.apply(this, arguments); } on2.fn = fn; this.on(event, on2); return this; }; Emitter.prototype.off = Emitter.prototype.removeListener = Emitter.prototype.removeAllListeners = Emitter.prototype.removeEventListener = function(event, fn) { this._callbacks = this._callbacks || {}; if (0 == arguments.length) { this._callbacks = {}; return this; } var callbacks = this._callbacks["$" + event]; if (!callbacks) return this; if (1 == arguments.length) { delete this._callbacks["$" + event]; return this; } var cb; for (var i = 0; i < callbacks.length; i++) { cb = callbacks[i]; if (cb === fn || cb.fn === fn) { callbacks.splice(i, 1); break; } } if (callbacks.length === 0) { delete this._callbacks["$" + event]; } return this; }; Emitter.prototype.emit = function(event) { this._callbacks = this._callbacks || {}; var args = new Array(arguments.length - 1), callbacks = this._callbacks["$" + event]; for (var i = 1; i < arguments.length; i++) { args[i - 1] = arguments[i]; } if (callbacks) { callbacks = callbacks.slice(0); for (var i = 0, len = callbacks.length; i < len; ++i) { callbacks[i].apply(this, args); } } return this; }; Emitter.prototype.emitReserved = Emitter.prototype.emit; Emitter.prototype.listeners = function(event) { this._callbacks = this._callbacks || {}; return this._callbacks["$" + event] || []; }; Emitter.prototype.hasListeners = function(event) { return !!this.listeners(event).length; }; } }); // node_modules/.pnpm/socket.io-parser@4.2.4/node_modules/socket.io-parser/build/cjs/is-binary.js var require_is_binary = __commonJS({ "node_modules/.pnpm/socket.io-parser@4.2.4/node_modules/socket.io-parser/build/cjs/is-binary.js"(exports2) { "use strict"; Object.defineProperty(exports2, "__esModule", { value: true }); exports2.hasBinary = exports2.isBinary = void 0; var withNativeArrayBuffer = typeof ArrayBuffer === "function"; var isView = (obj) => { return typeof ArrayBuffer.isView === "function" ? ArrayBuffer.isView(obj) : obj.buffer instanceof ArrayBuffer; }; var toString = Object.prototype.toString; var withNativeBlob = typeof Blob === "function" || typeof Blob !== "undefined" && toString.call(Blob) === "[object BlobConstructor]"; var withNativeFile = typeof File === "function" || typeof File !== "undefined" && toString.call(File) === "[object FileConstructor]"; function isBinary(obj) { return withNativeArrayBuffer && (obj instanceof ArrayBuffer || isView(obj)) || withNativeBlob && obj instanceof Blob || withNativeFile && obj instanceof File; } exports2.isBinary = isBinary; function hasBinary(obj, toJSON) { if (!obj || typeof obj !== "object") { return false; } if (Array.isArray(obj)) { for (let i = 0, l = obj.length; i < l; i++) { if (hasBinary(obj[i])) { return true; } } return false; } if (isBinary(obj)) { return true; } if (obj.toJSON && typeof obj.toJSON === "function" && arguments.length === 1) { return hasBinary(obj.toJSON(), true); } for (const key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key) && hasBinary(obj[key])) { return true; } } return false; } exports2.hasBinary = hasBinary; } }); // node_modules/.pnpm/socket.io-parser@4.2.4/node_modules/socket.io-parser/build/cjs/binary.js var require_binary = __commonJS({ "node_modules/.pnpm/socket.io-parser@4.2.4/node_modules/socket.io-parser/build/cjs/binary.js"(exports2) { "use strict"; Object.defineProperty(exports2, "__esModule", { value: true }); exports2.reconstructPacket = exports2.deconstructPacket = void 0; var is_binary_js_1 = require_is_binary(); function deconstructPacket(packet) { const buffers = []; const packetData = packet.data; const pack = packet; pack.data = _deconstructPacket(packetData, buffers); pack.attachments = buffers.length; return { packet: pack, buffers }; } exports2.deconstructPacket = deconstructPacket; function _deconstructPacket(data, buffers) { if (!data) return data; if ((0, is_binary_js_1.isBinary)(data)) { const placeholder = { _placeholder: true, num: buffers.length }; buffers.push(data); return placeholder; } else if (Array.isArray(data)) { const newData = new Array(data.length); for (let i = 0; i < data.length; i++) { newData[i] = _deconstructPacket(data[i], buffers); } return newData; } else if (typeof data === "object" && !(data instanceof Date)) { const newData = {}; for (const key in data) { if (Object.prototype.hasOwnProperty.call(data, key)) { newData[key] = _deconstructPacket(data[key], buffers); } } return newData; } return data; } function reconstructPacket(packet, buffers) { packet.data = _reconstructPacket(packet.data, buffers); delete packet.attachments; return packet; } exports2.reconstructPacket = reconstructPacket; function _reconstructPacket(data, buffers) { if (!data) return data; if (data && data._placeholder === true) { const isIndexValid = typeof data.num === "number" && data.num >= 0 && data.num < buffers.length; if (isIndexValid) { return buffers[data.num]; } else { throw new Error("illegal attachments"); } } else if (Array.isArray(data)) { for (let i = 0; i < data.length; i++) { data[i] = _reconstructPacket(data[i], buffers); } } else if (typeof data === "object") { for (const key in data) { if (Object.prototype.hasOwnProperty.call(data, key)) { data[key] = _reconstructPacket(data[key], buffers); } } } return data; } } }); // node_modules/.pnpm/socket.io-parser@4.2.4/node_modules/socket.io-parser/build/cjs/index.js var require_cjs2 = __commonJS({ "node_modules/.pnpm/socket.io-parser@4.2.4/node_modules/socket.io-parser/build/cjs/index.js"(exports2) { "use strict"; Object.defineProperty(exports2, "__esModule", { value: true }); exports2.Decoder = exports2.Encoder = exports2.PacketType = exports2.protocol = void 0; var component_emitter_1 = require_component_emitter(); var binary_js_1 = require_binary(); var is_binary_js_1 = require_is_binary(); var debug_1 = require_src(); var debug = (0, debug_1.default)("socket.io-parser"); var RESERVED_EVENTS = [ "connect", "connect_error", "disconnect", "disconnecting", "newListener", "removeListener" // used by the Node.js EventEmitter ]; exports2.protocol = 5; var PacketType; (function(PacketType2) { PacketType2[PacketType2["CONNECT"] = 0] = "CONNECT"; PacketType2[PacketType2["DISCONNECT"] = 1] = "DISCONNECT"; PacketType2[PacketType2["EVENT"] = 2] = "EVENT"; PacketType2[PacketType2["ACK"] = 3] = "ACK"; PacketType2[PacketType2["CONNECT_ERROR"] = 4] = "CONNECT_ERROR"; PacketType2[PacketType2["BINARY_EVENT"] = 5] = "BINARY_EVENT"; PacketType2[PacketType2["BINARY_ACK"] = 6] = "BINARY_ACK"; })(PacketType = exports2.PacketType || (exports2.PacketType = {})); var Encoder = class { /** * Encoder constructor * * @param {function} replacer - custom replacer to pass down to JSON.parse */ constructor(replacer) { this.replacer = replacer; } /** * Encode a packet as a single string if non-binary, or as a * buffer sequence, depending on packet type. * * @param {Object} obj - packet object */ encode(obj) { debug("encoding packet %j", obj); if (obj.type === PacketType.EVENT || obj.type === PacketType.ACK) { if ((0, is_binary_js_1.hasBinary)(obj)) { return this.encodeAsBinary({ type: obj.type === PacketType.EVENT ? PacketType.BINARY_EVENT : PacketType.BINARY_ACK, nsp: obj.nsp, data: obj.data, id: obj.id }); } } return [this.encodeAsString(obj)]; } /** * Encode packet as string. */ encodeAsString(obj) { let str = "" + obj.type; if (obj.type === PacketType.BINARY_EVENT || obj.type === PacketType.BINARY_ACK) { str += obj.attachments + "-"; } if (obj.nsp && "/" !== obj.nsp) { str += obj.nsp + ","; } if (null != obj.id) { str += obj.id; } if (null != obj.data) { str += JSON.stringify(obj.data, this.replacer); } debug("encoded %j as %s", obj, str); return str; } /** * Encode packet as 'buffer sequence' by removing blobs, and * deconstructing packet into object with placeholders and * a list of buffers. */ encodeAsBinary(obj) { const deconstruction = (0, binary_js_1.deconstructPacket)(obj); const pack = this.encodeAsString(deconstruction.packet); const buffers = deconstruction.buffers; buffers.unshift(pack); return buffers; } }; exports2.Encoder = Encoder; function isObject(value) { return Object.prototype.toString.call(value) === "[object Object]"; } var Decoder = class _Decoder extends component_emitter_1.Emitter { /** * Decoder constructor * * @param {function} reviver - custom reviver to pass down to JSON.stringify */ constructor(reviver) { super(); this.reviver = reviver; } /** * Decodes an encoded packet string into packet JSON. * * @param {String} obj - encoded packet */ add(obj) { let packet; if (typeof obj === "string") { if (this.reconstructor) { throw new Error("got plaintext data when reconstructing a packet"); } packet = this.decodeString(obj); const isBinaryEvent = packet.type === PacketType.BINARY_EVENT; if (isBinaryEvent || packet.type === PacketType.BINARY_ACK) { packet.type = isBinaryEvent ? PacketType.EVENT : PacketType.ACK; this.reconstructor = new BinaryReconstructor(packet); if (packet.attachments === 0) { super.emitReserved("decoded", packet); } } else { super.emitReserved("decoded", packet); } } else if ((0, is_binary_js_1.isBinary)(obj) || obj.base64) { if (!this.reconstructor) { throw new Error("got binary data when not reconstructing a packet"); } else { packet = this.reconstructor.takeBinaryData(obj); if (packet) { this.reconstructor = null; super.emitReserved("decoded", packet); } } } else { throw new Error("Unknown type: " + obj); } } /** * Decode a packet String (JSON data) * * @param {String} str * @return {Object} packet */ decodeString(str) { let i = 0; const p = { type: Number(str.charAt(0)) }; if (PacketType[p.type] === void 0) { throw new Error("unknown packet type " + p.type); } if (p.type === PacketType.BINARY_EVENT || p.type === PacketType.BINARY_ACK) { const start = i + 1; while (str.charAt(++i) !== "-" && i != str.length) { } const buf = str.substring(start, i); if (buf != Number(buf) || str.charAt(i) !== "-") { throw new Error("Illegal attachments"); } p.attachments = Number(buf); } if ("/" === str.charAt(i + 1)) { const start = i + 1; while (++i) { const c = str.charAt(i); if ("," === c) break; if (i === str.length) break; } p.nsp = str.substring(start, i); } else { p.nsp = "/"; } const next = str.charAt(i + 1); if ("" !== next && Number(next) == next) { const start = i + 1; while (++i) { const c = str.charAt(i); if (null == c || Number(c) != c) { --i; break; } if (i === str.length) break; } p.id = Number(str.substring(start, i + 1)); } if (str.charAt(++i)) { const payload = this.tryParse(str.substr(i)); if (_Decoder.isPayloadValid(p.type, payload)) { p.data = payload; } else { throw new Error("invalid payload"); } } debug("decoded %s as %j", str, p); return p; } tryParse(str) { try { return JSON.parse(str, this.reviver); } catch (e) { return false; } } static isPayloadValid(type, payload) { switch (type) { case PacketType.CONNECT: return isObject(payload); case PacketType.DISCONNECT: return payload === void 0; case PacketType.CONNECT_ERROR: return typeof payload === "string" || isObject(payload); case PacketType.EVENT: case PacketType.BINARY_EVENT: return Array.isArray(payload) && (typeof payload[0] === "number" || typeof payload[0] === "string" && RESERVED_EVENTS.indexOf(payload[0]) === -1); case PacketType.ACK: case PacketType.BINARY_ACK: return Array.isArray(payload); } } /** * Deallocates a parser's resources */ destroy() { if (this.reconstructor) { this.reconstructor.finishedReconstruction(); this.reconstructor = null; } } }; exports2.Decoder = Decoder; var BinaryReconstructor = class { constructor(packet) { this.packet = packet; this.buffers = []; this.reconPack = packet; } /** * Method to be called when binary data received from connection * after a BINARY_EVENT packet. * * @param {Buffer | ArrayBuffer} binData - the raw binary data received * @return {null | Object} returns null if more binary data is expected or * a reconstructed packet object if all buffers have been received. */ takeBinaryData(binData) { this.buffers.push(binData); if (this.buffers.length === this.reconPack.attachments) { const packet = (0, binary_js_1.reconstructPacket)(this.reconPack, this.buffers); this.finishedReconstruction(); return packet; } return null; } /** * Cleans up binary packet reconstruction variables. */ finishedReconstruction() { this.reconPack = null; this.buffers = []; } }; } }); // node_modules/.pnpm/socket.io@4.7.2/node_modules/socket.io/dist/client.js var require_client = __commonJS({ "node_modules/.pnpm/socket.io@4.7.2/node_modules/socket.io/dist/client.js"(exports2) { "use strict"; Object.defineProperty(exports2, "__esModule", { value: true }); exports2.Client = void 0; var socket_io_parser_1 = require_cjs2(); var debugModule = require_src(); var url = require("url"); var debug = debugModule("socket.io:client"); var Client = class { /** * Client constructor. * * @param server instance * @param conn * @package */ constructor(server2, conn) { this.sockets = /* @__PURE__ */ new Map(); this.nsps = /* @__PURE__ */ new Map(); this.server = server2; this.conn = conn; this.encoder = server2.encoder; this.decoder = new server2._parser.Decoder(); this.id = conn.id; this.setup(); } /** * @return the reference to the request that originated the Engine.IO connection * * @public */ get request() { return this.conn.request; } /** * Sets up event listeners. * * @private */ setup() { this.onclose = this.onclose.bind(this); this.ondata = this.ondata.bind(this); this.onerror = this.onerror.bind(this); this.ondecoded = this.ondecoded.bind(this); this.decoder.on("decoded", this.ondecoded); this.conn.on("data", this.ondata); this.conn.on("error", this.onerror); this.conn.on("close", this.onclose); this.connectTimeout = setTimeout(() => { if (this.nsps.size === 0) { debug("no namespace joined yet, close the client"); this.close(); } else { debug("the client has already joined a namespace, nothing to do"); } }, this.server._connectTimeout); } /** * Connects a client to a namespace. * * @param {String} name - the namespace * @param {Object} auth - the auth parameters * @private */ connect(name, auth = {}) { if (this.server._nsps.has(name)) { debug("connecting to namespace %s", name); return this.doConnect(name, auth); } this.server._checkNamespace(name, auth, (dynamicNspName) => { if (dynamicNspName) { this.doConnect(name, auth); } else { debug("creation of namespace %s was denied", name); this._packet({ type: socket_io_parser_1.PacketType.CONNECT_ERROR, nsp: name, data: { message: "Invalid namespace" } }); } }); } /** * Connects a client to a namespace. * * @param name - the namespace * @param {Object} auth - the auth parameters * * @private */ doConnect(name, auth) { const nsp = this.server.of(name); nsp._add(this, auth, (socket) => { this.sockets.set(socket.id, socket); this.nsps.set(nsp.name, socket); if (this.connectTimeout) { clearTimeout(this.connectTimeout); this.connectTimeout = void 0; } }); } /** * Disconnects from all namespaces and closes transport. * * @private */ _disconnect() { for (const socket of this.sockets.values()) { socket.disconnect(); } this.sockets.clear(); this.close(); } /** * Removes a socket. Called by each `Socket`. * * @private */ _remove(socket) { if (this.sockets.has(socket.id)) { const nsp = this.sockets.get(socket.id).nsp.name; this.sockets.delete(socket.id); this.nsps.delete(nsp); } else { debug("ignoring remove for %s", socket.id); } } /** * Closes the underlying connection. * * @private */ close() { if ("open" === this.conn.readyState) { debug("forcing transport close"); this.conn.close(); this.onclose("forced server close"); } } /** * Writes a packet to the transport. * * @param {Object} packet object * @param {Object} opts * @private */ _packet(packet, opts = {}) { if (this.conn.readyState !== "open") { debug("ignoring packet write %j", packet); return; } const encodedPackets = opts.preEncoded ? packet : this.encoder.encode(packet); this.writeToEngine(encodedPackets, opts); } writeToEngine(encodedPackets, opts) { if (opts.volatile && !this.conn.transport.writable) { debug("volatile packet is discarded since the transport is not currently writable"); return; } const packets = Array.isArray(encodedPackets) ? encodedPackets : [encodedPackets]; for (const encodedPacket of packets) { this.conn.write(encodedPacket, opts); } } /** * Called with incoming transport data. * * @private */ ondata(data) { try { this.decoder.add(data); } catch (e) { debug("invalid packet format"); this.onerror(e); } } /** * Called when parser fully decodes a packet. * * @private */ ondecoded(packet) { let namespace; let authPayload; if (this.conn.protocol === 3) { const parsed = url.parse(packet.nsp, true); namespace = parsed.pathname; authPayload = parsed.query; } else { namespace = packet.nsp; authPayload = packet.data; } const socket = this.nsps.get(namespace); if (!socket && packet.type === socket_io_parser_1.PacketType.CONNECT) { this.connect(namespace, authPayload); } else if (socket && packet.type !== socket_io_parser_1.PacketType.CONNECT && packet.type !== socket_io_parser_1.PacketType.CONNECT_ERROR) { process.nextTick(function() { socket._onpacket(packet); }); } else { debug("invalid state (packet type: %s)", packet.type); this.close(); } } /** * Handles an error. * * @param {Object} err object * @private */ onerror(err) { for (const socket of this.sockets.values()) { socket._onerror(err); } this.conn.close(); } /** * Called upon transport close. * * @param reason * @param description * @private */ onclose(reason, description) { debug("client close with reason %s", reason); this.destroy(); for (const socket of this.sockets.values()) { socket._onclose(reason, description); } this.sockets.clear(); this.decoder.destroy(); } /** * Cleans up event listeners. * @private */ destroy() { this.conn.removeListener("data", this.ondata); this.conn.removeListener("error", this.onerror); this.conn.removeListener("close", this.onclose); this.decoder.removeListener("decoded", this.ondecoded); if (this.connectTimeout) { clearTimeout(this.connectTimeout); this.connectTimeout = void 0; } } }; exports2.Client = Client; } }); // node_modules/.pnpm/socket.io@4.7.2/node_modules/socket.io/dist/typed-events.js var require_typed_events = __commonJS({ "node_modules/.pnpm/socket.io@4.7.2/node_modules/socket.io/dist/typed-events.js"(exports2) { "use strict"; Object.defineProperty(exports2, "__esModule", { value: true }); exports2.StrictEventEmitter = void 0; var events_1 = require("events"); var StrictEventEmitter = class extends events_1.EventEmitter { /** * Adds the `listener` function as an event listener for `ev`. * * @param ev Name of the event * @param listener Callback function */ on(ev, listener) { return super.on(ev, listener); } /** * Adds a one-time `listener` function as an event listener for `ev`. * * @param ev Name of the event * @param listener Callback function */ once(ev, listener) { return super.once(ev, listener); } /** * Emits an event. * * @param ev Name of the event * @param args Values to send to listeners of this event */ emit(ev, ...args) { return super.emit(ev, ...args); } /** * Emits a reserved event. * * This method is `protected`, so that only a class extending * `StrictEventEmitter` can emit its own reserved events. * * @param ev Reserved event name * @param args Arguments to emit along with the event */ emitReserved(ev, ...args) { return super.emit(ev, ...args); } /** * Emits an event. * * This method is `protected`, so that only a class extending * `StrictEventEmitter` can get around the strict typing. This is useful for * calling `emit.apply`, which can be called as `emitUntyped.apply`. * * @param ev Event name * @param args Arguments to emit along with the event */ emitUntyped(ev, ...args) { return super.emit(ev, ...args); } /** * Returns the listeners listening to an event. * * @param event Event name * @returns Array of listeners subscribed to `event` */ listeners(event) { return super.listeners(event); } }; exports2.StrictEventEmitter = StrictEventEmitter; } }); // node_modules/.pnpm/socket.io@4.7.2/node_modules/socket.io/dist/broadcast-operator.js var require_broadcast_operator = __commonJS({ "node_modules/.pnpm/socket.io@4.7.2/node_modules/socket.io/dist/broadcast-operator.js"(exports2) { "use strict"; Object.defineProperty(exports2, "__esModule", { value: true }); exports2.RemoteSocket = exports2.BroadcastOperator = void 0; var socket_1 = require_socket2(); var socket_io_parser_1 = require_cjs2(); var BroadcastOperator = class _BroadcastOperator { constructor(adapter, rooms = /* @__PURE__ */ new Set(), exceptRooms = /* @__PURE__ */ new Set(), flags = {}) { this.adapter = adapter; this.rooms = rooms; this.exceptRooms = exceptRooms; this.flags = flags; } /** * Targets a room when emitting. * * @example * // the “foo” event will be broadcast to all connected clients in the “room-101” room * io.to("room-101").emit("foo", "bar"); * * // with an array of rooms (a client will be notified at most once) * io.to(["room-101", "room-102"]).emit("foo", "bar"); * * // with multiple chained calls * io.to("room-101").to("room-102").emit("foo", "bar"); * * @param room - a room, or an array of rooms * @return a new {@link BroadcastOperator} instance for chaining */ to(room) { const rooms = new Set(this.rooms); if (Array.isArray(room)) { room.forEach((r) => rooms.add(r)); } else { rooms.add(room); } return new _BroadcastOperator(this.adapter, rooms, this.exceptRooms, this.flags); } /** * Targets a room when emitting. Similar to `to()`, but might feel clearer in some cases: * * @example * // disconnect all clients in the "room-101" room * io.in("room-101").disconnectSockets(); * * @param room - a room, or an array of rooms * @return a new {@link BroadcastOperator} instance for chaining */ in(room) { return this.to(room); } /** * Excludes a room when emitting. * * @example * // the "foo" event will be broadcast to all connected clients, except the ones that are in the "room-101" room * io.except("room-101").emit("foo", "bar"); * * // with an array of rooms * io.except(["room-101", "room-102"]).emit("foo", "bar"); * * // with multiple chained calls * io.except("room-101").except("room-102").emit("foo", "bar"); * * @param room - a room, or an array of rooms * @return a new {@link BroadcastOperator} instance for chaining */ except(room) { const exceptRooms = new Set(this.exceptRooms); if (Array.isArray(room)) { room.forEach((r) => exceptRooms.add(r)); } else { exceptRooms.add(room); } return new _BroadcastOperator(this.adapter, this.rooms, exceptRooms, this.flags); } /** * Sets the compress flag. * * @example * io.compress(false).emit("hello"); * * @param compress - if `true`, compresses the sending data * @return a new BroadcastOperator instance */ compress(compress) { const flags = Object.assign({}, this.flags, { compress }); return new _BroadcastOperator(this.adapter, this.rooms, this.exceptRooms, flags); } /** * Sets a modifier for a subsequent event emission that the event data may be lost if the client is not ready to * receive messages (because of network slowness or other issues, or because they’re connected through long polling * and is in the middle of a request-response cycle). * * @example * io.volatile.emit("hello"); // the clients may or may not receive it * * @return a new BroadcastOperator instance */ get volatile() { const flags = Object.assign({}, this.flags, { volatile: true }); return new _BroadcastOperator(this.adapter, this.rooms, this.exceptRooms, flags); } /** * Sets a modifier for a subsequent event emission that the event data will only be broadcast to the current node. * * @example * // the “foo” event will be broadcast to all connected clients on this node * io.local.emit("foo", "bar"); * * @return a new {@link BroadcastOperator} instance for chaining */ get local() { const flags = Object.assign({}, this.flags, { local: true }); return new _BroadcastOperator(this.adapter, this.rooms, this.exceptRooms, flags); } /** * Adds a timeout in milliseconds for the next operation * * @example * io.timeout(1000).emit("some-event", (err, responses) => { * if (err) { * // some clients did not acknowledge the event in the given delay * } else { * console.log(responses); // one response per client * } * }); * * @param timeout */ timeout(timeout) { const flags = Object.assign({}, this.flags, { timeout }); return new _BroadcastOperator(this.adapter, this.rooms, this.exceptRooms, flags); } /** * Emits to all clients. * * @example * // the “foo” event will be broadcast to all connected clients * io.emit("foo", "bar"); * * // the “foo” event will be broadcast to all connected clients in the “room-101” room * io.to("room-101").emit("foo", "bar"); * * // with an acknowledgement expected from all connected clients * io.timeout(1000).emit("some-event", (err, responses) => { * if (err) { * // some clients did not acknowledge the event in the given delay * } else { * console.log(responses); // one response per client * } * }); * * @return Always true */ emit(ev, ...args) { if (socket_1.RESERVED_EVENTS.has(ev)) { throw new Error(`"${String(ev)}" is a reserved event name`); } const data = [ev, ...args]; const packet = { type: socket_io_parser_1.PacketType.EVENT, data }; const withAck = typeof data[data.length - 1] === "function"; if (!withAck) { this.adapter.broadcast(packet, { rooms: this.rooms, except: this.exceptRooms, flags: this.flags }); return true; } const ack = data.pop(); let timedOut = false; let responses = []; const timer = setTimeout(() => { timedOut = true; ack.apply(this, [ new Error("operation has timed out"), this.flags.expectSingleResponse ? null : responses ]); }, this.flags.timeout); let expectedServerCount = -1; let actualServerCount = 0; let expectedClientCount = 0; const checkCompleteness = () => { if (!timedOut && expectedServerCount === actualServerCount && responses.length === expectedClientCount) { clearTimeout(timer); ack.apply(this, [ null, this.flags.expectSingleResponse ? null : responses ]); } }; this.adapter.broadcastWithAck(packet, { rooms: this.rooms, except: this.exceptRooms, flags: this.flags }, (clientCount) => { expectedClientCount += clientCount; actualServerCount++; checkCompleteness(); }, (clientResponse) => { responses.push(clientResponse); checkCompleteness(); }); this.adapter.serverCount().then((serverCount) => { expectedServerCount = serverCount; checkCompleteness(); }); return true; } /** * Emits an event and waits for an acknowledgement from all clients. * * @example * try { * const responses = await io.timeout(1000).emitWithAck("some-event"); * console.log(responses); // one response per client * } catch (e) { * // some clients did not acknowledge the event in the given delay * } * * @return a Promise that will be fulfilled when all clients have acknowledged the event */ emitWithAck(ev, ...args) { return new Promise((resolve, reject) => { args.push((err, responses) => { if (err) { err.responses = responses; return reject(err); } else { return resolve(responses); } }); this.emit(ev, ...args); }); } /** * Gets a list of clients. * * @deprecated this method will be removed in the next major release, please use {@link Server#serverSideEmit} or * {@link fetchSockets} instead. */ allSockets() { if (!this.adapter) { throw new Error("No adapter for this namespace, are you trying to get the list of clients of a dynamic namespace?"); } return this.adapter.sockets(this.rooms); } /** * Returns the matching socket instances. This method works across a cluster of several Socket.IO servers. * * Note: this method also works within a cluster of multiple Socket.IO servers, with a compatible {@link Adapter}. * * @example * // return all Socket instances * const sockets = await io.fetchSockets(); * * // return all Socket instances in the "room1" room * const sockets = await io.in("room1").fetchSockets(); * * for (const socket of sockets) { * console.log(socket.id); * console.log(socket.handshake); * console.log(socket.rooms); * console.log(socket.data); * * socket.emit("hello"); * socket.join("room1"); * socket.leave("room2"); * socket.disconnect(); * } */ fetchSockets() { return this.adapter.fetchSockets({ rooms: this.rooms, except: this.exceptRooms, flags: this.flags }).then((sockets) => { return sockets.map((socket) => { if (socket instanceof socket_1.Socket) { return socket; } else { return new RemoteSocket(this.adapter, socket); } }); }); } /** * Makes the matching socket instances join the specified rooms. * * Note: this method also works within a cluster of multiple Socket.IO servers, with a compatible {@link Adapter}. * * @example * * // make all socket instances join the "room1" room * io.socketsJoin("room1"); * * // make all socket instances in the "room1" room join the "room2" and "room3" rooms * io.in("room1").socketsJoin(["room2", "room3"]); * * @param room - a room, or an array of rooms */ socketsJoin(room) { this.adapter.addSockets({ rooms: this.rooms, except: this.exceptRooms, flags: this.flags }, Array.isArray(room) ? room : [room]); } /** * Makes the matching socket instances leave the specified rooms. * * Note: this method also works within a cluster of multiple Socket.IO servers, with a compatible {@link Adapter}. * * @example * // make all socket instances leave the "room1" room * io.socketsLeave("room1"); * * // make all socket instances in the "room1" room leave the "room2" and "room3" rooms * io.in("room1").socketsLeave(["room2", "room3"]); * * @param room - a room, or an array of rooms */ socketsLeave(room) { this.adapter.delSockets({ rooms: this.rooms, except: this.exceptRooms, flags: this.flags }, Array.isArray(room) ? room : [room]); } /** * Makes the matching socket instances disconnect. * * Note: this method also works within a cluster of multiple Socket.IO servers, with a compatible {@link Adapter}. * * @example * // make all socket instances disconnect (the connections might be kept alive for other namespaces) * io.disconnectSockets(); * * // make all socket instances in the "room1" room disconnect and close the underlying connections * io.in("room1").disconnectSockets(true); * * @param close - whether to close the underlying connection */ disconnectSockets(close = false) { this.adapter.disconnectSockets({ rooms: this.rooms, except: this.exceptRooms, flags: this.flags }, close); } }; exports2.BroadcastOperator = BroadcastOperator; var RemoteSocket = class { constructor(adapter, details) { this.id = details.id; this.handshake = details.handshake; this.rooms = new Set(details.rooms); this.data = details.data; this.operator = new BroadcastOperator(adapter, /* @__PURE__ */ new Set([this.id]), /* @__PURE__ */ new Set(), { expectSingleResponse: true // so that remoteSocket.emit() with acknowledgement behaves like socket.emit() }); } /** * Adds a timeout in milliseconds for the next operation. * * @example * const sockets = await io.fetchSockets(); * * for (const socket of sockets) { * if (someCondition) { * socket.timeout(1000).emit("some-event", (err) => { * if (err) { * // the client did not acknowledge the event in the given delay * } * }); * } * } * * // note: if possible, using a room instead of looping over all sockets is preferable * io.timeout(1000).to(someConditionRoom).emit("some-event", (err, responses) => { * // ... * }); * * @param timeout */ timeout(timeout) { return this.operator.timeout(timeout); } emit(ev, ...args) { return this.operator.emit(ev, ...args); } /** * Joins a room. * * @param {String|Array} room - room or array of rooms */ join(room) { return this.operator.socketsJoin(room); } /** * Leaves a room. * * @param {String} room */ leave(room) { return this.operator.socketsLeave(room); } /** * Disconnects this client. * * @param {Boolean} close - if `true`, closes the underlying connection * @return {Socket} self */ disconnect(close = false) { this.operator.disconnectSockets(close); return this; } }; exports2.RemoteSocket = RemoteSocket; } }); // node_modules/.pnpm/socket.io@4.7.2/node_modules/socket.io/dist/socket.js var require_socket2 = __commonJS({ "node_modules/.pnpm/socket.io@4.7.2/node_modules/socket.io/dist/socket.js"(exports2) { "use strict"; var __importDefault = exports2 && exports2.__importDefault || function(mod) { return mod && mod.__esModule ? mod : { "default": mod }; }; Object.defineProperty(exports2, "__esModule", { value: true }); exports2.Socket = exports2.RESERVED_EVENTS = void 0; var socket_io_parser_1 = require_cjs2(); var debug_1 = __importDefault(require_src()); var typed_events_1 = require_typed_events(); var base64id_1 = __importDefault(require_base64id()); var broadcast_operator_1 = require_broadcast_operator(); var debug = (0, debug_1.default)("socket.io:socket"); var RECOVERABLE_DISCONNECT_REASONS = /* @__PURE__ */ new Set([ "transport error", "transport close", "forced close", "ping timeout", "server shutting down", "forced server close" ]); exports2.RESERVED_EVENTS = /* @__PURE__ */ new Set([ "connect", "connect_error", "disconnect", "disconnecting", "newListener", "removeListener" ]); function noop() { } var Socket2 = class extends typed_events_1.StrictEventEmitter { /** * Interface to a `Client` for a given `Namespace`. * * @param {Namespace} nsp * @param {Client} client * @param {Object} auth * @package */ constructor(nsp, client, auth, previousSession) { super(); this.nsp = nsp; this.client = client; this.recovered = false; this.data = {}; this.connected = false; this.acks = /* @__PURE__ */ new Map(); this.fns = []; this.flags = {}; this.server = nsp.server; this.adapter = this.nsp.adapter; if (previousSession) { this.id = previousSession.sid; this.pid = previousSession.pid; previousSession.rooms.forEach((room) => this.join(room)); this.data = previousSession.data; previousSession.missedPackets.forEach((packet) => { this.packet({ type: socket_io_parser_1.PacketType.EVENT, data: packet }); }); this.recovered = true; } else { if (client.conn.protocol === 3) { this.id = nsp.name !== "/" ? nsp.name + "#" + client.id : client.id; } else { this.id = base64id_1.default.generateId(); } if (this.server._opts.connectionStateRecovery) { this.pid = base64id_1.default.generateId(); } } this.handshake = this.buildHandshake(auth); this.on("error", noop); } /** * Builds the `handshake` BC object * * @private */ buildHandshake(auth) { var _a, _b, _c, _d; return { headers: ((_a = this.request) === null || _a === void 0 ? void 0 : _a.headers) || {}, time: /* @__PURE__ */ new Date() + "", address: this.conn.remoteAddress, xdomain: !!((_b = this.request) === null || _b === void 0 ? void 0 : _b.headers.origin), // @ts-ignore secure: !this.request || !!this.request.connection.encrypted, issued: +/* @__PURE__ */ new Date(), url: (_c = this.request) === null || _c === void 0 ? void 0 : _c.url, // @ts-ignore query: ((_d = this.request) === null || _d === void 0 ? void 0 : _d._query) || {}, auth }; } /** * Emits to this client. * * @example * io.on("connection", (socket) => { * socket.emit("hello", "world"); * * // all serializable datastructures are supported (no need to call JSON.stringify) * socket.emit("hello", 1, "2", { 3: ["4"], 5: Buffer.from([6]) }); * * // with an acknowledgement from the client * socket.emit("hello", "world", (val) => { * // ... * }); * }); * * @return Always returns `true`. */ emit(ev, ...args) { if (exports2.RESERVED_EVENTS.has(ev)) { throw new Error(`"${String(ev)}" is a reserved event name`); } const data = [ev, ...args]; const packet = { type: socket_io_parser_1.PacketType.EVENT, data }; if (typeof data[data.length - 1] === "function") { const id = this.nsp._ids++; debug("emitting packet with ack id %d", id); this.registerAckCallback(id, data.pop()); packet.id = id; } const flags = Object.assign({}, this.flags); this.flags = {}; if (this.nsp.server.opts.connectionStateRecovery) { this.adapter.broadcast(packet, { rooms: /* @__PURE__ */ new Set([this.id]), except: /* @__PURE__ */ new Set(), flags }); } else { this.notifyOutgoingListeners(packet); this.packet(packet, flags); } return true; } /** * Emits an event and waits for an acknowledgement * * @example * io.on("connection", async (socket) => { * // without timeout * const response = await socket.emitWithAck("hello", "world"); * * // with a specific timeout * try { * const response = await socket.timeout(1000).emitWithAck("hello", "world"); * } catch (err) { * // the client did not acknowledge the event in the given delay * } * }); * * @return a Promise that will be fulfilled when the client acknowledges the event */ emitWithAck(ev, ...args) { const withErr = this.flags.timeout !== void 0; return new Promise((resolve, reject) => { args.push((arg1, arg2) => { if (withErr) { return arg1 ? reject(arg1) : resolve(arg2); } else { return resolve(arg1); } }); this.emit(ev, ...args); }); } /** * @private */ registerAckCallback(id, ack) { const timeout = this.flags.timeout; if (timeout === void 0) { this.acks.set(id, ack); return; } const timer = setTimeout(() => { debug("event with ack id %d has timed out after %d ms", id, timeout); this.acks.delete(id); ack.call(this, new Error("operation has timed out")); }, timeout); this.acks.set(id, (...args) => { clearTimeout(timer); ack.apply(this, [null, ...args]); }); } /** * Targets a room when broadcasting. * * @example * io.on("connection", (socket) => { * // the “foo” event will be broadcast to all connected clients in the “room-101” room, except this socket * socket.to("room-101").emit("foo", "bar"); * * // the code above is equivalent to: * io.to("room-101").except(socket.id).emit("foo", "bar"); * * // with an array of rooms (a client will be notified at most once) * socket.to(["room-101", "room-102"]).emit("foo", "bar"); * * // with multiple chained calls * socket.to("room-101").to("room-102").emit("foo", "bar"); * }); * * @param room - a room, or an array of rooms * @return a new {@link BroadcastOperator} instance for chaining */ to(room) { return this.newBroadcastOperator().to(room); } /** * Targets a room when broadcasting. Similar to `to()`, but might feel clearer in some cases: * * @example * io.on("connection", (socket) => { * // disconnect all clients in the "room-101" room, except this socket * socket.in("room-101").disconnectSockets(); * }); * * @param room - a room, or an array of rooms * @return a new {@link BroadcastOperator} instance for chaining */ in(room) { return this.newBroadcastOperator().in(room); } /** * Excludes a room when broadcasting. * * @example * io.on("connection", (socket) => { * // the "foo" event will be broadcast to all connected clients, except the ones that are in the "room-101" room * // and this socket * socket.except("room-101").emit("foo", "bar"); * * // with an array of rooms * socket.except(["room-101", "room-102"]).emit("foo", "bar"); * * // with multiple chained calls * socket.except("room-101").except("room-102").emit("foo", "bar"); * }); * * @param room - a room, or an array of rooms * @return a new {@link BroadcastOperator} instance for chaining */ except(room) { return this.newBroadcastOperator().except(room); } /** * Sends a `message` event. * * This method mimics the WebSocket.send() method. * * @see https://developer.mozilla.org/en-US/docs/Web/API/WebSocket/send * * @example * io.on("connection", (socket) => { * socket.send("hello"); * * // this is equivalent to * socket.emit("message", "hello"); * }); * * @return self */ send(...args) { this.emit("message", ...args); return this; } /** * Sends a `message` event. Alias of {@link send}. * * @return self */ write(...args) { this.emit("message", ...args); return this; } /** * Writes a packet. * * @param {Object} packet - packet object * @param {Object} opts - options * @private */ packet(packet, opts = {}) { packet.nsp = this.nsp.name; opts.compress = false !== opts.compress; this.client._packet(packet, opts); } /** * Joins a room. * * @example * io.on("connection", (socket) => { * // join a single room * socket.join("room1"); * * // join multiple rooms * socket.join(["room1", "room2"]); * }); * * @param {String|Array} rooms - room or array of rooms * @return a Promise or nothing, depending on the adapter */ join(rooms) { debug("join room %s", rooms); return this.adapter.addAll(this.id, new Set(Array.isArray(rooms) ? rooms : [rooms])); } /** * Leaves a room. * * @example * io.on("connection", (socket) => { * // leave a single room * socket.leave("room1"); * * // leave multiple rooms * socket.leave("room1").leave("room2"); * }); * * @param {String} room * @return a Promise or nothing, depending on the adapter */ leave(room) { debug("leave room %s", room); return this.adapter.del(this.id, room); } /** * Leave all rooms. * * @private */ leaveAll() { this.adapter.delAll(this.id); } /** * Called by `Namespace` upon successful * middleware execution (ie: authorization). * Socket is added to namespace array before * call to join, so adapters can access it. * * @private */ _onconnect() { debug("socket connected - writing packet"); this.connected = true; this.join(this.id); if (this.conn.protocol === 3) { this.packet({ type: socket_io_parser_1.PacketType.CONNECT }); } else { this.packet({ type: socket_io_parser_1.PacketType.CONNECT, data: { sid: this.id, pid: this.pid } }); } } /** * Called with each packet. Called by `Client`. * * @param {Object} packet * @private */ _onpacket(packet) { debug("got packet %j", packet); switch (packet.type) { case socket_io_parser_1.PacketType.EVENT: this.onevent(packet); break; case socket_io_parser_1.PacketType.BINARY_EVENT: this.onevent(packet); break; case socket_io_parser_1.PacketType.ACK: this.onack(packet); break; case socket_io_parser_1.PacketType.BINARY_ACK: this.onack(packet); break; case socket_io_parser_1.PacketType.DISCONNECT: this.ondisconnect(); break; } } /** * Called upon event packet. * * @param {Packet} packet - packet object * @private */ onevent(packet) { const args = packet.data || []; debug("emitting event %j", args); if (null != packet.id) { debug("attaching ack callback to event"); args.push(this.ack(packet.id)); } if (this._anyListeners && this._anyListeners.length) { const listeners = this._anyListeners.slice(); for (const listener of listeners) { listener.apply(this, args); } } this.dispatch(args); } /** * Produces an ack callback to emit with an event. * * @param {Number} id - packet id * @private */ ack(id) { const self = this; let sent = false; return function() { if (sent) return; const args = Array.prototype.slice.call(arguments); debug("sending ack %j", args); self.packet({ id, type: socket_io_parser_1.PacketType.ACK, data: args }); sent = true; }; } /** * Called upon ack packet. * * @private */ onack(packet) { const ack = this.acks.get(packet.id); if ("function" == typeof ack) { debug("calling ack %s with %j", packet.id, packet.data); ack.apply(this, packet.data); this.acks.delete(packet.id); } else { debug("bad ack %s", packet.id); } } /** * Called upon client disconnect packet. * * @private */ ondisconnect() { debug("got disconnect packet"); this._onclose("client namespace disconnect"); } /** * Handles a client error. * * @private */ _onerror(err) { this.emitReserved("error", err); } /** * Called upon closing. Called by `Client`. * * @param {String} reason * @param description * @throw {Error} optional error object * * @private */ _onclose(reason, description) { if (!this.connected) return this; debug("closing socket - reason %s", reason); this.emitReserved("disconnecting", reason, description); if (this.server._opts.connectionStateRecovery && RECOVERABLE_DISCONNECT_REASONS.has(reason)) { debug("connection state recovery is enabled for sid %s", this.id); this.adapter.persistSession({ sid: this.id, pid: this.pid, rooms: [...this.rooms], data: this.data }); } this._cleanup(); this.client._remove(this); this.connected = false; this.emitReserved("disconnect", reason, description); return; } /** * Makes the socket leave all the rooms it was part of and prevents it from joining any other room * * @private */ _cleanup() { this.leaveAll(); this.nsp._remove(this); this.join = noop; } /** * Produces an `error` packet. * * @param {Object} err - error object * * @private */ _error(err) { this.packet({ type: socket_io_parser_1.PacketType.CONNECT_ERROR, data: err }); } /** * Disconnects this client. * * @example * io.on("connection", (socket) => { * // disconnect this socket (the connection might be kept alive for other namespaces) * socket.disconnect(); * * // disconnect this socket and close the underlying connection * socket.disconnect(true); * }) * * @param {Boolean} close - if `true`, closes the underlying connection * @return self */ disconnect(close = false) { if (!this.connected) return this; if (close) { this.client._disconnect(); } else { this.packet({ type: socket_io_parser_1.PacketType.DISCONNECT }); this._onclose("server namespace disconnect"); } return this; } /** * Sets the compress flag. * * @example * io.on("connection", (socket) => { * socket.compress(false).emit("hello"); * }); * * @param {Boolean} compress - if `true`, compresses the sending data * @return {Socket} self */ compress(compress) { this.flags.compress = compress; return this; } /** * Sets a modifier for a subsequent event emission that the event data may be lost if the client is not ready to * receive messages (because of network slowness or other issues, or because they’re connected through long polling * and is in the middle of a request-response cycle). * * @example * io.on("connection", (socket) => { * socket.volatile.emit("hello"); // the client may or may not receive it * }); * * @return {Socket} self */ get volatile() { this.flags.volatile = true; return this; } /** * Sets a modifier for a subsequent event emission that the event data will only be broadcast to every sockets but the * sender. * * @example * io.on("connection", (socket) => { * // the “foo” event will be broadcast to all connected clients, except this socket * socket.broadcast.emit("foo", "bar"); * }); * * @return a new {@link BroadcastOperator} instance for chaining */ get broadcast() { return this.newBroadcastOperator(); } /** * Sets a modifier for a subsequent event emission that the event data will only be broadcast to the current node. * * @example * io.on("connection", (socket) => { * // the “foo” event will be broadcast to all connected clients on this node, except this socket * socket.local.emit("foo", "bar"); * }); * * @return a new {@link BroadcastOperator} instance for chaining */ get local() { return this.newBroadcastOperator().local; } /** * Sets a modifier for a subsequent event emission that the callback will be called with an error when the * given number of milliseconds have elapsed without an acknowledgement from the client: * * @example * io.on("connection", (socket) => { * socket.timeout(5000).emit("my-event", (err) => { * if (err) { * // the client did not acknowledge the event in the given delay * } * }); * }); * * @returns self */ timeout(timeout) { this.flags.timeout = timeout; return this; } /** * Dispatch incoming event to socket listeners. * * @param {Array} event - event that will get emitted * @private */ dispatch(event) { debug("dispatching an event %j", event); this.run(event, (err) => { process.nextTick(() => { if (err) { return this._onerror(err); } if (this.connected) { super.emitUntyped.apply(this, event); } else { debug("ignore packet received after disconnection"); } }); }); } /** * Sets up socket middleware. * * @example * io.on("connection", (socket) => { * socket.use(([event, ...args], next) => { * if (isUnauthorized(event)) { * return next(new Error("unauthorized event")); * } * // do not forget to call next * next(); * }); * * socket.on("error", (err) => { * if (err && err.message === "unauthorized event") { * socket.disconnect(); * } * }); * }); * * @param {Function} fn - middleware function (event, next) * @return {Socket} self */ use(fn) { this.fns.push(fn); return this; } /** * Executes the middleware for an incoming event. * * @param {Array} event - event that will get emitted * @param {Function} fn - last fn call in the middleware * @private */ run(event, fn) { const fns = this.fns.slice(0); if (!fns.length) return fn(null); function run(i) { fns[i](event, function(err) { if (err) return fn(err); if (!fns[i + 1]) return fn(null); run(i + 1); }); } run(0); } /** * Whether the socket is currently disconnected */ get disconnected() { return !this.connected; } /** * A reference to the request that originated the underlying Engine.IO Socket. */ get request() { return this.client.request; } /** * A reference to the underlying Client transport connection (Engine.IO Socket object). * * @example * io.on("connection", (socket) => { * console.log(socket.conn.transport.name); // prints "polling" or "websocket" * * socket.conn.once("upgrade", () => { * console.log(socket.conn.transport.name); // prints "websocket" * }); * }); */ get conn() { return this.client.conn; } /** * Returns the rooms the socket is currently in. * * @example * io.on("connection", (socket) => { * console.log(socket.rooms); // Set { } * * socket.join("room1"); * * console.log(socket.rooms); // Set { , "room1" } * }); */ get rooms() { return this.adapter.socketRooms(this.id) || /* @__PURE__ */ new Set(); } /** * Adds a listener that will be fired when any event is received. The event name is passed as the first argument to * the callback. * * @example * io.on("connection", (socket) => { * socket.onAny((event, ...args) => { * console.log(`got event ${event}`); * }); * }); * * @param listener */ onAny(listener) { this._anyListeners = this._anyListeners || []; this._anyListeners.push(listener); return this; } /** * Adds a listener that will be fired when any event is received. The event name is passed as the first argument to * the callback. The listener is added to the beginning of the listeners array. * * @param listener */ prependAny(listener) { this._anyListeners = this._anyListeners || []; this._anyListeners.unshift(listener); return this; } /** * Removes the listener that will be fired when any event is received. * * @example * io.on("connection", (socket) => { * const catchAllListener = (event, ...args) => { * console.log(`got event ${event}`); * } * * socket.onAny(catchAllListener); * * // remove a specific listener * socket.offAny(catchAllListener); * * // or remove all listeners * socket.offAny(); * }); * * @param listener */ offAny(listener) { if (!this._anyListeners) { return this; } if (listener) { const listeners = this._anyListeners; for (let i = 0; i < listeners.length; i++) { if (listener === listeners[i]) { listeners.splice(i, 1); return this; } } } else { this._anyListeners = []; } return this; } /** * Returns an array of listeners that are listening for any event that is specified. This array can be manipulated, * e.g. to remove listeners. */ listenersAny() { return this._anyListeners || []; } /** * Adds a listener that will be fired when any event is sent. The event name is passed as the first argument to * the callback. * * Note: acknowledgements sent to the client are not included. * * @example * io.on("connection", (socket) => { * socket.onAnyOutgoing((event, ...args) => { * console.log(`sent event ${event}`); * }); * }); * * @param listener */ onAnyOutgoing(listener) { this._anyOutgoingListeners = this._anyOutgoingListeners || []; this._anyOutgoingListeners.push(listener); return this; } /** * Adds a listener that will be fired when any event is emitted. The event name is passed as the first argument to the * callback. The listener is added to the beginning of the listeners array. * * @example * io.on("connection", (socket) => { * socket.prependAnyOutgoing((event, ...args) => { * console.log(`sent event ${event}`); * }); * }); * * @param listener */ prependAnyOutgoing(listener) { this._anyOutgoingListeners = this._anyOutgoingListeners || []; this._anyOutgoingListeners.unshift(listener); return this; } /** * Removes the listener that will be fired when any event is sent. * * @example * io.on("connection", (socket) => { * const catchAllListener = (event, ...args) => { * console.log(`sent event ${event}`); * } * * socket.onAnyOutgoing(catchAllListener); * * // remove a specific listener * socket.offAnyOutgoing(catchAllListener); * * // or remove all listeners * socket.offAnyOutgoing(); * }); * * @param listener - the catch-all listener */ offAnyOutgoing(listener) { if (!this._anyOutgoingListeners) { return this; } if (listener) { const listeners = this._anyOutgoingListeners; for (let i = 0; i < listeners.length; i++) { if (listener === listeners[i]) { listeners.splice(i, 1); return this; } } } else { this._anyOutgoingListeners = []; } return this; } /** * Returns an array of listeners that are listening for any event that is specified. This array can be manipulated, * e.g. to remove listeners. */ listenersAnyOutgoing() { return this._anyOutgoingListeners || []; } /** * Notify the listeners for each packet sent (emit or broadcast) * * @param packet * * @private */ notifyOutgoingListeners(packet) { if (this._anyOutgoingListeners && this._anyOutgoingListeners.length) { const listeners = this._anyOutgoingListeners.slice(); for (const listener of listeners) { listener.apply(this, packet.data); } } } newBroadcastOperator() { const flags = Object.assign({}, this.flags); this.flags = {}; return new broadcast_operator_1.BroadcastOperator(this.adapter, /* @__PURE__ */ new Set(), /* @__PURE__ */ new Set([this.id]), flags); } }; exports2.Socket = Socket2; } }); // node_modules/.pnpm/socket.io@4.7.2/node_modules/socket.io/dist/namespace.js var require_namespace = __commonJS({ "node_modules/.pnpm/socket.io@4.7.2/node_modules/socket.io/dist/namespace.js"(exports2) { "use strict"; var __importDefault = exports2 && exports2.__importDefault || function(mod) { return mod && mod.__esModule ? mod : { "default": mod }; }; Object.defineProperty(exports2, "__esModule", { value: true }); exports2.Namespace = exports2.RESERVED_EVENTS = void 0; var socket_1 = require_socket2(); var typed_events_1 = require_typed_events(); var debug_1 = __importDefault(require_src()); var broadcast_operator_1 = require_broadcast_operator(); var debug = (0, debug_1.default)("socket.io:namespace"); exports2.RESERVED_EVENTS = /* @__PURE__ */ new Set(["connect", "connection", "new_namespace"]); var Namespace2 = class extends typed_events_1.StrictEventEmitter { /** * Namespace constructor. * * @param server instance * @param name */ constructor(server2, name) { super(); this.sockets = /* @__PURE__ */ new Map(); this._fns = []; this._ids = 0; this.server = server2; this.name = name; this._initAdapter(); } /** * Initializes the `Adapter` for this nsp. * Run upon changing adapter by `Server#adapter` * in addition to the constructor. * * @private */ _initAdapter() { this.adapter = new (this.server.adapter())(this); } /** * Registers a middleware, which is a function that gets executed for every incoming {@link Socket}. * * @example * const myNamespace = io.of("/my-namespace"); * * myNamespace.use((socket, next) => { * // ... * next(); * }); * * @param fn - the middleware function */ use(fn) { this._fns.push(fn); return this; } /** * Executes the middleware for an incoming client. * * @param socket - the socket that will get added * @param fn - last fn call in the middleware * @private */ run(socket, fn) { const fns = this._fns.slice(0); if (!fns.length) return fn(null); function run(i) { fns[i](socket, function(err) { if (err) return fn(err); if (!fns[i + 1]) return fn(null); run(i + 1); }); } run(0); } /** * Targets a room when emitting. * * @example * const myNamespace = io.of("/my-namespace"); * * // the “foo” event will be broadcast to all connected clients in the “room-101” room * myNamespace.to("room-101").emit("foo", "bar"); * * // with an array of rooms (a client will be notified at most once) * myNamespace.to(["room-101", "room-102"]).emit("foo", "bar"); * * // with multiple chained calls * myNamespace.to("room-101").to("room-102").emit("foo", "bar"); * * @param room - a room, or an array of rooms * @return a new {@link BroadcastOperator} instance for chaining */ to(room) { return new broadcast_operator_1.BroadcastOperator(this.adapter).to(room); } /** * Targets a room when emitting. Similar to `to()`, but might feel clearer in some cases: * * @example * const myNamespace = io.of("/my-namespace"); * * // disconnect all clients in the "room-101" room * myNamespace.in("room-101").disconnectSockets(); * * @param room - a room, or an array of rooms * @return a new {@link BroadcastOperator} instance for chaining */ in(room) { return new broadcast_operator_1.BroadcastOperator(this.adapter).in(room); } /** * Excludes a room when emitting. * * @example * const myNamespace = io.of("/my-namespace"); * * // the "foo" event will be broadcast to all connected clients, except the ones that are in the "room-101" room * myNamespace.except("room-101").emit("foo", "bar"); * * // with an array of rooms * myNamespace.except(["room-101", "room-102"]).emit("foo", "bar"); * * // with multiple chained calls * myNamespace.except("room-101").except("room-102").emit("foo", "bar"); * * @param room - a room, or an array of rooms * @return a new {@link BroadcastOperator} instance for chaining */ except(room) { return new broadcast_operator_1.BroadcastOperator(this.adapter).except(room); } /** * Adds a new client. * * @return {Socket} * @private */ async _add(client, auth, fn) { var _a; debug("adding socket to nsp %s", this.name); const socket = await this._createSocket(client, auth); if ( // @ts-ignore ((_a = this.server.opts.connectionStateRecovery) === null || _a === void 0 ? void 0 : _a.skipMiddlewares) && socket.recovered && client.conn.readyState === "open" ) { return this._doConnect(socket, fn); } this.run(socket, (err) => { process.nextTick(() => { if ("open" !== client.conn.readyState) { debug("next called after client was closed - ignoring socket"); socket._cleanup(); return; } if (err) { debug("middleware error, sending CONNECT_ERROR packet to the client"); socket._cleanup(); if (client.conn.protocol === 3) { return socket._error(err.data || err.message); } else { return socket._error({ message: err.message, data: err.data }); } } this._doConnect(socket, fn); }); }); } async _createSocket(client, auth) { const sessionId = auth.pid; const offset = auth.offset; if ( // @ts-ignore this.server.opts.connectionStateRecovery && typeof sessionId === "string" && typeof offset === "string" ) { let session; try { session = await this.adapter.restoreSession(sessionId, offset); } catch (e) { debug("error while restoring session: %s", e); } if (session) { debug("connection state recovered for sid %s", session.sid); return new socket_1.Socket(this, client, auth, session); } } return new socket_1.Socket(this, client, auth); } _doConnect(socket, fn) { this.sockets.set(socket.id, socket); socket._onconnect(); if (fn) fn(socket); this.emitReserved("connect", socket); this.emitReserved("connection", socket); } /** * Removes a client. Called by each `Socket`. * * @private */ _remove(socket) { if (this.sockets.has(socket.id)) { this.sockets.delete(socket.id); } else { debug("ignoring remove for %s", socket.id); } } /** * Emits to all connected clients. * * @example * const myNamespace = io.of("/my-namespace"); * * myNamespace.emit("hello", "world"); * * // all serializable datastructures are supported (no need to call JSON.stringify) * myNamespace.emit("hello", 1, "2", { 3: ["4"], 5: Uint8Array.from([6]) }); * * // with an acknowledgement from the clients * myNamespace.timeout(1000).emit("some-event", (err, responses) => { * if (err) { * // some clients did not acknowledge the event in the given delay * } else { * console.log(responses); // one response per client * } * }); * * @return Always true */ emit(ev, ...args) { return new broadcast_operator_1.BroadcastOperator(this.adapter).emit(ev, ...args); } /** * Emits an event and waits for an acknowledgement from all clients. * * @example * const myNamespace = io.of("/my-namespace"); * * try { * const responses = await myNamespace.timeout(1000).emitWithAck("some-event"); * console.log(responses); // one response per client * } catch (e) { * // some clients did not acknowledge the event in the given delay * } * * @return a Promise that will be fulfilled when all clients have acknowledged the event */ emitWithAck(ev, ...args) { return new broadcast_operator_1.BroadcastOperator(this.adapter).emitWithAck(ev, ...args); } /** * Sends a `message` event to all clients. * * This method mimics the WebSocket.send() method. * * @see https://developer.mozilla.org/en-US/docs/Web/API/WebSocket/send * * @example * const myNamespace = io.of("/my-namespace"); * * myNamespace.send("hello"); * * // this is equivalent to * myNamespace.emit("message", "hello"); * * @return self */ send(...args) { this.emit("message", ...args); return this; } /** * Sends a `message` event to all clients. Sends a `message` event. Alias of {@link send}. * * @return self */ write(...args) { this.emit("message", ...args); return this; } /** * Sends a message to the other Socket.IO servers of the cluster. * * @example * const myNamespace = io.of("/my-namespace"); * * myNamespace.serverSideEmit("hello", "world"); * * myNamespace.on("hello", (arg1) => { * console.log(arg1); // prints "world" * }); * * // acknowledgements (without binary content) are supported too: * myNamespace.serverSideEmit("ping", (err, responses) => { * if (err) { * // some servers did not acknowledge the event in the given delay * } else { * console.log(responses); // one response per server (except the current one) * } * }); * * myNamespace.on("ping", (cb) => { * cb("pong"); * }); * * @param ev - the event name * @param args - an array of arguments, which may include an acknowledgement callback at the end */ serverSideEmit(ev, ...args) { if (exports2.RESERVED_EVENTS.has(ev)) { throw new Error(`"${String(ev)}" is a reserved event name`); } args.unshift(ev); this.adapter.serverSideEmit(args); return true; } /** * Sends a message and expect an acknowledgement from the other Socket.IO servers of the cluster. * * @example * const myNamespace = io.of("/my-namespace"); * * try { * const responses = await myNamespace.serverSideEmitWithAck("ping"); * console.log(responses); // one response per server (except the current one) * } catch (e) { * // some servers did not acknowledge the event in the given delay * } * * @param ev - the event name * @param args - an array of arguments * * @return a Promise that will be fulfilled when all servers have acknowledged the event */ serverSideEmitWithAck(ev, ...args) { return new Promise((resolve, reject) => { args.push((err, responses) => { if (err) { err.responses = responses; return reject(err); } else { return resolve(responses); } }); this.serverSideEmit(ev, ...args); }); } /** * Called when a packet is received from another Socket.IO server * * @param args - an array of arguments, which may include an acknowledgement callback at the end * * @private */ _onServerSideEmit(args) { super.emitUntyped.apply(this, args); } /** * Gets a list of clients. * * @deprecated this method will be removed in the next major release, please use {@link Namespace#serverSideEmit} or * {@link Namespace#fetchSockets} instead. */ allSockets() { return new broadcast_operator_1.BroadcastOperator(this.adapter).allSockets(); } /** * Sets the compress flag. * * @example * const myNamespace = io.of("/my-namespace"); * * myNamespace.compress(false).emit("hello"); * * @param compress - if `true`, compresses the sending data * @return self */ compress(compress) { return new broadcast_operator_1.BroadcastOperator(this.adapter).compress(compress); } /** * Sets a modifier for a subsequent event emission that the event data may be lost if the client is not ready to * receive messages (because of network slowness or other issues, or because they’re connected through long polling * and is in the middle of a request-response cycle). * * @example * const myNamespace = io.of("/my-namespace"); * * myNamespace.volatile.emit("hello"); // the clients may or may not receive it * * @return self */ get volatile() { return new broadcast_operator_1.BroadcastOperator(this.adapter).volatile; } /** * Sets a modifier for a subsequent event emission that the event data will only be broadcast to the current node. * * @example * const myNamespace = io.of("/my-namespace"); * * // the “foo” event will be broadcast to all connected clients on this node * myNamespace.local.emit("foo", "bar"); * * @return a new {@link BroadcastOperator} instance for chaining */ get local() { return new broadcast_operator_1.BroadcastOperator(this.adapter).local; } /** * Adds a timeout in milliseconds for the next operation. * * @example * const myNamespace = io.of("/my-namespace"); * * myNamespace.timeout(1000).emit("some-event", (err, responses) => { * if (err) { * // some clients did not acknowledge the event in the given delay * } else { * console.log(responses); // one response per client * } * }); * * @param timeout */ timeout(timeout) { return new broadcast_operator_1.BroadcastOperator(this.adapter).timeout(timeout); } /** * Returns the matching socket instances. * * Note: this method also works within a cluster of multiple Socket.IO servers, with a compatible {@link Adapter}. * * @example * const myNamespace = io.of("/my-namespace"); * * // return all Socket instances * const sockets = await myNamespace.fetchSockets(); * * // return all Socket instances in the "room1" room * const sockets = await myNamespace.in("room1").fetchSockets(); * * for (const socket of sockets) { * console.log(socket.id); * console.log(socket.handshake); * console.log(socket.rooms); * console.log(socket.data); * * socket.emit("hello"); * socket.join("room1"); * socket.leave("room2"); * socket.disconnect(); * } */ fetchSockets() { return new broadcast_operator_1.BroadcastOperator(this.adapter).fetchSockets(); } /** * Makes the matching socket instances join the specified rooms. * * Note: this method also works within a cluster of multiple Socket.IO servers, with a compatible {@link Adapter}. * * @example * const myNamespace = io.of("/my-namespace"); * * // make all socket instances join the "room1" room * myNamespace.socketsJoin("room1"); * * // make all socket instances in the "room1" room join the "room2" and "room3" rooms * myNamespace.in("room1").socketsJoin(["room2", "room3"]); * * @param room - a room, or an array of rooms */ socketsJoin(room) { return new broadcast_operator_1.BroadcastOperator(this.adapter).socketsJoin(room); } /** * Makes the matching socket instances leave the specified rooms. * * Note: this method also works within a cluster of multiple Socket.IO servers, with a compatible {@link Adapter}. * * @example * const myNamespace = io.of("/my-namespace"); * * // make all socket instances leave the "room1" room * myNamespace.socketsLeave("room1"); * * // make all socket instances in the "room1" room leave the "room2" and "room3" rooms * myNamespace.in("room1").socketsLeave(["room2", "room3"]); * * @param room - a room, or an array of rooms */ socketsLeave(room) { return new broadcast_operator_1.BroadcastOperator(this.adapter).socketsLeave(room); } /** * Makes the matching socket instances disconnect. * * Note: this method also works within a cluster of multiple Socket.IO servers, with a compatible {@link Adapter}. * * @example * const myNamespace = io.of("/my-namespace"); * * // make all socket instances disconnect (the connections might be kept alive for other namespaces) * myNamespace.disconnectSockets(); * * // make all socket instances in the "room1" room disconnect and close the underlying connections * myNamespace.in("room1").disconnectSockets(true); * * @param close - whether to close the underlying connection */ disconnectSockets(close = false) { return new broadcast_operator_1.BroadcastOperator(this.adapter).disconnectSockets(close); } }; exports2.Namespace = Namespace2; } }); // node_modules/.pnpm/socket.io@4.7.2/node_modules/socket.io/dist/parent-namespace.js var require_parent_namespace = __commonJS({ "node_modules/.pnpm/socket.io@4.7.2/node_modules/socket.io/dist/parent-namespace.js"(exports2) { "use strict"; var __importDefault = exports2 && exports2.__importDefault || function(mod) { return mod && mod.__esModule ? mod : { "default": mod }; }; Object.defineProperty(exports2, "__esModule", { value: true }); exports2.ParentNamespace = void 0; var namespace_1 = require_namespace(); var debug_1 = __importDefault(require_src()); var debug = (0, debug_1.default)("socket.io:parent-namespace"); var ParentNamespace = class _ParentNamespace extends namespace_1.Namespace { constructor(server2) { super(server2, "/_" + _ParentNamespace.count++); this.children = /* @__PURE__ */ new Set(); } /** * @private */ _initAdapter() { const broadcast = (packet, opts) => { this.children.forEach((nsp) => { nsp.adapter.broadcast(packet, opts); }); }; this.adapter = { broadcast }; } emit(ev, ...args) { this.children.forEach((nsp) => { nsp.emit(ev, ...args); }); return true; } createChild(name) { debug("creating child namespace %s", name); const namespace = new namespace_1.Namespace(this.server, name); namespace._fns = this._fns.slice(0); this.listeners("connect").forEach((listener) => namespace.on("connect", listener)); this.listeners("connection").forEach((listener) => namespace.on("connection", listener)); this.children.add(namespace); if (this.server._opts.cleanupEmptyChildNamespaces) { const remove = namespace._remove; namespace._remove = (socket) => { remove.call(namespace, socket); if (namespace.sockets.size === 0) { debug("closing child namespace %s", name); namespace.adapter.close(); this.server._nsps.delete(namespace.name); this.children.delete(namespace); } }; } this.server._nsps.set(name, namespace); this.server.sockets.emitReserved("new_namespace", namespace); return namespace; } fetchSockets() { throw new Error("fetchSockets() is not supported on parent namespaces"); } }; exports2.ParentNamespace = ParentNamespace; ParentNamespace.count = 0; } }); // node_modules/.pnpm/socket.io-adapter@2.5.2/node_modules/socket.io-adapter/dist/contrib/yeast.js var require_yeast = __commonJS({ "node_modules/.pnpm/socket.io-adapter@2.5.2/node_modules/socket.io-adapter/dist/contrib/yeast.js"(exports2) { "use strict"; Object.defineProperty(exports2, "__esModule", { value: true }); exports2.yeast = exports2.decode = exports2.encode = void 0; var alphabet = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_".split(""); var length = 64; var map = {}; var seed = 0; var i = 0; var prev; function encode(num) { let encoded = ""; do { encoded = alphabet[num % length] + encoded; num = Math.floor(num / length); } while (num > 0); return encoded; } exports2.encode = encode; function decode(str) { let decoded = 0; for (i = 0; i < str.length; i++) { decoded = decoded * length + map[str.charAt(i)]; } return decoded; } exports2.decode = decode; function yeast() { const now = encode(+/* @__PURE__ */ new Date()); if (now !== prev) return seed = 0, prev = now; return now + "." + encode(seed++); } exports2.yeast = yeast; for (; i < length; i++) map[alphabet[i]] = i; } }); // node_modules/.pnpm/socket.io-adapter@2.5.2/node_modules/socket.io-adapter/dist/index.js var require_dist = __commonJS({ "node_modules/.pnpm/socket.io-adapter@2.5.2/node_modules/socket.io-adapter/dist/index.js"(exports2) { "use strict"; var _a; Object.defineProperty(exports2, "__esModule", { value: true }); exports2.SessionAwareAdapter = exports2.Adapter = void 0; var events_1 = require("events"); var yeast_1 = require_yeast(); var WebSocket = require_ws(); var canPreComputeFrame = typeof ((_a = WebSocket === null || WebSocket === void 0 ? void 0 : WebSocket.Sender) === null || _a === void 0 ? void 0 : _a.frame) === "function"; var Adapter = class extends events_1.EventEmitter { /** * In-memory adapter constructor. * * @param {Namespace} nsp */ constructor(nsp) { super(); this.nsp = nsp; this.rooms = /* @__PURE__ */ new Map(); this.sids = /* @__PURE__ */ new Map(); this.encoder = nsp.server.encoder; } /** * To be overridden */ init() { } /** * To be overridden */ close() { } /** * Returns the number of Socket.IO servers in the cluster * * @public */ serverCount() { return Promise.resolve(1); } /** * Adds a socket to a list of room. * * @param {SocketId} id the socket id * @param {Set} rooms a set of rooms * @public */ addAll(id, rooms) { if (!this.sids.has(id)) { this.sids.set(id, /* @__PURE__ */ new Set()); } for (const room of rooms) { this.sids.get(id).add(room); if (!this.rooms.has(room)) { this.rooms.set(room, /* @__PURE__ */ new Set()); this.emit("create-room", room); } if (!this.rooms.get(room).has(id)) { this.rooms.get(room).add(id); this.emit("join-room", room, id); } } } /** * Removes a socket from a room. * * @param {SocketId} id the socket id * @param {Room} room the room name */ del(id, room) { if (this.sids.has(id)) { this.sids.get(id).delete(room); } this._del(room, id); } _del(room, id) { const _room = this.rooms.get(room); if (_room != null) { const deleted = _room.delete(id); if (deleted) { this.emit("leave-room", room, id); } if (_room.size === 0 && this.rooms.delete(room)) { this.emit("delete-room", room); } } } /** * Removes a socket from all rooms it's joined. * * @param {SocketId} id the socket id */ delAll(id) { if (!this.sids.has(id)) { return; } for (const room of this.sids.get(id)) { this._del(room, id); } this.sids.delete(id); } /** * Broadcasts a packet. * * Options: * - `flags` {Object} flags for this packet * - `except` {Array} sids that should be excluded * - `rooms` {Array} list of rooms to broadcast to * * @param {Object} packet the packet object * @param {Object} opts the options * @public */ broadcast(packet, opts) { const flags = opts.flags || {}; const packetOpts = { preEncoded: true, volatile: flags.volatile, compress: flags.compress }; packet.nsp = this.nsp.name; const encodedPackets = this._encode(packet, packetOpts); this.apply(opts, (socket) => { if (typeof socket.notifyOutgoingListeners === "function") { socket.notifyOutgoingListeners(packet); } socket.client.writeToEngine(encodedPackets, packetOpts); }); } /** * Broadcasts a packet and expects multiple acknowledgements. * * Options: * - `flags` {Object} flags for this packet * - `except` {Array} sids that should be excluded * - `rooms` {Array} list of rooms to broadcast to * * @param {Object} packet the packet object * @param {Object} opts the options * @param clientCountCallback - the number of clients that received the packet * @param ack - the callback that will be called for each client response * * @public */ broadcastWithAck(packet, opts, clientCountCallback, ack) { const flags = opts.flags || {}; const packetOpts = { preEncoded: true, volatile: flags.volatile, compress: flags.compress }; packet.nsp = this.nsp.name; packet.id = this.nsp._ids++; const encodedPackets = this._encode(packet, packetOpts); let clientCount = 0; this.apply(opts, (socket) => { clientCount++; socket.acks.set(packet.id, ack); if (typeof socket.notifyOutgoingListeners === "function") { socket.notifyOutgoingListeners(packet); } socket.client.writeToEngine(encodedPackets, packetOpts); }); clientCountCallback(clientCount); } _encode(packet, packetOpts) { const encodedPackets = this.encoder.encode(packet); if (canPreComputeFrame && encodedPackets.length === 1 && typeof encodedPackets[0] === "string") { const data = Buffer.from("4" + encodedPackets[0]); packetOpts.wsPreEncodedFrame = WebSocket.Sender.frame(data, { readOnly: false, mask: false, rsv1: false, opcode: 1, fin: true }); } return encodedPackets; } /** * Gets a list of sockets by sid. * * @param {Set} rooms the explicit set of rooms to check. */ sockets(rooms) { const sids = /* @__PURE__ */ new Set(); this.apply({ rooms }, (socket) => { sids.add(socket.id); }); return Promise.resolve(sids); } /** * Gets the list of rooms a given socket has joined. * * @param {SocketId} id the socket id */ socketRooms(id) { return this.sids.get(id); } /** * Returns the matching socket instances * * @param opts - the filters to apply */ fetchSockets(opts) { const sockets = []; this.apply(opts, (socket) => { sockets.push(socket); }); return Promise.resolve(sockets); } /** * Makes the matching socket instances join the specified rooms * * @param opts - the filters to apply * @param rooms - the rooms to join */ addSockets(opts, rooms) { this.apply(opts, (socket) => { socket.join(rooms); }); } /** * Makes the matching socket instances leave the specified rooms * * @param opts - the filters to apply * @param rooms - the rooms to leave */ delSockets(opts, rooms) { this.apply(opts, (socket) => { rooms.forEach((room) => socket.leave(room)); }); } /** * Makes the matching socket instances disconnect * * @param opts - the filters to apply * @param close - whether to close the underlying connection */ disconnectSockets(opts, close) { this.apply(opts, (socket) => { socket.disconnect(close); }); } apply(opts, callback) { const rooms = opts.rooms; const except = this.computeExceptSids(opts.except); if (rooms.size) { const ids = /* @__PURE__ */ new Set(); for (const room of rooms) { if (!this.rooms.has(room)) continue; for (const id of this.rooms.get(room)) { if (ids.has(id) || except.has(id)) continue; const socket = this.nsp.sockets.get(id); if (socket) { callback(socket); ids.add(id); } } } } else { for (const [id] of this.sids) { if (except.has(id)) continue; const socket = this.nsp.sockets.get(id); if (socket) callback(socket); } } } computeExceptSids(exceptRooms) { const exceptSids = /* @__PURE__ */ new Set(); if (exceptRooms && exceptRooms.size > 0) { for (const room of exceptRooms) { if (this.rooms.has(room)) { this.rooms.get(room).forEach((sid) => exceptSids.add(sid)); } } } return exceptSids; } /** * Send a packet to the other Socket.IO servers in the cluster * @param packet - an array of arguments, which may include an acknowledgement callback at the end */ serverSideEmit(packet) { console.warn("this adapter does not support the serverSideEmit() functionality"); } /** * Save the client session in order to restore it upon reconnection. */ persistSession(session) { } /** * Restore the session and find the packets that were missed by the client. * @param pid * @param offset */ restoreSession(pid, offset) { return null; } }; exports2.Adapter = Adapter; var SessionAwareAdapter = class extends Adapter { constructor(nsp) { super(nsp); this.nsp = nsp; this.sessions = /* @__PURE__ */ new Map(); this.packets = []; this.maxDisconnectionDuration = nsp.server.opts.connectionStateRecovery.maxDisconnectionDuration; const timer = setInterval(() => { const threshold = Date.now() - this.maxDisconnectionDuration; this.sessions.forEach((session, sessionId) => { const hasExpired = session.disconnectedAt < threshold; if (hasExpired) { this.sessions.delete(sessionId); } }); for (let i = this.packets.length - 1; i >= 0; i--) { const hasExpired = this.packets[i].emittedAt < threshold; if (hasExpired) { this.packets.splice(0, i + 1); break; } } }, 60 * 1e3); timer.unref(); } persistSession(session) { session.disconnectedAt = Date.now(); this.sessions.set(session.pid, session); } restoreSession(pid, offset) { const session = this.sessions.get(pid); if (!session) { return null; } const hasExpired = session.disconnectedAt + this.maxDisconnectionDuration < Date.now(); if (hasExpired) { this.sessions.delete(pid); return null; } const index = this.packets.findIndex((packet) => packet.id === offset); if (index === -1) { return null; } const missedPackets = []; for (let i = index + 1; i < this.packets.length; i++) { const packet = this.packets[i]; if (shouldIncludePacket(session.rooms, packet.opts)) { missedPackets.push(packet.data); } } return Promise.resolve(Object.assign(Object.assign({}, session), { missedPackets })); } broadcast(packet, opts) { var _a2; const isEventPacket = packet.type === 2; const withoutAcknowledgement = packet.id === void 0; const notVolatile = ((_a2 = opts.flags) === null || _a2 === void 0 ? void 0 : _a2.volatile) === void 0; if (isEventPacket && withoutAcknowledgement && notVolatile) { const id = (0, yeast_1.yeast)(); packet.data.push(id); this.packets.push({ id, opts, data: packet.data, emittedAt: Date.now() }); } super.broadcast(packet, opts); } }; exports2.SessionAwareAdapter = SessionAwareAdapter; function shouldIncludePacket(sessionRooms, opts) { const included = opts.rooms.size === 0 || sessionRooms.some((room) => opts.rooms.has(room)); const notExcluded = sessionRooms.every((room) => !opts.except.has(room)); return included && notExcluded; } } }); // node_modules/.pnpm/socket.io@4.7.2/node_modules/socket.io/dist/uws.js var require_uws = __commonJS({ "node_modules/.pnpm/socket.io@4.7.2/node_modules/socket.io/dist/uws.js"(exports2) { "use strict"; var __importDefault = exports2 && exports2.__importDefault || function(mod) { return mod && mod.__esModule ? mod : { "default": mod }; }; Object.defineProperty(exports2, "__esModule", { value: true }); exports2.serveFile = exports2.restoreAdapter = exports2.patchAdapter = void 0; var socket_io_adapter_1 = require_dist(); var fs_1 = require("fs"); var debug_1 = __importDefault(require_src()); var debug = (0, debug_1.default)("socket.io:adapter-uws"); var SEPARATOR = ""; var { addAll, del, broadcast } = socket_io_adapter_1.Adapter.prototype; function patchAdapter(app) { socket_io_adapter_1.Adapter.prototype.addAll = function(id, rooms) { const isNew = !this.sids.has(id); addAll.call(this, id, rooms); const socket = this.nsp.sockets.get(id); if (!socket) { return; } if (socket.conn.transport.name === "websocket") { subscribe(this.nsp.name, socket, isNew, rooms); return; } if (isNew) { socket.conn.on("upgrade", () => { const rooms2 = this.sids.get(id); if (rooms2) { subscribe(this.nsp.name, socket, isNew, rooms2); } }); } }; socket_io_adapter_1.Adapter.prototype.del = function(id, room) { del.call(this, id, room); const socket = this.nsp.sockets.get(id); if (socket && socket.conn.transport.name === "websocket") { const sessionId = socket.conn.id; const websocket = socket.conn.transport.socket; const topic = `${this.nsp.name}${SEPARATOR}${room}`; debug("unsubscribe connection %s from topic %s", sessionId, topic); websocket.unsubscribe(topic); } }; socket_io_adapter_1.Adapter.prototype.broadcast = function(packet, opts) { const useFastPublish = opts.rooms.size <= 1 && opts.except.size === 0; if (!useFastPublish) { broadcast.call(this, packet, opts); return; } const flags = opts.flags || {}; const basePacketOpts = { preEncoded: true, volatile: flags.volatile, compress: flags.compress }; packet.nsp = this.nsp.name; const encodedPackets = this.encoder.encode(packet); const topic = opts.rooms.size === 0 ? this.nsp.name : `${this.nsp.name}${SEPARATOR}${opts.rooms.keys().next().value}`; debug("fast publish to %s", topic); encodedPackets.forEach((encodedPacket) => { const isBinary = typeof encodedPacket !== "string"; app.publish(topic, isBinary ? encodedPacket : "4" + encodedPacket, isBinary); }); this.apply(opts, (socket) => { if (socket.conn.transport.name !== "websocket") { socket.client.writeToEngine(encodedPackets, basePacketOpts); } }); }; } exports2.patchAdapter = patchAdapter; function subscribe(namespaceName, socket, isNew, rooms) { const sessionId = socket.conn.id; const websocket = socket.conn.transport.socket; if (isNew) { debug("subscribe connection %s to topic %s", sessionId, namespaceName); websocket.subscribe(namespaceName); } rooms.forEach((room) => { const topic = `${namespaceName}${SEPARATOR}${room}`; debug("subscribe connection %s to topic %s", sessionId, topic); websocket.subscribe(topic); }); } function restoreAdapter() { socket_io_adapter_1.Adapter.prototype.addAll = addAll; socket_io_adapter_1.Adapter.prototype.del = del; socket_io_adapter_1.Adapter.prototype.broadcast = broadcast; } exports2.restoreAdapter = restoreAdapter; var toArrayBuffer = (buffer) => { const { buffer: arrayBuffer, byteOffset, byteLength } = buffer; return arrayBuffer.slice(byteOffset, byteOffset + byteLength); }; function serveFile(res, filepath) { const { size } = (0, fs_1.statSync)(filepath); const readStream = (0, fs_1.createReadStream)(filepath); const destroyReadStream = () => !readStream.destroyed && readStream.destroy(); const onError = (error) => { destroyReadStream(); throw error; }; const onDataChunk = (chunk) => { const arrayBufferChunk = toArrayBuffer(chunk); const lastOffset = res.getWriteOffset(); const [ok, done] = res.tryEnd(arrayBufferChunk, size); if (!done && !ok) { readStream.pause(); res.onWritable((offset) => { const [ok2, done2] = res.tryEnd(arrayBufferChunk.slice(offset - lastOffset), size); if (!done2 && ok2) { readStream.resume(); } return ok2; }); } }; res.onAborted(destroyReadStream); readStream.on("data", onDataChunk).on("error", onError).on("end", destroyReadStream); } exports2.serveFile = serveFile; } }); // node_modules/.pnpm/socket.io@4.7.2/node_modules/socket.io/package.json var require_package = __commonJS({ "node_modules/.pnpm/socket.io@4.7.2/node_modules/socket.io/package.json"(exports2, module2) { module2.exports = { name: "socket.io", version: "4.7.2", description: "node.js realtime framework server", keywords: [ "realtime", "framework", "websocket", "tcp", "events", "socket", "io" ], files: [ "dist/", "client-dist/", "wrapper.mjs", "!**/*.tsbuildinfo" ], directories: { doc: "docs/", example: "example/", lib: "lib/", test: "test/" }, type: "commonjs", main: "./dist/index.js", exports: { types: "./dist/index.d.ts", import: "./wrapper.mjs", require: "./dist/index.js" }, types: "./dist/index.d.ts", license: "MIT", repository: { type: "git", url: "git://github.com/socketio/socket.io" }, scripts: { compile: "rimraf ./dist && tsc", test: "npm run format:check && npm run compile && npm run test:types && npm run test:unit", "test:types": "tsd", "test:unit": "nyc mocha --require ts-node/register --reporter spec --slow 200 --bail --timeout 10000 test/index.ts", "format:check": 'prettier --check "lib/**/*.ts" "test/**/*.ts"', "format:fix": 'prettier --write "lib/**/*.ts" "test/**/*.ts"', prepack: "npm run compile" }, dependencies: { accepts: "~1.3.4", base64id: "~2.0.0", cors: "~2.8.5", debug: "~4.3.2", "engine.io": "~6.5.2", "socket.io-adapter": "~2.5.2", "socket.io-parser": "~4.2.4" }, devDependencies: { "@types/mocha": "^9.0.0", "expect.js": "0.3.1", mocha: "^10.0.0", nyc: "^15.1.0", prettier: "^2.3.2", rimraf: "^3.0.2", "socket.io-client": "4.7.2", "socket.io-client-v2": "npm:socket.io-client@^2.4.0", superagent: "^8.0.0", supertest: "^6.1.6", "ts-node": "^10.2.1", tsd: "^0.21.0", typescript: "^4.4.2", "uWebSockets.js": "github:uNetworking/uWebSockets.js#v20.30.0" }, contributors: [ { name: "Guillermo Rauch", email: "rauchg@gmail.com" }, { name: "Arnout Kazemier", email: "info@3rd-eden.com" }, { name: "Vladimir Dronnikov", email: "dronnikov@gmail.com" }, { name: "Einar Otto Stangvik", email: "einaros@gmail.com" } ], engines: { node: ">=10.2.0" }, tsd: { directory: "test" } }; } }); // node_modules/.pnpm/socket.io@4.7.2/node_modules/socket.io/dist/index.js var require_dist2 = __commonJS({ "node_modules/.pnpm/socket.io@4.7.2/node_modules/socket.io/dist/index.js"(exports2, module2) { "use strict"; var __createBinding = exports2 && exports2.__createBinding || (Object.create ? function(o, m, k, k2) { if (k2 === void 0) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); } : function(o, m, k, k2) { if (k2 === void 0) k2 = k; o[k2] = m[k]; }); var __setModuleDefault = exports2 && exports2.__setModuleDefault || (Object.create ? function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); } : function(o, v) { o["default"] = v; }); var __importStar = exports2 && exports2.__importStar || function(mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) { for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); } __setModuleDefault(result, mod); return result; }; var __importDefault = exports2 && exports2.__importDefault || function(mod) { return mod && mod.__esModule ? mod : { "default": mod }; }; Object.defineProperty(exports2, "__esModule", { value: true }); exports2.Namespace = exports2.Socket = exports2.Server = void 0; var http = require("http"); var fs_1 = require("fs"); var zlib_1 = require("zlib"); var accepts = require_accepts(); var stream_1 = require("stream"); var path = require("path"); var engine_io_1 = require_engine_io(); var client_1 = require_client(); var events_1 = require("events"); var namespace_1 = require_namespace(); Object.defineProperty(exports2, "Namespace", { enumerable: true, get: function() { return namespace_1.Namespace; } }); var parent_namespace_1 = require_parent_namespace(); var socket_io_adapter_1 = require_dist(); var parser = __importStar(require_cjs2()); var debug_1 = __importDefault(require_src()); var socket_1 = require_socket2(); Object.defineProperty(exports2, "Socket", { enumerable: true, get: function() { return socket_1.Socket; } }); var typed_events_1 = require_typed_events(); var uws_1 = require_uws(); var cors_1 = __importDefault(require_lib()); var debug = (0, debug_1.default)("socket.io:server"); var clientVersion = require_package().version; var dotMapRegex = /\.map/; var Server2 = class _Server extends typed_events_1.StrictEventEmitter { constructor(srv, opts = {}) { super(); this._nsps = /* @__PURE__ */ new Map(); this.parentNsps = /* @__PURE__ */ new Map(); this.parentNamespacesFromRegExp = /* @__PURE__ */ new Map(); if ("object" === typeof srv && srv instanceof Object && !srv.listen) { opts = srv; srv = void 0; } this.path(opts.path || "/socket.io"); this.connectTimeout(opts.connectTimeout || 45e3); this.serveClient(false !== opts.serveClient); this._parser = opts.parser || parser; this.encoder = new this._parser.Encoder(); this.opts = opts; if (opts.connectionStateRecovery) { opts.connectionStateRecovery = Object.assign({ maxDisconnectionDuration: 2 * 60 * 1e3, skipMiddlewares: true }, opts.connectionStateRecovery); this.adapter(opts.adapter || socket_io_adapter_1.SessionAwareAdapter); } else { this.adapter(opts.adapter || socket_io_adapter_1.Adapter); } opts.cleanupEmptyChildNamespaces = !!opts.cleanupEmptyChildNamespaces; this.sockets = this.of("/"); if (srv || typeof srv == "number") this.attach(srv); if (this.opts.cors) { this._corsMiddleware = (0, cors_1.default)(this.opts.cors); } } get _opts() { return this.opts; } serveClient(v) { if (!arguments.length) return this._serveClient; this._serveClient = v; return this; } /** * Executes the middleware for an incoming namespace not already created on the server. * * @param name - name of incoming namespace * @param auth - the auth parameters * @param fn - callback * * @private */ _checkNamespace(name, auth, fn) { if (this.parentNsps.size === 0) return fn(false); const keysIterator = this.parentNsps.keys(); const run = () => { const nextFn = keysIterator.next(); if (nextFn.done) { return fn(false); } nextFn.value(name, auth, (err, allow) => { if (err || !allow) { return run(); } if (this._nsps.has(name)) { debug("dynamic namespace %s already exists", name); return fn(this._nsps.get(name)); } const namespace = this.parentNsps.get(nextFn.value).createChild(name); debug("dynamic namespace %s was created", name); fn(namespace); }); }; run(); } path(v) { if (!arguments.length) return this._path; this._path = v.replace(/\/$/, ""); const escapedPath = this._path.replace(/[-\/\\^$*+?.()|[\]{}]/g, "\\$&"); this.clientPathRegex = new RegExp("^" + escapedPath + "/socket\\.io(\\.msgpack|\\.esm)?(\\.min)?\\.js(\\.map)?(?:\\?|$)"); return this; } connectTimeout(v) { if (v === void 0) return this._connectTimeout; this._connectTimeout = v; return this; } adapter(v) { if (!arguments.length) return this._adapter; this._adapter = v; for (const nsp of this._nsps.values()) { nsp._initAdapter(); } return this; } /** * Attaches socket.io to a server or port. * * @param srv - server or port * @param opts - options passed to engine.io * @return self */ listen(srv, opts = {}) { return this.attach(srv, opts); } /** * Attaches socket.io to a server or port. * * @param srv - server or port * @param opts - options passed to engine.io * @return self */ attach(srv, opts = {}) { if ("function" == typeof srv) { const msg = "You are trying to attach socket.io to an express request handler function. Please pass a http.Server instance."; throw new Error(msg); } if (Number(srv) == srv) { srv = Number(srv); } if ("number" == typeof srv) { debug("creating http server and binding to %d", srv); const port2 = srv; srv = http.createServer((req, res) => { res.writeHead(404); res.end(); }); srv.listen(port2); } Object.assign(opts, this.opts); opts.path = opts.path || this._path; this.initEngine(srv, opts); return this; } attachApp(app, opts = {}) { Object.assign(opts, this.opts); opts.path = opts.path || this._path; debug("creating uWebSockets.js-based engine with opts %j", opts); const engine = new engine_io_1.uServer(opts); engine.attach(app, opts); this.bind(engine); if (this._serveClient) { app.get(`${this._path}/*`, (res, req) => { if (!this.clientPathRegex.test(req.getUrl())) { req.setYield(true); return; } const filename = req.getUrl().replace(this._path, "").replace(/\?.*$/, "").replace(/^\//, ""); const isMap = dotMapRegex.test(filename); const type = isMap ? "map" : "source"; const expectedEtag = '"' + clientVersion + '"'; const weakEtag = "W/" + expectedEtag; const etag = req.getHeader("if-none-match"); if (etag) { if (expectedEtag === etag || weakEtag === etag) { debug("serve client %s 304", type); res.writeStatus("304 Not Modified"); res.end(); return; } } debug("serve client %s", type); res.writeHeader("cache-control", "public, max-age=0"); res.writeHeader("content-type", "application/" + (isMap ? "json" : "javascript") + "; charset=utf-8"); res.writeHeader("etag", expectedEtag); const filepath = path.join(__dirname, "../client-dist/", filename); (0, uws_1.serveFile)(res, filepath); }); } (0, uws_1.patchAdapter)(app); } /** * Initialize engine * * @param srv - the server to attach to * @param opts - options passed to engine.io * @private */ initEngine(srv, opts) { debug("creating engine.io instance with opts %j", opts); this.eio = (0, engine_io_1.attach)(srv, opts); if (this._serveClient) this.attachServe(srv); this.httpServer = srv; this.bind(this.eio); } /** * Attaches the static file serving. * * @param srv http server * @private */ attachServe(srv) { debug("attaching client serving req handler"); const evs = srv.listeners("request").slice(0); srv.removeAllListeners("request"); srv.on("request", (req, res) => { if (this.clientPathRegex.test(req.url)) { if (this._corsMiddleware) { this._corsMiddleware(req, res, () => { this.serve(req, res); }); } else { this.serve(req, res); } } else { for (let i = 0; i < evs.length; i++) { evs[i].call(srv, req, res); } } }); } /** * Handles a request serving of client source and map * * @param req * @param res * @private */ serve(req, res) { const filename = req.url.replace(this._path, "").replace(/\?.*$/, ""); const isMap = dotMapRegex.test(filename); const type = isMap ? "map" : "source"; const expectedEtag = '"' + clientVersion + '"'; const weakEtag = "W/" + expectedEtag; const etag = req.headers["if-none-match"]; if (etag) { if (expectedEtag === etag || weakEtag === etag) { debug("serve client %s 304", type); res.writeHead(304); res.end(); return; } } debug("serve client %s", type); res.setHeader("Cache-Control", "public, max-age=0"); res.setHeader("Content-Type", "application/" + (isMap ? "json" : "javascript") + "; charset=utf-8"); res.setHeader("ETag", expectedEtag); _Server.sendFile(filename, req, res); } /** * @param filename * @param req * @param res * @private */ static sendFile(filename, req, res) { const readStream = (0, fs_1.createReadStream)(path.join(__dirname, "../client-dist/", filename)); const encoding = accepts(req).encodings(["br", "gzip", "deflate"]); const onError = (err) => { if (err) { res.end(); } }; switch (encoding) { case "br": res.writeHead(200, { "content-encoding": "br" }); readStream.pipe((0, zlib_1.createBrotliCompress)()).pipe(res); (0, stream_1.pipeline)(readStream, (0, zlib_1.createBrotliCompress)(), res, onError); break; case "gzip": res.writeHead(200, { "content-encoding": "gzip" }); (0, stream_1.pipeline)(readStream, (0, zlib_1.createGzip)(), res, onError); break; case "deflate": res.writeHead(200, { "content-encoding": "deflate" }); (0, stream_1.pipeline)(readStream, (0, zlib_1.createDeflate)(), res, onError); break; default: res.writeHead(200); (0, stream_1.pipeline)(readStream, res, onError); } } /** * Binds socket.io to an engine.io instance. * * @param engine engine.io (or compatible) server * @return self */ bind(engine) { this.engine = engine; this.engine.on("connection", this.onconnection.bind(this)); return this; } /** * Called with each incoming transport connection. * * @param {engine.Socket} conn * @return self * @private */ onconnection(conn) { debug("incoming connection with id %s", conn.id); const client = new client_1.Client(this, conn); if (conn.protocol === 3) { client.connect("/"); } return this; } /** * Looks up a namespace. * * @example * // with a simple string * const myNamespace = io.of("/my-namespace"); * * // with a regex * const dynamicNsp = io.of(/^\/dynamic-\d+$/).on("connection", (socket) => { * const namespace = socket.nsp; // newNamespace.name === "/dynamic-101" * * // broadcast to all clients in the given sub-namespace * namespace.emit("hello"); * }); * * @param name - nsp name * @param fn optional, nsp `connection` ev handler */ of(name, fn) { if (typeof name === "function" || name instanceof RegExp) { const parentNsp = new parent_namespace_1.ParentNamespace(this); debug("initializing parent namespace %s", parentNsp.name); if (typeof name === "function") { this.parentNsps.set(name, parentNsp); } else { this.parentNsps.set((nsp2, conn, next) => next(null, name.test(nsp2)), parentNsp); this.parentNamespacesFromRegExp.set(name, parentNsp); } if (fn) { parentNsp.on("connect", fn); } return parentNsp; } if (String(name)[0] !== "/") name = "/" + name; let nsp = this._nsps.get(name); if (!nsp) { for (const [regex, parentNamespace] of this.parentNamespacesFromRegExp) { if (regex.test(name)) { debug("attaching namespace %s to parent namespace %s", name, regex); return parentNamespace.createChild(name); } } debug("initializing namespace %s", name); nsp = new namespace_1.Namespace(this, name); this._nsps.set(name, nsp); if (name !== "/") { this.sockets.emitReserved("new_namespace", nsp); } } if (fn) nsp.on("connect", fn); return nsp; } /** * Closes server connection * * @param [fn] optional, called as `fn([err])` on error OR all conns closed */ close(fn) { for (const socket of this.sockets.sockets.values()) { socket._onclose("server shutting down"); } this.engine.close(); (0, uws_1.restoreAdapter)(); if (this.httpServer) { this.httpServer.close(fn); } else { fn && fn(); } } /** * Registers a middleware, which is a function that gets executed for every incoming {@link Socket}. * * @example * io.use((socket, next) => { * // ... * next(); * }); * * @param fn - the middleware function */ use(fn) { this.sockets.use(fn); return this; } /** * Targets a room when emitting. * * @example * // the “foo” event will be broadcast to all connected clients in the “room-101” room * io.to("room-101").emit("foo", "bar"); * * // with an array of rooms (a client will be notified at most once) * io.to(["room-101", "room-102"]).emit("foo", "bar"); * * // with multiple chained calls * io.to("room-101").to("room-102").emit("foo", "bar"); * * @param room - a room, or an array of rooms * @return a new {@link BroadcastOperator} instance for chaining */ to(room) { return this.sockets.to(room); } /** * Targets a room when emitting. Similar to `to()`, but might feel clearer in some cases: * * @example * // disconnect all clients in the "room-101" room * io.in("room-101").disconnectSockets(); * * @param room - a room, or an array of rooms * @return a new {@link BroadcastOperator} instance for chaining */ in(room) { return this.sockets.in(room); } /** * Excludes a room when emitting. * * @example * // the "foo" event will be broadcast to all connected clients, except the ones that are in the "room-101" room * io.except("room-101").emit("foo", "bar"); * * // with an array of rooms * io.except(["room-101", "room-102"]).emit("foo", "bar"); * * // with multiple chained calls * io.except("room-101").except("room-102").emit("foo", "bar"); * * @param room - a room, or an array of rooms * @return a new {@link BroadcastOperator} instance for chaining */ except(room) { return this.sockets.except(room); } /** * Emits an event and waits for an acknowledgement from all clients. * * @example * try { * const responses = await io.timeout(1000).emitWithAck("some-event"); * console.log(responses); // one response per client * } catch (e) { * // some clients did not acknowledge the event in the given delay * } * * @return a Promise that will be fulfilled when all clients have acknowledged the event */ emitWithAck(ev, ...args) { return this.sockets.emitWithAck(ev, ...args); } /** * Sends a `message` event to all clients. * * This method mimics the WebSocket.send() method. * * @see https://developer.mozilla.org/en-US/docs/Web/API/WebSocket/send * * @example * io.send("hello"); * * // this is equivalent to * io.emit("message", "hello"); * * @return self */ send(...args) { this.sockets.emit("message", ...args); return this; } /** * Sends a `message` event to all clients. Alias of {@link send}. * * @return self */ write(...args) { this.sockets.emit("message", ...args); return this; } /** * Sends a message to the other Socket.IO servers of the cluster. * * @example * io.serverSideEmit("hello", "world"); * * io.on("hello", (arg1) => { * console.log(arg1); // prints "world" * }); * * // acknowledgements (without binary content) are supported too: * io.serverSideEmit("ping", (err, responses) => { * if (err) { * // some servers did not acknowledge the event in the given delay * } else { * console.log(responses); // one response per server (except the current one) * } * }); * * io.on("ping", (cb) => { * cb("pong"); * }); * * @param ev - the event name * @param args - an array of arguments, which may include an acknowledgement callback at the end */ serverSideEmit(ev, ...args) { return this.sockets.serverSideEmit(ev, ...args); } /** * Sends a message and expect an acknowledgement from the other Socket.IO servers of the cluster. * * @example * try { * const responses = await io.serverSideEmitWithAck("ping"); * console.log(responses); // one response per server (except the current one) * } catch (e) { * // some servers did not acknowledge the event in the given delay * } * * @param ev - the event name * @param args - an array of arguments * * @return a Promise that will be fulfilled when all servers have acknowledged the event */ serverSideEmitWithAck(ev, ...args) { return this.sockets.serverSideEmitWithAck(ev, ...args); } /** * Gets a list of socket ids. * * @deprecated this method will be removed in the next major release, please use {@link Server#serverSideEmit} or * {@link Server#fetchSockets} instead. */ allSockets() { return this.sockets.allSockets(); } /** * Sets the compress flag. * * @example * io.compress(false).emit("hello"); * * @param compress - if `true`, compresses the sending data * @return a new {@link BroadcastOperator} instance for chaining */ compress(compress) { return this.sockets.compress(compress); } /** * Sets a modifier for a subsequent event emission that the event data may be lost if the client is not ready to * receive messages (because of network slowness or other issues, or because they’re connected through long polling * and is in the middle of a request-response cycle). * * @example * io.volatile.emit("hello"); // the clients may or may not receive it * * @return a new {@link BroadcastOperator} instance for chaining */ get volatile() { return this.sockets.volatile; } /** * Sets a modifier for a subsequent event emission that the event data will only be broadcast to the current node. * * @example * // the “foo” event will be broadcast to all connected clients on this node * io.local.emit("foo", "bar"); * * @return a new {@link BroadcastOperator} instance for chaining */ get local() { return this.sockets.local; } /** * Adds a timeout in milliseconds for the next operation. * * @example * io.timeout(1000).emit("some-event", (err, responses) => { * if (err) { * // some clients did not acknowledge the event in the given delay * } else { * console.log(responses); // one response per client * } * }); * * @param timeout */ timeout(timeout) { return this.sockets.timeout(timeout); } /** * Returns the matching socket instances. * * Note: this method also works within a cluster of multiple Socket.IO servers, with a compatible {@link Adapter}. * * @example * // return all Socket instances * const sockets = await io.fetchSockets(); * * // return all Socket instances in the "room1" room * const sockets = await io.in("room1").fetchSockets(); * * for (const socket of sockets) { * console.log(socket.id); * console.log(socket.handshake); * console.log(socket.rooms); * console.log(socket.data); * * socket.emit("hello"); * socket.join("room1"); * socket.leave("room2"); * socket.disconnect(); * } */ fetchSockets() { return this.sockets.fetchSockets(); } /** * Makes the matching socket instances join the specified rooms. * * Note: this method also works within a cluster of multiple Socket.IO servers, with a compatible {@link Adapter}. * * @example * * // make all socket instances join the "room1" room * io.socketsJoin("room1"); * * // make all socket instances in the "room1" room join the "room2" and "room3" rooms * io.in("room1").socketsJoin(["room2", "room3"]); * * @param room - a room, or an array of rooms */ socketsJoin(room) { return this.sockets.socketsJoin(room); } /** * Makes the matching socket instances leave the specified rooms. * * Note: this method also works within a cluster of multiple Socket.IO servers, with a compatible {@link Adapter}. * * @example * // make all socket instances leave the "room1" room * io.socketsLeave("room1"); * * // make all socket instances in the "room1" room leave the "room2" and "room3" rooms * io.in("room1").socketsLeave(["room2", "room3"]); * * @param room - a room, or an array of rooms */ socketsLeave(room) { return this.sockets.socketsLeave(room); } /** * Makes the matching socket instances disconnect. * * Note: this method also works within a cluster of multiple Socket.IO servers, with a compatible {@link Adapter}. * * @example * // make all socket instances disconnect (the connections might be kept alive for other namespaces) * io.disconnectSockets(); * * // make all socket instances in the "room1" room disconnect and close the underlying connections * io.in("room1").disconnectSockets(true); * * @param close - whether to close the underlying connection */ disconnectSockets(close = false) { return this.sockets.disconnectSockets(close); } }; exports2.Server = Server2; var emitterMethods = Object.keys(events_1.EventEmitter.prototype).filter(function(key) { return typeof events_1.EventEmitter.prototype[key] === "function"; }); emitterMethods.forEach(function(fn) { Server2.prototype[fn] = function() { return this.sockets[fn].apply(this.sockets, arguments); }; }); module2.exports = (srv, opts) => new Server2(srv, opts); module2.exports.Server = Server2; module2.exports.Namespace = namespace_1.Namespace; module2.exports.Socket = socket_1.Socket; var socket_2 = require_socket2(); } }); // node_modules/.pnpm/socket.io@4.7.2/node_modules/socket.io/wrapper.mjs var import_dist = __toESM(require_dist2(), 1); var { Server, Namespace, Socket } = import_dist.default; // integration/server/server.ts var import_node_http = require("http"); // src/utils/getPlayerIds.ts function getPlayerIds(source2) { const _identifiers = getPlayerIdentifiers(source2); const identifiers = { steamId: null, discordId: null }; for (const identifier of _identifiers) { if (identifier.includes("steam")) { identifiers.steamId = identifier; } else if (identifier.includes("discord")) { identifiers.discordId = identifier; } } return identifiers; } // integration/server/server.ts var server = (0, import_node_http.createServer)(); var port = GetConvarInt("socket_port", 30122); var io2 = new Server(server, { maxHttpBufferSize: 1e8, cors: { origin: "*" } }); var playerData = /* @__PURE__ */ new Map(); function getSmartSigns() { var _a, _b; try { return (_b = (_a = exports.SmartSigns)["SmartSigns:GetSigns"]) == null ? void 0 : _b.call(_a); } catch { return []; } } function getSmartMotorwaySigns() { var _a, _b; try { return (_b = (_a = exports.SmartMotorways)["getSigns"]) == null ? void 0 : _b.call(_a); } catch { return []; } } io2.on("connection", (socket) => { const smartSigns = getSmartSigns(); io2.sockets.emit("sna-live-map:smart-signs", { smartSigns }); socket.on("sna-live-map:update-smart-sign", (data) => { console.log( "[sna-live-map]", "Request received to update smart sign", data.id, data.defaultText ); emit("SmartSigns:apiUpdateSign", data.id, [ data.defaultText.firstLine, data.defaultText.secondLine, data.defaultText.thirdLine ]); }); const smartMotorwaySigns = getSmartMotorwaySigns(); io2.sockets.emit("sna-live-map:smart-motorways-signs", { smartMotorwaySigns }); socket.on("sna-live-map:update-smart-motorway-sign", (data) => { console.log("[sna-live-map]", "Request received to update Smart Motorway sign", data.id); emit("SmartMotorways:apiUpdateSign", data.id, data.speeds); }); }); on("SmartSigns:updateSignExternal", () => { const smartSigns = getSmartSigns(); io2.sockets.emit("sna-live-map:smart-signs", { smartSigns }); }); onNet("sna-live-map-sign-smart-motorways" /* SyncSmartMotorwaysSigns */, () => { const smartMotorwaySigns = getSmartMotorwaySigns(); io2.sockets.emit("sna-live-map:smart-motorways-signs", { smartMotorwaySigns }); }); onNet("onResourceStart" /* CFXResourceStarted */, (name) => { const playerCount = GetNumPlayerIndices(); if (name !== GetCurrentResourceName()) return; if (playerCount <= 0) return; io2.sockets.emit("map-data", { type: "playerData" /* UpdatePlayerData */, payload: Array.from(playerData.values()) }); const smartSigns = getSmartSigns(); io2.sockets.emit("sna-live-map:smart-signs", { smartSigns }); const smartMotorwaySigns = getSmartMotorwaySigns(); io2.sockets.emit("sna-live-map:smart-motorways-signs", { smartMotorwaySigns }); }); onNet("playerDropped" /* CFXPlayerDropped */, () => { const playerName = GetPlayerName(source); playerData.delete(playerName); io2.sockets.emit("map-data", { type: "playerLeft" /* RemovePlayer */, payload: playerName }); }); onNet("sna-live-map-player-spawned" /* PlayerSpawned */, (data) => { const identifiers = getPlayerIds(source); data.identifiers = identifiers; playerData.set(data.name, data); }); setInterval(() => { setImmediate(() => { io2.sockets.emit("map-data", { type: "playerData" /* UpdatePlayerData */, payload: Array.from(playerData.values()) }); }); }, 500); server.listen(port, () => { console.log("Socket server listening on %s", port); }); /*! Bundled license information: negotiator/index.js: (*! * negotiator * Copyright(c) 2012 Federico Romero * Copyright(c) 2012-2014 Isaac Z. Schlueter * Copyright(c) 2015 Douglas Christopher Wilson * MIT Licensed *) mime-db/index.js: (*! * mime-db * Copyright(c) 2014 Jonathan Ong * Copyright(c) 2015-2022 Douglas Christopher Wilson * MIT Licensed *) mime-types/index.js: (*! * mime-types * Copyright(c) 2014 Jonathan Ong * Copyright(c) 2015 Douglas Christopher Wilson * MIT Licensed *) accepts/index.js: (*! * accepts * Copyright(c) 2014 Jonathan Ong * Copyright(c) 2015 Douglas Christopher Wilson * MIT Licensed *) base64id/lib/base64id.js: (*! * base64id v0.1.0 *) engine.io/build/parser-v3/utf8.js: (*! https://mths.be/utf8js v2.1.2 by @mathias *) cookie/index.js: (*! * cookie * Copyright(c) 2012-2014 Roman Shtylman * Copyright(c) 2015 Douglas Christopher Wilson * MIT Licensed *) object-assign/index.js: (* object-assign (c) Sindre Sorhus @license MIT *) vary/index.js: (*! * vary * Copyright(c) 2014-2017 Douglas Christopher Wilson * MIT Licensed *) */