78 lines
2 KiB
JavaScript
78 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);
|
|
});
|
|
}
|