UNPKG

@fruitsjs/util

Version:

Useful utilities and tools for building Fruits Eco-Blockchain applications

70 lines 2.59 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.parseDeeplink = void 0; const typings_1 = require("./typings"); const convertHexStringToString_1 = require("./convertHexStringToString"); const convertBase64StringToString_1 = require("./convertBase64StringToString"); const MandatoryPattern = /^fruits.?(.+)?:\/\/(v.+?)\??/i; const parseDeeplink = (deeplink, encoderFormat = typings_1.EncoderFormat.Base64) => { const throwError = () => { throw new Error('Invalid deeplink: ' + deeplink); }; const decodePayload = (payload, format) => { let decoded = payload; switch (format) { case typings_1.EncoderFormat.Hexadecimal: decoded = (0, convertHexStringToString_1.convertHexStringToString)(payload); break; case typings_1.EncoderFormat.Base64: decoded = (0, convertBase64StringToString_1.convertBase64StringToString)(payload); break; case typings_1.EncoderFormat.Text: default: } try { return JSON.parse(decoded); } catch (e) { return decoded; } }; const extractQueryValue = (query, paramName) => { if (!query.startsWith(paramName + '=')) { throwError(); } return query.split('=')[1]; }; const mandatoryMatches = deeplink.match(MandatoryPattern); if (!mandatoryMatches || mandatoryMatches.length !== 3) { throwError(); } const result = { domain: mandatoryMatches[1], version: mandatoryMatches[2], action: undefined, payload: undefined, decodedPayload: undefined }; try { const startQueryString = deeplink.indexOf('?'); if (startQueryString !== -1) { const queries = deeplink.substring(startQueryString + 1).split('&'); if (queries.length >= 1) { if (queries.length > 2) { throwError(); } result.action = extractQueryValue(queries[0], 'action'); if (queries.length === 2) { result.payload = extractQueryValue(queries[1], 'payload'); result.decodedPayload = decodePayload(result.payload, encoderFormat); } } } } catch (e) { throwError(); } return result; }; exports.parseDeeplink = parseDeeplink; //# sourceMappingURL=parseDeeplink.js.map