@crowdin/app-project-module 0.43.0 → 0.44.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (152) hide show
  1. package/out/index.d.ts +1 -1
  2. package/out/index.js +57 -166
  3. package/out/middlewares/integration-credentials.d.ts +2 -1
  4. package/out/middlewares/ui-module.d.ts +2 -2
  5. package/out/middlewares/ui-module.js +4 -0
  6. package/out/models/index.d.ts +52 -698
  7. package/out/models/index.js +2 -26
  8. package/out/modules/context-menu/index.d.ts +6 -0
  9. package/out/modules/context-menu/index.js +17 -0
  10. package/out/{handlers/custom-mt → modules/custom-mt/handlers}/translate.d.ts +2 -1
  11. package/out/{handlers/custom-mt → modules/custom-mt/handlers}/translate.js +2 -2
  12. package/out/modules/custom-mt/index.d.ts +6 -0
  13. package/out/modules/custom-mt/index.js +17 -0
  14. package/out/modules/custom-mt/types.d.ts +22 -0
  15. package/out/modules/custom-mt/types.js +2 -0
  16. package/out/{handlers/custom-spell-check → modules/custom-spell-check/handlers}/get-languages-list.d.ts +2 -1
  17. package/out/{handlers/custom-spell-check → modules/custom-spell-check/handlers}/get-languages-list.js +2 -2
  18. package/out/{handlers/custom-spell-check → modules/custom-spell-check/handlers}/spell-check.d.ts +2 -1
  19. package/out/{handlers/custom-spell-check → modules/custom-spell-check/handlers}/spell-check.js +5 -3
  20. package/out/modules/custom-spell-check/index.d.ts +6 -0
  21. package/out/modules/custom-spell-check/index.js +32 -0
  22. package/out/modules/custom-spell-check/types.d.ts +56 -0
  23. package/out/modules/custom-spell-check/types.js +2 -0
  24. package/out/modules/editor-right-panel/index.d.ts +6 -0
  25. package/out/modules/editor-right-panel/index.js +17 -0
  26. package/out/modules/editor-right-panel/types.d.ts +7 -0
  27. package/out/modules/editor-right-panel/types.js +2 -0
  28. package/out/modules/editor-themes/index.d.ts +6 -0
  29. package/out/modules/editor-themes/index.js +11 -0
  30. package/out/{handlers/file-processing → modules/file-processing/handlers}/custom-file-format.d.ts +2 -1
  31. package/out/{handlers/file-processing → modules/file-processing/handlers}/custom-file-format.js +5 -5
  32. package/out/modules/file-processing/handlers/file-download.d.ts +5 -0
  33. package/out/{handlers/file-processing → modules/file-processing/handlers}/file-download.js +2 -2
  34. package/out/{handlers/file-processing → modules/file-processing/handlers}/pre-post-process.d.ts +2 -1
  35. package/out/{handlers/file-processing → modules/file-processing/handlers}/pre-post-process.js +8 -8
  36. package/out/modules/file-processing/index.d.ts +22 -0
  37. package/out/modules/file-processing/index.js +57 -0
  38. package/out/modules/file-processing/types.d.ts +133 -0
  39. package/out/modules/file-processing/types.js +12 -0
  40. package/out/{handlers/integration/crowdin-project.d.ts → modules/form-data-display.d.ts} +1 -1
  41. package/out/modules/form-data-save.d.ts +4 -0
  42. package/out/{handlers/integration → modules/integration/handlers}/crowdin-file-progress.d.ts +2 -1
  43. package/out/{handlers/integration → modules/integration/handlers}/crowdin-file-progress.js +2 -2
  44. package/out/modules/integration/handlers/crowdin-files.d.ts +5 -0
  45. package/out/{handlers/integration → modules/integration/handlers}/crowdin-files.js +3 -3
  46. package/out/modules/integration/handlers/crowdin-project.d.ts +4 -0
  47. package/out/{handlers/integration → modules/integration/handlers}/crowdin-project.js +1 -1
  48. package/out/modules/integration/handlers/crowdin-update.d.ts +5 -0
  49. package/out/{handlers/integration → modules/integration/handlers}/crowdin-update.js +6 -6
  50. package/out/modules/integration/handlers/crowdin-webhook.d.ts +5 -0
  51. package/out/{handlers/integration → modules/integration/handlers}/crowdin-webhook.js +7 -7
  52. package/out/modules/integration/handlers/integration-data.d.ts +4 -0
  53. package/out/{handlers/integration → modules/integration/handlers}/integration-data.js +4 -4
  54. package/out/{handlers/integration → modules/integration/handlers}/integration-login.d.ts +2 -1
  55. package/out/{handlers/integration → modules/integration/handlers}/integration-login.js +3 -3
  56. package/out/modules/integration/handlers/integration-logout.d.ts +5 -0
  57. package/out/{handlers/integration → modules/integration/handlers}/integration-logout.js +5 -5
  58. package/out/modules/integration/handlers/integration-update.d.ts +5 -0
  59. package/out/{handlers/integration → modules/integration/handlers}/integration-update.js +5 -5
  60. package/out/modules/integration/handlers/integration-webhook.d.ts +5 -0
  61. package/out/{handlers/integration → modules/integration/handlers}/integration-webhook.js +4 -4
  62. package/out/modules/integration/handlers/job-cancel.d.ts +3 -0
  63. package/out/{handlers/integration → modules/integration/handlers}/job-cancel.js +3 -3
  64. package/out/modules/integration/handlers/job-info.d.ts +3 -0
  65. package/out/{handlers/integration → modules/integration/handlers}/job-info.js +3 -3
  66. package/out/modules/integration/handlers/main.d.ts +5 -0
  67. package/out/{handlers/integration → modules/integration/handlers}/main.js +4 -4
  68. package/out/modules/integration/handlers/oauth-login.d.ts +5 -0
  69. package/out/{handlers/integration → modules/integration/handlers}/oauth-login.js +3 -3
  70. package/out/{handlers/integration → modules/integration/handlers}/oauth-url.d.ts +2 -1
  71. package/out/{handlers/integration → modules/integration/handlers}/oauth-url.js +2 -2
  72. package/out/modules/integration/handlers/settings-save.d.ts +5 -0
  73. package/out/{handlers/integration → modules/integration/handlers}/settings-save.js +10 -10
  74. package/out/modules/integration/handlers/settings.d.ts +3 -0
  75. package/out/{handlers/integration → modules/integration/handlers}/settings.js +1 -1
  76. package/out/{handlers/integration → modules/integration/handlers}/subscription-info.d.ts +1 -1
  77. package/out/{handlers/integration → modules/integration/handlers}/subscription-info.js +1 -1
  78. package/out/modules/integration/handlers/sync-settings-save.d.ts +5 -0
  79. package/out/{handlers/integration → modules/integration/handlers}/sync-settings-save.js +5 -5
  80. package/out/modules/integration/handlers/sync-settings.d.ts +3 -0
  81. package/out/{handlers/integration → modules/integration/handlers}/sync-settings.js +2 -2
  82. package/out/modules/integration/handlers/user-errors.d.ts +3 -0
  83. package/out/{handlers/integration → modules/integration/handlers}/user-errors.js +2 -2
  84. package/out/modules/integration/index.d.ts +6 -0
  85. package/out/modules/integration/index.js +113 -0
  86. package/out/modules/integration/types.d.ts +446 -0
  87. package/out/modules/integration/types.js +19 -0
  88. package/out/modules/manifest.d.ts +3 -0
  89. package/out/{handlers → modules}/manifest.js +16 -10
  90. package/out/modules/modal/index.d.ts +6 -0
  91. package/out/modules/modal/index.js +17 -0
  92. package/out/modules/organization-menu/index.d.ts +6 -0
  93. package/out/modules/organization-menu/index.js +19 -0
  94. package/out/modules/profile-resources-menu/index.d.ts +6 -0
  95. package/out/modules/profile-resources-menu/index.js +19 -0
  96. package/out/modules/project-menu/index.d.ts +6 -0
  97. package/out/modules/project-menu/index.js +17 -0
  98. package/out/modules/project-menu-crowdsource/index.d.ts +6 -0
  99. package/out/modules/project-menu-crowdsource/index.js +17 -0
  100. package/out/modules/project-reports/index.d.ts +6 -0
  101. package/out/modules/project-reports/index.js +19 -0
  102. package/out/modules/project-tools/index.d.ts +6 -0
  103. package/out/modules/project-tools/index.js +19 -0
  104. package/out/storage/index.d.ts +3 -2
  105. package/out/storage/mysql.d.ts +2 -1
  106. package/out/storage/mysql.js +1 -1
  107. package/out/storage/postgre.d.ts +2 -1
  108. package/out/storage/postgre.js +9 -7
  109. package/out/storage/sqlite.d.ts +2 -1
  110. package/out/util/api/api.d.ts +2 -2
  111. package/out/util/api/api.js +10 -10
  112. package/out/util/connection.d.ts +3 -2
  113. package/out/util/cron.d.ts +2 -1
  114. package/out/util/cron.js +6 -6
  115. package/out/util/defaults.d.ts +5 -2
  116. package/out/util/defaults.js +13 -3
  117. package/out/util/file-snapshot.d.ts +2 -1
  118. package/out/util/file-snapshot.js +5 -5
  119. package/out/util/files.d.ts +2 -1
  120. package/out/util/index.d.ts +2 -1
  121. package/out/util/logger.d.ts +2 -2
  122. package/out/util/webhooks.d.ts +2 -1
  123. package/out/util/webhooks.js +5 -5
  124. package/package.json +1 -1
  125. package/out/handlers/file-processing/file-download.d.ts +0 -4
  126. package/out/handlers/form-data-display.d.ts +0 -3
  127. package/out/handlers/form-data-save.d.ts +0 -3
  128. package/out/handlers/integration/crowdin-files.d.ts +0 -4
  129. package/out/handlers/integration/crowdin-update.d.ts +0 -4
  130. package/out/handlers/integration/crowdin-webhook.d.ts +0 -4
  131. package/out/handlers/integration/integration-data.d.ts +0 -4
  132. package/out/handlers/integration/integration-logout.d.ts +0 -4
  133. package/out/handlers/integration/integration-update.d.ts +0 -4
  134. package/out/handlers/integration/integration-webhook.d.ts +0 -4
  135. package/out/handlers/integration/job-cancel.d.ts +0 -3
  136. package/out/handlers/integration/job-info.d.ts +0 -3
  137. package/out/handlers/integration/main.d.ts +0 -4
  138. package/out/handlers/integration/oauth-login.d.ts +0 -4
  139. package/out/handlers/integration/settings-save.d.ts +0 -4
  140. package/out/handlers/integration/settings.d.ts +0 -3
  141. package/out/handlers/integration/sync-settings-save.d.ts +0 -4
  142. package/out/handlers/integration/sync-settings.d.ts +0 -3
  143. package/out/handlers/integration/user-errors.d.ts +0 -3
  144. package/out/handlers/manifest.d.ts +0 -3
  145. /package/out/{handlers → modules}/form-data-display.js +0 -0
  146. /package/out/{handlers → modules}/form-data-save.js +0 -0
  147. /package/out/{handlers → modules}/install.d.ts +0 -0
  148. /package/out/{handlers → modules}/install.js +0 -0
  149. /package/out/{handlers → modules}/subscription-paid.d.ts +0 -0
  150. /package/out/{handlers → modules}/subscription-paid.js +0 -0
  151. /package/out/{handlers → modules}/uninstall.d.ts +0 -0
  152. /package/out/{handlers → modules}/uninstall.js +0 -0
