@stellar/stellar-sdk
Version:
A library for working with the Stellar network, including communication with the Horizon and Soroban RPC servers.
57 lines (53 loc) • 2 kB
JavaScript
;
var curr_generated = require('../generated/curr_generated.js');
var keypair = require('../keypair.js');
var operations = require('../util/operations.js');
function setTrustLineFlags(opts) {
if (typeof opts.flags !== "object" || Object.keys(opts.flags).length === 0) {
throw new Error("opts.flags must be a map of boolean flags to modify");
}
const mapping = {
authorized: curr_generated.default.TrustLineFlags.authorizedFlag(),
authorizedToMaintainLiabilities: curr_generated.default.TrustLineFlags.authorizedToMaintainLiabilitiesFlag(),
clawbackEnabled: curr_generated.default.TrustLineFlags.trustlineClawbackEnabledFlag()
};
let clearFlag = 0;
let setFlag = 0;
Object.keys(opts.flags).forEach((flagName) => {
if (!Object.prototype.hasOwnProperty.call(mapping, flagName)) {
throw new Error(`unsupported flag name specified: ${flagName}`);
}
const flagValue = opts.flags[flagName];
const bit = mapping[flagName];
if (!bit) {
throw new Error(`Invalid flag name: ${flagName}`);
}
if (typeof flagValue !== "boolean" && typeof flagValue !== "undefined") {
throw new TypeError(
`opts.flags.${flagName} must be a boolean (got ${typeof flagValue})`
);
}
if (flagValue === true) {
setFlag |= bit.value;
} else if (flagValue === false) {
clearFlag |= bit.value;
}
});
const trustor = keypair.Keypair.fromPublicKey(opts.trustor).xdrAccountId();
const asset = opts.asset.toXDRObject();
const opAttributes = {
sourceAccount: null,
body: curr_generated.default.OperationBody.setTrustLineFlags(
new curr_generated.default.SetTrustLineFlagsOp({
trustor,
asset,
clearFlags: clearFlag,
setFlags: setFlag
})
)
};
operations.setSourceAccount(opAttributes, opts);
return new curr_generated.default.Operation(opAttributes);
}
exports.setTrustLineFlags = setTrustLineFlags;
//# sourceMappingURL=set_trustline_flags.js.map