@crowdin/app-project-module
Version:
Module that generates for you all common endpoints for serving standalone Crowdin App
101 lines (100 loc) • 5.43 kB
JavaScript
;
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 subscription_1 = require("../../../util/subscription");
const defaults_1 = require("../util/defaults");
const users_1 = require("./users");
function handle(config, integration) {
return (0, util_1.runAsyncWrapper)((req, res) => __awaiter(this, void 0, void 0, function* () {
var _a, _b, _c, _d;
const logger = req.logInfo || logger_1.log;
const installed = !!req.crowdinApiClient;
const loggedIn = !!req.integrationCredentials;
const options = {
name: config.name,
};
let view = 'main';
if (!installed) {
view = 'install';
}
else if (!loggedIn) {
view = 'login';
options.loginFields = (_a = integration.loginForm) === null || _a === void 0 ? void 0 : _a.fields;
if (integration.oauthLogin) {
options.loginFields = integration.oauthLogin.loginFields || [];
options.oauthUrl = (0, defaults_1.constructOauthUrl)({
config,
integration,
clientId: req.crowdinContext.clientId,
});
options.oauthLogin = true;
options.oauthMode = integration.oauthLogin.mode;
}
}
else {
if (integration.getConfiguration) {
options.config = JSON.stringify(req.integrationSettings || {});
options.reloadOnConfigSave = !!integration.reloadOnConfigSave;
options.integrationPagination = integration.integrationPagination;
if ((_b = req.query) === null || _b === void 0 ? void 0 : _b.parentUrl) {
const parentUrl = new URL(req.query.parentUrl);
parentUrl.searchParams.set('zen-mode', 'true');
options.zenModeUrl = parentUrl.toString();
}
const configurationFields = yield integration.getConfiguration(req.crowdinContext.jwtPayload.context.project_id, req.crowdinApiClient, req.integrationCredentials);
options.configurationFields = (0, defaults_1.groupFieldsByCategory)(configurationFields);
logger(`Adding configuration fields ${JSON.stringify(options.configurationFields, null, 2)}`);
}
options.hasOrganization = !!req.crowdinContext.jwtPayload.domain;
const userId = req.crowdinContext.jwtPayload.context.user_id;
options.isOwner = req.integrationCredentials.ownerId === userId;
options.userId = userId;
options.isManager = yield (0, users_1.isManager)({
client: req.crowdinApiClient,
projectId: req.crowdinContext.jwtPayload.context.project_id,
memberId: userId,
});
}
options.infoModal = integration.infoModal;
options.syncNewElements = integration.syncNewElements;
options.filtering = Object.assign(Object.assign({}, integration.filtering), { integrationFilterConfig: JSON.stringify(((_c = integration.filtering) === null || _c === void 0 ? void 0 : _c.integrationFilterConfig) || []) });
options.withCronSync = integration.withCronSync;
options.webhooks = integration.webhooks
? {
crowdin: true,
integration: !!integration.webhooks.integrationWebhookInterceptor,
}
: {};
options.integrationOneLevelFetching = integration.integrationOneLevelFetching;
options.integrationSearchListener = integration.integrationSearchListener;
options.progressiveCrowdinFilesLoading = integration.progressiveCrowdinFilesLoading;
options.checkSubscription = !(0, subscription_1.isAppFree)(config);
options.uploadTranslations = integration.uploadTranslations;
options.forcePushTranslations = integration.forcePushTranslations;
options.forcePushSources = integration.forcePushSources;
options.excludedTargetLanguages = integration.excludedTargetLanguages;
options.sentryData = process.env.SENTRY_DSN
? {
dsn: process.env.SENTRY_DSN,
appIdentifier: config.identifier,
}
: null;
options.notice = integration.notice;
options.asyncProgress = {
checkInterval: ((_d = integration.asyncProgress) === null || _d === void 0 ? void 0 : _d.checkInterval) || 1000,
};
logger(`Routing user to ${view} view`);
return res.render(view, options);
}));
}
exports.default = handle;