UNPKG

@ledgerhq/coin-ton

Version:
290 lines 11.3 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.toTransactionRaw = exports.fromTransactionRaw = exports.formatTransaction = void 0; const index_1 = require("@ledgerhq/coin-framework/account/index"); const index_2 = require("@ledgerhq/coin-framework/currencies/index"); const formatters_1 = require("@ledgerhq/coin-framework/formatters"); const serialization_1 = require("@ledgerhq/coin-framework/serialization"); const bignumber_js_1 = __importDefault(require("bignumber.js")); const core_1 = require("@ton/core"); const formatTransaction = ({ recipient, useAllAmount, amount }, account) => ` SEND ${useAllAmount ? "MAX" : amount.isZero() ? "" : " " + (0, index_2.formatCurrencyUnit)((0, index_1.getAccountCurrency)(account).units[0], amount, { showCode: true, disableRounding: true, })} TO ${recipient}`; exports.formatTransaction = formatTransaction; const getCellOrBuffer = (customPayload) => { if (!customPayload) return null; try { return core_1.Cell.fromBase64(customPayload); } catch { return Buffer.from(customPayload, "hex"); } }; const safeToBigInt = (value) => { return value ? BigInt(value) : null; }; const safeCellFromBase64 = (value) => { return value ? core_1.Cell.fromBase64(value) : null; }; const fromRecordRaw = (record) => { if (record.type === "wallet") { return { type: record.type, value: record.value ? { address: core_1.Address.parse(record.value.address), capabilities: record.value.capabilities, } : null, }; } return { type: record.type, key: Buffer.from(record.key, "hex"), value: safeCellFromBase64(record.value), }; }; const fromTransactionPayloadRaw = (payload) => { switch (payload.type) { case "unsafe": return { type: payload.type, message: core_1.Cell.fromBase64(payload.message), }; case "jetton-transfer": return { type: payload.type, queryId: safeToBigInt(payload.queryId), amount: BigInt(payload.amount), destination: core_1.Address.parse(payload.destination), responseDestination: core_1.Address.parse(payload.responseDestination), customPayload: safeCellFromBase64(payload.customPayload), forwardAmount: BigInt(payload.forwardAmount), forwardPayload: safeCellFromBase64(payload.forwardPayload), knownJetton: payload.knownJetton, }; case "nft-transfer": return { type: payload.type, queryId: safeToBigInt(payload.queryId), newOwner: core_1.Address.parse(payload.newOwner), responseDestination: core_1.Address.parse(payload.responseDestination), customPayload: safeCellFromBase64(payload.customPayload), forwardAmount: BigInt(payload.forwardAmount), forwardPayload: safeCellFromBase64(payload.forwardPayload), }; case "jetton-burn": return { type: payload.type, queryId: safeToBigInt(payload.queryId), amount: BigInt(payload.amount), responseDestination: core_1.Address.parse(payload.responseDestination), customPayload: getCellOrBuffer(payload.customPayload), }; case "add-whitelist": case "single-nominator-change-validator": return { type: payload.type, queryId: safeToBigInt(payload.queryId), address: core_1.Address.parse(payload.address), }; case "single-nominator-withdraw": return { type: payload.type, queryId: safeToBigInt(payload.queryId), amount: BigInt(payload.amount), }; case "tonstakers-deposit": return { type: payload.type, queryId: safeToBigInt(payload.queryId), appId: safeToBigInt(payload.appId), }; case "vote-for-proposal": return { type: payload.type, queryId: safeToBigInt(payload.queryId), votingAddress: core_1.Address.parse(payload.votingAddress), expirationDate: payload.expirationDate, vote: payload.vote, needConfirmation: payload.needConfirmation, }; case "change-dns-record": return { type: payload.type, queryId: safeToBigInt(payload.queryId), record: fromRecordRaw(payload.record), }; case "token-bridge-pay-swap": return { type: payload.type, queryId: safeToBigInt(payload.queryId), swapId: Buffer.from(payload.swapId, "hex"), }; case "comment": return payload; default: { const exhaustiveCheck = payload; // https://www.typescriptlang.org/docs/handbook/2/narrowing.html#exhaustiveness-checking return exhaustiveCheck; } } }; const fromTransactionRaw = (tr) => { const common = (0, serialization_1.fromTransactionCommonRaw)(tr); return { ...common, family: tr.family, fees: new bignumber_js_1.default(tr.fees), comment: tr.comment, payload: tr.payload ? fromTransactionPayloadRaw(tr.payload) : undefined, }; }; exports.fromTransactionRaw = fromTransactionRaw; const safeFromBigInt = (value) => { return typeof value === "bigint" ? value.toString() : null; }; const safeBocToString = (value) => { return value ? value.toBoc().toString("base64") : null; }; const safeBocOrBufferToString = (value) => { if (value && "toBoc" in value) { return value.toBoc().toString("base64"); } return value ? value.toString("hex") : null; }; const fromRecord = (record) => { if (record.type === "wallet") { return { type: record.type, value: record.value ? { address: record.value.address.toRawString(), capabilities: record.value.capabilities, } : null, }; } return { type: record.type, key: record.key.toString("hex"), value: safeBocToString(record.value), }; }; const toTransactionPayloadRaw = (payload) => { switch (payload.type) { case "unsafe": return { type: payload.type, message: payload.message.toBoc().toString("base64"), }; case "jetton-transfer": return { type: payload.type, queryId: safeFromBigInt(payload.queryId), amount: payload.amount.toString(), destination: payload.destination.toRawString(), responseDestination: payload.responseDestination.toRawString(), customPayload: safeBocToString(payload.customPayload), forwardAmount: payload.forwardAmount.toString(), forwardPayload: safeBocToString(payload.forwardPayload), knownJetton: payload.knownJetton, }; case "nft-transfer": return { type: payload.type, queryId: safeFromBigInt(payload.queryId), newOwner: payload.newOwner.toRawString(), responseDestination: payload.responseDestination.toRawString(), customPayload: safeBocToString(payload.customPayload), forwardAmount: payload.forwardAmount.toString(), forwardPayload: safeBocToString(payload.forwardPayload), }; case "jetton-burn": return { type: payload.type, queryId: safeFromBigInt(payload.queryId), amount: payload.amount.toString(), responseDestination: payload.responseDestination.toRawString(), customPayload: safeBocOrBufferToString(payload.customPayload), }; case "add-whitelist": case "single-nominator-change-validator": return { type: payload.type, queryId: safeFromBigInt(payload.queryId), address: payload.address.toRawString(), }; case "single-nominator-withdraw": return { type: payload.type, queryId: safeFromBigInt(payload.queryId), amount: payload.amount.toString(), }; case "tonstakers-deposit": return { type: payload.type, queryId: safeFromBigInt(payload.queryId), appId: safeFromBigInt(payload.appId), }; case "vote-for-proposal": return { type: payload.type, queryId: safeFromBigInt(payload.queryId), votingAddress: payload.votingAddress.toRawString(), expirationDate: payload.expirationDate, vote: payload.vote, needConfirmation: payload.needConfirmation, }; case "change-dns-record": return { type: payload.type, queryId: safeFromBigInt(payload.queryId), record: fromRecord(payload.record), }; case "token-bridge-pay-swap": return { type: payload.type, queryId: safeFromBigInt(payload.queryId), swapId: payload.swapId.toString("hex"), }; case "comment": return payload; default: { const exhaustiveCheck = payload; // https://www.typescriptlang.org/docs/handbook/2/narrowing.html#exhaustiveness-checking return exhaustiveCheck; } } }; const toTransactionRaw = (transaction) => { const common = (0, serialization_1.toTransactionCommonRaw)(transaction); return { ...common, family: transaction.family, amount: transaction.amount.toFixed(), fees: transaction.fees.toFixed(), comment: transaction.comment, payload: transaction.payload ? toTransactionPayloadRaw(transaction.payload) : undefined, }; }; exports.toTransactionRaw = toTransactionRaw; exports.default = { formatTransaction: exports.formatTransaction, fromTransactionRaw: exports.fromTransactionRaw, toTransactionRaw: exports.toTransactionRaw, fromTransactionStatusRaw: serialization_1.fromTransactionStatusRawCommon, toTransactionStatusRaw: serialization_1.toTransactionStatusRawCommon, formatTransactionStatus: formatters_1.formatTransactionStatus, }; //# sourceMappingURL=transaction.js.map