package/out/index.d.ts CHANGED
@@ -4,5 +4,5 @@ import express from './util/terminus-express';
4
4
  export { ProjectPermissions, Scope, UserPermissions } from './models';
5
5
  export { express };
6
6
  export declare const metadataStore: CrowdinMetadataStore;
7
- export declare function addCrowdinEndpoints(app: Express, clientConfig: Config | ClientConfig): CrowdinAppUtilities;
7
+ export declare function addCrowdinEndpoints(app: Express, clientConfig: Config | ClientConfig): Partial<CrowdinAppUtilities>;
8
8
  export declare function createApp(clientConfig: ClientConfig): void;
package/out/index.js CHANGED
@@ -38,61 +38,43 @@ Object.defineProperty(exports, "__esModule", { value: true });
38
38
  exports.createApp = exports.addCrowdinEndpoints = exports.metadataStore = exports.express = exports.UserPermissions = exports.Scope = exports.ProjectPermissions = void 0;
39
39
  const logsFormatter = __importStar(require("@crowdin/logs-formatter"));
40
40
  const express_handlebars_1 = __importDefault(require("express-handlebars"));
41
- const cron = __importStar(require("node-cron"));
42
41
  const path_1 = require("path");
43
- const translate_1 = __importDefault(require("./handlers/custom-mt/translate"));
44
- const custom_file_format_1 = __importDefault(require("./handlers/file-processing/custom-file-format"));
45
- const file_download_1 = __importDefault(require("./handlers/file-processing/file-download"));
46
- const pre_post_process_1 = __importDefault(require("./handlers/file-processing/pre-post-process"));
47
- const form_data_display_1 = __importDefault(require("./handlers/form-data-display"));
48
- const form_data_save_1 = __importDefault(require("./handlers/form-data-save"));
49
- const install_1 = __importDefault(require("./handlers/install"));
50
- const crowdin_file_progress_1 = __importDefault(require("./handlers/integration/crowdin-file-progress"));
51
- const crowdin_files_1 = __importDefault(require("./handlers/integration/crowdin-files"));
52
- const crowdin_project_1 = __importDefault(require("./handlers/integration/crowdin-project"));
53
- const crowdin_update_1 = __importDefault(require("./handlers/integration/crowdin-update"));
54
- const crowdin_webhook_1 = __importDefault(require("./handlers/integration/crowdin-webhook"));
55
- const integration_data_1 = __importDefault(require("./handlers/integration/integration-data"));
56
- const integration_login_1 = __importDefault(require("./handlers/integration/integration-login"));
57
- const integration_logout_1 = __importDefault(require("./handlers/integration/integration-logout"));
58
- const integration_update_1 = __importDefault(require("./handlers/integration/integration-update"));
59
- const integration_webhook_1 = __importDefault(require("./handlers/integration/integration-webhook"));
60
- const main_1 = __importDefault(require("./handlers/integration/main"));
61
- const oauth_login_1 = __importDefault(require("./handlers/integration/oauth-login"));
62
- const oauth_url_1 = __importDefault(require("./handlers/integration/oauth-url"));
63
- const settings_save_1 = __importDefault(require("./handlers/integration/settings-save"));
64
- const subscription_info_1 = __importDefault(require("./handlers/integration/subscription-info"));
65
- const job_info_1 = __importDefault(require("./handlers/integration/job-info"));
66
- const job_cancel_1 = __importDefault(require("./handlers/integration/job-cancel"));
67
- const sync_settings_1 = __importDefault(require("./handlers/integration/sync-settings"));
68
- const sync_settings_save_1 = __importDefault(require("./handlers/integration/sync-settings-save"));
69
- const user_errors_1 = __importDefault(require("./handlers/integration/user-errors"));
70
- const manifest_1 = __importDefault(require("./handlers/manifest"));
71
- const subscription_paid_1 = __importDefault(require("./handlers/subscription-paid"));
72
- const uninstall_1 = __importDefault(require("./handlers/uninstall"));
73
- const get_languages_list_1 = __importDefault(require("./handlers/custom-spell-check/get-languages-list"));
74
- const spell_check_1 = __importDefault(require("./handlers/custom-spell-check/spell-check"));
75
42
  const crowdin_client_1 = __importStar(require("./middlewares/crowdin-client"));
