@transia/ripple-binary-codec 1.4.6-alpha.9 → 2.5.1-quantum.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (340) hide show
  1. package/dist/binary.d.ts +30 -16
  2. package/dist/binary.js +36 -16
  3. package/dist/binary.js.map +1 -1
  4. package/dist/enums/bytes.d.ts +1 -2
  5. package/dist/enums/bytes.js +1 -2
  6. package/dist/enums/bytes.js.map +1 -1
  7. package/dist/enums/constants.d.ts +1 -0
  8. package/dist/enums/constants.js +6 -5
  9. package/dist/enums/constants.js.map +1 -1
  10. package/dist/enums/definitions.json +1535 -919
  11. package/dist/enums/field.d.ts +1 -2
  12. package/dist/enums/field.js +1 -2
  13. package/dist/enums/field.js.map +1 -1
  14. package/dist/enums/index.d.ts +1 -2
  15. package/dist/enums/index.js +5 -27
  16. package/dist/enums/index.js.map +1 -1
  17. package/dist/enums/src/enums/definitions.json +1537 -921
  18. package/dist/enums/xrpl-definitions-base.d.ts +5 -3
  19. package/dist/enums/xrpl-definitions-base.js +26 -6
  20. package/dist/enums/xrpl-definitions-base.js.map +1 -1
  21. package/dist/enums/xrpl-definitions.d.ts +2 -1
  22. package/dist/enums/xrpl-definitions.js +2 -1
  23. package/dist/enums/xrpl-definitions.js.map +1 -1
  24. package/dist/hash-prefixes.d.ts +1 -2
  25. package/dist/hash-prefixes.js +8 -6
  26. package/dist/hash-prefixes.js.map +1 -1
  27. package/dist/hashes.d.ts +6 -7
  28. package/dist/hashes.js +6 -7
  29. package/dist/hashes.js.map +1 -1
  30. package/dist/index.d.ts +16 -11
  31. package/dist/index.js +53 -58
  32. package/dist/index.js.map +1 -1
  33. package/dist/ledger-hashes.d.ts +1 -2
  34. package/dist/ledger-hashes.js +11 -30
  35. package/dist/ledger-hashes.js.map +1 -1
  36. package/dist/quality.d.ts +3 -4
  37. package/dist/quality.js +10 -8
  38. package/dist/quality.js.map +1 -1
  39. package/dist/serdes/binary-parser.d.ts +2 -3
  40. package/dist/serdes/binary-parser.js +16 -32
  41. package/dist/serdes/binary-parser.js.map +1 -1
  42. package/dist/serdes/binary-serializer.d.ts +6 -7
  43. package/dist/serdes/binary-serializer.js +12 -35
  44. package/dist/serdes/binary-serializer.js.map +1 -1
  45. package/dist/shamap.d.ts +4 -5
  46. package/dist/shamap.js +5 -5
  47. package/dist/shamap.js.map +1 -1
  48. package/dist/src/binary.d.ts +106 -0
  49. package/dist/src/binary.js +154 -0
  50. package/dist/src/binary.js.map +1 -0
  51. package/dist/src/coretypes.d.ts +9 -0
  52. package/dist/src/coretypes.js +48 -0
  53. package/dist/src/coretypes.js.map +1 -0
  54. package/dist/src/enums/bytes.d.ts +25 -0
  55. package/dist/src/enums/bytes.js +63 -0
  56. package/dist/src/enums/bytes.js.map +1 -0
  57. package/dist/src/enums/constants.d.ts +5 -0
  58. package/dist/src/enums/constants.js +9 -0
  59. package/dist/src/enums/constants.js.map +1 -0
  60. package/dist/src/enums/definitions.json +3385 -0
  61. package/dist/src/enums/field.d.ts +28 -0
  62. package/dist/src/enums/field.js +58 -0
  63. package/dist/src/enums/field.js.map +1 -0
  64. package/dist/src/enums/index.d.ts +12 -0
  65. package/dist/src/enums/index.js +31 -0
  66. package/dist/src/enums/index.js.map +1 -0
  67. package/dist/src/enums/utils-renumber.d.ts +101 -0
  68. package/dist/src/enums/utils-renumber.js +127 -0
  69. package/dist/src/enums/utils-renumber.js.map +1 -0
  70. package/dist/src/enums/xrpl-definitions-base.d.ts +47 -0
  71. package/dist/src/enums/xrpl-definitions-base.js +83 -0
  72. package/dist/src/enums/xrpl-definitions-base.js.map +1 -0
  73. package/dist/src/enums/xrpl-definitions.d.ts +22 -0
  74. package/dist/src/enums/xrpl-definitions.js +30 -0
  75. package/dist/src/enums/xrpl-definitions.js.map +1 -0
  76. package/dist/src/hash-prefixes.d.ts +5 -0
  77. package/dist/src/hash-prefixes.js +43 -0
  78. package/dist/src/hash-prefixes.js.map +1 -0
  79. package/dist/src/hashes.d.ts +50 -0
  80. package/dist/src/hashes.js +76 -0
  81. package/dist/src/hashes.js.map +1 -0
  82. package/dist/src/index.d.ts +69 -0
  83. package/dist/src/index.js +134 -0
  84. package/dist/src/index.js.map +1 -0
  85. package/dist/src/ledger-hashes.d.ts +48 -0
  86. package/dist/src/ledger-hashes.js +141 -0
  87. package/dist/src/ledger-hashes.js.map +1 -0
  88. package/dist/src/quality.d.ts +21 -0
  89. package/dist/src/quality.js +42 -0
  90. package/dist/src/quality.js.map +1 -0
  91. package/dist/src/serdes/binary-parser.d.ts +100 -0
  92. package/dist/src/serdes/binary-parser.js +194 -0
  93. package/dist/src/serdes/binary-parser.js.map +1 -0
  94. package/dist/src/serdes/binary-serializer.d.ts +81 -0
  95. package/dist/src/serdes/binary-serializer.js +149 -0
  96. package/dist/src/serdes/binary-serializer.js.map +1 -0
  97. package/dist/src/shamap.d.ts +102 -0
  98. package/dist/src/shamap.js +172 -0
  99. package/dist/src/shamap.js.map +1 -0
  100. package/dist/src/types/account-id.d.ts +35 -0
  101. package/dist/src/types/account-id.js +69 -0
  102. package/dist/src/types/account-id.js.map +1 -0
  103. package/dist/src/types/amount.d.ts +91 -0
  104. package/dist/src/types/amount.js +289 -0
  105. package/dist/src/types/amount.js.map +1 -0
  106. package/dist/src/types/blob.d.ts +24 -0
  107. package/dist/src/types/blob.js +43 -0
  108. package/dist/src/types/blob.js.map +1 -0
  109. package/dist/src/types/currency.d.ts +28 -0
  110. package/dist/src/types/currency.js +127 -0
  111. package/dist/src/types/currency.js.map +1 -0
  112. package/dist/src/types/hash-128.d.ts +16 -0
  113. package/dist/src/types/hash-128.js +32 -0
  114. package/dist/src/types/hash-128.js.map +1 -0
  115. package/dist/src/types/hash-160.d.ts +10 -0
  116. package/dist/src/types/hash-160.js +19 -0
  117. package/dist/src/types/hash-160.js.map +1 -0
  118. package/dist/src/types/hash-192.d.ts +10 -0
  119. package/dist/src/types/hash-192.js +19 -0
  120. package/dist/src/types/hash-192.js.map +1 -0
  121. package/dist/src/types/hash-256.d.ts +10 -0
  122. package/dist/src/types/hash-256.js +16 -0
  123. package/dist/src/types/hash-256.js.map +1 -0
  124. package/dist/src/types/hash.d.ts +40 -0
  125. package/dist/src/types/hash.js +76 -0
  126. package/dist/src/types/hash.js.map +1 -0
  127. package/dist/src/types/index.d.ts +19 -0
  128. package/dist/src/types/index.js +66 -0
  129. package/dist/src/types/index.js.map +1 -0
  130. package/dist/src/types/issue.d.ts +48 -0
  131. package/dist/src/types/issue.js +104 -0
  132. package/dist/src/types/issue.js.map +1 -0
  133. package/dist/src/types/path-set.d.ts +36 -0
  134. package/dist/src/types/path-set.js +233 -0
  135. package/dist/src/types/path-set.js.map +1 -0
  136. package/dist/src/types/serialized-type.d.ts +70 -0
  137. package/dist/src/types/serialized-type.js +105 -0
  138. package/dist/src/types/serialized-type.js.map +1 -0
  139. package/dist/src/types/st-array.d.ts +31 -0
  140. package/dist/src/types/st-array.js +86 -0
  141. package/dist/src/types/st-array.js.map +1 -0
  142. package/dist/src/types/st-number.d.ts +54 -0
  143. package/dist/src/types/st-number.js +208 -0
  144. package/dist/src/types/st-number.js.map +1 -0
  145. package/dist/src/types/st-object.d.ts +32 -0
  146. package/dist/src/types/st-object.js +173 -0
  147. package/dist/src/types/st-object.js.map +1 -0
  148. package/dist/src/types/uint-16.d.ts +24 -0
  149. package/dist/src/types/uint-16.js +45 -0
  150. package/dist/src/types/uint-16.js.map +1 -0
  151. package/dist/src/types/uint-32.d.ts +24 -0
  152. package/dist/src/types/uint-32.js +50 -0
  153. package/dist/src/types/uint-32.js.map +1 -0
  154. package/dist/src/types/uint-64.d.ts +38 -0
  155. package/dist/src/types/uint-64.js +107 -0
  156. package/dist/src/types/uint-64.js.map +1 -0
  157. package/dist/src/types/uint-8.d.ts +24 -0
  158. package/dist/src/types/uint-8.js +46 -0
  159. package/dist/src/types/uint-8.js.map +1 -0
  160. package/dist/src/types/uint.d.ts +29 -0
  161. package/dist/src/types/uint.js +47 -0
  162. package/dist/src/types/uint.js.map +1 -0
  163. package/dist/src/types/vector-256.d.ts +30 -0
  164. package/dist/src/types/vector-256.js +73 -0
  165. package/dist/src/types/vector-256.js.map +1 -0
  166. package/dist/src/types/xchain-bridge.d.ts +44 -0
  167. package/dist/src/types/xchain-bridge.js +102 -0
  168. package/dist/src/types/xchain-bridge.js.map +1 -0
  169. package/dist/src/utils.d.ts +79 -0
  170. package/dist/src/utils.js +181 -0
  171. package/dist/src/utils.js.map +1 -0
  172. package/dist/tsconfig.tsbuildinfo +1 -0
  173. package/dist/types/account-id.d.ts +1 -2
  174. package/dist/types/account-id.js +4 -6
  175. package/dist/types/account-id.js.map +1 -1
  176. package/dist/types/amount.d.ts +31 -8
  177. package/dist/types/amount.js +125 -43
  178. package/dist/types/amount.js.map +1 -1
  179. package/dist/types/blob.d.ts +1 -2
  180. package/dist/types/blob.js +5 -2
  181. package/dist/types/blob.js.map +1 -1
  182. package/dist/types/currency.d.ts +1 -2
  183. package/dist/types/currency.js +13 -13
  184. package/dist/types/currency.js.map +1 -1
  185. package/dist/types/hash-128.d.ts +1 -2
  186. package/dist/types/hash-128.js +3 -3
  187. package/dist/types/hash-128.js.map +1 -1
  188. package/dist/types/hash-160.d.ts +1 -2
  189. package/dist/types/hash-160.js +1 -2
  190. package/dist/types/hash-160.js.map +1 -1
  191. package/dist/types/hash-192.d.ts +10 -0
  192. package/dist/types/hash-192.js +19 -0
  193. package/dist/types/hash-192.js.map +1 -0
  194. package/dist/types/hash-256.d.ts +1 -2
  195. package/dist/types/hash-256.js +1 -2
  196. package/dist/types/hash-256.js.map +1 -1
  197. package/dist/types/hash.d.ts +2 -3
  198. package/dist/types/hash.js +8 -4
  199. package/dist/types/hash.js.map +1 -1
  200. package/dist/types/index.d.ts +2 -1
  201. package/dist/types/index.js +11 -2
  202. package/dist/types/index.js.map +1 -1
  203. package/dist/types/issue.d.ts +48 -0
  204. package/dist/types/issue.js +104 -0
  205. package/dist/types/issue.js.map +1 -0
  206. package/dist/types/path-set.js +12 -12
  207. package/dist/types/path-set.js.map +1 -1
  208. package/dist/types/serialized-type.d.ts +23 -16
  209. package/dist/types/serialized-type.js +15 -7
  210. package/dist/types/serialized-type.js.map +1 -1
  211. package/dist/types/st-array.d.ts +5 -2
  212. package/dist/types/st-array.js +17 -11
  213. package/dist/types/st-array.js.map +1 -1
  214. package/dist/types/st-number.d.ts +54 -0
  215. package/dist/types/st-number.js +208 -0
  216. package/dist/types/st-number.js.map +1 -0
  217. package/dist/types/st-object.js +32 -8
  218. package/dist/types/st-object.js.map +1 -1
  219. package/dist/types/uint-16.d.ts +1 -2
  220. package/dist/types/uint-16.js +6 -5
  221. package/dist/types/uint-16.js.map +1 -1
  222. package/dist/types/uint-32.d.ts +1 -2
  223. package/dist/types/uint-32.js +7 -6
  224. package/dist/types/uint-32.js.map +1 -1
  225. package/dist/types/uint-64.d.ts +6 -7
  226. package/dist/types/uint-64.js +44 -24
  227. package/dist/types/uint-64.js.map +1 -1
  228. package/dist/types/uint-8.d.ts +1 -2
  229. package/dist/types/uint-8.js +7 -5
  230. package/dist/types/uint-8.js.map +1 -1
  231. package/dist/types/uint.d.ts +5 -6
  232. package/dist/types/uint.js +5 -0
  233. package/dist/types/uint.js.map +1 -1
  234. package/dist/types/vector-256.d.ts +1 -2
  235. package/dist/types/vector-256.js +2 -4
  236. package/dist/types/vector-256.js.map +1 -1
  237. package/dist/types/xchain-bridge.d.ts +44 -0
  238. package/dist/types/xchain-bridge.js +102 -0
  239. package/dist/types/xchain-bridge.js.map +1 -0
  240. package/dist/utils.d.ts +79 -0
  241. package/dist/utils.js +181 -0
  242. package/dist/utils.js.map +1 -0
  243. package/package.json +21 -17
  244. package/src/README.md +5 -0
  245. package/src/binary.ts +235 -0
  246. package/src/coretypes.ts +31 -0
  247. package/src/enums/README.md +144 -0
  248. package/src/enums/bytes.ts +74 -0
  249. package/src/enums/constants.ts +5 -0
  250. package/src/enums/definitions.json +3390 -0
  251. package/src/enums/field.ts +84 -0
  252. package/src/enums/index.ts +34 -0
  253. package/src/enums/utils-renumber.ts +134 -0
  254. package/src/enums/xrpl-definitions-base.ts +150 -0
  255. package/src/enums/xrpl-definitions.ts +33 -0
  256. package/src/hash-prefixes.ts +42 -0
  257. package/src/hashes.ts +75 -0
  258. package/src/index.ts +166 -0
  259. package/src/ledger-hashes.ts +191 -0
  260. package/src/quality.ts +38 -0
  261. package/src/serdes/binary-parser.ts +228 -0
  262. package/src/serdes/binary-serializer.ts +166 -0
  263. package/src/shamap.ts +186 -0
  264. package/src/types/account-id.ts +86 -0
  265. package/src/types/amount.ts +362 -0
  266. package/src/types/blob.ts +46 -0
  267. package/src/types/currency.ts +140 -0
  268. package/src/types/hash-128.ts +33 -0
  269. package/src/types/hash-160.ts +19 -0
  270. package/src/types/hash-192.ts +19 -0
  271. package/src/types/hash-256.ts +15 -0
  272. package/src/types/hash.ts +86 -0
  273. package/src/types/index.ts +68 -0
  274. package/src/types/issue.ts +136 -0
  275. package/src/types/path-set.ts +290 -0
  276. package/src/types/serialized-type.ts +122 -0
  277. package/src/types/st-array.ts +113 -0
  278. package/src/types/st-number.ts +233 -0
  279. package/src/types/st-object.ts +215 -0
  280. package/src/types/uint-16.ts +53 -0
  281. package/src/types/uint-32.ts +59 -0
  282. package/src/types/uint-64.ts +135 -0
  283. package/src/types/uint-8.ts +52 -0
  284. package/src/types/uint.ts +60 -0
  285. package/src/types/vector-256.ts +79 -0
  286. package/src/types/xchain-bridge.ts +128 -0
  287. package/src/utils.ts +220 -0
  288. package/test/amount.test.js +0 -43
  289. package/test/binary-json.test.js +0 -45
  290. package/test/binary-parser.test.js +0 -396
  291. package/test/binary-serializer.test.js +0 -319
  292. package/test/definitions.test.js +0 -100
  293. package/test/fixtures/account-tx-transactions.db +0 -0
  294. package/test/fixtures/codec-fixtures.json +0 -4466
  295. package/test/fixtures/data-driven-tests.json +0 -2919
  296. package/test/fixtures/delivermin-tx-binary.json +0 -1
  297. package/test/fixtures/delivermin-tx.json +0 -98
  298. package/test/fixtures/deposit-preauth-tx-binary.json +0 -1
  299. package/test/fixtures/deposit-preauth-tx-meta-binary.json +0 -1
  300. package/test/fixtures/deposit-preauth-tx.json +0 -58
  301. package/test/fixtures/escrow-cancel-binary.json +0 -1
  302. package/test/fixtures/escrow-cancel-tx.json +0 -6
  303. package/test/fixtures/escrow-create-binary.json +0 -1
  304. package/test/fixtures/escrow-create-tx.json +0 -10
  305. package/test/fixtures/escrow-finish-binary.json +0 -1
  306. package/test/fixtures/escrow-finish-meta-binary.json +0 -1
  307. package/test/fixtures/escrow-finish-tx.json +0 -95
  308. package/test/fixtures/ledger-full-38129.json +0 -1
  309. package/test/fixtures/ledger-full-40000.json +0 -1
  310. package/test/fixtures/negative-unl.json +0 -12
  311. package/test/fixtures/nf-token.json +0 -547
  312. package/test/fixtures/payment-channel-claim-binary.json +0 -1
  313. package/test/fixtures/payment-channel-claim-tx.json +0 -8
  314. package/test/fixtures/payment-channel-create-binary.json +0 -1
  315. package/test/fixtures/payment-channel-create-tx.json +0 -11
  316. package/test/fixtures/payment-channel-fund-binary.json +0 -1
  317. package/test/fixtures/payment-channel-fund-tx.json +0 -7
  318. package/test/fixtures/remit-binary.json +0 -1
  319. package/test/fixtures/remit-tx.json +0 -39
  320. package/test/fixtures/signerlistset-tx-binary.json +0 -1
  321. package/test/fixtures/signerlistset-tx-meta-binary.json +0 -1
  322. package/test/fixtures/signerlistset-tx.json +0 -94
  323. package/test/fixtures/ticket-create-binary.json +0 -1
  324. package/test/fixtures/ticket-create-tx.json +0 -7
  325. package/test/fixtures/unl-report-binary.json +0 -1
  326. package/test/fixtures/unl-report-meta-binary.json +0 -1
  327. package/test/fixtures/unl-report.json +0 -89
  328. package/test/fixtures/x-codec-fixtures.json +0 -188
  329. package/test/hash.test.js +0 -135
  330. package/test/ledger.test.js +0 -29
  331. package/test/lower-case-hex.test.js +0 -46
  332. package/test/pseudo-transaction.test.js +0 -38
  333. package/test/quality.test.js +0 -15
  334. package/test/shamap.test.js +0 -89
  335. package/test/signing-data-encoding.test.js +0 -213
  336. package/test/tx-encode-decode.test.js +0 -119
  337. package/test/types.test.js +0 -34
  338. package/test/uint.test.js +0 -148
  339. package/test/utils.js +0 -30
  340. package/test/x-address.test.js +0 -181
