nsekit 0.3.1 → 0.3.2

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.
@@ -15,6 +15,7 @@ import type { IBrokerInstruments, UnifiedInstrument } from '../../types/instrume
15
15
  import type { IBroker } from '../../interfaces/broker.interface';
16
16
  import { type Result } from '../../errors/result';
17
17
  import { type SyncMeta, type BrokerOptions } from '../../instruments/instrument-master';
18
+ import type { ConsentResult } from './dhan-auth';
18
19
  export declare class DhanBroker implements IBroker {
19
20
  readonly id: BrokerId;
20
21
  readonly name = "Dhan";
@@ -23,6 +24,7 @@ export declare class DhanBroker implements IBroker {
23
24
  private session;
24
25
  private socket;
25
26
  private clientId;
27
+ private oauthCreds;
26
28
  private readonly instrumentsImpl;
27
29
  private readonly _iMaster;
28
30
  constructor(options?: BrokerOptions);
@@ -30,6 +32,16 @@ export declare class DhanBroker implements IBroker {
30
32
  refreshSession(session: AuthSession): Promise<Result<AuthSession>>;
31
33
  isSessionValid(): boolean;
32
34
  getSessionExpiry(): Date | null;
35
+ /**
36
+ * OAuth Step 1: Generate consent and return the login URL.
37
+ * Stores credentials internally for use in consumeConsent.
38
+ */
39
+ generateConsent(creds: BrokerCredentials): Promise<Result<ConsentResult>>;
40
+ /**
41
+ * OAuth Step 2: Exchange tokenId (from callback) for an access_token.
42
+ * Must be called after generateConsent. Sets the session on success.
43
+ */
44
+ consumeConsent(tokenId: string): Promise<Result<AuthSession>>;
33
45
  sync(force?: boolean): Promise<Result<SyncMeta>>;
34
46
  resolve(input: string): Result<UnifiedInstrument>;
35
47
  search(query: string, exchange?: Exchange, instrumentType?: InstrumentType, limit?: number): UnifiedInstrument[];
@@ -45,6 +57,8 @@ export declare class DhanBroker implements IBroker {
45
57
  getOptionChain(underlying: string, expiry: Date): Promise<Result<OptionChainRow[]>>;
46
58
  getCandles(symbol: string, interval: CandleInterval, from: Date, to: Date): Promise<Result<Candle[]>>;
47
59
  subscribeTicks(tokens: string[], cb: TickCallback): Subscription;
60
+ /** Register token → tradingSymbol mappings so ticks resolve to proper symbols. */
61
+ setSymbolMap(map: Map<string, string>): void;
48
62
  unsubscribeTicks(sub: Subscription): void;
49
63
  getConnectionState(): WSConnectionState;
50
64
  getMargins(): Promise<Result<MarginInfo>>;
@@ -1 +1 @@
1
- {"version":3,"file":"DhanBroker.d.ts","sourceRoot":"","sources":["../../../src/brokers/dhan/DhanBroker.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"DhanBroker.d.ts","sourceRoot":"","sources":["../../../src/brokers/dhan/DhanBroker.ts"],"names":[],"mappings":"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"}
@@ -1,13 +1,17 @@
1
1
  /**
2
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
3
  *
7
- * There is no OAuth redirect flow — tokens are pre-generated.
4
+ * Supports two modes:
5
+ * 1. Token mode — user supplies a pre-generated access_token + client_id.
6
+ * 2. OAuth mode — 2-step consent flow (generateConsent → consumeConsent).
7
+ * Requires apiKey (App ID), apiSecret (App Secret), and userId (Dhan Client ID).
8
8
  */
9
9
  import type { AuthSession, BrokerCredentials } from '../../types/broker';
10
10
  import { type Result } from '../../errors/result';
11
+ export interface ConsentResult {
12
+ consentAppId: string;
13
+ loginUrl: string;
14
+ }
11
15
  /**
12
16
  * Authenticate with Dhan using client_id and access_token.
13
17
  *
@@ -18,6 +22,31 @@ import { type Result } from '../../errors/result';
18
22
  * Validates the token by fetching the user profile.
19
23
  */
20
24
  export declare function authenticate(creds: BrokerCredentials): Promise<Result<AuthSession>>;
25
+ /**
26
+ * OAuth Step 1: Generate consent.
27
+ *
28
+ * Calls Dhan auth API to create a consentAppId, then returns the login URL
29
+ * that the consumer should redirect the user to.
30
+ *
31
+ * Required credentials:
32
+ * - apiKey: App ID from DhanHQ developer portal
33
+ * - apiSecret: App Secret from DhanHQ developer portal
34
+ * - userId: Dhan Client ID
35
+ *
36
+ * @returns ConsentResult with `consentAppId` and `loginUrl`
37
+ */
38
+ export declare function generateConsent(creds: BrokerCredentials): Promise<Result<ConsentResult>>;
39
+ /**
40
+ * OAuth Step 2: Consume consent.
41
+ *
42
+ * After the user logs in and authorizes, the callback URL receives a `tokenId`.
43
+ * This function exchanges that tokenId for an access_token.
44
+ *
45
+ * @param creds - Same credentials used in generateConsent (apiKey + apiSecret)
46
+ * @param tokenId - The tokenId received from the Dhan callback URL
47
+ * @returns AuthSession with the new access_token
48
+ */
49
+ export declare function consumeConsent(creds: BrokerCredentials, tokenId: string): Promise<Result<AuthSession>>;
21
50
  /**
22
51
  * Dhan tokens are pre-generated and do not support refresh.
23
52
  * When a token expires, the user must generate a new one from the portal.
@@ -1 +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"}
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;AAwB3D,MAAM,WAAW,aAAa;IAC5B,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAID;;;;;;;;GAQG;AACH,wBAAsB,YAAY,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAwCzF;AAID;;;;;;;;;;;;GAYG;AACH,wBAAsB,eAAe,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAsC9F;AAED;;;;;;;;;GASG;AACH,wBAAsB,cAAc,CAClC,KAAK,EAAE,iBAAiB,EACxB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAgD9B;AAID;;;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"}
@@ -15,6 +15,7 @@ export declare const STATUS_FROM_DHAN: Record<string, OrderStatus>;
15
15
  export declare const VALIDITY_TO_DHAN: Record<Validity, string>;
16
16
  export declare const VALIDITY_FROM_DHAN: Record<string, Validity>;
17
17
  export declare const DHAN_API_BASE = "https://api.dhan.co/v2";
18
+ export declare const DHAN_AUTH_BASE = "https://auth.dhan.co";
18
19
  export declare const DHAN_WS_URL = "wss://api-feed.dhan.co";
19
20
  export declare const DHAN_INSTRUMENTS_URL = "https://images.dhan.co/api-data/api-scrip-master.csv";
20
21
  export declare const CANDLE_INTERVAL_TO_DHAN: Record<string, string>;
@@ -1 +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"}
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,cAAc,yBAAyB,CAAC;AACrD,eAAO,MAAM,WAAW,2BAA2B,CAAC;AACpD,eAAO,MAAM,oBAAoB,yDAAyD,CAAC;AAI3F,eAAO,MAAM,uBAAuB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAM1D,CAAC"}
@@ -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;;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"}
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;AAyElD,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;CAoC3D"}
@@ -90,6 +90,7 @@ export interface DhanHolding {
90
90
  availableQty: number;
91
91
  collateralQty: number;
92
92
  avgCostPrice: number;
93
+ lastTradedPrice?: number;
93
94
  [key: string]: unknown;
94
95
  }
95
96
  export interface DhanQuote {
@@ -1 +1 @@
1
- {"version":3,"file":"dhan-mapper.d.ts","sourceRoot":"","sources":["../../../src/brokers/dhan/dhan-mapper.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"dhan-mapper.d.ts","sourceRoot":"","sources":["../../../src/brokers/dhan/dhan-mapper.ts"],"names":[],"mappings":"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"}
@@ -46,6 +46,14 @@ export declare class DhanSocket {
46
46
  * Byte 3: Exchange segment (numeric)
47
47
  * Bytes 4-7: Security ID (int32 LE)
48
48
  *
49
+ * Index (code 1) — 32 bytes total:
50
+ * Bytes 8-11: LTP (float32 LE)
51
+ * Bytes 12-15: Last Trade Time epoch (int32 LE)
52
+ * Bytes 16-19: Day Open (float32 LE)
53
+ * Bytes 20-23: Day Close (float32 LE)
54
+ * Bytes 24-27: Day High (float32 LE)
55
+ * Bytes 28-31: Day Low (float32 LE)
56
+ *
49
57
  * Ticker (code 2) — 16 bytes total:
50
58
  * Bytes 8-11: LTP (float32 LE)
51
59
  * Bytes 12-15: Last Trade Time epoch (int32 LE)
@@ -1 +1 @@
1
- {"version":3,"file":"dhan-socket.d.ts","sourceRoot":"","sources":["../../../src/brokers/dhan/dhan-socket.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,KAAK,EAAe,YAAY,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAgDlF,qBAAa,UAAU;IACrB,OAAO,CAAC,EAAE,CAAmB;IAC7B,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;IAwDf,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;;;;;;;;;;;;;;;;;;;;;;;;;OAyBG;IACH,OAAO,CAAC,mBAAmB;IAkE3B,OAAO,CAAC,iBAAiB;IAczB,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"}
1
+ {"version":3,"file":"dhan-socket.d.ts","sourceRoot":"","sources":["../../../src/brokers/dhan/dhan-socket.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,KAAK,EAAe,YAAY,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAiDlF,qBAAa,UAAU;IACrB,OAAO,CAAC,EAAE,CAAmB;IAC7B,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;IAwDf,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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAiCG;IACH,OAAO,CAAC,mBAAmB;IA4F3B,OAAO,CAAC,iBAAiB;IAczB,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"}
@@ -22,6 +22,7 @@ export declare class FinvasiaBroker implements IBroker {
22
22
  readonly has: BrokerCapabilities;
23
23
  private session;
24
24
  private socket;
25
+ private credentials;
25
26
  private readonly instrumentsImpl;
26
27
  private readonly _iMaster;
27
28
  constructor(options?: BrokerOptions);
@@ -44,6 +45,8 @@ export declare class FinvasiaBroker implements IBroker {
44
45
  getOptionChain(underlying: string, expiry: Date): Promise<Result<OptionChainRow[]>>;
45
46
  getCandles(symbol: string, interval: CandleInterval, from: Date, to: Date): Promise<Result<Candle[]>>;
46
47
  subscribeTicks(tokens: string[], cb: TickCallback): Subscription;
48
+ /** Register token → tradingSymbol mappings so ticks resolve to proper symbols. */
49
+ setSymbolMap(map: Map<string, string>): void;
47
50
  unsubscribeTicks(sub: Subscription): void;
48
51
  getConnectionState(): WSConnectionState;
49
52
  getMargins(): Promise<Result<MarginInfo>>;
@@ -52,5 +55,10 @@ export declare class FinvasiaBroker implements IBroker {
52
55
  getPnLReport(_from: Date, _to: Date): Promise<Result<PnLEntry[]>>;
53
56
  private post;
54
57
  private ensureSocket;
58
+ /**
59
+ * Called when the WebSocket receives a "ck NOT_OK" response.
60
+ * Re-authenticates with stored credentials and reconnects with the fresh token.
61
+ */
62
+ private handleSocketAuthFailed;
55
63
  }
56
64
  //# sourceMappingURL=FinvasiaBroker.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"FinvasiaBroker.d.ts","sourceRoot":"","sources":["../../../src/brokers/finvasia/FinvasiaBroker.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"FinvasiaBroker.d.ts","sourceRoot":"","sources":["../../../src/brokers/finvasia/FinvasiaBroker.ts"],"names":[],"mappings":"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"}
@@ -21,7 +21,7 @@ export declare class FinvasiaInstruments implements IBrokerInstruments {
21
21
  setCredentials(userId: string, accessToken: string): void;
22
22
  /**
23
23
  * Stream instruments from all per-exchange ZIP files.
24
- * Yields raw row objects parsed from pipe-delimited text.
24
+ * Yields raw row objects parsed from comma-delimited CSV text.
25
25
  */
26
26
  streamDump(): AsyncIterable<RawBrokerInstrument>;
27
27
  /**
@@ -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;;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"}
1
+ {"version":3,"file":"finvasia-instruments.d.ts","sourceRoot":"","sources":["../../../src/brokers/finvasia/finvasia-instruments.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,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;AAyGlD,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;IA4DvD;;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"}
@@ -27,6 +27,7 @@ export interface ShoonyaPosition {
27
27
  daybuyqty: string;
28
28
  daysellqty: string;
29
29
  netavgprc: string;
30
+ upldprc: string;
30
31
  lp: string;
31
32
  rpnl: string;
32
33
  urmtom: string;
@@ -55,6 +56,8 @@ export interface ShoonyaOrder {
55
56
  }
56
57
  export interface ShoonyaTick {
57
58
  tk: string;
59
+ ts?: string;
60
+ e?: string;
58
61
  lp: string;
59
62
  pc?: string;
60
63
  o?: string;
@@ -84,6 +87,7 @@ export interface ShoonyaHolding {
84
87
  upldprc: string;
85
88
  isin: string;
86
89
  lp?: string;
90
+ c?: string;
87
91
  [key: string]: unknown;
88
92
  }
89
93
  export interface ShoonyaQuote {
@@ -114,7 +118,7 @@ export declare function fromOrder(order: ShoonyaOrder): UnifiedOrder;
114
118
  /** Convert a Shoonya WebSocket tick to UnifiedTick. */
115
119
  export declare function fromTick(tick: ShoonyaTick, symbolLookup?: string): UnifiedTick;
116
120
  /** Convert a Shoonya holding to UnifiedHolding. */
117
- export declare function fromHolding(holding: ShoonyaHolding): UnifiedHolding;
121
+ export declare function fromHolding(holding: ShoonyaHolding, ltp?: number): UnifiedHolding;
118
122
  /** Convert a Shoonya quote response to unified Quote. */
119
123
  export declare function fromQuote(quote: ShoonyaQuote): Quote;
120
124
  //# sourceMappingURL=finvasia-mapper.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"finvasia-mapper.d.ts","sourceRoot":"","sources":["../../../src/brokers/finvasia/finvasia-mapper.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"finvasia-mapper.d.ts","sourceRoot":"","sources":["../../../src/brokers/finvasia/finvasia-mapper.ts"],"names":[],"mappings":"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"}
@@ -12,15 +12,21 @@ export declare class FinvasiaSocket {
12
12
  private tokenToSymbol;
13
13
  private subscribedTokens;
14
14
  private readonly userId;
15
- private readonly accessToken;
15
+ private accessToken;
16
16
  private reconnectAttempts;
17
17
  private maxReconnects;
18
18
  private reconnectTimer;
19
- constructor(userId: string, accessToken: string);
19
+ private readonly onAuthFailed?;
20
+ constructor(userId: string, accessToken: string, onAuthFailed?: () => void);
20
21
  /** Connect to the Shoonya WebSocket endpoint. */
21
22
  connect(): void;
22
23
  /** Gracefully disconnect. */
23
24
  disconnect(): void;
25
+ /**
26
+ * Reconnect with an optionally updated access token.
27
+ * Used after re-authentication to resume with a fresh session.
28
+ */
29
+ reconnect(newToken?: string): void;
24
30
  /**
25
31
  * Subscribe to tokens for tick data.
26
32
  * Tokens should be in "EXCHANGE|TOKEN" format (e.g. "NSE|26000").
@@ -1 +1 @@
1
- {"version":3,"file":"finvasia-socket.d.ts","sourceRoot":"","sources":["../../../src/brokers/finvasia/finvasia-socket.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,KAAK,EAAe,YAAY,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAelF,qBAAa,cAAc;IACzB,OAAO,CAAC,EAAE,CAAmB;IAC7B,OAAO,CAAC,KAAK,CAAqC;IAClD,OAAO,CAAC,aAAa,CAAmC;IACxD,OAAO,CAAC,aAAa,CAA6B;IAClD,OAAO,CAAC,gBAAgB,CAAqB;IAE7C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,iBAAiB,CAAK;IAC9B,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,cAAc,CAA8C;gBAExD,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM;IAK/C,iDAAiD;IACjD,OAAO,IAAI,IAAI;IAgDf,6BAA6B;IAC7B,UAAU,IAAI,IAAI;IAWlB;;;OAGG;IACH,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,YAAY,EAAE,SAAS,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,YAAY;IAuBlG,0DAA0D;IAC1D,WAAW,CAAC,GAAG,EAAE,YAAY,GAAG,IAAI;IAuBpC,gCAAgC;IAChC,kBAAkB,IAAI,iBAAiB;IAIvC,oDAAoD;IACpD,YAAY,CAAC,GAAG,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI;IAQ5C,OAAO,CAAC,aAAa;IAgCrB,OAAO,CAAC,aAAa;IAWrB,OAAO,CAAC,eAAe;IAUvB,OAAO,CAAC,YAAY;IAYpB,OAAO,CAAC,gBAAgB;IAYxB,OAAO,CAAC,mBAAmB;CAM5B"}
1
+ {"version":3,"file":"finvasia-socket.d.ts","sourceRoot":"","sources":["../../../src/brokers/finvasia/finvasia-socket.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,KAAK,EAAe,YAAY,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAelF,qBAAa,cAAc;IACzB,OAAO,CAAC,EAAE,CAAmB;IAC7B,OAAO,CAAC,KAAK,CAAqC;IAClD,OAAO,CAAC,aAAa,CAAmC;IACxD,OAAO,CAAC,aAAa,CAA6B;IAClD,OAAO,CAAC,gBAAgB,CAAqB;IAE7C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,iBAAiB,CAAK;IAC9B,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,cAAc,CAA8C;IACpE,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAa;gBAE/B,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,IAAI;IAM1E,iDAAiD;IACjD,OAAO,IAAI,IAAI;IAgDf,6BAA6B;IAC7B,UAAU,IAAI,IAAI;IAWlB;;;OAGG;IACH,SAAS,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI;IAYlC;;;OAGG;IACH,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,YAAY,EAAE,SAAS,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,YAAY;IA2BlG,0DAA0D;IAC1D,WAAW,CAAC,GAAG,EAAE,YAAY,GAAG,IAAI;IAuBpC,gCAAgC;IAChC,kBAAkB,IAAI,iBAAiB;IAIvC,oDAAoD;IACpD,YAAY,CAAC,GAAG,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI;IAe5C,OAAO,CAAC,aAAa;IA4CrB,OAAO,CAAC,aAAa;IAWrB,OAAO,CAAC,eAAe;IAUvB,OAAO,CAAC,YAAY;IAYpB,OAAO,CAAC,gBAAgB;IAYxB,OAAO,CAAC,mBAAmB;CAM5B"}
package/dist/index.js CHANGED
@@ -19448,8 +19448,9 @@ class InstrumentMaster {
19448
19448
  if (local.ok)
19449
19449
  return local;
19450
19450
  if (brokerInstruments.capabilities.searchAPI && brokerInstruments.searchAPI) {
19451
- const { symbol } = this.parseInput(input);
19452
- const apiResult = await brokerInstruments.searchAPI(symbol);
19451
+ const { exchange, symbol } = this.parseInput(input);
19452
+ const inferredExchange = exchange ?? (/-(?:CE|PE|FUT)-/.test(symbol) ? "NFO" : undefined);
19453
+ const apiResult = await brokerInstruments.searchAPI(symbol, inferredExchange);
19453
19454
  if (apiResult.ok && apiResult.value.length > 0) {
19454
19455
  for (const entry of apiResult.value)
19455
19456
  this.mergeEntry(brokerId, entry);
@@ -20192,8 +20193,8 @@ function safeSide(raw) {
20192
20193
  }
20193
20194
  function parseTimestamp(ts) {
20194
20195
  if (!ts)
20195
- return Date.now();
20196
- return new Date(ts).getTime();
20196
+ return 0;
20197
+ return new Date(ts).getTime() || 0;
20197
20198
  }
20198
20199
  function inferInstrumentType(symbol, exchange) {
20199
20200
  if (exchange === "NSE" || exchange === "BSE")
@@ -21169,13 +21170,18 @@ function inferSide2(qty) {
21169
21170
  }
21170
21171
  function parseTimestamp2(ts) {
21171
21172
  if (!ts)
21172
- return Date.now();
21173
+ return 0;
21173
21174
  const asNum = Number(ts);
21174
21175
  if (!isNaN(asNum) && asNum > 1000000000000)
21175
21176
  return asNum;
21176
21177
  if (!isNaN(asNum) && asNum > 1e9)
21177
21178
  return asNum * 1000;
21178
- return new Date(ts).getTime() || Date.now();
21179
+ const shoonya = ts.match(/^(\d{2}:\d{2}:\d{2})\s+(\d{2})-(\d{2})-(\d{4})$/);
21180
+ if (shoonya) {
21181
+ const [, time, dd, mm, yyyy] = shoonya;
21182
+ return new Date(`${yyyy}-${mm}-${dd}T${time}`).getTime() || 0;
21183
+ }
21184
+ return new Date(ts).getTime() || 0;
21179
21185
  }
21180
21186
  function toOrderParams2(unified, uid, actid) {
21181
21187
  const params = {
@@ -21203,17 +21209,21 @@ function fromPosition2(pos) {
21203
21209
  const buyQty = num(pos.daybuyqty);
21204
21210
  const sellQty = num(pos.daysellqty);
21205
21211
  const realizedPnl = num(pos.rpnl);
21206
- const unrealizedPnl = num(pos.urmtom);
21212
+ const ltp = num(pos.lp);
21213
+ const entryPrice = num(pos.upldprc);
21214
+ const avgPrice = entryPrice > 0 ? entryPrice : num(pos.netavgprc);
21215
+ const unrealizedPnl = entryPrice > 0 ? (ltp - entryPrice) * netQty : num(pos.urmtom);
21216
+ const tradingSymbol = pos.tsym.replace(/-EQ$|-BE$|-BL$|-IL$|-IQ$/, "");
21207
21217
  return {
21208
21218
  broker: "finvasia",
21209
- tradingSymbol: pos.tsym,
21219
+ tradingSymbol,
21210
21220
  exchange: safeExchange2(pos.exch),
21211
21221
  side: inferSide2(netQty),
21212
21222
  quantity: Math.abs(netQty),
21213
21223
  buyQty,
21214
21224
  sellQty,
21215
- avgPrice: num(pos.netavgprc),
21216
- ltp: num(pos.lp),
21225
+ avgPrice,
21226
+ ltp,
21217
21227
  pnl: realizedPnl + unrealizedPnl,
21218
21228
  realizedPnl,
21219
21229
  unrealizedPnl,
@@ -21250,7 +21260,7 @@ function fromTick2(tick, symbolLookup) {
21250
21260
  return {
21251
21261
  broker: "finvasia",
21252
21262
  token: tick.tk,
21253
- tradingSymbol: symbolLookup ?? tick.tk,
21263
+ tradingSymbol: symbolLookup ?? tick.ts ?? tick.tk,
21254
21264
  ltp: num(tick.lp),
21255
21265
  open: num(tick.o),
21256
21266
  high: num(tick.h),
@@ -21265,15 +21275,17 @@ function fromTick2(tick, symbolLookup) {
21265
21275
  timestamp: parseTimestamp2(tick.ft)
21266
21276
  };
21267
21277
  }
21268
- function fromHolding2(holding) {
21278
+ function fromHolding2(holding, ltp = 0) {
21269
21279
  const first = holding.exch_tsym?.[0];
21270
21280
  const qty = num(holding.holdqty) + num(holding.dpqty) + num(holding.npoadqty) + num(holding.btstqty) - num(holding.usedqty);
21271
21281
  const avgPrice = num(holding.upldprc);
21272
- const ltp = num(holding.lp);
21282
+ ltp = num(holding.lp) || num(holding.c) || ltp;
21273
21283
  const pnl = (ltp - avgPrice) * qty;
21284
+ const rawSymbol = first?.tsym ?? "";
21285
+ const tradingSymbol = rawSymbol.replace(/-EQ$|-BE$|-BL$|-IL$|-IQ$/, "");
21274
21286
  return {
21275
21287
  broker: "finvasia",
21276
- tradingSymbol: first?.tsym ?? "",
21288
+ tradingSymbol,
21277
21289
  exchange: safeExchange2(first?.exch ?? "NSE"),
21278
21290
  isin: holding.isin ?? "",
21279
21291
  quantity: qty,
@@ -21330,9 +21342,11 @@ class FinvasiaSocket {
21330
21342
  reconnectAttempts = 0;
21331
21343
  maxReconnects = 5;
21332
21344
  reconnectTimer = null;
21333
- constructor(userId, accessToken) {
21345
+ onAuthFailed;
21346
+ constructor(userId, accessToken, onAuthFailed) {
21334
21347
  this.userId = userId;
21335
21348
  this.accessToken = accessToken;
21349
+ this.onAuthFailed = onAuthFailed;
21336
21350
  }
21337
21351
  connect() {
21338
21352
  if (this.state === "CONNECTED" || this.state === "CONNECTING")
@@ -21382,6 +21396,18 @@ class FinvasiaSocket {
21382
21396
  this.state = "DISCONNECTED";
21383
21397
  this.subscribedTokens.clear();
21384
21398
  }
21399
+ reconnect(newToken) {
21400
+ this.clearReconnectTimer();
21401
+ if (newToken)
21402
+ this.accessToken = newToken;
21403
+ this.reconnectAttempts = 0;
21404
+ if (this.ws) {
21405
+ this.ws.close();
21406
+ this.ws = null;
21407
+ }
21408
+ this.state = "DISCONNECTED";
21409
+ this.connect();
21410
+ }
21385
21411
  subscribe(tokens, callback, symbolMap) {
21386
21412
  const sub = {
21387
21413
  id: nextSubId3(),
@@ -21392,7 +21418,11 @@ class FinvasiaSocket {
21392
21418
  for (const t of tokens) {
21393
21419
  this.subscribedTokens.add(t);
21394
21420
  if (symbolMap?.has(t)) {
21395
- this.tokenToSymbol.set(t, symbolMap.get(t));
21421
+ const sym = symbolMap.get(t);
21422
+ this.tokenToSymbol.set(t, sym);
21423
+ const sep = t.indexOf("|");
21424
+ if (sep !== -1)
21425
+ this.tokenToSymbol.set(t.slice(sep + 1), sym);
21396
21426
  }
21397
21427
  }
21398
21428
  if (this.ws && this.state === "CONNECTED") {
@@ -21425,6 +21455,10 @@ class FinvasiaSocket {
21425
21455
  setSymbolMap(map) {
21426
21456
  for (const [token, symbol] of map) {
21427
21457
  this.tokenToSymbol.set(token, symbol);
21458
+ const sep = token.indexOf("|");
21459
+ if (sep !== -1) {
21460
+ this.tokenToSymbol.set(token.slice(sep + 1), symbol);
21461
+ }
21428
21462
  }
21429
21463
  }
21430
21464
  handleMessage(data) {
@@ -21436,6 +21470,11 @@ class FinvasiaSocket {
21436
21470
  if (this.subscribedTokens.size > 0) {
21437
21471
  this.sendSubscribe(Array.from(this.subscribedTokens));
21438
21472
  }
21473
+ } else {
21474
+ console.error(`[FinvasiaSocket] Auth rejected (ck NOT_OK) \u2014 token invalid, stopping reconnect`);
21475
+ this.reconnectAttempts = this.maxReconnects;
21476
+ this.state = "DISCONNECTED";
21477
+ this.onAuthFailed?.();
21439
21478
  }
21440
21479
  return;
21441
21480
  }
@@ -21444,6 +21483,10 @@ class FinvasiaSocket {
21444
21483
  const rawToken = tick.tk;
21445
21484
  const exch = data["e"] ?? "";
21446
21485
  const fullKey = exch ? `${exch}|${rawToken}` : rawToken;
21486
+ if (tick.ts && !this.tokenToSymbol.has(fullKey)) {
21487
+ this.tokenToSymbol.set(fullKey, tick.ts);
21488
+ this.tokenToSymbol.set(rawToken, tick.ts);
21489
+ }
21447
21490
  const symbol = this.tokenToSymbol.get(fullKey) ?? this.tokenToSymbol.get(rawToken);
21448
21491
  const unified = fromTick2(tick, symbol);
21449
21492
  unified.token = fullKey;
@@ -21497,6 +21540,27 @@ class FinvasiaSocket {
21497
21540
  }
21498
21541
 
21499
21542
  // src/brokers/finvasia/finvasia-instruments.ts
21543
+ import { inflateRawSync } from "zlib";
21544
+ function extractTextFromZip(buffer) {
21545
+ const bytes = new Uint8Array(buffer);
21546
+ if (bytes.length < 30 || bytes[0] !== 80 || bytes[1] !== 75 || bytes[2] !== 3 || bytes[3] !== 4) {
21547
+ return new TextDecoder().decode(buffer);
21548
+ }
21549
+ const view = new DataView(buffer);
21550
+ const compressionMethod = view.getUint16(8, true);
21551
+ const compressedSize = view.getUint32(18, true);
21552
+ const filenameLength = view.getUint16(26, true);
21553
+ const extraFieldLength = view.getUint16(28, true);
21554
+ const dataOffset = 30 + filenameLength + extraFieldLength;
21555
+ const compressedData = new Uint8Array(buffer, dataOffset, compressedSize);
21556
+ if (compressionMethod === 0) {
21557
+ return new TextDecoder().decode(compressedData);
21558
+ }
21559
+ if (compressionMethod === 8) {
21560
+ return new TextDecoder().decode(inflateRawSync(compressedData));
21561
+ }
21562
+ throw new Error(`Unsupported ZIP compression method: ${compressionMethod}`);
21563
+ }
21500
21564
  var COL2 = {
21501
21565
  EXCHANGE: 0,
21502
21566
  TOKEN: 1,
@@ -21509,6 +21573,18 @@ var COL2 = {
21509
21573
  STRIKE: 8,
21510
21574
  OPTION_TYPE: 9
21511
21575
  };
21576
+ var HEADER_MAP = {
21577
+ Exchange: "exchange",
21578
+ Token: "token",
21579
+ LotSize: "lot_size",
21580
+ Symbol: "symbol",
21581
+ TradingSymbol: "trading_symbol",
21582
+ Expiry: "expiry",
21583
+ Instrument: "instrument_type",
21584
+ OptionType: "option_type",
21585
+ StrikePrice: "strike",
21586
+ TickSize: "tick_size"
21587
+ };
21512
21588
  var EXCHANGE_MAP2 = {
21513
21589
  NSE: "NSE",
21514
21590
  BSE: "BSE",
@@ -21568,7 +21644,7 @@ class FinvasiaInstruments {
21568
21644
  const response = await fetch(url);
21569
21645
  if (!response.ok)
21570
21646
  continue;
21571
- const text = await response.text();
21647
+ const text = extractTextFromZip(await response.arrayBuffer());
21572
21648
  const lines = text.split(`
21573
21649
  `);
21574
21650
  let headers = null;
@@ -21576,10 +21652,10 @@ class FinvasiaInstruments {
21576
21652
  const trimmed = line.trim();
21577
21653
  if (!trimmed)
21578
21654
  continue;
21579
- const fields = trimmed.split("|");
21655
+ const fields = trimmed.split(",");
21580
21656
  if (!headers) {
21581
21657
  if (fields[0] === "Exchange" || fields[0] === "exch") {
21582
- headers = fields;
21658
+ headers = fields.map((h) => HEADER_MAP[h] ?? h.toLowerCase());
21583
21659
  continue;
21584
21660
  }
21585
21661
  headers = [];
@@ -21695,6 +21771,7 @@ class FinvasiaBroker {
21695
21771
  };
21696
21772
  session = null;
21697
21773
  socket = null;
21774
+ credentials = null;
21698
21775
  instrumentsImpl;
21699
21776
  _iMaster;
21700
21777
  constructor(options) {
@@ -21706,6 +21783,7 @@ class FinvasiaBroker {
21706
21783
  const result = await authenticate2(creds);
21707
21784
  if (!result.ok)
21708
21785
  return result;
21786
+ this.credentials = creds;
21709
21787
  this.session = result.value;
21710
21788
  this.instrumentsImpl.setCredentials(this.session.userId, this.session.accessToken);
21711
21789
  return result;
@@ -22002,6 +22080,10 @@ class FinvasiaBroker {
22002
22080
  this.ensureSocket();
22003
22081
  return this.socket.subscribe(tokens, cb);
22004
22082
  }
22083
+ setSymbolMap(map) {
22084
+ this.ensureSocket();
22085
+ this.socket.setSymbolMap(map);
22086
+ }
22005
22087
  unsubscribeTicks(sub) {
22006
22088
  if (this.socket) {
22007
22089
  this.socket.unsubscribe(sub);
@@ -22109,9 +22191,30 @@ class FinvasiaBroker {
22109
22191
  return;
22110
22192
  if (!this.session)
22111
22193
  throw new Error("Cannot create socket without an active session");
22112
- this.socket = new FinvasiaSocket(this.session.userId, this.session.accessToken);
22194
+ this.socket = new FinvasiaSocket(this.session.userId, this.session.accessToken, () => {
22195
+ this.handleSocketAuthFailed();
22196
+ });
22113
22197
  this.socket.connect();
22114
22198
  }
22199
+ handleSocketAuthFailed() {
22200
+ if (!this.credentials) {
22201
+ console.error("[FinvasiaBroker] Socket auth failed but no credentials stored \u2014 cannot re-authenticate");
22202
+ return;
22203
+ }
22204
+ console.log("[FinvasiaBroker] Socket auth failed, re-authenticating...");
22205
+ authenticate2(this.credentials).then((result) => {
22206
+ if (!result.ok) {
22207
+ console.error("[FinvasiaBroker] Re-authentication failed:", result.error instanceof Error ? result.error.message : result.error);
22208
+ return;
22209
+ }
22210
+ this.session = result.value;
22211
+ this.instrumentsImpl.setCredentials(this.session.userId, this.session.accessToken);
22212
+ console.log("[FinvasiaBroker] Re-authenticated successfully, reconnecting socket");
22213
+ this.socket?.reconnect(this.session.accessToken);
22214
+ }).catch((err) => {
22215
+ console.error("[FinvasiaBroker] Re-authentication exception:", err instanceof Error ? err.message : err);
22216
+ });
22217
+ }
22115
22218
  }
22116
22219
  // src/brokers/dhan/dhan-constants.ts
22117
22220
  var EXCHANGE_TO_DHAN = {
@@ -22181,6 +22284,7 @@ var VALIDITY_FROM_DHAN = {
22181
22284
  IOC: "IOC"
22182
22285
  };
22183
22286
  var DHAN_API_BASE = "https://api.dhan.co/v2";
22287
+ var DHAN_AUTH_BASE = "https://auth.dhan.co";
22184
22288
  var DHAN_WS_URL = "wss://api-feed.dhan.co";
22185
22289
  var DHAN_INSTRUMENTS_URL = "https://images.dhan.co/api-data/api-scrip-master.csv";
22186
22290
  var CANDLE_INTERVAL_TO_DHAN = {
@@ -22226,6 +22330,79 @@ async function authenticate3(creds) {
22226
22330
  return Err(err instanceof Error ? err : new Error(String(err)));
22227
22331
  }
22228
22332
  }
22333
+ async function generateConsent(creds) {
22334
+ const { apiKey: appId, apiSecret: appSecret, userId: clientId } = creds;
22335
+ if (!appId)
22336
+ return Err(new Error("Missing apiKey (App ID) in credentials"));
22337
+ if (!appSecret)
22338
+ return Err(new Error("Missing apiSecret (App Secret) in credentials"));
22339
+ if (!clientId)
22340
+ return Err(new Error("Missing userId (Dhan Client ID) in credentials"));
22341
+ try {
22342
+ const response = await fetch(`${DHAN_AUTH_BASE}/app/generate-consent?client_id=${clientId}`, {
22343
+ method: "POST",
22344
+ headers: {
22345
+ "Content-Type": "application/json",
22346
+ app_id: appId,
22347
+ app_secret: appSecret
22348
+ },
22349
+ body: JSON.stringify({})
22350
+ });
22351
+ if (!response.ok) {
22352
+ const body = await response.text();
22353
+ return Err(new Error(`Dhan generate-consent failed (${response.status}): ${body}`));
22354
+ }
22355
+ const data = await response.json();
22356
+ if (!data.consentAppId) {
22357
+ return Err(new Error(data.message ?? "Failed to generate consent \u2014 no consentAppId returned"));
22358
+ }
22359
+ const loginUrl = `${DHAN_AUTH_BASE}/login/consentApp-login?consentAppId=${data.consentAppId}`;
22360
+ return Ok({ consentAppId: data.consentAppId, loginUrl });
22361
+ } catch (err) {
22362
+ return Err(err instanceof Error ? err : new Error(String(err)));
22363
+ }
22364
+ }
22365
+ async function consumeConsent(creds, tokenId) {
22366
+ const { apiKey: appId, apiSecret: appSecret, userId: clientId } = creds;
22367
+ if (!appId)
22368
+ return Err(new Error("Missing apiKey (App ID) in credentials"));
22369
+ if (!appSecret)
22370
+ return Err(new Error("Missing apiSecret (App Secret) in credentials"));
22371
+ if (!tokenId)
22372
+ return Err(new Error("Missing tokenId from callback"));
22373
+ try {
22374
+ const response = await fetch(`${DHAN_AUTH_BASE}/app/consumeApp-consent?tokenId=${encodeURIComponent(tokenId)}`, {
22375
+ method: "POST",
22376
+ headers: {
22377
+ "Content-Type": "application/json",
22378
+ app_id: appId,
22379
+ app_secret: appSecret
22380
+ },
22381
+ body: JSON.stringify({})
22382
+ });
22383
+ if (!response.ok) {
22384
+ const body = await response.text();
22385
+ return Err(new Error(`Dhan consumeApp-consent failed (${response.status}): ${body}`));
22386
+ }
22387
+ const data = await response.json();
22388
+ if (!data.accessToken) {
22389
+ return Err(new Error(data.message ?? "Failed to get access token \u2014 no accessToken returned"));
22390
+ }
22391
+ const thirtyDaysMs = 30 * 24 * 60 * 60 * 1000;
22392
+ const session = {
22393
+ accessToken: data.accessToken,
22394
+ refreshToken: undefined,
22395
+ expiresAt: Date.now() + thirtyDaysMs,
22396
+ ttlSeconds: 30 * 24 * 60 * 60,
22397
+ brokerId: "dhan",
22398
+ userId: clientId ?? "",
22399
+ metadata: { authMode: "oauth" }
22400
+ };
22401
+ return Ok(session);
22402
+ } catch (err) {
22403
+ return Err(err instanceof Error ? err : new Error(String(err)));
22404
+ }
22405
+ }
22229
22406
  async function refreshSession3(_session) {
22230
22407
  return Err(new Error("Dhan does not support token refresh. Generate a new access token from the Dhan developer portal."));
22231
22408
  }
@@ -22256,10 +22433,10 @@ function safeSide3(raw) {
22256
22433
  }
22257
22434
  function parseTimestamp3(ts) {
22258
22435
  if (!ts)
22259
- return Date.now();
22436
+ return 0;
22260
22437
  if (typeof ts === "number")
22261
22438
  return ts > 1000000000000 ? ts : ts * 1000;
22262
- return new Date(ts).getTime() || Date.now();
22439
+ return new Date(ts).getTime() || 0;
22263
22440
  }
22264
22441
  function inferInstrumentType3(exchangeSegment, tradingSymbol) {
22265
22442
  if (exchangeSegment === "NSE_EQ" || exchangeSegment === "BSE_EQ")
@@ -22368,6 +22545,7 @@ function fromTick3(tick, symbolLookup) {
22368
22545
  function fromHolding3(holding, ltp = 0) {
22369
22546
  const qty = holding.totalQty ?? holding.availableQty;
22370
22547
  const avgPrice = holding.avgCostPrice;
22548
+ ltp = holding.lastTradedPrice ?? ltp;
22371
22549
  const pnl = (ltp - avgPrice) * qty;
22372
22550
  return {
22373
22551
  broker: "dhan",
@@ -22416,13 +22594,14 @@ function nextSubId4() {
22416
22594
  return `dsub_${subIdCounter4}`;
22417
22595
  }
22418
22596
  var EXCH_SEG_FROM_BYTE = {
22419
- 0: "IDX",
22597
+ 0: "IDX_I",
22420
22598
  1: "NSE_EQ",
22421
22599
  2: "NSE_FNO",
22422
22600
  3: "NSE_CURRENCY",
22423
22601
  4: "BSE_EQ",
22424
- 5: "BSE_FNO",
22425
- 6: "MCX_COMM"
22602
+ 5: "MCX_COMM",
22603
+ 7: "BSE_CURRENCY",
22604
+ 8: "BSE_FNO"
22426
22605
  };
22427
22606
  function splitToken(token) {
22428
22607
  const sep = token.includes("|") ? "|" : ":";
@@ -22548,8 +22727,34 @@ class DhanSocket {
22548
22727
  const exchSegByte = data.readUInt8(3);
22549
22728
  const securityId = data.readInt32LE(4);
22550
22729
  const exchangeSegment = EXCH_SEG_FROM_BYTE[exchSegByte] ?? "NSE_EQ";
22551
- const fullKey = `${exchangeSegment}|${securityId}`;
22552
- if (responseCode === 2 && data.length >= 16) {
22730
+ const fullKey = `${exchangeSegment}:${securityId}`;
22731
+ if (responseCode === 1 && data.length >= 32) {
22732
+ const ltp = data.readFloatLE(8);
22733
+ const ltt = data.readInt32LE(12);
22734
+ const open = data.readFloatLE(16);
22735
+ const close = data.readFloatLE(20);
22736
+ const high = data.readFloatLE(24);
22737
+ const low = data.readFloatLE(28);
22738
+ const tick = {
22739
+ securityId,
22740
+ LTP: ltp,
22741
+ open,
22742
+ high,
22743
+ low,
22744
+ close,
22745
+ volume: 0,
22746
+ bestBidPrice: 0,
22747
+ bestAskPrice: 0,
22748
+ bestBidQty: 0,
22749
+ bestAskQty: 0,
22750
+ exchangeSegment,
22751
+ timestamp: ltt > 0 ? ltt * 1000 : Date.now()
22752
+ };
22753
+ const symbol = this.tokenToSymbol.get(fullKey) ?? this.tokenToSymbol.get(String(securityId));
22754
+ const unified = fromTick3(tick, symbol);
22755
+ unified.token = fullKey;
22756
+ this.dispatchTick(unified);
22757
+ } else if (responseCode === 2 && data.length >= 16) {
22553
22758
  const ltp = data.readFloatLE(8);
22554
22759
  const ltt = data.readInt32LE(12);
22555
22760
  const tick = {
@@ -22605,7 +22810,7 @@ class DhanSocket {
22605
22810
  handleJsonMessage(data) {
22606
22811
  if (data["type"] === "ticker_data") {
22607
22812
  const tick = data;
22608
- const fullKey = tick.exchangeSegment ? `${tick.exchangeSegment}|${tick.securityId}` : String(tick.securityId);
22813
+ const fullKey = tick.exchangeSegment ? `${tick.exchangeSegment}:${tick.securityId}` : String(tick.securityId);
22609
22814
  const symbol = this.tokenToSymbol.get(fullKey) ?? this.tokenToSymbol.get(String(tick.securityId));
22610
22815
  const unified = fromTick3(tick, symbol);
22611
22816
  unified.token = fullKey;
@@ -22702,6 +22907,15 @@ var DHAN_EXCHANGE_MAP = {
22702
22907
  NFO: "NFO",
22703
22908
  MCX: "MCX"
22704
22909
  };
22910
+ function resolveDhanExchange(exchId, segment) {
22911
+ if (segment === "D")
22912
+ return exchId === "BSE" ? "BFO" : "NFO";
22913
+ if (segment === "C")
22914
+ return "CDS";
22915
+ if (segment === "M")
22916
+ return "MCX";
22917
+ return exchId === "BSE" ? "BSE" : "NSE";
22918
+ }
22705
22919
  function mapInstrumentType3(instName, optionType) {
22706
22920
  const opt = optionType?.toUpperCase();
22707
22921
  if (opt === "CE")
@@ -22843,14 +23057,16 @@ class DhanInstruments {
22843
23057
  const securityId = fields["SEM_SMST_SECURITY_ID"] ?? fields["securityId"] ?? "";
22844
23058
  const tradingSymbol = fields["SEM_TRADING_SYMBOL"] ?? fields["tradingSymbol"] ?? "";
22845
23059
  const customSymbol = fields["SEM_CUSTOM_SYMBOL"] ?? fields["customSymbol"] ?? tradingSymbol;
22846
- const exchangeRaw = fields["SEM_EXM_EXCH_ID"] ?? fields["SEM_SEGMENT"] ?? fields["exchangeSegment"] ?? "NSE_EQ";
23060
+ const exchId = fields["SEM_EXM_EXCH_ID"] ?? "";
23061
+ const segment = fields["SEM_SEGMENT"] ?? "";
23062
+ const exchangeSegment = fields["exchangeSegment"] ?? "";
22847
23063
  const instNameRaw = fields["SEM_INSTRUMENT_NAME"] ?? fields["instrumentType"] ?? "EQUITY";
22848
23064
  const optionType = fields["SEM_OPTION_TYPE"] ?? fields["optionType"] ?? "";
22849
23065
  const lotSizeRaw = fields["SEM_LOT_UNITS"] ?? fields["lotSize"] ?? "1";
22850
23066
  const tickSizeRaw = fields["SEM_TICK_SIZE"] ?? fields["tickSize"] ?? "0.05";
22851
23067
  const expiryRaw = fields["SEM_EXPIRY_DATE"] ?? fields["expiryDate"] ?? "";
22852
23068
  const strikeRaw = fields["SEM_STRIKE_PRICE"] ?? fields["strikePrice"] ?? "";
22853
- const exchange = DHAN_EXCHANGE_MAP[exchangeRaw] ?? EXCHANGE_FROM_DHAN[exchangeRaw] ?? "NSE";
23069
+ const exchange = exchId && segment ? resolveDhanExchange(exchId, segment) : DHAN_EXCHANGE_MAP[exchangeSegment] ?? EXCHANGE_FROM_DHAN[exchangeSegment] ?? "NSE";
22854
23070
  const instrumentType = mapInstrumentType3(instNameRaw, optionType);
22855
23071
  return {
22856
23072
  tradingSymbol,
@@ -22907,6 +23123,7 @@ class DhanBroker {
22907
23123
  session = null;
22908
23124
  socket = null;
22909
23125
  clientId = "";
23126
+ oauthCreds = null;
22910
23127
  instrumentsImpl;
22911
23128
  _iMaster;
22912
23129
  constructor(options) {
@@ -22934,6 +23151,24 @@ class DhanBroker {
22934
23151
  return null;
22935
23152
  return new Date(this.session.expiresAt);
22936
23153
  }
23154
+ async generateConsent(creds) {
23155
+ this.oauthCreds = creds;
23156
+ this.clientId = creds.userId ?? "";
23157
+ return generateConsent(creds);
23158
+ }
23159
+ async consumeConsent(tokenId) {
23160
+ if (!this.oauthCreds) {
23161
+ return Err(new Error("Call generateConsent() before consumeConsent()"));
23162
+ }
23163
+ const result = await consumeConsent(this.oauthCreds, tokenId);
23164
+ if (!result.ok)
23165
+ return result;
23166
+ this.session = result.value;
23167
+ this.clientId = this.oauthCreds.userId ?? "";
23168
+ this.instrumentsImpl.setCredentials(this.clientId, this.session.accessToken);
23169
+ this.oauthCreds = null;
23170
+ return result;
23171
+ }
22937
23172
  async sync(force) {
22938
23173
  return this._iMaster.syncBroker(this.id, this.instruments, force);
22939
23174
  }
@@ -22953,9 +23188,11 @@ class DhanBroker {
22953
23188
  if (!asyncResolved.ok) {
22954
23189
  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.`));
22955
23190
  }
22956
- resolvedParams = { ...params, exchange: asyncResolved.value.exchange };
23191
+ const nativeId = asyncResolved.value.brokerTokens.dhan?.securityId ?? params.tradingSymbol;
23192
+ resolvedParams = { ...params, exchange: asyncResolved.value.exchange, tradingSymbol: nativeId };
22957
23193
  } else {
22958
- resolvedParams = { ...params, exchange: resolved.value.exchange };
23194
+ const nativeId = resolved.value.brokerTokens.dhan?.securityId ?? params.tradingSymbol;
23195
+ resolvedParams = { ...params, exchange: resolved.value.exchange, tradingSymbol: nativeId };
22959
23196
  }
22960
23197
  }
22961
23198
  const dhanParams = toOrderParams3(resolvedParams, this.clientId);
@@ -23196,6 +23433,10 @@ class DhanBroker {
23196
23433
  this.ensureSocket();
23197
23434
  return this.socket.subscribe(tokens, cb);
23198
23435
  }
23436
+ setSymbolMap(map) {
23437
+ this.ensureSocket();
23438
+ this.socket.setSymbolMap(map);
23439
+ }
23199
23440
  unsubscribeTicks(sub) {
23200
23441
  if (this.socket) {
23201
23442
  this.socket.unsubscribe(sub);
@@ -1 +1 @@
1
- {"version":3,"file":"instrument-master.d.ts","sourceRoot":"","sources":["../../src/instruments/instrument-master.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"instrument-master.d.ts","sourceRoot":"","sources":["../../src/instruments/instrument-master.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "nsekit",
3
- "version": "0.3.1",
3
+ "version": "0.3.2",
4
4
  "description": "Unified broker abstraction for Indian stock markets - CCXT-like interface for NSE/BSE brokers",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -43,10 +43,19 @@
43
43
  "typescript": "^5.3.3",
44
44
  "bun-types": "latest"
45
45
  },
46
- "keywords": ["nse", "bse", "trading", "broker", "zerodha", "finvasia", "dhan", "options"],
46
+ "keywords": [
47
+ "nse",
48
+ "bse",
49
+ "trading",
50
+ "broker",
51
+ "zerodha",
52
+ "finvasia",
53
+ "dhan",
54
+ "options"
55
+ ],
47
56
  "license": "MIT",
48
57
  "repository": {
49
58
  "type": "git",
50
59
  "url": "git+https://github.com/ilampirai/nsekit.git"
51
60
  }
52
- }
61
+ }