@ledgerhq/coin-stellar
Version:
Ledger Stellar Coin integration
64 lines • 3.17 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.buildSubAccounts = exports.getAssetIdFromTokenId = void 0;
const bignumber_js_1 = __importDefault(require("bignumber.js"));
const index_1 = require("@ledgerhq/coin-framework/account/index");
const parseCurrencyUnit_1 = require("@ledgerhq/coin-framework/currencies/parseCurrencyUnit");
const operation_1 = require("@ledgerhq/coin-framework/operation");
const cryptoassets_1 = require("@ledgerhq/cryptoassets");
const getAssetIdFromTokenId = (tokenId) => tokenId.split("/")[2];
exports.getAssetIdFromTokenId = getAssetIdFromTokenId;
const getAssetIdFromAsset = (asset) => `${asset.asset_code}:${asset.asset_issuer}`;
function buildStellarTokenAccount({ parentAccountId, stellarAsset, token, operations, }) {
const assetId = (0, exports.getAssetIdFromTokenId)(token.id);
const id = `${parentAccountId}+${assetId}`;
const balance = (0, parseCurrencyUnit_1.parseCurrencyUnit)(token.units[0], stellarAsset.balance || "0");
const reservedBalance = new bignumber_js_1.default(stellarAsset.balance).minus(stellarAsset.selling_liabilities || 0);
const spendableBalance = (0, parseCurrencyUnit_1.parseCurrencyUnit)(token.units[0], reservedBalance.toString());
return {
type: "TokenAccount",
id,
parentId: parentAccountId,
token,
operationsCount: operations.length,
operations: operations.map(op => ({
...op,
id: (0, operation_1.encodeOperationId)(id, op.hash, op.extra.ledgerOpType),
accountId: id,
type: op.extra.ledgerOpType,
value: op.extra.assetAmount ? new bignumber_js_1.default(op.extra.assetAmount) : op.value,
})),
pendingOperations: [],
balance,
spendableBalance,
swapHistory: [],
creationDate: operations.length > 0 ? operations[operations.length - 1].date : new Date(),
balanceHistoryCache: index_1.emptyHistoryCache, // calculated in the jsHelpers
};
}
function buildSubAccounts({ currency, accountId, assets, syncConfig, operations, }) {
const { blacklistedTokenIds = [] } = syncConfig;
const allTokens = (0, cryptoassets_1.listTokensForCryptoCurrency)(currency);
if (allTokens.length === 0 || assets.length === 0) {
return undefined;
}
const tokenAccounts = [];
assets.map(asset => {
const token = (0, cryptoassets_1.findTokenById)(`stellar/asset/${getAssetIdFromAsset(asset)}`);
if (token && !blacklistedTokenIds.includes(token.id)) {
tokenAccounts.push(buildStellarTokenAccount({
parentAccountId: accountId,
stellarAsset: asset,
token,
operations: operations.filter(op => op.extra.assetCode === asset.asset_code &&
op.extra.assetIssuer === asset.asset_issuer),
}));
}
});
return tokenAccounts;
}
exports.buildSubAccounts = buildSubAccounts;
//# sourceMappingURL=tokens.js.map