ripple-binary-codec 1.5.0-beta.2 → 1.5.0-beta.4

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 (120) hide show
  1. package/dist/binary.d.ts +23 -7
  2. package/dist/binary.js +54 -33
  3. package/dist/binary.js.map +1 -1
  4. package/dist/coretypes.d.ts +2 -2
  5. package/dist/coretypes.js +33 -9
  6. package/dist/coretypes.js.map +1 -1
  7. package/dist/enums/bytes.d.ts +26 -0
  8. package/dist/enums/bytes.js +64 -0
  9. package/dist/enums/bytes.js.map +1 -0
  10. package/dist/enums/constants.d.ts +4 -0
  11. package/dist/enums/constants.js +8 -0
  12. package/dist/enums/constants.js.map +1 -0
  13. package/dist/enums/definitions.json +108 -138
  14. package/dist/enums/field.d.ts +29 -0
  15. package/dist/enums/field.js +59 -0
  16. package/dist/enums/field.js.map +1 -0
  17. package/dist/enums/index.d.ts +12 -48
  18. package/dist/enums/index.js +42 -124
  19. package/dist/enums/index.js.map +1 -1
  20. package/dist/enums/src/enums/definitions.json +108 -138
  21. package/dist/enums/utils-renumber.js +14 -14
  22. package/dist/enums/utils-renumber.js.map +1 -1
  23. package/dist/enums/xrpl-definitions-base.d.ts +44 -0
  24. package/dist/enums/xrpl-definitions-base.js +59 -0
  25. package/dist/enums/xrpl-definitions-base.js.map +1 -0
  26. package/dist/enums/xrpl-definitions.d.ts +21 -0
  27. package/dist/enums/xrpl-definitions.js +29 -0
  28. package/dist/enums/xrpl-definitions.js.map +1 -0
  29. package/dist/hash-prefixes.js +3 -3
  30. package/dist/hash-prefixes.js.map +1 -1
  31. package/dist/hashes.js +21 -43
  32. package/dist/hashes.js.map +1 -1
  33. package/dist/index.d.ts +14 -16
  34. package/dist/index.js +62 -24
  35. package/dist/index.js.map +1 -1
  36. package/dist/ledger-hashes.d.ts +5 -2
  37. package/dist/ledger-hashes.js +54 -29
  38. package/dist/ledger-hashes.js.map +1 -1
  39. package/dist/quality.js +18 -21
  40. package/dist/quality.js.map +1 -1
  41. package/dist/serdes/binary-parser.d.ts +6 -3
  42. package/dist/serdes/binary-parser.js +82 -57
  43. package/dist/serdes/binary-parser.js.map +1 -1
  44. package/dist/serdes/binary-serializer.d.ts +1 -1
  45. package/dist/serdes/binary-serializer.js +59 -40
  46. package/dist/serdes/binary-serializer.js.map +1 -1
  47. package/dist/shamap.js +72 -98
  48. package/dist/shamap.js.map +1 -1
  49. package/dist/types/account-id.js +18 -35
  50. package/dist/types/account-id.js.map +1 -1
  51. package/dist/types/amount.js +71 -88
  52. package/dist/types/amount.js.map +1 -1
  53. package/dist/types/blob.js +10 -27
  54. package/dist/types/blob.js.map +1 -1
  55. package/dist/types/currency.js +26 -44
  56. package/dist/types/currency.js.map +1 -1
  57. package/dist/types/hash-128.d.ts +6 -0
  58. package/dist/types/hash-128.js +23 -25
  59. package/dist/types/hash-128.js.map +1 -1
  60. package/dist/types/hash-160.js +8 -25
  61. package/dist/types/hash-160.js.map +1 -1
  62. package/dist/types/hash-256.js +8 -25
  63. package/dist/types/hash-256.js.map +1 -1
  64. package/dist/types/hash.js +20 -38
  65. package/dist/types/hash.js.map +1 -1
  66. package/dist/types/index.d.ts +3 -24
  67. package/dist/types/index.js +39 -28
  68. package/dist/types/index.js.map +1 -1
  69. package/dist/types/issue.js +24 -41
  70. package/dist/types/issue.js.map +1 -1
  71. package/dist/types/path-set.js +57 -87
  72. package/dist/types/path-set.js.map +1 -1
  73. package/dist/types/serialized-type.d.ts +3 -3
  74. package/dist/types/serialized-type.js +35 -56
  75. package/dist/types/serialized-type.js.map +1 -1
  76. package/dist/types/st-array.js +26 -46
  77. package/dist/types/st-array.js.map +1 -1
  78. package/dist/types/st-object.d.ts +6 -3
  79. package/dist/types/st-object.js +52 -74
  80. package/dist/types/st-object.js.map +1 -1
  81. package/dist/types/uint-16.js +15 -32
  82. package/dist/types/uint-16.js.map +1 -1
  83. package/dist/types/uint-32.js +16 -33
  84. package/dist/types/uint-32.js.map +1 -1
  85. package/dist/types/uint-64.d.ts +1 -1
  86. package/dist/types/uint-64.js +30 -47
  87. package/dist/types/uint-64.js.map +1 -1
  88. package/dist/types/uint-8.js +15 -32
  89. package/dist/types/uint-8.js.map +1 -1
  90. package/dist/types/uint.d.ts +1 -1
  91. package/dist/types/uint.js +10 -27
  92. package/dist/types/uint.js.map +1 -1
  93. package/dist/types/vector-256.js +23 -40
  94. package/dist/types/vector-256.js.map +1 -1
  95. package/dist/types/xchain-bridge.js +44 -61
  96. package/dist/types/xchain-bridge.js.map +1 -1
  97. package/package.json +7 -7
  98. package/test/amount.test.js +1 -1
  99. package/test/binary-json.test.js +1 -1
  100. package/test/binary-parser.test.js +4 -4
  101. package/test/binary-serializer.test.js +3 -3
  102. package/test/definitions.test.js +100 -0
  103. package/test/fixtures/codec-fixtures.json +136 -196
  104. package/test/hash.test.js +28 -2
  105. package/test/ledger.test.js +1 -1
  106. package/test/lower-case-hex.test.js +1 -1
  107. package/test/pseudo-transaction.test.js +1 -1
  108. package/test/quality.test.js +1 -1
  109. package/test/shamap.test.js +3 -3
  110. package/test/signing-data-encoding.test.js +128 -3
  111. package/test/tx-encode-decode.test.js +1 -1
  112. package/test/types.test.js +2 -2
  113. package/test/uint.test.js +2 -2
  114. package/test/x-address.test.js +1 -1
  115. package/dist/types/issued-currency.d.ts +0 -46
  116. package/dist/types/issued-currency.js +0 -108
  117. package/dist/types/issued-currency.js.map +0 -1
  118. package/dist/types/xchain-attestation-batch.d.ts +0 -44
  119. package/dist/types/xchain-attestation-batch.js +0 -107
  120. package/dist/types/xchain-attestation-batch.js.map +0 -1
