@infosel-sdk/markets 1.2.0

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 (348) hide show
  1. package/CHANGELOG.md +90 -0
  2. package/README.md +996 -0
  3. package/package.json +52 -0
  4. package/src/__tests__/__mocks__/apis/charts-api.mock.d.ts +106 -0
  5. package/src/__tests__/__mocks__/apis/charts-api.mock.js +110 -0
  6. package/src/__tests__/__mocks__/apis/charts-api.mock.js.map +1 -0
  7. package/src/__tests__/__mocks__/apis/markets-api.mock.d.ts +148 -0
  8. package/src/__tests__/__mocks__/apis/markets-api.mock.js +121 -0
  9. package/src/__tests__/__mocks__/apis/markets-api.mock.js.map +1 -0
  10. package/src/__tests__/__mocks__/core/auth-provider.mock.d.ts +35 -0
  11. package/src/__tests__/__mocks__/core/auth-provider.mock.js +28 -0
  12. package/src/__tests__/__mocks__/core/auth-provider.mock.js.map +1 -0
  13. package/src/__tests__/__mocks__/core/graphql-client.mock.d.ts +36 -0
  14. package/src/__tests__/__mocks__/core/graphql-client.mock.js +60 -0
  15. package/src/__tests__/__mocks__/core/graphql-client.mock.js.map +1 -0
  16. package/src/__tests__/__mocks__/core/http-client.mock.d.ts +43 -0
  17. package/src/__tests__/__mocks__/core/http-client.mock.js +40 -0
  18. package/src/__tests__/__mocks__/core/http-client.mock.js.map +1 -0
  19. package/src/__tests__/__mocks__/core/sdk-manager.mock.d.ts +64 -0
  20. package/src/__tests__/__mocks__/core/sdk-manager.mock.js +46 -0
  21. package/src/__tests__/__mocks__/core/sdk-manager.mock.js.map +1 -0
  22. package/src/__tests__/__mocks__/core/storage.mock.d.ts +32 -0
  23. package/src/__tests__/__mocks__/core/storage.mock.js +35 -0
  24. package/src/__tests__/__mocks__/core/storage.mock.js.map +1 -0
  25. package/src/__tests__/__mocks__/index.d.ts +9 -0
  26. package/src/__tests__/__mocks__/index.js +16 -0
  27. package/src/__tests__/__mocks__/index.js.map +1 -0
  28. package/src/__tests__/e2e/config/auth.config.d.ts +44 -0
  29. package/src/__tests__/e2e/config/auth.config.js +217 -0
  30. package/src/__tests__/e2e/config/auth.config.js.map +1 -0
  31. package/src/__tests__/e2e/config/environment.config.d.ts +29 -0
  32. package/src/__tests__/e2e/config/environment.config.js +74 -0
  33. package/src/__tests__/e2e/config/environment.config.js.map +1 -0
  34. package/src/__tests__/e2e/fixtures/test-scenarios.d.ts +176 -0
  35. package/src/__tests__/e2e/fixtures/test-scenarios.js +181 -0
  36. package/src/__tests__/e2e/fixtures/test-scenarios.js.map +1 -0
  37. package/src/__tests__/e2e/helpers/assertion.helper.d.ts +68 -0
  38. package/src/__tests__/e2e/helpers/assertion.helper.js +181 -0
  39. package/src/__tests__/e2e/helpers/assertion.helper.js.map +1 -0
  40. package/src/__tests__/e2e/helpers/auth.helper.d.ts +56 -0
  41. package/src/__tests__/e2e/helpers/auth.helper.js +188 -0
  42. package/src/__tests__/e2e/helpers/auth.helper.js.map +1 -0
  43. package/src/__tests__/e2e/helpers/performance.helper.d.ts +85 -0
  44. package/src/__tests__/e2e/helpers/performance.helper.js +203 -0
  45. package/src/__tests__/e2e/helpers/performance.helper.js.map +1 -0
  46. package/src/__tests__/e2e/setup/global-setup.e2e.d.ts +5 -0
  47. package/src/__tests__/e2e/setup/global-setup.e2e.js +80 -0
  48. package/src/__tests__/e2e/setup/global-setup.e2e.js.map +1 -0
  49. package/src/__tests__/e2e/setup/global-teardown.e2e.d.ts +5 -0
  50. package/src/__tests__/e2e/setup/global-teardown.e2e.js +61 -0
  51. package/src/__tests__/e2e/setup/global-teardown.e2e.js.map +1 -0
  52. package/src/__tests__/e2e/setup/jest.e2e.config.d.ts +7 -0
  53. package/src/__tests__/e2e/setup/jest.e2e.config.js +58 -0
  54. package/src/__tests__/e2e/setup/jest.e2e.config.js.map +1 -0
  55. package/src/__tests__/e2e/setup/setup.e2e.d.ts +8 -0
  56. package/src/__tests__/e2e/setup/setup.e2e.js +61 -0
  57. package/src/__tests__/e2e/setup/setup.e2e.js.map +1 -0
  58. package/src/__tests__/setup.d.ts +16 -0
  59. package/src/__tests__/setup.js +34 -0
  60. package/src/__tests__/setup.js.map +1 -0
  61. package/src/__tests__/utils/mock-datasource.d.ts +5 -0
  62. package/src/__tests__/utils/mock-datasource.js +39 -0
  63. package/src/__tests__/utils/mock-datasource.js.map +1 -0
  64. package/src/__tests__/utils/mock-factories.d.ts +547 -0
  65. package/src/__tests__/utils/mock-factories.js +226 -0
  66. package/src/__tests__/utils/mock-factories.js.map +1 -0
  67. package/src/__tests__/utils/mock-repository.d.ts +21 -0
  68. package/src/__tests__/utils/mock-repository.js +75 -0
  69. package/src/__tests__/utils/mock-repository.js.map +1 -0
  70. package/src/__tests__/utils/test-helpers.d.ts +43 -0
  71. package/src/__tests__/utils/test-helpers.js +129 -0
  72. package/src/__tests__/utils/test-helpers.js.map +1 -0
  73. package/src/data/datasources/charts_datasource_impl.d.ts +11 -0
  74. package/src/data/datasources/charts_datasource_impl.js +52 -0
  75. package/src/data/datasources/charts_datasource_impl.js.map +1 -0
  76. package/src/data/datasources/markets_datasource_impl.d.ts +57 -0
  77. package/src/data/datasources/markets_datasource_impl.js +704 -0
  78. package/src/data/datasources/markets_datasource_impl.js.map +1 -0
  79. package/src/data/di/infosel_charts_module.d.ts +18 -0
  80. package/src/data/di/infosel_charts_module.js +34 -0
  81. package/src/data/di/infosel_charts_module.js.map +1 -0
  82. package/src/data/di/infosel_markets_component.d.ts +71 -0
  83. package/src/data/di/infosel_markets_component.js +196 -0
  84. package/src/data/di/infosel_markets_component.js.map +1 -0
  85. package/src/data/di/infosel_markets_module.d.ts +21 -0
  86. package/src/data/di/infosel_markets_module.js +40 -0
  87. package/src/data/di/infosel_markets_module.js.map +1 -0
  88. package/src/data/mappers/markets_mapper.d.ts +52 -0
  89. package/src/data/mappers/markets_mapper.js +195 -0
  90. package/src/data/mappers/markets_mapper.js.map +1 -0
  91. package/src/data/models/chart_item_model.d.ts +8 -0
  92. package/src/data/models/chart_item_model.js +3 -0
  93. package/src/data/models/chart_item_model.js.map +1 -0
  94. package/src/data/models/delete_workspace_response_model.d.ts +5 -0
  95. package/src/data/models/delete_workspace_response_model.js +3 -0
  96. package/src/data/models/delete_workspace_response_model.js.map +1 -0
  97. package/src/data/models/get_user_workspaces_response_model.d.ts +13 -0
  98. package/src/data/models/get_user_workspaces_response_model.js +3 -0
  99. package/src/data/models/get_user_workspaces_response_model.js.map +1 -0
  100. package/src/data/models/instrument_detail_financial_model.d.ts +8 -0
  101. package/src/data/models/instrument_detail_financial_model.js +3 -0
  102. package/src/data/models/instrument_detail_financial_model.js.map +1 -0
  103. package/src/data/models/instrument_detail_financial_reasons_model.d.ts +40 -0
  104. package/src/data/models/instrument_detail_financial_reasons_model.js +3 -0
  105. package/src/data/models/instrument_detail_financial_reasons_model.js.map +1 -0
  106. package/src/data/models/instrument_detail_profile_model.d.ts +25 -0
  107. package/src/data/models/instrument_detail_profile_model.js +3 -0
  108. package/src/data/models/instrument_detail_profile_model.js.map +1 -0
  109. package/src/data/models/instrument_fields_model.d.ts +67 -0
  110. package/src/data/models/instrument_fields_model.js +3 -0
  111. package/src/data/models/instrument_fields_model.js.map +1 -0
  112. package/src/data/models/instrument_model.d.ts +5 -0
  113. package/src/data/models/instrument_model.js +3 -0
  114. package/src/data/models/instrument_model.js.map +1 -0
  115. package/src/data/models/instrument_report_financial_reasons_model.d.ts +21 -0
  116. package/src/data/models/instrument_report_financial_reasons_model.js +3 -0
  117. package/src/data/models/instrument_report_financial_reasons_model.js.map +1 -0
  118. package/src/data/models/project_model.d.ts +12 -0
  119. package/src/data/models/project_model.js +3 -0
  120. package/src/data/models/project_model.js.map +1 -0
  121. package/src/data/models/project_widgets_response_model.d.ts +8 -0
  122. package/src/data/models/project_widgets_response_model.js +3 -0
  123. package/src/data/models/project_widgets_response_model.js.map +1 -0
  124. package/src/data/models/user_model.d.ts +7 -0
  125. package/src/data/models/user_model.js +3 -0
  126. package/src/data/models/user_model.js.map +1 -0
  127. package/src/data/models/widget_layout_model.d.ts +6 -0
  128. package/src/data/models/widget_layout_model.js +3 -0
  129. package/src/data/models/widget_layout_model.js.map +1 -0
  130. package/src/data/models/widget_model.d.ts +15 -0
  131. package/src/data/models/widget_model.js +3 -0
  132. package/src/data/models/widget_model.js.map +1 -0
  133. package/src/data/models/widget_size_model.d.ts +9 -0
  134. package/src/data/models/widget_size_model.js +3 -0
  135. package/src/data/models/widget_size_model.js.map +1 -0
  136. package/src/data/models/widget_table_column_format_model.d.ts +6 -0
  137. package/src/data/models/widget_table_column_format_model.js +3 -0
  138. package/src/data/models/widget_table_column_format_model.js.map +1 -0
  139. package/src/data/models/widget_table_column_model.d.ts +8 -0
  140. package/src/data/models/widget_table_column_model.js +3 -0
  141. package/src/data/models/widget_table_column_model.js.map +1 -0
  142. package/src/data/models/widget_ticker_configuration.d.ts +7 -0
  143. package/src/data/models/widget_ticker_configuration.js +3 -0
  144. package/src/data/models/widget_ticker_configuration.js.map +1 -0
  145. package/src/data/models/workspace_model.d.ts +6 -0
  146. package/src/data/models/workspace_model.js +3 -0
  147. package/src/data/models/workspace_model.js.map +1 -0
  148. package/src/data/repositories/charts_repository_impl.d.ts +9 -0
  149. package/src/data/repositories/charts_repository_impl.js +22 -0
  150. package/src/data/repositories/charts_repository_impl.js.map +1 -0
  151. package/src/data/repositories/markets_repository_impl.d.ts +50 -0
  152. package/src/data/repositories/markets_repository_impl.js +69 -0
  153. package/src/data/repositories/markets_repository_impl.js.map +1 -0
  154. package/src/domain/datasources/charts_datasource.d.ts +6 -0
  155. package/src/domain/datasources/charts_datasource.js +3 -0
  156. package/src/domain/datasources/charts_datasource.js.map +1 -0
  157. package/src/domain/datasources/markets_datasource.d.ts +45 -0
  158. package/src/domain/datasources/markets_datasource.js +3 -0
  159. package/src/domain/datasources/markets_datasource.js.map +1 -0
  160. package/src/domain/di/charts_module.d.ts +8 -0
  161. package/src/domain/di/charts_module.js +3 -0
  162. package/src/domain/di/charts_module.js.map +1 -0
  163. package/src/domain/di/markets_component.d.ts +34 -0
  164. package/src/domain/di/markets_component.js +3 -0
  165. package/src/domain/di/markets_component.js.map +1 -0
  166. package/src/domain/di/markets_module.d.ts +9 -0
  167. package/src/domain/di/markets_module.js +3 -0
  168. package/src/domain/di/markets_module.js.map +1 -0
  169. package/src/domain/entities/chart_item.d.ts +8 -0
  170. package/src/domain/entities/chart_item.js +3 -0
  171. package/src/domain/entities/chart_item.js.map +1 -0
  172. package/src/domain/entities/chart_period.d.ts +6 -0
  173. package/src/domain/entities/chart_period.js +3 -0
  174. package/src/domain/entities/chart_period.js.map +1 -0
  175. package/src/domain/entities/chart_request.d.ts +5 -0
  176. package/src/domain/entities/chart_request.js +3 -0
  177. package/src/domain/entities/chart_request.js.map +1 -0
  178. package/src/domain/entities/create_instrument_request.d.ts +5 -0
  179. package/src/domain/entities/create_instrument_request.js +3 -0
  180. package/src/domain/entities/create_instrument_request.js.map +1 -0
  181. package/src/domain/entities/create_widget_request.d.ts +10 -0
  182. package/src/domain/entities/create_widget_request.js +3 -0
  183. package/src/domain/entities/create_widget_request.js.map +1 -0
  184. package/src/domain/entities/create_workspace_request.d.ts +5 -0
  185. package/src/domain/entities/create_workspace_request.js +3 -0
  186. package/src/domain/entities/create_workspace_request.js.map +1 -0
  187. package/src/domain/entities/delete_workspace_request.d.ts +3 -0
  188. package/src/domain/entities/delete_workspace_request.js +3 -0
  189. package/src/domain/entities/delete_workspace_request.js.map +1 -0
  190. package/src/domain/entities/get_instruments_request.d.ts +12 -0
  191. package/src/domain/entities/get_instruments_request.js +3 -0
  192. package/src/domain/entities/get_instruments_request.js.map +1 -0
  193. package/src/domain/entities/get_project_widgets_request.d.ts +12 -0
  194. package/src/domain/entities/get_project_widgets_request.js +3 -0
  195. package/src/domain/entities/get_project_widgets_request.js.map +1 -0
  196. package/src/domain/entities/get_user_workspaces_request.d.ts +4 -0
  197. package/src/domain/entities/get_user_workspaces_request.js +3 -0
  198. package/src/domain/entities/get_user_workspaces_request.js.map +1 -0
  199. package/src/domain/entities/get_workspace_request.d.ts +3 -0
  200. package/src/domain/entities/get_workspace_request.js +3 -0
  201. package/src/domain/entities/get_workspace_request.js.map +1 -0
  202. package/src/domain/entities/get_workspaces_by_user_request.d.ts +12 -0
  203. package/src/domain/entities/get_workspaces_by_user_request.js +3 -0
  204. package/src/domain/entities/get_workspaces_by_user_request.js.map +1 -0
  205. package/src/domain/entities/get_workspaces_request.d.ts +12 -0
  206. package/src/domain/entities/get_workspaces_request.js +3 -0
  207. package/src/domain/entities/get_workspaces_request.js.map +1 -0
  208. package/src/domain/entities/index.d.ts +28 -0
  209. package/src/domain/entities/index.js +32 -0
  210. package/src/domain/entities/index.js.map +1 -0
  211. package/src/domain/entities/instrument.d.ts +4 -0
  212. package/src/domain/entities/instrument.js +3 -0
  213. package/src/domain/entities/instrument.js.map +1 -0
  214. package/src/domain/entities/instrument_detail_financial.d.ts +8 -0
  215. package/src/domain/entities/instrument_detail_financial.js +3 -0
  216. package/src/domain/entities/instrument_detail_financial.js.map +1 -0
  217. package/src/domain/entities/instrument_detail_financial_annual_request.d.ts +5 -0
  218. package/src/domain/entities/instrument_detail_financial_annual_request.js +3 -0
  219. package/src/domain/entities/instrument_detail_financial_annual_request.js.map +1 -0
  220. package/src/domain/entities/instrument_detail_financial_quarterly_request.d.ts +5 -0
  221. package/src/domain/entities/instrument_detail_financial_quarterly_request.js +3 -0
  222. package/src/domain/entities/instrument_detail_financial_quarterly_request.js.map +1 -0
  223. package/src/domain/entities/instrument_detail_financial_reasons.d.ts +40 -0
  224. package/src/domain/entities/instrument_detail_financial_reasons.js +3 -0
  225. package/src/domain/entities/instrument_detail_financial_reasons.js.map +1 -0
  226. package/src/domain/entities/instrument_detail_financial_reasons_request.d.ts +5 -0
  227. package/src/domain/entities/instrument_detail_financial_reasons_request.js +3 -0
  228. package/src/domain/entities/instrument_detail_financial_reasons_request.js.map +1 -0
  229. package/src/domain/entities/instrument_detail_profile.d.ts +25 -0
  230. package/src/domain/entities/instrument_detail_profile.js +3 -0
  231. package/src/domain/entities/instrument_detail_profile.js.map +1 -0
  232. package/src/domain/entities/instrument_detail_profile_request.d.ts +3 -0
  233. package/src/domain/entities/instrument_detail_profile_request.js +3 -0
  234. package/src/domain/entities/instrument_detail_profile_request.js.map +1 -0
  235. package/src/domain/entities/instrument_fields.d.ts +69 -0
  236. package/src/domain/entities/instrument_fields.js +3 -0
  237. package/src/domain/entities/instrument_fields.js.map +1 -0
  238. package/src/domain/entities/instrument_report_financial_reasons.d.ts +21 -0
  239. package/src/domain/entities/instrument_report_financial_reasons.js +3 -0
  240. package/src/domain/entities/instrument_report_financial_reasons.js.map +1 -0
  241. package/src/domain/entities/instrument_report_financial_reasons_request.d.ts +4 -0
  242. package/src/domain/entities/instrument_report_financial_reasons_request.js +3 -0
  243. package/src/domain/entities/instrument_report_financial_reasons_request.js.map +1 -0
  244. package/src/domain/entities/instruments_response.d.ts +6 -0
  245. package/src/domain/entities/instruments_response.js +3 -0
  246. package/src/domain/entities/instruments_response.js.map +1 -0
  247. package/src/domain/entities/period_type.d.ts +1 -0
  248. package/src/domain/entities/period_type.js +3 -0
  249. package/src/domain/entities/period_type.js.map +1 -0
  250. package/src/domain/entities/project_widgets_container.d.ts +12 -0
  251. package/src/domain/entities/project_widgets_container.js +3 -0
  252. package/src/domain/entities/project_widgets_container.js.map +1 -0
  253. package/src/domain/entities/search_instruments_request.d.ts +7 -0
  254. package/src/domain/entities/search_instruments_request.js +3 -0
  255. package/src/domain/entities/search_instruments_request.js.map +1 -0
  256. package/src/domain/entities/search_result_item.d.ts +5 -0
  257. package/src/domain/entities/search_result_item.js +3 -0
  258. package/src/domain/entities/search_result_item.js.map +1 -0
  259. package/src/domain/entities/update_widget_instruments_reques.d.ts +11 -0
  260. package/src/domain/entities/update_widget_instruments_reques.js +3 -0
  261. package/src/domain/entities/update_widget_instruments_reques.js.map +1 -0
  262. package/src/domain/entities/user_workspaces.d.ts +8 -0
  263. package/src/domain/entities/user_workspaces.js +3 -0
  264. package/src/domain/entities/user_workspaces.js.map +1 -0
  265. package/src/domain/entities/widget.d.ts +46 -0
  266. package/src/domain/entities/widget.js +3 -0
  267. package/src/domain/entities/widget.js.map +1 -0
  268. package/src/domain/entities/workspace.d.ts +4 -0
  269. package/src/domain/entities/workspace.js +3 -0
  270. package/src/domain/entities/workspace.js.map +1 -0
  271. package/src/domain/entities/workspace_widgets.d.ts +6 -0
  272. package/src/domain/entities/workspace_widgets.js +3 -0
  273. package/src/domain/entities/workspace_widgets.js.map +1 -0
  274. package/src/domain/entities/workspaces_container.d.ts +18 -0
  275. package/src/domain/entities/workspaces_container.js +3 -0
  276. package/src/domain/entities/workspaces_container.js.map +1 -0
  277. package/src/domain/repositories/charts_repository.d.ts +5 -0
  278. package/src/domain/repositories/charts_repository.js +3 -0
  279. package/src/domain/repositories/charts_repository.js.map +1 -0
  280. package/src/domain/repositories/markets_repository.d.ts +41 -0
  281. package/src/domain/repositories/markets_repository.js +3 -0
  282. package/src/domain/repositories/markets_repository.js.map +1 -0
  283. package/src/domain/use_cases/create_instrument_use_case.d.ts +9 -0
  284. package/src/domain/use_cases/create_instrument_use_case.js +22 -0
  285. package/src/domain/use_cases/create_instrument_use_case.js.map +1 -0
  286. package/src/domain/use_cases/create_widget_use_case.d.ts +9 -0
  287. package/src/domain/use_cases/create_widget_use_case.js +22 -0
  288. package/src/domain/use_cases/create_widget_use_case.js.map +1 -0
  289. package/src/domain/use_cases/create_workspace_use_case.d.ts +9 -0
  290. package/src/domain/use_cases/create_workspace_use_case.js +22 -0
  291. package/src/domain/use_cases/create_workspace_use_case.js.map +1 -0
  292. package/src/domain/use_cases/delete_instrument_use_case.d.ts +7 -0
  293. package/src/domain/use_cases/delete_instrument_use_case.js +19 -0
  294. package/src/domain/use_cases/delete_instrument_use_case.js.map +1 -0
  295. package/src/domain/use_cases/delete_widget_use_case.d.ts +7 -0
  296. package/src/domain/use_cases/delete_widget_use_case.js +19 -0
  297. package/src/domain/use_cases/delete_widget_use_case.js.map +1 -0
  298. package/src/domain/use_cases/delete_workspace_use_case.d.ts +8 -0
  299. package/src/domain/use_cases/delete_workspace_use_case.js +22 -0
  300. package/src/domain/use_cases/delete_workspace_use_case.js.map +1 -0
  301. package/src/domain/use_cases/get_chart_data_use_case.d.ts +9 -0
  302. package/src/domain/use_cases/get_chart_data_use_case.js +16 -0
  303. package/src/domain/use_cases/get_chart_data_use_case.js.map +1 -0
  304. package/src/domain/use_cases/get_instrument_detail_financial_annual_use_case.d.ts +8 -0
  305. package/src/domain/use_cases/get_instrument_detail_financial_annual_use_case.js +16 -0
  306. package/src/domain/use_cases/get_instrument_detail_financial_annual_use_case.js.map +1 -0
  307. package/src/domain/use_cases/get_instrument_detail_financial_quartely_use_case.d.ts +8 -0
  308. package/src/domain/use_cases/get_instrument_detail_financial_quartely_use_case.js +16 -0
  309. package/src/domain/use_cases/get_instrument_detail_financial_quartely_use_case.js.map +1 -0
  310. package/src/domain/use_cases/get_instrument_detail_financial_reasons_use_case.d.ts +8 -0
  311. package/src/domain/use_cases/get_instrument_detail_financial_reasons_use_case.js +16 -0
  312. package/src/domain/use_cases/get_instrument_detail_financial_reasons_use_case.js.map +1 -0
  313. package/src/domain/use_cases/get_instrument_detail_profile_use_case.d.ts +8 -0
  314. package/src/domain/use_cases/get_instrument_detail_profile_use_case.js +16 -0
  315. package/src/domain/use_cases/get_instrument_detail_profile_use_case.js.map +1 -0
  316. package/src/domain/use_cases/get_instrument_fields_use_case.d.ts +8 -0
  317. package/src/domain/use_cases/get_instrument_fields_use_case.js +19 -0
  318. package/src/domain/use_cases/get_instrument_fields_use_case.js.map +1 -0
  319. package/src/domain/use_cases/get_instrument_report_financial_reasons.d.ts +9 -0
  320. package/src/domain/use_cases/get_instrument_report_financial_reasons.js +16 -0
  321. package/src/domain/use_cases/get_instrument_report_financial_reasons.js.map +1 -0
  322. package/src/domain/use_cases/get_instruments_use_case.d.ts +9 -0
  323. package/src/domain/use_cases/get_instruments_use_case.js +16 -0
  324. package/src/domain/use_cases/get_instruments_use_case.js.map +1 -0
  325. package/src/domain/use_cases/get_project_widgets_use_case.d.ts +9 -0
  326. package/src/domain/use_cases/get_project_widgets_use_case.js +19 -0
  327. package/src/domain/use_cases/get_project_widgets_use_case.js.map +1 -0
  328. package/src/domain/use_cases/get_user_workspace_use_case.d.ts +9 -0
  329. package/src/domain/use_cases/get_user_workspace_use_case.js +22 -0
  330. package/src/domain/use_cases/get_user_workspace_use_case.js.map +1 -0
  331. package/src/domain/use_cases/get_workspace_use_case.d.ts +9 -0
  332. package/src/domain/use_cases/get_workspace_use_case.js +19 -0
  333. package/src/domain/use_cases/get_workspace_use_case.js.map +1 -0
  334. package/src/domain/use_cases/get_workspaces_by_user_use_case.d.ts +9 -0
  335. package/src/domain/use_cases/get_workspaces_by_user_use_case.js +19 -0
  336. package/src/domain/use_cases/get_workspaces_by_user_use_case.js.map +1 -0
  337. package/src/domain/use_cases/get_workspaces_use_case.d.ts +9 -0
  338. package/src/domain/use_cases/get_workspaces_use_case.js +19 -0
  339. package/src/domain/use_cases/get_workspaces_use_case.js.map +1 -0
  340. package/src/domain/use_cases/search_instruments_use_case.d.ts +9 -0
  341. package/src/domain/use_cases/search_instruments_use_case.js +25 -0
  342. package/src/domain/use_cases/search_instruments_use_case.js.map +1 -0
  343. package/src/domain/use_cases/update_widget_instruments_use_case.d.ts +9 -0
  344. package/src/domain/use_cases/update_widget_instruments_use_case.js +22 -0
  345. package/src/domain/use_cases/update_widget_instruments_use_case.js.map +1 -0
  346. package/src/index.d.ts +8 -0
  347. package/src/index.js +12 -0
  348. package/src/index.js.map +1 -0
