@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 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.data) {
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();
@@ -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
  }
@@ -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
+ }
@@ -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,3 @@
1
+ import { FormattedDIDDeleteSpecification } from "../../types/did";
2
+ declare function parseDidDelete(tx: any): FormattedDIDDeleteSpecification;
3
+ export default parseDidDelete;
@@ -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,3 @@
1
+ import { FormattedDIDSetSpecification } from "../../types/did";
2
+ declare function parseDidSet(tx: any): FormattedDIDSetSpecification;
3
+ export default parseDidSet;
@@ -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,3 @@
1
+ import { FormattedOracleDeleteSpecification } from "../../types/oracle";
2
+ declare function parseDidDelete(tx: any): FormattedOracleDeleteSpecification;
3
+ export default parseDidDelete;
@@ -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,3 @@
1
+ import { FormattedOracleSetSpecification } from "../../types/oracle";
2
+ declare function parseDidSet(tx: any): FormattedOracleSetSpecification;
3
+ export default parseDidSet;
@@ -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;
@@ -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;
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -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";
@@ -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;
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bithomp/xrpl-api",
3
- "version": "3.1.12",
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.5.7",
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.11",
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",