package/dist/binary.d.ts CHANGED
@@ -2,29 +2,37 @@ import { BinaryParser } from './serdes/binary-parser';
2
2
  import { AccountID } from './types/account-id';
3
3
  import { BinarySerializer, BytesList } from './serdes/binary-serializer';
4
4
  import { sha512Half, transactionID } from './hashes';
5
+ import { type XrplDefinitionsBase } from './enums';
5
6
  import { JsonObject } from './types/serialized-type';
6
7
  import { Buffer } from 'buffer/';
8
+ import { AmountObject } from './types/amount';
7
9
  /**
8
10
  * Construct a BinaryParser
9
11
  *
10
12
  * @param bytes hex-string to construct BinaryParser from
13
+ * @param definitions rippled definitions used to parse the values of transaction types and such.
14
+ * Can be customized for sidechains and amendments.
11
15
  * @returns A BinaryParser
12
16
  */
13
- declare const makeParser: (bytes: string) => BinaryParser;
17
+ declare const makeParser: (bytes: string, definitions?: XrplDefinitionsBase) => BinaryParser;
14
18
  /**
15
19
  * Parse BinaryParser into JSON
16
20
  *
17
21
  * @param parser BinaryParser object
22
+ * @param definitions rippled definitions used to parse the values of transaction types and such.
23
+ * Can be customized for sidechains and amendments.
18
24
  * @returns JSON for the bytes in the BinaryParser
19
25
  */
20
- declare const readJSON: (parser: BinaryParser) => JsonObject;
26
+ declare const readJSON: (parser: BinaryParser, definitions?: XrplDefinitionsBase) => JsonObject;
21
27
  /**
22
28
  * Parse a hex-string into its JSON interpretation
23
29
  *
24
30
  * @param bytes hex-string to parse into JSON
31
+ * @param definitions rippled definitions used to parse the values of transaction types and such.
32
+ * Can be customized for sidechains and amendments.
25
33
  * @returns JSON
26
34
  */
