UNPKG

@thomaschaplin/image-to-totp

Version:

image-to-totp converts qr code images to totp codes

99 lines 3.37 kB
"use strict"; var __read = (this && this.__read) || function (o, n) { var m = typeof Symbol === "function" && o[Symbol.iterator]; if (!m) return o; var i = m.call(o), r, ar = [], e; try { while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); } catch (error) { e = { error: error }; } finally { try { if (r && !r.done && (m = i["return"])) m.call(i); } finally { if (e) throw e.error; } } return ar; }; var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) { if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) { if (ar || !(i in from)) { if (!ar) ar = Array.prototype.slice.call(from, 0, i); ar[i] = from[i]; } } return to.concat(ar || Array.prototype.slice.call(from)); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.parseTotpUri = void 0; var getType = function (uri) { var regex = /.+?:\/\/(.+?)\//; var regexResult = uri.match(regex); if (!regexResult || !regexResult[1]) { return ""; } else { return regexResult[1]; } }; var getFullLabel = function (uri) { var regex = /.+?:\/\/.+?\/(.+?)(\?.+)?$/; var regexResult = uri.match(regex); if (!regexResult || !regexResult[1]) { return ""; } else { return regexResult[1]; } }; var getQueryParams = function (uri) { var regex = /.+?:\/\/.+?\/.+?\?(.*)/; var regexResult = uri.match(regex); if (!regexResult || !regexResult[1]) { return ""; } else { return regexResult[1]; } }; var checkUriLength = function (uri) { if (uri.length < 7) { throw new Error("Cannot parse the provided uri \"".concat(uri, "\". The provided uri does not meet the minimum length criteria. We received a length of \"").concat(uri.length, "\" but were expecting a length greater than \"7\".")); } }; var decodeLabel = function (label) { return decodeURIComponent(label); }; var getLabelSections = function (label) { return label.split(/: ?/); }; var generateLabel = function (labelSections, decodedLabel) { return labelSections && labelSections.length === 2 ? { issuer: labelSections[0], account: labelSections[1] } : { issuer: "", account: decodedLabel }; }; var generateQueryStrings = function (queryParams) { return new URLSearchParams(queryParams); }; var generateQuery = function (queryStrings) { return __spreadArray([], __read(queryStrings), false).reduce(function (acc, _a) { var _b = __read(_a, 2), key = _b[0], value = _b[1]; acc[key] = value; return acc; }, {}); }; var parseTotpUri = function (uri) { checkUriLength(uri); var type = getType(uri); var fullLabel = getFullLabel(uri); var queryParams = getQueryParams(uri); var decodedLabel = decodeLabel(fullLabel); var labelSections = getLabelSections(decodedLabel); var label = generateLabel(labelSections, decodedLabel); var queryStrings = generateQueryStrings(queryParams); var query = generateQuery(queryStrings); return { fullUri: uri, type: type.toLowerCase(), label: label, query: query, }; }; exports.parseTotpUri = parseTotpUri; //# sourceMappingURL=parse-totp-uri.js.map