@radixdlt/atom-transaction-mapping
Version:
42 lines • 2.19 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.tokenTransferActionToParticleGroupsMapper = void 0;
const actions_1 = require("@radixdlt/actions");
const atom_1 = require("@radixdlt/atom");
const neverthrow_1 = require("neverthrow");
const fungibleParticleTransitioner_1 = require("./fungibleParticleTransitioner");
const validation_1 = require("./validation");
const utils_1 = require("./utils");
const particleGroupsFromTransferTokensAction = (input) => {
const transferAction = input.transferTokensAction;
const transitioner = fungibleParticleTransitioner_1.makeTransitioner({
inputAmountMapper: (from) => from.amount,
inputCreator: utils_1.transferrableTokensParticleFromOther.bind(null, transferAction.sender),
outputCreator: utils_1.transferrableTokensParticleFromOther.bind(null, transferAction.recipient),
});
const consumableParticles = input.upParticles
.map((sp) => sp.particle)
.filter((p) => p.resourceIdentifier.equals(transferAction.resourceIdentifier));
return transitioner
.transition({
currentParticles: consumableParticles,
totalAmountToTransfer: transferAction.amount,
})
.map((spp) => atom_1.spunParticles(spp))
.map((sps) => [atom_1.ParticleGroup.create(sps)]);
};
const tokenTransferActionToParticleGroupsMapper = () => {
const actionType = actions_1.UserActionType.TOKEN_TRANSFER;
return {
actionType,
particleGroupsFromAction: (input) => validation_1.validate(validation_1.validateUserActionSender, validation_1.validateUserActionType(actionType), validation_1.validateConsumeTokensAction())(input)
.andThen((res) => neverthrow_1.combine(utils_1.collectUpParticles(res)))
.andThen((upParticles) => particleGroupsFromTransferTokensAction({
transferTokensAction: input.action,
upParticles: upParticles,
addressOfActiveAccount: input.addressOfActiveAccount,
})),
};
};
exports.tokenTransferActionToParticleGroupsMapper = tokenTransferActionToParticleGroupsMapper;
//# sourceMappingURL=tokenTransferActionToParticleGroupsMapper.js.map