@crowdin/app-project-module
Version:
Module that generates for you all common endpoints for serving standalone Crowdin App
258 lines (257 loc) • 14.4 kB
JavaScript
"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
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());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.register = void 0;
const cron = __importStar(require("node-cron"));
const crowdin_client_1 = __importDefault(require("../../middlewares/crowdin-client"));
const integration_credentials_1 = __importDefault(require("../../middlewares/integration-credentials"));
const json_response_1 = __importDefault(require("../../middlewares/json-response"));
const util_1 = require("../../util");
const defaults_1 = require("./util/defaults");
const webhooks_1 = require("./util/webhooks");
const crowdin_file_progress_1 = __importDefault(require("./handlers/crowdin-file-progress"));
const crowdin_files_1 = __importDefault(require("./handlers/crowdin-files"));
const crowdin_project_1 = __importDefault(require("./handlers/crowdin-project"));
const crowdin_update_1 = __importDefault(require("./handlers/crowdin-update"));
const crowdin_webhook_1 = __importDefault(require("./handlers/crowdin-webhook"));
const integration_data_1 = __importDefault(require("./handlers/integration-data"));
const integration_login_1 = __importDefault(require("./handlers/integration-login"));
const integration_logout_1 = __importDefault(require("./handlers/integration-logout"));
const integration_update_1 = __importDefault(require("./handlers/integration-update"));
const integration_webhook_1 = __importDefault(require("./handlers/integration-webhook"));
const job_cancel_1 = __importDefault(require("./handlers/job-cancel"));
const job_info_deprecated_1 = __importDefault(require("./handlers/job-info-deprecated"));
const job_info_1 = __importDefault(require("./handlers/job-info"));
const job_list_1 = __importDefault(require("./handlers/job-list"));
const main_1 = __importDefault(require("./handlers/main"));
const oauth_login_1 = __importDefault(require("./handlers/oauth-login"));
const oauth_url_1 = __importDefault(require("./handlers/oauth-url"));
const oauth_polling_1 = __importDefault(require("./handlers/oauth-polling"));
const settings_save_1 = __importDefault(require("./handlers/settings-save"));
const subscription_info_1 = __importDefault(require("./handlers/subscription-info"));
const sync_settings_1 = __importDefault(require("./handlers/sync-settings"));
const sync_settings_save_1 = __importDefault(require("./handlers/sync-settings-save"));
const user_errors_1 = __importDefault(require("./handlers/user-errors"));
const users_1 = __importDefault(require("./handlers/users"));
const invite_users_1 = __importDefault(require("./handlers/invite-users"));
const cron_1 = require("./util/cron");
const storage_1 = require("../../storage");
function register({ config, app }) {
var _a, _b, _c;
const integrationLogic = config.projectIntegration;
if (!integrationLogic) {
return;
}
(0, defaults_1.applyIntegrationModuleDefaults)(config, integrationLogic);
app.get((0, util_1.getLogoUrl)(integrationLogic, '/integration'), (req, res) => res.sendFile(integrationLogic.imagePath || config.imagePath));
app.get('/', (0, crowdin_client_1.default)({
config,
optional: true,
checkSubscriptionExpiration: false,
moduleKey: integrationLogic.key,
}), (0, integration_credentials_1.default)(config, integrationLogic, true), (0, main_1.default)(config, integrationLogic));
app.get('/api/subscription-info', json_response_1.default, (0, crowdin_client_1.default)({
config,
optional: false,
checkSubscriptionExpiration: true,
moduleKey: integrationLogic.key,
}), (0, subscription_info_1.default)(config));
app.get('/api/all-jobs', json_response_1.default, (0, crowdin_client_1.default)({
config,
optional: false,
checkSubscriptionExpiration: true,
moduleKey: integrationLogic.key,
}), (0, job_list_1.default)());
app.get('/api/job-info', json_response_1.default, (0, crowdin_client_1.default)({
config,
optional: false,
checkSubscriptionExpiration: true,
moduleKey: integrationLogic.key,
}), (0, job_info_1.default)());
app.get('/api/jobs', json_response_1.default, (0, crowdin_client_1.default)({
config,
optional: false,
checkSubscriptionExpiration: true,
moduleKey: integrationLogic.key,
}), (0, job_info_deprecated_1.default)(config));
app.delete('/api/jobs', json_response_1.default, (0, crowdin_client_1.default)({
config,
optional: false,
checkSubscriptionExpiration: true,
moduleKey: integrationLogic.key,
}), (0, job_cancel_1.default)());
app.post('/api/settings', (0, crowdin_client_1.default)({
config,
optional: false,
checkSubscriptionExpiration: true,
moduleKey: integrationLogic.key,
}), (0, integration_credentials_1.default)(config, integrationLogic), (0, settings_save_1.default)(config, integrationLogic));
app.post('/api/login', (0, crowdin_client_1.default)({
config,
optional: false,
checkSubscriptionExpiration: false,
moduleKey: integrationLogic.key,
}), (0, integration_login_1.default)(config, integrationLogic));
app.post('/api/logout', (0, crowdin_client_1.default)({
config,
optional: false,
checkSubscriptionExpiration: false,
moduleKey: integrationLogic.key,
}), (0, integration_credentials_1.default)(config, integrationLogic), (0, integration_logout_1.default)(config, integrationLogic));
app.get('/api/crowdin/files', json_response_1.default, (0, crowdin_client_1.default)({
config,
optional: false,
checkSubscriptionExpiration: true,
moduleKey: integrationLogic.key,
}), (0, integration_credentials_1.default)(config, integrationLogic), (0, crowdin_files_1.default)(config, integrationLogic));
app.get('/api/crowdin/project', json_response_1.default, (0, crowdin_client_1.default)({
config,
optional: false,
checkSubscriptionExpiration: true,
moduleKey: integrationLogic.key,
}), (0, crowdin_project_1.default)());
app.get('/api/crowdin/file-progress/:fileId', (0, crowdin_client_1.default)({
config,
optional: false,
checkSubscriptionExpiration: true,
moduleKey: integrationLogic.key,
}), (0, crowdin_file_progress_1.default)(integrationLogic));
app.get('/api/integration/data', json_response_1.default, (0, crowdin_client_1.default)({
config,
optional: false,
checkSubscriptionExpiration: true,
moduleKey: integrationLogic.key,
}), (0, integration_credentials_1.default)(config, integrationLogic), (0, integration_data_1.default)(integrationLogic));
app.post('/api/crowdin/update', json_response_1.default, (0, crowdin_client_1.default)({
config,
optional: false,
checkSubscriptionExpiration: true,
moduleKey: integrationLogic.key,
}), (0, integration_credentials_1.default)(config, integrationLogic), (0, crowdin_update_1.default)(config, integrationLogic));
app.post('/api/integration/update', json_response_1.default, (0, crowdin_client_1.default)({
config,
optional: false,
checkSubscriptionExpiration: true,
moduleKey: integrationLogic.key,
}), (0, integration_credentials_1.default)(config, integrationLogic), (0, integration_update_1.default)(config, integrationLogic));
app.get('/api/sync-settings/:provider', json_response_1.default, (0, crowdin_client_1.default)({
config,
optional: false,
checkSubscriptionExpiration: true,
moduleKey: integrationLogic.key,
}), (0, integration_credentials_1.default)(config, integrationLogic), (0, sync_settings_1.default)());
app.post('/api/sync-settings', json_response_1.default, (0, crowdin_client_1.default)({
config,
optional: false,
checkSubscriptionExpiration: true,
moduleKey: integrationLogic.key,
}), (0, integration_credentials_1.default)(config, integrationLogic), (0, sync_settings_save_1.default)(config, integrationLogic));
if (integrationLogic.oauthLogin) {
app.get((0, defaults_1.getOauthRoute)(integrationLogic), (0, oauth_login_1.default)(config, integrationLogic));
app.post('/api/oauth-url', json_response_1.default, (0, crowdin_client_1.default)({
config,
optional: false,
checkSubscriptionExpiration: false,
moduleKey: integrationLogic.key,
}), (0, oauth_url_1.default)(config, integrationLogic));
if (integrationLogic.oauthLogin.mode === 'polling') {
app.post('/api/oauth-polling', json_response_1.default, (0, crowdin_client_1.default)({
config,
optional: false,
checkSubscriptionExpiration: false,
moduleKey: integrationLogic.key,
}), (0, oauth_polling_1.default)(config, integrationLogic));
}
}
if (integrationLogic.cronJobs) {
integrationLogic.cronJobs.forEach((job) => {
cron.schedule(job.expression, () => (0, cron_1.runJob)({ config, integration: integrationLogic, job }).catch(console.error));
});
}
if (integrationLogic.withCronSync) {
cron.schedule('0 * * * *', () => (0, cron_1.filesCron)({ config, integration: integrationLogic, period: '1' }).catch(console.error));
cron.schedule('0 */3 * * *', () => (0, cron_1.filesCron)({ config, integration: integrationLogic, period: '3' }).catch(console.error));
cron.schedule('0 */6 * * *', () => (0, cron_1.filesCron)({ config, integration: integrationLogic, period: '6' }).catch(console.error));
cron.schedule('0 */12 * * *', () => (0, cron_1.filesCron)({ config, integration: integrationLogic, period: '12' }).catch(console.error));
cron.schedule('0 0 * * *', () => (0, cron_1.filesCron)({ config, integration: integrationLogic, period: '24' }).catch(console.error));
}
// remove user errors
cron.schedule('0 0 * * *', () => __awaiter(this, void 0, void 0, function* () {
if (integrationLogic.userErrorLifetimeDays) {
const date = (0, util_1.getPreviousDate)(integrationLogic.userErrorLifetimeDays);
yield (0, storage_1.getStorage)().deleteAllUsersErrorsOlderThan(`${date.getTime()}`);
}
}));
if (integrationLogic.webhooks) {
app.post(`${integrationLogic.webhooks.crowdinWebhookUrl
? integrationLogic.webhooks.crowdinWebhookUrl
: '/api/crowdin/webhook'}`, json_response_1.default, (0, crowdin_webhook_1.default)(config, integrationLogic));
if (((_a = integrationLogic.webhooks) === null || _a === void 0 ? void 0 : _a.integrationWebhookInterceptor) && !((_b = integrationLogic.webhooks) === null || _b === void 0 ? void 0 : _b.queueUrl)) {
app.post(`${integrationLogic.webhooks.integrationWebhookUrl
? integrationLogic.webhooks.integrationWebhookUrl
: '/api/integration/webhook'}`, (0, integration_webhook_1.default)(config, integrationLogic));
}
if ((_c = integrationLogic.webhooks) === null || _c === void 0 ? void 0 : _c.queueUrl) {
(0, webhooks_1.listenQueueMessage)({
config,
integration: integrationLogic,
queueUrl: integrationLogic.webhooks.queueUrl,
queueName: config.identifier,
});
}
}
app.get('/api/user-errors', json_response_1.default, (0, crowdin_client_1.default)({
config,
optional: false,
checkSubscriptionExpiration: true,
moduleKey: integrationLogic.key,
}), (0, integration_credentials_1.default)(config, integrationLogic), (0, user_errors_1.default)());
app.get('/api/users', json_response_1.default, (0, crowdin_client_1.default)({
config,
optional: false,
checkSubscriptionExpiration: true,
moduleKey: integrationLogic.key,
}), (0, integration_credentials_1.default)(config, integrationLogic), (0, users_1.default)());
app.post('/api/invite-users', json_response_1.default, (0, crowdin_client_1.default)({
config,
optional: false,
checkSubscriptionExpiration: true,
moduleKey: integrationLogic.key,
}), (0, integration_credentials_1.default)(config, integrationLogic), (0, invite_users_1.default)());
cron.schedule('0 0 1 * *', () => (0, cron_1.removeFinishedJobs)());
}
exports.register = register;