UNPKG

@crowdin/app-project-module

Version:

Module that generates for you all common endpoints for serving standalone Crowdin App

95 lines (83 loc) 2.52 kB
if (!window.Promise) { window.Promise = Promise; } const urlParams = new URLSearchParams(window.location.search); const origin = urlParams.get('origin'); const clientId = urlParams.get('client_id'); let restParams = window.location.search; const frameData = JSON.parse(window.name); const postPromises = {}; window.addEventListener('message', handleMessage); function isJson(string) { try { JSON.parse(string); } catch (e) { return false; } return true; } function handleMessage(event) { const eventData = event.data && typeof event.data === 'string' && isJson(event.data) ? JSON.parse(event.data) : {}; if (postPromises[eventData.uid]) { if (postPromises[eventData.uid].timer) { clearTimeout(postPromises[eventData.uid].timer); } postPromises[eventData.uid].resolve(eventData.data); } } function showToast(message) { if (!!message) { const toasts = document.querySelector('crowdin-toasts'); if (toasts && toasts.pushToasts) { toasts.pushToasts([message]); } } } function catchRejection(e, message) { //session expired if (e.code && e.code === 401) { reloadLocation(); return; } //payment required if (e.code && e.code === 402 && subscriptionModal) { subscriptionLink = e.message || message; openModal(subscriptionModal); return; } showToast(e.message || message); } function checkResponse(response) { return new Promise((resolve, reject) => { if (response.status === 204) { return resolve(); } response .json() .then((res) => { if (![200, 201, 202, 304].includes(response.status)) { reject(res); } else { if (res.message) { setTimeout(() => showToast(res.message), 100); } resolve(res); } }) .catch((e) => { reject(e); }); }); } function checkOrigin() { return new Promise((resolve, reject) => { AP.getJwtToken(jwtToken => { restParams = `?origin=${origin}&client_id=${clientId}&jwtToken=${jwtToken}`; resolve(restParams); }); }); } function reloadLocation() { window.location.href = window.location.protocol + '//' + window.location.host + window.location.pathname + restParams; }