@acorex-platform/extension-project-management-jira-client 0.0.21

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.
@@ -0,0 +1,346 @@
1
+ import { resolveMultiLanguageString, AXP_INTEGRATION_AUTH_METHOD_TYPE, runtimeCommandPayloadData } from '@acorex-platform/framework-shared/core';
2
+ import { AXMIntegrationManagementCommandKeys } from '@acorex-platform/module-integration-management-client/contracts';
3
+ import { AXPSessionService } from '@acorex-platform/framework-client/auth';
4
+ import { AXPLayoutBuilderService, resolveLayoutBuilderDialogResult } from '@acorex-platform/framework-client/layout/builder';
5
+ import { AXPEntityService } from '@acorex-platform/framework-client/layout/entity';
6
+ import { AXPCommandService } from '@acorex-platform/framework-client/runtime';
7
+ import { AXPopupService } from '@acorex/components/popup';
8
+ import * as i7 from '@acorex/core/translation';
9
+ import { AXTranslationModule, AXTranslationService } from '@acorex/core/translation';
10
+ import * as i0 from '@angular/core';
11
+ import { ChangeDetectionStrategy, Component, inject, Injectable } from '@angular/core';
12
+ import { defaultTo, trim } from 'lodash-es';
13
+ import { RootConfig } from '@acorex-platform/extension-project-management-jira-client/contracts';
14
+ import * as i2 from '@acorex/components/button';
15
+ import { AXButtonModule } from '@acorex/components/button';
16
+ import * as i4 from '@acorex/components/decorators';
17
+ import { AXDecoratorModule } from '@acorex/components/decorators';
18
+ import { AXBasePageComponent } from '@acorex/components/page';
19
+ import * as i3 from '@acorex/components/selection-list';
20
+ import { AXSelectionListModule } from '@acorex/components/selection-list';
21
+ import { AsyncPipe } from '@angular/common';
22
+
23
+ //#endregion
24
+ //#region ---- Component ----
25
+ class AXMJiraInstancePickerPopupComponent extends AXBasePageComponent {
26
+ constructor() {
27
+ super(...arguments);
28
+ this.instances = [];
29
+ }
30
+ instanceListItems() {
31
+ return this.instances.map((instance) => ({
32
+ id: instance.id,
33
+ title: this.instanceTitle(instance),
34
+ deploymentLabelKey: this.deploymentLabelKey(instance),
35
+ }));
36
+ }
37
+ handleInstanceSelection(event) {
38
+ if (!event.isUserInteraction) {
39
+ return;
40
+ }
41
+ const instance = this.instances.find((item) => item.id === event.value);
42
+ if (instance) {
43
+ this.selectInstance(instance);
44
+ }
45
+ }
46
+ instanceTitle(instance) {
47
+ return resolveMultiLanguageString(instance.title, 'en-US');
48
+ }
49
+ deploymentLabelKey(instance) {
50
+ return instance.deploymentType === 'cloud'
51
+ ? '@extensions-jira:instances.entities.instance.fields.deployment-type.options.cloud'
52
+ : '@extensions-jira:instances.entities.instance.fields.deployment-type.options.self-hosted';
53
+ }
54
+ selectInstance(instance) {
55
+ this.close({ instance });
56
+ }
57
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMJiraInstancePickerPopupComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
58
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXMJiraInstancePickerPopupComponent, isStandalone: true, selector: "axm-jira-instance-picker-popup", usesInheritance: true, ngImport: i0, template: `
59
+ <div class="flex flex-col gap-2 p-4">
60
+ @if (instances.length === 0) {
61
+ <p class="text-sm opacity-70">
62
+ {{ '@extensions-jira:integration.connect.instance-picker.empty' | translate | async }}
63
+ </p>
64
+ } @else {
65
+ <ax-selection-list
66
+ class="w-full"
67
+ valueField="id"
68
+ textField="title"
69
+ [direction]="'vertical'"
70
+ [look]="'solid'"
71
+ [multiple]="false"
72
+ [showControl]="false"
73
+ [items]="instanceListItems()"
74
+ [customTemplate]="instanceItemTemplate"
75
+ (onValueChanged)="handleInstanceSelection($event)"
76
+ >
77
+ <ng-template #instanceItemTemplate let-item>
78
+ <div class="flex w-full flex-col items-start gap-0.5 py-1">
79
+ <span class="font-medium">{{ item.data.title }}</span>
80
+ <span class="text-xs opacity-70">{{ item.data.deploymentLabelKey | translate | async }}</span>
81
+ </div>
82
+ </ng-template>
83
+ </ax-selection-list>
84
+ }
85
+ </div>
86
+ <ax-footer>
87
+ <ax-suffix>
88
+ <ax-button
89
+ look="outline"
90
+ [text]="'@general:actions.cancel.title' | translate | async"
91
+ (onClick)="close()"
92
+ ></ax-button>
93
+ </ax-suffix>
94
+ </ax-footer>
95
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i2.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i4.AXDecoratorGenericComponent, selector: "ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay" }, { kind: "ngmodule", type: AXSelectionListModule }, { kind: "component", type: i3.AXSelectionListComponent, selector: "ax-selection-list", inputs: ["id", "name", "disabled", "readonly", "tabIndex", "size", "value", "valueField", "textField", "disabledField", "readonlyField", "multiple", "direction", "customTemplate", "showControl", "items", "look"], outputs: ["onValueChanged", "onBlur", "onFocus"] }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: i7.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
96
+ }
97
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMJiraInstancePickerPopupComponent, decorators: [{
98
+ type: Component,
99
+ args: [{
100
+ selector: 'axm-jira-instance-picker-popup',
101
+ changeDetection: ChangeDetectionStrategy.OnPush,
102
+ imports: [AsyncPipe, AXButtonModule, AXDecoratorModule, AXSelectionListModule, AXTranslationModule],
103
+ template: `
104
+ <div class="flex flex-col gap-2 p-4">
105
+ @if (instances.length === 0) {
106
+ <p class="text-sm opacity-70">
107
+ {{ '@extensions-jira:integration.connect.instance-picker.empty' | translate | async }}
108
+ </p>
109
+ } @else {
110
+ <ax-selection-list
111
+ class="w-full"
112
+ valueField="id"
113
+ textField="title"
114
+ [direction]="'vertical'"
115
+ [look]="'solid'"
116
+ [multiple]="false"
117
+ [showControl]="false"
118
+ [items]="instanceListItems()"
119
+ [customTemplate]="instanceItemTemplate"
120
+ (onValueChanged)="handleInstanceSelection($event)"
121
+ >
122
+ <ng-template #instanceItemTemplate let-item>
123
+ <div class="flex w-full flex-col items-start gap-0.5 py-1">
124
+ <span class="font-medium">{{ item.data.title }}</span>
125
+ <span class="text-xs opacity-70">{{ item.data.deploymentLabelKey | translate | async }}</span>
126
+ </div>
127
+ </ng-template>
128
+ </ax-selection-list>
129
+ }
130
+ </div>
131
+ <ax-footer>
132
+ <ax-suffix>
133
+ <ax-button
134
+ look="outline"
135
+ [text]="'@general:actions.cancel.title' | translate | async"
136
+ (onClick)="close()"
137
+ ></ax-button>
138
+ </ax-suffix>
139
+ </ax-footer>
140
+ `,
141
+ }]
142
+ }] });
143
+
144
+ //#endregion
145
+ //#region ---- Command ----
146
+ /** Jira connect: pick instance → self-hosted PAT or cloud OAuth2. */
147
+ class ConnectJiraCommand {
148
+ constructor() {
149
+ //#region ---- Services & Dependencies ----
150
+ this.popupService = inject(AXPopupService);
151
+ this.translationService = inject(AXTranslationService);
152
+ this.entityService = inject(AXPEntityService);
153
+ this.layoutBuilder = inject(AXPLayoutBuilderService);
154
+ this.commandService = inject(AXPCommandService);
155
+ this.sessionService = inject(AXPSessionService);
156
+ }
157
+ //#endregion
158
+ //#region ---- Execute ----
159
+ async execute(input = {}) {
160
+ try {
161
+ const providerId = defaultTo(input.providerId, 'jira');
162
+ const connectionScope = input.connectionScope ?? 'tenant';
163
+ const I18N = '@extensions-jira:integration.connect';
164
+ const instance = await this.pickInstance();
165
+ if (!instance) {
166
+ return { success: true, kind: 'object', data: { outcome: 'cancelled' } };
167
+ }
168
+ if (instance.deploymentType === 'selfHosted') {
169
+ return this.connectSelfHosted(providerId, connectionScope, instance, I18N);
170
+ }
171
+ return this.connectCloud(providerId, connectionScope, instance, I18N);
172
+ }
173
+ catch (error) {
174
+ const message = error instanceof Error ? error.message : 'Failed to connect Jira instance.';
175
+ return { success: false, message: { text: message } };
176
+ }
177
+ }
178
+ //#endregion
179
+ //#region ---- Instance Picker ----
180
+ async pickInstance() {
181
+ const instances = await this.loadActiveInstances();
182
+ const title = await this.translationService.translateAsync('@extensions-jira:integration.connect.instance-picker.title');
183
+ const result = await this.popupService.open(AXMJiraInstancePickerPopupComponent, {
184
+ title,
185
+ size: 'sm',
186
+ data: { instances },
187
+ });
188
+ return result?.data?.instance ?? null;
189
+ }
190
+ async loadActiveInstances() {
191
+ const accessor = this.entityService
192
+ .withEntity(RootConfig.module.name, RootConfig.entities.jiraInstance.name)
193
+ .data();
194
+ const result = await accessor.query({
195
+ skip: 0,
196
+ take: 200,
197
+ filter: {
198
+ logic: 'and',
199
+ filters: [{ field: 'isActive', operator: { type: 'equal' }, value: true }],
200
+ },
201
+ });
202
+ return result.items ?? [];
203
+ }
204
+ //#endregion
205
+ //#region ---- Self-Hosted (PAT) ----
206
+ async connectSelfHosted(providerId, connectionScope, instance, i18nPrefix) {
207
+ const form = await this.openPatDialog({
208
+ i18nPrefix,
209
+ context: {
210
+ displayName: instance.name,
211
+ instanceUrl: defaultTo(instance.baseUrl, ''),
212
+ token: '',
213
+ },
214
+ instanceUrlReadonly: true,
215
+ });
216
+ if (!form) {
217
+ return { success: true, kind: 'object', data: { outcome: 'cancelled' } };
218
+ }
219
+ const result = await this.commandService.execute(AXMIntegrationManagementCommandKeys.ConnectionConnectWithCredentials, {
220
+ providerId,
221
+ authMethodType: AXP_INTEGRATION_AUTH_METHOD_TYPE.Pat,
222
+ connectionScope,
223
+ connectionKey: instance.name,
224
+ displayName: defaultTo(trim(form.displayName), instance.name),
225
+ instanceUrl: defaultTo(trim(form.instanceUrl), defaultTo(instance.baseUrl, '')),
226
+ credentials: { token: form.token },
227
+ config: { jiraInstanceId: instance.id },
228
+ });
229
+ const data = runtimeCommandPayloadData(result);
230
+ if (!data) {
231
+ return {
232
+ success: false,
233
+ message: result?.message ?? { text: 'Failed to save Jira connection.' },
234
+ };
235
+ }
236
+ return { success: true, kind: 'object', data: { outcome: 'connected', connection: data } };
237
+ }
238
+ //#endregion
239
+ //#region ---- Cloud (OAuth2) ----
240
+ async connectCloud(providerId, connectionScope, instance, i18nPrefix) {
241
+ const instructions = await this.translationService.translateAsync('@extensions-jira:integration.auth.oauth.instructions');
242
+ const confirmedResult = await this.layoutBuilder
243
+ .create()
244
+ .dialog((dialog) => {
245
+ dialog
246
+ .setTitle(`${i18nPrefix}.oauth-dialog.title`)
247
+ .setSize('sm')
248
+ .setCloseButton(true)
249
+ .content((flex) => {
250
+ flex
251
+ .setDirection('column')
252
+ .setGap('12px')
253
+ .customWidget('text-block-layout', {
254
+ content: instructions ?? '',
255
+ });
256
+ })
257
+ .setActions((actions) => {
258
+ actions.cancel('@general:actions.cancel.title').submit(`${i18nPrefix}.oauth-dialog.actions.connect`);
259
+ })
260
+ .onAction(async (ref) => ref.action() !== 'cancel');
261
+ })
262
+ .show();
263
+ const confirmed = resolveLayoutBuilderDialogResult(confirmedResult);
264
+ if (!confirmed) {
265
+ return { success: true, kind: 'object', data: { outcome: 'cancelled' } };
266
+ }
267
+ return {
268
+ success: false,
269
+ message: {
270
+ text: '@extensions-jira:integration.auth.oauth.not-implemented',
271
+ },
272
+ };
273
+ }
274
+ //#endregion
275
+ //#region ---- Dialogs ----
276
+ async openPatDialog(input) {
277
+ const instructions = await this.translationService.translateAsync('@extensions-jira:integration.auth.pat.instructions');
278
+ const result = await this.layoutBuilder
279
+ .create()
280
+ .dialog((dialog) => {
281
+ dialog
282
+ .setTitle(`${input.i18nPrefix}.pat-dialog.title`)
283
+ .setSize('md')
284
+ .setCloseButton(true)
285
+ .setContext({ ...input.context })
286
+ .content((flex) => {
287
+ flex
288
+ .setDirection('column')
289
+ .setGap('12px')
290
+ .customWidget('text-block-layout', { content: instructions ?? '' })
291
+ .formField(`${input.i18nPrefix}.pat-dialog.fields.display-name`, (field) => {
292
+ field.path('displayName');
293
+ field.textBox({ placeholder: `${input.i18nPrefix}.pat-dialog.placeholders.display-name` });
294
+ })
295
+ .formField(`${input.i18nPrefix}.pat-dialog.fields.instance-url`, (field) => {
296
+ field.path('instanceUrl');
297
+ if (input.instanceUrlReadonly) {
298
+ field.readonly(true);
299
+ }
300
+ field.textBox({
301
+ placeholder: `${input.i18nPrefix}.pat-dialog.placeholders.instance-url`,
302
+ });
303
+ })
304
+ .formField(`${input.i18nPrefix}.pat-dialog.fields.token`, (field) => {
305
+ field.path('token');
306
+ field.passwordBox({
307
+ placeholder: `${input.i18nPrefix}.pat-dialog.placeholders.token`,
308
+ revealToggle: true,
309
+ validations: [{ rule: 'required' }],
310
+ });
311
+ });
312
+ })
313
+ .setActions((actions) => {
314
+ actions
315
+ .cancel('@general:actions.cancel.title')
316
+ .submit(`${input.i18nPrefix}.pat-dialog.actions.save`);
317
+ })
318
+ .onAction(async (ref) => {
319
+ if (ref.action() === 'cancel') {
320
+ return null;
321
+ }
322
+ const ctx = ref.context();
323
+ const token = trim(ctx.token);
324
+ if (!token) {
325
+ throw new Error('Personal access token is required.');
326
+ }
327
+ return {
328
+ displayName: trim(ctx.displayName),
329
+ instanceUrl: trim(ctx.instanceUrl),
330
+ token,
331
+ };
332
+ });
333
+ })
334
+ .show();
335
+ return resolveLayoutBuilderDialogResult(result);
336
+ }
337
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: ConnectJiraCommand, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
338
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: ConnectJiraCommand, providedIn: 'root' }); }
339
+ }
340
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: ConnectJiraCommand, decorators: [{
341
+ type: Injectable,
342
+ args: [{ providedIn: 'root' }]
343
+ }] });
344
+
345
+ export { ConnectJiraCommand };
346
+ //# sourceMappingURL=acorex-platform-extension-project-management-jira-client-connect-jira.command-DNMUeLqv.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"acorex-platform-extension-project-management-jira-client-connect-jira.command-DNMUeLqv.mjs","sources":["../../../../libs/extensions/project-management/jira/client/src/lib/features/connect/ui/jira-instance-picker-popup.component.ts","../../../../libs/extensions/project-management/jira/client/src/lib/features/connect/connect-jira.command.ts"],"sourcesContent":["//#region ---- Imports ----\n\nimport { AXValueChangedEvent } from '@acorex/cdk/common';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXBasePageComponent } from '@acorex/components/page';\nimport { AXSelectionListModule } from '@acorex/components/selection-list';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { resolveMultiLanguageString } from '@acorex-platform/framework-shared/core';\nimport type { AXEJiraInstanceEntityModel } from '@acorex-platform/extension-project-management-jira-domain';\nimport { AsyncPipe } from '@angular/common';\nimport { ChangeDetectionStrategy, Component } from '@angular/core';\n\n//#endregion\n\n//#region ---- Types ----\n\nexport interface AXMJiraInstancePickerPopupResult {\n instance: AXEJiraInstanceEntityModel;\n}\n\n//#endregion\n\n//#region ---- Component ----\n\n@Component({\n selector: 'axm-jira-instance-picker-popup',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [AsyncPipe, AXButtonModule, AXDecoratorModule, AXSelectionListModule, AXTranslationModule],\n template: `\n <div class=\"flex flex-col gap-2 p-4\">\n @if (instances.length === 0) {\n <p class=\"text-sm opacity-70\">\n {{ '@extensions-jira:integration.connect.instance-picker.empty' | translate | async }}\n </p>\n } @else {\n <ax-selection-list\n class=\"w-full\"\n valueField=\"id\"\n textField=\"title\"\n [direction]=\"'vertical'\"\n [look]=\"'solid'\"\n [multiple]=\"false\"\n [showControl]=\"false\"\n [items]=\"instanceListItems()\"\n [customTemplate]=\"instanceItemTemplate\"\n (onValueChanged)=\"handleInstanceSelection($event)\"\n >\n <ng-template #instanceItemTemplate let-item>\n <div class=\"flex w-full flex-col items-start gap-0.5 py-1\">\n <span class=\"font-medium\">{{ item.data.title }}</span>\n <span class=\"text-xs opacity-70\">{{ item.data.deploymentLabelKey | translate | async }}</span>\n </div>\n </ng-template>\n </ax-selection-list>\n }\n </div>\n <ax-footer>\n <ax-suffix>\n <ax-button\n look=\"outline\"\n [text]=\"'@general:actions.cancel.title' | translate | async\"\n (onClick)=\"close()\"\n ></ax-button>\n </ax-suffix>\n </ax-footer>\n `,\n})\nexport class AXMJiraInstancePickerPopupComponent extends AXBasePageComponent {\n instances: AXEJiraInstanceEntityModel[] = [];\n\n protected instanceListItems(): Array<{\n id: string;\n title: string;\n deploymentLabelKey: string;\n }> {\n return this.instances.map((instance) => ({\n id: instance.id,\n title: this.instanceTitle(instance),\n deploymentLabelKey: this.deploymentLabelKey(instance),\n }));\n }\n\n protected handleInstanceSelection(event: AXValueChangedEvent): void {\n if (!event.isUserInteraction) {\n return;\n }\n\n const instance = this.instances.find((item) => item.id === event.value);\n if (instance) {\n this.selectInstance(instance);\n }\n }\n\n protected instanceTitle(instance: AXEJiraInstanceEntityModel): string {\n return resolveMultiLanguageString(instance.title, 'en-US');\n }\n\n protected deploymentLabelKey(instance: AXEJiraInstanceEntityModel): string {\n return instance.deploymentType === 'cloud'\n ? '@extensions-jira:instances.entities.instance.fields.deployment-type.options.cloud'\n : '@extensions-jira:instances.entities.instance.fields.deployment-type.options.self-hosted';\n }\n\n protected selectInstance(instance: AXEJiraInstanceEntityModel): void {\n this.close({ instance } satisfies AXMJiraInstancePickerPopupResult);\n }\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXPCommand, type AXPCommandExecuteResultPromise } from '@acorex-platform/framework-shared/runtime';\nimport {\n AXP_INTEGRATION_AUTH_METHOD_TYPE,\n runtimeCommandPayloadData,\n type AXPIntegrationConnectionScope,\n type AXPRuntimeCommandResult,\n type AXPSafeIntegrationConnectionDto,\n} from '@acorex-platform/framework-shared/core';\nimport {\n type ConnectCommandResult,\n} from '@acorex-platform/module-integration-management-client';\nimport { AXMIntegrationManagementCommandKeys } from '@acorex-platform/module-integration-management-client/contracts';\nimport { AXPSessionService } from '@acorex-platform/framework-client/auth';\nimport {\n AXPLayoutBuilderService,\n resolveLayoutBuilderDialogResult,\n type AXPDialogRef,\n type IActionBuilder,\n type IDialogBuilder,\n type IFlexContainerBuilder,\n type IFormFieldBuilder,\n} from '@acorex-platform/framework-client/layout/builder';\nimport { AXPEntityService } from '@acorex-platform/framework-client/layout/entity';\nimport { AXPCommandService } from '@acorex-platform/framework-client/runtime';\nimport { AXPopupService } from '@acorex/components/popup';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { Injectable, inject } from '@angular/core';\nimport { defaultTo, get, trim } from 'lodash-es';\n\nimport { RootConfig } from '@acorex-platform/extension-project-management-jira-client/contracts';\nimport type { AXEJiraInstanceEntityModel } from '@acorex-platform/extension-project-management-jira-domain';\nimport {\n AXMJiraInstancePickerPopupComponent,\n type AXMJiraInstancePickerPopupResult,\n} from './ui/jira-instance-picker-popup.component';\n\n//#endregion\n\n//#region ---- Types ----\n\nexport interface ConnectJiraCommandInput {\n providerId?: string;\n connectionScope?: AXPIntegrationConnectionScope;\n}\n\ninterface JiraPatFormContext {\n displayName: string;\n instanceUrl: string;\n token: string;\n}\n\ninterface JiraPatFormResult {\n displayName: string;\n instanceUrl: string;\n token: string;\n}\n\n//#endregion\n\n//#region ---- Command ----\n\n/** Jira connect: pick instance → self-hosted PAT or cloud OAuth2. */\n@Injectable({ providedIn: 'root' })\nexport class ConnectJiraCommand implements AXPCommand<ConnectJiraCommandInput, ConnectCommandResult> {\n //#region ---- Services & Dependencies ----\n\n private readonly popupService = inject(AXPopupService);\n private readonly translationService = inject(AXTranslationService);\n private readonly entityService = inject(AXPEntityService);\n private readonly layoutBuilder = inject(AXPLayoutBuilderService);\n private readonly commandService = inject(AXPCommandService);\n private readonly sessionService = inject(AXPSessionService);\n\n //#endregion\n\n //#region ---- Execute ----\n\n async execute(input: ConnectJiraCommandInput = {}): AXPCommandExecuteResultPromise<ConnectCommandResult> {\n try {\n const providerId = defaultTo(input.providerId, 'jira');\n const connectionScope: AXPIntegrationConnectionScope = input.connectionScope ?? 'tenant';\n const I18N = '@extensions-jira:integration.connect';\n\n const instance = await this.pickInstance();\n if (!instance) {\n return { success: true, kind: 'object', data: { outcome: 'cancelled' } };\n }\n\n if (instance.deploymentType === 'selfHosted') {\n return this.connectSelfHosted(providerId, connectionScope, instance, I18N);\n }\n\n return this.connectCloud(providerId, connectionScope, instance, I18N);\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : 'Failed to connect Jira instance.';\n return { success: false, message: { text: message } };\n }\n }\n\n //#endregion\n\n //#region ---- Instance Picker ----\n\n private async pickInstance(): Promise<AXEJiraInstanceEntityModel | null> {\n const instances = await this.loadActiveInstances();\n const title = await this.translationService.translateAsync(\n '@extensions-jira:integration.connect.instance-picker.title',\n );\n\n const result = await this.popupService.open(AXMJiraInstancePickerPopupComponent, {\n title,\n size: 'sm',\n data: { instances },\n });\n\n return (result?.data as AXMJiraInstancePickerPopupResult | undefined)?.instance ?? null;\n }\n\n private async loadActiveInstances(): Promise<AXEJiraInstanceEntityModel[]> {\n const accessor = this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.jiraInstance.name)\n .data<string, AXEJiraInstanceEntityModel>();\n\n const result = await accessor.query({\n skip: 0,\n take: 200,\n filter: {\n logic: 'and',\n filters: [{ field: 'isActive', operator: { type: 'equal' }, value: true }],\n },\n });\n\n return result.items ?? [];\n }\n\n //#endregion\n\n //#region ---- Self-Hosted (PAT) ----\n\n private async connectSelfHosted(\n providerId: string,\n connectionScope: AXPIntegrationConnectionScope,\n instance: AXEJiraInstanceEntityModel,\n i18nPrefix: string,\n ): AXPCommandExecuteResultPromise<ConnectCommandResult> {\n const form = await this.openPatDialog({\n i18nPrefix,\n context: {\n displayName: instance.name,\n instanceUrl: defaultTo(instance.baseUrl, ''),\n token: '',\n },\n instanceUrlReadonly: true,\n });\n\n if (!form) {\n return { success: true, kind: 'object', data: { outcome: 'cancelled' } };\n }\n\n const result = await this.commandService.execute<\n Record<string, unknown>,\n AXPSafeIntegrationConnectionDto\n >(AXMIntegrationManagementCommandKeys.ConnectionConnectWithCredentials, {\n providerId,\n authMethodType: AXP_INTEGRATION_AUTH_METHOD_TYPE.Pat,\n connectionScope,\n connectionKey: instance.name,\n displayName: defaultTo(trim(form.displayName), instance.name),\n instanceUrl: defaultTo(trim(form.instanceUrl), defaultTo(instance.baseUrl, '')),\n credentials: { token: form.token },\n config: { jiraInstanceId: instance.id },\n });\n\n const data = runtimeCommandPayloadData(result);\n if (!data) {\n return {\n success: false,\n message: result?.message ?? { text: 'Failed to save Jira connection.' },\n };\n }\n\n return { success: true, kind: 'object', data: { outcome: 'connected', connection: data } };\n }\n\n //#endregion\n\n //#region ---- Cloud (OAuth2) ----\n\n private async connectCloud(\n providerId: string,\n connectionScope: AXPIntegrationConnectionScope,\n instance: AXEJiraInstanceEntityModel,\n i18nPrefix: string,\n ): AXPCommandExecuteResultPromise<ConnectCommandResult> {\n const instructions = await this.translationService.translateAsync(\n '@extensions-jira:integration.auth.oauth.instructions',\n );\n\n const confirmedResult = await this.layoutBuilder\n .create()\n .dialog<boolean>((dialog: IDialogBuilder<boolean>) => {\n dialog\n .setTitle(`${i18nPrefix}.oauth-dialog.title`)\n .setSize('sm')\n .setCloseButton(true)\n .content((flex: IFlexContainerBuilder) => {\n flex\n .setDirection('column')\n .setGap('12px')\n .customWidget('text-block-layout', {\n content: instructions ?? '',\n });\n })\n .setActions((actions: IActionBuilder) => {\n actions.cancel('@general:actions.cancel.title').submit(`${i18nPrefix}.oauth-dialog.actions.connect`);\n })\n .onAction(async (ref: AXPDialogRef) => ref.action() !== 'cancel');\n })\n .show();\n\n const confirmed = resolveLayoutBuilderDialogResult<boolean>(confirmedResult);\n if (!confirmed) {\n return { success: true, kind: 'object', data: { outcome: 'cancelled' } };\n }\n\n return {\n success: false,\n message: {\n text: '@extensions-jira:integration.auth.oauth.not-implemented',\n },\n };\n }\n\n //#endregion\n\n //#region ---- Dialogs ----\n\n private async openPatDialog(input: {\n i18nPrefix: string;\n context: JiraPatFormContext;\n instanceUrlReadonly?: boolean;\n }): Promise<JiraPatFormResult | null> {\n const instructions = await this.translationService.translateAsync(\n '@extensions-jira:integration.auth.pat.instructions',\n );\n\n const result = await this.layoutBuilder\n .create()\n .dialog<JiraPatFormResult | null>((dialog: IDialogBuilder<JiraPatFormResult | null>) => {\n dialog\n .setTitle(`${input.i18nPrefix}.pat-dialog.title`)\n .setSize('md')\n .setCloseButton(true)\n .setContext({ ...input.context })\n .content((flex: IFlexContainerBuilder) => {\n flex\n .setDirection('column')\n .setGap('12px')\n .customWidget('text-block-layout', { content: instructions ?? '' })\n .formField(`${input.i18nPrefix}.pat-dialog.fields.display-name`, (field: IFormFieldBuilder) => {\n field.path('displayName');\n field.textBox({ placeholder: `${input.i18nPrefix}.pat-dialog.placeholders.display-name` });\n })\n .formField(`${input.i18nPrefix}.pat-dialog.fields.instance-url`, (field) => {\n field.path('instanceUrl');\n if (input.instanceUrlReadonly) {\n field.readonly(true);\n }\n field.textBox({\n placeholder: `${input.i18nPrefix}.pat-dialog.placeholders.instance-url`,\n });\n })\n .formField(`${input.i18nPrefix}.pat-dialog.fields.token`, (field) => {\n field.path('token');\n field.passwordBox({\n placeholder: `${input.i18nPrefix}.pat-dialog.placeholders.token`,\n revealToggle: true,\n validations: [{ rule: 'required' }],\n });\n });\n })\n .setActions((actions: IActionBuilder) => {\n actions\n .cancel('@general:actions.cancel.title')\n .submit(`${input.i18nPrefix}.pat-dialog.actions.save`);\n })\n .onAction(async (ref: AXPDialogRef) => {\n if (ref.action() === 'cancel') {\n return null;\n }\n const ctx = ref.context() as JiraPatFormContext;\n const token = trim(ctx.token);\n if (!token) {\n throw new Error('Personal access token is required.');\n }\n return {\n displayName: trim(ctx.displayName),\n instanceUrl: trim(ctx.instanceUrl),\n token,\n };\n });\n })\n .show();\n\n return resolveLayoutBuilderDialogResult<JiraPatFormResult>(result);\n }\n\n //#endregion\n}\n\n//#endregion\n"],"names":["i2","i4"],"mappings":"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"}
@@ -0,0 +1,188 @@
1
+ export { AXE_PM_PROJECT_SYNC_STRATEGIES as AXE_JIRA_PROJECT_SYNC_STRATEGIES } from '@acorex-platform/extension-project-management-core-contracts';
2
+
3
+ //#region ---- Module Config ----
4
+ const config = {
5
+ i18n: 'extensions-jira',
6
+ };
7
+ /** Logical module name (PascalCase) — matches entity-storage API naming (`JiraExtension.JiraInstance`). */
8
+ const MODULE_NAME = 'JiraExtension';
9
+ const RootConfig = {
10
+ config,
11
+ module: {
12
+ name: MODULE_NAME,
13
+ title: `@${config.i18n}:integration.display-name`,
14
+ icon: 'fa-brands fa-jira',
15
+ },
16
+ entities: {
17
+ jiraInstance: {
18
+ name: 'JiraInstance',
19
+ fullName: `${MODULE_NAME}.JiraInstance`,
20
+ title: `@${config.i18n}:instances.entities.instance.title`,
21
+ titlePlural: `@${config.i18n}:instances.entities.instance.plural`,
22
+ icon: 'fa-light fa-server',
23
+ },
24
+ jiraProject: {
25
+ name: 'JiraProject',
26
+ fullName: `${MODULE_NAME}.JiraProject`,
27
+ title: `@${config.i18n}:project-links.entities.project-link.title`,
28
+ titlePlural: `@${config.i18n}:project-links.entities.project-link.plural`,
29
+ icon: 'fa-light fa-link',
30
+ },
31
+ jiraIssueType: {
32
+ name: 'JiraIssueType',
33
+ fullName: `${MODULE_NAME}.JiraIssueType`,
34
+ title: `@${config.i18n}:issue-types.entities.issue-type.title`,
35
+ titlePlural: `@${config.i18n}:issue-types.entities.issue-type.plural`,
36
+ icon: 'fa-light fa-list-tree',
37
+ },
38
+ jiraField: {
39
+ name: 'JiraField',
40
+ fullName: `${MODULE_NAME}.JiraField`,
41
+ title: `@${config.i18n}:fields.entities.field.title`,
42
+ titlePlural: `@${config.i18n}:fields.entities.field.plural`,
43
+ icon: 'fa-light fa-input-text',
44
+ },
45
+ jiraProjectIssueType: {
46
+ name: 'JiraProjectIssueType',
47
+ fullName: `${MODULE_NAME}.JiraProjectIssueType`,
48
+ title: `@${config.i18n}:project-issue-types.entities.project-issue-type.title`,
49
+ titlePlural: `@${config.i18n}:project-issue-types.entities.project-issue-type.plural`,
50
+ icon: 'fa-light fa-link',
51
+ },
52
+ jiraProjectIssueTypeField: {
53
+ name: 'JiraProjectIssueTypeField',
54
+ fullName: `${MODULE_NAME}.JiraProjectIssueTypeField`,
55
+ title: `@${config.i18n}:project-issue-type-fields.entities.project-issue-type-field.title`,
56
+ titlePlural: `@${config.i18n}:project-issue-type-fields.entities.project-issue-type-field.plural`,
57
+ icon: 'fa-light fa-table-columns',
58
+ },
59
+ jiraWorkflowStatus: {
60
+ name: 'JiraWorkflowStatus',
61
+ fullName: `${MODULE_NAME}.JiraWorkflowStatus`,
62
+ title: `@${config.i18n}:workflow-statuses.entities.workflow-status.title`,
63
+ titlePlural: `@${config.i18n}:workflow-statuses.entities.workflow-status.plural`,
64
+ icon: 'fa-light fa-circle-dot',
65
+ },
66
+ jiraIssue: {
67
+ name: 'JiraIssue',
68
+ fullName: `${MODULE_NAME}.JiraIssue`,
69
+ title: `@${config.i18n}:issues.entities.issue.title`,
70
+ titlePlural: `@${config.i18n}:issues.entities.issue.plural`,
71
+ icon: 'fa-light fa-ticket',
72
+ },
73
+ jiraWorklog: {
74
+ name: 'JiraWorklog',
75
+ fullName: `${MODULE_NAME}.JiraWorklog`,
76
+ title: `@${config.i18n}:worklogs.entities.worklog.title`,
77
+ titlePlural: `@${config.i18n}:worklogs.entities.worklog.plural`,
78
+ icon: 'fa-light fa-clock',
79
+ },
80
+ },
81
+ };
82
+ //#endregion
83
+
84
+ //#region ---- Command Keys ----
85
+ const AXEJiraCommandKeys = {
86
+ ConnectionConnect: 'jira-extension.Connection:Connect',
87
+ ProjectImportFromJira: 'jira-extension.Project:ImportFromJira',
88
+ ProjectSync: 'jira-extension.Project:Sync',
89
+ };
90
+ //#endregion
91
+
92
+ //#region ---- Query Keys ----
93
+ const AXEJiraQueryKeys = {
94
+ ProjectListRemote: 'jira-extension.Project:ListRemote',
95
+ };
96
+ //#endregion
97
+
98
+ //#region ---- Menu Keys ----
99
+ const AXEJiraMenuKeys = {
100
+ JiraExtensionConfig: 'jira-extension:Menu:Configuration',
101
+ Instances: 'jira-extension:Menu:Instances',
102
+ IssueTypes: 'jira-extension:Menu:IssueTypes',
103
+ Fields: 'jira-extension:Menu:Fields',
104
+ Issues: 'jira-extension:Menu:Issues',
105
+ Worklogs: 'jira-extension:Menu:Worklogs',
106
+ };
107
+ //#endregion
108
+
109
+ //#region ---- Permission Keys ----
110
+ /**
111
+ * Administration capabilities used by this extension.
112
+ * Domain capability keys for this module. Root groups live in `AXPCommonPermissionGroupKeys` (common contracts).
113
+ */
114
+ const AXPAdministrationPermissionKeys = {
115
+ Access: 'Administration:Permission:Access',
116
+ MaintainUsersAndRoles: 'Administration:Permission:MaintainUsersAndRoles',
117
+ ManageSessions: 'Administration:Permission:ManageSessions',
118
+ MaintainPolicies: 'Administration:Permission:MaintainPolicies',
119
+ ViewIntegrations: 'Administration:Permission:ViewIntegrations',
120
+ MaintainConnections: 'Administration:Permission:MaintainConnections',
121
+ ManageIntegrationActions: 'Administration:Permission:ManageIntegrationActions',
122
+ MaintainWorkflows: 'Administration:Permission:MaintainWorkflows',
123
+ ManageWorkflowActions: 'Administration:Permission:ManageWorkflowActions',
124
+ ViewRules: 'Administration:Permission:ViewRules',
125
+ MaintainRules: 'Administration:Permission:MaintainRules',
126
+ ManageRuleActions: 'Administration:Permission:ManageRuleActions',
127
+ MaintainAi: 'Administration:Permission:MaintainAi',
128
+ UseAiAssist: 'Administration:Permission:UseAiAssist',
129
+ MaintainDashboards: 'Administration:Permission:MaintainDashboards',
130
+ ViewJobs: 'Administration:Permission:ViewJobs',
131
+ ManageJobActions: 'Administration:Permission:ManageJobActions',
132
+ ViewObservability: 'Administration:Permission:ViewObservability',
133
+ MaintainObservability: 'Administration:Permission:MaintainObservability',
134
+ };
135
+ /**
136
+ * @deprecated Prefer {@link AXPAdministrationPermissionKeys}.
137
+ * Legacy nested shape kept so existing imports compile during migration.
138
+ */
139
+ const AXEJiraPermissions = {
140
+ JiraExtension: {
141
+ Management: AXPAdministrationPermissionKeys.MaintainConnections,
142
+ JiraInstance: {
143
+ View: AXPAdministrationPermissionKeys.ViewIntegrations,
144
+ Create: AXPAdministrationPermissionKeys.MaintainConnections,
145
+ Update: AXPAdministrationPermissionKeys.MaintainConnections,
146
+ Delete: AXPAdministrationPermissionKeys.MaintainConnections,
147
+ },
148
+ JiraProject: {
149
+ View: AXPAdministrationPermissionKeys.ViewIntegrations,
150
+ Create: AXPAdministrationPermissionKeys.MaintainConnections,
151
+ Update: AXPAdministrationPermissionKeys.MaintainConnections,
152
+ Delete: AXPAdministrationPermissionKeys.MaintainConnections,
153
+ },
154
+ JiraIssue: {
155
+ View: AXPAdministrationPermissionKeys.ViewIntegrations,
156
+ Create: AXPAdministrationPermissionKeys.MaintainConnections,
157
+ Update: AXPAdministrationPermissionKeys.MaintainConnections,
158
+ Delete: AXPAdministrationPermissionKeys.MaintainConnections,
159
+ },
160
+ JiraWorklog: {
161
+ View: AXPAdministrationPermissionKeys.ViewIntegrations,
162
+ Create: AXPAdministrationPermissionKeys.MaintainConnections,
163
+ Update: AXPAdministrationPermissionKeys.MaintainConnections,
164
+ Delete: AXPAdministrationPermissionKeys.MaintainConnections,
165
+ },
166
+ Catalog: {
167
+ View: AXPAdministrationPermissionKeys.ViewIntegrations,
168
+ Manage: AXPAdministrationPermissionKeys.MaintainConnections,
169
+ },
170
+ ProjectImport: {
171
+ Execute: AXPAdministrationPermissionKeys.ManageIntegrationActions,
172
+ },
173
+ ProjectSync: {
174
+ Execute: AXPAdministrationPermissionKeys.ManageIntegrationActions,
175
+ },
176
+ },
177
+ };
178
+ //#endregion
179
+
180
+ //#region ---- Remote Jira project DTO ----
181
+ //#endregion
182
+
183
+ /**
184
+ * Generated bundle index. Do not edit.
185
+ */
186
+
187
+ export { AXEJiraCommandKeys, AXEJiraMenuKeys, AXEJiraPermissions, AXEJiraQueryKeys, AXPAdministrationPermissionKeys, RootConfig };
188
+ //# sourceMappingURL=acorex-platform-extension-project-management-jira-client-contracts.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"acorex-platform-extension-project-management-jira-client-contracts.mjs","sources":["../../../../libs/extensions/project-management/jira/contracts/src/root-config.ts","../../../../libs/extensions/project-management/jira/contracts/src/commands.keys.ts","../../../../libs/extensions/project-management/jira/contracts/src/queries.keys.ts","../../../../libs/extensions/project-management/jira/contracts/src/menu.keys.ts","../../../../libs/extensions/project-management/jira/contracts/src/permission.keys.ts","../../../../libs/extensions/project-management/jira/contracts/src/project-sync.api.types.ts","../../../../libs/extensions/project-management/jira/contracts/src/acorex-platform-extension-project-management-jira-client-contracts.ts"],"sourcesContent":["//#region ---- Module Config ----\n\nconst config = {\n i18n: 'extensions-jira',\n};\n\n/** Logical module name (PascalCase) — matches entity-storage API naming (`JiraExtension.JiraInstance`). */\nconst MODULE_NAME = 'JiraExtension';\n\nexport const RootConfig = {\n config,\n module: {\n name: MODULE_NAME,\n title: `@${config.i18n}:integration.display-name`,\n icon: 'fa-brands fa-jira',\n },\n entities: {\n jiraInstance: {\n name: 'JiraInstance',\n fullName: `${MODULE_NAME}.JiraInstance`,\n title: `@${config.i18n}:instances.entities.instance.title`,\n titlePlural: `@${config.i18n}:instances.entities.instance.plural`,\n icon: 'fa-light fa-server',\n },\n jiraProject: {\n name: 'JiraProject',\n fullName: `${MODULE_NAME}.JiraProject`,\n title: `@${config.i18n}:project-links.entities.project-link.title`,\n titlePlural: `@${config.i18n}:project-links.entities.project-link.plural`,\n icon: 'fa-light fa-link',\n },\n jiraIssueType: {\n name: 'JiraIssueType',\n fullName: `${MODULE_NAME}.JiraIssueType`,\n title: `@${config.i18n}:issue-types.entities.issue-type.title`,\n titlePlural: `@${config.i18n}:issue-types.entities.issue-type.plural`,\n icon: 'fa-light fa-list-tree',\n },\n jiraField: {\n name: 'JiraField',\n fullName: `${MODULE_NAME}.JiraField`,\n title: `@${config.i18n}:fields.entities.field.title`,\n titlePlural: `@${config.i18n}:fields.entities.field.plural`,\n icon: 'fa-light fa-input-text',\n },\n jiraProjectIssueType: {\n name: 'JiraProjectIssueType',\n fullName: `${MODULE_NAME}.JiraProjectIssueType`,\n title: `@${config.i18n}:project-issue-types.entities.project-issue-type.title`,\n titlePlural: `@${config.i18n}:project-issue-types.entities.project-issue-type.plural`,\n icon: 'fa-light fa-link',\n },\n jiraProjectIssueTypeField: {\n name: 'JiraProjectIssueTypeField',\n fullName: `${MODULE_NAME}.JiraProjectIssueTypeField`,\n title: `@${config.i18n}:project-issue-type-fields.entities.project-issue-type-field.title`,\n titlePlural: `@${config.i18n}:project-issue-type-fields.entities.project-issue-type-field.plural`,\n icon: 'fa-light fa-table-columns',\n },\n jiraWorkflowStatus: {\n name: 'JiraWorkflowStatus',\n fullName: `${MODULE_NAME}.JiraWorkflowStatus`,\n title: `@${config.i18n}:workflow-statuses.entities.workflow-status.title`,\n titlePlural: `@${config.i18n}:workflow-statuses.entities.workflow-status.plural`,\n icon: 'fa-light fa-circle-dot',\n },\n jiraIssue: {\n name: 'JiraIssue',\n fullName: `${MODULE_NAME}.JiraIssue`,\n title: `@${config.i18n}:issues.entities.issue.title`,\n titlePlural: `@${config.i18n}:issues.entities.issue.plural`,\n icon: 'fa-light fa-ticket',\n },\n jiraWorklog: {\n name: 'JiraWorklog',\n fullName: `${MODULE_NAME}.JiraWorklog`,\n title: `@${config.i18n}:worklogs.entities.worklog.title`,\n titlePlural: `@${config.i18n}:worklogs.entities.worklog.plural`,\n icon: 'fa-light fa-clock',\n },\n },\n};\n\n//#endregion\n","//#region ---- Command Keys ----\n\nexport const AXEJiraCommandKeys = {\n ConnectionConnect: 'jira-extension.Connection:Connect',\n ProjectImportFromJira: 'jira-extension.Project:ImportFromJira',\n ProjectSync: 'jira-extension.Project:Sync',\n} as const;\n\n//#endregion\n","//#region ---- Query Keys ----\n\nexport const AXEJiraQueryKeys = {\n ProjectListRemote: 'jira-extension.Project:ListRemote',\n} as const;\n\n//#endregion\n","//#region ---- Menu Keys ----\n\nexport const AXEJiraMenuKeys = {\n JiraExtensionConfig: 'jira-extension:Menu:Configuration',\n Instances: 'jira-extension:Menu:Instances',\n IssueTypes: 'jira-extension:Menu:IssueTypes',\n Fields: 'jira-extension:Menu:Fields',\n Issues: 'jira-extension:Menu:Issues',\n Worklogs: 'jira-extension:Menu:Worklogs',\n} as const;\n\n//#endregion\n","//#region ---- Permission Keys ----\n\n/**\n * Administration capabilities used by this extension.\n * Domain capability keys for this module. Root groups live in `AXPCommonPermissionGroupKeys` (common contracts).\n */\nexport const AXPAdministrationPermissionKeys = {\n Access: 'Administration:Permission:Access',\n MaintainUsersAndRoles: 'Administration:Permission:MaintainUsersAndRoles',\n ManageSessions: 'Administration:Permission:ManageSessions',\n MaintainPolicies: 'Administration:Permission:MaintainPolicies',\n ViewIntegrations: 'Administration:Permission:ViewIntegrations',\n MaintainConnections: 'Administration:Permission:MaintainConnections',\n ManageIntegrationActions: 'Administration:Permission:ManageIntegrationActions',\n MaintainWorkflows: 'Administration:Permission:MaintainWorkflows',\n ManageWorkflowActions: 'Administration:Permission:ManageWorkflowActions',\n ViewRules: 'Administration:Permission:ViewRules',\n MaintainRules: 'Administration:Permission:MaintainRules',\n ManageRuleActions: 'Administration:Permission:ManageRuleActions',\n MaintainAi: 'Administration:Permission:MaintainAi',\n UseAiAssist: 'Administration:Permission:UseAiAssist',\n MaintainDashboards: 'Administration:Permission:MaintainDashboards',\n ViewJobs: 'Administration:Permission:ViewJobs',\n ManageJobActions: 'Administration:Permission:ManageJobActions',\n ViewObservability: 'Administration:Permission:ViewObservability',\n MaintainObservability: 'Administration:Permission:MaintainObservability',\n} as const;\n\n/**\n * @deprecated Prefer {@link AXPAdministrationPermissionKeys}.\n * Legacy nested shape kept so existing imports compile during migration.\n */\nexport const AXEJiraPermissions = {\n JiraExtension: {\n Management: AXPAdministrationPermissionKeys.MaintainConnections,\n JiraInstance: {\n View: AXPAdministrationPermissionKeys.ViewIntegrations,\n Create: AXPAdministrationPermissionKeys.MaintainConnections,\n Update: AXPAdministrationPermissionKeys.MaintainConnections,\n Delete: AXPAdministrationPermissionKeys.MaintainConnections,\n },\n JiraProject: {\n View: AXPAdministrationPermissionKeys.ViewIntegrations,\n Create: AXPAdministrationPermissionKeys.MaintainConnections,\n Update: AXPAdministrationPermissionKeys.MaintainConnections,\n Delete: AXPAdministrationPermissionKeys.MaintainConnections,\n },\n JiraIssue: {\n View: AXPAdministrationPermissionKeys.ViewIntegrations,\n Create: AXPAdministrationPermissionKeys.MaintainConnections,\n Update: AXPAdministrationPermissionKeys.MaintainConnections,\n Delete: AXPAdministrationPermissionKeys.MaintainConnections,\n },\n JiraWorklog: {\n View: AXPAdministrationPermissionKeys.ViewIntegrations,\n Create: AXPAdministrationPermissionKeys.MaintainConnections,\n Update: AXPAdministrationPermissionKeys.MaintainConnections,\n Delete: AXPAdministrationPermissionKeys.MaintainConnections,\n },\n Catalog: {\n View: AXPAdministrationPermissionKeys.ViewIntegrations,\n Manage: AXPAdministrationPermissionKeys.MaintainConnections,\n },\n ProjectImport: {\n Execute: AXPAdministrationPermissionKeys.ManageIntegrationActions,\n },\n ProjectSync: {\n Execute: AXPAdministrationPermissionKeys.ManageIntegrationActions,\n },\n },\n} as const;\n\n//#endregion\n","//#region ---- Remote Jira project DTO ----\n\nimport type { AXEJiraProjectSyncStrategy } from './sync.types';\n\n/** Subset of Jira REST API project resource used for import/sync. */\nexport interface AXEJiraRemoteProject {\n id: string;\n key: string;\n name: string;\n description?: string | null;\n projectTypeKey?: string | null;\n style?: string | null;\n simplified?: boolean | null;\n lead?: {\n accountId?: string;\n displayName?: string;\n } | null;\n avatarUrls?: Record<string, string> | null;\n}\n\nexport type AXEJiraProjectImportStatus = 'imported' | 'not_imported';\n\nexport interface AXEJiraRemoteProjectListItem extends AXEJiraRemoteProject {\n importStatus: AXEJiraProjectImportStatus;\n platformProjectId?: string | null;\n}\n\n//#endregion\n\n//#region ---- API request / response ----\n\nexport interface AXEJiraListRemoteProjectsRequest {\n instanceId?: string;\n}\n\nexport interface AXEJiraListRemoteProjectsResponse {\n instanceId: string;\n projects: AXEJiraRemoteProjectListItem[];\n}\n\nexport interface AXEJiraProjectImportRowInput {\n remote: AXEJiraRemoteProject;\n selected: boolean;\n syncStrategy: AXEJiraProjectSyncStrategy;\n existingPlatformProjectId?: string | null;\n}\n\nexport interface AXEJiraImportProjectsRequest {\n instanceId?: string;\n defaultProjectTypeId: string;\n rows: AXEJiraProjectImportRowInput[];\n}\n\nexport interface AXEJiraProjectImportResult {\n imported: number;\n updated: number;\n skipped: number;\n issuesImported?: number;\n issuesUpdated?: number;\n issuesRemoved?: number;\n worklogsImported?: number;\n worklogsUpdated?: number;\n}\n\nexport interface AXEJiraSyncPlatformProjectRequest {\n platformProjectId: string;\n}\n\n//#endregion\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}