@finatic/client 0.0.136 → 0.0.137

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.
@@ -1,14 +1,13 @@
1
- import { Holding, Portfolio } from '../../types/api/portfolio';
2
1
  import { Order } from '../../types/api/orders';
3
- import { BrokerInfo, BrokerAccount, BrokerOrder, BrokerPosition, BrokerDataOptions, DisconnectCompanyResponse } from '../../types/api/broker';
2
+ import { BrokerInfo, BrokerAccount, BrokerOrder, BrokerPosition, BrokerBalance, BrokerDataOptions, DisconnectCompanyResponse } from '../../types/api/broker';
4
3
  import { BrokerOrderParams, BrokerExtras } from '../../types/api/broker';
5
4
  import { CryptoOrderOptions, OptionsOrderOptions, OrderResponse } from '../../types/api/orders';
6
5
  import { BrokerConnection } from '../../types/api/broker';
7
- import { OrdersFilter, PositionsFilter, AccountsFilter } from '../../types/api/broker';
6
+ import { OrdersFilter, PositionsFilter, AccountsFilter, BalancesFilter } from '../../types/api/broker';
8
7
  import { TradingContext } from '../../types/api/orders';
9
8
  import { PaginatedResult } from '../../types/common/pagination';
10
9
  import { PortalUrlResponse } from '../../types/api/core';
11
- import { DeviceInfo, SessionState, TokenInfo, SessionResponse, OtpRequestResponse, OtpVerifyResponse, SessionValidationResponse, SessionAuthenticateResponse, UserToken } from '../../types/api/auth';
10
+ import { DeviceInfo, SessionState, TokenInfo, SessionResponse, OtpRequestResponse, OtpVerifyResponse, SessionAuthenticateResponse, UserToken } from '../../types/api/auth';
12
11
  import { ApiError } from '../../utils/errors';
