nse-bse-api 0.1.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.
Files changed (154) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +194 -0
  3. package/dist/bse/BSE.d.ts +141 -0
  4. package/dist/bse/BSE.d.ts.map +1 -0
  5. package/dist/bse/BSE.js +453 -0
  6. package/dist/bse/BSE.js.map +1 -0
  7. package/dist/bse/constants/index.d.ts +341 -0
  8. package/dist/bse/constants/index.d.ts.map +1 -0
  9. package/dist/bse/constants/index.js +341 -0
  10. package/dist/bse/constants/index.js.map +1 -0
  11. package/dist/bse/index.d.ts +12 -0
  12. package/dist/bse/index.d.ts.map +1 -0
  13. package/dist/bse/index.js +16 -0
  14. package/dist/bse/index.js.map +1 -0
  15. package/dist/bse/types/index.d.ts +120 -0
  16. package/dist/bse/types/index.d.ts.map +1 -0
  17. package/dist/bse/types/index.js +20 -0
  18. package/dist/bse/types/index.js.map +1 -0
  19. package/dist/bse/utils/SymbolParser.d.ts +16 -0
  20. package/dist/bse/utils/SymbolParser.d.ts.map +1 -0
  21. package/dist/bse/utils/SymbolParser.js +58 -0
  22. package/dist/bse/utils/SymbolParser.js.map +1 -0
  23. package/dist/bse/utils/helpers.d.ts +21 -0
  24. package/dist/bse/utils/helpers.d.ts.map +1 -0
  25. package/dist/bse/utils/helpers.js +77 -0
  26. package/dist/bse/utils/helpers.js.map +1 -0
  27. package/dist/bse/utils/throttle.d.ts +4 -0
  28. package/dist/bse/utils/throttle.d.ts.map +1 -0
  29. package/dist/bse/utils/throttle.js +38 -0
  30. package/dist/bse/utils/throttle.js.map +1 -0
  31. package/dist/index.d.ts +12 -0
  32. package/dist/index.d.ts.map +1 -0
  33. package/dist/index.js +15 -0
  34. package/dist/index.js.map +1 -0
  35. package/dist/nse/api/corporate-api.d.ts +30 -0
  36. package/dist/nse/api/corporate-api.d.ts.map +1 -0
  37. package/dist/nse/api/corporate-api.js +90 -0
  38. package/dist/nse/api/corporate-api.js.map +1 -0
  39. package/dist/nse/api/download-api.d.ts +42 -0
  40. package/dist/nse/api/download-api.d.ts.map +1 -0
  41. package/dist/nse/api/download-api.js +144 -0
  42. package/dist/nse/api/download-api.js.map +1 -0
  43. package/dist/nse/api/equity-api.d.ts +50 -0
  44. package/dist/nse/api/equity-api.d.ts.map +1 -0
  45. package/dist/nse/api/equity-api.js +103 -0
  46. package/dist/nse/api/equity-api.js.map +1 -0
  47. package/dist/nse/api/historical-api.d.ts +34 -0
  48. package/dist/nse/api/historical-api.d.ts.map +1 -0
  49. package/dist/nse/api/historical-api.js +126 -0
  50. package/dist/nse/api/historical-api.js.map +1 -0
  51. package/dist/nse/api/index.d.ts +11 -0
  52. package/dist/nse/api/index.d.ts.map +1 -0
  53. package/dist/nse/api/index.js +11 -0
  54. package/dist/nse/api/index.js.map +1 -0
  55. package/dist/nse/api/ipo-api.d.ts +26 -0
  56. package/dist/nse/api/ipo-api.d.ts.map +1 -0
  57. package/dist/nse/api/ipo-api.js +46 -0
  58. package/dist/nse/api/ipo-api.js.map +1 -0
  59. package/dist/nse/api/market-api.d.ts +34 -0
  60. package/dist/nse/api/market-api.d.ts.map +1 -0
  61. package/dist/nse/api/market-api.js +58 -0
  62. package/dist/nse/api/market-api.js.map +1 -0
  63. package/dist/nse/api/options-api.d.ts +35 -0
  64. package/dist/nse/api/options-api.d.ts.map +1 -0
  65. package/dist/nse/api/options-api.js +207 -0
  66. package/dist/nse/api/options-api.js.map +1 -0
  67. package/dist/nse/constants/index.d.ts +29 -0
  68. package/dist/nse/constants/index.d.ts.map +1 -0
  69. package/dist/nse/constants/index.js +43 -0
  70. package/dist/nse/constants/index.js.map +1 -0
  71. package/dist/nse/http/http-client.d.ts +38 -0
  72. package/dist/nse/http/http-client.d.ts.map +1 -0
  73. package/dist/nse/http/http-client.js +164 -0
  74. package/dist/nse/http/http-client.js.map +1 -0
  75. package/dist/nse/index.d.ts +19 -0
  76. package/dist/nse/index.d.ts.map +1 -0
  77. package/dist/nse/index.js +24 -0
  78. package/dist/nse/index.js.map +1 -0
  79. package/dist/nse/nse/nse-client.d.ts +85 -0
  80. package/dist/nse/nse/nse-client.d.ts.map +1 -0
  81. package/dist/nse/nse/nse-client.js +105 -0
  82. package/dist/nse/nse/nse-client.js.map +1 -0
  83. package/dist/nse/types/index.d.ts +123 -0
  84. package/dist/nse/types/index.d.ts.map +1 -0
  85. package/dist/nse/types/index.js +5 -0
  86. package/dist/nse/types/index.js.map +1 -0
  87. package/dist/nse/utils/date-formatter.d.ts +36 -0
  88. package/dist/nse/utils/date-formatter.d.ts.map +1 -0
  89. package/dist/nse/utils/date-formatter.js +70 -0
  90. package/dist/nse/utils/date-formatter.js.map +1 -0
  91. package/dist/nse/utils/file-operations.d.ts +16 -0
  92. package/dist/nse/utils/file-operations.d.ts.map +1 -0
  93. package/dist/nse/utils/file-operations.js +74 -0
  94. package/dist/nse/utils/file-operations.js.map +1 -0
  95. package/dist/nse/utils/index.d.ts +6 -0
  96. package/dist/nse/utils/index.d.ts.map +1 -0
  97. package/dist/nse/utils/index.js +6 -0
  98. package/dist/nse/utils/index.js.map +1 -0
  99. package/dist/types/index.d.ts +17 -0
  100. package/dist/types/index.d.ts.map +1 -0
  101. package/dist/types/index.js +11 -0
  102. package/dist/types/index.js.map +1 -0
  103. package/dist-cjs/bse/BSE.js +493 -0
  104. package/dist-cjs/bse/BSE.js.map +1 -0
  105. package/dist-cjs/bse/constants/index.js +352 -0
  106. package/dist-cjs/bse/constants/index.js.map +1 -0
  107. package/dist-cjs/bse/index.js +36 -0
  108. package/dist-cjs/bse/index.js.map +1 -0
  109. package/dist-cjs/bse/types/index.js +26 -0
  110. package/dist-cjs/bse/types/index.js.map +1 -0
  111. package/dist-cjs/bse/utils/SymbolParser.js +62 -0
  112. package/dist-cjs/bse/utils/SymbolParser.js.map +1 -0
  113. package/dist-cjs/bse/utils/helpers.js +117 -0
  114. package/dist-cjs/bse/utils/helpers.js.map +1 -0
  115. package/dist-cjs/bse/utils/throttle.js +42 -0
  116. package/dist-cjs/bse/utils/throttle.js.map +1 -0
  117. package/dist-cjs/index.js +54 -0
  118. package/dist-cjs/index.js.map +1 -0
  119. package/dist-cjs/nse/api/corporate-api.js +94 -0
  120. package/dist-cjs/nse/api/corporate-api.js.map +1 -0
  121. package/dist-cjs/nse/api/download-api.js +151 -0
  122. package/dist-cjs/nse/api/download-api.js.map +1 -0
  123. package/dist-cjs/nse/api/equity-api.js +107 -0
  124. package/dist-cjs/nse/api/equity-api.js.map +1 -0
  125. package/dist-cjs/nse/api/historical-api.js +130 -0
  126. package/dist-cjs/nse/api/historical-api.js.map +1 -0
  127. package/dist-cjs/nse/api/index.js +21 -0
  128. package/dist-cjs/nse/api/index.js.map +1 -0
  129. package/dist-cjs/nse/api/ipo-api.js +50 -0
  130. package/dist-cjs/nse/api/ipo-api.js.map +1 -0
  131. package/dist-cjs/nse/api/market-api.js +62 -0
  132. package/dist-cjs/nse/api/market-api.js.map +1 -0
  133. package/dist-cjs/nse/api/options-api.js +211 -0
  134. package/dist-cjs/nse/api/options-api.js.map +1 -0
  135. package/dist-cjs/nse/constants/index.js +46 -0
  136. package/dist-cjs/nse/constants/index.js.map +1 -0
  137. package/dist-cjs/nse/http/http-client.js +171 -0
  138. package/dist-cjs/nse/http/http-client.js.map +1 -0
  139. package/dist-cjs/nse/index.js +50 -0
  140. package/dist-cjs/nse/index.js.map +1 -0
  141. package/dist-cjs/nse/nse/nse-client.js +109 -0
  142. package/dist-cjs/nse/nse/nse-client.js.map +1 -0
  143. package/dist-cjs/nse/types/index.js +6 -0
  144. package/dist-cjs/nse/types/index.js.map +1 -0
  145. package/dist-cjs/nse/utils/date-formatter.js +80 -0
  146. package/dist-cjs/nse/utils/date-formatter.js.map +1 -0
  147. package/dist-cjs/nse/utils/file-operations.js +82 -0
  148. package/dist-cjs/nse/utils/file-operations.js.map +1 -0
  149. package/dist-cjs/nse/utils/index.js +22 -0
  150. package/dist-cjs/nse/utils/index.js.map +1 -0
  151. package/dist-cjs/package.json +3 -0
  152. package/dist-cjs/types/index.js +47 -0
  153. package/dist-cjs/types/index.js.map +1 -0
  154. package/package.json +99 -0
@@ -0,0 +1,453 @@
1
+ import axios from 'axios';
2
+ import * as fs from 'fs';
3
+ import * as path from 'path';
4
+ import { BSEError, TimeoutError, ConnectionError } from './types/index.js';
5
+ import { SymbolParser } from './utils/SymbolParser.js';
6
+ import { Throttle } from './utils/throttle.js';
7
+ import { getPath, formatDate, formatDateSlash, unzipFile } from './utils/helpers.js';
8
+ /**
9
+ * Unofficial TypeScript API for BSE India
10
+ */
11
+ export class BSE {
12
+ static version = '1.0.0';
13
+ static baseUrl = 'https://www.bseindia.com/';
14
+ static apiUrl = 'https://api.bseindia.com/BseIndiaAPI/api';
15
+ static validGroups = [
16
+ 'A', 'B', 'E', 'F', 'FC', 'GC', 'I', 'IF', 'IP', 'M', 'MS', 'MT',
17
+ 'P', 'R', 'T', 'TS', 'W', 'X', 'XD', 'XT', 'Y', 'Z', 'ZP', 'ZY'
18
+ ];
19
+ session;
20
+ dir;
21
+ symbolParser;
22
+ constructor(config = {}) {
23
+ this.dir = getPath(config.downloadFolder || './downloads', true);
24
+ this.symbolParser = new SymbolParser();
25
+ const userAgent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:138.0) Gecko/20100101 Firefox/138.0';
26
+ this.session = axios.create({
27
+ timeout: config.timeout || 10000,
28
+ headers: {
29
+ 'User-Agent': userAgent,
30
+ 'Accept': 'application/json, text/plain, */*',
31
+ 'Accept-Language': 'en-US,en;q=0.5',
32
+ 'Origin': BSE.baseUrl,
33
+ 'Referer': BSE.baseUrl,
34
+ 'Connection': 'keep-alive',
35
+ },
36
+ });
37
+ }
38
+ /**
39
+ * Close the HTTP session
40
+ */
41
+ close() {
42
+ // Axios doesn't need explicit closing like Python requests
43
+ }
44
+ async download(url, folder, params, filename) {
45
+ const fname = filename || url.split('/').pop() || 'download';
46
+ const filePath = path.join(folder, fname);
47
+ await Throttle.check();
48
+ try {
49
+ const response = await this.session.get(url, {
50
+ params,
51
+ responseType: 'stream',
52
+ timeout: 30000, // 30 seconds for downloads
53
+ });
54
+ if (response.status === 404) {
55
+ throw new BSEError('Report is unavailable or not yet updated.');
56
+ }
57
+ const writer = fs.createWriteStream(filePath);
58
+ response.data.pipe(writer);
59
+ return new Promise((resolve, reject) => {
60
+ writer.on('finish', () => resolve(filePath));
61
+ writer.on('error', reject);
62
+ });
63
+ }
64
+ catch (error) {
65
+ if (error.code === 'ECONNABORTED') {
66
+ throw new TimeoutError('Request timed out');
67
+ }
68
+ throw error;
69
+ }
70
+ }
71
+ async request(url, params, timeout = 10000) {
72
+ try {
73
+ const response = await this.session.get(url, {
74
+ params,
75
+ timeout,
76
+ });
77
+ return response;
78
+ }
79
+ catch (error) {
80
+ if (error.code === 'ECONNABORTED') {
81
+ throw new TimeoutError('Request timed out');
82
+ }
83
+ if (error.response) {
84
+ throw new ConnectionError(`${error.response.status}: ${error.response.statusText}`);
85
+ }
86
+ throw error;
87
+ }
88
+ }
89
+ async lookup(scrip) {
90
+ const url = `${BSE.apiUrl}/PeerSmartSearch/w`;
91
+ const params = { Type: 'SS', text: scrip };
92
+ await Throttle.check('lookup');
93
+ const response = await this.request(url, params);
94
+ return response.data.replace(/ /g, ' ');
95
+ }
96
+ /**
97
+ * Download the daily bhavcopy report for specified date
98
+ */
99
+ async bhavcopyReport(date, folder) {
100
+ const targetFolder = folder ? getPath(folder, true) : this.dir;
101
+ const dateStr = formatDate(date);
102
+ const url = `${BSE.baseUrl}/download/BhavCopy/Equity/BhavCopy_BSE_CM_0_0_0_${dateStr}_F_0000.CSV`;
103
+ const filePath = await this.download(url, targetFolder);
104
+ if (!fs.existsSync(filePath)) {
105
+ throw new BSEError(`Failed to download file: ${path.basename(filePath)}`);
106
+ }
107
+ return filePath;
108
+ }
109
+ /**
110
+ * Download the daily delivery report for specified date
111
+ */
112
+ async deliveryReport(date, folder) {
113
+ const targetFolder = folder ? getPath(folder, true) : this.dir;
114
+ const day = String(date.getDate()).padStart(2, '0');
115
+ const month = String(date.getMonth() + 1).padStart(2, '0');
116
+ const year = date.getFullYear();
117
+ const url = `${BSE.baseUrl}/BSEDATA/gross/${year}/SCBSEALL${day}${month}.zip`;
118
+ let filePath = await this.download(url, targetFolder);
119
+ if (!fs.existsSync(filePath)) {
120
+ throw new BSEError(`Failed to download file: ${path.basename(filePath)}`);
121
+ }
122
+ // Extract zip file
123
+ filePath = await unzipFile(filePath, targetFolder);
124
+ // Convert pipe-separated to CSV
125
+ const content = fs.readFileSync(filePath);
126
+ const csvContent = content.toString().replace(/\|/g, ',');
127
+ const csvPath = filePath.replace(path.extname(filePath), '.csv');
128
+ fs.writeFileSync(csvPath, csvContent);
129
+ if (filePath !== csvPath) {
130
+ fs.unlinkSync(filePath);
131
+ }
132
+ return csvPath;
133
+ }
134
+ /**
135
+ * All corporate announcements
136
+ */
137
+ async announcements(options = {}) {
138
+ const { pageNo = 1, fromDate = new Date(), toDate = new Date(), segment = 'equity', scripcode, category = '-1', subcategory = '-1' } = options;
139
+ const segmentType = segment === 'equity' ? 'C' : (segment === 'debt' ? 'D' : 'M');
140
+ if (fromDate > toDate) {
141
+ throw new BSEError("'fromDate' cannot be greater than 'toDate'");
142
+ }
143
+ if (subcategory !== '-1' && category === '-1') {
144
+ throw new BSEError(`Specify a 'category' for subcategory: ${subcategory}`);
145
+ }
146
+ const url = `${BSE.apiUrl}/AnnSubCategoryGetData/w`;
147
+ const params = {
148
+ pageno: pageNo,
149
+ strCat: category,
150
+ subcategory: subcategory,
151
+ strPrevDate: formatDate(fromDate),
152
+ strToDate: formatDate(toDate),
153
+ strSearch: 'P',
154
+ strscrip: scripcode,
155
+ strType: segmentType,
156
+ };
157
+ await Throttle.check();
158
+ const response = await this.request(url, params);
159
+ return response.data;
160
+ }
161
+ /**
162
+ * All forthcoming corporate actions
163
+ */
164
+ async actions(options = {}) {
165
+ const { segment = 'equity', fromDate, toDate, byDate = 'ex', scripcode, sector = '', purposeCode } = options;
166
+ const segmentType = segment === 'equity' ? '0' : (segment === 'debt' ? '1' : '2');
167
+ const byType = byDate === 'ex' ? 'E' : (byDate === 'record' ? 'R' : 'B');
168
+ const params = {
169
+ ddlcategorys: byType,
170
+ ddlindustrys: sector,
171
+ segment: segmentType,
172
+ strSearch: 'D',
173
+ };
174
+ if (fromDate && toDate) {
175
+ if (fromDate > toDate) {
176
+ throw new BSEError("'fromDate' cannot be greater than 'toDate'");
177
+ }
178
+ params.Fdate = formatDate(fromDate);
179
+ params.TDate = formatDate(toDate);
180
+ }
181
+ if (purposeCode) {
182
+ params.Purposecode = purposeCode;
183
+ }
184
+ if (scripcode) {
185
+ params.scripcode = scripcode;
186
+ }
187
+ const response = await this.request(`${BSE.apiUrl}/DefaultData/w`, params);
188
+ return response.data;
189
+ }
190
+ /**
191
+ * Corporate result calendar
192
+ */
193
+ async resultCalendar(options = {}) {
194
+ const { fromDate, toDate, scripcode } = options;
195
+ const params = {};
196
+ if (fromDate && toDate) {
197
+ if (fromDate > toDate) {
198
+ throw new BSEError("'fromDate' cannot be greater than 'toDate'");
199
+ }
200
+ params.fromdate = formatDate(fromDate);
201
+ params.todate = formatDate(toDate);
202
+ }
203
+ if (scripcode) {
204
+ params.scripcode = scripcode;
205
+ }
206
+ const url = `${BSE.apiUrl}/Corpforthresults/w`;
207
+ const response = await this.request(url, params);
208
+ return response.data;
209
+ }
210
+ /**
211
+ * Advance decline values for all BSE indices
212
+ */
213
+ async advanceDecline() {
214
+ const url = `${BSE.apiUrl}/advanceDecline/w`;
215
+ await Throttle.check();
216
+ const response = await this.request(url, { val: 'Index' });
217
+ return response.data;
218
+ }
219
+ /**
220
+ * List of top gainers
221
+ */
222
+ async gainers(options = {}) {
223
+ const { by = 'group', name, pctChange = 'all' } = options;
224
+ const params = {
225
+ GLtype: 'gainer',
226
+ IndxGrp: by,
227
+ orderby: pctChange,
228
+ };
229
+ if (by === 'group') {
230
+ const groupName = name || 'A';
231
+ if (!BSE.validGroups.includes(groupName.toUpperCase())) {
232
+ throw new BSEError(`${groupName}: Not a valid BSE stock group`);
233
+ }
234
+ params.IndxGrpval = groupName.toUpperCase();
235
+ }
236
+ else if (by === 'index') {
237
+ params.IndxGrpval = (name || 'S&P BSE SENSEX').toUpperCase();
238
+ }
239
+ const url = `${BSE.apiUrl}/MktRGainerLoserData/w`;
240
+ const response = await this.request(url, params);
241
+ return response.data.Table;
242
+ }
243
+ /**
244
+ * List of top losers
245
+ */
246
+ async losers(options = {}) {
247
+ const { by = 'group', name, pctChange = 'all' } = options;
248
+ const params = {
249
+ GLtype: 'loser',
250
+ IndxGrp: by,
251
+ orderby: pctChange,
252
+ };
253
+ if (by === 'group') {
254
+ const groupName = name || 'A';
255
+ if (!BSE.validGroups.includes(groupName.toUpperCase())) {
256
+ throw new BSEError(`${groupName}: Not a valid BSE group`);
257
+ }
258
+ params.IndxGrpval = groupName.toUpperCase();
259
+ }
260
+ else if (by === 'index') {
261
+ params.IndxGrpval = (name || 'S&P BSE SENSEX').toUpperCase();
262
+ }
263
+ const url = `${BSE.apiUrl}/MktRGainerLoserData/w`;
264
+ const response = await this.request(url, params);
265
+ return response.data.Table;
266
+ }
267
+ /**
268
+ * Get stocks near 52 week highs and lows
269
+ */
270
+ async near52WeekHighLow(options = {}) {
271
+ const { by = 'group', name } = options;
272
+ const url = `${BSE.apiUrl}/MktHighLowData/w`;
273
+ const params = {
274
+ HLflag: 'H',
275
+ Grpcode: '',
276
+ indexcode: '',
277
+ scripcode: '',
278
+ };
279
+ if (by === 'group') {
280
+ const groupName = name || 'A';
281
+ if (!BSE.validGroups.includes(groupName.toUpperCase())) {
282
+ throw new BSEError(`${groupName}: Not a valid BSE stock group`);
283
+ }
284
+ params.Grpcode = groupName.toUpperCase();
285
+ }
286
+ else if (by === 'index') {
287
+ params.indexcode = name || 'S&P BSE SENSEX';
288
+ }
289
+ await Throttle.check();
290
+ const response = await this.request(url, params);
291
+ const data = response.data;
292
+ const result = {};
293
+ if (data.Table) {
294
+ result.highs = data.Table;
295
+ }
296
+ if (data.Table1) {
297
+ result.lows = data.Table1;
298
+ }
299
+ return result;
300
+ }
301
+ /**
302
+ * Get OHLC quotes for given scripcode
303
+ */
304
+ async quote(scripcode) {
305
+ const url = `${BSE.apiUrl}/getScripHeaderData/w`;
306
+ const params = {
307
+ scripcode: scripcode,
308
+ };
309
+ await Throttle.check();
310
+ const response = await this.request(url, params);
311
+ const header = response.data.Header;
312
+ const fields = ['PrevClose', 'Open', 'High', 'Low', 'LTP'];
313
+ const data = {};
314
+ for (const field of fields) {
315
+ data[field] = parseFloat(header[field]);
316
+ }
317
+ return data;
318
+ }
319
+ /**
320
+ * Get 52 week and monthly high & low data for given stock
321
+ */
322
+ async quoteWeeklyHL(scripcode) {
323
+ const params = { Type: 'EQ', flag: 'C', scripcode: scripcode };
324
+ await Throttle.check();
325
+ const response = await this.request(`${BSE.apiUrl}/HighLow/w`, params);
326
+ const data = response.data;
327
+ const [wHigh, wLow] = data.WeekHighLow.split(' / ');
328
+ const [mHigh, mLow] = data.MonthHighLow.split(' / ');
329
+ return {
330
+ fifty2WeekHigh: parseFloat(data.Fifty2WkHigh_adj),
331
+ dateHigh: data.Fifty2WkHigh_adjDt.replace(/[()]/g, '').trim(),
332
+ fifty2WeekLow: parseFloat(data.Fifty2WkLow_adj),
333
+ dateLow: data.Fifty2WkLow_adjDt.replace(/[()]/g, '').trim(),
334
+ monthlyHigh: parseFloat(mHigh),
335
+ monthlyLow: parseFloat(mLow),
336
+ weeklyHigh: parseFloat(wHigh),
337
+ weeklyLow: parseFloat(wLow),
338
+ };
339
+ }
340
+ /**
341
+ * List securities and their meta info
342
+ */
343
+ async listSecurities(options = {}) {
344
+ const { industry = '', scripcode = '', group = 'A', segment = 'Equity', status = 'Active' } = options;
345
+ const url = `${BSE.apiUrl}/ListofScripData/w`;
346
+ const params = {
347
+ scripcode,
348
+ Group: group,
349
+ industry,
350
+ segment,
351
+ status,
352
+ };
353
+ if (group && !BSE.validGroups.includes(group.toUpperCase())) {
354
+ throw new BSEError(`${group} not a valid BSE stock group`);
355
+ }
356
+ await Throttle.check();
357
+ const response = await this.request(url, params);
358
+ return response.data;
359
+ }
360
+ /**
361
+ * Search by Company name, stock symbol, ISIN or BSE code
362
+ */
363
+ async lookupSymbol(text) {
364
+ const response = await this.lookup(text);
365
+ this.symbolParser.feed(response);
366
+ const result = this.symbolParser.getResult();
367
+ this.symbolParser.resetData();
368
+ return result;
369
+ }
370
+ /**
371
+ * Get stock symbol name for BSE scrip code
372
+ */
373
+ async getScripName(scripcode) {
374
+ // <span>HDFC INE001A01036<strong>500010
375
+ const regex = new RegExp(`<\\w+>([A-Z0-9]+)\\s+\\w+\\s+<\\w+>${scripcode}`);
376
+ const response = await this.lookup(scripcode);
377
+ const match = response.match(regex);
378
+ if (match) {
379
+ return match[1];
380
+ }
381
+ throw new BSEError(`Could not find scrip name for ${scripcode}`);
382
+ }
383
+ /**
384
+ * Get BSE scrip code for stock symbol name
385
+ */
386
+ async getScripCode(scripname) {
387
+ // <strong>HDFC</strong> INE001A01036 500010
388
+ const regex = new RegExp(`<\\w+>${scripname.toUpperCase()}<\\/\\w+>\\s+\\w+\\s+(\\d{6})`);
389
+ const response = await this.lookup(scripname);
390
+ const match = response.match(regex);
391
+ if (match) {
392
+ return match[1];
393
+ }
394
+ throw new BSEError(`Could not find scrip code for ${scripname}`);
395
+ }
396
+ /**
397
+ * Fetch daily data for all indices for a given date
398
+ */
399
+ async fetchAllIndicesDataByDate(date) {
400
+ await Throttle.check();
401
+ const dateStr = formatDateSlash(date);
402
+ const response = await this.request(`${BSE.apiUrl}/IndexArchDailyAll/w`, {
403
+ fmdt: dateStr,
404
+ todt: dateStr,
405
+ index: 'All',
406
+ period: 'D',
407
+ });
408
+ return response.data;
409
+ }
410
+ /**
411
+ * Download historical data for the specified index for the given date range
412
+ */
413
+ async fetchHistoricalIndexData(options) {
414
+ const { index, fromDate, toDate, period = 'D', folder } = options;
415
+ if (toDate < fromDate) {
416
+ throw new BSEError('`toDate` must be greater than `fromDate`');
417
+ }
418
+ await Throttle.check();
419
+ const targetFolder = folder ? getPath(folder, true) : this.dir;
420
+ const fname = `${index}_${formatDate(fromDate)}_${formatDate(toDate)}.csv`;
421
+ const filePath = await this.download(`${BSE.apiUrl}/ProduceCSVForDate/w`, targetFolder, {
422
+ strIndex: index,
423
+ dtFromDate: formatDateSlash(fromDate),
424
+ dtToDate: formatDateSlash(toDate),
425
+ period: period,
426
+ }, fname);
427
+ if (fs.statSync(filePath).size > 0) {
428
+ return filePath;
429
+ }
430
+ else {
431
+ fs.unlinkSync(filePath);
432
+ return null;
433
+ }
434
+ }
435
+ /**
436
+ * Fetch the list of Indices
437
+ */
438
+ async fetchIndexNames() {
439
+ const url = `${BSE.apiUrl}/FillddlIndex/w?fmdt=&todt=`;
440
+ await Throttle.check();
441
+ const response = await this.request(url);
442
+ return response.data;
443
+ }
444
+ /**
445
+ * Returns metadata about AllIndices report
446
+ */
447
+ async fetchIndexReportMetadata() {
448
+ await Throttle.check();
449
+ const response = await this.request(`${BSE.apiUrl}/Indexarchive_filedownload/w`);
450
+ return response.data;
451
+ }
452
+ }
453
+ //# sourceMappingURL=BSE.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BSE.js","sourceRoot":"","sources":["../../src/bse/BSE.ts"],"names":[],"mappings":"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"}