@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.
Files changed (40) hide show
  1. package/README.md +41 -9
  2. package/bin/install.mjs +69 -3
  3. package/manifest.json +114 -18
  4. package/package.json +6 -3
  5. package/public/app/docflow-app.css +2 -0
  6. package/public/app/docflow-app.js +95 -0
  7. package/src/front-components/docflow-documents.front-component.mjs +41 -41
  8. package/src/front-components/docflow-documents.front-component.tsx +49 -32
  9. package/src/front-components/docflow-processes.front-component.mjs +34 -34
  10. package/src/front-components/docflow-processes.front-component.tsx +24 -11
  11. package/src/front-components/docflow-tasks.front-component.mjs +40 -39
  12. package/src/front-components/docflow-tasks.front-component.tsx +19 -14
  13. package/src/front-components/launch-process.front-component.mjs +75 -0
  14. package/src/front-components/launch-process.front-component.tsx +270 -0
  15. package/src/front-components/process-steps.front-component.mjs +26 -26
  16. package/src/front-components/process-steps.front-component.tsx +56 -10
  17. package/src/front-components/task-form.front-component.mjs +45 -44
  18. package/src/front-components/task-form.front-component.tsx +12 -1
  19. package/src/logic-functions/bitrix-app.logic-function.mjs +186 -88
  20. package/src/logic-functions/bitrix-app.logic-function.ts +24 -61
  21. package/src/logic-functions/bitrix-event.logic-function.mjs +22 -1
  22. package/src/logic-functions/bitrix-event.logic-function.ts +2 -2
  23. package/src/logic-functions/bitrix-install.logic-function.mjs +26 -12
  24. package/src/logic-functions/bitrix-install.logic-function.ts +2 -5
  25. package/src/logic-functions/complete-task.logic-function.mjs +22 -1
  26. package/src/logic-functions/complete-task.logic-function.ts +2 -2
  27. package/src/logic-functions/docflow-app-session.logic-function.mjs +60064 -0
  28. package/src/logic-functions/docflow-app-session.logic-function.ts +54 -0
  29. package/src/logic-functions/docflow-app.logic-function.mjs +60149 -0
  30. package/src/logic-functions/docflow-app.logic-function.ts +38 -0
  31. package/src/logic-functions/launch-process.logic-function.mjs +134 -40
  32. package/src/logic-functions/launch-process.logic-function.ts +85 -24
  33. package/src/logic-functions/publish-process.logic-function.mjs +32 -11
  34. package/src/logic-functions/publish-process.logic-function.ts +8 -4
  35. package/src/logic-functions/save-launch-fields.logic-function.mjs +194 -17
  36. package/src/logic-functions/save-launch-fields.logic-function.ts +26 -8
  37. package/src/logic-functions/save-step-settings.logic-function.mjs +24 -2
  38. package/src/logic-functions/save-step-settings.logic-function.ts +2 -2
  39. package/src/logic-functions/save-task-form.logic-function.mjs +22 -1
  40. 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',