@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
JavaScript
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;
}