Socket
Socket
Sign inDemoInstall

tse-client

Package Overview
Dependencies
15
Maintainers
1
Versions
136
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

Comparing version 2.17.3 to 2.17.4

4

dist/tse.js

@@ -971,7 +971,7 @@ (function () {

prices = storedPrices[inscode];
inscodes = new Set(inscode);
inscodes = new Set([inscode]);
} else {
const isRoot = merges.has(sym);
prices = isRoot ? storedPricesMerged[inscode] : storedPrices[inscode];
inscodes = new Set(isRoot ? merges.get(sym).map(i => i.code) : inscode);
inscodes = new Set(isRoot ? merges.get(sym).map(i => i.code) : [inscode]);
}

@@ -978,0 +978,0 @@ if (!prices) return;

@@ -1,1 +0,1 @@

!function(){const e=function(){return"undefined"!=typeof global&&this===global}(),t=function(){return"undefined"!=typeof window&&this===window}(),s=e?require("node-fetch"):t?window.fetch:void 0,n=e?require("big.js"):t?window.Big:void 0,r=e?require("jalaali-js"):t?window.jalaali:void 0;if(t){if(!n)throw new Error("Cannot find required dependency: Big");if(!localforage)throw new Error("Cannot find required dependency: localforage")}const i=function(){let s;if(e){const{existsSync:e,mkdirSync:t,readFileSync:n,writeFileSync:r,statSync:i,readdirSync:a}=require("fs"),{join:o}=require("path"),{gzipSync:l,gunzipSync:c}=require("zlib");let p;const u=require("os").homedir(),m=o(u,"tse-cache"),d=o(u,".tse");if(e(d)){p=n(d,"utf8");try{i(p).isDirectory()}catch{p=m}}else p=m,e(p)||t(p,{recursive:!0}),r(d,p);const f=(t,s=!1)=>new Promise(((i,a)=>{const l=(t=t.replace("tse.","")).startsWith("prices.")?o(p,"prices"):p,u=o(l,`${t}.csv`+(s?".gz":""));if(!e(u))return r(u,""),void i("");const m=n(u,s?void 0:"utf8");i(s?c(m).toString():m)})),h=(e,t,s=!1)=>new Promise(((n,i)=>{e=e.replace("tse.","");let a=p;e.startsWith("prices.")&&(a=o(p,"prices"),e=e.replace("prices.",""));const c=o(a,`${e}.csv`+(s?".gz":""));r(c,s?l(t):t),n()}));s={getItem:t=>{const s=(t=t.replace("tse.","")).startsWith("prices.")?o(p,"prices"):p,i=o(s,`${t}.csv`);return e(i)||r(i,""),n(i,"utf8")},setItem:(e,t)=>{const s=(e=e.replace("tse.","")).startsWith("prices.")?o(p,"prices"):p;r(o(s,`${e}.csv`),t)},getItemAsync:f,setItemAsync:h,getItems:async function(s=new Set,r={}){const i=o(p,"prices");e(i)||t(i);for(const e of a(i)){const t=e.replace(".csv","");s.has(t)&&(r[t]=n(o(i,e),"utf8"))}},get CACHE_DIR(){return p},set CACHE_DIR(s){"string"==typeof s&&(e(s)||t(s,{recursive:!0}),i(s).isDirectory()&&(p=s,r(d,p)))},itd:{getItems:async function(s=new Set,r=!1){const l=o(p,"intraday");e(l)||t(l);const c=a(l).filter((e=>i(o(l,e)).isDirectory()&&s.has(e)));let u;return u=r?c.map((e=>{const t=a(o(l,e)).map((t=>{const s=".gz"===t.slice(-3);return[s?t.slice(0,-3):t,n(o(l,e,t),s?null:"utf8")]}));return[e,Object.fromEntries(t)]})):c.map((e=>{const t=a(o(l,e)).map((e=>[".gz"===e.slice(-3)?e.slice(0,-3):e,!0]));return[e,Object.fromEntries(t)]})),Object.fromEntries(u)},setItem:async function(s,n){s=s.replace("tse.","");const i=o(p,"intraday"),a=o(i,s);e(a)||t(a),Object.keys(n).forEach((e=>{const t=n[e];r(o(a,e+("N/A"===t?"":".gz")),n[e])}))}}}}else if(t){const e=window.pako||void 0,t=localforage.createInstance({name:"tse.prices"}),n=async(s,n=!1)=>{let r=localforage;s.startsWith("tse.prices.")&&(s=s.replace("prices.",""),r=t);const i=await r.getItem(s);return i?e&&n?e.ungzip(i,{to:"string"}):i:""},r=async(s,n,r=!1)=>{let i=localforage;if(s.startsWith("tse.prices.")&&(s=s.replace("tse.prices.",""),i=t),!e)return void await i.setItem(s,n);const a=r?e.gzip(n):n;await i.setItem(s,a)},i=async function(e=new Set,s={}){await t.iterate(((t,n)=>{let r=n.replace("tse.","");e.has(r)&&(s[r]=t)}))},a=localforage.createInstance({name:"tse.intraday"}),o=async(t,s,n=!1)=>{if(!e)return void await a.setItem(t,s);const r=n?e.gzip(s):s;await a.setItem(t,r)};s={getItem:e=>localStorage.getItem(e)||"",setItem:(e,t)=>localStorage.setItem(e,t),getItemAsync:n,setItemAsync:r,getItems:i,itd:{getItems:async function(e=new Set,t=!1){const s={};return t?await a.iterate(((t,n)=>{e.has(n)&&(s[n]=t)})):await a.iterate(((t,n)=>{e.has(n)&&(s[n]=Object.keys(t).reduce(((e,t)=>(e[t]=!0,e)),{}))})),s},setItem:o}}}return s}();let a="http://service.tsetmc.com/tsev2/data/TseClient2.aspx";const o={Instrument(e){const t={t:"Instrument",a:""+e};return this.makeRequest(t)},InstrumentAndShare(e,t=0){const s={t:"InstrumentAndShare",a:""+e,a2:""+t};return this.makeRequest(s)},LastPossibleDeven(){return this.makeRequest({t:"LastPossibleDeven"})},ClosingPrices(e){const t={t:"ClosingPrices",a:""+e};return this.makeRequest(t)},makeRequest(e){const t=new URL(a);return t.search=new URLSearchParams(e).toString(),new Promise(((e,n)=>{s(t).then((async t=>{200===t.status?e(await t.text()):n(t.status+" "+t.statusText)})).catch((e=>n(e)))}))}};class l{constructor(e=""){const t=e.split(",");if(11!==t.length)throw new Error("Invalid ClosingPrice data!");this.InsCode=t[0],this.DEven=t[1],this.PClosing=t[2],this.PDrCotVal=t[3],this.ZTotTran=t[4],this.QTotTran5J=t[5],this.QTotCap=t[6],this.PriceMin=t[7],this.PriceMax=t[8],this.PriceYesterday=t[9],this.PriceFirst=t[10]}}const c=["date","dateshamsi","open","high","low","last","close","vol","count","value","yesterday","symbol","name","namelatin","companycode"],p=["تاریخ میلادی","تاریخ شمسی","اولین قیمت","بیشترین قیمت","کمترین قیمت","آخرین قیمت","قیمت پایانی","حجم معاملات","تعداد معاملات","ارزش معاملات","قیمت پایانی دیروز","نماد","نام","نام لاتین","کد شرکت"];class u{constructor(e=[]){const t=e.length;if(t>2||t<1)throw new Error("Invalid Column data!");this.name=c[e[0]],this.fname=p[e[0]],this.header=e[1]}}class m{constructor(e=""){const t=e.split(",");if(![18,19].includes(t.length))throw new Error("Invalid Instrument data!");this.InsCode=t[0],this.InstrumentID=t[1],this.LatinSymbol=t[2],this.LatinName=t[3],this.CompanyCode=t[4],this.Symbol=I(t[5]).trim(),this.Name=t[6],this.CIsin=t[7],this.DEven=t[8],this.Flow=t[9],this.LSoc30=t[10],this.CGdSVal=t[11],this.CGrValCot=t[12],this.YMarNSC=t[13],this.CComVal=t[14],this.CSecVal=t[15],this.CSoSecVal=t[16],this.YVal=t[17],t[18]&&(this.SymbolOriginal=I(t[18]).trim())}}class d{constructor(e=""){const t=e.split(",");if(11!==t.length)throw new Error("Invalid InstrumentITD data!");this.InsCode=t[0],this.LVal30=I(t[1]),this.LVal18AFC=I(t[2]),this.FlowTitle=I(t[3]),this.CGrValCotTitle=I(t[4]),this.Flow=t[5],this.CGrValCot=t[6],this.CIsin=t[7],this.InstrumentID=t[8],this.ZTitad=t[9],this.BaseVol=t[10]}}class f{constructor(e=""){const t=e.split(",");if(5!==t.length)throw new Error("Invalid Share data!");this.Idn=t[0],this.InsCode=t[1],this.DEven=t[2],this.NumberOfShareNew=parseInt(t[3]),this.NumberOfShareOld=parseInt(t[4])}}function h(e=!1,t=!1,s="InsCode",n=!1){let r=i.getItem("tse.instruments"+(n?".intraday":""));r=r?r.split("\n"):[];const a=t?[]:{},o=n?d:m;for(const n of r){const r=e?new o(n):n;if(t)a.push(r);else{a[e?r[s]:n.split(",",1)[0]]=r}}return a}function g(e=!1,t=!0){let s=i.getItem("tse.shares");s=s?s.split("\n"):[];const n=t?[]:{};for(const r of s){const s=e?new f(r):r;if(t)n.push(s);else{const t=e?s.InsCode:r.split(",",2)[1];n[t]||(n[t]=[]),n[t].push(s)}}return n}function y(e){return 1e4*e.getFullYear()+100*(e.getMonth()+1)+e.getDate()+""}function I(e){return e.replace(/\u200B/g,"").replace(/\s?\u200C\s?/g," ").replace(/\u200D/g,"").replace(/\uFEFF/g,"").replace(/ك/g,"ک").replace(/ي/g,"ی")}let v=1,w=50,D=300,C=3,b=1e3;const T="merged",S={columns:[0,2,3,4,5,6,7,8,9],adjustPrices:0,daysWithoutTrade:!1,startDate:"20010321",mergeSimilarSymbols:!0,cache:!0,csv:!1,csvHeaders:!0,csvDelimiter:",",onprogress:void 0,progressTotal:100};let A={},E={};function P(e,t,s){const n=e;return"date"===n?s.DEven:"dateshamsi"===n?r&&function(e){const{jy:t,jm:s,jd:n}=r.toJalaali(+e.slice(0,4),+e.slice(4,6),+e.slice(6,8));return 1e4*t+100*s+n+""}(s.DEven):"open"===n?s.PriceFirst:"high"===n?s.PriceMax:"low"===n?s.PriceMin:"last"===n?s.PDrCotVal:"close"===n?s.PClosing:"vol"===n?s.QTotTran5J:"count"===n?s.ZTotTran:"value"===n?s.QTotCap:"yesterday"===n?s.PriceYesterday:"symbol"===n?t.Symbol:"name"===n?t.Name:"namelatin"===n?t.LatinName:"companycode"===n?t.CompanyCode:""}function j(e="",t){if(!e||"0"===e)return!0;const s=new Date,n=y(s),r=function(e,t){const s=+new Date(+e.slice(0,4),+e.slice(4,6)-1,+e.slice(6,8)),n=+new Date(+t.slice(0,4),+t.slice(4,6)-1,+t.slice(6,8)),r=Math.abs(n-s);return Math.ceil(r/864e5)}(t,e),i=[4,5].includes(s.getDay()),a=(o=t,new Date(+o.slice(0,4),+o.slice(4,6)-1,+o.slice(6,8))).getDay();var o;return r>=v&&(n!==t||s.getHours()>16)&&!(i&&3!==a&&r<=3)}async function _(){let e=i.getItem("tse.lastPossibleDeven");if(!e||j(y(new Date),e)){let t;const s=await o.LastPossibleDeven().catch((e=>t=e));if(t)return{title:"Failed request: LastPossibleDeven",detail:t};if(!/^\d{8};\d{8}$/.test(s))return{title:"Invalid server response: LastPossibleDeven"};e=s.split(";")[0]||s.split(";")[1],i.setItem("tse.lastPossibleDeven",e)}return e}async function R(){let e,t,s,n;if(i.getItem("tse.lastInstrumentUpdate")){s=h(),n=g();const r=Object.keys(s).map((e=>+s[e].split(",",9)[8])),i=n.map((e=>+e.split(",",1)[0]));e=Math.max(...r),t=Math.max(...i)}else e=0,t=0;const r=await _();if("object"==typeof r)return r;if(!j(""+e,r))return;let a;const l=await o.InstrumentAndShare(+y(new Date),t).catch((e=>a=e));if(a)return{title:"Failed request: InstrumentAndShare",detail:a};let c=l.split("@")[1];a=0;let p=await o.Instrument(e).catch((e=>a=e));if(a)return{title:"Failed request: Instrument",detail:a};if(""!==p&&"*"!==p){let e;if(s){let t=Object.fromEntries(Object.keys(s).map((e=>(19===(e=s[e].split(",")).length&&(e[5]=e[18],e.pop()),[e[0],e.join(",")]))));p.split(";").forEach(((e,s)=>(s=e.split(",",1)[0],t[s]=e))),e=Object.keys(t).map((e=>t[e].split(",")))}else e=p.split(";").map((e=>e.split(",")));let t=[...e.map((e=>((e=[...e])[5]=I(e[5]).trim(),e)))],n=[...new Set(t.map((e=>e[5])).filter(((e,t,s)=>s.indexOf(e)!==t)))].map((e=>t.filter((t=>t[5]===e)))),r=new Map(e.map(((e,t)=>[e[0],t])));for(dup of n){dup.sort(((e,t)=>+t[8]-e[8])).forEach(((t,s)=>{let n=r.get(t[0]),i=e[n][5];if(s>0){let e="-ق"+(s+1);t.push(i),t[5]=i.trim()+e}else t[5]=i}))}n.flat().forEach((t=>{let s=r.get(t[0]);e[s]=t})),p=e,r=void 0,t=void 0,e=void 0,s&&Object.keys(s).length?(p.forEach((e=>s[e[0]]=e.join(","))),p=Object.keys(s).map((e=>s[e])).join("\n")):p=p.map((e=>e.join(","))).join("\n"),i.setItem("tse.instruments",p)}""!==c&&(c=n&&n.length?n.concat(c.split(";")).join("\n"):c.replace(/;/g,"\n"),i.setItem("tse.shares",c)),(""!==p&&"*"!==p||""!==c)&&i.setItem("tse.lastInstrumentUpdate",y(new Date))}n.DP=40,n.RM=2;const N=function(){let e,t,s,r,a,l,c,p,u=0,m=[],d=[],f=0,h=[],g=new Map,y=[];function I(){if(g.size>0||e)setTimeout(I,500);else{if(m.length===u||f>=C){const e=[...m],s=[...d];return m=[],d=[],void Promise.all(y).then((()=>{y=[],t({succs:e,fails:s,pn:r})}))}if(h.length){const t=h.flat().map((e=>e[0]));d=d.filter((e=>-1===t.indexOf(e))),f++,e=setTimeout(S,b,h),h=[],setTimeout(I,b)}}}function v(e,t,a){const o=t.map((([e])=>e));if("string"!=typeof e||!/^[\d.,;@-]+$/.test(e)&&""!==e)d.push(...o),h.push(t);else{const a=e.replace(/;/g,"\n").split("@").map(((e,s)=>[t[s][0],e]));for(const[e,t]of a)if(m.push(e),t){const s=E[e],n=s?s+"\n"+t:t;E[e]=n,A[e]=t.split("\n").slice(-1)[0].split(",",2)[1],y.push(p&&i.setItemAsync("tse.prices."+e,n))}if(d=d.filter((e=>-1===o.indexOf(e))),s){const e=l.div(C+2).mul(f+1);s(r=+n(r).plus(l.sub(e)))}}g.delete(a)}function T(e=[],t){const i=e.map((e=>e.join(","))).join(";");o.ClosingPrices(i).then((s=>v(s,e,t))).catch((()=>v(void 0,e,t))),s&&s(r=+n(r).plus(c))}function S(t=[]){e&&(e=void 0);const s=t.map(((e,t)=>"a"+t));for(let e=0,n=0,r=t.length;e<r;e++,n+=D){const r=s[e],i=setTimeout(T,n,t[e],r);g.set(r,i)}}return function(i=[],o,y={}){var v,D;return p=o,({pf:s,pn:r,ptot:a}=y),u=i.length,l=a.div(Math.ceil(n(u).div(w))),c=l.div(C+2),m=[],d=[],f=0,h=[],g=new Map,e=void 0,S((D=w,(v=i).map(((e,t)=>t%D==0?v.slice(t,t+D):void 0)).filter((e=>e)))),I(),new Promise((e=>t=e))}}();async function O(e=[],t,{pf:s,pn:r,ptot:a}={}){A=i.getItem("tse.inscode_lastdeven");let o=new Set;if(A){const e=A.split("\n").map((e=>e.split(",")));A=Object.fromEntries(e),o=new Set(Object.keys(A))}else A={};let l={succs:[],fails:[],error:void 0,pn:r};const c=+n(r).plus(a),p=await _();if("object"==typeof p)return l.error=p,s&&s(r=c),l;const{startDate:u}=S,m=e.map((e=>{const t=e.InsCode,s="NO"===e.YMarNSC?0:1;if(!o.has(t))return[t,u,s];{const e=A[t];if(!e)return;if(j(e,p))return[t,e,s]}})).filter((e=>e));s&&s(r=+n(r).plus(a.mul(.01)));const d=new Set(e.map((e=>e.InsCode))),f=new Set(Object.keys(E));if(f.size&&![...d].find((e=>!f.has(e)))||await i.getItems(d,E),s&&s(r=+n(r).plus(a.mul(.01))),m.length){const e=await N(m,t,{pf:s,pn:r,ptot:a.sub(a.mul(.02))}),{succs:n,fails:o}=e;({pn:r}=e),n.length&&t&&(str=Object.keys(A).map((e=>[e,A[e]].join(","))).join("\n"),i.setItem("tse.inscode_lastdeven",str)),l={succs:n,fails:o}}return s&&r!==c&&s(r=c),l.pn=r,l}let U=(e="",t="",s="")=>`http://${e?"cdn"+e+".":""}tsetmc.com/Loader.aspx?ParTree=15131P&i=${t}&d=${s}`,k=100,Y=6e4,L=3,M=1e3,x=[0,7,8,9];const z={startDate:"20010321",endDate:"",cache:!0,gzip:!0,reUpdateNoTrades:!1,updateOnly:!1,onprogress:void 0,progressTotal:100,chunkDelay:k,chunkMaxWait:Y,retryCount:L,retryDelay:M,servers:x};let F,q,V={};if(e){const{gzipSync:e,gunzipSync:t}=require("zlib");F=t=>e(t),q=e=>t(e).toString()}else if(t){const{gzip:e,ungzip:t}=window.pako||{};F=t=>e(t),q=e=>t(e,{to:"string"})}function H(e,t={}){for(let[s,n]of e)"[object Map]"===Map.prototype.toString.call(n)||Array.isArray(n)?t[s]=H(n,t[s]):t[s]=n;return t}function W(e,t){let s=t.split(e)[1].split("];",1)[0];return s="["+s.replace(/'/g,'"')+"]",JSON.parse(s)}async function $(e="",t=[],s){V[e]||(V[e]={});let n=V[e];for(let[e,s]of t){if("N/A"===s){n[e]=s;continue}let t,r=W("var ClosingPriceData=[",s),i=W("var BestLimitData=[",s),a=W("var IntraTradeData=[",s),o=W("var ClientTypeData=[",s),l=W("var InstrumentStateData=[",s),c=W("var StaticTreshholdData=[",s),p=W("var InstSimpleData=[",s),u=W("var ShareHolderData=[",s);t=[12,2,3,4,6,7,8,9,10,11];let m=r.map((e=>t.map((t=>e[t])).join(","))).join("\n");t=[0,1,2,3,4,5,6,7];let d=i.map((e=>t.map((t=>e[t])).join(","))).join("\n");t=[1,0,2,3,4];let f=a.map((e=>{let[s,n,r]=e[1].split(":"),i=1e4*+s+100*+n+ +r+"";return e[1]=i,t.map((t=>e[t]))})).sort(((e,t)=>+e[0]-t[0])).map((e=>e.join(","))).join("\n");t=[4,0,12,16,8,6,2,14,18,10,5,1,13,17,9,7,3,15,19,11,20];let h,g,y=t.map((e=>o[e])).join(","),[v,w]=[l,c],D=v.length&&v[0].length?v[0][2]:"";w.length&&w[1].length&&(h=w[1][2],g=w[1][1]);let[C,b]=[4,9].map((e=>p[e])),T=[b,C,h,g,D].join(",");t=[2,3,4,0,5];let S=u.filter((e=>e[4])).map((e=>(e[4]={ArrowUp:"+",ArrowDown:"-"}[e[4]],e[5]=I(e[5]),t.map((t=>e[t])).join(",")))).join("\n"),A=[m,d,f,y,T];S&&A.push(S),n[e]=F(A.join("\n\n"))}let r=n,a=Object.keys(r).filter((e=>!0!==r[e])).reduce(((e,t)=>(e[t]=r[t],e)),{});if(s)return i.itd.setItem(e,a)}const K=function(){let e,r,a,o,l,c,p,u,m,d,f,g,y={},I=0,v=[],w=[],D=0,C=[],b=new Map,T=-1,S=[],A={},E={};function P(){if(b.size>0||T)setTimeout(P,500);else{if(v.length===I||D>=o){let s=[...v],n=[...w.map((e=>e.slice(1)))];v=[],w=[],t&&(y={});let r=h(!1,!1,void 0,!0);return r={...r,...E},r=Object.keys(r).map((e=>r[e])).join("\n"),i.setItem("tse.instruments.intraday",r),A={},E={},void Promise.all(S).then((()=>{S=[],e({succs:s,fails:n})}))}if(C.length){let e=C.map((e=>e.join("")));w=w.filter((t=>-1===e.indexOf(t.join("")))),D++,C.forEach((e=>{return e[0]=(t=e[0],t=c.indexOf(t)+1,c[t<c.length?t:0]);var t})),T=setTimeout(R,l,C,!0),C=[],setTimeout(P,l)}}}function j(e,s,r){if("string"==typeof e){let r=e;if("N/A"!==e){let t="var InstSimpleData"+e.split("var InstSimpleData")[1].split(";")[0]+";",s="var StaticTreshholdData"+e.split("var StaticTreshholdData")[1];r=t.replace(/\t/g,"\\t")+s}let i=s.slice(1);v.push(i);let[a,l]=i;if(l===A[a]&&"N/A"!==e){let e=JSON.parse(r.split("var InstSimpleData=")[1].split(";")[0].replace(/'/g,'"'));E[a]=[a,...e].join(",")}if(t){let e=y[a];if(e[l]=r,!Object.keys(e).find((t=>!e[t]))){let t=Object.keys(e).map((t=>[t,e[t]]));S.push($(a,t,p))}}else S.push($(a,[[l,r]],p));if(w=w.filter((e=>e.join()!==s.join())),u){let e=f.div(o+2).mul(D+1);u(m=+n(m).plus(f.sub(e)))}}else w.push(s),C.push(s);b.delete(r)}async function _(e=[],t){let r,i,[o,l,c]=e;"undefined"!=typeof AbortController&&(r=new AbortController,i=r.signal),s(U(o,l,c),i?{signal:i}:void 0).then((async s=>{let{status:n}=s;if(200===n){let n=await s.text();if(n.includes('Object moved to <a href="/GeneralError.aspx?aspxerrorpath=/Loader.aspx">here</a>'))j("N/A",e,t);else{let s=n.split("var StaticTreshholdData")[1];j(["ClosingPrice","IntraDayPrice","IntraTrade","ClientType","BestLimit"].some((e=>s.split(`var ${e}Data=[`)[1].split("];")[0]))?n:void 0,e,t)}}else j(void 0,e,t)})).catch((()=>j(void 0,e,t))),r&&setTimeout((()=>r.abort()),a),u&&u(m=+n(m).plus(g))}function R(e=[]){T&&(T=void 0);let t=e.map(((e,t)=>"a"+t));for(let s=0,n=0,i=e.length;s<i;s++,n+=r){let r=t[s],i=setTimeout(_,n,e[s],r);b.set(r,i)}}return async function(s,n,i){({chunkDelay:r,chunkMaxWait:a,retryCount:o,retryDelay:l,servers:c,shouldCache:p}=n),({pf:u,pn:m,ptot:d}=i),t&&(y=H(s.map((([e,t])=>[e,t.map((e=>[e,void 0]))]))));let h=[...s].reduce(((e,[t,s])=>[...e,...s?s.map((e=>[c[0],t,""+e])):[]]),[]);return I=h.length,f=d.div(I),g=f.div(o+2),v=[],w=[],D=0,C=[],b=new Map,T=void 0,S=[],A=H(s.map((([e,t])=>[e,""+t[t.length-1]]))),E={},R(h),P(),new Promise((t=>e=t))}}();const Q={getPrices:async function(e=[],t={}){if(!e.length)return;const s={...S,...t},r={data:[],error:void 0};let{onprogress:i,progressTotal:a}=s;"function"!=typeof i&&(i=void 0),"number"!=typeof a&&(a=S.progressTotal);let o=0;a=n(a);const c=await R();if(i&&i(o=+n(o).plus(a.mul(.01))),c){const{title:e,detail:t}=c;return r.error={code:1,title:e,detail:t},i&&i(+a),r}const p=h(!0,void 0,"Symbol"),m=e.map((e=>p[e])),d=e.filter(((e,t)=>!m[t]));if(i&&i(o=+n(o).plus(a.mul(.01))),d.length)return r.error={code:2,title:"Incorrect Symbol",symbols:d},i&&i(+a),r;const{mergeSimilarSymbols:f}=s;let y=new Map,I=-1;if(f){const e=Object.keys(p).map((e=>p[e])),t=new Set(e.filter((e=>e.SymbolOriginal)).map((e=>e.SymbolOriginal)));y=new Map([...t].map((e=>[e,[]]))),e.forEach(((e,t)=>{const{SymbolOriginal:s,Symbol:n,InsCode:r}=e,i=s||n;if(!y.has(i))return;const a=new RegExp("-ق(\\d+)");y.get(i).push({sym:n,code:r,order:s?+n.match(a)[1]:1})})),[...y].forEach((([,e])=>e.sort(((e,t)=>e.order-t.order))));const s=m.map((({Symbol:e})=>y.has(e)&&y.get(e).slice(1).map((e=>p[e.sym])))).flat().filter((e=>e));I=m.length,m.push(...s)}const v=await O(m,s.cache,{pf:i,pn:o,ptot:a.mul(.78)}),{succs:w,fails:D,error:C}=v;if(({pn:o}=v),C){const{title:e,detail:t}=C;return r.error={code:1,title:e,detail:t},i&&i(+a),r}if(D.length){const e=Object.fromEntries(m.map((e=>[e.InsCode,e.Symbol])));r.error={code:3,title:"Incomplete Price Update",fails:D.map((t=>e[t])),succs:w.map((t=>e[t]))},m.forEach(((e,t,s)=>D.includes(e.InsCode)?s[t]=void 0:0))}f&&m.splice(I);const b=s.columns.map((e=>{const t=Array.isArray(e)?e:[e],s=new u(t),n=s.header||s.name;return{...s,header:n}})),{adjustPrices:A,daysWithoutTrade:j,startDate:_,csv:N}=s,U=g(!0),k=n(a).mul(.2).div(m.length),Y={};if(f)for(const[,e]of[...y]){const t=e.map((e=>e.code)),[s]=t;Y[s]=t.map((e=>E[e])).reverse().filter((e=>e)).join("\n")}const L=e=>{const{InsCode:t,Symbol:s,SymbolOriginal:r}=e;let i,a;if(r){if(f)return T;i=E[t],a=new Set(t)}else{const e=y.has(s);i=e?Y[t]:E[t],a=new Set(e?y.get(s).map((e=>e.code)):t)}if(i)return i=i.split("\n").map((e=>new l(e))),1!==A&&2!==A||(i=function(e,t,s,r){const i=new Map(s.filter((e=>r.has(e.InsCode))).map((e=>[e.DEven,e]))),a=t,o=t.length,l=[];let c=a;if((1===e||2===e)&&o>1){let t=new n("0.0"),s=new n("1.0");if(l.push(a[o-1]),1===e)for(let e=o-2;e>=0;e-=1){const[s,r]=[a[e],a[e+1]];n(s.PClosing).eq(r.PriceYesterday)||s.InsCode!==r.InsCode||(t=t.plus(1))}if(1===e&&t.div(o).lt("0.08")||2===e){for(let t=o-2;t>=0;t-=1){const[r,o]=[a[t],a[t+1]],c=!n(r.PClosing).eq(o.PriceYesterday)&&r.InsCode===o.InsCode,p=i.get(o.DEven);if(1===e&&c)s=s.times(o.PriceYesterday).div(r.PClosing);else if(2===e&&c&&p){const e=p.NumberOfShareOld,t=p.NumberOfShareNew;s=s.times(e).div(t)}let u=s.times(r.PClosing).round(2).toFixed(2),m=s.times(r.PDrCotVal).round(2).toFixed(2),d=s.times(r.PriceMin).round().toString(),f=s.times(r.PriceMax).round().toString(),h=s.times(r.PriceYesterday).round().toString(),g=s.times(r.PriceFirst).round(2).toFixed(2);const y={InsCode:r.InsCode,DEven:r.DEven,PClosing:u,PDrCotVal:m,ZTotTran:r.ZTotTran,QTotTran5J:r.QTotTran5J,QTotCap:r.QTotCap,PriceMin:d,PriceMax:f,PriceYesterday:h,PriceFirst:g};l.push(y)}c=l.reverse()}}return c}(A,i,U,a)),j||(i=i.filter((e=>+e.ZTotTran>0))),i=i.filter((e=>+e.DEven>+_)),i};if(N){const{csvHeaders:e,csvDelimiter:t}=s,a=e?b.map((e=>e.header)).join()+"\n":"";r.data=m.map((e=>{if(!e)return;let s=a;const r=L(e);return r?r===T?r:(s+=r.map((s=>b.map((t=>P(t.name,e,s))).join(t))).join("\n"),i&&i(o=+n(o).plus(k)),s):s}))}else{const e=new Set(["CompanyCode","LatinName","Symbol","Name"]);r.data=m.map((t=>{if(!t)return;const s=Object.fromEntries(b.map((e=>[e.header,[]]))),r=L(t);if(!r)return s;if(r===T)return r;for(const n of r)for(const{header:r,name:i}of b){const a=P(i,t,n);s[r].push(e.has(i)?a:parseFloat(a))}return i&&i(o=+n(o).plus(k)),s}))}return i&&o!==a&&i(o=a),r},getInstruments:async function(e=!0,t=!0,s="InsCode"){-1===Object.keys(new m([...Array(18).keys()].join(","))).indexOf(s)&&(s="InsCode");const n=i.getItem("tse.lastInstrumentUpdate"),r=await R();if(r&&!n)throw r;return h(e,t,s)},get API_URL(){return a},set API_URL(e){if("string"!=typeof e)return;let t;try{new URL(e)}catch(e){throw t=!0,e}t||(a=e)},get UPDATE_INTERVAL(){return v},set UPDATE_INTERVAL(e){Number.isInteger(e)&&(v=e)},get PRICES_UPDATE_CHUNK(){return w},set PRICES_UPDATE_CHUNK(e){Number.isInteger(e)&&e>0&&e<60&&(w=e)},get PRICES_UPDATE_CHUNK_DELAY(){return D},set PRICES_UPDATE_CHUNK_DELAY(e){Number.isInteger(e)&&(D=e)},get PRICES_UPDATE_RETRY_COUNT(){return C},set PRICES_UPDATE_RETRY_COUNT(e){Number.isInteger(e)&&(C=e)},get PRICES_UPDATE_RETRY_DELAY(){return b},set PRICES_UPDATE_RETRY_DELAY(e){Number.isInteger(e)&&(b=e)},get columnList(){return[...Array(15)].map(((e,t)=>({name:c[t],fname:p[t]})))},getIntraday:async function(e=[],t={}){if(!e.length)return;const s={...z,...t},r={data:[],error:void 0};let{onprogress:a,progressTotal:o}=s;"function"!=typeof a&&(a=void 0),"number"!=typeof o&&(o=z.progressTotal);let l=0;o=n(o);const c=await R();if(a&&a(l=+n(l).plus(o.mul(.01))),c){const{title:e,detail:t}=c;return r.error={code:1,title:e,detail:t},a&&a(+o),r}const p=h(!0,void 0,"Symbol"),u=e.map((e=>p[e])),m=e.filter(((e,t)=>!u[t]));if(a&&a(l=+n(l).plus(o.mul(.01))),m.length)return r.error={code:2,title:"Incorrect Symbol",symbols:m},a&&a(+o),r;const d=new Set(u.map((e=>e&&e.InsCode)));let f=await i.getItemAsync("tse.inscode_devens");f=f?f.split("\n").map((e=>e.split(";"))).map((([e,t])=>[e,t.split(",").map((e=>+e))])):[];const g=new Set(f.map((e=>e[0]))),I=[...new Set(f.map((([,e])=>e[e.length-1])))],v=+s.endDate,w=v||+y(new Date),{cache:D}=s;if(!f.length||[...d].some((e=>!g.has(e)))||I.some((e=>e<w))){const e=await O(u,D,{pf:a,pn:l,ptot:o.mul(.1)}),{succs:t,fails:s,error:n}=e;if(({pn:l}=e),n){const{title:e,detail:t}=n;return r.error={code:1,title:e,detail:t},a&&a(+o),r}if(s.length){const e=Object.fromEntries(u.map((e=>[e.InsCode,e.Symbol])));r.error={code:3,title:"Incomplete Price Update",fails:s.map((t=>e[t])),succs:t.map((t=>e[t]))},u.forEach(((e,t,n)=>s.includes(e.InsCode)?n[t]=void 0:0))}if(f=Object.keys(E).map((e=>{const t=E[e];if(!t)return;return[e,t.split("\n").filter((e=>+e.split(",",5)[4]>0)).map((e=>+e.split(",",2)[1]))]})).filter((e=>e)),D){const e=f.map((([e,t])=>[e,t.join(",")].join(";"))).join("\n");await i.setItemAsync("tse.inscode_devens",e)}}f=Object.fromEntries(f),a&&a(l=+n(l).plus(o.mul(.01)));let C=+s.startDate,b=v?e=>e>=C&&e<=v:e=>e>=C,T=[...d].map((e=>{if(!e)return[];let t=f[e];return t?[e,t.filter(b)]:[e,[]]})),{reUpdateNoTrades:S,updateOnly:A}=s;V=await i.itd.getItems(d,!A||S);let P=T.map((([e,t])=>{if(!e||!t.length)return;if(!V[e])return[e,t];let s=S?t.filter((t=>{let s=V[e][t];if(!s)return!0;let[,,n]=q(s).split("\n\n");return!n})):t.filter((t=>!V[e][t]));return s.length?[e,s]:void 0})).filter((e=>e));a&&a(l=+n(l).plus(o.mul(.01)));let{chunkDelay:j,chunkMaxWait:_,retryCount:N,retryDelay:U,servers:k}=s;if(Array.isArray(k)&&!k.some((e=>!Number.isInteger(e)||e<0))||(k=z.servers),P.length>0){let{succs:e,fails:t}=await K(P,{shouldCache:D,chunkDelay:j,chunkMaxWait:_,retryCount:N,retryDelay:U,servers:k},{pf:a,pn:l,ptot:o.mul(.85)});if(t.length){let s=Object.fromEntries(u.map((e=>[e.InsCode,e.Symbol]))),n=(e,[t,n])=>(!e[s[t]]&&(e[s[t]]=[]),e[s[t]].push(n),e);r.error={code:4,title:"Incomplete Intraday Update",fails:t.reduce(n,{}),succs:e.reduce(n,{})}}}if(a&&a(l=+o.mul(.99)),!A){let{gzip:e}=s;r.data=T.map((([t,s])=>{let n=V[t];if(n)return e?s.map((e=>[e,n[e]])):s.map((e=>[e,n[e]&&"string"!=typeof n[e]?q(n[e]):n[e]]))}))}return a&&a(+o),r},getIntradayInstruments:async function(e=!0,t=!0,s="InsCode"){return-1===Object.keys(new d([...Array(11).keys()].join(","))).indexOf(s)&&(s="InsCode"),h(e,t,s,!0)},get INTRADAY_URL(){return U},set INTRADAY_URL(e){if("function"!=typeof e)return;let t;try{new URL(e())}catch(e){throw t=!0,e}t||(U=e)},get INTRADAY_UPDATE_CHUNK_DELAY(){return k},set INTRADAY_UPDATE_CHUNK_DELAY(e){Number.isInteger(e)&&(k=e)},get INTRADAY_UPDATE_CHUNK_MAX_WAIT(){return Y},set INTRADAY_UPDATE_CHUNK_MAX_WAIT(e){Number.isInteger(e)&&(Y=e)},get INTRADAY_UPDATE_RETRY_COUNT(){return L},set INTRADAY_UPDATE_RETRY_COUNT(e){Number.isInteger(e)&&(L=e)},get INTRADAY_UPDATE_RETRY_DELAY(){return M},set INTRADAY_UPDATE_RETRY_DELAY(e){Number.isInteger(e)&&(M=e)},get INTRADAY_UPDATE_SERVERS(){return x},set INTRADAY_UPDATE_SERVERS(e){Array.isArray(e)&&!e.some((e=>!Number.isInteger(e)||e<0))&&(x=e)},itdGroupCols:[["price",["time","last","close","open","high","low","count","volume","value","discarded"]],["order",["time","row","askcount","askvol","askprice","bidprice","bidvol","bidcount"]],["trade",["time","count","volume","price","discarded"]],["client",["pbvol","pbcount","pbval","pbprice","pbvolpot","psvol","pscount","psval","psprice","psvolpot","lbvol","lbcount","lbval","lbprice","lbvolpot","lsvol","lscount","lsval","lsprice","lsvolpot","lpchg"]],["misc",["basevol","flow","daymin","daymax","state"]],["shareholder",["shares","sharespot","change","companycode","companyname"]]]};e?(Object.defineProperty(Q,"CACHE_DIR",{get:()=>i.CACHE_DIR,set:e=>i.CACHE_DIR=e}),module.exports=Q):t&&(window.tse=Q)}();
!function(){const e=function(){return"undefined"!=typeof global&&this===global}(),t=function(){return"undefined"!=typeof window&&this===window}(),s=e?require("node-fetch"):t?window.fetch:void 0,n=e?require("big.js"):t?window.Big:void 0,r=e?require("jalaali-js"):t?window.jalaali:void 0;if(t){if(!n)throw new Error("Cannot find required dependency: Big");if(!localforage)throw new Error("Cannot find required dependency: localforage")}const i=function(){let s;if(e){const{existsSync:e,mkdirSync:t,readFileSync:n,writeFileSync:r,statSync:i,readdirSync:a}=require("fs"),{join:o}=require("path"),{gzipSync:l,gunzipSync:c}=require("zlib");let p;const u=require("os").homedir(),m=o(u,"tse-cache"),d=o(u,".tse");if(e(d)){p=n(d,"utf8");try{i(p).isDirectory()}catch{p=m}}else p=m,e(p)||t(p,{recursive:!0}),r(d,p);const f=(t,s=!1)=>new Promise(((i,a)=>{const l=(t=t.replace("tse.","")).startsWith("prices.")?o(p,"prices"):p,u=o(l,`${t}.csv`+(s?".gz":""));if(!e(u))return r(u,""),void i("");const m=n(u,s?void 0:"utf8");i(s?c(m).toString():m)})),h=(e,t,s=!1)=>new Promise(((n,i)=>{e=e.replace("tse.","");let a=p;e.startsWith("prices.")&&(a=o(p,"prices"),e=e.replace("prices.",""));const c=o(a,`${e}.csv`+(s?".gz":""));r(c,s?l(t):t),n()}));s={getItem:t=>{const s=(t=t.replace("tse.","")).startsWith("prices.")?o(p,"prices"):p,i=o(s,`${t}.csv`);return e(i)||r(i,""),n(i,"utf8")},setItem:(e,t)=>{const s=(e=e.replace("tse.","")).startsWith("prices.")?o(p,"prices"):p;r(o(s,`${e}.csv`),t)},getItemAsync:f,setItemAsync:h,getItems:async function(s=new Set,r={}){const i=o(p,"prices");e(i)||t(i);for(const e of a(i)){const t=e.replace(".csv","");s.has(t)&&(r[t]=n(o(i,e),"utf8"))}},get CACHE_DIR(){return p},set CACHE_DIR(s){"string"==typeof s&&(e(s)||t(s,{recursive:!0}),i(s).isDirectory()&&(p=s,r(d,p)))},itd:{getItems:async function(s=new Set,r=!1){const l=o(p,"intraday");e(l)||t(l);const c=a(l).filter((e=>i(o(l,e)).isDirectory()&&s.has(e)));let u;return u=r?c.map((e=>{const t=a(o(l,e)).map((t=>{const s=".gz"===t.slice(-3);return[s?t.slice(0,-3):t,n(o(l,e,t),s?null:"utf8")]}));return[e,Object.fromEntries(t)]})):c.map((e=>{const t=a(o(l,e)).map((e=>[".gz"===e.slice(-3)?e.slice(0,-3):e,!0]));return[e,Object.fromEntries(t)]})),Object.fromEntries(u)},setItem:async function(s,n){s=s.replace("tse.","");const i=o(p,"intraday"),a=o(i,s);e(a)||t(a),Object.keys(n).forEach((e=>{const t=n[e];r(o(a,e+("N/A"===t?"":".gz")),n[e])}))}}}}else if(t){const e=window.pako||void 0,t=localforage.createInstance({name:"tse.prices"}),n=async(s,n=!1)=>{let r=localforage;s.startsWith("tse.prices.")&&(s=s.replace("prices.",""),r=t);const i=await r.getItem(s);return i?e&&n?e.ungzip(i,{to:"string"}):i:""},r=async(s,n,r=!1)=>{let i=localforage;if(s.startsWith("tse.prices.")&&(s=s.replace("tse.prices.",""),i=t),!e)return void await i.setItem(s,n);const a=r?e.gzip(n):n;await i.setItem(s,a)},i=async function(e=new Set,s={}){await t.iterate(((t,n)=>{let r=n.replace("tse.","");e.has(r)&&(s[r]=t)}))},a=localforage.createInstance({name:"tse.intraday"}),o=async(t,s,n=!1)=>{if(!e)return void await a.setItem(t,s);const r=n?e.gzip(s):s;await a.setItem(t,r)};s={getItem:e=>localStorage.getItem(e)||"",setItem:(e,t)=>localStorage.setItem(e,t),getItemAsync:n,setItemAsync:r,getItems:i,itd:{getItems:async function(e=new Set,t=!1){const s={};return t?await a.iterate(((t,n)=>{e.has(n)&&(s[n]=t)})):await a.iterate(((t,n)=>{e.has(n)&&(s[n]=Object.keys(t).reduce(((e,t)=>(e[t]=!0,e)),{}))})),s},setItem:o}}}return s}();let a="http://service.tsetmc.com/tsev2/data/TseClient2.aspx";const o={Instrument(e){const t={t:"Instrument",a:""+e};return this.makeRequest(t)},InstrumentAndShare(e,t=0){const s={t:"InstrumentAndShare",a:""+e,a2:""+t};return this.makeRequest(s)},LastPossibleDeven(){return this.makeRequest({t:"LastPossibleDeven"})},ClosingPrices(e){const t={t:"ClosingPrices",a:""+e};return this.makeRequest(t)},makeRequest(e){const t=new URL(a);return t.search=new URLSearchParams(e).toString(),new Promise(((e,n)=>{s(t).then((async t=>{200===t.status?e(await t.text()):n(t.status+" "+t.statusText)})).catch((e=>n(e)))}))}};class l{constructor(e=""){const t=e.split(",");if(11!==t.length)throw new Error("Invalid ClosingPrice data!");this.InsCode=t[0],this.DEven=t[1],this.PClosing=t[2],this.PDrCotVal=t[3],this.ZTotTran=t[4],this.QTotTran5J=t[5],this.QTotCap=t[6],this.PriceMin=t[7],this.PriceMax=t[8],this.PriceYesterday=t[9],this.PriceFirst=t[10]}}const c=["date","dateshamsi","open","high","low","last","close","vol","count","value","yesterday","symbol","name","namelatin","companycode"],p=["تاریخ میلادی","تاریخ شمسی","اولین قیمت","بیشترین قیمت","کمترین قیمت","آخرین قیمت","قیمت پایانی","حجم معاملات","تعداد معاملات","ارزش معاملات","قیمت پایانی دیروز","نماد","نام","نام لاتین","کد شرکت"];class u{constructor(e=[]){const t=e.length;if(t>2||t<1)throw new Error("Invalid Column data!");this.name=c[e[0]],this.fname=p[e[0]],this.header=e[1]}}class m{constructor(e=""){const t=e.split(",");if(![18,19].includes(t.length))throw new Error("Invalid Instrument data!");this.InsCode=t[0],this.InstrumentID=t[1],this.LatinSymbol=t[2],this.LatinName=t[3],this.CompanyCode=t[4],this.Symbol=I(t[5]).trim(),this.Name=t[6],this.CIsin=t[7],this.DEven=t[8],this.Flow=t[9],this.LSoc30=t[10],this.CGdSVal=t[11],this.CGrValCot=t[12],this.YMarNSC=t[13],this.CComVal=t[14],this.CSecVal=t[15],this.CSoSecVal=t[16],this.YVal=t[17],t[18]&&(this.SymbolOriginal=I(t[18]).trim())}}class d{constructor(e=""){const t=e.split(",");if(11!==t.length)throw new Error("Invalid InstrumentITD data!");this.InsCode=t[0],this.LVal30=I(t[1]),this.LVal18AFC=I(t[2]),this.FlowTitle=I(t[3]),this.CGrValCotTitle=I(t[4]),this.Flow=t[5],this.CGrValCot=t[6],this.CIsin=t[7],this.InstrumentID=t[8],this.ZTitad=t[9],this.BaseVol=t[10]}}class f{constructor(e=""){const t=e.split(",");if(5!==t.length)throw new Error("Invalid Share data!");this.Idn=t[0],this.InsCode=t[1],this.DEven=t[2],this.NumberOfShareNew=parseInt(t[3]),this.NumberOfShareOld=parseInt(t[4])}}function h(e=!1,t=!1,s="InsCode",n=!1){let r=i.getItem("tse.instruments"+(n?".intraday":""));r=r?r.split("\n"):[];const a=t?[]:{},o=n?d:m;for(const n of r){const r=e?new o(n):n;if(t)a.push(r);else{a[e?r[s]:n.split(",",1)[0]]=r}}return a}function g(e=!1,t=!0){let s=i.getItem("tse.shares");s=s?s.split("\n"):[];const n=t?[]:{};for(const r of s){const s=e?new f(r):r;if(t)n.push(s);else{const t=e?s.InsCode:r.split(",",2)[1];n[t]||(n[t]=[]),n[t].push(s)}}return n}function y(e){return 1e4*e.getFullYear()+100*(e.getMonth()+1)+e.getDate()+""}function I(e){return e.replace(/\u200B/g,"").replace(/\s?\u200C\s?/g," ").replace(/\u200D/g,"").replace(/\uFEFF/g,"").replace(/ك/g,"ک").replace(/ي/g,"ی")}let v=1,w=50,D=300,C=3,b=1e3;const T="merged",S={columns:[0,2,3,4,5,6,7,8,9],adjustPrices:0,daysWithoutTrade:!1,startDate:"20010321",mergeSimilarSymbols:!0,cache:!0,csv:!1,csvHeaders:!0,csvDelimiter:",",onprogress:void 0,progressTotal:100};let A={},E={};function P(e,t,s){const n=e;return"date"===n?s.DEven:"dateshamsi"===n?r&&function(e){const{jy:t,jm:s,jd:n}=r.toJalaali(+e.slice(0,4),+e.slice(4,6),+e.slice(6,8));return 1e4*t+100*s+n+""}(s.DEven):"open"===n?s.PriceFirst:"high"===n?s.PriceMax:"low"===n?s.PriceMin:"last"===n?s.PDrCotVal:"close"===n?s.PClosing:"vol"===n?s.QTotTran5J:"count"===n?s.ZTotTran:"value"===n?s.QTotCap:"yesterday"===n?s.PriceYesterday:"symbol"===n?t.Symbol:"name"===n?t.Name:"namelatin"===n?t.LatinName:"companycode"===n?t.CompanyCode:""}function j(e="",t){if(!e||"0"===e)return!0;const s=new Date,n=y(s),r=function(e,t){const s=+new Date(+e.slice(0,4),+e.slice(4,6)-1,+e.slice(6,8)),n=+new Date(+t.slice(0,4),+t.slice(4,6)-1,+t.slice(6,8)),r=Math.abs(n-s);return Math.ceil(r/864e5)}(t,e),i=[4,5].includes(s.getDay()),a=(o=t,new Date(+o.slice(0,4),+o.slice(4,6)-1,+o.slice(6,8))).getDay();var o;return r>=v&&(n!==t||s.getHours()>16)&&!(i&&3!==a&&r<=3)}async function _(){let e=i.getItem("tse.lastPossibleDeven");if(!e||j(y(new Date),e)){let t;const s=await o.LastPossibleDeven().catch((e=>t=e));if(t)return{title:"Failed request: LastPossibleDeven",detail:t};if(!/^\d{8};\d{8}$/.test(s))return{title:"Invalid server response: LastPossibleDeven"};e=s.split(";")[0]||s.split(";")[1],i.setItem("tse.lastPossibleDeven",e)}return e}async function R(){let e,t,s,n;if(i.getItem("tse.lastInstrumentUpdate")){s=h(),n=g();const r=Object.keys(s).map((e=>+s[e].split(",",9)[8])),i=n.map((e=>+e.split(",",1)[0]));e=Math.max(...r),t=Math.max(...i)}else e=0,t=0;const r=await _();if("object"==typeof r)return r;if(!j(""+e,r))return;let a;const l=await o.InstrumentAndShare(+y(new Date),t).catch((e=>a=e));if(a)return{title:"Failed request: InstrumentAndShare",detail:a};let c=l.split("@")[1];a=0;let p=await o.Instrument(e).catch((e=>a=e));if(a)return{title:"Failed request: Instrument",detail:a};if(""!==p&&"*"!==p){let e;if(s){let t=Object.fromEntries(Object.keys(s).map((e=>(19===(e=s[e].split(",")).length&&(e[5]=e[18],e.pop()),[e[0],e.join(",")]))));p.split(";").forEach(((e,s)=>(s=e.split(",",1)[0],t[s]=e))),e=Object.keys(t).map((e=>t[e].split(",")))}else e=p.split(";").map((e=>e.split(",")));let t=[...e.map((e=>((e=[...e])[5]=I(e[5]).trim(),e)))],n=[...new Set(t.map((e=>e[5])).filter(((e,t,s)=>s.indexOf(e)!==t)))].map((e=>t.filter((t=>t[5]===e)))),r=new Map(e.map(((e,t)=>[e[0],t])));for(dup of n){dup.sort(((e,t)=>+t[8]-e[8])).forEach(((t,s)=>{let n=r.get(t[0]),i=e[n][5];if(s>0){let e="-ق"+(s+1);t.push(i),t[5]=i.trim()+e}else t[5]=i}))}n.flat().forEach((t=>{let s=r.get(t[0]);e[s]=t})),p=e,r=void 0,t=void 0,e=void 0,s&&Object.keys(s).length?(p.forEach((e=>s[e[0]]=e.join(","))),p=Object.keys(s).map((e=>s[e])).join("\n")):p=p.map((e=>e.join(","))).join("\n"),i.setItem("tse.instruments",p)}""!==c&&(c=n&&n.length?n.concat(c.split(";")).join("\n"):c.replace(/;/g,"\n"),i.setItem("tse.shares",c)),(""!==p&&"*"!==p||""!==c)&&i.setItem("tse.lastInstrumentUpdate",y(new Date))}n.DP=40,n.RM=2;const N=function(){let e,t,s,r,a,l,c,p,u=0,m=[],d=[],f=0,h=[],g=new Map,y=[];function I(){if(g.size>0||e)setTimeout(I,500);else{if(m.length===u||f>=C){const e=[...m],s=[...d];return m=[],d=[],void Promise.all(y).then((()=>{y=[],t({succs:e,fails:s,pn:r})}))}if(h.length){const t=h.flat().map((e=>e[0]));d=d.filter((e=>-1===t.indexOf(e))),f++,e=setTimeout(S,b,h),h=[],setTimeout(I,b)}}}function v(e,t,a){const o=t.map((([e])=>e));if("string"!=typeof e||!/^[\d.,;@-]+$/.test(e)&&""!==e)d.push(...o),h.push(t);else{const a=e.replace(/;/g,"\n").split("@").map(((e,s)=>[t[s][0],e]));for(const[e,t]of a)if(m.push(e),t){const s=E[e],n=s?s+"\n"+t:t;E[e]=n,A[e]=t.split("\n").slice(-1)[0].split(",",2)[1],y.push(p&&i.setItemAsync("tse.prices."+e,n))}if(d=d.filter((e=>-1===o.indexOf(e))),s){const e=l.div(C+2).mul(f+1);s(r=+n(r).plus(l.sub(e)))}}g.delete(a)}function T(e=[],t){const i=e.map((e=>e.join(","))).join(";");o.ClosingPrices(i).then((s=>v(s,e,t))).catch((()=>v(void 0,e,t))),s&&s(r=+n(r).plus(c))}function S(t=[]){e&&(e=void 0);const s=t.map(((e,t)=>"a"+t));for(let e=0,n=0,r=t.length;e<r;e++,n+=D){const r=s[e],i=setTimeout(T,n,t[e],r);g.set(r,i)}}return function(i=[],o,y={}){var v,D;return p=o,({pf:s,pn:r,ptot:a}=y),u=i.length,l=a.div(Math.ceil(n(u).div(w))),c=l.div(C+2),m=[],d=[],f=0,h=[],g=new Map,e=void 0,S((D=w,(v=i).map(((e,t)=>t%D==0?v.slice(t,t+D):void 0)).filter((e=>e)))),I(),new Promise((e=>t=e))}}();async function O(e=[],t,{pf:s,pn:r,ptot:a}={}){A=i.getItem("tse.inscode_lastdeven");let o=new Set;if(A){const e=A.split("\n").map((e=>e.split(",")));A=Object.fromEntries(e),o=new Set(Object.keys(A))}else A={};let l={succs:[],fails:[],error:void 0,pn:r};const c=+n(r).plus(a),p=await _();if("object"==typeof p)return l.error=p,s&&s(r=c),l;const{startDate:u}=S,m=e.map((e=>{const t=e.InsCode,s="NO"===e.YMarNSC?0:1;if(!o.has(t))return[t,u,s];{const e=A[t];if(!e)return;if(j(e,p))return[t,e,s]}})).filter((e=>e));s&&s(r=+n(r).plus(a.mul(.01)));const d=new Set(e.map((e=>e.InsCode))),f=new Set(Object.keys(E));if(f.size&&![...d].find((e=>!f.has(e)))||await i.getItems(d,E),s&&s(r=+n(r).plus(a.mul(.01))),m.length){const e=await N(m,t,{pf:s,pn:r,ptot:a.sub(a.mul(.02))}),{succs:n,fails:o}=e;({pn:r}=e),n.length&&t&&(str=Object.keys(A).map((e=>[e,A[e]].join(","))).join("\n"),i.setItem("tse.inscode_lastdeven",str)),l={succs:n,fails:o}}return s&&r!==c&&s(r=c),l.pn=r,l}let U=(e="",t="",s="")=>`http://${e?"cdn"+e+".":""}tsetmc.com/Loader.aspx?ParTree=15131P&i=${t}&d=${s}`,k=100,Y=6e4,L=3,M=1e3,x=[0,7,8,9];const z={startDate:"20010321",endDate:"",cache:!0,gzip:!0,reUpdateNoTrades:!1,updateOnly:!1,onprogress:void 0,progressTotal:100,chunkDelay:k,chunkMaxWait:Y,retryCount:L,retryDelay:M,servers:x};let F,q,V={};if(e){const{gzipSync:e,gunzipSync:t}=require("zlib");F=t=>e(t),q=e=>t(e).toString()}else if(t){const{gzip:e,ungzip:t}=window.pako||{};F=t=>e(t),q=e=>t(e,{to:"string"})}function H(e,t={}){for(let[s,n]of e)"[object Map]"===Map.prototype.toString.call(n)||Array.isArray(n)?t[s]=H(n,t[s]):t[s]=n;return t}function W(e,t){let s=t.split(e)[1].split("];",1)[0];return s="["+s.replace(/'/g,'"')+"]",JSON.parse(s)}async function $(e="",t=[],s){V[e]||(V[e]={});let n=V[e];for(let[e,s]of t){if("N/A"===s){n[e]=s;continue}let t,r=W("var ClosingPriceData=[",s),i=W("var BestLimitData=[",s),a=W("var IntraTradeData=[",s),o=W("var ClientTypeData=[",s),l=W("var InstrumentStateData=[",s),c=W("var StaticTreshholdData=[",s),p=W("var InstSimpleData=[",s),u=W("var ShareHolderData=[",s);t=[12,2,3,4,6,7,8,9,10,11];let m=r.map((e=>t.map((t=>e[t])).join(","))).join("\n");t=[0,1,2,3,4,5,6,7];let d=i.map((e=>t.map((t=>e[t])).join(","))).join("\n");t=[1,0,2,3,4];let f=a.map((e=>{let[s,n,r]=e[1].split(":"),i=1e4*+s+100*+n+ +r+"";return e[1]=i,t.map((t=>e[t]))})).sort(((e,t)=>+e[0]-t[0])).map((e=>e.join(","))).join("\n");t=[4,0,12,16,8,6,2,14,18,10,5,1,13,17,9,7,3,15,19,11,20];let h,g,y=t.map((e=>o[e])).join(","),[v,w]=[l,c],D=v.length&&v[0].length?v[0][2]:"";w.length&&w[1].length&&(h=w[1][2],g=w[1][1]);let[C,b]=[4,9].map((e=>p[e])),T=[b,C,h,g,D].join(",");t=[2,3,4,0,5];let S=u.filter((e=>e[4])).map((e=>(e[4]={ArrowUp:"+",ArrowDown:"-"}[e[4]],e[5]=I(e[5]),t.map((t=>e[t])).join(",")))).join("\n"),A=[m,d,f,y,T];S&&A.push(S),n[e]=F(A.join("\n\n"))}let r=n,a=Object.keys(r).filter((e=>!0!==r[e])).reduce(((e,t)=>(e[t]=r[t],e)),{});if(s)return i.itd.setItem(e,a)}const K=function(){let e,r,a,o,l,c,p,u,m,d,f,g,y={},I=0,v=[],w=[],D=0,C=[],b=new Map,T=-1,S=[],A={},E={};function P(){if(b.size>0||T)setTimeout(P,500);else{if(v.length===I||D>=o){let s=[...v],n=[...w.map((e=>e.slice(1)))];v=[],w=[],t&&(y={});let r=h(!1,!1,void 0,!0);return r={...r,...E},r=Object.keys(r).map((e=>r[e])).join("\n"),i.setItem("tse.instruments.intraday",r),A={},E={},void Promise.all(S).then((()=>{S=[],e({succs:s,fails:n})}))}if(C.length){let e=C.map((e=>e.join("")));w=w.filter((t=>-1===e.indexOf(t.join("")))),D++,C.forEach((e=>{return e[0]=(t=e[0],t=c.indexOf(t)+1,c[t<c.length?t:0]);var t})),T=setTimeout(R,l,C,!0),C=[],setTimeout(P,l)}}}function j(e,s,r){if("string"==typeof e){let r=e;if("N/A"!==e){let t="var InstSimpleData"+e.split("var InstSimpleData")[1].split(";")[0]+";",s="var StaticTreshholdData"+e.split("var StaticTreshholdData")[1];r=t.replace(/\t/g,"\\t")+s}let i=s.slice(1);v.push(i);let[a,l]=i;if(l===A[a]&&"N/A"!==e){let e=JSON.parse(r.split("var InstSimpleData=")[1].split(";")[0].replace(/'/g,'"'));E[a]=[a,...e].join(",")}if(t){let e=y[a];if(e[l]=r,!Object.keys(e).find((t=>!e[t]))){let t=Object.keys(e).map((t=>[t,e[t]]));S.push($(a,t,p))}}else S.push($(a,[[l,r]],p));if(w=w.filter((e=>e.join()!==s.join())),u){let e=f.div(o+2).mul(D+1);u(m=+n(m).plus(f.sub(e)))}}else w.push(s),C.push(s);b.delete(r)}async function _(e=[],t){let r,i,[o,l,c]=e;"undefined"!=typeof AbortController&&(r=new AbortController,i=r.signal),s(U(o,l,c),i?{signal:i}:void 0).then((async s=>{let{status:n}=s;if(200===n){let n=await s.text();if(n.includes('Object moved to <a href="/GeneralError.aspx?aspxerrorpath=/Loader.aspx">here</a>'))j("N/A",e,t);else{let s=n.split("var StaticTreshholdData")[1];j(["ClosingPrice","IntraDayPrice","IntraTrade","ClientType","BestLimit"].some((e=>s.split(`var ${e}Data=[`)[1].split("];")[0]))?n:void 0,e,t)}}else j(void 0,e,t)})).catch((()=>j(void 0,e,t))),r&&setTimeout((()=>r.abort()),a),u&&u(m=+n(m).plus(g))}function R(e=[]){T&&(T=void 0);let t=e.map(((e,t)=>"a"+t));for(let s=0,n=0,i=e.length;s<i;s++,n+=r){let r=t[s],i=setTimeout(_,n,e[s],r);b.set(r,i)}}return async function(s,n,i){({chunkDelay:r,chunkMaxWait:a,retryCount:o,retryDelay:l,servers:c,shouldCache:p}=n),({pf:u,pn:m,ptot:d}=i),t&&(y=H(s.map((([e,t])=>[e,t.map((e=>[e,void 0]))]))));let h=[...s].reduce(((e,[t,s])=>[...e,...s?s.map((e=>[c[0],t,""+e])):[]]),[]);return I=h.length,f=d.div(I),g=f.div(o+2),v=[],w=[],D=0,C=[],b=new Map,T=void 0,S=[],A=H(s.map((([e,t])=>[e,""+t[t.length-1]]))),E={},R(h),P(),new Promise((t=>e=t))}}();const Q={getPrices:async function(e=[],t={}){if(!e.length)return;const s={...S,...t},r={data:[],error:void 0};let{onprogress:i,progressTotal:a}=s;"function"!=typeof i&&(i=void 0),"number"!=typeof a&&(a=S.progressTotal);let o=0;a=n(a);const c=await R();if(i&&i(o=+n(o).plus(a.mul(.01))),c){const{title:e,detail:t}=c;return r.error={code:1,title:e,detail:t},i&&i(+a),r}const p=h(!0,void 0,"Symbol"),m=e.map((e=>p[e])),d=e.filter(((e,t)=>!m[t]));if(i&&i(o=+n(o).plus(a.mul(.01))),d.length)return r.error={code:2,title:"Incorrect Symbol",symbols:d},i&&i(+a),r;const{mergeSimilarSymbols:f}=s;let y=new Map,I=-1;if(f){const e=Object.keys(p).map((e=>p[e])),t=new Set(e.filter((e=>e.SymbolOriginal)).map((e=>e.SymbolOriginal)));y=new Map([...t].map((e=>[e,[]]))),e.forEach(((e,t)=>{const{SymbolOriginal:s,Symbol:n,InsCode:r}=e,i=s||n;if(!y.has(i))return;const a=new RegExp("-ق(\\d+)");y.get(i).push({sym:n,code:r,order:s?+n.match(a)[1]:1})})),[...y].forEach((([,e])=>e.sort(((e,t)=>e.order-t.order))));const s=m.map((({Symbol:e})=>y.has(e)&&y.get(e).slice(1).map((e=>p[e.sym])))).flat().filter((e=>e));I=m.length,m.push(...s)}const v=await O(m,s.cache,{pf:i,pn:o,ptot:a.mul(.78)}),{succs:w,fails:D,error:C}=v;if(({pn:o}=v),C){const{title:e,detail:t}=C;return r.error={code:1,title:e,detail:t},i&&i(+a),r}if(D.length){const e=Object.fromEntries(m.map((e=>[e.InsCode,e.Symbol])));r.error={code:3,title:"Incomplete Price Update",fails:D.map((t=>e[t])),succs:w.map((t=>e[t]))},m.forEach(((e,t,s)=>D.includes(e.InsCode)?s[t]=void 0:0))}f&&m.splice(I);const b=s.columns.map((e=>{const t=Array.isArray(e)?e:[e],s=new u(t),n=s.header||s.name;return{...s,header:n}})),{adjustPrices:A,daysWithoutTrade:j,startDate:_,csv:N}=s,U=g(!0),k=n(a).mul(.2).div(m.length),Y={};if(f)for(const[,e]of[...y]){const t=e.map((e=>e.code)),[s]=t;Y[s]=t.map((e=>E[e])).reverse().filter((e=>e)).join("\n")}const L=e=>{const{InsCode:t,Symbol:s,SymbolOriginal:r}=e;let i,a;if(r){if(f)return T;i=E[t],a=new Set([t])}else{const e=y.has(s);i=e?Y[t]:E[t],a=new Set(e?y.get(s).map((e=>e.code)):[t])}if(i)return i=i.split("\n").map((e=>new l(e))),1!==A&&2!==A||(i=function(e,t,s,r){const i=new Map(s.filter((e=>r.has(e.InsCode))).map((e=>[e.DEven,e]))),a=t,o=t.length,l=[];let c=a;if((1===e||2===e)&&o>1){let t=new n("0.0"),s=new n("1.0");if(l.push(a[o-1]),1===e)for(let e=o-2;e>=0;e-=1){const[s,r]=[a[e],a[e+1]];n(s.PClosing).eq(r.PriceYesterday)||s.InsCode!==r.InsCode||(t=t.plus(1))}if(1===e&&t.div(o).lt("0.08")||2===e){for(let t=o-2;t>=0;t-=1){const[r,o]=[a[t],a[t+1]],c=!n(r.PClosing).eq(o.PriceYesterday)&&r.InsCode===o.InsCode,p=i.get(o.DEven);if(1===e&&c)s=s.times(o.PriceYesterday).div(r.PClosing);else if(2===e&&c&&p){const e=p.NumberOfShareOld,t=p.NumberOfShareNew;s=s.times(e).div(t)}let u=s.times(r.PClosing).round(2).toFixed(2),m=s.times(r.PDrCotVal).round(2).toFixed(2),d=s.times(r.PriceMin).round().toString(),f=s.times(r.PriceMax).round().toString(),h=s.times(r.PriceYesterday).round().toString(),g=s.times(r.PriceFirst).round(2).toFixed(2);const y={InsCode:r.InsCode,DEven:r.DEven,PClosing:u,PDrCotVal:m,ZTotTran:r.ZTotTran,QTotTran5J:r.QTotTran5J,QTotCap:r.QTotCap,PriceMin:d,PriceMax:f,PriceYesterday:h,PriceFirst:g};l.push(y)}c=l.reverse()}}return c}(A,i,U,a)),j||(i=i.filter((e=>+e.ZTotTran>0))),i=i.filter((e=>+e.DEven>+_)),i};if(N){const{csvHeaders:e,csvDelimiter:t}=s,a=e?b.map((e=>e.header)).join()+"\n":"";r.data=m.map((e=>{if(!e)return;let s=a;const r=L(e);return r?r===T?r:(s+=r.map((s=>b.map((t=>P(t.name,e,s))).join(t))).join("\n"),i&&i(o=+n(o).plus(k)),s):s}))}else{const e=new Set(["CompanyCode","LatinName","Symbol","Name"]);r.data=m.map((t=>{if(!t)return;const s=Object.fromEntries(b.map((e=>[e.header,[]]))),r=L(t);if(!r)return s;if(r===T)return r;for(const n of r)for(const{header:r,name:i}of b){const a=P(i,t,n);s[r].push(e.has(i)?a:parseFloat(a))}return i&&i(o=+n(o).plus(k)),s}))}return i&&o!==a&&i(o=a),r},getInstruments:async function(e=!0,t=!0,s="InsCode"){-1===Object.keys(new m([...Array(18).keys()].join(","))).indexOf(s)&&(s="InsCode");const n=i.getItem("tse.lastInstrumentUpdate"),r=await R();if(r&&!n)throw r;return h(e,t,s)},get API_URL(){return a},set API_URL(e){if("string"!=typeof e)return;let t;try{new URL(e)}catch(e){throw t=!0,e}t||(a=e)},get UPDATE_INTERVAL(){return v},set UPDATE_INTERVAL(e){Number.isInteger(e)&&(v=e)},get PRICES_UPDATE_CHUNK(){return w},set PRICES_UPDATE_CHUNK(e){Number.isInteger(e)&&e>0&&e<60&&(w=e)},get PRICES_UPDATE_CHUNK_DELAY(){return D},set PRICES_UPDATE_CHUNK_DELAY(e){Number.isInteger(e)&&(D=e)},get PRICES_UPDATE_RETRY_COUNT(){return C},set PRICES_UPDATE_RETRY_COUNT(e){Number.isInteger(e)&&(C=e)},get PRICES_UPDATE_RETRY_DELAY(){return b},set PRICES_UPDATE_RETRY_DELAY(e){Number.isInteger(e)&&(b=e)},get columnList(){return[...Array(15)].map(((e,t)=>({name:c[t],fname:p[t]})))},getIntraday:async function(e=[],t={}){if(!e.length)return;const s={...z,...t},r={data:[],error:void 0};let{onprogress:a,progressTotal:o}=s;"function"!=typeof a&&(a=void 0),"number"!=typeof o&&(o=z.progressTotal);let l=0;o=n(o);const c=await R();if(a&&a(l=+n(l).plus(o.mul(.01))),c){const{title:e,detail:t}=c;return r.error={code:1,title:e,detail:t},a&&a(+o),r}const p=h(!0,void 0,"Symbol"),u=e.map((e=>p[e])),m=e.filter(((e,t)=>!u[t]));if(a&&a(l=+n(l).plus(o.mul(.01))),m.length)return r.error={code:2,title:"Incorrect Symbol",symbols:m},a&&a(+o),r;const d=new Set(u.map((e=>e&&e.InsCode)));let f=await i.getItemAsync("tse.inscode_devens");f=f?f.split("\n").map((e=>e.split(";"))).map((([e,t])=>[e,t.split(",").map((e=>+e))])):[];const g=new Set(f.map((e=>e[0]))),I=[...new Set(f.map((([,e])=>e[e.length-1])))],v=+s.endDate,w=v||+y(new Date),{cache:D}=s;if(!f.length||[...d].some((e=>!g.has(e)))||I.some((e=>e<w))){const e=await O(u,D,{pf:a,pn:l,ptot:o.mul(.1)}),{succs:t,fails:s,error:n}=e;if(({pn:l}=e),n){const{title:e,detail:t}=n;return r.error={code:1,title:e,detail:t},a&&a(+o),r}if(s.length){const e=Object.fromEntries(u.map((e=>[e.InsCode,e.Symbol])));r.error={code:3,title:"Incomplete Price Update",fails:s.map((t=>e[t])),succs:t.map((t=>e[t]))},u.forEach(((e,t,n)=>s.includes(e.InsCode)?n[t]=void 0:0))}if(f=Object.keys(E).map((e=>{const t=E[e];if(!t)return;return[e,t.split("\n").filter((e=>+e.split(",",5)[4]>0)).map((e=>+e.split(",",2)[1]))]})).filter((e=>e)),D){const e=f.map((([e,t])=>[e,t.join(",")].join(";"))).join("\n");await i.setItemAsync("tse.inscode_devens",e)}}f=Object.fromEntries(f),a&&a(l=+n(l).plus(o.mul(.01)));let C=+s.startDate,b=v?e=>e>=C&&e<=v:e=>e>=C,T=[...d].map((e=>{if(!e)return[];let t=f[e];return t?[e,t.filter(b)]:[e,[]]})),{reUpdateNoTrades:S,updateOnly:A}=s;V=await i.itd.getItems(d,!A||S);let P=T.map((([e,t])=>{if(!e||!t.length)return;if(!V[e])return[e,t];let s=S?t.filter((t=>{let s=V[e][t];if(!s)return!0;let[,,n]=q(s).split("\n\n");return!n})):t.filter((t=>!V[e][t]));return s.length?[e,s]:void 0})).filter((e=>e));a&&a(l=+n(l).plus(o.mul(.01)));let{chunkDelay:j,chunkMaxWait:_,retryCount:N,retryDelay:U,servers:k}=s;if(Array.isArray(k)&&!k.some((e=>!Number.isInteger(e)||e<0))||(k=z.servers),P.length>0){let{succs:e,fails:t}=await K(P,{shouldCache:D,chunkDelay:j,chunkMaxWait:_,retryCount:N,retryDelay:U,servers:k},{pf:a,pn:l,ptot:o.mul(.85)});if(t.length){let s=Object.fromEntries(u.map((e=>[e.InsCode,e.Symbol]))),n=(e,[t,n])=>(!e[s[t]]&&(e[s[t]]=[]),e[s[t]].push(n),e);r.error={code:4,title:"Incomplete Intraday Update",fails:t.reduce(n,{}),succs:e.reduce(n,{})}}}if(a&&a(l=+o.mul(.99)),!A){let{gzip:e}=s;r.data=T.map((([t,s])=>{let n=V[t];if(n)return e?s.map((e=>[e,n[e]])):s.map((e=>[e,n[e]&&"string"!=typeof n[e]?q(n[e]):n[e]]))}))}return a&&a(+o),r},getIntradayInstruments:async function(e=!0,t=!0,s="InsCode"){return-1===Object.keys(new d([...Array(11).keys()].join(","))).indexOf(s)&&(s="InsCode"),h(e,t,s,!0)},get INTRADAY_URL(){return U},set INTRADAY_URL(e){if("function"!=typeof e)return;let t;try{new URL(e())}catch(e){throw t=!0,e}t||(U=e)},get INTRADAY_UPDATE_CHUNK_DELAY(){return k},set INTRADAY_UPDATE_CHUNK_DELAY(e){Number.isInteger(e)&&(k=e)},get INTRADAY_UPDATE_CHUNK_MAX_WAIT(){return Y},set INTRADAY_UPDATE_CHUNK_MAX_WAIT(e){Number.isInteger(e)&&(Y=e)},get INTRADAY_UPDATE_RETRY_COUNT(){return L},set INTRADAY_UPDATE_RETRY_COUNT(e){Number.isInteger(e)&&(L=e)},get INTRADAY_UPDATE_RETRY_DELAY(){return M},set INTRADAY_UPDATE_RETRY_DELAY(e){Number.isInteger(e)&&(M=e)},get INTRADAY_UPDATE_SERVERS(){return x},set INTRADAY_UPDATE_SERVERS(e){Array.isArray(e)&&!e.some((e=>!Number.isInteger(e)||e<0))&&(x=e)},itdGroupCols:[["price",["time","last","close","open","high","low","count","volume","value","discarded"]],["order",["time","row","askcount","askvol","askprice","bidprice","bidvol","bidcount"]],["trade",["time","count","volume","price","discarded"]],["client",["pbvol","pbcount","pbval","pbprice","pbvolpot","psvol","pscount","psval","psprice","psvolpot","lbvol","lbcount","lbval","lbprice","lbvolpot","lsvol","lscount","lsval","lsprice","lsvolpot","lpchg"]],["misc",["basevol","flow","daymin","daymax","state"]],["shareholder",["shares","sharespot","change","companycode","companyname"]]]};e?(Object.defineProperty(Q,"CACHE_DIR",{get:()=>i.CACHE_DIR,set:e=>i.CACHE_DIR=e}),module.exports=Q):t&&(window.tse=Q)}();
{
"name": "tse-client",
"version": "2.17.3",
"version": "2.17.4",
"description": "A client for fetching stock data from the Tehran Stock Exchange (TSETMC). Works in Browser, Node and as CLI.",

@@ -5,0 +5,0 @@ "main": "index.js",

@@ -971,7 +971,7 @@ (function () {

prices = storedPrices[inscode];
inscodes = new Set(inscode);
inscodes = new Set([inscode]);
} else {
const isRoot = merges.has(sym);
prices = isRoot ? storedPricesMerged[inscode] : storedPrices[inscode];
inscodes = new Set(isRoot ? merges.get(sym).map(i => i.code) : inscode);
inscodes = new Set(isRoot ? merges.get(sym).map(i => i.code) : [inscode]);
}

@@ -978,0 +978,0 @@ if (!prices) return;

Sorry, the diff of this file is too big to display

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc