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