UNPKG

lnurl-pay

Version:

Client library for lnurl-pay and lightning address

95 lines (94 loc) 3.36 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.requestPayServiceParams = void 0; var tslib_1 = require("tslib"); var utils_1 = require("./utils"); var TAG_PAY_REQUEST = 'payRequest'; var requestPayServiceParams = function (_a) { return tslib_1.__awaiter(void 0, [_a], void 0, function (_b) { var url, json, params; var lnUrlOrAddress = _b.lnUrlOrAddress, _c = _b.onionAllowed, onionAllowed = _c === void 0 ? false : _c, _d = _b.fetchGet, fetchGet = _d === void 0 ? utils_1.getJson : _d; return tslib_1.__generator(this, function (_e) { switch (_e.label) { case 0: url = (0, utils_1.decodeUrlOrAddress)(lnUrlOrAddress); if (!(0, utils_1.isUrl)(url)) throw new Error('Invalid lnUrlOrAddress'); if (!onionAllowed && (0, utils_1.isOnionUrl)(url)) throw new Error('Onion requests not allowed'); return [4 /*yield*/, fetchGet({ url: url })]; case 1: json = _e.sent(); params = parseLnUrlPayServiceResponse(json); if (!params) throw new Error('Invalid pay service params'); return [2 /*return*/, params]; } }); }); }; exports.requestPayServiceParams = requestPayServiceParams; /** * Parse the ln service response to LnUrlPayServiceResponse * @method parseLnUrlPayServiceResponse * @param data object to parse * @return LnUrlPayServiceResponse */ var parseLnUrlPayServiceResponse = function (data) { if (data.tag !== TAG_PAY_REQUEST) return null; var callback = (data.callback + '').trim(); if (!(0, utils_1.isUrl)(callback)) return null; var min = (0, utils_1.checkedToSats)(Math.ceil(Number(data.minSendable || 0) / 1000)); var max = (0, utils_1.checkedToSats)(Math.floor(Number(data.maxSendable) / 1000)); if (!(min && max) || min > max) return null; var metadata; var metadataHash; try { metadata = JSON.parse(data.metadata + ''); metadataHash = (0, utils_1.sha256)(data.metadata + '', 'utf8'); } catch (_a) { metadata = []; metadataHash = (0, utils_1.sha256)('[]', 'utf8'); } var image = ''; var description = ''; var identifier = ''; for (var i = 0; i < metadata.length; i++) { var _b = metadata[i], k = _b[0], v = _b[1]; switch (k) { case 'text/plain': description = v; break; case 'text/identifier': identifier = v; break; case 'image/png;base64': case 'image/jpeg;base64': image = 'data:' + k + ',' + v; break; } } var domain; try { domain = new URL(callback).hostname; } catch (_c) { // fail silently and let domain remain undefined if callback is not a valid URL } return { callback: callback, fixed: min === max, min: min, max: max, domain: domain, metadata: metadata, metadataHash: metadataHash, identifier: identifier, description: description, image: image, commentAllowed: Number(data.commentAllowed) || 0, rawData: data, }; };