* fix: integrate certificate and dictionary files to Crowdin * fix: correct linting issue * fix: improved the isReserveredHeading function
		
			
				
	
	
		
			123 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			123 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
const makeRequest = require('./make-request');
 | 
						|
const authHeader = require('./auth-header');
 | 
						|
 | 
						|
const addFile = async (projectId, filename, fileContent, directoryId) => {
 | 
						|
  let headers = { ...authHeader };
 | 
						|
  headers['Crowdin-API-FileName'] = filename;
 | 
						|
  const endPoint = `storages`;
 | 
						|
  const contentType = 'application/text';
 | 
						|
  const body = fileContent;
 | 
						|
  const storageResponse = await makeRequest({
 | 
						|
    method: 'post',
 | 
						|
    contentType,
 | 
						|
    endPoint,
 | 
						|
    headers,
 | 
						|
    body
 | 
						|
  });
 | 
						|
  if (storageResponse.data) {
 | 
						|
    const fileBody = {
 | 
						|
      storageId: storageResponse.data.id,
 | 
						|
      name: filename,
 | 
						|
      directoryId
 | 
						|
    };
 | 
						|
    const fileResponse = await makeRequest({
 | 
						|
      method: 'post',
 | 
						|
      endPoint: `projects/${projectId}/files`,
 | 
						|
      headers,
 | 
						|
      body: fileBody
 | 
						|
    });
 | 
						|
    if (fileResponse.data) {
 | 
						|
      return fileResponse.data;
 | 
						|
    } else {
 | 
						|
      console.log('error');
 | 
						|
      console.dir(fileResponse, { depth: null, colors: true });
 | 
						|
    }
 | 
						|
  }
 | 
						|
  return null;
 | 
						|
};
 | 
						|
 | 
						|
const updateFile = async (projectId, fileId, fileContent) => {
 | 
						|
  let headers = { ...authHeader };
 | 
						|
  const endPoint = `storages`;
 | 
						|
  const contentType = 'application/text';
 | 
						|
  const body = fileContent;
 | 
						|
  const storageResponse = await makeRequest({
 | 
						|
    method: 'post',
 | 
						|
    contentType,
 | 
						|
    endPoint,
 | 
						|
    headers,
 | 
						|
    body
 | 
						|
  });
 | 
						|
  if (storageResponse.data) {
 | 
						|
    const fileBody = {
 | 
						|
      storageId: storageResponse.data.id
 | 
						|
    };
 | 
						|
    const fileResponse = await makeRequest({
 | 
						|
      method: 'put',
 | 
						|
      endPoint: `projects/${projectId}/files${fileId}`,
 | 
						|
      headers,
 | 
						|
      body: fileBody
 | 
						|
    });
 | 
						|
    if (fileResponse.data) {
 | 
						|
      return fileResponse.data;
 | 
						|
    } else {
 | 
						|
      console.log('error');
 | 
						|
      console.dir(fileResponse, { depth: null, colors: true });
 | 
						|
    }
 | 
						|
  }
 | 
						|
  return null;
 | 
						|
};
 | 
						|
 | 
						|
const deleteFile = async (projectId, fileId, filePath) => {
 | 
						|
  let headers = { ...authHeader };
 | 
						|
  const endPoint = `projects/${projectId}/files/${fileId}`;
 | 
						|
  await makeRequest({
 | 
						|
    method: 'delete',
 | 
						|
    endPoint,
 | 
						|
    headers
 | 
						|
  });
 | 
						|
  console.log(`Deleted ${filePath} from Crowdin project`);
 | 
						|
  return null;
 | 
						|
};
 | 
						|
 | 
						|
const getFiles = async projectId => {
 | 
						|
  let headers = { ...authHeader };
 | 
						|
  let done = false;
 | 
						|
  let offset = 0;
 | 
						|
  let files = [];
 | 
						|
  while (!done) {
 | 
						|
    const endPoint = `projects/${projectId}/files?limit=500&offset=${offset}`;
 | 
						|
    const response = await makeRequest({
 | 
						|
      method: 'get',
 | 
						|
      endPoint,
 | 
						|
      headers
 | 
						|
    });
 | 
						|
    if (response.data) {
 | 
						|
      if (response.data.length) {
 | 
						|
        files = [...files, ...response.data];
 | 
						|
        offset += 500;
 | 
						|
      } else {
 | 
						|
        done = true;
 | 
						|
        files = files.map(({ data: { directoryId, id: fileId, path } }) => {
 | 
						|
          // remove leading forwardslash
 | 
						|
          path = path.slice(1);
 | 
						|
          return { directoryId, fileId, path };
 | 
						|
        });
 | 
						|
        return files;
 | 
						|
      }
 | 
						|
    } else {
 | 
						|
      const { error } = response;
 | 
						|
      console.log(error.errorcode);
 | 
						|
      console.log(error.messsage);
 | 
						|
    }
 | 
						|
  }
 | 
						|
  return null;
 | 
						|
};
 | 
						|
 | 
						|
module.exports = {
 | 
						|
  addFile,
 | 
						|
  updateFile,
 | 
						|
  deleteFile,
 | 
						|
  getFiles
 | 
						|
};
 |