UNPKG

crypto-bot-api

Version:

Simple and minimalistic client for Telegram CryptoBot Crypto Pay API

334 lines (333 loc) 11.7 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.toMe = exports.toStats = exports.toTransfers = exports.toChecks = exports.toInvoices = exports.toTransfer = exports.toCheck = exports.toInvoice = exports.toExchangeRates = exports.toCurrencies = exports.toBalances = exports.TransferStatus = exports.CheckStatus = exports.InvoiceStatus = exports.DetailedCurrencyType = exports.CurrencyType = void 0; /** Possible currency types */ var CurrencyType; (function (CurrencyType) { CurrencyType["Crypto"] = "crypto"; CurrencyType["Fiat"] = "fiat"; CurrencyType["Unknown"] = "unknown"; })(CurrencyType || (exports.CurrencyType = CurrencyType = {})); /** Possible detailed currency types */ var DetailedCurrencyType; (function (DetailedCurrencyType) { DetailedCurrencyType["Blockchain"] = "blockchain"; DetailedCurrencyType["Stablecoin"] = "stablecoin"; DetailedCurrencyType["Fiat"] = "fiat"; DetailedCurrencyType["Unknown"] = "unknown"; })(DetailedCurrencyType || (exports.DetailedCurrencyType = DetailedCurrencyType = {})); /** Possible invoice statuses */ var InvoiceStatus; (function (InvoiceStatus) { InvoiceStatus["Active"] = "active"; InvoiceStatus["Paid"] = "paid"; InvoiceStatus["Expired"] = "expired"; InvoiceStatus["Unknown"] = "unknown"; })(InvoiceStatus || (exports.InvoiceStatus = InvoiceStatus = {})); /** Possible check statuses */ var CheckStatus; (function (CheckStatus) { CheckStatus["Active"] = "active"; CheckStatus["Activated"] = "activated"; CheckStatus["Unknown"] = "unknown"; })(CheckStatus || (exports.CheckStatus = CheckStatus = {})); /** Possible transfer statuses */ var TransferStatus; (function (TransferStatus) { TransferStatus["Completed"] = "completed"; TransferStatus["Unknown"] = "unknown"; })(TransferStatus || (exports.TransferStatus = TransferStatus = {})); /** * Convert backend API result to library result object to return in * {@link Client.getBalances} method * * @param input - Backend API result * * @throws Error - If input parameter is not array * * @returns Converted result */ const toBalances = (input) => { if (!Array.isArray(input)) throw new Error(`Input is not array: ${JSON.stringify(input)}`); // Conver array to HashMap structure return input.reduce((accumulator, value) => { accumulator[value.currency_code] = { available: value.available, onhold: value.onhold }; return accumulator; }, {}); }; exports.toBalances = toBalances; /** * Convert backend API result to library result object to return in * {@link Store.getCurrencies} method * * @param input - Backend API result * * @returns Converted result */ const toCurrencies = (input) => { if (!Array.isArray(input)) return {}; return input.reduce((accumulator, value) => { if (value.code) { const code = value.code.toString(); let type = DetailedCurrencyType.Unknown; if (value.is_blockchain) type = DetailedCurrencyType.Blockchain; if (value.is_fiat) type = DetailedCurrencyType.Fiat; if (value.is_stablecoin) type = DetailedCurrencyType.Stablecoin; const currency = { code: code, name: value.name || '', decimals: value.decimals || 0, type, }; if (Object.prototype.hasOwnProperty.call(value, 'url')) currency.url = value.url; accumulator[code] = currency; } return accumulator; }, {}); }; exports.toCurrencies = toCurrencies; /** * Convert backend API result to library result object to return in * {@link Store.getExchangeRates} method result * * @param input - Backend API result * * @returns Converted result */ const toExchangeRates = (input) => { if (!Array.isArray(input)) return []; return input.map((value) => ({ source: value.source || '', target: value.target || '', rate: value.rate, isValid: value.is_valid, })); }; exports.toExchangeRates = toExchangeRates; /** * Convert backend API result to library result object to return in * {@link Client.createInvoice} method, {@link toInvoices} function * and {@link ClientEmitter} `paid` event emit * * @param input - Backend API result * * @returns Converted result */ const toInvoice = (input) => { const invoice = { id: input.invoice_id || 0, status: input.status || InvoiceStatus.Unknown, hash: input.hash || '', currencyType: input.currency_type || '', currency: input.asset || input.fiat || '', amount: input.amount || '0', isAllowComments: input.allow_comments || false, isAllowAnonymous: input.allow_anonymous || false, createdAt: new Date(input.created_at), botPayUrl: input.bot_invoice_url || '', miniAppPayUrl: input.mini_app_invoice_url || '', webAppPayUrl: input.web_app_invoice_url || '', }; if (invoice.currencyType === CurrencyType.Crypto) { invoice.currency = input.asset || ''; } if (invoice.currencyType === CurrencyType.Fiat) { invoice.currency = input.fiat || ''; } if (input.hidden_message !== undefined) invoice.hiddenMessage = input.hidden_message; if (input.paid_anonymously !== undefined) invoice.isPaidAnonymously = input.paid_anonymously; if (input.expiration_date !== undefined) invoice.expirationDate = new Date(input.expiration_date); if (input.paid_at !== undefined) invoice.paidAt = new Date(input.paid_at); if (input.description !== undefined) invoice.description = input.description; if (input.paid_btn_name !== undefined) invoice.paidBtnName = input.paid_btn_name; if (input.paid_btn_url !== undefined) invoice.paidBtnUrl = input.paid_btn_url; if (input.comment !== undefined) invoice.comment = input.comment; if (input.paid_usd_rate !== undefined) invoice.usdRate = parseFloat(input.paid_usd_rate) || 0; if (input.fee_asset !== undefined) invoice.feeAsset = input.fee_asset || ''; if (input.fee_amount !== undefined) invoice.fee = input.fee_amount || 0; if (input.accepted_assets !== undefined) invoice.acceptedAssets = input.accepted_assets; if (input.paid_asset !== undefined) invoice.paidAsset = input.paid_asset || ''; if (input.paid_amount !== undefined) invoice.paidAmount = parseFloat(input.paid_amount) || 0; if (input.paid_fiat_rate !== undefined) invoice.paidFiatRate = parseFloat(input.paid_fiat_rate) || 0; if (input.payload !== undefined) { let payload; try { payload = JSON.parse(input.payload); } catch { payload = input.payload; } invoice.payload = payload; } if (input.swap_to !== undefined) { invoice.swapTo = input.swap_to; invoice.isSwapped = input.is_swapped; if (invoice.isSwapped) { invoice.swappedUid = input.swapped_uid || ''; invoice.swappedTo = input.swapped_to || ''; invoice.swappedRate = parseFloat(input.swapped_rate) || 0; invoice.swappedOutput = input.swapped_output || ''; invoice.swappedUsdAmount = input.swapped_usd_amount || ''; invoice.swappedUsdRate = parseFloat(input.swapped_usd_rate) || 0; } } return invoice; }; exports.toInvoice = toInvoice; /** * Convert backend API result to library result object to return in * {@link Client.createCheck} method and {@link toChecks} function * * @param input - Backend API result * * @returns Converted result */ const toCheck = (input) => { const check = { id: input.check_id || 0, hash: input.hash || '', asset: input.asset || '', amount: input.amount || '0', botCheckUrl: input.bot_check_url || '', status: input.status || CheckStatus.Unknown, createdAt: new Date(input.created_at), }; if (input.activated_at !== undefined) check.activatedAt = new Date(input.activated_at); if (input.pin_to_user !== undefined && input.pin_to_user.pin_by !== undefined) { if (input.pin_to_user.pin_by === 'id' && input.pin_to_user.user_id !== undefined) { check.pinToUserId = input.pin_to_user.user_id; } if (input.pin_to_user.pin_by === 'username' && input.pin_to_user.username !== undefined) { check.pinToUsername = input.pin_to_user.username; } } return check; }; exports.toCheck = toCheck; /** * Convert backend API result to library result object to return in * {@link Client.transfer} method and {@link toTransfers} function * * @param input - Backend API result * * @returns Converted result */ const toTransfer = (input) => { const transfer = { id: input.transfer_id || 0, userId: input.user_id || 0, asset: input.asset || '', amount: input.amount || '0', status: input.status || TransferStatus.Unknown, completedAt: new Date(input.completed_at), }; if (input.spend_id !== undefined) transfer.spendId = input.spend_id; if (input.comment !== undefined) transfer.comment = input.comment; return transfer; }; exports.toTransfer = toTransfer; /** * Convert backend API result to library result object to return in * {@link Client.getInvoices} and {@link Client.getInvoicesPaginate} * methods * * @param input - Backend API result * * @returns Converted result */ const toInvoices = (input) => { let items = []; if (Array.isArray(input.items)) items = input.items.map(exports.toInvoice); return items; }; exports.toInvoices = toInvoices; /** * Convert backend API result to library result object to return in * {@link Client.getChecks} and {@link Client.getChecksPaginate} * methods * * @param input - Backend API result * * @returns Converted result */ const toChecks = (input) => { let items = []; if (Array.isArray(input.items)) items = input.items.map(exports.toCheck); return items; }; exports.toChecks = toChecks; /** * Convert backend API result to library result object to return in * {@link Client.getTransfers} and {@link Client.getTransfersPaginate} * methods * * @param input - Backend API result * * @returns Converted result */ const toTransfers = (input) => { let items = []; if (Array.isArray(input.items)) items = input.items.map(exports.toTransfer); return items; }; exports.toTransfers = toTransfers; /** * Convert backend API result to library result object to return in * {@link Client.getStats} method * * @param input - Backend API result * * @returns Converted result */ const toStats = (input) => ({ volume: input.volume || '0', conversion: input.conversion || '0', uniqueUsersCount: input.unique_users_count || 0, createdInvoiceCount: input.created_invoice_count || 0, paidInvoiceCount: input.paid_invoice_count || 0, startAt: new Date(input.start_at ? input.start_at : 0), endAt: new Date(input.end_at ? input.end_at : 0), }); exports.toStats = toStats; /** * Convert backend API result to library result object to return in * {@link Store.getMe} method * * @param input - Backend API result * * @returns Converted result */ const toMe = (input) => ({ id: input.app_id || 0, name: input.name || '', bot: input.payment_processing_bot_username || '', }); exports.toMe = toMe;