@finatic/client 0.0.133 → 0.0.134

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 (50) hide show
  1. package/README.md +87 -0
  2. package/dist/index.d.ts +471 -730
  3. package/dist/index.js +847 -734
  4. package/dist/index.js.map +1 -1
  5. package/dist/index.mjs +848 -732
  6. package/dist/index.mjs.map +1 -1
  7. package/dist/types/core/client/ApiClient.d.ts +206 -0
  8. package/dist/types/{client → core/client}/FinaticConnect.d.ts +54 -13
  9. package/dist/types/{portal → core/portal}/PortalUI.d.ts +1 -1
  10. package/dist/types/index.d.ts +6 -11
  11. package/dist/types/mocks/MockApiClient.d.ts +36 -90
  12. package/dist/types/mocks/MockDataProvider.d.ts +13 -3
  13. package/dist/types/mocks/MockFactory.d.ts +2 -2
  14. package/dist/types/{shared/themes → themes}/portalPresets.d.ts +1 -1
  15. package/dist/types/types/api/auth.d.ts +111 -0
  16. package/dist/types/types/{api.d.ts → api/broker.d.ts} +56 -284
  17. package/dist/types/types/api/core.d.ts +46 -0
  18. package/dist/types/types/api/errors.d.ts +23 -0
  19. package/dist/types/types/api/orders.d.ts +39 -0
  20. package/dist/types/types/{shared.d.ts → api/portfolio.d.ts} +26 -21
  21. package/dist/types/types/common/pagination.d.ts +33 -0
  22. package/dist/types/types/connect.d.ts +4 -2
  23. package/dist/types/types/index.d.ts +13 -0
  24. package/dist/types/types/{theme.d.ts → ui/theme.d.ts} +3 -0
  25. package/dist/types/utils/brokerUtils.d.ts +30 -0
  26. package/package.json +4 -3
  27. package/dist/types/client/ApiClient.d.ts +0 -234
  28. package/dist/types/mocks/index.d.ts +0 -5
  29. package/dist/types/security/ApiSecurity.d.ts +0 -24
  30. package/dist/types/security/RuntimeSecurity.d.ts +0 -28
  31. package/dist/types/security/SecurityUtils.d.ts +0 -21
  32. package/dist/types/security/index.d.ts +0 -2
  33. package/dist/types/services/AnalyticsService.d.ts +0 -18
  34. package/dist/types/services/ApiClient.d.ts +0 -121
  35. package/dist/types/services/PortalService.d.ts +0 -24
  36. package/dist/types/services/TradingService.d.ts +0 -55
  37. package/dist/types/services/api.d.ts +0 -23
  38. package/dist/types/services/auth.d.ts +0 -9
  39. package/dist/types/services/index.d.ts +0 -4
  40. package/dist/types/services/portfolio.d.ts +0 -10
  41. package/dist/types/services/trading.d.ts +0 -10
  42. package/dist/types/shared/index.d.ts +0 -2
  43. package/dist/types/shared/themes/index.d.ts +0 -2
  44. package/dist/types/shared/themes/presets.d.ts +0 -3
  45. package/dist/types/shared/themes/system.d.ts +0 -2
  46. package/dist/types/shared/types/index.d.ts +0 -110
  47. package/dist/types/types/config.d.ts +0 -12
  48. package/dist/types/types/errors.d.ts +0 -47
  49. package/dist/types/types/security.d.ts +0 -35
  50. package/dist/types/types.d.ts +0 -157
