@crowdin/app-project-module
Version:
Module that generates for you all common endpoints for serving standalone Crowdin App
97 lines (85 loc) • 2.65 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 && window.app?.subscriptionModal.current) {
if (window.app.subscriptionLink) {
window.app.subscriptionLink.current = e.message || message;
}
window.app.openModal(window.app.subscriptionModal.current);
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;
}