shoonya-sdk 0.4.1 → 0.4.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/shoonya-sdk.d.mts +138 -42
- package/dist/shoonya-sdk.d.ts +138 -42
- package/dist/shoonya-sdk.js +73 -6
- package/dist/shoonya-sdk.mjs +73 -6
- package/package.json +1 -1
package/dist/shoonya-sdk.d.mts
CHANGED
|
@@ -1,46 +1,5 @@
|
|
|
1
1
|
import { EventEmitter } from 'events';
|
|
2
2
|
|
|
3
|
-
declare const paths: {
|
|
4
|
-
readonly login: "QuickAuth";
|
|
5
|
-
readonly logout: "Logout";
|
|
6
|
-
readonly forgotPassword: "ForgotPassword";
|
|
7
|
-
readonly changePassword: "Changepwd";
|
|
8
|
-
readonly watchlist: "MWList";
|
|
9
|
-
readonly getWatchlist: "MarketWatch";
|
|
10
|
-
readonly searchScrip: "SearchScrip";
|
|
11
|
-
readonly userInfo: "UserDetails";
|
|
12
|
-
readonly clientInfo: "ClientDetails";
|
|
13
|
-
readonly quotes: "GetQuotes";
|
|
14
|
-
readonly addScripToWL: "AddMultiScripsToMW";
|
|
15
|
-
readonly removeScripFromWL: "DeleteMultiMWScrips";
|
|
16
|
-
readonly securityInfo: "GetSecurityInfo";
|
|
17
|
-
readonly placeOrder: "PlaceOrder";
|
|
18
|
-
readonly modifyOrder: "ModifyOrder";
|
|
19
|
-
readonly cancelOrder: "CancelOrder";
|
|
20
|
-
readonly exitSNOOrder: "ExitSNOOrder";
|
|
21
|
-
readonly historicData: "TPSeries";
|
|
22
|
-
readonly optionChain: "GetOptionChain";
|
|
23
|
-
readonly orderBook: "OrderBook";
|
|
24
|
-
};
|
|
25
|
-
type Path = keyof typeof paths;
|
|
26
|
-
|
|
27
|
-
type LogType = "DEBUG" | "WARN" | "ERROR";
|
|
28
|
-
declare class Logger {
|
|
29
|
-
logPath: string;
|
|
30
|
-
maxSize: number;
|
|
31
|
-
fileName: string;
|
|
32
|
-
/**
|
|
33
|
-
*
|
|
34
|
-
* @param logFileName name to prepend the logs file with
|
|
35
|
-
* @param size max size of file (in bytes)
|
|
36
|
-
*/
|
|
37
|
-
constructor(logFileName: string, size: number);
|
|
38
|
-
log(msg: string, logType?: LogType): void;
|
|
39
|
-
private checkLogSize;
|
|
40
|
-
private deleteOldestFile;
|
|
41
|
-
private checkPathExistance;
|
|
42
|
-
}
|
|
43
|
-
|
|
44
3
|
type RequestDataType = {
|
|
45
4
|
[key: string]: string;
|
|
46
5
|
};
|
|
@@ -203,6 +162,127 @@ interface OrderBookFail {
|
|
|
203
162
|
emsg: string;
|
|
204
163
|
}
|
|
205
164
|
type OrderBook = OrderBookSuccess[] | OrderBookFail;
|
|
165
|
+
interface GetLimitsParam {
|
|
166
|
+
/**
|
|
167
|
+
* Product Name
|
|
168
|
+
* (Select from ‘prarr’ Array provided in User Details response, and if same is allowed for selected, exchange.
|
|
169
|
+
* Show product display name, for user to select, and send corresponding prd in API call)
|
|
170
|
+
*
|
|
171
|
+
* ```
|
|
172
|
+
* `C` : CNC
|
|
173
|
+
* `M` : NRML
|
|
174
|
+
* `I` : MIS
|
|
175
|
+
* `B` : Bracket Order
|
|
176
|
+
* `H` : Cover Order
|
|
177
|
+
* ```
|
|
178
|
+
*/
|
|
179
|
+
prd?: "C" | "M" | "I" | "B" | "H";
|
|
180
|
+
seg?: "CM" | "FX" | "FO";
|
|
181
|
+
exch?: "NSE" | "NFO" | "BSE" | "MCX" | "CDS";
|
|
182
|
+
}
|
|
183
|
+
interface GetLimitsResponseFail {
|
|
184
|
+
stat: "Not_Ok";
|
|
185
|
+
emsg: string;
|
|
186
|
+
}
|
|
187
|
+
interface GetLimitsResponseSuccess {
|
|
188
|
+
request_time: string;
|
|
189
|
+
stat: "Ok";
|
|
190
|
+
prfname: string;
|
|
191
|
+
cash: number;
|
|
192
|
+
payin: number;
|
|
193
|
+
payout: number;
|
|
194
|
+
brkcollamt: number;
|
|
195
|
+
unclearedcash: number;
|
|
196
|
+
aux_daycash: number;
|
|
197
|
+
aux_brkcollamt: number;
|
|
198
|
+
aux_unclearedcash: number;
|
|
199
|
+
daycash: number;
|
|
200
|
+
turnoverlmt: number;
|
|
201
|
+
pendordvallmt: number;
|
|
202
|
+
remarks_amt: number;
|
|
203
|
+
remarks_text: string;
|
|
204
|
+
blk_amt: number;
|
|
205
|
+
}
|
|
206
|
+
interface GetSecurityInfoSuccess {
|
|
207
|
+
request_time: string;
|
|
208
|
+
stat: "Ok";
|
|
209
|
+
exch: "NFO" | "NSE" | "BSE" | "MCX" | "CDS";
|
|
210
|
+
tsym: string;
|
|
211
|
+
cname: string;
|
|
212
|
+
symname: string;
|
|
213
|
+
seg: string;
|
|
214
|
+
exd: string;
|
|
215
|
+
instname: string;
|
|
216
|
+
optt: "CE" | "PE";
|
|
217
|
+
und_exch: string;
|
|
218
|
+
und_tk: string;
|
|
219
|
+
pp: string;
|
|
220
|
+
prcftr: string;
|
|
221
|
+
ls: string;
|
|
222
|
+
ti: string;
|
|
223
|
+
mult: string;
|
|
224
|
+
weekly: string;
|
|
225
|
+
dname: string;
|
|
226
|
+
uc: string;
|
|
227
|
+
lc: string;
|
|
228
|
+
strprc: string;
|
|
229
|
+
prcftr_d: string;
|
|
230
|
+
exptime: string;
|
|
231
|
+
token: string;
|
|
232
|
+
frzqty: string;
|
|
233
|
+
delmrg: string;
|
|
234
|
+
varmrg: string;
|
|
235
|
+
expmrg: string;
|
|
236
|
+
}
|
|
237
|
+
interface GetSecurityInfoFail {
|
|
238
|
+
stat: "Not_Ok";
|
|
239
|
+
request_time: string;
|
|
240
|
+
emsg: string;
|
|
241
|
+
}
|
|
242
|
+
type GetSecurityInfoResponse = GetSecurityInfoSuccess | GetSecurityInfoFail;
|
|
243
|
+
|
|
244
|
+
declare const paths: {
|
|
245
|
+
readonly login: "QuickAuth";
|
|
246
|
+
readonly logout: "Logout";
|
|
247
|
+
readonly forgotPassword: "ForgotPassword";
|
|
248
|
+
readonly changePassword: "Changepwd";
|
|
249
|
+
readonly watchlist: "MWList";
|
|
250
|
+
readonly getWatchlist: "MarketWatch";
|
|
251
|
+
readonly searchScrip: "SearchScrip";
|
|
252
|
+
readonly userInfo: "UserDetails";
|
|
253
|
+
readonly clientInfo: "ClientDetails";
|
|
254
|
+
readonly quotes: "GetQuotes";
|
|
255
|
+
readonly addScripToWL: "AddMultiScripsToMW";
|
|
256
|
+
readonly removeScripFromWL: "DeleteMultiMWScrips";
|
|
257
|
+
readonly securityInfo: "GetSecurityInfo";
|
|
258
|
+
readonly placeOrder: "PlaceOrder";
|
|
259
|
+
readonly modifyOrder: "ModifyOrder";
|
|
260
|
+
readonly cancelOrder: "CancelOrder";
|
|
261
|
+
readonly exitSNOOrder: "ExitSNOOrder";
|
|
262
|
+
readonly historicData: "TPSeries";
|
|
263
|
+
readonly optionChain: "GetOptionChain";
|
|
264
|
+
readonly orderBook: "OrderBook";
|
|
265
|
+
readonly holding: "Holdings";
|
|
266
|
+
readonly limits: "Limits";
|
|
267
|
+
};
|
|
268
|
+
type Path = keyof typeof paths;
|
|
269
|
+
|
|
270
|
+
type LogType = "DEBUG" | "WARN" | "ERROR";
|
|
271
|
+
declare class Logger {
|
|
272
|
+
logPath: string;
|
|
273
|
+
maxSize: number;
|
|
274
|
+
fileName: string;
|
|
275
|
+
/**
|
|
276
|
+
*
|
|
277
|
+
* @param logFileName name to prepend the logs file with
|
|
278
|
+
* @param size max size of file (in bytes)
|
|
279
|
+
*/
|
|
280
|
+
constructor(logFileName: string, size: number);
|
|
281
|
+
log(msg: string, logType?: LogType): void;
|
|
282
|
+
private checkLogSize;
|
|
283
|
+
private deleteOldestFile;
|
|
284
|
+
private checkPathExistance;
|
|
285
|
+
}
|
|
206
286
|
|
|
207
287
|
type ShoonyaWSEvents = "connect" | "open" | "priceUpdate" | "orderUpdate" | "stopped" | "close" | "reconnect" | "error";
|
|
208
288
|
declare interface Shoonya {
|
|
@@ -228,6 +308,7 @@ declare class Shoonya extends EventEmitter {
|
|
|
228
308
|
private reconnectTimeout;
|
|
229
309
|
private heartbeatTimeout;
|
|
230
310
|
private lastWsMsgAt;
|
|
311
|
+
private autoReconnectTimeout;
|
|
231
312
|
constructor(options?: {
|
|
232
313
|
logging: boolean;
|
|
233
314
|
/**
|
|
@@ -288,7 +369,7 @@ declare class Shoonya extends EventEmitter {
|
|
|
288
369
|
* @returns
|
|
289
370
|
*/
|
|
290
371
|
removeScripFromWatchList(listName: string, scrips: string[]): Promise<unknown>;
|
|
291
|
-
getSecurityInfo(exchange: string, contractToken: string): Promise<
|
|
372
|
+
getSecurityInfo(exchange: string, contractToken: string): Promise<GetSecurityInfoResponse>;
|
|
292
373
|
placeOrder(details: OrderInput): Promise<PlaceOrder>;
|
|
293
374
|
modifyOrder(orderDetail: MakeKeysRequired<Partial<OrderInput>, "exch" | "norenordno" | "tsym">): Promise<unknown>;
|
|
294
375
|
cancelOrder(orderNo: string): Promise<unknown>;
|
|
@@ -337,6 +418,21 @@ declare class Shoonya extends EventEmitter {
|
|
|
337
418
|
}>;
|
|
338
419
|
private getFormattedExpiry;
|
|
339
420
|
private getNextFormattedDates;
|
|
421
|
+
/**
|
|
422
|
+
* Product Name
|
|
423
|
+
* (Select from ‘prarr’ Array provided in User Details response, and if same is allowed for selected, exchange.
|
|
424
|
+
* Show product display name, for user to select, and send corresponding prd in API call)
|
|
425
|
+
*
|
|
426
|
+
* ```
|
|
427
|
+
* `C` : CNC
|
|
428
|
+
* `M` : NRML
|
|
429
|
+
* `I` : MIS
|
|
430
|
+
* `B` : Bracket Order
|
|
431
|
+
* `H` : Cover Order
|
|
432
|
+
* ```
|
|
433
|
+
*/
|
|
434
|
+
getAccountHolding(productName: "C" | "M" | "I" | "B" | "H"): Promise<any>;
|
|
435
|
+
getAccountLimits(params?: GetLimitsParam): Promise<GetLimitsResponseSuccess | GetLimitsResponseFail>;
|
|
340
436
|
getLastWSMessage(): Date;
|
|
341
437
|
getWSState(): {
|
|
342
438
|
OPEN: boolean;
|
package/dist/shoonya-sdk.d.ts
CHANGED
|
@@ -1,46 +1,5 @@
|
|
|
1
1
|
import { EventEmitter } from 'events';
|
|
2
2
|
|
|
3
|
-
declare const paths: {
|
|
4
|
-
readonly login: "QuickAuth";
|
|
5
|
-
readonly logout: "Logout";
|
|
6
|
-
readonly forgotPassword: "ForgotPassword";
|
|
7
|
-
readonly changePassword: "Changepwd";
|
|
8
|
-
readonly watchlist: "MWList";
|
|
9
|
-
readonly getWatchlist: "MarketWatch";
|
|
10
|
-
readonly searchScrip: "SearchScrip";
|
|
11
|
-
readonly userInfo: "UserDetails";
|
|
12
|
-
readonly clientInfo: "ClientDetails";
|
|
13
|
-
readonly quotes: "GetQuotes";
|
|
14
|
-
readonly addScripToWL: "AddMultiScripsToMW";
|
|
15
|
-
readonly removeScripFromWL: "DeleteMultiMWScrips";
|
|
16
|
-
readonly securityInfo: "GetSecurityInfo";
|
|
17
|
-
readonly placeOrder: "PlaceOrder";
|
|
18
|
-
readonly modifyOrder: "ModifyOrder";
|
|
19
|
-
readonly cancelOrder: "CancelOrder";
|
|
20
|
-
readonly exitSNOOrder: "ExitSNOOrder";
|
|
21
|
-
readonly historicData: "TPSeries";
|
|
22
|
-
readonly optionChain: "GetOptionChain";
|
|
23
|
-
readonly orderBook: "OrderBook";
|
|
24
|
-
};
|
|
25
|
-
type Path = keyof typeof paths;
|
|
26
|
-
|
|
27
|
-
type LogType = "DEBUG" | "WARN" | "ERROR";
|
|
28
|
-
declare class Logger {
|
|
29
|
-
logPath: string;
|
|
30
|
-
maxSize: number;
|
|
31
|
-
fileName: string;
|
|
32
|
-
/**
|
|
33
|
-
*
|
|
34
|
-
* @param logFileName name to prepend the logs file with
|
|
35
|
-
* @param size max size of file (in bytes)
|
|
36
|
-
*/
|
|
37
|
-
constructor(logFileName: string, size: number);
|
|
38
|
-
log(msg: string, logType?: LogType): void;
|
|
39
|
-
private checkLogSize;
|
|
40
|
-
private deleteOldestFile;
|
|
41
|
-
private checkPathExistance;
|
|
42
|
-
}
|
|
43
|
-
|
|
44
3
|
type RequestDataType = {
|
|
45
4
|
[key: string]: string;
|
|
46
5
|
};
|
|
@@ -203,6 +162,127 @@ interface OrderBookFail {
|
|
|
203
162
|
emsg: string;
|
|
204
163
|
}
|
|
205
164
|
type OrderBook = OrderBookSuccess[] | OrderBookFail;
|
|
165
|
+
interface GetLimitsParam {
|
|
166
|
+
/**
|
|
167
|
+
* Product Name
|
|
168
|
+
* (Select from ‘prarr’ Array provided in User Details response, and if same is allowed for selected, exchange.
|
|
169
|
+
* Show product display name, for user to select, and send corresponding prd in API call)
|
|
170
|
+
*
|
|
171
|
+
* ```
|
|
172
|
+
* `C` : CNC
|
|
173
|
+
* `M` : NRML
|
|
174
|
+
* `I` : MIS
|
|
175
|
+
* `B` : Bracket Order
|
|
176
|
+
* `H` : Cover Order
|
|
177
|
+
* ```
|
|
178
|
+
*/
|
|
179
|
+
prd?: "C" | "M" | "I" | "B" | "H";
|
|
180
|
+
seg?: "CM" | "FX" | "FO";
|
|
181
|
+
exch?: "NSE" | "NFO" | "BSE" | "MCX" | "CDS";
|
|
182
|
+
}
|
|
183
|
+
interface GetLimitsResponseFail {
|
|
184
|
+
stat: "Not_Ok";
|
|
185
|
+
emsg: string;
|
|
186
|
+
}
|
|
187
|
+
interface GetLimitsResponseSuccess {
|
|
188
|
+
request_time: string;
|
|
189
|
+
stat: "Ok";
|
|
190
|
+
prfname: string;
|
|
191
|
+
cash: number;
|
|
192
|
+
payin: number;
|
|
193
|
+
payout: number;
|
|
194
|
+
brkcollamt: number;
|
|
195
|
+
unclearedcash: number;
|
|
196
|
+
aux_daycash: number;
|
|
197
|
+
aux_brkcollamt: number;
|
|
198
|
+
aux_unclearedcash: number;
|
|
199
|
+
daycash: number;
|
|
200
|
+
turnoverlmt: number;
|
|
201
|
+
pendordvallmt: number;
|
|
202
|
+
remarks_amt: number;
|
|
203
|
+
remarks_text: string;
|
|
204
|
+
blk_amt: number;
|
|
205
|
+
}
|
|
206
|
+
interface GetSecurityInfoSuccess {
|
|
207
|
+
request_time: string;
|
|
208
|
+
stat: "Ok";
|
|
209
|
+
exch: "NFO" | "NSE" | "BSE" | "MCX" | "CDS";
|
|
210
|
+
tsym: string;
|
|
211
|
+
cname: string;
|
|
212
|
+
symname: string;
|
|
213
|
+
seg: string;
|
|
214
|
+
exd: string;
|
|
215
|
+
instname: string;
|
|
216
|
+
optt: "CE" | "PE";
|
|
217
|
+
und_exch: string;
|
|
218
|
+
und_tk: string;
|
|
219
|
+
pp: string;
|
|
220
|
+
prcftr: string;
|
|
221
|
+
ls: string;
|
|
222
|
+
ti: string;
|
|
223
|
+
mult: string;
|
|
224
|
+
weekly: string;
|
|
225
|
+
dname: string;
|
|
226
|
+
uc: string;
|
|
227
|
+
lc: string;
|
|
228
|
+
strprc: string;
|
|
229
|
+
prcftr_d: string;
|
|
230
|
+
exptime: string;
|
|
231
|
+
token: string;
|
|
232
|
+
frzqty: string;
|
|
233
|
+
delmrg: string;
|
|
234
|
+
varmrg: string;
|
|
235
|
+
expmrg: string;
|
|
236
|
+
}
|
|
237
|
+
interface GetSecurityInfoFail {
|
|
238
|
+
stat: "Not_Ok";
|
|
239
|
+
request_time: string;
|
|
240
|
+
emsg: string;
|
|
241
|
+
}
|
|
242
|
+
type GetSecurityInfoResponse = GetSecurityInfoSuccess | GetSecurityInfoFail;
|
|
243
|
+
|
|
244
|
+
declare const paths: {
|
|
245
|
+
readonly login: "QuickAuth";
|
|
246
|
+
readonly logout: "Logout";
|
|
247
|
+
readonly forgotPassword: "ForgotPassword";
|
|
248
|
+
readonly changePassword: "Changepwd";
|
|
249
|
+
readonly watchlist: "MWList";
|
|
250
|
+
readonly getWatchlist: "MarketWatch";
|
|
251
|
+
readonly searchScrip: "SearchScrip";
|
|
252
|
+
readonly userInfo: "UserDetails";
|
|
253
|
+
readonly clientInfo: "ClientDetails";
|
|
254
|
+
readonly quotes: "GetQuotes";
|
|
255
|
+
readonly addScripToWL: "AddMultiScripsToMW";
|
|
256
|
+
readonly removeScripFromWL: "DeleteMultiMWScrips";
|
|
257
|
+
readonly securityInfo: "GetSecurityInfo";
|
|
258
|
+
readonly placeOrder: "PlaceOrder";
|
|
259
|
+
readonly modifyOrder: "ModifyOrder";
|
|
260
|
+
readonly cancelOrder: "CancelOrder";
|
|
261
|
+
readonly exitSNOOrder: "ExitSNOOrder";
|
|
262
|
+
readonly historicData: "TPSeries";
|
|
263
|
+
readonly optionChain: "GetOptionChain";
|
|
264
|
+
readonly orderBook: "OrderBook";
|
|
265
|
+
readonly holding: "Holdings";
|
|
266
|
+
readonly limits: "Limits";
|
|
267
|
+
};
|
|
268
|
+
type Path = keyof typeof paths;
|
|
269
|
+
|
|
270
|
+
type LogType = "DEBUG" | "WARN" | "ERROR";
|
|
271
|
+
declare class Logger {
|
|
272
|
+
logPath: string;
|
|
273
|
+
maxSize: number;
|
|
274
|
+
fileName: string;
|
|
275
|
+
/**
|
|
276
|
+
*
|
|
277
|
+
* @param logFileName name to prepend the logs file with
|
|
278
|
+
* @param size max size of file (in bytes)
|
|
279
|
+
*/
|
|
280
|
+
constructor(logFileName: string, size: number);
|
|
281
|
+
log(msg: string, logType?: LogType): void;
|
|
282
|
+
private checkLogSize;
|
|
283
|
+
private deleteOldestFile;
|
|
284
|
+
private checkPathExistance;
|
|
285
|
+
}
|
|
206
286
|
|
|
207
287
|
type ShoonyaWSEvents = "connect" | "open" | "priceUpdate" | "orderUpdate" | "stopped" | "close" | "reconnect" | "error";
|
|
208
288
|
declare interface Shoonya {
|
|
@@ -228,6 +308,7 @@ declare class Shoonya extends EventEmitter {
|
|
|
228
308
|
private reconnectTimeout;
|
|
229
309
|
private heartbeatTimeout;
|
|
230
310
|
private lastWsMsgAt;
|
|
311
|
+
private autoReconnectTimeout;
|
|
231
312
|
constructor(options?: {
|
|
232
313
|
logging: boolean;
|
|
233
314
|
/**
|
|
@@ -288,7 +369,7 @@ declare class Shoonya extends EventEmitter {
|
|
|
288
369
|
* @returns
|
|
289
370
|
*/
|
|
290
371
|
removeScripFromWatchList(listName: string, scrips: string[]): Promise<unknown>;
|
|
291
|
-
getSecurityInfo(exchange: string, contractToken: string): Promise<
|
|
372
|
+
getSecurityInfo(exchange: string, contractToken: string): Promise<GetSecurityInfoResponse>;
|
|
292
373
|
placeOrder(details: OrderInput): Promise<PlaceOrder>;
|
|
293
374
|
modifyOrder(orderDetail: MakeKeysRequired<Partial<OrderInput>, "exch" | "norenordno" | "tsym">): Promise<unknown>;
|
|
294
375
|
cancelOrder(orderNo: string): Promise<unknown>;
|
|
@@ -337,6 +418,21 @@ declare class Shoonya extends EventEmitter {
|
|
|
337
418
|
}>;
|
|
338
419
|
private getFormattedExpiry;
|
|
339
420
|
private getNextFormattedDates;
|
|
421
|
+
/**
|
|
422
|
+
* Product Name
|
|
423
|
+
* (Select from ‘prarr’ Array provided in User Details response, and if same is allowed for selected, exchange.
|
|
424
|
+
* Show product display name, for user to select, and send corresponding prd in API call)
|
|
425
|
+
*
|
|
426
|
+
* ```
|
|
427
|
+
* `C` : CNC
|
|
428
|
+
* `M` : NRML
|
|
429
|
+
* `I` : MIS
|
|
430
|
+
* `B` : Bracket Order
|
|
431
|
+
* `H` : Cover Order
|
|
432
|
+
* ```
|
|
433
|
+
*/
|
|
434
|
+
getAccountHolding(productName: "C" | "M" | "I" | "B" | "H"): Promise<any>;
|
|
435
|
+
getAccountLimits(params?: GetLimitsParam): Promise<GetLimitsResponseSuccess | GetLimitsResponseFail>;
|
|
340
436
|
getLastWSMessage(): Date;
|
|
341
437
|
getWSState(): {
|
|
342
438
|
OPEN: boolean;
|
package/dist/shoonya-sdk.js
CHANGED
|
@@ -63,7 +63,9 @@ var paths = {
|
|
|
63
63
|
exitSNOOrder: "ExitSNOOrder",
|
|
64
64
|
historicData: "TPSeries",
|
|
65
65
|
optionChain: "GetOptionChain",
|
|
66
|
-
orderBook: "OrderBook"
|
|
66
|
+
orderBook: "OrderBook",
|
|
67
|
+
holding: "Holdings",
|
|
68
|
+
limits: "Limits"
|
|
67
69
|
};
|
|
68
70
|
|
|
69
71
|
// src/shoonya-sdk.ts
|
|
@@ -137,6 +139,25 @@ var Logger = class {
|
|
|
137
139
|
};
|
|
138
140
|
var logger_default = Logger;
|
|
139
141
|
|
|
142
|
+
// src/utils/parser.ts
|
|
143
|
+
var exampleObject = {
|
|
144
|
+
convertable: "57.3",
|
|
145
|
+
unconvertable: "So"
|
|
146
|
+
};
|
|
147
|
+
function parseKeysToNumber(obj) {
|
|
148
|
+
const newObj = {};
|
|
149
|
+
for (const key in obj) {
|
|
150
|
+
if (Number.isNaN(Number(obj[key]))) {
|
|
151
|
+
newObj[key] = String(obj[key]);
|
|
152
|
+
} else {
|
|
153
|
+
newObj[key] = Number(obj[key]);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
return newObj;
|
|
157
|
+
}
|
|
158
|
+
__name(parseKeysToNumber, "parseKeysToNumber");
|
|
159
|
+
var parsedObj = parseKeysToNumber(exampleObject);
|
|
160
|
+
|
|
140
161
|
// src/shoonya-sdk.ts
|
|
141
162
|
var import_totp_generator = __toESM(require("totp-generator"));
|
|
142
163
|
var Shoonya = class extends import_events.EventEmitter {
|
|
@@ -161,6 +182,7 @@ var Shoonya = class extends import_events.EventEmitter {
|
|
|
161
182
|
reconnectTimeout;
|
|
162
183
|
heartbeatTimeout;
|
|
163
184
|
lastWsMsgAt;
|
|
185
|
+
autoReconnectTimeout = 1e3;
|
|
164
186
|
constructor(options) {
|
|
165
187
|
const {
|
|
166
188
|
logging = false,
|
|
@@ -357,7 +379,10 @@ var Shoonya = class extends import_events.EventEmitter {
|
|
|
357
379
|
exch: exchange,
|
|
358
380
|
token: contractToken
|
|
359
381
|
};
|
|
360
|
-
return this.request("securityInfo", {
|
|
382
|
+
return this.request("securityInfo", {
|
|
383
|
+
data,
|
|
384
|
+
key: this.accessToken
|
|
385
|
+
});
|
|
361
386
|
}
|
|
362
387
|
async placeOrder(details) {
|
|
363
388
|
const data = {
|
|
@@ -486,15 +511,53 @@ var Shoonya = class extends import_events.EventEmitter {
|
|
|
486
511
|
multiplier = 2;
|
|
487
512
|
if (expiry === "next-next")
|
|
488
513
|
multiplier = 3;
|
|
489
|
-
const dates = [];
|
|
490
514
|
let currentDate = /* @__PURE__ */ new Date();
|
|
515
|
+
let dates = [];
|
|
491
516
|
for (let i = 0; i <= 7 * multiplier; i++) {
|
|
492
517
|
const formattedDate = this.getFormattedExpiry(currentDate);
|
|
493
|
-
|
|
494
|
-
|
|
518
|
+
const d = [formattedDate, new Date(currentDate)];
|
|
519
|
+
dates.push(d);
|
|
520
|
+
currentDate.setDate(currentDate.getDate() + 1);
|
|
495
521
|
}
|
|
496
522
|
return dates;
|
|
497
523
|
}
|
|
524
|
+
/**
|
|
525
|
+
* Product Name
|
|
526
|
+
* (Select from ‘prarr’ Array provided in User Details response, and if same is allowed for selected, exchange.
|
|
527
|
+
* Show product display name, for user to select, and send corresponding prd in API call)
|
|
528
|
+
*
|
|
529
|
+
* ```
|
|
530
|
+
* `C` : CNC
|
|
531
|
+
* `M` : NRML
|
|
532
|
+
* `I` : MIS
|
|
533
|
+
* `B` : Bracket Order
|
|
534
|
+
* `H` : Cover Order
|
|
535
|
+
* ```
|
|
536
|
+
*/
|
|
537
|
+
async getAccountHolding(productName) {
|
|
538
|
+
const data = {
|
|
539
|
+
uid: this.userId,
|
|
540
|
+
actid: this.accountId,
|
|
541
|
+
prd: productName
|
|
542
|
+
};
|
|
543
|
+
return await this.request("holding", { data, key: this.accessToken });
|
|
544
|
+
}
|
|
545
|
+
async getAccountLimits(params) {
|
|
546
|
+
const data = {
|
|
547
|
+
uid: this.userId,
|
|
548
|
+
actid: this.accountId,
|
|
549
|
+
...params
|
|
550
|
+
};
|
|
551
|
+
const res = await this.request("limits", {
|
|
552
|
+
data,
|
|
553
|
+
key: this.accessToken
|
|
554
|
+
});
|
|
555
|
+
if (res.stat === "Not_Ok") {
|
|
556
|
+
return res;
|
|
557
|
+
}
|
|
558
|
+
const parsedObject = parseKeysToNumber(res);
|
|
559
|
+
return parsedObject;
|
|
560
|
+
}
|
|
498
561
|
getLastWSMessage() {
|
|
499
562
|
return this.lastWsMsgAt;
|
|
500
563
|
}
|
|
@@ -526,7 +589,6 @@ var Shoonya = class extends import_events.EventEmitter {
|
|
|
526
589
|
this.heartbeatTimeout.timer = setInterval(() => {
|
|
527
590
|
const heartbeatMsg = '{"t":"h"}';
|
|
528
591
|
this.getWSState().OPEN && this.ws.send(heartbeatMsg);
|
|
529
|
-
this.logging && this.logger.log(`sent heartbeat message: ${heartbeatMsg}`);
|
|
530
592
|
}, this.heartbeatTimeout.timeout);
|
|
531
593
|
if (this.cronJobRunning) {
|
|
532
594
|
this.subscribe(this.scripList);
|
|
@@ -537,6 +599,9 @@ var Shoonya = class extends import_events.EventEmitter {
|
|
|
537
599
|
async () => {
|
|
538
600
|
this.cronJobRunning = true;
|
|
539
601
|
try {
|
|
602
|
+
this.disconnect();
|
|
603
|
+
const { setTimeout: setTimeout2 } = await import("timers/promises");
|
|
604
|
+
await setTimeout2(this.autoReconnectTimeout);
|
|
540
605
|
const cred = {
|
|
541
606
|
apiKey: this.apiKey,
|
|
542
607
|
password: this.password,
|
|
@@ -544,6 +609,8 @@ var Shoonya = class extends import_events.EventEmitter {
|
|
|
544
609
|
userId: this.userId
|
|
545
610
|
};
|
|
546
611
|
await this.login(cred);
|
|
612
|
+
this.connectWS();
|
|
613
|
+
this.emit("open", "opened ws connection");
|
|
547
614
|
this.logging && this.logger.log("Token Refreshed");
|
|
548
615
|
} catch (err) {
|
|
549
616
|
console.error(err);
|
package/dist/shoonya-sdk.mjs
CHANGED
|
@@ -30,7 +30,9 @@ var paths = {
|
|
|
30
30
|
exitSNOOrder: "ExitSNOOrder",
|
|
31
31
|
historicData: "TPSeries",
|
|
32
32
|
optionChain: "GetOptionChain",
|
|
33
|
-
orderBook: "OrderBook"
|
|
33
|
+
orderBook: "OrderBook",
|
|
34
|
+
holding: "Holdings",
|
|
35
|
+
limits: "Limits"
|
|
34
36
|
};
|
|
35
37
|
|
|
36
38
|
// src/shoonya-sdk.ts
|
|
@@ -111,6 +113,25 @@ var Logger = class {
|
|
|
111
113
|
};
|
|
112
114
|
var logger_default = Logger;
|
|
113
115
|
|
|
116
|
+
// src/utils/parser.ts
|
|
117
|
+
var exampleObject = {
|
|
118
|
+
convertable: "57.3",
|
|
119
|
+
unconvertable: "So"
|
|
120
|
+
};
|
|
121
|
+
function parseKeysToNumber(obj) {
|
|
122
|
+
const newObj = {};
|
|
123
|
+
for (const key in obj) {
|
|
124
|
+
if (Number.isNaN(Number(obj[key]))) {
|
|
125
|
+
newObj[key] = String(obj[key]);
|
|
126
|
+
} else {
|
|
127
|
+
newObj[key] = Number(obj[key]);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
return newObj;
|
|
131
|
+
}
|
|
132
|
+
__name(parseKeysToNumber, "parseKeysToNumber");
|
|
133
|
+
var parsedObj = parseKeysToNumber(exampleObject);
|
|
134
|
+
|
|
114
135
|
// src/shoonya-sdk.ts
|
|
115
136
|
import totp from "totp-generator";
|
|
116
137
|
var Shoonya = class extends EventEmitter {
|
|
@@ -135,6 +156,7 @@ var Shoonya = class extends EventEmitter {
|
|
|
135
156
|
reconnectTimeout;
|
|
136
157
|
heartbeatTimeout;
|
|
137
158
|
lastWsMsgAt;
|
|
159
|
+
autoReconnectTimeout = 1e3;
|
|
138
160
|
constructor(options) {
|
|
139
161
|
const {
|
|
140
162
|
logging = false,
|
|
@@ -331,7 +353,10 @@ var Shoonya = class extends EventEmitter {
|
|
|
331
353
|
exch: exchange,
|
|
332
354
|
token: contractToken
|
|
333
355
|
};
|
|
334
|
-
return this.request("securityInfo", {
|
|
356
|
+
return this.request("securityInfo", {
|
|
357
|
+
data,
|
|
358
|
+
key: this.accessToken
|
|
359
|
+
});
|
|
335
360
|
}
|
|
336
361
|
async placeOrder(details) {
|
|
337
362
|
const data = {
|
|
@@ -460,15 +485,53 @@ var Shoonya = class extends EventEmitter {
|
|
|
460
485
|
multiplier = 2;
|
|
461
486
|
if (expiry === "next-next")
|
|
462
487
|
multiplier = 3;
|
|
463
|
-
const dates = [];
|
|
464
488
|
let currentDate = /* @__PURE__ */ new Date();
|
|
489
|
+
let dates = [];
|
|
465
490
|
for (let i = 0; i <= 7 * multiplier; i++) {
|
|
466
491
|
const formattedDate = this.getFormattedExpiry(currentDate);
|
|
467
|
-
|
|
468
|
-
|
|
492
|
+
const d = [formattedDate, new Date(currentDate)];
|
|
493
|
+
dates.push(d);
|
|
494
|
+
currentDate.setDate(currentDate.getDate() + 1);
|
|
469
495
|
}
|
|
470
496
|
return dates;
|
|
471
497
|
}
|
|
498
|
+
/**
|
|
499
|
+
* Product Name
|
|
500
|
+
* (Select from ‘prarr’ Array provided in User Details response, and if same is allowed for selected, exchange.
|
|
501
|
+
* Show product display name, for user to select, and send corresponding prd in API call)
|
|
502
|
+
*
|
|
503
|
+
* ```
|
|
504
|
+
* `C` : CNC
|
|
505
|
+
* `M` : NRML
|
|
506
|
+
* `I` : MIS
|
|
507
|
+
* `B` : Bracket Order
|
|
508
|
+
* `H` : Cover Order
|
|
509
|
+
* ```
|
|
510
|
+
*/
|
|
511
|
+
async getAccountHolding(productName) {
|
|
512
|
+
const data = {
|
|
513
|
+
uid: this.userId,
|
|
514
|
+
actid: this.accountId,
|
|
515
|
+
prd: productName
|
|
516
|
+
};
|
|
517
|
+
return await this.request("holding", { data, key: this.accessToken });
|
|
518
|
+
}
|
|
519
|
+
async getAccountLimits(params) {
|
|
520
|
+
const data = {
|
|
521
|
+
uid: this.userId,
|
|
522
|
+
actid: this.accountId,
|
|
523
|
+
...params
|
|
524
|
+
};
|
|
525
|
+
const res = await this.request("limits", {
|
|
526
|
+
data,
|
|
527
|
+
key: this.accessToken
|
|
528
|
+
});
|
|
529
|
+
if (res.stat === "Not_Ok") {
|
|
530
|
+
return res;
|
|
531
|
+
}
|
|
532
|
+
const parsedObject = parseKeysToNumber(res);
|
|
533
|
+
return parsedObject;
|
|
534
|
+
}
|
|
472
535
|
getLastWSMessage() {
|
|
473
536
|
return this.lastWsMsgAt;
|
|
474
537
|
}
|
|
@@ -500,7 +563,6 @@ var Shoonya = class extends EventEmitter {
|
|
|
500
563
|
this.heartbeatTimeout.timer = setInterval(() => {
|
|
501
564
|
const heartbeatMsg = '{"t":"h"}';
|
|
502
565
|
this.getWSState().OPEN && this.ws.send(heartbeatMsg);
|
|
503
|
-
this.logging && this.logger.log(`sent heartbeat message: ${heartbeatMsg}`);
|
|
504
566
|
}, this.heartbeatTimeout.timeout);
|
|
505
567
|
if (this.cronJobRunning) {
|
|
506
568
|
this.subscribe(this.scripList);
|
|
@@ -511,6 +573,9 @@ var Shoonya = class extends EventEmitter {
|
|
|
511
573
|
async () => {
|
|
512
574
|
this.cronJobRunning = true;
|
|
513
575
|
try {
|
|
576
|
+
this.disconnect();
|
|
577
|
+
const { setTimeout: setTimeout2 } = await import("timers/promises");
|
|
578
|
+
await setTimeout2(this.autoReconnectTimeout);
|
|
514
579
|
const cred = {
|
|
515
580
|
apiKey: this.apiKey,
|
|
516
581
|
password: this.password,
|
|
@@ -518,6 +583,8 @@ var Shoonya = class extends EventEmitter {
|
|
|
518
583
|
userId: this.userId
|
|
519
584
|
};
|
|
520
585
|
await this.login(cred);
|
|
586
|
+
this.connectWS();
|
|
587
|
+
this.emit("open", "opened ws connection");
|
|
521
588
|
this.logging && this.logger.log("Token Refreshed");
|
|
522
589
|
} catch (err) {
|
|
523
590
|
console.error(err);
|