@openduo/finflow 1.2.2 → 1.4.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/bin/finflow.js +8 -7
- package/package.json +3 -4
package/dist/bin/finflow.js
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import
|
|
3
|
-
`)}function Nn(o,t,e={}){let r=o.length+1,a=2*o.length,s=(process.stdout.columns||120)-r-a;if(s<=0)return;let i=o.map(h=>vn(h)),c=new Array(o.length).fill(0),l=0;for(let[h,_]of Object.entries(e))c[h]=Math.max(_,i[h]),l+=c[h];let m=s-l,g=[],p=0;for(let h=0;h<o.length;h++)h in e||(g.push(h),p+=t[h]);if(p>0&&m>0)for(let h of g)c[h]=Math.max(Math.floor(t[h]/p*m),i[h]||4);return c}function f(o,t,e={}){let n=Nn(o,t,e),r=new $n({headerColor:"cyan"});for(let s of o)r.addColumn({name:s,color:"none"});return{table:{push(s){let i={};o.forEach((c,l)=>i[c]=String(s[l]??"")),r.addRow(i)},toString(){return r.render()},options:{colWidths:n}},w:n}}function x(o,t,e){if(!e)return o.push(t);o.push(t.map((n,r)=>y(String(n??""),e[r])))}function w(o){if(o==null||o==="-")return"-";let t=typeof o=="string"?parseFloat(o):o;if(isNaN(t))return"-";let e=Math.abs(t),n=t<0?"-":"",r=e>=1e12?(e/1e12).toFixed(2)+"\u4E07\u4EBF":e>=1e8?(e/1e8).toFixed(2)+"\u4EBF":e>=1e4?(e/1e4).toFixed(2)+"\u4E07":String(e);return n+r}function q(o){if(o==null||o==="-")return"-";let t=parseFloat(String(o));if(isNaN(t))return"-";let e=t>0?"+":"";return`${t>0?u.red:t<0?u.green:""}${e}${t.toFixed(2)}%${u.reset}`}function R(o){if(o==null||o==="-")return"-";let t=parseFloat(String(o));if(isNaN(t))return"-";let e=t>0?u.red:t<0?u.green:"",n=t>0?"+":"";return`${e}${n}${w(t)}${u.reset}`}function B(o){return o==null||o==="-"?"-":o>=1e8?(o/1e8).toFixed(2)+"\u4EBF\u624B":o>=1e4?(o/1e4).toFixed(2)+"\u4E07\u624B":String(o)+"\u624B"}function C(o){return(o||"").replace(/<[^>]+>/g,"")}function j(){let o=new Date;return`${o.getFullYear()}-${String(o.getMonth()+1).padStart(2,"0")}-${String(o.getDate()).padStart(2,"0")}`}function ut(o){let t=new Date(o*1e3),e=n=>String(n).padStart(2,"0");return`${e(t.getMonth()+1)}-${e(t.getDate())} ${e(t.getHours())}:${e(t.getMinutes())}`}function Q(o,t=!1){console.log(t?JSON.stringify(o,null,2):JSON.stringify(o))}function On(o,t,e){return{data:o,meta:{source:e,timestamp:new Date().toISOString(),command:t}}}function d(o){let{data:t,format:e,command:n,source:r,toJSON:a,printFn:s,printArgs:i=[]}=o;switch(e){case"raw":Q(t,!0);break;case"text":s?.(t,...i);break;default:Q(On(a?a(t):t,n,r));break}}import Cn from"https";import X from"crypto";var Gt=Object.freeze({os:"web",sv:"8.4.6",app:"CailianpressWeb"});function qn(o){return Object.keys(o).sort().map(t=>`${t}=${o[t]}`).join("&")}function jn(o){let t={...Gt,...o},e=qn(t);return e?X.createHash("md5").update(X.createHash("sha1").update(e).digest("hex")).digest("hex"):X.createHash("md5").update(X.createHash("sha1").update("").digest("hex")).digest("hex")}function Mt(o){return{...Gt,...o,sign:jn(o)}}var D=o=>o.trim().toLowerCase(),Tn="Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/146.0.0.0 Safari/537.36",Fn={"User-Agent":Tn,Accept:"application/json, text/plain, */*","Accept-Language":"zh-CN,zh;q=0.9"};function O(o,t,e={},n={}){let r=n.timeout??1e4,a=new URLSearchParams(Mt(e)).toString(),s=`${t}?${a}`;return new Promise((i,c)=>{let l=Cn.request({hostname:o,path:s,method:"GET",timeout:r,headers:{...Fn,host:o,Referer:`https://${o}/`}},m=>{let g="";m.on("data",p=>g+=p),m.on("end",()=>{try{i(JSON.parse(g))}catch{i(g)}})});l.on("error",c),l.on("timeout",()=>{l.destroy(),c(new Error("timeout"))}),l.end()})}function Bt(o={}){let t=Math.floor(Date.now()/1e3);return O("www.cls.cn","/nodeapi/telegraphList",{lastTime:t,last_time:t,refresh_type:1,rn:o.rn??20})}function Ut(o={}){let t=Math.floor(Date.now()/1e3);return O("www.cls.cn","/v1/roll/get_roll_list",{category:o.category??"all",last_time:t,refresh_type:1,rn:o.rn??20})}function mt(o){return O("www.cls.cn",`/v3/depth/home/assembled/${o}`)}function zt(o,t={}){return O("www.cls.cn",`/v3/depth/list/${o}`,{id:o,last_time:t.lastTime,rn:t.rn??20})}function Kt(){return O("www.cls.cn","/v2/article/hot/list")}function Wt(){return O("www.cls.cn","/api/subject/hotAndNewestSubject")}function dt(o={}){return O("x-quote.cls.cn","/web_quote/plate/hot_plate",{type:o.type??"industry",way:o.way??"change",rever:1})}function Vt(o={}){return O("x-quote.cls.cn","/web_quote/web_stock/stock_list",{way:o.way??"change",rever:1,types:o.types??"change_px,change"})}function Qt(o){return O("x-quote.cls.cn","/quote/stock/basic",{secu_code:D(o),fields:"open_px,av_px,high_px,low_px,change,change_px,change_3,change_5,qrr,entrust_rate,tr,amp,TotalShares,mc,NetAssetPS,cmc,business_amount,business_balance,pe,ttm_pe,pb,secu_name,secu_code,trade_status,secu_type,preclose_px,up_price,last_px"})}function Xt(o){return O("x-quote.cls.cn","/quote/stock/volume",{secu_code:D(o),field:"five"})}function Yt(o){return O("x-quote.cls.cn","/quote/stock/volume",{secu_code:D(o),field:"vol"})}function Zt(o){return O("x-quote.cls.cn","/v2/quote/a/tline",{secu_code:D(o)})}function te(o,t={}){let e={code:D(o),period:t.period??"d",fq_type:t.fq_type??1,limit:t.limit??200};return t.start_date&&(e.start_date=t.start_date),O("x-quote.cls.cn","/v2/quote/a/kline",e)}function pt(o){return O("x-quote.cls.cn","/web_quote/stock/assoc_plate",{secu_code:D(o)})}function ee(o){return O("x-quote.cls.cn","/quote/stock/fundflow",{secu_code:D(o)})}function ne(o,t={}){let e=Math.floor(Date.now()/1e3);return O("www.cls.cn","/es/quotes/articles",{keyword:o,lastTime:e,rn:t.rn??10})}function oe(){return O("x-quote.cls.cn","/v2/quote/a/stock/emotion")}function ft(o){return O("www.cls.cn","/v3/transaction/anchor",{cdate:o.date})}var P=Object.freeze({headline:{id:1e3,name:"\u5934\u6761"},ashare:{id:1003,name:"A\u80A1"},world:{id:1007,name:"\u73AF\u7403"},company:{id:1005,name:"\u516C\u53F8"},realestate:{id:1006,name:"\u5730\u4EA7"},finance_ch:{id:1032,name:"\u91D1\u878D"},hkstock:{id:1135,name:"\u6E2F\u80A1"},fund:{id:1110,name:"\u57FA\u91D1\xB7ETF"},broker:{id:1118,name:"\u5238\u5546"},auto:{id:1119,name:"\u6C7D\u8F66"},tech:{id:1111,name:"\u79D1\u521B"},pinjian:{id:1160,name:"\u54C1\u89C1"}}),ht=Object.freeze({change:{way:"change",name:"\u6DA8\u8DCC\u5E45"},volume:{way:"volume",name:"\u6210\u4EA4\u91CF"},amount:{way:"amount",name:"\u6210\u4EA4\u989D"},turnover:{way:"turnover",name:"\u6362\u624B\u7387"},amplitude:{way:"amplitude",name:"\u632F\u5E45"}}),gt=Object.freeze({all:{category:"all",name:"\u5168\u90E8"},red:{category:"red",name:"\u52A0\u7EA2"},announcement:{category:"announcement",name:"\u516C\u53F8"},watch:{category:"watch",name:"\u770B\u76D8"},hk_us:{category:"hk_us",name:"\u6E2F\u7F8E\u80A1"},fund:{category:"fund",name:"\u57FA\u91D1"},remind:{category:"remind",name:"\u63D0\u9192"}});function re(o){return gt[o]?gt[o]:Object.values(gt).find(t=>t.name===o||t.category===o)||null}function ae(o){if(P[o])return P[o];let t=parseInt(o,10);return isNaN(t)?Object.values(P).find(e=>e.name===o||e.name.includes(o))||null:Object.values(P).find(e=>e.id===t)||null}import Jn from"https";import Rn from"http";var Dn="Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/146.0.0.0 Safari/537.36",Ln={"User-Agent":Dn,Accept:"application/json, text/plain, */*","Accept-Language":"zh-CN,zh;q=0.9"},En={"flash-api.jin10.com":{id:"bVBF4FyRTn5NJF5n",version:"1.0.0"},"search-open-api.jin10.com":{id:"SRvUdAEfVxLO5NAd",version:"1.0.1"},"common-open-api.jin10.com":{id:"zP6WFH7WKz2vrw4Q",version:"1.0.0"},"uc-api.jin10.com":{id:"YDcStOzjliuTJUvh",version:"1.0.0"},"qh-flash-api.jin10.com":{id:"KxBcVoDHStE6CUkQ",version:"1.0.0",referer:"https://qihuo.jin10.com/"},"futures-report-api.jin10.com":{id:"KxBcVoDHStE6CUkQ",version:"1.3.0",referer:"https://qihuo.jin10.com/"},"qhcal-api.jin10.com":{id:"1coXNOi34tU5TDTl",version:"1.0",referer:"https://qihuo.jin10.com/"}};function N(o,t,e={},n={}){let r=n.timeout??1e4,a=Object.keys(e).length?"?"+new URLSearchParams(e).toString():"",s=`${t}${a}`,i={...Ln,Referer:"https://www.jin10.com/",Origin:"https://www.jin10.com"},c=En[o];return c&&(i["x-app-id"]=c.id,i["x-version"]=c.version,i.handleerror="true",c.referer&&(i.Referer=c.referer,i.Origin=new URL(c.referer).origin)),n.cookie&&(i.Cookie=n.cookie),n.extraHeaders&&Object.assign(i,n.extraHeaders),new Promise((l,m)=>{let p=(o.startsWith("localhost")?Rn:Jn).request({hostname:o,path:s,method:"GET",timeout:r,headers:i},h=>{if(h.statusCode>=300&&h.statusCode<400&&h.headers.location){let b=new URL(h.headers.location,`https://${o}`);return l(N(b.hostname,b.pathname+b.search,e,n))}let _=[];h.on("data",b=>_.push(b)),h.on("end",()=>{let b=Buffer.concat(_).toString("utf-8");try{let $=JSON.parse(b);h.statusCode>=400&&($._statusCode=h.statusCode),l($)}catch{l(b)}})});p.on("error",m),p.on("timeout",()=>{p.destroy(),m(new Error("timeout"))}),p.end()})}function se(o={},t){let e={};return o.max_read_id&&(e.max_read_id=o.max_read_id),o.channel&&(e.channel=o.channel),N("flash-api.jin10.com","/get_flash_list",e,t)}function ie(o,t){return N("flash-api.jin10.com","/get_flash_list",{channel:"-8200",vip:"1",max_time:o},t)}function ce(o,t){return N("flash-api.jin10.com","/get_flash_detail",{id:o},t)}function le(o,t){return N("flash-api.jin10.com","/get_flash_list_by_date",{date:o},t)}function ue(){return N("e0430d16720e4211b5e072c26205c890.z3c.jin10.com","/web/interest_rates",{},{extraHeaders:{"x-app-id":"sKKYe29sFuJaeOCJ","x-version":"2.0"}})}function me(){return N("cdn.jin10.com","/json/index/slide_204.json")}function de(){return N("cdn.jin10.com","/json/index/flir.json")}var yt="e0430d16720e4211b5e072c26205c890.z3c.jin10.com",Pn={"x-app-id":"sKKYe29sFuJaeOCJ","x-version":"2.0",handleerror:"true"};function bt(o){return{extraHeaders:Pn,...o}}function pe(o,t="cj",e){return N(yt,"/get/data",{date:o,category:t},bt(e))}function fe(o,t="cj",e){return N(yt,"/get/event",{date:o,category:t},bt(e))}function ge(o,t="cj",e){return N(yt,"/page/holiday",{date:o,category:t,page:1,pagesize:50},bt(e))}function _t(o=-1,t={},e){let n={channel:o};return t.max_time&&(n.max_time=t.max_time),N("qh-flash-api.jin10.com","/get_flash_list",n,e)}function he(o){return N("futures-report-api.jin10.com","/api/headline",{},o)}function wt(o){return o.replace(/-/g,"")}function ye(o,t){return N("qhcal-api.jin10.com","/data",{date:wt(o)},t)}function Z(o,t){return N("qhcal-api.jin10.com","/event",{date:wt(o)},t)}function tt(o,t){return N("qhcal-api.jin10.com","/holiday",{date:wt(o)},t)}function be(o,t){return N("28e2bd69d5104a428d25ff1df132b716.z3c.jin10.com","/basic_data",{date:o},{...t,extraHeaders:{"x-app-id":"KxBcVoDHStE6CUkQ","x-version":"1.0"}})}function et(){return N("cdn.jin10.com","/json/index/all_topics.json")}function _e(o,t={},e){let n={id:o};return t.page&&(n.page=t.page),t.page_size&&(n.page_size=t.page_size),N("reference-api.jin10.com","/topic/getById",n,{...e,extraHeaders:{"x-app-id":"arU9WZF7TC9m7nWn","x-version":"1.0.1",Referer:"https://xnews.jin10.com/"}})}import we from"fs";import Hn from"path";import In from"os";var Se=Hn.join(In.homedir(),".xueqiu-cookie");function St(){try{return we.readFileSync(Se,"utf-8").trim()||null}catch{return null}}function xt(o){we.writeFileSync(Se,o.trim(),"utf-8")}var A="stock.xueqiu.com",At="xueqiu.com";function v(o){return o.trim().toUpperCase()}function xe(o,t,e,n,{token:r=!0,ua:a}={}){let s=r?St():null;if(r&&!s)throw new Error("\u672A\u8BBE\u7F6E\u96EA\u7403 Cookie\uFF0C\u8BF7\u5148\u8FD0\u884C: finflow config login \u6216 finflow config cookie <cookie>");let i={Accept:"application/json","Accept-Language":"zh-Hans-CN;q=1, ja-JP;q=0.9","Accept-Encoding":"gzip, deflate, br",Connection:"keep-alive","User-Agent":a||"Xueqiu iPhone 14.15.1",Origin:"https://xueqiu.com",Referer:"https://xueqiu.com/"};s&&(i.Cookie=s);let c={method:o,headers:i,redirect:"follow"};return n&&(c.body=new URLSearchParams(n).toString(),i["Content-Type"]="application/x-www-form-urlencoded"),fetch(`https://${t}${e}`,c).then(l=>l.json())}function S(o,t,e={}){return xe("GET",o,t,null,e)}function Ae(o,t,e,n={}){return xe("POST",o,t,e,n)}function ke(o){return S(A,`/v5/stock/realtime/quotec.json?symbol=${o.map(v).join(",")}`,{token:!1})}function $e(o){return S(A,`/v5/stock/realtime/pankou.json?symbol=${v(o)}`)}function ve(o,{period:t="day",count:e=284}={}){let n=Date.now();return S(A,`/v5/stock/chart/kline.json?symbol=${v(o)}&begin=${n}&period=${t}&type=before&count=-${e}&indicator=kline,pe,pb,ps,pcf,market_capital,agt,ggt,balance`)}function Ne(o,{period:t="1d"}={}){return S(A,`/v5/stock/chart/minute.json?symbol=${v(o)}&period=${t}`)}function Oe(o,{count:t=50}={}){return S(A,`/v5/stock/history/trade.json?symbol=${v(o)}&count=${t}`)}function qe(o){return S(A,`/v5/stock/quote/relevant.json?symbol=${v(o)}`)}function je(o){return S(A,`/v5/stock/event/entry.json?symbol=${v(o)}`)}function Ce(o){return S(At,`/query/v1/suggest_stock.json?q=${encodeURIComponent(o)}`)}function Te(o,t={}){let{count:e=10,type:n="Q4",is_detail:r=!0,region:a="cn"}=t;return S(A,`/v5/stock/finance/${a}/indicator.json?symbol=${v(o)}&type=${n}&is_detail=${r}&count=${e}`)}function Fe(o,t={}){let{count:e=10,type:n="Q4",is_detail:r=!0,region:a="cn"}=t;return S(A,`/v5/stock/finance/${a}/cash_flow.json?symbol=${v(o)}&type=${n}&is_detail=${r}&count=${e}`)}function Je(o,t={}){let{count:e=10,type:n="Q4",is_detail:r=!0,region:a="cn"}=t;return S(A,`/v5/stock/finance/${a}/income.json?symbol=${v(o)}&type=${n}&is_detail=${r}&count=${e}`)}function Re(o,t={}){let{count:e=10,type:n="Q4",is_detail:r=!0,region:a="cn"}=t;return S(A,`/v5/stock/finance/${a}/balance.json?symbol=${v(o)}&type=${n}&is_detail=${r}&count=${e}`)}function De(o,{circula:t=1}={}){return S(A,`/v5/stock/f10/cn/top_holders.json?symbol=${v(o)}&circula=${t}`)}function Le(o){return S(A,`/v5/stock/f10/cn/indicator.json?symbol=${v(o)}`)}function Ee(o){return S(A,`/v5/stock/f10/cn/industry.json?symbol=${v(o)}`)}function Pe(o,{page:t=1,size:e=10}={}){return S(A,`/v5/stock/f10/cn/bonus.json?symbol=${v(o)}&page=${t}&size=${e}`)}function kt(o){return S(A,`/v5/stock/capital/flow.json?symbol=${v(o)}`)}function He(o,{count:t=20}={}){return S(A,`/v5/stock/capital/history.json?symbol=${v(o)}&count=${t}`)}function Ie(o,{page:t=1,size:e=180}={}){return S(A,`/v5/stock/capital/margin.json?symbol=${v(o)}&page=${t}&size=${e}`)}function Ge(){return S(A,"/v5/stock/portfolio/list.json?system=true")}function Me(o,{size:t=1e3}={}){return S(A,`/v5/stock/portfolio/stock/list.json?size=${t}&category=1&pid=${o}`)}function Be(o,{category:t=1}={}){return Ae(A,"/v5/stock/portfolio/stock/add.json",{symbols:o,category:t})}function Ue(o,{category:t=1}={}){return Ae(A,"/v5/stock/portfolio/stock/cancel.json",{symbols:o,category:t})}function nt(o){return S(A,`/v5/stock/batch/quote.json?symbol=${o.map(v).join(",")}&extend=detail&is_delay_hk=true`)}function ze(o){return S(At,`/cubes/nav_daily/all.json?cube_symbol=${o}`)}function Ke(o){return S(At,`/cubes/rebalancing/current.json?cube_symbol=${o}`)}function We(o){return S(A,`/stock/report/latest.json?symbol=${v(o)}`)}import Gn from"https";var vt="www.gelonghui.com",Mn="Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/146.0.0.0 Safari/537.36";function ot(o,t=1e4){return new Promise((e,n)=>{let r=new URL(o,`https://${vt}`),a=Gn.get({hostname:vt,path:r.pathname+r.search,headers:{"User-Agent":Mn,Accept:"application/json, text/plain, */*","Accept-Language":"zh-CN,zh;q=0.9",Referer:`https://${vt}/live/`,"client-lang":"zh-cn",platform:"web",shortversion:"10.7.0"}},s=>{let i=[];s.on("data",c=>i.push(c)),s.on("end",()=>{let c=Buffer.concat(i).toString();try{e(JSON.parse(c))}catch{e(c)}})});a.setTimeout(t,()=>{a.destroy(),n(new Error("timeout"))}),a.on("error",n)})}function U(o={}){let t=new URLSearchParams({category:o.category??"all",limit:String(o.limit??15),timestamp:String(Date.now())});return o.before&&t.set("before",String(o.before)),ot(`/api/live-channels/${o.channel??"all"}/lives/v4?${t}`)}function Ve(o={}){return U({channel:o.channel,category:"important",limit:o.limit,before:o.before})}function Qe(o={}){return U({channel:o.channel,category:"popular",limit:o.limit,before:o.before})}function Xe(o={}){return ot(`/hq/hk/boards/v1?sort=${o.sort??"netChange"}&order=${o.order??"desc"}`)}function Nt(){return ot("/hq/home-page-data")}function z(){return ot("/hq/quote/api/market/flow/entrance/data/v2")}var Ot=Object.freeze([{id:"all",name:"\u5168\u90E8"},{id:"popular",name:"\u6700\u70ED"},{id:"fundLive",name:"\u57FA\u91D1"},{id:"ai",name:"AI"},{id:"international",name:"\u56FD\u9645"},{id:"chineseMainland",name:"\u4E2D\u56FD\u5927\u9646"},{id:"hongkongMacaoTaiwan",name:"\u6E2F\u6FB3\u53F0"},{id:"HKStock",name:"\u6E2F\u80A1"},{id:"AStock",name:"A\u80A1"},{id:"USStock",name:"\u7F8E\u80A1"},{id:"virtualAssets",name:"\u865A\u62DF\u8D44\u4EA7"},{id:"exchangeCommodity",name:"\u5546\u54C1\u5916\u6C47"},{id:"house",name:"\u697C\u5E02"},{id:"debenture",name:"\u503A\u5238"}]),qt=Object.freeze([{id:"netChange",name:"\u6DA8\u8DCC\u5E45"},{id:"turnoverValue",name:"\u6210\u4EA4\u989D"},{id:"turnVolume",name:"\u6210\u4EA4\u91CF"}]);function H(o){return o?Ot.find(t=>t.id.toLowerCase()===o.toLowerCase()||t.name===o)??Ot[0]:Ot[0]}function Ye(o){return o?qt.find(t=>t.id.toLowerCase()===o.toLowerCase()||t.name===o)??qt[0]:qt[0]}var Ze={0:"",1:"\u2605",2:"\u2605\u2605",3:"\u2605\u2605\u2605"},rt={all:-1,oil:19,steel:20,coal:21,gas:22,metal:23,nonferrous:24,chemical:25,sugar:27,grain:28,pig:29,macro:30};import jt from"fs";import Ct from"path";import Tt from"os";import{execSync as Ft}from"child_process";import tn from"crypto";function Un(){return Ft('security find-generic-password -w -s "Chrome Safe Storage"',{encoding:"utf-8"}).trim()}function zn(o){let t=o.match(/([a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12})/i);if(t?.[1])return t[1];let e=[/([A-Z]{3})$/,/([a-z]{2}_[A-Z]{2})$/,/[^\x20-\x7E]*([\x20-\x7E]+)$/,/.*?([a-zA-Z0-9_\-.]+)$/];for(let n of e){let r=o.match(n);if(r?.[1]?.length>0)return r[1]}return o}function Kn(o,t,e=0){let n=o.slice(0,3).toString("ascii");if(!/^v\d\d$/.test(n))return o.toString("utf-8");let r=o.slice(3);if(r.length===0||r.length%16!==0)return o.toString("utf-8");let a=tn.pbkdf2Sync(t,"saltysalt",1003,16,"sha1"),s=Buffer.alloc(16,32),i=tn.createDecipheriv("aes-128-cbc",a,s);i.setAutoPadding(!1);let c=Buffer.concat([i.update(r),i.final()]),l=c[c.length-1];return l&&l<=16&&(c=c.slice(0,-l)),e>=24&&c.length>32&&(c=c.slice(32)),zn(c.toString("utf-8"))}var Wn=[Ct.join(Tt.homedir(),"Library/Application Support/Google/Chrome/Default/Cookies"),Ct.join(Tt.homedir(),"Library/Application Support/Google/Chrome/Profile 1/Cookies")];function Vn(o){for(let t of Wn){if(!jt.existsSync(t))continue;let e=Ct.join(Tt.tmpdir(),`finflow_cookies_${Date.now()}.db`);jt.copyFileSync(t,e);try{let n=0;try{let s=Ft(`sqlite3 "${e}" "SELECT value FROM meta WHERE key='version';"`,{encoding:"utf-8"}).trim();n=parseInt(s,10)||0}catch{}let r=`SELECT name, hex(encrypted_value), host_key FROM cookies WHERE host_key LIKE '%${o}%'`;return JSON.parse(Ft(`sqlite3 -json "${e}" "${r}"`,{encoding:"utf-8"})).map(s=>({name:s.name,value:Buffer.from(s["hex(encrypted_value)"],"hex"),domain:s.host_key,_metaVersion:n}))}finally{try{jt.unlinkSync(e)}catch{}}}return[]}function at(o,t){if(process.platform!=="darwin")throw new Error("\u6D4F\u89C8\u5668\u81EA\u52A8\u83B7\u53D6 Cookie \u4EC5\u652F\u6301 macOS");let e;try{e=Un()}catch{throw new Error(`\u65E0\u6CD5\u4ECE Keychain \u83B7\u53D6 Chrome \u5BC6\u7801\u3002
|
|
4
|
-
|
|
5
|
-
`:"")+(g?u.dim+y(g,n-2)+u.reset:"");console.log(_),b&&console.log(b),console.log()}}function Rt(o){return o=k(o),{items:o.map(t=>({time:t.time,content:I(t.data?.content||t.data?.title||"",t),title:t.data?.title||"",importance:t.important??0,source:t.data?.source||"",tags:E(t.remark)?E(t.remark).split(" "):[]})),total:o.length}}function Zn(o){return o=k(o),{items:o.map(t=>({time:new Date(t.ctime*1e3).toISOString(),content:C(t.content||t.brief||""),title:t.title||"",importance:0,source:"cls",tags:(t.subjects||[]).map(e=>`#${e.subject_name}`)})),total:o.length}}function it(o){return o=k(o),{items:o.map(t=>({time:new Date(t.createTimestamp*1e3).toISOString(),content:C(t.content||""),title:t.title||"",importance:t.level===1?1:0,source:"glh",tags:[...(t.relatedStocks||[]).map(e=>e.name),...(t.relatedInfos||[]).map(e=>`#${e.name}`)],readCount:t.count?.read||0})),total:o.length}}function to(o){let t=o?.list||(Array.isArray(o)?o:[]),e=[];if(Array.isArray(t)&&Array.isArray(t[0]))for(let n of t)for(let r of n)e.push(r);else Array.isArray(t)&&(e=t);return e=k(e),{items:e.map(n=>({title:n.title||"",badge:n.ndata?.badge||"",redirectUrl:n.web_redirect_url||""})),total:e.length}}function eo(o){let t=[],e=o?.list||(Array.isArray(o)?o:[]);if(Array.isArray(e)&&e.length&&Array.isArray(e[0]))for(let n of e)t.push(...n);else Array.isArray(e)&&(t=e);return t=k(t),{items:t.map(n=>({title:n.title||"",introduction:n.introduction||"",displayDatetime:n.display_datetime||"",tags:(n.reveal_tags||[]).map(r=>r.name||r),vip:!!n.vip,source:n.source||""})),total:t.length}}function nn(o){let t=o?.data?.top_article||[],e=o?.data?.depth_list||[],n=k([...t,...e]);return{items:n.map(r=>({time:r.ctime?new Date(r.ctime*1e3).toISOString():"",title:r.title||"",brief:C(r.brief||""),source:r.source||"",subjects:(r.subjects||[]).map(a=>a.subject_name||a.name||""),readingNum:r.reading_num||0})),total:n.length}}function no(o){let t=k(o?.data||[]);return{items:t.map(e=>({title:e.title||"",readingNum:e.readNum||0})),total:t.length}}function oo(o){let t=k(o?.data||[]);return{items:t.map(e=>({time:e.ctime?new Date(e.ctime*1e3).toISOString():"",title:e.title||"",source:e.source||""})),total:t.length}}function ro(o){let t=k(o?.list||o?.data||[]);return Array.isArray(t)?{items:t.map(e=>({date:e.created_at?String(e.created_at).slice(0,10):"",title:e.title||"",institution:e.institution||"",rating:e.rating||""})),total:t.length}:{items:[],total:0}}function on(o){return{items:o.map(t=>({id:t.id,title:t.title||"",shortName:t.short_name||"",introduction:(t.introduction||"").trim().slice(0,200),categoryName:t.category_name||"",subscribeNum:t.subscribe_num||0})),total:o.length}}function ao(o){let t=o?.data?.hot_subjects||[],e=o?.data?.newest_subjects||[];return{hotSubjects:t.map(n=>({name:n.name||"",attentionNum:n.attention_num||0,newestArticleTitle:C(n.newest_article_title||"")})),newestSubjects:e.map(n=>({name:n.name||""}))}}function so(o,t){let e=o?.data?.top_article||[],n=o?.data?.depth_list||[],r=[...e.slice(0,3),...n].slice(0,t);if(!r.length)return console.log("\u6682\u65E0\u6570\u636E");let{table:a,w:s}=f(["\u65F6\u95F4","\u6807\u9898","\u6458\u8981"],[10,25,65],{0:14});for(let i of r)a.push([ut(i.ctime),y(i.title,s?.[1]||25),y(`${u.dim}${C(i.brief)}${u.reset}`,s?.[2]||65)]);console.log(a.toString())}function io(o,t){let e=o.slice(0,t);if(!e.length)return console.log("\u6682\u65E0\u6570\u636E");let{table:n,w:r}=f(["\u65F6\u95F4","\u6807\u9898","\u6458\u8981"],[10,25,65],{0:14});for(let a of e)n.push([ut(a.ctime),y(a.title,r?.[1]||25),y(`${u.dim}${C(a.brief)}${u.reset}`,r?.[2]||65)]);console.log(n.toString())}function co(o,t){let e=(o?.data||[]).slice(0,t);if(!e.length){console.log("\u6682\u65E0\u6570\u636E");return}let{table:n,w:r}=f(["#","\u6807\u9898","\u9605\u8BFB"],[3,80,10],{0:4,2:8});for(let a=0;a<e.length;a++){let s=e[a];n.push([`${u.yellow}${a+1}.${u.reset}`,y(s.title,r?.[1]||80),s.readNum>1e4?(s.readNum/1e4).toFixed(1)+"\u4E07":String(s.readNum)])}console.log(n.toString())}function lo(o,t){let e=(o?.data||[]).slice(0,t);if(!e.length)return console.log("\u6682\u65E0\u6570\u636E");let{table:n,w:r}=f(["\u65F6\u95F4","\u6807\u9898","\u6765\u6E90"],[14,60,10],{0:16,2:10});for(let a of e){let s=new Date(a.ctime*1e3),i=`${s.getFullYear()}-${String(s.getMonth()+1).padStart(2,"0")}-${String(s.getDate()).padStart(2,"0")} ${String(s.getHours()).padStart(2,"0")}:${String(s.getMinutes()).padStart(2,"0")}`;n.push([i,y(a.title,r?.[1]||60),a.source||""])}console.log(n.toString())}function Dt(o,t){let e=o?.list||(Array.isArray(o)?o:[]);if(!e.length){console.log("\u6682\u65E0\u6570\u636E");return}let n=[];if(Array.isArray(e)&&Array.isArray(e[0]))for(let s of e)for(let i of s)n.push(i);else Array.isArray(e)&&(n=e);n=n.slice(0,t);let{table:r,w:a}=f(["\u65F6\u95F4","\u6807\u9898","\u6807\u7B7E"],[14,60,14],{0:16});for(let s of n){let i=s.display_datetime?.slice(5,16)||"-",c=s.reveal_tags?.map(m=>m.name).join(" ")||"",l=s.vip?"VIP":"";r.push([i,y(s.title,a?.[1]||60),y(`${c}${l}`,a?.[2]||14)])}console.log(r.toString())}function uo(o){let t=o?.list||o?.data||[];if(!Array.isArray(t)||!t.length)return console.log("\u6682\u65E0\u6570\u636E");let{table:e,w:n}=f(["\u65E5\u671F","\u6807\u9898","\u673A\u6784","\u8BC4\u7EA7"],[14,50,14,8],{0:14,2:14});for(let r of t.slice(0,10)){let a=r.created_at?String(r.created_at).slice(0,10):"-";x(e,[a,r.title||"-",r.institution||"-",r.rating||"-"],n)}console.log(e.toString())}function mo(o){let t=o?.data?.hot_subjects||[],e=o?.data?.newest_subjects||[];if(!t.length&&!e.length)return console.log("\u6682\u65E0\u6570\u636E");let{table:n,w:r}=f(["#","\u8BDD\u9898","\u5173\u6CE8","\u6700\u65B0\u52A8\u6001"],[2,14,8,50],{0:4,2:10});for(let a of t.slice(0,10))n.push([`${u.yellow}#${u.reset}`,y(a.name,r?.[1]||14),a.attention_num>1e4?(a.attention_num/1e4).toFixed(1)+"\u4E07":String(a.attention_num),y(`${u.dim}${C(a.newest_article_title||"")}${u.reset}`,r?.[3]||50)]);if(console.log(`${u.bold}${u.ul}\u70ED\u95E8\u8BDD\u9898${u.reset}`),console.log(n.toString()),e.length){let{table:a,w:s}=f(["#","\u8BDD\u9898"],[2,80],{0:4});for(let i of e.slice(0,5))a.push([`${u.yellow}#${u.reset}`,y(i.name,s?.[1]||80)]);console.log(`${u.bold}${u.ul}\u6700\u65B0\u8BDD\u9898${u.reset}`),console.log(a.toString())}}async function po(o){let t=L(),e=t?{cookie:t}:void 0,n=new Set,r=[],a=await se({},e);for(let c of a?.data||[])n.has(c.id)||(n.add(c.id),r.push(c));let s=0,i=50;for(;r.length<o&&s++<i;){let c=r[r.length-1];if(!c)break;let m=(await ie(c.time,e))?.data||[];if(!m.length)break;let g=0;for(let p of m)n.has(p.id)||(n.add(p.id),r.push(p),g++);if(g===0)break;r.length<o&&await new Promise(p=>setTimeout(p,200))}return r}function rn(o){return o.command({command:"info",describe:"\u4FE1\u606F\u6D41",builder:t=>t.strictCommands(!1).command("flash","\u5FEB\u8BAF",e=>e.option("src",{alias:"s",type:"string",choices:["cls","jin10","glh"],default:"cls",describe:"\u6570\u636E\u6E90"}).option("category",{alias:"c",type:"string",describe:"cls \u680F\u76EE / glh \u9891\u9053"}).strictCommands(!1).command("important","\u91CD\u8981\u5FEB\u8BAF\uFF08glh \u6570\u636E\u6E90\uFF09",n=>n.option("channel",{alias:"c",type:"string",describe:"\u9891\u9053"}),async n=>{let{f:r,n:a=10,channel:s}=n,i=s?H(s):H("popular"),c=await Ve({channel:i.id,limit:a}),l=k(c.result||[]);d({data:l,format:r,command:"info flash important",source:"glh",toJSON:()=>it(l),printFn:st,printArgs:[a]})}).command("popular","\u70ED\u95E8\u5FEB\u8BAF\uFF08glh\uFF09",n=>n,async n=>{let{f:r,n:a=10}=n,s=await Qe({limit:a}),i=k(s.result||[]);d({data:i,format:r,command:"info flash popular",source:"glh",toJSON:()=>it(i),printFn:st,printArgs:[a]})}).command("detail <id>","\u5FEB\u8BAF\u8BE6\u60C5\uFF08jin10\uFF09",n=>n,async n=>{let{f:r,n:a=10}=n,s=n.id,i=await ce(s);d({data:i,format:r,command:"info flash detail",source:"jin10",toJSON:c=>Rt(c?.data?[c]:[]),printFn:Jt,printArgs:[a]})}).command("date <date>","\u5386\u53F2\u5FEB\u8BAF\uFF08jin10\uFF0C\u9700\u767B\u5F55\uFF09",n=>n,async n=>{let{f:r,n:a=10}=n,s=n.date,i;try{i=fetchCookieFromBrowser("jin10.com")}catch(l){console.error(`${u.yellow}${l.message}${u.reset}`),console.error("\u6309\u65E5\u671F\u67E5\u770B\u5FEB\u8BAF\u9700\u8981\u767B\u5F55\uFF0C\u8BF7\u5148\u767B\u5F55 jin10.com"),process.exit(1)}let c=await le(s,{cookie:i});c?._statusCode===403&&(console.error(`${u.yellow}\u6B64\u529F\u80FD\u9700\u8981\u5F00\u901A\u4F1A\u5458\uFF0C\u8BF7\u5728 jin10.com \u5347\u7EA7${u.reset}`),process.exit(1)),d({data:c,format:r,command:"info flash date",source:"jin10",toJSON:l=>Rt(l?.data||[]),printFn:Jt,printArgs:[a]})}).command("live [channel]","\u5B9E\u65F6\u5FEB\u8BAF\u76D1\u63A7\uFF08glh\uFF09",n=>n.option("interval",{alias:"i",type:"number",default:10,describe:"\u5237\u65B0\u95F4\u9694(\u79D2)"}),async n=>{let{f:r,n:a=10,interval:s=10}=n,i=n.channel,c=H(i),l=null;for(process.stdout.write("\x1B[2J\x1B[H");;){let m={channel:c.id,limit:a||15};l&&(m.before=l);let g=await U(m);if(g.result?.length){let p=k(g.result);l=g.result[0].createTimestamp,process.stdout.write("\x1B[2J\x1B[H");let h=process.stdout.columns||120;console.log(u.bold+`\u683C\u9686\u6C47\u5FEB\u8BAF \u5B9E\u65F6\u6A21\u5F0F (\u6BCF${s}s\u5237\u65B0)`+u.reset),console.log(u.dim+`\u6700\u540E\u66F4\u65B0: ${new Date().toLocaleTimeString("zh-CN")}`+u.reset),console.log("\u2500".repeat(h)),console.log(),d({data:p,format:r||"json",command:"info flash live",source:"glh",toJSON:_=>it(_.slice(0,a||15)),printFn:st,printArgs:[a||15]})}await new Promise(p=>setTimeout(p,s*1e3))}}),async e=>{let{f:n,n:r=10,src:a="cls",category:s}=e;if(a==="jin10"){let i=k(await po(r));d({data:i,format:n,command:"info flash",source:"jin10",toJSON:Rt,printFn:Jt,printArgs:[r]})}else if(a==="glh"){let i=s?H(s):H("popular"),c=await U({channel:i.id,limit:r}),l=k(c.result||[]);d({data:l,format:n,command:"info flash",source:"glh",toJSON:()=>it(l),printFn:st,printArgs:[r]})}else{let i=s||"all",c=re(i);c||(console.error(`${u.red}\u672A\u77E5\u680F\u76EE: ${i}${u.reset}
|
|
6
|
-
\u4F7F\u7528 --category \u6307\u5B9A\u680F\u76EE\u6216\u4F7F\u7528 --src jin10|glh`),process.exit(1));let l;c.category==="all"?l=await Bt({rn:r}):l=await Ut({category:c.category,rn:r});let m=k((l?.data?.roll_data||[]).slice(0,r));d({data:l,format:n,command:"info flash",source:"cls",toJSON:()=>Zn(m),printFn:Yn,printArgs:[r]})}}).command("news","\u6DF1\u5EA6\u6587\u7AE0",e=>e.strictCommands(!1).command("slide","\u5E7B\u706F\u7247/\u91CD\u8981\u4E8B\u4EF6\uFF08jin10\uFF09",n=>n,async n=>{let{f:r,n:a=10}=n,s=await me();d({data:s,format:r,command:"info news slide",source:"jin10",toJSON:to,printFn:Dt,printArgs:[a]})}).command("feature","\u7CBE\u9009\u6587\u7AE0\uFF08jin10\uFF09",n=>n,async n=>{let{f:r,n:a=10}=n,s=await de();d({data:s,format:r,command:"info news feature",source:"jin10",toJSON:eo,printFn:Dt,printArgs:[a]})}).command("depth [channel]","\u6DF1\u5EA6\u680F\u76EE\uFF08cls\uFF09",n=>n,async n=>{let{f:r,n:a=10}=n,s=n.channel||"headline",i=ae(s);if(!i){let m=Object.entries(P).map(([g,p])=>` ${g.padEnd(12)} ${p.name} (${p.id})`).join(`
|
|
2
|
+
import Fa from"yargs";import{hideBin as Ta}from"yargs/helpers";function it(n){let t=0,e=!1;for(let o=0;o<n.length;o++){if(n[o]==="\x1B"){e=!0;continue}if(e){n[o]==="m"&&(e=!1);continue}let r=n.charCodeAt(o);t+=At(r)?2:1}return t}function At(n){return n>=4352&&n<=4447||n>=11904&&n<=12350||n>=12352&&n<=13247||n>=13312&&n<=19903||n>=19968&&n<=42191||n>=44032&&n<=55215||n>=63744&&n<=64255||n>=65072&&n<=65135||n>=65281&&n<=65376||n>=65504&&n<=65510||n>=131072&&n<=196605||n>=196608&&n<=262141}function Ce(n,t){let e=it(n);return e>=t?n:n+" ".repeat(t-e)}function No(n,t){let e=it(n);return e>=t?n:" ".repeat(t-e)+n}function qo(n,t){if(!n)return[""];let e=[],o=n.split(`
|
|
3
|
+
`);for(let r of o)Oo(r,t,e);return e}function Oo(n,t,e){let o="",r=0,a=!1,s=[],i="";for(let c=0;c<n.length;c++){if(n[c]==="\x1B"){a=!0,i=n[c];continue}if(a){i+=n[c],n[c]==="m"&&(a=!1,o+=i,i==="\x1B[0m"?s=[]:s.push(i),i="");continue}let l=n.charCodeAt(c),p=At(l)?2:1;r+p>t&&(s.length>0&&(o+="\x1B[0m"),e.push(o),o=s.join(""),r=0),o+=n[c],r+=p}i&&(o+=i),o&&e.push(o)}var $t=class{cols=[];rows=[];headerColor=null;constructor(t){this.headerColor=t?.headerColor??null}addColumn(t){this.cols.push({name:t.name,width:t.width??it(t.name),align:t.align??"left",color:t.color==="none"?null:t.color??null})}addRow(t){this.rows.push(this.cols.map(e=>String(t[e.name]??"")))}render(){let{cols:t,rows:e,headerColor:o}=this,r=t.length,a=t.map($=>$.width),s="\u256D",i="\u256E",c="\u2570",l="\u256F",p="\u2500",d="\u2502",m="\u252C",f="\u2534",y="\u251C",b="\u2524",_="\u253C",S=1,A=$=>p.repeat($+S*2),I=s+t.map(($,x)=>A(a[x])).join(m)+i,Q=y+t.map(($,x)=>A(a[x])).join(_)+b,L=c+t.map(($,x)=>A(a[x])).join(f)+l,M=d+t.map(($,x)=>{let K=$.color?`${$.color}${$.name}\x1B[0m`:$.name;return" ".repeat(S)+Ce(K,a[x])+" ".repeat(S)}).join(d)+d,v=[];for(let $=0;$<e.length;$++){let x=e[$],K=t.map((E,J)=>qo(x[J],a[J])),et=Math.max(...K.map(E=>E.length));for(let E=0;E<et;E++){let J=d+t.map((G,st)=>{let xt=K[st][E]??"",Ht=G.align==="right"?No(xt,a[st]):Ce(xt,a[st]);return" ".repeat(S)+Ht+" ".repeat(S)}).join(d)+d;v.push(J)}$<e.length-1&&v.push(Q)}return[I,M,Q,...v,L].join(`
|
|
4
|
+
`)}};var u={dim:"\x1B[2m",cyan:"\x1B[36m",red:"\x1B[31m",green:"\x1B[32m",yellow:"\x1B[33m",bold:"\x1B[1m",ul:"\x1B[4m",reset:"\x1B[0m"};function w(n,t){if(!n)return"";let e=[],o="",r=0,a=!1,s=[],i="";for(let c=0;c<n.length;c++){if(n[c]==="\x1B"){a=!0,i=n[c];continue}if(a){i+=n[c],n[c]==="m"&&(a=!1,o+=i,i==="\x1B[0m"?s=[]:s.push(i),i="");continue}let l=At(n.charCodeAt(c))?2:1;r+l>t&&(s.length>0&&(o+="\x1B[0m"),e.push(o),o=s.join(""),r=0),o+=n[c],r+=l}return i&&(o+=i),o&&e.push(o),e.join(`
|
|
5
|
+
`)}function jo(n,t,e={}){let r=n.length+1,a=2*n.length,s=(process.stdout.columns||120)-r-a;if(s<=0)return;let i=n.map(f=>it(f)),c=new Array(n.length).fill(0),l=0;for(let[f,y]of Object.entries(e))c[f]=Math.max(y,i[f]),l+=c[f];let p=s-l,d=[],m=0;for(let f=0;f<n.length;f++)f in e||(d.push(f),m+=t[f]);if(m>0&&p>0)for(let f of d)c[f]=Math.max(Math.floor(t[f]/m*p),i[f]||4);return c}function h(n,t,e={}){let o=jo(n,t,e),r=new $t({headerColor:"cyan"});for(let s=0;s<n.length;s++)r.addColumn({name:n[s],color:"none",width:o?.[s]});return{table:{push(s){let i={};n.forEach((c,l)=>i[c]=String(s[l]??"")),r.addRow(i)},toString(){return r.render()},options:{colWidths:o}},w:o}}function O(n,t,e){if(!e)return n.push(t);n.push(t.map((o,r)=>w(String(o??""),e[r])))}function k(n){if(n==null||n==="-")return"-";let t=typeof n=="string"?parseFloat(n):n;if(isNaN(t))return"-";let e=Math.abs(t),o=t<0?"-":"",r=e>=1e12?(e/1e12).toFixed(2)+"\u4E07\u4EBF":e>=1e8?(e/1e8).toFixed(2)+"\u4EBF":e>=1e4?(e/1e4).toFixed(2)+"\u4E07":String(e);return o+r}function P(n){if(n==null||n==="-")return"-";let t=parseFloat(String(n));if(isNaN(t))return"-";let e=t>0?"+":"";return`${t>0?u.red:t<0?u.green:""}${e}${t.toFixed(2)}%${u.reset}`}function nt(n){if(n==null||n==="-")return"-";let t=parseFloat(String(n));if(isNaN(t))return"-";let e=t>0?u.red:t<0?u.green:"",o=t>0?"+":"";return`${e}${o}${k(t)}${u.reset}`}function pt(n){return n==null||n==="-"?"-":n>=1e8?(n/1e8).toFixed(2)+"\u4EBF\u624B":n>=1e4?(n/1e4).toFixed(2)+"\u4E07\u624B":String(n)+"\u624B"}function U(n){return(n||"").replace(/<[^>]+>/g,"")}function H(){let n=new Date;return`${n.getFullYear()}-${String(n.getMonth()+1).padStart(2,"0")}-${String(n.getDate()).padStart(2,"0")}`}function It(n){let t=new Date(n*1e3),e=o=>String(o).padStart(2,"0");return`${e(t.getMonth()+1)}-${e(t.getDate())} ${e(t.getHours())}:${e(t.getMinutes())}`}function dt(n,t=!1){console.log(t?JSON.stringify(n,null,2):JSON.stringify(n))}function Co(n,t,e){return{data:n,meta:{source:e,timestamp:new Date().toISOString(),command:t}}}function g(n){let{data:t,format:e,command:o,source:r,toJSON:a,printFn:s,printArgs:i=[]}=n;switch(e){case"raw":dt(t,!0);break;case"text":s?.(t,...i);break;default:dt(Co(a?a(t):t,o,r));break}}import Ro from"https";import kt from"crypto";var Fe=Object.freeze({os:"web",sv:"8.4.6",app:"CailianpressWeb"});function Fo(n){return Object.keys(n).sort().map(t=>`${t}=${n[t]}`).join("&")}function To(n){let t={...Fe,...n},e=Fo(t);return e?kt.createHash("md5").update(kt.createHash("sha1").update(e).digest("hex")).digest("hex"):kt.createHash("md5").update(kt.createHash("sha1").update("").digest("hex")).digest("hex")}function Te(n){return{...Fe,...n,sign:To(n)}}var ot=n=>n.trim().toLowerCase(),Jo="Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/146.0.0.0 Safari/537.36",Do={"User-Agent":Jo,Accept:"application/json, text/plain, */*","Accept-Language":"zh-CN,zh;q=0.9"};function D(n,t,e={},o={}){let r=o.timeout??1e4,a=new URLSearchParams(Te(e)).toString(),s=`${t}?${a}`;return new Promise((i,c)=>{let l=Ro.request({hostname:n,path:s,method:"GET",timeout:r,headers:{...Do,host:n,Referer:`https://${n}/`}},p=>{let d="";p.on("data",m=>d+=m),p.on("end",()=>{try{i(JSON.parse(d))}catch{i(d)}})});l.on("error",c),l.on("timeout",()=>{l.destroy(),c(new Error("timeout"))}),l.end()})}function Gt(n={}){let t=n.lastTime??Math.floor(Date.now()/1e3);return D("www.cls.cn","/v1/roll/get_roll_list",{lastTime:t,last_time:t,refresh_type:1,rn:n.rn??20})}function Bt(n){return D("www.cls.cn",`/v3/depth/home/assembled/${n}`)}function Re(n,t={}){return D("www.cls.cn",`/v3/depth/list/${n}`,{id:n,last_time:t.lastTime,rn:t.rn??20})}function Je(){return D("www.cls.cn","/v2/article/hot/list")}function De(){return D("www.cls.cn","/api/subject/hotAndNewestSubject")}function Ut(n={}){return D("x-quote.cls.cn","/web_quote/plate/hot_plate",{type:n.type??"industry",way:n.way??"change",rever:1})}function Le(n={}){return D("x-quote.cls.cn","/web_quote/web_stock/stock_list",{way:n.way??"change",rever:1,types:n.types??"change_px,change"})}function Me(n){return D("x-quote.cls.cn","/quote/stock/basic",{secu_code:ot(n),fields:"open_px,av_px,high_px,low_px,change,change_px,change_3,change_5,qrr,entrust_rate,tr,amp,TotalShares,mc,NetAssetPS,cmc,business_amount,business_balance,pe,ttm_pe,pb,secu_name,secu_code,trade_status,secu_type,preclose_px,up_price,last_px"})}function Kt(n){return D("x-quote.cls.cn","/quote/stock/volume",{secu_code:ot(n),field:"five"})}function zt(n){return D("x-quote.cls.cn","/quote/stock/volume",{secu_code:ot(n),field:"vol"})}function Qt(n){return D("x-quote.cls.cn","/v2/quote/a/tline",{secu_code:ot(n)})}function vt(n,t={}){let e={code:ot(n),period:t.period??"d",fq_type:t.fq_type??1,limit:t.limit??200};return t.start_date&&(e.start_date=t.start_date),D("x-quote.cls.cn","/v2/quote/a/kline",e)}function Vt(n){return D("x-quote.cls.cn","/web_quote/stock/assoc_plate",{secu_code:ot(n)})}function Ee(n){return D("x-quote.cls.cn","/quote/stock/fundflow",{secu_code:ot(n)})}function Pe(n,t={}){let e=Math.floor(Date.now()/1e3);return D("www.cls.cn","/es/quotes/articles",{keyword:n,lastTime:e,rn:t.rn??10})}function He(){return D("x-quote.cls.cn","/v2/quote/a/stock/emotion")}function Wt(n){return D("www.cls.cn","/v3/transaction/anchor",{cdate:n.date})}var ct=Object.freeze({headline:{id:1e3,name:"\u5934\u6761"},ashare:{id:1003,name:"A\u80A1"},world:{id:1007,name:"\u73AF\u7403"},company:{id:1005,name:"\u516C\u53F8"},realestate:{id:1006,name:"\u5730\u4EA7"},finance_ch:{id:1032,name:"\u91D1\u878D"},hkstock:{id:1135,name:"\u6E2F\u80A1"},fund:{id:1110,name:"\u57FA\u91D1\xB7ETF"},broker:{id:1118,name:"\u5238\u5546"},auto:{id:1119,name:"\u6C7D\u8F66"},tech:{id:1111,name:"\u79D1\u521B"},pinjian:{id:1160,name:"\u54C1\u89C1"}}),Xt=Object.freeze({change:{way:"change",name:"\u6DA8\u8DCC\u5E45"},volume:{way:"volume",name:"\u6210\u4EA4\u91CF"},amount:{way:"amount",name:"\u6210\u4EA4\u989D"},turnover:{way:"turnover",name:"\u6362\u624B\u7387"},amplitude:{way:"amplitude",name:"\u632F\u5E45"}}),Yt=Object.freeze({all:{category:"all",name:"\u5168\u90E8"},red:{category:"red",name:"\u52A0\u7EA2"},announcement:{category:"announcement",name:"\u516C\u53F8"},watch:{category:"watch",name:"\u770B\u76D8"},hk_us:{category:"hk_us",name:"\u6E2F\u7F8E\u80A1"},fund:{category:"fund",name:"\u57FA\u91D1"},remind:{category:"remind",name:"\u63D0\u9192"}});function Ie(n){return Yt[n]?Yt[n]:Object.values(Yt).find(t=>t.name===n||t.category===n)||null}function Ge(n){if(ct[n])return ct[n];let t=parseInt(n,10);return isNaN(t)?Object.values(ct).find(e=>e.name===n||e.name.includes(n))||null:Object.values(ct).find(e=>e.id===t)||null}import Lo from"https";import Mo from"http";var Eo="Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/146.0.0.0 Safari/537.36",Po={"User-Agent":Eo,Accept:"application/json, text/plain, */*","Accept-Language":"zh-CN,zh;q=0.9"},Ho={"flash-api.jin10.com":{id:"bVBF4FyRTn5NJF5n",version:"1.0.0"},"search-open-api.jin10.com":{id:"SRvUdAEfVxLO5NAd",version:"1.0.1"},"common-open-api.jin10.com":{id:"zP6WFH7WKz2vrw4Q",version:"1.0.0"},"uc-api.jin10.com":{id:"YDcStOzjliuTJUvh",version:"1.0.0"},"qh-flash-api.jin10.com":{id:"KxBcVoDHStE6CUkQ",version:"1.0.0",referer:"https://qihuo.jin10.com/"},"futures-report-api.jin10.com":{id:"KxBcVoDHStE6CUkQ",version:"1.3.0",referer:"https://qihuo.jin10.com/"},"qhcal-api.jin10.com":{id:"1coXNOi34tU5TDTl",version:"1.0",referer:"https://qihuo.jin10.com/"}};function R(n,t,e={},o={}){let r=o.timeout??1e4,a=Object.keys(e).length?"?"+new URLSearchParams(e).toString():"",s=`${t}${a}`,i={...Po,Referer:"https://www.jin10.com/",Origin:"https://www.jin10.com"},c=Ho[n];return c&&(i["x-app-id"]=c.id,i["x-version"]=c.version,i.handleerror="true",c.referer&&(i.Referer=c.referer,i.Origin=new URL(c.referer).origin)),o.cookie&&(i.Cookie=o.cookie),o.extraHeaders&&Object.assign(i,o.extraHeaders),new Promise((l,p)=>{let m=(n.startsWith("localhost")?Mo:Lo).request({hostname:n,path:s,method:"GET",timeout:r,headers:i},f=>{if(f.statusCode>=300&&f.statusCode<400&&f.headers.location){let b=new URL(f.headers.location,`https://${n}`);return l(R(b.hostname,b.pathname+b.search,e,o))}let y=[];f.on("data",b=>y.push(b)),f.on("end",()=>{let b=Buffer.concat(y).toString("utf-8");try{let _=JSON.parse(b);f.statusCode>=400&&(_._statusCode=f.statusCode),l(_)}catch{l(b)}})});m.on("error",p),m.on("timeout",()=>{m.destroy(),p(new Error("timeout"))}),m.end()})}function Be(n={},t){let e={};return n.max_read_id&&(e.max_read_id=n.max_read_id),n.channel&&(e.channel=n.channel),R("flash-api.jin10.com","/get_flash_list",e,t)}function Ue(n,t){return R("flash-api.jin10.com","/get_flash_list",{channel:"-8200",vip:"1",max_time:n},t)}function Ke(n,t){return R("flash-api.jin10.com","/get_flash_detail",{id:n},t)}function ze(n,t){return R("flash-api.jin10.com","/get_flash_list_by_date",{date:n},t)}function Qe(){return R("e0430d16720e4211b5e072c26205c890.z3c.jin10.com","/web/interest_rates",{},{extraHeaders:{"x-app-id":"sKKYe29sFuJaeOCJ","x-version":"2.0"}})}function Ve(){return R("cdn.jin10.com","/json/index/slide_204.json")}function We(){return R("cdn.jin10.com","/json/index/flir.json")}var Zt="e0430d16720e4211b5e072c26205c890.z3c.jin10.com",Io={"x-app-id":"sKKYe29sFuJaeOCJ","x-version":"2.0",handleerror:"true"};function te(n){return{extraHeaders:Io,...n}}function Ye(n,t="cj",e){return R(Zt,"/get/data",{date:n,category:t},te(e))}function Xe(n,t="cj",e){return R(Zt,"/get/event",{date:n,category:t},te(e))}function Ze(n,t="cj",e){return R(Zt,"/page/holiday",{date:n,category:t,page:1,pagesize:50},te(e))}function ee(n=-1,t={},e){let o={channel:n};return t.max_time&&(o.max_time=t.max_time),R("qh-flash-api.jin10.com","/get_flash_list",o,e)}function tn(n){return R("futures-report-api.jin10.com","/api/headline",{},n)}function ne(n){return n.replace(/-/g,"")}function en(n,t){return R("qhcal-api.jin10.com","/data",{date:ne(n)},t)}function qt(n,t){return R("qhcal-api.jin10.com","/event",{date:ne(n)},t)}function Ot(n,t){return R("qhcal-api.jin10.com","/holiday",{date:ne(n)},t)}function nn(n,t){return R("28e2bd69d5104a428d25ff1df132b716.z3c.jin10.com","/basic_data",{date:n},{...t,extraHeaders:{"x-app-id":"KxBcVoDHStE6CUkQ","x-version":"1.0"}})}function jt(){return R("cdn.jin10.com","/json/index/all_topics.json")}function on(n,t={},e){let o={id:n};return t.page&&(o.page=t.page),t.page_size&&(o.page_size=t.page_size),R("reference-api.jin10.com","/topic/getById",o,{...e,extraHeaders:{"x-app-id":"arU9WZF7TC9m7nWn","x-version":"1.0.1",Referer:"https://xnews.jin10.com/"}})}import rn from"fs";import Go from"path";import Bo from"os";var an=Go.join(Bo.homedir(),".xueqiu-cookie");function oe(){try{return rn.readFileSync(an,"utf-8").trim()||null}catch{return null}}function re(n){rn.writeFileSync(an,n.trim(),"utf-8")}var j="stock.xueqiu.com",ae="xueqiu.com";function F(n){return n.trim().toUpperCase()}function sn(n,t,e,o,{token:r=!0,ua:a}={}){let s=r?oe():null;if(r&&!s)throw new Error("\u672A\u8BBE\u7F6E\u96EA\u7403 Cookie\uFF0C\u8BF7\u5148\u8FD0\u884C: finflow config login \u6216 finflow config cookie <cookie>");let i={Accept:"application/json","Accept-Language":"zh-Hans-CN;q=1, ja-JP;q=0.9","Accept-Encoding":"gzip, deflate, br",Connection:"keep-alive","User-Agent":a||"Xueqiu iPhone 14.15.1",Origin:"https://xueqiu.com",Referer:"https://xueqiu.com/"};s&&(i.Cookie=s);let c={method:n,headers:i,redirect:"follow"};return o&&(c.body=new URLSearchParams(o).toString(),i["Content-Type"]="application/x-www-form-urlencoded"),fetch(`https://${t}${e}`,c).then(l=>l.json())}function q(n,t,e={}){return sn("GET",n,t,null,e)}function cn(n,t,e,o={}){return sn("POST",n,t,e,o)}function se(n){return q(j,`/v5/stock/realtime/quotec.json?symbol=${n.map(F).join(",")}`,{token:!1})}function ie(n){return q(j,`/v5/stock/realtime/pankou.json?symbol=${F(n)}`)}function Ct(n,{period:t="day",count:e=284}={}){let o=Date.now();return q(j,`/v5/stock/chart/kline.json?symbol=${F(n)}&begin=${o}&period=${t}&type=before&count=-${e}&indicator=kline,pe,pb,ps,pcf,market_capital,agt,ggt,balance`)}function ce(n,{period:t="1d"}={}){return q(j,`/v5/stock/chart/minute.json?symbol=${F(n)}&period=${t}`)}function le(n,{count:t=50}={}){return q(j,`/v5/stock/history/trade.json?symbol=${F(n)}&count=${t}`)}function ln(n){return q(j,`/v5/stock/quote/relevant.json?symbol=${F(n)}`)}function un(n){return q(j,`/v5/stock/event/entry.json?symbol=${F(n)}`)}function mn(n){return q(ae,`/query/v1/suggest_stock.json?q=${encodeURIComponent(n)}`)}function dn(n,t={}){let{count:e=10,type:o="Q4",is_detail:r=!0,region:a="cn"}=t;return q(j,`/v5/stock/finance/${a}/indicator.json?symbol=${F(n)}&type=${o}&is_detail=${r}&count=${e}`)}function pn(n,t={}){let{count:e=10,type:o="Q4",is_detail:r=!0,region:a="cn"}=t;return q(j,`/v5/stock/finance/${a}/cash_flow.json?symbol=${F(n)}&type=${o}&is_detail=${r}&count=${e}`)}function fn(n,t={}){let{count:e=10,type:o="Q4",is_detail:r=!0,region:a="cn"}=t;return q(j,`/v5/stock/finance/${a}/income.json?symbol=${F(n)}&type=${o}&is_detail=${r}&count=${e}`)}function gn(n,t={}){let{count:e=10,type:o="Q4",is_detail:r=!0,region:a="cn"}=t;return q(j,`/v5/stock/finance/${a}/balance.json?symbol=${F(n)}&type=${o}&is_detail=${r}&count=${e}`)}function hn(n,{circula:t=1}={}){return q(j,`/v5/stock/f10/cn/top_holders.json?symbol=${F(n)}&circula=${t}`)}function yn(n){return q(j,`/v5/stock/f10/cn/indicator.json?symbol=${F(n)}`)}function bn(n){return q(j,`/v5/stock/f10/cn/industry.json?symbol=${F(n)}`)}function _n(n,{page:t=1,size:e=10}={}){return q(j,`/v5/stock/f10/cn/bonus.json?symbol=${F(n)}&page=${t}&size=${e}`)}function ue(n){return q(j,`/v5/stock/capital/flow.json?symbol=${F(n)}`)}function wn(n,{count:t=20}={}){return q(j,`/v5/stock/capital/history.json?symbol=${F(n)}&count=${t}`)}function Sn(n,{page:t=1,size:e=180}={}){return q(j,`/v5/stock/capital/margin.json?symbol=${F(n)}&page=${t}&size=${e}`)}function xn(){return q(j,"/v5/stock/portfolio/list.json?system=true")}function me(n,{size:t=1e3}={}){return q(j,`/v5/stock/portfolio/stock/list.json?size=${t}&category=1&pid=${n}`)}function $n(n,{category:t=1}={}){return cn(j,"/v5/stock/portfolio/stock/add.json",{symbols:n,category:t})}function An(n,{category:t=1}={}){return cn(j,"/v5/stock/portfolio/stock/cancel.json",{symbols:n,category:t})}function ft(n){return q(j,`/v5/stock/batch/quote.json?symbol=${n.map(F).join(",")}&extend=detail&is_delay_hk=true`)}function kn(n){return q(ae,`/cubes/nav_daily/all.json?cube_symbol=${n}`)}function vn(n){return q(ae,`/cubes/rebalancing/current.json?cube_symbol=${n}`)}function Nn(n){return q(j,`/stock/report/latest.json?symbol=${F(n)}`)}import Uo from"https";var pe="www.gelonghui.com",Ko="Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/146.0.0.0 Safari/537.36";function Ft(n,t=1e4){return new Promise((e,o)=>{let r=new URL(n,`https://${pe}`),a=Uo.get({hostname:pe,path:r.pathname+r.search,headers:{"User-Agent":Ko,Accept:"application/json, text/plain, */*","Accept-Language":"zh-CN,zh;q=0.9",Referer:`https://${pe}/live/`,"client-lang":"zh-cn",platform:"web",shortversion:"10.7.0"}},s=>{let i=[];s.on("data",c=>i.push(c)),s.on("end",()=>{let c=Buffer.concat(i).toString();try{e(JSON.parse(c))}catch{e(c)}})});a.setTimeout(t,()=>{a.destroy(),o(new Error("timeout"))}),a.on("error",o)})}function lt(n={}){let t=new URLSearchParams({category:n.category??"all",limit:String(n.limit??15),timestamp:String(Date.now())});return n.liveId&&t.set("liveId",String(n.liveId)),Ft(`/api/live-channels/${n.channel??"all"}/lives/v4?${t}`)}function qn(n={}){return lt({channel:n.channel,category:"important",limit:n.limit,liveId:n.liveId})}function On(n={}){return lt({channel:n.channel,category:"popular",limit:n.limit,liveId:n.liveId})}function jn(n={}){return Ft(`/hq/hk/boards/v1?sort=${n.sort??"netChange"}&order=${n.order??"desc"}`)}function fe(){return Ft("/hq/home-page-data")}function gt(){return Ft("/hq/quote/api/market/flow/entrance/data/v2")}var ge=Object.freeze([{id:"all",name:"\u5168\u90E8"},{id:"popular",name:"\u6700\u70ED"},{id:"fundLive",name:"\u57FA\u91D1"},{id:"ai",name:"AI"},{id:"international",name:"\u56FD\u9645"},{id:"chineseMainland",name:"\u4E2D\u56FD\u5927\u9646"},{id:"hongkongMacaoTaiwan",name:"\u6E2F\u6FB3\u53F0"},{id:"HKStock",name:"\u6E2F\u80A1"},{id:"AStock",name:"A\u80A1"},{id:"USStock",name:"\u7F8E\u80A1"},{id:"virtualAssets",name:"\u865A\u62DF\u8D44\u4EA7"},{id:"exchangeCommodity",name:"\u5546\u54C1\u5916\u6C47"},{id:"house",name:"\u697C\u5E02"},{id:"debenture",name:"\u503A\u5238"}]),he=Object.freeze([{id:"netChange",name:"\u6DA8\u8DCC\u5E45"},{id:"turnoverValue",name:"\u6210\u4EA4\u989D"},{id:"turnVolume",name:"\u6210\u4EA4\u91CF"}]);function ht(n){return n?ge.find(t=>t.id.toLowerCase()===n.toLowerCase()||t.name===n)??ge[0]:ge[0]}function Cn(n){return n?he.find(t=>t.id.toLowerCase()===n.toLowerCase()||t.name===n)??he[0]:he[0]}var Fn={0:"",1:"\u2605",2:"\u2605\u2605",3:"\u2605\u2605\u2605"},Tt={all:-1,oil:19,steel:20,coal:21,gas:22,metal:23,nonferrous:24,chemical:25,sugar:27,grain:28,pig:29,macro:30};import ye from"fs";import Y from"path";import X from"os";import{execSync as be}from"child_process";import Tn from"crypto";function Qo(){return be('security find-generic-password -w -s "Chrome Safe Storage"',{encoding:"utf-8"}).trim()}function Vo(n){let t=n.match(/([a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12})/i);if(t?.[1])return t[1];let e=[/([A-Z]{3})$/,/([a-z]{2}_[A-Z]{2})$/,/[^\x20-\x7E]*([\x20-\x7E]+)$/,/.*?([a-zA-Z0-9_\-.]+)$/];for(let o of e){let r=n.match(o);if(r?.[1]?.length>0)return r[1]}return n}function Wo(n,t,e=0){let o=n.slice(0,3).toString("ascii");if(!/^v\d\d$/.test(o))return n.toString("utf-8");let r=n.slice(3);if(r.length===0||r.length%16!==0)return n.toString("utf-8");let a=Tn.pbkdf2Sync(t,"saltysalt",1003,16,"sha1"),s=Buffer.alloc(16,32),i=Tn.createDecipheriv("aes-128-cbc",a,s);i.setAutoPadding(!1);let c=Buffer.concat([i.update(r),i.final()]),l=c[c.length-1];return l&&l<=16&&(c=c.slice(0,-l)),e>=24&&c.length>32&&(c=c.slice(32)),Vo(c.toString("utf-8"))}var Yo=[Y.join(X.homedir(),"Library/Application Support/Google/Chrome/Default/Cookies"),Y.join(X.homedir(),"Library/Application Support/Google/Chrome/Profile 1/Cookies"),Y.join(X.homedir(),"Library/Application Support/Google/Chrome Beta/Default/Cookies"),Y.join(X.homedir(),"Library/Application Support/Google/Chrome Beta/Profile 1/Cookies"),Y.join(X.homedir(),"Library/Application Support/Google/Chrome Dev/Default/Cookies"),Y.join(X.homedir(),"Library/Application Support/Google/Chrome Canary/Default/Cookies"),Y.join(X.homedir(),"Library/Application Support/BraveSoftware/Brave-Browser/Default/Cookies"),Y.join(X.homedir(),"Library/Application Support/Microsoft Edge/Default/Cookies")];function Xo(n){for(let t of Yo){if(!ye.existsSync(t))continue;let e=Y.join(X.tmpdir(),`finflow_cookies_${Date.now()}.db`);ye.copyFileSync(t,e);try{let o=0;try{let s=be(`sqlite3 "${e}" "SELECT value FROM meta WHERE key='version';"`,{encoding:"utf-8"}).trim();o=parseInt(s,10)||0}catch{}let r=`SELECT name, hex(encrypted_value), host_key FROM cookies WHERE host_key LIKE '%${n}%'`;return JSON.parse(be(`sqlite3 -json "${e}" "${r}"`,{encoding:"utf-8"})).map(s=>({name:s.name,value:Buffer.from(s["hex(encrypted_value)"],"hex"),domain:s.host_key,_metaVersion:o}))}finally{try{ye.unlinkSync(e)}catch{}}}return[]}function Rt(n,t){if(process.platform!=="darwin")throw new Error("\u6D4F\u89C8\u5668\u81EA\u52A8\u83B7\u53D6 Cookie \u4EC5\u652F\u6301 macOS");let e;try{e=Qo()}catch{throw new Error(`\u65E0\u6CD5\u4ECE Keychain \u83B7\u53D6 Chrome \u5BC6\u7801\u3002
|
|
6
|
+
\u8BF7\u786E\u4FDD\u5DF2\u5B89\u88C5 Google Chrome\u3002`)}let o=Xo(n);if(!o.length)throw new Error(`\u672A\u627E\u5230 ${n} Cookie\uFF0C\u8BF7\u786E\u4FDD\u5DF2\u5728 Chrome \u4E2D\u767B\u5F55 ${n}`);let r=t?[t,`.${t}`]:[`.${n}`,n],a=[];for(let s of o)if(r.includes(s.domain))try{let i=Wo(s.value,e,s._metaVersion);if(/[\x00-\x08\x0b\x0c\x0e-\x1f\x7f]/.test(i))continue;a.push(`${s.name}=${i}`)}catch{}if(!a.length)throw new Error("Cookie \u89E3\u5BC6\u5168\u90E8\u5931\u8D25");return a.join("; ")}function rt(){try{return Rt("jin10.com")}catch{return null}}function Z(n){return Fn[n]||""}function yt(n){return n?.slice(5,16)||""}function at(n){return n?.length?n.filter(t=>t.type==="quotes").map(t=>t.title).join(" "):""}function ut(n,t){return!n&&t?.data?.vip_title?`[VIP] ${t.data.vip_title}`:n?U(n).replace(/^金十数据\d{4}年\d{1,2}月\d{1,2}日讯[,,]?\s*/,""):""}var Rn=[],Zo=["content","title","brief","data.content","data.title","indicator_name","name","subject_name"];function tr(n){return Zo.map(t=>t.split(".").reduce((o,r)=>o?.[r],n)||"").filter(Boolean).join(" ").toLowerCase()}function T(n){if(!Rn.length||!Array.isArray(n))return n;let t=Rn.map(e=>e.toLowerCase());return n.filter(e=>{let o=tr(e);return!t.some(r=>o.includes(r))})}function bt(n,t){let e=n.slice(0,t);if(!e.length){console.log("\u6682\u65E0\u6570\u636E");return}let{table:o,w:r}=h(["\u65F6\u95F4","\u5185\u5BB9","\u6765\u6E90","\u6807\u7684"],[10,58,10,14],{0:14});for(let a of e){let s=ut(a.data?.content||a.data?.title||"",a),i=Z(a.important),c=at(a.remark),l=i?`${i} `:"";o.push([yt(a.time),w(l+s,r?.[1]||58),a.data?.source||"",w(c,r?.[3]||14)])}console.log(o.toString())}function er(n,t){let e=n.slice(0,t);if(!e.length){console.log("\u6682\u65E0\u6570\u636E");return}let{table:o,w:r}=h(["\u65F6\u95F4","\u6807\u9898","\u5185\u5BB9","\u8BDD\u9898"],[8,14,58,12],{0:14});for(let a of e){let s=a.subjects?.length?a.subjects.map(p=>`${u.yellow}#${p.subject_name}${u.reset}`).join(" "):"",i=p=>String(p).padStart(2,"0"),c=new Date(a.ctime*1e3),l=`${i(c.getMonth()+1)}-${i(c.getDate())} ${i(c.getHours())}:${i(c.getMinutes())}`;o.push([l,w(a.title||"",r?.[1]||14),w(U(a.content||a.brief),r?.[2]||58),w(s,r?.[3]||12)])}console.log(o.toString())}function Jt(n,t){let e=(n||[]).slice(0,t);if(!e.length){console.log("\u6682\u65E0\u6570\u636E");return}let{table:o,w:r}=h(["\u65F6\u95F4","\u5185\u5BB9","\u6807\u7B7E"],[10,72,28],{0:14});for(let a of e){let s=new Date(a.createTimestamp*1e3),i=f=>String(f).padStart(2,"0"),c=`${i(s.getMonth()+1)}-${i(s.getDate())} ${i(s.getHours())}:${i(s.getMinutes())}`,l=a.level===1?" \u2605":"",p=U(a.content||a.contentPrefix||"").replace(/^格隆汇\d+月\d+日[||]/,""),d=[];a.relatedStocks?.length&&d.push(a.relatedStocks.map(f=>u.yellow+f.name+u.reset).join(" ")),a.relatedInfos?.length&&d.push(a.relatedInfos.map(f=>u.cyan+"#"+f.name+u.reset).join(" ")),a.count?.read>=1e4&&d.push(u.dim+(a.count.read/1e4).toFixed(1)+"w\u9605"+u.reset);let m=d.join(" ");o.push([c+l,w(p,r?.[1]||72),w(m,r?.[2]||28)])}console.log(o.toString())}function _t(n){return n=T(n),{items:n.map(t=>({time:t.time,content:ut(t.data?.content||t.data?.title||"",t),title:t.data?.title||"",importance:t.important??0,source:t.data?.source||"",tags:at(t.remark)?at(t.remark).split(" "):[]})),total:n.length}}function nr(n){return n=T(n),{items:n.map(t=>({time:new Date(t.ctime*1e3).toISOString(),content:U(t.content||t.brief||""),title:t.title||"",importance:0,source:"cls",tags:(t.subjects||[]).map(e=>`#${e.subject_name}`)})),total:n.length}}function Dt(n){return n=T(n),{items:n.map(t=>({time:new Date(t.createTimestamp*1e3).toISOString(),content:U(t.content||""),title:t.title||"",importance:t.level===1?1:0,source:"glh",tags:[...(t.relatedStocks||[]).map(e=>e.name),...(t.relatedInfos||[]).map(e=>`#${e.name}`)],readCount:t.count?.read||0})),total:n.length}}function or(n){let t=n?.list||(Array.isArray(n)?n:[]),e=[];if(Array.isArray(t)&&Array.isArray(t[0]))for(let o of t)for(let r of o)e.push(r);else Array.isArray(t)&&(e=t);return e=T(e),{items:e.map(o=>({title:o.title||"",badge:o.ndata?.badge||"",redirectUrl:o.web_redirect_url||""})),total:e.length}}function rr(n){let t=[],e=n?.list||(Array.isArray(n)?n:[]);if(Array.isArray(e)&&e.length&&Array.isArray(e[0]))for(let o of e)t.push(...o);else Array.isArray(e)&&(t=e);return t=T(t),{items:t.map(o=>({title:o.title||"",introduction:o.introduction||"",displayDatetime:o.display_datetime||"",tags:(o.reveal_tags||[]).map(r=>r.name||r),vip:!!o.vip,source:o.source||""})),total:t.length}}function Jn(n){let t=n?.data?.top_article||[],e=n?.data?.depth_list||[],o=T([...t,...e]);return{items:o.map(r=>({time:r.ctime?new Date(r.ctime*1e3).toISOString():"",title:r.title||"",brief:U(r.brief||""),source:r.source||"",subjects:(r.subjects||[]).map(a=>a.subject_name||a.name||""),readingNum:r.reading_num||0})),total:o.length}}function ar(n){let t=T(n?.data||[]);return{items:t.map(e=>({title:e.title||"",readingNum:e.readNum||0})),total:t.length}}function sr(n){let t=T(n?.data||[]);return{items:t.map(e=>({time:e.ctime?new Date(e.ctime*1e3).toISOString():"",title:e.title||"",source:e.source||""})),total:t.length}}function ir(n){let t=T(n?.list||n?.data||[]);return Array.isArray(t)?{items:t.map(e=>({date:e.created_at?String(e.created_at).slice(0,10):"",title:e.title||"",institution:e.institution||"",rating:e.rating||""})),total:t.length}:{items:[],total:0}}function Dn(n){return{items:n.map(t=>({id:t.id,title:t.title||"",shortName:t.short_name||"",introduction:(t.introduction||"").trim().slice(0,200),categoryName:t.category_name||"",subscribeNum:t.subscribe_num||0})),total:n.length}}function cr(n){let t=n?.data?.hot_subjects||[],e=n?.data?.newest_subjects||[];return{hotSubjects:t.map(o=>({name:o.name||"",attentionNum:o.attention_num||0,newestArticleTitle:U(o.newest_article_title||"")})),newestSubjects:e.map(o=>({name:o.name||""}))}}function lr(n,t){let e=n?.data?.top_article||[],o=n?.data?.depth_list||[],r=[...e.slice(0,3),...o].slice(0,t);if(!r.length)return console.log("\u6682\u65E0\u6570\u636E");let{table:a,w:s}=h(["\u65F6\u95F4","\u6807\u9898","\u6458\u8981"],[10,25,65],{0:14});for(let i of r)a.push([It(i.ctime),w(i.title,s?.[1]||25),w(`${u.dim}${U(i.brief)}${u.reset}`,s?.[2]||65)]);console.log(a.toString())}function ur(n,t){let e=n.slice(0,t);if(!e.length)return console.log("\u6682\u65E0\u6570\u636E");let{table:o,w:r}=h(["\u65F6\u95F4","\u6807\u9898","\u6458\u8981"],[10,25,65],{0:14});for(let a of e)o.push([It(a.ctime),w(a.title,r?.[1]||25),w(`${u.dim}${U(a.brief)}${u.reset}`,r?.[2]||65)]);console.log(o.toString())}function mr(n,t){let e=(n?.data||[]).slice(0,t);if(!e.length){console.log("\u6682\u65E0\u6570\u636E");return}let{table:o,w:r}=h(["#","\u6807\u9898","\u9605\u8BFB"],[3,80,10],{0:4,2:8});for(let a=0;a<e.length;a++){let s=e[a];o.push([`${u.yellow}${a+1}.${u.reset}`,w(s.title,r?.[1]||80),s.readNum>1e4?(s.readNum/1e4).toFixed(1)+"\u4E07":String(s.readNum)])}console.log(o.toString())}function dr(n,t){let e=(n?.data||[]).slice(0,t);if(!e.length)return console.log("\u6682\u65E0\u6570\u636E");let{table:o,w:r}=h(["\u65F6\u95F4","\u6807\u9898","\u6765\u6E90"],[14,60,10],{0:16,2:10});for(let a of e){let s=new Date(a.ctime*1e3),i=`${s.getFullYear()}-${String(s.getMonth()+1).padStart(2,"0")}-${String(s.getDate()).padStart(2,"0")} ${String(s.getHours()).padStart(2,"0")}:${String(s.getMinutes()).padStart(2,"0")}`;o.push([i,w(a.title,r?.[1]||60),a.source||""])}console.log(o.toString())}function _e(n,t){let e=n?.list||(Array.isArray(n)?n:[]);if(!e.length){console.log("\u6682\u65E0\u6570\u636E");return}let o=[];if(Array.isArray(e)&&Array.isArray(e[0]))for(let s of e)for(let i of s)o.push(i);else Array.isArray(e)&&(o=e);o=o.slice(0,t);let{table:r,w:a}=h(["\u65F6\u95F4","\u6807\u9898","\u6807\u7B7E"],[14,60,14],{0:16});for(let s of o){let i=s.display_datetime?.slice(5,16)||"-",c=s.reveal_tags?.map(p=>p.name).join(" ")||"",l=s.vip?"VIP":"";r.push([i,w(s.title,a?.[1]||60),w(`${c}${l}`,a?.[2]||14)])}console.log(r.toString())}function pr(n){let t=n?.list||n?.data||[];if(!Array.isArray(t)||!t.length)return console.log("\u6682\u65E0\u6570\u636E");let{table:e,w:o}=h(["\u65E5\u671F","\u6807\u9898","\u673A\u6784","\u8BC4\u7EA7"],[14,50,14,8],{0:14,2:14});for(let r of t.slice(0,10)){let a=r.created_at?String(r.created_at).slice(0,10):"-";O(e,[a,r.title||"-",r.institution||"-",r.rating||"-"],o)}console.log(e.toString())}function fr(n){let t=n?.data?.hot_subjects||[],e=n?.data?.newest_subjects||[];if(!t.length&&!e.length)return console.log("\u6682\u65E0\u6570\u636E");let{table:o,w:r}=h(["#","\u8BDD\u9898","\u5173\u6CE8","\u6700\u65B0\u52A8\u6001"],[2,14,8,50],{0:4,2:10});for(let a of t.slice(0,10))o.push([`${u.yellow}#${u.reset}`,w(a.name,r?.[1]||14),a.attention_num>1e4?(a.attention_num/1e4).toFixed(1)+"\u4E07":String(a.attention_num),w(`${u.dim}${U(a.newest_article_title||"")}${u.reset}`,r?.[3]||50)]);if(console.log(`${u.bold}${u.ul}\u70ED\u95E8\u8BDD\u9898${u.reset}`),console.log(o.toString()),e.length){let{table:a,w:s}=h(["#","\u8BDD\u9898"],[2,80],{0:4});for(let i of e.slice(0,5))a.push([`${u.yellow}#${u.reset}`,w(i.name,s?.[1]||80)]);console.log(`${u.bold}${u.ul}\u6700\u65B0\u8BDD\u9898${u.reset}`),console.log(a.toString())}}async function we(n){let t=rt(),e=t?{cookie:t}:void 0,o=new Set,r=[],a=await Be({},e);for(let c of a?.data||[])o.has(c.id)||(o.add(c.id),r.push(c));let s=0,i=50;for(;r.length<n&&s++<i;){let c=r[r.length-1];if(!c)break;let p=(await Ue(c.time,e))?.data||[];if(!p.length)break;let d=0;for(let m of p)o.has(m.id)||(o.add(m.id),r.push(m),d++);if(d===0)break;r.length<n&&await new Promise(m=>setTimeout(m,200))}return r}function Ln(n){return n.command({command:"info",describe:"\u4FE1\u606F\u6D41",builder:t=>t.strictCommands(!1).command("flash","\u5FEB\u8BAF",e=>e.option("src",{alias:"s",type:"string",choices:["cls","jin10","glh"],default:"cls",describe:"\u6570\u636E\u6E90"}).option("category",{alias:"c",type:"string",describe:"cls \u680F\u76EE / glh \u9891\u9053"}).strictCommands(!1).command("important","\u91CD\u8981\u5FEB\u8BAF\uFF08glh \u6570\u636E\u6E90\uFF09",o=>o.option("channel",{alias:"c",type:"string",describe:"\u9891\u9053"}),async o=>{let{f:r,n:a=10,channel:s}=o,i=s?ht(s):ht("popular"),c=await qn({channel:i.id,limit:a}),l=T(c.result||[]);g({data:l,format:r,command:"info flash important",source:"glh",toJSON:()=>Dt(l),printFn:Jt,printArgs:[a]})}).command("popular","\u70ED\u95E8\u5FEB\u8BAF\uFF08glh\uFF09",o=>o,async o=>{let{f:r,n:a=10}=o,s=await On({limit:a}),i=T(s.result||[]);g({data:i,format:r,command:"info flash popular",source:"glh",toJSON:()=>Dt(i),printFn:Jt,printArgs:[a]})}).command("detail <id>","\u5FEB\u8BAF\u8BE6\u60C5\uFF08jin10\uFF09",o=>o,async o=>{let{f:r,n:a=10}=o,s=o.id,i=await Ke(s);g({data:i,format:r,command:"info flash detail",source:"jin10",toJSON:c=>_t(c?.data?[c]:[]),printFn:bt,printArgs:[a]})}).command("date <date>","\u5386\u53F2\u5FEB\u8BAF\uFF08jin10\uFF0C\u9700\u767B\u5F55\uFF09",o=>o,async o=>{let{f:r,n:a=10}=o,s=o.date,i;try{i=fetchCookieFromBrowser("jin10.com")}catch(l){console.error(`${u.yellow}${l.message}${u.reset}`),console.error("\u6309\u65E5\u671F\u67E5\u770B\u5FEB\u8BAF\u9700\u8981\u767B\u5F55\uFF0C\u8BF7\u5148\u767B\u5F55 jin10.com"),process.exit(1)}let c=await ze(s,{cookie:i});c?._statusCode===403&&(console.error(`${u.yellow}\u6B64\u529F\u80FD\u9700\u8981\u5F00\u901A\u4F1A\u5458\uFF0C\u8BF7\u5728 jin10.com \u5347\u7EA7${u.reset}`),process.exit(1)),g({data:c,format:r,command:"info flash date",source:"jin10",toJSON:l=>_t(l?.data||[]),printFn:bt,printArgs:[a]})}).command("live [channel]","\u5B9E\u65F6\u5FEB\u8BAF\u76D1\u63A7\uFF08glh\uFF09",o=>o.option("interval",{alias:"i",type:"number",default:10,describe:"\u5237\u65B0\u95F4\u9694(\u79D2)"}),async o=>{let{f:r,n:a=10,interval:s=10}=o,i=o.channel,c=ht(i),l=null;for(process.stdout.write("\x1B[2J\x1B[H");;){let p={channel:c.id,limit:a||15};l&&(p.liveId=l);let d=await lt(p);if(d.result?.length){let m=T(d.result);l=d.result[0].id,process.stdout.write("\x1B[2J\x1B[H");let f=process.stdout.columns||120;console.log(u.bold+`\u683C\u9686\u6C47\u5FEB\u8BAF \u5B9E\u65F6\u6A21\u5F0F (\u6BCF${s}s\u5237\u65B0)`+u.reset),console.log(u.dim+`\u6700\u540E\u66F4\u65B0: ${new Date().toLocaleTimeString("zh-CN")}`+u.reset),console.log("\u2500".repeat(f)),console.log(),g({data:m,format:r||"json",command:"info flash live",source:"glh",toJSON:y=>Dt(y.slice(0,a||15)),printFn:Jt,printArgs:[a||15]})}await new Promise(m=>setTimeout(m,s*1e3))}}),async e=>{let{f:o,n:r=10,src:a="cls",category:s}=e,i=s||"all",c=[];a==="jin10"?c.push({name:"jin10",fn:m=>we(r).then(f=>{g({data:f,format:o,command:"info flash",source:m,toJSON:_t,printFn:bt,printArgs:[r]})})},{name:"cls",fn:m=>p(m,i,r,o)},{name:"glh",fn:m=>d(m,i,r,o)}):a==="glh"?c.push({name:"glh",fn:m=>d(m,i,r,o)},{name:"cls",fn:m=>p(m,i,r,o)},{name:"jin10",fn:m=>we(r).then(f=>{g({data:f,format:o,command:"info flash",source:m,toJSON:_t,printFn:bt,printArgs:[r]})})}):i==="all"?c.push({name:"cls",fn:m=>p(m,i,r,o)},{name:"jin10",fn:m=>we(r).then(f=>{g({data:T(f),format:o,command:"info flash",source:m,toJSON:_t,printFn:bt,printArgs:[r]})})},{name:"glh",fn:m=>d(m,i,r,o)}):c.push({name:"cls",fn:m=>p(m,i,r,o)});let l;for(let m=0;m<c.length;m++){let{name:f,fn:y}=c[m],b=m===0?f:`${f} (fallback)`;try{await y(b);return}catch(_){l=_,m<c.length-1&&console.error(u.dim+`Source ${f} failed: ${_?.message||_}, trying next...`+u.reset)}}throw l;async function p(m,f,y,b){let _=Ie(f);_||(console.error(`${u.red}\u672A\u77E5\u680F\u76EE: ${f}${u.reset}
|
|
7
|
+
\u4F7F\u7528 --category \u6307\u5B9A\u680F\u76EE\u6216\u4F7F\u7528 --src jin10|glh`),process.exit(1));let S=new Set,A=[],I=20,Q=50,L=0,v=(await Gt({rn:I}))?.data?.roll_data||[];for(let $ of v)S.has($.id)||(S.add($.id),A.push($));for(;A.length<y&&L++<Q;){let $=A.reduce((E,J)=>(J.ctime||0)<(E.ctime||0)?J:E,A[0]);if(!$?.ctime)break;let K=(await Gt({lastTime:$.ctime,rn:I}))?.data?.roll_data||[],et=0;for(let E of K)S.has(E.id)||(S.add(E.id),A.push(E),et++);if(!et)break;A.length<y&&await new Promise(E=>setTimeout(E,200))}A.sort(($,x)=>(x.ctime||0)-($.ctime||0));let B=A.slice(0,y);_.category!=="all"&&(B=B.filter($=>($.subjects||[]).some(x=>x.subject_id===_.category))),g({data:B,format:b,command:"info flash",source:m,toJSON:nr,printFn:er,printArgs:[y]})}async function d(m,f,y,b){let _=f&&f!=="all"?ht(f):{id:"all"},S=new Set,A=[],I=15,Q=50,L=0,M=await lt({channel:_.id,limit:I});for(let v of M?.result||[])S.has(v.id)||(S.add(v.id),A.push(v));for(;A.length<y&&L++<Q;){let v=A[A.length-1];if(!v?.id)break;let B=await lt({channel:_.id,limit:I,liveId:v.id}),$=0;for(let x of B?.result||[])S.has(x.id)||(S.add(x.id),A.push(x),$++);if(!$)break;A.length<y&&await new Promise(x=>setTimeout(x,200))}g({data:A,format:b,command:"info flash",source:m,toJSON:Dt,printFn:Jt,printArgs:[y]})}}).command("news","\u6DF1\u5EA6\u6587\u7AE0",e=>e.strictCommands(!1).command("slide","\u5E7B\u706F\u7247/\u91CD\u8981\u4E8B\u4EF6\uFF08jin10\uFF09",o=>o,async o=>{let{f:r,n:a=10}=o,s=await Ve();g({data:s,format:r,command:"info news slide",source:"jin10",toJSON:or,printFn:_e,printArgs:[a]})}).command("feature","\u7CBE\u9009\u6587\u7AE0\uFF08jin10\uFF09",o=>o,async o=>{let{f:r,n:a=10}=o,s=await We();g({data:s,format:r,command:"info news feature",source:"jin10",toJSON:rr,printFn:_e,printArgs:[a]})}).command("depth [channel]","\u6DF1\u5EA6\u680F\u76EE\uFF08cls\uFF09",o=>o,async o=>{let{f:r,n:a=10}=o,s=o.channel||"headline",i=Ge(s);if(!i){let p=Object.entries(ct).map(([d,m])=>` ${d.padEnd(12)} ${m.name} (${m.id})`).join(`
|
|
7
8
|
`);console.error(`${u.red}\u672A\u77E5\u680F\u76EE: ${s}${u.reset}
|
|
8
9
|
\u53EF\u7528\u680F\u76EE:
|
|
9
|
-
${m}`),process.exit(1)}let c=await mt(i.id),l=k(c?.data?.depth_list||[]);if(l.length<a){let m=l[l.length-1]?.ctime;if(m){let g=await zt(i.id,{lastTime:m,rn:a-l.length}),p=k(g?.data?.depth_list||g?.data||[]);l=[...l,...p]}}d({data:c,format:r,command:"info news depth",source:"cls",toJSON:nn,printFn:io,printArgs:[a]})}).command("hot","\u70ED\u95E8\u6587\u7AE0\u6392\u884C\uFF08cls\uFF09",n=>n,async n=>{let{f:r,n:a=10}=n,s=await Kt();d({data:s,format:r,command:"info news hot",source:"cls",toJSON:no,printFn:co,printArgs:[a]})}).command("stock <code>","\u4E2A\u80A1\u65B0\u95FB\uFF08cls\uFF09",n=>n,async n=>{let{f:r,n:a=10}=n,s=n.code,i=await ne(s,{rn:a});d({data:i,format:r,command:"info news stock",source:"cls",toJSON:oo,printFn:lo,printArgs:[a]})}),async e=>{let{f:n,n:r=10}=e,a=await mt(1e3);d({data:a,format:n,command:"info news",source:"cls",toJSON:nn,printFn:so,printArgs:[r]})}).command("report <code>","\u673A\u6784\u7814\u62A5\uFF08xq\uFF09",e=>e,async e=>{let{f:n}=e,a=e.code,s=await We(a);d({data:s,format:n,command:"info report",source:"xq",toJSON:ro,printFn:uo})}).command("topic","\u4E13\u9898",e=>e.strictCommands(!1).command("search <keyword>","\u641C\u7D22\u8BDD\u9898",n=>n,async n=>{let{f:r,n:a=10}=n,s=n.keyword,i=await et(),c=Array.isArray(i)?i:i?.data||[],l=s.toLowerCase(),m=c.filter(p=>(p.title||"").toLowerCase().includes(l)||(p.short_name||"").toLowerCase().includes(l)||(p.introduction||"").toLowerCase().includes(l));if(!m.length)return console.log(`\u672A\u627E\u5230\u5339\u914D "${s}" \u7684\u4E13\u9898`);let g=k(m.slice(0,a));if(r==="text"){let{table:p,w:h}=f(["ID","\u4E13\u9898","\u7B80\u4ECB","\u5206\u7C7B"],[4,22,44,10],{0:4,3:10});for(let _ of g)p.push([_.id,y(_.short_name||_.title,h?.[1]||22),y((_.introduction||"").trim().slice(0,70),h?.[2]||44),_.category_name||""]);console.log(p.toString()),console.log(`${u.dim}\u627E\u5230 ${m.length} \u4E2A\u5339\u914D${u.reset}`)}else d({data:g,format:r,command:"info topic search",source:"jin10",toJSON:on})}).command("groups","\u8BDD\u9898\u5206\u7EC4",n=>n,async()=>{let n=await et(),r=Array.isArray(n)?n:n?.data||[],a=new Map;for(let s of r){let i=s.category_name||"\u672A\u5206\u7C7B";a.has(i)||a.set(i,0),a.set(i,a.get(i)+1)}for(let[s,i]of a)console.log(` ${s} (${i})`)}).command("hot","\u8D22\u8054\u793E\u9898\u6750",n=>n,async n=>{let{f:r}=n,a=await Wt();d({data:a,format:r,command:"info topic hot",source:"cls",toJSON:s=>ao(k(s)),printFn:mo})}).command("show <id>","\u4E13\u9898\u6587\u7AE0\uFF08jin10\uFF09",n=>n,async n=>{let{f:r,n:a=10}=n,s=n.id,i=L(),c=i?{cookie:i}:void 0,l=new Set,m=[],g=1,p=50;for(;m.length<a&&g<=p;){let b=(await _e(s,{page:g},c))?.data?.list||[];if(!b.length)break;let $=0;for(let M of b)l.has(M.id)||(l.add(M.id),m.push(M),$++);if($===0)break;g++,m.length<a&&await new Promise(M=>setTimeout(M,200))}let h=k(m);r==="text"?Dt({list:h},a):d({data:h,format:r,command:"info topic show",source:"jin10",toJSON:_=>({items:_.map(b=>({time:b.display_datetime,title:b.title,author:b.author?.nick,vip:b.vip})),total:_.length})})}),async e=>{let{f:n,n:r=10}=e,a=await et(),s=k(Array.isArray(a)?a:a?.data||[]);if(s=s.slice(0,r),!s.length)return console.log("\u6682\u65E0\u6570\u636E");if(n==="text"){let{table:i,w:c}=f(["ID","\u4E13\u9898","\u7B80\u4ECB","\u5206\u7C7B","\u8BA2\u9605\u6570"],[4,22,40,10,6],{0:4,3:10,4:6});for(let l of s)i.push([l.id,y(l.short_name||l.title,c?.[1]||22),y((l.introduction||"").trim().slice(0,60),c?.[2]||40),l.category_name||"",l.subscribe_num||""]);console.log(i.toString())}else d({data:s,format:n,command:"info topic",source:"jin10",toJSON:on})}),handler:async()=>{console.log("\u8BF7\u6307\u5B9A\u5B50\u547D\u4EE4\uFF0C\u4F8B\u5982: finflow info flash, finflow info news, finflow info topic")}})}function W(o){let t=o.result||{},e=[{label:"\u5317\u5411\u8D44\u91D1(\u6CAA)",d:t.shMarketFlowDetail},{label:"\u5317\u5411\u8D44\u91D1(\u6DF1)",d:t.szMarketFlowDetail},{label:"\u5317\u5411\u5408\u8BA1",d:t.shSZTotalMarketFlowDetail},{label:"\u5357\u5411\u8D44\u91D1(\u6CAA)",d:t.hkSHMarketFlowDetail},{label:"\u5357\u5411\u8D44\u91D1(\u6DF1)",d:t.hkSZMarketFlowDetail},{label:"\u5357\u5411\u5408\u8BA1",d:t.hkSHSZTotalMarketFlowDetail}],{table:n,w:r}=f(["\u8D44\u91D1\u6D41\u5411","\u51C0\u4E70\u5165","\u6210\u4EA4\u989D","\u72B6\u6001"],[3,2,2,1]);for(let a of e){let s=a.d;x(n,[a.label,s?.netBuyTurnover!=null?w(s.netBuyTurnover):s?.netBuyTurnoverText||"-",s?.tradValSum!=null?w(s.tradValSum):s?.tradValSumText||"-",s?.tradeStatus==="trading"?u.green+"\u4EA4\u6613\u4E2D"+u.reset:s?.tradeStatus||"-"],r)}console.log(n.toString())}function V(o){let t=o.result||{},e=(n,r)=>({label:n,netBuy:r?.netBuyTurnover??null,netBuyText:r?.netBuyTurnoverText||null,turnover:r?.tradValSum??null,status:r?.tradeStatus||null});return{northbound:{shanghai:e("\u5317\u5411\u8D44\u91D1(\u6CAA)",t.shMarketFlowDetail),shenzhen:e("\u5317\u5411\u8D44\u91D1(\u6DF1)",t.szMarketFlowDetail),total:e("\u5317\u5411\u5408\u8BA1",t.shSZTotalMarketFlowDetail)},southbound:{shanghai:e("\u5357\u5411\u8D44\u91D1(\u6CAA)",t.hkSHMarketFlowDetail),shenzhen:e("\u5357\u5411\u8D44\u91D1(\u6DF1)",t.hkSZMarketFlowDetail),total:e("\u5357\u5411\u5408\u8BA1",t.hkSHSZTotalMarketFlowDetail)},source:"glh"}}function fo(o){let t=o?.data||{};if(!t.secu_name)return console.log("\u6682\u65E0\u6570\u636E");let e=t.trade_status==="TRADE"?`${u.green}\u4EA4\u6613\u4E2D${u.reset}`:`${u.dim}\u5DF2\u6536\u76D8${u.reset}`,n=t.tr!=null&&t.tr>0?(t.tr*100).toFixed(2)+"%":"-",r=t.amp!=null&&t.amp>0?(t.amp*100).toFixed(2)+"%":"-",{table:a}=f(["\u540D\u79F0","\u4EE3\u7801","\u6700\u65B0\u4EF7","\u6DA8\u8DCC\u989D","\u6DA8\u8DCC\u5E45","\u72B6\u6001"],[20,12,10,10,12,10],{1:12,2:10,3:10,4:12,5:10});a.push([t.secu_name,t.secu_code,String(t.last_px),String(t.change_px),q(t.change),e]),console.log(a.toString());let{table:s}=f(["\u4ECA\u5F00","\u6700\u9AD8","\u6700\u4F4E","\u6628\u6536","\u632F\u5E45","\u6362\u624B"],[1,1,1,1,1,1]);s.push([t.open_px,t.high_px,t.low_px,t.preclose_px,r,n]),console.log(s.toString());let{table:i}=f(["\u5747\u4EF7","\u91CF\u6BD4","\u6210\u4EA4\u989D","\u5E02\u76C8","\u5E02\u51C0","\u603B\u5E02\u503C"],[1,1,1,1,1,1.2]);if(i.push([t.av_px,t.qrr,w(t.business_amount),t.pe!=null?t.pe:"-",t.pb!=null?t.pb:"-",w(t.mc)]),console.log(i.toString()),t.change_3!=null||t.change_5!=null){let{table:c}=f(["3\u65E5\u6DA8\u5E45","5\u65E5\u6DA8\u5E45"],[1,1]);c.push([(t.change_3*100).toFixed(2)+"%",(t.change_5*100).toFixed(2)+"%"]),console.log(c.toString())}}function go(o){if(!Array.isArray(o)||!o.length)return console.log("\u6682\u65E0\u6570\u636E");let{table:t,w:e}=f(["\u4EE3\u7801","\u540D\u79F0","\u6700\u65B0\u4EF7","\u6DA8\u8DCC\u989D","\u6DA8\u8DCC\u5E45","\u6210\u4EA4\u91CF","\u6210\u4EA4\u989D"],[14,12,10,10,10,12,14],{0:14,1:12,2:10,3:10,4:10});for(let n of o){let r=n.code||n.symbol||"-",a=n.name||"-",s=n.price??n.current??"-",i=n.change??n.chg??"-",c=n.changePercent??n.percent??"-",l=n.volume??"-",m=n.amount??"-";x(t,[r,a,String(s),String(i),q(c),B(l),w(m)],e)}console.log(t.toString())}function ho(o){let t=o?.data?.items||o?.data||[];if(!Array.isArray(t)||!t.length)return console.log("\u6682\u65E0\u6570\u636E");let{table:e,w:n}=f(["\u4EE3\u7801","\u540D\u79F0","\u6700\u65B0\u4EF7","\u6DA8\u8DCC\u5E45","\u5173\u8054"],[14,20,10,10,10],{0:14});for(let r of t)x(e,[r.symbol||"-",r.name||"-",String(r.current??"-"),q(r.percent??"-"),r.relation||"-"],n);console.log(e.toString())}function yo(o){let t=o?.data||{};return{code:t.secu_code||"",name:t.secu_name||"",price:Number(t.last_px||0),change:Number(t.change_px||0),changePercent:Math.round(Number(t.change||0)*1e4)/100,open:Number(t.open_px||0),high:Number(t.high_px||0),low:Number(t.low_px||0),preclose:Number(t.preclose_px||0),volume:Number(t.business_amount||0),amount:Number(t.business_balance||0),turnoverRate:Number(t.tr||0),amplitude:Number(t.amp||0),avgPrice:Number(t.av_px||0),volumeRatio:Number(t.qrr||0),pe:t.pe!=null?Number(t.pe):null,pb:t.pb!=null?Number(t.pb):null,marketCap:Number(t.mc||0),change3d:t.change_3!=null?Number(t.change_3):null,change5d:t.change_5!=null?Number(t.change_5):null,status:t.trade_status==="TRADE"?"trading":"closed",source:"cls"}}function bo(o){return{items:o.map(t=>{let e=t.quote||t;return{code:e.symbol||"",name:e.name||"",price:e.current??0,change:e.chg??0,changePercent:Math.round((e.percent??0)*1e4)/100,volume:e.volume??0,amount:e.amount??0,turnoverRate:e.turnover_rate??0,marketCap:e.market_capital??0,high:e.high??0,low:e.low??0,open:e.open??0}}),total:o.length}}var _o=new Set(["1m","5m","15m","30m","60m","120m"]);function wo(o,t){if(!o.length)return console.log("\u6682\u65E0\u6570\u636E");let{table:e}=f(["\u65E5\u671F","\u5F00","\u9AD8","\u4F4E","\u6536","\u6DA8\u8DCC%","\u6210\u4EA4\u989D"],[12,10,10,10,10,8,12],{0:14});for(let r of o){let s=`${r.change>=0?u.red:r.change<0?u.green:""}${r.change>=0?"+":""}${r.change.toFixed(2)}%${u.reset}`;e.push([String(r.trade_date),r.open_px,r.high_px,r.low_px,r.close_px,s,w(r.business_balance)])}let n={d:"\u65E5K",w:"\u5468K",m:"\u6708K",y:"\u5E74K","5d":"\u4E94\u65E5"};console.log(`${u.bold}${n[t]||t}\uFF08${o.length}\u6761\uFF09${u.reset}`),console.log(e.toString())}function So(o){let t=o?.data?.item||o?.data||[];if(!Array.isArray(t)||!t.length)return console.log("\u6682\u65E0\u6570\u636E");let{table:e,w:n}=f(["\u65E5\u671F","\u5F00","\u6536","\u9AD8","\u4F4E","\u6210\u4EA4\u91CF","\u6210\u4EA4\u989D"],[14,10,10,10,10,12,14],{0:14});for(let r of t){let a=new Date(r[0]),s=`${a.getFullYear()}-${String(a.getMonth()+1).padStart(2,"0")}-${String(a.getDate()).padStart(2,"0")}`;e.push([s,r[2],r[5],r[3],r[4],r[1]>=1e8?(r[1]/1e8).toFixed(2)+"\u4EBF":r[1]>=1e4?(r[1]/1e4).toFixed(2)+"\u4E07":String(r[1]),w(r[9])])}console.log(`${u.bold}K\u7EBF\uFF08${t.length}\u6761\uFF09${u.reset}`),console.log(e.toString())}function xo(o,t,e){return{code:o,period:t,items:e.map(n=>({date:String(n.trade_date),open:Number(n.open_px),high:Number(n.high_px),low:Number(n.low_px),close:Number(n.close_px),volume:Number(n.business_amount||0),change:Number(n.change||0)})),total:e.length}}function Ao(o,t,e){return{code:o,period:t,items:e.map(n=>({date:new Date(n[0]).toISOString().slice(0,10),open:Number(n[2]),high:Number(n[3]),low:Number(n[4]),close:Number(n[5]),volume:Number(n[1]),amount:Number(n[9]||0),turnoverRate:Number(n[8]||0)})),total:e.length}}function ko(o){let t=o?.data||{};if(!t.b_px_1&&t.b_px_1!==0)return console.log("\u6682\u65E0\u6570\u636E");let e=t.preclose_px,n=(s,i)=>{if(s===0)return["--","--"];let c=s-e;return[`${c>0?u.red:c<0?u.green:""}${s.toFixed(2)}${u.reset}`,w(i)]},r=[];for(let s=5;s>=1;s--){let[i,c]=n(t[`s_px_${s}`],t[`s_amount_${s}`]);r.push([`\u5356${s}`,i,c])}for(let s=1;s<=5;s++){let[i,c]=n(t[`b_px_${s}`],t[`b_amount_${s}`]);r.push([`\u4E70${s}`,i,c])}let{table:a}=f(["\u6863\u4F4D","\u4EF7\u683C","\u6570\u91CF"],[8,10,10],{1:12,2:12});for(let s of r)a.push(s);console.log(a.toString()),console.log(`\u6628\u6536: ${e}`)}function $o(o){let t=o?.data||{};if(!t.bp1&&t.bp1!==0)return console.log("\u6682\u65E0\u6570\u636E");let e=t.current??0,n=t.percent??0,r=n!==0?e/(1+n/100):0,{table:a,w:s}=f(["\u4E70\u65B9","\u4EF7\u683C","\u6570\u91CF"],[8,12,12],{1:12,2:12});for(let g=5;g>=1;g--){let p=t[`bp${g}`],h=t[`bc${g}`];if(p==null)break;let _=p-r,b=_>0?u.red:_<0?u.green:"";a.push([`\u4E70${g}`,`${b}${p}${u.reset}`,B(h)])}let{table:i,w:c}=f(["\u5356\u65B9","\u4EF7\u683C","\u6570\u91CF"],[8,12,12],{1:12,2:12});for(let g=1;g<=5;g++){let p=t[`sp${g}`],h=t[`sc${g}`];if(p==null)break;let _=p-r,b=_>0?u.red:_<0?u.green:"";i.push([`\u5356${g}`,`${b}${p}${u.reset}`,B(h)])}console.log(a.toString()),console.log(i.toString());let{table:l,w:m}=f(["\u6700\u65B0\u4EF7","\u4E70\u76D8\u5360\u6BD4","\u5356\u76D8\u5360\u6BD4","\u4E70\u5356\u6BD4"],[1,1,1,1]);l.push([e,`${t.buypct??"-"}%`,`${t.sellpct??"-"}%`,`${t.ratio??"-"}`]),console.log(l.toString())}function vo(o,t){return{code:o,preclose:Number(t.preclose_px||0),asks:[5,4,3,2,1].map(e=>({price:Number(t[`s_px_${e}`]||0),volume:Number(t[`s_amount_${e}`]||0)})),bids:[1,2,3,4,5].map(e=>({price:Number(t[`b_px_${e}`]||0),volume:Number(t[`b_amount_${e}`]||0)})),source:"cls"}}function No(o,t){let e=t.current??0,n=t.percent??0,r=n!==0?e/(1+n/100):0;return{code:o,current:e,preclose:r,asks:[1,2,3,4,5].map(a=>({price:Number(t[`sp${a}`]||0),volume:Number(t[`sc${a}`]||0)})),bids:[5,4,3,2,1].map(a=>({price:Number(t[`bp${a}`]||0),volume:Number(t[`bc${a}`]||0)})),buyPercent:t.buypct??null,sellPercent:t.sellpct??null,buySellRatio:t.ratio??null,source:"xq"}}function Oo(o){let t=o?.data?.volume||[],e=o?.data?.end;if(!t.length)return console.log("\u6682\u65E0\u6210\u4EA4");let{table:n}=f(["\u65F6\u95F4","\u4EF7\u683C","\u624B\u6570","\u65B9\u5411"],[12,10,8,8],{0:12,1:12,2:8});for(let r of t){let a=String(r.minute),s=`${a.slice(0,2)}:${a.slice(2,4)}:${a.slice(4,6)}`,i=r.change_vol_color===1?`${u.red}\u4E70${u.reset}`:`${u.green}\u5356${u.reset}`;n.push([s,r.last_px,r.change_vol,i])}console.log(n.toString()),console.log(`${u.dim}\u5171 ${e} \u7B14${u.reset}`)}function qo(o){let t=o?.data?.items||[];if(!Array.isArray(t)||!t.length)return console.log("\u6682\u65E0\u6570\u636E");let{table:e}=f(["\u65F6\u95F4","\u4EF7\u683C","\u6570\u91CF","\u65B9\u5411"],[14,10,12,8],{0:14});for(let n of t.slice(0,50)){let r=new Date(n.timestamp),a=`${String(r.getHours()).padStart(2,"0")}:${String(r.getMinutes()).padStart(2,"0")}:${String(r.getSeconds()).padStart(2,"0")}`,s=n.side==="buy"||n.side===1?`${u.red}\u4E70${u.reset}`:n.side==="sell"||n.side===0?`${u.green}\u5356${u.reset}`:"-";e.push([a,n.current??n.price??"-",n.trade_volume??n.volume?B(n.trade_volume??n.volume):"-",s])}console.log(e.toString())}function jo(o,t){let e=t?.data?.volume||[],n=t?.data?.end||e.length;return{code:o,items:e.map(r=>{let a=String(r.minute),s=a.length<=3?"0"+a[0]:a.slice(0,2),i=a.length<=3?a.slice(1):a.slice(2),c=a.slice(-2);return{time:`${s}:${i}:${c}`,price:Number(r.last_px||0),volume:Number(r.change_vol||0),side:r.change_vol_color===1?"buy":"sell"}}),total:n}}function Co(o,t){let e=t?.data?.items||[];return{code:o,items:e.slice(0,50).map(n=>({time:new Date(n.timestamp).toISOString(),price:Number(n.current||n.price||0),volume:Number(n.trade_volume||n.volume||0),side:n.side==="buy"||n.side===1?"buy":"sell"})),total:e.length}}function To(o){let t=o?.data||{},e=t.line||[];if(!e.length)return console.log("\u6682\u65E0\u6570\u636E");let n=t.preclose_px,r=s=>{let i=((s-n)/n*100).toFixed(2);return`${i>0?u.red:i<0?u.green:""}${i>0?"+":""}${i}%${u.reset}`},{table:a}=f(["\u65F6\u95F4","\u4EF7\u683C","\u5747\u4EF7","\u6DA8\u8DCC%","\u6210\u4EA4\u989D"],[8,10,10,10,14],{0:10});for(let s of e){let i=String(s.minute),c=i.length<=3?"0"+i[0]:i.slice(0,2),l=i.length<=3?i.slice(1):i.slice(2),m=`${c}:${l}`;a.push([m,s.last_px,s.av_px?s.av_px.toFixed(2):"-",r(s.last_px),w(s.business_balance)])}console.log(a.toString()),console.log(`\u6628\u6536: ${n}`)}function Fo(o){let t=o?.data?.items||[];if(!Array.isArray(t)||!t.length)return console.log("\u6682\u65E0\u6570\u636E");let{table:e}=f(["\u65F6\u95F4","\u4EF7\u683C","\u6210\u4EA4\u91CF","\u5747\u4EF7"],[14,10,14,10],{0:14});for(let n of t.slice(0,240)){let r=new Date(n.timestamp),a=`${String(r.getHours()).padStart(2,"0")}:${String(r.getMinutes()).padStart(2,"0")}:${String(r.getSeconds()).padStart(2,"0")}`,s=n.volume?n.volume>=1e8?(n.volume/1e8).toFixed(2)+"\u4EBF":n.volume>=1e4?(n.volume/1e4).toFixed(2)+"\u4E07":String(n.volume):"-";e.push([a,n.current??"-",s,n.avg_price??"-"])}console.log(e.toString())}function Jo(o,t){let e=t?.data||{},n=e.line||[],r=Number(e.preclose_px||0);return{code:o,preclose:r,items:n.map(a=>{let s=String(a.minute),i=s.length<=3?"0"+s[0]:s.slice(0,2),c=s.length<=3?s.slice(1):s.slice(2),l=Number(a.last_px||0);return{time:`${i}:${c}`,price:l,avgPrice:Number(a.av_px||0),changePercent:r>0?(l-r)/r*100:0,amount:Number(a.business_balance||0)}}),total:n.length}}function Ro(o,t){let e=t?.data?.items||[];return{code:o,items:e.slice(0,240).map(n=>({time:new Date(n.timestamp).toISOString(),price:Number(n.current||0),volume:Number(n.volume||0),avgPrice:Number(n.avg_price||0)})),total:e.length}}function an(o,t){let e=Array.isArray(o?.data)?o.data:[];if(!e.length)return console.log("\u6682\u65E0\u6570\u636E");let{table:n}=f(["\u677F\u5757","\u6DA8\u8DCC\u5E45"],[65,20],{1:12});for(let r of e.slice(0,t))n.push([r.plate_name||r.secu_name||"",q((r.change??0)*100)]);console.log(n.toString())}function sn(o){let t=Array.isArray(o?.data)?o.data:[];if(!t.length)return console.log("\u6682\u65E0\u6570\u636E");let{table:e}=f(["\u677F\u5757","\u6DA8\u8DCC\u5E45","\u9886\u6DA8\u80A1"],[12,10,60],{0:12,1:12});for(let n of t){let r=(n.up_stock||[]).slice(0,3).map(a=>`${a.secu_name.trim()} ${q((a.change??0)*100)}`).join(" ");e.push([n.secu_name,q((n.change??0)*100),r])}console.log(e.toString())}function Do(o){let t=o?.data||{},e=t.company||{};if(!e.org_name_cn&&!t.concept?.length)return console.log("\u6682\u65E0\u6570\u636E");console.log(`${u.bold}${e.org_name_cn||"-"}${u.reset}`);let n=[["\u6240\u5C5E\u884C\u4E1A",(t.industry||[]).map(a=>a.ind_name).join(", ")||"-"],["\u6982\u5FF5\u677F\u5757",(t.concept||[]).map(a=>a.ind_name).join(", ")||"-"],["\u4F01\u4E1A\u6027\u8D28",e.classi_name||"-"],["\u6240\u5728\u5730\u533A",e.provincial_name||"-"],["\u4E0A\u5E02\u65E5\u671F",e.listed_date?new Date(e.listed_date).toLocaleDateString("zh-CN"):"-"],["\u5B9E\u9645\u63A7\u5236\u4EBA",e.actual_controller||"-"],["\u4E3B\u8425\u4E1A\u52A1",e.main_operation_business||"-"]],{table:r}=f(["\u9879\u76EE","\u5185\u5BB9"],[14,1],{0:14});for(let[a,s]of n)r.push([a,s]);console.log(r.toString())}function cn(o,t){return{type:t,items:o.map(e=>({name:e.plate_name||e.secu_name||"",changePercent:Math.round((e.change||0)*100*100)/100})),total:o.length}}function ln(o){return{items:o.map(t=>({name:t.secu_name||"",changePercent:Math.round((t.change||0)*100*100)/100,topStocks:(t.up_stock||[]).slice(0,3).map(e=>({name:e.secu_name?.trim()||"",changePercent:Math.round((e.change||0)*100*100)/100}))})),total:o.length}}function Lo(o){let t=o?.data||{},e=t.company||{};return{name:e.org_name_cn||"",industry:(t.industry||[]).map(n=>n.ind_name),concept:(t.concept||[]).map(n=>n.ind_name),companyType:e.classi_name||"",region:e.provincial_name||"",listedDate:e.listed_date||"",controller:e.actual_controller||"",mainBusiness:e.main_operation_business||""}}function Eo(o){let t=o?.data||{};if(!t.main_fund_in)return console.log("\u6682\u65E0\u6570\u636E");let{table:e}=f(["\u4E3B\u529B\u6D41\u5165","\u4E3B\u529B\u6D41\u51FA","\u51C0\u6D41\u5165","\u51C0\u6D41\u5165\u5360\u6BD4"],[1,1,1,1]),n=t.main_fund_in+t.main_fund_out,r=n>0?(t.main_fund_diff/n*100).toFixed(2)+"%":"-",a=t.main_fund_diff>0?u.red:u.green;e.push([w(t.main_fund_in),w(t.main_fund_out),`${a}${w(t.main_fund_diff)}${u.reset}`,r]),console.log(e.toString());let{table:s}=f(["\u8D85\u5927\u5355","\u5927\u5355","\u4E2D\u5355","\u5C0F\u5355"],[1,1,1,1]),i=l=>l>0?`${u.red}+${w(l)}${u.reset}`:`${u.green}${w(l)}${u.reset}`;s.push([i(t.super_fund_diff),i(t.large_fund_diff),i(t.medium_fund_diff),i(t.little_fund_diff)]),console.log(s.toString());let{table:c}=f(["3\u65E5\u51C0\u6D41\u5165","5\u65E5\u51C0\u6D41\u5165","10\u65E5\u51C0\u6D41\u5165","20\u65E5\u51C0\u6D41\u5165"],[1,1,1,1]);c.push([i(t.main_fund_3),i(t.main_fund_5),i(t.main_fund_10),i(t.main_fund_20)]),console.log(c.toString())}function Lt(o){let t=o?.data||{},e=t.items||[];if(!Array.isArray(e)||!e.length)return console.log("\u6682\u65E0\u6570\u636E");let{table:n,w:r}=f(["\u65F6\u95F4","\u51C0\u6D41\u5165"],[16,16],{0:16});for(let a of e.slice(-20)){let s=a.timestamp?new Date(a.timestamp).toLocaleString("zh-CN",{month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"}):"-";x(n,[s,R(a.amount??"-")],r)}if(console.log(n.toString()),t.sum3!=null){let{table:a}=f(["3\u65E5\u51C0\u6D41\u5165","5\u65E5\u51C0\u6D41\u5165","10\u65E5\u51C0\u6D41\u5165","20\u65E5\u51C0\u6D41\u5165"],[1,1,1,1]);x(a,[R(t.sum3),R(t.sum5),R(t.sum10),R(t.sum20)]),console.log(a.toString())}}function Po(o){let t=o?.data?.items||[];if(!Array.isArray(t)||!t.length)return console.log("\u6682\u65E0\u6570\u636E");let{table:e,w:n}=f(["\u65E5\u671F","\u878D\u8D44\u4F59\u989D","\u878D\u5238\u4F59\u989D","\u878D\u8D44\u51C0\u4E70\u5165","\u878D\u8D44\u4E70\u5165\u989D"],[14,14,14,14,14],{0:14});for(let r of t.slice(0,20)){let a=r.td_date?new Date(r.td_date).toLocaleDateString("zh-CN"):"-";x(e,[a,w(r.margin_trading_amt_balance),w(r.short_selling_amt_balance),R(r.margin_trading_net_buy_amt),w(r.margin_trading_buy_amt)],n)}console.log(e.toString())}function Ho(o){let t=o?.data||{};return{mainInflow:Number(t.main_fund_in||0),mainOutflow:Number(t.main_fund_out||0),mainNet:Number(t.main_fund_diff||0),superNet:Number(t.super_fund_diff||0),largeNet:Number(t.large_fund_diff||0),mediumNet:Number(t.medium_fund_diff||0),smallNet:Number(t.little_fund_diff||0),mainNet3d:t.main_fund_3!=null?Number(t.main_fund_3):null,mainNet5d:t.main_fund_5!=null?Number(t.main_fund_5):null,mainNet10d:t.main_fund_10!=null?Number(t.main_fund_10):null,mainNet20d:t.main_fund_20!=null?Number(t.main_fund_20):null,source:"cls"}}function un(o){let t=o?.data||{},e=t.items||[];return{items:e.map(n=>({time:n.timestamp?new Date(n.timestamp).toISOString():"",amount:Number(n.amount||0)})),total:e.length,summary:t.sum3!=null?{sum3:Number(t.sum3),sum5:Number(t.sum5),sum10:Number(t.sum10),sum20:Number(t.sum20)}:null}}function Io(o){let t=o?.data?.items||[];return{items:t.map(e=>({date:e.td_date?new Date(e.td_date).toISOString().slice(0,10):"",marginBalance:Number(e.margin_trading_amt_balance||0),shortBalance:Number(e.short_selling_amt_balance||0),marginNetBuy:Number(e.margin_trading_net_buy_amt||0),marginBuy:Number(e.margin_trading_buy_amt||0)})),total:t.length}}function Go(o){let t=o?.data?.items||o?.data||[];if(!Array.isArray(t)||!t.length)return console.log("\u6682\u65E0\u6570\u636E");let{table:e,w:n}=f(["#","\u80A1\u4E1C\u540D\u79F0","\u6301\u80A1\u6570","\u5360\u6BD4","\u53D8\u5316"],[4,30,14,10,12]);for(let r=0;r<t.length;r++){let a=t[r],s=a.chg_amount??a.change??"-",i=typeof s=="number"?s>0?`${u.red}+${s}${u.reset}`:s===0?"\u4E0D\u53D8":`${u.green}${s}${u.reset}`:String(s);x(e,[`${r+1}`,a.holder_name||"-",w(a.held_num),a.held_ratio?a.held_ratio.toFixed(2)+"%":"-",i],n)}console.log(e.toString())}function Mo(o){let e=(o?.data||{}).items||[];if(!Array.isArray(e)||!e.length)return console.log("\u6682\u65E0\u6570\u636E");let{table:n,w:r}=f(["\u62A5\u544A\u671F","\u9664\u6743\u9664\u606F\u65E5","\u80A1\u6743\u767B\u8BB0\u65E5","\u65B9\u6848"],[14,14,14,4],{0:14});for(let a of e.slice(0,15)){let s=a.ashare_ex_dividend_date?new Date(a.ashare_ex_dividend_date).toLocaleDateString("zh-CN"):"-",i=a.equity_date?new Date(a.equity_date).toLocaleDateString("zh-CN"):"-";x(n,[a.dividend_year||"-",s,i,a.plan_explain||"-"],r)}console.log(n.toString())}function Bo(o){let t=o?.data?.items||o?.data||[];if(!Array.isArray(t)||!t.length)return console.log("\u6682\u65E0\u6570\u636E");let{table:e,w:n}=f(["\u65F6\u95F4","\u7C7B\u578B","\u6807\u9898"],[16,8,1],{0:16,1:8});for(let r of t.slice(0,20)){let a=r.begin?new Date(r.begin).toLocaleDateString("zh-CN"):"-";x(e,[a,r.cal_title||"-",r.content||"-"],n)}console.log(e.toString())}function Uo(o){let t=o?.data?.items||o?.data||[];return{items:t.map((e,n)=>({rank:n+1,holderName:e.holder_name||"",shares:Number(e.held_num||0),ratio:Number(e.held_ratio||0),change:e.chg_amount??e.change??null})),total:t.length}}function zo(o){let t=o?.data?.items||o?.data||[];return Array.isArray(t)?{items:t.map(e=>({period:e.dividend_year||"",exDividendDate:e.ashare_ex_dividend_date?new Date(e.ashare_ex_dividend_date).toISOString().slice(0,10):"",equityDate:e.equity_date?new Date(e.equity_date).toISOString().slice(0,10):"",plan:e.plan_explain||""})),total:t.length}:{items:[],total:0}}function Ko(o){let t=o?.data?.items||o?.data||[];return Array.isArray(t)?{items:t.map(e=>({date:e.begin?new Date(e.begin).toISOString().slice(0,10):"",title:e.content||""})),total:t.length}:{items:[],total:0}}function T(o){return Array.isArray(o)?o[0]:o}function mn(o){let t=o?.data||{},e=t.list||[];if(!Array.isArray(e)||!e.length)return console.log("\u6682\u65E0\u6570\u636E");let n=t.quote_name||"-";console.log(`${u.bold}${n} \u4E3B\u8981\u6307\u6807${u.reset}`);let{table:r,w:a}=f(["\u62A5\u544A\u671F","ROE","\u6BCF\u80A1\u6536\u76CA","\u6BDB\u5229\u7387","\u8425\u6536\u540C\u6BD4\u589E\u957F"],[14,10,10,10,12],{0:14});for(let s of e){let i=s.report_name||"-",c=T(s.avg_roe),l=T(s.basic_eps),m=T(s.gross_selling_rate),g=T(s.operating_income_yoy);x(r,[i,c!=null?c.toFixed(2)+"%":"-",l!=null?String(l):"-",m!=null?m.toFixed(2)+"%":"-",g!=null?g.toFixed(2)+"%":"-"],a)}console.log(r.toString())}function Wo(o,t){let e=o?.data||{},n=e.list||[];if(!Array.isArray(n)||!n.length)return console.log("\u6682\u65E0\u6570\u636E");let r=e.quote_name||"-",a={cashflow:["\u62A5\u544A\u671F","\u7ECF\u8425\u73B0\u91D1\u6D41","\u6295\u8D44\u73B0\u91D1\u6D41","\u7B79\u8D44\u73B0\u91D1\u6D41","\u73B0\u91D1\u51C0\u589E\u52A0\u989D"],income:["\u62A5\u544A\u671F","\u8425\u4E1A\u6536\u5165","\u51C0\u5229\u6DA6","\u5F52\u6BCD\u51C0\u5229\u6DA6","\u6263\u975E\u51C0\u5229\u6DA6"],balance:["\u62A5\u544A\u671F","\u603B\u8D44\u4EA7","\u603B\u8D1F\u503A","\u8D44\u4EA7\u8D1F\u503A\u7387","\u51C0\u8D44\u4EA7"]},s={cashflow:["report_name","ncf_from_oa","ncf_from_ia","ncf_from_fa","net_increase_in_cce"],income:["report_name","total_revenue","net_profit","net_profit_atsopc","net_profit_after_nrgal_atsolc"],balance:["report_name","total_assets","total_liab","asset_liab_ratio","total_quity_atsopc"]},i=a[t]||a.cashflow,c=s[t]||s.cashflow,{table:l,w:m}=f(i,[14,1,1,1,1],{0:14});for(let g of n){let p=[g.report_name||"-"];for(let h=1;h<c.length;h++){let _=g[c[h]],b=T(_);b==null?p.push("-"):c[h]==="asset_liab_ratio"?p.push(b.toFixed(2)+"%"):p.push(w(b))}x(l,p,m)}console.log(`${u.bold}${r} ${t==="cashflow"?"\u73B0\u91D1\u6D41\u91CF\u8868":t==="income"?"\u5229\u6DA6\u8868":"\u8D44\u4EA7\u8D1F\u503A\u8868"}${u.reset}`),console.log(l.toString())}function dn(o){let t=o?.data||{},e=t.list||[];return{name:t.quote_name||"",items:e.map(n=>({report:n.report_name||"",roe:T(n.avg_roe),eps:T(n.basic_eps),grossMargin:T(n.gross_selling_rate),revenueYoy:T(n.operating_income_yoy)})),total:e.length}}function Vo(o,t){let e=o?.data||{},n=e.list||[],r={cashflow:["report_name","ncf_from_oa","ncf_from_ia","ncf_from_fa","net_increase_in_cce"],income:["report_name","total_revenue","net_profit","net_profit_atsopc","net_profit_after_nrgal_atsolc"],balance:["report_name","total_assets","total_liab","asset_liab_ratio","total_quity_atsopc"]},a={cashflow:["report","operating","investing","financing","netIncrease"],income:["report","revenue","netProfit","netProfitAttrib","netProfitDeducted"],balance:["report","totalAssets","totalLiab","debtRatio","equity"]},s=r[t]||r.cashflow,i=a[t]||a.cashflow;return{name:e.quote_name||"",type:t,items:n.map(c=>{let l={report:c.report_name||""};for(let m=1;m<s.length;m++)l[i[m]]=T(c[s[m]]);return l}),total:n.length}}function Qo(o){let t=o?.data||o?.list||[];if(!Array.isArray(t)||!t.length)return console.log("\u672A\u627E\u5230\u7ED3\u679C");let{table:e,w:n}=f(["\u4EE3\u7801","\u540D\u79F0","\u7C7B\u578B"],[14,20,10],{0:14});for(let r of t){let a=r.code||r.symbol||"-",s=r.query||r.name||r.cn_name||"-",i=r.type===1?"\u80A1\u7968":r.type===2?"\u57FA\u91D1":r.type===3?"\u6307\u6570":String(r.type??"-");x(e,[a,s,i],n)}console.log(e.toString())}function Xo(o){let t=o?.data||o?.list||[],e={1:"stock",2:"fund",3:"index"};return{items:t.map(n=>({code:n.code||n.symbol||"",name:n.query||n.name||n.cn_name||"",type:n.type?e[n.type]||String(n.type):""})),total:t.length}}function Yo(o){let e=(o?.data||{}).items||[];return{items:e.map(n=>({time:n.timestamp?new Date(n.timestamp).toISOString():"",amount:Number(n.amount||0)})),total:e.length}}function pn(o){return o.command({command:"quote [code]",describe:"\u8BC1\u5238\u884C\u60C5",builder:t=>t.positional("code",{type:"string",describe:"\u8BC1\u5238\u4EE3\u7801"}).strictCommands(!1).command("batch <codes...>","\u6279\u91CF\u884C\u60C5\uFF08xueqiu\uFF09",e=>e,async e=>{let{f:n}=e,r=e.codes,a=r.map(c=>{let l=c.toUpperCase();return l.startsWith("SH")||l.startsWith("SZ")?l:/^\d{6}$/.test(c)?c.startsWith("6")?"SH"+c:"SZ"+c:l}),s,i;try{s=await nt(a),i=s?.data?.items||[],i.length&&i[0]?.quote&&(i=i.map(c=>({...c.quote,market:c.market})))}catch{s=await ke(a),i=s?.data||s?.items||[]}d({data:i,format:n,command:`quote batch ${r.join(" ")}`,source:"xq",toJSON:()=>bo(i),printFn:go})}).command("related <code>","\u5173\u8054\u80A1\u7968\uFF08xueqiu\uFF09",e=>e,async e=>{let{f:n}=e,r=e.code,s=await qe(r),i=s?.data?.items||s?.data||[];d({data:s,format:n,command:`quote related ${r}`,source:"xq",toJSON:()=>({items:i.map(c=>({code:c.symbol||"",name:c.name||"",price:c.current??0,changePercent:c.percent??0,relation:c.relation||""}))}),printFn:ho})}).command("search <keyword>","\u641C\u7D22\u80A1\u7968",e=>e,async e=>{let{f:n}=e,r=e.keyword,a=await Ce(r);d({data:a,format:n,command:`quote search ${r}`,source:"xq",toJSON:Xo,printFn:Qo})}).command("kline [code]","K\u7EBF",e=>e.positional("code",{type:"string"}).option("period",{alias:"p",type:"string",default:"d"}).option("number",{alias:"n",type:"number",default:120}).option("src",{type:"string",choices:["cls","xq"]}),async e=>{let{f:n,p:r="d",n:a=120,src:s}=e,i=e.code;if(s==="xq"||!s&&_o.has(r)){let l=i,m=await ve(l,{period:r,count:a}),g=m?.data?.item||m?.data||[];d({data:m,format:n,command:`quote kline ${i} -p ${r}`,source:"xq",toJSON:()=>Ao(l,r,g),printFn:So})}else{let l=r==="w"?"w":r==="m"?"m":r==="y"?"y":r==="5d"?"5d":"d",m=[],g,p=0,h=50;for(;m.length<a&&p++<h;){let b=await te(i,{period:l,limit:Math.min(a-m.length,200),start_date:g});if(n==="raw")return Q(b,!0);let $=b?.data||[];if(!$.length)break;m=[...$,...m],g=String($[0].trade_date)}let _=m.slice(-a);d({data:_,format:n,command:`quote kline ${i} -p ${r}`,source:"cls",toJSON:b=>xo(i,l,b),printFn:wo,printArgs:[l]})}}).command("depth [code]","\u4E94\u6863\u76D8\u53E3",e=>e.positional("code",{type:"string"}).option("src",{type:"string",choices:["cls","xq"],default:"cls"}),async e=>{let{f:n,src:r="cls"}=e,a=e.code;if(r==="xq"){let s=a,i=await $e(s);d({data:i,format:n,command:`quote depth ${a} --src xq`,source:"xq",toJSON:c=>No(s,c?.data||{}),printFn:$o})}else{let s=await Xt(a);d({data:s,format:n,command:`quote depth ${a}`,source:"cls",toJSON:i=>vo(a,i?.data||{}),printFn:ko})}}).command("ticks [code]","\u9010\u7B14\u6210\u4EA4",e=>e.positional("code",{type:"string"}).option("src",{type:"string",choices:["cls","xq"],default:"cls"}),async e=>{let{f:n,src:r="cls"}=e,a=e.code;if(r==="xq"){let s=a,i=await Oe(s);d({data:i,format:n,command:`quote ticks ${a} --src xq`,source:"xq",toJSON:c=>Co(s,c),printFn:qo})}else{let s=await Yt(a);d({data:s,format:n,command:`quote ticks ${a}`,source:"cls",toJSON:i=>jo(a,i),printFn:Oo})}}).command("timeline [code]","\u5206\u65F6\u7EBF",e=>e.positional("code",{type:"string"}).option("src",{type:"string",choices:["cls","xq"],default:"cls"}),async e=>{let{f:n,src:r="cls"}=e,a=e.code;if(r==="xq"){let s=a,i=await Ne(s,{period:"1d"});d({data:i,format:n,command:`quote timeline ${a} --src xq`,source:"xq",toJSON:c=>Ro(s,c),printFn:Fo})}else{let s=await Zt(a);d({data:s,format:n,command:`quote timeline ${a}`,source:"cls",toJSON:i=>Jo(a,i),printFn:To})}}).command("sector [code]","\u677F\u5757",e=>e.positional("code",{type:"string"}).strictCommands(!1).command("rank","\u677F\u5757\u6392\u884C",n=>n.option("type",{alias:"t",type:"string",default:"industry"}),async n=>{let{f:r,n:a=10,t:s="industry"}=n,i=await dt({type:s}),c=Array.isArray(i?.data)?i.data:[];d({data:i,format:r,command:`quote sector rank -t ${s}`,source:"cls",toJSON:()=>cn(c,s),printFn:an,printArgs:[a]})}).command("plate <code>","\u4E2A\u80A1\u677F\u5757",n=>n,async n=>{let{f:r}=n,a=n.code,s=await pt(a),i=Array.isArray(s?.data)?s.data:[];d({data:s,format:r,command:`quote sector plate ${a}`,source:"cls",toJSON:()=>ln(i),printFn:sn})}).command("industry <code>","\u884C\u4E1A\u4FE1\u606F",n=>n,async n=>{let{f:r}=n,a=n.code,s=a.length<=6?a.toUpperCase().startsWith("SH")||a.toUpperCase().startsWith("SZ")?a:a.toUpperCase():a,i=await Ee(s);d({data:i,format:r,command:`quote sector industry ${a}`,source:"xq",toJSON:Lo,printFn:Do})}),async e=>{let{code:n,f:r,n:a=10}=e;if(n){let s=await pt(n),i=Array.isArray(s?.data)?s.data:[];d({data:s,format:r,command:`quote sector ${n}`,source:"cls",toJSON:()=>ln(i),printFn:sn})}else{let s=await dt({type:"industry"}),i=Array.isArray(s?.data)?s.data:[];d({data:s,format:r,command:"quote sector",source:"cls",toJSON:()=>cn(i,"industry"),printFn:an,printArgs:[a]})}}).command("flow [code]","\u8D44\u91D1\u6D41\u5411",e=>e.positional("code",{type:"string"}).strictCommands(!1).command("market","\u5317\u5411/\u5357\u5411\u8D44\u91D1",n=>n,async n=>{let{f:r}=n,a=await z();d({data:a,format:r,command:"quote flow market",source:"glh",toJSON:V,printFn:W})}).command("history <code>","\u5386\u53F2\u8D44\u91D1\u6D41",n=>n.option("count",{alias:"c",type:"number",default:20}),async n=>{let{f:r,c:a=20}=n,s=n.code,i=await He(s,{count:a});d({data:i,format:r,command:`quote flow history ${s}`,source:"xq",toJSON:un,printFn:Lt})}).command("margin <code>","\u878D\u8D44\u878D\u5238",n=>n,async n=>{let{f:r}=n,a=n.code,s=await Ie(a);d({data:s,format:r,command:`quote flow margin ${a}`,source:"xq",toJSON:Io,printFn:Po})}).command("intraday <code>","\u5F53\u65E5\u8D44\u91D1\u6D41\u5411\uFF08xueqiu\uFF09",n=>n,async n=>{let{f:r}=n,a=n.code,i=await kt(a);d({data:i,format:r,command:`quote flow intraday ${a}`,source:"xq",toJSON:un,printFn:Lt})}).command("xq <code>","\u96EA\u7403\u8D44\u91D1\u6D41",n=>n,async n=>{let{f:r}=n,a=n.code,i=await kt(a);d({data:i,format:r,command:`quote flow xq ${a}`,source:"xq",toJSON:Yo,printFn:Lt})}),async e=>{let{code:n,f:r}=e;if(n){let a=await ee(n);d({data:a,format:r,command:`quote flow ${n}`,source:"cls",toJSON:Ho,printFn:Eo})}else{let a=await z();d({data:a,format:r,command:"quote flow market",source:"glh",toJSON:V,printFn:W})}}).command("f10 [code]","\u57FA\u672C\u9762",e=>e.positional("code",{type:"string"}).strictCommands(!1).command("holders <code>","\u5341\u5927\u80A1\u4E1C",n=>n,async n=>{let{f:r}=n,a=n.code,s=await De(a);d({data:s,format:r,command:`quote f10 holders ${a}`,source:"xq",toJSON:Uo,printFn:Go})}).command("bonus <code>","\u5206\u7EA2\u9001\u80A1",n=>n,async n=>{let{f:r}=n,a=n.code,s=await Pe(a);d({data:s,format:r,command:`quote f10 bonus ${a}`,source:"xq",toJSON:zo,printFn:Mo})}).command("event <code>","\u516C\u53F8\u5927\u4E8B",n=>n,async n=>{let{f:r}=n,a=n.code,s=await je(a);d({data:s,format:r,command:`quote f10 event ${a}`,source:"xq",toJSON:Ko,printFn:Bo})}).command("indicator <code>","\u4E3B\u8981\u6307\u6807",n=>n,async n=>{let{f:r}=n,a=n.code,s=await Le(a);d({data:s,format:r,command:`quote f10 indicator ${a}`,source:"xq",toJSON:dn,printFn:mn})})).command("finance [code]","\u8D22\u52A1\u62A5\u8868",e=>e.positional("code",{type:"string"}).option("type",{alias:"t",type:"string",choices:["indicator","cashflow","income","balance"],default:"indicator"}),async e=>{let{f:n,t:r="indicator"}=e,a=e.code;if(r==="indicator"){let s=await Te(a);d({data:s,format:n,command:`quote finance indicator ${a}`,source:"xq",toJSON:dn,printFn:mn})}else{let i={cashflow:Fe,income:Je,balance:Re}[r];if(!i)return console.log(`\u672A\u77E5\u7C7B\u578B: ${r}`);let c=await i(a);d({data:c,format:n,command:`quote finance ${r} ${a}`,source:"xq",toJSON:l=>Vo(l,r),printFn:Wo,printArgs:[r]})}}),handler:async t=>{let{f:e}=t,n=t.code;if(!n){console.log("\u8BF7\u63D0\u4F9B\u8BC1\u5238\u4EE3\u7801\uFF0C\u4F8B\u5982: finflow quote sh600519"),console.log("\u8FD0\u884C finflow quote --help \u67E5\u770B\u6240\u6709\u5B50\u547D\u4EE4");return}if(n){if(["search","batch","related","kline","depth","ticks","timeline","sector","flow","f10","finance"].includes(n)){console.log(`\u8BF7\u63D0\u4F9B\u5B50\u547D\u4EE4\u53C2\u6570\uFF0C\u4F8B\u5982: finflow quote ${n} <code>`);return}let a=await Qt(n);d({data:a,format:e,command:`quote ${n}`,source:"cls",toJSON:yo,printFn:fo})}}})}function Zo(o){let t=o?.data||{};if(!t.market_degree)return console.log("\u6682\u65E0\u6570\u636E\uFF08\u975E\u4EA4\u6613\u65F6\u6BB5\uFF09");let{table:e}=f(["\u5E02\u573A\u70ED\u5EA6","\u6DA8\u505C","\u5F00\u677F","\u5C01\u677F\u7387","\u6210\u4EA4\u989D","\u8F83\u4E0A\u65E5"],[8,8,8,8,14,14]);e.push([t.market_degree,t.up_ratio_num,t.up_open_num,t.up_ratio,t.shsz_balance,t.shsz_balance_change_px]),console.log(e.toString());let n=t.limit_up_board;if(n){let{table:s}=f(["\u8FDE\u677F","\u4E00\u677F","\u4E8C\u677F","\u4E09\u677F","\u9AD8\u5EA6\u677F"],[8,8,8,8,10]),i=n.row2||[],c=n.row3||[];s.push(["\u6570\u91CF",i[0]||"-",i[1]||"-",i[2]||"-",i[3]||"-"]),s.push(["\u664B\u7EA7\u7387",c[1]||"-",c[2]||"-",c[3]||"-",""]),console.log(s.toString())}let{table:r}=f(["\u6628\u65E5\u6DA8\u505C\u8868\u73B0","\u9AD8\u5F00\u7387","\u83B7\u5229\u7387"],[20,12,12]);r.push([t.performance,t.up_open_ratio,t.profit_ratio]),console.log(r.toString());let a=t.up_down_dis;if(a&&a.status){let{table:s}=f(["\u6DA8\u505C","\u8DCC\u505C","\u4E0A\u6DA8","\u4E0B\u8DCC","\u5E73\u76D8","\u505C\u724C"],[8,8,8,8,8,8]);s.push([a.up_num,a.down_num,a.rise_num,a.fall_num,a.flat_num,a.suspend_num]),console.log(s.toString())}}function tr(o,t){let e=o?.data,n=Array.isArray(e)?e:e?.data||[];if(!n.length)return console.log("\u6682\u65E0\u6570\u636E");let{table:r}=f(["\u540D\u79F0","\u4EE3\u7801","\u6DA8\u8DCC\u989D","\u6DA8\u8DCC\u5E45"],[40,20,15,15],{1:12,2:12,3:18});for(let a of n.slice(0,t))r.push([a.secu_name||"",a.secu_code||"",String(a.change_px??a.last_px??"-"),q(a.change)]);console.log(r.toString())}function fn(o){let t=o.result||[],e=t.filter(a=>a.category==="\u6307\u6570"),n=t.filter(a=>a.category==="\u6CAA\u6E2F\u6DF1\u901A"),{table:r}=f(["\u6307\u6570","\u6700\u65B0\u4EF7","\u6DA8\u8DCC\u989D","\u6DA8\u8DCC\u5E45"],[3,2,2,2]);for(let a of e)r.push([a.name,a.value?.toFixed(3)??"-",a.change?.toFixed(2)??"-",q(a.netChange)]);console.log(r.toString()),console.log();for(let a of n){let s=a.sh!=null?w(a.sh):"-",i=a.sz!=null?w(a.sz):"-";console.log(u.bold+a.name+u.reset+` \u6CAA: ${s} \u6DF1: ${i}`)}}function er(o,t){let e=(o.result||[]).slice(0,t),{table:n}=f(["\u540D\u79F0","\u4EE3\u7801","\u6700\u65B0\u4EF7","\u6DA8\u8DCC\u5E45"],[3,2,2,2]);for(let r of e)n.push([r.stockName,r.stockType+r.stockCode,r.currentPrice?.toFixed(3)??"-",q(r.netChange)]);console.log(n.toString())}function nr(o){let t=o?.data||{},e=t.limit_up_board||{},n=t.up_down_dis||{};return{marketDegree:t.market_degree||0,limitUp:Number(t.up_ratio_num||0),limitOpen:Number(t.up_open_num||0),sealRate:parseFloat(t.up_ratio)||0,turnover:t.shsz_balance||"",turnoverChange:t.shsz_balance_change_px||"",limitUpBoard:e.row2?{total:e.row2[0]||0,first:e.row2[1]||0,second:e.row2[2]||0,third:e.row2[3]||0,promoteRate:e.row3?{first:e.row3[1]||"",second:e.row3[2]||"",third:e.row3[3]||""}:{}}:null,prevPerformance:t.performance||"",gapUpRate:t.up_open_ratio||"",profitRate:t.profit_ratio||"",distribution:n.status?{limitUp:Number(n.up_num||0),limitDown:Number(n.down_num||0),rise:Number(n.rise_num||0),fall:Number(n.fall_num||0),flat:Number(n.flat_num||0),suspend:Number(n.suspend_num||0)}:null,source:"cls"}}function gn(o){let t=o.result||[],e=t.filter(r=>r.category==="\u6307\u6570"),n=t.filter(r=>r.category==="\u6CAA\u6E2F\u6DF1\u901A");return{indices:e.map(r=>({name:r.name,value:Number(r.value||0),change:Number(r.change||0),changePercent:Number(r.netChange||0)})),capitalFlow:n.map(r=>({name:r.name,shanghai:r.sh??null,shenzhen:r.sz??null})),source:"glh"}}function or(o){let t=o?.data,e=Array.isArray(t)?t:t?.data||[];return{items:e.map(n=>({code:n.secu_code||"",name:n.secu_name||"",change:n.change_px??null,changePercent:n.change??null})),total:e.length}}function rr(o){let t=o.result||[];return{items:t.map(e=>({name:e.stockName||"",code:(e.stockType||"")+(e.stockCode||""),price:e.currentPrice??null,changePercent:e.netChange??null})),total:t.length}}function hn(o){return o.command({command:"market",describe:"\u5E02\u573A\u603B\u89C8",builder:t=>t.strictCommands(!1).command("emotion","\u5E02\u573A\u60C5\u7EEA\uFF08cls\uFF09",e=>e,async e=>{let{f:n}=e,r=await oe();d({data:r,format:n,command:"market emotion",source:"cls",toJSON:nr,printFn:Zo})}).command("rank [type]","\u6DA8\u8DCC\u6392\u884C\uFF08cls\uFF09",e=>e,async e=>{let{f:n,n:r=10}=e,a=e.type||"change",s=ht[a]||ht.change,i=await Vt({way:s.way});d({data:i,format:n,command:"market rank",source:"cls",toJSON:or,printFn:tr,printArgs:[r]})}).command("index","\u5927\u76D8\u6307\u6570\uFF08glh\uFF09",e=>e,async e=>{let{f:n}=e,r=await Nt();d({data:r,format:n,command:"market index",source:"glh",toJSON:gn,printFn:fn})}).command("hk [sort]","\u6E2F\u80A1\u6392\u884C\uFF08glh\uFF09",e=>e.option("order",{alias:"o",type:"string",choices:["asc","desc"],default:"desc",describe:"\u6392\u5E8F\u65B9\u5411"}),async e=>{let{f:n,n:r=10}=e,a=e.sort,s=e.order||"desc",i=Ye(a),c=await Xe({sort:i.id,order:s});d({data:c,format:n,command:"market hk",source:"glh",toJSON:rr,printFn:er,printArgs:[r]})}).command("flow","\u6CAA\u6DF1\u6E2F\u901A\u8D44\u91D1\u6D41\u5411",e=>e,async e=>{let{f:n}=e,r=await z();d({data:r,format:n,command:"market flow",source:"glh",toJSON:V,printFn:W})}).command("rates","\u5168\u7403\u592E\u884C\u5229\u7387\uFF08jin10\uFF09",e=>e,async e=>{let{f:n}=e,r=await ue(),a=r?.data?.list||[];if(n==="text"){if(!a.length)return console.log("\u6682\u65E0\u6570\u636E");let{table:s}=f(["\u592E\u884C","\u5229\u7387","\u66F4\u65B0\u65F6\u95F4"],[20,14,14],{0:20,2:14});for(let i of a)s.push([i.bankName||"-",i.interestRate||"-",(i.publishTime||"").slice(0,10)]);console.log(s.toString())}else d({data:r,format:n,command:"market rates",source:"jin10",toJSON:()=>({items:a.map(s=>({bank:s.bankName,rate:s.interestRate,date:s.publishTime}))})})}),handler:async t=>{let{f:e}=t,n=await Nt();d({data:n,format:e,command:"market",source:"glh",toJSON:gn,printFn:fn})}})}import{inflateSync as ar}from"zlib";var sr="wss://wss-flash-2.jin10.com/",ct={DATA:0,HOLIDAY:1,EVENT:2,HOLIDAY_PAGE:3,A_SHARE:4,FIVE_STAR:5,QH_DATA:6,QH_HOLIDAY:7,QH_EVENT:8,US_DATA:9,US_HOLIDAY:10,US_EVENT:11,HK_DATA:12,HK_HOLIDAY:13,HK_EVENT:14},lt={LOGIN:4002,CACHE_DATA:2006,CALENDAR_DATA:2001,CALENDAR_EVENT:2003,CALENDAR_HOLIDAY:2004,CALENDAR_HOLIDAY_PAGE:2005},G=class{buffer;dv;pos;constructor(t){this.buffer=t instanceof ArrayBuffer?t:t instanceof Uint8Array?t.buffer:new ArrayBuffer(2048),this.dv=new DataView(this.buffer),this.pos=0}w16L(t){this.dv.setInt16(this.pos,t,!0),this.pos+=2}wU16L(t){this.dv.setUint16(this.pos,t,!0),this.pos+=2}w32L(t){this.dv.setInt32(this.pos,t,!0),this.pos+=4}wU32L(t){this.dv.setUint32(this.pos,t,!0),this.pos+=4}wStrL(t){let e=Buffer.from(t,"utf-8");this.wU16L(e.length);for(let n=0;n<e.length;n++)this.dv.setUint8(this.pos++,e[n])}r16L(){let t=this.dv.getInt16(this.pos,!0);return this.pos+=2,t}rU16L(){let t=this.dv.getUint16(this.pos,!0);return this.pos+=2,t}rU32L(){let t=this.dv.getUint32(this.pos,!0);return this.pos+=4,t}rStrL(){let t=this.rU16L(),e=Buffer.from(this.buffer,this.pos,t).toString("utf-8");return this.pos+=t,e}toBuffer(){return this.buffer.slice(0,this.pos)}};function yn(o,t){let e=new Uint8Array(o),n=t.charCodeAt(0);for(let r=0;r<e.length;r++)e[r]^=t.charCodeAt((r+n)%t.length);return e.buffer}function ir(o,t){return yn(o,t)}function cr(o){try{return ar(Buffer.from(o,"base64")).toString("utf-8")}catch{return null}}var Et=class{ws=null;encryptKey="";requestId=Math.floor(Math.random()*1e6);userId;loginType;userLevel;userAgent;timeout;_pending=new Map;constructor(t={}){this.userId=t.userId||"",this.loginType=t.loginType||"calendar",this.userLevel=t.userLevel||1,this.userAgent=t.userAgent||"chrome",this.timeout=t.timeout||5e3}connect(){return new Promise((t,e)=>{let n=setTimeout(()=>{this.ws?.close(),e(new Error("WebSocket \u8FDE\u63A5\u8D85\u65F6"))},this.timeout);this.ws=new WebSocket(sr),this.ws.binaryType="arraybuffer",this.ws.onmessage=r=>{let a=r.data;if(!this.encryptKey){let l=new G(a);l.rU32L();let m=l.rU32L(),g=l.rU32L();this.encryptKey=`${g}.${m}`,this._sendLogin();return}let s=yn(a,this.encryptKey),i=new G(s),c=i.r16L();if(c===lt.LOGIN){clearTimeout(n),t();return}if(c===lt.CACHE_DATA){i.rU32L(),i.rStrL();let l=i.rU32L(),m=i.rStrL(),g=this._pending.get(l);if(g){this._pending.delete(l),clearTimeout(g.timer);try{let p=JSON.parse(m);if(p.data){let h=cr(p.data);g.resolve(h?JSON.parse(h):null)}else g.resolve(null)}catch(p){g.reject(p)}}}},this.ws.onerror=()=>{clearTimeout(n),e(new Error("WebSocket \u8FDE\u63A5\u5931\u8D25"))}})}_sendLogin(){let t=new G;t.w16L(lt.LOGIN),t.w32L(parseInt(this.userId)||0),t.wStrL(""),t.wStrL(this.userAgent),t.w32L(this.userLevel),t.wStrL(this.loginType),this._send(t)}_send(t){let e=t.toBuffer(),n=this.encryptKey?ir(e,this.encryptKey):e;this.ws.send(n)}_request(t,e){return new Promise((n,r)=>{let a=this.requestId++,s=setTimeout(()=>{this._pending.delete(a),r(new Error("\u8BF7\u6C42\u8D85\u65F6"))},this.timeout);this._pending.set(a,{resolve:n,reject:r,timer:s});let i=new G;i.w16L(lt.CACHE_DATA),i.wU32L(t),i.wStrL(e),i.wU32L(a),this._send(i)})}close(){this.ws?.close(),this.ws=null,this.encryptKey="",this._pending.clear()}getFuturesData(t){return this._request(ct.QH_DATA,t)}getHKStockData(t){return this._request(ct.HK_DATA,t)}getUSStockData(t){return this._request(ct.US_DATA,t)}getAShareData(t={}){let e=[];return t.page&&e.push(`page=${t.page}`),t.limit!=null&&e.push(`limit=${t.limit}`),t.region&&e.push(`region=${t.region}`),t.star!=null&&e.push(`star=${t.star}`),t.determine!=null&&e.push(`determine=${t.determine}`),this._request(ct.A_SHARE,e.join("&"))}};async function bn(o){let t=new Et(o);return await t.connect(),t}async function Pt(o,...t){let e=await bn();try{return await e[o](...t)}finally{e.close()}}function _n(o){let t=o?.data||[];if(!t.length)return console.log("\u6682\u65E0\u6570\u636E\uFF08\u8BE5\u65E5\u671F\u65E0\u4E8B\u4EF6\uFF09");let{table:e,w:n}=f(["\u65F6\u95F4","\u677F\u5757","\u65B9\u5411"],[14,50,10],{0:16});for(let r of t){let a=r.c_time?r.c_time.slice(5,16):"-",s=r.float==="up"?`${u.red}\u4E0A\u6DA8${u.reset}`:`${u.green}\u4E0B\u8DCC${u.reset}`;e.push([a,y(r.symbol_name||r.event||"",n?.[1]||50),s])}console.log(e.toString())}function lr(o){let t=o?.data?.data||o?.data,e=Array.isArray(t)?t:t?Object.values(t):[];if(!e.length){console.log("\u6682\u65E0\u6570\u636E");return}let{table:n,w:r}=f(["\u65E5\u671F","\u5E02\u573A","\u540D\u79F0","\u5907\u6CE8"],[14,16,32,16],{0:14,1:16,2:32});for(let a of e)n.push([(a.date||"").slice(5,16),a.exchange_name||"",y(a.name||"",r?.[2]||32),y(a.rest_note||"",r?.[3]||16)]);console.log(n.toString())}function Ht(o){if(!o?.length){console.log("\u6682\u65E0\u6570\u636E");return}let{table:t,w:e}=f(["\u65F6\u95F4","\u6307\u6807","\u524D\u503C","\u9884\u671F","\u516C\u5E03","\u56FD\u5BB6"],[14,36,8,8,8,8],{0:14});for(let n of o){let r=F(n.star),a=r?`${r} `:"";t.push([(n.pub_time||"").slice(5,16),y(a+(n.indicator_name||n.name||""),e?.[1]||36),n.previous??"",n.consensus??"",n.actual??"",n.country||""])}console.log(t.toString())}function ur(o){if(!o?.length){console.log("\u6682\u65E0\u6570\u636E");return}let{table:t,w:e}=f(["\u65F6\u95F4","\u5927\u4E8B","\u56FD\u5BB6"],[14,60,8],{0:14,2:8});for(let n of o){let r=F(n.star),a=r?`${r} `:"";t.push([(n.pub_time||n.event_time||"").slice(5,16),y(a+(n.event_content||n.name||""),e?.[1]||60),n.country||""])}console.log(t.toString())}function mr(o){let t=o?.data||[];if(!t.length){console.log("\u6682\u65E0\u6570\u636E");return}let{table:e,w:n}=f(["\u65F6\u95F4","\u5927\u4E8B","\u91CD\u8981","\u6807\u7684"],[14,54,6,20],{0:14,2:6});for(let r of t){let a=F(r.star),s=(r.stocks||[]).map(l=>l.name||l.code).join(" ")||"",i=(r.region||[]).map(l=>l.name).join(" ")||"",c=s||i;e.push([(r.date||"").slice(5,16),y(r.event||"",n?.[1]||54),a||"",y(c,n?.[3]||20)])}console.log(e.toString())}function It(o){return{items:o.map(t=>({time:t.pub_time||"",indicator:t.indicator_name||t.name||"",importance:t.star??0,previous:t.previous??null,consensus:t.consensus??null,actual:t.actual??null,country:t.country||""})),total:o.length}}function wn(o){let t=o?.data||[];return{items:t.map(e=>({time:e.c_time?e.c_time.slice(5,16):"",name:e.symbol_name||e.event||"",direction:e.float==="up"?"up":e.float==="down"?"down":""})),total:t.length}}function dr(o){let t=o?.data||[];return{items:t.map(e=>({time:e.event_time||"",country:e.country||"",importance:e.star??0,event:e.event_content||"",people:e.people||""})),total:t.length}}function pr(o){let t=o?.data?.data||o?.data,e=Array.isArray(t)?t:t?Object.values(t):[];return{items:e.map(n=>({date:(n.date||"").slice(5,16),market:n.exchange_name||"",name:n.name||"",note:n.rest_note||""})),total:e.length}}function fr(o){let t=o?.data||[];return{items:t.map(e=>({date:(e.date||"").slice(5,16),event:e.event||"",importance:e.star??0,stocks:(e.stocks||[]).map(n=>({name:n.name,code:n.code})),regions:(e.region||[]).map(n=>({name:n.name}))})),total:t.length}}function gr(o){let t=o?.data||[];return{items:t.map(e=>({time:e.public_time||"",country:e.country||"",event:e.eventcontent||""})),total:t.length}}function hr(o){let t=o?.data||[];return{items:t.map(e=>({time:e.holiday_time||"",country:e.country||"",market:e.market||"",name:e.holiday_name||"",description:e.description||""})),total:t.length}}function Sn(o){return o.command({command:"calendar",describe:"\u5B8F\u89C2\u65E5\u5386",builder:t=>t.strictCommands(!1).command("invest [date]","A\u80A1\u6295\u8D44\u65E5\u5386\uFF08cls\uFF0C\u9ED8\u8BA4\u4ECA\u5929\uFF09",e=>e,async e=>{let{f:n}=e,r=e.date||j(),a=await ft({date:r});d({data:a,format:n,command:"calendar invest",source:"cls",toJSON:wn,printFn:_n})}).command("macro [date]","\u5168\u7403\u5B8F\u89C2\u6570\u636E\uFF08jin10\uFF09",e=>e,async e=>{let{f:n}=e,r=e.date||j(),a=L(),s=await pe(r,"cj",a?{cookie:a}:void 0);if(n==="text"){let i=s?.data||[];Ht(i.map(c=>({pub_time:c.pub_time,indicator_name:c.indicator_name,previous:c.previous,consensus:c.consensus,actual:c.actual,star:c.star,country:c.country})))}else d({data:s,format:n,command:"calendar macro",source:"jin10",toJSON:i=>It(i?.data||[])})}).command("event [date]","\u5B8F\u89C2\u5927\u4E8B\uFF08jin10\uFF09",e=>e,async e=>{let{f:n}=e,r=e.date||j(),a=L(),s=await fe(r,"cj",a?{cookie:a}:void 0);if(n==="text"){let i=s?.data||[];ur(i.map(c=>({pub_time:c.event_time,event_content:c.event_content,star:c.star,country:c.country})))}else d({data:s,format:n,command:"calendar event",source:"jin10",toJSON:dr})}).command("holiday [date]","\u5168\u7403\u5047\u671F\uFF08jin10\uFF09",e=>e,async e=>{let{f:n}=e,r=e.date||j(),a=L(),s=await ge(r,"cj",a?{cookie:a}:void 0);d({data:s,format:n,command:"calendar holiday",source:"jin10",toJSON:pr,printFn:lr})}).command("ashare","A\u80A1\u5927\u4E8B\uFF08jin10\uFF09",e=>e,async e=>{let{f:n}=e,r=await Pt("getAShareData",{page:1});d({data:r,format:n,command:"calendar ashare",source:"jin10",toJSON:fr,printFn:mr})}).command("hk [date]","\u6E2F\u80A1\u6570\u636E\uFF08jin10\uFF09",e=>e,async e=>{let{f:n}=e,r=e.date||j(),a=await Pt("getHKStockData",r);d({data:a,format:n,command:"calendar hk",source:"jin10",toJSON:s=>It(Array.isArray(s)?s:[]),printFn:Ht})}).command("us [date]","\u7F8E\u80A1\u6570\u636E\uFF08jin10\uFF09",e=>e,async e=>{let{f:n}=e,r=e.date||j(),a=await Pt("getUSStockData",r);d({data:a,format:n,command:"calendar us",source:"jin10",toJSON:s=>It(Array.isArray(s)?s:[]),printFn:Ht})}).command("future-event [date]","\u671F\u8D27\u65E5\u5386\u4E8B\u4EF6\uFF08jin10\uFF09",e=>e,async e=>{let{f:n}=e,r=e.date||j(),a=await Z(r);if(n==="text"){let s=a?.data||[];if(!s.length)return console.log("\u6682\u65E0\u6570\u636E");let{table:i,w:c}=f(["\u65F6\u95F4","\u56FD\u5BB6","\u4E8B\u4EF6"],[14,8,50],{0:16});for(let l of s)x(i,[l.public_time||"",l.country||"",y(l.eventcontent||"",c?.[2]||50)],c);console.log(i.toString())}else d({data:a,format:n,command:"calendar future-event",source:"jin10",toJSON:gr})}).command("future-holiday [date]","\u671F\u8D27\u65E5\u5386\u5047\u671F\uFF08jin10\uFF09",e=>e,async e=>{let{f:n}=e,r=e.date||j(),a=await tt(r);if(n==="text"){let s=a?.data||[];if(!s.length)return console.log("\u6682\u65E0\u6570\u636E");let{table:i,w:c}=f(["\u65F6\u95F4","\u56FD\u5BB6","\u5E02\u573A","\u8282\u65E5","\u5B89\u6392"],[14,8,12,20,26],{0:16});for(let l of s){let m=(l.holiday_time||"").slice(5,16);x(i,[m,l.country||"",l.market||"",y(l.holiday_name||"",c?.[3]||20),y(l.description||"",c?.[4]||26)],c)}console.log(i.toString())}else d({data:a,format:n,command:"calendar future-holiday",source:"jin10",toJSON:hr})}),handler:async t=>{let{f:e}=t,n=await ft({date:j()});d({data:n,format:e,command:"calendar",source:"cls",toJSON:wn,printFn:_n})}})}function yr(o,t){let e=(o?.data||[]).slice(0,t);if(!e.length){console.log("\u6682\u65E0\u6570\u636E");return}let{table:n,w:r}=f(["\u65F6\u95F4","\u5185\u5BB9","\u6765\u6E90","\u6807\u7684"],[10,58,10,14],{0:14});for(let a of e){let s=I(a.data?.content||a.data?.title||"",a),i=F(a.important),c=E(a.remark),m=(i?`${i} `:"")+s;n.push([K(a.time),y(m,r?.[1]||58),a.data?.source||"",y(c,r?.[3]||14)])}console.log(n.toString())}function br(o){let t=o?.data?.list||[];return{items:t.map(e=>({title:e.title||"",hot:!!e.hot,updatedAt:e.updated_at||""})),total:t.length}}function _r(o){return{groups:(o?.data?.list||[]).map(e=>({name:e.name||"",items:(e.data||[]).filter(n=>n.published===1).map(n=>({category:n.category||"",city:n.city||"",spot:n.spot_data??null,futures:n.futures_data??null,basis:n.jicha??null,basisRate:n.jicha_rate??null}))}))}}function wr(o){let t=o?.data||[];return{items:t.map(e=>({time:e.time_show||"",country:e.country||"",indicator:e.name||"",importance:e.star??0,previous:e.previous??null,consensus:e.consensus??null,actual:e.actual??null,unit:e.unit||"",impact:e.qh_affect_text||""})),total:t.length}}function Sr(o){let t=o?.data||[];return{items:t.map(e=>({time:K(e.time),content:I(e.data?.content||e.data?.title||"",e),importance:e.important??0,source:e.data?.source||"",remark:E(e.remark)||""})),total:t.length}}function xn(o){return o.command("future","\u671F\u8D27",t=>t.option("channel",{alias:"c",type:"string",default:"all",describe:`\u9891\u9053: ${Object.keys(rt).join("/")}`}).command("headline","\u671F\u8D27\u5934\u6761",{},async e=>{let{f:n,n:r=10}=e,a=await he();if(n==="text"){let s=a?.data?.list||[];if(!s.length)return console.log("\u6682\u65E0\u6570\u636E");for(let i=0;i<Math.min(r,s.length);i++){let c=s[i],l=String(i+1).padStart(2,"0"),m=c.hot?" [\u70ED]":"";console.log(`${l} ${c.title}${m}`)}}else d({data:a,format:n,command:"future headline",source:"jin10",toJSON:br})}).command("basis [date]","\u671F\u73B0\u57FA\u5DEE",e=>e.positional("date",{type:"string"}).option("group",{alias:"g",type:"string",describe:"\u6309\u677F\u5757\u8FC7\u6EE4: \u9ED1\u8272\u7CFB/\u91D1\u5C5E/\u519C\u4EA7\u54C1/\u80FD\u6E90\u5316\u5DE5/\u91D1\u878D"}),async e=>{let{f:n}=e,r=e.date||j(),a=e.group,s=await be(r);if(n==="text"){let i=s?.data?.list||[];if(!i.length)return console.log("\u6682\u65E0\u6570\u636E");if(a){let c=i.map(l=>l.name);c.includes(a)||(console.error(`\u9519\u8BEF: \u4E0D\u652F\u6301\u7684\u677F\u5757 "${a}"\uFF0C\u53EF\u9009: ${c.join(", ")}`),process.exit(1))}for(let c of i){if(a&&c.name!==a)continue;let l=c.data||[];if(!l.length)continue;console.log(`
|
|
10
|
-
${c.name}`);let{table:m,w:g}=f(["\u54C1\u79CD","\u5730\u533A","\u73B0\u8D27","\u671F\u8D27","\u57FA\u5DEE","\u57FA\u5DEE\u7387"],[8,14,8,8,8,6],{1:14});for(let p of l)p.published===1&&m.push([p.category,y(p.city,g?.[1]||14),p.spot_data??"--",p.futures_data??"--",p.jicha??"--",p.jicha_rate!=null?`${p.jicha_rate}%`:"--"]);console.log(m.toString())}}else d({data:s,format:n,command:"future basis",source:"jin10",toJSON:_r})}).command("calendar [date]","\u671F\u8D27\u65E5\u5386",e=>e.positional("date",{type:"string"}),async e=>{let{f:n}=e,r=e.date||j(),a=await ye(r);if(n==="text"){let s=a?.data||[];if(!s.length)return console.log("\u6682\u65E0\u6570\u636E");let{table:i,w:c}=f(["\u65F6\u95F4","\u56FD\u5BB6","\u6307\u6807","\u524D\u503C","\u9884\u671F","\u516C\u5E03","\u5F71\u54CD"],[6,6,30,8,8,8,6],{0:8});for(let l of s)i.push([l.time_show,l.country,y(l.name,c?.[2]||30),l.previous??"--",l.consensus??"--",l.actual??"--",l.qh_affect_text||""]);console.log(i.toString())}else d({data:a,format:n,command:"future calendar",source:"jin10",toJSON:wr})}).command("event [date]","\u671F\u8D27\u65E5\u5386\u4E8B\u4EF6\uFF08jin10\uFF09",e=>e.positional("date",{type:"string"}),async e=>{let{f:n}=e,r=e.date||j(),a=await Z(r);if(n==="text"){let s=a?.data||[];if(!s.length)return console.log("\u6682\u65E0\u6570\u636E");let{table:i,w:c}=f(["\u65F6\u95F4","\u56FD\u5BB6","\u4E8B\u4EF6"],[14,10,60],{0:14});for(let l of s)i.push([l.public_time||"-",l.country||"-",y(l.eventcontent||"",c?.[2]||60)]);console.log(i.toString())}else d({data:a,format:n,command:`future event ${r}`,source:"jin10",toJSON:s=>({items:(s?.data||[]).map(c=>({time:c.public_time,country:c.country,event:c.eventcontent}))})})}).command("holiday [date]","\u671F\u8D27\u65E5\u5386\u5047\u671F\uFF08jin10\uFF09",e=>e.positional("date",{type:"string"}),async e=>{let{f:n}=e,r=e.date||j(),a=await tt(r);if(n==="text"){let s=a?.data||[];if(!s.length)return console.log("\u6682\u65E0\u6570\u636E");let{table:i,w:c}=f(["\u65F6\u95F4","\u56FD\u5BB6","\u5E02\u573A","\u8282\u65E5","\u5B89\u6392"],[14,10,12,20,30],{0:14});for(let l of s)i.push([(l.holiday_time||"").slice(5,16),l.country||"-",l.market||"-",l.holiday_name||"-",y(l.description||"-",c?.[4]||30)]);console.log(i.toString())}else d({data:a,format:n,command:`future holiday ${r}`,source:"jin10",toJSON:s=>({items:(s?.data||[]).map(c=>({time:c.holiday_time,country:c.country,market:c.market,name:c.holiday_name,description:c.description}))})})}),async t=>{let{channel:e="all",f:n,n:r=10}=t,a=rt[e];a===void 0&&(console.error(`\u9519\u8BEF: \u4E0D\u652F\u6301\u7684\u9891\u9053 "${e}"\uFF0C\u53EF\u9009: ${Object.keys(rt).join(", ")}`),process.exit(1));let s=new Set,i=[],c=await _t(a);for(let p of c?.data||[])s.has(p.id)||(s.add(p.id),i.push(p));let l=0,m=50;for(;i.length<r&&l++<m;){let p=i[i.length-1];if(!p)break;let _=(await _t(a,{max_time:p.time}))?.data||[];if(!_.length)break;let b=0;for(let $ of _)s.has($.id)||(s.add($.id),i.push($),b++);if(b===0)break;i.length<r&&await new Promise($=>setTimeout($,200))}let g={...c,data:i};d({data:g,format:n,command:"future",source:"jin10",toJSON:Sr,printFn:yr,printArgs:[r]})})}function xr(o){let t=o?.data||{},e=[{key:"stocks",label:"\u80A1\u7968\u81EA\u9009"},{key:"cubes",label:"\u7EC4\u5408"},{key:"funds",label:"\u57FA\u91D1\u81EA\u9009"}],n=!1;for(let r of e){let a=t[r.key]||[];if(!a.length)continue;n=!0,console.log(`${u.bold}${u.cyan}${r.label}${u.reset}`);let{table:s,w:i}=f(["ID","\u540D\u79F0","\u80A1\u7968\u6570"],[8,20,8],{0:8});for(let c of a)x(s,[String(c.id),c.name||"-",c.symbol_count!=null?String(c.symbol_count):""],i);console.log(s.toString())}n||console.log("\u6682\u65E0\u81EA\u9009\u7EC4\u5408")}function Ar(o){let t=o?.data?.stocks||o?.data||[];if(!Array.isArray(t)||!t.length)return console.log("\u6682\u65E0\u81EA\u9009\u80A1");let{table:e,w:n}=f(["\u4EE3\u7801","\u540D\u79F0","\u6700\u65B0\u4EF7","\u6DA8\u8DCC\u5E45","\u5E02\u503C"],[14,14,10,10,14],{0:14});for(let r of t){let a=r.symbol||r.stock_code||"-",s=r.name||r.stock_name||"-",i=r.current??r.price??"-",c=r.percent??r.chg_pct??"-",l=r.market_capital??r.mc??"-";x(e,[a,s,String(i),q(c),w(l)],n)}console.log(e.toString())}function kr(o){let t=o?.data||[];if(!Array.isArray(t)||!t.length)return console.log("\u6682\u65E0\u6570\u636E");let{table:e,w:n}=f(["\u65E5\u671F","\u5355\u4F4D\u51C0\u503C","\u7D2F\u8BA1\u51C0\u503C","\u65E5\u6DA8\u5E45"],[14,12,12,12],{0:14});for(let r of t.slice(0,20)){let a=r.time?String(r.time).slice(0,10):"-";x(e,[a,String(r.nav??r.unit_nav??"-"),String(r.accumulated_nav??"-"),q(r.daily_return??r.nav_chg_pct)],n)}console.log(e.toString())}function $r(o){let t=o?.data?.list||o?.data?.holdings||o?.data||[];if(!Array.isArray(t)||!t.length)return console.log("\u6682\u65E0\u6301\u4ED3\u6570\u636E");let{table:e,w:n}=f(["\u4EE3\u7801","\u540D\u79F0","\u6743\u91CD","\u73B0\u4EF7","\u6DA8\u8DCC\u5E45","\u5E02\u503C"],[14,14,10,10,10,14],{0:14});for(let r of t){let a=r.stock_symbol||r.symbol||r.code||"-",s=r.stock_name||r.name||"-",i=r.weight??r.proportion??"-",c=r.price??r.current??"-",l=r.chg_pct??r.percent??"-",m=r.market_capital??r.mc??"-";x(e,[a,s,i!=="-"?(Number(i)*100).toFixed(1)+"%":"-",String(c),q(l),w(m)],n)}console.log(e.toString())}function vr(o){let t=o?.data||{};return{stocks:(t.stocks||[]).map(e=>({id:e.id,name:e.name,symbolCount:e.symbol_count||0})),cubes:(t.cubes||[]).map(e=>({id:e.id,name:e.name})),funds:(t.funds||[]).map(e=>({id:e.id,name:e.name}))}}function Nr(o){let t=o?.data?.stocks||o?.data||[];return Array.isArray(t)?{items:t.map(e=>({symbol:e.symbol||e.stock_code||"",name:e.name||e.stock_name||"",price:e.current??e.price??null,changePercent:e.percent??e.chg_pct??null,marketCap:e.market_capital??e.mc??null})),total:t.length}:{items:[],total:0}}function Or(o){let t=o?.data||[];return Array.isArray(t)?{items:t.map(e=>({date:e.time?String(e.time).slice(0,10):"",nav:e.nav??e.unit_nav??null,accumulatedNav:e.accumulated_nav??null,dailyReturn:e.daily_return??e.nav_chg_pct??null})),total:t.length}:{items:[],total:0}}function qr(o){let t=o?.data?.list||o?.data?.holdings||o?.data||[];return Array.isArray(t)?{items:t.map(e=>({symbol:e.stock_symbol||e.symbol||e.code||"",name:e.stock_name||e.name||"",weight:e.weight??e.proportion??null,price:e.price??e.current??null,changePercent:e.chg_pct??e.percent??null,marketCap:e.market_capital??e.mc??null})),total:t.length}:{items:[],total:0}}function An(o){return o.command("portfolio","\u81EA\u9009/\u7EC4\u5408\uFF08\u96EA\u7403\uFF0C\u9700 cookie\uFF09",t=>t.command("stocks <pid>","\u67E5\u770B\u5206\u7EC4\u4E0B\u7684\u80A1\u7968\uFF0Cpid \u7528 portfolio \u83B7\u53D6",e=>e.positional("pid",{type:"string",describe:"\u5206\u7EC4 ID\uFF0C\u5982 -1(\u5168\u90E8) -5(\u6CAA\u6DF1)"}).strictCommands(!1).command("add <symbol>","\u6DFB\u52A0\u80A1\u7968\u5230\u81EA\u9009",n=>n.option("category",{alias:"c",type:"number",default:1,describe:"\u5206\u7EC4 ID\uFF0C\u9ED8\u8BA4\u5168\u90E8"}),async n=>{let r=n.symbol,a=n.category,s=await Be(r,{category:a});console.log(s?.data?"\u5DF2\u6DFB\u52A0":"\u6DFB\u52A0\u5931\u8D25")}).command("remove <symbol>","\u4ECE\u81EA\u9009\u5220\u9664\u80A1\u7968",n=>n.option("category",{alias:"c",type:"number",default:1,describe:"\u5206\u7EC4 ID\uFF0C\u9ED8\u8BA4\u5168\u90E8"}),async n=>{let r=n.symbol,a=n.category,s=await Ue(r,{category:a});console.log(s?.data?"\u5DF2\u5220\u9664":"\u5220\u9664\u5931\u8D25")}),async e=>{let{f:n}=e,r=e.pid,a=await Me(r),s=a?.data?.stocks||[];if(s.length){let i=s.map(c=>c.symbol).filter(Boolean);try{let c=await nt(i),l={};for(let m of c?.data?.items||[]){let g=m.quote;g&&(l[g.symbol]=g)}for(let m of s){let g=l[m.symbol];g&&(m.current=g.current,m.percent=g.percent,m.market_capital=g.market_capital)}}catch{}}d({data:a,format:n,command:"portfolio stocks "+r,source:"xq",toJSON:Nr,printFn:Ar})}).command("cube [code]","\u7EC4\u5408\u51C0\u503C\u8D70\u52BF",e=>e.positional("code",{type:"string",describe:"\u7EC4\u5408\u4EE3\u7801"}).strictCommands(!1).command("holding <code>","\u67E5\u770B\u7EC4\u5408\u6301\u4ED3",n=>n.positional("code",{type:"string",describe:"\u7EC4\u5408\u4EE3\u7801"}),async n=>{let{f:r}=n,a=n.code,s=await Ke(a);d({data:s,format:r,command:"portfolio cube holding "+a,source:"xq",toJSON:qr,printFn:$r})}),async e=>{let{f:n}=e,r=e.code;if(!r){console.log("\u8BF7\u63D0\u4F9B\u7EC4\u5408\u4EE3\u7801\uFF0C\u4F8B\u5982: finflow portfolio cube <code>");return}let a=await ze(r);d({data:a,format:n,command:"portfolio cube "+r,source:"xq",toJSON:Or,printFn:kr})}),async t=>{let{f:e}=t,n=await Ge();e==="text"&&(console.log(`${u.dim}\u63D0\u793A: \u7528 portfolio stocks <ID> \u67E5\u770B\u5206\u7EC4\u4E0B\u7684\u80A1\u7968\uFF0CID \u4ECE\u4E0A\u65B9\u5217\u8868\u83B7\u53D6${u.reset}`),console.log()),d({data:n,format:e,command:"portfolio",source:"xq",toJSON:vr,printFn:xr})})}function kn(o){return o.command("config","\u914D\u7F6E\u7BA1\u7406",t=>t.command("cookie [value]","\u67E5\u770B/\u8BBE\u7F6E\u96EA\u7403 Cookie",e=>e.positional("value",{type:"string"}),e=>{let{value:n}=e;if(n)xt(n),console.log("Cookie \u5DF2\u4FDD\u5B58");else{let r=St();console.log(r?`\u5F53\u524D Cookie: ${u.dim}${r.slice(0,40)}...${u.reset}`:"\u672A\u8BBE\u7F6E Cookie\u3002\u8FD0\u884C finflow config login \u6216 finflow config cookie <value> \u8BBE\u7F6E")}}).command("login","\u4ECE\u6D4F\u89C8\u5668\u81EA\u52A8\u83B7\u53D6 Cookie",{},()=>{try{console.log("\u6B63\u5728\u4ECE\u6D4F\u89C8\u5668\u83B7\u53D6 Cookie...");let e=at("xueqiu.com");xt(e),console.log("Cookie \u5DF2\u4FDD\u5B58")}catch(e){console.error(`${u.red}${e.message}${u.reset}`),process.exit(1)}}))}var J=jr(Cr(process.argv)).scriptName("finflow").version("1.2.2").demandCommand(1,"\u8BF7\u6307\u5B9A\u547D\u4EE4\uFF0C\u8FD0\u884C finflow --help \u67E5\u770B\u5E2E\u52A9").option("n",{type:"number",default:10,describe:"\u6761\u6570"}).option("f",{type:"string",default:"json",choices:["json","text","raw"],describe:"\u8F93\u51FA\u683C\u5F0F: json(\u9ED8\u8BA4)/text/raw"}).strict().help().alias("h","help");rn(J);pn(J);hn(J);Sn(J);xn(J);An(J);kn(J);J.parse();
|
|
10
|
+
${p}`),process.exit(1)}let c=await Bt(i.id),l=T(c?.data?.depth_list||[]);if(l.length<a){let p=l[l.length-1]?.ctime;if(p){let d=await Re(i.id,{lastTime:p,rn:a-l.length}),m=T(d?.data?.depth_list||d?.data||[]);l=[...l,...m]}}g({data:c,format:r,command:"info news depth",source:"cls",toJSON:Jn,printFn:ur,printArgs:[a]})}).command("hot","\u70ED\u95E8\u6587\u7AE0\u6392\u884C\uFF08cls\uFF09",o=>o,async o=>{let{f:r,n:a=10}=o,s=await Je();g({data:s,format:r,command:"info news hot",source:"cls",toJSON:ar,printFn:mr,printArgs:[a]})}).command("stock <code>","\u4E2A\u80A1\u65B0\u95FB\uFF08cls\uFF09",o=>o,async o=>{let{f:r,n:a=10}=o,s=o.code,i=await Pe(s,{rn:a});g({data:i,format:r,command:"info news stock",source:"cls",toJSON:sr,printFn:dr,printArgs:[a]})}),async e=>{let{f:o,n:r=10}=e,a=await Bt(1e3);g({data:a,format:o,command:"info news",source:"cls",toJSON:Jn,printFn:lr,printArgs:[r]})}).command("report <code>","\u673A\u6784\u7814\u62A5\uFF08xq\uFF09",e=>e,async e=>{let{f:o}=e,a=e.code,s=await Nn(a);g({data:s,format:o,command:"info report",source:"xq",toJSON:ir,printFn:pr})}).command("topic","\u4E13\u9898",e=>e.strictCommands(!1).command("search <keyword>","\u641C\u7D22\u8BDD\u9898",o=>o,async o=>{let{f:r,n:a=10}=o,s=o.keyword,i=await jt(),c=Array.isArray(i)?i:i?.data||[],l=s.toLowerCase(),p=c.filter(m=>(m.title||"").toLowerCase().includes(l)||(m.short_name||"").toLowerCase().includes(l)||(m.introduction||"").toLowerCase().includes(l));if(!p.length)return console.log(`\u672A\u627E\u5230\u5339\u914D "${s}" \u7684\u4E13\u9898`);let d=T(p.slice(0,a));if(r==="text"){let{table:m,w:f}=h(["ID","\u4E13\u9898","\u7B80\u4ECB","\u5206\u7C7B"],[4,22,44,10],{0:4,3:10});for(let y of d)m.push([y.id,w(y.short_name||y.title,f?.[1]||22),w((y.introduction||"").trim().slice(0,70),f?.[2]||44),y.category_name||""]);console.log(m.toString()),console.log(`${u.dim}\u627E\u5230 ${p.length} \u4E2A\u5339\u914D${u.reset}`)}else g({data:d,format:r,command:"info topic search",source:"jin10",toJSON:Dn})}).command("groups","\u8BDD\u9898\u5206\u7EC4",o=>o,async()=>{let o=await jt(),r=Array.isArray(o)?o:o?.data||[],a=new Map;for(let s of r){let i=s.category_name||"\u672A\u5206\u7C7B";a.has(i)||a.set(i,0),a.set(i,a.get(i)+1)}for(let[s,i]of a)console.log(` ${s} (${i})`)}).command("hot","\u8D22\u8054\u793E\u9898\u6750",o=>o,async o=>{let{f:r}=o,a=await De();g({data:a,format:r,command:"info topic hot",source:"cls",toJSON:s=>cr(T(s)),printFn:fr})}).command("show <id>","\u4E13\u9898\u6587\u7AE0\uFF08jin10\uFF09",o=>o,async o=>{let{f:r,n:a=10}=o,s=o.id,i=rt(),c=i?{cookie:i}:void 0,l=new Set,p=[],d=1,m=50;for(;p.length<a&&d<=m;){let b=(await on(s,{page:d},c))?.data?.list||[];if(!b.length)break;let _=0;for(let S of b)l.has(S.id)||(l.add(S.id),p.push(S),_++);if(_===0)break;d++,p.length<a&&await new Promise(S=>setTimeout(S,200))}let f=T(p);r==="text"?_e({list:f},a):g({data:f,format:r,command:"info topic show",source:"jin10",toJSON:y=>({items:y.map(b=>({time:b.display_datetime,title:b.title,author:b.author?.nick,vip:b.vip})),total:y.length})})}),async e=>{let{f:o,n:r=10}=e,a=await jt(),s=T(Array.isArray(a)?a:a?.data||[]);if(s=s.slice(0,r),!s.length)return console.log("\u6682\u65E0\u6570\u636E");if(o==="text"){let{table:i,w:c}=h(["ID","\u4E13\u9898","\u7B80\u4ECB","\u5206\u7C7B","\u8BA2\u9605\u6570"],[4,22,40,10,6],{0:4,3:10,4:6});for(let l of s)i.push([l.id,w(l.short_name||l.title,c?.[1]||22),w((l.introduction||"").trim().slice(0,60),c?.[2]||40),l.category_name||"",l.subscribe_num||""]);console.log(i.toString())}else g({data:s,format:o,command:"info topic",source:"jin10",toJSON:Dn})}),handler:async()=>{console.log("\u8BF7\u6307\u5B9A\u5B50\u547D\u4EE4\uFF0C\u4F8B\u5982: finflow info flash, finflow info news, finflow info topic")}})}function wt(n){let t=n.result||{},e=[{label:"\u5317\u5411\u8D44\u91D1(\u6CAA)",d:t.shMarketFlowDetail},{label:"\u5317\u5411\u8D44\u91D1(\u6DF1)",d:t.szMarketFlowDetail},{label:"\u5317\u5411\u5408\u8BA1",d:t.shSZTotalMarketFlowDetail},{label:"\u5357\u5411\u8D44\u91D1(\u6CAA)",d:t.hkSHMarketFlowDetail},{label:"\u5357\u5411\u8D44\u91D1(\u6DF1)",d:t.hkSZMarketFlowDetail},{label:"\u5357\u5411\u5408\u8BA1",d:t.hkSHSZTotalMarketFlowDetail}],{table:o,w:r}=h(["\u8D44\u91D1\u6D41\u5411","\u51C0\u4E70\u5165","\u6210\u4EA4\u989D","\u72B6\u6001"],[3,2,2,1]);for(let a of e){let s=a.d;O(o,[a.label,s?.netBuyTurnover!=null?k(s.netBuyTurnover):s?.netBuyTurnoverText||"-",s?.tradValSum!=null?k(s.tradValSum):s?.tradValSumText||"-",s?.tradeStatus==="trading"?u.green+"\u4EA4\u6613\u4E2D"+u.reset:s?.tradeStatus||"-"],r)}console.log(o.toString())}function St(n){let t=n.result||{},e=(o,r)=>({label:o,netBuy:r?.netBuyTurnover??null,netBuyText:r?.netBuyTurnoverText||null,turnover:r?.tradValSum??null,status:r?.tradeStatus||null});return{northbound:{shanghai:e("\u5317\u5411\u8D44\u91D1(\u6CAA)",t.shMarketFlowDetail),shenzhen:e("\u5317\u5411\u8D44\u91D1(\u6DF1)",t.szMarketFlowDetail),total:e("\u5317\u5411\u5408\u8BA1",t.shSZTotalMarketFlowDetail)},southbound:{shanghai:e("\u5357\u5411\u8D44\u91D1(\u6CAA)",t.hkSHMarketFlowDetail),shenzhen:e("\u5357\u5411\u8D44\u91D1(\u6DF1)",t.hkSZMarketFlowDetail),total:e("\u5357\u5411\u5408\u8BA1",t.hkSHSZTotalMarketFlowDetail)},source:"glh"}}function C(n){return n[n.length-1]}function z(n,t,e){return Math.max(t,Math.min(e,n))}function gr(n){if(n.length<2)return 0;let t=n.reduce((o,r)=>o+r,0)/n.length,e=n.reduce((o,r)=>o+(r-t)**2,0)/(n.length-1);return Math.sqrt(e)}function Lt(n){return n.map(t=>t.close)}function V(n,t){let e=[];for(let o=0;o<n.length;o++){if(o<t-1){e.push(NaN);continue}let r=n.slice(o-t+1,o+1);e.push(r.reduce((a,s)=>a+s,0)/t)}return e}function Se(n,t){let e=[],o=2/(t+1),r=NaN;for(let a=0;a<n.length;a++){if(a<t-1){e.push(NaN);continue}if(a===t-1){r=n.slice(0,t).reduce((s,i)=>s+i,0)/t,e.push(r);continue}r=n[a]*o+r*(1-o),e.push(r)}return e}function hr(n,t=12,e=26,o=9){let r=Se(n,t),a=Se(n,e),s=r.map((d,m)=>isNaN(d)||isNaN(a[m])?NaN:d-a[m]),i=s.filter(d=>!isNaN(d)),c=Se(i,o),l=s.slice(s.length-i.length),p=l.map((d,m)=>isNaN(d)||isNaN(c[m])?NaN:d-c[m]);return{macd:l,signal:c,histogram:p}}function yr(n,t=14){let e=[];if(n.length<t+1){for(let o=0;o<n.length;o++)e.push(NaN);return e}for(let o=0;o<n.length;o++){if(o<t){e.push(NaN);continue}if(o===t){let i=0,c=0;for(let d=1;d<=t;d++){let m=n[d]-n[d-1];m>0?i+=m:c-=m}let l=i/t,p=c/t;e.push(p===0?100:100-100/(1+l/p));continue}let r=e[o-1];if(isNaN(r)){e.push(NaN);continue}let a=0,s=0;for(let i=o-t+1;i<=o;i++){let c=n[i]-n[i-1];c>0?a+=c:s-=c}a/=t,s/=t,e.push(s===0?100:100-100/(1+a/s))}return e}function br(n,t=20,e=2){let o=V(n,t),r=[],a=[],s=[],i=[];for(let c=0;c<n.length;c++){if(isNaN(o[c])){r.push(NaN),a.push(NaN),s.push(NaN),i.push(NaN);continue}let l=n.slice(c-t+1,c+1),p=gr(l),d=o[c]+e*p,m=o[c]-e*p;r.push(d),a.push(m),s.push(o[c]===0?0:(d-m)/o[c]*100),i.push(d===m?.5:(n[c]-m)/(d-m))}return{upper:r,middle:o,lower:a,bandwidth:s,percentB:i}}function _r(n,t=14){let e=[];for(let o=0;o<n.length;o++){if(o===0){e.push(n[o].high-n[o].low);continue}e.push(Math.max(n[o].high-n[o].low,Math.abs(n[o].high-n[o-1].close),Math.abs(n[o].low-n[o-1].close)))}return V(e,t)}function xe(n,t=20){if(n.length<2)return{ratio:1,trend:"flat",avgVolume:n[0]?.volume??0};let e=n.slice(-t),o=e.reduce((i,c)=>i+c.volume,0)/e.length,r=C(n).volume,a=o===0?1:r/o,s="flat";if(e.length>=10){let i=e.slice(-5),c=e.slice(-10,-5),l=i.reduce((d,m)=>d+m.volume,0)/i.length,p=c.reduce((d,m)=>d+m.volume,0)/c.length;if(p>0){let d=(l-p)/p;d>.15?s="rising":d<-.15&&(s="falling")}}return{ratio:Math.round(a*100)/100,trend:s,avgVolume:Math.round(o)}}function wr(n,t=9){let e=[],o=[],r=[];for(let a=0;a<n.length;a++){if(a<t-1){e.push(50),o.push(50),r.push(50);continue}let s=n.slice(a-t+1,a+1),i=Math.max(...s.map(p=>p.high)),c=Math.min(...s.map(p=>p.low)),l=i===c?50:(n[a].close-c)/(i-c)*100;if(a===t-1)e.push(l),o.push(l),r.push(3*l-2*l);else{let p=e[a-1],d=o[a-1],m=2/3*p+1/3*l,f=2/3*d+1/3*m,y=3*m-2*f;e.push(m),o.push(f),r.push(y)}}return{k:e,d:o,j:r}}function Sr(n,t=20){if(n.length<t)return{direction:"sideways",strength:0,description:"\u6570\u636E\u4E0D\u8DB3"};let e=Lt(n),o=C(V(e,5)),r=C(V(e,10)),a=C(V(e,t)),s=e.length>=60?C(V(e,60)):NaN,i=C(e),c=0,l=0;i>o?c++:l++,o>r?c++:l++,r>a?c++:l++,isNaN(s)||(a>s?c++:l++);let p=isNaN(s)?3:4,d=Math.abs(c-l)/p,m=a===0?0:(i-a)/a,f=z(Math.round(d*60+Math.min(Math.abs(m)*500,40)),0,100),y,b,_=c/p;return _>.75?(y="up",b=`\u591A\u5934\u6392\u5217${isNaN(s)?"":"\uFF0C\u5747\u7EBF\u53D1\u6563"}\uFF0C\u4EF7\u683C${m>0?"\u9AD8\u4E8E":"\u8D34\u8FD1"}MA${t}`):_<.25?(y="down",b=`\u7A7A\u5934\u6392\u5217${isNaN(s)?"":"\uFF0C\u5747\u7EBF\u53D1\u6563"}\uFF0C\u4EF7\u683C${m<0?"\u4F4E\u4E8E":"\u8D34\u8FD1"}MA${t}`):(y="sideways",f=Math.round(f*.6),b="\u5747\u7EBF\u7EA0\u7F20\uFF0C\u65B9\u5411\u4E0D\u660E"),{direction:y,strength:f,description:b}}function xr(n,t=20){if(n.length<t){let s=Lt(n);return{supports:[Math.min(...s)],resistances:[Math.max(...s)]}}let e=[],o=[],r=Lt(n);for(let s=t;s<n.length-1;s++){let i=Math.min(...n.slice(s-t,s).map(f=>f.low)),c=Math.min(...n.slice(s+1,s+1+t).map(f=>f.low)),l=n[s].low;l<=i&&l<=c&&(e.find(y=>Math.abs(y-l)/l<.01)||e.push(l));let p=Math.max(...n.slice(s-t,s).map(f=>f.high)),d=Math.max(...n.slice(s+1,s+1+t).map(f=>f.high)),m=n[s].high;m>=p&&m>=d&&(o.find(y=>Math.abs(y-m)/m<.01)||o.push(m))}let a=C(r);return e.sort((s,i)=>i-s),o.sort((s,i)=>s-i),{supports:e.filter(s=>s<a).slice(0,3),resistances:o.filter(s=>s>a).slice(0,3)}}function $r(n,t=20,e=2){let o=xe(n,t),r=o.ratio>=e,a=r?`\u6210\u4EA4\u91CF\u5F02\u5E38\u653E\u5927\uFF0C\u4E3A${t}\u65E5\u5747\u91CF${o.ratio.toFixed(1)}\u500D`:`\u6210\u4EA4\u91CF\u6B63\u5E38\uFF0C\u4E3A${t}\u65E5\u5747\u91CF${o.ratio.toFixed(1)}\u500D`;return{isAnomalous:r,ratio:o.ratio,description:a}}function Ar(n,t=20){if(n.length<t+1)return{type:null,strength:0,description:"\u6570\u636E\u4E0D\u8DB3"};let e=n.slice(-t-1,-1),o=C(n),r=Math.max(...e.map(c=>c.high)),a=Math.min(...e.map(c=>c.low)),s=r-a,i=xe(n,t);return o.close>r&&s>0?{type:"up",strength:z(Math.round((o.close-r)/s*50+(i.ratio>1.5?25:0)),0,100),description:`\u5411\u4E0A\u7A81\u7834${t}\u65E5\u9AD8\u70B9${r.toFixed(2)}\uFF0C\u653E\u91CF${i.ratio>1.5?"\u786E\u8BA4":"\u4E0D\u8DB3"}`}:o.close<a&&s>0?{type:"down",strength:z(Math.round((a-o.close)/s*50+(i.ratio>1.5?25:0)),0,100),description:`\u5411\u4E0B\u8DCC\u7834${t}\u65E5\u4F4E\u70B9${a.toFixed(2)}\uFF0C\u653E\u91CF${i.ratio>1.5?"\u786E\u8BA4":"\u4E0D\u8DB3"}`}:{type:null,strength:0,description:"\u65E0\u7A81\u7834\u4FE1\u53F7"}}function $e(n){let t=Lt(n);if(n.length<30)return{trend:{direction:"sideways",strength:0,score:1,maAlign:"\u6570\u636E\u4E0D\u8DB3"},momentum:{rsi:NaN,macdHistogram:NaN,score:1},volatility:{atr:0,bollingerBandwidth:0,score:3},volume:{volumeRatio:1,trend:"flat",score:3},pattern:{description:"\u6570\u636E\u4E0D\u8DB3",score:1},keyLevels:{support:[],resistance:[]},compositeScore:1,summary:"\u6570\u636E\u4E0D\u8DB3\uFF0C\u65E0\u6CD5\u8BC4\u5206"};let e=Sr(n,20),o=e.direction==="up"?z(Math.round(2.5+e.strength/100*2.5),1,5):e.direction==="down"?z(Math.round(2.5-e.strength/100*1.5),1,5):z(Math.round(2.5),1,3),r=C(V(t,5)),a=C(V(t,10)),s=C(V(t,20)),i=t.length>=60?C(V(t,60)):NaN,c=t.length>=60?`${r>a?"\u2191":"\u2193"}5 ${a>s?"\u2191":"\u2193"}10 ${s>i?"\u2191":"\u2193"}20 \u219160`:`${r>a?"\u2191":"\u2193"}5 ${a>s?"\u2191":"\u2193"}10`,l=yr(t,14),p=C(l),d=hr(t),m=C(d.histogram),f=isNaN(m)?0:m,y=3;if(isNaN(p)||(p>=50&&p<=70&&(y+=.5),p>=30&&p<50&&(y-=.5),p>80&&(y-=.5),p<20&&(y+=.5)),!isNaN(f)){if(f>0&&d.histogram.length>=3){let N=d.histogram;N[N.length-1]>N[N.length-2]&&N[N.length-2]>N[N.length-3]&&(y+=.5)}else if(f<0&&d.histogram.length>=3){let N=d.histogram;N[N.length-1]<N[N.length-2]&&N[N.length-2]<N[N.length-3]&&(y-=.5)}}y=z(Math.round(y),1,5);let b=_r(n,14),_=C(b)||0,S=C(t)===0?0:_/C(t)*100,A=br(t,20),I=C(A.bandwidth)||0,Q=C(A.percentB)||.5,L=3;S<1?L+=1:S>3&&(L-=1),I<5?L+=.5:I>20&&(L-=.5),L=z(Math.round(L),1,5);let M=xe(n,20),v=3;e.direction==="up"&&M.trend==="rising"?v+=1.5:e.direction==="down"&&M.trend==="falling"?v+=.5:e.direction==="up"&&M.trend==="falling"?v-=1:e.direction==="down"&&M.trend==="rising"&&(v-=1.5),M.ratio>2?v+=.5:M.ratio<.5&&(v-=.5),v=z(Math.round(v),1,5);let B=Ar(n),$=$r(n),x=wr(n),K=C(x.k),et=C(x.d),E=C(x.j),J=[],G=3;if(B.type==="up"&&B.strength>30?(J.push("\u5411\u4E0A\u7A81\u7834"),G+=1):B.type==="down"&&B.strength>30&&(J.push("\u5411\u4E0B\u8DCC\u7834"),G-=1),$.isAnomalous&&(J.push("\u653E\u91CF\u5F02\u52A8"),G+=B.type==="up"?.5:-.5),x.k.length>=2&&x.d.length>=2&&(x.k[x.k.length-2]<x.d[x.d.length-2]&&K>et&&K<30&&(J.push("KDJ\u4F4E\u4F4D\u91D1\u53C9"),G+=.5),x.k[x.k.length-2]>x.d[x.d.length-2]&&K<et&&K>70&&(J.push("KDJ\u9AD8\u4F4D\u6B7B\u53C9"),G-=.5)),d.macd.length>=2&&d.signal.length>=2){let N=d.macd.length;d.macd[N-2]<d.signal[N-2]&&d.macd[N-1]>d.signal[N-1]&&(J.push("MACD\u91D1\u53C9"),G+=.5),d.macd[N-2]>d.signal[N-2]&&d.macd[N-1]<d.signal[N-1]&&(J.push("MACD\u6B7B\u53C9"),G-=.5)}G=z(Math.round(G),1,5);let st=J.length>0?J.join("\u3001"):"\u65E0\u660E\u663E\u5F62\u6001\u4FE1\u53F7",xt=xr(n),Ht=o*.25+y*.25+L*.15+v*.2+G*.15,$o=z(Math.round(Ht*10)/10,1,5),Ao=e.direction==="up"?"\u504F\u591A":e.direction==="down"?"\u504F\u7A7A":"\u9707\u8361",ko=isNaN(p)?"":p>70?"\uFF0CRSI\u8D85\u4E70":p<30?"\uFF0CRSI\u8D85\u5356":"",vo=`${Ao}${ko}\uFF0C${st}`;return{trend:{direction:e.direction,strength:e.strength,score:o,maAlign:c},momentum:{rsi:Math.round(p*100)/100,macdHistogram:isNaN(f)?0:Math.round(f*1e4)/1e4,score:y},volatility:{atr:Math.round(_*100)/100,bollingerBandwidth:Math.round(I*100)/100,score:L},volume:{volumeRatio:M.ratio,trend:M.trend,score:v},pattern:{description:st,score:G},keyLevels:xt,compositeScore:$o,summary:vo}}var kr="https://query1.finance.yahoo.com/v8/finance/chart",vr={"User-Agent":"Mozilla/5.0"};async function Ae(n){let t=n.trim().toUpperCase(),e=`${kr}/${encodeURIComponent(t)}?interval=1d&range=1d`;try{let a=(await(await fetch(e,{headers:vr})).json())?.chart?.result;if(!Array.isArray(a)||a.length===0)return null;let s=a[0]?.meta;if(!s?.symbol)return null;let i=Number(s.regularMarketPrice??0),c=Number(s.chartPreviousClose??0),l=i-c,p=c===0?0:l/c*100;return{symbol:s.symbol,name:s.shortName??"",price:i,prevClose:c,change:l,changePercent:p,currency:s.currency??"",exchange:s.exchangeName??"",marketState:s.marketState??""}}catch{return null}}function Mt(n){let t=n?.data||(n?.symbol?n:{}),e=t.secu_name||t.name||"";if(!e)return console.log("\u6682\u65E0\u6570\u636E");let o=t.secu_code||t.symbol||"",r=t.last_px??t.current??0,a=t.change_px??t.chg??0,s=t.change??t.percent??0,i=t.trade_status==="TRADE"||t.status===1?`${u.green}\u4EA4\u6613\u4E2D${u.reset}`:`${u.dim}\u5DF2\u6536\u76D8${u.reset}`,c=t.tr!=null?(t.tr*100).toFixed(2)+"%":t.turnover_rate!=null?t.turnover_rate.toFixed(2)+"%":"-",l=t.amp!=null?(t.amp*100).toFixed(2)+"%":t.amplitude!=null?t.amplitude.toFixed(2)+"%":"-",{table:p}=h(["\u540D\u79F0","\u4EE3\u7801","\u6700\u65B0\u4EF7","\u6DA8\u8DCC\u989D","\u6DA8\u8DCC\u5E45","\u72B6\u6001"],[20,12,10,10,12,10],{1:12,2:10,3:10,4:12,5:10});p.push([e,o,String(r),String(a),P(s),i]),console.log(p.toString());let d=t.open_px??t.open??0,m=t.high_px??t.high??0,f=t.low_px??t.low??0,y=t.preclose_px??t.last_close??0,{table:b}=h(["\u4ECA\u5F00","\u6700\u9AD8","\u6700\u4F4E","\u6628\u6536","\u632F\u5E45","\u6362\u624B"],[1,1,1,1,1,1]);b.push([d,m,f,y,l,c]),console.log(b.toString());let _=t.av_px??t.avg_price??0,S=t.qrr??t.volume_ratio??0,A=t.business_amount??t.amount??0,I=t.pe??t.pe_ttm??null,Q=t.pb??null,L=t.mc??t.market_capital??0,{table:M}=h(["\u5747\u4EF7","\u91CF\u6BD4","\u6210\u4EA4\u989D","\u5E02\u76C8","\u5E02\u51C0","\u603B\u5E02\u503C"],[1,1,1,1,1,1.2]);if(M.push([_,S,k(A),I??"-",Q??"-",k(L)]),console.log(M.toString()),t.change_3!=null||t.change_5!=null){let{table:v}=h(["3\u65E5\u6DA8\u5E45","5\u65E5\u6DA8\u5E45"],[1,1]);v.push([(t.change_3*100).toFixed(2)+"%",(t.change_5*100).toFixed(2)+"%"]),console.log(v.toString())}}function Nr(n){if(!Array.isArray(n)||!n.length)return console.log("\u6682\u65E0\u6570\u636E");let{table:t,w:e}=h(["\u4EE3\u7801","\u540D\u79F0","\u6700\u65B0\u4EF7","\u6DA8\u8DCC\u989D","\u6DA8\u8DCC\u5E45","\u6210\u4EA4\u91CF","\u6210\u4EA4\u989D"],[14,12,10,10,10,12,14],{0:14,1:12,2:10,3:10,4:10});for(let o of n){let r=o.code||o.symbol||"-",a=o.name||"-",s=o.price??o.current??"-",i=o.change??o.chg??"-",c=o.changePercent??o.percent??"-",l=o.volume??"-",p=o.amount??"-";O(t,[r,a,String(s),String(i),P(c),pt(l),k(p)],e)}console.log(t.toString())}function qr(n){let t=n?.data?.items||n?.data||[];if(!Array.isArray(t)||!t.length)return console.log("\u6682\u65E0\u6570\u636E");let{table:e,w:o}=h(["\u4EE3\u7801","\u540D\u79F0","\u6700\u65B0\u4EF7","\u6DA8\u8DCC\u5E45","\u5173\u8054"],[14,20,10,10,10],{0:14});for(let r of t)O(e,[r.symbol||"-",r.name||"-",String(r.current??"-"),P(r.percent??"-"),r.relation||"-"],o);console.log(e.toString())}function Or(n){let t=n?.data||{};return{code:t.secu_code||"",name:t.secu_name||"",price:Number(t.last_px||0),change:Number(t.change_px||0),changePercent:Math.round(Number(t.change||0)*1e4)/100,open:Number(t.open_px||0),high:Number(t.high_px||0),low:Number(t.low_px||0),preclose:Number(t.preclose_px||0),volume:Number(t.business_amount||0),amount:Number(t.business_balance||0),turnoverRate:Number(t.tr||0),amplitude:Number(t.amp||0),avgPrice:Number(t.av_px||0),volumeRatio:Number(t.qrr||0),pe:t.pe!=null?Number(t.pe):null,pb:t.pb!=null?Number(t.pb):null,marketCap:Number(t.mc||0),change3d:t.change_3!=null?Number(t.change_3):null,change5d:t.change_5!=null?Number(t.change_5):null,status:t.trade_status==="TRADE"?"trading":"closed",source:"cls"}}function jr(n){return{items:n.map(t=>{let e=t.quote||t;return{code:e.symbol||"",name:e.name||"",price:e.current??0,change:e.chg??0,changePercent:Math.round((e.percent??0)*1e4)/100,volume:e.volume??0,amount:e.amount??0,turnoverRate:e.turnover_rate??0,marketCap:e.market_capital??0,high:e.high??0,low:e.low??0,open:e.open??0}}),total:n.length}}function Cr(n){let t=n?.data||{},e=Number(t.last_px??0);return!!(t.secu_name||t.secu_code)&&Number.isFinite(e)&&e!==0}function Fr(n){if(!n)return!1;let t=Number(n.current??n.price??0);return!!(n.symbol||n.name)&&Number.isFinite(t)&&t!==0}function Tr(n){let t=n.trim().toUpperCase();return t?/^[A-Z]+$/.test(t)||/^\d{4}\.T$/.test(t)||/^\d{6}\.(KS|KQ)$/.test(t)||/^\d{4,5}\.HK$/.test(t)?t:/^\d{6}\.(SS|SH)$/.test(t)?`${t.slice(0,6)}.SS`:/^\d{6}\.SZ$/.test(t)?t:/^(SH|SZ)\d{6}$/.test(t)?t.startsWith("SH")?`${t.slice(2)}.SS`:`${t.slice(2)}.SZ`:/^\d{6}$/.test(t)?t.startsWith("6")?`${t}.SS`:`${t}.SZ`:null:null}async function Rr(n){let t=n.toUpperCase().startsWith("SH")||n.toUpperCase().startsWith("SZ")?[n.toUpperCase()]:/^\d{6}$/.test(n)?[n.startsWith("6")?"SH"+n:"SZ"+n]:[n.toUpperCase()];try{let o=(await ft(t))?.data?.items||[];return o[0]?.quote||o[0]||null}catch{let e=await se(t);return(e?.data||e?.items||[])[0]||null}}function Jr(n){Mt({symbol:n.symbol,name:n.name,current:n.price,chg:n.change,percent:n.changePercent,last_close:n.prevClose,status:n.marketState==="REGULAR"?1:0})}function Dr(n){return{code:n.symbol,name:n.name,price:n.price,change:n.change,changePercent:n.changePercent,preclose:n.prevClose,currency:n.currency,exchange:n.exchange,marketState:n.marketState,status:n.marketState==="REGULAR"?"trading":"closed",source:"yahoo"}}function Mn(n){let t=n.trend.direction==="up"?u.red:n.trend.direction==="down"?u.green:u.yellow,e=n.trend.direction==="up"?"\u504F\u591A":n.trend.direction==="down"?"\u504F\u7A7A":"\u9707\u8361",o=n.compositeScore>=4?u.red:n.compositeScore<=2?u.green:u.yellow;console.log(`${u.bold}${u.cyan}\u8D8B\u52BF${u.reset} ${t}${e}${u.reset} \u5F3A\u5EA6${n.trend.strength} ${n.trend.maAlign}`);let r=isNaN(n.momentum.rsi)?"-":n.momentum.rsi>70?`${u.red}\u8D85\u4E70${u.reset}`:n.momentum.rsi<30?`${u.green}\u8D85\u5356${u.reset}`:"\u4E2D\u6027";console.log(`${u.bold}${u.cyan}\u52A8\u91CF${u.reset} RSI ${isNaN(n.momentum.rsi)?"-":n.momentum.rsi.toFixed(1)} ${r} MACD\u67F1 ${n.momentum.macdHistogram}`),console.log(`${u.bold}${u.cyan}\u6CE2\u52A8${u.reset} ATR ${n.volatility.atr} \u5E03\u6797\u5E26\u5BBD ${n.volatility.bollingerBandwidth.toFixed(1)}%`);let a=n.volume.trend==="rising"?`${u.red}\u653E\u91CF${u.reset}`:n.volume.trend==="falling"?`${u.green}\u7F29\u91CF${u.reset}`:"\u5E73\u91CF";console.log(`${u.bold}${u.cyan}\u91CF\u80FD${u.reset} \u91CF\u6BD4 ${n.volume.volumeRatio} ${a}`);let s=n.keyLevels?.supports??[],i=n.keyLevels?.resistances??[];console.log(`${u.bold}${u.cyan}\u652F\u6491${u.reset} ${s.length?s.map(c=>c.toFixed(2)).join(" / "):"-"}`),console.log(`${u.bold}${u.cyan}\u538B\u529B${u.reset} ${i.length?i.map(c=>c.toFixed(2)).join(" / "):"-"}`),console.log(`${u.bold}${u.cyan}\u5F62\u6001${u.reset} ${n.pattern.description}`),console.log(`${u.bold}${u.cyan}\u7EFC\u5408${u.reset} ${o}${n.compositeScore.toFixed(1)}${u.reset}/5 ${n.summary}`)}async function En(n,t,e,o){let r=ve.has(t);if(o==="xq"||!o&&r){let f=await Ct(n,{period:t,count:e});return{candles:(f?.data?.item||f?.data||[]).map(_=>({date:new Date(_[0]).toISOString().slice(0,10),open:Number(_[2]),high:Number(_[3]),low:Number(_[4]),close:Number(_[5]),volume:Number(_[1]),amount:Number(_[9]||0),turnoverRate:Number(_[8]||0)})),source:"xq"}}let s=t==="w"?"w":t==="m"?"m":t==="y"?"y":t==="5d"?"5d":"d",i=[],c,l=0,p=50;for(;i.length<e&&l++<p;){let y=(await vt(n,{period:s,limit:Math.min(e-i.length,200),start_date:c}))?.data||[];if(!y.length)break;i=[...y,...i],c=String(y[0].trade_date)}return{candles:i.slice(-e).map(f=>({date:String(f.trade_date).replace(/(\d{4})(\d{2})(\d{2})/,"$1-$2-$3"),open:Number(f.open_px),high:Number(f.high_px),low:Number(f.low_px),close:Number(f.close_px),volume:Number(f.business_amount||0)})),source:"cls"}}var ve=new Set(["1m","5m","15m","30m","60m","120m"]);function Pn(n,t){if(!n.length)return console.log("\u6682\u65E0\u6570\u636E");let{table:e}=h(["\u65E5\u671F","\u5F00","\u9AD8","\u4F4E","\u6536","\u6DA8\u8DCC%","\u6210\u4EA4\u989D"],[12,10,10,10,10,8,12],{0:14});for(let r of n){let s=`${r.change>=0?u.red:r.change<0?u.green:""}${r.change>=0?"+":""}${r.change.toFixed(2)}%${u.reset}`;e.push([String(r.trade_date),r.open_px,r.high_px,r.low_px,r.close_px,s,k(r.business_balance)])}let o={d:"\u65E5K",w:"\u5468K",m:"\u6708K",y:"\u5E74K","5d":"\u4E94\u65E5"};console.log(`${u.bold}${o[t]||t}\uFF08${n.length}\u6761\uFF09${u.reset}`),console.log(e.toString())}function Hn(n){let t=n?.data?.item||n?.data||[];if(!Array.isArray(t)||!t.length)return console.log("\u6682\u65E0\u6570\u636E");let{table:e,w:o}=h(["\u65E5\u671F","\u5F00","\u6536","\u9AD8","\u4F4E","\u6210\u4EA4\u91CF","\u6210\u4EA4\u989D"],[14,10,10,10,10,12,14],{0:14});for(let r of t){let a=new Date(r[0]),s=`${a.getFullYear()}-${String(a.getMonth()+1).padStart(2,"0")}-${String(a.getDate()).padStart(2,"0")}`;e.push([s,r[2],r[5],r[3],r[4],r[1]>=1e8?(r[1]/1e8).toFixed(2)+"\u4EBF":r[1]>=1e4?(r[1]/1e4).toFixed(2)+"\u4E07":String(r[1]),k(r[9])])}console.log(`${u.bold}K\u7EBF\uFF08${t.length}\u6761\uFF09${u.reset}`),console.log(e.toString())}function In(n,t,e){return{code:n,period:t,items:e.map(o=>({date:String(o.trade_date),open:Number(o.open_px),high:Number(o.high_px),low:Number(o.low_px),close:Number(o.close_px),volume:Number(o.business_amount||0),change:Number(o.change||0)})),total:e.length}}function Gn(n,t,e){return{code:n,period:t,items:e.map(o=>({date:new Date(o[0]).toISOString().slice(0,10),open:Number(o[2]),high:Number(o[3]),low:Number(o[4]),close:Number(o[5]),volume:Number(o[1]),amount:Number(o[9]||0),turnoverRate:Number(o[8]||0)})),total:e.length}}function Bn(n){let t=n?.data||{};if(!t.b_px_1&&t.b_px_1!==0)return console.log("\u6682\u65E0\u6570\u636E");let e=t.preclose_px,o=(s,i)=>{if(s===0)return["--","--"];let c=s-e;return[`${c>0?u.red:c<0?u.green:""}${s.toFixed(2)}${u.reset}`,k(i)]},r=[];for(let s=5;s>=1;s--){let[i,c]=o(t[`s_px_${s}`],t[`s_amount_${s}`]);r.push([`\u5356${s}`,i,c])}for(let s=1;s<=5;s++){let[i,c]=o(t[`b_px_${s}`],t[`b_amount_${s}`]);r.push([`\u4E70${s}`,i,c])}let{table:a}=h(["\u6863\u4F4D","\u4EF7\u683C","\u6570\u91CF"],[8,10,10],{1:12,2:12});for(let s of r)a.push(s);console.log(a.toString()),console.log(`\u6628\u6536: ${e}`)}function Un(n){let t=n?.data||{};if(!t.bp1&&t.bp1!==0)return console.log("\u6682\u65E0\u6570\u636E");let e=t.current??0,o=t.percent??0,r=o!==0?e/(1+o/100):0,{table:a,w:s}=h(["\u4E70\u65B9","\u4EF7\u683C","\u6570\u91CF"],[8,12,12],{1:12,2:12});for(let d=5;d>=1;d--){let m=t[`bp${d}`],f=t[`bc${d}`];if(m==null)break;let y=m-r,b=y>0?u.red:y<0?u.green:"";a.push([`\u4E70${d}`,`${b}${m}${u.reset}`,pt(f)])}let{table:i,w:c}=h(["\u5356\u65B9","\u4EF7\u683C","\u6570\u91CF"],[8,12,12],{1:12,2:12});for(let d=1;d<=5;d++){let m=t[`sp${d}`],f=t[`sc${d}`];if(m==null)break;let y=m-r,b=y>0?u.red:y<0?u.green:"";i.push([`\u5356${d}`,`${b}${m}${u.reset}`,pt(f)])}console.log(a.toString()),console.log(i.toString());let{table:l,w:p}=h(["\u6700\u65B0\u4EF7","\u4E70\u76D8\u5360\u6BD4","\u5356\u76D8\u5360\u6BD4","\u4E70\u5356\u6BD4"],[1,1,1,1]);l.push([e,`${t.buypct??"-"}%`,`${t.sellpct??"-"}%`,`${t.ratio??"-"}`]),console.log(l.toString())}function Kn(n,t){return{code:n,preclose:Number(t.preclose_px||0),asks:[5,4,3,2,1].map(e=>({price:Number(t[`s_px_${e}`]||0),volume:Number(t[`s_amount_${e}`]||0)})),bids:[1,2,3,4,5].map(e=>({price:Number(t[`b_px_${e}`]||0),volume:Number(t[`b_amount_${e}`]||0)})),source:"cls"}}function zn(n,t){let e=t.current??0,o=t.percent??0,r=o!==0?e/(1+o/100):0;return{code:n,current:e,preclose:r,asks:[1,2,3,4,5].map(a=>({price:Number(t[`sp${a}`]||0),volume:Number(t[`sc${a}`]||0)})),bids:[5,4,3,2,1].map(a=>({price:Number(t[`bp${a}`]||0),volume:Number(t[`bc${a}`]||0)})),buyPercent:t.buypct??null,sellPercent:t.sellpct??null,buySellRatio:t.ratio??null,source:"xq"}}function Qn(n){let t=n?.data?.volume||[],e=n?.data?.end;if(!t.length)return console.log("\u6682\u65E0\u6210\u4EA4");let{table:o}=h(["\u65F6\u95F4","\u4EF7\u683C","\u624B\u6570","\u65B9\u5411"],[12,10,8,8],{0:12,1:12,2:8});for(let r of t){let a=String(r.minute),s=`${a.slice(0,2)}:${a.slice(2,4)}:${a.slice(4,6)}`,i=r.change_vol_color===1?`${u.red}\u4E70${u.reset}`:`${u.green}\u5356${u.reset}`;o.push([s,r.last_px,r.change_vol,i])}console.log(o.toString()),console.log(`${u.dim}\u5171 ${e} \u7B14${u.reset}`)}function Vn(n){let t=n?.data?.items||[];if(!Array.isArray(t)||!t.length)return console.log("\u6682\u65E0\u6570\u636E");let{table:e}=h(["\u65F6\u95F4","\u4EF7\u683C","\u6570\u91CF","\u65B9\u5411"],[14,10,12,8],{0:14});for(let o of t.slice(0,50)){let r=new Date(o.timestamp),a=`${String(r.getHours()).padStart(2,"0")}:${String(r.getMinutes()).padStart(2,"0")}:${String(r.getSeconds()).padStart(2,"0")}`,s=o.side==="buy"||o.side===1?`${u.red}\u4E70${u.reset}`:o.side==="sell"||o.side===0?`${u.green}\u5356${u.reset}`:"-";e.push([a,o.current??o.price??"-",o.trade_volume??o.volume?pt(o.trade_volume??o.volume):"-",s])}console.log(e.toString())}function Wn(n,t){let e=t?.data?.volume||[],o=t?.data?.end||e.length;return{code:n,items:e.map(r=>{let a=String(r.minute),s=a.length<=3?"0"+a[0]:a.slice(0,2),i=a.length<=3?a.slice(1):a.slice(2),c=a.slice(-2);return{time:`${s}:${i}:${c}`,price:Number(r.last_px||0),volume:Number(r.change_vol||0),side:r.change_vol_color===1?"buy":"sell"}}),total:o}}function Yn(n,t){let e=t?.data?.items||[];return{code:n,items:e.slice(0,50).map(o=>({time:new Date(o.timestamp).toISOString(),price:Number(o.current||o.price||0),volume:Number(o.trade_volume||o.volume||0),side:o.side==="buy"||o.side===1?"buy":"sell"})),total:e.length}}function Xn(n){let t=n?.data||{},e=t.line||[];if(!e.length)return console.log("\u6682\u65E0\u6570\u636E");let o=t.preclose_px,r=s=>{let i=((s-o)/o*100).toFixed(2);return`${i>0?u.red:i<0?u.green:""}${i>0?"+":""}${i}%${u.reset}`},{table:a}=h(["\u65F6\u95F4","\u4EF7\u683C","\u5747\u4EF7","\u6DA8\u8DCC%","\u6210\u4EA4\u989D"],[8,10,10,10,14],{0:10});for(let s of e){let i=String(s.minute),c=i.length<=3?"0"+i[0]:i.slice(0,2),l=i.length<=3?i.slice(1):i.slice(2),p=`${c}:${l}`;a.push([p,s.last_px,s.av_px?s.av_px.toFixed(2):"-",r(s.last_px),k(s.business_balance)])}console.log(a.toString()),console.log(`\u6628\u6536: ${o}`)}function Zn(n){let t=n?.data?.items||[];if(!Array.isArray(t)||!t.length)return console.log("\u6682\u65E0\u6570\u636E");let{table:e}=h(["\u65F6\u95F4","\u4EF7\u683C","\u6210\u4EA4\u91CF","\u5747\u4EF7"],[14,10,14,10],{0:14});for(let o of t.slice(0,240)){let r=new Date(o.timestamp),a=`${String(r.getHours()).padStart(2,"0")}:${String(r.getMinutes()).padStart(2,"0")}:${String(r.getSeconds()).padStart(2,"0")}`,s=o.volume?o.volume>=1e8?(o.volume/1e8).toFixed(2)+"\u4EBF":o.volume>=1e4?(o.volume/1e4).toFixed(2)+"\u4E07":String(o.volume):"-";e.push([a,o.current??"-",s,o.avg_price??"-"])}console.log(e.toString())}function to(n,t){let e=t?.data||{},o=e.line||[],r=Number(e.preclose_px||0);return{code:n,preclose:r,items:o.map(a=>{let s=String(a.minute),i=s.length<=3?"0"+s[0]:s.slice(0,2),c=s.length<=3?s.slice(1):s.slice(2),l=Number(a.last_px||0);return{time:`${i}:${c}`,price:l,avgPrice:Number(a.av_px||0),changePercent:r>0?(l-r)/r*100:0,amount:Number(a.business_balance||0)}}),total:o.length}}function eo(n,t){let e=t?.data?.items||[];return{code:n,items:e.slice(0,240).map(o=>({time:new Date(o.timestamp).toISOString(),price:Number(o.current||0),volume:Number(o.volume||0),avgPrice:Number(o.avg_price||0)})),total:e.length}}function no(n,t){let e=Array.isArray(n?.data)?n.data:[];if(!e.length)return console.log("\u6682\u65E0\u6570\u636E");let{table:o}=h(["\u677F\u5757","\u6DA8\u8DCC\u5E45"],[65,20],{1:12});for(let r of e.slice(0,t))o.push([r.plate_name||r.secu_name||"",P((r.change??0)*100)]);console.log(o.toString())}function oo(n){let t=Array.isArray(n?.data)?n.data:[];if(!t.length)return console.log("\u6682\u65E0\u6570\u636E");let{table:e}=h(["\u677F\u5757","\u6DA8\u8DCC\u5E45","\u9886\u6DA8\u80A1"],[12,10,60],{0:12,1:12});for(let o of t){let r=(o.up_stock||[]).slice(0,3).map(a=>`${a.secu_name.trim()} ${P((a.change??0)*100)}`).join(" ");e.push([o.secu_name,P((o.change??0)*100),r])}console.log(e.toString())}function Lr(n){let t=n?.data||{},e=t.company||{};if(!e.org_name_cn&&!t.concept?.length)return console.log("\u6682\u65E0\u6570\u636E");console.log(`${u.bold}${e.org_name_cn||"-"}${u.reset}`);let o=[["\u6240\u5C5E\u884C\u4E1A",(t.industry||[]).map(a=>a.ind_name).join(", ")||"-"],["\u6982\u5FF5\u677F\u5757",(t.concept||[]).map(a=>a.ind_name).join(", ")||"-"],["\u4F01\u4E1A\u6027\u8D28",e.classi_name||"-"],["\u6240\u5728\u5730\u533A",e.provincial_name||"-"],["\u4E0A\u5E02\u65E5\u671F",e.listed_date?new Date(e.listed_date).toLocaleDateString("zh-CN"):"-"],["\u5B9E\u9645\u63A7\u5236\u4EBA",e.actual_controller||"-"],["\u4E3B\u8425\u4E1A\u52A1",e.main_operation_business||"-"]],{table:r}=h(["\u9879\u76EE","\u5185\u5BB9"],[14,1],{0:14});for(let[a,s]of o)r.push([a,s]);console.log(r.toString())}function ro(n,t){return{type:t,items:n.map(e=>({name:e.plate_name||e.secu_name||"",changePercent:Math.round((e.change||0)*100*100)/100})),total:n.length}}function ao(n){return{items:n.map(t=>({name:t.secu_name||"",changePercent:Math.round((t.change||0)*100*100)/100,topStocks:(t.up_stock||[]).slice(0,3).map(e=>({name:e.secu_name?.trim()||"",changePercent:Math.round((e.change||0)*100*100)/100}))})),total:n.length}}function Mr(n){let t=n?.data||{},e=t.company||{};return{name:e.org_name_cn||"",industry:(t.industry||[]).map(o=>o.ind_name),concept:(t.concept||[]).map(o=>o.ind_name),companyType:e.classi_name||"",region:e.provincial_name||"",listedDate:e.listed_date||"",controller:e.actual_controller||"",mainBusiness:e.main_operation_business||""}}function Er(n){let t=n?.data||{};if(!t.main_fund_in)return console.log("\u6682\u65E0\u6570\u636E");let{table:e}=h(["\u4E3B\u529B\u6D41\u5165","\u4E3B\u529B\u6D41\u51FA","\u51C0\u6D41\u5165","\u51C0\u6D41\u5165\u5360\u6BD4"],[1,1,1,1]),o=t.main_fund_in+t.main_fund_out,r=o>0?(t.main_fund_diff/o*100).toFixed(2)+"%":"-",a=t.main_fund_diff>0?u.red:u.green;e.push([k(t.main_fund_in),k(t.main_fund_out),`${a}${k(t.main_fund_diff)}${u.reset}`,r]),console.log(e.toString());let{table:s}=h(["\u8D85\u5927\u5355","\u5927\u5355","\u4E2D\u5355","\u5C0F\u5355"],[1,1,1,1]),i=l=>l>0?`${u.red}+${k(l)}${u.reset}`:`${u.green}${k(l)}${u.reset}`;s.push([i(t.super_fund_diff),i(t.large_fund_diff),i(t.medium_fund_diff),i(t.little_fund_diff)]),console.log(s.toString());let{table:c}=h(["3\u65E5\u51C0\u6D41\u5165","5\u65E5\u51C0\u6D41\u5165","10\u65E5\u51C0\u6D41\u5165","20\u65E5\u51C0\u6D41\u5165"],[1,1,1,1]);c.push([i(t.main_fund_3),i(t.main_fund_5),i(t.main_fund_10),i(t.main_fund_20)]),console.log(c.toString())}function ke(n){let t=n?.data||{},e=t.items||[];if(!Array.isArray(e)||!e.length)return console.log("\u6682\u65E0\u6570\u636E");let{table:o,w:r}=h(["\u65F6\u95F4","\u51C0\u6D41\u5165"],[16,16],{0:16});for(let a of e.slice(-20)){let s=a.timestamp?new Date(a.timestamp).toLocaleString("zh-CN",{month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"}):"-";O(o,[s,nt(a.amount??"-")],r)}if(console.log(o.toString()),t.sum3!=null){let{table:a}=h(["3\u65E5\u51C0\u6D41\u5165","5\u65E5\u51C0\u6D41\u5165","10\u65E5\u51C0\u6D41\u5165","20\u65E5\u51C0\u6D41\u5165"],[1,1,1,1]);O(a,[nt(t.sum3),nt(t.sum5),nt(t.sum10),nt(t.sum20)]),console.log(a.toString())}}function Pr(n){let t=n?.data?.items||[];if(!Array.isArray(t)||!t.length)return console.log("\u6682\u65E0\u6570\u636E");let{table:e,w:o}=h(["\u65E5\u671F","\u878D\u8D44\u4F59\u989D","\u878D\u5238\u4F59\u989D","\u878D\u8D44\u51C0\u4E70\u5165","\u878D\u8D44\u4E70\u5165\u989D"],[14,14,14,14,14],{0:14});for(let r of t.slice(0,20)){let a=r.td_date?new Date(r.td_date).toLocaleDateString("zh-CN"):"-";O(e,[a,k(r.margin_trading_amt_balance),k(r.short_selling_amt_balance),nt(r.margin_trading_net_buy_amt),k(r.margin_trading_buy_amt)],o)}console.log(e.toString())}function Hr(n){let t=n?.data||{};return{mainInflow:Number(t.main_fund_in||0),mainOutflow:Number(t.main_fund_out||0),mainNet:Number(t.main_fund_diff||0),superNet:Number(t.super_fund_diff||0),largeNet:Number(t.large_fund_diff||0),mediumNet:Number(t.medium_fund_diff||0),smallNet:Number(t.little_fund_diff||0),mainNet3d:t.main_fund_3!=null?Number(t.main_fund_3):null,mainNet5d:t.main_fund_5!=null?Number(t.main_fund_5):null,mainNet10d:t.main_fund_10!=null?Number(t.main_fund_10):null,mainNet20d:t.main_fund_20!=null?Number(t.main_fund_20):null,source:"cls"}}function so(n){let t=n?.data||{},e=t.items||[];return{items:e.map(o=>({time:o.timestamp?new Date(o.timestamp).toISOString():"",amount:Number(o.amount||0)})),total:e.length,summary:t.sum3!=null?{sum3:Number(t.sum3),sum5:Number(t.sum5),sum10:Number(t.sum10),sum20:Number(t.sum20)}:null}}function Ir(n){let t=n?.data?.items||[];return{items:t.map(e=>({date:e.td_date?new Date(e.td_date).toISOString().slice(0,10):"",marginBalance:Number(e.margin_trading_amt_balance||0),shortBalance:Number(e.short_selling_amt_balance||0),marginNetBuy:Number(e.margin_trading_net_buy_amt||0),marginBuy:Number(e.margin_trading_buy_amt||0)})),total:t.length}}function Gr(n){let t=n?.data?.items||n?.data||[];if(!Array.isArray(t)||!t.length)return console.log("\u6682\u65E0\u6570\u636E");let{table:e,w:o}=h(["#","\u80A1\u4E1C\u540D\u79F0","\u6301\u80A1\u6570","\u5360\u6BD4","\u53D8\u5316"],[4,30,14,10,12]);for(let r=0;r<t.length;r++){let a=t[r],s=a.chg_amount??a.change??"-",i=typeof s=="number"?s>0?`${u.red}+${s}${u.reset}`:s===0?"\u4E0D\u53D8":`${u.green}${s}${u.reset}`:String(s);O(e,[`${r+1}`,a.holder_name||"-",k(a.held_num),a.held_ratio?a.held_ratio.toFixed(2)+"%":"-",i],o)}console.log(e.toString())}function Br(n){let e=(n?.data||{}).items||[];if(!Array.isArray(e)||!e.length)return console.log("\u6682\u65E0\u6570\u636E");let{table:o,w:r}=h(["\u62A5\u544A\u671F","\u9664\u6743\u9664\u606F\u65E5","\u80A1\u6743\u767B\u8BB0\u65E5","\u65B9\u6848"],[14,14,14,4],{0:14});for(let a of e.slice(0,15)){let s=a.ashare_ex_dividend_date?new Date(a.ashare_ex_dividend_date).toLocaleDateString("zh-CN"):"-",i=a.equity_date?new Date(a.equity_date).toLocaleDateString("zh-CN"):"-";O(o,[a.dividend_year||"-",s,i,a.plan_explain||"-"],r)}console.log(o.toString())}function Ur(n){let t=n?.data?.items||n?.data||[];if(!Array.isArray(t)||!t.length)return console.log("\u6682\u65E0\u6570\u636E");let{table:e,w:o}=h(["\u65F6\u95F4","\u7C7B\u578B","\u6807\u9898"],[16,8,1],{0:16,1:8});for(let r of t.slice(0,20)){let a=r.begin?new Date(r.begin).toLocaleDateString("zh-CN"):"-";O(e,[a,r.cal_title||"-",r.content||"-"],o)}console.log(e.toString())}function Kr(n){let t=n?.data?.items||n?.data||[];return{items:t.map((e,o)=>({rank:o+1,holderName:e.holder_name||"",shares:Number(e.held_num||0),ratio:Number(e.held_ratio||0),change:e.chg_amount??e.change??null})),total:t.length}}function zr(n){let t=n?.data?.items||n?.data||[];return Array.isArray(t)?{items:t.map(e=>({period:e.dividend_year||"",exDividendDate:e.ashare_ex_dividend_date?new Date(e.ashare_ex_dividend_date).toISOString().slice(0,10):"",equityDate:e.equity_date?new Date(e.equity_date).toISOString().slice(0,10):"",plan:e.plan_explain||""})),total:t.length}:{items:[],total:0}}function Qr(n){let t=n?.data?.items||n?.data||[];return Array.isArray(t)?{items:t.map(e=>({date:e.begin?new Date(e.begin).toISOString().slice(0,10):"",title:e.content||""})),total:t.length}:{items:[],total:0}}function W(n){return Array.isArray(n)?n[0]:n}function io(n){let t=n?.data||{},e=t.list||[];if(!Array.isArray(e)||!e.length)return console.log("\u6682\u65E0\u6570\u636E");let o=t.quote_name||"-";console.log(`${u.bold}${o} \u4E3B\u8981\u6307\u6807${u.reset}`);let{table:r,w:a}=h(["\u62A5\u544A\u671F","ROE","\u6BCF\u80A1\u6536\u76CA","\u6BDB\u5229\u7387","\u8425\u6536\u540C\u6BD4\u589E\u957F"],[14,10,10,10,12],{0:14});for(let s of e){let i=s.report_name||"-",c=W(s.avg_roe),l=W(s.basic_eps),p=W(s.gross_selling_rate),d=W(s.operating_income_yoy);O(r,[i,c!=null?c.toFixed(2)+"%":"-",l!=null?String(l):"-",p!=null?p.toFixed(2)+"%":"-",d!=null?d.toFixed(2)+"%":"-"],a)}console.log(r.toString())}function Vr(n,t){let e=n?.data||{},o=e.list||[];if(!Array.isArray(o)||!o.length)return console.log("\u6682\u65E0\u6570\u636E");let r=e.quote_name||"-",a={cashflow:["\u62A5\u544A\u671F","\u7ECF\u8425\u73B0\u91D1\u6D41","\u6295\u8D44\u73B0\u91D1\u6D41","\u7B79\u8D44\u73B0\u91D1\u6D41","\u73B0\u91D1\u51C0\u589E\u52A0\u989D"],income:["\u62A5\u544A\u671F","\u8425\u4E1A\u6536\u5165","\u51C0\u5229\u6DA6","\u5F52\u6BCD\u51C0\u5229\u6DA6","\u6263\u975E\u51C0\u5229\u6DA6"],balance:["\u62A5\u544A\u671F","\u603B\u8D44\u4EA7","\u603B\u8D1F\u503A","\u8D44\u4EA7\u8D1F\u503A\u7387","\u51C0\u8D44\u4EA7"]},s={cashflow:["report_name","ncf_from_oa","ncf_from_ia","ncf_from_fa","net_increase_in_cce"],income:["report_name","total_revenue","net_profit","net_profit_atsopc","net_profit_after_nrgal_atsolc"],balance:["report_name","total_assets","total_liab","asset_liab_ratio","total_quity_atsopc"]},i=a[t]||a.cashflow,c=s[t]||s.cashflow,{table:l,w:p}=h(i,[14,1,1,1,1],{0:14});for(let d of o){let m=[d.report_name||"-"];for(let f=1;f<c.length;f++){let y=d[c[f]],b=W(y);b==null?m.push("-"):c[f]==="asset_liab_ratio"?m.push(b.toFixed(2)+"%"):m.push(k(b))}O(l,m,p)}console.log(`${u.bold}${r} ${t==="cashflow"?"\u73B0\u91D1\u6D41\u91CF\u8868":t==="income"?"\u5229\u6DA6\u8868":"\u8D44\u4EA7\u8D1F\u503A\u8868"}${u.reset}`),console.log(l.toString())}function co(n){let t=n?.data||{},e=t.list||[];return{name:t.quote_name||"",items:e.map(o=>({report:o.report_name||"",roe:W(o.avg_roe),eps:W(o.basic_eps),grossMargin:W(o.gross_selling_rate),revenueYoy:W(o.operating_income_yoy)})),total:e.length}}function Wr(n,t){let e=n?.data||{},o=e.list||[],r={cashflow:["report_name","ncf_from_oa","ncf_from_ia","ncf_from_fa","net_increase_in_cce"],income:["report_name","total_revenue","net_profit","net_profit_atsopc","net_profit_after_nrgal_atsolc"],balance:["report_name","total_assets","total_liab","asset_liab_ratio","total_quity_atsopc"]},a={cashflow:["report","operating","investing","financing","netIncrease"],income:["report","revenue","netProfit","netProfitAttrib","netProfitDeducted"],balance:["report","totalAssets","totalLiab","debtRatio","equity"]},s=r[t]||r.cashflow,i=a[t]||a.cashflow;return{name:e.quote_name||"",type:t,items:o.map(c=>{let l={report:c.report_name||""};for(let p=1;p<s.length;p++)l[i[p]]=W(c[s[p]]);return l}),total:o.length}}function Yr(n){let t=n?.data||n?.list||[];if(!Array.isArray(t)||!t.length)return console.log("\u672A\u627E\u5230\u7ED3\u679C");let{table:e,w:o}=h(["\u4EE3\u7801","\u540D\u79F0","\u7C7B\u578B"],[14,20,10],{0:14});for(let r of t){let a=r.code||r.symbol||"-",s=r.query||r.name||r.cn_name||"-",i=r.type===1?"\u80A1\u7968":r.type===2?"\u57FA\u91D1":r.type===3?"\u6307\u6570":String(r.type??"-");O(e,[a,s,i],o)}console.log(e.toString())}function Xr(n){let t=n?.data||n?.list||[],e={1:"stock",2:"fund",3:"index"};return{items:t.map(o=>({code:o.code||o.symbol||"",name:o.query||o.name||o.cn_name||"",type:o.type?e[o.type]||String(o.type):""})),total:t.length}}function Zr(n){let e=(n?.data||{}).items||[];return{items:e.map(o=>({time:o.timestamp?new Date(o.timestamp).toISOString():"",amount:Number(o.amount||0)})),total:e.length}}function lo(n){return n.command({command:"quote [code]",describe:"\u8BC1\u5238\u884C\u60C5",builder:t=>t.positional("code",{type:"string",describe:"\u8BC1\u5238\u4EE3\u7801"}).strictCommands(!1).command("batch <codes...>","\u6279\u91CF\u884C\u60C5\uFF08xueqiu\uFF09",e=>e,async e=>{let{f:o}=e,r=e.codes,a=r.map(c=>{let l=c.toUpperCase();return l.startsWith("SH")||l.startsWith("SZ")?l:/^\d{6}$/.test(c)?c.startsWith("6")?"SH"+c:"SZ"+c:l}),s,i;try{s=await ft(a),i=s?.data?.items||[],i.length&&i[0]?.quote&&(i=i.map(c=>({...c.quote,market:c.market})))}catch{s=await se(a),i=s?.data||s?.items||[]}g({data:i,format:o,command:`quote batch ${r.join(" ")}`,source:"xq",toJSON:()=>jr(i),printFn:Nr})}).command("related <code>","\u5173\u8054\u80A1\u7968\uFF08xueqiu\uFF09",e=>e,async e=>{let{f:o}=e,r=e.code,s=await ln(r),i=s?.data?.items||s?.data||[];g({data:s,format:o,command:`quote related ${r}`,source:"xq",toJSON:()=>({items:i.map(c=>({code:c.symbol||"",name:c.name||"",price:c.current??0,changePercent:c.percent??0,relation:c.relation||""}))}),printFn:qr})}).command("search <keyword>","\u641C\u7D22\u80A1\u7968",e=>e,async e=>{let{f:o}=e,r=e.keyword,a=await mn(r);g({data:a,format:o,command:`quote search ${r}`,source:"xq",toJSON:Xr,printFn:Yr})}).command("ta [code]","\u6280\u672F\u9762\u91CF\u5316\u5206\u6790",e=>e.positional("code",{type:"string"}).option("period",{alias:"p",type:"string",default:"d"}).option("count",{alias:"c",type:"number",default:120,describe:"K\u7EBF\u6761\u6570"}).option("src",{type:"string",choices:["cls","xq"]}),async e=>{let{f:o,p:r="d",src:a}=e,s=e.count??120,i=e.code;try{let{candles:c,source:l}=await En(i,r,s,a);if(!c.length)return console.log("\u6682\u65E0\u6570\u636E");let p=$e(c);g({data:p,format:o,command:`quote ta ${i} -p ${r} -c ${s}`,source:l,printFn:Mn})}catch(c){if(ve.has(r)&&!a){console.error(c.message||c);return}let p=a==="xq"?"cls":"xq";try{let{candles:d,source:m}=await En(i,r,s,p);if(!d.length)return console.log("\u6682\u65E0\u6570\u636E");let f=$e(d);g({data:f,format:o,command:`quote ta ${i} -p ${r} -c ${s}`,source:`(${p} fallback)`,printFn:Mn})}catch(d){console.error(d.message||d)}}}).command("kline [code]","K\u7EBF",e=>e.positional("code",{type:"string"}).option("period",{alias:"p",type:"string",default:"d"}).option("number",{alias:"n",type:"number",default:120}).option("src",{type:"string",choices:["cls","xq"]}),async e=>{let{f:o,p:r="d",n:a=120,src:s}=e,i=e.code,c=ve.has(r),l=s==="xq"||!s&&c;try{if(l){let p=await Ct(i,{period:r,count:a}),d=p?.data?.item||p?.data||[];return g({data:p,format:o,command:`quote kline ${i} -p ${r}`,source:"xq",toJSON:()=>Gn(i,r,d),printFn:Hn})}else{let p=r==="w"?"w":r==="m"?"m":r==="y"?"y":r==="5d"?"5d":"d",d=[],m,f=0,y=50;for(;d.length<a&&f++<y;){let _=await vt(i,{period:p,limit:Math.min(a-d.length,200),start_date:m});if(o==="raw")return dt(_,!0);let S=_?.data||[];if(!S.length)break;d=[...S,...d],m=String(S[0].trade_date)}let b=d.slice(-a);return g({data:b,format:o,command:`quote kline ${i} -p ${r}`,source:"cls",toJSON:_=>In(i,p,_),printFn:Pn,printArgs:[p]})}}catch{if(c&&!s)throw new Error("xq K\u7EBF\u8BF7\u6C42\u5931\u8D25\uFF0C\u5206\u949F\u7EBF\u65E0\u5907\u9009\u6570\u636E\u6E90");if((l?"cls":"xq")==="xq"){let d=await Ct(i,{period:r,count:a}),m=d?.data?.item||d?.data||[];g({data:d,format:o,command:`quote kline ${i} -p ${r}`,source:"xq (fallback)",toJSON:()=>Gn(i,r,m),printFn:Hn})}else{let d=r==="w"?"w":r==="m"?"m":r==="y"?"y":r==="5d"?"5d":"d",m=[],f,y=0,b=50;for(;m.length<a&&y++<b;){let S=await vt(i,{period:d,limit:Math.min(a-m.length,200),start_date:f});if(o==="raw")return dt(S,!0);let A=S?.data||[];if(!A.length)break;m=[...A,...m],f=String(A[0].trade_date)}let _=m.slice(-a);g({data:_,format:o,command:`quote kline ${i} -p ${r}`,source:"cls (fallback)",toJSON:S=>In(i,d,S),printFn:Pn,printArgs:[d]})}}}).command("depth [code]","\u4E94\u6863\u76D8\u53E3",e=>e.positional("code",{type:"string"}).option("src",{type:"string",choices:["cls","xq"],default:"cls"}),async e=>{let{f:o,src:r="cls"}=e,a=e.code,s=r;try{if(s==="xq"){let i=await ie(a);return g({data:i,format:o,command:`quote depth ${a} --src xq`,source:"xq",toJSON:c=>zn(a,c?.data||{}),printFn:Un})}else{let i=await Kt(a);return g({data:i,format:o,command:`quote depth ${a}`,source:"cls",toJSON:c=>Kn(a,c?.data||{}),printFn:Bn})}}catch{if((s==="xq"?"cls":"xq")==="xq"){let c=await ie(a);g({data:c,format:o,command:`quote depth ${a} --src xq`,source:"xq (fallback)",toJSON:l=>zn(a,l?.data||{}),printFn:Un})}else{let c=await Kt(a);g({data:c,format:o,command:`quote depth ${a}`,source:"cls (fallback)",toJSON:l=>Kn(a,l?.data||{}),printFn:Bn})}}}).command("ticks [code]","\u9010\u7B14\u6210\u4EA4",e=>e.positional("code",{type:"string"}).option("src",{type:"string",choices:["cls","xq"],default:"cls"}),async e=>{let{f:o,src:r="cls"}=e,a=e.code,s=r;try{if(s==="xq"){let i=await le(a);return g({data:i,format:o,command:`quote ticks ${a} --src xq`,source:"xq",toJSON:c=>Yn(a,c),printFn:Vn})}else{let i=await zt(a);return g({data:i,format:o,command:`quote ticks ${a}`,source:"cls",toJSON:c=>Wn(a,c),printFn:Qn})}}catch{if((s==="xq"?"cls":"xq")==="xq"){let c=await le(a);g({data:c,format:o,command:`quote ticks ${a} --src xq`,source:"xq (fallback)",toJSON:l=>Yn(a,l),printFn:Vn})}else{let c=await zt(a);g({data:c,format:o,command:`quote ticks ${a}`,source:"cls (fallback)",toJSON:l=>Wn(a,l),printFn:Qn})}}}).command("timeline [code]","\u5206\u65F6\u7EBF",e=>e.positional("code",{type:"string"}).option("src",{type:"string",choices:["cls","xq"],default:"cls"}),async e=>{let{f:o,src:r="cls"}=e,a=e.code,s=r;try{if(s==="xq"){let i=await ce(a,{period:"1d"});return g({data:i,format:o,command:`quote timeline ${a} --src xq`,source:"xq",toJSON:c=>eo(a,c),printFn:Zn})}else{let i=await Qt(a);return g({data:i,format:o,command:`quote timeline ${a}`,source:"cls",toJSON:c=>to(a,c),printFn:Xn})}}catch{if((s==="xq"?"cls":"xq")==="xq"){let c=await ce(a,{period:"1d"});g({data:c,format:o,command:`quote timeline ${a} --src xq`,source:"xq (fallback)",toJSON:l=>eo(a,l),printFn:Zn})}else{let c=await Qt(a);g({data:c,format:o,command:`quote timeline ${a}`,source:"cls (fallback)",toJSON:l=>to(a,l),printFn:Xn})}}}).command("sector [code]","\u677F\u5757",e=>e.positional("code",{type:"string"}).strictCommands(!1).command("rank","\u677F\u5757\u6392\u884C",o=>o.option("type",{alias:"t",type:"string",default:"industry"}),async o=>{let{f:r,n:a=10,t:s="industry"}=o,i=await Ut({type:s}),c=Array.isArray(i?.data)?i.data:[];g({data:i,format:r,command:`quote sector rank -t ${s}`,source:"cls",toJSON:()=>ro(c,s),printFn:no,printArgs:[a]})}).command("plate <code>","\u4E2A\u80A1\u677F\u5757",o=>o,async o=>{let{f:r}=o,a=o.code,s=await Vt(a),i=Array.isArray(s?.data)?s.data:[];g({data:s,format:r,command:`quote sector plate ${a}`,source:"cls",toJSON:()=>ao(i),printFn:oo})}).command("industry <code>","\u884C\u4E1A\u4FE1\u606F",o=>o,async o=>{let{f:r}=o,a=o.code,s=a.length<=6?a.toUpperCase().startsWith("SH")||a.toUpperCase().startsWith("SZ")?a:a.toUpperCase():a,i=await bn(s);g({data:i,format:r,command:`quote sector industry ${a}`,source:"xq",toJSON:Mr,printFn:Lr})}),async e=>{let{code:o,f:r,n:a=10}=e;if(o){let s=await Vt(o),i=Array.isArray(s?.data)?s.data:[];g({data:s,format:r,command:`quote sector ${o}`,source:"cls",toJSON:()=>ao(i),printFn:oo})}else{let s=await Ut({type:"industry"}),i=Array.isArray(s?.data)?s.data:[];g({data:s,format:r,command:"quote sector",source:"cls",toJSON:()=>ro(i,"industry"),printFn:no,printArgs:[a]})}}).command("flow [code]","\u8D44\u91D1\u6D41\u5411",e=>e.positional("code",{type:"string"}).strictCommands(!1).command("market","\u5317\u5411/\u5357\u5411\u8D44\u91D1",o=>o,async o=>{let{f:r}=o,a=await gt();g({data:a,format:r,command:"quote flow market",source:"glh",toJSON:St,printFn:wt})}).command("history <code>","\u5386\u53F2\u8D44\u91D1\u6D41",o=>o.option("count",{alias:"c",type:"number",default:20}),async o=>{let{f:r,c:a=20}=o,s=o.code,i=await wn(s,{count:a});g({data:i,format:r,command:`quote flow history ${s}`,source:"xq",toJSON:so,printFn:ke})}).command("margin <code>","\u878D\u8D44\u878D\u5238",o=>o,async o=>{let{f:r}=o,a=o.code,s=await Sn(a);g({data:s,format:r,command:`quote flow margin ${a}`,source:"xq",toJSON:Ir,printFn:Pr})}).command("intraday <code>","\u5F53\u65E5\u8D44\u91D1\u6D41\u5411\uFF08xueqiu\uFF09",o=>o,async o=>{let{f:r}=o,a=o.code,i=await ue(a);g({data:i,format:r,command:`quote flow intraday ${a}`,source:"xq",toJSON:so,printFn:ke})}).command("xq <code>","\u96EA\u7403\u8D44\u91D1\u6D41",o=>o,async o=>{let{f:r}=o,a=o.code,i=await ue(a);g({data:i,format:r,command:`quote flow xq ${a}`,source:"xq",toJSON:Zr,printFn:ke})}),async e=>{let{code:o,f:r}=e;if(o){let a=await Ee(o);g({data:a,format:r,command:`quote flow ${o}`,source:"cls",toJSON:Hr,printFn:Er})}else{let a=await gt();g({data:a,format:r,command:"quote flow market",source:"glh",toJSON:St,printFn:wt})}}).command("f10 [code]","\u57FA\u672C\u9762",e=>e.positional("code",{type:"string"}).strictCommands(!1).command("holders <code>","\u5341\u5927\u80A1\u4E1C",o=>o,async o=>{let{f:r}=o,a=o.code,s=await hn(a);g({data:s,format:r,command:`quote f10 holders ${a}`,source:"xq",toJSON:Kr,printFn:Gr})}).command("bonus <code>","\u5206\u7EA2\u9001\u80A1",o=>o,async o=>{let{f:r}=o,a=o.code,s=await _n(a);g({data:s,format:r,command:`quote f10 bonus ${a}`,source:"xq",toJSON:zr,printFn:Br})}).command("event <code>","\u516C\u53F8\u5927\u4E8B",o=>o,async o=>{let{f:r}=o,a=o.code,s=await un(a);g({data:s,format:r,command:`quote f10 event ${a}`,source:"xq",toJSON:Qr,printFn:Ur})}).command("indicator <code>","\u4E3B\u8981\u6307\u6807",o=>o,async o=>{let{f:r}=o,a=o.code,s=await yn(a);g({data:s,format:r,command:`quote f10 indicator ${a}`,source:"xq",toJSON:co,printFn:io})})).command("finance [code]","\u8D22\u52A1\u62A5\u8868",e=>e.positional("code",{type:"string"}).option("type",{alias:"t",type:"string",choices:["indicator","cashflow","income","balance"],default:"indicator"}),async e=>{let{f:o,t:r="indicator"}=e,a=e.code;if(r==="indicator"){let s=await dn(a);g({data:s,format:o,command:`quote finance indicator ${a}`,source:"xq",toJSON:co,printFn:io})}else{let i={cashflow:pn,income:fn,balance:gn}[r];if(!i)return console.log(`\u672A\u77E5\u7C7B\u578B: ${r}`);let c=await i(a);g({data:c,format:o,command:`quote finance ${r} ${a}`,source:"xq",toJSON:l=>Wr(l,r),printFn:Vr,printArgs:[r]})}}),handler:async t=>{let{f:e}=t,o=t.code;if(!o){console.log("\u8BF7\u63D0\u4F9B\u8BC1\u5238\u4EE3\u7801\uFF0C\u4F8B\u5982: finflow quote sh600519"),console.log("\u8FD0\u884C finflow quote --help \u67E5\u770B\u6240\u6709\u5B50\u547D\u4EE4");return}if(o){if(["search","batch","related","kline","ta","depth","ticks","timeline","sector","flow","f10","finance"].includes(o)){console.log(`\u8BF7\u63D0\u4F9B\u5B50\u547D\u4EE4\u53C2\u6570\uFF0C\u4F8B\u5982: finflow quote ${o} <code>`);return}try{let i=await Me(o);if(Cr(i)){g({data:i,format:e,command:`quote ${o}`,source:"cls",toJSON:Or,printFn:Mt});return}}catch{}let a=null;try{a=await Rr(o)}catch{}if(Fr(a)){g({data:a,format:e,command:`quote ${o}`,source:"xq (fallback)",toJSON:i=>({code:i.symbol||"",name:i.name||"",price:i.current??0,change:i.chg??0,changePercent:Math.round((i.percent??0)*1e4)/100,open:i.open??0,high:i.high??0,low:i.low??0,preclose:i.last_close??0,volume:i.volume??0,amount:i.amount??0,turnoverRate:i.turnover_rate??0,amplitude:i.amplitude??0,avgPrice:i.avg_price??0,volumeRatio:i.volume_ratio??0,pe:i.pe_ttm??null,pb:i.pb??null,marketCap:i.market_capital??0,change3d:null,change5d:null,status:i.status===1?"trading":"closed",source:"xq (fallback)"}),printFn:Mt});return}let s=Tr(o);if(s){let i=await Ae(s);if(i){g({data:i,format:e,command:`quote ${o}`,source:"yahoo (fallback)",toJSON:Dr,printFn:Jr});return}}if(a){g({data:a,format:e,command:`quote ${o}`,source:"xq (fallback)",toJSON:i=>({code:i.symbol||"",name:i.name||"",price:i.current??0,change:i.chg??0,changePercent:Math.round((i.percent??0)*1e4)/100,open:i.open??0,high:i.high??0,low:i.low??0,preclose:i.last_close??0,volume:i.volume??0,amount:i.amount??0,turnoverRate:i.turnover_rate??0,amplitude:i.amplitude??0,avgPrice:i.avg_price??0,volumeRatio:i.volume_ratio??0,pe:i.pe_ttm??null,pb:i.pb??null,marketCap:i.market_capital??0,change3d:null,change5d:null,status:i.status===1?"trading":"closed",source:"xq (fallback)"}),printFn:Mt});return}throw new Error(`cls\u3001xq \u548C Yahoo \u5747\u65E0\u6CD5\u83B7\u53D6 ${o} \u7684\u884C\u60C5\u6570\u636E`)}}})}function ta(n){let t=n?.data||{};if(!t.market_degree)return console.log("\u6682\u65E0\u6570\u636E\uFF08\u975E\u4EA4\u6613\u65F6\u6BB5\uFF09");let{table:e}=h(["\u5E02\u573A\u70ED\u5EA6","\u6DA8\u505C","\u5F00\u677F","\u5C01\u677F\u7387","\u6210\u4EA4\u989D","\u8F83\u4E0A\u65E5"],[8,8,8,8,14,14]);e.push([t.market_degree,t.up_ratio_num,t.up_open_num,t.up_ratio,t.shsz_balance,t.shsz_balance_change_px]),console.log(e.toString());let o=t.limit_up_board;if(o){let{table:s}=h(["\u8FDE\u677F","\u4E00\u677F","\u4E8C\u677F","\u4E09\u677F","\u9AD8\u5EA6\u677F"],[8,8,8,8,10]),i=o.row2||[],c=o.row3||[];s.push(["\u6570\u91CF",i[0]||"-",i[1]||"-",i[2]||"-",i[3]||"-"]),s.push(["\u664B\u7EA7\u7387",c[1]||"-",c[2]||"-",c[3]||"-",""]),console.log(s.toString())}let{table:r}=h(["\u6628\u65E5\u6DA8\u505C\u8868\u73B0","\u9AD8\u5F00\u7387","\u83B7\u5229\u7387"],[20,12,12]);r.push([t.performance,t.up_open_ratio,t.profit_ratio]),console.log(r.toString());let a=t.up_down_dis;if(a&&a.status){let{table:s}=h(["\u6DA8\u505C","\u8DCC\u505C","\u4E0A\u6DA8","\u4E0B\u8DCC","\u5E73\u76D8","\u505C\u724C"],[8,8,8,8,8,8]);s.push([a.up_num,a.down_num,a.rise_num,a.fall_num,a.flat_num,a.suspend_num]),console.log(s.toString())}}function ea(n,t){let e=n?.data,o=Array.isArray(e)?e:e?.data||[];if(!o.length)return console.log("\u6682\u65E0\u6570\u636E");let{table:r}=h(["\u540D\u79F0","\u4EE3\u7801","\u6DA8\u8DCC\u989D","\u6DA8\u8DCC\u5E45"],[40,20,15,15],{1:12,2:12,3:18});for(let a of o.slice(0,t))r.push([a.secu_name||"",a.secu_code||"",String(a.change_px??a.last_px??"-"),P(a.change)]);console.log(r.toString())}function uo(n){let t=n.result||[],e=t.filter(a=>a.category==="\u6307\u6570"),o=t.filter(a=>a.category==="\u6CAA\u6E2F\u6DF1\u901A"),{table:r}=h(["\u6307\u6570","\u6700\u65B0\u4EF7","\u6DA8\u8DCC\u989D","\u6DA8\u8DCC\u5E45"],[3,2,2,2]);for(let a of e)r.push([a.name,a.value?.toFixed(3)??"-",a.change?.toFixed(2)??"-",P(a.netChange)]);console.log(r.toString()),console.log();for(let a of o){let s=a.sh!=null?k(a.sh):"-",i=a.sz!=null?k(a.sz):"-";console.log(u.bold+a.name+u.reset+` \u6CAA: ${s} \u6DF1: ${i}`)}}function na(n,t){let e=(n.result||[]).slice(0,t),{table:o}=h(["\u540D\u79F0","\u4EE3\u7801","\u6700\u65B0\u4EF7","\u6DA8\u8DCC\u5E45"],[3,2,2,2]);for(let r of e)o.push([r.stockName,r.stockType+r.stockCode,r.currentPrice?.toFixed(3)??"-",P(r.netChange)]);console.log(o.toString())}function oa(n){let t=n?.data||{},e=t.limit_up_board||{},o=t.up_down_dis||{};return{marketDegree:t.market_degree||0,limitUp:Number(t.up_ratio_num||0),limitOpen:Number(t.up_open_num||0),sealRate:parseFloat(t.up_ratio)||0,turnover:t.shsz_balance||"",turnoverChange:t.shsz_balance_change_px||"",limitUpBoard:e.row2?{total:e.row2[0]||0,first:e.row2[1]||0,second:e.row2[2]||0,third:e.row2[3]||0,promoteRate:e.row3?{first:e.row3[1]||"",second:e.row3[2]||"",third:e.row3[3]||""}:{}}:null,prevPerformance:t.performance||"",gapUpRate:t.up_open_ratio||"",profitRate:t.profit_ratio||"",distribution:o.status?{limitUp:Number(o.up_num||0),limitDown:Number(o.down_num||0),rise:Number(o.rise_num||0),fall:Number(o.fall_num||0),flat:Number(o.flat_num||0),suspend:Number(o.suspend_num||0)}:null,source:"cls"}}function mo(n){let t=n.result||[],e=t.filter(r=>r.category==="\u6307\u6570"),o=t.filter(r=>r.category==="\u6CAA\u6E2F\u6DF1\u901A");return{indices:e.map(r=>({name:r.name,value:Number(r.value||0),change:Number(r.change||0),changePercent:Number(r.netChange||0)})),capitalFlow:o.map(r=>({name:r.name,shanghai:r.sh??null,shenzhen:r.sz??null})),source:"glh"}}function ra(n){let t=n?.data,e=Array.isArray(t)?t:t?.data||[];return{items:e.map(o=>({code:o.secu_code||"",name:o.secu_name||"",change:o.change_px??null,changePercent:o.change??null})),total:e.length}}function aa(n){let t=n.result||[];return{items:t.map(e=>({name:e.stockName||"",code:(e.stockType||"")+(e.stockCode||""),price:e.currentPrice??null,changePercent:e.netChange??null})),total:t.length}}function po(n){return n.command({command:"market",describe:"\u5E02\u573A\u603B\u89C8",builder:t=>t.strictCommands(!1).command("emotion","\u5E02\u573A\u60C5\u7EEA\uFF08cls\uFF09",e=>e,async e=>{let{f:o}=e,r=await He();g({data:r,format:o,command:"market emotion",source:"cls",toJSON:oa,printFn:ta})}).command("rank [type]","\u6DA8\u8DCC\u6392\u884C\uFF08cls\uFF09",e=>e,async e=>{let{f:o,n:r=10}=e,a=e.type||"change",s=Xt[a]||Xt.change,i=await Le({way:s.way});g({data:i,format:o,command:"market rank",source:"cls",toJSON:ra,printFn:ea,printArgs:[r]})}).command("index","\u5927\u76D8\u6307\u6570\uFF08glh\uFF09",e=>e,async e=>{let{f:o}=e,r=await fe();g({data:r,format:o,command:"market index",source:"glh",toJSON:mo,printFn:uo})}).command("hk [sort]","\u6E2F\u80A1\u6392\u884C\uFF08glh\uFF09",e=>e.option("order",{alias:"o",type:"string",choices:["asc","desc"],default:"desc",describe:"\u6392\u5E8F\u65B9\u5411"}),async e=>{let{f:o,n:r=10}=e,a=e.sort,s=e.order||"desc",i=Cn(a),c=await jn({sort:i.id,order:s});g({data:c,format:o,command:"market hk",source:"glh",toJSON:aa,printFn:na,printArgs:[r]})}).command("flow","\u6CAA\u6DF1\u6E2F\u901A\u8D44\u91D1\u6D41\u5411",e=>e,async e=>{let{f:o}=e,r=await gt();g({data:r,format:o,command:"market flow",source:"glh",toJSON:St,printFn:wt})}).command("rates","\u5168\u7403\u592E\u884C\u5229\u7387\uFF08jin10\uFF09",e=>e,async e=>{let{f:o}=e,r=await Qe(),a=r?.data?.list||[];if(o==="text"){if(!a.length)return console.log("\u6682\u65E0\u6570\u636E");let{table:s}=h(["\u592E\u884C","\u5229\u7387","\u66F4\u65B0\u65F6\u95F4"],[20,14,14],{0:20,2:14});for(let i of a)s.push([i.bankName||"-",i.interestRate||"-",(i.publishTime||"").slice(0,10)]);console.log(s.toString())}else g({data:r,format:o,command:"market rates",source:"jin10",toJSON:()=>({items:a.map(s=>({bank:s.bankName,rate:s.interestRate,date:s.publishTime}))})})}),handler:async t=>{let{f:e}=t,o=await fe();g({data:o,format:e,command:"market",source:"glh",toJSON:mo,printFn:uo})}})}import{inflateSync as sa}from"zlib";var ia="wss://wss-flash-2.jin10.com/",Et={DATA:0,HOLIDAY:1,EVENT:2,HOLIDAY_PAGE:3,A_SHARE:4,FIVE_STAR:5,QH_DATA:6,QH_HOLIDAY:7,QH_EVENT:8,US_DATA:9,US_HOLIDAY:10,US_EVENT:11,HK_DATA:12,HK_HOLIDAY:13,HK_EVENT:14},Pt={LOGIN:4002,CACHE_DATA:2006,CALENDAR_DATA:2001,CALENDAR_EVENT:2003,CALENDAR_HOLIDAY:2004,CALENDAR_HOLIDAY_PAGE:2005},mt=class{buffer;dv;pos;constructor(t){this.buffer=t instanceof ArrayBuffer?t:t instanceof Uint8Array?t.buffer:new ArrayBuffer(2048),this.dv=new DataView(this.buffer),this.pos=0}w16L(t){this.dv.setInt16(this.pos,t,!0),this.pos+=2}wU16L(t){this.dv.setUint16(this.pos,t,!0),this.pos+=2}w32L(t){this.dv.setInt32(this.pos,t,!0),this.pos+=4}wU32L(t){this.dv.setUint32(this.pos,t,!0),this.pos+=4}wStrL(t){let e=Buffer.from(t,"utf-8");this.wU16L(e.length);for(let o=0;o<e.length;o++)this.dv.setUint8(this.pos++,e[o])}r16L(){let t=this.dv.getInt16(this.pos,!0);return this.pos+=2,t}rU16L(){let t=this.dv.getUint16(this.pos,!0);return this.pos+=2,t}rU32L(){let t=this.dv.getUint32(this.pos,!0);return this.pos+=4,t}rStrL(){let t=this.rU16L(),e=Buffer.from(this.buffer,this.pos,t).toString("utf-8");return this.pos+=t,e}toBuffer(){return this.buffer.slice(0,this.pos)}};function fo(n,t){let e;n instanceof Uint8Array?e=new Uint8Array(n.buffer,n.byteOffset,n.byteLength):e=new Uint8Array(n);let o=new Uint8Array(e.length),r=t.charCodeAt(0);for(let a=0;a<e.length;a++)o[a]=e[a]^t.charCodeAt((a+r)%t.length);return o.buffer}function ca(n,t){return fo(n,t)}function la(n){try{return sa(Buffer.from(n,"base64")).toString("utf-8")}catch{return null}}var Ne=class{ws=null;encryptKey="";requestId=Math.floor(Math.random()*1e6);userId;loginType;userLevel;userAgent;timeout;_pending=new Map;constructor(t={}){this.userId=t.userId||"",this.loginType=t.loginType||"calendar",this.userLevel=t.userLevel||1,this.userAgent=t.userAgent||"chrome",this.timeout=t.timeout||5e3}connect(){return new Promise((t,e)=>{let o=setTimeout(()=>{this.ws?.close(),e(new Error("WebSocket \u8FDE\u63A5\u8D85\u65F6"))},this.timeout);this.ws=new WebSocket(ia),this.ws.binaryType="arraybuffer",this.ws.onmessage=r=>{let a=r.data;if(!this.encryptKey){let l=new mt(a);l.rU32L();let p=l.rU32L(),d=l.rU32L();this.encryptKey=`${d}.${p}`,this._sendLogin();return}let s=fo(a,this.encryptKey),i=new mt(s),c=i.r16L();if(c===Pt.LOGIN){clearTimeout(o),t();return}if(c===Pt.CACHE_DATA){i.rU32L(),i.rStrL();let l=i.rU32L(),p=i.rStrL(),d=this._pending.get(l);if(d){this._pending.delete(l),clearTimeout(d.timer);try{let m=JSON.parse(p);if(m.data){let f=la(m.data);d.resolve(f?JSON.parse(f):null)}else d.resolve(null)}catch(m){d.reject(m)}}}},this.ws.onerror=()=>{clearTimeout(o),e(new Error("WebSocket \u8FDE\u63A5\u5931\u8D25"))}})}_sendLogin(){let t=new mt;t.w16L(Pt.LOGIN),t.w32L(parseInt(this.userId)||0),t.wStrL(""),t.wStrL(this.userAgent),t.w32L(this.userLevel),t.wStrL(this.loginType),this._send(t)}_send(t){let e=t.toBuffer(),o=this.encryptKey?ca(e,this.encryptKey):e;this.ws.send(o)}_request(t,e){return new Promise((o,r)=>{let a=this.requestId++,s=setTimeout(()=>{this._pending.delete(a),r(new Error("\u8BF7\u6C42\u8D85\u65F6"))},this.timeout);this._pending.set(a,{resolve:o,reject:r,timer:s});let i=new mt;i.w16L(Pt.CACHE_DATA),i.wU32L(t),i.wStrL(e),i.wU32L(a),this._send(i)})}close(){this.ws?.close(),this.ws=null,this.encryptKey="",this._pending.clear()}getFuturesData(t){return this._request(Et.QH_DATA,t)}getHKStockData(t){return this._request(Et.HK_DATA,t)}getUSStockData(t){return this._request(Et.US_DATA,t)}getAShareData(t={}){let e=[];return t.page&&e.push(`page=${t.page}`),t.limit!=null&&e.push(`limit=${t.limit}`),t.region&&e.push(`region=${t.region}`),t.star!=null&&e.push(`star=${t.star}`),t.determine!=null&&e.push(`determine=${t.determine}`),this._request(Et.A_SHARE,e.join("&"))}};async function go(n){let t=new Ne(n);return await t.connect(),t}async function qe(n,...t){let e=await go();try{return await e[n](...t)}finally{e.close()}}function ho(n){let t=n?.data||[];if(!t.length)return console.log("\u6682\u65E0\u6570\u636E\uFF08\u8BE5\u65E5\u671F\u65E0\u4E8B\u4EF6\uFF09");let{table:e,w:o}=h(["\u65F6\u95F4","\u677F\u5757","\u65B9\u5411"],[14,50,10],{0:16});for(let r of t){let a=r.c_time?r.c_time.slice(5,16):"-",s=r.float==="up"?`${u.red}\u4E0A\u6DA8${u.reset}`:`${u.green}\u4E0B\u8DCC${u.reset}`;e.push([a,w(r.symbol_name||r.event||"",o?.[1]||50),s])}console.log(e.toString())}function ua(n){let t=n?.data?.data||n?.data,e=Array.isArray(t)?t:t?Object.values(t):[];if(!e.length){console.log("\u6682\u65E0\u6570\u636E");return}let{table:o,w:r}=h(["\u65E5\u671F","\u5E02\u573A","\u540D\u79F0","\u5907\u6CE8"],[14,16,32,16],{0:14,1:16,2:32});for(let a of e)o.push([(a.date||"").slice(5,16),a.exchange_name||"",w(a.name||"",r?.[2]||32),w(a.rest_note||"",r?.[3]||16)]);console.log(o.toString())}function Oe(n){if(!n?.length){console.log("\u6682\u65E0\u6570\u636E");return}let{table:t,w:e}=h(["\u65F6\u95F4","\u6307\u6807","\u524D\u503C","\u9884\u671F","\u516C\u5E03","\u56FD\u5BB6"],[14,36,8,8,8,8],{0:14});for(let o of n){let r=Z(o.star),a=r?`${r} `:"";t.push([(o.pub_time||"").slice(5,16),w(a+(o.indicator_name||o.name||""),e?.[1]||36),o.previous??"",o.consensus??"",o.actual??"",o.country||""])}console.log(t.toString())}function ma(n){if(!n?.length){console.log("\u6682\u65E0\u6570\u636E");return}let{table:t,w:e}=h(["\u65F6\u95F4","\u5927\u4E8B","\u56FD\u5BB6"],[14,60,8],{0:14,2:8});for(let o of n){let r=Z(o.star),a=r?`${r} `:"";t.push([(o.pub_time||o.event_time||"").slice(5,16),w(a+(o.event_content||o.name||""),e?.[1]||60),o.country||""])}console.log(t.toString())}function da(n){let t=n?.data||[];if(!t.length){console.log("\u6682\u65E0\u6570\u636E");return}let{table:e,w:o}=h(["\u65F6\u95F4","\u5927\u4E8B","\u91CD\u8981","\u6807\u7684"],[14,54,6,20],{0:14,2:6});for(let r of t){let a=Z(r.star),s=(r.stocks||[]).map(l=>l.name||l.code).join(" ")||"",i=(r.region||[]).map(l=>l.name).join(" ")||"",c=s||i;e.push([(r.date||"").slice(5,16),w(r.event||"",o?.[1]||54),a||"",w(c,o?.[3]||20)])}console.log(e.toString())}function je(n){return{items:n.map(t=>({time:t.pub_time||"",indicator:t.indicator_name||t.name||"",importance:t.star??0,previous:t.previous??null,consensus:t.consensus??null,actual:t.actual??null,country:t.country||""})),total:n.length}}function yo(n){let t=n?.data||[];return{items:t.map(e=>({time:e.c_time?e.c_time.slice(5,16):"",name:e.symbol_name||e.event||"",direction:e.float==="up"?"up":e.float==="down"?"down":""})),total:t.length}}function pa(n){let t=n?.data||[];return{items:t.map(e=>({time:e.event_time||"",country:e.country||"",importance:e.star??0,event:e.event_content||"",people:e.people||""})),total:t.length}}function fa(n){let t=n?.data?.data||n?.data,e=Array.isArray(t)?t:t?Object.values(t):[];return{items:e.map(o=>({date:(o.date||"").slice(5,16),market:o.exchange_name||"",name:o.name||"",note:o.rest_note||""})),total:e.length}}function ga(n){let t=n?.data||[];return{items:t.map(e=>({date:(e.date||"").slice(5,16),event:e.event||"",importance:e.star??0,stocks:(e.stocks||[]).map(o=>({name:o.name,code:o.code})),regions:(e.region||[]).map(o=>({name:o.name}))})),total:t.length}}function ha(n){let t=n?.data||[];return{items:t.map(e=>({time:e.public_time||"",country:e.country||"",event:e.eventcontent||""})),total:t.length}}function ya(n){let t=n?.data||[];return{items:t.map(e=>({time:e.holiday_time||"",country:e.country||"",market:e.market||"",name:e.holiday_name||"",description:e.description||""})),total:t.length}}function bo(n){return n.command({command:"calendar",describe:"\u5B8F\u89C2\u65E5\u5386",builder:t=>t.strictCommands(!1).command("invest [date]","A\u80A1\u6295\u8D44\u65E5\u5386\uFF08cls\uFF0C\u9ED8\u8BA4\u4ECA\u5929\uFF09",e=>e,async e=>{let{f:o}=e,r=e.date||H(),a=await Wt({date:r});g({data:a,format:o,command:"calendar invest",source:"cls",toJSON:yo,printFn:ho})}).command("macro [date]","\u5168\u7403\u5B8F\u89C2\u6570\u636E\uFF08jin10\uFF09",e=>e,async e=>{let{f:o}=e,r=e.date||H(),a=rt(),s=await Ye(r,"cj",a?{cookie:a}:void 0);if(o==="text"){let i=s?.data||[];Oe(i.map(c=>({pub_time:c.pub_time,indicator_name:c.indicator_name,previous:c.previous,consensus:c.consensus,actual:c.actual,star:c.star,country:c.country})))}else g({data:s,format:o,command:"calendar macro",source:"jin10",toJSON:i=>je(i?.data||[])})}).command("event [date]","\u5B8F\u89C2\u5927\u4E8B\uFF08jin10\uFF09",e=>e,async e=>{let{f:o}=e,r=e.date||H(),a=rt(),s=await Xe(r,"cj",a?{cookie:a}:void 0);if(o==="text"){let i=s?.data||[];ma(i.map(c=>({pub_time:c.event_time,event_content:c.event_content,star:c.star,country:c.country})))}else g({data:s,format:o,command:"calendar event",source:"jin10",toJSON:pa})}).command("holiday [date]","\u5168\u7403\u5047\u671F\uFF08jin10\uFF09",e=>e,async e=>{let{f:o}=e,r=e.date||H(),a=rt(),s=await Ze(r,"cj",a?{cookie:a}:void 0);g({data:s,format:o,command:"calendar holiday",source:"jin10",toJSON:fa,printFn:ua})}).command("ashare","A\u80A1\u5927\u4E8B\uFF08jin10\uFF09",e=>e,async e=>{let{f:o}=e,r=await qe("getAShareData",{page:1});g({data:r,format:o,command:"calendar ashare",source:"jin10",toJSON:ga,printFn:da})}).command("hk [date]","\u6E2F\u80A1\u6570\u636E\uFF08jin10\uFF09",e=>e,async e=>{let{f:o}=e,r=e.date||H(),a=await qe("getHKStockData",r);g({data:a,format:o,command:"calendar hk",source:"jin10",toJSON:s=>je(Array.isArray(s)?s:[]),printFn:Oe})}).command("us [date]","\u7F8E\u80A1\u6570\u636E\uFF08jin10\uFF09",e=>e,async e=>{let{f:o}=e,r=e.date||H(),a=await qe("getUSStockData",r);g({data:a,format:o,command:"calendar us",source:"jin10",toJSON:s=>je(Array.isArray(s)?s:[]),printFn:Oe})}).command("future-event [date]","\u671F\u8D27\u65E5\u5386\u4E8B\u4EF6\uFF08jin10\uFF09",e=>e,async e=>{let{f:o}=e,r=e.date||H(),a=await qt(r);if(o==="text"){let s=a?.data||[];if(!s.length)return console.log("\u6682\u65E0\u6570\u636E");let{table:i,w:c}=h(["\u65F6\u95F4","\u56FD\u5BB6","\u4E8B\u4EF6"],[14,8,50],{0:16});for(let l of s)O(i,[l.public_time||"",l.country||"",w(l.eventcontent||"",c?.[2]||50)],c);console.log(i.toString())}else g({data:a,format:o,command:"calendar future-event",source:"jin10",toJSON:ha})}).command("future-holiday [date]","\u671F\u8D27\u65E5\u5386\u5047\u671F\uFF08jin10\uFF09",e=>e,async e=>{let{f:o}=e,r=e.date||H(),a=await Ot(r);if(o==="text"){let s=a?.data||[];if(!s.length)return console.log("\u6682\u65E0\u6570\u636E");let{table:i,w:c}=h(["\u65F6\u95F4","\u56FD\u5BB6","\u5E02\u573A","\u8282\u65E5","\u5B89\u6392"],[14,8,12,20,26],{0:16});for(let l of s){let p=(l.holiday_time||"").slice(5,16);O(i,[p,l.country||"",l.market||"",w(l.holiday_name||"",c?.[3]||20),w(l.description||"",c?.[4]||26)],c)}console.log(i.toString())}else g({data:a,format:o,command:"calendar future-holiday",source:"jin10",toJSON:ya})}),handler:async t=>{let{f:e}=t,o=await Wt({date:H()});g({data:o,format:e,command:"calendar",source:"cls",toJSON:yo,printFn:ho})}})}function ba(n,t){let e=(n?.data||[]).slice(0,t);if(!e.length){console.log("\u6682\u65E0\u6570\u636E");return}let{table:o,w:r}=h(["\u65F6\u95F4","\u5185\u5BB9","\u6765\u6E90","\u6807\u7684"],[10,58,10,14],{0:14});for(let a of e){let s=ut(a.data?.content||a.data?.title||"",a),i=Z(a.important),c=at(a.remark),p=(i?`${i} `:"")+s;o.push([yt(a.time),w(p,r?.[1]||58),a.data?.source||"",w(c,r?.[3]||14)])}console.log(o.toString())}function _a(n){let t=n?.data?.list||[];return{items:t.map(e=>({title:e.title||"",hot:!!e.hot,updatedAt:e.updated_at||""})),total:t.length}}function wa(n){return{groups:(n?.data?.list||[]).map(e=>({name:e.name||"",items:(e.data||[]).filter(o=>o.published===1).map(o=>({category:o.category||"",city:o.city||"",spot:o.spot_data??null,futures:o.futures_data??null,basis:o.jicha??null,basisRate:o.jicha_rate??null}))}))}}function Sa(n){let t=n?.data||[];return{items:t.map(e=>({time:e.time_show||"",country:e.country||"",indicator:e.name||"",importance:e.star??0,previous:e.previous??null,consensus:e.consensus??null,actual:e.actual??null,unit:e.unit||"",impact:e.qh_affect_text||""})),total:t.length}}function xa(n){let t=n?.data||[];return{items:t.map(e=>({time:yt(e.time),content:ut(e.data?.content||e.data?.title||"",e),importance:e.important??0,source:e.data?.source||"",remark:at(e.remark)||""})),total:t.length}}function _o(n){return n.command("future","\u671F\u8D27",t=>t.option("channel",{alias:"c",type:"string",default:"all",describe:`\u9891\u9053: ${Object.keys(Tt).join("/")}`}).command("headline","\u671F\u8D27\u5934\u6761",{},async e=>{let{f:o,n:r=10}=e,a=await tn();if(o==="text"){let s=a?.data?.list||[];if(!s.length)return console.log("\u6682\u65E0\u6570\u636E");for(let i=0;i<Math.min(r,s.length);i++){let c=s[i],l=String(i+1).padStart(2,"0"),p=c.hot?" [\u70ED]":"";console.log(`${l} ${c.title}${p}`)}}else g({data:a,format:o,command:"future headline",source:"jin10",toJSON:_a})}).command("basis [date]","\u671F\u73B0\u57FA\u5DEE",e=>e.positional("date",{type:"string"}).option("group",{alias:"g",type:"string",describe:"\u6309\u677F\u5757\u8FC7\u6EE4: \u9ED1\u8272\u7CFB/\u91D1\u5C5E/\u519C\u4EA7\u54C1/\u80FD\u6E90\u5316\u5DE5/\u91D1\u878D"}),async e=>{let{f:o}=e,r=e.date||H(),a=e.group,s=await nn(r);if(o==="text"){let i=s?.data?.list||[];if(!i.length)return console.log("\u6682\u65E0\u6570\u636E");if(a){let c=i.map(l=>l.name);c.includes(a)||(console.error(`\u9519\u8BEF: \u4E0D\u652F\u6301\u7684\u677F\u5757 "${a}"\uFF0C\u53EF\u9009: ${c.join(", ")}`),process.exit(1))}for(let c of i){if(a&&c.name!==a)continue;let l=c.data||[];if(!l.length)continue;console.log(`
|
|
11
|
+
${c.name}`);let{table:p,w:d}=h(["\u54C1\u79CD","\u5730\u533A","\u73B0\u8D27","\u671F\u8D27","\u57FA\u5DEE","\u57FA\u5DEE\u7387"],[8,14,8,8,8,6],{1:14});for(let m of l)m.published===1&&p.push([m.category,w(m.city,d?.[1]||14),m.spot_data??"--",m.futures_data??"--",m.jicha??"--",m.jicha_rate!=null?`${m.jicha_rate}%`:"--"]);console.log(p.toString())}}else g({data:s,format:o,command:"future basis",source:"jin10",toJSON:wa})}).command("calendar [date]","\u671F\u8D27\u65E5\u5386",e=>e.positional("date",{type:"string"}),async e=>{let{f:o}=e,r=e.date||H(),a=await en(r);if(o==="text"){let s=a?.data||[];if(!s.length)return console.log("\u6682\u65E0\u6570\u636E");let{table:i,w:c}=h(["\u65F6\u95F4","\u56FD\u5BB6","\u6307\u6807","\u524D\u503C","\u9884\u671F","\u516C\u5E03","\u5F71\u54CD"],[6,6,30,8,8,8,6],{0:8});for(let l of s)i.push([l.time_show,l.country,w(l.name,c?.[2]||30),l.previous??"--",l.consensus??"--",l.actual??"--",l.qh_affect_text||""]);console.log(i.toString())}else g({data:a,format:o,command:"future calendar",source:"jin10",toJSON:Sa})}).command("event [date]","\u671F\u8D27\u65E5\u5386\u4E8B\u4EF6\uFF08jin10\uFF09",e=>e.positional("date",{type:"string"}),async e=>{let{f:o}=e,r=e.date||H(),a=await qt(r);if(o==="text"){let s=a?.data||[];if(!s.length)return console.log("\u6682\u65E0\u6570\u636E");let{table:i,w:c}=h(["\u65F6\u95F4","\u56FD\u5BB6","\u4E8B\u4EF6"],[14,10,60],{0:14});for(let l of s)i.push([l.public_time||"-",l.country||"-",w(l.eventcontent||"",c?.[2]||60)]);console.log(i.toString())}else g({data:a,format:o,command:`future event ${r}`,source:"jin10",toJSON:s=>({items:(s?.data||[]).map(c=>({time:c.public_time,country:c.country,event:c.eventcontent}))})})}).command("holiday [date]","\u671F\u8D27\u65E5\u5386\u5047\u671F\uFF08jin10\uFF09",e=>e.positional("date",{type:"string"}),async e=>{let{f:o}=e,r=e.date||H(),a=await Ot(r);if(o==="text"){let s=a?.data||[];if(!s.length)return console.log("\u6682\u65E0\u6570\u636E");let{table:i,w:c}=h(["\u65F6\u95F4","\u56FD\u5BB6","\u5E02\u573A","\u8282\u65E5","\u5B89\u6392"],[14,10,12,20,30],{0:14});for(let l of s)i.push([(l.holiday_time||"").slice(5,16),l.country||"-",l.market||"-",l.holiday_name||"-",w(l.description||"-",c?.[4]||30)]);console.log(i.toString())}else g({data:a,format:o,command:`future holiday ${r}`,source:"jin10",toJSON:s=>({items:(s?.data||[]).map(c=>({time:c.holiday_time,country:c.country,market:c.market,name:c.holiday_name,description:c.description}))})})}),async t=>{let{channel:e="all",f:o,n:r=10}=t,a=Tt[e];a===void 0&&(console.error(`\u9519\u8BEF: \u4E0D\u652F\u6301\u7684\u9891\u9053 "${e}"\uFF0C\u53EF\u9009: ${Object.keys(Tt).join(", ")}`),process.exit(1));let s=new Set,i=[],c=await ee(a);for(let m of c?.data||[])s.has(m.id)||(s.add(m.id),i.push(m));let l=0,p=50;for(;i.length<r&&l++<p;){let m=i[i.length-1];if(!m)break;let y=(await ee(a,{max_time:m.time}))?.data||[];if(!y.length)break;let b=0;for(let _ of y)s.has(_.id)||(s.add(_.id),i.push(_),b++);if(b===0)break;i.length<r&&await new Promise(_=>setTimeout(_,200))}let d={...c,data:i};g({data:d,format:o,command:"future",source:"jin10",toJSON:xa,printFn:ba,printArgs:[r]})})}function $a(n){let t=n?.data||{},e=[{key:"stocks",label:"\u80A1\u7968\u81EA\u9009"},{key:"cubes",label:"\u7EC4\u5408"},{key:"funds",label:"\u57FA\u91D1\u81EA\u9009"}],o=!1;for(let r of e){let a=t[r.key]||[];if(!a.length)continue;o=!0,console.log(`${u.bold}${u.cyan}${r.label}${u.reset}`);let{table:s,w:i}=h(["ID","\u540D\u79F0","\u80A1\u7968\u6570"],[8,20,8],{0:8});for(let c of a)O(s,[String(c.id),c.name||"-",c.symbol_count!=null?String(c.symbol_count):""],i);console.log(s.toString())}o||console.log("\u6682\u65E0\u81EA\u9009\u7EC4\u5408")}function Aa(n){let t=n?.data?.stocks||n?.data||[];if(!Array.isArray(t)||!t.length)return console.log("\u6682\u65E0\u81EA\u9009\u80A1");let{table:e,w:o}=h(["\u4EE3\u7801","\u540D\u79F0","\u6700\u65B0\u4EF7","\u6DA8\u8DCC\u5E45","\u5E02\u503C"],[14,14,10,10,14],{0:14});for(let r of t){let a=r.symbol||r.stock_code||"-",s=r.name||r.stock_name||"-",i=r.current??r.price??"-",c=r.percent??r.chg_pct??"-",l=r.market_capital??r.mc??"-";O(e,[a,s,String(i),P(c),k(l)],o)}console.log(e.toString())}function ka(n){let t=n?.data||[];if(!Array.isArray(t)||!t.length)return console.log("\u6682\u65E0\u6570\u636E");let{table:e,w:o}=h(["\u65E5\u671F","\u5355\u4F4D\u51C0\u503C","\u7D2F\u8BA1\u51C0\u503C","\u65E5\u6DA8\u5E45"],[14,12,12,12],{0:14});for(let r of t.slice(0,20)){let a=r.time?String(r.time).slice(0,10):"-";O(e,[a,String(r.nav??r.unit_nav??"-"),String(r.accumulated_nav??"-"),P(r.daily_return??r.nav_chg_pct)],o)}console.log(e.toString())}function va(n){let t=n?.data?.list||n?.data?.holdings||n?.data||[];if(!Array.isArray(t)||!t.length)return console.log("\u6682\u65E0\u6301\u4ED3\u6570\u636E");let{table:e,w:o}=h(["\u4EE3\u7801","\u540D\u79F0","\u6743\u91CD","\u73B0\u4EF7","\u6DA8\u8DCC\u5E45","\u5E02\u503C"],[14,14,10,10,10,14],{0:14});for(let r of t){let a=r.stock_symbol||r.symbol||r.code||"-",s=r.stock_name||r.name||"-",i=r.weight??r.proportion??"-",c=r.price??r.current??"-",l=r.chg_pct??r.percent??"-",p=r.market_capital??r.mc??"-";O(e,[a,s,i!=="-"?(Number(i)*100).toFixed(1)+"%":"-",String(c),P(l),k(p)],o)}console.log(e.toString())}function Na(n){let t=n?.data||{};return{stocks:(t.stocks||[]).map(e=>({id:e.id,name:e.name,symbolCount:e.symbol_count||0})),cubes:(t.cubes||[]).map(e=>({id:e.id,name:e.name})),funds:(t.funds||[]).map(e=>({id:e.id,name:e.name}))}}function qa(n){let t=n?.data?.stocks||n?.data||[];return Array.isArray(t)?{items:t.map(e=>({symbol:e.symbol||e.stock_code||"",name:e.name||e.stock_name||"",price:e.current??e.price??null,changePercent:e.percent??e.chg_pct??null,marketCap:e.market_capital??e.mc??null})),total:t.length}:{items:[],total:0}}function Oa(n){let t=n?.data||[];return Array.isArray(t)?{items:t.map(e=>({date:e.time?String(e.time).slice(0,10):"",nav:e.nav??e.unit_nav??null,accumulatedNav:e.accumulated_nav??null,dailyReturn:e.daily_return??e.nav_chg_pct??null})),total:t.length}:{items:[],total:0}}function ja(n){let t=n?.data?.list||n?.data?.holdings||n?.data||[];return Array.isArray(t)?{items:t.map(e=>({symbol:e.stock_symbol||e.symbol||e.code||"",name:e.stock_name||e.name||"",weight:e.weight??e.proportion??null,price:e.price??e.current??null,changePercent:e.chg_pct??e.percent??null,marketCap:e.market_capital??e.mc??null})),total:t.length}:{items:[],total:0}}async function Ca(n){if(!n.length)return;let t=n.map(e=>e.symbol).filter(Boolean);try{let e=await ft(t),o={};for(let r of e?.data?.items||[]){let a=r.quote;a&&(o[a.symbol]=a)}for(let r of n){let a=o[r.symbol];a&&(r.current=a.current,r.percent=a.percent,r.market_capital=a.market_capital)}}catch{}}function wo(n,t,e){let o=n?.data?.stocks||[];Ca(o).then(()=>{g({data:n,format:e,command:t,source:"xq",toJSON:qa,printFn:Aa})})}function So(n){return n.command({command:"portfolio",describe:"\u81EA\u9009/\u7EC4\u5408\uFF08\u96EA\u7403\uFF0C\u9700 cookie\uFF09",builder:t=>(t.command({command:"stocks",describe:"\u67E5\u770B/\u7BA1\u7406\u81EA\u9009\u80A1",builder:e=>(e.command({command:"list [pid]",describe:"\u67E5\u770B\u5206\u7EC4\u4E0B\u7684\u80A1\u7968\uFF08\u9ED8\u8BA4\u5168\u90E8\uFF09",builder:o=>o.positional("pid",{type:"string",describe:"\u5206\u7EC4 ID\uFF0C\u5982 -1(\u5168\u90E8) -5(\u6CAA\u6DF1)"}),handler:async o=>{let{f:r}=o,a=o.pid||"-1",s=await me(a);wo(s,"portfolio stocks "+a,r)}}),e.command({command:"add <symbol>",describe:"\u6DFB\u52A0\u80A1\u7968\u5230\u81EA\u9009",builder:o=>o.positional("symbol",{type:"string",describe:"\u80A1\u7968\u4EE3\u7801\uFF0C\u5982 SH600519"}).option("category",{alias:"c",type:"number",default:1,describe:"\u5206\u7EC4 ID\uFF0C\u9ED8\u8BA4\u5168\u90E8"}),handler:async o=>{let r=o.symbol,a=o.category,s=await $n(r,{category:a});console.log(s?.data?"\u5DF2\u6DFB\u52A0":"\u6DFB\u52A0\u5931\u8D25")}}),e.command({command:"remove <symbol>",describe:"\u4ECE\u81EA\u9009\u5220\u9664\u80A1\u7968",builder:o=>o.positional("symbol",{type:"string",describe:"\u80A1\u7968\u4EE3\u7801\uFF0C\u5982 SH600519"}).option("category",{alias:"c",type:"number",default:1,describe:"\u5206\u7EC4 ID\uFF0C\u9ED8\u8BA4\u5168\u90E8"}),handler:async o=>{let r=o.symbol,a=o.category,s=await An(r,{category:a});console.log(s?.data?"\u5DF2\u5220\u9664":"\u5220\u9664\u5931\u8D25")}}),e.strictCommands(!1)),handler:async e=>{let{f:o}=e,r=await me("-1");wo(r,"portfolio stocks",o)}}),t.command({command:"cube [code]",describe:"\u7EC4\u5408\u51C0\u503C\u8D70\u52BF",builder:e=>(e.positional("code",{type:"string",describe:"\u7EC4\u5408\u4EE3\u7801"}),e.command({command:"holding <code>",describe:"\u67E5\u770B\u7EC4\u5408\u6301\u4ED3",builder:o=>o.positional("code",{type:"string",describe:"\u7EC4\u5408\u4EE3\u7801"}),handler:async o=>{let{f:r}=o,a=o.code,s=await vn(a);g({data:s,format:r,command:"portfolio cube holding "+a,source:"xq",toJSON:ja,printFn:va})}}),e.strictCommands(!1)),handler:async e=>{let{f:o}=e,r=e.code;if(!r){console.log("\u8BF7\u63D0\u4F9B\u7EC4\u5408\u4EE3\u7801\uFF0C\u4F8B\u5982: finflow portfolio cube <code>");return}let a=await kn(r);g({data:a,format:o,command:"portfolio cube "+r,source:"xq",toJSON:Oa,printFn:ka})}}),t.strictCommands(!1)),handler:async t=>{let{f:e}=t,o=await xn();e==="text"&&(console.log(`${u.dim}\u63D0\u793A: \u7528 portfolio stocks \u67E5\u770B\u81EA\u9009\u80A1\uFF0Cportfolio stocks list <ID> \u67E5\u770B\u5206\u7EC4${u.reset}`),console.log()),g({data:o,format:e,command:"portfolio",source:"xq",toJSON:Na,printFn:$a})}}),n}function xo(n){return n.command("config","\u914D\u7F6E\u7BA1\u7406",t=>t.command("cookie [value]","\u67E5\u770B/\u8BBE\u7F6E\u96EA\u7403 Cookie",e=>e.positional("value",{type:"string"}),e=>{let{value:o}=e;if(o)re(o),console.log("Cookie \u5DF2\u4FDD\u5B58");else{let r=oe();console.log(r?`\u5F53\u524D Cookie: ${u.dim}${r.slice(0,40)}...${u.reset}`:"\u672A\u8BBE\u7F6E Cookie\u3002\u8FD0\u884C finflow config login \u6216 finflow config cookie <value> \u8BBE\u7F6E")}}).command("login","\u4ECE\u6D4F\u89C8\u5668\u81EA\u52A8\u83B7\u53D6 Cookie",{},()=>{try{console.log("\u6B63\u5728\u4ECE\u6D4F\u89C8\u5668\u83B7\u53D6 Cookie...");let e=Rt("xueqiu.com");re(e),console.log("Cookie \u5DF2\u4FDD\u5B58")}catch(e){console.error(`${u.red}${e.message}${u.reset}`),process.exit(1)}}))}var tt=Fa(Ta(process.argv)).scriptName("finflow").version("1.4.0").demandCommand(1,"\u8BF7\u6307\u5B9A\u547D\u4EE4\uFF0C\u8FD0\u884C finflow --help \u67E5\u770B\u5E2E\u52A9").option("n",{type:"number",default:10,describe:"\u6761\u6570"}).option("f",{type:"string",default:"json",choices:["json","text","raw"],describe:"\u8F93\u51FA\u683C\u5F0F: json(\u9ED8\u8BA4)/text/raw"}).strict().help().alias("h","help");Ln(tt);lo(tt);po(tt);bo(tt);_o(tt);So(tt);xo(tt);tt.parse();
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@openduo/finflow",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.4.0",
|
|
4
4
|
"description": "Unified financial CLI — jin10, cls, xueqiu, gelonghui",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -19,16 +19,15 @@
|
|
|
19
19
|
"release": "npm run build && npm version && git push && git push --follow-tags"
|
|
20
20
|
},
|
|
21
21
|
"dependencies": {
|
|
22
|
-
"cmd-table": "^1.5.0",
|
|
23
22
|
"yargs": "^18.0.0"
|
|
24
23
|
},
|
|
25
24
|
"devDependencies": {
|
|
26
25
|
"@types/node": "^22.15.0",
|
|
27
26
|
"@types/yargs": "^17.0.35",
|
|
28
27
|
"tsup": "^8.4.1",
|
|
29
|
-
"vitest": "^3.1.0",
|
|
30
28
|
"tsx": "^4.19.0",
|
|
31
|
-
"typescript": "^5.8.3"
|
|
29
|
+
"typescript": "^5.8.3",
|
|
30
|
+
"vitest": "^3.1.0"
|
|
32
31
|
},
|
|
33
32
|
"keywords": [
|
|
34
33
|
"finflow",
|