@pungoyal/kite-cli 0.1.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.
Files changed (63) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +292 -0
  3. package/dist/cli.d.ts +2 -0
  4. package/dist/cli.js +7 -0
  5. package/dist/commands/auth.d.ts +2 -0
  6. package/dist/commands/auth.js +265 -0
  7. package/dist/commands/config.d.ts +2 -0
  8. package/dist/commands/config.js +182 -0
  9. package/dist/commands/gtt.d.ts +12 -0
  10. package/dist/commands/gtt.js +276 -0
  11. package/dist/commands/market.d.ts +2 -0
  12. package/dist/commands/market.js +389 -0
  13. package/dist/commands/orders.d.ts +2 -0
  14. package/dist/commands/orders.js +679 -0
  15. package/dist/commands/portfolio.d.ts +2 -0
  16. package/dist/commands/portfolio.js +286 -0
  17. package/dist/commands/types.d.ts +16 -0
  18. package/dist/commands/types.js +1 -0
  19. package/dist/commands/watch.d.ts +18 -0
  20. package/dist/commands/watch.js +285 -0
  21. package/dist/context.d.ts +40 -0
  22. package/dist/context.js +126 -0
  23. package/dist/core/api.d.ts +843 -0
  24. package/dist/core/api.js +472 -0
  25. package/dist/core/auth.d.ts +68 -0
  26. package/dist/core/auth.js +220 -0
  27. package/dist/core/client.d.ts +76 -0
  28. package/dist/core/client.js +285 -0
  29. package/dist/core/config.d.ts +114 -0
  30. package/dist/core/config.js +163 -0
  31. package/dist/core/credentials.d.ts +27 -0
  32. package/dist/core/credentials.js +182 -0
  33. package/dist/core/errors.d.ts +83 -0
  34. package/dist/core/errors.js +152 -0
  35. package/dist/core/instruments.d.ts +87 -0
  36. package/dist/core/instruments.js +288 -0
  37. package/dist/core/paths.d.ts +11 -0
  38. package/dist/core/paths.js +56 -0
  39. package/dist/core/ratelimit.d.ts +57 -0
  40. package/dist/core/ratelimit.js +196 -0
  41. package/dist/core/redact.d.ts +48 -0
  42. package/dist/core/redact.js +181 -0
  43. package/dist/core/schemas.d.ts +662 -0
  44. package/dist/core/schemas.js +433 -0
  45. package/dist/core/secretstore.d.ts +11 -0
  46. package/dist/core/secretstore.js +138 -0
  47. package/dist/core/session.d.ts +37 -0
  48. package/dist/core/session.js +102 -0
  49. package/dist/core/ticker.d.ts +131 -0
  50. package/dist/core/ticker.js +367 -0
  51. package/dist/index.d.ts +17 -0
  52. package/dist/index.js +17 -0
  53. package/dist/output/format.d.ts +31 -0
  54. package/dist/output/format.js +162 -0
  55. package/dist/output/io.d.ts +70 -0
  56. package/dist/output/io.js +143 -0
  57. package/dist/output/table.d.ts +28 -0
  58. package/dist/output/table.js +73 -0
  59. package/dist/run.d.ts +15 -0
  60. package/dist/run.js +161 -0
  61. package/dist/safety.d.ts +93 -0
  62. package/dist/safety.js +154 -0
  63. package/package.json +85 -0
