@radixdlt/atom-transaction-mapping
Version:
40 lines • 2.37 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.validateUserActionType = exports.validateConsumeTokensAction = exports.alwaysValid = exports.validateUserActionSender = exports.validate = void 0;
const atom_1 = require("@radixdlt/atom");
const neverthrow_1 = require("neverthrow");
/* eslint-disable @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-module-boundary-types */
const validate = (...validators) => (input) => validators.reduce((result, validator) => result.andThen(validator), neverthrow_1.ok(input));
exports.validate = validate;
/* eslint-enable @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-module-boundary-types */
const validateUserActionSender = (input) => {
return input.action.sender.equals(input.addressOfActiveAccount)
? neverthrow_1.ok(input)
: neverthrow_1.err(new Error('Wrong sender/signer'));
};
exports.validateUserActionSender = validateUserActionSender;
exports.alwaysValid = { witness: 'always valid' };
const validateConsumeTokensAction = (validateTokenDefinition) => (input) => {
const resourceIdentifier = input.action.resourceIdentifier;
const tokenDefValidation = validateTokenDefinition !== null && validateTokenDefinition !== void 0 ? validateTokenDefinition : (() => neverthrow_1.ok(exports.alwaysValid));
const spunParticles_ = atom_1.spunParticles(input.upParticles);
const tokenDefinitionParticle = spunParticles_.tokenDefinitionParticleMatchingIdentifier(resourceIdentifier);
if (!tokenDefinitionParticle) {
return neverthrow_1.err(new Error(`Unknown token with identifier: '${resourceIdentifier.toString()}'`));
}
if (!input.action.amount.isMultipleOf(tokenDefinitionParticle.granularity)) {
return neverthrow_1.err(new Error('Amount not multiple of granularity'));
}
return tokenDefValidation({
tokenDefinitionParticle,
burner: input.action.sender,
}).map((_) => input);
};
exports.validateConsumeTokensAction = validateConsumeTokensAction;
const validateUserActionType = (filterOnType) => (input) => {
if (input.action.actionType !== filterOnType)
return neverthrow_1.err(new Error('Incorrect UserAction type.'));
return neverthrow_1.ok(input);
};
exports.validateUserActionType = validateUserActionType;
//# sourceMappingURL=validation.js.map