27
- declare const binaryToJSON: (bytes: string) => JsonObject;
35
+ declare const binaryToJSON: (bytes: string, definitions?: XrplDefinitionsBase) => JsonObject;
28
36
  /**
29
37
  * Interface for passing parameters to SerializeObject
30
38
  *
@@ -34,12 +42,13 @@ interface OptionObject {
34
42
  prefix?: Buffer;
35
43
  suffix?: Buffer;
36
44
  signingFieldsOnly?: boolean;
45
+ definitions?: XrplDefinitionsBase;
37
46
  }
38
47
  /**
39
48
  * Function to serialize JSON object representing a transaction
40
49
  *
41
50
  * @param object JSON object to serialize
42
- * @param opts options for serializing, including optional prefix, suffix, and signingFieldOnly
51
+ * @param opts options for serializing, including optional prefix, suffix, signingFieldOnly, and definitions
43
52
  * @returns A Buffer containing the serialized object
44
53
  */
45
54
  declare function serializeObject(object: JsonObject, opts?: OptionObject): Buffer;
@@ -48,20 +57,24 @@ declare function serializeObject(object: JsonObject, opts?: OptionObject): Buffe
48
57
  *
49
58
  * @param transaction Transaction to serialize
50
59
  * @param prefix Prefix bytes to put before the serialized object
60
+ * @param opts.definitions Custom rippled types to use instead of the default. Used for sidechains and amendments.
51
61
  * @returns A Buffer with the serialized object
52
62
  */
53
- declare function signingData(transaction: JsonObject, prefix?: Buffer): Buffer;
63
+ declare function signingData(transaction: JsonObject, prefix?: Buffer, opts?: {
64
+ definitions?: XrplDefinitionsBase;
65
+ }): Buffer;
54
66
  /**
55
67
  * Interface describing fields required for a Claim
56
68
  */
57
69
  interface ClaimObject extends JsonObject {
58
70
  channel: string;
59
- amount: string | number;
71
+ amount: AmountObject;
60
72
  }
61
73
  /**
62
74
  * Serialize a signingClaim
63
75
  *
64
76
  * @param claim A claim object to serialize
77
+ * @param opts.definitions Custom rippled types to use instead of the default. Used for sidechains and amendments.
65
78
  * @returns the serialized object with appropriate prefix
66
79
  */
67
80
  declare function signingClaimData(claim: ClaimObject): Buffer;
@@ -70,7 +83,10 @@ declare function signingClaimData(claim: ClaimObject): Buffer;
70
83
  *
71
84
  * @param transaction transaction to serialize
72
85
  * @param signingAccount Account to sign the transaction with
86
+ * @param opts.definitions Custom rippled types to use instead of the default. Used for sidechains and amendments.
73
87
  * @returns serialized transaction with appropriate prefix and suffix
74
88
  */
75
- declare function multiSigningData(transaction: JsonObject, signingAccount: string | AccountID): Buffer;
89
+ declare function multiSigningData(transaction: JsonObject, signingAccount: string | AccountID, opts?: {
90
+ definitions: XrplDefinitionsBase;
91
+ }): Buffer;
76
92
  export { BinaryParser, BinarySerializer, BytesList, ClaimObject, makeParser, serializeObject, readJSON, multiSigningData, signingData, signingClaimData, binaryToJSON, sha512Half, transactionID, };
package/dist/binary.js CHANGED
@@ -2,61 +2,67 @@
2
2
  /* eslint-disable func-style */
3
3
  Object.defineProperty(exports, "__esModule", { value: true });
4
4
  exports.transactionID = exports.sha512Half = exports.binaryToJSON = exports.signingClaimData = exports.signingData = exports.multiSigningData = exports.readJSON = exports.serializeObject = exports.makeParser = exports.BytesList = exports.BinarySerializer = exports.BinaryParser = void 0;
5
- var types_1 = require("./types");
6
- var binary_parser_1 = require("./serdes/binary-parser");
5
+ const types_1 = require("./types");
6
+ const binary_parser_1 = require("./serdes/binary-parser");
7
7
  Object.defineProperty(exports, "BinaryParser", { enumerable: true, get: function () { return binary_parser_1.BinaryParser; } });
