@letsscrapedata/scraper 0.1.0 → 0.2.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.js CHANGED
@@ -1 +1 @@
1
- import{setControllerLogFun}from"@letsscrapedata/controller";import{setProxyLogFun}from"@letsscrapedata/proxy";import{log,LogLevel,setLogLevel}from"@letsscrapedata/utils";var pkgLog=log;function setScraperLogFun(t){return"function"==typeof t&&(setControllerLogFun(pkgLog=t),setProxyLogFun(pkgLog),!0)}async function logdbg(...t){await pkgLog(LogLevel.DBG,...t)}async function loginfo(...t){await pkgLog(LogLevel.INF,...t)}async function logwarn(...t){await pkgLog(LogLevel.WRN,...t)}async function logerr(...t){await pkgLog(LogLevel.ERR,...t)}setControllerLogFun(pkgLog),setProxyLogFun(pkgLog),setLogLevel(LogLevel.DBG);import{getLocalDateString}from"@letsscrapedata/utils";import xml2js from"xml2js-lsd";var defaultSplitOfParases="[\r\n\t,]+",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:""},templstr:{templ:void 0},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},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,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,completed:!1,setvar:!1,datatype:"string",valerrname:"ignore",pattern:"",flags:"",id:"0",discarded:!1},action_goto:{type:void 0,url:void 0,reuse:!1,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},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:"",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:defaultSplitOfParases,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,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_length:{type:void 0,subtype:void 0},fun_a_mapattr:{type:void 0,subtype:void 0,subkeys:void 0},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_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:defaultSplitOfParases,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:defaultSplitOfParases,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{LsdPageEvent}from"@letsscrapedata/controller";var 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:LsdPageEvent.PAGE_CLOSE,lsdPagePopup: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 n=r;e[a].type&&(n=n+"_"+e[a].type),e[a].subtype&&(n=n+"_"+e[a].subtype);const i=defaultElementCfg[n];if(!i)throw new Error(`##te No default Cfg for eleName ${n} in _applyDefaultElementCfg`);const o=Object.assign({},i);if(Object.keys(i).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 ${n} 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]},n=appConfig.XML_CHILDREN_KEY,i=await xml2js.parseStringPromise(e,s);if(!(i&&i.template&&i.template[n]&&Array.isArray(i.template[n].actions)))throw new Error(`##te Invalid XML config string: ${e}`);return r&&t.#t(i.template,"template"),i.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 n of e)if(n?.[appConfig.XML_ATTR_KEY]?.type===r)a.push(n);else if(n&&n[s]&&(n[s].action||n[s].condition)){t.#r(n[s].action?n[s].action:n[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"),n=[];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&&n.push(e)})}return n}static getInParas(t,e=[],r="::"){const a={},s=t.split("@@"),n=["para","apara","rpara"];for(let t=0;t<3;t++){let i=n[t],o=e.filter(t=>t.paraname.startsWith(i)).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[`${i}${t}`]=e[t-1];for(let t=e.length+1;t<=o;t++)a[`${i}${t}`]=""}}return a}};import*as fs from"fs";import*as path from"path";import{filesInDir,getCurrentUnixTime}from"@letsscrapedata/utils";import ivm from"isolated-vm";import{decodeFromBase64,getJsonParseOfStr}from"@letsscrapedata/utils";var LsdScript=class t{static#a=null;static#s=null;static convertScriptCfg(t){let{name:e,scenario:r,script:a,scripttype:s,base64:n}=t;const i=s.split("-");n&&(a=decodeFromBase64(a,!1));return{name:e,script:a,scenario:r,lang:i[0],env:i[1]}}static#n(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#i(e){return!(!this.#n(e)||!t.#s)&&this.#i(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 ivm.Isolate,a=r.createContextSync(),s=new ivm.ExternalCopy(t);a.global.setSync("inData",s.copyInto());const n=r.compileScriptSync(e).runSync(a);return"string"!=typeof n&&logwarn("Please check the script is correct."),"string"==typeof n?n:""}catch(t){return logerr(t),""}}static async#l(e,r,a,s){const n=await t.#o(r,a);if(!n||n.scenario!==s)return"";return t.#c(e,n.script)}static async execFunScript(e,r,a={}){const s=await t.#l(e,r,a,"fun");return"cfginvalid"===s&&t.#i(r),s}static async execExtractScript(e,r,a={}){const s=await t.#l(e,r,a,"extract");let n=getJsonParseOfStr(s);return n||(n={execData:{},errName:"cfginvalid"}),"cfginvalid"===n.errName&&t.#i(r),n}},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#f(t,e){try{if(!e){if(!appConfig.cfg.templateDir)return null;const r=await 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 n=await s.json();if(!n||0!==n.code||!n.data)return logwarn(`Failed to get template ${e}: ${n.message}`),null;if(n.data.templateId!==e)return logerr(`Different templateId ${e} / ${n.templateId}`),null;const{domainId:i=0,defaultElementSource:o,configDetail:c="",maxExecutionDuration:l}=n.data;if(!c)return logerr(`Invalid content in template ${e}`),null;return{templateId:e,domainId:i,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),n=TaskParser.getPartOfJsonCfg(e,"actions",!1),i=TaskParser.getAttrsInXml(e),o=TaskParser.getCaptchTypes(e),c=getCurrentUnixTime(),l={};s.forEach(t=>{l[t.name]=LsdScript.convertScriptCfg(t)});return{actionConfigs:n,paraCfgs:r,fontsConfig:a||null,templScripts:l,attrsInXml:i,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.#f(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),n=Object.assign({},s,{template:a});return t.#p.set(e,n),n}static clearTemplateConfig(e=0){return e>0?t.#p.delete(e):t.#p.clear(),!0}};import EventEmitter from"events";import{once}from"events";import*as fs6 from"fs";import*as path5 from"path";import{gotScraping}from"got-scraping";import{sleep as sleep3,checkDns,fileExist,fsCheckOrCreateSubdir as fsCheckOrCreateSubdir3,getRandomInt,unreachable as unreachable3,getJsonParseOfStr as getJsonParseOfStr5,getCurrentUnixTime as getCurrentUnixTime2,getMemberOfObject as getMemberOfObject2,getStringOfObj as getStringOfObj3,isDirectorySync,getLocalDateNumber}from"@letsscrapedata/utils";import{CheerioPage,controller}from"@letsscrapedata/controller";import*as uuid from"uuid";var SysParas=class{#u;#m;#y;#C;constructor(t,e,r,a){this.#u=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.#u?.page?this.#u.page.url():""}catch{return""}}get userAgent(){try{return this.#u?.page?.userAgent?this.#u.page.userAgent():""}catch{return""}}get hasPopupPage(){return this.#u?.popupPage?"1":"0"}get subtaskNum(){const t=this.#u?.subtasks;return Array.isArray(t)?String(t.length):"0"}get datatableNum(){const t=this.#u?.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()}};import*as iconv from"iconv-lite";import*as zlib from"zlib";import*as cheerio from"cheerio";import dateFormat from"dateformat";import{getComplementOfTwoArray,getDifferenceOfTwoArray,getIntersectionOfTwoArray,getJsonParseOfStr as getJsonParseOfStr2,getUnionOfTwoArray,LsdUrl,unreachable}from"@letsscrapedata/utils";function findStrInObj(t,e,r="obj",a=!1,s=1){let n,i=[];if(s>20)return[];if(Array.isArray(t))for(let o=0;o<t.length;o++){const c=r?`${r}.${o}`:`${o}`;n=findStrInObj(t[o],e,c,a,s+1),i.push(...n)}else if("object"!=typeof t||t){if("string"==typeof t)(a&&t===e||!a&&t.includes(e))&&i.push([r,t]);else if("number"==typeof t){const s=String(t);(a&&s===e||!a&&s.includes(e))&&i.push([r,t])}}else for(const o in t){const c=r?`${r}.${o}`:`${o}`;n=findStrInObj(t[o],e,c,a,s+1),i.push(...n)}return i}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 n=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`),"";n=a(n,e)}else n=await t.#b(n,e,s)}}catch(t){t.message.includes(" JSON ")||t.message.startsWith("##check")||loginfo(t),n=""}return n||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){const e=typeof t;return"string"===e?t:"undefined"===e?"":JSON.stringify(t)}static#x(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#E(e,r){const{idx:a}=r,s=getJsonParseOfStr2(e);t.#w(s);const n=s.at(parseInt(a));return t.#k(n)}static#A(e,r){const{array2:a}=r,s=getJsonParseOfStr2(e),n=getJsonParseOfStr2(a);t.#w(s,n);let i=s.concat(n);return JSON.stringify(i)}static#I(e,r){const{pattern:a,flags:s}=r,n=getJsonParseOfStr2(e);t.#w(n);const i=new RegExp(a,s);return n.every(t=>"string"==typeof t&&t.match(i))?"1":"0"}static#O(e,r){const{pattern:a,flags:s}=r,n=getJsonParseOfStr2(e);t.#w(n);const i=new RegExp(a,s),o=n.filter(t=>"string"==typeof t&&t.match(i));return JSON.stringify(o)}static#_(e,r){const{pattern:a,flags:s}=r,n=getJsonParseOfStr2(e);t.#w(n);const i=new RegExp(a,s),o=n.find(t=>"string"==typeof t&&t.match(i));return o||""}static#T(e,r){const{pattern:a,flags:s}=r,n=getJsonParseOfStr2(e);t.#w(n);const i=new RegExp(a,s),o=n.findIndex(t=>"string"==typeof t&&t.match(i));return String(o)}static#D(e,r){const{item:a}=r,s=getJsonParseOfStr2(e);return t.#w(s),s.includes(a)?"1":"0"}static#P(e,r){const{item:a,position:s}=r,n=getJsonParseOfStr2(e);return t.#w(n),String(n.indexOf(a,parseInt(s)))}static#N(e,r){const{join:a}=r,s=getJsonParseOfStr2(e);return t.#w(s),s.join(a)}static#R(e){const r=getJsonParseOfStr2(e);return t.#w(r),String(r.length)}static#F(e,r){const{subkeys:a}=r,s=getJsonParseOfStr2(e);t.#w(s);const n=s.map(e=>t.#x(e,a));return JSON.stringify(n)}static#L(e,r){const a=getJsonParseOfStr2(e);t.#w(a);const s=a.map(e=>"string"==typeof e?t.#$(e,r):e);return JSON.stringify(s)}static#j(e){const r=getJsonParseOfStr2(e);t.#w(r);const a=r.map(t=>Number(t));return a.findIndex(t=>Number.isNaN(t))>=0?"":String(Math.max(...a))}static#M(e){const r=getJsonParseOfStr2(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=getJsonParseOfStr2(e);t.#w(r);const a=r.pop();return t.#k(a)}static#J(e,r){const{item:a}=r,s=getJsonParseOfStr2(e);return t.#w(s),s.push(a),JSON.stringify(s)}static#H(e,r){const a=getJsonParseOfStr2(e);t.#w(a);const s=a.map(e=>"string"==typeof e?t.#q(e,r):e);return JSON.stringify(s)}static#B(e,r){const{array2:a}=r,s=getJsonParseOfStr2(e),n=getJsonParseOfStr2(a);t.#w(s,n);let i=getComplementOfTwoArray(s,n);return JSON.stringify(i)}static#V(e,r){const{array2:a}=r,s=getJsonParseOfStr2(e),n=getJsonParseOfStr2(a);t.#w(s,n);let i=getDifferenceOfTwoArray(s,n);return JSON.stringify(i)}static#W(e,r){const{array2:a}=r,s=getJsonParseOfStr2(e),n=getJsonParseOfStr2(a);t.#w(s,n);let i=getIntersectionOfTwoArray(s,n);return JSON.stringify(i)}static#K(e,r){const{array2:a}=r,s=getJsonParseOfStr2(e),n=getJsonParseOfStr2(a);t.#w(s,n);let i=getUnionOfTwoArray(s,n);return JSON.stringify(i)}static#G(e){const r=getJsonParseOfStr2(e);t.#w(r);const a=r.shift();return t.#k(a)}static#z(e){const r=getJsonParseOfStr2(e);t.#w(r);let a=r.sort(()=>Math.random()-.5);return JSON.stringify(a)}static#Y(e,r){const{beginidx:a,len:s,endidx:n}=r,i=parseInt(a);let o="string"==typeof n&&n.length>0?parseInt(n):void 0;const c="string"==typeof s&&s.length>0?parseInt(s):void 0;c&&c>0&&(o=i+c);const l=getJsonParseOfStr2(e);t.#w(l);const p=l.slice(i,o);return JSON.stringify(p)}static#X(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#Q(e,r){const{valtype:a,sorttype:s}=r,n=getJsonParseOfStr2(e);t.#w(n);let i=t.#X(n,a,s);return JSON.stringify(i)}static#Z(e){const r=getJsonParseOfStr2(e);t.#w(r);const a=[...new Set(r)];return JSON.stringify(a)}static#tt(e,r){const{item:a}=r,s=getJsonParseOfStr2(e);return t.#w(s),s.unshift(a),JSON.stringify(s)}static#et(t){return String(Math.ceil(Number(t)))}static#rt(t,e){const{format:r,ms:a}=e;let s=t?parseInt(t):0;a||(s*=1e3);const n=s?new Date(s):new Date;return"toISODate"===r?n.toISOString().slice(0,10):"toISOString"===r?n.toISOString():"toLocaleString"===r?n.toLocaleString():"toLocaleDateString"===r?n.toLocaleDateString():"toLocaleTimeString"===r?n.toLocaleTimeString():"toString"===r?n.toString():"toUTCString"===r?n.toUTCString():dateFormat(n,r)}static#at(t,e){const{number2:r}=e;return Number(t)===Number(r)?"1":"0"}static#st(t){return String(Math.floor(Number(t)))}static#nt(t,e){const{number2:r}=e;return Number(t)>=Number(r)?"1":"0"}static#it(t,e){const{number2:r}=e;return Number(t)>Number(r)?"1":"0"}static#ot(t){const e=Number(t);return Number.isNaN(e)?"1":"0"}static#ct(t,e){const{number2:r}=e;return Number(t)<=Number(r)?"1":"0"}static#lt(t,e){const{number2:r}=e;return Number(t)<Number(r)?"1":"0"}static#pt(t,e){const{number2:r}=e,a=Number(t),s=Number(r);return String(a>s?a:s)}static#gt(t,e){const{number2:r}=e,a=Number(t),s=Number(r);return String(a<s?a:s)}static#ht(t){return String(parseFloat(t))}static#ft(t){return String(parseInt(t))}static#dt(t){return String(Math.round(Number(t)))}static#ut(t,e){const{digits:r,fixed:a}=e,s=Number(t),n=parseInt(r);if(a)return String(s.toFixed(n));{const t=String(s).split(".");return 2!==t.length||t[1].length<=n?String(s):String(s.toFixed(n))}}static#mt(e,r){const{object2:a}=r,s=getJsonParseOfStr2(e),n=getJsonParseOfStr2(a);t.#S(s,n);const i=Object.assign({},s,n);return JSON.stringify(i)}static#yt(e,r){const{subkeys:a}=r;let s=getJsonParseOfStr2(e);return t.#S(s),t.#x(s,a)}static#Ct(e,r){const{kvjoin:a}=r;let s=getJsonParseOfStr2(e);t.#S(s);const n=Array.from(Object.entries(s)).map(t=>t.join(a));return JSON.stringify(n)}static#vt(t,e){const{str:r,equal:a}=e;const s=findStrInObj(getJsonParseOfStr2(t),r,"",a);return s.length>0?s.map(t=>`${t[0]}: ${JSON.stringify(t[1])}`).join("\n"):""}static#bt(e){let r=getJsonParseOfStr2(e);t.#S(r);const a=Array.from(Object.keys(r));return JSON.stringify(a)}static#wt(e,r){let a=getJsonParseOfStr2(e);t.#S(a);for(const e of Object.keys(a))"string"==typeof a[e]&&(a[e]=t.#$(a[e],r));return JSON.stringify(a)}static#St(e,r){let a=getJsonParseOfStr2(e);t.#S(a);for(const e of Object.keys(a))"string"==typeof a[e]&&(a[e]=t.#q(a[e],r));return JSON.stringify(a)}static#kt(e,r){const{valtype:a,sorttype:s}=r;let n=getJsonParseOfStr2(e);t.#S(n);const i=Array.from(Object.keys(n)),o=t.#X(i,a,s),c={};return o.forEach(t=>c[t]=n[t]),JSON.stringify(c)}static#xt(e){let r=getJsonParseOfStr2(e);t.#S(r);const a=Array.from(Object.values(r));return JSON.stringify(a)}static#Et(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#At(e,r){try{const{loc:a,idx:s,attrname:n,xml:i,decode:o}=r,c=parseInt(s),l={xmlMode:i,decodeEntities:o},p=cheerio.load(e,l);return t.#Et(p,a,c).attr(n)}catch(t){return logerr(`##tmp cheerio xAttr err: ${t}`),""}}static#It(e,r){try{const{loc:a,idx:s,attrname:n,xml:i,decode:o}=r,c=parseInt(s),l={xmlMode:i,decodeEntities:o},p=cheerio.load(e,l);return t.#Et(p,a,c).data(n)}catch(t){return logerr(`##tmp cheerio xData err: ${t}`),""}}static#Ot(t,e){try{const{loc:r,xml:a,decode:s}=e,n={xmlMode:a,decodeEntities:s},i=cheerio.load(t,n);return i(r).empty(),i.html()}catch(e){return logerr(`##tmp cheerio xEmpty err: ${e}`),t}}static#_t(e,r){try{const{loc:a,idx:s,xml:n,decode:i}=r,o=parseInt(s),c={xmlMode:n,decodeEntities:i},l=cheerio.load(e,c);if(a){return t.#Et(l,a,o).html()}return l.html()}catch(t){return logerr(`##tmp cheerio xHtml err: ${t}`),""}}static#Tt(e,r){try{const{loc:a,xml:s,decode:n}=r,i=-9999,o={xmlMode:s,decodeEntities:n},c=cheerio.load(e,o),l=t.#Et(c,a,i);return String(l.length)}catch(t){return logerr(`##tmp cheerio xLength err: ${t}`),"0"}}static#Dt(t,e){try{const{loc:r,xml:a,decode:s}=e,n={xmlMode:a,decodeEntities:s},i=cheerio.load(t,n);return i(r).remove(),i.html()}catch(e){return logerr(`##tmp cheerio xRemove err: ${e}`),t}}static#Pt(e,r){try{const{loc:a,idx:s,xml:n,decode:i}=r,o=parseInt(s),c={xmlMode:n,decodeEntities:i},l=cheerio.load(e,c);if(a){return t.#Et(l,a,o).text()}return l.text()}catch(t){return logerr(`##tmp cheerio c_text err: ${t}`),""}}static#Nt(t,e){const{idx:r}=e,a=parseInt(r),s=t.at(a);return s||""}static#Rt(t,e){const{openchar:r,startstr:a,regexp:s,flags:n,position:i}=e;if("string"!=typeof t||"string"!=typeof r||!["{","[","(","lt"].includes(r)||"string"!=typeof a||"number"!=typeof parseInt(i)||parseInt(i)<0)return"";const o="lt"===r?"<":r,c={"{":"}","[":"]","(":")","<":">"}[o];let l=1,p=-1;if(a){if(s){const e=new RegExp(a,n),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(i);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 f=h<=t.length?h+1:-1;return f>g?t.substring(g,f):""}static#Ft(t,e){return t||e?void 0:{}}static#Lt(e,r){try{const{method:a,sourceencoding:s,targetencoding:n}=r,i=t.#Ft(r,!0),o=Buffer.from(e,s);let c=null;return"gzip"===a?c=zlib.gzipSync(o,i):"deflate"===a?c=zlib.deflateSync(o,i):"deflateraw"===a?c=zlib.deflateRawSync(o,i):"brotli"===a&&(c=zlib.brotliCompressSync(o,i)),c?t.#$t(c,n):""}catch(t){return""}}static#jt(t,e){let r=t;const{str1:a,str2:s,str3:n,str4:i,str5:o}=e;return[a,s,n,i,o].forEach(t=>{"string"==typeof t&&(r=r.concat(t))}),r}static#$t(t,e,r="0",a="0"){const s=r?Number(r):0,n=a?Number(a):0;return t instanceof Buffer?n>0?t.toString(e,s,n):s>0?t.toString(e,s):t.toString(e):""}static#Mt(e,r){const{sourceencoding:a,targetencoding:s,start:n,end:i}=r;try{const r=Buffer.from(e,a);return t.#$t(r,s,n,i)}catch(t){return""}}static#Ut(t,e){const{str1:r,val1:a,str2:s,val2:n,str3:i,val3:o,str4:c,val4:l,str5:p,val5:g,defaultval:h}=e;try{return t===r?a:t===s?n:t===i?o:t===c?l:t===p?g:h}catch(t){return""}}static#Jt(e,r){try{const{method:a,sourceencoding:s,targetencoding:n,start:i,end:o}=r,c=t.#Ft(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.#$t(p,n,i,o):""}catch(t){return""}}static#Ht(t,e){const{str:r}=e;return t.endsWith(r)?"1":"0"}static#qt(t,e){const{str:r}=e;return t===r?"1":"0"}static#Bt(t,e){const{hashmethod:r}=e;return LsdUrl.getHashCode(t,r)}static#Vt(t,e){const{str:r}=e;if("string"!=typeof r)throw new Error("Invalid searchstr in _contains");return t.includes(r)?"1":"0"}static#Wt(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#Kt(t,e){const{str:r}=e;if("string"!=typeof r)throw new Error("Invalid str in _insert");return r+t}static#Gt(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#zt(t,e){const{split:r,kvsplit:a,keytrim:s,keynows:n,valuetrim:i,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];n&&(a=a.split("").filter(t=>t.trim()).join(""));let c=i?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#Yt(t){return String(t.length)}static#$(t,e){const{pattern:r,flags:a,idx:s}=e,n=e.resulttype,i=new RegExp(r,a),o=t.match(i);if("boolean"===n)return o?"1":"0";if(!o)return"";if("all"===n)return o.join(",");if("array"===n)return JSON.stringify(o);if("idx"===n){const t=parseInt(s);return o[t]?String(o[t]):""}return"index"===n?"number"==typeof o.index?String(o.index):"":"length"===n?String(o.length):void unreachable(n)}static#Xt(t){return t.normalize()}static#Qt(t){return t&&"0"!==t&&"false"!==t.toLowerCase()?"0":"1"}static#Zt(t,e){const{targetlen:r,padstr:a}=e,s=parseInt(r),n="string"==typeof a&&a.length>0?a:" ";return t.padEnd(s,n)}static#te(t,e){const{targetlen:r,padstr:a}=e,s=parseInt(r),n="string"==typeof a&&a.length>0?a:" ";return t.padStart(s,n)}static#ee(t){const e=getJsonParseOfStr2(t);return"string"==typeof e?e:""}static#q(t,e){const{substr:r,newstr:a,regexp:s,flags:n}=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,n),a):t.replace(r,a)}catch(e){return t}}static#re(t,e){const{pattern:r}=e,a=new RegExp(r);return String(t.search(a))}static#ae(t,e){const{beginidx:r,len:a,endidx:s}=e,n=parseInt(r);let i="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&&(i=n+o),t.slice(n,i)}static#se(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#ne(e,r){const{split:a,limit:s}=r,n=new RegExp(a),i=parseInt(s);let o=i>0?e.split(n,i):e.split(n);return t.#w(o),JSON.stringify(o)}static#ie(t,e){const{str:r}=e;return t.startsWith(r)?"1":"0"}static#oe(t,e){const{substr:r,regexp:a,flags:s,position:n,last:i,include:o}=e,c=o,l=parseInt(n);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=i?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#ce(t,e){const{substr:r,regexp:a,flags:s,position:n,last:i,include:o}=e,c=parseInt(n),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=i?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#le(t){try{return String(BigInt(t))}catch(t){return""}}static#pe(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#ge(t){return t.toLowerCase()}static#he(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#de(t){return t.trim()}static#ue(t){return t.trimEnd()}static#me(t){return t.trimStart()}static#ye(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#Ce(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 n=r.map(t=>parseInt(t.slice(1),16));return iconv.decode(Buffer.from(n),a)}return logerr(`Invalid method ${r} in _urlencode`),""}catch(t){return logerr(t),""}}static#ve(t,e){const{param1:r,param2:a,param3:s}=e;if("string"!=typeof r)throw new Error("Invalid params in _urldel");let n="";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),n=e.href}catch(t){n=""}return n||""}static#be(t,e){const{attrorpath:r,hashmethod:a,param:s,hostnameparts:n,params:i,title:o,extname:c,validextnames:l}=e;if("string"!=typeof r)throw new Error("Invalid attr in _urlget");const p=n?Number(n):0;let g="";return g=["href","origin","protocol","username","password","host","search","hash","hostname","port","hrefwithoutsearch","param"].includes(r)?LsdUrl.getUrlAttribute(t,r,p,s):LsdUrl.getFilePathFromUrl(t,r,a,p,i,c,l,o),"string"==typeof g?g:""}static#we(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#Se(e,r){const{param1:a,val1:s,param2:n,val2:i,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.#we(r,a,s,p),t.#we(r,n,i,p),t.#we(r,o,c,p),g=r.href}catch(t){g=""}return g||""}static async#b(t,e,r){const{name:a,arg1:s,arg2:n,arg3:i,arg4:o,arg5:c}=e;try{const e={origStr:t,arg1:s,arg2:n,arg3:i,arg4:o,arg5:c};return await LsdScript.execFunScript(e,a,r)}catch(t){return""}}static#v={a_at:t.#E,a_concat:t.#A,a_every:t.#I,a_filter:t.#O,a_find:t.#_,a_findindex:t.#T,a_includes:t.#D,a_indexof:t.#P,a_join:t.#N,a_length:t.#R,a_mapattr:t.#F,a_match:t.#L,a_max:t.#j,a_min:t.#M,a_pop:t.#U,a_push:t.#J,a_replace:t.#H,a_setcomplement:t.#B,a_setdifference:t.#V,a_setintersection:t.#W,a_setunion:t.#K,a_shift:t.#G,a_shuffle:t.#z,a_slice:t.#Y,a_sort:t.#Q,a_uniq:t.#Z,a_unshift:t.#tt,n_ceil:t.#et,n_dateformat:t.#rt,n_eq:t.#at,n_floor:t.#st,n_ge:t.#nt,n_gt:t.#it,n_isnan:t.#ot,n_le:t.#ct,n_lt:t.#lt,n_max:t.#pt,n_min:t.#gt,n_parsefloat:t.#ht,n_parseint:t.#ft,n_round:t.#dt,n_tofixed:t.#ut,o_assign:t.#mt,o_attr:t.#yt,o_entries:t.#Ct,o_findstrinobj:t.#vt,o_keys:t.#bt,o_match:t.#wt,o_replace:t.#St,o_sort:t.#kt,o_values:t.#xt,x_attr:t.#At,x_data:t.#It,x_empty:t.#Ot,x_html:t.#_t,x_length:t.#Tt,x_remove:t.#Dt,x_text:t.#Pt,at:t.#Nt,closingsubstr:t.#Rt,compress:t.#Lt,concat:t.#jt,convertencoding:t.#Mt,decode:t.#Ut,decompress:t.#Jt,endswith:t.#Ht,eq:t.#qt,hashcode:t.#Bt,includes:t.#Vt,indexof:t.#Wt,insert:t.#Kt,isin:t.#Gt,itemstoobj:t.#zt,length:t.#Yt,match:t.#$,normalize:t.#Xt,not:t.#Qt,padend:t.#Zt,padstart:t.#te,parsestr:t.#ee,replace:t.#q,search:t.#re,slice:t.#ae,specialconvert:t.#se,split:t.#ne,startswith:t.#ie,substrafter:t.#oe,substrbefore:t.#ce,tobigint:t.#le,tobool:t.#pe,tolowercase:t.#ge,tonum:t.#he,touppercase:t.#fe,trim:t.#de,trimend:t.#ue,trimstart:t.#me,urldecode:t.#Ce,urldelparams:t.#ve,urlencode:t.#ye,urlget:t.#be,urlsetparams:t.#Se,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)}import*as fs2 from"fs";import*as path2 from"path";import{HeaderGenerator,PRESETS}from"header-generator";import*as uuid2 from"uuid";import{unreachable as unreachable2,LsdUrl as LsdUrl2,fsCheckOrCreateSubdir,getJsonParseOfStr as getJsonParseOfStr4,getStringOfObj as getStringOfObj2}from"@letsscrapedata/utils";import{HttpsProxyAgent}from"hpagent";import*as download from"download";async function lsdDownload(t,e="",r=null){const a={};if(e){const t=new 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}import{getJsonParseOfStr as getJsonParseOfStr3,getMemberOfObject,getStringOfObj}from"@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=getJsonParseOfStr3(r);return a&&"object"==typeof a?(a=getMemberOfObject(a,e.slice(1)),a):void 0}function getSubkeysStringOfDataRecord(t,e){const r=getSubkeysValueOfDataRecord(t,e);return getStringOfObj(r)}function getSubkeysStrOfObject(t,e){const r=e.length>0?getMemberOfObject(t,e):t;return 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:unreachable2(a)}return s}static async getParaInElement(e,r,a){if(!e||!e.type||!a)return"";const s=e.type,n=a.paras;let i="";if("screenshot"===s)i=await t.getScreenshot(r,e,n);else unreachable2(s);return i}static async getParaInPage(e,r,a){if(!e||!e.type||!a)return"";const s=e.type,n=a.paras;let i="";switch(s){case"content":i=await t.getContent(r);break;case"evaluate":i=await t.getEvaluate(r,e);break;case"mhtml":i=await t.getMhtml(r,e,n);break;case"pdf":i=await t.getPdf(r,e,n);break;case"screenshot":i=await t.getScreenshot(r,e,n);break;case"title":i=await t.getTitle(r,e);break;case"window":i=await t.getWindow(r,e);break;default:unreachable2(s)}return i}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:n,source:i}=e,o="orig"===i?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"===n?t.name:String(t.expires):""}return""}return""}static getLocalstorage(e,r){const{origin:a,name:s,source:n,parsestr:i}=e,o="orig"===n?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(i){const e=getJsonParseOfStr4(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:n}=e;let i;try{if(!n&&(r.includes("cookie")||r.includes("localStorage")))throw new Error("Cannot access cookies and localStorge in getEvaluate");if(a){const e=getJsonParseOfStr4(a);if(!Array.isArray(e))return"";const n=["a","b","c","d","e","f","g"].slice(0,e.length),o=new Function(`[${n.join(", ")}]`,r);i=await t.evaluate(o,e,s)}else i=await t.evaluate(r,void 0,s);return getStringOfObj2(i)}catch(t){return loginfo(t),""}}static async getFile(e,r){const a=r.paras;try{const{url:s,pathtype:n,hashmethod:i,hostnameparts:o,params:c,extname:l,validextnames:p,basedir:g,setvar:h,pathvarname:f,proxy:d,headers:u,referer:m}=e;let y=e.path.trim();if(y)y=path2.join(y);else{let t=LsdUrl2.getFilePathFromUrl(s,n,i,Number(o),c,l,p);y=path2.join(g,t)}if(y){const t=path2.dirname(y);if(!await 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;(u||m)&&(v=u?JSON.parse(u):{},m&&(v.referer=m));const b=await lsdDownload(s,C,v);return fs2.writeFileSync(y,b),f&&a&&!appConfig.RESERVED_PARA_NAMES.includes(f)&&(a[f]=y),h?b.toString("utf8"):t.noNeedToReturnContent}catch(t){throw new Error("error in get_file")}}static _genHeaderMethod={genLatestAndroid:PRESETS.MODERN_ANDROID,genLatestDesktop:PRESETS.MODERN_DESKTOP,genLatestLinux:PRESETS.MODERN_LINUX,genLatestLinuxChrome:PRESETS.MODERN_LINUX_CHROME,genLatestLinuxFirefox:PRESETS.MODERN_LINUX_FIREFOX,genLatestMacos:PRESETS.MODERN_MACOS,genLatestMacosChrome:PRESETS.MODERN_MACOS_CHROME,genLatestMacosFirefox:PRESETS.MODERN_MACOS_FIREFOX,genLatestMobile:PRESETS.MODERN_MOBILE,genLatestWindows:PRESETS.MODERN_WINDOWS,genLatestWindowsChrome:PRESETS.MODERN_WINDOWS_CHROME,genLatestWindowsFirefox: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:n,newHttpHeaders:i}=r,o=r.interceptionData;let c={},l=!1,p="";try{if(t._genHeaderMethod[a]){l=!0;c=new HeaderGenerator(t._genHeaderMethod[a]).getHeaders()}else if("genNewByHttpOptions"===a){l=!0;c=new HeaderGenerator(n).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(i)for(const e of Object.values(i)){const{name:r,source:s,value:n,deleteFlag:i}=e;if(i)delete c[r];else if("value"===s)c[r]=n;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]:n&&(c[r]=n)}}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:n,hostnameparts:i,basedir:o,pathvarname:c}=e;if(a)a=path2.join(a);else{const e=t.url();let r=await t.title();a=LsdUrl2.getFilePathFromUrl(e,s,n,Number(i),"","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 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:n,hostnameparts:i,basedir:o,scale:c,displayheaderfooter:l,headertemplate:p,footertemplate:g,printbackground:h,landscape:f,pageranges:d,format:u,width:m,height:y,top:C,right:v,bottom:b,left:w,onepage:S,hmargin:k,pathvarname:x,setvar:E}=r;let A={},I=r.path.trim();if(I)I=path2.join(I);else{const t=e.url();let r=await e.title();I=LsdUrl2.getFilePathFromUrl(t,s,n,Number(i),"","pdf","",r),I=path2.join(o,I)}if(I){const t=path2.dirname(I);if(!await fsCheckOrCreateSubdir(appConfig.cfg.baseFileDir,t))throw new Error("failed to checkOrCreatePdfDir");I=path2.join(appConfig.cfg.baseFileDir,I),A.path=I}if("1"!==c&&(A.scale=Number(c)),l&&(A.displayHeaderFooter=l),p&&(A.headerTemplate=p),g&&(A.footerTemplate=g),h&&(A.printBackground=h),f&&(A.landscape=f),d&&(A.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)),A.margin=e}if(S){const t=await e.pageWidth();let r=await e.pageHeight();k&&(r+=Number(k)),A.width=`${t}px`,A.height=`${r}px`,logdbg(`--------- pageHeight:${r}px`)}else m||y?(m&&(A.width=t._getScreenSize(m)),y&&(A.height=t._getScreenSize(y))):"Letter"!==u&&(A.format=u);const O=await e.pdf(A);return x&&a&&!appConfig.RESERVED_PARA_NAMES.includes(x)&&(a[x]=I),E?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 n=Math.round(Math.random()*(s-a))+a;return String(n)}catch(t){return"0"}}static async getScreenshot(e,r,a){let s={};try{if(!e)return"";let{basedir:n,path:i,extname:o,quality:c,fullpage:l,x:p,y:g,width:h,height:f,omitbackground:d,pathvarname:u,setvar:m}=r;if(i=i.trim(),i)i=path2.join(n,i);else if(e.title){const t=await e.title(),r=`${LsdUrl2.convertToValidPathname(t)}.${o}`;i=path2.join(n,r)}else{const t=`${uuid2.v4()}.${o}`;i=path2.join(n,t)}if(i){const t=path2.dirname(i);if(!await fsCheckOrCreateSubdir(appConfig.cfg.baseFileDir,t))throw new Error("failed to checkOrCreatePdfDir");i=path2.join(appConfig.cfg.baseFileDir,i),s.path=i}"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(f);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 u&&a&&!appConfig.RESERVED_PARA_NAMES.includes(u)&&(a[u]=i),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:n,idx:i,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(n)return String(c.length);let l=o?o.split("."):[];if("*"!==i){let t=parseInt(i);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?LsdUrl2.convertToValidPathname(a):a}catch(t){return""}}static async getWindow(t,e){try{const{key1:r,key2:a,key3:s,key4:n,key5:i,key6:o,keys:c,length:l}=e;if(!t||!r)return"";const p=[r,a,s,n,i,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),""}}};import*as path3 from"path";import*as fsp from"fs/promises";import{LsdUrl as LsdUrl3,fsCheckOrCreateSubdir as fsCheckOrCreateSubdir2}from"@letsscrapedata/utils";async function responseCacheCb(t,e,r){if(e&&t)try{const{execData:a,contentType:s,tabname:n,requestHeadersFlag:i,responseHeadersFlag:o,cacheHeadersFlag:c,interceptionData:l,debugFlag:p=!1}=e,{pageUrl:g,cookies:h}=r,f=t.request(),d=f.method(),u=f.url();let m=f.postData();const y=m||"",C=f.resourceType(),v="text"===s?await t.text():"";let b=null;n&&"none"!==n&&(a[n]||(a[n]=[]),b={pageUrl:g,requestMethod:d,requestUrl:u,requestData:y,resourceType:C,responseData:v,size:String(v.length)},a[n].push(b));const w=b&&(c||p);if(i||w){const t=Object.assign({},f.allHeaders?await f.allHeaders():f.headers());!t.cookie&&h&&(t.cookie=h),w&&b&&(b.requestHeaders=t?JSON.stringify(t):""),i&&(l.cachedRequestUrl=u,l.cachedRequestHeaders=t,l.cachedRequestData=y),logdbg("requestUrl: ",u),logdbg("requestHeaders: ",t)}if(o){const e=Object.assign({},t.allHeaders?await t.allHeaders():t.headers());l.cachedResponseUrl=u,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:n,tabname:i,pathType:o,hashMethod:c,baseDir:l,hostnameParts:p,params:g,extname:h,validExtnames:f,encoding:d}=e,{pageUrl:u}=r;let m=LsdUrl3.getFilePathFromUrl(s,o,c,p,g,h,f);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 fsCheckOrCreateSubdir2(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),i&&"none"!==i&&n){const t=a.method();let e=a.postData();const r={pageUrl:u,requestMethod:t,requestUrl:s,requestData:e||"",resourceType:w,path:y,size:String(b.length)};n[i]?n[i].push(r):n[i]=[r]}}import fs4 from"fs";import{encodeToBase64,sleep}from"@letsscrapedata/utils";import*as path4 from"path";import*as fs3 from"fs";import{fsCheckOrCreateDir,isFileSync}from"@letsscrapedata/utils";var 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"),!isFileSync(a)){let t="ewogICJtYW5pZmVzdF92ZXJzaW9uIjogMywKICAibmFtZSI6ICJjYW1vdWZveCBhZGRvbiIsCiAgInZlcnNpb24iOiAiMS4wIiwKICAicGVybWlzc2lvbnMiOiBbCiAgICAic2NyaXB0aW5nIgogIF0sCiAgIndlYl9hY2Nlc3NpYmxlX3Jlc291cmNlcyI6IFsKICAgIHsKICAgICAgInJlc291cmNlcyI6IFsKICAgICAgICAic2NyaXB0cy8qIgogICAgICBdLAogICAgICAibWF0Y2hlcyI6IFsKICAgICAgICAiPGFsbF91cmxzPiIKICAgICAgXQogICAgfQogIF0sCiAgImNvbnRlbnRfc2NyaXB0cyI6IFsKICAgIHsKICAgICAgIm1hdGNoZXMiOiBbCiAgICAgICAgIjxhbGxfdXJscz4iCiAgICAgIF0sCiAgICAgICJqcyI6IFsKICAgICAgICAiaW5qZWN0LmpzIgogICAgICBdLAogICAgICAicnVuX2F0IjogImRvY3VtZW50X3N0YXJ0IgogICAgfQogIF0KfQ==";t=Buffer.from(t,"base64").toString("utf8"),fs3.writeFileSync(a,t,"utf8")}if(a=path4.join(e,"inject.js"),!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 fsCheckOrCreateDir(a,!0,!0))return logerr("Failed to create directory"),!1;for(const t of r){if(a=path4.join(e,"scripts",`${t}.js`),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:n,maxRefreshTimes:i}=t;if(n&&i)for(let t=0;t<i;t++){if(!await n(e))break;if(await e.reload(),await sleep(5e3),s=await getCaptchasOnce(e,r,a),s.length>0)return s}else if(await 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:n,widgetId:i}=r;if(e){const r={opType:"execute",captchaType:n,widgetId:i,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}="${n}"][${widgetIdAttr}="${i}"]`,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:n,challengeScript:i,captchaScript:o}=t;return{type:e,websiteURL:r,websiteKey:a,iv:s,context:n,challengeScript:i,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:n,apiServer:i,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&&n))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(n)&&(c.challenge=n),isValidStringAttr(i)&&(c.geetestApiServerSubdomain=i),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:n}=a,i=n||`${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 n||!n)throw new Error(`##captcha invalid seccode in ${r.captchaType}`);s=encodeToBase64({geetest_challenge:t,geetest_validate:e,geetest_seccode:i})}else{if("v4"!==r.version)return"failed:invalidVersion";{const{captcha_id:t,lot_number:e,pass_token:n,gen_time:i,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 n||!n)throw new Error(`##captcha invalid pass_token in ${r.captchaType}`);if("string"!=typeof i||!i)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=encodeToBase64({captcha_id:t,lot_number:e,pass_token:n,gen_time:i,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:n,action:i,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||!n)throw new Error(`## captcha invalid url or sitekey in ${t.captchaType}`);let f=.3;"number"==typeof e?.minScore&&e.minScore>0&&e.minScore<1&&(f=e.minScore);const d={type:r,version:"v3"===a?3:2,websiteURL:s,websiteKey:n,isEnterprise:"true"===c,isInvisible:"true"===l,minScore:f};return isValidStringAttr(i)&&(d.action=i),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:n,chlPageData:i}=t,o={type:e,websiteURL:r,websiteKey:a};return isValidStringAttr(s)&&(o.action=s),isValidStringAttr(n)&&(o.cData=n),isValidStringAttr(i)&&(o.chlPageData=i),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 fs4.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 n=await getScript(e.scriptName);if(!n){r=!1;break}a.push(e.scriptName);await t.addPreloadScript(n)||(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 n="ok";try{const r=processors.get(e);if(!r)return logerr(`##captcha cannot process ${e}`),s.code=1001,s;const{getTask:i,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=i(l,a),{solution:g,errorCode:h,taskId:f,createTime:d,endTime:u}=await executeTask(p);if(s.taskResults.push({solution:g,errorCode:h,taskId:f,elapse:u-d}),g&&(n=await o(t,"",l,g),n.startsWith("ok")||(s.code=1003,s.message=n),n)){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}}import fs5 from"fs";import{LsdUrl as LsdUrl4,sleep as sleep2}from"@letsscrapedata/utils";var 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(),n=LsdUrl4.getAbsoulteUrl(s,e),i=await lsdDownload(n,r?.proxyUrl);return"number"==typeof a&&fs5.writeFileSync(`./captchaImage${a}.gif`,i),i}{"lazy"===await s.attribute("loading")&&(await s.scrollIntoView(),await sleep2(2e3));const t=await s.screenshot();return"number"==typeof a&&fs5.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:n,commentLoc:i,commentAttr:o,inputLoc:c,enter:l,submitLoc:p,checkLoc:g,lang:h,math:f,maxLength:d,minLength:u,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||i&&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(i&&(b=await getTextOfElement(t,i,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:n,comment:b,lang:h,math:f,maxLength:d,minLength:u,question:m,space:y,textType:C,websiteUrl:t.url()}},textExecuteSolution=async function(t,e,r){const{text:a}=r,{inputLoc:s,enter:n,submitLoc:i,checkLoc:o,checkAttr:c,failedStr:l}=e,p=await t.findElement(s);if(!p)throw new Error("noRequiredElement");let g=!1;if(n){if(g=await p.input(a,{enter:n}),!g)return"failed:input"}else{const e=await t.findElement(i);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 sleep2(1e3);const h=await t.findElement(o);if(!h)return"ok";if(!c)return"failed:checkFailed-noCheckElement";const f="textContent"===c?await h.textContent():await h.attribute(c);return!l&&l.length>0?`failed:checkFailed-${f}`:f.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:n,commentAttr:i,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(n&&(g=await getTextOfElement(t,n,i),!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:n,imageLocs:i,submitLoc:o,checkLoc:c,checkAttr:l,failedStr:p}=e;if(!Array.isArray(a)||a.length<s||n>0&&a.length>n)return"failed:invalidSolution";let g=!1;const h=await t.findElement(i[0]);if(!h)throw new Error("noRequiredElement");const f=await h.boundingBox();if(!f)return"failed:click";const{x:d,y:u}=f;for(const{x:e,y:r}of a){if(g=await t.mouseClick(d+e,u+r),!g)return"failed:click";await sleep2(200)}if(await sleep2(1e3),o){const e=await t.findElement(o);if(!e)throw new Error("noRequiredElement");if(g=await e.click(),!g)return"failed:submit";await sleep2(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 n={code:0,captchaType:s,taskResults:[]};let i="";try{const o=processors2.get(s);if(!o)return logerr(`##captcha cannot process ${s}`),n.code=1001,n;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),f={solution:s,errorCode:o,taskId:p,elapse:h-g};if(n.taskResults.push(f),s){if(i=await l(t,e,s),i.startsWith("ok"))return n;if(i.startsWith("failed:checkFailed")){f.errorCode="ERROR_CHECK_FAILED";continue}f.errorCode="ERROR_SOLUTION_FAILED";break}}return n.code=1003,n.message=i,n}catch(t){logerr(t);const e=t.message;return"invalidParas"===e?n.code=1001:e.startsWith("noRequiredElement")?n.code=1004:n.code=1010,n.message=e,loginfo(`######################### end to sovle ${s} @${new Date}: `,n),n}}processors2.set("coordinate",coordinateProcessor);import*as uuid3 from"uuid";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 EventEmitter{#ke;#xe;#Ee;_fontsConfig;#Ae;#C;#m;_templateId;#Ie;#y;_taskId;#Oe;#_e;#Te;#De;#Pe;#Ne;#Re;#Fe;#u;_taskContext;#Le;#$e;#je;_paras;#Me;#Ue;#Je;#He;#qe;#Be;#Ve;#We(){this.#$e&&(this.#Je=!0)}#Ke(){this.#Je=!1,this.#He=!1}constructor(t,e,r,a={}){super();const{template:s,actionConfigs:n,fontsConfig:i,templScripts:o}=t,{proxy:c=null,page:l=null,browserApiContext:p=null,standaloneApiContext:g=null}=r,{performOneTask:h=appConfig.performOneTask,taskId:f=0,domainNames:d=[],secureDataFlag:u=!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.#ke=s,this.#xe=n,this.#Ee=i,this._fontsConfig=i,this.#Ae=o,this.#C=C,this.#m=s.templateId,this._templateId=s.templateId,this.#Ie=1001===this.#m,this.#y=f,this._taskId=f,this.#Oe=a.captchaOptions?a.captchaOptions:{captchaTypes:[]},this.#_e=a.loginOptions?a.loginOptions:{loginWhens:[],pageMatchInfos:[]},this.#Te=k,this.#Pe=m,this.#Ne=!!a.execData,this.#Re=y,this.#De=v,this.#Fe=h,this.#u={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,subtaskResults:[]},this.#Le=d,this.#$e=u;const t=new SysParas(this.#u,this.#m,this.#y,this.#C);this.#je={inParas:e,sysParas:t,authInfo:b,userData:Object.assign({},S.userData),secureData:{}},this.#Me=this.#Ge();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.#Ue={cachedRequestUrl:"",cachedRequestHeaders:{},cachedResponseUrl:"",cachedResponseHeaders:{},updatedRequestUrl:"",updatedRequestHeaders:{},updatedResponseUrl:"",updatedResponseHeaders:{},origStateUrl:r,origStateHeaders:S.headers,updatedStateUrl:"",updatedStateHeaders:{}},this.#Je=!1,this.#He=!1,this.#qe={api:this.#ze,break:this.#Ye,captcha:this.#Xe,click:this.#Qe,continue:this.#Ze,exit:this.#tr,extract:this.#er,goto:this.#rr,hover:this.#ar,ifelse:this.#sr,input:this.#nr,intercept:this.#ir,loopdowhile:this.#or,loopfor:this.#cr,loopineles:this.#lr,loopinstr:this.#pr,misc:this.__performMiscAction,scroll:this.#gr,select:this.#hr,setvar:this.#fr,subtask:this.#dr,tabname:this.#ur,wait:this.#mr},this.#Be={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.#Ve="",this._taskContext=this.#u,this._paras=this.#je,this.#Ee&&logdbg(this.#Ee)}catch(t){throw logerr("##te Exeception in ScraperTask.constructor"),new Error(t)}}#yr(t){const e=this.#Cr(t,"source");return"default"===e?this.#Te:"browser"===e?"browser":"xml"===e?"xml":void unreachable3(e)}#vr(t){this.#u.credits=t,logwarn(new Error)}#br(t){return`action${t[0].toUpperCase()}${t.slice(1)}`}#wr(t,e){const{browserElesStack:r,cheerioElesStack:a}=this.#u;return!(!t||r.length>0||a.length>0)||(this.#Sr("cfginvalid",this.#br(e),"resetPage"),!1)}#Sr(t,e,r){"ignore"!==t&&logwarn(`##tmp procErrname eName ${t} scenario ${e} reason ${r} tId ${this.#m} kId ${this.#y} p ${this.#Me}`);let a=-69;if("string"!=typeof t||!t||!e)throw this.#u.credits=a,new Error("##te invalid paras in _procErrname");if("ignore"===t)return!0;throw void 0!==this.#Be[t]?(a=this.#Be[t],this.#u.credits=a,new Error(`##te exit with errname ${t} in ${e}`)):(this.#u.credits=a,new Error(`##te invalid errName ${t} in ${e}`))}_procErrname(t,e,r){return this.#Sr(t,e,r)}#Ge(){if(this.#je.inParas&&"object"==typeof this.#je.inParas){const t=Array.from(Object.keys(this.#je.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.#je.inParas[t]).join(this.#De);return(r.length>0||a.length>0)&&(s=`${s}@@${r.map(t=>this.#je.inParas[t]).join(this.#De)}`,a.length>0&&(s=`${s}@@${a.map(t=>this.#je.inParas[t]).join(this.#De)}`)),s}return""}#kr(t,e=!0){return this.#u.cheerioPage?this.#u.cheerioPage.load(t,e):this.#u.cheerioPage=new CheerioPage(t,e),!0}#xr(t,e){if(this.#He&&!t.startsWith("secureData.")&&this.#Sr("cfginvalid","secureData","noprivilege"),"string"!=typeof t||"string"!=typeof e||appConfig.RESERVED_PARA_NAMES.includes(t)?this.#Sr("cfginvalid","setNormalVar","invalidParas"):"pageHtml"!==t&&"pageXml"!==t||(this.#u.cheerioElesStack.length>0&&this.#Sr("cfginvalid","setNormalVar","cheerioElesStack"),this.#kr(e,"pageHtml"===t)),t.startsWith("userData.")){const r=t.slice(9);0===r.length&&this.#Sr("cfginvalid","setNormalVar","invalidUserDataVarName"),this.#je.userData[r]=e}else if(t.startsWith("secureData.")){const r=t.slice(11);0===r.length&&this.#Sr("cfginvalid","setNormalVar","invalidSecureDataVarName"),this.#je.secureData[r]=e}else if(t.startsWith("inParas_")){const r=t.slice(8);0!==r.length&&void 0!==this.#je.inParas[r]||this.#Sr("cfginvalid","setNormalVar","invalidInParasVarName"),this.#je.inParas[r]=e,this.#Me=this.#Ge()}else this.#je[t]=e;return(t.startsWith("dbgdbg")||t.startsWith("cx")&&t.match(/^cx\d$/))&&logwarn(`##dbg setvar ${t}: ${e}`),!0}#Er(t){if("string"!=typeof t)return!1;const e=t.toLowerCase();return e.startsWith("https://")||e.startsWith("http://")}#Ar(t){if(t?.[appConfig.XML_ATTR_KEY]?.type)return!0;throw new Error("##te Invalid element type config(validate)")}#Ir(t,e){if("string"!=typeof t)throw new Error(`##te Invalid templStr: ${t}`);if(t.indexOf("${")<0)return t;try{return!this.#Je&&t.includes("secureData.")?(this.#Sr("cfginvalid","transTemplToStr","accessSecureData"),""):(this.#Je&&t.includes("secureData.")&&(this.#He=!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""}}#Cr(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.#Ir(s,this.#je)}_getCfgStrAttr(t,e,r=!0,a=!0){return this.#Cr(t,e,r,a)}#Or(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.#Or(t,e)}#_r(t,e,r=!1){try{const a=appConfig.XML_CHILDREN_KEY,s=appConfig.XML_ATTR_KEY;let n=t[a]?t[a][e]:null;if(Array.isArray(n))return n;if(void 0===n){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),[]}}#Tr(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.#_r(t,e,r)}#Dr(t,e){const r=this.#_r(t,e);return r.length>0?r[0]:null}#Pr(t,e){const r=this.#_r(t,e);if(0===r.length)throw new Error(`##te There is no ${e} tag config`);return r[0]}#Nr(){if(this.#u.page)return this.#u.page.pageInfo();throw new Error("Cannot get pageInfo from null browser page")}#Rr(){if(this.#u.page)return this.#u.page.browserContext().browser().isHeadless();throw new Error("Cannot get headless from null browser page")}#Fr(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}`}]))}#Lr(t){if("string"!=typeof t)throw new Error(`##te Inavlid bool expr: ${t}`);if("0"===t)return!1;if("1"===t)return!0;return Boolean(Number(getTransformExpStrSync(t,[{type:"tobool"}])))}async#$r(t){let e=parseInt(t);return e>0&&await sleep3(e),!0}#jr(t,e=!0,r=!0,a=1,s=1){const n=t?this.#Or(t,"gen"):e,i=t?this.#Or(t,"cap"):r,o=n?a:0,c=this.#ke.capName&&i?s:0;return loginfo(`##credit addTaskCredits: gen ${o}, cap ${c}`),this.#u.credits+=(c<<appConfig.GEN_CREDITS_BITS)+o,!0}#Mr(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:n,eloc:i,pn1:o,pv1:c,pn2:l,pv2:p}=this.#Ur(t,!1),g=this.#Or(t,"login")&&!!this.#Oe.pageMatchInfos,h=this.#Or(t,"captcha")&&!!this.#_e.pageMatchInfos,f=n||i||o||c||l||p?{eurl:n,eloc:i,pn1:o,pv1:c,pn2:l,pv2:p}:null;if("ignored"===r||!g&&!h&&!f)return null;const d=this.#Or(t,"popupsubtask");let u=parseInt(a);u>0||(u=0);const m="ignored"!==r,y={captchaFlag:m&&h&&!!this.#Oe?.captchaWhens?.includes("popup"),loginFlag:m&&g&&!!this.#_e?.loginWhens?.includes("popup"),taskFlag:!(m&&d)};if(m&&!y.captchaFlag&&!y.loginFlag&&!f)return this.#Sr("cfginvalid",this.#br(e),"invalidPopupCfg"),null;let C="ignored"===r;const v={captchaFlag:h&&!!this.#Oe?.captchaWhens?.includes("current"),loginFlag:g&&!!this.#_e?.loginWhens?.includes("current"),taskFlag:C&&!!f};if(C&&!v.captchaFlag&&!v.loginFlag&&v.taskFlag)return this.#Sr("cfginvalid",this.#br(e),"invalidCurrentCfg"),null;return{actionType:e,errName:s,dataPageMatchInfo:f,waitMs:u,popupFlag:m,popupPageType:r,popupPageFlags:y,currentFlag:C,currentPageFlags:v,captchaPageMatchInfos:this.#Oe.pageMatchInfos,loginPageMatchInfos:this.#_e.pageMatchInfos}}async#Jr(t,e,r=!0){const a=t.url();if(!a.trim())return null;const s=new URL(a),n=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=n.startsWith(t[0])&&t.slice(1).every(t=>n.includes(t))}const i=!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||!i||!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 sleep3(2e3)}}catch(t){c=!1}if(c)return a}return null}async#Hr(t,e,r){const{actionType:a,dataPageMatchInfo:s,popupPageType:n,errName:i}=e,o="popup"===r?e.popupPageFlags:e.currentPageFlags,{captchaFlag:c,loginFlag:l,taskFlag:p}=o;if(c&&e.captchaPageMatchInfos){if(await this.#Jr(t,e.captchaPageMatchInfos))return!0}if(l&&e.loginPageMatchInfos){if(await this.#Jr(t,e.loginPageMatchInfos))return this.#Sr("tologin",this.#br(a),r),!0}if(s){if(await this.#Jr(t,[s]))return"popup"===r&&(p?(this.#wr(t,a),this.#u.page=t):this.#u.popupPage=t),!0;if("required"===n)return this.#Sr(i,this.#br(a),"noMatchedPopupPage"),!1}return!0}async processNewPageLoginCaptcha(t,e,r){const{actionType:a,errName:s,waitMs:n,popupPageType:i}=t,o=appConfig.CHECK_POPUP_PAGE_TIMEOUT1;setTimeout(()=>this.emit(appConfig.EVENT_TYPES.lsdScraperPopup,{code:1009,message:"timeout",data:null}),o),await e(...r),n&&await sleep3(n);const[c]=await 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"!==i)return!0;this.#Sr(s,this.#br(a),"noPopupPage")}return await this.#Hr(l,t,"popup"),!0}#qr(t,e){"browser"===t&&this.#u.page||this.#Sr("cfginvalid",this.#br(e),"invalidBrowserElementSource")}#Br(t,e){let r=this.#u.processedExecData[t];return r||(r=new Set,this.#u.processedExecData[t]=r),r.add(e),!0}#Vr(t,e){let r=this.#u.processedExecData[t];return!!r&&r.has(e)}#Wr(t){return!!this.#u.processedExecData[t]}async#Kr(t){if("browser"===t)return this.#u.browserApiContext;if("standalone"===t)return this.#u.standaloneApiContext;if("state"===t)return this.#u.stateApiContext;if("task"===t){if(!this.#u.taskApiContext){const t=this.#u.proxy?{proxy:this.#u.proxy}:{};this.#u.taskApiContext=await controller.newApiContext(t)}return this.#u.taskApiContext}return null}#Gr(t,e,r,a,s){let n={};const i=s.filter(t=>"header"===this.#Cr(t,"type"));try{if("headers"!==e||"headers"===e&&r||a||i.length>0){let s="";const o=this.#Ue;if("headers"===e&&r?n=JSON.parse(r):"cachedRequestHeaders"===e?(s=o.cachedRequestUrl,n=Object.assign({},o.cachedRequestHeaders)):"cachedResponseHeaders"===e?(s=o.cachedResponseUrl,n=Object.assign({},o.cachedResponseHeaders)):"origStateHeaders"===e?(s=o.origStateUrl,n=Object.assign({},o.origStateHeaders)):"updatedRequestHeaders"===e?(s=o.updatedRequestUrl,n=Object.assign({},o.updatedRequestHeaders)):"updatedResponseHeaders"===e?(s=o.updatedResponseUrl,n=Object.assign({},o.updatedResponseHeaders)):"updatedStateHeaders"===e?(s=o.updatedStateUrl,n=Object.assign({},o.updatedStateHeaders)):this.#Sr("cfginvalid","actionApi","invalidHeadersSource"),e.endsWith("Headers")&&(s||0===Array.from(Object.keys(n)).length)){GetPara.canAccessSeureData(this.#Le,t)||(n={},this.#Sr("cfginvalid","actionApi","differentOrigin"))}a&&(n.referer=a);for(const t of i){const e=this.#Cr(t,"name"),r=this.#Cr(t,"value");n[e]=r}return n}return null}catch(t){return loginfo(t),this.#Sr("cfginvalid","actionApi","garhException"),null}}#zr(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)}#Yr(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.#Sr("cfginvalid","actionApi","notObject"),new Error("unreachable");const r=getJsonParseOfStr5(t);if(!r||"object"!=typeof r)throw this.#Sr("cfginvalid","actionApi","jsonParseData"),new Error("unreachable");return r}async#Xr(t,e,r,a){try{if(r.filter(t=>"data"===this.#Cr(t,"type")).length>0&&"object"!==e)return this.#Sr("cfginvalid","actionApi","invalidDataType"),"";if("object"!==e)return this.#Yr(t,e);{const e=await this.#Qr(t,r,"");if(e)return e;throw new Error("##te invalid requestData")}}catch(t){return loginfo(t),void this.#Sr(a,"actionApi","grdExeception")}}#Zr(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.#Sr("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.#Sr("cfginvalid","actionApi","invalidDataOrFormat2"),!1;const e=new URLSearchParams;for(const[t,r]of Object.entries(a))e.append(t,r);t.params=a}else unreachable3(r);break;case"default":if("data"===r)t.body=JSON.stringify(a);else if("form"===r){if(!a||"object"!=typeof a)return this.#Sr("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.#Sr("cfginvalid","actionApi","invalidDataOrFormat22"),!1;t.searchParams=a}else unreachable3(r);break;case"fetch":if("data"===r)t.body=JSON.stringify(a);else if("form"===r){if(!a||"object"!=typeof a)return this.#Sr("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.#Sr("cfginvalid","actionApi","invalidDataOrFormat32"),!1;const e=new URLSearchParams;for(const[t,r]of Object.entries(a))e.append(t,r);t.body=a}else unreachable3(r);if("data"===r){if(!a||"object"!=typeof a)throw this.#Sr("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:unreachable3(e)}return!0}async#ta(t,e,r,a,s){const n={statusCode:200,text:""};try{if(this.#Ie&&r.endsWith("__test"))return logwarn("##dbg api: ",r,a),n.text=JSON.stringify({reqUrl:r,requestOptions:a}),n;switch(t){case"browser":case"state":case"task":case"standalone":const s=await this.#Kr(t);if(!s)throw new Error("##te null apiContext");e>0&&(a.timeout=e);const i=await s.fetch(r,a);n.statusCode=i.status,n.text=i.text;break;case"default":e>0&&(a.timeout={request:e});const o=await gotScraping(r,a);n.statusCode=o.statusCode,n.text=o.body;break;case"fetch":const c=await fetch(r,a);n.statusCode=c.status,n.text=await c.text();break;default:unreachable3(t)}return n}catch(t){return loginfo(t),this.#Sr(s,"actionApi","groarException"),n.statusCode=600,n.text=t.message,n}}#ea(t,e){let r=this.#_r(t,"response",!1);0===r.length&&(r=[]);for(const t of r){const r=this.#Cr(t,"codes");if(!r)throw this.#Sr("cfginvalid","actionApi","invalideCodes"),new Error("unreachable");if(r.split(",").map(t=>Number(t)).includes(e)){const e=this.#Cr(t,"errname");this.#Sr(e,"actionApi","statusCode")}}return!0}#ra(t,e,r,a){const s=this.#aa(r,a);if(s&&!t.match(s))throw this.#Sr(e,"actionApi","apiResponseText"),new Error("unreachable");return!0}#sa(t,e,r="json"){return"tid"===t&&(t=`tid${this.#m}`),"uuidv4"===e?e=uuid3.v4():"datetime"===e&&(e=String(getLocalDateNumber())),`${t}_${e}.${r}`}#na(t,e=!1){let r=appConfig.cfg.baseFileDir;return e?(r=path5.join(r,"debug"),isDirectorySync(r)||fs6.mkdirSync(r)):r=path5.join(r,"files"),path5.join(r,t)}#ia(t,e,r="json"){try{const a=this.#sa(t,e,r),s=this.#na(a,!0);return fs6.readFileSync(s,"utf8")}catch(t){return""}}#oa(t,e,r,a="normal"){try{const a=this.#sa(e,r),s=this.#na(a,!0);return fs6.writeFileSync(s,t),!0}catch(t){return this.#Sr(a,"actionApi","sarExeception"),!1}}async#ze(t){let e=200,r="",a="";this.#We();const s=this.#Cr(t,"url");try{GetPara.canAccessSeureData(this.#Le,s)||this.#Ke();const n=this.#Ur(t);let{method:i,url:o,encodeuri:c,session:l,headerssource:p,headers:g,referer:h,proxy:f,timeout:d,data:u,datatype:m,format:y,requestprefix:C,responseprefix:v,tabname:b,subkeys:w,varname:S,setkeys:k,errname:x,valerrname:E,pattern:A,flags:I}=n;const O=this.#Ue;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.#oa(a,C,"request",x)}else{const t=this.#ia(C,"request");if(t){if(getJsonParseOfStr5(t)){const{cachedRequestUrl:e,cachedRequestHeaders:r,cachedRequestData:a}=getJsonParseOfStr5(t);e&&(O.cachedRequestUrl=e),r&&(O.cachedRequestHeaders=r),a&&(O.cachedRequestData=a)}}}"cachedRequestUrl"===o&&(o=O.cachedRequestUrl),"cachedRequestData"===u&&O.cachedRequestData&&(u=O.cachedRequestData),"cachedRequestHeaders"===g&&O.cachedRequestHeaders&&(g=JSON.stringify(O.cachedRequestHeaders))}const _=n.context,T=d?Number(d):0,D=o.startsWith("/"),P=c?encodeURI(o):o,N=this.#_r(t,"object",!1),R=this.#_r(t,"request",!1),F=i.toUpperCase();if(!["GET","DELETE","POST","PUT"].includes(F))return this.#Sr("cfginvalid","actionApi","invalidMethod"),"";let L=!1;this.#Ie&&v&&(r=this.#ia(v,"response"),r&&(L=!0));let $=null;if(!r)if(D){if("function"==typeof GetPara.getOtherFunObj.execBaseApiFun){const t=T>0?{timeout:T}:void 0,e=u?await this.#Xr(u,m,N,x):null;r=await GetPara.getOtherFunObj.execBaseApiFun(F,P,e,t,this.#m)}}else{const s={method:F.toUpperCase()},n=this.#u.proxy;if(n&&(f&&n.proxyUrl&&(s.proxyUrl=n.proxyUrl),l&&n.proxyUrl&&"default"===_&&(s.sessionToken=n.proxyUrl)),$=this.#Gr(P,p,g,h,R),$&&(s.headers=$),u){const t=await this.#Xr(u,m,N,x);void 0!==t&&(a=JSON.stringify(t),this.#Zr(s,_,y,t),this.#zr($,a))}const i=await this.#ta(_,T,P,s,x);e=i.statusCode,r=i.text,200!==e&&this.#ea(t,e)}if(b&&"none"!==b){const t=this.#u.execData;t[b]||(t[b]=[]);const e={pageUrl:this.#je.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&&!L&&v&&r&&this.#oa(r,v,"response",x);let j=r;if(w){const t=getJsonParseOfStr5(j);t&&"object"==typeof t||(j="");j=getSubkeysStrOfObject(t,this.#ca(w))}return"ignore"!==E&&A&&this.#ra(j,E,A,I),S&&this.#xr(S,j),k&&j&&this.#la(j,k,!0),this.#jr(t),r}catch(t){throw t}finally{this.#Ke()}}async#Ye(t){this.#Ar(t),this.#u.loopsStack.length>0?this.#u.breakFlag=!0:logerr("##te Error: break cannot be called outside of loop")}#pa(t){const e=this.#Pr(t,"element");return this.#Cr(e,"loc")}#ga(t,e=1){const r=this.#_r(t,"element");return r.length<e?(this.#Sr("cfginvalid","childElements","elementCnt"),[]):r.map(t=>this.#Cr(t,"loc"))}async#ha(t,e,r,a){const s=this.#Pr(e,"image"),n=this.#ga(s),i=this.#Dr(e,"comment"),o=i?this.#pa(i):"",c=i?this.#Cr(i,"attr"):"",l=this.#Pr(e,"input"),p=this.#pa(l),g=this.#Or(l,"enter"),h=g?null:this.#Dr(e,"submit"),f=g||!h?"":this.#pa(h);if(!g&&!h)return this.#Sr("cfginvalid","actionCaptcha","invalidTextCfg"),!1;const d=this.#Pr(e,"check"),u=this.#pa(d),m=this.#Cr(d,"attr"),y=this.#Cr(d,"failedstr"),C=this.#Ur(e),{lang:v,math:b,maxlen:w,minlen:S,question:k,space:x,texttype:E}=C,A={type:"text",imageLocs:n,commentLoc:o,commentAttr:c,inputLoc:p,enter:g,submitLoc:f,checkLoc:u,checkAttr:m,failedStr:y,case:C.case,lang:v,math:b,maxLength:parseInt(w),minLength:parseInt(S),question:k,space:x,textType:E};return await solveRecognitionCaptcha(t,A,r,a)}async#fa(t,e,r,a){const s=this.#Pr(e,"image"),n=this.#ga(s),i=this.#Dr(e,"comment"),o=i?this.#pa(i):"",c=i?this.#Cr(i,"attr"):"";let l="";const p=this.#Dr(e,"submit");if(p&&(l=this.#pa(p),!l))return this.#Sr("cfginvalid","actionCaptcha","invalidCoordinateCfg"),!1;const g=this.#Pr(e,"check"),h=this.#pa(g),f=this.#Cr(g,"attr"),d=this.#Cr(g,"failedstr"),u=this.#Ur(e),{lang:m,maxclicks:y,minclicks:C}=u,v={type:"coordinate",imageLocs:n,commentLoc:o,commentAttr:c,submitLoc:l,checkLoc:h,checkAttr:f,failedStr:d,lang:m,maxClicks:parseInt(y),minClicks:parseInt(C)};return await solveRecognitionCaptcha(t,v,r,a)}async#Xe(t){const e=this.#u.page;if(!e)return this.#Sr("cfginvalid","actionCaptcha","noPage"),!1;const r=parseInt(this.#Cr(t,"try")),a=this.#Or(t,"debug"),s=this.#Pr(t,"captcha"),n=this.#Cr(s,"type"),i=this.#Cr(t,"errname"),o=this.#u.proxy;let c;switch(n){case"amazon":case"funcaptcha":case"geetest":case"keycaptcha":case"mtcaptcha":case"turnstile":c=await solveTokenCaptcha(e,n,o,{debug:a});break;case"recaptcha":const t=Number(this.#Cr(s,"minscore"));c=await solveTokenCaptcha(e,n,o,{minScore:t,debug:a});break;case"text":case"grid":case"slider":case"rotation":c=await this.#ha(e,s,o,r);break;case"coordinate":c=await this.#fa(e,s,o,r);break;default:unreachable3(n)}return a&&logwarn("##te captcha result: ",c),0!==c?.code&&this.#Sr(i,"actionCaptcha","cannotSolveCaptcha"),!0}async#Qe(t){const e=this.#u.page;if(!e)return this.#Sr("cfginvalid","actionClick","noPage"),!1;this.#Ar(t);const r=this.#Cr(t,"type"),a=this.#Cr(t,"clicktype"),s=parseInt(this.#Cr(t,"try")),n=this.#Cr(t,"popuppage"),i=this.#Or(t,"navigate"),o=this.#Cr(t,"errname"),c=this.#_r(t,"element",!0);"click"!==a&&"evaluate"!==a&&(logerr(`##task invalid clicktype ${a} in performClickAction`),this.#Sr("cfginvalid","actionClick","invalidClickType"));const{elementSource:l,elements:p}=await this.#da(c,s);if(this.#qr(l,"click"),0===p.length)return loginfo(`## te ---- no element to click, actCfg: ${JSON.stringify(t).slice(0,200)}`),this.#Sr(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.#Cr(t,"downloadpath"),f=appConfig.cfg.baseDownloadDir,d=path5.join(f,h);if(h&&f){if(!0===e.browserContext().browser().isHeadless()&&(logerr('##te please set browserHeadlesses "true" to download files by clicking'),this.#Sr("cfginvalid","actionClick","invalidBrowserHeadlesses")),await fsCheckOrCreateSubdir3(f,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.#Sr("cfginvalid","actionClick","invalidBrowserControllerTypes")):(logerr(e),logwarn(`##browser failed to send CDP message ${t}`))}}else this.#Sr("other","actionClick","invalidDownloadDir")}const u=this.#Mr(t,r);if(u&&u.popupFlag?await this.processNewPageLoginCaptcha(u,async t=>{await t.click({clickType:a})},[g]):await g.click({clickType:a}),"ignored"===n&&i)try{await sleep3(5e3)}catch(t){}u&&u.currentFlag&&await this.#Hr(e,u,"current");const m=this.#Cr(t,"wait");await this.#$r(m);const y=this.#Cr(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 fileExist(C))break;await sleep3(1e3)}t>=e&&(logwarn(`##te download kId ${this.#y}: failed to download file ${C}`),this.#Sr("other","actionClick","downloadTimeout"))}const v=this.#Cr(t,"pathvarname");return v&&this.#xr(v,C),this.#jr(t),!0}async#Ze(t){return this.#Ar(t),this.#u.loopsStack.length>0?(this.#u.continueFlag=!0,!0):(logerr("##te Error: continue cannot be called outside of loop"),!1)}async#tr(t){this.#Ar(t);const e=this.#Cr(t,"errname");if(!e)return!1;const r=void 0!==this.#Be[e]?this.#Be[e]:-69;throw this.#u.credits=r,new Error(`##te action_throw with errname ${e}`)}#ua(t){try{const e=this.#u.page,r=e?e.url():this.#je.pageUrl?this.#je.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}}#aa(t,e=""){if(!t)return null;try{return e?new RegExp(t,e):new RegExp(t)}catch(t){return this.#Sr("cfginvalid","regExp","invalidRegExp"),null}}async#ma(t,e){let r="text";t&&(r=this.#Cr(t,"type"));let a="step00",s="",n=!0,i=!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&&(n=this.#Or(t,"multieles"),i=this.#Or(t,"trim"),o=this.#Cr(t,"join"),c=this.#Or(t,"line"),l=this.#Or(t,"top")),a="step12";for(let t of e){if(s=await t.innerText(l),i&&(s=s.trim()),!n)break;g.push(s)}a="step13",n&&(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 f=this.#Cr(t,"attrname"),d=this.#Cr(t,"attrname2"),u=this.#Cr(t,"attrname3"),m=this.#Cr(t,"attrname4");i=this.#Or(t,"trim");const y=this.#Cr(t,"pattern"),C=this.#Or(t,"boolattr");n=this.#Or(t,"multieles"),o=this.#Cr(t,"join"),c=this.#Or(t,"line"),p=this.#Or(t,"absolute"),a="step22";for(let t of e){if(C)a="step22",s=await t.hasAttribute(f)?"1":"0";else{a="step23";const e=this.#aa(y);for(const r of[f,d,u,m]){if(!r)break;let a=await t.attribute(r);if(s="string"==typeof a?a:null===a?"":String(a),i&&(s=s.trim()),!e)break;if(s.match(e))break;s=""}p&&(s=this.#ua(s))}if(!n)break;g.push(s),a="step24"}n&&(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(n){throw loginfo(`##te processBrowserElecontentCfg: tId${this.#m} ecCfg: ${JSON.stringify(t).slice(0,200)}`),loginfo(`##te err: ${JSON.stringify(n)}`),loginfo(`##te contentType ${r}, content ${s}, onelineFlag ${c}`),loginfo(`##te message ${a}`),loginfo(`##te $browserEles ${e}, length ${e.length}, e0 ${e[0]}`),new Error(n)}}async#ya(t,e){try{let r="";const a=this.#Cr(t,"defaultval"),s=this.#Or(t,"usevar");let n=this.#_r(t,"fun",!0).map(t=>t[appConfig.XML_ATTR_KEY]);if(s){const t=n;n=[];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.#Ir(t[e],this.#je));n.push(t)}}return r=await getTransformExpStr(e,n,a,this.#Ae),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#Ca(t){if(t){if(!this.#u.popupPage)throw new Error("No valid popup page");return this.#u.popupPage}if(this.#u.page){const t=await this.#u.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#va(t){return await t.free(),!0}#ba(t){const{proxy:e,browserApiContext:r,standaloneApiContext:a}=this.#u;return{proxy:e,page:t,browserApiContext:r,standaloneApiContext:a}}async#wa(t){try{let e="";const r=parseInt(this.#Cr(t,"tid")),a=parseInt(this.#Cr(t,"minlen")),s=this.#Cr(t,"parasstr");let n=this.#Cr(t,"errname");const i=this.#Or(t,"popuppage");if(i&&!this.#u.popupPage){const t="ignore"===n?"cfginvalid":n;this.#Sr(t,"syncSubtask","noPopupPage")}if(s.length>=a){const t=await this.#Ca(i),{taskData:a}=await this.#Fe(r,s,this.#ba(t),"memSync");await this.#va(t);const{credits:n,execData:o}=a;if(i&&(this.#u.popupPage=null),logdbg(`##te memsyncsubtask t${r} p${s} c${n} data: ${JSON.stringify(o)}`),n>=0){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&&1===Object.keys(t[0]).length){const r=Object.keys(t[0])[0];e=t[0][r]}else e=JSON.stringify(o)}else e=JSON.stringify(o);let t=calcGenCredits(n),r=calcCapCredits(n);this.#jr(null,!0,!0,t,r)}}else this.#Sr(n,"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)}}#Sa(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.#_r(e,"httpbrowser");if(a.length>0){const t=[];a.forEach(e=>{const r=this.#Cr(e,"name");r||this.#Sr("cfginvalid","actGetHttpHeaders","invalidName");const a={name:r},s=parseInt(this.#Cr(e,"minversion"));s>0&&(a.minVersion=s);const n=parseInt(this.#Cr(e,"maxversion"));n>0&&(a.maxVersion=n);const i=this.#Cr(e,"httpversion");i&&Number(i)>0&&(a.httpVersion=i),t.push(a)}),r.browsers=t}const s=this.#_r(e,"httpos");if(s.length>0){const t=[];s.forEach(e=>{const r=this.#Cr(e,"os");r||this.#Sr("cfginvalid","actGetHttpHeaders","invalidOsName"),t.push(r)}),r.operatingSystems=t}const n=this.#_r(e,"httpdevice");if(n.length>0){const t=[];n.forEach(e=>{const r=this.#Cr(e,"device");r||this.#Sr("cfginvalid","actGetHttpHeaders","invalidDeviceName"),t.push(r)}),r.devices=t}return r}async#ka(t,e,r){try{let a="",s=[];if("element"===t){const t=this.#Cr(e,"type"),r=this.#_r(e,"element",!0),n=this.#Pr(e,"elecontent"),i=this.#Cr(e,"try",!0,!1),o=i?parseInt(i):1,{elements:c}=await this.#da(r,o);if(s=c,0===s.length){if("length"===this.#Cr(n,"type"))a="0";else if("element"===t&&e[appConfig.XML_ATTR_KEY].colname){const t=this.#Cr(e,"errname");this.#Sr(t,"columnElement","invalidColname")}}else a=await this.#ma(n,c)}else if("templstr"===t){const t=this.#Pr(e,"templstr");a=this.#Cr(t,"templ")}else if("property"===t){const t=this.#Cr(e,"subkeys");a=getSubkeysStrOfObject(r,this.#ca(t))}else if("get"===t){const t=this.#Pr(e,"get"),r=this.#Cr(t,"type");["cookie","httpheaders","localstorage"].includes(r)&&this.#We();const s=this.#Ur(t);let n=this.#u.page,i="page";const o={paras:this.#je};if("screenshot"===r){const e=this.#Dr(t,"element");if(e){const{elements:t}=await this.#da([e],1);if(!(t.length>0))throw new Error("##te no elements selected in get_screenshot");i="element",a=await GetPara.getParaInElement(s,t[0],o)}}else if("cookie"===r||"localstorage"===r)this.#He=!0,o.origStateData=this.#u.origStateData,o.newStateData=this.#u.newStateData,o.domainNames=this.#Le;else if("httpheaders"===r){const e=s.headermethod;o.interceptionData=this.#Ue,"genNewByHttpOptions"===e&&(o.genHeaderOptions=this.#Sa(s,t));const r=[];this.#_r(t,"httpheader",!0).forEach(t=>{let e=this.#Cr(t,"name");if(e=e.toLowerCase().trim(),e){const a=this.#Cr(t,"source"),s=this.#Cr(t,"value"),n=this.#Or(t,"delete");r.push({name:e,source:a,value:s,deleteFlag:n})}}),o.newHttpHeaders=r}else"tabname"===r&&(o.execData=this.#u.execData);n&&"page"===i&&["content","evaluate","mhtml","pdf","screenshot","title","window"].includes(s.type)?a=await GetPara.getParaInPage(s,n,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"===i||this.#Sr("cfginvalid","getPara","invalidType")}else if("subtask"===t){const t=this.#Pr(e,"subtask");loginfo(`##te to execsync subtaskCfg: ${JSON.stringify(t)}`),a=await this.#wa(t)}else{if("ocr"!==t)throw new Error(`##te Invalid content source type: ${t}`);{let t=this.#Pr(e,"ocrcfg");const r=this.#_r(e,"element",!0),{elementSource:s,elements:n}=await this.#da(r,1,!1);if(n.length>0&&(this.#qr(s,"ocr"),a=await this.__processBrowserOcrCfg(t,n),"number"==typeof a&&a<0))throw new Error(`##te Error with ocr content: ${a}`)}}const n=this.#Dr(e,"decodefontsvg"),i=this.#Dr(e,"decodefontttf");(n||i)&&(a=await this.__decodeFontInContent(a,n,i));const o=this.#Dr(e,"transform");return o&&(a=await this.#ya(o,a),null===a&&this.#Sr("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.#u.execData[t]&&this.#u.execData[t].length>0){let a=this.#u.execData[t].length,s=this.#u.execData[t][a-1][e];r=String("boolean"==typeof s?Number(s):s)}return r}async#Ea(t,e,r,a){const s=this.#Cr(t,"valerrname"),n=this.#Cr(t,"pattern");try{this.#Ar(t);const i=this.#Cr(t,"type"),o=this.#Cr(t,"colname");let{content:c}=await this.#ka(i,t,r);if(0===c.length){this.#Or(t,"completed")&&(c=this.#xa(e,o))}if("ignore"!==s&&n){const e=this.#Cr(t,"flags"),r=this.#aa(n,e);r&&!c.match(r)&&this.#Sr(s,"columnContent","validate")}this.#Or(t,"setvar")&&this.#xr(o,c);const l=!!a||this.#Or(t,"discarded"),p={};if(l)return null;{let e;const r=this.#Cr(t,"datatype");return"number"===r?e=this.#Fr(c,"round"):"boolen"===r&&(e=this.#Lr(c)),p[o]="string"===r?c:e,p}}catch(e){throw this.#u.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.#Cr(t,"tabname");if("string"!=typeof e||0===e.length)throw new Error(`##te Invalid table name: ${e}`);this.#u.execData[e]||(this.#u.execData[e]=[]);const r={},a=this.#_r(t,"column",!0);for(let t of a){const a=this.#Cr(t,"colname");if(!(this.#Re.length>0)||this.#Re.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.#u.credits>=0&&loginfo(`##te extract column tId${this.#m} fCfg: ${JSON.stringify(t).slice(0,200)}`),e}}return this.#u.execData[e].push(r),!0}#Ia(t,e){t&&"object"==typeof t||this.#Sr(e,"arrayItem","notNormalObject")}#ca(t){if(!t.trim())return[];const e=t.trim().split(".");if(!e.every(t=>!!t))throw this.#Sr("cfginvalid","actionExtractArray","invalidSubkeys"),new Error("unreachable");return e}#la(t,e,r){if("string"==typeof t&&(t=getJsonParseOfStr5(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.#xr(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=getJsonParseOfStr5(s);"object"==typeof e&&e?t.push(e):this.#Sr(a,"actionExtractArray","invalidArrayItems1")}else this.#Sr(a,"actionExtractArray","invalidArrayItems2")}else t.push(getStringOfObj3(s));return!0}#_a(t,e,r,a,s,n,i,o){let c=this.#u.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.#Vr(t,e))continue;r&&this.#Br(t,e);let c=getSubkeysValueOfDataRecord(g,s);i&&("string"==typeof c&&(c=getJsonParseOfStr5(c)),this.#Ia(c,o)),n&&Array.isArray(c)?this.#Oa(p,c,i,o):this.#Oa(p,[c],i,o)}return p}#Ta(t,e,r){let a=getJsonParseOfStr5(t);if(this.#Ia(a,r),e.length>0&&(a=getMemberOfObject2(a,e),this.#Ia(a,r)),!Array.isArray(a))return[];const s=[];return this.#Oa(s,a,!0,r),s}async#Da(t){const{list:e,requrl:r,setprocessed:a,skipprocessed:s,subkeys:n,arrayinrec:i,keys:o,tabname:c,varname:l,idxname:p,setkeys:g,maxloops:h,errname:f}=this.#Ur(t),d=this.#ca(n);let u;u=isDataTableName(e)?this.#_a(e,r,a,s,d,i,!0,f):this.#Ta(e,d,f);const m=parseInt(h);m>0&&u.length>m&&(u=u.slice(0,m));let y=this.#u.execData[c];if(y||(y=[],this.#u.execData[c]=y),0===u.length)return!0;const C=this.#_r(t,"column",!1),v="*"===o?Array.from(Object.keys(u[0])):o?o.split(","):[],b=C.map(t=>{const e=this.#Cr(t,"colname"),r=this.#Cr(t,"type");return{colName:e,filterFlag:"property"===r&&this.#Or(t,"filter"),jsonFlag:!(!this.#Ie||"property"!==r)&&this.#Or(t,"json"),columnCfg:t}});for(const[t,e]of u.entries()){let r=!0;const a={};l&&this.#xr(l,JSON.stringify(e)),p&&this.#xr(p,String(t)),g&&e&&this.#la(e,g,!0);for(const t of v){const r=getSubkeysStrOfObject(e,[t]);a[t]=r}for(let{colName:t,filterFlag:s,jsonFlag:n,columnCfg:i}of b)try{if(this.#Re.length>0&&!this.#Re.includes(t))continue;let o=await this.#Ea(i,c,e,s);if(o){const e=o[t];if(s){if("string"==typeof e&&!this.#Lr(e)){r=!1;break}}else if(n){let r=getJsonParseOfStr5(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.#u.credits>=0&&loginfo(`##te extract column tId${this.#m} fCfg: ${JSON.stringify(i).slice(0,200)}`),t}r&&y.push(a)}return!0}async#Pa(t,e,r,a){try{const s=Object.assign({},this.#je,{authInfo:null,sysParas:null}),n={vars:s,tabName:r,maxLoops:t,errName:a,execData:this.#u.execData};if(e&&this.#u.page){const t=await this.#u.page.content();n.html=t}return n}catch(t){return null}}#Na(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#Ra(t){const e=this.#Ur(t),{name:r,others:a,tabname:s,maxloops:n,errname:i}=e;if(!r)return!0;try{const t=parseInt(n),e=a.includes("html"),o=await this.#Pa(t,e,s,i);if(!o)return this.#Sr(i,"actionExtractScript","invalidInData"),!1;const c=await LsdScript.execExtractScript(o,r,this.#Ae);if(!this.#Na(c))return this.#Sr(i,"actionExtractScript","invalidResult"),!1;c.errName&&("ignore"===c.errName?this.#Sr(i,"actionExtractScript","resultError1"):this.#Sr(c.errName,"actionExtractScript","resultError2"));const l=this.#u.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.#xr(t,c.vars[t]);return!0}catch(t){return logwarn(t.message),this.#Sr(i,"actionExtractScript","pesaException"),!1}}async#Fa(t){let e="rowspan",r=this.#Tr(`*[${e}]`);const{elements:a}=await this.#La(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.#Tr(`*[${e}]`);const{elements:s}=await this.#La(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}#$a(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#ja(t,e,r,a,s){const n=[],i=[];let o=!1,c=1,l="",p=1,g=this.#Tr("./thead/tr");const{elements:h}=await this.#La(g);if(h.length>1)return this.#Sr(s,"actionExtractTable","manyTheadTrs"),!0;if(1===h.length){o=!0,g=this.#Tr("./thead/tr/th");const{elements:r}=await this.#La(g);if(0===r.length)return this.#Sr(s,"actionExtractTable","noTheadTrTh"),!0;for(const[a,s]of r.entries()){const r=(await s.textContent()).trim(),i=this.#$a(r||"space"+c++,t,e[a]);n.push(i)}}l="./tr",g=this.#Tr(l);let{elements:f}=await this.#La(g);if(0===f.length){l="./tbody/tr",g=this.#Tr(l);let{elements:t}=await this.#La(g);f=t}if(f.length<=1)return this.#Sr(s,"actionExtractTable","noRecord"),!0;if(!o){g=this.#Tr(`${l}[${p}]/*`);let{elements:r}=await this.#La(g);if(0===r.length)return this.#Sr(s,"actionExtractTable","noTr"),!0;for(const[a,s]of r.entries()){const r=(await s.textContent()).trim(),i=this.#$a(r||"space"+c++,t,e[a]);n.push(i)}p++,f=f.slice(1)}const d=n.length;for(const t of f.keys()){if(a>0&&t>=a)break;g=this.#Tr(`${l}[${p+t}]/*`);let{elements:e}=await this.#La(g);if(e.length!==d)return this.#Sr(s,"actionExtractTable","differentColumns"),!0;const r={};for(const t of e.keys()){const a=await e[t].textContent();r[n[t]]=a}i.push(r)}const u=this.#u.execData[r];return Array.isArray(u)?i.forEach(t=>u.push(t)):this.#u.execData[r]=i,!0}async#Ma(t,e,r,a,s){const n=[];let i=0,o="",c=1;o="./tr";let l=this.#Tr(o),{elements:p}=await this.#La(l);if(0===p.length){o="./tbody/tr",l=this.#Tr(o);let{elements:t}=await this.#La(l);p=t}if(0===p.length)return this.#Sr(s,"actionExtractTable","noTrElments"),!0;for(const r of p.keys()){let l=this.#Tr(`${o}[${r+1}]/th`),{elements:p}=await this.#La(l);if(1!==p.length)return this.#Sr(s,"actionExtractTable","noThElements"),!0;const g=(await p[0].textContent()).trim(),h=this.#$a(g||"space"+c++,t,e[r]);let f=this.#Tr(`${o}[${r+1}]/td`),{elements:d}=await this.#La(f);if(0===d.length)return this.#Sr(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,n.push(r)}i=n.length}else{if(d.length<i)return this.#Sr(s,"actionExtractTable","differentVertCols"),!0;for(const t of d.keys()){if(t>=i)break;const e=await d[t].textContent();n[t][h]=e}}}const g=this.#u.execData[r];return Array.isArray(g)?n.forEach(t=>g.push(t)):this.#u.execData[r]=n,!0}async#Ua(t){const{orientation:e,check:r,tabname:a,keyformat:s,colnames:n,maxloops:i,errname:o}=this.#Ur(t),c=n?n.split(","):[],l=this.#_r(t,"element",!0),p=parseInt(i);if(p<0)return!1;if(0===l.length)return this.#Sr("logicerror","actionExtractTable","noEleCfg"),!1;const{elementSource:g,elements:h}=await this.#La(l[0]);if(0===h.length)return this.#Sr(o,"actionExtractTable","noTables"),!0;const f=h[0];if("browser"===g?this.#u.browserElesStack.push(f):"xml"===g?this.#u.cheerioElesStack.push(f):unreachable3(g),this.#u.loopsStack.push(f),r){if(!await this.#Fa("vertical"===e))return this.#Sr("cfginvalid","actionExtractTable","notExtractable"),!1}return"vertical"===e?await this.#Ma(s,c,a,p,o):await this.#ja(s,c,a,p,o),this.#u.loopsStack.pop(),"browser"===g?this.#u.browserElesStack.pop():"xml"===g?this.#u.cheerioElesStack.pop():unreachable3(g),!0}async#er(t){this.#Ar(t);let e=this.#Cr(t,"subtype",!1,!1);try{if(e)if("array"===e)await this.#Da(t);else if("script"===e)await this.#Ra(t);else{if("table"!==e)return this.#Sr("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.#Sr("cfginvalid","actionGoto","invalidHeaders")}}async#rr(t){const e=this.#u.page;if(!e)return this.#Sr("cfginvalid","actionGogo","noPage"),!1;this.#u.browserElesStack.length>0&&this.#Sr("cfginvalid","actionGoto","inLoopOfBrowserElements");let r="";try{this.#Ar(t);const a=this.#Cr(t,"type");r=this.#Cr(t,"url");const s=this.#Cr(t,"wait"),n=this.#Or(t,"reuse"),i=this.#Or(t,"encodeuri"),o=this.#Cr(t,"headers"),c=this.#Cr(t,"referer");if(i&&(r=encodeURI(r)),!this.#Er(r))throw new Error(`##te Invalid url: ${r} when trying to open this page`);if(loginfo(`##te goto url ${r}`),n){if(e.url().includes(r))return await this.#$r(s),this.#jr(t),e}if(this.#Ve=r,o.trim()){const t=this.#Ja(o.trim());t&&await e.setExtraHTTPHeaders(t)}this.#wr(e,a);const l=this.#Mr(t,a);return l&&l.popupFlag?await this.processNewPageLoginCaptcha(l,async(t,e,r)=>{r?await t.goto(e,{waitUntil:"load",timeout:0,referer:r}):await t.goto(e,{waitUntil:"load",timeout:0})},[e,r,c]):await e.goto(r),l&&l.currentFlag&&await this.#Hr(e,l,"current"),await this.#$r(s),this.#jr(t),e}catch(t){if(loginfo(`##te kId${this.#y} goto: ${r}`),-43!==this.#u.credits&&(logerr(`##te kId${this.#y} error credits ${this.#u.credits} in performGotoAction`),logerr(t)),this.#u.credits>=0){const e=t.message?t.message:"";if(e.includes("net::ERR_INTERNET_DISCONNECTED"))this.#vr(-71);else if(e.includes("net::ERR_NAME_NOT_RESOLVED")){await checkDns(appConfig.CHECK_DNS_DOMAIN)?this.#vr(-69):this.#vr(-71)}else e.includes("net::ERR_CONNECTION_TIMED_OUT")?this.#vr(-72):e.includes("net::ERR_CONNECTION_REFUSED")||e.includes("net::ERR_CONNECTION_RESET")?this.#vr(-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.#vr(-86):e.includes("net::ERR_INVALID_AUTH_CREDENTIALS")?this.#vr(-88):(e.includes("Navigation timeout"),this.#vr(-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 sleep3(2e3),r=t}throw r}async#ar(t){const e=this.#u.page;if(!e)return this.#Sr("cfginvalid","actionHover","noPage"),!1;this.#Ar(t);const r=parseInt(this.#Cr(t,"try")),a=this.#Cr(t,"errname");try{const s=this.#_r(t,"element",!0),{elementSource:n,elements:i}=await this.#da(s,r);if(this.#qr(n,"hover"),0===i.length)return this.#Sr(a,"actionHover","noElements"),e;this.#Rr()&&await e.bringToFront(),logdbg(`##te pageIdx${this.#Nr().pageIdx} hover`),await this.#Ha(i[0]);const o=this.#Cr(t,"wait");return await this.#$r(o),this.#jr(t),e}catch(t){return loginfo(t),this.#Sr("other","actionHover","phaException"),e}}async#qa(t){this.#Ar(t);const e=this.#Cr(t,"type");let r=!1;if(["element","templstr"].includes(e))try{"templstr"===e&&this.#We();let a="";a=(await this.#ka(e,t)).content,r=this.#Lr(a)}catch(t){throw t}finally{this.#Ke()}else{if("else"!==e)throw new Error("##te Invalid type(condition)");r=!0}if(r){const e=this.#_r(t,"action");await this.#Ba(e)}return r}async#sr(t){this.#Ar(t);const e=this.#_r(t,"condition");for(let t of e)if(await this.#qa(t))break;return!0}async#nr(t){if(!this.#u.page)return this.#Sr("cfginvalid","actionInput","noPage"),!1;this.#Ar(t);const e=this.#Cr(t,"content"),r=this.#Or(t,"replace"),a=this.#Or(t,"enter"),s=parseInt(this.#Cr(t,"try")),n=this.#Cr(t,"errname"),i=this.#_r(t,"element",!0);try{const{elementSource:o,elements:c}=await this.#da(i,s);if(this.#qr(o,"input"),0===c.length)return this.#Sr(n,"actionInput","noElements"),!1;await c[0].input(e,{replace:r,enter:a});const l=this.#Cr(t,"wait");return await this.#$r(l),this.#jr(t),!0}catch(t){return logerr(t),!1}}#Ur(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.#Ir(r[t],this.#je));return r}#Va(t){const e=[];for(const r of t){const{type:t,method:a,url:s,resourcetype:n,postdata:i}=r,o={};if(a&&"all"!==a&&(o.methods=[a.toUpperCase()]),s&&(o.url=new RegExp(s)),n&&"all"!==n&&(o.resourceTypes=[n]),i&&(o.postData=new RegExp(i)),"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}#Wa(t){const e=[];for(const r of t){const{type:t,method:a,url:s,resourcetype:n,postdata:i,minsize:o,maxsize:c}=r,l={};a&&"all"!==a&&(l.methods=[a.toUpperCase()]),s&&(l.url=new RegExp(s)),n&&"all"!==n&&(l.resourceTypes=[n]),i&&(l.postData=new RegExp(i));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:n,cacheheaders:i}=r,o=Number(t.slice(4)),c=i&&o<=7999&&(this.#m<1e6||!this.#ke.capName),g={requestMatch:l,responseMatch:p,handler:responseCacheCb,handlerOptions:{execData:this.#u.execData,contentType:a,tabname:t,requestHeadersFlag:s,responseHeadersFlag:n,cacheHeadersFlag:c,interceptionData:this.#Ue,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:n,hostnameparts:i,params:o,pathtype:c,tabname:g,validextnames:h}=r,f={requestMatch:l,responseMatch:p,handler:responseSaveCb,handlerOptions:{execData:this.#u.execData,baseDir:t,pathType:c,hashMethod:n,hostnameParts:parseInt(i),extname:s,validExtnames:h,params:o,encoding:a,tabname:g}};e.push(f)}}}return e}async#ir(t){const e=this.#u.page;if(!e)return this.#Sr("cfginvalid","actionIntercept","noPage"),!1;this.#Ar(t);const r=this.#Cr(t,"subtype");let a=this.#_r(t,"request"),s=this.#_r(t,"response");try{if(a=a.map(t=>this.#Ur(t)),s=s.map(t=>this.#Ur(t)),"set"===r){if(a.length<=0&&s.length<=0&&this.#Sr("cfginvalid","actionIntercept","noCfgs"),a.length>0){const t=this.#Va(a);await e.setRequestInterception(t)}if(s.length>0){const t=this.#Wa(s);await e.setResponseInterception(t)}}else"clear"===r&&(await e.clearRequestInterceptions(),await e.clearResponseInterceptions());return!0}catch(t){return logerr(t),!1}}async#cr(t){this.#Ar(t);try{const e=this.#Cr(t,"errname");let r=this.#Cr(t,"roundtype"),a=this.#Fr(this.#Cr(t,"from"),r),s=this.#Fr(this.#Cr(t,"to"),r),n=this.#Fr(this.#Cr(t,"step"),r),i=this.#Cr(t,"varname"),o=this.#Fr(this.#Cr(t,"maxloops"),r);if(o<0)return!1;let c=0;for(let e=a;e<=s&&!(o&&c++>=o);e+=n){this.#u.loopsStack.push(e),this.#xr(i,String(e));const r=this.#_r(t,"action");if(await this.#Ba(r),this.#u.loopsStack.pop(),this.#u.continueFlag&&(this.#u.continueFlag=!1),this.#u.breakFlag){this.#u.breakFlag=!1;break}}return c<1&&this.#Sr(e,"actionLoopfor","zeroLoops"),!0}catch(t){throw t}}async#La(t){try{const e=this.#Cr(t,"loc").trim(),r=this.#yr(t),a=this.#Or(t,"absolute"),s=this.#_r(t,"iframe",!1).map(t=>this.#Ur(t)).map(t=>{const{srcprefix:e,loc:r}=t;return{src:e,selector:r}}),n=this.#u.page,i={elementSource:r,elements:[]};if("browser"===r){if(!n)throw new Error("Cannot get elements from null browser page");if(0===this.#u.browserElesStack.length)i.elements=await n.findElements(e,s);else{const t=this.#u.browserElesStack.slice(-1)[0];i.elements=await t.findElements(e,s,a)}return i}if("xml"===r){if(s.length>0)throw new Error("Iframe config is invalid in cheerio source");let t=this.#u.cheerioPage;if(!t){if(!n)throw new Error("Please set CheerioPage first, from which to select elememnts");const e=await n.content();e.length>10&&(this.#kr(e,!0),t=this.#u.cheerioPage)}if(!t)throw new Error("Cannot get elements from null cheerioPage");if(0===this.#u.cheerioElesStack.length)i.elements=await t.findElements(e);else{const t=this.#u.cheerioElesStack.slice(-1)[0];i.elements=await t.findElements(e,s,a)}return i}unreachable3(r)}catch(e){throw loginfo(`##te processElementCfg: tId${this.#m} eleCfg: ${JSON.stringify(t).slice(0,200)}`),new Error(e)}}async#da(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 n=[];for(const a of t){const{elementSource:t,elements:s}=await this.#La(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=>n.push(t)),r))break}if(e&&(a.elementSource=e),n.length>0)return a.elements=n,a;s>0&&(loginfo(`##tmp ${s} try failed in getEleOrTemplTransform`),await sleep3(1e3))}return a}catch(e){throw loginfo(`##te processElementCfgs: eleCfgs: ${JSON.stringify(t).slice(0,200)}`),new Error(e)}}async#lr(t){if(!this.#u.page)return this.#Sr("cfginvalid","actionLoopineles","noPage"),!1;this.#Ar(t);const e=this.#Cr(t,"varname"),r=e.startsWith("position"),a=this.#Cr(t,"errname"),s=this.#_r(t,"element",!0);let n=this.#Fr(this.#Cr(t,"maxloops"),"round"),i=this.#Fr(this.#Cr(t,"start"),"round"),o=this.#Fr(this.#Cr(t,"end"),"round"),c=this.#Fr(this.#Cr(t,"step"),"round");if(c<1&&(c=1),n<0)return!1;const{elementSource:l,elements:p}=await this.#da(s,1),g=p.length;if(0===g)return this.#Sr(a,"actionLoopineles","noElements"),!0;i<=0&&(i+=g),o<=0?o+=g:o>g&&(o=g);let h=0;for(let a=i-1;a<o&&!(n&&h>=n);a+=c){e&&this.#xr(e,String(r?a+1:a));const s=p[a];"browser"===l?this.#u.browserElesStack.push(s):"xml"===l?this.#u.cheerioElesStack.push(s):unreachable3(l),this.#u.loopsStack.push(s);const n=this.#_r(t,"action");if(await this.#Ba(n),this.#u.loopsStack.pop(),"browser"===l?this.#u.browserElesStack.pop():"xml"===l?this.#u.cheerioElesStack.pop():unreachable3(l),h++,this.#u.continueFlag&&(this.#u.continueFlag=!1),this.#u.breakFlag){this.#u.breakFlag=!1;break}}return!0}async#pr(t){this.#Ar(t);let e=this.#Cr(t,"split");const r=this.#Or(t,"trim"),a=this.#Cr(t,"errname"),s=this.#Cr(t,"list"),n=this.#Cr(t,"requrl"),i=this.#Or(t,"setprocessed"),o=this.#Or(t,"skipprocessed"),c=this.#Cr(t,"subkeys"),l=this.#Or(t,"arrayinrec"),p=this.#ca(c),g=this.#Cr(t,"varname"),h=this.#Cr(t,"idxname"),f=this.#Cr(t,"setkeys");let d=[];if("array"===e){const t=getJsonParseOfStr5(s);if(!Array.isArray(t)||0===t.length)return this.#Sr(a,"actionLoopineles","array"),!1;d=t.map(t=>getSubkeysStrOfObject(t,p))}else if(isDataTableName(s)){if(d=this.#_a(s,n,i,o,p,l,!1,a),!Array.isArray(d))return this.#Sr(a,"actionLoopineles","tabname"),!1}else{let t;try{t=new RegExp(e)}catch(e){throw new Error(`##te Invalid regexp: ${t}`)}d=r?s.trim().split(t).map(t=>t.trim()).filter(t=>t.length>0):s.split(t),p.length>0&&(d=d.map(t=>getSubkeysStrOfObject(getJsonParseOfStr5(t),p)))}let u=this.#Fr(this.#Cr(t,"maxloops"),"round");u>0&&d.length>u&&(d=d.slice(0,u)),d.length<1&&this.#Sr(a,"actionLoopinstr","zeroLoops");for(let[e,r]of d.entries()){this.#u.loopsStack.push(r),g&&this.#xr(g,r),h&&this.#xr(h,String(e)),f&&this.#la(r,c,!0);const a=this.#_r(t,"action");if(await this.#Ba(a),this.#u.loopsStack.pop(),this.#u.continueFlag&&(this.#u.continueFlag=!1),this.#u.breakFlag){this.#u.breakFlag=!1;break}}return!0}async#or(t){this.#Ar(t);const e=this.#Cr(t,"subtype"),r=this.#Or(t,"iswhile"),a=this.#Cr(t,"varname"),s="element"===e&&this.#Or(t,"click"),n=(this.#Or(t,"navigate"),"element"===e&&this.#Or(t,"gen")),i="element"===e&&this.#Or(t,"cap"),o=s?this.#Cr(t,"errname"):"ignore",c=s?this.#Cr(t,"wait"):"-1";let l=this.#Fr(this.#Cr(t,"maxloops"),"round");if(l<0)return!1;let{content:p,elements:g}=await this.#ka(e,t),h=0;for(;0===h&&!r||this.#Lr(p);){a&&this.#xr(a,String(h)),"element"!==e||!s||this.#Pe.includes("click")||this.#Pe.includes("operate")||(g.length<=0?this.#Sr(o,"actionLoopdowhile","noElements"):(await g[0].click(),this.#jr(t,n,i))),this.#u.loopsStack.push(h);const r=this.#_r(t,"action");if(await this.#Ba(r),this.#u.loopsStack.pop(),this.#u.continueFlag&&(this.#u.continueFlag=!1),this.#u.breakFlag){this.#u.breakFlag=!1;break}if(await this.#$r(c),h++,l&&h>=l)break;let f=await this.#ka(e,t);p=f.content,g=f.elements}return!0}async#Ka(t){const e=this.#Cr(t,"cookies"),r=this.#Cr(t,"localstorage"),a=this.#Cr(t,"headers"),s=this.#Cr(t,"userdata"),n=this.#Cr(t,"duration"),{cookies:i,origins:o,userData:c}=this.#u.origStateData,l={cookies:[],origins:[],headers:{},userData:{}};let p;if("orig"===e)l.cookies=i;else if("new"===e)if(this.#u.page)l.cookies=await this.#u.page.cookies();else{if(!this.#u.standaloneApiContext)throw new Error(`##templ ${this.#m} has no page when getting stateData of page`);p||(p=await this.#u.standaloneApiContext.stateData()),l.cookies=p.cookies}if("orig"===r)l.origins=o;else if("new"===r)if(this.#u.page)l.origins=await this.#u.page.localStroage();else{if(!this.#u.standaloneApiContext)throw new Error(`##templ ${this.#m} has no page when getting stateData of page`);p||(p=await this.#u.standaloneApiContext.stateData()),l.origins=p.origins}const g=this.#Ue;g[a]&&(l.headers=Object.assign({},g[a])),"orig"===s?l.userData=c:"new"===s&&(l.userData=Object.assign({},this.#je.userData)),n&&(l.expireTime=getCurrentUnixTime2()+parseInt(n)),this.#u.newStateData=l}async _performGetstatedataInMisc(t){return await this.#Ka(t)}async#gr(t){const e=this.#u.page;if(!e)return this.#Sr("cfginvalid","actionScroll","noPage"),!1;this.#Ar(t);const r=this.#Cr(t,"subtype");let a=["by","to"].includes(r)?parseInt(this.#Cr(t,"height")):0;const s=["by","to"].includes(r)?this.#Cr(t,"unit"):"none";let n=0,i="";"bodypct"===s?(i=await e.windowMember(["document","body","scrollHeight"]),n=parseInt(i)):"screenpct"===s?i=await e.windowMember(["screen","height"]):"windowpct"===s&&(i=await e.windowMember(["innerHeight"]));const o=i?parseInt(i):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.#Cr(t,"maxtimes")):0;const l="by"===r?parseInt(this.#Cr(t,"interval")):0;if("by"===r){if(0===c){if(n<=0){const t=await e.windowMember(["document","body","scrollHeight"]);n=parseInt(t)}c=Math.ceil(n/a-1)}else c>200?c=200:c<0&&(c=10);for(let r=0;r<c;r++){await e.scrollBy(0,a),await sleep3(l);const r=this.#_r(t,"element");if(r&&r.length>0){const{elementSource:t,elements:e}=await this.#da(r,1);if(this.#qr(t,"scrollBy"),e.length>0)break}}}else if("to"===r)await e.scrollTo(0,a);else if("intoview"===r){const e=this.#_r(t,"element",!0),{elementSource:r,elements:a}=await this.#da(e,1);if(this.#qr(r,"scrollIntoView"),a.length<=0){const e=this.#Cr(t,"errname");return this.#Sr(e,"actionScrollIntoview","noElements"),!1}await a[0].scrollIntoView()}return this.#jr(t),!0}async#Ga(t,e,r,a,s=1){if(t.length<=0)throw new Error("##te No element cfg in select action");const{elementSource:n,elements:i}=await this.#da(t,s);if(this.#qr(n,"select"),i.length<=0)return this.#Sr(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):unreachable3(e),await i[0].select(o),!0}async#hr(t){const e=this.#u.page;if(!e)return this.#Sr("cfginvalid","actionSelect","noPage"),!1;e.title,this.#Ar(t);const r=this.#Cr(t,"selecttype"),a=this.#Cr(t,"selectval"),s=parseInt(this.#Cr(t,"try")),n=this.#Cr(t,"errname"),i=this.#_r(t,"element",!0);await this.#Ga(i,r,a,n,s);const o=this.#Cr(t,"wait");return await this.#$r(o),this.#jr(t),!0}async#Qr(t,e,r){try{let a=JSON.parse(t);if(!a||"object"!=typeof a)return null;for(const t of e){const e=this.#Cr(t,"key");let s=this.#Cr(t,"value");"__this__"!==s&&"__self__"!==s||(s=JSON.stringify(a));const n=this.#Cr(t,"datatype"),i=this.#Cr(t,"operate"),o=this.#Cr(t,"varname");if("delete"===i){delete a[e];continue}if(("push"===i||"unshift"===i)&&!Array.isArray(a))return null;const c=this.#Dr(t,"transform");c&&(s=await this.#ya(c,s)),o&&(o===r?a=JSON.parse(s):this.#xr(o,s));const l=this.#Yr(s,n);"set"===i?a[e]=l:"push"===i?a.push(l):"unshift"===i?a.unshift(l):"discard"===i||unreachable3(i)}return logerr("##tmp data: ",a),a}catch(t){return null}}async#fr(t){this.#Ar(t);const e=this.#Cr(t,"subtype"),r=e.slice(0,1).toUpperCase()+e.slice(1),a=this.#Cr(t,"varname"),s=this.#Cr(t,"setkeys"),n=this.#Cr(t,"errname"),i=this.#Cr(t,"valerrname"),o=this.#Cr(t,"pattern"),c=this.#Cr(t,"defaultval");let l=this.#Cr(t,"path"),p="";try{if(["element","get","templstr","subtask","ocr"].includes(e)){"templstr"===e&&this.#We();p=(await this.#ka(e,t)).content}else if("object"===e){this.#We();const e=this.#Cr(t,"data"),r=this.#_r(t,"object",!0),s=await this.#Qr(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.#Pr(t,"file");let a=this.#Cr(e,"path");const s=this.#Cr(e,"encoding");a.includes("..")&&this.#Sr("cfginvalid",`actionSetvar${r}`,"invalidSourceFilename"),path5.isAbsolute(a)?appConfig.cfg.inputFileDirPart&&!path5.dirname(a).split(path5.sep).includes(appConfig.cfg.inputFileDirPart)&&"ignore"===n&&this.#Sr("normal",`actionSetvar${r}`,"notSecurePath"):a=path5.join(appConfig.cfg.baseFileDir,a),p=fs6.readFileSync(a,{encoding:s})}}if("ignore"!==i&&o){const e=this.#Cr(t,"flags"),a=this.#aa(o,e);a&&!p.match(a)&&this.#Sr(i,`actionSetvar${r}`,"validate")}return!p&&c&&(p=c),a&&this.#xr(a,p),s&&p&&this.#la(p,s,!0),l&&(l=this.#na(l),fs6.writeFileSync(l,p)),!0}catch(t){return loginfo(t),t.message.includes("invalidTaskParas")?(this.#Sr("parasinvalid","actionSetvar","invalidParasstr"),!1):(p="",this.#Sr(n,`actionSetvar${r}`,"psaException"),!1)}finally{this.#Ke()}}async#dr(t){this.#Ar(t);const e=this.#Cr(t,"subtasks"),r=this.#Or(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.#u.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.#u.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.#_r(t,"subtask");for(const t of a){const e=parseInt(this.#Cr(t,"tid")),a=parseInt(this.#Cr(t,"minlen")),s=this.#Cr(t,"parasstr"),n=this.#Cr(t,"idx").trim(),i=n.length>0&&n.match(/^[0-9]+$/)?parseInt(n):0,o=this.#Cr(t,"errname"),c=this.#Or(t,"popuppage");if(c&&!this.#u.popupPage){const t="ignore"===o?"cfginvalid":o;this.#Sr(t,"actionSubtask","noPopupPage")}if(s.length>=a)if(c){const t=await this.#Ca(c),r=await this.#Fe(e,s,this.#ba(t),"indSync");await this.#va(t),this.#u.popupPage=null;const{credits:a,execData:n}=r.taskData;a<-1?this.#Sr(o,"actionSubtask","SyncIndepFailed"):(this.#u.subtaskResults.push(r),logdbg(`##te indsyncsubtask t${e} p${s} c${a} data: ${JSON.stringify(n)}`))}else{if(!this.#u.subtasks.find(t=>t.tid===e&&t.parasstr===s)){const t={tid:e,parasstr:s};i>0&&(t.idx=i),r&&(t.sapFlag=!0),this.#u.subtasks.push(t)}}}return!0}#za(t){if(!this.#Ie)return!0;const e=this.#Cr(t,"optype"),r=this.#Cr(t,"tabname");let a=this.#Cr(t,"prefix");const s=this.#Or(t,"requestheaders");let n="";if("read"===e||"readwrite"===e){const t=this.#u.execData[r];if((!Array.isArray(t)||0===t.length)&&(n=this.#ia(a,r),n)){const t=getJsonParseOfStr5(n);if(t&&Array.isArray(t)&&(this.#u.execData[r]=t),t.length>0&&s){const e=this.#Ue,{requestUrl:r="",requestHeaders:a="",requestData:s=""}=t[t.length-1];e.cachedRequestUrl=r,e.cachedRequestHeaders=a,e.cachedRequestData=s}}}if("write"===e||"readwrite"===e){const t=this.#u.execData[r];if(Array.isArray(t)&&t.length>0){const e=this.#ia(a,r);n=JSON.stringify(t),e.length===n.length&&e===n||this.#oa(JSON.stringify(t),a,r)}}return!0}#Ya(t){const e=this.#Ur(t),{tabname:r,keys:a,keep:s}=e;this.#Wr(r)&&this.#Sr("cfginvalid","actionTabname","tabnameDeduplicate");const n=this.#u.execData[r];if(!Array.isArray(n)||0===n.length)return!0;const i=n.length,o="first"===s?0:n.length-1,c=a.split(","),l=new Set,p=[];for(let t=o;t<i&&t>=0;){const e=n[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.#u.execData[r]=p,!0}#Xa(t){const e=this.#Ur(t),{tabname:r}=e;return delete this.#u.execData[r],delete this.#u.processedExecData[r],!0}async#Qa(t){const e=this.#Ur(t),{tabname:r,varname:a,subkeys:s}=e;this.#Wr(r)&&this.#Sr("cfginvalid","actionTabname","tabnameFilter");const n=this.#u.execData[r];if(!Array.isArray(n)||0===n.length)return!0;const i=[],o=this.#ca(s);for(const e of n){const r=getSubkeysStringOfDataRecord(e,o);this.#xr(a,r);const s=(await this.#ka("templstr",t)).content;this.#Lr(s)&&i.push(e)}return this.#u.execData[r]=i,!0}async#ur(t){this.#Ar(t);const e=this.#_r(t,"tabname");for(const t of e){const e=this.#Cr(t,"type");"cache"===e?this.#za(t):"deduplicate"===e?this.#Ya(t):"delete"===e?this.#Xa(t):"filter"===e?await this.#Qa(t):unreachable3(e)}return!0}async#mr(t){this.#Ar(t);const e=this.#Cr(t,"subtype"),r=this.#Cr(t,"errname"),a=this.#Cr(t,"wait");if("sleep"===e){const e=parseInt(this.#Cr(t,"minms")),r=parseInt(this.#Cr(t,"maxms")),s=getRandomInt(e,r);return await sleep3(s),await this.#$r(a),!0}const s=this.#u.page;if("element"===e){if(!s)return this.#Sr("cfginvalid","actionWaitElement","noPage"),!1;const e=this.#_r(t,"element",!0);e.length<=0&&this.#Sr("cfginvalid","actionWaitElement","noElements");const a=this.#Cr(e[0],"loc"),n=parseInt(this.#Cr(t,"timeout")),i=this.#Cr(t,"state");try{await s.waitForElement(a,{timeout:n,state:i})}catch(t){logerr(t),this.#Sr(r,"actionWaitElement","pwaException")}}else if("navigation"===e){if(!s)return this.#Sr("cfginvalid","actionWaitNavigation","noPage"),!1;const e=parseInt(this.#Cr(t,"timeout")),a=this.#Cr(t,"waituntil"),n=this.#Cr(t,"url");a||this.#Sr("cfginvalid","actionWaitNavigation","invlidWaitUntil");try{if(n){const t=new RegExp(n);await s.waitForNavigation({url:t,timeout:e,waitUntil:a})}else await s.waitForNavigation({timeout:e,waitUntil:a})}catch(t){logerr(t),this.#Sr(r,"actionWaitNavigation","pwaException")}}else this.#Sr("cfginvalid","actionWait","invalidSubtype");return await this.#$r(a),!0}#Za(t,e){return this.#Ne?2===e||3!==e&&(!(!this.#Pe.includes("operate")||!appConfig.OPERATE_ACTIONS.includes(t))||!!this.#Pe.includes(t)):1===e||this.#Pe.includes(t)||this.#Pe.includes("operate")&&appConfig.OPERATE_ACTIONS.includes(t)}async#Ba(t){if(!Array.isArray(t))throw new Error("##te Ivalid action configs(actions)");for(const e of t)try{const t=this.#Cr(e,"type"),r=this.#Cr(e,"id"),a=Number(r);if(this.#Za(t,a))continue;if(await this.#qe[t].call(this,e),this.#u.continueFlag||this.#u.breakFlag)break}catch(t){throw this.#u.credits>=0&&(loginfo(`##te tId${this.#m}, aCfg: ${JSON.stringify(e).slice(0,200)}`),loginfo(`##te err.stack: ${t.stack}`)),t}}async#ts(){try{const t=this.#u.page,e=this.#Oe.captchaTypes;t&&e.length>0&&await injectScripts(t,e);const r=this.#_r(this.#xe,"action");await this.#Ba(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})}}#es(){const t={};for(const[e,r]of Object.entries(this.#je))"string"==typeof e&&"string"==typeof r&&(t[e]=r);return t}#rs(){const t=this.#u.page;if(t){t.on(appConfig.EVENT_TYPES.lsdPageClose,()=>{this.emit(appConfig.EVENT_TYPES.taskComplete,{code:1005,message:"pageClosed",data:null})});const e=this.#ke.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})})}}#as(){const t=this.#u.page;t&&(t.removeAllListeners(appConfig.EVENT_TYPES.lsdPagePopup),t.removeAllListeners(appConfig.EVENT_TYPES.lsdPageClose)),this.removeAllListeners(appConfig.EVENT_TYPES.taskComplete)}async run(){const t=getCurrentUnixTime2(),e={templateId:this.#m,parasStr:this.#Me,credits:0,execData:{},subtasks:[]},r=this.#u.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.#rs(),this.#ts();const[s]=await 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.#Sr("other","task","pageClosed"):1009===s.code&&this.#Sr("tetimeout","task","teTimeout");r&&this.#Ve!==r.url()&&loginfo(`##te kId${this.#y} endUrl: ${r.url()}`);const n=this.#u.subtasks.length;n>0&&loginfo(`##te kId${this.#y} has ${n} subtasks`);for(let t of Object.keys(this.#u.execData)){const e=this.#u.execData[t].length;loginfo(`##te kId${this.#y} tablename ${t} has ${e}`)}this.#as(),loginfo(`##tmp teSucceeded kId${this.#y} tId${this.#m} sec ${getCurrentUnixTime2()-t}`),e.execData=this.#u.execData,e.subtasks=this.#u.subtasks,e.credits=this.#u.credits,this.#u.subtaskResults.length>0&&(a=this.#u.subtaskResults.map(t=>t.taskData)),await this.__whenTaskEndFun(),e.credits<-30&&logwarn(`##te taskId ${this.#y} credits ${e.credits}`);const i={taskData:e,subtaskDatas:a,newStateData:this.#u.newStateData?this.#u.newStateData:void 0};if(this.#Ie){const t={taskId:this.#y,message:"succeeded",stack:"",variables:this.#es()};i.misc=t}return i}catch(t){e.execData=this.#u.execData,e.subtasks=this.#u.subtasks,e.credits=this.#u.credits,this.#u.subtaskResults.length>0&&(a=this.#u.subtaskResults.map(t=>t.taskData));const s=this.#u.newStateData?this.#u.newStateData:void 0,n="string"==typeof t?.stack?t.stack:"unkown",i={taskId:this.#y,message:"unknown",stack:n,variables:this.#es()};if(this.#as(),await this.__whenTaskEndFun(),this.#u.credits>=0)logerr(`##te Exeception in ScraperTask.run: kId ${this.#y}`),logerr(t);else{if(-1===this.#u.credits)return{taskData:e,subtaskDatas:a,newStateData:s,misc:i};if(this.#u.credits>-30)return{taskData:e,subtaskDatas:a,newStateData:s,misc:i};if(2===this.#y&&"check"===this.#Me&&r){logdbg(`##cap loginCheckFailed capabilityId ${0} credits: ${this.#u.credits}`)}else 11===this.#y||-69===this.#u.credits||logwarn(`##te taskExec run execption: templateId ${this.#m}, paras ${this.#Me}, credits ${this.#u.credits}`)}return logwarn(`##tmp taskExec run execption: templateId ${this.#m}, paras ${this.#Me}, credits ${this.#u.credits}`),e.credits=this.#u.credits>=0?-99:this.#u.credits,{taskData:e,subtaskDatas:a,newStateData:s,misc:i}}}async __performMiscAction(t){this.#Ar(t);const e=this.#_r(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.#Cr(t,"type");switch(e){case"delsyncdbdata":case"extractdata":this.#Sr("cfginvlid","notSupported",e);break;case"getstatedata":await this.#Ka(t);break;default:unreachable3(e)}}return!0}async __processDbquery(t,e){return(t||e)&&this.#Sr("cfginvlid","notSupported","dbquery"),""}async __processBrowserOcrCfg(t,e){return(t||e)&&this.#Sr("cfginvlid","notSupported","ocr"),""}async __decodeFontInContent(t,e,r){return(t||e||r)&&this.#Sr("cfginvlid","notSupported","decodeFont"),""}async __whenTaskEndFun(){return!0}};import*as path6 from"path";import*as fsp2 from"fs/promises";import{filesInDir as filesInDir2,fsCheckOrCreateDir as fsCheckOrCreateDir2,getLocalDateNumber as getLocalDateNumber2,isDirectory,isFile}from"@letsscrapedata/utils";async function moveDataFiles(){try{const t=appConfig.cfg.exportsDir;if(!t||!isDirectory(t))return!1;const e=await filesInDir2(t,"general","dat_");if(0===e.length)return!0;const r=getLocalDateNumber2(),a=path6.join(t,String(r));await fsCheckOrCreateDir2(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 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&&isDirectory(e)&&r&&a))return!1;for(const[s,n]of Object.entries(t)){const t=path6.join(e,`${s}.${r}`);await writeDataIntoOneFile(t,n,a)}return!0}catch(t){return logerr(t),!1}}async function performOneTask(t,e,r,a="indAsync",s="",n=0){try{const i=await TemplateManagerInScraper.getTemplateConfig(t,s),{template:o,actionConfigs:c,fontsConfig:l,templScripts:p,paraCfgs:g,attrsInXml:h,captchaTypes:f,secureDataFlag:d}=i,u={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===n&&h?{skipActions:m?m.split(","):[],extractColumns:y?y.split(","):[]}:{};w.secureDataFlag=d,w.captchaOptions={captchaTypes:f};const S=new TaskScraper(u,b,r,w),k=await S.run(),x=k.taskData.execData;for(const t of Object.keys(x))t.startsWith("dat_0000000000006")&&delete x[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: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:getLocalDateString()}]};await saveExecDataOfTask(r)}return{taskData:{templateId:t,parasStr:e,credits:0,execData:{},subtasks:[]},subtaskDatas:[],misc:s}}}appConfig.performOneTask=performOneTask;import*as path8 from"path";import{getRandomArrayIdx,sleep as sleep4}from"@letsscrapedata/utils";import{controller as controller2}from"@letsscrapedata/controller";var BrowserManagerInScraper=class{#ss;#ns;#is;#os;#cs(t){const e=this.#ss.templateParas.find(e=>e.templateId===t);return e?.maxConncurrency?e.maxConncurrency:this.#ss.maxConcurrency}async#ls(t,e){const r=await controller2.newApiContext({proxy:e}),a="playwright"===t.browser().browserControllerType()?t.apiContext():null;this.#os.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:n,templateParas:i}=appConfig.cfg,o=Array.isArray(appConfig.cfg.browserConfigs)&&appConfig.cfg.browserConfigs.length>0?appConfig.cfg.browserConfigs:[{browserControllerType:e,browserType:r,proxyUrl:""}];this.#ss={useStealthPlugin:t,browserControllerType:e,browserType:r,lsdLaunchOptions:a,lsdConnectOptions:s,browserConfigs:o,maxConcurrency:n,templateParas:i},this.#ns=controller2,["playwright","puppeteer"].includes(e),this.#is=[],this.#os=[]}async init(){const{browserControllerType:t,browserType:e,lsdLaunchOptions:r,lsdConnectOptions:a}=this.#ss;for(const s of this.#ss.browserConfigs){const{browserControllerType:n=t,browserType:i=e,browserUrl:o,proxyUrl:c=""}=s,l=this.#ps(c);if(o){const t=Object.assign({},a,{browserUrl:o}),e=await this.#ns.connect(n,i,t);this.#is.push(e);for(const t of e.browserContexts())await this.#ls(t,l)}else if("string"==typeof c){const t=c?l:void 0,e=Object.assign({},r,{proxy:t}),a=await this.#ns.launch(n,i,e);this.#is.push(a);for(const t of a.browserContexts())await this.#ls(t,l)}}return await sleep4(2e3),!0}#ps(t,e="",r="",a=""){return{proxyUrl:t,proxyId:e||t,username:r,password:a}}async getTaskNetworkContext(t=0){if(0===this.#os.length)throw new Error("please call init() first to launch or connect browsers.");let e;const r=getRandomArrayIdx(this.#os.length);for(const a of r){const r=this.#os[a],{proxy:s,browserContext:n,browserApiContext:i,standaloneApiContext:o,templateMap:c}=r;if(t>0&&(e=c.get(t),e||(e={templateId:t,maxConcurrency:this.#cs(t),running:0},c.set(t,e)),e.maxConcurrency<=e.running))continue;if(!n.hasFreePage())continue;const l=await n.getPage();return l?(t>0&&e&&e.running++,l.setPageInfo({relatedId:t}),{proxy:s,page:l,browserApiContext:i,standaloneApiContext:o}):null}return null}async freePage(t){const e=t.pageInfo().relatedId;if(e>0){const r=t.browserContext().id(),a=this.#os.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}};import*as fsp3 from"fs/promises";import*as path7 from"path";import{filesInDir as filesInDir3,isDirectory as isDirectory2,isFile as isFile2,sleep as sleep5}from"@letsscrapedata/utils";var SchedulerInScraper=class t{#gs;#hs;#fs;#ds;runningTaskSet;static#us="\n";static#ms=!1;constructor(t){this.#gs=new Map,this.#hs=appConfig.cfg.taskDir,this.#fs=appConfig.cfg.exitWhenCompleted,this.#ds=t,this.runningTaskSet=new Set}async#ys(e,r=!1){try{const a=(await fsp3.readFile(e,"utf8")).split(t.#us),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#Cs=new Map;async#vs(e,r,a=!1){if(t.#Cs.get(r)){for(let e=0;e<50&&(await sleep5(200),t.#Cs.get(r));e++);if(t.#Cs.get(r))return!1}t.#Cs.set(r,!0);try{if(a){const a=path7.join(this.#hs,`failedtempl${r}.txt`);return await fsp3.appendFile(a,e.join(t.#us).concat(t.#us)),!0}{const a=path7.join(this.#hs,`tid${r}.txt`);return e.length>0?await fsp3.writeFile(a,e.join(t.#us)):await isFile2(a)&&await fsp3.unlink(a),t.#Cs.delete(r),!0}}catch(e){return logwarn(`Failed to write task queue of tempatedId ${r} into file`),t.#Cs.delete(r),!1}}async#bs(){const t=appConfig.cfg.taskDir;if(!t||!isDirectory2(t))return!1;const e=await filesInDir3(t,"general","failedtempl","txt");for(const r of e){const e=parseInt(r.slice(11,-4)),a=await this.#ys(path7.join(t,r),!0);if(a.length>0){loginfo(`load unfinished ${a.length} tasks of templateId ${e}`);const t=this.#gs.get(e);t?a.forEach(e=>t.push(e)):this.#gs.set(e,a)}}return!0}async#ws(t=!1){const e=appConfig.cfg.taskDir;if(!e||!isDirectory2(e))return!1;const r=await filesInDir3(e,"general","templ","txt");for(const t of r){const r=parseInt(t.slice(5,-4)),a=await this.#ys(path7.join(e,t));if(a.length>0){loginfo(`load unfinished ${a.length} tasks of templateId ${r}`);const t=this.#gs.get(r);t?a.forEach(e=>t.push(e)):this.#gs.set(r,a)}}return t&&await this.#bs(),!0}async addNewTask(t,e){const{tid:r,parasstrs:a}=t;if(r<=0||0===a.length)return!1;let s=this.#gs.get(r);return s||(s=[],this.#gs.set(r,s)),a.forEach(t=>{s.includes(t)||s.push(t)}),await this.#vs(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.#ws(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.#bs.bind(this),6e4*appConfig.cfg.loadFailedTasksInterval),!0}#Ss(t,e){return`${t}@@${e}`}async#ks(t,e,r){const a=await performOneTask(t,e,r,"indAsync","",0),{credits:s,subtasks:n}=a.taskData;let i=new Set;const o=this.#gs.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.#gs.delete(t),n.length>0){i=new Set(n.map(t=>t.tid));for(const t of i){const e=n.filter(e=>e.tid===t).map(t=>t.parasstr);await this.addNewTask({tid:t,parasstrs:e},!1)}}await this.#vs(o,t)}else await this.#vs([e],t,!0);this.runningTaskSet.delete(this.#Ss(t,e))}else logerr(`No task queue of templateId ${t}`);return r.page&&await this.#ds.freePage(r.page),appConfig.cfg.minMiliseconds>0&&await sleep5(appConfig.cfg.minMiliseconds),await this.tryToExecuteTasks([t],1),i.size>0&&await this.tryToExecuteTasks(),!0}async tryToExecuteTasks(e=[],r=0){if(loginfo(`---- tryToExecuteTasks templateIds ${e.join(",")} : `,this.#gs),t.#ms)return logdbg("---- another tryToExecuteTasks is running now"),!0;this.#fs&&0===this.#gs.size&&process.exit(0),t.#ms=!0;try{let a=0;0===e.length&&(e=Array.from(this.#gs.keys())),logdbg(`templateIds: ${e.join(",")}`);for(const s of e){const e=this.#gs.get(s);if(!e)break;const n=e.length;for(let i=0;i<n;i++){const n=e[i],o=this.#Ss(s,n);if(this.runningTaskSet.has(o))continue;const c=await this.#ds.getTaskNetworkContext(s);if(!c){logdbg(`No page to execute ${o}`);break}if(this.runningTaskSet.add(o),this.#ks(s,n,c),a++,r>0&&a>=r)return t.#ms=!1,!0}}return t.#ms=!1,!0}catch(e){return logdbg(e),t.#ms=!1,!1}}};import{fsCheckOrCreateDir as fsCheckOrCreateDir3}from"@letsscrapedata/utils";import EventEmitter2,{once as once2}from"events";import{getCurrentUnixTime as getCurrentUnixTime3,sleep as sleep6,unreachable as unreachable4}from"@letsscrapedata/utils";var TwoCaptcha=class{#xs;#Es;#As;#Is;#Os;#_s;#Ts;async#Ds(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#Ps(t){const e={clientKey:this.#xs,task:t,softId:0};"string"==typeof t.lang&&t.lang&&(e.languagePool=t.lang,delete t.lang);const r=await this.#Ds("https://api.2captcha.com/createTask",e);return 10===r.errorId?this.setStatus("nobalance"):[11,21,55].includes(r.errorId)&&this.setStatus("disabled"),r}async#Ns(t){const e={clientKey:this.#xs,taskId:t};return await this.#Ds("https://api.2captcha.com/getTaskResult",e)}async#Rs(){const t={clientKey:this.#xs},e=await this.#Ds("https://api.2captcha.com/getBalance",t);return e?.balance>=0?e.balance:-1}#Fs(t){return`event${t}`}#Ls(t){return 5e3}async#$s(t,e){const r={errorCode:"SUCCEEDED",taskId:0,cost:0,ip:"",createTime:getCurrentUnixTime3(),endTime:0,solveCount:0},{errorId:a,taskId:s}=await this.#Ps(t);if(a>0||s<=0)return r.errorCode="ERROR_OTHER",s>0&&(r.taskId=s),r;r.taskId=s;const n=this.#Fs(s);await sleep6(this.#Ls(e));let i=0;this.#Os||(i=setInterval(async()=>{const t=await this.#Ns(s);0!==t?.errorId?this.#Ts.emit(n,{code:1001,message:"failed",data:t}):0===t.errorId&&"ready"===t.status&&this.#Ts.emit(n,{code:0,message:"succeeded",data:t})},this.#As)),setTimeout(()=>this.#Ts.emit(n,{code:1009,message:"timeout",data:null}),this.#Is);const[o]=await once2(this.#Ts,n);i&&clearInterval(i),r.endTime=getCurrentUnixTime3();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:n,solution:i}=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.#As&&loginfo("##captcha task endTime difference: "+(r.endTime-s)),r.endTime=s),n&&n>0&&(r.solveCount=n),i&&(r.solution=i)}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}#js(t,e,r){let a=r?e:`${e}Proxyless`;return r?Object.assign({},t,{type:a},r):Object.assign({},t,{type:a})}#Ms(t,e){const{version:r,websiteURL:a,gt:s,challenge:n,geetestApiServerSubdomain:i,userAgent:o,captchaId:c}=t,l="GeeTestTask",p={type:e?l:`${l}Proxyless`,version:r,websiteURL:a};return s&&(p.gt=s),n&&(p.challenge=n),i&&(p.geetestApiServerSubdomainapiDomain=i),c&&(p.initParameters={captcha_id:c}),o&&(p.userAgent=o),p}#Us(t,e){const{version:r,websiteKey:a,websiteURL:s,isEnterprise:n,isInvisible:i,s:o,action:c,minScore:l,userAgent:p,cookies:g,apiDomain:h}=t;let f="RecaptchaV3TaskProxyless";if(2===r){const t=n?"RecaptchaV2EnterpriseTask":"RecaptchaV2Task";f=e?t:`${t}Proxyless`}const d={type:f,websiteURL:s,websiteKey:a};return h&&(d.apiDomain=h),d.isInvisible=i,o&&(n?d.enterprisePayload=o:d.recaptchaDataSValue=o),p&&(d.userAgent=p),g&&(d.cookies=g),d.isEnterprise=n,l&&(d.minScore=l),c&&(d.pageAction=c),d}#Js(t,e){const r="TurnstileTask";let a=e?r:`${r}Proxyless`;const{websiteKey:s,websiteURL:n,action:i,cData:o,chlPageData:c}=t;return i?{type:a,websiteKey:s,websiteURL:n,action:i,data:o,pagedata:c}:{type:a,websiteKey:s,websiteURL:n}}#Hs(t){const{images:e,comment:r,lang:a,math:s=!1,maxLength:n=0,minLength:i=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:n,minLength:i,numeric:o,phrase:c,lang:a};return e.length>1&&(p.imgInstructions=e[1].toString("base64")),p}}#qs(t){const{images:e,comment:r,lang:a,maxClicks:s=0,minClicks:n=1}=t,i={type:"CoordinatesTask",body:e[0].toString("base64"),comment:r,lang:a,minClicks:n};return s>0&&s>=n&&(i.maxClicks=s),e.length>1&&(i.imgInstructions=e[1].toString("base64")),i}constructor(t){const{clientKey:e,callbackUrl:r="",pollingInterval:a=5e3,timeout:s=15e4}=t;if(!e)throw new Error("Invalid options: no clientKey");this.#xs=e,this.#Es="normal",this.#As=a>=2e3?a:2e3,this.#Is=s>=3e4?s:3e4,this.#Os=r||"",r&&loginfo(this.#Os),this.#_s=["amazon","funcaptcha","geetest","keycaptcha","mtcaptcha","recaptcha","turnstile","text","coordinate","grid","slider","rotation"],this.#Ts=new EventEmitter2}canSolveCaptcha(t){return this.#_s.includes(t)}async getBalance(){return await this.#Rs()}name(){return"2captcha"}sendResult(t){if(!t||"object"!=typeof t)return!1;const{taskId:e,errorId:r}=t;if(e>0){const e=this.#Fs(t.taskId);return 0===r?this.#Ts.emit(e,{code:0,message:"succeeded",data:t}):0===r&&this.#Ts.emit(e,{code:1001,message:"failed",data:t}),!0}return!1}status(){return this.#Es}setStatus(t){switch(t){case"normal":case"disabled":case"nobalance":this.#Es=t;break;default:unreachable4(t)}return!0}async amazon(t,e){return await this.#$s(this.#js(t,"AmazonTask",e),"amazon")}async funcaptcha(t,e){return await this.#$s(this.#js(t,"FunCaptchaTask",e),"funcaptcha")}async geetest(t,e){return await this.#$s(this.#Ms(t,e),"geetest")}async keycaptcha(t,e){return await this.#$s(this.#js(t,"KeyCaptchaTask",e),"keycaptcha")}async mtcaptcha(t,e){return await this.#$s(this.#js(t,"MtCaptchaTask",e),"mtcaptcha")}async recaptcha(t,e){return await this.#$s(this.#Us(t,e),"recaptcha")}async turnstile(t,e){return await this.#$s(this.#Js(t,e),"turnstile")}async text(t){return await this.#$s(this.#Hs(t),"text")}async coordinate(t){return await this.#$s(this.#qs(t),"coordinate")}async grid(t){return await this.#$s(this.#js(t,"TextTask"),"text")}async slider(t){return await this.#$s(this.#js(t,"TextTask"),"text")}async rotation(t){return await this.#$s(this.#js(t,"TextTask"),"text")}};async function updateScraperConfig(t){const e=appConfig.cfg,{baseDir:r,inputFileDirPart:a,useStealthPlugin:s,browserControllerType:n,browserType:i,lsdLaunchOptions:o,lsdConnectOptions:c,browserConfigs:l,urlPrefix:p,maxConcurrency:g,readCode:h,templateParas:f,totalMaxConcurrency:d,minMiliseconds:u,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 fsCheckOrCreateDir3(e.baseDir,!0,!0),e.baseDownloadDir=path8.join(e.baseDir,"downloads"),await fsCheckOrCreateDir3(e.baseDownloadDir,!0,!0),e.baseFileDir=path8.join(e.baseDir,"files"),await fsCheckOrCreateDir3(e.baseFileDir,!0,!0),t.templateDir?e.templateDir=t.templateDir:e.templateDir=path8.join(e.baseDir,"template"),await fsCheckOrCreateDir3(e.templateDir,!0,!0),e.taskDir=path8.join(e.baseDir,"task"),await fsCheckOrCreateDir3(e.taskDir,!0,!0),e.exportsDir=path8.join(e.baseDir,"exports"),await fsCheckOrCreateDir3(e.exportsDir,!0,!0),a&&(e.inputFileDirPart=a),n&&(e.browserControllerType=n),i&&(e.browserType=i),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),f&&(e.templateParas=f),d&&(e.totalMaxConcurrency=d),"number"==typeof u&&(e.minMiliseconds=u),"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}export{performOneTask,scraper,setScraperLogFun,updateScraperConfig};
1
+ import{setControllerLogFun}from"@letsscrapedata/controller";import{setProxyLogFun}from"@letsscrapedata/proxy";import{log,LogLevel,setLogLevel}from"@letsscrapedata/utils";var pkgLog=log;function setScraperLogFun(t){return"function"==typeof t&&(setControllerLogFun(pkgLog=t),setProxyLogFun(pkgLog),!0)}async function logdbg(...t){await pkgLog(LogLevel.DBG,...t)}async function loginfo(...t){await pkgLog(LogLevel.INF,...t)}async function logwarn(...t){await pkgLog(LogLevel.WRN,...t)}async function logerr(...t){await pkgLog(LogLevel.ERR,...t)}setControllerLogFun(pkgLog),setProxyLogFun(pkgLog),setLogLevel(LogLevel.DBG);import{getLocalDateString}from"@letsscrapedata/utils";import xml2js from"xml2js-lsd";var defaultSplitOfParases="[\r\n\t,]+",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:""},templstr:{templ:void 0},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,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,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},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:"",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:defaultSplitOfParases,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,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_length:{type:void 0,subtype:void 0},fun_a_mapattr:{type:void 0,subtype:void 0,subkeys:void 0},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:defaultSplitOfParases,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:defaultSplitOfParases,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{LsdPageEvent}from"@letsscrapedata/controller";var 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:LsdPageEvent.PAGE_CLOSE,lsdPagePopup: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 n=r;e[a].type&&(n=n+"_"+e[a].type),e[a].subtype&&(n=n+"_"+e[a].subtype);const i=defaultElementCfg[n];if(!i)throw new Error(`##te No default Cfg for eleName ${n} in _applyDefaultElementCfg`);const o=Object.assign({},i);if(Object.keys(i).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 ${n} 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]},n=appConfig.XML_CHILDREN_KEY,i=await xml2js.parseStringPromise(e,s);if(!(i&&i.template&&i.template[n]&&Array.isArray(i.template[n].actions)))throw new Error(`##te Invalid XML config string: ${e}`);return r&&t.#t(i.template,"template"),i.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 n of e)if(n?.[appConfig.XML_ATTR_KEY]?.type===r)a.push(n);else if(n&&n[s]&&(n[s].action||n[s].condition)){t.#r(n[s].action?n[s].action:n[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"),n=[];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&&n.push(e)})}return n}static getInParas(t,e=[],r="::"){const a={},s=t.split("@@"),n=["para","apara","rpara"];for(let t=0;t<3;t++){let i=n[t],o=e.filter(t=>t.paraname.startsWith(i)).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[`${i}${t}`]=e[t-1];for(let t=e.length+1;t<=o;t++)a[`${i}${t}`]=""}}return a}};import*as fs from"fs";import*as path from"path";import{filesInDir,getCurrentUnixTime}from"@letsscrapedata/utils";import ivm from"isolated-vm";import{decodeFromBase64,getJsonParseOfStr}from"@letsscrapedata/utils";var LsdScript=class t{static#a=null;static#s=null;static convertScriptCfg(t){let{name:e,scenario:r,script:a,scripttype:s,base64:n}=t;const i=s.split("-");n&&(a=decodeFromBase64(a,!1));return{name:e,script:a,scenario:r,lang:i[0],env:i[1]}}static#n(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#i(e){return!(!this.#n(e)||!t.#s)&&this.#i(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 ivm.Isolate,a=r.createContextSync(),s=new ivm.ExternalCopy(t);a.global.setSync("inData",s.copyInto());const n=r.compileScriptSync(e).runSync(a);return"string"!=typeof n&&logwarn("Please check the script is correct."),"string"==typeof n?n:""}catch(t){return logerr(t),""}}static async#l(e,r,a,s){const n=await t.#o(r,a);if(!n||n.scenario!==s)return"";return t.#c(e,n.script)}static async execFunScript(e,r,a={}){const s=await t.#l(e,r,a,"fun");return"cfginvalid"===s&&t.#i(r),s}static async execExtractScript(e,r,a={}){const s=await t.#l(e,r,a,"extract");let n=getJsonParseOfStr(s);return n||(n={execData:{},errName:"cfginvalid"}),"cfginvalid"===n.errName&&t.#i(r),n}},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#f(t,e){try{if(!e){if(!appConfig.cfg.templateDir)return null;const r=await 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 n=await s.json();if(!n||0!==n.code||!n.data)return logwarn(`Failed to get template ${e}: ${n.message}`),null;if(n.data.templateId!==e)return logerr(`Different templateId ${e} / ${n.templateId}`),null;const{domainId:i=0,defaultElementSource:o,configDetail:c="",maxExecutionDuration:l}=n.data;if(!c)return logerr(`Invalid content in template ${e}`),null;return{templateId:e,domainId:i,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),n=TaskParser.getPartOfJsonCfg(e,"actions",!1),i=TaskParser.getAttrsInXml(e),o=TaskParser.getCaptchTypes(e),c=getCurrentUnixTime(),l={};s.forEach(t=>{l[t.name]=LsdScript.convertScriptCfg(t)});return{actionConfigs:n,paraCfgs:r,fontsConfig:a||null,templScripts:l,attrsInXml:i,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.#f(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),n=Object.assign({},s,{template:a});return t.#p.set(e,n),n}static clearTemplateConfig(e=0){return e>0?t.#p.delete(e):t.#p.clear(),!0}};import EventEmitter from"events";import{once}from"events";import*as fs6 from"fs";import*as path5 from"path";import{gotScraping}from"got-scraping";import{sleep as sleep3,checkDns,fileExist,fsCheckOrCreateSubdir as fsCheckOrCreateSubdir3,getRandomInt,unreachable as unreachable3,getJsonParseOfStr as getJsonParseOfStr5,getCurrentUnixTime as getCurrentUnixTime2,getMemberOfObject as getMemberOfObject2,getStringOfObj as getStringOfObj4,isDirectorySync,getLocalDateNumber}from"@letsscrapedata/utils";import{CheerioPage,controller}from"@letsscrapedata/controller";import*as uuid from"uuid";var SysParas=class{#u;#m;#y;#C;constructor(t,e,r,a){this.#u=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.#u?.page?this.#u.page.url():""}catch{return""}}get userAgent(){try{return this.#u?.page?.userAgent?this.#u.page.userAgent():""}catch{return""}}get hasPopupPage(){return this.#u?.popupPage?"1":"0"}get subtaskNum(){const t=this.#u?.subtasks;return Array.isArray(t)?String(t.length):"0"}get datatableNum(){const t=this.#u?.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()}};import*as iconv from"iconv-lite";import*as zlib from"zlib";import*as cheerio from"cheerio";import dateFormat from"dateformat";import{getComplementOfTwoArray,getDifferenceOfTwoArray,getIntersectionOfTwoArray,getJsonParseOfStr as getJsonParseOfStr2,getStringOfObj,getUnionOfTwoArray,LsdUrl,unreachable}from"@letsscrapedata/utils";function findStrInObj(t,e,r="obj",a=!1,s=1){let n,i=[];if(s>20)return[];if(Array.isArray(t))for(let o=0;o<t.length;o++){const c=r?`${r}.${o}`:`${o}`;n=findStrInObj(t[o],e,c,a,s+1),i.push(...n)}else if("object"!=typeof t||t){if("string"==typeof t)(a&&t===e||!a&&t.includes(e))&&i.push([r,t]);else if("number"==typeof t){const s=String(t);(a&&s===e||!a&&s.includes(e))&&i.push([r,t])}}else for(const o in t){const c=r?`${r}.${o}`:`${o}`;n=findStrInObj(t[o],e,c,a,s+1),i.push(...n)}return i}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.#b[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 n=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.#b[r];if(!a||"function"!=typeof a)return logerr(`Invalid funName ${r} in transformStr`),"";n=a(n,e)}else n=await t.#v(n,e,s)}}catch(t){t.message.includes(" JSON ")||t.message.startsWith("##check")||loginfo(t),n=""}return n||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 getStringOfObj(t)}static#x(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#E(e,r){const{idx:a}=r,s=getJsonParseOfStr2(e);t.#w(s);const n=s.at(parseInt(a));return t.#k(n)}static#A(e,r){const{array2:a}=r,s=getJsonParseOfStr2(e),n=getJsonParseOfStr2(a);t.#w(s,n);let i=s.concat(n);return JSON.stringify(i)}static#O(e,r){const{pattern:a,flags:s}=r,n=getJsonParseOfStr2(e);t.#w(n);const i=new RegExp(a,s);return n.every(t=>getStringOfObj(t).match(i))?"1":"0"}static#I(e,r){const{pattern:a,flags:s}=r,n=getJsonParseOfStr2(e);t.#w(n);const i=new RegExp(a,s),o=n.filter(t=>getStringOfObj(t).match(i));return JSON.stringify(o)}static#_(e,r){const{pattern:a,flags:s}=r,n=getJsonParseOfStr2(e);t.#w(n);const i=new RegExp(a,s),o=n.find(t=>getStringOfObj(t).match(i));return getStringOfObj(o)}static#T(e,r){const{pattern:a,flags:s}=r,n=getJsonParseOfStr2(e);t.#w(n);const i=new RegExp(a,s),o=n.findIndex(t=>getStringOfObj(t).match(i));return String(o)}static#D(e,r){const{item:a}=r,s=getJsonParseOfStr2(e);return t.#w(s),s.includes(a)?"1":"0"}static#P(e,r){const{item:a,position:s}=r,n=getJsonParseOfStr2(e);return t.#w(n),String(n.indexOf(a,parseInt(s)))}static#N(e,r){const{join:a}=r,s=getJsonParseOfStr2(e);return t.#w(s),s.join(a)}static#R(e){const r=getJsonParseOfStr2(e);return t.#w(r),String(r.length)}static#F(e,r){const{subkeys:a}=r,s=getJsonParseOfStr2(e);t.#w(s);const n=s.map(e=>t.#x(e,a));return JSON.stringify(n)}static#j(e,r){const a=getJsonParseOfStr2(e);t.#w(a);const s=a.map(e=>"string"==typeof e?t.#L(e,r):e);return JSON.stringify(s)}static#$(e){const r=getJsonParseOfStr2(e);t.#w(r);const a=r.map(t=>Number(t));return a.findIndex(t=>Number.isNaN(t))>=0?"":String(Math.max(...a))}static#M(e){const r=getJsonParseOfStr2(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=getJsonParseOfStr2(e);t.#w(r);const a=r.pop();return t.#k(a)}static#J(e,r){const{item:a}=r,s=getJsonParseOfStr2(e);return t.#w(s),s.push(a),JSON.stringify(s)}static#H(e,r){const a=getJsonParseOfStr2(e);t.#w(a);const s=a.map(e=>"string"==typeof e?t.#q(e,r):e);return JSON.stringify(s)}static#B(e,r){const{array2:a}=r,s=getJsonParseOfStr2(e),n=getJsonParseOfStr2(a);t.#w(s,n);let i=getComplementOfTwoArray(s,n);return JSON.stringify(i)}static#V(e,r){const{array2:a}=r,s=getJsonParseOfStr2(e),n=getJsonParseOfStr2(a);t.#w(s,n);let i=getDifferenceOfTwoArray(s,n);return JSON.stringify(i)}static#W(e,r){const{array2:a}=r,s=getJsonParseOfStr2(e),n=getJsonParseOfStr2(a);t.#w(s,n);let i=getIntersectionOfTwoArray(s,n);return JSON.stringify(i)}static#K(e,r){const{array2:a}=r,s=getJsonParseOfStr2(e),n=getJsonParseOfStr2(a);t.#w(s,n);let i=getUnionOfTwoArray(s,n);return JSON.stringify(i)}static#G(e){const r=getJsonParseOfStr2(e);t.#w(r);const a=r.shift();return t.#k(a)}static#z(e){const r=getJsonParseOfStr2(e);t.#w(r);let a=r.sort(()=>Math.random()-.5);return JSON.stringify(a)}static#Y(e,r){const{beginidx:a,len:s,endidx:n}=r,i=parseInt(a);let o="string"==typeof n&&n.length>0?parseInt(n):void 0;const c="string"==typeof s&&s.length>0?parseInt(s):void 0;c&&c>0&&(o=i+c);const l=getJsonParseOfStr2(e);t.#w(l);const p=l.slice(i,o);return JSON.stringify(p)}static#X(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#Q(e,r){const{valtype:a,sorttype:s}=r,n=getJsonParseOfStr2(e);t.#w(n);let i=t.#X(n,a,s);return JSON.stringify(i)}static#Z(e,r){const{key:a,value:s}=r;if(!a||!s)return"";const n=getJsonParseOfStr2(e);t.#w(n);const i={};for(const t of n){const e=String(t[a]),r=getStringOfObj(t[s]);i[e]=r}return JSON.stringify(i)}static#tt(e){const r=getJsonParseOfStr2(e);t.#w(r);const a=[...new Set(r)];return JSON.stringify(a)}static#et(e,r){const{item:a}=r,s=getJsonParseOfStr2(e);return t.#w(s),s.unshift(a),JSON.stringify(s)}static#rt(t){return String(Math.ceil(Number(t)))}static#at(t,e){const{format:r,ms:a}=e;let s=t?parseInt(t):0;a||(s*=1e3);const n=s?new Date(s):new Date;return"toISODate"===r?n.toISOString().slice(0,10):"toISOString"===r?n.toISOString():"toLocaleString"===r?n.toLocaleString():"toLocaleDateString"===r?n.toLocaleDateString():"toLocaleTimeString"===r?n.toLocaleTimeString():"toString"===r?n.toString():"toUTCString"===r?n.toUTCString():dateFormat(n,r)}static#st(t,e){const{number2:r}=e;return Number(t)===Number(r)?"1":"0"}static#nt(t){return String(Math.floor(Number(t)))}static#it(t,e){const{number2:r}=e;return Number(t)>=Number(r)?"1":"0"}static#ot(t,e){const{number2:r}=e;return Number(t)>Number(r)?"1":"0"}static#ct(t){const e=Number(t);return Number.isNaN(e)?"1":"0"}static#lt(t,e){const{number2:r}=e;return Number(t)<=Number(r)?"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,a=Number(t),s=Number(r);return String(a>s?a:s)}static#ht(t,e){const{number2:r}=e,a=Number(t),s=Number(r);return String(a<s?a:s)}static#ft(t){return String(parseFloat(t))}static#dt(t){return String(parseInt(t))}static#ut(t){return String(Math.round(Number(t)))}static#mt(t,e){const{digits:r,fixed:a}=e,s=Number(t),n=parseInt(r);if(a)return String(s.toFixed(n));{const t=String(s).split(".");return 2!==t.length||t[1].length<=n?String(s):String(s.toFixed(n))}}static#yt(e,r){const{object2:a}=r,s=getJsonParseOfStr2(e),n=getJsonParseOfStr2(a);t.#S(s,n);const i=Object.assign({},s,n);return JSON.stringify(i)}static#Ct(e,r){const{subkeys:a}=r;let s=getJsonParseOfStr2(e);return t.#S(s),t.#x(s,a)}static#bt(e,r){const{kvjoin:a}=r;let s=getJsonParseOfStr2(e);t.#S(s);const n=Array.from(Object.entries(s)).map(t=>t.join(a));return JSON.stringify(n)}static#vt(t,e){const{str:r,equal:a}=e;const s=findStrInObj(getJsonParseOfStr2(t),r,"",a);return s.length>0?s.map(t=>`${t[0]}: ${JSON.stringify(t[1])}`).join("\n"):""}static#wt(e){let r=getJsonParseOfStr2(e);t.#S(r);const a=Array.from(Object.keys(r));return JSON.stringify(a)}static#St(e,r){let a=getJsonParseOfStr2(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#kt(e,r){let a=getJsonParseOfStr2(e);t.#S(a);for(const e of Object.keys(a))"string"==typeof a[e]&&(a[e]=t.#q(a[e],r));return JSON.stringify(a)}static#xt(e,r){const{valtype:a,sorttype:s}=r;let n=getJsonParseOfStr2(e);t.#S(n);const i=Array.from(Object.keys(n)),o=t.#X(i,a,s),c={};return o.forEach(t=>c[t]=n[t]),JSON.stringify(c)}static#Et(e){let r=getJsonParseOfStr2(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:n,xml:i,decode:o}=r,c=parseInt(s),l={xmlMode:i,decodeEntities:o},p=cheerio.load(e,l);return t.#At(p,a,c).attr(n)}catch(t){return logerr(`##tmp cheerio xAttr err: ${t}`),""}}static#It(e,r){try{const{loc:a,idx:s,attrname:n,xml:i,decode:o}=r,c=parseInt(s),l={xmlMode:i,decodeEntities:o},p=cheerio.load(e,l);return t.#At(p,a,c).data(n)}catch(t){return logerr(`##tmp cheerio xData err: ${t}`),""}}static#_t(t,e){try{const{loc:r,xml:a,decode:s}=e,n={xmlMode:a,decodeEntities:s},i=cheerio.load(t,n);return i(r).empty(),i.html()}catch(e){return logerr(`##tmp cheerio xEmpty err: ${e}`),t}}static#Tt(e,r){try{const{loc:a,idx:s,xml:n,decode:i}=r,o=parseInt(s),c={xmlMode:n,decodeEntities:i},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#Dt(e,r){try{const{loc:a,xml:s,decode:n}=r,i=-9999,o={xmlMode:s,decodeEntities:n},c=cheerio.load(e,o),l=t.#At(c,a,i);return String(l.length)}catch(t){return logerr(`##tmp cheerio xLength err: ${t}`),"0"}}static#Pt(t,e){try{const{loc:r,xml:a,decode:s}=e,n={xmlMode:a,decodeEntities:s},i=cheerio.load(t,n);return i(r).remove(),i.html()}catch(e){return logerr(`##tmp cheerio xRemove err: ${e}`),t}}static#Nt(e,r){try{const{loc:a,idx:s,xml:n,decode:i}=r,o=parseInt(s),c={xmlMode:n,decodeEntities:i},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#Rt(t,e){const{idx:r}=e,a=parseInt(r),s=t.at(a);return s||""}static#Ft(t,e){const{openchar:r,startstr:a,regexp:s,flags:n,position:i}=e;if("string"!=typeof t||"string"!=typeof r||!["{","[","(","lt"].includes(r)||"string"!=typeof a||"number"!=typeof parseInt(i)||parseInt(i)<0)return"";const o="lt"===r?"<":r,c={"{":"}","[":"]","(":")","<":">"}[o];let l=1,p=-1;if(a){if(s){const e=new RegExp(a,n),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(i);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 f=h<=t.length?h+1:-1;return f>g?t.substring(g,f):""}static#jt(t,e){return t||e?void 0:{}}static#Lt(e,r){try{const{method:a,sourceencoding:s,targetencoding:n}=r,i=t.#jt(r,!0),o=Buffer.from(e,s);let c=null;return"gzip"===a?c=zlib.gzipSync(o,i):"deflate"===a?c=zlib.deflateSync(o,i):"deflateraw"===a?c=zlib.deflateRawSync(o,i):"brotli"===a&&(c=zlib.brotliCompressSync(o,i)),c?t.#$t(c,n):""}catch(t){return""}}static#Mt(t,e){let r=t;const{str1:a,str2:s,str3:n,str4:i,str5:o}=e;return[a,s,n,i,o].forEach(t=>{"string"==typeof t&&(r=r.concat(t))}),r}static#$t(t,e,r="0",a="0"){const s=r?Number(r):0,n=a?Number(a):0;return t instanceof Buffer?n>0?t.toString(e,s,n):s>0?t.toString(e,s):t.toString(e):""}static#Ut(e,r){const{sourceencoding:a,targetencoding:s,start:n,end:i}=r;try{if(a===s||!a||!s)return e;const r=Buffer.from(e,a);return t.#$t(r,s,n,i)}catch(t){return""}}static#Jt(t,e){const{str1:r,val1:a,str2:s,val2:n,str3:i,val3:o,str4:c,val4:l,str5:p,val5:g,defaultval:h}=e;try{return t===r?a:t===s?n:t===i?o:t===c?l:t===p?g:h}catch(t){return""}}static#Ht(e,r){try{const{method:a,sourceencoding:s,targetencoding:n,start:i,end:o}=r,c=t.#jt(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.#$t(p,n,i,o):""}catch(t){return""}}static#qt(t,e){const{str:r}=e;return t.endsWith(r)?"1":"0"}static#Bt(t,e){const{str:r}=e;return t===r?"1":"0"}static#Vt(t,e){const{hashmethod:r}=e;return LsdUrl.getHashCode(t,r)}static#Wt(t,e){const{str:r}=e;if("string"!=typeof r)throw new Error("Invalid searchstr in _contains");return t.includes(r)?"1":"0"}static#Kt(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#Gt(t,e){const{str:r}=e;if("string"!=typeof r)throw new Error("Invalid str in _insert");return r+t}static#zt(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#Yt(t,e){const{split:r,kvsplit:a,keytrim:s,keynows:n,valuetrim:i,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];n&&(a=a.split("").filter(t=>t.trim()).join(""));let c=i?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#Xt(t){return String(t.length)}static#L(t,e){const{pattern:r,flags:a,idx:s}=e,n=e.resulttype,i=new RegExp(r,a),o=t.match(i);if("boolean"===n)return o?"1":"0";if(!o)return"";if("all"===n)return o.join(",");if("array"===n)return JSON.stringify(o);if("idx"===n){const t=parseInt(s);return o[t]?String(o[t]):""}return"index"===n?"number"==typeof o.index?String(o.index):"":"length"===n?String(o.length):void unreachable(n)}static#Qt(t){return t.normalize()}static#Zt(t){return t&&"0"!==t&&"false"!==t.toLowerCase()?"0":"1"}static#te(t,e){const{targetlen:r,padstr:a}=e,s=parseInt(r),n="string"==typeof a&&a.length>0?a:" ";return t.padEnd(s,n)}static#ee(t,e){const{targetlen:r,padstr:a}=e,s=parseInt(r),n="string"==typeof a&&a.length>0?a:" ";return t.padStart(s,n)}static#re(t){const e=getJsonParseOfStr2(t);return"string"==typeof e?e:""}static#q(t,e){const{substr:r,newstr:a,regexp:s,flags:n}=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,n),a):t.replace(r,a)}catch(e){return t}}static#ae(t,e){const{pattern:r}=e,a=new RegExp(r);return String(t.search(a))}static#se(t,e){const{beginidx:r,len:a,endidx:s}=e,n=parseInt(r);let i="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&&(i=n+o),t.slice(n,i)}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#ie(e,r){const{split:a,limit:s}=r,n=new RegExp(a),i=parseInt(s);let o=i>0?e.split(n,i):e.split(n);return t.#w(o),JSON.stringify(o)}static#oe(t,e){const{str:r}=e;return t.startsWith(r)?"1":"0"}static#ce(t,e){const{substr:r,regexp:a,flags:s,position:n,last:i,include:o}=e,c=o,l=parseInt(n);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=i?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#le(t,e){const{substr:r,regexp:a,flags:s,position:n,last:i,include:o}=e,c=parseInt(n),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=i?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#pe(t){try{return String(BigInt(t))}catch(t){return""}}static#ge(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#he(t){return t.toLowerCase()}static#fe(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#de(t){return t.toUpperCase()}static#ue(t){return t.trim()}static#me(t){return t.trimEnd()}static#ye(t){return t.trimStart()}static#Ce(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 n=r.map(t=>parseInt(t.slice(1),16));return iconv.decode(Buffer.from(n),a)}return logerr(`Invalid method ${r} in _urlencode`),""}catch(t){return logerr(t),""}}static#ve(t,e){const{param1:r,param2:a,param3:s}=e;if("string"!=typeof r)throw new Error("Invalid params in _urldel");let n="";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),n=e.href}catch(t){n=""}return n||""}static#we(t,e){const{attrorpath:r,hashmethod:a,param:s,hostnameparts:n,params:i,title:o,extname:c,validextnames:l}=e;if("string"!=typeof r)throw new Error("Invalid attr in _urlget");const p=n?Number(n):0;let g="";return g=["href","origin","protocol","username","password","host","search","hash","hostname","port","hrefwithoutsearch","param"].includes(r)?LsdUrl.getUrlAttribute(t,r,p,s):LsdUrl.getFilePathFromUrl(t,r,a,p,i,c,l,o),"string"==typeof g?g:""}static#Se(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#ke(e,r){const{param1:a,val1:s,param2:n,val2:i,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.#Se(r,a,s,p),t.#Se(r,n,i,p),t.#Se(r,o,c,p),g=r.href}catch(t){g=""}return g||""}static async#v(t,e,r){const{name:a,arg1:s,arg2:n,arg3:i,arg4:o,arg5:c}=e;try{const e={origStr:t,arg1:s,arg2:n,arg3:i,arg4:o,arg5:c};return await LsdScript.execFunScript(e,a,r)}catch(t){return""}}static#b={a_at:t.#E,a_concat:t.#A,a_every:t.#O,a_filter:t.#I,a_find:t.#_,a_findindex:t.#T,a_includes:t.#D,a_indexof:t.#P,a_join:t.#N,a_length:t.#R,a_mapattr:t.#F,a_match:t.#j,a_max:t.#$,a_min:t.#M,a_pop:t.#U,a_push:t.#J,a_replace:t.#H,a_setcomplement:t.#B,a_setdifference:t.#V,a_setintersection:t.#W,a_setunion:t.#K,a_shift:t.#G,a_shuffle:t.#z,a_slice:t.#Y,a_sort:t.#Q,a_toobj:t.#Z,a_uniq:t.#tt,a_unshift:t.#et,n_ceil:t.#rt,n_dateformat:t.#at,n_eq:t.#st,n_floor:t.#nt,n_ge:t.#it,n_gt:t.#ot,n_isnan:t.#ct,n_le:t.#lt,n_lt:t.#pt,n_max:t.#gt,n_min:t.#ht,n_parsefloat:t.#ft,n_parseint:t.#dt,n_round:t.#ut,n_tofixed:t.#mt,o_assign:t.#yt,o_attr:t.#Ct,o_entries:t.#bt,o_findstrinobj:t.#vt,o_keys:t.#wt,o_match:t.#St,o_replace:t.#kt,o_sort:t.#xt,o_values:t.#Et,x_attr:t.#Ot,x_data:t.#It,x_empty:t.#_t,x_html:t.#Tt,x_length:t.#Dt,x_remove:t.#Pt,x_text:t.#Nt,at:t.#Rt,closingsubstr:t.#Ft,compress:t.#Lt,concat:t.#Mt,convertencoding:t.#Ut,decode:t.#Jt,decompress:t.#Ht,endswith:t.#qt,eq:t.#Bt,hashcode:t.#Vt,includes:t.#Wt,indexof:t.#Kt,insert:t.#Gt,isin:t.#zt,itemstoobj:t.#Yt,length:t.#Xt,match:t.#L,normalize:t.#Qt,not:t.#Zt,padend:t.#te,padstart:t.#ee,parsestr:t.#re,replace:t.#q,search:t.#ae,slice:t.#se,specialconvert:t.#ne,split:t.#ie,startswith:t.#oe,substrafter:t.#ce,substrbefore:t.#le,tobigint:t.#pe,tobool:t.#ge,tolowercase:t.#he,tonum:t.#fe,touppercase:t.#de,trim:t.#ue,trimend:t.#me,trimstart:t.#ye,urldecode:t.#be,urldelparams:t.#ve,urlencode:t.#Ce,urlget:t.#we,urlsetparams:t.#ke,script:t.#v}};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)}import*as fs2 from"fs";import*as path2 from"path";import{HeaderGenerator,PRESETS}from"header-generator";import*as uuid2 from"uuid";import{unreachable as unreachable2,LsdUrl as LsdUrl2,fsCheckOrCreateSubdir,getJsonParseOfStr as getJsonParseOfStr4,getStringOfObj as getStringOfObj3}from"@letsscrapedata/utils";import{HttpsProxyAgent}from"hpagent";import*as download from"download";async function lsdDownload(t,e="",r=null){const a={};if(e){const t=new 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}import{getJsonParseOfStr as getJsonParseOfStr3,getMemberOfObject,getStringOfObj as getStringOfObj2}from"@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=getJsonParseOfStr3(r);return a&&"object"==typeof a?(a=getMemberOfObject(a,e.slice(1)),a):void 0}function getSubkeysStringOfDataRecord(t,e){const r=getSubkeysValueOfDataRecord(t,e);return getStringOfObj2(r)}function getSubkeysStrOfObject(t,e){const r=e.length>0?getMemberOfObject(t,e):t;return getStringOfObj2(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:unreachable2(a)}return s}static async getParaInElement(e,r,a){if(!e||!e.type||!a)return"";const s=e.type,n=a.paras;let i="";if("screenshot"===s)i=await t.getScreenshot(r,e,n);else unreachable2(s);return i}static async getParaInPage(e,r,a){if(!e||!e.type||!a)return"";const s=e.type,n=a.paras;let i="";switch(s){case"content":i=await t.getContent(r);break;case"evaluate":i=await t.getEvaluate(r,e);break;case"mhtml":i=await t.getMhtml(r,e,n);break;case"pdf":i=await t.getPdf(r,e,n);break;case"screenshot":i=await t.getScreenshot(r,e,n);break;case"title":i=await t.getTitle(r,e);break;case"window":i=await t.getWindow(r,e);break;default:unreachable2(s)}return i}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:n,source:i}=e,o="orig"===i?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"===n?t.name:String(t.expires):""}return""}return""}static getLocalstorage(e,r){const{origin:a,name:s,source:n,parsestr:i}=e,o="orig"===n?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(i){const e=getJsonParseOfStr4(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:n}=e;let i;try{if(!n&&(r.includes("cookie")||r.includes("localStorage")))throw new Error("Cannot access cookies and localStorge in getEvaluate");if(a){const e=getJsonParseOfStr4(a);if(!Array.isArray(e))return"";const n=["a","b","c","d","e","f","g"].slice(0,e.length),o=new Function(`[${n.join(", ")}]`,r);i=await t.evaluate(o,e,s)}else i=await t.evaluate(r,void 0,s);return getStringOfObj3(i)}catch(t){return loginfo(t),""}}static async getFile(e,r){const a=r.paras;try{const{url:s,pathtype:n,hashmethod:i,hostnameparts:o,params:c,extname:l,validextnames:p,basedir:g,setvar:h,pathvarname:f,proxy:d,headers:u,referer:m}=e;let y=e.path.trim();if(y)y=path2.join(y);else{let t=LsdUrl2.getFilePathFromUrl(s,n,i,Number(o),c,l,p);y=path2.join(g,t)}if(y){const t=path2.dirname(y);if(!await 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 b=null;(u||m)&&(b=u?JSON.parse(u):{},m&&(b.referer=m));const v=await lsdDownload(s,C,b);return fs2.writeFileSync(y,v),f&&a&&!appConfig.RESERVED_PARA_NAMES.includes(f)&&(a[f]=y),h?v.toString("utf8"):t.noNeedToReturnContent}catch(t){throw new Error("error in get_file")}}static _genHeaderMethod={genLatestAndroid:PRESETS.MODERN_ANDROID,genLatestDesktop:PRESETS.MODERN_DESKTOP,genLatestLinux:PRESETS.MODERN_LINUX,genLatestLinuxChrome:PRESETS.MODERN_LINUX_CHROME,genLatestLinuxFirefox:PRESETS.MODERN_LINUX_FIREFOX,genLatestMacos:PRESETS.MODERN_MACOS,genLatestMacosChrome:PRESETS.MODERN_MACOS_CHROME,genLatestMacosFirefox:PRESETS.MODERN_MACOS_FIREFOX,genLatestMobile:PRESETS.MODERN_MOBILE,genLatestWindows:PRESETS.MODERN_WINDOWS,genLatestWindowsChrome:PRESETS.MODERN_WINDOWS_CHROME,genLatestWindowsFirefox: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:n,newHttpHeaders:i}=r,o=r.interceptionData;let c={},l=!1,p="";try{if(t._genHeaderMethod[a]){l=!0;c=new HeaderGenerator(t._genHeaderMethod[a]).getHeaders()}else if("genNewByHttpOptions"===a){l=!0;c=new HeaderGenerator(n).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(i)for(const e of Object.values(i)){const{name:r,source:s,value:n,deleteFlag:i}=e;if(i)delete c[r];else if("value"===s)c[r]=n;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]:n&&(c[r]=n)}}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:n,hostnameparts:i,basedir:o,pathvarname:c}=e;if(a)a=path2.join(a);else{const e=t.url();let r=await t.title();a=LsdUrl2.getFilePathFromUrl(e,s,n,Number(i),"","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 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:n,hostnameparts:i,basedir:o,scale:c,displayheaderfooter:l,headertemplate:p,footertemplate:g,printbackground:h,landscape:f,pageranges:d,format:u,width:m,height:y,top:C,right:b,bottom:v,left:w,onepage:S,hmargin:k,pathvarname:x,setvar:E}=r;let A={},O=r.path.trim();if(O)O=path2.join(O);else{const t=e.url();let r=await e.title();O=LsdUrl2.getFilePathFromUrl(t,s,n,Number(i),"","pdf","",r),O=path2.join(o,O)}if(O){const t=path2.dirname(O);if(!await fsCheckOrCreateSubdir(appConfig.cfg.baseFileDir,t))throw new Error("failed to checkOrCreatePdfDir");O=path2.join(appConfig.cfg.baseFileDir,O),A.path=O}if("1"!==c&&(A.scale=Number(c)),l&&(A.displayHeaderFooter=l),p&&(A.headerTemplate=p),g&&(A.footerTemplate=g),h&&(A.printBackground=h),f&&(A.landscape=f),d&&(A.pageRanges=d),C||b||v||w||l){const e={};C?e.top=t._getScreenSize(C):l&&!p&&(e.top="60px"),v?e.bottom=t._getScreenSize(v):l&&!g&&(e.bottom="60px"),b&&(e.right=t._getScreenSize(b)),w&&(e.left=t._getScreenSize(w)),A.margin=e}if(S){const t=await e.pageWidth();let r=await e.pageHeight();k&&(r+=Number(k)),A.width=`${t}px`,A.height=`${r}px`,logdbg(`--------- pageHeight:${r}px`)}else m||y?(m&&(A.width=t._getScreenSize(m)),y&&(A.height=t._getScreenSize(y))):"Letter"!==u&&(A.format=u);const I=await e.pdf(A);return x&&a&&!appConfig.RESERVED_PARA_NAMES.includes(x)&&(a[x]=O),E?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 n=Math.round(Math.random()*(s-a))+a;return String(n)}catch(t){return"0"}}static async getScreenshot(e,r,a){let s={};try{if(!e)return"";let{basedir:n,path:i,extname:o,quality:c,fullpage:l,x:p,y:g,width:h,height:f,omitbackground:d,pathvarname:u,setvar:m}=r;if(i=i.trim(),i)i=path2.join(n,i);else if(e.title){const t=await e.title(),r=`${LsdUrl2.convertToValidPathname(t)}.${o}`;i=path2.join(n,r)}else{const t=`${uuid2.v4()}.${o}`;i=path2.join(n,t)}if(i){const t=path2.dirname(i);if(!await fsCheckOrCreateSubdir(appConfig.cfg.baseFileDir,t))throw new Error("failed to checkOrCreatePdfDir");i=path2.join(appConfig.cfg.baseFileDir,i),s.path=i}"jpeg"===o&&(s.type="jpeg");const y=parseInt(c);"jpeg"===o&&y>=0&&(s.quality=y),l&&(s.fullPage=l);const C=parseInt(h),b=parseInt(f);if(C>0&&b>0){const t={x:parseInt(p),y:parseInt(g),width:C,height:b};s.clip=t}d&&(s.omitBackground=d);const v=await e.screenshot(s);return u&&a&&!appConfig.RESERVED_PARA_NAMES.includes(u)&&(a[u]=i),m&&v?v.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:n,idx:i,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(n)return String(c.length);let l=o?o.split("."):[];if("*"!==i){let t=parseInt(i);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?LsdUrl2.convertToValidPathname(a):a}catch(t){return""}}static async getWindow(t,e){try{const{key1:r,key2:a,key3:s,key4:n,key5:i,key6:o,keys:c,length:l}=e;if(!t||!r)return"";const p=[r,a,s,n,i,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),""}}};import*as path3 from"path";import*as fsp from"fs/promises";import{LsdUrl as LsdUrl3,fsCheckOrCreateSubdir as fsCheckOrCreateSubdir2}from"@letsscrapedata/utils";async function responseCacheCb(t,e,r){if(e&&t)try{const{execData:a,contentType:s,tabname:n,requestHeadersFlag:i,responseHeadersFlag:o,cacheHeadersFlag:c,interceptionData:l,debugFlag:p=!1}=e,{pageUrl:g,cookies:h}=r,f=t.request(),d=f.method(),u=f.url();let m=f.postData();const y=m||"",C=f.resourceType(),b="text"===s?await t.text():"";let v=null;n&&"none"!==n&&(a[n]||(a[n]=[]),v={pageUrl:g,requestMethod:d,requestUrl:u,requestData:y,resourceType:C,responseData:b,size:String(b.length)},a[n].push(v));const w=v&&(c||p);if(i||w){const t=Object.assign({},f.allHeaders?await f.allHeaders():f.headers());!t.cookie&&h&&(t.cookie=h),w&&v&&(v.requestHeaders=t?JSON.stringify(t):""),i&&(l.cachedRequestUrl=u,l.cachedRequestHeaders=t,l.cachedRequestData=y),logdbg("requestUrl: ",u),logdbg("requestHeaders: ",t)}if(o){const e=Object.assign({},t.allHeaders?await t.allHeaders():t.headers());l.cachedResponseUrl=u,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:n,tabname:i,pathType:o,hashMethod:c,baseDir:l,hostnameParts:p,params:g,extname:h,validExtnames:f,encoding:d}=e,{pageUrl:u}=r;let m=LsdUrl3.getFilePathFromUrl(s,o,c,p,g,h,f);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 fsCheckOrCreateSubdir2(appConfig.cfg.baseFileDir,C))throw new Error("failed to checkOrCreateReponseDir");const b=path3.join(appConfig.cfg.baseFileDir,y),v=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(b,v,S),i&&"none"!==i&&n){const t=a.method();let e=a.postData();const r={pageUrl:u,requestMethod:t,requestUrl:s,requestData:e||"",resourceType:w,path:y,size:String(v.length)};n[i]?n[i].push(r):n[i]=[r]}}import fs4 from"fs";import{encodeToBase64,sleep}from"@letsscrapedata/utils";import*as path4 from"path";import*as fs3 from"fs";import{fsCheckOrCreateDir,isFileSync}from"@letsscrapedata/utils";var 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"),!isFileSync(a)){let t="ewogICJtYW5pZmVzdF92ZXJzaW9uIjogMywKICAibmFtZSI6ICJjYW1vdWZveCBhZGRvbiIsCiAgInZlcnNpb24iOiAiMS4wIiwKICAicGVybWlzc2lvbnMiOiBbCiAgICAic2NyaXB0aW5nIgogIF0sCiAgIndlYl9hY2Nlc3NpYmxlX3Jlc291cmNlcyI6IFsKICAgIHsKICAgICAgInJlc291cmNlcyI6IFsKICAgICAgICAic2NyaXB0cy8qIgogICAgICBdLAogICAgICAibWF0Y2hlcyI6IFsKICAgICAgICAiPGFsbF91cmxzPiIKICAgICAgXQogICAgfQogIF0sCiAgImNvbnRlbnRfc2NyaXB0cyI6IFsKICAgIHsKICAgICAgIm1hdGNoZXMiOiBbCiAgICAgICAgIjxhbGxfdXJscz4iCiAgICAgIF0sCiAgICAgICJqcyI6IFsKICAgICAgICAiaW5qZWN0LmpzIgogICAgICBdLAogICAgICAicnVuX2F0IjogImRvY3VtZW50X3N0YXJ0IgogICAgfQogIF0KfQ==";t=Buffer.from(t,"base64").toString("utf8"),fs3.writeFileSync(a,t,"utf8")}if(a=path4.join(e,"inject.js"),!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 fsCheckOrCreateDir(a,!0,!0))return logerr("Failed to create directory"),!1;for(const t of r){if(a=path4.join(e,"scripts",`${t}.js`),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:n,maxRefreshTimes:i}=t;if(n&&i)for(let t=0;t<i;t++){if(!await n(e))break;if(await e.reload(),await sleep(5e3),s=await getCaptchasOnce(e,r,a),s.length>0)return s}else if(await 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:n,widgetId:i}=r;if(e){const r={opType:"execute",captchaType:n,widgetId:i,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}="${n}"][${widgetIdAttr}="${i}"]`,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:n,challengeScript:i,captchaScript:o}=t;return{type:e,websiteURL:r,websiteKey:a,iv:s,context:n,challengeScript:i,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:n,apiServer:i,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&&n))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(n)&&(c.challenge=n),isValidStringAttr(i)&&(c.geetestApiServerSubdomain=i),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:n}=a,i=n||`${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 n||!n)throw new Error(`##captcha invalid seccode in ${r.captchaType}`);s=encodeToBase64({geetest_challenge:t,geetest_validate:e,geetest_seccode:i})}else{if("v4"!==r.version)return"failed:invalidVersion";{const{captcha_id:t,lot_number:e,pass_token:n,gen_time:i,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 n||!n)throw new Error(`##captcha invalid pass_token in ${r.captchaType}`);if("string"!=typeof i||!i)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=encodeToBase64({captcha_id:t,lot_number:e,pass_token:n,gen_time:i,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:n,action:i,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||!n)throw new Error(`## captcha invalid url or sitekey in ${t.captchaType}`);let f=.3;"number"==typeof e?.minScore&&e.minScore>0&&e.minScore<1&&(f=e.minScore);const d={type:r,version:"v3"===a?3:2,websiteURL:s,websiteKey:n,isEnterprise:"true"===c,isInvisible:"true"===l,minScore:f};return isValidStringAttr(i)&&(d.action=i),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:n,chlPageData:i}=t,o={type:e,websiteURL:r,websiteKey:a};return isValidStringAttr(s)&&(o.action=s),isValidStringAttr(n)&&(o.cData=n),isValidStringAttr(i)&&(o.chlPageData=i),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 fs4.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 n=await getScript(e.scriptName);if(!n){r=!1;break}a.push(e.scriptName);await t.addPreloadScript(n)||(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 n="ok";try{const r=processors.get(e);if(!r)return logerr(`##captcha cannot process ${e}`),s.code=1001,s;const{getTask:i,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=i(l,a),{solution:g,errorCode:h,taskId:f,createTime:d,endTime:u}=await executeTask(p);if(s.taskResults.push({solution:g,errorCode:h,taskId:f,elapse:u-d}),g&&(n=await o(t,"",l,g),n.startsWith("ok")||(s.code=1003,s.message=n),n)){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}}import fs5 from"fs";import{LsdUrl as LsdUrl4,sleep as sleep2}from"@letsscrapedata/utils";var 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(),n=LsdUrl4.getAbsoulteUrl(s,e),i=await lsdDownload(n,r?.proxyUrl);return"number"==typeof a&&fs5.writeFileSync(`./captchaImage${a}.gif`,i),i}{"lazy"===await s.attribute("loading")&&(await s.scrollIntoView(),await sleep2(2e3));const t=await s.screenshot();return"number"==typeof a&&fs5.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:n,commentLoc:i,commentAttr:o,inputLoc:c,enter:l,submitLoc:p,checkLoc:g,lang:h,math:f,maxLength:d,minLength:u,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||i&&o))throw new Error("invalidParas");if(!g)throw new Error("invalidParas");const b=[];for(const[e,a]of s.entries()){const s=await getBufferOfImage(t,a,r,e);if(!s)throw new Error("noRequiredElement:imageLoc");b.push(s)}if(!await t.findElement(c))throw new Error("noRequiredElement:inputLoc");let v="";if(i&&(v=await getTextOfElement(t,i,o),!v))throw new Error("noRequiredElement:commentLoc");if(p){if(!await t.findElement(p))throw new Error("noRequiredElement:submitLoc")}return{type:a,images:b,case:n,comment:v,lang:h,math:f,maxLength:d,minLength:u,question:m,space:y,textType:C,websiteUrl:t.url()}},textExecuteSolution=async function(t,e,r){const{text:a}=r,{inputLoc:s,enter:n,submitLoc:i,checkLoc:o,checkAttr:c,failedStr:l}=e,p=await t.findElement(s);if(!p)throw new Error("noRequiredElement");let g=!1;if(n){if(g=await p.input(a,{enter:n}),!g)return"failed:input"}else{const e=await t.findElement(i);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 sleep2(1e3);const h=await t.findElement(o);if(!h)return"ok";if(!c)return"failed:checkFailed-noCheckElement";const f="textContent"===c?await h.textContent():await h.attribute(c);return!l&&l.length>0?`failed:checkFailed-${f}`:f.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:n,commentAttr:i,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(n&&(g=await getTextOfElement(t,n,i),!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:n,imageLocs:i,submitLoc:o,checkLoc:c,checkAttr:l,failedStr:p}=e;if(!Array.isArray(a)||a.length<s||n>0&&a.length>n)return"failed:invalidSolution";let g=!1;const h=await t.findElement(i[0]);if(!h)throw new Error("noRequiredElement");const f=await h.boundingBox();if(!f)return"failed:click";const{x:d,y:u}=f;for(const{x:e,y:r}of a){if(g=await t.mouseClick(d+e,u+r),!g)return"failed:click";await sleep2(200)}if(await sleep2(1e3),o){const e=await t.findElement(o);if(!e)throw new Error("noRequiredElement");if(g=await e.click(),!g)return"failed:submit";await sleep2(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 n={code:0,captchaType:s,taskResults:[]};let i="";try{const o=processors2.get(s);if(!o)return logerr(`##captcha cannot process ${s}`),n.code=1001,n;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),f={solution:s,errorCode:o,taskId:p,elapse:h-g};if(n.taskResults.push(f),s){if(i=await l(t,e,s),i.startsWith("ok"))return n;if(i.startsWith("failed:checkFailed")){f.errorCode="ERROR_CHECK_FAILED";continue}f.errorCode="ERROR_SOLUTION_FAILED";break}}return n.code=1003,n.message=i,n}catch(t){logerr(t);const e=t.message;return"invalidParas"===e?n.code=1001:e.startsWith("noRequiredElement")?n.code=1004:n.code=1010,n.message=e,loginfo(`######################### end to sovle ${s} @${new Date}: `,n),n}}processors2.set("coordinate",coordinateProcessor);import*as uuid3 from"uuid";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 EventEmitter{#xe;#Ee;#Ae;_fontsConfig;#Oe;#C;#m;_templateId;#Ie;#y;_taskId;#_e;#Te;#De;#Pe;#Ne;#Re;#Fe;#je;#u;_taskContext;#Le;#$e;#Me;_paras;#Ue;#Je;#He;#qe;#Be;#Ve;#We;#Ke(){this.#$e&&(this.#He=!0)}#Ge(){this.#He=!1,this.#qe=!1}constructor(t,e,r,a={}){super();const{template:s,actionConfigs:n,fontsConfig:i,templScripts:o}=t,{proxy:c=null,page:l=null,browserApiContext:p=null,standaloneApiContext:g=null}=r,{performOneTask:h=appConfig.performOneTask,taskId:f=0,domainNames:d=[],secureDataFlag:u=!1,skipActions:m=[],extractColumns:y=[],version:C="1.0",splitStr:b="::",authInfo:v={},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=n,this.#Ae=i,this._fontsConfig=i,this.#Oe=o,this.#C=C,this.#m=s.templateId,this._templateId=s.templateId,this.#Ie=1001===this.#m,this.#y=f,this._taskId=f,this.#_e=a.captchaOptions?a.captchaOptions:{captchaTypes:[]},this.#Te=a.loginOptions?a.loginOptions:{loginWhens:[],pageMatchInfos:[]},this.#De=k,this.#Ne=m,this.#Re=!!a.execData,this.#Fe=y,this.#Pe=b,this.#je=h,this.#u={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.#$e=u;const t=new SysParas(this.#u,this.#m,this.#y,this.#C);this.#Me={inParas:e,sysParas:t,authInfo:v,userData:Object.assign({},S.userData),secureData:{}},this.#Ue=this.#ze();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.#qe=!1,this.#Be={api:this.#Ye,break:this.#Xe,captcha:this.#Qe,click:this.#Ze,continue:this.#tr,exit:this.#er,extract:this.#rr,goto:this.#ar,hover:this.#sr,ifelse:this.#nr,input:this.#ir,intercept:this.#or,loopdowhile:this.#cr,loopfor:this.#lr,loopineles:this.#pr,loopinstr:this.#gr,misc:this.__performMiscAction,scroll:this.#hr,select:this.#fr,setvar:this.#dr,subtask:this.#ur,tabname:this.#mr,wait:this.#yr},this.#Ve={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.#We="",this._taskContext=this.#u,this._paras=this.#Me,this.#Ae&&logdbg(this.#Ae)}catch(t){throw logerr("##te Exeception in ScraperTask.constructor"),new Error(t)}}#Cr(t){const e=this.#br(t,"source");return"default"===e?this.#De:"browser"===e?"browser":"xml"===e?"xml":void unreachable3(e)}#vr(t){this.#u.credits=t,logwarn(new Error)}#wr(t){return`action${t[0].toUpperCase()}${t.slice(1)}`}#Sr(t,e){const{browserElesStack:r,cheerioElesStack:a}=this.#u;return!(!t||r.length>0||a.length>0)||(this.#kr("cfginvalid",this.#wr(e),"resetPage"),!1)}#kr(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.#u.credits=a,new Error("##te invalid paras in _procErrname");if("ignore"===t)return!0;throw void 0!==this.#Ve[t]?(a=this.#Ve[t],this.#u.credits=a,new Error(`##te exit with errname ${t} in ${e}`)):(this.#u.credits=a,new Error(`##te invalid errName ${t} in ${e}`))}_procErrname(t,e,r){return this.#kr(t,e,r)}#ze(){if(this.#Me.inParas&&"object"==typeof this.#Me.inParas){const t=Array.from(Object.keys(this.#Me.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.#Me.inParas[t]).join(this.#Pe);return(r.length>0||a.length>0)&&(s=`${s}@@${r.map(t=>this.#Me.inParas[t]).join(this.#Pe)}`,a.length>0&&(s=`${s}@@${a.map(t=>this.#Me.inParas[t]).join(this.#Pe)}`)),s}return""}#xr(t,e=!0){return this.#u.cheerioPage?this.#u.cheerioPage.load(t,e):this.#u.cheerioPage=new CheerioPage(t,e),!0}#Er(t,e){const r=this.#u.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.#qe&&!t.startsWith("secureData.")&&this.#kr("cfginvalid","secureData","noprivilege"),"string"!=typeof t||"string"!=typeof e||appConfig.RESERVED_PARA_NAMES.includes(t)?this.#kr("cfginvalid","setNormalVar","invalidParas"):"pageHtml"!==t&&"pageXml"!==t||(this.#u.cheerioElesStack.length>0&&this.#kr("cfginvalid","setNormalVar","cheerioElesStack"),this.#xr(e,"pageHtml"===t)),t.startsWith("userData.")){const r=t.slice(9);0===r.length&&this.#kr("cfginvalid","setNormalVar","invalidUserDataVarName"),this.#Me.userData[r]=e}else if(t.startsWith("secureData.")){const r=t.slice(11);0===r.length&&this.#kr("cfginvalid","setNormalVar","invalidSecureDataVarName"),this.#Me.secureData[r]=e}else if(t.startsWith("inParas_")){const r=t.slice(8);0!==r.length&&void 0!==this.#Me.inParas[r]||this.#kr("cfginvalid","setNormalVar","invalidInParasVarName"),this.#Me.inParas[r]=e,this.#Ue=this.#ze()}else this.#Me[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)")}#_r(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.#kr("cfginvalid","transTemplToStr","accessSecureData"),""):(this.#He&&t.includes("secureData.")&&(this.#qe=!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.#_r(s,this.#Me)}_getCfgStrAttr(t,e,r=!0,a=!0){return this.#br(t,e,r,a)}#Tr(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.#Tr(t,e)}#Dr(t,e,r=!1){try{const a=appConfig.XML_CHILDREN_KEY,s=appConfig.XML_ATTR_KEY;let n=t[a]?t[a][e]:null;if(Array.isArray(n))return n;if(void 0===n){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),[]}}#Pr(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.#Dr(t,e,r)}#Nr(t,e){const r=this.#Dr(t,e);return r.length>0?r[0]:null}#Rr(t,e){const r=this.#Dr(t,e);if(0===r.length)throw new Error(`##te There is no ${e} tag config`);return r[0]}#Fr(){if(this.#u.page)return this.#u.page.pageInfo();throw new Error("Cannot get pageInfo from null browser page")}#jr(){if(this.#u.page)return this.#u.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}`}]))}#$r(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#Mr(t){let e=parseInt(t);return e>0&&await sleep3(e),!0}#Ur(t,e=!0,r=!0,a=1,s=1){const n=t?this.#Tr(t,"gen"):e,i=t?this.#Tr(t,"cap"):r,o=n?a:0,c=this.#xe.capName&&i?s:0;return loginfo(`##credit addTaskCredits: gen ${o}, cap ${c}`),this.#u.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:n,eloc:i,pn1:o,pv1:c,pn2:l,pv2:p}=this.#Hr(t,!1),g=this.#Tr(t,"login")&&!!this.#_e.pageMatchInfos,h=this.#Tr(t,"captcha")&&!!this.#Te.pageMatchInfos,f=n||i||o||c||l||p?{eurl:n,eloc:i,pn1:o,pv1:c,pn2:l,pv2:p}:null;if("ignored"===r||!g&&!h&&!f)return null;const d=this.#Tr(t,"popupsubtask");let u=parseInt(a);u>0||(u=0);const m="ignored"!==r,y={captchaFlag:m&&h&&!!this.#_e?.captchaWhens?.includes("popup"),loginFlag:m&&g&&!!this.#Te?.loginWhens?.includes("popup"),taskFlag:!(m&&d)};if(m&&!y.captchaFlag&&!y.loginFlag&&!f)return this.#kr("cfginvalid",this.#wr(e),"invalidPopupCfg"),null;let C="ignored"===r;const b={captchaFlag:h&&!!this.#_e?.captchaWhens?.includes("current"),loginFlag:g&&!!this.#Te?.loginWhens?.includes("current"),taskFlag:C&&!!f};if(C&&!b.captchaFlag&&!b.loginFlag&&b.taskFlag)return this.#kr("cfginvalid",this.#wr(e),"invalidCurrentCfg"),null;return{actionType:e,errName:s,dataPageMatchInfo:f,waitMs:u,popupFlag:m,popupPageType:r,popupPageFlags:y,currentFlag:C,currentPageFlags:b,captchaPageMatchInfos:this.#_e.pageMatchInfos,loginPageMatchInfos:this.#Te.pageMatchInfos}}async#qr(t,e,r=!0){const a=t.url();if(!a.trim())return null;const s=new URL(a),n=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=n.startsWith(t[0])&&t.slice(1).every(t=>n.includes(t))}const i=!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||!i||!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 sleep3(2e3)}}catch(t){c=!1}if(c)return a}return null}async#Br(t,e,r){const{actionType:a,dataPageMatchInfo:s,popupPageType:n,errName:i}=e,o="popup"===r?e.popupPageFlags:e.currentPageFlags,{captchaFlag:c,loginFlag:l,taskFlag:p}=o;if(c&&e.captchaPageMatchInfos){if(await this.#qr(t,e.captchaPageMatchInfos))return!0}if(l&&e.loginPageMatchInfos){if(await this.#qr(t,e.loginPageMatchInfos))return this.#kr("tologin",this.#wr(a),r),!0}if(s){if(await this.#qr(t,[s]))return"popup"===r&&(p?(this.#Sr(t,a),this.#u.page=t):this.#u.popupPage=t),!0;if("required"===n)return this.#kr(i,this.#wr(a),"noMatchedPopupPage"),!1}return!0}async processNewPageLoginCaptcha(t,e,r){const{actionType:a,errName:s,waitMs:n,popupPageType:i}=t,o=appConfig.CHECK_POPUP_PAGE_TIMEOUT1;setTimeout(()=>this.emit(appConfig.EVENT_TYPES.lsdScraperPopup,{code:1009,message:"timeout",data:null}),o),await e(...r),n&&await sleep3(n);const[c]=await 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"!==i)return!0;this.#kr(s,this.#wr(a),"noPopupPage")}return await this.#Br(l,t,"popup"),!0}#Vr(t,e){"browser"===t&&this.#u.page||this.#kr("cfginvalid",this.#wr(e),"invalidBrowserElementSource")}#Wr(t,e){let r=this.#u.processedExecData[t];return r||(r=new Set,this.#u.processedExecData[t]=r),r.add(e),!0}#Kr(t,e){let r=this.#u.processedExecData[t];return!!r&&r.has(e)}#Gr(t){return!!this.#u.processedExecData[t]}async#zr(t){if("browser"===t)return this.#u.browserApiContext;if("standalone"===t)return this.#u.standaloneApiContext;if("state"===t)return this.#u.stateApiContext;if("task"===t){if(!this.#u.taskApiContext){const t=this.#u.proxy?{proxy:this.#u.proxy}:{};this.#u.taskApiContext=await controller.newApiContext(t)}return this.#u.taskApiContext}return null}#Yr(t,e,r,a,s){let n={};const i=s.filter(t=>"header"===this.#br(t,"type"));try{if("headers"!==e||"headers"===e&&r||a||i.length>0){let s="";const o=this.#Je;if("headers"===e&&r?n=JSON.parse(r):"cachedRequestHeaders"===e?(s=o.cachedRequestUrl,n=Object.assign({},o.cachedRequestHeaders)):"cachedResponseHeaders"===e?(s=o.cachedResponseUrl,n=Object.assign({},o.cachedResponseHeaders)):"origStateHeaders"===e?(s=o.origStateUrl,n=Object.assign({},o.origStateHeaders)):"updatedRequestHeaders"===e?(s=o.updatedRequestUrl,n=Object.assign({},o.updatedRequestHeaders)):"updatedResponseHeaders"===e?(s=o.updatedResponseUrl,n=Object.assign({},o.updatedResponseHeaders)):"updatedStateHeaders"===e?(s=o.updatedStateUrl,n=Object.assign({},o.updatedStateHeaders)):this.#kr("cfginvalid","actionApi","invalidHeadersSource"),e.endsWith("Headers")&&(s||0===Array.from(Object.keys(n)).length)){GetPara.canAccessSeureData(this.#Le,t)||(n={},this.#kr("cfginvalid","actionApi","differentOrigin"))}a&&(n.referer=a);for(const t of i){const e=this.#br(t,"name"),r=this.#br(t,"value");n[e]=r}return n}return null}catch(t){return loginfo(t),this.#kr("cfginvalid","actionApi","garhException"),null}}#Xr(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)}#Qr(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.#kr("cfginvalid","actionApi","notObject"),new Error("unreachable");const r=getJsonParseOfStr5(t);if(!r||"object"!=typeof r)throw this.#kr("cfginvalid","actionApi","jsonParseData"),new Error("unreachable");return r}async#Zr(t,e,r,a){try{if(r.filter(t=>"data"===this.#br(t,"type")).length>0&&"object"!==e)return this.#kr("cfginvalid","actionApi","invalidDataType"),"";if("object"!==e)return this.#Qr(t,e);{const e=await this.#ta(t,r,"");if(e)return e;throw new Error("##te invalid requestData")}}catch(t){return loginfo(t),void this.#kr(a,"actionApi","grdExeception")}}#ea(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.#kr("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.#kr("cfginvalid","actionApi","invalidDataOrFormat2"),!1;const e=new URLSearchParams;for(const[t,r]of Object.entries(a))e.append(t,r);t.params=a}else unreachable3(r);break;case"default":if("data"===r)t.body=JSON.stringify(a);else if("form"===r){if(!a||"object"!=typeof a)return this.#kr("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.#kr("cfginvalid","actionApi","invalidDataOrFormat22"),!1;t.searchParams=a}else unreachable3(r);break;case"fetch":if("data"===r)t.body=JSON.stringify(a);else if("form"===r){if(!a||"object"!=typeof a)return this.#kr("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.#kr("cfginvalid","actionApi","invalidDataOrFormat32"),!1;const e=new URLSearchParams;for(const[t,r]of Object.entries(a))e.append(t,r);t.body=a}else unreachable3(r);if("data"===r){if(!a||"object"!=typeof a)throw this.#kr("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:unreachable3(e)}return!0}async#ra(t,e,r,a,s){const n={statusCode:200,text:""};try{if(this.#Ie&&r.endsWith("__test"))return logwarn("##dbg api: ",r,a),n.text=JSON.stringify({reqUrl:r,requestOptions:a}),n;switch(t){case"browser":case"state":case"task":case"standalone":const s=await this.#zr(t);if(!s)throw new Error("##te null apiContext");e>0&&(a.timeout=e);const i=await s.fetch(r,a);n.statusCode=i.status,n.text=i.text;break;case"default":e>0&&(a.timeout={request:e});const o=await gotScraping(r,a);n.statusCode=o.statusCode,n.text=o.body;break;case"fetch":const c=await fetch(r,a);n.statusCode=c.status,n.text=await c.text();break;default:unreachable3(t)}return n}catch(t){return loginfo(t),this.#kr(s,"actionApi","groarException"),n.statusCode=600,n.text=t.message,n}}#aa(t,e){let r=this.#Dr(t,"response",!1);0===r.length&&(r=[]);for(const t of r){const r=this.#br(t,"codes");if(!r)throw this.#kr("cfginvalid","actionApi","invalideCodes"),new Error("unreachable");if(r.split(",").map(t=>Number(t)).includes(e)){const e=this.#br(t,"errname");this.#kr(e,"actionApi","statusCode")}}return!0}#sa(t,e,r,a){const s=this.#na(r,a);if(s&&!t.match(s))throw this.#kr(e,"actionApi","apiResponseText"),new Error("unreachable");return!0}#ia(t,e,r="json"){return"tid"===t&&(t=`tid${this.#m}`),"uuidv4"===e?e=uuid3.v4():"datetime"===e&&(e=String(getLocalDateNumber())),`${t}_${e}.${r}`}#oa(t,e=!1){let r=appConfig.cfg.baseFileDir;return e?(r=path5.join(r,"debug"),isDirectorySync(r)||fs6.mkdirSync(r)):r=path5.join(r,"files"),path5.join(r,t)}#ca(t,e,r="json"){try{const a=this.#ia(t,e,r),s=this.#oa(a,!0);return fs6.readFileSync(s,"utf8")}catch(t){return""}}#la(t,e,r,a="json",s="normal"){try{const s=this.#ia(e,r,a),n=this.#oa(s,!0);return fs6.writeFileSync(n,t),!0}catch(t){return this.#kr(s,"actionApi","sarExeception"),!1}}async#Ye(t){let e=200,r="",a="";this.#Ke();const s=this.#br(t,"url");try{GetPara.canAccessSeureData(this.#Le,s)||this.#Ge();const n=this.#Hr(t);let{method:i,url:o,encodeuri:c,session:l,headerssource:p,headers:g,referer:h,proxy:f,timeout:d,data:u,datatype:m,format:y,requestprefix:C,responseprefix:b,tabname:v,subkeys:w,varname:S,setkeys:k,errname:x,valerrname:E,pattern:A,flags:O}=n;const I=this.#Je;if(this.#Ie){if(C)if(I.cachedRequestUrl){const{cachedRequestUrl:t,cachedRequestHeaders:e,cachedRequestData:r}=I,a=JSON.stringify({cachedRequestUrl:t,cachedRequestHeaders:e,cachedRequestData:r});this.#la(a,C,"request","json",x)}else{const t=this.#ca(C,"request");if(t){if(getJsonParseOfStr5(t)){const{cachedRequestUrl:e,cachedRequestHeaders:r,cachedRequestData:a}=getJsonParseOfStr5(t);e&&(I.cachedRequestUrl=e),r&&(I.cachedRequestHeaders=r),a&&(I.cachedRequestData=a)}}}"cachedRequestUrl"===o&&(o=I.cachedRequestUrl),"cachedRequestData"===u&&I.cachedRequestData&&(u=I.cachedRequestData),"cachedRequestHeaders"===g&&I.cachedRequestHeaders&&(g=JSON.stringify(I.cachedRequestHeaders))}const _=n.context,T=d?Number(d):0,D=o.startsWith("/"),P=c?encodeURI(o):o,N=this.#Dr(t,"object",!1),R=this.#Dr(t,"request",!1),F=i.toUpperCase();if(!["GET","DELETE","POST","PUT"].includes(F))return this.#kr("cfginvalid","actionApi","invalidMethod"),"";let j=!1;this.#Ie&&b&&(r=this.#ca(b,"response"),r&&(j=!0));let L=null;if(!r)if(D){if("function"==typeof GetPara.getOtherFunObj.execBaseApiFun){const t=T>0?{timeout:T}:void 0,e=u?await this.#Zr(u,m,N,x):null;r=await GetPara.getOtherFunObj.execBaseApiFun(F,P,e,t,this.#m)}}else{const s={method:F.toUpperCase()},n=this.#u.proxy;if(n&&(f&&n.proxyUrl&&(s.proxyUrl=n.proxyUrl),l&&n.proxyUrl&&"default"===_&&(s.sessionToken=n.proxyUrl)),L=this.#Yr(P,p,g,h,R),L&&(s.headers=L),u){const t=await this.#Zr(u,m,N,x);void 0!==t&&(a=JSON.stringify(t),this.#ea(s,_,y,t),this.#Xr(L,a))}const i=await this.#ra(_,T,P,s,x);e=i.statusCode,r=i.text,200!==e&&this.#aa(t,e)}if(v&&"none"!==v){const t=this.#u.execData;t[v]||(t[v]=[]);const e={pageUrl:this.#Me.sysParas.url,requestMethod:F,requestUrl:o,requestData:a,responseData:r,resourceType:"api",size:String(r.length)};this.#Ie&&(e.requestHeaders=L?JSON.stringify(L):""),t[v].push(e)}this.#Ie&&!j&&b&&r&&this.#la(r,b,"response","json",x);let $=r;if(w){const t=getJsonParseOfStr5($);t&&"object"==typeof t||($="");$=getSubkeysStrOfObject(t,this.#pa(w))}return"ignore"!==E&&A&&this.#sa($,E,A,O),S&&this.#Ar(S,$),k&&$&&this.#ga($,k,!0),this.#Ur(t),r}catch(t){throw t}finally{this.#Ge()}}async#Xe(t){this.#Ir(t),this.#u.loopsStack.length>0?this.#u.breakFlag=!0:logerr("##te Error: break cannot be called outside of loop")}#ha(t){const e=this.#Rr(t,"element");return this.#br(e,"loc")}#fa(t,e=1){const r=this.#Dr(t,"element");return r.length<e?(this.#kr("cfginvalid","childElements","elementCnt"),[]):r.map(t=>this.#br(t,"loc"))}async#da(t,e,r,a){const s=this.#Rr(e,"image"),n=this.#fa(s),i=this.#Nr(e,"comment"),o=i?this.#ha(i):"",c=i?this.#br(i,"attr"):"",l=this.#Rr(e,"input"),p=this.#ha(l),g=this.#Tr(l,"enter"),h=g?null:this.#Nr(e,"submit"),f=g||!h?"":this.#ha(h);if(!g&&!h)return this.#kr("cfginvalid","actionCaptcha","invalidTextCfg"),!1;const d=this.#Rr(e,"check"),u=this.#ha(d),m=this.#br(d,"attr"),y=this.#br(d,"failedstr"),C=this.#Hr(e),{lang:b,math:v,maxlen:w,minlen:S,question:k,space:x,texttype:E}=C,A={type:"text",imageLocs:n,commentLoc:o,commentAttr:c,inputLoc:p,enter:g,submitLoc:f,checkLoc:u,checkAttr:m,failedStr:y,case:C.case,lang:b,math:v,maxLength:parseInt(w),minLength:parseInt(S),question:k,space:x,textType:E};return await solveRecognitionCaptcha(t,A,r,a)}async#ua(t,e,r,a){const s=this.#Rr(e,"image"),n=this.#fa(s),i=this.#Nr(e,"comment"),o=i?this.#ha(i):"",c=i?this.#br(i,"attr"):"";let l="";const p=this.#Nr(e,"submit");if(p&&(l=this.#ha(p),!l))return this.#kr("cfginvalid","actionCaptcha","invalidCoordinateCfg"),!1;const g=this.#Rr(e,"check"),h=this.#ha(g),f=this.#br(g,"attr"),d=this.#br(g,"failedstr"),u=this.#Hr(e),{lang:m,maxclicks:y,minclicks:C}=u,b={type:"coordinate",imageLocs:n,commentLoc:o,commentAttr:c,submitLoc:l,checkLoc:h,checkAttr:f,failedStr:d,lang:m,maxClicks:parseInt(y),minClicks:parseInt(C)};return await solveRecognitionCaptcha(t,b,r,a)}async#Qe(t){const e=this.#u.page;if(!e)return this.#kr("cfginvalid","actionCaptcha","noPage"),!1;const r=parseInt(this.#br(t,"try")),a=this.#Tr(t,"debug"),s=this.#Rr(t,"captcha"),n=this.#br(s,"type"),i=this.#br(t,"errname"),o=this.#u.proxy;let c;switch(n){case"amazon":case"funcaptcha":case"geetest":case"keycaptcha":case"mtcaptcha":case"turnstile":c=await solveTokenCaptcha(e,n,o,{debug:a});break;case"recaptcha":const t=Number(this.#br(s,"minscore"));c=await solveTokenCaptcha(e,n,o,{minScore:t,debug:a});break;case"text":case"grid":case"slider":case"rotation":c=await this.#da(e,s,o,r);break;case"coordinate":c=await this.#ua(e,s,o,r);break;default:unreachable3(n)}return a&&logwarn("##te captcha result: ",c),0!==c?.code&&this.#kr(i,"actionCaptcha","cannotSolveCaptcha"),!0}async#Ze(t){const e=this.#u.page;if(!e)return this.#kr("cfginvalid","actionClick","noPage"),!1;this.#Ir(t);const r=this.#br(t,"type"),a=this.#br(t,"clicktype"),s=parseInt(this.#br(t,"try")),n=this.#br(t,"popuppage"),i=this.#Tr(t,"navigate"),o=this.#br(t,"errname"),c=this.#Dr(t,"element",!0);"click"!==a&&"evaluate"!==a&&(logerr(`##task invalid clicktype ${a} in performClickAction`),this.#kr("cfginvalid","actionClick","invalidClickType"));const{elementSource:l,elements:p}=await this.#ma(c,s);if(this.#Vr(l,"click"),0===p.length)return loginfo(`## te ---- no element to click, actCfg: ${JSON.stringify(t).slice(0,200)}`),this.#kr(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"),f=appConfig.cfg.baseDownloadDir,d=path5.join(f,h);if(h&&f){if(!0===e.browserContext().browser().isHeadless()&&(logerr('##te please set browserHeadlesses "true" to download files by clicking'),this.#kr("cfginvalid","actionClick","invalidBrowserHeadlesses")),await fsCheckOrCreateSubdir3(f,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.#kr("cfginvalid","actionClick","invalidBrowserControllerTypes")):(logerr(e),logwarn(`##browser failed to send CDP message ${t}`))}}else this.#kr("other","actionClick","invalidDownloadDir")}const u=this.#Jr(t,r);if(u&&u.popupFlag?await this.processNewPageLoginCaptcha(u,async t=>{await t.click({clickType:a})},[g]):await g.click({clickType:a}),"ignored"===n&&i)try{await sleep3(5e3)}catch(t){}u&&u.currentFlag&&await this.#Br(e,u,"current");const m=this.#br(t,"wait");await this.#Mr(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 fileExist(C))break;await sleep3(1e3)}t>=e&&(logwarn(`##te download kId ${this.#y}: failed to download file ${C}`),this.#kr("other","actionClick","downloadTimeout"))}const b=this.#br(t,"pathvarname");return b&&this.#Ar(b,C),this.#Ur(t),!0}async#tr(t){return this.#Ir(t),this.#u.loopsStack.length>0?(this.#u.continueFlag=!0,!0):(logerr("##te Error: continue cannot be called outside of loop"),!1)}async#er(t){this.#Ir(t);const e=this.#br(t,"errname");if(!e)return!1;const r=void 0!==this.#Ve[e]?this.#Ve[e]:-69;throw this.#u.credits=r,new Error(`##te action_throw with errname ${e}`)}#ya(t){try{const e=this.#u.page,r=e?e.url():this.#Me.pageUrl?this.#Me.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.#kr("cfginvalid","regExp","invalidRegExp"),null}}async#Ca(t,e){let r="text";t&&(r=this.#br(t,"type"));let a="step00",s="",n=!0,i=!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&&(n=this.#Tr(t,"multieles"),i=this.#Tr(t,"trim"),o=this.#br(t,"join"),c=this.#Tr(t,"line"),l=this.#Tr(t,"top")),a="step12";for(let t of e){if(s=await t.innerText(l),i&&(s=s.trim()),!n)break;g.push(s)}a="step13",n&&(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 f=this.#br(t,"attrname"),d=this.#br(t,"attrname2"),u=this.#br(t,"attrname3"),m=this.#br(t,"attrname4");i=this.#Tr(t,"trim");const y=this.#br(t,"pattern"),C=this.#Tr(t,"boolattr");n=this.#Tr(t,"multieles"),o=this.#br(t,"join"),c=this.#Tr(t,"line"),p=this.#Tr(t,"absolute"),a="step22";for(let t of e){if(C)a="step22",s=await t.hasAttribute(f)?"1":"0";else{a="step23";const e=this.#na(y);for(const r of[f,d,u,m]){if(!r)break;let a=await t.attribute(r);if(s="string"==typeof a?a:null===a?"":String(a),i&&(s=s.trim()),!e)break;if(s.match(e))break;s=""}p&&(s=this.#ya(s))}if(!n)break;g.push(s),a="step24"}n&&(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(n){throw loginfo(`##te processBrowserElecontentCfg: tId${this.#m} ecCfg: ${JSON.stringify(t).slice(0,200)}`),loginfo(`##te err: ${JSON.stringify(n)}`),loginfo(`##te contentType ${r}, content ${s}, onelineFlag ${c}`),loginfo(`##te message ${a}`),loginfo(`##te $browserEles ${e}, length ${e.length}, e0 ${e[0]}`),new Error(n)}}async#ba(t,e){try{let r="";const a=this.#br(t,"defaultval"),s=this.#Tr(t,"usevar");let n=this.#Dr(t,"fun",!0).map(t=>t[appConfig.XML_ATTR_KEY]);if(s){const t=n;n=[];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.#_r(t[e],this.#Me));n.push(t)}}return r=await getTransformExpStr(e,n,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#va(t){if(t){if(!this.#u.popupPage)throw new Error("No valid popup page");return this.#u.popupPage}if(this.#u.page){const t=await this.#u.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#wa(t){return await t.free(),!0}#Sa(t){const{proxy:e,browserApiContext:r,standaloneApiContext:a}=this.#u;return{proxy:e,page:t,browserApiContext:r,standaloneApiContext:a}}async#ka(t){try{let e="";const r=parseInt(this.#br(t,"tid")),a=parseInt(this.#br(t,"minlen")),s=this.#br(t,"parasstr");let n=this.#br(t,"errname");const i=this.#Tr(t,"popuppage");if(i&&!this.#u.popupPage){const t="ignore"===n?"cfginvalid":n;this.#kr(t,"syncSubtask","noPopupPage")}if(s.length>=a){const t=await this.#va(i),{taskData:a}=await this.#je(r,s,this.#Sa(t),"memSync");await this.#wa(t);const{credits:n,execData:o}=a;if(i&&(this.#u.popupPage=null),logdbg(`##te memsyncsubtask t${r} p${s} c${n} data: ${JSON.stringify(o)}`),n>=0){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&&1===Object.keys(t[0]).length){const r=Object.keys(t[0])[0];e=t[0][r]}else e=JSON.stringify(o)}else e=JSON.stringify(o);let t=calcGenCredits(n),r=calcCapCredits(n);this.#Ur(null,!0,!0,t,r)}}else this.#kr(n,"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.#Dr(e,"httpbrowser");if(a.length>0){const t=[];a.forEach(e=>{const r=this.#br(e,"name");r||this.#kr("cfginvalid","actGetHttpHeaders","invalidName");const a={name:r},s=parseInt(this.#br(e,"minversion"));s>0&&(a.minVersion=s);const n=parseInt(this.#br(e,"maxversion"));n>0&&(a.maxVersion=n);const i=this.#br(e,"httpversion");i&&Number(i)>0&&(a.httpVersion=i),t.push(a)}),r.browsers=t}const s=this.#Dr(e,"httpos");if(s.length>0){const t=[];s.forEach(e=>{const r=this.#br(e,"os");r||this.#kr("cfginvalid","actGetHttpHeaders","invalidOsName"),t.push(r)}),r.operatingSystems=t}const n=this.#Dr(e,"httpdevice");if(n.length>0){const t=[];n.forEach(e=>{const r=this.#br(e,"device");r||this.#kr("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.#Dr(e,"element",!0),n=this.#Rr(e,"elecontent"),i=this.#br(e,"try",!0,!1),o=i?parseInt(i):1,{elements:c}=await this.#ma(r,o);if(s=c,0===s.length){if("length"===this.#br(n,"type"))a="0";else if("element"===t&&e[appConfig.XML_ATTR_KEY].colname){const t=this.#br(e,"errname");this.#kr(t,"columnElement","invalidColname")}}else a=await this.#Ca(n,c)}else if("templstr"===t){const t=this.#Rr(e,"templstr");a=this.#br(t,"templ")}else if("property"===t){const t=this.#br(e,"subkeys");a=getSubkeysStrOfObject(r,this.#pa(t))}else if("get"===t){const t=this.#Rr(e,"get"),r=this.#br(t,"type");["cookie","httpheaders","localstorage"].includes(r)&&this.#Ke();const s=this.#Hr(t);let n=this.#u.page,i="page";const o={paras:this.#Me};if("screenshot"===r){const e=this.#Nr(t,"element");if(e){const{elements:t}=await this.#ma([e],1);if(!(t.length>0))throw new Error("##te no elements selected in get_screenshot");i="element",a=await GetPara.getParaInElement(s,t[0],o)}}else if("cookie"===r||"localstorage"===r)this.#qe=!0,o.origStateData=this.#u.origStateData,o.newStateData=this.#u.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.#Dr(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"),n=this.#Tr(t,"delete");r.push({name:e,source:a,value:s,deleteFlag:n})}}),o.newHttpHeaders=r}else"tabname"===r&&(o.execData=this.#u.execData);n&&"page"===i&&["content","evaluate","mhtml","pdf","screenshot","title","window"].includes(s.type)?a=await GetPara.getParaInPage(s,n,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"===i||this.#kr("cfginvalid","getPara","invalidType")}else if("subtask"===t){const t=this.#Rr(e,"subtask");loginfo(`##te to execsync subtaskCfg: ${JSON.stringify(t)}`),a=await this.#ka(t)}else{if("ocr"!==t)throw new Error(`##te Invalid content source type: ${t}`);{let t=this.#Rr(e,"ocrcfg");const r=this.#Dr(e,"element",!0),{elementSource:s,elements:n}=await this.#ma(r,1,!1);if(n.length>0&&(this.#Vr(s,"ocr"),a=await this.__processBrowserOcrCfg(t,n),"number"==typeof a&&a<0))throw new Error(`##te Error with ocr content: ${a}`)}}const n=this.#Nr(e,"decodefontsvg"),i=this.#Nr(e,"decodefontttf");(n||i)&&(a=await this.__decodeFontInContent(a,n,i));const o=this.#Nr(e,"transform");return o&&(a=await this.#ba(o,a),null===a&&this.#kr("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.#u.execData[t]&&this.#u.execData[t].length>0){let a=this.#u.execData[t].length,s=this.#u.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"),n=this.#br(t,"pattern");try{this.#Ir(t);const i=this.#br(t,"type"),o=this.#br(t,"colname");let{content:c}=await this.#Ea(i,t,r);if(0===c.length){this.#Tr(t,"completed")&&(c=this.#Aa(e,o))}if("ignore"!==s&&n){const e=this.#br(t,"flags"),r=this.#na(n,e);r&&!c.match(r)&&this.#kr(s,"columnContent","validate")}this.#Tr(t,"setvar")&&this.#Ar(o,c);const l=!a&&this.#Tr(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.#$r(c)),p[o]="string"===r?c:e,p}}catch(e){throw this.#u.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.#u.execData[e]||(this.#u.execData[e]=[]);const r={},a=this.#Dr(t,"column",!0);for(let t of a){const a=this.#br(t,"colname");if(!(this.#Fe.length>0)||this.#Fe.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.#u.credits>=0&&loginfo(`##te extract column tId${this.#m} fCfg: ${JSON.stringify(t).slice(0,200)}`),e}}return this.#u.execData[e].push(r),!0}#_a(t,e){t&&"object"==typeof t||this.#kr(e,"arrayItem","notNormalObject")}#pa(t){if(!t.trim())return[];const e=t.trim().split(".");if(!e.every(t=>!!t))throw this.#kr("cfginvalid","actionExtractArray","invalidSubkeys"),new Error("unreachable");return e}#ga(t,e,r){if("string"==typeof t&&(t=getJsonParseOfStr5(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}#Ta(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=getJsonParseOfStr5(s);"object"==typeof e&&e?t.push(e):this.#kr(a,"actionExtractArray","invalidArrayItems1")}else this.#kr(a,"actionExtractArray","invalidArrayItems2")}else t.push(getStringOfObj4(s));return!0}#Da(t,e,r,a,s,n,i,o){let c=this.#u.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.#Kr(t,e))continue;r&&this.#Wr(t,e);let c=getSubkeysValueOfDataRecord(g,s);c?(i&&("string"==typeof c&&(c=getJsonParseOfStr5(c)),this.#_a(c,o)),n&&Array.isArray(c)?this.#Ta(p,c,i,o):this.#Ta(p,[c],i,o)):this.#kr(o,"arryItemsFromTabname","empty")}return p}#Pa(t,e,r){let a=getJsonParseOfStr5(t);Array.isArray(a)?e.length>0&&(a=a.map(t=>getMemberOfObject2(t,e))):e.length>0&&(a=getMemberOfObject2(a,e)),this.#_a(a,r),Array.isArray(a)||(a=[a]);const s=[];return this.#Ta(s,a,!0,r),s}async#Na(t){const{list:e,requrl:r,setprocessed:a,skipprocessed:s,subkeys:n,arrayinrec:i,keys:o,tabname:c,varname:l,idxname:p,setkeys:g,maxloops:h,errname:f}=this.#Hr(t),d=p.endsWith("0"),u=this.#pa(n);let m;m=isDataTableName(e)?this.#Da(e,r,a,s,u,i,!0,f):this.#Pa(e,u,f);const y=parseInt(h);y>0&&m.length>y&&(m=m.slice(0,y));let C=this.#u.execData[c];if(C||(C=[],this.#u.execData[c]=C),0===m.length)return!0;const b=this.#Dr(t,"column",!1),v="*"===o?Array.from(Object.keys(m[0])):o?o.split(","):[],w=b.map(t=>{const e=this.#br(t,"colname"),r=this.#br(t,"type");return{colName:e,filterFlag:"property"===r&&this.#Tr(t,"filter"),jsonFlag:!(!this.#Ie||"property"!==r)&&this.#Tr(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.#ga(e,g,!0);for(const t of v){const r=getSubkeysStrOfObject(e,[t]);a[t]=r}for(let{colName:t,filterFlag:s,jsonFlag:n,columnCfg:i}of w)try{if(this.#Fe.length>0&&!this.#Fe.includes(t))continue;let o=await this.#Oa(i,c,e,s);if(o){const e=o[t];if(s){if("string"==typeof e&&!this.#$r(e)){r=!1;break}}else if(n){let r=getJsonParseOfStr5(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.#u.credits>=0&&loginfo(`##te extract column tId${this.#m} fCfg: ${JSON.stringify(i).slice(0,200)}`),t}r&&C.push(a)}return!0}async#Ra(t,e,r,a){try{const s=Object.assign({},this.#Me,{authInfo:null,sysParas:null}),n={vars:s,tabName:r,maxLoops:t,errName:a,execData:this.#u.execData};if(e&&this.#u.page){const t=await this.#u.page.content();n.html=t}return n}catch(t){return null}}#Fa(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#ja(t){const e=this.#Hr(t),{name:r,others:a,tabname:s,maxloops:n,errname:i}=e;if(!r)return!0;try{const t=parseInt(n),e=a.includes("html"),o=await this.#Ra(t,e,s,i);if(!o)return this.#kr(i,"actionExtractScript","invalidInData"),!1;const c=await LsdScript.execExtractScript(o,r,this.#Oe);if(!this.#Fa(c))return this.#kr(i,"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.#kr(i,"actionExtractScript","resultError1"):this.#kr(c.errName,"actionExtractScript","resultError2"));const l=this.#u.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.#kr(i,"actionExtractScript","pesaException"),!1}}async#La(t){let e="rowspan",r=this.#Pr(`*[${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.#Pr(`*[${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}#Ma(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 n=[],i=[];let o=!1,c=1,l="",p=1,g=this.#Pr("./thead/tr");const{elements:h}=await this.#$a(g);if(h.length>1)return this.#kr(s,"actionExtractTable","manyTheadTrs"),!0;if(1===h.length){o=!0,g=this.#Pr("./thead/tr/th");const{elements:r}=await this.#$a(g);if(0===r.length)return this.#kr(s,"actionExtractTable","noTheadTrTh"),!0;for(const[a,s]of r.entries()){const r=(await s.textContent()).trim(),i=this.#Ma(r||"space"+c++,t,e[a]);n.push(i)}}l="./tr",g=this.#Pr(l);let{elements:f}=await this.#$a(g);if(0===f.length){l="./tbody/tr",g=this.#Pr(l);let{elements:t}=await this.#$a(g);f=t}if(f.length<=1)return this.#kr(s,"actionExtractTable","noRecord"),!0;if(!o){g=this.#Pr(`${l}[${p}]/*`);let{elements:r}=await this.#$a(g);if(0===r.length)return this.#kr(s,"actionExtractTable","noTr"),!0;for(const[a,s]of r.entries()){const r=(await s.textContent()).trim(),i=this.#Ma(r||"space"+c++,t,e[a]);n.push(i)}p++,f=f.slice(1)}const d=n.length;for(const t of f.keys()){if(a>0&&t>=a)break;g=this.#Pr(`${l}[${p+t}]/*`);let{elements:e}=await this.#$a(g);if(e.length!==d)return this.#kr(s,"actionExtractTable","differentColumns"),!0;const r={};for(const t of e.keys()){const a=await e[t].textContent();r[n[t]]=a}i.push(r)}const u=this.#u.execData[r];return Array.isArray(u)?i.forEach(t=>u.push(t)):this.#u.execData[r]=i,!0}async#Ja(t,e,r,a,s){const n=[];let i=0,o="",c=1;o="./tr";let l=this.#Pr(o),{elements:p}=await this.#$a(l);if(0===p.length){o="./tbody/tr",l=this.#Pr(o);let{elements:t}=await this.#$a(l);p=t}if(0===p.length)return this.#kr(s,"actionExtractTable","noTrElments"),!0;for(const r of p.keys()){let l=this.#Pr(`${o}[${r+1}]/th`),{elements:p}=await this.#$a(l);if(1!==p.length)return this.#kr(s,"actionExtractTable","noThElements"),!0;const g=(await p[0].textContent()).trim(),h=this.#Ma(g||"space"+c++,t,e[r]);let f=this.#Pr(`${o}[${r+1}]/td`),{elements:d}=await this.#$a(f);if(0===d.length)return this.#kr(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,n.push(r)}i=n.length}else{if(d.length<i)return this.#kr(s,"actionExtractTable","differentVertCols"),!0;for(const t of d.keys()){if(t>=i)break;const e=await d[t].textContent();n[t][h]=e}}}const g=this.#u.execData[r];return Array.isArray(g)?n.forEach(t=>g.push(t)):this.#u.execData[r]=n,!0}async#Ha(t){const{orientation:e,check:r,tabname:a,keyformat:s,colnames:n,maxloops:i,errname:o}=this.#Hr(t),c=n?n.split(","):[],l=this.#Dr(t,"element",!0),p=parseInt(i);if(p<0)return!1;if(0===l.length)return this.#kr("logicerror","actionExtractTable","noEleCfg"),!1;const{elementSource:g,elements:h}=await this.#$a(l[0]);if(0===h.length)return this.#kr(o,"actionExtractTable","noTables"),!0;const f=h[0];if("browser"===g?this.#u.browserElesStack.push(f):"xml"===g?this.#u.cheerioElesStack.push(f):unreachable3(g),this.#u.loopsStack.push(f),r){if(!await this.#La("vertical"===e))return this.#kr("cfginvalid","actionExtractTable","notExtractable"),!1}return"vertical"===e?await this.#Ja(s,c,a,p,o):await this.#Ua(s,c,a,p,o),this.#u.loopsStack.pop(),"browser"===g?this.#u.browserElesStack.pop():"xml"===g?this.#u.cheerioElesStack.pop():unreachable3(g),!0}async#rr(t){this.#Ir(t);let e=this.#br(t,"subtype",!1,!1);try{if(e)if("array"===e)await this.#Na(t);else if("script"===e)await this.#ja(t);else{if("table"!==e)return this.#kr("cfginvalid","actionExtract","logicError"),!1;await this.#Ha(t)}else await this.#Ia(t);return!0}catch(t){throw t}}#qa(t){try{const e=JSON.parse(t);return e&&"object"==typeof e?e:null}catch(t){this.#kr("cfginvalid","actionGoto","invalidHeaders")}}async#ar(t){const e=this.#u.page;if(!e)return this.#kr("cfginvalid","actionGogo","noPage"),!1;this.#u.browserElesStack.length>0&&this.#kr("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"),n=parseInt(s),i=this.#br(t,"wait"),o=this.#Tr(t,"reuse"),c=this.#Tr(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.#Mr(i),this.#Ur(t),e}if(this.#We=r,l.trim()){const t=this.#qa(l.trim());t&&await e.setExtraHTTPHeaders(t)}this.#Sr(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:n,referer:r}):await t.goto(e,{waitUntil:"load",timeout:n})},[e,r,p]):await e.goto(r,{timeout:n}),g&&g.currentFlag&&await this.#Br(e,g,"current"),await this.#Mr(i),this.#Ur(t),e}catch(t){if(loginfo(`##te kId${this.#y} goto: ${r}`),-43!==this.#u.credits&&(logerr(`##te kId${this.#y} error credits ${this.#u.credits} in performGotoAction`),logerr(t)),this.#u.credits>=0){const e=t.message?t.message:"";if(e.includes("net::ERR_INTERNET_DISCONNECTED"))this.#vr(-71);else if(e.includes("net::ERR_NAME_NOT_RESOLVED")){await checkDns(appConfig.CHECK_DNS_DOMAIN)?this.#vr(-69):this.#vr(-71)}else e.includes("net::ERR_CONNECTION_TIMED_OUT")?this.#vr(-72):e.includes("net::ERR_CONNECTION_REFUSED")||e.includes("net::ERR_CONNECTION_RESET")?this.#vr(-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.#vr(-86):e.includes("net::ERR_INVALID_AUTH_CREDENTIALS")?this.#vr(-88):(e.includes("Navigation timeout"),this.#vr(-85))}throw new Error(t)}}async#Ba(t,e=10){let r=null;for(let a=0;a<e;a++)try{return await t.hover(),!0}catch(t){loginfo(t),await sleep3(2e3),r=t}throw r}async#sr(t){const e=this.#u.page;if(!e)return this.#kr("cfginvalid","actionHover","noPage"),!1;this.#Ir(t);const r=parseInt(this.#br(t,"try")),a=this.#br(t,"errname");try{const s=this.#Dr(t,"element",!0),{elementSource:n,elements:i}=await this.#ma(s,r);if(this.#Vr(n,"hover"),0===i.length)return this.#kr(a,"actionHover","noElements"),e;this.#jr()&&await e.bringToFront(),logdbg(`##te pageIdx${this.#Fr().pageIdx} hover`),await this.#Ba(i[0]);const o=this.#br(t,"wait");return await this.#Mr(o),this.#Ur(t),e}catch(t){return loginfo(t),this.#kr("other","actionHover","phaException"),e}}async#Va(t){this.#Ir(t);const e=this.#br(t,"type");let r=!1;if(["element","templstr"].includes(e))try{"templstr"===e&&this.#Ke();let a="";a=(await this.#Ea(e,t)).content,r=this.#$r(a)}catch(t){throw t}finally{this.#Ge()}else{if("else"!==e)throw new Error("##te Invalid type(condition)");r=!0}if(r){const e=this.#Dr(t,"action");await this.#Wa(e)}return r}async#nr(t){this.#Ir(t);const e=this.#Dr(t,"condition");for(let t of e)if(await this.#Va(t))break;return!0}async#ir(t){if(!this.#u.page)return this.#kr("cfginvalid","actionInput","noPage"),!1;this.#Ir(t);const e=this.#br(t,"content"),r=this.#Tr(t,"replace"),a=this.#Tr(t,"enter"),s=parseInt(this.#br(t,"try")),n=this.#br(t,"errname"),i=this.#Dr(t,"element",!0);try{const{elementSource:o,elements:c}=await this.#ma(i,s);if(this.#Vr(o,"input"),0===c.length)return this.#kr(n,"actionInput","noElements"),!1;await c[0].input(e,{replace:r,enter:a});const l=this.#br(t,"wait");return await this.#Mr(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.#_r(r[t],this.#Me));return r}#Ka(t){const e=[];for(const r of t){const{type:t,method:a,url:s,resourcetype:n,postdata:i}=r,o={};if(a&&"all"!==a&&(o.methods=[a.toUpperCase()]),s&&(o.url=new RegExp(s)),n&&"all"!==n&&(o.resourceTypes=[n]),i&&(o.postData=new RegExp(i)),"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}#Ga(t){const e=[];for(const r of t){const{type:t,method:a,url:s,resourcetype:n,postdata:i,minsize:o,maxsize:c}=r,l={};a&&"all"!==a&&(l.methods=[a.toUpperCase()]),s&&(l.url=new RegExp(s)),n&&"all"!==n&&(l.resourceTypes=[n]),i&&(l.postData=new RegExp(i));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:n,cacheheaders:i}=r,o=Number(t.slice(4)),c=i&&o<=7999&&(this.#m<1e6||!this.#xe.capName),g={requestMatch:l,responseMatch:p,handler:responseCacheCb,handlerOptions:{execData:this.#u.execData,contentType:a,tabname:t,requestHeadersFlag:s,responseHeadersFlag:n,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:n,hostnameparts:i,params:o,pathtype:c,tabname:g,validextnames:h}=r,f={requestMatch:l,responseMatch:p,handler:responseSaveCb,handlerOptions:{execData:this.#u.execData,baseDir:t,pathType:c,hashMethod:n,hostnameParts:parseInt(i),extname:s,validExtnames:h,params:o,encoding:a,tabname:g}};e.push(f)}}}return e}async#or(t){const e=this.#u.page;if(!e)return this.#kr("cfginvalid","actionIntercept","noPage"),!1;this.#Ir(t);const r=this.#br(t,"subtype");let a=this.#Dr(t,"request"),s=this.#Dr(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.#kr("cfginvalid","actionIntercept","noCfgs"),a.length>0){const t=this.#Ka(a);await e.setRequestInterception(t)}if(s.length>0){const t=this.#Ga(s);await e.setResponseInterception(t)}}else"clear"===r&&(await e.clearRequestInterceptions(),await e.clearResponseInterceptions());return!0}catch(t){return logerr(t),!1}}async#lr(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),n=this.#Lr(this.#br(t,"step"),r),i=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+=n){this.#u.loopsStack.push(e),this.#Ar(i,String(e));const r=this.#Dr(t,"action");if(await this.#Wa(r),this.#u.loopsStack.pop(),this.#u.continueFlag&&(this.#u.continueFlag=!1),this.#u.breakFlag){this.#u.breakFlag=!1;break}}return c<1&&this.#kr(e,"actionLoopfor","zeroLoops"),!0}catch(t){throw t}}async#$a(t){try{const e=this.#br(t,"loc").trim(),r=this.#Cr(t),a=this.#Tr(t,"absolute"),s=this.#Dr(t,"iframe",!1).map(t=>this.#Hr(t)).map(t=>{const{srcprefix:e,loc:r}=t;return{src:e,selector:r}}),n=this.#u.page,i={elementSource:r,elements:[]};if("browser"===r){if(!n)throw new Error("Cannot get elements from null browser page");if(0===this.#u.browserElesStack.length)i.elements=await n.findElements(e,s);else{const t=this.#u.browserElesStack.slice(-1)[0];i.elements=await t.findElements(e,s,a)}return i}if("xml"===r){if(s.length>0)throw new Error("Iframe config is invalid in cheerio source");let t=this.#u.cheerioPage;if(!t){if(!n)throw new Error("Please set CheerioPage first, from which to select elememnts");const e=await n.content();e.length>10&&(this.#xr(e,!0),t=this.#u.cheerioPage)}if(!t)throw new Error("Cannot get elements from null cheerioPage");if(0===this.#u.cheerioElesStack.length)i.elements=await t.findElements(e);else{const t=this.#u.cheerioElesStack.slice(-1)[0];i.elements=await t.findElements(e,s,a)}return i}unreachable3(r)}catch(e){throw loginfo(`##te processElementCfg: tId${this.#m} eleCfg: ${JSON.stringify(t).slice(0,200)}`),new Error(e)}}async#ma(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 n=[];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=>n.push(t)),r))break}if(e&&(a.elementSource=e),n.length>0)return a.elements=n,a;s>0&&(loginfo(`##tmp ${s} try failed in getEleOrTemplTransform`),await sleep3(1e3))}return a}catch(e){throw loginfo(`##te processElementCfgs: eleCfgs: ${JSON.stringify(t).slice(0,200)}`),new Error(e)}}async#pr(t){if(!this.#u.page)return this.#kr("cfginvalid","actionLoopineles","noPage"),!1;this.#Ir(t);const e=this.#br(t,"varname"),r=e.startsWith("position"),a=this.#br(t,"errname"),s=this.#Dr(t,"element",!0);let n=this.#Lr(this.#br(t,"maxloops"),"round"),i=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),n<0)return!1;const{elementSource:l,elements:p}=await this.#ma(s,1),g=p.length;if(0===g)return this.#kr(a,"actionLoopineles","noElements"),!0;i<=0&&(i+=g),o<=0?o+=g:o>g&&(o=g);let h=0;for(let a=i-1;a<o&&!(n&&h>=n);a+=c){e&&this.#Ar(e,String(r?a+1:a));const s=p[a];"browser"===l?this.#u.browserElesStack.push(s):"xml"===l?this.#u.cheerioElesStack.push(s):unreachable3(l),this.#u.loopsStack.push(s);const n=this.#Dr(t,"action");if(await this.#Wa(n),this.#u.loopsStack.pop(),"browser"===l?this.#u.browserElesStack.pop():"xml"===l?this.#u.cheerioElesStack.pop():unreachable3(l),h++,this.#u.continueFlag&&(this.#u.continueFlag=!1),this.#u.breakFlag){this.#u.breakFlag=!1;break}}return!0}async#gr(t){this.#Ir(t);let e=this.#br(t,"split");const r=this.#Tr(t,"trim"),a=this.#br(t,"errname"),s=this.#br(t,"list"),n=this.#br(t,"requrl"),i=this.#Tr(t,"setprocessed"),o=this.#Tr(t,"skipprocessed"),c=this.#br(t,"subkeys"),l=this.#Tr(t,"arrayinrec"),p=this.#pa(c),g=this.#br(t,"varname"),h=this.#br(t,"idxname"),f=this.#br(t,"setkeys"),d=h.endsWith("0");let u=[];if("array"===e){const t=getJsonParseOfStr5(s);if(Array.isArray(t)&&t.length>0)u=t.map(t=>getSubkeysStrOfObject(t,p));else{if(Array.isArray(t)||!(p.length>0))return this.#kr(a,"actionLoopineles","array"),!1;{const e=getMemberOfObject2(t,p);if(!(Array.isArray(e)&&e.length>0))return this.#kr(a,"actionLoopineles","array"),!1;u=e.map(t=>getStringOfObj4(t))}}}else if(isDataTableName(s)){if(u=this.#Da(s,n,i,o,p,l,!1,a),!Array.isArray(u))return this.#kr(a,"actionLoopineles","tabname"),!1}else{let t;try{t=new RegExp(e)}catch(e){throw new Error(`##te Invalid regexp: ${t}`)}u=r?s.trim().split(t).map(t=>t.trim()).filter(t=>t.length>0):s.split(t),p.length>0&&(u=u.map(t=>getSubkeysStrOfObject(getJsonParseOfStr5(t),p)))}let m=this.#Lr(this.#br(t,"maxloops"),"round");m>0&&u.length>m&&(u=u.slice(0,m)),u.length<1&&this.#kr(a,"actionLoopinstr","zeroLoops");for(let[e,r]of u.entries()){this.#u.loopsStack.push(r),g&&this.#Ar(g,r),h&&this.#Ar(h,String(d?e:e+1)),f&&this.#ga(r,f,!0);const a=this.#Dr(t,"action");if(await this.#Wa(a),this.#u.loopsStack.pop(),this.#u.continueFlag&&(this.#u.continueFlag=!1),this.#u.breakFlag){this.#u.breakFlag=!1;break}}return!0}async#cr(t){this.#Ir(t);const e=this.#br(t,"subtype"),r=this.#Tr(t,"iswhile"),a=this.#br(t,"varname"),s="element"===e&&this.#Tr(t,"click"),n=(this.#Tr(t,"navigate"),"element"===e&&this.#Tr(t,"gen")),i="element"===e&&this.#Tr(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.#$r(p);){a&&this.#Ar(a,String(h)),"element"!==e||!s||this.#Ne.includes("click")||this.#Ne.includes("operate")||(g.length<=0?this.#kr(o,"actionLoopdowhile","noElements"):(await g[0].click(),this.#Ur(t,n,i))),this.#u.loopsStack.push(h);const r=this.#Dr(t,"action");if(await this.#Wa(r),this.#u.loopsStack.pop(),this.#u.continueFlag&&(this.#u.continueFlag=!1),this.#u.breakFlag){this.#u.breakFlag=!1;break}if(await this.#Mr(c),h++,l&&h>=l)break;let f=await this.#Ea(e,t);p=f.content,g=f.elements}return!0}async#za(t){const e=this.#br(t,"cookies"),r=this.#br(t,"localstorage"),a=this.#br(t,"headers"),s=this.#br(t,"userdata"),n=this.#br(t,"duration"),{cookies:i,origins:o,userData:c}=this.#u.origStateData,l={cookies:[],origins:[],headers:{},userData:{}};let p;if("orig"===e)l.cookies=i;else if("new"===e)if(this.#u.page)l.cookies=await this.#u.page.cookies();else{if(!this.#u.standaloneApiContext)throw new Error(`##templ ${this.#m} has no page when getting stateData of page`);p||(p=await this.#u.standaloneApiContext.stateData()),l.cookies=p.cookies}if("orig"===r)l.origins=o;else if("new"===r)if(this.#u.page)l.origins=await this.#u.page.localStroage();else{if(!this.#u.standaloneApiContext)throw new Error(`##templ ${this.#m} has no page when getting stateData of page`);p||(p=await this.#u.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.#Me.userData)),n&&(l.expireTime=getCurrentUnixTime2()+parseInt(n)),this.#u.newStateData=l}async _performGetstatedataInMisc(t){return await this.#za(t)}async#hr(t){const e=this.#u.page;if(!e)return this.#kr("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 n=0,i="";"bodypct"===s?(i=await e.windowMember(["document","body","scrollHeight"]),n=parseInt(i)):"screenpct"===s?i=await e.windowMember(["screen","height"]):"windowpct"===s&&(i=await e.windowMember(["innerHeight"]));const o=i?parseInt(i):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(n<=0){const t=await e.windowMember(["document","body","scrollHeight"]);n=parseInt(t)}c=Math.ceil(n/a-1)}else c>200?c=200:c<0&&(c=10);for(let r=0;r<c;r++){await e.scrollBy(0,a),await sleep3(l);const r=this.#Dr(t,"element");if(r&&r.length>0){const{elementSource:t,elements:e}=await this.#ma(r,1);if(this.#Vr(t,"scrollBy"),e.length>0)break}}}else if("to"===r)await e.scrollTo(0,a);else if("intoview"===r){const e=this.#Dr(t,"element",!0),{elementSource:r,elements:a}=await this.#ma(e,1);if(this.#Vr(r,"scrollIntoView"),a.length<=0){const e=this.#br(t,"errname");return this.#kr(e,"actionScrollIntoview","noElements"),!1}await a[0].scrollIntoView()}return this.#Ur(t),!0}async#Ya(t,e,r,a,s=1){if(t.length<=0)throw new Error("##te No element cfg in select action");const{elementSource:n,elements:i}=await this.#ma(t,s);if(this.#Vr(n,"select"),i.length<=0)return this.#kr(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):unreachable3(e),await i[0].select(o),!0}async#fr(t){const e=this.#u.page;if(!e)return this.#kr("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")),n=this.#br(t,"errname"),i=this.#Dr(t,"element",!0);await this.#Ya(i,r,a,n,s);const o=this.#br(t,"wait");return await this.#Mr(o),this.#Ur(t),!0}async#ta(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 n=this.#br(t,"datatype"),i=this.#br(t,"operate"),o=this.#br(t,"varname");if("delete"===i){delete a[e];continue}if(("push"===i||"unshift"===i)&&!Array.isArray(a))return null;const c=this.#Nr(t,"transform");c&&(s=await this.#ba(c,s)),o&&(o===r?a=JSON.parse(s):this.#Ar(o,s));const l=this.#Qr(s,n);"set"===i?a[e]=l:"push"===i?a.push(l):"unshift"===i?a.unshift(l):"discard"===i||unreachable3(i)}return logerr("##tmp data: ",a),a}catch(t){return null}}async#dr(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"),n=this.#br(t,"errname"),i=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.#Ke();p=(await this.#Ea(e,t)).content}else if("object"===e){this.#Ke();const e=this.#br(t,"data"),r=this.#Dr(t,"object",!0),s=await this.#ta(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.#Rr(t,"file");let a=this.#br(e,"path");const s=this.#br(e,"encoding");a.includes("..")&&this.#kr("cfginvalid",`actionSetvar${r}`,"invalidSourceFilename"),path5.isAbsolute(a)?appConfig.cfg.inputFileDirPart&&!path5.dirname(a).split(path5.sep).includes(appConfig.cfg.inputFileDirPart)&&"ignore"===n&&this.#kr("normal",`actionSetvar${r}`,"notSecurePath"):a=path5.join(appConfig.cfg.baseFileDir,a),p=fs6.readFileSync(a,{encoding:s})}}if("ignore"!==i&&o){const e=this.#br(t,"flags"),a=this.#na(o,e);a&&!p.match(a)&&this.#kr(i,`actionSetvar${r}`,"validate")}return!p&&c&&(p=c),a&&this.#Ar(a,p),s&&p&&this.#ga(p,s,!0),l&&(l=this.#oa(l),fs6.writeFileSync(l,p)),!0}catch(t){return loginfo(t),t.message.includes("invalidTaskParas")?(this.#kr("parasinvalid","actionSetvar","invalidParasstr"),!1):(p="",this.#kr(n,`actionSetvar${r}`,"psaException"),!1)}finally{this.#Ge()}}async#ur(t){this.#Ir(t);const e=this.#br(t,"subtasks"),r=this.#Tr(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.#u.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.#u.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.#Dr(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"),n=this.#br(t,"idx").trim(),i=n.length>0&&n.match(/^[0-9]+$/)?parseInt(n):0,o=this.#br(t,"errname"),c=this.#Tr(t,"popuppage");if(c&&!this.#u.popupPage){const t="ignore"===o?"cfginvalid":o;this.#kr(t,"actionSubtask","noPopupPage")}if(s.length>=a)if(c){const t=await this.#va(c),r=await this.#je(e,s,this.#Sa(t),"indSync");await this.#wa(t),this.#u.popupPage=null;const{credits:a,execData:n}=r.taskData;a<-1?this.#kr(o,"actionSubtask","SyncIndepFailed"):(this.#u.subtaskResults.push(r),logdbg(`##te indsyncsubtask t${e} p${s} c${a} data: ${JSON.stringify(n)}`))}else{if(!this.#u.subtasks.find(t=>t.tid===e&&t.parasstr===s)){const t={tid:e,parasstr:s};i>0&&(t.idx=i),r&&(t.sapFlag=!0),this.#u.subtasks.push(t)}}}return!0}#Xa(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.#Tr(t,"requestheaders"),n=this.#br(t,"filename"),i=this.#br(t,"fileidx");let o=parseInt(i),c="";if("read"===e||"readwrite"===e){const t=this.#u.execData[r];if((!Array.isArray(t)||0===t.length)&&(c=this.#ca(a,r),c)){let t=getJsonParseOfStr5(c);if(t&&Array.isArray(t[r])&&(t=t[r]),t&&Array.isArray(t)&&(this.#u.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&&n){o<0&&(o=t.length+o);const e=t[o];"string"==typeof e?.responseData&&this.#Er(n,e.responseData)}}}if("write"===e||"readwrite"===e){const t=this.#u.execData[r];if(Array.isArray(t)&&t.length>0){const e=this.#ca(a,r);c=JSON.stringify(t),e.length===c.length&&e===c||this.#la(JSON.stringify(t),a,r)}}return!0}#Qa(t){const e=this.#Hr(t),{tabname:r,keys:a,keep:s}=e;this.#Gr(r)&&this.#kr("cfginvalid","actionTabname","tabnameDeduplicate");const n=this.#u.execData[r];if(!Array.isArray(n)||0===n.length)return!0;const i=n.length,o="first"===s?0:n.length-1,c=a.split(","),l=new Set,p=[];for(let t=o;t<i&&t>=0;){const e=n[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.#u.execData[r]=p,!0}#Za(t){const e=this.#Hr(t),{tabname:r}=e;return delete this.#u.execData[r],delete this.#u.processedExecData[r],!0}async#ts(t){const e=this.#Hr(t),{tabname:r,varname:a,subkeys:s}=e;this.#Gr(r)&&this.#kr("cfginvalid","actionTabname","tabnameFilter");const n=this.#u.execData[r];if(!Array.isArray(n)||0===n.length)return!0;const i=[],o=this.#pa(s);for(const e of n){const r=getSubkeysStringOfDataRecord(e,o);this.#Ar(a,r);const s=(await this.#Ea("templstr",t)).content;this.#$r(s)&&i.push(e)}return this.#u.execData[r]=i,!0}async#mr(t){this.#Ir(t);const e=this.#Dr(t,"tabname");for(const t of e){const e=this.#br(t,"type");"cache"===e?this.#Xa(t):"deduplicate"===e?this.#Qa(t):"delete"===e?this.#Za(t):"filter"===e?await this.#ts(t):unreachable3(e)}return!0}async#yr(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=getRandomInt(e,r);return await sleep3(s),await this.#Mr(a),!0}const s=this.#u.page;if("element"===e){if(!s)return this.#kr("cfginvalid","actionWaitElement","noPage"),!1;const e=this.#Dr(t,"element",!0);e.length<=0&&this.#kr("cfginvalid","actionWaitElement","noElements");const a=this.#br(e[0],"loc"),n=parseInt(this.#br(t,"timeout")),i=this.#br(t,"state");try{await s.waitForElement(a,{timeout:n,state:i})}catch(t){logerr(t),this.#kr(r,"actionWaitElement","pwaException")}}else if("navigation"===e){if(!s)return this.#kr("cfginvalid","actionWaitNavigation","noPage"),!1;const e=parseInt(this.#br(t,"timeout")),a=this.#br(t,"waituntil"),n=this.#br(t,"url");a||this.#kr("cfginvalid","actionWaitNavigation","invlidWaitUntil");try{if(n){const t=new RegExp(n);await s.waitForNavigation({url:t,timeout:e,waitUntil:a})}else await s.waitForNavigation({timeout:e,waitUntil:a})}catch(t){logerr(t),this.#kr(r,"actionWaitNavigation","pwaException")}}else this.#kr("cfginvalid","actionWait","invalidSubtype");return await this.#Mr(a),!0}#es(t,e){return this.#Re?2===e||3!==e&&(!(!this.#Ne.includes("operate")||!appConfig.OPERATE_ACTIONS.includes(t))||!!this.#Ne.includes(t)):1===e||this.#Ne.includes(t)||this.#Ne.includes("operate")&&appConfig.OPERATE_ACTIONS.includes(t)}async#Wa(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.#es(t,a))continue;if(await this.#Be[t].call(this,e),this.#u.continueFlag||this.#u.breakFlag)break}catch(t){throw this.#u.credits>=0&&(loginfo(`##te tId${this.#m}, aCfg: ${JSON.stringify(e).slice(0,200)}`),loginfo(`##te err.stack: ${t.stack}`)),t}}async#rs(){try{const t=this.#u.page,e=this.#_e.captchaTypes;t&&e.length>0&&await injectScripts(t,e);const r=this.#Dr(this.#Ee,"action");await this.#Wa(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})}}#as(){const t={};for(const[e,r]of Object.entries(this.#Me))"string"==typeof e&&"string"==typeof r&&(t[e]=r);return t}#ss(){const t=this.#u.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.#u.page;t&&(t.removeAllListeners(appConfig.EVENT_TYPES.lsdPagePopup),t.removeAllListeners(appConfig.EVENT_TYPES.lsdPageClose)),this.removeAllListeners(appConfig.EVENT_TYPES.taskComplete)}async run(){const t=getCurrentUnixTime2(),e={templateId:this.#m,parasStr:this.#Ue,credits:0,execData:{},subtasks:[]},r=this.#u.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.#ss(),this.#rs();const[s]=await 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.#kr("other","task","pageClosed"):1009===s.code&&this.#kr("tetimeout","task","teTimeout");r&&this.#We!==r.url()&&loginfo(`##te kId${this.#y} endUrl: ${r.url()}`);const n=this.#u.subtasks.length;n>0&&loginfo(`##te kId${this.#y} has ${n} subtasks`);for(let t of Object.keys(this.#u.execData)){const e=this.#u.execData[t].length;loginfo(`##te kId${this.#y} tablename ${t} has ${e}`)}this.#ns(),loginfo(`##tmp teSucceeded kId${this.#y} tId${this.#m} sec ${getCurrentUnixTime2()-t}`),e.execData=this.#u.execData,e.subtasks=this.#u.subtasks,e.credits=this.#u.credits,this.#Ie&&(e.debugFiles=this.#u.debugFiles),this.#u.subtaskResults.length>0&&(a=this.#u.subtaskResults.map(t=>t.taskData)),await this.__whenTaskEndFun(),e.credits<-30&&logwarn(`##te taskId ${this.#y} credits ${e.credits}`);const i={taskData:e,subtaskDatas:a,newStateData:this.#u.newStateData?this.#u.newStateData:void 0};if(this.#Ie){const t={taskId:this.#y,message:"succeeded",stack:"",variables:this.#as()};i.misc=t}return i}catch(t){e.execData=this.#u.execData,e.subtasks=this.#u.subtasks,e.credits=this.#u.credits,this.#Ie&&(e.debugFiles=this.#u.debugFiles),this.#u.subtaskResults.length>0&&(a=this.#u.subtaskResults.map(t=>t.taskData));const s=this.#u.newStateData?this.#u.newStateData:void 0,n="string"==typeof t?.stack?t.stack:"unkown",i={taskId:this.#y,message:"unknown",stack:n,variables:this.#as()};if(this.#ns(),await this.__whenTaskEndFun(),this.#u.credits>=0)logerr(`##te Exeception in ScraperTask.run: kId ${this.#y}`),logerr(t);else{if(-1===this.#u.credits)return{taskData:e,subtaskDatas:a,newStateData:s,misc:i};if(this.#u.credits>-30)return{taskData:e,subtaskDatas:a,newStateData:s,misc:i};if(2===this.#y&&"check"===this.#Ue&&r){logdbg(`##cap loginCheckFailed capabilityId ${0} credits: ${this.#u.credits}`)}else 11===this.#y||-69===this.#u.credits||logwarn(`##te taskExec run execption: templateId ${this.#m}, paras ${this.#Ue}, credits ${this.#u.credits}`)}return logwarn(`##tmp taskExec run execption: templateId ${this.#m}, paras ${this.#Ue}, credits ${this.#u.credits}`),e.credits=this.#u.credits>=0?-99:this.#u.credits,{taskData:e,subtaskDatas:a,newStateData:s,misc:i}}}async __performMiscAction(t){this.#Ir(t);const e=this.#Dr(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.#kr("cfginvlid","notSupported",e);break;case"getstatedata":await this.#za(t);break;default:unreachable3(e)}}return!0}async __processDbquery(t,e){return(t||e)&&this.#kr("cfginvlid","notSupported","dbquery"),""}async __processBrowserOcrCfg(t,e){return(t||e)&&this.#kr("cfginvlid","notSupported","ocr"),""}async __decodeFontInContent(t,e,r){return(t||e||r)&&this.#kr("cfginvlid","notSupported","decodeFont"),""}async __whenTaskEndFun(){return!0}};import*as path6 from"path";import*as fsp2 from"fs/promises";import{filesInDir as filesInDir2,fsCheckOrCreateDir as fsCheckOrCreateDir2,getLocalDateNumber as getLocalDateNumber2,isDirectory,isFile}from"@letsscrapedata/utils";async function moveDataFiles(){try{const t=appConfig.cfg.exportsDir;if(!t||!isDirectory(t))return!1;const e=await filesInDir2(t,"general","dat_");if(0===e.length)return!0;const r=getLocalDateNumber2(),a=path6.join(t,String(r));await fsCheckOrCreateDir2(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 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&&isDirectory(e)&&r&&a))return!1;for(const[s,n]of Object.entries(t)){const t=path6.join(e,`${s}.${r}`);await writeDataIntoOneFile(t,n,a)}return!0}catch(t){return logerr(t),!1}}async function performOneTask(t,e,r,a="indAsync",s="",n=0){try{const i=await TemplateManagerInScraper.getTemplateConfig(t,s),{template:o,actionConfigs:c,fontsConfig:l,templScripts:p,paraCfgs:g,attrsInXml:h,captchaTypes:f,secureDataFlag:d}=i,u={template:o,actionConfigs:c,fontsConfig:l,templScripts:p},{skipActions:m="",extractColumns:y="",defaultParasStr:C}=h||{},b=e||(appConfig.cfg.useParasstrInXmlIfNeeded&&C?C:""),v=TaskParser.getInParas(b,g),w=1===n&&h?{skipActions:m?m.split(","):[],extractColumns:y?y.split(","):[]}:{};w.secureDataFlag=d,w.captchaOptions={captchaTypes:f};const S=new TaskScraper(u,v,r,w),k=await S.run(),x=k.taskData.execData;for(const t of Object.keys(x))t.startsWith("dat_0000000000006")&&delete x[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: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:getLocalDateString()}]};await saveExecDataOfTask(r)}return{taskData:{templateId:t,parasStr:e,credits:0,execData:{},subtasks:[]},subtaskDatas:[],misc:s}}}appConfig.performOneTask=performOneTask;import*as path8 from"path";import{getRandomArrayIdx,sleep as sleep4}from"@letsscrapedata/utils";import{controller as controller2}from"@letsscrapedata/controller";var BrowserManagerInScraper=class{#is;#os;#cs;#ls;#ps(t){const e=this.#is.templateParas.find(e=>e.templateId===t);return e?.maxConncurrency?e.maxConncurrency:this.#is.maxConcurrency}async#gs(t,e){const r=await controller2.newApiContext({proxy:e}),a="playwright"===t.browser().browserControllerType()?t.apiContext():null;this.#ls.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:n,templateParas:i}=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:n,templateParas:i},this.#os=controller2,["playwright","puppeteer"].includes(e),this.#cs=[],this.#ls=[]}async init(){const{browserControllerType:t,browserType:e,lsdLaunchOptions:r,lsdConnectOptions:a}=this.#is;for(const s of this.#is.browserConfigs){const{browserControllerType:n=t,browserType:i=e,browserUrl:o,proxyUrl:c=""}=s,l=this.#hs(c);if(o){const t=Object.assign({},a,{browserUrl:o}),e=await this.#os.connect(n,i,t);this.#cs.push(e);for(const t of e.browserContexts())await this.#gs(t,l)}else if("string"==typeof c){const t=c?l:void 0,e=Object.assign({},r,{proxy:t}),a=await this.#os.launch(n,i,e);this.#cs.push(a);for(const t of a.browserContexts())await this.#gs(t,l)}}return await sleep4(2e3),!0}#hs(t,e="",r="",a=""){return{proxyUrl:t,proxyId:e||t,username:r,password:a}}async getTaskNetworkContext(t=0){if(0===this.#ls.length)throw new Error("please call init() first to launch or connect browsers.");let e;const r=getRandomArrayIdx(this.#ls.length);for(const a of r){const r=this.#ls[a],{proxy:s,browserContext:n,browserApiContext:i,standaloneApiContext:o,templateMap:c}=r;if(t>0&&(e=c.get(t),e||(e={templateId:t,maxConcurrency:this.#ps(t),running:0},c.set(t,e)),e.maxConcurrency<=e.running))continue;if(!n.hasFreePage())continue;const l=await n.getPage();return l?(t>0&&e&&e.running++,l.setPageInfo({relatedId:t}),{proxy:s,page:l,browserApiContext:i,standaloneApiContext:o}):null}return null}async freePage(t){const e=t.pageInfo().relatedId;if(e>0){const r=t.browserContext().id(),a=this.#ls.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}};import*as fsp3 from"fs/promises";import*as path7 from"path";import{filesInDir as filesInDir3,isDirectory as isDirectory2,isFile as isFile2,sleep as sleep5}from"@letsscrapedata/utils";var SchedulerInScraper=class t{#fs;#ds;#us;#ms;runningTaskSet;static#ys="\n";static#Cs=!1;constructor(t){this.#fs=new Map,this.#ds=appConfig.cfg.taskDir,this.#us=appConfig.cfg.exitWhenCompleted,this.#ms=t,this.runningTaskSet=new Set}async#bs(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#vs=new Map;async#ws(e,r,a=!1){if(t.#vs.get(r)){for(let e=0;e<50&&(await sleep5(200),t.#vs.get(r));e++);if(t.#vs.get(r))return!1}t.#vs.set(r,!0);try{if(a){const a=path7.join(this.#ds,`failedtempl${r}.txt`);return await fsp3.appendFile(a,e.join(t.#ys).concat(t.#ys)),!0}{const a=path7.join(this.#ds,`tid${r}.txt`);return e.length>0?await fsp3.writeFile(a,e.join(t.#ys)):await isFile2(a)&&await fsp3.unlink(a),t.#vs.delete(r),!0}}catch(e){return logwarn(`Failed to write task queue of tempatedId ${r} into file`),t.#vs.delete(r),!1}}async#Ss(){const t=appConfig.cfg.taskDir;if(!t||!isDirectory2(t))return!1;const e=await filesInDir3(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.#fs.get(e);t?a.forEach(e=>t.push(e)):this.#fs.set(e,a)}}return!0}async#ks(t=!1){const e=appConfig.cfg.taskDir;if(!e||!isDirectory2(e))return!1;const r=await filesInDir3(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.#fs.get(r);t?a.forEach(e=>t.push(e)):this.#fs.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.#fs.get(r);return s||(s=[],this.#fs.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}#xs(t,e){return`${t}@@${e}`}async#Es(t,e,r){const a=await performOneTask(t,e,r,"indAsync","",0),{credits:s,subtasks:n}=a.taskData;let i=new Set;const o=this.#fs.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.#fs.delete(t),n.length>0){i=new Set(n.map(t=>t.tid));for(const t of i){const e=n.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.#xs(t,e))}else logerr(`No task queue of templateId ${t}`);return r.page&&await this.#ms.freePage(r.page),appConfig.cfg.minMiliseconds>0&&await sleep5(appConfig.cfg.minMiliseconds),await this.tryToExecuteTasks([t],1),i.size>0&&await this.tryToExecuteTasks(),!0}async tryToExecuteTasks(e=[],r=0){if(loginfo(`---- tryToExecuteTasks templateIds ${e.join(",")} : `,this.#fs),t.#Cs)return logdbg("---- another tryToExecuteTasks is running now"),!0;this.#us&&0===this.#fs.size&&process.exit(0),t.#Cs=!0;try{let a=0;0===e.length&&(e=Array.from(this.#fs.keys())),logdbg(`templateIds: ${e.join(",")}`);for(const s of e){const e=this.#fs.get(s);if(!e)break;const n=e.length;for(let i=0;i<n;i++){const n=e[i],o=this.#xs(s,n);if(this.runningTaskSet.has(o))continue;const c=await this.#ms.getTaskNetworkContext(s);if(!c){logdbg(`No page to execute ${o}`);break}if(this.runningTaskSet.add(o),this.#Es(s,n,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{fsCheckOrCreateDir as fsCheckOrCreateDir3}from"@letsscrapedata/utils";import EventEmitter2,{once as once2}from"events";import{getCurrentUnixTime as getCurrentUnixTime3,sleep as sleep6,unreachable as unreachable4}from"@letsscrapedata/utils";var TwoCaptcha=class{#As;#Os;#Is;#_s;#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.#As,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.#As,taskId:t};return await this.#Ns("https://api.2captcha.com/getTaskResult",e)}async#js(){const t={clientKey:this.#As},e=await this.#Ns("https://api.2captcha.com/getBalance",t);return e?.balance>=0?e.balance:-1}#Ls(t){return`event${t}`}#$s(t){return 5e3}async#Ms(t,e){const r={errorCode:"SUCCEEDED",taskId:0,cost:0,ip:"",createTime:getCurrentUnixTime3(),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 n=this.#Ls(s);await sleep6(this.#$s(e));let i=0;this.#Ts||(i=setInterval(async()=>{const t=await this.#Fs(s);0!==t?.errorId?this.#Ps.emit(n,{code:1001,message:"failed",data:t}):0===t.errorId&&"ready"===t.status&&this.#Ps.emit(n,{code:0,message:"succeeded",data:t})},this.#Is)),setTimeout(()=>this.#Ps.emit(n,{code:1009,message:"timeout",data:null}),this.#_s);const[o]=await once2(this.#Ps,n);i&&clearInterval(i),r.endTime=getCurrentUnixTime3();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:n,solution:i}=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),n&&n>0&&(r.solveCount=n),i&&(r.solution=i)}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:n,geetestApiServerSubdomain:i,userAgent:o,captchaId:c}=t,l="GeeTestTask",p={type:e?l:`${l}Proxyless`,version:r,websiteURL:a};return s&&(p.gt=s),n&&(p.challenge=n),i&&(p.geetestApiServerSubdomainapiDomain=i),c&&(p.initParameters={captcha_id:c}),o&&(p.userAgent=o),p}#Hs(t,e){const{version:r,websiteKey:a,websiteURL:s,isEnterprise:n,isInvisible:i,s:o,action:c,minScore:l,userAgent:p,cookies:g,apiDomain:h}=t;let f="RecaptchaV3TaskProxyless";if(2===r){const t=n?"RecaptchaV2EnterpriseTask":"RecaptchaV2Task";f=e?t:`${t}Proxyless`}const d={type:f,websiteURL:s,websiteKey:a};return h&&(d.apiDomain=h),d.isInvisible=i,o&&(n?d.enterprisePayload=o:d.recaptchaDataSValue=o),p&&(d.userAgent=p),g&&(d.cookies=g),d.isEnterprise=n,l&&(d.minScore=l),c&&(d.pageAction=c),d}#qs(t,e){const r="TurnstileTask";let a=e?r:`${r}Proxyless`;const{websiteKey:s,websiteURL:n,action:i,cData:o,chlPageData:c}=t;return i?{type:a,websiteKey:s,websiteURL:n,action:i,data:o,pagedata:c}:{type:a,websiteKey:s,websiteURL:n}}#Bs(t){const{images:e,comment:r,lang:a,math:s=!1,maxLength:n=0,minLength:i=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:n,minLength:i,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:n=1}=t,i={type:"CoordinatesTask",body:e[0].toString("base64"),comment:r,lang:a,minClicks:n};return s>0&&s>=n&&(i.maxClicks=s),e.length>1&&(i.imgInstructions=e[1].toString("base64")),i}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.#_s=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 EventEmitter2}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.#Ls(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.#Os}setStatus(t){switch(t){case"normal":case"disabled":case"nobalance":this.#Os=t;break;default:unreachable4(t)}return!0}async amazon(t,e){return await this.#Ms(this.#Us(t,"AmazonTask",e),"amazon")}async funcaptcha(t,e){return await this.#Ms(this.#Us(t,"FunCaptchaTask",e),"funcaptcha")}async geetest(t,e){return await this.#Ms(this.#Js(t,e),"geetest")}async keycaptcha(t,e){return await this.#Ms(this.#Us(t,"KeyCaptchaTask",e),"keycaptcha")}async mtcaptcha(t,e){return await this.#Ms(this.#Us(t,"MtCaptchaTask",e),"mtcaptcha")}async recaptcha(t,e){return await this.#Ms(this.#Hs(t,e),"recaptcha")}async turnstile(t,e){return await this.#Ms(this.#qs(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.#Us(t,"TextTask"),"text")}async slider(t){return await this.#Ms(this.#Us(t,"TextTask"),"text")}async rotation(t){return await this.#Ms(this.#Us(t,"TextTask"),"text")}};async function updateScraperConfig(t){const e=appConfig.cfg,{baseDir:r,inputFileDirPart:a,useStealthPlugin:s,browserControllerType:n,browserType:i,lsdLaunchOptions:o,lsdConnectOptions:c,browserConfigs:l,urlPrefix:p,maxConcurrency:g,readCode:h,templateParas:f,totalMaxConcurrency:d,minMiliseconds:u,exitWhenCompleted:m,useParasstrInXmlIfNeeded:y,loadUnfinishedTasks:C,loadFailedTasksInterval:b,moveDataWhenStart:v,dataFileFormat:w,columnSeperator:S}=t;if(r)e.baseDir=r;else{const t=process.cwd();e.baseDir=path8.join(t,"scraperdata")}if(await fsCheckOrCreateDir3(e.baseDir,!0,!0),e.baseDownloadDir=path8.join(e.baseDir,"downloads"),await fsCheckOrCreateDir3(e.baseDownloadDir,!0,!0),e.baseFileDir=path8.join(e.baseDir,"files"),await fsCheckOrCreateDir3(e.baseFileDir,!0,!0),t.templateDir?e.templateDir=t.templateDir:e.templateDir=path8.join(e.baseDir,"template"),await fsCheckOrCreateDir3(e.templateDir,!0,!0),e.taskDir=path8.join(e.baseDir,"task"),await fsCheckOrCreateDir3(e.taskDir,!0,!0),e.exportsDir=path8.join(e.baseDir,"exports"),await fsCheckOrCreateDir3(e.exportsDir,!0,!0),a&&(e.inputFileDirPart=a),n&&(e.browserControllerType=n),i&&(e.browserType=i),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),f&&(e.templateParas=f),d&&(e.totalMaxConcurrency=d),"number"==typeof u&&(e.minMiliseconds=u),"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 b&&b>=0&&(e.loadFailedTasksInterval=b),"boolean"==typeof v&&(e.moveDataWhenStart=v),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}export{performOneTask,scraper,setScraperLogFun,updateScraperConfig};