@fintekkers/ledger-models 0.1.118 → 0.1.128

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 (260) hide show
  1. package/.npmrc.example +4 -0
  2. package/catalog/fields.json +275 -0
  3. package/catalog/measures.json +259 -0
  4. package/node/fintekkers/models/portfolio/portfolio_pb.js +13 -19
  5. package/node/fintekkers/models/position/field_pb.js +1 -7
  6. package/node/fintekkers/models/position/measure_pb.d.ts +18 -0
  7. package/node/fintekkers/models/position/measure_pb.js +20 -8
  8. package/node/fintekkers/models/position/position_filter_pb.js +7 -13
  9. package/node/fintekkers/models/position/position_pb.d.ts +7 -0
  10. package/node/fintekkers/models/position/position_pb.js +64 -17
  11. package/node/fintekkers/models/position/position_status_pb.js +1 -7
  12. package/node/fintekkers/models/position/position_util_pb.js +11 -17
  13. package/node/fintekkers/models/price/price_pb.d.ts +4 -0
  14. package/node/fintekkers/models/price/price_pb.js +45 -19
  15. package/node/fintekkers/models/price/price_type_grpc_pb.js +1 -0
  16. package/node/fintekkers/models/price/price_type_pb.d.ts +15 -0
  17. package/node/fintekkers/models/price/price_type_pb.js +30 -0
  18. package/node/fintekkers/models/security/bond/auction_type_pb.js +1 -7
  19. package/node/fintekkers/models/security/bond/issuance_pb.js +17 -23
  20. package/node/fintekkers/models/security/coupon_frequency_pb.js +1 -7
  21. package/node/fintekkers/models/security/coupon_type_pb.js +1 -7
  22. package/node/fintekkers/models/security/identifier/identifier_pb.js +9 -15
  23. package/node/fintekkers/models/security/identifier/identifier_type_pb.d.ts +1 -0
  24. package/node/fintekkers/models/security/identifier/identifier_type_pb.js +2 -7
  25. package/node/fintekkers/models/security/index/index_type_grpc_pb.js +1 -0
  26. package/node/fintekkers/models/security/index/index_type_pb.d.ts +22 -0
  27. package/node/fintekkers/models/security/index/index_type_pb.js +37 -0
  28. package/node/fintekkers/models/security/index_composition_pb.d.ts +126 -0
  29. package/node/fintekkers/models/security/index_composition_pb.js +992 -0
  30. package/node/fintekkers/models/security/security_pb.d.ts +382 -0
  31. package/node/fintekkers/models/security/security_pb.js +3183 -57
  32. package/node/fintekkers/models/security/security_quantity_type_pb.js +1 -7
  33. package/node/fintekkers/models/security/security_type_pb.d.ts +3 -0
  34. package/node/fintekkers/models/security/security_type_pb.js +5 -8
  35. package/node/fintekkers/models/security/tenor_pb.js +9 -15
  36. package/node/fintekkers/models/security/tenor_type_pb.js +1 -7
  37. package/node/fintekkers/models/strategy/strategy_allocation_pb.js +13 -19
  38. package/node/fintekkers/models/strategy/strategy_pb.js +14 -20
  39. package/node/fintekkers/models/transaction/transaction_pb.js +24 -30
  40. package/node/fintekkers/models/transaction/transaction_type_pb.js +1 -7
  41. package/node/fintekkers/models/util/api/api_key_pb.js +10 -16
  42. package/node/fintekkers/models/util/currency_pb.d.ts +27 -0
  43. package/node/fintekkers/models/util/currency_pb.js +170 -0
  44. package/node/fintekkers/models/util/date_range_pb.js +8 -14
  45. package/node/fintekkers/models/util/decimal_value_pb.js +4 -10
  46. package/node/fintekkers/models/util/endpoint_pb.js +7 -13
  47. package/node/fintekkers/models/util/local_date_pb.js +5 -11
  48. package/node/fintekkers/models/util/local_timestamp_pb.js +5 -11
  49. package/node/fintekkers/models/util/lock/node_partition_pb.js +9 -15
  50. package/node/fintekkers/models/util/lock/node_state_pb.js +10 -16
  51. package/node/fintekkers/models/util/uuid_pb.js +3 -9
  52. package/node/fintekkers/models/valuation/cashflow_pb.d.ts +57 -0
  53. package/node/fintekkers/models/valuation/cashflow_pb.js +401 -0
  54. package/node/fintekkers/requests/index_composition/create_index_composition_request_pb.d.ts +79 -0
  55. package/node/fintekkers/requests/index_composition/create_index_composition_request_pb.js +599 -0
  56. package/node/fintekkers/requests/index_composition/get_index_composition_request_pb.d.ts +84 -0
  57. package/node/fintekkers/requests/index_composition/get_index_composition_request_pb.js +624 -0
  58. package/node/fintekkers/requests/portfolio/create_portfolio_request_pb.js +7 -13
  59. package/node/fintekkers/requests/portfolio/create_portfolio_response_pb.js +8 -14
  60. package/node/fintekkers/requests/portfolio/query_portfolio_request_pb.d.ts +3 -0
  61. package/node/fintekkers/requests/portfolio/query_portfolio_request_pb.js +39 -15
  62. package/node/fintekkers/requests/portfolio/query_portfolio_response_pb.js +8 -14
  63. package/node/fintekkers/requests/position/query_position_request_pb.js +15 -27
  64. package/node/fintekkers/requests/position/query_position_response_pb.js +10 -16
  65. package/node/fintekkers/requests/price/create_price_request_pb.js +7 -13
  66. package/node/fintekkers/requests/price/create_price_response_pb.js +8 -14
  67. package/node/fintekkers/requests/price/query_price_request_pb.js +12 -18
  68. package/node/fintekkers/requests/price/query_price_response_pb.js +8 -14
  69. package/node/fintekkers/requests/security/create_security_request_pb.js +7 -13
  70. package/node/fintekkers/requests/security/create_security_response_pb.js +9 -15
  71. package/node/fintekkers/requests/security/get_field_values_request_pb.js +7 -13
  72. package/node/fintekkers/requests/security/get_field_values_response_pb.js +7 -13
  73. package/node/fintekkers/requests/security/get_fields_response_pb.js +8 -17
  74. package/node/fintekkers/requests/security/query_security_request_pb.d.ts +3 -0
  75. package/node/fintekkers/requests/security/query_security_request_pb.js +39 -15
  76. package/node/fintekkers/requests/security/query_security_response_pb.js +9 -15
  77. package/node/fintekkers/requests/transaction/create_transaction_request_pb.js +7 -13
  78. package/node/fintekkers/requests/transaction/create_transaction_response_pb.js +8 -14
  79. package/node/fintekkers/requests/transaction/query_transaction_request_pb.js +10 -16
  80. package/node/fintekkers/requests/transaction/query_transaction_response_pb.js +9 -15
  81. package/node/fintekkers/requests/util/delete_request_pb.d.ts +135 -0
  82. package/node/fintekkers/requests/util/delete_request_pb.js +1051 -0
  83. package/node/fintekkers/requests/util/errors/error_pb.js +7 -13
  84. package/node/fintekkers/requests/util/errors/message_pb.js +6 -12
  85. package/node/fintekkers/requests/util/errors/summary_pb.js +4 -10
  86. package/node/fintekkers/requests/util/lock/lock_request_pb.js +8 -14
  87. package/node/fintekkers/requests/util/lock/lock_response_pb.js +9 -15
  88. package/node/fintekkers/requests/util/operation_pb.js +1 -7
  89. package/node/fintekkers/requests/valuation/curve_request_pb.d.ts +85 -0
  90. package/node/fintekkers/requests/valuation/curve_request_pb.js +646 -0
  91. package/node/fintekkers/requests/valuation/curve_response_pb.d.ts +105 -0
  92. package/node/fintekkers/requests/valuation/curve_response_pb.js +806 -0
  93. package/node/fintekkers/requests/valuation/product_inputs.test.ts +172 -0
  94. package/node/fintekkers/requests/valuation/product_inputs_pb.d.ts +137 -0
  95. package/node/fintekkers/requests/valuation/product_inputs_pb.js +987 -0
  96. package/node/fintekkers/requests/valuation/valuation_request_pb.d.ts +19 -0
  97. package/node/fintekkers/requests/valuation/valuation_request_pb.js +168 -22
  98. package/node/fintekkers/requests/valuation/valuation_response_pb.d.ts +13 -0
  99. package/node/fintekkers/requests/valuation/valuation_response_pb.js +118 -16
  100. package/node/fintekkers/services/index-composition-service/index_composition_service_grpc_pb.d.ts +60 -0
  101. package/node/fintekkers/services/index-composition-service/index_composition_service_grpc_pb.js +87 -0
  102. package/node/fintekkers/services/index-composition-service/index_composition_service_pb.d.ts +9 -0
  103. package/node/fintekkers/services/index-composition-service/index_composition_service_pb.js +21 -0
  104. package/node/fintekkers/services/lock-service/lock_service_grpc_pb.js +22 -22
  105. package/node/fintekkers/services/lock-service/lock_service_pb.js +15 -21
  106. package/node/fintekkers/services/portfolio-service/portfolio_service_grpc_pb.d.ts +18 -0
  107. package/node/fintekkers/services/portfolio-service/portfolio_service_grpc_pb.js +39 -5
  108. package/node/fintekkers/services/portfolio-service/portfolio_service_pb.d.ts +1 -0
  109. package/node/fintekkers/services/portfolio-service/portfolio_service_pb.js +3 -7
  110. package/node/fintekkers/services/position-service/position_service_grpc_pb.d.ts +37 -0
  111. package/node/fintekkers/services/position-service/position_service_grpc_pb.js +64 -6
  112. package/node/fintekkers/services/position-service/position_service_pb.d.ts +3 -0
  113. package/node/fintekkers/services/position-service/position_service_pb.js +7 -7
  114. package/node/fintekkers/services/price-service/price_service_grpc_pb.js +5 -5
  115. package/node/fintekkers/services/price-service/price_service_pb.js +1 -7
  116. package/node/fintekkers/services/security-service/security_service_grpc_pb.d.ts +18 -0
  117. package/node/fintekkers/services/security-service/security_service_grpc_pb.js +43 -9
  118. package/node/fintekkers/services/security-service/security_service_pb.d.ts +1 -0
  119. package/node/fintekkers/services/security-service/security_service_pb.js +3 -7
  120. package/node/fintekkers/services/transaction-service/transaction_service_grpc_pb.d.ts +55 -0
  121. package/node/fintekkers/services/transaction-service/transaction_service_grpc_pb.js +97 -5
  122. package/node/fintekkers/services/transaction-service/transaction_service_pb.d.ts +4 -0
  123. package/node/fintekkers/services/transaction-service/transaction_service_pb.js +9 -7
  124. package/node/fintekkers/services/valuation-service/valuation_service_grpc_pb.d.ts +19 -0
  125. package/node/fintekkers/services/valuation-service/valuation_service_grpc_pb.js +37 -2
  126. package/node/fintekkers/services/valuation-service/valuation_service_pb.d.ts +2 -0
  127. package/node/fintekkers/services/valuation-service/valuation_service_pb.js +5 -7
  128. package/node/wrappers/models/portfolio/portfolio.js.map +1 -1
  129. package/node/wrappers/models/portfolio/portfolio.test.d.ts +2 -0
  130. package/node/wrappers/models/portfolio/portfolio.test.js +29 -0
  131. package/node/wrappers/models/portfolio/portfolio.test.js.map +1 -0
  132. package/node/wrappers/models/portfolio/portfolio.test.ts +28 -0
  133. package/node/wrappers/models/position/position.js +25 -13
  134. package/node/wrappers/models/position/position.js.map +1 -1
  135. package/node/wrappers/models/position/position.test.js +20 -0
  136. package/node/wrappers/models/position/position.test.js.map +1 -1
  137. package/node/wrappers/models/position/position.test.ts +23 -0
  138. package/node/wrappers/models/position/position.ts +27 -13
  139. package/node/wrappers/models/position/positionfilter.js +1 -1
  140. package/node/wrappers/models/position/positionfilter.js.map +1 -1
  141. package/node/wrappers/models/position/positionfilter.test.js.map +1 -1
  142. package/node/wrappers/models/price/Price.cash.test.d.ts +1 -0
  143. package/node/wrappers/models/price/Price.cash.test.js +42 -0
  144. package/node/wrappers/models/price/Price.cash.test.js.map +1 -0
  145. package/node/wrappers/models/price/Price.cash.test.ts +43 -0
  146. package/node/wrappers/models/price/Price.d.ts +38 -0
  147. package/node/wrappers/models/price/Price.js +111 -0
  148. package/node/wrappers/models/price/Price.js.map +1 -0
  149. package/node/wrappers/models/price/Price.test.d.ts +1 -0
  150. package/node/wrappers/models/price/Price.test.js +55 -0
  151. package/node/wrappers/models/price/Price.test.js.map +1 -0
  152. package/node/wrappers/models/price/Price.test.ts +63 -0
  153. package/node/wrappers/models/price/Price.ts +123 -0
  154. package/node/wrappers/models/security/BondSecurity.d.ts +17 -2
  155. package/node/wrappers/models/security/BondSecurity.js +59 -11
  156. package/node/wrappers/models/security/BondSecurity.js.map +1 -1
  157. package/node/wrappers/models/security/BondSecurity.priceScale.test.d.ts +1 -0
  158. package/node/wrappers/models/security/BondSecurity.priceScale.test.js +36 -0
  159. package/node/wrappers/models/security/BondSecurity.priceScale.test.js.map +1 -0
  160. package/node/wrappers/models/security/BondSecurity.priceScale.test.ts +36 -0
  161. package/node/wrappers/models/security/BondSecurity.test.js +34 -1
  162. package/node/wrappers/models/security/BondSecurity.test.js.map +1 -1
  163. package/node/wrappers/models/security/BondSecurity.test.ts +42 -1
  164. package/node/wrappers/models/security/BondSecurity.ts +63 -11
  165. package/node/wrappers/models/security/security-roundtrip.test.d.ts +1 -0
  166. package/node/wrappers/models/security/security-roundtrip.test.js +173 -0
  167. package/node/wrappers/models/security/security-roundtrip.test.js.map +1 -0
  168. package/node/wrappers/models/security/security-roundtrip.test.ts +192 -0
  169. package/node/wrappers/models/security/security.d.ts +8 -0
  170. package/node/wrappers/models/security/security.js +24 -2
  171. package/node/wrappers/models/security/security.js.map +1 -1
  172. package/node/wrappers/models/security/security.ts +26 -2
  173. package/node/wrappers/models/security/term.js +31 -6
  174. package/node/wrappers/models/security/term.js.map +1 -1
  175. package/node/wrappers/models/security/term.test.js +21 -2
  176. package/node/wrappers/models/security/term.test.js.map +1 -1
  177. package/node/wrappers/models/security/term.test.ts +28 -2
  178. package/node/wrappers/models/security/term.ts +34 -6
  179. package/node/wrappers/models/transaction/transaction.d.ts +59 -1
  180. package/node/wrappers/models/transaction/transaction.derived.test.d.ts +1 -0
  181. package/node/wrappers/models/transaction/transaction.derived.test.js +199 -0
  182. package/node/wrappers/models/transaction/transaction.derived.test.js.map +1 -0
  183. package/node/wrappers/models/transaction/transaction.derived.test.ts +251 -0
  184. package/node/wrappers/models/transaction/transaction.js +350 -2
  185. package/node/wrappers/models/transaction/transaction.js.map +1 -1
  186. package/node/wrappers/models/transaction/transaction.ts +416 -2
  187. package/node/wrappers/models/transaction/transaction_constructor.test.d.ts +1 -0
  188. package/node/wrappers/models/transaction/transaction_constructor.test.js +100 -0
  189. package/node/wrappers/models/transaction/transaction_constructor.test.js.map +1 -0
  190. package/node/wrappers/models/transaction/transaction_constructor.test.ts +111 -0
  191. package/node/wrappers/models/transaction/transaction_type.js.map +1 -1
  192. package/node/wrappers/models/utils/datetime.d.ts +6 -0
  193. package/node/wrappers/models/utils/datetime.js +14 -6
  194. package/node/wrappers/models/utils/datetime.js.map +1 -1
  195. package/node/wrappers/models/utils/datetime.ts +15 -6
  196. package/node/wrappers/models/utils/protoEnum.js.map +1 -1
  197. package/node/wrappers/models/utils/requestcontext.d.ts +17 -3
  198. package/node/wrappers/models/utils/requestcontext.js +39 -7
  199. package/node/wrappers/models/utils/requestcontext.js.map +1 -1
  200. package/node/wrappers/models/utils/requestcontext.test.d.ts +1 -0
  201. package/node/wrappers/models/utils/requestcontext.test.js +108 -0
  202. package/node/wrappers/models/utils/requestcontext.test.js.map +1 -0
  203. package/node/wrappers/models/utils/requestcontext.test.ts +85 -0
  204. package/node/wrappers/models/utils/requestcontext.ts +49 -9
  205. package/node/wrappers/models/utils/serialization.d.ts +2 -1
  206. package/node/wrappers/models/utils/serialization.js +4 -0
  207. package/node/wrappers/models/utils/serialization.js.map +1 -1
  208. package/node/wrappers/models/utils/serialization.test.js +15 -0
  209. package/node/wrappers/models/utils/serialization.test.js.map +1 -1
  210. package/node/wrappers/models/utils/serialization.test.ts +19 -1
  211. package/node/wrappers/models/utils/serialization.ts +5 -4
  212. package/node/wrappers/models/utils/serialization.util.js.map +1 -1
  213. package/node/wrappers/models/utils/uuid.js +9 -1
  214. package/node/wrappers/models/utils/uuid.js.map +1 -1
  215. package/node/wrappers/models/utils/uuid.test.js +22 -4
  216. package/node/wrappers/models/utils/uuid.test.js.map +1 -1
  217. package/node/wrappers/models/utils/uuid.test.ts +26 -5
  218. package/node/wrappers/models/utils/uuid.ts +7 -1
  219. package/node/wrappers/services/apikey.test.d.ts +7 -0
  220. package/node/wrappers/services/apikey.test.js +56 -0
  221. package/node/wrappers/services/apikey.test.js.map +1 -0
  222. package/node/wrappers/services/apikey.test.ts +65 -0
  223. package/node/wrappers/services/portfolio-service/PortfolioService.d.ts +1 -1
  224. package/node/wrappers/services/portfolio-service/PortfolioService.js +8 -2
  225. package/node/wrappers/services/portfolio-service/PortfolioService.js.map +1 -1
  226. package/node/wrappers/services/portfolio-service/PortfolioService.ts +7 -2
  227. package/node/wrappers/services/position-service/PositionService.d.ts +1 -1
  228. package/node/wrappers/services/position-service/PositionService.js +8 -2
  229. package/node/wrappers/services/position-service/PositionService.js.map +1 -1
  230. package/node/wrappers/services/position-service/PositionService.ts +7 -2
  231. package/node/wrappers/services/position-service/position.test.js.map +1 -1
  232. package/node/wrappers/services/price-service/PriceService.d.ts +29 -0
  233. package/node/wrappers/services/price-service/PriceService.js +151 -0
  234. package/node/wrappers/services/price-service/PriceService.js.map +1 -0
  235. package/node/wrappers/services/price-service/PriceService.ts +127 -0
  236. package/node/wrappers/services/price-service/price-wrapper.test.d.ts +1 -0
  237. package/node/wrappers/services/price-service/price-wrapper.test.js +132 -0
  238. package/node/wrappers/services/price-service/price-wrapper.test.js.map +1 -0
  239. package/node/wrappers/services/price-service/price-wrapper.test.ts +120 -0
  240. package/node/wrappers/services/price-service/price.test.d.ts +1 -0
  241. package/node/wrappers/services/price-service/price.test.js +198 -0
  242. package/node/wrappers/services/price-service/price.test.js.map +1 -0
  243. package/node/wrappers/services/price-service/price.test.ts +205 -0
  244. package/node/wrappers/services/security-service/SecurityService.d.ts +1 -1
  245. package/node/wrappers/services/security-service/SecurityService.js +8 -2
  246. package/node/wrappers/services/security-service/SecurityService.js.map +1 -1
  247. package/node/wrappers/services/security-service/SecurityService.searchByUuid.test.d.ts +1 -0
  248. package/node/wrappers/services/security-service/SecurityService.searchByUuid.test.js +38 -0
  249. package/node/wrappers/services/security-service/SecurityService.searchByUuid.test.js.map +1 -0
  250. package/node/wrappers/services/security-service/SecurityService.searchByUuid.test.ts +32 -0
  251. package/node/wrappers/services/security-service/SecurityService.ts +7 -2
  252. package/node/wrappers/services/security-service/security.maturityLadder.test.js.map +1 -1
  253. package/node/wrappers/services/transaction-service/TransactionService.d.ts +1 -1
  254. package/node/wrappers/services/transaction-service/TransactionService.js +8 -2
  255. package/node/wrappers/services/transaction-service/TransactionService.js.map +1 -1
  256. package/node/wrappers/services/transaction-service/TransactionService.ts +7 -2
  257. package/node/wrappers/services/transaction-service/transaction.search.test.js.map +1 -1
  258. package/node/wrappers/services/transaction-service/transaction.test.js.map +1 -1
  259. package/package.json +3 -2
  260. package/.env +0 -3
