@coremail/lunkr-openclaw 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +221 -0
- package/dist/bin/lunkr-cli.js +26 -0
- package/dist/index.js +43 -0
- package/docs/AUTHENTICATION.md +254 -0
- package/docs/CHEATSHEET.md +112 -0
- package/docs/DEVELOPMENT.md +239 -0
- package/docs/USAGE.md +337 -0
- package/openclaw.plugin.json +61 -0
- package/package.json +93 -0
- package/skills/lunkr/SKILL.md +80 -0
package/dist/index.js
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
var ws=Object.create;var Wn=Object.defineProperty;var Cs=Object.getOwnPropertyDescriptor;var Ss=Object.getOwnPropertyNames;var Ls=Object.getPrototypeOf,As=Object.prototype.hasOwnProperty;var js=(s=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(s,{get:(e,n)=>(typeof require<"u"?require:e)[n]}):s)(function(s){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+s+'" is not supported')});var Le=(s,e)=>()=>(e||s((e={exports:{}}).exports,e),e.exports);var Rs=(s,e,n,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of Ss(e))!As.call(s,i)&&i!==n&&Wn(s,i,{get:()=>e[i],enumerable:!(o=Cs(e,i))||o.enumerable});return s};var Us=(s,e,n)=>(n=s!=null?ws(Ls(s)):{},Rs(e||!s||!s.__esModule?Wn(n,"default",{value:s,enumerable:!0}):n,s));var No=Le((_t,Li)=>{Li.exports={"application/1d-interleaved-parityfec":{source:"iana"},"application/3gpdash-qoe-report+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/3gpp-ims+xml":{source:"iana",compressible:!0},"application/3gpphal+json":{source:"iana",compressible:!0},"application/3gpphalforms+json":{source:"iana",compressible:!0},"application/a2l":{source:"iana"},"application/ace+cbor":{source:"iana"},"application/ace+json":{source:"iana",compressible:!0},"application/ace-groupcomm+cbor":{source:"iana"},"application/ace-trl+cbor":{source:"iana"},"application/activemessage":{source:"iana"},"application/activity+json":{source:"iana",compressible:!0},"application/aif+cbor":{source:"iana"},"application/aif+json":{source:"iana",compressible:!0},"application/alto-cdni+json":{source:"iana",compressible:!0},"application/alto-cdnifilter+json":{source:"iana",compressible:!0},"application/alto-costmap+json":{source:"iana",compressible:!0},"application/alto-costmapfilter+json":{source:"iana",compressible:!0},"application/alto-directory+json":{source:"iana",compressible:!0},"application/alto-endpointcost+json":{source:"iana",compressible:!0},"application/alto-endpointcostparams+json":{source:"iana",compressible:!0},"application/alto-endpointprop+json":{source:"iana",compressible:!0},"application/alto-endpointpropparams+json":{source:"iana",compressible:!0},"application/alto-error+json":{source:"iana",compressible:!0},"application/alto-networkmap+json":{source:"iana",compressible:!0},"application/alto-networkmapfilter+json":{source:"iana",compressible:!0},"application/alto-propmap+json":{source:"iana",compressible:!0},"application/alto-propmapparams+json":{source:"iana",compressible:!0},"application/alto-tips+json":{source:"iana",compressible:!0},"application/alto-tipsparams+json":{source:"iana",compressible:!0},"application/alto-updatestreamcontrol+json":{source:"iana",compressible:!0},"application/alto-updatestreamparams+json":{source:"iana",compressible:!0},"application/aml":{source:"iana"},"application/andrew-inset":{source:"iana",extensions:["ez"]},"application/appinstaller":{compressible:!1,extensions:["appinstaller"]},"application/applefile":{source:"iana"},"application/applixware":{source:"apache",extensions:["aw"]},"application/appx":{compressible:!1,extensions:["appx"]},"application/appxbundle":{compressible:!1,extensions:["appxbundle"]},"application/at+jwt":{source:"iana"},"application/atf":{source:"iana"},"application/atfx":{source:"iana"},"application/atom+xml":{source:"iana",compressible:!0,extensions:["atom"]},"application/atomcat+xml":{source:"iana",compressible:!0,extensions:["atomcat"]},"application/atomdeleted+xml":{source:"iana",compressible:!0,extensions:["atomdeleted"]},"application/atomicmail":{source:"iana"},"application/atomsvc+xml":{source:"iana",compressible:!0,extensions:["atomsvc"]},"application/atsc-dwd+xml":{source:"iana",compressible:!0,extensions:["dwd"]},"application/atsc-dynamic-event-message":{source:"iana"},"application/atsc-held+xml":{source:"iana",compressible:!0,extensions:["held"]},"application/atsc-rdt+json":{source:"iana",compressible:!0},"application/atsc-rsat+xml":{source:"iana",compressible:!0,extensions:["rsat"]},"application/atxml":{source:"iana"},"application/auth-policy+xml":{source:"iana",compressible:!0},"application/automationml-aml+xml":{source:"iana",compressible:!0,extensions:["aml"]},"application/automationml-amlx+zip":{source:"iana",compressible:!1,extensions:["amlx"]},"application/bacnet-xdd+zip":{source:"iana",compressible:!1},"application/batch-smtp":{source:"iana"},"application/bdoc":{compressible:!1,extensions:["bdoc"]},"application/beep+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/bufr":{source:"iana"},"application/c2pa":{source:"iana"},"application/calendar+json":{source:"iana",compressible:!0},"application/calendar+xml":{source:"iana",compressible:!0,extensions:["xcs"]},"application/call-completion":{source:"iana"},"application/cals-1840":{source:"iana"},"application/captive+json":{source:"iana",compressible:!0},"application/cbor":{source:"iana"},"application/cbor-seq":{source:"iana"},"application/cccex":{source:"iana"},"application/ccmp+xml":{source:"iana",compressible:!0},"application/ccxml+xml":{source:"iana",compressible:!0,extensions:["ccxml"]},"application/cda+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/cdfx+xml":{source:"iana",compressible:!0,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/ce+cbor":{source:"iana"},"application/cea":{source:"iana"},"application/cea-2018+xml":{source:"iana",compressible:!0},"application/cellml+xml":{source:"iana",compressible:!0},"application/cfw":{source:"iana"},"application/cid-edhoc+cbor-seq":{source:"iana"},"application/city+json":{source:"iana",compressible:!0},"application/city+json-seq":{source:"iana"},"application/clr":{source:"iana"},"application/clue+xml":{source:"iana",compressible:!0},"application/clue_info+xml":{source:"iana",compressible:!0},"application/cms":{source:"iana"},"application/cnrp+xml":{source:"iana",compressible:!0},"application/coap-eap":{source:"iana"},"application/coap-group+json":{source:"iana",compressible:!0},"application/coap-payload":{source:"iana"},"application/commonground":{source:"iana"},"application/concise-problem-details+cbor":{source:"iana"},"application/conference-info+xml":{source:"iana",compressible:!0},"application/cose":{source:"iana"},"application/cose-key":{source:"iana"},"application/cose-key-set":{source:"iana"},"application/cose-x509":{source:"iana"},"application/cpl+xml":{source:"iana",compressible:!0,extensions:["cpl"]},"application/csrattrs":{source:"iana"},"application/csta+xml":{source:"iana",compressible:!0},"application/cstadata+xml":{source:"iana",compressible:!0},"application/csvm+json":{source:"iana",compressible:!0},"application/cu-seeme":{source:"apache",extensions:["cu"]},"application/cwl":{source:"iana",extensions:["cwl"]},"application/cwl+json":{source:"iana",compressible:!0},"application/cwl+yaml":{source:"iana"},"application/cwt":{source:"iana"},"application/cybercash":{source:"iana"},"application/dart":{compressible:!0},"application/dash+xml":{source:"iana",compressible:!0,extensions:["mpd"]},"application/dash-patch+xml":{source:"iana",compressible:!0,extensions:["mpp"]},"application/dashdelta":{source:"iana"},"application/davmount+xml":{source:"iana",compressible:!0,extensions:["davmount"]},"application/dca-rft":{source:"iana"},"application/dcd":{source:"iana"},"application/dec-dx":{source:"iana"},"application/dialog-info+xml":{source:"iana",compressible:!0},"application/dicom":{source:"iana",extensions:["dcm"]},"application/dicom+json":{source:"iana",compressible:!0},"application/dicom+xml":{source:"iana",compressible:!0},"application/dii":{source:"iana"},"application/dit":{source:"iana"},"application/dns":{source:"iana"},"application/dns+json":{source:"iana",compressible:!0},"application/dns-message":{source:"iana"},"application/docbook+xml":{source:"apache",compressible:!0,extensions:["dbk"]},"application/dots+cbor":{source:"iana"},"application/dpop+jwt":{source:"iana"},"application/dskpp+xml":{source:"iana",compressible:!0},"application/dssc+der":{source:"iana",extensions:["dssc"]},"application/dssc+xml":{source:"iana",compressible:!0,extensions:["xdssc"]},"application/dvcs":{source:"iana"},"application/eat+cwt":{source:"iana"},"application/eat+jwt":{source:"iana"},"application/eat-bun+cbor":{source:"iana"},"application/eat-bun+json":{source:"iana",compressible:!0},"application/eat-ucs+cbor":{source:"iana"},"application/eat-ucs+json":{source:"iana",compressible:!0},"application/ecmascript":{source:"apache",compressible:!0,extensions:["ecma"]},"application/edhoc+cbor-seq":{source:"iana"},"application/edi-consent":{source:"iana"},"application/edi-x12":{source:"iana",compressible:!1},"application/edifact":{source:"iana",compressible:!1},"application/efi":{source:"iana"},"application/elm+json":{source:"iana",charset:"UTF-8",compressible:!0},"application/elm+xml":{source:"iana",compressible:!0},"application/emergencycalldata.cap+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/emergencycalldata.comment+xml":{source:"iana",compressible:!0},"application/emergencycalldata.control+xml":{source:"iana",compressible:!0},"application/emergencycalldata.deviceinfo+xml":{source:"iana",compressible:!0},"application/emergencycalldata.ecall.msd":{source:"iana"},"application/emergencycalldata.legacyesn+json":{source:"iana",compressible:!0},"application/emergencycalldata.providerinfo+xml":{source:"iana",compressible:!0},"application/emergencycalldata.serviceinfo+xml":{source:"iana",compressible:!0},"application/emergencycalldata.subscriberinfo+xml":{source:"iana",compressible:!0},"application/emergencycalldata.veds+xml":{source:"iana",compressible:!0},"application/emma+xml":{source:"iana",compressible:!0,extensions:["emma"]},"application/emotionml+xml":{source:"iana",compressible:!0,extensions:["emotionml"]},"application/encaprtp":{source:"iana"},"application/entity-statement+jwt":{source:"iana"},"application/epp+xml":{source:"iana",compressible:!0},"application/epub+zip":{source:"iana",compressible:!1,extensions:["epub"]},"application/eshop":{source:"iana"},"application/exi":{source:"iana",extensions:["exi"]},"application/expect-ct-report+json":{source:"iana",compressible:!0},"application/express":{source:"iana",extensions:["exp"]},"application/fastinfoset":{source:"iana"},"application/fastsoap":{source:"iana"},"application/fdf":{source:"iana",extensions:["fdf"]},"application/fdt+xml":{source:"iana",compressible:!0,extensions:["fdt"]},"application/fhir+json":{source:"iana",charset:"UTF-8",compressible:!0},"application/fhir+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/fido.trusted-apps+json":{compressible:!0},"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:!1},"application/framework-attributes+xml":{source:"iana",compressible:!0},"application/geo+json":{source:"iana",compressible:!0,extensions:["geojson"]},"application/geo+json-seq":{source:"iana"},"application/geopackage+sqlite3":{source:"iana"},"application/geopose+json":{source:"iana",compressible:!0},"application/geoxacml+json":{source:"iana",compressible:!0},"application/geoxacml+xml":{source:"iana",compressible:!0},"application/gltf-buffer":{source:"iana"},"application/gml+xml":{source:"iana",compressible:!0,extensions:["gml"]},"application/gnap-binding-jws":{source:"iana"},"application/gnap-binding-jwsd":{source:"iana"},"application/gnap-binding-rotation-jws":{source:"iana"},"application/gnap-binding-rotation-jwsd":{source:"iana"},"application/gpx+xml":{source:"apache",compressible:!0,extensions:["gpx"]},"application/grib":{source:"iana"},"application/gxf":{source:"apache",extensions:["gxf"]},"application/gzip":{source:"iana",compressible:!1,extensions:["gz"]},"application/h224":{source:"iana"},"application/held+xml":{source:"iana",compressible:!0},"application/hjson":{extensions:["hjson"]},"application/hl7v2+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/http":{source:"iana"},"application/hyperstudio":{source:"iana",extensions:["stk"]},"application/ibe-key-request+xml":{source:"iana",compressible:!0},"application/ibe-pkg-reply+xml":{source:"iana",compressible:!0},"application/ibe-pp-data":{source:"iana"},"application/iges":{source:"iana"},"application/im-iscomposing+xml":{source:"iana",charset:"UTF-8",compressible:!0},"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:!0,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:!0,extensions:["its"]},"application/java-archive":{source:"iana",compressible:!1,extensions:["jar","war","ear"]},"application/java-serialized-object":{source:"apache",compressible:!1,extensions:["ser"]},"application/java-vm":{source:"apache",compressible:!1,extensions:["class"]},"application/javascript":{source:"apache",charset:"UTF-8",compressible:!0,extensions:["js"]},"application/jf2feed+json":{source:"iana",compressible:!0},"application/jose":{source:"iana"},"application/jose+json":{source:"iana",compressible:!0},"application/jrd+json":{source:"iana",compressible:!0},"application/jscalendar+json":{source:"iana",compressible:!0},"application/jscontact+json":{source:"iana",compressible:!0},"application/json":{source:"iana",charset:"UTF-8",compressible:!0,extensions:["json","map"]},"application/json-patch+json":{source:"iana",compressible:!0},"application/json-seq":{source:"iana"},"application/json5":{extensions:["json5"]},"application/jsonml+json":{source:"apache",compressible:!0,extensions:["jsonml"]},"application/jsonpath":{source:"iana"},"application/jwk+json":{source:"iana",compressible:!0},"application/jwk-set+json":{source:"iana",compressible:!0},"application/jwk-set+jwt":{source:"iana"},"application/jwt":{source:"iana"},"application/kpml-request+xml":{source:"iana",compressible:!0},"application/kpml-response+xml":{source:"iana",compressible:!0},"application/ld+json":{source:"iana",compressible:!0,extensions:["jsonld"]},"application/lgr+xml":{source:"iana",compressible:!0,extensions:["lgr"]},"application/link-format":{source:"iana"},"application/linkset":{source:"iana"},"application/linkset+json":{source:"iana",compressible:!0},"application/load-control+xml":{source:"iana",compressible:!0},"application/logout+jwt":{source:"iana"},"application/lost+xml":{source:"iana",compressible:!0,extensions:["lostxml"]},"application/lostsync+xml":{source:"iana",compressible:!0},"application/lpf+zip":{source:"iana",compressible:!1},"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:!0,extensions:["mads"]},"application/manifest+json":{source:"iana",charset:"UTF-8",compressible:!0,extensions:["webmanifest"]},"application/marc":{source:"iana",extensions:["mrc"]},"application/marcxml+xml":{source:"iana",compressible:!0,extensions:["mrcx"]},"application/mathematica":{source:"iana",extensions:["ma","nb","mb"]},"application/mathml+xml":{source:"iana",compressible:!0,extensions:["mathml"]},"application/mathml-content+xml":{source:"iana",compressible:!0},"application/mathml-presentation+xml":{source:"iana",compressible:!0},"application/mbms-associated-procedure-description+xml":{source:"iana",compressible:!0},"application/mbms-deregister+xml":{source:"iana",compressible:!0},"application/mbms-envelope+xml":{source:"iana",compressible:!0},"application/mbms-msk+xml":{source:"iana",compressible:!0},"application/mbms-msk-response+xml":{source:"iana",compressible:!0},"application/mbms-protection-description+xml":{source:"iana",compressible:!0},"application/mbms-reception-report+xml":{source:"iana",compressible:!0},"application/mbms-register+xml":{source:"iana",compressible:!0},"application/mbms-register-response+xml":{source:"iana",compressible:!0},"application/mbms-schedule+xml":{source:"iana",compressible:!0},"application/mbms-user-service-description+xml":{source:"iana",compressible:!0},"application/mbox":{source:"iana",extensions:["mbox"]},"application/media-policy-dataset+xml":{source:"iana",compressible:!0,extensions:["mpf"]},"application/media_control+xml":{source:"iana",compressible:!0},"application/mediaservercontrol+xml":{source:"iana",compressible:!0,extensions:["mscml"]},"application/merge-patch+json":{source:"iana",compressible:!0},"application/metalink+xml":{source:"apache",compressible:!0,extensions:["metalink"]},"application/metalink4+xml":{source:"iana",compressible:!0,extensions:["meta4"]},"application/mets+xml":{source:"iana",compressible:!0,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:!0,extensions:["maei"]},"application/mmt-usd+xml":{source:"iana",compressible:!0,extensions:["musd"]},"application/mods+xml":{source:"iana",compressible:!0,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:["mp4","mpg4","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:!0},"application/mrb-publish+xml":{source:"iana",compressible:!0},"application/msc-ivr+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/msc-mixer+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/msix":{compressible:!1,extensions:["msix"]},"application/msixbundle":{compressible:!1,extensions:["msixbundle"]},"application/msword":{source:"iana",compressible:!1,extensions:["doc","dot"]},"application/mud+json":{source:"iana",compressible:!0},"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:!0},"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:!0,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:!0},"application/odx":{source:"iana"},"application/oebps-package+xml":{source:"iana",compressible:!0,extensions:["opf"]},"application/ogg":{source:"iana",compressible:!1,extensions:["ogx"]},"application/ohttp-keys":{source:"iana"},"application/omdoc+xml":{source:"apache",compressible:!0,extensions:["omdoc"]},"application/onenote":{source:"apache",extensions:["onetoc","onetoc2","onetmp","onepkg","one","onea"]},"application/opc-nodeset+xml":{source:"iana",compressible:!0},"application/oscore":{source:"iana"},"application/oxps":{source:"iana",extensions:["oxps"]},"application/p21":{source:"iana"},"application/p21+zip":{source:"iana",compressible:!1},"application/p2p-overlay+xml":{source:"iana",compressible:!0,extensions:["relo"]},"application/parityfec":{source:"iana"},"application/passport":{source:"iana"},"application/patch-ops-error+xml":{source:"iana",compressible:!0,extensions:["xer"]},"application/pdf":{source:"iana",compressible:!1,extensions:["pdf"]},"application/pdx":{source:"iana"},"application/pem-certificate-chain":{source:"iana"},"application/pgp-encrypted":{source:"iana",compressible:!1,extensions:["pgp"]},"application/pgp-keys":{source:"iana",extensions:["asc"]},"application/pgp-signature":{source:"iana",extensions:["sig","asc"]},"application/pics-rules":{source:"apache",extensions:["prf"]},"application/pidf+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/pidf-diff+xml":{source:"iana",charset:"UTF-8",compressible:!0},"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:!0,extensions:["pls"]},"application/poc-settings+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/postscript":{source:"iana",compressible:!0,extensions:["ai","eps","ps"]},"application/ppsp-tracker+json":{source:"iana",compressible:!0},"application/private-token-issuer-directory":{source:"iana"},"application/private-token-request":{source:"iana"},"application/private-token-response":{source:"iana"},"application/problem+json":{source:"iana",compressible:!0},"application/problem+xml":{source:"iana",compressible:!0},"application/provenance+xml":{source:"iana",compressible:!0,extensions:["provx"]},"application/provided-claims+jwt":{source:"iana"},"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:!1},"application/prs.implied-document+xml":{source:"iana",compressible:!0},"application/prs.implied-executable":{source:"iana"},"application/prs.implied-object+json":{source:"iana",compressible:!0},"application/prs.implied-object+json-seq":{source:"iana"},"application/prs.implied-object+yaml":{source:"iana"},"application/prs.implied-structure":{source:"iana"},"application/prs.mayfile":{source:"iana"},"application/prs.nprend":{source:"iana"},"application/prs.plucker":{source:"iana"},"application/prs.rdf-xml-crypt":{source:"iana"},"application/prs.vcfbzip2":{source:"iana"},"application/prs.xsf+xml":{source:"iana",compressible:!0,extensions:["xsf"]},"application/pskc+xml":{source:"iana",compressible:!0,extensions:["pskcxml"]},"application/pvd+json":{source:"iana",compressible:!0},"application/qsig":{source:"iana"},"application/raml+yaml":{compressible:!0,extensions:["raml"]},"application/raptorfec":{source:"iana"},"application/rdap+json":{source:"iana",compressible:!0},"application/rdf+xml":{source:"iana",compressible:!0,extensions:["rdf","owl"]},"application/reginfo+xml":{source:"iana",compressible:!0,extensions:["rif"]},"application/relax-ng-compact-syntax":{source:"iana",extensions:["rnc"]},"application/remote-printing":{source:"apache"},"application/reputon+json":{source:"iana",compressible:!0},"application/resolve-response+jwt":{source:"iana"},"application/resource-lists+xml":{source:"iana",compressible:!0,extensions:["rl"]},"application/resource-lists-diff+xml":{source:"iana",compressible:!0,extensions:["rld"]},"application/rfc+xml":{source:"iana",compressible:!0},"application/riscos":{source:"iana"},"application/rlmi+xml":{source:"iana",compressible:!0},"application/rls-services+xml":{source:"iana",compressible:!0,extensions:["rs"]},"application/route-apd+xml":{source:"iana",compressible:!0,extensions:["rapd"]},"application/route-s-tsid+xml":{source:"iana",compressible:!0,extensions:["sls"]},"application/route-usd+xml":{source:"iana",compressible:!0,extensions:["rusd"]},"application/rpki-checklist":{source:"iana"},"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-signed-tal":{source:"iana"},"application/rpki-updown":{source:"iana"},"application/rsd+xml":{source:"apache",compressible:!0,extensions:["rsd"]},"application/rss+xml":{source:"apache",compressible:!0,extensions:["rss"]},"application/rtf":{source:"iana",compressible:!0,extensions:["rtf"]},"application/rtploopback":{source:"iana"},"application/rtx":{source:"iana"},"application/samlassertion+xml":{source:"iana",compressible:!0},"application/samlmetadata+xml":{source:"iana",compressible:!0},"application/sarif+json":{source:"iana",compressible:!0},"application/sarif-external-properties+json":{source:"iana",compressible:!0},"application/sbe":{source:"iana"},"application/sbml+xml":{source:"iana",compressible:!0,extensions:["sbml"]},"application/scaip+xml":{source:"iana",compressible:!0},"application/scim+json":{source:"iana",compressible:!0},"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:!0},"application/senml+xml":{source:"iana",compressible:!0,extensions:["senmlx"]},"application/senml-etch+cbor":{source:"iana"},"application/senml-etch+json":{source:"iana",compressible:!0},"application/senml-exi":{source:"iana"},"application/sensml+cbor":{source:"iana"},"application/sensml+json":{source:"iana",compressible:!0},"application/sensml+xml":{source:"iana",compressible:!0,extensions:["sensmlx"]},"application/sensml-exi":{source:"iana"},"application/sep+xml":{source:"iana",compressible:!0},"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:!0,extensions:["shf"]},"application/sieve":{source:"iana",extensions:["siv","sieve"]},"application/simple-filter+xml":{source:"iana",compressible:!0},"application/simple-message-summary":{source:"iana"},"application/simplesymbolcontainer":{source:"iana"},"application/sipc":{source:"iana"},"application/slate":{source:"iana"},"application/smil":{source:"apache"},"application/smil+xml":{source:"iana",compressible:!0,extensions:["smi","smil"]},"application/smpte336m":{source:"iana"},"application/soap+fastinfoset":{source:"iana"},"application/soap+xml":{source:"iana",compressible:!0},"application/sparql-query":{source:"iana",extensions:["rq"]},"application/sparql-results+xml":{source:"iana",compressible:!0,extensions:["srx"]},"application/spdx+json":{source:"iana",compressible:!0},"application/spirits-event+xml":{source:"iana",compressible:!0},"application/sql":{source:"iana",extensions:["sql"]},"application/srgs":{source:"iana",extensions:["gram"]},"application/srgs+xml":{source:"iana",compressible:!0,extensions:["grxml"]},"application/sru+xml":{source:"iana",compressible:!0,extensions:["sru"]},"application/ssdl+xml":{source:"apache",compressible:!0,extensions:["ssdl"]},"application/sslkeylogfile":{source:"iana"},"application/ssml+xml":{source:"iana",compressible:!0,extensions:["ssml"]},"application/st2110-41":{source:"iana"},"application/stix+json":{source:"iana",compressible:!0},"application/stratum":{source:"iana"},"application/swid+cbor":{source:"iana"},"application/swid+xml":{source:"iana",compressible:!0,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:!0},"application/taxii+json":{source:"iana",compressible:!0},"application/td+json":{source:"iana",compressible:!0},"application/tei+xml":{source:"iana",compressible:!0,extensions:["tei","teicorpus"]},"application/tetra_isi":{source:"iana"},"application/thraud+xml":{source:"iana",compressible:!0,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:!0},"application/tm+json":{source:"iana",compressible:!0},"application/tnauthlist":{source:"iana"},"application/toc+cbor":{source:"iana"},"application/token-introspection+jwt":{source:"iana"},"application/toml":{source:"iana",compressible:!0,extensions:["toml"]},"application/trickle-ice-sdpfrag":{source:"iana"},"application/trig":{source:"iana",extensions:["trig"]},"application/trust-chain+json":{source:"iana",compressible:!0},"application/trust-mark+jwt":{source:"iana"},"application/trust-mark-delegation+jwt":{source:"iana"},"application/ttml+xml":{source:"iana",compressible:!0,extensions:["ttml"]},"application/tve-trigger":{source:"iana"},"application/tzif":{source:"iana"},"application/tzif-leap":{source:"iana"},"application/ubjson":{compressible:!1,extensions:["ubj"]},"application/uccs+cbor":{source:"iana"},"application/ujcs+json":{source:"iana",compressible:!0},"application/ulpfec":{source:"iana"},"application/urc-grpsheet+xml":{source:"iana",compressible:!0},"application/urc-ressheet+xml":{source:"iana",compressible:!0,extensions:["rsheet"]},"application/urc-targetdesc+xml":{source:"iana",compressible:!0,extensions:["td"]},"application/urc-uisocketdesc+xml":{source:"iana",compressible:!0},"application/vc":{source:"iana"},"application/vc+cose":{source:"iana"},"application/vc+jwt":{source:"iana"},"application/vcard+json":{source:"iana",compressible:!0},"application/vcard+xml":{source:"iana",compressible:!0},"application/vemmi":{source:"iana"},"application/vividence.scriptfile":{source:"apache"},"application/vnd.1000minds.decision-model+xml":{source:"iana",compressible:!0,extensions:["1km"]},"application/vnd.1ob":{source:"iana"},"application/vnd.3gpp-prose+xml":{source:"iana",compressible:!0},"application/vnd.3gpp-prose-pc3a+xml":{source:"iana",compressible:!0},"application/vnd.3gpp-prose-pc3ach+xml":{source:"iana",compressible:!0},"application/vnd.3gpp-prose-pc3ch+xml":{source:"iana",compressible:!0},"application/vnd.3gpp-prose-pc8+xml":{source:"iana",compressible:!0},"application/vnd.3gpp-v2x-local-service-information":{source:"iana"},"application/vnd.3gpp.5gnas":{source:"iana"},"application/vnd.3gpp.5gsa2x":{source:"iana"},"application/vnd.3gpp.5gsa2x-local-service-information":{source:"iana"},"application/vnd.3gpp.5gsv2x":{source:"iana"},"application/vnd.3gpp.5gsv2x-local-service-information":{source:"iana"},"application/vnd.3gpp.access-transfer-events+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.bsf+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.crs+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.current-location-discovery+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.gmop+xml":{source:"iana",compressible:!0},"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:!0},"application/vnd.3gpp.mcdata-info+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcdata-msgstore-ctrl-request+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcdata-payload":{source:"iana"},"application/vnd.3gpp.mcdata-regroup+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcdata-service-config+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcdata-signalling":{source:"iana"},"application/vnd.3gpp.mcdata-ue-config+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcdata-user-profile+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcptt-affiliation-command+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcptt-floor-request+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcptt-info+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcptt-location-info+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcptt-mbms-usage-info+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcptt-regroup+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcptt-service-config+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcptt-signed+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcptt-ue-config+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcptt-ue-init-config+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcptt-user-profile+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcvideo-affiliation-command+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcvideo-info+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcvideo-location-info+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcvideo-mbms-usage-info+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcvideo-regroup+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcvideo-service-config+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcvideo-transmission-request+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcvideo-ue-config+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcvideo-user-profile+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mid-call+xml":{source:"iana",compressible:!0},"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.pinapp-info+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.s1ap":{source:"iana"},"application/vnd.3gpp.seal-group-doc+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.seal-info+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.seal-location-info+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.seal-mbms-usage-info+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.seal-network-qos-management-info+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.seal-ue-config-info+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.seal-unicast-info+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.seal-user-profile-info+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.sms":{source:"iana"},"application/vnd.3gpp.sms+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.srvcc-ext+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.srvcc-info+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.state-and-event-info+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.ussd+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.v2x":{source:"iana"},"application/vnd.3gpp.vae-info+xml":{source:"iana",compressible:!0},"application/vnd.3gpp2.bcmcsinfo+xml":{source:"iana",compressible:!0},"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.acm.addressxfer+json":{source:"iana",compressible:!0},"application/vnd.acm.chatbot+json":{source:"iana",compressible:!0},"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:!1,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:!0,extensions:["xdp"]},"application/vnd.adobe.xfdf":{source:"apache",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:"apache"},"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:!0},"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:!0},"application/vnd.android.ota":{source:"iana"},"application/vnd.android.package-archive":{source:"apache",compressible:!1,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.parquet":{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.apexlang":{source:"iana"},"application/vnd.api+json":{source:"iana",compressible:!0},"application/vnd.aplextor.warrp+json":{source:"iana",compressible:!0},"application/vnd.apothekende.reservation+json":{source:"iana",compressible:!0},"application/vnd.apple.installer+xml":{source:"iana",compressible:!0,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:!1,extensions:["pkpass"]},"application/vnd.arastra.swi":{source:"apache"},"application/vnd.aristanetworks.swi":{source:"iana",extensions:["swi"]},"application/vnd.artisan+json":{source:"iana",compressible:!0},"application/vnd.artsquare":{source:"iana"},"application/vnd.astraea-software.iota":{source:"iana",extensions:["iota"]},"application/vnd.audiograph":{source:"iana",extensions:["aep"]},"application/vnd.autodesk.fbx":{extensions:["fbx"]},"application/vnd.autopackage":{source:"iana"},"application/vnd.avalon+json":{source:"iana",compressible:!0},"application/vnd.avistar+xml":{source:"iana",compressible:!0},"application/vnd.balsamiq.bmml+xml":{source:"iana",compressible:!0,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:!0},"application/vnd.bekitzur-stech+json":{source:"iana",compressible:!0},"application/vnd.belightsoft.lhzd+zip":{source:"iana",compressible:!1},"application/vnd.belightsoft.lhzl+zip":{source:"iana",compressible:!1},"application/vnd.bint.med-content":{source:"iana"},"application/vnd.biopax.rdf+xml":{source:"iana",compressible:!0},"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:!0},"application/vnd.bzip3":{source:"iana"},"application/vnd.c3voc.schedule+xml":{source:"iana",compressible:!0},"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:!0},"application/vnd.cendio.thinlinc.clientconf":{source:"iana"},"application/vnd.century-systems.tcp_stream":{source:"iana"},"application/vnd.chemdraw+xml":{source:"iana",compressible:!0,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:!0,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.cncf.helm.chart.content.v1.tar+gzip":{source:"iana"},"application/vnd.cncf.helm.chart.provenance.v1.prov":{source:"iana"},"application/vnd.cncf.helm.config.v1+json":{source:"iana",compressible:!0},"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:!0},"application/vnd.collection.doc+json":{source:"iana",compressible:!0},"application/vnd.collection.next+json":{source:"iana",compressible:!0},"application/vnd.comicbook+zip":{source:"iana",compressible:!1},"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:!0},"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:!0,extensions:["wbs"]},"application/vnd.cryptii.pipe+json":{source:"iana",compressible:!0},"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:!0},"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:!0},"application/vnd.cybank":{source:"iana"},"application/vnd.cyclonedx+json":{source:"iana",compressible:!0},"application/vnd.cyclonedx+xml":{source:"iana",compressible:!0},"application/vnd.d2l.coursepackage1p0+zip":{source:"iana",compressible:!1},"application/vnd.d3m-dataset":{source:"iana"},"application/vnd.d3m-problem":{source:"iana"},"application/vnd.dart":{source:"iana",compressible:!0,extensions:["dart"]},"application/vnd.data-vision.rdz":{source:"iana",extensions:["rdz"]},"application/vnd.datalog":{source:"iana"},"application/vnd.datapackage+json":{source:"iana",compressible:!0},"application/vnd.dataresource+json":{source:"iana",compressible:!0},"application/vnd.dbf":{source:"iana",extensions:["dbf"]},"application/vnd.dcmp+xml":{source:"iana",compressible:!0,extensions:["dcmp"]},"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:!0,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:!0},"application/vnd.dna":{source:"iana",extensions:["dna"]},"application/vnd.document+json":{source:"iana",compressible:!0},"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:!0},"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:!0},"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:!0},"application/vnd.dvb.notif-container+xml":{source:"iana",compressible:!0},"application/vnd.dvb.notif-generic+xml":{source:"iana",compressible:!0},"application/vnd.dvb.notif-ia-msglist+xml":{source:"iana",compressible:!0},"application/vnd.dvb.notif-ia-registration-request+xml":{source:"iana",compressible:!0},"application/vnd.dvb.notif-ia-registration-response+xml":{source:"iana",compressible:!0},"application/vnd.dvb.notif-init+xml":{source:"iana",compressible:!0},"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:!0},"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.eln+zip":{source:"iana",compressible:!1},"application/vnd.emclient.accessrequest+xml":{source:"iana",compressible:!0},"application/vnd.enliven":{source:"iana",extensions:["nml"]},"application/vnd.enphase.envoy":{source:"iana"},"application/vnd.eprints.data+xml":{source:"iana",compressible:!0},"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.erofs":{source:"iana"},"application/vnd.espass-espass+zip":{source:"iana",compressible:!1},"application/vnd.eszigno3+xml":{source:"iana",compressible:!0,extensions:["es3","et3"]},"application/vnd.etsi.aoc+xml":{source:"iana",compressible:!0},"application/vnd.etsi.asic-e+zip":{source:"iana",compressible:!1},"application/vnd.etsi.asic-s+zip":{source:"iana",compressible:!1},"application/vnd.etsi.cug+xml":{source:"iana",compressible:!0},"application/vnd.etsi.iptvcommand+xml":{source:"iana",compressible:!0},"application/vnd.etsi.iptvdiscovery+xml":{source:"iana",compressible:!0},"application/vnd.etsi.iptvprofile+xml":{source:"iana",compressible:!0},"application/vnd.etsi.iptvsad-bc+xml":{source:"iana",compressible:!0},"application/vnd.etsi.iptvsad-cod+xml":{source:"iana",compressible:!0},"application/vnd.etsi.iptvsad-npvr+xml":{source:"iana",compressible:!0},"application/vnd.etsi.iptvservice+xml":{source:"iana",compressible:!0},"application/vnd.etsi.iptvsync+xml":{source:"iana",compressible:!0},"application/vnd.etsi.iptvueprofile+xml":{source:"iana",compressible:!0},"application/vnd.etsi.mcid+xml":{source:"iana",compressible:!0},"application/vnd.etsi.mheg5":{source:"iana"},"application/vnd.etsi.overload-control-policy-dataset+xml":{source:"iana",compressible:!0},"application/vnd.etsi.pstn+xml":{source:"iana",compressible:!0},"application/vnd.etsi.sci+xml":{source:"iana",compressible:!0},"application/vnd.etsi.simservs+xml":{source:"iana",compressible:!0},"application/vnd.etsi.timestamp-token":{source:"iana"},"application/vnd.etsi.tsl+xml":{source:"iana",compressible:!0},"application/vnd.etsi.tsl.der":{source:"iana"},"application/vnd.eu.kasparian.car+json":{source:"iana",compressible:!0},"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:!1},"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:!1},"application/vnd.fastcopy-disk-image":{source:"iana"},"application/vnd.fdf":{source:"apache",extensions:["fdf"]},"application/vnd.fdsn.mseed":{source:"iana",extensions:["mseed"]},"application/vnd.fdsn.seed":{source:"iana",extensions:["seed","dataless"]},"application/vnd.fdsn.stationxml+xml":{source:"iana",charset:"XML-BASED",compressible:!0},"application/vnd.ffsns":{source:"iana"},"application/vnd.ficlab.flb+zip":{source:"iana",compressible:!1},"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.freelog.comic":{source:"iana"},"application/vnd.frogans.fnc":{source:"apache",extensions:["fnc"]},"application/vnd.frogans.ltf":{source:"apache",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:!0},"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:!0},"application/vnd.fuzzysheet":{source:"iana",extensions:["fzs"]},"application/vnd.ga4gh.passport+jwt":{source:"iana"},"application/vnd.genomatix.tuxedo":{source:"iana",extensions:["txd"]},"application/vnd.genozip":{source:"iana"},"application/vnd.gentics.grd+json":{source:"iana",compressible:!0},"application/vnd.gentoo.catmetadata+xml":{source:"iana",compressible:!0},"application/vnd.gentoo.ebuild":{source:"iana"},"application/vnd.gentoo.eclass":{source:"iana"},"application/vnd.gentoo.gpkg":{source:"iana"},"application/vnd.gentoo.manifest":{source:"iana"},"application/vnd.gentoo.pkgmetadata+xml":{source:"iana",compressible:!0},"application/vnd.gentoo.xpak":{source:"iana"},"application/vnd.geo+json":{source:"apache",compressible:!0},"application/vnd.geocube+xml":{source:"apache",compressible:!0},"application/vnd.geogebra.file":{source:"iana",extensions:["ggb"]},"application/vnd.geogebra.pinboard":{source:"iana"},"application/vnd.geogebra.slides":{source:"iana",extensions:["ggs"]},"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.gnu.taler.exchange+json":{source:"iana",compressible:!0},"application/vnd.gnu.taler.merchant+json":{source:"iana",compressible:!0},"application/vnd.google-apps.audio":{},"application/vnd.google-apps.document":{compressible:!1,extensions:["gdoc"]},"application/vnd.google-apps.drawing":{compressible:!1,extensions:["gdraw"]},"application/vnd.google-apps.drive-sdk":{compressible:!1},"application/vnd.google-apps.file":{},"application/vnd.google-apps.folder":{compressible:!1},"application/vnd.google-apps.form":{compressible:!1,extensions:["gform"]},"application/vnd.google-apps.fusiontable":{},"application/vnd.google-apps.jam":{compressible:!1,extensions:["gjam"]},"application/vnd.google-apps.mail-layout":{},"application/vnd.google-apps.map":{compressible:!1,extensions:["gmap"]},"application/vnd.google-apps.photo":{},"application/vnd.google-apps.presentation":{compressible:!1,extensions:["gslides"]},"application/vnd.google-apps.script":{compressible:!1,extensions:["gscript"]},"application/vnd.google-apps.shortcut":{},"application/vnd.google-apps.site":{compressible:!1,extensions:["gsite"]},"application/vnd.google-apps.spreadsheet":{compressible:!1,extensions:["gsheet"]},"application/vnd.google-apps.unknown":{},"application/vnd.google-apps.video":{},"application/vnd.google-earth.kml+xml":{source:"iana",compressible:!0,extensions:["kml"]},"application/vnd.google-earth.kmz":{source:"iana",compressible:!1,extensions:["kmz"]},"application/vnd.gov.sk.e-form+xml":{source:"apache",compressible:!0},"application/vnd.gov.sk.e-form+zip":{source:"iana",compressible:!1},"application/vnd.gov.sk.xmldatacontainer+xml":{source:"iana",compressible:!0,extensions:["xdcf"]},"application/vnd.gpxsee.map+xml":{source:"iana",compressible:!0},"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:!0},"application/vnd.hal+xml":{source:"iana",compressible:!0,extensions:["hal"]},"application/vnd.handheld-entertainment+xml":{source:"iana",compressible:!0,extensions:["zmm"]},"application/vnd.hbci":{source:"iana",extensions:["hbci"]},"application/vnd.hc+json":{source:"iana",compressible:!0},"application/vnd.hcl-bireports":{source:"iana"},"application/vnd.hdt":{source:"iana"},"application/vnd.heroku+json":{source:"iana",compressible:!0},"application/vnd.hhe.lesson-player":{source:"iana",extensions:["les"]},"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.hsl":{source:"iana"},"application/vnd.httphone":{source:"iana"},"application/vnd.hydrostatix.sof-data":{source:"iana",extensions:["sfd-hdstx"]},"application/vnd.hyper+json":{source:"iana",compressible:!0},"application/vnd.hyper-item+json":{source:"iana",compressible:!0},"application/vnd.hyperdrive+json":{source:"iana",compressible:!0},"application/vnd.hzn-3d-crossword":{source:"iana"},"application/vnd.ibm.afplinedata":{source:"apache"},"application/vnd.ibm.electronic-media":{source:"iana"},"application/vnd.ibm.minipay":{source:"iana",extensions:["mpy"]},"application/vnd.ibm.modcap":{source:"apache",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:!1},"application/vnd.imagemeter.image+zip":{source:"iana",compressible:!1},"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:!0},"application/vnd.ims.lti.v2.toolconsumerprofile+json":{source:"iana",compressible:!0},"application/vnd.ims.lti.v2.toolproxy+json":{source:"iana",compressible:!0},"application/vnd.ims.lti.v2.toolproxy.id+json":{source:"iana",compressible:!0},"application/vnd.ims.lti.v2.toolsettings+json":{source:"iana",compressible:!0},"application/vnd.ims.lti.v2.toolsettings.simple+json":{source:"iana",compressible:!0},"application/vnd.informedcontrol.rms+xml":{source:"iana",compressible:!0},"application/vnd.informix-visionary":{source:"apache"},"application/vnd.infotech.project":{source:"iana"},"application/vnd.infotech.project+xml":{source:"iana",compressible:!0},"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.ipfs.ipns-record":{source:"iana"},"application/vnd.ipld.car":{source:"iana"},"application/vnd.ipld.dag-cbor":{source:"iana"},"application/vnd.ipld.dag-json":{source:"iana"},"application/vnd.ipld.raw":{source:"iana"},"application/vnd.iptc.g2.catalogitem+xml":{source:"iana",compressible:!0},"application/vnd.iptc.g2.conceptitem+xml":{source:"iana",compressible:!0},"application/vnd.iptc.g2.knowledgeitem+xml":{source:"iana",compressible:!0},"application/vnd.iptc.g2.newsitem+xml":{source:"iana",compressible:!0},"application/vnd.iptc.g2.newsmessage+xml":{source:"iana",compressible:!0},"application/vnd.iptc.g2.packageitem+xml":{source:"iana",compressible:!0},"application/vnd.iptc.g2.planningitem+xml":{source:"iana",compressible:!0},"application/vnd.ipunplugged.rcprofile":{source:"iana",extensions:["rcprofile"]},"application/vnd.irepository.package+xml":{source:"iana",compressible:!0,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:!1},"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.kdl":{source:"iana"},"application/vnd.kenameaapp":{source:"iana",extensions:["htke"]},"application/vnd.keyman.kmp+zip":{source:"iana",compressible:!1},"application/vnd.keyman.kmx":{source:"iana"},"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:!0},"application/vnd.las.las+xml":{source:"iana",compressible:!0,extensions:["lasxml"]},"application/vnd.laszip":{source:"iana"},"application/vnd.ldev.productlicensing":{source:"iana"},"application/vnd.leap+json":{source:"iana",compressible:!0},"application/vnd.liberty-request+xml":{source:"iana",compressible:!0},"application/vnd.llamagraphics.life-balance.desktop":{source:"iana",extensions:["lbd"]},"application/vnd.llamagraphics.life-balance.exchange+xml":{source:"iana",compressible:!0,extensions:["lbe"]},"application/vnd.logipipe.circuit+zip":{source:"iana",compressible:!1},"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:!0},"application/vnd.marlin.drm.conftoken+xml":{source:"iana",compressible:!0},"application/vnd.marlin.drm.license+xml":{source:"iana",compressible:!0},"application/vnd.marlin.drm.mdcf":{source:"iana"},"application/vnd.mason+json":{source:"iana",compressible:!0},"application/vnd.maxar.archive.3tz+zip":{source:"iana",compressible:!1},"application/vnd.maxmind.maxmind-db":{source:"iana"},"application/vnd.mcd":{source:"iana",extensions:["mcd"]},"application/vnd.mdl":{source:"iana"},"application/vnd.mdl-mbsdf":{source:"iana"},"application/vnd.medcalcdata":{source:"iana",extensions:["mc1"]},"application/vnd.mediastation.cdkey":{source:"iana",extensions:["cdkey"]},"application/vnd.medicalholodeck.recordxr":{source:"iana"},"application/vnd.meridian-slingshot":{source:"iana"},"application/vnd.mermaid":{source:"iana"},"application/vnd.mfer":{source:"iana",extensions:["mwf"]},"application/vnd.mfmp":{source:"iana",extensions:["mfm"]},"application/vnd.micro+json":{source:"iana",compressible:!0},"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:!0},"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.modl":{source:"iana"},"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:!0,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:!1,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:!0,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:!0},"application/vnd.ms-officetheme":{source:"iana",extensions:["thmx"]},"application/vnd.ms-opentype":{source:"apache",compressible:!0},"application/vnd.ms-outlook":{compressible:!1,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:!0},"application/vnd.ms-powerpoint":{source:"iana",compressible:!1,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:!0},"application/vnd.ms-printing.printticket+xml":{source:"apache",compressible:!0},"application/vnd.ms-printschematicket+xml":{source:"iana",compressible:!0},"application/vnd.ms-project":{source:"iana",extensions:["mpp","mpt"]},"application/vnd.ms-tnef":{source:"iana"},"application/vnd.ms-visio.viewer":{extensions:["vdx"]},"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:!1,extensions:["xps"]},"application/vnd.msa-disk-image":{source:"iana"},"application/vnd.mseq":{source:"iana",extensions:["mseq"]},"application/vnd.msgpack":{source:"iana"},"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:!0},"application/vnd.nato.bindingdataobject+cbor":{source:"iana"},"application/vnd.nato.bindingdataobject+json":{source:"iana",compressible:!0},"application/vnd.nato.bindingdataobject+xml":{source:"iana",compressible:!0,extensions:["bdo"]},"application/vnd.nato.openxmlformats-package.iepd+zip":{source:"iana",compressible:!1},"application/vnd.ncd.control":{source:"iana"},"application/vnd.ncd.reference":{source:"iana"},"application/vnd.nearst.inv+json":{source:"iana",compressible:!0},"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:!0},"application/vnd.nokia.iptv.config+xml":{source:"iana",compressible:!0},"application/vnd.nokia.isds-radio-presets":{source:"iana"},"application/vnd.nokia.landmark+wbxml":{source:"iana"},"application/vnd.nokia.landmark+xml":{source:"iana",compressible:!0},"application/vnd.nokia.landmarkcollection+xml":{source:"iana",compressible:!0},"application/vnd.nokia.n-gage.ac+xml":{source:"iana",compressible:!0,extensions:["ac"]},"application/vnd.nokia.n-gage.data":{source:"iana",extensions:["ngdat"]},"application/vnd.nokia.n-gage.symbian.install":{source:"apache",extensions:["n-gage"]},"application/vnd.nokia.ncd":{source:"iana"},"application/vnd.nokia.pcd+wbxml":{source:"iana"},"application/vnd.nokia.pcd+xml":{source:"iana",compressible:!0},"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.oai.workflows":{source:"iana"},"application/vnd.oai.workflows+json":{source:"iana",compressible:!0},"application/vnd.oai.workflows+yaml":{source:"iana"},"application/vnd.oasis.opendocument.base":{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:"apache",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:!1,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:!1,extensions:["odp"]},"application/vnd.oasis.opendocument.presentation-template":{source:"iana",extensions:["otp"]},"application/vnd.oasis.opendocument.spreadsheet":{source:"iana",compressible:!1,extensions:["ods"]},"application/vnd.oasis.opendocument.spreadsheet-template":{source:"iana",extensions:["ots"]},"application/vnd.oasis.opendocument.text":{source:"iana",compressible:!1,extensions:["odt"]},"application/vnd.oasis.opendocument.text-master":{source:"iana",extensions:["odm"]},"application/vnd.oasis.opendocument.text-master-template":{source:"iana"},"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:!0},"application/vnd.oftn.l10n+json":{source:"iana",compressible:!0},"application/vnd.oipf.contentaccessdownload+xml":{source:"iana",compressible:!0},"application/vnd.oipf.contentaccessstreaming+xml":{source:"iana",compressible:!0},"application/vnd.oipf.cspg-hexbinary":{source:"iana"},"application/vnd.oipf.dae.svg+xml":{source:"iana",compressible:!0},"application/vnd.oipf.dae.xhtml+xml":{source:"iana",compressible:!0},"application/vnd.oipf.mippvcontrolmessage+xml":{source:"iana",compressible:!0},"application/vnd.oipf.pae.gem":{source:"iana"},"application/vnd.oipf.spdiscovery+xml":{source:"iana",compressible:!0},"application/vnd.oipf.spdlist+xml":{source:"iana",compressible:!0},"application/vnd.oipf.ueprofile+xml":{source:"iana",compressible:!0},"application/vnd.oipf.userprofile+xml":{source:"iana",compressible:!0},"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:!0},"application/vnd.oma.bcast.drm-trigger+xml":{source:"apache",compressible:!0},"application/vnd.oma.bcast.imd+xml":{source:"iana",compressible:!0},"application/vnd.oma.bcast.ltkm":{source:"iana"},"application/vnd.oma.bcast.notification+xml":{source:"iana",compressible:!0},"application/vnd.oma.bcast.provisioningtrigger":{source:"iana"},"application/vnd.oma.bcast.sgboot":{source:"iana"},"application/vnd.oma.bcast.sgdd+xml":{source:"iana",compressible:!0},"application/vnd.oma.bcast.sgdu":{source:"iana"},"application/vnd.oma.bcast.simple-symbol-container":{source:"iana"},"application/vnd.oma.bcast.smartcard-trigger+xml":{source:"apache",compressible:!0},"application/vnd.oma.bcast.sprov+xml":{source:"iana",compressible:!0},"application/vnd.oma.bcast.stkm":{source:"iana"},"application/vnd.oma.cab-address-book+xml":{source:"iana",compressible:!0},"application/vnd.oma.cab-feature-handler+xml":{source:"iana",compressible:!0},"application/vnd.oma.cab-pcc+xml":{source:"iana",compressible:!0},"application/vnd.oma.cab-subs-invite+xml":{source:"iana",compressible:!0},"application/vnd.oma.cab-user-prefs+xml":{source:"iana",compressible:!0},"application/vnd.oma.dcd":{source:"iana"},"application/vnd.oma.dcdc":{source:"iana"},"application/vnd.oma.dd2+xml":{source:"iana",compressible:!0,extensions:["dd2"]},"application/vnd.oma.drm.risd+xml":{source:"iana",compressible:!0},"application/vnd.oma.group-usage-list+xml":{source:"iana",compressible:!0},"application/vnd.oma.lwm2m+cbor":{source:"iana"},"application/vnd.oma.lwm2m+json":{source:"iana",compressible:!0},"application/vnd.oma.lwm2m+tlv":{source:"iana"},"application/vnd.oma.pal+xml":{source:"iana",compressible:!0},"application/vnd.oma.poc.detailed-progress-report+xml":{source:"iana",compressible:!0},"application/vnd.oma.poc.final-report+xml":{source:"iana",compressible:!0},"application/vnd.oma.poc.groups+xml":{source:"iana",compressible:!0},"application/vnd.oma.poc.invocation-descriptor+xml":{source:"iana",compressible:!0},"application/vnd.oma.poc.optimized-progress-report+xml":{source:"iana",compressible:!0},"application/vnd.oma.push":{source:"iana"},"application/vnd.oma.scidm.messages+xml":{source:"iana",compressible:!0},"application/vnd.oma.xcap-directory+xml":{source:"iana",compressible:!0},"application/vnd.omads-email+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/vnd.omads-file+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/vnd.omads-folder+xml":{source:"iana",charset:"UTF-8",compressible:!0},"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.onvif.metadata":{source:"iana"},"application/vnd.openblox.game+xml":{source:"iana",compressible:!0,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:!0,extensions:["osm"]},"application/vnd.opentimestamps.ots":{source:"iana"},"application/vnd.openvpi.dspx+json":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.custom-properties+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.customxmlproperties+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.drawing+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.drawingml.chart+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.drawingml.diagramcolors+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.drawingml.diagramdata+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.drawingml.diagramlayout+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.drawingml.diagramstyle+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.extended-properties+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.commentauthors+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.comments+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.handoutmaster+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.notesmaster+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.notesslide+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.presentation":{source:"iana",compressible:!1,extensions:["pptx"]},"application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.presprops+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.slide":{source:"iana",extensions:["sldx"]},"application/vnd.openxmlformats-officedocument.presentationml.slide+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.slidelayout+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.slidemaster+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.slideshow":{source:"iana",extensions:["ppsx"]},"application/vnd.openxmlformats-officedocument.presentationml.slideshow.main+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.slideupdateinfo+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.tablestyles+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.tags+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.template":{source:"iana",extensions:["potx"]},"application/vnd.openxmlformats-officedocument.presentationml.template.main+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.viewprops+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.calcchain+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.externallink+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcachedefinition+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcacherecords+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.pivottable+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.querytable+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionheaders+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionlog+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.sharedstrings+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet":{source:"iana",compressible:!1,extensions:["xlsx"]},"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.sheetmetadata+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.tablesinglecells+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.template":{source:"iana",extensions:["xltx"]},"application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.usernames+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.volatiledependencies+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.theme+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.themeoverride+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.vmldrawing":{source:"iana"},"application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.wordprocessingml.document":{source:"iana",compressible:!1,extensions:["docx"]},"application/vnd.openxmlformats-officedocument.wordprocessingml.document.glossary+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.wordprocessingml.fonttable+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.wordprocessingml.template":{source:"iana",extensions:["dotx"]},"application/vnd.openxmlformats-officedocument.wordprocessingml.template.main+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.wordprocessingml.websettings+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-package.core-properties+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-package.digital-signature-xmlsignature+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-package.relationships+xml":{source:"iana",compressible:!0},"application/vnd.oracle.resource+json":{source:"iana",compressible:!0},"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:!0},"application/vnd.oxli.countgraph":{source:"iana"},"application/vnd.pagerduty+json":{source:"iana",compressible:!0},"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:!0},"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.procrate.brushset":{extensions:["brushset"]},"application/vnd.procreate.brush":{extensions:["brush"]},"application/vnd.procreate.dream":{extensions:["drm"]},"application/vnd.proteus.magazine":{source:"iana",extensions:["mgz"]},"application/vnd.psfs":{source:"iana"},"application/vnd.pt.mundusmundi":{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:!0,extensions:["xhtm"]},"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:!0},"application/vnd.radisys.msml+xml":{source:"iana",compressible:!0},"application/vnd.radisys.msml-audit+xml":{source:"iana",compressible:!0},"application/vnd.radisys.msml-audit-conf+xml":{source:"iana",compressible:!0},"application/vnd.radisys.msml-audit-conn+xml":{source:"iana",compressible:!0},"application/vnd.radisys.msml-audit-dialog+xml":{source:"iana",compressible:!0},"application/vnd.radisys.msml-audit-stream+xml":{source:"iana",compressible:!0},"application/vnd.radisys.msml-conf+xml":{source:"iana",compressible:!0},"application/vnd.radisys.msml-dialog+xml":{source:"iana",compressible:!0},"application/vnd.radisys.msml-dialog-base+xml":{source:"iana",compressible:!0},"application/vnd.radisys.msml-dialog-fax-detect+xml":{source:"iana",compressible:!0},"application/vnd.radisys.msml-dialog-fax-sendrecv+xml":{source:"iana",compressible:!0},"application/vnd.radisys.msml-dialog-group+xml":{source:"iana",compressible:!0},"application/vnd.radisys.msml-dialog-speech+xml":{source:"iana",compressible:!0},"application/vnd.radisys.msml-dialog-transform+xml":{source:"iana",compressible:!0},"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:!0,extensions:["musicxml"]},"application/vnd.relpipe":{source:"iana"},"application/vnd.renlearn.rlprint":{source:"iana"},"application/vnd.resilient.logic":{source:"iana"},"application/vnd.restful+json":{source:"iana",compressible:!0},"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:!0,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:!0},"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:!0},"application/vnd.shopkick+json":{source:"iana",compressible:!0},"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:!0},"application/vnd.sketchometry":{source:"iana"},"application/vnd.smaf":{source:"iana",extensions:["mmf"]},"application/vnd.smart.notebook":{source:"iana"},"application/vnd.smart.teacher":{source:"iana",extensions:["teacher"]},"application/vnd.smintio.portals.archive":{source:"iana"},"application/vnd.snesdev-page-table":{source:"iana"},"application/vnd.software602.filler.form+xml":{source:"iana",compressible:!0,extensions:["fo"]},"application/vnd.software602.filler.form-xml-zip":{source:"iana"},"application/vnd.solent.sdkm+xml":{source:"iana",compressible:!0,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:!0,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.sybyl.mol2":{source:"iana"},"application/vnd.sycle+xml":{source:"iana",compressible:!0},"application/vnd.syft+json":{source:"iana",compressible:!0},"application/vnd.symbian.install":{source:"apache",extensions:["sis","sisx"]},"application/vnd.syncml+xml":{source:"iana",charset:"UTF-8",compressible:!0,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:!0,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:!0,extensions:["ddf"]},"application/vnd.syncml.dmtnds+wbxml":{source:"iana"},"application/vnd.syncml.dmtnds+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/vnd.syncml.ds.notification":{source:"iana"},"application/vnd.tableschema+json":{source:"iana",compressible:!0},"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:!0},"application/vnd.tmd.mediaflex.api+xml":{source:"iana",compressible:!0},"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.uic.osdm+json":{source:"iana",compressible:!0},"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:!0,extensions:["uoml","uo"]},"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:!0},"application/vnd.veraison.tsm-report+cbor":{source:"iana"},"application/vnd.veraison.tsm-report+json":{source:"iana",compressible:!0},"application/vnd.verimatrix.vcas":{source:"iana"},"application/vnd.veritone.aion+json":{source:"iana",compressible:!0},"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","vsdx","vtx"]},"application/vnd.visionary":{source:"iana",extensions:["vis"]},"application/vnd.vividence.scriptfile":{source:"iana"},"application/vnd.vocalshaper.vsp4":{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.wasmflow.wafl":{source:"iana"},"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.wordlift":{source:"iana"},"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:!0},"application/vnd.wv.ssp+xml":{source:"iana",compressible:!0},"application/vnd.xacml+json":{source:"iana",compressible:!0},"application/vnd.xara":{source:"iana",extensions:["xar"]},"application/vnd.xarin.cpj":{source:"iana"},"application/vnd.xecrets-encrypted":{source:"iana"},"application/vnd.xfdl":{source:"iana",extensions:["xfdl"]},"application/vnd.xfdl.webform":{source:"iana"},"application/vnd.xmi+xml":{source:"iana",compressible:!0},"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:!0,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.zul":{source:"iana",extensions:["zir","zirz"]},"application/vnd.zzazz.deck+xml":{source:"iana",compressible:!0,extensions:["zaz"]},"application/voicexml+xml":{source:"iana",compressible:!0,extensions:["vxml"]},"application/voucher-cms+json":{source:"iana",compressible:!0},"application/voucher-jws+json":{source:"iana",compressible:!0},"application/vp":{source:"iana"},"application/vp+cose":{source:"iana"},"application/vp+jwt":{source:"iana"},"application/vq-rtcpxr":{source:"iana"},"application/wasm":{source:"iana",compressible:!0,extensions:["wasm"]},"application/watcherinfo+xml":{source:"iana",compressible:!0,extensions:["wif"]},"application/webpush-options+json":{source:"iana",compressible:!0},"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:!0,extensions:["wsdl"]},"application/wspolicy+xml":{source:"iana",compressible:!0,extensions:["wspolicy"]},"application/x-7z-compressed":{source:"apache",compressible:!1,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:!1,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:!1,extensions:["bdoc"]},"application/x-bittorrent":{source:"apache",extensions:["torrent"]},"application/x-blender":{extensions:["blend"]},"application/x-blorb":{source:"apache",extensions:["blb","blorb"]},"application/x-bzip":{source:"apache",compressible:!1,extensions:["bz"]},"application/x-bzip2":{source:"apache",compressible:!1,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-compressed":{extensions:["rar"]},"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:!1},"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:!0,extensions:["ncx"]},"application/x-dtbook+xml":{source:"apache",compressible:!0,extensions:["dtb"]},"application/x-dtbresource+xml":{source:"apache",compressible:!0,extensions:["res"]},"application/x-dvi":{source:"apache",compressible:!1,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:!0,extensions:["php"]},"application/x-install-instructions":{source:"apache",extensions:["install"]},"application/x-ipynb+json":{compressible:!0,extensions:["ipynb"]},"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:!1,extensions:["jnlp"]},"application/x-javascript":{compressible:!0},"application/x-keepass2":{extensions:["kdbx"]},"application/x-latex":{source:"apache",compressible:!1,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:!1},"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:!0,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:!1,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:!1,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:!0,extensions:["sh"]},"application/x-shar":{source:"apache",extensions:["shar"]},"application/x-shockwave-flash":{source:"apache",compressible:!1,extensions:["swf"]},"application/x-silverlight-app":{source:"apache",extensions:["xap"]},"application/x-sql":{source:"apache",extensions:["sql"]},"application/x-stuffit":{source:"apache",compressible:!1,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:!0,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:!0,extensions:["hdd"]},"application/x-virtualbox-ova":{compressible:!0,extensions:["ova"]},"application/x-virtualbox-ovf":{compressible:!0,extensions:["ovf"]},"application/x-virtualbox-vbox":{compressible:!0,extensions:["vbox"]},"application/x-virtualbox-vbox-extpack":{compressible:!1,extensions:["vbox-extpack"]},"application/x-virtualbox-vdi":{compressible:!0,extensions:["vdi"]},"application/x-virtualbox-vhd":{compressible:!0,extensions:["vhd"]},"application/x-virtualbox-vmdk":{compressible:!0,extensions:["vmdk"]},"application/x-wais-source":{source:"apache",extensions:["src"]},"application/x-web-app-manifest+json":{compressible:!0,extensions:["webapp"]},"application/x-www-form-urlencoded":{source:"iana",compressible:!0},"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:!0,extensions:["xlf"]},"application/x-xpinstall":{source:"apache",compressible:!1,extensions:["xpi"]},"application/x-xz":{source:"apache",extensions:["xz"]},"application/x-zip-compressed":{extensions:["zip"]},"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:!0},"application/xaml+xml":{source:"apache",compressible:!0,extensions:["xaml"]},"application/xcap-att+xml":{source:"iana",compressible:!0,extensions:["xav"]},"application/xcap-caps+xml":{source:"iana",compressible:!0,extensions:["xca"]},"application/xcap-diff+xml":{source:"iana",compressible:!0,extensions:["xdf"]},"application/xcap-el+xml":{source:"iana",compressible:!0,extensions:["xel"]},"application/xcap-error+xml":{source:"iana",compressible:!0},"application/xcap-ns+xml":{source:"iana",compressible:!0,extensions:["xns"]},"application/xcon-conference-info+xml":{source:"iana",compressible:!0},"application/xcon-conference-info-diff+xml":{source:"iana",compressible:!0},"application/xenc+xml":{source:"iana",compressible:!0,extensions:["xenc"]},"application/xfdf":{source:"iana",extensions:["xfdf"]},"application/xhtml+xml":{source:"iana",compressible:!0,extensions:["xhtml","xht"]},"application/xhtml-voice+xml":{source:"apache",compressible:!0},"application/xliff+xml":{source:"iana",compressible:!0,extensions:["xlf"]},"application/xml":{source:"iana",compressible:!0,extensions:["xml","xsl","xsd","rng"]},"application/xml-dtd":{source:"iana",compressible:!0,extensions:["dtd"]},"application/xml-external-parsed-entity":{source:"iana"},"application/xml-patch+xml":{source:"iana",compressible:!0},"application/xmpp+xml":{source:"iana",compressible:!0},"application/xop+xml":{source:"iana",compressible:!0,extensions:["xop"]},"application/xproc+xml":{source:"apache",compressible:!0,extensions:["xpl"]},"application/xslt+xml":{source:"iana",compressible:!0,extensions:["xsl","xslt"]},"application/xspf+xml":{source:"apache",compressible:!0,extensions:["xspf"]},"application/xv+xml":{source:"iana",compressible:!0,extensions:["mxml","xhvml","xvml","xvm"]},"application/yaml":{source:"iana"},"application/yang":{source:"iana",extensions:["yang"]},"application/yang-data+cbor":{source:"iana"},"application/yang-data+json":{source:"iana",compressible:!0},"application/yang-data+xml":{source:"iana",compressible:!0},"application/yang-patch+json":{source:"iana",compressible:!0},"application/yang-patch+xml":{source:"iana",compressible:!0},"application/yang-sid+json":{source:"iana",compressible:!0},"application/yin+xml":{source:"iana",compressible:!0,extensions:["yin"]},"application/zip":{source:"iana",compressible:!1,extensions:["zip"]},"application/zip+dotlottie":{extensions:["lottie"]},"application/zlib":{source:"iana"},"application/zstd":{source:"iana"},"audio/1d-interleaved-parityfec":{source:"iana"},"audio/32kadpcm":{source:"iana"},"audio/3gpp":{source:"iana",compressible:!1,extensions:["3gpp"]},"audio/3gpp2":{source:"iana"},"audio/aac":{source:"iana",extensions:["adts","aac"]},"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:!1,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/flac":{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:!1},"audio/l8":{source:"iana"},"audio/lpc":{source:"iana"},"audio/matroska":{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/midi-clip":{source:"iana"},"audio/mobile-xmf":{source:"iana",extensions:["mxmf"]},"audio/mp3":{compressible:!1,extensions:["mp3"]},"audio/mp4":{source:"iana",compressible:!1,extensions:["m4a","mp4a","m4b"]},"audio/mp4a-latm":{source:"iana"},"audio/mpa":{source:"iana"},"audio/mpa-robust":{source:"iana"},"audio/mpeg":{source:"iana",compressible:!1,extensions:["mpga","mp2","mp2a","mp3","m2a","m3a"]},"audio/mpeg4-generic":{source:"iana"},"audio/musepack":{source:"apache"},"audio/ogg":{source:"iana",compressible:!1,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:"apache"},"audio/vnd.rhetorex.32kadpcm":{source:"iana"},"audio/vnd.rip":{source:"iana",extensions:["rip"]},"audio/vnd.rn-realaudio":{compressible:!1},"audio/vnd.sealedmedia.softseal.mpeg":{source:"iana"},"audio/vnd.vmx.cvsd":{source:"iana"},"audio/vnd.wave":{compressible:!1},"audio/vorbis":{source:"iana",compressible:!1},"audio/vorbis-config":{source:"iana"},"audio/wav":{compressible:!1,extensions:["wav"]},"audio/wave":{compressible:!1,extensions:["wav"]},"audio/webm":{source:"apache",compressible:!1,extensions:["weba"]},"audio/x-aac":{source:"apache",compressible:!1,extensions:["aac"]},"audio/x-aiff":{source:"apache",extensions:["aif","aiff","aifc"]},"audio/x-caf":{source:"apache",compressible:!1,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:!0,extensions:["otf"]},"font/sfnt":{source:"iana"},"font/ttf":{source:"iana",compressible:!0,extensions:["ttf"]},"font/woff":{source:"iana",extensions:["woff"]},"font/woff2":{source:"iana",extensions:["woff2"]},"image/aces":{source:"iana",extensions:["exr"]},"image/apng":{source:"iana",compressible:!1,extensions:["apng"]},"image/avci":{source:"iana",extensions:["avci"]},"image/avcs":{source:"iana",extensions:["avcs"]},"image/avif":{source:"iana",compressible:!1,extensions:["avif"]},"image/bmp":{source:"iana",compressible:!0,extensions:["bmp","dib"]},"image/cgm":{source:"iana",extensions:["cgm"]},"image/dicom-rle":{source:"iana",extensions:["drle"]},"image/dpx":{source:"iana",extensions:["dpx"]},"image/emf":{source:"iana",extensions:["emf"]},"image/fits":{source:"iana",extensions:["fits"]},"image/g3fax":{source:"iana",extensions:["g3"]},"image/gif":{source:"iana",compressible:!1,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/ief":{source:"iana",extensions:["ief"]},"image/j2c":{source:"iana"},"image/jaii":{source:"iana",extensions:["jaii"]},"image/jais":{source:"iana",extensions:["jais"]},"image/jls":{source:"iana",extensions:["jls"]},"image/jp2":{source:"iana",compressible:!1,extensions:["jp2","jpg2"]},"image/jpeg":{source:"iana",compressible:!1,extensions:["jpg","jpeg","jpe"]},"image/jph":{source:"iana",extensions:["jph"]},"image/jphc":{source:"iana",extensions:["jhc"]},"image/jpm":{source:"iana",compressible:!1,extensions:["jpm","jpgm"]},"image/jpx":{source:"iana",compressible:!1,extensions:["jpx","jpf"]},"image/jxl":{source:"iana",extensions:["jxl"]},"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:!1,extensions:["jfif"]},"image/png":{source:"iana",compressible:!1,extensions:["png"]},"image/prs.btif":{source:"iana",extensions:["btif","btf"]},"image/prs.pti":{source:"iana",extensions:["pti"]},"image/pwg-raster":{source:"iana"},"image/sgi":{source:"apache",extensions:["sgi"]},"image/svg+xml":{source:"iana",compressible:!0,extensions:["svg","svgz"]},"image/t38":{source:"iana",extensions:["t38"]},"image/tiff":{source:"iana",compressible:!1,extensions:["tif","tiff"]},"image/tiff-fx":{source:"iana",extensions:["tfx"]},"image/vnd.adobe.photoshop":{source:"iana",compressible:!0,extensions:["psd"]},"image/vnd.airzip.accelerator.azv":{source:"iana",extensions:["azv"]},"image/vnd.clip":{source:"iana"},"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:!0,extensions:["ico"]},"image/vnd.mix":{source:"iana"},"image/vnd.mozilla.apng":{source:"iana"},"image/vnd.ms-dds":{compressible:!0,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:"iana",extensions:["webp"]},"image/wmf":{source:"iana",extensions:["wmf"]},"image/x-3ds":{source:"apache",extensions:["3ds"]},"image/x-adobe-dng":{extensions:["dng"]},"image/x-cmu-raster":{source:"apache",extensions:["ras"]},"image/x-cmx":{source:"apache",extensions:["cmx"]},"image/x-emf":{source:"iana"},"image/x-freehand":{source:"apache",extensions:["fh","fhc","fh4","fh5","fh7"]},"image/x-icon":{source:"apache",compressible:!0,extensions:["ico"]},"image/x-jng":{source:"nginx",extensions:["jng"]},"image/x-mrsid-image":{source:"apache",extensions:["sid"]},"image/x-ms-bmp":{source:"nginx",compressible:!0,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-wmf":{source:"iana"},"image/x-xbitmap":{source:"apache",extensions:["xbm"]},"image/x-xcf":{compressible:!1},"image/x-xpixmap":{source:"apache",extensions:["xpm"]},"image/x-xwindowdump":{source:"apache",extensions:["xwd"]},"message/bhttp":{source:"iana"},"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:!1},"message/imdn+xml":{source:"iana",compressible:!0},"message/mls":{source:"iana"},"message/news":{source:"apache"},"message/ohttp-req":{source:"iana"},"message/ohttp-res":{source:"iana"},"message/partial":{source:"iana",compressible:!1},"message/rfc822":{source:"iana",compressible:!0,extensions:["eml","mime","mht","mhtml"]},"message/s-http":{source:"apache"},"message/sip":{source:"iana"},"message/sipfrag":{source:"iana"},"message/tracking-status":{source:"iana"},"message/vnd.si.simp":{source:"apache"},"message/vnd.wfa.wsc":{source:"iana",extensions:["wsc"]},"model/3mf":{source:"iana",extensions:["3mf"]},"model/e57":{source:"iana"},"model/gltf+json":{source:"iana",compressible:!0,extensions:["gltf"]},"model/gltf-binary":{source:"iana",compressible:!0,extensions:["glb"]},"model/iges":{source:"iana",compressible:!1,extensions:["igs","iges"]},"model/jt":{source:"iana",extensions:["jt"]},"model/mesh":{source:"iana",compressible:!1,extensions:["msh","mesh","silo"]},"model/mtl":{source:"iana",extensions:["mtl"]},"model/obj":{source:"iana",extensions:["obj"]},"model/prc":{source:"iana",extensions:["prc"]},"model/step":{source:"iana",extensions:["step","stp","stpnc","p21","210"]},"model/step+xml":{source:"iana",compressible:!0,extensions:["stpx"]},"model/step+zip":{source:"iana",compressible:!1,extensions:["stpz"]},"model/step-xml+zip":{source:"iana",compressible:!1,extensions:["stpxz"]},"model/stl":{source:"iana",extensions:["stl"]},"model/u3d":{source:"iana",extensions:["u3d"]},"model/vnd.bary":{source:"iana",extensions:["bary"]},"model/vnd.cld":{source:"iana",extensions:["cld"]},"model/vnd.collada+xml":{source:"iana",compressible:!0,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:!0},"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",extensions:["pyo","pyox"]},"model/vnd.rosette.annotated-data-model":{source:"iana"},"model/vnd.sap.vds":{source:"iana",extensions:["vds"]},"model/vnd.usda":{source:"iana",extensions:["usda"]},"model/vnd.usdz+zip":{source:"iana",compressible:!1,extensions:["usdz"]},"model/vnd.valve.source.compiled-map":{source:"iana",extensions:["bsp"]},"model/vnd.vtu":{source:"iana",extensions:["vtu"]},"model/vrml":{source:"iana",compressible:!1,extensions:["wrl","vrml"]},"model/x3d+binary":{source:"apache",compressible:!1,extensions:["x3db","x3dbz"]},"model/x3d+fastinfoset":{source:"iana",extensions:["x3db"]},"model/x3d+vrml":{source:"apache",compressible:!1,extensions:["x3dv","x3dvz"]},"model/x3d+xml":{source:"iana",compressible:!0,extensions:["x3d","x3dz"]},"model/x3d-vrml":{source:"iana",extensions:["x3dv"]},"multipart/alternative":{source:"iana",compressible:!1},"multipart/appledouble":{source:"iana"},"multipart/byteranges":{source:"iana"},"multipart/digest":{source:"iana"},"multipart/encrypted":{source:"iana",compressible:!1},"multipart/form-data":{source:"iana",compressible:!1},"multipart/header-set":{source:"iana"},"multipart/mixed":{source:"iana"},"multipart/multilingual":{source:"iana"},"multipart/parallel":{source:"iana"},"multipart/related":{source:"iana",compressible:!1},"multipart/report":{source:"iana"},"multipart/signed":{source:"iana",compressible:!1},"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:!0,extensions:["appcache","manifest"]},"text/calendar":{source:"iana",extensions:["ics","ifb"]},"text/calender":{compressible:!0},"text/cmd":{compressible:!0},"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:!0,extensions:["css"]},"text/csv":{source:"iana",compressible:!0,extensions:["csv"]},"text/csv-schema":{source:"iana"},"text/directory":{source:"iana"},"text/dns":{source:"iana"},"text/ecmascript":{source:"apache"},"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/hl7v2":{source:"iana"},"text/html":{source:"iana",compressible:!0,extensions:["html","htm","shtml"]},"text/jade":{extensions:["jade"]},"text/javascript":{source:"iana",charset:"UTF-8",compressible:!0,extensions:["js","mjs"]},"text/jcr-cnd":{source:"iana"},"text/jsx":{compressible:!0,extensions:["jsx"]},"text/less":{compressible:!0,extensions:["less"]},"text/markdown":{source:"iana",compressible:!0,extensions:["md","markdown"]},"text/mathml":{source:"nginx",extensions:["mml"]},"text/mdx":{compressible:!0,extensions:["mdx"]},"text/mizar":{source:"iana"},"text/n3":{source:"iana",charset:"UTF-8",compressible:!0,extensions:["n3"]},"text/parameters":{source:"iana",charset:"UTF-8"},"text/parityfec":{source:"iana"},"text/plain":{source:"iana",compressible:!0,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/prs.texi":{source:"iana"},"text/raptorfec":{source:"iana"},"text/red":{source:"iana"},"text/rfc822-headers":{source:"iana"},"text/richtext":{source:"iana",compressible:!0,extensions:["rtx"]},"text/rtf":{source:"iana",compressible:!0,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:!0,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:!0,extensions:["uri","uris","urls"]},"text/vcard":{source:"iana",compressible:!0,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.exchangeable":{source:"iana"},"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:"apache"},"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.vcf":{source:"iana"},"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/vnd.zoo.kcl":{source:"iana"},"text/vtt":{source:"iana",charset:"UTF-8",compressible:!0,extensions:["vtt"]},"text/wgsl":{source:"iana",extensions:["wgsl"]},"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:!0},"text/x-handlebars-template":{extensions:["hbs"]},"text/x-java-source":{source:"apache",extensions:["java"]},"text/x-jquery-tmpl":{compressible:!0},"text/x-lua":{extensions:["lua"]},"text/x-markdown":{compressible:!0,extensions:["mkd"]},"text/x-nfo":{source:"apache",extensions:["nfo"]},"text/x-opml":{source:"apache",extensions:["opml"]},"text/x-org":{compressible:!0,extensions:["org"]},"text/x-pascal":{source:"apache",extensions:["p","pas"]},"text/x-processing":{compressible:!0,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:!0,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:!0,extensions:["xml"]},"text/xml-external-parsed-entity":{source:"iana"},"text/yaml":{compressible:!0,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/evc":{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/h266":{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/lottie+json":{source:"iana",compressible:!0},"video/matroska":{source:"iana"},"video/matroska-3d":{source:"iana"},"video/mj2":{source:"iana",extensions:["mj2","mjp2"]},"video/mp1s":{source:"iana"},"video/mp2p":{source:"iana"},"video/mp2t":{source:"iana",extensions:["ts","m2t","m2ts","mts"]},"video/mp4":{source:"iana",compressible:!1,extensions:["mp4","mp4v","mpg4"]},"video/mp4v-es":{source:"iana"},"video/mpeg":{source:"iana",compressible:!1,extensions:["mpeg","mpg","mpe","m1v","m2v"]},"video/mpeg4-generic":{source:"iana"},"video/mpv":{source:"iana"},"video/nv":{source:"iana"},"video/ogg":{source:"iana",compressible:!1,extensions:["ogv"]},"video/parityfec":{source:"iana"},"video/pointer":{source:"iana"},"video/quicktime":{source:"iana",compressible:!1,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.planar":{source:"iana"},"video/vnd.radgamettools.bink":{source:"iana"},"video/vnd.radgamettools.smacker":{source:"apache"},"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:!1,extensions:["webm"]},"video/x-f4v":{source:"apache",extensions:["f4v"]},"video/x-fli":{source:"apache",extensions:["fli"]},"video/x-flv":{source:"apache",compressible:!1,extensions:["flv"]},"video/x-m4v":{source:"apache",extensions:["m4v"]},"video/x-matroska":{source:"apache",compressible:!1,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:!1,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:!0},"x-shader/x-vertex":{compressible:!0}}});var zo=Le((It,Mo)=>{Mo.exports=No()});var Wo=Le((Pt,Jo)=>{var Bo={"prs.":100,"x-":200,"x.":300,"vnd.":400,default:900},Ko={nginx:10,apache:20,iana:40,default:30},Vo={application:1,font:2,audio:2,video:3,default:0};Jo.exports=function(e,n="default"){if(e==="application/octet-stream")return 0;let[o,i]=e.split("/"),a=i.replace(/(\.|x-).*/,"$1"),t=Bo[a]||Bo.default,r=Ko[n]||Ko.default,c=Vo[o]||Vo.default,l=1-e.length/100;return t+r+c+l}});var Yo=Le(_=>{"use strict";var re=zo(),Ai=js("path").extname,Ho=Wo(),Qo=/^\s*([^;\s]*)(?:;|\s|$)/,ji=/^text\//i;_.charset=Xo;_.charsets={lookup:Xo};_.contentType=Ri;_.extension=hn;_.extensions=Object.create(null);_.lookup=Ui;_.types=Object.create(null);_._extensionConflicts=[];_i(_.extensions,_.types);function Xo(s){if(!s||typeof s!="string")return!1;var e=Qo.exec(s),n=e&&re[e[1].toLowerCase()];return n&&n.charset?n.charset:e&&ji.test(e[1])?"UTF-8":!1}function Ri(s){if(!s||typeof s!="string")return!1;var e=s.indexOf("/")===-1?_.lookup(s):s;if(!e)return!1;if(e.indexOf("charset")===-1){var n=_.charset(e);n&&(e+="; charset="+n.toLowerCase())}return e}function hn(s){if(!s||typeof s!="string")return!1;var e=Qo.exec(s),n=e&&_.extensions[e[1].toLowerCase()];return!n||!n.length?!1:n[0]}function Ui(s){if(!s||typeof s!="string")return!1;var e=Ai("x."+s).toLowerCase().slice(1);return e&&_.types[e]||!1}function _i(s,e){Object.keys(re).forEach(function(o){var i=re[o],a=i.extensions;if(!(!a||!a.length)){s[o]=a;for(var t=0;t<a.length;t++){var r=a[t];e[r]=Ii(r,e[r],o);let c=Pi(r,e[r],o);c!==e[r]&&_._extensionConflicts.push([r,c,e[r]])}}})}function Ii(s,e,n){var o=e?Ho(e,re[e].source):0,i=n?Ho(n,re[n].source):0;return o>i?e:n}function Pi(s,e,n){var o=["nginx","apache",void 0,"iana"],i=e?o.indexOf(re[e].source):0,a=n?o.indexOf(re[n].source):0;return _.types[hn]!=="application/octet-stream"&&(i>a||i===a&&_.types[hn]?.slice(0,12)==="application/")||i>a?e:n}});function Hn(s){return{}}function Qn(s){return{accountId:s.accountId}}function Xn(s){return{}}import{Type as h}from"@sinclair/typebox";import{Value as aa}from"@sinclair/typebox/value";var _s=h.Object({name:h.String({minLength:1,description:"Discussion name is required"}),agentId:h.Optional(h.String()),creatorUid:h.String({minLength:1,description:"Creator UID is required"}),createdAt:h.Union([h.String(),h.Number()],{description:"Creation timestamp"})}),Is=h.Union([h.Literal("allow"),h.Literal("deny"),h.Literal("whitelist")]),Ps=h.Union([h.Literal("allow"),h.Literal("deny"),h.Literal("whitelist")]),Ve=h.Object({enabled:h.Optional(h.Boolean({default:!0})),botName:h.Optional(h.String({minLength:1,default:"Bot"})),commandPrefix:h.Optional(h.String({minLength:1,default:"/"})),botDiscussions:h.Optional(h.Record(h.String(),_s)),dmPolicy:h.Optional(Is),allowFrom:h.Optional(h.Array(h.String())),groupPolicy:h.Optional(Ps),groups:h.Optional(h.Array(h.String()))}),Os=h.Object({email:h.String({minLength:1,description:"Email is required"}),password:h.String({minLength:1,description:"Password is required"}),deviceUuid:h.Optional(h.String()),deviceName:h.Optional(h.String())}),qs=h.Object({sid:h.String(),selfUid:h.String(),cookie:h.String(),baseUrl:h.String(),apiPath:h.String()}),Fs=h.Object({accountId:h.String({minLength:1,description:"Account ID is required"}),name:h.Optional(h.String()),enabled:h.Optional(h.Boolean({default:!0})),credentials:Os,config:Ve,session:h.Optional(qs)}),ta=h.Record(h.String(),Fs);var N="default";import*as W from"fs";import*as Ye from"path";import*as Z from"os";import*as P from"crypto";import*as Ae from"os";var Y=class extends Error{constructor(e){super(e),this.name="EncryptionError"}},le=class{key=null;deviceUuid=null;deviceName=null;username=null;setDeviceUuid(e){this.deviceUuid=e,this.key=null}setDeviceName(e){this.deviceName=e,this.key=null}setUsername(e){this.username=e,this.key=null}getKey(){if(!this.key){let e=this.deviceUuid||"",n=this.deviceName||Ae.hostname(),o=this.username||Ae.userInfo().username;if(!e)throw new Y("device_uuid not set, cannot generate encryption key");let i=`lunkr-mcp-key-${e}-${n}-${o}`;this.key=P.createHash("sha256").update(i).digest()}return this.key}encrypt(e){if(!e)return"";let n=this.getKey(),o=P.randomBytes(12),i=P.createCipheriv("aes-256-gcm",n,o),a=Buffer.concat([i.update(e,"utf8"),i.final()]),t=i.getAuthTag();return Buffer.concat([o,a,t]).toString("base64")}decrypt(e){if(!e)return"";let n=this.getKey(),o=Buffer.from(e,"base64");if(o.length<28)throw new Y("Ciphertext too short");let i=o.subarray(0,12),a=o.subarray(12,-16),t=o.subarray(-16),r=P.createDecipheriv("aes-256-gcm",n,i);r.setAuthTag(t);try{return Buffer.concat([r.update(a),r.final()]).toString("utf8")}catch{throw new Y("Decryption failed, config file may be corrupted or key changed")}}};function Je(s){return s<128?Buffer.from([s]):s<256?Buffer.from([129,s]):Buffer.from([130,s>>8&255,s&255])}function Yn(s){let e=s.length%2===0?s:"0"+s,n=Buffer.from(e,"hex");return n[0]&&n[0]&128&&(n=Buffer.concat([Buffer.from([0]),n])),Buffer.concat([Buffer.from([2]),Je(n.length),n])}function Zn(s){return Buffer.concat([Buffer.from([48]),Je(s.length),s])}function $s(s){let e=Buffer.concat([Buffer.from([0]),s]);return Buffer.concat([Buffer.from([3]),Je(e.length),e])}function eo(s,e){let n=Yn(e),o=Yn(s),i=Zn(Buffer.concat([n,o])),a=Buffer.from([48,13,6,9,42,134,72,134,247,13,1,1,1,5,0]);return Zn(Buffer.concat([a,$s(i)]))}function We(s,e,n){try{let o=eo(e,n),i=P.createPublicKey({key:o,format:"der",type:"spki"});return P.publicEncrypt({key:i,padding:P.constants.RSA_PKCS1_PADDING},Buffer.from(s,"utf8")).toString("base64")}catch{return s}}function He(s,e){let n=Buffer.from(e,"base64"),o=P.createPublicKey({key:n,format:"der",type:"spki"});return P.publicEncrypt({key:o,padding:P.constants.RSA_PKCS1_PADDING},Buffer.from(s,"utf8")).toString("base64")}var no=".lunkr",oo="config.json",je="Bot";function ge(){return Ye.join(Z.homedir(),no)}function B(){return Ye.join(ge(),oo)}function so(){let s=ge();W.existsSync(s)||W.mkdirSync(s,{recursive:!0})}function Ts(){let s=Z.hostname(),e=Z.platform(),n=Z.release(),o="Unknown",i="Unknown";return e==="darwin"?(o=`macOS ${n}`,i="mac"):e==="win32"?(o=`Windows ${n}`,i="pc"):e==="linux"&&(o=`Linux ${n}`,i="pc"),{device_uuid:io(),device_os:o,device_model:i,device_name:s}}function io(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,s=>{let e=Math.random()*16|0;return(s==="x"?e:e&3|8).toString(16)})}function Xe(){return{...Ts(),bot_name:je,accounts:[]}}function ao(s){let e=new le;return e.setDeviceUuid(s.device_uuid),e.setDeviceName(s.device_name),e}function Qe(s){if(!s)return!1;try{return Buffer.from(s,"base64").length>=28}catch{return!1}}function Ds(s,e){let n={...s};return n.session&&(n.session={...n.session,sid:n.session.sid?e.encrypt(n.session.sid):n.session.sid,cookie:n.session.cookie?e.encrypt(n.session.cookie):n.session.cookie}),n.apiToken&&(n.apiToken=e.encrypt(n.apiToken)),n}function Gs(s,e){let n={...s};return n.session&&(n.session={...n.session,sid:n.session.sid&&Qe(n.session.sid)?e.decrypt(n.session.sid):n.session.sid,cookie:n.session.cookie&&Qe(n.session.cookie)?e.decrypt(n.session.cookie):n.session.cookie}),n.apiToken&&Qe(n.apiToken)&&(n.apiToken=e.decrypt(n.apiToken)),n}function R(){let s=B();if(!W.existsSync(s))return Xe();try{let e=W.readFileSync(s,"utf-8"),n=JSON.parse(e);if(n.device_uuid||(n.device_uuid=io()),n.bot_name||(n.bot_name=je),n.accounts||(n.accounts=[]),n.accounts?.length){let o=ao(n);try{n.accounts=n.accounts.map(i=>Gs(i,o))}catch(i){i instanceof Y&&console.warn("Warning: Failed to decrypt config, values may be unencrypted or from different machine/user")}}return n}catch{return Xe()}}function q(s){so();let e=B(),n={...s,accounts:s.accounts?.map(o=>{let i=ao(s);return Ds(o,i)})};W.writeFileSync(e,JSON.stringify(n,null,2),"utf-8")}function Re(s){let e=s||R();return e.accounts?.length&&(e.accounts.find(o=>o.enabled&&o.session?.sid)||e.accounts.find(o=>o.session?.sid))||null}function Ze(s){return(s||R()).bot_name||je}function Es(){return R().accounts||[]}function to(s){let e=Es();if(s&&s!==N){let o=e.find(i=>i.accountId===s);return o?{accountId:o.accountId,name:o.name,enabled:o.enabled,session:o.session,config:o.config}:null}let n=e.find(o=>o.session);return n?{accountId:n.accountId,name:n.name,enabled:n.enabled,session:n.session,config:n.config}:null}function ro(s){return s.channels?.lunkr}function D(s,e){let n=ro(s),o=e??N,i=to(o);if(!i?.session||n?.enabled===!1)return null;let a=n?.enabled??!0,t=i.session;return{accountId:o,name:i.name??n?.botName,enabled:a,selfUid:i.session.selfUid,sid:i.session.sid,cookie:i.session.cookie,botName:n?.botName??"Bot",commandPrefix:n?.commandPrefix??"/bot",botDiscussions:n?.botDiscussions??{},senderName:t.senderName,config:n??{enabled:!0,botName:"Bot",commandPrefix:"/bot",botDiscussions:{},dmPolicy:"allow",allowFrom:[],groupPolicy:"allow",groups:[]},lunkrConfig:i.session}}var co={listAccountIds:s=>to(N)?.session?[N]:[],resolveAccount:(s,e)=>D(s,e),defaultAccountId:()=>N,isConfigured:s=>s?!!(s.sid&&s.selfUid):!1,isEnabled:s=>s?s.enabled??!0:!1,describeAccount:s=>{if(!s)return{accountId:"default",configured:!1,enabled:!1};let e=!!(s.sid&&s.selfUid);return{accountId:s.accountId,name:s.name,enabled:s.enabled,configured:e}},setAccountEnabled:s=>{let{cfg:e,enabled:n}=s,o=ro(e)??{};return{...e,channels:{...e.channels,lunkr:{...o,enabled:n}}}},unconfiguredReason:s=>s?s.sid?s.selfUid?"Account not configured":"Lunkr user ID not available. Please re-authenticate.":"Lunkr session not configured. Run: openclaw lunkr login":"Lunkr account not configured. Run: openclaw lunkr login"};function lo(s){return s.replace(/^lunkr:/i,"")}function Ns(s,e,n){let o=n.config.dmPolicy??"allow",i=n.config.allowFrom??[];return{policy:o,allowFrom:i.map(lo),policyPath:"channels.lunkr.dmPolicy",allowFromPath:"channels.lunkr.allowFrom",approveHint:"openclaw pairing approve lunkr <code>",normalizeEntry:lo}}async function Ms(s){let e=[],{account:n}=s;return n.config.dmPolicy==="allow"&&n.config.allowFrom?.length,n.config.groupPolicy==="allow"&&!n.config.groups?.length&&e.push('Group policy is set to "allow" but no groups are configured. Bot will respond in any group where mentioned.'),e}var po={resolveDmPolicy:s=>{let{cfg:e,accountId:n,account:o}=s;return Ns(e,n??N,o)},collectWarnings:s=>Ms(s)};import*as xe from"https";import*as Ue from"zlib";import{HttpsProxyAgent as zs}from"https-proxy-agent";var ve,uo=process.env.HTTPS_PROXY||process.env.https_proxy||process.env.HTTP_PROXY||process.env.http_proxy;uo&&(ve=new zs(uo));function _e(s,e){if(!e)return s.toString("utf8");let n=e.toLowerCase().split(",").map(o=>o.trim());try{if(n.includes("gzip"))return Ue.gunzipSync(s).toString("utf8");if(n.includes("deflate"))return Ue.inflateSync(s).toString("utf8")}catch{}return s.toString("utf8")}var Ie={accept:"*/*","accept-encoding":"gzip, deflate",connection:"keep-alive","user-agent":"python-httpx/0.27.2"};function K(s,e,n,o){return new Promise((i,a)=>{let t=new URL(s),r=Buffer.from(e,"utf8"),c={hostname:t.hostname,port:t.port||443,path:t.pathname+t.search,method:"POST",headers:{...Ie,...n,"Content-Length":r.length},timeout:o,agent:ve},l=xe.request(c,u=>{let d=[];u.on("data",m=>{d.push(m)}),u.on("end",()=>{let m={};if(u.headers)for(let[g,b]of Object.entries(u.headers))b!==void 0&&(m[g.toLowerCase()]=Array.isArray(b)?b.join(", "):b);let f=Buffer.concat(d),x=_e(f,u.headers["content-encoding"]);i({status:u.statusCode||0,data:x,headers:m})})});l.on("error",a),l.on("timeout",()=>{l.destroy(),a(new Error("Request timeout"))}),l.write(r),l.end()})}function ie(s,e={},n=2e4){return new Promise((o,i)=>{let a=new URL(s),t={hostname:a.hostname,port:a.port||443,path:a.pathname+a.search,method:"GET",headers:{...Ie,...e},timeout:n,agent:ve},r=xe.request(t,c=>{let l=[];c.on("data",u=>{l.push(u)}),c.on("end",()=>{let u={};if(c.headers)for(let[f,x]of Object.entries(c.headers))x!==void 0&&(u[f.toLowerCase()]=Array.isArray(x)?x.join(", "):x);let d=Buffer.concat(l),m=_e(d,c.headers["content-encoding"]);o({status:c.statusCode||0,data:m,headers:u})})});r.on("error",i),r.on("timeout",()=>{r.destroy(),i(new Error("Request timeout"))}),r.end()})}function en(s,e={},n=6e4){return new Promise((o,i)=>{let a=new URL(s),t={hostname:a.hostname,port:a.port||443,path:a.pathname+a.search,method:"GET",headers:{...Ie,...e},timeout:n,agent:ve},r=xe.request(t,c=>{let l=[];c.on("data",u=>{l.push(u)}),c.on("end",()=>{let u={};if(c.headers)for(let[f,x]of Object.entries(c.headers))x!==void 0&&(u[f.toLowerCase()]=Array.isArray(x)?x.join(", "):x);let d=Buffer.concat(l),m=c.headers["content-encoding"];if(m){let f=_e(d,m);o({status:c.statusCode||0,data:Buffer.from(f,"utf8"),headers:u})}else o({status:c.statusCode||0,data:d,headers:u})})});r.on("error",i),r.on("timeout",()=>{r.destroy(),i(new Error("Request timeout"))}),r.end()})}function Pe(s,e,n,o){return new Promise((i,a)=>{let t=new URL(s),r={hostname:t.hostname,port:t.port||443,path:t.pathname+t.search,method:"POST",headers:{...Ie,...n,"Content-Length":e.length},timeout:o,agent:ve},c=xe.request(r,l=>{let u=[];l.on("data",d=>{u.push(d)}),l.on("end",()=>{let d={};if(l.headers)for(let[x,g]of Object.entries(l.headers))g!==void 0&&(d[x.toLowerCase()]=Array.isArray(g)?g.join(", "):g);let m=Buffer.concat(u),f=_e(m,l.headers["content-encoding"]);i({status:l.statusCode||0,data:f,headers:d})})});c.on("error",a),c.on("timeout",()=>{c.destroy(),a(new Error("Request timeout"))}),c.write(e),c.end()})}import*as ke from"crypto";import*as ee from"os";import{XMLParser as Bs}from"fast-xml-parser";var Oe="https://lunkr.coremail.cn",pe="/lunkr/s/json",L=class extends Error{constructor(e){super(e),this.name="AuthError"}},he=class extends L{constructor(e){super(e),this.name="PasswordError"}};var be=class{static QUERY_URL="https://cloud.icoremail.net/querydomain/query";static PRIORITY_ORDER=["lookup","gal","incoming","outgoing","mirror"];static getTypePriority(e){if(e==="gal")return[1,0];if(e.startsWith("gal")&&/^\d+$/.test(e.slice(3)))return[1,parseInt(e.slice(3),10)];for(let n=0;n<this.PRIORITY_ORDER.length;n++)if(e===this.PRIORITY_ORDER[n])return[n+1,0];return[this.PRIORITY_ORDER.length+1,0]}static extractDomain(e){return e.includes("@")?e.split("@").pop().trim().toLowerCase():null}static async queryDomain(e){let n=`${this.QUERY_URL}?domain=${e}`;try{let o=await ie(n,{},3e4);return this.parseXmlResponse(o.data)}catch(o){let i=o instanceof Error?`${o.message} (${o.name})`:String(o);throw o instanceof Error&&o.cause?new L(`Domain query failed: ${i}, cause: ${o.cause}`):new L(`Domain query failed: ${i}`)}}static parseXmlResponse(e){let o=new Bs({ignoreAttributes:!1,attributeNamePrefix:"@_"}).parse(e),i=o.result||o.querydomain;if(!i)throw new L("Domain query response parse failed: root element not found");let a=i.code;if(a!=="S_OK")throw new L(`Domain query returned error: ${a}`);let t=i.provider;if(!t)throw new L("Provider not found in domain query response");let r=[];for(let[c,l]of Object.entries(t)){if(c.startsWith("@_")||typeof l!="object"||!l)continue;let u=Array.isArray(l)?l:[l];for(let d of u){let m=d["@_uri"];if(!m||!m.startsWith("http://")&&!m.startsWith("https://"))continue;let f=new URL(m),x=`${f.protocol}//${f.host}`,g=f.pathname.replace(/\/$/,""),b=g?`${g}/s/json`:"/s/json";r.push({type:c,uri:m,baseUrl:x,apiPath:b,apiUrl:`${x}${b}`})}}return r.sort((c,l)=>{let[u,d]=this.getTypePriority(c.type),[m,f]=this.getTypePriority(l.type);return u!==m?u-m:d-f}),r}static async testServerAvailability(e,n,o){let i=`func=user:getPasswordKey&uid=${encodeURIComponent(o)}`,a=`${e}${n}?${i}`,t={"Content-Type":"text/x-json; charset=UTF-8"};try{let r=await K(a,"{}",t,3e4);if(r.status!==200)return null;let c=JSON.parse(r.data);if(c.code!=="S_OK")return null;let l=c.var||{},u=l.key||{},d=l.sid,m=u.type;return!d||!m?null:{sid:d,authType:m,rsaE:u.e||"",rsaN:u.n||""}}catch{return null}}static async discoverAvailableServer(e){let n=this.extractDomain(e);if(!n)throw new L(`Cannot extract domain from email: ${e}`);console.log(`Querying domain: ${n}`);let o=await this.queryDomain(n);if(o.length===0)throw new L(`No server addresses found for domain: ${n}`);console.log(`Found ${o.length} server addresses:`);for(let i of o)console.log(` - ${i.type}: ${i.apiUrl}`);for(let i of o){console.log(`Trying server: ${i.type} (${i.apiUrl})`);let a=await this.testServerAvailability(i.baseUrl,i.apiPath,e);if(a)return console.log(`Server available: ${i.type}`),[i,a]}throw new L("All server addresses are unavailable")}},j=class{_baseUrl;apiPath;headers;timeout;_cookies={};constructor(e,n={}){this._baseUrl=e.replace(/\/$/,""),this.apiPath=n.apiPath||"/lunkr/s/json",this.headers=n.headers||{},this.timeout=n.timeout||2e4}get baseUrl(){return this._baseUrl}get apiUrl(){return`${this._baseUrl}${this.apiPath}`}get cookies(){return this._cookies}setCookies(e){this._cookies=e}async postJson(e){let n={func:e.func};e.sid&&(n.sid=e.sid),e.query&&Object.assign(n,e.query);let o=Object.entries(n).map(([l,u])=>`${encodeURIComponent(l)}=${encodeURIComponent(String(u))}`).join("&"),i=`${this.apiUrl}?${o}`,a={"Content-Type":"text/x-json; charset=UTF-8",...this.headers};Object.keys(this.cookies).length>0&&(a.Cookie=Object.entries(this.cookies).map(([l,u])=>`${l}=${u}`).join("; "));let t=JSON.stringify(e.payload||{});e.debug&&(console.log(`[postJson] URL: ${i}`),console.log(`[postJson] headers: ${JSON.stringify(a)}`),console.log(`[postJson] body: ${t}`));let r=await K(i,t,a,this.timeout),c=r.headers["set-cookie"];if(c){let l=c.split(/, (?=[^=]+=[^;]+)/);for(let u of l){let d=u.match(/^([^=]+)=([^;]+)/);d&&(this._cookies[d[1].trim()]=d[2].trim())}}try{return JSON.parse(r.data)}catch{throw new L(`API returned non-JSON: ${r.data?.substring?.(0,400)||r.data}`)}}async checkSessionValid(e){try{return(await this.postJson({func:"cim.common:getOrgInfo",sid:e})).code==="S_OK"}catch{return!1}}};function nn(s){let e=ee.platform(),n=ee.release(),o=ee.arch(),i=ee.hostname(),a=s?.device_uuid?.trim()||"",t=s?.device_os?.trim()||"",r=s?.device_model?.trim()||"",c=s?.device_name?.trim()||"";if(!a){let l=`${i}-${e}-${o}`;a=ke.createHash("sha256").update(l).digest("hex").substring(0,40)}return r||(e==="win32"?r="windows":e==="darwin"?r="mac":e==="linux"?r="Linux":r=e),t||(e==="win32"?t=`Windows ${n} (build ${n.split(".").pop()||n}), ${o}bit`:e==="darwin"?t=`macOS ${n}, ${o}`:e==="linux"?t=`Linux ${n}, ${o}`:t=`${e} ${n}, ${o}`),c||(c=i),{deviceType:"AI-Bot",friendlyName:c,model:r,os:t,uuid:a}}function on(s,e,n){let o=s+e+n;return"!AIBot:"+ke.createHash("sha1").update(o).digest("hex")}function sn(s){let e=s+"cksjahfkdl&%789sdkjfKJHjhasfkHkk_)+.";return ke.createHash("sha1").update(e).digest("hex")}function an(s,e,n,o=""){let i=l=>encodeURIComponent(l).replace(/!/g,"%21").replace(/'/g,"%27").replace(/\(/g,"%28").replace(/\)/g,"%29").replace(/\*/g,"%2A"),a=i(s),t=i(n),r;if(o){let l=i(o);r=`accessToken=${a}&nonce=${l}×tamp=${e}&secret=${t}`}else r=`accessToken=${a}×tamp=${e}&secret=${t}`;return ke.createHash("sha1").update(r).digest().toString("base64")}import*as mo from"https";import*as fo from"http";import{WebSocket as tn}from"ws";import{v4 as Ks}from"uuid";function qe(...s){process.env.LUNKR_VERBOSE==="1"&&console.log("[SocketIO]",...s)}var ae=class s{baseUrl;cookies;eventCallbacks;ws=null;connected=!1;websocketUrl=null;eioSid="";pingInterval=25e3;running=!1;authDone=!1;sessionId="";uid="";username="";pingTimer=null;waitResolve=null;static authLoginIndex=1;constructor(e){this.baseUrl=e.baseUrl.replace(/\/$/,""),this.cookies=e.cookies,this.eventCallbacks=e.eventCallbacks||{},this.uid=e.uid||"",this.username=e.username||""}static fromLunkrConfig(e,n,o,i){let a={"Cim.sid":n};for(let r of o.split(";")){let c=r.trim();if(c.includes("=")){let[l,u]=c.split("=",2);a[l.trim()]=u.trim()}}let t=new s({baseUrl:e,cookies:a,eventCallbacks:i?.eventCallbacks,uid:i?.uid,username:i?.username});return t.sessionId=n,t}buildCookieHeader(){return Object.entries(this.cookies).map(([e,n])=>`${e}=${n}`).join("; ")}async getWebSocketUrl(){if(this.websocketUrl)return this.websocketUrl;let e=this.buildCookieHeader(),n=`${this.baseUrl}/lunkr/s/json?func=cim.common:getWebSocketURL&uid=${encodeURIComponent(this.username)}&sid=${this.sessionId}`;try{let o=await ie(n,{Cookie:e},1e4),i=JSON.parse(o.data);return i?.code==="S_OK"?(this.websocketUrl=typeof i.var=="string"?i.var:i.var?.webSocketURL,this.websocketUrl):(console.error("getWebSocketURL failed:",i),null)}catch(o){return console.error("getWebSocketURL request failed:",o),null}}async callSioSubscribe(){let e=this.buildCookieHeader(),n=`${this.baseUrl}/lunkr/s/json?func=cim.common:sioSubscribe&sid=${this.sessionId}`;try{let o=await K(n,"{}",{Cookie:e},1e4),i=JSON.parse(o.data),a=i?.code==="S_OK";return a||console.error("sioSubscribe failed:",i),a}catch(o){return console.error("sioSubscribe exception:",o),!1}}async performHandshake(){let e=await this.getWebSocketUrl();if(!e)return!1;await this.callSioSubscribe();let n=this.buildCookieHeader();try{let t=`${e}/socket.io/1/?t=${Date.now()}&EIO=3&transport=polling`,c=(await ie(t,{Cookie:n},1e4)).data,l=c.indexOf('0{"sid"');if(l>=0&&(c=c.substring(l)),!c.startsWith("0{"))return console.error("Handshake response format error:",c.substring(0,80)),!1;let u=JSON.parse(c.substring(1));if(this.eioSid=u.sid,this.pingInterval=u.pingInterval??25e3,!u.upgrades?.includes("websocket"))return console.error("Server does not support WebSocket upgrade"),!1}catch(t){return console.error("Socket.IO HTTP handshake failed:",t),!1}let o=e.startsWith("https://"),i=e.replace(/^https?:\/\//,""),a=`${o?"wss":"ws"}://${i}/socket.io/1/websocket/?EIO=3&transport=websocket&sid=${this.eioSid}`;return new Promise(t=>{this.ws=new tn(a,{headers:{Cookie:this.buildCookieHeader()},agent:o?new mo.Agent({rejectUnauthorized:!1}):new fo.Agent}),this.ws.once("open",()=>{qe("WebSocket open, sending 2probe"),this.ws.send("2probe")}),this.ws.once("message",r=>{let c=r.toString();qe("Received during handshake:",c.substring(0,50)),c.includes("3probe")?(qe("Upgrade confirmed, sending 5"),this.ws.send("5"),this.connected=!0,this.running=!0,this.startMessageLoop(),this.startPingLoop(),qe("Connection complete, connected=true, running=true"),t(!0)):(console.error("[SocketIO] Upgrade handshake failed, received:",c.substring(0,50)),t(!1))}),this.ws.once("error",r=>{console.error("WebSocket connection failed:",r.message),t(!1)})})}startMessageLoop(){this.ws&&(this.ws.on("message",e=>{this.handleFrame(e.toString())}),this.ws.on("close",()=>{this.connected=!1,this.authDone=!1,this.stopPingLoop(),this.handleEvent("disconnect",{}),this.waitResolve&&(this.waitResolve(),this.waitResolve=null),this.running&&setTimeout(()=>this.reconnect(),5e3)}),this.ws.on("error",e=>{console.error("[SocketIO] WebSocket error:",e.message)}))}startPingLoop(){this.pingTimer=setInterval(()=>{this.connected&&this.ws?.readyState===tn.OPEN&&this.ws.send("2")},this.pingInterval)}stopPingLoop(){this.pingTimer&&(clearInterval(this.pingTimer),this.pingTimer=null)}handleFrame(e){if(e){if(e[0]==="2"){this.ws?.send("3");return}if(e[0]==="4"&&e.length>1){let n=e[1];if(n==="0"){this.handleEvent("connect",{}),this.authDone||this.sendAuth();return}if(n==="1"){this.connected=!1;return}if(n==="2"){try{let o=JSON.parse(e.substring(2));if(Array.isArray(o)&&o.length>=2){let i=o[0],a=o[1];i==="ready"&&(this.authDone=!0),this.handleEvent(i,a)}}catch{}return}}}}sendAuth(){let e=`pc:${this.sessionId}_${s.authLoginIndex++}`,n=this.cookies.Cim||"";this.emit("auth",{username:this.username,clientId:e,password:`{SES}${this.sessionId}:${n}`,uid:this.uid,uuid:Ks()})}handleEvent(e,n){let o=this.eventCallbacks[e];if(o)try{o(n)}catch(i){console.error(`${e} callback error:`,i)}}async connect(){return this.performHandshake()}async reconnect(){this.connected=!1,this.authDone=!1,this.eioSid="",this.websocketUrl=null;try{this.ws?.close()}catch{}this.ws=null,await this.performHandshake()}disconnect(){this.running=!1,this.stopPingLoop();try{this.ws?.send("0")}catch{}try{this.ws?.close()}catch{}this.connected=!1}emit(e,n){if(!this.connected||this.ws?.readyState!==tn.OPEN)return!1;try{return this.ws.send(`42${JSON.stringify([e,n])}`),!0}catch{return!1}}isConnected(){return this.connected}isAuthenticated(){return this.authDone}onDisconnect(e){let n=this.eventCallbacks.disconnect;n?this.eventCallbacks.disconnect=o=>{n(o),e()}:this.eventCallbacks.disconnect=()=>e()}wait(){return!this.ws||!this.connected?Promise.resolve():new Promise(e=>{this.waitResolve=e})}};var go={"cim.cal:createEvents":{func:"cim.cal:createEvents",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.cal:createEventsForLunkr":{func:"cim.cal:createEventsForLunkr",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.cal:deleteEvents":{func:"cim.cal:deleteEvents",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.cal:deleteEventsForLunkr":{func:"cim.cal:deleteEventsForLunkr",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.cal:deleteReminder":{func:"cim.cal:deleteReminder",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.cal:getMeetingRooms":{func:"cim.cal:getMeetingRooms",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.cal:getReminder":{func:"cim.cal:getReminder",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.cal:getReminderWithAutoCheck":{func:"cim.cal:getReminderWithAutoCheck",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.cal:setReminder":{func:"cim.cal:setReminder",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.cal:setReminderForLunkr":{func:"cim.cal:setReminderForLunkr",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.cal:updateEvents":{func:"cim.cal:updateEvents",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.cal:updateEventsForLunkr":{func:"cim.cal:updateEventsForLunkr",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.common:api":{func:"cim.common:api",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.common:autoKeepSession":{func:"cim.common:autoKeepSession",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.common:checkModuleVersion":{func:"cim.common:checkModuleVersion",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.common:checkVersion":{func:"cim.common:checkVersion",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.common:clickLog":{func:"cim.common:clickLog",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.common:customOpLog":{func:"cim.common:customOpLog",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.common:delayClickLog":{func:"cim.common:delayClickLog",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.common:feedback":{func:"cim.common:feedback",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.common:flashMailLog":{func:"cim.common:flashMailLog",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.common:getAdminFunctionSetting":{func:"cim.common:getAdminFunctionSetting",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.common:getAttrs":{func:"cim.common:getAttrs",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.common:getAvatar":{func:"cim.common:getAvatar",path:"/lunkr/f",requiresFunc:!0,defaultUseGet:!0},"cim.common:getBigAvatar":{func:"cim.common:getBigAvatar",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.common:getCimPrefAttr":{func:"cim.common:getCimPrefAttr",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.common:getConfig":{func:"cim.common:getConfig",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.common:getCustomDomain":{func:"cim.common:getCustomDomain",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.common:getEnfDetail":{func:"cim.common:getEnfDetail",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.common:getInitConfig":{func:"cim.common:getInitConfig",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.common:getLastLoginStatus":{func:"cim.common:getLastLoginStatus",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.common:getMaterial":{func:"cim.common:getMaterial",path:"/lunkr/f",requiresFunc:!0,defaultUseGet:!0},"cim.common:getNSISDownloadURL":{func:"cim.common:getNSISDownloadURL",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.common:getOrgInfo":{func:"cim.common:getOrgInfo",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.common:getRemindList":{func:"cim.common:getRemindList",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.common:getRevision":{func:"cim.common:getRevision",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.common:getSysUserInfo":{func:"cim.common:getSysUserInfo",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.common:getUserType":{func:"cim.common:getUserType",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.common:getValueByKey":{func:"cim.common:getValueByKey",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.common:getWebSocketURL":{func:"cim.common:getWebSocketURL",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.common:iosHotfix":{func:"cim.common:iosHotfix",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.common:listAuthDevice":{func:"cim.common:listAuthDevice",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.common:listFlagUser":{func:"cim.common:listFlagUser",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.common:logCollapse":{func:"cim.common:logCollapse",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.common:logRecord":{func:"cim.common:logRecord",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.common:onlineStatus":{func:"cim.common:onlineStatus",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.common:resetTopicAvatar":{func:"cim.common:resetTopicAvatar",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.common:searchFlagUser":{func:"cim.common:searchFlagUser",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.common:sendNetDiskOperateNotice":{func:"cim.common:sendNetDiskOperateNotice",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.common:sendShake":{func:"cim.common:sendShake",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.common:setApplePushSwitch":{func:"cim.common:setApplePushSwitch",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.common:setAvatar":{func:"cim.common:setAvatar",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.common:setCimPrefAttr":{func:"cim.common:setCimPrefAttr",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.common:setFlag":{func:"cim.common:setFlag",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.common:setMiscFlag":{func:"cim.common:setMiscFlag",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.common:setRevision":{func:"cim.common:setRevision",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.common:sioSubscribe":{func:"cim.common:sioSubscribe",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.common:transEmail":{func:"cim.common:transEmail",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.common:verify":{func:"cim.common:verify",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.company:getCompanyInfoById":{func:"cim.company:getCompanyInfoById",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.company:getSensitiveWord":{func:"cim.company:getSensitiveWord",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.company:listCompanyInfo":{func:"cim.company:listCompanyInfo",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.container:searchContacts":{func:"cim.container:searchContacts",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.extSys:opRedpacket":{func:"cim.extSys:opRedpacket",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.extSys:push":{func:"cim.extSys:push",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.extSys:pushRegister":{func:"cim.extSys:pushRegister",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.file:addCollect":{func:"cim.file:addCollect",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.file:cancelCollect":{func:"cim.file:cancelCollect",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.file:directData":{func:"cim.file:directData",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.file:getFileData":{func:"cim.file:getFileData",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.file:getSearchResult":{func:"cim.file:getSearchResult",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.file:getThumbnail":{func:"cim.file:getThumbnail",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.file:listCollect":{func:"cim.file:listCollect",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.file:moveToNetFolder":{func:"cim.file:moveToNetFolder",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.file:prepare":{func:"cim.file:prepare",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.file:search":{func:"cim.file:search",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.file:searchCollect":{func:"cim.file:searchCollect",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.file:uploadPost":{func:"cim.file:uploadPost",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.file:uploadSnippet":{func:"cim.file:uploadSnippet",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.file:uploadVoice":{func:"cim.file:uploadVoice",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.file:viewFile":{func:"cim.file:viewFile",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.group:attendance":{func:"cim.group:attendance",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.group:create":{func:"cim.group:create",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.group:delete":{func:"cim.group:delete",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.group:discard":{func:"cim.group:discard",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.group:getInfo":{func:"cim.group:getInfo",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.group:getMembersInfo":{func:"cim.group:getMembersInfo",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.group:getRelate":{func:"cim.group:getRelate",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.group:invite":{func:"cim.group:invite",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.group:listVipUserTopic":{func:"cim.group:listVipUserTopic",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.group:notifyFlag":{func:"cim.group:notifyFlag",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.group:search":{func:"cim.group:search",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.group:transfer":{func:"cim.group:transfer",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.group:updateDescription":{func:"cim.group:updateDescription",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.group:updateName":{func:"cim.group:updateName",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.link:generate":{func:"cim.link:generate",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.link:getInfo":{func:"cim.link:getInfo",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.link:prolong":{func:"cim.link:prolong",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.link:sendInviteMail":{func:"cim.link:sendInviteMail",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.link:shorten":{func:"cim.link:shorten",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.mail:compose":{func:"cim.mail:compose",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.mail:getPushFolder":{func:"cim.mail:getPushFolder",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.mail:getShareNF":{func:"cim.mail:getShareNF",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.mail:readMail":{func:"cim.mail:readMail",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.mail:readShare":{func:"cim.mail:readShare",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.mail:refreshToken":{func:"cim.mail:refreshToken",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.mail:remoteCompose":{func:"cim.mail:remoteCompose",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.mail:remoteRequest":{func:"cim.mail:remoteRequest",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.mail:searchMessages":{func:"cim.mail:searchMessages",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.mail:setAllRead":{func:"cim.mail:setAllRead",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.mail:setPushFolder":{func:"cim.mail:setPushFolder",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.mail:share":{func:"cim.mail:share",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.mail:ssoLunkr":{func:"cim.mail:ssoLunkr",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.mail:uploadToPersonalNF":{func:"cim.mail:uploadToPersonalNF",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.msg:batchReply":{func:"cim.msg:batchReply",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.msg:broadcast":{func:"cim.msg:broadcast",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.msg:clearUnread":{func:"cim.msg:clearUnread",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.msg:collect":{func:"cim.msg:collect",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.msg:deleteUploadFile":{func:"cim.msg:deleteUploadFile",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.msg:getInfo":{func:"cim.msg:getInfo",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.msg:getLastMsgByType":{func:"cim.msg:getLastMsgByType",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.msg:getLastMsgByUID":{func:"cim.msg:getLastMsgByUID",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.msg:getSearchResult":{func:"cim.msg:getSearchResult",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.msg:getShare":{func:"cim.msg:getShare",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.msg:list":{func:"cim.msg:list",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.msg:operate":{func:"cim.msg:operate",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.msg:p2p":{func:"cim.msg:p2p",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.msg:reply":{func:"cim.msg:reply",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.msg:search":{func:"cim.msg:search",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.msg:searchByGroup":{func:"cim.msg:searchByGroup",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.msg:setVip":{func:"cim.msg:setVip",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.msg:share":{func:"cim.msg:share",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.msg:stats":{func:"cim.msg:stats",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.msg:updateLastMsg":{func:"cim.msg:updateLastMsg",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.msg:updateRcptMsg":{func:"cim.msg:updateRcptMsg",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.oabEx:getAttrs":{func:"cim.oabEx:getAttrs",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.oabEx:getUserInfo":{func:"cim.oabEx:getUserInfo",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.oabEx:setAttrs":{func:"cim.oabEx:setAttrs",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.operation:deleteLotterySetting":{func:"cim.operation:deleteLotterySetting",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.operation:deleteOperateActivityById":{func:"cim.operation:deleteOperateActivityById",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.operation:exportUserLottery":{func:"cim.operation:exportUserLottery",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.operation:getCommentByCode":{func:"cim.operation:getCommentByCode",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.operation:getLotteryResultByCode":{func:"cim.operation:getLotteryResultByCode",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.operation:getOperateActivityById":{func:"cim.operation:getOperateActivityById",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.operation:getPrizeInfoByCode":{func:"cim.operation:getPrizeInfoByCode",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.operation:listActiveOperateActivity":{func:"cim.operation:listActiveOperateActivity",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.operation:listLotterySetting":{func:"cim.operation:listLotterySetting",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.operation:saveComment":{func:"cim.operation:saveComment",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.operation:saveLotterySetting":{func:"cim.operation:saveLotterySetting",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.operation:saveOperateActivity":{func:"cim.operation:saveOperateActivity",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.operation:saveUserCommentForPrize":{func:"cim.operation:saveUserCommentForPrize",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.operation:sendGreetingCard":{func:"cim.operation:sendGreetingCard",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.operation:startLottery":{func:"cim.operation:startLottery",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.operation:updateOperateActivity":{func:"cim.operation:updateOperateActivity",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.pab:addContact":{func:"cim.pab:addContact",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.pab:addGroup":{func:"cim.pab:addGroup",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.pab:addToBlacklist":{func:"cim.pab:addToBlacklist",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.pab:deleteGroup":{func:"cim.pab:deleteGroup",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.pab:getAllContacts":{func:"cim.pab:getAllContacts",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.pab:getBlacklist":{func:"cim.pab:getBlacklist",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.pab:getCombinedContacts":{func:"cim.pab:getCombinedContacts",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.pab:getRecentContacts":{func:"cim.pab:getRecentContacts",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.pab:getWholeContacts":{func:"cim.pab:getWholeContacts",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.pab:removeFromBlacklist":{func:"cim.pab:removeFromBlacklist",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.pab:searchContact":{func:"cim.pab:searchContact",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.pab:updateContact":{func:"cim.pab:updateContact",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.qrcode:generate":{func:"cim.qrcode:generate",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.qrcode:qrcodeInfo":{func:"cim.qrcode:qrcodeInfo",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.qrcode:register":{func:"cim.qrcode:register",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.remind:get":{func:"cim.remind:get",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.remind:getMobile":{func:"cim.remind:getMobile",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.remind:set":{func:"cim.remind:set",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.remind:setMobile":{func:"cim.remind:setMobile",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.revision:getRevision":{func:"cim.revision:getRevision",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.state:getNotify":{func:"cim.state:getNotify",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.state:query":{func:"cim.state:query",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.state:queryHasLogin":{func:"cim.state:queryHasLogin",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.state:queryUserState":{func:"cim.state:queryUserState",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.state:set":{func:"cim.state:set",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.state:setNotify":{func:"cim.state:setNotify",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.third:checkToken":{func:"cim.third:checkToken",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.third:genLinkNonce":{func:"cim.third:genLinkNonce",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.third:listApp":{func:"cim.third:listApp",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.thread:getThreadInfo":{func:"cim.thread:getThreadInfo",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.thread:listBulletin":{func:"cim.thread:listBulletin",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.thread:listRevision":{func:"cim.thread:listRevision",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.thread:listThreadNew":{func:"cim.thread:listThreadNew",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.thread:setTop":{func:"cim.thread:setTop",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.user:changePassword":{func:"cim.user:changePassword",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.user:checkVersionAndLogin":{func:"cim.user:checkVersionAndLogin",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.user:genTempSession":{func:"cim.user:genTempSession",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.user:getCard":{func:"cim.user:getCard",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.user:getEmojiList":{func:"cim.user:getEmojiList",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.user:getLunkrMailData":{func:"cim.user:getLunkrMailData",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.user:getRecentUnread":{func:"cim.user:getRecentUnread",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.user:getTempSession":{func:"cim.user:getTempSession",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.user:getTempShareSession":{func:"cim.user:getTempShareSession",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.user:kickOffLine":{func:"cim.user:kickOffLine",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.user:kickOnlineDevice":{func:"cim.user:kickOnlineDevice",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.user:kickOnlineUserForAdmin":{func:"cim.user:kickOnlineUserForAdmin",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.user:listKickOffLineLog":{func:"cim.user:listKickOffLineLog",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.user:listLoginHistory":{func:"cim.user:listLoginHistory",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.user:logout":{func:"cim.user:logout",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.user:queryOnlineDevice":{func:"cim.user:queryOnlineDevice",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.user:removeKickOffLine":{func:"cim.user:removeKickOffLine",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.user:saveCard":{func:"cim.user:saveCard",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.user:saveEmoji":{func:"cim.user:saveEmoji",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.user:shareCard":{func:"cim.user:shareCard",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.user:updateName":{func:"cim.user:updateName",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.user:updateOrgUserLastModified":{func:"cim.user:updateOrgUserLastModified",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"cim.user:updateTempSession":{func:"cim.user:updateTempSession",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"nfEx:getFileData":{func:"nfEx:getFileData",path:"/crux/adm_api/filePreview",requiresFunc:!0,defaultUseGet:!0},"nfEx:getShareFile":{func:"nfEx:getShareFile",path:"/lunkr/f",requiresFunc:!0,defaultUseGet:!0},"oab:autoMatch":{func:"oab:autoMatch",path:"/coremail/s/json",requiresFunc:!0,defaultUseGet:!1},"oab:get":{func:"oab:get",path:"/coremail/s/json",requiresFunc:!0,defaultUseGet:!1},"oab:getDirectories":{func:"oab:getDirectories",path:"/coremail/s/json",requiresFunc:!0,defaultUseGet:!1},"oab:listEx":{func:"oab:listEx",path:"/coremail/s/json",requiresFunc:!0,defaultUseGet:!1},"oab:searchEx":{func:"oab:searchEx",path:"/coremail/s/json",requiresFunc:!0,defaultUseGet:!1},"pab:createContact":{func:"pab:createContact",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"pab:deleteContact":{func:"pab:deleteContact",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"pab:getAllContactsByType":{func:"pab:getAllContactsByType",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"pab:getContactByEmail":{func:"pab:getContactByEmail",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"pab:getContactsByGroup":{func:"pab:getContactsByGroup",path:"/lunkr/s/json",requiresFunc:!0,defaultUseGet:!1},"user:config":{func:"user:config",path:"/lunkr/common/config",requiresFunc:!1,defaultUseGet:!0},"user:init":{func:"user:init",path:"/lunkr/init",requiresFunc:!1,defaultUseGet:!0}},Vs=Object.keys(go);import*as $e from"https";import*as ho from"crypto";import{WebSocket as xo}from"ws";import*as bo from"qrcode-terminal";import{v4 as vo}from"uuid";var ye="lunkr.coremail.cn",Ws={Accept:"text/x-json","Accept-Language":"zh-CN,zh;q=0.9,en;q=0.8","Cache-Control":"no-cache",Connection:"keep-alive","Content-Type":"text/x-json; charset=UTF-8"};async function Fe(s,e,n,o){return new Promise((i,a)=>{let t=JSON.stringify(n),r=`${s}?func=${e}`;o?.sid&&(r+=`&sid=${o.sid}`);let c=o?.baseUrl||ye,l={...Ws,"Content-Length":Buffer.byteLength(t)};o?.cookies&&Object.keys(o.cookies).length>0&&(l.Cookie=Object.entries(o.cookies).map(([m,f])=>`${m}=${f}`).join("; "));let d=$e.request({hostname:c,port:443,path:r,method:"POST",headers:l},m=>{let f="",x={},g=m.headers["set-cookie"];if(g)for(let b of g){let v=b.match(/^([^=]+)=([^;]+)/);v&&(x[v[1].trim()]=v[2].trim())}m.on("data",b=>f+=b),m.on("end",()=>{try{i({data:JSON.parse(f),cookies:x})}catch{a(new Error(`Invalid JSON: ${f}`))}})});d.on("error",a),d.write(t),d.end()})}async function Hs(s){return new Promise((e,n)=>{$e.get(s,o=>{let i="";o.on("data",a=>i+=a),o.on("end",()=>e(i))}).on("error",n)})}async function rn(s={}){let{debug:e=!1,timeout:n=12e4,device:o}=s,i=a=>{e&&console.log(`[QR Login] ${a}`)};try{i("[1] Generating temporary session...");let a=await Fe("/lunkr/s/json","cim.user:genTempSession",{type:"qrLogin"});if(a.data.code!=="S_OK")return{success:!1,error:`genTempSession failed: ${a.data.code} - ${a.data.msg||a.data.reason}`};let t=a.data.var?.sid;if(!t)return{success:!1,error:"No sid in response"};i(`Temporary session ID: ${t}`),i("[2] Socket.IO HTTP handshake...");let r=`https://${ye}/socket.io/1/?t=${Date.now()}&EIO=3&transport=polling`,c=await Hs(r),l=c.indexOf('0{"sid"'),u=l>=0?c.substring(l):c;if(!u.startsWith("0{"))return{success:!1,error:"Handshake format error"};let d=JSON.parse(u.substring(1)),m=d.sid,f=d.pingInterval??25e3;i(`eioSid: ${m}, pingInterval: ${f}`),i("[3] WebSocket connection...");let x=`wss://${ye}/socket.io/1/websocket/?EIO=3&transport=websocket&sid=${m}`;return new Promise(g=>{let b=setTimeout(()=>{v.close(),g({success:!1,error:"Timeout waiting for QR scan"})},n),v=new xo(x,{headers:{Host:ye,Origin:`https://${ye}`,"User-Agent":"Mozilla/5.0"}}),C=!1,k;v.on("open",()=>{i("WebSocket connected, sending 2probe..."),v.send("2probe")}),v.on("message",A=>{let I=A.toString();if(i(`Received: ${I.substring(0,100)}`),I.includes("3probe")){i("Received 3probe, sending 5 and auth"),v.send("5");let y={clientId:`webmail:${t}`,sid:t,msg_v:100,uuid:vo(),TmpSes:1};v.send(`42["auth",${JSON.stringify(y)}]`);let S=`https://www.coremail.cn/app/poster.html?action=qrLogin&sid=${t}`;console.log(`
|
|
2
|
+
\u8BF7\u4F7F\u7528 Lunkr App \u626B\u7801\u767B\u5F55:
|
|
3
|
+
`),bo.generate(S,{small:!0}),e&&console.log(`
|
|
4
|
+
QR URL: ${S}
|
|
5
|
+
`),k=setInterval(()=>{v.readyState===xo.OPEN&&v.send("2")},f)}if(I.startsWith("42"))try{let y=JSON.parse(I.substring(2)),S=y[0],E=y[1];if(S==="ready"&&!C){C=!0,i("Auth ready, subscribing to scan events...");let $=`/onstat/mail/${t}/op_app_scanqrcode`;v.send(`42["subscribe",{"topic":"${$}"}]`)}if(S==="message"&&E?.payload){let $=typeof E.payload=="string"?JSON.parse(E.payload):E.payload;if(i(`Scan status: ${$.status}`),$.status==="verify"&&console.log("\u5DF2\u626B\u7801\uFF0C\u7B49\u5F85\u786E\u8BA4..."),$.status==="auth"){i(`Confirmed: ${$.user?.email}`);let X=$.user?.email,de={uid:X,authSid:t,authToken:$.token};i("Calling checkVersionAndLogin..."),Fe("/lunkr/s/json","cim.user:checkVersionAndLogin",de).then(J=>{let T=J.data,ce=J.cookies;if(i(`Login result: ${JSON.stringify(T)}`),T.code==="S_OK"&&T.var?.sid){let me=T.var.sid,fe=X,Ke=T.var.self_uid;i(`Login successful, sid: ${me}, email: ${fe}, selfUid: ${Ke}`),i("Calling getApiToken...");let Vn=o||{device_uuid:vo(),device_os:"Unknown",device_model:"pc",device_name:"OpenClaw"};Fe("/lunkr/s/json","cim.user:getApiToken",Vn,{sid:me,baseUrl:"betaweb.lunkr.cn",cookies:ce}).then(Se=>{let Jn=Se.data;i(`Token result: ${JSON.stringify(Jn)}`),clearTimeout(b),clearInterval(k),v.close(),g({success:!0,apiToken:Jn.var?.api_token,email:fe,selfUid:Ke,deviceUuid:Vn.device_uuid})}).catch(Se=>{console.error(`getApiToken failed: ${Se.message}`),clearTimeout(b),clearInterval(k),v.close(),g({success:!1,error:`getApiToken failed: ${Se.message}`})})}else clearTimeout(b),clearInterval(k),v.close(),g({success:!1,error:`Login failed: ${JSON.stringify(T)}`})}).catch(J=>{clearTimeout(b),clearInterval(k),v.close(),g({success:!1,error:J.message})})}}}catch(y){i(`Event parse failed: ${y.message}`)}I==="2"&&v.send("3")}),v.on("error",A=>{i(`WebSocket error: ${A.message}`),clearTimeout(b),clearInterval(k),g({success:!1,error:A.message})}),v.on("close",()=>{i("WebSocket closed"),clearTimeout(b),clearInterval(k)})})}catch(a){return{success:!1,error:a.message}}}async function ne(s,e,n,o={}){let{debug:i=!1}=o,a=t=>{i&&console.log(`[API Token Login] ${t}`)};try{a("Calling getLunkrSid..."),a(`email: ${s}`),a(`deviceUuid: ${n}`);let t=Date.now().toString(),r=ho.createHash("sha256").update(`${t}:${n}:${e}`).digest("base64");a(`timestamp: ${t}`),a(`token_hash: ${r}`);let c=await Fe("/lunkr/s/json","cim.user:getLunkrSid",{email:s,timestamp:t,device_uuid:n,token_hash:r},{baseUrl:"betaweb.lunkr.cn"});if(a(`Result: ${JSON.stringify(c.data)}`),c.data.code==="S_OK"&&c.data.var?.sid){let l=c.data.var.cookie?`Cim=${c.data.var.cookie}`:c.cookies?.Cim?`Cim=${c.cookies.Cim}`:void 0;return{success:!0,sid:c.data.var.sid,email:s,selfUid:c.data.var.uid,cookie:l}}else return c.data.code==="FA_REQUEST_EXPIRED"?{success:!1,error:"\u8BA4\u8BC1\u5931\u8D25\uFF1A\u672C\u5730\u65F6\u949F\u4E0D\u51C6\u786E\uFF0C\u8BF7\u8C03\u6574\u672C\u5730\u65F6\u949F\u540E\u91CD\u8BD5\u3002"}:{success:!1,error:`getLunkrSid failed: ${c.data.code} - ${c.data.msg||"Unknown error"}`}}catch(t){return{success:!1,error:t.message}}}import*as De from"path";function ko(s,e){return`[@!${s||"Unknown"}\u7684${e||"Bot"}:]`}function H(s,e,n){return ko(e,n)+s}var Qs=/^#\d+#U$/,Xs=/^#\d+#T$/,Ys=/^t\.\./i,Zs=/^[^\s@]+@[^\s@]+\.[^\s@]+$/;function cn(s){return Qs.test(s.trim())}function ln(s){return Xs.test(s.trim())}function Te(s){return Ys.test(s.trim())}function pn(s){return Zs.test(s.trim())}function V(s){let e=s.trim();return cn(e)||ln(e)||Te(e)||pn(e)}function Ge(s){let e=s.trim();return cn(e)||pn(e)&&!Te(e)?"user":ln(e)||Te(e)?"group":"unknown"}function un(s){let e=s.replace(/[<>:"/\\|?*\x00-\x1f]/g,"_").replace(/\.\./g,"_").replace(/^\.+/,"_").replace(/\.+$/,"_").trim();if(e.length>200){let n=De.extname(e);e=De.basename(e,n).substring(0,200-n.length)+n}return e||"download"}function G(s){if(!s)return"";let e=typeof s=="string"?parseInt(s,10):s;if(isNaN(e))return"";try{return new Date(e).toLocaleString("zh-CN",{hour:"2-digit",minute:"2-digit",second:"2-digit"})}catch{return""}}function te(s){if(s==null)return"";let e=["B","KB","MB","GB"],n=s,o=0;for(;n>=1024&&o<e.length-1;)n/=1024,o++;return`${n.toFixed(1)} ${e[o]}`}import*as Ne from"fs";import*as gn from"path";var dn=new Map,mn=null,Ee="en-US";function ei(){return gn.join(__dirname,"locales")}function ni(){let s=process.env.LUNKR_LANG;if(s)return fn(s);let e=process.env.LANG||process.env.LC_ALL;if(e){let o=e.split(".")[0].replace("_","-");return fn(o)}let n=process.env.LANGUAGE;if(n){let o=n.split(":")[0].replace("_","-");return fn(o)}return Ee}function fn(s){let e=s.toLowerCase();return{zh:"zh-CN","zh-cn":"zh-CN",zh_cn:"zh-CN","zh-hans":"zh-CN","zh-hans-cn":"zh-CN","zh-tw":"zh-TW","zh-hant":"zh-TW","zh-hk":"zh-TW",en:"en-US","en-us":"en-US",en_us:"en-US","en-gb":"en-US"}[e]||Ee}function yo(s){if(dn.has(s))return dn.get(s);let e=gn.join(ei(),`${s}.json`);try{if(Ne.existsSync(e)){let n=Ne.readFileSync(e,"utf-8"),o=JSON.parse(n);return dn.set(s,o),o}}catch{}return null}function oi(){return mn||(mn=ni()),mn}function wo(s,e){let n=e.split("."),o=s;for(let i of n)if(typeof o=="object"&&o!==null&&i in o)o=o[i];else return;return typeof o=="string"?o:void 0}function Co(s,e){return e?s.replace(/\{\{(\w+)\}\}/g,(n,o)=>String(e[o]??"")):s}function p(s,e){let n=oi(),o=yo(n);if(o){let i=wo(o,s);if(i)return Co(i,e)}if(n!==Ee){let i=yo(Ee);if(i){let a=wo(i,s);if(a)return Co(a,e)}}return s}var So=1e3;async function Lo(s,e){try{let n=await s.postJson({func:"cim.common:getCimPrefAttr",sid:e,payload:{return_field:"nickname,true_name,name"}});if(n.code==="S_OK"&&n.var){let o=n.var,i=o.nickname||o.true_name||o.name;return i?String(i).trim():null}}catch{}return null}async function Ao(s,e){let n=D(s,e);if(!n)throw new Error(p("errors.account_not_configured"));let o=new j(n.lunkrConfig.baseUrl,{apiPath:n.lunkrConfig.apiPath}),i={"Cim.sid":n.sid};for(let a of n.cookie.split(";")){let t=a.trim();if(t.includes("=")){let[r,c]=t.split("=",2);i[r.trim()]=c.trim()}}return o.setCookies(i),{client:o,account:n}}async function si(s,e){let{to:n,content:o,sid:i}=e,a=await s.postJson({func:"cim.msg:reply",sid:i,payload:{uid:n,content:o,type:"text"}});if(a.code!=="S_OK")throw new Error(p("api.send_failed",{code:String(a.code)}));return{msgId:a.var?.msgId??`msg-${Date.now()}`}}async function ii(s,e){let{to:n,content:o,sid:i}=e,a=await s.postJson({func:"cim.msg:reply",sid:i,payload:{uid:n,content:o,type:"post"}});if(a.code!=="S_OK")throw new Error(p("api.send_post_failed",{code:String(a.code)}));return{msgId:a.var?.msgId??`post-${Date.now()}`}}function jo(s){let e=s.replace(/^lunkr:/i,"");return e.startsWith("discussion:")?{chatId:e.replace("discussion:",""),chatType:"group"}:e.startsWith("channel:")?{chatId:e.replace("channel:",""),chatType:"channel"}:{chatId:e,chatType:"p2p"}}var Ro={deliveryMode:"direct",textChunkLimit:So,sendText:async s=>{let{cfg:e,to:n,text:o,replyToId:i,accountId:a}=s,{client:t,account:r}=await Ao(e,a),{chatId:c,chatType:l}=jo(n),u=r.botName??"Bot",d=r.senderName;d||(d=await Lo(t,r.sid)),d||(d=r.selfUid?.includes("@")?r.selfUid.split("@")[0]:"User");let m=H(o,d,u),f;return m.length>So?f=await ii(t,{to:c,content:m,sid:r.sid}):f=await si(t,{to:c,content:m,sid:r.sid}),{ok:!0,channel:"lunkr",messageId:f.msgId}},sendMedia:async s=>{let{cfg:e,to:n,text:o,mediaUrl:i,accountId:a}=s,{client:t,account:r}=await Ao(e,a),{chatId:c,chatType:l}=jo(n),u=r.botName??"Bot",d=r.senderName;d||(d=await Lo(t,r.sid)),d||(d=r.selfUid?.includes("@")?r.selfUid.split("@")[0]:"User");let m=H(o||"",d,u),f=await t.postJson({func:"cim.file:send",sid:r.sid,query:l==="p2p"?{to:c}:{gid:c},payload:{url:i,caption:m}});if(f.code!=="S_OK")throw new Error(p("api.send_media_failed",{code:String(f.code)}));return{ok:!0,channel:"lunkr",messageId:f.var?.msgId??`media-${Date.now()}`}}};function Uo(s,e){let n=s.chatType==="group"?s.chatId:null;return n&&(e.botDiscussions||{})[n]||null}function ai(s,e){return Uo(s,e)!==null}function ti(s,e){return s.trim().toLowerCase().startsWith(e.toLowerCase())}function ri(s,e){let n=s.fromUid===e.selfUid,o=`[@!${e.botName||"Bot"}]`,i=n&&s.content.startsWith(o),a=n&&!i;if(i)return{isBotMention:!1,isFromBot:!0,isFromSelf:!1};let t=Uo(s,e);return t?{isBotMention:!0,isFromBot:!1,isFromSelf:a,agentId:t.agentId}:n&&ti(s.content,e.commandPrefix)?{isBotMention:!0,isFromBot:!1,isFromSelf:!0}:{isBotMention:!1,isFromBot:!1,isFromSelf:a}}function ci(s,e){let n=s.trim();return n.toLowerCase().startsWith(e.toLowerCase())?n.slice(e.length).trim():s}function _o(s,e){let n=ri(s,e),i=ai(s,e)?s.content:ci(s.content,e.commandPrefix),a=s.chatType==="p2p"?"direct":s.chatType;return{externalId:s.msgId,channel:"lunkr",chatType:a,peerId:s.chatId,senderId:s.fromUid,text:i,timestamp:s.timestamp,replyTo:s.threadId,mentions:void 0,isBotMention:n.isBotMention,isFromBot:n.isFromBot,isFromSelf:n.isFromSelf,agentId:n.agentId}}var oe=new Map,we=new Map,Io=5e3;function li(s){let e=Date.now(),n=we.get(s);if(n&&e-n<Io)return!0;if(we.set(s,e),we.size>1e3)for(let[o,i]of we)e-i>Io*2&&we.delete(o);return!1}var pi=1e3;async function ui(s,e){try{let n=await s.postJson({func:"cim.common:getCimPrefAttr",sid:e,payload:{return_field:"nickname,true_name,name"}});if(n.code==="S_OK"&&n.var){let o=n.var,i=o.nickname||o.true_name||o.name;return i?String(i).trim():null}}catch{}return null}async function di(s,e,n){let{to:o,text:i,chatType:a}=e;n?.debug?.(`[sendLunkrReply] to=${o}, chatType=${a}, textLen=${i.length}`);let t=new j(s.lunkrConfig.baseUrl,{apiPath:s.lunkrConfig.apiPath}),r={"Cim.sid":s.sid};for(let f of s.cookie.split(";")){let x=f.trim();if(x.includes("=")){let[g,b]=x.split("=",2);r[g.trim()]=b.trim()}}t.setCookies(r);let c=s.botName??"Bot",l=s.senderName;l||(l=await ui(t,s.sid)),l||(l=s.selfUid?.includes("@")?s.selfUid.split("@")[0]:"User");let u=H(i,l,c);n?.debug?.(`[sendLunkrReply] Sending to ${o}, content preview: ${u.substring(0,100)}...`);let d=await t.postJson({func:"cim.msg:reply",sid:s.sid,payload:{uid:o,content:u,type:u.length>pi?"post":"text"}});if(n?.debug?.(`[sendLunkrReply] Response: code=${d.code}, var=${JSON.stringify(d.var)}`),d.code!=="S_OK")throw new Error(p("api.send_reply_failed",{code:String(d.code),msg:String(d.msg||"Unknown")}));let m=d.var?.msgId;return n?.info?.(`[sendLunkrReply] Message sent successfully: msgId=${m}`),{msgId:m??`msg-${Date.now()}`}}function mi(s,e){let{log:n}=e;return ae.fromLunkrConfig(s.lunkrConfig.baseUrl,s.sid,s.cookie,{uid:s.selfUid,username:s.botName,eventCallbacks:{message:i=>{try{let a=fi(i,n);if(a){let t=_o(a,s);e.onMessage(t)}}catch(a){e.onError(a instanceof Error?a:new Error(String(a)))}},reaction:i=>{if(e.onReaction&&i&&typeof i=="object"){let a=i;e.onReaction({msgId:String(a.msgId??""),userId:String(a.fromUid??""),emoji:String(a.emoji??"")})}},disconnect:()=>{e.onDisconnect()},error:i=>{let a=i&&typeof i=="object"&&"message"in i?String(i.message):"Unknown socket error";e.onError(new Error(a))}}})}function fi(s,e){if(!s||typeof s!="object")return null;let n=s,o=n.topic||"",i=n.payload||"",a;try{a=JSON.parse(i)}catch{return null}if(!a.mid&&!a.subject)return null;let t=String(a.mid||""),r=a.from||{},c=a.to||{},l=String(r.uid||""),u=String(r.true_name||r.email||""),d=String(a.subject||"");try{d=decodeURIComponent(d.replace(/\+/g," "))}catch{}let m=String(a.type||a.group_type||"p2p"),f=String(a.uid||c.uid||""),x;return f.endsWith("#U")?x="p2p":f.endsWith("#T")?x="group":x=m==="p2p"?"p2p":m==="topic"||m==="group"?"group":"channel",{msgId:t,threadId:a.threadId?String(a.threadId):void 0,parentId:a.parentId?String(a.parentId):void 0,fromUid:l,fromName:u||void 0,toUid:String(c.uid||""),chatType:x,chatId:f||(x==="p2p"?l:""),content:d,contentType:"text",timestamp:typeof a.time=="number"?a.time:Date.now(),mentioned:!1}}function gi(s){let{msg:e,account:n,sessionKey:o,accountId:i}=s,a=e.chatType!=="direct",t=a?`group:${e.peerId}`:e.senderId,r=a?"group":"direct";return{Body:e.text,BodyForAgent:e.text,RawBody:e.text,CommandBody:e.text,From:a?`lunkr:group:${e.peerId}`:`lunkr:${e.senderId}`,To:`lunkr:${e.peerId}`,SessionKey:o,AccountId:i,ChatType:r,ConversationLabel:t,SenderName:void 0,SenderId:e.senderId,CommandAuthorized:!0,Provider:"lunkr",Surface:"lunkr",MessageSid:e.externalId,MediaPath:void 0,MediaType:void 0,MediaUrl:void 0,OriginatingChannel:"lunkr",OriginatingTo:`lunkr:${e.peerId}`}}var Po={startAccount:async s=>{let{account:e,abortSignal:n,log:o}=s;o?.info(`[${e.accountId}] Starting Lunkr gateway`);let i=mi(e,{onMessage:async r=>{if(!r.isBotMention)return;if(li(r.externalId)){o?.debug?.(`[${e.accountId}] Skipping duplicate message: ${r.externalId}`);return}let c=r.chatType==="direct"?"DM":"Group";if(o?.info(`[${e.accountId}] [${c}:${r.peerId}] Received from ${r.senderId}: ${r.text?.substring(0,50)}...`),!s.channelRuntime){o?.warn?.(`[${e.accountId}] channelRuntime not available - skipping AI dispatch`);return}try{let l=new Set,u=r.chatType!=="direct",d=s.channelRuntime.routing.buildAgentSessionKey({peerId:r.peerId,channelId:"lunkr",accountId:s.accountId}),m=s.channelRuntime.routing.resolveAgentRoute({cfg:s.cfg,channel:"lunkr",peer:{kind:u?"group":"direct",id:r.peerId},accountId:s.accountId}),f=gi({msg:r,account:e,sessionKey:m.sessionKey,accountId:m.accountId}),g=s.cfg.session?.store;g&&await s.channelRuntime.session.recordInboundSession({storePath:g,sessionKey:f.SessionKey,ctx:f,onRecordError:b=>{o?.error?.(`[${e.accountId}] Failed to record session: ${String(b)}`)}}),await s.channelRuntime.reply.dispatchReplyWithBufferedBlockDispatcher({ctx:f,cfg:s.cfg,dispatcherOptions:{deliver:async(b,v)=>{let C=b.text??"";if(C.trim()){if(v.kind==="block"){o?.debug?.(`[${e.accountId}] Skipping block chunk (waiting for final)`);return}if(v.kind==="final"&&l.has(C)){o?.debug?.(`[${e.accountId}] Skipping duplicate final reply`);return}v.kind==="final"&&l.add(C),o?.info?.(`[${e.accountId}] Deliver ${v.kind} reply to ${r.peerId}: ${C.substring(0,50)}...`);try{await di(e,{to:r.peerId,chatType:r.chatType,text:C},o)}catch(k){o?.error?.(`[${e.accountId}] Failed to send reply: ${k instanceof Error?k.message:String(k)}`)}}},onError:(b,v)=>{o?.error?.(`[${e.accountId}] AI ${v.kind} failed: ${String(b)}`)}}})}catch(l){o?.error?.(`[${e.accountId}] Message dispatch error: ${l instanceof Error?l.message:String(l)}`)}},onReaction:r=>{o?.debug(`[${e.accountId}] Received reaction: ${r.emoji} on ${r.msgId}`)},onError:r=>{o?.error(`[${e.accountId}] Socket error: ${r.message}`)},onDisconnect:()=>{o?.info(`[${e.accountId}] Socket disconnected`),oe.delete(e.accountId)},log:o});if(!await i.connect())throw new Error(p("api.socket_connect_failed",{accountId:e.accountId}));o?.info?.(`[${e.accountId}] Lunkr gateway connected`);let t={socket:i,connected:!0,startedAt:Date.now()};return oe.set(e.accountId,t),n.addEventListener("abort",()=>{o?.info?.(`[${e.accountId}] Stopping Lunkr gateway`),i.disconnect(),oe.delete(e.accountId)}),new Promise(r=>{let c=()=>{n.removeEventListener("abort",l),r(t)},l=()=>{o?.info?.(`[${e.accountId}] Gateway abort signal received`),c()};n.addEventListener("abort",l),i.onDisconnect(()=>{o?.info?.(`[${e.accountId}] Socket disconnected`),oe.delete(e.accountId),c()})})},stopAccount:async s=>{let{account:e,log:n}=s;n?.info(`[${e.accountId}] Stopping Lunkr gateway`);let o=oe.get(e.accountId);o&&(o.socket.disconnect(),oe.delete(e.accountId))},logoutAccount:async s=>{let{account:e,log:n}=s;n?.info(`[${e.accountId}] Logging out Lunkr account`);let o=oe.get(e.accountId);return o&&(o.socket.disconnect(),oe.delete(e.accountId)),{cleared:!0,loggedOut:!0}}};async function xi(s,e=5e3){let n=Date.now();if(!s)return{ok:!1,error:"\u8D26\u53F7\u672A\u914D\u7F6E",elapsedMs:Date.now()-n};if(!s.sid||!s.lunkrConfig)return{ok:!1,error:"\u4F1A\u8BDD\u672A\u914D\u7F6E",elapsedMs:Date.now()-n};try{let o=new j(s.lunkrConfig.baseUrl,{apiPath:s.lunkrConfig.apiPath,timeout:e/1e3}),i={"Cim.sid":s.sid};for(let t of s.cookie.split(";")){let r=t.trim();if(r.includes("=")){let[c,l]=r.split("=",2);i[c.trim()]=l.trim()}}o.setCookies(i);let a=await o.checkSessionValid(s.sid);return{ok:a,sessionValid:a,elapsedMs:Date.now()-n}}catch(o){return{ok:!1,error:o instanceof Error?o.message:String(o),elapsedMs:Date.now()-n}}}function vi(s){let e=[];for(let n of s){let o=n.accountId??N;n.configured===!1&&e.push({channel:"lunkr",accountId:o,kind:"config",message:"Lunkr \u4F1A\u8BDD\u672A\u914D\u7F6E\u3002\u8BF7\u8FD0\u884C\uFF1Aopenclaw lunkr login",fix:"\u8FD0\u884C `openclaw lunkr login` \u8FDB\u884C\u8BA4\u8BC1"}),n.lastError&&e.push({channel:"lunkr",accountId:o,kind:"runtime",message:`\u9891\u9053\u9519\u8BEF\uFF1A${n.lastError}`});let i=n.probe;i&&!i.ok&&i.sessionValid===!1&&e.push({channel:"lunkr",accountId:o,kind:"auth",message:"Lunkr \u4F1A\u8BDD\u5DF2\u8FC7\u671F\uFF0C\u8BF7\u91CD\u65B0\u8BA4\u8BC1\u3002",fix:"\u8FD0\u884C `openclaw lunkr login` \u5237\u65B0\u4F1A\u8BDD"})}return e}function hi(s){return Xn({configured:s.snapshot.configured,running:s.snapshot.running,lastStartAt:s.snapshot.lastStartAt,lastStopAt:s.snapshot.lastStopAt,lastError:s.snapshot.lastError,probe:s.snapshot.probe,lastProbeAt:s.snapshot.lastProbeAt,tokenSource:s.snapshot.configured?"session":null})}function bi(s){let{account:e,runtime:n,probe:o}=s,i=!!(e.sid&&e.selfUid);return Qn({accountId:e.accountId,name:e.name,enabled:e.enabled,configured:i,runtime:n,probe:o})}var Oo={defaultRuntime:{accountId:N,running:!1,lastStartAt:null,lastStopAt:null,lastError:null},collectStatusIssues:vi,buildChannelSummary:({snapshot:s})=>hi({snapshot:s}),probeAccount:async({account:s,timeoutMs:e})=>xi(s??null,e??5e3),buildAccountSnapshot:({account:s,runtime:e,probe:n})=>bi({account:s,runtime:e,probe:n}),logSelfId:({account:s,includeChannelPrefix:e})=>{console.log(`Self ID: ${e?"lunkr:":""}${s.selfUid}`)},resolveAccountState:({configured:s,enabled:e})=>s?e?"configured":"disabled":"not configured"};async function Ce(s,e){let n=D(s,e);if(!n)throw new Error("Lunkr \u8D26\u53F7\u672A\u914D\u7F6E");let o=new j(n.lunkrConfig.baseUrl,{apiPath:n.lunkrConfig.apiPath}),i={"Cim.sid":n.sid};for(let a of n.cookie.split(";")){let t=a.trim();if(t.includes("=")){let[r,c]=t.split("=",2);i[r.trim()]=c.trim()}}return o.setCookies(i),{client:o,account:n}}function xn(s){return{kind:"user",id:`lunkr:${s.uid}`,name:s.name??s.uid,email:s.email,avatarUrl:s.avatar}}function qo(s){return{kind:s.type==="channel"?"channel":"group",id:`lunkr:discussion:${s.gid}`,name:s.name??s.gid,avatarUrl:s.avatar}}async function Fo(s,e,n,o){let i=await s.postJson({func:"cim.contacts:search",sid:e,query:{keyword:n,limit:o}});return i.code!=="S_OK"?[]:i.var?.users??[]}async function $o(s,e){let n=await s.postJson({func:"cim.discussion:list",sid:e});if(n.code!=="S_OK")return[];let o=n.var?.discussions;return o?o.map(i=>({gid:String(i.id??i.gid??""),name:i.name?String(i.name):void 0,memberCount:typeof i.memberCount=="number"?i.memberCount:void 0,avatar:i.avatar?String(i.avatar):void 0,type:i.type??"group"})):[]}async function ki(s,e,n,o){let i=await s.postJson({func:"cim.discussion:getMembers",sid:e,query:{gid:n,limit:o}});if(i.code!=="S_OK")return[];let a=i.var?.members;return a?a.map(t=>({uid:String(t.uid??""),name:t.name?String(t.name):void 0,email:t.email?String(t.email):void 0,avatar:t.avatar?String(t.avatar):void 0,department:t.department?String(t.department):void 0})):[]}var To={self:async({cfg:s,accountId:e})=>{let n=D(s,e);return n?.selfUid?{kind:"user",id:`lunkr:${n.selfUid}`,name:n.name??n.selfUid}:null},listPeers:async({cfg:s,accountId:e,query:n,limit:o})=>{let{client:i,account:a}=await Ce(s,e),t=n?.trim()??"",r=o&&o>0?o:20;return t?(await Fo(i,a.sid,t,r)).map(xn):[]},listPeersLive:async({cfg:s,accountId:e,query:n,limit:o})=>{let{client:i,account:a}=await Ce(s,e),t=n?.trim()??"",r=o&&o>0?o:20;return t?(await Fo(i,a.sid,t,r)).map(xn):[]},listGroups:async({cfg:s,accountId:e,query:n,limit:o})=>{let{client:i,account:a}=await Ce(s,e),t=await $o(i,a.sid),r=t;if(n){let c=n.toLowerCase();r=t.filter(l=>l.name?.toLowerCase().includes(c)||l.gid.toLowerCase().includes(c))}return o&&o>0&&(r=r.slice(0,o)),r.map(qo)},listGroupsLive:async({cfg:s,accountId:e,query:n,limit:o})=>{let{client:i,account:a}=await Ce(s,e),t=await $o(i,a.sid),r=t;if(n){let c=n.toLowerCase();r=t.filter(l=>l.name?.toLowerCase().includes(c)||l.gid.toLowerCase().includes(c))}return o&&o>0&&(r=r.slice(0,o)),r.map(qo)},listGroupMembers:async({cfg:s,accountId:e,groupId:n,limit:o})=>{let{client:i,account:a}=await Ce(s,e),t=n.replace(/^lunkr:discussion:/,"").replace(/^lunkr:/,"");return(await ki(i,a.sid,t,o??100)).map(xn)}};function Do(s){let{cfg:e,accountId:n,groupId:o}=s,i=D(e,n);if(!i||!o)return!1;let a=o.replace(/^lunkr:discussion:/,"").replace(/^lunkr:/,"");if(i.botDiscussions[a])return!1;let t=i.config.groups??[];return t.includes(a)||t.includes("*"),!0}function yi(s){let{cfg:e,accountId:n,groupId:o}=s,i=D(e,n);if(!i||!o)return;let a=o.replace(/^lunkr:discussion:/,"").replace(/^lunkr:/,"");if(i.botDiscussions[a])return"Bot discussion - all messages will trigger the bot";let t=i.config.groups??[];if(t.includes(a)||t.includes("*"))return Do({cfg:e,accountId:n,groupId:o})?"Mention the bot to trigger a response":"Bot will respond to all messages"}function wi(s){let{cfg:e,accountId:n,groupId:o}=s;D(e,n)}var Go={resolveRequireMention:Do,resolveGroupIntroHint:yi,resolveToolPolicy:wi};var Ci={id:"lunkr",label:"Lunkr",selectionLabel:"Lunkr (\u4F01\u4E1A\u534F\u4F5C)",detailLabel:"Lunkr \u4F01\u4E1A\u534F\u4F5C",docsPath:"/channels/lunkr",docsLabel:"lunkr",blurb:"\u4F01\u4E1A\u90AE\u4EF6\u548C\u534F\u4F5C\u5E73\u53F0\uFF0C\u652F\u6301\u6D88\u606F\u3001\u8054\u7CFB\u4EBA\u3001\u8BA8\u8BBA\u7EC4\u3002"},vn={id:"lunkr",meta:{...Ci,quickstartAllowFrom:!0},capabilities:{chatTypes:["direct","group"],polls:!1,reactions:!0,edit:!0,unsend:!0,reply:!0,effects:!1,groupManagement:!1,threads:!1,media:!0,nativeCommands:!1,blockStreaming:!0},reload:{configPrefixes:["channels.lunkr"]},configSchema:Hn(Ve),config:co,security:po,group:Go,messaging:{normalizeTarget:s=>{let e=s.trim();if(e)return e.replace(/^lunkr:(?:discussion:)?/i,"")},targetResolver:{looksLikeId:s=>{let e=s?.trim();return e?/^#[0-9]+#[UT]$/.test(e)||/^[a-zA-Z0-9_-]+$/.test(e)||/^lunkr:/i.test(e):!1},hint:"<uid|gid>"}},directory:To,outbound:Ro,status:Oo,gateway:Po,pairing:{idLabel:"lunkrUserId",normalizeAllowEntry:s=>s.replace(/^lunkr:/i,"")}};var Si=null;function Eo(s){let e={...s,_clients:new Map,_lastValidation:new Map,_validationInterval:3e5};return Si=e,e}var bn=Us(Yo(),1);import*as F from"fs";import*as M from"path";import*as Zo from"os";import*as es from"crypto";var ue=class s{client;sid;session;botName;senderName;cookies;constructor(e){this.session=e.session,this.sid=e.session.sid,this.botName=e.botName||"Bot",this.senderName=e.senderName||"",this.client=new j(e.session.baseUrl,{apiPath:e.session.apiPath}),this.cookies={};for(let n of e.session.cookie.split(";")){let o=n.trim();if(o.includes("=")){let i=o.indexOf("="),a=o.substring(0,i).trim(),t=o.substring(i+1).trim();this.cookies[a]=t}}this.client.setCookies(this.cookies)}static fromConfig(e){let n=R(),o=e?n.accounts?.find(i=>i.accountId===e&&i.session):Re(n);return o?.session?new s({session:o.session,botName:n.bot_name,senderName:o.session.senderName||""}):null}static fromAccount(e,n){if(!e.session)return null;let o=n||R();return new s({session:e.session,botName:o.bot_name,senderName:e.session.senderName||""})}async checkSession(){try{if((await this.client.postJson({func:"cim.common:getOrgInfo",sid:this.sid})).code==="S_OK")return!0}catch{}let e=await this.tryApiTokenRelogin();return e||(console.error(""),console.error("Session \u5DF2\u5931\u6548\uFF0C\u8BF7\u4F7F\u7528\u4EE5\u4E0B\u547D\u4EE4\u91CD\u65B0\u767B\u5F55\uFF1A"),console.error(" lunkr login (\u626B\u7801\u767B\u5F55)"),console.error(" lunkr login-bypwd (\u5BC6\u7801\u767B\u5F55)")),e}async tryApiTokenRelogin(){let e=R(),n=e.accounts.find(t=>t.session?.selfUid===this.session.selfUid);if(!n?.apiToken)return!1;let o=n.email||n.accountId,i=await ne(o,n.apiToken,e.device_uuid);if(!i.success||!i.sid||!i.cookie)return!1;n.session={...n.session,sid:i.sid,cookie:i.cookie,selfUid:i.selfUid||n.session.selfUid},q(e),this.sid=i.sid,this.session=n.session;let a={};for(let t of i.cookie.split(";")){let r=t.trim();if(r.includes("=")){let c=r.indexOf("="),l=r.substring(0,c).trim(),u=r.substring(c+1).trim();a[l]=u}}return this.cookies=a,this.client.setCookies(this.cookies),!0}getSelfUid(){return this.session.selfUid}async callApi(e){return this.client.postJson({func:e.func,sid:this.sid,query:e.query,payload:e.payload})}async fetchSenderName(){try{let e=await this.client.postJson({func:"cim.common:getCimPrefAttr",sid:this.sid,payload:{return_field:"nickname,true_name,name"}});if(e.code==="S_OK"&&e.var){let n=e.var,o=n.nickname||n.true_name||n.name;return o?String(o).trim():null}}catch{}return null}async ensureSenderName(){if(this.senderName)return this.senderName;let e=await this.fetchSenderName();if(e)return this.senderName=e,e;let n=this.session.selfUid;return n&&n.includes("@")?n.split("@")[0]:n||"Unknown"}async searchContacts(e,n=20){let o=[],i=new Set;try{let a=await this.client.postJson({func:"cim.pab:getRecentContacts",sid:this.sid});if(a.code==="S_OK"&&Array.isArray(a.var))for(let t of a.var){if(typeof t!="object"||!t)continue;let r=t,c=String(r.uid||""),l=String(r.email||"").toLowerCase(),u=String(r.true_name||"").toLowerCase();if(l.includes(e.toLowerCase())||u.includes(e.toLowerCase())){if(i.has(c))continue;i.add(c),o.push({uid:c,email:r.email,trueName:r.true_name,name:r.name})}}}catch{}try{let a=await this.client.postJson({func:"cim.container:searchContacts",sid:this.sid,payload:{keyword:e,windowSize:n}});if(a.code==="S_OK"&&Array.isArray(a.var))for(let t of a.var){if(typeof t!="object"||!t)continue;let r=t,c=String(r.uid||"");i.has(c)||(i.add(c),o.push({uid:c,email:r.email,trueName:r.true_name,name:r.name}))}}catch{}return o.slice(0,n)}async searchGroups(e,n=20){try{let o=await this.client.postJson({func:"cim.group:search",sid:this.sid,payload:{keyword:e,limit:n,return_field:"uid,email,true_name,name,description"}});if(o.code==="S_OK"&&Array.isArray(o.var))return o.var.map(i=>({uid:String(i.uid||""),name:i.name,trueName:i.true_name,email:i.email,description:i.description}))}catch{}return[]}async resolveRecipient(e){let n=e.trim();if(V(n)){let a=Ge(n);return{uid:n,type:a==="group"?"group":"user",name:n}}let o=await this.searchContacts(n,5);if(o.length>0){let a=o[0];return{uid:a.uid,type:"user",name:a.trueName||a.name||n,email:a.email||void 0}}let i=await this.searchGroups(n,5);if(i.length>0){let a=i[0];return{uid:a.uid,type:"group",name:a.name||a.trueName||n,email:a.email||void 0}}throw new Error(`\u672A\u627E\u5230\u8054\u7CFB\u4EBA\u6216\u8BA8\u8BBA\u7EC4: ${n}`)}async resolveRecipientInteractive(e,n){let o=e.trim();if(V(o)){let t=Ge(o);return{uid:o,type:t==="group"?"group":"user",name:o}}let i=await this.searchContacts(o,10);if(i.length>0){let t=0;if(i.length>1&&n){let c=i.map(l=>({uid:l.uid,name:l.trueName||l.name||l.email||l.uid,type:"user"}));t=n(c)}let r=i[t];return{uid:r.uid,type:"user",name:r.trueName||r.name||o,email:r.email||void 0}}let a=await this.searchGroups(o,10);if(a.length>0){let t=0;if(a.length>1&&n){let c=a.map(l=>({uid:l.uid,name:l.name||l.trueName||l.email||l.uid,type:"group"}));t=n(c)}let r=a[t];return{uid:r.uid,type:"group",name:r.name||r.trueName||o,email:r.email||void 0}}throw new Error(`\u672A\u627E\u5230\u8054\u7CFB\u4EBA\u6216\u8BA8\u8BBA\u7EC4: ${o}`)}async listMessages(e,n={}){let{limit:o=20,latestFirst:i=!0}=n,a={limit:o,export_field:"rf,cim,data,mail,attachments,flags,flags_detail,template,card,action,refer"};e.type==="user"?(a.uid=this.session.selfUid,a.filter={chatWithAddress:e.uid}):a.uid=e.uid,i&&(a.order="date",a.desc=!0,a.listOrder="desc");let r=await this.client.postJson({func:"cim.msg:list",sid:this.sid,payload:a});if(r.code!=="S_OK"||!Array.isArray(r.var))return[];let c=[];for(let l of r.var){if(typeof l!="object"||!l)continue;let u=l,d=u.data||u,m=d.from||{},f=[],x=d.attachments;if(Array.isArray(x))for(let g of x)f.push({file_id:g.fileId,uid:g.uid,title:g.title||g.filename,content_type:g.content_type,file_size:g.file_size||g.size,type:g.type,inline:g.inline===!0});c.push({mid:String(d.mid||d.uid||""),time:G(d.time),subject:d.subject||d.content||"",content:d.content,senderUid:m.uid||d.sender_uid||d.fromUid,senderName:m.true_name||m.email||d.sender_name||d.fromName,senderEmail:m.email||d.sender_email||d.fromEmail,attachments:f})}return c}async sendMessage(e,n,o={}){let i=o.botName||this.botName,a=o.senderName||await this.ensureSenderName(),t=H(n,a,i),r=await this.client.postJson({func:"cim.msg:reply",sid:this.sid,payload:{uid:e.uid,content:t,type:"text"}});if(r.code!=="S_OK")throw new Error(`\u53D1\u9001\u5931\u8D25: ${r.code} - ${r.msg||"Unknown error"}`);let c=r.var?.[0];return{mid:String(c?.mid||""),to:e.uid,type:e.type}}async sendFile(e,n,o={}){let i=o.botName||this.botName,a=o.senderName||await this.ensureSenderName(),t=H(o.content||"",a,i),r=`c:nf:cim${Math.floor(Math.random()*9999)+1}`,c=es.randomUUID(),u=e.type==="user"?this.session.selfUid:e.uid,d=[];for(let x of n){let g=await this.uploadFileWithFlow(x,u,r);d.push({fileId:g.fileId,uid:g.fileUid})}let m=await this.client.postJson({func:"cim.msg:reply",sid:this.sid,payload:{uid:e.uid,content:t,type:"text",clientMid:c,attachments:d}});if(m.code!=="S_OK")throw new Error(`\u53D1\u9001\u5931\u8D25: ${m.code} - ${m.msg||"Unknown error"}`);let f=m.var?.[0];return{mid:String(f?.mid||""),to:e.uid,files:n}}async uploadFile(e,n,o){let i=M.resolve(e),a=M.basename(i);if(!F.existsSync(i))throw new Error(`\u6587\u4EF6\u4E0D\u5B58\u5728: ${e}`);let t=F.statSync(i),r=bn.lookup(i)||"application/octet-stream",c=F.readFileSync(i),l=await this.client.postJson({func:"cim.file:prepare",sid:this.sid,payload:{size:t.size,composeId:o,fileName:a,uid:n,contentType:r}});if(l.code!=="S_OK")throw new Error(`\u51C6\u5907\u4E0A\u4F20\u5931\u8D25: ${l.code}`);let d=l.var?.attachmentId;if(!d)throw new Error("prepare \u672A\u8FD4\u56DE attachmentId");let m=`${this.session.baseUrl}${this.session.apiPath}?func=cim.file:directData&sid=${this.sid}&composeId=${encodeURIComponent(o)}&attachmentId=${d}&offset=0&uid=${encodeURIComponent(n)}`,x={"Content-Type":"application/octet-stream",Cookie:Object.entries(this.cookies).map(([y,S])=>`${y}=${S}`).join("; ")},g=await Pe(m,c,x,6e4),b=g.headers["set-cookie"];if(b)for(let y of b.split(",")){let S=y.match(/^([^=]+)=([^;]+)/);S&&(this.cookies[S[1].trim()]=S[2].trim())}let v;try{v=JSON.parse(g.data)}catch{throw new Error(`directData \u8FD4\u56DE\u975E JSON: ${g.data?.substring?.(0,400)}`)}if(v.code!=="S_OK")throw new Error(`\u4E0A\u4F20\u6570\u636E\u5931\u8D25: ${v.code}`);let C=await this.client.postJson({func:"cim.file:moveToNetFolder",sid:this.sid,payload:{composeId:o,fileName:a,item:"fileName",attachmentId:d,uid:n}});if(C.code!=="S_OK")throw new Error(`\u79FB\u52A8\u6587\u4EF6\u5931\u8D25: ${C.code}`);let k=C.var,A=k?.fileId,I=k?.uid;if(!A)throw new Error("moveToNetFolder \u672A\u8FD4\u56DE fileId");return{fileId:A,fileUid:I||"",fileName:a}}async uploadFileWithFlow(e,n,o){let i=M.resolve(e),a=M.basename(i);if(!F.existsSync(i))throw new Error(`\u6587\u4EF6\u4E0D\u5B58\u5728: ${e}`);let t=F.statSync(i),r=bn.lookup(i)||"application/octet-stream",c=F.readFileSync(i),l=await this.client.postJson({func:"cim.file:prepare",sid:this.sid,payload:{size:t.size,composeId:o,fileName:a,uid:n,contentType:r}});if(l.code!=="S_OK")throw new Error(`\u51C6\u5907\u4E0A\u4F20\u5931\u8D25: ${l.code}`);let d=l.var?.attachmentId;if(!d)throw new Error("prepare \u672A\u8FD4\u56DE attachmentId");let m=`${this.session.baseUrl}${this.session.apiPath}?func=cim.file:directData&sid=${this.sid}&composeId=${encodeURIComponent(o)}&attachmentId=${d}&offset=0&uid=${encodeURIComponent(n)}`,x={"Content-Type":"application/octet-stream",Cookie:Object.entries(this.cookies).map(([y,S])=>`${y}=${S}`).join("; ")},g=await Pe(m,c,x,6e4),b=g.headers["set-cookie"];if(b)for(let y of b.split(",")){let S=y.match(/^([^=]+)=([^;]+)/);S&&(this.cookies[S[1].trim()]=S[2].trim())}let v;try{v=JSON.parse(g.data)}catch{throw new Error(`directData \u8FD4\u56DE\u975E JSON: ${g.data?.substring?.(0,400)}`)}if(v.code!=="S_OK")throw new Error(`\u4E0A\u4F20\u6570\u636E\u5931\u8D25: ${v.code}`);let C=await this.client.postJson({func:"cim.file:moveToNetFolder",sid:this.sid,payload:{composeId:o,fileName:a,item:"fileName",attachmentId:d,uid:n}});if(C.code!=="S_OK")throw new Error(`\u79FB\u52A8\u6587\u4EF6\u5931\u8D25: ${C.code}`);let k=C.var,A=k?.fileId,I=k?.uid;if(!A)throw new Error("moveToNetFolder \u672A\u8FD4\u56DE fileId");return{fileId:A,fileUid:I||"",fileName:a}}async downloadFile(e,n,o){let i=`${this.session.baseUrl}/lunkr/f?func=cim.file:getFileData&mode=download&uid=${encodeURIComponent(n)}&mid=${encodeURIComponent(e)}&fallback=false`,a={Cookie:`Cim.sid=${this.sid}; Cim=${this.cookies.Cim||""}`},t=await en(i,a),r=e.replace(/[:/]/g,"_"),c=t.headers["content-disposition"];if(c){let d=c.match(/filename[*]?=["']?([^"';\n]+)["']?/i);d&&(r=decodeURIComponent(d[1]))}r=un(r);let l=o?M.resolve(o):M.join(Zo.tmpdir(),r),u=M.dirname(l);return F.existsSync(u)||F.mkdirSync(u,{recursive:!0}),F.writeFileSync(l,t.data),{filePath:l,fileName:r,fileSize:t.data.length}}async createGroup(e,n){let o=await this.searchGroups(e,1);if(o.length>0&&o[0].name===e)return{uid:o[0].uid,name:o[0].name||e};let i={true_name:e,group_type:"topic"};n&&(i.description=n);let a=await this.client.postJson({func:"cim.group:create",sid:this.sid,payload:i});if(a.code!=="S_OK")throw new Error(`\u521B\u5EFA\u8BA8\u8BBA\u7EC4\u5931\u8D25: ${a.code} - ${a.msg||""}`);let t=a.var;return{uid:String(t.uid||""),name:e}}async deleteGroup(e){let n=await this.client.postJson({func:"cim.group:discard",sid:this.sid,payload:{uid:e}});if(n.code!=="S_OK")throw new Error(`\u5220\u9664\u8BA8\u8BBA\u7EC4\u5931\u8D25\uFF1A${n.code} - ${n.msg||""}`);return!0}createSocketClient(e){return ae.fromLunkrConfig(this.session.baseUrl,this.sid,this.session.cookie,{uid:this.session.selfUid,username:this.senderName,eventCallbacks:{connect:()=>e.onConnect?.(),disconnect:()=>e.onDisconnect?.(),ready:()=>e.onReady?.(),message:n=>e.onMessage?.(n),error:n=>{let o=n&&typeof n=="object"&&"message"in n?String(n.message):"Unknown error";e.onError?.(new Error(o))}}})}};function U(s){let e=ue.fromConfig(s);if(!e)throw new Error("\u672A\u914D\u7F6E Lunkr \u8D26\u53F7\uFF0C\u8BF7\u8FD0\u884C\uFF1Alunkr-cli login");return e}async function Oi(s){try{let e=new j(s.baseUrl,{apiPath:s.apiPath}),n={};for(let o of s.cookie.split(";")){let i=o.trim();if(i.includes("=")){let a=i.indexOf("="),t=i.substring(0,a).trim(),r=i.substring(a+1).trim();n[t]=r}}return e.setCookies(n),await e.checkSessionValid(s.sid)}catch{return!1}}async function kn(s){try{let e=new j(s.baseUrl,{apiPath:s.apiPath}),n={};for(let i of s.cookie.split(";")){let a=i.trim();if(a.includes("=")){let t=a.indexOf("="),r=a.substring(0,t).trim(),c=a.substring(t+1).trim();n[r]=c}}e.setCookies(n);let o=await e.postJson({func:"cim.common:getCimPrefAttr",sid:s.sid,payload:{return_field:"nickname,true_name,name"}});if(o.code==="S_OK"&&o.var){let i=o.var,a=i.nickname||i.true_name||i.name;return a?String(a).trim():null}}catch{}return null}async function yn(s,e){let n=e.verbose??!1,o=e.debug??!1,i=e.force??!1,a=e.temp??!1;console.log(""),console.log("\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501"),console.log(` ${p("login.qrcode_login_intro")}`),console.log("\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501"),console.log(""),console.log(a?` ${p("messages.mode_temporary_desc")}`:` ${p("messages.mode_persistent_desc")}`),console.log("");let t=R();if(i)console.log(p("messages.force_relogin"));else{let g=t.accounts?.[0];if(g?.session?.sid){if(await Oi(g.session)){let v=await kn(g.session);v&&(g.session.senderName=v,q(t)),console.log(p("messages.already_logged_in")),v&&console.log(`${p("labels.name")}: ${v}`),console.log(`UID: ${g.session.selfUid}`),console.log("");return}n&&(console.log(p("errors.session_expired_login")),console.log(""),console.log(p("status.login_hint")))}}let r=t.accounts?.[0];if(r?.apiToken&&!i){console.log(p("messages.authenticating_token"));let g=await ne(r.email||r.accountId,r.apiToken,t.device_uuid,{debug:o});if(g.success&&g.sid&&g.cookie){let b=g.selfUid||r.session?.selfUid;r.session={sid:g.sid,cookie:g.cookie,baseUrl:Oe,apiPath:pe,selfUid:b};let v=await kn(r.session);v&&(r.session.senderName=v),q(t),console.log(""),console.log("\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501"),console.log(` ${p("messages.login_successful_token")}`),console.log("\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501"),console.log(""),v&&console.log(` ${p("labels.name")}: ${v}`),console.log(` ${p("labels.email")}: ${g.email}`),console.log(""),console.log(` ${p("labels.config")}: ${B()}`),console.log("");return}console.log(p("login.token_expired_need_rescan")),o&&console.log(p("login.token_login_error",{error:g.error||"Unknown"}))}console.log(p("messages.scan_qrcode")),console.log("");let c=await rn({device:{device_uuid:t.device_uuid,device_os:t.device_os,device_model:t.device_model,device_name:t.device_name},debug:o});c.success||(console.error(""),console.error(p("login.qrcode_login_failed",{error:c.error||"Unknown"})),process.exit(1)),(!c.apiToken||!c.email)&&(console.error(""),console.error(p("login.qrcode_login_no_token")),process.exit(1)),console.log(""),console.log(p("messages.authenticating_with_token"));let l=await ne(c.email,c.apiToken,c.deviceUuid||t.device_uuid,{debug:o});l.success||(console.error(""),console.error(p("login.token_login_failed",{error:l.error||"Unknown"})),process.exit(1)),(!l.sid||!l.cookie)&&(console.error(""),console.error(p("login.token_login_no_session")),process.exit(1));let u=l.selfUid||c.selfUid,d={sid:l.sid,cookie:l.cookie,baseUrl:Oe,apiPath:pe,selfUid:u},m=await kn(d);m&&(d.senderName=m);let f={accountId:c.email,email:c.email,enabled:!0,session:d,apiToken:a?void 0:c.apiToken};t=R();let x=t.accounts?.findIndex(g=>g.accountId===c.email)??-1;x>=0&&t.accounts?t.accounts[x]=f:(t.accounts||(t.accounts=[]),t.accounts.push(f)),q(t),console.log(""),console.log("\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501"),console.log(` ${p("messages.login_successful_qrcode")}`),console.log("\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501"),console.log(""),m&&console.log(` ${p("labels.name")}: ${m}`),console.log(` ${p("labels.email")}: ${c.email}`),console.log(` UID: ${u}`),console.log(a?` ${p("labels.mode")}: ${p("messages.mode_temporary")}`:` ${p("labels.mode")}: ${p("messages.mode_persistent")}`),console.log(""),console.log(` ${p("labels.config")}: ${B()}`),console.log("")}import*as Ln from"readline";import*as os from"readline";var Sn=class extends Error{constructor(n,o,i){super(n);this.sid=o;this.authType=i;this.name="OtpRequiredError"}};var wn="https://lunkr.coremail.cn",Cn="/lunkr/s/json",wr=300*1e3;function ss(s){let e={};for(let n of s.split(";")){let[o,i]=n.trim().split("=");o&&i&&(e[o]=i)}return e}async function is(s,e){try{let n=e?.verbose??!1,o=e?.debug??!1;(n||o)&&console.log(`Discovering server for: ${s.email}`);let[i,a]=await be.discoverAvailableServer(s.email);(n||o)&&(console.log(`Found server: ${i.apiUrl}`),console.log(`Auth type: ${a.authType}`),console.log(`RSA sid: ${a.sid}`));let t=new j(i.baseUrl,{apiPath:i.apiPath}),r=nn({device_uuid:e?.deviceUuid||s.deviceUuid,device_name:e?.deviceName||s.deviceName});return o&&console.log(`Device info: ${JSON.stringify(r,null,2)}`),{success:!0,session:await qi(t,s.email,s.password,a,r,i,n,o)}}catch(n){return n instanceof Sn?{success:!1,requiresOtp:!0,otpSid:n.sid,error:n.message}:{success:!1,error:n instanceof Error?n.message:String(n)}}}async function qi(s,e,n,o,i,a,t,r=!1){let c={type:o.authType,e:o.rsaE,n:o.rsaN},l=c.type;r&&(console.log(`[Login] authType: ${l}`),console.log(`[Login] RSA e: ${c.e?c.e.substring(0,20)+"...":"(empty)"}`),console.log(`[Login] RSA n: ${c.n?c.n.substring(0,40)+"...":"(empty)"}`));let u;l&&l.toLowerCase()==="rsa"&&c?.e&&c?.n?((t||r)&&console.log("Encrypting password with RSA"),u=We(n,c.e,c.n),r&&console.log(`[Login] Encrypted password length: ${u.length}`)):(r&&console.log(`[Login] WARNING: Password NOT encrypted (authType=${l})`),u=n);let d=Math.floor(Date.now()/1e3).toString(),m=on(i.uuid,e,i.friendlyName),f=sn(m),x=an(m,d,f,"");r&&(console.log(`[Login] timestamp: ${d}`),console.log(`[Login] accessToken: ${m.substring(0,20)}...`),console.log(`[Login] signature: ${x.substring(0,20)}...`));let g={uid:e,password:u,authType:l,device:{uuid:i.uuid,os:i.os,model:i.model,friendlyName:i.friendlyName},locale:"zh_CN",timestamp:d,accessToken:m,signature:x,supportDynamicPwd:!0,supportBind2FA:!0,supportPermDomains:!0,supportSms:1,forceIPCheck:!1,forceCookieCheck:!0,returnCookie:!0,returnMainURL:!1};if(r){let y={...g},S=String(y.password||"");y.password=S.length>10?S.substring(0,20)+`...(length: ${S.length})`:"***",console.log(`[Login] Payload: ${JSON.stringify(y,null,2)}`)}let b=await s.postJson({func:"user:login",sid:o.sid,payload:g,debug:r||t});r&&console.log(`[Login] Response: ${JSON.stringify(b,null,2)}`);let v=b.code,C=b.var||{};if(v==="FA_NEED_VERIFY_CODE"||v==="FA_USER_IN_GRAYLIST"){let y=a.uri||`${a.baseUrl}/coremail/`;throw new L(`\u9700\u8981\u9A8C\u8BC1! \u9519\u8BEF\u7801: ${v}
|
|
6
|
+
\u8BF7\u5728\u6D4F\u89C8\u5668\u4E2D\u8BBF\u95EE\u4EE5\u4E0B\u5730\u5740\u624B\u5DE5\u767B\u5F55\u4EE5\u89E3\u9664\u9650\u5236:
|
|
7
|
+
${y}`)}if(v==="FA_NEED_DYNAMIC_PWD"){console.log(`
|
|
8
|
+
\u9700\u8981\u4E8C\u6B21\u8BA4\u8BC1 (OTP)...`);let y={tempSid:o.sid,trans:"login",device:{token:m,secret:f,uuid:i.uuid,friendlyName:i.friendlyName,model:i.model,os:i.os,deviceType:i.deviceType},type:"OTP"},S=await s.postJson({func:"user:triggerSecondAuth",sid:o.sid,payload:y});if(S.code!=="S_OK")throw new L(`\u89E6\u53D1\u4E8C\u6B21\u8BA4\u8BC1\u5931\u8D25: ${S.code}`);console.log(" \u8BF7\u5728\u5176\u4ED6\u8BBE\u5907\u4E0A\u5B8C\u6210 OTP \u9A8C\u8BC1..."),console.log(' \uFF08\u5982\u679C\u9009\u62E9"\u4FE1\u4EFB\u6B64\u8BBE\u5907"\uFF0C\u4E0B\u6B21\u767B\u5F55\u5C06\u4E0D\u9700\u8981\u518D\u6B21\u9A8C\u8BC1\uFF09'),await Fi(" \u5B8C\u6210\u540E\u6309\u56DE\u8F66\u7EE7\u7EED...");let E=await s.postJson({func:"user:querySecondAuthValidateStage",sid:o.sid,payload:{tempSid:o.sid,trans:"login"}});if(E.code!=="S_OK")throw new L(`\u67E5\u8BE2\u4E8C\u6B21\u8BA4\u8BC1\u72B6\u6001\u5931\u8D25: ${E.code}`);let X=(E.var||{}).stage;if(X!=="VALIDATED")throw new L(`\u4E8C\u6B21\u8BA4\u8BC1\u672A\u5B8C\u6210\uFF0C\u5F53\u524D\u72B6\u6001: ${X}`);console.log(" \u4E8C\u6B21\u8BA4\u8BC1\u6210\u529F!"),(t||r)&&console.log(`
|
|
9
|
+
\u91CD\u65B0\u767B\u5F55...`);let de={uid:e,password:"",authType:l,device:{uuid:i.uuid,os:i.os,model:i.model,friendlyName:i.friendlyName},locale:"zh_CN",timestamp:d,accessToken:m,signature:x,supportDynamicPwd:!0,supportBind2FA:!0,supportPermDomains:!0,supportSms:1,forceIPCheck:!1,forceCookieCheck:!0,returnCookie:!0,returnMainURL:!1},J=await s.postJson({func:"user:login",sid:o.sid,payload:de,debug:r||t});r&&console.log(`[Login] Re-login Response: ${JSON.stringify(J,null,2)}`);let T=J.code,ce=J.var||{};if(T!=="S_OK"&&T!=="FA_NEED_ACCESS_SECRET")throw new L(`\u91CD\u65B0\u767B\u5F55\u5931\u8D25: ${T}`);let me=ce.sid;if(!me)throw new L("\u91CD\u65B0\u767B\u5F55\u672A\u8FD4\u56DE sid");let fe=s.cookies.Coremail||"";if(!fe)throw new L("\u91CD\u65B0\u767B\u5F55\u672A\u83B7\u53D6\u5230 Coremail cookie");return(t||r)&&console.log("OTP \u9A8C\u8BC1\u6210\u529F\uFF0C\u83B7\u53D6 Lunkr session..."),await ns(me,fe,e,i,t,r)}if(v!=="S_OK"&&v!=="FA_NEED_ACCESS_SECRET"){let y=String(C.error||C.msg||b.msg||v);throw y.includes("\u5BC6\u7801")||y.toLowerCase().includes("password")||["PASSWORD_ERROR","AUTH_FAILED"].includes(v)?new he(`Password error: ${y}`):new L(`Login failed: ${y}`)}let k=C.sid;if(!k)throw new L("Login response missing sid");r&&console.log(`[Login] Client cookies: ${JSON.stringify(s.cookies)}`);let A=s.cookies.Coremail||"";if(!A){let y=Object.keys(s.cookies);throw new L(`Login succeeded but no Coremail cookie received. Available cookies: ${y.join(", ")||"none"}`)}return(t||r)&&(console.log(`Coremail login succeeded, sid: ${k.substring(0,20)}...`),console.log(`Coremail cookie: ${A.substring(0,30)}...`),console.log("Now getting Lunkr session...")),await ns(k,A,e,i,t,r)}async function ns(s,e,n,o,i,a){(i||a)&&console.log(`
|
|
10
|
+
[getLunkrSession] Step 1: Calling cim.common:verify...`);let t=`${wn}${Cn}?func=cim.common:verify`,r={"Content-Type":"text/x-json; charset=UTF-8",Cookie:`Coremail=${e}`},c=await K(t,"{}",r,3e4);if(a&&console.log(`[getLunkrSession] verify status: ${c.status}`),c.status!==200)throw new L(`cim.common:verify request failed: ${c.status}`);let l=JSON.parse(c.data);if(l.code!=="S_OK")throw new L(`cim.common:verify failed: ${l.code}`);let u=l.var||{},d=u.login_key,m=u.login_index;if(!d)throw new L("cim.common:verify did not return login_key");a&&(console.log(`[getLunkrSession] login_index: ${m}`),console.log(`[getLunkrSession] login_key length: ${d.length}`)),(i||a)&&console.log("[getLunkrSession] Step 2: Generating X-CM-TOKEN...");let f=`${s}:${e}`,x=Buffer.from(f,"utf8").toString("base64"),g=He(x,d);a&&console.log(`[getLunkrSession] X-CM-TOKEN length: ${g.length}`),(i||a)&&console.log("[getLunkrSession] Step 3: Calling cim.user:login...");let b=`${wn}${Cn}?func=cim.user:login`,v={"Content-Type":"text/x-json; charset=UTF-8","X-CM-TOKEN":g},C={uid:n,forceCookieCheck:!0,bindingRemoteCoremail:!0,setCookieKey:!0,version:"2.0.5.8",open:!0,device:{uuid:o.uuid,os:o.os,model:o.model,friendlyName:o.friendlyName}};m&&(C.login_index=m);let k=await K(b,JSON.stringify(C),v,3e4);if(a&&console.log(`[getLunkrSession] login status: ${k.status}`),![200,202].includes(k.status))throw new L(`cim.user:login request failed: ${k.status}, response: ${k.data.substring(0,500)}`);let A=JSON.parse(k.data),I=A.code;if(I!=="S_OK"&&I!=="FA_NEED_ACCESS_SECRET")throw new L(`cim.user:login failed: ${I}`);let y=A.var||{},S=y.sid,E=y.self_uid||y.uid;if(!S)throw new L("cim.user:login did not return sid");let $=null,X=k.headers["set-cookie"];if(X)for(let T of X.split(",")){let ce=T.trim().match(/^Cim=([^;]+)/);ce&&($=ce[1],a&&console.log(`[getLunkrSession] Received cookie: Cim=${$.substring(0,20)}...`))}let de=$||e;return(i||a)&&(console.log(`[getLunkrSession] Lunkr SID: ${S.substring(0,20)}...`),console.log(`[getLunkrSession] selfUid: ${E}`)),{sid:S,selfUid:E||n,cookie:`Cim=${de}`,baseUrl:wn,apiPath:Cn}}function Fi(s){return new Promise(e=>{let n=os.createInterface({input:process.stdin,output:process.stdout});n.question(s,()=>{n.close(),e()})})}async function $i(s,e,n,o,i,a){let t=new j(o,{apiPath:pe});t.setCookies(i),a&&console.log("[getApiTokenAndSession] Calling cim.user:getApiToken...");let r=await t.postJson({func:"cim.user:getApiToken",sid:s,payload:{device_uuid:n,device_os:"Unknown",device_model:"pc",device_name:"OpenClaw"},debug:a});if(r.code!=="S_OK"||!r.var?.api_token)throw new Error(`getApiToken failed: ${r.code} - ${r.msg||"No token returned"}`);let c=r.var.api_token;a&&console.log(`[getApiTokenAndSession] Got API token: ${c.substring(0,20)}...`);let l=await ne(e,c,n,{debug:a});if(!l.success)throw new Error(l.error||"apiTokenLogin failed");let u=l.sid,d=l.cookie;if(!d)throw new Error("apiTokenLogin did not return cookie");return a&&console.log(`[getApiTokenAndSession] New SID: ${u.substring(0,20)}...`),{apiToken:c,newSid:u,newCookie:d,selfUid:l.selfUid}}async function as(s){let{email:e,sid:n,cookie:o,emailForAccountId:i,baseUrl:a,apiPath:t,deviceUuid:r,cookies:c,temp:l=!1,debug:u=!1}=s;u&&(console.log(`[saveSessionWithToken] Starting for ${e}...`),console.log(`[saveSessionWithToken] temp mode: ${l}`));let d=await $i(n,i,r,a,c,u),m=R(),f={accountId:i,email:e,enabled:!0,session:{sid:d.newSid,cookie:d.newCookie,baseUrl:a,apiPath:t,selfUid:d.selfUid}};l?u&&console.log("[saveSessionWithToken] Temporary login - NOT saving apiToken"):(f.apiToken=d.apiToken,u&&console.log("[saveSessionWithToken] Saving apiToken to config"));let x=m.accounts?.findIndex(g=>g.accountId===i)??-1;return x>=0&&m.accounts?m.accounts[x]=f:(m.accounts||(m.accounts=[]),m.accounts.push(f)),q(m),u&&console.log("[saveSessionWithToken] Config saved"),{accountId:i,apiToken:l?void 0:d.apiToken}}function ts(s,e=!1){return new Promise((n,o)=>{if(e&&process.stdin.isTTY){process.stdout.write(s);let i="",a=process.stdin;a.setRawMode(!0),a.resume(),a.setEncoding("utf8");let t=r=>{let c=r;switch(c){case`
|
|
11
|
+
`:case"\r":case"":a.setRawMode(!1),a.pause(),a.removeListener("data",t),process.stdout.write(`
|
|
12
|
+
`),n(i);break;case"":process.stdout.write(`
|
|
13
|
+
`),process.exit(1);break;case"\x7F":case"\b":i.length>0&&(i=i.slice(0,-1),process.stdout.clearLine(0),process.stdout.cursorTo(0),process.stdout.write(s+"*".repeat(i.length)));break;default:c.charCodeAt(0)>=32&&(i+=c,process.stdout.write("*"));break}};a.on("data",t)}else if(e){process.stdout.write(s.replace("Password:","Password (visible): "));let i=Ln.createInterface({input:process.stdin,output:process.stdout});i.question("",a=>{i.close(),n(a.trim())})}else{let i=Ln.createInterface({input:process.stdin,output:process.stdout});i.question(s,a=>{i.close(),n(a.trim())})}})}async function An(s,e){let n=e.temp??!1;console.log(""),console.log("\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501"),console.log(" Lunkr Login (Password)"),console.log("\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501"),console.log(""),console.log(n?" Mode: Temporary (api_token will NOT be saved)":" Mode: Persistent (api_token will be saved)"),console.log("");let o=e.email;o||(o=process.env.LUNKR_EMAIL||process.env.LUNKR_USERNAME),o||(o=await ts("Email: ")),o||(console.error("\u9519\u8BEF\uFF1A\u8BF7\u8F93\u5165\u90AE\u7BB1"),process.exit(1));let i=e.password;i||(i=process.env.LUNKR_PASSWORD),i||(i=await ts("\u5BC6\u7801\uFF1A",!0)),i||(console.error("\u9519\u8BEF\uFF1A\u8BF7\u8F93\u5165\u5BC6\u7801"),process.exit(1)),console.log(""),console.log("\u6B63\u5728\u8BA4\u8BC1...");let a=e.verbose??!1,t=e.debug??!1,r=R(),c={email:o,password:i,deviceUuid:r.device_uuid,deviceName:r.device_name};try{let l=await is(c,{deviceUuid:r.device_uuid,deviceName:r.device_name,verbose:a,debug:t});l.success||(l.requiresOtp&&(console.log(""),console.log("\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501"),console.log(" OTP Required"),console.log("\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501"),console.log(""),console.log("\u9700\u8981\u53CC\u56E0\u7D20\u8BA4\u8BC1\u3002"),console.log("\u8BF7\u68C0\u67E5\u60A8\u7684\u8BA4\u8BC1\u5E94\u7528\u6216\u90AE\u7BB1\u4EE5\u83B7\u53D6\u9A8C\u8BC1\u7801\u3002"),console.log(""),console.log("\u6CE8\u610F\uFF1A\u6B64 CLI \u5C1A\u672A\u5B9E\u73B0 OTP \u652F\u6301\u3002"),console.log("\u8BF7\u4F7F\u7528 Web \u754C\u9762\u6216 lunkr-mcp \u5DE5\u5177\u8FDB\u884C OTP \u767B\u5F55\u3002"),process.exit(1)),console.error(`\u767B\u5F55\u5931\u8D25\uFF1A${l.error}`),process.exit(1)),l.session||(console.error("\u767B\u5F55\u6210\u529F\u4F46\u672A\u8FD4\u56DE\u4F1A\u8BDD"),process.exit(1));let u=ss(l.session.cookie);console.log(""),console.log("\u6B63\u5728\u83B7\u53D6 API \u4EE4\u724C...");try{await as({email:o,sid:l.session.sid,cookie:l.session.cookie,emailForAccountId:o,baseUrl:l.session.baseUrl,apiPath:l.session.apiPath,deviceUuid:r.device_uuid,cookies:u,temp:n,debug:t})}catch(d){let m=d instanceof Error?d.message:String(d);console.warn(`\u8B66\u544A\uFF1A\u83B7\u53D6 API \u4EE4\u724C\u5931\u8D25\uFF1A${m}`),console.log("\u4F1A\u8BDD\u5C06\u5728\u6CA1\u6709 API \u4EE4\u724C\u7684\u60C5\u51B5\u4E0B\u4FDD\u5B58\uFF08\u4E34\u65F6\u6A21\u5F0F\uFF09\u3002");let f={accountId:o,email:o,enabled:!0,session:l.session},x=r.accounts?.findIndex(g=>g.accountId===o)??-1;x>=0&&r.accounts?r.accounts[x]=f:(r.accounts||(r.accounts=[]),r.accounts.push(f)),q(r)}console.log(""),console.log("\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501"),console.log(" \u767B\u5F55\u6210\u529F"),console.log("\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501"),console.log(""),console.log(` \u90AE\u7BB1: ${o}`),console.log(` UID: ${l.session.selfUid}`),console.log(` \u670D\u52A1\u5668: ${l.session.baseUrl}`),console.log(n?" \u6A21\u5F0F: \u4E34\u65F6\uFF08\u65E0\u81EA\u52A8\u91CD\u65B0\u767B\u5F55\uFF09":" \u6A21\u5F0F: \u6301\u4E45\uFF08\u542F\u7528\u81EA\u52A8\u91CD\u65B0\u767B\u5F55\uFF09"),console.log(""),console.log(` \u914D\u7F6E\u4FDD\u5B58\u81F3: ${B()}`),console.log("")}catch(l){let u=l instanceof Error?l.message:String(l);console.error(`\u767B\u5F55\u5931\u8D25\uFF1A${u}`),process.exit(1)}}async function jn(s,e){if(console.log(""),console.log("\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501"),console.log(` ${p("login.logout_intro")}`),console.log("\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501"),console.log(""),e.all){let o=ge(),i=await import("fs");i.existsSync(o)?(i.rmSync(o,{recursive:!0,force:!0}),console.log(p("messages.session_data_removed")),console.log(` ${p("messages.deleted",{path:o})}`)):console.log(p("messages.session_data_not_found")),console.log("");return}let n=R();if(!n.accounts||n.accounts.length===0){console.log(p("messages.session_not_found_logged_out")),console.log("");return}try{if(e.email){let o=n.accounts.findIndex(i=>i.accountId===e.email||i.session?.selfUid===e.email||i.email===e.email);if(o>=0){let i=n.accounts.splice(o,1)[0];q(n),console.log(p("messages.logged_out_with",{account:i.accountId||e.email}))}else console.log(p("errors.account_not_found_with_id",{accountId:e.email}))}else n.accounts=[],q(n),console.log(p("messages.logged_out_all")),console.log(` ${p("messages.config_preserved",{path:B()})}`)}catch(o){let i=o instanceof Error?o.message:String(o);console.error(`\u767B\u51FA\u5931\u8D25\uFF1A${i}`),process.exit(1)}console.log("")}async function Rn(s,e){console.log(""),console.log("\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501"),console.log(" Lunkr Status"),console.log("\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501"),console.log("");let n=R();if(!n.accounts||n.accounts.length===0){console.log(p("status.not_logged_in")),console.log(""),console.log(p("status.login_hint")),console.log("");return}for(let o of n.accounts){let i=o.session;if(console.log(` ${p("labels.email")}: ${o.email||o.accountId}`),console.log(` UID: ${i?.selfUid||"N/A"}`),console.log(` ${p("labels.mode")}: ${o.enabled?p("messages.mode_persistent"):p("messages.mode_temporary")}`),console.log(` ${p("labels.server")}: ${i?.baseUrl||"N/A"}`),i?.senderName&&console.log(` ${p("labels.name")}: ${i.senderName}`),i&&o.enabled)try{let a=ue.fromConfig(o.accountId);if(a){let t=await a.checkSession();if(console.log(` ${p("labels.config")}: ${t?"\u2713 \u6709\u6548":"\u2717 \u5DF2\u8FC7\u671F"}`),e.verbose){let r=await a.fetchSenderName();r&&console.log(` ${p("labels.name")}: ${r}`)}}}catch(a){console.log(` ${p("labels.config")}: \u2717 ${p("api.send_failed",{code:a instanceof Error?a.message:"\u672A\u77E5"})}`)}console.log("")}}async function Un(s,e){let n=e.keyword;n||(console.error(p("errors.keyword_required")),process.exit(1));let o=e.limit||20,i=U();await i.checkSession()||(console.error(p("errors.session_expired_login")),process.exit(1)),console.log(""),console.log(p("messages.searching_groups",{keyword:n})),console.log("");try{let t=await i.searchGroups(n,o);if(t.length===0){console.log(p("messages.no_groups_found")),console.log("");return}console.log(p("messages.found_groups",{count:t.length})),console.log("");for(let r=0;r<t.length;r++){let c=t[r],l=r+1;if(console.log(` ${l}. ${c.name||c.trueName||"Unnamed"}`),console.log(` ${p("labels.uid")}: ${c.uid}`),c.email&&console.log(` ${p("labels.email")}: ${c.email}`),c.description){let u=c.description.length>60?c.description.substring(0,57)+"...":c.description;console.log(` Desc: ${u}`)}console.log("")}}catch(t){let r=t instanceof Error?t.message:String(t);console.error(p("api.search_failed",{error:r})),process.exit(1)}}async function _n(s,e){let n=e.keyword;n||(console.error(p("errors.keyword_required")),process.exit(1));let o=e.limit||20,i=U();await i.checkSession()||(console.error(p("errors.session_expired_login")),process.exit(1)),console.log(""),console.log(p("messages.searching_contacts",{keyword:n})),console.log("");try{let t=await i.searchContacts(n,o);if(t.length===0){console.log(p("messages.no_contacts_found")),console.log("");return}console.log(p("messages.found_contacts",{count:t.length})),console.log("");for(let r=0;r<t.length;r++){let c=t[r],l=r+1;console.log(` ${l}. ${c.trueName||c.name||"Unnamed"}`),console.log(` ${p("labels.uid")}: ${c.uid}`),c.email&&console.log(` ${p("labels.email")}: ${c.email}`),console.log("")}}catch(t){let r=t instanceof Error?t.message:String(t);console.error(p("api.search_failed",{error:r})),process.exit(1)}}function Ti(s,e){return e?s.filter(n=>n.senderUid===e):s}async function In(s,e){let n=e.to;n||(console.error(p("errors.recipient_required")),process.exit(1));let o=e.limit||20,i=U();await i.checkSession()||(console.error(p("errors.session_expired_login")),process.exit(1)),console.log(""),console.log(p("messages.listing_messages_with",{name:n})),console.log("");try{let t=await i.resolveRecipient(n);console.log(`${p("labels.conversation")}: ${t.name} (${t.type})`),console.log("");let r=await i.listMessages(t,{limit:o,latestFirst:!0});if(e.sender&&(r=Ti(r,e.sender),console.log(p("messages.filter_by_sender",{sender:e.sender,count:r.length})),console.log("")),r.length===0){console.log(p("messages.no_messages_found")),console.log("");return}if(e.json){console.log(JSON.stringify({success:!0,data:{chat:{uid:t.uid,name:t.name,type:t.type},messages:r.map(c=>({mid:c.mid,time:c.time,subject:c.subject,sender_uid:c.senderUid,sender_name:c.senderName,sender_email:c.senderEmail,attachments:c.attachments}))}},null,2));return}console.log(p("messages.recent_messages",{count:r.length})),console.log("");for(let c of r){let l=c.senderName||c.senderEmail||c.senderUid||p("labels.unknown");if(console.log(` \u250C\u2500 ${l} @ ${c.time||"N/A"}`),c.subject){let u=c.subject.length>200?c.subject.substring(0,197)+"...":c.subject;console.log(` \u2502 ${u.replace(/\n/g,`
|
|
14
|
+
\u2502 `)}`)}if(c.attachments&&c.attachments.length>0){console.log(` \u2502 ${p("labels.attachments")}:`);for(let u of c.attachments){let d=u.file_size?te(u.file_size):"",m=u.file_id||"",f=u.uid||"";console.log(` \u2502 - ${u.title||p("labels.unnamed")} ${d}`),m&&console.log(` \u2502 file_id: ${m}`),f&&console.log(` \u2502 uid: ${f}`)}}console.log(` \u2514\u2500 MID: ${c.mid}`),console.log("")}}catch(t){let r=t instanceof Error?t.message:String(t);console.error(p("api.list_failed",{error:r})),process.exit(1)}}import*as Pn from"readline";function Di(s){return new Promise(e=>{console.log(p("messages.multiple_matches")),console.log("");for(let o=0;o<s.length;o++)console.log(` ${o+1}. ${s[o].name} (${s[o].uid})`);console.log("");let n=Pn.createInterface({input:process.stdin,output:process.stdout});n.question(p("messages.enter_number",{max:s.length}),o=>{n.close();let i=parseInt(o.trim(),10);i>=1&&i<=s.length?e(i-1):(console.error(p("errors.invalid_selection")),process.exit(1))})})}async function On(s,e){let n=e.to;n||(console.error(p("errors.recipient_required")),process.exit(1));let o=U();await o.checkSession()||(console.error(p("errors.session_expired_login")),process.exit(1));try{let a=await o.resolveRecipientInteractive(n,V(n)?void 0:t=>t.length>1?-1:0);if(!V(n)){let t=await o.searchContacts(n,10),r=await o.searchGroups(n,10),c=[...t.map(l=>({uid:l.uid,name:l.trueName||l.name||l.email||l.uid,type:"user"})),...r.map(l=>({uid:l.uid,name:l.name||l.trueName||l.email||l.uid,type:"group"}))];if(c.length>1){let l=await Di(c),u=c[l],d=await o.resolveRecipient(u.uid);console.log(""),console.log(p("messages.sending_to",{name:d.name,type:d.type})),console.log(""),await rs(o,d.uid,e.message);return}}console.log(""),console.log(p("messages.sending_to",{name:a.name,type:a.type})),console.log(""),await rs(o,a.uid,e.message)}catch(a){let t=a instanceof Error?a.message:String(a);console.error(p("api.send_failed",{code:t})),process.exit(1)}}async function rs(s,e,n){let o=n;if(!o&&!process.stdin.isTTY){let t=[];for await(let r of process.stdin)t.push(r);o=Buffer.concat(t).toString("utf-8").trim()}o||(o=await new Promise(t=>{let r=Pn.createInterface({input:process.stdin,output:process.stdout});r.question(p("labels.message")+"\uFF1A",c=>{r.close(),t(c.trim())})})),o||(console.error(p("errors.message_required")),process.exit(1));let i=await s.resolveRecipient(e),a=await s.sendMessage(i,o);console.log("\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501"),console.log(` ${p("messages.message_sent")}`),console.log("\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501"),console.log(""),console.log(` ${p("labels.to")}: ${i.name}`),console.log(` ${p("labels.type")}: ${i.type}`),console.log(` ${p("labels.mid")}: ${a.mid}`),console.log("")}import*as cs from"readline";function Gi(s){return new Promise(e=>{console.log(p("messages.multiple_matches")),console.log("");for(let o=0;o<s.length;o++)console.log(` ${o+1}. ${s[o].name} (${s[o].uid})`);console.log("");let n=cs.createInterface({input:process.stdin,output:process.stdout});n.question(p("messages.enter_number",{max:s.length}),o=>{n.close();let i=parseInt(o.trim(),10);i>=1&&i<=s.length?e(i-1):(console.error(p("errors.invalid_selection")),process.exit(1))})})}async function qn(s,e){let n=e.to;n||(console.error(p("errors.recipient_required")),process.exit(1));let o=e.file;(!o||o.length===0)&&(console.error(p("errors.file_required")),process.exit(1));let i=U();await i.checkSession()||(console.error(p("errors.session_expired_login")),process.exit(1));try{let t=await i.resolveRecipientInteractive(n,V(n)?void 0:l=>l.length>1?-1:0);if(!V(n)){let l=await i.searchContacts(n,10),u=await i.searchGroups(n,10),d=[...l.map(m=>({uid:m.uid,name:m.trueName||m.name||m.email||m.uid,type:"user"})),...u.map(m=>({uid:m.uid,name:m.name||m.trueName||m.email||m.uid,type:"group"}))];if(d.length>1){let m=await Gi(d),f=d[m];t=await i.resolveRecipient(f.uid)}}console.log(""),console.log(p("messages.sending_files_to",{count:o.length,name:t.name,type:t.type})),console.log("");let r=await import("fs");for(let l=0;l<o.length;l++){let u=o[l],d="N/A";try{let m=r.statSync(u);d=te(m.size)}catch{d=p("messages.file_not_found")}console.log(` ${l+1}. ${u} (${d})`)}console.log("");let c=await i.sendFile(t,o,{content:e.message});console.log("\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501"),console.log(` ${p("messages.files_sent")}`),console.log("\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501"),console.log(""),console.log(` ${p("labels.to")}: ${t.name}`),console.log(` ${p("labels.type")}: ${t.type}`),console.log(` ${p("labels.mid")}: ${c.mid}`),console.log(` ${p("labels.files")}: ${c.files.length}`),console.log("")}catch(t){let r=t instanceof Error?t.message:String(t);console.error(p("api.send_failed",{code:r})),process.exit(1)}}async function Fn(s,e){let n=e["file-id"];n||(console.error(p("errors.file_id_required")),process.exit(1));let o=e.uid;o||(console.error(p("errors.uid_required")),process.exit(1));let i=U();await i.checkSession()||(console.error(p("errors.session_expired_login")),process.exit(1)),console.log(""),console.log(p("messages.downloading_file")),console.log("");try{let t=await i.downloadFile(n,o,e.output);console.log("\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501"),console.log(` ${p("messages.download_complete")}`),console.log("\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501"),console.log(""),console.log(` ${p("labels.name")}: ${t.fileName}`),console.log(` ${p("labels.size")}: ${te(t.fileSize)}`),console.log(` ${p("labels.path")}: ${t.filePath}`),console.log("")}catch(t){let r=t instanceof Error?t.message:String(t);console.error(p("api.download_failed",{error:r})),process.exit(1)}}async function $n(s,e){let n=U();await n.checkSession()||(console.error(p("errors.session_expired_login")),process.exit(1)),console.log(""),console.log("\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501"),console.log(" Lunkr WebSocket Listener"),console.log("\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501"),console.log(""),console.log(p("messages.connecting_websocket")),console.log(p("messages.press_ctrlc")),console.log("");let i=n.createSocketClient({onConnect:()=>{console.log(`[${G(Date.now())}] Connected to Lunkr`)},onDisconnect:()=>{console.log(`[${G(Date.now())}] Disconnected from Lunkr`)},onReady:()=>{console.log(`[${G(Date.now())}] Ready to receive messages`),console.log("")},onMessage:t=>{if(e.raw){console.log(`[${G(Date.now())}] RAW:`),console.log(JSON.stringify(t,null,2)),console.log("");return}if(!t||typeof t!="object"){console.log(`[${G(Date.now())}] Unknown message:`,t);return}let r=t,c=r.topic||"",l=r.payload||"",u;try{u=JSON.parse(l)}catch{console.log(`[${G(Date.now())}] Non-JSON payload on topic: ${c}`);return}if(!u.mid&&!u.subject)return;let d=u.mid||"",m=u.from||{},f=u.to||{},x=m.uid||"",g=m.true_name||m.email||x,b=f.true_name||f.email||"",v=u.subject||"";try{v=decodeURIComponent(v.replace(/\+/g," "))}catch{}let C=u.type||u.group_type||"p2p",k=u.uid||f.uid||"",A=u.time||"";console.log(`[${G(Date.now())}] Message from ${g}:`),console.log(` ID: ${d}`),console.log(` From: ${g} (${x})`),C!=="p2p"&&b?(console.log(` To: ${b} (${k})`),console.log(` Type: ${C}`)):console.log(` Type: ${C}`),A&&console.log(` Time: ${A}`),console.log(` Text: ${v.substring(0,200)}${v.length>200?"...":""}`),console.log("")},onError:t=>{console.error(`[${G(Date.now())}] Error: ${t.message}`)}});await i.connect()||(console.error(p("api.socket_connect_failed",{accountId:"N/A"})),process.exit(1)),process.on("SIGINT",()=>{console.log(""),console.log(p("messages.disconnecting")),i.disconnect(),process.exit(0)}),await new Promise(()=>{})}async function Ei(s,e,n,o){let i=`\u{1F916} ${p("create.welcome_title")}
|
|
15
|
+
|
|
16
|
+
\u{1F4CB} ${p("create.discussion_name")}: ${o.name}
|
|
17
|
+
\u{1F194} ${p("create.discussion_id")}: ${e}
|
|
18
|
+
${o.agentId?`\u{1F916} ${p("create.linked_agent")}: ${o.agentId}
|
|
19
|
+
`:""}\u{1F4A1} ${p("create.instructions")}:
|
|
20
|
+
\u2022 ${p("create.instruction_1")}
|
|
21
|
+
\u2022 ${p("create.instruction_2")}
|
|
22
|
+
\u2022 ${p("create.instruction_3")}
|
|
23
|
+
|
|
24
|
+
\u2705 ${p("create.ready_to_chat")}`,a=`[@!${n}] ${i}`,t=await s.callApi({func:"cim.msg:reply",payload:{uid:e,content:a,type:"text"}});if(t.code!=="S_OK")throw new Error(p("api.welcome_failed",{code:String(t.code)}))}async function Me(s,e){let{name:n,agentId:o,force:i,welcome:a=!0}=e;if(!n||n.trim().length===0)throw new Error(p("errors.discussion_name_required"));let t=U();if(!await t.checkSession())throw new Error(p("errors.session_expired_login"));let c=`[Bot-${n.trim()}]`,l=Ze(),u;if(i){console.log(p("create.creating_discussion",{name:c}));try{u=(await t.createGroup(c)).uid,console.log(p("create.discussion_created",{gid:u}))}catch(k){let A=k instanceof Error?k.message:String(k);throw A.includes("\u5DF2\u5B58\u5728")||A.includes("exist")?new Error(p("create.discussion_exists",{name:c})):k}}else{let k=c.replace(/^\[|\]$/g,""),I=(await t.searchGroups(k,20)).find(y=>y.name===c||y.trueName===c);if(I)u=I.uid,console.log(p("create.reusing_discussion",{name:c})),console.log(` GID: ${u}`);else{console.log(p("create.creating_discussion",{name:c}));try{u=(await t.createGroup(c)).uid,console.log(p("create.discussion_created",{gid:u}))}catch(y){let S=y instanceof Error?y.message:String(y);throw S.includes("\u5DF2\u5B58\u5728")||S.includes("exist")?new Error(p("create.discussion_exists",{name:c})):y}}}if(a)try{await Ei(t,u,l,{name:n.trim(),agentId:o}),console.log(" \u2705 "+p("create.welcome_sent"))}catch(k){console.warn(" \u26A0\uFE0F "+p("create.welcome_failed",{error:k instanceof Error?k.message:String(k)}))}let m=await s.runtime.config.loadConfig(),f=m.channels||{},x=f.lunkr||{},g=t.getSelfUid(),b={name:n.trim(),agentId:o,creatorUid:g,createdAt:Date.now()},v=x.botDiscussions||{};v[u]=b;let C={...m,channels:{...f,lunkr:{...x,botDiscussions:v}}};await s.runtime.config.writeConfigFile(C),console.log(""),console.log(p("messages.bot_discussion_configured",{name:c})),console.log(` GID: ${u}`),o&&console.log(` ${p("create.linked_agent")}: ${o}`),console.log(""),console.log(p("create.can_chat_now")),console.log(p("create.change_agent_hint")),console.log(""),console.log(p("create.config_auto_reload"))}var ls={name:"bot-create",description:"Create a new Bot discussion group",options:[{name:"name",alias:"n",description:"Name for the bot discussion",type:"string",required:!0},{name:"agent-id",alias:"a",description:"Agent ID to associate with this discussion",type:"string",required:!1},{name:"force",alias:"f",description:"Force create a new discussion even if one exists",type:"boolean",required:!1}]};async function ze(s,e){let t=(((await s.runtime.config.loadConfig()).channels||{}).lunkr||{}).botDiscussions||{};if(e.json){console.log(JSON.stringify(t,null,2));return}let r=Object.entries(t);if(r.length===0){console.log(p("messages.no_bot_discussions"));return}console.log(`${p("bot_list.title",{count:r.length})}
|
|
25
|
+
`);for(let[c,l]of r)console.log(` ${l.name}`),console.log(` GID: ${c}`),l.agentId&&console.log(` Agent: ${l.agentId}`),console.log("")}var ps={name:"bot-list",description:"List all configured bot discussions",options:[{name:"json",alias:"j",description:"Output as JSON",type:"boolean",required:!1}]};async function Be(s,e){let{name:n,gid:o}=e;if(!n&&!o)throw new Error(p("bot_delete.name_or_gid_required"));let i=U();if(!await i.checkSession())throw new Error(p("errors.session_expired_login"));let r=await s.runtime.config.loadConfig(),c=r.channels||{},l=c.lunkr||{},u=l.botDiscussions||{},d,m;if(o)d=o,m=u[o];else if(n){for(let[x,g]of Object.entries(u))if(g.name===n.trim()){d=x,m=g;break}}if(!d||!m){console.log(p("bot_delete.not_found"));return}console.log(p("bot_delete.deleting_from_server",{name:m.name}));try{await i.deleteGroup(d),console.log(" "+p("bot_delete.deleted_from_server"))}catch(x){console.warn(" \u26A0\uFE0F "+p("bot_delete.delete_from_server_failed",{error:x instanceof Error?x.message:String(x)})),console.log(" "+p("bot_delete.continue_removing_from_config"))}delete u[d];let f={...r,channels:{...c,lunkr:{...l,botDiscussions:u}}};await s.runtime.config.writeConfigFile(f),console.log(p("bot_delete.removed_from_config",{name:m.name})),console.log(` GID: ${d}`),console.log(""),console.log(p("create.config_auto_reload"))}var us={name:"bot-delete",description:"Delete a Bot discussion from server and configuration",arguments:[{name:"name",description:"Name of the bot discussion to remove",required:!1}],options:[{name:"gid",alias:"g",description:"GID of the bot discussion to remove",type:"string",required:!1}]};import{homedir as ds}from"os";import{join as ms}from"path";import{rmSync as Ni,existsSync as Mi}from"fs";async function Tn(s,e){let{purge:n=!1}=e;console.log("\u6B63\u5728\u5378\u8F7D Lunkr \u6269\u5C55..."),console.log(""),console.log("\u6B65\u9AA4 1\uFF1A\u4ECE OpenClaw \u914D\u7F6E\u4E2D\u79FB\u9664...");try{let i=await s.runtime.config.loadConfig(),a={...i.channels||{}};if(a.lunkr){delete a.lunkr;let t={...i,channels:a};await s.runtime.config.writeConfigFile(t),console.log(" \u2713 \u5DF2\u4ECE\u914D\u7F6E\u4E2D\u79FB\u9664 lunkr \u9891\u9053")}else console.log(" \u2139 \u914D\u7F6E\u4E2D\u672A\u627E\u5230 lunkr \u9891\u9053\uFF08\u5DF2\u79FB\u9664\uFF09")}catch(o){console.log(" \u26A0 \u66F4\u65B0\u914D\u7F6E\u5931\u8D25\uFF1A",o instanceof Error?o.message:String(o))}if(n){console.log(""),console.log("\u6B65\u9AA4 2\uFF1A\u6E05\u9664\u4F1A\u8BDD\u6570\u636E...");let o=ms(ds(),".lunkr-mcp");if(Mi(o))try{Ni(o,{recursive:!0,force:!0}),console.log(` \u2713 \u5DF2\u5220\u9664 ${o}`)}catch(i){console.log(" \u26A0 \u5220\u9664\u4F1A\u8BDD\u6570\u636E\u5931\u8D25\uFF1A",i instanceof Error?i.message:String(i))}else console.log(" \u2139 \u672A\u627E\u5230\u4F1A\u8BDD\u6570\u636E")}else console.log(""),console.log("\u6B65\u9AA4 2\uFF1A\u8DF3\u8FC7\u4F1A\u8BDD\u6570\u636E\uFF08\u4F7F\u7528 --purge \u5220\u9664\uFF09"),console.log(` \u4F1A\u8BDD\u6570\u636E\u4F4D\u7F6E: ${ms(ds(),".lunkr-mcp")}`);console.log(""),console.log("\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501"),console.log("Lunkr \u6269\u5C55\u5DF2\u5378\u8F7D\u3002"),console.log(""),console.log("\u5DF2\u5220\u9664\u5185\u5BB9\uFF1A"),console.log(" \u2022 OpenClaw \u4E2D\u7684 Lunkr \u9891\u9053\u914D\u7F6E"),n&&console.log(" \u2022 Lunkr \u4F1A\u8BDD\u51ED\u8BC1"),console.log(""),console.log("\u91CD\u65B0\u5B89\u88C5\uFF1A"),console.log(" 1. \u8FD0\u884C: openclaw lunkr login"),console.log(" 2. \u5728 ~/.openclaw/config.json \u4E2D\u542F\u7528\u9891\u9053"),console.log(" 3. \u8FD0\u884C: openclaw lunkr create <\u540D\u79F0>"),console.log("\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501")}async function Dn(s,e){let n=e.name||"lunkr",i=await s.runtime.config.loadConfig(),a=i.tools||{},t=a.alsoAllow||[];if(t.includes(n)){console.log(`\u5DE5\u5177 '${n}' \u5DF2\u5B89\u88C5\u3002`);return}let r={...i,tools:{...a,alsoAllow:[...t,n]}};await s.runtime.config.writeConfigFile(r),console.log(`\u5DE5\u5177 '${n}' \u5B89\u88C5\u6210\u529F\u3002`),console.log("\u91CD\u542F\u6D3B\u52A8\u4F1A\u8BDD\u4EE5\u5E94\u7528\u66F4\u6539\u3002")}async function Gn(s,e){let n=e.name||"lunkr",i=await s.runtime.config.loadConfig(),a=i.tools||{},t=a.alsoAllow||[];if(!t.includes(n)){console.log(`\u5DE5\u5177 '${n}' \u672A\u5B89\u88C5\u3002`);return}let r={...i,tools:{...a,alsoAllow:t.filter(c=>c!==n)}};await s.runtime.config.writeConfigFile(r),console.log(`\u5DE5\u5177 '${n}' \u5378\u8F7D\u6210\u529F\u3002`),console.log("\u91CD\u542F\u6D3B\u52A8\u4F1A\u8BDD\u4EE5\u5E94\u7528\u66F4\u6539\u3002")}import fs from"node:path";async function En(s,e){let n=e.name||"lunkr",i=await s.runtime.config.loadConfig(),a=i.plugins||{},t=a.entries||{},r=t[n]||{},c=i.skills||{},l=c.entries||{},u=l[n]||{},d=c.load||{},m=d.extraDirs||[],f=fs.join(fs.dirname(s.source),"skills"),x=r.enabled===!0&&u.enabled===!0,g=m.includes(f);if(x&&g){console.log(`\u6280\u80FD '${n}' \u5DF2\u5B89\u88C5\u3002`);return}let b=g?m:[...m.filter(C=>!C.includes(`/${n}/skills`)),f],v={...i,plugins:{...a,entries:{...t,[n]:{...r,enabled:!0}}},skills:{...c,load:{...d,extraDirs:b},entries:{...l,[n]:{...u,enabled:!0}}}};await s.runtime.config.writeConfigFile(v),console.log(`\u6280\u80FD '${n}' \u5B89\u88C5\u6210\u529F\u3002`),console.log(`\u6280\u80FD\u76EE\u5F55: ${f}`),console.log("\u91CD\u542F\u6D3B\u52A8\u4F1A\u8BDD\u4EE5\u5E94\u7528\u66F4\u6539\u3002")}import gs from"node:path";async function Nn(s,e){let n=e.name||"lunkr",i=await s.runtime.config.loadConfig(),a=i.skills||{},t=a.entries||{},r=t[n]||{};if(!r.enabled){console.log(`\u6280\u80FD '${n}' \u672A\u5B89\u88C5\u3002`);return}let c=a.load||{},l=c.extraDirs||[],u=gs.join(gs.dirname(s.source),"skills"),d=l.filter(f=>f!==u),m={...i,skills:{...a,load:{...c,extraDirs:d.length>0?d:void 0},entries:{...t,[n]:{...r,enabled:!1}}}};d.length===0&&delete m.skills.load,await s.runtime.config.writeConfigFile(m),console.log(`\u6280\u80FD '${n}' \u5378\u8F7D\u6210\u529F\u3002`),console.log("\u91CD\u542F\u6D3B\u52A8\u4F1A\u8BDD\u4EE5\u5E94\u7528\u66F4\u6539\u3002")}import{Type as w}from"@sinclair/typebox";function xs(){return R()}function z(s){return{success:!0,data:s}}function O(s){return{success:!1,error:s}}async function se(){try{let s=U();return await s.checkSession()?{api:s}:{error:O("\u4F1A\u8BDD\u5DF2\u8FC7\u671F\uFF0C\u8BF7\u8FD0\u884C\uFF1Aopenclaw lunkr login")}}catch(s){return{error:O(s instanceof Error?s.message:String(s))}}}async function Mn(s){let e=await se();if("error"in e)return e.error;let{api:n}=e;try{let o=await n.resolveRecipient(s.to),i=await n.sendMessage(o,s.content);return z({to:i.to,type:i.type,mid:i.mid})}catch(o){return O(o instanceof Error?o.message:String(o))}}async function zn(s){let e=await se();if("error"in e)return e.error;let{api:n}=e;try{let o=await n.searchGroups(s.keyword,s.limit||10);return z({groups:o.map(i=>({uid:i.uid,name:i.name||i.trueName,email:i.email,description:i.description}))})}catch(o){return O(o instanceof Error?o.message:String(o))}}async function Bn(s){let e=await se();if("error"in e)return e.error;let{api:n}=e;try{let o=await n.searchContacts(s.keyword,s.limit||10);return z({contacts:o.map(i=>({uid:i.uid,name:i.trueName||i.name,email:i.email}))})}catch(o){return O(o instanceof Error?o.message:String(o))}}async function vs(s){let e=await se();return"error"in e?e.error:O("getGroupInfo not yet implemented")}async function hs(s){let e=await se();return"error"in e?e.error:O("getUserInfo not yet implemented")}async function bs(s){let e=await se();if("error"in e)return e.error;let{api:n}=e;try{let o=await n.downloadFile(s.file_id,s.uid,s.save_path);return z({file_name:o.fileName,file_size:o.fileSize,saved_to:o.filePath})}catch(o){return O(o instanceof Error?o.message:String(o))}}async function ks(s){let e=await se();return"error"in e?e.error:O("getMessage not yet implemented")}async function Kn(s){let e=await se();if("error"in e)return e.error;let{api:n}=e;try{let o=await n.resolveRecipient(s.to),i=await n.listMessages(o,{limit:s.limit||20});return z({messages:i.map(a=>({mid:a.mid,time:a.time,subject:a.subject,sender_uid:a.senderUid,sender_name:a.senderName,sender_email:a.senderEmail,attachments:a.attachments}))})}catch(o){return O(o instanceof Error?o.message:String(o))}}function Q(s){return{content:[{type:"text",text:JSON.stringify(s,null,2)}],details:s}}var Bi=w.Object({to:w.String({description:"Recipient: user ID, group ID, email, or group email (t..xxx@coremail.cn)"}),content:w.String({description:"Message content to send"}),type:w.Optional(w.Union([w.Literal("text"),w.Literal("markdown")],{description:"Message type (default: text)"}))}),Ki=w.Object({keyword:w.String({description:"Search keyword for group name"}),limit:w.Optional(w.Number({description:"Max results (default: 10)"}))}),Vi=w.Object({keyword:w.String({description:"Search keyword for contact name or email"}),limit:w.Optional(w.Number({description:"Max results (default: 10)"}))}),Ji=w.Object({group_id:w.String({description:"Group ID (e.g., #26783249#T)"})}),Wi=w.Object({user_id:w.String({description:"User ID (e.g., #835#U) or email"})}),Hi=w.Object({file_id:w.String({description:"File ID from message"}),uid:w.String({description:"File storage UID (from attachment, e.g., #833#F)"}),save_path:w.Optional(w.String({description:"Path to save file (default: temp directory)"}))}),Qi=w.Object({message_id:w.String({description:"Message ID to retrieve"})}),Xi=w.Object({to:w.String({description:"Recipient: user ID, group ID, or email to list messages from"}),limit:w.Optional(w.Number({description:"Max messages to retrieve (default: 20)"}))}),Yi=w.Object({command:w.String({description:"Raw command arguments"}),commandName:w.String({description:"Slash command name (e.g., /lunkr-send)"}),skillName:w.String({description:"Skill name"})});function Zi(s){let{commandName:e,command:n}=s,o=n.trim().split(/\s+/),i=o[0]?.toLowerCase();switch(i){case"send":case"s":{if(o.length<3)return O("Usage: /lunkr send <to> <message>");let a=o[1],t=o.slice(2).join(" ");return z({action:"send",to:a,content:t})}case"search-groups":case"sg":{if(o.length<2)return O("Usage: /lunkr search-groups <keyword> [limit]");let a=o[1],t=o[2]?parseInt(o[2],10):10;return z({action:"searchGroups",keyword:a,limit:t})}case"search-contacts":case"sc":{if(o.length<2)return O("Usage: /lunkr search-contacts <keyword> [limit]");let a=o[1],t=o[2]?parseInt(o[2],10):10;return z({action:"searchContacts",keyword:a,limit:t})}case"list-messages":case"lm":case"msgs":{if(o.length<2)return O("Usage: /lunkr list-messages <to> [limit]");let a=o[1],t=o[2]?parseInt(o[2],10):20;return z({action:"listMessages",to:a,limit:t})}case"help":case void 0:return z({help:!0,usage:["/lunkr send <to> <message> - Send message","/lunkr search-groups <keyword> [limit] - Search groups","/lunkr search-contacts <keyword> [limit] - Search contacts","/lunkr list-messages <to> [limit] - List messages from chat"]});default:return O(`Unknown subcommand: ${i}. Use '/lunkr help' for usage.`)}}async function ea(s){if(!s.success||!s.data)return s;let e=s.data;switch(e.action){case"send":return Mn({to:e.to,content:e.content});case"searchGroups":return zn({keyword:e.keyword,limit:e.limit});case"searchContacts":return Bn({keyword:e.keyword,limit:e.limit});case"listMessages":return Kn({to:e.to,limit:e.limit});default:return O(`Unknown action: ${e.action}`)}}function ys(s){let e=xs();if(!e?.accounts?.length){s.logger?.info?.("lunkr: No accounts in config file, skipping tool registration");return}if(!e.accounts.some(o=>o.session)){s.logger?.info?.("lunkr: No accounts with valid session found, skipping tool registration");return}s.logger?.info?.(`lunkr: Found ${e.accounts.length} account(s), registering tools`),s.registerTool({name:"lunkr_send_message",label:"Send Lunkr Message",description:'Send a message to a Lunkr user or group. IMPORTANT: This tool automatically resolves names to UIDs - you can pass user name, group name, email, user ID (#xxx#U), or group ID (#xxx#T). Always use this tool for sending Lunkr messages, NOT the generic "message" tool.',parameters:Bi,async execute(o,i){let a=await Mn(i);return Q(a)}},{name:"lunkr_send_message"}),s.registerTool({name:"lunkr_search_groups",label:"Search Lunkr Groups",description:"Search for Lunkr discussion groups by keyword.",parameters:Ki,async execute(o,i){let a=await zn(i);return Q(a)}},{name:"lunkr_search_groups"}),s.registerTool({name:"lunkr_search_contacts",label:"Search Lunkr Contacts",description:"Search for Lunkr contacts by name or email.",parameters:Vi,async execute(o,i){let a=await Bn(i);return Q(a)}},{name:"lunkr_search_contacts"}),s.registerTool({name:"lunkr_get_group_info",label:"Get Lunkr Group Info",description:"Get detailed information about a Lunkr discussion group.",parameters:Ji,async execute(o,i){let a=await vs(i);return Q(a)}},{name:"lunkr_get_group_info"}),s.registerTool({name:"lunkr_get_user_info",label:"Get Lunkr User Info",description:"Get detailed information about a Lunkr user.",parameters:Wi,async execute(o,i){let a=await hs(i);return Q(a)}},{name:"lunkr_get_user_info"}),s.registerTool({name:"lunkr_download_file",label:"Download Lunkr File",description:"Download a file from a Lunkr message to local disk.",parameters:Hi,async execute(o,i){let a=await bs(i);return Q(a)}},{name:"lunkr_download_file"}),s.registerTool({name:"lunkr_get_message",label:"Get Lunkr Message",description:"Get detailed information about a specific message.",parameters:Qi,async execute(o,i){let a=await ks(i);return Q(a)}},{name:"lunkr_get_message"}),s.registerTool({name:"lunkr_list_messages",label:"List Lunkr Messages",description:"List messages from a Lunkr chat (user or group). Use this to retrieve chat history. IMPORTANT: This tool automatically resolves names to UIDs - you can pass user name, group name, email, user ID (#xxx#U), or group ID (#xxx#T).",parameters:Xi,async execute(o,i){let a=await Kn(i);return Q(a)}},{name:"lunkr_list_messages"}),s.registerTool({name:"lunkr_command",label:"Lunkr Command",description:"Handle slash commands for Lunkr operations. Dispatched from skill.",parameters:Yi,async execute(o,i){let a=Zi(i),t=await ea(a);return Q(t)}},{name:"lunkr_command"}),s.logger?.info?.("lunkr: Registered 9 Lunkr tools (8 API tools + 1 command dispatcher)")}function Ll(s){let e={channel:{lunkr:{resolveAccount:async o=>{let i=await s.runtime.config.loadConfig();return D(i,o)},ensureAuthenticated:async o=>{if(!o.sid||!o.cookie)throw new Error("Lunkr \u8D26\u53F7\u672A\u8BA4\u8BC1\uFF0C\u8BF7\u8FD0\u884C\uFF1Aopenclaw lunkr login");let i=new j(o.lunkrConfig.baseUrl,{apiPath:o.lunkrConfig.apiPath}),a={"Cim.sid":o.sid};for(let r of o.cookie.split(";")){let c=r.trim();if(c.includes("=")){let[l,u]=c.split("=",2);a[l.trim()]=u.trim()}}if(i.setCookies(a),!await i.checkSessionValid(o.sid))throw new Error("Lunkr \u4F1A\u8BDD\u5DF2\u8FC7\u671F\uFF0C\u8BF7\u91CD\u65B0\u8BA4\u8BC1\u3002")},sendMessage:async o=>{let i=await e.channel.lunkr.resolveAccount(o.accountId);if(!i)throw new Error(`\u672A\u627E\u5230 Lunkr \u8D26\u53F7\uFF1A${o.accountId}`);await e.channel.lunkr.ensureAuthenticated(i);let a=new j(i.lunkrConfig.baseUrl,{apiPath:i.lunkrConfig.apiPath}),t={"Cim.sid":i.sid};for(let d of i.cookie.split(";")){let m=d.trim();if(m.includes("=")){let[f,x]=m.split("=",2);t[f.trim()]=x.trim()}}a.setCookies(t);let r=o.chatType==="p2p"?"cim.p2p:send":"cim.discussion:send",c=o.chatType==="p2p"?{to:o.chatId}:{gid:o.chatId},l={content:o.content,type:"text"};o.replyTo&&(l.replyTo=o.replyTo);let u=await a.postJson({func:r,sid:i.sid,query:c,payload:l});if(u.code!=="S_OK")throw new Error(`\u53D1\u9001\u6D88\u606F\u5931\u8D25\uFF1A${u.code}`)},probeAccount:async(o,i)=>{let a=await e.channel.lunkr.resolveAccount(o);if(!a)return{valid:!1,error:"\u672A\u627E\u5230\u8D26\u53F7"};try{let t=new j(a.lunkrConfig.baseUrl,{apiPath:a.lunkrConfig.apiPath,timeout:i?i/1e3:5}),r={"Cim.sid":a.sid};for(let l of a.cookie.split(";")){let u=l.trim();if(u.includes("=")){let[d,m]=u.split("=",2);r[d.trim()]=m.trim()}}t.setCookies(r);let c=await t.checkSessionValid(a.sid);return{valid:c,session:c?a.lunkrConfig:void 0}}catch(t){return{valid:!1,error:t instanceof Error?t.message:String(t)}}}}},config:{readConfigFile:async()=>s.runtime.config.loadConfig(),writeConfigFile:async o=>s.runtime.config.writeConfigFile(o)},logging:{shouldLogVerbose:()=>process.env.LUNKR_VERBOSE==="1"}};Eo(e),s.registerChannel(vn),ys(s);let n=async(o,i=!1)=>{try{await o()}catch(a){i||process.env.LUNKR_VERBOSE==="1"?console.error(a):console.error(a instanceof Error?a.message:String(a)),process.exitCode=1}};s.registerCli(({program:o})=>{let i=o.command("lunkr").description("Lunkr channel commands");i.command("login").description("Login to Lunkr using QR code (persistent session)").option("-v, --verbose","Verbose output").option("-d, --debug","Debug output (show network requests)").option("-f, --force","Force re-login even if session is valid").action(async a=>{await n(async()=>{await yn(s,{verbose:a.verbose,debug:a.debug,force:a.force})},a.verbose||a.debug)}),i.command("login-bypwd").description("Login to Lunkr using email/password").option("-e, --email <email>","Email address").option("-p, --password <password>","Password (or use LUNKR_PASSWORD env var)").option("-t, --temp","Temporary login (do not save api_token)").option("-v, --verbose","Verbose output").option("-d, --debug","Debug output (show network requests)").action(async a=>{await n(async()=>{await An(s,{email:a.email,password:a.password,temp:a.temp,verbose:a.verbose,debug:a.debug})},a.verbose||a.debug)}),i.command("logout").description("Logout from Lunkr server").option("-e, --email <email>","Specific account to logout").option("-a, --all","Remove all stored session data").action(async a=>{await n(async()=>{await jn(s,{email:a.email,all:a.all})})}),i.command("bot-create [name]").description("Create a new Bot discussion group").option("-a, --agent-id <agentId>","Agent ID to associate with this discussion").option("-f, --force","Force create even if discussion exists").option("--no-welcome","Skip sending welcome message").option("-v, --verbose","Verbose output").action(async(a,t)=>{if(!a){console.error("\u9519\u8BEF\uFF1A\u9700\u8981 name \u53C2\u6570"),process.exitCode=1;return}await n(async()=>{await Me(s,{name:a,agentId:t.agentId,force:t.force,welcome:t.welcome})},t.verbose)}),i.command("bot-list").description("List all configured bot discussions").option("-j, --json","Output as JSON").action(async a=>{await n(async()=>{await ze(s,{json:a.json})})}),i.command("bot-delete [name]").description("Delete a Bot discussion from configuration").option("-g, --gid <gid>","GID of the bot discussion to remove").option("-v, --verbose","Verbose output").action(async(a,t)=>{await n(async()=>{await Be(s,{name:a||t.name,gid:t.gid})},t.verbose)}),i.command("uninstall-extension").description("Uninstall the entire Lunkr extension from OpenClaw").option("-p, --purge","Also remove Lunkr session credentials").option("-v, --verbose","Verbose output").action(async a=>{await n(async()=>{await Tn(s,{purge:a.purge})},a.verbose)}),i.command("tool-install [name]").description("Install a tool (add to tools.alsoAllow)").action(async a=>{await n(async()=>{await Dn(s,{name:a||void 0})})}),i.command("tool-uninstall [name]").description("Uninstall a tool (remove from tools.alsoAllow)").action(async a=>{await n(async()=>{await Gn(s,{name:a||void 0})})}),i.command("skill-install [name]").description("Install a skill (enable in skills.entries)").action(async a=>{await n(async()=>{await En(s,{name:a||void 0})})}),i.command("skill-uninstall [name]").description("Uninstall a skill (disable in skills.entries)").action(async a=>{await n(async()=>{await Nn(s,{name:a||void 0})})}),i.command("status").description("Show login status").option("-v, --verbose","Show detailed info").action(async a=>{await n(async()=>{await Rn(s,{verbose:a.verbose})})}),i.command("search-group").description("Search for discussion groups").requiredOption("-k, --keyword <keyword>","Search keyword").option("-l, --limit <limit>","Maximum results",parseInt).action(async a=>{await n(async()=>{await Un(s,{keyword:a.keyword,limit:a.limit})})}),i.command("search-contact").description("Search for contacts").requiredOption("-k, --keyword <keyword>","Search keyword").option("-l, --limit <limit>","Maximum results",parseInt).action(async a=>{await n(async()=>{await _n(s,{keyword:a.keyword,limit:a.limit})})}),i.command("list-msg").description("List messages from a chat").requiredOption("-t, --to <to>","Recipient (user/group UID, email, or name)").option("-l, --limit <limit>","Maximum messages",parseInt).option("-s, --sender <sender>","Filter by sender UID (e.g., #835#U)").action(async a=>{await n(async()=>{await In(s,{to:a.to,limit:a.limit,sender:a.sender})})}),i.command("send").description("Send a message").requiredOption("-t, --to <to>","Recipient (user/group UID, email, or name)").option("-m, --message <message>","Message content").action(async a=>{await n(async()=>{await On(s,{to:a.to,message:a.message})})}),i.command("send-file").description("Send file(s) to a user or group").requiredOption("-t, --to <to>","Recipient (user/group UID, email, or name)").requiredOption("-f, --file <file...>","File path(s) to send").option("-m, --message <message>","Optional message content").action(async a=>{await n(async()=>{await qn(s,{to:a.to,file:a.file,message:a.message})})}),i.command("download").description("Download a file from a message").requiredOption("-f, --file-id <fileId>","File ID to download").requiredOption("-u, --uid <uid>","Chat UID (user or group)").option("-o, --output <output>","Save path").action(async a=>{await n(async()=>{await Fn(s,{"file-id":a.fileId,uid:a.uid,output:a.output})})}),i.command("listen").description("Listen for real-time messages").option("-r, --raw","Show raw message data").action(async a=>{await n(async()=>{await $n(s,{raw:a.raw})})})},{commands:["lunkr"]})}export{Be as botDeleteCommand,us as botDeleteCommandMeta,ze as botListCommand,ps as botListCommandMeta,vn as channelPlugin,Me as createCommand,ls as createCommandMeta,Ll as default};
|
|
26
|
+
/*! Bundled license information:
|
|
27
|
+
|
|
28
|
+
mime-db/index.js:
|
|
29
|
+
(*!
|
|
30
|
+
* mime-db
|
|
31
|
+
* Copyright(c) 2014 Jonathan Ong
|
|
32
|
+
* Copyright(c) 2015-2022 Douglas Christopher Wilson
|
|
33
|
+
* MIT Licensed
|
|
34
|
+
*)
|
|
35
|
+
|
|
36
|
+
mime-types/index.js:
|
|
37
|
+
(*!
|
|
38
|
+
* mime-types
|
|
39
|
+
* Copyright(c) 2014 Jonathan Ong
|
|
40
|
+
* Copyright(c) 2015 Douglas Christopher Wilson
|
|
41
|
+
* MIT Licensed
|
|
42
|
+
*)
|
|
43
|
+
*/
|