76
- const integration_credentials_1 = __importDefault(require("./middlewares/integration-credentials"));
77
43
  const json_response_1 = __importDefault(require("./middlewares/json-response"));
78
- const render_ui_module_1 = __importDefault(require("./middlewares/render-ui-module"));
79
- const ui_module_1 = __importDefault(require("./middlewares/ui-module"));
80
- const models_1 = require("./models");
44
+ const form_data_display_1 = __importDefault(require("./modules/form-data-display"));
45
+ const form_data_save_1 = __importDefault(require("./modules/form-data-save"));
46
+ const install_1 = __importDefault(require("./modules/install"));
47
+ const manifest_1 = __importDefault(require("./modules/manifest"));
48
+ const subscription_paid_1 = __importDefault(require("./modules/subscription-paid"));
49
+ const uninstall_1 = __importDefault(require("./modules/uninstall"));
81
50
  const storage = __importStar(require("./storage"));
82
51
  const util_1 = require("./util");
83
52
  const api_1 = require("./util/api/api");
84
53
  const connection_1 = require("./util/connection");
85
- const cron_1 = require("./util/cron");
86
54
  const defaults_1 = require("./util/defaults");
87
55
  const logger = __importStar(require("./util/logger"));
88
56
  const logger_1 = require("./util/logger");
