@haiiro/docuflow 0.0.12 → 0.0.15
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/README.md +41 -9
- package/bin/install.mjs +69 -3
- package/manifest.json +114 -18
- package/package.json +6 -3
- package/public/app/docflow-app.css +2 -0
- package/public/app/docflow-app.js +95 -0
- package/src/front-components/docflow-documents.front-component.mjs +41 -41
- package/src/front-components/docflow-documents.front-component.tsx +49 -32
- package/src/front-components/docflow-processes.front-component.mjs +34 -34
- package/src/front-components/docflow-processes.front-component.tsx +24 -11
- package/src/front-components/docflow-tasks.front-component.mjs +40 -39
- package/src/front-components/docflow-tasks.front-component.tsx +19 -14
- package/src/front-components/launch-process.front-component.mjs +75 -0
- package/src/front-components/launch-process.front-component.tsx +270 -0
- package/src/front-components/process-steps.front-component.mjs +26 -26
- package/src/front-components/process-steps.front-component.tsx +56 -10
- package/src/front-components/task-form.front-component.mjs +45 -44
- package/src/front-components/task-form.front-component.tsx +12 -1
- package/src/logic-functions/bitrix-app.logic-function.mjs +186 -88
- package/src/logic-functions/bitrix-app.logic-function.ts +24 -61
- package/src/logic-functions/bitrix-event.logic-function.mjs +22 -1
- package/src/logic-functions/bitrix-event.logic-function.ts +2 -2
- package/src/logic-functions/bitrix-install.logic-function.mjs +26 -12
- package/src/logic-functions/bitrix-install.logic-function.ts +2 -5
- package/src/logic-functions/complete-task.logic-function.mjs +22 -1
- package/src/logic-functions/complete-task.logic-function.ts +2 -2
- package/src/logic-functions/docflow-app-session.logic-function.mjs +60064 -0
- package/src/logic-functions/docflow-app-session.logic-function.ts +54 -0
- package/src/logic-functions/docflow-app.logic-function.mjs +60149 -0
- package/src/logic-functions/docflow-app.logic-function.ts +38 -0
- package/src/logic-functions/launch-process.logic-function.mjs +134 -40
- package/src/logic-functions/launch-process.logic-function.ts +85 -24
- package/src/logic-functions/publish-process.logic-function.mjs +32 -11
- package/src/logic-functions/publish-process.logic-function.ts +8 -4
- package/src/logic-functions/save-launch-fields.logic-function.mjs +194 -17
- package/src/logic-functions/save-launch-fields.logic-function.ts +26 -8
- package/src/logic-functions/save-step-settings.logic-function.mjs +24 -2
- package/src/logic-functions/save-step-settings.logic-function.ts +2 -2
- package/src/logic-functions/save-task-form.logic-function.mjs +22 -1
- package/src/logic-functions/save-task-form.logic-function.ts +2 -2
|
@@ -119538,7 +119538,6 @@ var renderBitrixPage = ({
|
|
|
119538
119538
|
title,
|
|
119539
119539
|
message,
|
|
119540
119540
|
crmUrl,
|
|
119541
|
-
tasks,
|
|
119542
119541
|
isInstall
|
|
119543
119542
|
}) => `<!doctype html>
|
|
119544
119543
|
<html lang="ru">
|
|
@@ -119552,28 +119551,46 @@ var renderBitrixPage = ({
|
|
|
119552
119551
|
h1 { font-size: 20px; margin: 0 0 8px; }
|
|
119553
119552
|
p { color: #666; margin: 0 0 16px; }
|
|
119554
119553
|
a.button { display: inline-block; padding: 8px 16px; border-radius: 8px; background: #1961ed; color: #fff; text-decoration: none; }
|
|
119555
|
-
ul { list-style: none; padding: 0; margin: 16px 0 0; }
|
|
119556
|
-
li { padding: 8px 0; border-top: 1px solid #eee; display: flex; justify-content: space-between; gap: 16px; }
|
|
119557
|
-
li a { color: #1961ed; text-decoration: none; }
|
|
119558
|
-
.due { color: #999; white-space: nowrap; }
|
|
119559
119554
|
</style>
|
|
119560
119555
|
</head>
|
|
119561
119556
|
<body>
|
|
119562
119557
|
<h1>${escapeHtml(title)}</h1>
|
|
119563
119558
|
<p>${escapeHtml(message)}</p>
|
|
119564
119559
|
${crmUrl !== void 0 ? `<a class="button" href="${escapeHtml(crmUrl)}" target="_blank" rel="noopener">\u041E\u0442\u043A\u0440\u044B\u0442\u044C \u0434\u043E\u043A\u0443\u043C\u0435\u043D\u0442\u043E\u043E\u0431\u043E\u0440\u043E\u0442</a>` : ""}
|
|
119565
|
-
${tasks.length > 0 ? `<ul>${tasks.map(
|
|
119566
|
-
(task) => `<li>${task.url !== void 0 ? `<a href="${escapeHtml(task.url)}" target="_blank" rel="noopener">${escapeHtml(task.title)}</a>` : escapeHtml(task.title)}<span class="due">${escapeHtml(task.dueAt ?? "")}</span></li>`
|
|
119567
|
-
).join("")}</ul>` : ""}
|
|
119568
119560
|
${isInstall ? "<script>if (window.BX24) { BX24.init(function () { BX24.installFinish(); }); }</script>" : ""}
|
|
119569
119561
|
</body>
|
|
119570
119562
|
</html>`;
|
|
119571
119563
|
|
|
119564
|
+
// src/shared/log.util.ts
|
|
119565
|
+
var PREFIX = "[docflow]";
|
|
119566
|
+
var describeError = (error) => {
|
|
119567
|
+
if (error instanceof Error) {
|
|
119568
|
+
const { status, body } = error;
|
|
119569
|
+
return { name: error.name, message: error.message, status, body };
|
|
119570
|
+
}
|
|
119571
|
+
return error;
|
|
119572
|
+
};
|
|
119573
|
+
var logDocflowError = (event, error, details) => console.error(PREFIX, event, describeError(error), details ?? "");
|
|
119574
|
+
|
|
119572
119575
|
// src/server/http-response.ts
|
|
119576
|
+
var jsonResponse = (status, body) => new AL(JSON.stringify(body), {
|
|
119577
|
+
status,
|
|
119578
|
+
headers: { "content-type": "application/json; charset=utf-8" }
|
|
119579
|
+
});
|
|
119573
119580
|
var htmlResponse = (status, html) => new AL(html, {
|
|
119574
119581
|
status,
|
|
119575
119582
|
headers: { "content-type": "text/html; charset=utf-8" }
|
|
119576
119583
|
});
|
|
119584
|
+
var withRouteErrors = (name, handler2) => async (...args) => {
|
|
119585
|
+
try {
|
|
119586
|
+
return await handler2(...args);
|
|
119587
|
+
} catch (error) {
|
|
119588
|
+
logDocflowError(`${name}: unexpected error`, error);
|
|
119589
|
+
return jsonResponse(500, {
|
|
119590
|
+
message: `\u041E\u0448\u0438\u0431\u043A\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0434\u043E\u043A\u0443\u043C\u0435\u043D\u0442\u043E\u043E\u0431\u043E\u0440\u043E\u0442\u0430: ${error instanceof Error ? error.message : String(error)}`
|
|
119591
|
+
});
|
|
119592
|
+
}
|
|
119593
|
+
};
|
|
119577
119594
|
|
|
119578
119595
|
// src/universal-identifiers.ts
|
|
119579
119596
|
var BITRIX_INSTALL_LOGIC_FUNCTION_UNIVERSAL_IDENTIFIER = "896071e0-0964-4b28-bc39-ed50c19d592a";
|
|
@@ -119586,7 +119603,6 @@ var handler = async (event) => {
|
|
|
119586
119603
|
renderBitrixPage({
|
|
119587
119604
|
title: "\u0414\u043E\u043A\u0443\u043C\u0435\u043D\u0442\u043E\u043E\u0431\u043E\u0440\u043E\u0442",
|
|
119588
119605
|
message: "\u0412 \u043D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0430\u0445 \u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u044F \u0432 CRM \u043D\u0435 \u0443\u043A\u0430\u0437\u0430\u043D\u044B BITRIX_CLIENT_ID \u0438 BITRIX_CLIENT_SECRET.",
|
|
119589
|
-
tasks: [],
|
|
119590
119606
|
isInstall: false
|
|
119591
119607
|
})
|
|
119592
119608
|
);
|
|
@@ -119613,7 +119629,6 @@ var handler = async (event) => {
|
|
|
119613
119629
|
renderBitrixPage({
|
|
119614
119630
|
title: "\u0414\u043E\u043A\u0443\u043C\u0435\u043D\u0442\u043E\u043E\u0431\u043E\u0440\u043E\u0442 \u043F\u043E\u0434\u043A\u043B\u044E\u0447\u0451\u043D",
|
|
119615
119631
|
message: `\u041F\u043E\u0440\u0442\u0430\u043B ${portal.portalDomain} \u0441\u0432\u044F\u0437\u0430\u043D \u0441 CRM.`,
|
|
119616
|
-
tasks: [],
|
|
119617
119632
|
isInstall: true
|
|
119618
119633
|
})
|
|
119619
119634
|
);
|
|
@@ -119623,7 +119638,6 @@ var handler = async (event) => {
|
|
|
119623
119638
|
renderBitrixPage({
|
|
119624
119639
|
title: "\u0414\u043E\u043A\u0443\u043C\u0435\u043D\u0442\u043E\u043E\u0431\u043E\u0440\u043E\u0442",
|
|
119625
119640
|
message: error instanceof BitrixError ? `\u041F\u043E\u0440\u0442\u0430\u043B \u043D\u0435 \u043F\u043E\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0451\u043D: ${error.message}` : "\u041F\u043E\u0440\u0442\u0430\u043B \u043D\u0435 \u043F\u043E\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0451\u043D.",
|
|
119626
|
-
tasks: [],
|
|
119627
119641
|
isInstall: false
|
|
119628
119642
|
})
|
|
119629
119643
|
);
|
|
@@ -119634,7 +119648,7 @@ var bitrix_install_logic_function_default = defineLogicFunction({
|
|
|
119634
119648
|
name: "docflow-bitrix-install",
|
|
119635
119649
|
description: "\u0423\u0441\u0442\u0430\u043D\u043E\u0432\u043A\u0430 \u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u044F \u043D\u0430 \u043F\u043E\u0440\u0442\u0430\u043B\u0435 \u0411\u0438\u0442\u0440\u0438\u043A\u044124",
|
|
119636
119650
|
timeoutSeconds: 30,
|
|
119637
|
-
handler,
|
|
119651
|
+
handler: withRouteErrors("bitrix-install", handler),
|
|
119638
119652
|
httpRouteTriggerSettings: {
|
|
119639
119653
|
path: "/bitrix/install",
|
|
119640
119654
|
httpMethod: "POST",
|
|
@@ -6,7 +6,7 @@ import { BitrixError, callBitrix, isBitrixConfigured } from 'src/shared/bitrix/b
|
|
|
6
6
|
import { parseBitrixRequest } from 'src/shared/bitrix/bitrix.util';
|
|
7
7
|
import { proveAndLinkBitrixPortal } from 'src/server/bitrix-portal';
|
|
8
8
|
import { renderBitrixPage } from 'src/server/bitrix-page';
|
|
9
|
-
import { htmlResponse } from 'src/server/http-response';
|
|
9
|
+
import { htmlResponse, withRouteErrors } from 'src/server/http-response';
|
|
10
10
|
import { BITRIX_INSTALL_LOGIC_FUNCTION_UNIVERSAL_IDENTIFIER } from 'src/universal-identifiers';
|
|
11
11
|
|
|
12
12
|
// "Путь для первоначальной установки" of the local Bitrix24 application.
|
|
@@ -17,7 +17,6 @@ const handler = async (event: RoutePayload) => {
|
|
|
17
17
|
renderBitrixPage({
|
|
18
18
|
title: 'Документооборот',
|
|
19
19
|
message: 'В настройках приложения в CRM не указаны BITRIX_CLIENT_ID и BITRIX_CLIENT_SECRET.',
|
|
20
|
-
tasks: [],
|
|
21
20
|
isInstall: false,
|
|
22
21
|
}),
|
|
23
22
|
);
|
|
@@ -47,7 +46,6 @@ const handler = async (event: RoutePayload) => {
|
|
|
47
46
|
renderBitrixPage({
|
|
48
47
|
title: 'Документооборот подключён',
|
|
49
48
|
message: `Портал ${portal.portalDomain} связан с CRM.`,
|
|
50
|
-
tasks: [],
|
|
51
49
|
isInstall: true,
|
|
52
50
|
}),
|
|
53
51
|
);
|
|
@@ -60,7 +58,6 @@ const handler = async (event: RoutePayload) => {
|
|
|
60
58
|
error instanceof BitrixError
|
|
61
59
|
? `Портал не подтверждён: ${error.message}`
|
|
62
60
|
: 'Портал не подтверждён.',
|
|
63
|
-
tasks: [],
|
|
64
61
|
isInstall: false,
|
|
65
62
|
}),
|
|
66
63
|
);
|
|
@@ -72,7 +69,7 @@ export default defineLogicFunction({
|
|
|
72
69
|
name: 'docflow-bitrix-install',
|
|
73
70
|
description: 'Установка приложения на портале Битрикс24',
|
|
74
71
|
timeoutSeconds: 30,
|
|
75
|
-
handler,
|
|
72
|
+
handler: withRouteErrors('bitrix-install', handler),
|
|
76
73
|
httpRouteTriggerSettings: {
|
|
77
74
|
path: '/bitrix/install',
|
|
78
75
|
httpMethod: 'POST',
|
|
@@ -119363,12 +119363,33 @@ var AL = class {
|
|
|
119363
119363
|
}
|
|
119364
119364
|
};
|
|
119365
119365
|
|
|
119366
|
+
// src/shared/log.util.ts
|
|
119367
|
+
var PREFIX = "[docflow]";
|
|
119368
|
+
var describeError = (error) => {
|
|
119369
|
+
if (error instanceof Error) {
|
|
119370
|
+
const { status, body } = error;
|
|
119371
|
+
return { name: error.name, message: error.message, status, body };
|
|
119372
|
+
}
|
|
119373
|
+
return error;
|
|
119374
|
+
};
|
|
119375
|
+
var logDocflowError = (event, error, details) => console.error(PREFIX, event, describeError(error), details ?? "");
|
|
119376
|
+
|
|
119366
119377
|
// src/server/http-response.ts
|
|
119367
119378
|
var jsonResponse = (status, body) => new AL(JSON.stringify(body), {
|
|
119368
119379
|
status,
|
|
119369
119380
|
headers: { "content-type": "application/json; charset=utf-8" }
|
|
119370
119381
|
});
|
|
119371
119382
|
var readJsonBody = (body) => typeof body === "object" && body !== null && !Array.isArray(body) ? body : {};
|
|
119383
|
+
var withRouteErrors = (name, handler2) => async (...args) => {
|
|
119384
|
+
try {
|
|
119385
|
+
return await handler2(...args);
|
|
119386
|
+
} catch (error) {
|
|
119387
|
+
logDocflowError(`${name}: unexpected error`, error);
|
|
119388
|
+
return jsonResponse(500, {
|
|
119389
|
+
message: `\u041E\u0448\u0438\u0431\u043A\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0434\u043E\u043A\u0443\u043C\u0435\u043D\u0442\u043E\u043E\u0431\u043E\u0440\u043E\u0442\u0430: ${error instanceof Error ? error.message : String(error)}`
|
|
119390
|
+
});
|
|
119391
|
+
}
|
|
119392
|
+
};
|
|
119372
119393
|
|
|
119373
119394
|
// src/shared/api/core-graphql.util.ts
|
|
119374
119395
|
var CoreGraphqlError = class extends Error {
|
|
@@ -119633,7 +119654,7 @@ var complete_task_logic_function_default = defineLogicFunction({
|
|
|
119633
119654
|
name: "docflow-complete-task",
|
|
119634
119655
|
description: "\u0412\u044B\u043F\u043E\u043B\u043D\u044F\u0435\u0442 \u0437\u0430\u0434\u0430\u043D\u0438\u0435: \u043F\u0440\u043E\u0432\u0435\u0440\u044F\u0435\u0442 \u043F\u043E\u043B\u044F \u0438 \u043F\u0440\u043E\u0434\u043E\u043B\u0436\u0430\u0435\u0442 \u043F\u0440\u043E\u0446\u0435\u0441\u0441",
|
|
119635
119656
|
timeoutSeconds: 30,
|
|
119636
|
-
handler,
|
|
119657
|
+
handler: withRouteErrors("complete-task", handler),
|
|
119637
119658
|
httpRouteTriggerSettings: {
|
|
119638
119659
|
path: "/docflow/tasks/complete",
|
|
119639
119660
|
httpMethod: "POST",
|
|
@@ -2,7 +2,7 @@ import { defineLogicFunction } from 'twenty-sdk/define';
|
|
|
2
2
|
import { type RoutePayload } from 'twenty-sdk/logic-function';
|
|
3
3
|
|
|
4
4
|
import { parseFormValues } from 'src/shared/form/form-fields.util';
|
|
5
|
-
import { jsonResponse, readJsonBody } from 'src/server/http-response';
|
|
5
|
+
import { jsonResponse, readJsonBody, withRouteErrors } from 'src/server/http-response';
|
|
6
6
|
import { completeTask } from 'src/server/task-completion';
|
|
7
7
|
import { COMPLETE_TASK_LOGIC_FUNCTION_UNIVERSAL_IDENTIFIER } from 'src/universal-identifiers';
|
|
8
8
|
|
|
@@ -37,7 +37,7 @@ export default defineLogicFunction({
|
|
|
37
37
|
name: 'docflow-complete-task',
|
|
38
38
|
description: 'Выполняет задание: проверяет поля и продолжает процесс',
|
|
39
39
|
timeoutSeconds: 30,
|
|
40
|
-
handler,
|
|
40
|
+
handler: withRouteErrors('complete-task', handler),
|
|
41
41
|
httpRouteTriggerSettings: {
|
|
42
42
|
path: '/docflow/tasks/complete',
|
|
43
43
|
httpMethod: 'POST',
|