@letsscrapedata/scraper 0.5.0 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -1 +1 @@
1
- "use strict";var __create=Object.create,__defProp=Object.defineProperty,__getOwnPropDesc=Object.getOwnPropertyDescriptor,__getOwnPropNames=Object.getOwnPropertyNames,__getProtoOf=Object.getPrototypeOf,__hasOwnProp=Object.prototype.hasOwnProperty,__export=(t,e)=>{for(var r in e)__defProp(t,r,{get:e[r],enumerable:!0})},__copyProps=(t,e,r,a)=>{if(e&&"object"==typeof e||"function"==typeof e)for(let s of __getOwnPropNames(e))__hasOwnProp.call(t,s)||s===r||__defProp(t,s,{get:()=>e[s],enumerable:!(a=__getOwnPropDesc(e,s))||a.enumerable});return t},__toESM=(t,e,r)=>(r=null!=t?__create(__getProtoOf(t)):{},__copyProps(!e&&t&&t.__esModule?r:__defProp(r,"default",{value:t,enumerable:!0}),t)),__toCommonJS=t=>__copyProps(__defProp({},"__esModule",{value:!0}),t),src_exports={};__export(src_exports,{performOneTask:()=>performOneTask,scraper:()=>scraper,setScraperLogFun:()=>setScraperLogFun,updateScraperConfig:()=>updateScraperConfig}),module.exports=__toCommonJS(src_exports);var import_controller=require("@letsscrapedata/controller"),import_proxy=require("@letsscrapedata/proxy"),import_utils=require("@letsscrapedata/utils"),pkgLog=import_utils.log;function setScraperLogFun(t){return"function"==typeof t&&(pkgLog=t,(0,import_controller.setControllerLogFun)(pkgLog),(0,import_proxy.setProxyLogFun)(pkgLog),!0)}async function logdbg(...t){await pkgLog(import_utils.LogLevel.DBG,...t)}async function loginfo(...t){await pkgLog(import_utils.LogLevel.INF,...t)}async function logwarn(...t){await pkgLog(import_utils.LogLevel.WRN,...t)}async function logerr(...t){await pkgLog(import_utils.LogLevel.ERR,...t)}(0,import_controller.setControllerLogFun)(pkgLog),(0,import_proxy.setProxyLogFun)(pkgLog),(0,import_utils.setLogLevel)(import_utils.LogLevel.DBG);var import_utils13=require("@letsscrapedata/utils"),import_xml2js_lsd=__toESM(require("xml2js-lsd"),1),defaultSeperatorOfParas="::",newLineChar="\n",defaultElementCfg={template:{tid:void 0,version:void 0,commited:!1},attrs:{},attr:{name:void 0,value:void 0},paras:{},para:{paraname:void 0,name:"",desc:"",uitype:"",defval:"",listid:"0",listparas:"",min:"",max:"",pattern:"",alert:""},element:{loc:void 0,source:"default",absolute:!1},iframe:{srcprefix:"",loc:""},elecontent_attr:{type:void 0,attrname:void 0,attrname2:"",attrname3:"",attrname4:"",trim:!1,pattern:"",boolattr:!1,multieles:!0,join:newLineChar,line:!1,absolute:!1},elecontent_imgbase64:{type:void 0},elecontent_innerhtml:{type:void 0},elecontent_length:{type:void 0},elecontent_outerhtml:{type:void 0},elecontent_text:{type:void 0,trim:!0,multieles:!0,join:newLineChar,line:!1,top:!1},decodefontsvg:{outtype:"text"},decodefontttf:{fontselectors:"",fontfamilies:"",intype:"outerhtml",outtype:"text",all:!1},ocrcfg_api:{type:void 0,nlchars:"",seperator:!1,lang:"zh"},ocrcfg_tesseract:{type:void 0,nlchars:"",seperator:!1,lang:"zh"},tabname_cache:{type:void 0,optype:void 0,tabname:void 0,prefix:"cached",requestheaders:!1,filename:"",fileidx:"0"},tabname_check:{type:void 0,tabname:void 0,errname:void 0,mincnt:"0",maxcnt:"0",subkeys:"",minlen:"0",maxlen:"0",pattern:"",not:!1},tabname_deduplicate:{type:void 0,tabname:void 0,keys:void 0,keep:"first"},tabname_delete:{type:void 0,tabname:void 0},tabname_filter:{type:void 0,tabname:void 0,varname:void 0,templ:void 0,subkeys:""},actions:{},action_api:{type:void 0,method:"GET",url:void 0,encodeuri:!1,session:!1,headerssource:"headers",headers:"{}",referer:"",proxy:!0,timeout:"30000",context:"default",data:"",datatype:"object",format:"data",requestprefix:"",responseprefix:"",tabname:"none",subkeys:"",varname:"",setkeys:"",errname:"normal",valerrname:"ignore",pattern:"",flags:"",gen:!0,cap:!0,id:"0"},action_break:{type:void 0,id:"0"},action_captcha:{type:void 0,try:"1",errname:"captchafailed",debug:!1,id:"0"},action_click:{type:void 0,wait:"-1",gen:!0,cap:!0,clicktype:"click",try:"1",errname:"cfginvalid",popuppage:"ignored",popupsubtask:!1,login:!0,captcha:!0,navigate:!1,eurl:"",eloc:"",pn1:"",pv1:"",pn2:"",pv2:"",downloadpath:"",filename:"",pathvarname:"",id:"0"},action_continue:{type:void 0,id:"0"},action_misc:{type:void 0,id:"0"},misc_delsyncdbdata:{type:void 0,tids:"",retention:"2592000",minretention:"86400"},misc_extractdata:{type:void 0,name:void 0,datatableids:"",method:"put",paras:!0,execdata:!0,subtasks:!0,credits:!0},misc_loadtaskdata:{type:void 0,taskid:void 0},misc_getstatedata:{type:void 0,cookies:"new",localstorage:"new",headers:"none",userdata:"none",duration:""},action_exit:{type:void 0,errname:void 0,id:"0"},action_extract:{type:void 0,tabname:"dat_0000000000009911",id:"0"},action_extract_array:{type:void 0,subtype:void 0,list:void 0,requrl:"",setprocessed:!1,skipprocessed:!1,subkeys:"",arrayinrec:!0,keys:"",tabname:"dat_0000000000009921",varname:"",idxname:"",setkeys:"",maxloops:"0",errname:"cfginvalid",id:"0"},action_extract_script:{type:void 0,subtype:void 0,name:void 0,others:"",desc:"",tabname:"dat_0000000000009931",maxloops:"0",errname:"cfginvalid",id:"0"},action_extract_table:{type:void 0,subtype:void 0,orientation:"horizontal",check:!0,tabname:"dat_0000000000009941",keyformat:"camel",colnames:"",maxloops:"0",errname:"cfginvalid",id:"0"},column_element:{type:void 0,colname:void 0,completed:!1,setvar:!1,datatype:"string",errname:"ignore",valerrname:"ignore",pattern:"",flags:"",id:"0",discarded:!1},column_property:{type:void 0,subkeys:void 0,filter:!1,json:!1,colname:void 0,completed:!1,setvar:!1,datatype:"string",valerrname:"ignore",pattern:"",flags:"",id:"0",discarded:!1},column_ocr:{type:void 0,colname:void 0,completed:!1,setvar:!1,datatype:"string",valerrname:"ignore",pattern:"",flags:"",id:"0",discarded:!1},column_subtask:{type:void 0,colname:void 0,completed:!1,setvar:!1,datatype:"string",valerrname:"ignore",pattern:"",flags:"",id:"0",discarded:!1},column_templstr:{type:void 0,colname:void 0,templ:void 0,completed:!1,setvar:!1,datatype:"string",valerrname:"ignore",pattern:"",flags:"",id:"0",discarded:!1},action_goto:{type:void 0,url:void 0,reuse:!1,timeout:"30000",wait:"-1",encodeuri:!1,gen:!0,cap:!0,popuppage:"ignored",popupsubtask:!1,login:!0,captcha:!0,eurl:"",eloc:"",pn1:"",pv1:"",pn2:"",pv2:"",headers:"",referer:"",id:"0"},action_hover:{type:void 0,try:"1",gen:!1,cap:!1,wait:"-1",errname:"cfginvalid",id:"0"},action_ifelse:{type:void 0,id:"0"},condition_element:{type:void 0},condition_else:{type:void 0},condition_templstr:{type:void 0,templ:void 0},action_input:{type:void 0,content:void 0,enter:!1,replace:!1,gen:!1,cap:!1,try:"1",wait:"-1",errname:"cfginvalid",popuppage:"ignored",popupsubtask:!1,login:!1,captcha:!1,eurl:"",eloc:"",pn1:"",pv1:"",pn2:"",pv2:"",id:"0"},action_intercept_clear:{type:void 0,subtype:void 0,id:"0"},action_intercept_set:{type:void 0,subtype:void 0,id:"0"},request_abort:{type:void 0,method:"all",url:"",resourcetype:"image",postdata:""},response_cache:{type:void 0,method:"all",url:void 0,resourcetype:"all",postdata:"",minsize:"0",maxsize:"0",contenttype:"text",tabname:"dat_0000000000007001",requestheaders:!1,responseheaders:!1,cacheheaders:!1},object_key:{type:void 0,key:void 0,value:void 0,datatype:"string",operate:"set",varname:""},request_header:{type:void 0,name:void 0,value:void 0},response_save:{type:void 0,method:"all",url:void 0,resourcetype:"all",postdata:"",minsize:"0",maxsize:"0",basedir:"response",pathtype:"path_name",hashmethod:"MD5",hostnameparts:"0",extname:"",validextnames:"",params:"",encoding:"",tabname:"none"},response_statuscode:{type:void 0,codes:void 0,errname:void 0},action_loopdowhile_element:{type:void 0,subtype:void 0,iswhile:!1,varname:"",maxloops:"0",click:!1,navigate:!0,gen:!0,cap:!0,errname:"cfginvalid",wait:"-1",id:"0"},action_loopdowhile_templstr:{type:void 0,subtype:void 0,iswhile:!1,varname:"",templ:void 0,maxloops:"0",id:"0"},action_loopfor:{type:void 0,from:void 0,to:void 0,step:"1",roundtype:"ceil",varname:void 0,maxloops:"0",errname:"ignore",id:"0"},action_loopineles:{type:void 0,varname:"",maxloops:"0",start:"1",end:"0",step:"1",errname:"ignore",id:"0"},action_loopinstr:{type:void 0,list:void 0,requrl:"",setprocessed:!1,skipprocessed:!1,subkeys:"",arrayinrec:!0,split:"[\r\n]+",varname:"",idxname:"",setkeys:"",maxloops:"0",trim:!0,errname:"ignore",id:"0"},action_scroll_by:{type:void 0,subtype:void 0,height:"100",unit:"windowpct",maxtimes:"1",interval:"800",gen:!1,cap:!1,popuppage:"ignored",popupsubtask:!1,login:!1,captcha:!1,eurl:"",eloc:"",pn1:"",pv1:"",pn2:"",pv2:"",id:"0"},action_scroll_intoview:{type:void 0,subtype:void 0,gen:!1,cap:!1,errname:"cfginvalid",popuppage:"ignored",popupsubtask:!1,login:!1,captcha:!1,eurl:"",eloc:"",pn1:"",pv1:"",pn2:"",pv2:"",id:"0"},action_scroll_to:{type:void 0,subtype:void 0,height:"100",unit:"bodypct",gen:!1,cap:!1,popuppage:"ignored",popupsubtask:!1,login:!1,captcha:!1,eurl:"",eloc:"",pn1:"",pv1:"",pn2:"",pv2:"",id:"0"},action_select:{type:void 0,selecttype:"value",selectval:"",gen:!1,cap:!1,try:"1",wait:"-1",errname:"cfginvalid",popuppage:"ignored",popupsubtask:!1,login:!1,captcha:!1,eurl:"",eloc:"",pn1:"",pv1:"",pn2:"",pv2:"",id:"0"},dbquery:{dbname:void 0,sql:void 0,sqlparas:"",parasplit:defaultSeperatorOfParas,join:newLineChar,tabname:"none"},action_setvar_dbquery:{type:void 0,subtype:void 0,varname:void 0,defaultval:"",errname:"ignore",setkeys:"",valerrname:"ignore",pattern:"",flags:"",path:"",id:"0"},action_setvar_element:{type:void 0,subtype:void 0,varname:void 0,defaultval:"",try:"1",errname:"ignore",setkeys:"",valerrname:"ignore",pattern:"",flags:"",path:"",id:"0"},file:{path:void 0,encoding:"utf8"},action_setvar_file:{type:void 0,subtype:void 0,varname:void 0,defaultval:"",proxy:!0,errname:"ignore",setkeys:"",valerrname:"ignore",pattern:"",flags:"",path:"",id:"0"},action_setvar_get:{type:void 0,subtype:void 0,varname:void 0,defaultval:"",errname:"ignore",setkeys:"",valerrname:"ignore",pattern:"",flags:"",path:"",id:"0"},action_setvar_object:{type:void 0,subtype:void 0,varname:void 0,data:"{}",defaultval:"",errname:"ignore",setkeys:"",valerrname:"ignore",pattern:"",flags:"",path:"",id:"0"},action_setvar_ocr:{type:void 0,subtype:void 0,varname:void 0,defaultval:"",errname:"ignore",setkeys:"",valerrname:"ignore",pattern:"",flags:"",path:"",id:"0"},action_setvar_subtask:{type:void 0,subtype:void 0,varname:void 0,defaultval:"",errname:"ignore",setkeys:"",valerrname:"ignore",pattern:"",flags:"",path:"",id:"0"},action_setvar_templstr:{type:void 0,subtype:void 0,varname:void 0,templ:void 0,defaultval:"",errname:"ignore",setkeys:"",valerrname:"ignore",pattern:"",flags:"",path:"",id:"0"},subtask:{tid:void 0,parasstr:void 0,idx:"",minlen:"1",errname:"cfginvalid",popuppage:!1},action_subtask:{type:void 0,subtasks:"",sameasparent:!1,id:"0"},action_tabname:{type:void 0,id:"0"},action_wait_element:{type:void 0,subtype:void 0,timeout:"30000",state:"visible",errname:"ignore",wait:"-1",id:"0"},action_wait_navigation:{type:void 0,subtype:void 0,timeout:"30000",waituntil:"load",url:"",errname:"cfginvalid",wait:"-1",id:"0"},action_wait_sleep:{type:void 0,subtype:void 0,minms:"5000",maxms:"10000",errname:"ignore",wait:"-1",id:"0"},fonts:{},fontsvg:{exloc:"head link[rel='stylesheet']",inloc:"",csmaptype:"general",bsfilter:""},fontttf:{exloc:"head link[rel='stylesheet']",inloc:"",classes:"*",fonffamiles:"*",minuc:"0",maxuc:"0",startidx:"-1",fontselectors:"",fonturlpatterns:"",parsetype:"none",debug:!1},fontselector:{name:void 0,fontfamily:void 0},fontfamily:{name:void 0,fontcodes:"",fontchars:"",fonturl:""},fontcodes:{name:void 0,codes:void 0},fontchars:{name:void 0,chars:void 0},scripts:{},script:{name:void 0,scenario:void 0,desc:"",version:"0",scripttype:"js-isolated",base64:!0,script:""},captcha_amazon:{type:void 0},captcha_funcaptcha:{type:void 0},captcha_geetest:{type:void 0},captcha_keycaptcha:{type:void 0},captcha_mtcaptcha:{type:void 0},captcha_recaptcha:{type:void 0,minscore:"0.3"},captcha_turnstile:{type:void 0},image_element:{type:void 0},comment_element:{type:void 0,attr:"textContent"},input_element:{type:void 0,enter:!1},submit_element:{type:void 0},check_result:{type:void 0,attr:"",failedstr:""},captcha_text:{type:void 0,case:!1,lang:"en",math:!1,maxlen:"0",minlen:"0",question:!1,space:!1,texttype:"any"},captcha_coordinate:{type:void 0,lang:"en",maxclicks:"0",minclicks:"1"},transform:{defaultval:"",usevar:!1},fun_a_at:{type:void 0,subtype:void 0,idx:void 0},fun_a_concat:{type:void 0,subtype:void 0,array2:void 0},fun_a_every:{type:void 0,subtype:void 0,pattern:void 0,flags:""},fun_a_filter:{type:void 0,subtype:void 0,pattern:void 0,flags:""},fun_a_find:{type:void 0,subtype:void 0,pattern:void 0,flags:""},fun_a_findindex:{type:void 0,subtype:void 0,pattern:void 0,flags:""},fun_a_includes:{type:void 0,subtype:void 0,item:void 0},fun_a_indexof:{type:void 0,subtype:void 0,item:void 0,position:"0"},fun_a_join:{type:void 0,subtype:void 0,join:void 0},fun_a_keysvaluestoobj:{type:void 0,subtype:void 0,values:void 0,minlen:"1",samelen:!0},fun_a_length:{type:void 0,subtype:void 0},fun_a_mapattr:{type:void 0,subtype:void 0,subkeys:void 0,secondjoin:","},fun_a_match:{type:void 0,subtype:void 0,pattern:void 0,flags:"",resulttype:"idx",idx:"0"},fun_a_max:{type:void 0,subtype:void 0},fun_a_min:{type:void 0,subtype:void 0},fun_a_pop:{type:void 0,subtype:void 0},fun_a_push:{type:void 0,subtype:void 0,item:void 0},fun_a_replace:{type:void 0,subtype:void 0,substr:void 0,newstr:void 0,regexp:!1,flags:""},fun_a_setcomplement:{type:void 0,subtype:void 0,array2:void 0},fun_a_setdifference:{type:void 0,subtype:void 0,array2:void 0},fun_a_setintersection:{type:void 0,subtype:void 0,array2:void 0},fun_a_setunion:{type:void 0,subtype:void 0,array2:void 0},fun_a_shift:{type:void 0,subtype:void 0},fun_a_shuffle:{type:void 0,subtype:void 0},fun_a_slice:{type:void 0,subtype:void 0,beginidx:void 0,len:"",endidx:""},fun_a_sort:{type:void 0,subtype:void 0,valtype:"number",sorttype:"asc"},fun_a_toobj:{type:void 0,subtype:void 0,key:void 0,value:void 0},fun_a_uniq:{type:void 0,subtype:void 0},fun_a_unshift:{type:void 0,subtype:void 0,item:void 0},fun_n_ceil:{type:void 0,subtype:void 0},fun_n_dateformat:{type:void 0,subtype:void 0,format:void 0,ms:!0},fun_n_eq:{type:void 0,subtype:void 0,number2:void 0},fun_n_floor:{type:void 0,subtype:void 0},fun_n_ge:{type:void 0,subtype:void 0,number2:void 0},fun_n_gt:{type:void 0,subtype:void 0,number2:void 0},fun_n_isnan:{type:void 0,subtype:void 0},fun_n_le:{type:void 0,subtype:void 0,number2:void 0},fun_n_lt:{type:void 0,subtype:void 0,number2:void 0},fun_n_max:{type:void 0,subtype:void 0,number2:void 0},fun_n_min:{type:void 0,subtype:void 0,number2:void 0},fun_n_parsefloat:{type:void 0,subtype:void 0},fun_n_parseint:{type:void 0,subtype:void 0},fun_n_round:{type:void 0,subtype:void 0},fun_n_tofixed:{type:void 0,subtype:void 0,digits:void 0,fixed:!1},fun_o_assign:{type:void 0,subtype:void 0,object2:void 0},fun_o_attr:{type:void 0,subtype:void 0,subkeys:void 0},fun_o_entries:{type:void 0,subtype:void 0,kvjoin:"="},fun_o_findstrinobj:{type:void 0,subtype:void 0,str:void 0,equal:!1},fun_o_keys:{type:void 0,subtype:void 0},fun_o_match:{type:void 0,subtype:void 0,pattern:void 0,flags:"",resulttype:"idx",idx:"0"},fun_o_replace:{type:void 0,subtype:void 0,substr:void 0,newstr:void 0,regexp:!1,flags:""},fun_o_sort:{type:void 0,subtype:void 0,valtype:"number",sorttype:"asc"},fun_o_values:{type:void 0,subtype:void 0},fun_x_attr:{type:void 0,subtype:void 0,loc:void 0,idx:"0",attrname:void 0,xml:!0,decode:!1},fun_x_data:{type:void 0,subtype:void 0,loc:void 0,idx:"0",attrname:void 0,xml:!0,decode:!1},fun_x_empty:{type:void 0,subtype:void 0,loc:void 0,xml:!0,decode:!1},fun_x_html:{type:void 0,subtype:void 0,loc:void 0,idx:"0",xml:!0,decode:!1},fun_x_length:{type:void 0,subtype:void 0,loc:void 0,xml:!0,decode:!1},fun_x_remove:{type:void 0,subtype:void 0,loc:void 0,xml:!0,decode:!1},fun_x_text:{type:void 0,subtype:void 0,loc:void 0,idx:"-9999",xml:!0,decode:!1},fun_at:{type:void 0,idx:void 0},fun_closingsubstr:{type:void 0,openchar:void 0,startstr:"",regexp:!1,flags:"",position:"0"},fun_compress:{type:void 0,method:"gzip",flush:"",finishflush:"",chunksize:"0",windowbits:"0",level:"",memlevel:"",strategy:"",sourceencoding:"utf8",targetencoding:"base64"},fun_concat:{type:void 0,str1:void 0,str2:"",str3:"",str4:"",str5:""},fun_convertencoding:{type:void 0,sourceencoding:"base64",targetencoding:"utf8",start:"0",end:"0"},fun_decode:{type:void 0,str1:"",val1:"",str2:"",val2:"",str3:"",val3:"",str4:"",val4:"",str5:"",val5:"",defaultval:""},fun_decompress:{type:void 0,method:"gunzip",flush:"",finishflush:"",chunksize:"0",windowbits:"0",sourceencoding:"base64",targetencoding:"utf8",start:"0",end:"0"},fun_endswith:{type:void 0,str:void 0},fun_eq:{type:void 0,str:void 0},fun_hashcode:{type:void 0,hashmethod:"MD5"},fun_includes:{type:void 0,str:void 0},fun_indexof:{type:void 0,str:void 0,position:"0"},fun_insert:{type:void 0,str:void 0},fun_isin:{type:void 0,items:void 0},fun_itemstoobj:{type:void 0,split:void 0,kvsplit:":",keytrim:!0,keynows:!1,valuetrim:!0,valuenows:!1},fun_length:{type:void 0},fun_match:{type:void 0,pattern:void 0,flags:"",resulttype:"idx",idx:"0"},fun_normalize:{type:void 0},fun_not:{type:void 0},fun_padend:{type:void 0,targetlen:void 0,padstr:" "},fun_padstart:{type:void 0,targetlen:void 0,padstr:" "},fun_parsestr:{type:void 0},fun_replace:{type:void 0,substr:void 0,newstr:void 0,regexp:!1,flags:""},fun_search:{type:void 0,pattern:void 0},fun_slice:{type:void 0,beginidx:void 0,len:"",endidx:""},fun_specialconvert:{type:void 0,method:void 0,para1:"",para2:"",para3:"",para4:"",para5:""},fun_split:{type:void 0,split:void 0,limit:"0"},fun_startswith:{type:void 0,str:void 0},fun_substrafter:{type:void 0,substr:void 0,regexp:!1,flags:"",position:"0",last:!1,include:!1},fun_substrbefore:{type:void 0,substr:void 0,regexp:!1,flags:"",position:"0",last:!1,include:!1},fun_tobigint:{type:void 0},fun_tobool:{type:void 0},fun_tolowercase:{type:void 0},fun_tonum:{type:void 0},fun_touppercase:{type:void 0},fun_trim:{type:void 0},fun_trimend:{type:void 0},fun_trimstart:{type:void 0},fun_urldecode:{type:void 0,method:"URI",encoding:"utf8",percent:!0},fun_urldelparams:{type:void 0,param1:void 0,param2:"",param3:","},fun_urlencode:{type:void 0,method:"URI",encoding:"utf8",percent:!0},fun_urlget:{type:void 0,attrorpath:void 0,hashmethod:"MD5",hostnameparts:"0",params:"",param:"",extname:"",validextnames:"",title:""},fun_urlsetparams:{type:void 0,param1:void 0,val1:"",param2:"",val2:"",param3:"",val3:"",replace:!0},fun_script:{type:void 0,name:void 0,arg1:"",arg2:"",arg3:"",arg4:"",arg5:""},get_addedtaskparas:{type:void 0,tid:void 0,limit:"10000",join:newLineChar,interval:"3600"},get_content:{type:void 0},get_cookie:{type:void 0,domain:"",name:"",attr:"name",source:"orig"},get_evaluate:{type:void 0,script:void 0,data:"",isolated:!0,secure:!0},get_execedtaskparas:{type:void 0,tid:void 0,limit:"10000",join:newLineChar,interval:"3600"},get_file:{type:void 0,url:void 0,path:"",basedir:"files",pathtype:"path_name",hashmethod:"MD5",hostnameparts:"0",params:"",extname:"",validextnames:"",pathvarname:"",proxy:!0,headers:"",referer:"",setvar:!1},httpbrowser:{name:void 0,minversion:"0",maxversion:"0",httpversion:"0"},httpdevice:{device:void 0},httpheader:{name:void 0,source:"value",value:void 0,delete:!1},httpos:{os:void 0},get_httpheaders:{type:void 0,headermethod:"genLatestWindowsChrome",origheaders:"",browserlist:"",httpversion:"0"},get_localstorage:{type:void 0,origin:void 0,name:void 0,source:"orig",parsestr:!1},get_mhtml:{type:void 0,path:"",basedir:"mhtml",pathtype:"title",hashmethod:"MD5",hostnameparts:"0",pathvarname:""},get_pdf:{type:void 0,path:"",basedir:"pdf",pathtype:"title",hashmethod:"MD5",hostnameparts:"0",scale:"1",displayheaderfooter:!1,headertemplate:"",footertemplate:"",printbackground:!1,landscape:!1,pageranges:"",format:"Letter",width:"",height:"",top:"",right:"",bottom:"",left:"",screen:!1,onepage:!1,hmargin:"",setvar:!1,pathvarname:""},get_queuedcntwithparas:{type:void 0,tid:void 0,parasstr:void 0,operator:"eq"},get_queuedtaskparas:{type:void 0,tid:void 0,limit:"10000",join:newLineChar,interval:"3600"},get_random:{type:void 0,min:void 0,max:void 0},get_screenshot:{type:void 0,basedir:"screenshot",path:"",extname:"png",quality:"-1",fullpage:!1,x:"0",y:"0",width:"0",height:"0",omitbackground:!1,setvar:!1,pathvarname:""},get_tabname:{type:void 0,tabname:void 0,requrl:"",length:!1,idx:"-1",subkeys:""},get_title:{type:void 0,aspath:!1},get_window:{type:void 0,key1:void 0,key2:"",key3:"",key4:"",key5:"",key6:"",keys:!1,length:!1}},import_controller2=require("@letsscrapedata/controller"),appConfig={XML_ATTR_KEY:"$$",XML_CHAR_KEY:"_",XML_CHILDREN_KEY:"children",GEN_CREDITS_BITS:16,GEN_CREDITS_AND:65535,CHECK_DNS_DOMAIN:"example.com",CHECK_POPUP_PAGE_TIMEOUT1:35e3,CHECK_POPUP_PAGE_TIMEOUT2:5e3,RESERVED_PARA_NAMES:["authInfo","inParas","sysParas"],EVENT_TYPES:{lsdPageClose:import_controller2.LsdPageEvent.PAGE_CLOSE,lsdPagePopup:import_controller2.LsdPageEvent.PAGE_POPUP,lsdScraperPopup:"lsdScraperPopup",taskComplete:"taskComplete"},OPERATE_ACTIONS:["click","goto","hover","input","scroll","select","wait","captcha","intercept"],performOneTask:console.log,cfg:{exitWhenCompleted:!1,useParasstrInXmlIfNeeded:!1,loadUnfinishedTasks:!1,loadFailedTasksInterval:0,baseDir:"",baseDownloadDir:"",baseFileDir:"",templateDir:"",taskDir:"",exportsDir:"",inputFileDirPart:"LetsScrapeData",useStealthPlugin:!1,browserControllerType:"patchright",browserType:"chromium",lsdLaunchOptions:{headless:!1,geoip:!0},lsdConnectOptions:{browserUrl:""},browserConfigs:[],captcha:{clientKey:"",captchas:[]},maxConcurrency:1,readCode:"",templateParas:[],urlPrefix:"https://api.letsscrapedata.com/nologin",totalMaxConcurrency:10,minMiliseconds:2e3,moveDataWhenStart:!1,dataFileFormat:"jsonl",columnSeperator:"::"}},TaskParser=class t{static#t(e,r){try{if(!e||!r)throw new Error(`##te Invalid paras, parentEleName ${r} in _applyDefaultElementCfg`);if("object"!=typeof e)return!0;const a=appConfig.XML_ATTR_KEY,s=appConfig.XML_CHILDREN_KEY;e[a]||(e[a]={});let i=r;e[a].type&&(i=i+"_"+e[a].type),e[a].subtype&&(i=i+"_"+e[a].subtype);const n=defaultElementCfg[i];if(!n)throw new Error(`##te No default Cfg for eleName ${i} in _applyDefaultElementCfg`);const o=Object.assign({},n);if(Object.keys(n).forEach(t=>{let r=e[a][t];if("boolean"==typeof o[t])"true"===r||""===r?o[t]=!0:"false"===r&&(o[t]=!1);else if(r||""===r)o[t]=r;else if(void 0===o[t])throw new Error(`##te Attribute ${t} of Element ${i} is undefined`)}),e[a]=o,!e[s])return!0;const c=Array.from(Object.keys(e[s]));for(const r of c){const a=e[s][r];1===a.length&&""===a[0]?e[s][r]=[]:a.forEach(e=>t.#t(e,r))}return!0}catch(t){throw logerr(`##te Error parentEleName ${r} in _applyDefaultElementCfg`),new Error(t)}}static async convertXmlToJson(e,r=!0){try{const a=function(t){const e=t.indexOf("_");return e>0?t.slice(0,e):t},s={attrkey:appConfig.XML_ATTR_KEY,charkey:appConfig.XML_CHAR_KEY,childkey:appConfig.XML_CHILDREN_KEY,explicitChildren:!0,tagNameProcessors:[a]},i=appConfig.XML_CHILDREN_KEY,n=await import_xml2js_lsd.default.parseStringPromise(e,s);if(!(n&&n.template&&n.template[i]&&Array.isArray(n.template[i].actions)))throw new Error(`##te Invalid XML config string: ${e}`);return r&&t.#t(n.template,"template"),n.template}catch(t){throw logerr("##te Exeception in convertXmlToJson"),logerr(`##te xmlCfgStr: ${e}`),new Error(t)}}static getPartOfJsonCfg(t,e,r=!1){try{const r=t[appConfig.XML_CHILDREN_KEY][e][0];return r||null}catch(t){if(r)return null;throw logerr(`##te Exeception when try to get ${e} in getPartOfJsonCfg`),new Error(t)}}static#e(e){try{const r=t.getPartOfJsonCfg(e,"attrs");return!Array.isArray(r?.children?.attr)||r.children.attr.length<=0?[]:r.children.attr.map(t=>t[appConfig.XML_ATTR_KEY])}catch(t){return logerr(t),[]}}static getParaCfgsFromJsonCfg(e){try{const r=t.getPartOfJsonCfg(e,"paras");return!Array.isArray(r?.children?.para)||r.children.para.length<=0?[]:r.children.para.map(t=>t[appConfig.XML_ATTR_KEY])}catch(t){return logerr(t),[]}}static getScriptCfgsFromJsonCfg(e){try{const r=t.getPartOfJsonCfg(e,"scripts",!0);return!Array.isArray(r?.children?.script)||r.children.script.length<=0?[]:r.children.script.map(t=>Object.assign({},t[appConfig.XML_ATTR_KEY],{script:t[appConfig.XML_CHAR_KEY]}))}catch(t){return logerr(t),[]}}static getAttrsInXml(e){const r=t.#e(e),a={};return r.forEach(t=>a[t.name]=t.value),a}static#r(e,r){const a=[],s=appConfig.XML_CHILDREN_KEY;for(const i of e)if(i?.[appConfig.XML_ATTR_KEY]?.type===r)a.push(i);else if(i&&i[s]&&(i[s].action||i[s].condition)){t.#r(i[s].action?i[s].action:i[s].condition,r).forEach(t=>{a.push(t)})}return a}static getCaptchTypes(e){const r=appConfig.XML_CHILDREN_KEY,a=e[r].actions[0][r].action,s=t.#r(a,"captcha"),i=[];for(const t of s){const e=t[appConfig.XML_CHILDREN_KEY]?.captcha;Array.isArray(e)&&e.forEach(t=>{const e=t[appConfig.XML_ATTR_KEY].type;e&&i.push(e)})}return i}static getInParas(t,e=[],r="::"){const a={},s=t.split("@@"),i=["para","apara","rpara"];for(let t=0;t<3;t++){let n=i[t],o=e.filter(t=>t.paraname.startsWith(n)).length;if(s.length>t&&s[t].length>=0){let e=s.length>t&&s[t].length>0?s[t].split(r):[];for(let t=1;t<=e.length;t++)a[`${n}${t}`]=e[t-1];for(let t=e.length+1;t<=o;t++)a[`${n}${t}`]=""}}return a}},fs=__toESM(require("fs"),1),path=__toESM(require("path"),1),import_utils3=require("@letsscrapedata/utils"),import_isolated_vm=__toESM(require("isolated-vm"),1),import_utils2=require("@letsscrapedata/utils"),LsdScript=class t{static#a=null;static#s=null;static convertScriptCfg(t){let{name:e,scenario:r,script:a,scripttype:s,base64:i}=t;const n=s.split("-");i&&(a=(0,import_utils2.decodeFromBase64)(a,!1));return{name:e,script:a,scenario:r,lang:n[0],env:n[1]}}static#i(t){return t.startsWith("std")}static setGetStdFunScript(e){if("function"==typeof e)return t.#a=e,!0;throw new Error("##cfg fun not a function in setGetStdFunScript")}static setClearStdFunScript(e){if("function"==typeof e)return t.#s=e,!0;throw new Error("##cfg fun not a function in clearGetStdFunScript")}static#n(e){return!(!this.#i(e)||!t.#s)&&this.#n(e)}static async#o(e,r={}){if("string"!=typeof e||!e)throw new Error("invalid paras");let a=r[e];return a||(e.startsWith("std")&&t.#a&&(a=await t.#a(e),a)?a:null)}static#c(t,e){try{const r=new import_isolated_vm.default.Isolate,a=r.createContextSync(),s=new import_isolated_vm.default.ExternalCopy(t);a.global.setSync("inData",s.copyInto());const i=r.compileScriptSync(e).runSync(a);return"string"!=typeof i&&logwarn("Please check the script is correct."),"string"==typeof i?i:""}catch(t){return logerr(t),""}}static async#l(e,r,a,s){const i=await t.#o(r,a);if(!i||i.scenario!==s)return"";return t.#c(e,i.script)}static async execFunScript(e,r,a={}){const s=await t.#l(e,r,a,"fun");return"cfginvalid"===s&&t.#n(r),s}static async execExtractScript(e,r,a={}){const s=await t.#l(e,r,a,"extract");let i=(0,import_utils2.getJsonParseOfStr)(s);return i||(i={execData:{},errName:"cfginvalid"}),"cfginvalid"===i.errName&&t.#n(r),i}},TemplateManagerInScraper=class t{static#p=new Map;static#g=new Set;static#h(t){const e=appConfig.cfg.templateParas.find(e=>e.templateId===t);return e?.readCode?e.readCode:appConfig.cfg.readCode}static async#u(t,e){try{if(!e){if(!appConfig.cfg.templateDir)return null;const r=await(0,import_utils3.filesInDir)(appConfig.cfg.templateDir,"general",`tid${t}_`,"xml");let a=1===r.length?r[0]:`tid${t}.xml`;a=path.join(appConfig.cfg.templateDir,a),e=fs.readFileSync(a,"utf8")}if(!e)return null;return{templateId:t,domainId:1,defaultElementSource:"browser",maxExecutionDuration:600,configDetail:e}}catch(t){return null}}static async#d(e,r){try{if(t.#g.has(e))return null;let a=`${appConfig.cfg.urlPrefix}/template`;a=`${a}?tid=${e}&code=${r}`;const s=await fetch(a);if(200!==s.status)return 403===s.status?logwarn(`Failed to get template ${e}: No privilege`):logwarn(`Failed to get template ${e}, status: ${s.status}`),t.#g.add(e),null;const i=await s.json();if(!i||0!==i.code||!i.data)return logwarn(`Failed to get template ${e}: ${i.message}`),null;if(i.data.templateId!==e)return logerr(`Different templateId ${e} / ${i.templateId}`),null;const{domainId:n=0,defaultElementSource:o,configDetail:c="",maxExecutionDuration:l}=i.data;if(!c)return logerr(`Invalid content in template ${e}`),null;return{templateId:e,domainId:n,defaultElementSource:o,maxExecutionDuration:l,configDetail:c}}catch(t){return logdbg(t),null}}static async parseXmlTemplate(t){const e=await TaskParser.convertXmlToJson(t),r=TaskParser.getParaCfgsFromJsonCfg(e),a=TaskParser.getPartOfJsonCfg(e,"fonts",!0),s=TaskParser.getScriptCfgsFromJsonCfg(e),i=TaskParser.getPartOfJsonCfg(e,"actions",!1),n=TaskParser.getAttrsInXml(e),o=TaskParser.getCaptchTypes(e),c=(0,import_utils3.getCurrentUnixTime)(),l={};s.forEach(t=>{l[t.name]=LsdScript.convertScriptCfg(t)});return{actionConfigs:i,paraCfgs:r,fontsConfig:a||null,templScripts:l,attrsInXml:n,captchaTypes:o,lastUsedTime:c,lastCheckTime:c,secureDataFlag:t.includes("secureData.")}}static async getTemplateConfig(e,r=""){if(!r){const r=t.#p.get(e);if(r)return r}let a=await t.#u(e,r);if(!a){const r=t.#h(e);a=await t.#d(e,r)}if(!a){const t=`Cannot get template tid ${e}`;throw logwarn(t),new Error(t)}const s=await t.parseXmlTemplate(a.configDetail),i=Object.assign({},s,{template:a});return t.#p.set(e,i),i}static clearTemplateConfig(e=0){return e>0?t.#p.delete(e):t.#p.clear(),!0}},import_node_events=__toESM(require("events"),1),import_node_events2=require("events"),fs6=__toESM(require("fs"),1),path5=__toESM(require("path"),1),import_got_scraping=require("got-scraping"),import_utils11=require("@letsscrapedata/utils"),import_controller3=require("@letsscrapedata/controller"),uuid=__toESM(require("uuid"),1),SysParas=class{#f;#m;#y;#C;constructor(t,e,r,a){this.#f=t,this.#m=e,this.#y=r,this.#C=a}get version(){return this.#C}get templateId(){return this.#m}get taskId(){return this.#y}get url(){try{return this.#f?.page?this.#f.page.url():""}catch{return""}}get userAgent(){try{return this.#f?.page?.userAgent?this.#f.page.userAgent():""}catch{return""}}get hasPopupPage(){return this.#f?.popupPage?"1":"0"}get subtaskNum(){const t=this.#f?.subtasks;return Array.isArray(t)?String(t.length):"0"}get datatableNum(){const t=this.#f?.execData;return t&&"object"==typeof t?String(Object.keys(t).length):"0"}get currentISODate(){return(new Date).toISOString().slice(0,10)}get currentISOString(){return(new Date).toISOString()}get currentLocaleString(){return(new Date).toLocaleString()}get currentLocaleDateString(){return(new Date).toLocaleDateString()}get currentLocaleTimeString(){return(new Date).toLocaleTimeString()}get currentString(){return(new Date).toString()}get currentUTCString(){return(new Date).toUTCString()}get currentUnixMs(){return String(Date.now())}get currentUnixTs(){return String(Math.floor(Date.now()/1e3))}get random10(){return String(Math.floor(10*Math.random()))}get random100(){return String(Math.floor(100*Math.random()))}get random1000(){return String(Math.floor(1e3*Math.random()))}get random10000(){return String(Math.floor(1e4*Math.random()))}get uuidv1(){return uuid.v1()}get uuidv4(){return uuid.v4()}},iconv=__toESM(require("iconv-lite"),1),zlib=__toESM(require("zlib"),1),cheerio=__toESM(require("cheerio"),1),import_dateformat=__toESM(require("dateformat"),1),import_utils4=require("@letsscrapedata/utils");function findStrInObj(t,e,r="obj",a=!1,s=1){let i,n=[];if(s>20)return[];if(Array.isArray(t))for(let o=0;o<t.length;o++){const c=r?`${r}.${o}`:`${o}`;i=findStrInObj(t[o],e,c,a,s+1),n.push(...i)}else if("object"!=typeof t||t){if("string"==typeof t)(a&&t===e||!a&&t.includes(e))&&n.push([r,t]);else if("number"==typeof t){const s=String(t);(a&&s===e||!a&&s.includes(e))&&n.push([r,t])}}else for(const o in t){const c=r?`${r}.${o}`:`${o}`;i=findStrInObj(t[o],e,c,a,s+1),n.push(...i)}return n}var LsdString=class t{static specialConvertFunObj={};static setSpecialConvertFunObj(e){return t.specialConvertFunObj=e,!0}static transformStrSync(e,r,a){let s=e;try{if("string"!=typeof e||!Array.isArray(r))throw new Error("Invalid paras in transformStr");for(const e of r){if("object"!=typeof e)throw new Error("Invalid funCfg in transformStr");const r=1===e.type.length?`${e.type}_${e.subtype}`:e.type;let a=t.#v[r];if(!a||"function"!=typeof a)return logerr(`Invalid funName ${r} in transformStr`),"";s=a(s,e)}}catch(t){t.message.includes(" JSON ")||t.message.startsWith("##check")||loginfo(t),s=""}return s||a}static async transformStr(e,r,a,s){let i=e;try{if("string"!=typeof e||!Array.isArray(r))throw new Error("Invalid paras in transformStr");for(const e of r){if("object"!=typeof e)throw new Error("Invalid funCfg in transformStr");const r=1===e.type.length?`${e.type}_${e.subtype}`:e.type;if("script"!==r){let a=t.#v[r];if(!a||"function"!=typeof a)return logerr(`Invalid funName ${r} in transformStr`),"";i=a(i,e)}else i=await t.#b(i,e,s)}}catch(t){t.message.includes(" JSON ")||t.message.startsWith("##check")||loginfo(t),i=""}return i||a}static#w(t,e){if(!Array.isArray(t))throw new Error("##check data is not an array!");if(void 0!==e&&!Array.isArray(e))throw new Error("##check data is not an array!")}static#S(t,e){if(!t||"object"!=typeof t)throw new Error("##check data is not an not-null object!");if(void 0!==e&&(!e||"object"!=typeof t))throw new Error("##check data is not an not-null object!")}static#k(t){return(0,import_utils4.getStringOfObj)(t)}static#_(t,e){for(const r of e.split(".")){if("object"!=typeof t||!t)return"";t=t[r]}return null==t?"":"string"==typeof t?t:"number"==typeof t?String(t):"boolean"==typeof t?t?"1":"0":"object"==typeof t?JSON.stringify(t):""}static#x(e,r){const{idx:a}=r,s=(0,import_utils4.getJsonParseOfStr)(e);t.#w(s);const i=s.at(parseInt(a));return t.#k(i)}static#E(e,r){const{array2:a}=r,s=(0,import_utils4.getJsonParseOfStr)(e),i=(0,import_utils4.getJsonParseOfStr)(a);t.#w(s,i);let n=s.concat(i);return JSON.stringify(n)}static#A(e,r){const{pattern:a,flags:s}=r,i=(0,import_utils4.getJsonParseOfStr)(e);t.#w(i);const n=new RegExp(a,s);return i.every(t=>(0,import_utils4.getStringOfObj)(t).match(n))?"1":"0"}static#O(e,r){const{pattern:a,flags:s}=r,i=(0,import_utils4.getJsonParseOfStr)(e);t.#w(i);const n=new RegExp(a,s),o=i.filter(t=>(0,import_utils4.getStringOfObj)(t).match(n));return JSON.stringify(o)}static#I(e,r){const{pattern:a,flags:s}=r,i=(0,import_utils4.getJsonParseOfStr)(e);t.#w(i);const n=new RegExp(a,s),o=i.find(t=>(0,import_utils4.getStringOfObj)(t).match(n));return(0,import_utils4.getStringOfObj)(o)}static#T(e,r){const{pattern:a,flags:s}=r,i=(0,import_utils4.getJsonParseOfStr)(e);t.#w(i);const n=new RegExp(a,s),o=i.findIndex(t=>(0,import_utils4.getStringOfObj)(t).match(n));return String(o)}static#D(e,r){const{item:a}=r,s=(0,import_utils4.getJsonParseOfStr)(e);return t.#w(s),s.includes(a)?"1":"0"}static#P(e,r){const{item:a,position:s}=r,i=(0,import_utils4.getJsonParseOfStr)(e);return t.#w(i),String(i.indexOf(a,parseInt(s)))}static#N(e,r){const{join:a}=r,s=(0,import_utils4.getJsonParseOfStr)(e);return t.#w(s),s.join(a)}static#R(e,r){const{values:a,minlen:s,samelen:i}=r,n=parseInt(s),o=(0,import_utils4.getJsonParseOfStr)(e),c=(0,import_utils4.getJsonParseOfStr)(a);t.#w(o,c);const l=o.length,p=c.length;if(i&&l!==p)return"";const g=Math.min(l,p);if(g<n)return"";const h={};for(let t=0;t<g;t++){const e=o[t],r=c[t];if(!("string"==typeof e&&e.length>0&&"string"==typeof r))return"";h[e]=r}return JSON.stringify(h)}static#F(e){const r=(0,import_utils4.getJsonParseOfStr)(e);return t.#w(r),String(r.length)}static#j(e,r){const{subkeys:a,secondjoin:s}=r,[i,n]=a.split("@@"),o=(0,import_utils4.getJsonParseOfStr)(e);t.#w(o);let c=[];if(n){const e=i.split(",");for(const r of o){const a=(0,import_utils4.getMemberOfObject)(r,e);t.#w(a);const i=a.map(e=>t.#_(e,n));s?c.push(i.join(s)):c.push(JSON.stringify(i))}}else c=o.map(e=>t.#_(e,i));return JSON.stringify(c)}static#$(e,r){const a=(0,import_utils4.getJsonParseOfStr)(e);t.#w(a);const s=a.map(e=>"string"==typeof e?t.#L(e,r):e);return JSON.stringify(s)}static#M(e){const r=(0,import_utils4.getJsonParseOfStr)(e);t.#w(r);const a=r.map(t=>Number(t));return a.findIndex(t=>Number.isNaN(t))>=0?"":String(Math.max(...a))}static#q(e){const r=(0,import_utils4.getJsonParseOfStr)(e);t.#w(r);const a=r.map(t=>Number(t));return a.findIndex(t=>Number.isNaN(t))>=0?"":String(Math.min(...a))}static#U(e){const r=(0,import_utils4.getJsonParseOfStr)(e);t.#w(r);const a=r.pop();return t.#k(a)}static#J(e,r){const{item:a}=r,s=(0,import_utils4.getJsonParseOfStr)(e);return t.#w(s),s.push(a),JSON.stringify(s)}static#H(e,r){const a=(0,import_utils4.getJsonParseOfStr)(e);t.#w(a);const s=a.map(e=>"string"==typeof e?t.#B(e,r):e);return JSON.stringify(s)}static#V(e,r){const{array2:a}=r,s=(0,import_utils4.getJsonParseOfStr)(e),i=(0,import_utils4.getJsonParseOfStr)(a);t.#w(s,i);let n=(0,import_utils4.getComplementOfTwoArray)(s,i);return JSON.stringify(n)}static#W(e,r){const{array2:a}=r,s=(0,import_utils4.getJsonParseOfStr)(e),i=(0,import_utils4.getJsonParseOfStr)(a);t.#w(s,i);let n=(0,import_utils4.getDifferenceOfTwoArray)(s,i);return JSON.stringify(n)}static#K(e,r){const{array2:a}=r,s=(0,import_utils4.getJsonParseOfStr)(e),i=(0,import_utils4.getJsonParseOfStr)(a);t.#w(s,i);let n=(0,import_utils4.getIntersectionOfTwoArray)(s,i);return JSON.stringify(n)}static#G(e,r){const{array2:a}=r,s=(0,import_utils4.getJsonParseOfStr)(e),i=(0,import_utils4.getJsonParseOfStr)(a);t.#w(s,i);let n=(0,import_utils4.getUnionOfTwoArray)(s,i);return JSON.stringify(n)}static#z(e){const r=(0,import_utils4.getJsonParseOfStr)(e);t.#w(r);const a=r.shift();return t.#k(a)}static#Y(e){const r=(0,import_utils4.getJsonParseOfStr)(e);t.#w(r);let a=r.sort(()=>Math.random()-.5);return JSON.stringify(a)}static#X(e,r){const{beginidx:a,len:s,endidx:i}=r,n=parseInt(a);let o="string"==typeof i&&i.length>0?parseInt(i):void 0;const c="string"==typeof s&&s.length>0?parseInt(s):void 0;c&&c>0&&(o=n+c);const l=(0,import_utils4.getJsonParseOfStr)(e);t.#w(l);const p=l.slice(n,o);return JSON.stringify(p)}static#Q(t,e,r){let a;return a="string"===e?"asc"===r?t.sort((t,e)=>t.localeCompare(e)):t.sort((t,e)=>e.localeCompare(t)):"asc"===r?t.sort((t,e)=>Number(t)-Number(e)):t.sort((t,e)=>Number(e)-Number(t)),a}static#Z(e,r){const{valtype:a,sorttype:s}=r,i=(0,import_utils4.getJsonParseOfStr)(e);t.#w(i);let n=t.#Q(i,a,s);return JSON.stringify(n)}static#tt(e,r){const{key:a,value:s}=r;if(!a||!s)return"";const i=(0,import_utils4.getJsonParseOfStr)(e);t.#w(i);const n={};for(const t of i){const e=String(t[a]),r=(0,import_utils4.getStringOfObj)(t[s]);n[e]=r}return JSON.stringify(n)}static#et(e){const r=(0,import_utils4.getJsonParseOfStr)(e);t.#w(r);const a=[...new Set(r)];return JSON.stringify(a)}static#rt(e,r){const{item:a}=r,s=(0,import_utils4.getJsonParseOfStr)(e);return t.#w(s),s.unshift(a),JSON.stringify(s)}static#at(t){return String(Math.ceil(Number(t)))}static#st(t,e){const{format:r,ms:a}=e;let s=t?parseInt(t):0;a||(s*=1e3);const i=s?new Date(s):new Date;return"toISODate"===r?i.toISOString().slice(0,10):"toISOString"===r?i.toISOString():"toLocaleString"===r?i.toLocaleString():"toLocaleDateString"===r?i.toLocaleDateString():"toLocaleTimeString"===r?i.toLocaleTimeString():"toString"===r?i.toString():"toUTCString"===r?i.toUTCString():(0,import_dateformat.default)(i,r)}static#it(t,e){const{number2:r}=e;return Number(t)===Number(r)?"1":"0"}static#nt(t){return String(Math.floor(Number(t)))}static#ot(t,e){const{number2:r}=e;return Number(t)>=Number(r)?"1":"0"}static#ct(t,e){const{number2:r}=e;return Number(t)>Number(r)?"1":"0"}static#lt(t){const e=Number(t);return Number.isNaN(e)?"1":"0"}static#pt(t,e){const{number2:r}=e;return Number(t)<=Number(r)?"1":"0"}static#gt(t,e){const{number2:r}=e;return Number(t)<Number(r)?"1":"0"}static#ht(t,e){const{number2:r}=e,a=Number(t),s=Number(r);return String(a>s?a:s)}static#ut(t,e){const{number2:r}=e,a=Number(t),s=Number(r);return String(a<s?a:s)}static#dt(t){return String(parseFloat(t))}static#ft(t){return String(parseInt(t))}static#mt(t){return String(Math.round(Number(t)))}static#yt(t,e){const{digits:r,fixed:a}=e,s=Number(t),i=parseInt(r);if(a)return String(s.toFixed(i));{const t=String(s).split(".");return 2!==t.length||t[1].length<=i?String(s):String(s.toFixed(i))}}static#Ct(e,r){const{object2:a}=r,s=(0,import_utils4.getJsonParseOfStr)(e),i=(0,import_utils4.getJsonParseOfStr)(a);t.#S(s,i);const n=Object.assign({},s,i);return JSON.stringify(n)}static#vt(e,r){const{subkeys:a}=r;let s=(0,import_utils4.getJsonParseOfStr)(e);return t.#S(s),t.#_(s,a)}static#bt(e,r){const{kvjoin:a}=r;let s=(0,import_utils4.getJsonParseOfStr)(e);t.#S(s);const i=Array.from(Object.entries(s)).map(t=>t.join(a));return JSON.stringify(i)}static#wt(t,e){const{str:r,equal:a}=e;const s=findStrInObj((0,import_utils4.getJsonParseOfStr)(t),r,"",a);return s.length>0?s.map(t=>`${t[0]}: ${JSON.stringify(t[1])}`).join("\n"):""}static#St(e){let r=(0,import_utils4.getJsonParseOfStr)(e);t.#S(r);const a=Array.from(Object.keys(r));return JSON.stringify(a)}static#kt(e,r){let a=(0,import_utils4.getJsonParseOfStr)(e);t.#S(a);for(const e of Object.keys(a))"string"==typeof a[e]&&(a[e]=t.#L(a[e],r));return JSON.stringify(a)}static#_t(e,r){let a=(0,import_utils4.getJsonParseOfStr)(e);t.#S(a);for(const e of Object.keys(a))"string"==typeof a[e]&&(a[e]=t.#B(a[e],r));return JSON.stringify(a)}static#xt(e,r){const{valtype:a,sorttype:s}=r;let i=(0,import_utils4.getJsonParseOfStr)(e);t.#S(i);const n=Array.from(Object.keys(i)),o=t.#Q(n,a,s),c={};return o.forEach(t=>c[t]=i[t]),JSON.stringify(c)}static#Et(e){let r=(0,import_utils4.getJsonParseOfStr)(e);t.#S(r);const a=Array.from(Object.values(r));return JSON.stringify(a)}static#At(t,e,r=0){try{const a="root"===e?t.root():t(e);return a.length<=0||-9999===r?a:a.eq(r)}catch(t){return logerr("##te cheerio invalid $ or loc"),null}}static#Ot(e,r){try{const{loc:a,idx:s,attrname:i,xml:n,decode:o}=r,c=parseInt(s),l={xmlMode:n,decodeEntities:o},p=cheerio.load(e,l);return t.#At(p,a,c).attr(i)}catch(t){return logerr(`##tmp cheerio xAttr err: ${t}`),""}}static#It(e,r){try{const{loc:a,idx:s,attrname:i,xml:n,decode:o}=r,c=parseInt(s),l={xmlMode:n,decodeEntities:o},p=cheerio.load(e,l);return t.#At(p,a,c).data(i)}catch(t){return logerr(`##tmp cheerio xData err: ${t}`),""}}static#Tt(t,e){try{const{loc:r,xml:a,decode:s}=e,i={xmlMode:a,decodeEntities:s},n=cheerio.load(t,i);return n(r).empty(),n.html()}catch(e){return logerr(`##tmp cheerio xEmpty err: ${e}`),t}}static#Dt(e,r){try{const{loc:a,idx:s,xml:i,decode:n}=r,o=parseInt(s),c={xmlMode:i,decodeEntities:n},l=cheerio.load(e,c);if(a){return t.#At(l,a,o).html()}return l.html()}catch(t){return logerr(`##tmp cheerio xHtml err: ${t}`),""}}static#Pt(e,r){try{const{loc:a,xml:s,decode:i}=r,n=-9999,o={xmlMode:s,decodeEntities:i},c=cheerio.load(e,o),l=t.#At(c,a,n);return String(l.length)}catch(t){return logerr(`##tmp cheerio xLength err: ${t}`),"0"}}static#Nt(t,e){try{const{loc:r,xml:a,decode:s}=e,i={xmlMode:a,decodeEntities:s},n=cheerio.load(t,i);return n(r).remove(),n.html()}catch(e){return logerr(`##tmp cheerio xRemove err: ${e}`),t}}static#Rt(e,r){try{const{loc:a,idx:s,xml:i,decode:n}=r,o=parseInt(s),c={xmlMode:i,decodeEntities:n},l=cheerio.load(e,c);if(a){return t.#At(l,a,o).text()}return l.text()}catch(t){return logerr(`##tmp cheerio c_text err: ${t}`),""}}static#Ft(t,e){const{idx:r}=e,a=parseInt(r),s=t.at(a);return s||""}static#jt(t,e){const{openchar:r,startstr:a,regexp:s,flags:i,position:n}=e;if("string"!=typeof t||"string"!=typeof r||!["{","[","(","lt"].includes(r)||"string"!=typeof a||"number"!=typeof parseInt(n)||parseInt(n)<0)return"";const o="lt"===r?"<":r,c={"{":"}","[":"]","(":")","<":">"}[o];let l=1,p=-1;if(a){if(s){const e=new RegExp(a,i),r=t.match(e);if(!r||1!==r.length||void 0===r.index)return"";p=r.index}else p=t.indexOf(a);if(p<0)return""}else p=parseInt(n);const g=t.indexOf(o,p);if(g<0)return"";let h=g+1;for(;h<t.length;h++){let e=t[h];if(e===o)l++;else if(e===c&&(l--,0===l))break}const u=h<=t.length?h+1:-1;return u>g?t.substring(g,u):""}static#$t(t,e){return t||e?void 0:{}}static#Lt(e,r){try{const{method:a,sourceencoding:s,targetencoding:i}=r,n=t.#$t(r,!0),o=Buffer.from(e,s);let c=null;return"gzip"===a?c=zlib.gzipSync(o,n):"deflate"===a?c=zlib.deflateSync(o,n):"deflateraw"===a?c=zlib.deflateRawSync(o,n):"brotli"===a&&(c=zlib.brotliCompressSync(o,n)),c?t.#Mt(c,i):""}catch(t){return""}}static#qt(t,e){let r=t;const{str1:a,str2:s,str3:i,str4:n,str5:o}=e;return[a,s,i,n,o].forEach(t=>{"string"==typeof t&&(r=r.concat(t))}),r}static#Mt(t,e,r="0",a="0"){const s=r?Number(r):0,i=a?Number(a):0;return t instanceof Buffer?i>0?t.toString(e,s,i):s>0?t.toString(e,s):t.toString(e):""}static#Ut(e,r){const{sourceencoding:a,targetencoding:s,start:i,end:n}=r;try{if(a===s||!a||!s)return e;const r=Buffer.from(e,a);return t.#Mt(r,s,i,n)}catch(t){return""}}static#Jt(t,e){const{str1:r,val1:a,str2:s,val2:i,str3:n,val3:o,str4:c,val4:l,str5:p,val5:g,defaultval:h}=e;try{return t===r?a:t===s?i:t===n?o:t===c?l:t===p?g:h}catch(t){return""}}static#Ht(e,r){try{const{method:a,sourceencoding:s,targetencoding:i,start:n,end:o}=r,c=t.#$t(r,!1),l=Buffer.from(e,s);let p=Buffer.from(e,s);return"gunzip"===a?p=zlib.gunzipSync(l,c):"inflate"===a?p=zlib.inflateSync(l,c):"inflateraw"===a?p=zlib.inflateRawSync(l,c):"unzip"===a?p=zlib.unzipSync(l,c):"brotli"===a&&(p=zlib.brotliDecompressSync(l,c)),p?t.#Mt(p,i,n,o):""}catch(t){return""}}static#Bt(t,e){const{str:r}=e;return t.endsWith(r)?"1":"0"}static#Vt(t,e){const{str:r}=e;return t===r?"1":"0"}static#Wt(t,e){const{hashmethod:r}=e;return import_utils4.LsdUrl.getHashCode(t,r)}static#Kt(t,e){const{str:r}=e;if("string"!=typeof r)throw new Error("Invalid searchstr in _contains");return t.includes(r)?"1":"0"}static#Gt(t,e){const{str:r,position:a}=e;if("string"!=typeof r)throw new Error("Invalid str in _insert");return String(t.indexOf(r,parseInt(a)))}static#zt(t,e){const{str:r}=e;if("string"!=typeof r)throw new Error("Invalid str in _insert");return r+t}static#Yt(t,e){const{items:r}=e;if("string"!=typeof r)throw new Error("Invalid str in _isin");if(!r)return"0";return r.split(",").includes(t)?"1":"0"}static#Xt(t,e){const{split:r,kvsplit:a,keytrim:s,keynows:i,valuetrim:n,valuenows:o}=e;if(!r||!a)return"{}";try{let e={};const c=t.split(new RegExp(r)),l=new RegExp(a);for(const t of c){const r=t.split(l);if(2!==r.length)continue;let a=s?r[0].trim():r[0];i&&(a=a.split("").filter(t=>t.trim()).join(""));let c=n?r[1].trim():r[1];o&&(c=c.split("").filter(t=>t.trim()).join("")),a&&(e[a]=c)}return JSON.stringify(e)}catch(t){return"{}"}}static#Qt(t){return String(t.length)}static#L(t,e){const{pattern:r,flags:a,idx:s}=e,i=e.resulttype,n=new RegExp(r,a),o=t.match(n);if("boolean"===i)return o?"1":"0";if(!o)return"";if("all"===i)return o.join(",");if("array"===i)return JSON.stringify(o);if("idx"===i){const t=parseInt(s);return o[t]?String(o[t]):""}return"index"===i?"number"==typeof o.index?String(o.index):"":"length"===i?String(o.length):void(0,import_utils4.unreachable)(i)}static#Zt(t){return t.normalize()}static#te(t){return t&&"0"!==t&&"false"!==t.toLowerCase()?"0":"1"}static#ee(t,e){const{targetlen:r,padstr:a}=e,s=parseInt(r),i="string"==typeof a&&a.length>0?a:" ";return t.padEnd(s,i)}static#re(t,e){const{targetlen:r,padstr:a}=e,s=parseInt(r),i="string"==typeof a&&a.length>0?a:" ";return t.padStart(s,i)}static#ae(t){const e=(0,import_utils4.getJsonParseOfStr)(t);return"string"==typeof e?e:""}static#B(t,e){const{substr:r,newstr:a,regexp:s,flags:i}=e;try{if("string"!=typeof r)throw new Error("Invalid substr in _replace");if("string"!=typeof a)throw new Error("Invalid newstr in _replace");return s?t.replace(RegExp(r,i),a):t.replace(r,a)}catch(e){return t}}static#se(t,e){const{pattern:r}=e,a=new RegExp(r);return String(t.search(a))}static#ie(t,e){const{beginidx:r,len:a,endidx:s}=e,i=parseInt(r);let n="string"==typeof s&&s.length>0?parseInt(s):void 0;const o="string"==typeof a&&a.length>0?parseInt(a):void 0;return o&&o>0&&(n=i+o),t.slice(i,n)}static#ne(e,r){let a=e;try{const{method:s}=r;return"function"==typeof t.specialConvertFunObj[s]&&(a=t.specialConvertFunObj[s](e,r)),a}catch(t){return a}}static#oe(e,r){const{split:a,limit:s}=r,i=new RegExp(a),n=parseInt(s);let o=n>0?e.split(i,n):e.split(i);return t.#w(o),JSON.stringify(o)}static#ce(t,e){const{str:r}=e;return t.startsWith(r)?"1":"0"}static#le(t,e){const{substr:r,regexp:a,flags:s,position:i,last:n,include:o}=e,c=o,l=parseInt(i);if("string"!=typeof r)throw new Error("Invalid substr in _substrAfter");let p=-1,g=r;if(a){const e=new RegExp(r,s),a=t.match(e);if(!a||1!==a.length||void 0===a.index)return t;p=a.index,g=a[0]}else p=n?l?t.lastIndexOf(r,l):t.lastIndexOf(r):l?t.indexOf(r,l):t.indexOf(r);return p<0?t:String(c?t.substring(p):t.substring(p+g.length))}static#pe(t,e){const{substr:r,regexp:a,flags:s,position:i,last:n,include:o}=e,c=parseInt(i),l=o;if("string"!=typeof r)throw new Error("Invalid substr in substrBefore");let p=-1,g=r;if(a){const e=new RegExp(r,s),a=t.match(e);if(!a||1!==a.length||void 0===a.index)return t;p=a.index,g=a[0]}else p=n?c?t.lastIndexOf(r,c):t.lastIndexOf(r):c?t.indexOf(r,c):t.indexOf(r);return p<0?t:l?t.substring(0,p+g.length):t.substring(0,p)}static#ge(t){try{return String(BigInt(t))}catch(t){return""}}static#he(t){try{let e=t.replace(/true/g,"1");return e=e.replace(/false/g,"0"),e.search(/^[\s\d.+\-*/()<>=!|&:?]*$/)>-1&&-1===e.search(/=>/)?String(Number(Boolean((0,eval)(e)))):(loginfo(`Invalid logic expression ${t} in _toBool`),"0")}catch(t){return"0"}}static#ue(t){return t.toLowerCase()}static#de(t){let e=t;return e.search(/^[\s\d.+\-*/()<>=!|&:?]+$/)>-1&&-1===e.search(/=>/)&&e.trim().length>0?String(Number((0,eval)(e))):(loginfo(`Invalid arithmetic expression ${e} in _toNum`),"0")}static#fe(t){return t.toUpperCase()}static#me(t){return t.trim()}static#ye(t){return t.trimEnd()}static#Ce(t){return t.trimStart()}static#ve(t,e){try{const{method:r,encoding:a,percent:s}=e;if("URI"===r)return encodeURI(t);if("URIComponent"===r)return encodeURIComponent(t);if("iconv"===r){const e=iconv.encode(t,a).toString("hex").toUpperCase();if(!e||e.length%2!=0)return logerr("Invalid str length in _urlencode"),"";if(s){const t=e.match(/../g);return t?t.map(t=>`%${t}`).join(""):""}return e}return logerr(`Invalid method ${r} in _urlencode`),""}catch(t){return logerr(t),""}}static#be(t,e){try{const{method:r,encoding:a,percent:s}=e;if("URI"===r)return decodeURI(t);if("URIComponent"===r)return decodeURIComponent(t);if("iconv"===r){const e=s?/.../g:/../g,r=t.match(e);if(!r)return"";const i=r.map(t=>parseInt(t.slice(1),16));return iconv.decode(Buffer.from(i),a)}return logerr(`Invalid method ${r} in _urlencode`),""}catch(t){return logerr(t),""}}static#we(t,e){const{param1:r,param2:a,param3:s}=e;if("string"!=typeof r)throw new Error("Invalid params in _urldel");let i="";try{const e=new URL(t);if(!e||!e.searchParams||!e.searchParams.delete)return"";r&&e.searchParams.delete(r),a&&e.searchParams.delete(a),s&&e.searchParams.delete(s),i=e.href}catch(t){i=""}return i||""}static#Se(t,e){const{attrorpath:r,hashmethod:a,param:s,hostnameparts:i,params:n,title:o,extname:c,validextnames:l}=e;if("string"!=typeof r)throw new Error("Invalid attr in _urlget");const p=i?Number(i):0;let g="";return g=["href","origin","protocol","username","password","host","search","hash","hostname","port","hrefwithoutsearch","param"].includes(r)?import_utils4.LsdUrl.getUrlAttribute(t,r,p,s):import_utils4.LsdUrl.getFilePathFromUrl(t,r,a,p,n,c,l,o),"string"==typeof g?g:""}static#ke(t,e,r,a){if(!t||!t.searchParams||!t.searchParams.get||"string"!=typeof e||"string"!=typeof r)return!1;if(!e)return!0;if(!a){if(null!==t.searchParams.get(e))return!0}return t.searchParams.set(e,r),!0}static#_e(e,r){const{param1:a,val1:s,param2:i,val2:n,param3:o,val3:c,replace:l}=r,p=l;if("string"!=typeof a)throw new Error("Invalid params in _urlset");let g="";try{const r=new URL(e);t.#ke(r,a,s,p),t.#ke(r,i,n,p),t.#ke(r,o,c,p),g=r.href}catch(t){g=""}return g||""}static async#b(t,e,r){const{name:a,arg1:s,arg2:i,arg3:n,arg4:o,arg5:c}=e;try{const e={origStr:t,arg1:s,arg2:i,arg3:n,arg4:o,arg5:c};return await LsdScript.execFunScript(e,a,r)}catch(t){return""}}static#v={a_at:t.#x,a_concat:t.#E,a_every:t.#A,a_filter:t.#O,a_find:t.#I,a_findindex:t.#T,a_includes:t.#D,a_indexof:t.#P,a_join:t.#N,a_keysvaluestoobj:t.#R,a_length:t.#F,a_mapattr:t.#j,a_match:t.#$,a_max:t.#M,a_min:t.#q,a_pop:t.#U,a_push:t.#J,a_replace:t.#H,a_setcomplement:t.#V,a_setdifference:t.#W,a_setintersection:t.#K,a_setunion:t.#G,a_shift:t.#z,a_shuffle:t.#Y,a_slice:t.#X,a_sort:t.#Z,a_toobj:t.#tt,a_uniq:t.#et,a_unshift:t.#rt,n_ceil:t.#at,n_dateformat:t.#st,n_eq:t.#it,n_floor:t.#nt,n_ge:t.#ot,n_gt:t.#ct,n_isnan:t.#lt,n_le:t.#pt,n_lt:t.#gt,n_max:t.#ht,n_min:t.#ut,n_parsefloat:t.#dt,n_parseint:t.#ft,n_round:t.#mt,n_tofixed:t.#yt,o_assign:t.#Ct,o_attr:t.#vt,o_entries:t.#bt,o_findstrinobj:t.#wt,o_keys:t.#St,o_match:t.#kt,o_replace:t.#_t,o_sort:t.#xt,o_values:t.#Et,x_attr:t.#Ot,x_data:t.#It,x_empty:t.#Tt,x_html:t.#Dt,x_length:t.#Pt,x_remove:t.#Nt,x_text:t.#Rt,at:t.#Ft,closingsubstr:t.#jt,compress:t.#Lt,concat:t.#qt,convertencoding:t.#Ut,decode:t.#Jt,decompress:t.#Ht,endswith:t.#Bt,eq:t.#Vt,hashcode:t.#Wt,includes:t.#Kt,indexof:t.#Gt,insert:t.#zt,isin:t.#Yt,itemstoobj:t.#Xt,length:t.#Qt,match:t.#L,normalize:t.#Zt,not:t.#te,padend:t.#ee,padstart:t.#re,parsestr:t.#ae,replace:t.#B,search:t.#se,slice:t.#ie,specialconvert:t.#ne,split:t.#oe,startswith:t.#ce,substrafter:t.#le,substrbefore:t.#pe,tobigint:t.#ge,tobool:t.#he,tolowercase:t.#ue,tonum:t.#de,touppercase:t.#fe,trim:t.#me,trimend:t.#ye,trimstart:t.#Ce,urldecode:t.#be,urldelparams:t.#we,urlencode:t.#ve,urlget:t.#Se,urlsetparams:t.#_e,script:t.#b}};function getTransformExpStrSync(t,e,r=""){return LsdString.transformStrSync(t,e,r)}async function getTransformExpStr(t,e,r="",a={}){return await LsdString.transformStr(t,e,r,a)}var fs2=__toESM(require("fs"),1),path2=__toESM(require("path"),1),import_header_generator=require("header-generator"),uuid2=__toESM(require("uuid"),1),import_utils6=require("@letsscrapedata/utils"),import_hpagent=require("hpagent"),download=__toESM(require("download"),1);async function lsdDownload(t,e="",r=null){const a={};if(e){const t=new import_hpagent.HttpsProxyAgent({keepAlive:!0,keepAliveMsecs:1e3,maxSockets:256,maxFreeSockets:256,scheduling:"lifo",proxy:e});a.agent={https:t}}let s;return r&&(a.headers=r),s=e||r?await download.default(t,void 0,a):await download.default(t),s}var import_utils5=require("@letsscrapedata/utils");function isDataTableName(t){const e=!!t.match(/^dat_\d{16}$/);return!e&&t.startsWith("dat_00")&&t.length<30&&logwarn(`##log chedk the tabname ${t} is correct`),e}function getSubkeysValueOfDataRecord(t,e){if(0===e.length)return t;const r=t[e[0]];if(1===e.length)return r;let a=(0,import_utils5.getJsonParseOfStr)(r);return a&&"object"==typeof a?(a=(0,import_utils5.getMemberOfObject)(a,e.slice(1)),a):void 0}function getSubkeysStringOfDataRecord(t,e){const r=getSubkeysValueOfDataRecord(t,e);return(0,import_utils5.getStringOfObj)(r)}function getSubkeysStrOfObject(t,e){const r=e.length>0?(0,import_utils5.getMemberOfObject)(t,e):t;return(0,import_utils5.getStringOfObj)(r)}var GetPara=class t{static getOtherFunObj={};static setGetOtherFunObj(e){return t.getOtherFunObj=e,!0}static noNeedToReturnContent="";static async getPara(e,r){if(!e||!e.type||!r)return"";const a=e.type;let s="";switch(a){case"addedtaskparas":"function"==typeof t.getOtherFunObj.getAddedTaskParasFun&&(s=await t.getOtherFunObj.getAddedTaskParasFun(e));break;case"cookie":s=t.getCookie(e,r);break;case"execedtaskparas":"function"==typeof t.getOtherFunObj.getExecedTaskParasFun&&(s=await t.getOtherFunObj.getExecedTaskParasFun(e));break;case"file":s=await t.getFile(e,r);break;case"httpheaders":s=await t.getHttpHeaders(e,r);break;case"localstorage":s=t.getLocalstorage(e,r);break;case"queuedcntwithparas":"function"==typeof t.getOtherFunObj.getQueuedCntWithParasCfgFun&&(s=await t.getOtherFunObj.getQueuedCntWithParasCfgFun(e));break;case"queuedtaskparas":"function"==typeof t.getOtherFunObj.getQueuedTaskParasFun&&(s=await t.getOtherFunObj.getQueuedTaskParasFun(e));break;case"random":s=t.getRandom(e);break;case"sysparas":s="please use ${sysParas.paraname}!!!";break;case"tabname":s=await t.getTabname(e,r);break;default:(0,import_utils6.unreachable)(a)}return s}static async getParaInElement(e,r,a){if(!e||!e.type||!a)return"";const s=e.type,i=a.paras;let n="";if("screenshot"===s)n=await t.getScreenshot(r,e,i);else(0,import_utils6.unreachable)(s);return n}static async getParaInPage(e,r,a){if(!e||!e.type||!a)return"";const s=e.type,i=a.paras;let n="";switch(s){case"content":n=await t.getContent(r);break;case"evaluate":n=await t.getEvaluate(r,e);break;case"mhtml":n=await t.getMhtml(r,e,i);break;case"pdf":n=await t.getPdf(r,e,i);break;case"screenshot":n=await t.getScreenshot(r,e,i);break;case"title":n=await t.getTitle(r,e);break;case"window":n=await t.getWindow(r,e);break;default:(0,import_utils6.unreachable)(s)}return n}static async getContent(t){try{if(!t)return"";return await t.content()}catch(t){return""}}static getCookie(e,r){const{domain:a,name:s,attr:i,source:n}=e,o="orig"===n?r.origStateData:r.newStateData;if(Array.isArray(o?.cookies)){if(0===o.cookies.length)return"";if(a&&t.canAccessSeureData(r.domainNames,`https://${a}`)){const t=o.cookies.find(t=>t.domain===a&&t.name===s);return t?"name"===i?t.name:String(t.expires):""}return""}return""}static getLocalstorage(e,r){const{origin:a,name:s,source:i,parsestr:n}=e,o="orig"===i?r.origStateData:r.newStateData;if(Array.isArray(o?.origins)){if(0===o.origins.length)return"";if(a&&t.canAccessSeureData(r.domainNames,a)){const t=o.origins.find(t=>t.origin===a);if(t){const e=t.localStorage.find(t=>t.name===s);if(e){const t=e.value;if(n){const e=(0,import_utils6.getJsonParseOfStr)(t);return"string"==typeof e?e:""}return t}return""}return""}return""}return""}static async getEvaluate(t,e){const{script:r,data:a,isolated:s,secure:i}=e;let n;try{if(!i&&(r.includes("cookie")||r.includes("localStorage")))throw new Error("Cannot access cookies and localStorge in getEvaluate");if(a){const e=(0,import_utils6.getJsonParseOfStr)(a);if(!Array.isArray(e))return"";const i=["a","b","c","d","e","f","g"].slice(0,e.length),o=new Function(`[${i.join(", ")}]`,r);n=await t.evaluate(o,e,s)}else n=await t.evaluate(r,void 0,s);return(0,import_utils6.getStringOfObj)(n)}catch(t){return loginfo(t),""}}static async getFile(e,r){const a=r.paras;try{const{url:s,pathtype:i,hashmethod:n,hostnameparts:o,params:c,extname:l,validextnames:p,basedir:g,setvar:h,pathvarname:u,proxy:d,headers:f,referer:m}=e;let y=e.path.trim();if(y)y=path2.join(y);else{let t=import_utils6.LsdUrl.getFilePathFromUrl(s,i,n,Number(o),c,l,p);y=path2.join(g,t)}if(y){const t=path2.dirname(y);if(!await(0,import_utils6.fsCheckOrCreateSubdir)(appConfig.cfg.baseFileDir,t))throw new Error("failed to checkOrCreateFileDir");y=path2.join(appConfig.cfg.baseFileDir,y)}const C=d&&r.proxyUrl?r.proxyUrl:"";let v=null;(f||m)&&(v=f?JSON.parse(f):{},m&&(v.referer=m));const b=await lsdDownload(s,C,v);return fs2.writeFileSync(y,b),u&&a&&!appConfig.RESERVED_PARA_NAMES.includes(u)&&(a[u]=y),h?b.toString("utf8"):t.noNeedToReturnContent}catch(t){throw new Error("error in get_file")}}static _genHeaderMethod={genLatestAndroid:import_header_generator.PRESETS.MODERN_ANDROID,genLatestDesktop:import_header_generator.PRESETS.MODERN_DESKTOP,genLatestLinux:import_header_generator.PRESETS.MODERN_LINUX,genLatestLinuxChrome:import_header_generator.PRESETS.MODERN_LINUX_CHROME,genLatestLinuxFirefox:import_header_generator.PRESETS.MODERN_LINUX_FIREFOX,genLatestMacos:import_header_generator.PRESETS.MODERN_MACOS,genLatestMacosChrome:import_header_generator.PRESETS.MODERN_MACOS_CHROME,genLatestMacosFirefox:import_header_generator.PRESETS.MODERN_MACOS_FIREFOX,genLatestMobile:import_header_generator.PRESETS.MODERN_MOBILE,genLatestWindows:import_header_generator.PRESETS.MODERN_WINDOWS,genLatestWindowsChrome:import_header_generator.PRESETS.MODERN_WINDOWS_CHROME,genLatestWindowsFirefox:import_header_generator.PRESETS.MODERN_WINDOWS_FIREFOX};static canAccessSeureData(t,e){try{if(0===t.length)return!0;const{hostname:r}=new URL(e);return!!t.find(t=>r.endsWith(`.${t}`)||r===t)}catch(t){return!1}}static hasSameOrigin(t,e,r=""){try{const a=new URL(e),s=new URL(t);return a.origin===s.origin||!!["origStateHeaders","updatedStateHeaders"].includes(r)&&a.hostname.endsWith(s.hostname)}catch(t){return!1}}static async getHttpHeaders(e,r){const{headermethod:a,origheaders:s}=e,{genHeaderOptions:i,newHttpHeaders:n}=r,o=r.interceptionData;let c={},l=!1,p="";try{if(t._genHeaderMethod[a]){l=!0;c=new import_header_generator.HeaderGenerator(t._genHeaderMethod[a]).getHeaders()}else if("genNewByHttpOptions"===a){l=!0;c=new import_header_generator.HeaderGenerator(i).getHeaders()}else if("origheaders"===a)l=!0,s&&(c=JSON.parse(s));else{if(!o)throw new Error("logic error: no interceptionData");"cachedRequestHeaders"===a?(c=Object.assign({},o.cachedRequestHeaders),p=o.cachedRequestUrl,o.updatedRequestUrl=p,o.updatedRequestHeaders=c):"cachedResponseHeaders"===a?(c=Object.assign({},o.cachedResponseHeaders),p=o.cachedResponseUrl,o.updatedResponseUrl=p,o.updatedResponseHeaders=c):"origStateHeaders"===a?(c=Object.assign({},o.origStateHeaders),p=o.origStateUrl,o.updatedStateUrl=p,o.updatedStateHeaders=c):"updatedRequestHeaders"===a?(p=o.updatedRequestUrl,c=o.updatedRequestHeaders):"updatedResponseHeaders"===a?(p=o.updatedResponseUrl,c=o.updatedResponseHeaders):"updatedStateHeaders"===a?(p=o.updatedStateUrl,c=o.updatedStateHeaders):logerr(`##get invalid httpMethod ${a} in getHttpHeaders`)}if(n)for(const e of Object.values(n)){const{name:r,source:s,value:i,deleteFlag:n}=e;if(n)delete c[r];else if("value"===s)c[r]=i;else if(!l&&s!==a){let e={},a="";if("cachedRequestHeaders"===s)a=o.cachedRequestUrl,e=o.cachedRequestHeaders;else if("cachedResponseHeaders"===s)a=o.cachedResponseUrl,e=o.cachedResponseHeaders;else{if("origStateHeaders"!==s){logerr(`Invalid soure ${s} in httpheader`);continue}a=o.origStateUrl,e=o.origStateHeaders}"string"==typeof e[r]&&t.hasSameOrigin(a,p,s)?c[r]=e[r]:i&&(c[r]=i)}}return l?JSON.stringify(c):""}catch(t){return logerr(t),""}}static async getMhtml(t,e,r){try{if(!t)return"";let a=e.path.trim();const{pathtype:s,hashmethod:i,hostnameparts:n,basedir:o,pathvarname:c}=e;if(a)a=path2.join(a);else{const e=t.url();let r=await t.title();a=import_utils6.LsdUrl.getFilePathFromUrl(e,s,i,Number(n),"","mhtml","",r),a=path2.join(o,a)}const{data:l}=await t.sendCDPMessage("Page.captureSnapshot",{format:"mhtml"});if(a){const t=path2.dirname(a);if(!await(0,import_utils6.fsCheckOrCreateSubdir)(appConfig.cfg.baseFileDir,t))throw new Error("failed to checkOrCreateMhtmlDir");const e=path2.join(appConfig.cfg.baseFileDir,a);fs2.writeFileSync(e,l),c&&r&&!appConfig.RESERVED_PARA_NAMES.includes(c)&&(r[c]=a)}return String(l)}catch(t){throw logdbg(t),new Error("error in get_mhtml")}}static _getScreenSize(t){return String(Number(t))===t?`${t}px`:t}static async getPdf(e,r,a){try{if(!e)return"";const{pathtype:s,hashmethod:i,hostnameparts:n,basedir:o,scale:c,displayheaderfooter:l,headertemplate:p,footertemplate:g,printbackground:h,landscape:u,pageranges:d,format:f,width:m,height:y,top:C,right:v,bottom:b,left:w,onepage:S,hmargin:k,pathvarname:_,setvar:x}=r;let E={},A=r.path.trim();if(A)A=path2.join(A);else{const t=e.url();let r=await e.title();A=import_utils6.LsdUrl.getFilePathFromUrl(t,s,i,Number(n),"","pdf","",r),A=path2.join(o,A)}if(A){const t=path2.dirname(A);if(!await(0,import_utils6.fsCheckOrCreateSubdir)(appConfig.cfg.baseFileDir,t))throw new Error("failed to checkOrCreatePdfDir");A=path2.join(appConfig.cfg.baseFileDir,A),E.path=A}if("1"!==c&&(E.scale=Number(c)),l&&(E.displayHeaderFooter=l),p&&(E.headerTemplate=p),g&&(E.footerTemplate=g),h&&(E.printBackground=h),u&&(E.landscape=u),d&&(E.pageRanges=d),C||v||b||w||l){const e={};C?e.top=t._getScreenSize(C):l&&!p&&(e.top="60px"),b?e.bottom=t._getScreenSize(b):l&&!g&&(e.bottom="60px"),v&&(e.right=t._getScreenSize(v)),w&&(e.left=t._getScreenSize(w)),E.margin=e}if(S){const t=await e.pageWidth();let r=await e.pageHeight();k&&(r+=Number(k)),E.width=`${t}px`,E.height=`${r}px`,logdbg(`--------- pageHeight:${r}px`)}else m||y?(m&&(E.width=t._getScreenSize(m)),y&&(E.height=t._getScreenSize(y))):"Letter"!==f&&(E.format=f);const O=await e.pdf(E);return _&&a&&!appConfig.RESERVED_PARA_NAMES.includes(_)&&(a[_]=A),x?O.toString("base64"):t.noNeedToReturnContent}catch(t){throw logdbg(t),new Error("error in get_pdf")}}static getRandom(t){try{const{min:e,max:r}=t,a=parseInt(e),s=parseInt(r);if(a>=s)return"0";const i=Math.round(Math.random()*(s-a))+a;return String(i)}catch(t){return"0"}}static async getScreenshot(e,r,a){let s={};try{if(!e)return"";let{basedir:i,path:n,extname:o,quality:c,fullpage:l,x:p,y:g,width:h,height:u,omitbackground:d,pathvarname:f,setvar:m}=r;if(n=n.trim(),n)n=path2.join(i,n);else if(e.title){const t=await e.title(),r=`${import_utils6.LsdUrl.convertToValidPathname(t)}.${o}`;n=path2.join(i,r)}else{const t=`${uuid2.v4()}.${o}`;n=path2.join(i,t)}if(n){const t=path2.dirname(n);if(!await(0,import_utils6.fsCheckOrCreateSubdir)(appConfig.cfg.baseFileDir,t))throw new Error("failed to checkOrCreatePdfDir");n=path2.join(appConfig.cfg.baseFileDir,n),s.path=n}"jpeg"===o&&(s.type="jpeg");const y=parseInt(c);"jpeg"===o&&y>=0&&(s.quality=y),l&&(s.fullPage=l);const C=parseInt(h),v=parseInt(u);if(C>0&&v>0){const t={x:parseInt(p),y:parseInt(g),width:C,height:v};s.clip=t}d&&(s.omitBackground=d);const b=await e.screenshot(s);return f&&a&&!appConfig.RESERVED_PARA_NAMES.includes(f)&&(a[f]=n),m&&b?b.toString("base64"):t.noNeedToReturnContent}catch(t){throw new Error("error in get_screenshot")}}static async getTabname(t,e){try{let r="";const{tabname:a,requrl:s,length:i,idx:n,subkeys:o}=t;let c=e?.execData?.[a];if(!Array.isArray(c)||c.length<=0)return"";if(s){const t=new RegExp(s);c=c.filter(e=>"string"==typeof e.requestUrl&&e.requestUrl.match(t))}if(i)return String(c.length);let l=o?o.split("."):[];if("*"!==n){let t=parseInt(n);t<0&&(t=c.length+t);let e=c[t];if(!e)return"";if(0===l.length)return JSON.stringify(e);r=getSubkeysStringOfDataRecord(e,l)}else{const t=0===l.length?c:c.map(t=>getSubkeysValueOfDataRecord(t,l));r=JSON.stringify(t)}return r}catch(t){return""}}static async getTitle(t,e){try{if(!t)return"";const{aspath:r}=e,a=await t.title();return r?import_utils6.LsdUrl.convertToValidPathname(a):a}catch(t){return""}}static async getWindow(t,e){try{const{key1:r,key2:a,key3:s,key4:i,key5:n,key6:o,keys:c,length:l}=e;if(!t||!r)return"";const p=[r,a,s,i,n,o];let g=await t.windowMember(p);if(!c&&!l)return g;const h=JSON.parse(g);return h&&"object"==typeof h?c?Array.from(Object.keys(h)).join(","):l&&Array.isArray(h)?String(h.length):"":""}catch(t){return logwarn(t),""}}},path3=__toESM(require("path"),1),fsp=__toESM(require("fs/promises"),1),import_utils7=require("@letsscrapedata/utils");async function responseCacheCb(t,e,r){if(e&&t)try{const{execData:a,contentType:s,tabname:i,requestHeadersFlag:n,responseHeadersFlag:o,cacheHeadersFlag:c,interceptionData:l,debugFlag:p=!1}=e,{pageUrl:g,cookies:h}=r,u=t.request(),d=u.method(),f=u.url();let m=u.postData();const y=m||"",C=u.resourceType(),v="text"===s?await t.text():"";let b=null;i&&"none"!==i&&(a[i]||(a[i]=[]),b={pageUrl:g,requestMethod:d,requestUrl:f,requestData:y,resourceType:C,responseData:v,size:String(v.length)},a[i].push(b));const w=b&&(c||p);if(n||w){const t=Object.assign({},u.allHeaders?await u.allHeaders():u.headers());!t.cookie&&h&&(t.cookie=h),w&&b&&(b.requestHeaders=t?JSON.stringify(t):""),n&&(l.cachedRequestUrl=f,l.cachedRequestHeaders=t,l.cachedRequestData=y),logdbg("requestUrl: ",f),logdbg("requestHeaders: ",t)}if(o){const e=Object.assign({},t.allHeaders?await t.allHeaders():t.headers());l.cachedResponseUrl=f,l.cachedResponseHeaders=e,logdbg("responseHeaders: ",e)}}catch(t){logerr(t)}}var isHttpResponse=t=>void 0!==t.buffer;async function responseSaveCb(t,e,r){if(!e||!t)return;const a=t.request(),s=a.url(),{execData:i,tabname:n,pathType:o,hashMethod:c,baseDir:l,hostnameParts:p,params:g,extname:h,validExtnames:u,encoding:d}=e,{pageUrl:f}=r;let m=import_utils7.LsdUrl.getFilePathFromUrl(s,o,c,p,g,h,u);s.startsWith("http")||logdbg("@@response: ",t),logdbg("@@reqUrl: ",s.slice(0,100)),logdbg("@@filename: ",m);let y=path3.join(l,m);if(!y)return;const C=path3.dirname(y);if(!await(0,import_utils7.fsCheckOrCreateSubdir)(appConfig.cfg.baseFileDir,C))throw new Error("failed to checkOrCreateReponseDir");const v=path3.join(appConfig.cfg.baseFileDir,y),b=isHttpResponse(t)?await t.buffer():await t.body(),w=a.resourceType();let S=d;if(d||(S=["document","stylesheet","script","xhr","fetch","other"].includes(w)?"utf8":"binary"),await fsp.writeFile(v,b,S),n&&"none"!==n&&i){const t=a.method();let e=a.postData();const r={pageUrl:f,requestMethod:t,requestUrl:s,requestData:e||"",resourceType:w,path:y,size:String(b.length)};i[n]?i[n].push(r):i[n]=[r]}}var import_node_fs=__toESM(require("fs"),1),import_utils9=require("@letsscrapedata/utils"),path4=__toESM(require("path"),1),fs3=__toESM(require("fs"),1),import_utils8=require("@letsscrapedata/utils"),solvers=[],addonFlag=!1;async function getScriptFromServer(t){try{let e="",r=`${appConfig.cfg.urlPrefix}/script?name=${t}`;const a=await fetch(r);if(200!==a.status)return"";const s=await a.json();return s&&0===s.code&&s.data&&"string"==typeof s.data?(e=Buffer.from(s.data,"base64").toString("utf8"),e):""}catch(t){return loginfo(t),""}}async function loadScriptIfNeeded(){if(addonFlag)return!0;addonFlag=!0;try{const t=appConfig.cfg.lsdLaunchOptions.addons,e=Array.isArray(t)&&t.length>0?t[0]:"",r=appConfig.cfg.captcha.captchas;if(!e||!Array.isArray(r)||0===r.length)return!0;let a="";if(a=path4.join(e,"manifest.json"),!(0,import_utils8.isFileSync)(a)){let t="ewogICJtYW5pZmVzdF92ZXJzaW9uIjogMywKICAibmFtZSI6ICJjYW1vdWZveCBhZGRvbiIsCiAgInZlcnNpb24iOiAiMS4wIiwKICAicGVybWlzc2lvbnMiOiBbCiAgICAic2NyaXB0aW5nIgogIF0sCiAgIndlYl9hY2Nlc3NpYmxlX3Jlc291cmNlcyI6IFsKICAgIHsKICAgICAgInJlc291cmNlcyI6IFsKICAgICAgICAic2NyaXB0cy8qIgogICAgICBdLAogICAgICAibWF0Y2hlcyI6IFsKICAgICAgICAiPGFsbF91cmxzPiIKICAgICAgXQogICAgfQogIF0sCiAgImNvbnRlbnRfc2NyaXB0cyI6IFsKICAgIHsKICAgICAgIm1hdGNoZXMiOiBbCiAgICAgICAgIjxhbGxfdXJscz4iCiAgICAgIF0sCiAgICAgICJqcyI6IFsKICAgICAgICAiaW5qZWN0LmpzIgogICAgICBdLAogICAgICAicnVuX2F0IjogImRvY3VtZW50X3N0YXJ0IgogICAgfQogIF0KfQ==";t=Buffer.from(t,"base64").toString("utf8"),fs3.writeFileSync(a,t,"utf8")}if(a=path4.join(e,"inject.js"),!(0,import_utils8.isFileSync)(a)){let t="YXN5bmMgZnVuY3Rpb24gaW5qZWN0U2NyaXB0cygpIHsKICB0cnkgewogICAgZm9yIChjb25zdCBuYW1lIG9mIG5hbWVzKSB7CiAgICAgIHRyeSB7CiAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goY2hyb21lLnJ1bnRpbWUuZ2V0VVJMKGBzY3JpcHRzLyR7bmFtZX0uanNgKSk7CiAgICAgICAgY29uc3QgY29udGVudCA9IGF3YWl0IHJlc3BvbnNlLnRleHQoKTsKCiAgICAgICAgaWYgKGNvbnRlbnQpIHsKICAgICAgICAgIGNvbnN0IHNjcmlwdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpOwogICAgICAgICAgc2NyaXB0LnRleHRDb250ZW50ID0gY29udGVudDsKICAgICAgICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5hcHBlbmRDaGlsZChzY3JpcHQpOwogICAgICAgICAgc2NyaXB0LnJlbW92ZSgpOwogICAgICAgIH0KICAgICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgICAgY29uc29sZS5lcnJvcihgRmFpbGVkIHRvIGluamVjdCBzY3JpcHQgJHtuYW1lfTpgLCBlcnIpOwogICAgICB9CiAgICB9CiAgfSBjYXRjaCAoZXJyKSB7CiAgICBjb25zb2xlLmVycm9yKGVycik7CiAgfQp9CgppbmplY3RTY3JpcHRzKCk7Cg==";t=Buffer.from(t,"base64").toString("utf8");t=`${`const names = ${JSON.stringify(r)};`}\n\n${t}`,fs3.writeFileSync(a,t,"utf8")}if(a=path4.join(e,"scripts"),!await(0,import_utils8.fsCheckOrCreateDir)(a,!0,!0))return logerr("Failed to create directory"),!1;for(const t of r){if(a=path4.join(e,"scripts",`${t}.js`),(0,import_utils8.isFileSync)(a))continue;const r=await getScriptFromServer(t);r?fs3.writeFileSync(a,r,"utf8"):loginfo(`Failed to get script of ${t}`)}return!0}catch(t){return loginfo(t),!1}}async function addCapatchaProvider(t){return!(!t||"object"!=typeof t||"string"!=typeof t?.name())&&(solvers.push(t),await loadScriptIfNeeded(),!0)}function getSolver(t){if(0===solvers.length)return null;for(const e of solvers)if(e.canSolveCaptcha(t))return e;return null}async function executeTask(t){const e=getSolver(t.type);if(!e)throw new Error(`##captcha no cpatha provider to solve ${t.type}`);let r;if(!e[t.type])throw new Error("##captcha logic error");return r=await e[t.type](t),r}var processors=new Map,captchaTypeAttr="data-captcha-type",widgetIdAttr="data-widget-id",captchaOptions={rootTag:"head",parentTag:"capwgts",captchaTag:"capwgt",solutionAttr:"value"};function checkCaptchaType(t,e){if(t.captchaType!==e)throw new Error(`##captcha invalid captchaType ${t.captchaType}`);return!0}function isValidStringAttr(t){return"string"==typeof t&&!!t&&!["null","undefined"].includes(t)}async function getCaptchasOnce(t,e,r=captchaOptions){let a=[];if(e){const r={opType:"get"},s=await t.evaluate(async([t,e])=>{const r=window[t];return"function"==typeof r?r(e):""},[e,r]);return Array.isArray(s)?(a=s,a):(logerr(`##captcha no function window.${e}`),[])}{const e=`${r.rootTag} > ${r.parentTag} > ${r.captchaTag}`,s=await t.findElements(e);if(0===s.length)return a;for(const t of s){const e=await t.dataset();a.push(e)}return a}}async function getWidgets(t,e,r,a=captchaOptions){let s=await getCaptchasOnce(e,r,a);if(s.length>0)return s;const{needToRefresh:i,maxRefreshTimes:n}=t;if(i&&n)for(let t=0;t<n;t++){if(!await i(e))break;if(await e.reload(),await(0,import_utils9.sleep)(5e3),s=await getCaptchasOnce(e,r,a),s.length>0)return s}else if(await(0,import_utils9.sleep)(5e3),s=await getCaptchasOnce(e,r,a),s.length>0)return s;return[]}async function sendSolution(t,e,r,a,s=captchaOptions){const{captchaType:i,widgetId:n}=r;if(e){const r={opType:"execute",captchaType:i,widgetId:n,solution:a},s=await t.evaluate(async([t,e])=>{const r=window[t];return"function"==typeof r?r(e):""},[e,r]);return"string"==typeof s?s:(logerr(`##captcha no function window.${e}`),"failed:noMsgFunc")}{const e=`${s.rootTag} > ${s.parentTag} > ${s.captchaTag}[${captchaTypeAttr}="${i}"][${widgetIdAttr}="${n}"]`,r=await t.findElement(e);if(r){return await r.setAttribute(s.solutionAttr,a)?"ok":"failed"}return"failed:noElement"}}var amazonGetTask=function(t){checkCaptchaType(t,"amazon");const{captchaType:e,pageurl:r,sitekey:a,iv:s,context:i,challengeScript:n,captchaScript:o}=t;return{type:e,websiteURL:r,websiteKey:a,iv:s,context:i,challengeScript:n,captchaScript:o}},amazonExecutionSolution=async function(t,e,r,a){const{existing_token:s}=a;return await sendSolution(t,e,r,s)},amazonProceesor={type:"amazon",findMethods:["intercept","hunt"],scriptName:"amazon",getTask:amazonGetTask,executeSolution:amazonExecutionSolution};processors.set("amazon",amazonProceesor);var geetestGetTask=function(t){checkCaptchaType(t,"geetest");const{captchaType:e,version:r,url:a,gt:s,challenge:i,apiServer:n,captchaId:o}=t;if(!r||!["v3","v4"].includes(r))throw new Error(`## captcha invalid version ${t.version} in ${t.captchaType}`);if(!a)throw new Error(`## captcha invalid url in ${t.captchaType}`);if(!("v3"!==r||s&&i))throw new Error(`## captcha invalid gt or challenge in ${t.captchaType} v3`);if("v4"===r&&!o)throw new Error(`## captcha invalid captchaId in ${t.captchaType} v4`);const c={type:e,version:"v4"===r?4:3,websiteURL:a};return isValidStringAttr(s)&&(c.gt=s),isValidStringAttr(i)&&(c.challenge=i),isValidStringAttr(n)&&(c.geetestApiServerSubdomain=n),isValidStringAttr(o)&&(c.captchaId=o),c},geetestExecutionSolution=async function(t,e,r,a){checkCaptchaType(r,"geetest");let s="";if("v3"===r.version){const{challenge:t,validate:e,seccode:i}=a,n=i||`${e}|jordan`;if("string"!=typeof t||!t)throw new Error(`##captcha invalid challenge in ${r.captchaType}`);if("string"!=typeof e||!e)throw new Error(`##captcha invalid validate in ${r.captchaType}`);if("string"!=typeof i||!i)throw new Error(`##captcha invalid seccode in ${r.captchaType}`);s=(0,import_utils9.encodeToBase64)({geetest_challenge:t,geetest_validate:e,geetest_seccode:n})}else{if("v4"!==r.version)return"failed:invalidVersion";{const{captcha_id:t,lot_number:e,pass_token:i,gen_time:n,captcha_output:o}=a;if("string"!=typeof t||!t)throw new Error(`##captcha invalid captcha_id in ${r.captchaType}`);if("string"!=typeof e||!e)throw new Error(`##captcha invalid lot_number in ${r.captchaType}`);if("string"!=typeof i||!i)throw new Error(`##captcha invalid pass_token in ${r.captchaType}`);if("string"!=typeof n||!n)throw new Error(`##captcha invalid gen_time in ${r.captchaType}`);if("string"!=typeof o||!o)throw new Error(`##captcha invalid captcha_output in ${r.captchaType}`);s=(0,import_utils9.encodeToBase64)({captcha_id:t,lot_number:e,pass_token:i,gen_time:n,captcha_output:o})}}return await sendSolution(t,e,r,s)},geetestProceesor={type:"geetest",findMethods:["intercept"],scriptName:"geetest",getTask:geetestGetTask,executeSolution:geetestExecutionSolution};processors.set("geetest",geetestProceesor);var recaptchaGetTask=function(t,e){checkCaptchaType(t,"recaptcha");const{captchaType:r,version:a,url:s,sitekey:i,action:n,s:o,enterprise:c,invisible:l,userAgent:p,cookies:g,apiDomain:h}=t;if(!a||!["v2","v3"].includes(a))throw new Error(`## captcha invalid version ${t.version} in ${t.captchaType}`);if(!s||!i)throw new Error(`## captcha invalid url or sitekey in ${t.captchaType}`);let u=.3;"number"==typeof e?.minScore&&e.minScore>0&&e.minScore<1&&(u=e.minScore);const d={type:r,version:"v3"===a?3:2,websiteURL:s,websiteKey:i,isEnterprise:"true"===c,isInvisible:"true"===l,minScore:u};return isValidStringAttr(n)&&(d.action=n),isValidStringAttr(o)&&(d.s=o),isValidStringAttr(p)&&(d.userAgent=p),isValidStringAttr(g)&&(d.cookies=g),isValidStringAttr(h)&&(d.apiDomain=h),d},recaptchaExecutionSolution=async function(t,e,r,a){checkCaptchaType(r,"recaptcha");const{gRecaptchaResponse:s}=a;if("string"!=typeof s||!s)throw new Error(`##captcha invalid gRecaptchaResponse in ${r.captchaType}`);return await sendSolution(t,e,r,s)},recaptchaProceesor={type:"recaptcha",findMethods:["intercept","hunt"],scriptName:"recaptcha",getTask:recaptchaGetTask,executeSolution:recaptchaExecutionSolution};processors.set("recaptcha",recaptchaProceesor);var turnstileNeedToRefresh=async function(t){return 0===(await t.findElements("#cf-turnstile")).length},turnstileGetTask=function(t){checkCaptchaType(t,"turnstile");const{captchaType:e,url:r,sitekey:a,action:s,cData:i,chlPageData:n}=t,o={type:e,websiteURL:r,websiteKey:a};return isValidStringAttr(s)&&(o.action=s),isValidStringAttr(i)&&(o.cData=i),isValidStringAttr(n)&&(o.chlPageData=n),o},turnstileExecutionSolution=async function(t,e,r,a){checkCaptchaType(r,"turnstile");const{token:s}=a;if("string"!=typeof s||!s)throw new Error(`##captcha invalid token in ${r.captchaType}`);return await sendSolution(t,e,r,s)},turnstileProceesor={type:"turnstile",findMethods:["intercept","hunt"],scriptName:"turnstile",getTask:turnstileGetTask,executeSolution:turnstileExecutionSolution,needToRefresh:turnstileNeedToRefresh,maxRefreshTimes:2};function getScriptFromLocal(t){try{const e=`${"./packages/scraper/tmp/lsd/inject"}/${t}.js`;return import_node_fs.default.readFileSync(e,"utf8")}catch(t){return""}}processors.set("turnstile",turnstileProceesor);var scriptMap=new Map;async function getScript(t){let e=scriptMap.get(t);if(e)return e;if(e=getScriptFromLocal(t),e||(e=await getScriptFromServer(t)),"string"==typeof e&&e.length>20)return scriptMap.set(t,e),e;throw new Error(`##captcha failed to get script of ${t}`)}async function injectScripts(t,e){let r=!0;if("camoufox"===t.browserContext().browser().browserControllerType())return!0;if(!Array.isArray(e)||0===e.length)return r=!1,r;const a=[];for(const s of e){const e=processors.get(s);if(!e)continue;if(!e.findMethods.includes("intercept")||!e.scriptName)continue;if(a.includes(e.scriptName))continue;const i=await getScript(e.scriptName);if(!i){r=!1;break}a.push(e.scriptName);await t.addPreloadScript(i)||(r=!1)}return t.setCloseWhenFree(!0),r}async function solveTokenCaptcha(t,e,r,a){const s={code:0,captchaType:e,taskResults:[]};loginfo(`######################### start to sovle ${e} @${new Date}: `,a);let i="ok";try{const r=processors.get(e);if(!r)return logerr(`##captcha cannot process ${e}`),s.code=1001,s;const{getTask:n,executeSolution:o}=r,c=await getWidgets(r,t,"");if(0===c.length)return s;const l=c[0];e!==l.captchaType&&logerr(`##captcha different captchaType ${e} ${l.captchaType}`);const p=n(l,a),{solution:g,errorCode:h,taskId:u,createTime:d,endTime:f}=await executeTask(p);if(s.taskResults.push({solution:g,errorCode:h,taskId:u,elapse:f-d}),g&&(i=await o(t,"",l,g),i.startsWith("ok")||(s.code=1003,s.message=i),i)){const e="button[type='submit']";await t.findElement(e)}return loginfo(`######################### end to sovle ${e} @${new Date}: `,s),s}catch(t){return logerr(t),s.code=1010,s.message=t.message,s}}var import_node_fs2=__toESM(require("fs"),1),import_utils10=require("@letsscrapedata/utils"),processors2=new Map;async function getTextOfElement(t,e,r){if("pageUrl"===r)return t.url();const a=await t.findElement(e);return a?"textContent"===r?await a.textContent():await a.attribute(r):""}async function getBufferOfImage(t,e,r,a){const s=await t.findElement(e);if(!s)return null;try{const e=await s.attribute("src");if(e.toLowerCase().includes(".gif")){const s=t.url(),i=import_utils10.LsdUrl.getAbsoulteUrl(s,e),n=await lsdDownload(i,r?.proxyUrl);return"number"==typeof a&&import_node_fs2.default.writeFileSync(`./captchaImage${a}.gif`,n),n}{"lazy"===await s.attribute("loading")&&(await s.scrollIntoView(),await(0,import_utils10.sleep)(2e3));const t=await s.screenshot();return"number"==typeof a&&import_node_fs2.default.writeFileSync(`./captchaImage${a}.png`,t),t}}catch(t){return logerr(t),null}}var textGetTask=async function(t,e,r=null){const{type:a,imageLocs:s,case:i,commentLoc:n,commentAttr:o,inputLoc:c,enter:l,submitLoc:p,checkLoc:g,lang:h,math:u,maxLength:d,minLength:f,question:m,space:y,textType:C}=e;if(!Array.isArray(s)||0===s.length)throw new Error("invalidParas");if(!l&&!p)throw new Error("invalidParas");if(!(!m||n&&o))throw new Error("invalidParas");if(!g)throw new Error("invalidParas");const v=[];for(const[e,a]of s.entries()){const s=await getBufferOfImage(t,a,r,e);if(!s)throw new Error("noRequiredElement:imageLoc");v.push(s)}if(!await t.findElement(c))throw new Error("noRequiredElement:inputLoc");let b="";if(n&&(b=await getTextOfElement(t,n,o),!b))throw new Error("noRequiredElement:commentLoc");if(p){if(!await t.findElement(p))throw new Error("noRequiredElement:submitLoc")}return{type:a,images:v,case:i,comment:b,lang:h,math:u,maxLength:d,minLength:f,question:m,space:y,textType:C,websiteUrl:t.url()}},textExecuteSolution=async function(t,e,r){const{text:a}=r,{inputLoc:s,enter:i,submitLoc:n,checkLoc:o,checkAttr:c,failedStr:l}=e,p=await t.findElement(s);if(!p)throw new Error("noRequiredElement");let g=!1;if(i){if(g=await p.input(a,{enter:i}),!g)return"failed:input"}else{const e=await t.findElement(n);if(!e)throw new Error("noRequiredElement");if(g=await p.input(a),!g)return"failed:input";if(g=await e.click(),!g)return"failed:submit"}await(0,import_utils10.sleep)(1e3);const h=await t.findElement(o);if(!h)return"ok";if(!c)return"failed:checkFailed-noCheckElement";const u="textContent"===c?await h.textContent():await h.attribute(c);return!l&&l.length>0?`failed:checkFailed-${u}`:u.includes(l)?`failed:checkFailed-${l}`:"ok"},textProcessor={type:"text",getTask:textGetTask,executeSolution:textExecuteSolution};processors2.set("text",textProcessor);var coordinateGetTask=async function(t,e,r=null){const{type:a,imageLocs:s,commentLoc:i,commentAttr:n,lang:o,maxClicks:c,minClicks:l}=e;if(!Array.isArray(s)||0===s.length)throw new Error("invalidParas");if(l<0||c>0&&l>=c)throw new Error("invalidParas");const p=[];for(const[e,a]of s.entries()){const s=await getBufferOfImage(t,a,r,e);if(!s)throw new Error("noRequiredElement:imageLoc");p.push(s)}let g="";if(i&&(g=await getTextOfElement(t,i,n),!g))throw new Error("noRequiredElement:commentLoc");return{type:a,images:p,comment:g,lang:o,maxClicks:c,minClicks:l}},coordinateExecuteSolution=async function(t,e,r){const{coordinates:a}=r,{minClicks:s,maxClicks:i,imageLocs:n,submitLoc:o,checkLoc:c,checkAttr:l,failedStr:p}=e;if(!Array.isArray(a)||a.length<s||i>0&&a.length>i)return"failed:invalidSolution";let g=!1;const h=await t.findElement(n[0]);if(!h)throw new Error("noRequiredElement");const u=await h.boundingBox();if(!u)return"failed:click";const{x:d,y:f}=u;for(const{x:e,y:r}of a){if(g=await t.mouseClick(d+e,f+r),!g)return"failed:click";await(0,import_utils10.sleep)(200)}if(await(0,import_utils10.sleep)(1e3),o){const e=await t.findElement(o);if(!e)throw new Error("noRequiredElement");if(g=await e.click(),!g)return"failed:submit";await(0,import_utils10.sleep)(1e3)}const m=await t.findElement(c);if(!m)return"ok";if(!l)return"failed:checkFailed-noCheckElement";const y="textContent"===l?await m.textContent():await m.attribute(l);return!p&&p.length>0?`failed:checkFailed-${y}`:y.includes(p)?`failed:checkFailed-${p}`:"ok"},coordinateProcessor={type:"text",getTask:coordinateGetTask,executeSolution:coordinateExecuteSolution};async function solveRecognitionCaptcha(t,e,r,a=1){const s=e.type;loginfo(`######################### start to sovle ${s} @${new Date}: `,e);const i={code:0,captchaType:s,taskResults:[]};let n="";try{const o=processors2.get(s);if(!o)return logerr(`##captcha cannot process ${s}`),i.code=1001,i;const{getTask:c,executeSolution:l}=o;for(let s=1;s<=a;s++){const a=await c(t,e,r),{solution:s,errorCode:o,taskId:p,createTime:g,endTime:h}=await executeTask(a),u={solution:s,errorCode:o,taskId:p,elapse:h-g};if(i.taskResults.push(u),s){if(n=await l(t,e,s),n.startsWith("ok"))return i;if(n.startsWith("failed:checkFailed")){u.errorCode="ERROR_CHECK_FAILED";continue}u.errorCode="ERROR_SOLUTION_FAILED";break}}return i.code=1003,i.message=n,i}catch(t){logerr(t);const e=t.message;return"invalidParas"===e?i.code=1001:e.startsWith("noRequiredElement")?i.code=1004:i.code=1010,i.message=e,loginfo(`######################### end to sovle ${s} @${new Date}: `,i),i}}processors2.set("coordinate",coordinateProcessor);var uuid3=__toESM(require("uuid"),1);function calcCapCredits(t){return t>0?t>>appConfig.GEN_CREDITS_BITS:0}function calcGenCredits(t){return t>0?t&appConfig.GEN_CREDITS_AND:0}var TaskScraper=class extends import_node_events.default{#xe;#Ee;#Ae;_fontsConfig;#Oe;#C;#m;_templateId;#Ie;#y;_taskId;#Te;#De;#Pe;#Ne;#Re;#Fe;#je;#$e;#f;_taskContext;#Le;#Me;#qe;_paras;#Ue;#Je;#He;#Be;#Ve;#We;#Ke;#Ge(){this.#Me&&(this.#He=!0)}#ze(){this.#He=!1,this.#Be=!1}constructor(t,e,r,a={}){super();const{template:s,actionConfigs:i,fontsConfig:n,templScripts:o}=t,{proxy:c=null,page:l=null,browserApiContext:p=null,standaloneApiContext:g=null}=r,{performOneTask:h=appConfig.performOneTask,taskId:u=0,domainNames:d=[],secureDataFlag:f=!1,skipActions:m=[],extractColumns:y=[],version:C="1.0",splitStr:v="::",authInfo:b={},execData:w={}}=a,S=a.stateData?a.stateData:{cookies:[],origins:[],headers:{},userData:{}},k=a.defaultElementSource?a.defaultElementSource:s.defaultElementSource;try{this.#xe=s,this.#Ee=i,this.#Ae=n,this._fontsConfig=n,this.#Oe=o,this.#C=C,this.#m=s.templateId,this._templateId=s.templateId,this.#Ie=1001===this.#m,this.#y=u,this._taskId=u,this.#Te=a.captchaOptions?a.captchaOptions:{captchaTypes:[]},this.#De=a.loginOptions?a.loginOptions:{loginWhens:[],pageMatchInfos:[]},this.#Pe=k,this.#Re=m,this.#Fe=!!a.execData,this.#je=y,this.#Ne=v,this.#$e=h,this.#f={proxy:c,page:l,browserApiContext:p,standaloneApiContext:g,stateApiContext:p||g,taskApiContext:null,popupPage:null,browserElesStack:[],cheerioPage:null,cheerioElesStack:[],loopsStack:[],continueFlag:!1,breakFlag:!1,origStateData:S,newStateData:null,execData:w,processedExecData:{},subtasks:[],credits:0,debugFiles:{},subtaskResults:[]},this.#Le=d,this.#Me=f;const t=new SysParas(this.#f,this.#m,this.#y,this.#C);this.#qe={inParas:e,sysParas:t,authInfo:b,userData:Object.assign({},S.userData),secureData:{}},this.#Ue=this.#Ye();let r=d.length>0?d[0]:"";r||(S.cookies.length>0?r=`https://${S.cookies[0].domain}`:S.origins.length>0&&(r=S.origins[0].origin)),this.#Je={cachedRequestUrl:"",cachedRequestHeaders:{},cachedResponseUrl:"",cachedResponseHeaders:{},updatedRequestUrl:"",updatedRequestHeaders:{},updatedResponseUrl:"",updatedResponseHeaders:{},origStateUrl:r,origStateHeaders:S.headers,updatedStateUrl:"",updatedStateHeaders:{}},this.#He=!1,this.#Be=!1,this.#Ve={api:this.#Xe,break:this.#Qe,captcha:this.#Ze,click:this.#tr,continue:this.#er,exit:this.#rr,extract:this.#ar,goto:this.#sr,hover:this.#ir,ifelse:this.#nr,input:this.#or,intercept:this.#cr,loopdowhile:this.#lr,loopfor:this.#pr,loopineles:this.#gr,loopinstr:this.#hr,misc:this.__performMiscAction,scroll:this.#ur,select:this.#dr,setvar:this.#fr,subtask:this.#mr,tabname:this.#yr,wait:this.#Cr},this.#We={normal:-1,parasinvalid:-2,capinvalid:-41,caplocked:-42,capexpired:-43,proxylocked:-61,proxyforbidden:-61,cfginvalid:-69,captchafailed:-52,switchproxynow:-86,switchproxyfuture:-87,other:-98,logicerror:-98,tetimeout:-79},this.#Ke="",this._taskContext=this.#f,this._paras=this.#qe,this.#Ae&&logdbg(this.#Ae)}catch(t){throw logerr("##te Exeception in ScraperTask.constructor"),new Error(t)}}#vr(t){const e=this.#br(t,"source");return"default"===e?this.#Pe:"browser"===e?"browser":"xml"===e?"xml":void(0,import_utils11.unreachable)(e)}#wr(t){this.#f.credits=t,logwarn(new Error)}#Sr(t){return`action${t[0].toUpperCase()}${t.slice(1)}`}#kr(t,e){const{browserElesStack:r,cheerioElesStack:a}=this.#f;return!(!t||r.length>0||a.length>0)||(this.#_r("cfginvalid",this.#Sr(e),"resetPage"),!1)}#_r(t,e,r){"ignore"!==t&&logwarn(`##tmp procErrname eName ${t} scenario ${e} reason ${r} tId ${this.#m} kId ${this.#y} p ${this.#Ue}`);let a=-69;if("string"!=typeof t||!t||!e)throw this.#f.credits=a,new Error("##te invalid paras in _procErrname");if("ignore"===t)return!0;throw void 0!==this.#We[t]?(a=this.#We[t],this.#f.credits=a,new Error(`##te exit with errname ${t} in ${e}`)):(this.#f.credits=a,new Error(`##te invalid errName ${t} in ${e}`))}_procErrname(t,e,r){return this.#_r(t,e,r)}#Ye(){if(this.#qe.inParas&&"object"==typeof this.#qe.inParas){const t=Array.from(Object.keys(this.#qe.inParas)),e=t.filter(t=>t.startsWith("para")),r=t.filter(t=>t.startsWith("apara")),a=t.filter(t=>t.startsWith("rpara"));let s=e.map(t=>this.#qe.inParas[t]).join(this.#Ne);return(r.length>0||a.length>0)&&(s=`${s}@@${r.map(t=>this.#qe.inParas[t]).join(this.#Ne)}`,a.length>0&&(s=`${s}@@${a.map(t=>this.#qe.inParas[t]).join(this.#Ne)}`)),s}return""}#xr(t,e=!0){return this.#f.cheerioPage?this.#f.cheerioPage.load(t,e):this.#f.cheerioPage=new import_controller3.CheerioPage(t,e),!0}#Er(t,e){const r=this.#f.debugFiles;if(r){if(t.startsWith("var_")&&!path5.extname(t)){let e="txt",r=t.slice(-4);"Json"===r||"json"===r?e="json":"Html"!==r&&"html"!==r||(e="html"),t=`${t}.${e}`}r[t]=e}return!0}#Ar(t,e){if(this.#Be&&!t.startsWith("secureData.")&&this.#_r("cfginvalid","secureData","noprivilege"),"string"!=typeof t||"string"!=typeof e||appConfig.RESERVED_PARA_NAMES.includes(t)?this.#_r("cfginvalid","setNormalVar","invalidParas"):"pageHtml"!==t&&"pageXml"!==t||(this.#f.cheerioElesStack.length>0&&this.#_r("cfginvalid","setNormalVar","cheerioElesStack"),this.#xr(e,"pageHtml"===t)),t.startsWith("userData.")){const r=t.slice(9);0===r.length&&this.#_r("cfginvalid","setNormalVar","invalidUserDataVarName"),this.#qe.userData[r]=e}else if(t.startsWith("secureData.")){const r=t.slice(11);0===r.length&&this.#_r("cfginvalid","setNormalVar","invalidSecureDataVarName"),this.#qe.secureData[r]=e}else if(t.startsWith("inParas_")){const r=t.slice(8);0!==r.length&&void 0!==this.#qe.inParas[r]||this.#_r("cfginvalid","setNormalVar","invalidInParasVarName"),this.#qe.inParas[r]=e,this.#Ue=this.#Ye()}else this.#qe[t]=e;return t.startsWith("loglog")||t.startsWith("cx")&&t.match(/^cx\d$/)?logwarn(`##log setvar ${t}: ${e}`):this.#Ie&&t.startsWith("dbgdbg")&&this.#Er(`var_${t}`,e),!0}#Or(t){if("string"!=typeof t)return!1;const e=t.toLowerCase();return e.startsWith("https://")||e.startsWith("http://")}#Ir(t){if(t?.[appConfig.XML_ATTR_KEY]?.type)return!0;throw new Error("##te Invalid element type config(validate)")}#Tr(t,e){if("string"!=typeof t)throw new Error(`##te Invalid templStr: ${t}`);if(t.indexOf("${")<0)return t;try{return!this.#He&&t.includes("secureData.")?(this.#_r("cfginvalid","transTemplToStr","accessSecureData"),""):(this.#He&&t.includes("secureData.")&&(this.#Be=!0),function(t){const e=Object.keys(t),r=Object.values(t);return new Function(...e,`return \`${this}\`;`)(...r)}.call(t,e))}catch(t){return""}}#br(t,e,r=!0,a=!0){if(!t||"string"!=typeof e)throw new Error(`##te Invalid config or attribute, attribute: ${e}`);const s=t[appConfig.XML_ATTR_KEY][e];if(null===s)return s;if(void 0===s){if(a)throw new Error(`##te Config has no attribute ${e}`);return""}return!r||["type","name","version"].includes(e)?s:this.#Tr(s,this.#qe)}_getCfgStrAttr(t,e,r=!0,a=!0){return this.#br(t,e,r,a)}#Dr(t,e){if(!t)throw new Error(`##te Invalid action config or attribute, attribute: ${e}`);const r=t[appConfig.XML_ATTR_KEY][e];if("boolean"!=typeof r)throw loginfo(`##te attrNames: ${JSON.stringify(t[appConfig.XML_ATTR_KEY])}, attrName: ${e}`),new Error(`##te Element has no bool attribute ${e} or it is undefined/null`);return r}_getCfgBoolAttr(t,e){return this.#Dr(t,e)}#Pr(t,e,r=!1){try{const a=appConfig.XML_CHILDREN_KEY,s=appConfig.XML_ATTR_KEY;let i=t[a]?t[a][e]:null;if(Array.isArray(i))return i;if(void 0===i){const t={};return"elecontent"===e?(t[s]={type:"text",multieles:!0,trim:!0,join:"\n",line:!1,top:!1},[t]):"ocrcfg"===e?(t[s]={type:"api",nlchars:"",seperator:!1,lang:"zh"},[t]):[]}if(r)throw new Error(`##te Invalid cfgType ${e} children of parentCfg ${JSON.stringify(t)}`);return[]}catch(t){return logerr(t),[]}}#Nr(t,e="default",r=!1){const a={};return a[appConfig.XML_ATTR_KEY]={loc:t,source:e,absolute:r},a}_getCfgChildrenOf(t,e,r=!1){return this.#Pr(t,e,r)}#Rr(t,e){const r=this.#Pr(t,e);return r.length>0?r[0]:null}#Fr(t,e){const r=this.#Pr(t,e);if(0===r.length)throw new Error(`##te There is no ${e} tag config`);return r[0]}#jr(){if(this.#f.page)return this.#f.page.pageInfo();throw new Error("Cannot get pageInfo from null browser page")}#$r(){if(this.#f.page)return this.#f.page.browserContext().browser().isHeadless();throw new Error("Cannot get headless from null browser page")}#Lr(t,e="ceil"){if("string"!=typeof t)throw new Error(`##te Inavlid math expr: ${t}`);if(!["ceil","round","floor"].includes(e))throw new Error(`##te Inavlid round type: ${e}`);return Number(getTransformExpStrSync(t,[{type:"tonum"},{type:`n_${e}`}]))}#Mr(t){if("string"!=typeof t)throw new Error(`##te Inavlid bool expr: ${t}`);if("0"===t||""===t)return!1;if("1"===t)return!0;return Boolean(Number(getTransformExpStrSync(t,[{type:"tobool"}])))}async#qr(t){let e=parseInt(t);return e>0&&await(0,import_utils11.sleep)(e),!0}#Ur(t,e=!0,r=!0,a=1,s=1){const i=t?this.#Dr(t,"gen"):e,n=t?this.#Dr(t,"cap"):r,o=i?a:0,c=this.#xe.capName&&n?s:0;return loginfo(`##credit addTaskCredits: gen ${o}, cap ${c}`),this.#f.credits+=(c<<appConfig.GEN_CREDITS_BITS)+o,!0}#Jr(t,e){if(!["click","goto","input","scroll","select"].includes(e))throw new Error(`logic error actionType ${e} cannot call this function`);const{popuppage:r,wait:a,errname:s,eurl:i,eloc:n,pn1:o,pv1:c,pn2:l,pv2:p}=this.#Hr(t,!1),g=this.#Dr(t,"login")&&!!this.#Te.pageMatchInfos,h=this.#Dr(t,"captcha")&&!!this.#De.pageMatchInfos,u=i||n||o||c||l||p?{eurl:i,eloc:n,pn1:o,pv1:c,pn2:l,pv2:p}:null;if("ignored"===r||!g&&!h&&!u)return null;const d=this.#Dr(t,"popupsubtask");let f=parseInt(a);f>0||(f=0);const m="ignored"!==r,y={captchaFlag:m&&h&&!!this.#Te?.captchaWhens?.includes("popup"),loginFlag:m&&g&&!!this.#De?.loginWhens?.includes("popup"),taskFlag:!(m&&d)};if(m&&!y.captchaFlag&&!y.loginFlag&&!u)return this.#_r("cfginvalid",this.#Sr(e),"invalidPopupCfg"),null;let C="ignored"===r;const v={captchaFlag:h&&!!this.#Te?.captchaWhens?.includes("current"),loginFlag:g&&!!this.#De?.loginWhens?.includes("current"),taskFlag:C&&!!u};if(C&&!v.captchaFlag&&!v.loginFlag&&v.taskFlag)return this.#_r("cfginvalid",this.#Sr(e),"invalidCurrentCfg"),null;return{actionType:e,errName:s,dataPageMatchInfo:u,waitMs:f,popupFlag:m,popupPageType:r,popupPageFlags:y,currentFlag:C,currentPageFlags:v,captchaPageMatchInfos:this.#Te.pageMatchInfos,loginPageMatchInfos:this.#De.pageMatchInfos}}async#Br(t,e,r=!0){const a=t.url();if(!a.trim())return null;const s=new URL(a),i=s.href.toLowerCase();for(const a of e){if(!a.eurl&&!a.pn1&&!a.pn2)return null;let e=!a.eurl;if(a.eurl){const t=a.eurl.split(",");e=i.startsWith(t[0])&&t.slice(1).every(t=>i.includes(t))}const n=!a.pn1||a.pn1&&s.searchParams.get(a.pn1)===a.pv1,o=!a.pn2||a.pn2&&s.searchParams.get(a.pn2)===a.pv2;if(!e||!n||!o)continue;let c=!0;if(a.eloc&&r)try{for(let e=0;e<30;e++){if((await t.findElements(a.eloc)).length>0){c=!0;break}await(0,import_utils11.sleep)(2e3)}}catch(t){c=!1}if(c)return a}return null}async#Vr(t,e,r){const{actionType:a,dataPageMatchInfo:s,popupPageType:i,errName:n}=e,o="popup"===r?e.popupPageFlags:e.currentPageFlags,{captchaFlag:c,loginFlag:l,taskFlag:p}=o;if(c&&e.captchaPageMatchInfos){if(await this.#Br(t,e.captchaPageMatchInfos))return!0}if(l&&e.loginPageMatchInfos){if(await this.#Br(t,e.loginPageMatchInfos))return this.#_r("tologin",this.#Sr(a),r),!0}if(s){if(await this.#Br(t,[s]))return"popup"===r&&(p?(this.#kr(t,a),this.#f.page=t):this.#f.popupPage=t),!0;if("required"===i)return this.#_r(n,this.#Sr(a),"noMatchedPopupPage"),!1}return!0}async processNewPageLoginCaptcha(t,e,r){const{actionType:a,errName:s,waitMs:i,popupPageType:n}=t,o=appConfig.CHECK_POPUP_PAGE_TIMEOUT1;setTimeout(()=>this.emit(appConfig.EVENT_TYPES.lsdScraperPopup,{code:1009,message:"timeout",data:null}),o),await e(...r),i&&await(0,import_utils11.sleep)(i);const[c]=await(0,import_node_events2.once)(this,appConfig.EVENT_TYPES.lsdScraperPopup);loginfo(`##tmp Taskscraper received popup event ${c.code}`);const l=c&&0===c.code&&c.data?c.data:null;if(!l){if("required"!==n)return!0;this.#_r(s,this.#Sr(a),"noPopupPage")}return await this.#Vr(l,t,"popup"),!0}#Wr(t,e){"browser"===t&&this.#f.page||this.#_r("cfginvalid",this.#Sr(e),"invalidBrowserElementSource")}#Kr(t,e){let r=this.#f.processedExecData[t];return r||(r=new Set,this.#f.processedExecData[t]=r),r.add(e),!0}#Gr(t,e){let r=this.#f.processedExecData[t];return!!r&&r.has(e)}#zr(t){return!!this.#f.processedExecData[t]}async#Yr(t){if("browser"===t)return this.#f.browserApiContext;if("standalone"===t)return this.#f.standaloneApiContext;if("state"===t)return this.#f.stateApiContext;if("task"===t){if(!this.#f.taskApiContext){const t=this.#f.proxy?{proxy:this.#f.proxy}:{};this.#f.taskApiContext=await import_controller3.controller.newApiContext(t)}return this.#f.taskApiContext}return null}#Xr(t,e,r,a,s){let i={};const n=s.filter(t=>"header"===this.#br(t,"type"));try{if("headers"!==e||"headers"===e&&r||a||n.length>0){let s="";const o=this.#Je;if("headers"===e&&r?i=JSON.parse(r):"cachedRequestHeaders"===e?(s=o.cachedRequestUrl,i=Object.assign({},o.cachedRequestHeaders)):"cachedResponseHeaders"===e?(s=o.cachedResponseUrl,i=Object.assign({},o.cachedResponseHeaders)):"origStateHeaders"===e?(s=o.origStateUrl,i=Object.assign({},o.origStateHeaders)):"updatedRequestHeaders"===e?(s=o.updatedRequestUrl,i=Object.assign({},o.updatedRequestHeaders)):"updatedResponseHeaders"===e?(s=o.updatedResponseUrl,i=Object.assign({},o.updatedResponseHeaders)):"updatedStateHeaders"===e?(s=o.updatedStateUrl,i=Object.assign({},o.updatedStateHeaders)):this.#_r("cfginvalid","actionApi","invalidHeadersSource"),e.endsWith("Headers")&&(s||0===Array.from(Object.keys(i)).length)){GetPara.canAccessSeureData(this.#Le,t)||(i={},this.#_r("cfginvalid","actionApi","differentOrigin"))}a&&(i.referer=a);for(const t of n){const e=this.#br(t,"name"),r=this.#br(t,"value");i[e]=r}return i}return null}catch(t){return loginfo(t),this.#_r("cfginvalid","actionApi","garhException"),null}}#Qr(t,e){const r="Content-Length",a="content-length";return t&&t[r]?(t[r]=String(e.length),!0):!(!t||!t[a])&&(t[a]=String(e.length),!0)}#Zr(t,e){if("string"===e)return t;if("number"===e)return Number(t);if("boolean"===e)return!(!t||"false"===t.toLowerCase()||"0"===t);if("null"===e)return null;if("undefined"===e)return;if("object"!==e)throw this.#_r("cfginvalid","actionApi","notObject"),new Error("unreachable");const r=(0,import_utils11.getJsonParseOfStr)(t);if(!r||"object"!=typeof r)throw this.#_r("cfginvalid","actionApi","jsonParseData"),new Error("unreachable");return r}async#ta(t,e,r,a){try{if(r.filter(t=>"data"===this.#br(t,"type")).length>0&&"object"!==e)return this.#_r("cfginvalid","actionApi","invalidDataType"),"";if("object"!==e)return this.#Zr(t,e);{const e=await this.#ea(t,r,"");if(e)return e;throw new Error("##te invalid requestData")}}catch(t){return loginfo(t),void this.#_r(a,"actionApi","grdExeception")}}#ra(t,e,r,a){switch(e){case"browser":case"state":case"task":case"standalone":if("data"===r)t.body=JSON.stringify(a);else if("form"===r){if(!a||"object"!=typeof a)return this.#_r("cfginvalid","actionApi","invalidDataOrFormat1"),!1;const e=new FormData;for(const[t,r]of Object.entries(a))e.append(t,r);t.form=a}else if("params"===r){if(!a||"object"!=typeof a)return this.#_r("cfginvalid","actionApi","invalidDataOrFormat2"),!1;const e=new URLSearchParams;for(const[t,r]of Object.entries(a))e.append(t,r);t.params=a}else(0,import_utils11.unreachable)(r);break;case"default":if("data"===r)t.body=JSON.stringify(a);else if("form"===r){if(!a||"object"!=typeof a)return this.#_r("cfginvalid","actionApi","invalidDataOrFormat21"),!1;const e=new FormData;for(const[t,r]of Object.entries(a))e.append(t,r);t.body=a}else if("params"===r){if(!a||"object"!=typeof a)return this.#_r("cfginvalid","actionApi","invalidDataOrFormat22"),!1;t.searchParams=a}else(0,import_utils11.unreachable)(r);break;case"fetch":if("data"===r)t.body=JSON.stringify(a);else if("form"===r){if(!a||"object"!=typeof a)return this.#_r("cfginvalid","actionApi","invalidDataOrFormat31"),!1;const e=new FormData;for(const[t,r]of Object.entries(a))e.append(t,r);t.body=a}else if("params"===r){if(!a||"object"!=typeof a)return this.#_r("cfginvalid","actionApi","invalidDataOrFormat32"),!1;const e=new URLSearchParams;for(const[t,r]of Object.entries(a))e.append(t,r);t.body=a}else(0,import_utils11.unreachable)(r);if("data"===r){if(!a||"object"!=typeof a)throw this.#_r("cfginvalid","actionApi","fetch"),new Error("unreachable");const e=new FormData;for(const t of Object.keys(a))e.set(t,a[t]);t.data=e}else t.body="string"==typeof a?a:JSON.stringify(a);break;default:(0,import_utils11.unreachable)(e)}return!0}async#aa(t,e,r,a,s){const i={statusCode:200,text:""};try{if(this.#Ie&&r.endsWith("__test"))return logwarn("##dbg api: ",r,a),i.text=JSON.stringify({reqUrl:r,requestOptions:a}),i;switch(t){case"browser":case"state":case"task":case"standalone":const s=await this.#Yr(t);if(!s)throw new Error("##te null apiContext");e>0&&(a.timeout=e);const n=await s.fetch(r,a);i.statusCode=n.status,i.text=n.text;break;case"default":e>0&&(a.timeout={request:e});const o=await(0,import_got_scraping.gotScraping)(r,a);i.statusCode=o.statusCode,i.text=o.body;break;case"fetch":const c=await fetch(r,a);i.statusCode=c.status,i.text=await c.text();break;default:(0,import_utils11.unreachable)(t)}return i}catch(t){return loginfo(t),this.#_r(s,"actionApi","groarException"),i.statusCode=600,i.text=t.message,i}}#sa(t,e){let r=this.#Pr(t,"response",!1);0===r.length&&(r=[]);for(const t of r){const r=this.#br(t,"codes");if(!r)throw this.#_r("cfginvalid","actionApi","invalideCodes"),new Error("unreachable");if(r.split(",").map(t=>Number(t)).includes(e)){const e=this.#br(t,"errname");this.#_r(e,"actionApi","statusCode")}}return!0}#ia(t,e,r,a){const s=this.#na(r,a);if(s&&!t.match(s))throw this.#_r(e,"actionApi","apiResponseText"),new Error("unreachable");return!0}#oa(t,e,r="json"){return"tid"===t&&(t=`tid${this.#m}`),"uuidv4"===e?e=uuid3.v4():"datetime"===e&&(e=String((0,import_utils11.getLocalDateNumber)())),`${t}_${e}.${r}`}#ca(t,e=!1){let r=appConfig.cfg.baseFileDir;return e?(r=path5.join(r,"debug"),(0,import_utils11.isDirectorySync)(r)||fs6.mkdirSync(r)):r=path5.join(r,"files"),path5.join(r,t)}#la(t,e,r="json"){try{const a=this.#oa(t,e,r),s=this.#ca(a,!0);return fs6.readFileSync(s,"utf8")}catch(t){return""}}#pa(t,e,r,a="json",s="normal"){try{const s=this.#oa(e,r,a),i=this.#ca(s,!0);return fs6.writeFileSync(i,t),!0}catch(t){return this.#_r(s,"actionApi","sarExeception"),!1}}async#Xe(t){let e=200,r="",a="";this.#Ge();const s=this.#br(t,"url");try{GetPara.canAccessSeureData(this.#Le,s)||this.#ze();const i=this.#Hr(t);let{method:n,url:o,encodeuri:c,session:l,headerssource:p,headers:g,referer:h,proxy:u,timeout:d,data:f,datatype:m,format:y,requestprefix:C,responseprefix:v,tabname:b,subkeys:w,varname:S,setkeys:k,errname:_,valerrname:x,pattern:E,flags:A}=i;const O=this.#Je;if(this.#Ie){if(C)if(O.cachedRequestUrl){const{cachedRequestUrl:t,cachedRequestHeaders:e,cachedRequestData:r}=O,a=JSON.stringify({cachedRequestUrl:t,cachedRequestHeaders:e,cachedRequestData:r});this.#pa(a,C,"request","json",_)}else{const t=this.#la(C,"request");if(t){if((0,import_utils11.getJsonParseOfStr)(t)){const{cachedRequestUrl:e,cachedRequestHeaders:r,cachedRequestData:a}=(0,import_utils11.getJsonParseOfStr)(t);e&&(O.cachedRequestUrl=e),r&&(O.cachedRequestHeaders=r),a&&(O.cachedRequestData=a)}}}"cachedRequestUrl"===o&&(o=O.cachedRequestUrl),"cachedRequestData"===f&&O.cachedRequestData&&(f=O.cachedRequestData),"cachedRequestHeaders"===g&&O.cachedRequestHeaders&&(g=JSON.stringify(O.cachedRequestHeaders))}const I=i.context,T=d?Number(d):0,D=o.startsWith("/"),P=c?encodeURI(o):o,N=this.#Pr(t,"object",!1),R=this.#Pr(t,"request",!1),F=n.toUpperCase();if(!["GET","DELETE","POST","PUT"].includes(F))return this.#_r("cfginvalid","actionApi","invalidMethod"),"";let j=!1;this.#Ie&&v&&(r=this.#la(v,"response"),r&&(j=!0));let $=null;if(!r)if(D){if("function"==typeof GetPara.getOtherFunObj.execBaseApiFun){const t=T>0?{timeout:T}:void 0,e=f?await this.#ta(f,m,N,_):null;r=await GetPara.getOtherFunObj.execBaseApiFun(F,P,e,t,this.#m)}}else{const s={method:F.toUpperCase()},i=this.#f.proxy;if(i&&(u&&i.proxyUrl&&(s.proxyUrl=i.proxyUrl),l&&i.proxyUrl&&"default"===I&&(s.sessionToken=i.proxyUrl)),$=this.#Xr(P,p,g,h,R),$&&(s.headers=$),f){const t=await this.#ta(f,m,N,_);void 0!==t&&(a=JSON.stringify(t),this.#ra(s,I,y,t),this.#Qr($,a))}const n=await this.#aa(I,T,P,s,_);e=n.statusCode,r=n.text,200!==e&&this.#sa(t,e)}if(b&&"none"!==b){const t=this.#f.execData;t[b]||(t[b]=[]);const e={pageUrl:this.#qe.sysParas.url,requestMethod:F,requestUrl:o,requestData:a,responseData:r,resourceType:"api",size:String(r.length)};this.#Ie&&(e.requestHeaders=$?JSON.stringify($):""),t[b].push(e)}this.#Ie&&!j&&v&&r&&this.#pa(r,v,"response","json",_);let L=r;if(w){const t=(0,import_utils11.getJsonParseOfStr)(L);t&&"object"==typeof t||(L="");L=getSubkeysStrOfObject(t,this.#ga(w))}return"ignore"!==x&&E&&this.#ia(L,x,E,A),S&&this.#Ar(S,L),k&&L&&this.#ha(L,k,!0),this.#Ur(t),r}catch(t){throw t}finally{this.#ze()}}async#Qe(t){this.#Ir(t),this.#f.loopsStack.length>0?this.#f.breakFlag=!0:logerr("##te Error: break cannot be called outside of loop")}#ua(t){const e=this.#Fr(t,"element");return this.#br(e,"loc")}#da(t,e=1){const r=this.#Pr(t,"element");return r.length<e?(this.#_r("cfginvalid","childElements","elementCnt"),[]):r.map(t=>this.#br(t,"loc"))}async#fa(t,e,r,a){const s=this.#Fr(e,"image"),i=this.#da(s),n=this.#Rr(e,"comment"),o=n?this.#ua(n):"",c=n?this.#br(n,"attr"):"",l=this.#Fr(e,"input"),p=this.#ua(l),g=this.#Dr(l,"enter"),h=g?null:this.#Rr(e,"submit"),u=g||!h?"":this.#ua(h);if(!g&&!h)return this.#_r("cfginvalid","actionCaptcha","invalidTextCfg"),!1;const d=this.#Fr(e,"check"),f=this.#ua(d),m=this.#br(d,"attr"),y=this.#br(d,"failedstr"),C=this.#Hr(e),{lang:v,math:b,maxlen:w,minlen:S,question:k,space:_,texttype:x}=C,E={type:"text",imageLocs:i,commentLoc:o,commentAttr:c,inputLoc:p,enter:g,submitLoc:u,checkLoc:f,checkAttr:m,failedStr:y,case:C.case,lang:v,math:b,maxLength:parseInt(w),minLength:parseInt(S),question:k,space:_,textType:x};return await solveRecognitionCaptcha(t,E,r,a)}async#ma(t,e,r,a){const s=this.#Fr(e,"image"),i=this.#da(s),n=this.#Rr(e,"comment"),o=n?this.#ua(n):"",c=n?this.#br(n,"attr"):"";let l="";const p=this.#Rr(e,"submit");if(p&&(l=this.#ua(p),!l))return this.#_r("cfginvalid","actionCaptcha","invalidCoordinateCfg"),!1;const g=this.#Fr(e,"check"),h=this.#ua(g),u=this.#br(g,"attr"),d=this.#br(g,"failedstr"),f=this.#Hr(e),{lang:m,maxclicks:y,minclicks:C}=f,v={type:"coordinate",imageLocs:i,commentLoc:o,commentAttr:c,submitLoc:l,checkLoc:h,checkAttr:u,failedStr:d,lang:m,maxClicks:parseInt(y),minClicks:parseInt(C)};return await solveRecognitionCaptcha(t,v,r,a)}async#Ze(t){const e=this.#f.page;if(!e)return this.#_r("cfginvalid","actionCaptcha","noPage"),!1;const r=parseInt(this.#br(t,"try")),a=this.#Dr(t,"debug"),s=this.#Fr(t,"captcha"),i=this.#br(s,"type"),n=this.#br(t,"errname"),o=this.#f.proxy;let c;switch(i){case"amazon":case"funcaptcha":case"geetest":case"keycaptcha":case"mtcaptcha":case"turnstile":c=await solveTokenCaptcha(e,i,o,{debug:a});break;case"recaptcha":const t=Number(this.#br(s,"minscore"));c=await solveTokenCaptcha(e,i,o,{minScore:t,debug:a});break;case"text":case"grid":case"slider":case"rotation":c=await this.#fa(e,s,o,r);break;case"coordinate":c=await this.#ma(e,s,o,r);break;default:(0,import_utils11.unreachable)(i)}return a&&logwarn("##te captcha result: ",c),0!==c?.code&&this.#_r(n,"actionCaptcha","cannotSolveCaptcha"),!0}async#tr(t){const e=this.#f.page;if(!e)return this.#_r("cfginvalid","actionClick","noPage"),!1;this.#Ir(t);const r=this.#br(t,"type"),a=this.#br(t,"clicktype"),s=parseInt(this.#br(t,"try")),i=this.#br(t,"popuppage"),n=this.#Dr(t,"navigate"),o=this.#br(t,"errname"),c=this.#Pr(t,"element",!0);"click"!==a&&"evaluate"!==a&&(logerr(`##task invalid clicktype ${a} in performClickAction`),this.#_r("cfginvalid","actionClick","invalidClickType"));const{elementSource:l,elements:p}=await this.#ya(c,s);if(this.#Wr(l,"click"),0===p.length)return loginfo(`## te ---- no element to click, actCfg: ${JSON.stringify(t).slice(0,200)}`),this.#_r(o,"actionClick","noElements"),!1;const g=p[0];try{logdbg(`##te click text: ${await g.innerText()}`)}catch(t){logdbg(t)}e.browserContext().browser().isHeadless()||(logdbg(`##te pageId${e.id()} bringToFront in click`),await e.bringToFront());const h=this.#br(t,"downloadpath"),u=appConfig.cfg.baseDownloadDir,d=path5.join(u,h);if(h&&u){if(!0===e.browserContext().browser().isHeadless()&&(logerr('##te please set browserHeadlesses "true" to download files by clicking'),this.#_r("cfginvalid","actionClick","invalidBrowserHeadlesses")),await(0,import_utils11.fsCheckOrCreateSubdir)(u,h,"")){const t="Browser.setDownloadBehavior";try{loginfo(`##browser response of CDP ${t}: `,await e.sendCDPMessage(t,{behavior:"allow",downloadPath:d}))}catch(e){e.message?.includes("does not support")?(logerr(e.message),this.#_r("cfginvalid","actionClick","invalidBrowserControllerTypes")):(logerr(e),logwarn(`##browser failed to send CDP message ${t}`))}}else this.#_r("other","actionClick","invalidDownloadDir")}const f=this.#Jr(t,r);if(f&&f.popupFlag?await this.processNewPageLoginCaptcha(f,async t=>{await t.click({clickType:a})},[g]):await g.click({clickType:a}),"ignored"===i&&n)try{await(0,import_utils11.sleep)(5e3)}catch(t){}f&&f.currentFlag&&await this.#Vr(e,f,"current");const m=this.#br(t,"wait");await this.#qr(m);const y=this.#br(t,"filename");let C="";if(d&&y){C=path5.join(d,y);let t=0;const e=300;for(t=0;t<e;t++){if(await(0,import_utils11.fileExist)(C))break;await(0,import_utils11.sleep)(1e3)}t>=e&&(logwarn(`##te download kId ${this.#y}: failed to download file ${C}`),this.#_r("other","actionClick","downloadTimeout"))}const v=this.#br(t,"pathvarname");return v&&this.#Ar(v,C),this.#Ur(t),!0}async#er(t){return this.#Ir(t),this.#f.loopsStack.length>0?(this.#f.continueFlag=!0,!0):(logerr("##te Error: continue cannot be called outside of loop"),!1)}async#rr(t){this.#Ir(t);const e=this.#br(t,"errname");if(!e)return!1;const r=void 0!==this.#We[e]?this.#We[e]:-69;throw this.#f.credits=r,new Error(`##te action_throw with errname ${e}`)}#Ca(t){try{const e=this.#f.page,r=e?e.url():this.#qe.pageUrl?this.#qe.pageUrl:"";if(!r)return logwarn("Please execute page.goto or set variable pageUrl first"),t;const a=new URL(t,r);return a?a.href:t}catch(e){return t}}#na(t,e=""){if(!t)return null;try{return e?new RegExp(t,e):new RegExp(t)}catch(t){return this.#_r("cfginvalid","regExp","invalidRegExp"),null}}async#va(t,e){let r="text";t&&(r=this.#br(t,"type"));let a="step00",s="",i=!0,n=!1,o="\n",c=!1,l=!1,p=!1,g=[];try{if(e.length>0){let h=e[0];switch(r){case"text":a="step11",t&&(i=this.#Dr(t,"multieles"),n=this.#Dr(t,"trim"),o=this.#br(t,"join"),c=this.#Dr(t,"line"),l=this.#Dr(t,"top")),a="step12";for(let t of e){if(s=await t.innerText(l),n&&(s=s.trim()),!i)break;g.push(s)}a="step13",i&&(s="stringify"===o?JSON.stringify(g):g.join(o)),c&&(s=s.replace(/[\s\r\n]+/g," ")),a="step14";break;case"attr":a="step21";const u=this.#br(t,"attrname"),d=this.#br(t,"attrname2"),f=this.#br(t,"attrname3"),m=this.#br(t,"attrname4");n=this.#Dr(t,"trim");const y=this.#br(t,"pattern"),C=this.#Dr(t,"boolattr");i=this.#Dr(t,"multieles"),o=this.#br(t,"join"),c=this.#Dr(t,"line"),p=this.#Dr(t,"absolute"),a="step22";for(let t of e){if(C)a="step22",s=await t.hasAttribute(u)?"1":"0";else{a="step23";const e=this.#na(y);for(const r of[u,d,f,m]){if(!r)break;let a=await t.attribute(r);if(s="string"==typeof a?a:null===a?"":String(a),n&&(s=s.trim()),!e)break;if(s.match(e))break;s=""}p&&(s=this.#Ca(s))}if(!i)break;g.push(s),a="step24"}i&&(s="stringify"===o?JSON.stringify(g):g.join(o)),c&&(s=s.replace(/[\s\r\n]+/g," ")),a="step25";break;case"innerhtml":s=await h.innerHtml();break;case"length":s=String(e.length);break;case"outerhtml":s=await h.outerHtml();break;case"pictext":s="pictext";break;case"image":s="image";break;case"query":s="query";break;default:throw new Error(`##te Invalid content type: ${r}`)}}else"length"===r&&(s="0");return s}catch(i){throw loginfo(`##te processBrowserElecontentCfg: tId${this.#m} ecCfg: ${JSON.stringify(t).slice(0,200)}`),loginfo(`##te err: ${JSON.stringify(i)}`),loginfo(`##te contentType ${r}, content ${s}, onelineFlag ${c}`),loginfo(`##te message ${a}`),loginfo(`##te $browserEles ${e}, length ${e.length}, e0 ${e[0]}`),new Error(i)}}async#ba(t,e){try{let r="";const a=this.#br(t,"defaultval"),s=this.#Dr(t,"usevar");let i=this.#Pr(t,"fun",!0).map(t=>t[appConfig.XML_ATTR_KEY]);if(s){const t=i;i=[];for(const e of t){const t=Object.assign({},e);for(const e of Object.keys(t))"string"==typeof t[e]&&t[e].includes("${")&&(t[e]=this.#Tr(t[e],this.#qe));i.push(t)}}return r=await getTransformExpStr(e,i,a,this.#Oe),r}catch(e){throw loginfo(`##te processTransformCfg: tId${this.#m} tCfg: ${JSON.stringify(t).slice(0,200)}`),loginfo(`##te err: ${JSON.stringify(e)}`),new Error(e)}}async#wa(t){if(t){if(!this.#f.popupPage)throw new Error("No valid popup page");return this.#f.popupPage}if(this.#f.page){const t=await this.#f.page.browserContext().getPage(!0);if(t)return t;throw new Error("No new page to perform sync subtask")}throw new Error("logic error in #getSubtaskPage")}async#Sa(t){return await t.free(),!0}#ka(t){const{proxy:e,browserApiContext:r,standaloneApiContext:a}=this.#f;return{proxy:e,page:t,browserApiContext:r,standaloneApiContext:a}}async#_a(t){try{let e="";const r=parseInt(this.#br(t,"tid")),a=parseInt(this.#br(t,"minlen")),s=this.#br(t,"parasstr");let i=this.#br(t,"errname");const n=this.#Dr(t,"popuppage");if(n&&!this.#f.popupPage){const t="ignore"===i?"cfginvalid":i;this.#_r(t,"syncSubtask","noPopupPage")}if(s.length>=a){const t=await this.#wa(n),{taskData:a}=await this.#$e(r,s,this.#ka(t),"memSync");await this.#Sa(t);const{credits:i,execData:o}=a;if(n&&(this.#f.popupPage=null),logdbg(`##te memsyncsubtask t${r} p${s} c${i} data: ${JSON.stringify(o)}`),i>=-1){if(o&&1===Object.keys(o).length&&Array.isArray(Object.values(o)[0])){const t=Object.values(o)[0];if(Array.isArray(t)&&1===t.length){const r=Object.keys(t[0]).length;if(1===r){const r=Object.keys(t[0])[0];e=t[0][r]}else e=0===r?"":JSON.stringify(t[0])}else e=JSON.stringify(o)}else e=JSON.stringify(o);let t=calcGenCredits(i),r=calcCapCredits(i);this.#Ur(null,!0,!0,t,r)}}else this.#_r(i,"syncSubtask","failed");return e}catch(e){throw loginfo(`##te processSyncSubtask: tId${this.#m} pCfg: ${JSON.stringify(t).slice(0,200)}`),loginfo(`##te err: ${JSON.stringify(e)}`),new Error(e)}}#xa(t,e){const r={browserListQuery:t.browserlist?t.browerlist:"",browsers:["chrome"],operatingSystems:["windows"],devices:["desktop"],httpVersion:Number(t.httpversion)>0?t.httpversion:"2"},a=this.#Pr(e,"httpbrowser");if(a.length>0){const t=[];a.forEach(e=>{const r=this.#br(e,"name");r||this.#_r("cfginvalid","actGetHttpHeaders","invalidName");const a={name:r},s=parseInt(this.#br(e,"minversion"));s>0&&(a.minVersion=s);const i=parseInt(this.#br(e,"maxversion"));i>0&&(a.maxVersion=i);const n=this.#br(e,"httpversion");n&&Number(n)>0&&(a.httpVersion=n),t.push(a)}),r.browsers=t}const s=this.#Pr(e,"httpos");if(s.length>0){const t=[];s.forEach(e=>{const r=this.#br(e,"os");r||this.#_r("cfginvalid","actGetHttpHeaders","invalidOsName"),t.push(r)}),r.operatingSystems=t}const i=this.#Pr(e,"httpdevice");if(i.length>0){const t=[];i.forEach(e=>{const r=this.#br(e,"device");r||this.#_r("cfginvalid","actGetHttpHeaders","invalidDeviceName"),t.push(r)}),r.devices=t}return r}async#Ea(t,e,r){try{let a="",s=[];if("element"===t){const t=this.#br(e,"type"),r=this.#Pr(e,"element",!0),i=this.#Fr(e,"elecontent"),n=this.#br(e,"try",!0,!1),o=n?parseInt(n):1,{elements:c}=await this.#ya(r,o);if(s=c,0===s.length){if("length"===this.#br(i,"type"))a="0";else if("element"===t&&e[appConfig.XML_ATTR_KEY].colname){const t=this.#br(e,"errname");this.#_r(t,"columnElement","invalidColname")}}else a=await this.#va(i,c)}else if("templstr"===t)a=this.#br(e,"templ");else if("property"===t){const t=this.#br(e,"subkeys");a=getSubkeysStrOfObject(r,this.#ga(t))}else if("get"===t){const t=this.#Fr(e,"get"),r=this.#br(t,"type");["cookie","httpheaders","localstorage"].includes(r)&&this.#Ge();const s=this.#Hr(t);let i=this.#f.page,n="page";const o={paras:this.#qe};if("screenshot"===r){const e=this.#Rr(t,"element");if(e){const{elements:t}=await this.#ya([e],1);if(!(t.length>0))throw new Error("##te no elements selected in get_screenshot");n="element",a=await GetPara.getParaInElement(s,t[0],o)}}else if("cookie"===r||"localstorage"===r)this.#Be=!0,o.origStateData=this.#f.origStateData,o.newStateData=this.#f.newStateData,o.domainNames=this.#Le;else if("httpheaders"===r){const e=s.headermethod;o.interceptionData=this.#Je,"genNewByHttpOptions"===e&&(o.genHeaderOptions=this.#xa(s,t));const r=[];this.#Pr(t,"httpheader",!0).forEach(t=>{let e=this.#br(t,"name");if(e=e.toLowerCase().trim(),e){const a=this.#br(t,"source"),s=this.#br(t,"value"),i=this.#Dr(t,"delete");r.push({name:e,source:a,value:s,deleteFlag:i})}}),o.newHttpHeaders=r}else"tabname"===r&&(o.execData=this.#f.execData);i&&"page"===n&&["content","evaluate","mhtml","pdf","screenshot","title","window"].includes(s.type)?a=await GetPara.getParaInPage(s,i,o):["addedtaskparas","cookie","execedtaskparas","file","httpheaders","localstorage","queuedcntwithparas","queuedtaskparas","random","sysparas","tabname"].includes(s.type)?a=await GetPara.getPara(s,o):["screenshot"].includes(s.type)&&"element"===n||this.#_r("cfginvalid","getPara","invalidType")}else if("subtask"===t){const t=this.#Fr(e,"subtask");loginfo(`##te to execsync subtaskCfg: ${JSON.stringify(t)}`),a=await this.#_a(t)}else{if("ocr"!==t)throw new Error(`##te Invalid content source type: ${t}`);{let t=this.#Fr(e,"ocrcfg");const r=this.#Pr(e,"element",!0),{elementSource:s,elements:i}=await this.#ya(r,1,!1);if(i.length>0&&(this.#Wr(s,"ocr"),a=await this.__processBrowserOcrCfg(t,i),"number"==typeof a&&a<0))throw new Error(`##te Error with ocr content: ${a}`)}}const i=this.#Rr(e,"decodefontsvg"),n=this.#Rr(e,"decodefontttf");(i||n)&&(a=await this.__decodeFontInContent(a,i,n));const o=this.#Rr(e,"transform");return o&&(a=await this.#ba(o,a),null===a&&this.#_r("cfginvalid","decodeFont","invalidFontchars")),{content:a,elements:s}}catch(t){throw loginfo(`##te getEleOrTemplTransform: tId${this.#m} pCfg: ${JSON.stringify(e).slice(0,200)}`),loginfo(`##te err: ${JSON.stringify(t)}`),new Error(t)}}#Aa(t,e){let r="";if(this.#f.execData[t]&&this.#f.execData[t].length>0){let a=this.#f.execData[t].length,s=this.#f.execData[t][a-1][e];r=String("boolean"==typeof s?Number(s):s)}return r}async#Oa(t,e,r,a){const s=this.#br(t,"valerrname"),i=this.#br(t,"pattern");try{this.#Ir(t);const n=this.#br(t,"type"),o=this.#br(t,"colname");let{content:c}=await this.#Ea(n,t,r);if(0===c.length){this.#Dr(t,"completed")&&(c=this.#Aa(e,o))}if("ignore"!==s&&i){const e=this.#br(t,"flags"),r=this.#na(i,e);r&&!c.match(r)&&this.#_r(s,"columnContent","validate")}this.#Dr(t,"setvar")&&this.#Ar(o,c);const l=!a&&this.#Dr(t,"discarded"),p={};if(l)return null;{let e;const r=this.#br(t,"datatype");return"number"===r?e=this.#Lr(c,"round"):"boolen"===r&&(e=this.#Mr(c)),p[o]="string"===r?c:e,p}}catch(e){throw this.#f.credits>=0&&(loginfo(`##te processColumnCfg: tId${this.#m}, fCfg ${JSON.stringify(t).slice(0,100)}`),loginfo(`##te err: ${JSON.stringify(e)}`)),new Error(e)}}async#Ia(t){const e=this.#br(t,"tabname");if("string"!=typeof e||0===e.length)throw new Error(`##te Invalid table name: ${e}`);this.#f.execData[e]||(this.#f.execData[e]=[]);const r={},a=this.#Pr(t,"column",!0);for(let t of a){const a=this.#br(t,"colname");if(!(this.#je.length>0)||this.#je.includes(a))try{let s=await this.#Oa(t,e);s||void 0===r[a]||delete r[a],Object.assign(r,s),a.startsWith("cx")&&loginfo(`##dbg extract: ${a}=${r[a]}`)}catch(e){throw this.#f.credits>=0&&loginfo(`##te extract column tId${this.#m} fCfg: ${JSON.stringify(t).slice(0,200)}`),e}}return this.#f.execData[e].push(r),!0}#Ta(t,e){t&&"object"==typeof t||this.#_r(e,"arrayItem","notNormalObject")}#ga(t){if(!t.trim())return[];const e=t.trim().split(".");if(!e.every(t=>!!t))throw this.#_r("cfginvalid","actionExtractArray","invalidSubkeys"),new Error("unreachable");return e}#ha(t,e,r){if("string"==typeof t&&(t=(0,import_utils11.getJsonParseOfStr)(t)),t&&"object"==typeof t){const a="*"===e?Array.from(Object.keys(t)):e.split(",");for(let e of a){r&&e.includes("-")&&(e=e.replaceAll(/-/g,"_"));const a=t[e];if(a){const t="string"==typeof a?a:JSON.stringify(a);this.#Ar(e,t)}}return!0}return!1}#Da(t,e,r,a){for(const s of e)if(r){const e=typeof s;if("object"===e&&s)t.push(s);else if("string"===e){const e=(0,import_utils11.getJsonParseOfStr)(s);"object"==typeof e&&e?t.push(e):this.#_r(a,"actionExtractArray","invalidArrayItems1")}else this.#_r(a,"actionExtractArray","invalidArrayItems2")}else t.push((0,import_utils11.getStringOfObj)(s));return!0}#Pa(t,e,r,a,s,i,n,o){let c=this.#f.execData[t];if(!Array.isArray(c))return[];const l=e?new RegExp(e):null,p=[];for(const[e,g]of c.entries()){if(l&&"string"==typeof g.requestUrl&&!g.requestUrl.match(l))continue;if(a&&this.#Gr(t,e))continue;r&&this.#Kr(t,e);let c=getSubkeysValueOfDataRecord(g,s);c?(n&&("string"==typeof c&&(c=(0,import_utils11.getJsonParseOfStr)(c)),this.#Ta(c,o)),i&&Array.isArray(c)?this.#Da(p,c,n,o):this.#Da(p,[c],n,o)):this.#_r(o,"arryItemsFromTabname","empty")}return p}#Na(t,e,r){let a=(0,import_utils11.getJsonParseOfStr)(t);Array.isArray(a)?e.length>0&&(a=a.map(t=>(0,import_utils11.getMemberOfObject)(t,e))):e.length>0&&(a=(0,import_utils11.getMemberOfObject)(a,e)),this.#Ta(a,r),Array.isArray(a)||(a=[a]);const s=[];return this.#Da(s,a,!0,r),s}async#Ra(t){const{list:e,requrl:r,setprocessed:a,skipprocessed:s,subkeys:i,arrayinrec:n,keys:o,tabname:c,varname:l,idxname:p,setkeys:g,maxloops:h,errname:u}=this.#Hr(t),d=p.endsWith("0"),f=this.#ga(i);let m;m=isDataTableName(e)?this.#Pa(e,r,a,s,f,n,!0,u):this.#Na(e,f,u);const y=parseInt(h);y>0&&m.length>y&&(m=m.slice(0,y));let C=this.#f.execData[c];if(C||(C=[],this.#f.execData[c]=C),0===m.length)return!0;const v=this.#Pr(t,"column",!1),b="*"===o?Array.from(Object.keys(m[0])):o?o.split(","):[],w=v.map(t=>{const e=this.#br(t,"colname"),r=this.#br(t,"type");return{colName:e,filterFlag:"property"===r&&this.#Dr(t,"filter"),jsonFlag:!(!this.#Ie||"property"!==r)&&this.#Dr(t,"json"),columnCfg:t}});for(const[t,e]of m.entries()){let r=!0;const a={};l&&this.#Ar(l,JSON.stringify(e)),p&&this.#Ar(p,String(d?t:t+1)),g&&e&&this.#ha(e,g,!0);for(const t of b){const r=getSubkeysStrOfObject(e,[t]);a[t]=r}for(let{colName:t,filterFlag:s,jsonFlag:i,columnCfg:n}of w)try{if(this.#je.length>0&&!this.#je.includes(t))continue;let o=await this.#Oa(n,c,e,s);if(o){const e=o[t];if(s){if("string"==typeof e&&!this.#Mr(e)){r=!1;break}}else if(i){let r=(0,import_utils11.getJsonParseOfStr)(e);r=r||e,a[t]=r}else Object.assign(a,o)}else void 0!==a[t]&&delete a[t];t.startsWith("cx")&&loginfo(`##dbg extract: ${t}=${a[t]}`)}catch(t){throw this.#f.credits>=0&&loginfo(`##te extract column tId${this.#m} fCfg: ${JSON.stringify(n).slice(0,200)}`),t}r&&C.push(a)}return!0}async#Fa(t,e,r,a){try{const s=Object.assign({},this.#qe,{authInfo:null,sysParas:null}),i={vars:s,tabName:r,maxLoops:t,errName:a,execData:this.#f.execData};if(e&&this.#f.page){const t=await this.#f.page.content();i.html=t}return i}catch(t){return null}}#ja(t){if(!t||"object"!=typeof t||!t.execData||"object"!=typeof t.execData)return!1;const{execData:e,errName:r}=t;for(const t of Object.keys(e))if(!isDataTableName(t))return!1;for(const t of Object.values(e))if(!Array.isArray(t)||!t.every(t=>t&&"object"==typeof t))return!1;return!!(void 0===r||"string"==typeof r&&r)}async#$a(t){const e=this.#Hr(t),{name:r,others:a,tabname:s,maxloops:i,errname:n}=e;if(!r)return!0;try{const t=parseInt(i),e=a.includes("html"),o=await this.#Fa(t,e,s,n);if(!o)return this.#_r(n,"actionExtractScript","invalidInData"),!1;const c=await LsdScript.execExtractScript(o,r,this.#Oe);if(!this.#ja(c))return this.#_r(n,"actionExtractScript","invalidResult"),!1;c.errName&&(c.vars?.extractError&&logwarn(`##te tid ${this.#m} kid ${this.#y} action_extract_script error: ${c.vars.extractError}`),"ignore"===c.errName?this.#_r(n,"actionExtractScript","resultError1"):this.#_r(c.errName,"actionExtractScript","resultError2"));const l=this.#f.execData,p=c.execData;for(const t of Object.keys(p))"string"==typeof t&&isDataTableName(t)&&(l[t]=p[t]);if(c.vars&&"object"==typeof c.vars)for(const t of Object.keys(c.vars))"string"==typeof t&&"string"==typeof c.vars[t]&&t.startsWith("extract")&&this.#Ar(t,c.vars[t]);return!0}catch(t){return logwarn(t.message),this.#_r(n,"actionExtractScript","pesaException"),!1}}async#La(t){let e="rowspan",r=this.#Nr(`*[${e}]`);const{elements:a}=await this.#Ma(r);if(a.length>0)for(const t of a){const r=await t.attribute(e);if(!r&&parseInt(r)>1)return!1}e="colspan",r=this.#Nr(`*[${e}]`);const{elements:s}=await this.#Ma(r);if(s.length>0)for(const t of s){const r=await t.attribute(e);if(!r&&parseInt(r)>1)return!1}return!0}#qa(t,e,r,a=!0){let s=a&&"camel"===e?t.replaceAll(/[^\w|\s]/g,"").replaceAll(/_/g," "):t;if(r&&"string"==typeof r)return r;if("header"===e)return s;{const t=s.split(/\s+/);let e=t[0].toLowerCase();for(const r of t.slice(1))e=`${e}${r[0].toUpperCase()}${r.slice(1).toLowerCase()}`;return e}}async#Ua(t,e,r,a,s){const i=[],n=[];let o=!1,c=1,l="",p=1,g=this.#Nr("./thead/tr");const{elements:h}=await this.#Ma(g);if(h.length>1)return this.#_r(s,"actionExtractTable","manyTheadTrs"),!0;if(1===h.length){o=!0,g=this.#Nr("./thead/tr/th");const{elements:r}=await this.#Ma(g);if(0===r.length)return this.#_r(s,"actionExtractTable","noTheadTrTh"),!0;for(const[a,s]of r.entries()){const r=(await s.textContent()).trim(),n=this.#qa(r||"space"+c++,t,e[a]);i.push(n)}}l="./tr",g=this.#Nr(l);let{elements:u}=await this.#Ma(g);if(0===u.length){l="./tbody/tr",g=this.#Nr(l);let{elements:t}=await this.#Ma(g);u=t}if(u.length<=1)return this.#_r(s,"actionExtractTable","noRecord"),!0;if(!o){g=this.#Nr(`${l}[${p}]/*`);let{elements:r}=await this.#Ma(g);if(0===r.length)return this.#_r(s,"actionExtractTable","noTr"),!0;for(const[a,s]of r.entries()){const r=(await s.textContent()).trim(),n=this.#qa(r||"space"+c++,t,e[a]);i.push(n)}p++,u=u.slice(1)}const d=i.length;for(const t of u.keys()){if(a>0&&t>=a)break;g=this.#Nr(`${l}[${p+t}]/*`);let{elements:e}=await this.#Ma(g);if(e.length!==d)return this.#_r(s,"actionExtractTable","differentColumns"),!0;const r={};for(const t of e.keys()){const a=await e[t].textContent();r[i[t]]=a}n.push(r)}const f=this.#f.execData[r];return Array.isArray(f)?n.forEach(t=>f.push(t)):this.#f.execData[r]=n,!0}async#Ja(t,e,r,a,s){const i=[];let n=0,o="",c=1;o="./tr";let l=this.#Nr(o),{elements:p}=await this.#Ma(l);if(0===p.length){o="./tbody/tr",l=this.#Nr(o);let{elements:t}=await this.#Ma(l);p=t}if(0===p.length)return this.#_r(s,"actionExtractTable","noTrElments"),!0;for(const r of p.keys()){let l=this.#Nr(`${o}[${r+1}]/th`),{elements:p}=await this.#Ma(l);if(1!==p.length)return this.#_r(s,"actionExtractTable","noThElements"),!0;const g=(await p[0].textContent()).trim(),h=this.#qa(g||"space"+c++,t,e[r]);let u=this.#Nr(`${o}[${r+1}]/td`),{elements:d}=await this.#Ma(u);if(0===d.length)return this.#_r(s,"actionExtractTable","noTdElements"),!0;if(0===r){for(const t of d.keys()){if(a>0&&t>=a)break;const e=await d[t].textContent(),r={};r[h]=e,i.push(r)}n=i.length}else{if(d.length<n)return this.#_r(s,"actionExtractTable","differentVertCols"),!0;for(const t of d.keys()){if(t>=n)break;const e=await d[t].textContent();i[t][h]=e}}}const g=this.#f.execData[r];return Array.isArray(g)?i.forEach(t=>g.push(t)):this.#f.execData[r]=i,!0}async#Ha(t){const{orientation:e,check:r,tabname:a,keyformat:s,colnames:i,maxloops:n,errname:o}=this.#Hr(t),c=i?i.split(","):[],l=this.#Pr(t,"element",!0),p=parseInt(n);if(p<0)return!1;if(0===l.length)return this.#_r("logicerror","actionExtractTable","noEleCfg"),!1;const{elementSource:g,elements:h}=await this.#Ma(l[0]);if(0===h.length)return this.#_r(o,"actionExtractTable","noTables"),!0;const u=h[0];if("browser"===g?this.#f.browserElesStack.push(u):"xml"===g?this.#f.cheerioElesStack.push(u):(0,import_utils11.unreachable)(g),this.#f.loopsStack.push(u),r){if(!await this.#La("vertical"===e))return this.#_r("cfginvalid","actionExtractTable","notExtractable"),!1}return"vertical"===e?await this.#Ja(s,c,a,p,o):await this.#Ua(s,c,a,p,o),this.#f.loopsStack.pop(),"browser"===g?this.#f.browserElesStack.pop():"xml"===g?this.#f.cheerioElesStack.pop():(0,import_utils11.unreachable)(g),!0}async#ar(t){this.#Ir(t);let e=this.#br(t,"subtype",!1,!1);try{if(e)if("array"===e)await this.#Ra(t);else if("script"===e)await this.#$a(t);else{if("table"!==e)return this.#_r("cfginvalid","actionExtract","logicError"),!1;await this.#Ha(t)}else await this.#Ia(t);return!0}catch(t){throw t}}#Ba(t){try{const e=JSON.parse(t);return e&&"object"==typeof e?e:null}catch(t){this.#_r("cfginvalid","actionGoto","invalidHeaders")}}async#sr(t){const e=this.#f.page;if(!e)return this.#_r("cfginvalid","actionGogo","noPage"),!1;this.#f.browserElesStack.length>0&&this.#_r("cfginvalid","actionGoto","inLoopOfBrowserElements");let r="";try{this.#Ir(t);const a=this.#br(t,"type");r=this.#br(t,"url");const s=this.#br(t,"timeout"),i=parseInt(s),n=this.#br(t,"wait"),o=this.#Dr(t,"reuse"),c=this.#Dr(t,"encodeuri"),l=this.#br(t,"headers"),p=this.#br(t,"referer");if(c&&(r=encodeURI(r)),!this.#Or(r))throw new Error(`##te Invalid url: ${r} when trying to open this page`);if(loginfo(`##te goto url ${r}`),o){if(e.url().includes(r))return await this.#qr(n),this.#Ur(t),e}if(this.#Ke=r,l.trim()){const t=this.#Ba(l.trim());t&&await e.setExtraHTTPHeaders(t)}this.#kr(e,a);const g=this.#Jr(t,a);return g&&g.popupFlag?await this.processNewPageLoginCaptcha(g,async(t,e,r)=>{r?await t.goto(e,{waitUntil:"load",timeout:i,referer:r}):await t.goto(e,{waitUntil:"load",timeout:i})},[e,r,p]):await e.goto(r,{timeout:i}),g&&g.currentFlag&&await this.#Vr(e,g,"current"),await this.#qr(n),this.#Ur(t),e}catch(t){if(loginfo(`##te kId${this.#y} goto: ${r}`),-43!==this.#f.credits&&(logerr(`##te kId${this.#y} error credits ${this.#f.credits} in performGotoAction`),logerr(t)),this.#f.credits>=0){const e=t.message?t.message:"";if(e.includes("net::ERR_INTERNET_DISCONNECTED"))this.#wr(-71);else if(e.includes("net::ERR_NAME_NOT_RESOLVED")){await(0,import_utils11.checkDns)(appConfig.CHECK_DNS_DOMAIN)?this.#wr(-69):this.#wr(-71)}else e.includes("net::ERR_CONNECTION_TIMED_OUT")?this.#wr(-72):e.includes("net::ERR_CONNECTION_REFUSED")||e.includes("net::ERR_CONNECTION_RESET")?this.#wr(-98):e.includes("net::ERR_PROXY_CONNECTION_FAILED ")||e.includes("net::ERR_EMPTY_RESPONSE")||e.includes("net::ERR_TIMED_OUT")||e.includes("net::ERR_TUNNEL_CONNECTION_FAILED")?this.#wr(-86):e.includes("net::ERR_INVALID_AUTH_CREDENTIALS")?this.#wr(-88):(e.includes("Navigation timeout"),this.#wr(-85))}throw new Error(t)}}async#Va(t,e=10){let r=null;for(let a=0;a<e;a++)try{return await t.hover(),!0}catch(t){loginfo(t),await(0,import_utils11.sleep)(2e3),r=t}throw r}async#ir(t){const e=this.#f.page;if(!e)return this.#_r("cfginvalid","actionHover","noPage"),!1;this.#Ir(t);const r=parseInt(this.#br(t,"try")),a=this.#br(t,"errname");try{const s=this.#Pr(t,"element",!0),{elementSource:i,elements:n}=await this.#ya(s,r);if(this.#Wr(i,"hover"),0===n.length)return this.#_r(a,"actionHover","noElements"),e;this.#$r()&&await e.bringToFront(),logdbg(`##te pageIdx${this.#jr().pageIdx} hover`),await this.#Va(n[0]);const o=this.#br(t,"wait");return await this.#qr(o),this.#Ur(t),e}catch(t){return loginfo(t),this.#_r("other","actionHover","phaException"),e}}async#Wa(t){this.#Ir(t);const e=this.#br(t,"type");let r=!1;if(["element","templstr"].includes(e))try{"templstr"===e&&this.#Ge();let a="";a=(await this.#Ea(e,t)).content,r=this.#Mr(a)}catch(t){throw t}finally{this.#ze()}else{if("else"!==e)throw new Error("##te Invalid type(condition)");r=!0}if(r){const e=this.#Pr(t,"action");await this.#Ka(e)}return r}async#nr(t){this.#Ir(t);const e=this.#Pr(t,"condition");for(let t of e)if(await this.#Wa(t))break;return!0}async#or(t){if(!this.#f.page)return this.#_r("cfginvalid","actionInput","noPage"),!1;this.#Ir(t);const e=this.#br(t,"content"),r=this.#Dr(t,"replace"),a=this.#Dr(t,"enter"),s=parseInt(this.#br(t,"try")),i=this.#br(t,"errname"),n=this.#Pr(t,"element",!0);try{const{elementSource:o,elements:c}=await this.#ya(n,s);if(this.#Wr(o,"input"),0===c.length)return this.#_r(i,"actionInput","noElements"),!1;await c[0].input(e,{replace:r,enter:a});const l=this.#br(t,"wait");return await this.#qr(l),this.#Ur(t),!0}catch(t){return logerr(t),!1}}#Hr(t,e=!0){const r=Object.assign({},t[appConfig.XML_ATTR_KEY]);if(!r||"object"!=typeof r)throw new Error("Invalid origCfg in transformStrAttrsInCfg");if(!e)return r;for(const t of Object.keys(r))"string"==typeof r[t]&&r[t].includes("${")&&(r[t]=this.#Tr(r[t],this.#qe));return r}#Ga(t){const e=[];for(const r of t){const{type:t,method:a,url:s,resourcetype:i,postdata:n}=r,o={};if(a&&"all"!==a&&(o.methods=[a.toUpperCase()]),s&&(o.url=new RegExp(s)),i&&"all"!==i&&(o.resourceTypes=[i]),n&&(o.postData=new RegExp(n)),"abort"===t){const t={requestMatch:o,action:"abort"};e.push(t)}else{if("fufill"!==t)throw new Error(`Invalid action type ${t}`);{const{fulfill:t}=r,a={requestMatch:o,action:"fulfill",fulfill:t};e.push(a)}}}return e}#za(t){const e=[];for(const r of t){const{type:t,method:a,url:s,resourcetype:i,postdata:n,minsize:o,maxsize:c}=r,l={};a&&"all"!==a&&(l.methods=[a.toUpperCase()]),s&&(l.url=new RegExp(s)),i&&"all"!==i&&(l.resourceTypes=[i]),n&&(l.postData=new RegExp(n));const p={},g=parseInt(o);g>0&&(p.minLength=g);const h=parseInt(c);if(h>0&&(p.maxLength=h),"cache"===t){const{tabname:t,contenttype:a,requestheaders:s,responseheaders:i,cacheheaders:n}=r,o=Number(t.slice(4)),c=n&&o<=7999&&(this.#m<1e6||!this.#xe.capName),g={requestMatch:l,responseMatch:p,handler:responseCacheCb,handlerOptions:{execData:this.#f.execData,contentType:a,tabname:t,requestHeadersFlag:s,responseHeadersFlag:i,cacheHeadersFlag:c,interceptionData:this.#Je,debugFlag:this.#Ie}};e.push(g)}else{if("save"!==t)throw new Error(`Invalid response type ${t}`);{const{basedir:t,encoding:a,extname:s,hashmethod:i,hostnameparts:n,params:o,pathtype:c,tabname:g,validextnames:h}=r,u={requestMatch:l,responseMatch:p,handler:responseSaveCb,handlerOptions:{execData:this.#f.execData,baseDir:t,pathType:c,hashMethod:i,hostnameParts:parseInt(n),extname:s,validExtnames:h,params:o,encoding:a,tabname:g}};e.push(u)}}}return e}async#cr(t){const e=this.#f.page;if(!e)return this.#_r("cfginvalid","actionIntercept","noPage"),!1;this.#Ir(t);const r=this.#br(t,"subtype");let a=this.#Pr(t,"request"),s=this.#Pr(t,"response");try{if(a=a.map(t=>this.#Hr(t)),s=s.map(t=>this.#Hr(t)),"set"===r){if(a.length<=0&&s.length<=0&&this.#_r("cfginvalid","actionIntercept","noCfgs"),a.length>0){const t=this.#Ga(a);await e.setRequestInterception(t)}if(s.length>0){const t=this.#za(s);await e.setResponseInterception(t)}}else"clear"===r&&(await e.clearRequestInterceptions(),await e.clearResponseInterceptions());return!0}catch(t){return logerr(t),!1}}async#pr(t){this.#Ir(t);try{const e=this.#br(t,"errname");let r=this.#br(t,"roundtype"),a=this.#Lr(this.#br(t,"from"),r),s=this.#Lr(this.#br(t,"to"),r),i=this.#Lr(this.#br(t,"step"),r),n=this.#br(t,"varname"),o=this.#Lr(this.#br(t,"maxloops"),r);if(o<0)return!1;let c=0;for(let e=a;e<=s&&!(o&&c++>=o);e+=i){this.#f.loopsStack.push(e),this.#Ar(n,String(e));const r=this.#Pr(t,"action");if(await this.#Ka(r),this.#f.loopsStack.pop(),this.#f.continueFlag&&(this.#f.continueFlag=!1),this.#f.breakFlag){this.#f.breakFlag=!1;break}}return c<1&&this.#_r(e,"actionLoopfor","zeroLoops"),!0}catch(t){throw t}}async#Ma(t){try{const e=this.#br(t,"loc").trim(),r=this.#vr(t),a=this.#Dr(t,"absolute"),s=this.#Pr(t,"iframe",!1).map(t=>this.#Hr(t)).map(t=>{const{srcprefix:e,loc:r}=t;return{src:e,selector:r}}),i=this.#f.page,n={elementSource:r,elements:[]};if("browser"===r){if(!i)throw new Error("Cannot get elements from null browser page");if(0===this.#f.browserElesStack.length)n.elements=await i.findElements(e,s);else{const t=this.#f.browserElesStack.slice(-1)[0];n.elements=await t.findElements(e,s,a)}return n}if("xml"===r){if(s.length>0)throw new Error("Iframe config is invalid in cheerio source");let t=this.#f.cheerioPage;if(!t){if(!i)throw new Error("Please set CheerioPage first, from which to select elememnts");const e=await i.content();e.length>10&&(this.#xr(e,!0),t=this.#f.cheerioPage)}if(!t)throw new Error("Cannot get elements from null cheerioPage");if(0===this.#f.cheerioElesStack.length)n.elements=await t.findElements(e);else{const t=this.#f.cheerioElesStack.slice(-1)[0];n.elements=await t.findElements(e,s,a)}return n}(0,import_utils11.unreachable)(r)}catch(e){throw loginfo(`##te processElementCfg: tId${this.#m} eleCfg: ${JSON.stringify(t).slice(0,200)}`),new Error(e)}}async#ya(t,e=1,r=!0){try{if(0===t.length)throw new Error("No element tags");const a={elementSource:"browser",elements:[]};for(let s=0;s<e;s++){let e="";const i=[];for(const a of t){const{elementSource:t,elements:s}=await this.#Ma(a);if(e&&e!=t)throw new Error("Element sources of all element tags must be the same");if(e=t,s.length>0&&(s.forEach(t=>i.push(t)),r))break}if(e&&(a.elementSource=e),i.length>0)return a.elements=i,a;s>0&&(loginfo(`##tmp ${s} try failed in getEleOrTemplTransform`),await(0,import_utils11.sleep)(1e3))}return a}catch(e){throw loginfo(`##te processElementCfgs: eleCfgs: ${JSON.stringify(t).slice(0,200)}`),new Error(e)}}async#gr(t){if(!this.#f.page)return this.#_r("cfginvalid","actionLoopineles","noPage"),!1;this.#Ir(t);const e=this.#br(t,"varname"),r=e.startsWith("position"),a=this.#br(t,"errname"),s=this.#Pr(t,"element",!0);let i=this.#Lr(this.#br(t,"maxloops"),"round"),n=this.#Lr(this.#br(t,"start"),"round"),o=this.#Lr(this.#br(t,"end"),"round"),c=this.#Lr(this.#br(t,"step"),"round");if(c<1&&(c=1),i<0)return!1;const{elementSource:l,elements:p}=await this.#ya(s,1),g=p.length;if(0===g)return this.#_r(a,"actionLoopineles","noElements"),!0;n<=0&&(n+=g),o<=0?o+=g:o>g&&(o=g);let h=0;for(let a=n-1;a<o&&!(i&&h>=i);a+=c){e&&this.#Ar(e,String(r?a+1:a));const s=p[a];"browser"===l?this.#f.browserElesStack.push(s):"xml"===l?this.#f.cheerioElesStack.push(s):(0,import_utils11.unreachable)(l),this.#f.loopsStack.push(s);const i=this.#Pr(t,"action");if(await this.#Ka(i),this.#f.loopsStack.pop(),"browser"===l?this.#f.browserElesStack.pop():"xml"===l?this.#f.cheerioElesStack.pop():(0,import_utils11.unreachable)(l),h++,this.#f.continueFlag&&(this.#f.continueFlag=!1),this.#f.breakFlag){this.#f.breakFlag=!1;break}}return!0}async#hr(t){this.#Ir(t);let e=this.#br(t,"split");const r=this.#Dr(t,"trim"),a=this.#br(t,"errname"),s=this.#br(t,"list"),i=this.#br(t,"requrl"),n=this.#Dr(t,"setprocessed"),o=this.#Dr(t,"skipprocessed"),c=this.#br(t,"subkeys"),l=this.#Dr(t,"arrayinrec"),p=this.#ga(c),g=this.#br(t,"varname"),h=this.#br(t,"idxname"),u=this.#br(t,"setkeys"),d=h.endsWith("0");let f=[];if("array"===e){const t=(0,import_utils11.getJsonParseOfStr)(s);if(Array.isArray(t)&&t.length>0)f=t.map(t=>getSubkeysStrOfObject(t,p));else{if(Array.isArray(t)||!(p.length>0))return this.#_r(a,"actionLoopineles","array"),!1;{const e=(0,import_utils11.getMemberOfObject)(t,p);if(!(Array.isArray(e)&&e.length>0))return this.#_r(a,"actionLoopineles","array"),!1;f=e.map(t=>(0,import_utils11.getStringOfObj)(t))}}}else if(isDataTableName(s)){if(f=this.#Pa(s,i,n,o,p,l,!1,a),!Array.isArray(f))return this.#_r(a,"actionLoopineles","tabname"),!1}else{let t;try{t=new RegExp(e)}catch(e){throw new Error(`##te Invalid regexp: ${t}`)}f=r?s.trim().split(t).map(t=>t.trim()).filter(t=>t.length>0):s.split(t),p.length>0&&(f=f.map(t=>getSubkeysStrOfObject((0,import_utils11.getJsonParseOfStr)(t),p)))}let m=this.#Lr(this.#br(t,"maxloops"),"round");m>0&&f.length>m&&(f=f.slice(0,m)),f.length<1&&this.#_r(a,"actionLoopinstr","zeroLoops");for(let[e,r]of f.entries()){this.#f.loopsStack.push(r),g&&this.#Ar(g,r),h&&this.#Ar(h,String(d?e:e+1)),u&&this.#ha(r,u,!0);const a=this.#Pr(t,"action");if(await this.#Ka(a),this.#f.loopsStack.pop(),this.#f.continueFlag&&(this.#f.continueFlag=!1),this.#f.breakFlag){this.#f.breakFlag=!1;break}}return!0}async#lr(t){this.#Ir(t);const e=this.#br(t,"subtype"),r=this.#Dr(t,"iswhile"),a=this.#br(t,"varname"),s="element"===e&&this.#Dr(t,"click"),i=(this.#Dr(t,"navigate"),"element"===e&&this.#Dr(t,"gen")),n="element"===e&&this.#Dr(t,"cap"),o=s?this.#br(t,"errname"):"ignore",c=s?this.#br(t,"wait"):"-1";let l=this.#Lr(this.#br(t,"maxloops"),"round");if(l<0)return!1;let{content:p,elements:g}=await this.#Ea(e,t),h=0;for(;0===h&&!r||this.#Mr(p);){a&&this.#Ar(a,String(h)),"element"!==e||!s||this.#Re.includes("click")||this.#Re.includes("operate")||(g.length<=0?this.#_r(o,"actionLoopdowhile","noElements"):(await g[0].click(),this.#Ur(t,i,n))),this.#f.loopsStack.push(h);const r=this.#Pr(t,"action");if(await this.#Ka(r),this.#f.loopsStack.pop(),this.#f.continueFlag&&(this.#f.continueFlag=!1),this.#f.breakFlag){this.#f.breakFlag=!1;break}if(await this.#qr(c),h++,l&&h>=l)break;let u=await this.#Ea(e,t);p=u.content,g=u.elements}return!0}async#Ya(t){const e=this.#br(t,"cookies"),r=this.#br(t,"localstorage"),a=this.#br(t,"headers"),s=this.#br(t,"userdata"),i=this.#br(t,"duration"),{cookies:n,origins:o,userData:c}=this.#f.origStateData,l={cookies:[],origins:[],headers:{},userData:{}};let p;if("orig"===e)l.cookies=n;else if("new"===e)if(this.#f.page)l.cookies=await this.#f.page.cookies();else{if(!this.#f.standaloneApiContext)throw new Error(`##templ ${this.#m} has no page when getting stateData of page`);p||(p=await this.#f.standaloneApiContext.stateData()),l.cookies=p.cookies}if("orig"===r)l.origins=o;else if("new"===r)if(this.#f.page)l.origins=await this.#f.page.localStroage();else{if(!this.#f.standaloneApiContext)throw new Error(`##templ ${this.#m} has no page when getting stateData of page`);p||(p=await this.#f.standaloneApiContext.stateData()),l.origins=p.origins}const g=this.#Je;g[a]&&(l.headers=Object.assign({},g[a])),"orig"===s?l.userData=c:"new"===s&&(l.userData=Object.assign({},this.#qe.userData)),i&&(l.expireTime=(0,import_utils11.getCurrentUnixTime)()+parseInt(i)),this.#f.newStateData=l}async _performGetstatedataInMisc(t){return await this.#Ya(t)}async#ur(t){const e=this.#f.page;if(!e)return this.#_r("cfginvalid","actionScroll","noPage"),!1;this.#Ir(t);const r=this.#br(t,"subtype");let a=["by","to"].includes(r)?parseInt(this.#br(t,"height")):0;const s=["by","to"].includes(r)?this.#br(t,"unit"):"none";let i=0,n="";"bodypct"===s?(n=await e.windowMember(["document","body","scrollHeight"]),i=parseInt(n)):"screenpct"===s?n=await e.windowMember(["screen","height"]):"windowpct"===s&&(n=await e.windowMember(["innerHeight"]));const o=n?parseInt(n):1;if(["bodypct","screenpct","windowpct"].includes(s)){if("number"!=typeof o||o<=0)throw new Error("##te invalid unitInt in performScrollAction");a=Math.floor(a*o/100)}let c="by"===r?parseInt(this.#br(t,"maxtimes")):0;const l="by"===r?parseInt(this.#br(t,"interval")):0;if("by"===r){if(0===c){if(i<=0){const t=await e.windowMember(["document","body","scrollHeight"]);i=parseInt(t)}c=Math.ceil(i/a-1)}else c>200?c=200:c<0&&(c=10);for(let r=0;r<c;r++){await e.scrollBy(0,a),await(0,import_utils11.sleep)(l);const r=this.#Pr(t,"element");if(r&&r.length>0){const{elementSource:t,elements:e}=await this.#ya(r,1);if(this.#Wr(t,"scrollBy"),e.length>0)break}}}else if("to"===r)await e.scrollTo(0,a);else if("intoview"===r){const e=this.#Pr(t,"element",!0),{elementSource:r,elements:a}=await this.#ya(e,1);if(this.#Wr(r,"scrollIntoView"),a.length<=0){const e=this.#br(t,"errname");return this.#_r(e,"actionScrollIntoview","noElements"),!1}await a[0].scrollIntoView()}return this.#Ur(t),!0}async#Xa(t,e,r,a,s=1){if(t.length<=0)throw new Error("##te No element cfg in select action");const{elementSource:i,elements:n}=await this.#ya(t,s);if(this.#Wr(i,"select"),n.length<=0)return this.#_r(a,"actionSelect","noElements"),!1;const o={type:"value"},c=r.split(",");return"index"===e?(o.type,o.indexes=c.map(t=>parseInt(t))):"label"===e?(o.type,o.labels=c):"value"===e?(o.type,o.values=c):(0,import_utils11.unreachable)(e),await n[0].select(o),!0}async#dr(t){const e=this.#f.page;if(!e)return this.#_r("cfginvalid","actionSelect","noPage"),!1;e.title,this.#Ir(t);const r=this.#br(t,"selecttype"),a=this.#br(t,"selectval"),s=parseInt(this.#br(t,"try")),i=this.#br(t,"errname"),n=this.#Pr(t,"element",!0);await this.#Xa(n,r,a,i,s);const o=this.#br(t,"wait");return await this.#qr(o),this.#Ur(t),!0}async#ea(t,e,r){try{let a=JSON.parse(t);if(!a||"object"!=typeof a)return null;for(const t of e){const e=this.#br(t,"key");let s=this.#br(t,"value");"__this__"!==s&&"__self__"!==s||(s=JSON.stringify(a));const i=this.#br(t,"datatype"),n=this.#br(t,"operate"),o=this.#br(t,"varname");if("delete"===n){delete a[e];continue}if(("push"===n||"unshift"===n)&&!Array.isArray(a))return null;const c=this.#Rr(t,"transform");c&&(s=await this.#ba(c,s)),o&&(o===r?a=JSON.parse(s):this.#Ar(o,s));const l=this.#Zr(s,i);"set"===n?a[e]=l:"push"===n?a.push(l):"unshift"===n?a.unshift(l):"discard"===n||(0,import_utils11.unreachable)(n)}return logerr("##tmp data: ",a),a}catch(t){return null}}async#fr(t){this.#Ir(t);const e=this.#br(t,"subtype"),r=e.slice(0,1).toUpperCase()+e.slice(1),a=this.#br(t,"varname"),s=this.#br(t,"setkeys"),i=this.#br(t,"errname"),n=this.#br(t,"valerrname"),o=this.#br(t,"pattern"),c=this.#br(t,"defaultval");let l=this.#br(t,"path"),p="";try{if(["element","get","templstr","subtask","ocr"].includes(e)){"templstr"===e&&this.#Ge();p=(await this.#Ea(e,t)).content}else if("object"===e){this.#Ge();const e=this.#br(t,"data"),r=this.#Pr(t,"object",!0),s=await this.#ea(e,r,a);p=s?JSON.stringify(s):c}else if("dbquery"===e)p=await this.__processDbquery(t,c);else{if("file"!==e)throw new Error(`##te Invalid subtupe ${e} in setvar action`);{const e=this.#Fr(t,"file");let a=this.#br(e,"path");const s=this.#br(e,"encoding");a.includes("..")&&this.#_r("cfginvalid",`actionSetvar${r}`,"invalidSourceFilename"),path5.isAbsolute(a)?appConfig.cfg.inputFileDirPart&&!path5.dirname(a).split(path5.sep).includes(appConfig.cfg.inputFileDirPart)&&"ignore"===i&&this.#_r("normal",`actionSetvar${r}`,"notSecurePath"):a=path5.join(appConfig.cfg.baseFileDir,a),p=fs6.readFileSync(a,{encoding:s})}}if("ignore"!==n&&o){const e=this.#br(t,"flags"),a=this.#na(o,e);a&&!p.match(a)&&this.#_r(n,`actionSetvar${r}`,"validate")}return!p&&c&&(p=c),a&&this.#Ar(a,p),s&&p&&this.#ha(p,s,!0),l&&(l=this.#ca(l),fs6.writeFileSync(l,p)),!0}catch(t){return loginfo(t),t.message.includes("invalidTaskParas")?(this.#_r("parasinvalid","actionSetvar","invalidParasstr"),!1):(p="",this.#_r(i,`actionSetvar${r}`,"psaException"),!1)}finally{this.#ze()}}async#mr(t){this.#Ir(t);const e=this.#br(t,"subtasks"),r=this.#Dr(t,"sameasparent");if(e&&e.startsWith("[{"))try{const t=JSON.parse(e);if(Array.isArray(t)&&t.every(t=>t.tid>0&&"string"==typeof t.parasstr))for(const e of t){if(this.#f.subtasks.find(t=>t.tid===e.tid&&t.parasstr===e.parasstr)||e.minlen>0&&e.parasstr.length<e.minlen)continue;const t={tid:e.tid,parasstr:e.parasstr};e.idx>0&&(t.idx=e.idx),r&&(t.sapFlag=!0),this.#f.subtasks.push(t)}else t.length>=1&&("string"==typeof t[0].parasstr&&"number"==typeof t[0].tid||logerr(`##te invalid subtask: ${JSON.stringify(t[0])} in performSubtaskAction`))}catch(t){logerr(t)}const a=this.#Pr(t,"subtask");for(const t of a){const e=parseInt(this.#br(t,"tid")),a=parseInt(this.#br(t,"minlen")),s=this.#br(t,"parasstr"),i=this.#br(t,"idx").trim(),n=i.length>0&&i.match(/^[0-9]+$/)?parseInt(i):0,o=this.#br(t,"errname"),c=this.#Dr(t,"popuppage");if(c&&!this.#f.popupPage){const t="ignore"===o?"cfginvalid":o;this.#_r(t,"actionSubtask","noPopupPage")}if(s.length>=a)if(c){const t=await this.#wa(c),r=await this.#$e(e,s,this.#ka(t),"indSync");await this.#Sa(t),this.#f.popupPage=null;const{credits:a,execData:i}=r.taskData;a<-1?this.#_r(o,"actionSubtask","SyncIndepFailed"):(this.#f.subtaskResults.push(r),logdbg(`##te indsyncsubtask t${e} p${s} c${a} data: ${JSON.stringify(i)}`))}else{if(!this.#f.subtasks.find(t=>t.tid===e&&t.parasstr===s)){const t={tid:e,parasstr:s};n>0&&(t.idx=n),r&&(t.sapFlag=!0),this.#f.subtasks.push(t)}}}return!0}#Qa(t){if(!this.#Ie)return!0;const e=this.#br(t,"optype"),r=this.#br(t,"tabname");let a=this.#br(t,"prefix");const s=this.#Dr(t,"requestheaders"),i=this.#br(t,"filename"),n=this.#br(t,"fileidx");let o=parseInt(n),c="";if("read"===e||"readwrite"===e){const t=this.#f.execData[r];if((!Array.isArray(t)||0===t.length)&&(c=this.#la(a,r),c)){let t=(0,import_utils11.getJsonParseOfStr)(c);if(t&&Array.isArray(t[r])&&(t=t[r]),t&&Array.isArray(t)&&(this.#f.execData[r]=t),t.length>0&&s){const e=this.#Je,{requestUrl:r="",requestHeaders:a="",requestData:s=""}=t[t.length-1];e.cachedRequestUrl=r,e.cachedRequestHeaders=a,e.cachedRequestData=s}if(t.length>0&&i){o<0&&(o=t.length+o);const e=t[o];"string"==typeof e?.responseData&&this.#Er(i,e.responseData)}}}if("write"===e||"readwrite"===e){const t=this.#f.execData[r];if(Array.isArray(t)&&t.length>0){const e=this.#la(a,r);c=JSON.stringify(t),e.length===c.length&&e===c||this.#pa(JSON.stringify(t),a,r)}}return!0}#Za(t){const e=this.#Hr(t),{tabname:r,keys:a,keep:s}=e;this.#zr(r)&&this.#_r("cfginvalid","actionTabname","tabnameDeduplicate");const i=this.#f.execData[r];if(!Array.isArray(i)||0===i.length)return!0;const n=i.length,o="first"===s?0:i.length-1,c=a.split(","),l=new Set,p=[];for(let t=o;t<n&&t>=0;){const e=i[t];if(!e||"object"!=typeof e)continue;const r=c.map(t=>e[t]).join("-");l.has(r)||(p.push(e),l.add(r)),"first"===s?t++:t--}return this.#f.execData[r]=p,!0}#ts(t){const e=this.#Hr(t),{tabname:r}=e;return delete this.#f.execData[r],delete this.#f.processedExecData[r],!0}async#es(t){const e=this.#Hr(t),{tabname:r,varname:a,subkeys:s}=e;this.#zr(r)&&this.#_r("cfginvalid","actionTabname","tabnameFilter");const i=this.#f.execData[r];if(!Array.isArray(i)||0===i.length)return!0;const n=[],o=this.#ga(s);for(const e of i){const r=getSubkeysStringOfDataRecord(e,o);this.#Ar(a,r);const s=(await this.#Ea("templstr",t)).content;this.#Mr(s)&&n.push(e)}return this.#f.execData[r]=n,!0}async#yr(t){this.#Ir(t);const e=this.#Pr(t,"tabname");for(const t of e){const e=this.#br(t,"type");"cache"===e?this.#Qa(t):"deduplicate"===e?this.#Za(t):"delete"===e?this.#ts(t):"filter"===e?await this.#es(t):(0,import_utils11.unreachable)(e)}return!0}async#Cr(t){this.#Ir(t);const e=this.#br(t,"subtype"),r=this.#br(t,"errname"),a=this.#br(t,"wait");if("sleep"===e){const e=parseInt(this.#br(t,"minms")),r=parseInt(this.#br(t,"maxms")),s=(0,import_utils11.getRandomInt)(e,r);return await(0,import_utils11.sleep)(s),await this.#qr(a),!0}const s=this.#f.page;if("element"===e){if(!s)return this.#_r("cfginvalid","actionWaitElement","noPage"),!1;const e=this.#Pr(t,"element",!0);e.length<=0&&this.#_r("cfginvalid","actionWaitElement","noElements");const a=this.#br(e[0],"loc"),i=parseInt(this.#br(t,"timeout")),n=this.#br(t,"state");try{await s.waitForElement(a,{timeout:i,state:n})}catch(t){logerr(t),this.#_r(r,"actionWaitElement","pwaException")}}else if("navigation"===e){if(!s)return this.#_r("cfginvalid","actionWaitNavigation","noPage"),!1;const e=parseInt(this.#br(t,"timeout")),a=this.#br(t,"waituntil"),i=this.#br(t,"url");a||this.#_r("cfginvalid","actionWaitNavigation","invlidWaitUntil");try{if(i){const t=new RegExp(i);await s.waitForNavigation({url:t,timeout:e,waitUntil:a})}else await s.waitForNavigation({timeout:e,waitUntil:a})}catch(t){logerr(t),this.#_r(r,"actionWaitNavigation","pwaException")}}else this.#_r("cfginvalid","actionWait","invalidSubtype");return await this.#qr(a),!0}#rs(t,e){return this.#Fe?2===e||3!==e&&(!(!this.#Re.includes("operate")||!appConfig.OPERATE_ACTIONS.includes(t))||!!this.#Re.includes(t)):1===e||this.#Re.includes(t)||this.#Re.includes("operate")&&appConfig.OPERATE_ACTIONS.includes(t)}async#Ka(t){if(!Array.isArray(t))throw new Error("##te Ivalid action configs(actions)");for(const e of t)try{const t=this.#br(e,"type"),r=this.#br(e,"id"),a=Number(r);if(this.#rs(t,a))continue;if(await this.#Ve[t].call(this,e),this.#f.continueFlag||this.#f.breakFlag)break}catch(t){throw this.#f.credits>=0&&(loginfo(`##te tId${this.#m}, aCfg: ${JSON.stringify(e).slice(0,200)}`),loginfo(`##te err.stack: ${t.stack}`)),t}}async#as(){try{const t=this.#f.page,e=this.#Te.captchaTypes;t&&e.length>0&&await injectScripts(t,e);const r=this.#Pr(this.#Ee,"action");await this.#Ka(r),this.emit(appConfig.EVENT_TYPES.taskComplete,{code:0,message:"ok",data:null})}catch(t){this.emit(appConfig.EVENT_TYPES.taskComplete,{code:1001,message:"failed",data:t})}}#ss(){const t={};for(const[e,r]of Object.entries(this.#qe))"string"==typeof e&&"string"==typeof r&&(t[e]=r);return t}#is(){const t=this.#f.page;if(t){t.on(appConfig.EVENT_TYPES.lsdPageClose,()=>{this.emit(appConfig.EVENT_TYPES.taskComplete,{code:1005,message:"pageClosed",data:null})});const e=this.#xe.maxExecutionDuration;e>0&&setTimeout(()=>this.emit(appConfig.EVENT_TYPES.taskComplete,{code:1009,message:"timeout",data:null}),1e3*e),t.pageInfo().relatedId>0&&t.on(appConfig.EVENT_TYPES.lsdPagePopup,async t=>{loginfo("##tmp LsdPage received popup event: ",t),this.emit(appConfig.EVENT_TYPES.lsdScraperPopup,{code:0,message:"ok",data:t})})}}#ns(){const t=this.#f.page;t&&(t.removeAllListeners(appConfig.EVENT_TYPES.lsdPagePopup),t.removeAllListeners(appConfig.EVENT_TYPES.lsdPageClose)),this.removeAllListeners(appConfig.EVENT_TYPES.taskComplete)}async run(){const t=(0,import_utils11.getCurrentUnixTime)(),e={templateId:this.#m,parasStr:this.#Ue,credits:0,execData:{},subtasks:[]},r=this.#f.page;let a;loginfo(r?`##tmp -- start to run tId${this.#m} kId${this.#y} page ${r.id()}`:`##tmp -- start to run tId${this.#m} kId${this.#y} no page`);try{this.#is(),this.#as();const[s]=await(0,import_node_events2.once)(this,appConfig.EVENT_TYPES.taskComplete);if(0===s.code);else if(1001===s.code){if(s.data instanceof Error)throw s.data;logerr(s.data)}else 1005===s.code?this.#_r("other","task","pageClosed"):1009===s.code&&this.#_r("tetimeout","task","teTimeout");r&&this.#Ke!==r.url()&&loginfo(`##te kId${this.#y} endUrl: ${r.url()}`);const i=this.#f.subtasks.length;i>0&&loginfo(`##te kId${this.#y} has ${i} subtasks`);for(let t of Object.keys(this.#f.execData)){const e=this.#f.execData[t].length;loginfo(`##te kId${this.#y} tablename ${t} has ${e}`)}this.#ns(),loginfo(`##tmp teSucceeded kId${this.#y} tId${this.#m} sec ${(0,import_utils11.getCurrentUnixTime)()-t}`),e.execData=this.#f.execData,e.subtasks=this.#f.subtasks,e.credits=this.#f.credits,this.#Ie&&(e.debugFiles=this.#f.debugFiles),this.#f.subtaskResults.length>0&&(a=this.#f.subtaskResults.map(t=>t.taskData)),await this.__whenTaskEndFun(),e.credits<-30&&logwarn(`##te taskId ${this.#y} credits ${e.credits}`);const n={taskData:e,subtaskDatas:a,newStateData:this.#f.newStateData?this.#f.newStateData:void 0};if(this.#Ie){const t={taskId:this.#y,message:"succeeded",stack:"",variables:this.#ss()};n.misc=t}return n}catch(t){e.execData=this.#f.execData,e.subtasks=this.#f.subtasks,e.credits=this.#f.credits,this.#Ie&&(e.debugFiles=this.#f.debugFiles),this.#f.subtaskResults.length>0&&(a=this.#f.subtaskResults.map(t=>t.taskData));const s=this.#f.newStateData?this.#f.newStateData:void 0,i="string"==typeof t?.stack?t.stack:"unkown",n={taskId:this.#y,message:"unknown",stack:i,variables:this.#ss()};if(this.#ns(),await this.__whenTaskEndFun(),this.#f.credits>=0)logerr(`##te Exeception in ScraperTask.run: kId ${this.#y}`),logerr(t);else{if(-1===this.#f.credits)return{taskData:e,subtaskDatas:a,newStateData:s,misc:n};if(this.#f.credits>-30)return{taskData:e,subtaskDatas:a,newStateData:s,misc:n};if(2===this.#y&&"check"===this.#Ue&&r){logdbg(`##cap loginCheckFailed capabilityId ${0} credits: ${this.#f.credits}`)}else 11===this.#y||-69===this.#f.credits||logwarn(`##te taskExec run execption: templateId ${this.#m}, paras ${this.#Ue}, credits ${this.#f.credits}`)}return logwarn(`##tmp taskExec run execption: templateId ${this.#m}, paras ${this.#Ue}, credits ${this.#f.credits}`),e.credits=this.#f.credits>=0?-99:this.#f.credits,{taskData:e,subtaskDatas:a,newStateData:s,misc:n}}}async __performMiscAction(t){this.#Ir(t);const e=this.#Pr(t,"misc");if(e.length<=0)return logerr(`##templ ${this.#m} invalid template ${this.#m} in performMiscAction`),!1;for(const t of e){const e=this.#br(t,"type");switch(e){case"delsyncdbdata":case"extractdata":this.#_r("cfginvlid","notSupported",e);break;case"getstatedata":await this.#Ya(t);break;default:(0,import_utils11.unreachable)(e)}}return!0}async __processDbquery(t,e){return(t||e)&&this.#_r("cfginvlid","notSupported","dbquery"),""}async __processBrowserOcrCfg(t,e){return(t||e)&&this.#_r("cfginvlid","notSupported","ocr"),""}async __decodeFontInContent(t,e,r){return(t||e||r)&&this.#_r("cfginvlid","notSupported","decodeFont"),""}async __whenTaskEndFun(){return!0}},path6=__toESM(require("path"),1),fsp2=__toESM(require("fs/promises"),1),import_utils12=require("@letsscrapedata/utils");async function moveDataFiles(){try{const t=appConfig.cfg.exportsDir;if(!t||!(0,import_utils12.isDirectory)(t))return!1;const e=await(0,import_utils12.filesInDir)(t,"general","dat_");if(0===e.length)return!0;const r=(0,import_utils12.getLocalDateNumber)(),a=path6.join(t,String(r));await(0,import_utils12.fsCheckOrCreateDir)(a,!0,!0);for(const r of e){const e=path6.join(t,r),s=path6.join(a,r);await fsp2.rename(e,s)}return!0}catch(t){return logerr(t),!1}}async function writeDataIntoOneFile(t,e,r){if(e.length<=0)return!1;const a=appConfig.cfg.dataFileFormat;if("jsonl"!==a&&!await(0,import_utils12.isFile)(t)){const a=Array.from(Object.keys(e[0]));await fsp2.writeFile(t,a.join(r).concat("\n"))}const s="jsonl"===a?e.map(t=>JSON.stringify(t)).join("\n"):e.map(t=>Object.values(t).join(r)).join("\n");return await fsp2.appendFile(t,s.concat("\n")),!0}async function saveExecDataOfTask(t){try{const{exportsDir:e,dataFileFormat:r,columnSeperator:a}=appConfig.cfg;if(!(e&&(0,import_utils12.isDirectory)(e)&&r&&a))return!1;for(const[s,i]of Object.entries(t)){const t=path6.join(e,`${s}.${r}`);await writeDataIntoOneFile(t,i,a)}return!0}catch(t){return logerr(t),!1}}async function performOneTask(t,e,r,a="indAsync",s="",i=0){try{const n=await TemplateManagerInScraper.getTemplateConfig(t,s),{template:o,actionConfigs:c,fontsConfig:l,templScripts:p,paraCfgs:g,attrsInXml:h,captchaTypes:u,secureDataFlag:d}=n,f={template:o,actionConfigs:c,fontsConfig:l,templScripts:p},{skipActions:m="",extractColumns:y="",defaultParasStr:C}=h||{},v=e||(appConfig.cfg.useParasstrInXmlIfNeeded&&C?C:""),b=TaskParser.getInParas(v,g),w=1===i&&h?{skipActions:m?m.split(","):[],extractColumns:y?y.split(","):[]}:{};w.secureDataFlag=d,w.captchaOptions={captchaTypes:u};const S=new TaskScraper(f,b,r,w),k=await S.run(),_=k.taskData.execData;for(const t of Object.keys(_))t.startsWith("dat_0000000000006")&&delete _[t];if("indSync"===a||"indAsync"===a)if(k.taskData.credits>=-1)loginfo(`Task are completed: templateId ${t}, parasStr ${e}`),await saveExecDataOfTask(k.taskData.execData);else if("indSync"===a){const r={dat_0000000000000001:[{c01:String(t),c02:e,c03:String(k.taskData.credits),c04:(0,import_utils13.getLocalDateString)()}]};await saveExecDataOfTask(r)}return k}catch(r){const s={taskId:0,message:r.message,stack:r.stack,variables:{}};if("indSync"===a){const r={dat_0000000000000001:[{c01:String(t),c02:e,c03:"-1",c04:(0,import_utils13.getLocalDateString)()}]};await saveExecDataOfTask(r)}return{taskData:{templateId:t,parasStr:e,credits:0,execData:{},subtasks:[]},subtaskDatas:[],misc:s}}}appConfig.performOneTask=performOneTask;var path8=__toESM(require("path"),1),import_utils14=require("@letsscrapedata/utils"),import_controller4=require("@letsscrapedata/controller"),BrowserManagerInScraper=class{#os;#cs;#ls;#ps;#gs(t){const e=this.#os.templateParas.find(e=>e.templateId===t);return e?.maxConncurrency?e.maxConncurrency:this.#os.maxConcurrency}async#hs(t,e){const r=await import_controller4.controller.newApiContext({proxy:e}),a="playwright"===t.browser().browserControllerType()?t.apiContext():null;this.#ps.push({proxy:e,browserContext:t,browserApiContext:a,standaloneApiContext:r,templateMap:new Map})}constructor(){const{useStealthPlugin:t,browserControllerType:e,browserType:r,lsdLaunchOptions:a,lsdConnectOptions:s,maxConcurrency:i,templateParas:n}=appConfig.cfg,o=Array.isArray(appConfig.cfg.browserConfigs)&&appConfig.cfg.browserConfigs.length>0?appConfig.cfg.browserConfigs:[{browserControllerType:e,browserType:r,proxyUrl:""}];this.#os={useStealthPlugin:t,browserControllerType:e,browserType:r,lsdLaunchOptions:a,lsdConnectOptions:s,browserConfigs:o,maxConcurrency:i,templateParas:n},this.#cs=import_controller4.controller,["playwright","puppeteer"].includes(e),this.#ls=[],this.#ps=[]}async init(){const{browserControllerType:t,browserType:e,lsdLaunchOptions:r,lsdConnectOptions:a}=this.#os;for(const s of this.#os.browserConfigs){const{browserControllerType:i=t,browserType:n=e,browserUrl:o,proxyUrl:c=""}=s,l=this.#us(c);if(o){const t=Object.assign({},a,{browserUrl:o}),e=await this.#cs.connect(i,n,t);this.#ls.push(e);for(const t of e.browserContexts())await this.#hs(t,l)}else if("string"==typeof c){const t=c?l:void 0,e=Object.assign({},r,{proxy:t}),a=await this.#cs.launch(i,n,e);this.#ls.push(a);for(const t of a.browserContexts())await this.#hs(t,l)}}return await(0,import_utils14.sleep)(2e3),!0}#us(t,e="",r="",a=""){return{proxyUrl:t,proxyId:e||t,username:r,password:a}}async getTaskNetworkContext(t=0){if(0===this.#ps.length)throw new Error("please call init() first to launch or connect browsers.");let e;const r=(0,import_utils14.getRandomArrayIdx)(this.#ps.length);for(const a of r){const r=this.#ps[a],{proxy:s,browserContext:i,browserApiContext:n,standaloneApiContext:o,templateMap:c}=r;if(t>0&&(e=c.get(t),e||(e={templateId:t,maxConcurrency:this.#gs(t),running:0},c.set(t,e)),e.maxConcurrency<=e.running))continue;if(!i.hasFreePage())continue;const l=await i.getPage();return l?(t>0&&e&&e.running++,l.setPageInfo({relatedId:t}),{proxy:s,page:l,browserApiContext:n,standaloneApiContext:o}):null}return null}async freePage(t){const e=t.pageInfo().relatedId;if(e>0){const r=t.browserContext().id(),a=this.#ps.find(t=>t.browserContext.id()===r);if(!a)throw new Error("No browserContext has the page to free.");const s=a.templateMap.get(e);if(!s)throw new Error(`No templateMapInfo has templateId ${e} in ${r}.`);s.running--}return await t.free(),!0}},fsp3=__toESM(require("fs/promises"),1),path7=__toESM(require("path"),1),import_utils15=require("@letsscrapedata/utils"),SchedulerInScraper=class t{#ds;#fs;#ms;#ys;runningTaskSet;static#Cs="\n";static#vs=!1;constructor(t){this.#ds=new Map,this.#fs=appConfig.cfg.taskDir,this.#ms=appConfig.cfg.exitWhenCompleted,this.#ys=t,this.runningTaskSet=new Set}async#bs(e,r=!1){try{const a=(await fsp3.readFile(e,"utf8")).split(t.#Cs),s=new Set(a);return s.size>1&&s.has("")&&s.delete(""),r&&await fsp3.unlink(e),Array.from(s.values())}catch(t){return[]}}static#ws=new Map;async#Ss(e,r,a=!1){if(t.#ws.get(r)){for(let e=0;e<50&&(await(0,import_utils15.sleep)(200),t.#ws.get(r));e++);if(t.#ws.get(r))return!1}t.#ws.set(r,!0);try{if(a){const a=path7.join(this.#fs,`failedtempl${r}.txt`);return await fsp3.appendFile(a,e.join(t.#Cs).concat(t.#Cs)),!0}{const a=path7.join(this.#fs,`tid${r}.txt`);return e.length>0?await fsp3.writeFile(a,e.join(t.#Cs)):await(0,import_utils15.isFile)(a)&&await fsp3.unlink(a),t.#ws.delete(r),!0}}catch(e){return logwarn(`Failed to write task queue of tempatedId ${r} into file`),t.#ws.delete(r),!1}}async#ks(){const t=appConfig.cfg.taskDir;if(!t||!(0,import_utils15.isDirectory)(t))return!1;const e=await(0,import_utils15.filesInDir)(t,"general","failedtempl","txt");for(const r of e){const e=parseInt(r.slice(11,-4)),a=await this.#bs(path7.join(t,r),!0);if(a.length>0){loginfo(`load unfinished ${a.length} tasks of templateId ${e}`);const t=this.#ds.get(e);t?a.forEach(e=>t.push(e)):this.#ds.set(e,a)}}return!0}async#_s(t=!1){const e=appConfig.cfg.taskDir;if(!e||!(0,import_utils15.isDirectory)(e))return!1;const r=await(0,import_utils15.filesInDir)(e,"general","templ","txt");for(const t of r){const r=parseInt(t.slice(5,-4)),a=await this.#bs(path7.join(e,t));if(a.length>0){loginfo(`load unfinished ${a.length} tasks of templateId ${r}`);const t=this.#ds.get(r);t?a.forEach(e=>t.push(e)):this.#ds.set(r,a)}}return t&&await this.#ks(),!0}async addNewTask(t,e){const{tid:r,parasstrs:a}=t;if(r<=0||0===a.length)return!1;let s=this.#ds.get(r);return s||(s=[],this.#ds.set(r,s)),a.forEach(t=>{s.includes(t)||s.push(t)}),await this.#Ss(s,r),e&&await this.tryToExecuteTasks([r]),!0}async init(t=[]){appConfig.cfg.moveDataWhenStart&&await moveDataFiles();const e=appConfig.cfg.loadFailedTasksInterval>0;appConfig.cfg.loadUnfinishedTasks&&await this.#_s(e);for(const e of t){const{tid:t,parasstrs:r}=e;this.addNewTask({tid:t,parasstrs:r},!1)}return await this.tryToExecuteTasks(),setInterval(this.tryToExecuteTasks.bind(this),6e4),e&&setInterval(this.#ks.bind(this),6e4*appConfig.cfg.loadFailedTasksInterval),!0}#xs(t,e){return`${t}@@${e}`}async#Es(t,e,r){const a=await performOneTask(t,e,r,"indAsync","",0),{credits:s,subtasks:i}=a.taskData;let n=new Set;const o=this.#ds.get(t);if(o){const r=o.findIndex(t=>t===e);if(r<0?logerr(`Task queue of templateId ${t} has no parasStr: ${e}`):o.splice(r,1),s>=-1){if(0===o.length&&this.#ds.delete(t),i.length>0){n=new Set(i.map(t=>t.tid));for(const t of n){const e=i.filter(e=>e.tid===t).map(t=>t.parasstr);await this.addNewTask({tid:t,parasstrs:e},!1)}}await this.#Ss(o,t)}else await this.#Ss([e],t,!0);this.runningTaskSet.delete(this.#xs(t,e))}else logerr(`No task queue of templateId ${t}`);return r.page&&await this.#ys.freePage(r.page),appConfig.cfg.minMiliseconds>0&&await(0,import_utils15.sleep)(appConfig.cfg.minMiliseconds),await this.tryToExecuteTasks([t],1),n.size>0&&await this.tryToExecuteTasks(),!0}async tryToExecuteTasks(e=[],r=0){if(loginfo(`---- tryToExecuteTasks templateIds ${e.join(",")} : `,this.#ds),t.#vs)return logdbg("---- another tryToExecuteTasks is running now"),!0;this.#ms&&0===this.#ds.size&&process.exit(0),t.#vs=!0;try{let a=0;0===e.length&&(e=Array.from(this.#ds.keys())),logdbg(`templateIds: ${e.join(",")}`);for(const s of e){const e=this.#ds.get(s);if(!e)break;const i=e.length;for(let n=0;n<i;n++){const i=e[n],o=this.#xs(s,i);if(this.runningTaskSet.has(o))continue;const c=await this.#ys.getTaskNetworkContext(s);if(!c){logdbg(`No page to execute ${o}`);break}if(this.runningTaskSet.add(o),this.#Es(s,i,c),a++,r>0&&a>=r)return t.#vs=!1,!0}}return t.#vs=!1,!0}catch(e){return logdbg(e),t.#vs=!1,!1}}},import_utils17=require("@letsscrapedata/utils"),import_events=__toESM(require("events"),1),import_utils16=require("@letsscrapedata/utils"),TwoCaptcha=class{#As;#Os;#Is;#Ts;#Ds;#Ps;#Ns;async#Rs(t,e,r="POST"){try{const a={method:r,headers:{"Content-Type":"application/json"},body:JSON.stringify(e)},s=await fetch(t,a);if(!s.ok)return logerr(`##captcha failed to fetch, url ${t}`),null;return await s.json()}catch(t){return logerr(t),null}}async#Fs(t){const e={clientKey:this.#As,task:t,softId:0};"string"==typeof t.lang&&t.lang&&(e.languagePool=t.lang,delete t.lang);const r=await this.#Rs("https://api.2captcha.com/createTask",e);return 10===r.errorId?this.setStatus("nobalance"):[11,21,55].includes(r.errorId)&&this.setStatus("disabled"),r}async#js(t){const e={clientKey:this.#As,taskId:t};return await this.#Rs("https://api.2captcha.com/getTaskResult",e)}async#$s(){const t={clientKey:this.#As},e=await this.#Rs("https://api.2captcha.com/getBalance",t);return e?.balance>=0?e.balance:-1}#Ls(t){return`event${t}`}#Ms(t){return 5e3}async#qs(t,e){const r={errorCode:"SUCCEEDED",taskId:0,cost:0,ip:"",createTime:(0,import_utils16.getCurrentUnixTime)(),endTime:0,solveCount:0},{errorId:a,taskId:s}=await this.#Fs(t);if(a>0||s<=0)return r.errorCode="ERROR_OTHER",s>0&&(r.taskId=s),r;r.taskId=s;const i=this.#Ls(s);await(0,import_utils16.sleep)(this.#Ms(e));let n=0;this.#Ds||(n=setInterval(async()=>{const t=await this.#js(s);0!==t?.errorId?this.#Ns.emit(i,{code:1001,message:"failed",data:t}):0===t.errorId&&"ready"===t.status&&this.#Ns.emit(i,{code:0,message:"succeeded",data:t})},this.#Is)),setTimeout(()=>this.#Ns.emit(i,{code:1009,message:"timeout",data:null}),this.#Ts);const[o]=await(0,import_events.once)(this.#Ns,i);n&&clearInterval(n),r.endTime=(0,import_utils16.getCurrentUnixTime)();const{code:c,data:l}=o;if(0===c){if(!l||0!==l.errorId)throw new Error("##captcha invalid data in getResult");const{cost:t,ip:e,createTime:a,endTime:s,solveCount:i,solution:n}=l;t&&(r.cost=Number(t)),e&&(r.ip=e),a&&a>0&&(a-r.createTime>5&&loginfo("##captcha task createTime difference: "+(a-r.createTime)),r.createTime=a),s&&s>0&&(r.endTime-s>2*this.#Is&&loginfo("##captcha task endTime difference: "+(r.endTime-s)),r.endTime=s),i&&i>0&&(r.solveCount=i),n&&(r.solution=n)}else if(1001===c)r.errorCode=l?.errorCode?l.errorCode:"ERROR_OTHER";else{if(1009!==c)throw new Error(`##captcha unreachable at ${(new Error).stack}`);r.errorCode="ERROR_TIMEOUT"}return r}#Us(t,e,r){let a=r?e:`${e}Proxyless`;return r?Object.assign({},t,{type:a},r):Object.assign({},t,{type:a})}#Js(t,e){const{version:r,websiteURL:a,gt:s,challenge:i,geetestApiServerSubdomain:n,userAgent:o,captchaId:c}=t,l="GeeTestTask",p={type:e?l:`${l}Proxyless`,version:r,websiteURL:a};return s&&(p.gt=s),i&&(p.challenge=i),n&&(p.geetestApiServerSubdomainapiDomain=n),c&&(p.initParameters={captcha_id:c}),o&&(p.userAgent=o),p}#Hs(t,e){const{version:r,websiteKey:a,websiteURL:s,isEnterprise:i,isInvisible:n,s:o,action:c,minScore:l,userAgent:p,cookies:g,apiDomain:h}=t;let u="RecaptchaV3TaskProxyless";if(2===r){const t=i?"RecaptchaV2EnterpriseTask":"RecaptchaV2Task";u=e?t:`${t}Proxyless`}const d={type:u,websiteURL:s,websiteKey:a};return h&&(d.apiDomain=h),d.isInvisible=n,o&&(i?d.enterprisePayload=o:d.recaptchaDataSValue=o),p&&(d.userAgent=p),g&&(d.cookies=g),d.isEnterprise=i,l&&(d.minScore=l),c&&(d.pageAction=c),d}#Bs(t,e){const r="TurnstileTask";let a=e?r:`${r}Proxyless`;const{websiteKey:s,websiteURL:i,action:n,cData:o,chlPageData:c}=t;return n?{type:a,websiteKey:s,websiteURL:i,action:n,data:o,pagedata:c}:{type:a,websiteKey:s,websiteURL:i}}#Vs(t){const{images:e,comment:r,lang:a,math:s=!1,maxLength:i=0,minLength:n=0,question:o=!1,space:c=!1,textType:l="any"}=t;if(o)return{type:"TextCaptchaTask",comment:r,lang:a};{let o=0;"numbers"===l?o=1:"letters"===l&&(o=2);const p={type:"ImageToTextTask",body:e[0].toString("base64"),case:!!t.case,comment:r,math:s,maxLength:i,minLength:n,numeric:o,phrase:c,lang:a};return e.length>1&&(p.imgInstructions=e[1].toString("base64")),p}}#Ws(t){const{images:e,comment:r,lang:a,maxClicks:s=0,minClicks:i=1}=t,n={type:"CoordinatesTask",body:e[0].toString("base64"),comment:r,lang:a,minClicks:i};return s>0&&s>=i&&(n.maxClicks=s),e.length>1&&(n.imgInstructions=e[1].toString("base64")),n}constructor(t){const{clientKey:e,callbackUrl:r="",pollingInterval:a=5e3,timeout:s=15e4}=t;if(!e)throw new Error("Invalid options: no clientKey");this.#As=e,this.#Os="normal",this.#Is=a>=2e3?a:2e3,this.#Ts=s>=3e4?s:3e4,this.#Ds=r||"",r&&loginfo(this.#Ds),this.#Ps=["amazon","funcaptcha","geetest","keycaptcha","mtcaptcha","recaptcha","turnstile","text","coordinate","grid","slider","rotation"],this.#Ns=new import_events.default}canSolveCaptcha(t){return this.#Ps.includes(t)}async getBalance(){return await this.#$s()}name(){return"2captcha"}sendResult(t){if(!t||"object"!=typeof t)return!1;const{taskId:e,errorId:r}=t;if(e>0){const e=this.#Ls(t.taskId);return 0===r?this.#Ns.emit(e,{code:0,message:"succeeded",data:t}):0===r&&this.#Ns.emit(e,{code:1001,message:"failed",data:t}),!0}return!1}status(){return this.#Os}setStatus(t){switch(t){case"normal":case"disabled":case"nobalance":this.#Os=t;break;default:(0,import_utils16.unreachable)(t)}return!0}async amazon(t,e){return await this.#qs(this.#Us(t,"AmazonTask",e),"amazon")}async funcaptcha(t,e){return await this.#qs(this.#Us(t,"FunCaptchaTask",e),"funcaptcha")}async geetest(t,e){return await this.#qs(this.#Js(t,e),"geetest")}async keycaptcha(t,e){return await this.#qs(this.#Us(t,"KeyCaptchaTask",e),"keycaptcha")}async mtcaptcha(t,e){return await this.#qs(this.#Us(t,"MtCaptchaTask",e),"mtcaptcha")}async recaptcha(t,e){return await this.#qs(this.#Hs(t,e),"recaptcha")}async turnstile(t,e){return await this.#qs(this.#Bs(t,e),"turnstile")}async text(t){return await this.#qs(this.#Vs(t),"text")}async coordinate(t){return await this.#qs(this.#Ws(t),"coordinate")}async grid(t){return await this.#qs(this.#Us(t,"TextTask"),"text")}async slider(t){return await this.#qs(this.#Us(t,"TextTask"),"text")}async rotation(t){return await this.#qs(this.#Us(t,"TextTask"),"text")}};async function updateScraperConfig(t){const e=appConfig.cfg,{baseDir:r,inputFileDirPart:a,useStealthPlugin:s,browserControllerType:i,browserType:n,lsdLaunchOptions:o,lsdConnectOptions:c,browserConfigs:l,urlPrefix:p,maxConcurrency:g,readCode:h,templateParas:u,totalMaxConcurrency:d,minMiliseconds:f,exitWhenCompleted:m,useParasstrInXmlIfNeeded:y,loadUnfinishedTasks:C,loadFailedTasksInterval:v,moveDataWhenStart:b,dataFileFormat:w,columnSeperator:S}=t;if(r)e.baseDir=r;else{const t=process.cwd();e.baseDir=path8.join(t,"scraperdata")}if(await(0,import_utils17.fsCheckOrCreateDir)(e.baseDir,!0,!0),e.baseDownloadDir=path8.join(e.baseDir,"downloads"),await(0,import_utils17.fsCheckOrCreateDir)(e.baseDownloadDir,!0,!0),e.baseFileDir=path8.join(e.baseDir,"files"),await(0,import_utils17.fsCheckOrCreateDir)(e.baseFileDir,!0,!0),t.templateDir?e.templateDir=t.templateDir:e.templateDir=path8.join(e.baseDir,"template"),await(0,import_utils17.fsCheckOrCreateDir)(e.templateDir,!0,!0),e.taskDir=path8.join(e.baseDir,"task"),await(0,import_utils17.fsCheckOrCreateDir)(e.taskDir,!0,!0),e.exportsDir=path8.join(e.baseDir,"exports"),await(0,import_utils17.fsCheckOrCreateDir)(e.exportsDir,!0,!0),a&&(e.inputFileDirPart=a),i&&(e.browserControllerType=i),n&&(e.browserType=n),o&&"object"==typeof o){e.lsdLaunchOptions=Object.assign(e.lsdLaunchOptions,o);const t=e.lsdLaunchOptions.addons;Array.isArray(t)&&t.length>0&&(e.lsdLaunchOptions.addons=t.map(t=>path8.isAbsolute(t)?t:path8.join(process.cwd(),t)))}if(c&&"object"==typeof c&&(e.lsdConnectOptions=Object.assign(e.lsdConnectOptions,c)),l&&(e.browserConfigs=l),p&&(e.urlPrefix=p),g&&(e.maxConcurrency=g),h&&(e.readCode=h),u&&(e.templateParas=u),d&&(e.totalMaxConcurrency=d),"number"==typeof f&&(e.minMiliseconds=f),"boolean"==typeof s&&(e.useStealthPlugin=s),"boolean"==typeof m&&(e.exitWhenCompleted=m),"boolean"==typeof y&&(e.useParasstrInXmlIfNeeded=y),"boolean"==typeof C&&(e.loadUnfinishedTasks=C),"number"==typeof v&&v>=0&&(e.loadFailedTasksInterval=v),"boolean"==typeof b&&(e.moveDataWhenStart=b),w&&(e.dataFileFormat=w),"csv"===e.dataFileFormat?e.columnSeperator=",":"tsv"===e.dataFileFormat?e.columnSeperator="\t":"txt"===e.dataFileFormat&&S&&(e.columnSeperator=S),t.captcha){const{clientKey:r,captchas:a}=t.captcha;"string"==typeof r&&r&&(e.captcha.clientKey=r),Array.isArray(a)&&a.every(t=>t&&"string"==typeof t)&&(e.captcha.captchas=a)}return!0}async function scraper(t=[],e={}){if(await updateScraperConfig(e),appConfig.cfg?.captcha?.clientKey){const t=new TwoCaptcha({clientKey:appConfig.cfg.captcha.clientKey});await addCapatchaProvider(t)}const r=new BrowserManagerInScraper;await r.init();const a=new SchedulerInScraper(r);return await a.init(t),!0}
1
+ "use strict";var __create=Object.create,__defProp=Object.defineProperty,__getOwnPropDesc=Object.getOwnPropertyDescriptor,__getOwnPropNames=Object.getOwnPropertyNames,__getProtoOf=Object.getPrototypeOf,__hasOwnProp=Object.prototype.hasOwnProperty,__export=(t,e)=>{for(var r in e)__defProp(t,r,{get:e[r],enumerable:!0})},__copyProps=(t,e,r,a)=>{if(e&&"object"==typeof e||"function"==typeof e)for(let s of __getOwnPropNames(e))__hasOwnProp.call(t,s)||s===r||__defProp(t,s,{get:()=>e[s],enumerable:!(a=__getOwnPropDesc(e,s))||a.enumerable});return t},__toESM=(t,e,r)=>(r=null!=t?__create(__getProtoOf(t)):{},__copyProps(!e&&t&&t.__esModule?r:__defProp(r,"default",{value:t,enumerable:!0}),t)),__toCommonJS=t=>__copyProps(__defProp({},"__esModule",{value:!0}),t),src_exports={};__export(src_exports,{performOneTask:()=>performOneTask,scraper:()=>scraper,setScraperLogFun:()=>setScraperLogFun,updateScraperConfig:()=>updateScraperConfig}),module.exports=__toCommonJS(src_exports);var import_controller=require("@letsscrapedata/controller"),import_proxy=require("@letsscrapedata/proxy"),import_utils=require("@letsscrapedata/utils"),pkgLog=import_utils.log;function setScraperLogFun(t){return"function"==typeof t&&(pkgLog=t,(0,import_controller.setControllerLogFun)(pkgLog),(0,import_proxy.setProxyLogFun)(pkgLog),!0)}async function logdbg(...t){await pkgLog(import_utils.LogLevel.DBG,...t)}async function loginfo(...t){await pkgLog(import_utils.LogLevel.INF,...t)}async function logwarn(...t){await pkgLog(import_utils.LogLevel.WRN,...t)}async function logerr(...t){await pkgLog(import_utils.LogLevel.ERR,...t)}(0,import_controller.setControllerLogFun)(pkgLog),(0,import_proxy.setProxyLogFun)(pkgLog),(0,import_utils.setLogLevel)(import_utils.LogLevel.DBG);var import_utils13=require("@letsscrapedata/utils"),import_xml2js_lsd=__toESM(require("xml2js-lsd"),1),defaultSeperatorOfParas="::",newLineChar="\n",defaultElementCfg={template:{tid:void 0,version:void 0,commited:!1},attrs:{},attr:{name:void 0,value:void 0},paras:{},para:{paraname:void 0,name:"",desc:"",uitype:"",defval:"",listid:"0",listparas:"",min:"",max:"",pattern:"",alert:""},element:{loc:void 0,source:"default",absolute:!1},iframe:{srcprefix:"",loc:""},elecontent_attr:{type:void 0,attrname:void 0,attrname2:"",attrname3:"",attrname4:"",trim:!1,pattern:"",boolattr:!1,multieles:!0,join:newLineChar,line:!1,absolute:!1},elecontent_imgbase64:{type:void 0},elecontent_innerhtml:{type:void 0},elecontent_length:{type:void 0},elecontent_outerhtml:{type:void 0},elecontent_text:{type:void 0,trim:!0,multieles:!0,join:newLineChar,line:!1,top:!1},decodefontsvg:{outtype:"text"},decodefontttf:{fontselectors:"",fontfamilies:"",intype:"outerhtml",outtype:"text",all:!1},ocrcfg_api:{type:void 0,nlchars:"",seperator:!1,lang:"zh"},ocrcfg_tesseract:{type:void 0,nlchars:"",seperator:!1,lang:"zh"},tabname_cache:{type:void 0,optype:void 0,tabname:void 0,prefix:"cached",requestheaders:!1,filename:"",fileidx:"0"},tabname_check:{type:void 0,tabname:void 0,errname:void 0,mincnt:"0",maxcnt:"0",subkeys:"",minlen:"0",maxlen:"0",pattern:"",not:!1},tabname_deduplicate:{type:void 0,tabname:void 0,keys:void 0,keep:"first"},tabname_delete:{type:void 0,tabname:void 0},tabname_filter:{type:void 0,tabname:void 0,varname:void 0,templ:void 0,subkeys:""},actions:{},action_api:{type:void 0,method:"GET",url:void 0,encodeuri:!1,session:!1,headerssource:"headers",headers:"{}",referer:"",proxy:!0,timeout:"30000",context:"default",data:"",datatype:"object",format:"data",requestprefix:"",responseprefix:"",tabname:"none",subkeys:"",varname:"",setkeys:"",errname:"normal",valerrname:"ignore",pattern:"",flags:"",gen:!0,cap:!0,id:"0"},action_break:{type:void 0,id:"0"},action_captcha:{type:void 0,try:"1",errname:"captchafailed",debug:!1,id:"0"},action_click:{type:void 0,wait:"-1",gen:!0,cap:!0,clicktype:"click",try:"1",errname:"cfginvalid",popuppage:"ignored",popupsubtask:!1,login:!0,captcha:!0,navigate:!1,eurl:"",eloc:"",pn1:"",pv1:"",pn2:"",pv2:"",downloadpath:"",filename:"",pathvarname:"",id:"0"},action_continue:{type:void 0,id:"0"},action_misc:{type:void 0,id:"0"},misc_delsyncdbdata:{type:void 0,tids:"",retention:"2592000",minretention:"86400"},misc_extractdata:{type:void 0,name:void 0,datatableids:"",method:"put",paras:!0,execdata:!0,subtasks:!0,credits:!0},misc_loadtaskdata:{type:void 0,taskid:void 0},misc_getstatedata:{type:void 0,cookies:"new",localstorage:"new",headers:"none",userdata:"none",duration:""},action_exit:{type:void 0,errname:void 0,id:"0"},action_extract:{type:void 0,tabname:"dat_0000000000009911",id:"0"},action_extract_array:{type:void 0,subtype:void 0,list:void 0,requrl:"",setprocessed:!1,skipprocessed:!1,subkeys:"",arrayinrec:!0,keys:"",tabname:"dat_0000000000009921",varname:"",idxname:"",setkeys:"",maxloops:"0",errname:"cfginvalid",id:"0"},action_extract_script:{type:void 0,subtype:void 0,name:void 0,others:"",desc:"",tabname:"dat_0000000000009931",maxloops:"0",errname:"cfginvalid",id:"0"},action_extract_table:{type:void 0,subtype:void 0,orientation:"horizontal",check:!0,tabname:"dat_0000000000009941",keyformat:"camel",colnames:"",maxloops:"0",errname:"cfginvalid",id:"0"},column_element:{type:void 0,colname:void 0,completed:!1,setvar:!1,datatype:"string",errname:"ignore",valerrname:"ignore",pattern:"",flags:"",id:"0",discarded:!1},column_property:{type:void 0,subkeys:void 0,filter:!1,json:!1,colname:void 0,completed:!1,setvar:!1,datatype:"string",valerrname:"ignore",pattern:"",flags:"",id:"0",discarded:!1},column_ocr:{type:void 0,colname:void 0,completed:!1,setvar:!1,datatype:"string",valerrname:"ignore",pattern:"",flags:"",id:"0",discarded:!1},column_subtask:{type:void 0,colname:void 0,completed:!1,setvar:!1,currentcontext:!0,needpage:!0,datatype:"string",valerrname:"ignore",pattern:"",flags:"",id:"0",discarded:!1},column_templstr:{type:void 0,colname:void 0,templ:void 0,completed:!1,setvar:!1,datatype:"string",valerrname:"ignore",pattern:"",flags:"",id:"0",discarded:!1},action_goto:{type:void 0,url:void 0,reuse:!1,timeout:"30000",wait:"-1",encodeuri:!1,gen:!0,cap:!0,popuppage:"ignored",popupsubtask:!1,login:!0,captcha:!0,eurl:"",eloc:"",pn1:"",pv1:"",pn2:"",pv2:"",headers:"",referer:"",id:"0"},action_hover:{type:void 0,try:"1",gen:!1,cap:!1,wait:"-1",errname:"cfginvalid",id:"0"},action_ifelse:{type:void 0,id:"0"},condition_element:{type:void 0},condition_else:{type:void 0},condition_templstr:{type:void 0,templ:void 0},action_input:{type:void 0,content:void 0,enter:!1,replace:!1,gen:!1,cap:!1,try:"1",wait:"-1",errname:"cfginvalid",popuppage:"ignored",popupsubtask:!1,login:!1,captcha:!1,eurl:"",eloc:"",pn1:"",pv1:"",pn2:"",pv2:"",id:"0"},action_intercept_clear:{type:void 0,subtype:void 0,id:"0"},action_intercept_set:{type:void 0,subtype:void 0,id:"0"},request_abort:{type:void 0,method:"all",url:"",resourcetype:"image",postdata:""},response_cache:{type:void 0,method:"all",url:void 0,resourcetype:"all",postdata:"",minsize:"0",maxsize:"0",contenttype:"text",tabname:"dat_0000000000007001",requestheaders:!1,responseheaders:!1,cacheheaders:!1},object_key:{type:void 0,key:void 0,value:void 0,datatype:"string",operate:"set",varname:""},request_header:{type:void 0,name:void 0,value:void 0},response_save:{type:void 0,method:"all",url:void 0,resourcetype:"all",postdata:"",minsize:"0",maxsize:"0",basedir:"response",pathtype:"path_name",hashmethod:"MD5",hostnameparts:"0",extname:"",validextnames:"",params:"",encoding:"",tabname:"none"},response_statuscode:{type:void 0,codes:void 0,errname:void 0},action_loopdowhile_element:{type:void 0,subtype:void 0,iswhile:!1,varname:"",maxloops:"0",click:!1,navigate:!0,gen:!0,cap:!0,errname:"cfginvalid",wait:"-1",id:"0"},action_loopdowhile_templstr:{type:void 0,subtype:void 0,iswhile:!1,varname:"",templ:void 0,maxloops:"0",id:"0"},action_loopfor:{type:void 0,from:void 0,to:void 0,step:"1",roundtype:"ceil",varname:void 0,maxloops:"0",errname:"ignore",id:"0"},action_loopineles:{type:void 0,varname:"",maxloops:"0",start:"1",end:"0",step:"1",errname:"ignore",id:"0"},action_loopinstr:{type:void 0,list:void 0,requrl:"",setprocessed:!1,skipprocessed:!1,subkeys:"",arrayinrec:!0,split:"[\r\n]+",varname:"",idxname:"",setkeys:"",maxloops:"0",trim:!0,errname:"ignore",id:"0"},action_scroll_by:{type:void 0,subtype:void 0,height:"100",unit:"windowpct",maxtimes:"1",interval:"800",gen:!1,cap:!1,popuppage:"ignored",popupsubtask:!1,login:!1,captcha:!1,eurl:"",eloc:"",pn1:"",pv1:"",pn2:"",pv2:"",id:"0"},action_scroll_intoview:{type:void 0,subtype:void 0,gen:!1,cap:!1,errname:"cfginvalid",popuppage:"ignored",popupsubtask:!1,login:!1,captcha:!1,eurl:"",eloc:"",pn1:"",pv1:"",pn2:"",pv2:"",id:"0"},action_scroll_to:{type:void 0,subtype:void 0,height:"100",unit:"bodypct",gen:!1,cap:!1,popuppage:"ignored",popupsubtask:!1,login:!1,captcha:!1,eurl:"",eloc:"",pn1:"",pv1:"",pn2:"",pv2:"",id:"0"},action_select:{type:void 0,selecttype:"value",selectval:"",gen:!1,cap:!1,try:"1",wait:"-1",errname:"cfginvalid",popuppage:"ignored",popupsubtask:!1,login:!1,captcha:!1,eurl:"",eloc:"",pn1:"",pv1:"",pn2:"",pv2:"",id:"0"},dbquery:{dbname:void 0,sql:void 0,sqlparas:"",parasplit:defaultSeperatorOfParas,join:newLineChar,tabname:"none"},action_setvar_dbquery:{type:void 0,subtype:void 0,varname:void 0,defaultval:"",errname:"ignore",setkeys:"",valerrname:"ignore",pattern:"",flags:"",path:"",id:"0"},action_setvar_element:{type:void 0,subtype:void 0,varname:void 0,defaultval:"",try:"1",errname:"ignore",setkeys:"",valerrname:"ignore",pattern:"",flags:"",path:"",id:"0"},file:{path:void 0,encoding:"utf8"},action_setvar_file:{type:void 0,subtype:void 0,varname:void 0,defaultval:"",proxy:!0,errname:"ignore",setkeys:"",valerrname:"ignore",pattern:"",flags:"",path:"",id:"0"},action_setvar_get:{type:void 0,subtype:void 0,varname:void 0,defaultval:"",errname:"ignore",setkeys:"",valerrname:"ignore",pattern:"",flags:"",path:"",id:"0"},action_setvar_object:{type:void 0,subtype:void 0,varname:void 0,data:"{}",defaultval:"",errname:"ignore",setkeys:"",valerrname:"ignore",pattern:"",flags:"",path:"",id:"0"},action_setvar_ocr:{type:void 0,subtype:void 0,varname:void 0,defaultval:"",errname:"ignore",setkeys:"",valerrname:"ignore",pattern:"",flags:"",path:"",id:"0"},action_setvar_subtask:{type:void 0,subtype:void 0,varname:void 0,currentcontext:!0,needpage:!0,defaultval:"",errname:"ignore",setkeys:"",valerrname:"ignore",pattern:"",flags:"",path:"",id:"0"},action_setvar_templstr:{type:void 0,subtype:void 0,varname:void 0,templ:void 0,defaultval:"",errname:"ignore",setkeys:"",valerrname:"ignore",pattern:"",flags:"",path:"",id:"0"},subtask:{tid:void 0,parasstr:void 0,idx:"",minlen:"1",errname:"cfginvalid",popuppage:!1},action_subtask:{type:void 0,subtasks:"",sameasparent:!1,id:"0"},action_tabname:{type:void 0,id:"0"},action_wait_element:{type:void 0,subtype:void 0,timeout:"30000",state:"visible",errname:"ignore",wait:"-1",id:"0"},action_wait_navigation:{type:void 0,subtype:void 0,timeout:"30000",waituntil:"load",url:"",errname:"cfginvalid",wait:"-1",id:"0"},action_wait_sleep:{type:void 0,subtype:void 0,minms:"5000",maxms:"10000",errname:"ignore",wait:"-1",id:"0"},fonts:{},fontsvg:{exloc:"head link[rel='stylesheet']",inloc:"",csmaptype:"general",bsfilter:""},fontttf:{exloc:"head link[rel='stylesheet']",inloc:"",classes:"*",fonffamiles:"*",minuc:"0",maxuc:"0",startidx:"-1",fontselectors:"",fonturlpatterns:"",parsetype:"none",debug:!1},fontselector:{name:void 0,fontfamily:void 0},fontfamily:{name:void 0,fontcodes:"",fontchars:"",fonturl:""},fontcodes:{name:void 0,codes:void 0},fontchars:{name:void 0,chars:void 0},scripts:{},script:{name:void 0,scenario:void 0,desc:"",version:"0",scripttype:"js-isolated",base64:!0,script:""},captcha_amazon:{type:void 0},captcha_funcaptcha:{type:void 0},captcha_geetest:{type:void 0},captcha_keycaptcha:{type:void 0},captcha_mtcaptcha:{type:void 0},captcha_recaptcha:{type:void 0,minscore:"0.3"},captcha_turnstile:{type:void 0},image_element:{type:void 0},comment_element:{type:void 0,attr:"textContent"},input_element:{type:void 0,enter:!1},submit_element:{type:void 0},check_result:{type:void 0,attr:"",failedstr:""},captcha_text:{type:void 0,case:!1,lang:"en",math:!1,maxlen:"0",minlen:"0",question:!1,space:!1,texttype:"any"},captcha_coordinate:{type:void 0,lang:"en",maxclicks:"0",minclicks:"1"},transform:{defaultval:"",usevar:!1},fun_a_at:{type:void 0,subtype:void 0,idx:void 0},fun_a_concat:{type:void 0,subtype:void 0,array2:void 0},fun_a_every:{type:void 0,subtype:void 0,pattern:void 0,flags:""},fun_a_filter:{type:void 0,subtype:void 0,pattern:void 0,flags:""},fun_a_find:{type:void 0,subtype:void 0,pattern:void 0,flags:""},fun_a_findindex:{type:void 0,subtype:void 0,pattern:void 0,flags:""},fun_a_includes:{type:void 0,subtype:void 0,item:void 0},fun_a_indexof:{type:void 0,subtype:void 0,item:void 0,position:"0"},fun_a_join:{type:void 0,subtype:void 0,join:void 0},fun_a_keysvaluestoobj:{type:void 0,subtype:void 0,values:void 0,minlen:"1",samelen:!0},fun_a_length:{type:void 0,subtype:void 0},fun_a_mapattr:{type:void 0,subtype:void 0,subkeys:void 0,secondjoin:","},fun_a_match:{type:void 0,subtype:void 0,pattern:void 0,flags:"",resulttype:"idx",idx:"0"},fun_a_max:{type:void 0,subtype:void 0},fun_a_min:{type:void 0,subtype:void 0},fun_a_pop:{type:void 0,subtype:void 0},fun_a_push:{type:void 0,subtype:void 0,item:void 0},fun_a_replace:{type:void 0,subtype:void 0,substr:void 0,newstr:void 0,regexp:!1,flags:""},fun_a_setcomplement:{type:void 0,subtype:void 0,array2:void 0},fun_a_setdifference:{type:void 0,subtype:void 0,array2:void 0},fun_a_setintersection:{type:void 0,subtype:void 0,array2:void 0},fun_a_setunion:{type:void 0,subtype:void 0,array2:void 0},fun_a_shift:{type:void 0,subtype:void 0},fun_a_shuffle:{type:void 0,subtype:void 0},fun_a_slice:{type:void 0,subtype:void 0,beginidx:void 0,len:"",endidx:""},fun_a_sort:{type:void 0,subtype:void 0,valtype:"number",sorttype:"asc"},fun_a_toobj:{type:void 0,subtype:void 0,key:void 0,value:void 0},fun_a_uniq:{type:void 0,subtype:void 0},fun_a_unshift:{type:void 0,subtype:void 0,item:void 0},fun_n_ceil:{type:void 0,subtype:void 0},fun_n_dateformat:{type:void 0,subtype:void 0,format:void 0,ms:!0},fun_n_eq:{type:void 0,subtype:void 0,number2:void 0},fun_n_floor:{type:void 0,subtype:void 0},fun_n_ge:{type:void 0,subtype:void 0,number2:void 0},fun_n_gt:{type:void 0,subtype:void 0,number2:void 0},fun_n_isnan:{type:void 0,subtype:void 0},fun_n_le:{type:void 0,subtype:void 0,number2:void 0},fun_n_lt:{type:void 0,subtype:void 0,number2:void 0},fun_n_max:{type:void 0,subtype:void 0,number2:void 0},fun_n_min:{type:void 0,subtype:void 0,number2:void 0},fun_n_parsefloat:{type:void 0,subtype:void 0},fun_n_parseint:{type:void 0,subtype:void 0},fun_n_round:{type:void 0,subtype:void 0},fun_n_tofixed:{type:void 0,subtype:void 0,digits:void 0,fixed:!1},fun_o_assign:{type:void 0,subtype:void 0,object2:void 0},fun_o_attr:{type:void 0,subtype:void 0,subkeys:void 0},fun_o_entries:{type:void 0,subtype:void 0,kvjoin:"="},fun_o_findstrinobj:{type:void 0,subtype:void 0,str:void 0,equal:!1},fun_o_keys:{type:void 0,subtype:void 0},fun_o_match:{type:void 0,subtype:void 0,pattern:void 0,flags:"",resulttype:"idx",idx:"0"},fun_o_replace:{type:void 0,subtype:void 0,substr:void 0,newstr:void 0,regexp:!1,flags:""},fun_o_sort:{type:void 0,subtype:void 0,valtype:"number",sorttype:"asc"},fun_o_values:{type:void 0,subtype:void 0},fun_x_attr:{type:void 0,subtype:void 0,loc:void 0,idx:"0",attrname:void 0,xml:!0,decode:!1},fun_x_data:{type:void 0,subtype:void 0,loc:void 0,idx:"0",attrname:void 0,xml:!0,decode:!1},fun_x_empty:{type:void 0,subtype:void 0,loc:void 0,xml:!0,decode:!1},fun_x_html:{type:void 0,subtype:void 0,loc:void 0,idx:"0",xml:!0,decode:!1},fun_x_length:{type:void 0,subtype:void 0,loc:void 0,xml:!0,decode:!1},fun_x_remove:{type:void 0,subtype:void 0,loc:void 0,xml:!0,decode:!1},fun_x_text:{type:void 0,subtype:void 0,loc:void 0,idx:"-9999",xml:!0,decode:!1},fun_at:{type:void 0,idx:void 0},fun_closingsubstr:{type:void 0,openchar:void 0,startstr:"",regexp:!1,flags:"",position:"0"},fun_compress:{type:void 0,method:"gzip",flush:"",finishflush:"",chunksize:"0",windowbits:"0",level:"",memlevel:"",strategy:"",sourceencoding:"utf8",targetencoding:"base64"},fun_concat:{type:void 0,str1:void 0,str2:"",str3:"",str4:"",str5:""},fun_convertencoding:{type:void 0,sourceencoding:"base64",targetencoding:"utf8",start:"0",end:"0"},fun_decode:{type:void 0,str1:"",val1:"",str2:"",val2:"",str3:"",val3:"",str4:"",val4:"",str5:"",val5:"",defaultval:""},fun_decompress:{type:void 0,method:"gunzip",flush:"",finishflush:"",chunksize:"0",windowbits:"0",sourceencoding:"base64",targetencoding:"utf8",start:"0",end:"0"},fun_endswith:{type:void 0,str:void 0},fun_eq:{type:void 0,str:void 0},fun_hashcode:{type:void 0,hashmethod:"MD5"},fun_includes:{type:void 0,str:void 0},fun_indexof:{type:void 0,str:void 0,position:"0"},fun_insert:{type:void 0,str:void 0},fun_isin:{type:void 0,items:void 0},fun_itemstoobj:{type:void 0,split:void 0,kvsplit:":",keytrim:!0,keynows:!1,valuetrim:!0,valuenows:!1},fun_length:{type:void 0},fun_match:{type:void 0,pattern:void 0,flags:"",resulttype:"idx",idx:"0"},fun_normalize:{type:void 0},fun_not:{type:void 0},fun_padend:{type:void 0,targetlen:void 0,padstr:" "},fun_padstart:{type:void 0,targetlen:void 0,padstr:" "},fun_parsestr:{type:void 0},fun_replace:{type:void 0,substr:void 0,newstr:void 0,regexp:!1,flags:""},fun_search:{type:void 0,pattern:void 0},fun_slice:{type:void 0,beginidx:void 0,len:"",endidx:""},fun_specialconvert:{type:void 0,method:void 0,para1:"",para2:"",para3:"",para4:"",para5:""},fun_split:{type:void 0,split:void 0,limit:"0"},fun_startswith:{type:void 0,str:void 0},fun_substrafter:{type:void 0,substr:void 0,regexp:!1,flags:"",position:"0",last:!1,include:!1},fun_substrbefore:{type:void 0,substr:void 0,regexp:!1,flags:"",position:"0",last:!1,include:!1},fun_tobigint:{type:void 0},fun_tobool:{type:void 0},fun_tolowercase:{type:void 0},fun_tonum:{type:void 0},fun_touppercase:{type:void 0},fun_trim:{type:void 0},fun_trimend:{type:void 0},fun_trimstart:{type:void 0},fun_urldecode:{type:void 0,method:"URI",encoding:"utf8",percent:!0},fun_urldelparams:{type:void 0,param1:void 0,param2:"",param3:","},fun_urlencode:{type:void 0,method:"URI",encoding:"utf8",percent:!0},fun_urlget:{type:void 0,attrorpath:void 0,hashmethod:"MD5",hostnameparts:"0",params:"",param:"",extname:"",validextnames:"",title:""},fun_urlsetparams:{type:void 0,param1:void 0,val1:"",param2:"",val2:"",param3:"",val3:"",replace:!0},fun_script:{type:void 0,name:void 0,arg1:"",arg2:"",arg3:"",arg4:"",arg5:""},get_addedtaskparas:{type:void 0,tid:void 0,limit:"10000",join:newLineChar,interval:"3600"},get_content:{type:void 0},get_cookie:{type:void 0,domain:"",name:"",attr:"name",source:"orig"},get_evaluate:{type:void 0,script:void 0,data:"",isolated:!0,secure:!0},get_execedtaskparas:{type:void 0,tid:void 0,limit:"10000",join:newLineChar,interval:"3600"},get_file:{type:void 0,url:void 0,path:"",basedir:"files",pathtype:"path_name",hashmethod:"MD5",hostnameparts:"0",params:"",extname:"",validextnames:"",pathvarname:"",proxy:!0,headers:"",referer:"",setvar:!1},httpbrowser:{name:void 0,minversion:"0",maxversion:"0",httpversion:"0"},httpdevice:{device:void 0},httpheader:{name:void 0,source:"value",value:void 0,delete:!1},httpos:{os:void 0},get_httpheaders:{type:void 0,headermethod:"genLatestWindowsChrome",origheaders:"",browserlist:"",httpversion:"0"},get_localstorage:{type:void 0,origin:void 0,name:void 0,source:"orig",parsestr:!1},get_mhtml:{type:void 0,path:"",basedir:"mhtml",pathtype:"title",hashmethod:"MD5",hostnameparts:"0",pathvarname:""},get_pdf:{type:void 0,path:"",basedir:"pdf",pathtype:"title",hashmethod:"MD5",hostnameparts:"0",scale:"1",displayheaderfooter:!1,headertemplate:"",footertemplate:"",printbackground:!1,landscape:!1,pageranges:"",format:"Letter",width:"",height:"",top:"",right:"",bottom:"",left:"",screen:!1,onepage:!1,hmargin:"",setvar:!1,pathvarname:""},get_queuedcntwithparas:{type:void 0,tid:void 0,parasstr:void 0,operator:"eq"},get_queuedtaskparas:{type:void 0,tid:void 0,limit:"10000",join:newLineChar,interval:"3600"},get_random:{type:void 0,min:void 0,max:void 0},get_screenshot:{type:void 0,basedir:"screenshot",path:"",extname:"png",quality:"-1",fullpage:!1,x:"0",y:"0",width:"0",height:"0",omitbackground:!1,setvar:!1,pathvarname:""},get_tabname:{type:void 0,tabname:void 0,requrl:"",length:!1,idx:"-1",subkeys:""},get_title:{type:void 0,aspath:!1},get_window:{type:void 0,key1:void 0,key2:"",key3:"",key4:"",key5:"",key6:"",keys:!1,length:!1}},import_controller2=require("@letsscrapedata/controller"),appConfig={XML_ATTR_KEY:"$$",XML_CHAR_KEY:"_",XML_CHILDREN_KEY:"children",GEN_CREDITS_BITS:16,GEN_CREDITS_AND:65535,CHECK_DNS_DOMAIN:"example.com",CHECK_POPUP_PAGE_TIMEOUT1:35e3,CHECK_POPUP_PAGE_TIMEOUT2:5e3,RESERVED_PARA_NAMES:["authInfo","inParas","sysParas"],EVENT_TYPES:{lsdPageClose:import_controller2.LsdPageEvent.PAGE_CLOSE,lsdPagePopup:import_controller2.LsdPageEvent.PAGE_POPUP,lsdScraperPopup:"lsdScraperPopup",taskComplete:"taskComplete"},OPERATE_ACTIONS:["click","goto","hover","input","scroll","select","wait","captcha","intercept"],performOneTask:console.log,cfg:{exitWhenCompleted:!1,useParasstrInXmlIfNeeded:!1,loadUnfinishedTasks:!1,loadFailedTasksInterval:0,baseDir:"",baseDownloadDir:"",baseFileDir:"",templateDir:"",taskDir:"",exportsDir:"",inputFileDirPart:"LetsScrapeData",useStealthPlugin:!1,browserControllerType:"patchright",browserType:"chromium",lsdLaunchOptions:{headless:!1,geoip:!0},lsdConnectOptions:{browserUrl:""},browserConfigs:[],captcha:{clientKey:"",captchas:[]},maxConcurrency:1,readCode:"",templateParas:[],urlPrefix:"https://api.letsscrapedata.com/nologin",totalMaxConcurrency:10,minMiliseconds:2e3,moveDataWhenStart:!1,dataFileFormat:"jsonl",columnSeperator:"::"}},TaskParser=class t{static#t(e,r){try{if(!e||!r)throw new Error(`##te Invalid paras, parentEleName ${r} in _applyDefaultElementCfg`);if("object"!=typeof e)return!0;const a=appConfig.XML_ATTR_KEY,s=appConfig.XML_CHILDREN_KEY;e[a]||(e[a]={});let i=r;e[a].type&&(i=i+"_"+e[a].type),e[a].subtype&&(i=i+"_"+e[a].subtype);const n=defaultElementCfg[i];if(!n)throw new Error(`##te No default Cfg for eleName ${i} in _applyDefaultElementCfg`);const o=Object.assign({},n);if(Object.keys(n).forEach(t=>{let r=e[a][t];if("boolean"==typeof o[t])"true"===r||""===r?o[t]=!0:"false"===r&&(o[t]=!1);else if(r||""===r)o[t]=r;else if(void 0===o[t])throw new Error(`##te Attribute ${t} of Element ${i} is undefined`)}),e[a]=o,!e[s])return!0;const c=Array.from(Object.keys(e[s]));for(const r of c){const a=e[s][r];1===a.length&&""===a[0]?e[s][r]=[]:a.forEach(e=>t.#t(e,r))}return!0}catch(t){throw logerr(`##te Error parentEleName ${r} in _applyDefaultElementCfg`),new Error(t)}}static async convertXmlToJson(e,r=!0){try{const a=function(t){const e=t.indexOf("_");return e>0?t.slice(0,e):t},s={attrkey:appConfig.XML_ATTR_KEY,charkey:appConfig.XML_CHAR_KEY,childkey:appConfig.XML_CHILDREN_KEY,explicitChildren:!0,tagNameProcessors:[a]},i=appConfig.XML_CHILDREN_KEY,n=await import_xml2js_lsd.default.parseStringPromise(e,s);if(!(n&&n.template&&n.template[i]&&Array.isArray(n.template[i].actions)))throw new Error(`##te Invalid XML config string: ${e}`);return r&&t.#t(n.template,"template"),n.template}catch(t){throw logerr("##te Exeception in convertXmlToJson"),logerr(`##te xmlCfgStr: ${e}`),new Error(t)}}static getPartOfJsonCfg(t,e,r=!1){try{const r=t[appConfig.XML_CHILDREN_KEY][e][0];return r||null}catch(t){if(r)return null;throw logerr(`##te Exeception when try to get ${e} in getPartOfJsonCfg`),new Error(t)}}static#e(e){try{const r=t.getPartOfJsonCfg(e,"attrs");return!Array.isArray(r?.children?.attr)||r.children.attr.length<=0?[]:r.children.attr.map(t=>t[appConfig.XML_ATTR_KEY])}catch(t){return logerr(t),[]}}static getParaCfgsFromJsonCfg(e){try{const r=t.getPartOfJsonCfg(e,"paras");return!Array.isArray(r?.children?.para)||r.children.para.length<=0?[]:r.children.para.map(t=>t[appConfig.XML_ATTR_KEY])}catch(t){return logerr(t),[]}}static getScriptCfgsFromJsonCfg(e){try{const r=t.getPartOfJsonCfg(e,"scripts",!0);return!Array.isArray(r?.children?.script)||r.children.script.length<=0?[]:r.children.script.map(t=>Object.assign({},t[appConfig.XML_ATTR_KEY],{script:t[appConfig.XML_CHAR_KEY]}))}catch(t){return logerr(t),[]}}static getAttrsInXml(e){const r=t.#e(e),a={};return r.forEach(t=>a[t.name]=t.value),a}static#r(e,r){const a=[],s=appConfig.XML_CHILDREN_KEY;for(const i of e)if(i?.[appConfig.XML_ATTR_KEY]?.type===r)a.push(i);else if(i&&i[s]&&(i[s].action||i[s].condition)){t.#r(i[s].action?i[s].action:i[s].condition,r).forEach(t=>{a.push(t)})}return a}static getCaptchTypes(e){const r=appConfig.XML_CHILDREN_KEY,a=e[r].actions[0][r].action,s=t.#r(a,"captcha"),i=[];for(const t of s){const e=t[appConfig.XML_CHILDREN_KEY]?.captcha;Array.isArray(e)&&e.forEach(t=>{const e=t[appConfig.XML_ATTR_KEY].type;e&&i.push(e)})}return i}static getInParas(t,e=[],r="::"){const a={},s=t.split("@@"),i=["para","apara","rpara"];for(let t=0;t<3;t++){let n=i[t],o=e.filter(t=>t.paraname.startsWith(n)).length;if(s.length>t&&s[t].length>=0){let e=s.length>t&&s[t].length>0?s[t].split(r):[];for(let t=1;t<=e.length;t++)a[`${n}${t}`]=e[t-1];for(let t=e.length+1;t<=o;t++)a[`${n}${t}`]=""}}return a}},fs=__toESM(require("fs"),1),path=__toESM(require("path"),1),import_utils3=require("@letsscrapedata/utils"),import_isolated_vm=__toESM(require("isolated-vm"),1),import_utils2=require("@letsscrapedata/utils"),LsdScript=class t{static#a=null;static#s=null;static convertScriptCfg(t){let{name:e,scenario:r,script:a,scripttype:s,base64:i}=t;const n=s.split("-");i&&(a=(0,import_utils2.decodeFromBase64)(a,!1));return{name:e,script:a,scenario:r,lang:n[0],env:n[1]}}static#i(t){return t.startsWith("std")}static setGetStdFunScript(e){if("function"==typeof e)return t.#a=e,!0;throw new Error("##cfg fun not a function in setGetStdFunScript")}static setClearStdFunScript(e){if("function"==typeof e)return t.#s=e,!0;throw new Error("##cfg fun not a function in clearGetStdFunScript")}static#n(e){return!(!this.#i(e)||!t.#s)&&this.#n(e)}static async#o(e,r={}){if("string"!=typeof e||!e)throw new Error("invalid paras");let a=r[e];return a||(e.startsWith("std")&&t.#a&&(a=await t.#a(e),a)?a:null)}static#c(t,e){try{const r=new import_isolated_vm.default.Isolate,a=r.createContextSync(),s=new import_isolated_vm.default.ExternalCopy(t);a.global.setSync("inData",s.copyInto());const i=r.compileScriptSync(e).runSync(a);return"string"!=typeof i&&logwarn("Please check the script is correct."),"string"==typeof i?i:""}catch(t){return logerr(t),""}}static async#l(e,r,a,s){const i=await t.#o(r,a);if(!i||i.scenario!==s)return"";return t.#c(e,i.script)}static async execFunScript(e,r,a={}){const s=await t.#l(e,r,a,"fun");return"cfginvalid"===s&&t.#n(r),s}static async execExtractScript(e,r,a={}){const s=await t.#l(e,r,a,"extract");let i=(0,import_utils2.getJsonParseOfStr)(s);return i||(i={execData:{},errName:"cfginvalid"}),"cfginvalid"===i.errName&&t.#n(r),i}},TemplateManagerInScraper=class t{static#p=new Map;static#g=new Set;static#h(t){const e=appConfig.cfg.templateParas.find(e=>e.templateId===t);return e?.readCode?e.readCode:appConfig.cfg.readCode}static async#u(t,e){try{if(!e){if(!appConfig.cfg.templateDir)return null;const r=await(0,import_utils3.filesInDir)(appConfig.cfg.templateDir,"general",`tid${t}_`,"xml");let a=1===r.length?r[0]:`tid${t}.xml`;a=path.join(appConfig.cfg.templateDir,a),e=fs.readFileSync(a,"utf8")}if(!e)return null;return{templateId:t,domainId:1,defaultElementSource:"browser",maxExecutionDuration:600,configDetail:e}}catch(t){return null}}static async#d(e,r){try{if(t.#g.has(e))return null;let a=`${appConfig.cfg.urlPrefix}/template`;a=`${a}?tid=${e}&code=${r}`;const s=await fetch(a);if(200!==s.status)return 403===s.status?logwarn(`Failed to get template ${e}: No privilege`):logwarn(`Failed to get template ${e}, status: ${s.status}`),t.#g.add(e),null;const i=await s.json();if(!i||0!==i.code||!i.data)return logwarn(`Failed to get template ${e}: ${i.message}`),null;if(i.data.templateId!==e)return logerr(`Different templateId ${e} / ${i.templateId}`),null;const{domainId:n=0,defaultElementSource:o,configDetail:c="",maxExecutionDuration:l}=i.data;if(!c)return logerr(`Invalid content in template ${e}`),null;return{templateId:e,domainId:n,defaultElementSource:o,maxExecutionDuration:l,configDetail:c}}catch(t){return logdbg(t),null}}static async parseXmlTemplate(t){const e=await TaskParser.convertXmlToJson(t),r=TaskParser.getParaCfgsFromJsonCfg(e),a=TaskParser.getPartOfJsonCfg(e,"fonts",!0),s=TaskParser.getScriptCfgsFromJsonCfg(e),i=TaskParser.getPartOfJsonCfg(e,"actions",!1),n=TaskParser.getAttrsInXml(e),o=TaskParser.getCaptchTypes(e),c=(0,import_utils3.getCurrentUnixTime)(),l={};s.forEach(t=>{l[t.name]=LsdScript.convertScriptCfg(t)});return{actionConfigs:i,paraCfgs:r,fontsConfig:a||null,templScripts:l,attrsInXml:n,captchaTypes:o,lastUsedTime:c,lastCheckTime:c,secureDataFlag:t.includes("secureData.")}}static async getTemplateConfig(e,r=""){if(!r){const r=t.#p.get(e);if(r)return r}let a=await t.#u(e,r);if(!a){const r=t.#h(e);a=await t.#d(e,r)}if(!a){const t=`Cannot get template tid ${e}`;throw logwarn(t),new Error(t)}const s=await t.parseXmlTemplate(a.configDetail),i=Object.assign({},s,{template:a});return t.#p.set(e,i),i}static clearTemplateConfig(e=0){return e>0?t.#p.delete(e):t.#p.clear(),!0}},import_node_events=__toESM(require("events"),1),import_node_events2=require("events"),fs6=__toESM(require("fs"),1),path5=__toESM(require("path"),1),import_got_scraping=require("got-scraping"),import_utils11=require("@letsscrapedata/utils"),import_controller3=require("@letsscrapedata/controller"),uuid=__toESM(require("uuid"),1),SysParas=class{#f;#m;#y;#C;constructor(t,e,r,a){this.#f=t,this.#m=e,this.#y=r,this.#C=a}get version(){return this.#C}get templateId(){return this.#m}get taskId(){return this.#y}get url(){try{return this.#f?.page?this.#f.page.url():""}catch{return""}}get userAgent(){try{return this.#f?.page?.userAgent?this.#f.page.userAgent():""}catch{return""}}get hasPopupPage(){return this.#f?.popupPage?"1":"0"}get subtaskNum(){const t=this.#f?.subtasks;return Array.isArray(t)?String(t.length):"0"}get datatableNum(){const t=this.#f?.execData;return t&&"object"==typeof t?String(Object.keys(t).length):"0"}get currentISODate(){return(new Date).toISOString().slice(0,10)}get currentISOString(){return(new Date).toISOString()}get currentLocaleString(){return(new Date).toLocaleString()}get currentLocaleDateString(){return(new Date).toLocaleDateString()}get currentLocaleTimeString(){return(new Date).toLocaleTimeString()}get currentString(){return(new Date).toString()}get currentUTCString(){return(new Date).toUTCString()}get currentUnixMs(){return String(Date.now())}get currentUnixTs(){return String(Math.floor(Date.now()/1e3))}get random10(){return String(Math.floor(10*Math.random()))}get random100(){return String(Math.floor(100*Math.random()))}get random1000(){return String(Math.floor(1e3*Math.random()))}get random10000(){return String(Math.floor(1e4*Math.random()))}get uuidv1(){return uuid.v1()}get uuidv4(){return uuid.v4()}},iconv=__toESM(require("iconv-lite"),1),zlib=__toESM(require("zlib"),1),cheerio=__toESM(require("cheerio"),1),import_dateformat=__toESM(require("dateformat"),1),import_utils4=require("@letsscrapedata/utils");function findStrInObj(t,e,r="obj",a=!1,s=1){let i,n=[];if(s>20)return[];if(Array.isArray(t))for(let o=0;o<t.length;o++){const c=r?`${r}.${o}`:`${o}`;i=findStrInObj(t[o],e,c,a,s+1),n.push(...i)}else if("object"!=typeof t||t){if("string"==typeof t)(a&&t===e||!a&&t.includes(e))&&n.push([r,t]);else if("number"==typeof t){const s=String(t);(a&&s===e||!a&&s.includes(e))&&n.push([r,t])}}else for(const o in t){const c=r?`${r}.${o}`:`${o}`;i=findStrInObj(t[o],e,c,a,s+1),n.push(...i)}return n}var LsdString=class t{static specialConvertFunObj={};static setSpecialConvertFunObj(e){return t.specialConvertFunObj=e,!0}static transformStrSync(e,r,a){let s=e;try{if("string"!=typeof e||!Array.isArray(r))throw new Error("Invalid paras in transformStr");for(const e of r){if("object"!=typeof e)throw new Error("Invalid funCfg in transformStr");const r=1===e.type.length?`${e.type}_${e.subtype}`:e.type;let a=t.#v[r];if(!a||"function"!=typeof a)return logerr(`Invalid funName ${r} in transformStr`),"";s=a(s,e)}}catch(t){t.message.includes(" JSON ")||t.message.startsWith("##check")||loginfo(t),s=""}return s||a}static async transformStr(e,r,a,s){let i=e;try{if("string"!=typeof e||!Array.isArray(r))throw new Error("Invalid paras in transformStr");for(const e of r){if("object"!=typeof e)throw new Error("Invalid funCfg in transformStr");const r=1===e.type.length?`${e.type}_${e.subtype}`:e.type;if("script"!==r){let a=t.#v[r];if(!a||"function"!=typeof a)return logerr(`Invalid funName ${r} in transformStr`),"";i=a(i,e)}else i=await t.#b(i,e,s)}}catch(t){t.message.includes(" JSON ")||t.message.startsWith("##check")||loginfo(t),i=""}return i||a}static#w(t,e){if(!Array.isArray(t))throw new Error("##check data is not an array!");if(void 0!==e&&!Array.isArray(e))throw new Error("##check data is not an array!")}static#S(t,e){if(!t||"object"!=typeof t)throw new Error("##check data is not an not-null object!");if(void 0!==e&&(!e||"object"!=typeof t))throw new Error("##check data is not an not-null object!")}static#k(t){return(0,import_utils4.getStringOfObj)(t)}static#_(t,e){for(const r of e.split(".")){if("object"!=typeof t||!t)return"";t=t[r]}return null==t?"":"string"==typeof t?t:"number"==typeof t?String(t):"boolean"==typeof t?t?"1":"0":"object"==typeof t?JSON.stringify(t):""}static#x(e,r){const{idx:a}=r,s=(0,import_utils4.getJsonParseOfStr)(e);t.#w(s);const i=s.at(parseInt(a));return t.#k(i)}static#E(e,r){const{array2:a}=r,s=(0,import_utils4.getJsonParseOfStr)(e),i=(0,import_utils4.getJsonParseOfStr)(a);t.#w(s,i);let n=s.concat(i);return JSON.stringify(n)}static#A(e,r){const{pattern:a,flags:s}=r,i=(0,import_utils4.getJsonParseOfStr)(e);t.#w(i);const n=new RegExp(a,s);return i.every(t=>(0,import_utils4.getStringOfObj)(t).match(n))?"1":"0"}static#I(e,r){const{pattern:a,flags:s}=r,i=(0,import_utils4.getJsonParseOfStr)(e);t.#w(i);const n=new RegExp(a,s),o=i.filter(t=>(0,import_utils4.getStringOfObj)(t).match(n));return JSON.stringify(o)}static#O(e,r){const{pattern:a,flags:s}=r,i=(0,import_utils4.getJsonParseOfStr)(e);t.#w(i);const n=new RegExp(a,s),o=i.find(t=>(0,import_utils4.getStringOfObj)(t).match(n));return(0,import_utils4.getStringOfObj)(o)}static#T(e,r){const{pattern:a,flags:s}=r,i=(0,import_utils4.getJsonParseOfStr)(e);t.#w(i);const n=new RegExp(a,s),o=i.findIndex(t=>(0,import_utils4.getStringOfObj)(t).match(n));return String(o)}static#D(e,r){const{item:a}=r,s=(0,import_utils4.getJsonParseOfStr)(e);return t.#w(s),s.includes(a)?"1":"0"}static#P(e,r){const{item:a,position:s}=r,i=(0,import_utils4.getJsonParseOfStr)(e);return t.#w(i),String(i.indexOf(a,parseInt(s)))}static#N(e,r){const{join:a}=r,s=(0,import_utils4.getJsonParseOfStr)(e);return t.#w(s),s.join(a)}static#R(e,r){const{values:a,minlen:s,samelen:i}=r,n=parseInt(s),o=(0,import_utils4.getJsonParseOfStr)(e),c=(0,import_utils4.getJsonParseOfStr)(a);t.#w(o,c);const l=o.length,p=c.length;if(i&&l!==p)return"";const g=Math.min(l,p);if(g<n)return"";const h={};for(let t=0;t<g;t++){const e=o[t],r=c[t];if(!("string"==typeof e&&e.length>0&&"string"==typeof r))return"";h[e]=r}return JSON.stringify(h)}static#F(e){const r=(0,import_utils4.getJsonParseOfStr)(e);return t.#w(r),String(r.length)}static#j(e,r){const{subkeys:a,secondjoin:s}=r,[i,n]=a.split("@@"),o=(0,import_utils4.getJsonParseOfStr)(e);t.#w(o);let c=[];if(n){const e=i.split(",");for(const r of o){const a=(0,import_utils4.getMemberOfObject)(r,e);t.#w(a);const i=a.map(e=>t.#_(e,n));s?c.push(i.join(s)):c.push(JSON.stringify(i))}}else c=o.map(e=>t.#_(e,i));return JSON.stringify(c)}static#$(e,r){const a=(0,import_utils4.getJsonParseOfStr)(e);t.#w(a);const s=a.map(e=>"string"==typeof e?t.#L(e,r):e);return JSON.stringify(s)}static#M(e){const r=(0,import_utils4.getJsonParseOfStr)(e);t.#w(r);const a=r.map(t=>Number(t));return a.findIndex(t=>Number.isNaN(t))>=0?"":String(Math.max(...a))}static#q(e){const r=(0,import_utils4.getJsonParseOfStr)(e);t.#w(r);const a=r.map(t=>Number(t));return a.findIndex(t=>Number.isNaN(t))>=0?"":String(Math.min(...a))}static#U(e){const r=(0,import_utils4.getJsonParseOfStr)(e);t.#w(r);const a=r.pop();return t.#k(a)}static#J(e,r){const{item:a}=r,s=(0,import_utils4.getJsonParseOfStr)(e);return t.#w(s),s.push(a),JSON.stringify(s)}static#H(e,r){const a=(0,import_utils4.getJsonParseOfStr)(e);t.#w(a);const s=a.map(e=>"string"==typeof e?t.#B(e,r):e);return JSON.stringify(s)}static#V(e,r){const{array2:a}=r,s=(0,import_utils4.getJsonParseOfStr)(e),i=(0,import_utils4.getJsonParseOfStr)(a);t.#w(s,i);let n=(0,import_utils4.getComplementOfTwoArray)(s,i);return JSON.stringify(n)}static#W(e,r){const{array2:a}=r,s=(0,import_utils4.getJsonParseOfStr)(e),i=(0,import_utils4.getJsonParseOfStr)(a);t.#w(s,i);let n=(0,import_utils4.getDifferenceOfTwoArray)(s,i);return JSON.stringify(n)}static#K(e,r){const{array2:a}=r,s=(0,import_utils4.getJsonParseOfStr)(e),i=(0,import_utils4.getJsonParseOfStr)(a);t.#w(s,i);let n=(0,import_utils4.getIntersectionOfTwoArray)(s,i);return JSON.stringify(n)}static#G(e,r){const{array2:a}=r,s=(0,import_utils4.getJsonParseOfStr)(e),i=(0,import_utils4.getJsonParseOfStr)(a);t.#w(s,i);let n=(0,import_utils4.getUnionOfTwoArray)(s,i);return JSON.stringify(n)}static#z(e){const r=(0,import_utils4.getJsonParseOfStr)(e);t.#w(r);const a=r.shift();return t.#k(a)}static#Y(e){const r=(0,import_utils4.getJsonParseOfStr)(e);t.#w(r);let a=r.sort(()=>Math.random()-.5);return JSON.stringify(a)}static#X(e,r){const{beginidx:a,len:s,endidx:i}=r,n=parseInt(a);let o="string"==typeof i&&i.length>0?parseInt(i):void 0;const c="string"==typeof s&&s.length>0?parseInt(s):void 0;c&&c>0&&(o=n+c);const l=(0,import_utils4.getJsonParseOfStr)(e);t.#w(l);const p=l.slice(n,o);return JSON.stringify(p)}static#Q(t,e,r){let a;return a="string"===e?"asc"===r?t.sort((t,e)=>t.localeCompare(e)):t.sort((t,e)=>e.localeCompare(t)):"asc"===r?t.sort((t,e)=>Number(t)-Number(e)):t.sort((t,e)=>Number(e)-Number(t)),a}static#Z(e,r){const{valtype:a,sorttype:s}=r,i=(0,import_utils4.getJsonParseOfStr)(e);t.#w(i);let n=t.#Q(i,a,s);return JSON.stringify(n)}static#tt(e,r){const{key:a,value:s}=r;if(!a||!s)return"";const i=(0,import_utils4.getJsonParseOfStr)(e);t.#w(i);const n={};for(const t of i){const e=String(t[a]),r=(0,import_utils4.getStringOfObj)(t[s]);n[e]=r}return JSON.stringify(n)}static#et(e){const r=(0,import_utils4.getJsonParseOfStr)(e);t.#w(r);const a=[...new Set(r)];return JSON.stringify(a)}static#rt(e,r){const{item:a}=r,s=(0,import_utils4.getJsonParseOfStr)(e);return t.#w(s),s.unshift(a),JSON.stringify(s)}static#at(t){return String(Math.ceil(Number(t)))}static#st(t,e){const{format:r,ms:a}=e;let s=t?parseInt(t):0;a||(s*=1e3);const i=s?new Date(s):new Date;return"toISODate"===r?i.toISOString().slice(0,10):"toISOString"===r?i.toISOString():"toLocaleString"===r?i.toLocaleString():"toLocaleDateString"===r?i.toLocaleDateString():"toLocaleTimeString"===r?i.toLocaleTimeString():"toString"===r?i.toString():"toUTCString"===r?i.toUTCString():(0,import_dateformat.default)(i,r)}static#it(t,e){const{number2:r}=e;return Number(t)===Number(r)?"1":"0"}static#nt(t){return String(Math.floor(Number(t)))}static#ot(t,e){const{number2:r}=e;return Number(t)>=Number(r)?"1":"0"}static#ct(t,e){const{number2:r}=e;return Number(t)>Number(r)?"1":"0"}static#lt(t){const e=Number(t);return Number.isNaN(e)?"1":"0"}static#pt(t,e){const{number2:r}=e;return Number(t)<=Number(r)?"1":"0"}static#gt(t,e){const{number2:r}=e;return Number(t)<Number(r)?"1":"0"}static#ht(t,e){const{number2:r}=e,a=Number(t),s=Number(r);return String(a>s?a:s)}static#ut(t,e){const{number2:r}=e,a=Number(t),s=Number(r);return String(a<s?a:s)}static#dt(t){return String(parseFloat(t))}static#ft(t){return String(parseInt(t))}static#mt(t){return String(Math.round(Number(t)))}static#yt(t,e){const{digits:r,fixed:a}=e,s=Number(t),i=parseInt(r);if(a)return String(s.toFixed(i));{const t=String(s).split(".");return 2!==t.length||t[1].length<=i?String(s):String(s.toFixed(i))}}static#Ct(e,r){const{object2:a}=r,s=(0,import_utils4.getJsonParseOfStr)(e),i=(0,import_utils4.getJsonParseOfStr)(a);t.#S(s,i);const n=Object.assign({},s,i);return JSON.stringify(n)}static#vt(e,r){const{subkeys:a}=r;let s=(0,import_utils4.getJsonParseOfStr)(e);return t.#S(s),t.#_(s,a)}static#bt(e,r){const{kvjoin:a}=r;let s=(0,import_utils4.getJsonParseOfStr)(e);t.#S(s);const i=Array.from(Object.entries(s)).map(t=>t.join(a));return JSON.stringify(i)}static#wt(t,e){const{str:r,equal:a}=e;const s=findStrInObj((0,import_utils4.getJsonParseOfStr)(t),r,"",a);return s.length>0?s.map(t=>`${t[0]}: ${JSON.stringify(t[1])}`).join("\n"):""}static#St(e){let r=(0,import_utils4.getJsonParseOfStr)(e);t.#S(r);const a=Array.from(Object.keys(r));return JSON.stringify(a)}static#kt(e,r){let a=(0,import_utils4.getJsonParseOfStr)(e);t.#S(a);for(const e of Object.keys(a))"string"==typeof a[e]&&(a[e]=t.#L(a[e],r));return JSON.stringify(a)}static#_t(e,r){let a=(0,import_utils4.getJsonParseOfStr)(e);t.#S(a);for(const e of Object.keys(a))"string"==typeof a[e]&&(a[e]=t.#B(a[e],r));return JSON.stringify(a)}static#xt(e,r){const{valtype:a,sorttype:s}=r;let i=(0,import_utils4.getJsonParseOfStr)(e);t.#S(i);const n=Array.from(Object.keys(i)),o=t.#Q(n,a,s),c={};return o.forEach(t=>c[t]=i[t]),JSON.stringify(c)}static#Et(e){let r=(0,import_utils4.getJsonParseOfStr)(e);t.#S(r);const a=Array.from(Object.values(r));return JSON.stringify(a)}static#At(t,e,r=0){try{const a="root"===e?t.root():t(e);return a.length<=0||-9999===r?a:a.eq(r)}catch(t){return logerr("##te cheerio invalid $ or loc"),null}}static#It(e,r){try{const{loc:a,idx:s,attrname:i,xml:n,decode:o}=r,c=parseInt(s),l={xmlMode:n,decodeEntities:o},p=cheerio.load(e,l);return t.#At(p,a,c).attr(i)}catch(t){return logerr(`##tmp cheerio xAttr err: ${t}`),""}}static#Ot(e,r){try{const{loc:a,idx:s,attrname:i,xml:n,decode:o}=r,c=parseInt(s),l={xmlMode:n,decodeEntities:o},p=cheerio.load(e,l);return t.#At(p,a,c).data(i)}catch(t){return logerr(`##tmp cheerio xData err: ${t}`),""}}static#Tt(t,e){try{const{loc:r,xml:a,decode:s}=e,i={xmlMode:a,decodeEntities:s},n=cheerio.load(t,i);return n(r).empty(),n.html()}catch(e){return logerr(`##tmp cheerio xEmpty err: ${e}`),t}}static#Dt(e,r){try{const{loc:a,idx:s,xml:i,decode:n}=r,o=parseInt(s),c={xmlMode:i,decodeEntities:n},l=cheerio.load(e,c);if(a){return t.#At(l,a,o).html()}return l.html()}catch(t){return logerr(`##tmp cheerio xHtml err: ${t}`),""}}static#Pt(e,r){try{const{loc:a,xml:s,decode:i}=r,n=-9999,o={xmlMode:s,decodeEntities:i},c=cheerio.load(e,o),l=t.#At(c,a,n);return String(l.length)}catch(t){return logerr(`##tmp cheerio xLength err: ${t}`),"0"}}static#Nt(t,e){try{const{loc:r,xml:a,decode:s}=e,i={xmlMode:a,decodeEntities:s},n=cheerio.load(t,i);return n(r).remove(),n.html()}catch(e){return logerr(`##tmp cheerio xRemove err: ${e}`),t}}static#Rt(e,r){try{const{loc:a,idx:s,xml:i,decode:n}=r,o=parseInt(s),c={xmlMode:i,decodeEntities:n},l=cheerio.load(e,c);if(a){return t.#At(l,a,o).text()}return l.text()}catch(t){return logerr(`##tmp cheerio c_text err: ${t}`),""}}static#Ft(t,e){const{idx:r}=e,a=parseInt(r),s=t.at(a);return s||""}static#jt(t,e){const{openchar:r,startstr:a,regexp:s,flags:i,position:n}=e;if("string"!=typeof t||"string"!=typeof r||!["{","[","(","lt"].includes(r)||"string"!=typeof a||"number"!=typeof parseInt(n)||parseInt(n)<0)return"";const o="lt"===r?"<":r,c={"{":"}","[":"]","(":")","<":">"}[o];let l=1,p=-1;if(a){if(s){const e=new RegExp(a,i),r=t.match(e);if(!r||1!==r.length||void 0===r.index)return"";p=r.index}else p=t.indexOf(a);if(p<0)return""}else p=parseInt(n);const g=t.indexOf(o,p);if(g<0)return"";let h=g+1;for(;h<t.length;h++){let e=t[h];if(e===o)l++;else if(e===c&&(l--,0===l))break}const u=h<=t.length?h+1:-1;return u>g?t.substring(g,u):""}static#$t(t,e){return t||e?void 0:{}}static#Lt(e,r){try{const{method:a,sourceencoding:s,targetencoding:i}=r,n=t.#$t(r,!0),o=Buffer.from(e,s);let c=null;return"gzip"===a?c=zlib.gzipSync(o,n):"deflate"===a?c=zlib.deflateSync(o,n):"deflateraw"===a?c=zlib.deflateRawSync(o,n):"brotli"===a&&(c=zlib.brotliCompressSync(o,n)),c?t.#Mt(c,i):""}catch(t){return""}}static#qt(t,e){let r=t;const{str1:a,str2:s,str3:i,str4:n,str5:o}=e;return[a,s,i,n,o].forEach(t=>{"string"==typeof t&&(r=r.concat(t))}),r}static#Mt(t,e,r="0",a="0"){const s=r?Number(r):0,i=a?Number(a):0;return t instanceof Buffer?i>0?t.toString(e,s,i):s>0?t.toString(e,s):t.toString(e):""}static#Ut(e,r){const{sourceencoding:a,targetencoding:s,start:i,end:n}=r;try{if(a===s||!a||!s)return e;const r=Buffer.from(e,a);return t.#Mt(r,s,i,n)}catch(t){return""}}static#Jt(t,e){const{str1:r,val1:a,str2:s,val2:i,str3:n,val3:o,str4:c,val4:l,str5:p,val5:g,defaultval:h}=e;try{return t===r?a:t===s?i:t===n?o:t===c?l:t===p?g:h}catch(t){return""}}static#Ht(e,r){try{const{method:a,sourceencoding:s,targetencoding:i,start:n,end:o}=r,c=t.#$t(r,!1),l=Buffer.from(e,s);let p=Buffer.from(e,s);return"gunzip"===a?p=zlib.gunzipSync(l,c):"inflate"===a?p=zlib.inflateSync(l,c):"inflateraw"===a?p=zlib.inflateRawSync(l,c):"unzip"===a?p=zlib.unzipSync(l,c):"brotli"===a&&(p=zlib.brotliDecompressSync(l,c)),p?t.#Mt(p,i,n,o):""}catch(t){return""}}static#Bt(t,e){const{str:r}=e;return t.endsWith(r)?"1":"0"}static#Vt(t,e){const{str:r}=e;return t===r?"1":"0"}static#Wt(t,e){const{hashmethod:r}=e;return import_utils4.LsdUrl.getHashCode(t,r)}static#Kt(t,e){const{str:r}=e;if("string"!=typeof r)throw new Error("Invalid searchstr in _contains");return t.includes(r)?"1":"0"}static#Gt(t,e){const{str:r,position:a}=e;if("string"!=typeof r)throw new Error("Invalid str in _insert");return String(t.indexOf(r,parseInt(a)))}static#zt(t,e){const{str:r}=e;if("string"!=typeof r)throw new Error("Invalid str in _insert");return r+t}static#Yt(t,e){const{items:r}=e;if("string"!=typeof r)throw new Error("Invalid str in _isin");if(!r)return"0";return r.split(",").includes(t)?"1":"0"}static#Xt(t,e){const{split:r,kvsplit:a,keytrim:s,keynows:i,valuetrim:n,valuenows:o}=e;if(!r||!a)return"{}";try{let e={};const c=t.split(new RegExp(r)),l=new RegExp(a);for(const t of c){const r=t.split(l);if(2!==r.length)continue;let a=s?r[0].trim():r[0];i&&(a=a.split("").filter(t=>t.trim()).join(""));let c=n?r[1].trim():r[1];o&&(c=c.split("").filter(t=>t.trim()).join("")),a&&(e[a]=c)}return JSON.stringify(e)}catch(t){return"{}"}}static#Qt(t){return String(t.length)}static#L(t,e){const{pattern:r,flags:a,idx:s}=e,i=e.resulttype,n=new RegExp(r,a),o=t.match(n);if("boolean"===i)return o?"1":"0";if(!o)return"";if("all"===i)return o.join(",");if("array"===i)return JSON.stringify(o);if("idx"===i){const t=parseInt(s);return o[t]?String(o[t]):""}return"index"===i?"number"==typeof o.index?String(o.index):"":"length"===i?String(o.length):void(0,import_utils4.unreachable)(i)}static#Zt(t){return t.normalize()}static#te(t){return t&&"0"!==t&&"false"!==t.toLowerCase()?"0":"1"}static#ee(t,e){const{targetlen:r,padstr:a}=e,s=parseInt(r),i="string"==typeof a&&a.length>0?a:" ";return t.padEnd(s,i)}static#re(t,e){const{targetlen:r,padstr:a}=e,s=parseInt(r),i="string"==typeof a&&a.length>0?a:" ";return t.padStart(s,i)}static#ae(t){const e=(0,import_utils4.getJsonParseOfStr)(t);return"string"==typeof e?e:""}static#B(t,e){const{substr:r,newstr:a,regexp:s,flags:i}=e;try{if("string"!=typeof r)throw new Error("Invalid substr in _replace");if("string"!=typeof a)throw new Error("Invalid newstr in _replace");return s?t.replace(RegExp(r,i),a):t.replace(r,a)}catch(e){return t}}static#se(t,e){const{pattern:r}=e,a=new RegExp(r);return String(t.search(a))}static#ie(t,e){const{beginidx:r,len:a,endidx:s}=e,i=parseInt(r);let n="string"==typeof s&&s.length>0?parseInt(s):void 0;const o="string"==typeof a&&a.length>0?parseInt(a):void 0;return o&&o>0&&(n=i+o),t.slice(i,n)}static#ne(e,r){let a=e;try{const{method:s}=r;return"function"==typeof t.specialConvertFunObj[s]&&(a=t.specialConvertFunObj[s](e,r)),a}catch(t){return a}}static#oe(e,r){const{split:a,limit:s}=r,i=new RegExp(a),n=parseInt(s);let o=n>0?e.split(i,n):e.split(i);return t.#w(o),JSON.stringify(o)}static#ce(t,e){const{str:r}=e;return t.startsWith(r)?"1":"0"}static#le(t,e){const{substr:r,regexp:a,flags:s,position:i,last:n,include:o}=e,c=o,l=parseInt(i);if("string"!=typeof r)throw new Error("Invalid substr in _substrAfter");let p=-1,g=r;if(a){const e=new RegExp(r,s),a=t.match(e);if(!a||1!==a.length||void 0===a.index)return t;p=a.index,g=a[0]}else p=n?l?t.lastIndexOf(r,l):t.lastIndexOf(r):l?t.indexOf(r,l):t.indexOf(r);return p<0?t:String(c?t.substring(p):t.substring(p+g.length))}static#pe(t,e){const{substr:r,regexp:a,flags:s,position:i,last:n,include:o}=e,c=parseInt(i),l=o;if("string"!=typeof r)throw new Error("Invalid substr in substrBefore");let p=-1,g=r;if(a){const e=new RegExp(r,s),a=t.match(e);if(!a||1!==a.length||void 0===a.index)return t;p=a.index,g=a[0]}else p=n?c?t.lastIndexOf(r,c):t.lastIndexOf(r):c?t.indexOf(r,c):t.indexOf(r);return p<0?t:l?t.substring(0,p+g.length):t.substring(0,p)}static#ge(t){try{return String(BigInt(t))}catch(t){return""}}static#he(t){try{let e=t.replace(/true/g,"1");return e=e.replace(/false/g,"0"),e.search(/^[\s\d.+\-*/()<>=!|&:?]*$/)>-1&&-1===e.search(/=>/)?String(Number(Boolean((0,eval)(e)))):(loginfo(`Invalid logic expression ${t} in _toBool`),"0")}catch(t){return"0"}}static#ue(t){return t.toLowerCase()}static#de(t){let e=t;return e.search(/^[\s\d.+\-*/()<>=!|&:?]+$/)>-1&&-1===e.search(/=>/)&&e.trim().length>0?String(Number((0,eval)(e))):(loginfo(`Invalid arithmetic expression ${e} in _toNum`),"0")}static#fe(t){return t.toUpperCase()}static#me(t){return t.trim()}static#ye(t){return t.trimEnd()}static#Ce(t){return t.trimStart()}static#ve(t,e){try{const{method:r,encoding:a,percent:s}=e;if("URI"===r)return encodeURI(t);if("URIComponent"===r)return encodeURIComponent(t);if("iconv"===r){const e=iconv.encode(t,a).toString("hex").toUpperCase();if(!e||e.length%2!=0)return logerr("Invalid str length in _urlencode"),"";if(s){const t=e.match(/../g);return t?t.map(t=>`%${t}`).join(""):""}return e}return logerr(`Invalid method ${r} in _urlencode`),""}catch(t){return logerr(t),""}}static#be(t,e){try{const{method:r,encoding:a,percent:s}=e;if("URI"===r)return decodeURI(t);if("URIComponent"===r)return decodeURIComponent(t);if("iconv"===r){const e=s?/.../g:/../g,r=t.match(e);if(!r)return"";const i=r.map(t=>parseInt(t.slice(1),16));return iconv.decode(Buffer.from(i),a)}return logerr(`Invalid method ${r} in _urlencode`),""}catch(t){return logerr(t),""}}static#we(t,e){const{param1:r,param2:a,param3:s}=e;if("string"!=typeof r)throw new Error("Invalid params in _urldel");let i="";try{const e=new URL(t);if(!e||!e.searchParams||!e.searchParams.delete)return"";r&&e.searchParams.delete(r),a&&e.searchParams.delete(a),s&&e.searchParams.delete(s),i=e.href}catch(t){i=""}return i||""}static#Se(t,e){const{attrorpath:r,hashmethod:a,param:s,hostnameparts:i,params:n,title:o,extname:c,validextnames:l}=e;if("string"!=typeof r)throw new Error("Invalid attr in _urlget");const p=i?Number(i):0;let g="";return g=["href","origin","protocol","username","password","host","search","hash","hostname","port","hrefwithoutsearch","param"].includes(r)?import_utils4.LsdUrl.getUrlAttribute(t,r,p,s):import_utils4.LsdUrl.getFilePathFromUrl(t,r,a,p,n,c,l,o),"string"==typeof g?g:""}static#ke(t,e,r,a){if(!t||!t.searchParams||!t.searchParams.get||"string"!=typeof e||"string"!=typeof r)return!1;if(!e)return!0;if(!a){if(null!==t.searchParams.get(e))return!0}return t.searchParams.set(e,r),!0}static#_e(e,r){const{param1:a,val1:s,param2:i,val2:n,param3:o,val3:c,replace:l}=r,p=l;if("string"!=typeof a)throw new Error("Invalid params in _urlset");let g="";try{const r=new URL(e);t.#ke(r,a,s,p),t.#ke(r,i,n,p),t.#ke(r,o,c,p),g=r.href}catch(t){g=""}return g||""}static async#b(t,e,r){const{name:a,arg1:s,arg2:i,arg3:n,arg4:o,arg5:c}=e;try{const e={origStr:t,arg1:s,arg2:i,arg3:n,arg4:o,arg5:c};return await LsdScript.execFunScript(e,a,r)}catch(t){return""}}static#v={a_at:t.#x,a_concat:t.#E,a_every:t.#A,a_filter:t.#I,a_find:t.#O,a_findindex:t.#T,a_includes:t.#D,a_indexof:t.#P,a_join:t.#N,a_keysvaluestoobj:t.#R,a_length:t.#F,a_mapattr:t.#j,a_match:t.#$,a_max:t.#M,a_min:t.#q,a_pop:t.#U,a_push:t.#J,a_replace:t.#H,a_setcomplement:t.#V,a_setdifference:t.#W,a_setintersection:t.#K,a_setunion:t.#G,a_shift:t.#z,a_shuffle:t.#Y,a_slice:t.#X,a_sort:t.#Z,a_toobj:t.#tt,a_uniq:t.#et,a_unshift:t.#rt,n_ceil:t.#at,n_dateformat:t.#st,n_eq:t.#it,n_floor:t.#nt,n_ge:t.#ot,n_gt:t.#ct,n_isnan:t.#lt,n_le:t.#pt,n_lt:t.#gt,n_max:t.#ht,n_min:t.#ut,n_parsefloat:t.#dt,n_parseint:t.#ft,n_round:t.#mt,n_tofixed:t.#yt,o_assign:t.#Ct,o_attr:t.#vt,o_entries:t.#bt,o_findstrinobj:t.#wt,o_keys:t.#St,o_match:t.#kt,o_replace:t.#_t,o_sort:t.#xt,o_values:t.#Et,x_attr:t.#It,x_data:t.#Ot,x_empty:t.#Tt,x_html:t.#Dt,x_length:t.#Pt,x_remove:t.#Nt,x_text:t.#Rt,at:t.#Ft,closingsubstr:t.#jt,compress:t.#Lt,concat:t.#qt,convertencoding:t.#Ut,decode:t.#Jt,decompress:t.#Ht,endswith:t.#Bt,eq:t.#Vt,hashcode:t.#Wt,includes:t.#Kt,indexof:t.#Gt,insert:t.#zt,isin:t.#Yt,itemstoobj:t.#Xt,length:t.#Qt,match:t.#L,normalize:t.#Zt,not:t.#te,padend:t.#ee,padstart:t.#re,parsestr:t.#ae,replace:t.#B,search:t.#se,slice:t.#ie,specialconvert:t.#ne,split:t.#oe,startswith:t.#ce,substrafter:t.#le,substrbefore:t.#pe,tobigint:t.#ge,tobool:t.#he,tolowercase:t.#ue,tonum:t.#de,touppercase:t.#fe,trim:t.#me,trimend:t.#ye,trimstart:t.#Ce,urldecode:t.#be,urldelparams:t.#we,urlencode:t.#ve,urlget:t.#Se,urlsetparams:t.#_e,script:t.#b}};function getTransformExpStrSync(t,e,r=""){return LsdString.transformStrSync(t,e,r)}async function getTransformExpStr(t,e,r="",a={}){return await LsdString.transformStr(t,e,r,a)}var fs2=__toESM(require("fs"),1),path2=__toESM(require("path"),1),import_header_generator=require("header-generator"),uuid2=__toESM(require("uuid"),1),import_utils6=require("@letsscrapedata/utils"),import_hpagent=require("hpagent"),download=__toESM(require("download"),1);async function lsdDownload(t,e="",r=null){const a={};if(e){const t=new import_hpagent.HttpsProxyAgent({keepAlive:!0,keepAliveMsecs:1e3,maxSockets:256,maxFreeSockets:256,scheduling:"lifo",proxy:e});a.agent={https:t}}let s;return r&&(a.headers=r),s=e||r?await download.default(t,void 0,a):await download.default(t),s}var import_utils5=require("@letsscrapedata/utils");function isDataTableName(t){const e=!!t.match(/^dat_\d{16}$/);return!e&&t.startsWith("dat_00")&&t.length<30&&logwarn(`##log chedk the tabname ${t} is correct`),e}function getSubkeysValueOfDataRecord(t,e){if(0===e.length)return t;const r=t[e[0]];if(1===e.length)return r;let a=(0,import_utils5.getJsonParseOfStr)(r);return a&&"object"==typeof a?(a=(0,import_utils5.getMemberOfObject)(a,e.slice(1)),a):void 0}function getSubkeysStringOfDataRecord(t,e){const r=getSubkeysValueOfDataRecord(t,e);return(0,import_utils5.getStringOfObj)(r)}function getSubkeysStrOfObject(t,e){const r=e.length>0?(0,import_utils5.getMemberOfObject)(t,e):t;return(0,import_utils5.getStringOfObj)(r)}var GetPara=class t{static getOtherFunObj={};static setGetOtherFunObj(e){return t.getOtherFunObj=e,!0}static noNeedToReturnContent="";static async getPara(e,r){if(!e||!e.type||!r)return"";const a=e.type;let s="";switch(a){case"addedtaskparas":"function"==typeof t.getOtherFunObj.getAddedTaskParasFun&&(s=await t.getOtherFunObj.getAddedTaskParasFun(e));break;case"cookie":s=t.getCookie(e,r);break;case"execedtaskparas":"function"==typeof t.getOtherFunObj.getExecedTaskParasFun&&(s=await t.getOtherFunObj.getExecedTaskParasFun(e));break;case"file":s=await t.getFile(e,r);break;case"httpheaders":s=await t.getHttpHeaders(e,r);break;case"localstorage":s=t.getLocalstorage(e,r);break;case"queuedcntwithparas":"function"==typeof t.getOtherFunObj.getQueuedCntWithParasCfgFun&&(s=await t.getOtherFunObj.getQueuedCntWithParasCfgFun(e));break;case"queuedtaskparas":"function"==typeof t.getOtherFunObj.getQueuedTaskParasFun&&(s=await t.getOtherFunObj.getQueuedTaskParasFun(e));break;case"random":s=t.getRandom(e);break;case"sysparas":s="please use ${sysParas.paraname}!!!";break;case"tabname":s=await t.getTabname(e,r);break;default:(0,import_utils6.unreachable)(a)}return s}static async getParaInElement(e,r,a){if(!e||!e.type||!a)return"";const s=e.type,i=a.paras;let n="";if("screenshot"===s)n=await t.getScreenshot(r,e,i);else(0,import_utils6.unreachable)(s);return n}static async getParaInPage(e,r,a){if(!e||!e.type||!a)return"";const s=e.type,i=a.paras;let n="";switch(s){case"content":n=await t.getContent(r);break;case"evaluate":n=await t.getEvaluate(r,e);break;case"mhtml":n=await t.getMhtml(r,e,i);break;case"pdf":n=await t.getPdf(r,e,i);break;case"screenshot":n=await t.getScreenshot(r,e,i);break;case"title":n=await t.getTitle(r,e);break;case"window":n=await t.getWindow(r,e);break;default:(0,import_utils6.unreachable)(s)}return n}static async getContent(t){try{if(!t)return"";return await t.content()}catch(t){return""}}static getCookie(e,r){const{domain:a,name:s,attr:i,source:n}=e,o="orig"===n?r.origStateData:r.newStateData;if(Array.isArray(o?.cookies)){if(0===o.cookies.length)return"";if(a&&t.canAccessSeureData(r.domainNames,`https://${a}`)){const t=o.cookies.find(t=>t.domain===a&&t.name===s);return t?"name"===i?t.name:String(t.expires):""}return""}return""}static getLocalstorage(e,r){const{origin:a,name:s,source:i,parsestr:n}=e,o="orig"===i?r.origStateData:r.newStateData;if(Array.isArray(o?.origins)){if(0===o.origins.length)return"";if(a&&t.canAccessSeureData(r.domainNames,a)){const t=o.origins.find(t=>t.origin===a);if(t){const e=t.localStorage.find(t=>t.name===s);if(e){const t=e.value;if(n){const e=(0,import_utils6.getJsonParseOfStr)(t);return"string"==typeof e?e:""}return t}return""}return""}return""}return""}static async getEvaluate(t,e){const{script:r,data:a,isolated:s,secure:i}=e;let n;try{if(!i&&(r.includes("cookie")||r.includes("localStorage")))throw new Error("Cannot access cookies and localStorge in getEvaluate");if(a){const e=(0,import_utils6.getJsonParseOfStr)(a);if(!Array.isArray(e))return"";const i=["a","b","c","d","e","f","g"].slice(0,e.length),o=new Function(`[${i.join(", ")}]`,r);n=await t.evaluate(o,e,s)}else n=await t.evaluate(r,void 0,s);return(0,import_utils6.getStringOfObj)(n)}catch(t){return loginfo(t),""}}static async getFile(e,r){const a=r.paras;try{const{url:s,pathtype:i,hashmethod:n,hostnameparts:o,params:c,extname:l,validextnames:p,basedir:g,setvar:h,pathvarname:u,proxy:d,headers:f,referer:m}=e;let y=e.path.trim();if(y)y=path2.join(y);else{let t=import_utils6.LsdUrl.getFilePathFromUrl(s,i,n,Number(o),c,l,p);y=path2.join(g,t)}if(y){const t=path2.dirname(y);if(!await(0,import_utils6.fsCheckOrCreateSubdir)(appConfig.cfg.baseFileDir,t))throw new Error("failed to checkOrCreateFileDir");y=path2.join(appConfig.cfg.baseFileDir,y)}const C=d&&r.proxyUrl?r.proxyUrl:"";let v=null;(f||m)&&(v=f?JSON.parse(f):{},m&&(v.referer=m));const b=await lsdDownload(s,C,v);return fs2.writeFileSync(y,b),u&&a&&!appConfig.RESERVED_PARA_NAMES.includes(u)&&(a[u]=y),h?b.toString("utf8"):t.noNeedToReturnContent}catch(t){throw new Error("error in get_file")}}static _genHeaderMethod={genLatestAndroid:import_header_generator.PRESETS.MODERN_ANDROID,genLatestDesktop:import_header_generator.PRESETS.MODERN_DESKTOP,genLatestLinux:import_header_generator.PRESETS.MODERN_LINUX,genLatestLinuxChrome:import_header_generator.PRESETS.MODERN_LINUX_CHROME,genLatestLinuxFirefox:import_header_generator.PRESETS.MODERN_LINUX_FIREFOX,genLatestMacos:import_header_generator.PRESETS.MODERN_MACOS,genLatestMacosChrome:import_header_generator.PRESETS.MODERN_MACOS_CHROME,genLatestMacosFirefox:import_header_generator.PRESETS.MODERN_MACOS_FIREFOX,genLatestMobile:import_header_generator.PRESETS.MODERN_MOBILE,genLatestWindows:import_header_generator.PRESETS.MODERN_WINDOWS,genLatestWindowsChrome:import_header_generator.PRESETS.MODERN_WINDOWS_CHROME,genLatestWindowsFirefox:import_header_generator.PRESETS.MODERN_WINDOWS_FIREFOX};static canAccessSeureData(t,e){try{if(0===t.length)return!0;const{hostname:r}=new URL(e);return!!t.find(t=>r.endsWith(`.${t}`)||r===t)}catch(t){return!1}}static hasSameOrigin(t,e,r=""){try{const a=new URL(e),s=new URL(t);return a.origin===s.origin||!!["origStateHeaders","updatedStateHeaders"].includes(r)&&a.hostname.endsWith(s.hostname)}catch(t){return!1}}static async getHttpHeaders(e,r){const{headermethod:a,origheaders:s}=e,{genHeaderOptions:i,newHttpHeaders:n}=r,o=r.interceptionData;let c={},l=!1,p="";try{if(t._genHeaderMethod[a]){l=!0;c=new import_header_generator.HeaderGenerator(t._genHeaderMethod[a]).getHeaders()}else if("genNewByHttpOptions"===a){l=!0;c=new import_header_generator.HeaderGenerator(i).getHeaders()}else if("origheaders"===a)l=!0,s&&(c=JSON.parse(s));else{if(!o)throw new Error("logic error: no interceptionData");"cachedRequestHeaders"===a?(c=Object.assign({},o.cachedRequestHeaders),p=o.cachedRequestUrl,o.updatedRequestUrl=p,o.updatedRequestHeaders=c):"cachedResponseHeaders"===a?(c=Object.assign({},o.cachedResponseHeaders),p=o.cachedResponseUrl,o.updatedResponseUrl=p,o.updatedResponseHeaders=c):"origStateHeaders"===a?(c=Object.assign({},o.origStateHeaders),p=o.origStateUrl,o.updatedStateUrl=p,o.updatedStateHeaders=c):"updatedRequestHeaders"===a?(p=o.updatedRequestUrl,c=o.updatedRequestHeaders):"updatedResponseHeaders"===a?(p=o.updatedResponseUrl,c=o.updatedResponseHeaders):"updatedStateHeaders"===a?(p=o.updatedStateUrl,c=o.updatedStateHeaders):logerr(`##get invalid httpMethod ${a} in getHttpHeaders`)}if(n)for(const e of Object.values(n)){const{name:r,source:s,value:i,deleteFlag:n}=e;if(n)delete c[r];else if("value"===s)c[r]=i;else if(!l&&s!==a){let e={},a="";if("cachedRequestHeaders"===s)a=o.cachedRequestUrl,e=o.cachedRequestHeaders;else if("cachedResponseHeaders"===s)a=o.cachedResponseUrl,e=o.cachedResponseHeaders;else{if("origStateHeaders"!==s){logerr(`Invalid soure ${s} in httpheader`);continue}a=o.origStateUrl,e=o.origStateHeaders}"string"==typeof e[r]&&t.hasSameOrigin(a,p,s)?c[r]=e[r]:i&&(c[r]=i)}}return l?JSON.stringify(c):""}catch(t){return logerr(t),""}}static async getMhtml(t,e,r){try{if(!t)return"";let a=e.path.trim();const{pathtype:s,hashmethod:i,hostnameparts:n,basedir:o,pathvarname:c}=e;if(a)a=path2.join(a);else{const e=t.url();let r=await t.title();a=import_utils6.LsdUrl.getFilePathFromUrl(e,s,i,Number(n),"","mhtml","",r),a=path2.join(o,a)}const{data:l}=await t.sendCDPMessage("Page.captureSnapshot",{format:"mhtml"});if(a){const t=path2.dirname(a);if(!await(0,import_utils6.fsCheckOrCreateSubdir)(appConfig.cfg.baseFileDir,t))throw new Error("failed to checkOrCreateMhtmlDir");const e=path2.join(appConfig.cfg.baseFileDir,a);fs2.writeFileSync(e,l),c&&r&&!appConfig.RESERVED_PARA_NAMES.includes(c)&&(r[c]=a)}return String(l)}catch(t){throw logdbg(t),new Error("error in get_mhtml")}}static _getScreenSize(t){return String(Number(t))===t?`${t}px`:t}static async getPdf(e,r,a){try{if(!e)return"";const{pathtype:s,hashmethod:i,hostnameparts:n,basedir:o,scale:c,displayheaderfooter:l,headertemplate:p,footertemplate:g,printbackground:h,landscape:u,pageranges:d,format:f,width:m,height:y,top:C,right:v,bottom:b,left:w,onepage:S,hmargin:k,pathvarname:_,setvar:x}=r;let E={},A=r.path.trim();if(A)A=path2.join(A);else{const t=e.url();let r=await e.title();A=import_utils6.LsdUrl.getFilePathFromUrl(t,s,i,Number(n),"","pdf","",r),A=path2.join(o,A)}if(A){const t=path2.dirname(A);if(!await(0,import_utils6.fsCheckOrCreateSubdir)(appConfig.cfg.baseFileDir,t))throw new Error("failed to checkOrCreatePdfDir");A=path2.join(appConfig.cfg.baseFileDir,A),E.path=A}if("1"!==c&&(E.scale=Number(c)),l&&(E.displayHeaderFooter=l),p&&(E.headerTemplate=p),g&&(E.footerTemplate=g),h&&(E.printBackground=h),u&&(E.landscape=u),d&&(E.pageRanges=d),C||v||b||w||l){const e={};C?e.top=t._getScreenSize(C):l&&!p&&(e.top="60px"),b?e.bottom=t._getScreenSize(b):l&&!g&&(e.bottom="60px"),v&&(e.right=t._getScreenSize(v)),w&&(e.left=t._getScreenSize(w)),E.margin=e}if(S){const t=await e.pageWidth();let r=await e.pageHeight();k&&(r+=Number(k)),E.width=`${t}px`,E.height=`${r}px`,logdbg(`--------- pageHeight:${r}px`)}else m||y?(m&&(E.width=t._getScreenSize(m)),y&&(E.height=t._getScreenSize(y))):"Letter"!==f&&(E.format=f);const I=await e.pdf(E);return _&&a&&!appConfig.RESERVED_PARA_NAMES.includes(_)&&(a[_]=A),x?I.toString("base64"):t.noNeedToReturnContent}catch(t){throw logdbg(t),new Error("error in get_pdf")}}static getRandom(t){try{const{min:e,max:r}=t,a=parseInt(e),s=parseInt(r);if(a>=s)return"0";const i=Math.round(Math.random()*(s-a))+a;return String(i)}catch(t){return"0"}}static async getScreenshot(e,r,a){let s={};try{if(!e)return"";let{basedir:i,path:n,extname:o,quality:c,fullpage:l,x:p,y:g,width:h,height:u,omitbackground:d,pathvarname:f,setvar:m}=r;if(n=n.trim(),n)n=path2.join(i,n);else if(e.title){const t=await e.title(),r=`${import_utils6.LsdUrl.convertToValidPathname(t)}.${o}`;n=path2.join(i,r)}else{const t=`${uuid2.v4()}.${o}`;n=path2.join(i,t)}if(n){const t=path2.dirname(n);if(!await(0,import_utils6.fsCheckOrCreateSubdir)(appConfig.cfg.baseFileDir,t))throw new Error("failed to checkOrCreatePdfDir");n=path2.join(appConfig.cfg.baseFileDir,n),s.path=n}"jpeg"===o&&(s.type="jpeg");const y=parseInt(c);"jpeg"===o&&y>=0&&(s.quality=y),l&&(s.fullPage=l);const C=parseInt(h),v=parseInt(u);if(C>0&&v>0){const t={x:parseInt(p),y:parseInt(g),width:C,height:v};s.clip=t}d&&(s.omitBackground=d);const b=await e.screenshot(s);return f&&a&&!appConfig.RESERVED_PARA_NAMES.includes(f)&&(a[f]=n),m&&b?b.toString("base64"):t.noNeedToReturnContent}catch(t){throw new Error("error in get_screenshot")}}static async getTabname(t,e){try{let r="";const{tabname:a,requrl:s,length:i,idx:n,subkeys:o}=t;let c=e?.execData?.[a];if(!Array.isArray(c)||c.length<=0)return"";if(s){const t=new RegExp(s);c=c.filter(e=>"string"==typeof e.requestUrl&&e.requestUrl.match(t))}if(i)return String(c.length);let l=o?o.split("."):[];if("*"!==n){let t=parseInt(n);t<0&&(t=c.length+t);let e=c[t];if(!e)return"";if(0===l.length)return JSON.stringify(e);r=getSubkeysStringOfDataRecord(e,l)}else{const t=0===l.length?c:c.map(t=>getSubkeysValueOfDataRecord(t,l));r=JSON.stringify(t)}return r}catch(t){return""}}static async getTitle(t,e){try{if(!t)return"";const{aspath:r}=e,a=await t.title();return r?import_utils6.LsdUrl.convertToValidPathname(a):a}catch(t){return""}}static async getWindow(t,e){try{const{key1:r,key2:a,key3:s,key4:i,key5:n,key6:o,keys:c,length:l}=e;if(!t||!r)return"";const p=[r,a,s,i,n,o];let g=await t.windowMember(p);if(!c&&!l)return g;const h=JSON.parse(g);return h&&"object"==typeof h?c?Array.from(Object.keys(h)).join(","):l&&Array.isArray(h)?String(h.length):"":""}catch(t){return logwarn(t),""}}},path3=__toESM(require("path"),1),fsp=__toESM(require("fs/promises"),1),import_utils7=require("@letsscrapedata/utils");async function responseCacheCb(t,e,r){if(e&&t)try{const{execData:a,contentType:s,tabname:i,requestHeadersFlag:n,responseHeadersFlag:o,cacheHeadersFlag:c,interceptionData:l,debugFlag:p=!1}=e,{pageUrl:g,cookies:h}=r,u=t.request(),d=u.method(),f=u.url();let m=u.postData();const y=m||"",C=u.resourceType(),v="text"===s?await t.text():"";let b=null;i&&"none"!==i&&(a[i]||(a[i]=[]),b={pageUrl:g,requestMethod:d,requestUrl:f,requestData:y,resourceType:C,responseData:v,size:String(v.length)},a[i].push(b));const w=b&&(c||p);if(n||w){const t=Object.assign({},u.allHeaders?await u.allHeaders():u.headers());!t.cookie&&h&&(t.cookie=h),w&&b&&(b.requestHeaders=t?JSON.stringify(t):""),n&&(l.cachedRequestUrl=f,l.cachedRequestHeaders=t,l.cachedRequestData=y),logdbg("requestUrl: ",f),logdbg("requestHeaders: ",t)}if(o){const e=Object.assign({},t.allHeaders?await t.allHeaders():t.headers());l.cachedResponseUrl=f,l.cachedResponseHeaders=e,logdbg("responseHeaders: ",e)}}catch(t){logerr(t)}}var isHttpResponse=t=>void 0!==t.buffer;async function responseSaveCb(t,e,r){if(!e||!t)return;const a=t.request(),s=a.url(),{execData:i,tabname:n,pathType:o,hashMethod:c,baseDir:l,hostnameParts:p,params:g,extname:h,validExtnames:u,encoding:d}=e,{pageUrl:f}=r;let m=import_utils7.LsdUrl.getFilePathFromUrl(s,o,c,p,g,h,u);s.startsWith("http")||logdbg("@@response: ",t),logdbg("@@reqUrl: ",s.slice(0,100)),logdbg("@@filename: ",m);let y=path3.join(l,m);if(!y)return;const C=path3.dirname(y);if(!await(0,import_utils7.fsCheckOrCreateSubdir)(appConfig.cfg.baseFileDir,C))throw new Error("failed to checkOrCreateReponseDir");const v=path3.join(appConfig.cfg.baseFileDir,y),b=isHttpResponse(t)?await t.buffer():await t.body(),w=a.resourceType();let S=d;if(d||(S=["document","stylesheet","script","xhr","fetch","other"].includes(w)?"utf8":"binary"),await fsp.writeFile(v,b,S),n&&"none"!==n&&i){const t=a.method();let e=a.postData();const r={pageUrl:f,requestMethod:t,requestUrl:s,requestData:e||"",resourceType:w,path:y,size:String(b.length)};i[n]?i[n].push(r):i[n]=[r]}}var import_node_fs=__toESM(require("fs"),1),import_utils9=require("@letsscrapedata/utils"),path4=__toESM(require("path"),1),fs3=__toESM(require("fs"),1),import_utils8=require("@letsscrapedata/utils"),solvers=[],addonFlag=!1;async function getScriptFromServer(t){try{let e="",r=`${appConfig.cfg.urlPrefix}/script?name=${t}`;const a=await fetch(r);if(200!==a.status)return"";const s=await a.json();return s&&0===s.code&&s.data&&"string"==typeof s.data?(e=Buffer.from(s.data,"base64").toString("utf8"),e):""}catch(t){return loginfo(t),""}}async function loadScriptIfNeeded(){if(addonFlag)return!0;addonFlag=!0;try{const t=appConfig.cfg.lsdLaunchOptions.addons,e=Array.isArray(t)&&t.length>0?t[0]:"",r=appConfig.cfg.captcha.captchas;if(!e||!Array.isArray(r)||0===r.length)return!0;let a="";if(a=path4.join(e,"manifest.json"),!(0,import_utils8.isFileSync)(a)){let t="ewogICJtYW5pZmVzdF92ZXJzaW9uIjogMywKICAibmFtZSI6ICJjYW1vdWZveCBhZGRvbiIsCiAgInZlcnNpb24iOiAiMS4wIiwKICAicGVybWlzc2lvbnMiOiBbCiAgICAic2NyaXB0aW5nIgogIF0sCiAgIndlYl9hY2Nlc3NpYmxlX3Jlc291cmNlcyI6IFsKICAgIHsKICAgICAgInJlc291cmNlcyI6IFsKICAgICAgICAic2NyaXB0cy8qIgogICAgICBdLAogICAgICAibWF0Y2hlcyI6IFsKICAgICAgICAiPGFsbF91cmxzPiIKICAgICAgXQogICAgfQogIF0sCiAgImNvbnRlbnRfc2NyaXB0cyI6IFsKICAgIHsKICAgICAgIm1hdGNoZXMiOiBbCiAgICAgICAgIjxhbGxfdXJscz4iCiAgICAgIF0sCiAgICAgICJqcyI6IFsKICAgICAgICAiaW5qZWN0LmpzIgogICAgICBdLAogICAgICAicnVuX2F0IjogImRvY3VtZW50X3N0YXJ0IgogICAgfQogIF0KfQ==";t=Buffer.from(t,"base64").toString("utf8"),fs3.writeFileSync(a,t,"utf8")}if(a=path4.join(e,"inject.js"),!(0,import_utils8.isFileSync)(a)){let t="YXN5bmMgZnVuY3Rpb24gaW5qZWN0U2NyaXB0cygpIHsKICB0cnkgewogICAgZm9yIChjb25zdCBuYW1lIG9mIG5hbWVzKSB7CiAgICAgIHRyeSB7CiAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goY2hyb21lLnJ1bnRpbWUuZ2V0VVJMKGBzY3JpcHRzLyR7bmFtZX0uanNgKSk7CiAgICAgICAgY29uc3QgY29udGVudCA9IGF3YWl0IHJlc3BvbnNlLnRleHQoKTsKCiAgICAgICAgaWYgKGNvbnRlbnQpIHsKICAgICAgICAgIGNvbnN0IHNjcmlwdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpOwogICAgICAgICAgc2NyaXB0LnRleHRDb250ZW50ID0gY29udGVudDsKICAgICAgICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5hcHBlbmRDaGlsZChzY3JpcHQpOwogICAgICAgICAgc2NyaXB0LnJlbW92ZSgpOwogICAgICAgIH0KICAgICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgICAgY29uc29sZS5lcnJvcihgRmFpbGVkIHRvIGluamVjdCBzY3JpcHQgJHtuYW1lfTpgLCBlcnIpOwogICAgICB9CiAgICB9CiAgfSBjYXRjaCAoZXJyKSB7CiAgICBjb25zb2xlLmVycm9yKGVycik7CiAgfQp9CgppbmplY3RTY3JpcHRzKCk7Cg==";t=Buffer.from(t,"base64").toString("utf8");t=`${`const names = ${JSON.stringify(r)};`}\n\n${t}`,fs3.writeFileSync(a,t,"utf8")}if(a=path4.join(e,"scripts"),!await(0,import_utils8.fsCheckOrCreateDir)(a,!0,!0))return logerr("Failed to create directory"),!1;for(const t of r){if(a=path4.join(e,"scripts",`${t}.js`),(0,import_utils8.isFileSync)(a))continue;const r=await getScriptFromServer(t);r?fs3.writeFileSync(a,r,"utf8"):loginfo(`Failed to get script of ${t}`)}return!0}catch(t){return loginfo(t),!1}}async function addCapatchaProvider(t){return!(!t||"object"!=typeof t||"string"!=typeof t?.name())&&(solvers.push(t),await loadScriptIfNeeded(),!0)}function getSolver(t){if(0===solvers.length)return null;for(const e of solvers)if(e.canSolveCaptcha(t))return e;return null}async function executeTask(t){const e=getSolver(t.type);if(!e)throw new Error(`##captcha no cpatha provider to solve ${t.type}`);let r;if(!e[t.type])throw new Error("##captcha logic error");return r=await e[t.type](t),r}var processors=new Map,captchaTypeAttr="data-captcha-type",widgetIdAttr="data-widget-id",captchaOptions={rootTag:"head",parentTag:"capwgts",captchaTag:"capwgt",solutionAttr:"value"};function checkCaptchaType(t,e){if(t.captchaType!==e)throw new Error(`##captcha invalid captchaType ${t.captchaType}`);return!0}function isValidStringAttr(t){return"string"==typeof t&&!!t&&!["null","undefined"].includes(t)}async function getCaptchasOnce(t,e,r=captchaOptions){let a=[];if(e){const r={opType:"get"},s=await t.evaluate(async([t,e])=>{const r=window[t];return"function"==typeof r?r(e):""},[e,r]);return Array.isArray(s)?(a=s,a):(logerr(`##captcha no function window.${e}`),[])}{const e=`${r.rootTag} > ${r.parentTag} > ${r.captchaTag}`,s=await t.findElements(e);if(0===s.length)return a;for(const t of s){const e=await t.dataset();a.push(e)}return a}}async function getWidgets(t,e,r,a=captchaOptions){let s=await getCaptchasOnce(e,r,a);if(s.length>0)return s;const{needToRefresh:i,maxRefreshTimes:n}=t;if(i&&n)for(let t=0;t<n;t++){if(!await i(e))break;if(await e.reload(),await(0,import_utils9.sleep)(5e3),s=await getCaptchasOnce(e,r,a),s.length>0)return s}else if(await(0,import_utils9.sleep)(5e3),s=await getCaptchasOnce(e,r,a),s.length>0)return s;return[]}async function sendSolution(t,e,r,a,s=captchaOptions){const{captchaType:i,widgetId:n}=r;if(e){const r={opType:"execute",captchaType:i,widgetId:n,solution:a},s=await t.evaluate(async([t,e])=>{const r=window[t];return"function"==typeof r?r(e):""},[e,r]);return"string"==typeof s?s:(logerr(`##captcha no function window.${e}`),"failed:noMsgFunc")}{const e=`${s.rootTag} > ${s.parentTag} > ${s.captchaTag}[${captchaTypeAttr}="${i}"][${widgetIdAttr}="${n}"]`,r=await t.findElement(e);if(r){return await r.setAttribute(s.solutionAttr,a)?"ok":"failed"}return"failed:noElement"}}var amazonGetTask=function(t){checkCaptchaType(t,"amazon");const{captchaType:e,pageurl:r,sitekey:a,iv:s,context:i,challengeScript:n,captchaScript:o}=t;return{type:e,websiteURL:r,websiteKey:a,iv:s,context:i,challengeScript:n,captchaScript:o}},amazonExecutionSolution=async function(t,e,r,a){const{existing_token:s}=a;return await sendSolution(t,e,r,s)},amazonProceesor={type:"amazon",findMethods:["intercept","hunt"],scriptName:"amazon",getTask:amazonGetTask,executeSolution:amazonExecutionSolution};processors.set("amazon",amazonProceesor);var geetestGetTask=function(t){checkCaptchaType(t,"geetest");const{captchaType:e,version:r,url:a,gt:s,challenge:i,apiServer:n,captchaId:o}=t;if(!r||!["v3","v4"].includes(r))throw new Error(`## captcha invalid version ${t.version} in ${t.captchaType}`);if(!a)throw new Error(`## captcha invalid url in ${t.captchaType}`);if(!("v3"!==r||s&&i))throw new Error(`## captcha invalid gt or challenge in ${t.captchaType} v3`);if("v4"===r&&!o)throw new Error(`## captcha invalid captchaId in ${t.captchaType} v4`);const c={type:e,version:"v4"===r?4:3,websiteURL:a};return isValidStringAttr(s)&&(c.gt=s),isValidStringAttr(i)&&(c.challenge=i),isValidStringAttr(n)&&(c.geetestApiServerSubdomain=n),isValidStringAttr(o)&&(c.captchaId=o),c},geetestExecutionSolution=async function(t,e,r,a){checkCaptchaType(r,"geetest");let s="";if("v3"===r.version){const{challenge:t,validate:e,seccode:i}=a,n=i||`${e}|jordan`;if("string"!=typeof t||!t)throw new Error(`##captcha invalid challenge in ${r.captchaType}`);if("string"!=typeof e||!e)throw new Error(`##captcha invalid validate in ${r.captchaType}`);if("string"!=typeof i||!i)throw new Error(`##captcha invalid seccode in ${r.captchaType}`);s=(0,import_utils9.encodeToBase64)({geetest_challenge:t,geetest_validate:e,geetest_seccode:n})}else{if("v4"!==r.version)return"failed:invalidVersion";{const{captcha_id:t,lot_number:e,pass_token:i,gen_time:n,captcha_output:o}=a;if("string"!=typeof t||!t)throw new Error(`##captcha invalid captcha_id in ${r.captchaType}`);if("string"!=typeof e||!e)throw new Error(`##captcha invalid lot_number in ${r.captchaType}`);if("string"!=typeof i||!i)throw new Error(`##captcha invalid pass_token in ${r.captchaType}`);if("string"!=typeof n||!n)throw new Error(`##captcha invalid gen_time in ${r.captchaType}`);if("string"!=typeof o||!o)throw new Error(`##captcha invalid captcha_output in ${r.captchaType}`);s=(0,import_utils9.encodeToBase64)({captcha_id:t,lot_number:e,pass_token:i,gen_time:n,captcha_output:o})}}return await sendSolution(t,e,r,s)},geetestProceesor={type:"geetest",findMethods:["intercept"],scriptName:"geetest",getTask:geetestGetTask,executeSolution:geetestExecutionSolution};processors.set("geetest",geetestProceesor);var recaptchaGetTask=function(t,e){checkCaptchaType(t,"recaptcha");const{captchaType:r,version:a,url:s,sitekey:i,action:n,s:o,enterprise:c,invisible:l,userAgent:p,cookies:g,apiDomain:h}=t;if(!a||!["v2","v3"].includes(a))throw new Error(`## captcha invalid version ${t.version} in ${t.captchaType}`);if(!s||!i)throw new Error(`## captcha invalid url or sitekey in ${t.captchaType}`);let u=.3;"number"==typeof e?.minScore&&e.minScore>0&&e.minScore<1&&(u=e.minScore);const d={type:r,version:"v3"===a?3:2,websiteURL:s,websiteKey:i,isEnterprise:"true"===c,isInvisible:"true"===l,minScore:u};return isValidStringAttr(n)&&(d.action=n),isValidStringAttr(o)&&(d.s=o),isValidStringAttr(p)&&(d.userAgent=p),isValidStringAttr(g)&&(d.cookies=g),isValidStringAttr(h)&&(d.apiDomain=h),d},recaptchaExecutionSolution=async function(t,e,r,a){checkCaptchaType(r,"recaptcha");const{gRecaptchaResponse:s}=a;if("string"!=typeof s||!s)throw new Error(`##captcha invalid gRecaptchaResponse in ${r.captchaType}`);return await sendSolution(t,e,r,s)},recaptchaProceesor={type:"recaptcha",findMethods:["intercept","hunt"],scriptName:"recaptcha",getTask:recaptchaGetTask,executeSolution:recaptchaExecutionSolution};processors.set("recaptcha",recaptchaProceesor);var turnstileNeedToRefresh=async function(t){return 0===(await t.findElements("#cf-turnstile")).length},turnstileGetTask=function(t){checkCaptchaType(t,"turnstile");const{captchaType:e,url:r,sitekey:a,action:s,cData:i,chlPageData:n}=t,o={type:e,websiteURL:r,websiteKey:a};return isValidStringAttr(s)&&(o.action=s),isValidStringAttr(i)&&(o.cData=i),isValidStringAttr(n)&&(o.chlPageData=n),o},turnstileExecutionSolution=async function(t,e,r,a){checkCaptchaType(r,"turnstile");const{token:s}=a;if("string"!=typeof s||!s)throw new Error(`##captcha invalid token in ${r.captchaType}`);return await sendSolution(t,e,r,s)},turnstileProceesor={type:"turnstile",findMethods:["intercept","hunt"],scriptName:"turnstile",getTask:turnstileGetTask,executeSolution:turnstileExecutionSolution,needToRefresh:turnstileNeedToRefresh,maxRefreshTimes:2};function getScriptFromLocal(t){try{const e=`${"./packages/scraper/tmp/lsd/inject"}/${t}.js`;return import_node_fs.default.readFileSync(e,"utf8")}catch(t){return""}}processors.set("turnstile",turnstileProceesor);var scriptMap=new Map;async function getScript(t){let e=scriptMap.get(t);if(e)return e;if(e=getScriptFromLocal(t),e||(e=await getScriptFromServer(t)),"string"==typeof e&&e.length>20)return scriptMap.set(t,e),e;throw new Error(`##captcha failed to get script of ${t}`)}async function injectScripts(t,e){let r=!0;if("camoufox"===t.browserContext().browser().browserControllerType())return!0;if(!Array.isArray(e)||0===e.length)return r=!1,r;const a=[];for(const s of e){const e=processors.get(s);if(!e)continue;if(!e.findMethods.includes("intercept")||!e.scriptName)continue;if(a.includes(e.scriptName))continue;const i=await getScript(e.scriptName);if(!i){r=!1;break}a.push(e.scriptName);await t.addPreloadScript(i)||(r=!1)}return t.setCloseWhenFree(!0),r}async function solveTokenCaptcha(t,e,r,a){const s={code:0,captchaType:e,taskResults:[]};loginfo(`######################### start to sovle ${e} @${new Date}: `,a);let i="ok";try{const r=processors.get(e);if(!r)return logerr(`##captcha cannot process ${e}`),s.code=1001,s;const{getTask:n,executeSolution:o}=r,c=await getWidgets(r,t,"");if(0===c.length)return s;const l=c[0];e!==l.captchaType&&logerr(`##captcha different captchaType ${e} ${l.captchaType}`);const p=n(l,a),{solution:g,errorCode:h,taskId:u,createTime:d,endTime:f}=await executeTask(p);if(s.taskResults.push({solution:g,errorCode:h,taskId:u,elapse:f-d}),g&&(i=await o(t,"",l,g),i.startsWith("ok")||(s.code=1003,s.message=i),i)){const e="button[type='submit']";await t.findElement(e)}return loginfo(`######################### end to sovle ${e} @${new Date}: `,s),s}catch(t){return logerr(t),s.code=1010,s.message=t.message,s}}var import_node_fs2=__toESM(require("fs"),1),import_utils10=require("@letsscrapedata/utils"),processors2=new Map;async function getTextOfElement(t,e,r){if("pageUrl"===r)return t.url();const a=await t.findElement(e);return a?"textContent"===r?await a.textContent():await a.attribute(r):""}async function getBufferOfImage(t,e,r,a){const s=await t.findElement(e);if(!s)return null;try{const e=await s.attribute("src");if(e.toLowerCase().includes(".gif")){const s=t.url(),i=import_utils10.LsdUrl.getAbsoulteUrl(s,e),n=await lsdDownload(i,r?.proxyUrl);return"number"==typeof a&&import_node_fs2.default.writeFileSync(`./captchaImage${a}.gif`,n),n}{"lazy"===await s.attribute("loading")&&(await s.scrollIntoView(),await(0,import_utils10.sleep)(2e3));const t=await s.screenshot();return"number"==typeof a&&import_node_fs2.default.writeFileSync(`./captchaImage${a}.png`,t),t}}catch(t){return logerr(t),null}}var textGetTask=async function(t,e,r=null){const{type:a,imageLocs:s,case:i,commentLoc:n,commentAttr:o,inputLoc:c,enter:l,submitLoc:p,checkLoc:g,lang:h,math:u,maxLength:d,minLength:f,question:m,space:y,textType:C}=e;if(!Array.isArray(s)||0===s.length)throw new Error("invalidParas");if(!l&&!p)throw new Error("invalidParas");if(!(!m||n&&o))throw new Error("invalidParas");if(!g)throw new Error("invalidParas");const v=[];for(const[e,a]of s.entries()){const s=await getBufferOfImage(t,a,r,e);if(!s)throw new Error("noRequiredElement:imageLoc");v.push(s)}if(!await t.findElement(c))throw new Error("noRequiredElement:inputLoc");let b="";if(n&&(b=await getTextOfElement(t,n,o),!b))throw new Error("noRequiredElement:commentLoc");if(p){if(!await t.findElement(p))throw new Error("noRequiredElement:submitLoc")}return{type:a,images:v,case:i,comment:b,lang:h,math:u,maxLength:d,minLength:f,question:m,space:y,textType:C,websiteUrl:t.url()}},textExecuteSolution=async function(t,e,r){const{text:a}=r,{inputLoc:s,enter:i,submitLoc:n,checkLoc:o,checkAttr:c,failedStr:l}=e,p=await t.findElement(s);if(!p)throw new Error("noRequiredElement");let g=!1;if(i){if(g=await p.input(a,{enter:i}),!g)return"failed:input"}else{const e=await t.findElement(n);if(!e)throw new Error("noRequiredElement");if(g=await p.input(a),!g)return"failed:input";if(g=await e.click(),!g)return"failed:submit"}await(0,import_utils10.sleep)(1e3);const h=await t.findElement(o);if(!h)return"ok";if(!c)return"failed:checkFailed-noCheckElement";const u="textContent"===c?await h.textContent():await h.attribute(c);return!l&&l.length>0?`failed:checkFailed-${u}`:u.includes(l)?`failed:checkFailed-${l}`:"ok"},textProcessor={type:"text",getTask:textGetTask,executeSolution:textExecuteSolution};processors2.set("text",textProcessor);var coordinateGetTask=async function(t,e,r=null){const{type:a,imageLocs:s,commentLoc:i,commentAttr:n,lang:o,maxClicks:c,minClicks:l}=e;if(!Array.isArray(s)||0===s.length)throw new Error("invalidParas");if(l<0||c>0&&l>=c)throw new Error("invalidParas");const p=[];for(const[e,a]of s.entries()){const s=await getBufferOfImage(t,a,r,e);if(!s)throw new Error("noRequiredElement:imageLoc");p.push(s)}let g="";if(i&&(g=await getTextOfElement(t,i,n),!g))throw new Error("noRequiredElement:commentLoc");return{type:a,images:p,comment:g,lang:o,maxClicks:c,minClicks:l}},coordinateExecuteSolution=async function(t,e,r){const{coordinates:a}=r,{minClicks:s,maxClicks:i,imageLocs:n,submitLoc:o,checkLoc:c,checkAttr:l,failedStr:p}=e;if(!Array.isArray(a)||a.length<s||i>0&&a.length>i)return"failed:invalidSolution";let g=!1;const h=await t.findElement(n[0]);if(!h)throw new Error("noRequiredElement");const u=await h.boundingBox();if(!u)return"failed:click";const{x:d,y:f}=u;for(const{x:e,y:r}of a){if(g=await t.mouseClick(d+e,f+r),!g)return"failed:click";await(0,import_utils10.sleep)(200)}if(await(0,import_utils10.sleep)(1e3),o){const e=await t.findElement(o);if(!e)throw new Error("noRequiredElement");if(g=await e.click(),!g)return"failed:submit";await(0,import_utils10.sleep)(1e3)}const m=await t.findElement(c);if(!m)return"ok";if(!l)return"failed:checkFailed-noCheckElement";const y="textContent"===l?await m.textContent():await m.attribute(l);return!p&&p.length>0?`failed:checkFailed-${y}`:y.includes(p)?`failed:checkFailed-${p}`:"ok"},coordinateProcessor={type:"text",getTask:coordinateGetTask,executeSolution:coordinateExecuteSolution};async function solveRecognitionCaptcha(t,e,r,a=1){const s=e.type;loginfo(`######################### start to sovle ${s} @${new Date}: `,e);const i={code:0,captchaType:s,taskResults:[]};let n="";try{const o=processors2.get(s);if(!o)return logerr(`##captcha cannot process ${s}`),i.code=1001,i;const{getTask:c,executeSolution:l}=o;for(let s=1;s<=a;s++){const a=await c(t,e,r),{solution:s,errorCode:o,taskId:p,createTime:g,endTime:h}=await executeTask(a),u={solution:s,errorCode:o,taskId:p,elapse:h-g};if(i.taskResults.push(u),s){if(n=await l(t,e,s),n.startsWith("ok"))return i;if(n.startsWith("failed:checkFailed")){u.errorCode="ERROR_CHECK_FAILED";continue}u.errorCode="ERROR_SOLUTION_FAILED";break}}return i.code=1003,i.message=n,i}catch(t){logerr(t);const e=t.message;return"invalidParas"===e?i.code=1001:e.startsWith("noRequiredElement")?i.code=1004:i.code=1010,i.message=e,loginfo(`######################### end to sovle ${s} @${new Date}: `,i),i}}processors2.set("coordinate",coordinateProcessor);var uuid3=__toESM(require("uuid"),1);function calcCapCredits(t){return t>0?t>>appConfig.GEN_CREDITS_BITS:0}function calcGenCredits(t){return t>0?t&appConfig.GEN_CREDITS_AND:0}var TaskScraper=class extends import_node_events.default{#xe;#Ee;#Ae;_fontsConfig;#Ie;#C;#m;_templateId;#Oe;#y;_taskId;#Te;#De;#Pe;#Ne;#Re;#Fe;#je;#$e;#f;_taskContext;#Le;#Me;#qe;_paras;#Ue;#Je;#He;#Be;#Ve;#We;#Ke;#Ge(){this.#Me&&(this.#He=!0)}#ze(){this.#He=!1,this.#Be=!1}constructor(t,e,r,a={}){super();const{template:s,actionConfigs:i,fontsConfig:n,templScripts:o}=t,{proxy:c=null,page:l=null,browserApiContext:p=null,standaloneApiContext:g=null}=r,{performOneTask:h=appConfig.performOneTask,taskId:u=0,domainNames:d=[],secureDataFlag:f=!1,skipActions:m=[],extractColumns:y=[],version:C="1.0",splitStr:v="::",authInfo:b={},execData:w={}}=a,S=a.stateData?a.stateData:{cookies:[],origins:[],headers:{},userData:{}},k=a.defaultElementSource?a.defaultElementSource:s.defaultElementSource;try{this.#xe=s,this.#Ee=i,this.#Ae=n,this._fontsConfig=n,this.#Ie=o,this.#C=C,this.#m=s.templateId,this._templateId=s.templateId,this.#Oe=1001===this.#m,this.#y=u,this._taskId=u,this.#Te=a.captchaOptions?a.captchaOptions:{captchaTypes:[]},this.#De=a.loginOptions?a.loginOptions:{loginWhens:[],pageMatchInfos:[]},this.#Pe=k,this.#Re=m,this.#Fe=!!a.execData,this.#je=y,this.#Ne=v,this.#$e=h,this.#f={proxy:c,page:l,browserApiContext:p,standaloneApiContext:g,stateApiContext:p||g,taskApiContext:null,popupPage:null,browserElesStack:[],cheerioPage:null,cheerioElesStack:[],loopsStack:[],continueFlag:!1,breakFlag:!1,origStateData:S,newStateData:null,execData:w,processedExecData:{},subtasks:[],credits:0,debugFiles:{},subtaskResults:[]},this.#Le=d,this.#Me=f;const t=new SysParas(this.#f,this.#m,this.#y,this.#C);this.#qe={inParas:e,sysParas:t,authInfo:b,userData:Object.assign({},S.userData),secureData:{}},this.#Ue=this.#Ye();let r=d.length>0?d[0]:"";r||(S.cookies.length>0?r=`https://${S.cookies[0].domain}`:S.origins.length>0&&(r=S.origins[0].origin)),this.#Je={cachedRequestUrl:"",cachedRequestHeaders:{},cachedResponseUrl:"",cachedResponseHeaders:{},updatedRequestUrl:"",updatedRequestHeaders:{},updatedResponseUrl:"",updatedResponseHeaders:{},origStateUrl:r,origStateHeaders:S.headers,updatedStateUrl:"",updatedStateHeaders:{}},this.#He=!1,this.#Be=!1,this.#Ve={api:this.#Xe,break:this.#Qe,captcha:this.#Ze,click:this.#tr,continue:this.#er,exit:this.#rr,extract:this.#ar,goto:this.#sr,hover:this.#ir,ifelse:this.#nr,input:this.#or,intercept:this.#cr,loopdowhile:this.#lr,loopfor:this.#pr,loopineles:this.#gr,loopinstr:this.#hr,misc:this.__performMiscAction,scroll:this.#ur,select:this.#dr,setvar:this.#fr,subtask:this.#mr,tabname:this.#yr,wait:this.#Cr},this.#We={normal:-1,parasinvalid:-2,capinvalid:-41,caplocked:-42,capexpired:-43,proxylocked:-61,proxyforbidden:-61,cfginvalid:-69,captchafailed:-52,switchproxynow:-86,switchproxyfuture:-87,other:-98,logicerror:-98,tetimeout:-79},this.#Ke="",this._taskContext=this.#f,this._paras=this.#qe,this.#Ae&&logdbg(this.#Ae)}catch(t){throw logerr("##te Exeception in ScraperTask.constructor"),new Error(t)}}#vr(t){const e=this.#br(t,"source");return"default"===e?this.#Pe:"browser"===e?"browser":"xml"===e?"xml":void(0,import_utils11.unreachable)(e)}#wr(t){this.#f.credits=t,logwarn(new Error)}#Sr(t){return`action${t[0].toUpperCase()}${t.slice(1)}`}#kr(t,e){const{browserElesStack:r,cheerioElesStack:a}=this.#f;return!(!t||r.length>0||a.length>0)||(this.#_r("cfginvalid",this.#Sr(e),"resetPage"),!1)}#_r(t,e,r){"ignore"!==t&&logwarn(`##tmp procErrname eName ${t} scenario ${e} reason ${r} tId ${this.#m} kId ${this.#y} p ${this.#Ue}`);let a=-69;if("string"!=typeof t||!t||!e)throw this.#f.credits=a,new Error("##te invalid paras in _procErrname");if("ignore"===t)return!0;throw void 0!==this.#We[t]?(a=this.#We[t],this.#f.credits=a,new Error(`##te exit with errname ${t} in ${e}`)):(this.#f.credits=a,new Error(`##te invalid errName ${t} in ${e}`))}_procErrname(t,e,r){return this.#_r(t,e,r)}#Ye(){if(this.#qe.inParas&&"object"==typeof this.#qe.inParas){const t=Array.from(Object.keys(this.#qe.inParas)),e=t.filter(t=>t.startsWith("para")),r=t.filter(t=>t.startsWith("apara")),a=t.filter(t=>t.startsWith("rpara"));let s=e.map(t=>this.#qe.inParas[t]).join(this.#Ne);return(r.length>0||a.length>0)&&(s=`${s}@@${r.map(t=>this.#qe.inParas[t]).join(this.#Ne)}`,a.length>0&&(s=`${s}@@${a.map(t=>this.#qe.inParas[t]).join(this.#Ne)}`)),s}return""}#xr(t,e=!0){return this.#f.cheerioPage?this.#f.cheerioPage.load(t,e):this.#f.cheerioPage=new import_controller3.CheerioPage(t,e),!0}#Er(t,e){const r=this.#f.debugFiles;if(r){if(t.startsWith("var_")&&!path5.extname(t)){let e="txt",r=t.slice(-4);"Json"===r||"json"===r?e="json":"Html"!==r&&"html"!==r||(e="html"),t=`${t}.${e}`}r[t]=e}return!0}#Ar(t,e){if(this.#Be&&!t.startsWith("secureData.")&&this.#_r("cfginvalid","secureData","noprivilege"),"string"!=typeof t||"string"!=typeof e||appConfig.RESERVED_PARA_NAMES.includes(t)?this.#_r("cfginvalid","setNormalVar","invalidParas"):"pageHtml"!==t&&"pageXml"!==t||(this.#f.cheerioElesStack.length>0&&this.#_r("cfginvalid","setNormalVar","cheerioElesStack"),this.#xr(e,"pageHtml"===t)),t.startsWith("userData.")){const r=t.slice(9);0===r.length&&this.#_r("cfginvalid","setNormalVar","invalidUserDataVarName"),this.#qe.userData[r]=e}else if(t.startsWith("secureData.")){const r=t.slice(11);0===r.length&&this.#_r("cfginvalid","setNormalVar","invalidSecureDataVarName"),this.#qe.secureData[r]=e}else if(t.startsWith("inParas_")){const r=t.slice(8);0!==r.length&&void 0!==this.#qe.inParas[r]||this.#_r("cfginvalid","setNormalVar","invalidInParasVarName"),this.#qe.inParas[r]=e,this.#Ue=this.#Ye()}else this.#qe[t]=e;return t.startsWith("loglog")||t.startsWith("cx")&&t.match(/^cx\d$/)?logwarn(`##log setvar ${t}: ${e}`):this.#Oe&&t.startsWith("dbgdbg")&&this.#Er(`var_${t}`,e),!0}#Ir(t){if("string"!=typeof t)return!1;const e=t.toLowerCase();return e.startsWith("https://")||e.startsWith("http://")}#Or(t){if(t?.[appConfig.XML_ATTR_KEY]?.type)return!0;throw new Error("##te Invalid element type config(validate)")}#Tr(t,e){if("string"!=typeof t)throw new Error(`##te Invalid templStr: ${t}`);if(t.indexOf("${")<0)return t;try{return!this.#He&&t.includes("secureData.")?(this.#_r("cfginvalid","transTemplToStr","accessSecureData"),""):(this.#He&&t.includes("secureData.")&&(this.#Be=!0),function(t){const e=Object.keys(t),r=Object.values(t);return new Function(...e,`return \`${this}\`;`)(...r)}.call(t,e))}catch(t){return""}}#br(t,e,r=!0,a=!0){if(!t||"string"!=typeof e)throw new Error(`##te Invalid config or attribute, attribute: ${e}`);const s=t[appConfig.XML_ATTR_KEY][e];if(null===s)return s;if(void 0===s){if(a)throw new Error(`##te Config has no attribute ${e}`);return""}return!r||["type","name","version"].includes(e)?s:this.#Tr(s,this.#qe)}_getCfgStrAttr(t,e,r=!0,a=!0){return this.#br(t,e,r,a)}#Dr(t,e){if(!t)throw new Error(`##te Invalid action config or attribute, attribute: ${e}`);const r=t[appConfig.XML_ATTR_KEY][e];if("boolean"!=typeof r)throw loginfo(`##te attrNames: ${JSON.stringify(t[appConfig.XML_ATTR_KEY])}, attrName: ${e}`),new Error(`##te Element has no bool attribute ${e} or it is undefined/null`);return r}_getCfgBoolAttr(t,e){return this.#Dr(t,e)}#Pr(t,e,r=!1){try{const a=appConfig.XML_CHILDREN_KEY,s=appConfig.XML_ATTR_KEY;let i=t[a]?t[a][e]:null;if(Array.isArray(i))return i;if(void 0===i){const t={};return"elecontent"===e?(t[s]={type:"text",multieles:!0,trim:!0,join:"\n",line:!1,top:!1},[t]):"ocrcfg"===e?(t[s]={type:"api",nlchars:"",seperator:!1,lang:"zh"},[t]):[]}if(r)throw new Error(`##te Invalid cfgType ${e} children of parentCfg ${JSON.stringify(t)}`);return[]}catch(t){return logerr(t),[]}}#Nr(t,e="default",r=!1){const a={};return a[appConfig.XML_ATTR_KEY]={loc:t,source:e,absolute:r},a}_getCfgChildrenOf(t,e,r=!1){return this.#Pr(t,e,r)}#Rr(t,e){const r=this.#Pr(t,e);return r.length>0?r[0]:null}#Fr(t,e){const r=this.#Pr(t,e);if(0===r.length)throw new Error(`##te There is no ${e} tag config`);return r[0]}#jr(){if(this.#f.page)return this.#f.page.pageInfo();throw new Error("Cannot get pageInfo from null browser page")}#$r(){if(this.#f.page)return this.#f.page.browserContext().browser().isHeadless();throw new Error("Cannot get headless from null browser page")}#Lr(t,e="ceil"){if("string"!=typeof t)throw new Error(`##te Inavlid math expr: ${t}`);if(!["ceil","round","floor"].includes(e))throw new Error(`##te Inavlid round type: ${e}`);return Number(getTransformExpStrSync(t,[{type:"tonum"},{type:`n_${e}`}]))}#Mr(t){if("string"!=typeof t)throw new Error(`##te Inavlid bool expr: ${t}`);if("0"===t||""===t)return!1;if("1"===t)return!0;return Boolean(Number(getTransformExpStrSync(t,[{type:"tobool"}])))}async#qr(t){let e=parseInt(t);return e>0&&await(0,import_utils11.sleep)(e),!0}#Ur(t,e=!0,r=!0,a=1,s=1){const i=t?this.#Dr(t,"gen"):e,n=t?this.#Dr(t,"cap"):r,o=i?a:0,c=this.#xe.capName&&n?s:0;return loginfo(`##credit addTaskCredits: gen ${o}, cap ${c}`),this.#f.credits+=(c<<appConfig.GEN_CREDITS_BITS)+o,!0}#Jr(t,e){if(!["click","goto","input","scroll","select"].includes(e))throw new Error(`logic error actionType ${e} cannot call this function`);const{popuppage:r,wait:a,errname:s,eurl:i,eloc:n,pn1:o,pv1:c,pn2:l,pv2:p}=this.#Hr(t,!1),g=this.#Dr(t,"login")&&!!this.#Te.pageMatchInfos,h=this.#Dr(t,"captcha")&&!!this.#De.pageMatchInfos,u=i||n||o||c||l||p?{eurl:i,eloc:n,pn1:o,pv1:c,pn2:l,pv2:p}:null;if("ignored"===r||!g&&!h&&!u)return null;const d=this.#Dr(t,"popupsubtask");let f=parseInt(a);f>0||(f=0);const m="ignored"!==r,y={captchaFlag:m&&h&&!!this.#Te?.captchaWhens?.includes("popup"),loginFlag:m&&g&&!!this.#De?.loginWhens?.includes("popup"),taskFlag:!(m&&d)};if(m&&!y.captchaFlag&&!y.loginFlag&&!u)return this.#_r("cfginvalid",this.#Sr(e),"invalidPopupCfg"),null;let C="ignored"===r;const v={captchaFlag:h&&!!this.#Te?.captchaWhens?.includes("current"),loginFlag:g&&!!this.#De?.loginWhens?.includes("current"),taskFlag:C&&!!u};if(C&&!v.captchaFlag&&!v.loginFlag&&v.taskFlag)return this.#_r("cfginvalid",this.#Sr(e),"invalidCurrentCfg"),null;return{actionType:e,errName:s,dataPageMatchInfo:u,waitMs:f,popupFlag:m,popupPageType:r,popupPageFlags:y,currentFlag:C,currentPageFlags:v,captchaPageMatchInfos:this.#Te.pageMatchInfos,loginPageMatchInfos:this.#De.pageMatchInfos}}async#Br(t,e,r=!0){const a=t.url();if(!a.trim())return null;const s=new URL(a),i=s.href.toLowerCase();for(const a of e){if(!a.eurl&&!a.pn1&&!a.pn2)return null;let e=!a.eurl;if(a.eurl){const t=a.eurl.split(",");e=i.startsWith(t[0])&&t.slice(1).every(t=>i.includes(t))}const n=!a.pn1||a.pn1&&s.searchParams.get(a.pn1)===a.pv1,o=!a.pn2||a.pn2&&s.searchParams.get(a.pn2)===a.pv2;if(!e||!n||!o)continue;let c=!0;if(a.eloc&&r)try{for(let e=0;e<30;e++){if((await t.findElements(a.eloc)).length>0){c=!0;break}await(0,import_utils11.sleep)(2e3)}}catch(t){c=!1}if(c)return a}return null}async#Vr(t,e,r){const{actionType:a,dataPageMatchInfo:s,popupPageType:i,errName:n}=e,o="popup"===r?e.popupPageFlags:e.currentPageFlags,{captchaFlag:c,loginFlag:l,taskFlag:p}=o;if(c&&e.captchaPageMatchInfos){if(await this.#Br(t,e.captchaPageMatchInfos))return!0}if(l&&e.loginPageMatchInfos){if(await this.#Br(t,e.loginPageMatchInfos))return this.#_r("tologin",this.#Sr(a),r),!0}if(s){if(await this.#Br(t,[s]))return"popup"===r&&(p?(this.#kr(t,a),this.#f.page=t):this.#f.popupPage=t),!0;if("required"===i)return this.#_r(n,this.#Sr(a),"noMatchedPopupPage"),!1}return!0}async processNewPageLoginCaptcha(t,e,r){const{actionType:a,errName:s,waitMs:i,popupPageType:n}=t,o=appConfig.CHECK_POPUP_PAGE_TIMEOUT1;setTimeout(()=>this.emit(appConfig.EVENT_TYPES.lsdScraperPopup,{code:1009,message:"timeout",data:null}),o),await e(...r),i&&await(0,import_utils11.sleep)(i);const[c]=await(0,import_node_events2.once)(this,appConfig.EVENT_TYPES.lsdScraperPopup);loginfo(`##tmp Taskscraper received popup event ${c.code}`);const l=c&&0===c.code&&c.data?c.data:null;if(!l){if("required"!==n)return!0;this.#_r(s,this.#Sr(a),"noPopupPage")}return await this.#Vr(l,t,"popup"),!0}#Wr(t,e){"browser"===t&&this.#f.page||this.#_r("cfginvalid",this.#Sr(e),"invalidBrowserElementSource")}#Kr(t,e){let r=this.#f.processedExecData[t];return r||(r=new Set,this.#f.processedExecData[t]=r),r.add(e),!0}#Gr(t,e){let r=this.#f.processedExecData[t];return!!r&&r.has(e)}#zr(t){return!!this.#f.processedExecData[t]}async#Yr(t){if("browser"===t)return this.#f.browserApiContext;if("standalone"===t)return this.#f.standaloneApiContext;if("state"===t)return this.#f.stateApiContext;if("task"===t){if(!this.#f.taskApiContext){const t=this.#f.proxy?{proxy:this.#f.proxy}:{};this.#f.taskApiContext=await import_controller3.controller.newApiContext(t)}return this.#f.taskApiContext}return null}#Xr(t,e,r,a,s){let i={};const n=s.filter(t=>"header"===this.#br(t,"type"));try{if("headers"!==e||"headers"===e&&r||a||n.length>0){let s="";const o=this.#Je;if("headers"===e&&r?i=JSON.parse(r):"cachedRequestHeaders"===e?(s=o.cachedRequestUrl,i=Object.assign({},o.cachedRequestHeaders)):"cachedResponseHeaders"===e?(s=o.cachedResponseUrl,i=Object.assign({},o.cachedResponseHeaders)):"origStateHeaders"===e?(s=o.origStateUrl,i=Object.assign({},o.origStateHeaders)):"updatedRequestHeaders"===e?(s=o.updatedRequestUrl,i=Object.assign({},o.updatedRequestHeaders)):"updatedResponseHeaders"===e?(s=o.updatedResponseUrl,i=Object.assign({},o.updatedResponseHeaders)):"updatedStateHeaders"===e?(s=o.updatedStateUrl,i=Object.assign({},o.updatedStateHeaders)):this.#_r("cfginvalid","actionApi","invalidHeadersSource"),e.endsWith("Headers")&&(s||0===Array.from(Object.keys(i)).length)){GetPara.canAccessSeureData(this.#Le,t)||(i={},this.#_r("cfginvalid","actionApi","differentOrigin"))}a&&(i.referer=a);for(const t of n){const e=this.#br(t,"name"),r=this.#br(t,"value");i[e]=r}return i}return null}catch(t){return loginfo(t),this.#_r("cfginvalid","actionApi","garhException"),null}}#Qr(t,e){const r="Content-Length",a="content-length";return t&&t[r]?(t[r]=String(e.length),!0):!(!t||!t[a])&&(t[a]=String(e.length),!0)}#Zr(t,e){if("string"===e)return t;if("number"===e)return Number(t);if("boolean"===e)return!(!t||"false"===t.toLowerCase()||"0"===t);if("null"===e)return null;if("undefined"===e)return;if("object"!==e)throw this.#_r("cfginvalid","actionApi","notObject"),new Error("unreachable");const r=(0,import_utils11.getJsonParseOfStr)(t);if(!r||"object"!=typeof r)throw this.#_r("cfginvalid","actionApi","jsonParseData"),new Error("unreachable");return r}async#ta(t,e,r,a){try{if(r.filter(t=>"data"===this.#br(t,"type")).length>0&&"object"!==e)return this.#_r("cfginvalid","actionApi","invalidDataType"),"";if("object"!==e)return this.#Zr(t,e);{const e=await this.#ea(t,r,"");if(e)return e;throw new Error("##te invalid requestData")}}catch(t){return loginfo(t),void this.#_r(a,"actionApi","grdExeception")}}#ra(t,e,r,a){switch(e){case"browser":case"state":case"task":case"standalone":if("data"===r)t.body=JSON.stringify(a);else if("form"===r){if(!a||"object"!=typeof a)return this.#_r("cfginvalid","actionApi","invalidDataOrFormat1"),!1;const e=new FormData;for(const[t,r]of Object.entries(a))e.append(t,r);t.form=a}else if("params"===r){if(!a||"object"!=typeof a)return this.#_r("cfginvalid","actionApi","invalidDataOrFormat2"),!1;const e=new URLSearchParams;for(const[t,r]of Object.entries(a))e.append(t,r);t.params=a}else(0,import_utils11.unreachable)(r);break;case"default":if("data"===r)t.body=JSON.stringify(a);else if("form"===r){if(!a||"object"!=typeof a)return this.#_r("cfginvalid","actionApi","invalidDataOrFormat21"),!1;const e=new FormData;for(const[t,r]of Object.entries(a))e.append(t,r);t.body=a}else if("params"===r){if(!a||"object"!=typeof a)return this.#_r("cfginvalid","actionApi","invalidDataOrFormat22"),!1;t.searchParams=a}else(0,import_utils11.unreachable)(r);break;case"fetch":if("data"===r)t.body=JSON.stringify(a);else if("form"===r){if(!a||"object"!=typeof a)return this.#_r("cfginvalid","actionApi","invalidDataOrFormat31"),!1;const e=new FormData;for(const[t,r]of Object.entries(a))e.append(t,r);t.body=a}else if("params"===r){if(!a||"object"!=typeof a)return this.#_r("cfginvalid","actionApi","invalidDataOrFormat32"),!1;const e=new URLSearchParams;for(const[t,r]of Object.entries(a))e.append(t,r);t.body=a}else(0,import_utils11.unreachable)(r);if("data"===r){if(!a||"object"!=typeof a)throw this.#_r("cfginvalid","actionApi","fetch"),new Error("unreachable");const e=new FormData;for(const t of Object.keys(a))e.set(t,a[t]);t.data=e}else t.body="string"==typeof a?a:JSON.stringify(a);break;default:(0,import_utils11.unreachable)(e)}return!0}async#aa(t,e,r,a,s){const i={statusCode:200,text:""};try{if(this.#Oe&&r.endsWith("__test"))return logwarn("##dbg api: ",r,a),i.text=JSON.stringify({reqUrl:r,requestOptions:a}),i;switch(t){case"browser":case"state":case"task":case"standalone":const s=await this.#Yr(t);if(!s)throw new Error("##te null apiContext");e>0&&(a.timeout=e);const n=await s.fetch(r,a);i.statusCode=n.status,i.text=n.text;break;case"default":e>0&&(a.timeout={request:e});const o=await(0,import_got_scraping.gotScraping)(r,a);i.statusCode=o.statusCode,i.text=o.body;break;case"fetch":const c=await fetch(r,a);i.statusCode=c.status,i.text=await c.text();break;default:(0,import_utils11.unreachable)(t)}return i}catch(t){return loginfo(t),this.#_r(s,"actionApi","groarException"),i.statusCode=600,i.text=t.message,i}}#sa(t,e){let r=this.#Pr(t,"response",!1);0===r.length&&(r=[]);for(const t of r){const r=this.#br(t,"codes");if(!r)throw this.#_r("cfginvalid","actionApi","invalideCodes"),new Error("unreachable");if(r.split(",").map(t=>Number(t)).includes(e)){const e=this.#br(t,"errname");this.#_r(e,"actionApi","statusCode")}}return!0}#ia(t,e,r,a){const s=this.#na(r,a);if(s&&!t.match(s))throw this.#_r(e,"actionApi","apiResponseText"),new Error("unreachable");return!0}#oa(t,e,r="json"){return"tid"===t&&(t=`tid${this.#m}`),"uuidv4"===e?e=uuid3.v4():"datetime"===e&&(e=String((0,import_utils11.getLocalDateNumber)())),`${t}_${e}.${r}`}#ca(t,e=!1){let r=appConfig.cfg.baseFileDir;return e?(r=path5.join(r,"debug"),(0,import_utils11.isDirectorySync)(r)||fs6.mkdirSync(r)):r=path5.join(r,"files"),path5.join(r,t)}#la(t,e,r="json"){try{const a=this.#oa(t,e,r),s=this.#ca(a,!0);return fs6.readFileSync(s,"utf8")}catch(t){return""}}#pa(t,e,r,a="json",s="normal"){try{const s=this.#oa(e,r,a),i=this.#ca(s,!0);return fs6.writeFileSync(i,t),!0}catch(t){return this.#_r(s,"actionApi","sarExeception"),!1}}async#Xe(t){let e=200,r="",a="";this.#Ge();const s=this.#br(t,"url");try{GetPara.canAccessSeureData(this.#Le,s)||this.#ze();const i=this.#Hr(t);let{method:n,url:o,encodeuri:c,session:l,headerssource:p,headers:g,referer:h,proxy:u,timeout:d,data:f,datatype:m,format:y,requestprefix:C,responseprefix:v,tabname:b,subkeys:w,varname:S,setkeys:k,errname:_,valerrname:x,pattern:E,flags:A}=i;const I=this.#Je;if(this.#Oe){if(C)if(I.cachedRequestUrl){const{cachedRequestUrl:t,cachedRequestHeaders:e,cachedRequestData:r}=I,a=JSON.stringify({cachedRequestUrl:t,cachedRequestHeaders:e,cachedRequestData:r});this.#pa(a,C,"request","json",_)}else{const t=this.#la(C,"request");if(t){if((0,import_utils11.getJsonParseOfStr)(t)){const{cachedRequestUrl:e,cachedRequestHeaders:r,cachedRequestData:a}=(0,import_utils11.getJsonParseOfStr)(t);e&&(I.cachedRequestUrl=e),r&&(I.cachedRequestHeaders=r),a&&(I.cachedRequestData=a)}}}"cachedRequestUrl"===o&&(o=I.cachedRequestUrl),"cachedRequestData"===f&&I.cachedRequestData&&(f=I.cachedRequestData),"cachedRequestHeaders"===g&&I.cachedRequestHeaders&&(g=JSON.stringify(I.cachedRequestHeaders))}const O=i.context,T=d?Number(d):0,D=o.startsWith("/"),P=c?encodeURI(o):o,N=this.#Pr(t,"object",!1),R=this.#Pr(t,"request",!1),F=n.toUpperCase();if(!["GET","DELETE","POST","PUT"].includes(F))return this.#_r("cfginvalid","actionApi","invalidMethod"),"";let j=!1;this.#Oe&&v&&(r=this.#la(v,"response"),r&&(j=!0));let $=null;if(!r)if(D){if("function"==typeof GetPara.getOtherFunObj.execBaseApiFun){const t=T>0?{timeout:T}:void 0,e=f?await this.#ta(f,m,N,_):null;r=await GetPara.getOtherFunObj.execBaseApiFun(F,P,e,t,this.#m)}}else{const s={method:F.toUpperCase()},i=this.#f.proxy;if(i&&(u&&i.proxyUrl&&(s.proxyUrl=i.proxyUrl),l&&i.proxyUrl&&"default"===O&&(s.sessionToken=i.proxyUrl)),$=this.#Xr(P,p,g,h,R),$&&(s.headers=$),f){const t=await this.#ta(f,m,N,_);void 0!==t&&(a=JSON.stringify(t),this.#ra(s,O,y,t),this.#Qr($,a))}const n=await this.#aa(O,T,P,s,_);e=n.statusCode,r=n.text,200!==e&&this.#sa(t,e)}if(b&&"none"!==b){const t=this.#f.execData;t[b]||(t[b]=[]);const e={pageUrl:this.#qe.sysParas.url,requestMethod:F,requestUrl:o,requestData:a,responseData:r,resourceType:"api",size:String(r.length)};this.#Oe&&(e.requestHeaders=$?JSON.stringify($):""),t[b].push(e)}this.#Oe&&!j&&v&&r&&this.#pa(r,v,"response","json",_);let L=r;if(w){const t=(0,import_utils11.getJsonParseOfStr)(L);t&&"object"==typeof t||(L="");L=getSubkeysStrOfObject(t,this.#ga(w))}return"ignore"!==x&&E&&this.#ia(L,x,E,A),S&&this.#Ar(S,L),k&&L&&this.#ha(L,k,!0),this.#Ur(t),r}catch(t){throw t}finally{this.#ze()}}async#Qe(t){this.#Or(t),this.#f.loopsStack.length>0?this.#f.breakFlag=!0:logerr("##te Error: break cannot be called outside of loop")}#ua(t){const e=this.#Fr(t,"element");return this.#br(e,"loc")}#da(t,e=1){const r=this.#Pr(t,"element");return r.length<e?(this.#_r("cfginvalid","childElements","elementCnt"),[]):r.map(t=>this.#br(t,"loc"))}async#fa(t,e,r,a){const s=this.#Fr(e,"image"),i=this.#da(s),n=this.#Rr(e,"comment"),o=n?this.#ua(n):"",c=n?this.#br(n,"attr"):"",l=this.#Fr(e,"input"),p=this.#ua(l),g=this.#Dr(l,"enter"),h=g?null:this.#Rr(e,"submit"),u=g||!h?"":this.#ua(h);if(!g&&!h)return this.#_r("cfginvalid","actionCaptcha","invalidTextCfg"),!1;const d=this.#Fr(e,"check"),f=this.#ua(d),m=this.#br(d,"attr"),y=this.#br(d,"failedstr"),C=this.#Hr(e),{lang:v,math:b,maxlen:w,minlen:S,question:k,space:_,texttype:x}=C,E={type:"text",imageLocs:i,commentLoc:o,commentAttr:c,inputLoc:p,enter:g,submitLoc:u,checkLoc:f,checkAttr:m,failedStr:y,case:C.case,lang:v,math:b,maxLength:parseInt(w),minLength:parseInt(S),question:k,space:_,textType:x};return await solveRecognitionCaptcha(t,E,r,a)}async#ma(t,e,r,a){const s=this.#Fr(e,"image"),i=this.#da(s),n=this.#Rr(e,"comment"),o=n?this.#ua(n):"",c=n?this.#br(n,"attr"):"";let l="";const p=this.#Rr(e,"submit");if(p&&(l=this.#ua(p),!l))return this.#_r("cfginvalid","actionCaptcha","invalidCoordinateCfg"),!1;const g=this.#Fr(e,"check"),h=this.#ua(g),u=this.#br(g,"attr"),d=this.#br(g,"failedstr"),f=this.#Hr(e),{lang:m,maxclicks:y,minclicks:C}=f,v={type:"coordinate",imageLocs:i,commentLoc:o,commentAttr:c,submitLoc:l,checkLoc:h,checkAttr:u,failedStr:d,lang:m,maxClicks:parseInt(y),minClicks:parseInt(C)};return await solveRecognitionCaptcha(t,v,r,a)}async#Ze(t){const e=this.#f.page;if(!e)return this.#_r("cfginvalid","actionCaptcha","noPage"),!1;const r=parseInt(this.#br(t,"try")),a=this.#Dr(t,"debug"),s=this.#Fr(t,"captcha"),i=this.#br(s,"type"),n=this.#br(t,"errname"),o=this.#f.proxy;let c;switch(i){case"amazon":case"funcaptcha":case"geetest":case"keycaptcha":case"mtcaptcha":case"turnstile":c=await solveTokenCaptcha(e,i,o,{debug:a});break;case"recaptcha":const t=Number(this.#br(s,"minscore"));c=await solveTokenCaptcha(e,i,o,{minScore:t,debug:a});break;case"text":case"grid":case"slider":case"rotation":c=await this.#fa(e,s,o,r);break;case"coordinate":c=await this.#ma(e,s,o,r);break;default:(0,import_utils11.unreachable)(i)}return a&&logwarn("##te captcha result: ",c),0!==c?.code&&this.#_r(n,"actionCaptcha","cannotSolveCaptcha"),!0}async#tr(t){const e=this.#f.page;if(!e)return this.#_r("cfginvalid","actionClick","noPage"),!1;this.#Or(t);const r=this.#br(t,"type"),a=this.#br(t,"clicktype"),s=parseInt(this.#br(t,"try")),i=this.#br(t,"popuppage"),n=this.#Dr(t,"navigate"),o=this.#br(t,"errname"),c=this.#Pr(t,"element",!0);"click"!==a&&"evaluate"!==a&&(logerr(`##task invalid clicktype ${a} in performClickAction`),this.#_r("cfginvalid","actionClick","invalidClickType"));const{elementSource:l,elements:p}=await this.#ya(c,s);if(this.#Wr(l,"click"),0===p.length)return loginfo(`## te ---- no element to click, actCfg: ${JSON.stringify(t).slice(0,200)}`),this.#_r(o,"actionClick","noElements"),!1;const g=p[0];try{logdbg(`##te click text: ${await g.innerText()}`)}catch(t){logdbg(t)}e.browserContext().browser().isHeadless()||(logdbg(`##te pageId${e.id()} bringToFront in click`),await e.bringToFront());const h=this.#br(t,"downloadpath"),u=appConfig.cfg.baseDownloadDir,d=path5.join(u,h);if(h&&u){if(!0===e.browserContext().browser().isHeadless()&&(logerr('##te please set browserHeadlesses "true" to download files by clicking'),this.#_r("cfginvalid","actionClick","invalidBrowserHeadlesses")),await(0,import_utils11.fsCheckOrCreateSubdir)(u,h,"")){const t="Browser.setDownloadBehavior";try{loginfo(`##browser response of CDP ${t}: `,await e.sendCDPMessage(t,{behavior:"allow",downloadPath:d}))}catch(e){e.message?.includes("does not support")?(logerr(e.message),this.#_r("cfginvalid","actionClick","invalidBrowserControllerTypes")):(logerr(e),logwarn(`##browser failed to send CDP message ${t}`))}}else this.#_r("other","actionClick","invalidDownloadDir")}const f=this.#Jr(t,r);if(f&&f.popupFlag?await this.processNewPageLoginCaptcha(f,async t=>{await t.click({clickType:a})},[g]):await g.click({clickType:a}),"ignored"===i&&n)try{await(0,import_utils11.sleep)(5e3)}catch(t){}f&&f.currentFlag&&await this.#Vr(e,f,"current");const m=this.#br(t,"wait");await this.#qr(m);const y=this.#br(t,"filename");let C="";if(d&&y){C=path5.join(d,y);let t=0;const e=300;for(t=0;t<e;t++){if(await(0,import_utils11.fileExist)(C))break;await(0,import_utils11.sleep)(1e3)}t>=e&&(logwarn(`##te download kId ${this.#y}: failed to download file ${C}`),this.#_r("other","actionClick","downloadTimeout"))}const v=this.#br(t,"pathvarname");return v&&this.#Ar(v,C),this.#Ur(t),!0}async#er(t){return this.#Or(t),this.#f.loopsStack.length>0?(this.#f.continueFlag=!0,!0):(logerr("##te Error: continue cannot be called outside of loop"),!1)}async#rr(t){this.#Or(t);const e=this.#br(t,"errname");if(!e)return!1;const r=void 0!==this.#We[e]?this.#We[e]:-69;throw this.#f.credits=r,new Error(`##te action_throw with errname ${e}`)}#Ca(t){try{const e=this.#f.page,r=e?e.url():this.#qe.pageUrl?this.#qe.pageUrl:"";if(!r)return logwarn("Please execute page.goto or set variable pageUrl first"),t;const a=new URL(t,r);return a?a.href:t}catch(e){return t}}#na(t,e=""){if(!t)return null;try{return e?new RegExp(t,e):new RegExp(t)}catch(t){return this.#_r("cfginvalid","regExp","invalidRegExp"),null}}async#va(t,e){let r="text";t&&(r=this.#br(t,"type"));let a="step00",s="",i=!0,n=!1,o="\n",c=!1,l=!1,p=!1,g=[];try{if(e.length>0){let h=e[0];switch(r){case"text":a="step11",t&&(i=this.#Dr(t,"multieles"),n=this.#Dr(t,"trim"),o=this.#br(t,"join"),c=this.#Dr(t,"line"),l=this.#Dr(t,"top")),a="step12";for(let t of e){if(s=await t.innerText(l),n&&(s=s.trim()),!i)break;g.push(s)}a="step13",i&&(s="stringify"===o?JSON.stringify(g):g.join(o)),c&&(s=s.replace(/[\s\r\n]+/g," ")),a="step14";break;case"attr":a="step21";const u=this.#br(t,"attrname"),d=this.#br(t,"attrname2"),f=this.#br(t,"attrname3"),m=this.#br(t,"attrname4");n=this.#Dr(t,"trim");const y=this.#br(t,"pattern"),C=this.#Dr(t,"boolattr");i=this.#Dr(t,"multieles"),o=this.#br(t,"join"),c=this.#Dr(t,"line"),p=this.#Dr(t,"absolute"),a="step22";for(let t of e){if(C)a="step22",s=await t.hasAttribute(u)?"1":"0";else{a="step23";const e=this.#na(y);for(const r of[u,d,f,m]){if(!r)break;let a=await t.attribute(r);if(s="string"==typeof a?a:null===a?"":String(a),n&&(s=s.trim()),!e)break;if(s.match(e))break;s=""}p&&(s=this.#Ca(s))}if(!i)break;g.push(s),a="step24"}i&&(s="stringify"===o?JSON.stringify(g):g.join(o)),c&&(s=s.replace(/[\s\r\n]+/g," ")),a="step25";break;case"innerhtml":s=await h.innerHtml();break;case"length":s=String(e.length);break;case"outerhtml":s=await h.outerHtml();break;case"pictext":s="pictext";break;case"image":s="image";break;case"query":s="query";break;default:throw new Error(`##te Invalid content type: ${r}`)}}else"length"===r&&(s="0");return s}catch(i){throw loginfo(`##te processBrowserElecontentCfg: tId${this.#m} ecCfg: ${JSON.stringify(t).slice(0,200)}`),loginfo(`##te err: ${JSON.stringify(i)}`),loginfo(`##te contentType ${r}, content ${s}, onelineFlag ${c}`),loginfo(`##te message ${a}`),loginfo(`##te $browserEles ${e}, length ${e.length}, e0 ${e[0]}`),new Error(i)}}async#ba(t,e){try{let r="";const a=this.#br(t,"defaultval"),s=this.#Dr(t,"usevar");let i=this.#Pr(t,"fun",!0).map(t=>t[appConfig.XML_ATTR_KEY]);if(s){const t=i;i=[];for(const e of t){const t=Object.assign({},e);for(const e of Object.keys(t))"string"==typeof t[e]&&t[e].includes("${")&&(t[e]=this.#Tr(t[e],this.#qe));i.push(t)}}return r=await getTransformExpStr(e,i,a,this.#Ie),r}catch(e){throw loginfo(`##te processTransformCfg: tId${this.#m} tCfg: ${JSON.stringify(t).slice(0,200)}`),loginfo(`##te err: ${JSON.stringify(e)}`),new Error(e)}}async#wa(t){const{proxy:e,browserApiContext:r}=this.#f;if("current"===t){const{page:t,standaloneApiContext:a}=this.#f;return{proxy:e,page:t,browserApiContext:r,standaloneApiContext:a}}{const a="none"!==t?await import_controller3.controller.newApiContext({proxy:{proxyUrl:e?e.proxyUrl:""}}):null;if("popup"===t){if(!this.#f.popupPage)throw new Error("No valid popup page");return{proxy:e,page:this.#f.popupPage,browserApiContext:r,standaloneApiContext:a}}if("newpage"===t){let t=null;if(this.#f.page){const t=await this.#f.page.browserContext().getPage(void 0,!0);if(!t)throw new Error("No new page to perform sync subtask");t.setPageInfo({taskId:8,relatedId:this.#y,misc:{}})}else this.#_r("cfginvalid","syncSubtask","noPageInParentTask");return{proxy:e,page:t,browserApiContext:r,standaloneApiContext:a}}if("newapi"===t)return{proxy:e,page:null,browserApiContext:r,standaloneApiContext:a};if("none"===t)return{proxy:null,page:null,browserApiContext:null,standaloneApiContext:a};(0,import_utils11.unreachable)(t)}}async#Sa(t,e){try{let r="";const a=parseInt(this.#br(t,"tid")),s=parseInt(this.#br(t,"minlen")),i=this.#br(t,"parasstr");let n=this.#br(t,"errname");const o=this.#Dr(t,"popuppage");if(o&&!this.#f.popupPage){const t="ignore"===n?"cfginvalid":n;this.#_r(t,"syncSubtask","noPopupPage")}if(i.length>=s){const t=await this.#wa(e),{taskData:s}=await this.#$e(a,i,t,"memSync");if("current"!==e){const{page:e,standaloneApiContext:r}=t;r&&r.destroy()}const{credits:n,execData:c}=s;if(o&&(this.#f.popupPage=null),logdbg(`##te memsyncsubtask t${a} p${i} c${n} data: ${JSON.stringify(c)}`),n>=-1){if(c&&1===Object.keys(c).length&&Array.isArray(Object.values(c)[0])){const t=Object.values(c)[0];if(Array.isArray(t)&&1===t.length){const e=Object.keys(t[0]).length;if(1===e){const e=Object.keys(t[0])[0];r=t[0][e]}else r=0===e?"":JSON.stringify(t[0])}else r=JSON.stringify(c)}else r=JSON.stringify(c);let t=calcGenCredits(n),e=calcCapCredits(n);this.#Ur(null,!0,!0,t,e)}}else this.#_r(n,"syncSubtask","failed");return r}catch(e){throw loginfo(`##te processSyncSubtask: tId${this.#m} pCfg: ${JSON.stringify(t).slice(0,200)}`),loginfo(`##te err: ${JSON.stringify(e)}`),new Error(e)}}#ka(t,e){const r={browserListQuery:t.browserlist?t.browerlist:"",browsers:["chrome"],operatingSystems:["windows"],devices:["desktop"],httpVersion:Number(t.httpversion)>0?t.httpversion:"2"},a=this.#Pr(e,"httpbrowser");if(a.length>0){const t=[];a.forEach(e=>{const r=this.#br(e,"name");r||this.#_r("cfginvalid","actGetHttpHeaders","invalidName");const a={name:r},s=parseInt(this.#br(e,"minversion"));s>0&&(a.minVersion=s);const i=parseInt(this.#br(e,"maxversion"));i>0&&(a.maxVersion=i);const n=this.#br(e,"httpversion");n&&Number(n)>0&&(a.httpVersion=n),t.push(a)}),r.browsers=t}const s=this.#Pr(e,"httpos");if(s.length>0){const t=[];s.forEach(e=>{const r=this.#br(e,"os");r||this.#_r("cfginvalid","actGetHttpHeaders","invalidOsName"),t.push(r)}),r.operatingSystems=t}const i=this.#Pr(e,"httpdevice");if(i.length>0){const t=[];i.forEach(e=>{const r=this.#br(e,"device");r||this.#_r("cfginvalid","actGetHttpHeaders","invalidDeviceName"),t.push(r)}),r.devices=t}return r}async#_a(t,e,r){try{let a="",s=[];if("element"===t){const t=this.#br(e,"type"),r=this.#Pr(e,"element",!0),i=this.#Fr(e,"elecontent"),n=this.#br(e,"try",!0,!1),o=n?parseInt(n):1,{elements:c}=await this.#ya(r,o);if(s=c,0===s.length){if("length"===this.#br(i,"type"))a="0";else if("element"===t&&e[appConfig.XML_ATTR_KEY].colname){const t=this.#br(e,"errname");this.#_r(t,"columnElement","invalidColname")}}else a=await this.#va(i,c)}else if("templstr"===t)a=this.#br(e,"templ");else if("property"===t){const t=this.#br(e,"subkeys");a=getSubkeysStrOfObject(r,this.#ga(t))}else if("get"===t){const t=this.#Fr(e,"get"),r=this.#br(t,"type");["cookie","httpheaders","localstorage"].includes(r)&&this.#Ge();const s=this.#Hr(t);let i=this.#f.page,n="page";const o={paras:this.#qe};if("screenshot"===r){const e=this.#Rr(t,"element");if(e){const{elements:t}=await this.#ya([e],1);if(!(t.length>0))throw new Error("##te no elements selected in get_screenshot");n="element",a=await GetPara.getParaInElement(s,t[0],o)}}else if("cookie"===r||"localstorage"===r)this.#Be=!0,o.origStateData=this.#f.origStateData,o.newStateData=this.#f.newStateData,o.domainNames=this.#Le;else if("httpheaders"===r){const e=s.headermethod;o.interceptionData=this.#Je,"genNewByHttpOptions"===e&&(o.genHeaderOptions=this.#ka(s,t));const r=[];this.#Pr(t,"httpheader",!0).forEach(t=>{let e=this.#br(t,"name");if(e=e.toLowerCase().trim(),e){const a=this.#br(t,"source"),s=this.#br(t,"value"),i=this.#Dr(t,"delete");r.push({name:e,source:a,value:s,deleteFlag:i})}}),o.newHttpHeaders=r}else"tabname"===r&&(o.execData=this.#f.execData);i&&"page"===n&&["content","evaluate","mhtml","pdf","screenshot","title","window"].includes(s.type)?a=await GetPara.getParaInPage(s,i,o):["addedtaskparas","cookie","execedtaskparas","file","httpheaders","localstorage","queuedcntwithparas","queuedtaskparas","random","sysparas","tabname"].includes(s.type)?a=await GetPara.getPara(s,o):["screenshot"].includes(s.type)&&"element"===n||this.#_r("cfginvalid","getPara","invalidType")}else if("subtask"===t){const t=this.#Fr(e,"subtask"),r=this.#br(e,"network");loginfo(`##te to execsync subtaskCfg: ${JSON.stringify(t)}`),a=await this.#Sa(t,r)}else{if("ocr"!==t)throw new Error(`##te Invalid content source type: ${t}`);{let t=this.#Fr(e,"ocrcfg");const r=this.#Pr(e,"element",!0),{elementSource:s,elements:i}=await this.#ya(r,1,!1);if(i.length>0&&(this.#Wr(s,"ocr"),a=await this.__processBrowserOcrCfg(t,i),"number"==typeof a&&a<0))throw new Error(`##te Error with ocr content: ${a}`)}}const i=this.#Rr(e,"decodefontsvg"),n=this.#Rr(e,"decodefontttf");(i||n)&&(a=await this.__decodeFontInContent(a,i,n));const o=this.#Rr(e,"transform");return o&&(a=await this.#ba(o,a),null===a&&this.#_r("cfginvalid","decodeFont","invalidFontchars")),{content:a,elements:s}}catch(t){throw loginfo(`##te getEleOrTemplTransform: tId${this.#m} pCfg: ${JSON.stringify(e).slice(0,200)}`),loginfo(`##te err: ${JSON.stringify(t)}`),new Error(t)}}#xa(t,e){let r="";if(this.#f.execData[t]&&this.#f.execData[t].length>0){let a=this.#f.execData[t].length,s=this.#f.execData[t][a-1][e];r=String("boolean"==typeof s?Number(s):s)}return r}async#Ea(t,e,r,a){const s=this.#br(t,"valerrname"),i=this.#br(t,"pattern");try{this.#Or(t);const n=this.#br(t,"type"),o=this.#br(t,"colname");let{content:c}=await this.#_a(n,t,r);if(0===c.length){this.#Dr(t,"completed")&&(c=this.#xa(e,o))}if("ignore"!==s&&i){const e=this.#br(t,"flags"),r=this.#na(i,e);r&&!c.match(r)&&this.#_r(s,"columnContent","validate")}this.#Dr(t,"setvar")&&this.#Ar(o,c);const l=!a&&this.#Dr(t,"discarded"),p={};if(l)return null;{let e;const r=this.#br(t,"datatype");return"number"===r?e=this.#Lr(c,"round"):"boolen"===r&&(e=this.#Mr(c)),p[o]="string"===r?c:e,p}}catch(e){throw this.#f.credits>=0&&(loginfo(`##te processColumnCfg: tId${this.#m}, fCfg ${JSON.stringify(t).slice(0,100)}`),loginfo(`##te err: ${JSON.stringify(e)}`)),new Error(e)}}async#Aa(t){const e=this.#br(t,"tabname");if("string"!=typeof e||0===e.length)throw new Error(`##te Invalid table name: ${e}`);this.#f.execData[e]||(this.#f.execData[e]=[]);const r={},a=this.#Pr(t,"column",!0);for(let t of a){const a=this.#br(t,"colname");if(!(this.#je.length>0)||this.#je.includes(a))try{let s=await this.#Ea(t,e);s||void 0===r[a]||delete r[a],Object.assign(r,s),a.startsWith("cx")&&loginfo(`##dbg extract: ${a}=${r[a]}`)}catch(e){throw this.#f.credits>=0&&loginfo(`##te extract column tId${this.#m} fCfg: ${JSON.stringify(t).slice(0,200)}`),e}}return this.#f.execData[e].push(r),!0}#Ia(t,e){t&&"object"==typeof t||this.#_r(e,"arrayItem","notNormalObject")}#ga(t){if(!t.trim())return[];const e=t.trim().split(".");if(!e.every(t=>!!t))throw this.#_r("cfginvalid","actionExtractArray","invalidSubkeys"),new Error("unreachable");return e}#ha(t,e,r){if("string"==typeof t&&(t=(0,import_utils11.getJsonParseOfStr)(t)),t&&"object"==typeof t){const a="*"===e?Array.from(Object.keys(t)):e.split(",");for(let e of a){r&&e.includes("-")&&(e=e.replaceAll(/-/g,"_"));const a=t[e];if(a){const t="string"==typeof a?a:JSON.stringify(a);this.#Ar(e,t)}}return!0}return!1}#Oa(t,e,r,a){for(const s of e)if(r){const e=typeof s;if("object"===e&&s)t.push(s);else if("string"===e){const e=(0,import_utils11.getJsonParseOfStr)(s);"object"==typeof e&&e?t.push(e):this.#_r(a,"actionExtractArray","invalidArrayItems1")}else this.#_r(a,"actionExtractArray","invalidArrayItems2")}else t.push((0,import_utils11.getStringOfObj)(s));return!0}#Ta(t,e,r,a,s,i,n,o){let c=this.#f.execData[t];if(!Array.isArray(c))return[];const l=e?new RegExp(e):null,p=[];for(const[e,g]of c.entries()){if(l&&"string"==typeof g.requestUrl&&!g.requestUrl.match(l))continue;if(a&&this.#Gr(t,e))continue;r&&this.#Kr(t,e);let c=getSubkeysValueOfDataRecord(g,s);c?(n&&("string"==typeof c&&(c=(0,import_utils11.getJsonParseOfStr)(c)),this.#Ia(c,o)),i&&Array.isArray(c)?this.#Oa(p,c,n,o):this.#Oa(p,[c],n,o)):this.#_r(o,"arryItemsFromTabname","empty")}return p}#Da(t,e,r){let a=(0,import_utils11.getJsonParseOfStr)(t);Array.isArray(a)?e.length>0&&(a=a.map(t=>(0,import_utils11.getMemberOfObject)(t,e))):e.length>0&&(a=(0,import_utils11.getMemberOfObject)(a,e)),this.#Ia(a,r),Array.isArray(a)||(a=[a]);const s=[];return this.#Oa(s,a,!0,r),s}async#Pa(t){const{list:e,requrl:r,setprocessed:a,skipprocessed:s,subkeys:i,arrayinrec:n,keys:o,tabname:c,varname:l,idxname:p,setkeys:g,maxloops:h,errname:u}=this.#Hr(t),d=p.endsWith("0"),f=this.#ga(i);let m;m=isDataTableName(e)?this.#Ta(e,r,a,s,f,n,!0,u):this.#Da(e,f,u);const y=parseInt(h);y>0&&m.length>y&&(m=m.slice(0,y));let C=this.#f.execData[c];if(C||(C=[],this.#f.execData[c]=C),0===m.length)return!0;const v=this.#Pr(t,"column",!1),b="*"===o?Array.from(Object.keys(m[0])):o?o.split(","):[],w=v.map(t=>{const e=this.#br(t,"colname"),r=this.#br(t,"type");return{colName:e,filterFlag:"property"===r&&this.#Dr(t,"filter"),jsonFlag:!(!this.#Oe||"property"!==r)&&this.#Dr(t,"json"),columnCfg:t}});for(const[t,e]of m.entries()){let r=!0;const a={};l&&this.#Ar(l,JSON.stringify(e)),p&&this.#Ar(p,String(d?t:t+1)),g&&e&&this.#ha(e,g,!0);for(const t of b){const r=getSubkeysStrOfObject(e,[t]);a[t]=r}for(let{colName:t,filterFlag:s,jsonFlag:i,columnCfg:n}of w)try{if(this.#je.length>0&&!this.#je.includes(t))continue;let o=await this.#Ea(n,c,e,s);if(o){const e=o[t];if(s){if("string"==typeof e&&!this.#Mr(e)){r=!1;break}}else if(i){let r=(0,import_utils11.getJsonParseOfStr)(e);r=r||e,a[t]=r}else Object.assign(a,o)}else void 0!==a[t]&&delete a[t];t.startsWith("cx")&&loginfo(`##dbg extract: ${t}=${a[t]}`)}catch(t){throw this.#f.credits>=0&&loginfo(`##te extract column tId${this.#m} fCfg: ${JSON.stringify(n).slice(0,200)}`),t}r&&C.push(a)}return!0}async#Na(t,e,r,a){try{const s=Object.assign({},this.#qe,{authInfo:null,sysParas:null}),i={vars:s,tabName:r,maxLoops:t,errName:a,execData:this.#f.execData};if(e&&this.#f.page){const t=await this.#f.page.content();i.html=t}return i}catch(t){return null}}#Ra(t){if(!t||"object"!=typeof t||!t.execData||"object"!=typeof t.execData)return!1;const{execData:e,errName:r}=t;for(const t of Object.keys(e))if(!isDataTableName(t))return!1;for(const t of Object.values(e))if(!Array.isArray(t)||!t.every(t=>t&&"object"==typeof t))return!1;return!!(void 0===r||"string"==typeof r&&r)}async#Fa(t){const e=this.#Hr(t),{name:r,others:a,tabname:s,maxloops:i,errname:n}=e;if(!r)return!0;try{const t=parseInt(i),e=a.includes("html"),o=await this.#Na(t,e,s,n);if(!o)return this.#_r(n,"actionExtractScript","invalidInData"),!1;const c=await LsdScript.execExtractScript(o,r,this.#Ie);if(!this.#Ra(c))return this.#_r(n,"actionExtractScript","invalidResult"),!1;c.errName&&(c.vars?.extractError&&logwarn(`##te tid ${this.#m} kid ${this.#y} action_extract_script error: ${c.vars.extractError}`),"ignore"===c.errName?this.#_r(n,"actionExtractScript","resultError1"):this.#_r(c.errName,"actionExtractScript","resultError2"));const l=this.#f.execData,p=c.execData;for(const t of Object.keys(p))"string"==typeof t&&isDataTableName(t)&&(l[t]=p[t]);if(c.vars&&"object"==typeof c.vars)for(const t of Object.keys(c.vars))"string"==typeof t&&"string"==typeof c.vars[t]&&t.startsWith("extract")&&this.#Ar(t,c.vars[t]);return!0}catch(t){return logwarn(t.message),this.#_r(n,"actionExtractScript","pesaException"),!1}}async#ja(t){let e="rowspan",r=this.#Nr(`*[${e}]`);const{elements:a}=await this.#$a(r);if(a.length>0)for(const t of a){const r=await t.attribute(e);if(!r&&parseInt(r)>1)return!1}e="colspan",r=this.#Nr(`*[${e}]`);const{elements:s}=await this.#$a(r);if(s.length>0)for(const t of s){const r=await t.attribute(e);if(!r&&parseInt(r)>1)return!1}return!0}#La(t,e,r,a=!0){let s=a&&"camel"===e?t.replaceAll(/[^\w|\s]/g,"").replaceAll(/_/g," "):t;if(r&&"string"==typeof r)return r;if("header"===e)return s;{const t=s.split(/\s+/);let e=t[0].toLowerCase();for(const r of t.slice(1))e=`${e}${r[0].toUpperCase()}${r.slice(1).toLowerCase()}`;return e}}async#Ma(t,e,r,a,s){const i=[],n=[];let o=!1,c=1,l="",p=1,g=this.#Nr("./thead/tr");const{elements:h}=await this.#$a(g);if(h.length>1)return this.#_r(s,"actionExtractTable","manyTheadTrs"),!0;if(1===h.length){o=!0,g=this.#Nr("./thead/tr/th");const{elements:r}=await this.#$a(g);if(0===r.length)return this.#_r(s,"actionExtractTable","noTheadTrTh"),!0;for(const[a,s]of r.entries()){const r=(await s.textContent()).trim(),n=this.#La(r||"space"+c++,t,e[a]);i.push(n)}}l="./tr",g=this.#Nr(l);let{elements:u}=await this.#$a(g);if(0===u.length){l="./tbody/tr",g=this.#Nr(l);let{elements:t}=await this.#$a(g);u=t}if(u.length<=1)return this.#_r(s,"actionExtractTable","noRecord"),!0;if(!o){g=this.#Nr(`${l}[${p}]/*`);let{elements:r}=await this.#$a(g);if(0===r.length)return this.#_r(s,"actionExtractTable","noTr"),!0;for(const[a,s]of r.entries()){const r=(await s.textContent()).trim(),n=this.#La(r||"space"+c++,t,e[a]);i.push(n)}p++,u=u.slice(1)}const d=i.length;for(const t of u.keys()){if(a>0&&t>=a)break;g=this.#Nr(`${l}[${p+t}]/*`);let{elements:e}=await this.#$a(g);if(e.length!==d)return this.#_r(s,"actionExtractTable","differentColumns"),!0;const r={};for(const t of e.keys()){const a=await e[t].textContent();r[i[t]]=a}n.push(r)}const f=this.#f.execData[r];return Array.isArray(f)?n.forEach(t=>f.push(t)):this.#f.execData[r]=n,!0}async#qa(t,e,r,a,s){const i=[];let n=0,o="",c=1;o="./tr";let l=this.#Nr(o),{elements:p}=await this.#$a(l);if(0===p.length){o="./tbody/tr",l=this.#Nr(o);let{elements:t}=await this.#$a(l);p=t}if(0===p.length)return this.#_r(s,"actionExtractTable","noTrElments"),!0;for(const r of p.keys()){let l=this.#Nr(`${o}[${r+1}]/th`),{elements:p}=await this.#$a(l);if(1!==p.length)return this.#_r(s,"actionExtractTable","noThElements"),!0;const g=(await p[0].textContent()).trim(),h=this.#La(g||"space"+c++,t,e[r]);let u=this.#Nr(`${o}[${r+1}]/td`),{elements:d}=await this.#$a(u);if(0===d.length)return this.#_r(s,"actionExtractTable","noTdElements"),!0;if(0===r){for(const t of d.keys()){if(a>0&&t>=a)break;const e=await d[t].textContent(),r={};r[h]=e,i.push(r)}n=i.length}else{if(d.length<n)return this.#_r(s,"actionExtractTable","differentVertCols"),!0;for(const t of d.keys()){if(t>=n)break;const e=await d[t].textContent();i[t][h]=e}}}const g=this.#f.execData[r];return Array.isArray(g)?i.forEach(t=>g.push(t)):this.#f.execData[r]=i,!0}async#Ua(t){const{orientation:e,check:r,tabname:a,keyformat:s,colnames:i,maxloops:n,errname:o}=this.#Hr(t),c=i?i.split(","):[],l=this.#Pr(t,"element",!0),p=parseInt(n);if(p<0)return!1;if(0===l.length)return this.#_r("logicerror","actionExtractTable","noEleCfg"),!1;const{elementSource:g,elements:h}=await this.#$a(l[0]);if(0===h.length)return this.#_r(o,"actionExtractTable","noTables"),!0;const u=h[0];if("browser"===g?this.#f.browserElesStack.push(u):"xml"===g?this.#f.cheerioElesStack.push(u):(0,import_utils11.unreachable)(g),this.#f.loopsStack.push(u),r){if(!await this.#ja("vertical"===e))return this.#_r("cfginvalid","actionExtractTable","notExtractable"),!1}return"vertical"===e?await this.#qa(s,c,a,p,o):await this.#Ma(s,c,a,p,o),this.#f.loopsStack.pop(),"browser"===g?this.#f.browserElesStack.pop():"xml"===g?this.#f.cheerioElesStack.pop():(0,import_utils11.unreachable)(g),!0}async#ar(t){this.#Or(t);let e=this.#br(t,"subtype",!1,!1);try{if(e)if("array"===e)await this.#Pa(t);else if("script"===e)await this.#Fa(t);else{if("table"!==e)return this.#_r("cfginvalid","actionExtract","logicError"),!1;await this.#Ua(t)}else await this.#Aa(t);return!0}catch(t){throw t}}#Ja(t){try{const e=JSON.parse(t);return e&&"object"==typeof e?e:null}catch(t){this.#_r("cfginvalid","actionGoto","invalidHeaders")}}async#sr(t){const e=this.#f.page;if(!e)return this.#_r("cfginvalid","actionGogo","noPage"),!1;this.#f.browserElesStack.length>0&&this.#_r("cfginvalid","actionGoto","inLoopOfBrowserElements");let r="";try{this.#Or(t);const a=this.#br(t,"type");r=this.#br(t,"url");const s=this.#br(t,"timeout"),i=parseInt(s),n=this.#br(t,"wait"),o=this.#Dr(t,"reuse"),c=this.#Dr(t,"encodeuri"),l=this.#br(t,"headers"),p=this.#br(t,"referer");if(c&&(r=encodeURI(r)),!this.#Ir(r))throw new Error(`##te Invalid url: ${r} when trying to open this page`);if(loginfo(`##te goto url ${r}`),o){if(e.url().includes(r))return await this.#qr(n),this.#Ur(t),e}if(this.#Ke=r,l.trim()){const t=this.#Ja(l.trim());t&&await e.setExtraHTTPHeaders(t)}this.#kr(e,a);const g=this.#Jr(t,a);return g&&g.popupFlag?await this.processNewPageLoginCaptcha(g,async(t,e,r)=>{r?await t.goto(e,{waitUntil:"load",timeout:i,referer:r}):await t.goto(e,{waitUntil:"load",timeout:i})},[e,r,p]):await e.goto(r,{timeout:i}),g&&g.currentFlag&&await this.#Vr(e,g,"current"),await this.#qr(n),this.#Ur(t),e}catch(t){if(loginfo(`##te kId${this.#y} goto: ${r}`),-43!==this.#f.credits&&(logerr(`##te kId${this.#y} error credits ${this.#f.credits} in performGotoAction`),logerr(t)),this.#f.credits>=0){const e=t.message?t.message:"";if(e.includes("net::ERR_INTERNET_DISCONNECTED"))this.#wr(-71);else if(e.includes("net::ERR_NAME_NOT_RESOLVED")){await(0,import_utils11.checkDns)(appConfig.CHECK_DNS_DOMAIN)?this.#wr(-69):this.#wr(-71)}else e.includes("net::ERR_CONNECTION_TIMED_OUT")?this.#wr(-72):e.includes("net::ERR_CONNECTION_REFUSED")||e.includes("net::ERR_CONNECTION_RESET")?this.#wr(-98):e.includes("net::ERR_PROXY_CONNECTION_FAILED ")||e.includes("net::ERR_EMPTY_RESPONSE")||e.includes("net::ERR_TIMED_OUT")||e.includes("net::ERR_TUNNEL_CONNECTION_FAILED")?this.#wr(-86):e.includes("net::ERR_INVALID_AUTH_CREDENTIALS")?this.#wr(-88):(e.includes("Navigation timeout"),this.#wr(-85))}throw new Error(t)}}async#Ha(t,e=10){let r=null;for(let a=0;a<e;a++)try{return await t.hover(),!0}catch(t){loginfo(t),await(0,import_utils11.sleep)(2e3),r=t}throw r}async#ir(t){const e=this.#f.page;if(!e)return this.#_r("cfginvalid","actionHover","noPage"),!1;this.#Or(t);const r=parseInt(this.#br(t,"try")),a=this.#br(t,"errname");try{const s=this.#Pr(t,"element",!0),{elementSource:i,elements:n}=await this.#ya(s,r);if(this.#Wr(i,"hover"),0===n.length)return this.#_r(a,"actionHover","noElements"),e;this.#$r()&&await e.bringToFront(),logdbg(`##te pageIdx${this.#jr().pageIdx} hover`),await this.#Ha(n[0]);const o=this.#br(t,"wait");return await this.#qr(o),this.#Ur(t),e}catch(t){return loginfo(t),this.#_r("other","actionHover","phaException"),e}}async#Ba(t){this.#Or(t);const e=this.#br(t,"type");let r=!1;if(["element","templstr"].includes(e))try{"templstr"===e&&this.#Ge();let a="";a=(await this.#_a(e,t)).content,r=this.#Mr(a)}catch(t){throw t}finally{this.#ze()}else{if("else"!==e)throw new Error("##te Invalid type(condition)");r=!0}if(r){const e=this.#Pr(t,"action");await this.#Va(e)}return r}async#nr(t){this.#Or(t);const e=this.#Pr(t,"condition");for(let t of e)if(await this.#Ba(t))break;return!0}async#or(t){if(!this.#f.page)return this.#_r("cfginvalid","actionInput","noPage"),!1;this.#Or(t);const e=this.#br(t,"content"),r=this.#Dr(t,"replace"),a=this.#Dr(t,"enter"),s=parseInt(this.#br(t,"try")),i=this.#br(t,"errname"),n=this.#Pr(t,"element",!0);try{const{elementSource:o,elements:c}=await this.#ya(n,s);if(this.#Wr(o,"input"),0===c.length)return this.#_r(i,"actionInput","noElements"),!1;await c[0].input(e,{replace:r,enter:a});const l=this.#br(t,"wait");return await this.#qr(l),this.#Ur(t),!0}catch(t){return logerr(t),!1}}#Hr(t,e=!0){const r=Object.assign({},t[appConfig.XML_ATTR_KEY]);if(!r||"object"!=typeof r)throw new Error("Invalid origCfg in transformStrAttrsInCfg");if(!e)return r;for(const t of Object.keys(r))"string"==typeof r[t]&&r[t].includes("${")&&(r[t]=this.#Tr(r[t],this.#qe));return r}#Wa(t){const e=[];for(const r of t){const{type:t,method:a,url:s,resourcetype:i,postdata:n}=r,o={};if(a&&"all"!==a&&(o.methods=[a.toUpperCase()]),s&&(o.url=new RegExp(s)),i&&"all"!==i&&(o.resourceTypes=[i]),n&&(o.postData=new RegExp(n)),"abort"===t){const t={requestMatch:o,action:"abort"};e.push(t)}else{if("fufill"!==t)throw new Error(`Invalid action type ${t}`);{const{fulfill:t}=r,a={requestMatch:o,action:"fulfill",fulfill:t};e.push(a)}}}return e}#Ka(t){const e=[];for(const r of t){const{type:t,method:a,url:s,resourcetype:i,postdata:n,minsize:o,maxsize:c}=r,l={};a&&"all"!==a&&(l.methods=[a.toUpperCase()]),s&&(l.url=new RegExp(s)),i&&"all"!==i&&(l.resourceTypes=[i]),n&&(l.postData=new RegExp(n));const p={},g=parseInt(o);g>0&&(p.minLength=g);const h=parseInt(c);if(h>0&&(p.maxLength=h),"cache"===t){const{tabname:t,contenttype:a,requestheaders:s,responseheaders:i,cacheheaders:n}=r,o=Number(t.slice(4)),c=n&&o<=7999&&(this.#m<1e6||!this.#xe.capName),g={requestMatch:l,responseMatch:p,handler:responseCacheCb,handlerOptions:{execData:this.#f.execData,contentType:a,tabname:t,requestHeadersFlag:s,responseHeadersFlag:i,cacheHeadersFlag:c,interceptionData:this.#Je,debugFlag:this.#Oe}};e.push(g)}else{if("save"!==t)throw new Error(`Invalid response type ${t}`);{const{basedir:t,encoding:a,extname:s,hashmethod:i,hostnameparts:n,params:o,pathtype:c,tabname:g,validextnames:h}=r,u={requestMatch:l,responseMatch:p,handler:responseSaveCb,handlerOptions:{execData:this.#f.execData,baseDir:t,pathType:c,hashMethod:i,hostnameParts:parseInt(n),extname:s,validExtnames:h,params:o,encoding:a,tabname:g}};e.push(u)}}}return e}async#cr(t){const e=this.#f.page;if(!e)return this.#_r("cfginvalid","actionIntercept","noPage"),!1;this.#Or(t);const r=this.#br(t,"subtype");let a=this.#Pr(t,"request"),s=this.#Pr(t,"response");try{if(a=a.map(t=>this.#Hr(t)),s=s.map(t=>this.#Hr(t)),"set"===r){if(a.length<=0&&s.length<=0&&this.#_r("cfginvalid","actionIntercept","noCfgs"),a.length>0){const t=this.#Wa(a);await e.setRequestInterception(t)}if(s.length>0){const t=this.#Ka(s);await e.setResponseInterception(t)}}else"clear"===r&&(await e.clearRequestInterceptions(),await e.clearResponseInterceptions());return!0}catch(t){return logerr(t),!1}}async#pr(t){this.#Or(t);try{const e=this.#br(t,"errname");let r=this.#br(t,"roundtype"),a=this.#Lr(this.#br(t,"from"),r),s=this.#Lr(this.#br(t,"to"),r),i=this.#Lr(this.#br(t,"step"),r),n=this.#br(t,"varname"),o=this.#Lr(this.#br(t,"maxloops"),r);if(o<0)return!1;let c=0;for(let e=a;e<=s&&!(o&&c++>=o);e+=i){this.#f.loopsStack.push(e),this.#Ar(n,String(e));const r=this.#Pr(t,"action");if(await this.#Va(r),this.#f.loopsStack.pop(),this.#f.continueFlag&&(this.#f.continueFlag=!1),this.#f.breakFlag){this.#f.breakFlag=!1;break}}return c<1&&this.#_r(e,"actionLoopfor","zeroLoops"),!0}catch(t){throw t}}async#$a(t){try{const e=this.#br(t,"loc").trim(),r=this.#vr(t),a=this.#Dr(t,"absolute"),s=this.#Pr(t,"iframe",!1).map(t=>this.#Hr(t)).map(t=>{const{srcprefix:e,loc:r}=t;return{src:e,selector:r}}),i=this.#f.page,n={elementSource:r,elements:[]};if("browser"===r){if(!i)throw new Error("Cannot get elements from null browser page");if(0===this.#f.browserElesStack.length)n.elements=await i.findElements(e,s);else{const t=this.#f.browserElesStack.slice(-1)[0];n.elements=await t.findElements(e,s,a)}return n}if("xml"===r){if(s.length>0)throw new Error("Iframe config is invalid in cheerio source");let t=this.#f.cheerioPage;if(!t){if(!i)throw new Error("Please set CheerioPage first, from which to select elememnts");const e=await i.content();e.length>10&&(this.#xr(e,!0),t=this.#f.cheerioPage)}if(!t)throw new Error("Cannot get elements from null cheerioPage");if(0===this.#f.cheerioElesStack.length)n.elements=await t.findElements(e);else{const t=this.#f.cheerioElesStack.slice(-1)[0];n.elements=await t.findElements(e,s,a)}return n}(0,import_utils11.unreachable)(r)}catch(e){throw loginfo(`##te processElementCfg: tId${this.#m} eleCfg: ${JSON.stringify(t).slice(0,200)}`),new Error(e)}}async#ya(t,e=1,r=!0){try{if(0===t.length)throw new Error("No element tags");const a={elementSource:"browser",elements:[]};for(let s=0;s<e;s++){let e="";const i=[];for(const a of t){const{elementSource:t,elements:s}=await this.#$a(a);if(e&&e!=t)throw new Error("Element sources of all element tags must be the same");if(e=t,s.length>0&&(s.forEach(t=>i.push(t)),r))break}if(e&&(a.elementSource=e),i.length>0)return a.elements=i,a;s>0&&(loginfo(`##tmp ${s} try failed in getEleOrTemplTransform`),await(0,import_utils11.sleep)(1e3))}return a}catch(e){throw loginfo(`##te processElementCfgs: eleCfgs: ${JSON.stringify(t).slice(0,200)}`),new Error(e)}}async#gr(t){if(!this.#f.page)return this.#_r("cfginvalid","actionLoopineles","noPage"),!1;this.#Or(t);const e=this.#br(t,"varname"),r=e.startsWith("position"),a=this.#br(t,"errname"),s=this.#Pr(t,"element",!0);let i=this.#Lr(this.#br(t,"maxloops"),"round"),n=this.#Lr(this.#br(t,"start"),"round"),o=this.#Lr(this.#br(t,"end"),"round"),c=this.#Lr(this.#br(t,"step"),"round");if(c<1&&(c=1),i<0)return!1;const{elementSource:l,elements:p}=await this.#ya(s,1),g=p.length;if(0===g)return this.#_r(a,"actionLoopineles","noElements"),!0;n<=0&&(n+=g),o<=0?o+=g:o>g&&(o=g);let h=0;for(let a=n-1;a<o&&!(i&&h>=i);a+=c){e&&this.#Ar(e,String(r?a+1:a));const s=p[a];"browser"===l?this.#f.browserElesStack.push(s):"xml"===l?this.#f.cheerioElesStack.push(s):(0,import_utils11.unreachable)(l),this.#f.loopsStack.push(s);const i=this.#Pr(t,"action");if(await this.#Va(i),this.#f.loopsStack.pop(),"browser"===l?this.#f.browserElesStack.pop():"xml"===l?this.#f.cheerioElesStack.pop():(0,import_utils11.unreachable)(l),h++,this.#f.continueFlag&&(this.#f.continueFlag=!1),this.#f.breakFlag){this.#f.breakFlag=!1;break}}return!0}async#hr(t){this.#Or(t);let e=this.#br(t,"split");const r=this.#Dr(t,"trim"),a=this.#br(t,"errname"),s=this.#br(t,"list"),i=this.#br(t,"requrl"),n=this.#Dr(t,"setprocessed"),o=this.#Dr(t,"skipprocessed"),c=this.#br(t,"subkeys"),l=this.#Dr(t,"arrayinrec"),p=this.#ga(c),g=this.#br(t,"varname"),h=this.#br(t,"idxname"),u=this.#br(t,"setkeys"),d=h.endsWith("0");let f=[];if("array"===e){const t=(0,import_utils11.getJsonParseOfStr)(s);if(Array.isArray(t)&&t.length>0)f=t.map(t=>getSubkeysStrOfObject(t,p));else{if(Array.isArray(t)||!(p.length>0))return this.#_r(a,"actionLoopineles","array"),!1;{const e=(0,import_utils11.getMemberOfObject)(t,p);if(!(Array.isArray(e)&&e.length>0))return this.#_r(a,"actionLoopineles","array"),!1;f=e.map(t=>(0,import_utils11.getStringOfObj)(t))}}}else if(isDataTableName(s)){if(f=this.#Ta(s,i,n,o,p,l,!1,a),!Array.isArray(f))return this.#_r(a,"actionLoopineles","tabname"),!1}else{let t;try{t=new RegExp(e)}catch(e){throw new Error(`##te Invalid regexp: ${t}`)}f=r?s.trim().split(t).map(t=>t.trim()).filter(t=>t.length>0):s.split(t),p.length>0&&(f=f.map(t=>getSubkeysStrOfObject((0,import_utils11.getJsonParseOfStr)(t),p)))}let m=this.#Lr(this.#br(t,"maxloops"),"round");m>0&&f.length>m&&(f=f.slice(0,m)),f.length<1&&this.#_r(a,"actionLoopinstr","zeroLoops");for(let[e,r]of f.entries()){this.#f.loopsStack.push(r),g&&this.#Ar(g,r),h&&this.#Ar(h,String(d?e:e+1)),u&&this.#ha(r,u,!0);const a=this.#Pr(t,"action");if(await this.#Va(a),this.#f.loopsStack.pop(),this.#f.continueFlag&&(this.#f.continueFlag=!1),this.#f.breakFlag){this.#f.breakFlag=!1;break}}return!0}async#lr(t){this.#Or(t);const e=this.#br(t,"subtype"),r=this.#Dr(t,"iswhile"),a=this.#br(t,"varname"),s="element"===e&&this.#Dr(t,"click"),i=(this.#Dr(t,"navigate"),"element"===e&&this.#Dr(t,"gen")),n="element"===e&&this.#Dr(t,"cap"),o=s?this.#br(t,"errname"):"ignore",c=s?this.#br(t,"wait"):"-1";let l=this.#Lr(this.#br(t,"maxloops"),"round");if(l<0)return!1;let{content:p,elements:g}=await this.#_a(e,t),h=0;for(;0===h&&!r||this.#Mr(p);){a&&this.#Ar(a,String(h)),"element"!==e||!s||this.#Re.includes("click")||this.#Re.includes("operate")||(g.length<=0?this.#_r(o,"actionLoopdowhile","noElements"):(await g[0].click(),this.#Ur(t,i,n))),this.#f.loopsStack.push(h);const r=this.#Pr(t,"action");if(await this.#Va(r),this.#f.loopsStack.pop(),this.#f.continueFlag&&(this.#f.continueFlag=!1),this.#f.breakFlag){this.#f.breakFlag=!1;break}if(await this.#qr(c),h++,l&&h>=l)break;let u=await this.#_a(e,t);p=u.content,g=u.elements}return!0}async#Ga(t){const e=this.#br(t,"cookies"),r=this.#br(t,"localstorage"),a=this.#br(t,"headers"),s=this.#br(t,"userdata"),i=this.#br(t,"duration"),{cookies:n,origins:o,userData:c}=this.#f.origStateData,l={cookies:[],origins:[],headers:{},userData:{}};let p;if("orig"===e)l.cookies=n;else if("new"===e)if(this.#f.page)l.cookies=await this.#f.page.cookies();else{if(!this.#f.standaloneApiContext)throw new Error(`##templ ${this.#m} has no page when getting stateData of page`);p||(p=await this.#f.standaloneApiContext.stateData()),l.cookies=p.cookies}if("orig"===r)l.origins=o;else if("new"===r)if(this.#f.page)l.origins=await this.#f.page.localStroage();else{if(!this.#f.standaloneApiContext)throw new Error(`##templ ${this.#m} has no page when getting stateData of page`);p||(p=await this.#f.standaloneApiContext.stateData()),l.origins=p.origins}const g=this.#Je;g[a]&&(l.headers=Object.assign({},g[a])),"orig"===s?l.userData=c:"new"===s&&(l.userData=Object.assign({},this.#qe.userData)),i&&(l.expireTime=(0,import_utils11.getCurrentUnixTime)()+parseInt(i)),this.#f.newStateData=l}async _performGetstatedataInMisc(t){return await this.#Ga(t)}async#ur(t){const e=this.#f.page;if(!e)return this.#_r("cfginvalid","actionScroll","noPage"),!1;this.#Or(t);const r=this.#br(t,"subtype");let a=["by","to"].includes(r)?parseInt(this.#br(t,"height")):0;const s=["by","to"].includes(r)?this.#br(t,"unit"):"none";let i=0,n="";"bodypct"===s?(n=await e.windowMember(["document","body","scrollHeight"]),i=parseInt(n)):"screenpct"===s?n=await e.windowMember(["screen","height"]):"windowpct"===s&&(n=await e.windowMember(["innerHeight"]));const o=n?parseInt(n):1;if(["bodypct","screenpct","windowpct"].includes(s)){if("number"!=typeof o||o<=0)throw new Error("##te invalid unitInt in performScrollAction");a=Math.floor(a*o/100)}let c="by"===r?parseInt(this.#br(t,"maxtimes")):0;const l="by"===r?parseInt(this.#br(t,"interval")):0;if("by"===r){if(0===c){if(i<=0){const t=await e.windowMember(["document","body","scrollHeight"]);i=parseInt(t)}c=Math.ceil(i/a-1)}else c>200?c=200:c<0&&(c=10);for(let r=0;r<c;r++){await e.scrollBy(0,a),await(0,import_utils11.sleep)(l);const r=this.#Pr(t,"element");if(r&&r.length>0){const{elementSource:t,elements:e}=await this.#ya(r,1);if(this.#Wr(t,"scrollBy"),e.length>0)break}}}else if("to"===r)await e.scrollTo(0,a);else if("intoview"===r){const e=this.#Pr(t,"element",!0),{elementSource:r,elements:a}=await this.#ya(e,1);if(this.#Wr(r,"scrollIntoView"),a.length<=0){const e=this.#br(t,"errname");return this.#_r(e,"actionScrollIntoview","noElements"),!1}await a[0].scrollIntoView()}return this.#Ur(t),!0}async#za(t,e,r,a,s=1){if(t.length<=0)throw new Error("##te No element cfg in select action");const{elementSource:i,elements:n}=await this.#ya(t,s);if(this.#Wr(i,"select"),n.length<=0)return this.#_r(a,"actionSelect","noElements"),!1;const o={type:"value"},c=r.split(",");return"index"===e?(o.type,o.indexes=c.map(t=>parseInt(t))):"label"===e?(o.type,o.labels=c):"value"===e?(o.type,o.values=c):(0,import_utils11.unreachable)(e),await n[0].select(o),!0}async#dr(t){const e=this.#f.page;if(!e)return this.#_r("cfginvalid","actionSelect","noPage"),!1;e.title,this.#Or(t);const r=this.#br(t,"selecttype"),a=this.#br(t,"selectval"),s=parseInt(this.#br(t,"try")),i=this.#br(t,"errname"),n=this.#Pr(t,"element",!0);await this.#za(n,r,a,i,s);const o=this.#br(t,"wait");return await this.#qr(o),this.#Ur(t),!0}async#ea(t,e,r){try{let a=JSON.parse(t);if(!a||"object"!=typeof a)return null;for(const t of e){const e=this.#br(t,"key");let s=this.#br(t,"value");"__this__"!==s&&"__self__"!==s||(s=JSON.stringify(a));const i=this.#br(t,"datatype"),n=this.#br(t,"operate"),o=this.#br(t,"varname");if("delete"===n){delete a[e];continue}if(("push"===n||"unshift"===n)&&!Array.isArray(a))return null;const c=this.#Rr(t,"transform");c&&(s=await this.#ba(c,s)),o&&(o===r?a=JSON.parse(s):this.#Ar(o,s));const l=this.#Zr(s,i);"set"===n?a[e]=l:"push"===n?a.push(l):"unshift"===n?a.unshift(l):"discard"===n||(0,import_utils11.unreachable)(n)}return logerr("##tmp data: ",a),a}catch(t){return null}}async#fr(t){this.#Or(t);const e=this.#br(t,"subtype"),r=e.slice(0,1).toUpperCase()+e.slice(1),a=this.#br(t,"varname"),s=this.#br(t,"setkeys"),i=this.#br(t,"errname"),n=this.#br(t,"valerrname"),o=this.#br(t,"pattern"),c=this.#br(t,"defaultval");let l=this.#br(t,"path"),p="";try{if(["element","get","templstr","subtask","ocr"].includes(e)){"templstr"===e&&this.#Ge();p=(await this.#_a(e,t)).content}else if("object"===e){this.#Ge();const e=this.#br(t,"data"),r=this.#Pr(t,"object",!0),s=await this.#ea(e,r,a);p=s?JSON.stringify(s):c}else if("dbquery"===e)p=await this.__processDbquery(t,c);else{if("file"!==e)throw new Error(`##te Invalid subtupe ${e} in setvar action`);{const e=this.#Fr(t,"file");let a=this.#br(e,"path");const s=this.#br(e,"encoding");a.includes("..")&&this.#_r("cfginvalid",`actionSetvar${r}`,"invalidSourceFilename"),path5.isAbsolute(a)?appConfig.cfg.inputFileDirPart&&!path5.dirname(a).split(path5.sep).includes(appConfig.cfg.inputFileDirPart)&&"ignore"===i&&this.#_r("normal",`actionSetvar${r}`,"notSecurePath"):a=path5.join(appConfig.cfg.baseFileDir,a),p=fs6.readFileSync(a,{encoding:s})}}if("ignore"!==n&&o){const e=this.#br(t,"flags"),a=this.#na(o,e);a&&!p.match(a)&&this.#_r(n,`actionSetvar${r}`,"validate")}return!p&&c&&(p=c),a&&this.#Ar(a,p),s&&p&&this.#ha(p,s,!0),l&&(l=this.#ca(l),fs6.writeFileSync(l,p)),!0}catch(t){return loginfo(t),t.message.includes("invalidTaskParas")?(this.#_r("parasinvalid","actionSetvar","invalidParasstr"),!1):(p="",this.#_r(i,`actionSetvar${r}`,"psaException"),!1)}finally{this.#ze()}}async#mr(t){this.#Or(t);const e=this.#br(t,"subtasks"),r=this.#Dr(t,"sameasparent");if(e&&e.startsWith("[{"))try{const t=JSON.parse(e);if(Array.isArray(t)&&t.every(t=>t.tid>0&&"string"==typeof t.parasstr))for(const e of t){if(this.#f.subtasks.find(t=>t.tid===e.tid&&t.parasstr===e.parasstr)||e.minlen>0&&e.parasstr.length<e.minlen)continue;const t={tid:e.tid,parasstr:e.parasstr};e.idx>0&&(t.idx=e.idx),r&&(t.sapFlag=!0),this.#f.subtasks.push(t)}else t.length>=1&&("string"==typeof t[0].parasstr&&"number"==typeof t[0].tid||logerr(`##te invalid subtask: ${JSON.stringify(t[0])} in performSubtaskAction`))}catch(t){logerr(t)}const a=this.#Pr(t,"subtask");for(const t of a){const e=parseInt(this.#br(t,"tid")),a=parseInt(this.#br(t,"minlen")),s=this.#br(t,"parasstr"),i=this.#br(t,"idx").trim(),n=i.length>0&&i.match(/^[0-9]+$/)?parseInt(i):0,o=this.#br(t,"errname"),c=this.#Dr(t,"popuppage");if(c&&!this.#f.popupPage){const t="ignore"===o?"cfginvalid":o;this.#_r(t,"actionSubtask","noPopupPage")}if(s.length>=a)if(c){const t=await this.#wa("popup"),r=await this.#$e(e,s,t,"indSync"),{page:a,standaloneApiContext:i}=t;i&&i.destroy(),this.#f.popupPage=null;const{credits:n,execData:c}=r.taskData;n<-1?this.#_r(o,"actionSubtask","SyncIndepFailed"):(this.#f.subtaskResults.push(r),logdbg(`##te indsyncsubtask t${e} p${s} c${n} data: ${JSON.stringify(c)}`))}else{if(!this.#f.subtasks.find(t=>t.tid===e&&t.parasstr===s)){const t={tid:e,parasstr:s};n>0&&(t.idx=n),r&&(t.sapFlag=!0),this.#f.subtasks.push(t)}}}return!0}#Ya(t){if(!this.#Oe)return!0;const e=this.#br(t,"optype"),r=this.#br(t,"tabname");let a=this.#br(t,"prefix");const s=this.#Dr(t,"requestheaders"),i=this.#br(t,"filename"),n=this.#br(t,"fileidx");let o=parseInt(n),c="";if("read"===e||"readwrite"===e){const t=this.#f.execData[r];if((!Array.isArray(t)||0===t.length)&&(c=this.#la(a,r),c)){let t=(0,import_utils11.getJsonParseOfStr)(c);if(t&&Array.isArray(t[r])&&(t=t[r]),t&&Array.isArray(t)&&(this.#f.execData[r]=t),t.length>0&&s){const e=this.#Je,{requestUrl:r="",requestHeaders:a="",requestData:s=""}=t[t.length-1];e.cachedRequestUrl=r,e.cachedRequestHeaders=a,e.cachedRequestData=s}if(t.length>0&&i){o<0&&(o=t.length+o);const e=t[o];"string"==typeof e?.responseData&&this.#Er(i,e.responseData)}}}if("write"===e||"readwrite"===e){const t=this.#f.execData[r];if(Array.isArray(t)&&t.length>0){const e=this.#la(a,r);c=JSON.stringify(t),e.length===c.length&&e===c||this.#pa(JSON.stringify(t),a,r)}}return!0}#Xa(t){const e=this.#Hr(t),{tabname:r,keys:a,keep:s}=e;this.#zr(r)&&this.#_r("cfginvalid","actionTabname","tabnameDeduplicate");const i=this.#f.execData[r];if(!Array.isArray(i)||0===i.length)return!0;const n=i.length,o="first"===s?0:i.length-1,c=a.split(","),l=new Set,p=[];for(let t=o;t<n&&t>=0;){const e=i[t];if(!e||"object"!=typeof e)continue;const r=c.map(t=>e[t]).join("-");l.has(r)||(p.push(e),l.add(r)),"first"===s?t++:t--}return this.#f.execData[r]=p,!0}#Qa(t){const e=this.#Hr(t),{tabname:r}=e;return delete this.#f.execData[r],delete this.#f.processedExecData[r],!0}async#Za(t){const e=this.#Hr(t),{tabname:r,varname:a,subkeys:s}=e;this.#zr(r)&&this.#_r("cfginvalid","actionTabname","tabnameFilter");const i=this.#f.execData[r];if(!Array.isArray(i)||0===i.length)return!0;const n=[],o=this.#ga(s);for(const e of i){const r=getSubkeysStringOfDataRecord(e,o);this.#Ar(a,r);const s=(await this.#_a("templstr",t)).content;this.#Mr(s)&&n.push(e)}return this.#f.execData[r]=n,!0}async#yr(t){this.#Or(t);const e=this.#Pr(t,"tabname");for(const t of e){const e=this.#br(t,"type");"cache"===e?this.#Ya(t):"deduplicate"===e?this.#Xa(t):"delete"===e?this.#Qa(t):"filter"===e?await this.#Za(t):(0,import_utils11.unreachable)(e)}return!0}async#Cr(t){this.#Or(t);const e=this.#br(t,"subtype"),r=this.#br(t,"errname"),a=this.#br(t,"wait");if("sleep"===e){const e=parseInt(this.#br(t,"minms")),r=parseInt(this.#br(t,"maxms")),s=(0,import_utils11.getRandomInt)(e,r);return await(0,import_utils11.sleep)(s),await this.#qr(a),!0}const s=this.#f.page;if("element"===e){if(!s)return this.#_r("cfginvalid","actionWaitElement","noPage"),!1;const e=this.#Pr(t,"element",!0);e.length<=0&&this.#_r("cfginvalid","actionWaitElement","noElements");const a=this.#br(e[0],"loc"),i=parseInt(this.#br(t,"timeout")),n=this.#br(t,"state");try{await s.waitForElement(a,{timeout:i,state:n})}catch(t){logerr(t),this.#_r(r,"actionWaitElement","pwaException")}}else if("navigation"===e){if(!s)return this.#_r("cfginvalid","actionWaitNavigation","noPage"),!1;const e=parseInt(this.#br(t,"timeout")),a=this.#br(t,"waituntil"),i=this.#br(t,"url");a||this.#_r("cfginvalid","actionWaitNavigation","invlidWaitUntil");try{if(i){const t=new RegExp(i);await s.waitForNavigation({url:t,timeout:e,waitUntil:a})}else await s.waitForNavigation({timeout:e,waitUntil:a})}catch(t){logerr(t),this.#_r(r,"actionWaitNavigation","pwaException")}}else this.#_r("cfginvalid","actionWait","invalidSubtype");return await this.#qr(a),!0}#ts(t,e){return this.#Fe?2===e||3!==e&&(!(!this.#Re.includes("operate")||!appConfig.OPERATE_ACTIONS.includes(t))||!!this.#Re.includes(t)):1===e||this.#Re.includes(t)||this.#Re.includes("operate")&&appConfig.OPERATE_ACTIONS.includes(t)}async#Va(t){if(!Array.isArray(t))throw new Error("##te Ivalid action configs(actions)");for(const e of t)try{const t=this.#br(e,"type"),r=this.#br(e,"id"),a=Number(r);if(this.#ts(t,a))continue;if(await this.#Ve[t].call(this,e),this.#f.continueFlag||this.#f.breakFlag)break}catch(t){throw this.#f.credits>=0&&(loginfo(`##te tId${this.#m}, aCfg: ${JSON.stringify(e).slice(0,200)}`),loginfo(`##te err.stack: ${t.stack}`)),t}}async#es(){try{const t=this.#f.page,e=this.#Te.captchaTypes;t&&e.length>0&&await injectScripts(t,e);const r=this.#Pr(this.#Ee,"action");await this.#Va(r),this.emit(appConfig.EVENT_TYPES.taskComplete,{code:0,message:"ok",data:null})}catch(t){this.emit(appConfig.EVENT_TYPES.taskComplete,{code:1001,message:"failed",data:t})}}#rs(){const t={};for(const[e,r]of Object.entries(this.#qe))"string"==typeof e&&"string"==typeof r&&(t[e]=r);return t}#as(){const t=this.#f.page;if(t){t.on(appConfig.EVENT_TYPES.lsdPageClose,()=>{this.emit(appConfig.EVENT_TYPES.taskComplete,{code:1005,message:"pageClosed",data:null})});const e=this.#xe.maxExecutionDuration;e>0&&setTimeout(()=>this.emit(appConfig.EVENT_TYPES.taskComplete,{code:1009,message:"timeout",data:null}),1e3*e),t.pageInfo().taskId>0&&t.on(appConfig.EVENT_TYPES.lsdPagePopup,async t=>{loginfo("##tmp LsdPage received popup event: ",t),this.emit(appConfig.EVENT_TYPES.lsdScraperPopup,{code:0,message:"ok",data:t})})}}#ss(){const t=this.#f.page;t&&(t.removeAllListeners(appConfig.EVENT_TYPES.lsdPagePopup),t.removeAllListeners(appConfig.EVENT_TYPES.lsdPageClose)),this.removeAllListeners(appConfig.EVENT_TYPES.taskComplete)}async run(){const t=(0,import_utils11.getCurrentUnixTime)(),e={templateId:this.#m,parasStr:this.#Ue,credits:0,execData:{},subtasks:[]},r=this.#f.page;let a;loginfo(r?`##tmp -- start to run tId${this.#m} kId${this.#y} page ${r.id()}`:`##tmp -- start to run tId${this.#m} kId${this.#y} no page`);try{this.#as(),this.#es();const[s]=await(0,import_node_events2.once)(this,appConfig.EVENT_TYPES.taskComplete);if(0===s.code);else if(1001===s.code){if(s.data instanceof Error)throw s.data;logerr(s.data)}else 1005===s.code?this.#_r("other","task","pageClosed"):1009===s.code&&this.#_r("tetimeout","task","teTimeout");r&&this.#Ke!==r.url()&&loginfo(`##te kId${this.#y} endUrl: ${r.url()}`);const i=this.#f.subtasks.length;i>0&&loginfo(`##te kId${this.#y} has ${i} subtasks`);for(let t of Object.keys(this.#f.execData)){const e=this.#f.execData[t].length;loginfo(`##te kId${this.#y} tablename ${t} has ${e}`)}this.#ss(),loginfo(`##tmp teSucceeded kId${this.#y} tId${this.#m} sec ${(0,import_utils11.getCurrentUnixTime)()-t}`),e.execData=this.#f.execData,e.subtasks=this.#f.subtasks,e.credits=this.#f.credits,this.#Oe&&(e.debugFiles=this.#f.debugFiles),this.#f.subtaskResults.length>0&&(a=this.#f.subtaskResults.map(t=>t.taskData)),await this.__whenTaskEndFun(),e.credits<-30&&logwarn(`##te taskId ${this.#y} credits ${e.credits}`);const n={taskData:e,subtaskDatas:a,newStateData:this.#f.newStateData?this.#f.newStateData:void 0};if(this.#Oe){const t={taskId:this.#y,message:"succeeded",stack:"",variables:this.#rs()};n.misc=t}return n}catch(t){e.execData=this.#f.execData,e.subtasks=this.#f.subtasks,e.credits=this.#f.credits,this.#Oe&&(e.debugFiles=this.#f.debugFiles),this.#f.subtaskResults.length>0&&(a=this.#f.subtaskResults.map(t=>t.taskData));const s=this.#f.newStateData?this.#f.newStateData:void 0,i="string"==typeof t?.stack?t.stack:"unkown",n={taskId:this.#y,message:"unknown",stack:i,variables:this.#rs()};if(this.#ss(),await this.__whenTaskEndFun(),this.#f.credits>=0)logerr(`##te Exeception in ScraperTask.run: kId ${this.#y}`),logerr(t);else{if(-1===this.#f.credits)return{taskData:e,subtaskDatas:a,newStateData:s,misc:n};if(this.#f.credits>-30)return{taskData:e,subtaskDatas:a,newStateData:s,misc:n};if(2===this.#y&&"check"===this.#Ue&&r){logdbg(`##cap loginCheckFailed capabilityId ${0} credits: ${this.#f.credits}`)}else 11===this.#y||-69===this.#f.credits||logwarn(`##te taskExec run execption: templateId ${this.#m}, paras ${this.#Ue}, credits ${this.#f.credits}`)}return logwarn(`##tmp taskExec run execption: templateId ${this.#m}, paras ${this.#Ue}, credits ${this.#f.credits}`),e.credits=this.#f.credits>=0?-99:this.#f.credits,{taskData:e,subtaskDatas:a,newStateData:s,misc:n}}}async __performMiscAction(t){this.#Or(t);const e=this.#Pr(t,"misc");if(e.length<=0)return logerr(`##templ ${this.#m} invalid template ${this.#m} in performMiscAction`),!1;for(const t of e){const e=this.#br(t,"type");switch(e){case"delsyncdbdata":case"extractdata":this.#_r("cfginvlid","notSupported",e);break;case"getstatedata":await this.#Ga(t);break;default:(0,import_utils11.unreachable)(e)}}return!0}async __processDbquery(t,e){return(t||e)&&this.#_r("cfginvlid","notSupported","dbquery"),""}async __processBrowserOcrCfg(t,e){return(t||e)&&this.#_r("cfginvlid","notSupported","ocr"),""}async __decodeFontInContent(t,e,r){return(t||e||r)&&this.#_r("cfginvlid","notSupported","decodeFont"),""}async __whenTaskEndFun(){return!0}},path6=__toESM(require("path"),1),fsp2=__toESM(require("fs/promises"),1),import_utils12=require("@letsscrapedata/utils");async function moveDataFiles(){try{const t=appConfig.cfg.exportsDir;if(!t||!(0,import_utils12.isDirectory)(t))return!1;const e=await(0,import_utils12.filesInDir)(t,"general","dat_");if(0===e.length)return!0;const r=(0,import_utils12.getLocalDateNumber)(),a=path6.join(t,String(r));await(0,import_utils12.fsCheckOrCreateDir)(a,!0,!0);for(const r of e){const e=path6.join(t,r),s=path6.join(a,r);await fsp2.rename(e,s)}return!0}catch(t){return logerr(t),!1}}async function writeDataIntoOneFile(t,e,r){if(e.length<=0)return!1;const a=appConfig.cfg.dataFileFormat;if("jsonl"!==a&&!await(0,import_utils12.isFile)(t)){const a=Array.from(Object.keys(e[0]));await fsp2.writeFile(t,a.join(r).concat("\n"))}const s="jsonl"===a?e.map(t=>JSON.stringify(t)).join("\n"):e.map(t=>Object.values(t).join(r)).join("\n");return await fsp2.appendFile(t,s.concat("\n")),!0}async function saveExecDataOfTask(t){try{const{exportsDir:e,dataFileFormat:r,columnSeperator:a}=appConfig.cfg;if(!(e&&(0,import_utils12.isDirectory)(e)&&r&&a))return!1;for(const[s,i]of Object.entries(t)){const t=path6.join(e,`${s}.${r}`);await writeDataIntoOneFile(t,i,a)}return!0}catch(t){return logerr(t),!1}}async function performOneTask(t,e,r,a="indAsync",s="",i=0){try{const n=await TemplateManagerInScraper.getTemplateConfig(t,s),{template:o,actionConfigs:c,fontsConfig:l,templScripts:p,paraCfgs:g,attrsInXml:h,captchaTypes:u,secureDataFlag:d}=n,f={template:o,actionConfigs:c,fontsConfig:l,templScripts:p},{skipActions:m="",extractColumns:y="",defaultParasStr:C}=h||{},v=e||(appConfig.cfg.useParasstrInXmlIfNeeded&&C?C:""),b=TaskParser.getInParas(v,g),w=1===i&&h?{skipActions:m?m.split(","):[],extractColumns:y?y.split(","):[]}:{};w.secureDataFlag=d,w.captchaOptions={captchaTypes:u};const S=new TaskScraper(f,b,r,w),k=await S.run(),_=k.taskData.execData;for(const t of Object.keys(_))t.startsWith("dat_0000000000006")&&delete _[t];if("indSync"===a||"indAsync"===a)if(k.taskData.credits>=-1)loginfo(`Task are completed: templateId ${t}, parasStr ${e}`),await saveExecDataOfTask(k.taskData.execData);else if("indSync"===a){const r={dat_0000000000000001:[{c01:String(t),c02:e,c03:String(k.taskData.credits),c04:(0,import_utils13.getLocalDateString)()}]};await saveExecDataOfTask(r)}return k}catch(r){const s={taskId:0,message:r.message,stack:r.stack,variables:{}};if("indSync"===a){const r={dat_0000000000000001:[{c01:String(t),c02:e,c03:"-1",c04:(0,import_utils13.getLocalDateString)()}]};await saveExecDataOfTask(r)}return{taskData:{templateId:t,parasStr:e,credits:0,execData:{},subtasks:[]},subtaskDatas:[],misc:s}}}appConfig.performOneTask=performOneTask;var path8=__toESM(require("path"),1),import_utils14=require("@letsscrapedata/utils"),import_controller4=require("@letsscrapedata/controller"),BrowserManagerInScraper=class{#is;#ns;#os;#cs;#ls(t){const e=this.#is.templateParas.find(e=>e.templateId===t);return e?.maxConncurrency?e.maxConncurrency:this.#is.maxConcurrency}async#ps(t,e){const r=await import_controller4.controller.newApiContext({proxy:e}),a="playwright"===t.browser().browserControllerType()?t.apiContext():null;this.#cs.push({proxy:e,browserContext:t,browserApiContext:a,standaloneApiContext:r,templateMap:new Map})}constructor(){const{useStealthPlugin:t,browserControllerType:e,browserType:r,lsdLaunchOptions:a,lsdConnectOptions:s,maxConcurrency:i,templateParas:n}=appConfig.cfg,o=Array.isArray(appConfig.cfg.browserConfigs)&&appConfig.cfg.browserConfigs.length>0?appConfig.cfg.browserConfigs:[{browserControllerType:e,browserType:r,proxyUrl:""}];this.#is={useStealthPlugin:t,browserControllerType:e,browserType:r,lsdLaunchOptions:a,lsdConnectOptions:s,browserConfigs:o,maxConcurrency:i,templateParas:n},this.#ns=import_controller4.controller,["playwright","puppeteer"].includes(e),this.#os=[],this.#cs=[]}async init(){const{browserControllerType:t,browserType:e,lsdLaunchOptions:r,lsdConnectOptions:a}=this.#is;for(const s of this.#is.browserConfigs){const{browserControllerType:i=t,browserType:n=e,browserUrl:o,proxyUrl:c=""}=s,l=this.#gs(c);if(o){const t=Object.assign({},a,{browserUrl:o}),e=await this.#ns.connect(i,n,t);this.#os.push(e);for(const t of e.browserContexts())await this.#ps(t,l)}else if("string"==typeof c){const t=c?l:void 0,e=Object.assign({},r,{proxy:t}),a=await this.#ns.launch(i,n,e);this.#os.push(a);for(const t of a.browserContexts())await this.#ps(t,l)}}return await(0,import_utils14.sleep)(2e3),!0}#gs(t,e="",r="",a=""){return{proxyUrl:t,proxyId:e||t,username:r,password:a}}async getTaskNetworkContext(t,e=0){if(0===this.#cs.length)throw new Error("please call init() first to launch or connect browsers.");let r;const a=(0,import_utils14.getRandomArrayIdx)(this.#cs.length);for(const s of a){const a=this.#cs[s],{proxy:i,browserContext:n,browserApiContext:o,standaloneApiContext:c,templateMap:l}=a;if(e>0&&(r=l.get(e),r||(r={templateId:e,maxConcurrency:this.#ls(e),running:0},l.set(e,r)),r.maxConcurrency<=r.running))continue;if(!n.hasFreePage())continue;const p=await n.getPage();return p?(e>0&&r&&r.running++,p.setPageInfo({taskId:t,relatedId:e}),{proxy:i,page:p,browserApiContext:o,standaloneApiContext:c}):null}return null}async freePage(t){const e=t.pageInfo(),{taskId:r,relatedId:a}=e;if(a>0){const e=t.browserContext().id(),r=this.#cs.find(t=>t.browserContext.id()===e);if(!r)throw new Error("No browserContext has the page to free.");const s=r.templateMap.get(a);if(!s)throw new Error(`No templateMapInfo has templateId ${a} in ${e}.`);s.running--}if(await t.free(),t.setPageInfo({taskId:0,relatedId:0,misc:{}}),r>0){const e=t.browserContext().pages();for(const t of e)t.pageInfo().relatedId===r&&(await t.free(),t.setPageInfo({taskId:0,relatedId:0,misc:{}}))}return!0}},fsp3=__toESM(require("fs/promises"),1),path7=__toESM(require("path"),1),import_utils15=require("@letsscrapedata/utils"),SchedulerInScraper=class t{#hs;#us;#ds;#fs;runningTaskSet;static#ms=101;static#ys="\n";static#Cs=!1;constructor(t){this.#hs=new Map,this.#us=appConfig.cfg.taskDir,this.#ds=appConfig.cfg.exitWhenCompleted,this.#fs=t,this.runningTaskSet=new Set}async#vs(e,r=!1){try{const a=(await fsp3.readFile(e,"utf8")).split(t.#ys),s=new Set(a);return s.size>1&&s.has("")&&s.delete(""),r&&await fsp3.unlink(e),Array.from(s.values())}catch(t){return[]}}static#bs=new Map;async#ws(e,r,a=!1){if(t.#bs.get(r)){for(let e=0;e<50&&(await(0,import_utils15.sleep)(200),t.#bs.get(r));e++);if(t.#bs.get(r))return!1}t.#bs.set(r,!0);try{if(a){const a=path7.join(this.#us,`failedtempl${r}.txt`);return await fsp3.appendFile(a,e.join(t.#ys).concat(t.#ys)),!0}{const a=path7.join(this.#us,`tid${r}.txt`);return e.length>0?await fsp3.writeFile(a,e.join(t.#ys)):await(0,import_utils15.isFile)(a)&&await fsp3.unlink(a),t.#bs.delete(r),!0}}catch(e){return logwarn(`Failed to write task queue of tempatedId ${r} into file`),t.#bs.delete(r),!1}}async#Ss(){const t=appConfig.cfg.taskDir;if(!t||!(0,import_utils15.isDirectory)(t))return!1;const e=await(0,import_utils15.filesInDir)(t,"general","failedtempl","txt");for(const r of e){const e=parseInt(r.slice(11,-4)),a=await this.#vs(path7.join(t,r),!0);if(a.length>0){loginfo(`load unfinished ${a.length} tasks of templateId ${e}`);const t=this.#hs.get(e);t?a.forEach(e=>t.push(e)):this.#hs.set(e,a)}}return!0}async#ks(t=!1){const e=appConfig.cfg.taskDir;if(!e||!(0,import_utils15.isDirectory)(e))return!1;const r=await(0,import_utils15.filesInDir)(e,"general","templ","txt");for(const t of r){const r=parseInt(t.slice(5,-4)),a=await this.#vs(path7.join(e,t));if(a.length>0){loginfo(`load unfinished ${a.length} tasks of templateId ${r}`);const t=this.#hs.get(r);t?a.forEach(e=>t.push(e)):this.#hs.set(r,a)}}return t&&await this.#Ss(),!0}async addNewTask(t,e){const{tid:r,parasstrs:a}=t;if(r<=0||0===a.length)return!1;let s=this.#hs.get(r);return s||(s=[],this.#hs.set(r,s)),a.forEach(t=>{s.includes(t)||s.push(t)}),await this.#ws(s,r),e&&await this.tryToExecuteTasks([r]),!0}async init(t=[]){appConfig.cfg.moveDataWhenStart&&await moveDataFiles();const e=appConfig.cfg.loadFailedTasksInterval>0;appConfig.cfg.loadUnfinishedTasks&&await this.#ks(e);for(const e of t){const{tid:t,parasstrs:r}=e;this.addNewTask({tid:t,parasstrs:r},!1)}return await this.tryToExecuteTasks(),setInterval(this.tryToExecuteTasks.bind(this),6e4),e&&setInterval(this.#Ss.bind(this),6e4*appConfig.cfg.loadFailedTasksInterval),!0}#_s(t,e){return`${t}@@${e}`}async#xs(t,e,r){const a=await performOneTask(t,e,r,"indAsync","",0),{credits:s,subtasks:i}=a.taskData;let n=new Set;const o=this.#hs.get(t);if(o){const r=o.findIndex(t=>t===e);if(r<0?logerr(`Task queue of templateId ${t} has no parasStr: ${e}`):o.splice(r,1),s>=-1){if(0===o.length&&this.#hs.delete(t),i.length>0){n=new Set(i.map(t=>t.tid));for(const t of n){const e=i.filter(e=>e.tid===t).map(t=>t.parasstr);await this.addNewTask({tid:t,parasstrs:e},!1)}}await this.#ws(o,t)}else await this.#ws([e],t,!0);this.runningTaskSet.delete(this.#_s(t,e))}else logerr(`No task queue of templateId ${t}`);return r.page&&await this.#fs.freePage(r.page),appConfig.cfg.minMiliseconds>0&&await(0,import_utils15.sleep)(appConfig.cfg.minMiliseconds),await this.tryToExecuteTasks([t],1),n.size>0&&await this.tryToExecuteTasks(),!0}async tryToExecuteTasks(e=[],r=0){if(loginfo(`---- tryToExecuteTasks templateIds ${e.join(",")} : `,this.#hs),t.#Cs)return logdbg("---- another tryToExecuteTasks is running now"),!0;this.#ds&&0===this.#hs.size&&process.exit(0),t.#Cs=!0;try{let a=0;0===e.length&&(e=Array.from(this.#hs.keys())),logdbg(`templateIds: ${e.join(",")}`);for(const s of e){const e=this.#hs.get(s);if(!e)break;const i=e.length;for(let n=0;n<i;n++){const i=e[n],o=this.#_s(s,i);if(this.runningTaskSet.has(o))continue;const c=await this.#fs.getTaskNetworkContext(t.#ms++,s);if(!c){logdbg(`No page to execute ${o}`);break}if(this.runningTaskSet.add(o),this.#xs(s,i,c),a++,r>0&&a>=r)return t.#Cs=!1,!0}}return t.#Cs=!1,!0}catch(e){return logdbg(e),t.#Cs=!1,!1}}},import_utils17=require("@letsscrapedata/utils"),import_events=__toESM(require("events"),1),import_utils16=require("@letsscrapedata/utils"),TwoCaptcha=class{#Es;#As;#Is;#Os;#Ts;#Ds;#Ps;async#Ns(t,e,r="POST"){try{const a={method:r,headers:{"Content-Type":"application/json"},body:JSON.stringify(e)},s=await fetch(t,a);if(!s.ok)return logerr(`##captcha failed to fetch, url ${t}`),null;return await s.json()}catch(t){return logerr(t),null}}async#Rs(t){const e={clientKey:this.#Es,task:t,softId:0};"string"==typeof t.lang&&t.lang&&(e.languagePool=t.lang,delete t.lang);const r=await this.#Ns("https://api.2captcha.com/createTask",e);return 10===r.errorId?this.setStatus("nobalance"):[11,21,55].includes(r.errorId)&&this.setStatus("disabled"),r}async#Fs(t){const e={clientKey:this.#Es,taskId:t};return await this.#Ns("https://api.2captcha.com/getTaskResult",e)}async#js(){const t={clientKey:this.#Es},e=await this.#Ns("https://api.2captcha.com/getBalance",t);return e?.balance>=0?e.balance:-1}#$s(t){return`event${t}`}#Ls(t){return 5e3}async#Ms(t,e){const r={errorCode:"SUCCEEDED",taskId:0,cost:0,ip:"",createTime:(0,import_utils16.getCurrentUnixTime)(),endTime:0,solveCount:0},{errorId:a,taskId:s}=await this.#Rs(t);if(a>0||s<=0)return r.errorCode="ERROR_OTHER",s>0&&(r.taskId=s),r;r.taskId=s;const i=this.#$s(s);await(0,import_utils16.sleep)(this.#Ls(e));let n=0;this.#Ts||(n=setInterval(async()=>{const t=await this.#Fs(s);0!==t?.errorId?this.#Ps.emit(i,{code:1001,message:"failed",data:t}):0===t.errorId&&"ready"===t.status&&this.#Ps.emit(i,{code:0,message:"succeeded",data:t})},this.#Is)),setTimeout(()=>this.#Ps.emit(i,{code:1009,message:"timeout",data:null}),this.#Os);const[o]=await(0,import_events.once)(this.#Ps,i);n&&clearInterval(n),r.endTime=(0,import_utils16.getCurrentUnixTime)();const{code:c,data:l}=o;if(0===c){if(!l||0!==l.errorId)throw new Error("##captcha invalid data in getResult");const{cost:t,ip:e,createTime:a,endTime:s,solveCount:i,solution:n}=l;t&&(r.cost=Number(t)),e&&(r.ip=e),a&&a>0&&(a-r.createTime>5&&loginfo("##captcha task createTime difference: "+(a-r.createTime)),r.createTime=a),s&&s>0&&(r.endTime-s>2*this.#Is&&loginfo("##captcha task endTime difference: "+(r.endTime-s)),r.endTime=s),i&&i>0&&(r.solveCount=i),n&&(r.solution=n)}else if(1001===c)r.errorCode=l?.errorCode?l.errorCode:"ERROR_OTHER";else{if(1009!==c)throw new Error(`##captcha unreachable at ${(new Error).stack}`);r.errorCode="ERROR_TIMEOUT"}return r}#qs(t,e,r){let a=r?e:`${e}Proxyless`;return r?Object.assign({},t,{type:a},r):Object.assign({},t,{type:a})}#Us(t,e){const{version:r,websiteURL:a,gt:s,challenge:i,geetestApiServerSubdomain:n,userAgent:o,captchaId:c}=t,l="GeeTestTask",p={type:e?l:`${l}Proxyless`,version:r,websiteURL:a};return s&&(p.gt=s),i&&(p.challenge=i),n&&(p.geetestApiServerSubdomainapiDomain=n),c&&(p.initParameters={captcha_id:c}),o&&(p.userAgent=o),p}#Js(t,e){const{version:r,websiteKey:a,websiteURL:s,isEnterprise:i,isInvisible:n,s:o,action:c,minScore:l,userAgent:p,cookies:g,apiDomain:h}=t;let u="RecaptchaV3TaskProxyless";if(2===r){const t=i?"RecaptchaV2EnterpriseTask":"RecaptchaV2Task";u=e?t:`${t}Proxyless`}const d={type:u,websiteURL:s,websiteKey:a};return h&&(d.apiDomain=h),d.isInvisible=n,o&&(i?d.enterprisePayload=o:d.recaptchaDataSValue=o),p&&(d.userAgent=p),g&&(d.cookies=g),d.isEnterprise=i,l&&(d.minScore=l),c&&(d.pageAction=c),d}#Hs(t,e){const r="TurnstileTask";let a=e?r:`${r}Proxyless`;const{websiteKey:s,websiteURL:i,action:n,cData:o,chlPageData:c}=t;return n?{type:a,websiteKey:s,websiteURL:i,action:n,data:o,pagedata:c}:{type:a,websiteKey:s,websiteURL:i}}#Bs(t){const{images:e,comment:r,lang:a,math:s=!1,maxLength:i=0,minLength:n=0,question:o=!1,space:c=!1,textType:l="any"}=t;if(o)return{type:"TextCaptchaTask",comment:r,lang:a};{let o=0;"numbers"===l?o=1:"letters"===l&&(o=2);const p={type:"ImageToTextTask",body:e[0].toString("base64"),case:!!t.case,comment:r,math:s,maxLength:i,minLength:n,numeric:o,phrase:c,lang:a};return e.length>1&&(p.imgInstructions=e[1].toString("base64")),p}}#Vs(t){const{images:e,comment:r,lang:a,maxClicks:s=0,minClicks:i=1}=t,n={type:"CoordinatesTask",body:e[0].toString("base64"),comment:r,lang:a,minClicks:i};return s>0&&s>=i&&(n.maxClicks=s),e.length>1&&(n.imgInstructions=e[1].toString("base64")),n}constructor(t){const{clientKey:e,callbackUrl:r="",pollingInterval:a=5e3,timeout:s=15e4}=t;if(!e)throw new Error("Invalid options: no clientKey");this.#Es=e,this.#As="normal",this.#Is=a>=2e3?a:2e3,this.#Os=s>=3e4?s:3e4,this.#Ts=r||"",r&&loginfo(this.#Ts),this.#Ds=["amazon","funcaptcha","geetest","keycaptcha","mtcaptcha","recaptcha","turnstile","text","coordinate","grid","slider","rotation"],this.#Ps=new import_events.default}canSolveCaptcha(t){return this.#Ds.includes(t)}async getBalance(){return await this.#js()}name(){return"2captcha"}sendResult(t){if(!t||"object"!=typeof t)return!1;const{taskId:e,errorId:r}=t;if(e>0){const e=this.#$s(t.taskId);return 0===r?this.#Ps.emit(e,{code:0,message:"succeeded",data:t}):0===r&&this.#Ps.emit(e,{code:1001,message:"failed",data:t}),!0}return!1}status(){return this.#As}setStatus(t){switch(t){case"normal":case"disabled":case"nobalance":this.#As=t;break;default:(0,import_utils16.unreachable)(t)}return!0}async amazon(t,e){return await this.#Ms(this.#qs(t,"AmazonTask",e),"amazon")}async funcaptcha(t,e){return await this.#Ms(this.#qs(t,"FunCaptchaTask",e),"funcaptcha")}async geetest(t,e){return await this.#Ms(this.#Us(t,e),"geetest")}async keycaptcha(t,e){return await this.#Ms(this.#qs(t,"KeyCaptchaTask",e),"keycaptcha")}async mtcaptcha(t,e){return await this.#Ms(this.#qs(t,"MtCaptchaTask",e),"mtcaptcha")}async recaptcha(t,e){return await this.#Ms(this.#Js(t,e),"recaptcha")}async turnstile(t,e){return await this.#Ms(this.#Hs(t,e),"turnstile")}async text(t){return await this.#Ms(this.#Bs(t),"text")}async coordinate(t){return await this.#Ms(this.#Vs(t),"coordinate")}async grid(t){return await this.#Ms(this.#qs(t,"TextTask"),"text")}async slider(t){return await this.#Ms(this.#qs(t,"TextTask"),"text")}async rotation(t){return await this.#Ms(this.#qs(t,"TextTask"),"text")}};async function updateScraperConfig(t){const e=appConfig.cfg,{baseDir:r,inputFileDirPart:a,useStealthPlugin:s,browserControllerType:i,browserType:n,lsdLaunchOptions:o,lsdConnectOptions:c,browserConfigs:l,urlPrefix:p,maxConcurrency:g,readCode:h,templateParas:u,totalMaxConcurrency:d,minMiliseconds:f,exitWhenCompleted:m,useParasstrInXmlIfNeeded:y,loadUnfinishedTasks:C,loadFailedTasksInterval:v,moveDataWhenStart:b,dataFileFormat:w,columnSeperator:S}=t;if(r)e.baseDir=r;else{const t=process.cwd();e.baseDir=path8.join(t,"scraperdata")}if(await(0,import_utils17.fsCheckOrCreateDir)(e.baseDir,!0,!0),e.baseDownloadDir=path8.join(e.baseDir,"downloads"),await(0,import_utils17.fsCheckOrCreateDir)(e.baseDownloadDir,!0,!0),e.baseFileDir=path8.join(e.baseDir,"files"),await(0,import_utils17.fsCheckOrCreateDir)(e.baseFileDir,!0,!0),t.templateDir?e.templateDir=t.templateDir:e.templateDir=path8.join(e.baseDir,"template"),await(0,import_utils17.fsCheckOrCreateDir)(e.templateDir,!0,!0),e.taskDir=path8.join(e.baseDir,"task"),await(0,import_utils17.fsCheckOrCreateDir)(e.taskDir,!0,!0),e.exportsDir=path8.join(e.baseDir,"exports"),await(0,import_utils17.fsCheckOrCreateDir)(e.exportsDir,!0,!0),a&&(e.inputFileDirPart=a),i&&(e.browserControllerType=i),n&&(e.browserType=n),o&&"object"==typeof o){e.lsdLaunchOptions=Object.assign(e.lsdLaunchOptions,o);const t=e.lsdLaunchOptions.addons;Array.isArray(t)&&t.length>0&&(e.lsdLaunchOptions.addons=t.map(t=>path8.isAbsolute(t)?t:path8.join(process.cwd(),t)))}if(c&&"object"==typeof c&&(e.lsdConnectOptions=Object.assign(e.lsdConnectOptions,c)),l&&(e.browserConfigs=l),p&&(e.urlPrefix=p),g&&(e.maxConcurrency=g),h&&(e.readCode=h),u&&(e.templateParas=u),d&&(e.totalMaxConcurrency=d),"number"==typeof f&&(e.minMiliseconds=f),"boolean"==typeof s&&(e.useStealthPlugin=s),"boolean"==typeof m&&(e.exitWhenCompleted=m),"boolean"==typeof y&&(e.useParasstrInXmlIfNeeded=y),"boolean"==typeof C&&(e.loadUnfinishedTasks=C),"number"==typeof v&&v>=0&&(e.loadFailedTasksInterval=v),"boolean"==typeof b&&(e.moveDataWhenStart=b),w&&(e.dataFileFormat=w),"csv"===e.dataFileFormat?e.columnSeperator=",":"tsv"===e.dataFileFormat?e.columnSeperator="\t":"txt"===e.dataFileFormat&&S&&(e.columnSeperator=S),t.captcha){const{clientKey:r,captchas:a}=t.captcha;"string"==typeof r&&r&&(e.captcha.clientKey=r),Array.isArray(a)&&a.every(t=>t&&"string"==typeof t)&&(e.captcha.captchas=a)}return!0}async function scraper(t=[],e={}){if(await updateScraperConfig(e),appConfig.cfg?.captcha?.clientKey){const t=new TwoCaptcha({clientKey:appConfig.cfg.captcha.clientKey});await addCapatchaProvider(t)}const r=new BrowserManagerInScraper;await r.init();const a=new SchedulerInScraper(r);return await a.init(t),!0}