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.
@@ -1,10 +1,20 @@
1
1
  "use strict";
2
2
  let { Config } = require("../config/config");
3
3
  let errorHandler = require("../errorHandler/errorHandler");
4
- let axios = require("axios")
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 axios.post(`${Config.SYNC_API}/validate-authcode`, {
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 axios.post(`${Config.API}/validate-authcode`, {
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 axios.get((url), {
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 axios.get((url), {
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 axios.get((url), {
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 axios.post((url), req, {
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 axios.get((url), {
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 axios.get((url), {
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 axios.get((url), {
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 axios.get((url), {
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 axios.get((url), {
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 axios.post((url), req, {
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 axios.post((url), req, {
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 axios.post((url), req, {
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 axios.post((url), req, {
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 axios.patch((url), req, {
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 axios.patch((url), req, {
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 axios.patch((url), req, {
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 axios.delete((url), {
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 axios.delete((url), {
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 axios.delete((url), {
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 axios.delete((url), {
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 axios.post((url), req, {
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 axios.get((url), {
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 axios.get((url), {
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 axios.get((url), {
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 axios.get((url), {
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 axios.get((url), {
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;