@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
@@ -0,0 +1,159 @@
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
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ // Every message with object_type has an own-type stamp (LM-320). Walks the
27
+ // descriptor set for messages whose field 1 is
28
+ // fintekkers.models.util.ObjectTypeProto, and fails when `stampOwn` has no
29
+ // entry for one. Stamps each and checks its own type and version (0, 0, 1).
30
+ const fs = __importStar(require("fs"));
31
+ const path = __importStar(require("path"));
32
+ const descriptor_pb_1 = require("google-protobuf/google/protobuf/descriptor_pb");
33
+ const object_type_pb_1 = require("../../fintekkers/models/util/object_type_pb");
34
+ const uuid_pb_1 = require("../../fintekkers/models/util/uuid_pb");
35
+ const objectTypes = __importStar(require("./object-types"));
36
+ // The descriptor set compile.sh writes for every language.
37
+ const DESCRIPTOR_SET = path.resolve(__dirname, '../../../../ledger-models-rust/ledger_models_file_descriptor_set_v_todo.bin');
38
+ const GENERATED = path.resolve(__dirname, '../..');
39
+ const OBJECT_TYPE_ENUM = '.fintekkers.models.util.ObjectTypeProto';
40
+ // The 13 types LM-320 names: every *ResponseProto and the index-composition
41
+ // requests and responses.
42
+ const NAMED = [
43
+ 'fintekkers.requests.price.CreatePriceResponseProto',
44
+ 'fintekkers.requests.price.QueryPriceResponseProto',
45
+ 'fintekkers.requests.security.CreateSecurityResponseProto',
46
+ 'fintekkers.requests.security.QuerySecurityResponseProto',
47
+ 'fintekkers.requests.portfolio.CreatePortfolioResponseProto',
48
+ 'fintekkers.requests.portfolio.QueryPortfolioResponseProto',
49
+ 'fintekkers.requests.transaction.CreateTransactionResponseProto',
50
+ 'fintekkers.requests.transaction.QueryTransactionResponseProto',
51
+ 'fintekkers.requests.position.QueryPositionResponseProto',
52
+ 'fintekkers.requests.index_composition.CreateIndexCompositionRequestProto',
53
+ 'fintekkers.requests.index_composition.CreateIndexCompositionResponseProto',
54
+ 'fintekkers.requests.index_composition.GetIndexCompositionRequestProto',
55
+ 'fintekkers.requests.index_composition.GetIndexCompositionResponseProto',
56
+ ];
57
+ /** Full name -> generated class of every message whose field 1 is ObjectTypeProto. */
58
+ function walk() {
59
+ if (!fs.existsSync(DESCRIPTOR_SET))
60
+ throw new Error(`descriptor set not found at ${DESCRIPTOR_SET}`);
61
+ const found = new Map();
62
+ const set = descriptor_pb_1.FileDescriptorSet.deserializeBinary(new Uint8Array(fs.readFileSync(DESCRIPTOR_SET)));
63
+ const isTyped = (message) => message.getFieldList().some((f) => f.getNumber() === 1 && f.getTypeName() === OBJECT_TYPE_ENUM);
64
+ for (const file of set.getFileList()) {
65
+ const fileName = file.getName();
66
+ // Loaded only for a typed message: google/protobuf/* has no module here.
67
+ const generated = () => require(path.join(GENERATED, fileName.replace(/\.proto$/, '_pb')));
68
+ const visit = (fullName, scope, message) => {
69
+ const messageClass = () => scope()[message.getName()];
70
+ if (isTyped(message)) {
71
+ if (typeof messageClass() !== 'function')
72
+ throw new Error(`${fullName}: no generated class in ${fileName}`);
73
+ found.set(fullName, messageClass());
74
+ }
75
+ for (const nested of message.getNestedTypeList()) {
76
+ visit(`${fullName}.${nested.getName()}`, messageClass, nested);
77
+ }
78
+ };
79
+ for (const message of file.getMessageTypeList()) {
80
+ visit(`${file.getPackage()}.${message.getName()}`, generated, message);
81
+ }
82
+ }
83
+ return found;
84
+ }
85
+ const WALKED = walk();
86
+ /** The walked names that `lookup` has no own type for. */
87
+ function missingTypes(walked, lookup) {
88
+ return Array.from(walked).filter((name) => lookup(name) === undefined);
89
+ }
90
+ function lookup(fullName) {
91
+ const messageClass = WALKED.get(fullName);
92
+ return objectTypes.ownType(new messageClass());
93
+ }
94
+ /** The value the naming rule gives: message name without Proto, in SCREAMING_SNAKE, prefixed OBJECT_TYPE_. */
95
+ function expectedType(fullName) {
96
+ const name = fullName.split('.').pop().replace(/Proto$/, '');
97
+ const enumName = 'OBJECT_TYPE_' + name.replace(/([a-z])([A-Z])/g, '$1_$2').toUpperCase();
98
+ const value = object_type_pb_1.ObjectTypeProto[enumName];
99
+ if (value === undefined)
100
+ throw new Error(`${fullName}: no ${enumName} in ObjectTypeProto`);
101
+ return value;
102
+ }
103
+ test('the walk finds every typed message, including the named ones', () => {
104
+ expect(WALKED.size).toBeGreaterThanOrEqual(49);
105
+ for (const name of NAMED)
106
+ expect(WALKED.has(name)).toBe(true);
107
+ });
108
+ test('every typed message has an own type', () => {
109
+ expect(missingTypes(WALKED.keys(), lookup)).toEqual([]);
110
+ });
111
+ test('a missing entry is reported', () => {
112
+ const dropped = 'fintekkers.requests.price.QueryPriceResponseProto';
113
+ const without = (name) => (name === dropped ? undefined : lookup(name));
114
+ expect(missingTypes(WALKED.keys(), without)).toEqual([dropped]);
115
+ });
116
+ test.each(Array.from(WALKED.keys()).sort())('stamping %s sets its own type and version', (fullName) => {
117
+ const messageClass = WALKED.get(fullName);
118
+ const stamped = objectTypes.stampOwn(new messageClass());
119
+ const expected = expectedType(fullName);
120
+ expect(objectTypes.readType(stamped)).toBe(expected);
121
+ expect(objectTypes.readVersion(stamped)).toEqual([0, 0, 1]);
122
+ // The name table agrees with the class table.
123
+ expect(objectTypes.OWN_TYPE_NAMES.get(fullName)).toBe(expected);
124
+ });
125
+ test('own types are distinct and known', () => {
126
+ const types = Array.from(WALKED.keys()).map(lookup);
127
+ expect(types).not.toContain(object_type_pb_1.ObjectTypeProto.OBJECT_TYPE_UNKNOWN);
128
+ expect(new Set(types).size).toBe(types.length);
129
+ });
130
+ test('the LM-318 entries keep their values', () => {
131
+ const lm318 = [
132
+ ['fintekkers.models.portfolio.PortfolioProto', object_type_pb_1.ObjectTypeProto.OBJECT_TYPE_PORTFOLIO],
133
+ ['fintekkers.models.position.PositionProto', object_type_pb_1.ObjectTypeProto.OBJECT_TYPE_POSITION],
134
+ ['fintekkers.models.position.PositionFilterProto', object_type_pb_1.ObjectTypeProto.OBJECT_TYPE_POSITION_FILTER],
135
+ ['fintekkers.models.price.PriceProto', object_type_pb_1.ObjectTypeProto.OBJECT_TYPE_PRICE],
136
+ ['fintekkers.models.security.IdentifierProto', object_type_pb_1.ObjectTypeProto.OBJECT_TYPE_IDENTIFIER],
137
+ ['fintekkers.models.security.SecurityProto', object_type_pb_1.ObjectTypeProto.OBJECT_TYPE_SECURITY],
138
+ ['fintekkers.models.security.TenorProto', object_type_pb_1.ObjectTypeProto.OBJECT_TYPE_TENOR],
139
+ ['fintekkers.models.strategy.StrategyProto', object_type_pb_1.ObjectTypeProto.OBJECT_TYPE_STRATEGY],
140
+ ['fintekkers.models.strategy.StrategyAllocationProto', object_type_pb_1.ObjectTypeProto.OBJECT_TYPE_STRATEGY_ALLOCATION],
141
+ ['fintekkers.models.transaction.TransactionProto', object_type_pb_1.ObjectTypeProto.OBJECT_TYPE_TRANSACTION],
142
+ ['fintekkers.requests.portfolio.CreatePortfolioRequestProto', object_type_pb_1.ObjectTypeProto.OBJECT_TYPE_CREATE_PORTFOLIO_REQUEST],
143
+ ['fintekkers.requests.portfolio.QueryPortfolioRequestProto', object_type_pb_1.ObjectTypeProto.OBJECT_TYPE_QUERY_PORTFOLIO_REQUEST],
144
+ ['fintekkers.requests.price.CreatePriceRequestProto', object_type_pb_1.ObjectTypeProto.OBJECT_TYPE_CREATE_PRICE_REQUEST],
145
+ ['fintekkers.requests.price.QueryPriceRequestProto', object_type_pb_1.ObjectTypeProto.OBJECT_TYPE_QUERY_PRICE_REQUEST],
146
+ ['fintekkers.requests.security.CreateSecurityRequestProto', object_type_pb_1.ObjectTypeProto.OBJECT_TYPE_CREATE_SECURITY_REQUEST],
147
+ ['fintekkers.requests.security.QuerySecurityRequestProto', object_type_pb_1.ObjectTypeProto.OBJECT_TYPE_QUERY_SECURITY_REQUEST],
148
+ ['fintekkers.requests.transaction.CreateTransactionRequestProto', object_type_pb_1.ObjectTypeProto.OBJECT_TYPE_CREATE_TRANSACTION_REQUEST],
149
+ ['fintekkers.requests.transaction.QueryTransactionRequestProto', object_type_pb_1.ObjectTypeProto.OBJECT_TYPE_QUERY_TRANSACTION_REQUEST],
150
+ ];
151
+ for (const [name, objectType] of lm318)
152
+ expect([name, lookup(name)]).toEqual([name, objectType]);
153
+ });
154
+ test('stampOwn on a message without object_type throws', () => {
155
+ expect(objectTypes.ownType(new uuid_pb_1.UUIDProto())).toBeUndefined();
156
+ expect(objectTypes.ownType({})).toBeUndefined();
157
+ expect(() => objectTypes.stampOwn(new uuid_pb_1.UUIDProto())).toThrow('this message type has no own ObjectTypeProto');
158
+ });
159
+ //# sourceMappingURL=object-type-coverage.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"object-type-coverage.test.js","sourceRoot":"","sources":["object-type-coverage.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,149 @@
1
+ // Every message with object_type has an own-type stamp (LM-320). Walks the
2
+ // descriptor set for messages whose field 1 is
3
+ // fintekkers.models.util.ObjectTypeProto, and fails when `stampOwn` has no
4
+ // entry for one. Stamps each and checks its own type and version (0, 0, 1).
5
+ import * as fs from 'fs';
6
+ import * as path from 'path';
7
+ import { DescriptorProto, FileDescriptorSet } from 'google-protobuf/google/protobuf/descriptor_pb';
8
+
9
+ import { ObjectTypeProto } from '../../fintekkers/models/util/object_type_pb';
10
+ import { UUIDProto } from '../../fintekkers/models/util/uuid_pb';
11
+
12
+ import * as objectTypes from './object-types';
13
+ import { ObjectTyped } from './object-types';
14
+
15
+ // The descriptor set compile.sh writes for every language.
16
+ const DESCRIPTOR_SET = path.resolve(__dirname, '../../../../ledger-models-rust/ledger_models_file_descriptor_set_v_todo.bin');
17
+ const GENERATED = path.resolve(__dirname, '../..');
18
+
19
+ const OBJECT_TYPE_ENUM = '.fintekkers.models.util.ObjectTypeProto';
20
+
21
+ // The 13 types LM-320 names: every *ResponseProto and the index-composition
22
+ // requests and responses.
23
+ const NAMED = [
24
+ 'fintekkers.requests.price.CreatePriceResponseProto',
25
+ 'fintekkers.requests.price.QueryPriceResponseProto',
26
+ 'fintekkers.requests.security.CreateSecurityResponseProto',
27
+ 'fintekkers.requests.security.QuerySecurityResponseProto',
28
+ 'fintekkers.requests.portfolio.CreatePortfolioResponseProto',
29
+ 'fintekkers.requests.portfolio.QueryPortfolioResponseProto',
30
+ 'fintekkers.requests.transaction.CreateTransactionResponseProto',
31
+ 'fintekkers.requests.transaction.QueryTransactionResponseProto',
32
+ 'fintekkers.requests.position.QueryPositionResponseProto',
33
+ 'fintekkers.requests.index_composition.CreateIndexCompositionRequestProto',
34
+ 'fintekkers.requests.index_composition.CreateIndexCompositionResponseProto',
35
+ 'fintekkers.requests.index_composition.GetIndexCompositionRequestProto',
36
+ 'fintekkers.requests.index_composition.GetIndexCompositionResponseProto',
37
+ ];
38
+
39
+ type MessageClass = new () => ObjectTyped;
40
+
41
+ /** Full name -> generated class of every message whose field 1 is ObjectTypeProto. */
42
+ function walk(): Map<string, MessageClass> {
43
+ if (!fs.existsSync(DESCRIPTOR_SET)) throw new Error(`descriptor set not found at ${DESCRIPTOR_SET}`);
44
+ const found = new Map<string, MessageClass>();
45
+ const set = FileDescriptorSet.deserializeBinary(new Uint8Array(fs.readFileSync(DESCRIPTOR_SET)));
46
+ const isTyped = (message: DescriptorProto) =>
47
+ message.getFieldList().some((f) => f.getNumber() === 1 && f.getTypeName() === OBJECT_TYPE_ENUM);
48
+ for (const file of set.getFileList()) {
49
+ const fileName = file.getName() as string;
50
+ // Loaded only for a typed message: google/protobuf/* has no module here.
51
+ const generated = () => require(path.join(GENERATED, fileName.replace(/\.proto$/, '_pb')));
52
+ const visit = (fullName: string, scope: () => Record<string, unknown>, message: DescriptorProto) => {
53
+ const messageClass = () => scope()[message.getName() as string] as MessageClass & Record<string, unknown>;
54
+ if (isTyped(message)) {
55
+ if (typeof messageClass() !== 'function') throw new Error(`${fullName}: no generated class in ${fileName}`);
56
+ found.set(fullName, messageClass());
57
+ }
58
+ for (const nested of message.getNestedTypeList()) {
59
+ visit(`${fullName}.${nested.getName()}`, messageClass, nested);
60
+ }
61
+ };
62
+ for (const message of file.getMessageTypeList()) {
63
+ visit(`${file.getPackage()}.${message.getName()}`, generated, message);
64
+ }
65
+ }
66
+ return found;
67
+ }
68
+
69
+ const WALKED = walk();
70
+
71
+ /** The walked names that `lookup` has no own type for. */
72
+ function missingTypes(walked: Iterable<string>, lookup: (fullName: string) => ObjectTypeProto | undefined): string[] {
73
+ return Array.from(walked).filter((name) => lookup(name) === undefined);
74
+ }
75
+
76
+ function lookup(fullName: string): ObjectTypeProto | undefined {
77
+ const messageClass = WALKED.get(fullName) as MessageClass;
78
+ return objectTypes.ownType(new messageClass());
79
+ }
80
+
81
+ /** The value the naming rule gives: message name without Proto, in SCREAMING_SNAKE, prefixed OBJECT_TYPE_. */
82
+ function expectedType(fullName: string): ObjectTypeProto {
83
+ const name = (fullName.split('.').pop() as string).replace(/Proto$/, '');
84
+ const enumName = 'OBJECT_TYPE_' + name.replace(/([a-z])([A-Z])/g, '$1_$2').toUpperCase();
85
+ const value = (ObjectTypeProto as unknown as Record<string, ObjectTypeProto>)[enumName];
86
+ if (value === undefined) throw new Error(`${fullName}: no ${enumName} in ObjectTypeProto`);
87
+ return value;
88
+ }
89
+
90
+ test('the walk finds every typed message, including the named ones', () => {
91
+ expect(WALKED.size).toBeGreaterThanOrEqual(49);
92
+ for (const name of NAMED) expect(WALKED.has(name)).toBe(true);
93
+ });
94
+
95
+ test('every typed message has an own type', () => {
96
+ expect(missingTypes(WALKED.keys(), lookup)).toEqual([]);
97
+ });
98
+
99
+ test('a missing entry is reported', () => {
100
+ const dropped = 'fintekkers.requests.price.QueryPriceResponseProto';
101
+ const without = (name: string) => (name === dropped ? undefined : lookup(name));
102
+ expect(missingTypes(WALKED.keys(), without)).toEqual([dropped]);
103
+ });
104
+
105
+ test.each(Array.from(WALKED.keys()).sort())('stamping %s sets its own type and version', (fullName) => {
106
+ const messageClass = WALKED.get(fullName) as MessageClass;
107
+ const stamped = objectTypes.stampOwn(new messageClass());
108
+ const expected = expectedType(fullName);
109
+ expect(objectTypes.readType(stamped)).toBe(expected);
110
+ expect(objectTypes.readVersion(stamped)).toEqual([0, 0, 1]);
111
+ // The name table agrees with the class table.
112
+ expect(objectTypes.OWN_TYPE_NAMES.get(fullName)).toBe(expected);
113
+ });
114
+
115
+ test('own types are distinct and known', () => {
116
+ const types = Array.from(WALKED.keys()).map(lookup);
117
+ expect(types).not.toContain(ObjectTypeProto.OBJECT_TYPE_UNKNOWN);
118
+ expect(new Set(types).size).toBe(types.length);
119
+ });
120
+
121
+ test('the LM-318 entries keep their values', () => {
122
+ const lm318: [string, ObjectTypeProto][] = [
123
+ ['fintekkers.models.portfolio.PortfolioProto', ObjectTypeProto.OBJECT_TYPE_PORTFOLIO],
124
+ ['fintekkers.models.position.PositionProto', ObjectTypeProto.OBJECT_TYPE_POSITION],
125
+ ['fintekkers.models.position.PositionFilterProto', ObjectTypeProto.OBJECT_TYPE_POSITION_FILTER],
126
+ ['fintekkers.models.price.PriceProto', ObjectTypeProto.OBJECT_TYPE_PRICE],
127
+ ['fintekkers.models.security.IdentifierProto', ObjectTypeProto.OBJECT_TYPE_IDENTIFIER],
128
+ ['fintekkers.models.security.SecurityProto', ObjectTypeProto.OBJECT_TYPE_SECURITY],
129
+ ['fintekkers.models.security.TenorProto', ObjectTypeProto.OBJECT_TYPE_TENOR],
130
+ ['fintekkers.models.strategy.StrategyProto', ObjectTypeProto.OBJECT_TYPE_STRATEGY],
131
+ ['fintekkers.models.strategy.StrategyAllocationProto', ObjectTypeProto.OBJECT_TYPE_STRATEGY_ALLOCATION],
132
+ ['fintekkers.models.transaction.TransactionProto', ObjectTypeProto.OBJECT_TYPE_TRANSACTION],
133
+ ['fintekkers.requests.portfolio.CreatePortfolioRequestProto', ObjectTypeProto.OBJECT_TYPE_CREATE_PORTFOLIO_REQUEST],
134
+ ['fintekkers.requests.portfolio.QueryPortfolioRequestProto', ObjectTypeProto.OBJECT_TYPE_QUERY_PORTFOLIO_REQUEST],
135
+ ['fintekkers.requests.price.CreatePriceRequestProto', ObjectTypeProto.OBJECT_TYPE_CREATE_PRICE_REQUEST],
136
+ ['fintekkers.requests.price.QueryPriceRequestProto', ObjectTypeProto.OBJECT_TYPE_QUERY_PRICE_REQUEST],
137
+ ['fintekkers.requests.security.CreateSecurityRequestProto', ObjectTypeProto.OBJECT_TYPE_CREATE_SECURITY_REQUEST],
138
+ ['fintekkers.requests.security.QuerySecurityRequestProto', ObjectTypeProto.OBJECT_TYPE_QUERY_SECURITY_REQUEST],
139
+ ['fintekkers.requests.transaction.CreateTransactionRequestProto', ObjectTypeProto.OBJECT_TYPE_CREATE_TRANSACTION_REQUEST],
140
+ ['fintekkers.requests.transaction.QueryTransactionRequestProto', ObjectTypeProto.OBJECT_TYPE_QUERY_TRANSACTION_REQUEST],
141
+ ];
142
+ for (const [name, objectType] of lm318) expect([name, lookup(name)]).toEqual([name, objectType]);
143
+ });
144
+
145
+ test('stampOwn on a message without object_type throws', () => {
146
+ expect(objectTypes.ownType(new UUIDProto())).toBeUndefined();
147
+ expect(objectTypes.ownType({})).toBeUndefined();
148
+ expect(() => objectTypes.stampOwn(new UUIDProto() as unknown as ObjectTyped)).toThrow('this message type has no own ObjectTypeProto');
149
+ });
@@ -1,62 +1,46 @@
1
1
  /**
2
- * Compact object type and version (LM-297), stage 1: write both forms, read the new one.
2
+ * Object type and version (LM-297, LM-318).
3
3
  *
4
- * Every message with `string object_class = 1` and `string version = 2` also
5
- * carries `ObjectTypeProto object_type = 1001` and `uint32 version_major /
6
- * version_minor / version_patch = 1002-1004`. Writers call `stamp`, which sets
7
- * the strings and the new fields. Readers call `readType` / `readVersion` (or
8
- * `upgrade`), which use the new fields and fall back to the deprecated strings,
9
- * logging one `console.warn` per distinct pair of strings. A fallback never
10
- * throws: an unknown object_class gives OBJECT_TYPE_UNKNOWN and a malformed
11
- * version gives 0.0.0. Empty strings are the proto3 default and fall back
12
- * silently.
13
- *
14
- * google-protobuf cannot read the `(legacy_object_class)` options at runtime,
15
- * so the string map comes from object-type-legacy.json, generated by
16
- * scripts/gen-object-type-legacy-map.py. See docs/adr/compact_object_type_and_version.md.
4
+ * Every message that names its type carries `ObjectTypeProto object_type = 1`
5
+ * and `VersionProto version = 2`. Writers call `stamp`, which sets the type and
6
+ * `SCHEMA_VERSION`; `stampOwn` passes the message's own type (LM-320). Readers
7
+ * call `readType` / `readVersion`. The old `object_class` / `version` strings
8
+ * were replaced in place by LM-318: bytes written before it are not readable.
9
+ * See docs/adr/compact_object_type_and_version.md.
17
10
  */
