@ledgerhq/coin-stellar
Version:
Ledger Stellar Coin integration
71 lines • 2.63 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.craftTransaction = void 0;
const errors_1 = require("@ledgerhq/errors");
const stellar_sdk_1 = require("@stellar/stellar-sdk");
const network_1 = require("../network");
const types_1 = require("../types");
const sdkWrapper_1 = require("./sdkWrapper");
async function craftTransaction(account, transaction) {
const { amount, recipient, fee, memoType, memoValue, type, assetCode, assetIssuer } = transaction;
const source = await (0, network_1.loadAccount)(account.address);
if (!source) {
throw new errors_1.NetworkDown();
}
const transactionBuilder = (0, sdkWrapper_1.buildTransactionBuilder)(source, fee);
let operation = null;
if (type === "changeTrust") {
if (!assetCode || !assetIssuer) {
throw new types_1.StellarAssetRequired("");
}
operation = (0, sdkWrapper_1.buildChangeTrustOperation)(assetCode, assetIssuer);
}
else {
// Payment
const recipientAccount = await (0, network_1.getRecipientAccount)({
recipient,
});
if (recipientAccount?.id) {
operation = (0, sdkWrapper_1.buildPaymentOperation)({
destination: recipient,
amount,
assetCode,
assetIssuer,
});
}
else {
if (recipientAccount?.isMuxedAccount) {
throw new types_1.StellarMuxedAccountNotExist("");
}
operation = (0, sdkWrapper_1.buildCreateAccountOperation)(recipient, amount);
}
}
transactionBuilder.addOperation(operation);
const memo = buildMemo(memoType, memoValue);
if (memo) {
transactionBuilder.addMemo(memo);
}
const craftedTransaction = transactionBuilder.setTimeout(0).build();
return {
transaction: craftedTransaction,
xdr: craftedTransaction.toXDR(),
signatureBase: craftedTransaction.signatureBase().toString("base64"),
};
}
exports.craftTransaction = craftTransaction;
function buildMemo(memoType, memoValue) {
if (memoType && memoValue) {
switch (memoType) {
case "MEMO_TEXT":
return stellar_sdk_1.Memo.text(memoValue);
case "MEMO_ID":
return stellar_sdk_1.Memo.id(memoValue);
case "MEMO_HASH":
return stellar_sdk_1.Memo.hash(memoValue);
case "MEMO_RETURN":
return stellar_sdk_1.Memo.return(memoValue);
}
}
return null;
}
//# sourceMappingURL=craftTransaction.js.map