@@ -0,0 +1,843 @@
1
+ import type { KiteClient } from './client.js';
2
+ import { type Candle } from './schemas.js';
3
+ /**
4
+ * Typed wrappers over the Kite Connect v3 endpoints.
5
+ *
6
+ * Batching and range-chunking live here rather than in commands, so every
7
+ * caller gets the rate-limit-aware behaviour automatically.
8
+ */
9
+ export type Variety = 'regular' | 'amo' | 'co' | 'iceberg' | 'auction';
10
+ export type TransactionType = 'BUY' | 'SELL';
11
+ export type OrderType = 'MARKET' | 'LIMIT' | 'SL' | 'SL-M';
12
+ export type Product = 'CNC' | 'NRML' | 'MIS' | 'MTF';
13
+ export type Validity = 'DAY' | 'IOC' | 'TTL';
14
+ export type Exchange = 'NSE' | 'BSE' | 'NFO' | 'CDS' | 'BCD' | 'MCX' | 'BFO';
15
+ export declare const VARIETIES: Variety[];
16
+ export declare const ORDER_TYPES: OrderType[];
17
+ export declare const PRODUCTS: Product[];
18
+ export declare const VALIDITIES: Validity[];
19
+ export declare const EXCHANGES: Exchange[];
20
+ export interface PlaceOrderParams {
21
+ variety: Variety;
22
+ tradingsymbol: string;
23
+ exchange: Exchange | string;
24
+ transaction_type: TransactionType;
25
+ order_type: OrderType;
26
+ quantity: number;
27
+ product: Product;
28
+ price?: number | undefined;
29
+ trigger_price?: number | undefined;
30
+ disclosed_quantity?: number | undefined;
31
+ validity?: Validity | undefined;
32
+ validity_ttl?: number | undefined;
33
+ iceberg_legs?: number | undefined;
34
+ iceberg_quantity?: number | undefined;
35
+ auction_number?: string | undefined;
36
+ market_protection?: number | undefined;
37
+ /**
38
+ * Client correlation ID, max 20 alphanumeric chars. This CLI always sets one:
39
+ * it is the only way to reconcile after a network failure, because Kite has
40
+ * no idempotency key.
41
+ */
42
+ tag?: string | undefined;
43
+ }
44
+ export interface ModifyOrderParams {
45
+ variety: Variety;
46
+ order_id: string;
47
+ quantity?: number | undefined;
48
+ price?: number | undefined;
49
+ trigger_price?: number | undefined;
50
+ order_type?: OrderType | undefined;
51
+ disclosed_quantity?: number | undefined;
52
+ validity?: Validity | undefined;
53
+ }
54
+ export declare class KiteApi {
55
+ private readonly client;
56
+ constructor(client: KiteClient);
57
+ /** Exchange a request_token for an access_token. */
58
+ createSession(params: {
59
+ requestToken: string;
60
+ checksum: string;
61
+ }): Promise<{
62
+ [x: string]: unknown;
63
+ user_id: string;
64
+ exchanges: string[];
65
+ products: string[];
66
+ order_types: string[];
67
+ access_token: string;
68
+ user_name?: string | undefined;
69
+ user_shortname?: string | undefined;
70
+ email?: string | undefined;
71
+ user_type?: string | undefined;
72
+ broker?: string | undefined;
73
+ public_token?: string | undefined;
74
+ refresh_token?: string | undefined;
75
+ login_time?: string | undefined;
76
+ }>;
77
+ invalidateSession(accessToken: string): Promise<unknown>;
78
+ getProfile(signal?: AbortSignal): Promise<{
79
+ [x: string]: unknown;
80
+ user_id: string;
81
+ exchanges: string[];
82
+ products: string[];
83
+ order_types: string[];
84
+ user_name?: string | undefined;
85
+ user_shortname?: string | undefined;
86
+ email?: string | undefined;
87
+ user_type?: string | undefined;
88
+ broker?: string | undefined;
89
+ }>;
90
+ getMargins(signal?: AbortSignal): Promise<{
91
+ [x: string]: unknown;
92
+ equity?: {
93
+ [x: string]: unknown;
94
+ enabled?: boolean | undefined;
95
+ net?: number | undefined;
96
+ available?: {
97
+ [x: string]: unknown;
98
+ cash?: number | undefined;
99
+ opening_balance?: number | undefined;
100
+ live_balance?: number | undefined;
101
+ intraday_payin?: number | undefined;
102
+ adhoc_margin?: number | undefined;
103
+ collateral?: number | undefined;
104
+ } | undefined;
105
+ utilised?: {
106
+ [x: string]: unknown;
107
+ debits?: number | undefined;
108
+ exposure?: number | undefined;
109
+ m2m_realised?: number | undefined;
110
+ m2m_unrealised?: number | undefined;
111
+ option_premium?: number | undefined;
112
+ payout?: number | undefined;
113
+ span?: number | undefined;
114
+ holding_sales?: number | undefined;
115
+ turnover?: number | undefined;
116
+ liquid_collateral?: number | undefined;
117
+ stock_collateral?: number | undefined;
118
+ delivery?: number | undefined;
119
+ } | undefined;
120
+ } | undefined;
121
+ commodity?: {
122
+ [x: string]: unknown;
123
+ enabled?: boolean | undefined;
124
+ net?: number | undefined;
125
+ available?: {
126
+ [x: string]: unknown;
127
+ cash?: number | undefined;
128
+ opening_balance?: number | undefined;
129
+ live_balance?: number | undefined;
130
+ intraday_payin?: number | undefined;
131
+ adhoc_margin?: number | undefined;
132
+ collateral?: number | undefined;
133
+ } | undefined;
134
+ utilised?: {
135
+ [x: string]: unknown;
136
+ debits?: number | undefined;
137
+ exposure?: number | undefined;
138
+ m2m_realised?: number | undefined;
139
+ m2m_unrealised?: number | undefined;
140
+ option_premium?: number | undefined;
141
+ payout?: number | undefined;
142
+ span?: number | undefined;
143
+ holding_sales?: number | undefined;
144
+ turnover?: number | undefined;
145
+ liquid_collateral?: number | undefined;
146
+ stock_collateral?: number | undefined;
147
+ delivery?: number | undefined;
148
+ } | undefined;
149
+ } | undefined;
150
+ }>;
151
+ getOrders(signal?: AbortSignal): Promise<{
152
+ [x: string]: unknown;
153
+ order_id: string;
154
+ status: string;
155
+ parent_order_id?: string | null | undefined;
156
+ exchange_order_id?: string | null | undefined;
157
+ status_message?: string | null | undefined;
158
+ status_message_raw?: string | null | undefined;
159
+ order_timestamp?: string | null | undefined;
160
+ exchange_timestamp?: string | null | undefined;
161
+ exchange_update_timestamp?: string | null | undefined;
162
+ variety?: string | undefined;
163
+ exchange?: string | undefined;
164
+ tradingsymbol?: string | undefined;
165
+ instrument_token?: number | undefined;
166
+ transaction_type?: string | undefined;
167
+ order_type?: string | undefined;
168
+ product?: string | undefined;
169
+ validity?: string | undefined;
170
+ price?: number | undefined;
171
+ quantity?: number | undefined;
172
+ trigger_price?: number | undefined;
173
+ average_price?: number | undefined;
174
+ pending_quantity?: number | undefined;
175
+ filled_quantity?: number | undefined;
176
+ disclosed_quantity?: number | undefined;
177
+ cancelled_quantity?: number | undefined;
178
+ tag?: string | null | undefined;
179
+ tags?: string[] | null | undefined;
180
+ placed_by?: string | undefined;
181
+ guid?: string | null | undefined;
182
+ }[]>;
183
+ /** Returns the full state history of one order, oldest first. */
184
+ getOrderHistory(orderId: string, signal?: AbortSignal): Promise<{
185
+ [x: string]: unknown;
186
+ order_id: string;
187
+ status: string;
188
+ parent_order_id?: string | null | undefined;
189
+ exchange_order_id?: string | null | undefined;
190
+ status_message?: string | null | undefined;
191
+ status_message_raw?: string | null | undefined;
192
+ order_timestamp?: string | null | undefined;
193
+ exchange_timestamp?: string | null | undefined;
194
+ exchange_update_timestamp?: string | null | undefined;
195
+ variety?: string | undefined;
196
+ exchange?: string | undefined;
197
+ tradingsymbol?: string | undefined;
198
+ instrument_token?: number | undefined;
199
+ transaction_type?: string | undefined;
200
+ order_type?: string | undefined;
201
+ product?: string | undefined;
202
+ validity?: string | undefined;
203
+ price?: number | undefined;
204
+ quantity?: number | undefined;
205
+ trigger_price?: number | undefined;
206
+ average_price?: number | undefined;
207
+ pending_quantity?: number | undefined;
208
+ filled_quantity?: number | undefined;
209
+ disclosed_quantity?: number | undefined;
210
+ cancelled_quantity?: number | undefined;
211
+ tag?: string | null | undefined;
212
+ tags?: string[] | null | undefined;
213
+ placed_by?: string | undefined;
214
+ guid?: string | null | undefined;
215
+ }[]>;
216
+ getTrades(signal?: AbortSignal): Promise<{
217
+ [x: string]: unknown;
218
+ trade_id: string;
219
+ order_id: string;
220
+ exchange_order_id?: string | null | undefined;
221
+ tradingsymbol?: string | undefined;
222
+ exchange?: string | undefined;
223
+ instrument_token?: number | undefined;
224
+ transaction_type?: string | undefined;
225
+ product?: string | undefined;
226
+ average_price?: number | undefined;
227
+ quantity?: number | undefined;
228
+ fill_timestamp?: string | null | undefined;
229
+ exchange_timestamp?: string | null | undefined;
230
+ order_timestamp?: string | null | undefined;
231
+ }[]>;
232
+ getOrderTrades(orderId: string, signal?: AbortSignal): Promise<{
233
+ [x: string]: unknown;
234
+ trade_id: string;
235
+ order_id: string;
236
+ exchange_order_id?: string | null | undefined;
237
+ tradingsymbol?: string | undefined;
238
+ exchange?: string | undefined;
239
+ instrument_token?: number | undefined;
240
+ transaction_type?: string | undefined;
241
+ product?: string | undefined;
242
+ average_price?: number | undefined;
243
+ quantity?: number | undefined;
244
+ fill_timestamp?: string | null | undefined;
245
+ exchange_timestamp?: string | null | undefined;
246
+ order_timestamp?: string | null | undefined;
247
+ }[]>;
248
+ /**
249
+ * Place an order.
250
+ *
251
+ * This is never retried automatically anywhere in the stack. If it fails at
252
+ * the network level the caller must reconcile via `findOrderByTag`, because
253
+ * a timed-out request may still have been executed.
254
+ */
255
+ placeOrder(params: PlaceOrderParams, signal?: AbortSignal): Promise<{
256
+ [x: string]: unknown;
257
+ order_id: string;
258
+ } | ({
259
+ [x: string]: unknown;
260
+ order_id: string;
261
+ } | {
262
+ [x: string]: unknown;
263
+ error: {
264
+ [x: string]: unknown;
265
+ code?: number | undefined;
266
+ error_type?: string | undefined;
267
+ message?: string | undefined;
268
+ };
269
+ })[]>;
270
+ modifyOrder(params: ModifyOrderParams, signal?: AbortSignal): Promise<{
271
+ [x: string]: unknown;
272
+ order_id: string;
273
+ }>;
274
+ cancelOrder(params: {
275
+ variety: Variety;
276
+ order_id: string;
277
+ parent_order_id?: string;
278
+ }, signal?: AbortSignal): Promise<{
279
+ [x: string]: unknown;
280
+ order_id: string;
281
+ }>;
282
+ /**
283
+ * Reconciliation helper for the no-idempotency problem.
284
+ *
285
+ * Kite has no client-suppliable idempotency key (the `guid` field in the
286
+ * response is server-assigned, despite its confusing description). Zerodha's
287
+ * own guidance for a failed/timed-out placement is: do NOT retry — fetch the
288
+ * orderbook and look for your tag. Only place again if it is absent.
289
+ */
290
+ findOrderByTag(tag: string, signal?: AbortSignal): Promise<{
291
+ [x: string]: unknown;
292
+ order_id: string;
293
+ status: string;
294
+ parent_order_id?: string | null | undefined;
295
+ exchange_order_id?: string | null | undefined;
296
+ status_message?: string | null | undefined;
297
+ status_message_raw?: string | null | undefined;
298
+ order_timestamp?: string | null | undefined;
299
+ exchange_timestamp?: string | null | undefined;
300
+ exchange_update_timestamp?: string | null | undefined;
301
+ variety?: string | undefined;
302
+ exchange?: string | undefined;
303
+ tradingsymbol?: string | undefined;
304
+ instrument_token?: number | undefined;
305
+ transaction_type?: string | undefined;
306
+ order_type?: string | undefined;
307
+ product?: string | undefined;
308
+ validity?: string | undefined;
309
+ price?: number | undefined;
310
+ quantity?: number | undefined;
311
+ trigger_price?: number | undefined;
312
+ average_price?: number | undefined;
313
+ pending_quantity?: number | undefined;
314
+ filled_quantity?: number | undefined;
315
+ disclosed_quantity?: number | undefined;
316
+ cancelled_quantity?: number | undefined;
317
+ tag?: string | null | undefined;
318
+ tags?: string[] | null | undefined;
319
+ placed_by?: string | undefined;
320
+ guid?: string | null | undefined;
321
+ }[]>;
322
+ getGtts(signal?: AbortSignal): Promise<{
323
+ [x: string]: unknown;
324
+ id: number;
325
+ type: string;
326
+ status: string;
327
+ condition: {
328
+ [x: string]: unknown;
329
+ exchange: string;
330
+ tradingsymbol: string;
331
+ trigger_values: number[];
332
+ last_price?: number | undefined;
333
+ instrument_token?: number | undefined;
334
+ };
335
+ orders: {
336
+ [x: string]: unknown;
337
+ exchange?: string | undefined;
338
+ tradingsymbol?: string | undefined;
339
+ product?: string | undefined;
340
+ order_type?: string | undefined;
341
+ transaction_type?: string | undefined;
342
+ quantity?: number | undefined;
343
+ price?: number | undefined;
344
+ result?: unknown;
345
+ }[];
346
+ user_id?: string | undefined;
347
+ parent_trigger?: unknown;
348
+ created_at?: string | undefined;
349
+ updated_at?: string | undefined;
350
+ expires_at?: string | undefined;
351
+ }[]>;
352
+ getGtt(id: number, signal?: AbortSignal): Promise<{
353
+ [x: string]: unknown;
354
+ id: number;
355
+ type: string;
356
+ status: string;
357
+ condition: {
358
+ [x: string]: unknown;
359
+ exchange: string;
360
+ tradingsymbol: string;
361
+ trigger_values: number[];
362
+ last_price?: number | undefined;
363
+ instrument_token?: number | undefined;
364
+ };
365
+ orders: {
366
+ [x: string]: unknown;
367
+ exchange?: string | undefined;
368
+ tradingsymbol?: string | undefined;
369
+ product?: string | undefined;
370
+ order_type?: string | undefined;
371
+ transaction_type?: string | undefined;
372
+ quantity?: number | undefined;
373
+ price?: number | undefined;
374
+ result?: unknown;
375
+ }[];
376
+ user_id?: string | undefined;
377
+ parent_trigger?: unknown;
378
+ created_at?: string | undefined;
379
+ updated_at?: string | undefined;
380
+ expires_at?: string | undefined;
381
+ }>;
382
+ placeGtt(params: GttParams, signal?: AbortSignal): Promise<{
383
+ [x: string]: unknown;
384
+ trigger_id: number;
385
+ }>;
386
+ modifyGtt(id: number, params: GttParams, signal?: AbortSignal): Promise<{
387
+ [x: string]: unknown;
388
+ trigger_id: number;
389
+ }>;
390
+ deleteGtt(id: number, signal?: AbortSignal): Promise<{
391
+ [x: string]: unknown;
392
+ trigger_id: number;
393
+ }>;
394
+ getHoldings(signal?: AbortSignal): Promise<{
395
+ [x: string]: unknown;
396
+ tradingsymbol: string;
397
+ exchange: string;
398
+ quantity: number;
399
+ t1_quantity: number;
400
+ realised_quantity: number;
401
+ opening_quantity: number;
402
+ collateral_quantity: number;
403
+ authorised_quantity: number;
404
+ average_price: number;
405
+ last_price: number;
406
+ close_price: number;
407
+ pnl: number;
408
+ day_change: number;
409
+ day_change_percentage: number;
410
+ instrument_token?: number | undefined;
411
+ isin?: string | undefined;
412
+ product?: string | undefined;
413
+ }[]>;
414
+ getPositions(signal?: AbortSignal): Promise<{
415
+ [x: string]: unknown;
416
+ net: {
417
+ [x: string]: unknown;
418
+ tradingsymbol: string;
419
+ exchange: string;
420
+ quantity: number;
421
+ overnight_quantity: number;
422
+ multiplier: number;
423
+ average_price: number;
424
+ close_price: number;
425
+ last_price: number;
426
+ value: number;
427
+ pnl: number;
428
+ m2m: number;
429
+ unrealised: number;
430
+ realised: number;
431
+ buy_quantity: number;
432
+ buy_price: number;
433
+ buy_value: number;
434
+ sell_quantity: number;
435
+ sell_price: number;
436
+ sell_value: number;
437
+ day_buy_quantity: number;
438
+ day_sell_quantity: number;
439
+ instrument_token?: number | undefined;
440
+ product?: string | undefined;
441
+ }[];
442
+ day: {
443
+ [x: string]: unknown;
444
+ tradingsymbol: string;
445
+ exchange: string;
446
+ quantity: number;
447
+ overnight_quantity: number;
448
+ multiplier: number;
449
+ average_price: number;
450
+ close_price: number;
451
+ last_price: number;
452
+ value: number;
453
+ pnl: number;
454
+ m2m: number;
455
+ unrealised: number;
456
+ realised: number;
457
+ buy_quantity: number;
458
+ buy_price: number;
459
+ buy_value: number;
460
+ sell_quantity: number;
461
+ sell_price: number;
462
+ sell_value: number;
463
+ day_buy_quantity: number;
464
+ day_sell_quantity: number;
465
+ instrument_token?: number | undefined;
466
+ product?: string | undefined;
467
+ }[];
468
+ }>;
469
+ getAuctions(signal?: AbortSignal): Promise<{
470
+ [x: string]: unknown;
471
+ tradingsymbol: string;
472
+ exchange: string;
473
+ instrument_token?: number | undefined;
474
+ auction_number?: string | undefined;
475
+ quantity?: number | undefined;
476
+ last_price?: number | undefined;
477
+ }[]>;
478
+ /** Convert a position between products. Note this is PUT, not POST. */
479
+ convertPosition(params: {
480
+ tradingsymbol: string;
481
+ exchange: string;
482
+ transaction_type: TransactionType;
483
+ position_type: 'overnight' | 'day';
484
+ quantity: number;
485
+ old_product: Product;
486
+ new_product: Product;
487
+ }, signal?: AbortSignal): Promise<unknown>;
488
+ /**
489
+ * Initiate CDSL authorisation for selling holdings — the HTTP 428 recovery
490
+ * path.
491
+ *
492
+ * With no ISINs this authorises the whole demat account; with ISINs it
493
+ * authorises only those instruments. The client encodes an array as repeated
494
+ * `isin` form fields, which is the shape Kite expects.
495
+ */
496
+ authoriseHoldings(isins?: string[], signal?: AbortSignal): Promise<{
497
+ [x: string]: unknown;
498
+ request_id: string;
499
+ }>;
500
+ /** Browser URL the user must visit to complete a holdings authorisation. */
501
+ authorisationUrl(requestId: string): string;
502
+ /**
503
+ * Full quotes. Kite caps this at 500 instruments per call and 1 request per
504
+ * second, so large lists are chunked and paced by the limiter.
505
+ */
506
+ getQuote(instruments: string[], signal?: AbortSignal): Promise<Record<string, {
507
+ [x: string]: unknown;
508
+ instrument_token: number;
509
+ last_price: number;
510
+ timestamp?: string | null | undefined;
511
+ last_trade_time?: string | null | undefined;
512
+ last_quantity?: number | undefined;
513
+ buy_quantity?: number | undefined;
514
+ sell_quantity?: number | undefined;
515
+ volume?: number | undefined;
516
+ average_price?: number | undefined;
517
+ oi?: number | undefined;
518
+ oi_day_high?: number | undefined;
519
+ oi_day_low?: number | undefined;
520
+ net_change?: number | undefined;
521
+ lower_circuit_limit?: number | undefined;
522
+ upper_circuit_limit?: number | undefined;
523
+ ohlc?: {
524
+ [x: string]: unknown;
525
+ open: number;
526
+ high: number;
527
+ low: number;
528
+ close: number;
529
+ } | undefined;
530
+ depth?: {
531
+ [x: string]: unknown;
532
+ buy: {
533
+ [x: string]: unknown;
534
+ price: number;
535
+ quantity: number;
536
+ orders: number;
537
+ }[];
538
+ sell: {
539
+ [x: string]: unknown;
540
+ price: number;
541
+ quantity: number;
542
+ orders: number;
543
+ }[];
544
+ } | undefined;
545
+ }>>;
546
+ /** OHLC + last price. Caps at 1000 instruments per call. */
547
+ getOhlc(instruments: string[], signal?: AbortSignal): Promise<Record<string, {
548
+ [x: string]: unknown;
549
+ instrument_token: number;
550
+ last_price: number;
551
+ ohlc?: {
552
+ [x: string]: unknown;
553
+ open: number;
554
+ high: number;
555
+ low: number;
556
+ close: number;
557
+ } | undefined;
558
+ }>>;
559
+ /** Last traded price only. Caps at 1000 instruments per call. */
560
+ getLtp(instruments: string[], signal?: AbortSignal): Promise<Record<string, {
561
+ [x: string]: unknown;
562
+ instrument_token: number;
563
+ last_price: number;
564
+ }>>;
565
+ private batchedQuote;
566
+ /**
567
+ * Historical candles, transparently chunked to respect per-interval range
568
+ * limits, then merged and de-duplicated.
569
+ */
570
+ getHistorical(params: {
571
+ instrument_token: number;
572
+ interval: HistoricalInterval;
573
+ from: Date;
574
+ to: Date;
575
+ continuous?: boolean;
576
+ oi?: boolean;
577
+ }, signal?: AbortSignal): Promise<Candle[]>;
578
+ /** The daily instrument dump as raw CSV. Not an API envelope. */
579
+ getInstrumentsCsv(exchange?: string, signal?: AbortSignal): Promise<string>;
580
+ orderMargins(orders: unknown[], signal?: AbortSignal): Promise<{
581
+ [x: string]: unknown;
582
+ type?: string | undefined;
583
+ tradingsymbol?: string | undefined;
584
+ exchange?: string | undefined;
585
+ span?: number | undefined;
586
+ exposure?: number | undefined;
587
+ option_premium?: number | undefined;
588
+ additional?: number | undefined;
589
+ bo?: number | undefined;
590
+ cash?: number | undefined;
591
+ var?: number | undefined;
592
+ total?: number | undefined;
593
+ leverage?: number | undefined;
594
+ charges?: {
595
+ [x: string]: unknown;
596
+ transaction_tax?: number | undefined;
597
+ transaction_tax_type?: string | undefined;
598
+ exchange_turnover_charge?: number | undefined;
599
+ sebi_turnover_charge?: number | undefined;
600
+ brokerage?: number | undefined;
601
+ stamp_duty?: number | undefined;
602
+ total?: number | undefined;
603
+ gst?: {
604
+ [x: string]: unknown;
605
+ igst?: number | undefined;
606
+ cgst?: number | undefined;
607
+ sgst?: number | undefined;
608
+ total?: number | undefined;
609
+ } | undefined;
610
+ } | undefined;
611
+ pnl?: {
612
+ [x: string]: unknown;
613
+ realised?: number | undefined;
614
+ unrealised?: number | undefined;
615
+ } | undefined;
616
+ }[]>;
617
+ basketMargins(orders: unknown[], considerPositions?: boolean, signal?: AbortSignal): Promise<{
618
+ [x: string]: unknown;
619
+ orders: {
620
+ [x: string]: unknown;
621
+ type?: string | undefined;
622
+ tradingsymbol?: string | undefined;
623
+ exchange?: string | undefined;
624
+ span?: number | undefined;
625
+ exposure?: number | undefined;
626
+ option_premium?: number | undefined;
627
+ additional?: number | undefined;
628
+ bo?: number | undefined;
629
+ cash?: number | undefined;
630
+ var?: number | undefined;
631
+ total?: number | undefined;
632
+ leverage?: number | undefined;
633
+ charges?: {
634
+ [x: string]: unknown;
635
+ transaction_tax?: number | undefined;
636
+ transaction_tax_type?: string | undefined;
637
+ exchange_turnover_charge?: number | undefined;
638
+ sebi_turnover_charge?: number | undefined;
639
+ brokerage?: number | undefined;
640
+ stamp_duty?: number | undefined;
641
+ total?: number | undefined;
642
+ gst?: {
643
+ [x: string]: unknown;
644
+ igst?: number | undefined;
645
+ cgst?: number | undefined;
646
+ sgst?: number | undefined;
647
+ total?: number | undefined;
648
+ } | undefined;
649
+ } | undefined;
650
+ pnl?: {
651
+ [x: string]: unknown;
652
+ realised?: number | undefined;
653
+ unrealised?: number | undefined;
654
+ } | undefined;
655
+ }[];
656
+ initial?: {
657
+ [x: string]: unknown;
658
+ type?: string | undefined;
659
+ tradingsymbol?: string | undefined;
660
+ exchange?: string | undefined;
661
+ span?: number | undefined;
662
+ exposure?: number | undefined;
663
+ option_premium?: number | undefined;
664
+ additional?: number | undefined;
665
+ bo?: number | undefined;
666
+ cash?: number | undefined;
667
+ var?: number | undefined;
668
+ total?: number | undefined;
669
+ leverage?: number | undefined;
670
+ charges?: {
671
+ [x: string]: unknown;
672
+ transaction_tax?: number | undefined;
673
+ transaction_tax_type?: string | undefined;
674
+ exchange_turnover_charge?: number | undefined;
675
+ sebi_turnover_charge?: number | undefined;
676
+ brokerage?: number | undefined;
677
+ stamp_duty?: number | undefined;
678
+ total?: number | undefined;
679
+ gst?: {
680
+ [x: string]: unknown;
681
+ igst?: number | undefined;
682
+ cgst?: number | undefined;
683
+ sgst?: number | undefined;
684
+ total?: number | undefined;
685
+ } | undefined;
686
+ } | undefined;
687
+ pnl?: {
688
+ [x: string]: unknown;
689
+ realised?: number | undefined;
690
+ unrealised?: number | undefined;
691
+ } | undefined;
692
+ } | undefined;
693
+ final?: {
694
+ [x: string]: unknown;
695
+ type?: string | undefined;
696
+ tradingsymbol?: string | undefined;
697
+ exchange?: string | undefined;
698
+ span?: number | undefined;
699
+ exposure?: number | undefined;
700
+ option_premium?: number | undefined;
701
+ additional?: number | undefined;
702
+ bo?: number | undefined;
703
+ cash?: number | undefined;
704
+ var?: number | undefined;
705
+ total?: number | undefined;
706
+ leverage?: number | undefined;
707
+ charges?: {
708
+ [x: string]: unknown;
709
+ transaction_tax?: number | undefined;
710
+ transaction_tax_type?: string | undefined;
711
+ exchange_turnover_charge?: number | undefined;
712
+ sebi_turnover_charge?: number | undefined;
713
+ brokerage?: number | undefined;
714
+ stamp_duty?: number | undefined;
715
+ total?: number | undefined;
716
+ gst?: {
717
+ [x: string]: unknown;
718
+ igst?: number | undefined;
719
+ cgst?: number | undefined;
720
+ sgst?: number | undefined;
721
+ total?: number | undefined;
722
+ } | undefined;
723
+ } | undefined;
724
+ pnl?: {
725
+ [x: string]: unknown;
726
+ realised?: number | undefined;
727
+ unrealised?: number | undefined;
728
+ } | undefined;
729
+ } | undefined;
730
+ charges?: unknown;
731
+ }>;
732
+ orderCharges(orders: unknown[], signal?: AbortSignal): Promise<{
733
+ [x: string]: unknown;
734
+ type?: string | undefined;
735
+ tradingsymbol?: string | undefined;
736
+ exchange?: string | undefined;
737
+ span?: number | undefined;
738
+ exposure?: number | undefined;
739
+ option_premium?: number | undefined;
740
+ additional?: number | undefined;
741
+ bo?: number | undefined;
742
+ cash?: number | undefined;
743
+ var?: number | undefined;
744
+ total?: number | undefined;
745
+ leverage?: number | undefined;
746
+ charges?: {
747
+ [x: string]: unknown;
748
+ transaction_tax?: number | undefined;
749
+ transaction_tax_type?: string | undefined;
750
+ exchange_turnover_charge?: number | undefined;
751
+ sebi_turnover_charge?: number | undefined;
752
+ brokerage?: number | undefined;
753
+ stamp_duty?: number | undefined;
754
+ total?: number | undefined;
755
+ gst?: {
756
+ [x: string]: unknown;
757
+ igst?: number | undefined;
758
+ cgst?: number | undefined;
759
+ sgst?: number | undefined;
760
+ total?: number | undefined;
761
+ } | undefined;
762
+ } | undefined;
763
+ pnl?: {
764
+ [x: string]: unknown;
765
+ realised?: number | undefined;
766
+ unrealised?: number | undefined;
767
+ } | undefined;
768
+ }[]>;
769
+ getMfHoldings(signal?: AbortSignal): Promise<{
770
+ [x: string]: unknown;
771
+ tradingsymbol: string;
772
+ average_price: number;
773
+ last_price: number;
774
+ pnl: number;
775
+ quantity: number;
776
+ folio?: string | null | undefined;
777
+ fund?: string | undefined;
778
+ last_price_date?: string | undefined;
779
+ }[]>;
780
+ /** Note: only returns the last 7 days of orders. */
781
+ getMfOrders(signal?: AbortSignal): Promise<{
782
+ [x: string]: unknown;
783
+ order_id: string;
784
+ fund?: string | undefined;
785
+ tradingsymbol?: string | undefined;
786
+ status?: string | undefined;
787
+ status_message?: string | null | undefined;
788
+ folio?: string | null | undefined;
789
+ order_timestamp?: string | null | undefined;
790
+ transaction_type?: string | undefined;
791
+ quantity?: number | null | undefined;
792
+ amount?: number | null | undefined;
793
+ average_price?: number | null | undefined;
794
+ }[]>;
795
+ getMfSips(signal?: AbortSignal): Promise<{
796
+ [x: string]: unknown;
797
+ sip_id: string;
798
+ tradingsymbol?: string | undefined;
799
+ fund?: string | undefined;
800
+ status?: string | undefined;
801
+ instalment_amount?: number | undefined;
802
+ instalments?: number | undefined;
803
+ frequency?: string | undefined;
804
+ next_instalment?: string | null | undefined;
805
+ }[]>;
806
+ }
807
+ export interface GttParams {
808
+ type: 'single' | 'two-leg';
809
+ condition: {
810
+ exchange: string;
811
+ tradingsymbol: string;
812
+ trigger_values: number[];
813
+ last_price: number;
814
+ };
815
+ orders: Array<{
816
+ exchange: string;
817
+ tradingsymbol: string;
818
+ transaction_type: TransactionType;
819
+ quantity: number;
820
+ order_type: 'LIMIT';
821
+ product: Product;
822
+ price: number;
823
+ }>;
824
+ }
825
+ export declare const HISTORICAL_INTERVALS: readonly ["minute", "3minute", "5minute", "10minute", "15minute", "30minute", "60minute", "day"];
826
+ export type HistoricalInterval = (typeof HISTORICAL_INTERVALS)[number];
827
+ /**
828
+ * Maximum date range per request, by interval.
829
+ *
830
+ * These limits are NOT in the official docs — they come from Zerodha staff on
831
+ * the developer forum. The `day` value is 1900 rather than the 2000 quoted
832
+ * there, because Zerodha's own sandbox chunking helper uses 1900 and the docs
833
+ * note that larger `day` ranges error out.
834
+ */
835
+ export declare const MAX_DAYS_PER_REQUEST: Record<HistoricalInterval, number>;
836
+ export declare function parseInterval(value: string): HistoricalInterval;
837
+ export declare function splitDateRange(from: Date, to: Date, maxDays: number): Array<{
838
+ from: Date;
839
+ to: Date;
840
+ }>;
841
+ /** Kite expects "yyyy-mm-dd hh:mm:ss" in IST. */
842
+ export declare function formatIstDateTime(date: Date): string;
843
+ export declare function chunks<T>(items: T[], size: number): Generator<T[]>;