13
12
  export declare class ApiClient {
14
13
  private readonly baseUrl;
@@ -90,17 +89,10 @@ export declare class ApiClient {
90
89
  * @throws SessionError if session is not in ACTIVE state
91
90
  */
92
91
  getPortalUrl(sessionId: string): Promise<PortalUrlResponse>;
93
- validatePortalSession(sessionId: string, signature: string): Promise<SessionValidationResponse>;
94
92
  completePortalSession(sessionId: string): Promise<PortalUrlResponse>;
95
- getHoldings(): Promise<{
96
- data: Holding[];
97
- }>;
98
93
  getOrders(): Promise<{
99
94
  data: Order[];
100
95
  }>;
101
- getPortfolio(): Promise<{
102
- data: Portfolio;
103
- }>;
104
96
  placeBrokerOrder(params: Partial<BrokerOrderParams> & {
105
97
  symbol: string;
106
98
  orderQty: number;
@@ -126,8 +118,7 @@ export declare class ApiClient {
126
118
  private buildOrderRequestBody;
127
119
  private buildModifyRequestBody;
128
120
  private applyBrokerDefaults;
129
- revokeToken(): Promise<void>;
130
- getUserToken(userId: string): Promise<UserToken>;
121
+ getUserToken(sessionId: string): Promise<UserToken>;
131
122
  /**
132
123
  * Get the current session state
133
124
  */
@@ -180,6 +171,14 @@ export declare class ApiClient {
180
171
  warnings: null;
181
172
  errors: null;
182
173
  }>;
174
+ getBrokerBalances(options?: BrokerDataOptions): Promise<{
175
+ _id: string;
176
+ response_data: BrokerBalance[];
177
+ message: string;
178
+ status_code: number;
179
+ warnings: null;
180
+ errors: null;
181
+ }>;
183
182
  getBrokerConnections(): Promise<{
184
183
  _id: string;
185
184
  response_data: BrokerConnection[];
@@ -188,9 +187,18 @@ export declare class ApiClient {
188
187
  warnings: null;
189
188
  errors: null;
190
189
  }>;
190
+ getBalances(filters?: any): Promise<{
191
+ _id: string;
192
+ response_data: any[];
193
+ message: string;
194
+ status_code: number;
195
+ warnings: null;
196
+ errors: null;
197
+ }>;
191
198
  getBrokerOrdersPage(page?: number, perPage?: number, filters?: OrdersFilter): Promise<PaginatedResult<BrokerOrder[]>>;
192
199
  getBrokerAccountsPage(page?: number, perPage?: number, filters?: AccountsFilter): Promise<PaginatedResult<BrokerAccount[]>>;
193
200
  getBrokerPositionsPage(page?: number, perPage?: number, filters?: PositionsFilter): Promise<PaginatedResult<BrokerPosition[]>>;
201
+ getBrokerBalancesPage(page?: number, perPage?: number, filters?: BalancesFilter): Promise<PaginatedResult<BrokerBalance[]>>;
194
202
  getNextPage<T>(previousResult: PaginatedResult<T>, fetchFunction: (offset: number, limit: number) => Promise<PaginatedResult<T>>): Promise<PaginatedResult<T> | null>;
195
203
  /**
196
204
  * Check if this is a mock client
@@ -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 { BrokerInfo, BrokerConnection, OrdersFilter, PositionsFilter, AccountsFilter, BrokerDataOrder, BrokerDataPosition, BrokerDataAccount, DisconnectCompanyResponse } from '../../types/api/broker';
3
+ import { OrderResponse } from '../../types/api/orders';
4
+ import { BrokerBalance, BrokerInfo, 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;
@@ -34,6 +34,11 @@ export declare class FinaticConnect extends EventEmitter {
34
34
  * @returns True if the user is fully authenticated and ready for API calls
35
35
  */
36
36
  isAuthed(): boolean;
37
+ /**
38
+ * Check if the client is authenticated (alias for isAuthed for consistency)
39
+ * @returns True if authenticated, false otherwise
40
+ */
41
+ is_authenticated(): boolean;
37
42
  /**
38
43
  * Get user's orders with pagination and optional filtering
39
44
  * @param params - Query parameters including page, perPage, and filters
@@ -64,10 +69,6 @@ export declare class FinaticConnect extends EventEmitter {
64
69
  perPage?: number;
65
70
  filter?: AccountsFilter;
66
71
  }): Promise<PaginatedResult<BrokerDataAccount[]>>;
67
- /**
68
- * Revoke the current user's access
69
- */
70
- revokeToken(): Promise<void>;
71
72
  /**
72
73
  * Initialize the Finatic Connect SDK
73
74
  * @param token - The portal token from your backend
@@ -83,6 +84,11 @@ export declare class FinaticConnect extends EventEmitter {
83
84
  * @param userId - The user ID from a previous session
84
85
  */
85
86
  setUserId(userId: string): Promise<void>;
87
+ /**
88
+ * Get the user and tokens for a completed session
89
+ * @returns Promise with user information and tokens
90
+ */
91
+ getSessionUser(): Promise<Record<string, any>>;
86
92
  private initializeWithUser;
87
93
  /**
88
94
  * Handle company access error by opening the portal
@@ -147,32 +153,41 @@ export declare class FinaticConnect extends EventEmitter {
147
153
  order_id?: string;
148
154
  }>, broker?: 'robinhood' | 'tasty_trade' | 'ninja_trader', connection_id?: string): Promise<OrderResponse>;
149
155
  /**
150
- * Set the broker context for trading
151
- * @param broker - The broker to use for trading
156
+ * Place a stock market order (convenience method)
157
+ */
158
+ placeStockMarketOrder(symbol: string, quantity: number, side: 'buy' | 'sell', broker?: 'robinhood' | 'tasty_trade' | 'ninja_trader', accountNumber?: string): Promise<OrderResponse>;
159
+ /**
160
+ * Place a stock limit order (convenience method)
152
161
  */
153
- setBroker(broker: 'robinhood' | 'tasty_trade' | 'ninja_trader'): void;
162
+ placeStockLimitOrder(symbol: string, quantity: number, side: 'buy' | 'sell', price: number, timeInForce?: 'day' | 'gtc', broker?: 'robinhood' | 'tasty_trade' | 'ninja_trader', accountNumber?: string): Promise<OrderResponse>;
154
163
  /**
155
- * Set the account context for trading
156
- * @param accountNumber - The account number to use for trading
157
- * @param accountId - Optional account ID
164
+ * Place a stock stop order (convenience method)
158
165
  */
159
- setAccount(accountNumber: string, accountId?: string): void;
166
+ placeStockStopOrder(symbol: string, quantity: number, side: 'buy' | 'sell', stopPrice: number, timeInForce?: 'day' | 'gtc', broker?: 'robinhood' | 'tasty_trade' | 'ninja_trader', accountNumber?: string): Promise<OrderResponse>;
160
167
  /**
161
- * Get the current trading context
168
+ * Place a crypto market order (convenience method)
162
169
  */
163
- getTradingContext(): TradingContext;
170
+ placeCryptoMarketOrder(symbol: string, quantity: number, side: 'buy' | 'sell', broker?: 'coinbase' | 'binance' | 'kraken', accountNumber?: string): Promise<OrderResponse>;
164
171
  /**
165
- * Clear the trading context
172
+ * Place a crypto limit order (convenience method)
166
173
  */
167
- clearTradingContext(): void;
174
+ placeCryptoLimitOrder(symbol: string, quantity: number, side: 'buy' | 'sell', price: number, timeInForce?: 'day' | 'gtc', broker?: 'coinbase' | 'binance' | 'kraken', accountNumber?: string): Promise<OrderResponse>;
168
175
  /**
169
- * Place a stock market order (convenience method)
176
+ * Place an options market order (convenience method)
170
177
  */
171
- placeStockMarketOrder(symbol: string, quantity: number, side: 'buy' | 'sell', broker?: 'robinhood' | 'tasty_trade' | 'ninja_trader', accountNumber?: string): Promise<OrderResponse>;
178
+ placeOptionsMarketOrder(symbol: string, quantity: number, side: 'buy' | 'sell', broker?: 'tasty_trade' | 'robinhood' | 'ninja_trader', accountNumber?: string): Promise<OrderResponse>;
172
179
  /**
173
- * Place a stock limit order (convenience method)
180
+ * Place an options limit order (convenience method)
174
181
  */
175
- placeStockLimitOrder(symbol: string, quantity: number, side: 'buy' | 'sell', price: number, timeInForce?: 'day' | 'gtc', broker?: 'robinhood' | 'tasty_trade' | 'ninja_trader', accountNumber?: string): Promise<OrderResponse>;
182
+ placeOptionsLimitOrder(symbol: string, quantity: number, side: 'buy' | 'sell', price: number, timeInForce?: 'day' | 'gtc', broker?: 'tasty_trade' | 'robinhood' | 'ninja_trader', accountNumber?: string): Promise<OrderResponse>;
183
+ /**
184
+ * Place a futures market order (convenience method)
185
+ */
186
+ placeFuturesMarketOrder(symbol: string, quantity: number, side: 'buy' | 'sell', broker?: 'ninja_trader' | 'tasty_trade', accountNumber?: string): Promise<OrderResponse>;
187
+ /**
188
+ * Place a futures limit order (convenience method)
189
+ */
190
+ placeFuturesLimitOrder(symbol: string, quantity: number, side: 'buy' | 'sell', price: number, timeInForce?: 'day' | 'gtc', broker?: 'ninja_trader' | 'tasty_trade', accountNumber?: string): Promise<OrderResponse>;
176
191
  /**
177
192
  * Get the current user ID
178
193
  * @returns The current user ID or undefined if not authenticated
@@ -258,6 +273,7 @@ export declare class FinaticConnect extends EventEmitter {
258
273
  * @returns Promise with paginated accounts result
259
274
  */
260
275
  getAccountsPage(page?: number, perPage?: number, filter?: AccountsFilter): Promise<PaginatedResult<BrokerDataAccount[]>>;
276
+ getBalancesPage(page?: number, perPage?: number, filter?: BalancesFilter): Promise<PaginatedResult<BrokerBalance[]>>;
261
277
  /**
262
278
  * Get the next page of orders
263
279
  * @param previousResult - The previous paginated result
@@ -276,6 +292,7 @@ export declare class FinaticConnect extends EventEmitter {
276
292
  * @returns Promise with next page of accounts or null if no more pages
277
293
  */
278
294
  getNextAccountsPage(previousResult: PaginatedResult<BrokerDataAccount[]>): Promise<PaginatedResult<BrokerDataAccount[]> | null>;
295
+ getNextBalancesPage(previousResult: PaginatedResult<BrokerBalance[]>): Promise<PaginatedResult<BrokerBalance[]> | null>;
279
296
  /**
280
297
  * Get all orders across all pages (convenience method)
281
298
  * @param filter - Optional filter parameters
@@ -294,6 +311,7 @@ export declare class FinaticConnect extends EventEmitter {
294
311
  * @returns Promise with all accounts
295
312
  */
296
313
  getAllAccounts(filter?: AccountsFilter): Promise<BrokerDataAccount[]>;
314
+ getAllBalances(filter?: BalancesFilter): Promise<BrokerBalance[]>;
297
315
  /**
298
316
  * Register session management (but don't auto-cleanup for 24-hour sessions)
299
317
  */
@@ -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, BrokerDataOptions, BrokerInfo, TokenInfo, RefreshTokenRequest, RefreshTokenResponse, AccountsFilter, OrdersFilter, PositionsFilter, BrokerDataOrder, BrokerDataPosition, BrokerDataAccount, FilteredOrdersResponse, FilteredPositionsResponse, FilteredAccountsResponse, BrokerConnection, } from './types';
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';
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';
@@ -1,4 +1,4 @@
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';
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';
2
2
  import { PaginatedResult } from '../types';
3
3
  import { DeviceInfo, SessionState, TokenInfo } from '../types/api/auth';
4
4
  import { MockDataProvider, MockConfig } from './MockDataProvider';
@@ -71,15 +71,9 @@ 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(filter?: OrdersFilter): Promise<{
75
- data: Holding[];
76
- }>;
77
74
  getOrders(filter?: OrdersFilter): Promise<{
78
75
  data: Order[];
79
76
  }>;
80
- getPortfolio(): Promise<{
81
- data: Portfolio;
82
- }>;
83
77
  placeOrder(order: BrokerOrderParams): Promise<void>;
84
78
  placeBrokerOrder(params: Partial<BrokerOrderParams> & {
85
79
  symbol: string;
@@ -103,8 +97,7 @@ export declare class MockApiClient {
103
97
  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
98
  placeFuturesMarketOrder(symbol: string, orderQty: number, action: 'Buy' | 'Sell', broker?: 'robinhood' | 'tasty_trade' | 'ninja_trader', accountNumber?: string, extras?: BrokerExtras): Promise<OrderResponse>;
105
99
  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>;
106
- revokeToken(accessToken: string): Promise<void>;
107
- getUserToken(userId: string): Promise<UserToken>;
100
+ getUserToken(sessionId: string): Promise<UserToken>;
108
101
  getCurrentSessionState(): SessionState | null;
109
102
  getBrokerList(): Promise<{
110
103
  _id: string;
@@ -144,12 +137,16 @@ export declare class MockApiClient {
144
137
  getBrokerPositionsWithFilter(filter?: PositionsFilter): Promise<{
145
138
  data: BrokerDataPosition[];
146
139
  }>;
140
+ getBrokerBalancesWithFilter(filter?: BalancesFilter): Promise<{
141
+ data: BrokerBalance[];
142
+ }>;
147
143
  getBrokerDataAccountsWithFilter(filter?: AccountsFilter): Promise<{
148
144
  data: BrokerAccount[];
149
145
  }>;
150
146
  getBrokerOrdersPage(page?: number, perPage?: number, filters?: OrdersFilter): Promise<PaginatedResult<BrokerDataOrder[]>>;
151
147
  getBrokerAccountsPage(page?: number, perPage?: number, filters?: AccountsFilter): Promise<PaginatedResult<BrokerAccount[]>>;
152
148
  getBrokerPositionsPage(page?: number, perPage?: number, filters?: PositionsFilter): Promise<PaginatedResult<BrokerDataPosition[]>>;
149
+ getBrokerBalancesPage(page?: number, perPage?: number, filters?: BalancesFilter): Promise<PaginatedResult<BrokerBalance[]>>;
153
150
  getBrokerConnections(): Promise<{
154
151
  _id: string;
155
152
  response_data: BrokerConnection[];
@@ -1,6 +1,5 @@
1
- import { Holding, Portfolio } from '../types/api/portfolio';
2
1
  import { Order, OrderResponse } from '../types/api/orders';
3
- import { BrokerInfo, BrokerAccount, BrokerConnection, OrdersFilter, PositionsFilter, AccountsFilter, BrokerDataOrder, BrokerDataPosition, BrokerOrderParams, DisconnectCompanyResponse } from '../types/api/broker';
2
+ import { BrokerInfo, BrokerAccount, BrokerBalance, BrokerConnection, OrdersFilter, PositionsFilter, AccountsFilter, BalancesFilter, BrokerDataOrder, BrokerDataPosition, BrokerOrderParams, DisconnectCompanyResponse } from '../types/api/broker';
4
3
  import { SessionResponse, OtpRequestResponse, OtpVerifyResponse, SessionValidationResponse, SessionAuthenticateResponse, UserToken, RefreshTokenResponse } from '../types/api/auth';
5
4
  import { PortalUrlResponse } from '../types/api/core';
6
5
  /**
@@ -80,12 +79,6 @@ export declare class MockDataProvider {
80
79
  warnings: null;
81
80
  errors: null;
82
81
  }>;
83
- mockGetHoldings(): Promise<{
84
- data: Holding[];
85
- }>;
86
- mockGetPortfolio(): Promise<{
87
- data: Portfolio;
88
- }>;
89
82
  mockGetOrders(filter?: OrdersFilter): Promise<{
90
83
  data: Order[];
91
84
  }>;
@@ -95,6 +88,9 @@ export declare class MockDataProvider {
95
88
  mockGetBrokerPositions(filter?: PositionsFilter): Promise<{
96
89
  data: BrokerDataPosition[];
97
90
  }>;
91
+ mockGetBrokerBalances(filter?: BalancesFilter): Promise<{
92
+ data: BrokerBalance[];
93
+ }>;
98
94
  mockGetBrokerDataAccounts(filter?: AccountsFilter): Promise<{
99
95
  data: BrokerAccount[];
100
96
  }>;
@@ -106,7 +102,7 @@ export declare class MockDataProvider {
106
102
  /**
107
103
  * Get stored user token
108
104
  */
109
- getUserToken(userId: string): UserToken | undefined;
105
+ getUserToken(sessionId: string): UserToken | undefined;
110
106
  /**
111
107
  * Clear all stored data
112
108
  */
@@ -121,6 +117,7 @@ export declare class MockDataProvider {
121
117
  private applyBrokerOrderFilters;
122
118
  private applyBrokerPositionFilters;
123
119
  private applyBrokerAccountFilters;
120
+ private applyBrokerBalanceFilters;
124
121
  /**
125
122
  * Generate mock orders with diverse data
126
123
  */
@@ -17,6 +17,18 @@ export interface BrokerAccount {
17
17
  updated_at: string;
18
18
  /** ISO 8601 timestamp with timezone information */
19
19
  last_synced_at: string;
20
+ /** ISO 8601 timestamp with timezone information - when positions were last synced */
21
+ positions_synced_at: string | null;
22
+ /** ISO 8601 timestamp with timezone information - when orders were last synced */
23
+ orders_synced_at: string | null;
24
+ /** ISO 8601 timestamp with timezone information - when balances were last synced */
25
+ balances_synced_at: string | null;
26
+ /** ISO 8601 timestamp with timezone information - when the account was created */
27
+ account_created_at: string | null;
28
+ /** ISO 8601 timestamp with timezone information - when the account was last updated */
29
+ account_updated_at: string | null;
30
+ /** ISO 8601 timestamp with timezone information - when the first trade occurred */
31
+ account_first_trade_at: string | null;
20
32
  }
21
33
  export interface BrokerOrder {
22
34
  id: string;
@@ -59,6 +71,24 @@ export interface BrokerPosition {
59
71
  /** ISO 8601 timestamp with timezone information */
60
72
  updated_at: string;
61
73
  }
74
+ export interface BrokerBalance {
75
+ id: string;
76
+ account_id: string;
77
+ total_cash_value: number | null;
78
+ net_liquidation_value: number | null;
79
+ initial_margin: number | null;
80
+ maintenance_margin: number | null;
81
+ available_to_withdraw: number | null;
82
+ total_realized_pnl: number | null;
83
+ balance_created_at: string | null;
84
+ balance_updated_at: string | null;
85
+ is_end_of_day_snapshot: boolean | null;
86
+ raw_payload: any | null;
87
+ /** ISO 8601 timestamp with timezone information */
88
+ created_at: string;
89
+ /** ISO 8601 timestamp with timezone information */
90
+ updated_at: string;
91
+ }
62
92
  export interface BrokerDataOptions {
63
93
  broker_name?: string;
64
94
  account_id?: string;
@@ -227,6 +257,17 @@ export interface AccountsFilter {
227
257
  offset?: number;
228
258
  with_metadata?: boolean;
229
259
  }
260
+ export interface BalancesFilter {
261
+ broker_id?: string;
262
+ connection_id?: string;
263
+ account_id?: string;
264
+ is_end_of_day_snapshot?: boolean;
265
+ limit?: number;
266
+ offset?: number;
267
+ balance_created_after?: string;
268
+ balance_created_before?: string;
269
+ with_metadata?: boolean;
270
+ }
230
271
  export interface FilteredOrdersResponse {
231
272
  orders: BrokerDataOrder[];
232
273
  total: number;
@@ -245,6 +286,12 @@ export interface FilteredAccountsResponse {
245
286
  limit: number;
246
287
  offset: number;
247
288
  }
289
+ export interface FilteredBalancesResponse {
290
+ balances: BrokerBalance[];
291
+ total: number;
292
+ limit: number;
293
+ offset: number;
294
+ }
248
295
  export interface DisconnectCompanyResponse {
249
296
  success: boolean;
250
297
  response_data: {
@@ -50,4 +50,6 @@ export interface PortalOptions {
50
50
  theme?: PortalTheme;
51
51
  /** Optional list of broker names to filter by (only these brokers will be shown) */
52
52
  brokers?: string[];
53
+ /** Optional email address to prefill in the portal */
54
+ email?: string;
53
55
  }
@@ -5,62 +5,191 @@ export interface PortalConfig {
5
5
  zIndex?: number;
6
6
  }
7
7
  export interface PortalThemeConfig {
8
- mode: 'dark' | 'light' | 'auto';
9
- colors: {
10
- background: {
11
- primary: string;
12
- secondary: string;
13
- tertiary: string;
14
- accent: string;
15
- glass: string;
16
- };
17
- status: {
18
- connected: string;
19
- disconnected: string;
20
- warning: string;
21
- pending: string;
22
- error: string;
23
- success: string;
24
- };
25
- text: {
26
- primary: string;
27
- secondary: string;
28
- muted: string;
29
- inverse: string;
30
- };
31
- border: {
32
- primary: string;
33
- secondary: string;
34
- hover: string;
35
- focus: string;
36
- accent: string;
37
- };
38
- input: {
39
- background: string;
40
- border: string;
41
- borderFocus: string;
42
- text: string;
43
- placeholder: string;
44
- };
45
- button: {
46
- primary: {
47
- background: string;
48
- text: string;
49
- hover: string;
50
- active: string;
8
+ mode?: 'dark' | 'light' | 'auto';
9
+ colors?: {
10
+ background?: {
11
+ primary?: string;
12
+ secondary?: string;
13
+ tertiary?: string;
14
+ accent?: string;
15
+ glass?: string;
16
+ };
17
+ status?: {
18
+ connected?: string;
19
+ disconnected?: string;
20
+ warning?: string;
21
+ pending?: string;
22
+ error?: string;
23
+ success?: string;
24
+ };
25
+ text?: {
26
+ primary?: string;
27
+ secondary?: string;
28
+ muted?: string;
29
+ inverse?: string;
30
+ };
31
+ border?: {
32
+ primary?: string;
33
+ secondary?: string;
34
+ hover?: string;
35
+ focus?: string;
36
+ accent?: string;
37
+ };
38
+ input?: {
39
+ background?: string;
40
+ border?: string;
41
+ borderFocus?: string;
42
+ text?: string;
43
+ placeholder?: string;
44
+ };
45
+ button?: {
46
+ primary?: {
47
+ background?: string;
48
+ text?: string;
49
+ hover?: string;
50
+ active?: string;
51
+ };
52
+ secondary?: {
53
+ background?: string;
54
+ text?: string;
55
+ border?: string;
56
+ hover?: string;
57
+ active?: string;
58
+ };
59
+ };
60
+ };
61
+ typography?: {
62
+ fontFamily?: {
63
+ primary?: string;
64
+ secondary?: string;
65
+ };
66
+ fontSize?: {
67
+ xs?: string;
68
+ sm?: string;
69
+ base?: string;
70
+ lg?: string;
71
+ xl?: string;
72
+ '2xl'?: string;
73
+ '3xl'?: string;
74
+ '4xl'?: string;
75
+ };
76
+ fontWeight?: {
77
+ normal?: number;
78
+ medium?: number;
79
+ semibold?: number;
80
+ bold?: number;
81
+ extrabold?: number;
82
+ };
83
+ lineHeight?: {
84
+ tight?: string;
85
+ normal?: string;
86
+ relaxed?: string;
87
+ };
88
+ };
89
+ spacing?: {
90
+ xs?: string;
91
+ sm?: string;
92
+ md?: string;
93
+ lg?: string;
94
+ xl?: string;
95
+ '2xl'?: string;
96
+ '3xl'?: string;
97
+ };
98
+ layout?: {
99
+ containerMaxWidth?: string;
100
+ gridGap?: string;
101
+ cardPadding?: string;
102
+ borderRadius?: {
103
+ sm?: string;
104
+ md?: string;
105
+ lg?: string;
106
+ xl?: string;
107
+ '2xl'?: string;
108
+ full?: string;
109
+ };
110
+ };
111
+ components?: {
112
+ brokerCard?: {
113
+ width?: string;
114
+ height?: string;
115
+ logoSize?: string;
116
+ padding?: string;
117
+ };
118
+ statusIndicator?: {
119
+ size?: string;
120
+ glowIntensity?: number;
121
+ };
122
+ modal?: {
123
+ background?: string;
124
+ backdrop?: string;
125
+ };
126
+ brokerCardModern?: {
127
+ width?: string;
128
+ height?: string;
129
+ padding?: string;
130
+ logoSize?: string;
131
+ statusSize?: string;
132
+ };
133
+ connectButton?: {
134
+ width?: string;
135
+ height?: string;
136
+ };
137
+ themeSwitcher?: {
138
+ indicatorSize?: string;
139
+ };
140
+ };
141
+ effects?: {
142
+ glassmorphism?: {
143
+ enabled?: boolean;
144
+ blur?: string;
145
+ opacity?: number;
146
+ border?: string;
147
+ };
148
+ animations?: {
149
+ enabled?: boolean;
150
+ duration?: {
151
+ fast?: string;
152
+ normal?: string;
153
+ slow?: string;
51
154
  };
52
- secondary: {
53
- background: string;
54
- text: string;
55
- border: string;
56
- hover: string;
57
- active: string;
155
+ easing?: {
156
+ default?: string;
157
+ smooth?: string;
158
+ bounce?: string;
58
159
  };
59
160
  };
161
+ shadows?: {
162
+ sm?: string;
163
+ md?: string;
164
+ lg?: string;
165
+ xl?: string;
166
+ card?: string;
167
+ cardHover?: string;
168
+ glow?: string;
169
+ focus?: string;
170
+ };
60
171
  };
61
172
  branding?: {
173
+ logo?: string;
174
+ companyName?: string;
175
+ favicon?: string;
62
176
  primaryColor?: string;
63
177
  };
178
+ glow?: {
179
+ primary?: string;
180
+ secondary?: string;
181
+ card?: string;
182
+ cardHover?: string;
183
+ button?: string;
184
+ focus?: string;
185
+ scrollbar?: string;
186
+ };
187
+ gradients?: {
188
+ start?: string;
189
+ end?: string;
190
+ hoverStart?: string;
191
+ hoverEnd?: string;
192
+ };
64
193
  }
65
194
  export type PortalThemePreset = 'dark' | 'light' | 'corporateBlue' | 'purple' | 'green' | 'orange';
66
195
  export interface PortalTheme {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@finatic/client",
3
- "version": "0.0.136",
3
+ "version": "0.0.137",
4
4
  "description": "Finatic Client SDK for browser integration",
5
5
  "type": "module",
6
6
  "publishConfig": {