@acorex/connectivity 20.8.4 → 21.0.0-beta.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 (123) hide show
  1. package/fesm2022/{acorex-connectivity-api-execute.command-D2Q0ahw4.mjs → acorex-connectivity-api-execute.command-CiBl7z_H.mjs} +4 -4
  2. package/fesm2022/acorex-connectivity-api-execute.command-CiBl7z_H.mjs.map +1 -0
  3. package/fesm2022/acorex-connectivity-api.mjs +37 -37
  4. package/fesm2022/acorex-connectivity-api.mjs.map +1 -1
  5. package/fesm2022/acorex-connectivity-mock-acorex-connectivity-mock-BvDCXP5M.mjs +75955 -0
  6. package/fesm2022/acorex-connectivity-mock-acorex-connectivity-mock-BvDCXP5M.mjs.map +1 -0
  7. package/fesm2022/acorex-connectivity-mock-assign-to-manager.activity-DQRHQ_jG.mjs +212 -0
  8. package/fesm2022/acorex-connectivity-mock-assign-to-manager.activity-DQRHQ_jG.mjs.map +1 -0
  9. package/fesm2022/acorex-connectivity-mock-category-metadata-inheritance.query-CWRL1dTa.mjs +198 -0
  10. package/fesm2022/acorex-connectivity-mock-category-metadata-inheritance.query-CWRL1dTa.mjs.map +1 -0
  11. package/fesm2022/{acorex-connectivity-mock-category-with-items.query-DWW7t6nc.mjs → acorex-connectivity-mock-category-with-items.query-Cj6FWu7S.mjs} +4 -4
  12. package/fesm2022/acorex-connectivity-mock-category-with-items.query-Cj6FWu7S.mjs.map +1 -0
  13. package/fesm2022/acorex-connectivity-mock-chat-generate-image.command-D_2bFiuO.mjs +108 -0
  14. package/fesm2022/acorex-connectivity-mock-chat-generate-image.command-D_2bFiuO.mjs.map +1 -0
  15. package/fesm2022/acorex-connectivity-mock-chat-synthesize-speech.command-CWK6lBgb.mjs +130 -0
  16. package/fesm2022/acorex-connectivity-mock-chat-synthesize-speech.command-CWK6lBgb.mjs.map +1 -0
  17. package/fesm2022/acorex-connectivity-mock-chat-transcribe-speech.command-B1PpdDkQ.mjs +110 -0
  18. package/fesm2022/acorex-connectivity-mock-chat-transcribe-speech.command-B1PpdDkQ.mjs.map +1 -0
  19. package/fesm2022/{acorex-connectivity-mock-check-permission.command-DFcxfjxp.mjs → acorex-connectivity-mock-check-permission.activity-vr3OHtjC.mjs} +8 -16
  20. package/fesm2022/acorex-connectivity-mock-check-permission.activity-vr3OHtjC.mjs.map +1 -0
  21. package/fesm2022/acorex-connectivity-mock-complete-signature-process.activity-BO-IFsHT.mjs +56 -0
  22. package/fesm2022/acorex-connectivity-mock-complete-signature-process.activity-BO-IFsHT.mjs.map +1 -0
  23. package/fesm2022/acorex-connectivity-mock-contact-core.module-5TLCGWOR.mjs +968 -0
  24. package/fesm2022/acorex-connectivity-mock-contact-core.module-5TLCGWOR.mjs.map +1 -0
  25. package/fesm2022/acorex-connectivity-mock-content-management.module-GQdqKsPB.mjs +16 -0
  26. package/fesm2022/acorex-connectivity-mock-content-management.module-GQdqKsPB.mjs.map +1 -0
  27. package/fesm2022/{acorex-connectivity-mock-distribution-record.command-BopU0LyU.mjs → acorex-connectivity-mock-distribution-record.activity-DuNluOzA.mjs} +18 -6
  28. package/fesm2022/acorex-connectivity-mock-distribution-record.activity-DuNluOzA.mjs.map +1 -0
  29. package/fesm2022/acorex-connectivity-mock-entity-create.activity-Ca19tIj4.mjs +60 -0
  30. package/fesm2022/acorex-connectivity-mock-entity-create.activity-Ca19tIj4.mjs.map +1 -0
  31. package/fesm2022/acorex-connectivity-mock-entity-delete.activity-ErEN1c24.mjs +60 -0
  32. package/fesm2022/acorex-connectivity-mock-entity-delete.activity-ErEN1c24.mjs.map +1 -0
  33. package/fesm2022/acorex-connectivity-mock-entity-read.activity-1fJW8gVe.mjs +67 -0
  34. package/fesm2022/acorex-connectivity-mock-entity-read.activity-1fJW8gVe.mjs.map +1 -0
  35. package/fesm2022/acorex-connectivity-mock-entity-update.activity-06HTKiQQ.mjs +68 -0
  36. package/fesm2022/acorex-connectivity-mock-entity-update.activity-06HTKiQQ.mjs.map +1 -0
  37. package/fesm2022/acorex-connectivity-mock-extract-document-text.command-nGfUTSf6.mjs +64 -0
  38. package/fesm2022/acorex-connectivity-mock-extract-document-text.command-nGfUTSf6.mjs.map +1 -0
  39. package/fesm2022/{acorex-connectivity-mock-get-application-versions-chart-data.query-uwDUrbFJ.mjs → acorex-connectivity-mock-get-application-versions-chart-data.query-DwVuYuKx.mjs} +4 -4
  40. package/fesm2022/acorex-connectivity-mock-get-application-versions-chart-data.query-DwVuYuKx.mjs.map +1 -0
  41. package/fesm2022/{acorex-connectivity-mock-get-application-versions-timeline.query-BHjQYTyZ.mjs → acorex-connectivity-mock-get-application-versions-timeline.query-sFKYynZA.mjs} +4 -4
  42. package/fesm2022/acorex-connectivity-mock-get-application-versions-timeline.query-sFKYynZA.mjs.map +1 -0
  43. package/fesm2022/acorex-connectivity-mock-get-current-session-user.activity-C6S4ZJgp.mjs +35 -0
  44. package/fesm2022/acorex-connectivity-mock-get-current-session-user.activity-C6S4ZJgp.mjs.map +1 -0
  45. package/fesm2022/acorex-connectivity-mock-get-current-user-manager.activity-C1mj2bgB.mjs +69 -0
  46. package/fesm2022/acorex-connectivity-mock-get-current-user-manager.activity-C1mj2bgB.mjs.map +1 -0
  47. package/fesm2022/{acorex-connectivity-mock-get-employee-list.query-Ch-Vh5GE.mjs → acorex-connectivity-mock-get-employee-list.query-DifHwuqH.mjs} +4 -4
  48. package/fesm2022/acorex-connectivity-mock-get-employee-list.query-DifHwuqH.mjs.map +1 -0
  49. package/fesm2022/{acorex-connectivity-mock-get-location-list.query-Xbc6d8kb.mjs → acorex-connectivity-mock-get-location-list.query-bMjkZnzq.mjs} +4 -4
  50. package/fesm2022/acorex-connectivity-mock-get-location-list.query-bMjkZnzq.mjs.map +1 -0
  51. package/fesm2022/{acorex-connectivity-mock-get-product-chart-data.query-m8_ME45B.mjs → acorex-connectivity-mock-get-product-chart-data.query-D7DBzLT-.mjs} +4 -4
  52. package/fesm2022/acorex-connectivity-mock-get-product-chart-data.query-D7DBzLT-.mjs.map +1 -0
  53. package/fesm2022/{acorex-connectivity-mock-get-product-list.query-DzkssYRw.mjs → acorex-connectivity-mock-get-product-list.query-f-mTj4ah.mjs} +16 -9
  54. package/fesm2022/acorex-connectivity-mock-get-product-list.query-f-mTj4ah.mjs.map +1 -0
  55. package/fesm2022/{acorex-connectivity-mock-get-product-pdf-data.query-wMD65pwR.mjs → acorex-connectivity-mock-get-product-pdf-data.query-Co1V52c4.mjs} +5 -5
  56. package/fesm2022/acorex-connectivity-mock-get-product-pdf-data.query-Co1V52c4.mjs.map +1 -0
  57. package/fesm2022/{acorex-connectivity-mock-get-subscriptions-chart-data.query-DBOT_0IN.mjs → acorex-connectivity-mock-get-subscriptions-chart-data.query-BQT5a_hn.mjs} +5 -5
  58. package/fesm2022/acorex-connectivity-mock-get-subscriptions-chart-data.query-BQT5a_hn.mjs.map +1 -0
  59. package/fesm2022/{acorex-connectivity-mock-get-subscriptions-timeline.query-DBEEbeiS.mjs → acorex-connectivity-mock-get-subscriptions-timeline.query-D4qfDfeV.mjs} +4 -4
  60. package/fesm2022/acorex-connectivity-mock-get-subscriptions-timeline.query-D4qfDfeV.mjs.map +1 -0
  61. package/fesm2022/{acorex-connectivity-mock-get-tenant-application-access.query-BM9toJ45.mjs → acorex-connectivity-mock-get-tenant-application-access.query-n1_Azada.mjs} +4 -4
  62. package/fesm2022/acorex-connectivity-mock-get-tenant-application-access.query-n1_Azada.mjs.map +1 -0
  63. package/fesm2022/{acorex-connectivity-mock-get-tenant-registration-chart-data.query-CACCBXn-.mjs → acorex-connectivity-mock-get-tenant-registration-chart-data.query-Cg4ykZU2.mjs} +5 -5
  64. package/fesm2022/acorex-connectivity-mock-get-tenant-registration-chart-data.query-Cg4ykZU2.mjs.map +1 -0
  65. package/fesm2022/{acorex-connectivity-mock-get-tenant-registration-timeline.query-CfDjhtaC.mjs → acorex-connectivity-mock-get-tenant-registration-timeline.query-0sCBtdbp.mjs} +4 -4
  66. package/fesm2022/acorex-connectivity-mock-get-tenant-registration-timeline.query-0sCBtdbp.mjs.map +1 -0
  67. package/fesm2022/{acorex-connectivity-mock-get-tenant-user-distribution.query-CZXvavUh.mjs → acorex-connectivity-mock-get-tenant-user-distribution.query-rD811gtM.mjs} +4 -4
  68. package/fesm2022/acorex-connectivity-mock-get-tenant-user-distribution.query-rD811gtM.mjs.map +1 -0
  69. package/fesm2022/acorex-connectivity-mock-if.activity-DvzuhItL.mjs +35 -0
  70. package/fesm2022/acorex-connectivity-mock-if.activity-DvzuhItL.mjs.map +1 -0
  71. package/fesm2022/acorex-connectivity-mock-notification-management-email-send.command-DAQfIWoD.mjs +73 -0
  72. package/fesm2022/acorex-connectivity-mock-notification-management-email-send.command-DAQfIWoD.mjs.map +1 -0
  73. package/fesm2022/acorex-connectivity-mock-notify-signers.activity-Dg0sKGip.mjs +49 -0
  74. package/fesm2022/acorex-connectivity-mock-notify-signers.activity-Dg0sKGip.mjs.map +1 -0
  75. package/fesm2022/acorex-connectivity-mock-request-signature.activity-CoRT_H2u.mjs +60 -0
  76. package/fesm2022/acorex-connectivity-mock-request-signature.activity-CoRT_H2u.mjs.map +1 -0
  77. package/fesm2022/{acorex-connectivity-mock-sample.command-CXz1poTn.mjs → acorex-connectivity-mock-sample.command-CJmDL4pL.mjs} +4 -4
  78. package/fesm2022/acorex-connectivity-mock-sample.command-CJmDL4pL.mjs.map +1 -0
  79. package/fesm2022/acorex-connectivity-mock-structured-text-completion.command-l31pjl9-.mjs +38 -0
  80. package/fesm2022/acorex-connectivity-mock-structured-text-completion.command-l31pjl9-.mjs.map +1 -0
  81. package/fesm2022/acorex-connectivity-mock-user-roles-for-list-column.query-BSN7vEKz.mjs +31 -0
  82. package/fesm2022/acorex-connectivity-mock-user-roles-for-list-column.query-BSN7vEKz.mjs.map +1 -0
  83. package/fesm2022/acorex-connectivity-mock-validate-all-signatures.activity-JuHjNFFS.mjs +61 -0
  84. package/fesm2022/acorex-connectivity-mock-validate-all-signatures.activity-JuHjNFFS.mjs.map +1 -0
  85. package/fesm2022/acorex-connectivity-mock.mjs +2 -51673
  86. package/fesm2022/acorex-connectivity-mock.mjs.map +1 -1
  87. package/fesm2022/acorex-connectivity-utils.mjs +7 -7
  88. package/fesm2022/acorex-connectivity-utils.mjs.map +1 -1
  89. package/fesm2022/acorex-connectivity.mjs.map +1 -1
  90. package/package.json +8 -7
  91. package/types/acorex-connectivity-mock.d.ts +4046 -0
  92. package/fesm2022/acorex-connectivity-api-execute.command-D2Q0ahw4.mjs.map +0 -1
  93. package/fesm2022/acorex-connectivity-mock-assign-to-manager.command-CzzTHBVX.mjs +0 -66
  94. package/fesm2022/acorex-connectivity-mock-assign-to-manager.command-CzzTHBVX.mjs.map +0 -1
  95. package/fesm2022/acorex-connectivity-mock-category-with-items.query-DWW7t6nc.mjs.map +0 -1
  96. package/fesm2022/acorex-connectivity-mock-check-permission.command-DFcxfjxp.mjs.map +0 -1
  97. package/fesm2022/acorex-connectivity-mock-complete-signature-process.command-BG_rxbUl.mjs +0 -80
  98. package/fesm2022/acorex-connectivity-mock-complete-signature-process.command-BG_rxbUl.mjs.map +0 -1
  99. package/fesm2022/acorex-connectivity-mock-distribution-record.command-BopU0LyU.mjs.map +0 -1
  100. package/fesm2022/acorex-connectivity-mock-get-application-versions-chart-data.query-uwDUrbFJ.mjs.map +0 -1
  101. package/fesm2022/acorex-connectivity-mock-get-application-versions-timeline.query-BHjQYTyZ.mjs.map +0 -1
  102. package/fesm2022/acorex-connectivity-mock-get-employee-list.query-Ch-Vh5GE.mjs.map +0 -1
  103. package/fesm2022/acorex-connectivity-mock-get-location-list.query-Xbc6d8kb.mjs.map +0 -1
  104. package/fesm2022/acorex-connectivity-mock-get-product-chart-data.query-m8_ME45B.mjs.map +0 -1
  105. package/fesm2022/acorex-connectivity-mock-get-product-list.query-DzkssYRw.mjs.map +0 -1
  106. package/fesm2022/acorex-connectivity-mock-get-product-pdf-data.query-wMD65pwR.mjs.map +0 -1
  107. package/fesm2022/acorex-connectivity-mock-get-subscriptions-chart-data.query-DBOT_0IN.mjs.map +0 -1
  108. package/fesm2022/acorex-connectivity-mock-get-subscriptions-timeline.query-DBEEbeiS.mjs.map +0 -1
  109. package/fesm2022/acorex-connectivity-mock-get-tenant-application-access.query-BM9toJ45.mjs.map +0 -1
  110. package/fesm2022/acorex-connectivity-mock-get-tenant-registration-chart-data.query-CACCBXn-.mjs.map +0 -1
  111. package/fesm2022/acorex-connectivity-mock-get-tenant-registration-timeline.query-CfDjhtaC.mjs.map +0 -1
  112. package/fesm2022/acorex-connectivity-mock-get-tenant-user-distribution.query-CZXvavUh.mjs.map +0 -1
  113. package/fesm2022/acorex-connectivity-mock-notify-signers.command-BV-b8NBg.mjs +0 -69
  114. package/fesm2022/acorex-connectivity-mock-notify-signers.command-BV-b8NBg.mjs.map +0 -1
  115. package/fesm2022/acorex-connectivity-mock-request-signature.command-DZyVnhAp.mjs +0 -72
  116. package/fesm2022/acorex-connectivity-mock-request-signature.command-DZyVnhAp.mjs.map +0 -1
  117. package/fesm2022/acorex-connectivity-mock-sample.command-CXz1poTn.mjs.map +0 -1
  118. package/fesm2022/acorex-connectivity-mock-validate-all-signatures.command-leYngRtS.mjs +0 -81
  119. package/fesm2022/acorex-connectivity-mock-validate-all-signatures.command-leYngRtS.mjs.map +0 -1
  120. package/mock/index.d.ts +0 -3022
  121. /package/{api/index.d.ts → types/acorex-connectivity-api.d.ts} +0 -0
  122. /package/{utils/index.d.ts → types/acorex-connectivity-utils.d.ts} +0 -0
  123. /package/{index.d.ts → types/acorex-connectivity.d.ts} +0 -0
