@finatic/client 0.0.131

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 (47) hide show
  1. package/README.md +489 -0
  2. package/dist/index.d.ts +2037 -0
  3. package/dist/index.js +4815 -0
  4. package/dist/index.js.map +1 -0
  5. package/dist/index.mjs +4787 -0
  6. package/dist/index.mjs.map +1 -0
  7. package/dist/types/client/ApiClient.d.ts +234 -0
  8. package/dist/types/client/FinaticConnect.d.ts +307 -0
  9. package/dist/types/index.d.ts +17 -0
  10. package/dist/types/mocks/MockApiClient.d.ts +228 -0
  11. package/dist/types/mocks/MockDataProvider.d.ts +132 -0
  12. package/dist/types/mocks/MockFactory.d.ts +53 -0
  13. package/dist/types/mocks/index.d.ts +5 -0
  14. package/dist/types/mocks/utils.d.ts +29 -0
  15. package/dist/types/portal/PortalUI.d.ts +38 -0
  16. package/dist/types/security/ApiSecurity.d.ts +24 -0
  17. package/dist/types/security/RuntimeSecurity.d.ts +28 -0
  18. package/dist/types/security/SecurityUtils.d.ts +21 -0
  19. package/dist/types/security/index.d.ts +2 -0
  20. package/dist/types/services/AnalyticsService.d.ts +18 -0
  21. package/dist/types/services/ApiClient.d.ts +121 -0
  22. package/dist/types/services/PortalService.d.ts +24 -0
  23. package/dist/types/services/TradingService.d.ts +55 -0
  24. package/dist/types/services/api.d.ts +23 -0
  25. package/dist/types/services/auth.d.ts +9 -0
  26. package/dist/types/services/index.d.ts +4 -0
  27. package/dist/types/services/portfolio.d.ts +10 -0
  28. package/dist/types/services/trading.d.ts +10 -0
  29. package/dist/types/shared/index.d.ts +2 -0
  30. package/dist/types/shared/themes/index.d.ts +2 -0
  31. package/dist/types/shared/themes/portalPresets.d.ts +8 -0
  32. package/dist/types/shared/themes/presets.d.ts +3 -0
  33. package/dist/types/shared/themes/system.d.ts +2 -0
  34. package/dist/types/shared/types/index.d.ts +110 -0
  35. package/dist/types/types/api.d.ts +486 -0
  36. package/dist/types/types/config.d.ts +12 -0
  37. package/dist/types/types/connect.d.ts +51 -0
  38. package/dist/types/types/errors.d.ts +47 -0
  39. package/dist/types/types/portal.d.ts +75 -0
  40. package/dist/types/types/security.d.ts +35 -0
  41. package/dist/types/types/shared.d.ts +50 -0
  42. package/dist/types/types/theme.d.ts +101 -0
  43. package/dist/types/types.d.ts +157 -0
  44. package/dist/types/utils/errors.d.ts +42 -0
  45. package/dist/types/utils/events.d.ts +12 -0
  46. package/dist/types/utils/themeUtils.d.ts +34 -0
  47. package/package.json +56 -0
