api_connect_nodejs 2.0.13 → 2.0.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +30 -30
- package/conf/settings.ini +17 -20
- package/enums/actionType.js +10 -10
- package/enums/assetType.js +25 -25
- package/enums/chartExchangeType.js +16 -16
- package/enums/chartType.js +13 -13
- package/enums/eodIntervalType.js +11 -11
- package/enums/exchangeType.js +15 -15
- package/enums/intradayIntervalType.js +14 -14
- package/enums/marketCapType.js +12 -12
- package/enums/orderType.js +21 -21
- package/enums/productType.js +24 -24
- package/enums/segementsType.js +13 -13
- package/enums/segmentType.js +10 -10
- package/enums/streamingConstants.js +13 -13
- package/enums/termsType.js +12 -12
- package/enums/validity.js +22 -22
- package/index.js +3 -3
- package/package.json +25 -25
- package/src/apiConnect.js +2682 -2559
- package/src/apiUtils.js +221 -221
- package/src/chart.js +404 -404
- package/src/config.js +347 -342
- package/src/feed/depthFeed.js +136 -136
- package/src/feed/feed.js +170 -170
- package/src/feed/liveNewsFeed.js +112 -112
- package/src/feed/miniQuoteFeed.js +122 -121
- package/src/feed/ordersFeed.js +125 -124
- package/src/feed/quotesFeed.js +123 -122
- package/src/http.js +260 -197
- package/src/iniparser.js +45 -45
- package/src/liveNews.js +362 -362
- package/src/logger.js +16 -16
- package/src/order.js +48 -48
- package/src/quote.js +75 -75
- package/src/report.js +49 -49
- package/src/researchCalls.js +175 -175
- package/src/watchlist.js +378 -378
- package/validations/apiConnectValidator.js +701 -698
- package/validations/chartValidator.js +125 -125
- package/validations/feedStreamerValidator.js +162 -162
- package/validations/liveNewsValidator.js +60 -60
- package/validations/quoteValidator.js +19 -19
- package/validations/reportValidator.js +35 -35
- package/validations/researchCallsValidator.js +86 -86
- package/validations/watchlistValidator.js +60 -60
|
@@ -1,698 +1,701 @@
|
|
|
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()
|
|
34
|
-
.positive()
|
|
35
|
-
.required(),
|
|
36
|
-
sym: Joi.string().required(),
|
|
37
|
-
lmPrc: Joi.string()
|
|
38
|
-
.pattern(new RegExp("^\\d+(\\.\\d+)?"))
|
|
39
|
-
.required()
|
|
40
|
-
.error(new Error('Parameter Limit Price cannot be Negative or non-numeric')),
|
|
41
|
-
dscQty: Joi.string()
|
|
42
|
-
.pattern(new RegExp("^\\d+(\\.\\d+)?"))
|
|
43
|
-
.error(new Error('Parameter Disclosed Quantity cannot be Negative or non-numeric')),
|
|
44
|
-
trgPrc: Joi.string()
|
|
45
|
-
.pattern(new RegExp("^\\d+(\\.\\d+)?"))
|
|
46
|
-
.error(new Error('Parameter Trigger price cannot be Negative or non-numeric')),
|
|
47
|
-
prdCode: Joi.string()
|
|
48
|
-
// .valid(...prdName)
|
|
49
|
-
.required(),
|
|
50
|
-
}).options({ abortEarly: false });
|
|
51
|
-
const re = placeTradeSchema.validate(object);
|
|
52
|
-
console.log({ re });
|
|
53
|
-
return placeTradeSchema.validate(object);
|
|
54
|
-
};
|
|
55
|
-
|
|
56
|
-
validateModifyTrade = (object, prds) => {
|
|
57
|
-
// let prdName = [];
|
|
58
|
-
// if (prds.exc.includes(object.exc)) {
|
|
59
|
-
// prdName = prds.prd[object.exc];
|
|
60
|
-
// }
|
|
61
|
-
const modifyTradeSchema = Joi.object({
|
|
62
|
-
trdSym: Joi.string().required(),
|
|
63
|
-
exc: Joi.string()
|
|
64
|
-
.valid(...prds.exc)
|
|
65
|
-
.required(),
|
|
66
|
-
action: Joi.string()
|
|
67
|
-
.valid(...actionTypeArray)
|
|
68
|
-
.required(),
|
|
69
|
-
dur: Joi.string()
|
|
70
|
-
.valid(...validityArray)
|
|
71
|
-
.required(),
|
|
72
|
-
ordTyp: Joi.string()
|
|
73
|
-
.valid(...orderTypeArray)
|
|
74
|
-
.required(),
|
|
75
|
-
qty: Joi.number()
|
|
76
|
-
.positive()
|
|
77
|
-
.required(),
|
|
78
|
-
dscQty: Joi.string(),
|
|
79
|
-
sym: Joi.string().required(),
|
|
80
|
-
lmPrc: Joi.number()
|
|
81
|
-
.min(0)
|
|
82
|
-
.required(),
|
|
83
|
-
trgPrc: Joi.string()
|
|
84
|
-
.pattern(new RegExp("^\\d+(\\.\\d+)?"))
|
|
85
|
-
.error(new Error('Parameter trigger price cannot be Negative or non-numeric')),
|
|
86
|
-
prdCode: Joi.string()
|
|
87
|
-
// .valid(...prdName)
|
|
88
|
-
.required(),
|
|
89
|
-
nstOID: Joi.string().required(),
|
|
90
|
-
curQty: Joi.string()
|
|
91
|
-
.pattern(new RegExp("^\\d+(\\.\\d+)?"))
|
|
92
|
-
.required()
|
|
93
|
-
.error(new Error('Parameter Current Quantity cannot be Negative or non-numeric')),
|
|
94
|
-
}).options({ abortEarly: false });
|
|
95
|
-
|
|
96
|
-
const re = modifyTradeSchema.validate(object);
|
|
97
|
-
console.log(re);
|
|
98
|
-
return modifyTradeSchema.validate(object);
|
|
99
|
-
};
|
|
100
|
-
|
|
101
|
-
validateCancelPlaceTrade = (object, prds) => {
|
|
102
|
-
// let prdName = [];
|
|
103
|
-
// if (prds.exc.includes(object.exc)) {
|
|
104
|
-
// prdName = prds.prd[object.exc];
|
|
105
|
-
// }
|
|
106
|
-
const cancelPlaceTradeSchema = Joi.object({
|
|
107
|
-
nstOID: Joi.string().required(),
|
|
108
|
-
exc: Joi.string()
|
|
109
|
-
.valid(...prds.exc)
|
|
110
|
-
.required(),
|
|
111
|
-
ordTyp: Joi.string()
|
|
112
|
-
.valid(...orderTypeArray)
|
|
113
|
-
.required(),
|
|
114
|
-
prdCode: Joi.string()
|
|
115
|
-
// .valid(...prdName)
|
|
116
|
-
.required(),
|
|
117
|
-
curQty: Joi.string()
|
|
118
|
-
.pattern(new RegExp("^\\d+(\\.\\d+)?"))
|
|
119
|
-
.error(new Error('Parameter Current Quantity cannot be Negative or non-numeric'))
|
|
120
|
-
}).options({ abortEarly: false });
|
|
121
|
-
|
|
122
|
-
const re = cancelPlaceTradeSchema.validate(object);
|
|
123
|
-
console.log(re);
|
|
124
|
-
return cancelPlaceTradeSchema.validate(object);
|
|
125
|
-
};
|
|
126
|
-
|
|
127
|
-
validateCancelPlaceTradeV1 = (object, prds) => {
|
|
128
|
-
// let prdName = [];
|
|
129
|
-
// if (prds.exc.includes(object.exc)) {
|
|
130
|
-
// prdName = prds.prd[object.exc];
|
|
131
|
-
// }
|
|
132
|
-
|
|
133
|
-
const cancelPlaceTradeSchema = Joi.object({
|
|
134
|
-
nstOID: Joi.string().required(),
|
|
135
|
-
exc: Joi.string()
|
|
136
|
-
.valid(...prds.exc)
|
|
137
|
-
.required(),
|
|
138
|
-
ordTyp: Joi.string()
|
|
139
|
-
.valid(...orderTypeArray)
|
|
140
|
-
.required(),
|
|
141
|
-
prdCode: Joi.string()
|
|
142
|
-
// .valid(...prdName)
|
|
143
|
-
.required(),
|
|
144
|
-
curQty: Joi.string().required()
|
|
145
|
-
.pattern(new RegExp("^\\d+(\\.\\d+)?"))
|
|
146
|
-
.error(new Error('Parameter Current Quantity cannot be Negative or non-numeric')),
|
|
147
|
-
flQty: Joi.string().required()
|
|
148
|
-
.pattern(new RegExp("^\\d+(\\.\\d+)?"))
|
|
149
|
-
.error(new Error('Parameter Fill Quantity cannot be Negative or non-numeric')),
|
|
150
|
-
trdSym: Joi.string().required(),
|
|
151
|
-
action: Joi.string()
|
|
152
|
-
.valid(...actionTypeArray)
|
|
153
|
-
.required(),
|
|
154
|
-
sym: Joi.string().required(),
|
|
155
|
-
}).options({ abortEarly: false });
|
|
156
|
-
|
|
157
|
-
const re = cancelPlaceTradeSchema.validate(object);
|
|
158
|
-
console.log(re);
|
|
159
|
-
return cancelPlaceTradeSchema.validate(object);
|
|
160
|
-
};
|
|
161
|
-
|
|
162
|
-
validatePlaceGtcGtdTrade = (object, prds) => {
|
|
163
|
-
// let prdName = [];
|
|
164
|
-
// if (prds.exc.includes(object.exc)) {
|
|
165
|
-
// prdName = prds.prd[object.exc];
|
|
166
|
-
// }
|
|
167
|
-
const PlaceGtcGtdTradeSchema = Joi.object({
|
|
168
|
-
trdSym: Joi.string().required(),
|
|
169
|
-
exc: Joi.string()
|
|
170
|
-
.valid(...prds.exc)
|
|
171
|
-
.required(),
|
|
172
|
-
action: Joi.string()
|
|
173
|
-
.valid(...actionTypeArray)
|
|
174
|
-
.required(),
|
|
175
|
-
dur: Joi.string()
|
|
176
|
-
.valid(...validityArray)
|
|
177
|
-
.required(),
|
|
178
|
-
ordTyp: Joi.string()
|
|
179
|
-
.valid(...orderTypeArray)
|
|
180
|
-
.required(),
|
|
181
|
-
qty: Joi.number()
|
|
182
|
-
.positive()
|
|
183
|
-
.required(),
|
|
184
|
-
lmPrc: Joi.number()
|
|
185
|
-
.min(0)
|
|
186
|
-
.required(),
|
|
187
|
-
prdCode: Joi.string()
|
|
188
|
-
// .valid(...prdName)
|
|
189
|
-
.required(),
|
|
190
|
-
dtDays: Joi.string().required(),
|
|
191
|
-
sym: Joi.string().required(),
|
|
192
|
-
}).options({ abortEarly: false });
|
|
193
|
-
|
|
194
|
-
const re = PlaceGtcGtdTradeSchema.validate(object);
|
|
195
|
-
console.log(re);
|
|
196
|
-
return PlaceGtcGtdTradeSchema.validate(object);
|
|
197
|
-
};
|
|
198
|
-
validatePlaceAMOTrade = (object, prds) => {
|
|
199
|
-
// let prdName = [];
|
|
200
|
-
// if (prds.exc.includes(object.exc)) {
|
|
201
|
-
// prdName = prds.prd[object.exc];
|
|
202
|
-
// }
|
|
203
|
-
const placeAMOTradeSchema = Joi.object({
|
|
204
|
-
trdSym: Joi.string().required(),
|
|
205
|
-
exc: Joi.string()
|
|
206
|
-
.valid(...prds.exc)
|
|
207
|
-
.required(),
|
|
208
|
-
action: Joi.string()
|
|
209
|
-
.valid(...actionTypeArray)
|
|
210
|
-
.required(),
|
|
211
|
-
dur: Joi.string()
|
|
212
|
-
.valid(...validityArray)
|
|
213
|
-
.required(),
|
|
214
|
-
ordTyp: Joi.string()
|
|
215
|
-
.valid(...orderTypeArray)
|
|
216
|
-
.required(),
|
|
217
|
-
qty: Joi.number()
|
|
218
|
-
.positive()
|
|
219
|
-
.required(),
|
|
220
|
-
dscQty: Joi.string(),
|
|
221
|
-
sym: Joi.string().required(),
|
|
222
|
-
lmPrc: Joi.number()
|
|
223
|
-
.min(0)
|
|
224
|
-
.required(),
|
|
225
|
-
trgPrc: Joi.string()
|
|
226
|
-
.pattern(new RegExp("^\\d+(\\.\\d+)?"))
|
|
227
|
-
.error(new Error('Parameter trigger price cannot be Negative or non-numeric')),
|
|
228
|
-
prdCode: Joi.string()
|
|
229
|
-
// .valid(...prdName)
|
|
230
|
-
.required(),
|
|
231
|
-
}).options({ abortEarly: false });
|
|
232
|
-
|
|
233
|
-
const re = placeAMOTradeSchema.validate(object);
|
|
234
|
-
console.log(re);
|
|
235
|
-
return placeAMOTradeSchema.validate(object);
|
|
236
|
-
};
|
|
237
|
-
|
|
238
|
-
validateModifyAMOTrade = (object, prds) => {
|
|
239
|
-
// let prdName = [];
|
|
240
|
-
// if (prds.exc.includes(object.exc)) {
|
|
241
|
-
// prdName = prds.prd[object.exc];
|
|
242
|
-
// }
|
|
243
|
-
const modifyAMOTradeSchema = Joi.object({
|
|
244
|
-
trdSym: Joi.string().required(),
|
|
245
|
-
exc: Joi.string()
|
|
246
|
-
.valid(...prds.exc)
|
|
247
|
-
.required(),
|
|
248
|
-
action: Joi.string()
|
|
249
|
-
.valid(...actionTypeArray)
|
|
250
|
-
.required(),
|
|
251
|
-
dur: Joi.string()
|
|
252
|
-
.valid(...validityArray)
|
|
253
|
-
.required(),
|
|
254
|
-
ordTyp: Joi.string()
|
|
255
|
-
.valid(...orderTypeArray)
|
|
256
|
-
.required(),
|
|
257
|
-
qty: Joi.number()
|
|
258
|
-
.positive()
|
|
259
|
-
.required(),
|
|
260
|
-
dscQty: Joi.string()
|
|
261
|
-
.pattern(new RegExp("^\\d+(\\.\\d+)?"))
|
|
262
|
-
.error(new Error('Parameter Disclosed Quantity cannot be Negative or non-numeric')),
|
|
263
|
-
lmPrc: Joi.number()
|
|
264
|
-
|
|
265
|
-
.
|
|
266
|
-
.
|
|
267
|
-
|
|
268
|
-
.
|
|
269
|
-
.
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
.
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
.
|
|
277
|
-
.
|
|
278
|
-
.
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
//
|
|
289
|
-
//
|
|
290
|
-
//
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
.
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
.
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
.
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
.
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
//
|
|
315
|
-
//
|
|
316
|
-
//
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
.
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
.
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
.
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
//
|
|
345
|
-
//
|
|
346
|
-
//
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
.
|
|
352
|
-
.
|
|
353
|
-
.
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
.
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
.
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
.
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
.
|
|
381
|
-
.
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
.
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
.
|
|
398
|
-
.
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
{ is: "
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
.
|
|
428
|
-
.
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
{ is: "
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
{ is: "
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
.
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
.
|
|
489
|
-
.
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
.
|
|
493
|
-
.
|
|
494
|
-
.
|
|
495
|
-
|
|
496
|
-
.
|
|
497
|
-
.
|
|
498
|
-
|
|
499
|
-
.
|
|
500
|
-
.
|
|
501
|
-
.
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
.
|
|
505
|
-
.
|
|
506
|
-
|
|
507
|
-
.
|
|
508
|
-
.
|
|
509
|
-
.
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
.
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
};
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
//
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
.
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
.required(),
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
.required(),
|
|
576
|
-
|
|
577
|
-
.valid(...
|
|
578
|
-
.required(),
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
.
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
.
|
|
586
|
-
.required(),
|
|
587
|
-
|
|
588
|
-
.
|
|
589
|
-
.required()
|
|
590
|
-
.
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
//
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
.valid(...
|
|
617
|
-
.required(),
|
|
618
|
-
|
|
619
|
-
.valid(...
|
|
620
|
-
.required(),
|
|
621
|
-
|
|
622
|
-
.valid(...
|
|
623
|
-
.required(),
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
.
|
|
628
|
-
|
|
629
|
-
.
|
|
630
|
-
.
|
|
631
|
-
.
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
.
|
|
635
|
-
.required()
|
|
636
|
-
.
|
|
637
|
-
|
|
638
|
-
.
|
|
639
|
-
.
|
|
640
|
-
.
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
};
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
};
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
|
|
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()
|
|
34
|
+
.positive()
|
|
35
|
+
.required(),
|
|
36
|
+
sym: Joi.string().required(),
|
|
37
|
+
lmPrc: Joi.string()
|
|
38
|
+
.pattern(new RegExp("^\\d+(\\.\\d+)?"))
|
|
39
|
+
.required()
|
|
40
|
+
.error(new Error('Parameter Limit Price cannot be Negative or non-numeric')),
|
|
41
|
+
dscQty: Joi.string()
|
|
42
|
+
.pattern(new RegExp("^\\d+(\\.\\d+)?"))
|
|
43
|
+
.error(new Error('Parameter Disclosed Quantity cannot be Negative or non-numeric')),
|
|
44
|
+
trgPrc: Joi.string()
|
|
45
|
+
.pattern(new RegExp("^\\d+(\\.\\d+)?"))
|
|
46
|
+
.error(new Error('Parameter Trigger price cannot be Negative or non-numeric')),
|
|
47
|
+
prdCode: Joi.string()
|
|
48
|
+
// .valid(...prdName)
|
|
49
|
+
.required(),
|
|
50
|
+
}).options({ abortEarly: false });
|
|
51
|
+
const re = placeTradeSchema.validate(object);
|
|
52
|
+
console.log({ re });
|
|
53
|
+
return placeTradeSchema.validate(object);
|
|
54
|
+
};
|
|
55
|
+
|
|
56
|
+
validateModifyTrade = (object, prds) => {
|
|
57
|
+
// let prdName = [];
|
|
58
|
+
// if (prds.exc.includes(object.exc)) {
|
|
59
|
+
// prdName = prds.prd[object.exc];
|
|
60
|
+
// }
|
|
61
|
+
const modifyTradeSchema = Joi.object({
|
|
62
|
+
trdSym: Joi.string().required(),
|
|
63
|
+
exc: Joi.string()
|
|
64
|
+
.valid(...prds.exc)
|
|
65
|
+
.required(),
|
|
66
|
+
action: Joi.string()
|
|
67
|
+
.valid(...actionTypeArray)
|
|
68
|
+
.required(),
|
|
69
|
+
dur: Joi.string()
|
|
70
|
+
.valid(...validityArray)
|
|
71
|
+
.required(),
|
|
72
|
+
ordTyp: Joi.string()
|
|
73
|
+
.valid(...orderTypeArray)
|
|
74
|
+
.required(),
|
|
75
|
+
qty: Joi.number()
|
|
76
|
+
.positive()
|
|
77
|
+
.required(),
|
|
78
|
+
dscQty: Joi.string(),
|
|
79
|
+
sym: Joi.string().required(),
|
|
80
|
+
lmPrc: Joi.number()
|
|
81
|
+
.min(0)
|
|
82
|
+
.required(),
|
|
83
|
+
trgPrc: Joi.string()
|
|
84
|
+
.pattern(new RegExp("^\\d+(\\.\\d+)?"))
|
|
85
|
+
.error(new Error('Parameter trigger price cannot be Negative or non-numeric')),
|
|
86
|
+
prdCode: Joi.string()
|
|
87
|
+
// .valid(...prdName)
|
|
88
|
+
.required(),
|
|
89
|
+
nstOID: Joi.string().required(),
|
|
90
|
+
curQty: Joi.string()
|
|
91
|
+
.pattern(new RegExp("^\\d+(\\.\\d+)?"))
|
|
92
|
+
.required()
|
|
93
|
+
.error(new Error('Parameter Current Quantity cannot be Negative or non-numeric')),
|
|
94
|
+
}).options({ abortEarly: false });
|
|
95
|
+
|
|
96
|
+
const re = modifyTradeSchema.validate(object);
|
|
97
|
+
console.log(re);
|
|
98
|
+
return modifyTradeSchema.validate(object);
|
|
99
|
+
};
|
|
100
|
+
|
|
101
|
+
validateCancelPlaceTrade = (object, prds) => {
|
|
102
|
+
// let prdName = [];
|
|
103
|
+
// if (prds.exc.includes(object.exc)) {
|
|
104
|
+
// prdName = prds.prd[object.exc];
|
|
105
|
+
// }
|
|
106
|
+
const cancelPlaceTradeSchema = Joi.object({
|
|
107
|
+
nstOID: Joi.string().required(),
|
|
108
|
+
exc: Joi.string()
|
|
109
|
+
.valid(...prds.exc)
|
|
110
|
+
.required(),
|
|
111
|
+
ordTyp: Joi.string()
|
|
112
|
+
.valid(...orderTypeArray)
|
|
113
|
+
.required(),
|
|
114
|
+
prdCode: Joi.string()
|
|
115
|
+
// .valid(...prdName)
|
|
116
|
+
.required(),
|
|
117
|
+
curQty: Joi.string()
|
|
118
|
+
.pattern(new RegExp("^\\d+(\\.\\d+)?"))
|
|
119
|
+
.error(new Error('Parameter Current Quantity cannot be Negative or non-numeric'))
|
|
120
|
+
}).options({ abortEarly: false });
|
|
121
|
+
|
|
122
|
+
const re = cancelPlaceTradeSchema.validate(object);
|
|
123
|
+
console.log(re);
|
|
124
|
+
return cancelPlaceTradeSchema.validate(object);
|
|
125
|
+
};
|
|
126
|
+
|
|
127
|
+
validateCancelPlaceTradeV1 = (object, prds) => {
|
|
128
|
+
// let prdName = [];
|
|
129
|
+
// if (prds.exc.includes(object.exc)) {
|
|
130
|
+
// prdName = prds.prd[object.exc];
|
|
131
|
+
// }
|
|
132
|
+
|
|
133
|
+
const cancelPlaceTradeSchema = Joi.object({
|
|
134
|
+
nstOID: Joi.string().required(),
|
|
135
|
+
exc: Joi.string()
|
|
136
|
+
.valid(...prds.exc)
|
|
137
|
+
.required(),
|
|
138
|
+
ordTyp: Joi.string()
|
|
139
|
+
.valid(...orderTypeArray)
|
|
140
|
+
.required(),
|
|
141
|
+
prdCode: Joi.string()
|
|
142
|
+
// .valid(...prdName)
|
|
143
|
+
.required(),
|
|
144
|
+
curQty: Joi.string().required()
|
|
145
|
+
.pattern(new RegExp("^\\d+(\\.\\d+)?"))
|
|
146
|
+
.error(new Error('Parameter Current Quantity cannot be Negative or non-numeric')),
|
|
147
|
+
flQty: Joi.string().required()
|
|
148
|
+
.pattern(new RegExp("^\\d+(\\.\\d+)?"))
|
|
149
|
+
.error(new Error('Parameter Fill Quantity cannot be Negative or non-numeric')),
|
|
150
|
+
trdSym: Joi.string().required(),
|
|
151
|
+
action: Joi.string()
|
|
152
|
+
.valid(...actionTypeArray)
|
|
153
|
+
.required(),
|
|
154
|
+
sym: Joi.string().required(),
|
|
155
|
+
}).options({ abortEarly: false });
|
|
156
|
+
|
|
157
|
+
const re = cancelPlaceTradeSchema.validate(object);
|
|
158
|
+
console.log(re);
|
|
159
|
+
return cancelPlaceTradeSchema.validate(object);
|
|
160
|
+
};
|
|
161
|
+
|
|
162
|
+
validatePlaceGtcGtdTrade = (object, prds) => {
|
|
163
|
+
// let prdName = [];
|
|
164
|
+
// if (prds.exc.includes(object.exc)) {
|
|
165
|
+
// prdName = prds.prd[object.exc];
|
|
166
|
+
// }
|
|
167
|
+
const PlaceGtcGtdTradeSchema = Joi.object({
|
|
168
|
+
trdSym: Joi.string().required(),
|
|
169
|
+
exc: Joi.string()
|
|
170
|
+
.valid(...prds.exc)
|
|
171
|
+
.required(),
|
|
172
|
+
action: Joi.string()
|
|
173
|
+
.valid(...actionTypeArray)
|
|
174
|
+
.required(),
|
|
175
|
+
dur: Joi.string()
|
|
176
|
+
.valid(...validityArray)
|
|
177
|
+
.required(),
|
|
178
|
+
ordTyp: Joi.string()
|
|
179
|
+
.valid(...orderTypeArray)
|
|
180
|
+
.required(),
|
|
181
|
+
qty: Joi.number()
|
|
182
|
+
.positive()
|
|
183
|
+
.required(),
|
|
184
|
+
lmPrc: Joi.number()
|
|
185
|
+
.min(0)
|
|
186
|
+
.required(),
|
|
187
|
+
prdCode: Joi.string()
|
|
188
|
+
// .valid(...prdName)
|
|
189
|
+
.required(),
|
|
190
|
+
dtDays: Joi.string().required(),
|
|
191
|
+
sym: Joi.string().required(),
|
|
192
|
+
}).options({ abortEarly: false });
|
|
193
|
+
|
|
194
|
+
const re = PlaceGtcGtdTradeSchema.validate(object);
|
|
195
|
+
console.log(re);
|
|
196
|
+
return PlaceGtcGtdTradeSchema.validate(object);
|
|
197
|
+
};
|
|
198
|
+
validatePlaceAMOTrade = (object, prds) => {
|
|
199
|
+
// let prdName = [];
|
|
200
|
+
// if (prds.exc.includes(object.exc)) {
|
|
201
|
+
// prdName = prds.prd[object.exc];
|
|
202
|
+
// }
|
|
203
|
+
const placeAMOTradeSchema = Joi.object({
|
|
204
|
+
trdSym: Joi.string().required(),
|
|
205
|
+
exc: Joi.string()
|
|
206
|
+
.valid(...prds.exc)
|
|
207
|
+
.required(),
|
|
208
|
+
action: Joi.string()
|
|
209
|
+
.valid(...actionTypeArray)
|
|
210
|
+
.required(),
|
|
211
|
+
dur: Joi.string()
|
|
212
|
+
.valid(...validityArray)
|
|
213
|
+
.required(),
|
|
214
|
+
ordTyp: Joi.string()
|
|
215
|
+
.valid(...orderTypeArray)
|
|
216
|
+
.required(),
|
|
217
|
+
qty: Joi.number()
|
|
218
|
+
.positive()
|
|
219
|
+
.required(),
|
|
220
|
+
dscQty: Joi.string(),
|
|
221
|
+
sym: Joi.string().required(),
|
|
222
|
+
lmPrc: Joi.number()
|
|
223
|
+
.min(0)
|
|
224
|
+
.required(),
|
|
225
|
+
trgPrc: Joi.string()
|
|
226
|
+
.pattern(new RegExp("^\\d+(\\.\\d+)?"))
|
|
227
|
+
.error(new Error('Parameter trigger price cannot be Negative or non-numeric')),
|
|
228
|
+
prdCode: Joi.string()
|
|
229
|
+
// .valid(...prdName)
|
|
230
|
+
.required(),
|
|
231
|
+
}).options({ abortEarly: false });
|
|
232
|
+
|
|
233
|
+
const re = placeAMOTradeSchema.validate(object);
|
|
234
|
+
console.log(re);
|
|
235
|
+
return placeAMOTradeSchema.validate(object);
|
|
236
|
+
};
|
|
237
|
+
|
|
238
|
+
validateModifyAMOTrade = (object, prds) => {
|
|
239
|
+
// let prdName = [];
|
|
240
|
+
// if (prds.exc.includes(object.exc)) {
|
|
241
|
+
// prdName = prds.prd[object.exc];
|
|
242
|
+
// }
|
|
243
|
+
const modifyAMOTradeSchema = Joi.object({
|
|
244
|
+
trdSym: Joi.string().required(),
|
|
245
|
+
exc: Joi.string()
|
|
246
|
+
.valid(...prds.exc)
|
|
247
|
+
.required(),
|
|
248
|
+
action: Joi.string()
|
|
249
|
+
.valid(...actionTypeArray)
|
|
250
|
+
.required(),
|
|
251
|
+
dur: Joi.string()
|
|
252
|
+
.valid(...validityArray)
|
|
253
|
+
.required(),
|
|
254
|
+
ordTyp: Joi.string()
|
|
255
|
+
.valid(...orderTypeArray)
|
|
256
|
+
.required(),
|
|
257
|
+
qty: Joi.number()
|
|
258
|
+
.positive()
|
|
259
|
+
.required(),
|
|
260
|
+
dscQty: Joi.string()
|
|
261
|
+
.pattern(new RegExp("^\\d+(\\.\\d+)?"))
|
|
262
|
+
.error(new Error('Parameter Disclosed Quantity cannot be Negative or non-numeric')),
|
|
263
|
+
lmPrc: Joi.number()
|
|
264
|
+
//.pattern(new RegExp("^\\d+(\\.\\d+)?"))
|
|
265
|
+
.positive()
|
|
266
|
+
.required()
|
|
267
|
+
.error(new Error('Parameter limit price cannot be Negative or non-numeric')),
|
|
268
|
+
trgPrc: Joi.string()
|
|
269
|
+
.pattern(new RegExp("^\\d+(\\.\\d+)?"))
|
|
270
|
+
.error(new Error('Parameter trigger price cannot be Negative or non-numeric')),
|
|
271
|
+
prdCode: Joi.string()
|
|
272
|
+
// .valid(...prdName)
|
|
273
|
+
.required(),
|
|
274
|
+
nstOID: Joi.string().required(),
|
|
275
|
+
sym: Joi.string().required(),
|
|
276
|
+
curQty: Joi.string()
|
|
277
|
+
.pattern(new RegExp("^\\d+(\\.\\d+)?"))
|
|
278
|
+
.required()
|
|
279
|
+
.error(new Error('Parameter Current Quantity cannot be Negative or non-numeric')),
|
|
280
|
+
}).options({ abortEarly: false });
|
|
281
|
+
|
|
282
|
+
const re = modifyAMOTradeSchema.validate(object);
|
|
283
|
+
console.log(re);
|
|
284
|
+
return modifyAMOTradeSchema.validate(object);
|
|
285
|
+
};
|
|
286
|
+
|
|
287
|
+
validateCancelAMOTrade = (object, prds) => {
|
|
288
|
+
// let prdName = [];
|
|
289
|
+
// if (prds.exc.includes(object.exc)) {
|
|
290
|
+
// prdName = prds.prd[object.exc];
|
|
291
|
+
// }
|
|
292
|
+
const cancelAMOTradeSchema = Joi.object({
|
|
293
|
+
nstOID: Joi.string().required(),
|
|
294
|
+
exc: Joi.string()
|
|
295
|
+
.valid(...prds.exc)
|
|
296
|
+
.required(),
|
|
297
|
+
ordTyp: Joi.string()
|
|
298
|
+
.valid(...orderTypeArray)
|
|
299
|
+
.required(),
|
|
300
|
+
prdCode: Joi.string()
|
|
301
|
+
// .valid(...prdName)
|
|
302
|
+
.required(),
|
|
303
|
+
curQty: Joi.string()
|
|
304
|
+
.pattern(new RegExp("^\\d+(\\.\\d+)?"))
|
|
305
|
+
.error(new Error('Parameter Current Quantity cannot be Negative or non-numeric')),
|
|
306
|
+
}).options({ abortEarly: false });
|
|
307
|
+
|
|
308
|
+
const re = cancelAMOTradeSchema.validate(object);
|
|
309
|
+
console.log(re);
|
|
310
|
+
return cancelAMOTradeSchema.validate(object);
|
|
311
|
+
};
|
|
312
|
+
|
|
313
|
+
validateCancelAMOTradeV1 = (object, prds) => {
|
|
314
|
+
// let prdName = [];
|
|
315
|
+
// if (prds.exc.includes(object.exc)) {
|
|
316
|
+
// prdName = prds.prd[object.exc];
|
|
317
|
+
// }
|
|
318
|
+
const cancelAMOTradeSchema = Joi.object({
|
|
319
|
+
nstOID: Joi.string().required(),
|
|
320
|
+
exc: Joi.string()
|
|
321
|
+
.valid(...prds.exc)
|
|
322
|
+
.required(),
|
|
323
|
+
ordTyp: Joi.string()
|
|
324
|
+
.valid(...orderTypeArray)
|
|
325
|
+
.required(),
|
|
326
|
+
prdCode: Joi.string()
|
|
327
|
+
// .valid(...prdName)
|
|
328
|
+
.required(),
|
|
329
|
+
curQty: Joi.string().required(),
|
|
330
|
+
flQty: Joi.string().required(),
|
|
331
|
+
trdSym: Joi.string().required(),
|
|
332
|
+
action: Joi.string()
|
|
333
|
+
.valid(...actionTypeArray)
|
|
334
|
+
.required(),
|
|
335
|
+
sym: Joi.string().required(),
|
|
336
|
+
}).options({ abortEarly: false });
|
|
337
|
+
|
|
338
|
+
const re = cancelAMOTradeSchema.validate(object);
|
|
339
|
+
console.log(re);
|
|
340
|
+
return cancelAMOTradeSchema.validate(object);
|
|
341
|
+
};
|
|
342
|
+
|
|
343
|
+
validateConvertPositionCOMM = (object, prds) => {
|
|
344
|
+
// let prdName = [];
|
|
345
|
+
// if (prds.exc.includes(object.exc)) {
|
|
346
|
+
// prdName = prds.prd[object.exc];
|
|
347
|
+
// }
|
|
348
|
+
const ConvertPositionCOMMSchema = Joi.object({
|
|
349
|
+
sym: Joi.string().required(),
|
|
350
|
+
cnvTyp: Joi.string().valid("D", "C").required(),
|
|
351
|
+
qty: Joi.string()
|
|
352
|
+
.pattern(new RegExp("^\\d+(\\.\\d+)?"))
|
|
353
|
+
.required()
|
|
354
|
+
.error(new Error('Parameter Quantity cannot be Negative or non-numeric')),
|
|
355
|
+
action: Joi.string().valid("B", "S").required(),
|
|
356
|
+
prdCode: Joi.string()
|
|
357
|
+
// .valid(...prdName)
|
|
358
|
+
.required(),
|
|
359
|
+
prdCodeCh: Joi.string()
|
|
360
|
+
// .valid(...prdName)
|
|
361
|
+
.required(),
|
|
362
|
+
ordSrc: Joi.string(),
|
|
363
|
+
exc: Joi.string()
|
|
364
|
+
.valid(...prds.exc)
|
|
365
|
+
.required(),
|
|
366
|
+
trdSym: Joi.string().required(),
|
|
367
|
+
}).options({ abortEarly: false });
|
|
368
|
+
|
|
369
|
+
const re = ConvertPositionCOMMSchema.validate(object);
|
|
370
|
+
console.log(re);
|
|
371
|
+
return ConvertPositionCOMMSchema.validate(object);
|
|
372
|
+
};
|
|
373
|
+
|
|
374
|
+
validateConvertPositionEQ = (object, prds) => {
|
|
375
|
+
const ConvertPositionEQSchema = Joi.object({
|
|
376
|
+
nstOID: Joi.string().required(),
|
|
377
|
+
flID: Joi.string().required(),
|
|
378
|
+
prdCodeCh: Joi.string().required(),
|
|
379
|
+
prdCode: Joi.string().required(),
|
|
380
|
+
exc: Joi.string()
|
|
381
|
+
.valid(...prds.exc)
|
|
382
|
+
.required(),
|
|
383
|
+
ordTyp: Joi.string()
|
|
384
|
+
.valid(...orderTypeArray)
|
|
385
|
+
.required(),
|
|
386
|
+
}).options({ abortEarly: false });
|
|
387
|
+
|
|
388
|
+
return ConvertPositionEQSchema.validate(object);
|
|
389
|
+
};
|
|
390
|
+
|
|
391
|
+
validatePlaceMF = (object) => {
|
|
392
|
+
const placeMFSchema = Joi.object({
|
|
393
|
+
token: Joi.string().required(),
|
|
394
|
+
isin: Joi.string().required(),
|
|
395
|
+
txnTyp: Joi.string().required(),
|
|
396
|
+
clientCode: Joi.string().required(),
|
|
397
|
+
qty: Joi.number()
|
|
398
|
+
.positive()
|
|
399
|
+
.required(),
|
|
400
|
+
amt: Joi.number().positive().required(),
|
|
401
|
+
reInvFlg: Joi.string().required(),
|
|
402
|
+
folioNo: Joi.any().when("txnTyp", {
|
|
403
|
+
switch: [
|
|
404
|
+
{ is: "SIP", then: Joi.string().required() },
|
|
405
|
+
{ is: "XSIP", then: Joi.string().required() },
|
|
406
|
+
],
|
|
407
|
+
otherwise: Joi.string().allow(""),
|
|
408
|
+
}),
|
|
409
|
+
schemeName: Joi.string().required(),
|
|
410
|
+
strtDt: Joi.string().required(),
|
|
411
|
+
endDt: Joi.string().required(),
|
|
412
|
+
gfot: Joi.string().required(),
|
|
413
|
+
schemePlan: Joi.string().required(),
|
|
414
|
+
schemeCode: Joi.string().required(),
|
|
415
|
+
sipFrq: Joi.string().required(),
|
|
416
|
+
}).options({ abortEarly: false });
|
|
417
|
+
|
|
418
|
+
return placeMFSchema.validate(object);
|
|
419
|
+
};
|
|
420
|
+
|
|
421
|
+
validateModifyMF = (object) => {
|
|
422
|
+
const modifyMFSchema = Joi.object({
|
|
423
|
+
token: Joi.string().required(),
|
|
424
|
+
isin: Joi.string().required(),
|
|
425
|
+
txnTyp: Joi.string().required(),
|
|
426
|
+
clientCode: Joi.string().required(),
|
|
427
|
+
qty: Joi.number()
|
|
428
|
+
.positive()
|
|
429
|
+
.required(),
|
|
430
|
+
amt: Joi.number().positive().required(),
|
|
431
|
+
reInvFlg: Joi.string().required(),
|
|
432
|
+
folioNo: Joi.any().when("txnTyp", {
|
|
433
|
+
switch: [
|
|
434
|
+
{ is: "SIP", then: Joi.string().required() },
|
|
435
|
+
{ is: "XSIP", then: Joi.string().required() },
|
|
436
|
+
],
|
|
437
|
+
otherwise: Joi.string().allow(""),
|
|
438
|
+
}),
|
|
439
|
+
schemeName: Joi.string().required(),
|
|
440
|
+
strtDt: Joi.string().required(),
|
|
441
|
+
endDt: Joi.string().required(),
|
|
442
|
+
sipFrq: Joi.string().required(),
|
|
443
|
+
gfot: Joi.string().required(),
|
|
444
|
+
schemePlan: Joi.string().required(),
|
|
445
|
+
schemeCode: Joi.string().required(),
|
|
446
|
+
txnId: Joi.string().required(),
|
|
447
|
+
}).options({ abortEarly: false });
|
|
448
|
+
|
|
449
|
+
return modifyMFSchema.validate(object);
|
|
450
|
+
};
|
|
451
|
+
|
|
452
|
+
validateCancelMF = (object) => {
|
|
453
|
+
const cancelMFSchema = Joi.object({
|
|
454
|
+
token: Joi.string().required(),
|
|
455
|
+
isin: Joi.string().required(),
|
|
456
|
+
txnTyp: Joi.string().required(),
|
|
457
|
+
clientCode: Joi.string().required(),
|
|
458
|
+
qty: Joi.number().required(),
|
|
459
|
+
amt: Joi.number().positive().required(),
|
|
460
|
+
reInvFlg: Joi.string().required(),
|
|
461
|
+
folioNo: Joi.any().when("txnTyp", {
|
|
462
|
+
switch: [
|
|
463
|
+
{ is: "SIP", then: Joi.string().required() },
|
|
464
|
+
{ is: "XSIP", then: Joi.string().required() },
|
|
465
|
+
],
|
|
466
|
+
otherwise: Joi.string().allow(""),
|
|
467
|
+
}),
|
|
468
|
+
schemeName: Joi.string().required(),
|
|
469
|
+
strtDt: Joi.string().required(),
|
|
470
|
+
endDt: Joi.string().required(),
|
|
471
|
+
sipFrq: Joi.string().required(),
|
|
472
|
+
gfot: Joi.string().required(),
|
|
473
|
+
schemePlan: Joi.string().required(),
|
|
474
|
+
schemeCode: Joi.string().required(),
|
|
475
|
+
txnId: Joi.string().required(),
|
|
476
|
+
}).options({ abortEarly: false });
|
|
477
|
+
|
|
478
|
+
return cancelMFSchema.validate(object);
|
|
479
|
+
};
|
|
480
|
+
|
|
481
|
+
validatePlaceBracketTrade = (object, prds) => {
|
|
482
|
+
const PlaceBracketTradeSchema = Joi.object({
|
|
483
|
+
exc: Joi.string()
|
|
484
|
+
.valid(...prds.exc)
|
|
485
|
+
.required(),
|
|
486
|
+
sym: Joi.string().required(),
|
|
487
|
+
trnsTyp: Joi.string().required(),
|
|
488
|
+
qty: Joi.number()
|
|
489
|
+
.positive()
|
|
490
|
+
.required(),
|
|
491
|
+
dur: Joi.string().required(),
|
|
492
|
+
dsQty: Joi.string()
|
|
493
|
+
.pattern(new RegExp("^\\d+(\\.\\d+)?"))
|
|
494
|
+
.required()
|
|
495
|
+
.error(new Error('Parameter Disclosed Quantity cannot be Negative or non-numeric')),
|
|
496
|
+
prc: Joi.number()
|
|
497
|
+
.min(0)
|
|
498
|
+
.required(),
|
|
499
|
+
slVal: Joi.string()
|
|
500
|
+
.pattern(new RegExp("^\\d+(\\.\\d+)?"))
|
|
501
|
+
.required()
|
|
502
|
+
.error(new Error('Parameter Stop Loss cannot be Negative or non-numeric')),
|
|
503
|
+
trlSl: Joi.string().valid("Y", "N").required(),
|
|
504
|
+
trlSlVal: Joi.string()
|
|
505
|
+
.pattern(new RegExp("^\\d+(\\.\\d+)?"))
|
|
506
|
+
.error(new Error('Parameter Trailing stop loss value cannot be Negative or non-numeric')),
|
|
507
|
+
sqOffVal: Joi.string()
|
|
508
|
+
.pattern(new RegExp("^\\d+(\\.\\d+)?"))
|
|
509
|
+
.required()
|
|
510
|
+
.error(new Error('Parameter Square off cannot be Negative or non-numeric')),
|
|
511
|
+
}).options({ abortEarly: false });
|
|
512
|
+
|
|
513
|
+
const re = PlaceBracketTradeSchema.validate(object);
|
|
514
|
+
console.log(re);
|
|
515
|
+
return PlaceBracketTradeSchema.validate(object);
|
|
516
|
+
};
|
|
517
|
+
|
|
518
|
+
validateExitBracketTrade = (object) => {
|
|
519
|
+
const exitBracketTradeSchema = Joi.object({
|
|
520
|
+
nstOrdNo: Joi.string().required(),
|
|
521
|
+
syomID: Joi.string().required(),
|
|
522
|
+
sts: Joi.string().required(),
|
|
523
|
+
}).options({ abortEarly: false });
|
|
524
|
+
|
|
525
|
+
return exitBracketTradeSchema.validate(object);
|
|
526
|
+
};
|
|
527
|
+
|
|
528
|
+
validateOrderDetails = (orderId, exchange, prds) => {
|
|
529
|
+
const orderDetailsObj = {
|
|
530
|
+
ordId: orderId,
|
|
531
|
+
exc: exchange,
|
|
532
|
+
};
|
|
533
|
+
const orderDetailsSchema = Joi.object({
|
|
534
|
+
ordId: Joi.string().required(),
|
|
535
|
+
exc: Joi.string()
|
|
536
|
+
.valid(...prds.exc)
|
|
537
|
+
.required(),
|
|
538
|
+
}).options({ abortEarly: false });
|
|
539
|
+
|
|
540
|
+
return orderDetailsSchema.validate(orderDetailsObj);
|
|
541
|
+
};
|
|
542
|
+
|
|
543
|
+
validateOrderHistory = (startDate, endDate) => {
|
|
544
|
+
const dateData = {
|
|
545
|
+
start: startDate,
|
|
546
|
+
end: endDate,
|
|
547
|
+
};
|
|
548
|
+
const orderHistorySchema = Joi.object({
|
|
549
|
+
start: Joi.date()//.iso()
|
|
550
|
+
.required(),
|
|
551
|
+
end: Joi.date()//.iso()
|
|
552
|
+
.min(Joi.ref("start")),
|
|
553
|
+
}).options({ abortEarly: false });
|
|
554
|
+
|
|
555
|
+
return orderHistorySchema.validate(dateData);
|
|
556
|
+
};
|
|
557
|
+
|
|
558
|
+
validatePlaceBasketTrade = (orderList, prds) => {
|
|
559
|
+
return orderList.map((item) => {
|
|
560
|
+
// let prdName = [];
|
|
561
|
+
// if (prds.exc.includes(item.exc)) {
|
|
562
|
+
// prdName = prds.prd[item.exc];
|
|
563
|
+
// }
|
|
564
|
+
let orderListSchema = Joi.array()
|
|
565
|
+
.items({
|
|
566
|
+
exc: Joi.string()
|
|
567
|
+
.valid(...prds.exc)
|
|
568
|
+
.required(),
|
|
569
|
+
trdSym: Joi.string().required(),
|
|
570
|
+
action: Joi.string()
|
|
571
|
+
.valid(...actionTypeArray)
|
|
572
|
+
.required(),
|
|
573
|
+
prdCode: Joi.string()
|
|
574
|
+
// .valid(...prdName)
|
|
575
|
+
.required(),
|
|
576
|
+
ordTyp: Joi.string()
|
|
577
|
+
.valid(...orderTypeArray)
|
|
578
|
+
.required(),
|
|
579
|
+
dur: Joi.string()
|
|
580
|
+
.valid(...validityArray)
|
|
581
|
+
.required(),
|
|
582
|
+
price: Joi.string()
|
|
583
|
+
.pattern(new RegExp("^\\d+(\\.\\d+)?"))
|
|
584
|
+
.required()
|
|
585
|
+
.error(new Error('Parameter Price cannot be Negative or non-numeric')),
|
|
586
|
+
trgPrc: Joi.string().required(),
|
|
587
|
+
qty: Joi.number()
|
|
588
|
+
.positive()
|
|
589
|
+
.required(),
|
|
590
|
+
dscQty: Joi.string()
|
|
591
|
+
.pattern(new RegExp("^\\d+(\\.\\d+)?"))
|
|
592
|
+
.required()
|
|
593
|
+
.error(new Error('Parameter Disclosed Quantity cannot be Negative or non-numeric')),
|
|
594
|
+
GTDDate: Joi.string().required(),
|
|
595
|
+
rmk: Joi.string().allow("").required(),
|
|
596
|
+
sym: Joi.string().required(),
|
|
597
|
+
})
|
|
598
|
+
.options({ abortEarly: false });
|
|
599
|
+
|
|
600
|
+
const re = orderListSchema.validate(item);
|
|
601
|
+
console.log(re);
|
|
602
|
+
return orderListSchema.validate(item);
|
|
603
|
+
});
|
|
604
|
+
};
|
|
605
|
+
|
|
606
|
+
validatePositionSquareOff = (orderList, prds) => {
|
|
607
|
+
return orderList.map((item) => {
|
|
608
|
+
// let prdName = [];
|
|
609
|
+
// if (prds.exc.includes(item.exc)) {
|
|
610
|
+
// prdName = prds.prd[item.exc];
|
|
611
|
+
// }
|
|
612
|
+
let orderListSchema = Joi.object()
|
|
613
|
+
.keys({
|
|
614
|
+
trdSym: Joi.string().required(),
|
|
615
|
+
exc: Joi.string()
|
|
616
|
+
.valid(...prds.exc)
|
|
617
|
+
.required(),
|
|
618
|
+
action: Joi.string()
|
|
619
|
+
.valid(...actionTypeArray)
|
|
620
|
+
.required(),
|
|
621
|
+
dur: Joi.string()
|
|
622
|
+
.valid(...validityArray)
|
|
623
|
+
.required(),
|
|
624
|
+
ordTyp: Joi.string()
|
|
625
|
+
.valid(...orderTypeArray)
|
|
626
|
+
.required(),
|
|
627
|
+
qty: Joi.string()
|
|
628
|
+
.pattern(new RegExp("^\\d+(\\.\\d+)?"))
|
|
629
|
+
.required()
|
|
630
|
+
.error(new Error('Parameter Quantity cannot be Negative or non-numeric')),
|
|
631
|
+
dscQty: Joi.string()
|
|
632
|
+
.pattern(new RegExp("^\\d+(\\.\\d+)?"))
|
|
633
|
+
.required()
|
|
634
|
+
.error(new Error('Parameter Disclosed Quantity cannot be Negative or non-numeric')),
|
|
635
|
+
sym: Joi.string().required(),
|
|
636
|
+
trgPrc: Joi.string()
|
|
637
|
+
.pattern(new RegExp("^\\d+(\\.\\d+)?"))
|
|
638
|
+
.required()
|
|
639
|
+
.error(new Error('Parameter Trigger price cannot be Negative or non-numeric')),
|
|
640
|
+
price: Joi.string()
|
|
641
|
+
.pattern(new RegExp("^\\d+(\\.\\d+)?"))
|
|
642
|
+
.required()
|
|
643
|
+
.error(new Error('Parameter Price cannot be Negative or non-numeric')),
|
|
644
|
+
prdCode: Joi.string()
|
|
645
|
+
// .valid(...prdName)
|
|
646
|
+
.required(),
|
|
647
|
+
rmk: Joi.string().required(),
|
|
648
|
+
GTDDate: Joi.string().required(),
|
|
649
|
+
})
|
|
650
|
+
.options({ abortEarly: false });
|
|
651
|
+
|
|
652
|
+
const re = orderListSchema.validate(item);
|
|
653
|
+
console.log(re);
|
|
654
|
+
return orderListSchema.validate(item);
|
|
655
|
+
});
|
|
656
|
+
};
|
|
657
|
+
|
|
658
|
+
validateMFOrderBook = (fromDate, toDate) => {
|
|
659
|
+
const dateData = {
|
|
660
|
+
fromDate: fromDate,
|
|
661
|
+
toDate: toDate,
|
|
662
|
+
};
|
|
663
|
+
const mfOrderBookSchema = Joi.object({
|
|
664
|
+
fromDate: Joi.date().iso().required(),
|
|
665
|
+
toDate: Joi.date().iso().min(Joi.ref("fromDate")),
|
|
666
|
+
}).options({ abortEarly: false });
|
|
667
|
+
|
|
668
|
+
return mfOrderBookSchema.validate(dateData);
|
|
669
|
+
};
|
|
670
|
+
|
|
671
|
+
validateGetAMOStxatus = (exchange, prds) => {
|
|
672
|
+
const amoStxatusSchema = Joi.object({
|
|
673
|
+
exchange: Joi.string()
|
|
674
|
+
.valid(...prds.exc)
|
|
675
|
+
.required(),
|
|
676
|
+
}).options({ abortEarly: false });
|
|
677
|
+
|
|
678
|
+
return amoStxatusSchema.validate({ exchange: exchange });
|
|
679
|
+
};
|
|
680
|
+
|
|
681
|
+
module.exports = {
|
|
682
|
+
validatePlaceTrade,
|
|
683
|
+
validateModifyTrade,
|
|
684
|
+
validateCancelPlaceTrade,
|
|
685
|
+
validatePlaceGtcGtdTrade,
|
|
686
|
+
validatePlaceAMOTrade,
|
|
687
|
+
validateModifyAMOTrade,
|
|
688
|
+
validateCancelAMOTrade,
|
|
689
|
+
validateConvertPositionCOMM,
|
|
690
|
+
validateConvertPositionEQ,
|
|
691
|
+
validatePlaceMF,
|
|
692
|
+
validateModifyMF,
|
|
693
|
+
validateCancelMF,
|
|
694
|
+
validatePlaceBracketTrade,
|
|
695
|
+
validateExitBracketTrade,
|
|
696
|
+
validateOrderDetails,
|
|
697
|
+
validateOrderHistory,
|
|
698
|
+
validatePositionSquareOff,
|
|
699
|
+
validateMFOrderBook,
|
|
700
|
+
validateGetAMOStxatus,
|
|
701
|
+
};
|