@crowdin/app-project-module
Version:
Module that generates for you all common endpoints for serving standalone Crowdin App
113 lines (112 loc) • 5.72 kB
JavaScript
;
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());
});
};
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 crowdinAppFunctions = __importStar(require("@crowdin/crowdin-apps-functions"));
function handle(config, integration) {
return (0, util_1.runAsyncWrapper)((req, res) => __awaiter(this, void 0, void 0, function* () {
var _a, _b, _c;
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) {
const { userId } = crowdinAppFunctions.parseCrowdinId(req.crowdinContext.clientId);
options.hasOrganization = !!req.crowdinContext.jwtPayload.domain;
options.isOwner = req.integrationCredentials.ownerId === userId;
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 = configurationFields;
logger(`Adding configuration fields ${JSON.stringify(configurationFields, null, 2)}`);
}
options.infoModal = integration.infoModal;
options.syncNewElements = integration.syncNewElements;
options.filtering = integration.filtering;
options.withCronSync = integration.withCronSync;
options.webhooks = integration.webhooks
? {
crowdin: true,
integration: !!integration.webhooks.integrationWebhookInterceptor,
}
: {};
options.integrationOneLevelFetching = integration.integrationOneLevelFetching;
options.integrationSearchListener = integration.integrationSearchListener;
options.checkSubscription = !(0, subscription_1.isAppFree)(config);
options.uploadTranslations = integration.uploadTranslations;
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: ((_c = integration.asyncProgress) === null || _c === void 0 ? void 0 : _c.checkInterval) || 1000,
};
logger(`Routing user to ${view} view`);
return res.render(view, options);
}));
}
exports.default = handle;