@@ -0,0 +1,121 @@
1
+ import { ApiConfig, ApiResponse, OrdersFilter, PositionsFilter, AccountsFilter, FilteredOrdersResponse, FilteredPositionsResponse, FilteredAccountsResponse } from '../types/api';
2
+ import { PaginatedResult } from '../types';
3
+ export declare class ApiClient {
4
+ private baseUrl;
5
+ private apiKey;
6
+ private accessToken?;
7
+ private refreshToken?;
8
+ private isSandbox;
9
+ constructor(config: ApiConfig);
10
+ private getBaseUrl;
11
+ private request;
12
+ getPortalContent(): Promise<ApiResponse<{
13
+ content: string;
14
+ }>>;
15
+ getInitToken(): Promise<ApiResponse<{
16
+ token: string;
17
+ }>>;
18
+ login(otp: string): Promise<ApiResponse<{
19
+ success: boolean;
20
+ }>>;
21
+ verifyOTP(otp: string): Promise<ApiResponse<{
22
+ userId: string;
23
+ connectionIds: string[];
24
+ }>>;
25
+ getUserProfile(): Promise<ApiResponse<{
26
+ profile: any;
27
+ brokers: any[];
28
+ }>>;
29
+ getConnectionComplete(): Promise<ApiResponse<{
30
+ userId: string;
31
+ connectionIds: string[];
32
+ }>>;
33
+ getUserToken(userId: string): Promise<ApiResponse<{
34
+ accessToken: string;
35
+ refreshToken: string;
36
+ }>>;
37
+ refreshAccessToken(): Promise<ApiResponse<{
38
+ accessToken: string;
39
+ refreshToken: string;
40
+ }>>;
41
+ revokeTokens(): Promise<ApiResponse<{
42
+ success: boolean;
43
+ }>>;
44
+ connectBroker(brokerId: string): Promise<ApiResponse<{
45
+ success: boolean;
46
+ }>>;
47
+ disconnectBroker(brokerId: string): Promise<ApiResponse<{
48
+ success: boolean;
49
+ }>>;
50
+ getBrokerAccounts(): Promise<ApiResponse<{
51
+ accounts: any[];
52
+ }>>;
53
+ getConnections(): Promise<ApiResponse<{
54
+ connections: any[];
55
+ }>>;
56
+ getConnectionDetails(connectionId: string): Promise<ApiResponse<{
57
+ connection: any;
58
+ }>>;
59
+ getAccounts(filter?: AccountsFilter): Promise<ApiResponse<{
60
+ accounts: any[];
61
+ }>>;
62
+ getHoldings(): Promise<ApiResponse<{
63
+ holdings: any[];
64
+ }>>;
65
+ getBalances(): Promise<ApiResponse<{
66
+ balances: any;
67
+ }>>;
68
+ getTransactions(): Promise<ApiResponse<{
69
+ transactions: any[];
70
+ }>>;
71
+ getPerformance(): Promise<ApiResponse<{
72
+ performance: any;
73
+ }>>;
74
+ getOrders(filter?: OrdersFilter): Promise<ApiResponse<{
75
+ orders: any[];
76
+ }>>;
77
+ getTrades(): Promise<ApiResponse<{
78
+ trades: any[];
79
+ }>>;
80
+ placeOrder(order: any): Promise<ApiResponse<{
81
+ orderId: string;
82
+ }>>;
83
+ cancelOrder(orderId: string): Promise<ApiResponse<{
84
+ success: boolean;
85
+ }>>;
86
+ getOrderStatus(orderId: string): Promise<ApiResponse<{
87
+ status: string;
88
+ }>>;
89
+ getOptionsChain(symbol: string): Promise<ApiResponse<{
90
+ chain: any[];
91
+ }>>;
92
+ getOptionQuote(symbol: string, strike: number, expiry: string): Promise<ApiResponse<{
93
+ quote: any;
94
+ }>>;
95
+ placeOptionsOrder(order: any): Promise<ApiResponse<{
96
+ orderId: string;
97
+ }>>;
98
+ getDailyHistory(): Promise<ApiResponse<{
99
+ history: any[];
100
+ }>>;
101
+ getWeeklySnapshots(): Promise<ApiResponse<{
102
+ snapshots: any[];
103
+ }>>;
104
+ getPortfolioDeltas(): Promise<ApiResponse<{
105
+ deltas: any[];
106
+ }>>;
107
+ getUserLogs(userId: string): Promise<ApiResponse<{
108
+ logs: any[];
109
+ }>>;
110
+ getBrokerOrders(filter?: OrdersFilter): Promise<ApiResponse<FilteredOrdersResponse>>;
111
+ getBrokerPositions(filter?: PositionsFilter): Promise<ApiResponse<FilteredPositionsResponse>>;
112
+ getBrokerDataAccounts(filter?: AccountsFilter): Promise<ApiResponse<FilteredAccountsResponse>>;
113
+ testWebhook(): Promise<ApiResponse<{
114
+ success: boolean;
115
+ }>>;
116
+ private buildQueryParams;
117
+ getBrokerOrdersPage(page?: number, perPage?: number, filters?: OrdersFilter): Promise<PaginatedResult<any[]>>;
118
+ getBrokerAccountsPage(page?: number, perPage?: number, filters?: AccountsFilter): Promise<PaginatedResult<any[]>>;
119
+ getBrokerPositionsPage(page?: number, perPage?: number, filters?: PositionsFilter): Promise<PaginatedResult<any[]>>;
120
+ getNextPage<T>(previousResult: PaginatedResult<T>, fetchFunction: (offset: number, limit: number) => Promise<PaginatedResult<T>>): Promise<PaginatedResult<T> | null>;
121
+ }
@@ -0,0 +1,24 @@
1
+ import { ApiClient } from './ApiClient';
2
+ import { PortalConfig } from '../types/portal';
3
+ import { Theme } from '../types/theme';
4
+ export interface IPortalService {
5
+ createPortal(config: PortalConfig): Promise<void>;
6
+ closePortal(): Promise<void>;
7
+ updateTheme(theme: Theme): Promise<void>;
8
+ getBrokerAccounts(): Promise<any[]>;
9
+ linkBrokerAccount(brokerId: string): Promise<void>;
10
+ unlinkBrokerAccount(brokerId: string): Promise<void>;
11
+ }
12
+ export declare class CorePortalService implements IPortalService {
13
+ private apiClient;
14
+ private iframe;
15
+ constructor(apiClient: ApiClient);
16
+ createPortal(config: PortalConfig): Promise<void>;
17
+ closePortal(): Promise<void>;
18
+ updateTheme(theme: Theme): Promise<void>;
19
+ getBrokerAccounts(): Promise<any[]>;
20
+ linkBrokerAccount(brokerId: string): Promise<void>;
21
+ unlinkBrokerAccount(brokerId: string): Promise<void>;
22
+ private positionIframe;
23
+ private styleIframe;
24
+ }
@@ -0,0 +1,55 @@
1
+ import { ApiClient } from './ApiClient';
2
+ import { Order, OptionsOrder, OrdersFilter, PositionsFilter, AccountsFilter, BrokerDataOrder, BrokerDataPosition, BrokerDataAccount } from '../types/api';
3
+ import { PaginatedResult } from '../types';
4
+ export interface ITradingService {
5
+ getAccounts(filter?: AccountsFilter): Promise<BrokerDataAccount[]>;
6
+ getOrders(filter?: OrdersFilter): Promise<BrokerDataOrder[]>;
7
+ getPositions(filter?: PositionsFilter): Promise<BrokerDataPosition[]>;
8
+ placeOrder(order: Order): Promise<string>;
9
+ cancelOrder(orderId: string): Promise<boolean>;
10
+ placeOptionsOrder(order: OptionsOrder): Promise<string>;
11
+ getAccountsPage(page?: number, perPage?: number, filter?: AccountsFilter): Promise<PaginatedResult<BrokerDataAccount[]>>;
12
+ getOrdersPage(page?: number, perPage?: number, filter?: OrdersFilter): Promise<PaginatedResult<BrokerDataOrder[]>>;
13
+ getPositionsPage(page?: number, perPage?: number, filter?: PositionsFilter): Promise<PaginatedResult<BrokerDataPosition[]>>;
14
+ getNextAccountsPage(previousResult: PaginatedResult<BrokerDataAccount[]>): Promise<PaginatedResult<BrokerDataAccount[]> | null>;
15
+ getNextOrdersPage(previousResult: PaginatedResult<BrokerDataOrder[]>): Promise<PaginatedResult<BrokerDataOrder[]> | null>;
16
+ getNextPositionsPage(previousResult: PaginatedResult<BrokerDataPosition[]>): Promise<PaginatedResult<BrokerDataPosition[]> | null>;
17
+ getAllAccounts(filter?: AccountsFilter): Promise<BrokerDataAccount[]>;
18
+ getAllOrders(filter?: OrdersFilter): Promise<BrokerDataOrder[]>;
19
+ getAllPositions(filter?: PositionsFilter): Promise<BrokerDataPosition[]>;
20
+ getOpenPositions(): Promise<BrokerDataPosition[]>;
21
+ getFilledOrders(): Promise<BrokerDataOrder[]>;
22
+ getPendingOrders(): Promise<BrokerDataOrder[]>;
23
+ getActiveAccounts(): Promise<BrokerDataAccount[]>;
24
+ getOrdersBySymbol(symbol: string): Promise<BrokerDataOrder[]>;
25
+ getPositionsBySymbol(symbol: string): Promise<BrokerDataPosition[]>;
26
+ getOrdersByBroker(brokerId: string): Promise<BrokerDataOrder[]>;
27
+ getPositionsByBroker(brokerId: string): Promise<BrokerDataPosition[]>;
28
+ }
29
+ export declare class CoreTradingService implements ITradingService {
30
+ private apiClient;
31
+ constructor(apiClient: ApiClient);
32
+ getAccounts(filter?: AccountsFilter): Promise<BrokerDataAccount[]>;
33
+ getOrders(filter?: OrdersFilter): Promise<BrokerDataOrder[]>;
34
+ getPositions(filter?: PositionsFilter): Promise<BrokerDataPosition[]>;
35
+ placeOrder(order: Order): Promise<string>;
36
+ cancelOrder(orderId: string): Promise<boolean>;
37
+ placeOptionsOrder(order: OptionsOrder): Promise<string>;
38
+ getAccountsPage(page?: number, perPage?: number, filter?: AccountsFilter): Promise<PaginatedResult<BrokerDataAccount[]>>;
39
+ getOrdersPage(page?: number, perPage?: number, filter?: OrdersFilter): Promise<PaginatedResult<BrokerDataOrder[]>>;
40
+ getPositionsPage(page?: number, perPage?: number, filter?: PositionsFilter): Promise<PaginatedResult<BrokerDataPosition[]>>;
41
+ getNextAccountsPage(previousResult: PaginatedResult<BrokerDataAccount[]>): Promise<PaginatedResult<BrokerDataAccount[]> | null>;
42
+ getNextOrdersPage(previousResult: PaginatedResult<BrokerDataOrder[]>): Promise<PaginatedResult<BrokerDataOrder[]> | null>;
43
+ getNextPositionsPage(previousResult: PaginatedResult<BrokerDataPosition[]>): Promise<PaginatedResult<BrokerDataPosition[]> | null>;
44
+ getAllAccounts(filter?: AccountsFilter): Promise<BrokerDataAccount[]>;
45
+ getAllOrders(filter?: OrdersFilter): Promise<BrokerDataOrder[]>;
46
+ getAllPositions(filter?: PositionsFilter): Promise<BrokerDataPosition[]>;
47
+ getOpenPositions(): Promise<BrokerDataPosition[]>;
48
+ getFilledOrders(): Promise<BrokerDataOrder[]>;
49
+ getPendingOrders(): Promise<BrokerDataOrder[]>;
50
+ getActiveAccounts(): Promise<BrokerDataAccount[]>;
51
+ getOrdersBySymbol(symbol: string): Promise<BrokerDataOrder[]>;
52
+ getPositionsBySymbol(symbol: string): Promise<BrokerDataPosition[]>;
53
+ getOrdersByBroker(brokerId: string): Promise<BrokerDataOrder[]>;
54
+ getPositionsByBroker(brokerId: string): Promise<BrokerDataPosition[]>;
55
+ }
@@ -0,0 +1,23 @@
1
+ import { ApiConfig, ApiResponse } from '../types/api';
2
+ export declare class ApiService {
3
+ private config;
4
+ private accessToken?;
5
+ private deviceInfo?;
6
+ constructor(config: ApiConfig);
7
+ setAccessToken(token: string): void;
8
+ setDeviceInfo(deviceInfo: string): void;
9
+ private request;
10
+ get<T>(path: string, options?: {
11
+ headers?: Record<string, string>;
12
+ params?: Record<string, string>;
13
+ }): Promise<ApiResponse<T>>;
14
+ post<T>(path: string, body: any, options?: {
15
+ headers?: Record<string, string>;
16
+ }): Promise<ApiResponse<T>>;
17
+ put<T>(path: string, body: any, options?: {
18
+ headers?: Record<string, string>;
19
+ }): Promise<ApiResponse<T>>;
20
+ delete<T>(path: string, options?: {
21
+ headers?: Record<string, string>;
22
+ }): Promise<ApiResponse<T>>;
23
+ }
@@ -0,0 +1,9 @@
1
+ import { ApiService } from './api';
2
+ import { UserToken, PortalResponse } from '../types/api';
3
+ export declare class AuthService {
4
+ private api;
5
+ constructor(api: ApiService);
6
+ getPortalToken(companyId: string): Promise<PortalResponse>;
7
+ getUserToken(token: string, companyId: string, userId: string): Promise<UserToken>;
8
+ revokeToken(accessToken: string): Promise<void>;
9
+ }
@@ -0,0 +1,4 @@
1
+ export * from './api';
2
+ export * from './auth';
3
+ export * from './portfolio';
4
+ export * from './PortalService';
@@ -0,0 +1,10 @@
1
+ import { ApiService } from './api';
2
+ import { Holding, Portfolio, PortfolioSnapshot, PerformanceMetrics } from '../types/api';
3
+ export declare class PortfolioService {
4
+ private api;
5
+ constructor(api: ApiService);
6
+ getHoldings(accessToken: string): Promise<Holding[]>;
7
+ getPortfolio(accessToken: string): Promise<Portfolio>;
8
+ getPortfolioSnapshot(accessToken: string): Promise<PortfolioSnapshot>;
9
+ getPerformanceMetrics(accessToken: string): Promise<PerformanceMetrics>;
10
+ }
@@ -0,0 +1,10 @@
1
+ import { ApiService } from './api';
2
+ import { Order, OptionsOrder } from '../types/api';
3
+ export declare class TradingService {
4
+ private api;
5
+ constructor(api: ApiService);
6
+ placeOrder(accessToken: string, order: Order): Promise<void>;
7
+ placeOptionsOrder(accessToken: string, order: OptionsOrder): Promise<void>;
8
+ cancelOrder(accessToken: string, orderId: string): Promise<void>;
9
+ getOrders(accessToken: string): Promise<Order[]>;
10
+ }
@@ -0,0 +1,2 @@
1
+ export * from './types';
2
+ export * from './themes';
@@ -0,0 +1,2 @@
1
+ export * from './presets';
2
+ export * from './system';
@@ -0,0 +1,8 @@
1
+ import { PortalThemeConfig } from '../../types/portal';
2
+ export declare const darkTheme: PortalThemeConfig;
3
+ export declare const lightTheme: PortalThemeConfig;
4
+ export declare const corporateBlueTheme: PortalThemeConfig;
5
+ export declare const purpleTheme: PortalThemeConfig;
6
+ export declare const greenTheme: PortalThemeConfig;
7
+ export declare const orangeTheme: PortalThemeConfig;
8
+ export declare const portalThemePresets: Record<string, PortalThemeConfig>;
@@ -0,0 +1,3 @@
1
+ import { Theme } from '../types';
2
+ export declare const lightTheme: Theme;
3
+ export declare const darkTheme: Theme;
@@ -0,0 +1,2 @@
1
+ import { Theme } from '../types';
2
+ export declare const systemTheme: Theme;
@@ -0,0 +1,110 @@
1
+ export interface BrokerAccount {
2
+ id: string;
3
+ name: string;
4
+ type: string;
5
+ status: 'active' | 'inactive' | 'pending';
6
+ balance?: {
7
+ total: number;
8
+ available: number;
9
+ currency: string;
10
+ };
11
+ }
12
+ export interface Theme {
13
+ colors: {
14
+ primary: string;
15
+ secondary: string;
16
+ background: {
17
+ primary: string;
18
+ secondary: string;
19
+ tertiary: string;
20
+ };
21
+ text: {
22
+ primary: string;
23
+ secondary: string;
24
+ disabled: string;
25
+ error: string;
26
+ success: string;
27
+ warning: string;
28
+ };
29
+ border: {
30
+ light: string;
31
+ medium: string;
32
+ dark: string;
33
+ };
34
+ status: {
35
+ active: string;
36
+ inactive: string;
37
+ pending: string;
38
+ error: string;
39
+ success: string;
40
+ };
41
+ };
42
+ typography: {
43
+ fontFamily: string;
44
+ fontSize: {
45
+ xs: string;
46
+ sm: string;
47
+ base: string;
48
+ lg: string;
49
+ xl: string;
50
+ '2xl': string;
51
+ };
52
+ fontWeight: {
53
+ light: number;
54
+ normal: number;
55
+ medium: number;
56
+ semibold: number;
57
+ bold: number;
58
+ };
59
+ lineHeight: {
60
+ none: number;
61
+ tight: number;
62
+ normal: number;
63
+ relaxed: number;
64
+ };
65
+ };
66
+ spacing: {
67
+ xs: string;
68
+ sm: string;
69
+ md: string;
70
+ lg: string;
71
+ xl: string;
72
+ '2xl': string;
73
+ };
74
+ animation: {
75
+ duration: {
76
+ fast: string;
77
+ normal: string;
78
+ slow: string;
79
+ };
80
+ easing: {
81
+ linear: string;
82
+ easeIn: string;
83
+ easeOut: string;
84
+ easeInOut: string;
85
+ };
86
+ };
87
+ components: {
88
+ button: {
89
+ borderRadius: string;
90
+ padding: string;
91
+ fontSize: string;
92
+ fontWeight: number;
93
+ };
94
+ input: {
95
+ borderRadius: string;
96
+ padding: string;
97
+ fontSize: string;
98
+ };
99
+ card: {
100
+ borderRadius: string;
101
+ padding: string;
102
+ shadow: string;
103
+ };
104
+ modal: {
105
+ borderRadius: string;
106
+ padding: string;
107
+ backdrop: string;
108
+ };
109
+ };
110
+ }