nsekit 0.3.2 → 0.3.3
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 +3 -2
- package/dist/brokers/dhan/DhanBroker.d.ts +3 -0
- package/dist/brokers/dhan/DhanBroker.d.ts.map +1 -1
- package/dist/brokers/dhan/dhan-auth.d.ts +8 -3
- package/dist/brokers/dhan/dhan-auth.d.ts.map +1 -1
- package/dist/brokers/dhan/dhan-instruments.d.ts.map +1 -1
- package/dist/brokers/dhan/dhan-socket.d.ts.map +1 -1
- package/dist/brokers/finvasia/FinvasiaBroker.d.ts +36 -1
- package/dist/brokers/finvasia/FinvasiaBroker.d.ts.map +1 -1
- package/dist/brokers/finvasia/finvasia-auth.d.ts +40 -4
- package/dist/brokers/finvasia/finvasia-auth.d.ts.map +1 -1
- package/dist/brokers/finvasia/finvasia-constants.d.ts +3 -1
- package/dist/brokers/finvasia/finvasia-constants.d.ts.map +1 -1
- package/dist/brokers/finvasia/finvasia-instruments.d.ts.map +1 -1
- package/dist/brokers/finvasia/finvasia-socket.d.ts +2 -1
- package/dist/brokers/finvasia/finvasia-socket.d.ts.map +1 -1
- package/dist/brokers/fivepaisa/FivePaisaBroker.d.ts +70 -0
- package/dist/brokers/fivepaisa/FivePaisaBroker.d.ts.map +1 -0
- package/dist/brokers/fivepaisa/fivepaisa-auth.d.ts +53 -0
- package/dist/brokers/fivepaisa/fivepaisa-auth.d.ts.map +1 -0
- package/dist/brokers/fivepaisa/fivepaisa-constants.d.ts +57 -0
- package/dist/brokers/fivepaisa/fivepaisa-constants.d.ts.map +1 -0
- package/dist/brokers/fivepaisa/fivepaisa-instruments.d.ts +34 -0
- package/dist/brokers/fivepaisa/fivepaisa-instruments.d.ts.map +1 -0
- package/dist/brokers/fivepaisa/fivepaisa-mapper.d.ts +170 -0
- package/dist/brokers/fivepaisa/fivepaisa-mapper.d.ts.map +1 -0
- package/dist/brokers/fivepaisa/fivepaisa-socket.d.ts +67 -0
- package/dist/brokers/fivepaisa/fivepaisa-socket.d.ts.map +1 -0
- package/dist/brokers/paper/PaperBroker.d.ts +3 -0
- package/dist/brokers/paper/PaperBroker.d.ts.map +1 -1
- package/dist/brokers/zerodha/ZerodhaBroker.d.ts +3 -0
- package/dist/brokers/zerodha/ZerodhaBroker.d.ts.map +1 -1
- package/dist/brokers/zerodha/zerodha-instruments.d.ts.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1704 -78
- package/dist/instruments/instrument-master.d.ts +4 -0
- package/dist/instruments/instrument-master.d.ts.map +1 -1
- package/dist/interfaces/broker.interface.d.ts +7 -0
- package/dist/interfaces/broker.interface.d.ts.map +1 -1
- package/dist/types/broker.d.ts +7 -0
- package/dist/types/broker.d.ts.map +1 -1
- package/dist/types/common.d.ts +2 -2
- package/dist/types/common.d.ts.map +1 -1
- package/dist/types/instruments.d.ts +4 -0
- package/dist/types/instruments.d.ts.map +1 -1
- package/package.json +52 -61
package/README.md
CHANGED
|
@@ -21,8 +21,9 @@ npm install nsekit
|
|
|
21
21
|
| Broker | Auth Flow | WebSocket | Instruments |
|
|
22
22
|
|--------|-----------|-----------|-------------|
|
|
23
23
|
| Zerodha (Kite Connect) | OAuth + request_token | Binary (KiteTicker) | CSV bulk dump |
|
|
24
|
-
| Finvasia (Shoonya) | TOTP + vendor_code | JSON (NorenWSTP) | Per-exchange ZIPs + SearchScrip API |
|
|
24
|
+
| Finvasia (Shoonya) | TOTP + vendor_code (or OAuth) | JSON (NorenWSTP) | Per-exchange ZIPs + SearchScrip API |
|
|
25
25
|
| Dhan | client_id + access_token | Binary (Market Feed) | CSV bulk dump + Search API |
|
|
26
|
+
| 5paisa | client_code + TOTP + app secrets | Binary (MarketFeed v3) | Per-exchange ScripMaster |
|
|
26
27
|
| Paper | Instant (no credentials) | Proxied from live broker | Delegated to data source |
|
|
27
28
|
|
|
28
29
|
Before authenticating, review the credential fields each broker requires: [docs/broker-credentials.md](docs/broker-credentials.md).
|
|
@@ -34,7 +35,7 @@ Before authenticating, review the credential fields each broker requires: [docs/
|
|
|
34
35
|
```typescript
|
|
35
36
|
import { createBroker } from 'nsekit';
|
|
36
37
|
|
|
37
|
-
const broker = createBroker('finvasia'); // or 'zerodha', 'dhan', 'paper'
|
|
38
|
+
const broker = createBroker('finvasia'); // or 'zerodha', 'dhan', 'fivepaisa', 'paper'
|
|
38
39
|
await broker.authenticate({ userId: '...', password: '...', totpSecret: '...', apiKey: '...', vendorCode: '...' });
|
|
39
40
|
await broker.sync(); // downloads + indexes ~180K instruments
|
|
40
41
|
|
|
@@ -32,6 +32,7 @@ export declare class DhanBroker implements IBroker {
|
|
|
32
32
|
refreshSession(session: AuthSession): Promise<Result<AuthSession>>;
|
|
33
33
|
isSessionValid(): boolean;
|
|
34
34
|
getSessionExpiry(): Date | null;
|
|
35
|
+
getSession(): AuthSession | null;
|
|
35
36
|
/**
|
|
36
37
|
* OAuth Step 1: Generate consent and return the login URL.
|
|
37
38
|
* Stores credentials internally for use in consumeConsent.
|
|
@@ -56,6 +57,8 @@ export declare class DhanBroker implements IBroker {
|
|
|
56
57
|
getQuote(symbols: string[]): Promise<Result<Map<string, Quote>>>;
|
|
57
58
|
getOptionChain(underlying: string, expiry: Date): Promise<Result<OptionChainRow[]>>;
|
|
58
59
|
getCandles(symbol: string, interval: CandleInterval, from: Date, to: Date): Promise<Result<Candle[]>>;
|
|
60
|
+
toBrokerToken(instrument: UnifiedInstrument, format?: 'ws' | 'rest'): string | null;
|
|
61
|
+
getIndexTokens(format?: 'ws' | 'rest'): Map<string, string>;
|
|
59
62
|
subscribeTicks(tokens: string[], cb: TickCallback): Subscription;
|
|
60
63
|
/** Register token → tradingSymbol mappings so ticks resolve to proper symbols. */
|
|
61
64
|
setSymbolMap(map: Map<string, string>): void;
|
|
@@ -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,EAAE,QAAQ,EAAE,cAAc,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAChH,OAAO,KAAK,EACV,iBAAiB,EACjB,WAAW,EACX,kBAAkB,EAClB,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,eAAe,EACf,cAAc,EAEd,KAAK,EACL,cAAc,EACd,MAAM,EACN,UAAU,EACV,QAAQ,EACR,KAAK,EACL,QAAQ,EACR,YAAY,EACZ,YAAY,EACZ,kBAAkB,EACnB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AACrF,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mCAAmC,CAAC;AACjE,OAAO,EAAW,KAAK,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAoB,KAAK,QAAQ,EAAE,KAAK,aAAa,EAAE,MAAM,qCAAqC,CAAC;AAG1G,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAQjD,qBAAa,UAAW,YAAW,OAAO;IACxC,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAU;IAC/B,QAAQ,CAAC,IAAI,UAAU;IACvB,QAAQ,CAAC,WAAW,EAAE,kBAAkB,CAAC;IACzC,QAAQ,CAAC,GAAG,EAAE,kBAAkB,CAO9B;IAEF,OAAO,CAAC,OAAO,CAA4B;IAC3C,OAAO,CAAC,MAAM,CAA2B;IACzC,OAAO,CAAC,QAAQ,CAAM;IACtB,OAAO,CAAC,UAAU,CAAkC;IACpD,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAkB;IAClD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAmB;gBAEhC,OAAO,CAAC,EAAE,aAAa;IAQ7B,YAAY,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IAUpE,cAAc,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"DhanBroker.d.ts","sourceRoot":"","sources":["../../../src/brokers/dhan/DhanBroker.ts"],"names":[],"mappings":"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"}
|
|
@@ -48,10 +48,15 @@ export declare function generateConsent(creds: BrokerCredentials): Promise<Resul
|
|
|
48
48
|
*/
|
|
49
49
|
export declare function consumeConsent(creds: BrokerCredentials, tokenId: string): Promise<Result<AuthSession>>;
|
|
50
50
|
/**
|
|
51
|
-
*
|
|
52
|
-
*
|
|
51
|
+
* Renew the Dhan access token.
|
|
52
|
+
*
|
|
53
|
+
* Calls GET /v2/RenewToken which expires the current token and returns a new
|
|
54
|
+
* one with another 24 hours of validity. Only works on active (non-expired)
|
|
55
|
+
* tokens generated from Dhan Web.
|
|
56
|
+
*
|
|
57
|
+
* @see https://dhanhq.co/docs/v2/authentication/#renew-token
|
|
53
58
|
*/
|
|
54
|
-
export declare function refreshSession(
|
|
59
|
+
export declare function refreshSession(session: AuthSession): Promise<Result<AuthSession>>;
|
|
55
60
|
/** Check if session is still valid based on expiry timestamp. */
|
|
56
61
|
export declare function isSessionValid(session: AuthSession | null): boolean;
|
|
57
62
|
//# sourceMappingURL=dhan-auth.d.ts.map
|
|
@@ -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;
|
|
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;AA2B3D,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,CAiD9B;AAID;;;;;;;;GAQG;AACH,wBAAsB,cAAc,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CA2CvF;AAED,iEAAiE;AACjE,wBAAgB,cAAc,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI,GAAG,OAAO,CAGnE"}
|
|
@@ -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;
|
|
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;AA0ElD,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"}
|
|
@@ -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;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;
|
|
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;IAmEf,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;IAsBrB,OAAO,CAAC,eAAe;IAoBvB,OAAO,CAAC,YAAY;IAYpB,OAAO,CAAC,cAAc;IAatB,OAAO,CAAC,aAAa;IAOrB,OAAO,CAAC,gBAAgB;IAYxB,OAAO,CAAC,mBAAmB;CAM5B"}
|
|
@@ -26,10 +26,41 @@ export declare class FinvasiaBroker implements IBroker {
|
|
|
26
26
|
private readonly instrumentsImpl;
|
|
27
27
|
private readonly _iMaster;
|
|
28
28
|
constructor(options?: BrokerOptions);
|
|
29
|
+
/**
|
|
30
|
+
* Authenticate the broker. Supports three modes, auto-detected from creds:
|
|
31
|
+
*
|
|
32
|
+
* 1. **OAuth (access token)** — `creds.accessToken` + `creds.userId` provided:
|
|
33
|
+
* Use the token directly without any API call. Used on startup to restore
|
|
34
|
+
* a previously-obtained OAuth session.
|
|
35
|
+
*
|
|
36
|
+
* 2. **OAuth (auth code exchange)** — `creds.authCode` provided:
|
|
37
|
+
* Exchange the auth code for an access token via `GenAcsTok`. Requires
|
|
38
|
+
* `creds.clientId` (e.g. `FN116677_U`), `creds.secretCode`, and `creds.userId`.
|
|
39
|
+
* This is the one-time flow after the user completes the browser OAuth login.
|
|
40
|
+
*
|
|
41
|
+
* 3. **QuickAuth / TOTP (legacy)** — neither token nor authCode present:
|
|
42
|
+
* Fall back to the legacy direct TOTP POST flow. Many Shoonya accounts have
|
|
43
|
+
* been migrated to OAuth-only and this flow will issue tokens that are
|
|
44
|
+
* silently rejected by REST APIs.
|
|
45
|
+
*/
|
|
29
46
|
authenticate(creds: BrokerCredentials): Promise<Result<AuthSession>>;
|
|
47
|
+
/**
|
|
48
|
+
* Generate the OAuth login URL. Open this URL in a browser — the user will
|
|
49
|
+
* log in with their Shoonya credentials and be redirected to the callback URL
|
|
50
|
+
* with a `?code=<authCode>` query param. Then call `authenticate({ authCode, ... })`.
|
|
51
|
+
*/
|
|
52
|
+
getOAuthURL(clientId: string): string;
|
|
30
53
|
refreshSession(session: AuthSession): Promise<Result<AuthSession>>;
|
|
31
54
|
isSessionValid(): boolean;
|
|
32
55
|
getSessionExpiry(): Date | null;
|
|
56
|
+
getSession(): AuthSession | null;
|
|
57
|
+
/**
|
|
58
|
+
* Tear down this broker instance: close the WebSocket (if any) and clear the
|
|
59
|
+
* session. Called when a broker is being removed or replaced with a new instance
|
|
60
|
+
* (e.g. after switching from TOTP to OAuth) so that its stale tick stream and
|
|
61
|
+
* reconnect loop do not keep running in the background.
|
|
62
|
+
*/
|
|
63
|
+
disconnect(): Promise<void>;
|
|
33
64
|
sync(force?: boolean): Promise<Result<SyncMeta>>;
|
|
34
65
|
resolve(input: string): Result<UnifiedInstrument>;
|
|
35
66
|
search(query: string, exchange?: Exchange, instrumentType?: InstrumentType, limit?: number): UnifiedInstrument[];
|
|
@@ -44,6 +75,8 @@ export declare class FinvasiaBroker implements IBroker {
|
|
|
44
75
|
getQuote(symbols: string[]): Promise<Result<Map<string, Quote>>>;
|
|
45
76
|
getOptionChain(underlying: string, expiry: Date): Promise<Result<OptionChainRow[]>>;
|
|
46
77
|
getCandles(symbol: string, interval: CandleInterval, from: Date, to: Date): Promise<Result<Candle[]>>;
|
|
78
|
+
toBrokerToken(instrument: UnifiedInstrument, format?: 'ws' | 'rest'): string | null;
|
|
79
|
+
getIndexTokens(format?: 'ws' | 'rest'): Map<string, string>;
|
|
47
80
|
subscribeTicks(tokens: string[], cb: TickCallback): Subscription;
|
|
48
81
|
/** Register token → tradingSymbol mappings so ticks resolve to proper symbols. */
|
|
49
82
|
setSymbolMap(map: Map<string, string>): void;
|
|
@@ -57,7 +90,9 @@ export declare class FinvasiaBroker implements IBroker {
|
|
|
57
90
|
private ensureSocket;
|
|
58
91
|
/**
|
|
59
92
|
* Called when the WebSocket receives a "ck NOT_OK" response.
|
|
60
|
-
*
|
|
93
|
+
* Does NOT re-authenticate here — the user-bot handles all re-auth centrally
|
|
94
|
+
* to avoid dual re-auth races that invalidate each other's tokens.
|
|
95
|
+
* The socket stops reconnecting; user-bot will reconnect after its own re-auth.
|
|
61
96
|
*/
|
|
62
97
|
private handleSocketAuthFailed;
|
|
63
98
|
}
|
|
@@ -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,EAAE,QAAQ,EAAE,cAAc,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAChH,OAAO,KAAK,EACV,iBAAiB,EACjB,WAAW,EACX,kBAAkB,EAClB,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,eAAe,EACf,cAAc,EAEd,KAAK,EACL,cAAc,EACd,MAAM,EACN,UAAU,EACV,QAAQ,EACR,KAAK,EACL,QAAQ,EACR,YAAY,EACZ,YAAY,EACZ,kBAAkB,EACnB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AACrF,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mCAAmC,CAAC;AACjE,OAAO,EAAW,KAAK,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAoB,KAAK,QAAQ,EAAE,KAAK,aAAa,EAAE,MAAM,qCAAqC,CAAC;AAU1G,qBAAa,cAAe,YAAW,OAAO;IAC5C,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAc;IACnC,QAAQ,CAAC,IAAI,wBAAwB;IACrC,QAAQ,CAAC,WAAW,EAAE,kBAAkB,CAAC;IACzC,QAAQ,CAAC,GAAG,EAAE,kBAAkB,CAO9B;IAEF,OAAO,CAAC,OAAO,CAA4B;IAC3C,OAAO,CAAC,MAAM,CAA+B;IAC7C,OAAO,CAAC,WAAW,CAAkC;IACrD,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAsB;IACtD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAmB;gBAEhC,OAAO,CAAC,EAAE,aAAa;
|
|
1
|
+
{"version":3,"file":"FinvasiaBroker.d.ts","sourceRoot":"","sources":["../../../src/brokers/finvasia/FinvasiaBroker.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,17 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Finvasia (Shoonya) authentication
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
2
|
+
* Finvasia (Shoonya) authentication flows.
|
|
3
|
+
*
|
|
4
|
+
* Two authentication methods supported:
|
|
5
|
+
*
|
|
6
|
+
* 1. **QuickAuth (legacy TOTP flow)**: Direct POST with userId, password, TOTP.
|
|
7
|
+
* Returns susertoken. NOTE: Shoonya has migrated many accounts to OAuth-only;
|
|
8
|
+
* QuickAuth may issue tokens that are silently rejected by REST APIs.
|
|
9
|
+
*
|
|
10
|
+
* 2. **OAuth flow** (required for newer/migrated accounts):
|
|
11
|
+
* a. Redirect user to Shoonya OAuth login URL (`getOAuthURL`)
|
|
12
|
+
* b. User logs in with password + TOTP, Shoonya redirects to callback with `?code=...`
|
|
13
|
+
* c. Exchange auth code for access token via `GenAcsTok` (`exchangeAuthCode`)
|
|
14
|
+
* d. Use access token in subsequent REST calls via `jKey` parameter
|
|
6
15
|
*
|
|
7
16
|
* Shoonya sessions expire at end of trading day.
|
|
8
17
|
*/
|
|
@@ -23,6 +32,33 @@ export declare function authenticate(creds: BrokerCredentials): Promise<Result<A
|
|
|
23
32
|
* Sessions expire at end of day; re-authenticate with TOTP.
|
|
24
33
|
*/
|
|
25
34
|
export declare function refreshSession(_session: AuthSession): Promise<Result<AuthSession>>;
|
|
35
|
+
/**
|
|
36
|
+
* Build the Shoonya OAuth login URL.
|
|
37
|
+
*
|
|
38
|
+
* Usage: open this URL in a browser. The user logs in with password + TOTP,
|
|
39
|
+
* and Shoonya redirects to the app's callback URL with `?code=<auth_code>`.
|
|
40
|
+
*
|
|
41
|
+
* @param clientId Shoonya OAuth client id (typically `<UID>_U`, e.g. `FN116677_U`)
|
|
42
|
+
*/
|
|
43
|
+
export declare function getOAuthURL(clientId: string): string;
|
|
44
|
+
/**
|
|
45
|
+
* Exchange an OAuth auth code for an access token via Shoonya's `GenAcsTok` endpoint.
|
|
46
|
+
*
|
|
47
|
+
* Checksum formula (from NorenRestApiPy reference implementation):
|
|
48
|
+
* sha256(clientId + secretCode + authCode)
|
|
49
|
+
*
|
|
50
|
+
* @param authCode The `code` query param captured from the OAuth redirect URL
|
|
51
|
+
* @param secretCode The API secret issued by Shoonya for the OAuth app
|
|
52
|
+
* @param clientId Shoonya OAuth client id (e.g. `FN116677_U`)
|
|
53
|
+
* @param uid User id (Shoonya account id, e.g. `FN116677`)
|
|
54
|
+
*/
|
|
55
|
+
export declare function exchangeAuthCode(authCode: string, secretCode: string, clientId: string, uid: string): Promise<Result<AuthSession>>;
|
|
56
|
+
/**
|
|
57
|
+
* Build an AuthSession from a pre-obtained access token (e.g. stored from a
|
|
58
|
+
* previous OAuth exchange). Used on startup to restore an existing OAuth session
|
|
59
|
+
* without going through the browser flow again.
|
|
60
|
+
*/
|
|
61
|
+
export declare function buildSessionFromToken(accessToken: string, uid: string, refreshToken?: string): AuthSession;
|
|
26
62
|
/** Check if session is still valid based on expiry. */
|
|
27
63
|
export declare function isSessionValid(session: AuthSession | null): boolean;
|
|
28
64
|
//# sourceMappingURL=finvasia-auth.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"finvasia-auth.d.ts","sourceRoot":"","sources":["../../../src/brokers/finvasia/finvasia-auth.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"finvasia-auth.d.ts","sourceRoot":"","sources":["../../../src/brokers/finvasia/finvasia-auth.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACzE,OAAO,EAAW,KAAK,MAAM,EAAE,MAAM,qBAAqB,CAAC;AA4D3D;;;;;;;;GAQG;AACH,wBAAsB,YAAY,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAyEzF;AAED;;;GAGG;AACH,wBAAsB,cAAc,CAAC,QAAQ,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAExF;AAID;;;;;;;GAOG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEpD;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,gBAAgB,CACpC,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CA0E9B;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CACnC,WAAW,EAAE,MAAM,EACnB,GAAG,EAAE,MAAM,EACX,YAAY,CAAC,EAAE,MAAM,GACpB,WAAW,CAUb;AAED,uDAAuD;AACvD,wBAAgB,cAAc,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI,GAAG,OAAO,CAGnE"}
|
|
@@ -14,8 +14,10 @@ export declare const SIDE_FROM_SHOONYA: Record<string, 'BUY' | 'SELL'>;
|
|
|
14
14
|
export declare const STATUS_FROM_SHOONYA: Record<string, OrderStatus>;
|
|
15
15
|
export declare const VALIDITY_TO_SHOONYA: Record<Validity, string>;
|
|
16
16
|
export declare const VALIDITY_FROM_SHOONYA: Record<string, Validity>;
|
|
17
|
-
export declare const SHOONYA_API_BASE = "https://api.shoonya.com/
|
|
17
|
+
export declare const SHOONYA_API_BASE = "https://api.shoonya.com/NorenWClientAPI";
|
|
18
|
+
export declare const SHOONYA_OAUTH_LOGIN_BASE = "https://api.shoonya.com/NorenWClientAPI";
|
|
18
19
|
export declare const SHOONYA_WS_URL = "wss://api.shoonya.com/NorenWSTP/";
|
|
20
|
+
export declare const SHOONYA_WS_OAUTH_URL = "wss://api.shoonya.com/NorenWSAPI/";
|
|
19
21
|
export declare const SHOONYA_INSTRUMENTS_BASE = "https://api.shoonya.com/";
|
|
20
22
|
export declare const SHOONYA_INSTRUMENT_FILES: Record<string, string>;
|
|
21
23
|
export declare const CANDLE_INTERVAL_TO_SHOONYA: Record<string, string>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"finvasia-constants.d.ts","sourceRoot":"","sources":["../../../src/brokers/finvasia/finvasia-constants.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAI9F,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,CAOxD,CAAC;AAEF,eAAO,MAAM,qBAAqB,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAO1D,CAAC;AAIF,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,CAItD,CAAC;AAEF,eAAO,MAAM,oBAAoB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAIxD,CAAC;AAIF,eAAO,MAAM,qBAAqB,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,CAK3D,CAAC;AAEF,eAAO,MAAM,uBAAuB,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAK7D,CAAC;AAIF,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,KAAK,GAAG,MAAM,EAAE,MAAM,CAG1D,CAAC;AAEF,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,GAAG,MAAM,CAG5D,CAAC;AAIF,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAQ3D,CAAC;AAIF,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,CAGxD,CAAC;AAEF,eAAO,MAAM,qBAAqB,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAG1D,CAAC;AAIF,eAAO,MAAM,gBAAgB,
|
|
1
|
+
{"version":3,"file":"finvasia-constants.d.ts","sourceRoot":"","sources":["../../../src/brokers/finvasia/finvasia-constants.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAI9F,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,CAOxD,CAAC;AAEF,eAAO,MAAM,qBAAqB,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAO1D,CAAC;AAIF,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,CAItD,CAAC;AAEF,eAAO,MAAM,oBAAoB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAIxD,CAAC;AAIF,eAAO,MAAM,qBAAqB,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,CAK3D,CAAC;AAEF,eAAO,MAAM,uBAAuB,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAK7D,CAAC;AAIF,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,KAAK,GAAG,MAAM,EAAE,MAAM,CAG1D,CAAC;AAEF,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,GAAG,MAAM,CAG5D,CAAC;AAIF,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAQ3D,CAAC;AAIF,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,CAGxD,CAAC;AAEF,eAAO,MAAM,qBAAqB,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAG1D,CAAC;AAIF,eAAO,MAAM,gBAAgB,4CAA4C,CAAC;AAC1E,eAAO,MAAM,wBAAwB,4CAA4C,CAAC;AAElF,eAAO,MAAM,cAAc,qCAAqC,CAAC;AAKjE,eAAO,MAAM,oBAAoB,sCAAsC,CAAC;AACxE,eAAO,MAAM,wBAAwB,6BAA6B,CAAC;AAInE,eAAO,MAAM,wBAAwB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAO3D,CAAC;AAIF,eAAO,MAAM,0BAA0B,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAM7D,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
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;
|
|
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;AA0HlD,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"}
|
|
@@ -13,11 +13,12 @@ export declare class FinvasiaSocket {
|
|
|
13
13
|
private subscribedTokens;
|
|
14
14
|
private readonly userId;
|
|
15
15
|
private accessToken;
|
|
16
|
+
private authMethod;
|
|
16
17
|
private reconnectAttempts;
|
|
17
18
|
private maxReconnects;
|
|
18
19
|
private reconnectTimer;
|
|
19
20
|
private readonly onAuthFailed?;
|
|
20
|
-
constructor(userId: string, accessToken: string, onAuthFailed?: () => void);
|
|
21
|
+
constructor(userId: string, accessToken: string, onAuthFailed?: () => void, authMethod?: 'totp' | 'oauth');
|
|
21
22
|
/** Connect to the Shoonya WebSocket endpoint. */
|
|
22
23
|
connect(): void;
|
|
23
24
|
/** Gracefully disconnect. */
|
|
@@ -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,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;
|
|
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,UAAU,CAAmB;IACrC,OAAO,CAAC,iBAAiB,CAAK;IAC9B,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,cAAc,CAA8C;IACpE,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAa;gBAGzC,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,MAAM,EACnB,YAAY,CAAC,EAAE,MAAM,IAAI,EACzB,UAAU,GAAE,MAAM,GAAG,OAAgB;IAQvC,iDAAiD;IACjD,OAAO,IAAI,IAAI;IAsEf,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;IAsDrB,OAAO,CAAC,aAAa;IAWrB,OAAO,CAAC,eAAe;IAUvB,OAAO,CAAC,YAAY;IAYpB,OAAO,CAAC,gBAAgB;IAYxB,OAAO,CAAC,mBAAmB;CAM5B"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* FivePaisaBroker — Full IBroker implementation for 5paisa.
|
|
3
|
+
*
|
|
4
|
+
* Delegates to:
|
|
5
|
+
* - fivepaisa-auth for TOTP-based authentication
|
|
6
|
+
* - fivepaisa-mapper for data translation
|
|
7
|
+
* - fivepaisa-socket for tick polling
|
|
8
|
+
* - fivepaisa-instruments for instrument data
|
|
9
|
+
*
|
|
10
|
+
* Uses the 5paisa OpenAPI REST endpoints directly via fetch.
|
|
11
|
+
*/
|
|
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
|
+
import type { IBroker } from '../../interfaces/broker.interface';
|
|
16
|
+
import { type Result } from '../../errors/result';
|
|
17
|
+
import { type SyncMeta, type BrokerOptions } from '../../instruments/instrument-master';
|
|
18
|
+
export declare class FivePaisaBroker implements IBroker {
|
|
19
|
+
readonly id: BrokerId;
|
|
20
|
+
readonly name = "5paisa";
|
|
21
|
+
readonly instruments: IBrokerInstruments;
|
|
22
|
+
readonly has: BrokerCapabilities;
|
|
23
|
+
private session;
|
|
24
|
+
private socket;
|
|
25
|
+
private credentials;
|
|
26
|
+
private readonly instrumentsImpl;
|
|
27
|
+
private readonly _iMaster;
|
|
28
|
+
constructor(options?: BrokerOptions);
|
|
29
|
+
authenticate(creds: BrokerCredentials): Promise<Result<AuthSession>>;
|
|
30
|
+
refreshSession(session: AuthSession): Promise<Result<AuthSession>>;
|
|
31
|
+
isSessionValid(): boolean;
|
|
32
|
+
getSessionExpiry(): Date | null;
|
|
33
|
+
getSession(): AuthSession | 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[];
|
|
37
|
+
placeOrder(params: UnifiedOrderParams): Promise<Result<OrderResult>>;
|
|
38
|
+
modifyOrder(orderId: string, params: ModifyParams): Promise<Result<OrderResult>>;
|
|
39
|
+
cancelOrder(orderId: string): Promise<Result<CancelResult>>;
|
|
40
|
+
getOrders(): Promise<Result<UnifiedOrder[]>>;
|
|
41
|
+
getOrderHistory(orderId: string): Promise<Result<OrderUpdate[]>>;
|
|
42
|
+
getPositions(): Promise<Result<UnifiedPosition[]>>;
|
|
43
|
+
getHoldings(): Promise<Result<UnifiedHolding[]>>;
|
|
44
|
+
getLTP(symbols: string[]): Promise<Result<Map<string, number>>>;
|
|
45
|
+
getQuote(symbols: string[]): Promise<Result<Map<string, Quote>>>;
|
|
46
|
+
getOptionChain(_underlying: string, _expiry: Date): Promise<Result<OptionChainRow[]>>;
|
|
47
|
+
getCandles(symbol: string, interval: CandleInterval, from: Date, to: Date): Promise<Result<Candle[]>>;
|
|
48
|
+
toBrokerToken(instrument: UnifiedInstrument, _format?: 'ws' | 'rest'): string | null;
|
|
49
|
+
getIndexTokens(format?: 'ws' | 'rest'): Map<string, string>;
|
|
50
|
+
subscribeTicks(tokens: string[], cb: TickCallback): Subscription;
|
|
51
|
+
unsubscribeTicks(sub: Subscription): void;
|
|
52
|
+
getConnectionState(): WSConnectionState;
|
|
53
|
+
getMargins(): Promise<Result<MarginInfo>>;
|
|
54
|
+
getFunds(): Promise<Result<FundInfo>>;
|
|
55
|
+
getTradeHistory(_from: Date, _to: Date): Promise<Result<Trade[]>>;
|
|
56
|
+
getPnLReport(_from: Date, _to: Date): Promise<Result<PnLEntry[]>>;
|
|
57
|
+
/**
|
|
58
|
+
* Parse symbol strings into 5paisa MarketFeedData format.
|
|
59
|
+
* Supports: "N:C:1660", "N:1660", "1660"
|
|
60
|
+
*/
|
|
61
|
+
private parseSymbolsToFeedData;
|
|
62
|
+
/** Build the standard 5paisa payload head. */
|
|
63
|
+
private buildHead;
|
|
64
|
+
/** Build the standard 5paisa payload body with ClientCode. */
|
|
65
|
+
private buildBody;
|
|
66
|
+
/** POST to 5paisa API and parse response body. */
|
|
67
|
+
private post;
|
|
68
|
+
private ensureSocket;
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=FivePaisaBroker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FivePaisaBroker.d.ts","sourceRoot":"","sources":["../../../src/brokers/fivepaisa/FivePaisaBroker.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 5paisa authentication flow.
|
|
3
|
+
*
|
|
4
|
+
* Supports two modes:
|
|
5
|
+
* A) TOTP mode: auto-generate TOTP from secret → TOTPLogin → GetAccessToken
|
|
6
|
+
* B) Direct token: use a pre-obtained JWT access token
|
|
7
|
+
*
|
|
8
|
+
* OAuth browser flow:
|
|
9
|
+
* 1. User navigates to VLogin endpoint with VendorKey + ResponseURL
|
|
10
|
+
* 2. Logs in with client code, PIN, OTP/TOTP
|
|
11
|
+
* 3. Redirected to callback with RequestToken
|
|
12
|
+
* 4. POST GetAccessToken to exchange RequestToken for JWT
|
|
13
|
+
*
|
|
14
|
+
* 5paisa sessions expire at 11:59 PM daily.
|
|
15
|
+
*/
|
|
16
|
+
import type { AuthSession, BrokerCredentials } from '../../types/broker';
|
|
17
|
+
import { type Result } from '../../errors/result';
|
|
18
|
+
/**
|
|
19
|
+
* Authenticate with 5paisa using TOTP.
|
|
20
|
+
*
|
|
21
|
+
* Required credentials:
|
|
22
|
+
* - userKey (or apiKey): 5paisa vendor/app key
|
|
23
|
+
* - encryptionKey: Encryption key for access token exchange
|
|
24
|
+
* - userId: API user ID (from dashboard, e.g. "b4XFSHSdsow")
|
|
25
|
+
* - clientCode: Demat client code (e.g. "54490032")
|
|
26
|
+
* - totpSecret: Base32 TOTP secret (auto-generates 6-digit code)
|
|
27
|
+
* OR totp: Pre-generated 6-digit TOTP code
|
|
28
|
+
* - pin: Client PIN
|
|
29
|
+
*/
|
|
30
|
+
export declare function authenticate(creds: BrokerCredentials): Promise<Result<AuthSession>>;
|
|
31
|
+
/**
|
|
32
|
+
* Exchange a RequestToken (from TOTP or OAuth callback) for an AccessToken.
|
|
33
|
+
* This is Step 2 of both the TOTP and OAuth flows.
|
|
34
|
+
*/
|
|
35
|
+
export declare function exchangeRequestToken(requestToken: string, userKey: string, encryptionKey: string, userId: string, clientCode: string): Promise<Result<AuthSession>>;
|
|
36
|
+
/**
|
|
37
|
+
* Authenticate with a pre-obtained access token (JWT).
|
|
38
|
+
* Useful when the token is stored from a previous session.
|
|
39
|
+
*/
|
|
40
|
+
export declare function authenticateWithToken(creds: BrokerCredentials): Promise<Result<AuthSession>>;
|
|
41
|
+
/**
|
|
42
|
+
* Generate the OAuth login URL for browser-based auth.
|
|
43
|
+
* User navigates here, logs in, gets redirected with RequestToken.
|
|
44
|
+
*/
|
|
45
|
+
export declare function getOAuthLoginURL(vendorKey: string, redirectURL: string, state?: string): string;
|
|
46
|
+
/**
|
|
47
|
+
* 5paisa does not support token refresh.
|
|
48
|
+
* Sessions expire at 11:59 PM; re-authenticate with TOTP.
|
|
49
|
+
*/
|
|
50
|
+
export declare function refreshSession(_session: AuthSession): Promise<Result<AuthSession>>;
|
|
51
|
+
/** Check if session is still valid based on expiry. */
|
|
52
|
+
export declare function isSessionValid(session: AuthSession | null): boolean;
|
|
53
|
+
//# sourceMappingURL=fivepaisa-auth.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fivepaisa-auth.d.ts","sourceRoot":"","sources":["../../../src/brokers/fivepaisa/fivepaisa-auth.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACzE,OAAO,EAAW,KAAK,MAAM,EAAE,MAAM,qBAAqB,CAAC;AA4D3D;;;;;;;;;;;GAWG;AACH,wBAAsB,YAAY,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CA8DzF;AAED;;;GAGG;AACH,wBAAsB,oBAAoB,CACxC,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,MAAM,EACf,aAAa,EAAE,MAAM,EACrB,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CA0C9B;AAED;;;GAGG;AACH,wBAAsB,qBAAqB,CACzC,KAAK,EAAE,iBAAiB,GACvB,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAe9B;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,KAAK,SAAK,GAAG,MAAM,CAE3F;AAED;;;GAGG;AACH,wBAAsB,cAAc,CAAC,QAAQ,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAExF;AAED,uDAAuD;AACvD,wBAAgB,cAAc,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI,GAAG,OAAO,CAGnE"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 5paisa API constant mappings.
|
|
3
|
+
* Maps unified nsekit enums to 5paisa-specific values and back.
|
|
4
|
+
*/
|
|
5
|
+
import type { Exchange, Product, OrderType, OrderStatus, Validity } from '../../types/common';
|
|
6
|
+
export declare const FIVEPAISA_API_BASE = "https://Openapi.5paisa.com/VendorsAPI/Service1.svc";
|
|
7
|
+
export declare const FIVEPAISA_HISTORICAL_BASE = "https://openapi.5paisa.com/V2/historical";
|
|
8
|
+
export declare const FIVEPAISA_SCRIP_MASTER_BASE = "https://openapi.5paisa.com/VendorsAPI/Service1.svc/ScripMaster/segment";
|
|
9
|
+
/** XStream WebSocket base — actual URL varies by RedirectServer from JWT */
|
|
10
|
+
export declare const FIVEPAISA_WS_URL = "wss://openfeed.5paisa.com/feeds/api/chat?Value1=";
|
|
11
|
+
export declare const ROUTES: {
|
|
12
|
+
readonly TOTP_LOGIN: "https://Openapi.5paisa.com/VendorsAPI/Service1.svc/TOTPLogin";
|
|
13
|
+
readonly ACCESS_TOKEN: "https://Openapi.5paisa.com/VendorsAPI/Service1.svc/GetAccessToken";
|
|
14
|
+
readonly MARGIN: "https://Openapi.5paisa.com/VendorsAPI/Service1.svc/V4/Margin";
|
|
15
|
+
readonly ORDER_BOOK: "https://Openapi.5paisa.com/VendorsAPI/Service1.svc/V3/OrderBook";
|
|
16
|
+
readonly HOLDINGS: "https://Openapi.5paisa.com/VendorsAPI/Service1.svc/V3/Holding";
|
|
17
|
+
readonly POSITIONS: "https://Openapi.5paisa.com/VendorsAPI/Service1.svc/V1/NetPositionNetWise";
|
|
18
|
+
readonly PLACE_ORDER: "https://Openapi.5paisa.com/VendorsAPI/Service1.svc/V1/PlaceOrderRequest";
|
|
19
|
+
readonly MODIFY_ORDER: "https://Openapi.5paisa.com/VendorsAPI/Service1.svc/V1/ModifyOrderRequest";
|
|
20
|
+
readonly CANCEL_ORDER: "https://Openapi.5paisa.com/VendorsAPI/Service1.svc/V1/CancelOrderRequest";
|
|
21
|
+
readonly ORDER_STATUS: "https://Openapi.5paisa.com/VendorsAPI/Service1.svc/V2/OrderStatus";
|
|
22
|
+
readonly TRADE_BOOK: "https://Openapi.5paisa.com/VendorsAPI/Service1.svc/V1/TradeBook";
|
|
23
|
+
readonly TRADE_INFO: "https://Openapi.5paisa.com/VendorsAPI/Service1.svc/V1/TradeInformation";
|
|
24
|
+
readonly MARKET_FEED: "https://Openapi.5paisa.com/VendorsAPI/Service1.svc/MarketFeed";
|
|
25
|
+
readonly MARKET_FEED_V1: "https://Openapi.5paisa.com/VendorsAPI/Service1.svc/V1/MarketFeed";
|
|
26
|
+
readonly MARKET_DEPTH: "https://Openapi.5paisa.com/VendorsAPI/Service1.svc/MarketDepth";
|
|
27
|
+
};
|
|
28
|
+
export declare const REQUEST_CODES: {
|
|
29
|
+
readonly MARGIN: "5PMarginV3";
|
|
30
|
+
readonly ORDER_BOOK: "5POrdBkV2";
|
|
31
|
+
readonly HOLDINGS: "5PHoldingV2";
|
|
32
|
+
readonly POSITIONS: "5PNPNWV1";
|
|
33
|
+
readonly PLACE_ORDER: "5PPlaceOrdReq";
|
|
34
|
+
readonly MODIFY_ORDER: "5PModifyOrdReq";
|
|
35
|
+
readonly CANCEL_ORDER: "5PCancelOrdReq";
|
|
36
|
+
readonly ORDER_STATUS: "5POrdStatus";
|
|
37
|
+
readonly TRADE_BOOK: "5PTrdBkV1";
|
|
38
|
+
readonly TRADE_INFO: "5PTrdInfo";
|
|
39
|
+
readonly MARKET_FEED: "5PMF";
|
|
40
|
+
readonly MARKET_DEPTH: "5PMD";
|
|
41
|
+
};
|
|
42
|
+
/** nsekit Exchange → 5paisa Exchange code */
|
|
43
|
+
export declare const EXCHANGE_TO_5P: Record<Exchange, string>;
|
|
44
|
+
export declare const EXCHANGE_FROM_5P: Record<string, Exchange>;
|
|
45
|
+
/** nsekit Exchange → 5paisa ExchangeType code (C=Cash, D=Derivative, U=Currency) */
|
|
46
|
+
export declare const EXCHANGE_TYPE_MAP: Record<Exchange, string>;
|
|
47
|
+
export declare const PRODUCT_TO_5P: Record<Product, boolean>;
|
|
48
|
+
export declare const PRODUCT_FROM_5P: (isIntraday: boolean) => Product;
|
|
49
|
+
/** 5paisa uses price=0 for market, IsStopLossOrder for SL */
|
|
50
|
+
export declare const ORDER_TYPE_TO_5P: (type: OrderType) => {
|
|
51
|
+
isStopLoss: boolean;
|
|
52
|
+
};
|
|
53
|
+
export declare const ORDER_TYPE_FROM_5P: (isStopLoss: boolean, price: number) => OrderType;
|
|
54
|
+
export declare const STATUS_FROM_5P: Record<string, OrderStatus>;
|
|
55
|
+
export declare const VALIDITY_TO_5P: Record<Validity, boolean>;
|
|
56
|
+
export declare const CANDLE_INTERVAL_TO_5P: Record<string, string>;
|
|
57
|
+
//# sourceMappingURL=fivepaisa-constants.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fivepaisa-constants.d.ts","sourceRoot":"","sources":["../../../src/brokers/fivepaisa/fivepaisa-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,kBAAkB,uDAAuD,CAAC;AACvF,eAAO,MAAM,yBAAyB,6CAA6C,CAAC;AACpF,eAAO,MAAM,2BAA2B,2EAA2E,CAAC;AACpH,4EAA4E;AAC5E,eAAO,MAAM,gBAAgB,qDAAqD,CAAC;AAInF,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;CAgBT,CAAC;AAIX,eAAO,MAAM,aAAa;;;;;;;;;;;;;CAahB,CAAC;AAIX,6CAA6C;AAC7C,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,CAOnD,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAIrD,CAAC;AAEF,oFAAoF;AACpF,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,CAOtD,CAAC;AAIF,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,OAAO,EAAE,OAAO,CAIlD,CAAC;AAEF,eAAO,MAAM,eAAe,GAAI,YAAY,OAAO,KAAG,OAChB,CAAC;AAIvC,6DAA6D;AAC7D,eAAO,MAAM,gBAAgB,GAAI,MAAM,SAAS,KAAG;IAAE,UAAU,EAAE,OAAO,CAAA;CAEtE,CAAC;AAEH,eAAO,MAAM,kBAAkB,GAAI,YAAY,OAAO,EAAE,OAAO,MAAM,KAAG,SAIvE,CAAC;AAIF,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAqBtD,CAAC;AAIF,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,QAAQ,EAAE,OAAO,CAGpD,CAAC;AAIF,eAAO,MAAM,qBAAqB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAMxD,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 5paisa instruments adapter.
|
|
3
|
+
* Implements IBrokerInstruments.
|
|
4
|
+
*
|
|
5
|
+
* Uses the Scrip Master CSV endpoint for bulk instrument dump:
|
|
6
|
+
* https://openapi.5paisa.com/VendorsAPI/Service1.svc/ScripMaster/segment/{segment}
|
|
7
|
+
*
|
|
8
|
+
* Segments: all, bse_eq, nse_eq, nse_fo, bse_fo, nse_currency, mcx_fo
|
|
9
|
+
*
|
|
10
|
+
* CSV columns: Exch, ExchType, ScripCode, ScripData, Name, Expiry,
|
|
11
|
+
* ScripType, StrikeRate, ISIN, LotSize, FullName, QtyLimit,
|
|
12
|
+
* TickSize, Multiplier, BOCOAllowed, SymbolRoot, Series
|
|
13
|
+
*/
|
|
14
|
+
import type { IBrokerInstruments, RawBrokerInstrument, BrokerInstrumentEntry } from '../../types/instruments';
|
|
15
|
+
export declare class FivePaisaInstruments implements IBrokerInstruments {
|
|
16
|
+
readonly capabilities: {
|
|
17
|
+
bulkDump: true;
|
|
18
|
+
searchAPI: false;
|
|
19
|
+
rawFileCache: true;
|
|
20
|
+
rawFilePath: string;
|
|
21
|
+
};
|
|
22
|
+
private accessToken;
|
|
23
|
+
private clientCode;
|
|
24
|
+
/** Set credentials needed for API calls. */
|
|
25
|
+
setCredentials(clientCode: string, accessToken: string): void;
|
|
26
|
+
/**
|
|
27
|
+
* Stream instruments from the Scrip Master CSV endpoint.
|
|
28
|
+
* Downloads per-segment CSV files and yields parsed rows.
|
|
29
|
+
*/
|
|
30
|
+
streamDump(): AsyncIterable<RawBrokerInstrument>;
|
|
31
|
+
/** Normalize a raw Scrip Master CSV row into a BrokerInstrumentEntry. */
|
|
32
|
+
normalize(raw: RawBrokerInstrument): BrokerInstrumentEntry;
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=fivepaisa-instruments.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fivepaisa-instruments.d.ts","sourceRoot":"","sources":["../../../src/brokers/fivepaisa/fivepaisa-instruments.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAGH,OAAO,KAAK,EACV,kBAAkB,EAClB,mBAAmB,EACnB,qBAAqB,EACtB,MAAM,yBAAyB,CAAC;AAyCjC,qBAAa,oBAAqB,YAAW,kBAAkB;IAC7D,QAAQ,CAAC,YAAY;;;;;MAKnB;IAEF,OAAO,CAAC,WAAW,CAAM;IACzB,OAAO,CAAC,UAAU,CAAM;IAExB,4CAA4C;IAC5C,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI;IAK7D;;;OAGG;IACI,UAAU,IAAI,aAAa,CAAC,mBAAmB,CAAC;IAqCvD,yEAAyE;IACzE,SAAS,CAAC,GAAG,EAAE,mBAAmB,GAAG,qBAAqB;CA4C3D"}
|