fyers-web-sdk-v3 1.0.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.
@@ -0,0 +1,811 @@
1
+ "use strict";
2
+ import {Config} from "../config/config.js"
3
+ import {ErrorHandler} from "../errorHandler/errorHandler.js"
4
+ const errorHandler = ErrorHandler
5
+ import axios from 'https://cdn.skypack.dev/axios';
6
+ /**
7
+ * Class to access Fyers API.
8
+ * @class
9
+ */
10
+ class FyersApi {
11
+ /**
12
+ * Create a new DataSocket object to acess symboldata websocket.
13
+ * @constructor
14
+ * @param {Object} params - The parameters for initializing the DataSocket.
15
+ * @param {string} params.AccessToken - The access token for authentication.
16
+ * @param {string} params.AppID - AppID of user.
17
+ * @param {string} params.RedirectURL - Redirect URL provided while creating the APP.
18
+ * @param {boolean} params.enableLogging - Flag to enable or disable logging.
19
+ * @param {string} [params.Version="2.0"] - the version of API you want your output format in.
20
+ */
21
+ constructor(params) {
22
+ var self = this;
23
+
24
+ /**
25
+ * AccessToken of user.
26
+ * @type {String}
27
+ */
28
+ self.AccessToken = params?.AccessToken ?? null;;
29
+
30
+ /**
31
+ * RedirectURL of provided by user.
32
+ * @type {String}
33
+ */
34
+ self.RedirectURL = params?.RedirectURL ?? null;
35
+
36
+ /**
37
+ * APPID provided by user.
38
+ * @type {String}
39
+ */
40
+ self.AppID = params?.AppID ?? null;
41
+ /**
42
+ * API version provided by client.
43
+ * @type {String}
44
+ */
45
+ self.Version = params?.Version ?? "2.0";
46
+
47
+ /**
48
+ * filepath where are logs are to be saved.
49
+ * @type {string}
50
+ */
51
+ self.LogPath = params?.path ?? undefined;
52
+
53
+ /**
54
+ * Flag to enable or disable logging.
55
+ * @type {boolean}
56
+ */
57
+ self.LoggingFlag = params?.enableLogging ?? true;
58
+
59
+ /**
60
+ * object used to write logs.
61
+ * @type {Logger}
62
+ */
63
+ // self.Logger = new Logger(this.LogPath,this.LoggingFlag)
64
+ }
65
+
66
+ /**
67
+ * sets the APPID.
68
+ * @param {string} req - APPID in format xxxxxx-xxx.
69
+ */
70
+ setAppId = function (req) {
71
+ this.AppID = req
72
+ }
73
+
74
+ /**
75
+ * sets the RedirectURL.
76
+ * @param {string} req - pass redirect URL set during creation of APP.
77
+ */
78
+ setRedirectUrl = function (req) {
79
+ this.RedirectURL = req
80
+ }
81
+
82
+ /**
83
+ * sets the AccessToken.
84
+ * @param {string} req - pass Access token.
85
+ */
86
+ setAccessToken = function (req) {
87
+ if (this.AppID == null) {
88
+ console.log("Please set APPID using setAppId function")
89
+ }
90
+ else {
91
+ this.AccessToken = this.AppID + ":" + req
92
+ }
93
+ }
94
+
95
+ /**
96
+ * get generate-authcode URL to login and generate authcode.
97
+ * @param {Object} req - defines for what the callback function is.
98
+ * @param {string} req.client_id - AppID of user.
99
+ * @param {string} req.redirect_uri - RedirectURL provided by user.
100
+ * @param {string} [req.state] - state value.
101
+ * @returns {string} generate authcode url
102
+ */
103
+ generateAuthCode = function (req) {
104
+ var funcname = 'generateAuthCode'
105
+ // var logger = this.Logger
106
+ const client_id = (req && req.client_id) || this.AppID;
107
+ const redirect_uri = (req && req.redirect_uri) || this.RedirectURL;
108
+ const state = (req && req.state) || "sample_state";
109
+ console.log('generate authcode response', `${Config.API}generate-authcode?client_id=${client_id}&redirect_uri=${redirect_uri}&response_type=code&state=${state}`, funcname);
110
+ return `${Config.SYNC_API}/generate-authcode?client_id=${client_id}&redirect_uri=${redirect_uri}&response_type=code&state=${state}`
111
+ }
112
+
113
+ /**
114
+ * generate access token to use the API's.
115
+ * @param {Object} req - defines for what the callback function is.
116
+ * @param {string} req.client_id - AppID of user.
117
+ * @param {string} req.secret_key - App Secret of user.
118
+ * @param {string} req.auth_code - authcode generated after use of generateAuthCode and login.
119
+ * @param {string} [req.code_verifier] - code verifier.
120
+ * @returns {Object} Object with access token and refresh token if successful
121
+ */
122
+ generate_access_token = async (req) => {
123
+ var funcname = 'generateAuthCode'
124
+ // var logger = this.Logger
125
+ const code_verifier = req.code_verifier || "";
126
+ const auth_code = req.auth_code || "";
127
+ const client_id = req.client_id || this.AppID;
128
+ const secret_key = req.secret_key || "";
129
+ const sha256 = await getSHA256Hash(`${client_id}:${secret_key}`)
130
+ // const sha256 = "c0521792b38c43632a5682579ce78c7eac8fd5e8c5dbe56890c2b338a180fcb4"
131
+ console.log("generate_access_token inputs", { "code_verifier": code_verifier, "auth_code": auth_code, "client_id": client_id, "secret_key": secret_key, "sha256": sha256 }, funcname)
132
+ try {
133
+
134
+ if (code_verifier === "") {
135
+
136
+ const access_token = await axios.post(`${Config.SYNC_API}/validate-authcode`, {
137
+ grant_type: "authorization_code",
138
+ code: req.auth_code,
139
+ appIdHash: sha256
140
+
141
+ })
142
+ return access_token.data;
143
+ }
144
+ else {
145
+
146
+ const access_token = await axios.post(`${Config.API}/validate-authcode`, {
147
+ grant_type: "authorization_code",
148
+ code_verifier: req.code_verifier,
149
+ code: req.auth_code,
150
+
151
+
152
+ })
153
+ return access_token.data;
154
+ }
155
+
156
+ }
157
+ catch (e) {
158
+ var err = new errorHandler(e).getError()
159
+ console.log("error generating access token", err, funcname)
160
+ return err
161
+ }
162
+ }
163
+
164
+ /**
165
+ * get profile data.
166
+ * @returns {Promise} returns profile data on resolve or error message and error code on failure
167
+ */
168
+ get_profile = async (req) => {
169
+ var funcname = 'get_profile'
170
+ // var logger = this.Logger
171
+ let AuthrizationToken = this.AccessToken
172
+ let vers = this.Version
173
+ return new Promise(async function (resolve, reject) {
174
+ try {
175
+ var url = Config.SYNC_API + Config["get_profile"]
176
+ console.log(url)
177
+ await axios.get((url), {
178
+ headers: {
179
+ Authorization: AuthrizationToken,
180
+ // version: vers
181
+ }
182
+ })
183
+ .then(Response => {
184
+ console.log(`${funcname} response`, Response.data, funcname)
185
+ resolve(Response.data)
186
+ })
187
+ }
188
+ catch (e) {
189
+ var err = new errorHandler(e).getError()
190
+ console.log(`${funcname} response`, err, funcname)
191
+ reject(err)
192
+ }
193
+ })
194
+ }
195
+
196
+ /**
197
+ * get funds detail.
198
+ * @returns {Promise} returns funds detail on resolve or error message and error code on failure
199
+ */
200
+ get_funds = async (req) => {
201
+ var funcname = 'get_funds'
202
+ // var logger = this.Logger
203
+ let AuthrizationToken = this.AccessToken
204
+ let vers = this.Version
205
+ return new Promise(async function (resolve, reject) {
206
+ try {
207
+ var url = Config.SYNC_API + Config["funds"]
208
+ await axios.get((url), {
209
+ headers: {
210
+ Authorization: AuthrizationToken,
211
+ // version: vers
212
+ }
213
+ })
214
+ .then(Response => {
215
+ console.log(`${funcname} response`, Response.data, funcname)
216
+ resolve(Response.data)
217
+ })
218
+ }
219
+ catch (e) {
220
+ var err = new errorHandler(e).getError()
221
+ console.log(`${funcname} response`, err, funcname)
222
+ reject(err)
223
+ }
224
+ })
225
+ }
226
+
227
+ /**
228
+ * get holdings detail.
229
+ * @returns {Promise} returns holdings detail on resolve or error message and error code on failure
230
+ */
231
+ get_holdings = async (req) => {
232
+ var funcname = 'get_holdings'
233
+ // var logger = this.Logger
234
+ let AuthrizationToken = this.AccessToken
235
+ let vers = this.Version
236
+ return new Promise(async function (resolve, reject) {
237
+ try {
238
+ var url = Config.SYNC_API + Config["holdings"]
239
+ await axios.get((url), {
240
+ headers: {
241
+ Authorization: AuthrizationToken,
242
+ // version: vers
243
+ }
244
+ })
245
+ .then(Response => {
246
+ console.log(`${funcname} response`, Response.data, funcname)
247
+ resolve(Response.data)
248
+ })
249
+ }
250
+ catch (e) {
251
+ var err = new errorHandler(e).getError()
252
+ console.log(`${funcname} response`, err, funcname)
253
+ reject(err)
254
+ }
255
+ })
256
+ }
257
+
258
+
259
+ /**
260
+ * get orderbook to get order details of order placed on current day.
261
+ * @returns {Promise} returns orderbook detail on resolve or error message and error code on failure
262
+ */
263
+ get_orders = async (req) => {
264
+ var funcname = 'get_orders'
265
+ // var logger = this.Logger
266
+ let AuthrizationToken = this.AccessToken
267
+ let vers = this.Version
268
+ return new Promise(async function (resolve, reject) {
269
+ try {
270
+ var url = Config.SYNC_API + Config["orders"]
271
+ await axios.get((url), {
272
+ headers: {
273
+ Authorization: AuthrizationToken,
274
+ // version: vers
275
+ }
276
+ })
277
+ .then(Response => {
278
+ console.log(`${funcname} response`, Response.data, funcname)
279
+ resolve(Response.data)
280
+ })
281
+ }
282
+ catch (e) {
283
+ var err = new errorHandler(e).getError()
284
+ console.log(`${funcname} response`, err, funcname)
285
+ reject(err)
286
+ }
287
+ })
288
+ }
289
+
290
+ /**
291
+ * get orderbook for a specific order ID.
292
+ * @param {Object} req - defines for what the callback function is.
293
+ * @param {string} req.order_id - orderID for which orderbook is required for.
294
+ * @returns {Promise} returns orderbook detail of passed order ID on resolve or error message and error code on failure
295
+ */
296
+ get_filtered_orders = async (req) => {
297
+ var funcname = 'get_filtered_orders'
298
+ // var logger = this.Logger
299
+ let AuthrizationToken = this.AccessToken
300
+ let vers = this.Version
301
+ return new Promise(async function (resolve, reject) {
302
+ try {
303
+ var url = Config.SYNC_API + Config["orders"] + `?id=${req.order_id}`
304
+ await axios.get((url), {
305
+ headers: {
306
+ Authorization: AuthrizationToken,
307
+ // version: vers
308
+ }
309
+ })
310
+ .then(Response => {
311
+ console.log(`${funcname} response`, Response.data, funcname)
312
+ resolve(Response.data)
313
+ })
314
+ }
315
+ catch (e) {
316
+ var err = new errorHandler(e).getError()
317
+ console.log(`${funcname} response`, { "Error": err, "inputs": req }, funcname)
318
+ reject(err)
319
+ }
320
+ })
321
+ }
322
+
323
+ /**
324
+ * get positionbook to get position details.
325
+ * @returns {Promise} returns positionbook detail on resolve or error message and error code on failure
326
+ */
327
+ get_positions = async (req) => {
328
+ var funcname = 'get_positions'
329
+ // var logger = this.Logger
330
+ let AuthrizationToken = this.AccessToken
331
+ let vers = this.Version
332
+ return new Promise(async function (resolve, reject) {
333
+ try {
334
+ var url = Config.SYNC_API + Config["positions"]
335
+ await axios.get((url), {
336
+ headers: {
337
+ Authorization: AuthrizationToken,
338
+ // version: vers
339
+ }
340
+ })
341
+ .then(Response => {
342
+ console.log(`${funcname} response`, Response.data, funcname)
343
+ resolve(Response.data)
344
+ })
345
+ }
346
+ catch (e) {
347
+ var err = new errorHandler(e).getError()
348
+ console.log(`${funcname} response`, err, funcname)
349
+ reject(err)
350
+ }
351
+ })
352
+ }
353
+
354
+ /**
355
+ * get tradebook to get trade details.
356
+ * @returns {Promise} returns tradebook detail on resolve or error message and error code on failure
357
+ */
358
+ get_tradebook = async (req) => {
359
+ var funcname = 'get_tradebook'
360
+ // var logger = this.Logger
361
+ let AuthrizationToken = this.AccessToken
362
+ let vers = this.Version
363
+ return new Promise(async function (resolve, reject) {
364
+ try {
365
+ var url = Config.SYNC_API + Config["tradebook"]
366
+ await axios.get((url), {
367
+ headers: {
368
+ Authorization: AuthrizationToken,
369
+ // version: vers
370
+ }
371
+ })
372
+ .then(Response => {
373
+ console.log(`${funcname} response`, Response.data, funcname)
374
+ resolve(Response.data)
375
+ })
376
+ }
377
+ catch (e) {
378
+ var err = new errorHandler(e).getError()
379
+ console.log(`${funcname} response`, err, funcname)
380
+ reject(err)
381
+ }
382
+ })
383
+ }
384
+
385
+ /**
386
+ * use to place order.
387
+ * @param {Object} req - request data.
388
+ * @returns {Promise} returns orderID of placed order on resolve or error message and error code on failure
389
+ */
390
+ place_order = async (req) => {
391
+ var funcname = 'place_order'
392
+ // var logger = this.Logger
393
+ let AuthrizationToken = this.AccessToken
394
+ let vers = this.Version
395
+ return new Promise(async function (resolve, reject) {
396
+ try {
397
+ var url = Config.SYNC_API + Config["orders_sync"]
398
+ await axios.post((url), req, {
399
+ headers: {
400
+ Authorization: AuthrizationToken,
401
+ // version: vers
402
+ }
403
+ })
404
+ .then(Response => {
405
+ console.log(`${funcname} response`, Response.data, funcname)
406
+ resolve(Response.data)
407
+ })
408
+
409
+ }
410
+ catch (e) {
411
+ var err = new errorHandler(e).getError()
412
+ console.log(`${funcname} response`, { "Error": err, "inputs": req }, funcname)
413
+ reject(err)
414
+ }
415
+ })
416
+ }
417
+
418
+ /**
419
+ * use to place multiple order.
420
+ * @param {Object[]} req - request data.
421
+ * @returns {Promise} returns orderID of all placed and if they are failed or successful on resolve or error message and error code on failure
422
+ */
423
+ place_multi_order = async (req) => {
424
+ var funcname = 'place_multi_order'
425
+ // var logger = this.Logger
426
+ let AuthrizationToken = this.AccessToken
427
+ let vers = this.Version
428
+ return new Promise(async function (resolve, reject) {
429
+ try {
430
+ var url = Config.SYNC_API + Config["multi_orders"]
431
+ await axios.post((url), req, {
432
+ headers: {
433
+ Authorization: AuthrizationToken,
434
+ // version: vers
435
+ }
436
+ })
437
+ .then(Response => {
438
+ console.log(`${funcname} response`, Response.data, funcname)
439
+ resolve(Response.data)
440
+ })
441
+ }
442
+ catch (e) {
443
+ var err = new errorHandler(e).getError()
444
+ console.log(`${funcname} response`, { "Error": err, "inputs": req }, funcname)
445
+ reject(err)
446
+ }
447
+ })
448
+ }
449
+
450
+ /**
451
+ * use to modify placed orders which are not traded yet.
452
+ * @param {Object} req - request data.
453
+ * @returns {Promise} returns orderID of passed order ID and if modification was successful or not resolve or error message and error code on failure
454
+ */
455
+ modify_order = async (req) => {
456
+ var funcname = 'modify_order'
457
+ // var logger = this.Logger
458
+ let AuthrizationToken = this.AccessToken
459
+ let vers = this.Version
460
+ return new Promise(async function (resolve, reject) {
461
+ try {
462
+ var url = Config.SYNC_API + Config["orders_sync"]
463
+ await axios.patch((url), req, {
464
+ headers: {
465
+ Authorization: AuthrizationToken,
466
+ // version: vers
467
+ }
468
+ })
469
+ .then(Response => {
470
+ console.log(`${funcname} response`, Response.data, funcname)
471
+ resolve(Response.data)
472
+ })
473
+ }
474
+ catch (e) {
475
+ var err = new errorHandler(e).getError()
476
+ console.log(`${funcname} response`, { "Error": err, "inputs": req }, funcname)
477
+ reject(err)
478
+ }
479
+ })
480
+ }
481
+
482
+ /**
483
+ * use to modify multiple placed orders which are not traded yet.
484
+ * @param {Object[]} req - request data.
485
+ * @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
486
+ */
487
+ modify_multi_order = async (req) => {
488
+ var funcname = 'modify_multi_order'
489
+ // var logger = this.Logger
490
+ let AuthrizationToken = this.AccessToken
491
+ let vers = this.Version
492
+ return new Promise(async function (resolve, reject) {
493
+ try {
494
+ var url = Config.SYNC_API + Config["multi_orders"]
495
+ await axios.patch((url), req, {
496
+ headers: {
497
+ Authorization: AuthrizationToken,
498
+ // version: vers
499
+ }
500
+ })
501
+ .then(Response => {
502
+ console.log(`${funcname} response`, Response.data, funcname)
503
+ resolve(Response.data)
504
+ })
505
+ }
506
+ catch (e) {
507
+ var err = new errorHandler(e).getError()
508
+ console.log(`${funcname} response`, { "Error": err, "inputs": req }, funcname)
509
+ reject(err)
510
+ }
511
+ })
512
+ }
513
+
514
+ /**
515
+ * use to cancel placed orders which are not traded yet.
516
+ * @param {Object} req - request data.
517
+ * @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
518
+ */
519
+ cancel_order = async (req) => {
520
+ var funcname = 'cancel_order'
521
+ // var logger = this.Logger
522
+ let AuthrizationToken = this.AccessToken
523
+ let vers = this.Version
524
+ return new Promise(async function (resolve, reject) {
525
+ try {
526
+ var url = Config.SYNC_API + Config["orders_sync"]
527
+ await axios.delete((url), {
528
+ headers: {
529
+ Authorization: AuthrizationToken,
530
+ // version: vers
531
+ },
532
+ data:req
533
+ })
534
+ .then(Response => {
535
+ console.log(`${funcname} response`, Response.data, funcname)
536
+ resolve(Response.data)
537
+ })
538
+ }
539
+ catch (e) {
540
+ var err = new errorHandler(e).getError()
541
+ console.log(`${funcname} response`, { "Error": err, "inputs": req }, funcname)
542
+ reject(err)
543
+ }
544
+ })
545
+ }
546
+
547
+ /**
548
+ * use to cancel multiple placed orders which are not traded yet.
549
+ * @param {Object[]} req - request data.
550
+ * @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
551
+ */
552
+ cancel_multi_order = async (req) => {
553
+ var funcname = 'cancel_multi_order'
554
+ // var logger = this.Logger
555
+ let AuthrizationToken = this.AccessToken
556
+ let vers = this.Version
557
+ return new Promise(async function (resolve, reject) {
558
+ try {
559
+ var url = Config.SYNC_API + Config["multi_orders"]
560
+ await axios.delete((url), {
561
+ headers: {
562
+ Authorization: AuthrizationToken,
563
+ // version: vers
564
+ },
565
+ data:req
566
+ })
567
+ .then(Response => {
568
+ console.log(`${funcname} response`, Response.data, funcname)
569
+ resolve(Response.data)
570
+ })
571
+ }
572
+ catch (e) {
573
+ var err = new errorHandler(e).getError()
574
+ console.log(`${funcname} response`, { "Error": err, "inputs": req }, funcname)
575
+ reject(err)
576
+ }
577
+ })
578
+ }
579
+
580
+ /**
581
+ * use to exit all positions.
582
+ * @param {Object} req - request data.
583
+ * @returns {Promise} returns success message on resolve or error message and error code on failure
584
+ */
585
+ exit_position = async (req) => {
586
+ var funcname = 'exit_position'
587
+ // var logger = this.Logger
588
+ let AuthrizationToken = this.AccessToken
589
+ let vers = this.Version
590
+ return new Promise(async function (resolve, reject) {
591
+ try {
592
+ var url = Config.SYNC_API + Config["positions"]
593
+ await axios.delete((url), {
594
+ headers: {
595
+ Authorization: AuthrizationToken,
596
+ // version: vers
597
+ },
598
+ data: req
599
+ })
600
+ .then(Response => {
601
+ console.log(`${funcname} response`, Response.data, funcname)
602
+ resolve(Response.data)
603
+ })
604
+ }
605
+ catch (e) {
606
+ var err = new errorHandler(e).getError()
607
+ console.log(`${funcname} response`, { "Error": err, "inputs": req }, funcname)
608
+ reject(err)
609
+ }
610
+ })
611
+ }
612
+
613
+ /**
614
+ * use to convert open positions.
615
+ * @param {Object} req - request data.
616
+ * @returns {Promise} returns success message on resolve or error message and error code on failure
617
+ */
618
+ convert_position = async (req) => {
619
+ var funcname = 'convert_position'
620
+ // var logger = this.Logger
621
+ let AuthrizationToken = this.AccessToken
622
+ let vers = this.Version
623
+ return new Promise(async function (resolve, reject) {
624
+ try {
625
+ var url = Config.SYNC_API + Config["positions"]
626
+ await axios.post((url), req, {
627
+ headers: {
628
+ Authorization: AuthrizationToken,
629
+ // version: vers
630
+ }
631
+ })
632
+ .then(Response => {
633
+ console.log(`${funcname} response`, Response.data, funcname)
634
+ resolve(Response.data)
635
+ })
636
+ }
637
+ catch (e) {
638
+ var err = new errorHandler(e).getError()
639
+ console.log(`${funcname} response`, { "Error": err, "inputs": req }, funcname)
640
+ reject(err)
641
+ }
642
+ })
643
+ }
644
+
645
+ /**
646
+ * use to get market status.
647
+ * @returns {Promise} returns success message on resolve or error message and error code on failure
648
+ */
649
+ market_status = async (req) => {
650
+ var funcname = 'market_status'
651
+ // var logger = this.Logger
652
+ let AuthrizationToken = this.AccessToken
653
+ let vers = this.Version
654
+ return new Promise(async function (resolve, reject) {
655
+ try {
656
+ var url = Config.data_Api1 + Config["marketStatus"]
657
+ const profile = await axios.get((url), {
658
+ headers: {
659
+ Authorization: AuthrizationToken,
660
+ // version: vers
661
+ }
662
+ })
663
+ .then(Response => {
664
+ console.log(`${funcname} response`, Response.data, funcname)
665
+ resolve(Response.data)
666
+ })
667
+ }
668
+ catch (e) {
669
+ var err = new errorHandler(e).getError()
670
+ console.log(`${funcname} response`, err, funcname)
671
+ reject(err)
672
+ }
673
+ })
674
+ }
675
+
676
+ /**
677
+ * use to get historic data of symbol.
678
+ * @param {Object} req - request data.
679
+ * @returns {Promise} returns success message on resolve or error message and error code on failure
680
+ */
681
+ getHistory = async (req) => {
682
+ var funcname = 'getHistory'
683
+ // var logger = this.Logger
684
+ let AuthrizationToken = this.AccessToken
685
+ let vers = this.Version
686
+ return new Promise(async function (resolve, reject) {
687
+ try {
688
+ var url = Config.data_Api1 + Config["history"]
689
+ url = generateUrl(url, req)
690
+ await axios.get((url), {
691
+ headers: {
692
+ Authorization: AuthrizationToken,
693
+ // version: vers
694
+ }
695
+ })
696
+ .then(Response => {
697
+ console.log(`${funcname} response`, Response.data, funcname)
698
+ resolve(Response.data)
699
+ })
700
+ }
701
+ catch (e) {
702
+ var err = new errorHandler(e).getError()
703
+ console.log(`${funcname} response`, { "Error": err, "inputs": req }, funcname)
704
+ reject(err)
705
+ }
706
+ })
707
+ }
708
+
709
+ /**
710
+ * use to get quotes data of symbols.
711
+ * @param {Array} req - array of symbols.
712
+ * @returns {Promise} returns success message on resolve or error message and error code on failure
713
+ */
714
+ getQuotes = async (req) => {
715
+ var funcname = 'getQuotes'
716
+ // var logger = this.Logger
717
+ let AuthrizationToken = this.AccessToken
718
+ let vers = this.Version
719
+ return new Promise(async function (resolve, reject) {
720
+ try {
721
+ var url = Config.data_Api1 + Config["quotes"]
722
+ var symbolstring = ""
723
+ req.forEach(function (element) {
724
+ symbolstring = symbolstring + element + ','
725
+ })
726
+ symbolstring = symbolstring.slice(0, -1)//remove last ','
727
+ var data = { "symbols": symbolstring }
728
+ const urlParams = new URLSearchParams(data);
729
+ url = url + '?' + urlParams
730
+ await axios.get((url), {
731
+ headers: {
732
+ Authorization: AuthrizationToken,
733
+ // version: vers
734
+ }
735
+ })
736
+ .then(Response => {
737
+ console.log(`${funcname} response`, Response.data, funcname)
738
+ resolve(Response.data)
739
+ })
740
+ }
741
+ catch (e) {
742
+ var err = new errorHandler(e).getError()
743
+ console.log(`${funcname} response`, { "Error": err, "inputs": req }, funcname)
744
+ reject(err)
745
+ }
746
+ })
747
+ }
748
+
749
+ /**
750
+ * use to get market depth data of symbols.
751
+ * @param {Array} req - array of symbols.
752
+ * @returns {Promise} returns success message on resolve or error message and error code on failure
753
+ */
754
+ getMarketDepth = async (req) => {
755
+ var funcname = 'getQuotes'
756
+ // var logger = this.Logger
757
+ let AuthrizationToken = this.AccessToken
758
+ let vers = this.Version
759
+ return new Promise(async function (resolve, reject) {
760
+ try {
761
+ var url = Config.data_Api1 + Config["market_depth"]
762
+ var symbolstring = ""
763
+ req.symbol.forEach(function (element) {
764
+ symbolstring = symbolstring + element + ','
765
+ })
766
+ symbolstring = symbolstring.slice(0, -1)//remove last ','
767
+ var data = { "symbol": symbolstring, "ohlcv_flag": req.ohlcv_flag }
768
+ const urlParams = new URLSearchParams(data);
769
+ url = url + '?' + urlParams
770
+ await axios.get((url), {
771
+ headers: {
772
+ Authorization: AuthrizationToken,
773
+ // version: vers
774
+ }
775
+ })
776
+ .then(Response => {
777
+ console.log(`${funcname} response`, Response.data, funcname)
778
+ resolve(Response.data)
779
+ })
780
+ }
781
+ catch (e) {
782
+ var err = new errorHandler(e).getError()
783
+ console.log(`${funcname} response`, { "Error": err, "inputs": req }, funcname)
784
+ reject(err)
785
+ }
786
+ })
787
+ }
788
+ }
789
+
790
+ function generateUrl(url, queryObject) {
791
+ let finalUrl = url + "?"
792
+ for (let key in queryObject) {
793
+ finalUrl = finalUrl + key + "=" + queryObject[key] + "&"
794
+ }
795
+ return finalUrl.substring(0, finalUrl.length - 1);
796
+ }
797
+
798
+ async function getSHA256Hash(inputString) {
799
+ const encoder = new TextEncoder();
800
+ const data = encoder.encode(inputString);
801
+
802
+ // Generate the SHA-256 hash
803
+ const hashBuffer = await crypto.subtle.digest('SHA-256', data);
804
+
805
+ // Convert the buffer to a hex string
806
+ const hashArray = Array.from(new Uint8Array(hashBuffer));
807
+ const hashHex = hashArray.map(byte => byte.toString(16).padStart(2, '0')).join('');
808
+
809
+ return hashHex;
810
+ }
811
+ export {FyersApi}