@finatic/client 0.0.138 → 0.0.140

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 (40) hide show
  1. package/README.md +278 -461
  2. package/dist/index.d.ts +59 -516
  3. package/dist/index.js +337 -456
  4. package/dist/index.js.map +1 -1
  5. package/dist/index.mjs +338 -456
  6. package/dist/index.mjs.map +1 -1
  7. package/dist/types/core/client/ApiClient.d.ts +12 -26
  8. package/dist/types/core/client/FinaticConnect.d.ts +20 -103
  9. package/dist/types/index.d.ts +1 -2
  10. package/dist/types/mocks/MockApiClient.d.ts +2 -4
  11. package/dist/types/mocks/utils.d.ts +0 -5
  12. package/dist/types/types/api/auth.d.ts +12 -30
  13. package/dist/types/types/api/broker.d.ts +1 -1
  14. package/dist/types/types/connect.d.ts +4 -1
  15. package/package.json +7 -3
  16. package/src/core/client/ApiClient.ts +1721 -0
  17. package/src/core/client/FinaticConnect.ts +1476 -0
  18. package/src/core/portal/PortalUI.ts +300 -0
  19. package/src/index.d.ts +23 -0
  20. package/src/index.ts +87 -0
  21. package/src/mocks/MockApiClient.ts +1032 -0
  22. package/src/mocks/MockDataProvider.ts +986 -0
  23. package/src/mocks/MockFactory.ts +97 -0
  24. package/src/mocks/utils.ts +133 -0
  25. package/src/themes/portalPresets.ts +1307 -0
  26. package/src/types/api/auth.ts +112 -0
  27. package/src/types/api/broker.ts +330 -0
  28. package/src/types/api/core.ts +53 -0
  29. package/src/types/api/errors.ts +35 -0
  30. package/src/types/api/orders.ts +45 -0
  31. package/src/types/api/portfolio.ts +59 -0
  32. package/src/types/common/pagination.ts +138 -0
  33. package/src/types/connect.ts +56 -0
  34. package/src/types/index.ts +25 -0
  35. package/src/types/portal.ts +214 -0
  36. package/src/types/ui/theme.ts +105 -0
  37. package/src/utils/brokerUtils.ts +85 -0
  38. package/src/utils/errors.ts +104 -0
  39. package/src/utils/events.ts +54 -0
  40. package/src/utils/themeUtils.ts +146 -0
@@ -4,10 +4,9 @@ import { BrokerOrderParams, BrokerExtras } from '../../types/api/broker';
4
4
  import { CryptoOrderOptions, OptionsOrderOptions, OrderResponse } from '../../types/api/orders';
5
5
  import { BrokerConnection } from '../../types/api/broker';
6
6
  import { OrdersFilter, PositionsFilter, AccountsFilter, BalancesFilter } from '../../types/api/broker';
7
- import { TradingContext } from '../../types/api/orders';
8
7
  import { PaginatedResult } from '../../types/common/pagination';
9
8
  import { PortalUrlResponse } from '../../types/api/core';
10
- import { DeviceInfo, SessionState, TokenInfo, SessionResponse, OtpRequestResponse, OtpVerifyResponse, SessionAuthenticateResponse, UserToken } from '../../types/api/auth';
9
+ import { DeviceInfo, SessionState, SessionResponse, OtpRequestResponse, OtpVerifyResponse, SessionAuthenticateResponse, UserToken } from '../../types/api/auth';
11
10
  import { ApiError } from '../../utils/errors';
