79 lines
2 KiB
JavaScript
79 lines
2 KiB
JavaScript
|
const apiBaseUrl = 'https://www.transifex.com/api/2/project';
|
||
|
const resource = 'app-strings';
|
||
|
|
||
|
export function doTransifexUpload(contents, project, token, success, fail) {
|
||
|
const url = `${apiBaseUrl}/${project}/resources/`;
|
||
|
const updateUrl = `${apiBaseUrl}/${project}/resource/${resource}/content/`;
|
||
|
const headers = {
|
||
|
Authorization: `Basic ${Buffer.from(`api:${token}`).toString('base64')}`,
|
||
|
'Content-Type': 'application/json',
|
||
|
};
|
||
|
|
||
|
const req = {
|
||
|
accept_translations: true,
|
||
|
i18n_type: 'KEYVALUEJSON',
|
||
|
name: resource,
|
||
|
slug: resource,
|
||
|
content: contents,
|
||
|
};
|
||
|
|
||
|
function handleResponse(text) {
|
||
|
let json;
|
||
|
try {
|
||
|
// transifex api returns Python dicts for some reason.
|
||
|
// Any way to get the api to return valid JSON?
|
||
|
json = JSON.parse(text);
|
||
|
} catch (e) {
|
||
|
// ignore
|
||
|
}
|
||
|
|
||
|
if (success) {
|
||
|
success(json || text);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function handleError(err) {
|
||
|
if (fail) {
|
||
|
fail(err.message ? err.message : 'Could not upload strings resource to Transifex');
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// check if the resource exists
|
||
|
fetch(updateUrl, { headers })
|
||
|
.then((response) => response.json())
|
||
|
.then(() => {
|
||
|
// perform an update
|
||
|
fetch(updateUrl, {
|
||
|
method: 'PUT',
|
||
|
headers,
|
||
|
body: JSON.stringify({ content: contents }),
|
||
|
})
|
||
|
.then((response) => {
|
||
|
if (response.status !== 200 && response.status !== 201) {
|
||
|
throw new Error('failed to update transifex');
|
||
|
}
|
||
|
|
||
|
return response.text();
|
||
|
})
|
||
|
.then(handleResponse)
|
||
|
.catch(handleError);
|
||
|
})
|
||
|
.catch(() => {
|
||
|
// resource doesn't exist, create a fresh resource
|
||
|
fetch(url, {
|
||
|
method: 'POST',
|
||
|
headers,
|
||
|
body: JSON.stringify(req),
|
||
|
})
|
||
|
.then((response) => {
|
||
|
if (response.status !== 200 && response.status !== 201) {
|
||
|
throw new Error('failed to upload to transifex');
|
||
|
}
|
||
|
|
||
|
return response.text();
|
||
|
})
|
||
|
.then(handleResponse)
|
||
|
.catch(handleError);
|
||
|
});
|
||
|
}
|