fyers-api-v3 1.4.2 → 1.6.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/HSM/datasocket.min.js +1 -1
- package/HSM/mapper.js +1 -0
- package/README.md +370 -0
- package/apiService/apiService.js +805 -30
- package/config/config.js +14 -1
- package/ordersocket/fyersSocket.js +9 -0
- package/package.json +1 -1
package/apiService/apiService.js
CHANGED
|
@@ -1,10 +1,20 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
let { Config } = require("../config/config");
|
|
3
3
|
let errorHandler = require("../errorHandler/errorHandler");
|
|
4
|
-
|
|
4
|
+
const axios = require("axios");
|
|
5
|
+
const https = require('https');
|
|
5
6
|
const crypto = require('crypto');
|
|
6
7
|
let Logger = require("../logger/log.js")
|
|
7
8
|
|
|
9
|
+
// Create a custom axios instance with keepAlive for connection reuse
|
|
10
|
+
const httpsAgent = new https.Agent({
|
|
11
|
+
keepAlive: true
|
|
12
|
+
});
|
|
13
|
+
|
|
14
|
+
const axiosInstance = axios.create({
|
|
15
|
+
httpsAgent: httpsAgent
|
|
16
|
+
});
|
|
17
|
+
|
|
8
18
|
/**
|
|
9
19
|
* Class to access Fyers API.
|
|
10
20
|
* @class
|
|
@@ -63,6 +73,13 @@ class FyersApi {
|
|
|
63
73
|
* @type {Logger}
|
|
64
74
|
*/
|
|
65
75
|
self.Logger = new Logger(this.LogPath,this.LoggingFlag)
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* axios instance for making HTTP requests (shared across all instances).
|
|
79
|
+
* @type {Object}
|
|
80
|
+
*/
|
|
81
|
+
self.session = axiosInstance;
|
|
82
|
+
|
|
66
83
|
}
|
|
67
84
|
|
|
68
85
|
/**
|
|
@@ -122,6 +139,7 @@ class FyersApi {
|
|
|
122
139
|
* @returns {Object} Object with access token and refresh token if successful
|
|
123
140
|
*/
|
|
124
141
|
generate_access_token = async (req) => {
|
|
142
|
+
let session = this.session;
|
|
125
143
|
var funcname = 'generateAuthCode'
|
|
126
144
|
var logger = this.Logger
|
|
127
145
|
const code_verifier = req.code_verifier || "";
|
|
@@ -134,7 +152,7 @@ class FyersApi {
|
|
|
134
152
|
|
|
135
153
|
if (code_verifier === "") {
|
|
136
154
|
|
|
137
|
-
const access_token = await
|
|
155
|
+
const access_token = await session.post(`${Config.SYNC_API}/validate-authcode`, {
|
|
138
156
|
grant_type: "authorization_code",
|
|
139
157
|
code: req.auth_code,
|
|
140
158
|
appIdHash: sha256
|
|
@@ -144,7 +162,7 @@ class FyersApi {
|
|
|
144
162
|
}
|
|
145
163
|
else {
|
|
146
164
|
|
|
147
|
-
const access_token = await
|
|
165
|
+
const access_token = await session.post(`${Config.API}/validate-authcode`, {
|
|
148
166
|
grant_type: "authorization_code",
|
|
149
167
|
code_verifier: req.code_verifier,
|
|
150
168
|
code: req.auth_code,
|
|
@@ -167,6 +185,7 @@ class FyersApi {
|
|
|
167
185
|
* @returns {Promise} returns profile data on resolve or error message and error code on failure
|
|
168
186
|
*/
|
|
169
187
|
get_profile = async (req) => {
|
|
188
|
+
let session = this.session;
|
|
170
189
|
var funcname = 'get_profile'
|
|
171
190
|
var logger = this.Logger
|
|
172
191
|
let AuthrizationToken = this.AccessToken
|
|
@@ -174,7 +193,7 @@ class FyersApi {
|
|
|
174
193
|
return new Promise(async function (resolve, reject) {
|
|
175
194
|
try {
|
|
176
195
|
var url = Config.SYNC_API + Config["get_profile"]
|
|
177
|
-
await
|
|
196
|
+
await session.get((url), {
|
|
178
197
|
headers: {
|
|
179
198
|
Authorization: AuthrizationToken,
|
|
180
199
|
version: vers
|
|
@@ -198,6 +217,7 @@ class FyersApi {
|
|
|
198
217
|
* @returns {Promise} returns funds detail on resolve or error message and error code on failure
|
|
199
218
|
*/
|
|
200
219
|
get_funds = async (req) => {
|
|
220
|
+
let session = this.session;
|
|
201
221
|
var funcname = 'get_funds'
|
|
202
222
|
var logger = this.Logger
|
|
203
223
|
let AuthrizationToken = this.AccessToken
|
|
@@ -205,7 +225,7 @@ class FyersApi {
|
|
|
205
225
|
return new Promise(async function (resolve, reject) {
|
|
206
226
|
try {
|
|
207
227
|
var url = Config.SYNC_API + Config["funds"]
|
|
208
|
-
await
|
|
228
|
+
await session.get((url), {
|
|
209
229
|
headers: {
|
|
210
230
|
Authorization: AuthrizationToken,
|
|
211
231
|
version: vers
|
|
@@ -229,6 +249,7 @@ class FyersApi {
|
|
|
229
249
|
* @returns {Promise} returns holdings detail on resolve or error message and error code on failure
|
|
230
250
|
*/
|
|
231
251
|
get_holdings = async (req) => {
|
|
252
|
+
let session = this.session;
|
|
232
253
|
var funcname = 'get_holdings'
|
|
233
254
|
var logger = this.Logger
|
|
234
255
|
let AuthrizationToken = this.AccessToken
|
|
@@ -236,7 +257,7 @@ class FyersApi {
|
|
|
236
257
|
return new Promise(async function (resolve, reject) {
|
|
237
258
|
try {
|
|
238
259
|
var url = Config.SYNC_API + Config["holdings"]
|
|
239
|
-
await
|
|
260
|
+
await session.get((url), {
|
|
240
261
|
headers: {
|
|
241
262
|
Authorization: AuthrizationToken,
|
|
242
263
|
version: vers
|
|
@@ -260,6 +281,7 @@ class FyersApi {
|
|
|
260
281
|
* @returns {Promise} This invalidates the access token
|
|
261
282
|
*/
|
|
262
283
|
logout_user = async (req) => {
|
|
284
|
+
let session = this.session;
|
|
263
285
|
var funcname = 'logout_user'
|
|
264
286
|
var logger = this.Logger
|
|
265
287
|
let AuthrizationToken = this.AccessToken
|
|
@@ -267,7 +289,7 @@ class FyersApi {
|
|
|
267
289
|
return new Promise(async function (resolve, reject) {
|
|
268
290
|
try {
|
|
269
291
|
var url = Config.SYNC_API + Config["logout"]
|
|
270
|
-
await
|
|
292
|
+
await session.post((url), req, {
|
|
271
293
|
headers: {
|
|
272
294
|
Authorization: AuthrizationToken,
|
|
273
295
|
version: vers
|
|
@@ -292,6 +314,7 @@ class FyersApi {
|
|
|
292
314
|
* @returns {Promise} returns orderbook detail on resolve or error message and error code on failure
|
|
293
315
|
*/
|
|
294
316
|
get_orders = async (req) => {
|
|
317
|
+
let session = this.session;
|
|
295
318
|
var funcname = 'get_orders'
|
|
296
319
|
var logger = this.Logger
|
|
297
320
|
let AuthrizationToken = this.AccessToken
|
|
@@ -299,7 +322,7 @@ class FyersApi {
|
|
|
299
322
|
return new Promise(async function (resolve, reject) {
|
|
300
323
|
try {
|
|
301
324
|
var url = Config.SYNC_API + Config["orders"]
|
|
302
|
-
await
|
|
325
|
+
await session.get((url), {
|
|
303
326
|
headers: {
|
|
304
327
|
Authorization: AuthrizationToken,
|
|
305
328
|
version: vers
|
|
@@ -308,6 +331,8 @@ class FyersApi {
|
|
|
308
331
|
.then(Response => {
|
|
309
332
|
logger.debug(`${funcname} response`, Response.data, funcname)
|
|
310
333
|
resolve(Response.data)
|
|
334
|
+
}).catch(error => {
|
|
335
|
+
logger.error(`${funcname} response`, error, funcname)
|
|
311
336
|
})
|
|
312
337
|
}
|
|
313
338
|
catch (e) {
|
|
@@ -323,6 +348,7 @@ class FyersApi {
|
|
|
323
348
|
* @returns {Promise} returns orderbook detail on resolve or error message and error code on failure
|
|
324
349
|
*/
|
|
325
350
|
get_gtt_orders = async (req) => {
|
|
351
|
+
let session = this.session;
|
|
326
352
|
var funcname = 'get_gtt_orders'
|
|
327
353
|
var logger = this.Logger
|
|
328
354
|
let AuthrizationToken = this.AccessToken
|
|
@@ -330,7 +356,7 @@ class FyersApi {
|
|
|
330
356
|
return new Promise(async function (resolve, reject) {
|
|
331
357
|
try {
|
|
332
358
|
var url = Config.SYNC_API + Config["gtt_orders"]
|
|
333
|
-
await
|
|
359
|
+
await session.get((url), {
|
|
334
360
|
headers: {
|
|
335
361
|
Authorization: AuthrizationToken,
|
|
336
362
|
version: vers
|
|
@@ -356,6 +382,7 @@ class FyersApi {
|
|
|
356
382
|
* @returns {Promise} returns orderbook detail of passed order ID on resolve or error message and error code on failure
|
|
357
383
|
*/
|
|
358
384
|
get_filtered_orders = async (req) => {
|
|
385
|
+
let session = this.session;
|
|
359
386
|
var funcname = 'get_filtered_orders'
|
|
360
387
|
var logger = this.Logger
|
|
361
388
|
let AuthrizationToken = this.AccessToken
|
|
@@ -363,7 +390,7 @@ class FyersApi {
|
|
|
363
390
|
return new Promise(async function (resolve, reject) {
|
|
364
391
|
try {
|
|
365
392
|
var url = Config.SYNC_API + Config["orders"] + `?id=${req.order_id}`
|
|
366
|
-
await
|
|
393
|
+
await session.get((url), {
|
|
367
394
|
headers: {
|
|
368
395
|
Authorization: AuthrizationToken,
|
|
369
396
|
version: vers
|
|
@@ -387,6 +414,7 @@ class FyersApi {
|
|
|
387
414
|
* @returns {Promise} returns positionbook detail on resolve or error message and error code on failure
|
|
388
415
|
*/
|
|
389
416
|
get_positions = async (req) => {
|
|
417
|
+
let session = this.session;
|
|
390
418
|
var funcname = 'get_positions'
|
|
391
419
|
var logger = this.Logger
|
|
392
420
|
let AuthrizationToken = this.AccessToken
|
|
@@ -394,7 +422,7 @@ class FyersApi {
|
|
|
394
422
|
return new Promise(async function (resolve, reject) {
|
|
395
423
|
try {
|
|
396
424
|
var url = Config.SYNC_API + Config["positions"]
|
|
397
|
-
await
|
|
425
|
+
await session.get((url), {
|
|
398
426
|
headers: {
|
|
399
427
|
Authorization: AuthrizationToken,
|
|
400
428
|
version: vers
|
|
@@ -418,6 +446,7 @@ class FyersApi {
|
|
|
418
446
|
* @returns {Promise} returns tradebook detail on resolve or error message and error code on failure
|
|
419
447
|
*/
|
|
420
448
|
get_tradebook = async (req) => {
|
|
449
|
+
let session = this.session;
|
|
421
450
|
var funcname = 'get_tradebook'
|
|
422
451
|
var logger = this.Logger
|
|
423
452
|
let AuthrizationToken = this.AccessToken
|
|
@@ -425,7 +454,7 @@ class FyersApi {
|
|
|
425
454
|
return new Promise(async function (resolve, reject) {
|
|
426
455
|
try {
|
|
427
456
|
var url = Config.SYNC_API + Config["tradebook"]
|
|
428
|
-
await
|
|
457
|
+
await session.get((url), {
|
|
429
458
|
headers: {
|
|
430
459
|
Authorization: AuthrizationToken,
|
|
431
460
|
version: vers
|
|
@@ -450,6 +479,7 @@ class FyersApi {
|
|
|
450
479
|
* @returns {Promise} returns orderID of placed order on resolve or error message and error code on failure
|
|
451
480
|
*/
|
|
452
481
|
place_order = async (req) => {
|
|
482
|
+
let session = this.session;
|
|
453
483
|
var funcname = 'place_order'
|
|
454
484
|
var logger = this.Logger
|
|
455
485
|
let AuthrizationToken = this.AccessToken
|
|
@@ -457,7 +487,7 @@ class FyersApi {
|
|
|
457
487
|
return new Promise(async function (resolve, reject) {
|
|
458
488
|
try {
|
|
459
489
|
var url = Config.SYNC_API + Config["orders_sync"]
|
|
460
|
-
await
|
|
490
|
+
await session.post((url), req, {
|
|
461
491
|
headers: {
|
|
462
492
|
Authorization: AuthrizationToken,
|
|
463
493
|
version: vers
|
|
@@ -483,6 +513,7 @@ class FyersApi {
|
|
|
483
513
|
* @returns {Promise} returns orderID of placed order on resolve or error message and error code on failure
|
|
484
514
|
*/
|
|
485
515
|
place_gtt_order = async (req) => {
|
|
516
|
+
let session = this.session;
|
|
486
517
|
var funcname = 'place_gtt_order'
|
|
487
518
|
var logger = this.Logger
|
|
488
519
|
let AuthrizationToken = this.AccessToken
|
|
@@ -490,7 +521,7 @@ class FyersApi {
|
|
|
490
521
|
return new Promise(async function (resolve, reject) {
|
|
491
522
|
try {
|
|
492
523
|
var url = Config.SYNC_API + Config["gtt_orders_sync"]
|
|
493
|
-
await
|
|
524
|
+
await session.post((url), req, {
|
|
494
525
|
headers: {
|
|
495
526
|
Authorization: AuthrizationToken,
|
|
496
527
|
}
|
|
@@ -513,6 +544,7 @@ class FyersApi {
|
|
|
513
544
|
* @returns {Promise} returns orderID of placed order on resolve or error message and error code on failure
|
|
514
545
|
*/
|
|
515
546
|
place_multileg_order = async (req) => {
|
|
547
|
+
let session = this.session;
|
|
516
548
|
var funcname = 'place_multileg_order'
|
|
517
549
|
var logger = this.Logger
|
|
518
550
|
let AuthrizationToken = this.AccessToken
|
|
@@ -520,7 +552,7 @@ class FyersApi {
|
|
|
520
552
|
return new Promise(async function (resolve, reject) {
|
|
521
553
|
try {
|
|
522
554
|
var url = Config.SYNC_API + Config["multileg_orders_sync"]
|
|
523
|
-
await
|
|
555
|
+
await session.post((url), req, {
|
|
524
556
|
headers: {
|
|
525
557
|
Authorization: AuthrizationToken,
|
|
526
558
|
version: vers
|
|
@@ -546,6 +578,7 @@ class FyersApi {
|
|
|
546
578
|
* @returns {Promise} returns orderID of all placed and if they are failed or successful on resolve or error message and error code on failure
|
|
547
579
|
*/
|
|
548
580
|
place_multi_order = async (req) => {
|
|
581
|
+
let session = this.session;
|
|
549
582
|
var funcname = 'place_multi_order'
|
|
550
583
|
var logger = this.Logger
|
|
551
584
|
let AuthrizationToken = this.AccessToken
|
|
@@ -553,7 +586,7 @@ class FyersApi {
|
|
|
553
586
|
return new Promise(async function (resolve, reject) {
|
|
554
587
|
try {
|
|
555
588
|
var url = Config.SYNC_API + Config["multi_orders"]
|
|
556
|
-
await
|
|
589
|
+
await session.post((url), req, {
|
|
557
590
|
headers: {
|
|
558
591
|
Authorization: AuthrizationToken,
|
|
559
592
|
version: vers
|
|
@@ -578,6 +611,7 @@ class FyersApi {
|
|
|
578
611
|
* @returns {Promise} returns orderID of passed order ID and if modification was successful or not resolve or error message and error code on failure
|
|
579
612
|
*/
|
|
580
613
|
modify_order = async (req) => {
|
|
614
|
+
let session = this.session;
|
|
581
615
|
var funcname = 'modify_order'
|
|
582
616
|
var logger = this.Logger
|
|
583
617
|
let AuthrizationToken = this.AccessToken
|
|
@@ -585,7 +619,7 @@ class FyersApi {
|
|
|
585
619
|
return new Promise(async function (resolve, reject) {
|
|
586
620
|
try {
|
|
587
621
|
var url = Config.SYNC_API + Config["orders_sync"]
|
|
588
|
-
await
|
|
622
|
+
await session.patch((url), req, {
|
|
589
623
|
headers: {
|
|
590
624
|
Authorization: AuthrizationToken,
|
|
591
625
|
version: vers
|
|
@@ -610,6 +644,7 @@ class FyersApi {
|
|
|
610
644
|
* @returns {Promise} returns orderID of passed order ID and if modification was successful or not resolve or error message and error code on failure
|
|
611
645
|
*/
|
|
612
646
|
gtt_modify_order = async (req) => {
|
|
647
|
+
let session = this.session;
|
|
613
648
|
var funcname = 'gtt_modify_order'
|
|
614
649
|
var logger = this.Logger
|
|
615
650
|
let AuthrizationToken = this.AccessToken
|
|
@@ -617,7 +652,7 @@ class FyersApi {
|
|
|
617
652
|
return new Promise(async function (resolve, reject) {
|
|
618
653
|
try {
|
|
619
654
|
var url = Config.SYNC_API + Config["gtt_orders_sync"]
|
|
620
|
-
await
|
|
655
|
+
await session.patch((url), req, {
|
|
621
656
|
headers: {
|
|
622
657
|
Authorization: AuthrizationToken,
|
|
623
658
|
version: vers
|
|
@@ -642,6 +677,7 @@ class FyersApi {
|
|
|
642
677
|
* @returns {Promise} returns orderID of passed order ID and if modification was successful or not on resolve or error message and error code on failure
|
|
643
678
|
*/
|
|
644
679
|
modify_multi_order = async (req) => {
|
|
680
|
+
let session = this.session;
|
|
645
681
|
var funcname = 'modify_multi_order'
|
|
646
682
|
var logger = this.Logger
|
|
647
683
|
let AuthrizationToken = this.AccessToken
|
|
@@ -649,7 +685,7 @@ class FyersApi {
|
|
|
649
685
|
return new Promise(async function (resolve, reject) {
|
|
650
686
|
try {
|
|
651
687
|
var url = Config.SYNC_API + Config["multi_orders"]
|
|
652
|
-
await
|
|
688
|
+
await session.patch((url), req, {
|
|
653
689
|
headers: {
|
|
654
690
|
Authorization: AuthrizationToken,
|
|
655
691
|
version: vers
|
|
@@ -674,6 +710,7 @@ class FyersApi {
|
|
|
674
710
|
* @returns {Promise} returns orderID of passed order ID and if cancellation was successful or not on resolve or error message and error code on failure
|
|
675
711
|
*/
|
|
676
712
|
cancel_order = async (req) => {
|
|
713
|
+
let session = this.session;
|
|
677
714
|
var funcname = 'cancel_order'
|
|
678
715
|
var logger = this.Logger
|
|
679
716
|
let AuthrizationToken = this.AccessToken
|
|
@@ -681,7 +718,7 @@ class FyersApi {
|
|
|
681
718
|
return new Promise(async function (resolve, reject) {
|
|
682
719
|
try {
|
|
683
720
|
var url = Config.SYNC_API + Config["orders_sync"]
|
|
684
|
-
await
|
|
721
|
+
await session.delete((url), {
|
|
685
722
|
headers: {
|
|
686
723
|
Authorization: AuthrizationToken,
|
|
687
724
|
version: vers
|
|
@@ -707,6 +744,7 @@ class FyersApi {
|
|
|
707
744
|
* @returns {Promise} returns orderID of passed order ID and if cancellation was successful or not on resolve or error message and error code on failure
|
|
708
745
|
*/
|
|
709
746
|
gtt_cancel_order = async (req) => {
|
|
747
|
+
let session = this.session;
|
|
710
748
|
var funcname = 'gtt_cancel_order'
|
|
711
749
|
var logger = this.Logger
|
|
712
750
|
let AuthrizationToken = this.AccessToken
|
|
@@ -714,7 +752,7 @@ class FyersApi {
|
|
|
714
752
|
return new Promise(async function (resolve, reject) {
|
|
715
753
|
try {
|
|
716
754
|
var url = Config.SYNC_API + Config["gtt_orders_sync"]
|
|
717
|
-
await
|
|
755
|
+
await session.delete((url), {
|
|
718
756
|
headers: {
|
|
719
757
|
Authorization: AuthrizationToken,
|
|
720
758
|
version: vers
|
|
@@ -740,6 +778,7 @@ class FyersApi {
|
|
|
740
778
|
* @returns {Promise} returns orderID of passed order ID and if cancellation was successful or not on resolve or error message and error code on failure
|
|
741
779
|
*/
|
|
742
780
|
cancel_multi_order = async (req) => {
|
|
781
|
+
let session = this.session;
|
|
743
782
|
var funcname = 'cancel_multi_order'
|
|
744
783
|
var logger = this.Logger
|
|
745
784
|
let AuthrizationToken = this.AccessToken
|
|
@@ -747,7 +786,7 @@ class FyersApi {
|
|
|
747
786
|
return new Promise(async function (resolve, reject) {
|
|
748
787
|
try {
|
|
749
788
|
var url = Config.SYNC_API + Config["multi_orders"]
|
|
750
|
-
await
|
|
789
|
+
await session.delete((url), {
|
|
751
790
|
headers: {
|
|
752
791
|
Authorization: AuthrizationToken,
|
|
753
792
|
version: vers
|
|
@@ -773,6 +812,7 @@ class FyersApi {
|
|
|
773
812
|
* @returns {Promise} returns success message on resolve or error message and error code on failure
|
|
774
813
|
*/
|
|
775
814
|
exit_position = async (req) => {
|
|
815
|
+
let session = this.session;
|
|
776
816
|
var funcname = 'exit_position'
|
|
777
817
|
var logger = this.Logger
|
|
778
818
|
let AuthrizationToken = this.AccessToken
|
|
@@ -780,7 +820,7 @@ class FyersApi {
|
|
|
780
820
|
return new Promise(async function (resolve, reject) {
|
|
781
821
|
try {
|
|
782
822
|
var url = Config.SYNC_API + Config["positions"]
|
|
783
|
-
await
|
|
823
|
+
await session.delete((url), {
|
|
784
824
|
headers: {
|
|
785
825
|
Authorization: AuthrizationToken,
|
|
786
826
|
version: vers
|
|
@@ -806,6 +846,7 @@ class FyersApi {
|
|
|
806
846
|
* @returns {Promise} returns success message on resolve or error message and error code on failure
|
|
807
847
|
*/
|
|
808
848
|
convert_position = async (req) => {
|
|
849
|
+
let session = this.session;
|
|
809
850
|
var funcname = 'convert_position'
|
|
810
851
|
var logger = this.Logger
|
|
811
852
|
let AuthrizationToken = this.AccessToken
|
|
@@ -813,7 +854,7 @@ class FyersApi {
|
|
|
813
854
|
return new Promise(async function (resolve, reject) {
|
|
814
855
|
try {
|
|
815
856
|
var url = Config.SYNC_API + Config["positions"]
|
|
816
|
-
await
|
|
857
|
+
await session.post((url), req, {
|
|
817
858
|
headers: {
|
|
818
859
|
Authorization: AuthrizationToken,
|
|
819
860
|
version: vers
|
|
@@ -837,6 +878,7 @@ class FyersApi {
|
|
|
837
878
|
* @returns {Promise} returns success message on resolve or error message and error code on failure
|
|
838
879
|
*/
|
|
839
880
|
market_status = async (req) => {
|
|
881
|
+
let session = this.session;
|
|
840
882
|
var funcname = 'market_status'
|
|
841
883
|
var logger = this.Logger
|
|
842
884
|
let AuthrizationToken = this.AccessToken
|
|
@@ -844,7 +886,7 @@ class FyersApi {
|
|
|
844
886
|
return new Promise(async function (resolve, reject) {
|
|
845
887
|
try {
|
|
846
888
|
var url = Config.data_Api1 + Config["marketStatus"]
|
|
847
|
-
const profile = await
|
|
889
|
+
const profile = await session.get((url), {
|
|
848
890
|
headers: {
|
|
849
891
|
Authorization: AuthrizationToken,
|
|
850
892
|
version: vers
|
|
@@ -869,6 +911,7 @@ class FyersApi {
|
|
|
869
911
|
* @returns {Promise} returns success message on resolve or error message and error code on failure
|
|
870
912
|
*/
|
|
871
913
|
getHistory = async (req) => {
|
|
914
|
+
let session = this.session;
|
|
872
915
|
var funcname = 'getHistory'
|
|
873
916
|
var logger = this.Logger
|
|
874
917
|
let AuthrizationToken = this.AccessToken
|
|
@@ -877,7 +920,7 @@ class FyersApi {
|
|
|
877
920
|
try {
|
|
878
921
|
var url = Config.data_Api1 + Config["history"]
|
|
879
922
|
url = generateUrl(url, req)
|
|
880
|
-
await
|
|
923
|
+
await session.get((url), {
|
|
881
924
|
headers: {
|
|
882
925
|
Authorization: AuthrizationToken,
|
|
883
926
|
version: vers
|
|
@@ -902,6 +945,7 @@ class FyersApi {
|
|
|
902
945
|
* @returns {Promise} returns success message on resolve or error message and error code on failure
|
|
903
946
|
*/
|
|
904
947
|
getQuotes = async (req) => {
|
|
948
|
+
let session = this.session;
|
|
905
949
|
var funcname = 'getQuotes'
|
|
906
950
|
var logger = this.Logger
|
|
907
951
|
let AuthrizationToken = this.AccessToken
|
|
@@ -917,7 +961,7 @@ class FyersApi {
|
|
|
917
961
|
var data = { "symbols": symbolstring }
|
|
918
962
|
const urlParams = new URLSearchParams(data);
|
|
919
963
|
url = url + '?' + urlParams
|
|
920
|
-
await
|
|
964
|
+
await session.get((url), {
|
|
921
965
|
headers: {
|
|
922
966
|
Authorization: AuthrizationToken,
|
|
923
967
|
version: vers
|
|
@@ -942,6 +986,7 @@ class FyersApi {
|
|
|
942
986
|
* @returns {Promise} returns success message on resolve or error message and error code on failure
|
|
943
987
|
*/
|
|
944
988
|
getMarketDepth = async (req) => {
|
|
989
|
+
let session = this.session;
|
|
945
990
|
var funcname = 'getQuotes'
|
|
946
991
|
var logger = this.Logger
|
|
947
992
|
let AuthrizationToken = this.AccessToken
|
|
@@ -957,7 +1002,7 @@ class FyersApi {
|
|
|
957
1002
|
var data = { "symbol": symbolstring, "ohlcv_flag": req.ohlcv_flag }
|
|
958
1003
|
const urlParams = new URLSearchParams(data);
|
|
959
1004
|
url = url + '?' + urlParams
|
|
960
|
-
await
|
|
1005
|
+
await session.get((url), {
|
|
961
1006
|
headers: {
|
|
962
1007
|
Authorization: AuthrizationToken,
|
|
963
1008
|
version: vers
|
|
@@ -982,6 +1027,7 @@ class FyersApi {
|
|
|
982
1027
|
* @returns {Promise} returns success message on resolve or error message and error code on failure
|
|
983
1028
|
*/
|
|
984
1029
|
getOptionChain = async (req) => {
|
|
1030
|
+
let session = this.session;
|
|
985
1031
|
var funcname = 'getOptionChain'
|
|
986
1032
|
var logger = this.Logger
|
|
987
1033
|
let AuthrizationToken = this.AccessToken
|
|
@@ -990,7 +1036,624 @@ class FyersApi {
|
|
|
990
1036
|
try {
|
|
991
1037
|
var url = Config.data_Api1 + Config["optionChain"]
|
|
992
1038
|
url = generateUrl(url, req)
|
|
993
|
-
await
|
|
1039
|
+
await session.get((url), {
|
|
1040
|
+
headers: {
|
|
1041
|
+
Authorization: AuthrizationToken,
|
|
1042
|
+
version: vers
|
|
1043
|
+
}
|
|
1044
|
+
})
|
|
1045
|
+
.then(Response => {
|
|
1046
|
+
logger.debug(`${funcname} response`, Response.data, funcname)
|
|
1047
|
+
resolve(Response.data)
|
|
1048
|
+
})
|
|
1049
|
+
}
|
|
1050
|
+
catch (e) {
|
|
1051
|
+
var err = new errorHandler(e).getError()
|
|
1052
|
+
logger.error(`${funcname} response`, { "Error": err, "inputs": req }, funcname)
|
|
1053
|
+
reject(err)
|
|
1054
|
+
}
|
|
1055
|
+
})
|
|
1056
|
+
}
|
|
1057
|
+
|
|
1058
|
+
/**
|
|
1059
|
+
* use to get price alert data.
|
|
1060
|
+
* @param {Object} [req] - optional request parameters for price alert (query parameters)
|
|
1061
|
+
* @param {string} [req.archive] - Set to "1" to get archived alerts, default is "0"
|
|
1062
|
+
* @returns {Promise<Object>} returns price alert data on resolve or error message and error code on failure
|
|
1063
|
+
* Response structure: {code: 200, message: "", s: "ok", data: {[alertId]: {fyToken: string, symbol: string, alert: {comparisonType, condition, name, type, value, status, createdAt, createdEpoch, ...}}}}
|
|
1064
|
+
* Example: {code: 200, message: "", s: "ok", data: {"5682484": {fyToken: "10100000008080", symbol: "NSE:SILVERBEES-EQ", alert: {...}}}}
|
|
1065
|
+
*/
|
|
1066
|
+
getPriceAlert = async (req) => {
|
|
1067
|
+
let session = this.session;
|
|
1068
|
+
var funcname = 'getPriceAlert'
|
|
1069
|
+
var logger = this.Logger
|
|
1070
|
+
let AuthrizationToken = this.AccessToken
|
|
1071
|
+
let vers = this.Version
|
|
1072
|
+
return new Promise(async function (resolve, reject) {
|
|
1073
|
+
try {
|
|
1074
|
+
var url = Config.SYNC_API + Config["priceAlert"]
|
|
1075
|
+
if (req && Object.keys(req).length > 0) {
|
|
1076
|
+
url = generateUrl(url, req)
|
|
1077
|
+
}
|
|
1078
|
+
await session.get((url), {
|
|
1079
|
+
headers: {
|
|
1080
|
+
Authorization: AuthrizationToken,
|
|
1081
|
+
version: vers
|
|
1082
|
+
}
|
|
1083
|
+
})
|
|
1084
|
+
.then(Response => {
|
|
1085
|
+
logger.debug(`${funcname} response`, Response.data, funcname)
|
|
1086
|
+
resolve(Response.data)
|
|
1087
|
+
})
|
|
1088
|
+
}
|
|
1089
|
+
catch (e) {
|
|
1090
|
+
var err = new errorHandler(e).getError()
|
|
1091
|
+
logger.error(`${funcname} response`, { "Error": err, "inputs": req }, funcname)
|
|
1092
|
+
reject(err)
|
|
1093
|
+
}
|
|
1094
|
+
})
|
|
1095
|
+
}
|
|
1096
|
+
|
|
1097
|
+
/**
|
|
1098
|
+
* use to create price alert.
|
|
1099
|
+
* @param {Object} req - request body for creating price alert
|
|
1100
|
+
* @param {string} req.agent - Agent identifier (e.g., "fyers-api")
|
|
1101
|
+
* @param {number} req["alert-type"] - Alert type (e.g., 1)
|
|
1102
|
+
* @param {string} req.name - Alert name (e.g., "gold alert")
|
|
1103
|
+
* @param {string} req.symbol - Symbol (e.g., "NSE:GOLDBEES-EQ")
|
|
1104
|
+
* @param {string} req.comparisonType - Comparison type (e.g., "LTP")
|
|
1105
|
+
* @param {string} req.condition - Condition (e.g., "GT", "LT", "LTE", "GTE")
|
|
1106
|
+
* @param {string} req.value - Alert value (e.g., "99999")
|
|
1107
|
+
* @param {string} [req.notes] - Optional notes
|
|
1108
|
+
* @returns {Promise} returns success message on resolve or error message and error code on failure
|
|
1109
|
+
*/
|
|
1110
|
+
createPriceAlert = async (req) => {
|
|
1111
|
+
let session = this.session;
|
|
1112
|
+
var funcname = 'createPriceAlert'
|
|
1113
|
+
var logger = this.Logger
|
|
1114
|
+
let AuthrizationToken = this.AccessToken
|
|
1115
|
+
let vers = this.Version
|
|
1116
|
+
return new Promise(async function (resolve, reject) {
|
|
1117
|
+
try {
|
|
1118
|
+
var url = Config.SYNC_API + Config["priceAlert"]
|
|
1119
|
+
await session.post((url), req, {
|
|
1120
|
+
headers: {
|
|
1121
|
+
Authorization: AuthrizationToken,
|
|
1122
|
+
version: vers
|
|
1123
|
+
}
|
|
1124
|
+
})
|
|
1125
|
+
.then(Response => {
|
|
1126
|
+
logger.debug(`${funcname} response`, Response.data, funcname)
|
|
1127
|
+
resolve(Response.data)
|
|
1128
|
+
})
|
|
1129
|
+
}
|
|
1130
|
+
catch (e) {
|
|
1131
|
+
var err = new errorHandler(e).getError()
|
|
1132
|
+
logger.error(`${funcname} response`, { "Error": err, "inputs": req }, funcname)
|
|
1133
|
+
reject(err)
|
|
1134
|
+
}
|
|
1135
|
+
})
|
|
1136
|
+
}
|
|
1137
|
+
|
|
1138
|
+
/**
|
|
1139
|
+
* use to modify price alert.
|
|
1140
|
+
* @param {Object} req - request body for modifying price alert
|
|
1141
|
+
* @param {string} req.alertId - Alert ID to modify (e.g., "3871537")
|
|
1142
|
+
* @param {string} req.agent - Agent identifier (e.g., "fyers-api")
|
|
1143
|
+
* @param {number} req["alert-type"] - Alert type (e.g., 1)
|
|
1144
|
+
* @param {string} req.name - Alert name (e.g., "silver bees")
|
|
1145
|
+
* @param {string} req.symbol - Symbol (e.g., "NSE:GOLDBEES-EQ")
|
|
1146
|
+
* @param {string} req.comparisonType - Comparison type (e.g., "OPEN", "LTP")
|
|
1147
|
+
* @param {string} req.condition - Condition (e.g., "GT", "LT", "LTE", "GTE")
|
|
1148
|
+
* @param {number} req.value - Alert value (e.g., 299)
|
|
1149
|
+
* @returns {Promise} returns success message on resolve or error message and error code on failure
|
|
1150
|
+
*/
|
|
1151
|
+
modifyPriceAlert = async (req) => {
|
|
1152
|
+
let session = this.session;
|
|
1153
|
+
var funcname = 'modifyPriceAlert'
|
|
1154
|
+
var logger = this.Logger
|
|
1155
|
+
let AuthrizationToken = this.AccessToken
|
|
1156
|
+
let vers = this.Version
|
|
1157
|
+
return new Promise(async function (resolve, reject) {
|
|
1158
|
+
try {
|
|
1159
|
+
var url = Config.SYNC_API + Config["priceAlert"]
|
|
1160
|
+
await session.put((url), req, {
|
|
1161
|
+
headers: {
|
|
1162
|
+
Authorization: AuthrizationToken,
|
|
1163
|
+
version: vers
|
|
1164
|
+
}
|
|
1165
|
+
})
|
|
1166
|
+
.then(Response => {
|
|
1167
|
+
logger.debug(`${funcname} response`, Response.data, funcname)
|
|
1168
|
+
resolve(Response.data)
|
|
1169
|
+
})
|
|
1170
|
+
}
|
|
1171
|
+
catch (e) {
|
|
1172
|
+
var err = new errorHandler(e).getError()
|
|
1173
|
+
logger.error(`${funcname} response`, { "Error": err, "inputs": req }, funcname)
|
|
1174
|
+
reject(err)
|
|
1175
|
+
}
|
|
1176
|
+
})
|
|
1177
|
+
}
|
|
1178
|
+
|
|
1179
|
+
/**
|
|
1180
|
+
* use to toggle price alert (enable/disable).
|
|
1181
|
+
* @param {Object} req - request body for toggling price alert
|
|
1182
|
+
* @param {string} req.alertId - Alert ID to toggle (e.g., "3871590")
|
|
1183
|
+
* @returns {Promise} returns success message on resolve or error message and error code on failure
|
|
1184
|
+
*/
|
|
1185
|
+
togglePriceAlert = async (req) => {
|
|
1186
|
+
let session = this.session;
|
|
1187
|
+
var funcname = 'togglePriceAlert'
|
|
1188
|
+
var logger = this.Logger
|
|
1189
|
+
let AuthrizationToken = this.AccessToken
|
|
1190
|
+
let vers = this.Version
|
|
1191
|
+
return new Promise(async function (resolve, reject) {
|
|
1192
|
+
try {
|
|
1193
|
+
var url = Config.SYNC_API + Config["togglePriceAlert"]
|
|
1194
|
+
await session.put((url), req, {
|
|
1195
|
+
headers: {
|
|
1196
|
+
Authorization: AuthrizationToken,
|
|
1197
|
+
version: vers
|
|
1198
|
+
}
|
|
1199
|
+
})
|
|
1200
|
+
.then(Response => {
|
|
1201
|
+
logger.debug(`${funcname} response`, Response.data, funcname)
|
|
1202
|
+
resolve(Response.data)
|
|
1203
|
+
})
|
|
1204
|
+
}
|
|
1205
|
+
catch (e) {
|
|
1206
|
+
var err = new errorHandler(e).getError()
|
|
1207
|
+
logger.error(`${funcname} response`, { "Error": err, "inputs": req }, funcname)
|
|
1208
|
+
reject(err)
|
|
1209
|
+
}
|
|
1210
|
+
})
|
|
1211
|
+
}
|
|
1212
|
+
|
|
1213
|
+
/**
|
|
1214
|
+
* use to delete price alert.
|
|
1215
|
+
* @param {Object} req - request body for deleting price alert
|
|
1216
|
+
* @param {string} req.alertId - Alert ID to delete (e.g., "3871519")
|
|
1217
|
+
* @param {string} req.agent - Agent identifier (e.g., "fyers-api")
|
|
1218
|
+
* @returns {Promise} returns success message on resolve or error message and error code on failure
|
|
1219
|
+
*/
|
|
1220
|
+
deletePriceAlert = async (req) => {
|
|
1221
|
+
let session = this.session;
|
|
1222
|
+
var funcname = 'deletePriceAlert'
|
|
1223
|
+
var logger = this.Logger
|
|
1224
|
+
let AuthrizationToken = this.AccessToken
|
|
1225
|
+
let vers = this.Version
|
|
1226
|
+
return new Promise(async function (resolve, reject) {
|
|
1227
|
+
try {
|
|
1228
|
+
var url = Config.SYNC_API + Config["priceAlert"]
|
|
1229
|
+
await session.delete((url), {
|
|
1230
|
+
headers: {
|
|
1231
|
+
Authorization: AuthrizationToken,
|
|
1232
|
+
version: vers
|
|
1233
|
+
},
|
|
1234
|
+
data: req
|
|
1235
|
+
})
|
|
1236
|
+
.then(Response => {
|
|
1237
|
+
logger.debug(`${funcname} response`, Response.data, funcname)
|
|
1238
|
+
resolve(Response.data)
|
|
1239
|
+
})
|
|
1240
|
+
}
|
|
1241
|
+
catch (e) {
|
|
1242
|
+
var err = new errorHandler(e).getError()
|
|
1243
|
+
logger.error(`${funcname} response`, { "Error": err, "inputs": req }, funcname)
|
|
1244
|
+
reject(err)
|
|
1245
|
+
}
|
|
1246
|
+
})
|
|
1247
|
+
}
|
|
1248
|
+
|
|
1249
|
+
/**
|
|
1250
|
+
* use to create smart order limit.
|
|
1251
|
+
* @param {Object} req - request body for create smart order limit
|
|
1252
|
+
* @param {string} req.symbol - Symbol (e.g., "NSE:SBIN-EQ")
|
|
1253
|
+
* @param {number} req.side - Side (1 for Buy, -1 for Sell)
|
|
1254
|
+
* @param {number} req.qty - Quantity
|
|
1255
|
+
* @param {string} req.productType - Product type (e.g., "CNC", "INTRADAY")
|
|
1256
|
+
* @param {number} req.limitPrice - Limit price
|
|
1257
|
+
* @param {number} [req.stopPrice] - Stop price (optional)
|
|
1258
|
+
* @param {number} req.orderType - Order type
|
|
1259
|
+
* @param {number} req.endTime - End time (Unix timestamp)
|
|
1260
|
+
* @param {number} req.hpr - High price range
|
|
1261
|
+
* @param {number} req.lpr - Low price range
|
|
1262
|
+
* @param {number} req.mpp - Maximum price percentage
|
|
1263
|
+
* @param {number} req.onExp - On expiry action
|
|
1264
|
+
* @param {number} [req.type] - Type (optional)
|
|
1265
|
+
* @param {string} [req.validity] - Validity (e.g., "DAY")
|
|
1266
|
+
* @param {number} [req.disclosedQty] - Disclosed quantity (optional)
|
|
1267
|
+
* @param {boolean} [req.offlineOrder] - Offline order flag (optional)
|
|
1268
|
+
* @returns {Promise} returns success message on resolve or error message and error code on failure
|
|
1269
|
+
*/
|
|
1270
|
+
createSmartOrderLimit = async (req) => {
|
|
1271
|
+
let session = this.session;
|
|
1272
|
+
var funcname = 'createSmartOrderLimit'
|
|
1273
|
+
var logger = this.Logger
|
|
1274
|
+
let AuthrizationToken = this.AccessToken
|
|
1275
|
+
let vers = this.Version
|
|
1276
|
+
return new Promise(async function (resolve, reject) {
|
|
1277
|
+
try {
|
|
1278
|
+
var url = Config.SYNC_API + Config["createSmartorderLimit"]
|
|
1279
|
+
await session.post((url), req, {
|
|
1280
|
+
headers: {
|
|
1281
|
+
Authorization: AuthrizationToken,
|
|
1282
|
+
version: vers
|
|
1283
|
+
}
|
|
1284
|
+
})
|
|
1285
|
+
.then(Response => {
|
|
1286
|
+
logger.debug(`${funcname} response`, Response.data, funcname)
|
|
1287
|
+
resolve(Response.data)
|
|
1288
|
+
})
|
|
1289
|
+
}
|
|
1290
|
+
catch (e) {
|
|
1291
|
+
var err = new errorHandler(e).getError()
|
|
1292
|
+
logger.error(`${funcname} response`, { "Error": err, "inputs": req }, funcname)
|
|
1293
|
+
reject(err)
|
|
1294
|
+
}
|
|
1295
|
+
})
|
|
1296
|
+
}
|
|
1297
|
+
|
|
1298
|
+
|
|
1299
|
+
/**
|
|
1300
|
+
* use to create smart order step.
|
|
1301
|
+
* @param {Object} req - request body for create smart order step
|
|
1302
|
+
* @param {string} req.symbol - Symbol (e.g., "NSE:SBIN-EQ")
|
|
1303
|
+
* @param {number} req.side - Side (1 for Buy, -1 for Sell)
|
|
1304
|
+
* @param {number} req.qty - Total quantity
|
|
1305
|
+
* @param {string} req.productType - Product type (e.g., "CNC", "INTRADAY")
|
|
1306
|
+
* @param {number} req.initQty - Initial quantity
|
|
1307
|
+
* @param {number} req.avgqty - Average quantity
|
|
1308
|
+
* @param {number} req.avgdiff - Average difference
|
|
1309
|
+
* @param {number} req.direction - Direction
|
|
1310
|
+
* @param {number} req.limitPrice - Limit price
|
|
1311
|
+
* @param {number} req.orderType - Order type
|
|
1312
|
+
* @param {number} req.startTime - Start time (Unix timestamp)
|
|
1313
|
+
* @param {number} req.endTime - End time (Unix timestamp)
|
|
1314
|
+
* @param {number} req.hpr - High price range
|
|
1315
|
+
* @param {number} req.lpr - Low price range
|
|
1316
|
+
* @param {number} req.mpp - Maximum price percentage
|
|
1317
|
+
* @param {number} [req.type] - Type (optional)
|
|
1318
|
+
* @param {number} [req.stopPrice] - Stop price (optional)
|
|
1319
|
+
* @param {string} [req.validity] - Validity (e.g., "DAY") (optional)
|
|
1320
|
+
* @param {number} [req.disclosedQty] - Disclosed quantity (optional)
|
|
1321
|
+
* @param {boolean} [req.offlineOrder] - Offline order flag (optional)
|
|
1322
|
+
* @returns {Promise} returns success message on resolve or error message and error code on failure
|
|
1323
|
+
*/
|
|
1324
|
+
createSmartOrderStep = async (req) => {
|
|
1325
|
+
let session = this.session;
|
|
1326
|
+
var funcname = 'createSmartOrderStep'
|
|
1327
|
+
var logger = this.Logger
|
|
1328
|
+
let AuthrizationToken = this.AccessToken
|
|
1329
|
+
let vers = this.Version
|
|
1330
|
+
return new Promise(async function (resolve, reject) {
|
|
1331
|
+
try {
|
|
1332
|
+
var url = Config.SYNC_API + Config["createSmartorderStep"]
|
|
1333
|
+
await session.post((url), req, {
|
|
1334
|
+
headers: {
|
|
1335
|
+
Authorization: AuthrizationToken,
|
|
1336
|
+
version: vers
|
|
1337
|
+
}
|
|
1338
|
+
})
|
|
1339
|
+
.then(Response => {
|
|
1340
|
+
logger.debug(`${funcname} response`, Response.data, funcname)
|
|
1341
|
+
resolve(Response.data)
|
|
1342
|
+
})
|
|
1343
|
+
}
|
|
1344
|
+
catch (e) {
|
|
1345
|
+
var err = new errorHandler(e).getError()
|
|
1346
|
+
logger.error(`${funcname} response`, { "Error": err, "inputs": req }, funcname)
|
|
1347
|
+
reject(err)
|
|
1348
|
+
}
|
|
1349
|
+
})
|
|
1350
|
+
}
|
|
1351
|
+
|
|
1352
|
+
/**
|
|
1353
|
+
* use to create smart order SIP.
|
|
1354
|
+
* @param {Object} req - request body for create smart order SIP
|
|
1355
|
+
* @param {string} req.symbol - Symbol (e.g., "NSE:SBIN-EQ")
|
|
1356
|
+
* @param {number} req.side - Side (1 for Buy, -1 for Sell)
|
|
1357
|
+
* @param {number} req.amount - Amount for SIP
|
|
1358
|
+
* @param {string} req.productType - Product type (e.g., "CNC", "INTRADAY")
|
|
1359
|
+
* @param {number} req.freq - Frequency
|
|
1360
|
+
* @param {number} req.sip_day - SIP day
|
|
1361
|
+
* @param {boolean} req.imd_start - Immediate start flag
|
|
1362
|
+
* @param {number} req.endTime - End time (Unix timestamp)
|
|
1363
|
+
* @param {number} req.hpr - High price range
|
|
1364
|
+
* @param {number} req.lpr - Low price range
|
|
1365
|
+
* @param {number} req.step_up_freq - Step up frequency
|
|
1366
|
+
* @param {number} req.step_up_amount - Step up amount
|
|
1367
|
+
* @param {number} [req.qty] - Quantity (optional)
|
|
1368
|
+
* @param {number} [req.type] - Type (optional)
|
|
1369
|
+
* @param {number} [req.limitPrice] - Limit price (optional)
|
|
1370
|
+
* @param {number} [req.stopPrice] - Stop price (optional)
|
|
1371
|
+
* @param {string} [req.validity] - Validity (e.g., "DAY") (optional)
|
|
1372
|
+
* @param {number} [req.disclosedQty] - Disclosed quantity (optional)
|
|
1373
|
+
* @param {boolean} [req.offlineOrder] - Offline order flag (optional)
|
|
1374
|
+
* @returns {Promise} returns success message on resolve or error message and error code on failure
|
|
1375
|
+
*/
|
|
1376
|
+
createSmartOrderSIP = async (req) => {
|
|
1377
|
+
let session = this.session;
|
|
1378
|
+
var funcname = 'createSmartOrderSIP'
|
|
1379
|
+
var logger = this.Logger
|
|
1380
|
+
let AuthrizationToken = this.AccessToken
|
|
1381
|
+
let vers = this.Version
|
|
1382
|
+
return new Promise(async function (resolve, reject) {
|
|
1383
|
+
try {
|
|
1384
|
+
var url = Config.SYNC_API + Config["createSmartorderSip"]
|
|
1385
|
+
await session.post((url), req, {
|
|
1386
|
+
headers: {
|
|
1387
|
+
Authorization: AuthrizationToken,
|
|
1388
|
+
version: vers
|
|
1389
|
+
}
|
|
1390
|
+
})
|
|
1391
|
+
.then(Response => {
|
|
1392
|
+
logger.debug(`${funcname} response`, Response.data, funcname)
|
|
1393
|
+
resolve(Response.data)
|
|
1394
|
+
})
|
|
1395
|
+
}
|
|
1396
|
+
catch (e) {
|
|
1397
|
+
var err = new errorHandler(e).getError()
|
|
1398
|
+
logger.error(`${funcname} response`, { "Error": err, "inputs": req }, funcname)
|
|
1399
|
+
reject(err)
|
|
1400
|
+
}
|
|
1401
|
+
})
|
|
1402
|
+
}
|
|
1403
|
+
|
|
1404
|
+
/**
|
|
1405
|
+
* use to create smart order trail.
|
|
1406
|
+
* @param {Object} req - request body for create smart order trail
|
|
1407
|
+
* @param {string} req.symbol - Symbol (e.g., "NSE:SBIN-EQ")
|
|
1408
|
+
* @param {number} req.side - Side (1 for Buy, -1 for Sell)
|
|
1409
|
+
* @param {number} req.qty - Quantity
|
|
1410
|
+
* @param {string} req.productType - Product type (e.g., "CNC", "INTRADAY")
|
|
1411
|
+
* @param {number} req.stopPrice - Stop price
|
|
1412
|
+
* @param {number} req.jump_diff - Jump difference
|
|
1413
|
+
* @param {number} req.orderType - Order type
|
|
1414
|
+
* @param {number} req.mpp - Maximum price percentage
|
|
1415
|
+
* @param {number} [req.type] - Type (optional)
|
|
1416
|
+
* @param {number} [req.limitPrice] - Limit price (optional)
|
|
1417
|
+
* @param {string} [req.validity] - Validity (e.g., "DAY") (optional)
|
|
1418
|
+
* @param {number} [req.disclosedQty] - Disclosed quantity (optional)
|
|
1419
|
+
* @param {boolean} [req.offlineOrder] - Offline order flag (optional)
|
|
1420
|
+
* @returns {Promise} returns success message on resolve or error message and error code on failure
|
|
1421
|
+
*/
|
|
1422
|
+
createSmartOrderTrail = async (req) => {
|
|
1423
|
+
let session = this.session;
|
|
1424
|
+
var funcname = 'createSmartOrderTrail'
|
|
1425
|
+
var logger = this.Logger
|
|
1426
|
+
let AuthrizationToken = this.AccessToken
|
|
1427
|
+
let vers = this.Version
|
|
1428
|
+
return new Promise(async function (resolve, reject) {
|
|
1429
|
+
try {
|
|
1430
|
+
var url = Config.SYNC_API + Config["createSmartorderTrail"]
|
|
1431
|
+
await session.post((url), req, {
|
|
1432
|
+
headers: {
|
|
1433
|
+
Authorization: AuthrizationToken,
|
|
1434
|
+
version: vers
|
|
1435
|
+
}
|
|
1436
|
+
})
|
|
1437
|
+
.then(Response => {
|
|
1438
|
+
logger.debug(`${funcname} response`, Response.data, funcname)
|
|
1439
|
+
resolve(Response.data)
|
|
1440
|
+
})
|
|
1441
|
+
}
|
|
1442
|
+
catch (e) {
|
|
1443
|
+
var err = new errorHandler(e).getError()
|
|
1444
|
+
logger.error(`${funcname} response`, { "Error": err, "inputs": req }, funcname)
|
|
1445
|
+
reject(err)
|
|
1446
|
+
}
|
|
1447
|
+
})
|
|
1448
|
+
}
|
|
1449
|
+
|
|
1450
|
+
/**
|
|
1451
|
+
* use to modify smart order.
|
|
1452
|
+
* @param {Object} req - request body for modify smart order
|
|
1453
|
+
* @param {string} req.flowId - Flow ID of the smart order to modify
|
|
1454
|
+
* @param {number} [req.qty] - New quantity (optional)
|
|
1455
|
+
* @param {number} [req.limitPrice] - New limit price (optional)
|
|
1456
|
+
* @param {number} [req.endTime] - New end time (Unix timestamp) (optional)
|
|
1457
|
+
* @param {number} [req.stopPrice] - New stop price (optional)
|
|
1458
|
+
* @param {number} [req.hpr] - New high price range (optional)
|
|
1459
|
+
* @param {number} [req.lpr] - New low price range (optional)
|
|
1460
|
+
* @returns {Promise} returns success message on resolve or error message and error code on failure
|
|
1461
|
+
*/
|
|
1462
|
+
modifySmartOrder = async (req) => {
|
|
1463
|
+
let session = this.session;
|
|
1464
|
+
var funcname = 'modifySmartOrder'
|
|
1465
|
+
var logger = this.Logger
|
|
1466
|
+
let AuthrizationToken = this.AccessToken
|
|
1467
|
+
let vers = this.Version
|
|
1468
|
+
return new Promise(async function (resolve, reject) {
|
|
1469
|
+
try {
|
|
1470
|
+
var url = Config.SYNC_API + Config["modifySmartorder"]
|
|
1471
|
+
await session.patch((url), req, {
|
|
1472
|
+
headers: {
|
|
1473
|
+
Authorization: AuthrizationToken,
|
|
1474
|
+
version: vers
|
|
1475
|
+
}
|
|
1476
|
+
})
|
|
1477
|
+
.then(Response => {
|
|
1478
|
+
logger.debug(`${funcname} response`, Response.data, funcname)
|
|
1479
|
+
resolve(Response.data)
|
|
1480
|
+
})
|
|
1481
|
+
}
|
|
1482
|
+
catch (e) {
|
|
1483
|
+
var err = new errorHandler(e).getError()
|
|
1484
|
+
logger.error(`${funcname} response`, { "Error": err, "inputs": req }, funcname)
|
|
1485
|
+
reject(err)
|
|
1486
|
+
}
|
|
1487
|
+
})
|
|
1488
|
+
}
|
|
1489
|
+
|
|
1490
|
+
/**
|
|
1491
|
+
* use to cancel smart order.
|
|
1492
|
+
* @param {Object} req - request body for cancel smart order
|
|
1493
|
+
* @param {string} req.flowId - Flow ID of the smart order to cancel
|
|
1494
|
+
* @returns {Promise} returns success message on resolve or error message and error code on failure
|
|
1495
|
+
*/
|
|
1496
|
+
cancelSmartOrder = async (req) => {
|
|
1497
|
+
let session = this.session;
|
|
1498
|
+
var funcname = 'cancelSmartOrder'
|
|
1499
|
+
var logger = this.Logger
|
|
1500
|
+
let AuthrizationToken = this.AccessToken
|
|
1501
|
+
let vers = this.Version
|
|
1502
|
+
return new Promise(async function (resolve, reject) {
|
|
1503
|
+
try {
|
|
1504
|
+
var url = Config.SYNC_API + Config["cancelSmartorder"]
|
|
1505
|
+
await session.delete((url), {
|
|
1506
|
+
headers: {
|
|
1507
|
+
Authorization: AuthrizationToken,
|
|
1508
|
+
version: vers
|
|
1509
|
+
},
|
|
1510
|
+
data: req
|
|
1511
|
+
})
|
|
1512
|
+
.then(Response => {
|
|
1513
|
+
logger.debug(`${funcname} response`, Response.data, funcname)
|
|
1514
|
+
resolve(Response.data)
|
|
1515
|
+
})
|
|
1516
|
+
}
|
|
1517
|
+
catch (e) {
|
|
1518
|
+
var err = new errorHandler(e).getError()
|
|
1519
|
+
logger.error(`${funcname} response`, { "Error": err, "inputs": req }, funcname)
|
|
1520
|
+
reject(err)
|
|
1521
|
+
}
|
|
1522
|
+
})
|
|
1523
|
+
}
|
|
1524
|
+
|
|
1525
|
+
/**
|
|
1526
|
+
* use to pause smart order.
|
|
1527
|
+
* @param {Object} req - request body for pause smart order
|
|
1528
|
+
* @param {string} req.flowId - Flow ID of the smart order to pause
|
|
1529
|
+
* @returns {Promise} returns success message on resolve or error message and error code on failure
|
|
1530
|
+
*/
|
|
1531
|
+
pauseSmartOrder = async (req) => {
|
|
1532
|
+
let session = this.session;
|
|
1533
|
+
var funcname = 'pauseSmartOrder'
|
|
1534
|
+
var logger = this.Logger
|
|
1535
|
+
let AuthrizationToken = this.AccessToken
|
|
1536
|
+
let vers = this.Version
|
|
1537
|
+
return new Promise(async function (resolve, reject) {
|
|
1538
|
+
try {
|
|
1539
|
+
var url = Config.SYNC_API + Config["pauseSmartorder"]
|
|
1540
|
+
await session.patch((url), req, {
|
|
1541
|
+
headers: {
|
|
1542
|
+
Authorization: AuthrizationToken,
|
|
1543
|
+
version: vers
|
|
1544
|
+
}
|
|
1545
|
+
})
|
|
1546
|
+
.then(Response => {
|
|
1547
|
+
logger.debug(`${funcname} response`, Response.data, funcname)
|
|
1548
|
+
resolve(Response.data)
|
|
1549
|
+
})
|
|
1550
|
+
}
|
|
1551
|
+
catch (e) {
|
|
1552
|
+
var err = new errorHandler(e).getError()
|
|
1553
|
+
logger.error(`${funcname} response`, { "Error": err, "inputs": req }, funcname)
|
|
1554
|
+
reject(err)
|
|
1555
|
+
}
|
|
1556
|
+
})
|
|
1557
|
+
}
|
|
1558
|
+
|
|
1559
|
+
/**
|
|
1560
|
+
* use to resume smart order.
|
|
1561
|
+
* @param {Object} req - request body for resume smart order
|
|
1562
|
+
* @param {string} req.flowId - Flow ID of the smart order to resume
|
|
1563
|
+
* @returns {Promise} returns success message on resolve or error message and error code on failure
|
|
1564
|
+
*/
|
|
1565
|
+
resumeSmartOrder = async (req) => {
|
|
1566
|
+
let session = this.session;
|
|
1567
|
+
var funcname = 'resumeSmartOrder'
|
|
1568
|
+
var logger = this.Logger
|
|
1569
|
+
let AuthrizationToken = this.AccessToken
|
|
1570
|
+
let vers = this.Version
|
|
1571
|
+
return new Promise(async function (resolve, reject) {
|
|
1572
|
+
try {
|
|
1573
|
+
var url = Config.SYNC_API + Config["resumeSmartorder"]
|
|
1574
|
+
await session.patch((url), req, {
|
|
1575
|
+
headers: {
|
|
1576
|
+
Authorization: AuthrizationToken,
|
|
1577
|
+
version: vers
|
|
1578
|
+
}
|
|
1579
|
+
})
|
|
1580
|
+
.then(Response => {
|
|
1581
|
+
logger.debug(`${funcname} response`, Response.data, funcname)
|
|
1582
|
+
resolve(Response.data)
|
|
1583
|
+
})
|
|
1584
|
+
}
|
|
1585
|
+
catch (e) {
|
|
1586
|
+
var err = new errorHandler(e).getError()
|
|
1587
|
+
logger.error(`${funcname} response`, { "Error": err, "inputs": req }, funcname)
|
|
1588
|
+
reject(err)
|
|
1589
|
+
}
|
|
1590
|
+
})
|
|
1591
|
+
}
|
|
1592
|
+
|
|
1593
|
+
/**
|
|
1594
|
+
* use to get smart order book with filter.
|
|
1595
|
+
* @param {Object} [req] - optional request parameters for filtering smart order book
|
|
1596
|
+
* @param {string[]} [req.exchange] - Filter by exchange (e.g., ["NSE"])
|
|
1597
|
+
* @param {number[]} [req.side] - Filter by side (1 for Buy, -1 for Sell) (e.g., [1, -1])
|
|
1598
|
+
* @param {number[]} [req.flowtype] - Filter by flow type (e.g., [1, 2])
|
|
1599
|
+
* @param {string[]} [req.product] - Filter by product type (e.g., ["CNC", "INTRADAY"])
|
|
1600
|
+
* @param {number[]} [req.messageType] - Filter by message type (e.g., [1, 2])
|
|
1601
|
+
* @param {string} [req.search] - Search string (e.g., "SBIN")
|
|
1602
|
+
* @param {string} [req.sort_by] - Sort by field (e.g., "CreatedTime")
|
|
1603
|
+
* @param {number} [req.ord_by] - Order by (1 for ascending, -1 for descending)
|
|
1604
|
+
* @param {number} [req.page_no] - Page number
|
|
1605
|
+
* @param {number} [req.page_size] - Page size
|
|
1606
|
+
* @returns {Promise} returns smart order book on resolve or error message and error code on failure
|
|
1607
|
+
*/
|
|
1608
|
+
getSmartOrderBookWithFilter = async (req) => {
|
|
1609
|
+
let session = this.session;
|
|
1610
|
+
var funcname = 'getSmartOrderBookWithFilter'
|
|
1611
|
+
var logger = this.Logger
|
|
1612
|
+
let AuthrizationToken = this.AccessToken
|
|
1613
|
+
let vers = this.Version
|
|
1614
|
+
return new Promise(async function (resolve, reject) {
|
|
1615
|
+
try {
|
|
1616
|
+
var url = Config.SYNC_API + Config["smartorderOrderBook"]
|
|
1617
|
+
await session.get((url), {
|
|
1618
|
+
headers: {
|
|
1619
|
+
Authorization: AuthrizationToken,
|
|
1620
|
+
version: vers
|
|
1621
|
+
},
|
|
1622
|
+
params: req
|
|
1623
|
+
})
|
|
1624
|
+
.then(Response => {
|
|
1625
|
+
logger.debug(`${funcname} response`, Response.data, funcname)
|
|
1626
|
+
resolve(Response.data)
|
|
1627
|
+
})
|
|
1628
|
+
}
|
|
1629
|
+
catch (e) {
|
|
1630
|
+
var err = new errorHandler(e).getError()
|
|
1631
|
+
logger.error(`${funcname} response`, { "Error": err, "inputs": req }, funcname)
|
|
1632
|
+
reject(err)
|
|
1633
|
+
}
|
|
1634
|
+
})
|
|
1635
|
+
}
|
|
1636
|
+
|
|
1637
|
+
/**
|
|
1638
|
+
* use to create smart exit trigger.
|
|
1639
|
+
* @param {Object} req - request body for create smart exit trigger
|
|
1640
|
+
* @param {string} req.name - Strategy name (e.g., "Alert Only Strategy")
|
|
1641
|
+
* @param {number} req.type - Trigger type (1: Only Alert, 2: Exit with Alert, 3: Exit with Alert + Wait for Recovery)
|
|
1642
|
+
* @param {number} req.profitRate - Profit rate threshold
|
|
1643
|
+
* @param {number} req.lossRate - Loss rate threshold (negative value)
|
|
1644
|
+
* @param {number} [req.waitTime] - Wait time in minutes (required for type 3)
|
|
1645
|
+
* @returns {Promise} returns success message on resolve or error message and error code on failure
|
|
1646
|
+
*/
|
|
1647
|
+
createSmartExitTrigger = async (req) => {
|
|
1648
|
+
let session = this.session;
|
|
1649
|
+
var funcname = 'createSmartExitTrigger'
|
|
1650
|
+
var logger = this.Logger
|
|
1651
|
+
let AuthrizationToken = this.AccessToken
|
|
1652
|
+
let vers = this.Version
|
|
1653
|
+
return new Promise(async function (resolve, reject) {
|
|
1654
|
+
try {
|
|
1655
|
+
var url = Config.SYNC_API + Config["smartExitTrigger"]
|
|
1656
|
+
await session.post((url), req, {
|
|
994
1657
|
headers: {
|
|
995
1658
|
Authorization: AuthrizationToken,
|
|
996
1659
|
version: vers
|
|
@@ -1008,8 +1671,119 @@ class FyersApi {
|
|
|
1008
1671
|
}
|
|
1009
1672
|
})
|
|
1010
1673
|
}
|
|
1011
|
-
}
|
|
1012
1674
|
|
|
1675
|
+
/**
|
|
1676
|
+
* use to get smart exit trigger.
|
|
1677
|
+
* @param {Object} [req] - optional request parameters for getting smart exit trigger
|
|
1678
|
+
* @param {string} [req.flowId] - Filter by flow ID (optional)
|
|
1679
|
+
* @returns {Promise} returns smart exit trigger details on resolve or error message and error code on failure
|
|
1680
|
+
*/
|
|
1681
|
+
getSmartExitTrigger = async (req) => {
|
|
1682
|
+
let session = this.session;
|
|
1683
|
+
var funcname = 'getSmartExitTrigger'
|
|
1684
|
+
var logger = this.Logger
|
|
1685
|
+
let AuthrizationToken = this.AccessToken
|
|
1686
|
+
let vers = this.Version
|
|
1687
|
+
return new Promise(async function (resolve, reject) {
|
|
1688
|
+
try {
|
|
1689
|
+
var url = Config.SYNC_API + Config["smartExitTrigger"]
|
|
1690
|
+
await session.get((url), {
|
|
1691
|
+
headers: {
|
|
1692
|
+
Authorization: AuthrizationToken,
|
|
1693
|
+
version: vers
|
|
1694
|
+
},
|
|
1695
|
+
params: req
|
|
1696
|
+
})
|
|
1697
|
+
.then(Response => {
|
|
1698
|
+
logger.debug(`${funcname} response`, Response.data, funcname)
|
|
1699
|
+
resolve(Response.data)
|
|
1700
|
+
})
|
|
1701
|
+
}
|
|
1702
|
+
catch (e) {
|
|
1703
|
+
var err = new errorHandler(e).getError()
|
|
1704
|
+
logger.error(`${funcname} response`, { "Error": err, "inputs": req }, funcname)
|
|
1705
|
+
reject(err)
|
|
1706
|
+
}
|
|
1707
|
+
})
|
|
1708
|
+
}
|
|
1709
|
+
|
|
1710
|
+
/**
|
|
1711
|
+
* use to update smart exit trigger.
|
|
1712
|
+
* @param {Object} req - request body for update smart exit trigger
|
|
1713
|
+
* @param {string} req.flowId - Flow ID of the smart exit trigger to update
|
|
1714
|
+
* @param {number} [req.profitRate] - New profit rate threshold (optional)
|
|
1715
|
+
* @param {number} [req.lossRate] - New loss rate threshold (optional, negative value)
|
|
1716
|
+
* @param {number} [req.type] - New trigger type (optional, 1: Only Alert, 2: Exit with Alert, 3: Exit with Alert + Wait for Recovery)
|
|
1717
|
+
* @param {string} [req.name] - New strategy name (optional)
|
|
1718
|
+
* @param {number} [req.waitTime] - New wait time in minutes (optional, required for type 3)
|
|
1719
|
+
* @param {number} [req.triggerPrice] - Trigger price (optional)
|
|
1720
|
+
* @param {number} [req.stopLoss] - Stop loss price (optional)
|
|
1721
|
+
* @param {number} [req.takeProfit] - Take profit price (optional)
|
|
1722
|
+
* @returns {Promise} returns success message on resolve or error message and error code on failure
|
|
1723
|
+
*/
|
|
1724
|
+
updateSmartExitTrigger = async (req) => {
|
|
1725
|
+
let session = this.session;
|
|
1726
|
+
var funcname = 'updateSmartExitTrigger'
|
|
1727
|
+
var logger = this.Logger
|
|
1728
|
+
let AuthrizationToken = this.AccessToken
|
|
1729
|
+
let vers = this.Version
|
|
1730
|
+
return new Promise(async function (resolve, reject) {
|
|
1731
|
+
try {
|
|
1732
|
+
var url = Config.SYNC_API + Config["smartExitTrigger"]
|
|
1733
|
+
await session.put((url), req, {
|
|
1734
|
+
headers: {
|
|
1735
|
+
Authorization: AuthrizationToken,
|
|
1736
|
+
version: vers
|
|
1737
|
+
}
|
|
1738
|
+
})
|
|
1739
|
+
.then(Response => {
|
|
1740
|
+
logger.debug(`${funcname} response`, Response.data, funcname)
|
|
1741
|
+
resolve(Response.data)
|
|
1742
|
+
})
|
|
1743
|
+
}
|
|
1744
|
+
catch (e) {
|
|
1745
|
+
var err = new errorHandler(e).getError()
|
|
1746
|
+
logger.error(`${funcname} response`, { "Error": err, "inputs": req }, funcname)
|
|
1747
|
+
reject(err)
|
|
1748
|
+
}
|
|
1749
|
+
})
|
|
1750
|
+
}
|
|
1751
|
+
|
|
1752
|
+
/**
|
|
1753
|
+
* use to activate/deactivate smart exit trigger.
|
|
1754
|
+
* @param {Object} req - request body for activate/deactivate smart exit trigger
|
|
1755
|
+
* @param {string} req.flowId - Flow ID of the smart exit trigger to activate/deactivate
|
|
1756
|
+
* @returns {Promise} returns success message on resolve or error message and error code on failure
|
|
1757
|
+
*/
|
|
1758
|
+
activateDeactivateSmartExitTrigger = async (req) => {
|
|
1759
|
+
let session = this.session;
|
|
1760
|
+
var funcname = 'activateSmartExitTrigger'
|
|
1761
|
+
var logger = this.Logger
|
|
1762
|
+
let AuthrizationToken = this.AccessToken
|
|
1763
|
+
let vers = this.Version
|
|
1764
|
+
return new Promise(async function (resolve, reject) {
|
|
1765
|
+
try {
|
|
1766
|
+
var url = Config.SYNC_API + Config["activateSmartExitTrigger"]
|
|
1767
|
+
await session.post((url), req, {
|
|
1768
|
+
headers: {
|
|
1769
|
+
Authorization: AuthrizationToken,
|
|
1770
|
+
version: vers
|
|
1771
|
+
}
|
|
1772
|
+
})
|
|
1773
|
+
.then(Response => {
|
|
1774
|
+
logger.debug(`${funcname} response`, Response.data, funcname)
|
|
1775
|
+
resolve(Response.data)
|
|
1776
|
+
})
|
|
1777
|
+
}
|
|
1778
|
+
catch (e) {
|
|
1779
|
+
var err = new errorHandler(e).getError()
|
|
1780
|
+
logger.error(`${funcname} response`, { "Error": err, "inputs": req }, funcname)
|
|
1781
|
+
reject(err)
|
|
1782
|
+
}
|
|
1783
|
+
})
|
|
1784
|
+
}
|
|
1785
|
+
}
|
|
1786
|
+
|
|
1013
1787
|
function generateUrl(url, queryObject) {
|
|
1014
1788
|
let finalUrl = url + "?";
|
|
1015
1789
|
for (let key in queryObject) {
|
|
@@ -1024,3 +1798,4 @@ function getSHA256Hash(inputString) {
|
|
|
1024
1798
|
return hash.digest('hex');
|
|
1025
1799
|
}
|
|
1026
1800
|
module.exports = FyersApi;
|
|
1801
|
+
module.exports.axiosInstance = axiosInstance;
|