api_connect_nodejs 2.0.2 → 2.0.4

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.
Files changed (39) hide show
  1. package/README.md +30 -30
  2. package/conf/settings.ini +19 -19
  3. package/enums/actionType.js +10 -10
  4. package/enums/assetType.js +25 -25
  5. package/enums/chartExchangeType.js +15 -15
  6. package/enums/chartType.js +13 -13
  7. package/enums/eodIntervalType.js +11 -11
  8. package/enums/exchangeType.js +14 -14
  9. package/enums/intradayIntervalType.js +14 -14
  10. package/enums/marketCapType.js +12 -12
  11. package/enums/orderType.js +21 -21
  12. package/enums/productType.js +24 -24
  13. package/enums/segementsType.js +13 -13
  14. package/enums/streamingConstants.js +11 -11
  15. package/enums/termsType.js +12 -12
  16. package/enums/validity.js +22 -22
  17. package/index.js +3 -3
  18. package/package.json +25 -25
  19. package/src/apiConnect.js +2342 -2430
  20. package/src/apiUtils.js +221 -129
  21. package/src/chart.js +258 -258
  22. package/src/config.js +316 -326
  23. package/src/feed/feed.js +139 -139
  24. package/src/feed/liveNewsFeed.js +112 -112
  25. package/src/feed/ordersFeed.js +124 -124
  26. package/src/feed/quotesFeed.js +121 -121
  27. package/src/http.js +197 -197
  28. package/src/iniparser.js +42 -42
  29. package/src/liveNews.js +362 -362
  30. package/src/logger.js +16 -16
  31. package/src/order.js +48 -48
  32. package/src/researchCalls.js +175 -175
  33. package/src/watchlist.js +378 -378
  34. package/validations/apiConnectValidator.js +521 -508
  35. package/validations/chartValidator.js +85 -85
  36. package/validations/feedStreamerValidator.js +68 -68
  37. package/validations/liveNewsValidator.js +60 -60
  38. package/validations/researchCallsValidator.js +86 -86
  39. package/validations/watchlistValidator.js +60 -60