8
- var hash_prefixes_1 = require("./hash-prefixes");
9
- var binary_serializer_1 = require("./serdes/binary-serializer");
8
+ const hash_prefixes_1 = require("./hash-prefixes");
9
+ const binary_serializer_1 = require("./serdes/binary-serializer");
10
10
  Object.defineProperty(exports, "BinarySerializer", { enumerable: true, get: function () { return binary_serializer_1.BinarySerializer; } });
11
11
  Object.defineProperty(exports, "BytesList", { enumerable: true, get: function () { return binary_serializer_1.BytesList; } });
12
- var hashes_1 = require("./hashes");
12
+ const hashes_1 = require("./hashes");
13
13
  Object.defineProperty(exports, "sha512Half", { enumerable: true, get: function () { return hashes_1.sha512Half; } });
14
14
  Object.defineProperty(exports, "transactionID", { enumerable: true, get: function () { return hashes_1.transactionID; } });
15
- var bigInt = require("big-integer");
15
+ const enums_1 = require("./enums");
16
+ const bigInt = require("big-integer");
16
17
  /**
17
18
  * Construct a BinaryParser
18
19
  *
19
20
  * @param bytes hex-string to construct BinaryParser from
21
+ * @param definitions rippled definitions used to parse the values of transaction types and such.
22
+ * Can be customized for sidechains and amendments.
20
23
  * @returns A BinaryParser
21
24
  */
22
- var makeParser = function (bytes) { return new binary_parser_1.BinaryParser(bytes); };
25
+ const makeParser = (bytes, definitions) => new binary_parser_1.BinaryParser(bytes, definitions);
23
26
  exports.makeParser = makeParser;
24
27
  /**
25
28
  * Parse BinaryParser into JSON
26
29
  *
27
30
  * @param parser BinaryParser object
31
+ * @param definitions rippled definitions used to parse the values of transaction types and such.
32
+ * Can be customized for sidechains and amendments.
28
33
  * @returns JSON for the bytes in the BinaryParser
29
34
  */
30
- var readJSON = function (parser) {
31
- return parser.readType(types_1.coreTypes.STObject).toJSON();
32
- };
35
+ const readJSON = (parser, definitions = enums_1.DEFAULT_DEFINITIONS) => parser.readType(types_1.coreTypes.STObject).toJSON(definitions);
33
36
  exports.readJSON = readJSON;
34
37
  /**
35
38
  * Parse a hex-string into its JSON interpretation
36
39
  *
37
40
  * @param bytes hex-string to parse into JSON
41
+ * @param definitions rippled definitions used to parse the values of transaction types and such.
42
+ * Can be customized for sidechains and amendments.
38
43
  * @returns JSON
39
44
  */
40
- var binaryToJSON = function (bytes) { return readJSON(makeParser(bytes)); };
45
+ const binaryToJSON = (bytes, definitions) => readJSON(makeParser(bytes, definitions), definitions);
41
46
  exports.binaryToJSON = binaryToJSON;
42
47
  /**
43
48
  * Function to serialize JSON object representing a transaction
44
49
  *
45
50
  * @param object JSON object to serialize
46
- * @param opts options for serializing, including optional prefix, suffix, and signingFieldOnly
51
+ * @param opts options for serializing, including optional prefix, suffix, signingFieldOnly, and definitions
47
52
  * @returns A Buffer containing the serialized object
48
53
  */
