"use strict";
var assert = require("assert");
var coretypes_1 = require("./coretypes");
var ledger_hashes_1 = require("./ledger-hashes");
var enums_1 = require("./enums");
var signingData = coretypes_1.binary.signingData, signingClaimData = coretypes_1.binary.signingClaimData, multiSigningData = coretypes_1.binary.multiSigningData, binaryToJSON = coretypes_1.binary.binaryToJSON, serializeObject = coretypes_1.binary.serializeObject;
/**
 * Decode a transaction
 *
 * @param binary hex-string of the encoded transaction
 * @returns the JSON representation of the transaction
 */
function decode(binary) {
    assert.ok(typeof binary === 'string', 'binary must be a hex string');
    return binaryToJSON(binary);
}
/**
 * Encode a transaction
 *
 * @param json The JSON representation of a transaction
 * @returns A hex-string of the encoded transaction
 */
function encode(json) {
    assert.ok(typeof json === 'object');
    return serializeObject(json)
        .toString('hex')
        .toUpperCase();
}
/**
 * Encode a transaction and prepare for signing
 *
 * @param json JSON object representing the transaction
 * @param signer string representing the account to sign the transaction with
 * @returns a hex string of the encoded transaction
 */
function encodeForSigning(json) {
    assert.ok(typeof json === 'object');
    return signingData(json)
        .toString('hex')
        .toUpperCase();
}
/**
 * Encode a transaction and prepare for signing with a claim
 *
 * @param json JSON object representing the transaction
 * @param signer string representing the account to sign the transaction with
 * @returns a hex string of the encoded transaction
 */
function encodeForSigningClaim(json) {
    assert.ok(typeof json === 'object');
    return signingClaimData(json)
        .toString('hex')
        .toUpperCase();
}
/**
 * Encode a transaction and prepare for multi-signing
 *
 * @param json JSON object representing the transaction
 * @param signer string representing the account to sign the transaction with
 * @returns a hex string of the encoded transaction
 */
function encodeForMultisigning(json, signer) {
    assert.ok(typeof json === 'object');
    assert.equal(json['SigningPubKey'], '');
    return multiSigningData(json, signer)
        .toString('hex')
        .toUpperCase();
}
/**
 * Encode a quality value
 *
 * @param value string representation of a number
 * @returns a hex-string representing the quality
 */
function encodeQuality(value) {
    assert.ok(typeof value === 'string');
    return coretypes_1.quality.encode(value).toString('hex').toUpperCase();
}
/**
 * Decode a quality value
 *
 * @param value hex-string of a quality
 * @returns a string representing the quality
 */
function decodeQuality(value) {
    assert.ok(typeof value === 'string');
    return coretypes_1.quality.decode(value).toString();
}
module.exports = {
    decode: decode,
    encode: encode,
    encodeForSigning: encodeForSigning,
    encodeForSigningClaim: encodeForSigningClaim,
    encodeForMultisigning: encodeForMultisigning,
    encodeQuality: encodeQuality,
    decodeQuality: decodeQuality,
    decodeLedgerData: ledger_hashes_1.decodeLedgerData,
    TRANSACTION_TYPES: enums_1.TRANSACTION_TYPES,
};
//# sourceMappingURL=index.js.map