@@ -0,0 +1,206 @@
1
+ import { Holding, Portfolio } from '../../types/api/portfolio';
2
+ import { Order } from '../../types/api/orders';
3
+ import { BrokerInfo, BrokerAccount, BrokerOrder, BrokerPosition, BrokerDataOptions, DisconnectCompanyResponse } from '../../types/api/broker';
4
+ import { BrokerOrderParams, BrokerExtras } from '../../types/api/broker';
5
+ import { CryptoOrderOptions, OptionsOrderOptions, OrderResponse } from '../../types/api/orders';
6
+ import { BrokerConnection } from '../../types/api/broker';
7
+ import { OrdersFilter, PositionsFilter, AccountsFilter } from '../../types/api/broker';
8
+ import { TradingContext } from '../../types/api/orders';
9
+ import { PaginatedResult } from '../../types/common/pagination';
10
+ import { PortalUrlResponse } from '../../types/api/core';
11
+ import { DeviceInfo, SessionState, TokenInfo, SessionResponse, OtpRequestResponse, OtpVerifyResponse, SessionValidationResponse, SessionAuthenticateResponse, UserToken } from '../../types/api/auth';
12
+ import { ApiError } from '../../utils/errors';
13
+ export declare class ApiClient {
14
+ private readonly baseUrl;
15
+ protected readonly deviceInfo?: DeviceInfo;
16
+ protected currentSessionState: SessionState | null;
17
+ protected currentSessionId: string | null;
18
+ private tradingContext;
19
+ private tokenInfo;
20
+ private refreshPromise;
21
+ private readonly REFRESH_BUFFER_MINUTES;
22
+ private companyId;
23
+ private csrfToken;
24
+ constructor(baseUrl: string, deviceInfo?: DeviceInfo);
25
+ /**
26
+ * Set session context (session ID, company ID, CSRF token)
27
+ */
28
+ setSessionContext(sessionId: string, companyId: string, csrfToken?: string): void;
29
+ /**
30
+ * Get the current session ID
31
+ */
32
+ getCurrentSessionId(): string | null;
33
+ /**
34
+ * Get the current company ID
35
+ */
36
+ getCurrentCompanyId(): string | null;
37
+ /**
38
+ * Get the current CSRF token
39
+ */
40
+ getCurrentCsrfToken(): string | null;
41
+ /**
42
+ * Store tokens after successful authentication
43
+ */
44
+ setTokens(accessToken: string, refreshToken: string, expiresAt: string, userId?: string): void;
45
+ /**
46
+ * Get the current access token, refreshing if necessary
47
+ */
48
+ getValidAccessToken(): Promise<string>;
49
+ /**
50
+ * Check if the current token is expired or about to expire
51
+ */
52
+ private isTokenExpired;
53
+ /**
54
+ * Refresh the access token using the refresh token
55
+ */
56
+ private refreshTokens;
57
+ /**
58
+ * Perform the actual token refresh request
59
+ */
60
+ private performTokenRefresh;
61
+ /**
62
+ * Clear stored tokens (useful for logout)
63
+ */
64
+ clearTokens(): void;
65
+ /**
66
+ * Get current token info (for debugging/testing)
67
+ */
68
+ getTokenInfo(): TokenInfo | null;
69
+ /**
70
+ * Make a request to the API.
71
+ */
72
+ protected request<T>(path: string, options: {
73
+ method: string;
74
+ headers?: Record<string, string>;
75
+ body?: any;
76
+ params?: Record<string, string>;
77
+ }): Promise<T>;
78
+ /**
79
+ * Handle API errors. This method can be overridden by language-specific implementations.
80
+ */
81
+ protected handleError(status: number, error: any): ApiError;
82
+ startSession(token: string, userId?: string): Promise<SessionResponse>;
83
+ requestOtp(sessionId: string, email: string): Promise<OtpRequestResponse>;
84
+ verifyOtp(sessionId: string, otp: string): Promise<OtpVerifyResponse>;
85
+ authenticateDirectly(sessionId: string, userId: string): Promise<SessionAuthenticateResponse>;
86
+ /**
87
+ * Get the portal URL for an active session
88
+ * @param sessionId The session identifier
89
+ * @returns Portal URL response
90
+ * @throws SessionError if session is not in ACTIVE state
91
+ */
92
+ getPortalUrl(sessionId: string): Promise<PortalUrlResponse>;
93
+ validatePortalSession(sessionId: string, signature: string): Promise<SessionValidationResponse>;
94
+ completePortalSession(sessionId: string): Promise<PortalUrlResponse>;
95
+ getHoldings(): Promise<{
96
+ data: Holding[];
97
+ }>;
98
+ getOrders(): Promise<{
99
+ data: Order[];
100
+ }>;
101
+ getPortfolio(): Promise<{
102
+ data: Portfolio;
103
+ }>;
104
+ placeBrokerOrder(params: Partial<BrokerOrderParams> & {
105
+ symbol: string;
106
+ orderQty: number;
107
+ action: 'Buy' | 'Sell';
108
+ orderType: 'Market' | 'Limit' | 'Stop' | 'StopLimit';
109
+ assetType: 'Stock' | 'Option' | 'Crypto' | 'Future';
110
+ }, extras?: BrokerExtras, connection_id?: string): Promise<OrderResponse>;
111
+ cancelBrokerOrder(orderId: string, broker?: 'robinhood' | 'tasty_trade' | 'ninja_trader', extras?: any, connection_id?: string): Promise<OrderResponse>;
112
+ modifyBrokerOrder(orderId: string, params: Partial<BrokerOrderParams>, broker?: 'robinhood' | 'tasty_trade' | 'ninja_trader', extras?: any, connection_id?: string): Promise<OrderResponse>;
113
+ setBroker(broker: 'robinhood' | 'tasty_trade' | 'ninja_trader'): void;
114
+ setAccount(accountNumber: string, accountId?: string): void;
115
+ getTradingContext(): TradingContext;
116
+ clearTradingContext(): void;
117
+ placeStockMarketOrder(symbol: string, orderQty: number, action: 'Buy' | 'Sell', broker?: 'robinhood' | 'tasty_trade' | 'ninja_trader', accountNumber?: string, extras?: BrokerExtras, connection_id?: string): Promise<OrderResponse>;
118
+ placeStockLimitOrder(symbol: string, orderQty: number, action: 'Buy' | 'Sell', price: number, timeInForce?: 'day' | 'gtc', broker?: 'robinhood' | 'tasty_trade' | 'ninja_trader', accountNumber?: string, extras?: BrokerExtras, connection_id?: string): Promise<OrderResponse>;
119
+ placeStockStopOrder(symbol: string, orderQty: number, action: 'Buy' | 'Sell', stopPrice: number, timeInForce?: 'day' | 'gtc', broker?: 'robinhood' | 'tasty_trade' | 'ninja_trader', accountNumber?: string, extras?: BrokerExtras, connection_id?: string): Promise<OrderResponse>;
120
+ placeCryptoMarketOrder(symbol: string, orderQty: number, action: 'Buy' | 'Sell', options?: CryptoOrderOptions, broker?: 'robinhood' | 'tasty_trade' | 'ninja_trader', accountNumber?: string, extras?: BrokerExtras): Promise<OrderResponse>;
121
+ placeCryptoLimitOrder(symbol: string, orderQty: number, action: 'Buy' | 'Sell', price: number, timeInForce?: 'day' | 'gtc', options?: CryptoOrderOptions, broker?: 'robinhood' | 'tasty_trade' | 'ninja_trader', accountNumber?: string, extras?: BrokerExtras): Promise<OrderResponse>;
122
+ placeOptionsMarketOrder(symbol: string, orderQty: number, action: 'Buy' | 'Sell', options: OptionsOrderOptions, broker?: 'robinhood' | 'tasty_trade' | 'ninja_trader', accountNumber?: string, extras?: BrokerExtras): Promise<OrderResponse>;
123
+ placeOptionsLimitOrder(symbol: string, orderQty: number, action: 'Buy' | 'Sell', price: number, options: OptionsOrderOptions, timeInForce?: 'day' | 'gtc', broker?: 'robinhood' | 'tasty_trade' | 'ninja_trader', accountNumber?: string, extras?: BrokerExtras): Promise<OrderResponse>;
124
+ placeFuturesMarketOrder(symbol: string, orderQty: number, action: 'Buy' | 'Sell', broker?: 'robinhood' | 'tasty_trade' | 'ninja_trader', accountNumber?: string, extras?: BrokerExtras): Promise<OrderResponse>;
125
+ placeFuturesLimitOrder(symbol: string, orderQty: number, action: 'Buy' | 'Sell', price: number, timeInForce?: 'day' | 'gtc', broker?: 'robinhood' | 'tasty_trade' | 'ninja_trader', accountNumber?: string, extras?: BrokerExtras): Promise<OrderResponse>;
126
+ private buildOrderRequestBody;
127
+ private buildModifyRequestBody;
128
+ private applyBrokerDefaults;
129
+ revokeToken(): Promise<void>;
130
+ getUserToken(userId: string): Promise<UserToken>;
131
+ /**
132
+ * Get the current session state
133
+ */
134
+ getCurrentSessionState(): SessionState | null;
135
+ /**
136
+ * Refresh the current session to extend its lifetime
137
+ */
138
+ refreshSession(): Promise<{
139
+ success: boolean;
140
+ response_data: {
141
+ session_id: string;
142
+ company_id: string;
143
+ status: string;
144
+ expires_at: string;
145
+ user_id: string;
146
+ auto_login: boolean;
147
+ };
148
+ message: string;
149
+ status_code: number;
150
+ }>;
151
+ getBrokerList(): Promise<{
152
+ _id: string;
153
+ response_data: BrokerInfo[];
154
+ message: string;
155
+ status_code: number;
156
+ warnings: null;
157
+ errors: null;
158
+ }>;
159
+ getBrokerAccounts(options?: BrokerDataOptions): Promise<{
160
+ _id: string;
161
+ response_data: BrokerAccount[];
162
+ message: string;
163
+ status_code: number;
164
+ warnings: null;
165
+ errors: null;
166
+ }>;
167
+ getBrokerOrders(options?: BrokerDataOptions): Promise<{
168
+ _id: string;
169
+ response_data: BrokerOrder[];
170
+ message: string;
171
+ status_code: number;
172
+ warnings: null;
173
+ errors: null;
174
+ }>;
175
+ getBrokerPositions(options?: BrokerDataOptions): Promise<{
176
+ _id: string;
177
+ response_data: BrokerPosition[];
178
+ message: string;
179
+ status_code: number;
180
+ warnings: null;
181
+ errors: null;
182
+ }>;
183
+ getBrokerConnections(): Promise<{
184
+ _id: string;
185
+ response_data: BrokerConnection[];
186
+ message: string;
187
+ status_code: number;
188
+ warnings: null;
189
+ errors: null;
190
+ }>;
191
+ getBrokerOrdersPage(page?: number, perPage?: number, filters?: OrdersFilter): Promise<PaginatedResult<BrokerOrder[]>>;
192
+ getBrokerAccountsPage(page?: number, perPage?: number, filters?: AccountsFilter): Promise<PaginatedResult<BrokerAccount[]>>;
193
+ getBrokerPositionsPage(page?: number, perPage?: number, filters?: PositionsFilter): Promise<PaginatedResult<BrokerPosition[]>>;
194
+ getNextPage<T>(previousResult: PaginatedResult<T>, fetchFunction: (offset: number, limit: number) => Promise<PaginatedResult<T>>): Promise<PaginatedResult<T> | null>;
195
+ /**
196
+ * Check if this is a mock client
197
+ * @returns false for real API client
198
+ */
199
+ isMockClient(): boolean;
200
+ /**
201
+ * Disconnect a company from a broker connection
202
+ * @param connectionId - The connection ID to disconnect
203
+ * @returns Promise with disconnect response
204
+ */
205
+ disconnectCompany(connectionId: string): Promise<DisconnectCompanyResponse>;
206
+ }
@@ -1,7 +1,8 @@
1
- import { EventEmitter } from '../utils/events';
2
- import { PaginatedResult } from '../types';
3
- import { BrokerInfo, OrderResponse, TradingContext, BrokerConnection, OrdersFilter, PositionsFilter, AccountsFilter, BrokerDataOrder, BrokerDataPosition, BrokerDataAccount } from '../types/api';
4
- import { FinaticConnectOptions, PortalOptions } from '../types/connect';
1
+ import { EventEmitter } from '../../utils/events';
2
+ import { PaginatedResult } from '../../types/common/pagination';
3
+ import { OrderResponse, TradingContext } from '../../types/api/orders';
4
+ import { BrokerInfo, BrokerConnection, OrdersFilter, PositionsFilter, AccountsFilter, BrokerDataOrder, BrokerDataPosition, BrokerDataAccount, DisconnectCompanyResponse } from '../../types/api/broker';
5
+ import { FinaticConnectOptions, PortalOptions } from '../../types/connect';
5
6
  interface DeviceInfo {
6
7
  ip_address: string;
7
8
  user_agent: string;
@@ -21,6 +22,11 @@ export declare class FinaticConnect extends EventEmitter {
21
22
  private readonly BROKER_LIST_CACHE_DURATION;
22
23
  private readonly deviceInfo?;
23
24
  private currentSessionState;
25
+ private sessionKeepAliveInterval;
26
+ private readonly SESSION_KEEP_ALIVE_INTERVAL;
27
+ private readonly SESSION_VALIDATION_TIMEOUT;
28
+ private readonly SESSION_REFRESH_BUFFER_HOURS;
29
+ private sessionStartTime;
24
30
  constructor(options: FinaticConnectOptions, deviceInfo?: DeviceInfo);
25
31
  private handleTokens;
26
32
  /**
@@ -112,27 +118,34 @@ export declare class FinaticConnect extends EventEmitter {
112
118
  timeInForce: 'day' | 'gtc' | 'gtd' | 'ioc' | 'fok';
113
119
  broker?: 'robinhood' | 'tasty_trade' | 'ninja_trader';
114
120
  accountNumber?: string;
115
- assetType?: 'Stock' | 'Option' | 'Crypto' | 'Futures';
121
+ assetType?: 'Stock' | 'Option' | 'Crypto' | 'Future';
122
+ order_id?: string;
123
+ connection_id?: string;
116
124
  }): Promise<OrderResponse>;
117
125
  /**
118
126
  * Cancel a broker order
119
127
  * @param orderId - The order ID to cancel
120
128
  * @param broker - Optional broker override
129
+ * @param connection_id - Optional connection ID for testing bypass
121
130
  */
122
- cancelOrder(orderId: string, broker?: 'robinhood' | 'tasty_trade' | 'ninja_trader'): Promise<OrderResponse>;
131
+ cancelOrder(orderId: string, broker?: 'robinhood' | 'tasty_trade' | 'ninja_trader', connection_id?: string): Promise<OrderResponse>;
123
132
  /**
124
133
  * Modify a broker order
125
134
  * @param orderId - The order ID to modify
126
135
  * @param modifications - The modifications to apply
127
136
  * @param broker - Optional broker override
137
+ * @param connection_id - Optional connection ID for testing bypass
128
138
  */
129
139
  modifyOrder(orderId: string, modifications: Partial<{
130
- symbol: string;
131
- quantity: number;
132
- price: number;
133
- stopPrice: number;
134
- timeInForce: 'day' | 'gtc' | 'gtd' | 'ioc' | 'fok';
135
- }>, broker?: 'robinhood' | 'tasty_trade' | 'ninja_trader'): Promise<OrderResponse>;
140
+ symbol?: string;
141
+ quantity?: number;
142
+ price?: number;
143
+ stopPrice?: number;
144
+ timeInForce?: 'day' | 'gtc' | 'gtd' | 'ioc' | 'fok';
145
+ orderType?: 'Market' | 'Limit' | 'Stop' | 'StopLimit';
146
+ side?: 'Buy' | 'Sell';
147
+ order_id?: string;
148
+ }>, broker?: 'robinhood' | 'tasty_trade' | 'ninja_trader', connection_id?: string): Promise<OrderResponse>;
136
149
  /**
137
150
  * Set the broker context for trading
138
151
  * @param broker - The broker to use for trading
@@ -282,15 +295,36 @@ export declare class FinaticConnect extends EventEmitter {
282
295
  */
