nsekit 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (76) hide show
  1. package/dist/brokers/dhan/DhanBroker.d.ts +51 -0
  2. package/dist/brokers/dhan/DhanBroker.d.ts.map +1 -0
  3. package/dist/brokers/dhan/dhan-auth.d.ts +28 -0
  4. package/dist/brokers/dhan/dhan-auth.d.ts.map +1 -0
  5. package/dist/brokers/dhan/dhan-constants.d.ts +21 -0
  6. package/dist/brokers/dhan/dhan-constants.d.ts.map +1 -0
  7. package/dist/brokers/dhan/dhan-instruments.d.ts +45 -0
  8. package/dist/brokers/dhan/dhan-instruments.d.ts.map +1 -0
  9. package/dist/brokers/dhan/dhan-mapper.d.ts +128 -0
  10. package/dist/brokers/dhan/dhan-mapper.d.ts.map +1 -0
  11. package/dist/brokers/dhan/dhan-socket.d.ts +46 -0
  12. package/dist/brokers/dhan/dhan-socket.d.ts.map +1 -0
  13. package/dist/brokers/dhan/index.d.ts +8 -0
  14. package/dist/brokers/dhan/index.d.ts.map +1 -0
  15. package/dist/brokers/finvasia/FinvasiaBroker.d.ts +50 -0
  16. package/dist/brokers/finvasia/FinvasiaBroker.d.ts.map +1 -0
  17. package/dist/brokers/finvasia/finvasia-auth.d.ts +28 -0
  18. package/dist/brokers/finvasia/finvasia-auth.d.ts.map +1 -0
  19. package/dist/brokers/finvasia/finvasia-constants.d.ts +22 -0
  20. package/dist/brokers/finvasia/finvasia-constants.d.ts.map +1 -0
  21. package/dist/brokers/finvasia/finvasia-instruments.d.ts +44 -0
  22. package/dist/brokers/finvasia/finvasia-instruments.d.ts.map +1 -0
  23. package/dist/brokers/finvasia/finvasia-mapper.d.ts +120 -0
  24. package/dist/brokers/finvasia/finvasia-mapper.d.ts.map +1 -0
  25. package/dist/brokers/finvasia/finvasia-socket.d.ts +42 -0
  26. package/dist/brokers/finvasia/finvasia-socket.d.ts.map +1 -0
  27. package/dist/brokers/finvasia/index.d.ts +8 -0
  28. package/dist/brokers/finvasia/index.d.ts.map +1 -0
  29. package/dist/brokers/paper/PaperBroker.d.ts +76 -0
  30. package/dist/brokers/paper/PaperBroker.d.ts.map +1 -0
  31. package/dist/brokers/paper/index.d.ts +4 -0
  32. package/dist/brokers/paper/index.d.ts.map +1 -0
  33. package/dist/brokers/paper/paper-fill-engine.d.ts +105 -0
  34. package/dist/brokers/paper/paper-fill-engine.d.ts.map +1 -0
  35. package/dist/brokers/zerodha/ZerodhaBroker.d.ts +52 -0
  36. package/dist/brokers/zerodha/ZerodhaBroker.d.ts.map +1 -0
  37. package/dist/brokers/zerodha/index.d.ts +8 -0
  38. package/dist/brokers/zerodha/index.d.ts.map +1 -0
  39. package/dist/brokers/zerodha/zerodha-auth.d.ts +28 -0
  40. package/dist/brokers/zerodha/zerodha-auth.d.ts.map +1 -0
  41. package/dist/brokers/zerodha/zerodha-constants.d.ts +21 -0
  42. package/dist/brokers/zerodha/zerodha-constants.d.ts.map +1 -0
  43. package/dist/brokers/zerodha/zerodha-instruments.d.ts +36 -0
  44. package/dist/brokers/zerodha/zerodha-instruments.d.ts.map +1 -0
  45. package/dist/brokers/zerodha/zerodha-mapper.d.ts +136 -0
  46. package/dist/brokers/zerodha/zerodha-mapper.d.ts.map +1 -0
  47. package/dist/brokers/zerodha/zerodha-socket.d.ts +33 -0
  48. package/dist/brokers/zerodha/zerodha-socket.d.ts.map +1 -0
  49. package/dist/errors/broker-error.d.ts +22 -0
  50. package/dist/errors/broker-error.d.ts.map +1 -0
  51. package/dist/errors/index.d.ts +5 -0
  52. package/dist/errors/index.d.ts.map +1 -0
  53. package/dist/errors/nsekit-error.d.ts +13 -0
  54. package/dist/errors/nsekit-error.d.ts.map +1 -0
  55. package/dist/errors/result.d.ts +19 -0
  56. package/dist/errors/result.d.ts.map +1 -0
  57. package/dist/index.d.ts +28 -0
  58. package/dist/index.d.ts.map +1 -0
  59. package/dist/index.js +23806 -0
  60. package/dist/instruments/instrument-master.d.ts +134 -0
  61. package/dist/instruments/instrument-master.d.ts.map +1 -0
  62. package/dist/interfaces/broker.interface.d.ts +33 -0
  63. package/dist/interfaces/broker.interface.d.ts.map +1 -0
  64. package/dist/session/session-manager.d.ts +128 -0
  65. package/dist/session/session-manager.d.ts.map +1 -0
  66. package/dist/types/broker.d.ts +222 -0
  67. package/dist/types/broker.d.ts.map +1 -0
  68. package/dist/types/common.d.ts +10 -0
  69. package/dist/types/common.d.ts.map +1 -0
  70. package/dist/types/index.d.ts +4 -0
  71. package/dist/types/index.d.ts.map +1 -0
  72. package/dist/types/instruments.d.ts +59 -0
  73. package/dist/types/instruments.d.ts.map +1 -0
  74. package/dist/websocket/ws-manager.d.ts +101 -0
  75. package/dist/websocket/ws-manager.d.ts.map +1 -0
  76. package/package.json +52 -0
