@ledgerhq/coin-hedera 1.10.1 → 1.10.2-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/.eslintrc.js +1 -0
- package/.turbo/turbo-build.log +1 -1
- package/CHANGELOG.md +19 -0
- package/lib/api/mirror.d.ts +3 -20
- package/lib/api/mirror.d.ts.map +1 -1
- package/lib/api/mirror.js +32 -90
- package/lib/api/mirror.js.map +1 -1
- package/lib/api/mirror.test.js +59 -4
- package/lib/api/mirror.test.js.map +1 -1
- package/lib/api/network.d.ts +3 -3
- package/lib/api/network.d.ts.map +1 -1
- package/lib/api/network.js +46 -3
- package/lib/api/network.js.map +1 -1
- package/lib/api/types.d.ts +44 -0
- package/lib/api/types.d.ts.map +1 -0
- package/lib/api/types.js +3 -0
- package/lib/api/types.js.map +1 -0
- package/lib/api/utils.d.ts +8 -0
- package/lib/api/utils.d.ts.map +1 -0
- package/lib/api/utils.js +132 -0
- package/lib/api/utils.js.map +1 -0
- package/lib/bridge/broadcast.d.ts.map +1 -1
- package/lib/bridge/broadcast.js +2 -0
- package/lib/bridge/broadcast.js.map +1 -1
- package/lib/bridge/buildOptimisticOperation.d.ts +2 -2
- package/lib/bridge/buildOptimisticOperation.d.ts.map +1 -1
- package/lib/bridge/buildOptimisticOperation.integration.test.d.ts +2 -0
- package/lib/bridge/buildOptimisticOperation.integration.test.d.ts.map +1 -0
- package/lib/bridge/buildOptimisticOperation.integration.test.js +82 -0
- package/lib/bridge/buildOptimisticOperation.integration.test.js.map +1 -0
- package/lib/bridge/buildOptimisticOperation.js +87 -5
- package/lib/bridge/buildOptimisticOperation.js.map +1 -1
- package/lib/bridge/estimateMaxSpendable.d.ts.map +1 -1
- package/lib/bridge/estimateMaxSpendable.js +8 -2
- package/lib/bridge/estimateMaxSpendable.js.map +1 -1
- package/lib/bridge/getTransactionStatus.d.ts +3 -3
- package/lib/bridge/getTransactionStatus.d.ts.map +1 -1
- package/lib/bridge/getTransactionStatus.js +116 -23
- package/lib/bridge/getTransactionStatus.js.map +1 -1
- package/lib/bridge/getTransactionStatus.test.d.ts +2 -0
- package/lib/bridge/getTransactionStatus.test.d.ts.map +1 -0
- package/lib/bridge/getTransactionStatus.test.js +176 -0
- package/lib/bridge/getTransactionStatus.test.js.map +1 -0
- package/lib/bridge/index.d.ts +4 -4
- package/lib/bridge/index.d.ts.map +1 -1
- package/lib/bridge/index.js +9 -6
- package/lib/bridge/index.js.map +1 -1
- package/lib/bridge/js-estimateMaxSpendable.integration.test.js +28 -44
- package/lib/bridge/js-estimateMaxSpendable.integration.test.js.map +1 -1
- package/lib/bridge/js-transaction.test.js +10 -49
- package/lib/bridge/js-transaction.test.js.map +1 -1
- package/lib/bridge/prepareTransaction.d.ts +0 -1
- package/lib/bridge/prepareTransaction.d.ts.map +1 -1
- package/lib/bridge/prepareTransaction.js +0 -1
- package/lib/bridge/prepareTransaction.js.map +1 -1
- package/lib/bridge/serialization.d.ts +7 -0
- package/lib/bridge/serialization.d.ts.map +1 -0
- package/lib/bridge/serialization.js +36 -0
- package/lib/bridge/serialization.js.map +1 -0
- package/lib/bridge/serialization.test.d.ts +2 -0
- package/lib/bridge/serialization.test.d.ts.map +1 -0
- package/lib/bridge/serialization.test.js +27 -0
- package/lib/bridge/serialization.test.js.map +1 -0
- package/lib/bridge/synchronisation.d.ts +3 -3
- package/lib/bridge/synchronisation.d.ts.map +1 -1
- package/lib/bridge/synchronisation.js +37 -15
- package/lib/bridge/synchronisation.js.map +1 -1
- package/lib/bridge/transaction.test.js +18 -59
- package/lib/bridge/transaction.test.js.map +1 -1
- package/lib/bridge/utils.d.ts +22 -8
- package/lib/bridge/utils.d.ts.map +1 -1
- package/lib/bridge/utils.integration.test.js +415 -73
- package/lib/bridge/utils.integration.test.js.map +1 -1
- package/lib/bridge/utils.js +300 -15
- package/lib/bridge/utils.js.map +1 -1
- package/lib/constants.d.ts +32 -0
- package/lib/constants.d.ts.map +1 -0
- package/lib/constants.js +37 -0
- package/lib/constants.js.map +1 -0
- package/lib/deviceTransactionConfig.d.ts.map +1 -1
- package/lib/deviceTransactionConfig.js +17 -15
- package/lib/deviceTransactionConfig.js.map +1 -1
- package/lib/logic.d.ts +9 -3
- package/lib/logic.d.ts.map +1 -1
- package/lib/logic.js +31 -3
- package/lib/logic.js.map +1 -1
- package/lib/logic.test.js +103 -50
- package/lib/logic.test.js.map +1 -1
- package/lib/test/fixtures/account.fixture.d.ts +19 -0
- package/lib/test/fixtures/account.fixture.d.ts.map +1 -0
- package/lib/test/fixtures/account.fixture.js +116 -0
- package/lib/test/fixtures/account.fixture.js.map +1 -0
- package/lib/test/fixtures/currency.fixture.d.ts +5 -0
- package/lib/test/fixtures/currency.fixture.d.ts.map +1 -0
- package/lib/test/fixtures/currency.fixture.js +67 -0
- package/lib/test/fixtures/currency.fixture.js.map +1 -0
- package/lib/test/fixtures/mirror.fixture.d.ts +3 -0
- package/lib/test/fixtures/mirror.fixture.d.ts.map +1 -0
- package/lib/test/fixtures/mirror.fixture.js +17 -0
- package/lib/test/fixtures/mirror.fixture.js.map +1 -0
- package/lib/test/fixtures/operation.fixture.d.ts +3 -0
- package/lib/test/fixtures/operation.fixture.d.ts.map +1 -0
- package/lib/test/fixtures/operation.fixture.js +26 -0
- package/lib/test/fixtures/operation.fixture.js.map +1 -0
- package/lib/test/fixtures/transaction.fixture.d.ts +4 -0
- package/lib/test/fixtures/transaction.fixture.d.ts.map +1 -0
- package/lib/test/fixtures/transaction.fixture.js +28 -0
- package/lib/test/fixtures/transaction.fixture.js.map +1 -0
- package/lib/types/bridge.d.ts +25 -1
- package/lib/types/bridge.d.ts.map +1 -1
- package/lib-es/api/mirror.d.ts +3 -20
- package/lib-es/api/mirror.d.ts.map +1 -1
- package/lib-es/api/mirror.js +29 -88
- package/lib-es/api/mirror.js.map +1 -1
- package/lib-es/api/mirror.test.js +60 -5
- package/lib-es/api/mirror.test.js.map +1 -1
- package/lib-es/api/network.d.ts +3 -3
- package/lib-es/api/network.d.ts.map +1 -1
- package/lib-es/api/network.js +44 -4
- package/lib-es/api/network.js.map +1 -1
- package/lib-es/api/types.d.ts +44 -0
- package/lib-es/api/types.d.ts.map +1 -0
- package/lib-es/api/types.js +2 -0
- package/lib-es/api/types.js.map +1 -0
- package/lib-es/api/utils.d.ts +8 -0
- package/lib-es/api/utils.d.ts.map +1 -0
- package/lib-es/api/utils.js +124 -0
- package/lib-es/api/utils.js.map +1 -0
- package/lib-es/bridge/broadcast.d.ts.map +1 -1
- package/lib-es/bridge/broadcast.js +2 -0
- package/lib-es/bridge/broadcast.js.map +1 -1
- package/lib-es/bridge/buildOptimisticOperation.d.ts +2 -2
- package/lib-es/bridge/buildOptimisticOperation.d.ts.map +1 -1
- package/lib-es/bridge/buildOptimisticOperation.integration.test.d.ts +2 -0
- package/lib-es/bridge/buildOptimisticOperation.integration.test.d.ts.map +1 -0
- package/lib-es/bridge/buildOptimisticOperation.integration.test.js +77 -0
- package/lib-es/bridge/buildOptimisticOperation.integration.test.js.map +1 -0
- package/lib-es/bridge/buildOptimisticOperation.js +84 -5
- package/lib-es/bridge/buildOptimisticOperation.js.map +1 -1
- package/lib-es/bridge/estimateMaxSpendable.d.ts.map +1 -1
- package/lib-es/bridge/estimateMaxSpendable.js +8 -2
- package/lib-es/bridge/estimateMaxSpendable.js.map +1 -1
- package/lib-es/bridge/getTransactionStatus.d.ts +3 -3
- package/lib-es/bridge/getTransactionStatus.d.ts.map +1 -1
- package/lib-es/bridge/getTransactionStatus.js +114 -24
- package/lib-es/bridge/getTransactionStatus.js.map +1 -1
- package/lib-es/bridge/getTransactionStatus.test.d.ts +2 -0
- package/lib-es/bridge/getTransactionStatus.test.d.ts.map +1 -0
- package/lib-es/bridge/getTransactionStatus.test.js +148 -0
- package/lib-es/bridge/getTransactionStatus.test.js.map +1 -0
- package/lib-es/bridge/index.d.ts +4 -4
- package/lib-es/bridge/index.d.ts.map +1 -1
- package/lib-es/bridge/index.js +9 -6
- package/lib-es/bridge/index.js.map +1 -1
- package/lib-es/bridge/js-estimateMaxSpendable.integration.test.js +28 -44
- package/lib-es/bridge/js-estimateMaxSpendable.integration.test.js.map +1 -1
- package/lib-es/bridge/js-transaction.test.js +10 -49
- package/lib-es/bridge/js-transaction.test.js.map +1 -1
- package/lib-es/bridge/prepareTransaction.d.ts +0 -1
- package/lib-es/bridge/prepareTransaction.d.ts.map +1 -1
- package/lib-es/bridge/prepareTransaction.js +0 -1
- package/lib-es/bridge/prepareTransaction.js.map +1 -1
- package/lib-es/bridge/serialization.d.ts +7 -0
- package/lib-es/bridge/serialization.d.ts.map +1 -0
- package/lib-es/bridge/serialization.js +29 -0
- package/lib-es/bridge/serialization.js.map +1 -0
- package/lib-es/bridge/serialization.test.d.ts +2 -0
- package/lib-es/bridge/serialization.test.d.ts.map +1 -0
- package/lib-es/bridge/serialization.test.js +25 -0
- package/lib-es/bridge/serialization.test.js.map +1 -0
- package/lib-es/bridge/synchronisation.d.ts +3 -3
- package/lib-es/bridge/synchronisation.d.ts.map +1 -1
- package/lib-es/bridge/synchronisation.js +39 -17
- package/lib-es/bridge/synchronisation.js.map +1 -1
- package/lib-es/bridge/transaction.test.js +18 -59
- package/lib-es/bridge/transaction.test.js.map +1 -1
- package/lib-es/bridge/utils.d.ts +22 -8
- package/lib-es/bridge/utils.d.ts.map +1 -1
- package/lib-es/bridge/utils.integration.test.js +416 -74
- package/lib-es/bridge/utils.integration.test.js.map +1 -1
- package/lib-es/bridge/utils.js +295 -15
- package/lib-es/bridge/utils.js.map +1 -1
- package/lib-es/constants.d.ts +32 -0
- package/lib-es/constants.d.ts.map +1 -0
- package/lib-es/constants.js +34 -0
- package/lib-es/constants.js.map +1 -0
- package/lib-es/deviceTransactionConfig.d.ts.map +1 -1
- package/lib-es/deviceTransactionConfig.js +17 -15
- package/lib-es/deviceTransactionConfig.js.map +1 -1
- package/lib-es/logic.d.ts +9 -3
- package/lib-es/logic.d.ts.map +1 -1
- package/lib-es/logic.js +26 -3
- package/lib-es/logic.js.map +1 -1
- package/lib-es/logic.test.js +104 -51
- package/lib-es/logic.test.js.map +1 -1
- package/lib-es/test/fixtures/account.fixture.d.ts +19 -0
- package/lib-es/test/fixtures/account.fixture.d.ts.map +1 -0
- package/lib-es/test/fixtures/account.fixture.js +107 -0
- package/lib-es/test/fixtures/account.fixture.js.map +1 -0
- package/lib-es/test/fixtures/currency.fixture.d.ts +5 -0
- package/lib-es/test/fixtures/currency.fixture.d.ts.map +1 -0
- package/lib-es/test/fixtures/currency.fixture.js +58 -0
- package/lib-es/test/fixtures/currency.fixture.js.map +1 -0
- package/lib-es/test/fixtures/mirror.fixture.d.ts +3 -0
- package/lib-es/test/fixtures/mirror.fixture.d.ts.map +1 -0
- package/lib-es/test/fixtures/mirror.fixture.js +13 -0
- package/lib-es/test/fixtures/mirror.fixture.js.map +1 -0
- package/lib-es/test/fixtures/operation.fixture.d.ts +3 -0
- package/lib-es/test/fixtures/operation.fixture.d.ts.map +1 -0
- package/lib-es/test/fixtures/operation.fixture.js +19 -0
- package/lib-es/test/fixtures/operation.fixture.js.map +1 -0
- package/lib-es/test/fixtures/transaction.fixture.d.ts +4 -0
- package/lib-es/test/fixtures/transaction.fixture.d.ts.map +1 -0
- package/lib-es/test/fixtures/transaction.fixture.js +20 -0
- package/lib-es/test/fixtures/transaction.fixture.js.map +1 -0
- package/lib-es/types/bridge.d.ts +25 -1
- package/lib-es/types/bridge.d.ts.map +1 -1
- package/package.json +12 -10
- package/src/api/mirror.test.ts +79 -5
- package/src/api/mirror.ts +30 -111
- package/src/api/network.ts +71 -4
- package/src/api/types.ts +48 -0
- package/src/api/utils.ts +150 -0
- package/src/bridge/broadcast.ts +2 -0
- package/src/bridge/buildOptimisticOperation.integration.test.ts +88 -0
- package/src/bridge/buildOptimisticOperation.ts +118 -7
- package/src/bridge/estimateMaxSpendable.ts +8 -2
- package/src/bridge/getTransactionStatus.test.ts +200 -0
- package/src/bridge/getTransactionStatus.ts +166 -32
- package/src/bridge/index.ts +13 -10
- package/src/bridge/js-estimateMaxSpendable.integration.test.ts +37 -46
- package/src/bridge/js-transaction.test.ts +13 -54
- package/src/bridge/prepareTransaction.ts +1 -2
- package/src/bridge/serialization.test.ts +39 -0
- package/src/bridge/serialization.ts +43 -0
- package/src/bridge/synchronisation.ts +65 -27
- package/src/bridge/transaction.test.ts +22 -64
- package/src/bridge/utils.integration.test.ts +525 -76
- package/src/bridge/utils.ts +423 -24
- package/src/constants.ts +35 -0
- package/src/deviceTransactionConfig.ts +16 -15
- package/src/logic.test.ts +147 -57
- package/src/logic.ts +58 -7
- package/src/test/fixtures/account.fixture.ts +123 -0
- package/src/test/fixtures/currency.fixture.ts +66 -0
- package/src/test/fixtures/mirror.fixture.ts +14 -0
- package/src/test/fixtures/operation.fixture.ts +20 -0
- package/src/test/fixtures/transaction.fixture.ts +22 -0
- package/src/types/bridge.ts +33 -0
package/lib/bridge/utils.js
CHANGED
|
@@ -3,44 +3,85 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.patchOperationWithExtra = exports.base64ToUrlSafeBase64 = exports.calculateAmount = exports.getEstimatedFees = exports.
|
|
6
|
+
exports.checkAccountTokenAssociationStatus = exports.patchOperationWithExtra = exports.applyPendingExtras = exports.mergeSubAccounts = exports.prepareOperations = exports.getSubAccounts = exports.getSyncHash = exports.base64ToUrlSafeBase64 = exports.calculateAmount = exports.getEstimatedFees = exports.getCurrencyToUSDRate = void 0;
|
|
7
7
|
const bignumber_js_1 = __importDefault(require("bignumber.js"));
|
|
8
|
+
const imurmurhash_1 = __importDefault(require("imurmurhash"));
|
|
9
|
+
const invariant_1 = __importDefault(require("invariant"));
|
|
8
10
|
const index_1 = __importDefault(require("@ledgerhq/live-countervalues/api/index"));
|
|
9
11
|
const cryptoassets_1 = require("@ledgerhq/cryptoassets");
|
|
12
|
+
const account_1 = require("@ledgerhq/coin-framework/account");
|
|
13
|
+
const operation_1 = require("@ledgerhq/coin-framework/operation");
|
|
14
|
+
const jsHelpers_1 = require("@ledgerhq/coin-framework/bridge/jsHelpers");
|
|
15
|
+
const cache_1 = require("@ledgerhq/live-network/cache");
|
|
10
16
|
const estimateMaxSpendable_1 = require("./estimateMaxSpendable");
|
|
11
|
-
|
|
12
|
-
|
|
17
|
+
const mirror_1 = require("../api/mirror");
|
|
18
|
+
const logic_1 = require("../logic");
|
|
19
|
+
const constants_1 = require("../constants");
|
|
20
|
+
const ESTIMATED_FEE_SAFETY_RATE = 2;
|
|
21
|
+
// note: this is currently called frequently by getTransactionStatus; LRU cache prevents duplicated requests
|
|
22
|
+
exports.getCurrencyToUSDRate = (0, cache_1.makeLRUCache)(async (currency) => {
|
|
13
23
|
try {
|
|
14
|
-
const
|
|
24
|
+
const [rate] = await index_1.default.fetchLatest([
|
|
15
25
|
{
|
|
16
|
-
from:
|
|
26
|
+
from: currency,
|
|
17
27
|
to: (0, cryptoassets_1.getFiatCurrencyByTicker)("USD"),
|
|
18
28
|
startDate: new Date(),
|
|
19
29
|
},
|
|
20
30
|
]);
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
31
|
+
(0, invariant_1.default)(rate, "no value returned from cvs api");
|
|
32
|
+
return new bignumber_js_1.default(rate);
|
|
33
|
+
}
|
|
34
|
+
catch {
|
|
35
|
+
return null;
|
|
36
|
+
}
|
|
37
|
+
}, currency => currency.ticker, (0, cache_1.seconds)(3));
|
|
38
|
+
const getEstimatedFees = async (account, operationType) => {
|
|
39
|
+
try {
|
|
40
|
+
const usdRate = await (0, exports.getCurrencyToUSDRate)(account.currency);
|
|
41
|
+
if (usdRate) {
|
|
42
|
+
return new bignumber_js_1.default(constants_1.BASE_USD_FEE_BY_OPERATION_TYPE[operationType])
|
|
43
|
+
.dividedBy(new bignumber_js_1.default(usdRate))
|
|
24
44
|
.integerValue(bignumber_js_1.default.ROUND_CEIL)
|
|
25
|
-
.multipliedBy(
|
|
45
|
+
.multipliedBy(ESTIMATED_FEE_SAFETY_RATE);
|
|
26
46
|
}
|
|
27
47
|
// eslint-disable-next-line no-empty
|
|
28
48
|
}
|
|
29
49
|
catch { }
|
|
30
50
|
// as fees are based on a currency conversion, we stay
|
|
31
51
|
// on the safe side here and double the estimate for "max spendable"
|
|
32
|
-
return new bignumber_js_1.default("150200").multipliedBy(
|
|
33
|
-
}
|
|
52
|
+
return new bignumber_js_1.default("150200").multipliedBy(ESTIMATED_FEE_SAFETY_RATE); // 0.001502 ℏ (as of 2023-03-14)
|
|
53
|
+
};
|
|
34
54
|
exports.getEstimatedFees = getEstimatedFees;
|
|
35
|
-
async
|
|
55
|
+
const calculateCoinAmount = async ({ account, transaction, operationType, }) => {
|
|
56
|
+
const estimatedFees = await (0, exports.getEstimatedFees)(account, operationType);
|
|
36
57
|
const amount = transaction.useAllAmount
|
|
37
|
-
? await (0, estimateMaxSpendable_1.estimateMaxSpendable)({ account })
|
|
58
|
+
? await (0, estimateMaxSpendable_1.estimateMaxSpendable)({ account, transaction })
|
|
38
59
|
: transaction.amount;
|
|
39
60
|
return {
|
|
40
61
|
amount,
|
|
41
|
-
totalSpent: amount.plus(
|
|
62
|
+
totalSpent: amount.plus(estimatedFees),
|
|
42
63
|
};
|
|
43
|
-
}
|
|
64
|
+
};
|
|
65
|
+
const calculateTokenAmount = async ({ account, tokenAccount, transaction, }) => {
|
|
66
|
+
const amount = transaction.useAllAmount
|
|
67
|
+
? await (0, estimateMaxSpendable_1.estimateMaxSpendable)({ account: tokenAccount, parentAccount: account, transaction })
|
|
68
|
+
: transaction.amount;
|
|
69
|
+
return {
|
|
70
|
+
amount,
|
|
71
|
+
totalSpent: amount,
|
|
72
|
+
};
|
|
73
|
+
};
|
|
74
|
+
const calculateAmount = ({ account, transaction, }) => {
|
|
75
|
+
const subAccount = (0, account_1.findSubAccountById)(account, transaction?.subAccountId || "");
|
|
76
|
+
const isTokenTransaction = (0, account_1.isTokenAccount)(subAccount);
|
|
77
|
+
if (isTokenTransaction) {
|
|
78
|
+
return calculateTokenAmount({ account, tokenAccount: subAccount, transaction });
|
|
79
|
+
}
|
|
80
|
+
const operationType = (0, logic_1.isTokenAssociateTransaction)(transaction)
|
|
81
|
+
? constants_1.HEDERA_OPERATION_TYPES.TokenAssociate
|
|
82
|
+
: constants_1.HEDERA_OPERATION_TYPES.CryptoTransfer;
|
|
83
|
+
return calculateCoinAmount({ account, transaction, operationType });
|
|
84
|
+
};
|
|
44
85
|
exports.calculateAmount = calculateAmount;
|
|
45
86
|
// NOTE: convert from the non-url-safe version of base64 to the url-safe version (that the explorer uses)
|
|
46
87
|
function base64ToUrlSafeBase64(data) {
|
|
@@ -50,6 +91,239 @@ function base64ToUrlSafeBase64(data) {
|
|
|
50
91
|
return data.replace(/\//g, "_").replace(/\+/g, "-");
|
|
51
92
|
}
|
|
52
93
|
exports.base64ToUrlSafeBase64 = base64ToUrlSafeBase64;
|
|
94
|
+
const simpleSyncHashMemoize = {};
|
|
95
|
+
const getSyncHash = (currency, blacklistedTokenIds = []) => {
|
|
96
|
+
const tokens = (0, cryptoassets_1.listTokensForCryptoCurrency)(currency);
|
|
97
|
+
const stringToHash = currency.id +
|
|
98
|
+
tokens.map(token => token.id + token.contractAddress + token.name + token.ticker).join("") +
|
|
99
|
+
blacklistedTokenIds.join("");
|
|
100
|
+
if (!simpleSyncHashMemoize[stringToHash]) {
|
|
101
|
+
simpleSyncHashMemoize[stringToHash] = `0x${(0, imurmurhash_1.default)(stringToHash).result().toString(16)}`;
|
|
102
|
+
}
|
|
103
|
+
return simpleSyncHashMemoize[stringToHash];
|
|
104
|
+
};
|
|
105
|
+
exports.getSyncHash = getSyncHash;
|
|
106
|
+
const getSubAccounts = async (accountId, lastTokenOperations, mirrorTokens) => {
|
|
107
|
+
// Creating a Map of Operations by TokenCurrencies in order to know which TokenAccounts should be synced as well
|
|
108
|
+
const operationsByToken = lastTokenOperations.reduce((acc, tokenOperation) => {
|
|
109
|
+
const { token } = (0, account_1.decodeTokenAccountId)(tokenOperation.accountId);
|
|
110
|
+
if (!token)
|
|
111
|
+
return acc;
|
|
112
|
+
const isTokenListedInCAL = (0, cryptoassets_1.findTokenByAddressInCurrency)(token.contractAddress, token.parentCurrency.id);
|
|
113
|
+
if (!isTokenListedInCAL)
|
|
114
|
+
return acc;
|
|
115
|
+
if (!acc.has(token)) {
|
|
116
|
+
acc.set(token, []);
|
|
117
|
+
}
|
|
118
|
+
acc.get(token)?.push(tokenOperation);
|
|
119
|
+
return acc;
|
|
120
|
+
}, new Map());
|
|
121
|
+
const subAccounts = [];
|
|
122
|
+
// extract token accounts from existing operations
|
|
123
|
+
for (const [token, tokenOperations] of operationsByToken.entries()) {
|
|
124
|
+
const parentAccountId = accountId;
|
|
125
|
+
const rawBalance = mirrorTokens.find(t => t.token_id === token.contractAddress)?.balance;
|
|
126
|
+
const balance = rawBalance !== undefined ? new bignumber_js_1.default(rawBalance) : null;
|
|
127
|
+
if (!balance) {
|
|
128
|
+
continue;
|
|
129
|
+
}
|
|
130
|
+
subAccounts.push({
|
|
131
|
+
type: "TokenAccount",
|
|
132
|
+
id: (0, account_1.encodeTokenAccountId)(parentAccountId, token),
|
|
133
|
+
parentId: parentAccountId,
|
|
134
|
+
token,
|
|
135
|
+
balance,
|
|
136
|
+
spendableBalance: balance,
|
|
137
|
+
creationDate: tokenOperations.length > 0 ? tokenOperations[tokenOperations.length - 1].date : new Date(),
|
|
138
|
+
operations: tokenOperations,
|
|
139
|
+
operationsCount: tokenOperations.length,
|
|
140
|
+
pendingOperations: [],
|
|
141
|
+
balanceHistoryCache: account_1.emptyHistoryCache,
|
|
142
|
+
swapHistory: [],
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
// extract token accounts existing in the account's balance, but with no recorded operations yet
|
|
146
|
+
// e.g. tokens added via association flow, without any subsequent activity
|
|
147
|
+
for (const rawToken of mirrorTokens) {
|
|
148
|
+
const parentAccountId = accountId;
|
|
149
|
+
const rawBalance = rawToken.balance;
|
|
150
|
+
const balance = new bignumber_js_1.default(rawBalance);
|
|
151
|
+
const token = (0, cryptoassets_1.findTokenByAddressInCurrency)(rawToken.token_id, "hedera");
|
|
152
|
+
if (!token) {
|
|
153
|
+
continue;
|
|
154
|
+
}
|
|
155
|
+
const id = (0, account_1.encodeTokenAccountId)(parentAccountId, token);
|
|
156
|
+
if (subAccounts.some(a => a.id === id)) {
|
|
157
|
+
continue;
|
|
158
|
+
}
|
|
159
|
+
subAccounts.push({
|
|
160
|
+
type: "TokenAccount",
|
|
161
|
+
id: (0, account_1.encodeTokenAccountId)(parentAccountId, token),
|
|
162
|
+
parentId: parentAccountId,
|
|
163
|
+
token,
|
|
164
|
+
balance,
|
|
165
|
+
spendableBalance: balance,
|
|
166
|
+
creationDate: new Date(parseFloat(rawToken.created_timestamp) * 1000),
|
|
167
|
+
operations: [],
|
|
168
|
+
operationsCount: 0,
|
|
169
|
+
pendingOperations: [],
|
|
170
|
+
balanceHistoryCache: account_1.emptyHistoryCache,
|
|
171
|
+
swapHistory: [],
|
|
172
|
+
});
|
|
173
|
+
}
|
|
174
|
+
return subAccounts;
|
|
175
|
+
};
|
|
176
|
+
exports.getSubAccounts = getSubAccounts;
|
|
177
|
+
// create NONE coin operation that will be a parent of an orphan child operation
|
|
178
|
+
const makeCoinOperationForOrphanChildOperation = (childOperation) => {
|
|
179
|
+
const type = "NONE";
|
|
180
|
+
const { accountId } = (0, account_1.decodeTokenAccountId)(childOperation.accountId);
|
|
181
|
+
const id = (0, operation_1.encodeOperationId)(accountId, childOperation.hash, type);
|
|
182
|
+
return {
|
|
183
|
+
id,
|
|
184
|
+
hash: childOperation.hash,
|
|
185
|
+
type,
|
|
186
|
+
value: new bignumber_js_1.default(0),
|
|
187
|
+
fee: new bignumber_js_1.default(0),
|
|
188
|
+
senders: [],
|
|
189
|
+
recipients: [],
|
|
190
|
+
blockHeight: childOperation.blockHeight,
|
|
191
|
+
blockHash: childOperation.blockHash,
|
|
192
|
+
transactionSequenceNumber: childOperation.transactionSequenceNumber,
|
|
193
|
+
subOperations: [],
|
|
194
|
+
nftOperations: [],
|
|
195
|
+
internalOperations: [],
|
|
196
|
+
accountId: "",
|
|
197
|
+
date: childOperation.date,
|
|
198
|
+
extra: {},
|
|
199
|
+
};
|
|
200
|
+
};
|
|
201
|
+
// this util handles:
|
|
202
|
+
// - linking sub operations with coin operations, e.g. token transfer with fee payment
|
|
203
|
+
// - if possible, assigning `extra.associatedTokenId = mirrorToken.tokenId` based on operation's consensus timestamp
|
|
204
|
+
const prepareOperations = (coinOperations, tokenOperations, mirrorTokens) => {
|
|
205
|
+
const preparedCoinOperations = coinOperations.map(op => ({ ...op }));
|
|
206
|
+
const preparedTokenOperations = tokenOperations.map(op => ({ ...op }));
|
|
207
|
+
// loop through coin operations to:
|
|
208
|
+
// - enrich ASSOCIATE_TOKEN operations with extra.associatedTokenId
|
|
209
|
+
// - prepare a map of hash => operations
|
|
210
|
+
const coinOperationsByHash = {};
|
|
211
|
+
preparedCoinOperations.forEach(op => {
|
|
212
|
+
const extra = (0, logic_1.isValidExtra)(op.extra) ? op.extra : null;
|
|
213
|
+
if (op.type === "ASSOCIATE_TOKEN" && extra?.consensusTimestamp) {
|
|
214
|
+
const relatedMirrorToken = mirrorTokens.find(t => {
|
|
215
|
+
return t.created_timestamp === extra.consensusTimestamp;
|
|
216
|
+
});
|
|
217
|
+
if (relatedMirrorToken) {
|
|
218
|
+
op.extra = {
|
|
219
|
+
...extra,
|
|
220
|
+
associatedTokenId: relatedMirrorToken.token_id,
|
|
221
|
+
};
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
if (!coinOperationsByHash[op.hash]) {
|
|
225
|
+
coinOperationsByHash[op.hash] = [];
|
|
226
|
+
}
|
|
227
|
+
op.subOperations = [];
|
|
228
|
+
coinOperationsByHash[op.hash].push(op);
|
|
229
|
+
});
|
|
230
|
+
// loop through token operations to potentially copy them as a child operation of a coin operation
|
|
231
|
+
for (const tokenOperation of preparedTokenOperations) {
|
|
232
|
+
const { token } = (0, account_1.decodeTokenAccountId)(tokenOperation.accountId);
|
|
233
|
+
if (!token)
|
|
234
|
+
continue;
|
|
235
|
+
let mainOperations = coinOperationsByHash[tokenOperation.hash];
|
|
236
|
+
if (!mainOperations?.length) {
|
|
237
|
+
const noneOperation = makeCoinOperationForOrphanChildOperation(tokenOperation);
|
|
238
|
+
mainOperations = [noneOperation];
|
|
239
|
+
preparedCoinOperations.push(noneOperation);
|
|
240
|
+
}
|
|
241
|
+
// ugly loop in loop but in theory, this can only be a 2 elements array maximum in the case of a self send
|
|
242
|
+
for (const mainOperation of mainOperations) {
|
|
243
|
+
mainOperation.subOperations.push(tokenOperation);
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
return preparedCoinOperations;
|
|
247
|
+
};
|
|
248
|
+
exports.prepareOperations = prepareOperations;
|
|
249
|
+
/**
|
|
250
|
+
* List of properties of a sub account that can be updated when 2 "identical" accounts are found
|
|
251
|
+
*/
|
|
252
|
+
const updatableSubAccountProperties = [
|
|
253
|
+
{ name: "balance", isOps: false },
|
|
254
|
+
{ name: "spendableBalance", isOps: false },
|
|
255
|
+
{ name: "balanceHistoryCache", isOps: false },
|
|
256
|
+
{ name: "operations", isOps: true },
|
|
257
|
+
{ name: "pendingOperations", isOps: true },
|
|
258
|
+
];
|
|
259
|
+
/**
|
|
260
|
+
* In charge of smartly merging sub accounts while maintaining references as much as possible
|
|
261
|
+
*/
|
|
262
|
+
const mergeSubAccounts = (initialAccount, newSubAccounts) => {
|
|
263
|
+
const oldSubAccounts = initialAccount?.subAccounts;
|
|
264
|
+
if (!oldSubAccounts) {
|
|
265
|
+
return newSubAccounts;
|
|
266
|
+
}
|
|
267
|
+
// map of already existing sub accounts by id
|
|
268
|
+
const oldSubAccountsById = {};
|
|
269
|
+
for (const oldSubAccount of oldSubAccounts) {
|
|
270
|
+
oldSubAccountsById[oldSubAccount.id] = oldSubAccount;
|
|
271
|
+
}
|
|
272
|
+
// looping through new sub accounts to compare them with already existing ones
|
|
273
|
+
// already existing will be updated if necessary (see `updatableSubAccountProperties`)
|
|
274
|
+
// new sub accounts will be added/pushed after already existing
|
|
275
|
+
const newSubAccountsToAdd = [];
|
|
276
|
+
for (const newSubAccount of newSubAccounts) {
|
|
277
|
+
const duplicatedAccount = oldSubAccountsById[newSubAccount.id];
|
|
278
|
+
if (!duplicatedAccount) {
|
|
279
|
+
newSubAccountsToAdd.push(newSubAccount);
|
|
280
|
+
continue;
|
|
281
|
+
}
|
|
282
|
+
const updates = {};
|
|
283
|
+
for (const { name, isOps } of updatableSubAccountProperties) {
|
|
284
|
+
if (!isOps) {
|
|
285
|
+
if (newSubAccount[name] !== duplicatedAccount[name]) {
|
|
286
|
+
// @ts-expect-error - TypeScript assumes all possible types could be assigned here
|
|
287
|
+
updates[name] = newSubAccount[name];
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
else {
|
|
291
|
+
updates[name] = (0, jsHelpers_1.mergeOps)(duplicatedAccount[name], newSubAccount[name]);
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
// update the operationsCount in case the mergeOps changed it
|
|
295
|
+
updates.operationsCount =
|
|
296
|
+
updates.operations?.length || duplicatedAccount?.operations?.length || 0;
|
|
297
|
+
// modify the map with the updated sub account with a new ref
|
|
298
|
+
oldSubAccountsById[newSubAccount.id] = {
|
|
299
|
+
...duplicatedAccount,
|
|
300
|
+
...updates,
|
|
301
|
+
};
|
|
302
|
+
}
|
|
303
|
+
const updatedSubAccounts = Object.values(oldSubAccountsById);
|
|
304
|
+
return [...updatedSubAccounts, ...newSubAccountsToAdd];
|
|
305
|
+
};
|
|
306
|
+
exports.mergeSubAccounts = mergeSubAccounts;
|
|
307
|
+
const applyPendingExtras = (existing, pending) => {
|
|
308
|
+
const pendingOperationsByHash = new Map(pending.map(op => [op.hash, op]));
|
|
309
|
+
return existing.map(op => {
|
|
310
|
+
const pendingOp = pendingOperationsByHash.get(op.hash);
|
|
311
|
+
if (!pendingOp)
|
|
312
|
+
return op;
|
|
313
|
+
if (!(0, logic_1.isValidExtra)(op.extra))
|
|
314
|
+
return op;
|
|
315
|
+
if (!(0, logic_1.isValidExtra)(pendingOp.extra))
|
|
316
|
+
return op;
|
|
317
|
+
return {
|
|
318
|
+
...op,
|
|
319
|
+
extra: {
|
|
320
|
+
...pendingOp.extra,
|
|
321
|
+
...op.extra,
|
|
322
|
+
},
|
|
323
|
+
};
|
|
324
|
+
});
|
|
325
|
+
};
|
|
326
|
+
exports.applyPendingExtras = applyPendingExtras;
|
|
53
327
|
function patchOperationWithExtra(operation, extra) {
|
|
54
328
|
return {
|
|
55
329
|
...operation,
|
|
@@ -59,4 +333,15 @@ function patchOperationWithExtra(operation, extra) {
|
|
|
59
333
|
};
|
|
60
334
|
}
|
|
61
335
|
exports.patchOperationWithExtra = patchOperationWithExtra;
|
|
336
|
+
exports.checkAccountTokenAssociationStatus = (0, cache_1.makeLRUCache)(async (accountId, tokenId) => {
|
|
337
|
+
const mirrorAccount = await (0, mirror_1.getAccount)(accountId);
|
|
338
|
+
// auto association is enabled
|
|
339
|
+
if (mirrorAccount.max_automatic_token_associations === -1) {
|
|
340
|
+
return true;
|
|
341
|
+
}
|
|
342
|
+
const isTokenAssociated = mirrorAccount.balance.tokens.some(token => {
|
|
343
|
+
return token.token_id === tokenId;
|
|
344
|
+
});
|
|
345
|
+
return isTokenAssociated;
|
|
346
|
+
}, (accountId, tokenId) => `${accountId}-${tokenId}`, (0, cache_1.seconds)(30));
|
|
62
347
|
//# sourceMappingURL=utils.js.map
|
package/lib/bridge/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/bridge/utils.ts"],"names":[],"mappings":";;;;;;AAAA,gEAAqC;AAErC,mFAA4D;AAC5D,yDAAiE;AACjE,iEAA8D;AAGjD,QAAA,sBAAsB,GAAG,CAAC,CAAC;AAEjC,KAAK,UAAU,gBAAgB,CAAC,OAAgB;IACrD,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,eAAM,CAAC,WAAW,CAAC;YACpC;gBACE,IAAI,EAAE,OAAO,CAAC,QAAQ;gBACtB,EAAE,EAAE,IAAA,sCAAuB,EAAC,KAAK,CAAC;gBAClC,SAAS,EAAE,IAAI,IAAI,EAAE;aACtB;SACF,CAAC,CAAC;QAEH,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;YACZ,OAAO,IAAI,sBAAS,CAAC,KAAK,CAAC;iBACxB,SAAS,CAAC,IAAI,sBAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;iBACjC,YAAY,CAAC,sBAAS,CAAC,UAAU,CAAC;iBAClC,YAAY,CAAC,8BAAsB,CAAC,CAAC;QAC1C,CAAC;QACD,oCAAoC;IACtC,CAAC;IAAC,MAAM,CAAC,CAAA,CAAC;IAEV,sDAAsD;IACtD,oEAAoE;IACpE,OAAO,IAAI,sBAAS,CAAC,QAAQ,CAAC,CAAC,YAAY,CAAC,8BAAsB,CAAC,CAAC,CAAC,gCAAgC;AACvG,CAAC;AAtBD,4CAsBC;AAEM,KAAK,UAAU,eAAe,CAAC,EACpC,OAAO,EACP,WAAW,GAIZ;IAIC,MAAM,MAAM,GAAG,WAAW,CAAC,YAAY;QACrC,CAAC,CAAC,MAAM,IAAA,2CAAoB,EAAC,EAAE,OAAO,EAAE,CAAC;QACzC,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC;IAEvB,OAAO;QACL,MAAM;QACN,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,gBAAgB,CAAC,OAAO,CAAC,CAAC;KACzD,CAAC;AACJ,CAAC;AAlBD,0CAkBC;AAED,yGAAyG;AACzG,SAAgB,qBAAqB,CAAC,IAAY;IAChD,8EAA8E;IAC9E,uDAAuD;IACvD,qDAAqD;IAErD,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AACtD,CAAC;AAND,sDAMC;AAED,SAAgB,uBAAuB,CACrC,SAAoB,EACpB,KAA2B;IAE3B,OAAO;QACL,GAAG,SAAS;QACZ,KAAK;QACL,aAAa,EAAE,CAAC,SAAS,CAAC,aAAa,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;QAC5E,aAAa,EAAE,CAAC,SAAS,CAAC,aAAa,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;KAC7E,CAAC;AACJ,CAAC;AAVD,0DAUC"}
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/bridge/utils.ts"],"names":[],"mappings":";;;;;;AAAA,gEAAqC;AACrC,8DAAqC;AACrC,0DAAkC;AAElC,mFAA4D;AAC5D,yDAIgC;AAChC,8DAM0C;AAC1C,kEAAuE;AAEvE,yEAAqE;AACrE,wDAAqE;AACrE,iEAA8D;AAE9D,0CAA2C;AAE3C,oCAAqE;AACrE,4CAAsF;AAEtF,MAAM,yBAAyB,GAAG,CAAC,CAAC;AAEpC,4GAA4G;AAC/F,QAAA,oBAAoB,GAAG,IAAA,oBAAY,EAC9C,KAAK,EAAE,QAAkB,EAAE,EAAE;IAC3B,IAAI,CAAC;QACH,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,eAAM,CAAC,WAAW,CAAC;YACtC;gBACE,IAAI,EAAE,QAAQ;gBACd,EAAE,EAAE,IAAA,sCAAuB,EAAC,KAAK,CAAC;gBAClC,SAAS,EAAE,IAAI,IAAI,EAAE;aACtB;SACF,CAAC,CAAC;QAEH,IAAA,mBAAS,EAAC,IAAI,EAAE,gCAAgC,CAAC,CAAC;QAElD,OAAO,IAAI,sBAAS,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC,EACD,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,MAAM,EAC3B,IAAA,eAAO,EAAC,CAAC,CAAC,CACX,CAAC;AAEK,MAAM,gBAAgB,GAAG,KAAK,EACnC,OAAgB,EAChB,aAAqC,EACjB,EAAE;IACtB,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,IAAA,4BAAoB,EAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAE7D,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,IAAI,sBAAS,CAAC,0CAA8B,CAAC,aAAa,CAAC,CAAC;iBAChE,SAAS,CAAC,IAAI,sBAAS,CAAC,OAAO,CAAC,CAAC;iBACjC,YAAY,CAAC,sBAAS,CAAC,UAAU,CAAC;iBAClC,YAAY,CAAC,yBAAyB,CAAC,CAAC;QAC7C,CAAC;QACD,oCAAoC;IACtC,CAAC;IAAC,MAAM,CAAC,CAAA,CAAC;IAEV,sDAAsD;IACtD,oEAAoE;IACpE,OAAO,IAAI,sBAAS,CAAC,QAAQ,CAAC,CAAC,YAAY,CAAC,yBAAyB,CAAC,CAAC,CAAC,gCAAgC;AAC1G,CAAC,CAAC;AAnBW,QAAA,gBAAgB,oBAmB3B;AAOF,MAAM,mBAAmB,GAAG,KAAK,EAAE,EACjC,OAAO,EACP,WAAW,EACX,aAAa,GAKd,EAAkC,EAAE;IACnC,MAAM,aAAa,GAAG,MAAM,IAAA,wBAAgB,EAAC,OAAO,EAAE,aAAa,CAAC,CAAC;IACrE,MAAM,MAAM,GAAG,WAAW,CAAC,YAAY;QACrC,CAAC,CAAC,MAAM,IAAA,2CAAoB,EAAC,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC;QACtD,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC;IAEvB,OAAO;QACL,MAAM;QACN,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC;KACvC,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,oBAAoB,GAAG,KAAK,EAAE,EAClC,OAAO,EACP,YAAY,EACZ,WAAW,GAKZ,EAAkC,EAAE;IACnC,MAAM,MAAM,GAAG,WAAW,CAAC,YAAY;QACrC,CAAC,CAAC,MAAM,IAAA,2CAAoB,EAAC,EAAE,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC;QAC5F,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC;IAEvB,OAAO;QACL,MAAM;QACN,UAAU,EAAE,MAAM;KACnB,CAAC;AACJ,CAAC,CAAC;AAEK,MAAM,eAAe,GAAG,CAAC,EAC9B,OAAO,EACP,WAAW,GAIZ,EAAkC,EAAE;IACnC,MAAM,UAAU,GAAG,IAAA,4BAAkB,EAAC,OAAO,EAAE,WAAW,EAAE,YAAY,IAAI,EAAE,CAAC,CAAC;IAChF,MAAM,kBAAkB,GAAG,IAAA,wBAAc,EAAC,UAAU,CAAC,CAAC;IAEtD,IAAI,kBAAkB,EAAE,CAAC;QACvB,OAAO,oBAAoB,CAAC,EAAE,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,CAAC,CAAC;IAClF,CAAC;IAED,MAAM,aAAa,GAA2B,IAAA,mCAA2B,EAAC,WAAW,CAAC;QACpF,CAAC,CAAC,kCAAsB,CAAC,cAAc;QACvC,CAAC,CAAC,kCAAsB,CAAC,cAAc,CAAC;IAE1C,OAAO,mBAAmB,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,CAAC,CAAC;AACtE,CAAC,CAAC;AAnBW,QAAA,eAAe,mBAmB1B;AAEF,yGAAyG;AACzG,SAAgB,qBAAqB,CAAC,IAAY;IAChD,8EAA8E;IAC9E,uDAAuD;IACvD,qDAAqD;IAErD,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AACtD,CAAC;AAND,sDAMC;AAED,MAAM,qBAAqB,GAA2B,EAAE,CAAC;AAElD,MAAM,WAAW,GAAG,CACzB,QAAwB,EACxB,sBAAgC,EAAE,EAC1B,EAAE;IACV,MAAM,MAAM,GAAG,IAAA,0CAA2B,EAAC,QAAQ,CAAC,CAAC;IAErD,MAAM,YAAY,GAChB,QAAQ,CAAC,EAAE;QACX,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,GAAG,KAAK,CAAC,eAAe,GAAG,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;QAC1F,mBAAmB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAE/B,IAAI,CAAC,qBAAqB,CAAC,YAAY,CAAC,EAAE,CAAC;QACzC,qBAAqB,CAAC,YAAY,CAAC,GAAG,KAAK,IAAA,qBAAU,EAAC,YAAY,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC;IAC9F,CAAC;IAED,OAAO,qBAAqB,CAAC,YAAY,CAAC,CAAC;AAC7C,CAAC,CAAC;AAhBW,QAAA,WAAW,eAgBtB;AAEK,MAAM,cAAc,GAAG,KAAK,EACjC,SAAiB,EACjB,mBAAgC,EAChC,YAAiC,EACR,EAAE;IAC3B,gHAAgH;IAChH,MAAM,iBAAiB,GAAG,mBAAmB,CAAC,MAAM,CAClD,CAAC,GAAG,EAAE,cAAc,EAAE,EAAE;QACtB,MAAM,EAAE,KAAK,EAAE,GAAG,IAAA,8BAAoB,EAAC,cAAc,CAAC,SAAS,CAAC,CAAC;QACjE,IAAI,CAAC,KAAK;YAAE,OAAO,GAAG,CAAC;QAEvB,MAAM,kBAAkB,GAAG,IAAA,2CAA4B,EACrD,KAAK,CAAC,eAAe,EACrB,KAAK,CAAC,cAAc,CAAC,EAAE,CACxB,CAAC;QACF,IAAI,CAAC,kBAAkB;YAAE,OAAO,GAAG,CAAC;QAEpC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YACpB,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACrB,CAAC;QAED,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;QAErC,OAAO,GAAG,CAAC;IACb,CAAC,EACD,IAAI,GAAG,EAA8B,CACtC,CAAC;IAEF,MAAM,WAAW,GAAmB,EAAE,CAAC;IAEvC,kDAAkD;IAClD,KAAK,MAAM,CAAC,KAAK,EAAE,eAAe,CAAC,IAAI,iBAAiB,CAAC,OAAO,EAAE,EAAE,CAAC;QACnE,MAAM,eAAe,GAAG,SAAS,CAAC;QAClC,MAAM,UAAU,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,KAAK,CAAC,eAAe,CAAC,EAAE,OAAO,CAAC;QACzF,MAAM,OAAO,GAAG,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,sBAAS,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAE5E,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,SAAS;QACX,CAAC;QAED,WAAW,CAAC,IAAI,CAAC;YACf,IAAI,EAAE,cAAc;YACpB,EAAE,EAAE,IAAA,8BAAoB,EAAC,eAAe,EAAE,KAAK,CAAC;YAChD,QAAQ,EAAE,eAAe;YACzB,KAAK;YACL,OAAO;YACP,gBAAgB,EAAE,OAAO;YACzB,YAAY,EACV,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE;YAC5F,UAAU,EAAE,eAAe;YAC3B,eAAe,EAAE,eAAe,CAAC,MAAM;YACvC,iBAAiB,EAAE,EAAE;YACrB,mBAAmB,EAAE,2BAAiB;YACtC,WAAW,EAAE,EAAE;SAChB,CAAC,CAAC;IACL,CAAC;IAED,gGAAgG;IAChG,0EAA0E;IAC1E,KAAK,MAAM,QAAQ,IAAI,YAAY,EAAE,CAAC;QACpC,MAAM,eAAe,GAAG,SAAS,CAAC;QAClC,MAAM,UAAU,GAAG,QAAQ,CAAC,OAAO,CAAC;QACpC,MAAM,OAAO,GAAG,IAAI,sBAAS,CAAC,UAAU,CAAC,CAAC;QAC1C,MAAM,KAAK,GAAG,IAAA,2CAA4B,EAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAExE,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,SAAS;QACX,CAAC;QAED,MAAM,EAAE,GAAG,IAAA,8BAAoB,EAAC,eAAe,EAAE,KAAK,CAAC,CAAC;QAExD,IAAI,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;YACvC,SAAS;QACX,CAAC;QAED,WAAW,CAAC,IAAI,CAAC;YACf,IAAI,EAAE,cAAc;YACpB,EAAE,EAAE,IAAA,8BAAoB,EAAC,eAAe,EAAE,KAAK,CAAC;YAChD,QAAQ,EAAE,eAAe;YACzB,KAAK;YACL,OAAO;YACP,gBAAgB,EAAE,OAAO;YACzB,YAAY,EAAE,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,iBAAiB,CAAC,GAAG,IAAI,CAAC;YACrE,UAAU,EAAE,EAAE;YACd,eAAe,EAAE,CAAC;YAClB,iBAAiB,EAAE,EAAE;YACrB,mBAAmB,EAAE,2BAAiB;YACtC,WAAW,EAAE,EAAE;SAChB,CAAC,CAAC;IACL,CAAC;IAED,OAAO,WAAW,CAAC;AACrB,CAAC,CAAC;AA5FW,QAAA,cAAc,kBA4FzB;AAIF,gFAAgF;AAChF,MAAM,wCAAwC,GAAG,CAC/C,cAAyB,EACa,EAAE;IACxC,MAAM,IAAI,GAAG,MAAM,CAAC;IACpB,MAAM,EAAE,SAAS,EAAE,GAAG,IAAA,8BAAoB,EAAC,cAAc,CAAC,SAAS,CAAC,CAAC;IACrE,MAAM,EAAE,GAAG,IAAA,6BAAiB,EAAC,SAAS,EAAE,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAEnE,OAAO;QACL,EAAE;QACF,IAAI,EAAE,cAAc,CAAC,IAAI;QACzB,IAAI;QACJ,KAAK,EAAE,IAAI,sBAAS,CAAC,CAAC,CAAC;QACvB,GAAG,EAAE,IAAI,sBAAS,CAAC,CAAC,CAAC;QACrB,OAAO,EAAE,EAAE;QACX,UAAU,EAAE,EAAE;QACd,WAAW,EAAE,cAAc,CAAC,WAAW;QACvC,SAAS,EAAE,cAAc,CAAC,SAAS;QACnC,yBAAyB,EAAE,cAAc,CAAC,yBAAyB;QACnE,aAAa,EAAE,EAAE;QACjB,aAAa,EAAE,EAAE;QACjB,kBAAkB,EAAE,EAAE;QACtB,SAAS,EAAE,EAAE;QACb,IAAI,EAAE,cAAc,CAAC,IAAI;QACzB,KAAK,EAAE,EAAE;KACV,CAAC;AACJ,CAAC,CAAC;AAEF,qBAAqB;AACrB,sFAAsF;AACtF,oHAAoH;AAC7G,MAAM,iBAAiB,GAAG,CAC/B,cAA2B,EAC3B,eAA4B,EAC5B,YAAiC,EACpB,EAAE;IACf,MAAM,sBAAsB,GAAG,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;IACrE,MAAM,uBAAuB,GAAG,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;IAEvE,mCAAmC;IACnC,mEAAmE;IACnE,wCAAwC;IACxC,MAAM,oBAAoB,GAA2D,EAAE,CAAC;IACxF,sBAAsB,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE;QAClC,MAAM,KAAK,GAAG,IAAA,oBAAY,EAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;QAEvD,IAAI,EAAE,CAAC,IAAI,KAAK,iBAAiB,IAAI,KAAK,EAAE,kBAAkB,EAAE,CAAC;YAC/D,MAAM,kBAAkB,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;gBAC/C,OAAO,CAAC,CAAC,iBAAiB,KAAK,KAAK,CAAC,kBAAkB,CAAC;YAC1D,CAAC,CAAC,CAAC;YAEH,IAAI,kBAAkB,EAAE,CAAC;gBACvB,EAAE,CAAC,KAAK,GAAG;oBACT,GAAG,KAAK;oBACR,iBAAiB,EAAE,kBAAkB,CAAC,QAAQ;iBAChB,CAAC;YACnC,CAAC;QACH,CAAC;QAED,IAAI,CAAC,oBAAoB,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YACnC,oBAAoB,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;QACrC,CAAC;QAED,EAAE,CAAC,aAAa,GAAG,EAAE,CAAC;QACtB,oBAAoB,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,EAA0C,CAAC,CAAC;IACjF,CAAC,CAAC,CAAC;IAEH,kGAAkG;IAClG,KAAK,MAAM,cAAc,IAAI,uBAAuB,EAAE,CAAC;QACrD,MAAM,EAAE,KAAK,EAAE,GAAG,IAAA,8BAAoB,EAAC,cAAc,CAAC,SAAS,CAAC,CAAC;QACjE,IAAI,CAAC,KAAK;YAAE,SAAS;QAErB,IAAI,cAAc,GAAG,oBAAoB,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;QAE/D,IAAI,CAAC,cAAc,EAAE,MAAM,EAAE,CAAC;YAC5B,MAAM,aAAa,GAAG,wCAAwC,CAAC,cAAc,CAAC,CAAC;YAC/E,cAAc,GAAG,CAAC,aAAa,CAAC,CAAC;YACjC,sBAAsB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC7C,CAAC;QAED,0GAA0G;QAC1G,KAAK,MAAM,aAAa,IAAI,cAAc,EAAE,CAAC;YAC3C,aAAa,CAAC,aAAa,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QACnD,CAAC;IACH,CAAC;IAED,OAAO,sBAAsB,CAAC;AAChC,CAAC,CAAC;AAxDW,QAAA,iBAAiB,qBAwD5B;AAEF;;GAEG;AACH,MAAM,6BAA6B,GAAG;IACpC,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE;IACjC,EAAE,IAAI,EAAE,kBAAkB,EAAE,KAAK,EAAE,KAAK,EAAE;IAC1C,EAAE,IAAI,EAAE,qBAAqB,EAAE,KAAK,EAAE,KAAK,EAAE;IAC7C,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,IAAI,EAAE;IACnC,EAAE,IAAI,EAAE,mBAAmB,EAAE,KAAK,EAAE,IAAI,EAAE;CACW,CAAC;AAExD;;GAEG;AACI,MAAM,gBAAgB,GAAG,CAC9B,cAAmC,EACnC,cAA8B,EACT,EAAE;IACvB,MAAM,cAAc,GAAoC,cAAc,EAAE,WAAW,CAAC;IAEpF,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,OAAO,cAAc,CAAC;IACxB,CAAC;IAED,6CAA6C;IAC7C,MAAM,kBAAkB,GAAiC,EAAE,CAAC;IAC5D,KAAK,MAAM,aAAa,IAAI,cAAc,EAAE,CAAC;QAC3C,kBAAkB,CAAC,aAAa,CAAC,EAAE,CAAC,GAAG,aAAa,CAAC;IACvD,CAAC;IAED,8EAA8E;IAC9E,sFAAsF;IACtF,+DAA+D;IAC/D,MAAM,mBAAmB,GAAmB,EAAE,CAAC;IAC/C,KAAK,MAAM,aAAa,IAAI,cAAc,EAAE,CAAC;QAC3C,MAAM,iBAAiB,GAA6B,kBAAkB,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;QAEzF,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACvB,mBAAmB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YACxC,SAAS;QACX,CAAC;QAED,MAAM,OAAO,GAA0B,EAAE,CAAC;QAC1C,KAAK,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,6BAA6B,EAAE,CAAC;YAC5D,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,IAAI,aAAa,CAAC,IAAI,CAAC,KAAK,iBAAiB,CAAC,IAAI,CAAC,EAAE,CAAC;oBACpD,kFAAkF;oBAClF,OAAO,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;gBACtC,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,IAAI,CAAC,GAAG,IAAA,oBAAQ,EAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC;YACzE,CAAC;QACH,CAAC;QAED,6DAA6D;QAC7D,OAAO,CAAC,eAAe;YACrB,OAAO,CAAC,UAAU,EAAE,MAAM,IAAI,iBAAiB,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC,CAAC;QAE3E,6DAA6D;QAC7D,kBAAkB,CAAC,aAAa,CAAC,EAAG,CAAC,GAAG;YACtC,GAAG,iBAAiB;YACpB,GAAG,OAAO;SACX,CAAC;IACJ,CAAC;IAED,MAAM,kBAAkB,GAAG,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC;IAE7D,OAAO,CAAC,GAAG,kBAAkB,EAAE,GAAG,mBAAmB,CAAC,CAAC;AACzD,CAAC,CAAC;AAtDW,QAAA,gBAAgB,oBAsD3B;AAEK,MAAM,kBAAkB,GAAG,CAAC,QAAqB,EAAE,OAAoB,EAAE,EAAE;IAChF,MAAM,uBAAuB,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;IAE1E,OAAO,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;QACvB,MAAM,SAAS,GAAG,uBAAuB,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;QACvD,IAAI,CAAC,SAAS;YAAE,OAAO,EAAE,CAAC;QAC1B,IAAI,CAAC,IAAA,oBAAY,EAAC,EAAE,CAAC,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QACvC,IAAI,CAAC,IAAA,oBAAY,EAAC,SAAS,CAAC,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QAE9C,OAAO;YACL,GAAG,EAAE;YACL,KAAK,EAAE;gBACL,GAAG,SAAS,CAAC,KAAK;gBAClB,GAAG,EAAE,CAAC,KAAK;aACZ;SACF,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAjBW,QAAA,kBAAkB,sBAiB7B;AAEF,SAAgB,uBAAuB,CACrC,SAAoB,EACpB,KAA2B;IAE3B,OAAO;QACL,GAAG,SAAS;QACZ,KAAK;QACL,aAAa,EAAE,CAAC,SAAS,CAAC,aAAa,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;QAC5E,aAAa,EAAE,CAAC,SAAS,CAAC,aAAa,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;KAC7E,CAAC;AACJ,CAAC;AAVD,0DAUC;AAEY,QAAA,kCAAkC,GAAG,IAAA,oBAAY,EAC5D,KAAK,EAAE,SAAiB,EAAE,OAAe,EAAE,EAAE;IAC3C,MAAM,aAAa,GAAG,MAAM,IAAA,mBAAU,EAAC,SAAS,CAAC,CAAC;IAElD,8BAA8B;IAC9B,IAAI,aAAa,CAAC,gCAAgC,KAAK,CAAC,CAAC,EAAE,CAAC;QAC1D,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,iBAAiB,GAAG,aAAa,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;QAClE,OAAO,KAAK,CAAC,QAAQ,KAAK,OAAO,CAAC;IACpC,CAAC,CAAC,CAAC;IAEH,OAAO,iBAAiB,CAAC;AAC3B,CAAC,EACD,CAAC,SAAS,EAAE,OAAO,EAAE,EAAE,CAAC,GAAG,SAAS,IAAI,OAAO,EAAE,EACjD,IAAA,eAAO,EAAC,EAAE,CAAC,CACZ,CAAC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Internal types used to distinguish custom Hedera transaction behaviors.
|
|
3
|
+
* These can be stored in transaction.properties.name and used to route specific preparation logic.
|
|
4
|
+
*/
|
|
5
|
+
export declare const HEDERA_TRANSACTION_KINDS: {
|
|
6
|
+
readonly TokenAssociate: {
|
|
7
|
+
readonly name: "tokenAssociate";
|
|
8
|
+
};
|
|
9
|
+
};
|
|
10
|
+
/**
|
|
11
|
+
* Enum representing the supported Hedera operation types for fee estimation
|
|
12
|
+
*/
|
|
13
|
+
export declare enum HEDERA_OPERATION_TYPES {
|
|
14
|
+
CryptoTransfer = "CryptoTransfer",
|
|
15
|
+
TokenTransfer = "TokenTransfer",
|
|
16
|
+
TokenAssociate = "TokenAssociate"
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* https://docs.hedera.com/hedera/networks/mainnet/fees
|
|
20
|
+
*
|
|
21
|
+
* These are Hedera's estimated fee costs in USD, scaled to tinybars (1 HBAR = 10^8 tinybars),
|
|
22
|
+
* so they can be converted into actual HBAR amounts based on current USD/crypto rates.
|
|
23
|
+
*
|
|
24
|
+
* Used in fee estimation logic (getEstimatedFees function) to determine whether an account
|
|
25
|
+
* has sufficient balance to cover the cost of a transaction (e.g. token association).
|
|
26
|
+
*/
|
|
27
|
+
export declare const BASE_USD_FEE_BY_OPERATION_TYPE: {
|
|
28
|
+
readonly CryptoTransfer: number;
|
|
29
|
+
readonly TokenTransfer: number;
|
|
30
|
+
readonly TokenAssociate: number;
|
|
31
|
+
};
|
|
32
|
+
//# sourceMappingURL=constants.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,eAAO,MAAM,wBAAwB;;;;CAI0C,CAAC;AAEhF;;GAEG;AACH,oBAAY,sBAAsB;IAChC,cAAc,mBAAmB;IACjC,aAAa,kBAAkB;IAC/B,cAAc,mBAAmB;CAClC;AAID;;;;;;;;GAQG;AACH,eAAO,MAAM,8BAA8B;;;;CAIgB,CAAC"}
|
package/lib/constants.js
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.BASE_USD_FEE_BY_OPERATION_TYPE = exports.HEDERA_OPERATION_TYPES = exports.HEDERA_TRANSACTION_KINDS = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Internal types used to distinguish custom Hedera transaction behaviors.
|
|
6
|
+
* These can be stored in transaction.properties.name and used to route specific preparation logic.
|
|
7
|
+
*/
|
|
8
|
+
exports.HEDERA_TRANSACTION_KINDS = {
|
|
9
|
+
TokenAssociate: {
|
|
10
|
+
name: "tokenAssociate",
|
|
11
|
+
},
|
|
12
|
+
};
|
|
13
|
+
/**
|
|
14
|
+
* Enum representing the supported Hedera operation types for fee estimation
|
|
15
|
+
*/
|
|
16
|
+
var HEDERA_OPERATION_TYPES;
|
|
17
|
+
(function (HEDERA_OPERATION_TYPES) {
|
|
18
|
+
HEDERA_OPERATION_TYPES["CryptoTransfer"] = "CryptoTransfer";
|
|
19
|
+
HEDERA_OPERATION_TYPES["TokenTransfer"] = "TokenTransfer";
|
|
20
|
+
HEDERA_OPERATION_TYPES["TokenAssociate"] = "TokenAssociate";
|
|
21
|
+
})(HEDERA_OPERATION_TYPES || (exports.HEDERA_OPERATION_TYPES = HEDERA_OPERATION_TYPES = {}));
|
|
22
|
+
const TINYBAR_SCALE = 8;
|
|
23
|
+
/**
|
|
24
|
+
* https://docs.hedera.com/hedera/networks/mainnet/fees
|
|
25
|
+
*
|
|
26
|
+
* These are Hedera's estimated fee costs in USD, scaled to tinybars (1 HBAR = 10^8 tinybars),
|
|
27
|
+
* so they can be converted into actual HBAR amounts based on current USD/crypto rates.
|
|
28
|
+
*
|
|
29
|
+
* Used in fee estimation logic (getEstimatedFees function) to determine whether an account
|
|
30
|
+
* has sufficient balance to cover the cost of a transaction (e.g. token association).
|
|
31
|
+
*/
|
|
32
|
+
exports.BASE_USD_FEE_BY_OPERATION_TYPE = {
|
|
33
|
+
[HEDERA_OPERATION_TYPES.CryptoTransfer]: 0.0001 * 10 ** TINYBAR_SCALE,
|
|
34
|
+
[HEDERA_OPERATION_TYPES.TokenTransfer]: 0.001 * 10 ** TINYBAR_SCALE,
|
|
35
|
+
[HEDERA_OPERATION_TYPES.TokenAssociate]: 0.05 * 10 ** TINYBAR_SCALE,
|
|
36
|
+
};
|
|
37
|
+
//# sourceMappingURL=constants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":";;;AAAA;;;GAGG;AACU,QAAA,wBAAwB,GAAG;IACtC,cAAc,EAAE;QACd,IAAI,EAAE,gBAAgB;KACvB;CAC4E,CAAC;AAEhF;;GAEG;AACH,IAAY,sBAIX;AAJD,WAAY,sBAAsB;IAChC,2DAAiC,CAAA;IACjC,yDAA+B,CAAA;IAC/B,2DAAiC,CAAA;AACnC,CAAC,EAJW,sBAAsB,sCAAtB,sBAAsB,QAIjC;AAED,MAAM,aAAa,GAAG,CAAC,CAAC;AAExB;;;;;;;;GAQG;AACU,QAAA,8BAA8B,GAAG;IAC5C,CAAC,sBAAsB,CAAC,cAAc,CAAC,EAAE,MAAM,GAAG,EAAE,IAAI,aAAa;IACrE,CAAC,sBAAsB,CAAC,aAAa,CAAC,EAAE,KAAK,GAAG,EAAE,IAAI,aAAa;IACnE,CAAC,sBAAsB,CAAC,cAAc,CAAC,EAAE,IAAI,GAAG,EAAE,IAAI,aAAa;CACV,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deviceTransactionConfig.d.ts","sourceRoot":"","sources":["../src/deviceTransactionConfig.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,KAAK,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAC9D,OAAO,KAAK,EAAE,4BAA4B,IAAI,sBAAsB,EAAE,MAAM,6CAA6C,CAAC;
|
|
1
|
+
{"version":3,"file":"deviceTransactionConfig.d.ts","sourceRoot":"","sources":["../src/deviceTransactionConfig.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,KAAK,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAC9D,OAAO,KAAK,EAAE,4BAA4B,IAAI,sBAAsB,EAAE,MAAM,6CAA6C,CAAC;AAG1H,iBAAS,0BAA0B,CAAC,EAClC,WAAW,EACX,MAAM,EAAE,EAAE,aAAa,EAAE,GAC1B,EAAE;IACD,OAAO,EAAE,WAAW,CAAC;IACrB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,WAAW,EAAE,WAAW,CAAC;IACzB,MAAM,EAAE,iBAAiB,CAAC;CAC3B,GAAG,KAAK,CAAC,sBAAsB,CAAC,CAsChC;AAED,eAAe,0BAA0B,CAAC"}
|
|
@@ -1,25 +1,27 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const logic_1 = require("./logic");
|
|
3
4
|
function getDeviceTransactionConfig({ transaction, status: { estimatedFees }, }) {
|
|
4
5
|
const fields = [];
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
6
|
+
const method = (() => {
|
|
7
|
+
if ((0, logic_1.isTokenAssociateTransaction)(transaction))
|
|
8
|
+
return "Associate Token";
|
|
9
|
+
else if (transaction.useAllAmount)
|
|
10
|
+
return "Transfer All";
|
|
11
|
+
else
|
|
12
|
+
return "Transfer";
|
|
13
|
+
})();
|
|
14
|
+
fields.push({
|
|
15
|
+
type: "text",
|
|
16
|
+
label: "Method",
|
|
17
|
+
value: method,
|
|
18
|
+
});
|
|
19
|
+
if (!(0, logic_1.isTokenAssociateTransaction)(transaction)) {
|
|
13
20
|
fields.push({
|
|
14
|
-
type: "
|
|
15
|
-
label: "
|
|
16
|
-
value: "Transfer",
|
|
21
|
+
type: "amount",
|
|
22
|
+
label: "Amount",
|
|
17
23
|
});
|
|
18
24
|
}
|
|
19
|
-
fields.push({
|
|
20
|
-
type: "amount",
|
|
21
|
-
label: "Amount",
|
|
22
|
-
});
|
|
23
25
|
if (!estimatedFees.isZero()) {
|
|
24
26
|
fields.push({
|
|
25
27
|
type: "fees",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deviceTransactionConfig.js","sourceRoot":"","sources":["../src/deviceTransactionConfig.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"deviceTransactionConfig.js","sourceRoot":"","sources":["../src/deviceTransactionConfig.ts"],"names":[],"mappings":";;AAGA,mCAAsD;AAEtD,SAAS,0BAA0B,CAAC,EAClC,WAAW,EACX,MAAM,EAAE,EAAE,aAAa,EAAE,GAM1B;IACC,MAAM,MAAM,GAAkC,EAAE,CAAC;IAEjD,MAAM,MAAM,GAAG,CAAC,GAAG,EAAE;QACnB,IAAI,IAAA,mCAA2B,EAAC,WAAW,CAAC;YAAE,OAAO,iBAAiB,CAAC;aAClE,IAAI,WAAW,CAAC,YAAY;YAAE,OAAO,cAAc,CAAC;;YACpD,OAAO,UAAU,CAAC;IACzB,CAAC,CAAC,EAAE,CAAC;IAEL,MAAM,CAAC,IAAI,CAAC;QACV,IAAI,EAAE,MAAM;QACZ,KAAK,EAAE,QAAQ;QACf,KAAK,EAAE,MAAM;KACd,CAAC,CAAC;IAEH,IAAI,CAAC,IAAA,mCAA2B,EAAC,WAAW,CAAC,EAAE,CAAC;QAC9C,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,QAAQ;SAChB,CAAC,CAAC;IACL,CAAC;IAED,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,EAAE,CAAC;QAC5B,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,MAAM;YACZ,KAAK,EAAE,MAAM;SACd,CAAC,CAAC;IACL,CAAC;IAED,IAAI,WAAW,CAAC,IAAI,EAAE,CAAC;QACrB,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,MAAM;YACZ,KAAK,EAAE,MAAM;YACb,KAAK,EAAE,WAAW,CAAC,IAAI;SACxB,CAAC,CAAC;IACL,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,kBAAe,0BAA0B,CAAC"}
|
package/lib/logic.d.ts
CHANGED
|
@@ -1,5 +1,11 @@
|
|
|
1
|
-
import { ExplorerView } from "@ledgerhq/types-cryptoassets";
|
|
2
|
-
import { Operation } from "@ledgerhq/types-live";
|
|
1
|
+
import type { ExplorerView, TokenCurrency } from "@ledgerhq/types-cryptoassets";
|
|
2
|
+
import type { AccountLike, Operation } from "@ledgerhq/types-live";
|
|
3
|
+
import type { HederaOperationExtra, Transaction, TransactionStatus } from "./types";
|
|
3
4
|
declare const getTransactionExplorer: (explorerView: ExplorerView | null | undefined, operation: Operation) => string | undefined;
|
|
4
|
-
|
|
5
|
+
declare const isTokenAssociateTransaction: (tx: Transaction) => tx is Required<Transaction>;
|
|
6
|
+
declare const isAutoTokenAssociationEnabled: (account: AccountLike) => boolean;
|
|
7
|
+
declare const isTokenAssociationRequired: (account: AccountLike, token: TokenCurrency | null | undefined) => boolean;
|
|
8
|
+
declare const isValidExtra: (extra: unknown) => extra is HederaOperationExtra;
|
|
9
|
+
declare const sendRecipientCanNext: (status: TransactionStatus) => boolean;
|
|
10
|
+
export { sendRecipientCanNext, getTransactionExplorer, isValidExtra, isTokenAssociateTransaction, isTokenAssociationRequired, isAutoTokenAssociationEnabled, };
|
|
5
11
|
//# sourceMappingURL=logic.d.ts.map
|
package/lib/logic.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logic.d.ts","sourceRoot":"","sources":["../src/logic.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"logic.d.ts","sourceRoot":"","sources":["../src/logic.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAChF,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEnE,OAAO,KAAK,EAEV,oBAAoB,EAEpB,WAAW,EACX,iBAAiB,EAClB,MAAM,SAAS,CAAC;AAEjB,QAAA,MAAM,sBAAsB,iBACZ,YAAY,GAAG,IAAI,GAAG,SAAS,aAClC,SAAS,KACnB,MAAM,GAAG,SAOX,CAAC;AAEF,QAAA,MAAM,2BAA2B,OAC3B,WAAW,gCAGhB,CAAC;AAEF,QAAA,MAAM,6BAA6B,YAAa,WAAW,YAI1D,CAAC;AAEF,QAAA,MAAM,0BAA0B,YACrB,WAAW,SACb,aAAa,GAAG,IAAI,GAAG,SAAS,YAMxC,CAAC;AAEF,QAAA,MAAM,YAAY,UAAW,OAAO,kCAEnC,CAAC;AAKF,QAAA,MAAM,oBAAoB,WAAY,iBAAiB,YAItD,CAAC;AAEF,OAAO,EACL,oBAAoB,EACpB,sBAAsB,EACtB,YAAY,EACZ,2BAA2B,EAC3B,0BAA0B,EAC1B,6BAA6B,GAC9B,CAAC"}
|
package/lib/logic.js
CHANGED
|
@@ -1,9 +1,37 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.getTransactionExplorer = void 0;
|
|
3
|
+
exports.isAutoTokenAssociationEnabled = exports.isTokenAssociationRequired = exports.isTokenAssociateTransaction = exports.isValidExtra = exports.getTransactionExplorer = exports.sendRecipientCanNext = void 0;
|
|
4
|
+
const constants_1 = require("./constants");
|
|
4
5
|
const getTransactionExplorer = (explorerView, operation) => {
|
|
5
|
-
const extra = operation.extra;
|
|
6
|
-
return explorerView?.tx?.replace("$hash", extra
|
|
6
|
+
const extra = isValidExtra(operation.extra) ? operation.extra : null;
|
|
7
|
+
return explorerView?.tx?.replace("$hash", extra?.consensusTimestamp ?? extra?.transactionId ?? "0");
|
|
7
8
|
};
|
|
8
9
|
exports.getTransactionExplorer = getTransactionExplorer;
|
|
10
|
+
const isTokenAssociateTransaction = (tx) => {
|
|
11
|
+
return tx.properties?.name === constants_1.HEDERA_TRANSACTION_KINDS.TokenAssociate.name;
|
|
12
|
+
};
|
|
13
|
+
exports.isTokenAssociateTransaction = isTokenAssociateTransaction;
|
|
14
|
+
const isAutoTokenAssociationEnabled = (account) => {
|
|
15
|
+
const hederaAccount = "hederaResources" in account ? account : null;
|
|
16
|
+
return hederaAccount?.hederaResources?.isAutoTokenAssociationEnabled ?? false;
|
|
17
|
+
};
|
|
18
|
+
exports.isAutoTokenAssociationEnabled = isAutoTokenAssociationEnabled;
|
|
19
|
+
const isTokenAssociationRequired = (account, token) => {
|
|
20
|
+
const subAccounts = !!account && "subAccounts" in account ? account.subAccounts ?? [] : [];
|
|
21
|
+
const isTokenAssociated = subAccounts.some(item => item.token.id === token?.id);
|
|
22
|
+
return !!token && !isTokenAssociated && !isAutoTokenAssociationEnabled(account);
|
|
23
|
+
};
|
|
24
|
+
exports.isTokenAssociationRequired = isTokenAssociationRequired;
|
|
25
|
+
const isValidExtra = (extra) => {
|
|
26
|
+
return !!extra && typeof extra === "object" && !Array.isArray(extra);
|
|
27
|
+
};
|
|
28
|
+
exports.isValidExtra = isValidExtra;
|
|
29
|
+
// disables the "Continue" button in the Send modal's Recipient step during token transfers if:
|
|
30
|
+
// - the recipient is not associated with the token
|
|
31
|
+
// - the association status can't be verified
|
|
32
|
+
const sendRecipientCanNext = (status) => {
|
|
33
|
+
const { missingAssociation, unverifiedAssociation } = status.warnings;
|
|
34
|
+
return !missingAssociation && !unverifiedAssociation;
|
|
35
|
+
};
|
|
36
|
+
exports.sendRecipientCanNext = sendRecipientCanNext;
|
|
9
37
|
//# sourceMappingURL=logic.js.map
|
package/lib/logic.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logic.js","sourceRoot":"","sources":["../src/logic.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"logic.js","sourceRoot":"","sources":["../src/logic.ts"],"names":[],"mappings":";;;AAEA,2CAAuD;AASvD,MAAM,sBAAsB,GAAG,CAC7B,YAA6C,EAC7C,SAAoB,EACA,EAAE;IACtB,MAAM,KAAK,GAAG,YAAY,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;IAErE,OAAO,YAAY,EAAE,EAAE,EAAE,OAAO,CAC9B,OAAO,EACP,KAAK,EAAE,kBAAkB,IAAI,KAAK,EAAE,aAAa,IAAI,GAAG,CACzD,CAAC;AACJ,CAAC,CAAC;AAuCA,wDAAsB;AArCxB,MAAM,2BAA2B,GAAG,CAClC,EAAe,EACiE,EAAE;IAClF,OAAO,EAAE,CAAC,UAAU,EAAE,IAAI,KAAK,oCAAwB,CAAC,cAAc,CAAC,IAAI,CAAC;AAC9E,CAAC,CAAC;AAmCA,kEAA2B;AAjC7B,MAAM,6BAA6B,GAAG,CAAC,OAAoB,EAAE,EAAE;IAC7D,MAAM,aAAa,GAAG,iBAAiB,IAAI,OAAO,CAAC,CAAC,CAAE,OAAyB,CAAC,CAAC,CAAC,IAAI,CAAC;IAEvF,OAAO,aAAa,EAAE,eAAe,EAAE,6BAA6B,IAAI,KAAK,CAAC;AAChF,CAAC,CAAC;AA+BA,sEAA6B;AA7B/B,MAAM,0BAA0B,GAAG,CACjC,OAAoB,EACpB,KAAuC,EACvC,EAAE;IACF,MAAM,WAAW,GAAG,CAAC,CAAC,OAAO,IAAI,aAAa,IAAI,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAC3F,MAAM,iBAAiB,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,KAAK,KAAK,EAAE,EAAE,CAAC,CAAC;IAEhF,OAAO,CAAC,CAAC,KAAK,IAAI,CAAC,iBAAiB,IAAI,CAAC,6BAA6B,CAAC,OAAO,CAAC,CAAC;AAClF,CAAC,CAAC;AAoBA,gEAA0B;AAlB5B,MAAM,YAAY,GAAG,CAAC,KAAc,EAAiC,EAAE;IACrE,OAAO,CAAC,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AACvE,CAAC,CAAC;AAcA,oCAAY;AAZd,+FAA+F;AAC/F,mDAAmD;AACnD,6CAA6C;AAC7C,MAAM,oBAAoB,GAAG,CAAC,MAAyB,EAAE,EAAE;IACzD,MAAM,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,GAAG,MAAM,CAAC,QAAQ,CAAC;IAEtE,OAAO,CAAC,kBAAkB,IAAI,CAAC,qBAAqB,CAAC;AACvD,CAAC,CAAC;AAGA,oDAAoB"}
|