@ledgerhq/coin-xrp 0.9.2 → 1.0.0-nightly.1
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/.turbo/turbo-build.log +2 -2
- package/CHANGELOG.md +11 -10
- package/lib/api/index.d.ts.map +1 -1
- package/lib/api/index.integ.test.js +35 -36
- package/lib/api/index.integ.test.js.map +1 -1
- package/lib/api/index.js +65 -50
- package/lib/api/index.js.map +1 -1
- package/lib/api/index.test.js +66 -44
- package/lib/api/index.test.js.map +1 -1
- package/lib/bridge/broadcast.js +3 -12
- package/lib/bridge/broadcast.js.map +1 -1
- package/lib/bridge/estimateMaxSpendable.js +9 -14
- package/lib/bridge/estimateMaxSpendable.js.map +1 -1
- package/lib/bridge/getTransactionStatus.js +4 -13
- package/lib/bridge/getTransactionStatus.js.map +1 -1
- package/lib/bridge/prepareTransaction.js +4 -13
- package/lib/bridge/prepareTransaction.js.map +1 -1
- package/lib/bridge/signOperation.js +60 -68
- package/lib/bridge/signOperation.js.map +1 -1
- package/lib/bridge/synchronization.js +32 -45
- package/lib/bridge/synchronization.js.map +1 -1
- package/lib/bridge/synchronization.test.js +21 -17
- package/lib/bridge/synchronization.test.js.map +1 -1
- package/lib/bridge/transaction.js +16 -4
- package/lib/bridge/transaction.js.map +1 -1
- package/lib/logic/broadcast.js +8 -19
- package/lib/logic/broadcast.js.map +1 -1
- package/lib/logic/broadcast.test.js +6 -15
- package/lib/logic/broadcast.test.js.map +1 -1
- package/lib/logic/combine.js +2 -2
- package/lib/logic/combine.js.map +1 -1
- package/lib/logic/craftTransaction.js +28 -34
- package/lib/logic/craftTransaction.js.map +1 -1
- package/lib/logic/craftTransaction.test.js +8 -17
- package/lib/logic/craftTransaction.test.js.map +1 -1
- package/lib/logic/estimateFees.js +17 -28
- package/lib/logic/estimateFees.js.map +1 -1
- package/lib/logic/estimateFees.test.js +10 -19
- package/lib/logic/estimateFees.test.js.map +1 -1
- package/lib/logic/getBalance.js +3 -14
- package/lib/logic/getBalance.js.map +1 -1
- package/lib/logic/getBalance.test.js +4 -13
- package/lib/logic/getBalance.test.js.map +1 -1
- package/lib/logic/lastBlock.js +7 -18
- package/lib/logic/lastBlock.js.map +1 -1
- package/lib/logic/listOperations.d.ts +15 -5
- package/lib/logic/listOperations.d.ts.map +1 -1
- package/lib/logic/listOperations.js +84 -71
- package/lib/logic/listOperations.js.map +1 -1
- package/lib/logic/listOperations.test.js +66 -62
- package/lib/logic/listOperations.test.js.map +1 -1
- package/lib/logic/utils.js +9 -18
- package/lib/logic/utils.js.map +1 -1
- package/lib/logic/utils.test.js +9 -18
- package/lib/logic/utils.test.js.map +1 -1
- package/lib/network/index.d.ts +6 -3
- package/lib/network/index.d.ts.map +1 -1
- package/lib/network/index.js +40 -48
- package/lib/network/index.js.map +1 -1
- package/lib/network/index.test.js +9 -18
- package/lib/network/index.test.js.map +1 -1
- package/lib/network/types.d.ts +5 -0
- package/lib/network/types.d.ts.map +1 -1
- package/lib/network/types.js.map +1 -1
- package/lib/signer/getAddress.js +3 -12
- package/lib/signer/getAddress.js.map +1 -1
- package/lib/test/cli.js +5 -1
- package/lib/test/cli.js.map +1 -1
- package/lib-es/api/index.d.ts.map +1 -1
- package/lib-es/api/index.integ.test.js +35 -36
- package/lib-es/api/index.integ.test.js.map +1 -1
- package/lib-es/api/index.js +65 -50
- package/lib-es/api/index.js.map +1 -1
- package/lib-es/api/index.test.js +66 -44
- package/lib-es/api/index.test.js.map +1 -1
- package/lib-es/bridge/broadcast.js +3 -12
- package/lib-es/bridge/broadcast.js.map +1 -1
- package/lib-es/bridge/estimateMaxSpendable.js +9 -14
- package/lib-es/bridge/estimateMaxSpendable.js.map +1 -1
- package/lib-es/bridge/getTransactionStatus.js +4 -13
- package/lib-es/bridge/getTransactionStatus.js.map +1 -1
- package/lib-es/bridge/prepareTransaction.js +4 -13
- package/lib-es/bridge/prepareTransaction.js.map +1 -1
- package/lib-es/bridge/signOperation.js +60 -68
- package/lib-es/bridge/signOperation.js.map +1 -1
- package/lib-es/bridge/synchronization.js +32 -45
- package/lib-es/bridge/synchronization.js.map +1 -1
- package/lib-es/bridge/synchronization.test.js +21 -17
- package/lib-es/bridge/synchronization.test.js.map +1 -1
- package/lib-es/bridge/transaction.js +16 -4
- package/lib-es/bridge/transaction.js.map +1 -1
- package/lib-es/logic/broadcast.js +8 -19
- package/lib-es/logic/broadcast.js.map +1 -1
- package/lib-es/logic/broadcast.test.js +6 -15
- package/lib-es/logic/broadcast.test.js.map +1 -1
- package/lib-es/logic/combine.js +2 -2
- package/lib-es/logic/combine.js.map +1 -1
- package/lib-es/logic/craftTransaction.js +28 -34
- package/lib-es/logic/craftTransaction.js.map +1 -1
- package/lib-es/logic/craftTransaction.test.js +8 -17
- package/lib-es/logic/craftTransaction.test.js.map +1 -1
- package/lib-es/logic/estimateFees.js +17 -28
- package/lib-es/logic/estimateFees.js.map +1 -1
- package/lib-es/logic/estimateFees.test.js +10 -19
- package/lib-es/logic/estimateFees.test.js.map +1 -1
- package/lib-es/logic/getBalance.js +3 -14
- package/lib-es/logic/getBalance.js.map +1 -1
- package/lib-es/logic/getBalance.test.js +4 -13
- package/lib-es/logic/getBalance.test.js.map +1 -1
- package/lib-es/logic/lastBlock.js +7 -18
- package/lib-es/logic/lastBlock.js.map +1 -1
- package/lib-es/logic/listOperations.d.ts +15 -5
- package/lib-es/logic/listOperations.d.ts.map +1 -1
- package/lib-es/logic/listOperations.js +84 -71
- package/lib-es/logic/listOperations.js.map +1 -1
- package/lib-es/logic/listOperations.test.js +66 -62
- package/lib-es/logic/listOperations.test.js.map +1 -1
- package/lib-es/logic/utils.js +9 -18
- package/lib-es/logic/utils.js.map +1 -1
- package/lib-es/logic/utils.test.js +9 -18
- package/lib-es/logic/utils.test.js.map +1 -1
- package/lib-es/network/index.d.ts +6 -3
- package/lib-es/network/index.d.ts.map +1 -1
- package/lib-es/network/index.js +39 -47
- package/lib-es/network/index.js.map +1 -1
- package/lib-es/network/index.test.js +9 -18
- package/lib-es/network/index.test.js.map +1 -1
- package/lib-es/network/types.d.ts +5 -0
- package/lib-es/network/types.d.ts.map +1 -1
- package/lib-es/network/types.js.map +1 -1
- package/lib-es/signer/getAddress.js +3 -12
- package/lib-es/signer/getAddress.js.map +1 -1
- package/lib-es/test/cli.js +5 -1
- package/lib-es/test/cli.js.map +1 -1
- package/package.json +7 -6
- package/src/api/index.integ.test.ts +12 -6
- package/src/api/index.test.ts +119 -75
- package/src/api/index.ts +62 -10
- package/src/bridge/synchronization.test.ts +31 -15
- package/src/logic/listOperations.test.ts +104 -85
- package/src/logic/listOperations.ts +47 -34
- package/src/network/index.ts +21 -8
- package/src/network/types.ts +6 -0
- package/tsconfig.json +0 -1
|
@@ -1,12 +1,3 @@
|
|
|
1
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
-
});
|
|
9
|
-
};
|
|
10
1
|
import BigNumber from "bignumber.js";
|
|
11
2
|
import invariant from "invariant";
|
|
12
3
|
import { encode } from "ripple-binary-codec";
|
|
@@ -15,30 +6,33 @@ import { getLedgerIndex } from "../network";
|
|
|
15
6
|
import { UINT32_MAX, validateTag } from "./utils";
|
|
16
7
|
const LEDGER_OFFSET = 20;
|
|
17
8
|
const { TRANSACTION_TYPES } = XrplDefinitions;
|
|
18
|
-
export function craftTransaction(account, transaction, publicKey) {
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
:
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
};
|
|
42
|
-
|
|
9
|
+
export async function craftTransaction(account, transaction, publicKey) {
|
|
10
|
+
const tag = transaction.tag ? transaction.tag : undefined;
|
|
11
|
+
const xrplTransaction = {
|
|
12
|
+
TransactionType: "Payment",
|
|
13
|
+
Account: account.address,
|
|
14
|
+
Amount: transaction.amount.toString(),
|
|
15
|
+
Destination: transaction.recipient,
|
|
16
|
+
DestinationTag: tag,
|
|
17
|
+
Fee: transaction.fee.toString(),
|
|
18
|
+
Flags: 2147483648,
|
|
19
|
+
Sequence: account.nextSequenceNumber,
|
|
20
|
+
LastLedgerSequence: (await getLedgerIndex()) + LEDGER_OFFSET,
|
|
21
|
+
};
|
|
22
|
+
if (tag) {
|
|
23
|
+
invariant(validateTag(new BigNumber(tag)), `tag is set but is not in a valid format, should be between [0 - ${UINT32_MAX.toString()}]`);
|
|
24
|
+
}
|
|
25
|
+
const serializedTransaction = publicKey
|
|
26
|
+
? encode({
|
|
27
|
+
...xrplTransaction,
|
|
28
|
+
SigningPubKey: publicKey,
|
|
29
|
+
})
|
|
30
|
+
: encode({
|
|
31
|
+
...xrplTransaction,
|
|
32
|
+
});
|
|
33
|
+
return {
|
|
34
|
+
xrplTransaction,
|
|
35
|
+
serializedTransaction,
|
|
36
|
+
};
|
|
43
37
|
}
|
|
44
38
|
//# sourceMappingURL=craftTransaction.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"craftTransaction.js","sourceRoot":"","sources":["../../src/logic/craftTransaction.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"craftTransaction.js","sourceRoot":"","sources":["../../src/logic/craftTransaction.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,cAAc,CAAC;AACrC,OAAO,SAAS,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,eAAe,MAAM,iDAAiD,CAAC;AAC9E,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAElD,MAAM,aAAa,GAAG,EAAE,CAAC;AAEzB,MAAM,EAAE,iBAAiB,EAAE,GAAG,eAAe,CAAC;AAe9C,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,OAGC,EACD,WAKC,EACD,SAAkB;IAKlB,MAAM,GAAG,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC;IAC1D,MAAM,eAAe,GAAoB;QACvC,eAAe,EAAE,SAAS;QAC1B,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,QAAQ,EAAE;QACrC,WAAW,EAAE,WAAW,CAAC,SAAS;QAClC,cAAc,EAAE,GAAG;QACnB,GAAG,EAAE,WAAW,CAAC,GAAG,CAAC,QAAQ,EAAE;QAC/B,KAAK,EAAE,UAAU;QACjB,QAAQ,EAAE,OAAO,CAAC,kBAAkB;QACpC,kBAAkB,EAAE,CAAC,MAAM,cAAc,EAAE,CAAC,GAAG,aAAa;KAC7D,CAAC;IAEF,IAAI,GAAG,EAAE,CAAC;QACR,SAAS,CACP,WAAW,CAAC,IAAI,SAAS,CAAC,GAAG,CAAC,CAAC,EAC/B,mEAAmE,UAAU,CAAC,QAAQ,EAAE,GAAG,CAC5F,CAAC;IACJ,CAAC;IAED,MAAM,qBAAqB,GAAG,SAAS;QACrC,CAAC,CAAC,MAAM,CAAC;YACL,GAAG,eAAe;YAClB,aAAa,EAAE,SAAS;SACzB,CAAC;QACJ,CAAC,CAAC,MAAM,CAAC;YACL,GAAG,eAAe;SACnB,CAAC,CAAC;IAEP,OAAO;QACL,eAAe;QACf,qBAAqB;KACtB,CAAC;AACJ,CAAC"}
|
|
@@ -1,18 +1,9 @@
|
|
|
1
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
-
});
|
|
9
|
-
};
|
|
10
1
|
import { craftTransaction } from "./craftTransaction";
|
|
11
2
|
jest.mock("../network", () => ({
|
|
12
3
|
getLedgerIndex: () => 1,
|
|
13
4
|
}));
|
|
14
5
|
describe("craftTransaction", () => {
|
|
15
|
-
it("returns a valid transaction object when no pubkey is provided", () =>
|
|
6
|
+
it("returns a valid transaction object when no pubkey is provided", async () => {
|
|
16
7
|
// Given
|
|
17
8
|
const account = {
|
|
18
9
|
address: "rPDf6SQStnNmw1knCu1ei7h6BcDAEUUqn5",
|
|
@@ -20,11 +11,11 @@ describe("craftTransaction", () => {
|
|
|
20
11
|
};
|
|
21
12
|
const transaction = {
|
|
22
13
|
recipient: "rJe1St1G6BWMFmdrrcT7NdD3XT1NxTMEWN",
|
|
23
|
-
amount: BigInt(
|
|
14
|
+
amount: BigInt(100_000_000),
|
|
24
15
|
fee: BigInt(100),
|
|
25
16
|
};
|
|
26
17
|
// When
|
|
27
|
-
const result =
|
|
18
|
+
const result = await craftTransaction(account, transaction);
|
|
28
19
|
// Then
|
|
29
20
|
expect(result).toBeDefined();
|
|
30
21
|
expect(result.xrplTransaction).toEqual({
|
|
@@ -39,8 +30,8 @@ describe("craftTransaction", () => {
|
|
|
39
30
|
LastLedgerSequence: 21,
|
|
40
31
|
});
|
|
41
32
|
expect(result.serializedTransaction).toBeDefined();
|
|
42
|
-
})
|
|
43
|
-
it("returns a valid transaction object when pubky is provided", () =>
|
|
33
|
+
});
|
|
34
|
+
it("returns a valid transaction object when pubky is provided", async () => {
|
|
44
35
|
// Given
|
|
45
36
|
const account = {
|
|
46
37
|
address: "rPDf6SQStnNmw1knCu1ei7h6BcDAEUUqn5",
|
|
@@ -48,12 +39,12 @@ describe("craftTransaction", () => {
|
|
|
48
39
|
};
|
|
49
40
|
const transaction = {
|
|
50
41
|
recipient: "rJe1St1G6BWMFmdrrcT7NdD3XT1NxTMEWN",
|
|
51
|
-
amount: BigInt(
|
|
42
|
+
amount: BigInt(100_000_000),
|
|
52
43
|
fee: BigInt(100),
|
|
53
44
|
};
|
|
54
45
|
const pubKey = "public_key";
|
|
55
46
|
// When
|
|
56
|
-
const result =
|
|
47
|
+
const result = await craftTransaction(account, transaction, pubKey);
|
|
57
48
|
// Then
|
|
58
49
|
expect(result).toBeDefined();
|
|
59
50
|
expect(result.xrplTransaction).toEqual({
|
|
@@ -68,6 +59,6 @@ describe("craftTransaction", () => {
|
|
|
68
59
|
LastLedgerSequence: 21,
|
|
69
60
|
});
|
|
70
61
|
expect(result.serializedTransaction).toBeDefined();
|
|
71
|
-
})
|
|
62
|
+
});
|
|
72
63
|
});
|
|
73
64
|
//# sourceMappingURL=craftTransaction.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"craftTransaction.test.js","sourceRoot":"","sources":["../../src/logic/craftTransaction.test.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"craftTransaction.test.js","sourceRoot":"","sources":["../../src/logic/craftTransaction.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAEtD,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,GAAG,EAAE,CAAC,CAAC;IAC7B,cAAc,EAAE,GAAG,EAAE,CAAC,CAAC;CACxB,CAAC,CAAC,CAAC;AAEJ,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;IAChC,EAAE,CAAC,+DAA+D,EAAE,KAAK,IAAI,EAAE;QAC7E,QAAQ;QACR,MAAM,OAAO,GAAG;YACd,OAAO,EAAE,oCAAoC;YAC7C,kBAAkB,EAAE,CAAC;SACtB,CAAC;QACF,MAAM,WAAW,GAAG;YAClB,SAAS,EAAE,oCAAoC;YAC/C,MAAM,EAAE,MAAM,CAAC,WAAW,CAAC;YAC3B,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC;SACjB,CAAC;QAEF,OAAO;QACP,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;QAE5D,OAAO;QACP,MAAM,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;QAC7B,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,OAAO,CAAC;YACrC,eAAe,EAAE,SAAS;YAC1B,OAAO,EAAE,oCAAoC;YAC7C,MAAM,EAAE,WAAW;YACnB,WAAW,EAAE,oCAAoC;YACjD,cAAc,EAAE,SAAS;YACzB,GAAG,EAAE,KAAK;YACV,KAAK,EAAE,UAAU;YACjB,QAAQ,EAAE,CAAC;YACX,kBAAkB,EAAE,EAAE;SACvB,CAAC,CAAC;QACH,MAAM,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC,WAAW,EAAE,CAAC;IACrD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2DAA2D,EAAE,KAAK,IAAI,EAAE;QACzE,QAAQ;QACR,MAAM,OAAO,GAAG;YACd,OAAO,EAAE,oCAAoC;YAC7C,kBAAkB,EAAE,CAAC;SACtB,CAAC;QACF,MAAM,WAAW,GAAG;YAClB,SAAS,EAAE,oCAAoC;YAC/C,MAAM,EAAE,MAAM,CAAC,WAAW,CAAC;YAC3B,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC;SACjB,CAAC;QACF,MAAM,MAAM,GAAG,YAAY,CAAC;QAE5B,OAAO;QACP,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,OAAO,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC;QAEpE,OAAO;QACP,MAAM,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;QAC7B,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,OAAO,CAAC;YACrC,eAAe,EAAE,SAAS;YAC1B,OAAO,EAAE,oCAAoC;YAC7C,MAAM,EAAE,WAAW;YACnB,WAAW,EAAE,oCAAoC;YACjD,cAAc,EAAE,SAAS;YACzB,GAAG,EAAE,KAAK;YACV,KAAK,EAAE,UAAU;YACjB,QAAQ,EAAE,CAAC;YACX,kBAAkB,EAAE,EAAE;SACvB,CAAC,CAAC;QACH,MAAM,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC,WAAW,EAAE,CAAC;IACrD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -1,12 +1,3 @@
|
|
|
1
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
-
});
|
|
9
|
-
};
|
|
10
1
|
import BigNumber from "bignumber.js";
|
|
11
2
|
import { NetworkDown } from "@ledgerhq/errors";
|
|
12
3
|
import { getServerInfos } from "../network";
|
|
@@ -19,26 +10,24 @@ const remapError = (error) => {
|
|
|
19
10
|
}
|
|
20
11
|
return error;
|
|
21
12
|
};
|
|
22
|
-
export function estimateFees(networkInfo) {
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
throw remapError(e);
|
|
37
|
-
}
|
|
38
|
-
throw e;
|
|
13
|
+
export async function estimateFees(networkInfo) {
|
|
14
|
+
if (!networkInfo) {
|
|
15
|
+
try {
|
|
16
|
+
const info = await getServerInfos();
|
|
17
|
+
const serverFee = parseAPIValue(info.info.validated_ledger.base_fee_xrp.toString());
|
|
18
|
+
networkInfo = {
|
|
19
|
+
family: "xrp",
|
|
20
|
+
serverFee,
|
|
21
|
+
baseReserve: new BigNumber(0), // NOT USED. will refactor later.
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
catch (e) {
|
|
25
|
+
if (e instanceof Error) {
|
|
26
|
+
throw remapError(e);
|
|
39
27
|
}
|
|
28
|
+
throw e;
|
|
40
29
|
}
|
|
41
|
-
|
|
42
|
-
}
|
|
30
|
+
}
|
|
31
|
+
return { networkInfo, fee: BigInt(networkInfo.serverFee.toString()) };
|
|
43
32
|
}
|
|
44
33
|
//# sourceMappingURL=estimateFees.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"estimateFees.js","sourceRoot":"","sources":["../../src/logic/estimateFees.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"estimateFees.js","sourceRoot":"","sources":["../../src/logic/estimateFees.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,cAAc,CAAC;AACrC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE5C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,8BAA8B;AAC9B,MAAM,UAAU,GAAG,CAAC,KAAY,EAAE,EAAE;IAClC,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC;IAE1B,IAAI,GAAG,CAAC,QAAQ,CAAC,wBAAwB,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,CAAC;QAC9E,OAAO,IAAI,WAAW,EAAE,CAAC;IAC3B,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,WAAgC;IAEhC,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,cAAc,EAAE,CAAC;YACpC,MAAM,SAAS,GAAG,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC,CAAC;YACpF,WAAW,GAAG;gBACZ,MAAM,EAAE,KAAK;gBACb,SAAS;gBACT,WAAW,EAAE,IAAI,SAAS,CAAC,CAAC,CAAC,EAAE,iCAAiC;aACjE,CAAC;QACJ,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,IAAI,CAAC,YAAY,KAAK,EAAE,CAAC;gBACvB,MAAM,UAAU,CAAC,CAAC,CAAC,CAAC;YACtB,CAAC;YACD,MAAM,CAAC,CAAC;QACV,CAAC;IACH,CAAC;IAED,OAAO,EAAE,WAAW,EAAE,GAAG,EAAE,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC;AACxE,CAAC"}
|
|
@@ -1,12 +1,3 @@
|
|
|
1
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
-
});
|
|
9
|
-
};
|
|
10
1
|
import BigNumber from "bignumber.js";
|
|
11
2
|
import { estimateFees } from "./estimateFees";
|
|
12
3
|
const mockGetServerInfos = jest.fn();
|
|
@@ -17,7 +8,7 @@ describe("estimateFees", () => {
|
|
|
17
8
|
afterEach(() => {
|
|
18
9
|
mockGetServerInfos.mockClear();
|
|
19
10
|
});
|
|
20
|
-
it("returns the default Fees", () =>
|
|
11
|
+
it("returns the default Fees", async () => {
|
|
21
12
|
// Given
|
|
22
13
|
mockGetServerInfos.mockResolvedValue({
|
|
23
14
|
info: {
|
|
@@ -27,29 +18,29 @@ describe("estimateFees", () => {
|
|
|
27
18
|
},
|
|
28
19
|
});
|
|
29
20
|
// When
|
|
30
|
-
const result =
|
|
21
|
+
const result = await estimateFees();
|
|
31
22
|
// Then
|
|
32
23
|
expect(mockGetServerInfos).toHaveBeenCalledTimes(1);
|
|
33
24
|
expect(result.networkInfo).toEqual({
|
|
34
25
|
baseReserve: BigNumber(0),
|
|
35
26
|
family: "xrp",
|
|
36
|
-
serverFee: BigNumber(
|
|
27
|
+
serverFee: BigNumber(23_000_000),
|
|
37
28
|
});
|
|
38
|
-
expect(result.fee).toEqual(BigInt(
|
|
39
|
-
})
|
|
40
|
-
it("returns the fees from the NetworkInfo provided", () =>
|
|
29
|
+
expect(result.fee).toEqual(BigInt(23_000_000));
|
|
30
|
+
});
|
|
31
|
+
it("returns the fees from the NetworkInfo provided", async () => {
|
|
41
32
|
// Given
|
|
42
33
|
const networkInfo = {
|
|
43
34
|
family: "xrp",
|
|
44
|
-
serverFee: BigNumber(
|
|
35
|
+
serverFee: BigNumber(78_000_000),
|
|
45
36
|
baseReserve: BigNumber("45"),
|
|
46
37
|
};
|
|
47
38
|
// When
|
|
48
|
-
const result =
|
|
39
|
+
const result = await estimateFees(networkInfo);
|
|
49
40
|
// Then
|
|
50
41
|
expect(mockGetServerInfos).toHaveBeenCalledTimes(0);
|
|
51
42
|
expect(result.networkInfo).toEqual(networkInfo);
|
|
52
|
-
expect(result.fee).toEqual(BigInt(
|
|
53
|
-
})
|
|
43
|
+
expect(result.fee).toEqual(BigInt(78_000_000));
|
|
44
|
+
});
|
|
54
45
|
});
|
|
55
46
|
//# sourceMappingURL=estimateFees.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"estimateFees.test.js","sourceRoot":"","sources":["../../src/logic/estimateFees.test.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"estimateFees.test.js","sourceRoot":"","sources":["../../src/logic/estimateFees.test.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,cAAc,CAAC;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAG9C,MAAM,kBAAkB,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;AACrC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,GAAG,EAAE,CAAC,CAAC;IAC7B,cAAc,EAAE,GAAG,EAAE,CAAC,kBAAkB,EAAE;CAC3C,CAAC,CAAC,CAAC;AAEJ,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;IAC5B,SAAS,CAAC,GAAG,EAAE;QACb,kBAAkB,CAAC,SAAS,EAAE,CAAC;IACjC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0BAA0B,EAAE,KAAK,IAAI,EAAE;QACxC,QAAQ;QACR,kBAAkB,CAAC,iBAAiB,CAAC;YACnC,IAAI,EAAE;gBACJ,gBAAgB,EAAE;oBAChB,YAAY,EAAE,EAAE;iBACjB;aACF;SACF,CAAC,CAAC;QAEH,OAAO;QACP,MAAM,MAAM,GAAG,MAAM,YAAY,EAAE,CAAC;QAEpC,OAAO;QACP,MAAM,CAAC,kBAAkB,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;QACpD,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC;YACjC,WAAW,EAAE,SAAS,CAAC,CAAC,CAAC;YACzB,MAAM,EAAE,KAAK;YACb,SAAS,EAAE,SAAS,CAAC,UAAU,CAAC;SACjC,CAAC,CAAC;QACH,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gDAAgD,EAAE,KAAK,IAAI,EAAE;QAC9D,QAAQ;QACR,MAAM,WAAW,GAAG;YAClB,MAAM,EAAE,KAAK;YACb,SAAS,EAAE,SAAS,CAAC,UAAU,CAAC;YAChC,WAAW,EAAE,SAAS,CAAC,IAAI,CAAC;SACP,CAAC;QAExB,OAAO;QACP,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,WAAW,CAAC,CAAC;QAE/C,OAAO;QACP,MAAM,CAAC,kBAAkB,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;QACpD,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAChD,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -1,17 +1,6 @@
|
|
|
1
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
-
});
|
|
9
|
-
};
|
|
10
1
|
import { getAccountInfo } from "../network";
|
|
11
|
-
export function getBalance(address) {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
return BigInt(accountInfo.balance);
|
|
15
|
-
});
|
|
2
|
+
export async function getBalance(address) {
|
|
3
|
+
const accountInfo = await getAccountInfo(address);
|
|
4
|
+
return BigInt(accountInfo.balance);
|
|
16
5
|
}
|
|
17
6
|
//# sourceMappingURL=getBalance.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getBalance.js","sourceRoot":"","sources":["../../src/logic/getBalance.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"getBalance.js","sourceRoot":"","sources":["../../src/logic/getBalance.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE5C,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,OAAe;IAC9C,MAAM,WAAW,GAAG,MAAM,cAAc,CAAC,OAAO,CAAC,CAAC;IAClD,OAAO,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;AACrC,CAAC"}
|
|
@@ -1,12 +1,3 @@
|
|
|
1
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
-
});
|
|
9
|
-
};
|
|
10
1
|
import { faker } from "@faker-js/faker";
|
|
11
2
|
import { getBalance } from "./getBalance";
|
|
12
3
|
const mockGetAccountInfo = jest.fn();
|
|
@@ -17,19 +8,19 @@ describe("getBalance", () => {
|
|
|
17
8
|
afterEach(() => {
|
|
18
9
|
mockGetAccountInfo.mockClear();
|
|
19
10
|
});
|
|
20
|
-
it("returns the balance from Explorer", () =>
|
|
11
|
+
it("returns the balance from Explorer", async () => {
|
|
21
12
|
// Given
|
|
22
|
-
const balance = faker.number.bigInt(
|
|
13
|
+
const balance = faker.number.bigInt(100_000_000);
|
|
23
14
|
const address = "ACCOUNT_ADDRESS";
|
|
24
15
|
mockGetAccountInfo.mockResolvedValue({
|
|
25
16
|
balance,
|
|
26
17
|
});
|
|
27
18
|
// When
|
|
28
|
-
const result =
|
|
19
|
+
const result = await getBalance(address);
|
|
29
20
|
// Then
|
|
30
21
|
expect(mockGetAccountInfo).toHaveBeenCalledTimes(1);
|
|
31
22
|
expect(mockGetAccountInfo.mock.lastCall[0]).toEqual(address);
|
|
32
23
|
expect(result).toEqual(balance);
|
|
33
|
-
})
|
|
24
|
+
});
|
|
34
25
|
});
|
|
35
26
|
//# sourceMappingURL=getBalance.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getBalance.test.js","sourceRoot":"","sources":["../../src/logic/getBalance.test.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"getBalance.test.js","sourceRoot":"","sources":["../../src/logic/getBalance.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,MAAM,kBAAkB,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;AACrC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,GAAG,EAAE,CAAC,CAAC;IAC7B,cAAc,EAAE,CAAC,OAAe,EAAE,EAAE,CAAC,kBAAkB,CAAC,OAAO,CAAC;CACjE,CAAC,CAAC,CAAC;AAEJ,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;IAC1B,SAAS,CAAC,GAAG,EAAE;QACb,kBAAkB,CAAC,SAAS,EAAE,CAAC;IACjC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mCAAmC,EAAE,KAAK,IAAI,EAAE;QACjD,QAAQ;QACR,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;QACjD,MAAM,OAAO,GAAG,iBAAiB,CAAC;QAClC,kBAAkB,CAAC,iBAAiB,CAAC;YACnC,OAAO;SACR,CAAC,CAAC;QAEH,OAAO;QACP,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,CAAC;QAEzC,OAAO;QACP,MAAM,CAAC,kBAAkB,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;QACpD,MAAM,CAAC,kBAAkB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAC7D,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -1,21 +1,10 @@
|
|
|
1
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
-
});
|
|
9
|
-
};
|
|
10
1
|
import { getLedger } from "../network";
|
|
11
|
-
export function lastBlock() {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
};
|
|
19
|
-
});
|
|
2
|
+
export async function lastBlock() {
|
|
3
|
+
const result = await getLedger();
|
|
4
|
+
return {
|
|
5
|
+
height: result.ledger_index,
|
|
6
|
+
hash: result.ledger.ledger_hash,
|
|
7
|
+
time: new Date(result.ledger.close_time_iso),
|
|
8
|
+
};
|
|
20
9
|
}
|
|
21
10
|
//# sourceMappingURL=lastBlock.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lastBlock.js","sourceRoot":"","sources":["../../src/logic/lastBlock.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"lastBlock.js","sourceRoot":"","sources":["../../src/logic/lastBlock.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEvC,MAAM,CAAC,KAAK,UAAU,SAAS;IAC7B,MAAM,MAAM,GAAG,MAAM,SAAS,EAAE,CAAC;IACjC,OAAO;QACL,MAAM,EAAE,MAAM,CAAC,YAAY;QAC3B,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,WAAW;QAC/B,IAAI,EAAE,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC;KAC7C,CAAC;AACJ,CAAC"}
|
|
@@ -1,13 +1,23 @@
|
|
|
1
1
|
import { XrpOperation } from "../types";
|
|
2
|
+
type Order = "asc" | "desc";
|
|
2
3
|
/**
|
|
3
4
|
* Returns list of "Payment" Operations associated to an account.
|
|
4
5
|
* @param address Account address
|
|
5
|
-
* @param
|
|
6
|
-
*
|
|
6
|
+
* @param minHeight retrieve operations from a specific block height until top most (inclusive)
|
|
7
|
+
* if not provided, it will start from the oldest possible history.
|
|
8
|
+
* The result is not guaranteed to contain all operations until top height (it depends of the underlying explorer),
|
|
9
|
+
* so you might need to call this function multiple times to get all operations.
|
|
10
|
+
* @param order whether to return operations from the top block or from the oldest block
|
|
11
|
+
* it defaults to "desc" (newest first)
|
|
12
|
+
* it doesn't control the order of the operations in the result list.
|
|
13
|
+
* this parameter is added as a workaround for the issue LIVE-16705
|
|
14
|
+
* @returns a list of operations is descending order and a token to be used for pagination
|
|
7
15
|
*/
|
|
8
|
-
export declare function listOperations(address: string, { limit,
|
|
16
|
+
export declare function listOperations(address: string, { limit, minHeight, token, order, }: {
|
|
9
17
|
limit?: number;
|
|
10
|
-
|
|
18
|
+
token?: string;
|
|
19
|
+
order?: Order;
|
|
11
20
|
minHeight?: number;
|
|
12
|
-
}): Promise<[XrpOperation[],
|
|
21
|
+
}): Promise<[XrpOperation[], string]>;
|
|
22
|
+
export {};
|
|
13
23
|
//# sourceMappingURL=listOperations.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"listOperations.d.ts","sourceRoot":"","sources":["../../src/logic/listOperations.ts"],"names":[],"mappings":"AAEA,OAAO,EAAW,YAAY,EAAE,MAAM,UAAU,CAAC;AAGjD
|
|
1
|
+
{"version":3,"file":"listOperations.d.ts","sourceRoot":"","sources":["../../src/logic/listOperations.ts"],"names":[],"mappings":"AAEA,OAAO,EAAW,YAAY,EAAE,MAAM,UAAU,CAAC;AAGjD,KAAK,KAAK,GAAG,KAAK,GAAG,MAAM,CAAC;AAC5B;;;;;;;;;;;;GAYG;AACH,wBAAsB,cAAc,CAClC,OAAO,EAAE,MAAM,EACf,EACE,KAAK,EACL,SAAS,EACT,KAAK,EACL,KAAK,GACN,EAAE;IAED,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,KAAK,CAAC;IAEd,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,GACA,OAAO,CAAC,CAAC,YAAY,EAAE,EAAE,MAAM,CAAC,CAAC,CA0EnC"}
|