@@ -1,508 +1,521 @@
1
- const Joi = require("joi");
2
- const enumExchangeType = require("../enums/exchangeType");
3
- const enumActionType = require("../enums/actionType");
4
- const enumValidity = require("../enums/validity");
5
- const enumOrderType = require("../enums/orderType");
6
- const enumProductType = require("../enums/productType");
7
-
8
- const exchangeTypeArray = Object.values(enumExchangeType);
9
- const actionTypeArray = Object.values(enumActionType);
10
- const validityArray = Object.values(enumValidity);
11
- const orderTypeArray = Object.values(enumOrderType);
12
- const productTypeArray = Object.values(enumProductType);
13
-
14
- validatePlaceTrade = (object) => {
15
- const placeTradeSchema = Joi.object({
16
- trdSym: Joi.string().required(),
17
- exc: Joi.string()
18
- .valid(...exchangeTypeArray)
19
- .required(),
20
- action: Joi.string()
21
- .valid(...actionTypeArray)
22
- .required(),
23
- dur: Joi.string()
24
- .valid(...validityArray)
25
- .required(),
26
- ordTyp: Joi.string()
27
- .valid(...orderTypeArray)
28
- .required(),
29
- qty: Joi.number().required(),
30
- sym: Joi.string().required(),
31
- lmPrc: Joi.number().required(),
32
- dscQty: Joi.string(),
33
- trgPrc: Joi.string(),
34
- prdCode: Joi.string().valid(...productTypeArray),
35
- }).options({ abortEarly: false });
36
-
37
- return placeTradeSchema.validate(object);
38
- };
39
-
40
- validateModifyTrade = (object) => {
41
- const modifyTradeSchema = Joi.object({
42
- trdSym: Joi.string().required(),
43
- exc: Joi.string()
44
- .valid(...exchangeTypeArray)
45
- .required(),
46
- action: Joi.string()
47
- .valid(...actionTypeArray)
48
- .required(),
49
- dur: Joi.string()
50
- .valid(...validityArray)
51
- .required(),
52
- ordTyp: Joi.string()
53
- .valid(...orderTypeArray)
54
- .required(),
55
- qty: Joi.number().required(),
56
- dscQty: Joi.string(),
57
- sym: Joi.string().required(),
58
- lmPrc: Joi.number().required(),
59
- trgPrc: Joi.string(),
60
- prdCode: Joi.string()
61
- .valid(...productTypeArray)
62
- .required(),
63
- nstOID: Joi.string().required(),
64
- }).options({ abortEarly: false });
65
-
66
- return modifyTradeSchema.validate(object);
67
- };
68
-
69
- validateCancelPlaceTrade = (object) => {
70
- const cancelPlaceTradeSchema = Joi.object({
71
- nstOID: Joi.string().required(),
72
- exc: Joi.string()
73
- .valid(...exchangeTypeArray)
74
- .required(),
75
- ordTyp: Joi.string()
76
- .valid(...orderTypeArray)
77
- .required(),
78
- prdCode: Joi.string()
79
- .valid(...productTypeArray)
80
- .required(),
81
- }).options({ abortEarly: false });
82
-
83
- return cancelPlaceTradeSchema.validate(object);
84
- };
85
-
86
- validatePlaceGtcGtdTrade = (object) => {
87
- const PlaceGtcGtdTradeSchema = Joi.object({
88
- trdSym: Joi.string().required(),
89
- exc: Joi.string()
90
- .valid(...exchangeTypeArray)
91
- .required(),
92
- action: Joi.string()
93
- .valid(...actionTypeArray)
94
- .required(),
95
- dur: Joi.string()
96
- .valid(...validityArray)
97
- .required(),
98
- ordTyp: Joi.string()
99
- .valid(...orderTypeArray)
100
- .required(),
101
- qty: Joi.number().required(),
102
- lmPrc: Joi.number().required(),
103
- prdCode: Joi.string()
104
- .valid(...productTypeArray)
105
- .required(),
106
- dtDays: Joi.string().required(),
107
- sym: Joi.string().required(),
108
- }).options({ abortEarly: false });
109
-
110
- return PlaceGtcGtdTradeSchema.validate(object);
111
- };
112
-
113
- validatePlaceCoverTrade = (object) => {
114
- const placeCoverTradeSchema = Joi.object({
115
- trdSym: Joi.string().required(),
116
- exc: Joi.string()
117
- .valid(...exchangeTypeArray)
118
- .required(),
119
- action: Joi.string()
120
- .valid(...actionTypeArray)
121
- .required(),
122
- dur: Joi.string()
123
- .valid(...validityArray)
124
- .required(),
125
- ordTyp: Joi.string()
126
- .valid(...orderTypeArray)
127
- .required(),
128
- qty: Joi.number().required(),
129
- dscQty: Joi.string(),
130
- sym: Joi.string().required(),
131
- lmPrc: Joi.number().required(),
132
- trgPrc: Joi.string(),
133
- prdCode: Joi.string().valid(...productTypeArray),
134
- }).options({ abortEarly: false });
135
-
136
- return placeCoverTradeSchema.validate(object);
137
- };
138
-
139
- validateModifyCoverTrade = (object) => {
140
- const modifyCovertrade = Joi.object({
141
- trdSym: Joi.string().required(),
142
- exc: Joi.string()
143
- .valid(...exchangeTypeArray)
144
- .required(),
145
- action: Joi.string()
146
- .valid(...actionTypeArray)
147
- .required(),
148
- dur: Joi.string()
149
- .valid(...validityArray)
150
- .required(),
151
- ordTyp: Joi.string()
152
- .valid(...orderTypeArray)
153
- .required(),
154
- qty: Joi.number().required(),
155
- sym: Joi.string().required(),
156
- dscQty: Joi.string(),
157
- lmPrc: Joi.number().required(),
158
- trgPrc: Joi.string(),
159
- prdCode: Joi.string().valid(...productTypeArray),
160
- nstOID: Joi.string().required(),
161
- }).options({ abortEarly: false });
162
-
163
- return modifyCovertrade.validate(object);
164
- };
165
-
166
- validateExitCoverTrade = (orderId) => {
167
- const object = {
168
- nstOID: orderId,
169
- };
170
- const exitCoverTradeSchema = Joi.object({
171
- nstOID: Joi.string().required(),
172
- }).options({ abortEarly: false });
173
-
174
- return exitCoverTradeSchema.validate(object);
175
- };
176
-
177
- validatePlaceAMOTrade = (object) => {
178
- const placeAMOTradeSchema = Joi.object({
179
- trdSym: Joi.string().required(),
180
- exc: Joi.string()
181
- .valid(...exchangeTypeArray)
182
- .required(),
183
- action: Joi.string()
184
- .valid(...actionTypeArray)
185
- .required(),
186
- dur: Joi.string()
187
- .valid(...validityArray)
188
- .required(),
189
- ordTyp: Joi.string()
190
- .valid(...orderTypeArray)
191
- .required(),
192
- qty: Joi.number().required(),
193
- dscQty: Joi.string(),
194
- sym: Joi.string().required(),
195
- lmPrc: Joi.number().required(),
196
- trgPrc: Joi.string(),
197
- prdCode: Joi.string().valid(...productTypeArray),
198
- }).options({ abortEarly: false });
199
-
200
- return placeAMOTradeSchema.validate(object);
201
- };
202
-
203
- validateModifyAMOTrade = (object) => {
204
- const modifyAMOTradeSchema = Joi.object({
205
- trdSym: Joi.string().required(),
206
- exc: Joi.string()
207
- .valid(...exchangeTypeArray)
208
- .required(),
209
- action: Joi.string()
210
- .valid(...actionTypeArray)
211
- .required(),
212
- dur: Joi.string()
213
- .valid(...validityArray)
214
- .required(),
215
- ordTyp: Joi.string()
216
- .valid(...orderTypeArray)
217
- .required(),
218
- qty: Joi.number().required(),
219
- dscQty: Joi.string(),
220
- lmPrc: Joi.number().required(),
221
- trgPrc: Joi.string(),
222
- prdCode: Joi.string().valid(...productTypeArray),
223
- nstOID: Joi.string().required(),
224
- sym: Joi.string().required(),
225
- }).options({ abortEarly: false });
226
-
227
- return modifyAMOTradeSchema.validate(object);
228
- };
229
-
230
- validateCancelAMOTrade = (object) => {
231
- const cancelAMOTradeSchema = Joi.object({
232
- nstOID: Joi.string().required(),
233
- exc: Joi.string()
234
- .valid(...exchangeTypeArray)
235
- .required(),
236
- ordTyp: Joi.string()
237
- .valid(...orderTypeArray)
238
- .required(),
239
- prdCode: Joi.string()
240
- .valid(...productTypeArray)
241
- .required(),
242
- }).options({ abortEarly: false });
243
-
244
- return cancelAMOTradeSchema.validate(object);
245
- };
246
-
247
- validateConvertPosition = (object) => {
248
- const ConvertPositionSchema = Joi.object({
249
- nstOID: Joi.string().required(),
250
- flID: Joi.string().required(),
251
- prdCodeCh: Joi.string().required(),
252
- prdCode: Joi.string()
253
- .valid(...productTypeArray)
254
- .required(),
255
- exc: Joi.string()
256
- .valid(...exchangeTypeArray)
257
- .required(),
258
- ordTyp: Joi.string()
259
- .valid(...orderTypeArray)
260
- .required(),
261
- }).options({ abortEarly: false });
262
-
263
- return ConvertPositionSchema.validate(object);
264
- };
265
-
266
- validatePlaceMF = (object) => {
267
- const placeMFSchema = Joi.object({
268
- token: Joi.string().required(),
269
- isin: Joi.string().required(),
270
- txnTyp: Joi.string().required(),
271
- clientCode: Joi.string().required(),
272
- qty: Joi.number().required(),
273
- amt: Joi.number().positive().required(),
274
- reInvFlg: Joi.string().required(),
275
- folioNo: Joi.any().when("txnTyp", {
276
- switch: [
277
- { is: "SIP", then: Joi.string().required() },
278
- { is: "XSIP", then: Joi.string().required() },
279
- ],
280
- otherwise: Joi.string().allow(''),
281
- }),
282
- schemeName: Joi.string().required(),
283
- strtDt: Joi.string().required(),
284
- endDt: Joi.string().required(),
285
- gfot: Joi.string().required(),
286
- schemePlan: Joi.string().required(),
287
- schemeCode: Joi.string().required(),
288
- sipFrq: Joi.string().required(),
289
- }).options({ abortEarly: false });
290
-
291
- return placeMFSchema.validate(object);
292
- };
293
-
294
- validateModifyMF = (object) => {
295
- const modifyMFSchema = Joi.object({
296
- token: Joi.string().required(),
297
- isin: Joi.string().required(),
298
- txnTyp: Joi.string().required(),
299
- clientCode: Joi.string().required(),
300
- qty: Joi.number().required(),
301
- amt: Joi.number().positive().required(),
302
- reInvFlg: Joi.string().required(),
303
- folioNo: Joi.any().when("txnTyp", {
304
- switch: [
305
- { is: "SIP", then: Joi.string().required() },
306
- { is: "XSIP", then: Joi.string().required() },
307
- ],
308
- otherwise: Joi.string().allow(''),
309
- }),
310
- schemeName: Joi.string().required(),
311
- strtDt: Joi.string().required(),
312
- endDt: Joi.string().required(),
313
- sipFrq: Joi.string().required(),
314
- gfot: Joi.string().required(),
315
- schemePlan: Joi.string().required(),
316
- schemeCode: Joi.string().required(),
317
- txnId: Joi.string().required(),
318
- }).options({ abortEarly: false });
319
-
320
- return modifyMFSchema.validate(object);
321
- };
322
-
323
- validateCancelMF = (object) => {
324
- const cancelMFSchema = Joi.object({
325
- token: Joi.string().required(),
326
- isin: Joi.string().required(),
327
- txnTyp: Joi.string().required(),
328
- clientCode: Joi.string().required(),
329
- qty: Joi.number().required(),
330
- amt: Joi.number().positive().required(),
331
- reInvFlg: Joi.string().required(),
332
- folioNo: Joi.any().when("txnTyp", {
333
- switch: [
334
- { is: "SIP", then: Joi.string().required() },
335
- { is: "XSIP", then: Joi.string().required() },
336
- ],
337
- otherwise: Joi.string().allow(''),
338
- }),
339
- schemeName: Joi.string().required(),
340
- strtDt: Joi.string().required(),
341
- endDt: Joi.string().required(),
342
- sipFrq: Joi.string().required(),
343
- gfot: Joi.string().required(),
344
- schemePlan: Joi.string().required(),
345
- schemeCode: Joi.string().required(),
346
- txnId: Joi.string().required(),
347
- }).options({ abortEarly: false });
348
-
349
- return cancelMFSchema.validate(object);
350
- };
351
-
352
- validatePlaceBracketTrade = (object) => {
353
- const PlaceBracketTradeSchema = Joi.object({
354
- exc: Joi.string()
355
- .valid(...exchangeTypeArray)
356
- .required(),
357
- sym: Joi.string().required(),
358
- trnsTyp: Joi.string().required(),
359
- qty: Joi.number().required(),
360
- dur: Joi.string().required(),
361
- dsQty: Joi.string().required(),
362
- prc: Joi.number().required(),
363
- slVal: Joi.string().required(),
364
- trlSl: Joi.string(),
365
- trlSlVal: Joi.string(),
366
- sqOffVal: Joi.string().required(),
367
- }).options({ abortEarly: false });
368
-
369
- return PlaceBracketTradeSchema.validate(object);
370
- };
371
-
372
- validateExitBracketTrade = (object) => {
373
- const exitBracketTradeSchema = Joi.object({
374
- nstOrdNo: Joi.string().required(),
375
- syomID: Joi.string().required(),
376
- sts: Joi.string().required(),
377
- }).options({ abortEarly: false });
378
-
379
- return exitBracketTradeSchema.validate(object);
380
- };
381
-
382
- validateOrderDetails = (orderId, exchange) => {
383
- const orderDetailsObj = {
384
- ordId: orderId,
385
- exc: exchange,
386
- };
387
- const orderDetailsSchema = Joi.object({
388
- ordId: Joi.string().required(),
389
- exc: Joi.string()
390
- .valid(...exchangeTypeArray)
391
- .required(),
392
- }).options({ abortEarly: false });
393
-
394
- return orderDetailsSchema.validate(orderDetailsObj);
395
- };
396
-
397
- validateOrderHistory = (startDate, endDate) => {
398
- const dateData = {
399
- start: startDate,
400
- end: endDate,
401
- };
402
- const orderHistorySchema = Joi.object({
403
- start: Joi.date().iso().required(),
404
- end: Joi.date().iso().min(Joi.ref("start")),
405
- }).options({ abortEarly: false });
406
-
407
- return orderHistorySchema.validate(dateData);
408
- };
409
-
410
- validatePlaceBasketTrade = (orderList) => {
411
- let orderListSchema = Joi.array()
412
- .items({
413
- exc: Joi.string().required(),
414
- trdSym: Joi.string().required(),
415
- action: Joi.string()
416
- .valid(...actionTypeArray)
417
- .required(),
418
- prdCode: Joi.string()
419
- .valid(...productTypeArray)
420
- .required(),
421
- ordTyp: Joi.string()
422
- .valid(...orderTypeArray)
423
- .required(),
424
- dur: Joi.string()
425
- .valid(...validityArray)
426
- .required(),
427
- price: Joi.string().required(),
428
- trgPrc: Joi.string().required(),
429
- qty: Joi.number().required(),
430
- dscQty: Joi.string().required(),
431
- GTDDate: Joi.string().required(),
432
- rmk: Joi.string().allow("").required(),
433
- sym: Joi.string().required(),
434
- })
435
- .options({ abortEarly: false });
436
-
437
- //const orderListArray = Joi.array().items(orderListSchema);
438
-
439
- return orderListSchema.validate(orderList);
440
- };
441
-
442
- validatePositionSquareOff = (orderList) => {
443
- let orderListSchema = Joi.object()
444
- .keys({
445
- trdSym: Joi.string().required(),
446
- exc: Joi.string().required(),
447
- action: Joi.string()
448
- .valid(...actionTypeArray)
449
- .required(),
450
- dur: Joi.string()
451
- .valid(...validityArray)
452
- .required(),
453
- ordTyp: Joi.string()
454
- .valid(...orderTypeArray)
455
- .required(),
456
- qty: Joi.string().required(),
457
- dscQty: Joi.string().required(),
458
- sym: Joi.string().required(),
459
- trgPrc: Joi.string().required(),
460
- price: Joi.string().required(),
461
- prdCode: Joi.string()
462
- .valid(...productTypeArray)
463
- .required(),
464
- rmk: Joi.string().required(),
465
- GTDDate: Joi.string().required(),
466
- })
467
- .options({ abortEarly: false });
468
-
469
- const orderListArray = Joi.array().items(orderListSchema);
470
-
471
- return Joi.validate(orderList, orderListArray);
472
- };
473
-
474
- validateMFOrderBook = (fromDate, toDate) => {
475
- const dateData = {
476
- fromDate: fromDate,
477
- toDate: toDate,
478
- };
479
- const mfOrderBookSchema = Joi.object({
480
- fromDate: Joi.date().iso().required(),
481
- toDate: Joi.date().iso().min(Joi.ref("fromDate")),
482
- }).options({ abortEarly: false });
483
-
484
- return mfOrderBookSchema.validate(dateData);
485
- };
486
-
487
- module.exports = {
488
- validatePlaceTrade,
489
- validateModifyTrade,
490
- validateCancelPlaceTrade,
491
- validatePlaceGtcGtdTrade,
492
- validatePlaceCoverTrade,
493
- validateModifyCoverTrade,
494
- validateExitCoverTrade,
495
- validatePlaceAMOTrade,
496
- validateModifyAMOTrade,
497
- validateCancelAMOTrade,
498
- validateConvertPosition,
499
- validatePlaceMF,
500
- validateModifyMF,
501
- validateCancelMF,
502
- validatePlaceBracketTrade,
503
- validateExitBracketTrade,
504
- validateOrderDetails,
505
- validateOrderHistory,
506
- validatePositionSquareOff,
507
- validateMFOrderBook,
508
- };
1
+ const Joi = require("joi");
2
+ const enumExchangeType = require("../enums/exchangeType");
3
+ const enumActionType = require("../enums/actionType");
4
+ const enumValidity = require("../enums/validity");
5
+ const enumOrderType = require("../enums/orderType");
6
+ const enumProductType = require("../enums/productType");
7
+
8
+ const exchangeTypeArray = Object.values(enumExchangeType);
9
+ const actionTypeArray = Object.values(enumActionType);
10
+ const validityArray = Object.values(enumValidity);
11
+ const orderTypeArray = Object.values(enumOrderType);
12
+ const productTypeArray = Object.values(enumProductType);
13
+
14
+ validatePlaceTrade = (object, prds) => {
15
+ // let prdName = [];
16
+ // if (prds.exc.includes(object.exc)) {
17
+ // prdName = prds.prd[object.exc];
18
+ // }
19
+ const placeTradeSchema = Joi.object({
20
+ trdSym: Joi.string().required(),
21
+ exc: Joi.string()
22
+ .valid(...prds.exc)
23
+ .required(),
24
+ action: Joi.string()
25
+ .valid(...actionTypeArray)
26
+ .required(),
27
+ dur: Joi.string()
28
+ .valid(...validityArray)
29
+ .required(),
30
+ ordTyp: Joi.string()
31
+ .valid(...orderTypeArray)
32
+ .required(),
33
+ qty: Joi.number().required(),
34
+ sym: Joi.string().required(),
35
+ lmPrc: Joi.string().required(),
36
+ dscQty: Joi.string(),
37
+ trgPrc: Joi.string(),
38
+ prdCode: Joi.string()
39
+ // .valid(...prdName)
40
+ .required(),
41
+ }).options({ abortEarly: false });
42
+ const re = placeTradeSchema.validate(object);
43
+ console.log({ re });
44
+ return placeTradeSchema.validate(object);
45
+ };
46
+
47
+ validateModifyTrade = (object, prds) => {
48
+ // let prdName = [];
49
+ // if (prds.exc.includes(object.exc)) {
50
+ // prdName = prds.prd[object.exc];
51
+ // }
52
+ const modifyTradeSchema = Joi.object({
53
+ trdSym: Joi.string().required(),
54
+ exc: Joi.string()
55
+ .valid(...prds.exc)
56
+ .required(),
57
+ action: Joi.string()
58
+ .valid(...actionTypeArray)
59
+ .required(),
60
+ dur: Joi.string()
61
+ .valid(...validityArray)
62
+ .required(),
63
+ ordTyp: Joi.string()
64
+ .valid(...orderTypeArray)
65
+ .required(),
66
+ qty: Joi.number().required(),
67
+ dscQty: Joi.string(),
68
+ sym: Joi.string().required(),
69
+ lmPrc: Joi.number().required(),
70
+ trgPrc: Joi.string(),
71
+ prdCode: Joi.string()
72
+ // .valid(...prdName)
73
+ .required(),
74
+ nstOID: Joi.string().required(),
75
+ }).options({ abortEarly: false });
76
+
77
+ return modifyTradeSchema.validate(object);
78
+ };
79
+
80
+ validateCancelPlaceTrade = (object, prds) => {
81
+ // let prdName = [];
82
+ // if (prds.exc.includes(object.exc)) {
83
+ // prdName = prds.prd[object.exc];
84
+ // }
85
+ const cancelPlaceTradeSchema = Joi.object({
86
+ nstOID: Joi.string().required(),
87
+ exc: Joi.string()
88
+ .valid(...prds.exc)
89
+ .required(),
90
+ ordTyp: Joi.string()
91
+ .valid(...orderTypeArray)
92
+ .required(),
93
+ prdCode: Joi.string()
94
+ // .valid(...prdName)
95
+ .required(),
96
+ }).options({ abortEarly: false });
97
+
98
+ return cancelPlaceTradeSchema.validate(object);
99
+ };
100
+
101
+ validatePlaceGtcGtdTrade = (object, prds) => {
102
+ // let prdName = [];
103
+ // if (prds.exc.includes(object.exc)) {
104
+ // prdName = prds.prd[object.exc];
105
+ // }
106
+ const PlaceGtcGtdTradeSchema = Joi.object({
107
+ trdSym: Joi.string().required(),
108
+ exc: Joi.string()
109
+ .valid(...prds.exc)
110
+ .required(),
111
+ action: Joi.string()
112
+ .valid(...actionTypeArray)
113
+ .required(),
114
+ dur: Joi.string()
115
+ .valid(...validityArray)
116
+ .required(),
117
+ ordTyp: Joi.string()
118
+ .valid(...orderTypeArray)
119
+ .required(),
120
+ qty: Joi.number().required(),
121
+ lmPrc: Joi.number().required(),
122
+ prdCode: Joi.string()
123
+ // .valid(...prdName)
124
+ .required(),
125
+ dtDays: Joi.string().required(),
126
+ sym: Joi.string().required(),
127
+ }).options({ abortEarly: false });
128
+
129
+ return PlaceGtcGtdTradeSchema.validate(object);
130
+ };
131
+ validatePlaceAMOTrade = (object, prds) => {
132
+ // let prdName = [];
133
+ // if (prds.exc.includes(object.exc)) {
134
+ // prdName = prds.prd[object.exc];
135
+ // }
136
+ const placeAMOTradeSchema = Joi.object({
137
+ trdSym: Joi.string().required(),
138
+ exc: Joi.string()
139
+ .valid(...prds.exc)
140
+ .required(),
141
+ action: Joi.string()
142
+ .valid(...actionTypeArray)
143
+ .required(),
144
+ dur: Joi.string()
145
+ .valid(...validityArray)
146
+ .required(),
147
+ ordTyp: Joi.string()
148
+ .valid(...orderTypeArray)
149
+ .required(),
150
+ qty: Joi.number().required(),
151
+ dscQty: Joi.string(),
152
+ sym: Joi.string().required(),
153
+ lmPrc: Joi.number().required(),
154
+ trgPrc: Joi.string(),
155
+ prdCode: Joi.string()
156
+ // .valid(...prdName)
157
+ .required(),
158
+ }).options({ abortEarly: false });
159
+
160
+ return placeAMOTradeSchema.validate(object);
161
+ };
162
+
163
+ validateModifyAMOTrade = (object, prds) => {
164
+ // let prdName = [];
165
+ // if (prds.exc.includes(object.exc)) {
166
+ // prdName = prds.prd[object.exc];
167
+ // }
168
+ const modifyAMOTradeSchema = Joi.object({
169
+ trdSym: Joi.string().required(),
170
+ exc: Joi.string()
171
+ .valid(...prds.exc)
172
+ .required(),
173
+ action: Joi.string()
174
+ .valid(...actionTypeArray)
175
+ .required(),
176
+ dur: Joi.string()
177
+ .valid(...validityArray)
178
+ .required(),
179
+ ordTyp: Joi.string()
180
+ .valid(...orderTypeArray)
181
+ .required(),
182
+ qty: Joi.number().required(),
183
+ dscQty: Joi.string(),
184
+ lmPrc: Joi.number().required(),
185
+ trgPrc: Joi.string(),
186
+ prdCode: Joi.string()
187
+ // .valid(...prdName)
188
+ .required(),
189
+ nstOID: Joi.string().required(),
190
+ sym: Joi.string().required(),
191
+ }).options({ abortEarly: false });
192
+
193
+ return modifyAMOTradeSchema.validate(object);
194
+ };
195
+
196
+ validateCancelAMOTrade = (object, prds) => {
197
+ // let prdName = [];
198
+ // if (prds.exc.includes(object.exc)) {
199
+ // prdName = prds.prd[object.exc];
200
+ // }
201
+ const cancelAMOTradeSchema = Joi.object({
202
+ nstOID: Joi.string().required(),
203
+ exc: Joi.string()
204
+ .valid(...prds.exc)
205
+ .required(),
206
+ ordTyp: Joi.string()
207
+ .valid(...orderTypeArray)
208
+ .required(),
209
+ prdCode: Joi.string()
210
+ // .valid(...prdName)
211
+ .required(),
212
+ }).options({ abortEarly: false });
213
+
214
+ return cancelAMOTradeSchema.validate(object);
215
+ };
216
+
217
+ validateConvertPositionCOMM = (object, prds) => {
218
+ // let prdName = [];
219
+ // if (prds.exc.includes(object.exc)) {
220
+ // prdName = prds.prd[object.exc];
221
+ // }
222
+ const ConvertPositionCOMMSchema = Joi.object({
223
+ sym: Joi.string().required(),
224
+ cnvTyp: Joi.string().valid("D", "C").required(),
225
+ qty: Joi.string().required(),
226
+ action: Joi.string().valid("B", "S").required(),
227
+ prdCode: Joi.string()
228
+ // .valid(...prdName)
229
+ .required(),
230
+ prdCodeCh: Joi.string()
231
+ // .valid(...prdName)
232
+ .required(),
233
+ ordSrc: Joi.string(),
234
+ exc: Joi.string()
235
+ .valid(...prds.exc)
236
+ .required(),
237
+ trdSym: Joi.string().required(),
238
+ }).options({ abortEarly: false });
239
+
240
+ return ConvertPositionCOMMSchema.validate(object);
241
+ };
242
+
243
+ validateConvertPositionEQ = (object, prds) => {
244
+ const ConvertPositionEQSchema = Joi.object({
245
+ nstOID: Joi.string().required(),
246
+ flID: Joi.string().required(),
247
+ prdCodeCh: Joi.string().required(),
248
+ prdCode: Joi.string().required(),
249
+ exc: Joi.string()
250
+ .valid(...prds.exc)
251
+ .required(),
252
+ ordTyp: Joi.string()
253
+ .valid(...orderTypeArray)
254
+ .required(),
255
+ }).options({ abortEarly: false });
256
+
257
+ return ConvertPositionEQSchema.validate(object);
258
+ };
259
+
260
+ validatePlaceMF = (object) => {
261
+ const placeMFSchema = Joi.object({
262
+ token: Joi.string().required(),
263
+ isin: Joi.string().required(),
264
+ txnTyp: Joi.string().required(),
265
+ clientCode: Joi.string().required(),
266
+ qty: Joi.number().required(),
267
+ amt: Joi.number().positive().required(),
268
+ reInvFlg: Joi.string().required(),
269
+ folioNo: Joi.any().when("txnTyp", {
270
+ switch: [
271
+ { is: "SIP", then: Joi.string().required() },
272
+ { is: "XSIP", then: Joi.string().required() },
273
+ ],
274
+ otherwise: Joi.string().allow(""),
275
+ }),
276
+ schemeName: Joi.string().required(),
277
+ strtDt: Joi.string().required(),
278
+ endDt: Joi.string().required(),
279
+ gfot: Joi.string().required(),
280
+ schemePlan: Joi.string().required(),
281
+ schemeCode: Joi.string().required(),
282
+ sipFrq: Joi.string().required(),
283
+ }).options({ abortEarly: false });
284
+
285
+ return placeMFSchema.validate(object);
286
+ };
287
+
288
+ validateModifyMF = (object) => {
289
+ const modifyMFSchema = Joi.object({
290
+ token: Joi.string().required(),
291
+ isin: Joi.string().required(),
292
+ txnTyp: Joi.string().required(),
293
+ clientCode: Joi.string().required(),
294
+ qty: Joi.number().required(),
295
+ amt: Joi.number().positive().required(),
296
+ reInvFlg: Joi.string().required(),
297
+ folioNo: Joi.any().when("txnTyp", {
298
+ switch: [
299
+ { is: "SIP", then: Joi.string().required() },
300
+ { is: "XSIP", then: Joi.string().required() },
301
+ ],
302
+ otherwise: Joi.string().allow(""),
303
+ }),
304
+ schemeName: Joi.string().required(),
305
+ strtDt: Joi.string().required(),
306
+ endDt: Joi.string().required(),
307
+ sipFrq: Joi.string().required(),
308
+ gfot: Joi.string().required(),
309
+ schemePlan: Joi.string().required(),
310
+ schemeCode: Joi.string().required(),
311
+ txnId: Joi.string().required(),
312
+ }).options({ abortEarly: false });
313
+
314
+ return modifyMFSchema.validate(object);
315
+ };
316
+
317
+ validateCancelMF = (object) => {
318
+ const cancelMFSchema = Joi.object({
319
+ token: Joi.string().required(),
320
+ isin: Joi.string().required(),
321
+ txnTyp: Joi.string().required(),
322
+ clientCode: Joi.string().required(),
323
+ qty: Joi.number().required(),
324
+ amt: Joi.number().positive().required(),
325
+ reInvFlg: Joi.string().required(),
326
+ folioNo: Joi.any().when("txnTyp", {
327
+ switch: [
328
+ { is: "SIP", then: Joi.string().required() },
329
+ { is: "XSIP", then: Joi.string().required() },
330
+ ],
331
+ otherwise: Joi.string().allow(""),
332
+ }),
333
+ schemeName: Joi.string().required(),
334
+ strtDt: Joi.string().required(),
335
+ endDt: Joi.string().required(),
336
+ sipFrq: Joi.string().required(),
337
+ gfot: Joi.string().required(),
338
+ schemePlan: Joi.string().required(),
339
+ schemeCode: Joi.string().required(),
340
+ txnId: Joi.string().required(),
341
+ }).options({ abortEarly: false });
342
+
343
+ return cancelMFSchema.validate(object);
344
+ };
345
+
346
+ validatePlaceBracketTrade = (object, prds) => {
347
+ const PlaceBracketTradeSchema = Joi.object({
348
+ exc: Joi.string()
349
+ .valid(...prds.exc)
350
+ .required(),
351
+ sym: Joi.string().required(),
352
+ trnsTyp: Joi.string().required(),
353
+ qty: Joi.number().required(),
354
+ dur: Joi.string().required(),
355
+ dsQty: Joi.string().required(),
356
+ prc: Joi.number().required(),
357
+ slVal: Joi.string().required(),
358
+ trlSl: Joi.string(),
359
+ trlSlVal: Joi.string(),
360
+ sqOffVal: Joi.string().required(),
361
+ }).options({ abortEarly: false });
362
+
363
+ return PlaceBracketTradeSchema.validate(object);
364
+ };
365
+
366
+ validateExitBracketTrade = (object) => {
367
+ const exitBracketTradeSchema = Joi.object({
368
+ nstOrdNo: Joi.string().required(),
369
+ syomID: Joi.string().required(),
370
+ sts: Joi.string().required(),
371
+ }).options({ abortEarly: false });
372
+
373
+ return exitBracketTradeSchema.validate(object);
374
+ };
375
+
376
+ validateOrderDetails = (orderId, exchange, prds) => {
377
+ const orderDetailsObj = {
378
+ ordId: orderId,
379
+ exc: exchange,
380
+ };
381
+ const orderDetailsSchema = Joi.object({
382
+ ordId: Joi.string().required(),
383
+ exc: Joi.string()
384
+ .valid(...prds.exc)
385
+ .required(),
386
+ }).options({ abortEarly: false });
387
+
388
+ return orderDetailsSchema.validate(orderDetailsObj);
389
+ };
390
+
391
+ validateOrderHistory = (startDate, endDate) => {
392
+ const dateData = {
393
+ start: startDate,
394
+ end: endDate,
395
+ };
396
+ const orderHistorySchema = Joi.object({
397
+ start: Joi.date().iso().required(),
398
+ end: Joi.date().iso().min(Joi.ref("start")),
399
+ }).options({ abortEarly: false });
400
+
401
+ return orderHistorySchema.validate(dateData);
402
+ };
403
+
404
+ validatePlaceBasketTrade = (orderList, prds) => {
405
+ return orderList.map((item) => {
406
+ // let prdName = [];
407
+ // if (prds.exc.includes(item.exc)) {
408
+ // prdName = prds.prd[item.exc];
409
+ // }
410
+ let orderListSchema = Joi.array()
411
+ .items({
412
+ exc: Joi.string()
413
+ .valid(...prds.exc)
414
+ .required(),
415
+ trdSym: Joi.string().required(),
416
+ action: Joi.string()
417
+ .valid(...actionTypeArray)
418
+ .required(),
419
+ prdCode: Joi.string()
420
+ // .valid(...prdName)
421
+ .required(),
422
+ ordTyp: Joi.string()
423
+ .valid(...orderTypeArray)
424
+ .required(),
425
+ dur: Joi.string()
426
+ .valid(...validityArray)
427
+ .required(),
428
+ price: Joi.string().required(),
429
+ trgPrc: Joi.string().required(),
430
+ qty: Joi.number().required(),
431
+ dscQty: Joi.string().required(),
432
+ GTDDate: Joi.string().required(),
433
+ rmk: Joi.string().allow("").required(),
434
+ sym: Joi.string().required(),
435
+ })
436
+ .options({ abortEarly: false });
437
+ return orderListSchema.validate(item);
438
+ });
439
+ };
440
+
441
+ validatePositionSquareOff = (orderList, prds) => {
442
+ return orderList.map((item) => {
443
+ // let prdName = [];
444
+ // if (prds.exc.includes(item.exc)) {
445
+ // prdName = prds.prd[item.exc];
446
+ // }
447
+ let orderListSchema = Joi.object()
448
+ .keys({
449
+ trdSym: Joi.string().required(),
450
+ exc: Joi.string()
451
+ .valid(...prds.exc)
452
+ .required(),
453
+ action: Joi.string()
454
+ .valid(...actionTypeArray)
455
+ .required(),
456
+ dur: Joi.string()
457
+ .valid(...validityArray)
458
+ .required(),
459
+ ordTyp: Joi.string()
460
+ .valid(...orderTypeArray)
461
+ .required(),
462
+ qty: Joi.string().required(),
463
+ dscQty: Joi.string().required(),
464
+ sym: Joi.string().required(),
465
+ trgPrc: Joi.string().required(),
466
+ price: Joi.string().required(),
467
+ prdCode: Joi.string()
468
+ // .valid(...prdName)
469
+ .required(),
470
+ rmk: Joi.string().required(),
471
+ GTDDate: Joi.string().required(),
472
+ })
473
+ .options({ abortEarly: false });
474
+ return orderListSchema.validate(item);
475
+ });
476
+ };
477
+
478
+ validateMFOrderBook = (fromDate, toDate) => {
479
+ const dateData = {
480
+ fromDate: fromDate,
481
+ toDate: toDate,
482
+ };
483
+ const mfOrderBookSchema = Joi.object({
484
+ fromDate: Joi.date().iso().required(),
485
+ toDate: Joi.date().iso().min(Joi.ref("fromDate")),
486
+ }).options({ abortEarly: false });
487
+
488
+ return mfOrderBookSchema.validate(dateData);
489
+ };
490
+
491
+ validateGetAMOStxatus = (exchange, prds) => {
492
+ const amoStxatusSchema = Joi.object({
493
+ exchange: Joi.string()
494
+ .valid(...prds.exc)
495
+ .required(),
496
+ }).options({ abortEarly: false });
497
+
498
+ return amoStxatusSchema.validate({ exchange: exchange });
499
+ };
500
+
501
+ module.exports = {
502
+ validatePlaceTrade,
503
+ validateModifyTrade,
504
+ validateCancelPlaceTrade,
505
+ validatePlaceGtcGtdTrade,
506
+ validatePlaceAMOTrade,
507
+ validateModifyAMOTrade,
508
+ validateCancelAMOTrade,
509
+ validateConvertPositionCOMM,
510
+ validateConvertPositionEQ,
511
+ validatePlaceMF,
512
+ validateModifyMF,
513
+ validateCancelMF,
514
+ validatePlaceBracketTrade,
515
+ validateExitBracketTrade,
516
+ validateOrderDetails,
517
+ validateOrderHistory,
518
+ validatePositionSquareOff,
519
+ validateMFOrderBook,
520
+ validateGetAMOStxatus,
521
+ };