@acorex/modules 18.0.15 → 18.0.16
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/application-management/index.d.ts +9 -7
- package/application-management/lib/application-management.module.d.ts +11 -2
- package/application-management/lib/application-management.service.d.ts +2 -0
- package/application-management/lib/entities/property.entity.d.ts +3 -0
- package/application-management/lib/module-designer/module-designer.component.d.ts +18 -0
- package/application-management/lib/module-designer/module-designer.service.d.ts +34 -0
- package/auth/lib/error-handler.d.ts +1 -1
- package/backend/lib/data/api/comment.service.d.ts +15 -0
- package/backend/lib/data/api/module-designer.service.d.ts +43 -0
- package/backend/lib/data/index.d.ts +2 -1
- package/backend/lib/data/local/local-data-provider.d.ts +1 -2
- package/esm2022/application-management/index.mjs +10 -8
- package/esm2022/application-management/lib/application-management.module.mjs +56 -7
- package/esm2022/application-management/lib/application-management.service.mjs +8 -2
- package/esm2022/application-management/lib/entities/application-module.entity.mjs +273 -0
- package/esm2022/application-management/lib/entities/applications.entity.mjs +311 -0
- package/esm2022/application-management/lib/entities/edition.entity.mjs +284 -0
- package/esm2022/application-management/lib/entities/entity.entity.mjs +284 -0
- package/esm2022/application-management/lib/entities/feature.entity.mjs +284 -0
- package/esm2022/application-management/lib/entities/modules.entity.mjs +324 -0
- package/esm2022/application-management/lib/entities/permission.entity.mjs +284 -0
- package/esm2022/application-management/lib/entities/property.entity.mjs +449 -0
- package/esm2022/application-management/lib/module-designer/module-designer.component.mjs +91 -0
- package/esm2022/application-management/lib/module-designer/module-designer.service.mjs +3 -0
- package/esm2022/auth/lib/error-handler.mjs +6 -6
- package/esm2022/backend/lib/backend.module.mjs +23 -5
- package/esm2022/backend/lib/data/api/comment.service.mjs +48 -0
- package/esm2022/backend/lib/data/api/data-provider.mjs +2 -2
- package/esm2022/backend/lib/data/api/module-designer.service.mjs +95 -0
- package/esm2022/backend/lib/data/index.mjs +3 -2
- package/esm2022/backend/lib/data/local/local-data-provider.mjs +2 -2
- package/esm2022/form-management/acorex-modules-form-management.mjs +5 -0
- package/esm2022/form-management/index.mjs +2 -0
- package/esm2022/form-management/lib/designer/designer.page.mjs +24 -0
- package/esm2022/form-management/lib/form-management.module.mjs +29 -0
- package/fesm2022/acorex-modules-application-management-module-designer.component-KlwqCJCF.mjs +100 -0
- package/fesm2022/acorex-modules-application-management-module-designer.component-KlwqCJCF.mjs.map +1 -0
- package/fesm2022/acorex-modules-application-management.mjs +539 -16
- package/fesm2022/acorex-modules-application-management.mjs.map +1 -1
- package/fesm2022/{acorex-modules-auth-acorex-modules-auth-BD7I4S8c.mjs → acorex-modules-auth-acorex-modules-auth-D09VaQPe.mjs} +12 -12
- package/fesm2022/acorex-modules-auth-acorex-modules-auth-D09VaQPe.mjs.map +1 -0
- package/fesm2022/{acorex-modules-auth-app-chooser.component-Cfl1D1Cw.mjs → acorex-modules-auth-app-chooser.component-DN1ZJiZs.mjs} +2 -2
- package/fesm2022/{acorex-modules-auth-app-chooser.component-Cfl1D1Cw.mjs.map → acorex-modules-auth-app-chooser.component-DN1ZJiZs.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-auth-login.module-BQG4ObmU.mjs → acorex-modules-auth-login.module-CGA5aTg2.mjs} +5 -5
- package/fesm2022/{acorex-modules-auth-login.module-BQG4ObmU.mjs.map → acorex-modules-auth-login.module-CGA5aTg2.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-auth-master.layout-DoPCP7C0.mjs → acorex-modules-auth-master.layout-ZJWzjLrb.mjs} +2 -2
- package/fesm2022/{acorex-modules-auth-master.layout-DoPCP7C0.mjs.map → acorex-modules-auth-master.layout-ZJWzjLrb.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-auth-password.component-fyMD7oKR.mjs → acorex-modules-auth-password.component-C4yqf342.mjs} +3 -3
- package/fesm2022/{acorex-modules-auth-password.component-fyMD7oKR.mjs.map → acorex-modules-auth-password.component-C4yqf342.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-auth-password.component-CfhiS2hO.mjs → acorex-modules-auth-password.component-MJhNk3UI.mjs} +2 -2
- package/fesm2022/{acorex-modules-auth-password.component-CfhiS2hO.mjs.map → acorex-modules-auth-password.component-MJhNk3UI.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-auth-routes-95DQOnjS.mjs → acorex-modules-auth-routes-DhORV1Js.mjs} +2 -2
- package/fesm2022/{acorex-modules-auth-routes-95DQOnjS.mjs.map → acorex-modules-auth-routes-DhORV1Js.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-auth-two-factor.module-BkErlA-n.mjs → acorex-modules-auth-two-factor.module-BWKP0_jO.mjs} +3 -3
- package/fesm2022/{acorex-modules-auth-two-factor.module-BkErlA-n.mjs.map → acorex-modules-auth-two-factor.module-BWKP0_jO.mjs.map} +1 -1
- package/fesm2022/acorex-modules-auth.mjs +4 -4
- package/fesm2022/acorex-modules-backend.mjs +154 -137
- package/fesm2022/acorex-modules-backend.mjs.map +1 -1
- package/fesm2022/acorex-modules-form-management-designer.page-SoPH2V7i.mjs +27 -0
- package/fesm2022/acorex-modules-form-management-designer.page-SoPH2V7i.mjs.map +1 -0
- package/fesm2022/acorex-modules-form-management.mjs +36 -0
- package/fesm2022/acorex-modules-form-management.mjs.map +1 -0
- package/form-management/README.md +4 -0
- package/form-management/index.d.ts +1 -0
- package/form-management/lib/designer/designer.page.d.ts +5 -0
- package/form-management/lib/form-management.module.d.ts +7 -0
- package/package.json +7 -7
- package/backend/lib/data/local/data-Conditioner.d.ts +0 -6
- package/esm2022/application-management/lib/application-module.entity.mjs +0 -273
- package/esm2022/application-management/lib/applications.entity.mjs +0 -311
- package/esm2022/application-management/lib/edition.entity.mjs +0 -284
- package/esm2022/application-management/lib/entity.entity.mjs +0 -284
- package/esm2022/application-management/lib/feature.entity.mjs +0 -284
- package/esm2022/application-management/lib/modules.entity.mjs +0 -324
- package/esm2022/application-management/lib/permission.entity.mjs +0 -284
- package/esm2022/backend/lib/data/local/data-Conditioner.mjs +0 -138
- package/esm2022/log-management/acorex-modules-log-management.mjs +0 -5
- package/esm2022/log-management/index.mjs +0 -3
- package/esm2022/log-management/lib/audit-logs.entity.mjs +0 -391
- package/esm2022/log-management/lib/log-management.module.mjs +0 -16
- package/fesm2022/acorex-modules-auth-acorex-modules-auth-BD7I4S8c.mjs.map +0 -1
- package/fesm2022/acorex-modules-log-management.mjs +0 -414
- package/fesm2022/acorex-modules-log-management.mjs.map +0 -1
- package/log-management/README.md +0 -4
- package/log-management/index.d.ts +0 -2
- package/log-management/lib/audit-logs.entity.d.ts +0 -3
- package/log-management/lib/log-management.module.d.ts +0 -6
- /package/application-management/lib/{application-module.entity.d.ts → entities/application-module.entity.d.ts} +0 -0
- /package/application-management/lib/{applications.entity.d.ts → entities/applications.entity.d.ts} +0 -0
- /package/application-management/lib/{edition.entity.d.ts → entities/edition.entity.d.ts} +0 -0
- /package/application-management/lib/{entity.entity.d.ts → entities/entity.entity.d.ts} +0 -0
- /package/application-management/lib/{feature.entity.d.ts → entities/feature.entity.d.ts} +0 -0
- /package/application-management/lib/{modules.entity.d.ts → entities/modules.entity.d.ts} +0 -0
- /package/application-management/lib/{permission.entity.d.ts → entities/permission.entity.d.ts} +0 -0
@@ -1,391 +0,0 @@
|
|
1
|
-
import { AXPDataProvider, convertPropertiesToColumns, widgetSchemas } from '@acorex/platform/common';
|
2
|
-
const properties = [
|
3
|
-
{
|
4
|
-
name: 'executionTime',
|
5
|
-
title: 'Execution Time',
|
6
|
-
schema: widgetSchemas.dateTime,
|
7
|
-
canEdit: false,
|
8
|
-
canInsert: true,
|
9
|
-
formats: {
|
10
|
-
default: 'HH:mm:ss dd MMM YYYY',
|
11
|
-
},
|
12
|
-
canInlineFilter: true,
|
13
|
-
validationRules: [],
|
14
|
-
},
|
15
|
-
{
|
16
|
-
name: 'httpMethod',
|
17
|
-
title: 'HTTP Method',
|
18
|
-
schema: widgetSchemas.text,
|
19
|
-
canEdit: false,
|
20
|
-
canInsert: true,
|
21
|
-
canInlineFilter: true,
|
22
|
-
validationRules: [],
|
23
|
-
},
|
24
|
-
{
|
25
|
-
name: 'url',
|
26
|
-
title: 'URL',
|
27
|
-
schema: widgetSchemas.text,
|
28
|
-
canEdit: false,
|
29
|
-
canInsert: true,
|
30
|
-
canInlineFilter: true,
|
31
|
-
validationRules: [],
|
32
|
-
},
|
33
|
-
{
|
34
|
-
name: 'httpStatusCode',
|
35
|
-
title: 'HTTP Status Code',
|
36
|
-
schema: widgetSchemas.number,
|
37
|
-
canEdit: false,
|
38
|
-
canInsert: true,
|
39
|
-
canInlineFilter: true,
|
40
|
-
validationRules: [],
|
41
|
-
},
|
42
|
-
{
|
43
|
-
name: 'exceptions',
|
44
|
-
title: 'Exceptions',
|
45
|
-
schema: widgetSchemas.largetext,
|
46
|
-
canEdit: false,
|
47
|
-
canInsert: true,
|
48
|
-
canInlineFilter: true,
|
49
|
-
validationRules: [],
|
50
|
-
},
|
51
|
-
{
|
52
|
-
name: 'browserInfo',
|
53
|
-
title: 'Browser Info',
|
54
|
-
schema: widgetSchemas.text,
|
55
|
-
canEdit: false,
|
56
|
-
canInsert: true,
|
57
|
-
canInlineFilter: true,
|
58
|
-
validationRules: [],
|
59
|
-
},
|
60
|
-
{
|
61
|
-
name: 'comments',
|
62
|
-
title: 'Comments',
|
63
|
-
schema: widgetSchemas.text,
|
64
|
-
canEdit: true,
|
65
|
-
canInsert: true,
|
66
|
-
canInlineFilter: true,
|
67
|
-
validationRules: [],
|
68
|
-
},
|
69
|
-
{
|
70
|
-
name: 'applicationName',
|
71
|
-
title: 'Application Name',
|
72
|
-
schema: widgetSchemas.text,
|
73
|
-
canEdit: true,
|
74
|
-
canInsert: true,
|
75
|
-
canInlineFilter: true,
|
76
|
-
validationRules: [],
|
77
|
-
},
|
78
|
-
{
|
79
|
-
name: 'axApplicationName',
|
80
|
-
title: 'AX Application Name',
|
81
|
-
schema: widgetSchemas.text,
|
82
|
-
canEdit: true,
|
83
|
-
canInsert: true,
|
84
|
-
canInlineFilter: true,
|
85
|
-
validationRules: [],
|
86
|
-
},
|
87
|
-
{
|
88
|
-
name: 'executionDuration',
|
89
|
-
title: 'Execution Duration',
|
90
|
-
schema: widgetSchemas.number,
|
91
|
-
canEdit: false,
|
92
|
-
canInsert: true,
|
93
|
-
canInlineFilter: true,
|
94
|
-
validationRules: [],
|
95
|
-
},
|
96
|
-
{
|
97
|
-
name: 'clientIpAddress',
|
98
|
-
title: 'Client IP Address',
|
99
|
-
schema: widgetSchemas.text,
|
100
|
-
canEdit: false,
|
101
|
-
canInsert: true,
|
102
|
-
canInlineFilter: true,
|
103
|
-
validationRules: [],
|
104
|
-
},
|
105
|
-
{
|
106
|
-
name: 'correlationId',
|
107
|
-
title: 'Correlation ID',
|
108
|
-
schema: widgetSchemas.text,
|
109
|
-
canEdit: false,
|
110
|
-
canInsert: true,
|
111
|
-
canInlineFilter: true,
|
112
|
-
validationRules: [],
|
113
|
-
},
|
114
|
-
{
|
115
|
-
name: 'entityChanges',
|
116
|
-
title: 'Entity Changes',
|
117
|
-
schema: widgetSchemas.richText,
|
118
|
-
canEdit: true,
|
119
|
-
canInsert: true,
|
120
|
-
canInlineFilter: true,
|
121
|
-
validationRules: [],
|
122
|
-
component: {
|
123
|
-
common: {
|
124
|
-
options: {
|
125
|
-
reference: 'entityChanges',
|
126
|
-
referenceField: 'entityChangeId',
|
127
|
-
textField: 'changeType',
|
128
|
-
valueField: 'id',
|
129
|
-
multiple: true,
|
130
|
-
},
|
131
|
-
},
|
132
|
-
},
|
133
|
-
},
|
134
|
-
{
|
135
|
-
name: 'actions',
|
136
|
-
title: 'Actions',
|
137
|
-
schema: widgetSchemas.richText,
|
138
|
-
canEdit: true,
|
139
|
-
canInsert: true,
|
140
|
-
canInlineFilter: true,
|
141
|
-
validationRules: [],
|
142
|
-
component: {
|
143
|
-
common: {
|
144
|
-
options: {
|
145
|
-
reference: 'actions',
|
146
|
-
referenceField: 'actionId',
|
147
|
-
textField: 'methodName',
|
148
|
-
valueField: 'id',
|
149
|
-
multiple: true,
|
150
|
-
},
|
151
|
-
},
|
152
|
-
},
|
153
|
-
},
|
154
|
-
{
|
155
|
-
name: 'userId',
|
156
|
-
title: 'User ID',
|
157
|
-
schema: widgetSchemas.text,
|
158
|
-
canEdit: false,
|
159
|
-
canInsert: false,
|
160
|
-
canInlineFilter: true,
|
161
|
-
validationRules: [],
|
162
|
-
},
|
163
|
-
{
|
164
|
-
name: 'userName',
|
165
|
-
title: 'Username',
|
166
|
-
schema: widgetSchemas.text,
|
167
|
-
canEdit: false,
|
168
|
-
canInsert: true,
|
169
|
-
canInlineFilter: true,
|
170
|
-
validationRules: [
|
171
|
-
{
|
172
|
-
rule: 'required',
|
173
|
-
},
|
174
|
-
],
|
175
|
-
},
|
176
|
-
{
|
177
|
-
name: 'tenantId',
|
178
|
-
title: 'Tenant ID',
|
179
|
-
schema: widgetSchemas.text,
|
180
|
-
canEdit: false,
|
181
|
-
canInsert: false,
|
182
|
-
canInlineFilter: true,
|
183
|
-
validationRules: [],
|
184
|
-
},
|
185
|
-
{
|
186
|
-
name: 'tenantName',
|
187
|
-
title: 'Tenant Name',
|
188
|
-
schema: widgetSchemas.text,
|
189
|
-
canEdit: true,
|
190
|
-
canInsert: true,
|
191
|
-
canInlineFilter: true,
|
192
|
-
validationRules: [],
|
193
|
-
},
|
194
|
-
{
|
195
|
-
name: 'impersonatorUserId',
|
196
|
-
title: 'Impersonator User ID',
|
197
|
-
schema: widgetSchemas.text,
|
198
|
-
canEdit: false,
|
199
|
-
canInsert: false,
|
200
|
-
canInlineFilter: true,
|
201
|
-
validationRules: [],
|
202
|
-
},
|
203
|
-
{
|
204
|
-
name: 'impersonatorUserName',
|
205
|
-
title: 'Impersonator Username',
|
206
|
-
schema: widgetSchemas.text,
|
207
|
-
canEdit: false,
|
208
|
-
canInsert: true,
|
209
|
-
canInlineFilter: true,
|
210
|
-
validationRules: [],
|
211
|
-
},
|
212
|
-
{
|
213
|
-
name: 'impersonatorTenantId',
|
214
|
-
title: 'Impersonator Tenant ID',
|
215
|
-
schema: widgetSchemas.text,
|
216
|
-
canEdit: false,
|
217
|
-
canInsert: false,
|
218
|
-
canInlineFilter: true,
|
219
|
-
validationRules: [],
|
220
|
-
},
|
221
|
-
{
|
222
|
-
name: 'impersonatorTenantName',
|
223
|
-
title: 'Impersonator Tenant Name',
|
224
|
-
schema: widgetSchemas.text,
|
225
|
-
canEdit: true,
|
226
|
-
canInsert: true,
|
227
|
-
canInlineFilter: true,
|
228
|
-
validationRules: [],
|
229
|
-
},
|
230
|
-
{
|
231
|
-
name: 'clientName',
|
232
|
-
title: 'Client Name',
|
233
|
-
schema: widgetSchemas.text,
|
234
|
-
canEdit: false,
|
235
|
-
canInsert: true,
|
236
|
-
canInlineFilter: true,
|
237
|
-
validationRules: [],
|
238
|
-
},
|
239
|
-
{
|
240
|
-
name: 'clientId',
|
241
|
-
title: 'Client ID',
|
242
|
-
schema: widgetSchemas.text,
|
243
|
-
canEdit: false,
|
244
|
-
canInsert: true,
|
245
|
-
canInlineFilter: true,
|
246
|
-
validationRules: [],
|
247
|
-
},
|
248
|
-
{
|
249
|
-
name: 'id',
|
250
|
-
title: 'ID',
|
251
|
-
schema: widgetSchemas.text,
|
252
|
-
canEdit: false,
|
253
|
-
canInsert: false,
|
254
|
-
canInlineFilter: true,
|
255
|
-
validationRules: [],
|
256
|
-
},
|
257
|
-
];
|
258
|
-
const columns = convertPropertiesToColumns(...properties);
|
259
|
-
const entityName = 'logs';
|
260
|
-
export async function entityFactory(injector) {
|
261
|
-
const dataService = injector.get(AXPDataProvider);
|
262
|
-
const entity = {
|
263
|
-
module: 'log-management',
|
264
|
-
name: entityName,
|
265
|
-
title: 'Logs',
|
266
|
-
properties: properties,
|
267
|
-
editOptions: {
|
268
|
-
create: false,
|
269
|
-
delete: false,
|
270
|
-
update: false,
|
271
|
-
},
|
272
|
-
formats: {
|
273
|
-
default: 'Log Information',
|
274
|
-
},
|
275
|
-
dataSource: {
|
276
|
-
key: 'id',
|
277
|
-
pageSize: 20,
|
278
|
-
load: async (e) => {
|
279
|
-
return dataService.getMany(entity, e);
|
280
|
-
},
|
281
|
-
byKey: async (id) => {
|
282
|
-
return dataService.getOne(entity, id);
|
283
|
-
},
|
284
|
-
},
|
285
|
-
views: {
|
286
|
-
list: {
|
287
|
-
title: 'Audit Logs',
|
288
|
-
views: [
|
289
|
-
{
|
290
|
-
name: 'all',
|
291
|
-
title: 'All Items',
|
292
|
-
fixed: true,
|
293
|
-
sorts: [
|
294
|
-
{
|
295
|
-
name: 'executionTime',
|
296
|
-
dir: 'asc',
|
297
|
-
},
|
298
|
-
],
|
299
|
-
columns: columns.slice(0, 6),
|
300
|
-
conditions: [],
|
301
|
-
},
|
302
|
-
],
|
303
|
-
},
|
304
|
-
quickView: {
|
305
|
-
root: {
|
306
|
-
properties: [],
|
307
|
-
sections: [
|
308
|
-
{
|
309
|
-
title: 'Execution Details',
|
310
|
-
name: 'executionDetails',
|
311
|
-
properties: properties.slice(0, 5).map((c) => c.name),
|
312
|
-
},
|
313
|
-
{
|
314
|
-
title: 'Client Info',
|
315
|
-
name: 'clientInfo',
|
316
|
-
properties: properties.slice(5, 10).map((c) => c.name),
|
317
|
-
},
|
318
|
-
],
|
319
|
-
},
|
320
|
-
},
|
321
|
-
detailView: {
|
322
|
-
root: {
|
323
|
-
properties: [],
|
324
|
-
sections: [
|
325
|
-
{
|
326
|
-
title: 'General Information',
|
327
|
-
name: 'generalInformation',
|
328
|
-
properties: [],
|
329
|
-
sections: [
|
330
|
-
{
|
331
|
-
title: 'Identifier',
|
332
|
-
name: 'identifier',
|
333
|
-
properties: ['id'],
|
334
|
-
},
|
335
|
-
{
|
336
|
-
title: 'Execution Details',
|
337
|
-
description: 'Details about the execution of the audit log.',
|
338
|
-
name: 'executionDetails',
|
339
|
-
properties: ['executionTime', 'httpMethod', 'url', 'httpStatusCode', 'exceptions'],
|
340
|
-
},
|
341
|
-
{
|
342
|
-
title: 'Client Info',
|
343
|
-
description: 'Information about the client involved in the audit.',
|
344
|
-
name: 'clientInfo',
|
345
|
-
properties: ['browserInfo', 'comments', 'clientIpAddress', 'clientName', 'clientId'],
|
346
|
-
},
|
347
|
-
{
|
348
|
-
title: 'Application Info',
|
349
|
-
name: 'applicationInfo',
|
350
|
-
properties: ['applicationName', 'axApplicationName'],
|
351
|
-
},
|
352
|
-
{
|
353
|
-
title: 'Execution Metrics',
|
354
|
-
name: 'executionMetrics',
|
355
|
-
properties: ['executionDuration', 'correlationId'],
|
356
|
-
},
|
357
|
-
{
|
358
|
-
title: 'User Info',
|
359
|
-
name: 'userInfo',
|
360
|
-
properties: ['userId', 'userName', 'tenantId', 'tenantName'],
|
361
|
-
},
|
362
|
-
{
|
363
|
-
title: 'Impersonator Info',
|
364
|
-
name: 'impersonatorInfo',
|
365
|
-
properties: ['impersonatorUserId', 'impersonatorUserName', 'impersonatorTenantId', 'impersonatorTenantName'],
|
366
|
-
},
|
367
|
-
{
|
368
|
-
title: 'Entity Changes',
|
369
|
-
name: 'entityChanges',
|
370
|
-
properties: ['entityChanges'],
|
371
|
-
},
|
372
|
-
{
|
373
|
-
title: 'Actions',
|
374
|
-
name: 'actions',
|
375
|
-
properties: ['actions'],
|
376
|
-
},
|
377
|
-
],
|
378
|
-
},
|
379
|
-
],
|
380
|
-
},
|
381
|
-
},
|
382
|
-
createView: {
|
383
|
-
root: {
|
384
|
-
properties: properties.map((c) => c.name),
|
385
|
-
},
|
386
|
-
},
|
387
|
-
},
|
388
|
-
};
|
389
|
-
return entity;
|
390
|
-
}
|
391
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXVkaXQtbG9ncy5lbnRpdHkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL21vZHVsZXMvbG9nLW1hbmFnZW1lbnQvc3JjL2xpYi9hdWRpdC1sb2dzLmVudGl0eS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsZUFBZSxFQUE4RSwwQkFBMEIsRUFBRSxhQUFhLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUlqTCxNQUFNLFVBQVUsR0FBOEI7SUFDNUM7UUFDRSxJQUFJLEVBQUUsZUFBZTtRQUNyQixLQUFLLEVBQUUsZ0JBQWdCO1FBQ3ZCLE1BQU0sRUFBRSxhQUFhLENBQUMsUUFBUTtRQUM5QixPQUFPLEVBQUUsS0FBSztRQUNkLFNBQVMsRUFBRSxJQUFJO1FBQ2YsT0FBTyxFQUFFO1lBQ1AsT0FBTyxFQUFFLHNCQUFzQjtTQUNoQztRQUNELGVBQWUsRUFBRSxJQUFJO1FBQ3JCLGVBQWUsRUFBRSxFQUFFO0tBQ3BCO0lBQ0Q7UUFDRSxJQUFJLEVBQUUsWUFBWTtRQUNsQixLQUFLLEVBQUUsYUFBYTtRQUNwQixNQUFNLEVBQUUsYUFBYSxDQUFDLElBQUk7UUFDMUIsT0FBTyxFQUFFLEtBQUs7UUFDZCxTQUFTLEVBQUUsSUFBSTtRQUNmLGVBQWUsRUFBRSxJQUFJO1FBQ3JCLGVBQWUsRUFBRSxFQUFFO0tBQ3BCO0lBQ0Q7UUFDRSxJQUFJLEVBQUUsS0FBSztRQUNYLEtBQUssRUFBRSxLQUFLO1FBQ1osTUFBTSxFQUFFLGFBQWEsQ0FBQyxJQUFJO1FBQzFCLE9BQU8sRUFBRSxLQUFLO1FBQ2QsU0FBUyxFQUFFLElBQUk7UUFDZixlQUFlLEVBQUUsSUFBSTtRQUNyQixlQUFlLEVBQUUsRUFBRTtLQUNwQjtJQUNEO1FBQ0UsSUFBSSxFQUFFLGdCQUFnQjtRQUN0QixLQUFLLEVBQUUsa0JBQWtCO1FBQ3pCLE1BQU0sRUFBRSxhQUFhLENBQUMsTUFBTTtRQUM1QixPQUFPLEVBQUUsS0FBSztR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QW1CO29DQUMxQixJQUFJLEVBQUUsa0JBQWtCO29DQUN4QixVQUFVLEVBQUUsQ0FBQyxvQkFBb0IsRUFBRSxzQkFBc0IsRUFBRSxzQkFBc0IsRUFBRSx3QkFBd0IsQ0FBQztpQ0FDN0c7Z0NBQ0Q7b0NBQ0UsS0FBSyxFQUFFLGdCQUFnQjtvQ0FDdkIsSUFBSSxFQUFFLGVBQWU7b0NBQ3JCLFVBQVUsRUFBRSxDQUFDLGVBQWUsQ0FBQztpQ0FDOUI7Z0NBQ0Q7b0NBQ0UsS0FBSyxFQUFFLFNBQVM7b0NBQ2hCLElBQUksRUFBRSxTQUFTO29DQUNmLFVBQVUsRUFBRSxDQUFDLFNBQVMsQ0FBQztpQ0FDeEI7NkJBQ0Y7eUJBQ0Y7cUJBQ0Y7aUJBQ0Y7YUFDRjtZQUNELFVBQVUsRUFBRTtnQkFDVixJQUFJLEVBQUU7b0JBQ0osVUFBVSxFQUFFLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7aUJBQzFDO2FBQ0Y7U0FDRjtLQUNGLENBQUM7SUFDRixPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQVhEYXRhU291cmNlUXVlcnkgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvY29tbW9uJztcbmltcG9ydCB7IEFYUERhdGFQcm92aWRlciwgQVhQRW50aXR5Q29uZmlnLCBBWFBFbnRpdHlMaXN0RGlzcGxheUNvbHVtbkNvbmZpZywgQVhQRW50aXR5UHJvcGVydHlDb25maWcsIGNvbnZlcnRQcm9wZXJ0aWVzVG9Db2x1bW5zLCB3aWRnZXRTY2hlbWFzIH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9jb21tb24nO1xuXG5pbXBvcnQgeyBJbmplY3RvciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5jb25zdCBwcm9wZXJ0aWVzOiBBWFBFbnRpdHlQcm9wZXJ0eUNvbmZpZ1tdID0gW1xuICB7XG4gICAgbmFtZTogJ2V4ZWN1dGlvblRpbWUnLFxuICAgIHRpdGxlOiAnRXhlY3V0aW9uIFRpbWUnLFxuICAgIHNjaGVtYTogd2lkZ2V0U2NoZW1hcy5kYXRlVGltZSxcbiAgICBjYW5FZGl0OiBmYWxzZSxcbiAgICBjYW5JbnNlcnQ6IHRydWUsXG4gICAgZm9ybWF0czoge1xuICAgICAgZGVmYXVsdDogJ0hIOm1tOnNzIGRkIE1NTSBZWVlZJyxcbiAgICB9LFxuICAgIGNhbklubGluZUZpbHRlcjogdHJ1ZSxcbiAgICB2YWxpZGF0aW9uUnVsZXM6IFtdLFxuICB9LFxuICB7XG4gICAgbmFtZTogJ2h0dHBNZXRob2QnLFxuICAgIHRpdGxlOiAnSFRUUCBNZXRob2QnLFxuICAgIHNjaGVtYTogd2lkZ2V0U2NoZW1hcy50ZXh0LFxuICAgIGNhbkVkaXQ6IGZhbHNlLFxuICAgIGNhbkluc2VydDogdHJ1ZSxcbiAgICBjYW5JbmxpbmVGaWx0ZXI6IHRydWUsXG4gICAgdmFsaWRhdGlvblJ1bGVzOiBbXSxcbiAgfSxcbiAge1xuICAgIG5hbWU6ICd1cmwnLFxuICAgIHRpdGxlOiAnVVJMJyxcbiAgICBzY2hlbWE6IHdpZGdldFNjaGVtYXMudGV4dCxcbiAgICBjYW5FZGl0OiBmYWxzZSxcbiAgICBjYW5JbnNlcnQ6IHRydWUsXG4gICAgY2FuSW5saW5lRmlsdGVyOiB0cnVlLFxuICAgIHZhbGlkYXRpb25SdWxlczogW10sXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnaHR0cFN0YXR1c0NvZGUnLFxuICAgIHRpdGxlOiAnSFRUUCBTdGF0dXMgQ29kZScsXG4gICAgc2NoZW1hOiB3aWRnZXRTY2hlbWFzLm51bWJlcixcbiAgICBjYW5FZGl0OiBmYWxzZSxcbiAgICBjYW5JbnNlcnQ6IHRydWUsXG4gICAgY2FuSW5saW5lRmlsdGVyOiB0cnVlLFxuICAgIHZhbGlkYXRpb25SdWxlczogW10sXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnZXhjZXB0aW9ucycsXG4gICAgdGl0bGU6ICdFeGNlcHRpb25zJyxcbiAgICBzY2hlbWE6IHdpZGdldFNjaGVtYXMubGFyZ2V0ZXh0LFxuICAgIGNhbkVkaXQ6IGZhbHNlLFxuICAgIGNhbkluc2VydDogdHJ1ZSxcbiAgICBjYW5JbmxpbmVGaWx0ZXI6IHRydWUsXG4gICAgdmFsaWRhdGlvblJ1bGVzOiBbXSxcbiAgfSxcbiAge1xuICAgIG5hbWU6ICdicm93c2VySW5mbycsXG4gICAgdGl0bGU6ICdCcm93c2VyIEluZm8nLFxuICAgIHNjaGVtYTogd2lkZ2V0U2NoZW1hcy50ZXh0LFxuICAgIGNhbkVkaXQ6IGZhbHNlLFxuICAgIGNhbkluc2VydDogdHJ1ZSxcbiAgICBjYW5JbmxpbmVGaWx0ZXI6IHRydWUsXG4gICAgdmFsaWRhdGlvblJ1bGVzOiBbXSxcbiAgfSxcbiAge1xuICAgIG5hbWU6ICdjb21tZW50cycsXG4gICAgdGl0bGU6ICdDb21tZW50cycsXG4gICAgc2NoZW1hOiB3aWRnZXRTY2hlbWFzLnRleHQsXG4gICAgY2FuRWRpdDogdHJ1ZSxcbiAgICBjYW5JbnNlcnQ6IHRydWUsXG4gICAgY2FuSW5saW5lRmlsdGVyOiB0cnVlLFxuICAgIHZhbGlkYXRpb25SdWxlczogW10sXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnYXBwbGljYXRpb25OYW1lJyxcbiAgICB0aXRsZTogJ0FwcGxpY2F0aW9uIE5hbWUnLFxuICAgIHNjaGVtYTogd2lkZ2V0U2NoZW1hcy50ZXh0LFxuICAgIGNhbkVkaXQ6IHRydWUsXG4gICAgY2FuSW5zZXJ0OiB0cnVlLFxuICAgIGNhbklubGluZUZpbHRlcjogdHJ1ZSxcbiAgICB2YWxpZGF0aW9uUnVsZXM6IFtdLFxuICB9LFxuICB7XG4gICAgbmFtZTogJ2F4QXBwbGljYXRpb25OYW1lJyxcbiAgICB0aXRsZTogJ0FYIEFwcGxpY2F0aW9uIE5hbWUnLFxuICAgIHNjaGVtYTogd2lkZ2V0U2NoZW1hcy50ZXh0LFxuICAgIGNhbkVkaXQ6IHRydWUsXG4gICAgY2FuSW5zZXJ0OiB0cnVlLFxuICAgIGNhbklubGluZUZpbHRlcjogdHJ1ZSxcbiAgICB2YWxpZGF0aW9uUnVsZXM6IFtdLFxuICB9LFxuICB7XG4gICAgbmFtZTogJ2V4ZWN1dGlvbkR1cmF0aW9uJyxcbiAgICB0aXRsZTogJ0V4ZWN1dGlvbiBEdXJhdGlvbicsXG4gICAgc2NoZW1hOiB3aWRnZXRTY2hlbWFzLm51bWJlcixcbiAgICBjYW5FZGl0OiBmYWxzZSxcbiAgICBjYW5JbnNlcnQ6IHRydWUsXG4gICAgY2FuSW5saW5lRmlsdGVyOiB0cnVlLFxuICAgIHZhbGlkYXRpb25SdWxlczogW10sXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnY2xpZW50SXBBZGRyZXNzJyxcbiAgICB0aXRsZTogJ0NsaWVudCBJUCBBZGRyZXNzJyxcbiAgICBzY2hlbWE6IHdpZGdldFNjaGVtYXMudGV4dCxcbiAgICBjYW5FZGl0OiBmYWxzZSxcbiAgICBjYW5JbnNlcnQ6IHRydWUsXG4gICAgY2FuSW5saW5lRmlsdGVyOiB0cnVlLFxuICAgIHZhbGlkYXRpb25SdWxlczogW10sXG4gIH0sXG5cbiAge1xuICAgIG5hbWU6ICdjb3JyZWxhdGlvbklkJyxcbiAgICB0aXRsZTogJ0NvcnJlbGF0aW9uIElEJyxcbiAgICBzY2hlbWE6IHdpZGdldFNjaGVtYXMudGV4dCxcbiAgICBjYW5FZGl0OiBmYWxzZSxcbiAgICBjYW5JbnNlcnQ6IHRydWUsXG4gICAgY2FuSW5saW5lRmlsdGVyOiB0cnVlLFxuICAgIHZhbGlkYXRpb25SdWxlczogW10sXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnZW50aXR5Q2hhbmdlcycsXG4gICAgdGl0bGU6ICdFbnRpdHkgQ2hhbmdlcycsXG4gICAgc2NoZW1hOiB3aWRnZXRTY2hlbWFzLnJpY2hUZXh0LFxuICAgIGNhbkVkaXQ6IHRydWUsXG4gICAgY2FuSW5zZXJ0OiB0cnVlLFxuICAgIGNhbklubGluZUZpbHRlcjogdHJ1ZSxcbiAgICB2YWxpZGF0aW9uUnVsZXM6IFtdLFxuICAgIGNvbXBvbmVudDoge1xuICAgICAgY29tbW9uOiB7XG4gICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICByZWZlcmVuY2U6ICdlbnRpdHlDaGFuZ2VzJyxcbiAgICAgICAgICByZWZlcmVuY2VGaWVsZDogJ2VudGl0eUNoYW5nZUlkJyxcbiAgICAgICAgICB0ZXh0RmllbGQ6ICdjaGFuZ2VUeXBlJyxcbiAgICAgICAgICB2YWx1ZUZpZWxkOiAnaWQnLFxuICAgICAgICAgIG11bHRpcGxlOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9LFxuICB9LFxuICB7XG4gICAgbmFtZTogJ2FjdGlvbnMnLFxuICAgIHRpdGxlOiAnQWN0aW9ucycsXG4gICAgc2NoZW1hOiB3aWRnZXRTY2hlbWFzLnJpY2hUZXh0LFxuICAgIGNhbkVkaXQ6IHRydWUsXG4gICAgY2FuSW5zZXJ0OiB0cnVlLFxuICAgIGNhbklubGluZUZpbHRlcjogdHJ1ZSxcbiAgICB2YWxpZGF0aW9uUnVsZXM6IFtdLFxuICAgIGNvbXBvbmVudDoge1xuICAgICAgY29tbW9uOiB7XG4gICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICByZWZlcmVuY2U6ICdhY3Rpb25zJyxcbiAgICAgICAgICByZWZlcmVuY2VGaWVsZDogJ2FjdGlvbklkJyxcbiAgICAgICAgICB0ZXh0RmllbGQ6ICdtZXRob2ROYW1lJyxcbiAgICAgICAgICB2YWx1ZUZpZWxkOiAnaWQnLFxuICAgICAgICAgIG11bHRpcGxlOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9LFxuICB9LFxuICB7XG4gICAgbmFtZTogJ3VzZXJJZCcsXG4gICAgdGl0bGU6ICdVc2VyIElEJyxcbiAgICBzY2hlbWE6IHdpZGdldFNjaGVtYXMudGV4dCxcbiAgICBjYW5FZGl0OiBmYWxzZSxcbiAgICBjYW5JbnNlcnQ6IGZhbHNlLFxuICAgIGNhbklubGluZUZpbHRlcjogdHJ1ZSxcbiAgICB2YWxpZGF0aW9uUnVsZXM6IFtdLFxuICB9LFxuICB7XG4gICAgbmFtZTogJ3VzZXJOYW1lJyxcbiAgICB0aXRsZTogJ1VzZXJuYW1lJyxcbiAgICBzY2hlbWE6IHdpZGdldFNjaGVtYXMudGV4dCxcbiAgICBjYW5FZGl0OiBmYWxzZSxcbiAgICBjYW5JbnNlcnQ6IHRydWUsXG4gICAgY2FuSW5saW5lRmlsdGVyOiB0cnVlLFxuICAgIHZhbGlkYXRpb25SdWxlczogW1xuICAgICAge1xuICAgICAgICBydWxlOiAncmVxdWlyZWQnLFxuICAgICAgfSxcbiAgICBdLFxuICB9LFxuICB7XG4gICAgbmFtZTogJ3RlbmFudElkJyxcbiAgICB0aXRsZTogJ1RlbmFudCBJRCcsXG4gICAgc2NoZW1hOiB3aWRnZXRTY2hlbWFzLnRleHQsXG4gICAgY2FuRWRpdDogZmFsc2UsXG4gICAgY2FuSW5zZXJ0OiBmYWxzZSxcbiAgICBjYW5JbmxpbmVGaWx0ZXI6IHRydWUsXG4gICAgdmFsaWRhdGlvblJ1bGVzOiBbXSxcbiAgfSxcbiAge1xuICAgIG5hbWU6ICd0ZW5hbnROYW1lJyxcbiAgICB0aXRsZTogJ1RlbmFudCBOYW1lJyxcbiAgICBzY2hlbWE6IHdpZGdldFNjaGVtYXMudGV4dCxcbiAgICBjYW5FZGl0OiB0cnVlLFxuICAgIGNhbkluc2VydDogdHJ1ZSxcbiAgICBjYW5JbmxpbmVGaWx0ZXI6IHRydWUsXG4gICAgdmFsaWRhdGlvblJ1bGVzOiBbXSxcbiAgfSxcbiAge1xuICAgIG5hbWU6ICdpbXBlcnNvbmF0b3JVc2VySWQnLFxuICAgIHRpdGxlOiAnSW1wZXJzb25hdG9yIFVzZXIgSUQnLFxuICAgIHNjaGVtYTogd2lkZ2V0U2NoZW1hcy50ZXh0LFxuICAgIGNhbkVkaXQ6IGZhbHNlLFxuICAgIGNhbkluc2VydDogZmFsc2UsXG4gICAgY2FuSW5saW5lRmlsdGVyOiB0cnVlLFxuICAgIHZhbGlkYXRpb25SdWxlczogW10sXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnaW1wZXJzb25hdG9yVXNlck5hbWUnLFxuICAgIHRpdGxlOiAnSW1wZXJzb25hdG9yIFVzZXJuYW1lJyxcbiAgICBzY2hlbWE6IHdpZGdldFNjaGVtYXMudGV4dCxcbiAgICBjYW5FZGl0OiBmYWxzZSxcbiAgICBjYW5JbnNlcnQ6IHRydWUsXG4gICAgY2FuSW5saW5lRmlsdGVyOiB0cnVlLFxuICAgIHZhbGlkYXRpb25SdWxlczogW10sXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnaW1wZXJzb25hdG9yVGVuYW50SWQnLFxuICAgIHRpdGxlOiAnSW1wZXJzb25hdG9yIFRlbmFudCBJRCcsXG4gICAgc2NoZW1hOiB3aWRnZXRTY2hlbWFzLnRleHQsXG4gICAgY2FuRWRpdDogZmFsc2UsXG4gICAgY2FuSW5zZXJ0OiBmYWxzZSxcbiAgICBjYW5JbmxpbmVGaWx0ZXI6IHRydWUsXG4gICAgdmFsaWRhdGlvblJ1bGVzOiBbXSxcbiAgfSxcbiAge1xuICAgIG5hbWU6ICdpbXBlcnNvbmF0b3JUZW5hbnROYW1lJyxcbiAgICB0aXRsZTogJ0ltcGVyc29uYXRvciBUZW5hbnQgTmFtZScsXG4gICAgc2NoZW1hOiB3aWRnZXRTY2hlbWFzLnRleHQsXG4gICAgY2FuRWRpdDogdHJ1ZSxcbiAgICBjYW5JbnNlcnQ6IHRydWUsXG4gICAgY2FuSW5saW5lRmlsdGVyOiB0cnVlLFxuICAgIHZhbGlkYXRpb25SdWxlczogW10sXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnY2xpZW50TmFtZScsXG4gICAgdGl0bGU6ICdDbGllbnQgTmFtZScsXG4gICAgc2NoZW1hOiB3aWRnZXRTY2hlbWFzLnRleHQsXG4gICAgY2FuRWRpdDogZmFsc2UsXG4gICAgY2FuSW5zZXJ0OiB0cnVlLFxuICAgIGNhbklubGluZUZpbHRlcjogdHJ1ZSxcbiAgICB2YWxpZGF0aW9uUnVsZXM6IFtdLFxuICB9LFxuICB7XG4gICAgbmFtZTogJ2NsaWVudElkJyxcbiAgICB0aXRsZTogJ0NsaWVudCBJRCcsXG4gICAgc2NoZW1hOiB3aWRnZXRTY2hlbWFzLnRleHQsXG4gICAgY2FuRWRpdDogZmFsc2UsXG4gICAgY2FuSW5zZXJ0OiB0cnVlLFxuICAgIGNhbklubGluZUZpbHRlcjogdHJ1ZSxcbiAgICB2YWxpZGF0aW9uUnVsZXM6IFtdLFxuICB9LFxuICB7XG4gICAgbmFtZTogJ2lkJyxcbiAgICB0aXRsZTogJ0lEJyxcbiAgICBzY2hlbWE6IHdpZGdldFNjaGVtYXMudGV4dCxcbiAgICBjYW5FZGl0OiBmYWxzZSxcbiAgICBjYW5JbnNlcnQ6IGZhbHNlLFxuICAgIGNhbklubGluZUZpbHRlcjogdHJ1ZSxcbiAgICB2YWxpZGF0aW9uUnVsZXM6IFtdLFxuICB9LFxuXTtcblxuY29uc3QgY29sdW1uczogQVhQRW50aXR5TGlzdERpc3BsYXlDb2x1bW5Db25maWdbXSA9IGNvbnZlcnRQcm9wZXJ0aWVzVG9Db2x1bW5zKC4uLnByb3BlcnRpZXMpO1xuXG5jb25zdCBlbnRpdHlOYW1lID0gJ2xvZ3MnO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZW50aXR5RmFjdG9yeShpbmplY3RvcjogSW5qZWN0b3IpOiBQcm9taXNlPEFYUEVudGl0eUNvbmZpZz4ge1xuICBjb25zdCBkYXRhU2VydmljZSA9IGluamVjdG9yLmdldChBWFBEYXRhUHJvdmlkZXIpO1xuXG4gIGNvbnN0IGVudGl0eTogQVhQRW50aXR5Q29uZmlnID0ge1xuICAgIG1vZHVsZTogJ2xvZy1tYW5hZ2VtZW50JyxcbiAgICBuYW1lOiBlbnRpdHlOYW1lLFxuICAgIHRpdGxlOiAnTG9ncycsXG4gICAgcHJvcGVydGllczogcHJvcGVydGllcyxcbiAgICBlZGl0T3B0aW9uczoge1xuICAgICAgY3JlYXRlOiBmYWxzZSxcbiAgICAgIGRlbGV0ZTogZmFsc2UsXG4gICAgICB1cGRhdGU6IGZhbHNlLFxuICAgIH0sXG4gICAgZm9ybWF0czoge1xuICAgICAgZGVmYXVsdDogJ0xvZyBJbmZvcm1hdGlvbicsXG4gICAgfSxcbiAgICBkYXRhU291cmNlOiB7XG4gICAgICBrZXk6ICdpZCcsXG4gICAgICBwYWdlU2l6ZTogMjAsXG4gICAgICBsb2FkOiBhc3luYyAoZTogQVhEYXRhU291cmNlUXVlcnkpID0+IHtcbiAgICAgICAgcmV0dXJuIGRhdGFTZXJ2aWNlLmdldE1hbnkoZW50aXR5LCBlKTtcbiAgICAgIH0sXG4gICAgICBieUtleTogYXN5bmMgKGlkOiBhbnkpID0+IHtcbiAgICAgICAgcmV0dXJuIGRhdGFTZXJ2aWNlLmdldE9uZShlbnRpdHksIGlkKTtcbiAgICAgIH0sXG4gICAgfSxcbiAgICB2aWV3czoge1xuICAgICAgbGlzdDoge1xuICAgICAgICB0aXRsZTogJ0F1ZGl0IExvZ3MnLFxuICAgICAgICB2aWV3czogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6ICdhbGwnLFxuICAgICAgICAgICAgdGl0bGU6ICdBbGwgSXRlbXMnLFxuICAgICAgICAgICAgZml4ZWQ6IHRydWUsXG4gICAgICAgICAgICBzb3J0czogW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2V4ZWN1dGlvblRpbWUnLFxuICAgICAgICAgICAgICAgIGRpcjogJ2FzYycsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgY29sdW1uczogY29sdW1ucy5zbGljZSgwLCA2KSxcbiAgICAgICAgICAgIGNvbmRpdGlvbnM6IFtdLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9LFxuICAgICAgcXVpY2tWaWV3OiB7XG4gICAgICAgIHJvb3Q6IHtcbiAgICAgICAgICBwcm9wZXJ0aWVzOiBbXSxcbiAgICAgICAgICBzZWN0aW9uczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0aXRsZTogJ0V4ZWN1dGlvbiBEZXRhaWxzJyxcbiAgICAgICAgICAgICAgbmFtZTogJ2V4ZWN1dGlvbkRldGFpbHMnLFxuICAgICAgICAgICAgICBwcm9wZXJ0aWVzOiBwcm9wZXJ0aWVzLnNsaWNlKDAsIDUpLm1hcCgoYykgPT4gYy5uYW1lKSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHRpdGxlOiAnQ2xpZW50IEluZm8nLFxuICAgICAgICAgICAgICBuYW1lOiAnY2xpZW50SW5mbycsXG4gICAgICAgICAgICAgIHByb3BlcnRpZXM6IHByb3BlcnRpZXMuc2xpY2UoNSwgMTApLm1hcCgoYykgPT4gYy5uYW1lKSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBkZXRhaWxWaWV3OiB7XG4gICAgICAgIHJvb3Q6IHtcbiAgICAgICAgICBwcm9wZXJ0aWVzOiBbXSxcbiAgICAgICAgICBzZWN0aW9uczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0aXRsZTogJ0dlbmVyYWwgSW5mb3JtYXRpb24nLFxuICAgICAgICAgICAgICBuYW1lOiAnZ2VuZXJhbEluZm9ybWF0aW9uJyxcbiAgICAgICAgICAgICAgcHJvcGVydGllczogW10sXG4gICAgICAgICAgICAgIHNlY3Rpb25zOiBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgdGl0bGU6ICdJZGVudGlmaWVyJyxcbiAgICAgICAgICAgICAgICAgIG5hbWU6ICdpZGVudGlmaWVyJyxcbiAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6IFsnaWQnXSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIHRpdGxlOiAnRXhlY3V0aW9uIERldGFpbHMnLFxuICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdEZXRhaWxzIGFib3V0IHRoZSBleGVjdXRpb24gb2YgdGhlIGF1ZGl0IGxvZy4nLFxuICAgICAgICAgICAgICAgICAgbmFtZTogJ2V4ZWN1dGlvbkRldGFpbHMnLFxuICAgICAgICAgICAgICAgICAgcHJvcGVydGllczogWydleGVjdXRpb25UaW1lJywgJ2h0dHBNZXRob2QnLCAndXJsJywgJ2h0dHBTdGF0dXNDb2RlJywgJ2V4Y2VwdGlvbnMnXSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIHRpdGxlOiAnQ2xpZW50IEluZm8nLFxuICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdJbmZvcm1hdGlvbiBhYm91dCB0aGUgY2xpZW50IGludm9sdmVkIGluIHRoZSBhdWRpdC4nLFxuICAgICAgICAgICAgICAgICAgbmFtZTogJ2NsaWVudEluZm8nLFxuICAgICAgICAgICAgICAgICAgcHJvcGVydGllczogWydicm93c2VySW5mbycsICdjb21tZW50cycsICdjbGllbnRJcEFkZHJlc3MnLCAnY2xpZW50TmFtZScsICdjbGllbnRJZCddLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgdGl0bGU6ICdBcHBsaWNhdGlvbiBJbmZvJyxcbiAgICAgICAgICAgICAgICAgIG5hbWU6ICdhcHBsaWNhdGlvbkluZm8nLFxuICAgICAgICAgICAgICAgICAgcHJvcGVydGllczogWydhcHBsaWNhdGlvbk5hbWUnLCAnYXhBcHBsaWNhdGlvbk5hbWUnXSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIHRpdGxlOiAnRXhlY3V0aW9uIE1ldHJpY3MnLFxuICAgICAgICAgICAgICAgICAgbmFtZTogJ2V4ZWN1dGlvbk1ldHJpY3MnLFxuICAgICAgICAgICAgICAgICAgcHJvcGVydGllczogWydleGVjdXRpb25EdXJhdGlvbicsICdjb3JyZWxhdGlvbklkJ10sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICB0aXRsZTogJ1VzZXIgSW5mbycsXG4gICAgICAgICAgICAgICAgICBuYW1lOiAndXNlckluZm8nLFxuICAgICAgICAgICAgICAgICAgcHJvcGVydGllczogWyd1c2VySWQnLCAndXNlck5hbWUnLCAndGVuYW50SWQnLCAndGVuYW50TmFtZSddLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgdGl0bGU6ICdJbXBlcnNvbmF0b3IgSW5mbycsXG4gICAgICAgICAgICAgICAgICBuYW1lOiAnaW1wZXJzb25hdG9ySW5mbycsXG4gICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzOiBbJ2ltcGVyc29uYXRvclVzZXJJZCcsICdpbXBlcnNvbmF0b3JVc2VyTmFtZScsICdpbXBlcnNvbmF0b3JUZW5hbnRJZCcsICdpbXBlcnNvbmF0b3JUZW5hbnROYW1lJ10sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICB0aXRsZTogJ0VudGl0eSBDaGFuZ2VzJyxcbiAgICAgICAgICAgICAgICAgIG5hbWU6ICdlbnRpdHlDaGFuZ2VzJyxcbiAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6IFsnZW50aXR5Q2hhbmdlcyddLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgdGl0bGU6ICdBY3Rpb25zJyxcbiAgICAgICAgICAgICAgICAgIG5hbWU6ICdhY3Rpb25zJyxcbiAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6IFsnYWN0aW9ucyddLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgY3JlYXRlVmlldzoge1xuICAgICAgICByb290OiB7XG4gICAgICAgICAgcHJvcGVydGllczogcHJvcGVydGllcy5tYXAoKGMpID0+IGMubmFtZSksXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0sXG4gIH07XG4gIHJldHVybiBlbnRpdHk7XG59XG4iXX0=
|
@@ -1,16 +0,0 @@
|
|
1
|
-
import { NgModule } from "@angular/core";
|
2
|
-
import * as i0 from "@angular/core";
|
3
|
-
export class AXMLogManagementModule {
|
4
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXMLogManagementModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
5
|
-
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.0", ngImport: i0, type: AXMLogManagementModule }); }
|
6
|
-
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXMLogManagementModule }); }
|
7
|
-
}
|
8
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXMLogManagementModule, decorators: [{
|
9
|
-
type: NgModule,
|
10
|
-
args: [{
|
11
|
-
imports: [],
|
12
|
-
exports: [],
|
13
|
-
declarations: [],
|
14
|
-
}]
|
15
|
-
}] });
|
16
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nLW1hbmFnZW1lbnQubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9tb2R1bGVzL2xvZy1tYW5hZ2VtZW50L3NyYy9saWIvbG9nLW1hbmFnZW1lbnQubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBTXpDLE1BQU0sT0FBTyxzQkFBc0I7OEdBQXRCLHNCQUFzQjsrR0FBdEIsc0JBQXNCOytHQUF0QixzQkFBc0I7OzJGQUF0QixzQkFBc0I7a0JBTGxDLFFBQVE7bUJBQUM7b0JBQ04sT0FBTyxFQUFFLEVBQUU7b0JBQ1gsT0FBTyxFQUFFLEVBQUU7b0JBQ1gsWUFBWSxFQUFFLEVBQUU7aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuQE5nTW9kdWxlKHtcbiAgICBpbXBvcnRzOiBbXSxcbiAgICBleHBvcnRzOiBbXSxcbiAgICBkZWNsYXJhdGlvbnM6IFtdLFxufSlcbmV4cG9ydCBjbGFzcyBBWE1Mb2dNYW5hZ2VtZW50TW9kdWxlIHtcbn1cbiAgICAgICAgICAgICAgICAgICAgIl19
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"acorex-modules-auth-acorex-modules-auth-BD7I4S8c.mjs","sources":["../../../../libs/modules/auth/src/lib/error-handler.ts","../../../../libs/modules/auth/src/lib/auth.config.ts","../../../../libs/modules/auth/src/lib/auth.routes.ts","../../../../libs/modules/auth/src/lib/shared/services/idle.service.ts","../../../../libs/modules/auth/src/lib/store/auth.effects.ts","../../../../libs/modules/auth/src/lib/store/index.ts","../../../../libs/modules/auth/src/lib/account/app-chooser/app-chooser-list.component.ts","../../../../libs/modules/auth/src/lib/account/app-chooser/app-chooser-list.component.html","../../../../libs/modules/auth/src/lib/account/app-chooser/app-chooser-slot.component.ts","../../../../libs/modules/auth/src/lib/account/app-chooser/app-chooser-slot.component.html","../../../../libs/modules/auth/src/lib/account/tenant-chooser/tenant-chooser-dropdown.component.ts","../../../../libs/modules/auth/src/lib/account/tenant-chooser/tenant-chooser-dropdown.component.html","../../../../libs/modules/auth/src/lib/account/profile/profile-slot.component.ts","../../../../libs/modules/auth/src/lib/account/profile/profile-slot.component.html","../../../../libs/modules/auth/src/lib/account/account.module.ts","../../../../libs/modules/auth/src/lib/auth.module.ts","../../../../libs/modules/auth/src/acorex-modules-auth.ts"],"sourcesContent":["import { Injectable, NgZone, inject, isDevMode } from \"@angular/core\";\nimport { AXPErrorHandler, AXPLayoutService } from \"@acorex/platform/common\";\nimport { Router } from \"@angular/router\";\nimport { AXPUnauthenticatedError, AXPUnauthorizedError } from \"@acorex/platform/auth\";\nimport { HttpErrorResponse } from \"@angular/common/http\";\n\n@Injectable()\nexport class AXMAuthErrorHandler implements AXPErrorHandler {\n\n\n private router = inject(Router);\n private layoutService = inject(AXPLayoutService);\n private zone = inject(NgZone);\n\n\n\n handleError(error: Error, next: (error: any) => void): void {\n if (error instanceof HttpErrorResponse) {\n // if (error.status == 401) {\n // this.router.navigate(['/auth/login']);\n // }\n // else if (error.status == 404) {\n // this.router.navigate(['/404']);\n // }\n }\n else if (error instanceof AXPUnauthorizedError) {\n const redirectUrl = error.data?.redirectUrl;\n console.error(error.message);\n this.router.navigate(['/401'], { queryParams: redirectUrl ? { redirectUrl: redirectUrl } : null });\n }\n else if (error instanceof AXPUnauthenticatedError) {\n console.error(error.message);\n const redirectUrl = error.data?.redirectUrl;\n this.router.navigate(['/auth/login'], { queryParams: redirectUrl ? { redirectUrl: redirectUrl } : null });\n } else {\n if (isDevMode()) {\n next(error); // Pass the error to the next handler\n }\n else {\n next(error); // maybe we need a error page\n }\n }\n this.layoutService.setNavigationLoading(false);\n }\n}","import { InjectionToken } from '@angular/core';\nimport { AuthConfig } from 'angular-oauth2-oidc';\n\nexport enum AXMAuthenticationTypes {\n UsernamePassword,\n UsernameEmailPassword,\n EmailPassword,\n MobilePassword,\n EmailCode,\n MobileCode,\n}\n\nexport const AXM_AUTH_CONFIG_TOKEN = new InjectionToken<AXMAuthConfigs>('app-module-auth-config', {\n providedIn: 'root',\n factory: () => {\n return AXMDefaultAuthConfigs;\n },\n});\n\nexport interface AXMAuthConfigs {\n type: AXMAuthenticationTypes;\n // oidc_settings?: UserManagerSettings;\n authConfig?:AuthConfig,\n end_url?: string;\n signinPage?: {\n description: string;\n slogan: string;\n };\n idleTimeout?: number;\n}\n\nexport const AXMDefaultAuthConfigs: AXMAuthConfigs = {\n type: AXMAuthenticationTypes.UsernamePassword,\n};\n\nexport function configAuthModule(config: Partial<AXMAuthConfigs> = AXMDefaultAuthConfigs): AXMAuthConfigs {\n return { ...AXMDefaultAuthConfigs, ...config };\n}\n","import { Route } from '@angular/router';\nexport const routes: Route[] = [\n {\n path: 'auth',\n children: [\n {\n path: '',\n pathMatch: 'full',\n redirectTo: 'login',\n },\n {\n path: '',\n loadComponent: () => import('./shared/layouts/master/master.layout').then((c) => c.AXPAuthMasterLayoutComponent),\n loadChildren: () => import('./login/login.module').then((c) => c.AXPSignInModule),\n },\n {\n path: '',\n loadComponent: () => import('./shared/layouts/master/master.layout').then((c) => c.AXPAuthMasterLayoutComponent),\n loadChildren: () => import('./two-factor/two-factor.module').then((c) => c.AXPTwoFactorModule),\n },\n {\n path: '',\n loadComponent: () => import('./shared/layouts/master/master.layout').then((c) => c.AXPAuthMasterLayoutComponent),\n loadChildren: () => import('./forgot/routes').then((c) => c),\n },\n {\n path: 'account',\n loadComponent: () => import('./shared/layouts/blank/blank.layout').then((c) => c.AXPAuthBlankLayoutComponent),\n loadChildren: () => import('./account/account.module').then((c) => c.AXPAccountModule),\n },\n // {\n // path: '',\n // loadComponent: () =>\n // import('./shared/layouts/master/master.layout').then((c) => c.AXPAuthMasterLayoutComponent),\n // loadChildren: () => import('./register/register.module').then((c) => c.AXPRegisterModule),\n // },\n ],\n },\n];\n","import { Injectable, inject } from '@angular/core';\nimport { Subject, Observable, timer, Subscription } from 'rxjs';\nimport { startWith, switchMap, tap } from 'rxjs/operators';\nimport { AXM_AUTH_CONFIG_TOKEN } from '../../auth.config';\n\n@Injectable({ providedIn: 'root' })\nexport class AXPIdleService {\n private configs = inject(AXM_AUTH_CONFIG_TOKEN);\n private idle$ = new Subject<void>();\n private timeoutDuration = this.configs.idleTimeout ?? 10 * 60 * 1000;\n private userActivity$ = new Subject<void>();\n private idleSubscription: Subscription | null = null;\n\n constructor() {\n this.setupActivityListeners();\n }\n\n get idleState$(): Observable<void> {\n return this.idle$.asObservable();\n }\n\n private setupActivityListeners() {\n const activityEvents = ['mousemove', 'keydown', 'wheel'];\n activityEvents.forEach(event =>\n document.addEventListener(event, () => this.resetTimer())\n );\n }\n\n startWatching() {\n this.stopWatching(); // Stop any existing subscription\n this.idleSubscription = this.userActivity$.pipe(\n startWith(null),\n switchMap(() => timer(this.timeoutDuration)),\n tap(() => this.idle$.next()),\n ).subscribe();\n }\n\n resetTimer() {\n this.userActivity$.next();\n }\n\n stopWatching() {\n if (this.idleSubscription) {\n this.idleSubscription.unsubscribe();\n this.idleSubscription = null;\n }\n }\n}\n","import { AXDialogButtonItem, AXDialogService } from \"@acorex/components/dialog\";\nimport { AXPSessionService } from \"@acorex/platform/auth\";\nimport { AXPSignInAction, AXPSignOutAction } from \"@acorex/platform/common\";\nimport { Injectable, inject } from \"@angular/core\";\nimport { Router } from \"@angular/router\";\nimport { Actions, createEffect, ofType } from \"@ngrx/effects\";\nimport { of, switchMap, tap } from \"rxjs\";\nimport { AXPIdleService } from \"../shared/services\";\nimport { AXM_AUTH_CONFIG_TOKEN } from \"../auth.config\";\n\n@Injectable()\nexport class AXPAuthEffects {\n\n private configs = inject(AXM_AUTH_CONFIG_TOKEN);\n private sessionService = inject(AXPSessionService);\n private idleService = inject(AXPIdleService);\n private dialogService = inject(AXDialogService);\n private dialogAlreadyOpen = false;\n\n constructor(private actions$: Actions, private router: Router) { }\n\n signout$ = createEffect(\n () =>\n this.actions$.pipe(\n ofType(AXPSignOutAction),\n switchMap((action) => {\n this.idleService.stopWatching();\n this.router.navigate(['/auth/login']);\n return of();\n })\n ),\n { dispatch: false }\n );\n\n signin$ = createEffect(\n () =>\n this.actions$.pipe(\n ofType(AXPSignInAction),\n switchMap((action) => {\n if (this.configs.idleTimeout) {\n this.idleService.startWatching();\n }\n return of();\n })\n ),\n { dispatch: false }\n );\n\n\n idle$ = createEffect(\n () =>\n this.idleService.idleState$.pipe(\n tap(() => {\n if (!this.dialogAlreadyOpen) {\n let time = 60;\n let intervalId: number;\n const buttonText = (time: number) => `Stay Sign In (${time})`;\n const stayButton: AXDialogButtonItem = {\n text: buttonText(time),\n color: 'primary',\n autofocus: true,\n onClick: () => {\n this.idleService.resetTimer();\n dialog.close();\n this.dialogAlreadyOpen = false;\n clearInterval(intervalId);\n }\n }\n const dialog = this.dialogService.open({\n title: \"Session Timeout\",\n content: \"You're being timed out due to inactivity. Please choose to stay signed in or to sign off. Otherwise, you will signed off automatically.\",\n type: 'warning',\n buttons: [\n {\n text: \"Sign Off\",\n color: 'ghost',\n onClick: async () => {\n await this.sessionService.signout();\n dialog.close();\n this.dialogAlreadyOpen = false;\n clearInterval(intervalId);\n }\n },\n stayButton,\n ]\n });\n this.dialogAlreadyOpen = true;\n // Automatically close dialog and sign out after additional time\n intervalId = setInterval(() => {\n if (time > 0) {\n stayButton.text = buttonText(--time);\n } else {\n clearInterval(intervalId);\n this.sessionService.signout();\n dialog.close();\n this.dialogAlreadyOpen = false;\n }\n }, 1000);\n //\n }\n })\n ),\n { dispatch: false }\n );\n\n}\n","export * from './auth.effects';\n//export * from './auth.actions';","import { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXLoadingModule } from '@acorex/components/loading';\nimport { AXPApplication, AXPSessionService } from '@acorex/platform/auth';\nimport { AXPLogoComponent } from '@acorex/platform/common';\nimport { CommonModule } from '@angular/common';\nimport { Component, inject } from '@angular/core';\nimport { Router } from '@angular/router';\n\n@Component({\n selector: 'axp-app-chooser-list',\n templateUrl: 'app-chooser-list.component.html',\n standalone: true,\n imports: [CommonModule, AXDecoratorModule, AXPLogoComponent, AXLoadingModule],\n})\nexport class AXPAppChooserListComponent {\n private router = inject(Router);\n private sessionService = inject(AXPSessionService);\n\n protected selectedApplication: AXPApplication | null = null;\n protected applications$ = this.sessionService.applications$;\n\n async chooseApplication(item: AXPApplication) {\n this.selectedApplication = item;\n await this.sessionService.setApplication(item);\n this.router.navigate([`/${item.name}/home`]);\n }\n}\n","<div class=\" ax-w-full ax-overflow-auto ax-max-h-[300px] ax-pe-2\">\n @for(application of (applications$ | async); track $index){\n <div class=\"ax-flex ax-gap-2 ax-justify-between ax-border-b last:ax-border-b-0 ax-py-3 ax-items-start ax-cursor-pointer\"\n (click)=\"chooseApplication(application)\">\n <div class=\"ax-flex ax-flex-1 ax-gap-2 ax-items-center ax-justify-center ax-font-medium\">\n <div\n class=\"ax-w-12 ax-h-12 ax-flex ax-justify-center ax-items-center ax-rounded-full ax-bg-neutral-100 ax-m-auto\">\n <ax-icon class=\"fa-solid fa-computer ax-text-neutral-500 ax-text-lg\"> </ax-icon>\n <!-- TODO: logo instead of application icon -->\n <!-- <axp-logo [source]=\"application.logo\" [attr.alt]=\"application.title\"\n class=\"!ax-flex ax-items-center ax-justify-center !ax-text-sm ax-mx-auto ax-w-10 ax-h-10 ax-bg-neutral-200 ax-rounded-full\"></axp-logo> -->\n </div>\n <span class=\"ax-flex-1 ax-text-start md:ax-text-base ax-text-sm\">{{ application.title }}</span>\n <span class=\"ax-text-gray-500 md:ax-text-sm ax-text-xs\">{{application.editionName}}</span>\n @if(application.name===selectedApplication?.name){\n <ax-loading></ax-loading>\n }@else {\n <ax-icon class=\"fa-solid fa-chevron-right ax-text-neutral-400\"> </ax-icon>\n }\n </div>\n </div>\n }\n</div>","import { AXButtonModule } from \"@acorex/components/button\";\nimport { AXDecoratorModule } from \"@acorex/components/decorators\";\nimport { AXPopoverModule } from \"@acorex/components/popover\";\nimport { AXPApplication, AXPSessionService } from \"@acorex/platform/auth\";\nimport { CommonModule } from \"@angular/common\";\nimport { Component, inject } from \"@angular/core\";\nimport { Router } from \"@angular/router\";\nimport { AXPAppChooserListComponent } from \"./app-chooser-list.component\";\nimport { of } from \"rxjs\";\nimport { AXPLogoComponent } from \"@acorex/platform/common\";\n\n@Component({\n templateUrl: './app-chooser-slot.component.html',\n standalone: true,\n imports: [\n CommonModule,\n AXButtonModule,\n AXPopoverModule,\n AXDecoratorModule,\n AXPLogoComponent,\n AXPAppChooserListComponent\n ]\n})\nexport class AXMAppChooserSlotComponent {\n private sessionService = inject(AXPSessionService);\n protected tenant$ = this.sessionService.tenant$;\n\n protected application$ = this.sessionService.application$;\n protected applications$ = of([]);\n\n private router = inject(Router);\n\n\n async chooseApplication(item: AXPApplication) {\n //await this.sessionService.selectApplication(item.name);\n this.router.navigate([`/${item.name}/home`]);\n }\n\n\n}","@if(((applications$ | async)?.length ?? 0) > 1)\n{\n<ax-button color=\"default\" look=\"blank\" #appChooser>\n <ax-icon>\n <i class=\"fa-solid fa-grid-2 ax-text-slate-400 dark:ax-text-slate-200\"></i>\n </ax-icon>\n</ax-button>\n<ax-popover [target]=\"appChooser\" [openOn]=\"'toggle'\" [closeOn]=\"'clickOut'\" [adaptivityEnabled]=\"true\">\n <div class=\"ax-bg-surface ax-border ax-overflow-hidden ax-rounded-md ax-shadow-md ax-w-full ax-min-w-64 ax-p-3\">\n <axp-app-chooser-list></axp-app-chooser-list>\n </div>\n</ax-popover>\n}","import { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXPSessionService } from '@acorex/platform/auth';\nimport { CommonModule } from '@angular/common';\nimport { Component, inject } from '@angular/core';\nimport { Router } from '@angular/router';\n\n@Component({\n selector: 'axp-tenant-chooser-dropdown',\n templateUrl: 'tenant-chooser-dropdown.component.html',\n standalone: true,\n imports: [CommonModule, AXDecoratorModule],\n})\nexport class AXPTenantChooserDropdownComponent {\n private router = inject(Router);\n private sessionService = inject(AXPSessionService);\n protected tenants$ = this.sessionService.tenants$;\n protected tenant = this.sessionService.tenant;\n\n tenantChooser() {\n this.router.navigate(['/auth/account/tenant-chooser']);\n }\n}\n","<ng-container *ngIf=\"tenants$ | async as tenants\">\n @if(tenants.length>1){\n <div (click)=\"tenantChooser()\"\n class=\"ax-flex ax-items-center ax-border ax-rounded-full ax-px-4 ax-py-1 ax-gap-2 ax-cursor-pointer\">\n <ax-icon class=\"fa-solid fa-building ax-text-neutral-500 ax-text-xs\"></ax-icon>\n <p class=\"ax-text-neutral-500 ax-text-sm ax-font-medium\">\n {{ tenant?.title }}\n </p>\n <ax-icon class=\"fa-regular fa-chevron-down ax-text-neutral-400\"></ax-icon>\n </div>\n }@else {\n <div class=\"ax-flex ax-items-center ax-border ax-rounded-full ax-px-4 ax-py-1 ax-gap-2 ax-cursor-pointer\">\n <ax-icon class=\"fa-solid fa-building ax-text-neutral-500\"></ax-icon>\n <p class=\"ax-text-neutral-500 ax-text-sm ax-font-medium\">\n {{ tenant?.title }}\n </p>\n </div>\n }\n</ng-container>","import { AXAvatarModule } from '@acorex/components/avatar';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXHtmlEvent } from '@acorex/components/common';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXImageModule } from '@acorex/components/image';\nimport { AXLoadingModule } from '@acorex/components/loading';\nimport { AXPopoverComponent, AXPopoverModule } from '@acorex/components/popover';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPSessionService } from '@acorex/platform/auth';\nimport { AXPDataProvider } from '@acorex/platform/common';\nimport { MockDataService } from '@acorex/platform/mocks';\nimport { CommonModule } from '@angular/common';\nimport { Component, ViewChild, inject, signal } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { first } from 'rxjs';\nimport { AXPTenantChooserDropdownComponent } from '../tenant-chooser/tenant-chooser-dropdown.component';\n\n@Component({\n templateUrl: './profile-slot.component.html',\n standalone: true,\n imports: [\n CommonModule,\n AXImageModule,\n AXAvatarModule,\n AXPopoverModule,\n AXButtonModule,\n AXDecoratorModule,\n AXPTenantChooserDropdownComponent,\n AXLoadingModule,\n AXTranslationModule,\n ],\n})\nexport class AXMAuthProfileSlotComponent {\n private router = inject(Router);\n private sessionService = inject(AXPSessionService);\n private dataService = inject(AXPDataProvider, { optional: true });\n private mockerService = inject(MockDataService);\n\n protected hasPicture = signal(true);\n protected avatarText = signal<string>('');\n\n constructor() {\n this.loadImage();\n this.getAvatarText();\n }\n protected src!: string;\n protected user$ = this.sessionService.user$;\n protected tenant$ = this.sessionService.tenant$;\n\n protected isAuthenticated$ = this.sessionService.isAuthenticated$;\n\n @ViewChild('profilePopover') profilePopover!: AXPopoverComponent;\n\n editProfile() {\n const appName = this.sessionService.application?.name;\n switch (appName) {\n case 'ark':\n this.router.navigate([`/ark/m/oidc/e/user-info/0/view`]);\n break;\n case 'asc':\n this.router.navigate([`/asc/oidc/e/user-info/0/view`]);\n break;\n default:\n this.router.navigate([`/asc/oidc/e/user-info/0/view`]);\n break;\n }\n }\n\n async logOut() {\n await this.sessionService.signout();\n }\n\n toggleProfileMenu() {\n this.profilePopover.open();\n }\n\n protected handleSignIn() {\n this.router.navigate(['/auth/login']);\n }\n\n protected onImageError(event: AXHtmlEvent<ErrorEvent>) {\n this.hasPicture.set(false);\n }\n\n protected getAvatarText = () => {\n this.user$.pipe(first()).subscribe((user) => {\n const names = user?.title.split(' ');\n if (names?.length && names?.length > 1) {\n this.avatarText.set(`${names[0][0].toUpperCase()}${names[names.length - 1][0].toUpperCase()}`);\n } else return this.avatarText.set('AC');\n });\n };\n\n private async loadImage() {\n try {\n const url = this.sessionService.user?.avatar as string;\n if (url?.toLowerCase().startsWith('http')) {\n this.src = url;\n } else if (this.sessionService.user?.avatar != 'null' && this.dataService) {\n const blob = await this.dataService.viewFile(url, '');\n this.src = URL.createObjectURL(blob);\n } else {\n this.src = this.mockerService.avatar();\n }\n } catch (error) {\n this.hasPicture.set(false);\n console.error('Failed to load image by ID:', error);\n this.src = '';\n }\n }\n}\n","@if((isAuthenticated$ | async)) {\n<ax-avatar #avatar color=\"secondary\" (error)=\"this.src = 'path/to/default-image.jpg'\" [size]=\"32\" class=\"ax-cursor-pointer ax-ms-4\">\n @if(hasPicture()){\n <ax-image (onError)=\"onImageError($event)\" [src]=\"src\"></ax-image>\n }@else{\n <ax-text>\n <small class=\"ax-text-xs ax-font-semibold\">{{ avatarText() }}</small>\n </ax-text>\n }\n</ax-avatar>\n<ax-popover [target]=\"avatar\" [openOn]=\"'toggle'\" [closeOn]=\"'clickOut'\">\n <div class=\"ax-bg-surface ax-border ax-border-default ax-rounded-md ax-shadow-md ax-w-full ax-min-w-64\">\n <div class=\"ax-flex ax-flex-col ax-items-center ax-p-4 ax-border-b\">\n <ax-avatar [size]=\"60\">\n @if(hasPicture()){\n <ax-image (onError)=\"onImageError($event)\" [src]=\"src\">\n <ax-loading></ax-loading>\n </ax-image>\n }@else{\n <ax-text>\n <span class=\"\">{{ avatarText() }}</span>\n </ax-text>\n }\n </ax-avatar>\n <div class=\"ax-flex ax-flex-col ax-items-center ax-justify-center ax-mt-2 ax-gap-1\">\n <div class=\"ax-text-base ax-font-bold\">{{ (user$ | async)?.title }}</div>\n <axp-tenant-chooser-dropdown></axp-tenant-chooser-dropdown>\n </div>\n </div>\n <div class=\"profile-menus ax-text-slate-500\">\n <!-- <ul>\n <li>\n <i class=\"fa-solid fa-folder-open\"></i>\n <span> Project Management </span>\n </li>\n <li>\n <i class=\"fa-solid fa-envelope-open-text\"></i>\n <span>Email Config</span>\n </li>\n <li>\n <i class=\"fa-solid fa-gear\"></i>\n <span>Setting</span>\n </li>\n </ul> -->\n <ul>\n <!-- <li>\n <i class=\"fa-solid fa-gem ax-text-primary-500\"></i>\n <span> Upgrade account </span>\n </li> -->\n <li (click)=\"editProfile()\">\n <i class=\"fa-solid fa-user\"></i>\n <span>{{ 'profile.edit' | translate | async }}</span>\n </li>\n </ul>\n <ul>\n <li class=\"ax-text-danger-500\" (click)=\"logOut()\">\n <i class=\"fa-solid fa-arrow-right-from-bracket\"></i>\n <span>{{ 'profile.logout' | translate | async }}</span>\n </li>\n </ul>\n </div>\n </div>\n</ax-popover>\n} @else {\n<ax-button color=\"default\" look=\"blank\" text=\"Sign Up / Sign In\" (click)=\"handleSignIn()\">\n <ax-icon>\n <i class=\"fa-solid fa-user ax-text-slate-400 dark:ax-text-slate-200\"></i>\n </ax-icon>\n</ax-button>\n}\n","import { AXPAuthGuard, AXPSessionService } from '@acorex/platform/auth';\nimport { AXPComponentSlotModule } from '@acorex/platform/common';\nimport { NgModule, inject } from '@angular/core';\nimport { ActivatedRouteSnapshot, CanActivateFn, ROUTES, Router, RouterModule, RouterStateSnapshot, Routes } from '@angular/router';\nimport { firstValueFrom } from 'rxjs';\nimport { AXMAppChooserSlotComponent } from './app-chooser/app-chooser-slot.component';\nimport { AXMAuthProfileSlotComponent } from './profile/profile-slot.component';\n\nconst canActivateTenantChooser: CanActivateFn = async (route: ActivatedRouteSnapshot, state: RouterStateSnapshot) => {\n const sessionService = inject(AXPSessionService);\n const router = inject(Router);\n\n const tenants = await firstValueFrom(sessionService.tenants$);\n if (tenants.length == 0) {\n return router.createUrlTree(['/auth/login']);\n }\n if (tenants.length == 1) {\n await sessionService.setTenant(tenants[0]);\n return router.createUrlTree(['/auth/account/app-chooser']);\n }\n return true;\n};\n\nconst canActivateAppChooser: CanActivateFn = async (route: ActivatedRouteSnapshot, state: RouterStateSnapshot) => {\n const sessionService = inject(AXPSessionService);\n const router = inject(Router);\n const apps = await firstValueFrom(sessionService.applications$);\n if (apps.length == 0) {\n return router.createUrlTree(['/auth/login']);\n }\n if (apps.length == 1) {\n await sessionService.setApplication(apps[0]);\n return router.createUrlTree([`/${apps[0].name}/home`]);\n }\n return true;\n};\n\nfunction routesFacory() {\n let routes: Routes = [];\n routes = [\n {\n path: 'tenant-chooser',\n loadComponent: () => import('./tenant-chooser/tenant-chooser.component').then((c) => c.AXPAuthTenantChooserComponent),\n canActivate: [AXPAuthGuard, canActivateTenantChooser],\n },\n {\n path: 'app-chooser',\n loadComponent: () => import('./app-chooser/app-chooser.component').then((c) => c.AXPAuthAppChooserComponent),\n canActivate: [AXPAuthGuard, canActivateAppChooser],\n },\n ];\n return routes;\n}\n\n@NgModule({\n declarations: [],\n imports: [\n RouterModule,\n //\n AXPComponentSlotModule.forChild({\n 'header-end': [\n {\n name: 'app-choser',\n component: AXMAppChooserSlotComponent,\n },\n {\n name: 'profile',\n component: AXMAuthProfileSlotComponent,\n },\n ],\n }),\n ],\n exports: [],\n providers: [\n {\n provide: ROUTES,\n multi: true,\n useFactory: routesFacory,\n },\n ],\n})\nexport class AXPAccountModule { }\n","import { AXPCommonModule } from '@acorex/platform/common';\nimport { CommonModule } from '@angular/common';\nimport { HttpClientModule } from '@angular/common/http';\nimport { ModuleWithProviders, NgModule } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { EffectsModule } from '@ngrx/effects';\nimport { routes } from './auth.routes';\nimport { AXMAuthErrorHandler } from './error-handler';\nimport { AXPAuthEffects } from './store';\nimport { AXPAccountModule } from './account/account.module';\n\n\n@NgModule({\n imports: [\n CommonModule,\n AXPCommonModule.forChild({ errorHandlers: [AXMAuthErrorHandler] }),\n HttpClientModule,\n RouterModule.forChild(routes),\n EffectsModule.forFeature([AXPAuthEffects]),\n AXPAccountModule\n ],\n providers: [AXMAuthErrorHandler],\n})\nexport class AXMAuthModule {\n static forRoot(): ModuleWithProviders<AXMAuthModule> {\n return {\n ngModule: AXMAuthModule,\n providers: [],\n };\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["switchMap","tap","i1","i2","i3","i4","i6","i8"],"mappings":"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"}
|