UNPKG

@crowdin/app-project-module

Version:

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

93 lines (92 loc) 5.9 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 }); const util_1 = require("../../../util"); const logger_1 = require("../../../util/logger"); const files_1 = require("../util/files"); const types_1 = require("../types"); const storage_1 = require("../../../storage"); function handle(integration) { return (0, util_1.runAsyncWrapper)((req, res) => __awaiter(this, void 0, void 0, function* () { var _a, _b, _c, _d, _e, _f, _g, _h; const { parent_id: parentId, search, page } = req.query; req.logInfo('Received request to get integration data'); let message; let stopPagination; let files = []; const { crowdinId, clientId } = req.crowdinContext; try { const appSettings = req.integrationSettings; const result = yield integration.getIntegrationFiles(req.integrationCredentials, appSettings, parentId, search, page); if ((0, files_1.isExtendedResultType)(result)) { files = result.data || []; message = result.message; stopPagination = result.stopPagination; } else { files = result || []; } files = (0, files_1.skipFilesByRegex)(files, integration.skipIntegrationNodes); if (integration.filterByPathIntegrationFiles) { const includePatterns = (_a = appSettings === null || appSettings === void 0 ? void 0 : appSettings.includeByFilePath) === null || _a === void 0 ? void 0 : _a.split('\n').filter(Boolean); const excludePatterns = (_b = appSettings === null || appSettings === void 0 ? void 0 : appSettings.excludeByFilePath) === null || _b === void 0 ? void 0 : _b.split('\n').filter(Boolean); files = (0, files_1.filterFilesByPath)(files, includePatterns, excludePatterns); } if (((_d = (_c = integration.filtering) === null || _c === void 0 ? void 0 : _c.integrationFileStatus) === null || _d === void 0 ? void 0 : _d.isNew) || ((_f = (_e = integration.filtering) === null || _e === void 0 ? void 0 : _e.integrationFileStatus) === null || _f === void 0 ? void 0 : _f.isUpdated) || ((_h = (_g = integration.filtering) === null || _g === void 0 ? void 0 : _g.integrationFileStatus) === null || _h === void 0 ? void 0 : _h.notSynced)) { const syncedData = yield (0, storage_1.getStorage)().getSyncedData(clientId, crowdinId, types_1.Provider.INTEGRATION); const syncedFiles = (syncedData === null || syncedData === void 0 ? void 0 : syncedData.files) ? JSON.parse(syncedData.files) : []; const lastSyncTimestamp = (syncedData === null || syncedData === void 0 ? void 0 : syncedData.updatedAt) ? Number(syncedData.updatedAt) : null; files = files.map((file) => { var _a, _b, _c, _d, _e, _f; if (!file.type) { return file; } const notSynced = ((_b = (_a = integration.filtering) === null || _a === void 0 ? void 0 : _a.integrationFileStatus) === null || _b === void 0 ? void 0 : _b.notSynced) === true ? !syncedFiles.some((syncedItem) => syncedItem.id === file.id) : false; const isNew = ((_d = (_c = integration.filtering) === null || _c === void 0 ? void 0 : _c.integrationFileStatus) === null || _d === void 0 ? void 0 : _d.isNew) === true ? !syncedFiles.some((syncedItem) => syncedItem.id === file.id) && lastSyncTimestamp && file.createdAt && (typeof file.createdAt === 'string' ? new Date(file.createdAt).getTime() : file.createdAt) > Number(lastSyncTimestamp) : false; const isUpdated = ((_f = (_e = integration.filtering) === null || _e === void 0 ? void 0 : _e.integrationFileStatus) === null || _f === void 0 ? void 0 : _f.isUpdated) === true ? lastSyncTimestamp && file.updatedAt && (typeof file.updatedAt === 'string' ? new Date(file.updatedAt).getTime() : file.updatedAt) > Number(lastSyncTimestamp) : false; return Object.assign(Object.assign({}, file), { isNew, notSynced, isUpdated }); }); } } catch (e) { yield (0, logger_1.handleUserError)({ action: 'Get External Service data', error: e, crowdinId, clientId, }); res.send({ data: [], message: (e === null || e === void 0 ? void 0 : e.message) || e }); throw e; } req.logInfo(`Integration data response ${JSON.stringify(files, null, 2)}`); res.send({ data: files, message, stopPagination }); })); } exports.default = handle;