@fintekkers/ledger-models 0.4.43 → 0.4.45

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 (257) hide show
  1. package/node/fintekkers/models/portfolio/portfolio_pb.d.ts +7 -15
  2. package/node/fintekkers/models/portfolio/portfolio_pb.js +35 -132
  3. package/node/fintekkers/models/position/position_filter_pb.d.ts +7 -15
  4. package/node/fintekkers/models/position/position_filter_pb.js +35 -132
  5. package/node/fintekkers/models/position/position_pb.d.ts +7 -15
  6. package/node/fintekkers/models/position/position_pb.js +35 -132
  7. package/node/fintekkers/models/price/price_pb.d.ts +7 -15
  8. package/node/fintekkers/models/price/price_pb.js +35 -132
  9. package/node/fintekkers/models/security/bond/issuance_pb.d.ts +7 -15
  10. package/node/fintekkers/models/security/bond/issuance_pb.js +35 -132
  11. package/node/fintekkers/models/security/identifier/identifier_pb.d.ts +7 -15
  12. package/node/fintekkers/models/security/identifier/identifier_pb.js +35 -132
  13. package/node/fintekkers/models/security/index_composition_pb.d.ts +7 -15
  14. package/node/fintekkers/models/security/index_composition_pb.js +35 -132
  15. package/node/fintekkers/models/security/security_pb.d.ts +7 -15
  16. package/node/fintekkers/models/security/security_pb.js +35 -132
  17. package/node/fintekkers/models/security/security_pb.test.js +4 -8
  18. package/node/fintekkers/models/security/security_pb.test.js.map +1 -1
  19. package/node/fintekkers/models/security/security_pb.test.ts +4 -5
  20. package/node/fintekkers/models/security/tenor_pb.d.ts +7 -15
  21. package/node/fintekkers/models/security/tenor_pb.js +35 -132
  22. package/node/fintekkers/models/strategy/strategy_allocation_pb.d.ts +7 -15
  23. package/node/fintekkers/models/strategy/strategy_allocation_pb.js +35 -132
  24. package/node/fintekkers/models/strategy/strategy_pb.d.ts +7 -15
  25. package/node/fintekkers/models/strategy/strategy_pb.js +35 -132
  26. package/node/fintekkers/models/transaction/transaction_pb.d.ts +7 -15
  27. package/node/fintekkers/models/transaction/transaction_pb.js +35 -132
  28. package/node/fintekkers/models/util/api/api_key_pb.d.ts +7 -15
  29. package/node/fintekkers/models/util/api/api_key_pb.js +35 -132
  30. package/node/fintekkers/models/util/date_range_pb.d.ts +7 -15
  31. package/node/fintekkers/models/util/date_range_pb.js +35 -132
  32. package/node/fintekkers/models/util/decimal_value_pb.d.ts +0 -5
  33. package/node/fintekkers/models/util/decimal_value_pb.js +0 -30
  34. package/node/fintekkers/models/util/lock/node_partition_pb.d.ts +7 -15
  35. package/node/fintekkers/models/util/lock/node_partition_pb.js +35 -132
  36. package/node/fintekkers/models/util/lock/node_state_pb.d.ts +7 -15
  37. package/node/fintekkers/models/util/lock/node_state_pb.js +35 -132
  38. package/node/fintekkers/models/util/object_type_pb.d.ts +0 -3
  39. package/node/fintekkers/models/util/object_type_pb.js +0 -28
  40. package/node/fintekkers/models/util/version_grpc_pb.js +1 -0
  41. package/node/fintekkers/models/util/version_pb.d.ts +33 -0
  42. package/node/fintekkers/models/util/version_pb.js +236 -0
  43. package/node/fintekkers/requests/index_composition/create_index_composition_request_pb.d.ts +13 -30
  44. package/node/fintekkers/requests/index_composition/create_index_composition_request_pb.js +68 -264
  45. package/node/fintekkers/requests/index_composition/get_index_composition_request_pb.d.ts +13 -30
  46. package/node/fintekkers/requests/index_composition/get_index_composition_request_pb.js +68 -264
  47. package/node/fintekkers/requests/portfolio/create_portfolio_request_pb.d.ts +7 -15
  48. package/node/fintekkers/requests/portfolio/create_portfolio_request_pb.js +35 -132
  49. package/node/fintekkers/requests/portfolio/create_portfolio_response_pb.d.ts +7 -15
  50. package/node/fintekkers/requests/portfolio/create_portfolio_response_pb.js +35 -132
  51. package/node/fintekkers/requests/portfolio/query_portfolio_request_pb.d.ts +7 -15
  52. package/node/fintekkers/requests/portfolio/query_portfolio_request_pb.js +35 -132
  53. package/node/fintekkers/requests/portfolio/query_portfolio_response_pb.d.ts +7 -15
  54. package/node/fintekkers/requests/portfolio/query_portfolio_response_pb.js +35 -132
  55. package/node/fintekkers/requests/position/query_position_request_pb.d.ts +7 -15
  56. package/node/fintekkers/requests/position/query_position_request_pb.js +35 -132
  57. package/node/fintekkers/requests/position/query_position_response_pb.d.ts +7 -15
  58. package/node/fintekkers/requests/position/query_position_response_pb.js +35 -132
  59. package/node/fintekkers/requests/price/create_price_request_pb.d.ts +7 -15
  60. package/node/fintekkers/requests/price/create_price_request_pb.js +35 -132
  61. package/node/fintekkers/requests/price/create_price_response_pb.d.ts +7 -15
  62. package/node/fintekkers/requests/price/create_price_response_pb.js +35 -132
  63. package/node/fintekkers/requests/price/query_price_request_pb.d.ts +7 -15
  64. package/node/fintekkers/requests/price/query_price_request_pb.js +35 -132
  65. package/node/fintekkers/requests/price/query_price_response_pb.d.ts +7 -15
  66. package/node/fintekkers/requests/price/query_price_response_pb.js +35 -132
  67. package/node/fintekkers/requests/security/create_security_request_pb.d.ts +7 -15
  68. package/node/fintekkers/requests/security/create_security_request_pb.js +35 -132
  69. package/node/fintekkers/requests/security/create_security_response_pb.d.ts +7 -15
  70. package/node/fintekkers/requests/security/create_security_response_pb.js +35 -132
  71. package/node/fintekkers/requests/security/get_field_values_request_pb.d.ts +7 -15
  72. package/node/fintekkers/requests/security/get_field_values_request_pb.js +35 -132
  73. package/node/fintekkers/requests/security/get_field_values_response_pb.d.ts +7 -15
  74. package/node/fintekkers/requests/security/get_field_values_response_pb.js +35 -132
  75. package/node/fintekkers/requests/security/get_fields_response_pb.d.ts +7 -15
  76. package/node/fintekkers/requests/security/get_fields_response_pb.js +35 -132
  77. package/node/fintekkers/requests/security/query_security_request_pb.d.ts +7 -15
  78. package/node/fintekkers/requests/security/query_security_request_pb.js +35 -132
  79. package/node/fintekkers/requests/security/query_security_response_pb.d.ts +7 -15
  80. package/node/fintekkers/requests/security/query_security_response_pb.js +35 -132
  81. package/node/fintekkers/requests/transaction/create_transaction_request_pb.d.ts +7 -15
  82. package/node/fintekkers/requests/transaction/create_transaction_request_pb.js +35 -132
  83. package/node/fintekkers/requests/transaction/create_transaction_response_pb.d.ts +7 -15
  84. package/node/fintekkers/requests/transaction/create_transaction_response_pb.js +35 -132
  85. package/node/fintekkers/requests/transaction/query_transaction_request_pb.d.ts +7 -15
  86. package/node/fintekkers/requests/transaction/query_transaction_request_pb.js +35 -132
  87. package/node/fintekkers/requests/transaction/query_transaction_response_pb.d.ts +7 -15
  88. package/node/fintekkers/requests/transaction/query_transaction_response_pb.js +35 -132
  89. package/node/fintekkers/requests/util/delete_request_pb.d.ts +13 -30
  90. package/node/fintekkers/requests/util/delete_request_pb.js +68 -264
  91. package/node/fintekkers/requests/util/lock/lock_request_pb.d.ts +7 -15
  92. package/node/fintekkers/requests/util/lock/lock_request_pb.js +35 -132
  93. package/node/fintekkers/requests/util/lock/lock_response_pb.d.ts +7 -15
  94. package/node/fintekkers/requests/util/lock/lock_response_pb.js +35 -132
  95. package/node/fintekkers/requests/valuation/curve_request_pb.d.ts +7 -15
  96. package/node/fintekkers/requests/valuation/curve_request_pb.js +35 -132
  97. package/node/fintekkers/requests/valuation/curve_response_pb.d.ts +7 -15
  98. package/node/fintekkers/requests/valuation/curve_response_pb.js +35 -132
  99. package/node/fintekkers/requests/valuation/product_inputs.test.js +10 -17
  100. package/node/fintekkers/requests/valuation/product_inputs.test.js.map +1 -1
  101. package/node/fintekkers/requests/valuation/product_inputs.test.ts +10 -16
  102. package/node/fintekkers/requests/valuation/valuation_request_pb.d.ts +7 -15
  103. package/node/fintekkers/requests/valuation/valuation_request_pb.js +35 -132
  104. package/node/fintekkers/requests/valuation/valuation_response_pb.d.ts +7 -15
  105. package/node/fintekkers/requests/valuation/valuation_response_pb.js +35 -132
  106. package/node/wrappers/models/portfolio/portfolio.test.js +0 -2
  107. package/node/wrappers/models/portfolio/portfolio.test.js.map +1 -1
  108. package/node/wrappers/models/portfolio/portfolio.test.ts +0 -2
  109. package/node/wrappers/models/portfolio-price-transaction.lazy-hydrate.test.js +2 -3
  110. package/node/wrappers/models/portfolio-price-transaction.lazy-hydrate.test.js.map +1 -1
  111. package/node/wrappers/models/portfolio-price-transaction.lazy-hydrate.test.ts +2 -2
  112. package/node/wrappers/models/position/position.test.js +5 -6
  113. package/node/wrappers/models/position/position.test.js.map +1 -1
  114. package/node/wrappers/models/position/position.test.ts +5 -4
  115. package/node/wrappers/models/position/positionfilter.js +1 -1
  116. package/node/wrappers/models/position/positionfilter.js.map +1 -1
  117. package/node/wrappers/models/position/positionfilter.test.js +4 -2
  118. package/node/wrappers/models/position/positionfilter.test.js.map +1 -1
  119. package/node/wrappers/models/position/positionfilter.test.ts +3 -2
  120. package/node/wrappers/models/position/positionfilter.ts +1 -1
  121. package/node/wrappers/models/price/Price.cash.test.js +4 -5
  122. package/node/wrappers/models/price/Price.cash.test.js.map +1 -1
  123. package/node/wrappers/models/price/Price.cash.test.ts +2 -3
  124. package/node/wrappers/models/price/Price.js +2 -2
  125. package/node/wrappers/models/price/Price.js.map +1 -1
  126. package/node/wrappers/models/price/Price.test.js +4 -2
  127. package/node/wrappers/models/price/Price.test.js.map +1 -1
  128. package/node/wrappers/models/price/Price.test.ts +4 -2
  129. package/node/wrappers/models/price/Price.ts +2 -2
  130. package/node/wrappers/models/price/price_rules.test.js +9 -4
  131. package/node/wrappers/models/price/price_rules.test.js.map +1 -1
  132. package/node/wrappers/models/price/price_rules.test.ts +9 -4
  133. package/node/wrappers/models/security/BondSecurity.priceScale.test.js +2 -4
  134. package/node/wrappers/models/security/BondSecurity.priceScale.test.js.map +1 -1
  135. package/node/wrappers/models/security/BondSecurity.priceScale.test.ts +2 -3
  136. package/node/wrappers/models/security/BondSecurity.test.js +7 -13
  137. package/node/wrappers/models/security/BondSecurity.test.js.map +1 -1
  138. package/node/wrappers/models/security/BondSecurity.test.ts +7 -12
  139. package/node/wrappers/models/security/IndexSecurity.test.js +0 -8
  140. package/node/wrappers/models/security/IndexSecurity.test.js.map +1 -1
  141. package/node/wrappers/models/security/IndexSecurity.test.ts +0 -8
  142. package/node/wrappers/models/security/Issuance.test.js +6 -6
  143. package/node/wrappers/models/security/Issuance.test.js.map +1 -1
  144. package/node/wrappers/models/security/Issuance.test.ts +6 -5
  145. package/node/wrappers/models/security/MortgageBackedSecurity.fromPricerInputs.test.js +13 -14
  146. package/node/wrappers/models/security/MortgageBackedSecurity.fromPricerInputs.test.js.map +1 -1
  147. package/node/wrappers/models/security/MortgageBackedSecurity.fromPricerInputs.test.ts +13 -12
  148. package/node/wrappers/models/security/security-roundtrip.test.js +9 -21
  149. package/node/wrappers/models/security/security-roundtrip.test.js.map +1 -1
  150. package/node/wrappers/models/security/security-roundtrip.test.ts +9 -20
  151. package/node/wrappers/models/security/security.identifiers.test.js +0 -2
  152. package/node/wrappers/models/security/security.identifiers.test.js.map +1 -1
  153. package/node/wrappers/models/security/security.identifiers.test.ts +0 -2
  154. package/node/wrappers/models/security/security.tbillCoupon.test.js +3 -2
  155. package/node/wrappers/models/security/security.tbillCoupon.test.js.map +1 -1
  156. package/node/wrappers/models/security/security.tbillCoupon.test.ts +3 -2
  157. package/node/wrappers/models/security/security.test.js +14 -14
  158. package/node/wrappers/models/security/security.test.js.map +1 -1
  159. package/node/wrappers/models/security/security.test.ts +14 -13
  160. package/node/wrappers/models/transaction/transaction.derived.test.js +3 -9
  161. package/node/wrappers/models/transaction/transaction.derived.test.js.map +1 -1
  162. package/node/wrappers/models/transaction/transaction.derived.test.ts +3 -8
  163. package/node/wrappers/models/transaction/transaction.js +2 -2
  164. package/node/wrappers/models/transaction/transaction.js.map +1 -1
  165. package/node/wrappers/models/transaction/transaction.test.js +3 -3
  166. package/node/wrappers/models/transaction/transaction.test.js.map +1 -1
  167. package/node/wrappers/models/transaction/transaction.test.ts +3 -2
  168. package/node/wrappers/models/transaction/transaction.ts +2 -2
  169. package/node/wrappers/models/transaction/transaction_constructor.test.js +6 -9
  170. package/node/wrappers/models/transaction/transaction_constructor.test.js.map +1 -1
  171. package/node/wrappers/models/transaction/transaction_constructor.test.ts +6 -7
  172. package/node/wrappers/models/transaction/transaction_price_defaults.test.js +2 -10
  173. package/node/wrappers/models/transaction/transaction_price_defaults.test.js.map +1 -1
  174. package/node/wrappers/models/transaction/transaction_price_defaults.test.ts +2 -9
  175. package/node/wrappers/models/transaction/transaction_security_defaults.test.js +0 -6
  176. package/node/wrappers/models/transaction/transaction_security_defaults.test.js.map +1 -1
  177. package/node/wrappers/models/transaction/transaction_security_defaults.test.ts +0 -6
  178. package/node/wrappers/models/utils/date.test.js +0 -2
  179. package/node/wrappers/models/utils/date.test.js.map +1 -1
  180. package/node/wrappers/models/utils/date.test.ts +0 -2
  181. package/node/wrappers/models/utils/datetime.test.js +0 -2
  182. package/node/wrappers/models/utils/datetime.test.js.map +1 -1
  183. package/node/wrappers/models/utils/datetime.test.ts +0 -2
  184. package/node/wrappers/models/utils/decimal.d.ts +9 -28
  185. package/node/wrappers/models/utils/decimal.js +13 -52
  186. package/node/wrappers/models/utils/decimal.js.map +1 -1
  187. package/node/wrappers/models/utils/decimal.test.js +12 -68
  188. package/node/wrappers/models/utils/decimal.test.js.map +1 -1
  189. package/node/wrappers/models/utils/decimal.test.ts +14 -76
  190. package/node/wrappers/models/utils/decimal.ts +12 -60
  191. package/node/wrappers/models/utils/serialization.test.js +0 -4
  192. package/node/wrappers/models/utils/serialization.test.js.map +1 -1
  193. package/node/wrappers/models/utils/serialization.test.ts +0 -4
  194. package/node/wrappers/requests/position/QueryPositionRequest.js +1 -1
  195. package/node/wrappers/requests/position/QueryPositionRequest.js.map +1 -1
  196. package/node/wrappers/requests/position/QueryPositionRequest.ts +1 -1
  197. package/node/wrappers/requests/query-paging.test.js +4 -28
  198. package/node/wrappers/requests/query-paging.test.js.map +1 -1
  199. package/node/wrappers/requests/query-paging.test.ts +3 -36
  200. package/node/wrappers/services/portfolio-service/PortfolioService.js +3 -3
  201. package/node/wrappers/services/portfolio-service/PortfolioService.js.map +1 -1
  202. package/node/wrappers/services/portfolio-service/PortfolioService.ts +3 -3
  203. package/node/wrappers/services/portfolio-service/portfolioService.test.js +0 -2
  204. package/node/wrappers/services/portfolio-service/portfolioService.test.js.map +1 -1
  205. package/node/wrappers/services/portfolio-service/portfolioService.test.ts +0 -2
  206. package/node/wrappers/services/price-service/PriceService.js +3 -3
  207. package/node/wrappers/services/price-service/PriceService.js.map +1 -1
  208. package/node/wrappers/services/price-service/PriceService.ts +3 -3
  209. package/node/wrappers/services/price-service/price-wrapper.test.js +2 -6
  210. package/node/wrappers/services/price-service/price-wrapper.test.js.map +1 -1
  211. package/node/wrappers/services/price-service/price-wrapper.test.ts +2 -6
  212. package/node/wrappers/services/price-service/price.test.js +8 -17
  213. package/node/wrappers/services/price-service/price.test.js.map +1 -1
  214. package/node/wrappers/services/price-service/price.test.ts +8 -14
  215. package/node/wrappers/services/searchWithSecurities.test.js +2 -7
  216. package/node/wrappers/services/searchWithSecurities.test.js.map +1 -1
  217. package/node/wrappers/services/searchWithSecurities.test.ts +2 -6
  218. package/node/wrappers/services/security-service/SecurityService.js +3 -3
  219. package/node/wrappers/services/security-service/SecurityService.js.map +1 -1
  220. package/node/wrappers/services/security-service/SecurityService.ts +3 -3
  221. package/node/wrappers/services/security-service/security.test.js +3 -7
  222. package/node/wrappers/services/security-service/security.test.js.map +1 -1
  223. package/node/wrappers/services/security-service/security.test.ts +3 -6
  224. package/node/wrappers/services/transaction-service/TransactionService.js +3 -3
  225. package/node/wrappers/services/transaction-service/TransactionService.js.map +1 -1
  226. package/node/wrappers/services/transaction-service/TransactionService.ts +3 -3
  227. package/node/wrappers/services/transaction-service/transaction.test.js +3 -8
  228. package/node/wrappers/services/transaction-service/transaction.test.js.map +1 -1
  229. package/node/wrappers/services/transaction-service/transaction.test.ts +3 -6
  230. package/node/wrappers/util/link-resolver.js +3 -3
  231. package/node/wrappers/util/link-resolver.js.map +1 -1
  232. package/node/wrappers/util/link-resolver.test.js +4 -13
  233. package/node/wrappers/util/link-resolver.test.js.map +1 -1
  234. package/node/wrappers/util/link-resolver.test.ts +4 -12
  235. package/node/wrappers/util/link-resolver.ts +3 -3
  236. package/node/wrappers/util/object-type-coverage.test.js +159 -0
  237. package/node/wrappers/util/object-type-coverage.test.js.map +1 -0
  238. package/node/wrappers/util/object-type-coverage.test.ts +149 -0
  239. package/node/wrappers/util/object-types.d.ts +30 -46
  240. package/node/wrappers/util/object-types.js +145 -170
  241. package/node/wrappers/util/object-types.js.map +1 -1
  242. package/node/wrappers/util/object-types.test.js +50 -151
  243. package/node/wrappers/util/object-types.test.js.map +1 -1
  244. package/node/wrappers/util/object-types.test.ts +55 -170
  245. package/node/wrappers/util/object-types.ts +153 -178
  246. package/package.json +1 -1
  247. package/node/wrappers/models/position/position.test copy.js +0 -107
  248. package/node/wrappers/models/position/position.test copy.js.map +0 -1
  249. package/node/wrappers/models/utils/decimal.legacy.test.js +0 -174
  250. package/node/wrappers/models/utils/decimal.legacy.test.js.map +0 -1
  251. package/node/wrappers/models/utils/decimal.legacy.test.ts +0 -158
  252. package/node/wrappers/models/utils/decimal.typings.test.d.ts +0 -1
  253. package/node/wrappers/models/utils/decimal.typings.test.js +0 -39
  254. package/node/wrappers/models/utils/decimal.typings.test.js.map +0 -1
  255. package/node/wrappers/models/utils/decimal.typings.test.ts +0 -16
  256. package/node/wrappers/util/object-type-legacy.json +0 -21
  257. /package/node/wrappers/{models/utils/decimal.legacy.test.d.ts → util/object-type-coverage.test.d.ts} +0 -0