12
11
  export declare class ApiClient {
13
12
  private readonly baseUrl;
@@ -15,9 +14,6 @@ export declare class ApiClient {
15
14
  protected currentSessionState: SessionState | null;
16
15
  protected currentSessionId: string | null;
17
16
  private tradingContext;
18
- private tokenInfo;
19
- private refreshPromise;
20
- private readonly REFRESH_BUFFER_MINUTES;
21
17
  private companyId;
22
18
  private csrfToken;
23
19
  constructor(baseUrl: string, deviceInfo?: DeviceInfo);
@@ -38,33 +34,24 @@ export declare class ApiClient {
38
34
  */
39
35
  getCurrentCsrfToken(): string | null;
40
36
  /**
41
- * Store tokens after successful authentication
42
- */
43
- setTokens(accessToken: string, refreshToken: string, expiresAt: string, userId?: string): void;
44
- /**
45
- * Get the current access token, refreshing if necessary
37
+ * Get a valid access token (session-based auth - no tokens needed)
46
38
  */
47
39
  getValidAccessToken(): Promise<string>;
48
40
  /**
49
- * Check if the current token is expired or about to expire
50
- */
51
- private isTokenExpired;
52
- /**
53
- * Refresh the access token using the refresh token
54
- */
55
- private refreshTokens;
56
- /**
57
- * Perform the actual token refresh request
41
+ * Perform the actual Supabase session refresh
58
42
  */
59
- private performTokenRefresh;
60
43
  /**
61
- * Clear stored tokens (useful for logout)
44
+ * Clear session tokens (useful for logout)
62
45
  */
63
46
  clearTokens(): void;
64
47
  /**
65
- * Get current token info (for debugging/testing)
48
+ * Get current session info (for debugging/testing) - session-based auth
66
49
  */
67
- getTokenInfo(): TokenInfo | null;
50
+ getTokenInfo(): {
51
+ accessToken: string;
52
+ refreshToken: string;
53
+ expiresAt: number;
54
+ } | null;
68
55
  /**
69
56
  * Make a request to the API.
70
57
  */
@@ -98,14 +85,12 @@ export declare class ApiClient {
98
85
  orderQty: number;
99
86
  action: 'Buy' | 'Sell';
100
87
  orderType: 'Market' | 'Limit' | 'Stop' | 'StopLimit';
101
- assetType: 'Stock' | 'Option' | 'Crypto' | 'Future';
88
+ assetType: 'equity' | 'equity_option' | 'crypto' | 'forex' | 'future' | 'future_option';
102
89
  }, extras?: BrokerExtras, connection_id?: string): Promise<OrderResponse>;
103
90
  cancelBrokerOrder(orderId: string, broker?: 'robinhood' | 'tasty_trade' | 'ninja_trader', extras?: any, connection_id?: string): Promise<OrderResponse>;
104
91
  modifyBrokerOrder(orderId: string, params: Partial<BrokerOrderParams>, broker?: 'robinhood' | 'tasty_trade' | 'ninja_trader', extras?: any, connection_id?: string): Promise<OrderResponse>;
105
92
  setBroker(broker: 'robinhood' | 'tasty_trade' | 'ninja_trader'): void;
106
93
  setAccount(accountNumber: string, accountId?: string): void;
107
- getTradingContext(): TradingContext;
108
- clearTradingContext(): void;
109
94
  placeStockMarketOrder(symbol: string, orderQty: number, action: 'Buy' | 'Sell', broker?: 'robinhood' | 'tasty_trade' | 'ninja_trader', accountNumber?: string, extras?: BrokerExtras, connection_id?: string): Promise<OrderResponse>;
110
95
  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>;
111
96
  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>;
@@ -125,6 +110,7 @@ export declare class ApiClient {
125
110
  getCurrentSessionState(): SessionState | null;
126
111
  /**
127
112
  * Refresh the current session to extend its lifetime
113
+ * Note: This now uses Supabase session refresh instead of custom endpoint
128
114
  */
129
115
  refreshSession(): Promise<{
130
116
  success: boolean;
@@ -1,7 +1,7 @@
1
1
  import { EventEmitter } from '../../utils/events';
2
2
  import { PaginatedResult } from '../../types/common/pagination';
3
- import { OrderResponse, TradingContext } from '../../types/api/orders';
4
- import { BrokerBalance, BrokerInfo, BrokerConnection, OrdersFilter, PositionsFilter, AccountsFilter, BalancesFilter, BrokerDataOrder, BrokerDataPosition, BrokerDataAccount, DisconnectCompanyResponse } from '../../types/api/broker';
3
+ import { OrderResponse } from '../../types/api/orders';
4
+ import { BrokerDataOptions, BrokerBalance, BrokerInfo, BrokerOrderParams, BrokerConnection, OrdersFilter, PositionsFilter, AccountsFilter, BalancesFilter, BrokerDataOrder, BrokerDataPosition, BrokerDataAccount, DisconnectCompanyResponse } from '../../types/api/broker';
5
5
  import { FinaticConnectOptions, PortalOptions } from '../../types/connect';
6
6
  interface DeviceInfo {
7
7
  ip_address: string;
@@ -28,47 +28,41 @@ export declare class FinaticConnect extends EventEmitter {
28
28
  private readonly SESSION_REFRESH_BUFFER_HOURS;
29
29
  private sessionStartTime;
30
30
  constructor(options: FinaticConnectOptions, deviceInfo?: DeviceInfo);
31
- private handleTokens;
31
+ private linkUserToSession;
32
32
  /**
33
- * Check if the user is fully authenticated (has userId, access token, and refresh token)
34
- * @returns True if the user is fully authenticated and ready for API calls
33
+ * Store user ID for authentication state persistence
34
+ * @param userId - The user ID to store
35
35
  */
36
- isAuthed(): boolean;
36
+ private storeUserId;
37
37
  /**
38
- * Check if the client is authenticated (alias for isAuthed for consistency)
39
- * @returns True if authenticated, false otherwise
38
+ * Check if the user is fully authenticated (has userId in session context)
39
+ * @returns True if the user is fully authenticated and ready for API calls
40
40
  */
41
- is_authenticated(): boolean;
41
+ isAuthenticated(): Promise<boolean>;
42
42
  /**
43
43
  * Get user's orders with pagination and optional filtering
44
44
  * @param params - Query parameters including page, perPage, and filters
45
45
  * @returns Promise with paginated result that supports navigation
46
46
  */
47
- getOrders(params?: {
48
- page?: number;
49
- perPage?: number;
50
- filter?: OrdersFilter;
51
- }): Promise<PaginatedResult<BrokerDataOrder[]>>;
47
+ getOrders(page?: number, perPage?: number, options?: BrokerDataOptions, filters?: OrdersFilter): Promise<PaginatedResult<BrokerDataOrder[]>>;
52
48
  /**
53
49
  * Get user's positions with pagination and optional filtering
54
50
  * @param params - Query parameters including page, perPage, and filters
55
51
  * @returns Promise with paginated result that supports navigation
56
52
  */
57
- getPositions(params?: {
58
- page?: number;
59
- perPage?: number;
60
- filter?: PositionsFilter;
61
- }): Promise<PaginatedResult<BrokerDataPosition[]>>;
53
+ getPositions(page?: number, perPage?: number, options?: BrokerDataOptions, filters?: PositionsFilter): Promise<PaginatedResult<BrokerDataPosition[]>>;
62
54
  /**
63
55
  * Get user's accounts with pagination and optional filtering
64
56
  * @param params - Query parameters including page, perPage, and filters
65
57
  * @returns Promise with paginated result that supports navigation
66
58
  */
67
- getAccounts(params?: {
68
- page?: number;
69
- perPage?: number;
70
- filter?: AccountsFilter;
71
- }): Promise<PaginatedResult<BrokerDataAccount[]>>;
59
+ getAccounts(page?: number, perPage?: number, options?: BrokerDataOptions, filters?: AccountsFilter): Promise<PaginatedResult<BrokerDataAccount[]>>;
60
+ /**
61
+ * Get user's balances with pagination and optional filtering
62
+ * @param params - Query parameters including page, perPage, and filters
63
+ * @returns Promise with paginated result that supports navigation
64
+ */
65
+ getBalances(page?: number, perPage?: number, options?: BrokerDataOptions, filters?: BalancesFilter): Promise<PaginatedResult<BrokerBalance[]>>;
72
66
  /**
73
67
  * Initialize the Finatic Connect SDK
74
68
  * @param token - The portal token from your backend
@@ -88,7 +82,6 @@ export declare class FinaticConnect extends EventEmitter {
88
82
  * Get the user and tokens for a completed session
89
83
  * @returns Promise with user information and tokens
90
84
  */
91
- getSessionUser(): Promise<Record<string, any>>;
92
85
  private initializeWithUser;
93
86
  /**
94
87
  * Handle company access error by opening the portal
@@ -114,20 +107,7 @@ export declare class FinaticConnect extends EventEmitter {
114
107
  * Place a new order using the broker order API
115
108
  * @param order - Order details with broker context
116
109
  */
117
- placeOrder(order: {
118
- symbol: string;
119
- quantity: number;
120
- side: 'buy' | 'sell';
121
- orderType: 'market' | 'limit' | 'stop' | 'stop_limit';
122
- price?: number;
123
- stopPrice?: number;
124
- timeInForce: 'day' | 'gtc' | 'gtd' | 'ioc' | 'fok';
125
- broker?: 'robinhood' | 'tasty_trade' | 'ninja_trader';
126
- accountNumber?: string;
127
- assetType?: 'Stock' | 'Option' | 'Crypto' | 'Future';
128
- order_id?: string;
129
- connection_id?: string;
130
- }): Promise<OrderResponse>;
110
+ placeOrder(order: BrokerOrderParams, extras?: BrokerExtras): Promise<OrderResponse>;
131
111
  /**
132
112
  * Cancel a broker order
133
113
  * @param orderId - The order ID to cancel
@@ -152,25 +132,6 @@ export declare class FinaticConnect extends EventEmitter {
152
132
  side?: 'Buy' | 'Sell';
153
133
  order_id?: string;
154
134
  }>, broker?: 'robinhood' | 'tasty_trade' | 'ninja_trader', connection_id?: string): Promise<OrderResponse>;
155
- /**
156
- * Set the broker context for trading
157
- * @param broker - The broker to use for trading
158
- */
159
- setTradingContextBroker(broker: 'robinhood' | 'tasty_trade' | 'ninja_trader' | 'interactive_brokers' | 'tradestation'): void;
160
- /**
161
- * Set the account context for trading
162
- * @param accountNumber - The account number to use for trading
163
- * @param accountId - Optional account ID
164
- */
165
- setTradingContextAccount(accountNumber: string, accountId?: string): void;
166
- /**
167
- * Get the current trading context
168
- */
169
- getTradingContext(): TradingContext;
170
- /**
171
- * Clear the trading context
172
- */
173
- clearTradingContext(): void;
174
135
  /**
175
136
  * Place a stock market order (convenience method)
176
137
  */
@@ -212,7 +173,7 @@ export declare class FinaticConnect extends EventEmitter {
212
173
  * @returns The current user ID or undefined if not authenticated
213
174
  * @throws AuthenticationError if user is not authenticated
214
175
  */
215
- getUserId(): string | null;
176
+ getUserId(): Promise<string | null>;
216
177
  /**
217
178
  * Get list of supported brokers
218
179
  * @returns Promise with array of broker information
@@ -268,50 +229,6 @@ export declare class FinaticConnect extends EventEmitter {
268
229
  * @returns Promise with array of positions for the broker
269
230
  */
270
231
  getPositionsByBroker(brokerId: string): Promise<BrokerDataPosition[]>;
271
- /**
272
- * Get a specific page of orders with pagination metadata
273
- * @param page - Page number (default: 1)
274
- * @param perPage - Items per page (default: 100)
275
- * @param filter - Optional filter parameters
276
- * @returns Promise with paginated orders result
277
- */
278
- getOrdersPage(page?: number, perPage?: number, filter?: OrdersFilter): Promise<PaginatedResult<BrokerDataOrder[]>>;
279
- /**
280
- * Get a specific page of positions with pagination metadata
281
- * @param page - Page number (default: 1)
282
- * @param perPage - Items per page (default: 100)
283
- * @param filter - Optional filter parameters
284
- * @returns Promise with paginated positions result
285
- */
286
- getPositionsPage(page?: number, perPage?: number, filter?: PositionsFilter): Promise<PaginatedResult<BrokerDataPosition[]>>;
287
- /**
288
- * Get a specific page of accounts with pagination metadata
289
- * @param page - Page number (default: 1)
290
- * @param perPage - Items per page (default: 100)
291
- * @param filter - Optional filter parameters
292
- * @returns Promise with paginated accounts result
293
- */
294
- getAccountsPage(page?: number, perPage?: number, filter?: AccountsFilter): Promise<PaginatedResult<BrokerDataAccount[]>>;
295
- getBalancesPage(page?: number, perPage?: number, filter?: BalancesFilter): Promise<PaginatedResult<BrokerBalance[]>>;
296
- /**
297
- * Get the next page of orders
298
- * @param previousResult - The previous paginated result
299
- * @returns Promise with next page of orders or null if no more pages
300
- */
301
- getNextOrdersPage(previousResult: PaginatedResult<BrokerDataOrder[]>): Promise<PaginatedResult<BrokerDataOrder[]> | null>;
302
- /**
303
- * Get the next page of positions
304
- * @param previousResult - The previous paginated result
305
- * @returns Promise with next page of positions or null if no more pages
306
- */
307
- getNextPositionsPage(previousResult: PaginatedResult<BrokerDataPosition[]>): Promise<PaginatedResult<BrokerDataPosition[]> | null>;
308
- /**
309
- * Get the next page of accounts
310
- * @param previousResult - The previous paginated result
311
- * @returns Promise with next page of accounts or null if no more pages
312
- */
313
- getNextAccountsPage(previousResult: PaginatedResult<BrokerDataAccount[]>): Promise<PaginatedResult<BrokerDataAccount[]> | null>;
314
- getNextBalancesPage(previousResult: PaginatedResult<BrokerBalance[]>): Promise<PaginatedResult<BrokerBalance[]> | null>;
315
232
  /**
316
233
  * Get all orders across all pages (convenience method)
317
234
  * @param filter - Optional filter parameters
@@ -1,4 +1,4 @@
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, BrokerBalance, BrokerDataOptions, BrokerInfo, TokenInfo, RefreshTokenRequest, RefreshTokenResponse, AccountsFilter, OrdersFilter, PositionsFilter, BalancesFilter, BrokerDataOrder, BrokerDataPosition, BrokerDataAccount, FilteredOrdersResponse, FilteredPositionsResponse, FilteredAccountsResponse, FilteredBalancesResponse, BrokerConnection, } from './types';
1
+ export type { ApiConfig, ApiResponse, Order, OptionsOrder, BrokerAccount, PortfolioSnapshot, PerformanceMetrics, UserToken, Holding, Portfolio, PortalResponse, SessionInitResponse, SessionResponse, OtpRequestResponse, OtpVerifyResponse, PortalUrlResponse, SessionValidationResponse, SessionAuthenticateResponse, RequestHeaders, SessionStatus, BrokerOrderParams, BrokerExtras, CryptoOrderOptions, OptionsOrderOptions, OrderResponse, TradingContext, DeviceInfo, BrokerOrder, BrokerPosition, BrokerBalance, BrokerDataOptions, BrokerInfo, TokenInfo, RefreshTokenRequest, RefreshTokenResponse, AccountsFilter, OrdersFilter, PositionsFilter, BalancesFilter, BrokerDataOrder, BrokerDataPosition, BrokerDataAccount, FilteredOrdersResponse, FilteredPositionsResponse, FilteredAccountsResponse, FilteredBalancesResponse, BrokerConnection, } from './types';
2
2
  export type { FinaticConnectOptions, FinaticUserToken, PortalMessage } from './types/connect';
3
3
  export type { PortalProps, PortalTheme, PortalThemeConfig, PortalThemePreset, } from './types/portal';
4
4
  export type { TradeAccessDeniedError, OrderNotFoundError, ValidationError, } from './types/api/errors';
@@ -9,4 +9,3 @@ export * from './utils/errors';
9
9
  export * from './utils/events';
10
10
  export * from './utils/themeUtils';
11
11
  export { portalThemePresets } from './themes/portalPresets';
12
- export { MockFactory } from './mocks/MockFactory';
@@ -1,4 +1,4 @@
1
- import { SessionResponse, OtpRequestResponse, OtpVerifyResponse, PortalUrlResponse, SessionValidationResponse, SessionAuthenticateResponse, UserToken, Order, BrokerInfo, BrokerAccount, BrokerOrder, BrokerPosition, BrokerBalance, BrokerConnection, BrokerDataOptions, BrokerOrderParams, BrokerExtras, CryptoOrderOptions, OptionsOrderOptions, OrderResponse, TradingContext, OrdersFilter, PositionsFilter, AccountsFilter, BalancesFilter, BrokerDataOrder, BrokerDataPosition, DisconnectCompanyResponse } from '../types';
1
+ import { SessionResponse, OtpRequestResponse, OtpVerifyResponse, PortalUrlResponse, SessionValidationResponse, SessionAuthenticateResponse, UserToken, Order, BrokerInfo, BrokerAccount, BrokerOrder, BrokerPosition, BrokerBalance, BrokerConnection, BrokerDataOptions, BrokerOrderParams, BrokerExtras, CryptoOrderOptions, OptionsOrderOptions, OrderResponse, OrdersFilter, PositionsFilter, AccountsFilter, BalancesFilter, BrokerDataOrder, BrokerDataPosition, DisconnectCompanyResponse } from '../types';
2
2
  import { PaginatedResult } from '../types';
3
3
  import { DeviceInfo, SessionState, TokenInfo } from '../types/api/auth';
4
4
  import { MockDataProvider, MockConfig } from './MockDataProvider';
@@ -80,14 +80,12 @@ export declare class MockApiClient {
80
80
  orderQty: number;
81
81
  action: 'Buy' | 'Sell';
82
82
  orderType: 'Market' | 'Limit' | 'Stop' | 'StopLimit';
83
- assetType: 'Stock' | 'Option' | 'Crypto' | 'Future';
83
+ assetType: 'equity' | 'equity_option' | 'crypto' | 'forex' | 'future' | 'future_option';
84
84
  }, extras?: BrokerExtras, connection_id?: string): Promise<OrderResponse>;
85
85
  cancelBrokerOrder(orderId: string, broker?: 'robinhood' | 'tasty_trade' | 'ninja_trader', extras?: any, connection_id?: string): Promise<OrderResponse>;
86
86
  modifyBrokerOrder(orderId: string, params: Partial<BrokerOrderParams>, broker?: 'robinhood' | 'tasty_trade' | 'ninja_trader', extras?: any, connection_id?: string): Promise<OrderResponse>;
87
87
  setBroker(broker: 'robinhood' | 'tasty_trade' | 'ninja_trader'): void;
88
88
  setAccount(accountNumber: string, accountId?: string): void;
89
- getTradingContext(): TradingContext;
90
- clearTradingContext(): void;
91
89
  placeStockMarketOrder(symbol: string, orderQty: number, action: 'Buy' | 'Sell', broker?: 'robinhood' | 'tasty_trade' | 'ninja_trader', accountNumber?: string, extras?: BrokerExtras): Promise<OrderResponse>;
92
90
  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>;
93
91
  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>;
@@ -1,11 +1,6 @@
1
1
  /**
2
2
  * Utility functions for mock system environment detection
3
3
  */
4
- declare global {
5
- var process: {
6
- env: Record<string, string | undefined>;
7
- } | undefined;
8
- }
9
4
  /**
10
5
  * Check if mocks should be used based on environment variables
11
6
  * Supports both browser and Node.js environments
@@ -9,16 +9,6 @@ export interface SessionInitResponse {
9
9
  expires_at: string;
10
10
  };
11
11
  }
12
- export interface SessionResponseData {
13
- session_id: string;
14
- company_id: string;
15
- status: 'pending';
16
- expires_at: string;
17
- }
18
- export interface SessionStartResponse {
19
- data: SessionResponseData;
20
- message: 'Session started successfully';
21
- }
22
12
  export interface OtpRequestResponse {
23
13
  success: boolean;
24
14
  message: string;
@@ -37,17 +27,14 @@ export interface OtpVerifyResponse {
37
27
  };
38
28
  }
39
29
  export interface UserToken {
40
- accessToken: string;
41
- refreshToken: string;
42
- expiresIn: number;
43
30
  user_id: string;
44
- tokenType: string;
45
- scope: string;
46
31
  }
47
32
  export interface SessionValidationResponse {
48
33
  valid: boolean;
49
34
  company_id: string;
50
35
  status: string;
36
+ is_sandbox: boolean;
37
+ environment: string;
51
38
  }
52
39
  export interface SessionAuthenticateResponse {
53
40
  success: boolean;
@@ -78,23 +65,18 @@ export interface TokenInfo {
78
65
  expiresAt: string;
79
66
  userId?: string;
80
67
  }
68
+ export interface SessionResponseData {
69
+ session_id: string;
70
+ company_id: string;
71
+ status: string;
72
+ expires_at: string;
73
+ user_id?: string | null;
74
+ auto_login?: boolean;
75
+ }
81
76
  export interface SessionResponse {
82
- data: {
83
- session_id: string;
84
- state: SessionState;
85
- device_info?: Record<string, string>;
86
- company_id?: string;
87
- status?: string;
88
- expires_at?: string;
89
- user_id?: string | null;
90
- auto_login?: boolean;
91
- access_token?: string;
92
- refresh_token?: string;
93
- expires_in?: number;
94
- token_type?: string;
95
- scope?: string;
96
- };
77
+ success: boolean;
97
78
  message: string;
79
+ data: SessionResponseData;
98
80
  }
99
81
  export declare enum SessionState {
100
82
  PENDING = "PENDING",
@@ -109,7 +109,7 @@ export interface BrokerOrderParams {
109
109
  broker: 'robinhood' | 'tasty_trade' | 'ninja_trader';
110
110
  order_id?: string;
111
111
  orderType: 'Market' | 'Limit' | 'Stop' | 'StopLimit';
112
- assetType: 'Stock' | 'Option' | 'Crypto' | 'Future';
112
+ assetType: 'equity' | 'equity_option' | 'crypto' | 'forex' | 'future' | 'future_option';
113
113
  action: 'Buy' | 'Sell';
114
114
  timeInForce: 'day' | 'gtc' | 'gtd' | 'ioc' | 'fok';
115
115
  accountNumber: string | number;
@@ -39,7 +39,10 @@ export interface PortalMessage {
39
39
  }
40
40
  export interface PortalOptions {
41
41
  /** Callback when user successfully connects */
42
- onSuccess?: (userId: string) => void;
42
+ onSuccess?: (userId: string, tokens?: {
43
+ access_token?: string;
44
+ refresh_token?: string;
45
+ }) => void;
43
46
  /** Callback when an error occurs */
44
47
  onError?: (error: Error) => void;
45
48
  /** Callback when the portal is closed */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@finatic/client",
3
- "version": "0.0.138",
3
+ "version": "0.0.140",
4
4
  "description": "Finatic Client SDK for browser integration",
5
5
  "type": "module",
6
6
  "publishConfig": {
@@ -8,18 +8,22 @@
8
8
  },
9
9
  "main": "./dist/index.js",
10
10
  "module": "./dist/index.mjs",
11
- "types": "./dist/types/index.d.ts",
11
+ "types": "./dist/index.d.ts",
12
12
  "exports": {
13
13
  ".": {
14
14
  "import": "./dist/index.mjs",
15
15
  "require": "./dist/index.js",
16
- "types": "./dist/types/index.d.ts"
16
+ "types": "./dist/index.d.ts"
17
17
  }
18
18
  },
19
19
  "engines": {
20
20
  "node": ">=16.0.0"
21
21
  },
22
+ "workspaces": [
23
+ "demo-app"
24
+ ],
22
25
  "files": [
26
+ "src",
23
27
  "dist"
24
28
  ],
25
29
  "scripts": {