18
11
  import { ObjectTypeProto } from '../../fintekkers/models/util/object_type_pb';
19
- /** Any generated message that carries object_class / version and their compact form. */
12
+ import { VersionProto } from '../../fintekkers/models/util/version_pb';
13
+ /** Any generated message that carries object_type and version. */
20
14
  export interface ObjectTyped {
21
- getObjectClass(): string;
22
- setObjectClass(value: string): unknown;
23
- getVersion(): string;
24
- setVersion(value: string): unknown;
25
15
  getObjectType(): ObjectTypeProto;
26
16
  setObjectType(value: ObjectTypeProto): unknown;
27
- getVersionMajor(): number;
28
- setVersionMajor(value: number): unknown;
29
- getVersionMinor(): number;
30
- setVersionMinor(value: number): unknown;
31
- getVersionPatch(): number;
32
- setVersionPatch(value: number): unknown;
17
+ hasVersion(): boolean;
18
+ getVersion(): VersionProto | undefined;
19
+ setVersion(value?: VersionProto): unknown;
33
20
  }
34
21
  /** [major, minor, patch], each a uint32. */
35
22
  export type Version = [number, number, number];
36
- /** The ObjectTypeProto value an object_class string stands for, or OBJECT_TYPE_UNKNOWN. */
37
- export declare function fromLegacy(objectClass: string): ObjectTypeProto;
23
+ /** The schema version `stamp` writes. Not the library release. */
24
+ export declare const SCHEMA_VERSION: Version;
38
25
  /**
39
- * The ObjectTypeProto value named for a message type, or OBJECT_TYPE_UNKNOWN.
40
- * Uses the enum's naming rule: `QuerySecurityRequestProto` ->
41
- * OBJECT_TYPE_QUERY_SECURITY_REQUEST.
26
+ * Sets object_type and version (`SCHEMA_VERSION`) on `message`; returns it.
27
+ * `objectType` is the message's own ObjectTypeProto value.
42
28
  */