89
57
  const terminus_express_1 = __importDefault(require("./util/terminus-express"));
90
58
  exports.express = terminus_express_1.default;
91
- const webhooks_1 = require("./util/webhooks");
92
- var models_2 = require("./models");
93
- Object.defineProperty(exports, "ProjectPermissions", { enumerable: true, get: function () { return models_2.ProjectPermissions; } });
94
- Object.defineProperty(exports, "Scope", { enumerable: true, get: function () { return models_2.Scope; } });
95
- Object.defineProperty(exports, "UserPermissions", { enumerable: true, get: function () { return models_2.UserPermissions; } });
59
+ //apps
60
+ const contextMenuApp = __importStar(require("./modules/context-menu"));
61
+ const customMTApp = __importStar(require("./modules/custom-mt"));
62
+ const spellCheckApp = __importStar(require("./modules/custom-spell-check"));
63
+ const editorRightPanelApp = __importStar(require("./modules/editor-right-panel"));
64
+ const editorThemesApp = __importStar(require("./modules/editor-themes"));
65
+ const fileProcessingApps = __importStar(require("./modules/file-processing"));
66
+ const integrationApp = __importStar(require("./modules/integration"));
67
+ const modalApp = __importStar(require("./modules/modal"));
68
+ const organizationMenuApp = __importStar(require("./modules/organization-menu"));
69
+ const profileResourcesMenuApp = __importStar(require("./modules/profile-resources-menu"));
70
+ const projectMenuApp = __importStar(require("./modules/project-menu"));
71
+ const projectMenuCrowdsourceApp = __importStar(require("./modules/project-menu-crowdsource"));
72
+ const projectReportsApp = __importStar(require("./modules/project-reports"));
73
+ const projectToolsApp = __importStar(require("./modules/project-tools"));
74
+ var models_1 = require("./models");
75
+ Object.defineProperty(exports, "ProjectPermissions", { enumerable: true, get: function () { return models_1.ProjectPermissions; } });
76
+ Object.defineProperty(exports, "Scope", { enumerable: true, get: function () { return models_1.Scope; } });
77
+ Object.defineProperty(exports, "UserPermissions", { enumerable: true, get: function () { return models_1.UserPermissions; } });
96
78
  exports.metadataStore = {
97
79
  getMetadata: (id) => {
98
80
  return storage.getStorage().getMetadata(id);
@@ -117,7 +99,6 @@ exports.metadataStore = {
117
99
  }),
118
100
  };
