@xmr-core/xmr-mymonero-libs
Version:
A collection of utilities for building ontop of a MyMonero compatible API
50 lines (45 loc) • 1.4 kB
text/typescript
import { ParsedTarget, RawTarget } from "@xmr-core/xmr-transaction";
import { ERR } from "./errors";
import { possibleOAAddress } from "./open_alias_lite";
import { decode_address, NetType } from "@xmr-core/xmr-crypto-utils";
import { parseMoney } from "@xmr-core/xmr-money";
/**
* @description Map through the provided targets and normalize each address/amount pair
*
* Addresses are checked to see if they may belong to an OpenAlias address, and rejected if so.
* Then they are validated by attempting to decode them.
*
* Amounts are attempted to be parsed from string value to BigInt value
*
* The validated address / parsed amount pairs are then returned
*
* @export
* @param {RawTarget[]} targetsToParse
* @param {NetType} nettype
* @returns {ParsedTarget[]}
*/
export function parseTargets(
targetsToParse: RawTarget[],
nettype: NetType,
): ParsedTarget[] {
return targetsToParse.map(({ address, amount }) => {
if (!address && !amount) {
throw ERR.PARSE_TRGT.EMPTY;
}
if (possibleOAAddress(address)) {
throw ERR.PARSE_TRGT.OA_RES;
}
const amountStr = amount.toString();
try {
decode_address(address, nettype);
} catch (e) {
throw ERR.PARSE_TRGT.decodeAddress(address, e);
}
try {
const parsedAmount = parseMoney(amountStr);
return { address, amount: parsedAmount };
} catch (e) {
throw ERR.PARSE_TRGT.amount(amountStr, e);
}
});
}