"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); const Sphinx = require("sphinx-bot"); const actions_1 = require("../controllers/actions"); const node_fetch_1 = require("node-fetch"); const path = require("path"); var validate = require('bitcoin-address-validation'); const msg_types = Sphinx.MSG_TYPE; // /home/ec2-user/.lnd/data/chain/bitcoin/mainnet/admin.macaroon let initted = false; const baseurl = 'https://localhost:8080'; function init() { if (initted) return; initted = true; const client = new Sphinx.Client(); client.login('_', actions_1.finalAction); client.on(msg_types.MESSAGE, (message) => __awaiter(this, void 0, void 0, function* () { const arr = message.content.split(' '); if (arr.length < 2) return; if (arr[0] !== '/loopout') return; if (arr.length === 3) { // loop const addy = arr[1]; if (!validate(addy)) { const embed = new Sphinx.MessageEmbed() .setAuthor('LoopBot') .setDescription('Invalid BTC address'); message.channel.send({ embed }); return; } const amt = arr[2]; if (!validateAmount(amt)) { const embed = new Sphinx.MessageEmbed() .setAuthor('LoopBot') .setDescription('Invalid amount'); message.channel.send({ embed }); return; } if (message.amount !== parseInt(amt)) { const embed = new Sphinx.MessageEmbed() .setAuthor('LoopBot') .setDescription('Incorrect amount'); message.channel.send({ embed }); return; } try { const j = yield doRequest(baseurl + '/v1/loop/out/quote/' + amt); console.log("=> LOOP QUOTE RES", j); if (!(j && j.swap_fee && j.prepay_amt)) { return; } const j2 = yield doRequest(baseurl + '/v1/loop/out', { method: 'POST', body: JSON.stringify({ amt: amt, dest: addy, outgoing_chan_set: [ '704899103684034561' ], max_swap_fee: j.swap_fee, max_prepay_amt: j.prepay_amt }), }); console.log("=> LOOP RESPONSE", j2); if (j2 && j2.error) { const embed = new Sphinx.MessageEmbed() .setAuthor('LoopBot') .setDescription('Error: ' + j2.error); message.channel.send({ embed }); return; } if (!(j2 && j2.server_message)) { return; } const embed = new Sphinx.MessageEmbed() .setAuthor('LoopBot') .setTitle('Loop Initialized!') .setDescription('Success!'); message.channel.send({ embed }); return; } catch (e) { console.log('LoopBot error', e); } } const cmd = arr[1]; switch (cmd) { case 'help': const embed = new Sphinx.MessageEmbed() .setAuthor('LoopBot') .setTitle('LoopBot Commands:') .addFields([ { name: 'Send to your on-chain address', value: '/loopout {ADDRESS} {AMOUNT}' }, { name: 'Help', value: '/loopout help' } ]) .setThumbnail(botSVG); message.channel.send({ embed }); return; default: const embed2 = new Sphinx.MessageEmbed() .setAuthor('LoopBot') .setDescription('Command not recognized'); message.channel.send({ embed: embed2 }); return; } })); } exports.init = init; const botSVG = ` `; function validateAmount(amtString) { const amt = parseInt(amtString); const ok = amt > 0; return ok; } const fs = require('fs'); const https = require("https"); // const homedir = require('os').homedir(); const agent = new https.Agent({ rejectUnauthorized: false }); const env = process.env.NODE_ENV || 'development'; const config = require(path.join(__dirname, '../../config/app.json'))[env]; function doRequest(theurl, params) { return __awaiter(this, void 0, void 0, function* () { const ps = params || {}; try { var macaroonString = fs.readFileSync(config.macaroon_location); var mac = Buffer.from(macaroonString, 'utf8').toString('hex'); const theParams = Object.assign({ agent, headers: { 'Grpc-Metadata-macaroon': mac } }, ps); const r = yield node_fetch_1.default(theurl, theParams); const j = yield r.json(); return j; } catch (e) { throw e; } }); } //# sourceMappingURL=loop.js.map