"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.stripLastSlash = exports.assertBeeUrl = exports.isValidBeeUrl = void 0; const error_1 = require("./error"); const type_1 = require("./type"); function isNodeJsError(e) { return (0, type_1.isObject)(e) && typeof e.code === 'string'; } /** * Validates that passed string is valid URL of Bee. * We support only HTTP and HTTPS protocols. * * @param url */ function isValidBeeUrl(url) { try { if (typeof url !== 'string') { return false; } const urlObject = new URL(url); // There can be wide range of protocols passed. return urlObject.protocol === 'http:' || urlObject.protocol === 'https:'; } catch (e) { // URL constructor throws TypeError if not valid URL // TODO: Drop the `.code` hack for NodeJS environment: https://github.com/ethersphere/bee-js/issues/204 if (e instanceof TypeError || (isNodeJsError(e) && e.code === 'ERR_INVALID_URL')) { return false; } throw e; } } exports.isValidBeeUrl = isValidBeeUrl; /** * Validates that passed string is valid URL of Bee, if not it throws BeeArgumentError. * We support only HTTP and HTTPS protocols. * @param url * @throws BeeArgumentError if non valid URL */ function assertBeeUrl(url) { if (!isValidBeeUrl(url)) { throw new error_1.BeeArgumentError('URL is not valid!', url); } } exports.assertBeeUrl = assertBeeUrl; /** * Removes trailing slash out of the given string. * @param url */ function stripLastSlash(url) { if (url.endsWith('/')) { return url.slice(0, -1); } return url; } exports.stripLastSlash = stripLastSlash;