@@ -0,0 +1,212 @@
1
+ import * as i0 from '@angular/core';
2
+ import { inject, Injectable } from '@angular/core';
3
+ import { RootConfig } from '@acorex/modules/human-capital-management';
4
+ import { RootConfig as RootConfig$2 } from '@acorex/modules/organization-management';
5
+ import { RootConfig as RootConfig$1 } from '@acorex/modules/person-core';
6
+ import { AXPSessionService } from '@acorex/platform/auth';
7
+ import { AXPEntityStorageService } from '@acorex/platform/layout/entity';
8
+ import { c as axcSyncSingleEmployeeDenormalizedOrgFields } from './acorex-connectivity-mock-acorex-connectivity-mock-BvDCXP5M.mjs';
9
+
10
+ const LEAVE_REQUEST_ENTITY = RootConfig.entities.leaveRequest.source;
11
+ const EMPLOYEE_ENTITY = RootConfig.entities.employee.source;
12
+ const PERSON_ENTITY = `${RootConfig$1.module.name}.${RootConfig$1.entities.person.name}`;
13
+ //#region ---- Helpers ----
14
+ /**
15
+ * Resolves a persisted FK or lookup snapshot to a scalar id (avoids `String([object Object])` from expanded rows).
16
+ */
17
+ function axcScalarEntityId(value) {
18
+ if (value == null || value === '') {
19
+ return null;
20
+ }
21
+ if (typeof value === 'string' || typeof value === 'number') {
22
+ const s = String(value).trim();
23
+ return s.length > 0 ? s : null;
24
+ }
25
+ if (typeof value === 'object' && value !== null && 'id' in value) {
26
+ const id = value.id;
27
+ if (id == null || id === '') {
28
+ return null;
29
+ }
30
+ const s = String(id).trim();
31
+ return s.length > 0 ? s : null;
32
+ }
33
+ return null;
34
+ }
35
+ /** Non-empty trimmed string or undefined (for optional workflow command inputs). */
36
+ function axcOptionalTrimmedString(raw) {
37
+ if (raw == null || raw === '') {
38
+ return undefined;
39
+ }
40
+ const s = typeof raw === 'string' ? raw.trim() : String(raw).trim();
41
+ return s.length > 0 ? s : undefined;
42
+ }
43
+ /**
44
+ * Assign To Manager Activity (Backend - Mock)
45
+ *
46
+ * Resolves the manager from `employeeId`, or from a leave request, or from the current user's employee when neither is set,
47
+ * recomputing `managerId` from position assignments / org chart in storage when the denormalized field is stale.
48
+ * Outputs the manager's **login user id** (from Employee or Person) for cartable `candidateUserIds` / human-task assignment.
49
+ *
50
+ * Execution Mode: backend
51
+ * Activity Type: workflow-activity:assign-to-manager
52
+ */
53
+ class AssignToManagerActivity {
54
+ constructor() {
55
+ this.entityStorage = inject(AXPEntityStorageService);
56
+ this.sessionService = inject(AXPSessionService);
57
+ }
58
+ /**
59
+ * Resolves login user id for an employee row (storage may omit `userId` while Person still links the account).
60
+ */
61
+ async resolveLoginUserIdForEmployeeRow(managerEmp) {
62
+ const direct = managerEmp?.userId != null && String(managerEmp.userId).trim() !== '' ? String(managerEmp.userId).trim() : null;
63
+ if (direct) {
64
+ return direct;
65
+ }
66
+ const personId = managerEmp?.personId != null && String(managerEmp.personId).trim() !== ''
67
+ ? String(managerEmp.personId).trim()
68
+ : null;
69
+ if (!personId) {
70
+ return null;
71
+ }
72
+ try {
73
+ const person = (await this.entityStorage.getOne(PERSON_ENTITY, personId));
74
+ const uid = person?.userId != null && String(person.userId).trim() !== '' ? String(person.userId).trim() : null;
75
+ return uid;
76
+ }
77
+ catch {
78
+ return null;
79
+ }
80
+ }
81
+ /**
82
+ * Persists org-derived manager + primary position for one employee, then returns the manager's user id when set.
83
+ */
84
+ async resolveManagerUserId(employeeId) {
85
+ await axcSyncSingleEmployeeDenormalizedOrgFields(this.entityStorage, RootConfig$2, RootConfig, String(employeeId), true);
86
+ const emp = (await this.entityStorage.getOne(EMPLOYEE_ENTITY, String(employeeId)));
87
+ const managerEmployeeId = emp?.managerId != null ? String(emp.managerId).trim() : '';
88
+ if (!managerEmployeeId) {
89
+ return null;
90
+ }
91
+ const managerEmp = (await this.entityStorage.getOne(EMPLOYEE_ENTITY, managerEmployeeId));
92
+ return this.resolveLoginUserIdForEmployeeRow(managerEmp);
93
+ }
94
+ async findEmployeeIdByUserId(userId) {
95
+ try {
96
+ const result = await this.entityStorage.query(EMPLOYEE_ENTITY, {
97
+ skip: 0,
98
+ take: 1,
99
+ filter: {
100
+ field: 'userId',
101
+ operator: { type: 'equal' },
102
+ value: userId,
103
+ },
104
+ });
105
+ const row = result.items?.[0];
106
+ return row?.id != null ? String(row.id) : null;
107
+ }
108
+ catch {
109
+ return null;
110
+ }
111
+ }
112
+ async execute(input) {
113
+ const leaveRequestId = axcOptionalTrimmedString(input.leaveRequestId);
114
+ let managerId = null;
115
+ let employee = { displayName: '' };
116
+ let subjectEmployeeId = null;
117
+ const employeeIdFromInput = axcScalarEntityId(input.employeeId);
118
+ if (employeeIdFromInput) {
119
+ subjectEmployeeId = employeeIdFromInput;
120
+ try {
121
+ const emp = (await this.entityStorage.getOne(EMPLOYEE_ENTITY, subjectEmployeeId));
122
+ if (emp) {
123
+ employee = {
124
+ displayName: emp.person?.displayName ?? emp.displayName ?? '',
125
+ ...emp,
126
+ };
127
+ }
128
+ managerId = await this.resolveManagerUserId(subjectEmployeeId);
129
+ }
130
+ catch {
131
+ // keep defaults
132
+ }
133
+ }
134
+ else if (leaveRequestId) {
135
+ try {
136
+ const leaveRequest = (await this.entityStorage.getOne(LEAVE_REQUEST_ENTITY, leaveRequestId));
137
+ subjectEmployeeId =
138
+ axcScalarEntityId(leaveRequest?.employeeId) ??
139
+ axcScalarEntityId(leaveRequest.employee) ??
140
+ null;
141
+ if (subjectEmployeeId) {
142
+ const emp = (await this.entityStorage.getOne(EMPLOYEE_ENTITY, subjectEmployeeId));
143
+ if (emp) {
144
+ employee = {
145
+ displayName: emp.person?.displayName ?? emp.displayName ?? '',
146
+ ...emp,
147
+ };
148
+ }
149
+ managerId = await this.resolveManagerUserId(subjectEmployeeId);
150
+ }
151
+ if (!employee.displayName && leaveRequest) {
152
+ employee = {
153
+ displayName: leaveRequest.employeeName ??
154
+ leaveRequest.employee
155
+ ?.person?.displayName ??
156
+ leaveRequest.employee?.displayName ??
157
+ '',
158
+ ...(leaveRequest.employee ?? {}),
159
+ };
160
+ }
161
+ }
162
+ catch {
163
+ // keep defaults
164
+ }
165
+ }
166
+ const sessionUserId = this.sessionService.user?.id;
167
+ if (managerId == null && sessionUserId && !subjectEmployeeId) {
168
+ const initiatorEmployeeId = await this.findEmployeeIdByUserId(String(sessionUserId));
169
+ if (initiatorEmployeeId) {
170
+ try {
171
+ const emp = (await this.entityStorage.getOne(EMPLOYEE_ENTITY, initiatorEmployeeId));
172
+ if (emp) {
173
+ employee = {
174
+ displayName: emp.person?.displayName ?? emp.displayName ?? '',
175
+ ...emp,
176
+ };
177
+ }
178
+ }
179
+ catch {
180
+ // ignore
181
+ }
182
+ managerId = await this.resolveManagerUserId(initiatorEmployeeId);
183
+ }
184
+ }
185
+ const fallbackUserId = axcScalarEntityId(input.fallbackUserId);
186
+ if (managerId == null && fallbackUserId) {
187
+ managerId = fallbackUserId;
188
+ }
189
+ return {
190
+ success: true,
191
+ data: {
192
+ managerId,
193
+ employee,
194
+ leaveRequestId: leaveRequestId ?? undefined,
195
+ },
196
+ metadata: {
197
+ outcome: 'done',
198
+ },
199
+ };
200
+ }
201
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AssignToManagerActivity, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
202
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AssignToManagerActivity, providedIn: 'root' }); }
203
+ }
204
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AssignToManagerActivity, decorators: [{
205
+ type: Injectable,
206
+ args: [{
207
+ providedIn: 'root',
208
+ }]
209
+ }] });
210
+
211
+ export { AssignToManagerActivity };
212
+ //# sourceMappingURL=acorex-connectivity-mock-assign-to-manager.activity-DQRHQ_jG.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"acorex-connectivity-mock-assign-to-manager.activity-DQRHQ_jG.mjs","sources":["../../../../libs/connectivity/mock/src/lib/workflow-management/activities/assign-to-manager.activity.ts"],"sourcesContent":["import { inject, Injectable } from '@angular/core';\nimport { RootConfig as HcmRootConfig } from '@acorex/modules/human-capital-management';\nimport { RootConfig as OrgRootConfig } from '@acorex/modules/organization-management';\nimport { RootConfig as PersonRootConfig } from '@acorex/modules/person-core';\nimport { AXPSessionService } from '@acorex/platform/auth';\nimport { AXPExecuteCommandResult } from '@acorex/platform/core';\nimport { AXPEntityStorageService } from '@acorex/platform/layout/entity';\nimport { AXPCommand } from '@acorex/platform/runtime';\nimport { axcSyncSingleEmployeeDenormalizedOrgFields } from '../../organization-management/org-chart/employee-manager-resolution';\n\nconst LEAVE_REQUEST_ENTITY = HcmRootConfig.entities.leaveRequest.source;\nconst EMPLOYEE_ENTITY = HcmRootConfig.entities.employee.source;\nconst PERSON_ENTITY = `${PersonRootConfig.module.name}.${PersonRootConfig.entities.person.name}`;\n\n//#region ---- Helpers ----\n\n/**\n * Resolves a persisted FK or lookup snapshot to a scalar id (avoids `String([object Object])` from expanded rows).\n */\nfunction axcScalarEntityId(value: unknown): string | null {\n if (value == null || value === '') {\n return null;\n }\n if (typeof value === 'string' || typeof value === 'number') {\n const s = String(value).trim();\n return s.length > 0 ? s : null;\n }\n if (typeof value === 'object' && value !== null && 'id' in value) {\n const id = (value as { id: unknown }).id;\n if (id == null || id === '') {\n return null;\n }\n const s = String(id).trim();\n return s.length > 0 ? s : null;\n }\n return null;\n}\n\n/** Non-empty trimmed string or undefined (for optional workflow command inputs). */\nfunction axcOptionalTrimmedString(raw: unknown): string | undefined {\n if (raw == null || raw === '') {\n return undefined;\n }\n const s = typeof raw === 'string' ? raw.trim() : String(raw).trim();\n return s.length > 0 ? s : undefined;\n}\n\n//#endregion\n\nexport interface AssignToManagerInput {\n /** When set, resolves the subject employee from HumanCapitalManagement.LeaveRequest. */\n leaveRequestId?: string;\n /** When set (scalar or `{ id }`), resolves manager for this employee directly (takes precedence over `leaveRequestId`). */\n employeeId?: unknown;\n /** When org manager cannot be resolved, this platform user id is returned as `managerId` (e.g. initiator for review fallback). */\n fallbackUserId?: unknown;\n}\n\nexport interface AssignToManagerOutput {\n managerId: string | null;\n employee: { displayName: string; [key: string]: unknown };\n leaveRequestId?: string;\n}\n\n/**\n * Assign To Manager Activity (Backend - Mock)\n *\n * Resolves the manager from `employeeId`, or from a leave request, or from the current user's employee when neither is set,\n * recomputing `managerId` from position assignments / org chart in storage when the denormalized field is stale.\n * Outputs the manager's **login user id** (from Employee or Person) for cartable `candidateUserIds` / human-task assignment.\n *\n * Execution Mode: backend\n * Activity Type: workflow-activity:assign-to-manager\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class AssignToManagerActivity implements AXPCommand<AssignToManagerInput, AssignToManagerOutput> {\n private readonly entityStorage = inject(AXPEntityStorageService);\n private readonly sessionService = inject(AXPSessionService);\n\n /**\n * Resolves login user id for an employee row (storage may omit `userId` while Person still links the account).\n */\n private async resolveLoginUserIdForEmployeeRow(\n managerEmp: { userId?: string | null; personId?: string | null } | null,\n ): Promise<string | null> {\n const direct =\n managerEmp?.userId != null && String(managerEmp.userId).trim() !== '' ? String(managerEmp.userId).trim() : null;\n if (direct) {\n return direct;\n }\n const personId =\n managerEmp?.personId != null && String(managerEmp.personId).trim() !== ''\n ? String(managerEmp.personId).trim()\n : null;\n if (!personId) {\n return null;\n }\n try {\n const person = (await this.entityStorage.getOne(PERSON_ENTITY, personId)) as { userId?: string | null } | null;\n const uid =\n person?.userId != null && String(person.userId).trim() !== '' ? String(person.userId).trim() : null;\n return uid;\n } catch {\n return null;\n }\n }\n\n /**\n * Persists org-derived manager + primary position for one employee, then returns the manager's user id when set.\n */\n private async resolveManagerUserId(employeeId: string): Promise<string | null> {\n await axcSyncSingleEmployeeDenormalizedOrgFields(\n this.entityStorage,\n OrgRootConfig,\n HcmRootConfig,\n String(employeeId),\n true,\n );\n const emp = (await this.entityStorage.getOne(EMPLOYEE_ENTITY, String(employeeId))) as {\n managerId?: string | null;\n } | null;\n const managerEmployeeId = emp?.managerId != null ? String(emp.managerId).trim() : '';\n if (!managerEmployeeId) {\n return null;\n }\n const managerEmp = (await this.entityStorage.getOne(EMPLOYEE_ENTITY, managerEmployeeId)) as {\n userId?: string | null;\n personId?: string | null;\n } | null;\n return this.resolveLoginUserIdForEmployeeRow(managerEmp);\n }\n\n private async findEmployeeIdByUserId(userId: string): Promise<string | null> {\n try {\n const result = await this.entityStorage.query(EMPLOYEE_ENTITY, {\n skip: 0,\n take: 1,\n filter: {\n field: 'userId',\n operator: { type: 'equal' },\n value: userId,\n },\n });\n const row = result.items?.[0] as { id?: string } | undefined;\n return row?.id != null ? String(row.id) : null;\n } catch {\n return null;\n }\n }\n\n async execute(input: AssignToManagerInput): Promise<AXPExecuteCommandResult<AssignToManagerOutput>> {\n const leaveRequestId = axcOptionalTrimmedString(input.leaveRequestId);\n\n let managerId: string | null = null;\n let employee: AssignToManagerOutput['employee'] = { displayName: '' };\n\n let subjectEmployeeId: string | null = null;\n\n const employeeIdFromInput = axcScalarEntityId(input.employeeId);\n\n if (employeeIdFromInput) {\n subjectEmployeeId = employeeIdFromInput;\n try {\n const emp = (await this.entityStorage.getOne(EMPLOYEE_ENTITY, subjectEmployeeId)) as {\n managerId?: string;\n userId?: string;\n displayName?: string;\n person?: { displayName?: string };\n } | null;\n if (emp) {\n employee = {\n displayName: emp.person?.displayName ?? emp.displayName ?? '',\n ...emp,\n };\n }\n managerId = await this.resolveManagerUserId(subjectEmployeeId);\n } catch {\n // keep defaults\n }\n } else if (leaveRequestId) {\n try {\n const leaveRequest = (await this.entityStorage.getOne(LEAVE_REQUEST_ENTITY, leaveRequestId)) as {\n employeeId?: string;\n employee?: unknown;\n employeeName?: string;\n } | null;\n\n subjectEmployeeId =\n axcScalarEntityId(leaveRequest?.employeeId) ??\n axcScalarEntityId((leaveRequest as { employee?: unknown }).employee) ??\n null;\n\n if (subjectEmployeeId) {\n const emp = (await this.entityStorage.getOne(EMPLOYEE_ENTITY, subjectEmployeeId)) as {\n managerId?: string;\n userId?: string;\n displayName?: string;\n person?: { displayName?: string };\n } | null;\n if (emp) {\n employee = {\n displayName: emp.person?.displayName ?? emp.displayName ?? '',\n ...emp,\n };\n }\n managerId = await this.resolveManagerUserId(subjectEmployeeId);\n }\n\n if (!employee.displayName && leaveRequest) {\n employee = {\n displayName:\n (leaveRequest as { employeeName?: string }).employeeName ??\n (leaveRequest as { employee?: { person?: { displayName?: string }; displayName?: string } }).employee\n ?.person?.displayName ??\n (leaveRequest as { employee?: { displayName?: string } }).employee?.displayName ??\n '',\n ...((leaveRequest as { employee?: object }).employee ?? {}),\n };\n }\n } catch {\n // keep defaults\n }\n }\n\n const sessionUserId = this.sessionService.user?.id;\n if (managerId == null && sessionUserId && !subjectEmployeeId) {\n const initiatorEmployeeId = await this.findEmployeeIdByUserId(String(sessionUserId));\n if (initiatorEmployeeId) {\n try {\n const emp = (await this.entityStorage.getOne(EMPLOYEE_ENTITY, initiatorEmployeeId)) as {\n displayName?: string;\n person?: { displayName?: string };\n } | null;\n if (emp) {\n employee = {\n displayName: emp.person?.displayName ?? emp.displayName ?? '',\n ...emp,\n };\n }\n } catch {\n // ignore\n }\n managerId = await this.resolveManagerUserId(initiatorEmployeeId);\n }\n }\n\n const fallbackUserId = axcScalarEntityId(input.fallbackUserId);\n if (managerId == null && fallbackUserId) {\n managerId = fallbackUserId;\n }\n\n return {\n success: true,\n data: {\n managerId,\n employee,\n leaveRequestId: leaveRequestId ?? undefined,\n },\n metadata: {\n outcome: 'done',\n },\n };\n }\n}\n"],"names":["HcmRootConfig","PersonRootConfig","OrgRootConfig"],"mappings":";;;;;;;;;AAUA,MAAM,oBAAoB,GAAGA,UAAa,CAAC,QAAQ,CAAC,YAAY,CAAC,MAAM;AACvE,MAAM,eAAe,GAAGA,UAAa,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM;AAC9D,MAAM,aAAa,GAAG,CAAA,EAAGC,YAAgB,CAAC,MAAM,CAAC,IAAI,CAAA,CAAA,EAAIA,YAAgB,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE;AAEhG;AAEA;;AAEG;AACH,SAAS,iBAAiB,CAAC,KAAc,EAAA;IACvC,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,KAAK,EAAE,EAAE;AACjC,QAAA,OAAO,IAAI;IACb;IACA,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;QAC1D,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE;AAC9B,QAAA,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI;IAChC;AACA,IAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,IAAI,IAAI,KAAK,EAAE;AAChE,QAAA,MAAM,EAAE,GAAI,KAAyB,CAAC,EAAE;QACxC,IAAI,EAAE,IAAI,IAAI,IAAI,EAAE,KAAK,EAAE,EAAE;AAC3B,YAAA,OAAO,IAAI;QACb;QACA,MAAM,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE;AAC3B,QAAA,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI;IAChC;AACA,IAAA,OAAO,IAAI;AACb;AAEA;AACA,SAAS,wBAAwB,CAAC,GAAY,EAAA;IAC5C,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,KAAK,EAAE,EAAE;AAC7B,QAAA,OAAO,SAAS;IAClB;IACA,MAAM,CAAC,GAAG,OAAO,GAAG,KAAK,QAAQ,GAAG,GAAG,CAAC,IAAI,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE;AACnE,IAAA,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,GAAG,SAAS;AACrC;AAmBA;;;;;;;;;AASG;MAIU,uBAAuB,CAAA;AAHpC,IAAA,WAAA,GAAA;AAImB,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,uBAAuB,CAAC;AAC/C,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,iBAAiB,CAAC;AA0L5D,IAAA;AAxLC;;AAEG;IACK,MAAM,gCAAgC,CAC5C,UAAuE,EAAA;AAEvE,QAAA,MAAM,MAAM,GACV,UAAU,EAAE,MAAM,IAAI,IAAI,IAAI,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,GAAG,IAAI;QACjH,IAAI,MAAM,EAAE;AACV,YAAA,OAAO,MAAM;QACf;AACA,QAAA,MAAM,QAAQ,GACZ,UAAU,EAAE,QAAQ,IAAI,IAAI,IAAI,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAE,KAAK;cACnE,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,IAAI;cAChC,IAAI;QACV,IAAI,CAAC,QAAQ,EAAE;AACb,YAAA,OAAO,IAAI;QACb;AACA,QAAA,IAAI;AACF,YAAA,MAAM,MAAM,IAAI,MAAM,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAsC;AAC9G,YAAA,MAAM,GAAG,GACP,MAAM,EAAE,MAAM,IAAI,IAAI,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,GAAG,IAAI;AACrG,YAAA,OAAO,GAAG;QACZ;AAAE,QAAA,MAAM;AACN,YAAA,OAAO,IAAI;QACb;IACF;AAEA;;AAEG;IACK,MAAM,oBAAoB,CAAC,UAAkB,EAAA;AACnD,QAAA,MAAM,0CAA0C,CAC9C,IAAI,CAAC,aAAa,EAClBC,YAAa,EACbF,UAAa,EACb,MAAM,CAAC,UAAU,CAAC,EAClB,IAAI,CACL;AACD,QAAA,MAAM,GAAG,IAAI,MAAM,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,eAAe,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC,CAEzE;QACR,MAAM,iBAAiB,GAAG,GAAG,EAAE,SAAS,IAAI,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE;QACpF,IAAI,CAAC,iBAAiB,EAAE;AACtB,YAAA,OAAO,IAAI;QACb;AACA,QAAA,MAAM,UAAU,IAAI,MAAM,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,eAAe,EAAE,iBAAiB,CAAC,CAG/E;AACR,QAAA,OAAO,IAAI,CAAC,gCAAgC,CAAC,UAAU,CAAC;IAC1D;IAEQ,MAAM,sBAAsB,CAAC,MAAc,EAAA;AACjD,QAAA,IAAI;YACF,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,eAAe,EAAE;AAC7D,gBAAA,IAAI,EAAE,CAAC;AACP,gBAAA,IAAI,EAAE,CAAC;AACP,gBAAA,MAAM,EAAE;AACN,oBAAA,KAAK,EAAE,QAAQ;AACf,oBAAA,QAAQ,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE;AAC3B,oBAAA,KAAK,EAAE,MAAM;AACd,iBAAA;AACF,aAAA,CAAC;YACF,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,GAAG,CAAC,CAAgC;AAC5D,YAAA,OAAO,GAAG,EAAE,EAAE,IAAI,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI;QAChD;AAAE,QAAA,MAAM;AACN,YAAA,OAAO,IAAI;QACb;IACF;IAEA,MAAM,OAAO,CAAC,KAA2B,EAAA;QACvC,MAAM,cAAc,GAAG,wBAAwB,CAAC,KAAK,CAAC,cAAc,CAAC;QAErE,IAAI,SAAS,GAAkB,IAAI;AACnC,QAAA,IAAI,QAAQ,GAAsC,EAAE,WAAW,EAAE,EAAE,EAAE;QAErE,IAAI,iBAAiB,GAAkB,IAAI;QAE3C,MAAM,mBAAmB,GAAG,iBAAiB,CAAC,KAAK,CAAC,UAAU,CAAC;QAE/D,IAAI,mBAAmB,EAAE;YACvB,iBAAiB,GAAG,mBAAmB;AACvC,YAAA,IAAI;AACF,gBAAA,MAAM,GAAG,IAAI,MAAM,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,eAAe,EAAE,iBAAiB,CAAC,CAKxE;gBACR,IAAI,GAAG,EAAE;AACP,oBAAA,QAAQ,GAAG;wBACT,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,IAAI,GAAG,CAAC,WAAW,IAAI,EAAE;AAC7D,wBAAA,GAAG,GAAG;qBACP;gBACH;gBACA,SAAS,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,iBAAiB,CAAC;YAChE;AAAE,YAAA,MAAM;;YAER;QACF;aAAO,IAAI,cAAc,EAAE;AACzB,YAAA,IAAI;AACF,gBAAA,MAAM,YAAY,IAAI,MAAM,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,oBAAoB,EAAE,cAAc,CAAC,CAInF;gBAER,iBAAiB;AACf,oBAAA,iBAAiB,CAAC,YAAY,EAAE,UAAU,CAAC;AAC3C,wBAAA,iBAAiB,CAAE,YAAuC,CAAC,QAAQ,CAAC;AACpE,wBAAA,IAAI;gBAEN,IAAI,iBAAiB,EAAE;AACrB,oBAAA,MAAM,GAAG,IAAI,MAAM,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,eAAe,EAAE,iBAAiB,CAAC,CAKxE;oBACR,IAAI,GAAG,EAAE;AACP,wBAAA,QAAQ,GAAG;4BACT,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,IAAI,GAAG,CAAC,WAAW,IAAI,EAAE;AAC7D,4BAAA,GAAG,GAAG;yBACP;oBACH;oBACA,SAAS,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,iBAAiB,CAAC;gBAChE;AAEA,gBAAA,IAAI,CAAC,QAAQ,CAAC,WAAW,IAAI,YAAY,EAAE;AACzC,oBAAA,QAAQ,GAAG;wBACT,WAAW,EACR,YAA0C,CAAC,YAAY;AACvD,4BAAA,YAA2F,CAAC;kCACzF,MAAM,EAAE,WAAW;4BACtB,YAAwD,CAAC,QAAQ,EAAE,WAAW;4BAC/E,EAAE;AACJ,wBAAA,IAAK,YAAsC,CAAC,QAAQ,IAAI,EAAE,CAAC;qBAC5D;gBACH;YACF;AAAE,YAAA,MAAM;;YAER;QACF;QAEA,MAAM,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,EAAE;QAClD,IAAI,SAAS,IAAI,IAAI,IAAI,aAAa,IAAI,CAAC,iBAAiB,EAAE;AAC5D,YAAA,MAAM,mBAAmB,GAAG,MAAM,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;YACpF,IAAI,mBAAmB,EAAE;AACvB,gBAAA,IAAI;AACF,oBAAA,MAAM,GAAG,IAAI,MAAM,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,eAAe,EAAE,mBAAmB,CAAC,CAG1E;oBACR,IAAI,GAAG,EAAE;AACP,wBAAA,QAAQ,GAAG;4BACT,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,IAAI,GAAG,CAAC,WAAW,IAAI,EAAE;AAC7D,4BAAA,GAAG,GAAG;yBACP;oBACH;gBACF;AAAE,gBAAA,MAAM;;gBAER;gBACA,SAAS,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,mBAAmB,CAAC;YAClE;QACF;QAEA,MAAM,cAAc,GAAG,iBAAiB,CAAC,KAAK,CAAC,cAAc,CAAC;AAC9D,QAAA,IAAI,SAAS,IAAI,IAAI,IAAI,cAAc,EAAE;YACvC,SAAS,GAAG,cAAc;QAC5B;QAEA,OAAO;AACL,YAAA,OAAO,EAAE,IAAI;AACb,YAAA,IAAI,EAAE;gBACJ,SAAS;gBACT,QAAQ;gBACR,cAAc,EAAE,cAAc,IAAI,SAAS;AAC5C,aAAA;AACD,YAAA,QAAQ,EAAE;AACR,gBAAA,OAAO,EAAE,MAAM;AAChB,aAAA;SACF;IACH;8GA3LW,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAvB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,uBAAuB,cAFtB,MAAM,EAAA,CAAA,CAAA;;2FAEP,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAHnC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;;;"}
@@ -0,0 +1,198 @@
1
+ import { AXMMetaDataDefinitionService, META_DATA_SELECTOR_FIELD } from '@acorex/modules/data-management';
2
+ import { AXMEntityCrudServiceImpl } from '@acorex/platform/layout/entity';
3
+ import * as i0 from '@angular/core';
4
+ import { inject, Injector, runInInjectionContext, Injectable } from '@angular/core';
5
+ import { get } from 'lodash-es';
6
+
7
+ class AXCQueryCategoryMetadataInheritanceQuery {
8
+ constructor() {
9
+ this.injector = inject(Injector);
10
+ this.metaDataService = inject(AXMMetaDataDefinitionService);
11
+ }
12
+ async fetch(params) {
13
+ const { entityName, categoryId } = params;
14
+ //1a25158a-3e0f-4e9c-bdc2-d6cc0ece86ba
15
+ const service = runInInjectionContext(this.injector, () => new AXMEntityCrudServiceImpl(`${params.entityName}Category`));
16
+ // Find the category by ID
17
+ const category = await this.findCategoryById(categoryId, service);
18
+ if (!category) {
19
+ throw new Error(`Category with ID ${categoryId} not found`);
20
+ }
21
+ // Build the hierarchy (traverse up to root)
22
+ const hierarchy = await this.buildCategoryHierarchy(category, service);
23
+ // Collect and merge groups from all categories in hierarchy
24
+ const mergedGroups = this.mergeMetadataGroupsFromHierarchy(hierarchy);
25
+ return mergedGroups;
26
+ }
27
+ async findCategoryById(categoryId, service) {
28
+ try {
29
+ const result = await service.query({
30
+ filter: {
31
+ logic: 'and',
32
+ filters: [
33
+ {
34
+ field: 'id',
35
+ operator: {
36
+ type: 'equal',
37
+ },
38
+ value: categoryId,
39
+ },
40
+ ],
41
+ },
42
+ take: 1,
43
+ skip: 0,
44
+ });
45
+ return result.items.length > 0 ? result.items[0] : null;
46
+ }
47
+ catch (error) {
48
+ console.error('Error finding category by ID:', error);
49
+ return null;
50
+ }
51
+ }
52
+ async buildCategoryHierarchy(category, service) {
53
+ const hierarchy = [category];
54
+ let currentCategory = category;
55
+ // Traverse up the parent hierarchy
56
+ while (currentCategory.parentId) {
57
+ try {
58
+ const parentResult = await service.query({
59
+ filter: {
60
+ logic: 'and',
61
+ filters: [
62
+ {
63
+ field: 'id',
64
+ operator: {
65
+ type: 'equal',
66
+ },
67
+ value: currentCategory.parentId,
68
+ },
69
+ ],
70
+ },
71
+ take: 1,
72
+ skip: 0,
73
+ });
74
+ if (parentResult.items.length > 0) {
75
+ const parent = parentResult.items[0];
76
+ hierarchy.unshift(parent); // Add to beginning to maintain hierarchy order
77
+ currentCategory = parent;
78
+ }
79
+ else {
80
+ break; // Parent not found, stop traversal
81
+ }
82
+ }
83
+ catch (error) {
84
+ console.error('Error finding parent category:', error);
85
+ break;
86
+ }
87
+ }
88
+ return hierarchy;
89
+ }
90
+ /**
91
+ * Merge metadata groups from category hierarchy, preserving group structure
92
+ * Groups are merged by name, with fields from child categories taking precedence
93
+ */
94
+ mergeMetadataGroupsFromHierarchy(hierarchy) {
95
+ const groupsMap = new Map();
96
+ const seenFieldIds = new Set();
97
+ // Process hierarchy from root to leaf (child categories override parent fields)
98
+ for (const category of hierarchy) {
99
+ // Type: AXMMetaDataBuilderValue from @acorex/modules/data-management
100
+ const metaDataList = get(category, META_DATA_SELECTOR_FIELD);
101
+ if (!metaDataList || !metaDataList.groups || !Array.isArray(metaDataList.groups)) {
102
+ continue;
103
+ }
104
+ // Process each group in the category's metadata
105
+ for (const group of metaDataList.groups) {
106
+ const groupName = group.name || 'default';
107
+ // Get or create group
108
+ if (!groupsMap.has(groupName)) {
109
+ groupsMap.set(groupName, {
110
+ name: groupName,
111
+ title: group.title,
112
+ description: group.description,
113
+ order: group.order ?? 0,
114
+ fields: [],
115
+ });
116
+ }
117
+ const mergedGroup = groupsMap.get(groupName);
118
+ // Process fields in this group
119
+ if (group.fields && Array.isArray(group.fields)) {
120
+ for (const field of group.fields) {
121
+ // Skip if we've already seen this field (child categories override)
122
+ if (seenFieldIds.has(field.id)) {
123
+ // Remove existing field and add new one (child overrides parent)
124
+ mergedGroup.fields = mergedGroup.fields.filter(f => f.id !== field.id);
125
+ }
126
+ // Add field to merged group
127
+ // Ensure title is always present (use name as fallback)
128
+ mergedGroup.fields.push({
129
+ id: field.id,
130
+ name: field.name,
131
+ title: field.title || field.name || 'Untitled Field',
132
+ description: field.description,
133
+ interface: field.interface,
134
+ configuration: field.configuration,
135
+ order: field.order ?? mergedGroup.fields.length,
136
+ });
137
+ seenFieldIds.add(field.id);
138
+ }
139
+ }
140
+ }
141
+ }
142
+ // Convert map to array and sort by order
143
+ const result = Array.from(groupsMap.values())
144
+ .sort((a, b) => (a.order ?? 0) - (b.order ?? 0))
145
+ .map(group => ({
146
+ ...group,
147
+ fields: group.fields.sort((a, b) => (a.order ?? 0) - (b.order ?? 0)),
148
+ }));
149
+ return result;
150
+ }
151
+ async collectInheritedMetadata(hierarchy) {
152
+ const allMetadata = [];
153
+ const seenMetadataIds = new Set();
154
+ // Collect metadata from each level in the hierarchy
155
+ for (const category of hierarchy) {
156
+ try {
157
+ const metadataResult = await this.metaDataService.query({
158
+ filter: {
159
+ logic: 'and',
160
+ filters: [
161
+ {
162
+ field: 'categoryIds',
163
+ operator: {
164
+ type: 'contains',
165
+ },
166
+ value: category.id,
167
+ },
168
+ ],
169
+ },
170
+ take: 1000,
171
+ skip: 0,
172
+ });
173
+ // Add metadata fields that haven't been seen before (avoid duplicates)
174
+ for (const metadata of metadataResult.items) {
175
+ if (!seenMetadataIds.has(metadata.id)) {
176
+ allMetadata.push(metadata);
177
+ seenMetadataIds.add(metadata.id);
178
+ }
179
+ }
180
+ }
181
+ catch (error) {
182
+ console.error(`Error collecting metadata for category ${category.id}:`, error);
183
+ }
184
+ }
185
+ return allMetadata;
186
+ }
187
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXCQueryCategoryMetadataInheritanceQuery, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
188
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXCQueryCategoryMetadataInheritanceQuery, providedIn: 'root' }); }
189
+ }
190
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXCQueryCategoryMetadataInheritanceQuery, decorators: [{
191
+ type: Injectable,
192
+ args: [{
193
+ providedIn: 'root'
194
+ }]
195
+ }] });
196
+
197
+ export { AXCQueryCategoryMetadataInheritanceQuery };
198
+ //# sourceMappingURL=acorex-connectivity-mock-category-metadata-inheritance.query-CWRL1dTa.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"acorex-connectivity-mock-category-metadata-inheritance.query-CWRL1dTa.mjs","sources":["../../../../libs/connectivity/mock/src/lib/data-management/metadata/queries/category-metadata-inheritance.query.ts"],"sourcesContent":["import {\n AXMMetaDataDefinitionEntityModel,\n AXMMetaDataDefinitionService,\n META_DATA_SELECTOR_FIELD,\n RootConfig,\n} from '@acorex/modules/data-management';\nimport { AXPCategoryEntity } from '@acorex/platform/core';\nimport { AXMEntityCrudServiceImpl } from '@acorex/platform/layout/entity';\nimport { AXPQuery } from '@acorex/platform/runtime';\nimport { inject, Injectable, Injector, runInInjectionContext } from '@angular/core';\nimport { get } from 'lodash-es';\n\nexport interface CategoryMetadataInheritanceQueryParams {\n entityName: string;\n categoryId: string;\n}\n\n/**\n * Result structure that preserves groups organization\n */\nexport interface CategoryMetadataInheritanceGroupResult {\n name: string;\n title?: string;\n description?: string;\n order: number;\n fields: Array<{\n id: string;\n name: string;\n title: string;\n description?: string;\n interface: string;\n configuration?: any;\n defaultValue?: any;\n order: number;\n }>;\n}\n\nexport type CategoryMetadataInheritanceResult = CategoryMetadataInheritanceGroupResult[];\n\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AXCQueryCategoryMetadataInheritanceQuery implements AXPQuery<CategoryMetadataInheritanceQueryParams, CategoryMetadataInheritanceResult> {\n\n private injector = inject(Injector);\n\n private metaDataService = inject(AXMMetaDataDefinitionService);\n\n async fetch(params: CategoryMetadataInheritanceQueryParams): Promise<CategoryMetadataInheritanceResult> {\n const { entityName, categoryId } = params;\n //1a25158a-3e0f-4e9c-bdc2-d6cc0ece86ba\n const service = runInInjectionContext(this.injector, () => new AXMEntityCrudServiceImpl<any, any>(`${params.entityName}Category`));\n // Find the category by ID\n const category = await this.findCategoryById(categoryId, service);\n if (!category) {\n throw new Error(`Category with ID ${categoryId} not found`);\n }\n\n // Build the hierarchy (traverse up to root)\n const hierarchy = await this.buildCategoryHierarchy(category, service);\n\n // Collect and merge groups from all categories in hierarchy\n const mergedGroups = this.mergeMetadataGroupsFromHierarchy(hierarchy);\n return mergedGroups;\n }\n\n private async findCategoryById(categoryId: string, service: any): Promise<AXPCategoryEntity | null> {\n try {\n const result = await service.query({\n filter: {\n logic: 'and',\n filters: [\n {\n field: 'id',\n operator: {\n type: 'equal',\n },\n value: categoryId,\n },\n ],\n },\n take: 1,\n skip: 0,\n });\n\n return result.items.length > 0 ? result.items[0] : null;\n } catch (error) {\n console.error('Error finding category by ID:', error);\n return null;\n }\n }\n\n private async buildCategoryHierarchy(category: AXPCategoryEntity, service: any): Promise<AXPCategoryEntity[]> {\n const hierarchy: AXPCategoryEntity[] = [category];\n let currentCategory = category;\n\n // Traverse up the parent hierarchy\n while (currentCategory.parentId) {\n try {\n const parentResult = await service.query({\n filter: {\n logic: 'and',\n filters: [\n {\n field: 'id',\n operator: {\n type: 'equal',\n },\n value: currentCategory.parentId,\n },\n ],\n },\n take: 1,\n skip: 0,\n });\n\n if (parentResult.items.length > 0) {\n const parent = parentResult.items[0];\n hierarchy.unshift(parent); // Add to beginning to maintain hierarchy order\n currentCategory = parent;\n } else {\n break; // Parent not found, stop traversal\n }\n } catch (error) {\n console.error('Error finding parent category:', error);\n break;\n }\n }\n\n return hierarchy;\n }\n\n /**\n * Merge metadata groups from category hierarchy, preserving group structure\n * Groups are merged by name, with fields from child categories taking precedence\n */\n private mergeMetadataGroupsFromHierarchy(hierarchy: AXPCategoryEntity[]): CategoryMetadataInheritanceResult {\n const groupsMap = new Map<string, CategoryMetadataInheritanceGroupResult>();\n const seenFieldIds = new Set<string>();\n\n // Process hierarchy from root to leaf (child categories override parent fields)\n for (const category of hierarchy) {\n // Type: AXMMetaDataBuilderValue from @acorex/modules/data-management\n const metaDataList = get(category, META_DATA_SELECTOR_FIELD) as {\n groups?: Array<{\n name: string;\n title?: string;\n description?: string;\n order: number;\n fields?: Array<{\n id: string;\n name: string;\n title: string;\n description?: string;\n interface: string;\n configuration?: any;\n order: number;\n }>;\n }>;\n } | undefined;\n\n if (!metaDataList || !metaDataList.groups || !Array.isArray(metaDataList.groups)) {\n continue;\n }\n\n // Process each group in the category's metadata\n for (const group of metaDataList.groups) {\n const groupName = group.name || 'default';\n\n // Get or create group\n if (!groupsMap.has(groupName)) {\n groupsMap.set(groupName, {\n name: groupName,\n title: group.title,\n description: group.description,\n order: group.order ?? 0,\n fields: [],\n });\n }\n\n const mergedGroup = groupsMap.get(groupName)!;\n\n // Process fields in this group\n if (group.fields && Array.isArray(group.fields)) {\n for (const field of group.fields) {\n // Skip if we've already seen this field (child categories override)\n if (seenFieldIds.has(field.id)) {\n // Remove existing field and add new one (child overrides parent)\n mergedGroup.fields = mergedGroup.fields.filter(f => f.id !== field.id);\n }\n\n // Add field to merged group\n // Ensure title is always present (use name as fallback)\n mergedGroup.fields.push({\n id: field.id,\n name: field.name,\n title: field.title || field.name || 'Untitled Field',\n description: field.description,\n interface: field.interface,\n configuration: field.configuration,\n order: field.order ?? mergedGroup.fields.length,\n });\n\n seenFieldIds.add(field.id);\n }\n }\n }\n }\n\n // Convert map to array and sort by order\n const result = Array.from(groupsMap.values())\n .sort((a, b) => (a.order ?? 0) - (b.order ?? 0))\n .map(group => ({\n ...group,\n fields: group.fields.sort((a, b) => (a.order ?? 0) - (b.order ?? 0)),\n }));\n\n return result;\n }\n\n private async collectInheritedMetadata(hierarchy: AXPCategoryEntity[]): Promise<AXMMetaDataDefinitionEntityModel[]> {\n const allMetadata: AXMMetaDataDefinitionEntityModel[] = [];\n const seenMetadataIds = new Set<string>();\n\n // Collect metadata from each level in the hierarchy\n for (const category of hierarchy) {\n try {\n const metadataResult = await this.metaDataService.query({\n filter: {\n logic: 'and',\n filters: [\n {\n field: 'categoryIds',\n operator: {\n type: 'contains',\n },\n value: category.id,\n },\n ],\n },\n take: 1000,\n skip: 0,\n });\n\n // Add metadata fields that haven't been seen before (avoid duplicates)\n for (const metadata of metadataResult.items) {\n if (!seenMetadataIds.has(metadata.id)) {\n allMetadata.push(metadata);\n seenMetadataIds.add(metadata.id);\n }\n }\n } catch (error) {\n console.error(`Error collecting metadata for category ${category.id}:`, error);\n }\n }\n\n return allMetadata;\n }\n}\n"],"names":[],"mappings":"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"}
@@ -102,10 +102,10 @@ class AXCQueryCategoryWithItemsQuery {
102
102
  }