283
296
  getAllAccounts(filter?: AccountsFilter): Promise<BrokerDataAccount[]>;
284
297
  /**
285
- * Register automatic session cleanup on page unload/visibility change
298
+ * Register session management (but don't auto-cleanup for 24-hour sessions)
286
299
  */
287
300
  private registerSessionCleanup;
301
+ /**
302
+ * Start the session keep-alive mechanism
303
+ */
304
+ private startSessionKeepAlive;
305
+ /**
306
+ * Stop the session keep-alive mechanism
307
+ */
308
+ private stopSessionKeepAlive;
309
+ /**
310
+ * Validate session for keep-alive purposes and handle automatic refresh
311
+ */
312
+ private validateSessionKeepAlive;
313
+ /**
314
+ * Check if the session should be refreshed (after 16 hours)
315
+ */
316
+ private shouldRefreshSession;
317
+ /**
318
+ * Automatically refresh the session to extend its lifetime
319
+ */
320
+ private refreshSessionAutomatically;
288
321
  /**
289
322
  * Handle session cleanup when page is unloading
290
323
  */
291
324
  private handleSessionCleanup;
292
325
  /**
293
326
  * Handle visibility change (mobile browsers)
327
+ * Note: We don't complete sessions on visibility change for 24-hour sessions
294
328
  */
