@bithomp/xrpl-api 3.1.12 → 3.1.14
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/README.md +10 -4
- package/lib/connection.js +8 -2
- package/lib/ledger/vl-v2.js +3 -0
- package/lib/ledger/vl.js +3 -0
- package/lib/models/manifest.js +4 -0
- package/lib/parse/outcome/amm_changes.js +2 -0
- package/lib/parse/outcome/did_changes.d.ts +13 -0
- package/lib/parse/outcome/did_changes.js +45 -0
- package/lib/parse/outcome/index.d.ts +2 -0
- package/lib/parse/outcome/index.js +5 -1
- package/lib/parse/outcome/oracle_changes.d.ts +28 -0
- package/lib/parse/outcome/oracle_changes.js +145 -0
- package/lib/parse/outcome.js +4 -0
- package/lib/parse/specification/did-delete.d.ts +3 -0
- package/lib/parse/specification/did-delete.js +43 -0
- package/lib/parse/specification/did-set.d.ts +3 -0
- package/lib/parse/specification/did-set.js +46 -0
- package/lib/parse/specification/oracle-delete.d.ts +3 -0
- package/lib/parse/specification/oracle-delete.js +44 -0
- package/lib/parse/specification/oracle-set.d.ts +3 -0
- package/lib/parse/specification/oracle-set.js +50 -0
- package/lib/parse/transaction.js +12 -0
- package/lib/types/did.d.ts +7 -0
- package/lib/types/did.js +2 -0
- package/lib/types/index.d.ts +2 -0
- package/lib/types/index.js +2 -0
- package/lib/types/oracle.d.ts +27 -0
- package/lib/types/oracle.js +2 -0
- package/package.json +3 -3
package/README.md
CHANGED
|
@@ -75,7 +75,7 @@ BithompXRPL.Client.setup(config);
|
|
|
75
75
|
// connect
|
|
76
76
|
await BithompXRPL.Client.connect();
|
|
77
77
|
|
|
78
|
-
// validator secrets, should not belong to any validators keys.
|
|
78
|
+
// validator(master) secrets, should not belong to any validators keys.
|
|
79
79
|
// can be any ed25519 (publicKey starts on `ED`) or secp256k1 could be used,
|
|
80
80
|
// can ne generated with BithompXRPL.Validator.generateSecrets() or by generateSeed from ripple-keypairs
|
|
81
81
|
const vk = {
|
|
@@ -83,7 +83,7 @@ const vk = {
|
|
|
83
83
|
publicKey: "ED________________________________",
|
|
84
84
|
};
|
|
85
85
|
|
|
86
|
-
// signing secrets, should not belong to any validators keys.
|
|
86
|
+
// signing secrets, should not belong to any validators keys and should be different from vk.
|
|
87
87
|
// can be any ed25519 (publicKey starts on `ED`) or secp256k1 could be used,
|
|
88
88
|
// can ne generated with BithompXRPL.Validator.generateSecrets() or by generateSeed from ripple-keypairs
|
|
89
89
|
const sk = {
|
|
@@ -108,6 +108,9 @@ const vl = await BithompXRPL.Client.createVL(vk, sk, sequence, expiration, valid
|
|
|
108
108
|
// "public_key": "..." // vk.publicKey
|
|
109
109
|
// }
|
|
110
110
|
|
|
111
|
+
// NOTE: to be able rippled to accept the validator list, you have to add validator(master) public key
|
|
112
|
+
// to [validator_list_keys] in rippled.cfg
|
|
113
|
+
|
|
111
114
|
// disconnect
|
|
112
115
|
BithompXRPL.Client.disconnect();
|
|
113
116
|
```
|
|
@@ -131,7 +134,7 @@ BithompXRPL.Client.setup(config);
|
|
|
131
134
|
// connect
|
|
132
135
|
await BithompXRPL.Client.connect();
|
|
133
136
|
|
|
134
|
-
// validator secrets, should not belong to any validators keys.
|
|
137
|
+
// validator(master) secrets, should not belong to any validators keys.
|
|
135
138
|
// can be any ed25519 (publicKey starts on `ED`) or secp256k1 could be used,
|
|
136
139
|
// can ne generated with BithompXRPL.Validator.generateSecrets() or by generateSeed from ripple-keypairs
|
|
137
140
|
const vk = {
|
|
@@ -139,7 +142,7 @@ const vk = {
|
|
|
139
142
|
publicKey: "ED________________________________",
|
|
140
143
|
};
|
|
141
144
|
|
|
142
|
-
// signing secrets, should not belong to any validators keys.
|
|
145
|
+
// signing secrets, should not belong to any validators keys and should be different from vk.
|
|
143
146
|
// can be any ed25519 (publicKey starts on `ED`) or secp256k1 could be used,
|
|
144
147
|
// can ne generated with BithompXRPL.Validator.generateSecrets() or by generateSeed from ripple-keypairs
|
|
145
148
|
const sk = {
|
|
@@ -171,6 +174,9 @@ const vl = await BithompXRPL.Client.createVLv2(vk, sk, [publishBlob, publishBlob
|
|
|
171
174
|
// "public_key": "..." // vk.publicKey
|
|
172
175
|
// }
|
|
173
176
|
|
|
177
|
+
// NOTE: to be able rippled to accept the validator list, you have to add validator(master) public key
|
|
178
|
+
// to [validator_list_keys] in rippled.cfg
|
|
179
|
+
|
|
174
180
|
// disconnect
|
|
175
181
|
BithompXRPL.Client.disconnect();
|
|
176
182
|
```
|
package/lib/connection.js
CHANGED
|
@@ -109,11 +109,14 @@ class Connection extends events_1.EventEmitter {
|
|
|
109
109
|
url: this.url,
|
|
110
110
|
error: err?.message || err?.name || err,
|
|
111
111
|
});
|
|
112
|
-
if (err.
|
|
112
|
+
if (err.name === "TimeoutError") {
|
|
113
|
+
return { error: "timeout", error_message: "Request timeout.", status: "error" };
|
|
114
|
+
}
|
|
115
|
+
else if (err.data) {
|
|
113
116
|
return err.data;
|
|
114
117
|
}
|
|
115
118
|
else {
|
|
116
|
-
return { error: err?.message || err?.name || err };
|
|
119
|
+
return { error: err?.message || err?.name || err, status: "error" };
|
|
117
120
|
}
|
|
118
121
|
}
|
|
119
122
|
}
|
|
@@ -204,6 +207,7 @@ class Connection extends events_1.EventEmitter {
|
|
|
204
207
|
this.logger?.warn({
|
|
205
208
|
service: "Bithomp::XRPL::Connection",
|
|
206
209
|
function: "reconnect",
|
|
210
|
+
url: this.url,
|
|
207
211
|
error: e.message,
|
|
208
212
|
});
|
|
209
213
|
}
|
|
@@ -252,6 +256,7 @@ class Connection extends events_1.EventEmitter {
|
|
|
252
256
|
service: "Bithomp::XRPL::Connection",
|
|
253
257
|
emit: "error",
|
|
254
258
|
source,
|
|
259
|
+
url: this.url,
|
|
255
260
|
error: message || error?.name || error,
|
|
256
261
|
});
|
|
257
262
|
this.emit("error", source, message, error);
|
|
@@ -494,6 +499,7 @@ class Connection extends events_1.EventEmitter {
|
|
|
494
499
|
this.logger?.warn({
|
|
495
500
|
service: "Bithomp::XRPL::Connection",
|
|
496
501
|
function: "connectionValidationTimeout",
|
|
502
|
+
url: this.url,
|
|
497
503
|
error: e.message,
|
|
498
504
|
});
|
|
499
505
|
this.connectionValidation();
|
package/lib/ledger/vl-v2.js
CHANGED
|
@@ -38,6 +38,9 @@ async function createVLv2(masterKey, ephemeralKey, publishBlobs) {
|
|
|
38
38
|
if (!ephemeralKey) {
|
|
39
39
|
throw new Error("Ephemeral key is required");
|
|
40
40
|
}
|
|
41
|
+
if (masterKey.publicKey === ephemeralKey.publicKey) {
|
|
42
|
+
throw new Error("Master and ephemeral keys must be different.");
|
|
43
|
+
}
|
|
41
44
|
let globalSequence;
|
|
42
45
|
const blobs = [];
|
|
43
46
|
for (const publishBlob of publishBlobs) {
|
package/lib/ledger/vl.js
CHANGED
|
@@ -40,6 +40,9 @@ async function createVL(masterKey, ephemeralKey, sequence, expiration, validator
|
|
|
40
40
|
if (!ephemeralKey) {
|
|
41
41
|
throw new Error("Ephemeral key is required");
|
|
42
42
|
}
|
|
43
|
+
if (masterKey.publicKey === ephemeralKey.publicKey) {
|
|
44
|
+
throw new Error("Master and ephemeral keys must be different.");
|
|
45
|
+
}
|
|
43
46
|
if (typeof sequence !== "number") {
|
|
44
47
|
throw new Error("sequence must be a number.");
|
|
45
48
|
}
|
package/lib/models/manifest.js
CHANGED
|
@@ -145,6 +145,10 @@ function parseManifest(manifest) {
|
|
|
145
145
|
decoded.error = "Master signature does not match";
|
|
146
146
|
return decoded;
|
|
147
147
|
}
|
|
148
|
+
if (decoded.SigningPubKey && decoded.PublicKey && decoded.SigningPubKey === decoded.PublicKey) {
|
|
149
|
+
decoded.error = "Master and ephemeral public keys must be different";
|
|
150
|
+
return decoded;
|
|
151
|
+
}
|
|
148
152
|
return decoded;
|
|
149
153
|
}
|
|
150
154
|
function generateManifest(manifest) {
|
|
@@ -61,6 +61,8 @@ function summarizeVoteSlotsChanges(node) {
|
|
|
61
61
|
return acc.concat((0, common_1.removeUndefined)({
|
|
62
62
|
status: "modified",
|
|
63
63
|
account: slot.VoteEntry.Account,
|
|
64
|
+
tradingFee: slot.VoteEntry.TradingFee,
|
|
65
|
+
voteWeight: slot.VoteEntry.VoteWeight,
|
|
64
66
|
tradingFeeChange: tradingFeeChange || undefined,
|
|
65
67
|
voteWeightChange: voteWeightChange || undefined,
|
|
66
68
|
}));
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
interface FormattedDIDSummaryInterface {
|
|
2
|
+
status?: "created" | "modified" | "deleted";
|
|
3
|
+
didID?: string;
|
|
4
|
+
account?: string;
|
|
5
|
+
uri: string;
|
|
6
|
+
data: string;
|
|
7
|
+
didDocument: string;
|
|
8
|
+
uriChange?: string;
|
|
9
|
+
dataChanges?: string;
|
|
10
|
+
didDocumentChanges?: string;
|
|
11
|
+
}
|
|
12
|
+
declare function parseDIDChanges(metadata: any): FormattedDIDSummaryInterface | undefined;
|
|
13
|
+
export { parseDIDChanges };
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.parseDIDChanges = parseDIDChanges;
|
|
4
|
+
const utils_1 = require("../utils");
|
|
5
|
+
const common_1 = require("../../common");
|
|
6
|
+
function parseDIDStatus(node) {
|
|
7
|
+
if (node.diffType === "CreatedNode") {
|
|
8
|
+
return "created";
|
|
9
|
+
}
|
|
10
|
+
if (node.diffType === "ModifiedNode") {
|
|
11
|
+
return "modified";
|
|
12
|
+
}
|
|
13
|
+
if (node.diffType === "DeletedNode") {
|
|
14
|
+
return "deleted";
|
|
15
|
+
}
|
|
16
|
+
return undefined;
|
|
17
|
+
}
|
|
18
|
+
function summarizeDID(node) {
|
|
19
|
+
const final = node.diffType === "CreatedNode" ? node.newFields : node.finalFields;
|
|
20
|
+
const prev = node.previousFields || {};
|
|
21
|
+
const summary = {
|
|
22
|
+
status: parseDIDStatus(node),
|
|
23
|
+
didID: node.LedgerIndex,
|
|
24
|
+
account: final.Account,
|
|
25
|
+
uri: final.URI,
|
|
26
|
+
data: final.Data,
|
|
27
|
+
didDocument: final.DIDDocument,
|
|
28
|
+
};
|
|
29
|
+
if (prev.URI) {
|
|
30
|
+
summary.uriChange = prev.URI;
|
|
31
|
+
}
|
|
32
|
+
if (prev.Data) {
|
|
33
|
+
summary.dataChanges = prev.Data;
|
|
34
|
+
}
|
|
35
|
+
if (prev.DIDDocument) {
|
|
36
|
+
summary.didDocumentChanges = prev.DIDDocument;
|
|
37
|
+
}
|
|
38
|
+
return (0, common_1.removeUndefined)(summary);
|
|
39
|
+
}
|
|
40
|
+
function parseDIDChanges(metadata) {
|
|
41
|
+
const dids = (0, utils_1.normalizeNodes)(metadata).filter((n) => {
|
|
42
|
+
return n.entryType === "DID";
|
|
43
|
+
});
|
|
44
|
+
return dids.length === 1 ? summarizeDID(dids[0]) : undefined;
|
|
45
|
+
}
|
|
@@ -12,3 +12,5 @@ export { parseEmittedTxns } from "./emitted_txns";
|
|
|
12
12
|
export { parseEscrowChanges } from "./escrow_changes";
|
|
13
13
|
export { parseUNLReportChanges } from "./unl_report_changes";
|
|
14
14
|
export { parseAmmChanges } from "./amm_changes";
|
|
15
|
+
export { parseDIDChanges } from "./did_changes";
|
|
16
|
+
export { parseOracleChanges } from "./oracle_changes";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.parseAmmChanges = exports.parseUNLReportChanges = exports.parseEscrowChanges = exports.parseEmittedTxns = exports.parseHooksExecutions = exports.parseOrderbookChanges = exports.parseChannelChanges = exports.parseLockedBalanceChanges = exports.parseBalanceChanges = exports.parseURITokenSellOfferChanges = exports.parseURITokenChanges = exports.parseNFTokenOfferChanges = exports.parseNFTokenChanges = exports.parseAffectedObjects = void 0;
|
|
3
|
+
exports.parseOracleChanges = exports.parseDIDChanges = exports.parseAmmChanges = exports.parseUNLReportChanges = exports.parseEscrowChanges = exports.parseEmittedTxns = exports.parseHooksExecutions = exports.parseOrderbookChanges = exports.parseChannelChanges = exports.parseLockedBalanceChanges = exports.parseBalanceChanges = exports.parseURITokenSellOfferChanges = exports.parseURITokenChanges = exports.parseNFTokenOfferChanges = exports.parseNFTokenChanges = exports.parseAffectedObjects = void 0;
|
|
4
4
|
var affected_objects_1 = require("./affected_objects");
|
|
5
5
|
Object.defineProperty(exports, "parseAffectedObjects", { enumerable: true, get: function () { return affected_objects_1.parseAffectedObjects; } });
|
|
6
6
|
var nftoken_changes_1 = require("./nftoken_changes");
|
|
@@ -29,3 +29,7 @@ var unl_report_changes_1 = require("./unl_report_changes");
|
|
|
29
29
|
Object.defineProperty(exports, "parseUNLReportChanges", { enumerable: true, get: function () { return unl_report_changes_1.parseUNLReportChanges; } });
|
|
30
30
|
var amm_changes_1 = require("./amm_changes");
|
|
31
31
|
Object.defineProperty(exports, "parseAmmChanges", { enumerable: true, get: function () { return amm_changes_1.parseAmmChanges; } });
|
|
32
|
+
var did_changes_1 = require("./did_changes");
|
|
33
|
+
Object.defineProperty(exports, "parseDIDChanges", { enumerable: true, get: function () { return did_changes_1.parseDIDChanges; } });
|
|
34
|
+
var oracle_changes_1 = require("./oracle_changes");
|
|
35
|
+
Object.defineProperty(exports, "parseOracleChanges", { enumerable: true, get: function () { return oracle_changes_1.parseOracleChanges; } });
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { OraclePriceDataSeriesInterface, FormattedOraclePriceDataSeriesInterface } from "../../types";
|
|
2
|
+
interface FormattedOracleSummaryInterface {
|
|
3
|
+
status?: "created" | "modified" | "deleted";
|
|
4
|
+
oracleID?: string;
|
|
5
|
+
oracleDocumentID?: number;
|
|
6
|
+
provider: string;
|
|
7
|
+
uri?: string;
|
|
8
|
+
assetClass: string;
|
|
9
|
+
lastUpdateTime: number;
|
|
10
|
+
priceDataSeries: FormattedOraclePriceDataSeriesInterface[];
|
|
11
|
+
uriChanges?: string;
|
|
12
|
+
lastUpdateTimeChanges?: number;
|
|
13
|
+
priceDataSeriesChanges?: FormattedPriceDataSeriesChanges[];
|
|
14
|
+
}
|
|
15
|
+
interface FormattedPriceDataSeriesChanges {
|
|
16
|
+
status: "added" | "modified" | "removed";
|
|
17
|
+
baseAsset: string;
|
|
18
|
+
quoteAsset: string;
|
|
19
|
+
assetPrice?: string;
|
|
20
|
+
scale?: number;
|
|
21
|
+
originalAssetPrice?: string;
|
|
22
|
+
assetPriceChange?: string;
|
|
23
|
+
scaleChange?: number;
|
|
24
|
+
originalPriceChange?: string;
|
|
25
|
+
}
|
|
26
|
+
declare function parsePriceDataSeries(series: OraclePriceDataSeriesInterface): FormattedOraclePriceDataSeriesInterface;
|
|
27
|
+
declare function parseOracleChanges(metadata: any): FormattedOracleSummaryInterface | undefined;
|
|
28
|
+
export { parseOracleChanges, parsePriceDataSeries };
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.parseOracleChanges = parseOracleChanges;
|
|
7
|
+
exports.parsePriceDataSeries = parsePriceDataSeries;
|
|
8
|
+
const bignumber_js_1 = __importDefault(require("bignumber.js"));
|
|
9
|
+
const utils_1 = require("../utils");
|
|
10
|
+
const common_1 = require("../../common");
|
|
11
|
+
function parseOracleStatus(node) {
|
|
12
|
+
if (node.diffType === "CreatedNode") {
|
|
13
|
+
return "created";
|
|
14
|
+
}
|
|
15
|
+
if (node.diffType === "ModifiedNode") {
|
|
16
|
+
return "modified";
|
|
17
|
+
}
|
|
18
|
+
if (node.diffType === "DeletedNode") {
|
|
19
|
+
return "deleted";
|
|
20
|
+
}
|
|
21
|
+
return undefined;
|
|
22
|
+
}
|
|
23
|
+
function hexPriceToBigNumber(hex) {
|
|
24
|
+
if (hex === undefined) {
|
|
25
|
+
return undefined;
|
|
26
|
+
}
|
|
27
|
+
if (typeof hex !== "string") {
|
|
28
|
+
throw new Error("Price must be a string.");
|
|
29
|
+
}
|
|
30
|
+
return new bignumber_js_1.default(`0x${hex}`);
|
|
31
|
+
}
|
|
32
|
+
function getOriginalAssetPrice(assetPrice, scale) {
|
|
33
|
+
if (assetPrice === undefined || scale === undefined) {
|
|
34
|
+
return undefined;
|
|
35
|
+
}
|
|
36
|
+
if (assetPrice.isZero()) {
|
|
37
|
+
return assetPrice;
|
|
38
|
+
}
|
|
39
|
+
if (scale === 0) {
|
|
40
|
+
return assetPrice;
|
|
41
|
+
}
|
|
42
|
+
return assetPrice.dividedBy(new bignumber_js_1.default(10).pow(scale));
|
|
43
|
+
}
|
|
44
|
+
function parsePriceDataSeries(series) {
|
|
45
|
+
const assetPrice = hexPriceToBigNumber(series.PriceData.AssetPrice);
|
|
46
|
+
const scale = series.PriceData.Scale;
|
|
47
|
+
const originalAssetPrice = getOriginalAssetPrice(assetPrice, scale);
|
|
48
|
+
return (0, common_1.removeUndefined)({
|
|
49
|
+
baseAsset: series.PriceData.BaseAsset,
|
|
50
|
+
quoteAsset: series.PriceData.QuoteAsset,
|
|
51
|
+
assetPrice: assetPrice?.toString(),
|
|
52
|
+
scale: series.PriceData.Scale,
|
|
53
|
+
originalAssetPrice: originalAssetPrice?.toString(),
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
function summarizePriceDataSeriesChanges(node) {
|
|
57
|
+
const final = node.diffType === "CreatedNode" ? node.newFields : node.finalFields;
|
|
58
|
+
const prev = node.previousFields || {};
|
|
59
|
+
const changes = final.PriceDataSeries.reduce((acc, series) => {
|
|
60
|
+
const prevSeries = prev.PriceDataSeries.find((s) => s.PriceData.BaseAsset === series.PriceData.BaseAsset && s.PriceData.QuoteAsset === series.PriceData.QuoteAsset);
|
|
61
|
+
const priceFinal = hexPriceToBigNumber(series.PriceData.AssetPrice) || new bignumber_js_1.default(0);
|
|
62
|
+
const scaleFinal = series.PriceData.Scale || 0;
|
|
63
|
+
const originalPriceFinal = getOriginalAssetPrice(priceFinal, scaleFinal);
|
|
64
|
+
if (!prevSeries) {
|
|
65
|
+
return acc.concat({
|
|
66
|
+
status: "added",
|
|
67
|
+
baseAsset: series.PriceData.BaseAsset,
|
|
68
|
+
quoteAsset: series.PriceData.QuoteAsset,
|
|
69
|
+
assetPrice: priceFinal?.toString(),
|
|
70
|
+
scale: scaleFinal,
|
|
71
|
+
originalAssetPrice: originalPriceFinal?.toString(),
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
const pricePrev = hexPriceToBigNumber(prevSeries.PriceData.AssetPrice) || new bignumber_js_1.default(0);
|
|
75
|
+
const scalePrev = prevSeries.PriceData.Scale || 0;
|
|
76
|
+
const assetPriceChange = (priceFinal || new bignumber_js_1.default(0)).minus(pricePrev);
|
|
77
|
+
const scaleChange = (scaleFinal ?? 0) - scalePrev;
|
|
78
|
+
if (!assetPriceChange.isZero() || scaleChange !== 0) {
|
|
79
|
+
const originalPricePrev = getOriginalAssetPrice(pricePrev, scalePrev) || new bignumber_js_1.default(0);
|
|
80
|
+
const originalPriceChange = (originalPriceFinal || new bignumber_js_1.default(0)).minus(originalPricePrev);
|
|
81
|
+
return acc.concat((0, common_1.removeUndefined)({
|
|
82
|
+
status: "modified",
|
|
83
|
+
baseAsset: series.PriceData.BaseAsset,
|
|
84
|
+
quoteAsset: series.PriceData.QuoteAsset,
|
|
85
|
+
assetPrice: priceFinal?.toString(),
|
|
86
|
+
scale: scaleFinal,
|
|
87
|
+
originalAssetPrice: originalPriceFinal?.toString(),
|
|
88
|
+
assetPriceChange: assetPriceChange.isZero() ? undefined : assetPriceChange?.toString(),
|
|
89
|
+
scaleChange: scaleChange || undefined,
|
|
90
|
+
originalPriceChange: originalPriceChange.isZero() ? undefined : originalPriceChange.toString(),
|
|
91
|
+
}));
|
|
92
|
+
}
|
|
93
|
+
return acc;
|
|
94
|
+
}, []);
|
|
95
|
+
const removed = prev.PriceDataSeries.filter((s) => {
|
|
96
|
+
return !final.PriceDataSeries.find((series) => series.PriceData.BaseAsset === s.PriceData.BaseAsset && series.PriceData.QuoteAsset === s.PriceData.QuoteAsset);
|
|
97
|
+
});
|
|
98
|
+
if (removed.length > 0) {
|
|
99
|
+
return changes.concat(removed.map((s) => {
|
|
100
|
+
const price = hexPriceToBigNumber(s.PriceData.AssetPrice);
|
|
101
|
+
return {
|
|
102
|
+
status: "removed",
|
|
103
|
+
baseAsset: s.PriceData.BaseAsset,
|
|
104
|
+
quoteAsset: s.PriceData.QuoteAsset,
|
|
105
|
+
assetPrice: price?.toString(),
|
|
106
|
+
scale: s.PriceData.Scale,
|
|
107
|
+
originalAssetPrice: getOriginalAssetPrice(price, s.PriceData.Scale),
|
|
108
|
+
};
|
|
109
|
+
}));
|
|
110
|
+
}
|
|
111
|
+
if (changes.length === 0) {
|
|
112
|
+
return undefined;
|
|
113
|
+
}
|
|
114
|
+
return changes;
|
|
115
|
+
}
|
|
116
|
+
function summarizeOracle(node) {
|
|
117
|
+
const final = node.diffType === "CreatedNode" ? node.newFields : node.finalFields;
|
|
118
|
+
const prev = node.previousFields || {};
|
|
119
|
+
const summary = {
|
|
120
|
+
status: parseOracleStatus(node),
|
|
121
|
+
oracleID: node.LedgerIndex,
|
|
122
|
+
oracleDocumentID: final.OracleDocumentID,
|
|
123
|
+
provider: final.Provider,
|
|
124
|
+
uri: final.URI,
|
|
125
|
+
assetClass: final.AssetClass,
|
|
126
|
+
lastUpdateTime: final.LastUpdateTime,
|
|
127
|
+
priceDataSeries: final.PriceDataSeries.map(parsePriceDataSeries),
|
|
128
|
+
};
|
|
129
|
+
if (prev.URI) {
|
|
130
|
+
summary.uriChanges = final.URI;
|
|
131
|
+
}
|
|
132
|
+
if (prev.LastUpdateTime) {
|
|
133
|
+
summary.lastUpdateTimeChanges = final.LastUpdateTime - (prev.LastUpdateTime || 0);
|
|
134
|
+
}
|
|
135
|
+
if (prev.PriceDataSeries) {
|
|
136
|
+
summary.priceDataSeriesChanges = summarizePriceDataSeriesChanges(node);
|
|
137
|
+
}
|
|
138
|
+
return (0, common_1.removeUndefined)(summary);
|
|
139
|
+
}
|
|
140
|
+
function parseOracleChanges(metadata) {
|
|
141
|
+
const oracles = (0, utils_1.normalizeNodes)(metadata).filter((n) => {
|
|
142
|
+
return n.entryType === "Oracle";
|
|
143
|
+
});
|
|
144
|
+
return oracles.length === 1 ? summarizeOracle(oracles[0]) : undefined;
|
|
145
|
+
}
|
package/lib/parse/outcome.js
CHANGED
|
@@ -79,6 +79,8 @@ function parseOutcome(tx, nativeCurrency, definitions) {
|
|
|
79
79
|
const emittedTxns = (0, index_1.parseEmittedTxns)(tx, definitions);
|
|
80
80
|
const unlReportChanges = (0, index_1.parseUNLReportChanges)(tx);
|
|
81
81
|
const ammChanges = (0, index_1.parseAmmChanges)(metadata);
|
|
82
|
+
const didChanges = (0, index_1.parseDIDChanges)(metadata);
|
|
83
|
+
const oracleChanges = (0, index_1.parseOracleChanges)(metadata);
|
|
82
84
|
removeEmptyCounterpartyInBalanceChanges(balanceChanges);
|
|
83
85
|
removeEmptyCounterpartyInBalanceChanges(lockedBalanceChanges);
|
|
84
86
|
removeEmptyCounterpartyInOrderbookChanges(orderbookChanges);
|
|
@@ -97,6 +99,8 @@ function parseOutcome(tx, nativeCurrency, definitions) {
|
|
|
97
99
|
uritokenSellOfferChanges: Object.keys(uritokenSellOfferChanges).length > 0 ? uritokenSellOfferChanges : undefined,
|
|
98
100
|
affectedObjects: affectedObjects ? (0, common_1.removeUndefined)(affectedObjects) : undefined,
|
|
99
101
|
ammChanges: ammChanges ? (0, common_1.removeUndefined)(ammChanges) : undefined,
|
|
102
|
+
didChanges: didChanges ? (0, common_1.removeUndefined)(didChanges) : undefined,
|
|
103
|
+
oracleChanges: oracleChanges ? (0, common_1.removeUndefined)(oracleChanges) : undefined,
|
|
100
104
|
unlReportChanges,
|
|
101
105
|
hooksExecutions,
|
|
102
106
|
emittedTxns,
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
+
const assert = __importStar(require("assert"));
|
|
27
|
+
const common_1 = require("../../common");
|
|
28
|
+
const emit_details_1 = require("../ledger/emit_details");
|
|
29
|
+
const memos_1 = require("../ledger/memos");
|
|
30
|
+
const account_1 = require("../ledger/account");
|
|
31
|
+
function parseDidDelete(tx) {
|
|
32
|
+
assert.ok(tx.TransactionType === "DIDDelete");
|
|
33
|
+
const source = (0, common_1.removeUndefined)({
|
|
34
|
+
address: (0, account_1.parseAccount)(tx.Account),
|
|
35
|
+
tag: tx.SourceTag,
|
|
36
|
+
});
|
|
37
|
+
return (0, common_1.removeUndefined)({
|
|
38
|
+
source: Object.keys(source).length > 0 ? source : undefined,
|
|
39
|
+
emittedDetails: (0, emit_details_1.parseEmittedDetails)(tx),
|
|
40
|
+
memos: (0, memos_1.parseMemos)(tx),
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
exports.default = parseDidDelete;
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
+
const assert = __importStar(require("assert"));
|
|
27
|
+
const common_1 = require("../../common");
|
|
28
|
+
const emit_details_1 = require("../ledger/emit_details");
|
|
29
|
+
const memos_1 = require("../ledger/memos");
|
|
30
|
+
const account_1 = require("../ledger/account");
|
|
31
|
+
function parseDidSet(tx) {
|
|
32
|
+
assert.ok(tx.TransactionType === "DIDSet");
|
|
33
|
+
const source = (0, common_1.removeUndefined)({
|
|
34
|
+
address: (0, account_1.parseAccount)(tx.Account),
|
|
35
|
+
tag: tx.SourceTag,
|
|
36
|
+
});
|
|
37
|
+
return (0, common_1.removeUndefined)({
|
|
38
|
+
source: Object.keys(source).length > 0 ? source : undefined,
|
|
39
|
+
uri: tx.URI,
|
|
40
|
+
data: tx.Data,
|
|
41
|
+
didDocument: tx.DIDDocument,
|
|
42
|
+
emittedDetails: (0, emit_details_1.parseEmittedDetails)(tx),
|
|
43
|
+
memos: (0, memos_1.parseMemos)(tx),
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
exports.default = parseDidSet;
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
+
const assert = __importStar(require("assert"));
|
|
27
|
+
const common_1 = require("../../common");
|
|
28
|
+
const emit_details_1 = require("../ledger/emit_details");
|
|
29
|
+
const memos_1 = require("../ledger/memos");
|
|
30
|
+
const account_1 = require("../ledger/account");
|
|
31
|
+
function parseDidDelete(tx) {
|
|
32
|
+
assert.ok(tx.TransactionType === "OracleDelete");
|
|
33
|
+
const source = (0, common_1.removeUndefined)({
|
|
34
|
+
address: (0, account_1.parseAccount)(tx.Account),
|
|
35
|
+
tag: tx.SourceTag,
|
|
36
|
+
});
|
|
37
|
+
return (0, common_1.removeUndefined)({
|
|
38
|
+
source: Object.keys(source).length > 0 ? source : undefined,
|
|
39
|
+
oracleDocumentID: tx.OracleDocumentID,
|
|
40
|
+
emittedDetails: (0, emit_details_1.parseEmittedDetails)(tx),
|
|
41
|
+
memos: (0, memos_1.parseMemos)(tx),
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
exports.default = parseDidDelete;
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
+
const assert = __importStar(require("assert"));
|
|
27
|
+
const common_1 = require("../../common");
|
|
28
|
+
const emit_details_1 = require("../ledger/emit_details");
|
|
29
|
+
const memos_1 = require("../ledger/memos");
|
|
30
|
+
const account_1 = require("../ledger/account");
|
|
31
|
+
const oracle_changes_1 = require("../outcome/oracle_changes");
|
|
32
|
+
function parseDidSet(tx) {
|
|
33
|
+
assert.ok(tx.TransactionType === "OracleSet");
|
|
34
|
+
const source = (0, common_1.removeUndefined)({
|
|
35
|
+
address: (0, account_1.parseAccount)(tx.Account),
|
|
36
|
+
tag: tx.SourceTag,
|
|
37
|
+
});
|
|
38
|
+
return (0, common_1.removeUndefined)({
|
|
39
|
+
source: Object.keys(source).length > 0 ? source : undefined,
|
|
40
|
+
oracleDocumentID: tx.OracleDocumentID,
|
|
41
|
+
provider: tx.Provider,
|
|
42
|
+
uri: tx.URI,
|
|
43
|
+
assetClass: tx.AssetClass,
|
|
44
|
+
lastUpdateTime: tx.LastUpdateTime,
|
|
45
|
+
priceDataSeries: tx.PriceDataSeries ? tx.PriceDataSeries.map(oracle_changes_1.parsePriceDataSeries) : undefined,
|
|
46
|
+
emittedDetails: (0, emit_details_1.parseEmittedDetails)(tx),
|
|
47
|
+
memos: (0, memos_1.parseMemos)(tx),
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
exports.default = parseDidSet;
|
package/lib/parse/transaction.js
CHANGED
|
@@ -46,6 +46,10 @@ const amm_delete_1 = __importDefault(require("./specification/amm-delete"));
|
|
|
46
46
|
const amm_deposit_1 = __importDefault(require("./specification/amm-deposit"));
|
|
47
47
|
const amm_withdraw_1 = __importDefault(require("./specification/amm-withdraw"));
|
|
48
48
|
const amm_vote_1 = __importDefault(require("./specification/amm-vote"));
|
|
49
|
+
const did_set_1 = __importDefault(require("./specification/did-set"));
|
|
50
|
+
const did_delete_1 = __importDefault(require("./specification/did-delete"));
|
|
51
|
+
const oracle_set_1 = __importDefault(require("./specification/oracle-set"));
|
|
52
|
+
const oracle_delete_1 = __importDefault(require("./specification/oracle-delete"));
|
|
49
53
|
const genesis_mint_1 = __importDefault(require("./specification/genesis-mint"));
|
|
50
54
|
const amendment_1 = __importDefault(require("./specification/amendment"));
|
|
51
55
|
const fee_update_1 = __importDefault(require("./specification/fee-update"));
|
|
@@ -90,6 +94,10 @@ const transactionTypeToType = {
|
|
|
90
94
|
AMMDeposit: "ammDeposit",
|
|
91
95
|
AMMWithdraw: "ammWithdraw",
|
|
92
96
|
AMMVote: "ammVote",
|
|
97
|
+
DIDSet: "didSet",
|
|
98
|
+
DIDDelete: "didDelete",
|
|
99
|
+
OracleSet: "oracleSet",
|
|
100
|
+
OracleDelete: "oracleDelete",
|
|
93
101
|
GenesisMint: "genesisMint",
|
|
94
102
|
EnableAmendment: "amendment",
|
|
95
103
|
SetFee: "feeUpdate",
|
|
@@ -136,6 +144,10 @@ const parserTypeFunc = {
|
|
|
136
144
|
ammDeposit: amm_deposit_1.default,
|
|
137
145
|
ammWithdraw: amm_withdraw_1.default,
|
|
138
146
|
ammVote: amm_vote_1.default,
|
|
147
|
+
didSet: did_set_1.default,
|
|
148
|
+
didDelete: did_delete_1.default,
|
|
149
|
+
oracleSet: oracle_set_1.default,
|
|
150
|
+
oracleDelete: oracle_delete_1.default,
|
|
139
151
|
genesisMint: genesis_mint_1.default,
|
|
140
152
|
amendment: amendment_1.default,
|
|
141
153
|
feeUpdate: fee_update_1.default,
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { FormattedBaseSpecification } from "./specification";
|
|
2
|
+
export type FormattedDIDSetSpecification = {
|
|
3
|
+
uri: string;
|
|
4
|
+
data: string;
|
|
5
|
+
didDocument: string;
|
|
6
|
+
} & FormattedBaseSpecification;
|
|
7
|
+
export type FormattedDIDDeleteSpecification = {} & FormattedBaseSpecification;
|
package/lib/types/did.js
ADDED
package/lib/types/index.d.ts
CHANGED
|
@@ -5,6 +5,7 @@ export * from "./amounts";
|
|
|
5
5
|
export * from "./amm";
|
|
6
6
|
export * from "./checks";
|
|
7
7
|
export * from "./deposits";
|
|
8
|
+
export * from "./did";
|
|
8
9
|
export * from "./escrows";
|
|
9
10
|
export * from "./fees";
|
|
10
11
|
export * from "./gateway_balances";
|
|
@@ -13,6 +14,7 @@ export * from "./ledger_data";
|
|
|
13
14
|
export * from "./ledger_entries";
|
|
14
15
|
export * from "./memos";
|
|
15
16
|
export * from "./offers";
|
|
17
|
+
export * from "./oracle";
|
|
16
18
|
export * from "./queue_data";
|
|
17
19
|
export * from "./settings";
|
|
18
20
|
export * from "./signers";
|
package/lib/types/index.js
CHANGED
|
@@ -21,6 +21,7 @@ __exportStar(require("./amounts"), exports);
|
|
|
21
21
|
__exportStar(require("./amm"), exports);
|
|
22
22
|
__exportStar(require("./checks"), exports);
|
|
23
23
|
__exportStar(require("./deposits"), exports);
|
|
24
|
+
__exportStar(require("./did"), exports);
|
|
24
25
|
__exportStar(require("./escrows"), exports);
|
|
25
26
|
__exportStar(require("./fees"), exports);
|
|
26
27
|
__exportStar(require("./gateway_balances"), exports);
|
|
@@ -29,6 +30,7 @@ __exportStar(require("./ledger_data"), exports);
|
|
|
29
30
|
__exportStar(require("./ledger_entries"), exports);
|
|
30
31
|
__exportStar(require("./memos"), exports);
|
|
31
32
|
__exportStar(require("./offers"), exports);
|
|
33
|
+
__exportStar(require("./oracle"), exports);
|
|
32
34
|
__exportStar(require("./queue_data"), exports);
|
|
33
35
|
__exportStar(require("./settings"), exports);
|
|
34
36
|
__exportStar(require("./signers"), exports);
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { FormattedBaseSpecification } from "./specification";
|
|
2
|
+
export interface OraclePriceDataSeriesInterface {
|
|
3
|
+
PriceData: {
|
|
4
|
+
BaseAsset: string;
|
|
5
|
+
QuoteAsset: string;
|
|
6
|
+
AssetPrice?: string;
|
|
7
|
+
Scale?: number;
|
|
8
|
+
};
|
|
9
|
+
}
|
|
10
|
+
export interface FormattedOraclePriceDataSeriesInterface {
|
|
11
|
+
baseAsset: string;
|
|
12
|
+
quoteAsset: string;
|
|
13
|
+
assetPrice?: string;
|
|
14
|
+
scale?: number;
|
|
15
|
+
originalAssetPriceChange?: string;
|
|
16
|
+
}
|
|
17
|
+
export type FormattedOracleSetSpecification = {
|
|
18
|
+
oracleDocumentID: number;
|
|
19
|
+
provider: string;
|
|
20
|
+
uri?: string;
|
|
21
|
+
assetClass: string;
|
|
22
|
+
lastUpdateTime: number;
|
|
23
|
+
priceDataSeries: FormattedOraclePriceDataSeriesInterface[];
|
|
24
|
+
} & FormattedBaseSpecification;
|
|
25
|
+
export type FormattedOracleDeleteSpecification = {
|
|
26
|
+
oracleDocumentID: number;
|
|
27
|
+
} & FormattedBaseSpecification;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bithomp/xrpl-api",
|
|
3
|
-
"version": "3.1.
|
|
3
|
+
"version": "3.1.14",
|
|
4
4
|
"description": "A Bithomp JavaScript/TypeScript library for interacting with the XRP Ledger",
|
|
5
5
|
"main": "lib/index.js",
|
|
6
6
|
"types": "lib/index.d.ts",
|
|
@@ -55,7 +55,7 @@
|
|
|
55
55
|
"axios": "^1.7.7",
|
|
56
56
|
"base-x": "^5.0.0",
|
|
57
57
|
"bignumber.js": "^9.1.2",
|
|
58
|
-
"elliptic": "^6.
|
|
58
|
+
"elliptic": "^6.6.0",
|
|
59
59
|
"lodash": "^4.17.21",
|
|
60
60
|
"ripple-address-codec": "^5.0.0",
|
|
61
61
|
"ripple-binary-codec": "^2.1.0",
|
|
@@ -64,7 +64,7 @@
|
|
|
64
64
|
"devDependencies": {
|
|
65
65
|
"@types/chai": "^4.3.19",
|
|
66
66
|
"@types/chai-as-promised": "^7.1.8",
|
|
67
|
-
"@types/lodash": "^4.17.
|
|
67
|
+
"@types/lodash": "^4.17.12",
|
|
68
68
|
"@types/mocha": "^10.0.9",
|
|
69
69
|
"@types/nconf": "^0.10.7",
|
|
70
70
|
"@types/node": "^20.14.15",
|