@@ -0,0 +1,134 @@
1
+ /**
2
+ * InstrumentMaster — Unified in-memory index of instruments across all brokers.
3
+ *
4
+ * Maintains a Map<string, UnifiedInstrument> keyed by `{exchange}:{tradingSymbol}`.
5
+ * Supports:
6
+ * - syncBroker(): stream dump from any IBrokerInstruments, normalize, merge
7
+ * - search(): fuzzy text search with optional exchange/type filters
8
+ * - getBySymbol(): exact lookup by tradingSymbol + exchange (Redis -> memory)
9
+ * - getByToken(): lookup by broker-specific token
10
+ * - getOptionChain(): filter CE/PE instruments for a given underlying + expiry
11
+ * - Optional Redis cache layer for distributed lookups
12
+ * - ETag tracking for change detection across re-syncs
13
+ */
14
+ import type { BrokerId, Exchange, InstrumentType } from '../types/common';
15
+ import type { UnifiedInstrument, IBrokerInstruments, BrokerInstrumentEntry } from '../types/instruments';
16
+ import { type Result } from '../errors/result';
17
+ export interface RedisClient {
18
+ get(key: string): Promise<string | null>;
19
+ set(key: string, value: string, ...args: (string | number)[]): Promise<unknown>;
20
+ publish(channel: string, message: string): Promise<number>;
21
+ del(...keys: string[]): Promise<number>;
22
+ }
23
+ interface SyncMeta {
24
+ brokerId: BrokerId;
25
+ lastSyncAt: number;
26
+ etag?: string;
27
+ lastModified?: string;
28
+ instrumentCount: number;
29
+ }
30
+ export interface InstrumentMasterOptions {
31
+ /** Optional Redis client (ioredis-compatible) for distributed caching. */
32
+ redis?: RedisClient;
33
+ }
34
+ export declare class InstrumentMaster {
35
+ /** Primary store: `{exchange}:{tradingSymbol}` -> UnifiedInstrument */
36
+ private instruments;
37
+ /** Reverse index: `{brokerId}:{brokerToken}` -> instrument key */
38
+ private tokenIndex;
39
+ /** Sync metadata per broker */
40
+ private syncMeta;
41
+ /** Optional Redis client for distributed cache. */
42
+ private readonly redis;
43
+ constructor(options?: InstrumentMasterOptions);
44
+ /**
45
+ * Stream a broker's instrument dump, normalize each entry, and merge
46
+ * into the unified index. Skips re-sync if the ETag has not changed.
47
+ *
48
+ * @param brokerId - Identifier for the broker being synced
49
+ * @param brokerInstruments - The broker's IBrokerInstruments implementation
50
+ * @param force - Skip ETag check and force re-sync
51
+ */
52
+ syncBroker(brokerId: BrokerId, brokerInstruments: IBrokerInstruments, force?: boolean): Promise<Result<SyncMeta>>;
53
+ /**
54
+ * Directly add a batch of pre-normalized entries for a broker.
55
+ * Useful when the caller has already fetched and parsed the dump.
56
+ */
57
+ addEntries(brokerId: BrokerId, entries: BrokerInstrumentEntry[]): void;
58
+ /**
59
+ * Fuzzy search across all indexed instruments.
60
+ * Matches against tradingSymbol and underlying (case-insensitive).
61
+ *
62
+ * @param query - Search text
63
+ * @param exchange - Optional exchange filter
64
+ * @param instrumentType - Optional instrument type filter
65
+ * @param limit - Max results (default 50)
66
+ */
67
+ search(query: string, exchange?: Exchange, instrumentType?: InstrumentType, limit?: number): UnifiedInstrument[];
68
+ /**
69
+ * Get an instrument by its exact tradingSymbol and exchange.
70
+ * Checks Redis first (if available), then falls back to in-memory.
71
+ */
72
+ getBySymbolAsync(tradingSymbol: string, exchange: Exchange): Promise<UnifiedInstrument | undefined>;
73
+ /**
74
+ * Get an instrument by its exact tradingSymbol and exchange (in-memory only).
75
+ */
76
+ getBySymbol(tradingSymbol: string, exchange: Exchange): UnifiedInstrument | undefined;
77
+ /**
78
+ * Get an instrument by a broker-specific token.
79
+ */
80
+ getByToken(brokerToken: string, brokerId: BrokerId): UnifiedInstrument | undefined;
81
+ /**
82
+ * Get all CE and PE instruments for a given underlying and expiry date.
83
+ * Returns instruments sorted by strike price.
84
+ * Results are cached in Redis (10 min TTL) when available.
85
+ *
86
+ * @param underlying - The underlying symbol (e.g. "NIFTY", "BANKNIFTY")
87
+ * @param expiry - The expiry date to match
88
+ */
89
+ getOptionChainCached(underlying: string, expiry: Date): Promise<UnifiedInstrument[]>;
90
+ /**
91
+ * Get all CE and PE instruments for a given underlying and expiry date.
92
+ * Returns instruments sorted by strike price (in-memory only).
93
+ *
94
+ * @param underlying - The underlying symbol (e.g. "NIFTY", "BANKNIFTY")
95
+ * @param expiry - The expiry date to match
96
+ */
97
+ getOptionChain(underlying: string, expiry: Date): UnifiedInstrument[];
98
+ /** Total number of instruments in the index. */
99
+ get size(): number;
100
+ /** Get sync metadata for a specific broker. */
101
+ getSyncMeta(brokerId: BrokerId): SyncMeta | undefined;
102
+ /** Get sync metadata for all brokers. */
103
+ getAllSyncMeta(): Map<BrokerId, SyncMeta>;
104
+ /** Get all instruments (read-only snapshot). */
105
+ getAll(): UnifiedInstrument[];
106
+ /** Get all instruments for a specific exchange. */
107
+ getByExchange(exchange: Exchange): UnifiedInstrument[];
108
+ /** Clear the entire index. */
109
+ clear(): void;
110
+ /**
111
+ * Merge a single BrokerInstrumentEntry into the unified index.
112
+ * If the instrument already exists (from another broker), the broker token
113
+ * is appended to the existing entry's brokerTokens map.
114
+ */
115
+ private mergeEntry;
116
+ /** Remove all entries that were contributed by a specific broker. */
117
+ private clearBrokerEntries;
118
+ /**
119
+ * Score how well an instrument matches a query string.
120
+ * Returns 0 for no match.
121
+ */
122
+ private scoreMatch;
123
+ /** Check if all characters of needle appear in haystack in order. */
124
+ private fuzzyMatch;
125
+ /** Build the canonical map key for an instrument. */
126
+ private makeKey;
127
+ /**
128
+ * Cache all instruments into Redis with expiry-aware TTL.
129
+ * Options (CE/PE) get TTL until their expiry date; others get 24h.
130
+ */
131
+ private cacheInstrumentsToRedis;
132
+ }
133
+ export {};
134
+ //# sourceMappingURL=instrument-master.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"instrument-master.d.ts","sourceRoot":"","sources":["../../src/instruments/instrument-master.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ import type { BrokerId, CandleInterval } from '../types/common';
2
+ import type { BrokerCredentials, AuthSession, UnifiedOrderParams, ModifyParams, OrderResult, CancelResult, UnifiedOrder, OrderUpdate, UnifiedPosition, UnifiedHolding, Quote, OptionChainRow, Candle, MarginInfo, FundInfo, Trade, PnLEntry, TickCallback, Subscription } from '../types/broker';
3
+ import type { IBrokerInstruments } from '../types/instruments';
4
+ import type { Result } from '../errors/result';
5
+ import type { WSConnectionState } from '../types/common';
6
+ export interface IBroker {
7
+ readonly id: BrokerId;
8
+ readonly name: string;
9
+ readonly instruments: IBrokerInstruments;
10
+ authenticate(creds: BrokerCredentials): Promise<Result<AuthSession>>;
11
+ refreshSession(session: AuthSession): Promise<Result<AuthSession>>;
12
+ isSessionValid(): boolean;
13
+ getSessionExpiry(): Date | null;
14
+ placeOrder(params: UnifiedOrderParams): Promise<Result<OrderResult>>;
15
+ modifyOrder(orderId: string, params: ModifyParams): Promise<Result<OrderResult>>;
16
+ cancelOrder(orderId: string): Promise<Result<CancelResult>>;
17
+ getOrders(): Promise<Result<UnifiedOrder[]>>;
18
+ getOrderHistory(orderId: string): Promise<Result<OrderUpdate[]>>;
19
+ getPositions(): Promise<Result<UnifiedPosition[]>>;
20
+ getHoldings(): Promise<Result<UnifiedHolding[]>>;
21
+ getLTP(symbols: string[]): Promise<Result<Map<string, number>>>;
22
+ getQuote(symbols: string[]): Promise<Result<Map<string, Quote>>>;
23
+ getOptionChain(underlying: string, expiry: Date): Promise<Result<OptionChainRow[]>>;
24
+ getCandles(symbol: string, interval: CandleInterval, from: Date, to: Date): Promise<Result<Candle[]>>;
25
+ subscribeTicks(tokens: string[], cb: TickCallback): Subscription;
26
+ unsubscribeTicks(sub: Subscription): void;
27
+ getConnectionState(): WSConnectionState;
28
+ getMargins(): Promise<Result<MarginInfo>>;
29
+ getFunds(): Promise<Result<FundInfo>>;
30
+ getTradeHistory(from: Date, to: Date): Promise<Result<Trade[]>>;
31
+ getPnLReport(from: Date, to: Date): Promise<Result<PnLEntry[]>>;
32
+ }
33
+ //# sourceMappingURL=broker.interface.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"broker.interface.d.ts","sourceRoot":"","sources":["../../src/interfaces/broker.interface.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAY,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAC1E,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,EACb,MAAM,iBAAiB,CAAC;AACzB,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC/D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAEzD,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,EAAE,kBAAkB,CAAC;IAGzC,YAAY,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC;IACrE,cAAc,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC;IACnE,cAAc,IAAI,OAAO,CAAC;IAC1B,gBAAgB,IAAI,IAAI,GAAG,IAAI,CAAC;IAGhC,UAAU,CAAC,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC;IACrE,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC;IACjF,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC;IAC5D,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC;IAC7C,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;IAGjE,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC;IACnD,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC;IAGjD,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;IAChE,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;IACjE,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC;IACpF,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAGtG,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,YAAY,GAAG,YAAY,CAAC;IACjE,gBAAgB,CAAC,GAAG,EAAE,YAAY,GAAG,IAAI,CAAC;IAC1C,kBAAkB,IAAI,iBAAiB,CAAC;IAGxC,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC;IAC1C,QAAQ,IAAI,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;IAGtC,eAAe,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IAChE,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;CACjE"}
@@ -0,0 +1,128 @@
1
+ /**
2
+ * SessionManager — Manages broker authentication sessions.
3
+ *
4
+ * Stores AuthSession objects per broker in an in-memory Map.
5
+ * Supports:
6
+ * - login(): authenticate with a broker and store the session
7
+ * - getSession(): retrieve the current session for a broker
8
+ * - refreshIfNeeded(): check expiry and attempt token refresh
9
+ * - isValid(): quick validity check
10
+ * - logout(): clear a broker's session
11
+ * - Session persistence callback for external storage
12
+ */
13
+ import type { BrokerId } from '../types/common';
14
+ import type { AuthSession, BrokerCredentials } from '../types/broker';
15
+ import type { IBroker } from '../interfaces/broker.interface';
16
+ import { type Result } from '../errors/result';
17
+ export interface SessionRedisClient {
18
+ get(key: string): Promise<string | null>;
19
+ set(key: string, value: string, ...args: (string | number)[]): Promise<unknown>;
20
+ del(...keys: string[]): Promise<number>;
21
+ }
22
+ interface SessionManagerOptions {
23
+ /**
24
+ * Buffer time in seconds before actual expiry to trigger a refresh.
25
+ * Default: 300 (5 minutes).
26
+ */
27
+ refreshBufferSeconds?: number;
28
+ /**
29
+ * Optional callback invoked whenever a session is created or refreshed.
30
+ * Use this to persist sessions to external storage (file, database, etc.).
31
+ */
32
+ onSessionChange?: (brokerId: BrokerId, session: AuthSession | null) => void | Promise<void>;
33
+ /** Optional Redis client for session mirroring. */
34
+ redis?: SessionRedisClient;
35
+ /** User ID for Redis key namespacing. */
36
+ userId?: string;
37
+ }
38
+ export declare class SessionManager {
39
+ private sessions;
40
+ private brokers;
41
+ private readonly refreshBuffer;
42
+ private readonly onSessionChange?;
43
+ private readonly redis;
44
+ private readonly userId;
45
+ constructor(options?: SessionManagerOptions);
46
+ /**
47
+ * Register a broker instance for session management.
48
+ * Must be called before login/refresh operations.
49
+ */
50
+ registerBroker(brokerId: BrokerId, broker: IBroker): void;
51
+ /**
52
+ * Unregister a broker and clear its session.
53
+ */
54
+ unregisterBroker(brokerId: BrokerId): void;
55
+ /**
56
+ * Authenticate with a broker and store the resulting session.
57
+ *
58
+ * @param brokerId - Which broker to authenticate with
59
+ * @param credentials - Broker-specific credentials
60
+ */
61
+ login(brokerId: BrokerId, credentials: BrokerCredentials): Promise<Result<AuthSession>>;
62
+ /**
63
+ * Get the current session for a broker.
64
+ * Returns undefined if no session exists.
65
+ */
66
+ getSession(brokerId: BrokerId): AuthSession | undefined;
67
+ /**
68
+ * Restore a previously persisted session.
69
+ * Use this to hydrate the manager from external storage on startup.
70
+ */
71
+ restoreSession(brokerId: BrokerId, session: AuthSession): void;
72
+ /**
73
+ * Check if the session is about to expire and refresh it if needed.
74
+ * Returns the (possibly refreshed) session, or an error if refresh fails.
75
+ *
76
+ * The refresh is triggered when the session will expire within
77
+ * `refreshBufferSeconds` from now.
78
+ */
79
+ refreshIfNeeded(brokerId: BrokerId): Promise<Result<AuthSession>>;
80
+ /**
81
+ * Quick check: is the session for this broker currently valid?
82
+ * Does not attempt a refresh.
83
+ */
84
+ isValid(brokerId: BrokerId): boolean;
85
+ /**
86
+ * Check if the session will expire within the given number of seconds.
87
+ */
88
+ isExpiringSoon(brokerId: BrokerId, withinSeconds?: number): boolean;
89
+ /**
90
+ * Get the expiry timestamp for a broker's session.
91
+ */
92
+ getExpiry(brokerId: BrokerId): Date | null;
93
+ /**
94
+ * Get the remaining session time in seconds.
95
+ * Returns 0 if the session is expired or doesn't exist.
96
+ */
97
+ getRemainingSeconds(brokerId: BrokerId): number;
98
+ /**
99
+ * Clear the session for a broker.
100
+ */
101
+ logout(brokerId: BrokerId): Promise<void>;
102
+ /**
103
+ * Clear all sessions.
104
+ */
105
+ logoutAll(): Promise<void>;
106
+ /**
107
+ * Refresh all sessions that are expiring soon.
108
+ * Returns a map of brokerId to refresh results.
109
+ */
110
+ refreshAll(): Promise<Map<BrokerId, Result<AuthSession>>>;
111
+ /**
112
+ * Get a summary of all managed sessions.
113
+ */
114
+ getStatus(): Map<BrokerId, {
115
+ valid: boolean;
116
+ expiresAt: number;
117
+ remainingSeconds: number;
118
+ userId: string;
119
+ }>;
120
+ /** Number of active sessions. */
121
+ get sessionCount(): number;
122
+ /** List broker IDs with active sessions. */
123
+ getActiveBrokers(): BrokerId[];
124
+ /** Notify the persistence callback of a session change. */
125
+ private notifyChange;
126
+ }
127
+ export {};
128
+ //# sourceMappingURL=session-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-manager.d.ts","sourceRoot":"","sources":["../../src/session/session-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,222 @@
1
+ import type { BrokerId, Exchange, OrderType, Product, InstrumentType, OrderStatus, Validity } from './common';
2
+ export interface BrokerCredentials {
3
+ apiKey: string;
4
+ apiSecret?: string;
5
+ userId?: string;
6
+ password?: string;
7
+ totpSecret?: string;
8
+ accessToken?: string;
9
+ [key: string]: string | undefined;
10
+ }
11
+ export interface AuthSession {
12
+ accessToken: string;
13
+ refreshToken?: string;
14
+ expiresAt: number;
15
+ ttlSeconds: number;
16
+ brokerId: BrokerId;
17
+ userId: string;
18
+ metadata?: Record<string, unknown>;
19
+ }
20
+ export interface UnifiedOrderParams {
21
+ tradingSymbol: string;
22
+ exchange: Exchange;
23
+ side: 'BUY' | 'SELL';
24
+ quantity: number;
25
+ type: OrderType;
26
+ product: Product;
27
+ price?: number;
28
+ triggerPrice?: number;
29
+ validity: Validity;
30
+ tag?: string;
31
+ disclosedQty?: number;
32
+ }
33
+ export interface ModifyParams {
34
+ price?: number;
35
+ quantity?: number;
36
+ triggerPrice?: number;
37
+ type?: OrderType;
38
+ validity?: Validity;
39
+ }
40
+ export interface OrderResult {
41
+ orderId: string;
42
+ brokerOrderId: string;
43
+ status: OrderStatus;
44
+ message?: string;
45
+ timestamp: number;
46
+ }
47
+ export interface CancelResult {
48
+ orderId: string;
49
+ status: 'CANCELLED';
50
+ timestamp: number;
51
+ }
52
+ export interface UnifiedOrder {
53
+ orderId: string;
54
+ brokerOrderId: string;
55
+ broker: BrokerId;
56
+ tradingSymbol: string;
57
+ exchange: Exchange;
58
+ side: 'BUY' | 'SELL';
59
+ type: OrderType;
60
+ product: Product;
61
+ quantity: number;
62
+ filledQty: number;
63
+ pendingQty: number;
64
+ price: number;
65
+ triggerPrice?: number;
66
+ averagePrice: number;
67
+ status: OrderStatus;
68
+ validity: Validity;
69
+ tag?: string;
70
+ placedAt: number;
71
+ updatedAt: number;
72
+ }
73
+ export interface OrderUpdate {
74
+ orderId: string;
75
+ status: OrderStatus;
76
+ filledQty: number;
77
+ averagePrice: number;
78
+ timestamp: number;
79
+ message?: string;
80
+ }
81
+ export interface UnifiedPosition {
82
+ broker: BrokerId;
83
+ tradingSymbol: string;
84
+ exchange: Exchange;
85
+ side: 'LONG' | 'SHORT' | 'FLAT';
86
+ quantity: number;
87
+ buyQty: number;
88
+ sellQty: number;
89
+ avgPrice: number;
90
+ ltp: number;
91
+ pnl: number;
92
+ realizedPnl: number;
93
+ unrealizedPnl: number;
94
+ product: Product;
95
+ instrumentType: InstrumentType;
96
+ underlying?: string;
97
+ strike?: number;
98
+ expiry?: Date;
99
+ }
100
+ export interface UnifiedHolding {
101
+ broker: BrokerId;
102
+ tradingSymbol: string;
103
+ exchange: Exchange;
104
+ isin: string;
105
+ quantity: number;
106
+ avgPrice: number;
107
+ ltp: number;
108
+ pnl: number;
109
+ dayChange: number;
110
+ dayChangePercent: number;
111
+ }
112
+ export interface UnifiedTick {
113
+ broker: BrokerId;
114
+ token: string;
115
+ tradingSymbol: string;
116
+ ltp: number;
117
+ open: number;
118
+ high: number;
119
+ low: number;
120
+ close: number;
121
+ volume: number;
122
+ oi?: number;
123
+ bid: number;
124
+ ask: number;
125
+ bidQty: number;
126
+ askQty: number;
127
+ timestamp: number;
128
+ }
129
+ export interface Quote {
130
+ tradingSymbol: string;
131
+ exchange: Exchange;
132
+ ltp: number;
133
+ open: number;
134
+ high: number;
135
+ low: number;
136
+ close: number;
137
+ volume: number;
138
+ oi?: number;
139
+ oiChange?: number;
140
+ bid: number;
141
+ ask: number;
142
+ bidQty: number;
143
+ askQty: number;
144
+ upperCircuit: number;
145
+ lowerCircuit: number;
146
+ change: number;
147
+ changePercent: number;
148
+ timestamp: number;
149
+ }
150
+ export interface OptionChainRow {
151
+ strike: number;
152
+ expiry: Date;
153
+ ce: OptionData | null;
154
+ pe: OptionData | null;
155
+ }
156
+ export interface OptionData {
157
+ tradingSymbol: string;
158
+ ltp: number;
159
+ bid: number;
160
+ ask: number;
161
+ volume: number;
162
+ oi: number;
163
+ oiChange: number;
164
+ iv: number;
165
+ delta?: number;
166
+ gamma?: number;
167
+ theta?: number;
168
+ vega?: number;
169
+ }
170
+ export interface Candle {
171
+ timestamp: number;
172
+ open: number;
173
+ high: number;
174
+ low: number;
175
+ close: number;
176
+ volume: number;
177
+ oi?: number;
178
+ }
179
+ export interface MarginInfo {
180
+ available: number;
181
+ used: number;
182
+ total: number;
183
+ collateral: number;
184
+ segments: Record<string, {
185
+ available: number;
186
+ used: number;
187
+ }>;
188
+ }
189
+ export interface FundInfo {
190
+ equity: number;
191
+ commodity: number;
192
+ total: number;
193
+ }
194
+ export interface Trade {
195
+ tradeId: string;
196
+ orderId: string;
197
+ tradingSymbol: string;
198
+ exchange: Exchange;
199
+ side: 'BUY' | 'SELL';
200
+ quantity: number;
201
+ price: number;
202
+ product: Product;
203
+ timestamp: number;
204
+ }
205
+ export interface PnLEntry {
206
+ date: string;
207
+ tradingSymbol: string;
208
+ exchange: Exchange;
209
+ buyQty: number;
210
+ buyAvg: number;
211
+ sellQty: number;
212
+ sellAvg: number;
213
+ realizedPnl: number;
214
+ product: Product;
215
+ }
216
+ export type TickCallback = (tick: UnifiedTick) => void;
217
+ export interface Subscription {
218
+ id: string;
219
+ tokens: string[];
220
+ callback: TickCallback;
221
+ }
222
+ //# sourceMappingURL=broker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"broker.d.ts","sourceRoot":"","sources":["../../src/types/broker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ export type BrokerId = 'zerodha' | 'finvasia' | 'dhan' | 'paper';
2
+ export type Exchange = 'NSE' | 'BSE' | 'NFO' | 'BFO' | 'MCX' | 'CDS';
3
+ export type OrderType = 'MARKET' | 'LIMIT' | 'SL' | 'SL_M';
4
+ export type Product = 'INTRADAY' | 'DELIVERY' | 'NORMAL';
5
+ export type InstrumentType = 'EQ' | 'FUT' | 'CE' | 'PE';
6
+ export type CandleInterval = '1m' | '5m' | '15m' | '1h' | '1d';
7
+ export type OrderStatus = 'PENDING' | 'OPEN' | 'FILLED' | 'CANCELLED' | 'REJECTED';
8
+ export type Validity = 'DAY' | 'IOC';
9
+ export type WSConnectionState = 'CONNECTING' | 'CONNECTED' | 'RECONNECTING' | 'DISCONNECTED';
10
+ //# sourceMappingURL=common.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../src/types/common.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,QAAQ,GAAG,SAAS,GAAG,UAAU,GAAG,MAAM,GAAG,OAAO,CAAC;AAEjE,MAAM,MAAM,QAAQ,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC;AAErE,MAAM,MAAM,SAAS,GAAG,QAAQ,GAAG,OAAO,GAAG,IAAI,GAAG,MAAM,CAAC;AAE3D,MAAM,MAAM,OAAO,GAAG,UAAU,GAAG,UAAU,GAAG,QAAQ,CAAC;AAEzD,MAAM,MAAM,cAAc,GAAG,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,IAAI,CAAC;AAExD,MAAM,MAAM,cAAc,GAAG,IAAI,GAAG,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,IAAI,CAAC;AAE/D,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,MAAM,GAAG,QAAQ,GAAG,WAAW,GAAG,UAAU,CAAC;AAEnF,MAAM,MAAM,QAAQ,GAAG,KAAK,GAAG,KAAK,CAAC;AAErC,MAAM,MAAM,iBAAiB,GAAG,YAAY,GAAG,WAAW,GAAG,cAAc,GAAG,cAAc,CAAC"}
@@ -0,0 +1,4 @@
1
+ export type { BrokerId, Exchange, OrderType, Product, InstrumentType, CandleInterval, OrderStatus, Validity, WSConnectionState, } from './common';
2
+ export type { BrokerCredentials, AuthSession, UnifiedOrderParams, ModifyParams, OrderResult, CancelResult, UnifiedOrder, OrderUpdate, UnifiedPosition, UnifiedHolding, UnifiedTick, Quote, OptionChainRow, OptionData, Candle, MarginInfo, FundInfo, Trade, PnLEntry, TickCallback, Subscription, } from './broker';
3
+ export type { UnifiedInstrument, RawBrokerInstrument, BrokerInstrumentEntry, IBrokerInstruments, } from './instruments';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,QAAQ,EACR,QAAQ,EACR,SAAS,EACT,OAAO,EACP,cAAc,EACd,cAAc,EACd,WAAW,EACX,QAAQ,EACR,iBAAiB,GAClB,MAAM,UAAU,CAAC;AAElB,YAAY,EACV,iBAAiB,EACjB,WAAW,EACX,kBAAkB,EAClB,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,eAAe,EACf,cAAc,EACd,WAAW,EACX,KAAK,EACL,cAAc,EACd,UAAU,EACV,MAAM,EACN,UAAU,EACV,QAAQ,EACR,KAAK,EACL,QAAQ,EACR,YAAY,EACZ,YAAY,GACb,MAAM,UAAU,CAAC;AAElB,YAAY,EACV,iBAAiB,EACjB,mBAAmB,EACnB,qBAAqB,EACrB,kBAAkB,GACnB,MAAM,eAAe,CAAC"}
@@ -0,0 +1,59 @@
1
+ import type { Exchange, InstrumentType } from './common';
2
+ import type { Result } from '../errors/result';
3
+ export interface UnifiedInstrument {
4
+ exchange: Exchange;
5
+ underlying: string;
6
+ instrumentType: InstrumentType;
7
+ expiry?: Date;
8
+ strike?: number;
9
+ lotSize: number;
10
+ tickSize: number;
11
+ tradingSymbol: string;
12
+ brokerTokens: {
13
+ zerodha?: {
14
+ tradingsymbol: string;
15
+ instrument_token: number;
16
+ };
17
+ finvasia?: {
18
+ tsym: string;
19
+ token: string;
20
+ };
21
+ dhan?: {
22
+ securityId: string;
23
+ sid: string;
24
+ };
25
+ };
26
+ }
27
+ export interface RawBrokerInstrument {
28
+ [key: string]: unknown;
29
+ }
30
+ export interface BrokerInstrumentEntry {
31
+ tradingSymbol: string;
32
+ exchange: Exchange;
33
+ instrumentType: InstrumentType;
34
+ underlying: string;
35
+ expiry?: Date;
36
+ strike?: number;
37
+ lotSize: number;
38
+ tickSize: number;
39
+ brokerToken: string;
40
+ brokerSymbol: string;
41
+ raw: RawBrokerInstrument;
42
+ }
43
+ export interface IBrokerInstruments {
44
+ capabilities: {
45
+ bulkDump: boolean;
46
+ searchAPI: boolean;
47
+ rawFileCache: true;
48
+ rawFilePath: string;
49
+ };
50
+ streamDump?(): AsyncIterable<RawBrokerInstrument>;
51
+ checkDumpChanged?(lastSync: {
52
+ etag?: string;
53
+ lastModified?: string;
54
+ }): Promise<boolean>;
55
+ search?(query: string, exchange?: Exchange): Promise<Result<BrokerInstrumentEntry[]>>;
56
+ resolve?(symbol: string, exchange: Exchange): Promise<Result<BrokerInstrumentEntry>>;
57
+ normalize(raw: RawBrokerInstrument): BrokerInstrumentEntry;
58
+ }
59
+ //# sourceMappingURL=instruments.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"instruments.d.ts","sourceRoot":"","sources":["../../src/types/instruments.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAY,QAAQ,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AACnE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE/C,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,QAAQ,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,cAAc,CAAC;IAC/B,MAAM,CAAC,EAAE,IAAI,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE;QACZ,OAAO,CAAC,EAAE;YAAE,aAAa,EAAE,MAAM,CAAC;YAAC,gBAAgB,EAAE,MAAM,CAAA;SAAE,CAAC;QAC9D,QAAQ,CAAC,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAA;SAAE,CAAC;QAC3C,IAAI,CAAC,EAAE;YAAE,UAAU,EAAE,MAAM,CAAC;YAAC,GAAG,EAAE,MAAM,CAAA;SAAE,CAAC;KAC5C,CAAC;CACH;AAED,MAAM,WAAW,mBAAmB;IAClC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,qBAAqB;IACpC,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,QAAQ,CAAC;IACnB,cAAc,EAAE,cAAc,CAAC;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,IAAI,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,GAAG,EAAE,mBAAmB,CAAC;CAC1B;AAED,MAAM,WAAW,kBAAkB;IACjC,YAAY,EAAE;QACZ,QAAQ,EAAE,OAAO,CAAC;QAClB,SAAS,EAAE,OAAO,CAAC;QACnB,YAAY,EAAE,IAAI,CAAC;QACnB,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;IAEF,UAAU,CAAC,IAAI,aAAa,CAAC,mBAAmB,CAAC,CAAC;IAClD,gBAAgB,CAAC,CAAC,QAAQ,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACxF,MAAM,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,qBAAqB,EAAE,CAAC,CAAC,CAAC;IACtF,OAAO,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC,CAAC;IACrF,SAAS,CAAC,GAAG,EAAE,mBAAmB,GAAG,qBAAqB,CAAC;CAC5D"}