49
- function serializeObject(object, opts) {
50
- if (opts === void 0) { opts = {}; }
51
- var prefix = opts.prefix, suffix = opts.suffix, _a = opts.signingFieldsOnly, signingFieldsOnly = _a === void 0 ? false : _a;
52
- var bytesList = new binary_serializer_1.BytesList();
54
+ function serializeObject(object, opts = {}) {
55
+ const { prefix, suffix, signingFieldsOnly = false, definitions } = opts;
56
+ const bytesList = new binary_serializer_1.BytesList();
53
57
  if (prefix) {
54
58
  bytesList.put(prefix);
55
59
  }
56
- var filter = signingFieldsOnly
57
- ? function (f) { return f.isSigningField; }
60
+ const filter = signingFieldsOnly
61
+ ? (f) => f.isSigningField
58
62
  : undefined;
59
- types_1.coreTypes.STObject.from(object, filter).toBytesSink(bytesList);
63
+ types_1.coreTypes.STObject
64
+ .from(object, filter, definitions)
65
+ .toBytesSink(bytesList);
60
66
  if (suffix) {
61
67
  bytesList.put(suffix);
62
68
  }
@@ -68,28 +74,39 @@ exports.serializeObject = serializeObject;
68
74
  *
69
75
  * @param transaction Transaction to serialize
70
76
  * @param prefix Prefix bytes to put before the serialized object
77
+ * @param opts.definitions Custom rippled types to use instead of the default. Used for sidechains and amendments.
71
78
  * @returns A Buffer with the serialized object
72
79
  */
73
- function signingData(transaction, prefix) {
74
- if (prefix === void 0) { prefix = hash_prefixes_1.HashPrefix.transactionSig; }
75
- return serializeObject(transaction, { prefix: prefix, signingFieldsOnly: true });
80
+ function signingData(transaction, prefix = hash_prefixes_1.HashPrefix.transactionSig, opts = {}) {
81
+ return serializeObject(transaction, {
82
+ prefix,
83
+ signingFieldsOnly: true,
84
+ definitions: opts.definitions,
85
+ });
76
86
  }
77
87
  exports.signingData = signingData;
78
88
  /**
79
89
  * Serialize a signingClaim
80
90
  *
81
91
  * @param claim A claim object to serialize
92
+ * @param opts.definitions Custom rippled types to use instead of the default. Used for sidechains and amendments.
82
93
  * @returns the serialized object with appropriate prefix
83
94
  */
84
95
  function signingClaimData(claim) {
85
- var num = bigInt(String(claim.amount));
86
- var prefix = hash_prefixes_1.HashPrefix.paymentChannelClaim;
87
- var channel = types_1.coreTypes.Hash256.from(claim.channel).toBytes();
88
- var amount = types_1.coreTypes.UInt64.from(num).toBytes();
89
- var bytesList = new binary_serializer_1.BytesList();
96
+ const prefix = hash_prefixes_1.HashPrefix.paymentChannelClaim;
97
+ const channel = types_1.coreTypes.Hash256.from(claim.channel).toBytes();
98
+ const bytesList = new binary_serializer_1.BytesList();
90
99
  bytesList.put(prefix);
91
100
  bytesList.put(channel);
92
- bytesList.put(amount);
101
+ if (typeof claim.amount === 'string') {
102
+ const num = bigInt(String(claim.amount));
103
+ const amount = types_1.coreTypes.UInt64.from(num).toBytes();
104
+ bytesList.put(amount);
105
+ }
106
+ else {
107
+ const amount = types_1.coreTypes.Amount.from(claim.amount).toBytes();
108
+ bytesList.put(amount);
109
+ }
93
110
  return bytesList.toBytes();
94
111
  }
95
112
  exports.signingClaimData = signingClaimData;
@@ -98,15 +115,19 @@ exports.signingClaimData = signingClaimData;
98
115
  *
99
116
  * @param transaction transaction to serialize
100
117
  * @param signingAccount Account to sign the transaction with
118
+ * @param opts.definitions Custom rippled types to use instead of the default. Used for sidechains and amendments.
101
119
  * @returns serialized transaction with appropriate prefix and suffix
102
120
  */
103
- function multiSigningData(transaction, signingAccount) {
104
- var prefix = hash_prefixes_1.HashPrefix.transactionMultiSig;
105
- var suffix = types_1.coreTypes.AccountID.from(signingAccount).toBytes();
121
+ function multiSigningData(transaction, signingAccount, opts = {
122
+ definitions: enums_1.DEFAULT_DEFINITIONS,
123
+ }) {
124
+ const prefix = hash_prefixes_1.HashPrefix.transactionMultiSig;
125
+ const suffix = types_1.coreTypes.AccountID.from(signingAccount).toBytes();
106
126
  return serializeObject(transaction, {
107
- prefix: prefix,
108
- suffix: suffix,
127
+ prefix,
128
+ suffix,
109
129
  signingFieldsOnly: true,
130
+ definitions: opts.definitions,
110
131
  });
111
132
  }
112
133
  exports.multiSigningData = multiSigningData;
@@ -1 +1 @@
1
- {"version":3,"file":"binary.js","sourceRoot":"","sources":["../src/binary.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"binary.js","sourceRoot":"","sources":["../src/binary.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { Field, TransactionType, LedgerEntryType, Type, TransactionResult } from './enums';
1
+ import { DEFAULT_DEFINITIONS, Field, TransactionType, LedgerEntryType, Type, TransactionResult } from './enums';
2
2
  import * as types from './types';
3
3
  import * as binary from './binary';
4
4
  import { ShaMap } from './shamap';
@@ -6,4 +6,4 @@ import * as ledgerHashes from './ledger-hashes';
6
6
  import * as hashes from './hashes';
7
7
  import { quality } from './quality';
8
8
  import { HashPrefix } from './hash-prefixes';
9
- export { hashes, binary, ledgerHashes, Field, TransactionType, LedgerEntryType, Type, TransactionResult, quality, HashPrefix, ShaMap, types, };
9
+ export { hashes, binary, ledgerHashes, DEFAULT_DEFINITIONS, Field, TransactionType, LedgerEntryType, Type, TransactionResult, quality, HashPrefix, ShaMap, types, };
package/dist/coretypes.js CHANGED
@@ -1,24 +1,48 @@
1
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
+ };
2
25
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.types = exports.ShaMap = exports.HashPrefix = exports.quality = exports.TransactionResult = exports.Type = exports.LedgerEntryType = exports.TransactionType = exports.Field = exports.ledgerHashes = exports.binary = exports.hashes = void 0;
4
- var enums_1 = require("./enums");
26
+ exports.types = exports.ShaMap = exports.HashPrefix = exports.quality = exports.TransactionResult = exports.Type = exports.LedgerEntryType = exports.TransactionType = exports.Field = exports.DEFAULT_DEFINITIONS = exports.ledgerHashes = exports.binary = exports.hashes = void 0;
27
+ const enums_1 = require("./enums");
28
+ Object.defineProperty(exports, "DEFAULT_DEFINITIONS", { enumerable: true, get: function () { return enums_1.DEFAULT_DEFINITIONS; } });
5
29
  Object.defineProperty(exports, "Field", { enumerable: true, get: function () { return enums_1.Field; } });
6
30
  Object.defineProperty(exports, "TransactionType", { enumerable: true, get: function () { return enums_1.TransactionType; } });
7
31
  Object.defineProperty(exports, "LedgerEntryType", { enumerable: true, get: function () { return enums_1.LedgerEntryType; } });
8
32
  Object.defineProperty(exports, "Type", { enumerable: true, get: function () { return enums_1.Type; } });
9
33
  Object.defineProperty(exports, "TransactionResult", { enumerable: true, get: function () { return enums_1.TransactionResult; } });
10
- var types = require("./types");
34
+ const types = __importStar(require("./types"));
11
35
  exports.types = types;
12
- var binary = require("./binary");
36
+ const binary = __importStar(require("./binary"));
13
37
  exports.binary = binary;
14
- var shamap_1 = require("./shamap");
38
+ const shamap_1 = require("./shamap");
15
39
  Object.defineProperty(exports, "ShaMap", { enumerable: true, get: function () { return shamap_1.ShaMap; } });
16
- var ledgerHashes = require("./ledger-hashes");
40
+ const ledgerHashes = __importStar(require("./ledger-hashes"));
17
41
  exports.ledgerHashes = ledgerHashes;
18
- var hashes = require("./hashes");
42
+ const hashes = __importStar(require("./hashes"));
19
43
  exports.hashes = hashes;
20
- var quality_1 = require("./quality");
44
+ const quality_1 = require("./quality");
21
45
  Object.defineProperty(exports, "quality", { enumerable: true, get: function () { return quality_1.quality; } });
22
- var hash_prefixes_1 = require("./hash-prefixes");
46
+ const hash_prefixes_1 = require("./hash-prefixes");
23
47
  Object.defineProperty(exports, "HashPrefix", { enumerable: true, get: function () { return hash_prefixes_1.HashPrefix; } });
24
48
  //# sourceMappingURL=coretypes.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"coretypes.js","sourceRoot":"","sources":["../src/coretypes.ts"],"names":[],"mappings":";;;AAAA,iCAMgB;AAad,sFAlBA,aAAK,OAkBA;AACL,gGAlBA,uBAAe,OAkBA;AACf,gGAlBA,uBAAe,OAkBA;AACf,qFAlBA,YAAI,OAkBA;AACJ,kGAlBA,yBAAiB,OAkBA;AAhBnB,+BAAgC;AAoB9B,sBAAK;AAnBP,iCAAkC;AAShC,wBAAM;AARR,mCAAiC;AAiB/B,uFAjBO,eAAM,OAiBP;AAhBR,8CAA+C;AAQ7C,oCAAY;AAPd,iCAAkC;AAKhC,wBAAM;AAJR,qCAAmC;AAYjC,wFAZO,iBAAO,OAYP;AAXT,iDAA4C;AAY1C,2FAZO,0BAAU,OAYP"}
1
+ {"version":3,"file":"coretypes.js","sourceRoot":"","sources":["../src/coretypes.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,mCAOgB;AAad,oGAnBA,2BAAmB,OAmBA;AACnB,sFAnBA,aAAK,OAmBA;AACL,gGAnBA,uBAAe,OAmBA;AACf,gGAnBA,uBAAe,OAmBA;AACf,qFAnBA,YAAI,OAmBA;AACJ,kGAnBA,yBAAiB,OAmBA;AAjBnB,+CAAgC;AAqB9B,sBAAK;AApBP,iDAAkC;AAShC,wBAAM;AARR,qCAAiC;AAkB/B,uFAlBO,eAAM,OAkBP;AAjBR,8DAA+C;AAQ7C,oCAAY;AAPd,iDAAkC;AAKhC,wBAAM;AAJR,uCAAmC;AAajC,wFAbO,iBAAO,OAaP;AAZT,mDAA4C;AAa1C,2FAbO,0BAAU,OAaP"}
@@ -0,0 +1,26 @@
1
+ import { BytesList, BinaryParser } from '../binary';
2
+ import { Buffer } from 'buffer/';
3
+ export declare class Bytes {
4
+ readonly name: string;
5
+ readonly ordinal: number;
6
+ readonly ordinalWidth: number;
7
+ readonly bytes: Buffer;
8
+ constructor(name: string, ordinal: number, ordinalWidth: number);
9
+ toJSON(): string;
10
+ toBytesSink(sink: BytesList): void;
11
+ toBytes(): Uint8Array;
12
+ }
13
+ export declare class BytesLookup {
14
+ readonly ordinalWidth: number;
15
+ constructor(types: Record<string, number>, ordinalWidth: number);
16
+ /**
17
+ * Add a new name value pair to the BytesLookup.
18
+ *
19
+ * @param name - A human readable name for the field.
20
+ * @param value - The numeric value for the field.
21
+ * @throws if the name or value already exist in the lookup because it's unclear how to decode.
22
+ */
23
+ add(name: string, value: number): void;
24
+ from(value: Bytes | string): Bytes;
25
+ fromParser(parser: BinaryParser): Bytes;
26
+ }
@@ -0,0 +1,64 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BytesLookup = exports.Bytes = void 0;
4
+ const buffer_1 = require("buffer/");
5
+ /*
6
+ * @brief: Bytes, name, and ordinal representing one type, ledger_type, transaction type, or result
7
+ */
8
+ class Bytes {
9
+ constructor(name, ordinal, ordinalWidth) {
10
+ this.name = name;
11
+ this.ordinal = ordinal;
12
+ this.ordinalWidth = ordinalWidth;
13
+ this.bytes = buffer_1.Buffer.alloc(ordinalWidth);
14
+ for (let i = 0; i < ordinalWidth; i++) {
15
+ this.bytes[ordinalWidth - i - 1] = (ordinal >>> (i * 8)) & 0xff;
16
+ }
17
+ }
18
+ toJSON() {
19
+ return this.name;
20
+ }
21
+ toBytesSink(sink) {
22
+ sink.put(this.bytes);
23
+ }
24
+ toBytes() {
25
+ return this.bytes;
26
+ }
27
+ }
28
+ exports.Bytes = Bytes;
29
+ /*
30
+ * @brief: Collection of Bytes objects, mapping bidirectionally
31
+ */
32
+ class BytesLookup {
33
+ constructor(types, ordinalWidth) {
34
+ this.ordinalWidth = ordinalWidth;
35
+ Object.entries(types).forEach(([k, v]) => {
36
+ this.add(k, v);
37
+ });
38
+ }
39
+ /**
40
+ * Add a new name value pair to the BytesLookup.
41
+ *
42
+ * @param name - A human readable name for the field.
43
+ * @param value - The numeric value for the field.
44
+ * @throws if the name or value already exist in the lookup because it's unclear how to decode.
45
+ */
46
+ add(name, value) {
47
+ if (this[name]) {
48
+ throw new SyntaxError(`Attempted to add a value with a duplicate name "${name}". This is not allowed because it is unclear how to decode.`);
49
+ }
50
+ if (this[value.toString()]) {
51
+ throw new SyntaxError(`Attempted to add a duplicate value under a different name (Given name: "${name}" and previous name: "${this[value.toString()]}. This is not allowed because it is unclear how to decode.\nGiven value: ${value.toString()}`);
52
+ }
53
+ this[name] = new Bytes(name, value, this.ordinalWidth);
54
+ this[value.toString()] = this[name];
55
+ }
56
+ from(value) {
57
+ return value instanceof Bytes ? value : this[value];
58
+ }
59
+ fromParser(parser) {
60
+ return this.from(parser.readUIntN(this.ordinalWidth).toString());
61
+ }
62
+ }
63
+ exports.BytesLookup = BytesLookup;
64
+ //# sourceMappingURL=bytes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bytes.js","sourceRoot":"","sources":["../../src/enums/bytes.ts"],"names":[],"mappings":";;;AACA,oCAAgC;AAEhC;;GAEG;AACH,MAAa,KAAK;IAGhB,YACW,IAAY,EACZ,OAAe,EACf,YAAoB;QAFpB,SAAI,GAAJ,IAAI,CAAQ;QACZ,YAAO,GAAP,OAAO,CAAQ;QACf,iBAAY,GAAZ,YAAY,CAAQ;QAE7B,IAAI,CAAC,KAAK,GAAG,eAAM,CAAC,KAAK,CAAC,YAAY,CAAC,CAAA;QACvC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,EAAE,CAAC,EAAE,EAAE;YACrC,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,OAAO,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAA;SAChE;IACH,CAAC;IAED,MAAM;QACJ,OAAO,IAAI,CAAC,IAAI,CAAA;IAClB,CAAC;IAED,WAAW,CAAC,IAAe;QACzB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IACtB,CAAC;IAED,OAAO;QACL,OAAO,IAAI,CAAC,KAAK,CAAA;IACnB,CAAC;CACF;AAzBD,sBAyBC;AAED;;GAEG;AACH,MAAa,WAAW;IACtB,YAAY,KAA6B,EAAW,YAAoB;QAApB,iBAAY,GAAZ,YAAY,CAAQ;QACtE,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE;YACvC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;QAChB,CAAC,CAAC,CAAA;IACJ,CAAC;IAED;;;;;;OAMG;IACH,GAAG,CAAC,IAAY,EAAE,KAAa;QAC7B,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE;YACd,MAAM,IAAI,WAAW,CACnB,mDAAmD,IAAI,6DAA6D,CACrH,CAAA;SACF;QACD,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,EAAE;YAC1B,MAAM,IAAI,WAAW,CACnB,2EAA2E,IAAI,yBAC7E,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CACvB,4EAA4E,KAAK,CAAC,QAAQ,EAAE,EAAE,CAC/F,CAAA;SACF;QACD,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,CAAA;QACtD,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAA;IACrC,CAAC;IAED,IAAI,CAAC,KAAqB;QACxB,OAAO,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAE,IAAI,CAAC,KAAK,CAAW,CAAA;IAChE,CAAC;IAED,UAAU,CAAC,MAAoB;QAC7B,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAA;IAClE,CAAC;CACF;AAtCD,kCAsCC"}
@@ -0,0 +1,4 @@
1
+ export declare const TYPE_WIDTH = 2;
2
+ export declare const LEDGER_ENTRY_WIDTH = 2;
3
+ export declare const TRANSACTION_TYPE_WIDTH = 2;
4
+ export declare const TRANSACTION_RESULT_WIDTH = 1;
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TRANSACTION_RESULT_WIDTH = exports.TRANSACTION_TYPE_WIDTH = exports.LEDGER_ENTRY_WIDTH = exports.TYPE_WIDTH = void 0;
4
+ exports.TYPE_WIDTH = 2;
5
+ exports.LEDGER_ENTRY_WIDTH = 2;
6
+ exports.TRANSACTION_TYPE_WIDTH = 2;
7
+ exports.TRANSACTION_RESULT_WIDTH = 1;
8
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/enums/constants.ts"],"names":[],"mappings":";;;AAAa,QAAA,UAAU,GAAG,CAAC,CAAA;AACd,QAAA,kBAAkB,GAAG,CAAC,CAAA;AACtB,QAAA,sBAAsB,GAAG,CAAC,CAAA;AAC1B,QAAA,wBAAwB,GAAG,CAAC,CAAA"}