103
103
  return node;
104
104
  }
105
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: AXCQueryCategoryWithItemsQuery, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
106
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: AXCQueryCategoryWithItemsQuery, providedIn: 'root' }); }
105
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXCQueryCategoryWithItemsQuery, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
106
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXCQueryCategoryWithItemsQuery, providedIn: 'root' }); }
107
107
  }
108
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: AXCQueryCategoryWithItemsQuery, decorators: [{
108
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXCQueryCategoryWithItemsQuery, decorators: [{
109
109
  type: Injectable,
110
110
  args: [{
111
111
  providedIn: 'root'
@@ -113,4 +113,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImpo
113
113
  }] });
114
114
 
115
115
  export { AXCQueryCategoryWithItemsQuery };
116
- //# sourceMappingURL=acorex-connectivity-mock-category-with-items.query-DWW7t6nc.mjs.map
116
+ //# sourceMappingURL=acorex-connectivity-mock-category-with-items.query-Cj6FWu7S.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"acorex-connectivity-mock-category-with-items.query-Cj6FWu7S.mjs","sources":["../../../../libs/connectivity/mock/src/lib/data-management/metadata/queries/category-with-items.query.ts"],"sourcesContent":["import { AXMMetaDataDefinitionEntityModel, AXMMetaDataDefinitionService, RootConfig } from '@acorex/modules/data-management';\nimport { AXPCategoryEntityWithItems } from '@acorex/platform/core';\nimport { AXMEntityCrudServiceImpl } from '@acorex/platform/layout/entity';\nimport { AXPQuery } from '@acorex/platform/runtime';\nimport { inject, Injectable, Injector, runInInjectionContext } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AXCQueryCategoryWithItemsQuery implements AXPQuery<void, AXPCategoryEntityWithItems<AXMMetaDataDefinitionEntityModel>[]> {\n\n private injector = inject(Injector);\n private categoryEntityService = runInInjectionContext(this.injector, () => new AXMEntityCrudServiceImpl<any, any>(`${RootConfig.module.name}.${RootConfig.entities.metaDataDefinition.name}Category`));\n private metaDataService = inject(AXMMetaDataDefinitionService);\n\n\n fetch(): Promise<any> {\n return this.getAllWithItems();\n }\n\n private async getAllWithItems(): Promise<AXPCategoryEntityWithItems<AXMMetaDataDefinitionEntityModel>[]> {\n const rootCategories = await this.categoryEntityService.query({\n take: 1000,\n skip: 0,\n filter: {\n logic: 'and',\n filters: [\n {\n field: 'parentId',\n operator: {\n type: 'isNull',\n },\n },\n ],\n },\n });\n\n // Build the tree and prune empty categories (no children and no items)\n const builtRoots = await Promise.all(rootCategories.items.map((category) => this.buildCategoryTree(category)));\n const categories = builtRoots.filter((c): c is AXPCategoryEntityWithItems<AXMMetaDataDefinitionEntityModel> => Boolean(c));\n\n // Aggregate all items across remaining categories\n const allItems: AXMMetaDataDefinitionEntityModel[] = [];\n const collectItems = (nodes: AXPCategoryEntityWithItems<AXMMetaDataDefinitionEntityModel>[]) => {\n for (const node of nodes) {\n if (node.items?.length) {\n allItems.push(...node.items);\n }\n if (node.children?.length) {\n collectItems(node.children);\n }\n }\n };\n collectItems(categories);\n\n // Add synthetic 'All' node at the beginning\n const allNode: AXPCategoryEntityWithItems<AXMMetaDataDefinitionEntityModel> & { categories?: any[] } = {\n id: 'all',\n title: 'All',\n childrenCount: 0,\n items: allItems,\n children: [],\n categories: []\n };\n\n return [allNode, ...categories];\n }\n\n private async buildCategoryTree(category: any): Promise<AXPCategoryEntityWithItems<AXMMetaDataDefinitionEntityModel> | null> {\n const itemsResult = await this.metaDataService.query({\n filter: {\n logic: 'and',\n filters: [\n {\n field: 'categoryIds',\n operator: {\n type: 'contains',\n },\n value: category.id,\n },\n ],\n },\n take: 1000,\n skip: 0,\n });\n\n const childCategoriesResult = await this.categoryEntityService.query({\n filter: {\n logic: 'and',\n filters: [\n {\n field: 'parentId',\n operator: {\n type: 'equal',\n },\n value: category.id,\n },\n ],\n },\n take: 1000,\n skip: 0,\n });\n\n const builtChildren = await Promise.all(childCategoriesResult.items.map((child) => this.buildCategoryTree(child)));\n const children = builtChildren.filter((c): c is AXPCategoryEntityWithItems<AXMMetaDataDefinitionEntityModel> => Boolean(c));\n\n const node: AXPCategoryEntityWithItems<AXMMetaDataDefinitionEntityModel> & { categories?: any[] } = {\n ...category,\n items: itemsResult.items,\n categories: children,\n children: children,\n };\n\n // Prune node if it has no items and no children\n if ((!node.items || node.items.length === 0) && (!node.children || node.children.length === 0)) {\n return null;\n }\n\n return node;\n }\n\n\n\n}"],"names":[],"mappings":"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"}
@@ -0,0 +1,108 @@
1
+ import { AXPAiChatToolRunContextService, RootConfig, blobOrFileFromImageResult, persistAiGeneratedImage, AI_CHAT_GENERATED_IMAGE_REF_TYPE, AI_GENERATED_IMAGE_MAX_REMOTE_URL_IN_TOOL } from '@acorex/modules/ai-management';
2
+ import * as i0 from '@angular/core';
3
+ import { inject, Injectable } from '@angular/core';
4
+ import { AXPFileStorageService } from '@acorex/platform/common';
5
+ import { AXPEntityService } from '@acorex/platform/layout/entity';
6
+ import { A as AXCAiChatRouterService, r as resolveDelegatedAssistOptionModel, a as AXMAiModelStableIds } from './acorex-connectivity-mock-acorex-connectivity-mock-BvDCXP5M.mjs';
7
+
8
+ //#region ---- Imports ----
9
+ function parseGenerateImageInput(args) {
10
+ const obj = args != null && typeof args === 'object' && !Array.isArray(args)
11
+ ? args
12
+ : null;
13
+ if (!obj) {
14
+ return { ok: false, error: 'Invalid arguments: expected an object.' };
15
+ }
16
+ const prompt = typeof obj['prompt'] === 'string' ? obj['prompt'].trim() : '';
17
+ if (!prompt) {
18
+ return { ok: false, error: 'Invalid arguments: "prompt" is required and must be non-empty.' };
19
+ }
20
+ const model = typeof obj['model'] === 'string' ? obj['model'].trim() : undefined;
21
+ const size = typeof obj['size'] === 'string' ? obj['size'].trim() : undefined;
22
+ const style = typeof obj['style'] === 'string' ? obj['style'].trim() : undefined;
23
+ return {
24
+ ok: true,
25
+ prompt,
26
+ ...(model ? { model } : {}),
27
+ ...(size ? { size } : {}),
28
+ ...(style ? { style } : {}),
29
+ };
30
+ }
31
+ class AiManagementChatGenerateImageCommand {
32
+ constructor() {
33
+ this.aiChatRouter = inject(AXCAiChatRouterService);
34
+ this.runContext = inject(AXPAiChatToolRunContextService);
35
+ this.fileStorage = inject(AXPFileStorageService);
36
+ this.entityService = inject(AXPEntityService);
37
+ this.assistData = this.entityService
38
+ .withEntity(RootConfig.module.name, RootConfig.entities.assist.name)
39
+ .data();
40
+ }
41
+ async execute(input) {
42
+ const ctx = this.runContext.getContext();
43
+ if (!ctx?.assistId?.trim()) {
44
+ return {
45
+ success: false,
46
+ message: {
47
+ text: 'Image generation requires an active AI chat run context (assist id).',
48
+ },
49
+ };
50
+ }
51
+ const parsed = parseGenerateImageInput(input);
52
+ if (!parsed.ok) {
53
+ return { success: false, message: { text: parsed.error } };
54
+ }
55
+ try {
56
+ const assist = await this.assistData.byKey(ctx.assistId.trim());
57
+ if (!assist) {
58
+ return {
59
+ success: false,
60
+ message: { text: `Assist row was not found (id: ${ctx.assistId.trim()}).` },
61
+ };
62
+ }
63
+ const modelEntityId = parsed.model?.trim() ||
64
+ resolveDelegatedAssistOptionModel(assist, ctx.agentId) ||
65
+ AXMAiModelStableIds.openaiGptImage1;
66
+ let composedPrompt = parsed.prompt;
67
+ if (parsed.style?.trim()) {
68
+ composedPrompt = `${composedPrompt}\nStyle: ${parsed.style.trim()}`;
69
+ }
70
+ const { imageUrl } = await this.aiChatRouter.generateImage({
71
+ modelEntityId,
72
+ prompt: composedPrompt,
73
+ size: parsed.size?.trim() || undefined,
74
+ });
75
+ try {
76
+ const file = await blobOrFileFromImageResult(imageUrl);
77
+ const { fileId } = await persistAiGeneratedImage(this.fileStorage, file, {
78
+ refId: assist.id,
79
+ refType: AI_CHAT_GENERATED_IMAGE_REF_TYPE,
80
+ });
81
+ return { success: true, data: { fileId, prompt: parsed.prompt } };
82
+ }
83
+ catch (persistErr) {
84
+ const u = imageUrl.trim();
85
+ if (u.startsWith('https://') && u.length <= AI_GENERATED_IMAGE_MAX_REMOTE_URL_IN_TOOL) {
86
+ return {
87
+ success: true,
88
+ data: { prompt: parsed.prompt, imageUrl: u },
89
+ };
90
+ }
91
+ const pmsg = persistErr instanceof Error ? persistErr.message : String(persistErr);
92
+ throw new Error(`Could not store generated image for chat replay. ${pmsg}`);
93
+ }
94
+ }
95
+ catch (e) {
96
+ const msg = e instanceof Error ? e.message : String(e);
97
+ return { success: false, message: { text: msg } };
98
+ }
99
+ }
100
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AiManagementChatGenerateImageCommand, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
101
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AiManagementChatGenerateImageCommand }); }
102
+ }
103
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AiManagementChatGenerateImageCommand, decorators: [{
104
+ type: Injectable
105
+ }] });
106
+
107
+ export { AiManagementChatGenerateImageCommand };
108
+ //# sourceMappingURL=acorex-connectivity-mock-chat-generate-image.command-D_2bFiuO.mjs.map