@@ -35,9 +35,8 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
35
35
  return (mod && mod.__esModule) ? mod : { "default": mod };
36
36
  };
37
37
  Object.defineProperty(exports, "__esModule", { value: true });
38
- // Compact object type and version (LM-297): writers set both forms, readers
39
- // translate the strings-only form. Rows come from the shared fixture
40
- // test-fixtures/object-type-legacy.json, which Java, Python and Rust also load.
38
+ // Object type and version (LM-297, LM-318): `stamp` writes object_type = 1
39
+ // and version = 2 (0.0.1), and bytes from earlier releases are not readable.
41
40
  const fs = __importStar(require("fs"));
42
41
  const path = __importStar(require("path"));
43
42
  const decimal_js_1 = require("decimal.js");
@@ -67,125 +66,36 @@ const PriceService_1 = require("../services/price-service/PriceService");
67
66
  const SecurityService_1 = require("../services/security-service/SecurityService");
68
67
  const TransactionService_1 = require("../services/transaction-service/TransactionService");
69
68
  const PortfolioService_1 = require("../services/portfolio-service/PortfolioService");
70
- const REPO_ROOT = path.resolve(__dirname, '../../../..');
71
- const CASES = JSON.parse(fs.readFileSync(path.join(REPO_ROOT, 'test-fixtures', 'object-type-legacy.json'), 'utf8')).cases;
72
- const COMPACT_NUMBERS = {
73
- object_type: 1001, version_major: 1002, version_minor: 1003, version_patch: 1004,
74
- };
75
- /** Generated message classes by proto full name: the package is the directory under node/. */
76
- function messageClasses() {
77
- const root = path.resolve(__dirname, '../../fintekkers');
78
- const classes = new Map();
79
- const walk = (dir) => {
80
- for (const entry of fs.readdirSync(dir, { withFileTypes: true })) {
81
- const full = path.join(dir, entry.name);
82
- if (entry.isDirectory()) {
83
- walk(full);
84
- }
85
- else if (entry.name.endsWith('_pb.js')) {
86
- const pkg = path.relative(path.dirname(root), dir).split(path.sep).join('.');
87
- // eslint-disable-next-line @typescript-eslint/no-var-requires
88
- for (const [name, cls] of Object.entries(require(full))) {
89
- classes.set(`${pkg}.${name}`, cls);
90
- }
91
- }
92
- }
93
- };
94
- walk(root);
95
- return classes;
96
- }
97
- const CLASSES = messageClasses();
98
- function decode(c) {
99
- const cls = CLASSES.get(c.message);
100
- if (!cls)
101
- throw new Error(`no generated class for ${c.message}`);
102
- return cls.deserializeBinary(Buffer.from(c.bytes, 'base64'));
103
- }
104
- /** Field numbers present at the top level of an encoded message. */
105
- function topLevelFieldNumbers(data) {
106
- const numbers = [];
107
- let i = 0;
108
- const varint = () => {
109
- let result = 0;
110
- let scale = 1;
111
- for (;;) {
112
- const b = data[i++];
113
- result += (b & 0x7f) * scale;
114
- scale *= 128;
115
- if (!(b & 0x80))
116
- return result;
117
- }
118
- };
119
- while (i < data.length) {
120
- const key = varint();
121
- numbers.push(Math.floor(key / 8));
122
- const wireType = key % 8;
123
- if (wireType === 0)
124
- varint();
125
- else if (wireType === 1)
126
- i += 8;
127
- else if (wireType === 2) {
128
- const length = varint();
129
- i += length;
130
- }
131
- else if (wireType === 5)
132
- i += 4;
133
- else
134
- throw new Error(`unexpected wire type ${wireType}`);
135
- }
136
- return numbers;
137
- }
138
- let warn;
139
- beforeEach(() => {
140
- objectTypes.resetWarningsForTests();
141
- warn = jest.spyOn(console, 'warn').mockImplementation(() => undefined);
69
+ // A PriceProto written by ledger-models v0.4.33: object_class / version
70
+ // strings in fields 1 and 2.
71
+ const OLD_PRICE = path.resolve(__dirname, '../../../../ledger-models-protos/fixtures/legacy_v0433/price.bin');
72
+ // ---- stamp round-trips (metric 2) ----
73
+ test('a stamped price round-trips type and version', () => {
74
+ const price = objectTypes.stamp(new price_pb_1.PriceProto(), object_type_pb_1.ObjectTypeProto.OBJECT_TYPE_PRICE);
75
+ const bytes = price.serializeBinary();
76
+ // Exactly field 1 (varint 11) and field 2 ({patch: 1}): nothing at the
77
+ // removed 1001-1004.
78
+ expect(Array.from(bytes)).toEqual([0x08, 11, 0x12, 0x02, 0x18, 0x01]);
79
+ const reread = price_pb_1.PriceProto.deserializeBinary(bytes);
80
+ expect(objectTypes.readType(reread)).toBe(object_type_pb_1.ObjectTypeProto.OBJECT_TYPE_PRICE);
81
+ expect(objectTypes.readVersion(reread)).toEqual([0, 0, 1]);
82
+ const version = reread.getVersion();
83
+ expect([version.getMajor(), version.getMinor(), version.getPatch()]).toEqual([0, 0, 1]);
84
+ // Nothing unknown kept on re-serialising.
85
+ expect(Array.from(reread.serializeBinary())).toEqual(Array.from(bytes));
142
86
  });
143
- afterEach(() => {
144
- warn.mockRestore();
145
- objectTypes.resetWarningsForTests();
87
+ test('an unstamped message reads as unknown and absent', () => {
88
+ const price = price_pb_1.PriceProto.deserializeBinary(new price_pb_1.PriceProto().serializeBinary());
89
+ expect(objectTypes.readType(price)).toBe(object_type_pb_1.ObjectTypeProto.OBJECT_TYPE_UNKNOWN);
90
+ expect(objectTypes.readVersion(price)).toBeUndefined();
146
91
  });
147
- const fallbackWarnings = () => warn.mock.calls.filter((args) => String(args[0]).includes('(LM-297)')).length;
148
- // ---- Loading the old form translates it (metric 3) ----
149
- describe.each(CASES.map((c) => [c.name, c]))('fixture row %s', (_name, c) => {
150
- test('decodes to the expected type and version', () => {
151
- const message = decode(c);
152
- expect(objectTypes.readType(message)).toBe(object_type_pb_1.ObjectTypeProto[c.expect.object_type]);
153
- expect(objectTypes.readVersion(message)).toEqual(c.expect.version);
154
- expect(fallbackWarnings()).toBe(c.expect.warns ? 1 : 0);
155
- });
156
- test('re-serialises with the compact fields once upgraded', () => {
157
- const data = objectTypes.upgrade(decode(c)).serializeBinary();
158
- const expected = {
159
- object_type: object_type_pb_1.ObjectTypeProto[c.expect.object_type],
160
- version_major: c.expect.version[0],
161
- version_minor: c.expect.version[1],
162
- version_patch: c.expect.version[2],
163
- };
164
- const present = topLevelFieldNumbers(data);
165
- for (const [name, number] of Object.entries(COMPACT_NUMBERS)) {
166
- expect([name, present.includes(number)]).toEqual([name, expected[name] !== 0]);
167
- }
168
- const reread = CLASSES.get(c.message).deserializeBinary(data);
169
- expect([reread.getObjectType(), reread.getVersionMajor(), reread.getVersionMinor(), reread.getVersionPatch()])
170
- .toEqual([expected.object_type, expected.version_major, expected.version_minor, expected.version_patch]);
171
- expect([reread.getObjectClass(), reread.getVersion()]).toEqual([c.object_class, c.version]);
172
- });
173
- });
174
- // ---- Reading the strings is deprecated (metric 4) ----
175
- test('three strings-only decodes of one type warn once', () => {
176
- const c = CASES.find((row) => row.name === 'js-PositionFilterProto');
177
- for (let i = 0; i < 3; i++) {
178
- objectTypes.upgrade(decode(c));
179
- }
180
- expect(fallbackWarnings()).toBe(1);
92
+ // ---- Old bytes are not readable (metric 3) ----
93
+ test('bytes from v0.4.33 are not readable', () => {
94
+ // Field 2 held the string "0.0.1", which does not parse as a VersionProto.
95
+ const old = new Uint8Array(fs.readFileSync(OLD_PRICE));
96
+ expect(() => price_pb_1.PriceProto.deserializeBinary(old)).toThrow();
181
97
  });
182
- test('the new form does not warn', () => {
183
- const message = objectTypes.stamp(new price_pb_1.PriceProto(), object_type_pb_1.ObjectTypeProto.OBJECT_TYPE_PRICE, 'Price', '0.0.1');
184
- objectTypes.readType(message);
185
- objectTypes.readVersion(message);
186
- expect(fallbackWarnings()).toBe(0);
187
- });
188
- // ---- Writers set both forms (metric 2) ----
98
+ // ---- Every library writer stamps the new form (metric 2) ----
189
99
  /** A service with its gRPC client swapped for one that records each request. */
190
100
  function capturingService(cls, response) {
191
101
  const requests = [];
@@ -243,41 +153,41 @@ function lastRequest(cls, call) {
243
153
  }
244
154
  const LIBRARY_WRITERS = [
245
155
  ['Price.fromSimple', () => __awaiter(void 0, void 0, void 0, function* () { return Price_1.default.fromSimple(uuid_1.UUID.random().toString(), 1, new Date()).proto; }),
246
- object_type_pb_1.ObjectTypeProto.OBJECT_TYPE_PRICE, 'Price', '0.0.1'],
156
+ object_type_pb_1.ObjectTypeProto.OBJECT_TYPE_PRICE],
247
157
  ['Price.create', () => __awaiter(void 0, void 0, void 0, function* () { return Price_1.default.create(new decimal_js_1.Decimal(1), security(), datetime_1.ZonedDateTime.now()).proto; }),
248
- object_type_pb_1.ObjectTypeProto.OBJECT_TYPE_PRICE, 'Price', '0.0.1'],
158
+ object_type_pb_1.ObjectTypeProto.OBJECT_TYPE_PRICE],
249
159
  ['PositionFilter.toProto', () => __awaiter(void 0, void 0, void 0, function* () { return filter().toProto(); }),
250
- object_type_pb_1.ObjectTypeProto.OBJECT_TYPE_POSITION_FILTER, 'PositionFilter', '0.0.1'],
160
+ object_type_pb_1.ObjectTypeProto.OBJECT_TYPE_POSITION_FILTER],
251
161
  ['QueryPositionRequest.toProto', () => __awaiter(void 0, void 0, void 0, function* () {
252
162
  return new QueryPositionRequest_1.QueryPositionRequest(filter(), position_pb_1.PositionTypeProto.TRANSACTION, position_pb_1.PositionViewProto.DEFAULT_VIEW, [], [], datetime_1.ZonedDateTime.now()).toProto();
253
163
  }),
254
- object_type_pb_1.ObjectTypeProto.OBJECT_TYPE_QUERY_POSITION_REQUEST, '', '1.0.0'],
164
+ object_type_pb_1.ObjectTypeProto.OBJECT_TYPE_QUERY_POSITION_REQUEST],
255
165
  ['Transaction', () => __awaiter(void 0, void 0, void 0, function* () { return transaction().proto; }),
256
- object_type_pb_1.ObjectTypeProto.OBJECT_TYPE_TRANSACTION, 'Transaction', '0.0.1'],
166
+ object_type_pb_1.ObjectTypeProto.OBJECT_TYPE_TRANSACTION],
257
167
  ['Transaction strategy allocation', () => __awaiter(void 0, void 0, void 0, function* () { return transaction().proto.getStrategyAllocation(); }),
258
- object_type_pb_1.ObjectTypeProto.OBJECT_TYPE_STRATEGY_ALLOCATION, 'StrategyAllocation', '0.0.1'],
168
+ object_type_pb_1.ObjectTypeProto.OBJECT_TYPE_STRATEGY_ALLOCATION],
259
169
  ['PriceService.validateCreateOrUpdate', () => lastRequest(PriceService_1.PriceService, (s) => s.validateCreateOrUpdate(new price_pb_1.PriceProto())),
260
- object_type_pb_1.ObjectTypeProto.OBJECT_TYPE_CREATE_PRICE_REQUEST, 'PriceRequest', '0.0.1'],
170
+ object_type_pb_1.ObjectTypeProto.OBJECT_TYPE_CREATE_PRICE_REQUEST],
261
171
  ['PriceService.search', () => lastRequest(PriceService_1.PriceService, (s) => s.search(asOf, filter())),
262
- object_type_pb_1.ObjectTypeProto.OBJECT_TYPE_QUERY_PRICE_REQUEST, 'PriceRequest', '0.0.1'],
172
+ object_type_pb_1.ObjectTypeProto.OBJECT_TYPE_QUERY_PRICE_REQUEST],
263
173
  ['SecurityService.validateCreateSecurity', () => lastRequest(SecurityService_1.SecurityService, (s) => s.validateCreateSecurity(new security_pb_1.SecurityProto())),
264
- object_type_pb_1.ObjectTypeProto.OBJECT_TYPE_CREATE_SECURITY_REQUEST, 'SecurityRequest', '0.0.1'],
174
+ object_type_pb_1.ObjectTypeProto.OBJECT_TYPE_CREATE_SECURITY_REQUEST],
265
175
  ['SecurityService.searchSecurity', () => lastRequest(SecurityService_1.SecurityService, (s) => s.searchSecurity(asOf, filter())),
266
- object_type_pb_1.ObjectTypeProto.OBJECT_TYPE_QUERY_SECURITY_REQUEST, 'SecurityRequest', '0.0.1'],
176
+ object_type_pb_1.ObjectTypeProto.OBJECT_TYPE_QUERY_SECURITY_REQUEST],
267
177
  ['TransactionService.validateCreateTransaction', () => lastRequest(TransactionService_1.TransactionService, (s) => s.validateCreateTransaction({ proto: new transaction_pb_1.TransactionProto() })),
268
- object_type_pb_1.ObjectTypeProto.OBJECT_TYPE_CREATE_TRANSACTION_REQUEST, 'TransactionRequest', '0.0.1'],
178
+ object_type_pb_1.ObjectTypeProto.OBJECT_TYPE_CREATE_TRANSACTION_REQUEST],
269
179
  ['TransactionService.searchTransaction', () => lastRequest(TransactionService_1.TransactionService, (s) => s.searchTransaction(asOf, filter())),
270
- object_type_pb_1.ObjectTypeProto.OBJECT_TYPE_QUERY_TRANSACTION_REQUEST, 'SecurityRequest', '0.0.1'],
180
+ object_type_pb_1.ObjectTypeProto.OBJECT_TYPE_QUERY_TRANSACTION_REQUEST],
271
181
  ['PortfolioService.validateCreatePortfolio', () => lastRequest(PortfolioService_1.PortfolioService, (s) => s.validateCreatePortfolio(new portfolio_pb_1.PortfolioProto())),
272
- object_type_pb_1.ObjectTypeProto.OBJECT_TYPE_CREATE_PORTFOLIO_REQUEST, 'PortfolioRequest', '0.0.1'],
182
+ object_type_pb_1.ObjectTypeProto.OBJECT_TYPE_CREATE_PORTFOLIO_REQUEST],
273
183
  ['PortfolioService.searchPortfolio', () => lastRequest(PortfolioService_1.PortfolioService, (s) => s.searchPortfolio(asOf, filter())),
274
- object_type_pb_1.ObjectTypeProto.OBJECT_TYPE_QUERY_PORTFOLIO_REQUEST, 'PortfolioRequest', '0.0.1'],
184
+ object_type_pb_1.ObjectTypeProto.OBJECT_TYPE_QUERY_PORTFOLIO_REQUEST],
275
185
  ['LinkResolver securities', () => __awaiter(void 0, void 0, void 0, function* () { return (yield linkResolverRequests())[0]; }),
276
- object_type_pb_1.ObjectTypeProto.OBJECT_TYPE_QUERY_SECURITY_REQUEST, 'SecurityRequest', '0.0.1'],
186
+ object_type_pb_1.ObjectTypeProto.OBJECT_TYPE_QUERY_SECURITY_REQUEST],
277
187
  ['LinkResolver portfolios', () => __awaiter(void 0, void 0, void 0, function* () { return (yield linkResolverRequests())[1]; }),
278
- object_type_pb_1.ObjectTypeProto.OBJECT_TYPE_QUERY_PORTFOLIO_REQUEST, 'PortfolioRequest', '0.0.1'],
188
+ object_type_pb_1.ObjectTypeProto.OBJECT_TYPE_QUERY_PORTFOLIO_REQUEST],
279
189
  ['LinkResolver transactions', () => __awaiter(void 0, void 0, void 0, function* () { return (yield linkResolverRequests())[2]; }),
280
- object_type_pb_1.ObjectTypeProto.OBJECT_TYPE_QUERY_TRANSACTION_REQUEST, 'TransactionRequest', '0.0.1'],
190
+ object_type_pb_1.ObjectTypeProto.OBJECT_TYPE_QUERY_TRANSACTION_REQUEST],
281
191
  ];
