@transia/ripple-binary-codec 2.5.5-alpha.0 → 2.5.5-alpha.2
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.
- package/dist/enums/definitions.json +1313 -959
- package/dist/enums/src/enums/definitions.json +1318 -959
- package/dist/index.js +0 -3
- package/dist/index.js.map +1 -1
- package/dist/src/enums/definitions.json +1313 -959
- package/dist/src/index.js +0 -3
- package/dist/src/index.js.map +1 -1
- package/dist/src/types/hash-128.js +1 -1
- package/dist/src/types/hash-128.js.map +1 -1
- package/dist/src/types/hash-160.js +1 -1
- package/dist/src/types/hash-160.js.map +1 -1
- package/dist/src/types/hash-192.js +1 -1
- package/dist/src/types/hash-192.js.map +1 -1
- package/dist/src/types/index.d.ts +2 -1
- package/dist/src/types/index.js +4 -1
- package/dist/src/types/index.js.map +1 -1
- package/dist/src/types/int-32.d.ts +33 -0
- package/dist/src/types/int-32.js +64 -0
- package/dist/src/types/int-32.js.map +1 -0
- package/dist/src/types/int.d.ts +38 -0
- package/dist/src/types/int.js +57 -0
- package/dist/src/types/int.js.map +1 -0
- package/dist/src/types/issue.d.ts +10 -13
- package/dist/src/types/issue.js +42 -29
- package/dist/src/types/issue.js.map +1 -1
- package/dist/src/types/st-number.js +88 -33
- package/dist/src/types/st-number.js.map +1 -1
- package/dist/src/types/st-object.d.ts +3 -3
- package/dist/src/types/st-object.js +12 -12
- package/dist/src/types/st-object.js.map +1 -1
- package/dist/src/types/uint-16.js +2 -2
- package/dist/src/types/uint-16.js.map +1 -1
- package/dist/src/types/uint-32.js +1 -1
- package/dist/src/types/uint-32.js.map +1 -1
- package/dist/src/types/uint-64.js +1 -1
- package/dist/src/types/uint-64.js.map +1 -1
- package/dist/src/types/uint-8.js +1 -1
- package/dist/src/types/uint-8.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/types/hash-128.js +1 -1
- package/dist/types/hash-128.js.map +1 -1
- package/dist/types/hash-160.js +1 -1
- package/dist/types/hash-160.js.map +1 -1
- package/dist/types/hash-192.js +1 -1
- package/dist/types/hash-192.js.map +1 -1
- package/dist/types/index.d.ts +2 -1
- package/dist/types/index.js +4 -1
- package/dist/types/index.js.map +1 -1
- package/dist/types/int-32.d.ts +33 -0
- package/dist/types/int-32.js +64 -0
- package/dist/types/int-32.js.map +1 -0
- package/dist/types/int.d.ts +38 -0
- package/dist/types/int.js +57 -0
- package/dist/types/int.js.map +1 -0
- package/dist/types/issue.d.ts +10 -13
- package/dist/types/issue.js +42 -29
- package/dist/types/issue.js.map +1 -1
- package/dist/types/st-number.js +88 -33
- package/dist/types/st-number.js.map +1 -1
- package/dist/types/st-object.d.ts +3 -3
- package/dist/types/st-object.js +12 -12
- package/dist/types/st-object.js.map +1 -1
- package/dist/types/uint-16.js +2 -2
- package/dist/types/uint-16.js.map +1 -1
- package/dist/types/uint-32.js +1 -1
- package/dist/types/uint-32.js.map +1 -1
- package/dist/types/uint-64.js +1 -1
- package/dist/types/uint-64.js.map +1 -1
- package/dist/types/uint-8.js +1 -1
- package/dist/types/uint-8.js.map +1 -1
- package/package.json +8 -5
- package/src/enums/definitions.json +1318 -959
- package/src/index.ts +1 -3
- package/src/types/hash-128.ts +1 -1
- package/src/types/hash-160.ts +1 -1
- package/src/types/hash-192.ts +1 -1
- package/src/types/index.ts +3 -0
- package/src/types/int-32.ts +72 -0
- package/src/types/int.ts +75 -0
- package/src/types/issue.ts +90 -57
- package/src/types/st-number.ts +107 -31
- package/src/types/st-object.ts +77 -73
- package/src/types/uint-16.ts +2 -2
- package/src/types/uint-32.ts +1 -1
- package/src/types/uint-64.ts +1 -1
- package/src/types/uint-8.ts +1 -1
package/src/types/st-object.ts
CHANGED
|
@@ -3,25 +3,29 @@ import {
|
|
|
3
3
|
FieldInstance,
|
|
4
4
|
Bytes,
|
|
5
5
|
XrplDefinitionsBase,
|
|
6
|
-
} from
|
|
7
|
-
import {
|
|
6
|
+
} from "../enums";
|
|
7
|
+
import {
|
|
8
|
+
SerializedType,
|
|
9
|
+
JsonObject,
|
|
10
|
+
SerializedTypeID,
|
|
11
|
+
} from "./serialized-type";
|
|
8
12
|
import {
|
|
9
13
|
xAddressToClassicAddress,
|
|
10
14
|
isValidXAddress,
|
|
11
|
-
} from
|
|
12
|
-
import { BinaryParser } from
|
|
13
|
-
import { BinarySerializer, BytesList } from
|
|
15
|
+
} from "@transia/ripple-address-codec";
|
|
16
|
+
import { BinaryParser } from "../serdes/binary-parser";
|
|
17
|
+
import { BinarySerializer, BytesList } from "../serdes/binary-serializer";
|
|
14
18
|
|
|
15
|
-
import { STArray } from
|
|
16
|
-
import { UInt64 } from
|
|
19
|
+
import { STArray } from "./st-array";
|
|
20
|
+
import { UInt64 } from "./uint-64";
|
|
17
21
|
|
|
18
|
-
const OBJECT_END_MARKER_BYTE = Uint8Array.from([0xe1])
|
|
19
|
-
const OBJECT_END_MARKER =
|
|
20
|
-
const ST_OBJECT =
|
|
21
|
-
const DESTINATION =
|
|
22
|
-
const ACCOUNT =
|
|
23
|
-
const SOURCE_TAG =
|
|
24
|
-
const DEST_TAG =
|
|
22
|
+
const OBJECT_END_MARKER_BYTE = Uint8Array.from([0xe1]);
|
|
23
|
+
const OBJECT_END_MARKER = "ObjectEndMarker";
|
|
24
|
+
const ST_OBJECT = "STObject";
|
|
25
|
+
const DESTINATION = "Destination";
|
|
26
|
+
const ACCOUNT = "Account";
|
|
27
|
+
const SOURCE_TAG = "SourceTag";
|
|
28
|
+
const DEST_TAG = "DestinationTag";
|
|
25
29
|
|
|
26
30
|
/**
|
|
27
31
|
* Break down an X-Address into an account and a tag
|
|
@@ -30,17 +34,17 @@ const DEST_TAG = 'DestinationTag'
|
|
|
30
34
|
* @param xAddress X-Address corresponding to the field
|
|
31
35
|
*/
|
|
32
36
|
function handleXAddress(field: string, xAddress: string): JsonObject {
|
|
33
|
-
const decoded = xAddressToClassicAddress(xAddress)
|
|
37
|
+
const decoded = xAddressToClassicAddress(xAddress);
|
|
34
38
|
|
|
35
|
-
let tagName
|
|
36
|
-
if (field === DESTINATION) tagName = DEST_TAG
|
|
37
|
-
else if (field === ACCOUNT) tagName = SOURCE_TAG
|
|
39
|
+
let tagName;
|
|
40
|
+
if (field === DESTINATION) tagName = DEST_TAG;
|
|
41
|
+
else if (field === ACCOUNT) tagName = SOURCE_TAG;
|
|
38
42
|
else if (decoded.tag !== false)
|
|
39
|
-
throw new Error(`${field} cannot have an associated tag`)
|
|
43
|
+
throw new Error(`${field} cannot have an associated tag`);
|
|
40
44
|
|
|
41
45
|
return decoded.tag !== false
|
|
42
46
|
? { [field]: decoded.classicAddress, [tagName]: decoded.tag }
|
|
43
|
-
: { [field]: decoded.classicAddress }
|
|
47
|
+
: { [field]: decoded.classicAddress };
|
|
44
48
|
}
|
|
45
49
|
|
|
46
50
|
/**
|
|
@@ -52,9 +56,9 @@ function handleXAddress(field: string, xAddress: string): JsonObject {
|
|
|
52
56
|
*/
|
|
53
57
|
function checkForDuplicateTags(obj1: JsonObject, obj2: JsonObject): void {
|
|
54
58
|
if (!(obj1[SOURCE_TAG] === undefined || obj2[SOURCE_TAG] === undefined))
|
|
55
|
-
throw new Error(
|
|
59
|
+
throw new Error("Cannot have Account X-Address and SourceTag");
|
|
56
60
|
if (!(obj1[DEST_TAG] === undefined || obj2[DEST_TAG] === undefined))
|
|
57
|
-
throw new Error(
|
|
61
|
+
throw new Error("Cannot have Destination X-Address and DestinationTag");
|
|
58
62
|
}
|
|
59
63
|
|
|
60
64
|
/**
|
|
@@ -68,24 +72,24 @@ class STObject extends SerializedType {
|
|
|
68
72
|
* @returns A STObject object
|
|
69
73
|
*/
|
|
70
74
|
static fromParser(parser: BinaryParser): STObject {
|
|
71
|
-
const list: BytesList = new BytesList()
|
|
72
|
-
const bytes: BinarySerializer = new BinarySerializer(list)
|
|
75
|
+
const list: BytesList = new BytesList();
|
|
76
|
+
const bytes: BinarySerializer = new BinarySerializer(list);
|
|
73
77
|
|
|
74
78
|
while (!parser.end()) {
|
|
75
|
-
const field = parser.readField()
|
|
79
|
+
const field = parser.readField();
|
|
76
80
|
if (field.name === OBJECT_END_MARKER) {
|
|
77
|
-
break
|
|
81
|
+
break;
|
|
78
82
|
}
|
|
79
83
|
|
|
80
|
-
const associatedValue = parser.readFieldValue(field)
|
|
84
|
+
const associatedValue = parser.readFieldValue(field);
|
|
81
85
|
|
|
82
|
-
bytes.writeFieldAndValue(field, associatedValue)
|
|
86
|
+
bytes.writeFieldAndValue(field, associatedValue);
|
|
83
87
|
if (field.type.name === ST_OBJECT) {
|
|
84
|
-
bytes.put(OBJECT_END_MARKER_BYTE)
|
|
88
|
+
bytes.put(OBJECT_END_MARKER_BYTE);
|
|
85
89
|
}
|
|
86
90
|
}
|
|
87
91
|
|
|
88
|
-
return new STObject(list.toBytes())
|
|
92
|
+
return new STObject(list.toBytes());
|
|
89
93
|
}
|
|
90
94
|
|
|
91
95
|
/**
|
|
@@ -102,22 +106,22 @@ class STObject extends SerializedType {
|
|
|
102
106
|
definitions: XrplDefinitionsBase = DEFAULT_DEFINITIONS,
|
|
103
107
|
): STObject {
|
|
104
108
|
if (value instanceof STObject) {
|
|
105
|
-
return value
|
|
109
|
+
return value;
|
|
106
110
|
}
|
|
107
111
|
|
|
108
|
-
const list: BytesList = new BytesList()
|
|
109
|
-
const bytes: BinarySerializer = new BinarySerializer(list)
|
|
112
|
+
const list: BytesList = new BytesList();
|
|
113
|
+
const bytes: BinarySerializer = new BinarySerializer(list);
|
|
110
114
|
|
|
111
|
-
let isUnlModify = false
|
|
115
|
+
let isUnlModify = false;
|
|
112
116
|
|
|
113
117
|
const xAddressDecoded = Object.entries(value).reduce((acc, [key, val]) => {
|
|
114
|
-
let handled: JsonObject | undefined = undefined
|
|
118
|
+
let handled: JsonObject | undefined = undefined;
|
|
115
119
|
if (val && isValidXAddress(val.toString())) {
|
|
116
|
-
handled = handleXAddress(key, val.toString())
|
|
117
|
-
checkForDuplicateTags(handled, value)
|
|
120
|
+
handled = handleXAddress(key, val.toString());
|
|
121
|
+
checkForDuplicateTags(handled, value);
|
|
118
122
|
}
|
|
119
|
-
return Object.assign(acc, handled ?? { [key]: val })
|
|
120
|
-
}, {})
|
|
123
|
+
return Object.assign(acc, handled ?? { [key]: val });
|
|
124
|
+
}, {});
|
|
121
125
|
|
|
122
126
|
function isValidFieldInstance(
|
|
123
127
|
f: FieldInstance | undefined,
|
|
@@ -126,65 +130,65 @@ class STObject extends SerializedType {
|
|
|
126
130
|
f !== undefined &&
|
|
127
131
|
xAddressDecoded[f.name] !== undefined &&
|
|
128
132
|
f.isSerialized
|
|
129
|
-
)
|
|
133
|
+
);
|
|
130
134
|
}
|
|
131
135
|
|
|
132
136
|
let sorted = Object.keys(xAddressDecoded)
|
|
133
137
|
.map((f: string): FieldInstance | undefined => {
|
|
134
138
|
if (!(f in definitions.field)) {
|
|
135
|
-
if (f[0] === f[0].toLowerCase()) return undefined
|
|
136
|
-
throw new Error(`Field ${f} is not defined in the definitions`)
|
|
139
|
+
if (f[0] === f[0].toLowerCase()) return undefined;
|
|
140
|
+
throw new Error(`Field ${f} is not defined in the definitions`);
|
|
137
141
|
}
|
|
138
|
-
return definitions.field[f] as FieldInstance
|
|
142
|
+
return definitions.field[f] as FieldInstance;
|
|
139
143
|
})
|
|
140
144
|
.filter(isValidFieldInstance)
|
|
141
145
|
.sort((a, b) => {
|
|
142
|
-
return a.ordinal - b.ordinal
|
|
143
|
-
})
|
|
146
|
+
return a.ordinal - b.ordinal;
|
|
147
|
+
});
|
|
144
148
|
|
|
145
149
|
if (filter !== undefined) {
|
|
146
|
-
sorted = sorted.filter(filter)
|
|
150
|
+
sorted = sorted.filter(filter);
|
|
147
151
|
}
|
|
148
152
|
|
|
149
153
|
sorted.forEach((field) => {
|
|
150
154
|
const associatedValue =
|
|
151
155
|
field.type.name === ST_OBJECT
|
|
152
156
|
? this.from(xAddressDecoded[field.name], undefined, definitions)
|
|
153
|
-
: field.type.name ===
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
157
|
+
: field.type.name === "STArray"
|
|
158
|
+
? STArray.from(xAddressDecoded[field.name], definitions)
|
|
159
|
+
: field.type.name === "UInt64"
|
|
160
|
+
? UInt64.from(xAddressDecoded[field.name], field.name)
|
|
161
|
+
: field.associatedType?.from
|
|
162
|
+
? field.associatedType.from(xAddressDecoded[field.name])
|
|
163
|
+
: (() => {
|
|
164
|
+
throw new Error(
|
|
165
|
+
`Type ${field.type.name} for field ${field.name} is missing associatedType.from`,
|
|
166
|
+
);
|
|
167
|
+
})();
|
|
164
168
|
|
|
165
169
|
if (associatedValue == undefined) {
|
|
166
170
|
throw new TypeError(
|
|
167
171
|
`Unable to interpret "${field.name}: ${
|
|
168
172
|
xAddressDecoded[field.name]
|
|
169
173
|
}".`,
|
|
170
|
-
)
|
|
174
|
+
);
|
|
171
175
|
}
|
|
172
176
|
|
|
173
|
-
if ((associatedValue as unknown as Bytes).name ===
|
|
177
|
+
if ((associatedValue as unknown as Bytes).name === "UNLModify") {
|
|
174
178
|
// triggered when the TransactionType field has a value of 'UNLModify'
|
|
175
|
-
isUnlModify = true
|
|
179
|
+
isUnlModify = true;
|
|
176
180
|
}
|
|
177
181
|
// true when in the UNLModify pseudotransaction (after the transaction type has been processed) and working with the
|
|
178
182
|
// Account field
|
|
179
183
|
// The Account field must not be a part of the UNLModify pseudotransaction encoding, due to a bug in rippled
|
|
180
|
-
const isUnlModifyWorkaround = field.name ==
|
|
181
|
-
bytes.writeFieldAndValue(field, associatedValue, isUnlModifyWorkaround)
|
|
184
|
+
const isUnlModifyWorkaround = field.name == "Account" && isUnlModify;
|
|
185
|
+
bytes.writeFieldAndValue(field, associatedValue, isUnlModifyWorkaround);
|
|
182
186
|
if (field.type.name === ST_OBJECT) {
|
|
183
|
-
bytes.put(OBJECT_END_MARKER_BYTE)
|
|
187
|
+
bytes.put(OBJECT_END_MARKER_BYTE);
|
|
184
188
|
}
|
|
185
|
-
})
|
|
189
|
+
});
|
|
186
190
|
|
|
187
|
-
return new STObject(list.toBytes())
|
|
191
|
+
return new STObject(list.toBytes());
|
|
188
192
|
}
|
|
189
193
|
|
|
190
194
|
/**
|
|
@@ -194,26 +198,26 @@ class STObject extends SerializedType {
|
|
|
194
198
|
* @returns a JSON object
|
|
195
199
|
*/
|
|
196
200
|
toJSON(definitions?: XrplDefinitionsBase): JsonObject {
|
|
197
|
-
const objectParser = new BinaryParser(this.toString(), definitions)
|
|
198
|
-
const accumulator = {}
|
|
201
|
+
const objectParser = new BinaryParser(this.toString(), definitions);
|
|
202
|
+
const accumulator = {};
|
|
199
203
|
|
|
200
204
|
while (!objectParser.end()) {
|
|
201
|
-
const field = objectParser.readField()
|
|
205
|
+
const field = objectParser.readField();
|
|
202
206
|
if (field.name === OBJECT_END_MARKER) {
|
|
203
|
-
break
|
|
207
|
+
break;
|
|
204
208
|
}
|
|
205
209
|
|
|
206
210
|
accumulator[field.name] = objectParser
|
|
207
211
|
.readFieldValue(field)
|
|
208
|
-
.toJSON(definitions, field.name)
|
|
212
|
+
.toJSON(definitions, field.name);
|
|
209
213
|
}
|
|
210
214
|
|
|
211
|
-
return accumulator
|
|
215
|
+
return accumulator;
|
|
212
216
|
}
|
|
213
217
|
|
|
214
218
|
getSType(): SerializedTypeID {
|
|
215
|
-
return SerializedTypeID.STI_OBJECT
|
|
219
|
+
return SerializedTypeID.STI_OBJECT;
|
|
216
220
|
}
|
|
217
221
|
}
|
|
218
222
|
|
|
219
|
-
export { STObject }
|
|
223
|
+
export { STObject };
|
package/src/types/uint-16.ts
CHANGED
|
@@ -30,7 +30,7 @@ class UInt16 extends UInt {
|
|
|
30
30
|
return val
|
|
31
31
|
}
|
|
32
32
|
|
|
33
|
-
if (typeof val === 'number') {
|
|
33
|
+
if (typeof val === 'number' && Number.isInteger(val)) {
|
|
34
34
|
UInt16.checkUintRange(val, 0, 0xffff)
|
|
35
35
|
|
|
36
36
|
const buf = new Uint8Array(UInt16.width)
|
|
@@ -38,7 +38,7 @@ class UInt16 extends UInt {
|
|
|
38
38
|
return new UInt16(buf)
|
|
39
39
|
}
|
|
40
40
|
|
|
41
|
-
throw new Error('
|
|
41
|
+
throw new Error('Cannot construct UInt16 from given value')
|
|
42
42
|
}
|
|
43
43
|
|
|
44
44
|
/**
|
package/src/types/uint-32.ts
CHANGED
package/src/types/uint-64.ts
CHANGED
package/src/types/uint-8.ts
CHANGED