nsekit 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 (76) hide show
  1. package/dist/brokers/dhan/DhanBroker.d.ts +51 -0
  2. package/dist/brokers/dhan/DhanBroker.d.ts.map +1 -0
  3. package/dist/brokers/dhan/dhan-auth.d.ts +28 -0
  4. package/dist/brokers/dhan/dhan-auth.d.ts.map +1 -0
  5. package/dist/brokers/dhan/dhan-constants.d.ts +21 -0
  6. package/dist/brokers/dhan/dhan-constants.d.ts.map +1 -0
  7. package/dist/brokers/dhan/dhan-instruments.d.ts +45 -0
  8. package/dist/brokers/dhan/dhan-instruments.d.ts.map +1 -0
  9. package/dist/brokers/dhan/dhan-mapper.d.ts +128 -0
  10. package/dist/brokers/dhan/dhan-mapper.d.ts.map +1 -0
  11. package/dist/brokers/dhan/dhan-socket.d.ts +46 -0
  12. package/dist/brokers/dhan/dhan-socket.d.ts.map +1 -0
  13. package/dist/brokers/dhan/index.d.ts +8 -0
  14. package/dist/brokers/dhan/index.d.ts.map +1 -0
  15. package/dist/brokers/finvasia/FinvasiaBroker.d.ts +50 -0
  16. package/dist/brokers/finvasia/FinvasiaBroker.d.ts.map +1 -0
  17. package/dist/brokers/finvasia/finvasia-auth.d.ts +28 -0
  18. package/dist/brokers/finvasia/finvasia-auth.d.ts.map +1 -0
  19. package/dist/brokers/finvasia/finvasia-constants.d.ts +22 -0
  20. package/dist/brokers/finvasia/finvasia-constants.d.ts.map +1 -0
  21. package/dist/brokers/finvasia/finvasia-instruments.d.ts +44 -0
  22. package/dist/brokers/finvasia/finvasia-instruments.d.ts.map +1 -0
  23. package/dist/brokers/finvasia/finvasia-mapper.d.ts +120 -0
  24. package/dist/brokers/finvasia/finvasia-mapper.d.ts.map +1 -0
  25. package/dist/brokers/finvasia/finvasia-socket.d.ts +42 -0
  26. package/dist/brokers/finvasia/finvasia-socket.d.ts.map +1 -0
  27. package/dist/brokers/finvasia/index.d.ts +8 -0
  28. package/dist/brokers/finvasia/index.d.ts.map +1 -0
  29. package/dist/brokers/paper/PaperBroker.d.ts +76 -0
  30. package/dist/brokers/paper/PaperBroker.d.ts.map +1 -0
  31. package/dist/brokers/paper/index.d.ts +4 -0
  32. package/dist/brokers/paper/index.d.ts.map +1 -0
  33. package/dist/brokers/paper/paper-fill-engine.d.ts +105 -0
  34. package/dist/brokers/paper/paper-fill-engine.d.ts.map +1 -0
  35. package/dist/brokers/zerodha/ZerodhaBroker.d.ts +52 -0
  36. package/dist/brokers/zerodha/ZerodhaBroker.d.ts.map +1 -0
  37. package/dist/brokers/zerodha/index.d.ts +8 -0
  38. package/dist/brokers/zerodha/index.d.ts.map +1 -0
  39. package/dist/brokers/zerodha/zerodha-auth.d.ts +28 -0
  40. package/dist/brokers/zerodha/zerodha-auth.d.ts.map +1 -0
  41. package/dist/brokers/zerodha/zerodha-constants.d.ts +21 -0
  42. package/dist/brokers/zerodha/zerodha-constants.d.ts.map +1 -0
  43. package/dist/brokers/zerodha/zerodha-instruments.d.ts +36 -0
  44. package/dist/brokers/zerodha/zerodha-instruments.d.ts.map +1 -0
  45. package/dist/brokers/zerodha/zerodha-mapper.d.ts +136 -0
  46. package/dist/brokers/zerodha/zerodha-mapper.d.ts.map +1 -0
  47. package/dist/brokers/zerodha/zerodha-socket.d.ts +33 -0
  48. package/dist/brokers/zerodha/zerodha-socket.d.ts.map +1 -0
  49. package/dist/errors/broker-error.d.ts +22 -0
  50. package/dist/errors/broker-error.d.ts.map +1 -0
  51. package/dist/errors/index.d.ts +5 -0
  52. package/dist/errors/index.d.ts.map +1 -0
  53. package/dist/errors/nsekit-error.d.ts +13 -0
  54. package/dist/errors/nsekit-error.d.ts.map +1 -0
  55. package/dist/errors/result.d.ts +19 -0
  56. package/dist/errors/result.d.ts.map +1 -0
  57. package/dist/index.d.ts +28 -0
  58. package/dist/index.d.ts.map +1 -0
  59. package/dist/index.js +23806 -0
  60. package/dist/instruments/instrument-master.d.ts +134 -0
  61. package/dist/instruments/instrument-master.d.ts.map +1 -0
  62. package/dist/interfaces/broker.interface.d.ts +33 -0
  63. package/dist/interfaces/broker.interface.d.ts.map +1 -0
  64. package/dist/session/session-manager.d.ts +128 -0
  65. package/dist/session/session-manager.d.ts.map +1 -0
  66. package/dist/types/broker.d.ts +222 -0
  67. package/dist/types/broker.d.ts.map +1 -0
  68. package/dist/types/common.d.ts +10 -0
  69. package/dist/types/common.d.ts.map +1 -0
  70. package/dist/types/index.d.ts +4 -0
  71. package/dist/types/index.d.ts.map +1 -0
  72. package/dist/types/instruments.d.ts +59 -0
  73. package/dist/types/instruments.d.ts.map +1 -0
  74. package/dist/websocket/ws-manager.d.ts +101 -0
  75. package/dist/websocket/ws-manager.d.ts.map +1 -0
  76. package/package.json +52 -0