282
192
  function transaction() {
283
193
  return new transaction_1.default({
@@ -291,21 +201,10 @@ function transaction() {
291
201
  quantity: new decimal_js_1.Decimal('10'),
292
202
  });
293
203
  }
294
- test.each(LIBRARY_WRITERS)('%s sets strings and compact fields that agree', (_name, build, type, objectClass, version) => __awaiter(void 0, void 0, void 0, function* () {
204
+ test.each(LIBRARY_WRITERS)('%s stamps the type and schema version', (_name, build, type) => __awaiter(void 0, void 0, void 0, function* () {
295
205
  const message = yield build();
296
- expect([message.getObjectClass(), message.getVersion()]).toEqual([objectClass, version]);
297
- // The message's own type. Some JS writers put a query request's string on the
298
- // create request too; the string still sits on one enum value.
299
- expect(message.getObjectType()).toBe(type);
300
- if (objectClass) {
301
- expect(objectTypes.fromLegacy(objectClass)).not.toBe(object_type_pb_1.ObjectTypeProto.OBJECT_TYPE_UNKNOWN);
302
- }
303
- expect([message.getVersionMajor(), message.getVersionMinor(), message.getVersionPatch()])
304
- .toEqual(objectTypes.parseVersion(version));
305
- expect(objectTypes.readVersion(message)).toEqual(objectTypes.parseVersion(version));
306
- expect(fallbackWarnings()).toBe(0);
206
+ expect(objectTypes.readType(message)).toBe(type);
207
+ expect(objectTypes.readVersion(message)).toEqual(objectTypes.SCHEMA_VERSION);
208
+ expect(objectTypes.SCHEMA_VERSION).toEqual([0, 0, 1]);
307
209
  }));
308
- test('stamp rejects a malformed version', () => {
309
- expect(() => objectTypes.stamp(new price_pb_1.PriceProto(), object_type_pb_1.ObjectTypeProto.OBJECT_TYPE_PRICE, 'Price', '1.2')).toThrow();
310
- });
311
210
  //# sourceMappingURL=object-types.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"object-types.test.js","sourceRoot":"","sources":["object-types.test.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,4EAA4E;AAC5E,qEAAqE;AACrE,gFAAgF;AAChF,uCAAyB;AACzB,2CAA6B;AAC7B,2CAAqC;AAErC,gFAA8E;AAC9E,8EAA6E;AAC7E,qEAAoE;AACpE,uFAAsF;AACtF,iFAAgF;AAChF,iGAA+F;AAC/F,8EAAoG;AACpG,8GAA2G;AAC3G,iHAA8G;AAC9G,uHAAoH;AACpH,iFAAgF;AAEhF,4DAA8C;AAE9C,oEAA2C;AAC3C,kEAA0C;AAC1C,2EAAmD;AACnD,8EAAsD;AACtD,oFAA4D;AAC5D,6EAAyE;AACzE,sEAAmE;AACnE,oFAAiF;AACjF,+CAA4C;AAC5C,uDAAyD;AACzD,yEAAsE;AACtE,kFAA+E;AAC/E,2FAAwF;AACxF,qFAAkF;AAYlF,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;AACzD,MAAM,KAAK,GAAkB,IAAI,CAAC,KAAK,CACrC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,eAAe,EAAE,yBAAyB,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC;AACnG,MAAM,eAAe,GAA2B;IAC9C,WAAW,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI;CACjF,CAAC;AAIF,8FAA8F;AAC9F,SAAS,cAAc;IACrB,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,kBAAkB,CAAC,CAAC;IACzD,MAAM,OAAO,GAAG,IAAI,GAAG,EAAwB,CAAC;IAChD,MAAM,IAAI,GAAG,CAAC,GAAW,EAAQ,EAAE;QACjC,KAAK,MAAM,KAAK,IAAI,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,EAAE;YAChE,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;YACxC,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE;gBACvB,IAAI,CAAC,IAAI,CAAC,CAAC;aACZ;iBAAM,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;gBACxC,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBAC7E,8DAA8D;gBAC9D,KAAK,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE;oBACvD,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,IAAI,IAAI,EAAE,EAAE,GAAmB,CAAC,CAAC;iBACpD;aACF;SACF;IACH,CAAC,CAAC;IACF,IAAI,CAAC,IAAI,CAAC,CAAC;IACX,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,OAAO,GAAG,cAAc,EAAE,CAAC;AAEjC,SAAS,MAAM,CAAC,CAAc;IAC5B,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IACnC,IAAI,CAAC,GAAG;QAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;IACjE,OAAO,GAAG,CAAC,iBAAiB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC;AAC/D,CAAC;AAED,oEAAoE;AACpE,SAAS,oBAAoB,CAAC,IAAgB;IAC5C,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,MAAM,MAAM,GAAG,GAAW,EAAE;QAC1B,IAAI,MAAM,GAAG,CAAC,CAAC;QACf,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,SAAS;YACP,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;YACpB,MAAM,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC;YAC7B,KAAK,IAAI,GAAG,CAAC;YACb,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;gBAAE,OAAO,MAAM,CAAC;SAChC;IACH,CAAC,CAAC;IACF,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE;QACtB,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC;QACrB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;QAClC,MAAM,QAAQ,GAAG,GAAG,GAAG,CAAC,CAAC;QACzB,IAAI,QAAQ,KAAK,CAAC;YAAE,MAAM,EAAE,CAAC;aACxB,IAAI,QAAQ,KAAK,CAAC;YAAE,CAAC,IAAI,CAAC,CAAC;aAC3B,IAAI,QAAQ,KAAK,CAAC,EAAE;YACvB,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC;YACxB,CAAC,IAAI,MAAM,CAAC;SACb;aACI,IAAI,QAAQ,KAAK,CAAC;YAAE,CAAC,IAAI,CAAC,CAAC;;YAC3B,MAAM,IAAI,KAAK,CAAC,wBAAwB,QAAQ,EAAE,CAAC,CAAC;KAC1D;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,IAAI,IAAsB,CAAC;AAE3B,UAAU,CAAC,GAAG,EAAE;IACd,WAAW,CAAC,qBAAqB,EAAE,CAAC;IACpC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,kBAAkB,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;AACzE,CAAC,CAAC,CAAC;AAEH,SAAS,CAAC,GAAG,EAAE;IACb,IAAI,CAAC,WAAW,EAAE,CAAC;IACnB,WAAW,CAAC,qBAAqB,EAAE,CAAC;AACtC,CAAC,CAAC,CAAC;AAEH,MAAM,gBAAgB,GAAG,GAAW,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC;AAErH,0DAA0D;AAE1D,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAU,CAAC,CAAC,CAAC,gBAAgB,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE;IACnF,IAAI,CAAC,0CAA0C,EAAE,GAAG,EAAE;QACpD,MAAM,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QAC1B,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,gCAAe,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC;QAClF,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACnE,MAAM,CAAC,gBAAgB,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1D,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,qDAAqD,EAAE,GAAG,EAAE;QAC/D,MAAM,IAAI,GAAG,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC;QAC9D,MAAM,QAAQ,GAA2B;YACvC,WAAW,EAAE,gCAAe,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC;YAClD,aAAa,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;YAClC,aAAa,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;YAClC,aAAa,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;SACnC,CAAC;QACF,MAAM,OAAO,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC;QAC3C,KAAK,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE;YAC5D,MAAM,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;SAChF;QACD,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAE,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;QAC/D,MAAM,CAAC,CAAC,MAAM,CAAC,aAAa,EAAE,EAAE,MAAM,CAAC,eAAe,EAAE,EAAE,MAAM,CAAC,eAAe,EAAE,EAAE,MAAM,CAAC,eAAe,EAAE,CAAC,CAAC;aAC3G,OAAO,CAAC,CAAC,QAAQ,CAAC,WAAW,EAAE,QAAQ,CAAC,aAAa,EAAE,QAAQ,CAAC,aAAa,EAAE,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC;QAC3G,MAAM,CAAC,CAAC,MAAM,CAAC,cAAc,EAAE,EAAE,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;IAC9F,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,yDAAyD;AAEzD,IAAI,CAAC,kDAAkD,EAAE,GAAG,EAAE;IAC5D,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,KAAK,wBAAwB,CAAE,CAAC;IACtE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;QAC1B,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;KAChC;IACD,MAAM,CAAC,gBAAgB,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACrC,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,4BAA4B,EAAE,GAAG,EAAE;IACtC,MAAM,OAAO,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,qBAAU,EAAE,EAAE,gCAAe,CAAC,iBAAiB,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IACzG,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IAC9B,WAAW,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IACjC,MAAM,CAAC,gBAAgB,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACrC,CAAC,CAAC,CAAC;AAEH,8CAA8C;AAE9C,gFAAgF;AAChF,SAAS,gBAAgB,CAAmB,GAAqB,EAAE,QAAuB;IACxF,MAAM,QAAQ,GAAkB,EAAE,CAAC;IACnC,MAAM,KAAK,GAAG,CAAC,OAAoB,EAAE,QAA8C,EAAE,EAAE;QACrF,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACvB,QAAQ,CAAC,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC7B,CAAC,CAAC;IACF,MAAM,MAAM,GAAG,CAAC,OAAoB,EAAE,EAAE;QACtC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACvB,MAAM,QAAQ,GAA+B,EAAE,CAAC;QAChD,YAAY,CAAC,GAAG,EAAE,WAAC,OAAA,MAAA,QAAQ,CAAC,GAAG,wDAAI,CAAA,EAAA,CAAC,CAAC;QACrC,OAAO,EAAE,EAAE,CAAC,KAAa,EAAE,OAAmB,IAAI,QAAQ,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;IAChG,CAAC,CAAC;IACF,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAM,CAAC;IACjD,OAA0C,CAAC,MAAM,GAAG;QACnD,sBAAsB,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM;KAC9C,CAAC;IACF,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;AAC/B,CAAC;AAED,MAAM,IAAI,GAAG,wBAAa,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;AAC3C,MAAM,MAAM,GAAG,GAAmB,EAAE,CAAC,IAAI,+BAAc,EAAE,CAAC;AAE1D,SAAS,QAAQ;IACf,OAAO,kBAAQ,CAAC,MAAM,CAAC,IAAI,2BAAa,EAAE,CAAC,OAAO,CAAC,WAAI,CAAC,MAAM,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC;AAC3G,CAAC;AAED,SAAS,SAAS;IAChB,OAAO,IAAI,mBAAS,CAAC,IAAI,6BAAc,EAAE,CAAC,OAAO,CAAC,WAAI,CAAC,MAAM,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;AACtH,CAAC;AAED,SAAe,oBAAoB;;QACjC,MAAM,QAAQ,GAAkB,EAAE,CAAC;QACnC,MAAM,MAAM,GAAG,CAAC,QAAuB,EAAE,EAAE,CAAC,CAAC;YAC3C,QAAQ,EAAE,CAAC,OAAoB,EAAE,QAA8C,EAAE,EAAE;gBACjF,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBACvB,QAAQ,CAAC,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;YAC7B,CAAC;SACF,CAAC,CAAC;QACH,MAAM,QAAQ,GAAG,IAAI,uBAAY,CAAC;YAChC,cAAc,EAAE,MAAM,CAAC,GAAG,EAAE,CAAC,IAAI,uDAA0B,EAAE,CAAU;YACvE,eAAe,EAAE,MAAM,CAAC,GAAG,EAAE,CAAC,IAAI,yDAA2B,EAAE,CAAU;YACzE,iBAAiB,EAAE,MAAM,CAAC,GAAG,EAAE,CAAC,IAAI,6DAA6B,EAAE,CAAU;SAC9E,CAAC,CAAC;QACH,2DAA2D;QAC3D,MAAM,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,WAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;QACpE,MAAM,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,WAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;QACrE,MAAM,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,WAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;QACvE,OAAO,QAAQ,CAAC;IAClB,CAAC;CAAA;AAID,SAAe,WAAW,CAAmB,GAAqB,EAAE,IAAsC;;QACxG,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,gBAAgB,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,IAAI,yBAAY,EAAE,CAAC,CAAC;QAC9E,MAAM,IAAI,CAAC,OAAO,CAAC,CAAC;QACpB,OAAO,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACvC,CAAC;CAAA;AAED,MAAM,eAAe,GAAa;IAChC,CAAC,kBAAkB,EAAE,GAAS,EAAE,kDAAC,OAAA,eAAK,CAAC,UAAU,CAAC,WAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC,KAAK,CAAA,GAAA;QAC9F,gCAAe,CAAC,iBAAiB,EAAE,OAAO,EAAE,OAAO,CAAC;IACtD,CAAC,cAAc,EAAE,GAAS,EAAE,kDAAC,OAAA,eAAK,CAAC,MAAM,CAAC,IAAI,oBAAO,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE,wBAAa,CAAC,GAAG,EAAE,CAAC,CAAC,KAAK,CAAA,GAAA;QAC9F,gCAAe,CAAC,iBAAiB,EAAE,OAAO,EAAE,OAAO,CAAC;IACtD,CAAC,wBAAwB,EAAE,GAAS,EAAE,kDAAC,OAAA,MAAM,EAAE,CAAC,OAAO,EAAE,CAAA,GAAA;QACvD,gCAAe,CAAC,2BAA2B,EAAE,gBAAgB,EAAE,OAAO,CAAC;IACzE,CAAC,8BAA8B,EAAE,GAAS,EAAE;YAAC,OAAA,IAAI,2CAAoB,CACnE,MAAM,EAAE,EAAE,+BAAiB,CAAC,WAAW,EAAE,+BAAiB,CAAC,YAAY,EAAE,EAAE,EAAE,EAAE,EAAE,wBAAa,CAAC,GAAG,EAAE,CAAC,CAAC,OAAO,EAAE,CAAA;UAAA;QACjH,gCAAe,CAAC,kCAAkC,EAAE,EAAE,EAAE,OAAO,CAAC;IAChE,CAAC,aAAa,EAAE,GAAS,EAAE,kDAAC,OAAA,WAAW,EAAE,CAAC,KAAK,CAAA,GAAA;QAC7C,gCAAe,CAAC,uBAAuB,EAAE,aAAa,EAAE,OAAO,CAAC;IAClE,CAAC,iCAAiC,EAAE,GAAS,EAAE,kDAAC,OAAA,WAAW,EAAE,CAAC,KAAK,CAAC,qBAAqB,EAAG,CAAA,GAAA;QAC1F,gCAAe,CAAC,+BAA+B,EAAE,oBAAoB,EAAE,OAAO,CAAC;IACjF,CAAC,qCAAqC,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,2BAAY,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,sBAAsB,CAAC,IAAI,qBAAU,EAAE,CAAC,CAAC;QACxH,gCAAe,CAAC,gCAAgC,EAAE,cAAc,EAAE,OAAO,CAAC;IAC5E,CAAC,qBAAqB,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,2BAAY,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;QACtF,gCAAe,CAAC,+BAA+B,EAAE,cAAc,EAAE,OAAO,CAAC;IAC3E,CAAC,wCAAwC,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,iCAAe,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,sBAAsB,CAAC,IAAI,2BAAa,EAAE,CAAC,CAAC;QACjI,gCAAe,CAAC,mCAAmC,EAAE,iBAAiB,EAAE,OAAO,CAAC;IAClF,CAAC,gCAAgC,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,iCAAe,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;QAC5G,gCAAe,CAAC,kCAAkC,EAAE,iBAAiB,EAAE,OAAO,CAAC;IACjF,CAAC,8CAA8C,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,uCAAkB,EACnF,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,yBAAyB,CAAC,EAAE,KAAK,EAAE,IAAI,iCAAgB,EAAE,EAAiB,CAAC,CAAC;QACvF,gCAAe,CAAC,sCAAsC,EAAE,oBAAoB,EAAE,OAAO,CAAC;IACtF,CAAC,sCAAsC,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,uCAAkB,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;QACxH,gCAAe,CAAC,qCAAqC,EAAE,iBAAiB,EAAE,OAAO,CAAC;IACpF,CAAC,0CAA0C,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,mCAAgB,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,uBAAuB,CAAC,IAAI,6BAAc,EAAE,CAAC,CAAC;QACtI,gCAAe,CAAC,oCAAoC,EAAE,kBAAkB,EAAE,OAAO,CAAC;IACpF,CAAC,kCAAkC,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,mCAAgB,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;QAChH,gCAAe,CAAC,mCAAmC,EAAE,kBAAkB,EAAE,OAAO,CAAC;IACnF,CAAC,yBAAyB,EAAE,GAAS,EAAE,kDAAC,OAAA,CAAC,MAAM,oBAAoB,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA,GAAA;QACvE,gCAAe,CAAC,kCAAkC,EAAE,iBAAiB,EAAE,OAAO,CAAC;IACjF,CAAC,yBAAyB,EAAE,GAAS,EAAE,kDAAC,OAAA,CAAC,MAAM,oBAAoB,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA,GAAA;QACvE,gCAAe,CAAC,mCAAmC,EAAE,kBAAkB,EAAE,OAAO,CAAC;IACnF,CAAC,2BAA2B,EAAE,GAAS,EAAE,kDAAC,OAAA,CAAC,MAAM,oBAAoB,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA,GAAA;QACzE,gCAAe,CAAC,qCAAqC,EAAE,oBAAoB,EAAE,OAAO,CAAC;CACxF,CAAC;AAEF,SAAS,WAAW;IAClB,OAAO,IAAI,qBAAW,CAAC;QACrB,SAAS,EAAE,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;QAChC,cAAc,EAAE,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,QAAQ,EAAE,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QAC1C,KAAK,EAAE,IAAI,oBAAO,CAAC,QAAQ,CAAC;QAC5B,QAAQ,EAAE,QAAQ,EAAE;QACpB,eAAe,EAAE,IAAI,kCAAe,CAAC,0CAAoB,CAAC,GAAG,CAAC;QAC9D,SAAS,EAAE,SAAS,EAAE;QACtB,QAAQ,EAAE,IAAI,oBAAO,CAAC,IAAI,CAAC;KAC5B,CAAC,CAAC;AACL,CAAC;AAED,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,+CAA+C,EAAE,CAAO,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,EAAE;IAC7H,MAAM,OAAO,GAAG,MAAM,KAAK,EAAE,CAAC;IAE9B,MAAM,CAAC,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC;IACzF,8EAA8E;IAC9E,+DAA+D;IAC/D,MAAM,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC3C,IAAI,WAAW,EAAE;QACf,MAAM,CAAC,WAAW,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,gCAAe,CAAC,mBAAmB,CAAC,CAAC;KAC3F;IACD,MAAM,CAAC,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,OAAO,CAAC,eAAe,EAAE,EAAE,OAAO,CAAC,eAAe,EAAE,CAAC,CAAC;SACtF,OAAO,CAAC,WAAW,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC;IAC9C,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC;IACpF,MAAM,CAAC,gBAAgB,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACrC,CAAC,CAAA,CAAC,CAAC;AAEH,IAAI,CAAC,mCAAmC,EAAE,GAAG,EAAE;IAC7C,MAAM,CAAC,GAAG,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,qBAAU,EAAE,EAAE,gCAAe,CAAC,iBAAiB,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;AACjH,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"object-types.test.js","sourceRoot":"","sources":["object-types.test.ts"],"names":[],"mappings":"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"}
@@ -1,11 +1,11 @@
1
- // Compact object type and version (LM-297): writers set both forms, readers
2
- // translate the strings-only form. Rows come from the shared fixture
3
- // test-fixtures/object-type-legacy.json, which Java, Python and Rust also load.
1
+ // Object type and version (LM-297, LM-318): `stamp` writes object_type = 1
2
+ // and version = 2 (0.0.1), and bytes from earlier releases are not readable.
4
3
  import * as fs from 'fs';
5
4
  import * as path from 'path';
6
5
  import { Decimal } from 'decimal.js';
7
6
 
8
7
  import { ObjectTypeProto } from '../../fintekkers/models/util/object_type_pb';
8
+ import { VersionProto } from '../../fintekkers/models/util/version_pb';
9
9
  import { SecurityProto } from '../../fintekkers/models/security/security_pb';
10
10
  import { PriceProto } from '../../fintekkers/models/price/price_pb';
11
11
  import { TransactionProto } from '../../fintekkers/models/transaction/transaction_pb';
@@ -34,146 +34,43 @@ import { SecurityService } from '../services/security-service/SecurityService';
34
34
  import { TransactionService } from '../services/transaction-service/TransactionService';
35
35
  import { PortfolioService } from '../services/portfolio-service/PortfolioService';
36
36
 
37
- interface FixtureCase {
38
- name: string;
39
- source: string;
40
- message: string;
41
- object_class: string;
42
- version: string;
43
- bytes: string;
44
- expect: { object_type: keyof typeof ObjectTypeProto; version: number[]; warns: boolean };
45
- }
46
-
47
- const REPO_ROOT = path.resolve(__dirname, '../../../..');
48
- const CASES: FixtureCase[] = JSON.parse(
49
- fs.readFileSync(path.join(REPO_ROOT, 'test-fixtures', 'object-type-legacy.json'), 'utf8')).cases;
50
- const COMPACT_NUMBERS: Record<string, number> = {
51
- object_type: 1001, version_major: 1002, version_minor: 1003, version_patch: 1004,
52
- };
53
-
54
- type MessageClass = { deserializeBinary(bytes: Uint8Array): ObjectTyped & { serializeBinary(): Uint8Array } };
55
-
56
- /** Generated message classes by proto full name: the package is the directory under node/. */
57
- function messageClasses(): Map<string, MessageClass> {
58
- const root = path.resolve(__dirname, '../../fintekkers');
59
- const classes = new Map<string, MessageClass>();
60
- const walk = (dir: string): void => {
61
- for (const entry of fs.readdirSync(dir, { withFileTypes: true })) {
62
- const full = path.join(dir, entry.name);
63
- if (entry.isDirectory()) {
64
- walk(full);
65
- } else if (entry.name.endsWith('_pb.js')) {
66
- const pkg = path.relative(path.dirname(root), dir).split(path.sep).join('.');
67
- // eslint-disable-next-line @typescript-eslint/no-var-requires
68
- for (const [name, cls] of Object.entries(require(full))) {
69
- classes.set(`${pkg}.${name}`, cls as MessageClass);
70
- }
71
- }
72
- }
73
- };
74
- walk(root);
75
- return classes;
76
- }
77
-
78
- const CLASSES = messageClasses();
79
-
80
- function decode(c: FixtureCase) {
81
- const cls = CLASSES.get(c.message);
82
- if (!cls) throw new Error(`no generated class for ${c.message}`);
83
- return cls.deserializeBinary(Buffer.from(c.bytes, 'base64'));
84
- }
85
-
86
- /** Field numbers present at the top level of an encoded message. */
87
- function topLevelFieldNumbers(data: Uint8Array): number[] {
88
- const numbers: number[] = [];
89
- let i = 0;
90
- const varint = (): number => {
91
- let result = 0;
92
- let scale = 1;
93
- for (;;) {
94
- const b = data[i++];
95
- result += (b & 0x7f) * scale;
96
- scale *= 128;
97
- if (!(b & 0x80)) return result;
98
- }
99
- };
100
- while (i < data.length) {
101
- const key = varint();
102
- numbers.push(Math.floor(key / 8));
103
- const wireType = key % 8;
104
- if (wireType === 0) varint();
105
- else if (wireType === 1) i += 8;
106
- else if (wireType === 2) {
107
- const length = varint();
108
- i += length;
109
- }
110
- else if (wireType === 5) i += 4;
111
- else throw new Error(`unexpected wire type ${wireType}`);
112
- }
113
- return numbers;
114
- }
115
-
116
- let warn: jest.SpyInstance;
117
-
118
- beforeEach(() => {
119
- objectTypes.resetWarningsForTests();
120
- warn = jest.spyOn(console, 'warn').mockImplementation(() => undefined);
121
- });
122
-
123
- afterEach(() => {
124
- warn.mockRestore();
125
- objectTypes.resetWarningsForTests();
37
+ // A PriceProto written by ledger-models v0.4.33: object_class / version
38
+ // strings in fields 1 and 2.
39
+ const OLD_PRICE = path.resolve(__dirname, '../../../../ledger-models-protos/fixtures/legacy_v0433/price.bin');
40
+
41
+ // ---- stamp round-trips (metric 2) ----
42
+
43
+ test('a stamped price round-trips type and version', () => {
44
+ const price = objectTypes.stamp(new PriceProto(), ObjectTypeProto.OBJECT_TYPE_PRICE);
45
+ const bytes = price.serializeBinary();
46
+ // Exactly field 1 (varint 11) and field 2 ({patch: 1}): nothing at the
47
+ // removed 1001-1004.
48
+ expect(Array.from(bytes)).toEqual([0x08, 11, 0x12, 0x02, 0x18, 0x01]);
49
+
50
+ const reread = PriceProto.deserializeBinary(bytes);
51
+ expect(objectTypes.readType(reread)).toBe(ObjectTypeProto.OBJECT_TYPE_PRICE);
52
+ expect(objectTypes.readVersion(reread)).toEqual([0, 0, 1]);
53
+ const version = reread.getVersion() as VersionProto;
54
+ expect([version.getMajor(), version.getMinor(), version.getPatch()]).toEqual([0, 0, 1]);
55
+ // Nothing unknown kept on re-serialising.
56
+ expect(Array.from(reread.serializeBinary())).toEqual(Array.from(bytes));
126
57
  });
127
58
 
128
- const fallbackWarnings = (): number => warn.mock.calls.filter((args) => String(args[0]).includes('(LM-297)')).length;
129
-
130
- // ---- Loading the old form translates it (metric 3) ----
131
-
132
- describe.each(CASES.map((c) => [c.name, c] as const))('fixture row %s', (_name, c) => {
133
- test('decodes to the expected type and version', () => {
134
- const message = decode(c);
135
- expect(objectTypes.readType(message)).toBe(ObjectTypeProto[c.expect.object_type]);
136
- expect(objectTypes.readVersion(message)).toEqual(c.expect.version);
137
- expect(fallbackWarnings()).toBe(c.expect.warns ? 1 : 0);
138
- });
139
-
140
- test('re-serialises with the compact fields once upgraded', () => {
141
- const data = objectTypes.upgrade(decode(c)).serializeBinary();
142
- const expected: Record<string, number> = {
143
- object_type: ObjectTypeProto[c.expect.object_type],
144
- version_major: c.expect.version[0],
145
- version_minor: c.expect.version[1],
146
- version_patch: c.expect.version[2],
147
- };
148
- const present = topLevelFieldNumbers(data);
149
- for (const [name, number] of Object.entries(COMPACT_NUMBERS)) {
150
- expect([name, present.includes(number)]).toEqual([name, expected[name] !== 0]);
151
- }
152
- const reread = CLASSES.get(c.message)!.deserializeBinary(data);
153
- expect([reread.getObjectType(), reread.getVersionMajor(), reread.getVersionMinor(), reread.getVersionPatch()])
154
- .toEqual([expected.object_type, expected.version_major, expected.version_minor, expected.version_patch]);
155
- expect([reread.getObjectClass(), reread.getVersion()]).toEqual([c.object_class, c.version]);
156
- });
59
+ test('an unstamped message reads as unknown and absent', () => {
60
+ const price = PriceProto.deserializeBinary(new PriceProto().serializeBinary());
61
+ expect(objectTypes.readType(price)).toBe(ObjectTypeProto.OBJECT_TYPE_UNKNOWN);
62
+ expect(objectTypes.readVersion(price)).toBeUndefined();
157
63
  });
158
64
 
159
- // ---- Reading the strings is deprecated (metric 4) ----
160
-
161
- test('three strings-only decodes of one type warn once', () => {
162
- const c = CASES.find((row) => row.name === 'js-PositionFilterProto')!;
163
- for (let i = 0; i < 3; i++) {
164
- objectTypes.upgrade(decode(c));
165
- }
166
- expect(fallbackWarnings()).toBe(1);
167
- });
65
+ // ---- Old bytes are not readable (metric 3) ----
168
66
 
169
- test('the new form does not warn', () => {
170
- const message = objectTypes.stamp(new PriceProto(), ObjectTypeProto.OBJECT_TYPE_PRICE, 'Price', '0.0.1');
171
- objectTypes.readType(message);
172
- objectTypes.readVersion(message);
173
- expect(fallbackWarnings()).toBe(0);
67
+ test('bytes from v0.4.33 are not readable', () => {
68
+ // Field 2 held the string "0.0.1", which does not parse as a VersionProto.
69
+ const old = new Uint8Array(fs.readFileSync(OLD_PRICE));
70
+ expect(() => PriceProto.deserializeBinary(old)).toThrow();
174
71
  });
175
72
 
176
- // ---- Writers set both forms (metric 2) ----
73
+ // ---- Every library writer stamps the new form (metric 2) ----
177
74
 
178
75
  /** A service with its gRPC client swapped for one that records each request. */
179
76
  function capturingService<S extends object>(cls: { prototype: S }, response: () => unknown): { service: S; requests: ObjectTyped[] } {
@@ -226,7 +123,7 @@ async function linkResolverRequests(): Promise<ObjectTyped[]> {
226
123
  return requests;
227
124
  }
228
125
 
229
- type Writer = [string, () => Promise<ObjectTyped>, ObjectTypeProto, string, string];
126
+ type Writer = [string, () => Promise<ObjectTyped>, ObjectTypeProto];
230
127
 
231
128
  async function lastRequest<S extends object>(cls: { prototype: S }, call: (service: S) => Promise<unknown>): Promise<ObjectTyped> {
232
129
  const { service, requests } = capturingService(cls, () => new SummaryProto());
@@ -236,41 +133,41 @@ async function lastRequest<S extends object>(cls: { prototype: S }, call: (servi
236
133
 
237
134
  const LIBRARY_WRITERS: Writer[] = [
238
135
  ['Price.fromSimple', async () => Price.fromSimple(UUID.random().toString(), 1, new Date()).proto,
239
- ObjectTypeProto.OBJECT_TYPE_PRICE, 'Price', '0.0.1'],
136
+ ObjectTypeProto.OBJECT_TYPE_PRICE],
240
137
  ['Price.create', async () => Price.create(new Decimal(1), security(), ZonedDateTime.now()).proto,
241
- ObjectTypeProto.OBJECT_TYPE_PRICE, 'Price', '0.0.1'],
138
+ ObjectTypeProto.OBJECT_TYPE_PRICE],
242
139
  ['PositionFilter.toProto', async () => filter().toProto(),
243
- ObjectTypeProto.OBJECT_TYPE_POSITION_FILTER, 'PositionFilter', '0.0.1'],
140
+ ObjectTypeProto.OBJECT_TYPE_POSITION_FILTER],
244
141
  ['QueryPositionRequest.toProto', async () => new QueryPositionRequest(
245
142
  filter(), PositionTypeProto.TRANSACTION, PositionViewProto.DEFAULT_VIEW, [], [], ZonedDateTime.now()).toProto(),
246
- ObjectTypeProto.OBJECT_TYPE_QUERY_POSITION_REQUEST, '', '1.0.0'],
143
+ ObjectTypeProto.OBJECT_TYPE_QUERY_POSITION_REQUEST],
247
144
  ['Transaction', async () => transaction().proto,
248
- ObjectTypeProto.OBJECT_TYPE_TRANSACTION, 'Transaction', '0.0.1'],
145
+ ObjectTypeProto.OBJECT_TYPE_TRANSACTION],
249
146
  ['Transaction strategy allocation', async () => transaction().proto.getStrategyAllocation()!,
250
- ObjectTypeProto.OBJECT_TYPE_STRATEGY_ALLOCATION, 'StrategyAllocation', '0.0.1'],
147
+ ObjectTypeProto.OBJECT_TYPE_STRATEGY_ALLOCATION],
251
148
  ['PriceService.validateCreateOrUpdate', () => lastRequest(PriceService, (s) => s.validateCreateOrUpdate(new PriceProto())),
252
- ObjectTypeProto.OBJECT_TYPE_CREATE_PRICE_REQUEST, 'PriceRequest', '0.0.1'],
149
+ ObjectTypeProto.OBJECT_TYPE_CREATE_PRICE_REQUEST],
253
150
  ['PriceService.search', () => lastRequest(PriceService, (s) => s.search(asOf, filter())),
254
- ObjectTypeProto.OBJECT_TYPE_QUERY_PRICE_REQUEST, 'PriceRequest', '0.0.1'],
151
+ ObjectTypeProto.OBJECT_TYPE_QUERY_PRICE_REQUEST],
255
152
  ['SecurityService.validateCreateSecurity', () => lastRequest(SecurityService, (s) => s.validateCreateSecurity(new SecurityProto())),
256
- ObjectTypeProto.OBJECT_TYPE_CREATE_SECURITY_REQUEST, 'SecurityRequest', '0.0.1'],
153
+ ObjectTypeProto.OBJECT_TYPE_CREATE_SECURITY_REQUEST],
257
154
  ['SecurityService.searchSecurity', () => lastRequest(SecurityService, (s) => s.searchSecurity(asOf, filter())),
258
- ObjectTypeProto.OBJECT_TYPE_QUERY_SECURITY_REQUEST, 'SecurityRequest', '0.0.1'],
155
+ ObjectTypeProto.OBJECT_TYPE_QUERY_SECURITY_REQUEST],
259
156
  ['TransactionService.validateCreateTransaction', () => lastRequest(TransactionService,
260
157
  (s) => s.validateCreateTransaction({ proto: new TransactionProto() } as Transaction)),
261
- ObjectTypeProto.OBJECT_TYPE_CREATE_TRANSACTION_REQUEST, 'TransactionRequest', '0.0.1'],
158
+ ObjectTypeProto.OBJECT_TYPE_CREATE_TRANSACTION_REQUEST],
262
159
  ['TransactionService.searchTransaction', () => lastRequest(TransactionService, (s) => s.searchTransaction(asOf, filter())),
263
- ObjectTypeProto.OBJECT_TYPE_QUERY_TRANSACTION_REQUEST, 'SecurityRequest', '0.0.1'],
160
+ ObjectTypeProto.OBJECT_TYPE_QUERY_TRANSACTION_REQUEST],
264
161
  ['PortfolioService.validateCreatePortfolio', () => lastRequest(PortfolioService, (s) => s.validateCreatePortfolio(new PortfolioProto())),
265
- ObjectTypeProto.OBJECT_TYPE_CREATE_PORTFOLIO_REQUEST, 'PortfolioRequest', '0.0.1'],
162
+ ObjectTypeProto.OBJECT_TYPE_CREATE_PORTFOLIO_REQUEST],
266
163
  ['PortfolioService.searchPortfolio', () => lastRequest(PortfolioService, (s) => s.searchPortfolio(asOf, filter())),
267
- ObjectTypeProto.OBJECT_TYPE_QUERY_PORTFOLIO_REQUEST, 'PortfolioRequest', '0.0.1'],
164
+ ObjectTypeProto.OBJECT_TYPE_QUERY_PORTFOLIO_REQUEST],
268
165
  ['LinkResolver securities', async () => (await linkResolverRequests())[0],
269
- ObjectTypeProto.OBJECT_TYPE_QUERY_SECURITY_REQUEST, 'SecurityRequest', '0.0.1'],
166
+ ObjectTypeProto.OBJECT_TYPE_QUERY_SECURITY_REQUEST],
270
167
  ['LinkResolver portfolios', async () => (await linkResolverRequests())[1],
271
- ObjectTypeProto.OBJECT_TYPE_QUERY_PORTFOLIO_REQUEST, 'PortfolioRequest', '0.0.1'],
168
+ ObjectTypeProto.OBJECT_TYPE_QUERY_PORTFOLIO_REQUEST],
272
169
  ['LinkResolver transactions', async () => (await linkResolverRequests())[2],
273
- ObjectTypeProto.OBJECT_TYPE_QUERY_TRANSACTION_REQUEST, 'TransactionRequest', '0.0.1'],
170
+ ObjectTypeProto.OBJECT_TYPE_QUERY_TRANSACTION_REQUEST],
274
171
  ];
