UNPKG

supertokens-website

Version:

frontend sdk for website to be used for auth solution.

86 lines (85 loc) 3.15 kB
"use strict"; /* Copyright (c) 2021, VRAI Labs and/or its affiliates. All rights reserved. * * This software is licensed under the Apache License, Version 2.0 (the * "License") as published by the Apache Software Foundation. * * You may not use this file except in compliance with the License. You may * obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations * under the License. */ Object.defineProperty(exports, "__esModule", { value: true }); var NormalisedURLPath = /** @class */ (function () { function NormalisedURLPath(url) { var _this = this; this.startsWith = function (other) { return _this.value.startsWith(other.value); }; this.appendPath = function (other) { return new NormalisedURLPath(_this.value + other.value); }; this.getAsStringDangerous = function () { return _this.value; }; this.value = normaliseURLPathOrThrowError(url); } return NormalisedURLPath; })(); exports.default = NormalisedURLPath; function normaliseURLPathOrThrowError(input) { input = input.trim(); try { if (!input.startsWith("http://") && !input.startsWith("https://")) { throw new Error("converting to proper URL"); } var urlObj = new URL(input); input = urlObj.pathname; if (input.charAt(input.length - 1) === "/") { return input.substr(0, input.length - 1); } return input; // eslint-disable-next-line no-empty } catch (err) {} // not a valid URL // If the input contains a . it means they have given a domain name. // So we try assuming that they have given a domain name + path if ( (domainGiven(input) || input.startsWith("localhost")) && !input.startsWith("http://") && !input.startsWith("https://") ) { input = "http://" + input; return normaliseURLPathOrThrowError(input); } if (input.charAt(0) !== "/") { input = "/" + input; } // at this point, we should be able to convert it into a fake URL and recursively call this function. try { // test that we can convert this to prevent an infinite loop new URL("http://example.com" + input); return normaliseURLPathOrThrowError("http://example.com" + input); } catch (err) { throw new Error("Please provide a valid URL path"); } } function domainGiven(input) { // If no dot, return false. if (input.indexOf(".") === -1 || input.startsWith("/")) { return false; } try { var url = new URL(input); return url.hostname.indexOf(".") !== -1; } catch (e) {} try { var url = new URL("http://" + input); return url.hostname.indexOf(".") !== -1; } catch (e) {} return false; }