diff --git a/packages/core/utils/constants.js b/packages/core/utils/constants.js index 033b92f39..db37ee579 100644 --- a/packages/core/utils/constants.js +++ b/packages/core/utils/constants.js @@ -1,3 +1,5 @@ +import { extractHostname } from "./hostname"; + const hosts = { API_HOST: process.env.NODE_ENV === "production" @@ -22,3 +24,16 @@ const hosts = { }; export default hosts; + +export const getServerNameFromHost = (host) => { + const names = { + [extractHostname(hosts.API_HOST)]: "Notesnook Sync Server", + [extractHostname(hosts.AUTH_HOST)]: "Authentication Server", + [extractHostname(hosts.SSE_HOST)]: "Eventing Server", + [extractHostname(hosts.SUBSCRIPTIONS_HOST)]: + "Subscriptions Management Server", + [extractHostname(hosts.ISSUES_HOST)]: "Bug Reporting Server", + }; + console.log(names, host); + return names[host]; +}; diff --git a/packages/core/utils/hostname.js b/packages/core/utils/hostname.js new file mode 100644 index 000000000..f9f04de62 --- /dev/null +++ b/packages/core/utils/hostname.js @@ -0,0 +1,17 @@ +export function extractHostname(url) { + var hostname; + //find & remove protocol (http, ftp, etc.) and get hostname + + if (url.indexOf("//") > -1) { + hostname = url.split("/")[2]; + } else { + hostname = url.split("/")[0]; + } + + //find & remove port number + // hostname = hostname.split(":")[0]; + //find & remove "?" + hostname = hostname.split("?")[0]; + + return hostname; +} diff --git a/packages/core/utils/http.js b/packages/core/utils/http.js index c167fefc9..aca3b1e8f 100644 --- a/packages/core/utils/http.js +++ b/packages/core/utils/http.js @@ -1,4 +1,6 @@ import { EV, EVENTS } from "../common"; +import { getServerNameFromHost } from "./constants"; +import { extractHostname } from "./hostname"; function get(url, token) { return request(url, token, "GET"); @@ -73,7 +75,7 @@ async function handleResponse(response) { async function request(url, token, method) { return handleResponse( - await fetch(url, { + await fetchWrapped(url, { method, headers: getAuthorizationHeader(token), }) @@ -88,7 +90,7 @@ async function bodyRequest( contentType = "application/x-www-form-urlencoded" ) { return handleResponse( - await fetch(url, { + await fetchWrapped(url, { method, body: transformer(data, contentType), headers: { @@ -126,6 +128,27 @@ function errorTransformer(errorJson) { } } +/** + * + * @param {RequestInfo} input + * @param {RequestInit} init + */ +async function fetchWrapped(input, init) { + try { + const response = await fetch(input, init); + return response; + } catch (e) { + const host = extractHostname(input); + const serverName = getServerNameFromHost(host); + if (serverName) + throw new Error( + `${serverName} is not responding. Please check your internet connection. If the problem persists, feel free email us at support@streetwriters.co. (Reference error: ${e.message})` + ); + + throw e; + } +} + // /** // * // * @param {RequestInfo} resource