@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
package/.turbo/turbo-build.log
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
|
|
2
|
-
> @ledgerhq/coin-xrp@0.9.2 build /home/runner/work/ledger-live/ledger-live/libs/coin-modules/coin-xrp
|
|
3
|
-
> tsc && tsc -m
|
|
2
|
+
> @ledgerhq/coin-xrp@0.9.2-nightly.0 build /home/runner/work/ledger-live/ledger-live/libs/coin-modules/coin-xrp
|
|
3
|
+
> tsc && tsc -m esnext --moduleResolution bundler --outDir lib-es
|
|
4
4
|
|
package/CHANGELOG.md
CHANGED
|
@@ -1,22 +1,23 @@
|
|
|
1
1
|
# @ledgerhq/coin-xrp
|
|
2
2
|
|
|
3
|
-
## 0.
|
|
3
|
+
## 1.0.0-nightly.1
|
|
4
|
+
|
|
5
|
+
### Major Changes
|
|
6
|
+
|
|
7
|
+
- [#9092](https://github.com/LedgerHQ/ledger-live/pull/9092) [`5e18866`](https://github.com/LedgerHQ/ledger-live/commit/5e18866320b843632699659ee66f6c410c108c1e) Thanks [@jprudent](https://github.com/jprudent)! - Change coin-framework/api types for list operations
|
|
4
8
|
|
|
5
9
|
### Patch Changes
|
|
6
10
|
|
|
7
|
-
- Updated dependencies [[`
|
|
8
|
-
- @ledgerhq/
|
|
9
|
-
- @ledgerhq/cryptoassets@13.10.0
|
|
10
|
-
- @ledgerhq/coin-framework@0.25.0
|
|
11
|
+
- Updated dependencies [[`5e18866`](https://github.com/LedgerHQ/ledger-live/commit/5e18866320b843632699659ee66f6c410c108c1e)]:
|
|
12
|
+
- @ledgerhq/coin-framework@1.0.0-nightly.1
|
|
11
13
|
|
|
12
|
-
## 0.9.2-
|
|
14
|
+
## 0.9.2-nightly.0
|
|
13
15
|
|
|
14
16
|
### Patch Changes
|
|
15
17
|
|
|
16
|
-
- Updated dependencies [[`
|
|
17
|
-
- @ledgerhq/
|
|
18
|
-
- @ledgerhq/
|
|
19
|
-
- @ledgerhq/coin-framework@0.25.0-next.0
|
|
18
|
+
- Updated dependencies [[`9534f17`](https://github.com/LedgerHQ/ledger-live/commit/9534f17247e1472b0fee8b993a83264f4e4ab363)]:
|
|
19
|
+
- @ledgerhq/cryptoassets@13.10.0-nightly.1
|
|
20
|
+
- @ledgerhq/coin-framework@0.24.1-nightly.0
|
|
20
21
|
|
|
21
22
|
## 0.9.1
|
|
22
23
|
|
package/lib/api/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,GAAG,EAIJ,MAAM,oCAAoC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,GAAG,EAIJ,MAAM,oCAAoC,CAAC;AAE5C,OAAmB,EAAE,KAAK,SAAS,EAAE,MAAM,WAAW,CAAC;AAavD,wBAAgB,SAAS,CAAC,MAAM,EAAE,SAAS,GAAG,GAAG,CAYhD"}
|
|
@@ -1,13 +1,4 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
-
});
|
|
10
|
-
};
|
|
11
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
3
|
const _1 = require(".");
|
|
13
4
|
const ripple_binary_codec_1 = require("ripple-binary-codec");
|
|
@@ -15,6 +6,7 @@ const ripple_keypairs_1 = require("ripple-keypairs");
|
|
|
15
6
|
describe("Xrp Api", () => {
|
|
16
7
|
let module;
|
|
17
8
|
const address = "rh1HPuRVsYYvThxG2Bs1MfjmrVC73S16Fb";
|
|
9
|
+
const bigAddress = "rUxSkt6hQpWxXQwTNRUCYYRQ7BC2yRA3F8"; // An account with more that 4000 txs
|
|
18
10
|
const emptyAddress = "rKtXXTVno77jhu6tto1MAXjepyuaKaLcqB"; // Account with no transaction (at the time of this writing)
|
|
19
11
|
const xrpPubKey = process.env["PUB_KEY"];
|
|
20
12
|
const xrpSecretKey = process.env["SECRET_KEY"];
|
|
@@ -22,19 +14,19 @@ describe("Xrp Api", () => {
|
|
|
22
14
|
module = (0, _1.createApi)({ node: "https://s.altnet.rippletest.net:51234" });
|
|
23
15
|
});
|
|
24
16
|
describe("estimateFees", () => {
|
|
25
|
-
it("returns a default value", () =>
|
|
17
|
+
it("returns a default value", async () => {
|
|
26
18
|
// Given
|
|
27
19
|
const amount = BigInt(100);
|
|
28
20
|
// When
|
|
29
|
-
const result =
|
|
21
|
+
const result = await module.estimateFees(address, amount);
|
|
30
22
|
// Then
|
|
31
23
|
expect(result).toEqual(BigInt(10));
|
|
32
|
-
})
|
|
24
|
+
});
|
|
33
25
|
});
|
|
34
26
|
describe("listOperations", () => {
|
|
35
|
-
it("returns a list regarding address parameter", () =>
|
|
27
|
+
it("returns a list regarding address parameter", async () => {
|
|
36
28
|
// When
|
|
37
|
-
const [tx, _] =
|
|
29
|
+
const [tx, _] = await module.listOperations(address, { minHeight: 200 });
|
|
38
30
|
// Then
|
|
39
31
|
expect(tx.length).toBe(200);
|
|
40
32
|
tx.forEach(operation => {
|
|
@@ -42,45 +34,49 @@ describe("Xrp Api", () => {
|
|
|
42
34
|
const isSenderOrReceipt = operation.senders.includes(address) || operation.recipients.includes(address);
|
|
43
35
|
expect(isSenderOrReceipt).toBeTruthy();
|
|
44
36
|
});
|
|
45
|
-
})
|
|
46
|
-
it("returns
|
|
37
|
+
});
|
|
38
|
+
it("returns all operations", async () => {
|
|
47
39
|
// When
|
|
48
|
-
const [tx,
|
|
49
|
-
const [tx2, _] = yield module.listOperations(address, { limit: 200, start: idx });
|
|
50
|
-
tx.push(...tx2);
|
|
40
|
+
const [tx, _] = await module.listOperations(bigAddress, { minHeight: 0 });
|
|
51
41
|
// Then
|
|
52
42
|
const checkSet = new Set(tx.map(elt => elt.hash));
|
|
53
43
|
expect(checkSet.size).toEqual(tx.length);
|
|
54
|
-
|
|
44
|
+
// the first transaction is returned
|
|
45
|
+
expect(tx[0].block.height).toEqual(73126713);
|
|
46
|
+
expect(tx[0].hash.toUpperCase).toEqual("0FC3792449E5B1E431D45E3606017D10EC1FECC8EDF988A98E36B8FE0C33ACAE");
|
|
47
|
+
// 200 is the default XRP explorer hard limit,
|
|
48
|
+
// so here we are checking that this limit is bypassed
|
|
49
|
+
expect(tx.length).toBeGreaterThan(200);
|
|
50
|
+
});
|
|
55
51
|
});
|
|
56
52
|
describe("lastBlock", () => {
|
|
57
|
-
it("returns last block info", () =>
|
|
53
|
+
it("returns last block info", async () => {
|
|
58
54
|
// When
|
|
59
|
-
const result =
|
|
55
|
+
const result = await module.lastBlock();
|
|
60
56
|
// Then
|
|
61
57
|
expect(result.hash).toBeDefined();
|
|
62
58
|
expect(result.height).toBeDefined();
|
|
63
59
|
expect(result.time).toBeInstanceOf(Date);
|
|
64
|
-
})
|
|
60
|
+
});
|
|
65
61
|
});
|
|
66
62
|
describe("getBalance", () => {
|
|
67
|
-
it("returns an amount above 0 when address has transactions", () =>
|
|
63
|
+
it("returns an amount above 0 when address has transactions", async () => {
|
|
68
64
|
// When
|
|
69
|
-
const result =
|
|
65
|
+
const result = await module.getBalance(address);
|
|
70
66
|
// Then
|
|
71
67
|
expect(result).toBeGreaterThan(BigInt(0));
|
|
72
|
-
})
|
|
73
|
-
it("returns 0 when address has no transaction", () =>
|
|
68
|
+
});
|
|
69
|
+
it("returns 0 when address has no transaction", async () => {
|
|
74
70
|
// When
|
|
75
|
-
const result =
|
|
71
|
+
const result = await module.getBalance(emptyAddress);
|
|
76
72
|
// Then
|
|
77
73
|
expect(result).toBe(BigInt(0));
|
|
78
|
-
})
|
|
74
|
+
});
|
|
79
75
|
});
|
|
80
76
|
describe("craftTransaction", () => {
|
|
81
|
-
it("returns a raw transaction", () =>
|
|
77
|
+
it("returns a raw transaction", async () => {
|
|
82
78
|
// When
|
|
83
|
-
const result =
|
|
79
|
+
const result = await module.craftTransaction(address, {
|
|
84
80
|
type: "send",
|
|
85
81
|
recipient: "rKRtUG15iBsCQRgrkeUEg5oX4Ae2zWZ89z",
|
|
86
82
|
amount: BigInt(10),
|
|
@@ -89,20 +85,23 @@ describe("Xrp Api", () => {
|
|
|
89
85
|
// Then
|
|
90
86
|
expect(result.slice(0, 34)).toEqual("12000022800000002400025899201B002D");
|
|
91
87
|
expect(result.slice(38)).toEqual("61400000000000000A68400000000000000181142A6ADC782DAFDDB464E434B684F01416B8A33B208314CA26FB6B0EF6859436C2037BA0A9913208A59B98");
|
|
92
|
-
})
|
|
88
|
+
});
|
|
93
89
|
});
|
|
94
90
|
// To enable this test, you need to fill an `.env` file at the root of this package. Example can be found in `.env.integ.test.example`.
|
|
95
91
|
// The value hardcoded here depends on the value filled in the `.env` file.
|
|
96
92
|
describe.skip("combine", () => {
|
|
97
|
-
it("returns a signed raw transaction", () =>
|
|
93
|
+
it("returns a signed raw transaction", async () => {
|
|
98
94
|
// Given
|
|
99
95
|
const rawTx = "120000228000000024001BCDA6201B001F018161400000000000000A6840000000000000018114CF30F590D7A9067B2604D80D46090FBF342EBE988314CA26FB6B0EF6859436C2037BA0A9913208A59B98";
|
|
100
|
-
const signedTx = (0, ripple_keypairs_1.sign)((0, ripple_binary_codec_1.encodeForSigning)(
|
|
96
|
+
const signedTx = (0, ripple_keypairs_1.sign)((0, ripple_binary_codec_1.encodeForSigning)({
|
|
97
|
+
...(0, ripple_binary_codec_1.decode)(rawTx),
|
|
98
|
+
SigningPubKey: xrpPubKey,
|
|
99
|
+
}), xrpSecretKey);
|
|
101
100
|
// When
|
|
102
|
-
const result =
|
|
101
|
+
const result = await module.combine(rawTx, signedTx);
|
|
103
102
|
// Then
|
|
104
103
|
expect(result).toEqual("120000228000000024001BCDA6201B001F018161400000000000000A68400000000000000174473045022100D3B9B37F40961A8DBDE48535F9EF333E87F9D98BE90F7141E133541874826BDB0220065E9CA4D218F16087656BC30D66672F6103B03717A59FFC04C837A2157CE47C8114CF30F590D7A9067B2604D80D46090FBF342EBE988314CA26FB6B0EF6859436C2037BA0A9913208A59B98");
|
|
105
|
-
})
|
|
104
|
+
});
|
|
106
105
|
});
|
|
107
106
|
});
|
|
108
107
|
//# sourceMappingURL=index.integ.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.integ.test.js","sourceRoot":"","sources":["../../src/api/index.integ.test.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.integ.test.js","sourceRoot":"","sources":["../../src/api/index.integ.test.ts"],"names":[],"mappings":"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"}
|
package/lib/api/index.js
CHANGED
|
@@ -1,33 +1,14 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
-
});
|
|
10
|
-
};
|
|
11
|
-
var __rest = (this && this.__rest) || function (s, e) {
|
|
12
|
-
var t = {};
|
|
13
|
-
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
14
|
-
t[p] = s[p];
|
|
15
|
-
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
|
16
|
-
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
17
|
-
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
|
18
|
-
t[p[i]] = s[p[i]];
|
|
19
|
-
}
|
|
20
|
-
return t;
|
|
21
|
-
};
|
|
22
2
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
23
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
24
4
|
};
|
|
25
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
6
|
exports.createApi = createApi;
|
|
7
|
+
const logs_1 = require("@ledgerhq/logs");
|
|
27
8
|
const config_1 = __importDefault(require("../config"));
|
|
28
9
|
const logic_1 = require("../logic");
|
|
29
10
|
function createApi(config) {
|
|
30
|
-
config_1.default.setCoinConfig(() => (
|
|
11
|
+
config_1.default.setCoinConfig(() => ({ ...config, status: { type: "active" } }));
|
|
31
12
|
return {
|
|
32
13
|
broadcast: logic_1.broadcast,
|
|
33
14
|
combine: logic_1.combine,
|
|
@@ -38,36 +19,70 @@ function createApi(config) {
|
|
|
38
19
|
listOperations: operations,
|
|
39
20
|
};
|
|
40
21
|
}
|
|
41
|
-
function craft(address, transaction) {
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
22
|
+
async function craft(address, transaction) {
|
|
23
|
+
const nextSequenceNumber = await (0, logic_1.getNextValidSequence)(address);
|
|
24
|
+
const tx = await (0, logic_1.craftTransaction)({ address, nextSequenceNumber }, transaction);
|
|
25
|
+
return tx.serializedTransaction;
|
|
26
|
+
}
|
|
27
|
+
async function estimate(_addr, _amount) {
|
|
28
|
+
const fees = await (0, logic_1.estimateFees)();
|
|
29
|
+
return fees.fee;
|
|
47
30
|
}
|
|
48
|
-
function
|
|
49
|
-
|
|
50
|
-
const
|
|
51
|
-
|
|
52
|
-
|
|
31
|
+
async function operationsFromHeight(address, minHeight) {
|
|
32
|
+
async function fetchNextPage(state) {
|
|
33
|
+
const [operations, apiNextCursor] = await (0, logic_1.listOperations)(address, {
|
|
34
|
+
limit: state.pageSize,
|
|
35
|
+
minHeight: state.minHeight,
|
|
36
|
+
order: "asc",
|
|
37
|
+
});
|
|
38
|
+
const newCurrentIteration = state.currentIteration + 1;
|
|
39
|
+
let continueIteration = true;
|
|
40
|
+
if (apiNextCursor === "") {
|
|
41
|
+
continueIteration = false;
|
|
42
|
+
}
|
|
43
|
+
else if (newCurrentIteration >= state.maxIterations) {
|
|
44
|
+
(0, logs_1.log)("coin:xrp", "(api/operations): max iterations reached", state.maxIterations);
|
|
45
|
+
continueIteration = false;
|
|
46
|
+
}
|
|
47
|
+
const accumulated = state.accumulator.concat(operations);
|
|
48
|
+
return {
|
|
49
|
+
...state,
|
|
50
|
+
currentIteration: newCurrentIteration,
|
|
51
|
+
continueIterations: continueIteration,
|
|
52
|
+
apiNextCursor: apiNextCursor,
|
|
53
|
+
accumulator: accumulated,
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
const firstState = {
|
|
57
|
+
pageSize: 200,
|
|
58
|
+
maxIterations: 10,
|
|
59
|
+
currentIteration: 0,
|
|
60
|
+
minHeight: minHeight,
|
|
61
|
+
continueIterations: true,
|
|
62
|
+
accumulator: [],
|
|
63
|
+
};
|
|
64
|
+
let state = await fetchNextPage(firstState);
|
|
65
|
+
while (state.continueIterations) {
|
|
66
|
+
state = await fetchNextPage(state);
|
|
67
|
+
}
|
|
68
|
+
return [state.accumulator, state.apiNextCursor ?? ""];
|
|
53
69
|
}
|
|
54
|
-
function operations(
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
});
|
|
70
|
+
async function operations(address, { minHeight }) {
|
|
71
|
+
const [ops, token] = await operationsFromHeight(address, minHeight);
|
|
72
|
+
// TODO token must be implemented properly (waiting ack from the design document)
|
|
73
|
+
return [
|
|
74
|
+
ops.map(op => {
|
|
75
|
+
const { simpleType, blockHash, blockTime, blockHeight, ...rest } = op;
|
|
76
|
+
return {
|
|
77
|
+
...rest,
|
|
78
|
+
block: {
|
|
79
|
+
height: blockHeight,
|
|
80
|
+
hash: blockHash,
|
|
81
|
+
time: blockTime,
|
|
82
|
+
},
|
|
83
|
+
};
|
|
84
|
+
}),
|
|
85
|
+
token,
|
|
86
|
+
];
|
|
72
87
|
}
|
|
73
88
|
//# sourceMappingURL=index.js.map
|
package/lib/api/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"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"}
|
package/lib/api/index.test.js
CHANGED
|
@@ -1,13 +1,4 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
-
});
|
|
10
|
-
};
|
|
11
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
3
|
const logic_1 = require("../logic");
|
|
13
4
|
const index_1 = require("./index");
|
|
@@ -27,24 +18,21 @@ describe("listOperations", () => {
|
|
|
27
18
|
mockGetServerInfos.mockClear();
|
|
28
19
|
mockGetTransactions.mockClear();
|
|
29
20
|
});
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
const deliveredAmount = 100;
|
|
46
|
-
const fee = 10;
|
|
47
|
-
mockGetTransactions.mockResolvedValue([
|
|
21
|
+
const defaultMarker = { ledger: 1, seq: 1 };
|
|
22
|
+
function mockNetworkTxs(txs, marker) {
|
|
23
|
+
return {
|
|
24
|
+
account: "account",
|
|
25
|
+
ledger_index_max: 1,
|
|
26
|
+
ledger_index_min: 1,
|
|
27
|
+
limit: 1,
|
|
28
|
+
validated: false,
|
|
29
|
+
transactions: txs,
|
|
30
|
+
marker: marker,
|
|
31
|
+
error: "",
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
function givenTxs(fee, deliveredAmount, opSender, opDestination) {
|
|
35
|
+
return [
|
|
48
36
|
{
|
|
49
37
|
ledger_hash: "HASH_VALUE_BLOCK",
|
|
50
38
|
hash: "HASH_VALUE",
|
|
@@ -99,21 +87,55 @@ describe("listOperations", () => {
|
|
|
99
87
|
Sequence: 1,
|
|
100
88
|
},
|
|
101
89
|
},
|
|
102
|
-
]
|
|
90
|
+
];
|
|
91
|
+
}
|
|
92
|
+
it("should kill the loop after 10 iterations", async () => {
|
|
93
|
+
const txs = givenTxs(BigInt(10), BigInt(10), "src", "dest");
|
|
94
|
+
// each time it's called it returns a marker, so in theory it would loop forever
|
|
95
|
+
mockGetTransactions.mockResolvedValue(mockNetworkTxs(txs, defaultMarker));
|
|
96
|
+
const [results, _] = await api.listOperations("src", { minHeight: 0 });
|
|
97
|
+
// called 10 times because there is a hard limit of 10 iterations in case something goes wrong
|
|
98
|
+
// with interpretation of the token (bug / explorer api changed ...)
|
|
99
|
+
expect(mockGetServerInfos).toHaveBeenCalledTimes(10);
|
|
100
|
+
expect(mockGetTransactions).toHaveBeenCalledTimes(10);
|
|
101
|
+
expect(results.length).toBe(txs.length * 10);
|
|
102
|
+
});
|
|
103
|
+
it.each([
|
|
104
|
+
{
|
|
105
|
+
address: "WHATEVER_ADDRESS",
|
|
106
|
+
opSender: "account_addr",
|
|
107
|
+
opDestination: "WHATEVER_ADDRESS",
|
|
108
|
+
expectedType: "IN",
|
|
109
|
+
},
|
|
110
|
+
{
|
|
111
|
+
address: "WHATEVER_ADDRESS",
|
|
112
|
+
opSender: "WHATEVER_ADDRESS",
|
|
113
|
+
opDestination: "destination_addr",
|
|
114
|
+
expectedType: "OUT",
|
|
115
|
+
},
|
|
116
|
+
])(`should return the list of operations associated to an account when expected type is %s`, async ({ address, opSender, opDestination, expectedType }) => {
|
|
117
|
+
// Givem
|
|
118
|
+
const deliveredAmount = BigInt(100);
|
|
119
|
+
const fee = BigInt(10);
|
|
120
|
+
mockGetTransactions.mockResolvedValueOnce(mockNetworkTxs(givenTxs(fee, deliveredAmount, opSender, opDestination), defaultMarker));
|
|
121
|
+
// second call to kill the loop
|
|
122
|
+
mockGetTransactions.mockResolvedValue(mockNetworkTxs([], undefined));
|
|
103
123
|
// When
|
|
104
|
-
const [results, _] =
|
|
124
|
+
const [results, _] = await api.listOperations(address, { minHeight: 0 });
|
|
105
125
|
// Then
|
|
106
|
-
|
|
107
|
-
expect(
|
|
126
|
+
// called twice because the marker is set the first time
|
|
127
|
+
expect(mockGetServerInfos).toHaveBeenCalledTimes(2);
|
|
128
|
+
expect(mockGetTransactions).toHaveBeenCalledTimes(2);
|
|
108
129
|
// if expectedType is "OUT", compute value with fees (i.e. delivered_amount + Fee)
|
|
109
|
-
const expectedValue = expectedType === "IN" ?
|
|
130
|
+
const expectedValue = expectedType === "IN" ? deliveredAmount : deliveredAmount + fee;
|
|
131
|
+
// the order is reversed so that the result is always sorted by newest tx first element of the list
|
|
110
132
|
expect(results).toEqual([
|
|
111
133
|
{
|
|
112
134
|
hash: "HASH_VALUE",
|
|
113
135
|
address,
|
|
114
136
|
type: "Payment",
|
|
115
137
|
value: expectedValue,
|
|
116
|
-
fee:
|
|
138
|
+
fee: fee,
|
|
117
139
|
block: {
|
|
118
140
|
hash: "HASH_VALUE_BLOCK",
|
|
119
141
|
height: 1,
|
|
@@ -123,13 +145,21 @@ describe("listOperations", () => {
|
|
|
123
145
|
recipients: [opDestination],
|
|
124
146
|
date: new Date(1000000 + logic_1.RIPPLE_EPOCH * 1000),
|
|
125
147
|
transactionSequenceNumber: 1,
|
|
148
|
+
details: {
|
|
149
|
+
memos: [
|
|
150
|
+
{
|
|
151
|
+
type: "687474703a2f2f6578616d706c652e636f6d2f6d656d6f2f67656e65726963",
|
|
152
|
+
data: "72656e74",
|
|
153
|
+
},
|
|
154
|
+
],
|
|
155
|
+
},
|
|
126
156
|
},
|
|
127
157
|
{
|
|
128
158
|
hash: "HASH_VALUE",
|
|
129
159
|
address,
|
|
130
160
|
type: "Payment",
|
|
131
161
|
value: expectedValue,
|
|
132
|
-
fee:
|
|
162
|
+
fee: fee,
|
|
133
163
|
block: {
|
|
134
164
|
hash: "HASH_VALUE_BLOCK",
|
|
135
165
|
height: 1,
|
|
@@ -148,7 +178,7 @@ describe("listOperations", () => {
|
|
|
148
178
|
address,
|
|
149
179
|
type: "Payment",
|
|
150
180
|
value: expectedValue,
|
|
151
|
-
fee:
|
|
181
|
+
fee: fee,
|
|
152
182
|
block: {
|
|
153
183
|
hash: "HASH_VALUE_BLOCK",
|
|
154
184
|
height: 1,
|
|
@@ -158,16 +188,8 @@ describe("listOperations", () => {
|
|
|
158
188
|
recipients: [opDestination],
|
|
159
189
|
date: new Date(1000000 + logic_1.RIPPLE_EPOCH * 1000),
|
|
160
190
|
transactionSequenceNumber: 1,
|
|
161
|
-
details: {
|
|
162
|
-
memos: [
|
|
163
|
-
{
|
|
164
|
-
type: "687474703a2f2f6578616d706c652e636f6d2f6d656d6f2f67656e65726963",
|
|
165
|
-
data: "72656e74",
|
|
166
|
-
},
|
|
167
|
-
],
|
|
168
|
-
},
|
|
169
191
|
},
|
|
170
192
|
]);
|
|
171
|
-
})
|
|
193
|
+
});
|
|
172
194
|
});
|
|
173
195
|
//# sourceMappingURL=index.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.test.js","sourceRoot":"","sources":["../../src/api/index.test.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.test.js","sourceRoot":"","sources":["../../src/api/index.test.ts"],"names":[],"mappings":";;AAAA,oCAAwC;AACxC,mCAAoC;AAEpC,MAAM,kBAAkB,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC;IACrD,IAAI,EAAE;QACJ,gBAAgB,EAAE,KAAK;KACxB;CACF,CAAC,CAAC;AACH,MAAM,mBAAmB,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;AACtC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,GAAG,EAAE,CAAC,CAAC;IAC7B,cAAc,EAAE,GAAG,EAAE,CAAC,kBAAkB,EAAE;IAC1C,eAAe,EAAE,GAAG,EAAE,CAAC,mBAAmB,EAAE;CAC7C,CAAC,CAAC,CAAC;AAEJ,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;IAC9B,MAAM,GAAG,GAAG,IAAA,iBAAS,EAAC,EAAE,IAAI,EAAE,mBAAmB,EAAE,CAAC,CAAC;IAErD,SAAS,CAAC,GAAG,EAAE;QACb,kBAAkB,CAAC,SAAS,EAAE,CAAC;QAC/B,mBAAmB,CAAC,SAAS,EAAE,CAAC;IAClC,CAAC,CAAC,CAAC;IAEH,MAAM,aAAa,GAAG,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;IAC5C,SAAS,cAAc,CAAC,GAAY,EAAE,MAA2B;QAC/D,OAAO;YACL,OAAO,EAAE,SAAS;YAClB,gBAAgB,EAAE,CAAC;YACnB,gBAAgB,EAAE,CAAC;YACnB,KAAK,EAAE,CAAC;YACR,SAAS,EAAE,KAAK;YAChB,YAAY,EAAE,GAAG;YACjB,MAAM,EAAE,MAAM;YACd,KAAK,EAAE,EAAE;SACV,CAAC;IACJ,CAAC;IAED,SAAS,QAAQ,CACf,GAAW,EACX,eAAuB,EACvB,QAAgB,EAChB,aAAqB;QAErB,OAAO;YACL;gBACE,WAAW,EAAE,kBAAkB;gBAC/B,IAAI,EAAE,YAAY;gBAClB,cAAc,EAAE,sBAAsB;gBACtC,IAAI,EAAE,EAAE,gBAAgB,EAAE,eAAe,CAAC,QAAQ,EAAE,EAAE;gBACtD,OAAO,EAAE;oBACP,eAAe,EAAE,SAAS;oBAC1B,GAAG,EAAE,GAAG,CAAC,QAAQ,EAAE;oBACnB,YAAY,EAAE,CAAC;oBACf,IAAI,EAAE,IAAI;oBACV,OAAO,EAAE,QAAQ;oBACjB,WAAW,EAAE,aAAa;oBAC1B,QAAQ,EAAE,CAAC;iBACZ;aACF;YACD;gBACE,WAAW,EAAE,kBAAkB;gBAC/B,IAAI,EAAE,YAAY;gBAClB,cAAc,EAAE,sBAAsB;gBACtC,IAAI,EAAE,EAAE,gBAAgB,EAAE,eAAe,CAAC,QAAQ,EAAE,EAAE;gBACtD,OAAO,EAAE;oBACP,eAAe,EAAE,SAAS;oBAC1B,GAAG,EAAE,GAAG,CAAC,QAAQ,EAAE;oBACnB,YAAY,EAAE,CAAC;oBACf,IAAI,EAAE,IAAI;oBACV,OAAO,EAAE,QAAQ;oBACjB,WAAW,EAAE,aAAa;oBAC1B,cAAc,EAAE,MAAM;oBACtB,QAAQ,EAAE,CAAC;iBACZ;aACF;YACD;gBACE,WAAW,EAAE,kBAAkB;gBAC/B,IAAI,EAAE,YAAY;gBAClB,cAAc,EAAE,sBAAsB;gBACtC,IAAI,EAAE,EAAE,gBAAgB,EAAE,eAAe,CAAC,QAAQ,EAAE,EAAE;gBACtD,OAAO,EAAE;oBACP,eAAe,EAAE,SAAS;oBAC1B,GAAG,EAAE,GAAG,CAAC,QAAQ,EAAE;oBACnB,YAAY,EAAE,CAAC;oBACf,IAAI,EAAE,IAAI;oBACV,OAAO,EAAE,QAAQ;oBACjB,WAAW,EAAE,aAAa;oBAC1B,KAAK,EAAE;wBACL;4BACE,IAAI,EAAE;gCACJ,QAAQ,EAAE,gEAAgE;gCAC1E,QAAQ,EAAE,UAAU;6BACrB;yBACF;qBACF;oBACD,QAAQ,EAAE,CAAC;iBACZ;aACF;SACF,CAAC;IACJ,CAAC;IAED,EAAE,CAAC,0CAA0C,EAAE,KAAK,IAAI,EAAE;QACxD,MAAM,GAAG,GAAG,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;QAC5D,gFAAgF;QAChF,mBAAmB,CAAC,iBAAiB,CAAC,cAAc,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC,CAAC;QAC1E,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,MAAM,GAAG,CAAC,cAAc,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC;QAEvE,8FAA8F;QAC9F,oEAAoE;QACpE,MAAM,CAAC,kBAAkB,CAAC,CAAC,qBAAqB,CAAC,EAAE,CAAC,CAAC;QACrD,MAAM,CAAC,mBAAmB,CAAC,CAAC,qBAAqB,CAAC,EAAE,CAAC,CAAC;QAEtD,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,IAAI,CAAC;QACN;YACE,OAAO,EAAE,kBAAkB;YAC3B,QAAQ,EAAE,cAAc;YACxB,aAAa,EAAE,kBAAkB;YACjC,YAAY,EAAE,IAAI;SACnB;QACD;YACE,OAAO,EAAE,kBAAkB;YAC3B,QAAQ,EAAE,kBAAkB;YAC5B,aAAa,EAAE,kBAAkB;YACjC,YAAY,EAAE,KAAK;SACpB;KACF,CAAC,CACA,wFAAwF,EACxF,KAAK,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,YAAY,EAAE,EAAE,EAAE;QAC3D,QAAQ;QACR,MAAM,eAAe,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;QACpC,MAAM,GAAG,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;QACvB,mBAAmB,CAAC,qBAAqB,CACvC,cAAc,CAAC,QAAQ,CAAC,GAAG,EAAE,eAAe,EAAE,QAAQ,EAAE,aAAa,CAAC,EAAE,aAAa,CAAC,CACvF,CAAC;QAEF,+BAA+B;QAC/B,mBAAmB,CAAC,iBAAiB,CAAC,cAAc,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC,CAAC;QAErE,OAAO;QACP,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,MAAM,GAAG,CAAC,cAAc,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC;QAEzE,OAAO;QACP,wDAAwD;QACxD,MAAM,CAAC,kBAAkB,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;QACpD,MAAM,CAAC,mBAAmB,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;QAErD,kFAAkF;QAClF,MAAM,aAAa,GAAG,YAAY,KAAK,IAAI,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,eAAe,GAAG,GAAG,CAAC;QACtF,mGAAmG;QACnG,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC;YACtB;gBACE,IAAI,EAAE,YAAY;gBAClB,OAAO;gBACP,IAAI,EAAE,SAAS;gBACf,KAAK,EAAE,aAAa;gBACpB,GAAG,EAAE,GAAG;gBACR,KAAK,EAAE;oBACL,IAAI,EAAE,kBAAkB;oBACxB,MAAM,EAAE,CAAC;oBACT,IAAI,EAAE,IAAI,IAAI,CAAC,sBAAsB,CAAC;iBACvC;gBACD,OAAO,EAAE,CAAC,QAAQ,CAAC;gBACnB,UAAU,EAAE,CAAC,aAAa,CAAC;gBAC3B,IAAI,EAAE,IAAI,IAAI,CAAC,OAAO,GAAG,oBAAY,GAAG,IAAI,CAAC;gBAC7C,yBAAyB,EAAE,CAAC;gBAC5B,OAAO,EAAE;oBACP,KAAK,EAAE;wBACL;4BACE,IAAI,EAAE,gEAAgE;4BACtE,IAAI,EAAE,UAAU;yBACjB;qBACF;iBACF;aACF;YACD;gBACE,IAAI,EAAE,YAAY;gBAClB,OAAO;gBACP,IAAI,EAAE,SAAS;gBACf,KAAK,EAAE,aAAa;gBACpB,GAAG,EAAE,GAAG;gBACR,KAAK,EAAE;oBACL,IAAI,EAAE,kBAAkB;oBACxB,MAAM,EAAE,CAAC;oBACT,IAAI,EAAE,IAAI,IAAI,CAAC,sBAAsB,CAAC;iBACvC;gBACD,OAAO,EAAE,CAAC,QAAQ,CAAC;gBACnB,UAAU,EAAE,CAAC,aAAa,CAAC;gBAC3B,IAAI,EAAE,IAAI,IAAI,CAAC,OAAO,GAAG,oBAAY,GAAG,IAAI,CAAC;gBAC7C,yBAAyB,EAAE,CAAC;gBAC5B,OAAO,EAAE;oBACP,cAAc,EAAE,MAAM;iBACvB;aACF;YACD;gBACE,IAAI,EAAE,YAAY;gBAClB,OAAO;gBACP,IAAI,EAAE,SAAS;gBACf,KAAK,EAAE,aAAa;gBACpB,GAAG,EAAE,GAAG;gBACR,KAAK,EAAE;oBACL,IAAI,EAAE,kBAAkB;oBACxB,MAAM,EAAE,CAAC;oBACT,IAAI,EAAE,IAAI,IAAI,CAAC,sBAAsB,CAAC;iBACvC;gBACD,OAAO,EAAE,CAAC,QAAQ,CAAC;gBACnB,UAAU,EAAE,CAAC,aAAa,CAAC;gBAC3B,IAAI,EAAE,IAAI,IAAI,CAAC,OAAO,GAAG,oBAAY,GAAG,IAAI,CAAC;gBAC7C,yBAAyB,EAAE,CAAC;aAC7B;SACF,CAAC,CAAC;IACL,CAAC,CACF,CAAC;AACJ,CAAC,CAAC,CAAC"}
|
package/lib/bridge/broadcast.js
CHANGED
|
@@ -1,20 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
-
});
|
|
10
|
-
};
|
|
11
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
3
|
exports.broadcast = void 0;
|
|
13
4
|
const operation_1 = require("@ledgerhq/coin-framework/operation");
|
|
14
5
|
const logic_1 = require("../logic");
|
|
15
|
-
const broadcast =
|
|
16
|
-
const hash =
|
|
6
|
+
const broadcast = async ({ signedOperation: { signature, operation }, }) => {
|
|
7
|
+
const hash = await (0, logic_1.broadcast)(signature);
|
|
17
8
|
return (0, operation_1.patchOperationWithHash)(operation, hash);
|
|
18
|
-
}
|
|
9
|
+
};
|
|
19
10
|
exports.broadcast = broadcast;
|
|
20
11
|
//# sourceMappingURL=broadcast.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"broadcast.js","sourceRoot":"","sources":["../../src/bridge/broadcast.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"broadcast.js","sourceRoot":"","sources":["../../src/bridge/broadcast.ts"],"names":[],"mappings":";;;AACA,kEAA4E;AAC5E,oCAAuD;AAGhD,MAAM,SAAS,GAA4C,KAAK,EAAE,EACvE,eAAe,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,GAC1C,EAAE,EAAE;IACH,MAAM,IAAI,GAAG,MAAM,IAAA,iBAAc,EAAC,SAAS,CAAC,CAAC;IAC7C,OAAO,IAAA,kCAAsB,EAAC,SAAS,EAAE,IAAI,CAAC,CAAC;AACjD,CAAC,CAAC;AALW,QAAA,SAAS,aAKpB"}
|
|
@@ -1,13 +1,4 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
-
});
|
|
10
|
-
};
|
|
11
2
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
4
|
};
|
|
@@ -19,13 +10,17 @@ const abandonseed_1 = require("@ledgerhq/cryptoassets/abandonseed");
|
|
|
19
10
|
const getTransactionStatus_1 = require("./getTransactionStatus");
|
|
20
11
|
const prepareTransaction_1 = require("./prepareTransaction");
|
|
21
12
|
const createTransaction_1 = require("./createTransaction");
|
|
22
|
-
const estimateMaxSpendable =
|
|
13
|
+
const estimateMaxSpendable = async ({ account, parentAccount, transaction, }) => {
|
|
23
14
|
const mainAccount = (0, index_1.getMainAccount)(account, parentAccount);
|
|
24
|
-
const newTransaction =
|
|
15
|
+
const newTransaction = await (0, prepareTransaction_1.prepareTransaction)(mainAccount, {
|
|
16
|
+
...(0, createTransaction_1.createTransaction)(account),
|
|
17
|
+
...transaction,
|
|
18
|
+
recipient: transaction?.recipient || (0, abandonseed_1.getAbandonSeedAddress)("ripple"),
|
|
25
19
|
// public testing seed abandonx11,about
|
|
26
|
-
amount: new bignumber_js_1.default(0)
|
|
27
|
-
|
|
20
|
+
amount: new bignumber_js_1.default(0),
|
|
21
|
+
});
|
|
22
|
+
const status = await (0, getTransactionStatus_1.getTransactionStatus)(mainAccount, newTransaction);
|
|
28
23
|
return bignumber_js_1.default.max(0, account.spendableBalance.minus(status.estimatedFees));
|
|
29
|
-
}
|
|
24
|
+
};
|
|
30
25
|
exports.estimateMaxSpendable = estimateMaxSpendable;
|
|
31
26
|
//# sourceMappingURL=estimateMaxSpendable.js.map
|