UNPKG

@crowdin/app-project-module

Version:

Module that generates for you all common endpoints for serving standalone Crowdin App

94 lines (93 loc) 5.38 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.createOrUpdateFileSnapshot = exports.getIntegrationSnapshot = exports.getCrowdinSnapshot = void 0; const types_1 = require("../types"); const storage_1 = require("../../../storage"); const defaults_1 = require("./defaults"); const files_1 = require("./files"); function getCrowdinSnapshot(config, integration, crowdinApiClient, projectId, integrationSettings) { return __awaiter(this, void 0, void 0, function* () { let files = []; if (integration.getCrowdinFiles) { const rootFolder = yield (0, defaults_1.getRootFolder)(config, integration, crowdinApiClient, projectId); files = yield integration.getCrowdinFiles(projectId, crowdinApiClient, rootFolder, integrationSettings); } return files; }); } exports.getCrowdinSnapshot = getCrowdinSnapshot; function getTreeItems(integrationData) { let files = []; if ((0, files_1.isExtendedResultType)(integrationData)) { files = integrationData.data; } else { files = integrationData; } return files; } function getOneLevelFetchingFiles(integration, integrationCredentials, integrationSettings, parentFiles) { return __awaiter(this, void 0, void 0, function* () { for (const file of parentFiles) { if (!file.type) { let childs = yield integration.getIntegrationFiles(integrationCredentials, integrationSettings, file.id, '', 0); childs = getTreeItems(childs); if (childs.length > 0) { const childFiles = yield getOneLevelFetchingFiles(integration, integrationCredentials, integrationSettings, childs); parentFiles = [...parentFiles, ...childFiles]; } } } return parentFiles; }); } function getIntegrationSnapshot(integration, integrationCredentials, integrationSettings) { var _a; return __awaiter(this, void 0, void 0, function* () { let files = []; let integrationData = []; integrationData = yield integration.getIntegrationFiles(integrationCredentials, integrationSettings, '', '', 0); files = getTreeItems(integrationData); if (integration.integrationOneLevelFetching) { files = yield getOneLevelFetchingFiles(integration, integrationCredentials, integrationSettings, files); } if ((integrationSettings === null || integrationSettings === void 0 ? void 0 : integrationSettings.skipIntegrationNodesToggle) === true || ((integrationSettings === null || integrationSettings === void 0 ? void 0 : integrationSettings.skipIntegrationNodesToggle) === null && ((_a = integration.skipIntegrationNodesToggle) === null || _a === void 0 ? void 0 : _a.value))) { files = (0, files_1.skipFilesByRegex)(files, integration.skipIntegrationNodes); } // trick for compatibility in requests and set files files = files.map((file) => (Object.assign(Object.assign({}, file), { parentId: file.parent_id || file.parentId, parent_id: file.parent_id || file.parentId, node_type: file.nodeType || file.node_type }))); return files; }); } exports.getIntegrationSnapshot = getIntegrationSnapshot; function createOrUpdateFileSnapshot(config, integration, req, provider) { return __awaiter(this, void 0, void 0, function* () { let files = []; const existingSnapshot = yield (0, storage_1.getStorage)().getFilesSnapshot(req.crowdinContext.clientId, req.crowdinContext.crowdinId, provider); if (provider === types_1.Provider.CROWDIN) { files = yield getCrowdinSnapshot(config, integration, req.crowdinApiClient, req.crowdinContext.jwtPayload.context.project_id, req.integrationSettings); } if (provider === types_1.Provider.INTEGRATION) { files = yield getIntegrationSnapshot(integration, req.integrationCredentials, req.integrationSettings); } if (existingSnapshot) { req.logInfo(`Updating file snapshot for provider ${provider} ${JSON.stringify(files, null, 2)}`); yield (0, storage_1.getStorage)().updateFilesSnapshot(JSON.stringify(files), req.crowdinContext.clientId, req.crowdinContext.crowdinId, provider); } else { req.logInfo(`Saving file snapshot for provider ${provider} ${JSON.stringify(files, null, 2)}`); yield (0, storage_1.getStorage)().saveFilesSnapshot(JSON.stringify(files), req.crowdinContext.clientId, req.crowdinContext.crowdinId, provider); } }); } exports.createOrUpdateFileSnapshot = createOrUpdateFileSnapshot;