43
- export declare function ownType(messageName: string): ObjectTypeProto;
44
- /** '1.2.3' -> [1, 2, 3]; null unless exactly three decimal uint32 parts. */
45
- export declare function parseVersion(version: string): Version | null;
29
+ export declare function stamp<T extends ObjectTyped>(message: T, objectType: ObjectTypeProto): T;
30
+ /** Each message with object_type, by proto full name, to its own ObjectTypeProto value. */
31
+ export declare const OWN_TYPE_NAMES: ReadonlyMap<string, ObjectTypeProto>;
32
+ /** The message's own ObjectTypeProto value, or undefined when its class has none. */
33
+ export declare function ownType(message: object): ObjectTypeProto | undefined;
46
34
  /**
47
- * Sets object_class / version and their compact form on `message`; returns it.
48
- * `objectType` is the message's own ObjectTypeProto value. `version` must be
49
- * empty or three uint32 parts.
35
+ * `stamp` with the message's own ObjectTypeProto value (LM-320); returns it.
36
+ * Throws an Error when its class has no own value. Generated classes are
37
+ * anonymous at runtime, so the error names the class only when it has a name.
50
38
  */
51
- export declare function stamp<T extends ObjectTyped>(message: T, objectType: ObjectTypeProto, objectClass: string, version: string): T;
52
- /** The message's ObjectTypeProto value: object_type, else the object_class string. */
53
- export declare function readType(message: ObjectTyped): ObjectTypeProto;
54
- /** The message's [major, minor, patch]: the compact fields, else the version string. */
55
- export declare function readVersion(message: ObjectTyped): Version;
39
+ export declare function stampOwn<T extends ObjectTyped>(message: T): T;
56
40
  /**
57
- * Fills the compact fields from the strings where they are unset; returns `message`.
58
- * The strings are kept, so re-serialising writes both forms.
41
+ * The message's ObjectTypeProto value; OBJECT_TYPE_UNKNOWN when unset. A value
42
+ * added after this build is returned as its number.
59
43
  */
60
- export declare function upgrade<T extends ObjectTyped>(message: T): T;
61
- /** Forgets which strings have warned. Tests only. */
62
- export declare function resetWarningsForTests(): void;
44
+ export declare function readType(message: ObjectTyped): ObjectTypeProto;
45
+ /** The message's [major, minor, patch], or undefined when version is absent. */
46
+ export declare function readVersion(message: ObjectTyped): Version | undefined;