@@ -0,0 +1,120 @@
1
+ /**
2
+ * Finvasia (Shoonya) mapper.
3
+ * Pure functions that translate between unified nsekit types and Shoonya API formats.
4
+ * No side effects, no I/O.
5
+ */
6
+ import type { UnifiedOrderParams, UnifiedPosition, UnifiedOrder, UnifiedTick, UnifiedHolding, Quote } from '../../types/broker';
7
+ export interface ShoonyaOrderParams {
8
+ uid: string;
9
+ actid: string;
10
+ exch: string;
11
+ tsym: string;
12
+ qty: string;
13
+ prc: string;
14
+ trgprc?: string;
15
+ prd: string;
16
+ trantype: string;
17
+ prctyp: string;
18
+ ret: string;
19
+ dscqty?: string;
20
+ remarks?: string;
21
+ }
22
+ export interface ShoonyaPosition {
23
+ tsym: string;
24
+ exch: string;
25
+ prd: string;
26
+ netqty: string;
27
+ daybuyqty: string;
28
+ daysellqty: string;
29
+ netavgprc: string;
30
+ lp: string;
31
+ rpnl: string;
32
+ urmtom: string;
33
+ token: string;
34
+ [key: string]: unknown;
35
+ }
36
+ export interface ShoonyaOrder {
37
+ norenordno: string;
38
+ exch_tm?: string;
39
+ tsym: string;
40
+ exch: string;
41
+ trantype: string;
42
+ prctyp: string;
43
+ prd: string;
44
+ qty: string;
45
+ fillshares?: string;
46
+ prc: string;
47
+ trgprc?: string;
48
+ avgprc?: string;
49
+ status: string;
50
+ ret: string;
51
+ remarks?: string;
52
+ norentm?: string;
53
+ exchordid?: string;
54
+ [key: string]: unknown;
55
+ }
56
+ export interface ShoonyaTick {
57
+ tk: string;
58
+ lp: string;
59
+ pc?: string;
60
+ o?: string;
61
+ h?: string;
62
+ l?: string;
63
+ c?: string;
64
+ v?: string;
65
+ oi?: string;
66
+ bp1?: string;
67
+ sp1?: string;
68
+ bq1?: string;
69
+ sq1?: string;
70
+ ft?: string;
71
+ [key: string]: unknown;
72
+ }
73
+ export interface ShoonyaHolding {
74
+ exch_tsym: Array<{
75
+ exch: string;
76
+ tsym: string;
77
+ token: string;
78
+ }>;
79
+ holdqty: string;
80
+ dpqty: string;
81
+ npoadqty: string;
82
+ btstqty: string;
83
+ usedqty: string;
84
+ upldprc: string;
85
+ isin: string;
86
+ lp?: string;
87
+ [key: string]: unknown;
88
+ }
89
+ export interface ShoonyaQuote {
90
+ tsym: string;
91
+ exch: string;
92
+ lp: string;
93
+ o: string;
94
+ h: string;
95
+ l: string;
96
+ c: string;
97
+ v: string;
98
+ oi?: string;
99
+ bp1: string;
100
+ sp1: string;
101
+ bq1: string;
102
+ sq1: string;
103
+ uc?: string;
104
+ lc?: string;
105
+ ft?: string;
106
+ [key: string]: unknown;
107
+ }
108
+ /** Convert unified order params to Shoonya API format. */
109
+ export declare function toOrderParams(unified: UnifiedOrderParams, uid: string, actid: string): ShoonyaOrderParams;
110
+ /** Convert a Shoonya position object to a UnifiedPosition. */
111
+ export declare function fromPosition(pos: ShoonyaPosition): UnifiedPosition;
112
+ /** Convert a Shoonya order to a UnifiedOrder. */
113
+ export declare function fromOrder(order: ShoonyaOrder): UnifiedOrder;
114
+ /** Convert a Shoonya WebSocket tick to UnifiedTick. */
115
+ export declare function fromTick(tick: ShoonyaTick, symbolLookup?: string): UnifiedTick;
116
+ /** Convert a Shoonya holding to UnifiedHolding. */
117
+ export declare function fromHolding(holding: ShoonyaHolding): UnifiedHolding;
118
+ /** Convert a Shoonya quote response to unified Quote. */
119
+ export declare function fromQuote(quote: ShoonyaQuote): Quote;
120
+ //# sourceMappingURL=finvasia-mapper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"finvasia-mapper.d.ts","sourceRoot":"","sources":["../../../src/brokers/finvasia/finvasia-mapper.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Finvasia (Shoonya) WebSocket adapter.
3
+ * Connects to the Shoonya NorenWSTP endpoint for live tick data.
4
+ * Maps incoming JSON tick messages to UnifiedTick.
5
+ */
6
+ import type { WSConnectionState } from '../../types/common';
7
+ import type { TickCallback, Subscription } from '../../types/broker';
8
+ export declare class FinvasiaSocket {
9
+ private ws;
10
+ private state;
11
+ private subscriptions;
12
+ private tokenToSymbol;
13
+ private subscribedTokens;
14
+ private readonly userId;
15
+ private readonly accessToken;
16
+ private reconnectAttempts;
17
+ private maxReconnects;
18
+ private reconnectTimer;
19
+ constructor(userId: string, accessToken: string);
20
+ /** Connect to the Shoonya WebSocket endpoint. */
21
+ connect(): void;
22
+ /** Gracefully disconnect. */
23
+ disconnect(): void;
24
+ /**
25
+ * Subscribe to tokens for tick data.
26
+ * Tokens should be in "EXCHANGE|TOKEN" format (e.g. "NSE|26000").
27
+ */
28
+ subscribe(tokens: string[], callback: TickCallback, symbolMap?: Map<string, string>): Subscription;
29
+ /** Unsubscribe from a previously created subscription. */
30
+ unsubscribe(sub: Subscription): void;
31
+ /** Current connection state. */
32
+ getConnectionState(): WSConnectionState;
33
+ /** Register symbol lookups for token resolution. */
34
+ setSymbolMap(map: Map<string, string>): void;
35
+ private handleMessage;
36
+ private sendSubscribe;
37
+ private sendUnsubscribe;
38
+ private dispatchTick;
39
+ private attemptReconnect;
40
+ private clearReconnectTimer;
41
+ }
42
+ //# sourceMappingURL=finvasia-socket.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"finvasia-socket.d.ts","sourceRoot":"","sources":["../../../src/brokers/finvasia/finvasia-socket.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,KAAK,EAAe,YAAY,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAelF,qBAAa,cAAc;IACzB,OAAO,CAAC,EAAE,CAA0B;IACpC,OAAO,CAAC,KAAK,CAAqC;IAClD,OAAO,CAAC,aAAa,CAAmC;IACxD,OAAO,CAAC,aAAa,CAA6B;IAClD,OAAO,CAAC,gBAAgB,CAAqB;IAE7C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,iBAAiB,CAAK;IAC9B,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,cAAc,CAA8C;gBAExD,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM;IAK/C,iDAAiD;IACjD,OAAO,IAAI,IAAI;IA2Cf,6BAA6B;IAC7B,UAAU,IAAI,IAAI;IAWlB;;;OAGG;IACH,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,YAAY,EAAE,SAAS,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,YAAY;IAuBlG,0DAA0D;IAC1D,WAAW,CAAC,GAAG,EAAE,YAAY,GAAG,IAAI;IAuBpC,gCAAgC;IAChC,kBAAkB,IAAI,iBAAiB;IAIvC,oDAAoD;IACpD,YAAY,CAAC,GAAG,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI;IAQ5C,OAAO,CAAC,aAAa;IA2BrB,OAAO,CAAC,aAAa;IAWrB,OAAO,CAAC,eAAe;IAUvB,OAAO,CAAC,YAAY;IAYpB,OAAO,CAAC,gBAAgB;IAYxB,OAAO,CAAC,mBAAmB;CAM5B"}
@@ -0,0 +1,8 @@
1
+ export { FinvasiaBroker } from './FinvasiaBroker';
2
+ export { FinvasiaBroker as default } from './FinvasiaBroker';
3
+ export { FinvasiaSocket } from './finvasia-socket';
4
+ export { FinvasiaInstruments } from './finvasia-instruments';
5
+ export * as finvasiaAuth from './finvasia-auth';
6
+ export * as finvasiaMapper from './finvasia-mapper';
7
+ export { SHOONYA_API_BASE, EXCHANGE_TO_SHOONYA, CANDLE_INTERVAL_TO_SHOONYA, } from './finvasia-constants';
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/brokers/finvasia/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,cAAc,IAAI,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,KAAK,YAAY,MAAM,iBAAiB,CAAC;AAChD,OAAO,KAAK,cAAc,MAAM,mBAAmB,CAAC;AACpD,OAAO,EACL,gBAAgB,EAChB,mBAAmB,EACnB,0BAA0B,GAC3B,MAAM,sBAAsB,CAAC"}
@@ -0,0 +1,76 @@
1
+ /**
2
+ * PaperBroker — IBroker implementation for simulated paper trading.
3
+ *
4
+ * Uses the PaperFillEngine to simulate order fills against live LTP data.
5
+ * Maintains an in-memory portfolio with positions, balance tracking, and order history.
6
+ *
7
+ * Paper broker does not connect to any real exchange. It requires a live data
8
+ * source (another IBroker) to be injected for LTP / tick feeds.
9
+ */
10
+ import type { BrokerId, CandleInterval, WSConnectionState } from '../../types/common';
11
+ import type { BrokerCredentials, AuthSession, UnifiedOrderParams, ModifyParams, OrderResult, CancelResult, UnifiedOrder, OrderUpdate, UnifiedPosition, UnifiedHolding, UnifiedTick, Quote, OptionChainRow, Candle, MarginInfo, FundInfo, Trade, PnLEntry, TickCallback, Subscription } from '../../types/broker';
12
+ import type { IBrokerInstruments } from '../../types/instruments';
13
+ import type { IBroker } from '../../interfaces/broker.interface';
14
+ import { type Result } from '../../errors/result';
15
+ import { type FillEngineConfig } from './paper-fill-engine';
16
+ export declare class PaperBroker implements IBroker {
17
+ readonly id: BrokerId;
18
+ readonly name = "Paper Trading";
19
+ readonly instruments: IBrokerInstruments;
20
+ private session;
21
+ private engine;
22
+ private positions;
23
+ private ltpCache;
24
+ private orderHistory;
25
+ private trades;
26
+ private balance;
27
+ private initialBalance;
28
+ private subscriptions;
29
+ private connectionState;
30
+ /** Optional: inject a live data source for LTP and ticks. */
31
+ private dataSource;
32
+ private dataSourceSub;
33
+ private subIdCounter;
34
+ constructor(config?: {
35
+ initialBalance?: number;
36
+ fillConfig?: Partial<FillEngineConfig>;
37
+ });
38
+ /** Inject a live data source for market data forwarding. */
39
+ setDataSource(broker: IBroker): void;
40
+ authenticate(_creds: BrokerCredentials): Promise<Result<AuthSession>>;
41
+ refreshSession(_session: AuthSession): Promise<Result<AuthSession>>;
42
+ isSessionValid(): boolean;
43
+ getSessionExpiry(): Date | null;
44
+ placeOrder(params: UnifiedOrderParams): Promise<Result<OrderResult>>;
45
+ modifyOrder(orderId: string, params: ModifyParams): Promise<Result<OrderResult>>;
46
+ cancelOrder(orderId: string): Promise<Result<CancelResult>>;
47
+ getOrders(): Promise<Result<UnifiedOrder[]>>;
48
+ getOrderHistory(orderId: string): Promise<Result<OrderUpdate[]>>;
49
+ getPositions(): Promise<Result<UnifiedPosition[]>>;
50
+ getHoldings(): Promise<Result<UnifiedHolding[]>>;
51
+ getLTP(symbols: string[]): Promise<Result<Map<string, number>>>;
52
+ getQuote(symbols: string[]): Promise<Result<Map<string, Quote>>>;
53
+ getOptionChain(underlying: string, expiry: Date): Promise<Result<OptionChainRow[]>>;
54
+ getCandles(symbol: string, interval: CandleInterval, from: Date, to: Date): Promise<Result<Candle[]>>;
55
+ subscribeTicks(tokens: string[], cb: TickCallback): Subscription;
56
+ unsubscribeTicks(sub: Subscription): void;
57
+ getConnectionState(): WSConnectionState;
58
+ getMargins(): Promise<Result<MarginInfo>>;
59
+ getFunds(): Promise<Result<FundInfo>>;
60
+ getTradeHistory(_from: Date, _to: Date): Promise<Result<Trade[]>>;
61
+ getPnLReport(_from: Date, _to: Date): Promise<Result<PnLEntry[]>>;
62
+ /** Get the current cash balance. */
63
+ getBalance(): number;
64
+ /** Get the initial balance. */
65
+ getInitialBalance(): number;
66
+ /** Manually update the LTP cache (for testing or external data feeds). */
67
+ updateLTP(symbol: string, price: number): void;
68
+ /** Feed a tick directly into the engine (without WebSocket subscription). */
69
+ feedTick(tick: UnifiedTick): void;
70
+ /** Reset the paper broker to initial state. */
71
+ reset(): void;
72
+ private onOrderFill;
73
+ private updatePositionOnFill;
74
+ private pendingToUnified;
75
+ }
76
+ //# sourceMappingURL=PaperBroker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PaperBroker.d.ts","sourceRoot":"","sources":["../../../src/brokers/paper/PaperBroker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export { PaperBroker } from './PaperBroker';
2
+ export { PaperBroker as default } from './PaperBroker';
3
+ export { PaperFillEngine, type FillEngineConfig, type PendingOrder, } from './paper-fill-engine';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/brokers/paper/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,WAAW,IAAI,OAAO,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,EACL,eAAe,EACf,KAAK,gBAAgB,EACrB,KAAK,YAAY,GAClB,MAAM,qBAAqB,CAAC"}
@@ -0,0 +1,105 @@
1
+ /**
2
+ * Paper trading fill engine.
3
+ * Simulates order fills against live LTP data with configurable slippage.
4
+ *
5
+ * Fill logic:
6
+ * - MARKET → fill immediately at LTP + slippage
7
+ * - LIMIT → pending; check on each tick (BUY: fill when ltp <= price, SELL: fill when ltp >= price)
8
+ * - SL → trigger check, then LIMIT/MARKET fill
9
+ * - SL_M → trigger check, then MARKET fill
10
+ *
11
+ * Slippage model: baseSlippage + (quantity / avgVolume) * impactFactor
12
+ * Pure computation functions + a stateful engine class.
13
+ */
14
+ import type { OrderType, OrderStatus } from '../../types/common';
15
+ import type { UnifiedOrderParams, UnifiedTick, OrderResult, OrderUpdate } from '../../types/broker';
16
+ export interface FillEngineConfig {
17
+ /** Base slippage in percentage points (e.g., 0.05 = 0.05%). Default: 0.05 */
18
+ baseSlippagePct: number;
19
+ /** Market impact factor. Higher = more slippage for large orders. Default: 0.1 */
20
+ impactFactor: number;
21
+ /** Default average daily volume for slippage calc when unknown. Default: 100000 */
22
+ defaultAvgVolume: number;
23
+ /** Partial fill probability (0-1). 0 = always full fill. Default: 0 */
24
+ partialFillProb: number;
25
+ }
26
+ export declare const DEFAULT_FILL_CONFIG: FillEngineConfig;
27
+ export interface PendingOrder {
28
+ orderId: string;
29
+ params: UnifiedOrderParams;
30
+ status: OrderStatus;
31
+ filledQty: number;
32
+ averagePrice: number;
33
+ createdAt: number;
34
+ updatedAt: number;
35
+ triggered: boolean;
36
+ }
37
+ /**
38
+ * Calculate slippage amount for a given price, quantity, and config.
39
+ * Returns the absolute slippage to add/subtract from the fill price.
40
+ */
41
+ export declare function calculateSlippage(price: number, quantity: number, avgVolume: number, config: FillEngineConfig): number;
42
+ /**
43
+ * Compute the fill price for a MARKET order with slippage applied.
44
+ * BUY orders get a higher fill price, SELL orders get a lower fill price.
45
+ */
46
+ export declare function computeMarketFillPrice(ltp: number, side: 'BUY' | 'SELL', quantity: number, avgVolume: number, config: FillEngineConfig): number;
47
+ /**
48
+ * Check if a LIMIT order should fill based on the current tick.
49
+ * BUY LIMIT fills when ltp <= limit price.
50
+ * SELL LIMIT fills when ltp >= limit price.
51
+ */
52
+ export declare function shouldLimitFill(side: 'BUY' | 'SELL', limitPrice: number, ltp: number): boolean;
53
+ /**
54
+ * Check if a stop-loss trigger has been hit.
55
+ * BUY SL triggers when ltp >= trigger price.
56
+ * SELL SL triggers when ltp <= trigger price.
57
+ */
58
+ export declare function shouldTrigger(side: 'BUY' | 'SELL', triggerPrice: number, ltp: number): boolean;
59
+ /**
60
+ * Determine fill quantity, potentially doing partial fills.
61
+ */
62
+ export declare function determineFillQty(remainingQty: number, partialFillProb: number): number;
63
+ export declare class PaperFillEngine {
64
+ private pendingOrders;
65
+ private config;
66
+ private avgVolumes;
67
+ private onFill?;
68
+ private onReject?;
69
+ constructor(config?: Partial<FillEngineConfig>);
70
+ /** Register a callback for when orders are filled. */
71
+ setFillCallback(cb: (orderId: string, update: OrderUpdate) => void): void;
72
+ /** Register a callback for when orders are rejected. */
73
+ setRejectCallback(cb: (orderId: string, reason: string) => void): void;
74
+ /** Set average volume for a symbol (used in slippage calculation). */
75
+ setAvgVolume(symbol: string, volume: number): void;
76
+ /** Submit a new order. Returns an immediate OrderResult. */
77
+ submitOrder(params: UnifiedOrderParams, ltp?: number): OrderResult;
78
+ /** Cancel a pending order. Returns true if successfully cancelled. */
79
+ cancelOrder(orderId: string): boolean;
80
+ /** Modify a pending order. Returns true if the order was found and modified. */
81
+ modifyOrder(orderId: string, changes: {
82
+ price?: number;
83
+ quantity?: number;
84
+ triggerPrice?: number;
85
+ type?: OrderType;
86
+ }): boolean;
87
+ /**
88
+ * Process a tick against all pending orders.
89
+ * This is the main fill-check loop. Call this for every incoming tick.
90
+ */
91
+ processTick(tick: UnifiedTick): void;
92
+ /** Get all pending orders. */
93
+ getPendingOrders(): PendingOrder[];
94
+ /** Get a specific order by ID. */
95
+ getOrder(orderId: string): PendingOrder | undefined;
96
+ /** Get all orders (including filled/cancelled). */
97
+ getAllOrders(): PendingOrder[];
98
+ /** Reset the engine, clearing all orders. */
99
+ reset(): void;
100
+ private checkAndFill;
101
+ private fillAtMarket;
102
+ private applyFill;
103
+ private notifyFill;
104
+ }
105
+ //# sourceMappingURL=paper-fill-engine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paper-fill-engine.d.ts","sourceRoot":"","sources":["../../../src/brokers/paper/paper-fill-engine.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,52 @@
1
+ /**
2
+ * ZerodhaBroker — Full IBroker implementation for Zerodha Kite Connect.
3
+ *
4
+ * Delegates to:
5
+ * - zerodha-auth for authentication
6
+ * - zerodha-mapper for data translation
7
+ * - zerodha-socket for WebSocket ticks
8
+ * - zerodha-instruments for instrument data
9
+ *
10
+ * Uses the kiteconnect SDK under the hood for HTTP calls.
11
+ */
12
+ import type { BrokerId, CandleInterval, WSConnectionState } from '../../types/common';
13
+ import type { BrokerCredentials, AuthSession, UnifiedOrderParams, ModifyParams, OrderResult, CancelResult, UnifiedOrder, OrderUpdate, UnifiedPosition, UnifiedHolding, Quote, OptionChainRow, Candle, MarginInfo, FundInfo, Trade, PnLEntry, TickCallback, Subscription } from '../../types/broker';
14
+ import type { IBrokerInstruments } from '../../types/instruments';
15
+ import type { IBroker } from '../../interfaces/broker.interface';
16
+ import { type Result } from '../../errors/result';
17
+ export declare class ZerodhaBroker implements IBroker {
18
+ readonly id: BrokerId;
19
+ readonly name = "Zerodha";
20
+ readonly instruments: IBrokerInstruments;
21
+ private session;
22
+ private kite;
23
+ private socket;
24
+ private apiKey;
25
+ private KiteConnect;
26
+ constructor();
27
+ authenticate(creds: BrokerCredentials): Promise<Result<AuthSession>>;
28
+ refreshSession(session: AuthSession): Promise<Result<AuthSession>>;
29
+ isSessionValid(): boolean;
30
+ getSessionExpiry(): Date | null;
31
+ placeOrder(params: UnifiedOrderParams): Promise<Result<OrderResult>>;
32
+ modifyOrder(orderId: string, params: ModifyParams): Promise<Result<OrderResult>>;
33
+ cancelOrder(orderId: string): Promise<Result<CancelResult>>;
34
+ getOrders(): Promise<Result<UnifiedOrder[]>>;
35
+ getOrderHistory(orderId: string): Promise<Result<OrderUpdate[]>>;
36
+ getPositions(): Promise<Result<UnifiedPosition[]>>;
37
+ getHoldings(): Promise<Result<UnifiedHolding[]>>;
38
+ getLTP(symbols: string[]): Promise<Result<Map<string, number>>>;
39
+ getQuote(symbols: string[]): Promise<Result<Map<string, Quote>>>;
40
+ getOptionChain(_underlying: string, _expiry: Date): Promise<Result<OptionChainRow[]>>;
41
+ getCandles(symbol: string, interval: CandleInterval, from: Date, to: Date): Promise<Result<Candle[]>>;
42
+ subscribeTicks(tokens: string[], cb: TickCallback): Subscription;
43
+ unsubscribeTicks(sub: Subscription): void;
44
+ getConnectionState(): WSConnectionState;
45
+ getMargins(): Promise<Result<MarginInfo>>;
46
+ getFunds(): Promise<Result<FundInfo>>;
47
+ getTradeHistory(_from: Date, _to: Date): Promise<Result<Trade[]>>;
48
+ getPnLReport(_from: Date, _to: Date): Promise<Result<PnLEntry[]>>;
49
+ private ensureKite;
50
+ private ensureSocket;
51
+ }
52
+ //# sourceMappingURL=ZerodhaBroker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ZerodhaBroker.d.ts","sourceRoot":"","sources":["../../../src/brokers/zerodha/ZerodhaBroker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ export { ZerodhaBroker } from './ZerodhaBroker';
2
+ export { ZerodhaBroker as default } from './ZerodhaBroker';
3
+ export { ZerodhaSocket } from './zerodha-socket';
4
+ export { ZerodhaInstruments } from './zerodha-instruments';
5
+ export * as zerodhaAuth from './zerodha-auth';
6
+ export * as zerodhaMapper from './zerodha-mapper';
7
+ export { KITE_INSTRUMENTS_URL, EXCHANGE_TO_KITE, EXCHANGE_FROM_KITE, CANDLE_INTERVAL_TO_KITE, } from './zerodha-constants';
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/brokers/zerodha/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,aAAa,IAAI,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,KAAK,WAAW,MAAM,gBAAgB,CAAC;AAC9C,OAAO,KAAK,aAAa,MAAM,kBAAkB,CAAC;AAClD,OAAO,EACL,oBAAoB,EACpB,gBAAgB,EAChB,kBAAkB,EAClB,uBAAuB,GACxB,MAAM,qBAAqB,CAAC"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Zerodha Kite Connect OAuth flow.
3
+ * - User visits login URL, broker redirects back with a request_token
4
+ * - Exchange the request_token + api_key + checksum for an access_token
5
+ * - Zerodha does NOT support refresh tokens; sessions last until next login.
6
+ */
7
+ import type { AuthSession, BrokerCredentials } from '../../types/broker';
8
+ import { type Result } from '../../errors/result';
9
+ /** Generate the Kite Connect login URL the user should visit. */
10
+ export declare function generateLoginUrl(apiKey: string): string;
11
+ /**
12
+ * Exchange a one-time request_token for an access token.
13
+ * This hits the Kite Connect /session/token endpoint.
14
+ */
15
+ export declare function exchangeToken(requestToken: string, apiKey: string, apiSecret: string): Promise<Result<AuthSession>>;
16
+ /**
17
+ * Authenticate using credentials (convenience wrapper).
18
+ * Expects creds.apiKey, creds.apiSecret, and creds.accessToken (request_token).
19
+ */
20
+ export declare function authenticate(creds: BrokerCredentials): Promise<Result<AuthSession>>;
21
+ /**
22
+ * Zerodha does not support session refresh.
23
+ * Always returns Err directing user to re-authenticate.
24
+ */
25
+ export declare function refreshSession(_session: AuthSession): Promise<Result<AuthSession>>;
26
+ /** Check if a session is still valid based on expiry timestamp. */
27
+ export declare function isSessionValid(session: AuthSession | null): boolean;
28
+ //# sourceMappingURL=zerodha-auth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zerodha-auth.d.ts","sourceRoot":"","sources":["../../../src/brokers/zerodha/zerodha-auth.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACzE,OAAO,EAAW,KAAK,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAe3D,iEAAiE;AACjE,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAEvD;AAED;;;GAGG;AACH,wBAAsB,aAAa,CACjC,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAuC9B;AAED;;;GAGG;AACH,wBAAsB,YAAY,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAQzF;AAED;;;GAGG;AACH,wBAAsB,cAAc,CAAC,QAAQ,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAExF;AAED,mEAAmE;AACnE,wBAAgB,cAAc,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI,GAAG,OAAO,CAGnE"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Zerodha Kite Connect API constant mappings.
3
+ * Maps unified nsekit enums to Kite-specific string values and back.
4
+ */
5
+ import type { Exchange, Product, OrderType, OrderStatus, Validity } from '../../types/common';
6
+ export declare const EXCHANGE_TO_KITE: Record<Exchange, string>;
7
+ export declare const EXCHANGE_FROM_KITE: Record<string, Exchange>;
8
+ export declare const PRODUCT_TO_KITE: Record<Product, string>;
9
+ export declare const PRODUCT_FROM_KITE: Record<string, Product>;
10
+ export declare const ORDER_TYPE_TO_KITE: Record<OrderType, string>;
11
+ export declare const ORDER_TYPE_FROM_KITE: Record<string, OrderType>;
12
+ export declare const SIDE_TO_KITE: Record<'BUY' | 'SELL', string>;
13
+ export declare const SIDE_FROM_KITE: Record<string, 'BUY' | 'SELL'>;
14
+ export declare const STATUS_FROM_KITE: Record<string, OrderStatus>;
15
+ export declare const VALIDITY_TO_KITE: Record<Validity, string>;
16
+ export declare const VALIDITY_FROM_KITE: Record<string, Validity>;
17
+ export declare const KITE_LOGIN_URL = "https://kite.zerodha.com/connect/login";
18
+ export declare const KITE_API_BASE = "https://api.kite.trade";
19
+ export declare const KITE_INSTRUMENTS_URL = "https://api.kite.trade/instruments";
20
+ export declare const CANDLE_INTERVAL_TO_KITE: Record<string, string>;
21
+ //# sourceMappingURL=zerodha-constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zerodha-constants.d.ts","sourceRoot":"","sources":["../../../src/brokers/zerodha/zerodha-constants.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAI9F,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,CAOrD,CAAC;AAEF,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAOvD,CAAC;AAIF,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,CAInD,CAAC;AAEF,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAIrD,CAAC;AAIF,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,CAKxD,CAAC;AAEF,eAAO,MAAM,oBAAoB,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAK1D,CAAC;AAIF,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,KAAK,GAAG,MAAM,EAAE,MAAM,CAGvD,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,GAAG,MAAM,CAGzD,CAAC;AAIF,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAYxD,CAAC;AAIF,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,CAGrD,CAAC;AAEF,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAGvD,CAAC;AAIF,eAAO,MAAM,cAAc,2CAA2C,CAAC;AACvE,eAAO,MAAM,aAAa,2BAA2B,CAAC;AACtD,eAAO,MAAM,oBAAoB,uCAAuC,CAAC;AAIzE,eAAO,MAAM,uBAAuB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAM1D,CAAC"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Zerodha instruments adapter.
3
+ * Implements IBrokerInstruments for the Kite Connect instrument dump.
4
+ *
5
+ * Kite provides a single large CSV at https://api.kite.trade/instruments
6
+ * containing all exchanges. No search API is available.
7
+ */
8
+ import type { Exchange } from '../../types/common';
9
+ import type { IBrokerInstruments, RawBrokerInstrument, BrokerInstrumentEntry } from '../../types/instruments';
10
+ import type { Result } from '../../errors/result';
11
+ export declare class ZerodhaInstruments implements IBrokerInstruments {
12
+ readonly capabilities: {
13
+ bulkDump: true;
14
+ searchAPI: false;
15
+ rawFileCache: true;
16
+ rawFilePath: string;
17
+ };
18
+ /**
19
+ * Stream the Kite instruments CSV as an async iterable of raw row objects.
20
+ * Each yielded object has string keys matching CSV column headers.
21
+ */
22
+ streamDump(): AsyncIterable<RawBrokerInstrument>;
23
+ /** Check if the dump has changed since last sync using ETag / Last-Modified. */
24
+ checkDumpChanged(lastSync: {
25
+ etag?: string;
26
+ lastModified?: string;
27
+ }): Promise<boolean>;
28
+ /**
29
+ * Resolve a single instrument by exact tradingSymbol and exchange.
30
+ * Zerodha has no search API, so this streams the dump and finds the first match.
31
+ */
32
+ resolve(symbol: string, exchange: Exchange): Promise<Result<BrokerInstrumentEntry>>;
33
+ /** Normalize a raw CSV row into a BrokerInstrumentEntry. */
34
+ normalize(raw: RawBrokerInstrument): BrokerInstrumentEntry;
35
+ }
36
+ //# sourceMappingURL=zerodha-instruments.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zerodha-instruments.d.ts","sourceRoot":"","sources":["../../../src/brokers/zerodha/zerodha-instruments.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAkB,MAAM,oBAAoB,CAAC;AACnE,OAAO,KAAK,EACV,kBAAkB,EAClB,mBAAmB,EACnB,qBAAqB,EACtB,MAAM,yBAAyB,CAAC;AACjC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AA8DlD,qBAAa,kBAAmB,YAAW,kBAAkB;IAC3D,QAAQ,CAAC,YAAY;;;;;MAKnB;IAEF;;;OAGG;IACI,UAAU,IAAI,aAAa,CAAC,mBAAmB,CAAC;IAmDvD,gFAAgF;IAC1E,gBAAgB,CAAC,QAAQ,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,OAAO,CAAC;IAY5F;;;OAGG;IACG,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC;IAgBzF,4DAA4D;IAC5D,SAAS,CAAC,GAAG,EAAE,mBAAmB,GAAG,qBAAqB;CA8B3D"}