@@ -0,0 +1,151 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
26
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
27
+ return new (P || (P = Promise))(function (resolve, reject) {
28
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
29
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
30
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
31
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
32
+ });
33
+ };
34
+ var __importDefault = (this && this.__importDefault) || function (mod) {
35
+ return (mod && mod.__esModule) ? mod : { "default": mod };
36
+ };
37
+ Object.defineProperty(exports, "__esModule", { value: true });
38
+ exports.PriceService = void 0;
39
+ const util_1 = require("util");
40
+ const Price_1 = __importDefault(require("../../models/price/Price"));
41
+ const positionfilter_1 = require("../../models/position/positionfilter");
42
+ const field_pb_1 = require("../../../fintekkers/models/position/field_pb");
43
+ const price_service_grpc_pb_1 = require("../../../fintekkers/services/price-service/price_service_grpc_pb");
44
+ const query_price_request_pb_1 = require("../../../fintekkers/requests/price/query_price_request_pb");
45
+ const create_price_request_pb_1 = require("../../../fintekkers/requests/price/create_price_request_pb");
46
+ const uuid_1 = require("../../models/utils/uuid");
47
+ const dt = __importStar(require("../../models/utils/datetime"));
48
+ const requestcontext_1 = __importDefault(require("../../models/utils/requestcontext"));
49
+ class PriceService {
50
+ constructor(apiKey) {
51
+ if (apiKey) {
52
+ const { credentials, interceptors } = requestcontext_1.default.getAuthenticatedClientOptions(apiKey);
53
+ this.client = new price_service_grpc_pb_1.PriceClient(requestcontext_1.default.apiURL, credentials, { interceptors });
54
+ }
55
+ else {
56
+ this.client = new price_service_grpc_pb_1.PriceClient(requestcontext_1.default.apiURL, requestcontext_1.default.apiCredentials);
57
+ }
58
+ }
59
+ close() {
60
+ this.client.close();
61
+ }
62
+ validateCreateOrUpdate(price) {
63
+ return __awaiter(this, void 0, void 0, function* () {
64
+ const priceProto = price instanceof Price_1.default ? price.proto : price;
65
+ const createRequest = new create_price_request_pb_1.CreatePriceRequestProto();
66
+ createRequest.setObjectClass('PriceRequest');
67
+ createRequest.setVersion('0.0.1');
68
+ createRequest.setCreatePriceInput(priceProto);
69
+ const validateAsync = (0, util_1.promisify)(this.client.validateCreateOrUpdate.bind(this.client));
70
+ const response = yield validateAsync(createRequest);
71
+ return response;
72
+ });
73
+ }
74
+ createOrUpdate(price) {
75
+ return __awaiter(this, void 0, void 0, function* () {
76
+ const priceProto = price instanceof Price_1.default ? price.proto : price;
77
+ const createRequest = new create_price_request_pb_1.CreatePriceRequestProto();
78
+ createRequest.setObjectClass('PriceRequest');
79
+ createRequest.setVersion('0.0.1');
80
+ createRequest.setCreatePriceInput(priceProto);
81
+ const createAsync = (0, util_1.promisify)(this.client.createOrUpdate.bind(this.client));
82
+ const response = yield createAsync(createRequest);
83
+ return response;
84
+ });
85
+ }
86
+ searchPriceAsOfNow(positionFilter) {
87
+ return __awaiter(this, void 0, void 0, function* () {
88
+ const now = dt.ZonedDateTime.now().toProto();
89
+ return this.search(now, positionFilter);
90
+ });
91
+ }
92
+ /**
93
+ * Search for prices matching the given filter, returning Price wrapper objects.
94
+ */
95
+ search(asOf, positionFilter) {
96
+ return __awaiter(this, void 0, void 0, function* () {
97
+ const searchRequest = new query_price_request_pb_1.QueryPriceRequestProto();
98
+ searchRequest.setObjectClass('PriceRequest');
99
+ searchRequest.setVersion('0.0.1');
100
+ searchRequest.setAsOf(asOf);
101
+ searchRequest.setSearchPriceInput(positionFilter.toProto());
102
+ const tmpClient = this.client;
103
+ const results = [];
104
+ function processStreamSynchronously() {
105
+ return __awaiter(this, void 0, void 0, function* () {
106
+ const stream = tmpClient.search(searchRequest);
107
+ return new Promise((resolve, reject) => {
108
+ stream.on('data', (response) => {
109
+ response.getPriceResponseList().forEach((priceProto) => {
110
+ results.push(new Price_1.default(priceProto));
111
+ });
112
+ });
113
+ stream.on('end', () => {
114
+ resolve(results);
115
+ });
116
+ stream.on('error', (err) => {
117
+ console.error('Error in the price stream:', err);
118
+ reject(err);
119
+ });
120
+ });
121
+ });
122
+ }
123
+ return yield processStreamSynchronously();
124
+ });
125
+ }
126
+ /**
127
+ * Backward-compatible alias for search().
128
+ */
129
+ searchPrice(asOf, positionFilter) {
130
+ return __awaiter(this, void 0, void 0, function* () {
131
+ const prices = yield this.search(asOf, positionFilter);
132
+ return prices.map(p => p.proto);
133
+ });
134
+ }
135
+ /**
136
+ * Search prices by security UUID string.
137
+ * Convenience method so callers can write:
138
+ * priceService.searchBySecurityId('18e8c4e6-3da0-47c9-...')
139
+ */
140
+ searchBySecurityId(securityId, asOf) {
141
+ return __awaiter(this, void 0, void 0, function* () {
142
+ const effectiveAsOf = asOf !== null && asOf !== void 0 ? asOf : dt.ZonedDateTime.now().toProto();
143
+ const securityUuid = new uuid_1.UUID(uuid_1.UUID.fromString(securityId));
144
+ const filter = new positionfilter_1.PositionFilter()
145
+ .addEqualsFilter(field_pb_1.FieldProto.SECURITY_ID, securityUuid);
146
+ return this.search(effectiveAsOf, filter);
147
+ });
148
+ }
149
+ }
150
+ exports.PriceService = PriceService;
151
+ //# sourceMappingURL=PriceService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PriceService.js","sourceRoot":"","sources":["PriceService.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,127 @@
1
+ import { promisify } from 'util';
2
+
3
+ import Price from '../../models/price/Price';
4
+ import { PositionFilter } from '../../models/position/positionfilter';
5
+ import { FieldProto } from '../../../fintekkers/models/position/field_pb';
6
+ import { LocalTimestampProto } from '../../../fintekkers/models/util/local_timestamp_pb';
7
+ import { PriceProto } from '../../../fintekkers/models/price/price_pb';
8
+ import { SummaryProto } from '../../../fintekkers/requests/util/errors/summary_pb';
9
+
10
+ import { PriceClient } from '../../../fintekkers/services/price-service/price_service_grpc_pb';
11
+ import { QueryPriceRequestProto } from '../../../fintekkers/requests/price/query_price_request_pb';
12
+ import { QueryPriceResponseProto } from '../../../fintekkers/requests/price/query_price_response_pb';
13
+ import { CreatePriceRequestProto } from '../../../fintekkers/requests/price/create_price_request_pb';
14
+ import { CreatePriceResponseProto } from '../../../fintekkers/requests/price/create_price_response_pb';
15
+
16
+ import { UUID } from '../../models/utils/uuid';
17
+ import * as dt from '../../models/utils/datetime';
18
+ import EnvConfig from '../../models/utils/requestcontext';
19
+
20
+ class PriceService {
21
+ private client: PriceClient;
22
+
23
+ constructor(apiKey?: string) {
24
+ if (apiKey) {
25
+ const { credentials, interceptors } = EnvConfig.getAuthenticatedClientOptions(apiKey);
26
+ this.client = new PriceClient(EnvConfig.apiURL, credentials, { interceptors });
27
+ } else {
28
+ this.client = new PriceClient(EnvConfig.apiURL, EnvConfig.apiCredentials);
29
+ }
30
+ }
31
+
32
+ close(): void {
33
+ this.client.close();
34
+ }
35
+
36
+ async validateCreateOrUpdate(price: Price | PriceProto): Promise<SummaryProto> {
37
+ const priceProto = price instanceof Price ? price.proto : price;
38
+
39
+ const createRequest = new CreatePriceRequestProto();
40
+ createRequest.setObjectClass('PriceRequest');
41
+ createRequest.setVersion('0.0.1');
42
+ createRequest.setCreatePriceInput(priceProto);
43
+
44
+ const validateAsync = promisify(this.client.validateCreateOrUpdate.bind(this.client));
45
+ const response = await validateAsync(createRequest);
46
+ return response as SummaryProto;
47
+ }
48
+
49
+ async createOrUpdate(price: Price | PriceProto): Promise<CreatePriceResponseProto> {
50
+ const priceProto = price instanceof Price ? price.proto : price;
51
+
52
+ const createRequest = new CreatePriceRequestProto();
53
+ createRequest.setObjectClass('PriceRequest');
54
+ createRequest.setVersion('0.0.1');
55
+ createRequest.setCreatePriceInput(priceProto);
56
+
57
+ const createAsync = promisify(this.client.createOrUpdate.bind(this.client));
58
+ const response = await createAsync(createRequest);
59
+ return response as CreatePriceResponseProto;
60
+ }
61
+
62
+ async searchPriceAsOfNow(positionFilter: PositionFilter): Promise<Price[]> {
63
+ const now = dt.ZonedDateTime.now().toProto();
64
+ return this.search(now, positionFilter);
65
+ }
66
+
67
+ /**
68
+ * Search for prices matching the given filter, returning Price wrapper objects.
69
+ */
70
+ async search(asOf: LocalTimestampProto, positionFilter: PositionFilter): Promise<Price[]> {
71
+ const searchRequest = new QueryPriceRequestProto();
72
+ searchRequest.setObjectClass('PriceRequest');
73
+ searchRequest.setVersion('0.0.1');
74
+ searchRequest.setAsOf(asOf);
75
+ searchRequest.setSearchPriceInput(positionFilter.toProto());
76
+
77
+ const tmpClient = this.client;
78
+ const results: Price[] = [];
79
+
80
+ async function processStreamSynchronously(): Promise<Price[]> {
81
+ const stream = tmpClient.search(searchRequest);
82
+
83
+ return new Promise<Price[]>((resolve, reject) => {
84
+ stream.on('data', (response: QueryPriceResponseProto) => {
85
+ response.getPriceResponseList().forEach((priceProto) => {
86
+ results.push(new Price(priceProto));
87
+ });
88
+ });
89
+
90
+ stream.on('end', () => {
91
+ resolve(results);
92
+ });
93
+
94
+ stream.on('error', (err) => {
95
+ console.error('Error in the price stream:', err);
96
+ reject(err);
97
+ });
98
+ });
99
+ }
100
+
101
+ return await processStreamSynchronously();
102
+ }
103
+
104
+ /**
105
+ * Backward-compatible alias for search().
106
+ */
107
+ async searchPrice(asOf: LocalTimestampProto, positionFilter: PositionFilter): Promise<PriceProto[]> {
108
+ const prices = await this.search(asOf, positionFilter);
109
+ return prices.map(p => p.proto);
110
+ }
111
+
112
+ /**
113
+ * Search prices by security UUID string.
114
+ * Convenience method so callers can write:
115
+ * priceService.searchBySecurityId('18e8c4e6-3da0-47c9-...')
116
+ */
117
+ async searchBySecurityId(securityId: string, asOf?: LocalTimestampProto): Promise<Price[]> {
118
+ const effectiveAsOf = asOf ?? dt.ZonedDateTime.now().toProto();
119
+ const securityUuid = new UUID(UUID.fromString(securityId));
120
+ const filter = new PositionFilter()
121
+ .addEqualsFilter(FieldProto.SECURITY_ID, securityUuid);
122
+
123
+ return this.search(effectiveAsOf, filter);
124
+ }
125
+ }
126
+
127
+ export { PriceService };
@@ -0,0 +1,132 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
26
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
27
+ return new (P || (P = Promise))(function (resolve, reject) {
28
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
29
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
30
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
31
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
32
+ });
33
+ };
34
+ var __importDefault = (this && this.__importDefault) || function (mod) {
35
+ return (mod && mod.__esModule) ? mod : { "default": mod };
36
+ };
37
+ Object.defineProperty(exports, "__esModule", { value: true });
38
+ const PriceService_1 = require("./PriceService");
39
+ const Price_1 = __importDefault(require("../../models/price/Price"));
40
+ const positionfilter_1 = require("../../models/position/positionfilter");
41
+ const uuid_1 = require("../../models/utils/uuid");
42
+ const dt = __importStar(require("../../models/utils/datetime"));
43
+ const grpc = __importStar(require("@grpc/grpc-js"));
44
+ const util_1 = require("util");
45
+ const price_service_grpc_pb_1 = require("../../../fintekkers/services/price-service/price_service_grpc_pb");
46
+ const query_price_request_pb_1 = require("../../../fintekkers/requests/price/query_price_request_pb");
47
+ const decimal_js_1 = require("decimal.js");
48
+ const PRICE_SERVICE_URL = 'localhost:8083';
49
+ process.env['API_URL'] = PRICE_SERVICE_URL;
50
+ const priceService = new PriceService_1.PriceService();
51
+ afterAll(() => {
52
+ priceService.close();
53
+ });
54
+ /**
55
+ * Helper: discover a security UUID that has prices in the system.
56
+ */
57
+ function getSecurityUuidWithPrices() {
58
+ return __awaiter(this, void 0, void 0, function* () {
59
+ const client = new price_service_grpc_pb_1.PriceClient(PRICE_SERVICE_URL, grpc.credentials.createInsecure());
60
+ const listRequest = new query_price_request_pb_1.QueryPriceRequestProto();
61
+ listRequest.setObjectClass('PriceRequest');
62
+ listRequest.setVersion('0.0.1');
63
+ const listIdsAsync = (0, util_1.promisify)(client.listIds.bind(client));
64
+ const listResponse = yield listIdsAsync(listRequest);
65
+ const priceUuids = listResponse.getPriceResponseList();
66
+ expect(priceUuids.length).toBeGreaterThan(0);
67
+ const getRequest = new query_price_request_pb_1.QueryPriceRequestProto();
68
+ getRequest.setObjectClass('PriceRequest');
69
+ getRequest.setVersion('0.0.1');
70
+ getRequest.setUuidsList([priceUuids[0].getUuid()]);
71
+ const getByIdsAsync = (0, util_1.promisify)(client.getByIds.bind(client));
72
+ const getResponse = yield getByIdsAsync(getRequest);
73
+ const prices = getResponse.getPriceResponseList();
74
+ expect(prices.length).toBeGreaterThan(0);
75
+ const securityUuidProto = prices[0].getSecurity().getUuid();
76
+ return { uuid: uuid_1.UUID.fromU8Array(securityUuidProto.getRawUuid_asU8()), client };
77
+ });
78
+ }
79
+ test('search() returns Price wrapper objects', () => __awaiter(void 0, void 0, void 0, function* () {
80
+ const now = dt.ZonedDateTime.now();
81
+ const emptyFilter = new positionfilter_1.PositionFilter();
82
+ const prices = yield priceService.search(now.toProto(), emptyFilter);
83
+ expect(prices.length).toBeGreaterThan(0);
84
+ const firstPrice = prices[0];
85
+ expect(firstPrice).toBeInstanceOf(Price_1.default);
86
+ expect(firstPrice.getPrice()).toBeInstanceOf(decimal_js_1.Decimal);
87
+ expect(firstPrice.getAsOf()).toBeTruthy();
88
+ expect(firstPrice.getSecurityID()).toBeTruthy();
89
+ console.log(`First price: ${firstPrice.toString()}`);
90
+ }), 120000);
91
+ test('createOrUpdate accepts a Price wrapper object', () => __awaiter(void 0, void 0, void 0, function* () {
92
+ const { uuid: securityUuid, client } = yield getSecurityUuidWithPrices();
93
+ client.close();
94
+ // Use Price.fromSimple — the ergonomic constructor
95
+ const price = Price_1.default.fromSimple(securityUuid.toString(), 98.75, new Date());
96
+ const response = yield priceService.createOrUpdate(price);
97
+ expect(response).toBeTruthy();
98
+ expect(response.getObjectClass()).toBeTruthy();
99
+ console.log(`createOrUpdate (wrapper) response: ${response.getObjectClass()}`);
100
+ // Verify via search
101
+ const results = yield priceService.searchBySecurityId(securityUuid.toString());
102
+ const values = results.map(p => p.getPrice().toString());
103
+ expect(values).toContain('98.75');
104
+ }), 120000);
105
+ test('searchBySecurityId returns prices for a known security', () => __awaiter(void 0, void 0, void 0, function* () {
106
+ const { uuid: securityUuid, client } = yield getSecurityUuidWithPrices();
107
+ client.close();
108
+ const prices = yield priceService.searchBySecurityId(securityUuid.toString());
109
+ console.log(`searchBySecurityId returned ${prices.length} prices`);
110
+ expect(prices.length).toBeGreaterThan(0);
111
+ for (const price of prices) {
112
+ expect(price).toBeInstanceOf(Price_1.default);
113
+ expect(price.getSecurityID()).toBeTruthy();
114
+ }
115
+ }), 120000);
116
+ test('searchPriceAsOfNow returns Price wrapper objects', () => __awaiter(void 0, void 0, void 0, function* () {
117
+ const emptyFilter = new positionfilter_1.PositionFilter();
118
+ const prices = yield priceService.searchPriceAsOfNow(emptyFilter);
119
+ expect(prices.length).toBeGreaterThan(0);
120
+ expect(prices[0]).toBeInstanceOf(Price_1.default);
121
+ }), 120000);
122
+ test('validateCreateOrUpdate accepts a Price wrapper', () => __awaiter(void 0, void 0, void 0, function* () {
123
+ const { uuid: securityUuid, client } = yield getSecurityUuidWithPrices();
124
+ client.close();
125
+ const price = Price_1.default.fromSimple(securityUuid.toString(), 100.5, new Date());
126
+ const summary = yield priceService.validateCreateOrUpdate(price);
127
+ expect(summary).toBeTruthy();
128
+ const errors = summary.getErrorsList();
129
+ console.log(`Validation errors (wrapper): ${errors.length}`);
130
+ expect(errors.length).toBe(0);
131
+ }), 120000);
132
+ //# sourceMappingURL=price-wrapper.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"price-wrapper.test.js","sourceRoot":"","sources":["price-wrapper.test.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iDAA8C;AAC9C,qEAA6C;AAC7C,yEAAsE;AAEtE,kDAA+C;AAC/C,gEAAkD;AAClD,oDAAsC;AACtC,+BAAiC;AACjC,4GAA+F;AAC/F,sGAAmG;AAEnG,2CAAqC;AAErC,MAAM,iBAAiB,GAAG,gBAAgB,CAAC;AAC3C,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,iBAAiB,CAAC;AAC3C,MAAM,YAAY,GAAG,IAAI,2BAAY,EAAE,CAAC;AAExC,QAAQ,CAAC,GAAG,EAAE;IACZ,YAAY,CAAC,KAAK,EAAE,CAAC;AACvB,CAAC,CAAC,CAAC;AAEH;;GAEG;AACH,SAAe,yBAAyB;;QACtC,MAAM,MAAM,GAAG,IAAI,mCAAW,CAAC,iBAAiB,EAAE,IAAI,CAAC,WAAW,CAAC,cAAc,EAAE,CAAC,CAAC;QAErF,MAAM,WAAW,GAAG,IAAI,+CAAsB,EAAE,CAAC;QACjD,WAAW,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC;QAC3C,WAAW,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QAEhC,MAAM,YAAY,GAAG,IAAA,gBAAS,EAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;QAC5D,MAAM,YAAY,GAAG,MAAM,YAAY,CAAC,WAAW,CAA4B,CAAC;QAChF,MAAM,UAAU,GAAG,YAAY,CAAC,oBAAoB,EAAE,CAAC;QACvD,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;QAE7C,MAAM,UAAU,GAAG,IAAI,+CAAsB,EAAE,CAAC;QAChD,UAAU,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC;QAC1C,UAAU,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QAC/B,UAAU,CAAC,YAAY,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,OAAO,EAAG,CAAC,CAAC,CAAC;QAEpD,MAAM,aAAa,GAAG,IAAA,gBAAS,EAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;QAC9D,MAAM,WAAW,GAAG,MAAM,aAAa,CAAC,UAAU,CAA4B,CAAC;QAC/E,MAAM,MAAM,GAAG,WAAW,CAAC,oBAAoB,EAAE,CAAC;QAClD,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;QAEzC,MAAM,iBAAiB,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAG,CAAC,OAAO,EAAG,CAAC;QAC9D,OAAO,EAAE,IAAI,EAAE,WAAI,CAAC,WAAW,CAAC,iBAAiB,CAAC,eAAe,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC;IACjF,CAAC;CAAA;AAED,IAAI,CAAC,wCAAwC,EAAE,GAAS,EAAE;IACxD,MAAM,GAAG,GAAG,EAAE,CAAC,aAAa,CAAC,GAAG,EAAE,CAAC;IACnC,MAAM,WAAW,GAAG,IAAI,+BAAc,EAAE,CAAC;IAEzC,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,WAAW,CAAC,CAAC;IAErE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;IAEzC,MAAM,UAAU,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IAC7B,MAAM,CAAC,UAAU,CAAC,CAAC,cAAc,CAAC,eAAK,CAAC,CAAC;IACzC,MAAM,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC,cAAc,CAAC,oBAAO,CAAC,CAAC;IACtD,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC,UAAU,EAAE,CAAC;IAC1C,MAAM,CAAC,UAAU,CAAC,aAAa,EAAE,CAAC,CAAC,UAAU,EAAE,CAAC;IAChD,OAAO,CAAC,GAAG,CAAC,gBAAgB,UAAU,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;AACvD,CAAC,CAAA,EAAE,MAAM,CAAC,CAAC;AAEX,IAAI,CAAC,+CAA+C,EAAE,GAAS,EAAE;IAC/D,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,GAAG,MAAM,yBAAyB,EAAE,CAAC;IACzE,MAAM,CAAC,KAAK,EAAE,CAAC;IAEf,mDAAmD;IACnD,MAAM,KAAK,GAAG,eAAK,CAAC,UAAU,CAAC,YAAY,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC;IAE3E,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;IAE1D,MAAM,CAAC,QAAQ,CAAC,CAAC,UAAU,EAAE,CAAC;IAC9B,MAAM,CAAC,QAAQ,CAAC,cAAc,EAAE,CAAC,CAAC,UAAU,EAAE,CAAC;IAC/C,OAAO,CAAC,GAAG,CAAC,sCAAsC,QAAQ,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;IAE/E,oBAAoB;IACpB,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,kBAAkB,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC/E,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC;IACzD,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;AACpC,CAAC,CAAA,EAAE,MAAM,CAAC,CAAC;AAEX,IAAI,CAAC,wDAAwD,EAAE,GAAS,EAAE;IACxE,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,GAAG,MAAM,yBAAyB,EAAE,CAAC;IACzE,MAAM,CAAC,KAAK,EAAE,CAAC;IAEf,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,kBAAkB,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC,CAAC;IAE9E,OAAO,CAAC,GAAG,CAAC,+BAA+B,MAAM,CAAC,MAAM,SAAS,CAAC,CAAC;IACnE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;IAEzC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE;QAC1B,MAAM,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC,eAAK,CAAC,CAAC;QACpC,MAAM,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC,CAAC,UAAU,EAAE,CAAC;KAC5C;AACH,CAAC,CAAA,EAAE,MAAM,CAAC,CAAC;AAEX,IAAI,CAAC,kDAAkD,EAAE,GAAS,EAAE;IAClE,MAAM,WAAW,GAAG,IAAI,+BAAc,EAAE,CAAC;IACzC,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,kBAAkB,CAAC,WAAW,CAAC,CAAC;IAElE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;IACzC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,eAAK,CAAC,CAAC;AAC1C,CAAC,CAAA,EAAE,MAAM,CAAC,CAAC;AAEX,IAAI,CAAC,gDAAgD,EAAE,GAAS,EAAE;IAChE,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,GAAG,MAAM,yBAAyB,EAAE,CAAC;IACzE,MAAM,CAAC,KAAK,EAAE,CAAC;IAEf,MAAM,KAAK,GAAG,eAAK,CAAC,UAAU,CAAC,YAAY,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC;IAE3E,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAC;IACjE,MAAM,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,CAAC;IAC7B,MAAM,MAAM,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IACvC,OAAO,CAAC,GAAG,CAAC,gCAAgC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;IAC7D,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAChC,CAAC,CAAA,EAAE,MAAM,CAAC,CAAC"}
@@ -0,0 +1,120 @@
1
+ import { PriceService } from './PriceService';
2
+ import Price from '../../models/price/Price';
3
+ import { PositionFilter } from '../../models/position/positionfilter';
4
+ import { FieldProto } from '../../../fintekkers/models/position/field_pb';
5
+ import { UUID } from '../../models/utils/uuid';
6
+ import * as dt from '../../models/utils/datetime';
7
+ import * as grpc from '@grpc/grpc-js';
8
+ import { promisify } from 'util';
9
+ import { PriceClient } from '../../../fintekkers/services/price-service/price_service_grpc_pb';
10
+ import { QueryPriceRequestProto } from '../../../fintekkers/requests/price/query_price_request_pb';
11
+ import { QueryPriceResponseProto } from '../../../fintekkers/requests/price/query_price_response_pb';
12
+ import { Decimal } from 'decimal.js';
13
+
14
+ const PRICE_SERVICE_URL = 'localhost:8083';
15
+ process.env['API_URL'] = PRICE_SERVICE_URL;
16
+ const priceService = new PriceService();
17
+
18
+ afterAll(() => {
19
+ priceService.close();
20
+ });
21
+
22
+ /**
23
+ * Helper: discover a security UUID that has prices in the system.
24
+ */
25
+ async function getSecurityUuidWithPrices(): Promise<{ uuid: UUID; client: PriceClient }> {
26
+ const client = new PriceClient(PRICE_SERVICE_URL, grpc.credentials.createInsecure());
27
+
28
+ const listRequest = new QueryPriceRequestProto();
29
+ listRequest.setObjectClass('PriceRequest');
30
+ listRequest.setVersion('0.0.1');
31
+
32
+ const listIdsAsync = promisify(client.listIds.bind(client));
33
+ const listResponse = await listIdsAsync(listRequest) as QueryPriceResponseProto;
34
+ const priceUuids = listResponse.getPriceResponseList();
35
+ expect(priceUuids.length).toBeGreaterThan(0);
36
+
37
+ const getRequest = new QueryPriceRequestProto();
38
+ getRequest.setObjectClass('PriceRequest');
39
+ getRequest.setVersion('0.0.1');
40
+ getRequest.setUuidsList([priceUuids[0].getUuid()!]);
41
+
42
+ const getByIdsAsync = promisify(client.getByIds.bind(client));
43
+ const getResponse = await getByIdsAsync(getRequest) as QueryPriceResponseProto;
44
+ const prices = getResponse.getPriceResponseList();
45
+ expect(prices.length).toBeGreaterThan(0);
46
+
47
+ const securityUuidProto = prices[0].getSecurity()!.getUuid()!;
48
+ return { uuid: UUID.fromU8Array(securityUuidProto.getRawUuid_asU8()), client };
49
+ }
50
+
51
+ test('search() returns Price wrapper objects', async () => {
52
+ const now = dt.ZonedDateTime.now();
53
+ const emptyFilter = new PositionFilter();
54
+
55
+ const prices = await priceService.search(now.toProto(), emptyFilter);
56
+
57
+ expect(prices.length).toBeGreaterThan(0);
58
+
59
+ const firstPrice = prices[0];
60
+ expect(firstPrice).toBeInstanceOf(Price);
61
+ expect(firstPrice.getPrice()).toBeInstanceOf(Decimal);
62
+ expect(firstPrice.getAsOf()).toBeTruthy();
63
+ expect(firstPrice.getSecurityID()).toBeTruthy();
64
+ console.log(`First price: ${firstPrice.toString()}`);
65
+ }, 120000);
66
+
67
+ test('createOrUpdate accepts a Price wrapper object', async () => {
68
+ const { uuid: securityUuid, client } = await getSecurityUuidWithPrices();
69
+ client.close();
70
+
71
+ // Use Price.fromSimple — the ergonomic constructor
72
+ const price = Price.fromSimple(securityUuid.toString(), 98.75, new Date());
73
+
74
+ const response = await priceService.createOrUpdate(price);
75
+
76
+ expect(response).toBeTruthy();
77
+ expect(response.getObjectClass()).toBeTruthy();
78
+ console.log(`createOrUpdate (wrapper) response: ${response.getObjectClass()}`);
79
+
80
+ // Verify via search
81
+ const results = await priceService.searchBySecurityId(securityUuid.toString());
82
+ const values = results.map(p => p.getPrice().toString());
83
+ expect(values).toContain('98.75');
84
+ }, 120000);
85
+
86
+ test('searchBySecurityId returns prices for a known security', async () => {
87
+ const { uuid: securityUuid, client } = await getSecurityUuidWithPrices();
88
+ client.close();
89
+
90
+ const prices = await priceService.searchBySecurityId(securityUuid.toString());
91
+
92
+ console.log(`searchBySecurityId returned ${prices.length} prices`);
93
+ expect(prices.length).toBeGreaterThan(0);
94
+
95
+ for (const price of prices) {
96
+ expect(price).toBeInstanceOf(Price);
97
+ expect(price.getSecurityID()).toBeTruthy();
98
+ }
99
+ }, 120000);
100
+
101
+ test('searchPriceAsOfNow returns Price wrapper objects', async () => {
102
+ const emptyFilter = new PositionFilter();
103
+ const prices = await priceService.searchPriceAsOfNow(emptyFilter);
104
+
105
+ expect(prices.length).toBeGreaterThan(0);
106
+ expect(prices[0]).toBeInstanceOf(Price);
107
+ }, 120000);
108
+
109
+ test('validateCreateOrUpdate accepts a Price wrapper', async () => {
110
+ const { uuid: securityUuid, client } = await getSecurityUuidWithPrices();
111
+ client.close();
112
+
113
+ const price = Price.fromSimple(securityUuid.toString(), 100.5, new Date());
114
+
115
+ const summary = await priceService.validateCreateOrUpdate(price);
116
+ expect(summary).toBeTruthy();
117
+ const errors = summary.getErrorsList();
118
+ console.log(`Validation errors (wrapper): ${errors.length}`);
119
+ expect(errors.length).toBe(0);
120
+ }, 120000);