@@ -0,0 +1,86 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.STArray = void 0;
4
+ const enums_1 = require("../enums");
5
+ const serialized_type_1 = require("./serialized-type");
6
+ const st_object_1 = require("./st-object");
7
+ const binary_parser_1 = require("../serdes/binary-parser");
8
+ const utils_1 = require("@transia/isomorphic/utils");
9
+ const ARRAY_END_MARKER = Uint8Array.from([0xf1]);
10
+ const ARRAY_END_MARKER_NAME = 'ArrayEndMarker';
11
+ const OBJECT_END_MARKER = Uint8Array.from([0xe1]);
12
+ /**
13
+ * TypeGuard for Array<JsonObject>
14
+ */
15
+ function isObjects(args) {
16
+ return (Array.isArray(args) &&
17
+ args.every((arg) => typeof arg === 'object' &&
18
+ Object.keys(arg).length === 1 &&
19
+ typeof Object.values(arg)[0] === 'object'));
20
+ }
21
+ /**
22
+ * Class for serializing and deserializing Arrays of Objects
23
+ */
24
+ class STArray extends serialized_type_1.SerializedType {
25
+ /**
26
+ * Construct an STArray from a BinaryParser
27
+ *
28
+ * @param parser BinaryParser to parse an STArray from
29
+ * @returns An STArray Object
30
+ */
31
+ static fromParser(parser) {
32
+ const bytes = [];
33
+ while (!parser.end()) {
34
+ const field = parser.readField();
35
+ if (field.name === ARRAY_END_MARKER_NAME) {
36
+ break;
37
+ }
38
+ bytes.push(field.header, parser.readFieldValue(field).toBytes(), OBJECT_END_MARKER);
39
+ }
40
+ bytes.push(ARRAY_END_MARKER);
41
+ return new STArray((0, utils_1.concat)(bytes));
42
+ }
43
+ /**
44
+ * Construct an STArray from an Array of JSON Objects
45
+ *
46
+ * @param value STArray or Array of Objects to parse into an STArray
47
+ * @param definitions optional, types and values to use to encode/decode a transaction
48
+ * @returns An STArray object
49
+ */
50
+ static from(value, definitions = enums_1.DEFAULT_DEFINITIONS) {
51
+ if (value instanceof STArray) {
52
+ return value;
53
+ }
54
+ if (isObjects(value)) {
55
+ const bytes = [];
56
+ value.forEach((obj) => {
57
+ bytes.push(st_object_1.STObject.from(obj, undefined, definitions).toBytes());
58
+ });
59
+ bytes.push(ARRAY_END_MARKER);
60
+ return new STArray((0, utils_1.concat)(bytes));
61
+ }
62
+ throw new Error('Cannot construct STArray from value given');
63
+ }
64
+ /**
65
+ * Return the JSON representation of this.bytes
66
+ *
67
+ * @param definitions optional, types and values to use to encode/decode a transaction
68
+ * @returns An Array of JSON objects
69
+ */
70
+ toJSON(definitions = enums_1.DEFAULT_DEFINITIONS) {
71
+ const result = [];
72
+ const arrayParser = new binary_parser_1.BinaryParser(this.toString(), definitions);
73
+ while (!arrayParser.end()) {
74
+ const field = arrayParser.readField();
75
+ if (field.name === ARRAY_END_MARKER_NAME) {
76
+ break;
77
+ }
78
+ const outer = {};
79
+ outer[field.name] = st_object_1.STObject.fromParser(arrayParser).toJSON(definitions);
80
+ result.push(outer);
81
+ }
82
+ return result;
83
+ }
84
+ }
85
+ exports.STArray = STArray;
86
+ //# sourceMappingURL=st-array.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"st-array.js","sourceRoot":"","sources":["../../../src/types/st-array.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,54 @@
1
+ import { BinaryParser } from '../serdes/binary-parser';
2
+ import { SerializedType } from './serialized-type';
3
+ /**
4
+ * STNumber: Encodes XRPL's "Number" type.
5
+ *
6
+ * - Always encoded as 12 bytes: 8-byte signed mantissa, 4-byte signed exponent, both big-endian.
7
+ * - Can only be constructed from a valid number string or another STNumber instance.
8
+ *
9
+ * Usage:
10
+ * STNumber.from("1.2345e5")
11
+ * STNumber.from("-123")
12
+ * STNumber.fromParser(parser)
13
+ */
14
+ export declare class STNumber extends SerializedType {
15
+ /** 12 zero bytes, represents canonical zero. */
16
+ static defaultBytes: Uint8Array;
17
+ /**
18
+ * Construct a STNumber from 12 bytes (8 for mantissa, 4 for exponent).
19
+ * @param bytes - 12-byte Uint8Array
20
+ * @throws Error if input is not a Uint8Array of length 12.
21
+ */
22
+ constructor(bytes?: Uint8Array);
23
+ /**
24
+ * Construct from a number string (or another STNumber).
25
+ *
26
+ * @param value - A string, or STNumber instance.
27
+ * @returns STNumber instance.
28
+ * @throws Error if not a string or STNumber.
29
+ */
30
+ static from(value: unknown): STNumber;
31
+ /**
32
+ * Construct from a number string (integer, decimal, or scientific notation).
33
+ * Handles normalization to XRPL Number constraints.
34
+ *
35
+ * @param val - The number as a string (e.g. '1.23', '-123e5').
36
+ * @returns STNumber instance
37
+ * @throws Error if val is not a valid number string.
38
+ */
39
+ static fromValue(val: string): STNumber;
40
+ /**
41
+ * Read a STNumber from a BinaryParser stream (12 bytes).
42
+ * @param parser - BinaryParser positioned at the start of a number
43
+ * @returns STNumber instance
44
+ */
45
+ static fromParser(parser: BinaryParser): STNumber;
46
+ /**
47
+ * Convert this STNumber to a normalized string representation.
48
+ * The output is decimal or scientific notation, depending on exponent range.
49
+ * Follows XRPL convention: zero is "0", other values are normalized to a canonical string.
50
+ *
51
+ * @returns String representation of the value
52
+ */
53
+ toJSON(): string;
54
+ }
@@ -0,0 +1,208 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.STNumber = void 0;
4
+ const serialized_type_1 = require("./serialized-type");
5
+ const utils_1 = require("../utils");
6
+ /**
7
+ * Constants for mantissa and exponent normalization per XRPL Number spec.
8
+ * These define allowed magnitude for mantissa and exponent after normalization.
9
+ */
10
+ const MIN_MANTISSA = BigInt('1000000000000000');
11
+ const MAX_MANTISSA = BigInt('9999999999999999');
12
+ const MIN_EXPONENT = -32768;
13
+ const MAX_EXPONENT = 32768;
14
+ const DEFAULT_VALUE_EXPONENT = -2147483648;
15
+ /**
16
+ * Extract mantissa, exponent, and sign from a number string.
17
+ *
18
+ * @param val - The string representing the number (may be integer, decimal, or scientific notation).
19
+ * @returns Object containing mantissa (BigInt), exponent (number), and isNegative (boolean).
20
+ * @throws Error if the string cannot be parsed as a valid number.
21
+ *
22
+ * Examples:
23
+ * '123' -> { mantissa: 123n, exponent: 0, isNegative: false }
24
+ * '-00123.45' -> { mantissa: -12345n, exponent: -2, isNegative: true }
25
+ * '+7.1e2' -> { mantissa: 71n, exponent: -1 + 2 = 1, isNegative: false }
26
+ */
27
+ function extractNumberPartsFromString(val) {
28
+ /**
29
+ * Regex for parsing decimal/float/scientific number strings with optional sign, integer, decimal, and exponent parts.
30
+ *
31
+ * Pattern: /^([-+]?)([0-9]+)(?:\.([0-9]+))?(?:[eE]([+-]?[0-9]+))?$/
32
+ *
33
+ * Breakdown:
34
+ * 1. ([-+]?) - Optional '+' or '-' sign at the start.
35
+ * 2. ([0-9]+) - Integer part: one or more digits (leading zeros allowed).
36
+ * 3. (?:\.([0-9]+))? - Optional decimal point followed by one or more digits.
37
+ * 4. (?:[eE]([+-]?[0-9]+))? - Optional exponent, starting with 'e' or 'E', optional sign, and digits.
38
+ *
39
+ * Notes:
40
+ * - Leading zeros are accepted and normalized by code after parsing.
41
+ * - Empty decimal ('123.') and missing integer ('.456') are NOT matched—must be fully specified.
42
+ */
43
+ const regex = /^([-+]?)([0-9]+)(?:\.([0-9]+))?(?:[eE]([+-]?[0-9]+))?$/;
44
+ const match = regex.exec(val);
45
+ if (!match)
46
+ throw new Error(`Unable to parse number from string: ${val}`);
47
+ const [, sign, intPart, fracPart, expPart] = match;
48
+ // Remove leading zeros (unless the entire intPart is zeros)
49
+ const cleanIntPart = intPart.replace(/^0+(?=\d)/, '') || '0';
50
+ let mantissaStr = cleanIntPart;
51
+ let exponent = 0;
52
+ if (fracPart) {
53
+ mantissaStr += fracPart;
54
+ exponent -= fracPart.length;
55
+ }
56
+ if (expPart)
57
+ exponent += parseInt(expPart, 10);
58
+ let mantissa = BigInt(mantissaStr);
59
+ if (sign === '-')
60
+ mantissa = -mantissa;
61
+ const isNegative = mantissa < BigInt(0);
62
+ return { mantissa, exponent, isNegative };
63
+ }
64
+ /**
65
+ * Normalize the mantissa and exponent to XRPL constraints.
66
+ *
67
+ * Ensures that after normalization, the mantissa is between MIN_MANTISSA and MAX_MANTISSA (unless zero).
68
+ * Adjusts the exponent as needed by shifting the mantissa left/right (multiplying/dividing by 10).
69
+ *
70
+ * @param mantissa - The unnormalized mantissa (BigInt).
71
+ * @param exponent - The unnormalized exponent (number).
72
+ * @returns An object with normalized mantissa and exponent.
73
+ * @throws Error if the number cannot be normalized within allowed exponent range.
74
+ */
75
+ function normalize(mantissa, exponent) {
76
+ let m = mantissa < BigInt(0) ? -mantissa : mantissa;
77
+ const isNegative = mantissa < BigInt(0);
78
+ while (m !== BigInt(0) && m < MIN_MANTISSA && exponent > MIN_EXPONENT) {
79
+ exponent -= 1;
80
+ m *= BigInt(10);
81
+ }
82
+ while (m > MAX_MANTISSA) {
83
+ if (exponent >= MAX_EXPONENT)
84
+ throw new Error('Mantissa and exponent are too large');
85
+ exponent += 1;
86
+ m /= BigInt(10);
87
+ }
88
+ if (isNegative)
89
+ m = -m;
90
+ return { mantissa: m, exponent };
91
+ }
92
+ /**
93
+ * STNumber: Encodes XRPL's "Number" type.
94
+ *
95
+ * - Always encoded as 12 bytes: 8-byte signed mantissa, 4-byte signed exponent, both big-endian.
96
+ * - Can only be constructed from a valid number string or another STNumber instance.
97
+ *
98
+ * Usage:
99
+ * STNumber.from("1.2345e5")
100
+ * STNumber.from("-123")
101
+ * STNumber.fromParser(parser)
102
+ */
103
+ class STNumber extends serialized_type_1.SerializedType {
104
+ /**
105
+ * Construct a STNumber from 12 bytes (8 for mantissa, 4 for exponent).
106
+ * @param bytes - 12-byte Uint8Array
107
+ * @throws Error if input is not a Uint8Array of length 12.
108
+ */
109
+ constructor(bytes) {
110
+ const used = bytes !== null && bytes !== void 0 ? bytes : STNumber.defaultBytes;
111
+ if (!(used instanceof Uint8Array) || used.length !== 12) {
112
+ throw new Error(`STNumber must be constructed from a 12-byte Uint8Array, got ${used === null || used === void 0 ? void 0 : used.length}`);
113
+ }
114
+ super(used);
115
+ }
116
+ /**
117
+ * Construct from a number string (or another STNumber).
118
+ *
119
+ * @param value - A string, or STNumber instance.
120
+ * @returns STNumber instance.
121
+ * @throws Error if not a string or STNumber.
122
+ */
123
+ static from(value) {
124
+ if (value instanceof STNumber) {
125
+ return value;
126
+ }
127
+ if (typeof value === 'string') {
128
+ return STNumber.fromValue(value);
129
+ }
130
+ throw new Error('STNumber.from: Only string or STNumber instance is supported');
131
+ }
132
+ /**
133
+ * Construct from a number string (integer, decimal, or scientific notation).
134
+ * Handles normalization to XRPL Number constraints.
135
+ *
136
+ * @param val - The number as a string (e.g. '1.23', '-123e5').
137
+ * @returns STNumber instance
138
+ * @throws Error if val is not a valid number string.
139
+ */
140
+ static fromValue(val) {
141
+ const { mantissa, exponent, isNegative } = extractNumberPartsFromString(val);
142
+ let normalizedMantissa;
143
+ let normalizedExponent;
144
+ if (mantissa === BigInt(0) && exponent === 0 && !isNegative) {
145
+ normalizedMantissa = BigInt(0);
146
+ normalizedExponent = DEFAULT_VALUE_EXPONENT;
147
+ }
148
+ else {
149
+ ;
150
+ ({ mantissa: normalizedMantissa, exponent: normalizedExponent } =
151
+ normalize(mantissa, exponent));
152
+ }
153
+ const bytes = new Uint8Array(12);
154
+ (0, utils_1.writeInt64BE)(bytes, normalizedMantissa, 0);
155
+ (0, utils_1.writeInt32BE)(bytes, normalizedExponent, 8);
156
+ return new STNumber(bytes);
157
+ }
158
+ /**
159
+ * Read a STNumber from a BinaryParser stream (12 bytes).
160
+ * @param parser - BinaryParser positioned at the start of a number
161
+ * @returns STNumber instance
162
+ */
163
+ static fromParser(parser) {
164
+ return new STNumber(parser.read(12));
165
+ }
166
+ /**
167
+ * Convert this STNumber to a normalized string representation.
168
+ * The output is decimal or scientific notation, depending on exponent range.
169
+ * Follows XRPL convention: zero is "0", other values are normalized to a canonical string.
170
+ *
171
+ * @returns String representation of the value
172
+ */
173
+ // eslint-disable-next-line complexity -- required
174
+ toJSON() {
175
+ const b = this.bytes;
176
+ if (!b || b.length !== 12)
177
+ throw new Error('STNumber internal bytes not set or wrong length');
178
+ // Signed 64-bit mantissa
179
+ const mantissa = (0, utils_1.readInt64BE)(b, 0);
180
+ // Signed 32-bit exponent
181
+ const exponent = (0, utils_1.readInt32BE)(b, 8);
182
+ // Special zero: XRPL encodes canonical zero as mantissa=0, exponent=DEFAULT_VALUE_EXPONENT.
183
+ if (mantissa === BigInt(0) && exponent === DEFAULT_VALUE_EXPONENT) {
184
+ return '0';
185
+ }
186
+ if (exponent === 0)
187
+ return mantissa.toString();
188
+ // Use scientific notation for small/large exponents, decimal otherwise
189
+ if (exponent < -25 || exponent > -5) {
190
+ return `${mantissa}e${exponent}`;
191
+ }
192
+ // Decimal rendering for -25 <= exp <= -5
193
+ const isNegative = mantissa < BigInt(0);
194
+ const mantissaAbs = mantissa < BigInt(0) ? -mantissa : mantissa;
195
+ const padPrefix = 27;
196
+ const padSuffix = 23;
197
+ const mantissaStr = mantissaAbs.toString();
198
+ const rawValue = '0'.repeat(padPrefix) + mantissaStr + '0'.repeat(padSuffix);
199
+ const OFFSET = exponent + 43;
200
+ const integerPart = rawValue.slice(0, OFFSET).replace(/^0+/, '') || '0';
201
+ const fractionPart = rawValue.slice(OFFSET).replace(/0+$/, '');
202
+ return `${isNegative ? '-' : ''}${integerPart}${fractionPart ? '.' + fractionPart : ''}`;
203
+ }
204
+ }
205
+ exports.STNumber = STNumber;
206
+ /** 12 zero bytes, represents canonical zero. */
207
+ STNumber.defaultBytes = new Uint8Array(12);
208
+ //# sourceMappingURL=st-number.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"st-number.js","sourceRoot":"","sources":["../../../src/types/st-number.ts"],"names":[],"mappings":";;;AACA,uDAAkD;AAClD,oCAA+E;AAE/E;;;GAGG;AACH,MAAM,YAAY,GAAG,MAAM,CAAC,kBAAkB,CAAC,CAAA;AAC/C,MAAM,YAAY,GAAG,MAAM,CAAC,kBAAkB,CAAC,CAAA;AAC/C,MAAM,YAAY,GAAG,CAAC,KAAK,CAAA;AAC3B,MAAM,YAAY,GAAG,KAAK,CAAA;AAC1B,MAAM,sBAAsB,GAAG,CAAC,UAAU,CAAA;AAE1C;;;;;;;;;;;GAWG;AACH,SAAS,4BAA4B,CAAC,GAAW;IAK/C;;;;;;;;;;;;;;OAcG;IACH,MAAM,KAAK,GAAG,wDAAwD,CAAA;IACtE,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAC7B,IAAI,CAAC,KAAK;QAAE,MAAM,IAAI,KAAK,CAAC,uCAAuC,GAAG,EAAE,CAAC,CAAA;IAEzE,MAAM,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,GAAG,KAAK,CAAA;IAClD,4DAA4D;IAC5D,MAAM,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,IAAI,GAAG,CAAA;IAE5D,IAAI,WAAW,GAAG,YAAY,CAAA;IAC9B,IAAI,QAAQ,GAAG,CAAC,CAAA;IAEhB,IAAI,QAAQ,EAAE;QACZ,WAAW,IAAI,QAAQ,CAAA;QACvB,QAAQ,IAAI,QAAQ,CAAC,MAAM,CAAA;KAC5B;IACD,IAAI,OAAO;QAAE,QAAQ,IAAI,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC,CAAA;IAE9C,IAAI,QAAQ,GAAG,MAAM,CAAC,WAAW,CAAC,CAAA;IAClC,IAAI,IAAI,KAAK,GAAG;QAAE,QAAQ,GAAG,CAAC,QAAQ,CAAA;IACtC,MAAM,UAAU,GAAG,QAAQ,GAAG,MAAM,CAAC,CAAC,CAAC,CAAA;IAEvC,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAA;AAC3C,CAAC;AAED;;;;;;;;;;GAUG;AACH,SAAS,SAAS,CAChB,QAAgB,EAChB,QAAgB;IAEhB,IAAI,CAAC,GAAG,QAAQ,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAA;IACnD,MAAM,UAAU,GAAG,QAAQ,GAAG,MAAM,CAAC,CAAC,CAAC,CAAA;IAEvC,OAAO,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,YAAY,IAAI,QAAQ,GAAG,YAAY,EAAE;QACrE,QAAQ,IAAI,CAAC,CAAA;QACb,CAAC,IAAI,MAAM,CAAC,EAAE,CAAC,CAAA;KAChB;IACD,OAAO,CAAC,GAAG,YAAY,EAAE;QACvB,IAAI,QAAQ,IAAI,YAAY;YAC1B,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAA;QACxD,QAAQ,IAAI,CAAC,CAAA;QACb,CAAC,IAAI,MAAM,CAAC,EAAE,CAAC,CAAA;KAChB;IACD,IAAI,UAAU;QAAE,CAAC,GAAG,CAAC,CAAC,CAAA;IACtB,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAA;AAClC,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAa,QAAS,SAAQ,gCAAc;IAI1C;;;;OAIG;IACH,YAAY,KAAkB;QAC5B,MAAM,IAAI,GAAG,KAAK,aAAL,KAAK,cAAL,KAAK,GAAI,QAAQ,CAAC,YAAY,CAAA;QAC3C,IAAI,CAAC,CAAC,IAAI,YAAY,UAAU,CAAC,IAAI,IAAI,CAAC,MAAM,KAAK,EAAE,EAAE;YACvD,MAAM,IAAI,KAAK,CACb,+DAA+D,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,MAAM,EAAE,CAC9E,CAAA;SACF;QACD,KAAK,CAAC,IAAI,CAAC,CAAA;IACb,CAAC;IAED;;;;;;OAMG;IACH,MAAM,CAAC,IAAI,CAAC,KAAc;QACxB,IAAI,KAAK,YAAY,QAAQ,EAAE;YAC7B,OAAO,KAAK,CAAA;SACb;QACD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;YAC7B,OAAO,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA;SACjC;QACD,MAAM,IAAI,KAAK,CACb,8DAA8D,CAC/D,CAAA;IACH,CAAC;IAED;;;;;;;OAOG;IACH,MAAM,CAAC,SAAS,CAAC,GAAW;QAC1B,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,4BAA4B,CAAC,GAAG,CAAC,CAAA;QAC5E,IAAI,kBAA0B,CAAA;QAC9B,IAAI,kBAA0B,CAAA;QAE9B,IAAI,QAAQ,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,QAAQ,KAAK,CAAC,IAAI,CAAC,UAAU,EAAE;YAC3D,kBAAkB,GAAG,MAAM,CAAC,CAAC,CAAC,CAAA;YAC9B,kBAAkB,GAAG,sBAAsB,CAAA;SAC5C;aAAM;YACL,CAAC;YAAA,CAAC,EAAE,QAAQ,EAAE,kBAAkB,EAAE,QAAQ,EAAE,kBAAkB,EAAE;gBAC9D,SAAS,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAA;SACjC;QAED,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,EAAE,CAAC,CAAA;QAChC,IAAA,oBAAY,EAAC,KAAK,EAAE,kBAAkB,EAAE,CAAC,CAAC,CAAA;QAC1C,IAAA,oBAAY,EAAC,KAAK,EAAE,kBAAkB,EAAE,CAAC,CAAC,CAAA;QAC1C,OAAO,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAA;IAC5B,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,UAAU,CAAC,MAAoB;QACpC,OAAO,IAAI,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAA;IACtC,CAAC;IAED;;;;;;OAMG;IACH,kDAAkD;IAClD,MAAM;QACJ,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAA;QACpB,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,EAAE;YACvB,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAA;QAEpE,yBAAyB;QACzB,MAAM,QAAQ,GAAG,IAAA,mBAAW,EAAC,CAAC,EAAE,CAAC,CAAC,CAAA;QAClC,yBAAyB;QACzB,MAAM,QAAQ,GAAG,IAAA,mBAAW,EAAC,CAAC,EAAE,CAAC,CAAC,CAAA;QAElC,4FAA4F;QAC5F,IAAI,QAAQ,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,QAAQ,KAAK,sBAAsB,EAAE;YACjE,OAAO,GAAG,CAAA;SACX;QACD,IAAI,QAAQ,KAAK,CAAC;YAAE,OAAO,QAAQ,CAAC,QAAQ,EAAE,CAAA;QAE9C,uEAAuE;QACvE,IAAI,QAAQ,GAAG,CAAC,EAAE,IAAI,QAAQ,GAAG,CAAC,CAAC,EAAE;YACnC,OAAO,GAAG,QAAQ,IAAI,QAAQ,EAAE,CAAA;SACjC;QAED,yCAAyC;QACzC,MAAM,UAAU,GAAG,QAAQ,GAAG,MAAM,CAAC,CAAC,CAAC,CAAA;QACvC,MAAM,WAAW,GAAG,QAAQ,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAA;QAE/D,MAAM,SAAS,GAAG,EAAE,CAAA;QACpB,MAAM,SAAS,GAAG,EAAE,CAAA;QACpB,MAAM,WAAW,GAAG,WAAW,CAAC,QAAQ,EAAE,CAAA;QAC1C,MAAM,QAAQ,GAAG,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,WAAW,GAAG,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAA;QAC5E,MAAM,MAAM,GAAG,QAAQ,GAAG,EAAE,CAAA;QAC5B,MAAM,WAAW,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,GAAG,CAAA;QACvE,MAAM,YAAY,GAAG,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;QAE9D,OAAO,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,WAAW,GAC3C,YAAY,CAAC,CAAC,CAAC,GAAG,GAAG,YAAY,CAAC,CAAC,CAAC,EACtC,EAAE,CAAA;IACJ,CAAC;;AAtHH,4BAuHC;AAtHC,gDAAgD;AACzC,qBAAY,GAAG,IAAI,UAAU,CAAC,EAAE,CAAC,CAAA"}
@@ -0,0 +1,32 @@
1
+ import { XrplDefinitionsBase } from '../enums';
2
+ import { SerializedType, JsonObject } from './serialized-type';
3
+ import { BinaryParser } from '../serdes/binary-parser';
4
+ /**
5
+ * Class for Serializing/Deserializing objects
6
+ */
7
+ declare class STObject extends SerializedType {
8
+ /**
9
+ * Construct a STObject from a BinaryParser
10
+ *
11
+ * @param parser BinaryParser to read STObject from
12
+ * @returns A STObject object
13
+ */
14
+ static fromParser(parser: BinaryParser): STObject;
15
+ /**
16
+ * Construct a STObject from a JSON object
17
+ *
18
+ * @param value An object to include
19
+ * @param filter optional, denote which field to include in serialized object
20
+ * @param definitions optional, types and values to use to encode/decode a transaction
21
+ * @returns a STObject object
22
+ */
23
+ static from<T extends STObject | JsonObject>(value: T, filter?: (...any: any[]) => boolean, definitions?: XrplDefinitionsBase): STObject;
24
+ /**
25
+ * Get the JSON interpretation of this.bytes
26
+ * @param definitions rippled definitions used to parse the values of transaction types and such.
27
+ * Can be customized for sidechains and amendments.
28
+ * @returns a JSON object
29
+ */
30
+ toJSON(definitions?: XrplDefinitionsBase): JsonObject;
31
+ }
32
+ export { STObject };
@@ -0,0 +1,173 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.STObject = void 0;
4
+ const enums_1 = require("../enums");
5
+ const serialized_type_1 = require("./serialized-type");
6
+ const ripple_address_codec_1 = require("@transia/ripple-address-codec");
7
+ const binary_parser_1 = require("../serdes/binary-parser");
8
+ const binary_serializer_1 = require("../serdes/binary-serializer");
9
+ const st_array_1 = require("./st-array");
10
+ const uint_64_1 = require("./uint-64");
11
+ const OBJECT_END_MARKER_BYTE = Uint8Array.from([0xe1]);
12
+ const OBJECT_END_MARKER = 'ObjectEndMarker';
13
+ const ST_OBJECT = 'STObject';
14
+ const DESTINATION = 'Destination';
15
+ const ACCOUNT = 'Account';
16
+ const SOURCE_TAG = 'SourceTag';
17
+ const DEST_TAG = 'DestinationTag';
18
+ /**
19
+ * Break down an X-Address into an account and a tag
20
+ *
21
+ * @param field Name of field
22
+ * @param xAddress X-Address corresponding to the field
23
+ */
24
+ function handleXAddress(field, xAddress) {
25
+ const decoded = (0, ripple_address_codec_1.xAddressToClassicAddress)(xAddress);
26
+ let tagName;
27
+ if (field === DESTINATION)
28
+ tagName = DEST_TAG;
29
+ else if (field === ACCOUNT)
30
+ tagName = SOURCE_TAG;
31
+ else if (decoded.tag !== false)
32
+ throw new Error(`${field} cannot have an associated tag`);
33
+ return decoded.tag !== false
34
+ ? { [field]: decoded.classicAddress, [tagName]: decoded.tag }
35
+ : { [field]: decoded.classicAddress };
36
+ }
37
+ /**
38
+ * Validate that two objects don't both have the same tag fields
39
+ *
40
+ * @param obj1 First object to check for tags
41
+ * @param obj2 Second object to check for tags
42
+ * @throws When both objects have SourceTag or DestinationTag
43
+ */
44
+ function checkForDuplicateTags(obj1, obj2) {
45
+ if (!(obj1[SOURCE_TAG] === undefined || obj2[SOURCE_TAG] === undefined))
46
+ throw new Error('Cannot have Account X-Address and SourceTag');
47
+ if (!(obj1[DEST_TAG] === undefined || obj2[DEST_TAG] === undefined))
48
+ throw new Error('Cannot have Destination X-Address and DestinationTag');
49
+ }
50
+ /**
51
+ * Class for Serializing/Deserializing objects
52
+ */
53
+ class STObject extends serialized_type_1.SerializedType {
54
+ /**
55
+ * Construct a STObject from a BinaryParser
56
+ *
57
+ * @param parser BinaryParser to read STObject from
58
+ * @returns A STObject object
59
+ */
60
+ static fromParser(parser) {
61
+ const list = new binary_serializer_1.BytesList();
62
+ const bytes = new binary_serializer_1.BinarySerializer(list);
63
+ while (!parser.end()) {
64
+ const field = parser.readField();
65
+ if (field.name === OBJECT_END_MARKER) {
66
+ break;
67
+ }
68
+ const associatedValue = parser.readFieldValue(field);
69
+ bytes.writeFieldAndValue(field, associatedValue);
70
+ if (field.type.name === ST_OBJECT) {
71
+ bytes.put(OBJECT_END_MARKER_BYTE);
72
+ }
73
+ }
74
+ return new STObject(list.toBytes());
75
+ }
76
+ /**
77
+ * Construct a STObject from a JSON object
78
+ *
79
+ * @param value An object to include
80
+ * @param filter optional, denote which field to include in serialized object
81
+ * @param definitions optional, types and values to use to encode/decode a transaction
82
+ * @returns a STObject object
83
+ */
84
+ static from(value, filter, definitions = enums_1.DEFAULT_DEFINITIONS) {
85
+ if (value instanceof STObject) {
86
+ return value;
87
+ }
88
+ const list = new binary_serializer_1.BytesList();
89
+ const bytes = new binary_serializer_1.BinarySerializer(list);
90
+ let isUnlModify = false;
91
+ const xAddressDecoded = Object.entries(value).reduce((acc, [key, val]) => {
92
+ let handled = undefined;
93
+ if (val && (0, ripple_address_codec_1.isValidXAddress)(val.toString())) {
94
+ handled = handleXAddress(key, val.toString());
95
+ checkForDuplicateTags(handled, value);
96
+ }
97
+ return Object.assign(acc, handled !== null && handled !== void 0 ? handled : { [key]: val });
98
+ }, {});
99
+ function isValidFieldInstance(f) {
100
+ return (f !== undefined &&
101
+ xAddressDecoded[f.name] !== undefined &&
102
+ f.isSerialized);
103
+ }
104
+ let sorted = Object.keys(xAddressDecoded)
105
+ .map((f) => {
106
+ if (!(f in definitions.field)) {
107
+ if (f[0] === f[0].toLowerCase())
108
+ return undefined;
109
+ throw new Error(`Field ${f} is not defined in the definitions`);
110
+ }
111
+ return definitions.field[f];
112
+ })
113
+ .filter(isValidFieldInstance)
114
+ .sort((a, b) => {
115
+ return a.ordinal - b.ordinal;
116
+ });
117
+ if (filter !== undefined) {
118
+ sorted = sorted.filter(filter);
119
+ }
120
+ sorted.forEach((field) => {
121
+ var _a;
122
+ const associatedValue = field.type.name === ST_OBJECT
123
+ ? this.from(xAddressDecoded[field.name], undefined, definitions)
124
+ : field.type.name === 'STArray'
125
+ ? st_array_1.STArray.from(xAddressDecoded[field.name], definitions)
126
+ : field.type.name === 'UInt64'
127
+ ? uint_64_1.UInt64.from(xAddressDecoded[field.name], field.name)
128
+ : ((_a = field.associatedType) === null || _a === void 0 ? void 0 : _a.from)
129
+ ? field.associatedType.from(xAddressDecoded[field.name])
130
+ : (() => {
131
+ throw new Error(`Type ${field.type.name} for field ${field.name} is missing associatedType.from`);
132
+ })();
133
+ if (associatedValue == undefined) {
134
+ throw new TypeError(`Unable to interpret "${field.name}: ${xAddressDecoded[field.name]}".`);
135
+ }
136
+ if (associatedValue.name === 'UNLModify') {
137
+ // triggered when the TransactionType field has a value of 'UNLModify'
138
+ isUnlModify = true;
139
+ }
140
+ // true when in the UNLModify pseudotransaction (after the transaction type has been processed) and working with the
141
+ // Account field
142
+ // The Account field must not be a part of the UNLModify pseudotransaction encoding, due to a bug in rippled
143
+ const isUnlModifyWorkaround = field.name == 'Account' && isUnlModify;
144
+ bytes.writeFieldAndValue(field, associatedValue, isUnlModifyWorkaround);
145
+ if (field.type.name === ST_OBJECT) {
146
+ bytes.put(OBJECT_END_MARKER_BYTE);
147
+ }
148
+ });
149
+ return new STObject(list.toBytes());
150
+ }
151
+ /**
152
+ * Get the JSON interpretation of this.bytes
153
+ * @param definitions rippled definitions used to parse the values of transaction types and such.
154
+ * Can be customized for sidechains and amendments.
155
+ * @returns a JSON object
156
+ */
157
+ toJSON(definitions) {
158
+ const objectParser = new binary_parser_1.BinaryParser(this.toString(), definitions);
159
+ const accumulator = {};
160
+ while (!objectParser.end()) {
161
+ const field = objectParser.readField();
162
+ if (field.name === OBJECT_END_MARKER) {
163
+ break;
164
+ }
165
+ accumulator[field.name] = objectParser
166
+ .readFieldValue(field)
167
+ .toJSON(definitions, field.name);
168
+ }
169
+ return accumulator;
170
+ }
171
+ }
172
+ exports.STObject = STObject;
173
+ //# sourceMappingURL=st-object.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"st-object.js","sourceRoot":"","sources":["../../../src/types/st-object.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import { UInt } from './uint';
2
+ import { BinaryParser } from '../serdes/binary-parser';
3
+ /**
4
+ * Derived UInt class for serializing/deserializing 16 bit UInt
5
+ */
6
+ declare class UInt16 extends UInt {
7
+ protected static readonly width: number;
8
+ static readonly defaultUInt16: UInt16;
9
+ constructor(bytes: Uint8Array);
10
+ static fromParser(parser: BinaryParser): UInt;
11
+ /**
12
+ * Construct a UInt16 object from a number
13
+ *
14
+ * @param val UInt16 object or number
15
+ */
16
+ static from<T extends UInt16 | number>(val: T): UInt16;
17
+ /**
18
+ * get the value of a UInt16 object
19
+ *
20
+ * @returns the number represented by this.bytes
21
+ */
22
+ valueOf(): number;
23
+ }
24
+ export { UInt16 };
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.UInt16 = void 0;
4
+ const uint_1 = require("./uint");
5
+ const utils_1 = require("../utils");
6
+ /**
7
+ * Derived UInt class for serializing/deserializing 16 bit UInt
8
+ */
9
+ class UInt16 extends uint_1.UInt {
10
+ constructor(bytes) {
11
+ super(bytes !== null && bytes !== void 0 ? bytes : UInt16.defaultUInt16.bytes);
12
+ }
13
+ static fromParser(parser) {
14
+ return new UInt16(parser.read(UInt16.width));
15
+ }
16
+ /**
17
+ * Construct a UInt16 object from a number
18
+ *
19
+ * @param val UInt16 object or number
20
+ */
21
+ static from(val) {
22
+ if (val instanceof UInt16) {
23
+ return val;
24
+ }
25
+ if (typeof val === 'number') {
26
+ UInt16.checkUintRange(val, 0, 0xffff);
27
+ const buf = new Uint8Array(UInt16.width);
28
+ (0, utils_1.writeUInt16BE)(buf, val, 0);
29
+ return new UInt16(buf);
30
+ }
31
+ throw new Error('Can not construct UInt16 with given value');
32
+ }
33
+ /**
34
+ * get the value of a UInt16 object
35
+ *
36
+ * @returns the number represented by this.bytes
37
+ */
38
+ valueOf() {
39
+ return parseInt((0, utils_1.readUInt16BE)(this.bytes, 0));
40
+ }
41
+ }
42
+ exports.UInt16 = UInt16;
43
+ UInt16.width = 16 / 8; // 2
44
+ UInt16.defaultUInt16 = new UInt16(new Uint8Array(UInt16.width));
45
+ //# sourceMappingURL=uint-16.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uint-16.js","sourceRoot":"","sources":["../../../src/types/uint-16.ts"],"names":[],"mappings":";;;AAAA,iCAA6B;AAE7B,oCAAsD;AAEtD;;GAEG;AACH,MAAM,MAAO,SAAQ,WAAI;IAMvB,YAAY,KAAiB;QAC3B,KAAK,CAAC,KAAK,aAAL,KAAK,cAAL,KAAK,GAAI,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,CAAA;IAC5C,CAAC;IAED,MAAM,CAAC,UAAU,CAAC,MAAoB;QACpC,OAAO,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAA;IAC9C,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,IAAI,CAA4B,GAAM;QAC3C,IAAI,GAAG,YAAY,MAAM,EAAE;YACzB,OAAO,GAAG,CAAA;SACX;QAED,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;YAC3B,MAAM,CAAC,cAAc,CAAC,GAAG,EAAE,CAAC,EAAE,MAAM,CAAC,CAAA;YAErC,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;YACxC,IAAA,qBAAa,EAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,CAAA;YAC1B,OAAO,IAAI,MAAM,CAAC,GAAG,CAAC,CAAA;SACvB;QAED,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAA;IAC9D,CAAC;IAED;;;;OAIG;IACH,OAAO;QACL,OAAO,QAAQ,CAAC,IAAA,oBAAY,EAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAA;IAC9C,CAAC;;AAGM,wBAAM;AA5Ca,YAAK,GAAW,EAAE,GAAG,CAAC,CAAA,CAAC,IAAI;AACrC,oBAAa,GAAW,IAAI,MAAM,CAChD,IAAI,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,CAC7B,CAAA"}