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,51 @@
1
+ /**
2
+ * DhanBroker — Full IBroker implementation for Dhan.
3
+ *
4
+ * Delegates to:
5
+ * - dhan-auth for client_id + access_token authentication
6
+ * - dhan-mapper for data translation (uses securityId)
7
+ * - dhan-socket for WebSocket ticks
8
+ * - dhan-instruments for instrument data
9
+ *
10
+ * Uses the Dhan v2 REST API directly via fetch.
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 DhanBroker implements IBroker {
18
+ readonly id: BrokerId;
19
+ readonly name = "Dhan";
20
+ readonly instruments: IBrokerInstruments;
21
+ private session;
22
+ private socket;
23
+ private clientId;
24
+ private readonly instrumentsImpl;
25
+ constructor();
26
+ authenticate(creds: BrokerCredentials): Promise<Result<AuthSession>>;
27
+ refreshSession(session: AuthSession): Promise<Result<AuthSession>>;
28
+ isSessionValid(): boolean;
29
+ getSessionExpiry(): Date | null;
30
+ placeOrder(params: UnifiedOrderParams): Promise<Result<OrderResult>>;
31
+ modifyOrder(orderId: string, params: ModifyParams): Promise<Result<OrderResult>>;
32
+ cancelOrder(orderId: string): Promise<Result<CancelResult>>;
33
+ getOrders(): Promise<Result<UnifiedOrder[]>>;
34
+ getOrderHistory(orderId: string): Promise<Result<OrderUpdate[]>>;
35
+ getPositions(): Promise<Result<UnifiedPosition[]>>;
36
+ getHoldings(): Promise<Result<UnifiedHolding[]>>;
37
+ getLTP(symbols: string[]): Promise<Result<Map<string, number>>>;
38
+ getQuote(symbols: string[]): Promise<Result<Map<string, Quote>>>;
39
+ getOptionChain(underlying: string, expiry: Date): Promise<Result<OptionChainRow[]>>;
40
+ getCandles(symbol: string, interval: CandleInterval, from: Date, to: Date): Promise<Result<Candle[]>>;
41
+ subscribeTicks(tokens: string[], cb: TickCallback): Subscription;
42
+ unsubscribeTicks(sub: Subscription): void;
43
+ getConnectionState(): WSConnectionState;
44
+ getMargins(): Promise<Result<MarginInfo>>;
45
+ getFunds(): Promise<Result<FundInfo>>;
46
+ getTradeHistory(from: Date, to: Date): Promise<Result<Trade[]>>;
47
+ getPnLReport(_from: Date, _to: Date): Promise<Result<PnLEntry[]>>;
48
+ private request;
49
+ private ensureSocket;
50
+ }
51
+ //# sourceMappingURL=DhanBroker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DhanBroker.d.ts","sourceRoot":"","sources":["../../../src/brokers/dhan/DhanBroker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Dhan authentication flow.
3
+ * Dhan uses a simple client_id + access_token pair.
4
+ * The access_token is generated from the Dhan developer portal
5
+ * and typically has a longer validity (30 days or until revoked).
6
+ *
7
+ * There is no OAuth redirect flow — tokens are pre-generated.
8
+ */
9
+ import type { AuthSession, BrokerCredentials } from '../../types/broker';
10
+ import { type Result } from '../../errors/result';
11
+ /**
12
+ * Authenticate with Dhan using client_id and access_token.
13
+ *
14
+ * Required credentials:
15
+ * - apiKey: The access_token from Dhan developer portal
16
+ * - userId: The Dhan client ID
17
+ *
18
+ * Validates the token by fetching the user profile.
19
+ */
20
+ export declare function authenticate(creds: BrokerCredentials): Promise<Result<AuthSession>>;
21
+ /**
22
+ * Dhan tokens are pre-generated and do not support refresh.
23
+ * When a token expires, the user must generate a new one from the portal.
24
+ */
25
+ export declare function refreshSession(_session: AuthSession): Promise<Result<AuthSession>>;
26
+ /** Check if session is still valid based on expiry timestamp. */
27
+ export declare function isSessionValid(session: AuthSession | null): boolean;
28
+ //# sourceMappingURL=dhan-auth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dhan-auth.d.ts","sourceRoot":"","sources":["../../../src/brokers/dhan/dhan-auth.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACzE,OAAO,EAAW,KAAK,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAc3D;;;;;;;;GAQG;AACH,wBAAsB,YAAY,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAwCzF;AAED;;;GAGG;AACH,wBAAsB,cAAc,CAAC,QAAQ,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAExF;AAED,iEAAiE;AACjE,wBAAgB,cAAc,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI,GAAG,OAAO,CAGnE"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Dhan API constant mappings.
3
+ * Maps unified nsekit enums to Dhan-specific string values and back.
4
+ */
5
+ import type { Exchange, Product, OrderType, OrderStatus, Validity } from '../../types/common';
6
+ export declare const EXCHANGE_TO_DHAN: Record<Exchange, string>;
7
+ export declare const EXCHANGE_FROM_DHAN: Record<string, Exchange>;
8
+ export declare const PRODUCT_TO_DHAN: Record<Product, string>;
9
+ export declare const PRODUCT_FROM_DHAN: Record<string, Product>;
10
+ export declare const ORDER_TYPE_TO_DHAN: Record<OrderType, string>;
11
+ export declare const ORDER_TYPE_FROM_DHAN: Record<string, OrderType>;
12
+ export declare const SIDE_TO_DHAN: Record<'BUY' | 'SELL', string>;
13
+ export declare const SIDE_FROM_DHAN: Record<string, 'BUY' | 'SELL'>;
14
+ export declare const STATUS_FROM_DHAN: Record<string, OrderStatus>;
15
+ export declare const VALIDITY_TO_DHAN: Record<Validity, string>;
16
+ export declare const VALIDITY_FROM_DHAN: Record<string, Validity>;
17
+ export declare const DHAN_API_BASE = "https://api.dhan.co/v2";
18
+ export declare const DHAN_WS_URL = "wss://api-feed.dhan.co";
19
+ export declare const DHAN_INSTRUMENTS_URL = "https://images.dhan.co/api-data/api-scrip-master.csv";
20
+ export declare const CANDLE_INTERVAL_TO_DHAN: Record<string, string>;
21
+ //# sourceMappingURL=dhan-constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dhan-constants.d.ts","sourceRoot":"","sources":["../../../src/brokers/dhan/dhan-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,CAOrD,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,CAQxD,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,aAAa,2BAA2B,CAAC;AACtD,eAAO,MAAM,WAAW,2BAA2B,CAAC;AACpD,eAAO,MAAM,oBAAoB,yDAAyD,CAAC;AAI3F,eAAO,MAAM,uBAAuB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAM1D,CAAC"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * Dhan instruments adapter.
3
+ * Implements IBrokerInstruments for the Dhan scrip master CSV.
4
+ *
5
+ * Dhan provides a single compact CSV file at:
6
+ * https://images.dhan.co/api-data/api-scrip-master.csv
7
+ *
8
+ * Also supports a search API via /v2/search endpoint.
9
+ */
10
+ import type { Exchange } from '../../types/common';
11
+ import type { IBrokerInstruments, RawBrokerInstrument, BrokerInstrumentEntry } from '../../types/instruments';
12
+ import type { Result } from '../../errors/result';
13
+ export declare class DhanInstruments implements IBrokerInstruments {
14
+ readonly capabilities: {
15
+ bulkDump: true;
16
+ searchAPI: true;
17
+ rawFileCache: true;
18
+ rawFilePath: string;
19
+ };
20
+ private accessToken;
21
+ private clientId;
22
+ /** Set credentials needed for search API calls. */
23
+ setCredentials(clientId: string, accessToken: string): void;
24
+ /**
25
+ * Stream the Dhan scrip master CSV as an async iterable of raw row objects.
26
+ */
27
+ streamDump(): AsyncIterable<RawBrokerInstrument>;
28
+ /** Check if dump has changed. */
29
+ checkDumpChanged(lastSync: {
30
+ etag?: string;
31
+ lastModified?: string;
32
+ }): Promise<boolean>;
33
+ /**
34
+ * Search for instruments using the Dhan search API.
35
+ */
36
+ search(query: string, exchange?: Exchange): Promise<Result<BrokerInstrumentEntry[]>>;
37
+ /**
38
+ * Resolve a single instrument by exact tradingSymbol and exchange.
39
+ * Uses the Dhan search API and filters for an exact match.
40
+ */
41
+ resolve(symbol: string, exchange: Exchange): Promise<Result<BrokerInstrumentEntry>>;
42
+ /** Normalize a raw CSV row into a BrokerInstrumentEntry. */
43
+ normalize(raw: RawBrokerInstrument): BrokerInstrumentEntry;
44
+ }
45
+ //# sourceMappingURL=dhan-instruments.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dhan-instruments.d.ts","sourceRoot":"","sources":["../../../src/brokers/dhan/dhan-instruments.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;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;AA6DlD,qBAAa,eAAgB,YAAW,kBAAkB;IACxD,QAAQ,CAAC,YAAY;;;;;MAKnB;IAEF,OAAO,CAAC,WAAW,CAAM;IACzB,OAAO,CAAC,QAAQ,CAAM;IAEtB,mDAAmD;IACnD,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI;IAK3D;;OAEG;IACI,UAAU,IAAI,aAAa,CAAC,mBAAmB,CAAC;IAoDvD,iCAAiC;IAC3B,gBAAgB,CAAC,QAAQ,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,OAAO,CAAC;IAgB5F;;OAEG;IACG,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,qBAAqB,EAAE,CAAC,CAAC;IAmD1F;;;OAGG;IACG,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC;IAWzF,4DAA4D;IAC5D,SAAS,CAAC,GAAG,EAAE,mBAAmB,GAAG,qBAAqB;CA+B3D"}
@@ -0,0 +1,128 @@
1
+ /**
2
+ * Dhan API mapper.
3
+ * Pure functions that translate between unified nsekit types and Dhan API formats.
4
+ * Dhan uses securityId as the primary instrument identifier.
5
+ * No side effects, no I/O.
6
+ */
7
+ import type { Exchange } from '../../types/common';
8
+ import type { UnifiedOrderParams, UnifiedPosition, UnifiedOrder, UnifiedTick, UnifiedHolding, Quote } from '../../types/broker';
9
+ export interface DhanOrderParams {
10
+ dhanClientId: string;
11
+ transactionType: string;
12
+ exchangeSegment: string;
13
+ productType: string;
14
+ orderType: string;
15
+ validity: string;
16
+ securityId: string;
17
+ quantity: number;
18
+ price?: number;
19
+ triggerPrice?: number;
20
+ disclosedQuantity?: number;
21
+ correlationId?: string;
22
+ }
23
+ export interface DhanPosition {
24
+ securityId: string;
25
+ tradingSymbol: string;
26
+ exchangeSegment: string;
27
+ productType: string;
28
+ positionType: string;
29
+ netQty: number;
30
+ buyQty: number;
31
+ sellQty: number;
32
+ buyAvg: number;
33
+ sellAvg: number;
34
+ dayBuyQty: number;
35
+ daySellQty: number;
36
+ dayBuyAvg: number;
37
+ daySellAvg: number;
38
+ realizedProfit: number;
39
+ unrealizedProfit: number;
40
+ multiplier: number;
41
+ [key: string]: unknown;
42
+ }
43
+ export interface DhanOrder {
44
+ orderId: string;
45
+ exchangeOrderId: string;
46
+ tradingSymbol: string;
47
+ securityId: string;
48
+ exchangeSegment: string;
49
+ transactionType: string;
50
+ orderType: string;
51
+ productType: string;
52
+ quantity: number;
53
+ filledQty: number;
54
+ remainingQuantity: number;
55
+ price: number;
56
+ triggerPrice: number;
57
+ averageTradedPrice: number;
58
+ orderStatus: string;
59
+ validity: string;
60
+ correlationId: string;
61
+ createTime: string;
62
+ updateTime: string;
63
+ [key: string]: unknown;
64
+ }
65
+ export interface DhanTick {
66
+ securityId: number;
67
+ LTP: number;
68
+ open: number;
69
+ high: number;
70
+ low: number;
71
+ close: number;
72
+ volume: number;
73
+ OI?: number;
74
+ bestBidPrice: number;
75
+ bestAskPrice: number;
76
+ bestBidQty: number;
77
+ bestAskQty: number;
78
+ exchangeSegment: string;
79
+ timestamp: number;
80
+ [key: string]: unknown;
81
+ }
82
+ export interface DhanHolding {
83
+ securityId: string;
84
+ tradingSymbol: string;
85
+ exchangeSegment: string;
86
+ isin: string;
87
+ totalQty: number;
88
+ dpQty: number;
89
+ t1Qty: number;
90
+ availableQty: number;
91
+ collateralQty: number;
92
+ avgCostPrice: number;
93
+ [key: string]: unknown;
94
+ }
95
+ export interface DhanQuote {
96
+ securityId: string;
97
+ LTP: number;
98
+ open: number;
99
+ high: number;
100
+ low: number;
101
+ close: number;
102
+ volume: number;
103
+ OI?: number;
104
+ bestBidPrice: number;
105
+ bestAskPrice: number;
106
+ bestBidQty: number;
107
+ bestAskQty: number;
108
+ upperCircuitLimit: number;
109
+ lowerCircuitLimit: number;
110
+ [key: string]: unknown;
111
+ }
112
+ /** Set the lookup map for tradingSymbol → securityId. */
113
+ export declare function setSecurityIdMap(map: Map<string, string>): void;
114
+ /** Resolve a securityId from a tradingSymbol, falling back to the symbol itself. */
115
+ export declare function resolveSecurityId(tradingSymbol: string): string;
116
+ /** Convert unified order params to Dhan API format. */
117
+ export declare function toOrderParams(unified: UnifiedOrderParams, clientId: string): DhanOrderParams;
118
+ /** Convert a Dhan position to UnifiedPosition. */
119
+ export declare function fromPosition(pos: DhanPosition): UnifiedPosition;
120
+ /** Convert a Dhan order to UnifiedOrder. */
121
+ export declare function fromOrder(order: DhanOrder): UnifiedOrder;
122
+ /** Convert a Dhan WebSocket tick to UnifiedTick. */
123
+ export declare function fromTick(tick: DhanTick, symbolLookup?: string): UnifiedTick;
124
+ /** Convert a Dhan holding to UnifiedHolding. */
125
+ export declare function fromHolding(holding: DhanHolding, ltp?: number): UnifiedHolding;
126
+ /** Convert a Dhan quote response to unified Quote. */
127
+ export declare function fromQuote(quote: DhanQuote, symbol: string, exchange: Exchange): Quote;
128
+ //# sourceMappingURL=dhan-mapper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dhan-mapper.d.ts","sourceRoot":"","sources":["../../../src/brokers/dhan/dhan-mapper.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,46 @@
1
+ /**
2
+ * Dhan WebSocket adapter.
3
+ * Connects to the Dhan Market Feed WebSocket for live tick data.
4
+ * Dhan uses a binary protocol over WebSocket.
5
+ */
6
+ import type { WSConnectionState } from '../../types/common';
7
+ import type { TickCallback, Subscription } from '../../types/broker';
8
+ export declare class DhanSocket {
9
+ private ws;
10
+ private state;
11
+ private subscriptions;
12
+ private tokenToSymbol;
13
+ private subscribedTokens;
14
+ private readonly clientId;
15
+ private readonly accessToken;
16
+ private reconnectAttempts;
17
+ private maxReconnects;
18
+ private reconnectTimer;
19
+ private heartbeatTimer;
20
+ constructor(clientId: string, accessToken: string);
21
+ /** Connect to the Dhan WebSocket endpoint. */
22
+ connect(): void;
23
+ /** Gracefully disconnect. */
24
+ disconnect(): void;
25
+ /**
26
+ * Subscribe to securityIds.
27
+ * Tokens should be in "EXCHANGE_SEGMENT:SECURITY_ID" format.
28
+ */
29
+ subscribe(tokens: string[], callback: TickCallback, symbolMap?: Map<string, string>): Subscription;
30
+ /** Unsubscribe from a subscription. */
31
+ unsubscribe(sub: Subscription): void;
32
+ /** Current connection state. */
33
+ getConnectionState(): WSConnectionState;
34
+ /** Register symbol lookups. */
35
+ setSymbolMap(map: Map<string, string>): void;
36
+ private handleBinaryMessage;
37
+ private handleJsonMessage;
38
+ private sendSubscribe;
39
+ private sendUnsubscribe;
40
+ private dispatchTick;
41
+ private startHeartbeat;
42
+ private stopHeartbeat;
43
+ private attemptReconnect;
44
+ private clearReconnectTimer;
45
+ }
46
+ //# sourceMappingURL=dhan-socket.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dhan-socket.d.ts","sourceRoot":"","sources":["../../../src/brokers/dhan/dhan-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;AA0BlF,qBAAa,UAAU;IACrB,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,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,iBAAiB,CAAK;IAC9B,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,cAAc,CAA8C;IACpE,OAAO,CAAC,cAAc,CAA+C;gBAEzD,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM;IAKjD,8CAA8C;IAC9C,OAAO,IAAI,IAAI;IAkDf,6BAA6B;IAC7B,UAAU,IAAI,IAAI;IAYlB;;;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,uCAAuC;IACvC,WAAW,CAAC,GAAG,EAAE,YAAY,GAAG,IAAI;IAsBpC,gCAAgC;IAChC,kBAAkB,IAAI,iBAAiB;IAIvC,+BAA+B;IAC/B,YAAY,CAAC,GAAG,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI;IAQ5C,OAAO,CAAC,mBAAmB;IAkC3B,OAAO,CAAC,iBAAiB;IAWzB,OAAO,CAAC,aAAa;IAoBrB,OAAO,CAAC,eAAe;IAoBvB,OAAO,CAAC,YAAY;IAYpB,OAAO,CAAC,cAAc;IAatB,OAAO,CAAC,aAAa;IAOrB,OAAO,CAAC,gBAAgB;IAYxB,OAAO,CAAC,mBAAmB;CAM5B"}
@@ -0,0 +1,8 @@
1
+ export { DhanBroker } from './DhanBroker';
2
+ export { DhanBroker as default } from './DhanBroker';
3
+ export { DhanSocket } from './dhan-socket';
4
+ export { DhanInstruments } from './dhan-instruments';
5
+ export * as dhanAuth from './dhan-auth';
6
+ export * as dhanMapper from './dhan-mapper';
7
+ export { DHAN_API_BASE, EXCHANGE_TO_DHAN, EXCHANGE_FROM_DHAN, CANDLE_INTERVAL_TO_DHAN, } from './dhan-constants';
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/brokers/dhan/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,UAAU,IAAI,OAAO,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,KAAK,QAAQ,MAAM,aAAa,CAAC;AACxC,OAAO,KAAK,UAAU,MAAM,eAAe,CAAC;AAC5C,OAAO,EACL,aAAa,EACb,gBAAgB,EAChB,kBAAkB,EAClB,uBAAuB,GACxB,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * FinvasiaBroker — Full IBroker implementation for Finvasia / Shoonya.
3
+ *
4
+ * Delegates to:
5
+ * - finvasia-auth for TOTP-based authentication
6
+ * - finvasia-mapper for data translation
7
+ * - finvasia-socket for WebSocket ticks
8
+ * - finvasia-instruments for instrument data
9
+ *
10
+ * Uses the Shoonya REST API (NorenWClientTP) directly via fetch.
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 FinvasiaBroker implements IBroker {
18
+ readonly id: BrokerId;
19
+ readonly name = "Finvasia (Shoonya)";
20
+ readonly instruments: IBrokerInstruments;
21
+ private session;
22
+ private socket;
23
+ private readonly instrumentsImpl;
24
+ constructor();
25
+ authenticate(creds: BrokerCredentials): Promise<Result<AuthSession>>;
26
+ refreshSession(session: AuthSession): Promise<Result<AuthSession>>;
27
+ isSessionValid(): boolean;
28
+ getSessionExpiry(): Date | null;
29
+ placeOrder(params: UnifiedOrderParams): Promise<Result<OrderResult>>;
30
+ modifyOrder(orderId: string, params: ModifyParams): Promise<Result<OrderResult>>;
31
+ cancelOrder(orderId: string): Promise<Result<CancelResult>>;
32
+ getOrders(): Promise<Result<UnifiedOrder[]>>;
33
+ getOrderHistory(orderId: string): Promise<Result<OrderUpdate[]>>;
34
+ getPositions(): Promise<Result<UnifiedPosition[]>>;
35
+ getHoldings(): Promise<Result<UnifiedHolding[]>>;
36
+ getLTP(symbols: string[]): Promise<Result<Map<string, number>>>;
37
+ getQuote(symbols: string[]): Promise<Result<Map<string, Quote>>>;
38
+ getOptionChain(underlying: string, expiry: Date): Promise<Result<OptionChainRow[]>>;
39
+ getCandles(symbol: string, interval: CandleInterval, from: Date, to: Date): Promise<Result<Candle[]>>;
40
+ subscribeTicks(tokens: string[], cb: TickCallback): Subscription;
41
+ unsubscribeTicks(sub: Subscription): void;
42
+ getConnectionState(): WSConnectionState;
43
+ getMargins(): Promise<Result<MarginInfo>>;
44
+ getFunds(): Promise<Result<FundInfo>>;
45
+ getTradeHistory(_from: Date, _to: Date): Promise<Result<Trade[]>>;
46
+ getPnLReport(_from: Date, _to: Date): Promise<Result<PnLEntry[]>>;
47
+ private post;
48
+ private ensureSocket;
49
+ }
50
+ //# sourceMappingURL=FinvasiaBroker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FinvasiaBroker.d.ts","sourceRoot":"","sources":["../../../src/brokers/finvasia/FinvasiaBroker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Finvasia (Shoonya) authentication flow.
3
+ * Uses TOTP-based two-factor authentication:
4
+ * 1. POST login with userId, password, and TOTP
5
+ * 2. Receive susertoken (access token) on success
6
+ *
7
+ * Shoonya sessions expire at end of trading day.
8
+ */
9
+ import type { AuthSession, BrokerCredentials } from '../../types/broker';
10
+ import { type Result } from '../../errors/result';
11
+ /**
12
+ * Authenticate with Shoonya using user ID, password, and TOTP.
13
+ *
14
+ * Required credentials:
15
+ * - userId: Shoonya user ID
16
+ * - password: Login password
17
+ * - totpSecret: Base32 TOTP secret
18
+ * - apiKey: Shoonya vendor key
19
+ */
20
+ export declare function authenticate(creds: BrokerCredentials): Promise<Result<AuthSession>>;
21
+ /**
22
+ * Finvasia does not support token refresh.
23
+ * Sessions expire at end of day; re-authenticate with TOTP.
24
+ */
25
+ export declare function refreshSession(_session: AuthSession): Promise<Result<AuthSession>>;
26
+ /** Check if session is still valid based on expiry. */
27
+ export declare function isSessionValid(session: AuthSession | null): boolean;
28
+ //# sourceMappingURL=finvasia-auth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"finvasia-auth.d.ts","sourceRoot":"","sources":["../../../src/brokers/finvasia/finvasia-auth.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACzE,OAAO,EAAW,KAAK,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAuD3D;;;;;;;;GAQG;AACH,wBAAsB,YAAY,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAwDzF;AAED;;;GAGG;AACH,wBAAsB,cAAc,CAAC,QAAQ,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAExF;AAED,uDAAuD;AACvD,wBAAgB,cAAc,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI,GAAG,OAAO,CAGnE"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Finvasia (Shoonya) API constant mappings.
3
+ * Maps unified nsekit enums to Shoonya-specific string values and back.
4
+ */
5
+ import type { Exchange, Product, OrderType, OrderStatus, Validity } from '../../types/common';
6
+ export declare const EXCHANGE_TO_SHOONYA: Record<Exchange, string>;
7
+ export declare const EXCHANGE_FROM_SHOONYA: Record<string, Exchange>;
8
+ export declare const PRODUCT_TO_SHOONYA: Record<Product, string>;
9
+ export declare const PRODUCT_FROM_SHOONYA: Record<string, Product>;
10
+ export declare const ORDER_TYPE_TO_SHOONYA: Record<OrderType, string>;
11
+ export declare const ORDER_TYPE_FROM_SHOONYA: Record<string, OrderType>;
12
+ export declare const SIDE_TO_SHOONYA: Record<'BUY' | 'SELL', string>;
13
+ export declare const SIDE_FROM_SHOONYA: Record<string, 'BUY' | 'SELL'>;
14
+ export declare const STATUS_FROM_SHOONYA: Record<string, OrderStatus>;
15
+ export declare const VALIDITY_TO_SHOONYA: Record<Validity, string>;
16
+ export declare const VALIDITY_FROM_SHOONYA: Record<string, Validity>;
17
+ export declare const SHOONYA_API_BASE = "https://api.shoonya.com/NorenWClientTP";
18
+ export declare const SHOONYA_WS_URL = "wss://api.shoonya.com/NorenWSTP";
19
+ export declare const SHOONYA_INSTRUMENTS_BASE = "https://api.shoonya.com/";
20
+ export declare const SHOONYA_INSTRUMENT_FILES: Record<string, string>;
21
+ export declare const CANDLE_INTERVAL_TO_SHOONYA: Record<string, string>;
22
+ //# sourceMappingURL=finvasia-constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"finvasia-constants.d.ts","sourceRoot":"","sources":["../../../src/brokers/finvasia/finvasia-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,mBAAmB,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,CAOxD,CAAC;AAEF,eAAO,MAAM,qBAAqB,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAO1D,CAAC;AAIF,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,CAItD,CAAC;AAEF,eAAO,MAAM,oBAAoB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAIxD,CAAC;AAIF,eAAO,MAAM,qBAAqB,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,CAK3D,CAAC;AAEF,eAAO,MAAM,uBAAuB,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAK7D,CAAC;AAIF,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,KAAK,GAAG,MAAM,EAAE,MAAM,CAG1D,CAAC;AAEF,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,GAAG,MAAM,CAG5D,CAAC;AAIF,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAQ3D,CAAC;AAIF,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,CAGxD,CAAC;AAEF,eAAO,MAAM,qBAAqB,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAG1D,CAAC;AAIF,eAAO,MAAM,gBAAgB,2CAA2C,CAAC;AACzE,eAAO,MAAM,cAAc,oCAAoC,CAAC;AAChE,eAAO,MAAM,wBAAwB,6BAA6B,CAAC;AAInE,eAAO,MAAM,wBAAwB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAO3D,CAAC;AAIF,eAAO,MAAM,0BAA0B,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAM7D,CAAC"}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * Finvasia (Shoonya) instruments adapter.
3
+ * Implements IBrokerInstruments.
4
+ *
5
+ * Shoonya provides per-exchange ZIP files containing pipe-delimited text.
6
+ * Also supports a search API via the /SearchScrip endpoint.
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 FinvasiaInstruments implements IBrokerInstruments {
12
+ readonly capabilities: {
13
+ bulkDump: true;
14
+ searchAPI: true;
15
+ rawFileCache: true;
16
+ rawFilePath: string;
17
+ };
18
+ private accessToken;
19
+ private userId;
20
+ /** Set credentials needed for search API calls. */
21
+ setCredentials(userId: string, accessToken: string): void;
22
+ /**
23
+ * Stream instruments from all per-exchange ZIP files.
24
+ * Yields raw row objects parsed from pipe-delimited text.
25
+ */
26
+ streamDump(): AsyncIterable<RawBrokerInstrument>;
27
+ /** Check if dump has changed since last sync. */
28
+ checkDumpChanged(lastSync: {
29
+ etag?: string;
30
+ lastModified?: string;
31
+ }): Promise<boolean>;
32
+ /**
33
+ * Search for instruments using the Shoonya SearchScrip API.
34
+ */
35
+ search(query: string, exchange?: Exchange): Promise<Result<BrokerInstrumentEntry[]>>;
36
+ /**
37
+ * Resolve a single instrument by exact tradingSymbol and exchange.
38
+ * Uses the Shoonya SearchScrip API and filters for an exact match.
39
+ */
40
+ resolve(symbol: string, exchange: Exchange): Promise<Result<BrokerInstrumentEntry>>;
41
+ /** Normalize a raw instrument row into a BrokerInstrumentEntry. */
42
+ normalize(raw: RawBrokerInstrument): BrokerInstrumentEntry;
43
+ }
44
+ //# sourceMappingURL=finvasia-instruments.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"finvasia-instruments.d.ts","sourceRoot":"","sources":["../../../src/brokers/finvasia/finvasia-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;AA4DlD,qBAAa,mBAAoB,YAAW,kBAAkB;IAC5D,QAAQ,CAAC,YAAY;;;;;MAKnB;IAEF,OAAO,CAAC,WAAW,CAAM;IACzB,OAAO,CAAC,MAAM,CAAM;IAEpB,mDAAmD;IACnD,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI;IAKzD;;;OAGG;IACI,UAAU,IAAI,aAAa,CAAC,mBAAmB,CAAC;IA6DvD,iDAAiD;IAC3C,gBAAgB,CAAC,QAAQ,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,OAAO,CAAC;IAoB5F;;OAEG;IACG,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,qBAAqB,EAAE,CAAC,CAAC;IAgD1F;;;OAGG;IACG,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC;IAWzF,mEAAmE;IACnE,SAAS,CAAC,GAAG,EAAE,mBAAmB,GAAG,qBAAqB;CA+B3D"}