@infosel-sdk/widgets 1.0.1
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.
- package/CHANGELOG.md +167 -0
- package/README.md +966 -0
- package/package.json +39 -0
- package/src/__tests__/__mocks__/apis/charts-api.mock.d.ts +106 -0
- package/src/__tests__/__mocks__/apis/charts-api.mock.js +110 -0
- package/src/__tests__/__mocks__/apis/charts-api.mock.js.map +1 -0
- package/src/__tests__/__mocks__/apis/markets-api.mock.d.ts +148 -0
- package/src/__tests__/__mocks__/apis/markets-api.mock.js +121 -0
- package/src/__tests__/__mocks__/apis/markets-api.mock.js.map +1 -0
- package/src/__tests__/__mocks__/core/auth-provider.mock.d.ts +63 -0
- package/src/__tests__/__mocks__/core/auth-provider.mock.js +50 -0
- package/src/__tests__/__mocks__/core/auth-provider.mock.js.map +1 -0
- package/src/__tests__/__mocks__/core/graphql-client.mock.d.ts +36 -0
- package/src/__tests__/__mocks__/core/graphql-client.mock.js +60 -0
- package/src/__tests__/__mocks__/core/graphql-client.mock.js.map +1 -0
- package/src/__tests__/__mocks__/core/http-client.mock.d.ts +43 -0
- package/src/__tests__/__mocks__/core/http-client.mock.js +40 -0
- package/src/__tests__/__mocks__/core/http-client.mock.js.map +1 -0
- package/src/__tests__/__mocks__/core/sdk-manager.mock.d.ts +116 -0
- package/src/__tests__/__mocks__/core/sdk-manager.mock.js +58 -0
- package/src/__tests__/__mocks__/core/sdk-manager.mock.js.map +1 -0
- package/src/__tests__/__mocks__/core/storage.mock.d.ts +32 -0
- package/src/__tests__/__mocks__/core/storage.mock.js +35 -0
- package/src/__tests__/__mocks__/core/storage.mock.js.map +1 -0
- package/src/__tests__/setup.d.ts +16 -0
- package/src/__tests__/setup.js +34 -0
- package/src/__tests__/setup.js.map +1 -0
- package/src/__tests__/utils/mock-datasource.d.ts +5 -0
- package/src/__tests__/utils/mock-datasource.js +39 -0
- package/src/__tests__/utils/mock-datasource.js.map +1 -0
- package/src/__tests__/utils/mock-factories.d.ts +547 -0
- package/src/__tests__/utils/mock-factories.js +226 -0
- package/src/__tests__/utils/mock-factories.js.map +1 -0
- package/src/__tests__/utils/mock-repository.d.ts +22 -0
- package/src/__tests__/utils/mock-repository.js +73 -0
- package/src/__tests__/utils/mock-repository.js.map +1 -0
- package/src/__tests__/utils/test-helpers.d.ts +52 -0
- package/src/__tests__/utils/test-helpers.js +169 -0
- package/src/__tests__/utils/test-helpers.js.map +1 -0
- package/src/data/datasources/widgets_datasource_impl.d.ts +57 -0
- package/src/data/datasources/widgets_datasource_impl.js +997 -0
- package/src/data/datasources/widgets_datasource_impl.js.map +1 -0
- package/src/data/di/infosel_widgets_component.d.ts +68 -0
- package/src/data/di/infosel_widgets_component.js +170 -0
- package/src/data/di/infosel_widgets_component.js.map +1 -0
- package/src/data/di/infosel_widgets_module.d.ts +17 -0
- package/src/data/di/infosel_widgets_module.js +34 -0
- package/src/data/di/infosel_widgets_module.js.map +1 -0
- package/src/data/mappers/widgets_mapper.d.ts +52 -0
- package/src/data/mappers/widgets_mapper.js +294 -0
- package/src/data/mappers/widgets_mapper.js.map +1 -0
- package/src/data/models/delete_workspace_response_model.d.ts +5 -0
- package/src/data/models/delete_workspace_response_model.js +3 -0
- package/src/data/models/delete_workspace_response_model.js.map +1 -0
- package/src/data/models/get_user_workspaces_response_model.d.ts +15 -0
- package/src/data/models/get_user_workspaces_response_model.js +3 -0
- package/src/data/models/get_user_workspaces_response_model.js.map +1 -0
- package/src/data/models/instrument_fields_model.d.ts +84 -0
- package/src/data/models/instrument_fields_model.js +3 -0
- package/src/data/models/instrument_fields_model.js.map +1 -0
- package/src/data/models/instrument_model.d.ts +5 -0
- package/src/data/models/instrument_model.js +3 -0
- package/src/data/models/instrument_model.js.map +1 -0
- package/src/data/models/project_model.d.ts +12 -0
- package/src/data/models/project_model.js +3 -0
- package/src/data/models/project_model.js.map +1 -0
- package/src/data/models/project_widgets_response_model.d.ts +8 -0
- package/src/data/models/project_widgets_response_model.js +3 -0
- package/src/data/models/project_widgets_response_model.js.map +1 -0
- package/src/data/models/user_model.d.ts +7 -0
- package/src/data/models/user_model.js +3 -0
- package/src/data/models/user_model.js.map +1 -0
- package/src/data/models/user_widgets_response_model.d.ts +7 -0
- package/src/data/models/user_widgets_response_model.js +3 -0
- package/src/data/models/user_widgets_response_model.js.map +1 -0
- package/src/data/models/widget_brokerage_concentration_configuration.d.ts +4 -0
- package/src/data/models/widget_brokerage_concentration_configuration.js +3 -0
- package/src/data/models/widget_brokerage_concentration_configuration.js.map +1 -0
- package/src/data/models/widget_brokerage_participation_configuration.d.ts +10 -0
- package/src/data/models/widget_brokerage_participation_configuration.js +3 -0
- package/src/data/models/widget_brokerage_participation_configuration.js.map +1 -0
- package/src/data/models/widget_brokerage_trades_configuration.d.ts +11 -0
- package/src/data/models/widget_brokerage_trades_configuration.js +3 -0
- package/src/data/models/widget_brokerage_trades_configuration.js.map +1 -0
- package/src/data/models/widget_chart_configuration_model.d.ts +4 -0
- package/src/data/models/widget_chart_configuration_model.js +3 -0
- package/src/data/models/widget_chart_configuration_model.js.map +1 -0
- package/src/data/models/widget_decreed_search_configuration.d.ts +10 -0
- package/src/data/models/widget_decreed_search_configuration.js +3 -0
- package/src/data/models/widget_decreed_search_configuration.js.map +1 -0
- package/src/data/models/widget_dynamic_table_configuration.d.ts +14 -0
- package/src/data/models/widget_dynamic_table_configuration.js +3 -0
- package/src/data/models/widget_dynamic_table_configuration.js.map +1 -0
- package/src/data/models/widget_indices_components_configuration.d.ts +7 -0
- package/src/data/models/widget_indices_components_configuration.js +3 -0
- package/src/data/models/widget_indices_components_configuration.js.map +1 -0
- package/src/data/models/widget_layout_model.d.ts +6 -0
- package/src/data/models/widget_layout_model.js +3 -0
- package/src/data/models/widget_layout_model.js.map +1 -0
- package/src/data/models/widget_market_total_configuration.d.ts +4 -0
- package/src/data/models/widget_market_total_configuration.js +3 -0
- package/src/data/models/widget_market_total_configuration.js.map +1 -0
- package/src/data/models/widget_model.d.ts +33 -0
- package/src/data/models/widget_model.js +3 -0
- package/src/data/models/widget_model.js.map +1 -0
- package/src/data/models/widget_size_model.d.ts +14 -0
- package/src/data/models/widget_size_model.js +3 -0
- package/src/data/models/widget_size_model.js.map +1 -0
- package/src/data/models/widget_table_column_format_model.d.ts +6 -0
- package/src/data/models/widget_table_column_format_model.js +3 -0
- package/src/data/models/widget_table_column_format_model.js.map +1 -0
- package/src/data/models/widget_table_column_model.d.ts +8 -0
- package/src/data/models/widget_table_column_model.js +3 -0
- package/src/data/models/widget_table_column_model.js.map +1 -0
- package/src/data/models/widget_ticker_configuration.d.ts +7 -0
- package/src/data/models/widget_ticker_configuration.js +3 -0
- package/src/data/models/widget_ticker_configuration.js.map +1 -0
- package/src/data/models/widget_traded_packages_configuration.d.ts +4 -0
- package/src/data/models/widget_traded_packages_configuration.js +3 -0
- package/src/data/models/widget_traded_packages_configuration.js.map +1 -0
- package/src/data/models/workspace_model.d.ts +6 -0
- package/src/data/models/workspace_model.js +3 -0
- package/src/data/models/workspace_model.js.map +1 -0
- package/src/data/repositories/widgets_repository_impl.d.ts +46 -0
- package/src/data/repositories/widgets_repository_impl.js +66 -0
- package/src/data/repositories/widgets_repository_impl.js.map +1 -0
- package/src/domain/datasources/widgets_datasource.d.ts +41 -0
- package/src/domain/datasources/widgets_datasource.js +3 -0
- package/src/domain/datasources/widgets_datasource.js.map +1 -0
- package/src/domain/di/widgets_component.d.ts +42 -0
- package/src/domain/di/widgets_component.js +3 -0
- package/src/domain/di/widgets_component.js.map +1 -0
- package/src/domain/di/widgets_module.d.ts +8 -0
- package/src/domain/di/widgets_module.js +3 -0
- package/src/domain/di/widgets_module.js.map +1 -0
- package/src/domain/entities/chart_configuration.d.ts +5 -0
- package/src/domain/entities/chart_configuration.js +3 -0
- package/src/domain/entities/chart_configuration.js.map +1 -0
- package/src/domain/entities/create_instrument_request.d.ts +5 -0
- package/src/domain/entities/create_instrument_request.js +3 -0
- package/src/domain/entities/create_instrument_request.js.map +1 -0
- package/src/domain/entities/create_widget_request.d.ts +36 -0
- package/src/domain/entities/create_widget_request.js +3 -0
- package/src/domain/entities/create_widget_request.js.map +1 -0
- package/src/domain/entities/create_workspace_request.d.ts +5 -0
- package/src/domain/entities/create_workspace_request.js +3 -0
- package/src/domain/entities/create_workspace_request.js.map +1 -0
- package/src/domain/entities/delete_workspace_request.d.ts +3 -0
- package/src/domain/entities/delete_workspace_request.js +3 -0
- package/src/domain/entities/delete_workspace_request.js.map +1 -0
- package/src/domain/entities/duplicate_widget_request.d.ts +5 -0
- package/src/domain/entities/duplicate_widget_request.js +3 -0
- package/src/domain/entities/duplicate_widget_request.js.map +1 -0
- package/src/domain/entities/duplicate_workspace_request.d.ts +5 -0
- package/src/domain/entities/duplicate_workspace_request.js +3 -0
- package/src/domain/entities/duplicate_workspace_request.js.map +1 -0
- package/src/domain/entities/get_instruments_request.d.ts +12 -0
- package/src/domain/entities/get_instruments_request.js +3 -0
- package/src/domain/entities/get_instruments_request.js.map +1 -0
- package/src/domain/entities/get_project_widgets_request.d.ts +12 -0
- package/src/domain/entities/get_project_widgets_request.js +3 -0
- package/src/domain/entities/get_project_widgets_request.js.map +1 -0
- package/src/domain/entities/get_user_widgets_request.d.ts +3 -0
- package/src/domain/entities/get_user_widgets_request.js +3 -0
- package/src/domain/entities/get_user_widgets_request.js.map +1 -0
- package/src/domain/entities/get_user_workspaces_request.d.ts +4 -0
- package/src/domain/entities/get_user_workspaces_request.js +3 -0
- package/src/domain/entities/get_user_workspaces_request.js.map +1 -0
- package/src/domain/entities/get_workspace_request.d.ts +3 -0
- package/src/domain/entities/get_workspace_request.js +3 -0
- package/src/domain/entities/get_workspace_request.js.map +1 -0
- package/src/domain/entities/get_workspaces_by_user_request.d.ts +12 -0
- package/src/domain/entities/get_workspaces_by_user_request.js +3 -0
- package/src/domain/entities/get_workspaces_by_user_request.js.map +1 -0
- package/src/domain/entities/get_workspaces_request.d.ts +12 -0
- package/src/domain/entities/get_workspaces_request.js +3 -0
- package/src/domain/entities/get_workspaces_request.js.map +1 -0
- package/src/domain/entities/index.d.ts +30 -0
- package/src/domain/entities/index.js +34 -0
- package/src/domain/entities/index.js.map +1 -0
- package/src/domain/entities/instrument.d.ts +4 -0
- package/src/domain/entities/instrument.js +3 -0
- package/src/domain/entities/instrument.js.map +1 -0
- package/src/domain/entities/instrument_fields.d.ts +86 -0
- package/src/domain/entities/instrument_fields.js +3 -0
- package/src/domain/entities/instrument_fields.js.map +1 -0
- package/src/domain/entities/instruments_response.d.ts +6 -0
- package/src/domain/entities/instruments_response.js +3 -0
- package/src/domain/entities/instruments_response.js.map +1 -0
- package/src/domain/entities/news_configuration.d.ts +8 -0
- package/src/domain/entities/news_configuration.js +3 -0
- package/src/domain/entities/news_configuration.js.map +1 -0
- package/src/domain/entities/project_widgets_container.d.ts +8 -0
- package/src/domain/entities/project_widgets_container.js +3 -0
- package/src/domain/entities/project_widgets_container.js.map +1 -0
- package/src/domain/entities/update_widget_chart_request.d.ts +4 -0
- package/src/domain/entities/update_widget_chart_request.js +3 -0
- package/src/domain/entities/update_widget_chart_request.js.map +1 -0
- package/src/domain/entities/update_widget_instruments_reques.d.ts +11 -0
- package/src/domain/entities/update_widget_instruments_reques.js +3 -0
- package/src/domain/entities/update_widget_instruments_reques.js.map +1 -0
- package/src/domain/entities/update_workspace_request.d.ts +19 -0
- package/src/domain/entities/update_workspace_request.js +3 -0
- package/src/domain/entities/update_workspace_request.js.map +1 -0
- package/src/domain/entities/user_widgets.d.ts +5 -0
- package/src/domain/entities/user_widgets.js +3 -0
- package/src/domain/entities/user_widgets.js.map +1 -0
- package/src/domain/entities/user_workspaces.d.ts +8 -0
- package/src/domain/entities/user_workspaces.js +3 -0
- package/src/domain/entities/user_workspaces.js.map +1 -0
- package/src/domain/entities/widget.d.ts +129 -0
- package/src/domain/entities/widget.js +3 -0
- package/src/domain/entities/widget.js.map +1 -0
- package/src/domain/entities/widget_layout_config.d.ts +15 -0
- package/src/domain/entities/widget_layout_config.js +3 -0
- package/src/domain/entities/widget_layout_config.js.map +1 -0
- package/src/domain/entities/widget_size_config.d.ts +6 -0
- package/src/domain/entities/widget_size_config.js +3 -0
- package/src/domain/entities/widget_size_config.js.map +1 -0
- package/src/domain/entities/workspace.d.ts +13 -0
- package/src/domain/entities/workspace.js +3 -0
- package/src/domain/entities/workspace.js.map +1 -0
- package/src/domain/entities/workspace_widgets.d.ts +6 -0
- package/src/domain/entities/workspace_widgets.js +3 -0
- package/src/domain/entities/workspace_widgets.js.map +1 -0
- package/src/domain/entities/workspaces_container.d.ts +18 -0
- package/src/domain/entities/workspaces_container.js +3 -0
- package/src/domain/entities/workspaces_container.js.map +1 -0
- package/src/domain/repositories/widgets_repository.d.ts +42 -0
- package/src/domain/repositories/widgets_repository.js +3 -0
- package/src/domain/repositories/widgets_repository.js.map +1 -0
- package/src/domain/use_cases/create_instrument_use_case.d.ts +9 -0
- package/src/domain/use_cases/create_instrument_use_case.js +22 -0
- package/src/domain/use_cases/create_instrument_use_case.js.map +1 -0
- package/src/domain/use_cases/create_widget_use_case.d.ts +9 -0
- package/src/domain/use_cases/create_widget_use_case.js +32 -0
- package/src/domain/use_cases/create_widget_use_case.js.map +1 -0
- package/src/domain/use_cases/create_workspace_use_case.d.ts +9 -0
- package/src/domain/use_cases/create_workspace_use_case.js +22 -0
- package/src/domain/use_cases/create_workspace_use_case.js.map +1 -0
- package/src/domain/use_cases/delete_instrument_use_case.d.ts +7 -0
- package/src/domain/use_cases/delete_instrument_use_case.js +19 -0
- package/src/domain/use_cases/delete_instrument_use_case.js.map +1 -0
- package/src/domain/use_cases/delete_widget_use_case.d.ts +7 -0
- package/src/domain/use_cases/delete_widget_use_case.js +19 -0
- package/src/domain/use_cases/delete_widget_use_case.js.map +1 -0
- package/src/domain/use_cases/delete_workspace_use_case.d.ts +8 -0
- package/src/domain/use_cases/delete_workspace_use_case.js +22 -0
- package/src/domain/use_cases/delete_workspace_use_case.js.map +1 -0
- package/src/domain/use_cases/duplicate_widget_use_case.d.ts +8 -0
- package/src/domain/use_cases/duplicate_widget_use_case.js +15 -0
- package/src/domain/use_cases/duplicate_widget_use_case.js.map +1 -0
- package/src/domain/use_cases/duplicate_workspace_use_case.d.ts +8 -0
- package/src/domain/use_cases/duplicate_workspace_use_case.js +15 -0
- package/src/domain/use_cases/duplicate_workspace_use_case.js.map +1 -0
- package/src/domain/use_cases/get_instruments_use_case.d.ts +9 -0
- package/src/domain/use_cases/get_instruments_use_case.js +16 -0
- package/src/domain/use_cases/get_instruments_use_case.js.map +1 -0
- package/src/domain/use_cases/get_project_widgets_use_case.d.ts +9 -0
- package/src/domain/use_cases/get_project_widgets_use_case.js +19 -0
- package/src/domain/use_cases/get_project_widgets_use_case.js.map +1 -0
- package/src/domain/use_cases/get_user_widgets_use_case.d.ts +9 -0
- package/src/domain/use_cases/get_user_widgets_use_case.js +22 -0
- package/src/domain/use_cases/get_user_widgets_use_case.js.map +1 -0
- package/src/domain/use_cases/get_user_workspace_use_case.d.ts +9 -0
- package/src/domain/use_cases/get_user_workspace_use_case.js +22 -0
- package/src/domain/use_cases/get_user_workspace_use_case.js.map +1 -0
- package/src/domain/use_cases/get_workspace_use_case.d.ts +9 -0
- package/src/domain/use_cases/get_workspace_use_case.js +19 -0
- package/src/domain/use_cases/get_workspace_use_case.js.map +1 -0
- package/src/domain/use_cases/get_workspaces_by_project_id_use_case.d.ts +9 -0
- package/src/domain/use_cases/get_workspaces_by_project_id_use_case.js +19 -0
- package/src/domain/use_cases/get_workspaces_by_project_id_use_case.js.map +1 -0
- package/src/domain/use_cases/get_workspaces_by_user_use_case.d.ts +9 -0
- package/src/domain/use_cases/get_workspaces_by_user_use_case.js +19 -0
- package/src/domain/use_cases/get_workspaces_by_user_use_case.js.map +1 -0
- package/src/domain/use_cases/get_workspaces_use_case.d.ts +9 -0
- package/src/domain/use_cases/get_workspaces_use_case.js +19 -0
- package/src/domain/use_cases/get_workspaces_use_case.js.map +1 -0
- package/src/domain/use_cases/update_widget_chart_use_case.d.ts +7 -0
- package/src/domain/use_cases/update_widget_chart_use_case.js +15 -0
- package/src/domain/use_cases/update_widget_chart_use_case.js.map +1 -0
- package/src/domain/use_cases/update_widget_instruments_use_case.d.ts +9 -0
- package/src/domain/use_cases/update_widget_instruments_use_case.js +22 -0
- package/src/domain/use_cases/update_widget_instruments_use_case.js.map +1 -0
- package/src/domain/use_cases/update_workspace_use_case.d.ts +8 -0
- package/src/domain/use_cases/update_workspace_use_case.js +15 -0
- package/src/domain/use_cases/update_workspace_use_case.js.map +1 -0
- package/src/index.d.ts +6 -0
- package/src/index.js +10 -0
- package/src/index.js.map +1 -0
package/README.md
ADDED
|
@@ -0,0 +1,966 @@
|
|
|
1
|
+
# @infosel-sdk/widgets
|
|
2
|
+
|
|
3
|
+
SDK de Widgets para la plataforma Infosel. Proporciona herramientas completas para crear, gestionar y configurar widgets, espacios de trabajo e instrumentos para aplicaciones financieras.
|
|
4
|
+
|
|
5
|
+
## 🚀 Características
|
|
6
|
+
|
|
7
|
+
- **Gestión de Widgets**: Crear, actualizar, eliminar y duplicar widgets financieros personalizables
|
|
8
|
+
- **Gestión de Espacios de Trabajo**: Organizar y gestionar espacios de trabajo de usuarios
|
|
9
|
+
- **Gestión de Instrumentos**: Crear y gestionar instrumentos financieros personalizados
|
|
10
|
+
- **Configuración Avanzada**: Soporte para múltiples tipos de widgets (gráficos, tablas, noticias, etc.)
|
|
11
|
+
- **API GraphQL**: Comunicación eficiente mediante GraphQL
|
|
12
|
+
|
|
13
|
+
## 📦 Instalación
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
npm install @infosel-sdk/widgets
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## 🚀 Inicio Rápido
|
|
20
|
+
|
|
21
|
+
### ✨ Configuración Moderna (Recomendado)
|
|
22
|
+
|
|
23
|
+
La nueva API del core proporciona una configuración más limpia y validada:
|
|
24
|
+
|
|
25
|
+
```typescript
|
|
26
|
+
import InfoselWidgets from '@infosel-sdk/widgets';
|
|
27
|
+
import { InfoselSdkManager, AuthConfigurationBuilder } from '@infosel-sdk/core';
|
|
28
|
+
|
|
29
|
+
// Configuración moderna con Builder Pattern
|
|
30
|
+
const authConfig = AuthConfigurationBuilder.keyCloak()
|
|
31
|
+
.withRealm('hub')
|
|
32
|
+
.withEnvironment('qa')
|
|
33
|
+
.withCredentials({
|
|
34
|
+
grant_type: 'client_credentials',
|
|
35
|
+
client_id: 'tu-client-id',
|
|
36
|
+
client_secret: 'tu-client-secret',
|
|
37
|
+
})
|
|
38
|
+
.build();
|
|
39
|
+
|
|
40
|
+
// Inicializar SDK Manager con configuración moderna
|
|
41
|
+
const sdkManager = InfoselSdkManager.initWithConfiguration({
|
|
42
|
+
authConfiguration: authConfig,
|
|
43
|
+
});
|
|
44
|
+
|
|
45
|
+
// Inicializar SDK de Widgets
|
|
46
|
+
const widgetsSDK = InfoselWidgets.init({ sdkManager });
|
|
47
|
+
|
|
48
|
+
// Crear un espacio de trabajo
|
|
49
|
+
const workspace = await widgetsSDK.createWorkspace({
|
|
50
|
+
name: 'Mi Dashboard',
|
|
51
|
+
description: 'Espacio de trabajo personal',
|
|
52
|
+
});
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
### Configuración con Token Existente
|
|
56
|
+
|
|
57
|
+
```typescript
|
|
58
|
+
import InfoselWidgets from '@infosel-sdk/widgets';
|
|
59
|
+
import {
|
|
60
|
+
InfoselSdkManager,
|
|
61
|
+
AuthConfigurationBuilder,
|
|
62
|
+
Token,
|
|
63
|
+
} from '@infosel-sdk/core';
|
|
64
|
+
|
|
65
|
+
// Configuración con token existente
|
|
66
|
+
const token: Token = {
|
|
67
|
+
accessToken: 'tu-access-token',
|
|
68
|
+
refreshToken: 'tu-refresh-token',
|
|
69
|
+
};
|
|
70
|
+
|
|
71
|
+
const authConfig = AuthConfigurationBuilder.existingToken()
|
|
72
|
+
.withRealm('hub')
|
|
73
|
+
.withEnvironment('prod')
|
|
74
|
+
.withClientId('hub-app')
|
|
75
|
+
.withToken(token)
|
|
76
|
+
.build();
|
|
77
|
+
|
|
78
|
+
const sdkManager = InfoselSdkManager.initWithConfiguration({
|
|
79
|
+
authConfiguration: authConfig,
|
|
80
|
+
});
|
|
81
|
+
|
|
82
|
+
const widgetsSDK = InfoselWidgets.init({ sdkManager });
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
## 🔍 Validación de Configuración
|
|
86
|
+
|
|
87
|
+
La nueva API incluye validaciones robustas:
|
|
88
|
+
|
|
89
|
+
```typescript
|
|
90
|
+
import { AuthConfigurationBuilder } from '@infosel-sdk/core';
|
|
91
|
+
|
|
92
|
+
const builder = AuthConfigurationBuilder.keyCloak()
|
|
93
|
+
.withRealm('invalid@realm') // Caracteres inválidos
|
|
94
|
+
.withCredentials({
|
|
95
|
+
grant_type: 'client_credentials',
|
|
96
|
+
client_id: '', // Client ID vacío
|
|
97
|
+
client_secret: 'secret',
|
|
98
|
+
});
|
|
99
|
+
|
|
100
|
+
// Validar antes de construir
|
|
101
|
+
const validation = builder.validate();
|
|
102
|
+
if (!validation.isValid) {
|
|
103
|
+
console.log('Errores:', validation.errors);
|
|
104
|
+
// ['Realm contains invalid characters...', 'Client ID is required...']
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
// O validar automáticamente al construir
|
|
108
|
+
try {
|
|
109
|
+
const config = builder.build();
|
|
110
|
+
} catch (error) {
|
|
111
|
+
console.error(error.message); // Lista todos los errores de validación
|
|
112
|
+
}
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
## 📚 API Completa del SDK
|
|
116
|
+
|
|
117
|
+
### 🏢 Gestión de Espacios de Trabajo
|
|
118
|
+
|
|
119
|
+
#### Crear Espacio de Trabajo
|
|
120
|
+
|
|
121
|
+
```typescript
|
|
122
|
+
const workspace = await widgetsSDK.createWorkspace({
|
|
123
|
+
name: 'Mi Dashboard de Trading',
|
|
124
|
+
description: 'Espacio de trabajo personal para análisis de mercado',
|
|
125
|
+
userId: 'user-123', // Opcional: asociar a usuario específico
|
|
126
|
+
projectId: 'project-123', // Opcional: asociar a proyecto específico
|
|
127
|
+
});
|
|
128
|
+
|
|
129
|
+
console.log('Espacio de trabajo creado:', workspace);
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
#### Obtener Espacios de Trabajo
|
|
133
|
+
|
|
134
|
+
```typescript
|
|
135
|
+
// Obtener todos los espacios de trabajo de un proyecto
|
|
136
|
+
const allWorkspaces = await widgetsSDK.getWorkspaces({
|
|
137
|
+
projectId: 'project-123',
|
|
138
|
+
});
|
|
139
|
+
|
|
140
|
+
// Obtener espacios de trabajo por usuario
|
|
141
|
+
const userWorkspaces = await widgetsSDK.getWorkspacesByUser({
|
|
142
|
+
userId: 'user-123',
|
|
143
|
+
});
|
|
144
|
+
|
|
145
|
+
// Obtener espacios de trabajo específicos del usuario (por connectionId)
|
|
146
|
+
const specificUserWorkspaces = await widgetsSDK.getUserWorkspaces({
|
|
147
|
+
connectionId: 'connection-123',
|
|
148
|
+
projectId: 'project-123',
|
|
149
|
+
});
|
|
150
|
+
|
|
151
|
+
// Obtener espacios de trabajo por ID de proyecto
|
|
152
|
+
const projectWorkspaces = await widgetsSDK.getWorkspacesByProjectId({
|
|
153
|
+
projectId: 'project-123',
|
|
154
|
+
});
|
|
155
|
+
|
|
156
|
+
console.log('Espacios de trabajo:', allWorkspaces);
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
#### Obtener Detalles del Espacio de Trabajo
|
|
160
|
+
|
|
161
|
+
```typescript
|
|
162
|
+
const workspaceDetails = await widgetsSDK.getWorkspace({
|
|
163
|
+
workspaceId: 'workspace-123',
|
|
164
|
+
});
|
|
165
|
+
|
|
166
|
+
console.log('Detalles del workspace:', workspaceDetails);
|
|
167
|
+
console.log('Widgets en el workspace:', workspaceDetails.widgets);
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
#### Actualizar Espacio de Trabajo
|
|
171
|
+
|
|
172
|
+
```typescript
|
|
173
|
+
const updatedWorkspace = await widgetsSDK.updateWorkspace({
|
|
174
|
+
id: 'workspace-123',
|
|
175
|
+
name: 'Dashboard Actualizado',
|
|
176
|
+
description: 'Nueva descripción del espacio de trabajo',
|
|
177
|
+
});
|
|
178
|
+
|
|
179
|
+
console.log('Espacio de trabajo actualizado:', updatedWorkspace);
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
#### Duplicar Espacio de Trabajo
|
|
183
|
+
|
|
184
|
+
```typescript
|
|
185
|
+
const duplicatedWorkspace = await widgetsSDK.duplicateWorkspace({
|
|
186
|
+
id: 'workspace-123',
|
|
187
|
+
name: 'Copia de Mi Dashboard',
|
|
188
|
+
});
|
|
189
|
+
|
|
190
|
+
console.log('Espacio de trabajo duplicado:', duplicatedWorkspace);
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
#### Eliminar Espacio de Trabajo
|
|
194
|
+
|
|
195
|
+
```typescript
|
|
196
|
+
const result = await widgetsSDK.deleteWorkspace({
|
|
197
|
+
id: 'workspace-123',
|
|
198
|
+
});
|
|
199
|
+
|
|
200
|
+
console.log('Resultado:', result); // ID del workspace eliminado
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
### 🎯 Gestión de Widgets
|
|
204
|
+
|
|
205
|
+
#### Crear Widget
|
|
206
|
+
|
|
207
|
+
```typescript
|
|
208
|
+
// Widget de gráfico
|
|
209
|
+
const chartWidget = await widgetsSDK.createWidget({
|
|
210
|
+
workspaceId: 'workspace-123',
|
|
211
|
+
type: 'CHART',
|
|
212
|
+
name: 'Gráfico de AAPL',
|
|
213
|
+
instruments: [
|
|
214
|
+
{
|
|
215
|
+
uniqueKey: 'AAPL_US',
|
|
216
|
+
symbol: 'AAPL',
|
|
217
|
+
},
|
|
218
|
+
],
|
|
219
|
+
});
|
|
220
|
+
|
|
221
|
+
// Widget de tabla dinámica
|
|
222
|
+
const tableWidget = await widgetsSDK.createWidget({
|
|
223
|
+
workspaceId: 'workspace-123',
|
|
224
|
+
type: 'DYNAMIC_TABLE',
|
|
225
|
+
name: 'Tabla de Precios',
|
|
226
|
+
instruments: [
|
|
227
|
+
{
|
|
228
|
+
uniqueKey: 'AAPL_US',
|
|
229
|
+
symbol: 'AAPL',
|
|
230
|
+
},
|
|
231
|
+
{
|
|
232
|
+
uniqueKey: 'MSFT_US',
|
|
233
|
+
symbol: 'MSFT',
|
|
234
|
+
},
|
|
235
|
+
],
|
|
236
|
+
});
|
|
237
|
+
|
|
238
|
+
// Widget de lista de noticias
|
|
239
|
+
const newsWidget = await widgetsSDK.createWidget({
|
|
240
|
+
workspaceId: 'workspace-123',
|
|
241
|
+
type: 'NEWS_LIST',
|
|
242
|
+
name: 'Noticias Financieras',
|
|
243
|
+
newsConfiguration: {
|
|
244
|
+
period: 12,
|
|
245
|
+
listType: 9,
|
|
246
|
+
limit: 20,
|
|
247
|
+
offset: 0,
|
|
248
|
+
sourcesId: '',
|
|
249
|
+
newsTypeId: '',
|
|
250
|
+
},
|
|
251
|
+
sizes: {
|
|
252
|
+
create: {
|
|
253
|
+
node: {
|
|
254
|
+
width: 12,
|
|
255
|
+
height: 18,
|
|
256
|
+
minWidth: 12,
|
|
257
|
+
minHeight: 12,
|
|
258
|
+
maxWidth: 18,
|
|
259
|
+
maxHeight: 18,
|
|
260
|
+
x: 0,
|
|
261
|
+
y: 0,
|
|
262
|
+
},
|
|
263
|
+
},
|
|
264
|
+
},
|
|
265
|
+
});
|
|
266
|
+
|
|
267
|
+
console.log('Widget creado:', chartWidget);
|
|
268
|
+
```
|
|
269
|
+
|
|
270
|
+
#### Tipos de Widgets Disponibles
|
|
271
|
+
|
|
272
|
+
```typescript
|
|
273
|
+
// Tipos soportados:
|
|
274
|
+
// - 'FINANCIAL_STATEMENTS': Estados financieros
|
|
275
|
+
// - 'DYNAMIC_TABLE': Tabla dinámica
|
|
276
|
+
// - 'PREDEFINED_TABLE': Tabla predefinida
|
|
277
|
+
// - 'NEWS_LIST': Lista de noticias
|
|
278
|
+
// - 'TICKER_TAPE': Cinta de ticker
|
|
279
|
+
// - 'CHART': Gráfico
|
|
280
|
+
// - 'CUSTOM_TABLE': Tabla personalizada
|
|
281
|
+
// - 'SHORT_SALES': Ventas en corto
|
|
282
|
+
// - 'MARKET_TOTAL': Total de mercado
|
|
283
|
+
// - 'TRADED_PACKAGES': Paquetes negociados
|
|
284
|
+
// - 'BROKERAGE_TRADES': Operaciones de corretaje
|
|
285
|
+
// - 'BROKERAGE_CONCENTRATION': Concentración de corretaje
|
|
286
|
+
// - 'BROKERAGE_PARTICIPATION': Participación de corretaje
|
|
287
|
+
// - 'DECREED_RIGHTS_SEARCHER': Buscador de derechos decretados
|
|
288
|
+
// - 'INDICES_COMPONENTS': Componentes de índices
|
|
289
|
+
```
|
|
290
|
+
|
|
291
|
+
#### Actualizar Instrumentos del Widget
|
|
292
|
+
|
|
293
|
+
```typescript
|
|
294
|
+
const updatedInstruments = await widgetsSDK.updateWidgetInstruments({
|
|
295
|
+
widgetId: 'widget-123',
|
|
296
|
+
instruments: {
|
|
297
|
+
keys: ['AAPL_US', 'MSFT_US', 'GOOGL_US'],
|
|
298
|
+
},
|
|
299
|
+
});
|
|
300
|
+
|
|
301
|
+
console.log('Instrumentos actualizados:', updatedInstruments);
|
|
302
|
+
```
|
|
303
|
+
|
|
304
|
+
#### Actualizar Configuración del Gráfico del Widget
|
|
305
|
+
|
|
306
|
+
```typescript
|
|
307
|
+
const result = await widgetsSDK.updateWidgetChart({
|
|
308
|
+
widgetId: 'widget-123',
|
|
309
|
+
chartConfiguration: {
|
|
310
|
+
id: 'chart-config-123',
|
|
311
|
+
globalConfiguration: JSON.stringify({
|
|
312
|
+
// Configuración del gráfico
|
|
313
|
+
type: 'line',
|
|
314
|
+
colors: ['#FF5733', '#33FF57'],
|
|
315
|
+
}),
|
|
316
|
+
},
|
|
317
|
+
});
|
|
318
|
+
|
|
319
|
+
console.log('Configuración actualizada:', result);
|
|
320
|
+
```
|
|
321
|
+
|
|
322
|
+
#### Duplicar Widget
|
|
323
|
+
|
|
324
|
+
```typescript
|
|
325
|
+
const duplicatedWidget = await widgetsSDK.duplicateWidget({
|
|
326
|
+
widgetId: 'widget-123',
|
|
327
|
+
workspaceId: 'workspace-456',
|
|
328
|
+
name: 'Copia del Widget',
|
|
329
|
+
});
|
|
330
|
+
|
|
331
|
+
console.log('Widget duplicado:', duplicatedWidget);
|
|
332
|
+
```
|
|
333
|
+
|
|
334
|
+
#### Eliminar Widget
|
|
335
|
+
|
|
336
|
+
```typescript
|
|
337
|
+
const result = await widgetsSDK.deleteWidget('widget-123');
|
|
338
|
+
console.log('Resultado:', result); // ID del widget eliminado
|
|
339
|
+
```
|
|
340
|
+
|
|
341
|
+
#### Obtener Widgets del Proyecto
|
|
342
|
+
|
|
343
|
+
```typescript
|
|
344
|
+
const projectWidgets = await widgetsSDK.getProjectWidgets({
|
|
345
|
+
projectId: 'project-123',
|
|
346
|
+
});
|
|
347
|
+
|
|
348
|
+
console.log('Widgets del proyecto:', projectWidgets);
|
|
349
|
+
console.log('Widgets por workspace:', projectWidgets.workspaces);
|
|
350
|
+
```
|
|
351
|
+
|
|
352
|
+
#### Obtener Widgets del Usuario
|
|
353
|
+
|
|
354
|
+
```typescript
|
|
355
|
+
const userWidgets = await widgetsSDK.getUserWidgets({
|
|
356
|
+
id: 'user-123',
|
|
357
|
+
});
|
|
358
|
+
|
|
359
|
+
console.log('Widgets del usuario:', userWidgets);
|
|
360
|
+
console.log('Total de widgets:', userWidgets.widgets.length);
|
|
361
|
+
```
|
|
362
|
+
|
|
363
|
+
### 🔧 Gestión de Instrumentos
|
|
364
|
+
|
|
365
|
+
#### Crear Instrumento Personalizado
|
|
366
|
+
|
|
367
|
+
```typescript
|
|
368
|
+
const newInstrument = await widgetsSDK.createInstrument({
|
|
369
|
+
symbol: 'CUSTOM_STOCK',
|
|
370
|
+
uniqueKey: 'CUSTOM_001',
|
|
371
|
+
widgetId: 'widget-123',
|
|
372
|
+
});
|
|
373
|
+
|
|
374
|
+
console.log('Instrumento creado:', newInstrument);
|
|
375
|
+
```
|
|
376
|
+
|
|
377
|
+
#### Obtener Lista de Instrumentos
|
|
378
|
+
|
|
379
|
+
```typescript
|
|
380
|
+
const instruments = await widgetsSDK.getInstruments({
|
|
381
|
+
workspaceId: 'workspace-123',
|
|
382
|
+
// Parámetros opcionales de paginación
|
|
383
|
+
limit: 50,
|
|
384
|
+
offset: 0,
|
|
385
|
+
});
|
|
386
|
+
|
|
387
|
+
console.log('Total de instrumentos:', instruments.total);
|
|
388
|
+
console.log('Instrumentos:', instruments.fields);
|
|
389
|
+
```
|
|
390
|
+
|
|
391
|
+
#### Eliminar Instrumento
|
|
392
|
+
|
|
393
|
+
```typescript
|
|
394
|
+
const result = await widgetsSDK.deleteInstrument('instrument-id-123');
|
|
395
|
+
console.log('Resultado:', result); // ID del instrumento eliminado
|
|
396
|
+
```
|
|
397
|
+
|
|
398
|
+
## 🔧 Ejemplos Prácticos Completos
|
|
399
|
+
|
|
400
|
+
### 📱 Dashboard Completo de Widgets
|
|
401
|
+
|
|
402
|
+
```typescript
|
|
403
|
+
import InfoselWidgets from '@infosel-sdk/widgets';
|
|
404
|
+
import { InfoselSdkManager, AuthConfigurationBuilder } from '@infosel-sdk/core';
|
|
405
|
+
|
|
406
|
+
class WidgetsDashboard {
|
|
407
|
+
private widgetsSDK: InfoselWidgets;
|
|
408
|
+
|
|
409
|
+
constructor() {
|
|
410
|
+
this.initializeSDK();
|
|
411
|
+
}
|
|
412
|
+
|
|
413
|
+
private async initializeSDK() {
|
|
414
|
+
const authConfig = AuthConfigurationBuilder.keyCloak()
|
|
415
|
+
.withRealm('hub')
|
|
416
|
+
.withEnvironment('qa')
|
|
417
|
+
.withCredentials({
|
|
418
|
+
grant_type: 'client_credentials',
|
|
419
|
+
client_id: process.env.KEYCLOAK_CLIENT_ID!,
|
|
420
|
+
client_secret: process.env.KEYCLOAK_CLIENT_SECRET!,
|
|
421
|
+
})
|
|
422
|
+
.build();
|
|
423
|
+
|
|
424
|
+
const sdkManager = InfoselSdkManager.initWithConfiguration({
|
|
425
|
+
authConfiguration: authConfig,
|
|
426
|
+
});
|
|
427
|
+
|
|
428
|
+
this.widgetsSDK = InfoselWidgets.init({ sdkManager });
|
|
429
|
+
}
|
|
430
|
+
|
|
431
|
+
// Crear dashboard completo
|
|
432
|
+
async createCompleteDashboard(userId: string, projectId: string) {
|
|
433
|
+
try {
|
|
434
|
+
// 1. Crear espacio de trabajo
|
|
435
|
+
const workspace = await this.widgetsSDK.createWorkspace({
|
|
436
|
+
name: 'Dashboard de Trading',
|
|
437
|
+
description: 'Dashboard completo para análisis de mercado',
|
|
438
|
+
userId,
|
|
439
|
+
projectId,
|
|
440
|
+
});
|
|
441
|
+
|
|
442
|
+
// 2. Crear widget de gráfico para AAPL
|
|
443
|
+
const chartWidget = await this.widgetsSDK.createWidget({
|
|
444
|
+
workspaceId: workspace.id,
|
|
445
|
+
type: 'CHART',
|
|
446
|
+
name: 'Gráfico AAPL',
|
|
447
|
+
instruments: [{ uniqueKey: 'AAPL_US', symbol: 'AAPL' }],
|
|
448
|
+
});
|
|
449
|
+
|
|
450
|
+
// 3. Crear widget de tabla para múltiples instrumentos
|
|
451
|
+
const tableWidget = await this.widgetsSDK.createWidget({
|
|
452
|
+
workspaceId: workspace.id,
|
|
453
|
+
type: 'DYNAMIC_TABLE',
|
|
454
|
+
name: 'Portafolio',
|
|
455
|
+
instruments: [
|
|
456
|
+
{ uniqueKey: 'AAPL_US', symbol: 'AAPL' },
|
|
457
|
+
{ uniqueKey: 'MSFT_US', symbol: 'MSFT' },
|
|
458
|
+
{ uniqueKey: 'GOOGL_US', symbol: 'GOOGL' },
|
|
459
|
+
],
|
|
460
|
+
});
|
|
461
|
+
|
|
462
|
+
// 4. Crear widget de noticias
|
|
463
|
+
const newsWidget = await this.widgetsSDK.createWidget({
|
|
464
|
+
workspaceId: workspace.id,
|
|
465
|
+
type: 'NEWS_LIST',
|
|
466
|
+
name: 'Noticias Financieras',
|
|
467
|
+
newsConfiguration: {
|
|
468
|
+
period: 12,
|
|
469
|
+
listType: 9,
|
|
470
|
+
limit: 20,
|
|
471
|
+
offset: 0,
|
|
472
|
+
sourcesId: '',
|
|
473
|
+
newsTypeId: '',
|
|
474
|
+
},
|
|
475
|
+
});
|
|
476
|
+
|
|
477
|
+
return {
|
|
478
|
+
workspace,
|
|
479
|
+
widgets: [chartWidget, tableWidget, newsWidget],
|
|
480
|
+
};
|
|
481
|
+
} catch (error) {
|
|
482
|
+
console.error('Error creando dashboard:', error);
|
|
483
|
+
throw error;
|
|
484
|
+
}
|
|
485
|
+
}
|
|
486
|
+
|
|
487
|
+
// Duplicar workspace completo
|
|
488
|
+
async duplicateWorkspaceWithWidgets(workspaceId: string, newName: string) {
|
|
489
|
+
try {
|
|
490
|
+
// 1. Obtener workspace original
|
|
491
|
+
const originalWorkspace = await this.widgetsSDK.getWorkspace({
|
|
492
|
+
workspaceId,
|
|
493
|
+
});
|
|
494
|
+
|
|
495
|
+
// 2. Duplicar workspace
|
|
496
|
+
const duplicatedWorkspace = await this.widgetsSDK.duplicateWorkspace({
|
|
497
|
+
id: workspaceId,
|
|
498
|
+
name: newName,
|
|
499
|
+
});
|
|
500
|
+
|
|
501
|
+
return duplicatedWorkspace;
|
|
502
|
+
} catch (error) {
|
|
503
|
+
console.error('Error duplicando workspace:', error);
|
|
504
|
+
throw error;
|
|
505
|
+
}
|
|
506
|
+
}
|
|
507
|
+
}
|
|
508
|
+
|
|
509
|
+
// Uso del dashboard
|
|
510
|
+
async function main() {
|
|
511
|
+
const dashboard = new WidgetsDashboard();
|
|
512
|
+
|
|
513
|
+
try {
|
|
514
|
+
// Crear dashboard completo
|
|
515
|
+
const result = await dashboard.createCompleteDashboard(
|
|
516
|
+
'user-123',
|
|
517
|
+
'project-123',
|
|
518
|
+
);
|
|
519
|
+
console.log('Dashboard creado:', result);
|
|
520
|
+
|
|
521
|
+
// Duplicar workspace
|
|
522
|
+
const duplicated = await dashboard.duplicateWorkspaceWithWidgets(
|
|
523
|
+
result.workspace.id,
|
|
524
|
+
'Copia del Dashboard',
|
|
525
|
+
);
|
|
526
|
+
console.log('Workspace duplicado:', duplicated);
|
|
527
|
+
} catch (error) {
|
|
528
|
+
console.error('Error en main:', error);
|
|
529
|
+
}
|
|
530
|
+
}
|
|
531
|
+
|
|
532
|
+
main();
|
|
533
|
+
```
|
|
534
|
+
|
|
535
|
+
### 🎯 Gestor de Widgets Avanzado
|
|
536
|
+
|
|
537
|
+
```typescript
|
|
538
|
+
class AdvancedWidgetManager {
|
|
539
|
+
private widgetsSDK: InfoselWidgets;
|
|
540
|
+
|
|
541
|
+
constructor(widgetsSDK: InfoselWidgets) {
|
|
542
|
+
this.widgetsSDK = widgetsSDK;
|
|
543
|
+
}
|
|
544
|
+
|
|
545
|
+
// Crear widget de gráfico con configuración
|
|
546
|
+
async createChartWidget(
|
|
547
|
+
workspaceId: string,
|
|
548
|
+
instrument: string,
|
|
549
|
+
name: string,
|
|
550
|
+
) {
|
|
551
|
+
try {
|
|
552
|
+
const widget = await this.widgetsSDK.createWidget({
|
|
553
|
+
workspaceId,
|
|
554
|
+
type: 'CHART',
|
|
555
|
+
name,
|
|
556
|
+
instruments: [{ uniqueKey: instrument, symbol: instrument }],
|
|
557
|
+
sizes: {
|
|
558
|
+
create: {
|
|
559
|
+
node: {
|
|
560
|
+
width: 800,
|
|
561
|
+
height: 600,
|
|
562
|
+
minWidth: 400,
|
|
563
|
+
minHeight: 300,
|
|
564
|
+
maxWidth: 1200,
|
|
565
|
+
maxHeight: 900,
|
|
566
|
+
x: 0,
|
|
567
|
+
y: 0,
|
|
568
|
+
},
|
|
569
|
+
},
|
|
570
|
+
},
|
|
571
|
+
});
|
|
572
|
+
|
|
573
|
+
return widget;
|
|
574
|
+
} catch (error) {
|
|
575
|
+
console.error('Error creando widget de gráfico:', error);
|
|
576
|
+
throw error;
|
|
577
|
+
}
|
|
578
|
+
}
|
|
579
|
+
|
|
580
|
+
// Crear widget de tabla con múltiples instrumentos
|
|
581
|
+
async createTableWidget(
|
|
582
|
+
workspaceId: string,
|
|
583
|
+
instruments: string[],
|
|
584
|
+
name: string,
|
|
585
|
+
) {
|
|
586
|
+
try {
|
|
587
|
+
const widget = await this.widgetsSDK.createWidget({
|
|
588
|
+
workspaceId,
|
|
589
|
+
type: 'DYNAMIC_TABLE',
|
|
590
|
+
name,
|
|
591
|
+
instruments: instruments.map(instrument => ({
|
|
592
|
+
uniqueKey: instrument,
|
|
593
|
+
symbol: instrument,
|
|
594
|
+
})),
|
|
595
|
+
});
|
|
596
|
+
|
|
597
|
+
return widget;
|
|
598
|
+
} catch (error) {
|
|
599
|
+
console.error('Error creando widget de tabla:', error);
|
|
600
|
+
throw error;
|
|
601
|
+
}
|
|
602
|
+
}
|
|
603
|
+
|
|
604
|
+
// Actualizar instrumentos de un widget
|
|
605
|
+
async updateWidgetInstruments(widgetId: string, instruments: string[]) {
|
|
606
|
+
try {
|
|
607
|
+
const updatedInstruments = await this.widgetsSDK.updateWidgetInstruments({
|
|
608
|
+
widgetId,
|
|
609
|
+
instruments: { keys: instruments },
|
|
610
|
+
});
|
|
611
|
+
|
|
612
|
+
return updatedInstruments;
|
|
613
|
+
} catch (error) {
|
|
614
|
+
console.error('Error actualizando instrumentos:', error);
|
|
615
|
+
throw error;
|
|
616
|
+
}
|
|
617
|
+
}
|
|
618
|
+
|
|
619
|
+
// Duplicar widget a otro workspace
|
|
620
|
+
async duplicateWidgetToWorkspace(
|
|
621
|
+
widgetId: string,
|
|
622
|
+
targetWorkspaceId: string,
|
|
623
|
+
newName?: string,
|
|
624
|
+
) {
|
|
625
|
+
try {
|
|
626
|
+
const duplicatedWidget = await this.widgetsSDK.duplicateWidget({
|
|
627
|
+
widgetId,
|
|
628
|
+
workspaceId: targetWorkspaceId,
|
|
629
|
+
name: newName || `Copia de Widget ${widgetId}`,
|
|
630
|
+
});
|
|
631
|
+
|
|
632
|
+
return duplicatedWidget;
|
|
633
|
+
} catch (error) {
|
|
634
|
+
console.error('Error duplicando widget:', error);
|
|
635
|
+
throw error;
|
|
636
|
+
}
|
|
637
|
+
}
|
|
638
|
+
|
|
639
|
+
// Eliminar widget
|
|
640
|
+
async deleteWidget(widgetId: string) {
|
|
641
|
+
try {
|
|
642
|
+
const result = await this.widgetsSDK.deleteWidget(widgetId);
|
|
643
|
+
return result;
|
|
644
|
+
} catch (error) {
|
|
645
|
+
console.error('Error eliminando widget:', error);
|
|
646
|
+
throw error;
|
|
647
|
+
}
|
|
648
|
+
}
|
|
649
|
+
}
|
|
650
|
+
|
|
651
|
+
// Uso del gestor de widgets
|
|
652
|
+
const widgetManager = new AdvancedWidgetManager(widgetsSDK);
|
|
653
|
+
|
|
654
|
+
// Crear widgets en un workspace
|
|
655
|
+
async function setupWorkspaceWidgets(workspaceId: string) {
|
|
656
|
+
try {
|
|
657
|
+
// Widget de gráfico para AAPL
|
|
658
|
+
const chartWidget = await widgetManager.createChartWidget(
|
|
659
|
+
workspaceId,
|
|
660
|
+
'AAPL_US',
|
|
661
|
+
'Gráfico de Apple',
|
|
662
|
+
);
|
|
663
|
+
|
|
664
|
+
// Widget de tabla para portafolio
|
|
665
|
+
const tableWidget = await widgetManager.createTableWidget(
|
|
666
|
+
workspaceId,
|
|
667
|
+
['AAPL_US', 'MSFT_US', 'GOOGL_US'],
|
|
668
|
+
'Portafolio Principal',
|
|
669
|
+
);
|
|
670
|
+
|
|
671
|
+
console.log('Widgets creados:', { chartWidget, tableWidget });
|
|
672
|
+
return { chartWidget, tableWidget };
|
|
673
|
+
} catch (error) {
|
|
674
|
+
console.error('Error configurando widgets:', error);
|
|
675
|
+
throw error;
|
|
676
|
+
}
|
|
677
|
+
}
|
|
678
|
+
```
|
|
679
|
+
|
|
680
|
+
### 🏢 Gestor de Espacios de Trabajo
|
|
681
|
+
|
|
682
|
+
```typescript
|
|
683
|
+
class WorkspaceManager {
|
|
684
|
+
private widgetsSDK: InfoselWidgets;
|
|
685
|
+
|
|
686
|
+
constructor(widgetsSDK: InfoselWidgets) {
|
|
687
|
+
this.widgetsSDK = widgetsSDK;
|
|
688
|
+
}
|
|
689
|
+
|
|
690
|
+
// Crear workspace con widgets iniciales
|
|
691
|
+
async createWorkspaceWithWidgets(
|
|
692
|
+
name: string,
|
|
693
|
+
description: string,
|
|
694
|
+
userId: string,
|
|
695
|
+
projectId: string,
|
|
696
|
+
initialInstruments: string[] = [],
|
|
697
|
+
) {
|
|
698
|
+
try {
|
|
699
|
+
// 1. Crear workspace
|
|
700
|
+
const workspace = await this.widgetsSDK.createWorkspace({
|
|
701
|
+
name,
|
|
702
|
+
description,
|
|
703
|
+
userId,
|
|
704
|
+
projectId,
|
|
705
|
+
});
|
|
706
|
+
|
|
707
|
+
// 2. Crear widgets iniciales si hay instrumentos
|
|
708
|
+
const widgets = [];
|
|
709
|
+
if (initialInstruments.length > 0) {
|
|
710
|
+
const chartWidget = await this.widgetsSDK.createWidget({
|
|
711
|
+
workspaceId: workspace.id,
|
|
712
|
+
type: 'CHART',
|
|
713
|
+
name: 'Gráfico Principal',
|
|
714
|
+
instruments: initialInstruments.map(instrument => ({
|
|
715
|
+
uniqueKey: instrument,
|
|
716
|
+
symbol: instrument,
|
|
717
|
+
})),
|
|
718
|
+
});
|
|
719
|
+
widgets.push(chartWidget);
|
|
720
|
+
}
|
|
721
|
+
|
|
722
|
+
return { workspace, widgets };
|
|
723
|
+
} catch (error) {
|
|
724
|
+
console.error('Error creando workspace con widgets:', error);
|
|
725
|
+
throw error;
|
|
726
|
+
}
|
|
727
|
+
}
|
|
728
|
+
|
|
729
|
+
// Obtener todos los workspaces de un usuario
|
|
730
|
+
async getUserWorkspaces(userId: string) {
|
|
731
|
+
try {
|
|
732
|
+
const workspaces = await this.widgetsSDK.getWorkspacesByUser({
|
|
733
|
+
userId,
|
|
734
|
+
});
|
|
735
|
+
|
|
736
|
+
return workspaces;
|
|
737
|
+
} catch (error) {
|
|
738
|
+
console.error('Error obteniendo workspaces del usuario:', error);
|
|
739
|
+
throw error;
|
|
740
|
+
}
|
|
741
|
+
}
|
|
742
|
+
|
|
743
|
+
// Actualizar workspace
|
|
744
|
+
async updateWorkspace(
|
|
745
|
+
workspaceId: string,
|
|
746
|
+
updates: { name?: string; description?: string },
|
|
747
|
+
) {
|
|
748
|
+
try {
|
|
749
|
+
const updatedWorkspace = await this.widgetsSDK.updateWorkspace({
|
|
750
|
+
id: workspaceId,
|
|
751
|
+
...updates,
|
|
752
|
+
});
|
|
753
|
+
|
|
754
|
+
return updatedWorkspace;
|
|
755
|
+
} catch (error) {
|
|
756
|
+
console.error('Error actualizando workspace:', error);
|
|
757
|
+
throw error;
|
|
758
|
+
}
|
|
759
|
+
}
|
|
760
|
+
|
|
761
|
+
// Duplicar workspace completo
|
|
762
|
+
async duplicateWorkspace(workspaceId: string, newName: string) {
|
|
763
|
+
try {
|
|
764
|
+
const duplicatedWorkspace = await this.widgetsSDK.duplicateWorkspace({
|
|
765
|
+
id: workspaceId,
|
|
766
|
+
name: newName,
|
|
767
|
+
});
|
|
768
|
+
|
|
769
|
+
return duplicatedWorkspace;
|
|
770
|
+
} catch (error) {
|
|
771
|
+
console.error('Error duplicando workspace:', error);
|
|
772
|
+
throw error;
|
|
773
|
+
}
|
|
774
|
+
}
|
|
775
|
+
|
|
776
|
+
// Eliminar workspace
|
|
777
|
+
async deleteWorkspace(workspaceId: string) {
|
|
778
|
+
try {
|
|
779
|
+
const result = await this.widgetsSDK.deleteWorkspace({
|
|
780
|
+
id: workspaceId,
|
|
781
|
+
});
|
|
782
|
+
|
|
783
|
+
return result;
|
|
784
|
+
} catch (error) {
|
|
785
|
+
console.error('Error eliminando workspace:', error);
|
|
786
|
+
throw error;
|
|
787
|
+
}
|
|
788
|
+
}
|
|
789
|
+
}
|
|
790
|
+
|
|
791
|
+
// Uso del gestor de workspaces
|
|
792
|
+
const workspaceManager = new WorkspaceManager(widgetsSDK);
|
|
793
|
+
|
|
794
|
+
// Crear workspace con widgets iniciales
|
|
795
|
+
async function createUserDashboard(userId: string, projectId: string) {
|
|
796
|
+
try {
|
|
797
|
+
const result = await workspaceManager.createWorkspaceWithWidgets(
|
|
798
|
+
'Mi Dashboard Personal',
|
|
799
|
+
'Dashboard para análisis de mercado',
|
|
800
|
+
userId,
|
|
801
|
+
projectId,
|
|
802
|
+
['AAPL_US', 'MSFT_US', 'GOOGL_US'],
|
|
803
|
+
);
|
|
804
|
+
|
|
805
|
+
console.log('Dashboard creado:', result);
|
|
806
|
+
return result;
|
|
807
|
+
} catch (error) {
|
|
808
|
+
console.error('Error creando dashboard:', error);
|
|
809
|
+
throw error;
|
|
810
|
+
}
|
|
811
|
+
}
|
|
812
|
+
```
|
|
813
|
+
|
|
814
|
+
## 📚 Referencia de API
|
|
815
|
+
|
|
816
|
+
### Clases Principales
|
|
817
|
+
|
|
818
|
+
#### `InfoselWidgets`
|
|
819
|
+
|
|
820
|
+
Punto de entrada principal para el SDK de Widgets. Se inicializa usando el método estático `init()` que recibe el `InfoselSdkManager`.
|
|
821
|
+
|
|
822
|
+
#### `InfoselSdkManager`
|
|
823
|
+
|
|
824
|
+
Gestor central del SDK que maneja la configuración, autenticación y modo de operación. Se inicializa usando el método estático `initWithConfiguration()` con configuración moderna o `init()` con configuración legacy.
|
|
825
|
+
|
|
826
|
+
#### `AuthConfigurationBuilder`
|
|
827
|
+
|
|
828
|
+
Builder para crear configuraciones de autenticación validadas y centralizadas. Proporciona una API fluida para configurar autenticación KeyCloak y basada en tokens.
|
|
829
|
+
|
|
830
|
+
#### `WidgetsMapper`
|
|
831
|
+
|
|
832
|
+
Mapeador de datos para convertir entre modelos de API y dominio.
|
|
833
|
+
|
|
834
|
+
### Métodos Disponibles
|
|
835
|
+
|
|
836
|
+
#### 🏢 Gestión de Espacios de Trabajo
|
|
837
|
+
|
|
838
|
+
| Método | Descripción | Parámetros |
|
|
839
|
+
| ---------------------------- | --------------------------------------------------- | ---------------------------- |
|
|
840
|
+
| `createWorkspace()` | Crear nuevo espacio de trabajo | `CreateWorkspaceRequest` |
|
|
841
|
+
| `getWorkspaces()` | Obtener espacios de trabajo de un proyecto | `GetWorkspacesRequest` |
|
|
842
|
+
| `getWorkspacesByUser()` | Obtener espacios de trabajo del usuario | `GetWorkspacesByUserRequest` |
|
|
843
|
+
| `getUserWorkspaces()` | Obtener espacios de trabajo específicos del usuario | `GetUserWorkspacesRequest` |
|
|
844
|
+
| `getWorkspacesByProjectId()` | Obtener espacios de trabajo por ID de proyecto | `GetWorkspacesRequest` |
|
|
845
|
+
| `getWorkspace()` | Obtener detalles del workspace | `GetWorkspaceRequest` |
|
|
846
|
+
| `updateWorkspace()` | Actualizar espacio de trabajo | `UpdateWorkspaceRequest` |
|
|
847
|
+
| `duplicateWorkspace()` | Duplicar espacio de trabajo | `DuplicateWorkspaceRequest` |
|
|
848
|
+
| `deleteWorkspace()` | Eliminar espacio de trabajo | `DeleteWorkspaceRequest` |
|
|
849
|
+
|
|
850
|
+
#### 🎯 Gestión de Widgets
|
|
851
|
+
|
|
852
|
+
| Método | Descripción | Parámetros |
|
|
853
|
+
| --------------------------- | ------------------------------------ | -------------------------------- |
|
|
854
|
+
| `createWidget()` | Crear nuevo widget | `CreateWidgetRequest` |
|
|
855
|
+
| `duplicateWidget()` | Duplicar widget | `DuplicateWidgetRequest` |
|
|
856
|
+
| `updateWidgetInstruments()` | Actualizar instrumentos del widget | `UpdateWidgetInstrumentsRequest` |
|
|
857
|
+
| `updateWidgetChart()` | Actualizar configuración del gráfico | `UpdateWidgetChartRequest` |
|
|
858
|
+
| `deleteWidget()` | Eliminar widget | `string` (ID) |
|
|
859
|
+
| `getProjectWidgets()` | Obtener widgets del proyecto | `GetProjectWidgetsRequest` |
|
|
860
|
+
| `getUserWidgets()` | Obtener widgets del usuario | `GetUserWidgetsRequest` |
|
|
861
|
+
|
|
862
|
+
#### 🔧 Gestión de Instrumentos
|
|
863
|
+
|
|
864
|
+
| Método | Descripción | Parámetros |
|
|
865
|
+
| -------------------- | ----------------------------- | ------------------------- |
|
|
866
|
+
| `createInstrument()` | Crear nuevo instrumento | `CreateInstrumentRequest` |
|
|
867
|
+
| `deleteInstrument()` | Eliminar instrumento | `string` (ID) |
|
|
868
|
+
| `getInstruments()` | Obtener lista de instrumentos | `GetInstrumentsRequest` |
|
|
869
|
+
|
|
870
|
+
### Entidades
|
|
871
|
+
|
|
872
|
+
#### Entidades Principales
|
|
873
|
+
|
|
874
|
+
- `Widget`: Configuración y datos del widget
|
|
875
|
+
- `Workspace`: Espacio de trabajo del usuario
|
|
876
|
+
- `Instrument`: Representación de instrumento financiero
|
|
877
|
+
- `WorkspaceWidgets`: Workspace con sus widgets asociados
|
|
878
|
+
- `UserWidgets`: Widgets del usuario
|
|
879
|
+
- `UserWorkspaces`: Espacios de trabajo del usuario
|
|
880
|
+
- `ProjectWidgetsContainer`: Contenedor de widgets del proyecto
|
|
881
|
+
- `WorkspacesContainer`: Contenedor de espacios de trabajo
|
|
882
|
+
- `InstrumentsResponse`: Respuesta con lista de instrumentos
|
|
883
|
+
|
|
884
|
+
#### Entidades de Solicitud/Respuesta
|
|
885
|
+
|
|
886
|
+
- `CreateWidgetRequest`: Parámetros de creación de widget
|
|
887
|
+
- `CreateWorkspaceRequest`: Parámetros de creación de espacio de trabajo
|
|
888
|
+
- `CreateInstrumentRequest`: Parámetros de creación de instrumento
|
|
889
|
+
- `UpdateWidgetInstrumentsRequest`: Parámetros de actualización de instrumentos
|
|
890
|
+
- `UpdateWidgetChartRequest`: Parámetros de actualización de gráfico
|
|
891
|
+
- `UpdateWorkspaceRequest`: Parámetros de actualización de workspace
|
|
892
|
+
- `DuplicateWidgetRequest`: Parámetros de duplicación de widget
|
|
893
|
+
- `DuplicateWorkspaceRequest`: Parámetros de duplicación de workspace
|
|
894
|
+
- `DeleteWorkspaceRequest`: Parámetros de eliminación de workspace
|
|
895
|
+
- `GetWorkspaceRequest`: Parámetros para obtener workspace
|
|
896
|
+
- `GetWorkspacesRequest`: Parámetros para obtener workspaces
|
|
897
|
+
- `GetWorkspacesByUserRequest`: Parámetros para obtener workspaces por usuario
|
|
898
|
+
- `GetUserWorkspacesRequest`: Parámetros para obtener workspaces del usuario
|
|
899
|
+
- `GetUserWidgetsRequest`: Parámetros para obtener widgets del usuario
|
|
900
|
+
- `GetProjectWidgetsRequest`: Parámetros para obtener widgets del proyecto
|
|
901
|
+
- `GetInstrumentsRequest`: Parámetros para obtener instrumentos
|
|
902
|
+
|
|
903
|
+
#### Tipos de Widgets
|
|
904
|
+
|
|
905
|
+
- `FINANCIAL_STATEMENTS`: Estados financieros
|
|
906
|
+
- `DYNAMIC_TABLE`: Tabla dinámica con datos en tiempo real
|
|
907
|
+
- `PREDEFINED_TABLE`: Tabla predefinida con estructura fija
|
|
908
|
+
- `CUSTOM_TABLE`: Tabla personalizable
|
|
909
|
+
- `NEWS_LIST`: Lista de noticias financieras
|
|
910
|
+
- `TICKER_TAPE`: Cinta de ticker con precios
|
|
911
|
+
- `CHART`: Gráfico de precios y volúmenes
|
|
912
|
+
- `SHORT_SALES`: Ventas en corto
|
|
913
|
+
- `MARKET_TOTAL`: Total de mercado
|
|
914
|
+
- `TRADED_PACKAGES`: Paquetes negociados
|
|
915
|
+
- `BROKERAGE_TRADES`: Operaciones de corretaje
|
|
916
|
+
- `BROKERAGE_CONCENTRATION`: Concentración de corretaje
|
|
917
|
+
- `BROKERAGE_PARTICIPATION`: Participación de corretaje
|
|
918
|
+
- `DECREED_RIGHTS_SEARCHER`: Buscador de derechos decretados
|
|
919
|
+
- `INDICES_COMPONENTS`: Componentes de índices
|
|
920
|
+
|
|
921
|
+
## 🔗 Dependencias
|
|
922
|
+
|
|
923
|
+
- `@infosel-sdk/core`: Funcionalidad core del SDK (versión ^0.0.5)
|
|
924
|
+
- `dayjs`: Manejo de fechas y horas
|
|
925
|
+
- `tslib`: Biblioteca runtime de TypeScript
|
|
926
|
+
|
|
927
|
+
## 🆕 Novedades en Core v0.0.5
|
|
928
|
+
|
|
929
|
+
### ✨ Configuration Builder Pattern
|
|
930
|
+
|
|
931
|
+
- **Nueva API fluida** para configuración sin duplicaciones
|
|
932
|
+
- **Validaciones centralizadas** con mensajes de error descriptivos
|
|
933
|
+
- **Single source of truth** para configuración de realm
|
|
934
|
+
- **Compatibilidad hacia atrás** mantenida
|
|
935
|
+
|
|
936
|
+
### 🔧 Mejoras en Configuración
|
|
937
|
+
|
|
938
|
+
- **Configuración dinámica de realm** para múltiples ambientes
|
|
939
|
+
- **Validación de formatos** de realm, client_id y credenciales
|
|
940
|
+
- **Valores por defecto inteligentes** basados en el tipo de autenticación
|
|
941
|
+
- **Type safety mejorado** con TypeScript
|
|
942
|
+
|
|
943
|
+
## 🧪 Testing
|
|
944
|
+
|
|
945
|
+
### Pruebas Unitarias
|
|
946
|
+
|
|
947
|
+
```bash
|
|
948
|
+
# Ejecutar tests unitarios
|
|
949
|
+
npm test
|
|
950
|
+
|
|
951
|
+
# Ejecutar tests con cobertura
|
|
952
|
+
npm run test:coverage
|
|
953
|
+
```
|
|
954
|
+
|
|
955
|
+
## 📞 Soporte
|
|
956
|
+
|
|
957
|
+
Para soporte y preguntas, por favor contacta al equipo de desarrollo de Infosel.
|
|
958
|
+
|
|
959
|
+
## 🔗 Paquetes Relacionados
|
|
960
|
+
|
|
961
|
+
- `@infosel-sdk/core`: Funcionalidad core del SDK (versión ^0.0.5)
|
|
962
|
+
- `@infosel-sdk/markets`: SDK de mercados financieros
|
|
963
|
+
- `@infosel-sdk/news`: SDK de noticias y contenido
|
|
964
|
+
- `@infosel-sdk/securities`: SDK de valores y trading
|
|
965
|
+
|
|
966
|
+
---
|