295
329
  private handleVisibilityChange;
296
330
  /**
@@ -298,5 +332,12 @@ export declare class FinaticConnect extends EventEmitter {
298
332
  * @param sessionId - The session ID to complete
299
333
  */
300
334
  private completeSession;
335
+ /**
336
+ * Disconnect a company from a broker connection
337
+ * @param connectionId - The connection ID to disconnect
338
+ * @returns Promise with disconnect response
339
+ * @throws AuthenticationError if user is not authenticated
340
+ */
341
+ disconnectCompany(connectionId: string): Promise<DisconnectCompanyResponse>;
301
342
  }
302
343
  export {};
@@ -1,4 +1,4 @@
1
- import { UserToken } from '../types/api';
1
+ import { UserToken } from '../../types';
2
2
  export declare class PortalUI {
3
3
  private iframe;
4
4
  private container;
@@ -1,17 +1,12 @@
1
- export type { ApiConfig, ApiResponse, Order, OptionsOrder, BrokerAccount, PortfolioSnapshot, PerformanceMetrics, UserToken, Holding, Portfolio, PortalResponse, SessionInitResponse, SessionStartResponse, OtpRequestResponse, OtpVerifyResponse, PortalUrlResponse, SessionValidationResponse, SessionAuthenticateResponse, RequestHeaders, SessionStatus, BrokerOrderParams, BrokerExtras, CryptoOrderOptions, OptionsOrderOptions, OrderResponse, TradingContext, DeviceInfo, BrokerOrder, BrokerPosition, BrokerDataOptions, BrokerInfo, TokenInfo, RefreshTokenRequest, RefreshTokenResponse, AccountsFilter, OrdersFilter, PositionsFilter, BrokerDataOrder, BrokerDataPosition, BrokerDataAccount, FilteredOrdersResponse, FilteredPositionsResponse, FilteredAccountsResponse, BrokerConnection, } from './types/api';
2
- export type { SDKConfig, PortalConfig } from './types/config';
3
- export type { Theme } from './types/theme';
1
+ export type { ApiConfig, ApiResponse, Order, OptionsOrder, BrokerAccount, PortfolioSnapshot, PerformanceMetrics, UserToken, Holding, Portfolio, PortalResponse, SessionInitResponse, SessionStartResponse, SessionResponse, OtpRequestResponse, OtpVerifyResponse, PortalUrlResponse, SessionValidationResponse, SessionAuthenticateResponse, RequestHeaders, SessionStatus, BrokerOrderParams, BrokerExtras, CryptoOrderOptions, OptionsOrderOptions, OrderResponse, TradingContext, DeviceInfo, BrokerOrder, BrokerPosition, BrokerDataOptions, BrokerInfo, TokenInfo, RefreshTokenRequest, RefreshTokenResponse, AccountsFilter, OrdersFilter, PositionsFilter, BrokerDataOrder, BrokerDataPosition, BrokerDataAccount, FilteredOrdersResponse, FilteredPositionsResponse, FilteredAccountsResponse, BrokerConnection, } from './types';
4
2
  export type { FinaticConnectOptions, FinaticUserToken, PortalMessage } from './types/connect';
5
3
  export type { PortalProps, PortalTheme, PortalThemeConfig, PortalThemePreset, } from './types/portal';
6
- export type { BaseError, ApiError, SessionError, AuthenticationError, AuthorizationError, RateLimitError, TokenError, ValidationError, NetworkError, SecurityError, } from './types/errors';
7
- export { ApiClient } from './client/ApiClient';
8
- export { FinaticConnect } from './client/FinaticConnect';
9
- export { CoreTradingService } from './services/TradingService';
10
- export { CoreAnalyticsService } from './services/AnalyticsService';
11
- export { CorePortalService } from './services/PortalService';
12
- export { PaginatedResult } from './types';
4
+ export type { TradeAccessDeniedError, OrderNotFoundError, ValidationError, } from './types/api/errors';
5
+ export { ApiClient } from './core/client/ApiClient';
6
+ export { FinaticConnect } from './core/client/FinaticConnect';
7
+ export { PaginatedResult } from './types/common/pagination';
13
8
  export * from './utils/errors';
14
9
  export * from './utils/events';
15
10
  export * from './utils/themeUtils';
16
- export { portalThemePresets } from './shared/themes/portalPresets';
11
+ export { portalThemePresets } from './themes/portalPresets';
17
12
  export { MockFactory } from './mocks/MockFactory';
@@ -1,6 +1,6 @@
1
- import { SessionResponse, OtpRequestResponse, OtpVerifyResponse, PortalUrlResponse, SessionValidationResponse, SessionAuthenticateResponse, UserToken, Holding, Order, Portfolio, BrokerInfo, BrokerAccount, BrokerOrder, BrokerPosition, BrokerConnection, BrokerDataOptions, SessionState, BrokerOrderParams, BrokerExtras, CryptoOrderOptions, OptionsOrderOptions, OrderResponse, TradingContext, TokenInfo, OrdersFilter, PositionsFilter, AccountsFilter, BrokerDataOrder, BrokerDataPosition, BrokerDataAccount } from '../types/api';
2
- import { DeviceInfo } from '../types/api';
1
+ import { SessionResponse, OtpRequestResponse, OtpVerifyResponse, PortalUrlResponse, SessionValidationResponse, SessionAuthenticateResponse, UserToken, Holding, Order, Portfolio, BrokerInfo, BrokerAccount, BrokerOrder, BrokerPosition, BrokerConnection, BrokerDataOptions, BrokerOrderParams, BrokerExtras, CryptoOrderOptions, OptionsOrderOptions, OrderResponse, TradingContext, OrdersFilter, PositionsFilter, AccountsFilter, BrokerDataOrder, BrokerDataPosition, DisconnectCompanyResponse } from '../types';
3
2
  import { PaginatedResult } from '../types';
3
+ import { DeviceInfo, SessionState, TokenInfo } from '../types/api/auth';
4
4
  import { MockDataProvider, MockConfig } from './MockDataProvider';
5
5
  /**
6
6
  * Mock API Client that implements the same interface as the real ApiClient
@@ -71,52 +71,42 @@ export declare class MockApiClient {
71
71
  getPortalUrl(sessionId: string): Promise<PortalUrlResponse>;
72
72
  validatePortalSession(sessionId: string, signature: string): Promise<SessionValidationResponse>;
73
73
  completePortalSession(sessionId: string): Promise<PortalUrlResponse>;
74
- getHoldings(accessToken: string): Promise<{
74
+ getHoldings(filter?: OrdersFilter): Promise<{
75
75
  data: Holding[];
76
76
  }>;
77
- getOrders(accessToken: string, filter?: OrdersFilter): Promise<{
77
+ getOrders(filter?: OrdersFilter): Promise<{
78
78
  data: Order[];
79
79
  }>;
80
- getPortfolio(accessToken: string): Promise<{
80
+ getPortfolio(): Promise<{
81
81
  data: Portfolio;
82
82
  }>;
83
- placeOrder(accessToken: string, order: Order): Promise<void>;
84
- getHoldingsAuto(): Promise<{
85
- data: Holding[];
86
- }>;
87
- getOrdersAuto(): Promise<{
88
- data: Order[];
89
- }>;
90
- getPortfolioAuto(): Promise<{
91
- data: Portfolio;
92
- }>;
93
- placeOrderAuto(order: Order): Promise<void>;
94
- placeBrokerOrder(accessToken: string, params: Partial<BrokerOrderParams> & {
83
+ placeOrder(order: BrokerOrderParams): Promise<void>;
84
+ placeBrokerOrder(params: Partial<BrokerOrderParams> & {
95
85
  symbol: string;
96
86
  orderQty: number;
97
87
  action: 'Buy' | 'Sell';
98
- orderType: 'Market' | 'Limit' | 'Stop' | 'TrailingStop';
99
- assetType: 'Stock' | 'Option' | 'Crypto' | 'Futures';
100
- }, extras?: BrokerExtras): Promise<OrderResponse>;
101
- cancelBrokerOrder(orderId: string, broker?: 'robinhood' | 'tasty_trade' | 'ninja_trader', extras?: any): Promise<OrderResponse>;
102
- modifyBrokerOrder(orderId: string, params: Partial<BrokerOrderParams>, broker?: 'robinhood' | 'tasty_trade' | 'ninja_trader', extras?: any): Promise<OrderResponse>;
88
+ orderType: 'Market' | 'Limit' | 'Stop' | 'StopLimit';
89
+ assetType: 'Stock' | 'Option' | 'Crypto' | 'Future';
90
+ }, extras?: BrokerExtras, connection_id?: string): Promise<OrderResponse>;
91
+ cancelBrokerOrder(orderId: string, broker?: 'robinhood' | 'tasty_trade' | 'ninja_trader', extras?: any, connection_id?: string): Promise<OrderResponse>;
92
+ modifyBrokerOrder(orderId: string, params: Partial<BrokerOrderParams>, broker?: 'robinhood' | 'tasty_trade' | 'ninja_trader', extras?: any, connection_id?: string): Promise<OrderResponse>;
103
93
  setBroker(broker: 'robinhood' | 'tasty_trade' | 'ninja_trader'): void;
104
94
  setAccount(accountNumber: string, accountId?: string): void;
105
95
  getTradingContext(): TradingContext;
106
96
  clearTradingContext(): void;
107
- placeStockMarketOrder(accessToken: string, symbol: string, orderQty: number, action: 'Buy' | 'Sell', broker?: 'robinhood' | 'tasty_trade' | 'ninja_trader', accountNumber?: string, extras?: BrokerExtras): Promise<OrderResponse>;
108
- placeStockLimitOrder(accessToken: string, symbol: string, orderQty: number, action: 'Buy' | 'Sell', price: number, timeInForce?: 'day' | 'gtc', broker?: 'robinhood' | 'tasty_trade' | 'ninja_trader', accountNumber?: string, extras?: BrokerExtras): Promise<OrderResponse>;
109
- placeStockStopOrder(accessToken: string, symbol: string, orderQty: number, action: 'Buy' | 'Sell', stopPrice: number, timeInForce?: 'day' | 'gtc', broker?: 'robinhood' | 'tasty_trade' | 'ninja_trader', accountNumber?: string, extras?: BrokerExtras): Promise<OrderResponse>;
110
- placeCryptoMarketOrder(accessToken: string, symbol: string, orderQty: number, action: 'Buy' | 'Sell', options?: CryptoOrderOptions, broker?: 'robinhood' | 'tasty_trade' | 'ninja_trader', accountNumber?: string, extras?: BrokerExtras): Promise<OrderResponse>;
111
- placeCryptoLimitOrder(accessToken: string, symbol: string, orderQty: number, action: 'Buy' | 'Sell', price: number, timeInForce?: 'day' | 'gtc', options?: CryptoOrderOptions, broker?: 'robinhood' | 'tasty_trade' | 'ninja_trader', accountNumber?: string, extras?: BrokerExtras): Promise<OrderResponse>;
112
- placeOptionsMarketOrder(accessToken: string, symbol: string, orderQty: number, action: 'Buy' | 'Sell', options: OptionsOrderOptions, broker?: 'robinhood' | 'tasty_trade' | 'ninja_trader', accountNumber?: string, extras?: BrokerExtras): Promise<OrderResponse>;
113
- placeOptionsLimitOrder(accessToken: string, symbol: string, orderQty: number, action: 'Buy' | 'Sell', price: number, options: OptionsOrderOptions, timeInForce?: 'day' | 'gtc', broker?: 'robinhood' | 'tasty_trade' | 'ninja_trader', accountNumber?: string, extras?: BrokerExtras): Promise<OrderResponse>;
114
- placeFuturesMarketOrder(accessToken: string, symbol: string, orderQty: number, action: 'Buy' | 'Sell', broker?: 'robinhood' | 'tasty_trade' | 'ninja_trader', accountNumber?: string, extras?: BrokerExtras): Promise<OrderResponse>;
115
- placeFuturesLimitOrder(accessToken: string, symbol: string, orderQty: number, action: 'Buy' | 'Sell', price: number, timeInForce?: 'day' | 'gtc', broker?: 'robinhood' | 'tasty_trade' | 'ninja_trader', accountNumber?: string, extras?: BrokerExtras): Promise<OrderResponse>;
97
+ placeStockMarketOrder(symbol: string, orderQty: number, action: 'Buy' | 'Sell', broker?: 'robinhood' | 'tasty_trade' | 'ninja_trader', accountNumber?: string, extras?: BrokerExtras): Promise<OrderResponse>;
98
+ placeStockLimitOrder(symbol: string, orderQty: number, action: 'Buy' | 'Sell', price: number, timeInForce?: 'day' | 'gtc', broker?: 'robinhood' | 'tasty_trade' | 'ninja_trader', accountNumber?: string, extras?: BrokerExtras): Promise<OrderResponse>;
99
+ placeStockStopOrder(symbol: string, orderQty: number, action: 'Buy' | 'Sell', stopPrice: number, timeInForce?: 'day' | 'gtc', broker?: 'robinhood' | 'tasty_trade' | 'ninja_trader', accountNumber?: string, extras?: BrokerExtras): Promise<OrderResponse>;
100
+ placeCryptoMarketOrder(symbol: string, orderQty: number, action: 'Buy' | 'Sell', options?: CryptoOrderOptions, broker?: 'robinhood' | 'tasty_trade' | 'ninja_trader', accountNumber?: string, extras?: BrokerExtras): Promise<OrderResponse>;
101
+ placeCryptoLimitOrder(symbol: string, orderQty: number, action: 'Buy' | 'Sell', price: number, timeInForce?: 'day' | 'gtc', options?: CryptoOrderOptions, broker?: 'robinhood' | 'tasty_trade' | 'ninja_trader', accountNumber?: string, extras?: BrokerExtras): Promise<OrderResponse>;
102
+ placeOptionsMarketOrder(symbol: string, orderQty: number, action: 'Buy' | 'Sell', options: OptionsOrderOptions, broker?: 'robinhood' | 'tasty_trade' | 'ninja_trader', accountNumber?: string, extras?: BrokerExtras): Promise<OrderResponse>;
103
+ placeOptionsLimitOrder(symbol: string, orderQty: number, action: 'Buy' | 'Sell', price: number, options: OptionsOrderOptions, timeInForce?: 'day' | 'gtc', broker?: 'robinhood' | 'tasty_trade' | 'ninja_trader', accountNumber?: string, extras?: BrokerExtras): Promise<OrderResponse>;
104
+ placeFuturesMarketOrder(symbol: string, orderQty: number, action: 'Buy' | 'Sell', broker?: 'robinhood' | 'tasty_trade' | 'ninja_trader', accountNumber?: string, extras?: BrokerExtras): Promise<OrderResponse>;
105
+ placeFuturesLimitOrder(symbol: string, orderQty: number, action: 'Buy' | 'Sell', price: number, timeInForce?: 'day' | 'gtc', broker?: 'robinhood' | 'tasty_trade' | 'ninja_trader', accountNumber?: string, extras?: BrokerExtras): Promise<OrderResponse>;
116
106
  revokeToken(accessToken: string): Promise<void>;
117
107
  getUserToken(userId: string): Promise<UserToken>;
118
108
  getCurrentSessionState(): SessionState | null;
119
- getBrokerList(accessToken: string): Promise<{
109
+ getBrokerList(): Promise<{
120
110
  _id: string;
121
111
  response_data: BrokerInfo[];
122
112
  message: string;
@@ -124,7 +114,7 @@ export declare class MockApiClient {
124
114
  warnings: null;
125
115
  errors: null;
126
116
  }>;
127
- getBrokerAccounts(accessToken: string, options?: BrokerDataOptions): Promise<{
117
+ getBrokerAccounts(options?: BrokerDataOptions): Promise<{
128
118
  _id: string;
129
119
  response_data: BrokerAccount[];
130
120
  message: string;
@@ -132,7 +122,7 @@ export declare class MockApiClient {
132
122
  warnings: null;
133
123
  errors: null;
134
124
  }>;
135
- getBrokerOrders(accessToken: string, options?: BrokerDataOptions): Promise<{
125
+ getBrokerOrders(options?: BrokerDataOptions): Promise<{
136
126
  _id: string;
137
127
  response_data: BrokerOrder[];
138
128
  message: string;
@@ -140,7 +130,7 @@ export declare class MockApiClient {
140
130
  warnings: null;
141
131
  errors: null;
142
132
  }>;
143
- getBrokerPositions(accessToken: string, options?: BrokerDataOptions): Promise<{
133
+ getBrokerPositions(options?: BrokerDataOptions): Promise<{
144
134
  _id: string;
145
135
  response_data: BrokerPosition[];
146
136
  message: string;
@@ -155,52 +145,12 @@ export declare class MockApiClient {
155
145
  data: BrokerDataPosition[];
156
146
  }>;
157
147
  getBrokerDataAccountsWithFilter(filter?: AccountsFilter): Promise<{
158
- data: BrokerDataAccount[];
159
- }>;
160
- getBrokerOrdersPage(page?: number, perPage?: number, filters?: OrdersFilter): Promise<PaginatedResult<any[]>>;
161
- getBrokerAccountsPage(page?: number, perPage?: number, filters?: AccountsFilter): Promise<PaginatedResult<any[]>>;
162
- getBrokerPositionsPage(page?: number, perPage?: number, filters?: PositionsFilter): Promise<PaginatedResult<any[]>>;
163
- getBrokerConnections(accessToken: string): Promise<{
164
- _id: string;
165
- response_data: BrokerConnection[];
166
- message: string;
167
- status_code: number;
168
- warnings: null;
169
- errors: null;
170
- }>;
171
- getBrokerListAuto(): Promise<{
172
- _id: string;
173
- response_data: BrokerInfo[];
174
- message: string;
175
- status_code: number;
176
- warnings: null;
177
- errors: null;
178
- }>;
179
- getBrokerAccountsAuto(options?: BrokerDataOptions): Promise<{
180
- _id: string;
181
- response_data: BrokerAccount[];
182
- message: string;
183
- status_code: number;
184
- warnings: null;
185
- errors: null;
186
- }>;
187
- getBrokerOrdersAuto(options?: BrokerDataOptions): Promise<{
188
- _id: string;
189
- response_data: BrokerOrder[];
190
- message: string;
191
- status_code: number;
192
- warnings: null;
193
- errors: null;
148
+ data: BrokerAccount[];
194
149
  }>;
195
- getBrokerPositionsAuto(options?: BrokerDataOptions): Promise<{
196
- _id: string;
197
- response_data: BrokerPosition[];
198
- message: string;
199
- status_code: number;
200
- warnings: null;
201
- errors: null;
202
- }>;
203
- getBrokerConnectionsAuto(): Promise<{
150
+ getBrokerOrdersPage(page?: number, perPage?: number, filters?: OrdersFilter): Promise<PaginatedResult<BrokerDataOrder[]>>;
151
+ getBrokerAccountsPage(page?: number, perPage?: number, filters?: AccountsFilter): Promise<PaginatedResult<BrokerAccount[]>>;
152
+ getBrokerPositionsPage(page?: number, perPage?: number, filters?: PositionsFilter): Promise<PaginatedResult<BrokerDataPosition[]>>;
153
+ getBrokerConnections(): Promise<{
204
154
  _id: string;
205
155
  response_data: BrokerConnection[];
206
156
  message: string;
@@ -208,16 +158,12 @@ export declare class MockApiClient {
208
158
  warnings: null;
209
159
  errors: null;
210
160
  }>;
211
- placeBrokerOrderAuto(params: Partial<BrokerOrderParams> & {
212
- symbol: string;
213
- orderQty: number;
214
- action: 'Buy' | 'Sell';
215
- orderType: 'Market' | 'Limit' | 'Stop' | 'TrailingStop';
216
- assetType: 'Stock' | 'Option' | 'Crypto' | 'Futures';
217
- }, extras?: BrokerExtras): Promise<OrderResponse>;
218
- placeStockMarketOrderAuto(symbol: string, orderQty: number, action: 'Buy' | 'Sell', broker?: 'robinhood' | 'tasty_trade' | 'ninja_trader', accountNumber?: string, extras?: BrokerExtras): Promise<OrderResponse>;
219
- placeStockLimitOrderAuto(symbol: string, orderQty: number, action: 'Buy' | 'Sell', price: number, timeInForce?: 'day' | 'gtc', broker?: 'robinhood' | 'tasty_trade' | 'ninja_trader', accountNumber?: string, extras?: BrokerExtras): Promise<OrderResponse>;
220
- placeStockStopOrderAuto(symbol: string, orderQty: number, action: 'Buy' | 'Sell', stopPrice: number, timeInForce?: 'day' | 'gtc', broker?: 'robinhood' | 'tasty_trade' | 'ninja_trader', accountNumber?: string, extras?: BrokerExtras): Promise<OrderResponse>;
161
+ /**
162
+ * Mock disconnect company method
163
+ * @param connectionId - The connection ID to disconnect
164
+ * @returns Promise with mock disconnect response
165
+ */
166
+ disconnectCompany(connectionId: string): Promise<DisconnectCompanyResponse>;
221
167
  getMockDataProvider(): MockDataProvider;
222
168
  clearMockData(): void;
223
169
  /**
@@ -1,4 +1,8 @@
1
- import { SessionResponse, OtpRequestResponse, OtpVerifyResponse, PortalUrlResponse, SessionValidationResponse, SessionAuthenticateResponse, UserToken, Holding, Order, Portfolio, BrokerInfo, BrokerAccount, BrokerConnection, OrderResponse, RefreshTokenResponse, OrdersFilter, PositionsFilter, AccountsFilter, BrokerDataOrder, BrokerDataPosition, BrokerDataAccount } from '../types/api';
1
+ import { Holding, Portfolio } from '../types/api/portfolio';
2
+ import { Order, OrderResponse } from '../types/api/orders';
3
+ import { BrokerInfo, BrokerAccount, BrokerConnection, OrdersFilter, PositionsFilter, AccountsFilter, BrokerDataOrder, BrokerDataPosition, BrokerOrderParams, DisconnectCompanyResponse } from '../types/api/broker';
4
+ import { SessionResponse, OtpRequestResponse, OtpVerifyResponse, SessionValidationResponse, SessionAuthenticateResponse, UserToken, RefreshTokenResponse } from '../types/api/auth';
5
+ import { PortalUrlResponse } from '../types/api/core';
2
6
  /**
3
7
  * Configuration for mock behavior
4
8
  */
@@ -92,9 +96,9 @@ export declare class MockDataProvider {
92
96
  data: BrokerDataPosition[];
93
97
  }>;
94
98
  mockGetBrokerDataAccounts(filter?: AccountsFilter): Promise<{
95
- data: BrokerDataAccount[];
99
+ data: BrokerAccount[];
96
100
  }>;
97
- mockPlaceOrder(order: Order): Promise<OrderResponse>;
101
+ mockPlaceOrder(order: BrokerOrderParams): Promise<OrderResponse>;
98
102
  /**
99
103
  * Get stored session data
100
104
  */
@@ -129,4 +133,10 @@ export declare class MockDataProvider {
129
133
  * Generate mock accounts with diverse data
130
134
  */
131
135
  private generateMockAccounts;
136
+ /**
137
+ * Mock disconnect company method
138
+ * @param connectionId - The connection ID to disconnect
139
+ * @returns Promise with mock disconnect response
140
+ */
141
+ mockDisconnectCompany(connectionId: string): Promise<DisconnectCompanyResponse>;
132
142
  }
@@ -1,7 +1,7 @@
1
- import { ApiClient } from '../client/ApiClient';
1
+ import { ApiClient } from '../core/client/ApiClient';
2
2
  import { MockApiClient } from './MockApiClient';
3
3
  import { MockConfig } from './MockDataProvider';
4
- import { DeviceInfo } from '../types/api';
4
+ import { DeviceInfo } from '../types';
5
5
  /**
6
6
  * Factory class for creating API clients (real or mock)
7
7
  */
@@ -1,4 +1,4 @@
1
- import { PortalThemeConfig } from '../../types/portal';
1
+ import { PortalThemeConfig } from '../types/portal';
2
2
  export declare const darkTheme: PortalThemeConfig;
3
3
  export declare const lightTheme: PortalThemeConfig;
4
4
  export declare const corporateBlueTheme: PortalThemeConfig;