@ledgerhq/coin-hedera 1.12.0 → 1.12.1-nightly.0
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/CHANGELOG.md +10 -0
- package/lib/api/network.d.ts +2 -6
- package/lib/api/network.d.ts.map +1 -1
- package/lib/api/network.js +4 -25
- package/lib/api/network.js.map +1 -1
- package/lib/bridge/buildOptimisticOperation.d.ts.map +1 -1
- package/lib/bridge/buildOptimisticOperation.js +6 -2
- package/lib/bridge/buildOptimisticOperation.js.map +1 -1
- package/lib/bridge/getTransactionStatus.d.ts.map +1 -1
- package/lib/bridge/getTransactionStatus.js +10 -13
- package/lib/bridge/getTransactionStatus.js.map +1 -1
- package/lib/bridge/utils.d.ts +4 -0
- package/lib/bridge/utils.d.ts.map +1 -1
- package/lib/bridge/utils.js +41 -3
- package/lib/bridge/utils.js.map +1 -1
- package/lib/errors.d.ts +12 -0
- package/lib/errors.d.ts.map +1 -1
- package/lib/errors.js +5 -1
- package/lib/errors.js.map +1 -1
- package/lib-es/api/network.d.ts +2 -6
- package/lib-es/api/network.d.ts.map +1 -1
- package/lib-es/api/network.js +3 -24
- package/lib-es/api/network.js.map +1 -1
- package/lib-es/bridge/buildOptimisticOperation.d.ts.map +1 -1
- package/lib-es/bridge/buildOptimisticOperation.js +7 -3
- package/lib-es/bridge/buildOptimisticOperation.js.map +1 -1
- package/lib-es/bridge/getTransactionStatus.d.ts.map +1 -1
- package/lib-es/bridge/getTransactionStatus.js +9 -12
- package/lib-es/bridge/getTransactionStatus.js.map +1 -1
- package/lib-es/bridge/utils.d.ts +4 -0
- package/lib-es/bridge/utils.d.ts.map +1 -1
- package/lib-es/bridge/utils.js +40 -3
- package/lib-es/bridge/utils.js.map +1 -1
- package/lib-es/errors.d.ts +12 -0
- package/lib-es/errors.d.ts.map +1 -1
- package/lib-es/errors.js +4 -0
- package/lib-es/errors.js.map +1 -1
- package/package.json +7 -7
- package/src/api/network.ts +2 -35
- package/src/bridge/buildOptimisticOperation.ts +7 -3
- package/src/bridge/getTransactionStatus.test.ts +27 -5
- package/src/bridge/getTransactionStatus.ts +14 -13
- package/src/bridge/utils.integration.test.ts +52 -0
- package/src/bridge/utils.ts +49 -2
- package/src/errors.ts +12 -0
- package/lib/api/mirror.test.d.ts +0 -2
- package/lib/api/mirror.test.d.ts.map +0 -1
- package/lib/api/mirror.test.js +0 -114
- package/lib/api/mirror.test.js.map +0 -1
- package/lib/api/network.test.d.ts +0 -2
- package/lib/api/network.test.d.ts.map +0 -1
- package/lib/api/network.test.js +0 -45
- package/lib/api/network.test.js.map +0 -1
- package/lib/bridge/buildOptimisticOperation.integration.test.d.ts +0 -2
- package/lib/bridge/buildOptimisticOperation.integration.test.d.ts.map +0 -1
- package/lib/bridge/buildOptimisticOperation.integration.test.js +0 -82
- package/lib/bridge/buildOptimisticOperation.integration.test.js.map +0 -1
- package/lib/bridge/getTransactionStatus.test.d.ts +0 -2
- package/lib/bridge/getTransactionStatus.test.d.ts.map +0 -1
- package/lib/bridge/getTransactionStatus.test.js +0 -176
- package/lib/bridge/getTransactionStatus.test.js.map +0 -1
- package/lib/bridge/js-estimateMaxSpendable.integration.test.d.ts +0 -2
- package/lib/bridge/js-estimateMaxSpendable.integration.test.d.ts.map +0 -1
- package/lib/bridge/js-estimateMaxSpendable.integration.test.js +0 -47
- package/lib/bridge/js-estimateMaxSpendable.integration.test.js.map +0 -1
- package/lib/bridge/js-transaction.test.d.ts +0 -2
- package/lib/bridge/js-transaction.test.d.ts.map +0 -1
- package/lib/bridge/js-transaction.test.js +0 -40
- package/lib/bridge/js-transaction.test.js.map +0 -1
- package/lib/bridge/prepareTransaction.test.d.ts +0 -2
- package/lib/bridge/prepareTransaction.test.d.ts.map +0 -1
- package/lib/bridge/prepareTransaction.test.js +0 -58
- package/lib/bridge/prepareTransaction.test.js.map +0 -1
- package/lib/bridge/serialization.test.d.ts +0 -2
- package/lib/bridge/serialization.test.d.ts.map +0 -1
- package/lib/bridge/serialization.test.js +0 -27
- package/lib/bridge/serialization.test.js.map +0 -1
- package/lib/bridge/transaction.test.d.ts +0 -2
- package/lib/bridge/transaction.test.d.ts.map +0 -1
- package/lib/bridge/transaction.test.js +0 -37
- package/lib/bridge/transaction.test.js.map +0 -1
- package/lib/bridge/utils.integration.test.d.ts +0 -2
- package/lib/bridge/utils.integration.test.d.ts.map +0 -1
- package/lib/bridge/utils.integration.test.js +0 -428
- package/lib/bridge/utils.integration.test.js.map +0 -1
- package/lib/logic.test.d.ts +0 -2
- package/lib/logic.test.d.ts.map +0 -1
- package/lib/logic.test.js +0 -111
- package/lib/logic.test.js.map +0 -1
- package/lib-es/api/mirror.test.d.ts +0 -2
- package/lib-es/api/mirror.test.d.ts.map +0 -1
- package/lib-es/api/mirror.test.js +0 -109
- package/lib-es/api/mirror.test.js.map +0 -1
- package/lib-es/api/network.test.d.ts +0 -2
- package/lib-es/api/network.test.d.ts.map +0 -1
- package/lib-es/api/network.test.js +0 -40
- package/lib-es/api/network.test.js.map +0 -1
- package/lib-es/bridge/buildOptimisticOperation.integration.test.d.ts +0 -2
- package/lib-es/bridge/buildOptimisticOperation.integration.test.d.ts.map +0 -1
- package/lib-es/bridge/buildOptimisticOperation.integration.test.js +0 -77
- package/lib-es/bridge/buildOptimisticOperation.integration.test.js.map +0 -1
- package/lib-es/bridge/getTransactionStatus.test.d.ts +0 -2
- package/lib-es/bridge/getTransactionStatus.test.d.ts.map +0 -1
- package/lib-es/bridge/getTransactionStatus.test.js +0 -148
- package/lib-es/bridge/getTransactionStatus.test.js.map +0 -1
- package/lib-es/bridge/js-estimateMaxSpendable.integration.test.d.ts +0 -2
- package/lib-es/bridge/js-estimateMaxSpendable.integration.test.d.ts.map +0 -1
- package/lib-es/bridge/js-estimateMaxSpendable.integration.test.js +0 -42
- package/lib-es/bridge/js-estimateMaxSpendable.integration.test.js.map +0 -1
- package/lib-es/bridge/js-transaction.test.d.ts +0 -2
- package/lib-es/bridge/js-transaction.test.d.ts.map +0 -1
- package/lib-es/bridge/js-transaction.test.js +0 -35
- package/lib-es/bridge/js-transaction.test.js.map +0 -1
- package/lib-es/bridge/prepareTransaction.test.d.ts +0 -2
- package/lib-es/bridge/prepareTransaction.test.d.ts.map +0 -1
- package/lib-es/bridge/prepareTransaction.test.js +0 -30
- package/lib-es/bridge/prepareTransaction.test.js.map +0 -1
- package/lib-es/bridge/serialization.test.d.ts +0 -2
- package/lib-es/bridge/serialization.test.d.ts.map +0 -1
- package/lib-es/bridge/serialization.test.js +0 -25
- package/lib-es/bridge/serialization.test.js.map +0 -1
- package/lib-es/bridge/transaction.test.d.ts +0 -2
- package/lib-es/bridge/transaction.test.d.ts.map +0 -1
- package/lib-es/bridge/transaction.test.js +0 -32
- package/lib-es/bridge/transaction.test.js.map +0 -1
- package/lib-es/bridge/utils.integration.test.d.ts +0 -2
- package/lib-es/bridge/utils.integration.test.d.ts.map +0 -1
- package/lib-es/bridge/utils.integration.test.js +0 -423
- package/lib-es/bridge/utils.integration.test.js.map +0 -1
- package/lib-es/logic.test.d.ts +0 -2
- package/lib-es/logic.test.d.ts.map +0 -1
- package/lib-es/logic.test.js +0 -109
- package/lib-es/logic.test.js.map +0 -1
package/src/bridge/utils.ts
CHANGED
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
import BigNumber from "bignumber.js";
|
|
2
2
|
import murmurhash from "imurmurhash";
|
|
3
3
|
import invariant from "invariant";
|
|
4
|
+
import { AccountId } from "@hashgraph/sdk";
|
|
5
|
+
import { InvalidAddress } from "@ledgerhq/errors";
|
|
4
6
|
import type { Account, Operation, TokenAccount } from "@ledgerhq/types-live";
|
|
5
7
|
import cvsApi from "@ledgerhq/live-countervalues/api/index";
|
|
6
8
|
import {
|
|
9
|
+
findCryptoCurrencyById,
|
|
7
10
|
findTokenByAddressInCurrency,
|
|
8
11
|
getFiatCurrencyByTicker,
|
|
9
12
|
listTokensForCryptoCurrency,
|
|
@@ -22,7 +25,9 @@ import { makeLRUCache, seconds } from "@ledgerhq/live-network/cache";
|
|
|
22
25
|
import { estimateMaxSpendable } from "./estimateMaxSpendable";
|
|
23
26
|
import type { HederaOperationExtra, Transaction } from "../types";
|
|
24
27
|
import { getAccount } from "../api/mirror";
|
|
28
|
+
import { getHederaClient } from "../api/network";
|
|
25
29
|
import type { HederaMirrorToken } from "../api/types";
|
|
30
|
+
import { HederaRecipientInvalidChecksum } from "../errors";
|
|
26
31
|
import { isTokenAssociateTransaction, isValidExtra } from "../logic";
|
|
27
32
|
import { BASE_USD_FEE_BY_OPERATION_TYPE, HEDERA_OPERATION_TYPES } from "../constants";
|
|
28
33
|
|
|
@@ -453,8 +458,15 @@ export function patchOperationWithExtra(
|
|
|
453
458
|
}
|
|
454
459
|
|
|
455
460
|
export const checkAccountTokenAssociationStatus = makeLRUCache(
|
|
456
|
-
async (
|
|
457
|
-
const
|
|
461
|
+
async (address: string, tokenId: string) => {
|
|
462
|
+
const [parsingError, parsingResult] = safeParseAccountId(address);
|
|
463
|
+
|
|
464
|
+
if (parsingError) {
|
|
465
|
+
throw parsingError;
|
|
466
|
+
}
|
|
467
|
+
|
|
468
|
+
const addressWithoutChecksum = parsingResult.accountId;
|
|
469
|
+
const mirrorAccount = await getAccount(addressWithoutChecksum);
|
|
458
470
|
|
|
459
471
|
// auto association is enabled
|
|
460
472
|
if (mirrorAccount.max_automatic_token_associations === -1) {
|
|
@@ -470,3 +482,38 @@ export const checkAccountTokenAssociationStatus = makeLRUCache(
|
|
|
470
482
|
(accountId, tokenId) => `${accountId}-${tokenId}`,
|
|
471
483
|
seconds(30),
|
|
472
484
|
);
|
|
485
|
+
|
|
486
|
+
export const safeParseAccountId = (
|
|
487
|
+
address: string,
|
|
488
|
+
): [Error, null] | [null, { accountId: string; checksum: string | null }] => {
|
|
489
|
+
const currency = findCryptoCurrencyById("hedera");
|
|
490
|
+
const currencyName = currency?.name ?? "Hedera";
|
|
491
|
+
|
|
492
|
+
try {
|
|
493
|
+
const accountId = AccountId.fromString(address);
|
|
494
|
+
|
|
495
|
+
// verify checksum if present
|
|
496
|
+
// FIXME: migrate to EntityIdHelper methods once SDK is upgraded:
|
|
497
|
+
// https://github.com/hiero-ledger/hiero-sdk-js/blob/main/src/EntityIdHelper.js#L197
|
|
498
|
+
// https://github.com/hiero-ledger/hiero-sdk-js/blob/main/src/EntityIdHelper.js#L446
|
|
499
|
+
const checksum: string | null = address.split("-")[1] ?? null;
|
|
500
|
+
if (checksum) {
|
|
501
|
+
const client = getHederaClient();
|
|
502
|
+
const recipientWithChecksum = accountId.toStringWithChecksum(client);
|
|
503
|
+
const expectedChecksum = recipientWithChecksum.split("-")[1];
|
|
504
|
+
|
|
505
|
+
if (checksum !== expectedChecksum) {
|
|
506
|
+
return [new HederaRecipientInvalidChecksum(), null];
|
|
507
|
+
}
|
|
508
|
+
}
|
|
509
|
+
|
|
510
|
+
const result = {
|
|
511
|
+
accountId: accountId.toString(),
|
|
512
|
+
checksum,
|
|
513
|
+
};
|
|
514
|
+
|
|
515
|
+
return [null, result];
|
|
516
|
+
} catch (err) {
|
|
517
|
+
return [new InvalidAddress("", { currencyName }), null];
|
|
518
|
+
}
|
|
519
|
+
};
|
package/src/errors.ts
CHANGED
|
@@ -1,3 +1,15 @@
|
|
|
1
1
|
import { createCustomErrorClass } from "@ledgerhq/errors";
|
|
2
2
|
|
|
3
3
|
export const HederaAddAccountError = createCustomErrorClass("HederaAddAccountError");
|
|
4
|
+
export const HederaRecipientInvalidChecksum = createCustomErrorClass(
|
|
5
|
+
"HederaRecipientInvalidChecksum",
|
|
6
|
+
);
|
|
7
|
+
export const HederaInsufficientFundsForAssociation = createCustomErrorClass(
|
|
8
|
+
"HederaInsufficientFundsForAssociation",
|
|
9
|
+
);
|
|
10
|
+
export const HederaRecipientTokenAssociationRequired = createCustomErrorClass(
|
|
11
|
+
"HederaRecipientTokenAssociationRequired",
|
|
12
|
+
);
|
|
13
|
+
export const HederaRecipientTokenAssociationUnverified = createCustomErrorClass(
|
|
14
|
+
"HederaRecipientTokenAssociationUnverified",
|
|
15
|
+
);
|
package/lib/api/mirror.test.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"mirror.test.d.ts","sourceRoot":"","sources":["../../src/api/mirror.test.ts"],"names":[],"mappings":""}
|
package/lib/api/mirror.test.js
DELETED
|
@@ -1,114 +0,0 @@
|
|
|
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
|
-
const network_1 = __importDefault(require("@ledgerhq/live-network/network"));
|
|
7
|
-
const mirror_1 = require("./mirror");
|
|
8
|
-
jest.mock("@ledgerhq/live-network/network");
|
|
9
|
-
const mockedNetwork = jest.mocked(network_1.default);
|
|
10
|
-
const makeMockResponse = (data) => ({
|
|
11
|
-
data,
|
|
12
|
-
status: 200,
|
|
13
|
-
statusText: "OK",
|
|
14
|
-
headers: {},
|
|
15
|
-
config: {
|
|
16
|
-
headers: {},
|
|
17
|
-
},
|
|
18
|
-
});
|
|
19
|
-
describe("getAccountTransactions", () => {
|
|
20
|
-
beforeEach(() => {
|
|
21
|
-
jest.clearAllMocks();
|
|
22
|
-
});
|
|
23
|
-
test("should include 'account.id', 'limit=100' and 'order=desc' query params", async () => {
|
|
24
|
-
mockedNetwork.mockResolvedValueOnce(makeMockResponse({ transactions: [], links: { next: null } }));
|
|
25
|
-
await (0, mirror_1.getAccountTransactions)("0.0.1234", null);
|
|
26
|
-
const requestUrl = mockedNetwork.mock.calls[0][0].url;
|
|
27
|
-
expect(requestUrl).toContain("account.id=0.0.1234");
|
|
28
|
-
expect(requestUrl).toContain("limit=100");
|
|
29
|
-
expect(requestUrl).toContain("order=desc");
|
|
30
|
-
});
|
|
31
|
-
test("should keep fetching if links.next is present", async () => {
|
|
32
|
-
mockedNetwork
|
|
33
|
-
.mockResolvedValueOnce(makeMockResponse({
|
|
34
|
-
transactions: [{ consensus_timestamp: "1" }],
|
|
35
|
-
links: { next: "/next-1" },
|
|
36
|
-
}))
|
|
37
|
-
.mockResolvedValueOnce(makeMockResponse({
|
|
38
|
-
transactions: [],
|
|
39
|
-
links: { next: "/next-2" },
|
|
40
|
-
}))
|
|
41
|
-
.mockResolvedValueOnce(makeMockResponse({
|
|
42
|
-
transactions: [{ consensus_timestamp: "3" }],
|
|
43
|
-
links: { next: "/next-3" },
|
|
44
|
-
}))
|
|
45
|
-
.mockResolvedValueOnce(makeMockResponse({
|
|
46
|
-
transactions: [],
|
|
47
|
-
links: { next: "/next-4" },
|
|
48
|
-
}))
|
|
49
|
-
.mockResolvedValueOnce(makeMockResponse({
|
|
50
|
-
transactions: [],
|
|
51
|
-
links: { next: null },
|
|
52
|
-
}));
|
|
53
|
-
const result = await (0, mirror_1.getAccountTransactions)("0.0.1234", null);
|
|
54
|
-
expect(result).toHaveLength(2);
|
|
55
|
-
expect(result.map(tx => tx.consensus_timestamp)).toEqual(["1", "3"]);
|
|
56
|
-
expect(mockedNetwork).toHaveBeenCalledTimes(5);
|
|
57
|
-
});
|
|
58
|
-
});
|
|
59
|
-
describe("getAccount", () => {
|
|
60
|
-
beforeEach(() => {
|
|
61
|
-
jest.clearAllMocks();
|
|
62
|
-
});
|
|
63
|
-
it("should call the correct endpoint and return account data", async () => {
|
|
64
|
-
mockedNetwork.mockResolvedValueOnce(makeMockResponse({
|
|
65
|
-
account: "0.0.1234",
|
|
66
|
-
max_automatic_token_associations: 0,
|
|
67
|
-
balance: {
|
|
68
|
-
balance: 1000,
|
|
69
|
-
timestamp: "1749047764.000113442",
|
|
70
|
-
tokens: [],
|
|
71
|
-
},
|
|
72
|
-
}));
|
|
73
|
-
const result = await (0, mirror_1.getAccount)("0.0.1234");
|
|
74
|
-
const requestUrl = mockedNetwork.mock.calls[0][0].url;
|
|
75
|
-
expect(result.account).toEqual("0.0.1234");
|
|
76
|
-
expect(requestUrl).toContain("/api/v1/accounts/0.0.1234");
|
|
77
|
-
expect(mockedNetwork).toHaveBeenCalledTimes(1);
|
|
78
|
-
});
|
|
79
|
-
});
|
|
80
|
-
describe("getAccountTokens", () => {
|
|
81
|
-
beforeEach(() => {
|
|
82
|
-
jest.clearAllMocks();
|
|
83
|
-
});
|
|
84
|
-
it("should return all tokens if only one page is needed", async () => {
|
|
85
|
-
mockedNetwork.mockResolvedValueOnce(makeMockResponse({
|
|
86
|
-
tokens: [
|
|
87
|
-
{ token_id: "0.0.1001", balance: 10 },
|
|
88
|
-
{ token_id: "0.0.1002", balance: 20 },
|
|
89
|
-
],
|
|
90
|
-
links: { next: null },
|
|
91
|
-
}));
|
|
92
|
-
const result = await (0, mirror_1.getAccountTokens)("0.0.1234");
|
|
93
|
-
const requestUrl = mockedNetwork.mock.calls[0][0].url;
|
|
94
|
-
expect(result.map(t => t.token_id)).toEqual(["0.0.1001", "0.0.1002"]);
|
|
95
|
-
expect(requestUrl).toContain("/api/v1/accounts/0.0.1234/tokens");
|
|
96
|
-
expect(requestUrl).toContain("limit=100");
|
|
97
|
-
expect(mockedNetwork).toHaveBeenCalledTimes(1);
|
|
98
|
-
});
|
|
99
|
-
it("should keep fetching if links.next is present and new tokens are returned", async () => {
|
|
100
|
-
mockedNetwork
|
|
101
|
-
.mockResolvedValueOnce(makeMockResponse({
|
|
102
|
-
tokens: [{ token_id: "0.0.1001", balance: 10 }],
|
|
103
|
-
links: { next: "/next-1" },
|
|
104
|
-
}))
|
|
105
|
-
.mockResolvedValueOnce(makeMockResponse({
|
|
106
|
-
tokens: [{ token_id: "0.0.1002", balance: 20 }],
|
|
107
|
-
links: { next: null },
|
|
108
|
-
}));
|
|
109
|
-
const result = await (0, mirror_1.getAccountTokens)("0.0.1234");
|
|
110
|
-
expect(result.map(t => t.token_id)).toEqual(["0.0.1001", "0.0.1002"]);
|
|
111
|
-
expect(mockedNetwork).toHaveBeenCalledTimes(2);
|
|
112
|
-
});
|
|
113
|
-
});
|
|
114
|
-
//# sourceMappingURL=mirror.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"mirror.test.js","sourceRoot":"","sources":["../../src/api/mirror.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"network.test.d.ts","sourceRoot":"","sources":["../../src/api/network.test.ts"],"names":[],"mappings":""}
|
package/lib/api/network.test.js
DELETED
|
@@ -1,45 +0,0 @@
|
|
|
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
|
-
const bignumber_js_1 = __importDefault(require("bignumber.js"));
|
|
7
|
-
const sdk_1 = require("@hashgraph/sdk");
|
|
8
|
-
const network_1 = require("./network");
|
|
9
|
-
const invariant_1 = __importDefault(require("invariant"));
|
|
10
|
-
describe("buildUnsignedTransaction", () => {
|
|
11
|
-
const mockAccount = {
|
|
12
|
-
freshAddress: "0.0.123",
|
|
13
|
-
id: "hedera:0:0.0.123",
|
|
14
|
-
balance: new bignumber_js_1.default(1000),
|
|
15
|
-
};
|
|
16
|
-
test("builds basic transaction without maxFee", async () => {
|
|
17
|
-
const transaction = {
|
|
18
|
-
family: "hedera",
|
|
19
|
-
amount: new bignumber_js_1.default(100),
|
|
20
|
-
recipient: "0.0.456",
|
|
21
|
-
memo: "test memo",
|
|
22
|
-
};
|
|
23
|
-
const result = await (0, network_1.buildUnsignedTransaction)({ account: mockAccount, transaction });
|
|
24
|
-
expect(result).toBeInstanceOf(sdk_1.TransferTransaction);
|
|
25
|
-
(0, invariant_1.default)(result instanceof sdk_1.TransferTransaction, "hedera: TransferTransaction type guard");
|
|
26
|
-
expect(result.transactionMemo).toBe("test memo");
|
|
27
|
-
expect(result.isFrozen()).toBe(true);
|
|
28
|
-
expect(result.hbarTransfers.size).toBe(2);
|
|
29
|
-
const senderTransfer = result.hbarTransfers.get("0.0.123");
|
|
30
|
-
const recipientTransfer = result.hbarTransfers.get("0.0.456");
|
|
31
|
-
expect(senderTransfer?.toTinybars().toNumber()).toBe(-100);
|
|
32
|
-
expect(recipientTransfer?.toTinybars().toNumber()).toBe(100);
|
|
33
|
-
});
|
|
34
|
-
test("sets max transaction fee when provided", async () => {
|
|
35
|
-
const transaction = {
|
|
36
|
-
family: "hedera",
|
|
37
|
-
amount: new bignumber_js_1.default(100),
|
|
38
|
-
recipient: "0.0.456",
|
|
39
|
-
maxFee: new bignumber_js_1.default(50),
|
|
40
|
-
};
|
|
41
|
-
const result = await (0, network_1.buildUnsignedTransaction)({ account: mockAccount, transaction });
|
|
42
|
-
expect(result.maxTransactionFee?.toTinybars().toNumber()).toBe(50);
|
|
43
|
-
});
|
|
44
|
-
});
|
|
45
|
-
//# sourceMappingURL=network.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"network.test.js","sourceRoot":"","sources":["../../src/api/network.test.ts"],"names":[],"mappings":";;;;;AAAA,gEAAqC;AACrC,wCAAqD;AAErD,uCAAqD;AAErD,0DAAkC;AAElC,QAAQ,CAAC,0BAA0B,EAAE,GAAG,EAAE;IACxC,MAAM,WAAW,GAAG;QAClB,YAAY,EAAE,SAAS;QACvB,EAAE,EAAE,kBAAkB;QACtB,OAAO,EAAE,IAAI,sBAAS,CAAC,IAAI,CAAC;KAClB,CAAC;IAEb,IAAI,CAAC,yCAAyC,EAAE,KAAK,IAAI,EAAE;QACzD,MAAM,WAAW,GAAgB;YAC/B,MAAM,EAAE,QAAQ;YAChB,MAAM,EAAE,IAAI,sBAAS,CAAC,GAAG,CAAC;YAC1B,SAAS,EAAE,SAAS;YACpB,IAAI,EAAE,WAAW;SAClB,CAAC;QAEF,MAAM,MAAM,GAAG,MAAM,IAAA,kCAAwB,EAAC,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,CAAC,CAAC;QAErF,MAAM,CAAC,MAAM,CAAC,CAAC,cAAc,CAAC,yBAAmB,CAAC,CAAC;QACnD,IAAA,mBAAS,EAAC,MAAM,YAAY,yBAAmB,EAAE,wCAAwC,CAAC,CAAC;QAC3F,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACjD,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrC,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAE1C,MAAM,cAAc,GAAG,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC3D,MAAM,iBAAiB,GAAG,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAE9D,MAAM,CAAC,cAAc,EAAE,UAAU,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QAC3D,MAAM,CAAC,iBAAiB,EAAE,UAAU,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC/D,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,wCAAwC,EAAE,KAAK,IAAI,EAAE;QACxD,MAAM,WAAW,GAAgB;YAC/B,MAAM,EAAE,QAAQ;YAChB,MAAM,EAAE,IAAI,sBAAS,CAAC,GAAG,CAAC;YAC1B,SAAS,EAAE,SAAS;YACpB,MAAM,EAAE,IAAI,sBAAS,CAAC,EAAE,CAAC;SAC1B,CAAC;QAEF,MAAM,MAAM,GAAG,MAAM,IAAA,kCAAwB,EAAC,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,CAAC,CAAC;QACrF,MAAM,CAAC,MAAM,CAAC,iBAAiB,EAAE,UAAU,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACrE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"buildOptimisticOperation.integration.test.d.ts","sourceRoot":"","sources":["../../src/bridge/buildOptimisticOperation.integration.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,82 +0,0 @@
|
|
|
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
|
-
const bignumber_js_1 = __importDefault(require("bignumber.js"));
|
|
7
|
-
const account_fixture_1 = require("../test/fixtures/account.fixture");
|
|
8
|
-
const currency_fixture_1 = require("../test/fixtures/currency.fixture");
|
|
9
|
-
const transaction_fixture_1 = require("../test/fixtures/transaction.fixture");
|
|
10
|
-
const buildOptimisticOperation_1 = require("./buildOptimisticOperation");
|
|
11
|
-
const utils_1 = require("./utils");
|
|
12
|
-
const constants_1 = require("../constants");
|
|
13
|
-
describe("buildOptimisticOperation", () => {
|
|
14
|
-
let estimatedFees;
|
|
15
|
-
beforeAll(async () => {
|
|
16
|
-
const mockedAccount = (0, account_fixture_1.getMockedAccount)();
|
|
17
|
-
const [crypto, associate] = await Promise.all([
|
|
18
|
-
(0, utils_1.getEstimatedFees)(mockedAccount, constants_1.HEDERA_OPERATION_TYPES.CryptoTransfer),
|
|
19
|
-
(0, utils_1.getEstimatedFees)(mockedAccount, constants_1.HEDERA_OPERATION_TYPES.TokenAssociate),
|
|
20
|
-
]);
|
|
21
|
-
estimatedFees = { crypto, associate };
|
|
22
|
-
});
|
|
23
|
-
test("builds optimistic operation for token association", async () => {
|
|
24
|
-
const mockedAccount = (0, account_fixture_1.getMockedAccount)();
|
|
25
|
-
const mockedToken = (0, currency_fixture_1.getMockedTokenCurrency)();
|
|
26
|
-
const mockedTransaction = (0, transaction_fixture_1.getMockedTransaction)({
|
|
27
|
-
amount: new bignumber_js_1.default(0),
|
|
28
|
-
recipient: "0.0.1234",
|
|
29
|
-
properties: {
|
|
30
|
-
name: constants_1.HEDERA_TRANSACTION_KINDS.TokenAssociate.name,
|
|
31
|
-
token: mockedToken,
|
|
32
|
-
},
|
|
33
|
-
});
|
|
34
|
-
const op = await (0, buildOptimisticOperation_1.buildOptimisticOperation)({
|
|
35
|
-
account: mockedAccount,
|
|
36
|
-
transaction: mockedTransaction,
|
|
37
|
-
});
|
|
38
|
-
expect(op.type).toBe("ASSOCIATE_TOKEN");
|
|
39
|
-
expect(op.extra).toEqual({ associatedTokenId: mockedToken.contractAddress });
|
|
40
|
-
expect(op.fee).toEqual(estimatedFees.associate);
|
|
41
|
-
expect(op.senders).toContain(mockedAccount.freshAddress.toString());
|
|
42
|
-
expect(op.recipients).toContain("0.0.1234");
|
|
43
|
-
});
|
|
44
|
-
test("builds optimistic operation for coin", async () => {
|
|
45
|
-
const mockedAccount = (0, account_fixture_1.getMockedAccount)();
|
|
46
|
-
const mockedTransaction = (0, transaction_fixture_1.getMockedTransaction)({
|
|
47
|
-
amount: new bignumber_js_1.default(123),
|
|
48
|
-
recipient: "0.0.5678",
|
|
49
|
-
});
|
|
50
|
-
const op = await (0, buildOptimisticOperation_1.buildOptimisticOperation)({
|
|
51
|
-
account: mockedAccount,
|
|
52
|
-
transaction: mockedTransaction,
|
|
53
|
-
});
|
|
54
|
-
expect(op.type).toBe("OUT");
|
|
55
|
-
expect(op.fee).toEqual(estimatedFees.crypto);
|
|
56
|
-
expect(op.value).toEqual(new bignumber_js_1.default(123));
|
|
57
|
-
expect(op.senders).toContain(mockedAccount.freshAddress.toString());
|
|
58
|
-
expect(op.recipients).toContain("0.0.5678");
|
|
59
|
-
});
|
|
60
|
-
test("builds optimistic operation for token", async () => {
|
|
61
|
-
const mockedTokenCurrency = (0, currency_fixture_1.getMockedTokenCurrency)();
|
|
62
|
-
const tokenAccount = (0, account_fixture_1.getMockedTokenAccount)(mockedTokenCurrency);
|
|
63
|
-
const parentAccount = (0, account_fixture_1.getMockedAccount)({ subAccounts: [tokenAccount] });
|
|
64
|
-
const mockedTransaction = (0, transaction_fixture_1.getMockedTransaction)({
|
|
65
|
-
subAccountId: tokenAccount.id,
|
|
66
|
-
amount: new bignumber_js_1.default(123),
|
|
67
|
-
recipient: "0.0.9999",
|
|
68
|
-
});
|
|
69
|
-
const op = await (0, buildOptimisticOperation_1.buildOptimisticOperation)({
|
|
70
|
-
account: parentAccount,
|
|
71
|
-
transaction: mockedTransaction,
|
|
72
|
-
});
|
|
73
|
-
const subOp = op.subOperations[0];
|
|
74
|
-
expect(op.type).toBe("FEES");
|
|
75
|
-
expect(op.subOperations).toHaveLength(1);
|
|
76
|
-
expect(subOp.type).toBe("OUT");
|
|
77
|
-
expect(subOp.value).toEqual(new bignumber_js_1.default(123));
|
|
78
|
-
expect(subOp.accountId).toBe(tokenAccount.id);
|
|
79
|
-
expect(subOp.recipients).toContain("0.0.9999");
|
|
80
|
-
});
|
|
81
|
-
});
|
|
82
|
-
//# sourceMappingURL=buildOptimisticOperation.integration.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"buildOptimisticOperation.integration.test.js","sourceRoot":"","sources":["../../src/bridge/buildOptimisticOperation.integration.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"getTransactionStatus.test.d.ts","sourceRoot":"","sources":["../../src/bridge/getTransactionStatus.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,176 +0,0 @@
|
|
|
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
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
26
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
27
|
-
};
|
|
28
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
-
const bignumber_js_1 = __importDefault(require("bignumber.js"));
|
|
30
|
-
const errors_1 = require("@ledgerhq/errors");
|
|
31
|
-
const account_fixture_1 = require("../test/fixtures/account.fixture");
|
|
32
|
-
const currency_fixture_1 = require("../test/fixtures/currency.fixture");
|
|
33
|
-
const transaction_fixture_1 = require("../test/fixtures/transaction.fixture");
|
|
34
|
-
const getTransactionStatus_1 = require("./getTransactionStatus");
|
|
35
|
-
const utils = __importStar(require("./utils"));
|
|
36
|
-
const constants_1 = require("../constants");
|
|
37
|
-
describe("getTransactionStatus", () => {
|
|
38
|
-
const mockedEstimatedFee = new bignumber_js_1.default(1);
|
|
39
|
-
const mockedUsdRate = new bignumber_js_1.default(1);
|
|
40
|
-
const validRecipientAddress = "0.0.1234567";
|
|
41
|
-
const invalidRecipientAddress = "invalid_address";
|
|
42
|
-
beforeEach(() => {
|
|
43
|
-
jest.clearAllMocks();
|
|
44
|
-
jest.spyOn(utils, "getCurrencyToUSDRate").mockResolvedValueOnce(mockedUsdRate);
|
|
45
|
-
jest.spyOn(utils, "getEstimatedFees").mockResolvedValueOnce(mockedEstimatedFee);
|
|
46
|
-
});
|
|
47
|
-
test("coin transfer with valid recipient and sufficient balance completes successfully", async () => {
|
|
48
|
-
const mockedAccount = (0, account_fixture_1.getMockedAccount)({ balance: new bignumber_js_1.default(1000) });
|
|
49
|
-
const mockedTransaction = (0, transaction_fixture_1.getMockedTransaction)({
|
|
50
|
-
recipient: validRecipientAddress,
|
|
51
|
-
amount: new bignumber_js_1.default(100),
|
|
52
|
-
});
|
|
53
|
-
const result = await (0, getTransactionStatus_1.getTransactionStatus)(mockedAccount, mockedTransaction);
|
|
54
|
-
expect(result.errors).toEqual({});
|
|
55
|
-
expect(result.warnings).toEqual({});
|
|
56
|
-
expect(result.amount).toEqual(new bignumber_js_1.default(100));
|
|
57
|
-
expect(result.totalSpent.isGreaterThan(100)).toBe(true);
|
|
58
|
-
});
|
|
59
|
-
test("token transfer with valid recipient and sufficient balance completes successfully", async () => {
|
|
60
|
-
jest.spyOn(utils, "checkAccountTokenAssociationStatus").mockResolvedValueOnce(true);
|
|
61
|
-
const tokenCurrency = (0, currency_fixture_1.getMockedTokenCurrency)();
|
|
62
|
-
const tokenAccount = (0, account_fixture_1.getMockedTokenAccount)(tokenCurrency, { balance: new bignumber_js_1.default(500) });
|
|
63
|
-
const account = (0, account_fixture_1.getMockedAccount)({ balance: new bignumber_js_1.default(1000), subAccounts: [tokenAccount] });
|
|
64
|
-
const transaction = (0, transaction_fixture_1.getMockedTransaction)({
|
|
65
|
-
subAccountId: tokenAccount.id,
|
|
66
|
-
recipient: validRecipientAddress,
|
|
67
|
-
amount: new bignumber_js_1.default(200),
|
|
68
|
-
});
|
|
69
|
-
const result = await (0, getTransactionStatus_1.getTransactionStatus)(account, transaction);
|
|
70
|
-
expect(result.errors).toEqual({});
|
|
71
|
-
expect(result.warnings).toEqual({});
|
|
72
|
-
expect(result.amount).toEqual(new bignumber_js_1.default(200));
|
|
73
|
-
});
|
|
74
|
-
test("token associate transaction with sufficient USD worth completes successfully", async () => {
|
|
75
|
-
const mockedTokenCurrency = (0, currency_fixture_1.getMockedTokenCurrency)();
|
|
76
|
-
const mockedAccount = (0, account_fixture_1.getMockedAccount)();
|
|
77
|
-
const mockedTransaction = (0, transaction_fixture_1.getMockedTransaction)({
|
|
78
|
-
properties: {
|
|
79
|
-
name: constants_1.HEDERA_TRANSACTION_KINDS.TokenAssociate.name,
|
|
80
|
-
token: mockedTokenCurrency,
|
|
81
|
-
},
|
|
82
|
-
});
|
|
83
|
-
const result = await (0, getTransactionStatus_1.getTransactionStatus)(mockedAccount, mockedTransaction);
|
|
84
|
-
expect(result.amount).toEqual(new bignumber_js_1.default(0));
|
|
85
|
-
expect(result.errors).toEqual({});
|
|
86
|
-
expect(result.warnings).toEqual({});
|
|
87
|
-
expect(result.totalSpent).toEqual(mockedEstimatedFee);
|
|
88
|
-
expect(result.estimatedFees).toEqual(mockedEstimatedFee);
|
|
89
|
-
});
|
|
90
|
-
test("adds error for invalid recipient address", async () => {
|
|
91
|
-
const mockedAccount = (0, account_fixture_1.getMockedAccount)();
|
|
92
|
-
const mockedTransaction = (0, transaction_fixture_1.getMockedTransaction)({ recipient: invalidRecipientAddress });
|
|
93
|
-
const result = await (0, getTransactionStatus_1.getTransactionStatus)(mockedAccount, mockedTransaction);
|
|
94
|
-
expect(result.errors.recipient).toBeInstanceOf(errors_1.InvalidAddress);
|
|
95
|
-
});
|
|
96
|
-
test("adds error for self transfers", async () => {
|
|
97
|
-
const mockedAccount = (0, account_fixture_1.getMockedAccount)();
|
|
98
|
-
const mockedTransaction = (0, transaction_fixture_1.getMockedTransaction)({
|
|
99
|
-
recipient: mockedAccount.freshAddress,
|
|
100
|
-
});
|
|
101
|
-
const result = await (0, getTransactionStatus_1.getTransactionStatus)(mockedAccount, mockedTransaction);
|
|
102
|
-
expect(result.errors.recipient).toBeInstanceOf(errors_1.InvalidAddressBecauseDestinationIsAlsoSource);
|
|
103
|
-
});
|
|
104
|
-
test("adds error during coin transfer with insufficient balance", async () => {
|
|
105
|
-
const mockedAccount = (0, account_fixture_1.getMockedAccount)({ balance: new bignumber_js_1.default(0) });
|
|
106
|
-
const mockedTransaction = (0, transaction_fixture_1.getMockedTransaction)({
|
|
107
|
-
amount: new bignumber_js_1.default(100),
|
|
108
|
-
recipient: validRecipientAddress,
|
|
109
|
-
});
|
|
110
|
-
const result = await (0, getTransactionStatus_1.getTransactionStatus)(mockedAccount, mockedTransaction);
|
|
111
|
-
expect(result.errors.amount).toBeInstanceOf(errors_1.NotEnoughBalance);
|
|
112
|
-
});
|
|
113
|
-
test("adds error if USD balance is too low for token association", async () => {
|
|
114
|
-
const mockedTokenCurrency = (0, currency_fixture_1.getMockedTokenCurrency)();
|
|
115
|
-
const mockedAccount = (0, account_fixture_1.getMockedAccount)({ balance: new bignumber_js_1.default(0) });
|
|
116
|
-
const mockedTransaction = (0, transaction_fixture_1.getMockedTransaction)({
|
|
117
|
-
properties: {
|
|
118
|
-
name: constants_1.HEDERA_TRANSACTION_KINDS.TokenAssociate.name,
|
|
119
|
-
token: mockedTokenCurrency,
|
|
120
|
-
},
|
|
121
|
-
});
|
|
122
|
-
const result = await (0, getTransactionStatus_1.getTransactionStatus)(mockedAccount, mockedTransaction);
|
|
123
|
-
expect(result.errors.insufficientAssociateBalance).toBeInstanceOf(errors_1.HederaInsufficientFundsForAssociation);
|
|
124
|
-
});
|
|
125
|
-
test("adds warning during token transfer if recipient has no token associated", async () => {
|
|
126
|
-
jest.spyOn(utils, "checkAccountTokenAssociationStatus").mockResolvedValueOnce(false);
|
|
127
|
-
const mockedTokenCurrency = (0, currency_fixture_1.getMockedTokenCurrency)();
|
|
128
|
-
const mockedTokenAccount = (0, account_fixture_1.getMockedTokenAccount)(mockedTokenCurrency);
|
|
129
|
-
const mockedAccount = (0, account_fixture_1.getMockedAccount)({ subAccounts: [mockedTokenAccount] });
|
|
130
|
-
const mockedTransaction = (0, transaction_fixture_1.getMockedTransaction)({
|
|
131
|
-
subAccountId: mockedTokenAccount.id,
|
|
132
|
-
recipient: validRecipientAddress,
|
|
133
|
-
});
|
|
134
|
-
const result = await (0, getTransactionStatus_1.getTransactionStatus)(mockedAccount, mockedTransaction);
|
|
135
|
-
expect(result.warnings.missingAssociation).toBeInstanceOf(errors_1.HederaRecipientTokenAssociationRequired);
|
|
136
|
-
});
|
|
137
|
-
test("adds warning if token association status can't be verified", async () => {
|
|
138
|
-
jest
|
|
139
|
-
.spyOn(utils, "checkAccountTokenAssociationStatus")
|
|
140
|
-
.mockRejectedValueOnce(new errors_1.HederaRecipientTokenAssociationUnverified());
|
|
141
|
-
const mockedTokenCurrency = (0, currency_fixture_1.getMockedTokenCurrency)();
|
|
142
|
-
const mockedTokenAccount = (0, account_fixture_1.getMockedTokenAccount)(mockedTokenCurrency);
|
|
143
|
-
const mockedAccount = (0, account_fixture_1.getMockedAccount)({ subAccounts: [mockedTokenAccount] });
|
|
144
|
-
const mockedTransaction = (0, transaction_fixture_1.getMockedTransaction)({
|
|
145
|
-
subAccountId: mockedTokenAccount.id,
|
|
146
|
-
recipient: validRecipientAddress,
|
|
147
|
-
});
|
|
148
|
-
const result = await (0, getTransactionStatus_1.getTransactionStatus)(mockedAccount, mockedTransaction);
|
|
149
|
-
expect(result.warnings.unverifiedAssociation).toBeInstanceOf(errors_1.HederaRecipientTokenAssociationUnverified);
|
|
150
|
-
});
|
|
151
|
-
test("adds error during token transfer with insufficient balance", async () => {
|
|
152
|
-
const mockedTokenCurrency = (0, currency_fixture_1.getMockedTokenCurrency)();
|
|
153
|
-
const mockedTokenAccount = (0, account_fixture_1.getMockedTokenAccount)(mockedTokenCurrency, {
|
|
154
|
-
balance: new bignumber_js_1.default(0),
|
|
155
|
-
});
|
|
156
|
-
const mockedAccount = (0, account_fixture_1.getMockedAccount)({ subAccounts: [mockedTokenAccount] });
|
|
157
|
-
const mockedTransaction = (0, transaction_fixture_1.getMockedTransaction)({
|
|
158
|
-
subAccountId: mockedTokenAccount.id,
|
|
159
|
-
recipient: validRecipientAddress,
|
|
160
|
-
amount: new bignumber_js_1.default(100),
|
|
161
|
-
});
|
|
162
|
-
const result = await (0, getTransactionStatus_1.getTransactionStatus)(mockedAccount, mockedTransaction);
|
|
163
|
-
expect(result.errors.amount).toBeInstanceOf(errors_1.NotEnoughBalance);
|
|
164
|
-
});
|
|
165
|
-
test("adds error if amount is zero and useAllAmount is false", async () => {
|
|
166
|
-
const mockedAccount = (0, account_fixture_1.getMockedAccount)();
|
|
167
|
-
const mockedTransaction = (0, transaction_fixture_1.getMockedTransaction)({
|
|
168
|
-
recipient: validRecipientAddress,
|
|
169
|
-
amount: new bignumber_js_1.default(0),
|
|
170
|
-
useAllAmount: false,
|
|
171
|
-
});
|
|
172
|
-
const result = await (0, getTransactionStatus_1.getTransactionStatus)(mockedAccount, mockedTransaction);
|
|
173
|
-
expect(result.errors.amount).toBeInstanceOf(errors_1.AmountRequired);
|
|
174
|
-
});
|
|
175
|
-
});
|
|
176
|
-
//# sourceMappingURL=getTransactionStatus.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"getTransactionStatus.test.js","sourceRoot":"","sources":["../../src/bridge/getTransactionStatus.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"js-estimateMaxSpendable.integration.test.d.ts","sourceRoot":"","sources":["../../src/bridge/js-estimateMaxSpendable.integration.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,47 +0,0 @@
|
|
|
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
|
-
const bignumber_js_1 = __importDefault(require("bignumber.js"));
|
|
7
|
-
const _1 = require(".");
|
|
8
|
-
const utils_1 = require("./utils");
|
|
9
|
-
const account_fixture_1 = require("../test/fixtures/account.fixture");
|
|
10
|
-
const currency_fixture_1 = require("../test/fixtures/currency.fixture");
|
|
11
|
-
const constants_1 = require("../constants");
|
|
12
|
-
describe("js-estimateMaxSpendable", () => {
|
|
13
|
-
let bridge;
|
|
14
|
-
let estimatedFees;
|
|
15
|
-
beforeAll(async () => {
|
|
16
|
-
const signer = jest.fn();
|
|
17
|
-
bridge = (0, _1.createBridges)(signer);
|
|
18
|
-
const mockedAccount = (0, account_fixture_1.getMockedAccount)();
|
|
19
|
-
const crypto = await (0, utils_1.getEstimatedFees)(mockedAccount, constants_1.HEDERA_OPERATION_TYPES.CryptoTransfer);
|
|
20
|
-
estimatedFees = { crypto };
|
|
21
|
-
});
|
|
22
|
-
test("estimateMaxSpendable returns balance minus fee", async () => {
|
|
23
|
-
const mockedAccount = (0, account_fixture_1.getMockedAccount)();
|
|
24
|
-
const result = await bridge.accountBridge.estimateMaxSpendable({
|
|
25
|
-
account: mockedAccount,
|
|
26
|
-
});
|
|
27
|
-
expect(result).toEqual(mockedAccount.balance.minus(estimatedFees.crypto));
|
|
28
|
-
});
|
|
29
|
-
test("estimateMaxSpendable returns 0 if balance < estimated fees", async () => {
|
|
30
|
-
const mockedAccount = (0, account_fixture_1.getMockedAccount)({ balance: estimatedFees.crypto.minus(1) });
|
|
31
|
-
const result = await bridge.accountBridge.estimateMaxSpendable({
|
|
32
|
-
account: mockedAccount,
|
|
33
|
-
});
|
|
34
|
-
expect(result).toEqual(new bignumber_js_1.default(0));
|
|
35
|
-
});
|
|
36
|
-
test("estimateMaxSpendable returns token balance for token account", async () => {
|
|
37
|
-
const mockedTokenCurrency = (0, currency_fixture_1.getMockedTokenCurrency)();
|
|
38
|
-
const mockedTokenAccount = (0, account_fixture_1.getMockedTokenAccount)(mockedTokenCurrency);
|
|
39
|
-
const mockedAccount = (0, account_fixture_1.getMockedAccount)({ subAccounts: [mockedTokenAccount] });
|
|
40
|
-
const result = await bridge.accountBridge.estimateMaxSpendable({
|
|
41
|
-
account: mockedTokenAccount,
|
|
42
|
-
parentAccount: mockedAccount,
|
|
43
|
-
});
|
|
44
|
-
expect(result).toEqual(mockedTokenAccount.balance);
|
|
45
|
-
});
|
|
46
|
-
});
|
|
47
|
-
//# sourceMappingURL=js-estimateMaxSpendable.integration.test.js.map
|