275
172
 
276
173
  function transaction(): Transaction {
@@ -286,22 +183,10 @@ function transaction(): Transaction {
286
183
  });
287
184
  }
288
185
 
289
- test.each(LIBRARY_WRITERS)('%s sets strings and compact fields that agree', async (_name, build, type, objectClass, version) => {
186
+ test.each(LIBRARY_WRITERS)('%s stamps the type and schema version', async (_name, build, type) => {
290
187
  const message = await build();
291
188
 
292
- expect([message.getObjectClass(), message.getVersion()]).toEqual([objectClass, version]);
293
- // The message's own type. Some JS writers put a query request's string on the
294
- // create request too; the string still sits on one enum value.
295
- expect(message.getObjectType()).toBe(type);
296
- if (objectClass) {
297
- expect(objectTypes.fromLegacy(objectClass)).not.toBe(ObjectTypeProto.OBJECT_TYPE_UNKNOWN);
298
- }
299
- expect([message.getVersionMajor(), message.getVersionMinor(), message.getVersionPatch()])
300
- .toEqual(objectTypes.parseVersion(version));
301
- expect(objectTypes.readVersion(message)).toEqual(objectTypes.parseVersion(version));
302
- expect(fallbackWarnings()).toBe(0);
303
- });
304
-
305
- test('stamp rejects a malformed version', () => {
306
- expect(() => objectTypes.stamp(new PriceProto(), ObjectTypeProto.OBJECT_TYPE_PRICE, 'Price', '1.2')).toThrow();
189
+ expect(objectTypes.readType(message)).toBe(type);
190
+ expect(objectTypes.readVersion(message)).toEqual(objectTypes.SCHEMA_VERSION);
191
+ expect(objectTypes.SCHEMA_VERSION).toEqual([0, 0, 1]);
307
192
  });