119
101
  function addCrowdinEndpoints(app, clientConfig) {
120
- var _a, _b, _c, _d, _e, _f, _g;
121
102
  const config = (0, defaults_1.convertClientConfig)(clientConfig);
122
103
  if (!config.disableGlobalErrorHandling) {
123
104
  handleUncaughtErrors();
@@ -161,139 +142,49 @@ function addCrowdinEndpoints(app, clientConfig) {
161
142
  }));
162
143
  app.set('view engine', 'handlebars');
163
144
  app.get((0, util_1.getLogoUrl)(), (req, res) => res.sendFile(config.imagePath));
164
- app.post('/installed', (0, install_1.default)(config));
165
- app.post('/uninstall', (0, uninstall_1.default)(config));
166
145
  app.get('/manifest.json', json_response_1.default, (0, manifest_1.default)(config));
167
146
  if (!(0, connection_1.isAppFree)(config)) {
168
147
  app.post('/subscription-paid', (0, subscription_paid_1.default)());
169
148
  }
170
- const integrationLogic = config.projectIntegration;
171
- if (integrationLogic) {
172
- (0, defaults_1.applyIntegrationModuleDefaults)(config, integrationLogic);
173
- app.get((0, util_1.getLogoUrl)(integrationLogic, '/integration'), (req, res) => res.sendFile(integrationLogic.imagePath || config.imagePath));
174
- app.get('/', (0, crowdin_client_1.default)(config, true, false), (0, integration_credentials_1.default)(config, integrationLogic, true), (0, main_1.default)(config, integrationLogic));
175
- app.get('/api/subscription-info', json_response_1.default, (0, crowdin_client_1.default)(config), (0, subscription_info_1.default)(config));
176
- app.get('/api/jobs', json_response_1.default, (0, crowdin_client_1.default)(config), (0, job_info_1.default)());
177
- app.delete('/api/jobs', json_response_1.default, (0, crowdin_client_1.default)(config), (0, job_cancel_1.default)());
178
- app.post('/api/settings', (0, crowdin_client_1.default)(config), (0, integration_credentials_1.default)(config, integrationLogic), (0, settings_save_1.default)(config, integrationLogic));
179
- app.post('/api/login', (0, crowdin_client_1.default)(config, false, false), (0, integration_login_1.default)(config, integrationLogic));
180
- app.post('/api/logout', (0, crowdin_client_1.default)(config, false, false), (0, integration_credentials_1.default)(config, integrationLogic), (0, integration_logout_1.default)(config, integrationLogic));
181
- app.get('/api/crowdin/files', json_response_1.default, (0, crowdin_client_1.default)(config), (0, integration_credentials_1.default)(config, integrationLogic), (0, crowdin_files_1.default)(config, integrationLogic));
182
- app.get('/api/crowdin/project', json_response_1.default, (0, crowdin_client_1.default)(config), (0, crowdin_project_1.default)());
183
- app.get('/api/crowdin/file-progress/:fileId', (0, crowdin_client_1.default)(config), (0, crowdin_file_progress_1.default)(integrationLogic));
184
- app.get('/api/integration/data', json_response_1.default, (0, crowdin_client_1.default)(config), (0, integration_credentials_1.default)(config, integrationLogic), (0, integration_data_1.default)(integrationLogic));
185
- app.post('/api/crowdin/update', json_response_1.default, (0, crowdin_client_1.default)(config), (0, integration_credentials_1.default)(config, integrationLogic), (0, crowdin_update_1.default)(config, integrationLogic));
186
- app.post('/api/integration/update', json_response_1.default, (0, crowdin_client_1.default)(config), (0, integration_credentials_1.default)(config, integrationLogic), (0, integration_update_1.default)(config, integrationLogic));
187
- app.get('/api/sync-settings/:provider', json_response_1.default, (0, crowdin_client_1.default)(config), (0, integration_credentials_1.default)(config, integrationLogic), (0, sync_settings_1.default)());
188
- app.post('/api/sync-settings', json_response_1.default, (0, crowdin_client_1.default)(config), (0, integration_credentials_1.default)(config, integrationLogic), (0, sync_settings_save_1.default)(config, integrationLogic));
189
- if (integrationLogic.oauthLogin) {
190
- app.get((0, defaults_1.getOauthRoute)(integrationLogic), (0, oauth_login_1.default)(config, integrationLogic));
191
- app.post('/api/oauth-url', json_response_1.default, (0, crowdin_client_1.default)(config, false, false), (0, oauth_url_1.default)(config, integrationLogic));
192
- }
193
- if (integrationLogic.cronJobs) {
194
- integrationLogic.cronJobs.forEach((job) => {
195
- cron.schedule(job.expression, () => (0, cron_1.runJob)(config, integrationLogic, job).catch(console.error));
196
- });
197
- }
198
- if (integrationLogic.withCronSync) {
199
- cron.schedule('0 * * * *', () => (0, cron_1.filesCron)(config, integrationLogic, '1').catch(console.error));
200
- cron.schedule('0 */3 * * *', () => (0, cron_1.filesCron)(config, integrationLogic, '3').catch(console.error));
201
- cron.schedule('0 */6 * * *', () => (0, cron_1.filesCron)(config, integrationLogic, '6').catch(console.error));
202
- cron.schedule('0 */12 * * *', () => (0, cron_1.filesCron)(config, integrationLogic, '12').catch(console.error));
203
- cron.schedule('0 0 * * *', () => (0, cron_1.filesCron)(config, integrationLogic, '24').catch(console.error));
204
- }
205
- if (integrationLogic.webhooks) {
206
- app.post(`${integrationLogic.webhooks.crowdinWebhookUrl
207
- ? integrationLogic.webhooks.crowdinWebhookUrl
208
- : '/api/crowdin/webhook'}`, json_response_1.default, (0, crowdin_webhook_1.default)(config, integrationLogic));
209
- if (((_a = integrationLogic.webhooks) === null || _a === void 0 ? void 0 : _a.integrationWebhookInterceptor) && !((_b = integrationLogic.webhooks) === null || _b === void 0 ? void 0 : _b.queueUrl)) {
210
- app.post(`${integrationLogic.webhooks.integrationWebhookUrl
211
- ? integrationLogic.webhooks.integrationWebhookUrl
212
- : '/api/integration/webhook'}`, (0, integration_webhook_1.default)(config, integrationLogic));
213
- }
214
- if ((_c = integrationLogic.webhooks) === null || _c === void 0 ? void 0 : _c.queueUrl) {
215
- (0, webhooks_1.listenQueueMessage)(config, integrationLogic, integrationLogic.webhooks.queueUrl, config.identifier);
216
- }
217
- }
218
- app.get('/api/user-errors', json_response_1.default, (0, crowdin_client_1.default)(config), (0, integration_credentials_1.default)(config, integrationLogic), (0, user_errors_1.default)());
219
- cron.schedule('0 0 1 * *', () => (0, cron_1.removeFinishedJobs)());
220
- }
221
- if (config.customFileFormat) {
222
- (0, defaults_1.applyFileProcessorsModuleDefaults)(config, config.customFileFormat);
223
- app.post('/process', (0, crowdin_client_1.default)(config), (0, custom_file_format_1.default)(config.baseUrl, config.customFileFormat.filesFolder || config.dbFolder, config.customFileFormat));
224
- app.get('/file/download', (0, file_download_1.default)(config, config.customFileFormat, 'custom-file-format'));
225
- }
226
- if (config.filePreImport) {
227
- (0, defaults_1.applyFileProcessorsModuleDefaults)(config, config.filePreImport);
228
- app.post('/pre-import', (0, crowdin_client_1.default)(config), (0, pre_post_process_1.default)(config, config.filePreImport, models_1.ProcessFileJobType.PRE_IMPORT));
229
- app.get(`/file/download/${models_1.ProcessFileJobType.PRE_IMPORT}`, (0, file_download_1.default)(config, config.filePreImport, models_1.ProcessFileJobType.PRE_IMPORT));
230
- }
231
- if (config.filePostImport) {
232
- (0, defaults_1.applyFileProcessorsModuleDefaults)(config, config.filePostImport);
233
- app.post('/post-import', (0, crowdin_client_1.default)(config), (0, pre_post_process_1.default)(config, config.filePostImport, models_1.ProcessFileJobType.POST_IMPORT));
234
- app.get(`/file/download/${models_1.ProcessFileJobType.POST_IMPORT}`, (0, file_download_1.default)(config, config.filePostImport, models_1.ProcessFileJobType.POST_IMPORT));
235
- }
236
- if (config.filePreExport) {
237
- (0, defaults_1.applyFileProcessorsModuleDefaults)(config, config.filePreExport);
238
- app.post('/pre-export', (0, crowdin_client_1.default)(config), (0, pre_post_process_1.default)(config, config.filePreExport, models_1.ProcessFileJobType.PRE_EXPORT));
239
- app.get(`/file/download/${models_1.ProcessFileJobType.PRE_EXPORT}`, (0, file_download_1.default)(config, config.filePreExport, models_1.ProcessFileJobType.PRE_EXPORT));
240
- }
241
- if (config.filePostExport) {
242
- (0, defaults_1.applyFileProcessorsModuleDefaults)(config, config.filePostExport);
243
- app.post('/post-export', (0, crowdin_client_1.default)(config), (0, pre_post_process_1.default)(config, config.filePostExport, models_1.ProcessFileJobType.POST_EXPORT));
244
- app.get(`/file/download/${models_1.ProcessFileJobType.POST_EXPORT}`, (0, file_download_1.default)(config, config.filePostExport, models_1.ProcessFileJobType.POST_EXPORT));
245
- }
246
- if (config.customMT) {
247
- app.get((0, util_1.getLogoUrl)(config.customMT, '/mt'), (req, res) => { var _a; return res.sendFile(((_a = config.customMT) === null || _a === void 0 ? void 0 : _a.imagePath) || config.imagePath); });
248
- app.post('/translate', (0, crowdin_client_1.default)(config), (0, translate_1.default)(config.customMT));
249
- }
250
- if (config.profileResourcesMenu) {
251
- app.get((0, util_1.getLogoUrl)(config.profileResourcesMenu, '/resources'), (req, res) => { var _a; return res.sendFile(((_a = config.profileResourcesMenu) === null || _a === void 0 ? void 0 : _a.imagePath) || config.imagePath); });
252
- app.use('/resources', (0, ui_module_1.default)(config, config.profileResourcesMenu.allowUnauthorized), (0, render_ui_module_1.default)(config.profileResourcesMenu));
253
- }
254
- if (config.organizationMenu) {
255
- app.get((0, util_1.getLogoUrl)(config.organizationMenu, '/resources'), (req, res) => { var _a; return res.sendFile(((_a = config.organizationMenu) === null || _a === void 0 ? void 0 : _a.imagePath) || config.imagePath); });
256
- app.use('/resources', (0, ui_module_1.default)(config, config.organizationMenu.allowUnauthorized), (0, render_ui_module_1.default)(config.organizationMenu));
257
- }
258
- if (config.editorRightPanel) {
259
- app.use('/editor-panels', (0, ui_module_1.default)(config, config.editorRightPanel.allowUnauthorized), (0, render_ui_module_1.default)(config.editorRightPanel));
260
- }
261
- if (config.editorThemes) {
262
- app.get((0, util_1.getLogoUrl)(config.editorThemes, '/editor-themes'), (req, res) => { var _a; return res.sendFile(((_a = config.editorThemes) === null || _a === void 0 ? void 0 : _a.imagePath) || config.imagePath); });
263
- }
264
- if (config.projectMenu) {
265
- app.use('/project-menu', (0, ui_module_1.default)(config, config.projectMenu.allowUnauthorized), (0, render_ui_module_1.default)(config.projectMenu));
266
- }
267
- if (config.projectMenuCrowdsource) {
268
- app.use('/project-menu-crowdsource', (0, ui_module_1.default)(config, config.projectMenuCrowdsource.allowUnauthorized), (0, render_ui_module_1.default)(config.projectMenuCrowdsource));
269
- }
270
- if (config.projectTools) {
271
- app.get((0, util_1.getLogoUrl)(config.projectTools, '/tools'), (req, res) => { var _a; return res.sendFile(((_a = config.projectTools) === null || _a === void 0 ? void 0 : _a.imagePath) || config.imagePath); });
272
- app.use('/tools', (0, ui_module_1.default)(config, config.projectTools.allowUnauthorized), (0, render_ui_module_1.default)(config.projectTools));
273
- }
274
- if (config.projectReports) {
275
- app.get((0, util_1.getLogoUrl)(config.projectReports, '/reports'), (req, res) => { var _a; return res.sendFile(((_a = config.projectReports) === null || _a === void 0 ? void 0 : _a.imagePath) || config.imagePath); });
276
- app.use('/reports', (0, ui_module_1.default)(config, config.projectReports.allowUnauthorized), (0, render_ui_module_1.default)(config.projectReports));
277
- }
278
- if (((_d = config.modal) === null || _d === void 0 ? void 0 : _d.uiPath) || ((_e = config.modal) === null || _e === void 0 ? void 0 : _e.formSchema)) {
279
- app.use('/modal', (0, ui_module_1.default)(config, config.modal.allowUnauthorized), (0, render_ui_module_1.default)(config.modal));
280
- }
281
- if (((_f = config.contextMenu) === null || _f === void 0 ? void 0 : _f.uiPath) || ((_g = config.contextMenu) === null || _g === void 0 ? void 0 : _g.formSchema)) {
282
- app.use('/context', (0, ui_module_1.default)(config, config.contextMenu.allowUnauthorized), (0, render_ui_module_1.default)(config.contextMenu));
149
+ spellCheckApp.register({ config, app });
150
+ editorRightPanelApp.register({ config, app });
151
+ projectMenuApp.register({ config, app });
152
+ profileResourcesMenuApp.register({ config, app });
153
+ organizationMenuApp.register({ config, app });
154
+ projectMenuCrowdsourceApp.register({ config, app });
155
+ projectToolsApp.register({ config, app });
156
+ projectReportsApp.register({ config, app });
157
+ modalApp.register({ config, app });
158
+ contextMenuApp.register({ config, app });
159
+ //other apps only work in authorized context
160
+ if (!(0, defaults_1.isAuthorizedConfig)(config)) {
161
+ return {};
283
162
  }
163
+ app.post('/installed', (0, install_1.default)(config));
164
+ app.post('/uninstall', (0, uninstall_1.default)(config));
165
+ /**
166
+ * Module structure
167
+ * /modules
168
+ * /<module-name>
169
+ * index.ts -> registration
170
+ * types.ts -> types, interfaces, etc
171
+ * /util -> folder for utilities # TODO needs to be done
172
+ * /handlers -> for http handlers
173
+ */
174
+ integrationApp.register({ config, app });
175
+ editorThemesApp.register({ config, app });
176
+ customMTApp.register({ config, app });
177
+ fileProcessingApps.registerCustomFileFormat({ config, app });
178
+ fileProcessingApps.registerFilePreImport({ config, app });
179
+ fileProcessingApps.registerFilePostImport({ config, app });
180
+ fileProcessingApps.registerFilePreExport({ config, app });
181
+ fileProcessingApps.registerFilePostExport({ config, app });
284
182
  if (config.api) {
285
183
  if (config.api.default) {
286
184
  (0, api_1.addDefaultApiEndpoints)(app, config);
287
185
  }
288
186
  (0, api_1.addSwagerApiDocumentation)(app, config);
289
187
  }
290
- if (config.customSpellchecker) {
291
- if (config.customSpellchecker.settingsUiModule) {
292
- app.use('/settings', (0, ui_module_1.default)(config, config.customSpellchecker.settingsUiModule.allowUnauthorized), (0, render_ui_module_1.default)(config.customSpellchecker.settingsUiModule));
293
- }
294
- app.get('/languages', json_response_1.default, (0, crowdin_client_1.default)(config), (0, get_languages_list_1.default)(config.customSpellchecker));
295
- app.post('/spellcheck', json_response_1.default, (0, crowdin_client_1.default)(config), (0, spell_check_1.default)(config.customSpellchecker));
296
- }
297
188
  if (Object.keys(config).some((moduleKey) => {
298
189
  const moduleConfig = config[moduleKey];
299
190
  return typeof moduleConfig === 'object' && moduleConfig.hasOwnProperty('formSchema');
@@ -1,4 +1,5 @@
1
1
  /// <reference types="qs" />
2
2
  import { Response } from 'express';
3
- import { Config, IntegrationLogic } from '../models';
3
+ import { Config } from '../models';
4
+ import { IntegrationLogic } from '../modules/integration/types';
4
5
  export default function handle(config: Config, integration: IntegrationLogic, optional?: boolean): (req: import("../models").CrowdinClientRequest | import("express").Request<import("express-serve-static-core").ParamsDictionary, any, any, import("qs").ParsedQs, Record<string, any>>, res: Response<any, Record<string, any>>, next: Function) => void;
@@ -1,4 +1,4 @@
1
1
  /// <reference types="qs" />
2
2
  import { Request, Response } from 'express';
3
- import { Config } from '../models';
4
- export default function handle(config: Config, allowUnauthorized?: boolean): (req: import("../models").CrowdinClientRequest | Request<import("express-serve-static-core").ParamsDictionary, any, any, import("qs").ParsedQs, Record<string, any>>, res: Response<any, Record<string, any>>, next: Function) => void;
3
+ import { Config, UnauthorizedConfig } from '../models';
4
+ export default function handle(config: Config | UnauthorizedConfig, allowUnauthorized?: boolean): (req: import("../models").CrowdinClientRequest | Request<import("express-serve-static-core").ParamsDictionary, any, any, import("qs").ParsedQs, Record<string, any>>, res: Response<any, Record<string, any>>, next: Function) => void;
@@ -13,6 +13,7 @@ const crowdin_apps_functions_1 = require("@crowdin/crowdin-apps-functions");
13
13
  const storage_1 = require("../storage");
14
14
  const util_1 = require("../util");
15
15
  const connection_1 = require("../util/connection");
16
+ const defaults_1 = require("../util/defaults");
16
17
  const logger_1 = require("../util/logger");
17
18
  function handle(config, allowUnauthorized = false) {
18
19
  return (0, util_1.runAsyncWrapper)((req, res, next) => __awaiter(this, void 0, void 0, function* () {
@@ -20,6 +21,9 @@ function handle(config, allowUnauthorized = false) {
20
21
  next();
21
22
  return;
22
23
  }
24
+ if (!(0, defaults_1.isAuthorizedConfig)(config)) {
25
+ throw new Error('Invalid configuration. UI module was configured as authorized but client id and client secret are missing');
26
+ }
23
27
  const jwtToken = req.query.jwtToken;
24
28
  if (!jwtToken) {
25
29
  return res.status(403).send({ error: 'Access denied' });