@crowdin/app-project-module 0.68.1 → 0.70.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.
- package/out/index.js +21 -3
- package/out/modules/ai-provider/handlers/chat-completions.js +20 -21
- package/out/modules/ai-provider/handlers/get-model-list.js +3 -2
- package/out/modules/ai-provider/types.d.ts +112 -7
- package/out/modules/ai-provider/util/index.d.ts +5 -0
- package/out/modules/ai-provider/util/index.js +72 -1
- package/out/modules/api/api.js +4 -4
- package/out/modules/file-processing/handlers/pre-post-process.js +6 -0
- package/out/modules/file-processing/types.d.ts +16 -8
- package/out/modules/integration/util/cron.js +8 -5
- package/out/modules/integration/util/webhooks.js +5 -4
- package/out/modules/manifest.js +46 -0
- package/out/modules/organization-settings-menu/index.d.ts +6 -0
- package/out/modules/organization-settings-menu/index.js +18 -0
- package/out/modules/profile-settings-menu/index.d.ts +6 -0
- package/out/modules/profile-settings-menu/index.js +18 -0
- package/out/modules/webhooks/handlers/webhook-handler.d.ts +5 -0
- package/out/modules/webhooks/handlers/webhook-handler.js +78 -0
- package/out/modules/webhooks/index.d.ts +6 -0
- package/out/modules/webhooks/index.js +18 -0
- package/out/modules/webhooks/types.d.ts +294 -0
- package/out/modules/webhooks/types.js +2 -0
- package/out/modules/workflow-step-type/handlers/delete-step.d.ts +5 -0
- package/out/modules/workflow-step-type/handlers/delete-step.js +70 -0
- package/out/modules/workflow-step-type/handlers/step-settings-save.d.ts +5 -0
- package/out/modules/workflow-step-type/handlers/step-settings-save.js +80 -0
- package/out/modules/workflow-step-type/index.d.ts +6 -0
- package/out/modules/workflow-step-type/index.js +36 -0
- package/out/modules/workflow-step-type/types.d.ts +57 -0
- package/out/modules/workflow-step-type/types.js +2 -0
- package/out/modules/workflow-step-type/util/index.d.ts +3 -0
- package/out/modules/workflow-step-type/util/index.js +16 -0
- package/out/static/js/form.js +32 -32
- package/out/static/js/main.js +2 -2
- package/out/storage/index.d.ts +1 -0
- package/out/storage/mysql.d.ts +1 -0
- package/out/storage/mysql.js +9 -0
- package/out/storage/postgre.d.ts +1 -0
- package/out/storage/postgre.js +9 -0
- package/out/storage/sqlite.d.ts +1 -0
- package/out/storage/sqlite.js +3 -0
- package/out/types.d.ts +19 -1
- package/out/util/logger.d.ts +5 -2
- package/out/util/logger.js +26 -10
- package/out/views/main.handlebars +48 -24
- package/package.json +16 -8
package/out/static/js/main.js
CHANGED
|
@@ -50,7 +50,7 @@ function catchRejection(e, message) {
|
|
|
50
50
|
//payment required
|
|
51
51
|
if (e.code && e.code === 402 && subscriptionModal) {
|
|
52
52
|
subscriptionLink = e.message || message;
|
|
53
|
-
subscriptionModal
|
|
53
|
+
openModal(subscriptionModal);
|
|
54
54
|
return;
|
|
55
55
|
}
|
|
56
56
|
showToast(e.message || message);
|
|
@@ -68,7 +68,7 @@ function checkResponse(response) {
|
|
|
68
68
|
reject(res);
|
|
69
69
|
} else {
|
|
70
70
|
if (res.message) {
|
|
71
|
-
showToast(res.message);
|
|
71
|
+
setTimeout(() => showToast(res.message), 100);
|
|
72
72
|
}
|
|
73
73
|
resolve(res);
|
|
74
74
|
}
|
package/out/storage/index.d.ts
CHANGED
|
@@ -18,6 +18,7 @@ export interface Storage {
|
|
|
18
18
|
saveMetadata(id: string, metadata: any, crowdinId?: string): Promise<void>;
|
|
19
19
|
updateMetadata(id: string, metadata: any, crowdinId?: string): Promise<void>;
|
|
20
20
|
getMetadata(id: string): Promise<any | undefined>;
|
|
21
|
+
getAllMetadata(): Promise<any[] | undefined>;
|
|
21
22
|
deleteMetadata(id: string): Promise<void>;
|
|
22
23
|
getSyncSettingsByProvider(integrationId: string, provider: Provider): Promise<IntegrationSyncSettings | undefined>;
|
|
23
24
|
getAllSyncSettingsByType(type: string): Promise<IntegrationSyncSettings[]>;
|
package/out/storage/mysql.d.ts
CHANGED
|
@@ -35,6 +35,7 @@ export declare class MySQLStorage implements Storage {
|
|
|
35
35
|
saveMetadata(id: string, metadata: any, crowdinId: string): Promise<void>;
|
|
36
36
|
updateMetadata(id: string, metadata: any, crowdinId?: string): Promise<void>;
|
|
37
37
|
getMetadata(id: string): Promise<any>;
|
|
38
|
+
getAllMetadata(): Promise<any[]>;
|
|
38
39
|
deleteMetadata(id: string): Promise<void>;
|
|
39
40
|
getSyncSettingsByProvider(integrationId: string, provider: string): Promise<IntegrationSyncSettings | undefined>;
|
|
40
41
|
getAllSyncSettingsByType(type: string): Promise<IntegrationSyncSettings[]>;
|
package/out/storage/mysql.js
CHANGED
|
@@ -340,6 +340,15 @@ class MySQLStorage {
|
|
|
340
340
|
}));
|
|
341
341
|
});
|
|
342
342
|
}
|
|
343
|
+
getAllMetadata() {
|
|
344
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
345
|
+
yield this.dbPromise;
|
|
346
|
+
return this.executeQuery((connection) => __awaiter(this, void 0, void 0, function* () {
|
|
347
|
+
const [rows] = yield connection.execute('SELECT * FROM app_metadata');
|
|
348
|
+
return rows || [];
|
|
349
|
+
}));
|
|
350
|
+
});
|
|
351
|
+
}
|
|
343
352
|
deleteMetadata(id) {
|
|
344
353
|
return __awaiter(this, void 0, void 0, function* () {
|
|
345
354
|
yield this.dbPromise;
|
package/out/storage/postgre.d.ts
CHANGED
|
@@ -42,6 +42,7 @@ export declare class PostgreStorage implements Storage {
|
|
|
42
42
|
saveMetadata(id: string, metadata: any, crowdinId: string): Promise<void>;
|
|
43
43
|
updateMetadata(id: string, metadata: any, crowdinId?: string): Promise<void>;
|
|
44
44
|
getMetadata(id: string): Promise<any>;
|
|
45
|
+
getAllMetadata(): Promise<any[]>;
|
|
45
46
|
deleteMetadata(id: string): Promise<void>;
|
|
46
47
|
getSyncSettingsByProvider(integrationId: string, provider: string): Promise<IntegrationSyncSettings | undefined>;
|
|
47
48
|
getAllSyncSettingsByType(type: string): Promise<IntegrationSyncSettings[]>;
|
package/out/storage/postgre.js
CHANGED
|
@@ -367,6 +367,15 @@ class PostgreStorage {
|
|
|
367
367
|
}));
|
|
368
368
|
});
|
|
369
369
|
}
|
|
370
|
+
getAllMetadata() {
|
|
371
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
372
|
+
yield this.dbPromise;
|
|
373
|
+
return this.executeQuery((client) => __awaiter(this, void 0, void 0, function* () {
|
|
374
|
+
const res = yield client.query('SELECT * FROM app_metadata');
|
|
375
|
+
return (res === null || res === void 0 ? void 0 : res.rows) || [];
|
|
376
|
+
}));
|
|
377
|
+
});
|
|
378
|
+
}
|
|
370
379
|
deleteMetadata(id) {
|
|
371
380
|
return __awaiter(this, void 0, void 0, function* () {
|
|
372
381
|
yield this.dbPromise;
|
package/out/storage/sqlite.d.ts
CHANGED
|
@@ -37,6 +37,7 @@ export declare class SQLiteStorage implements Storage {
|
|
|
37
37
|
saveMetadata(id: string, metadata: any, crowdinId?: string): Promise<void>;
|
|
38
38
|
updateMetadata(id: string, metadata: any, crowdinId?: string): Promise<void>;
|
|
39
39
|
getMetadata(id: string): Promise<any>;
|
|
40
|
+
getAllMetadata(): Promise<any[]>;
|
|
40
41
|
deleteMetadata(id: string): Promise<void>;
|
|
41
42
|
getSyncSettingsByProvider(integrationId: string, provider: string): Promise<IntegrationSyncSettings | undefined>;
|
|
42
43
|
getAllSyncSettingsByType(type: string): Promise<IntegrationSyncSettings[]>;
|
package/out/storage/sqlite.js
CHANGED
|
@@ -405,6 +405,9 @@ class SQLiteStorage {
|
|
|
405
405
|
}
|
|
406
406
|
});
|
|
407
407
|
}
|
|
408
|
+
getAllMetadata() {
|
|
409
|
+
return this.each('SELECT * FROM app_metadata', []);
|
|
410
|
+
}
|
|
408
411
|
deleteMetadata(id) {
|
|
409
412
|
return __awaiter(this, void 0, void 0, function* () {
|
|
410
413
|
yield this.run('DELETE FROM app_metadata where id = ?', [id]);
|
package/out/types.d.ts
CHANGED
|
@@ -15,6 +15,8 @@ import { AiProviderModule } from './modules/ai-provider/types';
|
|
|
15
15
|
import { AiPromptProviderModule } from './modules/ai-prompt-provider/types';
|
|
16
16
|
import { AiTool, AiToolWidget } from './modules/ai-tools/types';
|
|
17
17
|
import { ExternalQaCheckModule } from './modules/external-qa-check/types';
|
|
18
|
+
import { Webhook } from './modules/webhooks/types';
|
|
19
|
+
import { WorkflowStepTypeModule } from './modules/workflow-step-type/types';
|
|
18
20
|
export interface ClientConfig extends ImagePath {
|
|
19
21
|
/**
|
|
20
22
|
* Authentication Crowdin App type: "authorization_code", "crowdin_app", "crowdin_agent". Default: "crowdin_app"
|
|
@@ -104,10 +106,18 @@ export interface ClientConfig extends ImagePath {
|
|
|
104
106
|
* resources module
|
|
105
107
|
*/
|
|
106
108
|
profileResourcesMenu?: UiModule & ImagePath & Environments;
|
|
109
|
+
/**
|
|
110
|
+
* profile-settings-menu module
|
|
111
|
+
*/
|
|
112
|
+
profileSettingsMenu?: UiModule & ImagePath & Environments;
|
|
107
113
|
/**
|
|
108
114
|
* organization-menu module
|
|
109
115
|
*/
|
|
110
116
|
organizationMenu?: UiModule & ImagePath;
|
|
117
|
+
/**
|
|
118
|
+
* organization-settings-menu module
|
|
119
|
+
*/
|
|
120
|
+
organizationSettingsMenu?: UiModule & ImagePath;
|
|
111
121
|
/**
|
|
112
122
|
* editor-right-panel module
|
|
113
123
|
*/
|
|
@@ -206,6 +216,14 @@ export interface ClientConfig extends ImagePath {
|
|
|
206
216
|
* qa check module
|
|
207
217
|
*/
|
|
208
218
|
externalQaCheck?: ExternalQaCheckModule & ImagePath;
|
|
219
|
+
/**
|
|
220
|
+
* webhook modules
|
|
221
|
+
*/
|
|
222
|
+
webhooks?: Webhook | Webhook[];
|
|
223
|
+
/**
|
|
224
|
+
* workflow step modules
|
|
225
|
+
*/
|
|
226
|
+
workflowStepType?: WorkflowStepTypeModule | WorkflowStepTypeModule[];
|
|
209
227
|
}
|
|
210
228
|
export interface Environments {
|
|
211
229
|
environments?: Environment | Environment[];
|
|
@@ -326,7 +344,7 @@ export interface CrowdinAppUtilities extends CrowdinMetadataStore {
|
|
|
326
344
|
crowdinId: string;
|
|
327
345
|
extra: Record<string, any>;
|
|
328
346
|
}) => string;
|
|
329
|
-
dencryptCrowdinConnection: (hash: string) => Promise<{
|
|
347
|
+
dencryptCrowdinConnection: (hash: string, autoRenew?: boolean) => Promise<{
|
|
330
348
|
client: Crowdin;
|
|
331
349
|
extra: Record<string, any>;
|
|
332
350
|
}>;
|
package/out/util/logger.d.ts
CHANGED
|
@@ -26,9 +26,12 @@ export declare class AppModuleError extends Error {
|
|
|
26
26
|
isAxiosError: boolean;
|
|
27
27
|
constructor(error: CustomAxiosError | Error | string, data?: any);
|
|
28
28
|
}
|
|
29
|
+
export declare class AppUserModuleError extends AppModuleError {
|
|
30
|
+
constructor(error: CustomAxiosError | Error | string, data?: any);
|
|
31
|
+
}
|
|
29
32
|
export declare class AppModuleAggregateError extends Error {
|
|
30
|
-
errors: Error[] | AppModuleError[];
|
|
31
|
-
constructor(errors: Error[] | AppModuleError[], message: string);
|
|
33
|
+
errors: Error[] | AppModuleError[] | AppUserModuleError[];
|
|
34
|
+
constructor(errors: Error[] | AppModuleError[] | AppUserModuleError[], message: string);
|
|
32
35
|
}
|
|
33
36
|
export declare function handleUserError({ action, error, crowdinId, clientId, }: {
|
|
34
37
|
action: string;
|
package/out/util/logger.js
CHANGED
|
@@ -32,7 +32,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
32
32
|
});
|
|
33
33
|
};
|
|
34
34
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
35
|
-
exports.temporaryErrorDebug = exports.handleUserError = exports.AppModuleAggregateError = exports.AppModuleError = exports.getErrorMessage = exports.isAxiosError = exports.logError = exports.log = exports.withContextError = exports.withContext = exports.prepareContext = exports.initialize = void 0;
|
|
35
|
+
exports.temporaryErrorDebug = exports.handleUserError = exports.AppModuleAggregateError = exports.AppUserModuleError = exports.AppModuleError = exports.getErrorMessage = exports.isAxiosError = exports.logError = exports.log = exports.withContextError = exports.withContext = exports.prepareContext = exports.initialize = void 0;
|
|
36
36
|
const logsFormatter = __importStar(require("@crowdin/logs-formatter"));
|
|
37
37
|
const storage_1 = require("../storage");
|
|
38
38
|
let logConfig;
|
|
@@ -138,6 +138,9 @@ function logError(e, context) {
|
|
|
138
138
|
exports.logError = logError;
|
|
139
139
|
function errorOutputByType(error) {
|
|
140
140
|
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;
|
|
141
|
+
if (error instanceof AppUserModuleError) {
|
|
142
|
+
return;
|
|
143
|
+
}
|
|
141
144
|
const message = error.message || error;
|
|
142
145
|
if (isAxiosError(error)) {
|
|
143
146
|
const request = (error === null || error === void 0 ? void 0 : error.config) || ((_a = error.data) === null || _a === void 0 ? void 0 : _a.config)
|
|
@@ -193,6 +196,13 @@ class AppModuleError extends Error {
|
|
|
193
196
|
}
|
|
194
197
|
}
|
|
195
198
|
exports.AppModuleError = AppModuleError;
|
|
199
|
+
class AppUserModuleError extends AppModuleError {
|
|
200
|
+
constructor(error, data) {
|
|
201
|
+
super(error, data);
|
|
202
|
+
this.name = 'AppUserModuleError';
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
exports.AppUserModuleError = AppUserModuleError;
|
|
196
206
|
class AppModuleAggregateError extends Error {
|
|
197
207
|
constructor(errors, message) {
|
|
198
208
|
super(message);
|
|
@@ -218,7 +228,7 @@ function storeUserError({ action, error, crowdinId, clientId, }) {
|
|
|
218
228
|
statusText: ((_u = error === null || error === void 0 ? void 0 : error.response) === null || _u === void 0 ? void 0 : _u.statusText) || ((_w = (_v = error === null || error === void 0 ? void 0 : error.data) === null || _v === void 0 ? void 0 : _v.response) === null || _w === void 0 ? void 0 : _w.statusText),
|
|
219
229
|
};
|
|
220
230
|
}
|
|
221
|
-
if (error instanceof AppModuleError && error.appData) {
|
|
231
|
+
if ((error instanceof AppModuleError || error instanceof AppUserModuleError) && error.appData) {
|
|
222
232
|
data.appData = error.appData;
|
|
223
233
|
}
|
|
224
234
|
yield (0, storage_1.getStorage)().saveUserError(action, (error === null || error === void 0 ? void 0 : error.message) || JSON.stringify(error, null, 2), JSON.stringify(data), `${Date.now()}`, crowdinId, clientId);
|
|
@@ -226,28 +236,34 @@ function storeUserError({ action, error, crowdinId, clientId, }) {
|
|
|
226
236
|
}
|
|
227
237
|
function mergeAppModuleAggregateErrors(errors) {
|
|
228
238
|
const result = [];
|
|
229
|
-
const mergedData = {
|
|
239
|
+
const mergedData = {
|
|
240
|
+
AppModuleError: {},
|
|
241
|
+
AppUserModuleError: {},
|
|
242
|
+
};
|
|
230
243
|
for (const errorItem of errors) {
|
|
231
|
-
if (errorItem instanceof AppModuleError) {
|
|
244
|
+
if (errorItem instanceof AppModuleError || errorItem instanceof AppUserModuleError) {
|
|
232
245
|
if (typeof errorItem.appData === 'object' &&
|
|
233
246
|
errorItem.appData !== null &&
|
|
234
247
|
!Array.isArray(errorItem.appData)) {
|
|
235
|
-
if (!mergedData[errorItem.message]) {
|
|
236
|
-
mergedData[errorItem.message] = {};
|
|
248
|
+
if (!mergedData[errorItem.name][errorItem.message]) {
|
|
249
|
+
mergedData[errorItem.name][errorItem.message] = {};
|
|
237
250
|
}
|
|
238
251
|
for (const key in errorItem.appData) {
|
|
239
|
-
mergedData[errorItem.message][key] = (mergedData[errorItem.message][key] || []).concat(errorItem.appData[key]);
|
|
252
|
+
mergedData[errorItem.name][errorItem.message][key] = (mergedData[errorItem.name][errorItem.message][key] || []).concat(errorItem.appData[key]);
|
|
240
253
|
}
|
|
241
254
|
}
|
|
242
255
|
else if (errorItem.appData) {
|
|
243
|
-
mergedData[errorItem.message] = (mergedData[errorItem.message] || []).concat(errorItem.appData);
|
|
256
|
+
mergedData[errorItem.name][errorItem.message] = (mergedData[errorItem.name][errorItem.message] || []).concat(errorItem.appData);
|
|
244
257
|
}
|
|
245
258
|
continue;
|
|
246
259
|
}
|
|
247
260
|
result.push(errorItem);
|
|
248
261
|
}
|
|
249
|
-
for (const key in mergedData) {
|
|
250
|
-
result.push(new AppModuleError(key, mergedData[key]));
|
|
262
|
+
for (const key in mergedData.AppModuleError) {
|
|
263
|
+
result.push(new AppModuleError(key, mergedData.AppModuleError[key]));
|
|
264
|
+
}
|
|
265
|
+
for (const key in mergedData.AppUserModuleError) {
|
|
266
|
+
result.push(new AppUserModuleError(key, mergedData.AppUserModuleError[key]));
|
|
251
267
|
}
|
|
252
268
|
return result;
|
|
253
269
|
}
|
|
@@ -37,10 +37,10 @@
|
|
|
37
37
|
<crowdin-button id="show-integration-btn" class="hidden" icon-before="arrow_back" onclick="showIntegration();">Integration</crowdin-button>
|
|
38
38
|
<crowdin-button id="show-error-logs-btn" icon-before="list" onclick="showErrorLogs();">Error logs</crowdin-button>
|
|
39
39
|
{{#if infoModal}}
|
|
40
|
-
<crowdin-button icon-before="info" onclick="infoModal
|
|
40
|
+
<crowdin-button icon-before="info" onclick="openModal(infoModal);">{{infoModal.title}}</crowdin-button>
|
|
41
41
|
{{/if}}
|
|
42
42
|
{{#if configurationFields}}
|
|
43
|
-
<crowdin-button icon-before="settings" onclick="settingsModal
|
|
43
|
+
<crowdin-button icon-before="settings" onclick="openModal(settingsModal);fillSettingsForm();">Settings</crowdin-button>
|
|
44
44
|
{{/if}}
|
|
45
45
|
<crowdin-button icon-before="account_circle" onclick="integrationLogout()">Log out</crowdin-button>
|
|
46
46
|
</div>
|
|
@@ -93,7 +93,12 @@
|
|
|
93
93
|
<crowdin-async-progress
|
|
94
94
|
cancelAsyncAction=""
|
|
95
95
|
></crowdin-async-progress>
|
|
96
|
-
<crowdin-modal
|
|
96
|
+
<crowdin-modal
|
|
97
|
+
style="display: none;"
|
|
98
|
+
id="subscription-modal"
|
|
99
|
+
modal-width="50"
|
|
100
|
+
close-button="false"
|
|
101
|
+
>
|
|
97
102
|
<div>
|
|
98
103
|
<crowdin-alert type="warning">Subscribe to continue using the {{name}} app.</crowdin-alert>
|
|
99
104
|
</div>
|
|
@@ -104,7 +109,13 @@
|
|
|
104
109
|
</div>
|
|
105
110
|
</crowdin-modal>
|
|
106
111
|
{{#if infoModal}}
|
|
107
|
-
<crowdin-modal
|
|
112
|
+
<crowdin-modal
|
|
113
|
+
style="display: none;"
|
|
114
|
+
id="info-modal"
|
|
115
|
+
modal-width="50"
|
|
116
|
+
modal-title="{{infoModal.title}}"
|
|
117
|
+
close-button-title="Close"
|
|
118
|
+
>
|
|
108
119
|
<div>
|
|
109
120
|
{{{infoModal.content}}}
|
|
110
121
|
</div>
|
|
@@ -112,11 +123,12 @@
|
|
|
112
123
|
{{/if}}
|
|
113
124
|
{{#if configurationFields}}
|
|
114
125
|
<crowdin-modal
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
126
|
+
style="display: none;"
|
|
127
|
+
id="settings-modal"
|
|
128
|
+
body-overflow-unset="{{#checkLength configurationFields 3}}false{{else}}true{{/checkLength}}"
|
|
129
|
+
modal-width="65"
|
|
130
|
+
modal-title="Settings"
|
|
131
|
+
close-button-title="Close"
|
|
120
132
|
>
|
|
121
133
|
<div class="loader hidden">
|
|
122
134
|
<crowdin-progress-indicator></crowdin-progress-indicator>
|
|
@@ -268,12 +280,13 @@
|
|
|
268
280
|
{{/if}}
|
|
269
281
|
{{#or syncNewElements.crowdin syncNewElements.integration}}
|
|
270
282
|
<crowdin-modal
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
283
|
+
style="display: none;"
|
|
284
|
+
id="confirm-schedule-modal"
|
|
285
|
+
modal-width="50"
|
|
286
|
+
modal-title="Synchronization options"
|
|
287
|
+
close-button-title="Close"
|
|
288
|
+
close-button="true"
|
|
289
|
+
body-overflow-unset
|
|
277
290
|
>
|
|
278
291
|
<crowdin-checkbox
|
|
279
292
|
id="selected-files"
|
|
@@ -298,9 +311,10 @@
|
|
|
298
311
|
{{/or}}
|
|
299
312
|
|
|
300
313
|
<crowdin-modal
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
314
|
+
style="display: none;"
|
|
315
|
+
id="user-error-detail"
|
|
316
|
+
close-button-title="Close"
|
|
317
|
+
close-button="true"
|
|
304
318
|
>
|
|
305
319
|
</crowdin-modal>
|
|
306
320
|
</body>
|
|
@@ -801,7 +815,7 @@
|
|
|
801
815
|
.finally(() => {
|
|
802
816
|
unsetLoader();
|
|
803
817
|
settingsSaveBtn.removeAttribute('disabled');
|
|
804
|
-
settingsModal
|
|
818
|
+
closeModal(settingsModal);
|
|
805
819
|
{{#if reloadOnConfigSave}}
|
|
806
820
|
getIntegrationData(true);
|
|
807
821
|
getCrowdinData();
|
|
@@ -834,10 +848,10 @@
|
|
|
834
848
|
if (event.keyCode == 27) {
|
|
835
849
|
|
|
836
850
|
if (infoModal) {
|
|
837
|
-
infoModal
|
|
851
|
+
closeModal(infoModal);
|
|
838
852
|
}
|
|
839
853
|
if (settingsModal) {
|
|
840
|
-
settingsModal
|
|
854
|
+
closeModal(settingsModal);
|
|
841
855
|
}
|
|
842
856
|
}
|
|
843
857
|
});
|
|
@@ -896,7 +910,7 @@
|
|
|
896
910
|
{{/if}}
|
|
897
911
|
}
|
|
898
912
|
|
|
899
|
-
scheduleModal
|
|
913
|
+
closeModal(scheduleModal);
|
|
900
914
|
}
|
|
901
915
|
|
|
902
916
|
async function openScheduleModal(type) {
|
|
@@ -945,7 +959,7 @@
|
|
|
945
959
|
selectedFiles.value = true;
|
|
946
960
|
scheduleModal.querySelector('#save-schedule-sync').setAttribute('disabled', false);
|
|
947
961
|
scheduleModal.setAttribute('data-type', type);
|
|
948
|
-
scheduleModal
|
|
962
|
+
openModal(scheduleModal);
|
|
949
963
|
}
|
|
950
964
|
|
|
951
965
|
function onChangeAutoSynchronizationOptions() {
|
|
@@ -1128,7 +1142,7 @@
|
|
|
1128
1142
|
|
|
1129
1143
|
const clickRow = (field, index, item) => {
|
|
1130
1144
|
const modal = document.getElementById('user-error-detail');
|
|
1131
|
-
modal
|
|
1145
|
+
openModal(modal);
|
|
1132
1146
|
modal.innerHTML = getUserErrorDetail(item);
|
|
1133
1147
|
};
|
|
1134
1148
|
|
|
@@ -1225,6 +1239,16 @@
|
|
|
1225
1239
|
tempDiv.textContent = str;
|
|
1226
1240
|
return tempDiv.innerHTML;
|
|
1227
1241
|
}
|
|
1242
|
+
|
|
1243
|
+
function openModal(modal) {
|
|
1244
|
+
modal.style.display = 'block';
|
|
1245
|
+
modal.open()
|
|
1246
|
+
}
|
|
1247
|
+
|
|
1248
|
+
function closeModal(modal) {
|
|
1249
|
+
modal.style.display = 'none';
|
|
1250
|
+
modal.close()
|
|
1251
|
+
}
|
|
1228
1252
|
</script>
|
|
1229
1253
|
|
|
1230
1254
|
</html>
|
package/package.json
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@crowdin/app-project-module",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.70.0",
|
|
4
4
|
"description": "Module that generates for you all common endpoints for serving standalone Crowdin App",
|
|
5
5
|
"main": "out/index.js",
|
|
6
6
|
"types": "out/index.d.ts",
|
|
7
7
|
"scripts": {
|
|
8
8
|
"build": "tsc -p ./ && cp -R views out && cp -R static out && cp logo.png out && rollup -c rollup.config.mjs",
|
|
9
9
|
"build-main": "tsc -p ./ && cp -R views out && cp -R static out && cp logo.png out",
|
|
10
|
+
"build-form": "tsc -p ./ && cp -R static/js/form out/static/js && rollup -c rollup.config.mjs",
|
|
10
11
|
"watch-main": "tsc --watch -p ./ && cp -R views out && cp -R static out && cp logo.png out",
|
|
11
12
|
"lint": "eslint --fix \"{src,tests}/**/*.{js,ts}\"",
|
|
12
13
|
"prettier": "prettier --config .prettierrc src/**/*.ts --write",
|
|
@@ -19,17 +20,20 @@
|
|
|
19
20
|
],
|
|
20
21
|
"dependencies": {
|
|
21
22
|
"@aws-sdk/client-s3": "^3.606.0",
|
|
22
|
-
"@aws-sdk/s3-request-presigner": "^3.
|
|
23
|
+
"@aws-sdk/s3-request-presigner": "^3.682.0",
|
|
23
24
|
"@crowdin/crowdin-apps-functions": "0.9.0",
|
|
24
25
|
"@crowdin/logs-formatter": "^2.1.6",
|
|
25
26
|
"@godaddy/terminus": "^4.12.1",
|
|
27
|
+
"@monaco-editor/react": "^4.6.0",
|
|
26
28
|
"amqplib": "^0.10.4",
|
|
27
29
|
"crypto-js": "^4.2.0",
|
|
28
30
|
"express": "^4.21.0",
|
|
29
31
|
"express-handlebars": "^5.3.5",
|
|
30
32
|
"lodash.get": "^4.4.2",
|
|
33
|
+
"lodash.isstring": "^4.0.1",
|
|
34
|
+
"lodash.snakecase": "^4.1.1",
|
|
31
35
|
"lodash.uniqby": "^4.7.0",
|
|
32
|
-
"mysql2": "^3.
|
|
36
|
+
"mysql2": "^3.11.3",
|
|
33
37
|
"node-cron": "^3.0.3",
|
|
34
38
|
"pg": "^8.13.0",
|
|
35
39
|
"redoc-express": "^2.1.0",
|
|
@@ -39,17 +43,18 @@
|
|
|
39
43
|
},
|
|
40
44
|
"devDependencies": {
|
|
41
45
|
"@babel/preset-react": "^7.24.7",
|
|
42
|
-
"@emotion/react": "^11.13.
|
|
46
|
+
"@emotion/react": "^11.13.3",
|
|
43
47
|
"@emotion/styled": "^11.11.5",
|
|
44
48
|
"@mui/icons-material": "^5.16.7",
|
|
45
49
|
"@mui/material": "^5.16.7",
|
|
46
|
-
"@rjsf/core": "^5.
|
|
47
|
-
"@rjsf/mui": "^5.
|
|
50
|
+
"@rjsf/core": "^5.22.3",
|
|
51
|
+
"@rjsf/mui": "^5.22.3",
|
|
48
52
|
"@rjsf/utils": "^5.21.1",
|
|
49
|
-
"@rjsf/validator-ajv8": "^5.
|
|
53
|
+
"@rjsf/validator-ajv8": "^5.22.3",
|
|
50
54
|
"@rollup/plugin-babel": "^6.0.4",
|
|
51
55
|
"@rollup/plugin-commonjs": "^24.1.0",
|
|
52
56
|
"@rollup/plugin-json": "^6.1.0",
|
|
57
|
+
"@rollup/plugin-multi-entry": "^6.0.1",
|
|
53
58
|
"@rollup/plugin-node-resolve": "^15.3.0",
|
|
54
59
|
"@rollup/plugin-replace": "^5.0.7",
|
|
55
60
|
"@rollup/plugin-terser": "^0.4.3",
|
|
@@ -59,6 +64,8 @@
|
|
|
59
64
|
"@types/express-handlebars": "^5.3.1",
|
|
60
65
|
"@types/jest": "^29.5.12",
|
|
61
66
|
"@types/lodash.get": "^4.4.9",
|
|
67
|
+
"@types/lodash.isstring": "^4.0.9",
|
|
68
|
+
"@types/lodash.snakecase": "^4.1.9",
|
|
62
69
|
"@types/lodash.uniqby": "^4.7.9",
|
|
63
70
|
"@types/node": "^16.18.112",
|
|
64
71
|
"@types/node-cron": "^3.0.11",
|
|
@@ -77,7 +84,8 @@
|
|
|
77
84
|
"react": "^18.3.1",
|
|
78
85
|
"react-dom": "^18.3.1",
|
|
79
86
|
"rollup": "^3.29.4",
|
|
80
|
-
"
|
|
87
|
+
"rollup-plugin-delete": "^2.1.0",
|
|
88
|
+
"ts-jest": "^29.2.5",
|
|
81
89
|
"typescript": "^4.9.5"
|
|
82
90
|
},
|
|
83
91
|
"repository": {
|