billion-context 0.1.207 → 0.1.208
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/dist/agent/dsh-native.js +1 -1
- package/dist/agent/omp-native.js +1 -1
- package/dist/agent/omp.js +1 -1
- package/dist/agent/opencode-native.js +1 -1
- package/dist/agent/opencode.js +1 -1
- package/dist/agent/pi-native.js +2 -2
- package/dist/agent/pi.js +1 -1
- package/dist/build-info.json +1 -1
- package/dist/claude-mcp-entry.js +1 -1
- package/dist/claude-native-bootstrap.js +1 -1
- package/dist/index.js +2 -2
- package/dist/kimi/bootstrap-hook.js +1 -1
- package/dist/kimi/native-mcp.js +1 -1
- package/dist/zcode/bootstrap-hook.js +1 -1
- package/dist/zcode/mcp-entry.js +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -355,7 +355,7 @@ ${pendingInterceptorsFormatter.format(pending)}`.trim())}};module.exports=MockAg
|
|
|
355
355
|
)
|
|
356
356
|
`)}close(){this.#db.close()}get(key2){assertCacheKey(key2);const value=this.#findValue(key2);return value?{body:value.body?Buffer.from(value.body.buffer,value.body.byteOffset,value.body.byteLength):void 0,statusCode:value.statusCode,statusMessage:value.statusMessage,headers:value.headers?JSON.parse(value.headers):void 0,etag:value.etag?value.etag:void 0,vary:value.vary?JSON.parse(value.vary):void 0,cacheControlDirectives:value.cacheControlDirectives?JSON.parse(value.cacheControlDirectives):void 0,cachedAt:value.cachedAt,staleAt:value.staleAt,deleteAt:value.deleteAt}:void 0}set(key2,value){assertCacheKey(key2);const url=this.#makeValueUrl(key2);const body=Array.isArray(value.body)?Buffer.concat(value.body):value.body;const size=body?.byteLength;if(size&&size>this.#maxEntrySize){return}const existingValue=this.#findValue(key2,true);if(existingValue){this.#updateValueQuery.run(body,value.deleteAt,value.statusCode,value.statusMessage,value.headers?JSON.stringify(value.headers):null,value.etag?value.etag:null,value.cacheControlDirectives?JSON.stringify(value.cacheControlDirectives):null,value.cachedAt,value.staleAt,existingValue.id)}else{this.#insertValueQuery.run(url,key2.method,body,value.deleteAt,value.statusCode,value.statusMessage,value.headers?JSON.stringify(value.headers):null,value.etag?value.etag:null,value.cacheControlDirectives?JSON.stringify(value.cacheControlDirectives):null,value.vary?JSON.stringify(value.vary):null,value.cachedAt,value.staleAt);this.#prune()}}createWriteStream(key2,value){assertCacheKey(key2);assertCacheValue(value);let size=0;const body=[];const store2=this;return new Writable({decodeStrings:true,write(chunk,encoding,callback){size+=chunk.byteLength;if(size<store2.#maxEntrySize){body.push(chunk)}else{this.destroy()}callback()},final(callback){store2.set(key2,{...value,body});callback()}})}delete(key2){if(typeof key2!=="object"){throw new TypeError(`expected key to be object, got ${typeof key2}`)}this.#deleteByUrlQuery.run(this.#makeValueUrl(key2))}#prune(){if(Number.isFinite(this.#maxCount)&&this.size<=this.#maxCount){return 0}{const removed=this.#deleteExpiredValuesQuery.run(Date.now()).changes;if(removed){return removed}}{const removed=this.#deleteOldValuesQuery?.run(Math.max(Math.floor(this.#maxCount*.1),1)).changes;if(removed){return removed}}return 0}get size(){const{total}=this.#countEntriesQuery.get();return total}#makeValueUrl(key2){return`${key2.origin}/${key2.path}`}#findValue(key2,canBeExpired=false){const url=this.#makeValueUrl(key2);const{headers,method}=key2;const values=this.#getValuesQuery.all(url,method);if(values.length===0){return void 0}const now=Date.now();for(const value of values){if(now>=value.deleteAt&&!canBeExpired){continue}let matches=true;if(value.vary){const vary=JSON.parse(value.vary);for(const header in vary){if(!headerValueEquals(headers[header],vary[header])){matches=false;break}}}if(matches){return value}}return void 0}};function headerValueEquals(lhs,rhs){if(lhs==null&&rhs==null){return true}if(lhs==null&&rhs!=null||lhs!=null&&rhs==null){return false}if(Array.isArray(lhs)&&Array.isArray(rhs)){if(lhs.length!==rhs.length){return false}for(let i=0;i<lhs.length;i++){if(lhs[i]!==rhs[i]){return false}}return true}return lhs===rhs}}});var require_headers=__commonJS({"node_modules/undici/lib/web/fetch/headers.js"(exports,module){"use strict";var{kConstruct}=require_symbols();var{kEnumerableProperty}=require_util();var{iteratorMixin,isValidHeaderName,isValidHeaderValue}=require_util2();var{webidl}=require_webidl();var assert=__require("assert");var util=__require("util");function isHTTPWhiteSpaceCharCode(code){return code===10||code===13||code===9||code===32}function headerValueNormalize(potentialValue){let i=0;let j2=potentialValue.length;while(j2>i&&isHTTPWhiteSpaceCharCode(potentialValue.charCodeAt(j2-1)))--j2;while(j2>i&&isHTTPWhiteSpaceCharCode(potentialValue.charCodeAt(i)))++i;return i===0&&j2===potentialValue.length?potentialValue:potentialValue.substring(i,j2)}function fill2(headers,object3){if(Array.isArray(object3)){for(let i=0;i<object3.length;++i){const header=object3[i];if(header.length!==2){throw webidl.errors.exception({header:"Headers constructor",message:`expected name/value pair to be length 2, found ${header.length}.`})}appendHeader(headers,header[0],header[1])}}else if(typeof object3==="object"&&object3!==null){const keys=Object.keys(object3);for(let i=0;i<keys.length;++i){appendHeader(headers,keys[i],object3[keys[i]])}}else{throw webidl.errors.conversionFailed({prefix:"Headers constructor",argument:"Argument 1",types:["sequence<sequence<ByteString>>","record<ByteString, ByteString>"]})}}function appendHeader(headers,name,value){value=headerValueNormalize(value);if(!isValidHeaderName(name)){throw webidl.errors.invalidArgument({prefix:"Headers.append",value:name,type:"header name"})}else if(!isValidHeaderValue(value)){throw webidl.errors.invalidArgument({prefix:"Headers.append",value,type:"header value"})}if(getHeadersGuard(headers)==="immutable"){throw new TypeError("immutable")}return getHeadersList(headers).append(name,value,false)}function headersListSortAndCombine(target){const headersList=getHeadersList(target);if(!headersList){return[]}if(headersList.sortedMap){return headersList.sortedMap}const headers=[];const names=headersList.toSortedArray();const cookies=headersList.cookies;if(cookies===null||cookies.length===1){return headersList.sortedMap=names}for(let i=0;i<names.length;++i){const{0:name,1:value}=names[i];if(name==="set-cookie"){for(let j2=0;j2<cookies.length;++j2){headers.push([name,cookies[j2]])}}else{headers.push([name,value])}}return headersList.sortedMap=headers}function compareHeaderName(a,b2){return a[0]<b2[0]?-1:1}var HeadersList=class _HeadersList{cookies=null;sortedMap;headersMap;constructor(init){if(init instanceof _HeadersList){this.headersMap=new Map(init.headersMap);this.sortedMap=init.sortedMap;this.cookies=init.cookies===null?null:[...init.cookies]}else{this.headersMap=new Map(init);this.sortedMap=null}}contains(name,isLowerCase){return this.headersMap.has(isLowerCase?name:name.toLowerCase())}clear(){this.headersMap.clear();this.sortedMap=null;this.cookies=null}append(name,value,isLowerCase){this.sortedMap=null;const lowercaseName=isLowerCase?name:name.toLowerCase();const exists=this.headersMap.get(lowercaseName);if(exists){const delimiter=lowercaseName==="cookie"?"; ":", ";this.headersMap.set(lowercaseName,{name:exists.name,value:`${exists.value}${delimiter}${value}`})}else{this.headersMap.set(lowercaseName,{name,value})}if(lowercaseName==="set-cookie"){(this.cookies??=[]).push(value)}}set(name,value,isLowerCase){this.sortedMap=null;const lowercaseName=isLowerCase?name:name.toLowerCase();if(lowercaseName==="set-cookie"){this.cookies=[value]}this.headersMap.set(lowercaseName,{name,value})}delete(name,isLowerCase){this.sortedMap=null;if(!isLowerCase)name=name.toLowerCase();if(name==="set-cookie"){this.cookies=null}this.headersMap.delete(name)}get(name,isLowerCase){return this.headersMap.get(isLowerCase?name:name.toLowerCase())?.value??null}*[Symbol.iterator](){for(const{0:name,1:{value}}of this.headersMap){yield[name,value]}}get entries(){const headers={};if(this.headersMap.size!==0){for(const{name,value}of this.headersMap.values()){headers[name]=value}}return headers}rawValues(){return this.headersMap.values()}get entriesList(){const headers=[];if(this.headersMap.size!==0){for(const{0:lowerName,1:{name,value}}of this.headersMap){if(lowerName==="set-cookie"){for(const cookie of this.cookies){headers.push([name,cookie])}}else{headers.push([name,value])}}}return headers}toSortedArray(){const size=this.headersMap.size;const array=new Array(size);if(size<=32){if(size===0){return array}const iterator=this.headersMap[Symbol.iterator]();const firstValue=iterator.next().value;array[0]=[firstValue[0],firstValue[1].value];assert(firstValue[1].value!==null);for(let i=1,j2=0,right=0,left=0,pivot=0,x,value;i<size;++i){value=iterator.next().value;x=array[i]=[value[0],value[1].value];assert(x[1]!==null);left=0;right=i;while(left<right){pivot=left+(right-left>>1);if(array[pivot][0]<=x[0]){left=pivot+1}else{right=pivot}}if(i!==pivot){j2=i;while(j2>left){array[j2]=array[--j2]}array[left]=x}}if(!iterator.next().done){throw new TypeError("Unreachable")}return array}else{let i=0;for(const{0:name,1:{value}}of this.headersMap){array[i++]=[name,value];assert(value!==null)}return array.sort(compareHeaderName)}}};var Headers2=class _Headers{#guard;#headersList;constructor(init=void 0){webidl.util.markAsUncloneable(this);if(init===kConstruct){return}this.#headersList=new HeadersList;this.#guard="none";if(init!==void 0){init=webidl.converters.HeadersInit(init,"Headers constructor","init");fill2(this,init)}}append(name,value){webidl.brandCheck(this,_Headers);webidl.argumentLengthCheck(arguments,2,"Headers.append");const prefix="Headers.append";name=webidl.converters.ByteString(name,prefix,"name");value=webidl.converters.ByteString(value,prefix,"value");return appendHeader(this,name,value)}delete(name){webidl.brandCheck(this,_Headers);webidl.argumentLengthCheck(arguments,1,"Headers.delete");const prefix="Headers.delete";name=webidl.converters.ByteString(name,prefix,"name");if(!isValidHeaderName(name)){throw webidl.errors.invalidArgument({prefix:"Headers.delete",value:name,type:"header name"})}if(this.#guard==="immutable"){throw new TypeError("immutable")}if(!this.#headersList.contains(name,false)){return}this.#headersList.delete(name,false)}get(name){webidl.brandCheck(this,_Headers);webidl.argumentLengthCheck(arguments,1,"Headers.get");const prefix="Headers.get";name=webidl.converters.ByteString(name,prefix,"name");if(!isValidHeaderName(name)){throw webidl.errors.invalidArgument({prefix,value:name,type:"header name"})}return this.#headersList.get(name,false)}has(name){webidl.brandCheck(this,_Headers);webidl.argumentLengthCheck(arguments,1,"Headers.has");const prefix="Headers.has";name=webidl.converters.ByteString(name,prefix,"name");if(!isValidHeaderName(name)){throw webidl.errors.invalidArgument({prefix,value:name,type:"header name"})}return this.#headersList.contains(name,false)}set(name,value){webidl.brandCheck(this,_Headers);webidl.argumentLengthCheck(arguments,2,"Headers.set");const prefix="Headers.set";name=webidl.converters.ByteString(name,prefix,"name");value=webidl.converters.ByteString(value,prefix,"value");value=headerValueNormalize(value);if(!isValidHeaderName(name)){throw webidl.errors.invalidArgument({prefix,value:name,type:"header name"})}else if(!isValidHeaderValue(value)){throw webidl.errors.invalidArgument({prefix,value,type:"header value"})}if(this.#guard==="immutable"){throw new TypeError("immutable")}this.#headersList.set(name,value,false)}getSetCookie(){webidl.brandCheck(this,_Headers);const list=this.#headersList.cookies;if(list){return[...list]}return[]}[util.inspect.custom](depth,options){options.depth??=depth;return`Headers ${util.formatWithOptions(options,this.#headersList.entries)}`}static getHeadersGuard(o){return o.#guard}static setHeadersGuard(o,guard){o.#guard=guard}static getHeadersList(o){return o.#headersList}static setHeadersList(target,list){target.#headersList=list}};var{getHeadersGuard,setHeadersGuard,getHeadersList,setHeadersList}=Headers2;Reflect.deleteProperty(Headers2,"getHeadersGuard");Reflect.deleteProperty(Headers2,"setHeadersGuard");Reflect.deleteProperty(Headers2,"getHeadersList");Reflect.deleteProperty(Headers2,"setHeadersList");iteratorMixin("Headers",Headers2,headersListSortAndCombine,0,1);Object.defineProperties(Headers2.prototype,{append:kEnumerableProperty,delete:kEnumerableProperty,get:kEnumerableProperty,has:kEnumerableProperty,set:kEnumerableProperty,getSetCookie:kEnumerableProperty,[Symbol.toStringTag]:{value:"Headers",configurable:true},[util.inspect.custom]:{enumerable:false}});webidl.converters.HeadersInit=function(V2,prefix,argument){if(webidl.util.Type(V2)===webidl.util.Types.OBJECT){const iterator=Reflect.get(V2,Symbol.iterator);if(!util.types.isProxy(V2)&&iterator===Headers2.prototype.entries){try{return getHeadersList(V2).entriesList}catch{}}if(typeof iterator==="function"){return webidl.converters["sequence<sequence<ByteString>>"](V2,prefix,argument,iterator.bind(V2))}return webidl.converters["record<ByteString, ByteString>"](V2,prefix,argument)}throw webidl.errors.conversionFailed({prefix:"Headers constructor",argument:"Argument 1",types:["sequence<sequence<ByteString>>","record<ByteString, ByteString>"]})};module.exports={fill:fill2,compareHeaderName,Headers:Headers2,HeadersList,getHeadersGuard,setHeadersGuard,setHeadersList,getHeadersList}}});var require_response=__commonJS({"node_modules/undici/lib/web/fetch/response.js"(exports,module){"use strict";var{Headers:Headers2,HeadersList,fill:fill2,getHeadersGuard,setHeadersGuard,setHeadersList}=require_headers();var{extractBody,cloneBody,mixinBody,streamRegistry,bodyUnusable}=require_body();var util=require_util();var nodeUtil=__require("util");var{kEnumerableProperty}=util;var{isValidReasonPhrase,isCancelled,isAborted,isErrorLike,environmentSettingsObject:relevantRealm}=require_util2();var{redirectStatusSet,nullBodyStatus}=require_constants3();var{webidl}=require_webidl();var{URLSerializer}=require_data_url();var{kConstruct}=require_symbols();var assert=__require("assert");var{isomorphicEncode,serializeJavascriptValueToJSONString}=require_infra();var textEncoder=new TextEncoder("utf-8");var Response2=class _Response{#headers;#state;static error(){const responseObject=fromInnerResponse(makeNetworkError(),"immutable");return responseObject}static json(data,init=void 0){webidl.argumentLengthCheck(arguments,1,"Response.json");if(init!==null){init=webidl.converters.ResponseInit(init)}const bytes=textEncoder.encode(serializeJavascriptValueToJSONString(data));const body=extractBody(bytes);const responseObject=fromInnerResponse(makeResponse({}),"response");initializeResponse(responseObject,init,{body:body[0],type:"application/json"});return responseObject}static redirect(url,status=302){webidl.argumentLengthCheck(arguments,1,"Response.redirect");url=webidl.converters.USVString(url);status=webidl.converters["unsigned short"](status);let parsedURL;try{parsedURL=new URL(url,relevantRealm.settingsObject.baseUrl)}catch(err2){throw new TypeError(`Failed to parse URL from ${url}`,{cause:err2})}if(!redirectStatusSet.has(status)){throw new RangeError(`Invalid status code ${status}`)}const responseObject=fromInnerResponse(makeResponse({}),"immutable");responseObject.#state.status=status;const value=isomorphicEncode(URLSerializer(parsedURL));responseObject.#state.headersList.append("location",value,true);return responseObject}constructor(body=null,init=void 0){webidl.util.markAsUncloneable(this);if(body===kConstruct){return}if(body!==null){body=webidl.converters.BodyInit(body,"Response","body")}init=webidl.converters.ResponseInit(init);this.#state=makeResponse({});this.#headers=new Headers2(kConstruct);setHeadersGuard(this.#headers,"response");setHeadersList(this.#headers,this.#state.headersList);let bodyWithType=null;if(body!=null){const[extractedBody,type]=extractBody(body);bodyWithType={body:extractedBody,type}}initializeResponse(this,init,bodyWithType)}get type(){webidl.brandCheck(this,_Response);return this.#state.type}get url(){webidl.brandCheck(this,_Response);const urlList=this.#state.urlList;const url=urlList[urlList.length-1]??null;if(url===null){return""}return URLSerializer(url,true)}get redirected(){webidl.brandCheck(this,_Response);return this.#state.urlList.length>1}get status(){webidl.brandCheck(this,_Response);return this.#state.status}get ok(){webidl.brandCheck(this,_Response);return this.#state.status>=200&&this.#state.status<=299}get statusText(){webidl.brandCheck(this,_Response);return this.#state.statusText}get headers(){webidl.brandCheck(this,_Response);return this.#headers}get body(){webidl.brandCheck(this,_Response);return this.#state.body?this.#state.body.stream:null}get bodyUsed(){webidl.brandCheck(this,_Response);return!!this.#state.body&&util.isDisturbed(this.#state.body.stream)}clone(){webidl.brandCheck(this,_Response);if(bodyUnusable(this.#state)){throw webidl.errors.exception({header:"Response.clone",message:"Body has already been consumed."})}const clonedResponse=cloneResponse(this.#state);if(this.#state.urlList.length!==0&&this.#state.body?.stream){streamRegistry.register(this,new WeakRef(this.#state.body.stream))}return fromInnerResponse(clonedResponse,getHeadersGuard(this.#headers))}[nodeUtil.inspect.custom](depth,options){if(options.depth===null){options.depth=2}options.colors??=true;const properties={status:this.status,statusText:this.statusText,headers:this.headers,body:this.body,bodyUsed:this.bodyUsed,ok:this.ok,redirected:this.redirected,type:this.type,url:this.url};return`Response ${nodeUtil.formatWithOptions(options,properties)}`}static getResponseHeaders(response){return response.#headers}static setResponseHeaders(response,newHeaders){response.#headers=newHeaders}static getResponseState(response){return response.#state}static setResponseState(response,newState){response.#state=newState}};var{getResponseHeaders,setResponseHeaders,getResponseState,setResponseState}=Response2;Reflect.deleteProperty(Response2,"getResponseHeaders");Reflect.deleteProperty(Response2,"setResponseHeaders");Reflect.deleteProperty(Response2,"getResponseState");Reflect.deleteProperty(Response2,"setResponseState");mixinBody(Response2,getResponseState);Object.defineProperties(Response2.prototype,{type:kEnumerableProperty,url:kEnumerableProperty,status:kEnumerableProperty,ok:kEnumerableProperty,redirected:kEnumerableProperty,statusText:kEnumerableProperty,headers:kEnumerableProperty,clone:kEnumerableProperty,body:kEnumerableProperty,bodyUsed:kEnumerableProperty,[Symbol.toStringTag]:{value:"Response",configurable:true}});Object.defineProperties(Response2,{json:kEnumerableProperty,redirect:kEnumerableProperty,error:kEnumerableProperty});function cloneResponse(response){if(response.internalResponse){return filterResponse(cloneResponse(response.internalResponse),response.type)}const newResponse=makeResponse({...response,body:null});if(response.body!=null){newResponse.body=cloneBody(response.body)}return newResponse}function makeResponse(init){return{aborted:false,rangeRequested:false,timingAllowPassed:false,requestIncludesCredentials:false,type:"default",status:200,timingInfo:null,cacheState:"",statusText:"",...init,headersList:init?.headersList?new HeadersList(init?.headersList):new HeadersList,urlList:init?.urlList?[...init.urlList]:[]}}function makeNetworkError(reason){const isError=isErrorLike(reason);return makeResponse({type:"error",status:0,error:isError?reason:new Error(reason?String(reason):reason),aborted:reason&&reason.name==="AbortError"})}function isNetworkError(response){return response.type==="error"&&response.status===0}function makeFilteredResponse(response,state5){state5={internalResponse:response,...state5};return new Proxy(response,{get(target,p2){return p2 in state5?state5[p2]:target[p2]},set(target,p2,value){assert(!(p2 in state5));target[p2]=value;return true}})}function filterResponse(response,type){if(type==="basic"){return makeFilteredResponse(response,{type:"basic",headersList:response.headersList})}else if(type==="cors"){return makeFilteredResponse(response,{type:"cors",headersList:response.headersList})}else if(type==="opaque"){return makeFilteredResponse(response,{type:"opaque",urlList:[],status:0,statusText:"",body:null})}else if(type==="opaqueredirect"){return makeFilteredResponse(response,{type:"opaqueredirect",status:0,statusText:"",headersList:[],body:null})}else{assert(false)}}function makeAppropriateNetworkError(fetchParams,err2=null){assert(isCancelled(fetchParams));return isAborted(fetchParams)?makeNetworkError(Object.assign(new DOMException("The operation was aborted.","AbortError"),{cause:err2})):makeNetworkError(Object.assign(new DOMException("Request was cancelled."),{cause:err2}))}function initializeResponse(response,init,body){if(init.status!==null&&(init.status<200||init.status>599)){throw new RangeError('init["status"] must be in the range of 200 to 599, inclusive.')}if("statusText"in init&&init.statusText!=null){if(!isValidReasonPhrase(String(init.statusText))){throw new TypeError("Invalid statusText")}}if("status"in init&&init.status!=null){getResponseState(response).status=init.status}if("statusText"in init&&init.statusText!=null){getResponseState(response).statusText=init.statusText}if("headers"in init&&init.headers!=null){fill2(getResponseHeaders(response),init.headers)}if(body){if(nullBodyStatus.includes(response.status)){throw webidl.errors.exception({header:"Response constructor",message:`Invalid response status code ${response.status}`})}getResponseState(response).body=body.body;if(body.type!=null&&!getResponseState(response).headersList.contains("content-type",true)){getResponseState(response).headersList.append("content-type",body.type,true)}}}function fromInnerResponse(innerResponse,guard){const response=new Response2(kConstruct);setResponseState(response,innerResponse);const headers=new Headers2(kConstruct);setResponseHeaders(response,headers);setHeadersList(headers,innerResponse.headersList);setHeadersGuard(headers,guard);if(innerResponse.urlList.length!==0&&innerResponse.body?.stream){streamRegistry.register(response,new WeakRef(innerResponse.body.stream))}return response}webidl.converters.XMLHttpRequestBodyInit=function(V2,prefix,name){if(typeof V2==="string"){return webidl.converters.USVString(V2,prefix,name)}if(webidl.is.Blob(V2)){return V2}if(webidl.is.BufferSource(V2)){return V2}if(webidl.is.FormData(V2)){return V2}if(webidl.is.URLSearchParams(V2)){return V2}return webidl.converters.DOMString(V2,prefix,name)};webidl.converters.BodyInit=function(V2,prefix,argument){if(webidl.is.ReadableStream(V2)){return V2}if(V2?.[Symbol.asyncIterator]){return V2}return webidl.converters.XMLHttpRequestBodyInit(V2,prefix,argument)};webidl.converters.ResponseInit=webidl.dictionaryConverter([{key:"status",converter:webidl.converters["unsigned short"],defaultValue:()=>200},{key:"statusText",converter:webidl.converters.ByteString,defaultValue:()=>""},{key:"headers",converter:webidl.converters.HeadersInit}]);webidl.is.Response=webidl.util.MakeTypeAssertion(Response2);module.exports={isNetworkError,makeNetworkError,makeResponse,makeAppropriateNetworkError,filterResponse,Response:Response2,cloneResponse,fromInnerResponse,getResponseState}}});var require_request2=__commonJS({"node_modules/undici/lib/web/fetch/request.js"(exports,module){"use strict";var{extractBody,mixinBody,cloneBody,bodyUnusable}=require_body();var{Headers:Headers2,fill:fillHeaders,HeadersList,setHeadersGuard,getHeadersGuard,setHeadersList,getHeadersList}=require_headers();var util=require_util();var nodeUtil=__require("util");var{isValidHTTPToken,sameOrigin,environmentSettingsObject}=require_util2();var{forbiddenMethodsSet,corsSafeListedMethodsSet,referrerPolicy,requestRedirect,requestMode,requestCredentials,requestCache,requestDuplex}=require_constants3();var{kEnumerableProperty,normalizedMethodRecordsBase,normalizedMethodRecords}=util;var{webidl}=require_webidl();var{URLSerializer}=require_data_url();var{kConstruct}=require_symbols();var assert=__require("assert");var{getMaxListeners,setMaxListeners,defaultMaxListeners}=__require("events");var kAbortController=Symbol("abortController");var requestFinalizer=new FinalizationRegistry(({signal,abort})=>{signal.removeEventListener("abort",abort)});var dependentControllerMap=new WeakMap;var abortSignalHasEventHandlerLeakWarning;try{abortSignalHasEventHandlerLeakWarning=getMaxListeners(new AbortController().signal)>0}catch{abortSignalHasEventHandlerLeakWarning=false}function buildAbort(acRef){return abort;function abort(){const ac=acRef.deref();if(ac!==void 0){requestFinalizer.unregister(abort);this.removeEventListener("abort",abort);ac.abort(this.reason);const controllerList=dependentControllerMap.get(ac.signal);if(controllerList!==void 0){if(controllerList.size!==0){for(const ref of controllerList){const ctrl=ref.deref();if(ctrl!==void 0){ctrl.abort(this.reason)}}controllerList.clear()}dependentControllerMap.delete(ac.signal)}}}}var patchMethodWarning=false;var Request=class _Request{#signal;#dispatcher;#headers;#state;constructor(input,init=void 0){webidl.util.markAsUncloneable(this);if(input===kConstruct){return}const prefix="Request constructor";webidl.argumentLengthCheck(arguments,1,prefix);input=webidl.converters.RequestInfo(input);init=webidl.converters.RequestInit(init);let request=null;let fallbackMode=null;const baseUrl=environmentSettingsObject.settingsObject.baseUrl;let signal=null;if(typeof input==="string"){this.#dispatcher=init.dispatcher;let parsedURL;try{parsedURL=new URL(input,baseUrl)}catch(err2){throw new TypeError("Failed to parse URL from "+input,{cause:err2})}if(parsedURL.username||parsedURL.password){throw new TypeError("Request cannot be constructed from a URL that includes credentials: "+input)}request=makeRequest({urlList:[parsedURL]});fallbackMode="cors"}else{assert(webidl.is.Request(input));request=input.#state;signal=input.#signal;this.#dispatcher=init.dispatcher||input.#dispatcher}const origin=environmentSettingsObject.settingsObject.origin;let window2="client";if(request.window?.constructor?.name==="EnvironmentSettingsObject"&&sameOrigin(request.window,origin)){window2=request.window}if(init.window!=null){throw new TypeError(`'window' option '${window2}' must be null`)}if("window"in init){window2="no-window"}request=makeRequest({method:request.method,headersList:request.headersList,unsafeRequest:request.unsafeRequest,client:environmentSettingsObject.settingsObject,window:window2,priority:request.priority,origin:request.origin,referrer:request.referrer,referrerPolicy:request.referrerPolicy,mode:request.mode,credentials:request.credentials,cache:request.cache,redirect:request.redirect,integrity:request.integrity,keepalive:request.keepalive,reloadNavigation:request.reloadNavigation,historyNavigation:request.historyNavigation,urlList:[...request.urlList]});const initHasKey=Object.keys(init).length!==0;if(initHasKey){if(request.mode==="navigate"){request.mode="same-origin"}request.reloadNavigation=false;request.historyNavigation=false;request.origin="client";request.referrer="client";request.referrerPolicy="";request.url=request.urlList[request.urlList.length-1];request.urlList=[request.url]}if(init.referrer!==void 0){const referrer=init.referrer;if(referrer===""){request.referrer="no-referrer"}else{let parsedReferrer;try{parsedReferrer=new URL(referrer,baseUrl)}catch(err2){throw new TypeError(`Referrer "${referrer}" is not a valid URL.`,{cause:err2})}if(parsedReferrer.protocol==="about:"&&parsedReferrer.hostname==="client"||origin&&!sameOrigin(parsedReferrer,environmentSettingsObject.settingsObject.baseUrl)){request.referrer="client"}else{request.referrer=parsedReferrer}}}if(init.referrerPolicy!==void 0){request.referrerPolicy=init.referrerPolicy}let mode;if(init.mode!==void 0){mode=init.mode}else{mode=fallbackMode}if(mode==="navigate"){throw webidl.errors.exception({header:"Request constructor",message:"invalid request mode navigate."})}if(mode!=null){request.mode=mode}if(init.credentials!==void 0){request.credentials=init.credentials}if(init.cache!==void 0){request.cache=init.cache}if(request.cache==="only-if-cached"&&request.mode!=="same-origin"){throw new TypeError("'only-if-cached' can be set only with 'same-origin' mode")}if(init.redirect!==void 0){request.redirect=init.redirect}if(init.integrity!=null){request.integrity=String(init.integrity)}if(init.keepalive!==void 0){request.keepalive=Boolean(init.keepalive)}if(init.method!==void 0){let method=init.method;const mayBeNormalized=normalizedMethodRecords[method];if(mayBeNormalized!==void 0){request.method=mayBeNormalized}else{if(!isValidHTTPToken(method)){throw new TypeError(`'${method}' is not a valid HTTP method.`)}const upperCase=method.toUpperCase();if(forbiddenMethodsSet.has(upperCase)){throw new TypeError(`'${method}' HTTP method is unsupported.`)}method=normalizedMethodRecordsBase[upperCase]??method;request.method=method}if(!patchMethodWarning&&request.method==="patch"){process.emitWarning("Using `patch` is highly likely to result in a `405 Method Not Allowed`. `PATCH` is much more likely to succeed.",{code:"UNDICI-FETCH-patch"});patchMethodWarning=true}}if(init.signal!==void 0){signal=init.signal}this.#state=request;const ac=new AbortController;this.#signal=ac.signal;if(signal!=null){if(signal.aborted){ac.abort(signal.reason)}else{this[kAbortController]=ac;const acRef=new WeakRef(ac);const abort=buildAbort(acRef);if(abortSignalHasEventHandlerLeakWarning&&getMaxListeners(signal)===defaultMaxListeners){setMaxListeners(1500,signal)}util.addAbortListener(signal,abort);requestFinalizer.register(ac,{signal,abort},abort)}}this.#headers=new Headers2(kConstruct);setHeadersList(this.#headers,request.headersList);setHeadersGuard(this.#headers,"request");if(mode==="no-cors"){if(!corsSafeListedMethodsSet.has(request.method)){throw new TypeError(`'${request.method} is unsupported in no-cors mode.`)}setHeadersGuard(this.#headers,"request-no-cors")}if(initHasKey){const headersList=getHeadersList(this.#headers);const headers=init.headers!==void 0?init.headers:new HeadersList(headersList);headersList.clear();if(headers instanceof HeadersList){for(const{name,value}of headers.rawValues()){headersList.append(name,value,false)}headersList.cookies=headers.cookies}else{fillHeaders(this.#headers,headers)}}const inputBody=webidl.is.Request(input)?input.#state.body:null;if((init.body!=null||inputBody!=null)&&(request.method==="GET"||request.method==="HEAD")){throw new TypeError("Request with GET/HEAD method cannot have body.")}let initBody=null;if(init.body!=null){const[extractedBody,contentType]=extractBody(init.body,request.keepalive);initBody=extractedBody;if(contentType&&!getHeadersList(this.#headers).contains("content-type",true)){this.#headers.append("content-type",contentType,true)}}const inputOrInitBody=initBody??inputBody;if(inputOrInitBody!=null&&inputOrInitBody.source==null){if(initBody!=null&&init.duplex==null){throw new TypeError("RequestInit: duplex option is required when sending a body.")}if(request.mode!=="same-origin"&&request.mode!=="cors"){throw new TypeError('If request is made from ReadableStream, mode should be "same-origin" or "cors"')}request.useCORSPreflightFlag=true}let finalBody=inputOrInitBody;if(initBody==null&&inputBody!=null){if(bodyUnusable(input.#state)){throw new TypeError("Cannot construct a Request with a Request object that has already been used.")}const identityTransform=new TransformStream;inputBody.stream.pipeThrough(identityTransform);finalBody={source:inputBody.source,length:inputBody.length,stream:identityTransform.readable}}this.#state.body=finalBody}get method(){webidl.brandCheck(this,_Request);return this.#state.method}get url(){webidl.brandCheck(this,_Request);return URLSerializer(this.#state.url)}get headers(){webidl.brandCheck(this,_Request);return this.#headers}get destination(){webidl.brandCheck(this,_Request);return this.#state.destination}get referrer(){webidl.brandCheck(this,_Request);if(this.#state.referrer==="no-referrer"){return""}if(this.#state.referrer==="client"){return"about:client"}return this.#state.referrer.toString()}get referrerPolicy(){webidl.brandCheck(this,_Request);return this.#state.referrerPolicy}get mode(){webidl.brandCheck(this,_Request);return this.#state.mode}get credentials(){webidl.brandCheck(this,_Request);return this.#state.credentials}get cache(){webidl.brandCheck(this,_Request);return this.#state.cache}get redirect(){webidl.brandCheck(this,_Request);return this.#state.redirect}get integrity(){webidl.brandCheck(this,_Request);return this.#state.integrity}get keepalive(){webidl.brandCheck(this,_Request);return this.#state.keepalive}get isReloadNavigation(){webidl.brandCheck(this,_Request);return this.#state.reloadNavigation}get isHistoryNavigation(){webidl.brandCheck(this,_Request);return this.#state.historyNavigation}get signal(){webidl.brandCheck(this,_Request);return this.#signal}get body(){webidl.brandCheck(this,_Request);return this.#state.body?this.#state.body.stream:null}get bodyUsed(){webidl.brandCheck(this,_Request);return!!this.#state.body&&util.isDisturbed(this.#state.body.stream)}get duplex(){webidl.brandCheck(this,_Request);return"half"}clone(){webidl.brandCheck(this,_Request);if(bodyUnusable(this.#state)){throw new TypeError("unusable")}const clonedRequest=cloneRequest(this.#state);const ac=new AbortController;if(this.signal.aborted){ac.abort(this.signal.reason)}else{let list=dependentControllerMap.get(this.signal);if(list===void 0){list=new Set;dependentControllerMap.set(this.signal,list)}const acRef=new WeakRef(ac);list.add(acRef);util.addAbortListener(ac.signal,buildAbort(acRef))}return fromInnerRequest(clonedRequest,this.#dispatcher,ac.signal,getHeadersGuard(this.#headers))}[nodeUtil.inspect.custom](depth,options){if(options.depth===null){options.depth=2}options.colors??=true;const properties={method:this.method,url:this.url,headers:this.headers,destination:this.destination,referrer:this.referrer,referrerPolicy:this.referrerPolicy,mode:this.mode,credentials:this.credentials,cache:this.cache,redirect:this.redirect,integrity:this.integrity,keepalive:this.keepalive,isReloadNavigation:this.isReloadNavigation,isHistoryNavigation:this.isHistoryNavigation,signal:this.signal};return`Request ${nodeUtil.formatWithOptions(options,properties)}`}static setRequestSignal(request,newSignal){request.#signal=newSignal;return request}static getRequestDispatcher(request){return request.#dispatcher}static setRequestDispatcher(request,newDispatcher){request.#dispatcher=newDispatcher}static setRequestHeaders(request,newHeaders){request.#headers=newHeaders}static getRequestState(request){return request.#state}static setRequestState(request,newState){request.#state=newState}};var{setRequestSignal,getRequestDispatcher,setRequestDispatcher,setRequestHeaders,getRequestState,setRequestState}=Request;Reflect.deleteProperty(Request,"setRequestSignal");Reflect.deleteProperty(Request,"getRequestDispatcher");Reflect.deleteProperty(Request,"setRequestDispatcher");Reflect.deleteProperty(Request,"setRequestHeaders");Reflect.deleteProperty(Request,"getRequestState");Reflect.deleteProperty(Request,"setRequestState");mixinBody(Request,getRequestState);function makeRequest(init){return{method:init.method??"GET",localURLsOnly:init.localURLsOnly??false,unsafeRequest:init.unsafeRequest??false,body:init.body??null,client:init.client??null,reservedClient:init.reservedClient??null,replacesClientId:init.replacesClientId??"",window:init.window??"client",keepalive:init.keepalive??false,serviceWorkers:init.serviceWorkers??"all",initiator:init.initiator??"",destination:init.destination??"",priority:init.priority??null,origin:init.origin??"client",policyContainer:init.policyContainer??"client",referrer:init.referrer??"client",referrerPolicy:init.referrerPolicy??"",mode:init.mode??"no-cors",useCORSPreflightFlag:init.useCORSPreflightFlag??false,credentials:init.credentials??"same-origin",useCredentials:init.useCredentials??false,cache:init.cache??"default",redirect:init.redirect??"follow",integrity:init.integrity??"",cryptoGraphicsNonceMetadata:init.cryptoGraphicsNonceMetadata??"",parserMetadata:init.parserMetadata??"",reloadNavigation:init.reloadNavigation??false,historyNavigation:init.historyNavigation??false,userActivation:init.userActivation??false,taintedOrigin:init.taintedOrigin??false,redirectCount:init.redirectCount??0,responseTainting:init.responseTainting??"basic",preventNoCacheCacheControlHeaderModification:init.preventNoCacheCacheControlHeaderModification??false,done:init.done??false,timingAllowFailed:init.timingAllowFailed??false,useURLCredentials:init.useURLCredentials??void 0,traversableForUserPrompts:init.traversableForUserPrompts??"client",urlList:init.urlList,url:init.urlList[0],headersList:init.headersList?new HeadersList(init.headersList):new HeadersList}}function cloneRequest(request){const newRequest=makeRequest({...request,body:null});if(request.body!=null){newRequest.body=cloneBody(request.body)}return newRequest}function fromInnerRequest(innerRequest,dispatcher,signal,guard){const request=new Request(kConstruct);setRequestState(request,innerRequest);setRequestDispatcher(request,dispatcher);setRequestSignal(request,signal);const headers=new Headers2(kConstruct);setRequestHeaders(request,headers);setHeadersList(headers,innerRequest.headersList);setHeadersGuard(headers,guard);return request}Object.defineProperties(Request.prototype,{method:kEnumerableProperty,url:kEnumerableProperty,headers:kEnumerableProperty,redirect:kEnumerableProperty,clone:kEnumerableProperty,signal:kEnumerableProperty,duplex:kEnumerableProperty,destination:kEnumerableProperty,body:kEnumerableProperty,bodyUsed:kEnumerableProperty,isHistoryNavigation:kEnumerableProperty,isReloadNavigation:kEnumerableProperty,keepalive:kEnumerableProperty,integrity:kEnumerableProperty,cache:kEnumerableProperty,credentials:kEnumerableProperty,attribute:kEnumerableProperty,referrerPolicy:kEnumerableProperty,referrer:kEnumerableProperty,mode:kEnumerableProperty,[Symbol.toStringTag]:{value:"Request",configurable:true}});webidl.is.Request=webidl.util.MakeTypeAssertion(Request);webidl.converters.RequestInfo=function(V2){if(typeof V2==="string"){return webidl.converters.USVString(V2)}if(webidl.is.Request(V2)){return V2}return webidl.converters.USVString(V2)};webidl.converters.RequestInit=webidl.dictionaryConverter([{key:"method",converter:webidl.converters.ByteString},{key:"headers",converter:webidl.converters.HeadersInit},{key:"body",converter:webidl.nullableConverter(webidl.converters.BodyInit)},{key:"referrer",converter:webidl.converters.USVString},{key:"referrerPolicy",converter:webidl.converters.DOMString,allowedValues:referrerPolicy},{key:"mode",converter:webidl.converters.DOMString,allowedValues:requestMode},{key:"credentials",converter:webidl.converters.DOMString,allowedValues:requestCredentials},{key:"cache",converter:webidl.converters.DOMString,allowedValues:requestCache},{key:"redirect",converter:webidl.converters.DOMString,allowedValues:requestRedirect},{key:"integrity",converter:webidl.converters.DOMString},{key:"keepalive",converter:webidl.converters.boolean},{key:"signal",converter:webidl.nullableConverter(signal=>webidl.converters.AbortSignal(signal,"RequestInit","signal"))},{key:"window",converter:webidl.converters.any},{key:"duplex",converter:webidl.converters.DOMString,allowedValues:requestDuplex},{key:"dispatcher",converter:webidl.converters.any},{key:"priority",converter:webidl.converters.DOMString,allowedValues:["high","low","auto"],defaultValue:()=>"auto"}]);module.exports={Request,makeRequest,fromInnerRequest,cloneRequest,getRequestDispatcher,getRequestState}}});var require_subresource_integrity=__commonJS({"node_modules/undici/lib/web/subresource-integrity/subresource-integrity.js"(exports,module){"use strict";var assert=__require("assert");var{runtimeFeatures}=require_runtime_features();var validSRIHashAlgorithmTokenSet=new Map([["sha256",0],["sha384",1],["sha512",2]]);var crypto5;if(runtimeFeatures.has("crypto")){crypto5=__require("crypto");const cryptoHashes=crypto5.getHashes();if(cryptoHashes.length===0){validSRIHashAlgorithmTokenSet.clear()}for(const algorithm of validSRIHashAlgorithmTokenSet.keys()){if(cryptoHashes.includes(algorithm)===false){validSRIHashAlgorithmTokenSet.delete(algorithm)}}}else{validSRIHashAlgorithmTokenSet.clear()}var getSRIHashAlgorithmIndex=Map.prototype.get.bind(validSRIHashAlgorithmTokenSet);var isValidSRIHashAlgorithm=Map.prototype.has.bind(validSRIHashAlgorithmTokenSet);var bytesMatch=runtimeFeatures.has("crypto")===false||validSRIHashAlgorithmTokenSet.size===0?()=>true:(bytes,metadataList)=>{const parsedMetadata=parseMetadata(metadataList);if(parsedMetadata.length===0){return true}const metadata=getStrongestMetadata(parsedMetadata);for(const item of metadata){const algorithm=item.alg;const expectedValue=item.val;const actualValue=applyAlgorithmToBytes(algorithm,bytes);if(caseSensitiveMatch(actualValue,expectedValue)){return true}}return false};function getStrongestMetadata(metadataList){const result=[];let strongest=null;for(const item of metadataList){assert(isValidSRIHashAlgorithm(item.alg),"Invalid SRI hash algorithm token");if(result.length===0){result.push(item);strongest=item;continue}const currentAlgorithm=strongest.alg;const currentAlgorithmIndex=getSRIHashAlgorithmIndex(currentAlgorithm);const newAlgorithm=item.alg;const newAlgorithmIndex=getSRIHashAlgorithmIndex(newAlgorithm);if(newAlgorithmIndex<currentAlgorithmIndex){continue}else if(newAlgorithmIndex>currentAlgorithmIndex){strongest=item;result[0]=item;result.length=1}else{result.push(item)}}return result}function parseMetadata(metadata){const result=[];for(const item of metadata.split(" ")){const expressionAndOptions=item.split("?",1);const algorithmExpression=expressionAndOptions[0];let base64Value="";const algorithmAndValue=[algorithmExpression.slice(0,6),algorithmExpression.slice(7)];const algorithm=algorithmAndValue[0];if(!isValidSRIHashAlgorithm(algorithm)){continue}if(algorithmAndValue[1]){base64Value=algorithmAndValue[1]}const metadata2={alg:algorithm,val:base64Value};result.push(metadata2)}return result}var applyAlgorithmToBytes=(algorithm,bytes)=>{return crypto5.hash(algorithm,bytes,"base64")};function caseSensitiveMatch(actualValue,expectedValue){let actualValueLength=actualValue.length;if(actualValueLength!==0&&actualValue[actualValueLength-1]==="="){actualValueLength-=1}if(actualValueLength!==0&&actualValue[actualValueLength-1]==="="){actualValueLength-=1}let expectedValueLength=expectedValue.length;if(expectedValueLength!==0&&expectedValue[expectedValueLength-1]==="="){expectedValueLength-=1}if(expectedValueLength!==0&&expectedValue[expectedValueLength-1]==="="){expectedValueLength-=1}if(actualValueLength!==expectedValueLength){return false}for(let i=0;i<actualValueLength;++i){if(actualValue[i]===expectedValue[i]||actualValue[i]==="+"&&expectedValue[i]==="-"||actualValue[i]==="/"&&expectedValue[i]==="_"){continue}return false}return true}module.exports={applyAlgorithmToBytes,bytesMatch,caseSensitiveMatch,isValidSRIHashAlgorithm,getStrongestMetadata,parseMetadata}}});var require_fetch=__commonJS({"node_modules/undici/lib/web/fetch/index.js"(exports,module){"use strict";var{makeNetworkError,makeAppropriateNetworkError,filterResponse,makeResponse,fromInnerResponse,getResponseState}=require_response();var{HeadersList}=require_headers();var{Request,cloneRequest,getRequestDispatcher,getRequestState}=require_request2();var zlib2=__require("zlib");var{makePolicyContainer,clonePolicyContainer,requestBadPort,TAOCheck,appendRequestOriginHeader,responseLocationURL,requestCurrentURL,setRequestReferrerPolicyOnRedirect,tryUpgradeRequestToAPotentiallyTrustworthyURL,createOpaqueTimingInfo,appendFetchMetadata,corsCheck,crossOriginResourcePolicyCheck,determineRequestsReferrer,coarsenedSharedCurrentTime,sameOrigin,isCancelled,isAborted,isErrorLike,fullyReadBody,readableStreamClose,urlIsLocal,urlIsHttpHttpsScheme,urlHasHttpsScheme,clampAndCoarsenConnectionTimingInfo,simpleRangeHeaderValue,buildContentRange,createInflate:createInflate2,extractMimeType,hasAuthenticationEntry,includesCredentials,isTraversableNavigable}=require_util2();var assert=__require("assert");var{safelyExtractBody,extractBody}=require_body();var{redirectStatusSet,nullBodyStatus,safeMethodsSet,requestBodyHeader,subresourceSet}=require_constants3();var EE=__require("events");var{Readable:Readable3,pipeline,finished,isErrored,isReadable}=__require("stream");var{addAbortListener,bufferToLowerCasedHeaderName}=require_util();var{dataURLProcessor,serializeAMimeType,minimizeSupportedMimeType}=require_data_url();var{getGlobalDispatcher}=require_global2();var{webidl}=require_webidl();var{STATUS_CODES}=__require("http");var{bytesMatch}=require_subresource_integrity();var{createDeferredPromise}=require_promise();var{isomorphicEncode}=require_infra();var{runtimeFeatures}=require_runtime_features();var hasZstd=runtimeFeatures.has("zstd");var GET_OR_HEAD=["GET","HEAD"];var defaultUserAgent=typeof __UNDICI_IS_NODE__!=="undefined"||typeof esbuildDetection!=="undefined"?"node":"undici";var resolveObjectURL;var Fetch=class extends EE{constructor(dispatcher){super();this.dispatcher=dispatcher;this.connection=null;this.dump=false;this.state="ongoing"}terminate(reason){if(this.state!=="ongoing"){return}this.state="terminated";this.connection?.destroy(reason);this.emit("terminated",reason)}abort(error){if(this.state!=="ongoing"){return}this.state="aborted";if(!error){error=new DOMException("The operation was aborted.","AbortError")}this.serializedAbortReason=error;this.connection?.destroy(error);this.emit("terminated",error)}};function handleFetchDone(response){finalizeAndReportTiming(response,"fetch")}function fetch2(input,init=void 0){webidl.argumentLengthCheck(arguments,1,"globalThis.fetch");let p2=createDeferredPromise();let requestObject;try{requestObject=new Request(input,init)}catch(e){p2.reject(e);return p2.promise}const request=getRequestState(requestObject);if(requestObject.signal.aborted){abortFetch(p2,request,null,requestObject.signal.reason,null);return p2.promise}const globalObject=request.client.globalObject;if(globalObject?.constructor?.name==="ServiceWorkerGlobalScope"){request.serviceWorkers="none"}let responseObject=null;let locallyAborted=false;let controller=null;addAbortListener(requestObject.signal,()=>{locallyAborted=true;assert(controller!=null);controller.abort(requestObject.signal.reason);const realResponse=responseObject?.deref();abortFetch(p2,request,realResponse,requestObject.signal.reason,controller.controller)});const processResponse=response=>{if(locallyAborted){return}if(response.aborted){abortFetch(p2,request,responseObject,controller.serializedAbortReason,controller.controller);return}if(response.type==="error"){p2.reject(new TypeError("fetch failed",{cause:response.error}));return}responseObject=new WeakRef(fromInnerResponse(response,"immutable"));p2.resolve(responseObject.deref());p2=null};controller=fetching({request,processResponseEndOfBody:handleFetchDone,processResponse,dispatcher:getRequestDispatcher(requestObject),requestObject});return p2.promise}function finalizeAndReportTiming(response,initiatorType="other"){if(response.type==="error"&&response.aborted){return}if(!response.urlList?.length){return}const originalURL=response.urlList[0];let timingInfo=response.timingInfo;let cacheState=response.cacheState;if(!urlIsHttpHttpsScheme(originalURL)){return}if(timingInfo===null){return}if(!response.timingAllowPassed){timingInfo=createOpaqueTimingInfo({startTime:timingInfo.startTime});cacheState=""}timingInfo.endTime=coarsenedSharedCurrentTime();response.timingInfo=timingInfo;markResourceTiming(timingInfo,originalURL.href,initiatorType,globalThis,cacheState,"",response.status)}var markResourceTiming=performance.markResourceTiming;function abortFetch(p2,request,responseObject,error,controller){if(p2){p2.reject(error)}if(request.body?.stream!=null&&isReadable(request.body.stream)){request.body.stream.cancel(error).catch(err2=>{if(err2.code==="ERR_INVALID_STATE"){return}throw err2})}if(responseObject==null){return}const response=getResponseState(responseObject);if(response.body?.stream!=null&&isReadable(response.body.stream)){controller.error(error)}}function fetching({request,processRequestBodyChunkLength,processRequestEndOfBody,processResponse,processResponseEndOfBody,processResponseConsumeBody,useParallelQueue=false,dispatcher=getGlobalDispatcher(),requestObject=null}){assert(dispatcher);let taskDestination=null;let crossOriginIsolatedCapability=false;if(request.client!=null){taskDestination=request.client.globalObject;crossOriginIsolatedCapability=request.client.crossOriginIsolatedCapability}const currentTime=coarsenedSharedCurrentTime(crossOriginIsolatedCapability);const timingInfo=createOpaqueTimingInfo({startTime:currentTime});const fetchParams={controller:new Fetch(dispatcher),request,timingInfo,processRequestBodyChunkLength,processRequestEndOfBody,processResponse,processResponseConsumeBody,processResponseEndOfBody,taskDestination,crossOriginIsolatedCapability,requestObject};assert(!request.body||request.body.stream);if(request.window==="client"){request.window=request.client?.globalObject?.constructor?.name==="Window"?request.client:"no-window"}if(request.origin==="client"){request.origin=request.client.origin}if(request.policyContainer==="client"){if(request.client!=null){request.policyContainer=clonePolicyContainer(request.client.policyContainer)}else{request.policyContainer=makePolicyContainer()}}if(!request.headersList.contains("accept",true)){const value="*/*";request.headersList.append("accept",value,true)}if(!request.headersList.contains("accept-language",true)){request.headersList.append("accept-language","*",true)}if(request.priority===null){}if(subresourceSet.has(request.destination)){}mainFetch(fetchParams,false);return fetchParams.controller}async function mainFetch(fetchParams,recursive){try{const request=fetchParams.request;let response=null;if(request.localURLsOnly&&!urlIsLocal(requestCurrentURL(request))){response=makeNetworkError("local URLs only")}tryUpgradeRequestToAPotentiallyTrustworthyURL(request);if(requestBadPort(request)==="blocked"){response=makeNetworkError("bad port")}if(request.referrerPolicy===""){request.referrerPolicy=request.policyContainer.referrerPolicy}if(request.referrer!=="no-referrer"){request.referrer=determineRequestsReferrer(request)}if(response===null){const currentURL=requestCurrentURL(request);if(sameOrigin(currentURL,request.url)&&request.responseTainting==="basic"||currentURL.protocol==="data:"||(request.mode==="navigate"||request.mode==="websocket")){request.responseTainting="basic";response=await schemeFetch(fetchParams)}else if(request.mode==="same-origin"){response=makeNetworkError('request mode cannot be "same-origin"')}else if(request.mode==="no-cors"){if(request.redirect!=="follow"){response=makeNetworkError('redirect mode cannot be "follow" for "no-cors" request')}else{request.responseTainting="opaque";response=await schemeFetch(fetchParams)}}else if(!urlIsHttpHttpsScheme(requestCurrentURL(request))){response=makeNetworkError("URL scheme must be a HTTP(S) scheme")}else{request.responseTainting="cors";response=await httpFetch(fetchParams)}}if(recursive){return response}if(response.status!==0&&!response.internalResponse){if(request.responseTainting==="cors"){}if(request.responseTainting==="basic"){response=filterResponse(response,"basic")}else if(request.responseTainting==="cors"){response=filterResponse(response,"cors")}else if(request.responseTainting==="opaque"){response=filterResponse(response,"opaque")}else{assert(false)}}let internalResponse=response.status===0?response:response.internalResponse;if(internalResponse.urlList.length===0){internalResponse.urlList.push(...request.urlList)}if(!request.timingAllowFailed){response.timingAllowPassed=true}if(response.type==="opaque"&&internalResponse.status===206&&internalResponse.rangeRequested&&!request.headers.contains("range",true)){response=internalResponse=makeNetworkError()}if(response.status!==0&&(request.method==="HEAD"||request.method==="CONNECT"||nullBodyStatus.includes(internalResponse.status))){internalResponse.body=null;fetchParams.controller.dump=true}if(request.integrity){const processBodyError=reason=>fetchFinale(fetchParams,makeNetworkError(reason));if(request.responseTainting==="opaque"||response.body==null){processBodyError(response.error);return}const processBody=bytes=>{if(!bytesMatch(bytes,request.integrity)){processBodyError("integrity mismatch");return}response.body=safelyExtractBody(bytes)[0];fetchFinale(fetchParams,response)};fullyReadBody(response.body,processBody,processBodyError)}else{fetchFinale(fetchParams,response)}}catch(err2){fetchParams.controller.terminate(err2)}}function schemeFetch(fetchParams){if(isCancelled(fetchParams)&&fetchParams.request.redirectCount===0){return Promise.resolve(makeAppropriateNetworkError(fetchParams))}const{request}=fetchParams;const{protocol:scheme}=requestCurrentURL(request);switch(scheme){case"about:":{return Promise.resolve(makeNetworkError("about scheme is not supported"))}case"blob:":{if(!resolveObjectURL){resolveObjectURL=__require("buffer").resolveObjectURL}const blobURLEntry=requestCurrentURL(request);if(blobURLEntry.search.length!==0){return Promise.resolve(makeNetworkError("NetworkError when attempting to fetch resource."))}const blob=resolveObjectURL(blobURLEntry.toString());if(request.method!=="GET"||!webidl.is.Blob(blob)){return Promise.resolve(makeNetworkError("invalid method"))}const response=makeResponse();const fullLength=blob.size;const serializedFullLength=isomorphicEncode(`${fullLength}`);const type=blob.type;if(!request.headersList.contains("range",true)){const bodyWithType=extractBody(blob);response.statusText="OK";response.body=bodyWithType[0];response.headersList.set("content-length",serializedFullLength,true);response.headersList.set("content-type",type,true)}else{response.rangeRequested=true;const rangeHeader=request.headersList.get("range",true);const rangeValue=simpleRangeHeaderValue(rangeHeader,true);if(rangeValue==="failure"){return Promise.resolve(makeNetworkError("failed to fetch the data URL"))}let{rangeStartValue:rangeStart,rangeEndValue:rangeEnd}=rangeValue;if(rangeStart===null){rangeStart=fullLength-rangeEnd;rangeEnd=rangeStart+rangeEnd-1}else{if(rangeStart>=fullLength){return Promise.resolve(makeNetworkError("Range start is greater than the blob's size."))}if(rangeEnd===null||rangeEnd>=fullLength){rangeEnd=fullLength-1}}const slicedBlob=blob.slice(rangeStart,rangeEnd+1,type);const slicedBodyWithType=extractBody(slicedBlob);response.body=slicedBodyWithType[0];const serializedSlicedLength=isomorphicEncode(`${slicedBlob.size}`);const contentRange=buildContentRange(rangeStart,rangeEnd,fullLength);response.status=206;response.statusText="Partial Content";response.headersList.set("content-length",serializedSlicedLength,true);response.headersList.set("content-type",type,true);response.headersList.set("content-range",contentRange,true)}return Promise.resolve(response)}case"data:":{const currentURL=requestCurrentURL(request);const dataURLStruct=dataURLProcessor(currentURL);if(dataURLStruct==="failure"){return Promise.resolve(makeNetworkError("failed to fetch the data URL"))}const mimeType=serializeAMimeType(dataURLStruct.mimeType);return Promise.resolve(makeResponse({statusText:"OK",headersList:[["content-type",{name:"Content-Type",value:mimeType}]],body:safelyExtractBody(dataURLStruct.body)[0]}))}case"file:":{return Promise.resolve(makeNetworkError("not implemented... yet..."))}case"http:":case"https:":{return httpFetch(fetchParams).catch(err2=>makeNetworkError(err2))}default:{return Promise.resolve(makeNetworkError("unknown scheme"))}}}function finalizeResponse(fetchParams,response){fetchParams.request.done=true;if(fetchParams.processResponseDone!=null){queueMicrotask(()=>fetchParams.processResponseDone(response))}}function fetchFinale(fetchParams,response){let timingInfo=fetchParams.timingInfo;const processResponseEndOfBody=()=>{const unsafeEndTime=Date.now();if(fetchParams.request.destination==="document"){fetchParams.controller.fullTimingInfo=timingInfo}fetchParams.controller.reportTimingSteps=()=>{if(!urlIsHttpHttpsScheme(fetchParams.request.url)){return}timingInfo.endTime=unsafeEndTime;let cacheState=response.cacheState;const bodyInfo=response.bodyInfo;if(!response.timingAllowPassed){timingInfo=createOpaqueTimingInfo(timingInfo);cacheState=""}let responseStatus=0;if(fetchParams.request.mode!=="navigate"||!response.hasCrossOriginRedirects){responseStatus=response.status;const mimeType=extractMimeType(response.headersList);if(mimeType!=="failure"){bodyInfo.contentType=minimizeSupportedMimeType(mimeType)}}if(fetchParams.request.initiatorType!=null){markResourceTiming(timingInfo,fetchParams.request.url.href,fetchParams.request.initiatorType,globalThis,cacheState,bodyInfo,responseStatus)}};const processResponseEndOfBodyTask=()=>{fetchParams.request.done=true;if(fetchParams.processResponseEndOfBody!=null){queueMicrotask(()=>fetchParams.processResponseEndOfBody(response))}if(fetchParams.request.initiatorType!=null){fetchParams.controller.reportTimingSteps()}};queueMicrotask(()=>processResponseEndOfBodyTask())};if(fetchParams.processResponse!=null){queueMicrotask(()=>{fetchParams.processResponse(response);fetchParams.processResponse=null})}const internalResponse=response.type==="error"?response:response.internalResponse??response;if(internalResponse.body==null){processResponseEndOfBody()}else{finished(internalResponse.body.stream,()=>{processResponseEndOfBody()})}}async function httpFetch(fetchParams){const request=fetchParams.request;let response=null;let actualResponse=null;const timingInfo=fetchParams.timingInfo;if(request.serviceWorkers==="all"){}if(response===null){if(request.redirect==="follow"){request.serviceWorkers="none"}actualResponse=response=await httpNetworkOrCacheFetch(fetchParams);if(request.responseTainting==="cors"&&corsCheck(request,response)==="failure"){return makeNetworkError("cors failure")}if(TAOCheck(request,response)==="failure"){request.timingAllowFailed=true}}if((request.responseTainting==="opaque"||response.type==="opaque")&&crossOriginResourcePolicyCheck(request.origin,request.client,request.destination,actualResponse)==="blocked"){return makeNetworkError("blocked")}if(redirectStatusSet.has(actualResponse.status)){if(request.redirect!=="manual"){fetchParams.controller.connection.destroy(void 0,false)}if(request.redirect==="error"){response=makeNetworkError("unexpected redirect")}else if(request.redirect==="manual"){response=actualResponse}else if(request.redirect==="follow"){response=await httpRedirectFetch(fetchParams,response)}else{assert(false)}}response.timingInfo=timingInfo;return response}function httpRedirectFetch(fetchParams,response){const request=fetchParams.request;const actualResponse=response.internalResponse?response.internalResponse:response;let locationURL;try{locationURL=responseLocationURL(actualResponse,requestCurrentURL(request).hash);if(locationURL==null){return response}}catch(err2){return Promise.resolve(makeNetworkError(err2))}if(!urlIsHttpHttpsScheme(locationURL)){return Promise.resolve(makeNetworkError("URL scheme must be a HTTP(S) scheme"))}if(request.redirectCount===20){return Promise.resolve(makeNetworkError("redirect count exceeded"))}request.redirectCount+=1;if(request.mode==="cors"&&(locationURL.username||locationURL.password)&&!sameOrigin(request,locationURL)){return Promise.resolve(makeNetworkError('cross origin not allowed for request mode "cors"'))}if(request.responseTainting==="cors"&&(locationURL.username||locationURL.password)){return Promise.resolve(makeNetworkError('URL cannot contain credentials for request mode "cors"'))}if(actualResponse.status!==303&&request.body!=null&&request.body.source==null){return Promise.resolve(makeNetworkError())}if([301,302].includes(actualResponse.status)&&request.method==="POST"||actualResponse.status===303&&!GET_OR_HEAD.includes(request.method)){request.method="GET";request.body=null;for(const headerName of requestBodyHeader){request.headersList.delete(headerName)}}if(!sameOrigin(requestCurrentURL(request),locationURL)){request.headersList.delete("authorization",true);request.headersList.delete("proxy-authorization",true);request.headersList.delete("cookie",true);request.headersList.delete("host",true)}if(request.body!=null){assert(request.body.source!=null);request.body=safelyExtractBody(request.body.source)[0]}const timingInfo=fetchParams.timingInfo;timingInfo.redirectEndTime=timingInfo.postRedirectStartTime=coarsenedSharedCurrentTime(fetchParams.crossOriginIsolatedCapability);if(timingInfo.redirectStartTime===0){timingInfo.redirectStartTime=timingInfo.startTime}request.urlList.push(locationURL);setRequestReferrerPolicyOnRedirect(request,actualResponse);return mainFetch(fetchParams,true)}async function httpNetworkOrCacheFetch(fetchParams,isAuthenticationFetch=false,isNewConnectionFetch=false){const request=fetchParams.request;let httpFetchParams=null;let httpRequest=null;let response=null;const httpCache=null;const revalidatingFlag=false;if(request.window==="no-window"&&request.redirect==="error"){httpFetchParams=fetchParams;httpRequest=request}else{httpRequest=cloneRequest(request);httpFetchParams={...fetchParams};httpFetchParams.request=httpRequest}const includeCredentials=request.credentials==="include"||request.credentials==="same-origin"&&request.responseTainting==="basic";const contentLength=httpRequest.body?httpRequest.body.length:null;let contentLengthHeaderValue=null;if(httpRequest.body==null&&["POST","PUT"].includes(httpRequest.method)){contentLengthHeaderValue="0"}if(contentLength!=null){contentLengthHeaderValue=isomorphicEncode(`${contentLength}`)}if(contentLengthHeaderValue!=null&&!httpRequest.headersList.contains("content-length",true)){httpRequest.headersList.append("content-length",contentLengthHeaderValue,true)}if(contentLength!=null&&httpRequest.keepalive){}if(webidl.is.URL(httpRequest.referrer)){httpRequest.headersList.append("referer",isomorphicEncode(httpRequest.referrer.href),true)}appendRequestOriginHeader(httpRequest);appendFetchMetadata(httpRequest);if(!httpRequest.headersList.contains("user-agent",true)){httpRequest.headersList.append("user-agent",defaultUserAgent,true)}if(httpRequest.cache==="default"&&(httpRequest.headersList.contains("if-modified-since",true)||httpRequest.headersList.contains("if-none-match",true)||httpRequest.headersList.contains("if-unmodified-since",true)||httpRequest.headersList.contains("if-match",true)||httpRequest.headersList.contains("if-range",true))){httpRequest.cache="no-store"}if(httpRequest.cache==="no-cache"&&!httpRequest.preventNoCacheCacheControlHeaderModification&&!httpRequest.headersList.contains("cache-control",true)){httpRequest.headersList.append("cache-control","max-age=0",true)}if(httpRequest.cache==="no-store"||httpRequest.cache==="reload"){if(!httpRequest.headersList.contains("pragma",true)){httpRequest.headersList.append("pragma","no-cache",true)}if(!httpRequest.headersList.contains("cache-control",true)){httpRequest.headersList.append("cache-control","no-cache",true)}}if(httpRequest.headersList.contains("range",true)){httpRequest.headersList.append("accept-encoding","identity",true)}if(!httpRequest.headersList.contains("accept-encoding",true)){if(urlHasHttpsScheme(requestCurrentURL(httpRequest))){httpRequest.headersList.append("accept-encoding","br, gzip, deflate",true)}else{httpRequest.headersList.append("accept-encoding","gzip, deflate",true)}}httpRequest.headersList.delete("host",true);if(includeCredentials){if(!httpRequest.headersList.contains("authorization",true)){let authorizationValue=null;if(hasAuthenticationEntry(httpRequest)&&(httpRequest.useURLCredentials===void 0||!includesCredentials(requestCurrentURL(httpRequest)))){}else if(includesCredentials(requestCurrentURL(httpRequest))&&isAuthenticationFetch){const{username,password}=requestCurrentURL(httpRequest);authorizationValue=`Basic ${Buffer.from(`${username}:${password}`).toString("base64")}`}if(authorizationValue!==null){httpRequest.headersList.append("Authorization",authorizationValue,false)}}}if(httpCache==null){httpRequest.cache="no-store"}if(httpRequest.cache!=="no-store"&&httpRequest.cache!=="reload"){}if(response==null){if(httpRequest.cache==="only-if-cached"){return makeNetworkError("only if cached")}const forwardResponse=await httpNetworkFetch(httpFetchParams,includeCredentials,isNewConnectionFetch);if(!safeMethodsSet.has(httpRequest.method)&&forwardResponse.status>=200&&forwardResponse.status<=399){}if(revalidatingFlag&&forwardResponse.status===304){}if(response==null){response=forwardResponse}}response.urlList=[...httpRequest.urlList];if(httpRequest.headersList.contains("range",true)){response.rangeRequested=true}response.requestIncludesCredentials=includeCredentials;if(response.status===401&&httpRequest.responseTainting!=="cors"&&includeCredentials&&(request.useURLCredentials!==void 0||isTraversableNavigable(request.traversableForUserPrompts))){if(request.body!=null){if(request.body.source==null){return response}request.body=safelyExtractBody(request.body.source)[0]}if(request.useURLCredentials===void 0||isAuthenticationFetch){if(isCancelled(fetchParams)){return makeAppropriateNetworkError(fetchParams)}return response}fetchParams.controller.connection.destroy();response=await httpNetworkOrCacheFetch(fetchParams,true)}if(response.status===407){if(request.window==="no-window"){return makeNetworkError()}if(isCancelled(fetchParams)){return makeAppropriateNetworkError(fetchParams)}return makeNetworkError("proxy authentication required")}if(response.status===421&&!isNewConnectionFetch&&(request.body==null||request.body.source!=null)){if(isCancelled(fetchParams)){return makeAppropriateNetworkError(fetchParams)}fetchParams.controller.connection.destroy();response=await httpNetworkOrCacheFetch(fetchParams,isAuthenticationFetch,true)}if(isAuthenticationFetch){}return response}async function httpNetworkFetch(fetchParams,includeCredentials=false,forceNewConnection=false){assert(!fetchParams.controller.connection||fetchParams.controller.connection.destroyed);fetchParams.controller.connection={abort:null,destroyed:false,destroy(err2,abort=true){if(!this.destroyed){this.destroyed=true;if(abort){this.abort?.(err2??new DOMException("The operation was aborted.","AbortError"))}}}};const request=fetchParams.request;let response=null;const timingInfo=fetchParams.timingInfo;const httpCache=null;if(httpCache==null){request.cache="no-store"}const newConnection=forceNewConnection?"yes":"no";if(request.mode==="websocket"){}else{}let requestBody=null;if(request.body==null&&fetchParams.processRequestEndOfBody){queueMicrotask(()=>fetchParams.processRequestEndOfBody())}else if(request.body!=null){const processBodyChunk=async function*(bytes){if(isCancelled(fetchParams)){return}yield bytes;fetchParams.processRequestBodyChunkLength?.(bytes.byteLength)};const processEndOfBody=()=>{if(isCancelled(fetchParams)){return}if(fetchParams.processRequestEndOfBody){fetchParams.processRequestEndOfBody()}};const processBodyError=e=>{if(isCancelled(fetchParams)){return}if(e.name==="AbortError"){fetchParams.controller.abort()}else{fetchParams.controller.terminate(e)}};requestBody=(async function*(){try{for await(const bytes of request.body.stream){yield*processBodyChunk(bytes)}processEndOfBody()}catch(err2){processBodyError(err2)}})()}try{const{body,status,statusText,headersList,socket}=await dispatch({body:requestBody});if(socket){response=makeResponse({status,statusText,headersList,socket})}else{const iterator=body[Symbol.asyncIterator]();fetchParams.controller.next=()=>iterator.next();response=makeResponse({status,statusText,headersList})}}catch(err2){if(err2.name==="AbortError"){fetchParams.controller.connection.destroy();return makeAppropriateNetworkError(fetchParams,err2)}return makeNetworkError(err2)}const pullAlgorithm=()=>{return fetchParams.controller.resume()};const cancelAlgorithm=reason=>{if(!isCancelled(fetchParams)){fetchParams.controller.abort(reason)}};const stream2=new ReadableStream({start(controller){fetchParams.controller.controller=controller},pull:pullAlgorithm,cancel:cancelAlgorithm,type:"bytes"});response.body={stream:stream2,source:null,length:null};if(!fetchParams.controller.resume){fetchParams.controller.on("terminated",onAborted)}fetchParams.controller.resume=async()=>{while(true){let bytes;let isFailure;try{const{done,value}=await fetchParams.controller.next();if(isAborted(fetchParams)){break}bytes=done?void 0:value}catch(err2){if(fetchParams.controller.ended&&!timingInfo.encodedBodySize){bytes=void 0}else{bytes=err2;isFailure=true}}if(bytes===void 0){readableStreamClose(fetchParams.controller.controller);finalizeResponse(fetchParams,response);return}timingInfo.decodedBodySize+=bytes?.byteLength??0;if(isFailure){fetchParams.controller.terminate(bytes);return}const buffer=new Uint8Array(bytes);if(buffer.byteLength){fetchParams.controller.controller.enqueue(buffer)}if(isErrored(stream2)){fetchParams.controller.terminate();return}if(fetchParams.controller.controller.desiredSize<=0){return}}};function onAborted(reason){if(isAborted(fetchParams)){response.aborted=true;if(isReadable(stream2)){fetchParams.controller.controller.error(fetchParams.controller.serializedAbortReason)}}else{if(isReadable(stream2)){fetchParams.controller.controller.error(new TypeError("terminated",{cause:isErrorLike(reason)?reason:void 0}))}}fetchParams.controller.connection.destroy()}return response;function dispatch({body}){const url=requestCurrentURL(request);const agent=fetchParams.controller.dispatcher;const path54=url.pathname+url.search;const hasTrailingQuestionMark=url.search.length===0&&url.href[url.href.length-url.hash.length-1]==="?";return new Promise((resolve,reject)=>agent.dispatch({path:hasTrailingQuestionMark?`${path54}?`:path54,origin:url.origin,method:request.method,body:agent.isMockActive?request.body&&(request.body.source||request.body.stream):body,headers:request.headersList.entries,maxRedirections:0,upgrade:request.mode==="websocket"?"websocket":void 0},{body:null,abort:null,onConnect(abort){const{connection}=fetchParams.controller;timingInfo.finalConnectionTimingInfo=clampAndCoarsenConnectionTimingInfo(void 0,timingInfo.postRedirectStartTime,fetchParams.crossOriginIsolatedCapability);if(connection.destroyed){abort(new DOMException("The operation was aborted.","AbortError"))}else{fetchParams.controller.on("terminated",abort);this.abort=connection.abort=abort}timingInfo.finalNetworkRequestStartTime=coarsenedSharedCurrentTime(fetchParams.crossOriginIsolatedCapability)},onResponseStarted(){timingInfo.finalNetworkResponseStartTime=coarsenedSharedCurrentTime(fetchParams.crossOriginIsolatedCapability)},onHeaders(status,rawHeaders,resume,statusText){if(status<200){return false}const headersList=new HeadersList;for(let i=0;i<rawHeaders.length;i+=2){const nameStr=bufferToLowerCasedHeaderName(rawHeaders[i]);const value=rawHeaders[i+1];if(Array.isArray(value)&&!Buffer.isBuffer(rawHeaders[i+1])){for(const val of value){headersList.append(nameStr,val.toString("latin1"),true)}}else{headersList.append(nameStr,value.toString("latin1"),true)}}const location=headersList.get("location",true);this.body=new Readable3({read:resume});const willFollow=location&&request.redirect==="follow"&&redirectStatusSet.has(status);const decoders=[];if(request.method!=="HEAD"&&request.method!=="CONNECT"&&!nullBodyStatus.includes(status)&&!willFollow){const contentEncoding=headersList.get("content-encoding",true);const codings=contentEncoding?contentEncoding.toLowerCase().split(","):[];const maxContentEncodings=5;if(codings.length>maxContentEncodings){reject(new Error(`too many content-encodings in response: ${codings.length}, maximum allowed is ${maxContentEncodings}`));return true}for(let i=codings.length-1;i>=0;--i){const coding=codings[i].trim();if(coding==="x-gzip"||coding==="gzip"){decoders.push(zlib2.createGunzip({flush:zlib2.constants.Z_SYNC_FLUSH,finishFlush:zlib2.constants.Z_SYNC_FLUSH}))}else if(coding==="deflate"){decoders.push(createInflate2({flush:zlib2.constants.Z_SYNC_FLUSH,finishFlush:zlib2.constants.Z_SYNC_FLUSH}))}else if(coding==="br"){decoders.push(zlib2.createBrotliDecompress({flush:zlib2.constants.BROTLI_OPERATION_FLUSH,finishFlush:zlib2.constants.BROTLI_OPERATION_FLUSH}))}else if(coding==="zstd"&&hasZstd){decoders.push(zlib2.createZstdDecompress({flush:zlib2.constants.ZSTD_e_continue,finishFlush:zlib2.constants.ZSTD_e_end}))}else{decoders.length=0;break}}}const onError=this.onError.bind(this);resolve({status,statusText,headersList,body:decoders.length?pipeline(this.body,...decoders,err2=>{if(err2){this.onError(err2)}}).on("error",onError):this.body.on("error",onError)});return true},onData(chunk){if(fetchParams.controller.dump){return}const bytes=chunk;timingInfo.encodedBodySize+=bytes.byteLength;return this.body.push(bytes)},onComplete(){if(this.abort){fetchParams.controller.off("terminated",this.abort)}fetchParams.controller.ended=true;this.body.push(null)},onError(error){if(this.abort){fetchParams.controller.off("terminated",this.abort)}this.body?.destroy(error);fetchParams.controller.terminate(error);reject(error)},onRequestUpgrade(_controller,status,headers,socket){if(socket.session!=null&&status!==200||socket.session==null&&status!==101){return false}const headersList=new HeadersList;for(const[name,value]of Object.entries(headers)){if(value==null){continue}const headerName=name.toLowerCase();if(Array.isArray(value)){for(const entry of value){headersList.append(headerName,String(entry),true)}}else{headersList.append(headerName,String(value),true)}}resolve({status,statusText:STATUS_CODES[status],headersList,socket});return true},onUpgrade(status,rawHeaders,socket){if(socket.session!=null&&status!==200||socket.session==null&&status!==101){return false}const headersList=new HeadersList;for(let i=0;i<rawHeaders.length;i+=2){const nameStr=bufferToLowerCasedHeaderName(rawHeaders[i]);const value=rawHeaders[i+1];if(Array.isArray(value)&&!Buffer.isBuffer(rawHeaders[i+1])){for(const val of value){headersList.append(nameStr,val.toString("latin1"),true)}}else{headersList.append(nameStr,value.toString("latin1"),true)}}resolve({status,statusText:STATUS_CODES[status],headersList,socket});return true}}))}}module.exports={fetch:fetch2,Fetch,fetching,finalizeAndReportTiming}}});var require_util3=__commonJS({"node_modules/undici/lib/web/cache/util.js"(exports,module){"use strict";var assert=__require("assert");var{URLSerializer}=require_data_url();var{isValidHeaderName}=require_util2();function urlEquals(A2,B2,excludeFragment=false){const serializedA=URLSerializer(A2,excludeFragment);const serializedB=URLSerializer(B2,excludeFragment);return serializedA===serializedB}function getFieldValues(header){assert(header!==null);const values=[];for(let value of header.split(",")){value=value.trim();if(isValidHeaderName(value)){values.push(value)}}return values}module.exports={urlEquals,getFieldValues}}});var require_cache3=__commonJS({"node_modules/undici/lib/web/cache/cache.js"(exports,module){"use strict";var assert=__require("assert");var{kConstruct}=require_symbols();var{urlEquals,getFieldValues}=require_util3();var{kEnumerableProperty,isDisturbed}=require_util();var{webidl}=require_webidl();var{cloneResponse,fromInnerResponse,getResponseState}=require_response();var{Request,fromInnerRequest,getRequestState}=require_request2();var{fetching}=require_fetch();var{urlIsHttpHttpsScheme,readAllBytes}=require_util2();var{createDeferredPromise}=require_promise();var Cache=class _Cache{#relevantRequestResponseList;constructor(){if(arguments[0]!==kConstruct){webidl.illegalConstructor()}webidl.util.markAsUncloneable(this);this.#relevantRequestResponseList=arguments[1]}async match(request,options={}){webidl.brandCheck(this,_Cache);const prefix="Cache.match";webidl.argumentLengthCheck(arguments,1,prefix);request=webidl.converters.RequestInfo(request);options=webidl.converters.CacheQueryOptions(options,prefix,"options");const p2=this.#internalMatchAll(request,options,1);if(p2.length===0){return}return p2[0]}async matchAll(request=void 0,options={}){webidl.brandCheck(this,_Cache);const prefix="Cache.matchAll";if(request!==void 0)request=webidl.converters.RequestInfo(request);options=webidl.converters.CacheQueryOptions(options,prefix,"options");return this.#internalMatchAll(request,options)}async add(request){webidl.brandCheck(this,_Cache);const prefix="Cache.add";webidl.argumentLengthCheck(arguments,1,prefix);request=webidl.converters.RequestInfo(request);const requests=[request];const responseArrayPromise=this.addAll(requests);return await responseArrayPromise}async addAll(requests){webidl.brandCheck(this,_Cache);const prefix="Cache.addAll";webidl.argumentLengthCheck(arguments,1,prefix);const responsePromises=[];const requestList=[];for(let request of requests){if(request===void 0){throw webidl.errors.conversionFailed({prefix,argument:"Argument 1",types:["undefined is not allowed"]})}request=webidl.converters.RequestInfo(request);if(typeof request==="string"){continue}const r=getRequestState(request);if(!urlIsHttpHttpsScheme(r.url)||r.method!=="GET"){throw webidl.errors.exception({header:prefix,message:"Expected http/s scheme when method is not GET."})}}const fetchControllers=[];for(const request of requests){const r=getRequestState(new Request(request));if(!urlIsHttpHttpsScheme(r.url)){throw webidl.errors.exception({header:prefix,message:"Expected http/s scheme."})}r.initiator="fetch";r.destination="subresource";requestList.push(r);const responsePromise=createDeferredPromise();fetchControllers.push(fetching({request:r,processResponse(response){if(response.type==="error"||response.status===206||response.status<200||response.status>299){responsePromise.reject(webidl.errors.exception({header:"Cache.addAll",message:"Received an invalid status code or the request failed."}))}else if(response.headersList.contains("vary")){const fieldValues=getFieldValues(response.headersList.get("vary"));for(const fieldValue of fieldValues){if(fieldValue==="*"){responsePromise.reject(webidl.errors.exception({header:"Cache.addAll",message:"invalid vary field value"}));for(const controller of fetchControllers){controller.abort()}return}}}},processResponseEndOfBody(response){if(response.aborted){responsePromise.reject(new DOMException("aborted","AbortError"));return}responsePromise.resolve(response)}}));responsePromises.push(responsePromise.promise)}const p2=Promise.all(responsePromises);const responses=await p2;const operations=[];let index=0;for(const response of responses){const operation={type:"put",request:requestList[index],response};operations.push(operation);index++}const cacheJobPromise=createDeferredPromise();let errorData=null;try{this.#batchCacheOperations(operations)}catch(e){errorData=e}queueMicrotask(()=>{if(errorData===null){cacheJobPromise.resolve(void 0)}else{cacheJobPromise.reject(errorData)}});return cacheJobPromise.promise}async put(request,response){webidl.brandCheck(this,_Cache);const prefix="Cache.put";webidl.argumentLengthCheck(arguments,2,prefix);request=webidl.converters.RequestInfo(request);response=webidl.converters.Response(response,prefix,"response");let innerRequest=null;if(webidl.is.Request(request)){innerRequest=getRequestState(request)}else{innerRequest=getRequestState(new Request(request))}if(!urlIsHttpHttpsScheme(innerRequest.url)||innerRequest.method!=="GET"){throw webidl.errors.exception({header:prefix,message:"Expected an http/s scheme when method is not GET"})}const innerResponse=getResponseState(response);if(innerResponse.status===206){throw webidl.errors.exception({header:prefix,message:"Got 206 status"})}if(innerResponse.headersList.contains("vary")){const fieldValues=getFieldValues(innerResponse.headersList.get("vary"));for(const fieldValue of fieldValues){if(fieldValue==="*"){throw webidl.errors.exception({header:prefix,message:"Got * vary field value"})}}}if(innerResponse.body&&(isDisturbed(innerResponse.body.stream)||innerResponse.body.stream.locked)){throw webidl.errors.exception({header:prefix,message:"Response body is locked or disturbed"})}const clonedResponse=cloneResponse(innerResponse);const bodyReadPromise=createDeferredPromise();if(innerResponse.body!=null){const stream2=innerResponse.body.stream;const reader=stream2.getReader();readAllBytes(reader,bodyReadPromise.resolve,bodyReadPromise.reject)}else{bodyReadPromise.resolve(void 0)}const operations=[];const operation={type:"put",request:innerRequest,response:clonedResponse};operations.push(operation);const bytes=await bodyReadPromise.promise;if(clonedResponse.body!=null){clonedResponse.body.source=bytes}const cacheJobPromise=createDeferredPromise();let errorData=null;try{this.#batchCacheOperations(operations)}catch(e){errorData=e}queueMicrotask(()=>{if(errorData===null){cacheJobPromise.resolve()}else{cacheJobPromise.reject(errorData)}});return cacheJobPromise.promise}async delete(request,options={}){webidl.brandCheck(this,_Cache);const prefix="Cache.delete";webidl.argumentLengthCheck(arguments,1,prefix);request=webidl.converters.RequestInfo(request);options=webidl.converters.CacheQueryOptions(options,prefix,"options");let r=null;if(webidl.is.Request(request)){r=getRequestState(request);if(r.method!=="GET"&&!options.ignoreMethod){return false}}else{assert(typeof request==="string");r=getRequestState(new Request(request))}const operations=[];const operation={type:"delete",request:r,options};operations.push(operation);const cacheJobPromise=createDeferredPromise();let errorData=null;let requestResponses;try{requestResponses=this.#batchCacheOperations(operations)}catch(e){errorData=e}queueMicrotask(()=>{if(errorData===null){cacheJobPromise.resolve(!!requestResponses?.length)}else{cacheJobPromise.reject(errorData)}});return cacheJobPromise.promise}async keys(request=void 0,options={}){webidl.brandCheck(this,_Cache);const prefix="Cache.keys";if(request!==void 0)request=webidl.converters.RequestInfo(request);options=webidl.converters.CacheQueryOptions(options,prefix,"options");let r=null;if(request!==void 0){if(webidl.is.Request(request)){r=getRequestState(request);if(r.method!=="GET"&&!options.ignoreMethod){return[]}}else if(typeof request==="string"){r=getRequestState(new Request(request))}}const promise=createDeferredPromise();const requests=[];if(request===void 0){for(const requestResponse of this.#relevantRequestResponseList){requests.push(requestResponse[0])}}else{const requestResponses=this.#queryCache(r,options);for(const requestResponse of requestResponses){requests.push(requestResponse[0])}}queueMicrotask(()=>{const requestList=[];for(const request2 of requests){const requestObject=fromInnerRequest(request2,void 0,new AbortController().signal,"immutable");requestList.push(requestObject)}promise.resolve(Object.freeze(requestList))});return promise.promise}#batchCacheOperations(operations){const cache7=this.#relevantRequestResponseList;const backupCache=[...cache7];const addedItems=[];const resultList=[];try{for(const operation of operations){if(operation.type!=="delete"&&operation.type!=="put"){throw webidl.errors.exception({header:"Cache.#batchCacheOperations",message:'operation type does not match "delete" or "put"'})}if(operation.type==="delete"&&operation.response!=null){throw webidl.errors.exception({header:"Cache.#batchCacheOperations",message:"delete operation should not have an associated response"})}if(this.#queryCache(operation.request,operation.options,addedItems).length){throw new DOMException("???","InvalidStateError")}let requestResponses;if(operation.type==="delete"){requestResponses=this.#queryCache(operation.request,operation.options);if(requestResponses.length===0){return[]}for(const requestResponse of requestResponses){const idx=cache7.indexOf(requestResponse);assert(idx!==-1);cache7.splice(idx,1)}}else if(operation.type==="put"){if(operation.response==null){throw webidl.errors.exception({header:"Cache.#batchCacheOperations",message:"put operation should have an associated response"})}const r=operation.request;if(!urlIsHttpHttpsScheme(r.url)){throw webidl.errors.exception({header:"Cache.#batchCacheOperations",message:"expected http or https scheme"})}if(r.method!=="GET"){throw webidl.errors.exception({header:"Cache.#batchCacheOperations",message:"not get method"})}if(operation.options!=null){throw webidl.errors.exception({header:"Cache.#batchCacheOperations",message:"options must not be defined"})}requestResponses=this.#queryCache(operation.request);for(const requestResponse of requestResponses){const idx=cache7.indexOf(requestResponse);assert(idx!==-1);cache7.splice(idx,1)}cache7.push([operation.request,operation.response]);addedItems.push([operation.request,operation.response])}resultList.push([operation.request,operation.response])}return resultList}catch(e){this.#relevantRequestResponseList.length=0;this.#relevantRequestResponseList=backupCache;throw e}}#queryCache(requestQuery,options,targetStorage){const resultList=[];const storage=targetStorage??this.#relevantRequestResponseList;for(const requestResponse of storage){const[cachedRequest,cachedResponse]=requestResponse;if(this.#requestMatchesCachedItem(requestQuery,cachedRequest,cachedResponse,options)){resultList.push(requestResponse)}}return resultList}#requestMatchesCachedItem(requestQuery,request,response=null,options){const queryURL=new URL(requestQuery.url);const cachedURL=new URL(request.url);if(options?.ignoreSearch){cachedURL.search="";queryURL.search=""}if(!urlEquals(queryURL,cachedURL,true)){return false}if(response==null||options?.ignoreVary||!response.headersList.contains("vary")){return true}const fieldValues=getFieldValues(response.headersList.get("vary"));for(const fieldValue of fieldValues){if(fieldValue==="*"){return false}const requestValue=request.headersList.get(fieldValue);const queryValue=requestQuery.headersList.get(fieldValue);if(requestValue!==queryValue){return false}}return true}#internalMatchAll(request,options,maxResponses=Infinity){let r=null;if(request!==void 0){if(webidl.is.Request(request)){r=getRequestState(request);if(r.method!=="GET"&&!options.ignoreMethod){return[]}}else if(typeof request==="string"){r=getRequestState(new Request(request))}}const responses=[];if(request===void 0){for(const requestResponse of this.#relevantRequestResponseList){responses.push(requestResponse[1])}}else{const requestResponses=this.#queryCache(r,options);for(const requestResponse of requestResponses){responses.push(requestResponse[1])}}const responseList=[];for(const response of responses){const responseObject=fromInnerResponse(cloneResponse(response),"immutable");responseList.push(responseObject);if(responseList.length>=maxResponses){break}}return Object.freeze(responseList)}};Object.defineProperties(Cache.prototype,{[Symbol.toStringTag]:{value:"Cache",configurable:true},match:kEnumerableProperty,matchAll:kEnumerableProperty,add:kEnumerableProperty,addAll:kEnumerableProperty,put:kEnumerableProperty,delete:kEnumerableProperty,keys:kEnumerableProperty});var cacheQueryOptionConverters=[{key:"ignoreSearch",converter:webidl.converters.boolean,defaultValue:()=>false},{key:"ignoreMethod",converter:webidl.converters.boolean,defaultValue:()=>false},{key:"ignoreVary",converter:webidl.converters.boolean,defaultValue:()=>false}];webidl.converters.CacheQueryOptions=webidl.dictionaryConverter(cacheQueryOptionConverters);webidl.converters.MultiCacheQueryOptions=webidl.dictionaryConverter([...cacheQueryOptionConverters,{key:"cacheName",converter:webidl.converters.DOMString}]);webidl.converters.Response=webidl.interfaceConverter(webidl.is.Response,"Response");webidl.converters["sequence<RequestInfo>"]=webidl.sequenceConverter(webidl.converters.RequestInfo);module.exports={Cache}}});var require_cachestorage=__commonJS({"node_modules/undici/lib/web/cache/cachestorage.js"(exports,module){"use strict";var{Cache}=require_cache3();var{webidl}=require_webidl();var{kEnumerableProperty}=require_util();var{kConstruct}=require_symbols();var CacheStorage=class _CacheStorage{#caches=new Map;constructor(){if(arguments[0]!==kConstruct){webidl.illegalConstructor()}webidl.util.markAsUncloneable(this)}async match(request,options={}){webidl.brandCheck(this,_CacheStorage);webidl.argumentLengthCheck(arguments,1,"CacheStorage.match");request=webidl.converters.RequestInfo(request);options=webidl.converters.MultiCacheQueryOptions(options);if(options.cacheName!=null){if(this.#caches.has(options.cacheName)){const cacheList=this.#caches.get(options.cacheName);const cache7=new Cache(kConstruct,cacheList);return await cache7.match(request,options)}}else{for(const cacheList of this.#caches.values()){const cache7=new Cache(kConstruct,cacheList);const response=await cache7.match(request,options);if(response!==void 0){return response}}}}async has(cacheName){webidl.brandCheck(this,_CacheStorage);const prefix="CacheStorage.has";webidl.argumentLengthCheck(arguments,1,prefix);cacheName=webidl.converters.DOMString(cacheName,prefix,"cacheName");return this.#caches.has(cacheName)}async open(cacheName){webidl.brandCheck(this,_CacheStorage);const prefix="CacheStorage.open";webidl.argumentLengthCheck(arguments,1,prefix);cacheName=webidl.converters.DOMString(cacheName,prefix,"cacheName");if(this.#caches.has(cacheName)){const cache8=this.#caches.get(cacheName);return new Cache(kConstruct,cache8)}const cache7=[];this.#caches.set(cacheName,cache7);return new Cache(kConstruct,cache7)}async delete(cacheName){webidl.brandCheck(this,_CacheStorage);const prefix="CacheStorage.delete";webidl.argumentLengthCheck(arguments,1,prefix);cacheName=webidl.converters.DOMString(cacheName,prefix,"cacheName");return this.#caches.delete(cacheName)}async keys(){webidl.brandCheck(this,_CacheStorage);const keys=this.#caches.keys();return[...keys]}};Object.defineProperties(CacheStorage.prototype,{[Symbol.toStringTag]:{value:"CacheStorage",configurable:true},match:kEnumerableProperty,has:kEnumerableProperty,open:kEnumerableProperty,delete:kEnumerableProperty,keys:kEnumerableProperty});module.exports={CacheStorage}}});var require_constants4=__commonJS({"node_modules/undici/lib/web/cookies/constants.js"(exports,module){"use strict";var maxAttributeValueSize=1024;var maxNameValuePairSize=4096;module.exports={maxAttributeValueSize,maxNameValuePairSize}}});var require_util4=__commonJS({"node_modules/undici/lib/web/cookies/util.js"(exports,module){"use strict";function isCTLExcludingHtab(value){for(let i=0;i<value.length;++i){const code=value.charCodeAt(i);if(code>=0&&code<=8||code>=10&&code<=31||code===127){return true}}return false}function validateCookieName(name){for(let i=0;i<name.length;++i){const code=name.charCodeAt(i);if(code<33||code>126||code===34||code===40||code===41||code===60||code===62||code===64||code===44||code===59||code===58||code===92||code===47||code===91||code===93||code===63||code===61||code===123||code===125){throw new Error("Invalid cookie name")}}}function validateCookieValue(value){let len=value.length;let i=0;if(value[0]==='"'){if(len===1||value[len-1]!=='"'){throw new Error("Invalid cookie value")}--len;++i}while(i<len){const code=value.charCodeAt(i++);if(code<33||code>126||code===34||code===44||code===59||code===92){throw new Error("Invalid cookie value")}}}function validateCookiePath(path54){for(let i=0;i<path54.length;++i){const code=path54.charCodeAt(i);if(code<32||code>126||code===59){throw new Error("Invalid cookie path")}}}function isLetterOrDigit(code){return code>=48&&code<=57||code>=65&&code<=90||code>=97&&code<=122}function validateCookieDomain(domain){if(domain===" "){return}if(domain.length>255){throw new Error("Invalid cookie domain")}let labelLength=0;for(let i=0;i<domain.length;++i){const code=domain.charCodeAt(i);if(code===46){if(labelLength===0){throw new Error("Invalid cookie domain")}if(domain.charCodeAt(i-1)===45){throw new Error("Invalid cookie domain")}labelLength=0;continue}if(labelLength===0&&!isLetterOrDigit(code)){throw new Error("Invalid cookie domain")}if(!isLetterOrDigit(code)&&code!==45){throw new Error("Invalid cookie domain")}if(++labelLength>63){throw new Error("Invalid cookie domain")}}if(labelLength===0||domain.charCodeAt(domain.length-1)===45){throw new Error("Invalid cookie domain")}}var IMFDays=["Sun","Mon","Tue","Wed","Thu","Fri","Sat"];var IMFMonths=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];var IMFPaddedNumbers=Array(61).fill(0).map((_2,i)=>i.toString().padStart(2,"0"));function toIMFDate(date){if(typeof date==="number"){date=new Date(date)}return`${IMFDays[date.getUTCDay()]}, ${IMFPaddedNumbers[date.getUTCDate()]} ${IMFMonths[date.getUTCMonth()]} ${date.getUTCFullYear()} ${IMFPaddedNumbers[date.getUTCHours()]}:${IMFPaddedNumbers[date.getUTCMinutes()]}:${IMFPaddedNumbers[date.getUTCSeconds()]} GMT`}function validateCookieMaxAge(maxAge){if(maxAge<0){throw new Error("Invalid cookie max-age")}}function stringify(cookie){if(cookie.name.length===0){return null}validateCookieName(cookie.name);validateCookieValue(cookie.value);const out=[`${cookie.name}=${cookie.value}`];if(cookie.name.startsWith("__Secure-")){cookie.secure=true}if(cookie.name.startsWith("__Host-")){cookie.secure=true;cookie.domain=null;cookie.path="/"}if(cookie.secure){out.push("Secure")}if(cookie.httpOnly){out.push("HttpOnly")}if(typeof cookie.maxAge==="number"){validateCookieMaxAge(cookie.maxAge);out.push(`Max-Age=${cookie.maxAge}`)}if(cookie.domain){validateCookieDomain(cookie.domain);out.push(`Domain=${cookie.domain}`)}if(cookie.path){validateCookiePath(cookie.path);out.push(`Path=${cookie.path}`)}if(cookie.expires&&cookie.expires.toString()!=="Invalid Date"){out.push(`Expires=${toIMFDate(cookie.expires)}`)}if(cookie.sameSite){out.push(`SameSite=${cookie.sameSite}`)}for(const part of cookie.unparsed){if(!part.includes("=")){throw new Error("Invalid unparsed")}const[key2,...value]=part.split("=");const trimmedKey=key2.trim();const joinedValue=value.join("=");validateCookieName(trimmedKey);validateCookieValue(joinedValue);out.push(`${trimmedKey}=${joinedValue}`)}return out.join("; ")}module.exports={isCTLExcludingHtab,validateCookieName,validateCookiePath,validateCookieValue,toIMFDate,stringify}}});var require_parse=__commonJS({"node_modules/undici/lib/web/cookies/parse.js"(exports,module){"use strict";var{collectASequenceOfCodePointsFast}=require_infra();var{maxNameValuePairSize,maxAttributeValueSize}=require_constants4();var{isCTLExcludingHtab}=require_util4();var assert=__require("assert");function parseSetCookie(header){if(isCTLExcludingHtab(header)){return null}let nameValuePair="";let unparsedAttributes="";let name="";let value="";if(header.includes(";")){const position={position:0};nameValuePair=collectASequenceOfCodePointsFast(";",header,position);unparsedAttributes=header.slice(position.position)}else{nameValuePair=header}if(!nameValuePair.includes("=")){value=nameValuePair}else{const position={position:0};name=collectASequenceOfCodePointsFast("=",nameValuePair,position);value=nameValuePair.slice(position.position+1)}name=name.trim();value=value.trim();if(name.length+value.length>maxNameValuePairSize){return null}return{name,value,...parseUnparsedAttributes(unparsedAttributes)}}function parseUnparsedAttributes(unparsedAttributes,cookieAttributeList={}){if(unparsedAttributes.length===0){return cookieAttributeList}assert(unparsedAttributes[0]===";");unparsedAttributes=unparsedAttributes.slice(1);let cookieAv="";if(unparsedAttributes.includes(";")){cookieAv=collectASequenceOfCodePointsFast(";",unparsedAttributes,{position:0});unparsedAttributes=unparsedAttributes.slice(cookieAv.length)}else{cookieAv=unparsedAttributes;unparsedAttributes=""}let attributeName="";let attributeValue="";if(cookieAv.includes("=")){const position={position:0};attributeName=collectASequenceOfCodePointsFast("=",cookieAv,position);attributeValue=cookieAv.slice(position.position+1)}else{attributeName=cookieAv}attributeName=attributeName.trim();attributeValue=attributeValue.trim();if(attributeValue.length>maxAttributeValueSize){return parseUnparsedAttributes(unparsedAttributes,cookieAttributeList)}const attributeNameLowercase=attributeName.toLowerCase();if(attributeNameLowercase==="expires"){const expiryTime=new Date(attributeValue);cookieAttributeList.expires=expiryTime}else if(attributeNameLowercase==="max-age"){const charCode=attributeValue.charCodeAt(0);if((charCode<48||charCode>57)&&attributeValue[0]!=="-"){return parseUnparsedAttributes(unparsedAttributes,cookieAttributeList)}if(!/^\d+$/.test(attributeValue)){return parseUnparsedAttributes(unparsedAttributes,cookieAttributeList)}const deltaSeconds=Number(attributeValue);cookieAttributeList.maxAge=deltaSeconds}else if(attributeNameLowercase==="domain"){let cookieDomain=attributeValue;if(cookieDomain[0]==="."){cookieDomain=cookieDomain.slice(1)}cookieDomain=cookieDomain.toLowerCase();cookieAttributeList.domain=cookieDomain}else if(attributeNameLowercase==="path"){let cookiePath="";if(attributeValue.length===0||attributeValue[0]!=="/"){cookiePath="/"}else{cookiePath=attributeValue}cookieAttributeList.path=cookiePath}else if(attributeNameLowercase==="secure"){cookieAttributeList.secure=true}else if(attributeNameLowercase==="httponly"){cookieAttributeList.httpOnly=true}else if(attributeNameLowercase==="samesite"){const attributeValueLowercase=attributeValue.toLowerCase();if(attributeValueLowercase==="none"){cookieAttributeList.sameSite="None"}else if(attributeValueLowercase==="strict"){cookieAttributeList.sameSite="Strict"}else if(attributeValueLowercase==="lax"){cookieAttributeList.sameSite="Lax"}}else{cookieAttributeList.unparsed??=[];cookieAttributeList.unparsed.push(`${attributeName}=${attributeValue}`)}return parseUnparsedAttributes(unparsedAttributes,cookieAttributeList)}module.exports={parseSetCookie,parseUnparsedAttributes}}});var require_cookies=__commonJS({"node_modules/undici/lib/web/cookies/index.js"(exports,module){"use strict";var{parseSetCookie}=require_parse();var{stringify}=require_util4();var{webidl}=require_webidl();var{Headers:Headers2}=require_headers();var brandChecks=webidl.brandCheckMultiple([Headers2,globalThis.Headers].filter(Boolean));function getCookies(headers){webidl.argumentLengthCheck(arguments,1,"getCookies");brandChecks(headers);const cookie=headers.get("cookie");const out={};if(!cookie){return out}for(const piece of cookie.split(";")){const[name,...value]=piece.split("=");out[name.trim()]=value.join("=")}return out}function deleteCookie(headers,name,attributes){brandChecks(headers);const prefix="deleteCookie";webidl.argumentLengthCheck(arguments,2,prefix);name=webidl.converters.DOMString(name,prefix,"name");attributes=webidl.converters.DeleteCookieAttributes(attributes);setCookie(headers,{name,value:"",expires:new Date(0),...attributes})}function getSetCookies(headers){webidl.argumentLengthCheck(arguments,1,"getSetCookies");brandChecks(headers);const cookies=headers.getSetCookie();if(!cookies){return[]}return cookies.map(pair=>parseSetCookie(pair))}function parseCookie(cookie){cookie=webidl.converters.DOMString(cookie);return parseSetCookie(cookie)}function setCookie(headers,cookie){webidl.argumentLengthCheck(arguments,2,"setCookie");brandChecks(headers);cookie=webidl.converters.Cookie(cookie);const str3=stringify(cookie);if(str3){headers.append("set-cookie",str3,true)}}webidl.converters.DeleteCookieAttributes=webidl.dictionaryConverter([{converter:webidl.nullableConverter(webidl.converters.DOMString),key:"path",defaultValue:()=>null},{converter:webidl.nullableConverter(webidl.converters.DOMString),key:"domain",defaultValue:()=>null}]);webidl.converters.Cookie=webidl.dictionaryConverter([{converter:webidl.converters.DOMString,key:"name"},{converter:webidl.converters.DOMString,key:"value"},{converter:webidl.nullableConverter(value=>{if(typeof value==="number"){return webidl.converters["unsigned long long"](value)}return new Date(value)}),key:"expires",defaultValue:()=>null},{converter:webidl.nullableConverter(webidl.converters["long long"]),key:"maxAge",defaultValue:()=>null},{converter:webidl.nullableConverter(webidl.converters.DOMString),key:"domain",defaultValue:()=>null},{converter:webidl.nullableConverter(webidl.converters.DOMString),key:"path",defaultValue:()=>null},{converter:webidl.nullableConverter(webidl.converters.boolean),key:"secure",defaultValue:()=>null},{converter:webidl.nullableConverter(webidl.converters.boolean),key:"httpOnly",defaultValue:()=>null},{converter:webidl.converters.USVString,key:"sameSite",allowedValues:["Strict","Lax","None"]},{converter:webidl.sequenceConverter(webidl.converters.DOMString),key:"unparsed",defaultValue:()=>[]}]);module.exports={getCookies,deleteCookie,getSetCookies,setCookie,parseCookie}}});var require_events=__commonJS({"node_modules/undici/lib/web/websocket/events.js"(exports,module){"use strict";var{webidl}=require_webidl();var{kEnumerableProperty}=require_util();var{kConstruct}=require_symbols();var MessageEvent=class _MessageEvent extends Event{#eventInit;constructor(type,eventInitDict={}){if(type===kConstruct){super(arguments[1],arguments[2]);webidl.util.markAsUncloneable(this);return}const prefix="MessageEvent constructor";webidl.argumentLengthCheck(arguments,1,prefix);type=webidl.converters.DOMString(type,prefix,"type");eventInitDict=webidl.converters.MessageEventInit(eventInitDict,prefix,"eventInitDict");super(type,eventInitDict);this.#eventInit=eventInitDict;webidl.util.markAsUncloneable(this)}get data(){webidl.brandCheck(this,_MessageEvent);return this.#eventInit.data}get origin(){webidl.brandCheck(this,_MessageEvent);return this.#eventInit.origin}get lastEventId(){webidl.brandCheck(this,_MessageEvent);return this.#eventInit.lastEventId}get source(){webidl.brandCheck(this,_MessageEvent);return this.#eventInit.source}get ports(){webidl.brandCheck(this,_MessageEvent);if(!Object.isFrozen(this.#eventInit.ports)){Object.freeze(this.#eventInit.ports)}return this.#eventInit.ports}initMessageEvent(type,bubbles=false,cancelable=false,data=null,origin="",lastEventId="",source=null,ports=[]){webidl.brandCheck(this,_MessageEvent);webidl.argumentLengthCheck(arguments,1,"MessageEvent.initMessageEvent");return new _MessageEvent(type,{bubbles,cancelable,data,origin,lastEventId,source,ports})}static createFastMessageEvent(type,init){const messageEvent=new _MessageEvent(kConstruct,type,init);messageEvent.#eventInit=init;messageEvent.#eventInit.data??=null;messageEvent.#eventInit.origin??="";messageEvent.#eventInit.lastEventId??="";messageEvent.#eventInit.source??=null;messageEvent.#eventInit.ports??=[];return messageEvent}};var{createFastMessageEvent}=MessageEvent;delete MessageEvent.createFastMessageEvent;var CloseEvent=class _CloseEvent extends Event{#eventInit;constructor(type,eventInitDict={}){const prefix="CloseEvent constructor";webidl.argumentLengthCheck(arguments,1,prefix);type=webidl.converters.DOMString(type,prefix,"type");eventInitDict=webidl.converters.CloseEventInit(eventInitDict);super(type,eventInitDict);this.#eventInit=eventInitDict;webidl.util.markAsUncloneable(this)}get wasClean(){webidl.brandCheck(this,_CloseEvent);return this.#eventInit.wasClean}get code(){webidl.brandCheck(this,_CloseEvent);return this.#eventInit.code}get reason(){webidl.brandCheck(this,_CloseEvent);return this.#eventInit.reason}};var ErrorEvent=class _ErrorEvent extends Event{#eventInit;constructor(type,eventInitDict){const prefix="ErrorEvent constructor";webidl.argumentLengthCheck(arguments,1,prefix);super(type,eventInitDict);webidl.util.markAsUncloneable(this);type=webidl.converters.DOMString(type,prefix,"type");eventInitDict=webidl.converters.ErrorEventInit(eventInitDict??{});this.#eventInit=eventInitDict}get message(){webidl.brandCheck(this,_ErrorEvent);return this.#eventInit.message}get filename(){webidl.brandCheck(this,_ErrorEvent);return this.#eventInit.filename}get lineno(){webidl.brandCheck(this,_ErrorEvent);return this.#eventInit.lineno}get colno(){webidl.brandCheck(this,_ErrorEvent);return this.#eventInit.colno}get error(){webidl.brandCheck(this,_ErrorEvent);return this.#eventInit.error}};Object.defineProperties(MessageEvent.prototype,{[Symbol.toStringTag]:{value:"MessageEvent",configurable:true},data:kEnumerableProperty,origin:kEnumerableProperty,lastEventId:kEnumerableProperty,source:kEnumerableProperty,ports:kEnumerableProperty,initMessageEvent:kEnumerableProperty});Object.defineProperties(CloseEvent.prototype,{[Symbol.toStringTag]:{value:"CloseEvent",configurable:true},reason:kEnumerableProperty,code:kEnumerableProperty,wasClean:kEnumerableProperty});Object.defineProperties(ErrorEvent.prototype,{[Symbol.toStringTag]:{value:"ErrorEvent",configurable:true},message:kEnumerableProperty,filename:kEnumerableProperty,lineno:kEnumerableProperty,colno:kEnumerableProperty,error:kEnumerableProperty});webidl.converters.MessagePort=webidl.interfaceConverter(webidl.is.MessagePort,"MessagePort");webidl.converters["sequence<MessagePort>"]=webidl.sequenceConverter(webidl.converters.MessagePort);var eventInit=[{key:"bubbles",converter:webidl.converters.boolean,defaultValue:()=>false},{key:"cancelable",converter:webidl.converters.boolean,defaultValue:()=>false},{key:"composed",converter:webidl.converters.boolean,defaultValue:()=>false}];webidl.converters.MessageEventInit=webidl.dictionaryConverter([...eventInit,{key:"data",converter:webidl.converters.any,defaultValue:()=>null},{key:"origin",converter:webidl.converters.USVString,defaultValue:()=>""},{key:"lastEventId",converter:webidl.converters.DOMString,defaultValue:()=>""},{key:"source",converter:webidl.nullableConverter(webidl.converters.MessagePort),defaultValue:()=>null},{key:"ports",converter:webidl.converters["sequence<MessagePort>"],defaultValue:()=>[]}]);webidl.converters.CloseEventInit=webidl.dictionaryConverter([...eventInit,{key:"wasClean",converter:webidl.converters.boolean,defaultValue:()=>false},{key:"code",converter:webidl.converters["unsigned short"],defaultValue:()=>0},{key:"reason",converter:webidl.converters.USVString,defaultValue:()=>""}]);webidl.converters.ErrorEventInit=webidl.dictionaryConverter([...eventInit,{key:"message",converter:webidl.converters.DOMString,defaultValue:()=>""},{key:"filename",converter:webidl.converters.USVString,defaultValue:()=>""},{key:"lineno",converter:webidl.converters["unsigned long"],defaultValue:()=>0},{key:"colno",converter:webidl.converters["unsigned long"],defaultValue:()=>0},{key:"error",converter:webidl.converters.any}]);module.exports={MessageEvent,CloseEvent,ErrorEvent,createFastMessageEvent}}});var require_constants5=__commonJS({"node_modules/undici/lib/web/websocket/constants.js"(exports,module){"use strict";var uid="258EAFA5-E914-47DA-95CA-C5AB0DC85B11";var staticPropertyDescriptors={enumerable:true,writable:false,configurable:false};var states={CONNECTING:0,OPEN:1,CLOSING:2,CLOSED:3};var sentCloseFrameState={SENT:1,RECEIVED:2};var opcodes={CONTINUATION:0,TEXT:1,BINARY:2,CLOSE:8,PING:9,PONG:10};var maxUnsigned16Bit=65535;var parserStates={INFO:0,PAYLOADLENGTH_16:2,PAYLOADLENGTH_64:3,READ_DATA:4};var emptyBuffer=Buffer.allocUnsafe(0);var sendHints={text:1,typedArray:2,arrayBuffer:3,blob:4};module.exports={uid,sentCloseFrameState,staticPropertyDescriptors,states,opcodes,maxUnsigned16Bit,parserStates,emptyBuffer,sendHints}}});var require_util5=__commonJS({"node_modules/undici/lib/web/websocket/util.js"(exports,module){"use strict";var{states,opcodes}=require_constants5();var{isUtf8}=__require("buffer");var{removeHTTPWhitespace}=require_data_url();var{collectASequenceOfCodePointsFast}=require_infra();function isConnecting(readyState){return readyState===states.CONNECTING}function isEstablished(readyState){return readyState===states.OPEN}function isClosing(readyState){return readyState===states.CLOSING}function isClosed(readyState){return readyState===states.CLOSED}function fireEvent(e,target,eventFactory=(type,init)=>new Event(type,init),eventInitDict={}){const event=eventFactory(e,eventInitDict);target.dispatchEvent(event)}function websocketMessageReceived(handler,type,data){handler.onMessage(type,data)}function toArrayBuffer(buffer){if(buffer.byteLength===buffer.buffer.byteLength){return buffer.buffer}return new Uint8Array(buffer).buffer}function isValidSubprotocol(protocol){if(protocol.length===0){return false}for(let i=0;i<protocol.length;++i){const code=protocol.charCodeAt(i);if(code<33||code>126||code===34||code===40||code===41||code===44||code===47||code===58||code===59||code===60||code===61||code===62||code===63||code===64||code===91||code===92||code===93||code===123||code===125){return false}}return true}function isValidStatusCode(code){if(code>=1e3&&code<1015){return code!==1004&&code!==1005&&code!==1006}return code>=3e3&&code<=4999}function isControlFrame(opcode){return opcode===opcodes.CLOSE||opcode===opcodes.PING||opcode===opcodes.PONG}function isContinuationFrame(opcode){return opcode===opcodes.CONTINUATION}function isTextBinaryFrame(opcode){return opcode===opcodes.TEXT||opcode===opcodes.BINARY}function isValidOpcode(opcode){return isTextBinaryFrame(opcode)||isContinuationFrame(opcode)||isControlFrame(opcode)}function parseExtensions(extensions){const position={position:0};const extensionList=new Map;while(position.position<extensions.length){const pair=collectASequenceOfCodePointsFast(";",extensions,position);const[name,value=""]=pair.split("=",2);extensionList.set(removeHTTPWhitespace(name,true,false),removeHTTPWhitespace(value,false,true));position.position++}return extensionList}function isValidClientWindowBits(value){if(value.length===0){return false}for(let i=0;i<value.length;i++){const byte=value.charCodeAt(i);if(byte<48||byte>57){return false}}const num7=Number.parseInt(value,10);return num7>=8&&num7<=15}function getURLRecord(url,baseURL){let urlRecord;try{urlRecord=new URL(url,baseURL)}catch(e){throw new DOMException(e,"SyntaxError")}if(urlRecord.protocol==="http:"){urlRecord.protocol="ws:"}else if(urlRecord.protocol==="https:"){urlRecord.protocol="wss:"}if(urlRecord.protocol!=="ws:"&&urlRecord.protocol!=="wss:"){throw new DOMException("expected a ws: or wss: url","SyntaxError")}if(urlRecord.hash.length||urlRecord.href.endsWith("#")){throw new DOMException("hash","SyntaxError")}return urlRecord}function validateCloseCodeAndReason(code,reason){if(code!==null){if(code!==1e3&&(code<3e3||code>4999)){throw new DOMException("invalid code","InvalidAccessError")}}if(reason!==null){const reasonBytesLength=Buffer.byteLength(reason);if(reasonBytesLength>123){throw new DOMException(`Reason must be less than 123 bytes; received ${reasonBytesLength}`,"SyntaxError")}}}var utf8Decode=(()=>{if(typeof process.versions.icu==="string"){const fatalDecoder=new TextDecoder("utf-8",{fatal:true});return fatalDecoder.decode.bind(fatalDecoder)}return function(buffer){if(isUtf8(buffer)){return buffer.toString("utf-8")}throw new TypeError("Invalid utf-8 received.")}})();module.exports={isConnecting,isEstablished,isClosing,isClosed,fireEvent,isValidSubprotocol,isValidStatusCode,websocketMessageReceived,utf8Decode,isControlFrame,isContinuationFrame,isTextBinaryFrame,isValidOpcode,parseExtensions,isValidClientWindowBits,toArrayBuffer,getURLRecord,validateCloseCodeAndReason}}});var require_frame=__commonJS({"node_modules/undici/lib/web/websocket/frame.js"(exports,module){"use strict";var{runtimeFeatures}=require_runtime_features();var{maxUnsigned16Bit,opcodes}=require_constants5();var BUFFER_SIZE=8*1024;var buffer=null;var bufIdx=BUFFER_SIZE;var randomFillSync=runtimeFeatures.has("crypto")?__require("crypto").randomFillSync:function randomFillSync2(buffer2,_offset,_size){for(let i=0;i<buffer2.length;++i){buffer2[i]=Math.random()*255|0}return buffer2};function generateMask(){if(bufIdx===BUFFER_SIZE){bufIdx=0;randomFillSync(buffer??=Buffer.allocUnsafeSlow(BUFFER_SIZE),0,BUFFER_SIZE)}return[buffer[bufIdx++],buffer[bufIdx++],buffer[bufIdx++],buffer[bufIdx++]]}var WebsocketFrameSend=class{constructor(data){this.frameData=data}createFrame(opcode){const frameData=this.frameData;const maskKey=generateMask();const bodyLength=frameData?.byteLength??0;let payloadLength=bodyLength;let offset=6;if(bodyLength>maxUnsigned16Bit){offset+=8;payloadLength=127}else if(bodyLength>125){offset+=2;payloadLength=126}const buffer2=Buffer.allocUnsafe(bodyLength+offset);buffer2[0]=buffer2[1]=0;buffer2[0]|=128;buffer2[0]=(buffer2[0]&240)+opcode;buffer2[offset-4]=maskKey[0];buffer2[offset-3]=maskKey[1];buffer2[offset-2]=maskKey[2];buffer2[offset-1]=maskKey[3];buffer2[1]=payloadLength;if(payloadLength===126){buffer2.writeUInt16BE(bodyLength,2)}else if(payloadLength===127){buffer2[2]=buffer2[3]=0;buffer2.writeUIntBE(bodyLength,4,6)}buffer2[1]|=128;for(let i=0;i<bodyLength;++i){buffer2[offset+i]=frameData[i]^maskKey[i&3]}return buffer2}static createFastTextFrame(buffer2){const maskKey=generateMask();const bodyLength=buffer2.length;for(let i=0;i<bodyLength;++i){buffer2[i]^=maskKey[i&3]}let payloadLength=bodyLength;let offset=6;if(bodyLength>maxUnsigned16Bit){offset+=8;payloadLength=127}else if(bodyLength>125){offset+=2;payloadLength=126}const head=Buffer.allocUnsafeSlow(offset);head[0]=128|opcodes.TEXT;head[1]=payloadLength|128;head[offset-4]=maskKey[0];head[offset-3]=maskKey[1];head[offset-2]=maskKey[2];head[offset-1]=maskKey[3];if(payloadLength===126){head.writeUInt16BE(bodyLength,2)}else if(payloadLength===127){head[2]=head[3]=0;head.writeUIntBE(bodyLength,4,6)}return[head,buffer2]}};module.exports={WebsocketFrameSend,generateMask}}});var require_connection=__commonJS({"node_modules/undici/lib/web/websocket/connection.js"(exports,module){"use strict";var{uid,states,sentCloseFrameState,emptyBuffer,opcodes}=require_constants5();var{parseExtensions,isClosed,isClosing,isEstablished,isConnecting,validateCloseCodeAndReason}=require_util5();var{makeRequest}=require_request2();var{fetching}=require_fetch();var{Headers:Headers2,getHeadersList}=require_headers();var{getDecodeSplit}=require_util2();var{WebsocketFrameSend}=require_frame();var assert=__require("assert");var{runtimeFeatures}=require_runtime_features();var crypto5=runtimeFeatures.has("crypto")?__require("crypto"):null;var warningEmitted=false;function establishWebSocketConnection(url,protocols,client,handler,options){const requestURL=url;requestURL.protocol=url.protocol==="ws:"?"http:":"https:";const request=makeRequest({urlList:[requestURL],client,serviceWorkers:"none",referrer:"no-referrer",mode:"websocket",credentials:"include",cache:"no-store",redirect:"error",useURLCredentials:true});if(options.headers){const headersList=getHeadersList(new Headers2(options.headers));request.headersList=headersList}const keyValue2=crypto5.randomBytes(16).toString("base64");request.headersList.append("sec-websocket-key",keyValue2,true);request.headersList.append("sec-websocket-version","13",true);for(const protocol of protocols){request.headersList.append("sec-websocket-protocol",protocol,true)}const permessageDeflate="permessage-deflate; client_max_window_bits";request.headersList.append("sec-websocket-extensions",permessageDeflate,true);const controller=fetching({request,useParallelQueue:true,dispatcher:options.dispatcher,processResponse(response){if(response.type==="error"||response.status!==101){if(response.socket?.session==null){failWebsocketConnection(handler,1002,"Received network error or non-101 status code.",response.error);return}if(response.status!==200){failWebsocketConnection(handler,1002,"Received network error or non-200 status code.",response.error);return}}if(warningEmitted===false&&response.socket?.session!=null){process.emitWarning("WebSocket over HTTP2 is experimental, and subject to change.","ExperimentalWarning");warningEmitted=true}if(protocols.length!==0&&!response.headersList.get("Sec-WebSocket-Protocol")){failWebsocketConnection(handler,1002,"Server did not respond with sent protocols.");return}if(response.socket.session==null&&response.headersList.get("Upgrade")?.toLowerCase()!=="websocket"){failWebsocketConnection(handler,1002,'Server did not set Upgrade header to "websocket".');return}if(response.socket.session==null&&response.headersList.get("Connection")?.toLowerCase()!=="upgrade"){failWebsocketConnection(handler,1002,'Server did not set Connection header to "upgrade".');return}const secWSAccept=response.headersList.get("Sec-WebSocket-Accept");const digest=crypto5.hash("sha1",keyValue2+uid,"base64");if(secWSAccept!==digest){failWebsocketConnection(handler,1002,"Incorrect hash received in Sec-WebSocket-Accept header.");return}const secExtension=response.headersList.get("Sec-WebSocket-Extensions");let extensions;if(secExtension!==null){extensions=parseExtensions(secExtension);if(!extensions.has("permessage-deflate")){failWebsocketConnection(handler,1002,"Sec-WebSocket-Extensions header does not match.");return}}const secProtocol=response.headersList.get("Sec-WebSocket-Protocol");if(secProtocol!==null){const requestProtocols=getDecodeSplit("sec-websocket-protocol",request.headersList);if(!requestProtocols.includes(secProtocol)){failWebsocketConnection(handler,1002,"Protocol was not set in the opening handshake.");return}}response.socket.on("data",handler.onSocketData);response.socket.on("close",handler.onSocketClose);response.socket.on("error",handler.onSocketError);handler.wasEverConnected=true;handler.onConnectionEstablished(response,extensions)}});return controller}function closeWebSocketConnection(object3,code,reason,validate=false){code??=null;reason??="";if(validate)validateCloseCodeAndReason(code,reason);if(isClosed(object3.readyState)||isClosing(object3.readyState)){}else if(!isEstablished(object3.readyState)){failWebsocketConnection(object3);object3.readyState=states.CLOSING}else if(!object3.closeState.has(sentCloseFrameState.SENT)&&!object3.closeState.has(sentCloseFrameState.RECEIVED)){const frame=new WebsocketFrameSend;if(reason.length!==0&&code===null){code=1e3}assert(code===null||Number.isInteger(code));if(code===null&&reason.length===0){frame.frameData=emptyBuffer}else if(code!==null&&reason===null){frame.frameData=Buffer.allocUnsafe(2);frame.frameData.writeUInt16BE(code,0)}else if(code!==null&&reason!==null){frame.frameData=Buffer.allocUnsafe(2+Buffer.byteLength(reason));frame.frameData.writeUInt16BE(code,0);frame.frameData.write(reason,2,"utf-8")}else{frame.frameData=emptyBuffer}object3.socket.write(frame.createFrame(opcodes.CLOSE));object3.closeState.add(sentCloseFrameState.SENT);object3.readyState=states.CLOSING}else{object3.readyState=states.CLOSING}}function failWebsocketConnection(handler,code,reason,cause){if(isEstablished(handler.readyState)){closeWebSocketConnection(handler,code,reason,false)}handler.controller.abort();if(isConnecting(handler.readyState)){handler.onSocketClose()}else if(handler.socket?.destroyed===false){handler.socket.destroy()}}module.exports={establishWebSocketConnection,failWebsocketConnection,closeWebSocketConnection}}});var require_permessage_deflate=__commonJS({"node_modules/undici/lib/web/websocket/permessage-deflate.js"(exports,module){"use strict";var{createInflateRaw:createInflateRaw2,Z_DEFAULT_WINDOWBITS}=__require("zlib");var{isValidClientWindowBits}=require_util5();var{MessageSizeExceededError}=require_errors();var tail=Buffer.from([0,0,255,255]);var kBuffer=Symbol("kBuffer");var kLength=Symbol("kLength");var PerMessageDeflate2=class{#inflate;#options={};#maxPayloadSize=0;constructor(extensions,options){this.#options.serverNoContextTakeover=extensions.has("server_no_context_takeover");this.#options.serverMaxWindowBits=extensions.get("server_max_window_bits");this.#maxPayloadSize=options.maxPayloadSize}decompress(chunk,fin,callback){if(!this.#inflate){let windowBits=Z_DEFAULT_WINDOWBITS;if(this.#options.serverMaxWindowBits){if(!isValidClientWindowBits(this.#options.serverMaxWindowBits)){callback(new Error("Invalid server_max_window_bits"));return}windowBits=Number.parseInt(this.#options.serverMaxWindowBits)}try{this.#inflate=createInflateRaw2({windowBits})}catch(err2){callback(err2);return}this.#inflate[kBuffer]=[];this.#inflate[kLength]=0;this.#inflate.on("data",data=>{this.#inflate[kLength]+=data.length;if(this.#maxPayloadSize>0&&this.#inflate[kLength]>this.#maxPayloadSize){callback(new MessageSizeExceededError);this.#inflate.removeAllListeners();this.#inflate=null;return}this.#inflate[kBuffer].push(data)});this.#inflate.on("error",err2=>{this.#inflate=null;callback(err2)})}this.#inflate.write(chunk);if(fin){this.#inflate.write(tail)}this.#inflate.flush(()=>{if(!this.#inflate){return}const full=Buffer.concat(this.#inflate[kBuffer],this.#inflate[kLength]);this.#inflate[kBuffer].length=0;this.#inflate[kLength]=0;callback(null,full)})}};module.exports={PerMessageDeflate:PerMessageDeflate2}}});var require_receiver=__commonJS({"node_modules/undici/lib/web/websocket/receiver.js"(exports,module){"use strict";var{Writable}=__require("stream");var assert=__require("assert");var{parserStates,opcodes,states,emptyBuffer,sentCloseFrameState}=require_constants5();var{isValidStatusCode,isValidOpcode,websocketMessageReceived,utf8Decode,isControlFrame,isTextBinaryFrame,isContinuationFrame}=require_util5();var{failWebsocketConnection}=require_connection();var{WebsocketFrameSend}=require_frame();var{PerMessageDeflate:PerMessageDeflate2}=require_permessage_deflate();var{MessageSizeExceededError}=require_errors();var ByteParser=class extends Writable{#buffers=[];#fragmentsBytes=0;#byteOffset=0;#loop=false;#state=parserStates.INFO;#info={};#fragments=[];#extensions;#handler;#maxFragments;#maxPayloadSize;constructor(handler,extensions,options={}){super();this.#handler=handler;this.#extensions=extensions==null?new Map:extensions;this.#maxFragments=options.maxFragments??0;this.#maxPayloadSize=options.maxPayloadSize??0;if(this.#extensions.has("permessage-deflate")){this.#extensions.set("permessage-deflate",new PerMessageDeflate2(extensions,options))}}_write(chunk,_2,callback){this.#buffers.push(chunk);this.#byteOffset+=chunk.length;this.#loop=true;this.run(callback)}#validatePayloadLength(){if(this.#maxPayloadSize>0&&!isControlFrame(this.#info.opcode)&&this.#info.payloadLength+this.#fragmentsBytes>this.#maxPayloadSize){failWebsocketConnection(this.#handler,1009,"Payload size exceeds maximum allowed size");return false}return true}run(callback){while(this.#loop){if(this.#state===parserStates.INFO){if(this.#byteOffset<2){return callback()}const buffer=this.consume(2);const fin=(buffer[0]&128)!==0;const opcode=buffer[0]&15;const masked=(buffer[1]&128)===128;const fragmented=!fin&&opcode!==opcodes.CONTINUATION;const payloadLength=buffer[1]&127;const rsv1=buffer[0]&64;const rsv2=buffer[0]&32;const rsv3=buffer[0]&16;if(!isValidOpcode(opcode)){failWebsocketConnection(this.#handler,1002,"Invalid opcode received");return callback()}if(masked){failWebsocketConnection(this.#handler,1002,"Frame cannot be masked");return callback()}if(rsv1!==0&&!this.#extensions.has("permessage-deflate")){failWebsocketConnection(this.#handler,1002,"Expected RSV1 to be clear.");return}if(rsv2!==0||rsv3!==0){failWebsocketConnection(this.#handler,1002,"RSV1, RSV2, RSV3 must be clear");return}if(fragmented&&!isTextBinaryFrame(opcode)){failWebsocketConnection(this.#handler,1002,"Invalid frame type was fragmented.");return}if(isTextBinaryFrame(opcode)&&this.#fragments.length>0){failWebsocketConnection(this.#handler,1002,"Expected continuation frame");return}if(this.#info.fragmented&&fragmented){failWebsocketConnection(this.#handler,1002,"Fragmented frame exceeded 125 bytes.");return}if((payloadLength>125||fragmented)&&isControlFrame(opcode)){failWebsocketConnection(this.#handler,1002,"Control frame either too large or fragmented");return}if(isContinuationFrame(opcode)&&this.#fragments.length===0&&!this.#info.compressed){failWebsocketConnection(this.#handler,1002,"Unexpected continuation frame");return}if(payloadLength<=125){this.#info.payloadLength=payloadLength;this.#state=parserStates.READ_DATA;if(!this.#validatePayloadLength()){return}}else if(payloadLength===126){this.#state=parserStates.PAYLOADLENGTH_16}else if(payloadLength===127){this.#state=parserStates.PAYLOADLENGTH_64}if(isTextBinaryFrame(opcode)){this.#info.binaryType=opcode;this.#info.compressed=rsv1!==0}this.#info.opcode=opcode;this.#info.masked=masked;this.#info.fin=fin;this.#info.fragmented=fragmented}else if(this.#state===parserStates.PAYLOADLENGTH_16){if(this.#byteOffset<2){return callback()}const buffer=this.consume(2);this.#info.payloadLength=buffer.readUInt16BE(0);this.#state=parserStates.READ_DATA;if(!this.#validatePayloadLength()){return}}else if(this.#state===parserStates.PAYLOADLENGTH_64){if(this.#byteOffset<8){return callback()}const buffer=this.consume(8);const upper=buffer.readUInt32BE(0);const lower=buffer.readUInt32BE(4);if(upper!==0||lower>2**31-1){failWebsocketConnection(this.#handler,1009,"Received payload length > 2^31 bytes.");return}this.#info.payloadLength=lower;this.#state=parserStates.READ_DATA;if(!this.#validatePayloadLength()){return}}else if(this.#state===parserStates.READ_DATA){if(this.#byteOffset<this.#info.payloadLength){return callback()}const body=this.consume(this.#info.payloadLength);if(isControlFrame(this.#info.opcode)){this.#loop=this.parseControlFrame(body);this.#state=parserStates.INFO}else{if(!this.#info.compressed){if(!this.writeFragments(body)){return}if(!this.#info.fragmented&&this.#info.fin){websocketMessageReceived(this.#handler,this.#info.binaryType,this.consumeFragments())}this.#state=parserStates.INFO}else{this.#extensions.get("permessage-deflate").decompress(body,this.#info.fin,(error,data)=>{if(error){const code=error instanceof MessageSizeExceededError?1009:1007;failWebsocketConnection(this.#handler,code,error.message);return}if(!this.writeFragments(data)){return}if(this.#maxPayloadSize>0&&this.#fragmentsBytes>this.#maxPayloadSize){failWebsocketConnection(this.#handler,1009,new MessageSizeExceededError().message);return}if(!this.#info.fin){this.#state=parserStates.INFO;this.#loop=true;this.run(callback);return}websocketMessageReceived(this.#handler,this.#info.binaryType,this.consumeFragments());this.#loop=true;this.#state=parserStates.INFO;this.run(callback)},this.#fragmentsBytes);this.#loop=false;break}}}}}consume(n){if(n>this.#byteOffset){throw new Error("Called consume() before buffers satiated.")}else if(n===0){return emptyBuffer}this.#byteOffset-=n;const first=this.#buffers[0];if(first.length>n){this.#buffers[0]=first.subarray(n,first.length);return first.subarray(0,n)}else if(first.length===n){return this.#buffers.shift()}else{let offset=0;const buffer=Buffer.allocUnsafeSlow(n);while(offset!==n){const next=this.#buffers[0];const length=next.length;if(length+offset===n){buffer.set(this.#buffers.shift(),offset);break}else if(length+offset>n){buffer.set(next.subarray(0,n-offset),offset);this.#buffers[0]=next.subarray(n-offset);break}else{buffer.set(this.#buffers.shift(),offset);offset+=length}}return buffer}}writeFragments(fragment){if(this.#maxFragments>0&&this.#fragments.length===this.#maxFragments){failWebsocketConnection(this.#handler,1008,"Too many message fragments");return false}this.#fragmentsBytes+=fragment.length;this.#fragments.push(fragment);return true}consumeFragments(){const fragments=this.#fragments;if(fragments.length===1){this.#fragmentsBytes=0;return fragments.shift()}let offset=0;const output=Buffer.allocUnsafeSlow(this.#fragmentsBytes);for(let i=0;i<fragments.length;++i){const buffer=fragments[i];output.set(buffer,offset);offset+=buffer.length}this.#fragments=[];this.#fragmentsBytes=0;return output}parseCloseBody(data){assert(data.length!==1);let code;if(data.length>=2){code=data.readUInt16BE(0)}if(code!==void 0&&!isValidStatusCode(code)){return{code:1002,reason:"Invalid status code",error:true}}let reason=data.subarray(2);if(reason[0]===239&&reason[1]===187&&reason[2]===191){reason=reason.subarray(3)}try{reason=utf8Decode(reason)}catch{return{code:1007,reason:"Invalid UTF-8",error:true}}return{code,reason,error:false}}parseControlFrame(body){const{opcode,payloadLength}=this.#info;if(opcode===opcodes.CLOSE){if(payloadLength===1){failWebsocketConnection(this.#handler,1002,"Received close frame with a 1-byte body.");return false}this.#info.closeInfo=this.parseCloseBody(body);if(this.#info.closeInfo.error){const{code,reason}=this.#info.closeInfo;failWebsocketConnection(this.#handler,code,reason);return false}if(!this.#handler.closeState.has(sentCloseFrameState.SENT)&&!this.#handler.closeState.has(sentCloseFrameState.RECEIVED)){let body2=emptyBuffer;if(this.#info.closeInfo.code){body2=Buffer.allocUnsafe(2);body2.writeUInt16BE(this.#info.closeInfo.code,0)}const closeFrame=new WebsocketFrameSend(body2);this.#handler.socket.write(closeFrame.createFrame(opcodes.CLOSE));this.#handler.closeState.add(sentCloseFrameState.SENT)}this.#handler.readyState=states.CLOSING;this.#handler.closeState.add(sentCloseFrameState.RECEIVED);return false}else if(opcode===opcodes.PING){if(!this.#handler.closeState.has(sentCloseFrameState.RECEIVED)){const frame=new WebsocketFrameSend(body);this.#handler.socket.write(frame.createFrame(opcodes.PONG));this.#handler.onPing(body)}}else if(opcode===opcodes.PONG){this.#handler.onPong(body)}return true}get closingInfo(){return this.#info.closeInfo}};module.exports={ByteParser}}});var require_sender=__commonJS({"node_modules/undici/lib/web/websocket/sender.js"(exports,module){"use strict";var{WebsocketFrameSend}=require_frame();var{opcodes,sendHints}=require_constants5();var FixedQueue=require_fixed_queue();var SendQueue=class{#queue=new FixedQueue;#running=false;#socket;constructor(socket){this.#socket=socket}add(item,cb,hint){if(hint!==sendHints.blob){if(!this.#running){if(hint===sendHints.text){const{0:head,1:body}=WebsocketFrameSend.createFastTextFrame(item);this.#socket.cork();this.#socket.write(head);this.#socket.write(body,cb);this.#socket.uncork()}else{this.#socket.write(createFrame(item,hint),cb)}}else{const node2={promise:null,callback:cb,frame:createFrame(item,hint)};this.#queue.push(node2)}return}const node={promise:item.arrayBuffer().then(ab2=>{node.promise=null;node.frame=createFrame(ab2,hint)}),callback:cb,frame:null};this.#queue.push(node);if(!this.#running){this.#run()}}async#run(){this.#running=true;const queue=this.#queue;while(!queue.isEmpty()){const node=queue.shift();if(node.promise!==null){await node.promise}this.#socket.write(node.frame,node.callback);node.callback=node.frame=null}this.#running=false}};function createFrame(data,hint){return new WebsocketFrameSend(toBuffer(data,hint)).createFrame(hint===sendHints.text?opcodes.TEXT:opcodes.BINARY)}function toBuffer(data,hint){switch(hint){case sendHints.text:case sendHints.typedArray:return new Uint8Array(data.buffer,data.byteOffset,data.byteLength);case sendHints.arrayBuffer:case sendHints.blob:return new Uint8Array(data)}}module.exports={SendQueue}}});var require_websocket=__commonJS({"node_modules/undici/lib/web/websocket/websocket.js"(exports,module){"use strict";var{isArrayBuffer}=__require("util/types");var{webidl}=require_webidl();var{URLSerializer}=require_data_url();var{environmentSettingsObject}=require_util2();var{staticPropertyDescriptors,states,sentCloseFrameState,sendHints,opcodes}=require_constants5();var{isConnecting,isEstablished,isClosing,isClosed,isValidSubprotocol,fireEvent,utf8Decode,toArrayBuffer,getURLRecord}=require_util5();var{establishWebSocketConnection,closeWebSocketConnection,failWebsocketConnection}=require_connection();var{ByteParser}=require_receiver();var{kEnumerableProperty}=require_util();var{getGlobalDispatcher}=require_global2();var{ErrorEvent,CloseEvent,createFastMessageEvent}=require_events();var{SendQueue}=require_sender();var{WebsocketFrameSend}=require_frame();var{channels}=require_diagnostics();function getSocketAddress(socket){if(typeof socket?.address==="function"){return socket.address()}if(typeof socket?.session?.socket?.address==="function"){return socket.session.socket.address()}return null}var WebSocket3=class _WebSocket extends EventTarget{#events={open:null,error:null,close:null,message:null};#bufferedAmount=0;#protocol="";#extensions="";#sendQueue;#handler={onConnectionEstablished:(response,extensions)=>this.#onConnectionEstablished(response,extensions),onMessage:(opcode,data)=>this.#onMessage(opcode,data),onParserError:err2=>failWebsocketConnection(this.#handler,null,err2.message),onParserDrain:()=>this.#onParserDrain(),onSocketData:chunk=>{if(!this.#parser.write(chunk)){this.#handler.socket.pause()}},onSocketError:err2=>{this.#handler.readyState=states.CLOSING;if(channels.socketError.hasSubscribers){channels.socketError.publish(err2)}this.#handler.socket.destroy()},onSocketClose:()=>this.#onSocketClose(),onPing:body=>{if(channels.ping.hasSubscribers){channels.ping.publish({payload:body,websocket:this})}},onPong:body=>{if(channels.pong.hasSubscribers){channels.pong.publish({payload:body,websocket:this})}},readyState:states.CONNECTING,socket:null,closeState:new Set,controller:null,wasEverConnected:false};#url;#binaryType;#parser;constructor(url,protocols=[]){super();webidl.util.markAsUncloneable(this);const prefix="WebSocket constructor";webidl.argumentLengthCheck(arguments,1,prefix);const options=webidl.converters["DOMString or sequence<DOMString> or WebSocketInit"](protocols,prefix,"options");url=webidl.converters.USVString(url);protocols=options.protocols;const baseURL=environmentSettingsObject.settingsObject.baseUrl;const urlRecord=getURLRecord(url,baseURL);if(typeof protocols==="string"){protocols=[protocols]}if(protocols.length!==new Set(protocols.map(p2=>p2.toLowerCase())).size){throw new DOMException("Invalid Sec-WebSocket-Protocol value","SyntaxError")}if(protocols.length>0&&!protocols.every(p2=>isValidSubprotocol(p2))){throw new DOMException("Invalid Sec-WebSocket-Protocol value","SyntaxError")}this.#url=new URL(urlRecord.href);const client=environmentSettingsObject.settingsObject;this.#handler.controller=establishWebSocketConnection(urlRecord,protocols,client,this.#handler,options);this.#handler.readyState=_WebSocket.CONNECTING;this.#binaryType="blob"}close(code=void 0,reason=void 0){webidl.brandCheck(this,_WebSocket);const prefix="WebSocket.close";if(code!==void 0){code=webidl.converters["unsigned short"](code,prefix,"code",webidl.attributes.Clamp)}if(reason!==void 0){reason=webidl.converters.USVString(reason)}code??=null;reason??="";closeWebSocketConnection(this.#handler,code,reason,true)}send(data){webidl.brandCheck(this,_WebSocket);const prefix="WebSocket.send";webidl.argumentLengthCheck(arguments,1,prefix);data=webidl.converters.WebSocketSendData(data,prefix,"data");if(isConnecting(this.#handler.readyState)){throw new DOMException("Sent before connected.","InvalidStateError")}if(!isEstablished(this.#handler.readyState)||isClosing(this.#handler.readyState)){return}if(typeof data==="string"){const buffer=Buffer.from(data);this.#bufferedAmount+=buffer.byteLength;this.#sendQueue.add(buffer,()=>{this.#bufferedAmount-=buffer.byteLength},sendHints.text)}else if(isArrayBuffer(data)){this.#bufferedAmount+=data.byteLength;this.#sendQueue.add(data,()=>{this.#bufferedAmount-=data.byteLength},sendHints.arrayBuffer)}else if(ArrayBuffer.isView(data)){this.#bufferedAmount+=data.byteLength;this.#sendQueue.add(data,()=>{this.#bufferedAmount-=data.byteLength},sendHints.typedArray)}else if(webidl.is.Blob(data)){this.#bufferedAmount+=data.size;this.#sendQueue.add(data,()=>{this.#bufferedAmount-=data.size},sendHints.blob)}}get readyState(){webidl.brandCheck(this,_WebSocket);return this.#handler.readyState}get bufferedAmount(){webidl.brandCheck(this,_WebSocket);return this.#bufferedAmount}get url(){webidl.brandCheck(this,_WebSocket);return URLSerializer(this.#url)}get extensions(){webidl.brandCheck(this,_WebSocket);return this.#extensions}get protocol(){webidl.brandCheck(this,_WebSocket);return this.#protocol}get onopen(){webidl.brandCheck(this,_WebSocket);return this.#events.open}set onopen(fn){webidl.brandCheck(this,_WebSocket);if(this.#events.open){this.removeEventListener("open",this.#events.open)}const listener=webidl.converters.EventHandlerNonNull(fn);if(listener!==null){this.addEventListener("open",listener);this.#events.open=fn}else{this.#events.open=null}}get onerror(){webidl.brandCheck(this,_WebSocket);return this.#events.error}set onerror(fn){webidl.brandCheck(this,_WebSocket);if(this.#events.error){this.removeEventListener("error",this.#events.error)}const listener=webidl.converters.EventHandlerNonNull(fn);if(listener!==null){this.addEventListener("error",listener);this.#events.error=fn}else{this.#events.error=null}}get onclose(){webidl.brandCheck(this,_WebSocket);return this.#events.close}set onclose(fn){webidl.brandCheck(this,_WebSocket);if(this.#events.close){this.removeEventListener("close",this.#events.close)}const listener=webidl.converters.EventHandlerNonNull(fn);if(listener!==null){this.addEventListener("close",listener);this.#events.close=fn}else{this.#events.close=null}}get onmessage(){webidl.brandCheck(this,_WebSocket);return this.#events.message}set onmessage(fn){webidl.brandCheck(this,_WebSocket);if(this.#events.message){this.removeEventListener("message",this.#events.message)}const listener=webidl.converters.EventHandlerNonNull(fn);if(listener!==null){this.addEventListener("message",listener);this.#events.message=fn}else{this.#events.message=null}}get binaryType(){webidl.brandCheck(this,_WebSocket);return this.#binaryType}set binaryType(type){webidl.brandCheck(this,_WebSocket);if(type!=="blob"&&type!=="arraybuffer"){this.#binaryType="blob"}else{this.#binaryType=type}}#onConnectionEstablished(response,parsedExtensions){this.#handler.socket=response.socket;const webSocketOptions=this.#handler.controller.dispatcher?.webSocketOptions;const maxFragments=webSocketOptions?.maxFragments;const maxPayloadSize=webSocketOptions?.maxPayloadSize;const parser=new ByteParser(this.#handler,parsedExtensions,{maxFragments,maxPayloadSize});parser.on("drain",()=>this.#handler.onParserDrain());parser.on("error",err2=>this.#handler.onParserError(err2));this.#parser=parser;this.#sendQueue=new SendQueue(response.socket);this.#handler.readyState=states.OPEN;const extensions=response.headersList.get("sec-websocket-extensions");if(extensions!==null){this.#extensions=extensions}const protocol=response.headersList.get("sec-websocket-protocol");if(protocol!==null){this.#protocol=protocol}fireEvent("open",this);if(channels.open.hasSubscribers){const headers=response.headersList.entries;channels.open.publish({address:getSocketAddress(response.socket),protocol:this.#protocol,extensions:this.#extensions,websocket:this,handshakeResponse:{status:response.status,statusText:response.statusText,headers}})}}#onMessage(type,data){if(this.#handler.readyState!==states.OPEN){return}let dataForEvent;if(type===opcodes.TEXT){try{dataForEvent=utf8Decode(data)}catch{failWebsocketConnection(this.#handler,1007,"Received invalid UTF-8 in text frame.");return}}else if(type===opcodes.BINARY){if(this.#binaryType==="blob"){dataForEvent=new Blob([data])}else{dataForEvent=toArrayBuffer(data)}}fireEvent("message",this,createFastMessageEvent,{origin:this.#url.origin,data:dataForEvent})}#onParserDrain(){this.#handler.socket.resume()}#onSocketClose(){const wasClean=this.#handler.closeState.has(sentCloseFrameState.SENT)&&this.#handler.closeState.has(sentCloseFrameState.RECEIVED);let code=1005;let reason="";const result=this.#parser?.closingInfo;if(result&&!result.error){code=result.code??1005;reason=result.reason}this.#handler.readyState=states.CLOSED;if(!this.#handler.closeState.has(sentCloseFrameState.RECEIVED)){code=1006;fireEvent("error",this,(type,init)=>new ErrorEvent(type,init),{error:new TypeError(reason)})}fireEvent("close",this,(type,init)=>new CloseEvent(type,init),{wasClean,code,reason});if(channels.close.hasSubscribers){channels.close.publish({websocket:this,code,reason})}}static ping(ws2,buffer){if(Buffer.isBuffer(buffer)){if(buffer.length>125){throw new TypeError("A PING frame cannot have a body larger than 125 bytes.")}}else if(buffer!==void 0){throw new TypeError("Expected buffer payload")}const readyState=ws2.#handler.readyState;if(isEstablished(readyState)&&!isClosing(readyState)&&!isClosed(readyState)){const frame=new WebsocketFrameSend(buffer);ws2.#handler.socket.write(frame.createFrame(opcodes.PING))}}};var{ping}=WebSocket3;Reflect.deleteProperty(WebSocket3,"ping");WebSocket3.CONNECTING=WebSocket3.prototype.CONNECTING=states.CONNECTING;WebSocket3.OPEN=WebSocket3.prototype.OPEN=states.OPEN;WebSocket3.CLOSING=WebSocket3.prototype.CLOSING=states.CLOSING;WebSocket3.CLOSED=WebSocket3.prototype.CLOSED=states.CLOSED;Object.defineProperties(WebSocket3.prototype,{CONNECTING:staticPropertyDescriptors,OPEN:staticPropertyDescriptors,CLOSING:staticPropertyDescriptors,CLOSED:staticPropertyDescriptors,url:kEnumerableProperty,readyState:kEnumerableProperty,bufferedAmount:kEnumerableProperty,onopen:kEnumerableProperty,onerror:kEnumerableProperty,onclose:kEnumerableProperty,close:kEnumerableProperty,onmessage:kEnumerableProperty,binaryType:kEnumerableProperty,send:kEnumerableProperty,extensions:kEnumerableProperty,protocol:kEnumerableProperty,[Symbol.toStringTag]:{value:"WebSocket",writable:false,enumerable:false,configurable:true}});Object.defineProperties(WebSocket3,{CONNECTING:staticPropertyDescriptors,OPEN:staticPropertyDescriptors,CLOSING:staticPropertyDescriptors,CLOSED:staticPropertyDescriptors});webidl.converters["sequence<DOMString>"]=webidl.sequenceConverter(webidl.converters.DOMString);webidl.converters["DOMString or sequence<DOMString>"]=function(V2,prefix,argument){if(webidl.util.Type(V2)===webidl.util.Types.OBJECT&&Symbol.iterator in V2){return webidl.converters["sequence<DOMString>"](V2)}return webidl.converters.DOMString(V2,prefix,argument)};webidl.converters.WebSocketInit=webidl.dictionaryConverter([{key:"protocols",converter:webidl.converters["DOMString or sequence<DOMString>"],defaultValue:()=>[]},{key:"dispatcher",converter:webidl.converters.any,defaultValue:()=>getGlobalDispatcher()},{key:"headers",converter:webidl.nullableConverter(webidl.converters.HeadersInit)}]);webidl.converters["DOMString or sequence<DOMString> or WebSocketInit"]=function(V2){if(webidl.util.Type(V2)===webidl.util.Types.OBJECT&&!(Symbol.iterator in V2)){return webidl.converters.WebSocketInit(V2)}return{protocols:webidl.converters["DOMString or sequence<DOMString>"](V2)}};webidl.converters.WebSocketSendData=function(V2){if(webidl.util.Type(V2)===webidl.util.Types.OBJECT){if(webidl.is.Blob(V2)){return V2}if(webidl.is.BufferSource(V2)){return V2}}return webidl.converters.USVString(V2)};module.exports={WebSocket:WebSocket3,ping}}});var require_websocketerror=__commonJS({"node_modules/undici/lib/web/websocket/stream/websocketerror.js"(exports,module){"use strict";var{webidl}=require_webidl();var{validateCloseCodeAndReason}=require_util5();var{kConstruct}=require_symbols();var{kEnumerableProperty}=require_util();function createInheritableDOMException(){class Test extends DOMException{get reason(){return""}}if(new Test().reason!==void 0){return DOMException}return new Proxy(DOMException,{construct(target,args,newTarget){const instance=Reflect.construct(target,args,target);Object.setPrototypeOf(instance,newTarget.prototype);return instance}})}var WebSocketError=class _WebSocketError extends createInheritableDOMException(){#closeCode;#reason;constructor(message="",init=void 0){message=webidl.converters.DOMString(message,"WebSocketError","message");super(message,"WebSocketError");if(init===kConstruct){return}else if(init!==null){init=webidl.converters.WebSocketCloseInfo(init)}let code=init.closeCode??null;const reason=init.reason??"";validateCloseCodeAndReason(code,reason);if(reason.length!==0&&code===null){code=1e3}this.#closeCode=code;this.#reason=reason}get closeCode(){return this.#closeCode}get reason(){return this.#reason}static createUnvalidatedWebSocketError(message,code,reason){const error=new _WebSocketError(message,kConstruct);error.#closeCode=code;error.#reason=reason;return error}};var{createUnvalidatedWebSocketError}=WebSocketError;delete WebSocketError.createUnvalidatedWebSocketError;Object.defineProperties(WebSocketError.prototype,{closeCode:kEnumerableProperty,reason:kEnumerableProperty,[Symbol.toStringTag]:{value:"WebSocketError",writable:false,enumerable:false,configurable:true}});webidl.is.WebSocketError=webidl.util.MakeTypeAssertion(WebSocketError);module.exports={WebSocketError,createUnvalidatedWebSocketError}}});var require_websocketstream=__commonJS({"node_modules/undici/lib/web/websocket/stream/websocketstream.js"(exports,module){"use strict";var{createDeferredPromise}=require_promise();var{environmentSettingsObject}=require_util2();var{states,opcodes,sentCloseFrameState}=require_constants5();var{webidl}=require_webidl();var{getURLRecord,isValidSubprotocol,isEstablished,utf8Decode}=require_util5();var{establishWebSocketConnection,failWebsocketConnection,closeWebSocketConnection}=require_connection();var{channels}=require_diagnostics();var{WebsocketFrameSend}=require_frame();var{ByteParser}=require_receiver();var{WebSocketError,createUnvalidatedWebSocketError}=require_websocketerror();var{kEnumerableProperty}=require_util();var{utf8DecodeBytes}=require_encoding();var emittedExperimentalWarning=false;var WebSocketStream=class{#url;#openedPromise;#closedPromise;#readableStream;#readableStreamController;#writableStream;#handshakeAborted=false;#handler={onConnectionEstablished:(response,extensions)=>this.#onConnectionEstablished(response,extensions),onMessage:(opcode,data)=>this.#onMessage(opcode,data),onParserError:err2=>failWebsocketConnection(this.#handler,null,err2.message),onParserDrain:()=>this.#handler.socket.resume(),onSocketData:chunk=>{if(!this.#parser.write(chunk)){this.#handler.socket.pause()}},onSocketError:err2=>{this.#handler.readyState=states.CLOSING;if(channels.socketError.hasSubscribers){channels.socketError.publish(err2)}this.#handler.socket.destroy()},onSocketClose:()=>this.#onSocketClose(),onPing:()=>{},onPong:()=>{},readyState:states.CONNECTING,socket:null,closeState:new Set,controller:null,wasEverConnected:false};#parser;constructor(url,options=void 0){if(!emittedExperimentalWarning){process.emitWarning("WebSocketStream is experimental! Expect it to change at any time.",{code:"UNDICI-WSS"});emittedExperimentalWarning=true}webidl.argumentLengthCheck(arguments,1,"WebSocket");url=webidl.converters.USVString(url);if(options!==null){options=webidl.converters.WebSocketStreamOptions(options)}const baseURL=environmentSettingsObject.settingsObject.baseUrl;const urlRecord=getURLRecord(url,baseURL);const protocols=options.protocols;if(protocols.length!==new Set(protocols.map(p2=>p2.toLowerCase())).size){throw new DOMException("Invalid Sec-WebSocket-Protocol value","SyntaxError")}if(protocols.length>0&&!protocols.every(p2=>isValidSubprotocol(p2))){throw new DOMException("Invalid Sec-WebSocket-Protocol value","SyntaxError")}this.#url=urlRecord.toString();this.#openedPromise=createDeferredPromise();this.#closedPromise=createDeferredPromise();if(options.signal!=null){const signal=options.signal;if(signal.aborted){this.#openedPromise.reject(signal.reason);this.#closedPromise.reject(signal.reason);return}signal.addEventListener("abort",()=>{if(!isEstablished(this.#handler.readyState)){failWebsocketConnection(this.#handler);this.#handler.readyState=states.CLOSING;this.#openedPromise.reject(signal.reason);this.#closedPromise.reject(signal.reason);this.#handshakeAborted=true}},{once:true})}const client=environmentSettingsObject.settingsObject;this.#handler.controller=establishWebSocketConnection(urlRecord,protocols,client,this.#handler,options)}get url(){return this.#url.toString()}get opened(){return this.#openedPromise.promise}get closed(){return this.#closedPromise.promise}close(closeInfo=void 0){if(closeInfo!==null){closeInfo=webidl.converters.WebSocketCloseInfo(closeInfo)}const code=closeInfo.closeCode??null;const reason=closeInfo.reason;closeWebSocketConnection(this.#handler,code,reason,true)}#write(chunk){chunk=webidl.converters.WebSocketStreamWrite(chunk);const promise=createDeferredPromise();let data=null;let opcode=null;if(webidl.is.BufferSource(chunk)){data=new Uint8Array(ArrayBuffer.isView(chunk)?new Uint8Array(chunk.buffer,chunk.byteOffset,chunk.byteLength):chunk.slice());opcode=opcodes.BINARY}else{let string;try{string=webidl.converters.DOMString(chunk)}catch(e){promise.reject(e);return promise.promise}data=new TextEncoder().encode(string);opcode=opcodes.TEXT}if(!this.#handler.closeState.has(sentCloseFrameState.SENT)&&!this.#handler.closeState.has(sentCloseFrameState.RECEIVED)){const frame=new WebsocketFrameSend(data);this.#handler.socket.write(frame.createFrame(opcode),()=>{promise.resolve(void 0)})}return promise.promise}#onConnectionEstablished(response,parsedExtensions){this.#handler.socket=response.socket;const maxFragments=this.#handler.controller.dispatcher?.webSocketOptions?.maxFragments;const maxPayloadSize=this.#handler.controller.dispatcher?.webSocketOptions?.maxPayloadSize;const parser=new ByteParser(this.#handler,parsedExtensions,{maxFragments,maxPayloadSize});parser.on("drain",()=>this.#handler.onParserDrain());parser.on("error",err2=>this.#handler.onParserError(err2));this.#parser=parser;this.#handler.readyState=states.OPEN;const extensions=parsedExtensions??"";const protocol=response.headersList.get("sec-websocket-protocol")??"";const readable=new ReadableStream({start:controller=>{this.#readableStreamController=controller},cancel:reason=>this.#cancel(reason)});const writable=new WritableStream({write:chunk=>this.#write(chunk),close:()=>closeWebSocketConnection(this.#handler,null,null),abort:reason=>this.#closeUsingReason(reason)});this.#readableStream=readable;this.#writableStream=writable;this.#openedPromise.resolve({extensions,protocol,readable,writable})}#onMessage(type,data){if(this.#handler.readyState!==states.OPEN){return}let chunk;if(type===opcodes.TEXT){try{chunk=utf8Decode(data)}catch{failWebsocketConnection(this.#handler,1007,"Received invalid UTF-8 in text frame.");return}}else if(type===opcodes.BINARY){chunk=new Uint8Array(data.buffer,data.byteOffset,data.byteLength)}this.#readableStreamController.enqueue(chunk)}#onSocketClose(){const wasClean=this.#handler.closeState.has(sentCloseFrameState.SENT)&&this.#handler.closeState.has(sentCloseFrameState.RECEIVED);this.#handler.readyState=states.CLOSED;if(this.#handshakeAborted){return}if(!this.#handler.wasEverConnected){this.#openedPromise.reject(new WebSocketError("Socket never opened"))}const result=this.#parser?.closingInfo;let code=result?.code??1005;if(!this.#handler.closeState.has(sentCloseFrameState.SENT)&&!this.#handler.closeState.has(sentCloseFrameState.RECEIVED)){code=1006}const reason=result?.reason==null?"":utf8DecodeBytes(Buffer.from(result.reason));if(wasClean){this.#readableStreamController.close();if(!this.#writableStream.locked){this.#writableStream.abort(new DOMException("A closed WebSocketStream cannot be written to","InvalidStateError"))}this.#closedPromise.resolve({closeCode:code,reason})}else{const error=createUnvalidatedWebSocketError("unclean close",code,reason);this.#readableStreamController?.error(error);this.#writableStream?.abort(error);this.#closedPromise.reject(error)}}#closeUsingReason(reason){let code=null;let reasonString="";if(webidl.is.WebSocketError(reason)){code=reason.closeCode;reasonString=reason.reason}closeWebSocketConnection(this.#handler,code,reasonString)}#cancel(reason){this.#closeUsingReason(reason)}};Object.defineProperties(WebSocketStream.prototype,{url:kEnumerableProperty,opened:kEnumerableProperty,closed:kEnumerableProperty,close:kEnumerableProperty,[Symbol.toStringTag]:{value:"WebSocketStream",writable:false,enumerable:false,configurable:true}});webidl.converters.WebSocketStreamOptions=webidl.dictionaryConverter([{key:"protocols",converter:webidl.sequenceConverter(webidl.converters.USVString),defaultValue:()=>[]},{key:"signal",converter:webidl.nullableConverter(webidl.converters.AbortSignal),defaultValue:()=>null}]);webidl.converters.WebSocketCloseInfo=webidl.dictionaryConverter([{key:"closeCode",converter:V2=>webidl.converters["unsigned short"](V2,webidl.attributes.EnforceRange)},{key:"reason",converter:webidl.converters.USVString,defaultValue:()=>""}]);webidl.converters.WebSocketStreamWrite=function(V2){if(typeof V2==="string"){return webidl.converters.USVString(V2)}return webidl.converters.BufferSource(V2)};module.exports={WebSocketStream}}});var require_util6=__commonJS({"node_modules/undici/lib/web/eventsource/util.js"(exports,module){"use strict";function isValidLastEventId(value){return value.indexOf("\0")===-1}function isASCIINumber(value){if(value.length===0)return false;for(let i=0;i<value.length;i++){if(value.charCodeAt(i)<48||value.charCodeAt(i)>57)return false}return true}module.exports={isValidLastEventId,isASCIINumber}}});var require_eventsource_stream=__commonJS({"node_modules/undici/lib/web/eventsource/eventsource-stream.js"(exports,module){"use strict";var{Transform}=__require("stream");var{isASCIINumber,isValidLastEventId}=require_util6();var BOM=[239,187,191];var LF=10;var CR=13;var COLON=58;var SPACE=32;var EventSourceStream=class extends Transform{state;checkBOM=true;crlfCheck=false;eventEndCheck=false;buffer=null;pos=0;event={data:void 0,event:void 0,id:void 0,retry:void 0};constructor(options={}){options.readableObjectMode=true;super(options);this.state=options.eventSourceSettings||{};if(options.push){this.push=options.push}}_transform(chunk,_encoding,callback){if(chunk.length===0){callback();return}if(this.buffer){this.buffer=Buffer.concat([this.buffer,chunk])}else{this.buffer=chunk}if(this.checkBOM){switch(this.buffer.length){case 1:if(this.buffer[0]===BOM[0]){callback();return}this.checkBOM=false;callback();return;case 2:if(this.buffer[0]===BOM[0]&&this.buffer[1]===BOM[1]){callback();return}this.checkBOM=false;break;case 3:if(this.buffer[0]===BOM[0]&&this.buffer[1]===BOM[1]&&this.buffer[2]===BOM[2]){this.buffer=Buffer.alloc(0);this.checkBOM=false;callback();return}this.checkBOM=false;break;default:if(this.buffer[0]===BOM[0]&&this.buffer[1]===BOM[1]&&this.buffer[2]===BOM[2]){this.buffer=this.buffer.subarray(3)}this.checkBOM=false;break}}while(this.pos<this.buffer.length){if(this.eventEndCheck){if(this.crlfCheck){if(this.buffer[this.pos]===LF){this.buffer=this.buffer.subarray(this.pos+1);this.pos=0;this.crlfCheck=false;continue}this.crlfCheck=false}if(this.buffer[this.pos]===LF||this.buffer[this.pos]===CR){if(this.buffer[this.pos]===CR){this.crlfCheck=true}this.buffer=this.buffer.subarray(this.pos+1);this.pos=0;if(this.event.data!==void 0||this.event.event||this.event.id!==void 0||this.event.retry){this.processEvent(this.event)}this.clearEvent();continue}this.eventEndCheck=false;continue}if(this.buffer[this.pos]===LF||this.buffer[this.pos]===CR){if(this.buffer[this.pos]===CR){this.crlfCheck=true}this.parseLine(this.buffer.subarray(0,this.pos),this.event);this.buffer=this.buffer.subarray(this.pos+1);this.pos=0;this.eventEndCheck=true;continue}this.pos++}callback()}parseLine(line,event){if(line.length===0){return}const colonPosition=line.indexOf(COLON);if(colonPosition===0){return}let field="";let value="";if(colonPosition!==-1){field=line.subarray(0,colonPosition).toString("utf8");let valueStart=colonPosition+1;if(line[valueStart]===SPACE){++valueStart}value=line.subarray(valueStart).toString("utf8")}else{field=line.toString("utf8");value=""}switch(field){case"data":if(event[field]===void 0){event[field]=value}else{event[field]+=`
|
|
357
357
|
${value}`}break;case"retry":if(isASCIINumber(value)){event[field]=value}break;case"id":if(isValidLastEventId(value)){event[field]=value}break;case"event":if(value.length>0){event[field]=value}break}}processEvent(event){if(event.retry&&isASCIINumber(event.retry)){this.state.reconnectionTime=parseInt(event.retry,10)}if(event.id!==void 0&&isValidLastEventId(event.id)){this.state.lastEventId=event.id}if(event.data!==void 0){this.push({type:event.event||"message",options:{data:event.data,lastEventId:this.state.lastEventId,origin:this.state.origin}})}}clearEvent(){this.event={data:void 0,event:void 0,id:void 0,retry:void 0}}};module.exports={EventSourceStream}}});var require_eventsource=__commonJS({"node_modules/undici/lib/web/eventsource/eventsource.js"(exports,module){"use strict";var{pipeline}=__require("stream");var{fetching}=require_fetch();var{makeRequest}=require_request2();var{webidl}=require_webidl();var{EventSourceStream}=require_eventsource_stream();var{parseMIMEType}=require_data_url();var{createFastMessageEvent}=require_events();var{isNetworkError}=require_response();var{kEnumerableProperty}=require_util();var{environmentSettingsObject}=require_util2();var experimentalWarned=false;var defaultReconnectionTime=3e3;var CONNECTING=0;var OPEN=1;var CLOSED=2;var ANONYMOUS2="anonymous";var USE_CREDENTIALS="use-credentials";var EventSource=class _EventSource extends EventTarget{#events={open:null,error:null,message:null};#url;#withCredentials=false;#readyState=CONNECTING;#request=null;#controller=null;#dispatcher;#state;constructor(url,eventSourceInitDict={}){super();webidl.util.markAsUncloneable(this);const prefix="EventSource constructor";webidl.argumentLengthCheck(arguments,1,prefix);if(!experimentalWarned){experimentalWarned=true;process.emitWarning("EventSource is experimental, expect them to change at any time.",{code:"UNDICI-ES"})}url=webidl.converters.USVString(url);eventSourceInitDict=webidl.converters.EventSourceInitDict(eventSourceInitDict,prefix,"eventSourceInitDict");this.#dispatcher=eventSourceInitDict.node.dispatcher||eventSourceInitDict.dispatcher;this.#state={lastEventId:"",reconnectionTime:eventSourceInitDict.node.reconnectionTime};const settings=environmentSettingsObject;let urlRecord;try{urlRecord=new URL(url,settings.settingsObject.baseUrl);this.#state.origin=urlRecord.origin}catch(e){throw new DOMException(e,"SyntaxError")}this.#url=urlRecord.href;let corsAttributeState=ANONYMOUS2;if(eventSourceInitDict.withCredentials===true){corsAttributeState=USE_CREDENTIALS;this.#withCredentials=true}const initRequest={redirect:"follow",keepalive:true,mode:"cors",credentials:corsAttributeState==="anonymous"?"same-origin":"omit",referrer:"no-referrer"};initRequest.client=environmentSettingsObject.settingsObject;initRequest.headersList=[["accept",{name:"accept",value:"text/event-stream"}]];initRequest.cache="no-store";initRequest.initiator="other";initRequest.urlList=[new URL(this.#url)];this.#request=makeRequest(initRequest);this.#connect()}get readyState(){return this.#readyState}get url(){return this.#url}get withCredentials(){return this.#withCredentials}#connect(){if(this.#readyState===CLOSED)return;this.#readyState=CONNECTING;const fetchParams={request:this.#request,dispatcher:this.#dispatcher};const processEventSourceEndOfBody=response=>{if(!isNetworkError(response)){return this.#reconnect()}};fetchParams.processResponseEndOfBody=processEventSourceEndOfBody;fetchParams.processResponse=response=>{if(isNetworkError(response)){if(response.aborted){this.close();this.dispatchEvent(new Event("error"));return}else{this.#reconnect();return}}const contentType=response.headersList.get("content-type",true);const mimeType=contentType!==null?parseMIMEType(contentType):"failure";const contentTypeValid=mimeType!=="failure"&&mimeType.essence==="text/event-stream";if(response.status!==200||contentTypeValid===false){this.close();this.dispatchEvent(new Event("error"));return}this.#readyState=OPEN;this.dispatchEvent(new Event("open"));this.#state.origin=response.urlList[response.urlList.length-1].origin;const eventSourceStream=new EventSourceStream({eventSourceSettings:this.#state,push:event=>{this.dispatchEvent(createFastMessageEvent(event.type,event.options))}});pipeline(response.body.stream,eventSourceStream,error=>{if(error?.aborted===false){this.close();this.dispatchEvent(new Event("error"))}})};this.#controller=fetching(fetchParams)}#reconnect(){if(this.#readyState===CLOSED)return;this.#readyState=CONNECTING;this.dispatchEvent(new Event("error"));setTimeout(()=>{if(this.#readyState!==CONNECTING)return;if(this.#state.lastEventId.length){this.#request.headersList.set("last-event-id",this.#state.lastEventId,true)}this.#connect()},this.#state.reconnectionTime)?.unref()}close(){webidl.brandCheck(this,_EventSource);if(this.#readyState===CLOSED)return;this.#readyState=CLOSED;this.#controller.abort();this.#request=null}get onopen(){return this.#events.open}set onopen(fn){if(this.#events.open){this.removeEventListener("open",this.#events.open)}const listener=webidl.converters.EventHandlerNonNull(fn);if(listener!==null){this.addEventListener("open",listener);this.#events.open=fn}else{this.#events.open=null}}get onmessage(){return this.#events.message}set onmessage(fn){if(this.#events.message){this.removeEventListener("message",this.#events.message)}const listener=webidl.converters.EventHandlerNonNull(fn);if(listener!==null){this.addEventListener("message",listener);this.#events.message=fn}else{this.#events.message=null}}get onerror(){return this.#events.error}set onerror(fn){if(this.#events.error){this.removeEventListener("error",this.#events.error)}const listener=webidl.converters.EventHandlerNonNull(fn);if(listener!==null){this.addEventListener("error",listener);this.#events.error=fn}else{this.#events.error=null}}};var constantsPropertyDescriptors={CONNECTING:{__proto__:null,configurable:false,enumerable:true,value:CONNECTING,writable:false},OPEN:{__proto__:null,configurable:false,enumerable:true,value:OPEN,writable:false},CLOSED:{__proto__:null,configurable:false,enumerable:true,value:CLOSED,writable:false}};Object.defineProperties(EventSource,constantsPropertyDescriptors);Object.defineProperties(EventSource.prototype,constantsPropertyDescriptors);Object.defineProperties(EventSource.prototype,{close:kEnumerableProperty,onerror:kEnumerableProperty,onmessage:kEnumerableProperty,onopen:kEnumerableProperty,readyState:kEnumerableProperty,url:kEnumerableProperty,withCredentials:kEnumerableProperty});webidl.converters.EventSourceInitDict=webidl.dictionaryConverter([{key:"withCredentials",converter:webidl.converters.boolean,defaultValue:()=>false},{key:"dispatcher",converter:webidl.converters.any},{key:"node",converter:webidl.dictionaryConverter([{key:"reconnectionTime",converter:webidl.converters["unsigned long"],defaultValue:()=>defaultReconnectionTime},{key:"dispatcher",converter:webidl.converters.any}]),defaultValue:()=>({})}]);module.exports={EventSource,defaultReconnectionTime}}});var require_undici=__commonJS({"node_modules/undici/index.js"(exports,module){"use strict";var Client=require_client();var Dispatcher=require_dispatcher();var Pool2=require_pool();var BalancedPool=require_balanced_pool();var RoundRobinPool=require_round_robin_pool();var Agent2=require_agent();var ProxyAgent2=require_proxy_agent();var Socks5ProxyAgent=require_socks5_proxy_agent();var EnvHttpProxyAgent=require_env_http_proxy_agent();var RetryAgent=require_retry_agent();var H2CClient=require_h2c_client();var errors=require_errors();var util=require_util();var{InvalidArgumentError}=errors;var api=require_api();var buildConnector=require_connect();var MockClient=require_mock_client();var{MockCallHistory,MockCallHistoryLog}=require_mock_call_history();var MockAgent=require_mock_agent();var MockPool=require_mock_pool();var SnapshotAgent=require_snapshot_agent();var mockErrors=require_mock_errors();var RetryHandler=require_retry_handler();var{getGlobalDispatcher,setGlobalDispatcher}=require_global2();var DecoratorHandler=require_decorator_handler();var RedirectHandler=require_redirect_handler();Object.assign(Dispatcher.prototype,api);module.exports.Dispatcher=Dispatcher;module.exports.Client=Client;module.exports.Pool=Pool2;module.exports.BalancedPool=BalancedPool;module.exports.RoundRobinPool=RoundRobinPool;module.exports.Agent=Agent2;module.exports.ProxyAgent=ProxyAgent2;module.exports.Socks5ProxyAgent=Socks5ProxyAgent;module.exports.EnvHttpProxyAgent=EnvHttpProxyAgent;module.exports.RetryAgent=RetryAgent;module.exports.H2CClient=H2CClient;module.exports.RetryHandler=RetryHandler;module.exports.DecoratorHandler=DecoratorHandler;module.exports.RedirectHandler=RedirectHandler;module.exports.interceptors={redirect:require_redirect(),responseError:require_response_error(),retry:require_retry(),dump:require_dump(),dns:require_dns(),cache:require_cache2(),decompress:require_decompress(),deduplicate:require_deduplicate()};module.exports.cacheStores={MemoryCacheStore:require_memory_cache_store()};var SqliteCacheStore=require_sqlite_cache_store();module.exports.cacheStores.SqliteCacheStore=SqliteCacheStore;module.exports.buildConnector=buildConnector;module.exports.errors=errors;module.exports.util={parseHeaders:util.parseHeaders,headerNameToString:util.headerNameToString};function makeDispatcher(fn){return(url,opts,handler)=>{if(typeof opts==="function"){handler=opts;opts=null}if(!url||typeof url!=="string"&&typeof url!=="object"&&!(url instanceof URL)){throw new InvalidArgumentError("invalid url")}if(opts!=null&&typeof opts!=="object"){throw new InvalidArgumentError("invalid opts")}if(opts&&opts.path!=null){if(typeof opts.path!=="string"){throw new InvalidArgumentError("invalid opts.path")}let path54=opts.path;if(!opts.path.startsWith("/")){path54=`/${path54}`}url=new URL(util.parseOrigin(url).origin+path54)}else{if(!opts){opts=typeof url==="object"?url:{}}url=util.parseURL(url)}const{agent,dispatcher=getGlobalDispatcher()}=opts;if(agent){throw new InvalidArgumentError("unsupported opts.agent. Did you mean opts.client?")}return fn.call(dispatcher,{...opts,origin:url.origin,path:url.search?`${url.pathname}${url.search}`:url.pathname,method:opts.method||(opts.body?"PUT":"GET")},handler)}}module.exports.setGlobalDispatcher=setGlobalDispatcher;module.exports.getGlobalDispatcher=getGlobalDispatcher;var fetchImpl=require_fetch().fetch;var currentFilename=typeof __filename!=="undefined"?__filename:void 0;function appendFetchStackTrace(err2,filename){if(!err2||typeof err2!=="object"){return}const stack=typeof err2.stack==="string"?err2.stack:"";const normalizedFilename=filename.replace(/\\/g,"/");if(stack&&(stack.includes(filename)||stack.includes(normalizedFilename))){return}const capture2={};Error.captureStackTrace(capture2,appendFetchStackTrace);if(!capture2.stack){return}const captureLines=capture2.stack.split("\n").slice(1).join("\n");err2.stack=stack?`${stack}
|
|
358
|
-
${captureLines}`:capture2.stack}module.exports.fetch=function fetch2(init,options=void 0){return fetchImpl(init,options).catch(err2=>{if(currentFilename){appendFetchStackTrace(err2,currentFilename)}else if(err2&&typeof err2==="object"){Error.captureStackTrace(err2,module.exports.fetch)}throw err2})};module.exports.Headers=require_headers().Headers;module.exports.Response=require_response().Response;module.exports.Request=require_request2().Request;module.exports.FormData=require_formdata().FormData;var{setGlobalOrigin,getGlobalOrigin}=require_global();module.exports.setGlobalOrigin=setGlobalOrigin;module.exports.getGlobalOrigin=getGlobalOrigin;var{CacheStorage}=require_cachestorage();var{kConstruct}=require_symbols();module.exports.caches=new CacheStorage(kConstruct);var{deleteCookie,getCookies,getSetCookies,setCookie,parseCookie}=require_cookies();module.exports.deleteCookie=deleteCookie;module.exports.getCookies=getCookies;module.exports.getSetCookies=getSetCookies;module.exports.setCookie=setCookie;module.exports.parseCookie=parseCookie;var{parseMIMEType,serializeAMimeType}=require_data_url();module.exports.parseMIMEType=parseMIMEType;module.exports.serializeAMimeType=serializeAMimeType;var{CloseEvent,ErrorEvent,MessageEvent}=require_events();var{WebSocket:WebSocket3,ping}=require_websocket();module.exports.WebSocket=WebSocket3;module.exports.CloseEvent=CloseEvent;module.exports.ErrorEvent=ErrorEvent;module.exports.MessageEvent=MessageEvent;module.exports.ping=ping;module.exports.WebSocketStream=require_websocketstream().WebSocketStream;module.exports.WebSocketError=require_websocketerror().WebSocketError;module.exports.request=makeDispatcher(api.request);module.exports.stream=makeDispatcher(api.stream);module.exports.pipeline=makeDispatcher(api.pipeline);module.exports.connect=makeDispatcher(api.connect);module.exports.upgrade=makeDispatcher(api.upgrade);module.exports.MockClient=MockClient;module.exports.MockCallHistory=MockCallHistory;module.exports.MockCallHistoryLog=MockCallHistoryLog;module.exports.MockPool=MockPool;module.exports.MockAgent=MockAgent;module.exports.SnapshotAgent=SnapshotAgent;module.exports.mockErrors=mockErrors;var{EventSource}=require_eventsource();module.exports.EventSource=EventSource;function install(){globalThis.fetch=module.exports.fetch;globalThis.Headers=module.exports.Headers;globalThis.Response=module.exports.Response;globalThis.Request=module.exports.Request;globalThis.FormData=module.exports.FormData;globalThis.WebSocket=module.exports.WebSocket;globalThis.CloseEvent=module.exports.CloseEvent;globalThis.ErrorEvent=module.exports.ErrorEvent;globalThis.MessageEvent=module.exports.MessageEvent;globalThis.EventSource=module.exports.EventSource}module.exports.install=install}});import{AsyncLocalStorage as AsyncLocalStorage2}from"async_hooks";function markWsLaneTransport(transport){wsLaneTransports.add(transport);return transport}function isWsLaneTransport(transport){return transport!==void 0&&wsLaneTransports.has(transport)}function withFetchTransport(transport,run){return transports.run(transport,run)}function currentFetchTransport(){return transports.getStore()}var transports,wsLaneTransports;var init_fetch_transport=__esm({"src/fetch-transport.ts"(){"use strict";transports=new AsyncLocalStorage2;wsLaneTransports=new WeakSet}});function chainOf(error){const out=[];let cur=error;for(let depth=0;cur instanceof Error&&depth<8;depth++){out.push(cur);cur=cur.cause}return out}function classifyUpstreamFailure(error,ctx={}){if(ctx.externalAborted===true)return"client-abort";const chain=chainOf(error);if(chain.length===0)return"unknown";for(const entry of chain){const code=typeof entry.code==="string"?entry.code:void 0;const name=typeof entry.name==="string"?entry.name:void 0;if(code===void 0){if(name==="AbortError")return"upstream-timeout";continue}if(code==="UND_ERR_CONNECT_TIMEOUT")return"connect-timeout";if(code==="ETIMEDOUT"||code==="UND_ERR_HEADERS_TIMEOUT"||code==="UND_ERR_BODY_TIMEOUT")return"upstream-timeout";if(code==="ECONNRESET"||code==="EPIPE"||code==="ECONNABORTED"||code==="UND_ERR_SOCKET")return ctx.viaProxy?"proxy-reset":"upstream-reset";if(code==="ECONNREFUSED")return"connect-refused";if(code==="ENOTFOUND"||code==="EAI_AGAIN")return"dns";if(code==="EPROTO"||code.startsWith("ERR_TLS")||code.startsWith("ERR_SSL")||code.startsWith("CERT_")||code.startsWith("DEPTH_ZERO_")||code==="UNABLE_TO_VERIFY_LEAF_SIGNATURE"||code==="SELF_SIGNED_CERT_IN_CHAIN"||code==="UNABLE_TO_GET_ISSUER_CERT_LOCALLY")return"tls"}return"unknown"}function isTlsTrustCode(code){return typeof code==="string"&&TLS_TRUST_CODES.has(code)}function tlsTrustRemediation(){return`the presented certificate chain is not trusted by this Node.js process \u2014 usually security software doing HTTPS/encrypted-connection scanning (Kaspersky, enterprise DLP) or a corporate MITM proxy re-signing the upstream. Fix: export that scanner/vendor root CA to a PEM file and point NODE_EXTRA_CA_CERTS=/path/to/ca.pem at it (or set bili config "network.caFile"), or exclude node.exe from the software's HTTPS inspection`}function withUpstreamFailure(err2,detail){Object.defineProperty(err2,UPSTREAM_FAILURE,{value:detail,enumerable:false});return err2}function upstreamFailureOf(err2){if(err2!==null&&typeof err2==="object"){const value=err2[UPSTREAM_FAILURE];if(value!==null&&typeof value==="object")return value}return void 0}function isFailFastUpstreamKind(kind){return kind==="proxy-reset"||kind==="upstream-reset"||kind==="connect-refused"||kind==="connect-timeout"||kind==="dns"}function redactProxyUrl(value){if(!value)return void 0;try{const url=new URL(value);if(url.username||url.password){url.username="***";url.password="***"}return url.href}catch{return"(invalid proxy URL)"}}function redactedSkippedProxy(skipped){return(redactProxyUrl(skipped.proxy)??"").replace(/\/$/,"")}function hintWithSkippedProxy(kind,skipped){const base=UPSTREAM_FAIL_HINTS[kind];if(!skipped||!isFailFastUpstreamKind(kind))return base;return`${base}; available proxy ${redactedSkippedProxy(skipped)} (${skipped.source}) was skipped because upstreamProxyMode is unset (direct is the default by design, #346/#357) \u2014 follow it with "upstreamProxyMode": "auto" or BILI_UPSTREAM_PROXY_MODE=auto, or give this provider a "proxy" lane`}var TLS_TRUST_CODES,UPSTREAM_FAILURE,UPSTREAM_FAIL_HINTS;var init_upstream_fail=__esm({"src/upstream-fail.ts"(){"use strict";TLS_TRUST_CODES=new Set(["ERR_TLS_CERT_ALTNAME_INVALID","CERT_HAS_EXPIRED","DEPTH_ZERO_SELF_SIGNED_CERT","DEPTH_ZERO_UNTRUSTED_ROOT","SELF_SIGNED_CERT_IN_CHAIN","UNABLE_TO_VERIFY_LEAF_SIGNATURE","UNABLE_TO_GET_ISSUER_CERT_LOCALLY"]);UPSTREAM_FAILURE=Symbol("upstreamFailure");UPSTREAM_FAIL_HINTS={"client-abort":"downstream client disconnected \u2014 no bili-side action","upstream-timeout":"idle budget expired (headers/body) \u2014 check upstream health; not retried by design","connect-timeout":"TCP handshake never completed \u2014 upstream/proxy unreachable or blackholed; a bounded transparent replay may be attempted (BILI_REPLAY_RETRY_MAX)","proxy-reset":"proxy dropped the connection before the response \u2014 check proxy idle-recycle/payload limits (BILI_PROXY_KEEPALIVE_MAX_MS can shorten our reuse window); a bounded transparent replay may be attempted (BILI_REPLAY_RETRY_MAX)","upstream-reset":"upstream/network reset before the response \u2014 check upstream and local network; a bounded transparent replay may be attempted (BILI_REPLAY_RETRY_MAX)","connect-refused":"TCP refused (proxy when configured, else upstream) \u2014 endpoint down or wrong port",dns:"name resolution failed \u2014 DNS server or hostname typo; a bounded transparent replay may be attempted (BILI_REPLAY_RETRY_MAX)",tls:"TLS/certificate failure at CONNECT or upstream handshake \u2014 CA/proxy MITM config",unknown:"unclassified transport failure \u2014 report with full error chain"}}});function parseDurationField(text2){let rest=text2.trim().toLowerCase();if(rest.length===0)return void 0;let total=0;while(rest.length>0){const m2=rest.match(DURATION_SEGMENT_RE);if(!m2)return void 0;total+=Number(m2[1])*DURATION_UNITS_MS[m2[2]];rest=rest.slice(m2[0].length)}return Number.isFinite(total)?Math.floor(total):void 0}var DURATION_UNITS_MS,DURATION_SEGMENT_RE;var init_duration=__esm({"src/duration.ts"(){"use strict";DURATION_UNITS_MS={s:1e3,m:6e4,h:36e5,d:864e5,w:6048e5};DURATION_SEGMENT_RE=/^(\d+(?:\.\d+)?)([smhdw])/}});import{createHash as createHash3}from"crypto";function sha256Hex(bytes){return createHash3("sha256").update(bytes).digest("hex")}function splitMediaContent(content){let media=[];let split=content;if(content.includes('"imageBase64"')){let parsed;try{parsed=JSON.parse(content)}catch{parsed=void 0}if(parsed){const bytes=parsed.imageBase64;if(typeof bytes==="string"&&bytes.length>0){const mediaHash=sha256Hex(bytes);parsed.imageBase64={$media:mediaHash};split=JSON.stringify(parsed);media.push({hash:mediaHash,bytes})}}}if(split.includes(";base64,")){const byHash=new Map(media.map(m2=>[m2.hash,m2.bytes]));split=split.replace(MEDIA_URL_MARKER_RE,(_all,mime,payload)=>{const mediaHash=sha256Hex(payload);if(!byHash.has(mediaHash)){byHash.set(mediaHash,payload);media=[...media,{hash:mediaHash,bytes:payload}]}return`data:${mime};base64,{$media:${mediaHash}}`})}return{content:split,hash:sha256Hex(split),media}}function identityInputOf(raw){let parsed;try{parsed=JSON.parse(raw)}catch{return raw}if(parsed.id===void 0&&parsed.wireIndex===void 0)return raw;delete parsed.id;delete parsed.wireIndex;return JSON.stringify(parsed)}function identityOfStoredContent(content){return sha256Hex(identityInputOf(content))}var MIN_MEDIA_URL_SPLIT_BYTES,MEDIA_URL_MARKER_RE;var init_identity=__esm({"src/storage/identity.ts"(){"use strict";MIN_MEDIA_URL_SPLIT_BYTES=2048;MEDIA_URL_MARKER_RE=new RegExp(`data:([a-zA-Z0-9.+\\/-]+);base64,([A-Za-z0-9+/=]{${MIN_MEDIA_URL_SPLIT_BYTES},})`,"g")}});function storagePragmas(walJournalSizeLimitBytes){return["PRAGMA journal_mode = WAL","PRAGMA synchronous = NORMAL","PRAGMA busy_timeout = 5000","PRAGMA foreign_keys = ON",`PRAGMA journal_size_limit = ${walJournalSizeLimitBytes}`,"PRAGMA auto_vacuum = INCREMENTAL"]}function migrateSchema(db){const row=db.prepare("PRAGMA user_version").get();const from=row?.user_version??0;if(from>=STORAGE_SCHEMA_VERSION)return{from,to:from};db.transaction(()=>{if(from<1)db.exec(STORAGE_DDL_V1);if(from<2){const cols=db.prepare("PRAGMA table_info(sessions)").all().map(c=>typeof c?.name==="string"?c.name:"");if(!cols.includes("namespace")){db.exec("ALTER TABLE sessions ADD COLUMN namespace TEXT NOT NULL DEFAULT 'proxy'")}if(!cols.includes("origin")){db.exec("ALTER TABLE sessions ADD COLUMN origin TEXT")}}if(from<3){db.exec("CREATE TABLE IF NOT EXISTS conversations (\n namespace TEXT NOT NULL,\n conversation_id TEXT NOT NULL,\n session_id TEXT NOT NULL,\n claimed_at INTEGER NOT NULL,\n PRIMARY KEY (namespace, conversation_id)\n ) WITHOUT ROWID");db.exec("INSERT OR IGNORE INTO conversations (namespace, conversation_id, session_id, claimed_at) SELECT namespace, session_id, session_id, updated_at FROM sessions")}if(from<4){db.exec("CREATE TABLE IF NOT EXISTS session_ext (\n session_id TEXT NOT NULL,\n key TEXT NOT NULL,\n value_json TEXT NOT NULL,\n updated_at INTEGER NOT NULL,\n PRIMARY KEY (session_id, key)\n ) WITHOUT ROWID");db.exec("CREATE TABLE IF NOT EXISTS kv_store (\n namespace TEXT NOT NULL,\n key TEXT NOT NULL,\n value_json TEXT NOT NULL,\n updated_at INTEGER NOT NULL,\n PRIMARY KEY (namespace, key)\n ) WITHOUT ROWID")}if(from<7){db.exec("CREATE TABLE IF NOT EXISTS message_media (\n session_id TEXT NOT NULL,\n seq INTEGER NOT NULL,\n media_hash TEXT NOT NULL REFERENCES content(hash),\n PRIMARY KEY (session_id, seq, media_hash)\n ) WITHOUT ROWID")}if(from<5){const cols=db.prepare("PRAGMA table_info(sessions)").all().map(c=>typeof c?.name==="string"?c.name:"");if(!cols.includes("last_ingested_seq")){db.exec("ALTER TABLE sessions ADD COLUMN last_ingested_seq INTEGER")}}if(from<6){const cols=db.prepare("PRAGMA table_info(sessions)").all().map(c=>typeof c?.name==="string"?c.name:"");if(!cols.includes("orphans_json")){db.exec("ALTER TABLE sessions ADD COLUMN orphans_json TEXT")}}if(from<8){const msgCols=db.prepare("PRAGMA table_info(messages)").all().map(c=>typeof c?.name==="string"?c.name:"");if(!msgCols.includes("identity")){db.exec("ALTER TABLE messages ADD COLUMN identity TEXT NOT NULL DEFAULT ''")}if(!msgCols.includes("retired_at")){db.exec("ALTER TABLE messages ADD COLUMN retired_at INTEGER")}db.exec("CREATE INDEX IF NOT EXISTS idx_messages_identity ON messages (session_id, msg_id, identity)");const rows=db.prepare("SELECT m.session_id AS session_id, m.seq AS seq, m.msg_id AS msg_id, m.content_hash AS content_hash, c.bytes AS content FROM messages m JOIN content c ON c.hash = m.content_hash").all();const keep=new Map;const drop=[];const rawByIdentityKey=new Map;for(const r of rows){const raw=typeof r.content==="string"?r.content:Buffer.from(r.content).toString("utf8");const identity=identityOfStoredContent(raw);rawByIdentityKey.set(`${r.session_id}\0${r.msg_id}\0${identity}`,raw);const key2=`${r.session_id}\0${r.msg_id}\0${identity}`;const seen=keep.get(key2);if(seen===void 0){keep.set(key2,{session_id:r.session_id,seq:r.seq,content_hash:r.content_hash})}else if(r.seq<seen.seq){drop.push({session_id:seen.session_id,seq:seen.seq,content_hash:seen.content_hash});keep.set(key2,{session_id:r.session_id,seq:r.seq,content_hash:r.content_hash})}else{drop.push({session_id:r.session_id,seq:r.seq,content_hash:r.content_hash})}}const identityBySeq=new Map;for(const r of rows){const raw=rawByIdentityKey.get(`${r.session_id}\0${r.msg_id}\0${identityOfStoredContent(typeof r.content==="string"?r.content:Buffer.from(r.content).toString("utf8"))}`)??(typeof r.content==="string"?r.content:Buffer.from(r.content).toString("utf8"));const identity=identityOfStoredContent(raw);const key2=`${r.session_id}\0${r.msg_id}\0${identity}`;if(keep.get(key2)?.seq===r.seq)identityBySeq.set(`${r.session_id}\0${r.seq}`,identity)}const upd=db.prepare("UPDATE messages SET identity = ? WHERE session_id = ? AND seq = ?");for(const[k2,identity]of identityBySeq){const[sessionId,seqStr]=k2.split("\0");upd.run(identity,sessionId,Number(seqStr))}const decRef=db.prepare("UPDATE content SET refcount = refcount - 1 WHERE hash = ?");const delMedia=db.prepare("DELETE FROM message_media WHERE session_id = ? AND seq = ?");const mediaOf=db.prepare("SELECT media_hash FROM message_media WHERE session_id = ? AND seq = ?");const delMsg=db.prepare("DELETE FROM messages WHERE session_id = ? AND seq = ?");for(const d of drop){for(const mm of mediaOf.all(d.session_id,d.seq)){decRef.run(mm.media_hash)}delMedia.run(d.session_id,d.seq);delMsg.run(d.session_id,d.seq);decRef.run(d.content_hash)}}db.exec(`PRAGMA user_version = ${STORAGE_SCHEMA_VERSION}`)});return{from,to:STORAGE_SCHEMA_VERSION}}var STORAGE_SCHEMA_VERSION,WAL_JOURNAL_SIZE_LIMIT,STORAGE_PRAGMAS,STORAGE_DDL_V1;var init_schema=__esm({"src/storage/schema.ts"(){"use strict";init_identity();STORAGE_SCHEMA_VERSION=8;WAL_JOURNAL_SIZE_LIMIT=8*1024*1024;STORAGE_PRAGMAS=storagePragmas(WAL_JOURNAL_SIZE_LIMIT);STORAGE_DDL_V1=`CREATE TABLE IF NOT EXISTS sessions (
|
|
358
|
+
${captureLines}`:capture2.stack}module.exports.fetch=function fetch2(init,options=void 0){return fetchImpl(init,options).catch(err2=>{if(currentFilename){appendFetchStackTrace(err2,currentFilename)}else if(err2&&typeof err2==="object"){Error.captureStackTrace(err2,module.exports.fetch)}throw err2})};module.exports.Headers=require_headers().Headers;module.exports.Response=require_response().Response;module.exports.Request=require_request2().Request;module.exports.FormData=require_formdata().FormData;var{setGlobalOrigin,getGlobalOrigin}=require_global();module.exports.setGlobalOrigin=setGlobalOrigin;module.exports.getGlobalOrigin=getGlobalOrigin;var{CacheStorage}=require_cachestorage();var{kConstruct}=require_symbols();module.exports.caches=new CacheStorage(kConstruct);var{deleteCookie,getCookies,getSetCookies,setCookie,parseCookie}=require_cookies();module.exports.deleteCookie=deleteCookie;module.exports.getCookies=getCookies;module.exports.getSetCookies=getSetCookies;module.exports.setCookie=setCookie;module.exports.parseCookie=parseCookie;var{parseMIMEType,serializeAMimeType}=require_data_url();module.exports.parseMIMEType=parseMIMEType;module.exports.serializeAMimeType=serializeAMimeType;var{CloseEvent,ErrorEvent,MessageEvent}=require_events();var{WebSocket:WebSocket3,ping}=require_websocket();module.exports.WebSocket=WebSocket3;module.exports.CloseEvent=CloseEvent;module.exports.ErrorEvent=ErrorEvent;module.exports.MessageEvent=MessageEvent;module.exports.ping=ping;module.exports.WebSocketStream=require_websocketstream().WebSocketStream;module.exports.WebSocketError=require_websocketerror().WebSocketError;module.exports.request=makeDispatcher(api.request);module.exports.stream=makeDispatcher(api.stream);module.exports.pipeline=makeDispatcher(api.pipeline);module.exports.connect=makeDispatcher(api.connect);module.exports.upgrade=makeDispatcher(api.upgrade);module.exports.MockClient=MockClient;module.exports.MockCallHistory=MockCallHistory;module.exports.MockCallHistoryLog=MockCallHistoryLog;module.exports.MockPool=MockPool;module.exports.MockAgent=MockAgent;module.exports.SnapshotAgent=SnapshotAgent;module.exports.mockErrors=mockErrors;var{EventSource}=require_eventsource();module.exports.EventSource=EventSource;function install(){globalThis.fetch=module.exports.fetch;globalThis.Headers=module.exports.Headers;globalThis.Response=module.exports.Response;globalThis.Request=module.exports.Request;globalThis.FormData=module.exports.FormData;globalThis.WebSocket=module.exports.WebSocket;globalThis.CloseEvent=module.exports.CloseEvent;globalThis.ErrorEvent=module.exports.ErrorEvent;globalThis.MessageEvent=module.exports.MessageEvent;globalThis.EventSource=module.exports.EventSource}module.exports.install=install}});import{AsyncLocalStorage as AsyncLocalStorage2}from"async_hooks";function markWsLaneTransport(transport){wsLaneTransports.add(transport);return transport}function isWsLaneTransport(transport){return transport!==void 0&&wsLaneTransports.has(transport)}function withFetchTransport(transport,run){return transports.run(transport,run)}function currentFetchTransport(){return transports.getStore()}var transports,wsLaneTransports;var init_fetch_transport=__esm({"src/fetch-transport.ts"(){"use strict";transports=new AsyncLocalStorage2;wsLaneTransports=new WeakSet}});function chainOf(error){const out=[];let cur=error;for(let depth=0;cur instanceof Error&&depth<8;depth++){out.push(cur);cur=cur.cause}return out}function classifyUpstreamFailure(error,ctx={}){if(ctx.externalAborted===true)return"client-abort";const chain=chainOf(error);if(chain.length===0)return"unknown";for(const entry of chain){const code=typeof entry.code==="string"?entry.code:void 0;const name=typeof entry.name==="string"?entry.name:void 0;if(code===void 0){if(name==="AbortError")return"upstream-timeout";continue}if(code==="UND_ERR_CONNECT_TIMEOUT")return"connect-timeout";if(code==="ETIMEDOUT"||code==="UND_ERR_HEADERS_TIMEOUT"||code==="UND_ERR_BODY_TIMEOUT")return"upstream-timeout";if(code==="ECONNRESET"||code==="EPIPE"||code==="ECONNABORTED"||code==="UND_ERR_SOCKET")return ctx.viaProxy?"proxy-reset":"upstream-reset";if(code==="ECONNREFUSED")return"connect-refused";if(code==="ENOTFOUND"||code==="EAI_AGAIN")return"dns";if(code==="EPROTO"||code.startsWith("ERR_TLS")||code.startsWith("ERR_SSL")||code.startsWith("CERT_")||code.startsWith("DEPTH_ZERO_")||code==="UNABLE_TO_VERIFY_LEAF_SIGNATURE"||code==="SELF_SIGNED_CERT_IN_CHAIN"||code==="UNABLE_TO_GET_ISSUER_CERT_LOCALLY")return"tls"}return"unknown"}function isTlsTrustCode(code){return typeof code==="string"&&TLS_TRUST_CODES.has(code)}function tlsTrustRemediation(){return`the presented certificate chain is not trusted by this Node.js process \u2014 usually security software doing HTTPS/encrypted-connection scanning (Kaspersky, enterprise DLP) or a corporate MITM proxy re-signing the upstream. Fix: export that scanner/vendor root CA to a PEM file and point NODE_EXTRA_CA_CERTS=/path/to/ca.pem at it (or set bili config "network.caFile"), or exclude node.exe from the software's HTTPS inspection`}function withUpstreamFailure(err2,detail){Object.defineProperty(err2,UPSTREAM_FAILURE,{value:detail,enumerable:false});return err2}function upstreamFailureOf(err2){if(err2!==null&&typeof err2==="object"){const value=err2[UPSTREAM_FAILURE];if(value!==null&&typeof value==="object")return value}return void 0}function isFailFastUpstreamKind(kind){return kind==="proxy-reset"||kind==="upstream-reset"||kind==="connect-refused"||kind==="connect-timeout"||kind==="dns"}function redactProxyUrl(value){if(!value)return void 0;try{const url=new URL(value);if(url.username||url.password){url.username="***";url.password="***"}return url.href}catch{return"(invalid proxy URL)"}}function redactedSkippedProxy(skipped){return(redactProxyUrl(skipped.proxy)??"").replace(/\/$/,"")}function hintWithSkippedProxy(kind,skipped){const base=UPSTREAM_FAIL_HINTS[kind];if(!skipped||!isFailFastUpstreamKind(kind))return base;return`${base}; available proxy ${redactedSkippedProxy(skipped)} (${skipped.source}) was skipped because upstreamProxyMode is unset (direct is the default by design, #346/#357) \u2014 follow it with "upstreamProxyMode": "auto" or BILI_UPSTREAM_PROXY_MODE=auto, or give this provider a "proxy" lane`}var TLS_TRUST_CODES,UPSTREAM_FAILURE,UPSTREAM_FAIL_HINTS;var init_upstream_fail=__esm({"src/upstream-fail.ts"(){"use strict";TLS_TRUST_CODES=new Set(["ERR_TLS_CERT_ALTNAME_INVALID","CERT_HAS_EXPIRED","DEPTH_ZERO_SELF_SIGNED_CERT","DEPTH_ZERO_UNTRUSTED_ROOT","SELF_SIGNED_CERT_IN_CHAIN","UNABLE_TO_VERIFY_LEAF_SIGNATURE","UNABLE_TO_GET_ISSUER_CERT_LOCALLY"]);UPSTREAM_FAILURE=Symbol("upstreamFailure");UPSTREAM_FAIL_HINTS={"client-abort":"downstream client disconnected \u2014 no bili-side action","upstream-timeout":"idle budget expired (headers/body) \u2014 check upstream health; not retried by design","connect-timeout":"TCP handshake never completed \u2014 upstream/proxy unreachable or blackholed; a bounded transparent replay may be attempted (BILI_REPLAY_RETRY_MAX)","proxy-reset":"proxy dropped the connection before the response \u2014 check proxy idle-recycle/payload limits (BILI_PROXY_KEEPALIVE_MAX_MS can shorten our reuse window); a bounded transparent replay may be attempted (BILI_REPLAY_RETRY_MAX)","upstream-reset":"upstream/network reset before the response \u2014 check upstream and local network; a bounded transparent replay may be attempted (BILI_REPLAY_RETRY_MAX)","connect-refused":"TCP refused (proxy when configured, else upstream) \u2014 endpoint down or wrong port",dns:"name resolution failed \u2014 DNS server or hostname typo; a bounded transparent replay may be attempted (BILI_REPLAY_RETRY_MAX)",tls:"TLS/certificate failure at CONNECT or upstream handshake \u2014 CA/proxy MITM config",unknown:"unclassified transport failure \u2014 report with full error chain"}}});function parseDurationField(text2){let rest=text2.trim().toLowerCase();if(rest.length===0)return void 0;let total=0;while(rest.length>0){const m2=rest.match(DURATION_SEGMENT_RE);if(!m2)return void 0;total+=Number(m2[1])*DURATION_UNITS_MS[m2[2]];rest=rest.slice(m2[0].length)}return Number.isFinite(total)?Math.floor(total):void 0}var DURATION_UNITS_MS,DURATION_SEGMENT_RE;var init_duration=__esm({"src/duration.ts"(){"use strict";DURATION_UNITS_MS={s:1e3,m:6e4,h:36e5,d:864e5,w:6048e5};DURATION_SEGMENT_RE=/^(\d+(?:\.\d+)?)([smhdw])/}});import{createHash as createHash3}from"crypto";function sha256Hex(bytes){return createHash3("sha256").update(bytes).digest("hex")}function splitMediaContent(content){let media=[];let split=content;if(content.includes('"imageBase64"')){let parsed;try{parsed=JSON.parse(content)}catch{parsed=void 0}if(parsed){const bytes=parsed.imageBase64;if(typeof bytes==="string"&&bytes.length>0){const mediaHash=sha256Hex(bytes);parsed.imageBase64={$media:mediaHash};split=JSON.stringify(parsed);media.push({hash:mediaHash,bytes})}}}if(split.includes(";base64,")){const byHash=new Map(media.map(m2=>[m2.hash,m2.bytes]));split=split.replace(MEDIA_URL_MARKER_RE,(_all,mime,payload)=>{const mediaHash=sha256Hex(payload);if(!byHash.has(mediaHash)){byHash.set(mediaHash,payload);media=[...media,{hash:mediaHash,bytes:payload}]}return`data:${mime};base64,{$media:${mediaHash}}`})}return{content:split,hash:sha256Hex(split),media}}function identityInputOf(raw){let parsed;try{parsed=JSON.parse(raw)}catch{return raw}if(parsed.id===void 0&&parsed.wireIndex===void 0)return raw;delete parsed.id;delete parsed.wireIndex;return JSON.stringify(parsed)}function identityOfStoredContent(content){return sha256Hex(identityInputOf(content))}var MIN_MEDIA_URL_SPLIT_BYTES,MEDIA_URL_MARKER_RE;var init_identity=__esm({"src/storage/identity.ts"(){"use strict";MIN_MEDIA_URL_SPLIT_BYTES=2048;MEDIA_URL_MARKER_RE=new RegExp(`data:([a-zA-Z0-9.+\\/-]+);base64,([A-Za-z0-9+/=]{${MIN_MEDIA_URL_SPLIT_BYTES},})`,"g")}});function storagePragmas(walJournalSizeLimitBytes){return["PRAGMA journal_mode = WAL","PRAGMA synchronous = NORMAL","PRAGMA busy_timeout = 5000","PRAGMA foreign_keys = ON",`PRAGMA journal_size_limit = ${walJournalSizeLimitBytes}`,"PRAGMA auto_vacuum = INCREMENTAL"]}function migrateSchema(db){const row=db.prepare("PRAGMA user_version").get();const from=row?.user_version??0;if(from>=STORAGE_SCHEMA_VERSION)return{from,to:from};let needV8Backfill=false;db.transaction(()=>{if(from<1)db.exec(STORAGE_DDL_V1);if(from<2){const cols=db.prepare("PRAGMA table_info(sessions)").all().map(c=>typeof c?.name==="string"?c.name:"");if(!cols.includes("namespace")){db.exec("ALTER TABLE sessions ADD COLUMN namespace TEXT NOT NULL DEFAULT 'proxy'")}if(!cols.includes("origin")){db.exec("ALTER TABLE sessions ADD COLUMN origin TEXT")}}if(from<3){db.exec("CREATE TABLE IF NOT EXISTS conversations (\n namespace TEXT NOT NULL,\n conversation_id TEXT NOT NULL,\n session_id TEXT NOT NULL,\n claimed_at INTEGER NOT NULL,\n PRIMARY KEY (namespace, conversation_id)\n ) WITHOUT ROWID");db.exec("INSERT OR IGNORE INTO conversations (namespace, conversation_id, session_id, claimed_at) SELECT namespace, session_id, session_id, updated_at FROM sessions")}if(from<4){db.exec("CREATE TABLE IF NOT EXISTS session_ext (\n session_id TEXT NOT NULL,\n key TEXT NOT NULL,\n value_json TEXT NOT NULL,\n updated_at INTEGER NOT NULL,\n PRIMARY KEY (session_id, key)\n ) WITHOUT ROWID");db.exec("CREATE TABLE IF NOT EXISTS kv_store (\n namespace TEXT NOT NULL,\n key TEXT NOT NULL,\n value_json TEXT NOT NULL,\n updated_at INTEGER NOT NULL,\n PRIMARY KEY (namespace, key)\n ) WITHOUT ROWID")}if(from<7){db.exec("CREATE TABLE IF NOT EXISTS message_media (\n session_id TEXT NOT NULL,\n seq INTEGER NOT NULL,\n media_hash TEXT NOT NULL REFERENCES content(hash),\n PRIMARY KEY (session_id, seq, media_hash)\n ) WITHOUT ROWID")}if(from<5){const cols=db.prepare("PRAGMA table_info(sessions)").all().map(c=>typeof c?.name==="string"?c.name:"");if(!cols.includes("last_ingested_seq")){db.exec("ALTER TABLE sessions ADD COLUMN last_ingested_seq INTEGER")}}if(from<6){const cols=db.prepare("PRAGMA table_info(sessions)").all().map(c=>typeof c?.name==="string"?c.name:"");if(!cols.includes("orphans_json")){db.exec("ALTER TABLE sessions ADD COLUMN orphans_json TEXT")}}if(from<8){const msgCols=db.prepare("PRAGMA table_info(messages)").all().map(c=>typeof c?.name==="string"?c.name:"");if(!msgCols.includes("identity")){db.exec("ALTER TABLE messages ADD COLUMN identity TEXT NOT NULL DEFAULT ''")}if(!msgCols.includes("retired_at")){db.exec("ALTER TABLE messages ADD COLUMN retired_at INTEGER")}db.exec("CREATE INDEX IF NOT EXISTS idx_messages_identity ON messages (session_id, msg_id, identity)");needV8Backfill=true}});if(needV8Backfill)migrateV8Identities(db);db.exec(`PRAGMA user_version = ${STORAGE_SCHEMA_VERSION}`);return{from,to:STORAGE_SCHEMA_VERSION}}function migrateV8Identities(db){const sessions2=db.prepare("SELECT DISTINCT session_id FROM messages WHERE identity = ''").all();if(sessions2.length===0)return;log("info",`[storage] schema v8 migration: streaming identity backfill over ${sessions2.length} session(s), one transaction per session (resumable \u2014 committed sessions are not reprocessed after a crash)`);const total=sessions2.length;let done=0;const page=db.prepare("SELECT m.seq AS seq, m.msg_id AS msg_id, m.content_hash AS content_hash, c.bytes AS content FROM messages m LEFT JOIN content c ON c.hash = m.content_hash WHERE m.session_id = ? AND m.identity = '' AND m.seq > ? ORDER BY m.seq LIMIT ?");const upd=db.prepare("UPDATE messages SET identity = ? WHERE session_id = ? AND seq = ?");const decRef=db.prepare("UPDATE content SET refcount = refcount - 1 WHERE hash = ?");const delMedia=db.prepare("DELETE FROM message_media WHERE session_id = ? AND seq = ?");const mediaOf=db.prepare("SELECT media_hash FROM message_media WHERE session_id = ? AND seq = ?");const delMsg=db.prepare("DELETE FROM messages WHERE session_id = ? AND seq = ?");try{for(const s3 of sessions2){const keep=new Set;const updates=[];const drops=[];let cursor=-1;for(;;){const rows=page.all(s3.session_id,cursor,V8_BACKFILL_PAGE);if(rows.length===0)break;for(const r of rows){cursor=r.seq;const identity=r.content==null?ABSENT_IDENTITY:identityOfStoredContent(typeof r.content==="string"?r.content:Buffer.from(r.content).toString("utf8"));const key2=`${r.msg_id}\0${identity}`;if(keep.has(key2))drops.push({seq:r.seq,content_hash:r.content_hash});else{keep.add(key2);updates.push({seq:r.seq,identity})}}if(rows.length<V8_BACKFILL_PAGE)break}db.transaction(()=>{for(const u2 of updates)upd.run(u2.identity,s3.session_id,u2.seq);for(const d of drops){for(const mm of mediaOf.all(s3.session_id,d.seq)){decRef.run(mm.media_hash)}delMedia.run(s3.session_id,d.seq);delMsg.run(s3.session_id,d.seq);decRef.run(d.content_hash)}});done+=1;if(done%100===0||done===total){log("info",`[storage] schema v8 migration: ${done}/${total} session(s) backfilled`)}}}catch(err2){log("error",`[storage] schema v8 migration failed after ${done}/${total} session(s) \u2014 committed sessions keep their progress and the migration resumes automatically on the next open (no data loss, no need to touch user_version by hand). Error: ${String(err2)}`);throw err2}}var STORAGE_SCHEMA_VERSION,WAL_JOURNAL_SIZE_LIMIT,STORAGE_PRAGMAS,STORAGE_DDL_V1,ABSENT_IDENTITY,V8_BACKFILL_PAGE;var init_schema=__esm({"src/storage/schema.ts"(){"use strict";init_identity();init_logger();STORAGE_SCHEMA_VERSION=8;WAL_JOURNAL_SIZE_LIMIT=8*1024*1024;STORAGE_PRAGMAS=storagePragmas(WAL_JOURNAL_SIZE_LIMIT);STORAGE_DDL_V1=`CREATE TABLE IF NOT EXISTS sessions (
|
|
359
359
|
session_id TEXT PRIMARY KEY,
|
|
360
360
|
parent_session_id TEXT,
|
|
361
361
|
fork_point_seq INTEGER,
|
|
@@ -526,7 +526,7 @@ CREATE INDEX IF NOT EXISTS idx_blocks_session ON blocks(session_id, ord);
|
|
|
526
526
|
CREATE INDEX IF NOT EXISTS idx_dead_refs_session ON dead_refs(session_id, ord);
|
|
527
527
|
CREATE INDEX IF NOT EXISTS idx_refs_session ON refs(session_id, ord);
|
|
528
528
|
CREATE INDEX IF NOT EXISTS idx_checkpoints_session ON checkpoints(session_id, created_at);
|
|
529
|
-
`}});import path5 from"path";function tNum(envName,fileValue){const envRaw=process.env[envName];if(envRaw!==void 0)return Number(envRaw);return typeof fileValue==="number"&&Number.isFinite(fileValue)?fileValue:NaN}function tNumLoose(envName,fileValue){const envRaw=process.env[envName];if(envRaw!==void 0&&envRaw!=="")return Number(envRaw);return typeof fileValue==="number"&&Number.isFinite(fileValue)?fileValue:NaN}function tInt(envName,fileValue){const envRaw=process.env[envName];if(envRaw!==void 0)return Number.parseInt(envRaw,10);return typeof fileValue==="number"&&Number.isFinite(fileValue)?fileValue:NaN}function tIntLoose(envName,fileValue){const envRaw=process.env[envName];if(envRaw!==void 0&&envRaw!=="")return Number.parseInt(envRaw,10);return typeof fileValue==="number"&&Number.isFinite(fileValue)?fileValue:NaN}function staggerKnobMs(envName,fileValue){const envRaw=process.env[envName];if(envRaw!==void 0&&envRaw!=="")return Number(envRaw);if(typeof fileValue==="number"&&Number.isFinite(fileValue))return fileValue;if(typeof fileValue==="string"){const ms2=parseDurationField(fileValue);if(ms2!==void 0)return ms2}return NaN}function fileNetwork(){return loadConfigFile().network??{}}function upstreamTimeoutMs(){const v2=tNum("BILI_UPSTREAM_TIMEOUT_MS",fileNetwork().upstreamTimeoutMs);return Number.isInteger(v2)&&v2>0?v2:UPSTREAM_TIMEOUT_MS}function upstreamCaFile(){const envRaw=process.env["BILI_CA_FILE"];if(envRaw!==void 0&&envRaw!=="")return envRaw;const fileValue=fileNetwork().caFile;return typeof fileValue==="string"&&fileValue!==""?fileValue:void 0}function replayMaxAttempts(){const v2=tNum("BILI_REPLAY_RETRY_MAX",fileNetwork().replayRetryMax);return Number.isInteger(v2)&&v2>=1?v2:REPLAY_MAX_ATTEMPTS}function replayBaseDelayMs(){const v2=tNum("BILI_REPLAY_RETRY_BASE_MS",fileNetwork().replayRetryBaseMs);return Number.isFinite(v2)&&v2>=0?v2:REPLAY_BASE_DELAY_MS}function maxShrinkPerCompress(){const v2=tNum("BILI_MAX_SHRINK_PER_COMPRESS",fileNetwork().maxShrinkPerCompress);return Number.isFinite(v2)&&v2>0&&v2<=1?v2:void 0}function requestWatchdogBudgetMs(){const v2=tNumLoose("BILI_REQUEST_WATCHDOG_MS",fileNetwork().requestWatchdogMs);return Number.isFinite(v2)?Math.floor(v2):2*upstreamTimeoutMs()}function keepAliveTimeoutMs(){const v2=tNum("BILI_KEEP_ALIVE_TIMEOUT_MS",fileNetwork().keepAliveTimeoutMs);return Number.isInteger(v2)&&v2>0?v2:5e3}function clientErrorBackstopMs(){const v2=tNum("BILI_CLIENT_ERROR_BACKSTOP_MS",fileNetwork().clientErrorBackstopMs);return Number.isInteger(v2)&&v2>=0?v2:3e4}function exposureLogIntervalMs(){const v2=tNum("BILI_EXPOSURE_LOG_INTERVAL_MS",fileNetwork().exposureLogIntervalMs);return Number.isInteger(v2)?Math.max(0,v2):36e5}function streamKeepAliveMs(){const v2=tNumLoose("BILI_STREAM_KEEPALIVE_MS",fileNetwork().streamKeepAliveMs);return Number.isFinite(v2)&&v2>=0?Math.floor(v2):STREAM_KEEPALIVE_DEFAULT_MS}function preflightHoldGraceMs(){const v2=tNumLoose("BILI_PREFLIGHT_HOLD_MS",fileNetwork().preflightHoldMs);return Number.isFinite(v2)&&v2>=0?Math.floor(v2):PREFLIGHT_HOLD_GRACE_DEFAULT_MS}function proxyKeepAliveMaxMs(){const v2=tNum("BILI_PROXY_KEEPALIVE_MAX_MS",fileNetwork().proxyKeepAliveMaxMs);return Number.isFinite(v2)&&v2<0?PROXY_KEEPALIVE_MAX_MS:v2===0?0:Number.isFinite(v2)&&v2>0?Math.floor(v2):PROXY_KEEPALIVE_MAX_MS}function postResponseLingerMs(){const v2=tInt("BILI_POST_RESPONSE_LINGER_MS",fileNetwork().postResponseLingerMs);return Number.isFinite(v2)&&v2>0?v2:POST_RESPONSE_LINGER_MS_DEFAULT}function allowPrivateHttpProviders(){const envRaw=process.env.BILI_ALLOW_PRIVATE_HTTP_PROVIDERS;if(envRaw!==void 0)return envRaw==="1"||envRaw==="true";return fileNetwork().allowPrivateHttpProviders===true}function mitmHandshakeTimeoutMs(){const v2=tInt("BILI_MITM_HANDSHAKE_TIMEOUT_MS",loadConfigFile().mitm?.handshakeTimeoutMs);return Number.isFinite(v2)&&v2>0?Math.floor(v2):MITM_HANDSHAKE_TIMEOUT_MS_DEFAULT}function limitsReceiveBytes(){const v2=tInt("BILI_RECEIVE_BODY_BYTES",loadConfigFile().network?.receiveBodyBytes);return Number.isFinite(v2)&&v2>0?Math.floor(v2):DEFAULT_LIMITS_RECEIVE_BYTES}function limitsDecodedBytes(){const v2=tInt("BILI_DECODED_BODY_BYTES",loadConfigFile().network?.decodedBodyBytes);return Number.isFinite(v2)&&v2>0?Math.floor(v2):DEFAULT_LIMITS_DECODED_BYTES}function limitsOutboundBytes(){const v2=tInt("BILI_OUTBOUND_BODY_BYTES",loadConfigFile().network?.outboundBodyBytes);return Number.isFinite(v2)&&v2>0?Math.floor(v2):DEFAULT_LIMITS_OUTBOUND_BYTES}function limitsWsOutboundBytes(){const v2=tInt("BILI_WS_OUTBOUND_BYTES",loadConfigFile().network?.wsOutboundBytes);return Number.isFinite(v2)&&v2>=0?Math.floor(v2):DEFAULT_WS_OUTBOUND_BYTES}function filePersist(){return loadConfigFile().persist??{}}function persistEnabled(){const envRaw=process.env.BILI_PERSIST;if(envRaw!==void 0)return!(envRaw==="0"||envRaw==="false");return filePersist().enabled!==false}function autoModeForgeEnabled(){const envRaw=process.env.BILI_AUTO_MODE_FORGE;if(envRaw!==void 0)return!(envRaw==="0"||envRaw==="false");return loadConfigFile().autoModeForge?.enabled!==false}function guardrailTextRunThreshold(){const n=tNumLoose("BILI_GUARDRAIL_TEXT_RUN_THRESHOLD",loadConfigFile().guardrails?.textRunThreshold);if(!Number.isFinite(n))return DEFAULT_TEXT_RUN_THRESHOLD;return n>0?Math.floor(n):0}function persistZstdEnabled(){const envRaw=process.env.BILI_PERSIST_ZSTD;if(envRaw!==void 0)return envRaw==="1"||envRaw==="true";return filePersist().zstd===true}function persistDebounceMs(){const v2=tInt("BILI_PERSIST_DEBOUNCE_MS",filePersist().debounceMs);return Number.isFinite(v2)&&v2>=0?v2:500}function persistTailTokens(){const v2=tInt("BILI_PERSIST_TAIL_TOKENS",filePersist().tailTokens);return Number.isFinite(v2)&&v2>=0?v2:16384}function persistEpermAlertThreshold(){const v2=tInt("BILI_PERSIST_EPERM_ALERT_THRESHOLD",filePersist().epermAlertThreshold);return Number.isFinite(v2)&&v2>0?v2:5}function persistEpermAlertRepeatMs(){const v2=tInt("BILI_PERSIST_EPERM_ALERT_REPEAT_MS",filePersist().epermAlertRepeatMs);return Number.isFinite(v2)&&v2>=0?v2:0}function maxSessions(){const envRaw=process.env.BILI_MAX_SESSIONS;const v2=envRaw!==void 0?Number.parseInt(envRaw,10):(()=>{const f2=loadConfigFile().sessions?.max;return typeof f2==="number"&&Number.isFinite(f2)?f2:NaN})();return Math.max(1,v2||256)}function sessionWarmMax(){const v2=tInt("BILI_SESSION_WARM_MAX",loadConfigFile().sessions?.warmMax);return Number.isFinite(v2)&&v2>=0?Math.floor(v2):0}function sessionWarmMaxBytes(){const v2=tInt("BILI_SESSION_WARM_MAX_BYTES",loadConfigFile().sessions?.warmMaxBytes);return Number.isFinite(v2)&&v2>=0?Math.floor(v2):64*1024*1024}function sessionResidentMaxBytes(){const v2=tInt("BILI_SESSION_RESIDENT_MAX_BYTES",loadConfigFile().sessions?.residentMaxBytes);return Number.isFinite(v2)&&v2>=0?Math.floor(v2):512*1024*1024}function gcSettings(){const gc=loadConfigFile().sessions?.gc??{};const envRaw=process.env.BILI_SESSION_GC;const enabled=envRaw!==void 0?["1","true","on"].includes(envRaw.toLowerCase()):gc.enabled===true;const ageDays=tIntLoose("BILI_SESSION_GC_MAX_AGE_DAYS",gc.maxAgeDays);const maxTokens=tIntLoose("BILI_SESSION_GC_MAX_TOKENS",gc.maxTokens);const intervalMs=tIntLoose("BILI_SESSION_GC_INTERVAL_MS",gc.intervalMs);return{enabled,maxAgeMs:(Number.isFinite(ageDays)&&ageDays>0?Math.floor(ageDays):7)*GC_DAY_MS,maxTokens:Number.isFinite(maxTokens)&&maxTokens>0?Math.floor(maxTokens):1e6,intervalMs:Number.isFinite(intervalMs)&&intervalMs>0?Math.floor(intervalMs):36e5}}function updateRegistryBase(){const envRaw=process.env.BILI_UPDATE_REGISTRY;if(envRaw!==void 0&&envRaw.trim().length>0)return envRaw.trim();const f2=loadConfigFile().update?.registry;return typeof f2==="string"&&f2.trim().length>0?f2.trim():void 0}function updateCheckIntervalMs(){const v2=tNumLoose("BILI_UPDATE_CHECK_INTERVAL_MS",loadConfigFile().update?.checkIntervalMs);return Number.isFinite(v2)&&v2>0?Math.floor(v2):3*60*1e3}function updatePolicyUrl(){const envRaw=process.env.BILI_UPDATE_POLICY_URL;if(envRaw!==void 0&&envRaw.trim().length>0)return envRaw.trim();const f2=loadConfigFile().update?.policyUrl;return typeof f2==="string"&&f2.trim().length>0?f2.trim():void 0}function updateStaggerMinDelayMs(){const v2=staggerKnobMs("BILI_UPDATE_STAGGER_MIN_MS",loadConfigFile().update?.staggerMinDelayMs);return Number.isInteger(v2)&&v2>=0?Math.floor(v2):void 0}function updateStaggerMaxDelayMs(){const v2=staggerKnobMs("BILI_UPDATE_STAGGER_MAX_MS",loadConfigFile().update?.staggerMaxDelayMs);return Number.isInteger(v2)&&v2>=0?Math.floor(v2):void 0}function publicSnapshotCapBytes(){const raw=process.env.BILI_PUBLIC_SNAPSHOT_CAP_BYTES;const v2=raw!==void 0?Number(raw):(()=>{const f2=loadConfigFile().plugin?.snapshotCapBytes;return typeof f2==="number"&&Number.isFinite(f2)?f2:NaN})();return Number.isFinite(v2)&&v2>=0?v2:104857600}function ccrRetrievalTtlMs(){const envRaw=process.env.BILI_CCR_RETRIEVAL_TTL_MS;const v2=envRaw===void 0||envRaw===""?(()=>{const f2=loadConfigFile().ccrRetrievalTtlMs;return typeof f2==="number"?f2:NaN})():Number(envRaw);return Number.isFinite(v2)&&v2>=0?v2:10*60*1e3}function codexCompactMode(){const envRaw=process.env.BILI_CODEX_COMPACT;if(envRaw!==void 0)return envRaw.trim().toLowerCase()==="pass"?"pass":"intercept";return loadConfigFile().codexCompact==="pass"?"pass":"intercept"}function dshAuthoredCompactionEnabled(){const envRaw=process.env.BILI_DSH_AUTHORED_COMPACTION;if(envRaw!==void 0)return envRaw.trim()!=="0";const file=loadConfigFile().dsh?.authoredCompaction;if(typeof file==="boolean")return file;return true}function decompressTmpCap(){const v2=tIntLoose("BILI_DECOMPRESS_TMP_CAP",loadConfigFile().decompressTmpCap);return Number.isFinite(v2)&&v2>0?v2:50}function imageRescaleEnabled(){const envRaw=process.env.BILI_IMAGE_RESCALE;if(envRaw!==void 0)return!(envRaw==="0"||envRaw==="false");return loadConfigFile().imageRescale!==false}function imageRescaleMaxDim(){const v2=tIntLoose("BILI_IMAGE_RESCALE_MAX_DIM",void 0);return Number.isInteger(v2)&&v2>=128?v2:IMAGE_RESCALE_DEFAULT_MAX_DIM}function fileDiag(){return loadConfigFile().diagnostics??{}}function bodyDumpEnabled(){const envRaw=process.env.ACP_DUMP_BODY;if(envRaw!==void 0)return envRaw==="1";return fileDiag().dumpBody===true}function dumpReqAllowed(){const envRaw=process.env.ACP_DUMP_REQ;if(envRaw!==void 0)return envRaw!=="0";return fileDiag().dumpReq!==false}function rawDumpDir(){const envRaw=process.env.ACP_RAW_DUMP_DIR;if(envRaw)return envRaw;const f2=fileDiag().rawDumpDir;if(typeof f2==="string"&&f2.trim().length>0)return f2;return path5.join(stateDir(),"raw")}function dump4xxEnabled(){const envRaw=process.env.BILI_DUMP_4XX;if(envRaw!==void 0)return envRaw==="1";return fileDiag().dump4xx===true}function dump4xxMaxBytes(){const envRaw=process.env.BILI_DUMP_4XX_MAX_BYTES;if(envRaw!==void 0)return Math.max(1024,Number(envRaw)||2*1024*1024);const f2=fileDiag().dump4xxMaxBytes;const n=typeof f2==="number"&&Number.isFinite(f2)&&f2>0?f2:NaN;return Math.max(1024,n||2*1024*1024)}function dumpGcMaxTotalBytes(){const envRaw=process.env.BILI_DUMP_MAX_TOTAL_BYTES;if(envRaw!==void 0){const v2=Number(envRaw);return Number.isFinite(v2)&&v2>0?Math.max(1<<20,v2):null}const f2=fileDiag().maxTotalBytes;if(typeof f2==="number"&&Number.isFinite(f2)&&f2>0)return Math.max(1<<20,f2);return null}function dumpGcMaxAgeMs(){const envRaw=process.env.BILI_DUMP_MAX_AGE_DAYS;if(envRaw!==void 0){const d=Number(envRaw);return Number.isFinite(d)&&d>0?Math.max(1/24,d)*864e5:null}const f2=fileDiag().maxAgeDays;if(typeof f2==="number"&&Number.isFinite(f2)&&f2>0)return Math.max(1/24,f2)*864e5;return null}function renderNone(){const envRaw=process.env.ACP_RENDER_NONE;if(envRaw!==void 0)return envRaw.length>0;return fileDiag().renderNone===true}function invariantJudgeEnabled(){const envRaw=process.env.BILI_INVARIANT_JUDGE;if(envRaw!==void 0)return!(envRaw==="0"||envRaw==="false"||envRaw==="off");const f2=fileDiag().invariantJudge;return typeof f2==="boolean"?f2:true}function noInjectTool(){const envRaw=process.env.ACP_NO_INJECT_TOOL;if(envRaw!==void 0)return envRaw.length>0;return fileDiag().noInjectTool===true}function noCompressPrompt(){const envRaw=process.env.ACP_NO_COMPRESS_PROMPT;if(envRaw!==void 0)return envRaw.length>0;return fileDiag().noCompressPrompt===true}function countTokensPassthrough(){const envRaw=process.env.ACP_COUNT_TOKENS_PASSTHROUGH;if(envRaw!==void 0)return envRaw==="1";return fileDiag().countTokensPassthrough===true}function forceTextProtocol(){const envRaw=process.env.ACP_COMPRESS_PROTOCOL;if(envRaw!==void 0)return envRaw==="text";return fileDiag().compressProtocol==="text"}function keepResponseId(){const envRaw=process.env.ACP_KEEP_RESPONSE_ID;if(envRaw!==void 0)return envRaw==="1";return loadConfigFile().compat?.keepResponseId===true}function noCacheControl(){const envRaw=process.env.BILI_NO_CACHE_CONTROL;if(envRaw!==void 0)return envRaw.length>0;return loadConfigFile().compat?.noCacheControl===true}function fakeCompletionRetries(){const v2=tInt("BILI_FAKE_COMPLETION_RETRIES",loadConfigFile().fakeCompletion?.retries);return Number.isFinite(v2)&&v2>=0?v2:0}function fakeBufCapBytes(){const v2=tInt("BILI_FAKE_BUF_CAP",loadConfigFile().fakeCompletion?.bufCapBytes);return Number.isFinite(v2)&&v2>0?v2:16*1024*1024}function fileStorageUnified(){const v2=loadConfigFile().storage?.unified;return typeof v2==="string"?v2:void 0}function fileStorageJsonWriter(){const v2=loadConfigFile().storage?.jsonWriter;return typeof v2==="string"?v2:void 0}function fileStorageAutoDownload(){const v2=loadConfigFile().storage?.sqliteAutoDownload;return typeof v2==="boolean"?v2:void 0}function fileStorageArchiveAfterDays(){const v2=loadConfigFile().storage?.archiveAfterDays;return typeof v2==="number"&&Number.isFinite(v2)&&v2>=0?v2:void 0}function fileStorageBackend(){const v2=loadConfigFile().storage?.backend;return typeof v2==="string"?v2:void 0}function fileStorageMysqlDsn(){const v2=loadConfigFile().storage?.mysql?.dsn;return typeof v2==="string"&&v2.trim().length>0?v2:void 0}function fileStorageWalJournalSizeLimit(){const v2=loadConfigFile().storage?.walJournalSizeLimitBytes;return typeof v2==="number"&&Number.isInteger(v2)&&v2>0?v2:void 0}function resolveArchiveAfterDays(env=process.env,fileDays){const raw=env.BILI_STORAGE_ARCHIVE_AFTER_DAYS?.trim();if(raw!==void 0&&raw!==""){const n=Number.parseInt(raw,10);if(Number.isFinite(n)&&n>=0)return n}if(typeof fileDays==="number"&&Number.isFinite(fileDays)&&fileDays>=0)return fileDays;return 365}function resolveStorageMode(env=process.env,fileUnified){const raw=env.BILI_STORAGE_UNIFIED?.trim().toLowerCase();if(raw){if(raw==="full"||raw==="unified")return"full";if(raw==="1"||raw==="true"||raw==="shadow")return"shadow";return"legacy"}const file=fileUnified?.trim().toLowerCase();if(file==="full")return"full";if(file==="shadow")return"shadow";if(file)return"legacy";return"full"}function resolveJsonWriterOff(env=process.env,fileValue){const raw=env.BILI_STORAGE_JSON_WRITER?.trim().toLowerCase();if(raw==="0"||raw==="false"||raw==="off")return true;if(raw==="1"||raw==="true"||raw==="on")return false;return fileValue?.trim().toLowerCase()==="off"}function resolveSnapshotShadow(env=process.env,fileShadow){const raw=env.BILI_SNAPSHOT_SHADOW?.trim().toLowerCase();if(raw==="1"||raw==="true"||raw==="on")return true;if(raw==="0"||raw==="false"||raw==="off")return false;return typeof fileShadow==="boolean"?fileShadow:true}function resolveSqliteAutoDownload(env=process.env,fileValue){const raw=env.BILI_SQLITE_AUTO_DOWNLOAD?.trim().toLowerCase();if(raw==="1"||raw==="true")return true;if(raw==="0"||raw==="false")return false;return typeof fileValue==="boolean"?fileValue:true}function resolveStorageWalJournalSizeLimit(env=process.env,fileValue){const raw=env.BILI_STORAGE_WAL_JOURNAL_SIZE_LIMIT_BYTES?.trim();if(raw){const n=Number(raw);if(Number.isInteger(n)&&n>0)return n}if(typeof fileValue==="number"&&Number.isInteger(fileValue)&&fileValue>0)return fileValue;return WAL_JOURNAL_SIZE_LIMIT}var STREAM_KEEPALIVE_DEFAULT_MS,PREFLIGHT_HOLD_GRACE_DEFAULT_MS,POST_RESPONSE_LINGER_MS_DEFAULT,MITM_HANDSHAKE_TIMEOUT_MS_DEFAULT,DEFAULT_LIMITS_RECEIVE_BYTES,DEFAULT_LIMITS_DECODED_BYTES,DEFAULT_LIMITS_OUTBOUND_BYTES,DEFAULT_WS_OUTBOUND_BYTES,DEFAULT_TEXT_RUN_THRESHOLD,GC_DAY_MS,IMAGE_RESCALE_DEFAULT_MAX_DIM;var init_knobs=__esm({"src/knobs.ts"(){"use strict";init_paths();init_config();init_duration();init_fetch_util();init_upstream_proxy();init_schema();STREAM_KEEPALIVE_DEFAULT_MS=15e3;PREFLIGHT_HOLD_GRACE_DEFAULT_MS=3e4;POST_RESPONSE_LINGER_MS_DEFAULT=5e3;MITM_HANDSHAKE_TIMEOUT_MS_DEFAULT=1e4;DEFAULT_LIMITS_RECEIVE_BYTES=5*1024*1024*1024;DEFAULT_LIMITS_DECODED_BYTES=10*1024*1024*1024;DEFAULT_LIMITS_OUTBOUND_BYTES=5*1024*1024*1024;DEFAULT_WS_OUTBOUND_BYTES=10*1024*1024;DEFAULT_TEXT_RUN_THRESHOLD=200;GC_DAY_MS=864e5;IMAGE_RESCALE_DEFAULT_MAX_DIM=1600}});import{readFileSync as readFileSync3,statSync as statSync2}from"fs";import*as tls from"tls";function readPem(path54){try{return[readFileSync3(path54,"utf8")]}catch(err2){log("warn",`[upstream-ca] CA file ${path54} unreadable (${err2.message}); ignoring \u2014 upstream TLS falls back to whatever else is trusted`);return[]}}function upstreamCaIdentity(now=Date.now()){const caFile=upstreamCaFile();if(!caFile){lastIdentity="none";return"none"}if(now-lastStatAt<IDENTITY_TTL_MS&&lastIdentity!=="none")return lastIdentity;let mtimeMs=0;try{mtimeMs=statSync2(caFile).mtimeMs}catch{}lastIdentity=`${caFile}\0${mtimeMs}`;lastStatAt=now;return lastIdentity}function upstreamExtraCa(){const identity=upstreamCaIdentity();if(identity==="none")return void 0;if(cacheKey===identity)return cacheValue;const merged=[...tls.rootCertificates];const nodeExtra=process.env["NODE_EXTRA_CA_CERTS"];if(nodeExtra)merged.push(...readPem(nodeExtra));const caFile=upstreamCaFile();if(caFile)merged.push(...readPem(caFile));cacheKey=identity;cacheValue=merged;log("info",`[upstream-ca] upstream TLS trust extended with ${caFile} (${merged.length} certs total)`);return merged}var IDENTITY_TTL_MS,lastStatAt,lastIdentity,cacheKey,cacheValue;var init_upstream_ca=__esm({"src/upstream-ca.ts"(){"use strict";init_logger();init_knobs();IDENTITY_TTL_MS=3e4;lastStatAt=0;lastIdentity="none";cacheKey=null}});function checkOutboundBody(body){const bytes=typeof body==="string"?Buffer.byteLength(body):Buffer.isBuffer(body)?body.byteLength:0;if(bytes>limitsOutboundBytes())throw new OutboundBodyTooLargeError(bytes)}var MAX_REQUEST_BYTES,MAX_DECODED_REQUEST_BYTES,MAX_LARGE_DECODED_REQUESTS,largeDecodedRequests,DecodedRequestBusyError,DecodedRequestAdmission,OutboundBodyTooLargeError;var init_request_body_budget=__esm({"src/request-body-budget.ts"(){"use strict";init_knobs();MAX_REQUEST_BYTES=100*1024*1024;MAX_DECODED_REQUEST_BYTES=2*MAX_REQUEST_BYTES;MAX_LARGE_DECODED_REQUESTS=2;largeDecodedRequests=0;DecodedRequestBusyError=class extends Error{constructor(){super("large decoded request budget is busy; retry after an active request finishes");this.name="DecodedRequestBusyError"}};DecodedRequestAdmission=class{admitted=false;observe(bytes){if(bytes<=limitsReceiveBytes()||this.admitted)return;if(largeDecodedRequests>=MAX_LARGE_DECODED_REQUESTS)throw new DecodedRequestBusyError;largeDecodedRequests++;this.admitted=true}release(){if(!this.admitted)return;largeDecodedRequests--;this.admitted=false}};OutboundBodyTooLargeError=class extends Error{constructor(bytes){super(`rebuilt request exceeds ${limitsOutboundBytes()} bytes (${bytes} bytes); reduce historical images or content before retrying`);this.bytes=bytes;this.name="OutboundBodyTooLargeError"}bytes}}});function upstreamTimeoutMs2(){return upstreamTimeoutMs()}function directDispatcher(timeoutMs){const key2=`${timeoutMs}\0${upstreamCaIdentity()}`;let agent=directDispatchers.get(key2);if(!agent){const ca=upstreamExtraCa();agent=new import_undici.Agent({headersTimeout:timeoutMs,bodyTimeout:timeoutMs,...ca?{connect:{ca}}:{}});directDispatchers.set(key2,agent)}return agent}function restrictAcceptEncoding(headers){if(!headers)return headers;const entries2=[];if(typeof Headers!=="undefined"&&headers instanceof Headers){headers.forEach((v2,k2)=>entries2.push([k2,v2]))}else if(Array.isArray(headers)){for(const pair of headers)entries2.push([pair[0],String(pair[1])])}else{for(const[k2,v2]of Object.entries(headers))entries2.push([k2,String(v2)])}const out={};for(const[k2,v2]of entries2){if(k2.toLowerCase()!=="accept-encoding"){out[k2]=v2;continue}const kept=v2.split(",").map(part=>part.trim()).filter(part=>part!=="").filter(part=>DECODABLE_ENCODINGS.has(part.split(";")[0].trim().toLowerCase()));if(kept.length>0)out["accept-encoding"]=kept.join(", ")}return out}async function fetchWithTimeout(url,opts,timeoutMs,externalSignal,forceDirect){checkOutboundBody(opts.body);const effective=timeoutMs??upstreamTimeoutMs2();const controller=new AbortController;let cleared=false;const armTimer=()=>{const t=setTimeout(()=>{liveUpstreamTimers.delete(t);controller.abort()},idleTimerDelayOverrideMs??effective);liveUpstreamTimers.add(t);return t};let timer6=armTimer();const rearm=()=>{if(cleared)return;clearTimeout(timer6);liveUpstreamTimers.delete(timer6);idleRearmCount+=1;timer6=armTimer()};let onExternalAbort=null;if(externalSignal){if(externalSignal.aborted)controller.abort();else{onExternalAbort=()=>controller.abort();externalSignal.addEventListener("abort",onExternalAbort,{once:true})}}const stopIdleTimer=()=>{cleared=true;clearTimeout(timer6);liveUpstreamTimers.delete(timer6)};const cleanup=()=>{stopIdleTimer();if(onExternalAbort&&externalSignal)externalSignal.removeEventListener("abort",onExternalAbort)};try{const finalOpts={...opts,signal:controller.signal,dispatcher:opts.dispatcher??directDispatcher(idleTimerDelayOverrideMs??effective),redirect:opts.redirect??"manual",headers:restrictAcceptEncoding(opts.headers)};const transport=forceDirect?void 0:currentFetchTransport();const raw=transport?await transport(url,finalOpts):await fetch(url,finalOpts);if(raw.body){const wrapped=armIdleBody(raw.body,rearm);return{response:new Response(wrapped,{status:raw.status,statusText:raw.statusText,headers:raw.headers}),clearTimer:cleanup,stopIdleTimer}}return{response:raw,clearTimer:cleanup,stopIdleTimer}}catch(e){cleanup();throw e}}function armIdleBody(body,rearm){const reader=body.getReader();return new ReadableStream({async pull(controller){try{const result=await reader.read();if(result.done){controller.close();return}rearm();controller.enqueue(result.value)}catch(e){controller.error(e)}},async cancel(reason){try{await reader.cancel(reason)}catch{}}})}function isTransientUpstreamError(status,body){if(status===429||status>=500)return true;if(status<400)return false;const lower=body.toLowerCase();return TRANSIENT_BODY_MARKERS.some(marker=>lower.includes(marker))}function replayMaxAttempts2(){return replayMaxAttempts()}function replayBaseDelayMs2(){return replayBaseDelayMs()}function maxShrinkPerCompress2(){return maxShrinkPerCompress()}function replayBackoffMs(attempt){return replayBaseDelayMs2()*2**(attempt-1)}function sleep(ms2,signal){if(ms2<=0||signal?.aborted)return Promise.resolve();return new Promise(resolve=>{let timer6=null;const finish2=()=>{if(timer6)clearTimeout(timer6);if(signal)signal.removeEventListener("abort",finish2);resolve()};timer6=setTimeout(finish2,ms2);if(signal)signal.addEventListener("abort",finish2,{once:true})})}async function fetchWithRetry(url,opts,timeoutMs,externalSignal,onRetry){const maxAttempts=replayMaxAttempts2();for(let attempt=1;;attempt++){let result;try{result=await fetchWithTimeout(url,opts,timeoutMs,externalSignal)}catch(error){const kind=classifyUpstreamFailure(error,{viaProxy:opts.dispatcher!==void 0,externalAborted:externalSignal?.aborted===true});if(!isFailFastUpstreamKind(kind))throw error;const lastAttempt2=attempt>=maxAttempts;if(lastAttempt2)throw error;const delayMs=replayBackoffMs(attempt);onRetry?.({attempt,status:0,detail:`${kind} (pre-response network failure): ${error instanceof Error?error.message:String(error)}`,delayMs,maxAttempts});await sleep(delayMs,externalSignal);continue}if(result.response.ok)return result;const errText2=await result.response.text().catch(()=>"upstream error");result.clearTimer();const lastAttempt=attempt>=maxAttempts;if(!lastAttempt&&isTransientUpstreamError(result.response.status,errText2)){const delayMs=replayBackoffMs(attempt);onRetry?.({attempt,status:result.response.status,detail:errText2,delayMs,maxAttempts});await sleep(delayMs,externalSignal);continue}throw new UpstreamHttpError(result.response.status,errText2,attempt)}}async function fetchWithTransportRetry(url,opts,timeoutMs,externalSignal,onRetry){const maxAttempts=replayMaxAttempts2();for(let attempt=1;;attempt++){try{return await fetchWithTimeout(url,opts,timeoutMs,externalSignal)}catch(error){const kind=classifyUpstreamFailure(error,{viaProxy:opts.dispatcher!==void 0,externalAborted:externalSignal?.aborted===true});if(!isFailFastUpstreamKind(kind))throw error;const lastAttempt=attempt>=maxAttempts;if(lastAttempt)throw error;const delayMs=replayBackoffMs(attempt);onRetry?.({attempt,status:0,detail:`${kind} (pre-response network failure): ${error instanceof Error?error.message:String(error)}`,delayMs,maxAttempts});await sleep(delayMs,externalSignal)}}}var import_undici,UPSTREAM_TIMEOUT_MS,liveUpstreamTimers,idleTimerDelayOverrideMs,idleRearmCount,directDispatchers,DECODABLE_ENCODINGS,UpstreamHttpError,TRANSIENT_BODY_MARKERS,REPLAY_MAX_ATTEMPTS,REPLAY_BASE_DELAY_MS;var init_fetch_util=__esm({"src/fetch-util.ts"(){"use strict";import_undici=__toESM(require_undici(),1);init_fetch_transport();init_upstream_fail();init_upstream_ca();init_knobs();init_request_body_budget();init_request_body_budget();UPSTREAM_TIMEOUT_MS=12*60*1e3;liveUpstreamTimers=new Set;idleTimerDelayOverrideMs=null;idleRearmCount=0;directDispatchers=new Map;DECODABLE_ENCODINGS=new Set(["gzip","x-gzip","deflate","br"]);UpstreamHttpError=class extends Error{status;body;attempts;constructor(status,body,attempts){super(`upstream error ${status}`);this.name="UpstreamHttpError";this.status=status;this.body=body;this.attempts=attempts}};TRANSIENT_BODY_MARKERS=["captcha","verify failed","risk control","\u98CE\u63A7","rate limit","too many requests","try again"];REPLAY_MAX_ATTEMPTS=3;REPLAY_BASE_DELAY_MS=1500}});import{execFileSync as execFileSync2}from"child_process";import net from"net";import tls2 from"tls";function defaultPort(protocol){return protocol==="https:"?443:80}function hostIsLoopback(host){const normalized=host.replace(/^\[|\]$/g,"").toLowerCase();return normalized==="localhost"||normalized==="0.0.0.0"||normalized==="::"||normalized==="::1"||normalized==="0:0:0:0:0:0:0:1"||normalized.startsWith("127.")||normalized.startsWith("::ffff:127.")||/^::ffff:7f[0-9a-f]{2}:/.test(normalized)}function proxyAuthorization(url){if(!url.username&&!url.password)return void 0;const username=decodeURIComponent(url.username);const password=decodeURIComponent(url.password);return`Basic ${Buffer.from(`${username}:${password}`).toString("base64")}`}function parseHttpProxy(proxy,biliPort){if(!proxy||typeof proxy!=="string"||!proxy.trim())return void 0;const candidate=/^[A-Za-z][A-Za-z0-9+.-]*:\/\//.test(proxy.trim())?proxy.trim():`http://${proxy.trim()}`;let url;try{url=new URL(candidate)}catch{return void 0}if(url.protocol!=="http:"&&url.protocol!=="https:")return void 0;if(url.pathname&&url.pathname!=="/"||url.search||url.hash)return void 0;const port=url.port?Number.parseInt(url.port,10):defaultPort(url.protocol);if(!Number.isInteger(port)||port<1||port>65535)return void 0;if(biliPort&&hostIsLoopback(url.hostname)&&port===biliPort){throw new Error(`upstream proxy would loop back into bili: ${redactProxyUrl(url.href)}`)}return{url:url.href,host:url.hostname,port,protocol:url.protocol,...proxyAuthorization(url)?{authorization:proxyAuthorization(url)}:{}}}function unsupportedProxyScheme(proxy){if(!proxy||typeof proxy!=="string"||!proxy.trim())return void 0;const candidate=/^[A-Za-z][A-Za-z0-9+.-]*:\/\//.test(proxy.trim())?proxy.trim():`http://${proxy.trim()}`;let url;try{url=new URL(candidate)}catch{return void 0}return url.protocol==="http:"||url.protocol==="https:"?void 0:url.protocol.replace(/:$/,"")}function warnUnsupportedScheme(source,value,scheme){const key2=`${source}\0${scheme}`;if(warnedUnsupportedSchemes.has(key2))return;warnedUnsupportedSchemes.add(key2);log("warn",`[upstream-proxy] ignoring ${source}=${redactProxyUrl(value)}: scheme "${scheme}" is not supported \u2014 only http:// and https:// proxy origins work. For Clash/mihomo, point bili at the same mixed port over http:// (e.g. http://127.0.0.1:7890).`)}function validateHttpProxy(proxy,biliPort){if(!proxy?.trim())return;const scheme=unsupportedProxyScheme(proxy);if(scheme){throw new Error(`upstream proxy uses unsupported scheme "${scheme}" (${redactProxyUrl(proxy)}) \u2014 only http:// and https:// proxies are supported; for Clash/mihomo use the same mixed port over http:// (e.g. http://127.0.0.1:7890)`)}if(!parseHttpProxy(proxy,biliPort)){throw new Error(`upstream proxy must be an HTTP/HTTPS proxy origin: ${redactProxyUrl(proxy)}`)}}function targetUrl(upstreamUrl){if(!upstreamUrl)return void 0;try{return new URL(upstreamUrl.replace(/^mitm:\/\//,"https://"))}catch{return void 0}}function parseFallbackProxy(proxy,biliPort){try{return parseHttpProxy(proxy,biliPort)}catch{return void 0}}function wildcardHostMatch(host,token){const pattern="^"+token.split("*").map(part=>part.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")).join(".*")+"$";return new RegExp(pattern).test(host)}function matchesNoProxy(target,noProxy,options={}){if(!noProxy)return false;const host=target.hostname.replace(/^\[|\]$/g,"").toLowerCase();const port=target.port?Number.parseInt(target.port,10):defaultPort(target.protocol);for(const raw of noProxy.split(/[;,]/)){let token=raw.trim().toLowerCase();if(!token)continue;if(token==="*")return true;if(token==="<local>"&&!host.includes("."))return true;let tokenPort;if(token.startsWith("[")){const bracket=token.indexOf("]");if(bracket>0&&token[bracket+1]===":"){tokenPort=Number.parseInt(token.slice(bracket+2),10);token=token.slice(1,bracket)}else token=token.replace(/^\[|\]$/g,"")}else{const colon=token.lastIndexOf(":");if(colon>0&&token.indexOf(":")===colon&&/^\d+$/.test(token.slice(colon+1))){tokenPort=Number.parseInt(token.slice(colon+1),10);token=token.slice(0,colon)}}if(tokenPort!==void 0&&tokenPort!==port)continue;if(options.windowsBypass&&!token.startsWith("*")&&token.includes("*")&&wildcardHostMatch(host,token))return true;const suffix=token.startsWith("*.")?token.slice(1):token.startsWith(".")?token:void 0;if(suffix?host.endsWith(suffix)||host===suffix.slice(1):host===token)return true}return false}function parseWindowsProxyServer(value){const trimmed=value.trim();if(!trimmed)return{};if(!trimmed.includes("=")){const normalized=parseHttpProxy(trimmed)?.url;return normalized?{http:normalized,https:normalized}:{}}const result={};for(const item of trimmed.split(";")){const[scheme,address]=item.split("=",2).map(part=>part?.trim());const normalizedScheme=scheme?.toLowerCase();if((normalizedScheme==="http"||normalizedScheme==="https")&&address){const normalized=parseHttpProxy(address)?.url;if(normalized)result[normalizedScheme]=normalized}}return result}function registryValue(output,name){const escaped=name.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");return output.match(new RegExp(`^\\s*${escaped}\\s+REG_\\w+\\s+(.+)$`,"mi"))?.[1]?.trim()}function readWindowsSystemProxy(){if(process.platform!=="win32")return{enabled:false};const now=Date.now();if(windowsProxyCache&&now-windowsProxyCache.at<5e3)return windowsProxyCache.value;let value={enabled:false};try{const output=execFileSync2("reg",["query","HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings"],{encoding:"utf8",windowsHide:true,timeout:3e3,stdio:["ignore","pipe","ignore"]});const enabledRaw=registryValue(output,"ProxyEnable");const enabled=enabledRaw==="0x1"||enabledRaw==="1";const staticProxy=enabled?parseWindowsProxyServer(registryValue(output,"ProxyServer")??""):{};value={enabled,...staticProxy,...registryValue(output,"ProxyOverride")?{bypass:registryValue(output,"ProxyOverride")}:{},...registryValue(output,"AutoConfigURL")?{autoConfigUrl:registryValue(output,"AutoConfigURL")}:{}}}catch{}windowsProxyCache={at:now,value};return value}function resolveProxyDecision(routes,globalProxy,upstreamUrl,fallback={}){const target=targetUrl(upstreamUrl);let bestKey="";if(upstreamUrl){for(const key2 of Object.keys(routes)){if(upstreamUrl===key2||upstreamUrl.startsWith(key2+"/")){if(key2.length>bestKey.length)bestKey=key2}}}if(bestKey){const routeProxy=routes[bestKey].proxy;if(routeProxy!==void 0){if(!routeProxy.trim())return{source:"provider-direct"};const parsed=parseHttpProxy(routeProxy,fallback.biliPort);if(!parsed)throw new Error(`invalid per-URL upstream proxy for ${bestKey}: ${redactProxyUrl(routeProxy)}`);return{proxy:parsed.url,source:"provider"}}}if(globalProxy===""&&fallback.explicitDirect){if(!fallback.defaultDirect)return{source:"direct"};const peek=autoDetectProxy(target,fallback);return peek.proxy?{source:"direct",skippedProxy:{proxy:peek.proxy,source:peek.source}}:{source:"direct"}}const explicit=parseHttpProxy(globalProxy,fallback.biliPort)?.url;if(explicit)return{proxy:explicit,source:fallback.globalSource??"global"};return autoDetectProxy(target,fallback)}function autoDetectProxy(target,fallback){if(target&&matchesNoProxy(target,fallback.noProxy))return{source:"no-proxy"};const environmentCandidates=target?.protocol==="http:"?[["HTTP_PROXY",fallback.httpProxy],["ALL_PROXY",fallback.allProxy]]:[["HTTPS_PROXY",fallback.httpsProxy],["HTTP_PROXY",fallback.httpProxy],["ALL_PROXY",fallback.allProxy]];for(const[source,value]of environmentCandidates){const parsed=parseFallbackProxy(value,fallback.biliPort);if(parsed)return{proxy:parsed.url,source};if(!value)continue;const scheme=unsupportedProxyScheme(value);if(scheme)warnUnsupportedScheme(source,value,scheme)}const system=fallback.systemProxy??readWindowsSystemProxy();if(target&&matchesNoProxy(target,system.bypass,{windowsBypass:true})){return{source:"windows-bypass",...system.autoConfigUrl?{autoConfigUrl:system.autoConfigUrl}:{}}}const systemValue=target?.protocol==="http:"?system.http:system.https??system.http;const systemScheme=unsupportedProxyScheme(systemValue);if(systemValue&&systemScheme)warnUnsupportedScheme("windows-system",systemValue,systemScheme);const systemProxy=parseFallbackProxy(systemValue,fallback.biliPort)?.url;if(systemProxy){return{proxy:systemProxy,source:"windows-system",...system.autoConfigUrl?{autoConfigUrl:system.autoConfigUrl}:{}}}return{source:"direct",...system.autoConfigUrl?{autoConfigUrl:system.autoConfigUrl}:{}}}function resolveProxy(routes,globalProxy,upstreamUrl,fallback={}){return resolveProxyDecision(routes,globalProxy,upstreamUrl,fallback).proxy}function proxyKeepAliveMaxMs2(){return proxyKeepAliveMaxMs()}function proxyDispatcher(proxyUrl,timeoutMs){if(!proxyUrl)return void 0;const t=timeoutMs??upstreamTimeoutMs2();const ka=proxyKeepAliveMaxMs2();const key2=`${proxyUrl}\0${t}\0${ka}\0${upstreamCaIdentity()}`;let agent=dispatcherCache.get(key2);if(!agent){const withTimeouts=options=>{const capped={...options,headersTimeout:t,bodyTimeout:t};if(ka>0){capped.keepAliveTimeout=Math.min(typeof capped.keepAliveTimeout==="number"?capped.keepAliveTimeout:ka,ka);capped.keepAliveMaxTimeout=ka}return capped};const base={uri:proxyUrl,headersTimeout:t,bodyTimeout:t,factory:(origin,options)=>new import_undici2.Pool(origin,withTimeouts(options)),clientFactory:(origin,options)=>new import_undici2.Pool(origin,withTimeouts(options))};const ca=upstreamExtraCa();const withConnect=ca?{...base,connect:{ca}}:base;agent=ka>0?new import_undici2.ProxyAgent({...withConnect,keepAliveTimeout:ka,keepAliveMaxTimeout:ka}):new import_undici2.ProxyAgent(withConnect);dispatcherCache.set(key2,agent)}return agent}function resetProxyCache(){for(const agent of dispatcherCache.values()){try{void agent.close().catch(()=>void 0)}catch{}}dispatcherCache.clear();lastConnection={}}function openProxySocket(proxy){if(proxy.protocol==="https:"){return tls2.connect({host:proxy.host,port:proxy.port,servername:net.isIP(proxy.host)?void 0:proxy.host})}return net.connect(proxy.port,proxy.host)}function connectDirect(host,port,timeoutMs=CONNECT_TIMEOUT_MS){return new Promise((resolve,reject)=>{const socket=connectFactory(port,host);let settled=false;const finishError=error=>{if(settled)return;settled=true;clearTimeout(timer6);socket.destroy();reject(error)};const timer6=setTimeout(()=>finishError(new Error(`upstream connect ${host}:${port} timed out after ${timeoutMs}ms`)),timeoutMs);socket.once("error",finishError);socket.once("connect",()=>{if(settled)return;settled=true;clearTimeout(timer6);resolve(socket)})})}function connectThroughProxy(host,port,proxyUrl){if(!proxyUrl){return connectDirect(host,port)}const proxy=parseHttpProxy(proxyUrl);if(!proxy)return Promise.reject(new Error(`invalid upstream proxy: ${redactProxyUrl(proxyUrl)}`));return new Promise((resolve,reject)=>{const socket=openProxySocket(proxy);let settled=false;const finishError=error=>{if(settled)return;settled=true;clearTimeout(timer6);socket.destroy();reject(error)};const timer6=setTimeout(()=>finishError(new Error(`upstream proxy CONNECT ${host}:${port} handshake timeout`)),CONNECT_TIMEOUT_MS);socket.once("error",finishError);const connectedEvent=proxy.protocol==="https:"?"secureConnect":"connect";socket.once(connectedEvent,()=>{const headers=[`CONNECT ${host}:${port} HTTP/1.1`,`Host: ${host}:${port}`,"Proxy-Connection: Keep-Alive",...proxy.authorization?[`Proxy-Authorization: ${proxy.authorization}`]:[],"",""];socket.write(headers.join("\r\n"));let buffer=Buffer.alloc(0);const onData=chunk=>{buffer=Buffer.concat([buffer,chunk]);const end=buffer.indexOf("\r\n\r\n");if(end<0){if(buffer.length>64*1024)finishError(new Error("upstream proxy CONNECT response header is too large"));return}socket.removeListener("data",onData);const head=buffer.subarray(0,end).toString("latin1");const statusLine=head.split("\r\n",1)[0]??"";if(!/^HTTP\/1\.[01]\s+2\d\d(?:\s|$)/.test(statusLine)){finishError(new Error(`upstream proxy CONNECT ${host}:${port} failed: ${statusLine}`));return}settled=true;clearTimeout(timer6);socket.removeListener("error",finishError);const rest=buffer.subarray(end+4);if(rest.length>0)socket.unshift(rest);resolve(socket)};socket.on("data",onData)})})}function errorChain(error){const chain=[];const seen=new Set;let current=error;while(current&&!seen.has(current)){seen.add(current);if(current instanceof Error){const record3={message:current.message};for(const key2 of["code","errno","syscall","address","port"]){const value=current[key2];if(value!==void 0)record3[key2]=value}chain.push(record3);current=current.cause}else{chain.push({message:String(current)});break}}return chain}function describeUpstreamFailure(error,url,proxyUrl,skipped){const chain=errorChain(error);const kind=classifyUpstreamFailure(error,{viaProxy:proxyUrl!==void 0});const fields=["code","errno","syscall","address","port"];const parts=[`kind=${kind}`];const maskHostIn=s3=>{try{return maskHostInText(s3,new URL(url).hostname)}catch{}return s3};let codeValue;for(const field of fields){const value=chain.find(entry=>entry[field]!==void 0)?.[field];if(value!==void 0){if(field==="code"&&codeValue===void 0)codeValue=value;parts.push(`${field}=${maskHostIn(String(value))}`)}}const messages=chain.map(entry=>maskHostIn(String(entry.message??""))).filter(Boolean);if(messages.length>0)parts.push(`message=${messages.join(" <- ")}`);parts.push(`url=${maskUrlForLog(url)}`);parts.push(`proxy=${redactProxyUrl(proxyUrl)??"direct"}`);let hint=hintWithSkippedProxy(kind,skipped);if(kind==="tls"&&chain.some(entry=>isTlsTrustCode(entry.code))){hint=`${hint}; ${tlsTrustRemediation()}`}parts.push(`hint=${hint}`);return{message:parts.join(" "),detail:{kind,...codeValue!==void 0?{code:String(codeValue)}:{},hint}}}function formatUpstreamError(error,url,proxyUrl,skipped){return describeUpstreamFailure(error,url,proxyUrl,skipped).message}function recordUpstreamConnection(url,proxyUrl,error,skipped){lastConnection={url,proxy:redactProxyUrl(proxyUrl),connected:error===void 0,...error===void 0?{}:{error:formatUpstreamError(error,url,proxyUrl,skipped)},checkedAt:new Date().toISOString()}}function getUpstreamConnectionStatus(){return{...lastConnection}}var import_undici2,dispatcherCache,lastConnection,windowsProxyCache,warnedUnsupportedSchemes,PROXY_KEEPALIVE_MAX_MS,CONNECT_TIMEOUT_MS,connectFactory;var init_upstream_proxy=__esm({"src/upstream-proxy.ts"(){"use strict";import_undici2=__toESM(require_undici(),1);init_logger();init_log_mask();init_fetch_util();init_upstream_fail();init_upstream_ca();init_knobs();dispatcherCache=new Map;lastConnection={};warnedUnsupportedSchemes=new Set;PROXY_KEEPALIVE_MAX_MS=55e3;CONNECT_TIMEOUT_MS=1e4;connectFactory=(port,host)=>net.connect(port,host)}});import{createHash as createHash4}from"crypto";function hashId(s3){return createHash4("sha256").update(s3,"utf8").digest("hex").slice(0,16)}function strippedResponseIdWarning(prevId){if(typeof prevId!=="string"||prevId.length===0)return null;return`responses previous_response_id=${prevId} stripped without rebuilding referenced history (#1954): bili replays input as full history, so a Responses native-chaining (delta) continuation loses prior turns upstream yet still returns 200. Send full input/output history, or set ACP_KEEP_RESPONSE_ID=1 to preserve the id.`}function isLoopbackAddress(addr){return!!addr&&(addr.startsWith("127.")||addr==="::1"||addr.startsWith("::ffff:127."))}function normalizeUpstreamOrigin(u2){if(!u2)return void 0;try{return new URL(u2.replace(/^mitm:\/\//,"https://")).origin}catch{const t=u2.trim();return t||void 0}}function applyEstimateCalibration(raw,k2,kOrigin,origin){if(k2===void 0||!Number.isFinite(k2)||k2<=0||raw<=0)return raw;const a=normalizeUpstreamOrigin(origin);const b2=normalizeUpstreamOrigin(kOrigin);if(a===void 0||b2===void 0||a!==b2)return raw;return raw*k2}function currentCalibrationFactor(stats,lastModel){const k2=stats.calibratedEstimate;if(k2===void 0||!Number.isFinite(k2)||k2<=0)return void 0;if(stats.calibratedEstimateModel!==void 0&&typeof lastModel==="string"&&lastModel!==""&&stats.calibratedEstimateModel!==lastModel)return void 0;return k2}function usageTotals(protocol,usage){const num7=v2=>typeof v2==="number"&&Number.isFinite(v2)?v2:void 0;if(protocol==="anthropic"){const fresh=num7(usage["input_tokens"]);const read=num7(usage["cache_read_input_tokens"]);const creation=num7(usage["cache_creation_input_tokens"]);const any=fresh!==void 0||read!==void 0||creation!==void 0;return{total:any?(fresh??0)+(read??0)+(creation??0):void 0,cached:read}}if(protocol==="openai"){const prompt=num7(usage["prompt_tokens"]);const cached=num7(usage["prompt_tokens_details"]?.["cached_tokens"])??num7(usage["prompt_cache_hit_tokens"]);return{total:prompt!==void 0?promptInputTotal("openai",prompt,cached):void 0,cached}}if(protocol==="google"){const prompt=num7(usage["promptTokenCount"]);const cached=num7(usage["cachedContentTokenCount"]);return{total:prompt!==void 0?promptInputTotal("google",prompt,cached):void 0,cached}}return{total:num7(usage["input_tokens"]),cached:num7(usage["input_tokens_details"]?.["cached_tokens"])}}function promptInputTotal(protocol,input,cached,creation){if(input===void 0)return 0;const includesCached=protocol==="openai"||protocol==="responses"||protocol==="google";const splitSemantics=!includesCached||typeof cached==="number"&&input<cached;const additive=(splitSemantics&&typeof cached==="number"?cached:0)+(splitSemantics&&typeof creation==="number"?creation:0);return input+additive}function usageOutputTotal(protocol,usage){const num7=v2=>typeof v2==="number"&&Number.isFinite(v2)?v2:void 0;if(protocol==="google"){const candidates=num7(usage["candidatesTokenCount"]);const thoughts=num7(usage["thoughtsTokenCount"]);if(candidates===void 0&&thoughts===void 0)return void 0;return(candidates??0)+(thoughts??0)}return num7(usage["completion_tokens"])??num7(usage["output_tokens"])}function toTokenNumber(s3){const n=parseInt(s3.replace(/,/g,""),10);return Number.isFinite(n)&&n>=1e3?n:void 0}function parseOverflowWindow(text2){let m2=text2.match(/>\s*(\d[\d,]*)\s*maximum/i);if(m2)return toTokenNumber(m2[1]);m2=text2.match(/\(\s*\d[\d,]*\s*\/\s*\d[\d,]*\s*>\s*(\d[\d,]+)\s*\)/);if(m2)return toTokenNumber(m2[1]);m2=text2.match(/maximum number of tokens allowed\s*\((\d[\d,]*)\)/i);if(m2)return toTokenNumber(m2[1]);m2=text2.match(/maximum context length is (\d[\d,]*)/i)??text2.match(/maximum context length of (\d[\d,]*)/i)??text2.match(/maximum context size (?:is|of) (\d[\d,]*)/i)??text2.match(/(?:maximum|max)\s+(?:context\s+)?length\s+(?:is\s+)?(\d[\d,]*)/i)??text2.match(/context length\s*\((\d[\d,]*)\s*token/i)??text2.match(/limit of (\d[\d,]*)\s*token/i)??text2.match(/(\d[\d,]*)\s*maximum\b/i);if(m2)return toTokenNumber(m2[1]);m2=text2.match(/(\d[\d,]*)\s*(?:个\s*)?tokens?\s*(?:的)?(?:上限|最大|限制)/i)??text2.match(/(?:上限|最大(?:值|限制)?|限制)[^。;;!!\n]{0,20}?(\d[\d,]*)\s*(?:个\s*)?tokens?/i);if(m2)return toTokenNumber(m2[1]);return void 0}function parseOverflowCounts(text2){let m2=text2.match(/requested\s+(\d[\d,]*)\s*tokens?\s*\(\s*(\d[\d,]*)\s*in the messages,\s*(\d[\d,]*)\s*in the completion\s*\)/i);if(m2)return{total:toTokenNumber(m2[1]),messages:toTokenNumber(m2[2]),completion:toTokenNumber(m2[3])};m2=text2.match(/prompt is too long:\s*(\d[\d,]*)\s*tokens?\s*>/i);if(m2)return{total:toTokenNumber(m2[1]),messages:toTokenNumber(m2[1])};m2=text2.match(/input token count\s*\((\d[\d,]*)\)\s*exceeds/i);if(m2)return{total:toTokenNumber(m2[1]),messages:toTokenNumber(m2[1])};for(const mm of text2.matchAll(/(?:请求|输入)([^。;;!!\n]{0,12}?)(\d[\d,]*)\s*(?:个\s*)?tokens?\s*[,,]?\s*(?:超过|超出|超限)/gi)){const n=toTokenNumber(mm[2]);if(n!==void 0&&!/(?:支持|最大|上限|限制|允许)/.test(mm[1]))return{total:n,messages:n}}return{}}function inspectContextOverflow(status,bodyText){const message=(bodyText??"").slice(0,300);const plausible=status===400||status===413||status>=500;if(!plausible)return{isOverflow:false,message};if(!bodyText)return{isOverflow:false,message};const isOverflow=CONTEXT_OVERFLOW_PATTERNS.some(p2=>p2.test(bodyText));if(!isOverflow)return{isOverflow:false,message};const counts=parseOverflowCounts(bodyText);return{isOverflow:true,window:parseOverflowWindow(bodyText),...counts.total!==void 0?{requestedTotal:counts.total}:{},...counts.messages!==void 0?{requestedMessages:counts.messages}:{},...counts.completion!==void 0?{requestedCompletion:counts.completion}:{},message}}function resolveOutputHeadroomCap(value){if(value===void 0)return DEFAULT_OUTPUT_HEADROOM_MAX_PCT;if(typeof value==="number")return value;const s3=value.trim();return s3.endsWith("%")?Number(s3.slice(0,-1))/100:Number(s3)}function reserveOutputHeadroom(window2,maxOutput,capPct=1){if(Number.isFinite(window2)&&window2>0&&Number.isFinite(maxOutput)&&maxOutput>0&&maxOutput<window2){const cap=Number.isFinite(capPct)?Math.max(0,Math.min(capPct,1)):1;const reserved=Math.min(maxOutput,cap*window2);return reserved>0?window2-reserved:window2}return window2}function systemToUser(messages,should){let hasSys=false;for(const m2 of messages){if(m2.role==="system"||m2.role==="developer"){hasSys=true;break}}if(!hasSys)return messages;return messages.map((m2,i)=>(m2.role==="system"||m2.role==="developer")&&(!should||should(m2,i))?{...m2,role:"user"}:m2)}function hardenOpenaiAssistantContent(messages){return messages.map(m2=>{if(m2.role!=="assistant")return m2;const c=m2.content;if(c===null||c===void 0)return{...m2,content:""};return m2})}function appendSystemText(added,original){if(Array.isArray(original)&&original.length>0){return added?[...original,{type:"text",text:added}]:[...original]}const base=typeof original==="string"?original:"";if(!added)return base;return base?`${base}
|
|
529
|
+
`;ABSENT_IDENTITY="absent:";V8_BACKFILL_PAGE=500}});import path5 from"path";function tNum(envName,fileValue){const envRaw=process.env[envName];if(envRaw!==void 0)return Number(envRaw);return typeof fileValue==="number"&&Number.isFinite(fileValue)?fileValue:NaN}function tNumLoose(envName,fileValue){const envRaw=process.env[envName];if(envRaw!==void 0&&envRaw!=="")return Number(envRaw);return typeof fileValue==="number"&&Number.isFinite(fileValue)?fileValue:NaN}function tInt(envName,fileValue){const envRaw=process.env[envName];if(envRaw!==void 0)return Number.parseInt(envRaw,10);return typeof fileValue==="number"&&Number.isFinite(fileValue)?fileValue:NaN}function tIntLoose(envName,fileValue){const envRaw=process.env[envName];if(envRaw!==void 0&&envRaw!=="")return Number.parseInt(envRaw,10);return typeof fileValue==="number"&&Number.isFinite(fileValue)?fileValue:NaN}function staggerKnobMs(envName,fileValue){const envRaw=process.env[envName];if(envRaw!==void 0&&envRaw!=="")return Number(envRaw);if(typeof fileValue==="number"&&Number.isFinite(fileValue))return fileValue;if(typeof fileValue==="string"){const ms2=parseDurationField(fileValue);if(ms2!==void 0)return ms2}return NaN}function fileNetwork(){return loadConfigFile().network??{}}function upstreamTimeoutMs(){const v2=tNum("BILI_UPSTREAM_TIMEOUT_MS",fileNetwork().upstreamTimeoutMs);return Number.isInteger(v2)&&v2>0?v2:UPSTREAM_TIMEOUT_MS}function upstreamCaFile(){const envRaw=process.env["BILI_CA_FILE"];if(envRaw!==void 0&&envRaw!=="")return envRaw;const fileValue=fileNetwork().caFile;return typeof fileValue==="string"&&fileValue!==""?fileValue:void 0}function replayMaxAttempts(){const v2=tNum("BILI_REPLAY_RETRY_MAX",fileNetwork().replayRetryMax);return Number.isInteger(v2)&&v2>=1?v2:REPLAY_MAX_ATTEMPTS}function replayBaseDelayMs(){const v2=tNum("BILI_REPLAY_RETRY_BASE_MS",fileNetwork().replayRetryBaseMs);return Number.isFinite(v2)&&v2>=0?v2:REPLAY_BASE_DELAY_MS}function maxShrinkPerCompress(){const v2=tNum("BILI_MAX_SHRINK_PER_COMPRESS",fileNetwork().maxShrinkPerCompress);return Number.isFinite(v2)&&v2>0&&v2<=1?v2:void 0}function requestWatchdogBudgetMs(){const v2=tNumLoose("BILI_REQUEST_WATCHDOG_MS",fileNetwork().requestWatchdogMs);return Number.isFinite(v2)?Math.floor(v2):2*upstreamTimeoutMs()}function keepAliveTimeoutMs(){const v2=tNum("BILI_KEEP_ALIVE_TIMEOUT_MS",fileNetwork().keepAliveTimeoutMs);return Number.isInteger(v2)&&v2>0?v2:5e3}function clientErrorBackstopMs(){const v2=tNum("BILI_CLIENT_ERROR_BACKSTOP_MS",fileNetwork().clientErrorBackstopMs);return Number.isInteger(v2)&&v2>=0?v2:3e4}function exposureLogIntervalMs(){const v2=tNum("BILI_EXPOSURE_LOG_INTERVAL_MS",fileNetwork().exposureLogIntervalMs);return Number.isInteger(v2)?Math.max(0,v2):36e5}function streamKeepAliveMs(){const v2=tNumLoose("BILI_STREAM_KEEPALIVE_MS",fileNetwork().streamKeepAliveMs);return Number.isFinite(v2)&&v2>=0?Math.floor(v2):STREAM_KEEPALIVE_DEFAULT_MS}function preflightHoldGraceMs(){const v2=tNumLoose("BILI_PREFLIGHT_HOLD_MS",fileNetwork().preflightHoldMs);return Number.isFinite(v2)&&v2>=0?Math.floor(v2):PREFLIGHT_HOLD_GRACE_DEFAULT_MS}function proxyKeepAliveMaxMs(){const v2=tNum("BILI_PROXY_KEEPALIVE_MAX_MS",fileNetwork().proxyKeepAliveMaxMs);return Number.isFinite(v2)&&v2<0?PROXY_KEEPALIVE_MAX_MS:v2===0?0:Number.isFinite(v2)&&v2>0?Math.floor(v2):PROXY_KEEPALIVE_MAX_MS}function postResponseLingerMs(){const v2=tInt("BILI_POST_RESPONSE_LINGER_MS",fileNetwork().postResponseLingerMs);return Number.isFinite(v2)&&v2>0?v2:POST_RESPONSE_LINGER_MS_DEFAULT}function allowPrivateHttpProviders(){const envRaw=process.env.BILI_ALLOW_PRIVATE_HTTP_PROVIDERS;if(envRaw!==void 0)return envRaw==="1"||envRaw==="true";return fileNetwork().allowPrivateHttpProviders===true}function mitmHandshakeTimeoutMs(){const v2=tInt("BILI_MITM_HANDSHAKE_TIMEOUT_MS",loadConfigFile().mitm?.handshakeTimeoutMs);return Number.isFinite(v2)&&v2>0?Math.floor(v2):MITM_HANDSHAKE_TIMEOUT_MS_DEFAULT}function limitsReceiveBytes(){const v2=tInt("BILI_RECEIVE_BODY_BYTES",loadConfigFile().network?.receiveBodyBytes);return Number.isFinite(v2)&&v2>0?Math.floor(v2):DEFAULT_LIMITS_RECEIVE_BYTES}function limitsDecodedBytes(){const v2=tInt("BILI_DECODED_BODY_BYTES",loadConfigFile().network?.decodedBodyBytes);return Number.isFinite(v2)&&v2>0?Math.floor(v2):DEFAULT_LIMITS_DECODED_BYTES}function limitsOutboundBytes(){const v2=tInt("BILI_OUTBOUND_BODY_BYTES",loadConfigFile().network?.outboundBodyBytes);return Number.isFinite(v2)&&v2>0?Math.floor(v2):DEFAULT_LIMITS_OUTBOUND_BYTES}function limitsWsOutboundBytes(){const v2=tInt("BILI_WS_OUTBOUND_BYTES",loadConfigFile().network?.wsOutboundBytes);return Number.isFinite(v2)&&v2>=0?Math.floor(v2):DEFAULT_WS_OUTBOUND_BYTES}function filePersist(){return loadConfigFile().persist??{}}function persistEnabled(){const envRaw=process.env.BILI_PERSIST;if(envRaw!==void 0)return!(envRaw==="0"||envRaw==="false");return filePersist().enabled!==false}function autoModeForgeEnabled(){const envRaw=process.env.BILI_AUTO_MODE_FORGE;if(envRaw!==void 0)return!(envRaw==="0"||envRaw==="false");return loadConfigFile().autoModeForge?.enabled!==false}function guardrailTextRunThreshold(){const n=tNumLoose("BILI_GUARDRAIL_TEXT_RUN_THRESHOLD",loadConfigFile().guardrails?.textRunThreshold);if(!Number.isFinite(n))return DEFAULT_TEXT_RUN_THRESHOLD;return n>0?Math.floor(n):0}function persistZstdEnabled(){const envRaw=process.env.BILI_PERSIST_ZSTD;if(envRaw!==void 0)return envRaw==="1"||envRaw==="true";return filePersist().zstd===true}function persistDebounceMs(){const v2=tInt("BILI_PERSIST_DEBOUNCE_MS",filePersist().debounceMs);return Number.isFinite(v2)&&v2>=0?v2:500}function persistTailTokens(){const v2=tInt("BILI_PERSIST_TAIL_TOKENS",filePersist().tailTokens);return Number.isFinite(v2)&&v2>=0?v2:16384}function persistEpermAlertThreshold(){const v2=tInt("BILI_PERSIST_EPERM_ALERT_THRESHOLD",filePersist().epermAlertThreshold);return Number.isFinite(v2)&&v2>0?v2:5}function persistEpermAlertRepeatMs(){const v2=tInt("BILI_PERSIST_EPERM_ALERT_REPEAT_MS",filePersist().epermAlertRepeatMs);return Number.isFinite(v2)&&v2>=0?v2:0}function maxSessions(){const envRaw=process.env.BILI_MAX_SESSIONS;const v2=envRaw!==void 0?Number.parseInt(envRaw,10):(()=>{const f2=loadConfigFile().sessions?.max;return typeof f2==="number"&&Number.isFinite(f2)?f2:NaN})();return Math.max(1,v2||256)}function sessionWarmMax(){const v2=tInt("BILI_SESSION_WARM_MAX",loadConfigFile().sessions?.warmMax);return Number.isFinite(v2)&&v2>=0?Math.floor(v2):0}function sessionWarmMaxBytes(){const v2=tInt("BILI_SESSION_WARM_MAX_BYTES",loadConfigFile().sessions?.warmMaxBytes);return Number.isFinite(v2)&&v2>=0?Math.floor(v2):64*1024*1024}function sessionResidentMaxBytes(){const v2=tInt("BILI_SESSION_RESIDENT_MAX_BYTES",loadConfigFile().sessions?.residentMaxBytes);return Number.isFinite(v2)&&v2>=0?Math.floor(v2):512*1024*1024}function gcSettings(){const gc=loadConfigFile().sessions?.gc??{};const envRaw=process.env.BILI_SESSION_GC;const enabled=envRaw!==void 0?["1","true","on"].includes(envRaw.toLowerCase()):gc.enabled===true;const ageDays=tIntLoose("BILI_SESSION_GC_MAX_AGE_DAYS",gc.maxAgeDays);const maxTokens=tIntLoose("BILI_SESSION_GC_MAX_TOKENS",gc.maxTokens);const intervalMs=tIntLoose("BILI_SESSION_GC_INTERVAL_MS",gc.intervalMs);return{enabled,maxAgeMs:(Number.isFinite(ageDays)&&ageDays>0?Math.floor(ageDays):7)*GC_DAY_MS,maxTokens:Number.isFinite(maxTokens)&&maxTokens>0?Math.floor(maxTokens):1e6,intervalMs:Number.isFinite(intervalMs)&&intervalMs>0?Math.floor(intervalMs):36e5}}function updateRegistryBase(){const envRaw=process.env.BILI_UPDATE_REGISTRY;if(envRaw!==void 0&&envRaw.trim().length>0)return envRaw.trim();const f2=loadConfigFile().update?.registry;return typeof f2==="string"&&f2.trim().length>0?f2.trim():void 0}function updateCheckIntervalMs(){const v2=tNumLoose("BILI_UPDATE_CHECK_INTERVAL_MS",loadConfigFile().update?.checkIntervalMs);return Number.isFinite(v2)&&v2>0?Math.floor(v2):3*60*1e3}function updatePolicyUrl(){const envRaw=process.env.BILI_UPDATE_POLICY_URL;if(envRaw!==void 0&&envRaw.trim().length>0)return envRaw.trim();const f2=loadConfigFile().update?.policyUrl;return typeof f2==="string"&&f2.trim().length>0?f2.trim():void 0}function updateStaggerMinDelayMs(){const v2=staggerKnobMs("BILI_UPDATE_STAGGER_MIN_MS",loadConfigFile().update?.staggerMinDelayMs);return Number.isInteger(v2)&&v2>=0?Math.floor(v2):void 0}function updateStaggerMaxDelayMs(){const v2=staggerKnobMs("BILI_UPDATE_STAGGER_MAX_MS",loadConfigFile().update?.staggerMaxDelayMs);return Number.isInteger(v2)&&v2>=0?Math.floor(v2):void 0}function publicSnapshotCapBytes(){const raw=process.env.BILI_PUBLIC_SNAPSHOT_CAP_BYTES;const v2=raw!==void 0?Number(raw):(()=>{const f2=loadConfigFile().plugin?.snapshotCapBytes;return typeof f2==="number"&&Number.isFinite(f2)?f2:NaN})();return Number.isFinite(v2)&&v2>=0?v2:104857600}function ccrRetrievalTtlMs(){const envRaw=process.env.BILI_CCR_RETRIEVAL_TTL_MS;const v2=envRaw===void 0||envRaw===""?(()=>{const f2=loadConfigFile().ccrRetrievalTtlMs;return typeof f2==="number"?f2:NaN})():Number(envRaw);return Number.isFinite(v2)&&v2>=0?v2:10*60*1e3}function codexCompactMode(){const envRaw=process.env.BILI_CODEX_COMPACT;if(envRaw!==void 0)return envRaw.trim().toLowerCase()==="pass"?"pass":"intercept";return loadConfigFile().codexCompact==="pass"?"pass":"intercept"}function dshAuthoredCompactionEnabled(){const envRaw=process.env.BILI_DSH_AUTHORED_COMPACTION;if(envRaw!==void 0)return envRaw.trim()!=="0";const file=loadConfigFile().dsh?.authoredCompaction;if(typeof file==="boolean")return file;return true}function decompressTmpCap(){const v2=tIntLoose("BILI_DECOMPRESS_TMP_CAP",loadConfigFile().decompressTmpCap);return Number.isFinite(v2)&&v2>0?v2:50}function imageRescaleEnabled(){const envRaw=process.env.BILI_IMAGE_RESCALE;if(envRaw!==void 0)return!(envRaw==="0"||envRaw==="false");return loadConfigFile().imageRescale!==false}function imageRescaleMaxDim(){const v2=tIntLoose("BILI_IMAGE_RESCALE_MAX_DIM",void 0);return Number.isInteger(v2)&&v2>=128?v2:IMAGE_RESCALE_DEFAULT_MAX_DIM}function fileDiag(){return loadConfigFile().diagnostics??{}}function bodyDumpEnabled(){const envRaw=process.env.ACP_DUMP_BODY;if(envRaw!==void 0)return envRaw==="1";return fileDiag().dumpBody===true}function dumpReqAllowed(){const envRaw=process.env.ACP_DUMP_REQ;if(envRaw!==void 0)return envRaw!=="0";return fileDiag().dumpReq!==false}function rawDumpDir(){const envRaw=process.env.ACP_RAW_DUMP_DIR;if(envRaw)return envRaw;const f2=fileDiag().rawDumpDir;if(typeof f2==="string"&&f2.trim().length>0)return f2;return path5.join(stateDir(),"raw")}function dump4xxEnabled(){const envRaw=process.env.BILI_DUMP_4XX;if(envRaw!==void 0)return envRaw==="1";return fileDiag().dump4xx===true}function dump4xxMaxBytes(){const envRaw=process.env.BILI_DUMP_4XX_MAX_BYTES;if(envRaw!==void 0)return Math.max(1024,Number(envRaw)||2*1024*1024);const f2=fileDiag().dump4xxMaxBytes;const n=typeof f2==="number"&&Number.isFinite(f2)&&f2>0?f2:NaN;return Math.max(1024,n||2*1024*1024)}function dumpGcMaxTotalBytes(){const envRaw=process.env.BILI_DUMP_MAX_TOTAL_BYTES;if(envRaw!==void 0){const v2=Number(envRaw);return Number.isFinite(v2)&&v2>0?Math.max(1<<20,v2):null}const f2=fileDiag().maxTotalBytes;if(typeof f2==="number"&&Number.isFinite(f2)&&f2>0)return Math.max(1<<20,f2);return null}function dumpGcMaxAgeMs(){const envRaw=process.env.BILI_DUMP_MAX_AGE_DAYS;if(envRaw!==void 0){const d=Number(envRaw);return Number.isFinite(d)&&d>0?Math.max(1/24,d)*864e5:null}const f2=fileDiag().maxAgeDays;if(typeof f2==="number"&&Number.isFinite(f2)&&f2>0)return Math.max(1/24,f2)*864e5;return null}function renderNone(){const envRaw=process.env.ACP_RENDER_NONE;if(envRaw!==void 0)return envRaw.length>0;return fileDiag().renderNone===true}function invariantJudgeEnabled(){const envRaw=process.env.BILI_INVARIANT_JUDGE;if(envRaw!==void 0)return!(envRaw==="0"||envRaw==="false"||envRaw==="off");const f2=fileDiag().invariantJudge;return typeof f2==="boolean"?f2:true}function noInjectTool(){const envRaw=process.env.ACP_NO_INJECT_TOOL;if(envRaw!==void 0)return envRaw.length>0;return fileDiag().noInjectTool===true}function noCompressPrompt(){const envRaw=process.env.ACP_NO_COMPRESS_PROMPT;if(envRaw!==void 0)return envRaw.length>0;return fileDiag().noCompressPrompt===true}function countTokensPassthrough(){const envRaw=process.env.ACP_COUNT_TOKENS_PASSTHROUGH;if(envRaw!==void 0)return envRaw==="1";return fileDiag().countTokensPassthrough===true}function forceTextProtocol(){const envRaw=process.env.ACP_COMPRESS_PROTOCOL;if(envRaw!==void 0)return envRaw==="text";return fileDiag().compressProtocol==="text"}function keepResponseId(){const envRaw=process.env.ACP_KEEP_RESPONSE_ID;if(envRaw!==void 0)return envRaw==="1";return loadConfigFile().compat?.keepResponseId===true}function noCacheControl(){const envRaw=process.env.BILI_NO_CACHE_CONTROL;if(envRaw!==void 0)return envRaw.length>0;return loadConfigFile().compat?.noCacheControl===true}function fakeCompletionRetries(){const v2=tInt("BILI_FAKE_COMPLETION_RETRIES",loadConfigFile().fakeCompletion?.retries);return Number.isFinite(v2)&&v2>=0?v2:0}function fakeBufCapBytes(){const v2=tInt("BILI_FAKE_BUF_CAP",loadConfigFile().fakeCompletion?.bufCapBytes);return Number.isFinite(v2)&&v2>0?v2:16*1024*1024}function fileStorageUnified(){const v2=loadConfigFile().storage?.unified;return typeof v2==="string"?v2:void 0}function fileStorageJsonWriter(){const v2=loadConfigFile().storage?.jsonWriter;return typeof v2==="string"?v2:void 0}function fileStorageAutoDownload(){const v2=loadConfigFile().storage?.sqliteAutoDownload;return typeof v2==="boolean"?v2:void 0}function fileStorageArchiveAfterDays(){const v2=loadConfigFile().storage?.archiveAfterDays;return typeof v2==="number"&&Number.isFinite(v2)&&v2>=0?v2:void 0}function fileStorageBackend(){const v2=loadConfigFile().storage?.backend;return typeof v2==="string"?v2:void 0}function fileStorageMysqlDsn(){const v2=loadConfigFile().storage?.mysql?.dsn;return typeof v2==="string"&&v2.trim().length>0?v2:void 0}function fileStorageWalJournalSizeLimit(){const v2=loadConfigFile().storage?.walJournalSizeLimitBytes;return typeof v2==="number"&&Number.isInteger(v2)&&v2>0?v2:void 0}function resolveArchiveAfterDays(env=process.env,fileDays){const raw=env.BILI_STORAGE_ARCHIVE_AFTER_DAYS?.trim();if(raw!==void 0&&raw!==""){const n=Number.parseInt(raw,10);if(Number.isFinite(n)&&n>=0)return n}if(typeof fileDays==="number"&&Number.isFinite(fileDays)&&fileDays>=0)return fileDays;return 365}function resolveStorageMode(env=process.env,fileUnified){const raw=env.BILI_STORAGE_UNIFIED?.trim().toLowerCase();if(raw){if(raw==="full"||raw==="unified")return"full";if(raw==="1"||raw==="true"||raw==="shadow")return"shadow";return"legacy"}const file=fileUnified?.trim().toLowerCase();if(file==="full")return"full";if(file==="shadow")return"shadow";if(file)return"legacy";return"full"}function resolveJsonWriterOff(env=process.env,fileValue){const raw=env.BILI_STORAGE_JSON_WRITER?.trim().toLowerCase();if(raw==="0"||raw==="false"||raw==="off")return true;if(raw==="1"||raw==="true"||raw==="on")return false;return fileValue?.trim().toLowerCase()==="off"}function resolveSnapshotShadow(env=process.env,fileShadow){const raw=env.BILI_SNAPSHOT_SHADOW?.trim().toLowerCase();if(raw==="1"||raw==="true"||raw==="on")return true;if(raw==="0"||raw==="false"||raw==="off")return false;return typeof fileShadow==="boolean"?fileShadow:true}function resolveSqliteAutoDownload(env=process.env,fileValue){const raw=env.BILI_SQLITE_AUTO_DOWNLOAD?.trim().toLowerCase();if(raw==="1"||raw==="true")return true;if(raw==="0"||raw==="false")return false;return typeof fileValue==="boolean"?fileValue:true}function resolveStorageWalJournalSizeLimit(env=process.env,fileValue){const raw=env.BILI_STORAGE_WAL_JOURNAL_SIZE_LIMIT_BYTES?.trim();if(raw){const n=Number(raw);if(Number.isInteger(n)&&n>0)return n}if(typeof fileValue==="number"&&Number.isInteger(fileValue)&&fileValue>0)return fileValue;return WAL_JOURNAL_SIZE_LIMIT}var STREAM_KEEPALIVE_DEFAULT_MS,PREFLIGHT_HOLD_GRACE_DEFAULT_MS,POST_RESPONSE_LINGER_MS_DEFAULT,MITM_HANDSHAKE_TIMEOUT_MS_DEFAULT,DEFAULT_LIMITS_RECEIVE_BYTES,DEFAULT_LIMITS_DECODED_BYTES,DEFAULT_LIMITS_OUTBOUND_BYTES,DEFAULT_WS_OUTBOUND_BYTES,DEFAULT_TEXT_RUN_THRESHOLD,GC_DAY_MS,IMAGE_RESCALE_DEFAULT_MAX_DIM;var init_knobs=__esm({"src/knobs.ts"(){"use strict";init_paths();init_config();init_duration();init_fetch_util();init_upstream_proxy();init_schema();STREAM_KEEPALIVE_DEFAULT_MS=15e3;PREFLIGHT_HOLD_GRACE_DEFAULT_MS=3e4;POST_RESPONSE_LINGER_MS_DEFAULT=5e3;MITM_HANDSHAKE_TIMEOUT_MS_DEFAULT=1e4;DEFAULT_LIMITS_RECEIVE_BYTES=5*1024*1024*1024;DEFAULT_LIMITS_DECODED_BYTES=10*1024*1024*1024;DEFAULT_LIMITS_OUTBOUND_BYTES=5*1024*1024*1024;DEFAULT_WS_OUTBOUND_BYTES=10*1024*1024;DEFAULT_TEXT_RUN_THRESHOLD=200;GC_DAY_MS=864e5;IMAGE_RESCALE_DEFAULT_MAX_DIM=1600}});import{readFileSync as readFileSync3,statSync as statSync2}from"fs";import*as tls from"tls";function readPem(path54){try{return[readFileSync3(path54,"utf8")]}catch(err2){log("warn",`[upstream-ca] CA file ${path54} unreadable (${err2.message}); ignoring \u2014 upstream TLS falls back to whatever else is trusted`);return[]}}function upstreamCaIdentity(now=Date.now()){const caFile=upstreamCaFile();if(!caFile){lastIdentity="none";return"none"}if(now-lastStatAt<IDENTITY_TTL_MS&&lastIdentity!=="none")return lastIdentity;let mtimeMs=0;try{mtimeMs=statSync2(caFile).mtimeMs}catch{}lastIdentity=`${caFile}\0${mtimeMs}`;lastStatAt=now;return lastIdentity}function upstreamExtraCa(){const identity=upstreamCaIdentity();if(identity==="none")return void 0;if(cacheKey===identity)return cacheValue;const merged=[...tls.rootCertificates];const nodeExtra=process.env["NODE_EXTRA_CA_CERTS"];if(nodeExtra)merged.push(...readPem(nodeExtra));const caFile=upstreamCaFile();if(caFile)merged.push(...readPem(caFile));cacheKey=identity;cacheValue=merged;log("info",`[upstream-ca] upstream TLS trust extended with ${caFile} (${merged.length} certs total)`);return merged}var IDENTITY_TTL_MS,lastStatAt,lastIdentity,cacheKey,cacheValue;var init_upstream_ca=__esm({"src/upstream-ca.ts"(){"use strict";init_logger();init_knobs();IDENTITY_TTL_MS=3e4;lastStatAt=0;lastIdentity="none";cacheKey=null}});function checkOutboundBody(body){const bytes=typeof body==="string"?Buffer.byteLength(body):Buffer.isBuffer(body)?body.byteLength:0;if(bytes>limitsOutboundBytes())throw new OutboundBodyTooLargeError(bytes)}var MAX_REQUEST_BYTES,MAX_DECODED_REQUEST_BYTES,MAX_LARGE_DECODED_REQUESTS,largeDecodedRequests,DecodedRequestBusyError,DecodedRequestAdmission,OutboundBodyTooLargeError;var init_request_body_budget=__esm({"src/request-body-budget.ts"(){"use strict";init_knobs();MAX_REQUEST_BYTES=100*1024*1024;MAX_DECODED_REQUEST_BYTES=2*MAX_REQUEST_BYTES;MAX_LARGE_DECODED_REQUESTS=2;largeDecodedRequests=0;DecodedRequestBusyError=class extends Error{constructor(){super("large decoded request budget is busy; retry after an active request finishes");this.name="DecodedRequestBusyError"}};DecodedRequestAdmission=class{admitted=false;observe(bytes){if(bytes<=limitsReceiveBytes()||this.admitted)return;if(largeDecodedRequests>=MAX_LARGE_DECODED_REQUESTS)throw new DecodedRequestBusyError;largeDecodedRequests++;this.admitted=true}release(){if(!this.admitted)return;largeDecodedRequests--;this.admitted=false}};OutboundBodyTooLargeError=class extends Error{constructor(bytes){super(`rebuilt request exceeds ${limitsOutboundBytes()} bytes (${bytes} bytes); reduce historical images or content before retrying`);this.bytes=bytes;this.name="OutboundBodyTooLargeError"}bytes}}});function upstreamTimeoutMs2(){return upstreamTimeoutMs()}function directDispatcher(timeoutMs){const key2=`${timeoutMs}\0${upstreamCaIdentity()}`;let agent=directDispatchers.get(key2);if(!agent){const ca=upstreamExtraCa();agent=new import_undici.Agent({headersTimeout:timeoutMs,bodyTimeout:timeoutMs,...ca?{connect:{ca}}:{}});directDispatchers.set(key2,agent)}return agent}function restrictAcceptEncoding(headers){if(!headers)return headers;const entries2=[];if(typeof Headers!=="undefined"&&headers instanceof Headers){headers.forEach((v2,k2)=>entries2.push([k2,v2]))}else if(Array.isArray(headers)){for(const pair of headers)entries2.push([pair[0],String(pair[1])])}else{for(const[k2,v2]of Object.entries(headers))entries2.push([k2,String(v2)])}const out={};for(const[k2,v2]of entries2){if(k2.toLowerCase()!=="accept-encoding"){out[k2]=v2;continue}const kept=v2.split(",").map(part=>part.trim()).filter(part=>part!=="").filter(part=>DECODABLE_ENCODINGS.has(part.split(";")[0].trim().toLowerCase()));if(kept.length>0)out["accept-encoding"]=kept.join(", ")}return out}async function fetchWithTimeout(url,opts,timeoutMs,externalSignal,forceDirect){checkOutboundBody(opts.body);const effective=timeoutMs??upstreamTimeoutMs2();const controller=new AbortController;let cleared=false;const armTimer=()=>{const t=setTimeout(()=>{liveUpstreamTimers.delete(t);controller.abort()},idleTimerDelayOverrideMs??effective);liveUpstreamTimers.add(t);return t};let timer6=armTimer();const rearm=()=>{if(cleared)return;clearTimeout(timer6);liveUpstreamTimers.delete(timer6);idleRearmCount+=1;timer6=armTimer()};let onExternalAbort=null;if(externalSignal){if(externalSignal.aborted)controller.abort();else{onExternalAbort=()=>controller.abort();externalSignal.addEventListener("abort",onExternalAbort,{once:true})}}const stopIdleTimer=()=>{cleared=true;clearTimeout(timer6);liveUpstreamTimers.delete(timer6)};const cleanup=()=>{stopIdleTimer();if(onExternalAbort&&externalSignal)externalSignal.removeEventListener("abort",onExternalAbort)};try{const finalOpts={...opts,signal:controller.signal,dispatcher:opts.dispatcher??directDispatcher(idleTimerDelayOverrideMs??effective),redirect:opts.redirect??"manual",headers:restrictAcceptEncoding(opts.headers)};const transport=forceDirect?void 0:currentFetchTransport();const raw=transport?await transport(url,finalOpts):await fetch(url,finalOpts);if(raw.body){const wrapped=armIdleBody(raw.body,rearm);return{response:new Response(wrapped,{status:raw.status,statusText:raw.statusText,headers:raw.headers}),clearTimer:cleanup,stopIdleTimer}}return{response:raw,clearTimer:cleanup,stopIdleTimer}}catch(e){cleanup();throw e}}function armIdleBody(body,rearm){const reader=body.getReader();return new ReadableStream({async pull(controller){try{const result=await reader.read();if(result.done){controller.close();return}rearm();controller.enqueue(result.value)}catch(e){controller.error(e)}},async cancel(reason){try{await reader.cancel(reason)}catch{}}})}function isTransientUpstreamError(status,body){if(status===429||status>=500)return true;if(status<400)return false;const lower=body.toLowerCase();return TRANSIENT_BODY_MARKERS.some(marker=>lower.includes(marker))}function replayMaxAttempts2(){return replayMaxAttempts()}function replayBaseDelayMs2(){return replayBaseDelayMs()}function maxShrinkPerCompress2(){return maxShrinkPerCompress()}function replayBackoffMs(attempt){return replayBaseDelayMs2()*2**(attempt-1)}function sleep(ms2,signal){if(ms2<=0||signal?.aborted)return Promise.resolve();return new Promise(resolve=>{let timer6=null;const finish2=()=>{if(timer6)clearTimeout(timer6);if(signal)signal.removeEventListener("abort",finish2);resolve()};timer6=setTimeout(finish2,ms2);if(signal)signal.addEventListener("abort",finish2,{once:true})})}async function fetchWithRetry(url,opts,timeoutMs,externalSignal,onRetry){const maxAttempts=replayMaxAttempts2();for(let attempt=1;;attempt++){let result;try{result=await fetchWithTimeout(url,opts,timeoutMs,externalSignal)}catch(error){const kind=classifyUpstreamFailure(error,{viaProxy:opts.dispatcher!==void 0,externalAborted:externalSignal?.aborted===true});if(!isFailFastUpstreamKind(kind))throw error;const lastAttempt2=attempt>=maxAttempts;if(lastAttempt2)throw error;const delayMs=replayBackoffMs(attempt);onRetry?.({attempt,status:0,detail:`${kind} (pre-response network failure): ${error instanceof Error?error.message:String(error)}`,delayMs,maxAttempts});await sleep(delayMs,externalSignal);continue}if(result.response.ok)return result;const errText2=await result.response.text().catch(()=>"upstream error");result.clearTimer();const lastAttempt=attempt>=maxAttempts;if(!lastAttempt&&isTransientUpstreamError(result.response.status,errText2)){const delayMs=replayBackoffMs(attempt);onRetry?.({attempt,status:result.response.status,detail:errText2,delayMs,maxAttempts});await sleep(delayMs,externalSignal);continue}throw new UpstreamHttpError(result.response.status,errText2,attempt)}}async function fetchWithTransportRetry(url,opts,timeoutMs,externalSignal,onRetry){const maxAttempts=replayMaxAttempts2();for(let attempt=1;;attempt++){try{return await fetchWithTimeout(url,opts,timeoutMs,externalSignal)}catch(error){const kind=classifyUpstreamFailure(error,{viaProxy:opts.dispatcher!==void 0,externalAborted:externalSignal?.aborted===true});if(!isFailFastUpstreamKind(kind))throw error;const lastAttempt=attempt>=maxAttempts;if(lastAttempt)throw error;const delayMs=replayBackoffMs(attempt);onRetry?.({attempt,status:0,detail:`${kind} (pre-response network failure): ${error instanceof Error?error.message:String(error)}`,delayMs,maxAttempts});await sleep(delayMs,externalSignal)}}}var import_undici,UPSTREAM_TIMEOUT_MS,liveUpstreamTimers,idleTimerDelayOverrideMs,idleRearmCount,directDispatchers,DECODABLE_ENCODINGS,UpstreamHttpError,TRANSIENT_BODY_MARKERS,REPLAY_MAX_ATTEMPTS,REPLAY_BASE_DELAY_MS;var init_fetch_util=__esm({"src/fetch-util.ts"(){"use strict";import_undici=__toESM(require_undici(),1);init_fetch_transport();init_upstream_fail();init_upstream_ca();init_knobs();init_request_body_budget();init_request_body_budget();UPSTREAM_TIMEOUT_MS=12*60*1e3;liveUpstreamTimers=new Set;idleTimerDelayOverrideMs=null;idleRearmCount=0;directDispatchers=new Map;DECODABLE_ENCODINGS=new Set(["gzip","x-gzip","deflate","br"]);UpstreamHttpError=class extends Error{status;body;attempts;constructor(status,body,attempts){super(`upstream error ${status}`);this.name="UpstreamHttpError";this.status=status;this.body=body;this.attempts=attempts}};TRANSIENT_BODY_MARKERS=["captcha","verify failed","risk control","\u98CE\u63A7","rate limit","too many requests","try again"];REPLAY_MAX_ATTEMPTS=3;REPLAY_BASE_DELAY_MS=1500}});import{execFileSync as execFileSync2}from"child_process";import net from"net";import tls2 from"tls";function defaultPort(protocol){return protocol==="https:"?443:80}function hostIsLoopback(host){const normalized=host.replace(/^\[|\]$/g,"").toLowerCase();return normalized==="localhost"||normalized==="0.0.0.0"||normalized==="::"||normalized==="::1"||normalized==="0:0:0:0:0:0:0:1"||normalized.startsWith("127.")||normalized.startsWith("::ffff:127.")||/^::ffff:7f[0-9a-f]{2}:/.test(normalized)}function proxyAuthorization(url){if(!url.username&&!url.password)return void 0;const username=decodeURIComponent(url.username);const password=decodeURIComponent(url.password);return`Basic ${Buffer.from(`${username}:${password}`).toString("base64")}`}function parseHttpProxy(proxy,biliPort){if(!proxy||typeof proxy!=="string"||!proxy.trim())return void 0;const candidate=/^[A-Za-z][A-Za-z0-9+.-]*:\/\//.test(proxy.trim())?proxy.trim():`http://${proxy.trim()}`;let url;try{url=new URL(candidate)}catch{return void 0}if(url.protocol!=="http:"&&url.protocol!=="https:")return void 0;if(url.pathname&&url.pathname!=="/"||url.search||url.hash)return void 0;const port=url.port?Number.parseInt(url.port,10):defaultPort(url.protocol);if(!Number.isInteger(port)||port<1||port>65535)return void 0;if(biliPort&&hostIsLoopback(url.hostname)&&port===biliPort){throw new Error(`upstream proxy would loop back into bili: ${redactProxyUrl(url.href)}`)}return{url:url.href,host:url.hostname,port,protocol:url.protocol,...proxyAuthorization(url)?{authorization:proxyAuthorization(url)}:{}}}function unsupportedProxyScheme(proxy){if(!proxy||typeof proxy!=="string"||!proxy.trim())return void 0;const candidate=/^[A-Za-z][A-Za-z0-9+.-]*:\/\//.test(proxy.trim())?proxy.trim():`http://${proxy.trim()}`;let url;try{url=new URL(candidate)}catch{return void 0}return url.protocol==="http:"||url.protocol==="https:"?void 0:url.protocol.replace(/:$/,"")}function warnUnsupportedScheme(source,value,scheme){const key2=`${source}\0${scheme}`;if(warnedUnsupportedSchemes.has(key2))return;warnedUnsupportedSchemes.add(key2);log("warn",`[upstream-proxy] ignoring ${source}=${redactProxyUrl(value)}: scheme "${scheme}" is not supported \u2014 only http:// and https:// proxy origins work. For Clash/mihomo, point bili at the same mixed port over http:// (e.g. http://127.0.0.1:7890).`)}function validateHttpProxy(proxy,biliPort){if(!proxy?.trim())return;const scheme=unsupportedProxyScheme(proxy);if(scheme){throw new Error(`upstream proxy uses unsupported scheme "${scheme}" (${redactProxyUrl(proxy)}) \u2014 only http:// and https:// proxies are supported; for Clash/mihomo use the same mixed port over http:// (e.g. http://127.0.0.1:7890)`)}if(!parseHttpProxy(proxy,biliPort)){throw new Error(`upstream proxy must be an HTTP/HTTPS proxy origin: ${redactProxyUrl(proxy)}`)}}function targetUrl(upstreamUrl){if(!upstreamUrl)return void 0;try{return new URL(upstreamUrl.replace(/^mitm:\/\//,"https://"))}catch{return void 0}}function parseFallbackProxy(proxy,biliPort){try{return parseHttpProxy(proxy,biliPort)}catch{return void 0}}function wildcardHostMatch(host,token){const pattern="^"+token.split("*").map(part=>part.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")).join(".*")+"$";return new RegExp(pattern).test(host)}function matchesNoProxy(target,noProxy,options={}){if(!noProxy)return false;const host=target.hostname.replace(/^\[|\]$/g,"").toLowerCase();const port=target.port?Number.parseInt(target.port,10):defaultPort(target.protocol);for(const raw of noProxy.split(/[;,]/)){let token=raw.trim().toLowerCase();if(!token)continue;if(token==="*")return true;if(token==="<local>"&&!host.includes("."))return true;let tokenPort;if(token.startsWith("[")){const bracket=token.indexOf("]");if(bracket>0&&token[bracket+1]===":"){tokenPort=Number.parseInt(token.slice(bracket+2),10);token=token.slice(1,bracket)}else token=token.replace(/^\[|\]$/g,"")}else{const colon=token.lastIndexOf(":");if(colon>0&&token.indexOf(":")===colon&&/^\d+$/.test(token.slice(colon+1))){tokenPort=Number.parseInt(token.slice(colon+1),10);token=token.slice(0,colon)}}if(tokenPort!==void 0&&tokenPort!==port)continue;if(options.windowsBypass&&!token.startsWith("*")&&token.includes("*")&&wildcardHostMatch(host,token))return true;const suffix=token.startsWith("*.")?token.slice(1):token.startsWith(".")?token:void 0;if(suffix?host.endsWith(suffix)||host===suffix.slice(1):host===token)return true}return false}function parseWindowsProxyServer(value){const trimmed=value.trim();if(!trimmed)return{};if(!trimmed.includes("=")){const normalized=parseHttpProxy(trimmed)?.url;return normalized?{http:normalized,https:normalized}:{}}const result={};for(const item of trimmed.split(";")){const[scheme,address]=item.split("=",2).map(part=>part?.trim());const normalizedScheme=scheme?.toLowerCase();if((normalizedScheme==="http"||normalizedScheme==="https")&&address){const normalized=parseHttpProxy(address)?.url;if(normalized)result[normalizedScheme]=normalized}}return result}function registryValue(output,name){const escaped=name.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");return output.match(new RegExp(`^\\s*${escaped}\\s+REG_\\w+\\s+(.+)$`,"mi"))?.[1]?.trim()}function readWindowsSystemProxy(){if(process.platform!=="win32")return{enabled:false};const now=Date.now();if(windowsProxyCache&&now-windowsProxyCache.at<5e3)return windowsProxyCache.value;let value={enabled:false};try{const output=execFileSync2("reg",["query","HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings"],{encoding:"utf8",windowsHide:true,timeout:3e3,stdio:["ignore","pipe","ignore"]});const enabledRaw=registryValue(output,"ProxyEnable");const enabled=enabledRaw==="0x1"||enabledRaw==="1";const staticProxy=enabled?parseWindowsProxyServer(registryValue(output,"ProxyServer")??""):{};value={enabled,...staticProxy,...registryValue(output,"ProxyOverride")?{bypass:registryValue(output,"ProxyOverride")}:{},...registryValue(output,"AutoConfigURL")?{autoConfigUrl:registryValue(output,"AutoConfigURL")}:{}}}catch{}windowsProxyCache={at:now,value};return value}function resolveProxyDecision(routes,globalProxy,upstreamUrl,fallback={}){const target=targetUrl(upstreamUrl);let bestKey="";if(upstreamUrl){for(const key2 of Object.keys(routes)){if(upstreamUrl===key2||upstreamUrl.startsWith(key2+"/")){if(key2.length>bestKey.length)bestKey=key2}}}if(bestKey){const routeProxy=routes[bestKey].proxy;if(routeProxy!==void 0){if(!routeProxy.trim())return{source:"provider-direct"};const parsed=parseHttpProxy(routeProxy,fallback.biliPort);if(!parsed)throw new Error(`invalid per-URL upstream proxy for ${bestKey}: ${redactProxyUrl(routeProxy)}`);return{proxy:parsed.url,source:"provider"}}}if(globalProxy===""&&fallback.explicitDirect){if(!fallback.defaultDirect)return{source:"direct"};const peek=autoDetectProxy(target,fallback);return peek.proxy?{source:"direct",skippedProxy:{proxy:peek.proxy,source:peek.source}}:{source:"direct"}}const explicit=parseHttpProxy(globalProxy,fallback.biliPort)?.url;if(explicit)return{proxy:explicit,source:fallback.globalSource??"global"};return autoDetectProxy(target,fallback)}function autoDetectProxy(target,fallback){if(target&&matchesNoProxy(target,fallback.noProxy))return{source:"no-proxy"};const environmentCandidates=target?.protocol==="http:"?[["HTTP_PROXY",fallback.httpProxy],["ALL_PROXY",fallback.allProxy]]:[["HTTPS_PROXY",fallback.httpsProxy],["HTTP_PROXY",fallback.httpProxy],["ALL_PROXY",fallback.allProxy]];for(const[source,value]of environmentCandidates){const parsed=parseFallbackProxy(value,fallback.biliPort);if(parsed)return{proxy:parsed.url,source};if(!value)continue;const scheme=unsupportedProxyScheme(value);if(scheme)warnUnsupportedScheme(source,value,scheme)}const system=fallback.systemProxy??readWindowsSystemProxy();if(target&&matchesNoProxy(target,system.bypass,{windowsBypass:true})){return{source:"windows-bypass",...system.autoConfigUrl?{autoConfigUrl:system.autoConfigUrl}:{}}}const systemValue=target?.protocol==="http:"?system.http:system.https??system.http;const systemScheme=unsupportedProxyScheme(systemValue);if(systemValue&&systemScheme)warnUnsupportedScheme("windows-system",systemValue,systemScheme);const systemProxy=parseFallbackProxy(systemValue,fallback.biliPort)?.url;if(systemProxy){return{proxy:systemProxy,source:"windows-system",...system.autoConfigUrl?{autoConfigUrl:system.autoConfigUrl}:{}}}return{source:"direct",...system.autoConfigUrl?{autoConfigUrl:system.autoConfigUrl}:{}}}function resolveProxy(routes,globalProxy,upstreamUrl,fallback={}){return resolveProxyDecision(routes,globalProxy,upstreamUrl,fallback).proxy}function proxyKeepAliveMaxMs2(){return proxyKeepAliveMaxMs()}function proxyDispatcher(proxyUrl,timeoutMs){if(!proxyUrl)return void 0;const t=timeoutMs??upstreamTimeoutMs2();const ka=proxyKeepAliveMaxMs2();const key2=`${proxyUrl}\0${t}\0${ka}\0${upstreamCaIdentity()}`;let agent=dispatcherCache.get(key2);if(!agent){const withTimeouts=options=>{const capped={...options,headersTimeout:t,bodyTimeout:t};if(ka>0){capped.keepAliveTimeout=Math.min(typeof capped.keepAliveTimeout==="number"?capped.keepAliveTimeout:ka,ka);capped.keepAliveMaxTimeout=ka}return capped};const base={uri:proxyUrl,headersTimeout:t,bodyTimeout:t,factory:(origin,options)=>new import_undici2.Pool(origin,withTimeouts(options)),clientFactory:(origin,options)=>new import_undici2.Pool(origin,withTimeouts(options))};const ca=upstreamExtraCa();const withConnect=ca?{...base,connect:{ca}}:base;agent=ka>0?new import_undici2.ProxyAgent({...withConnect,keepAliveTimeout:ka,keepAliveMaxTimeout:ka}):new import_undici2.ProxyAgent(withConnect);dispatcherCache.set(key2,agent)}return agent}function resetProxyCache(){for(const agent of dispatcherCache.values()){try{void agent.close().catch(()=>void 0)}catch{}}dispatcherCache.clear();lastConnection={}}function openProxySocket(proxy){if(proxy.protocol==="https:"){return tls2.connect({host:proxy.host,port:proxy.port,servername:net.isIP(proxy.host)?void 0:proxy.host})}return net.connect(proxy.port,proxy.host)}function connectDirect(host,port,timeoutMs=CONNECT_TIMEOUT_MS){return new Promise((resolve,reject)=>{const socket=connectFactory(port,host);let settled=false;const finishError=error=>{if(settled)return;settled=true;clearTimeout(timer6);socket.destroy();reject(error)};const timer6=setTimeout(()=>finishError(new Error(`upstream connect ${host}:${port} timed out after ${timeoutMs}ms`)),timeoutMs);socket.once("error",finishError);socket.once("connect",()=>{if(settled)return;settled=true;clearTimeout(timer6);resolve(socket)})})}function connectThroughProxy(host,port,proxyUrl){if(!proxyUrl){return connectDirect(host,port)}const proxy=parseHttpProxy(proxyUrl);if(!proxy)return Promise.reject(new Error(`invalid upstream proxy: ${redactProxyUrl(proxyUrl)}`));return new Promise((resolve,reject)=>{const socket=openProxySocket(proxy);let settled=false;const finishError=error=>{if(settled)return;settled=true;clearTimeout(timer6);socket.destroy();reject(error)};const timer6=setTimeout(()=>finishError(new Error(`upstream proxy CONNECT ${host}:${port} handshake timeout`)),CONNECT_TIMEOUT_MS);socket.once("error",finishError);const connectedEvent=proxy.protocol==="https:"?"secureConnect":"connect";socket.once(connectedEvent,()=>{const headers=[`CONNECT ${host}:${port} HTTP/1.1`,`Host: ${host}:${port}`,"Proxy-Connection: Keep-Alive",...proxy.authorization?[`Proxy-Authorization: ${proxy.authorization}`]:[],"",""];socket.write(headers.join("\r\n"));let buffer=Buffer.alloc(0);const onData=chunk=>{buffer=Buffer.concat([buffer,chunk]);const end=buffer.indexOf("\r\n\r\n");if(end<0){if(buffer.length>64*1024)finishError(new Error("upstream proxy CONNECT response header is too large"));return}socket.removeListener("data",onData);const head=buffer.subarray(0,end).toString("latin1");const statusLine=head.split("\r\n",1)[0]??"";if(!/^HTTP\/1\.[01]\s+2\d\d(?:\s|$)/.test(statusLine)){finishError(new Error(`upstream proxy CONNECT ${host}:${port} failed: ${statusLine}`));return}settled=true;clearTimeout(timer6);socket.removeListener("error",finishError);const rest=buffer.subarray(end+4);if(rest.length>0)socket.unshift(rest);resolve(socket)};socket.on("data",onData)})})}function errorChain(error){const chain=[];const seen=new Set;let current=error;while(current&&!seen.has(current)){seen.add(current);if(current instanceof Error){const record3={message:current.message};for(const key2 of["code","errno","syscall","address","port"]){const value=current[key2];if(value!==void 0)record3[key2]=value}chain.push(record3);current=current.cause}else{chain.push({message:String(current)});break}}return chain}function describeUpstreamFailure(error,url,proxyUrl,skipped){const chain=errorChain(error);const kind=classifyUpstreamFailure(error,{viaProxy:proxyUrl!==void 0});const fields=["code","errno","syscall","address","port"];const parts=[`kind=${kind}`];const maskHostIn=s3=>{try{return maskHostInText(s3,new URL(url).hostname)}catch{}return s3};let codeValue;for(const field of fields){const value=chain.find(entry=>entry[field]!==void 0)?.[field];if(value!==void 0){if(field==="code"&&codeValue===void 0)codeValue=value;parts.push(`${field}=${maskHostIn(String(value))}`)}}const messages=chain.map(entry=>maskHostIn(String(entry.message??""))).filter(Boolean);if(messages.length>0)parts.push(`message=${messages.join(" <- ")}`);parts.push(`url=${maskUrlForLog(url)}`);parts.push(`proxy=${redactProxyUrl(proxyUrl)??"direct"}`);let hint=hintWithSkippedProxy(kind,skipped);if(kind==="tls"&&chain.some(entry=>isTlsTrustCode(entry.code))){hint=`${hint}; ${tlsTrustRemediation()}`}parts.push(`hint=${hint}`);return{message:parts.join(" "),detail:{kind,...codeValue!==void 0?{code:String(codeValue)}:{},hint}}}function formatUpstreamError(error,url,proxyUrl,skipped){return describeUpstreamFailure(error,url,proxyUrl,skipped).message}function recordUpstreamConnection(url,proxyUrl,error,skipped){lastConnection={url,proxy:redactProxyUrl(proxyUrl),connected:error===void 0,...error===void 0?{}:{error:formatUpstreamError(error,url,proxyUrl,skipped)},checkedAt:new Date().toISOString()}}function getUpstreamConnectionStatus(){return{...lastConnection}}var import_undici2,dispatcherCache,lastConnection,windowsProxyCache,warnedUnsupportedSchemes,PROXY_KEEPALIVE_MAX_MS,CONNECT_TIMEOUT_MS,connectFactory;var init_upstream_proxy=__esm({"src/upstream-proxy.ts"(){"use strict";import_undici2=__toESM(require_undici(),1);init_logger();init_log_mask();init_fetch_util();init_upstream_fail();init_upstream_ca();init_knobs();dispatcherCache=new Map;lastConnection={};warnedUnsupportedSchemes=new Set;PROXY_KEEPALIVE_MAX_MS=55e3;CONNECT_TIMEOUT_MS=1e4;connectFactory=(port,host)=>net.connect(port,host)}});import{createHash as createHash4}from"crypto";function hashId(s3){return createHash4("sha256").update(s3,"utf8").digest("hex").slice(0,16)}function strippedResponseIdWarning(prevId){if(typeof prevId!=="string"||prevId.length===0)return null;return`responses previous_response_id=${prevId} stripped without rebuilding referenced history (#1954): bili replays input as full history, so a Responses native-chaining (delta) continuation loses prior turns upstream yet still returns 200. Send full input/output history, or set ACP_KEEP_RESPONSE_ID=1 to preserve the id.`}function isLoopbackAddress(addr){return!!addr&&(addr.startsWith("127.")||addr==="::1"||addr.startsWith("::ffff:127."))}function normalizeUpstreamOrigin(u2){if(!u2)return void 0;try{return new URL(u2.replace(/^mitm:\/\//,"https://")).origin}catch{const t=u2.trim();return t||void 0}}function applyEstimateCalibration(raw,k2,kOrigin,origin){if(k2===void 0||!Number.isFinite(k2)||k2<=0||raw<=0)return raw;const a=normalizeUpstreamOrigin(origin);const b2=normalizeUpstreamOrigin(kOrigin);if(a===void 0||b2===void 0||a!==b2)return raw;return raw*k2}function currentCalibrationFactor(stats,lastModel){const k2=stats.calibratedEstimate;if(k2===void 0||!Number.isFinite(k2)||k2<=0)return void 0;if(stats.calibratedEstimateModel!==void 0&&typeof lastModel==="string"&&lastModel!==""&&stats.calibratedEstimateModel!==lastModel)return void 0;return k2}function usageTotals(protocol,usage){const num7=v2=>typeof v2==="number"&&Number.isFinite(v2)?v2:void 0;if(protocol==="anthropic"){const fresh=num7(usage["input_tokens"]);const read=num7(usage["cache_read_input_tokens"]);const creation=num7(usage["cache_creation_input_tokens"]);const any=fresh!==void 0||read!==void 0||creation!==void 0;return{total:any?(fresh??0)+(read??0)+(creation??0):void 0,cached:read}}if(protocol==="openai"){const prompt=num7(usage["prompt_tokens"]);const cached=num7(usage["prompt_tokens_details"]?.["cached_tokens"])??num7(usage["prompt_cache_hit_tokens"]);return{total:prompt!==void 0?promptInputTotal("openai",prompt,cached):void 0,cached}}if(protocol==="google"){const prompt=num7(usage["promptTokenCount"]);const cached=num7(usage["cachedContentTokenCount"]);return{total:prompt!==void 0?promptInputTotal("google",prompt,cached):void 0,cached}}return{total:num7(usage["input_tokens"]),cached:num7(usage["input_tokens_details"]?.["cached_tokens"])}}function promptInputTotal(protocol,input,cached,creation){if(input===void 0)return 0;const includesCached=protocol==="openai"||protocol==="responses"||protocol==="google";const splitSemantics=!includesCached||typeof cached==="number"&&input<cached;const additive=(splitSemantics&&typeof cached==="number"?cached:0)+(splitSemantics&&typeof creation==="number"?creation:0);return input+additive}function usageOutputTotal(protocol,usage){const num7=v2=>typeof v2==="number"&&Number.isFinite(v2)?v2:void 0;if(protocol==="google"){const candidates=num7(usage["candidatesTokenCount"]);const thoughts=num7(usage["thoughtsTokenCount"]);if(candidates===void 0&&thoughts===void 0)return void 0;return(candidates??0)+(thoughts??0)}return num7(usage["completion_tokens"])??num7(usage["output_tokens"])}function toTokenNumber(s3){const n=parseInt(s3.replace(/,/g,""),10);return Number.isFinite(n)&&n>=1e3?n:void 0}function parseOverflowWindow(text2){let m2=text2.match(/>\s*(\d[\d,]*)\s*maximum/i);if(m2)return toTokenNumber(m2[1]);m2=text2.match(/\(\s*\d[\d,]*\s*\/\s*\d[\d,]*\s*>\s*(\d[\d,]+)\s*\)/);if(m2)return toTokenNumber(m2[1]);m2=text2.match(/maximum number of tokens allowed\s*\((\d[\d,]*)\)/i);if(m2)return toTokenNumber(m2[1]);m2=text2.match(/maximum context length is (\d[\d,]*)/i)??text2.match(/maximum context length of (\d[\d,]*)/i)??text2.match(/maximum context size (?:is|of) (\d[\d,]*)/i)??text2.match(/(?:maximum|max)\s+(?:context\s+)?length\s+(?:is\s+)?(\d[\d,]*)/i)??text2.match(/context length\s*\((\d[\d,]*)\s*token/i)??text2.match(/limit of (\d[\d,]*)\s*token/i)??text2.match(/(\d[\d,]*)\s*maximum\b/i);if(m2)return toTokenNumber(m2[1]);m2=text2.match(/(\d[\d,]*)\s*(?:个\s*)?tokens?\s*(?:的)?(?:上限|最大|限制)/i)??text2.match(/(?:上限|最大(?:值|限制)?|限制)[^。;;!!\n]{0,20}?(\d[\d,]*)\s*(?:个\s*)?tokens?/i);if(m2)return toTokenNumber(m2[1]);return void 0}function parseOverflowCounts(text2){let m2=text2.match(/requested\s+(\d[\d,]*)\s*tokens?\s*\(\s*(\d[\d,]*)\s*in the messages,\s*(\d[\d,]*)\s*in the completion\s*\)/i);if(m2)return{total:toTokenNumber(m2[1]),messages:toTokenNumber(m2[2]),completion:toTokenNumber(m2[3])};m2=text2.match(/prompt is too long:\s*(\d[\d,]*)\s*tokens?\s*>/i);if(m2)return{total:toTokenNumber(m2[1]),messages:toTokenNumber(m2[1])};m2=text2.match(/input token count\s*\((\d[\d,]*)\)\s*exceeds/i);if(m2)return{total:toTokenNumber(m2[1]),messages:toTokenNumber(m2[1])};for(const mm of text2.matchAll(/(?:请求|输入)([^。;;!!\n]{0,12}?)(\d[\d,]*)\s*(?:个\s*)?tokens?\s*[,,]?\s*(?:超过|超出|超限)/gi)){const n=toTokenNumber(mm[2]);if(n!==void 0&&!/(?:支持|最大|上限|限制|允许)/.test(mm[1]))return{total:n,messages:n}}return{}}function inspectContextOverflow(status,bodyText){const message=(bodyText??"").slice(0,300);const plausible=status===400||status===413||status>=500;if(!plausible)return{isOverflow:false,message};if(!bodyText)return{isOverflow:false,message};const isOverflow=CONTEXT_OVERFLOW_PATTERNS.some(p2=>p2.test(bodyText));if(!isOverflow)return{isOverflow:false,message};const counts=parseOverflowCounts(bodyText);return{isOverflow:true,window:parseOverflowWindow(bodyText),...counts.total!==void 0?{requestedTotal:counts.total}:{},...counts.messages!==void 0?{requestedMessages:counts.messages}:{},...counts.completion!==void 0?{requestedCompletion:counts.completion}:{},message}}function resolveOutputHeadroomCap(value){if(value===void 0)return DEFAULT_OUTPUT_HEADROOM_MAX_PCT;if(typeof value==="number")return value;const s3=value.trim();return s3.endsWith("%")?Number(s3.slice(0,-1))/100:Number(s3)}function reserveOutputHeadroom(window2,maxOutput,capPct=1){if(Number.isFinite(window2)&&window2>0&&Number.isFinite(maxOutput)&&maxOutput>0&&maxOutput<window2){const cap=Number.isFinite(capPct)?Math.max(0,Math.min(capPct,1)):1;const reserved=Math.min(maxOutput,cap*window2);return reserved>0?window2-reserved:window2}return window2}function systemToUser(messages,should){let hasSys=false;for(const m2 of messages){if(m2.role==="system"||m2.role==="developer"){hasSys=true;break}}if(!hasSys)return messages;return messages.map((m2,i)=>(m2.role==="system"||m2.role==="developer")&&(!should||should(m2,i))?{...m2,role:"user"}:m2)}function hardenOpenaiAssistantContent(messages){return messages.map(m2=>{if(m2.role!=="assistant")return m2;const c=m2.content;if(c===null||c===void 0)return{...m2,content:""};return m2})}function appendSystemText(added,original){if(Array.isArray(original)&&original.length>0){return added?[...original,{type:"text",text:added}]:[...original]}const base=typeof original==="string"?original:"";if(!added)return base;return base?`${base}
|
|
530
530
|
|
|
531
531
|
---
|
|
532
532
|
|