package/README.md ADDED
@@ -0,0 +1,996 @@
1
+ # @infosel-sdk/markets
2
+
3
+ SDK de Mercados Financieros para la plataforma Infosel. Proporciona herramientas completas para acceder a datos de mercado, gestionar instrumentos, crear widgets y manejar espacios de trabajo para aplicaciones financieras.
4
+
5
+ ## 🚀 Características
6
+
7
+ - **Acceso a Datos de Mercado**: Datos de mercado en tiempo real e históricos
8
+ - **Gestión de Instrumentos**: Buscar, crear y gestionar instrumentos financieros
9
+ - **Sistema de Widgets**: Crear y gestionar widgets financieros personalizables
10
+ - **Gestión de Espacios de Trabajo**: Organizar y gestionar espacios de trabajo de usuarios
11
+ - **Datos de Gráficos**: Acceder a datos de gráficos con múltiples marcos de tiempo
12
+ - **Reportes Financieros**: Acceder a datos financieros e informes de instrumentos
13
+
14
+ ## 📦 Instalación
15
+
16
+ ```bash
17
+ npm install @infosel-sdk/markets
18
+ ```
19
+
20
+ ## 🚀 Inicio Rápido
21
+
22
+ ### ✨ Configuración Moderna (Recomendado)
23
+
24
+ La nueva API del core proporciona una configuración más limpia y validada:
25
+
26
+ ```typescript
27
+ import InfoselMarkets from '@infosel-sdk/markets';
28
+ import { InfoselSdkManager, AuthConfigurationBuilder } from '@infosel-sdk/core';
29
+
30
+ // Configuración moderna con Builder Pattern
31
+ const authConfig = AuthConfigurationBuilder.keyCloak()
32
+ .withRealm('hub')
33
+ .withEnvironment('qa')
34
+ .withCredentials({
35
+ grant_type: 'client_credentials',
36
+ client_id: 'tu-client-id',
37
+ client_secret: 'tu-client-secret',
38
+ })
39
+ .build();
40
+
41
+ // Inicializar SDK Manager con configuración moderna
42
+ const sdkManager = InfoselSdkManager.initWithConfiguration({
43
+ authConfiguration: authConfig,
44
+ });
45
+
46
+ // Inicializar SDK de Mercados
47
+ const marketsSDK = InfoselMarkets.init({ sdkManager });
48
+
49
+ // Usar el SDK
50
+ const searchResults = await marketsSDK.searchInstruments({
51
+ query: 'AAPL',
52
+ limit: 10,
53
+ offset: 0,
54
+ });
55
+ ```
56
+
57
+ ### Configuración con Token Existente
58
+
59
+ ```typescript
60
+ import InfoselMarkets from '@infosel-sdk/markets';
61
+ import {
62
+ InfoselSdkManager,
63
+ AuthConfigurationBuilder,
64
+ Token,
65
+ } from '@infosel-sdk/core';
66
+
67
+ // Configuración con token existente
68
+ const token: Token = {
69
+ accessToken: 'tu-access-token',
70
+ refreshToken: 'tu-refresh-token',
71
+ };
72
+
73
+ const authConfig = AuthConfigurationBuilder.existingToken()
74
+ .withRealm('hub')
75
+ .withEnvironment('prod')
76
+ .withClientId('hub-app')
77
+ .withToken(token)
78
+ .build();
79
+
80
+ const sdkManager = InfoselSdkManager.initWithConfiguration({
81
+ authConfiguration: authConfig,
82
+ });
83
+
84
+ const marketsSDK = InfoselMarkets.init({ sdkManager });
85
+ ```
86
+
87
+
88
+
89
+ ## 🔍 Validación de Configuración
90
+
91
+ La nueva API incluye validaciones robustas:
92
+
93
+ ```typescript
94
+ import { AuthConfigurationBuilder } from '@infosel-sdk/core';
95
+
96
+ const builder = AuthConfigurationBuilder.keyCloak()
97
+ .withRealm('invalid@realm') // Caracteres inválidos
98
+ .withCredentials({
99
+ grant_type: 'client_credentials',
100
+ client_id: '', // Client ID vacío
101
+ client_secret: 'secret',
102
+ });
103
+
104
+ // Validar antes de construir
105
+ const validation = builder.validate();
106
+ if (!validation.isValid) {
107
+ console.log('Errores:', validation.errors);
108
+ // ['Realm contains invalid characters...', 'Client ID is required...']
109
+ }
110
+
111
+ // O validar automáticamente al construir
112
+ try {
113
+ const config = builder.build();
114
+ } catch (error) {
115
+ console.error(error.message); // Lista todos los errores de validación
116
+ }
117
+ ```
118
+
119
+ ## 📚 API Completa del SDK
120
+
121
+ ### 🔍 Búsqueda y Gestión de Instrumentos
122
+
123
+ #### Buscar Instrumentos
124
+
125
+ ```typescript
126
+ // Búsqueda básica
127
+ const searchResults = await marketsSDK.searchInstruments({
128
+ query: 'AAPL',
129
+ limit: 10,
130
+ });
131
+
132
+ // Búsqueda con filtros avanzados
133
+ const filteredResults = await marketsSDK.searchInstruments({
134
+ query: 'TECH',
135
+ limit: 20,
136
+ marketTypeIds: [1, 2], // Tipos de mercado específicos
137
+ valueTypeIds: [1], // Tipos de valor específicos
138
+ exchangeIds: [1, 2], // Exchanges específicos
139
+ });
140
+
141
+ console.log('Instrumentos encontrados:', searchResults);
142
+ ```
143
+
144
+ #### Obtener Lista de Instrumentos
145
+
146
+ ```typescript
147
+ const instruments = await marketsSDK.getInstruments({
148
+ // Parámetros de paginación y filtros
149
+ limit: 50,
150
+ offset: 0,
151
+ });
152
+
153
+ console.log('Total de instrumentos:', instruments.total);
154
+ console.log('Instrumentos:', instruments.instruments);
155
+ ```
156
+
157
+ #### Crear Instrumento Personalizado
158
+
159
+ ```typescript
160
+ const newInstrument = await marketsSDK.createInstrument({
161
+ symbol: 'CUSTOM_STOCK',
162
+ uniqueKey: 'CUSTOM_001',
163
+ widgetId: 'widget-123',
164
+ // Otros campos del instrumento
165
+ });
166
+
167
+ console.log('Instrumento creado:', newInstrument);
168
+ ```
169
+
170
+ #### Eliminar Instrumento
171
+
172
+ ```typescript
173
+ const result = await marketsSDK.deleteInstrument('instrument-id-123');
174
+ console.log('Resultado:', result); // Mensaje de confirmación
175
+ ```
176
+
177
+ #### Obtener Campos del Instrumento
178
+
179
+ ```typescript
180
+ const fields = await marketsSDK.getInstrumentFields('instrument-id-123');
181
+ console.log('Campos disponibles:', fields);
182
+ ```
183
+
184
+ ### 📊 Detalles Financieros de Instrumentos
185
+
186
+ #### Perfil del Instrumento
187
+
188
+ ```typescript
189
+ const profile = await marketsSDK.getInstrumentDetailProfile({
190
+ instrumentId: 'AAPL_US',
191
+ });
192
+
193
+ console.log('Perfil del instrumento:', profile);
194
+ ```
195
+
196
+ #### Datos Financieros Trimestrales
197
+
198
+ ```typescript
199
+ const quarterlyData = await marketsSDK.getInstrumentDetailFinancialQuartely({
200
+ instrumentId: 'AAPL_US',
201
+ period: 'QUARTERLY',
202
+ });
203
+
204
+ console.log('Datos trimestrales:', quarterlyData);
205
+ ```
206
+
207
+ #### Datos Financieros Anuales
208
+
209
+ ```typescript
210
+ const annualData = await marketsSDK.getInstrumentDetailFinancialAnnual({
211
+ instrumentId: 'AAPL_US',
212
+ period: 'ANNUAL',
213
+ });
214
+
215
+ console.log('Datos anuales:', annualData);
216
+ ```
217
+
218
+ #### Razones Financieras del Instrumento
219
+
220
+ ```typescript
221
+ const financialReasons = await marketsSDK.getInstrumentDetailFinancialReasons({
222
+ instrumentId: 'AAPL_US',
223
+ period: 'QUARTERLY',
224
+ });
225
+
226
+ console.log('Razones financieras:', financialReasons);
227
+ ```
228
+
229
+ #### Reportes Financieros con Razones
230
+
231
+ ```typescript
232
+ const reportReasons = await marketsSDK.getInstrumentReportFinancialReasons({
233
+ instrumentId: 'AAPL_US',
234
+ period: 'QUARTERLY',
235
+ });
236
+
237
+ console.log('Reporte con razones:', reportReasons);
238
+ ```
239
+
240
+ ### 🎯 Gestión de Widgets
241
+
242
+ #### Crear Widget
243
+
244
+ ```typescript
245
+ // Widget de gráfico
246
+ const chartWidget = await marketsSDK.createWidget({
247
+ workspaceId: 'workspace-123',
248
+ type: 'CHART',
249
+ name: 'Gráfico de AAPL',
250
+ instruments: [
251
+ {
252
+ uniqueKey: 'AAPL_US',
253
+ symbol: 'AAPL',
254
+ },
255
+ ],
256
+ });
257
+
258
+ // Widget de tabla
259
+ const tableWidget = await marketsSDK.createWidget({
260
+ workspaceId: 'workspace-123',
261
+ type: 'DYNAMIC_TABLE',
262
+ name: 'Tabla de Precios',
263
+ instruments: [
264
+ {
265
+ uniqueKey: 'AAPL_US',
266
+ symbol: 'AAPL',
267
+ },
268
+ {
269
+ uniqueKey: 'MSFT_US',
270
+ symbol: 'MSFT',
271
+ },
272
+ ],
273
+ });
274
+
275
+ console.log('Widget creado:', chartWidget);
276
+ ```
277
+
278
+ #### Tipos de Widgets Disponibles
279
+
280
+ ```typescript
281
+ // Tipos soportados:
282
+ // - 'DYNAMIC_TABLE': Tabla dinámica
283
+ // - 'PREDEFINED_TABLE': Tabla predefinida
284
+ // - 'CUSTOM_TABLE': Tabla personalizada
285
+ // - 'NEWS_LIST': Lista de noticias
286
+ // - 'TICKER_TAPE': Cinta de ticker
287
+ // - 'CHART': Gráfico
288
+ // - 'UNKNOWN': Tipo desconocido
289
+ ```
290
+
291
+ #### Actualizar Instrumentos del Widget
292
+
293
+ ```typescript
294
+ const updatedInstruments = await marketsSDK.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
+ #### Eliminar Widget
305
+
306
+ ```typescript
307
+ const result = await marketsSDK.deleteWidget('widget-123');
308
+ console.log('Resultado:', result);
309
+ ```
310
+
311
+ #### Obtener Widgets del Proyecto
312
+
313
+ ```typescript
314
+ const projectWidgets = await marketsSDK.getProjectWidgets({
315
+ projectId: 'project-123',
316
+ });
317
+
318
+ console.log('Widgets del proyecto:', projectWidgets);
319
+ ```
320
+
321
+ ### 🏢 Gestión de Espacios de Trabajo
322
+
323
+ #### Crear Espacio de Trabajo
324
+
325
+ ```typescript
326
+ const workspace = await marketsSDK.createWorkspace({
327
+ name: 'Mi Dashboard de Trading',
328
+ description: 'Espacio de trabajo personal para análisis de mercado',
329
+ userId: 'user-123', // Opcional: asociar a usuario específico
330
+ projectId: 'project-123', // Opcional: asociar a proyecto específico
331
+ });
332
+
333
+ console.log('Espacio de trabajo creado:', workspace);
334
+ ```
335
+
336
+ #### Obtener Espacios de Trabajo
337
+
338
+ ```typescript
339
+ // Obtener todos los espacios de trabajo
340
+ const allWorkspaces = await marketsSDK.getWorkspaces({
341
+ projectId: 'project-123', // ID del proyecto requerido
342
+ params: {
343
+ instruments: {
344
+ options: {
345
+ limit: 100,
346
+ offset: 0,
347
+ sort: { field: 'name', direction: 'asc' }, // Ordenar por nombre ascendente
348
+ },
349
+ },
350
+ },
351
+ });
352
+
353
+ // Obtener espacios de trabajo por usuario
354
+ const userWorkspaces = await marketsSDK.getWorkspacesByUser({
355
+ userId: 'user-123',
356
+ params: {
357
+ instruments: {
358
+ options: {
359
+ limit: 50,
360
+ offset: 0,
361
+ sort: { field: 'createdAt', direction: 'desc' }, // Ordenar por fecha de creación descendente
362
+ },
363
+ },
364
+ },
365
+ });
366
+
367
+ // Obtener espacios de trabajo específicos del usuario
368
+ const specificUserWorkspaces = await marketsSDK.getUserWorkspaces({
369
+ connectionId: 'connection-123',
370
+ });
371
+
372
+ console.log('Espacios de trabajo:', allWorkspaces);
373
+
374
+ **Nota importante**: Los métodos `getWorkspaces()` y `getWorkspacesByUser()` requieren un `projectId` o `userId` respectivamente, y los parámetros de paginación (`limit`, `offset`) y ordenamiento (`sort`) deben estar anidados dentro de `params.instruments.options`.
375
+ ```
376
+
377
+ #### Obtener Detalles del Espacio de Trabajo
378
+
379
+ ```typescript
380
+ const workspaceDetails = await marketsSDK.getWorkspace({
381
+ workspaceId: 'workspace-123',
382
+ });
383
+
384
+ console.log('Detalles del workspace:', workspaceDetails);
385
+ console.log('Widgets en el workspace:', workspaceDetails.widgets);
386
+ ```
387
+
388
+ #### Eliminar Espacio de Trabajo
389
+
390
+ ```typescript
391
+ const result = await marketsSDK.deleteWorkspace({
392
+ id: 'workspace-123',
393
+ });
394
+
395
+ console.log('Resultado:', result);
396
+ ```
397
+
398
+ ### 📈 Datos de Gráficos
399
+
400
+ #### Obtener Datos de Gráfico
401
+
402
+ ```typescript
403
+ // Gráfico diario
404
+ const dailyChart = await marketsSDK.getChartData({
405
+ instrumentKey: 'AAPL_US',
406
+ period: {
407
+ type: 'day',
408
+ value: 1,
409
+ interval: 1,
410
+ },
411
+ });
412
+
413
+ // Gráfico semanal
414
+ const weeklyChart = await marketsSDK.getChartData({
415
+ instrumentKey: 'AAPL_US',
416
+ period: {
417
+ type: 'week',
418
+ value: 4,
419
+ interval: 1,
420
+ },
421
+ });
422
+
423
+ // Gráfico mensual
424
+ const monthlyChart = await marketsSDK.getChartData({
425
+ instrumentKey: 'AAPL_US',
426
+ period: {
427
+ type: 'month',
428
+ value: 12,
429
+ interval: 1,
430
+ },
431
+ });
432
+
433
+ console.log('Datos del gráfico diario:', dailyChart);
434
+ ```
435
+
436
+ #### Tipos de Períodos Disponibles
437
+
438
+ ```typescript
439
+ // Tipos de período soportados:
440
+ // - 'day': Períodos diarios
441
+ // - 'week': Períodos semanales
442
+ // - 'month': Períodos mensuales
443
+ // - 'year': Períodos anuales
444
+
445
+ // Ejemplos de configuración:
446
+ const periods = {
447
+ // 1 día con intervalos de 1 hora
448
+ daily: { type: 'day', value: 1, interval: 1 },
449
+
450
+ // 5 días con intervalos de 1 día
451
+ week: { type: 'day', value: 5, interval: 1 },
452
+
453
+ // 4 semanas con intervalos de 1 semana
454
+ monthly: { type: 'week', value: 4, interval: 1 },
455
+
456
+ // 12 meses con intervalos de 1 mes
457
+ yearly: { type: 'month', value: 12, interval: 1 },
458
+ };
459
+ ```
460
+
461
+ ## 🔧 Ejemplos Prácticos Completos
462
+
463
+ ### 📱 Dashboard de Trading Completo
464
+
465
+ ```typescript
466
+ import InfoselMarkets from '@infosel-sdk/markets';
467
+ import { InfoselSdkManager, AuthConfigurationBuilder } from '@infosel-sdk/core';
468
+
469
+ class TradingDashboard {
470
+ private marketsSDK: InfoselMarkets;
471
+
472
+ constructor() {
473
+ this.initializeSDK();
474
+ }
475
+
476
+ private async initializeSDK() {
477
+ const authConfig = AuthConfigurationBuilder.keyCloak()
478
+ .withRealm('hub')
479
+ .withEnvironment('qa')
480
+ .withCredentials({
481
+ grant_type: 'client_credentials',
482
+ client_id: process.env.KEYCLOAK_CLIENT_ID!,
483
+ client_secret: process.env.KEYCLOAK_CLIENT_SECRET!,
484
+ })
485
+ .build();
486
+
487
+ const sdkManager = InfoselSdkManager.initWithConfiguration({
488
+ authConfiguration: authConfig,
489
+ });
490
+
491
+ this.marketsSDK = InfoselMarkets.init({ sdkManager });
492
+ }
493
+
494
+ // Crear dashboard completo
495
+ async createCompleteDashboard(userId: string) {
496
+ try {
497
+ // 1. Crear espacio de trabajo
498
+ const workspace = await this.marketsSDK.createWorkspace({
499
+ name: 'Dashboard de Trading',
500
+ description: 'Dashboard completo para análisis de mercado',
501
+ userId,
502
+ // Nota: userId y projectId son mutuamente excluyentes
503
+ // Si se proporciona userId, no se debe incluir projectId
504
+ });
505
+
506
+ // 2. Crear widget de gráfico para AAPL
507
+ const chartWidget = await this.marketsSDK.createWidget({
508
+ workspaceId: workspace.id,
509
+ type: 'CHART',
510
+ name: 'Gráfico AAPL',
511
+ instruments: [{ uniqueKey: 'AAPL_US', symbol: 'AAPL' }],
512
+ });
513
+
514
+ // 3. Crear widget de tabla para múltiples instrumentos
515
+ const tableWidget = await this.marketsSDK.createWidget({
516
+ workspaceId: workspace.id,
517
+ type: 'DYNAMIC_TABLE',
518
+ name: 'Portafolio',
519
+ instruments: [
520
+ { uniqueKey: 'AAPL_US', symbol: 'AAPL' },
521
+ { uniqueKey: 'MSFT_US', symbol: 'MSFT' },
522
+ { uniqueKey: 'GOOGL_US', symbol: 'GOOGL' },
523
+ ],
524
+ });
525
+
526
+ // 4. Obtener datos del gráfico
527
+ const chartData = await this.marketsSDK.getChartData({
528
+ instrumentKey: 'AAPL_US',
529
+ period: { type: 'day', value: 30, interval: 1 },
530
+ });
531
+
532
+ // 5. Obtener perfil del instrumento
533
+ const profile = await this.marketsSDK.getInstrumentDetailProfile({
534
+ instrumentId: 'AAPL_US',
535
+ });
536
+
537
+ return {
538
+ workspace,
539
+ widgets: [chartWidget, tableWidget],
540
+ chartData,
541
+ profile,
542
+ };
543
+ } catch (error) {
544
+ console.error('Error creando dashboard:', error);
545
+ throw error;
546
+ }
547
+ }
548
+
549
+ // Buscar instrumentos
550
+ async searchInstruments(query: string, limit: number = 10) {
551
+ try {
552
+ const results = await this.marketsSDK.searchInstruments({
553
+ query,
554
+ limit,
555
+ });
556
+ return results;
557
+ } catch (error) {
558
+ console.error('Error buscando instrumentos:', error);
559
+ throw error;
560
+ }
561
+ }
562
+
563
+ // Obtener datos financieros
564
+ async getFinancialData(instrumentId: string) {
565
+ try {
566
+ const [quarterly, annual, profile] = await Promise.all([
567
+ this.marketsSDK.getInstrumentDetailFinancialQuartely({
568
+ instrumentId,
569
+ period: 'QUARTERLY',
570
+ }),
571
+ this.marketsSDK.getInstrumentDetailFinancialAnnual({
572
+ instrumentId,
573
+ period: 'ANNUAL',
574
+ }),
575
+ this.marketsSDK.getInstrumentDetailProfile({
576
+ instrumentId,
577
+ }),
578
+ ]);
579
+
580
+ return { quarterly, annual, profile };
581
+ } catch (error) {
582
+ console.error('Error obteniendo datos financieros:', error);
583
+ throw error;
584
+ }
585
+ }
586
+ }
587
+
588
+ // Uso del dashboard
589
+ async function main() {
590
+ const dashboard = new TradingDashboard();
591
+
592
+ try {
593
+ // Crear dashboard completo
594
+ const result = await dashboard.createCompleteDashboard('user-123');
595
+ console.log('Dashboard creado:', result);
596
+
597
+ // Buscar instrumentos
598
+ const searchResults = await dashboard.searchInstruments('TECH', 5);
599
+ console.log('Resultados de búsqueda:', searchResults);
600
+
601
+ // Obtener datos financieros
602
+ const financialData = await dashboard.getFinancialData('AAPL_US');
603
+ console.log('Datos financieros:', financialData);
604
+ } catch (error) {
605
+ console.error('Error en main:', error);
606
+ }
607
+ }
608
+
609
+ main();
610
+ ```
611
+
612
+ ### 🔍 Sistema de Búsqueda Avanzada
613
+
614
+ ```typescript
615
+ class AdvancedInstrumentSearch {
616
+ private marketsSDK: InfoselMarkets;
617
+
618
+ constructor(marketsSDK: InfoselMarkets) {
619
+ this.marketsSDK = marketsSDK;
620
+ }
621
+
622
+ // Búsqueda con múltiples filtros
623
+ async searchWithFilters(options: {
624
+ query: string;
625
+ marketTypes?: number[]; // Tipos de mercado (ej: [1, 2] para Acciones y Bonos)
626
+ valueTypes?: number[]; // Tipos de valor (ej: [1] para Equity)
627
+ exchanges?: number[]; // Exchanges (ej: [1, 2] para NYSE y NASDAQ)
628
+ limit?: number;
629
+ }) {
630
+ try {
631
+ const results = await this.marketsSDK.searchInstruments({
632
+ query: options.query,
633
+ limit: options.limit || 20,
634
+ marketTypeIds: options.marketTypes,
635
+ valueTypeIds: options.valueTypes,
636
+ exchangeIds: options.exchanges,
637
+ });
638
+
639
+ return results;
640
+ } catch (error) {
641
+ console.error('Error en búsqueda avanzada:', error);
642
+ throw error;
643
+ }
644
+ }
645
+
646
+ // Búsqueda por sector (filtra solo acciones)
647
+ async searchBySector(sector: string, limit: number = 15) {
648
+ return this.searchWithFilters({
649
+ query: sector,
650
+ limit,
651
+ marketTypes: [1], // 1 = Mercado de acciones
652
+ });
653
+ }
654
+
655
+ // Búsqueda por exchange específico
656
+ async searchByExchange(exchange: string, limit: number = 15) {
657
+ return this.searchWithFilters({
658
+ query: exchange,
659
+ limit,
660
+ exchanges: [1, 2], // 1 = NYSE, 2 = NASDAQ
661
+ });
662
+ }
663
+ }
664
+
665
+ // Uso del sistema de búsqueda
666
+ const searchSystem = new AdvancedInstrumentSearch(marketsSDK);
667
+
668
+ // Búsqueda por sector
669
+ const techStocks = await searchSystem.searchBySector('TECHNOLOGY');
670
+ console.log('Acciones de tecnología:', techStocks);
671
+
672
+ // Búsqueda por exchange
673
+ const nasdaqStocks = await searchSystem.searchByExchange('NASDAQ');
674
+ console.log('Acciones del NASDAQ:', nasdaqStocks);
675
+ ```
676
+
677
+ ### 📊 Gestor de Widgets
678
+
679
+ ```typescript
680
+ class WidgetManager {
681
+ private marketsSDK: InfoselMarkets;
682
+
683
+ constructor(marketsSDK: InfoselMarkets) {
684
+ this.marketsSDK = marketsSDK;
685
+ }
686
+
687
+ // Crear widget de gráfico
688
+ async createChartWidget(workspaceId: string, instrument: string, name: string) {
689
+ try {
690
+ const widget = await this.marketsSDK.createWidget({
691
+ workspaceId,
692
+ type: 'CHART',
693
+ name,
694
+ instruments: [{ uniqueKey: instrument, symbol: instrument }],
695
+ });
696
+
697
+ return widget;
698
+ } catch (error) {
699
+ console.error('Error creando widget de gráfico:', error);
700
+ throw error;
701
+ }
702
+ }
703
+
704
+ // Crear widget de tabla
705
+ async createTableWidget(
706
+ workspaceId: string,
707
+ instruments: string[],
708
+ name: string
709
+ ) {
710
+ try {
711
+ const widget = await this.marketsSDK.createWidget({
712
+ workspaceId,
713
+ type: 'DYNAMIC_TABLE',
714
+ name,
715
+ instruments: instruments.map(instrument => ({
716
+ uniqueKey: instrument,
717
+ symbol: instrument,
718
+ })),
719
+ });
720
+
721
+ return widget;
722
+ } catch (error) {
723
+ console.error('Error creando widget de tabla:', error);
724
+ throw error;
725
+ }
726
+ }
727
+
728
+ // Actualizar instrumentos de un widget
729
+ async updateWidgetInstruments(widgetId: string, instruments: string[]) {
730
+ try {
731
+ const updatedInstruments = await this.marketsSDK.updateWidgetInstruments({
732
+ widgetId,
733
+ instruments: { keys: instruments },
734
+ });
735
+
736
+ return updatedInstruments;
737
+ } catch (error) {
738
+ console.error('Error actualizando instrumentos:', error);
739
+ throw error;
740
+ }
741
+ }
742
+
743
+ // Eliminar widget
744
+ async deleteWidget(widgetId: string) {
745
+ try {
746
+ const result = await this.marketsSDK.deleteWidget(widgetId);
747
+ return result;
748
+ } catch (error) {
749
+ console.error('Error eliminando widget:', error);
750
+ throw error;
751
+ }
752
+ }
753
+ }
754
+
755
+ // Uso del gestor de widgets
756
+ const widgetManager = new WidgetManager(marketsSDK);
757
+
758
+ // Crear widgets en un workspace
759
+ async function setupWorkspaceWidgets(workspaceId: string) {
760
+ try {
761
+ // Widget de gráfico para AAPL
762
+ const chartWidget = await widgetManager.createChartWidget(
763
+ workspaceId,
764
+ 'AAPL_US',
765
+ 'Gráfico de Apple'
766
+ );
767
+
768
+ // Widget de tabla para portafolio
769
+ const tableWidget = await widgetManager.createTableWidget(
770
+ workspaceId,
771
+ ['AAPL_US', 'MSFT_US', 'GOOGL_US'],
772
+ 'Portafolio Principal'
773
+ );
774
+
775
+ console.log('Widgets creados:', { chartWidget, tableWidget });
776
+ return { chartWidget, tableWidget };
777
+ } catch (error) {
778
+ console.error('Error configurando widgets:', error);
779
+ throw error;
780
+ }
781
+ }
782
+ ```
783
+
784
+ ## 📚 Referencia de API
785
+
786
+ ### Clases Principales
787
+
788
+ #### `InfoselMarkets`
789
+
790
+ Punto de entrada principal para el SDK de Mercados. Se inicializa usando el método estático `init()` que recibe el `InfoselSdkManager`.
791
+
792
+ #### `InfoselSdkManager`
793
+
794
+ 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.
795
+
796
+ #### `AuthConfigurationBuilder`
797
+
798
+ Builder para crear configuraciones de autenticación validadas y centralizadas. Proporciona una API fluida para configurar autenticación KeyCloak y basada en tokens.
799
+
800
+ #### `MarketsMapper`
801
+
802
+ Mapeador de datos para convertir entre modelos de API y dominio.
803
+
804
+ ### Métodos Disponibles
805
+
806
+ #### 🔍 Gestión de Instrumentos
807
+
808
+ | Método | Descripción | Parámetros |
809
+ |--------|-------------|------------|
810
+ | `searchInstruments()` | Buscar instrumentos financieros | `SearchInstrumentRequest` |
811
+ | `getInstruments()` | Obtener lista de instrumentos | `GetInstrumentsRequest` |
812
+ | `createInstrument()` | Crear nuevo instrumento | `CreateInstrumentRequest` |
813
+ | `deleteInstrument()` | Eliminar instrumento | `string` (ID) |
814
+ | `getInstrumentFields()` | Obtener campos del instrumento | `string` (ID) |
815
+
816
+ #### 📊 Detalles de Instrumentos
817
+
818
+ | Método | Descripción | Parámetros |
819
+ |--------|-------------|------------|
820
+ | `getInstrumentDetailProfile()` | Obtener perfil del instrumento | `InstrumentDetailProfileRequest` |
821
+ | `getInstrumentDetailFinancialQuartely()` | Datos financieros trimestrales | `InstrumentDetailFinancialQuarterlyRequest` |
822
+ | `getInstrumentDetailFinancialAnnual()` | Datos financieros anuales | `InstrumentDetailFinancialAnnualRequest` |
823
+ | `getInstrumentDetailFinancialReasons()` | Razones financieras | `InstrumentDetailFinancialReasonsRequest` |
824
+ | `getInstrumentReportFinancialReasons()` | Reportes financieros con razones | `InstrumentReportFinancialReasonsRequest` |
825
+
826
+ #### 🎯 Gestión de Widgets
827
+
828
+ | Método | Descripción | Parámetros |
829
+ |--------|-------------|------------|
830
+ | `createWidget()` | Crear nuevo widget | `CreateWidgetRequest` |
831
+ | `deleteWidget()` | Eliminar widget | `string` (ID) |
832
+ | `updateWidgetInstruments()` | Actualizar instrumentos del widget | `UpdateWidgetInstrumentsRequest` |
833
+ | `getProjectWidgets()` | Obtener widgets del proyecto | `GetProjectWidgetsRequest` |
834
+
835
+ #### 🏢 Gestión de Espacios de Trabajo
836
+
837
+ | Método | Descripción | Parámetros |
838
+ |--------|-------------|------------|
839
+ | `createWorkspace()` | Crear nuevo espacio de trabajo | `CreateWorkspaceRequest` |
840
+ | `getWorkspaces()` | Obtener espacios de trabajo | `GetWorkspacesRequest` |
841
+ | `getWorkspacesByUser()` | Obtener espacios de trabajo del usuario | `GetWorkspacesByUserRequest` |
842
+ | `getUserWorkspaces()` | Obtener espacios de trabajo específicos del usuario | `GetUserWorkspaceRequest` |
843
+ | `getWorkspace()` | Obtener detalles del workspace | `GetWorkspaceRequest` |
844
+ | `deleteWorkspace()` | Eliminar espacio de trabajo | `DeleteWorkspaceRequest` |
845
+
846
+ #### 📈 Datos de Gráficos
847
+
848
+ | Método | Descripción | Parámetros |
849
+ |--------|-------------|------------|
850
+ | `getChartData()` | Obtener datos de gráficos | `ChartRequest` |
851
+
852
+ ### Entidades
853
+
854
+ #### Entidades Principales
855
+
856
+ - `Instrument`: Representación de instrumento financiero
857
+ - `Widget`: Configuración y datos del widget
858
+ - `Workspace`: Espacio de trabajo del usuario
859
+ - `ChartItem`: Punto de datos del gráfico
860
+ - `SearchResultItem`: Elemento de resultado de búsqueda
861
+
862
+ #### Entidades de Solicitud/Respuesta
863
+
864
+ - `SearchInstrumentsRequest`: Parámetros de búsqueda
865
+ - `CreateWidgetRequest`: Parámetros de creación de widget
866
+ - `CreateWorkspaceRequest`: Parámetros de creación de espacio de trabajo
867
+ - `ChartRequest`: Parámetros de solicitud de datos de gráfico
868
+
869
+ #### Tipos de Widgets
870
+
871
+ - `DYNAMIC_TABLE`: Tabla dinámica con datos en tiempo real
872
+ - `PREDEFINED_TABLE`: Tabla predefinida con estructura fija
873
+ - `CUSTOM_TABLE`: Tabla personalizable
874
+ - `NEWS_LIST`: Lista de noticias financieras
875
+ - `TICKER_TAPE`: Cinta de ticker con precios
876
+ - `CHART`: Gráfico de precios y volúmenes
877
+
878
+ #### Tipos de Períodos de Gráficos
879
+
880
+ - `day`: Períodos diarios
881
+ - `week`: Períodos semanales
882
+ - `month`: Períodos mensuales
883
+ - `year`: Períodos anuales
884
+
885
+ ## 🔗 Dependencias
886
+
887
+ - `@infosel-sdk/core`: Funcionalidad core del SDK (versión ^0.0.4)
888
+ - `axios`: Cliente HTTP
889
+ - `tslib`: Biblioteca runtime de TypeScript
890
+
891
+ ## 🆕 Novedades en Core v0.0.4
892
+
893
+ ### ✨ Configuration Builder Pattern
894
+
895
+ - **Nueva API fluida** para configuración sin duplicaciones
896
+ - **Validaciones centralizadas** con mensajes de error descriptivos
897
+ - **Single source of truth** para configuración de realm
898
+ - **Compatibilidad hacia atrás** mantenida
899
+
900
+ ### 🔧 Mejoras en Configuración
901
+
902
+ - **Configuración dinámica de realm** para múltiples ambientes
903
+ - **Validación de formatos** de realm, client_id y credenciales
904
+ - **Valores por defecto inteligentes** basados en el tipo de autenticación
905
+ - **Type safety mejorado** con TypeScript
906
+
907
+ ## 🧪 Testing
908
+
909
+ ### Pruebas Unitarias
910
+
911
+ ```bash
912
+ # Ejecutar tests unitarios
913
+ npm test
914
+
915
+ # Ejecutar tests con cobertura
916
+ npm run test:coverage
917
+ ```
918
+
919
+ ### Pruebas E2E (End-to-End)
920
+
921
+ Las pruebas e2e utilizan información real y autenticación con Keycloak para verificar el funcionamiento completo del SDK.
922
+
923
+ #### Configuración
924
+
925
+ ```bash
926
+ # Variables de entorno requeridas
927
+ KEYCLOAK_CLIENT_ID=
928
+ KEYCLOAK_CLIENT_SECRET=
929
+ TEST_ENV=qa # qa, prod, preprod
930
+ TEST_TIMEOUT=30000 # Timeout en milisegundos
931
+ DEBUG_E2E=true # Habilitar logs de debug
932
+ ```
933
+
934
+ #### Ejecución
935
+
936
+ ```bash
937
+ # Ejecutar todas las pruebas e2e
938
+ npm run test:e2e
939
+
940
+ # Ejecutar con debug habilitado
941
+ npm run test:e2e:debug
942
+
943
+ # Usando el script de utilidad
944
+ ./src/__tests__/e2e/run-e2e.sh
945
+
946
+ # Con opciones personalizadas
947
+ ./src/__tests__/e2e/run-e2e.sh -d -e prod -t 60000
948
+ ```
949
+
950
+ #### Script de Utilidad
951
+
952
+ El script `run-e2e.sh` proporciona una interfaz fácil para ejecutar pruebas e2e:
953
+
954
+ ```bash
955
+ # Mostrar ayuda
956
+ ./src/__tests__/e2e/run-e2e.sh --help
957
+
958
+ # Ejecutar con configuración por defecto
959
+ ./src/__tests__/e2e/run-e2e.sh
960
+
961
+ # Ejecutar en entorno de producción con debug
962
+ ./src/__tests__/e2e/run-e2e.sh -d -e prod
963
+
964
+ # Ejecutar con credenciales personalizadas
965
+ ./src/__tests__/e2e/run-e2e.sh -c my-client -s my-secret
966
+ ```
967
+
968
+ #### Pruebas Incluidas
969
+
970
+ - **SDK Core Configuration**: Verificación de inicialización y autenticación
971
+ - **Markets API Integration**: Conexión real a la API de markets
972
+ - **Workspace Operations**: Operaciones de workspace con datos reales
973
+ - **Performance and Reliability**: Verificación de tiempos de respuesta y concurrencia
974
+
975
+ #### Notas Importantes
976
+
977
+ - Las pruebas e2e requieren conectividad a internet
978
+ - Utilizan servicios reales, no mocks
979
+ - Los timeouts son más largos que en pruebas unitarias
980
+ - Se ejecutan secuencialmente para evitar conflictos
981
+ - No se incluyen en el coverage report
982
+
983
+ Para más detalles, consulta el [README de pruebas e2e](src/__tests__/e2e/README.md).
984
+
985
+
986
+ ## 📞 Soporte
987
+
988
+ Para soporte y preguntas, por favor contacta al equipo de desarrollo de Infosel.
989
+
990
+ ## 🔗 Paquetes Relacionados
991
+
992
+ - `@infosel-sdk/core`: Funcionalidad core del SDK (versión ^0.0.4)
993
+ - `@infosel-sdk/news`: SDK de noticias y contenido
994
+ - `@infosel-sdk/securities`: SDK de valores y trading
995
+
996
+ ---