nsekit 0.2.0 → 0.3.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.
- package/README.md +48 -30
- package/dist/brokers/dhan/DhanBroker.d.ts +10 -4
- package/dist/brokers/dhan/DhanBroker.d.ts.map +1 -1
- package/dist/brokers/dhan/dhan-instruments.d.ts +1 -11
- package/dist/brokers/dhan/dhan-instruments.d.ts.map +1 -1
- package/dist/brokers/finvasia/FinvasiaBroker.d.ts +10 -4
- package/dist/brokers/finvasia/FinvasiaBroker.d.ts.map +1 -1
- package/dist/brokers/finvasia/finvasia-instruments.d.ts +1 -11
- package/dist/brokers/finvasia/finvasia-instruments.d.ts.map +1 -1
- package/dist/brokers/paper/PaperBroker.d.ts +11 -3
- package/dist/brokers/paper/PaperBroker.d.ts.map +1 -1
- package/dist/brokers/zerodha/ZerodhaBroker.d.ts +10 -4
- package/dist/brokers/zerodha/ZerodhaBroker.d.ts.map +1 -1
- package/dist/brokers/zerodha/zerodha-instruments.d.ts +0 -12
- package/dist/brokers/zerodha/zerodha-instruments.d.ts.map +1 -1
- package/dist/index.d.ts +9 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +161 -97
- package/dist/instruments/instrument-master.d.ts +9 -2
- package/dist/instruments/instrument-master.d.ts.map +1 -1
- package/dist/interfaces/broker.interface.d.ts +8 -3
- package/dist/interfaces/broker.interface.d.ts.map +1 -1
- package/dist/types/broker.d.ts +9 -1
- package/dist/types/broker.d.ts.map +1 -1
- package/dist/types/index.d.ts +1 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/instruments.d.ts +1 -6
- package/dist/types/instruments.d.ts.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -35,9 +35,15 @@ Before authenticating, review the credential fields each broker requires: [docs/
|
|
|
35
35
|
import { createBroker } from 'nsekit';
|
|
36
36
|
|
|
37
37
|
const broker = createBroker('finvasia'); // or 'zerodha', 'dhan', 'paper'
|
|
38
|
-
|
|
39
|
-
|
|
38
|
+
await broker.authenticate({ userId: '...', password: '...', totpSecret: '...', apiKey: '...', vendorCode: '...' });
|
|
39
|
+
await broker.sync(); // downloads + indexes ~180K instruments
|
|
40
|
+
|
|
41
|
+
// Exchange is auto-resolved — no need to specify it
|
|
42
|
+
const order = await broker.placeOrder({ tradingSymbol: 'RELIANCE', side: 'BUY', quantity: 1, type: 'LIMIT', product: 'INTRADAY', price: 2400, validity: 'DAY' });
|
|
40
43
|
const cancel = await broker.cancelOrder(order.value.orderId);
|
|
44
|
+
|
|
45
|
+
// Or provide exchange explicitly
|
|
46
|
+
await broker.placeOrder({ tradingSymbol: 'RELIANCE', exchange: 'NSE', side: 'BUY', quantity: 1, type: 'LIMIT', product: 'INTRADAY', price: 2400, validity: 'DAY' });
|
|
41
47
|
```
|
|
42
48
|
|
|
43
49
|
See [docs/broker-credentials.md](docs/broker-credentials.md) for which credential fields each broker requires.
|
|
@@ -46,29 +52,37 @@ See [docs/broker-credentials.md](docs/broker-credentials.md) for which credentia
|
|
|
46
52
|
|
|
47
53
|
## Instrument Master
|
|
48
54
|
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
**It's always better to sync first, then run everything else.**
|
|
55
|
+
Each broker holds its own `InstrumentMaster` internally. Call `broker.sync()` once at startup, then use `broker.resolve()` and `broker.search()` directly. First sync downloads ~180K instruments and indexes them in memory. Every lookup after that is instant.
|
|
52
56
|
|
|
53
57
|
```typescript
|
|
54
|
-
import { createBroker
|
|
58
|
+
import { createBroker } from 'nsekit';
|
|
55
59
|
|
|
56
60
|
const broker = createBroker('finvasia');
|
|
57
61
|
await broker.authenticate({ /* ... */ });
|
|
58
|
-
|
|
59
|
-
// Sync once at startup
|
|
60
|
-
const imaster = new InstrumentMaster();
|
|
61
|
-
await imaster.syncBroker('finvasia', broker.instruments);
|
|
62
|
+
await broker.sync();
|
|
62
63
|
// => { instrumentCount: 184302, source: 'network' }
|
|
63
64
|
|
|
64
|
-
//
|
|
65
|
-
const inst =
|
|
66
|
-
const results =
|
|
65
|
+
// Resolve, search, or trade — all on the broker
|
|
66
|
+
const inst = broker.resolve('NIFTY-24000-CE-27FEB26'); // exact canonical lookup
|
|
67
|
+
const results = broker.search('NIFTY', 'NFO', 'CE', 10); // fuzzy search
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
### `broker.has` — Capabilities
|
|
71
|
+
|
|
72
|
+
Every broker exposes a `has` object describing what it supports:
|
|
73
|
+
|
|
74
|
+
```typescript
|
|
75
|
+
broker.has.searchAPI // true for Finvasia/Dhan, false for Zerodha
|
|
76
|
+
broker.has.bulkDump // true for all real brokers, false for paper
|
|
77
|
+
broker.has.optionChain // true for Finvasia/Dhan
|
|
78
|
+
broker.has.historicalCandles
|
|
79
|
+
broker.has.websocket
|
|
80
|
+
broker.has.pnlReport // true for paper only
|
|
67
81
|
```
|
|
68
82
|
|
|
69
83
|
### Where instruments are stored
|
|
70
84
|
|
|
71
|
-
The first sync downloads instruments from the broker and saves them to disk as JSON. On subsequent startups, `
|
|
85
|
+
The first sync downloads instruments from the broker and saves them to disk as JSON. On subsequent startups, `broker.sync()` loads from this cache — no network call, near-instant.
|
|
72
86
|
|
|
73
87
|
```
|
|
74
88
|
./InstrumentDump/ (default location)
|
|
@@ -79,7 +93,7 @@ The first sync downloads instruments from the broker and saves them to disk as J
|
|
|
79
93
|
Custom path:
|
|
80
94
|
|
|
81
95
|
```typescript
|
|
82
|
-
const
|
|
96
|
+
const broker = createBroker('finvasia', {
|
|
83
97
|
instrumentFilePath: './data/instruments',
|
|
84
98
|
});
|
|
85
99
|
```
|
|
@@ -87,29 +101,33 @@ const imaster = new InstrumentMaster({
|
|
|
87
101
|
To force a fresh download (skip cache):
|
|
88
102
|
|
|
89
103
|
```typescript
|
|
90
|
-
await
|
|
104
|
+
await broker.sync(true);
|
|
91
105
|
```
|
|
92
106
|
|
|
93
|
-
###
|
|
107
|
+
### Optional: Redis
|
|
94
108
|
|
|
95
|
-
|
|
109
|
+
Pass an ioredis-compatible client for distributed instrument caching. Useful when multiple processes (user bots, strategy bots) need instrument data without each loading 180K entries from disk.
|
|
96
110
|
|
|
97
111
|
```typescript
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
112
|
+
import Redis from 'ioredis';
|
|
113
|
+
|
|
114
|
+
const broker = createBroker('finvasia', { redis: new Redis() });
|
|
115
|
+
await broker.authenticate({ /* ... */ });
|
|
116
|
+
await broker.sync();
|
|
117
|
+
// All instruments now in Redis — any process with the same Redis gets O(1) lookups
|
|
101
118
|
```
|
|
102
119
|
|
|
103
|
-
###
|
|
120
|
+
### Advanced: Standalone InstrumentMaster
|
|
104
121
|
|
|
105
|
-
|
|
122
|
+
For multi-broker merge scenarios, `InstrumentMaster` still works standalone:
|
|
106
123
|
|
|
107
124
|
```typescript
|
|
108
|
-
import
|
|
125
|
+
import { InstrumentMaster } from 'nsekit';
|
|
109
126
|
|
|
110
127
|
const imaster = new InstrumentMaster({ redis: new Redis() });
|
|
111
|
-
await imaster.syncBroker('
|
|
112
|
-
|
|
128
|
+
await imaster.syncBroker('zerodha', zerodhaBroker.instruments);
|
|
129
|
+
await imaster.syncBroker('finvasia', finvasiaBroker.instruments);
|
|
130
|
+
// NIFTY-24000-CE-27FEB26 now has both zerodha and finvasia tokens
|
|
113
131
|
```
|
|
114
132
|
|
|
115
133
|
### Canonical symbol format
|
|
@@ -126,10 +144,10 @@ PE: NIFTY-24000-PE-27FEB26 (underlying-strike-PE-DDMMMYY)
|
|
|
126
144
|
Zerodha's `NIFTY26FEB24000CE` and Finvasia's `NIFTY26FEB26C24000` both resolve to `NFO:NIFTY-24000-CE-27FEB26`. You never need to think about broker-specific symbol formats.
|
|
127
145
|
|
|
128
146
|
```typescript
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
147
|
+
broker.resolve('TATAMOTORS'); // NSE equity (NSE preferred over BSE)
|
|
148
|
+
broker.resolve('BSE:TATAMOTORS'); // explicit exchange
|
|
149
|
+
broker.resolve('NIFTY-24000-CE-27FEB26'); // NFO option
|
|
150
|
+
broker.resolve('NFO:NIFTY-FUT-27FEB26'); // with exchange prefix
|
|
133
151
|
```
|
|
134
152
|
|
|
135
153
|
---
|
|
@@ -9,24 +9,30 @@
|
|
|
9
9
|
*
|
|
10
10
|
* Uses the Dhan v2 REST API directly via fetch.
|
|
11
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';
|
|
12
|
+
import type { BrokerId, Exchange, CandleInterval, InstrumentType, 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, BrokerCapabilities } from '../../types/broker';
|
|
14
|
+
import type { IBrokerInstruments, UnifiedInstrument } from '../../types/instruments';
|
|
15
15
|
import type { IBroker } from '../../interfaces/broker.interface';
|
|
16
16
|
import { type Result } from '../../errors/result';
|
|
17
|
+
import { type SyncMeta, type BrokerOptions } from '../../instruments/instrument-master';
|
|
17
18
|
export declare class DhanBroker implements IBroker {
|
|
18
19
|
readonly id: BrokerId;
|
|
19
20
|
readonly name = "Dhan";
|
|
20
21
|
readonly instruments: IBrokerInstruments;
|
|
22
|
+
readonly has: BrokerCapabilities;
|
|
21
23
|
private session;
|
|
22
24
|
private socket;
|
|
23
25
|
private clientId;
|
|
24
26
|
private readonly instrumentsImpl;
|
|
25
|
-
|
|
27
|
+
private readonly _iMaster;
|
|
28
|
+
constructor(options?: BrokerOptions);
|
|
26
29
|
authenticate(creds: BrokerCredentials): Promise<Result<AuthSession>>;
|
|
27
30
|
refreshSession(session: AuthSession): Promise<Result<AuthSession>>;
|
|
28
31
|
isSessionValid(): boolean;
|
|
29
32
|
getSessionExpiry(): Date | null;
|
|
33
|
+
sync(force?: boolean): Promise<Result<SyncMeta>>;
|
|
34
|
+
resolve(input: string): Result<UnifiedInstrument>;
|
|
35
|
+
search(query: string, exchange?: Exchange, instrumentType?: InstrumentType, limit?: number): UnifiedInstrument[];
|
|
30
36
|
placeOrder(params: UnifiedOrderParams): Promise<Result<OrderResult>>;
|
|
31
37
|
modifyOrder(orderId: string, params: ModifyParams): Promise<Result<OrderResult>>;
|
|
32
38
|
cancelOrder(orderId: string): Promise<Result<CancelResult>>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DhanBroker.d.ts","sourceRoot":"","sources":["../../../src/brokers/dhan/DhanBroker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,QAAQ,
|
|
1
|
+
{"version":3,"file":"DhanBroker.d.ts","sourceRoot":"","sources":["../../../src/brokers/dhan/DhanBroker.ts"],"names":[],"mappings":"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"}
|
|
@@ -25,20 +25,10 @@ export declare class DhanInstruments implements IBrokerInstruments {
|
|
|
25
25
|
* Stream the Dhan scrip master CSV as an async iterable of raw row objects.
|
|
26
26
|
*/
|
|
27
27
|
streamDump(): AsyncIterable<RawBrokerInstrument>;
|
|
28
|
-
/** Check if dump has changed. */
|
|
29
|
-
checkDumpChanged(lastSync: {
|
|
30
|
-
etag?: string;
|
|
31
|
-
lastModified?: string;
|
|
32
|
-
}): Promise<boolean>;
|
|
33
28
|
/**
|
|
34
29
|
* Search for instruments using the Dhan search API.
|
|
35
30
|
*/
|
|
36
|
-
|
|
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>>;
|
|
31
|
+
searchAPI(query: string, exchange?: Exchange): Promise<Result<BrokerInstrumentEntry[]>>;
|
|
42
32
|
/** Normalize a raw CSV row into a BrokerInstrumentEntry. */
|
|
43
33
|
normalize(raw: RawBrokerInstrument): BrokerInstrumentEntry;
|
|
44
34
|
}
|
|
@@ -1 +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
|
|
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;;OAEG;IACG,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,qBAAqB,EAAE,CAAC,CAAC;IAmD7F,4DAA4D;IAC5D,SAAS,CAAC,GAAG,EAAE,mBAAmB,GAAG,qBAAqB;CA+B3D"}
|
|
@@ -9,23 +9,29 @@
|
|
|
9
9
|
*
|
|
10
10
|
* Uses the Shoonya REST API (NorenWClientTP) directly via fetch.
|
|
11
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';
|
|
12
|
+
import type { BrokerId, Exchange, CandleInterval, InstrumentType, 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, BrokerCapabilities } from '../../types/broker';
|
|
14
|
+
import type { IBrokerInstruments, UnifiedInstrument } from '../../types/instruments';
|
|
15
15
|
import type { IBroker } from '../../interfaces/broker.interface';
|
|
16
16
|
import { type Result } from '../../errors/result';
|
|
17
|
+
import { type SyncMeta, type BrokerOptions } from '../../instruments/instrument-master';
|
|
17
18
|
export declare class FinvasiaBroker implements IBroker {
|
|
18
19
|
readonly id: BrokerId;
|
|
19
20
|
readonly name = "Finvasia (Shoonya)";
|
|
20
21
|
readonly instruments: IBrokerInstruments;
|
|
22
|
+
readonly has: BrokerCapabilities;
|
|
21
23
|
private session;
|
|
22
24
|
private socket;
|
|
23
25
|
private readonly instrumentsImpl;
|
|
24
|
-
|
|
26
|
+
private readonly _iMaster;
|
|
27
|
+
constructor(options?: BrokerOptions);
|
|
25
28
|
authenticate(creds: BrokerCredentials): Promise<Result<AuthSession>>;
|
|
26
29
|
refreshSession(session: AuthSession): Promise<Result<AuthSession>>;
|
|
27
30
|
isSessionValid(): boolean;
|
|
28
31
|
getSessionExpiry(): Date | null;
|
|
32
|
+
sync(force?: boolean): Promise<Result<SyncMeta>>;
|
|
33
|
+
resolve(input: string): Result<UnifiedInstrument>;
|
|
34
|
+
search(query: string, exchange?: Exchange, instrumentType?: InstrumentType, limit?: number): UnifiedInstrument[];
|
|
29
35
|
placeOrder(params: UnifiedOrderParams): Promise<Result<OrderResult>>;
|
|
30
36
|
modifyOrder(orderId: string, params: ModifyParams): Promise<Result<OrderResult>>;
|
|
31
37
|
cancelOrder(orderId: string): Promise<Result<CancelResult>>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FinvasiaBroker.d.ts","sourceRoot":"","sources":["../../../src/brokers/finvasia/FinvasiaBroker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,QAAQ,
|
|
1
|
+
{"version":3,"file":"FinvasiaBroker.d.ts","sourceRoot":"","sources":["../../../src/brokers/finvasia/FinvasiaBroker.ts"],"names":[],"mappings":"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"}
|
|
@@ -24,20 +24,10 @@ export declare class FinvasiaInstruments implements IBrokerInstruments {
|
|
|
24
24
|
* Yields raw row objects parsed from pipe-delimited text.
|
|
25
25
|
*/
|
|
26
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
27
|
/**
|
|
33
28
|
* Search for instruments using the Shoonya SearchScrip API.
|
|
34
29
|
*/
|
|
35
|
-
|
|
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>>;
|
|
30
|
+
searchAPI(query: string, exchange?: Exchange): Promise<Result<BrokerInstrumentEntry[]>>;
|
|
41
31
|
/** Normalize a raw instrument row into a BrokerInstrumentEntry. */
|
|
42
32
|
normalize(raw: RawBrokerInstrument): BrokerInstrumentEntry;
|
|
43
33
|
}
|
|
@@ -1 +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
|
|
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;;OAEG;IACG,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,qBAAqB,EAAE,CAAC,CAAC;IAgD7F,mEAAmE;IACnE,SAAS,CAAC,GAAG,EAAE,mBAAmB,GAAG,qBAAqB;CA+B3D"}
|
|
@@ -7,16 +7,18 @@
|
|
|
7
7
|
* Paper broker does not connect to any real exchange. It requires a live data
|
|
8
8
|
* source (another IBroker) to be injected for LTP / tick feeds.
|
|
9
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';
|
|
10
|
+
import type { BrokerId, Exchange, CandleInterval, InstrumentType, 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, BrokerCapabilities } from '../../types/broker';
|
|
12
|
+
import type { IBrokerInstruments, UnifiedInstrument } from '../../types/instruments';
|
|
13
13
|
import type { IBroker } from '../../interfaces/broker.interface';
|
|
14
14
|
import { type Result } from '../../errors/result';
|
|
15
|
+
import { type SyncMeta, type BrokerOptions } from '../../instruments/instrument-master';
|
|
15
16
|
import { type FillEngineConfig } from './paper-fill-engine';
|
|
16
17
|
export declare class PaperBroker implements IBroker {
|
|
17
18
|
readonly id: BrokerId;
|
|
18
19
|
readonly name = "Paper Trading";
|
|
19
20
|
readonly instruments: IBrokerInstruments;
|
|
21
|
+
readonly has: BrokerCapabilities;
|
|
20
22
|
private session;
|
|
21
23
|
private engine;
|
|
22
24
|
private positions;
|
|
@@ -27,6 +29,7 @@ export declare class PaperBroker implements IBroker {
|
|
|
27
29
|
private initialBalance;
|
|
28
30
|
private subscriptions;
|
|
29
31
|
private connectionState;
|
|
32
|
+
private readonly _iMaster;
|
|
30
33
|
/** Optional: inject a live data source for LTP and ticks. */
|
|
31
34
|
private dataSource;
|
|
32
35
|
private dataSourceSub;
|
|
@@ -34,9 +37,14 @@ export declare class PaperBroker implements IBroker {
|
|
|
34
37
|
constructor(config?: {
|
|
35
38
|
initialBalance?: number;
|
|
36
39
|
fillConfig?: Partial<FillEngineConfig>;
|
|
40
|
+
redis?: BrokerOptions['redis'];
|
|
41
|
+
instrumentFilePath?: string;
|
|
37
42
|
});
|
|
38
43
|
/** Inject a live data source for market data forwarding. */
|
|
39
44
|
setDataSource(broker: IBroker): void;
|
|
45
|
+
sync(_force?: boolean): Promise<Result<SyncMeta>>;
|
|
46
|
+
resolve(input: string): Result<UnifiedInstrument>;
|
|
47
|
+
search(query: string, exchange?: Exchange, instrumentType?: InstrumentType, limit?: number): UnifiedInstrument[];
|
|
40
48
|
authenticate(_creds: BrokerCredentials): Promise<Result<AuthSession>>;
|
|
41
49
|
refreshSession(_session: AuthSession): Promise<Result<AuthSession>>;
|
|
42
50
|
isSessionValid(): boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PaperBroker.d.ts","sourceRoot":"","sources":["../../../src/brokers/paper/PaperBroker.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,QAAQ,
|
|
1
|
+
{"version":3,"file":"PaperBroker.d.ts","sourceRoot":"","sources":["../../../src/brokers/paper/PaperBroker.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,25 +9,31 @@
|
|
|
9
9
|
*
|
|
10
10
|
* Uses the kiteconnect SDK under the hood for HTTP calls.
|
|
11
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';
|
|
12
|
+
import type { BrokerId, Exchange, CandleInterval, InstrumentType, 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, BrokerCapabilities } from '../../types/broker';
|
|
14
|
+
import type { IBrokerInstruments, UnifiedInstrument } from '../../types/instruments';
|
|
15
15
|
import type { IBroker } from '../../interfaces/broker.interface';
|
|
16
16
|
import { type Result } from '../../errors/result';
|
|
17
|
+
import { type SyncMeta, type BrokerOptions } from '../../instruments/instrument-master';
|
|
17
18
|
export declare class ZerodhaBroker implements IBroker {
|
|
18
19
|
readonly id: BrokerId;
|
|
19
20
|
readonly name = "Zerodha";
|
|
20
21
|
readonly instruments: IBrokerInstruments;
|
|
22
|
+
readonly has: BrokerCapabilities;
|
|
21
23
|
private session;
|
|
22
24
|
private kite;
|
|
23
25
|
private socket;
|
|
24
26
|
private apiKey;
|
|
25
27
|
private KiteConnect;
|
|
26
|
-
|
|
28
|
+
private readonly _iMaster;
|
|
29
|
+
constructor(options?: BrokerOptions);
|
|
27
30
|
authenticate(creds: BrokerCredentials): Promise<Result<AuthSession>>;
|
|
28
31
|
refreshSession(session: AuthSession): Promise<Result<AuthSession>>;
|
|
29
32
|
isSessionValid(): boolean;
|
|
30
33
|
getSessionExpiry(): Date | null;
|
|
34
|
+
sync(force?: boolean): Promise<Result<SyncMeta>>;
|
|
35
|
+
resolve(input: string): Result<UnifiedInstrument>;
|
|
36
|
+
search(query: string, exchange?: Exchange, instrumentType?: InstrumentType, limit?: number): UnifiedInstrument[];
|
|
31
37
|
placeOrder(params: UnifiedOrderParams): Promise<Result<OrderResult>>;
|
|
32
38
|
modifyOrder(orderId: string, params: ModifyParams): Promise<Result<OrderResult>>;
|
|
33
39
|
cancelOrder(orderId: string): Promise<Result<CancelResult>>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ZerodhaBroker.d.ts","sourceRoot":"","sources":["../../../src/brokers/zerodha/ZerodhaBroker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,QAAQ,
|
|
1
|
+
{"version":3,"file":"ZerodhaBroker.d.ts","sourceRoot":"","sources":["../../../src/brokers/zerodha/ZerodhaBroker.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,9 +5,7 @@
|
|
|
5
5
|
* Kite provides a single large CSV at https://api.kite.trade/instruments
|
|
6
6
|
* containing all exchanges. No search API is available.
|
|
7
7
|
*/
|
|
8
|
-
import type { Exchange } from '../../types/common';
|
|
9
8
|
import type { IBrokerInstruments, RawBrokerInstrument, BrokerInstrumentEntry } from '../../types/instruments';
|
|
10
|
-
import type { Result } from '../../errors/result';
|
|
11
9
|
export declare class ZerodhaInstruments implements IBrokerInstruments {
|
|
12
10
|
readonly capabilities: {
|
|
13
11
|
bulkDump: true;
|
|
@@ -20,16 +18,6 @@ export declare class ZerodhaInstruments implements IBrokerInstruments {
|
|
|
20
18
|
* Each yielded object has string keys matching CSV column headers.
|
|
21
19
|
*/
|
|
22
20
|
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
21
|
/** Normalize a raw CSV row into a BrokerInstrumentEntry. */
|
|
34
22
|
normalize(raw: RawBrokerInstrument): BrokerInstrumentEntry;
|
|
35
23
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"zerodha-instruments.d.ts","sourceRoot":"","sources":["../../../src/brokers/zerodha/zerodha-instruments.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;
|
|
1
|
+
{"version":3,"file":"zerodha-instruments.d.ts","sourceRoot":"","sources":["../../../src/brokers/zerodha/zerodha-instruments.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EACV,kBAAkB,EAClB,mBAAmB,EACnB,qBAAqB,EACtB,MAAM,yBAAyB,CAAC;AA6DjC,qBAAa,kBAAmB,YAAW,kBAAkB;IAC3D,QAAQ,CAAC,YAAY;;;;;MAKnB;IAEF;;;OAGG;IACI,UAAU,IAAI,aAAa,CAAC,mBAAmB,CAAC;IAmDvD,4DAA4D;IAC5D,SAAS,CAAC,GAAG,EAAE,mBAAmB,GAAG,qBAAqB;CA8B3D"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
export declare const VERSION = "0.
|
|
1
|
+
export declare const VERSION = "0.3.0";
|
|
2
2
|
export * from './types/index';
|
|
3
3
|
export * from './errors/index';
|
|
4
4
|
export type { IBroker } from './interfaces/broker.interface';
|
|
5
5
|
export { InstrumentMaster } from './instruments/instrument-master';
|
|
6
|
-
export type { InstrumentMasterOptions } from './instruments/instrument-master';
|
|
6
|
+
export type { InstrumentMasterOptions, SyncMeta, BrokerOptions } from './instruments/instrument-master';
|
|
7
7
|
export { WSManager } from './websocket/ws-manager';
|
|
8
8
|
export { SessionManager } from './session/session-manager';
|
|
9
9
|
export { ZerodhaBroker } from './brokers/zerodha/ZerodhaBroker';
|
|
@@ -12,18 +12,22 @@ export { DhanBroker } from './brokers/dhan/DhanBroker';
|
|
|
12
12
|
export { PaperBroker } from './brokers/paper/PaperBroker';
|
|
13
13
|
import type { BrokerId } from './types/common';
|
|
14
14
|
import type { IBroker } from './interfaces/broker.interface';
|
|
15
|
+
import type { BrokerOptions } from './instruments/instrument-master';
|
|
15
16
|
/**
|
|
16
17
|
* Factory function to instantiate a broker adapter by its BrokerId.
|
|
17
18
|
*
|
|
18
19
|
* @param brokerId - One of 'zerodha', 'finvasia', 'dhan', 'paper'
|
|
20
|
+
* @param options - Optional Redis client and instrument file path for the internal InstrumentMaster
|
|
19
21
|
* @returns A new IBroker instance for the specified broker
|
|
20
22
|
* @throws Error if the brokerId is not recognized
|
|
21
23
|
*
|
|
22
24
|
* @example
|
|
23
25
|
* ```ts
|
|
24
|
-
* const broker = createBroker('
|
|
25
|
-
*
|
|
26
|
+
* const broker = createBroker('finvasia', { redis });
|
|
27
|
+
* await broker.authenticate(creds);
|
|
28
|
+
* await broker.sync();
|
|
29
|
+
* broker.resolve('TATAMOTORS');
|
|
26
30
|
* ```
|
|
27
31
|
*/
|
|
28
|
-
export declare function createBroker(brokerId: BrokerId): IBroker;
|
|
32
|
+
export declare function createBroker(brokerId: BrokerId, options?: BrokerOptions): IBroker;
|
|
29
33
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,OAAO,UAAU,CAAC;AAG/B,cAAc,eAAe,CAAC;AAG9B,cAAc,gBAAgB,CAAC;AAG/B,YAAY,EAAE,OAAO,EAAE,MAAM,+BAA+B,CAAC;AAG7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACnE,YAAY,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,OAAO,UAAU,CAAC;AAG/B,cAAc,eAAe,CAAC;AAG9B,cAAc,gBAAgB,CAAC;AAG/B,YAAY,EAAE,OAAO,EAAE,MAAM,+BAA+B,CAAC;AAG7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACnE,YAAY,EAAE,uBAAuB,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AACxG,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAG3D,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AACnE,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAI1D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,+BAA+B,CAAC;AAC7D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAMrE;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAejF"}
|
package/dist/index.js
CHANGED
|
@@ -19443,6 +19443,23 @@ class InstrumentMaster {
|
|
|
19443
19443
|
const list = matches.slice(0, 5).map((m) => `${m.exchange}:${m.tradingSymbol}`).join(", ");
|
|
19444
19444
|
return Err(new Error(`Multiple matches found. Specify exchange: ${list}`));
|
|
19445
19445
|
}
|
|
19446
|
+
async resolveAsync(input, brokerId, brokerInstruments) {
|
|
19447
|
+
const local = this.resolve(input);
|
|
19448
|
+
if (local.ok)
|
|
19449
|
+
return local;
|
|
19450
|
+
if (brokerInstruments.capabilities.searchAPI && brokerInstruments.searchAPI) {
|
|
19451
|
+
const { symbol } = this.parseInput(input);
|
|
19452
|
+
const apiResult = await brokerInstruments.searchAPI(symbol);
|
|
19453
|
+
if (apiResult.ok && apiResult.value.length > 0) {
|
|
19454
|
+
for (const entry of apiResult.value)
|
|
19455
|
+
this.mergeEntry(brokerId, entry);
|
|
19456
|
+
if (this.redis)
|
|
19457
|
+
this.cacheInstrumentsToRedis();
|
|
19458
|
+
return this.resolve(input);
|
|
19459
|
+
}
|
|
19460
|
+
}
|
|
19461
|
+
return Err(new Error(`Symbol "${input}" not found`));
|
|
19462
|
+
}
|
|
19446
19463
|
async getOptionChainCached(underlying, expiry) {
|
|
19447
19464
|
const expiryDate = expiry.toISOString().slice(0, 10);
|
|
19448
19465
|
const cacheKey = `optchain:${underlying.toUpperCase()}:${expiryDate}`;
|
|
@@ -20565,33 +20582,6 @@ class ZerodhaInstruments {
|
|
|
20565
20582
|
yield row;
|
|
20566
20583
|
}
|
|
20567
20584
|
}
|
|
20568
|
-
async checkDumpChanged(lastSync) {
|
|
20569
|
-
const response = await fetch(KITE_INSTRUMENTS_URL, { method: "HEAD" });
|
|
20570
|
-
if (!response.ok)
|
|
20571
|
-
return true;
|
|
20572
|
-
const etag = response.headers.get("etag");
|
|
20573
|
-
const lastModified = response.headers.get("last-modified");
|
|
20574
|
-
if (etag && lastSync.etag)
|
|
20575
|
-
return etag !== lastSync.etag;
|
|
20576
|
-
if (lastModified && lastSync.lastModified)
|
|
20577
|
-
return lastModified !== lastSync.lastModified;
|
|
20578
|
-
return true;
|
|
20579
|
-
}
|
|
20580
|
-
async resolve(symbol, exchange) {
|
|
20581
|
-
try {
|
|
20582
|
-
for await (const raw of this.streamDump()) {
|
|
20583
|
-
const fields = raw;
|
|
20584
|
-
const rowSymbol = fields["tradingsymbol"] ?? "";
|
|
20585
|
-
const rowExchange = fields["exchange"] ?? "";
|
|
20586
|
-
if (rowSymbol === symbol && rowExchange === exchange) {
|
|
20587
|
-
return Ok(this.normalize(raw));
|
|
20588
|
-
}
|
|
20589
|
-
}
|
|
20590
|
-
return Err(new Error(`Instrument ${symbol} not found on ${exchange} (Zerodha)`));
|
|
20591
|
-
} catch (err) {
|
|
20592
|
-
return Err(err instanceof Error ? err : new Error(String(err)));
|
|
20593
|
-
}
|
|
20594
|
-
}
|
|
20595
20585
|
normalize(raw) {
|
|
20596
20586
|
const fields = raw;
|
|
20597
20587
|
const tradingSymbol = fields["tradingsymbol"] ?? fields[COL.TRADINGSYMBOL] ?? "";
|
|
@@ -20625,13 +20615,23 @@ class ZerodhaBroker {
|
|
|
20625
20615
|
id = "zerodha";
|
|
20626
20616
|
name = "Zerodha";
|
|
20627
20617
|
instruments;
|
|
20618
|
+
has = {
|
|
20619
|
+
bulkDump: true,
|
|
20620
|
+
searchAPI: false,
|
|
20621
|
+
optionChain: false,
|
|
20622
|
+
historicalCandles: true,
|
|
20623
|
+
websocket: true,
|
|
20624
|
+
pnlReport: false
|
|
20625
|
+
};
|
|
20628
20626
|
session = null;
|
|
20629
20627
|
kite = null;
|
|
20630
20628
|
socket = null;
|
|
20631
20629
|
apiKey = "";
|
|
20632
20630
|
KiteConnect = null;
|
|
20633
|
-
|
|
20631
|
+
_iMaster;
|
|
20632
|
+
constructor(options) {
|
|
20634
20633
|
this.instruments = new ZerodhaInstruments;
|
|
20634
|
+
this._iMaster = new InstrumentMaster(options);
|
|
20635
20635
|
}
|
|
20636
20636
|
async authenticate(creds) {
|
|
20637
20637
|
this.apiKey = creds.apiKey;
|
|
@@ -20654,10 +20654,34 @@ class ZerodhaBroker {
|
|
|
20654
20654
|
return null;
|
|
20655
20655
|
return new Date(this.session.expiresAt);
|
|
20656
20656
|
}
|
|
20657
|
+
async sync(force) {
|
|
20658
|
+
return this._iMaster.syncBroker(this.id, this.instruments, force);
|
|
20659
|
+
}
|
|
20660
|
+
resolve(input) {
|
|
20661
|
+
return this._iMaster.resolve(input);
|
|
20662
|
+
}
|
|
20663
|
+
search(query, exchange, instrumentType, limit) {
|
|
20664
|
+
return this._iMaster.search(query, exchange, instrumentType, limit);
|
|
20665
|
+
}
|
|
20657
20666
|
async placeOrder(params) {
|
|
20658
20667
|
try {
|
|
20668
|
+
let resolvedParams = params;
|
|
20669
|
+
if (!params.exchange) {
|
|
20670
|
+
const resolved = this._iMaster.resolve(params.tradingSymbol);
|
|
20671
|
+
if (!resolved.ok) {
|
|
20672
|
+
const asyncResolved = await this._iMaster.resolveAsync(params.tradingSymbol, this.id, this.instruments);
|
|
20673
|
+
if (!asyncResolved.ok) {
|
|
20674
|
+
return Err(new Error(`Cannot resolve "${params.tradingSymbol}". Either run broker.sync() first to use unified nsekit symbols, or provide exchange and the broker-native tradingSymbol directly.`));
|
|
20675
|
+
}
|
|
20676
|
+
const nativeSymbol = asyncResolved.value.brokerTokens.zerodha?.tradingsymbol ?? params.tradingSymbol;
|
|
20677
|
+
resolvedParams = { ...params, exchange: asyncResolved.value.exchange, tradingSymbol: nativeSymbol };
|
|
20678
|
+
} else {
|
|
20679
|
+
const nativeSymbol = resolved.value.brokerTokens.zerodha?.tradingsymbol ?? params.tradingSymbol;
|
|
20680
|
+
resolvedParams = { ...params, exchange: resolved.value.exchange, tradingSymbol: nativeSymbol };
|
|
20681
|
+
}
|
|
20682
|
+
}
|
|
20659
20683
|
const kite = await this.ensureKite();
|
|
20660
|
-
const kiteParams = toOrderParams(
|
|
20684
|
+
const kiteParams = toOrderParams(resolvedParams);
|
|
20661
20685
|
const res = await kite.placeOrder("regular", kiteParams);
|
|
20662
20686
|
return Ok({
|
|
20663
20687
|
orderId: res.order_id,
|
|
@@ -21576,25 +21600,7 @@ class FinvasiaInstruments {
|
|
|
21576
21600
|
}
|
|
21577
21601
|
}
|
|
21578
21602
|
}
|
|
21579
|
-
async
|
|
21580
|
-
const firstFile = Object.values(SHOONYA_INSTRUMENT_FILES)[0];
|
|
21581
|
-
const url = `${SHOONYA_INSTRUMENTS_BASE}${firstFile}`;
|
|
21582
|
-
try {
|
|
21583
|
-
const response = await fetch(url, { method: "HEAD" });
|
|
21584
|
-
if (!response.ok)
|
|
21585
|
-
return true;
|
|
21586
|
-
const etag = response.headers.get("etag");
|
|
21587
|
-
const lastModified = response.headers.get("last-modified");
|
|
21588
|
-
if (etag && lastSync.etag)
|
|
21589
|
-
return etag !== lastSync.etag;
|
|
21590
|
-
if (lastModified && lastSync.lastModified)
|
|
21591
|
-
return lastModified !== lastSync.lastModified;
|
|
21592
|
-
return true;
|
|
21593
|
-
} catch {
|
|
21594
|
-
return true;
|
|
21595
|
-
}
|
|
21596
|
-
}
|
|
21597
|
-
async search(query, exchange) {
|
|
21603
|
+
async searchAPI(query, exchange) {
|
|
21598
21604
|
if (!this.accessToken) {
|
|
21599
21605
|
return Err(new Error("Finvasia search requires authentication. Call setCredentials() first."));
|
|
21600
21606
|
}
|
|
@@ -21634,16 +21640,6 @@ class FinvasiaInstruments {
|
|
|
21634
21640
|
return Err(err instanceof Error ? err : new Error(String(err)));
|
|
21635
21641
|
}
|
|
21636
21642
|
}
|
|
21637
|
-
async resolve(symbol, exchange) {
|
|
21638
|
-
const result = await this.search(symbol, exchange);
|
|
21639
|
-
if (!result.ok)
|
|
21640
|
-
return result;
|
|
21641
|
-
const match = result.value.find((e) => e.tradingSymbol === symbol && e.exchange === exchange);
|
|
21642
|
-
if (!match) {
|
|
21643
|
-
return Err(new Error(`Instrument ${symbol} not found on ${exchange} (Finvasia)`));
|
|
21644
|
-
}
|
|
21645
|
-
return Ok(match);
|
|
21646
|
-
}
|
|
21647
21643
|
normalize(raw) {
|
|
21648
21644
|
const fields = raw;
|
|
21649
21645
|
const exchangeRaw = fields["exchange"] ?? fields["exch"] ?? fields["_exchange"] ?? "NSE";
|
|
@@ -21679,12 +21675,22 @@ class FinvasiaBroker {
|
|
|
21679
21675
|
id = "finvasia";
|
|
21680
21676
|
name = "Finvasia (Shoonya)";
|
|
21681
21677
|
instruments;
|
|
21678
|
+
has = {
|
|
21679
|
+
bulkDump: true,
|
|
21680
|
+
searchAPI: true,
|
|
21681
|
+
optionChain: true,
|
|
21682
|
+
historicalCandles: true,
|
|
21683
|
+
websocket: true,
|
|
21684
|
+
pnlReport: false
|
|
21685
|
+
};
|
|
21682
21686
|
session = null;
|
|
21683
21687
|
socket = null;
|
|
21684
21688
|
instrumentsImpl;
|
|
21685
|
-
|
|
21689
|
+
_iMaster;
|
|
21690
|
+
constructor(options) {
|
|
21686
21691
|
this.instrumentsImpl = new FinvasiaInstruments;
|
|
21687
21692
|
this.instruments = this.instrumentsImpl;
|
|
21693
|
+
this._iMaster = new InstrumentMaster(options);
|
|
21688
21694
|
}
|
|
21689
21695
|
async authenticate(creds) {
|
|
21690
21696
|
const result = await authenticate2(creds);
|
|
@@ -21705,10 +21711,34 @@ class FinvasiaBroker {
|
|
|
21705
21711
|
return null;
|
|
21706
21712
|
return new Date(this.session.expiresAt);
|
|
21707
21713
|
}
|
|
21714
|
+
async sync(force) {
|
|
21715
|
+
return this._iMaster.syncBroker(this.id, this.instruments, force);
|
|
21716
|
+
}
|
|
21717
|
+
resolve(input) {
|
|
21718
|
+
return this._iMaster.resolve(input);
|
|
21719
|
+
}
|
|
21720
|
+
search(query, exchange, instrumentType, limit) {
|
|
21721
|
+
return this._iMaster.search(query, exchange, instrumentType, limit);
|
|
21722
|
+
}
|
|
21708
21723
|
async placeOrder(params) {
|
|
21709
21724
|
try {
|
|
21725
|
+
let resolvedParams = params;
|
|
21726
|
+
if (!params.exchange) {
|
|
21727
|
+
const resolved = this._iMaster.resolve(params.tradingSymbol);
|
|
21728
|
+
if (!resolved.ok) {
|
|
21729
|
+
const asyncResolved = await this._iMaster.resolveAsync(params.tradingSymbol, this.id, this.instruments);
|
|
21730
|
+
if (!asyncResolved.ok) {
|
|
21731
|
+
return Err(new Error(`Cannot resolve "${params.tradingSymbol}". Either run broker.sync() first to use unified nsekit symbols, or provide exchange and the broker-native tradingSymbol directly.`));
|
|
21732
|
+
}
|
|
21733
|
+
const nativeSymbol = asyncResolved.value.brokerTokens.finvasia?.tsym ?? params.tradingSymbol;
|
|
21734
|
+
resolvedParams = { ...params, exchange: asyncResolved.value.exchange, tradingSymbol: nativeSymbol };
|
|
21735
|
+
} else {
|
|
21736
|
+
const nativeSymbol = resolved.value.brokerTokens.finvasia?.tsym ?? params.tradingSymbol;
|
|
21737
|
+
resolvedParams = { ...params, exchange: resolved.value.exchange, tradingSymbol: nativeSymbol };
|
|
21738
|
+
}
|
|
21739
|
+
}
|
|
21710
21740
|
const uid = this.session?.userId ?? "";
|
|
21711
|
-
const shoonyaParams = toOrderParams2(
|
|
21741
|
+
const shoonyaParams = toOrderParams2(resolvedParams, uid, uid);
|
|
21712
21742
|
const res = await this.post("PlaceOrder", shoonyaParams);
|
|
21713
21743
|
if (res.stat !== "Ok" || !res.norenordno) {
|
|
21714
21744
|
return Err(new Error(`Order placement failed: ${res.emsg ?? "Unknown error"}`));
|
|
@@ -22695,23 +22725,7 @@ class DhanInstruments {
|
|
|
22695
22725
|
yield row;
|
|
22696
22726
|
}
|
|
22697
22727
|
}
|
|
22698
|
-
async
|
|
22699
|
-
try {
|
|
22700
|
-
const response = await fetch(DHAN_INSTRUMENTS_URL, { method: "HEAD" });
|
|
22701
|
-
if (!response.ok)
|
|
22702
|
-
return true;
|
|
22703
|
-
const etag = response.headers.get("etag");
|
|
22704
|
-
const lastModified = response.headers.get("last-modified");
|
|
22705
|
-
if (etag && lastSync.etag)
|
|
22706
|
-
return etag !== lastSync.etag;
|
|
22707
|
-
if (lastModified && lastSync.lastModified)
|
|
22708
|
-
return lastModified !== lastSync.lastModified;
|
|
22709
|
-
return true;
|
|
22710
|
-
} catch {
|
|
22711
|
-
return true;
|
|
22712
|
-
}
|
|
22713
|
-
}
|
|
22714
|
-
async search(query, exchange) {
|
|
22728
|
+
async searchAPI(query, exchange) {
|
|
22715
22729
|
if (!this.accessToken) {
|
|
22716
22730
|
return Err(new Error("Dhan search requires authentication. Call setCredentials() first."));
|
|
22717
22731
|
}
|
|
@@ -22754,16 +22768,6 @@ class DhanInstruments {
|
|
|
22754
22768
|
return Err(err instanceof Error ? err : new Error(String(err)));
|
|
22755
22769
|
}
|
|
22756
22770
|
}
|
|
22757
|
-
async resolve(symbol, exchange) {
|
|
22758
|
-
const result = await this.search(symbol, exchange);
|
|
22759
|
-
if (!result.ok)
|
|
22760
|
-
return result;
|
|
22761
|
-
const match = result.value.find((e) => e.tradingSymbol === symbol && e.exchange === exchange);
|
|
22762
|
-
if (!match) {
|
|
22763
|
-
return Err(new Error(`Instrument ${symbol} not found on ${exchange} (Dhan)`));
|
|
22764
|
-
}
|
|
22765
|
-
return Ok(match);
|
|
22766
|
-
}
|
|
22767
22771
|
normalize(raw) {
|
|
22768
22772
|
const fields = raw;
|
|
22769
22773
|
const securityId = fields["SEM_SMST_SECURITY_ID"] ?? fields["securityId"] ?? "";
|
|
@@ -22822,13 +22826,23 @@ class DhanBroker {
|
|
|
22822
22826
|
id = "dhan";
|
|
22823
22827
|
name = "Dhan";
|
|
22824
22828
|
instruments;
|
|
22829
|
+
has = {
|
|
22830
|
+
bulkDump: true,
|
|
22831
|
+
searchAPI: true,
|
|
22832
|
+
optionChain: true,
|
|
22833
|
+
historicalCandles: true,
|
|
22834
|
+
websocket: true,
|
|
22835
|
+
pnlReport: false
|
|
22836
|
+
};
|
|
22825
22837
|
session = null;
|
|
22826
22838
|
socket = null;
|
|
22827
22839
|
clientId = "";
|
|
22828
22840
|
instrumentsImpl;
|
|
22829
|
-
|
|
22841
|
+
_iMaster;
|
|
22842
|
+
constructor(options) {
|
|
22830
22843
|
this.instrumentsImpl = new DhanInstruments;
|
|
22831
22844
|
this.instruments = this.instrumentsImpl;
|
|
22845
|
+
this._iMaster = new InstrumentMaster(options);
|
|
22832
22846
|
}
|
|
22833
22847
|
async authenticate(creds) {
|
|
22834
22848
|
this.clientId = creds.userId ?? "";
|
|
@@ -22850,9 +22864,31 @@ class DhanBroker {
|
|
|
22850
22864
|
return null;
|
|
22851
22865
|
return new Date(this.session.expiresAt);
|
|
22852
22866
|
}
|
|
22867
|
+
async sync(force) {
|
|
22868
|
+
return this._iMaster.syncBroker(this.id, this.instruments, force);
|
|
22869
|
+
}
|
|
22870
|
+
resolve(input) {
|
|
22871
|
+
return this._iMaster.resolve(input);
|
|
22872
|
+
}
|
|
22873
|
+
search(query, exchange, instrumentType, limit) {
|
|
22874
|
+
return this._iMaster.search(query, exchange, instrumentType, limit);
|
|
22875
|
+
}
|
|
22853
22876
|
async placeOrder(params) {
|
|
22854
22877
|
try {
|
|
22855
|
-
|
|
22878
|
+
let resolvedParams = params;
|
|
22879
|
+
if (!params.exchange) {
|
|
22880
|
+
const resolved = this._iMaster.resolve(params.tradingSymbol);
|
|
22881
|
+
if (!resolved.ok) {
|
|
22882
|
+
const asyncResolved = await this._iMaster.resolveAsync(params.tradingSymbol, this.id, this.instruments);
|
|
22883
|
+
if (!asyncResolved.ok) {
|
|
22884
|
+
return Err(new Error(`Cannot resolve "${params.tradingSymbol}". Either run broker.sync() first to use unified nsekit symbols, or provide exchange and the broker-native tradingSymbol directly.`));
|
|
22885
|
+
}
|
|
22886
|
+
resolvedParams = { ...params, exchange: asyncResolved.value.exchange };
|
|
22887
|
+
} else {
|
|
22888
|
+
resolvedParams = { ...params, exchange: resolved.value.exchange };
|
|
22889
|
+
}
|
|
22890
|
+
}
|
|
22891
|
+
const dhanParams = toOrderParams3(resolvedParams, this.clientId);
|
|
22856
22892
|
const res = await this.request("POST", "/orders", dhanParams);
|
|
22857
22893
|
return Ok({
|
|
22858
22894
|
orderId: res.orderId,
|
|
@@ -23506,6 +23542,14 @@ class PaperBroker {
|
|
|
23506
23542
|
id = "paper";
|
|
23507
23543
|
name = "Paper Trading";
|
|
23508
23544
|
instruments;
|
|
23545
|
+
has = {
|
|
23546
|
+
bulkDump: false,
|
|
23547
|
+
searchAPI: false,
|
|
23548
|
+
optionChain: false,
|
|
23549
|
+
historicalCandles: false,
|
|
23550
|
+
websocket: false,
|
|
23551
|
+
pnlReport: true
|
|
23552
|
+
};
|
|
23509
23553
|
session = null;
|
|
23510
23554
|
engine;
|
|
23511
23555
|
positions = new Map;
|
|
@@ -23516,6 +23560,7 @@ class PaperBroker {
|
|
|
23516
23560
|
initialBalance;
|
|
23517
23561
|
subscriptions = new Map;
|
|
23518
23562
|
connectionState = "DISCONNECTED";
|
|
23563
|
+
_iMaster;
|
|
23519
23564
|
dataSource = null;
|
|
23520
23565
|
dataSourceSub = null;
|
|
23521
23566
|
subIdCounter = 0;
|
|
@@ -23524,6 +23569,10 @@ class PaperBroker {
|
|
|
23524
23569
|
this.initialBalance = config?.initialBalance ?? 1e7;
|
|
23525
23570
|
this.balance = this.initialBalance;
|
|
23526
23571
|
this.engine = new PaperFillEngine(config?.fillConfig);
|
|
23572
|
+
this._iMaster = new InstrumentMaster({
|
|
23573
|
+
redis: config?.redis,
|
|
23574
|
+
instrumentFilePath: config?.instrumentFilePath
|
|
23575
|
+
});
|
|
23527
23576
|
this.engine.setFillCallback((orderId, update) => {
|
|
23528
23577
|
this.onOrderFill(orderId, update);
|
|
23529
23578
|
});
|
|
@@ -23531,6 +23580,20 @@ class PaperBroker {
|
|
|
23531
23580
|
setDataSource(broker) {
|
|
23532
23581
|
this.dataSource = broker;
|
|
23533
23582
|
}
|
|
23583
|
+
async sync(_force) {
|
|
23584
|
+
return Ok({
|
|
23585
|
+
brokerId: "paper",
|
|
23586
|
+
lastSyncAt: Date.now(),
|
|
23587
|
+
instrumentCount: 0,
|
|
23588
|
+
source: "network"
|
|
23589
|
+
});
|
|
23590
|
+
}
|
|
23591
|
+
resolve(input) {
|
|
23592
|
+
return this._iMaster.resolve(input);
|
|
23593
|
+
}
|
|
23594
|
+
search(query, exchange, instrumentType, limit) {
|
|
23595
|
+
return this._iMaster.search(query, exchange, instrumentType, limit);
|
|
23596
|
+
}
|
|
23534
23597
|
async authenticate(_creds) {
|
|
23535
23598
|
this.session = {
|
|
23536
23599
|
accessToken: "paper-session",
|
|
@@ -23798,7 +23861,8 @@ class PaperBroker {
|
|
|
23798
23861
|
for (const sub of this.subscriptions.values()) {}
|
|
23799
23862
|
}
|
|
23800
23863
|
updatePositionOnFill(order, update) {
|
|
23801
|
-
const { tradingSymbol,
|
|
23864
|
+
const { tradingSymbol, side, product } = order.params;
|
|
23865
|
+
const exchange = order.params.exchange ?? "NSE";
|
|
23802
23866
|
const posKey = `${exchange}:${tradingSymbol}:${product}`;
|
|
23803
23867
|
if (!this.positions.has(posKey)) {
|
|
23804
23868
|
this.positions.set(posKey, {
|
|
@@ -23855,7 +23919,7 @@ class PaperBroker {
|
|
|
23855
23919
|
brokerOrderId: pending.orderId,
|
|
23856
23920
|
broker: "paper",
|
|
23857
23921
|
tradingSymbol: pending.params.tradingSymbol,
|
|
23858
|
-
exchange: pending.params.exchange,
|
|
23922
|
+
exchange: pending.params.exchange ?? "NSE",
|
|
23859
23923
|
side: pending.params.side,
|
|
23860
23924
|
type: pending.params.type,
|
|
23861
23925
|
product: pending.params.product,
|
|
@@ -23874,17 +23938,17 @@ class PaperBroker {
|
|
|
23874
23938
|
}
|
|
23875
23939
|
}
|
|
23876
23940
|
// src/index.ts
|
|
23877
|
-
var VERSION = "0.
|
|
23878
|
-
function createBroker(brokerId) {
|
|
23941
|
+
var VERSION = "0.3.0";
|
|
23942
|
+
function createBroker(brokerId, options) {
|
|
23879
23943
|
switch (brokerId) {
|
|
23880
23944
|
case "zerodha":
|
|
23881
|
-
return new ZerodhaBroker;
|
|
23945
|
+
return new ZerodhaBroker(options);
|
|
23882
23946
|
case "finvasia":
|
|
23883
|
-
return new FinvasiaBroker;
|
|
23947
|
+
return new FinvasiaBroker(options);
|
|
23884
23948
|
case "dhan":
|
|
23885
|
-
return new DhanBroker;
|
|
23949
|
+
return new DhanBroker(options);
|
|
23886
23950
|
case "paper":
|
|
23887
|
-
return new PaperBroker;
|
|
23951
|
+
return new PaperBroker(options);
|
|
23888
23952
|
default: {
|
|
23889
23953
|
const exhaustive = brokerId;
|
|
23890
23954
|
throw new Error(`Unknown broker: ${exhaustive}`);
|
|
@@ -20,7 +20,7 @@ export interface RedisClient {
|
|
|
20
20
|
publish(channel: string, message: string): Promise<number>;
|
|
21
21
|
del(...keys: string[]): Promise<number>;
|
|
22
22
|
}
|
|
23
|
-
interface SyncMeta {
|
|
23
|
+
export interface SyncMeta {
|
|
24
24
|
brokerId: BrokerId;
|
|
25
25
|
lastSyncAt: number;
|
|
26
26
|
instrumentCount: number;
|
|
@@ -39,6 +39,8 @@ export interface InstrumentMasterOptions {
|
|
|
39
39
|
*/
|
|
40
40
|
instrumentFilePath?: string;
|
|
41
41
|
}
|
|
42
|
+
/** Options passed to broker constructors for internal InstrumentMaster setup. */
|
|
43
|
+
export type BrokerOptions = InstrumentMasterOptions;
|
|
42
44
|
export declare class InstrumentMaster {
|
|
43
45
|
/** Primary store: `{exchange}:{tradingSymbol}` -> UnifiedInstrument */
|
|
44
46
|
private instruments;
|
|
@@ -105,6 +107,12 @@ export declare class InstrumentMaster {
|
|
|
105
107
|
* listing them so the caller can be explicit.
|
|
106
108
|
*/
|
|
107
109
|
resolve(input: string): Result<UnifiedInstrument>;
|
|
110
|
+
/**
|
|
111
|
+
* Resolve with fallback: memory → searchAPI → cache.
|
|
112
|
+
* If the symbol is not in memory and the broker has a searchAPI,
|
|
113
|
+
* query it, merge results, and retry the resolve.
|
|
114
|
+
*/
|
|
115
|
+
resolveAsync(input: string, brokerId: BrokerId, brokerInstruments: IBrokerInstruments): Promise<Result<UnifiedInstrument>>;
|
|
108
116
|
/**
|
|
109
117
|
* Get all CE and PE instruments for a given underlying and expiry date.
|
|
110
118
|
* Returns instruments sorted by strike price.
|
|
@@ -176,5 +184,4 @@ export declare class InstrumentMaster {
|
|
|
176
184
|
*/
|
|
177
185
|
private cacheInstrumentsToRedis;
|
|
178
186
|
}
|
|
179
|
-
export {};
|
|
180
187
|
//# sourceMappingURL=instrument-master.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"instrument-master.d.ts","sourceRoot":"","sources":["../../src/instruments/instrument-master.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAIH,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAC1E,OAAO,KAAK,EACV,iBAAiB,EACjB,kBAAkB,EAClB,qBAAqB,EACtB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAW,KAAK,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAIxD,MAAM,WAAW,WAAW;IAC1B,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IACzC,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAChF,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC3D,GAAG,CAAC,GAAG,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CACzC;AAID,
|
|
1
|
+
{"version":3,"file":"instrument-master.d.ts","sourceRoot":"","sources":["../../src/instruments/instrument-master.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAIH,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAC1E,OAAO,KAAK,EACV,iBAAiB,EACjB,kBAAkB,EAClB,qBAAqB,EACtB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAW,KAAK,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAIxD,MAAM,WAAW,WAAW;IAC1B,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IACzC,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAChF,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC3D,GAAG,CAAC,GAAG,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CACzC;AAID,MAAM,WAAW,QAAQ;IACvB,QAAQ,EAAE,QAAQ,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,MAAM,EAAE,SAAS,GAAG,MAAM,GAAG,OAAO,CAAC;CACtC;AAYD,MAAM,WAAW,uBAAuB;IACtC,0EAA0E;IAC1E,KAAK,CAAC,EAAE,WAAW,CAAC;IAEpB;;;;;;;OAOG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,iFAAiF;AACjF,MAAM,MAAM,aAAa,GAAG,uBAAuB,CAAC;AAQpD,qBAAa,gBAAgB;IAC3B,uEAAuE;IACvE,OAAO,CAAC,WAAW,CAAwC;IAE3D,kEAAkE;IAClE,OAAO,CAAC,UAAU,CAAsC;IAExD,+BAA+B;IAC/B,OAAO,CAAC,QAAQ,CAAiC;IAEjD,mDAAmD;IACnD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAqB;IAE3C,wDAAwD;IACxD,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAS;gBAEhC,OAAO,CAAC,EAAE,uBAAuB;IAO7C;;;;;;;;;;;;;;;OAeG;IACG,UAAU,CACd,QAAQ,EAAE,QAAQ,EAClB,iBAAiB,EAAE,kBAAkB,EACrC,KAAK,UAAQ,GACZ,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IA+D5B;;;OAGG;IACH,UAAU,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,qBAAqB,EAAE,GAAG,IAAI;IAgBtE;;;;;;;;OAQG;IACH,MAAM,CACJ,KAAK,EAAE,MAAM,EACb,QAAQ,CAAC,EAAE,QAAQ,EACnB,cAAc,CAAC,EAAE,cAAc,EAC/B,KAAK,SAAK,GACT,iBAAiB,EAAE;IA2BtB;;;OAGG;IACG,gBAAgB,CACpB,aAAa,EAAE,MAAM,EACrB,QAAQ,EAAE,QAAQ,GACjB,OAAO,CAAC,iBAAiB,GAAG,SAAS,CAAC;IAiBzC;;OAEG;IACH,WAAW,CAAC,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,GAAG,iBAAiB,GAAG,SAAS;IAKrF;;OAEG;IACH,UAAU,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,GAAG,iBAAiB,GAAG,SAAS;IASlF;;;;;;;OAOG;IACH,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC,iBAAiB,CAAC;IAuCjD;;;;OAIG;IACG,YAAY,CAChB,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,QAAQ,EAClB,iBAAiB,EAAE,kBAAkB,GACpC,OAAO,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC;IAmBrC;;;;OAIG;IACG,oBAAoB,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC;IA8B1F;;;OAGG;IACH,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,GAAG,iBAAiB,EAAE;IA+BrE,gDAAgD;IAChD,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,6CAA6C;IAC7C,IAAI,QAAQ,IAAI,MAAM,CAErB;IAED,+CAA+C;IAC/C,WAAW,CAAC,QAAQ,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS;IAIrD,yCAAyC;IACzC,cAAc,IAAI,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAIzC,gDAAgD;IAChD,MAAM,IAAI,iBAAiB,EAAE;IAI7B,mDAAmD;IACnD,aAAa,CAAC,QAAQ,EAAE,QAAQ,GAAG,iBAAiB,EAAE;IAUtD,+DAA+D;IAC/D,KAAK,IAAI,IAAI;IAQb;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAIxB;;OAEG;IACH,OAAO,CAAC,eAAe;IAMvB;;;OAGG;IACH,OAAO,CAAC,YAAY;IAiBpB;;OAEG;IACH,OAAO,CAAC,UAAU;IAclB;;;;OAIG;IACH,OAAO,CAAC,UAAU;IAsDlB,qEAAqE;IACrE,OAAO,CAAC,kBAAkB;IA6B1B;;;OAGG;IACH,OAAO,CAAC,UAAU;IA4BlB,qEAAqE;IACrE,OAAO,CAAC,UAAU;IAkBlB,+CAA+C;IAC/C,OAAO,CAAC,YAAY;IAQpB,yGAAyG;IACzG,OAAO,CAAC,oBAAoB;IAa5B,oFAAoF;IACpF,OAAO,CAAC,UAAU;IAalB,qDAAqD;IACrD,OAAO,CAAC,OAAO;IAIf;;;OAGG;YACW,uBAAuB;CA+BtC"}
|
|
@@ -1,16 +1,21 @@
|
|
|
1
|
-
import type { BrokerId, CandleInterval } from '../types/common';
|
|
2
|
-
import type { BrokerCredentials, AuthSession, UnifiedOrderParams, ModifyParams, OrderResult, CancelResult, UnifiedOrder, OrderUpdate, UnifiedPosition, UnifiedHolding, Quote, OptionChainRow, Candle, MarginInfo, FundInfo, Trade, PnLEntry, TickCallback, Subscription } from '../types/broker';
|
|
3
|
-
import type { IBrokerInstruments } from '../types/instruments';
|
|
1
|
+
import type { BrokerId, Exchange, CandleInterval, InstrumentType } from '../types/common';
|
|
2
|
+
import type { BrokerCredentials, AuthSession, UnifiedOrderParams, ModifyParams, OrderResult, CancelResult, UnifiedOrder, OrderUpdate, UnifiedPosition, UnifiedHolding, Quote, OptionChainRow, Candle, MarginInfo, FundInfo, Trade, PnLEntry, TickCallback, Subscription, BrokerCapabilities } from '../types/broker';
|
|
3
|
+
import type { IBrokerInstruments, UnifiedInstrument } from '../types/instruments';
|
|
4
4
|
import type { Result } from '../errors/result';
|
|
5
5
|
import type { WSConnectionState } from '../types/common';
|
|
6
|
+
import type { SyncMeta } from '../instruments/instrument-master';
|
|
6
7
|
export interface IBroker {
|
|
7
8
|
readonly id: BrokerId;
|
|
8
9
|
readonly name: string;
|
|
9
10
|
readonly instruments: IBrokerInstruments;
|
|
11
|
+
readonly has: BrokerCapabilities;
|
|
10
12
|
authenticate(creds: BrokerCredentials): Promise<Result<AuthSession>>;
|
|
11
13
|
refreshSession(session: AuthSession): Promise<Result<AuthSession>>;
|
|
12
14
|
isSessionValid(): boolean;
|
|
13
15
|
getSessionExpiry(): Date | null;
|
|
16
|
+
sync(force?: boolean): Promise<Result<SyncMeta>>;
|
|
17
|
+
resolve(input: string): Result<UnifiedInstrument>;
|
|
18
|
+
search(query: string, exchange?: Exchange, instrumentType?: InstrumentType, limit?: number): UnifiedInstrument[];
|
|
14
19
|
placeOrder(params: UnifiedOrderParams): Promise<Result<OrderResult>>;
|
|
15
20
|
modifyOrder(orderId: string, params: ModifyParams): Promise<Result<OrderResult>>;
|
|
16
21
|
cancelOrder(orderId: string): Promise<Result<CancelResult>>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"broker.interface.d.ts","sourceRoot":"","sources":["../../src/interfaces/broker.interface.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,
|
|
1
|
+
{"version":3,"file":"broker.interface.d.ts","sourceRoot":"","sources":["../../src/interfaces/broker.interface.ts"],"names":[],"mappings":"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"}
|
package/dist/types/broker.d.ts
CHANGED
|
@@ -19,7 +19,7 @@ export interface AuthSession {
|
|
|
19
19
|
}
|
|
20
20
|
export interface UnifiedOrderParams {
|
|
21
21
|
tradingSymbol: string;
|
|
22
|
-
exchange
|
|
22
|
+
exchange?: Exchange;
|
|
23
23
|
side: 'BUY' | 'SELL';
|
|
24
24
|
quantity: number;
|
|
25
25
|
type: OrderType;
|
|
@@ -30,6 +30,14 @@ export interface UnifiedOrderParams {
|
|
|
30
30
|
tag?: string;
|
|
31
31
|
disclosedQty?: number;
|
|
32
32
|
}
|
|
33
|
+
export interface BrokerCapabilities {
|
|
34
|
+
bulkDump: boolean;
|
|
35
|
+
searchAPI: boolean;
|
|
36
|
+
optionChain: boolean;
|
|
37
|
+
historicalCandles: boolean;
|
|
38
|
+
websocket: boolean;
|
|
39
|
+
pnlReport: boolean;
|
|
40
|
+
}
|
|
33
41
|
export interface ModifyParams {
|
|
34
42
|
price?: number;
|
|
35
43
|
quantity?: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"broker.d.ts","sourceRoot":"","sources":["../../src/types/broker.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,QAAQ,EAAkB,MAAM,UAAU,CAAC;AAI9H,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;CACnC;AAED,MAAM,WAAW,WAAW;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,QAAQ,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAGD,MAAM,WAAW,kBAAkB;IACjC,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"broker.d.ts","sourceRoot":"","sources":["../../src/types/broker.ts"],"names":[],"mappings":"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"}
|
package/dist/types/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
export type { BrokerId, Exchange, OrderType, Product, InstrumentType, CandleInterval, OrderStatus, Validity, WSConnectionState, } from './common';
|
|
2
|
-
export type { BrokerCredentials, AuthSession, UnifiedOrderParams, ModifyParams, OrderResult, CancelResult, UnifiedOrder, OrderUpdate, UnifiedPosition, UnifiedHolding, UnifiedTick, Quote, OptionChainRow, OptionData, Candle, MarginInfo, FundInfo, Trade, PnLEntry, TickCallback, Subscription, } from './broker';
|
|
2
|
+
export type { BrokerCredentials, AuthSession, UnifiedOrderParams, ModifyParams, OrderResult, CancelResult, UnifiedOrder, OrderUpdate, UnifiedPosition, UnifiedHolding, UnifiedTick, Quote, OptionChainRow, OptionData, Candle, MarginInfo, FundInfo, Trade, PnLEntry, TickCallback, Subscription, BrokerCapabilities, } from './broker';
|
|
3
3
|
export type { UnifiedInstrument, RawBrokerInstrument, BrokerInstrumentEntry, IBrokerInstruments, } from './instruments';
|
|
4
4
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,QAAQ,EACR,QAAQ,EACR,SAAS,EACT,OAAO,EACP,cAAc,EACd,cAAc,EACd,WAAW,EACX,QAAQ,EACR,iBAAiB,GAClB,MAAM,UAAU,CAAC;AAElB,YAAY,EACV,iBAAiB,EACjB,WAAW,EACX,kBAAkB,EAClB,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,eAAe,EACf,cAAc,EACd,WAAW,EACX,KAAK,EACL,cAAc,EACd,UAAU,EACV,MAAM,EACN,UAAU,EACV,QAAQ,EACR,KAAK,EACL,QAAQ,EACR,YAAY,EACZ,YAAY,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,QAAQ,EACR,QAAQ,EACR,SAAS,EACT,OAAO,EACP,cAAc,EACd,cAAc,EACd,WAAW,EACX,QAAQ,EACR,iBAAiB,GAClB,MAAM,UAAU,CAAC;AAElB,YAAY,EACV,iBAAiB,EACjB,WAAW,EACX,kBAAkB,EAClB,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,eAAe,EACf,cAAc,EACd,WAAW,EACX,KAAK,EACL,cAAc,EACd,UAAU,EACV,MAAM,EACN,UAAU,EACV,QAAQ,EACR,KAAK,EACL,QAAQ,EACR,YAAY,EACZ,YAAY,EACZ,kBAAkB,GACnB,MAAM,UAAU,CAAC;AAElB,YAAY,EACV,iBAAiB,EACjB,mBAAmB,EACnB,qBAAqB,EACrB,kBAAkB,GACnB,MAAM,eAAe,CAAC"}
|
|
@@ -48,12 +48,7 @@ export interface IBrokerInstruments {
|
|
|
48
48
|
rawFilePath: string;
|
|
49
49
|
};
|
|
50
50
|
streamDump?(): AsyncIterable<RawBrokerInstrument>;
|
|
51
|
-
|
|
52
|
-
etag?: string;
|
|
53
|
-
lastModified?: string;
|
|
54
|
-
}): Promise<boolean>;
|
|
55
|
-
search?(query: string, exchange?: Exchange): Promise<Result<BrokerInstrumentEntry[]>>;
|
|
56
|
-
resolve?(symbol: string, exchange: Exchange): Promise<Result<BrokerInstrumentEntry>>;
|
|
51
|
+
searchAPI?(query: string, exchange?: Exchange): Promise<Result<BrokerInstrumentEntry[]>>;
|
|
57
52
|
normalize(raw: RawBrokerInstrument): BrokerInstrumentEntry;
|
|
58
53
|
}
|
|
59
54
|
//# sourceMappingURL=instruments.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"instruments.d.ts","sourceRoot":"","sources":["../../src/types/instruments.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAY,QAAQ,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AACnE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE/C,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,QAAQ,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,cAAc,CAAC;IAC/B,MAAM,CAAC,EAAE,IAAI,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE;QACZ,OAAO,CAAC,EAAE;YAAE,aAAa,EAAE,MAAM,CAAC;YAAC,gBAAgB,EAAE,MAAM,CAAA;SAAE,CAAC;QAC9D,QAAQ,CAAC,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAA;SAAE,CAAC;QAC3C,IAAI,CAAC,EAAE;YAAE,UAAU,EAAE,MAAM,CAAC;YAAC,GAAG,EAAE,MAAM,CAAA;SAAE,CAAC;KAC5C,CAAC;CACH;AAED,MAAM,WAAW,mBAAmB;IAClC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,qBAAqB;IACpC,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,QAAQ,CAAC;IACnB,cAAc,EAAE,cAAc,CAAC;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,IAAI,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,GAAG,EAAE,mBAAmB,CAAC;CAC1B;AAED,MAAM,WAAW,kBAAkB;IACjC,YAAY,EAAE;QACZ,QAAQ,EAAE,OAAO,CAAC;QAClB,SAAS,EAAE,OAAO,CAAC;QACnB,YAAY,EAAE,IAAI,CAAC;QACnB,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;IAEF,UAAU,CAAC,IAAI,aAAa,CAAC,mBAAmB,CAAC,CAAC;IAClD,
|
|
1
|
+
{"version":3,"file":"instruments.d.ts","sourceRoot":"","sources":["../../src/types/instruments.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAY,QAAQ,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AACnE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE/C,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,QAAQ,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,cAAc,CAAC;IAC/B,MAAM,CAAC,EAAE,IAAI,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE;QACZ,OAAO,CAAC,EAAE;YAAE,aAAa,EAAE,MAAM,CAAC;YAAC,gBAAgB,EAAE,MAAM,CAAA;SAAE,CAAC;QAC9D,QAAQ,CAAC,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAA;SAAE,CAAC;QAC3C,IAAI,CAAC,EAAE;YAAE,UAAU,EAAE,MAAM,CAAC;YAAC,GAAG,EAAE,MAAM,CAAA;SAAE,CAAC;KAC5C,CAAC;CACH;AAED,MAAM,WAAW,mBAAmB;IAClC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,qBAAqB;IACpC,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,QAAQ,CAAC;IACnB,cAAc,EAAE,cAAc,CAAC;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,IAAI,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,GAAG,EAAE,mBAAmB,CAAC;CAC1B;AAED,MAAM,WAAW,kBAAkB;IACjC,YAAY,EAAE;QACZ,QAAQ,EAAE,OAAO,CAAC;QAClB,SAAS,EAAE,OAAO,CAAC;QACnB,YAAY,EAAE,IAAI,CAAC;QACnB,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;IAEF,UAAU,CAAC,IAAI,aAAa,CAAC,mBAAmB,CAAC,CAAC;IAClD,SAAS,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,qBAAqB,EAAE,CAAC,CAAC,CAAC;IACzF,SAAS,CAAC,GAAG,EAAE,mBAAmB,GAAG,qBAAqB,CAAC;CAC5D"}
|