@ledgerhq/coin-aptos
Version:
Ledger Aptos Coin integration
58 lines • 2.67 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.processRecipients = void 0;
const constants_1 = require("../constants");
const getCoinAndAmounts_1 = require("./getCoinAndAmounts");
const normalizeAddress_1 = require("./normalizeAddress");
const transferLikeFunctions = (payload) => constants_1.COIN_TRANSFER_TYPES.includes(payload.function) ||
constants_1.DELEGATION_POOL_TYPES.includes(payload.function);
const addLikeFunctionsToRecipients = (op, payload) => {
if (payload.functionArguments &&
payload.functionArguments.length > 0 &&
typeof payload.functionArguments[0] === "string") {
op.recipients.push((0, normalizeAddress_1.normalizeAddress)(payload.functionArguments[0]));
}
};
const addFungibleToRecipients = (op, payload) => {
if (payload.functionArguments &&
payload.functionArguments.length > 1 &&
typeof payload.functionArguments[0] === "object" &&
typeof payload.functionArguments[1] === "string") {
op.recipients.push((0, normalizeAddress_1.normalizeAddress)(payload.functionArguments[1].toString()));
}
};
const addBatchedFunctions = (op, payload, address) => {
if (!(payload.functionArguments &&
payload.functionArguments.length > 0 &&
Array.isArray(payload.functionArguments[0]))) {
return;
}
for (const recipient of payload.functionArguments[0]) {
if (recipient && (0, getCoinAndAmounts_1.compareAddress)(recipient.toString(), address)) {
op.recipients.push((0, normalizeAddress_1.normalizeAddress)(recipient.toString()));
}
}
};
function processRecipients(payload, address, op, function_address) {
// get recipients by 3 groups
if (transferLikeFunctions(payload)) {
// 1. Transfer like functions (includes some delegation pool functions)
addLikeFunctionsToRecipients(op, payload);
}
else if (constants_1.FA_TRANSFER_TYPES.includes(payload.function)) {
// 1. Transfer like functions (includes some delegation pool functions)
addFungibleToRecipients(op, payload);
}
else if (constants_1.BATCH_TRANSFER_TYPES.includes(payload.function)) {
// 2. Batch function, to validate we are in the recipients list
if (!(0, getCoinAndAmounts_1.compareAddress)(op.senders[0], address)) {
addBatchedFunctions(op, payload, address);
}
}
else {
// 3. other smart contracts, in this case smart contract will be treated as a recipient
op.recipients.push(function_address);
}
}
exports.processRecipients = processRecipients;
//# sourceMappingURL=processRecipients.js.map