@acorex-platform/module-integration-management-client 2.0.0-next.0 → 2.0.0-next.10

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.
@@ -145,7 +145,7 @@ class AXMIntegrationRefFilterWidgetEditComponent extends AXPValueWidgetComponent
145
145
  return [];
146
146
  }
147
147
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMIntegrationRefFilterWidgetEditComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
148
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXMIntegrationRefFilterWidgetEditComponent, isStandalone: true, selector: "axm-integration-ref-filter-widget-edit", viewQueries: [{ propertyName: "lookup", first: true, predicate: ["lookup"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"flex w-full items-center\">\n <ax-lookup\n #lookup\n class=\"w-full\"\n mode=\"multi-select\"\n textField=\"title\"\n valueField=\"id\"\n [searchable]=\"false\"\n [placeholder]=\"\n ('@integration-management:widgets.integration-ref.filter.placeholder' | translate | async) ?? ''\n \"\n [dataSource]=\"dataSource\"\n [ngModel]=\"value()\"\n (onValueChanged)=\"handleValueChange($event)\"\n [itemTemplate]=\"itemTemplate\"\n >\n <ax-clear-button></ax-clear-button>\n </ax-lookup>\n\n <ng-template #itemTemplate let-item>\n <div class=\"flex w-full items-center gap-2\">\n @if (item.logoKey) {\n <axp-logo [logoKey]=\"item.logoKey\" appearance=\"colored\" [size]=\"16\" />\n }\n <!-- ----- Fallback FA icon when provider has no logoKey ----- -->\n @else if (item.icon) {\n <i [class]=\"item.icon\" class=\"shrink-0 text-sm\"></i>\n }\n <span class=\"truncate\">{{ item.title }}</span>\n </div>\n </ng-template>\n</div>\n", dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i6.AXDecoratorClearButtonComponent, selector: "ax-clear-button", inputs: ["icon"] }, { kind: "component", type: AXLookupComponent, selector: "ax-lookup", inputs: ["name", "mode", "dataSource", "treeDataSource", "valueField", "textField", "disabledField", "columns", "treeParentField", "hasChildrenField", "searchable", "adaptivityEnabled", "caption", "alternate", "searchPlaceholder", "placeholder", "disabled", "readonly", "look", "itemHeight", "maxVisibleItems", "treeSelectionBehavior", "highlightSearch", "itemTemplate", "selectedTemplate", "emptyTemplate", "loadingTemplate", "value", "valueItems"], outputs: ["lookChange", "valueChange", "onValueChanged", "onSelectionChanged", "onFocus", "onBlur", "onItemClick", "onItemSelected", "onOpened", "onClosed"] }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "component", type: AXPLogoComponent, selector: "axp-logo", inputs: ["logoKey", "appearance", "size", "format"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: i3.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
148
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXMIntegrationRefFilterWidgetEditComponent, isStandalone: true, selector: "axm-integration-ref-filter-widget-edit", viewQueries: [{ propertyName: "lookup", first: true, predicate: ["lookup"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"flex w-full items-center\">\n <ax-lookup\n #lookup\n class=\"w-full\"\n mode=\"multi-select\"\n textField=\"title\"\n valueField=\"id\"\n [searchable]=\"false\"\n [placeholder]=\"\n ('@integration-management:widgets.integration-ref.filter.placeholder' | translate | async) ?? ''\n \"\n [dataSource]=\"dataSource\"\n [ngModel]=\"value()\"\n (onValueChanged)=\"handleValueChange($event)\"\n [itemTemplate]=\"itemTemplate\"\n >\n <ax-clear-button></ax-clear-button>\n </ax-lookup>\n\n <ng-template #itemTemplate let-item>\n <div class=\"flex w-full items-center gap-2\">\n @if (item.logoKey) {\n <axp-logo [logoKey]=\"item.logoKey\" appearance=\"colored\" [size]=\"16\" />\n }\n <!-- ----- Fallback FA icon when provider has no logoKey ----- -->\n @else if (item.icon) {\n <i [class]=\"item.icon\" class=\"shrink-0 text-sm\"></i>\n }\n <span class=\"truncate\">{{ item.title }}</span>\n </div>\n </ng-template>\n</div>\n", dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i6.AXDecoratorClearButtonComponent, selector: "ax-clear-button", inputs: ["icon"] }, { kind: "component", type: AXLookupComponent, selector: "ax-lookup", inputs: ["name", "mode", "dataSource", "treeDataSource", "valueField", "textField", "disabledField", "columns", "treeParentField", "hasChildrenField", "searchable", "adaptivityEnabled", "caption", "alternate", "searchPlaceholder", "placeholder", "disabled", "readonly", "look", "itemHeight", "maxVisibleItems", "treeSelectionBehavior", "highlightSearch", "allowSelectAll", "itemTemplate", "selectedTemplate", "emptyTemplate", "loadingTemplate", "value", "valueItems"], outputs: ["lookChange", "valueChange", "onValueChanged", "onSelectionChanged", "onFocus", "onBlur", "onItemClick", "onItemSelected", "onOpened", "onClosed"] }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "component", type: AXPLogoComponent, selector: "axp-logo", inputs: ["logoKey", "appearance", "size", "format"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: i3.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
149
149
  }
150
150
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMIntegrationRefFilterWidgetEditComponent, decorators: [{
151
151
  type: Component,
@@ -160,4 +160,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
160
160
  }], propDecorators: { lookup: [{ type: i0.ViewChild, args: ['lookup', { isSignal: true }] }] } });
161
161
 
162
162
  export { AXMIntegrationRefFilterWidgetEditComponent };
163
- //# sourceMappingURL=acorex-platform-module-integration-management-client-integration-ref-filter-widget-edit.component-zVURpFT4.mjs.map
163
+ //# sourceMappingURL=acorex-platform-module-integration-management-client-integration-ref-filter-widget-edit.component-FkH3n7GW.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"acorex-platform-module-integration-management-client-integration-ref-filter-widget-edit.component-zVURpFT4.mjs","sources":["../../../../libs/modules/integration-management/client/src/lib/features/widgets/integration-ref/integration-ref-filter-widget-edit.component.ts","../../../../libs/modules/integration-management/client/src/lib/features/widgets/integration-ref/integration-ref-filter-widget-edit.component.html"],"sourcesContent":["//#region ----- Imports -----\n\nimport { AXDataSource, AXValueChangedEvent } from '@acorex/cdk/common';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXLookupComponent } from '@acorex/components/lookup';\nimport { AXTranslationModule, AXTranslationService } from '@acorex/core/translation';\nimport { AXPIntegrationDomainRegistryService } from '@acorex-platform/framework-client/common';\nimport { AXPLogoComponent } from '@acorex-platform/framework-client/core';\nimport { AXPValueWidgetComponent } from '@acorex-platform/framework-client/layout/widget-core';\nimport { AsyncPipe } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, inject, viewChild } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { isArray, isString } from 'lodash';\n\n//#endregion\n\n//#region ----- Types -----\n\ninterface IntegrationSourceFilterItem {\n id: string;\n title: string;\n logoKey?: string;\n icon?: string;\n}\n\ninterface IntegrationSourceFilterValue {\n value?: string | string[] | null;\n operation?: { type: string };\n displayText?: string;\n}\n\n//#endregion\n\n//#region ----- Component -----\n\n@Component({\n selector: 'axm-integration-ref-filter-widget-edit',\n templateUrl: './integration-ref-filter-widget-edit.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n AsyncPipe,\n FormsModule,\n AXDecoratorModule,\n AXLookupComponent,\n AXTranslationModule,\n AXPLogoComponent,\n ],\n})\nexport class AXMIntegrationRefFilterWidgetEditComponent extends AXPValueWidgetComponent<IntegrationSourceFilterValue | null> {\n //#region ----- Services & Dependencies -----\n\n private readonly domainRegistry = inject(AXPIntegrationDomainRegistryService);\n private readonly translateService = inject(AXTranslationService);\n\n //#endregion\n\n //#region ----- View Children -----\n\n protected readonly lookup = viewChild<AXLookupComponent>('lookup');\n\n //#endregion\n\n //#region ----- Computed Properties -----\n\n protected readonly value = computed(() => this.getValue()?.value);\n\n //#endregion\n\n //#region ----- Data Source -----\n\n protected readonly dataSource = new AXDataSource<IntegrationSourceFilterItem>({\n load: async () => {\n const items = await this.loadProviderItems();\n return { items, total: items.length };\n },\n byKey: async (id: unknown) => {\n const key = String(id ?? '');\n if (!key) {\n return { id: '', title: '' };\n }\n const items = await this.loadProviderItems();\n return items.find((item) => item.id === key) ?? { id: key, title: key };\n },\n pageSize: 100,\n key: 'id',\n });\n\n //#endregion\n\n //#region ----- Event Handlers -----\n\n protected handleValueChange(event: AXValueChangedEvent): void {\n if (!event.isUserInteraction) {\n return;\n }\n\n const selected = this.normalizeSelectedIds(event.value);\n if (selected.length === 0) {\n this.setValue(null);\n return;\n }\n\n const displayText = this.resolveDisplayTextSync(selected);\n this.setValue({\n value: selected.length === 1 ? selected[0] : selected,\n operation: { type: selected.length === 1 ? 'equal' : 'in' },\n displayText,\n });\n\n if (!displayText) {\n void this.enrichDisplayText(selected);\n }\n }\n\n focus(): void {\n this.lookup()?.focus();\n }\n\n //#endregion\n\n //#region ----- Helpers -----\n\n private providerItemsCache: IntegrationSourceFilterItem[] | null = null;\n\n private async loadProviderItems(): Promise<IntegrationSourceFilterItem[]> {\n if (this.providerItemsCache) {\n return this.providerItemsCache;\n }\n\n const providers = await this.domainRegistry.listProviders();\n const items: IntegrationSourceFilterItem[] = [];\n\n for (const provider of providers) {\n const title = provider.displayName?.startsWith('@')\n ? await this.translateService.translateAsync(provider.displayName)\n : provider.displayName;\n items.push({\n id: provider.id,\n title: title || provider.id,\n logoKey: provider.logoKey,\n icon: provider.icon,\n });\n }\n\n items.sort((a, b) => a.title.localeCompare(b.title));\n this.providerItemsCache = items;\n return items;\n }\n\n private resolveDisplayTextSync(selected: string[]): string {\n const cached = this.providerItemsCache;\n if (!cached) {\n return selected.join(', ');\n }\n return selected.map((id) => cached.find((item) => item.id === id)?.title ?? id).join(', ');\n }\n\n private async enrichDisplayText(selected: string[]): Promise<void> {\n const items = await this.loadProviderItems();\n const current = this.getValue();\n if (!current?.value) {\n return;\n }\n const titles = selected.map((id) => items.find((item) => item.id === id)?.title ?? id).join(', ');\n this.setValue({\n ...current,\n displayText: titles,\n });\n }\n\n private normalizeSelectedIds(raw: unknown): string[] {\n if (raw == null || raw === '') {\n return [];\n }\n if (isArray(raw)) {\n return raw\n .map((item) => {\n if (isString(item)) {\n return item.trim();\n }\n if (item && typeof item === 'object' && 'id' in item) {\n return String((item as { id: unknown }).id ?? '').trim();\n }\n return String(item ?? '').trim();\n })\n .filter((id) => id.length > 0);\n }\n if (isString(raw)) {\n const id = raw.trim();\n return id ? [id] : [];\n }\n if (raw && typeof raw === 'object' && 'id' in raw) {\n const id = String((raw as { id: unknown }).id ?? '').trim();\n return id ? [id] : [];\n }\n return [];\n }\n\n //#endregion\n}\n\n//#endregion\n","<div class=\"flex w-full items-center\">\n <ax-lookup\n #lookup\n class=\"w-full\"\n mode=\"multi-select\"\n textField=\"title\"\n valueField=\"id\"\n [searchable]=\"false\"\n [placeholder]=\"\n ('@integration-management:widgets.integration-ref.filter.placeholder' | translate | async) ?? ''\n \"\n [dataSource]=\"dataSource\"\n [ngModel]=\"value()\"\n (onValueChanged)=\"handleValueChange($event)\"\n [itemTemplate]=\"itemTemplate\"\n >\n <ax-clear-button></ax-clear-button>\n </ax-lookup>\n\n <ng-template #itemTemplate let-item>\n <div class=\"flex w-full items-center gap-2\">\n @if (item.logoKey) {\n <axp-logo [logoKey]=\"item.logoKey\" appearance=\"colored\" [size]=\"16\" />\n }\n <!-- ----- Fallback FA icon when provider has no logoKey ----- -->\n @else if (item.icon) {\n <i [class]=\"item.icon\" class=\"shrink-0 text-sm\"></i>\n }\n <span class=\"truncate\">{{ item.title }}</span>\n </div>\n </ng-template>\n</div>\n"],"names":["i2"],"mappings":"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"}
1
+ {"version":3,"file":"acorex-platform-module-integration-management-client-integration-ref-filter-widget-edit.component-FkH3n7GW.mjs","sources":["../../../../libs/modules/integration-management/client/src/lib/features/widgets/integration-ref/integration-ref-filter-widget-edit.component.ts","../../../../libs/modules/integration-management/client/src/lib/features/widgets/integration-ref/integration-ref-filter-widget-edit.component.html"],"sourcesContent":["//#region ----- Imports -----\n\nimport { AXDataSource, AXValueChangedEvent } from '@acorex/cdk/common';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXLookupComponent } from '@acorex/components/lookup';\nimport { AXTranslationModule, AXTranslationService } from '@acorex/core/translation';\nimport { AXPIntegrationDomainRegistryService } from '@acorex-platform/framework-client/common';\nimport { AXPLogoComponent } from '@acorex-platform/framework-client/core';\nimport { AXPValueWidgetComponent } from '@acorex-platform/framework-client/layout/widget-core';\nimport { AsyncPipe } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, inject, viewChild } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { isArray, isString } from 'lodash';\n\n//#endregion\n\n//#region ----- Types -----\n\ninterface IntegrationSourceFilterItem {\n id: string;\n title: string;\n logoKey?: string;\n icon?: string;\n}\n\ninterface IntegrationSourceFilterValue {\n value?: string | string[] | null;\n operation?: { type: string };\n displayText?: string;\n}\n\n//#endregion\n\n//#region ----- Component -----\n\n@Component({\n selector: 'axm-integration-ref-filter-widget-edit',\n templateUrl: './integration-ref-filter-widget-edit.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n AsyncPipe,\n FormsModule,\n AXDecoratorModule,\n AXLookupComponent,\n AXTranslationModule,\n AXPLogoComponent,\n ],\n})\nexport class AXMIntegrationRefFilterWidgetEditComponent extends AXPValueWidgetComponent<IntegrationSourceFilterValue | null> {\n //#region ----- Services & Dependencies -----\n\n private readonly domainRegistry = inject(AXPIntegrationDomainRegistryService);\n private readonly translateService = inject(AXTranslationService);\n\n //#endregion\n\n //#region ----- View Children -----\n\n protected readonly lookup = viewChild<AXLookupComponent>('lookup');\n\n //#endregion\n\n //#region ----- Computed Properties -----\n\n protected readonly value = computed(() => this.getValue()?.value);\n\n //#endregion\n\n //#region ----- Data Source -----\n\n protected readonly dataSource = new AXDataSource<IntegrationSourceFilterItem>({\n load: async () => {\n const items = await this.loadProviderItems();\n return { items, total: items.length };\n },\n byKey: async (id: unknown) => {\n const key = String(id ?? '');\n if (!key) {\n return { id: '', title: '' };\n }\n const items = await this.loadProviderItems();\n return items.find((item) => item.id === key) ?? { id: key, title: key };\n },\n pageSize: 100,\n key: 'id',\n });\n\n //#endregion\n\n //#region ----- Event Handlers -----\n\n protected handleValueChange(event: AXValueChangedEvent): void {\n if (!event.isUserInteraction) {\n return;\n }\n\n const selected = this.normalizeSelectedIds(event.value);\n if (selected.length === 0) {\n this.setValue(null);\n return;\n }\n\n const displayText = this.resolveDisplayTextSync(selected);\n this.setValue({\n value: selected.length === 1 ? selected[0] : selected,\n operation: { type: selected.length === 1 ? 'equal' : 'in' },\n displayText,\n });\n\n if (!displayText) {\n void this.enrichDisplayText(selected);\n }\n }\n\n focus(): void {\n this.lookup()?.focus();\n }\n\n //#endregion\n\n //#region ----- Helpers -----\n\n private providerItemsCache: IntegrationSourceFilterItem[] | null = null;\n\n private async loadProviderItems(): Promise<IntegrationSourceFilterItem[]> {\n if (this.providerItemsCache) {\n return this.providerItemsCache;\n }\n\n const providers = await this.domainRegistry.listProviders();\n const items: IntegrationSourceFilterItem[] = [];\n\n for (const provider of providers) {\n const title = provider.displayName?.startsWith('@')\n ? await this.translateService.translateAsync(provider.displayName)\n : provider.displayName;\n items.push({\n id: provider.id,\n title: title || provider.id,\n logoKey: provider.logoKey,\n icon: provider.icon,\n });\n }\n\n items.sort((a, b) => a.title.localeCompare(b.title));\n this.providerItemsCache = items;\n return items;\n }\n\n private resolveDisplayTextSync(selected: string[]): string {\n const cached = this.providerItemsCache;\n if (!cached) {\n return selected.join(', ');\n }\n return selected.map((id) => cached.find((item) => item.id === id)?.title ?? id).join(', ');\n }\n\n private async enrichDisplayText(selected: string[]): Promise<void> {\n const items = await this.loadProviderItems();\n const current = this.getValue();\n if (!current?.value) {\n return;\n }\n const titles = selected.map((id) => items.find((item) => item.id === id)?.title ?? id).join(', ');\n this.setValue({\n ...current,\n displayText: titles,\n });\n }\n\n private normalizeSelectedIds(raw: unknown): string[] {\n if (raw == null || raw === '') {\n return [];\n }\n if (isArray(raw)) {\n return raw\n .map((item) => {\n if (isString(item)) {\n return item.trim();\n }\n if (item && typeof item === 'object' && 'id' in item) {\n return String((item as { id: unknown }).id ?? '').trim();\n }\n return String(item ?? '').trim();\n })\n .filter((id) => id.length > 0);\n }\n if (isString(raw)) {\n const id = raw.trim();\n return id ? [id] : [];\n }\n if (raw && typeof raw === 'object' && 'id' in raw) {\n const id = String((raw as { id: unknown }).id ?? '').trim();\n return id ? [id] : [];\n }\n return [];\n }\n\n //#endregion\n}\n\n//#endregion\n","<div class=\"flex w-full items-center\">\n <ax-lookup\n #lookup\n class=\"w-full\"\n mode=\"multi-select\"\n textField=\"title\"\n valueField=\"id\"\n [searchable]=\"false\"\n [placeholder]=\"\n ('@integration-management:widgets.integration-ref.filter.placeholder' | translate | async) ?? ''\n \"\n [dataSource]=\"dataSource\"\n [ngModel]=\"value()\"\n (onValueChanged)=\"handleValueChange($event)\"\n [itemTemplate]=\"itemTemplate\"\n >\n <ax-clear-button></ax-clear-button>\n </ax-lookup>\n\n <ng-template #itemTemplate let-item>\n <div class=\"flex w-full items-center gap-2\">\n @if (item.logoKey) {\n <axp-logo [logoKey]=\"item.logoKey\" appearance=\"colored\" [size]=\"16\" />\n }\n <!-- ----- Fallback FA icon when provider has no logoKey ----- -->\n @else if (item.icon) {\n <i [class]=\"item.icon\" class=\"shrink-0 text-sm\"></i>\n }\n <span class=\"truncate\">{{ item.title }}</span>\n </div>\n </ng-template>\n</div>\n"],"names":["i2"],"mappings":";;;;;;;;;;;;;;;;AAAA;AA+BA;AAEA;AAeM,MAAO,0CAA2C,SAAQ,uBAA4D,CAAA;AAb5H,IAAA,WAAA,GAAA;;;AAgBmB,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,mCAAmC,CAAC;AAC5D,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,oBAAoB,CAAC;;;QAM7C,IAAA,CAAA,MAAM,GAAG,SAAS,CAAoB,QAAQ;mFAAC;;;QAM/C,IAAA,CAAA,KAAK,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,EAAE,KAAK;kFAAC;;;QAM9C,IAAA,CAAA,UAAU,GAAG,IAAI,YAAY,CAA8B;YAC5E,IAAI,EAAE,YAAW;AACf,gBAAA,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,iBAAiB,EAAE;gBAC5C,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE;YACvC,CAAC;AACD,YAAA,KAAK,EAAE,OAAO,EAAW,KAAI;gBAC3B,MAAM,GAAG,GAAG,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC;gBAC5B,IAAI,CAAC,GAAG,EAAE;oBACR,OAAO,EAAE,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;gBAC9B;AACA,gBAAA,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,iBAAiB,EAAE;gBAC5C,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,KAAK,GAAG,CAAC,IAAI,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE;YACzE,CAAC;AACD,YAAA,QAAQ,EAAE,GAAG;AACb,YAAA,GAAG,EAAE,IAAI;AACV,SAAA,CAAC;;;QAqCM,IAAA,CAAA,kBAAkB,GAAyC,IAAI;AA6ExE,IAAA;;;AA5GW,IAAA,iBAAiB,CAAC,KAA0B,EAAA;AACpD,QAAA,IAAI,CAAC,KAAK,CAAC,iBAAiB,EAAE;YAC5B;QACF;QAEA,MAAM,QAAQ,GAAG,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,KAAK,CAAC;AACvD,QAAA,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;AACzB,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;YACnB;QACF;QAEA,MAAM,WAAW,GAAG,IAAI,CAAC,sBAAsB,CAAC,QAAQ,CAAC;QACzD,IAAI,CAAC,QAAQ,CAAC;AACZ,YAAA,KAAK,EAAE,QAAQ,CAAC,MAAM,KAAK,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,QAAQ;AACrD,YAAA,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,CAAC,MAAM,KAAK,CAAC,GAAG,OAAO,GAAG,IAAI,EAAE;YAC3D,WAAW;AACZ,SAAA,CAAC;QAEF,IAAI,CAAC,WAAW,EAAE;AAChB,YAAA,KAAK,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC;QACvC;IACF;IAEA,KAAK,GAAA;AACH,QAAA,IAAI,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE;IACxB;AAQQ,IAAA,MAAM,iBAAiB,GAAA;AAC7B,QAAA,IAAI,IAAI,CAAC,kBAAkB,EAAE;YAC3B,OAAO,IAAI,CAAC,kBAAkB;QAChC;QAEA,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE;QAC3D,MAAM,KAAK,GAAkC,EAAE;AAE/C,QAAA,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE;YAChC,MAAM,KAAK,GAAG,QAAQ,CAAC,WAAW,EAAE,UAAU,CAAC,GAAG;kBAC9C,MAAM,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,QAAQ,CAAC,WAAW;AACjE,kBAAE,QAAQ,CAAC,WAAW;YACxB,KAAK,CAAC,IAAI,CAAC;gBACT,EAAE,EAAE,QAAQ,CAAC,EAAE;AACf,gBAAA,KAAK,EAAE,KAAK,IAAI,QAAQ,CAAC,EAAE;gBAC3B,OAAO,EAAE,QAAQ,CAAC,OAAO;gBACzB,IAAI,EAAE,QAAQ,CAAC,IAAI;AACpB,aAAA,CAAC;QACJ;QAEA,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;AACpD,QAAA,IAAI,CAAC,kBAAkB,GAAG,KAAK;AAC/B,QAAA,OAAO,KAAK;IACd;AAEQ,IAAA,sBAAsB,CAAC,QAAkB,EAAA;AAC/C,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,kBAAkB;QACtC,IAAI,CAAC,MAAM,EAAE;AACX,YAAA,OAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;QAC5B;AACA,QAAA,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;IAC5F;IAEQ,MAAM,iBAAiB,CAAC,QAAkB,EAAA;AAChD,QAAA,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,iBAAiB,EAAE;AAC5C,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,EAAE;AAC/B,QAAA,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE;YACnB;QACF;AACA,QAAA,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;QACjG,IAAI,CAAC,QAAQ,CAAC;AACZ,YAAA,GAAG,OAAO;AACV,YAAA,WAAW,EAAE,MAAM;AACpB,SAAA,CAAC;IACJ;AAEQ,IAAA,oBAAoB,CAAC,GAAY,EAAA;QACvC,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,KAAK,EAAE,EAAE;AAC7B,YAAA,OAAO,EAAE;QACX;AACA,QAAA,IAAI,OAAO,CAAC,GAAG,CAAC,EAAE;AAChB,YAAA,OAAO;AACJ,iBAAA,GAAG,CAAC,CAAC,IAAI,KAAI;AACZ,gBAAA,IAAI,QAAQ,CAAC,IAAI,CAAC,EAAE;AAClB,oBAAA,OAAO,IAAI,CAAC,IAAI,EAAE;gBACpB;gBACA,IAAI,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,IAAI,IAAI,EAAE;oBACpD,OAAO,MAAM,CAAE,IAAwB,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE;gBAC1D;gBACA,OAAO,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE;AAClC,YAAA,CAAC;AACA,iBAAA,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;QAClC;AACA,QAAA,IAAI,QAAQ,CAAC,GAAG,CAAC,EAAE;AACjB,YAAA,MAAM,EAAE,GAAG,GAAG,CAAC,IAAI,EAAE;YACrB,OAAO,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE;QACvB;QACA,IAAI,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,IAAI,IAAI,GAAG,EAAE;AACjD,YAAA,MAAM,EAAE,GAAG,MAAM,CAAE,GAAuB,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE;YAC3D,OAAO,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE;QACvB;AACA,QAAA,OAAO,EAAE;IACX;8GApJW,0CAA0C,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA1C,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,0CAA0C,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,wCAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,QAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,QAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EChDvD,ugCAgCA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDSI,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACX,iBAAiB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,+BAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACjB,iBAAiB,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,MAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,YAAA,EAAA,WAAA,EAAA,eAAA,EAAA,SAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,YAAA,EAAA,mBAAA,EAAA,SAAA,EAAA,WAAA,EAAA,mBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,UAAA,EAAA,MAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,uBAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,cAAA,EAAA,kBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,oBAAA,EAAA,SAAA,EAAA,QAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACjB,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACnB,gBAAgB,qGALhB,SAAS,EAAA,IAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAQA,0CAA0C,EAAA,UAAA,EAAA,CAAA;kBAbtD,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,wCAAwC,EAAA,eAAA,EAEjC,uBAAuB,CAAC,MAAM,EAAA,OAAA,EACtC;wBACP,SAAS;wBACT,WAAW;wBACX,iBAAiB;wBACjB,iBAAiB;wBACjB,mBAAmB;wBACnB,gBAAgB;AACjB,qBAAA,EAAA,QAAA,EAAA,ugCAAA,EAAA;oEAYwD,QAAQ,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;"}
@@ -115,7 +115,7 @@ class AXMIntegrationRefWidgetColumnComponent extends AXPColumnWidgetComponent {
115
115
  }
116
116
  }
117
117
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMIntegrationRefWidgetColumnComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
118
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXMIntegrationRefWidgetColumnComponent, isStandalone: true, selector: "axm-integration-ref-widget-column", inputs: { rawValue: "rawValue", rowData: "rowData" }, host: { listeners: { "click": "onHostClick($event)", "mousedown": "onHostClick($event)", "dblclick": "onHostClick($event)" }, classAttribute: "inline-flex min-w-0 items-center" }, viewQueries: [{ propertyName: "trigger", first: true, predicate: ["infoTrigger"], descendants: true, isSignal: true }, { propertyName: "infoPopover", first: true, predicate: ["infoPopover"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<!-- ----- Provider logo/icon with display name label ----- -->\n@if (display(); as info) {\n <span\n #infoTrigger\n class=\"inline-flex min-w-0 cursor-pointer items-center gap-2 hover:opacity-80\"\n role=\"button\"\n tabindex=\"0\"\n [attr.aria-label]=\"info.displayName | translate | async\"\n (click)=\"onTriggerClick($event)\"\n (keydown.enter)=\"onTriggerClick($event)\"\n (keydown.space)=\"onTriggerClick($event)\"\n >\n @if (info.logoKey) {\n <axp-logo [logoKey]=\"info.logoKey\" appearance=\"colored\" [size]=\"20\" />\n }\n <!-- ----- Fallback FA icon when provider has no logoKey ----- -->\n @else if (info.icon) {\n <i [class]=\"info.icon\" class=\"shrink-0 text-base\"></i>\n }\n <span class=\"truncate text-sm\">{{ info.displayName | translate | async }}</span>\n </span>\n}\n\n<!-- ----- Connection details card opened on click ----- -->\n<ax-popover [openOn]=\"'manual'\" #infoPopover [adaptivityEnabled]=\"true\">\n <div class=\"lightest-surface min-w-[280px] rounded-lg border p-3 shadow-lg\">\n <div class=\"mb-3 border-b pb-2\">\n <h3 class=\"text-sm font-semibold\">\n {{ '@integration-management:widgets.integration-ref.card.title' | translate | async }}\n </h3>\n </div>\n\n @if (cardLoading()) {\n <!-- ----- Loading while connection is fetched ----- -->\n <div class=\"flex justify-center py-3\">\n <ax-loading></ax-loading>\n </div>\n }\n <!-- ----- Connection name + linked-at once loaded ----- -->\n @else if (card(); as details) {\n <div class=\"space-y-2.5\">\n <div>\n <div class=\"mb-1 text-xs font-semibold\">\n {{\n '@integration-management:widgets.integration-ref.card.connection' | translate | async\n }}\n </div>\n <div class=\"text-xs\">{{ details.connectionDisplayName }}</div>\n </div>\n <div>\n <div class=\"mb-1 text-xs font-semibold\">\n {{\n '@integration-management:widgets.integration-ref.card.linked-at' | translate | async\n }}\n </div>\n <div class=\"text-xs\" [dir]=\"'ltr'\">{{ details.linkedAtLabel }}</div>\n </div>\n </div>\n }\n </div>\n</ax-popover>\n", dependencies: [{ kind: "ngmodule", type: AXLoadingModule }, { kind: "component", type: i1.AXLoadingComponent, selector: "ax-loading", inputs: ["visible", "type", "context"], outputs: ["visibleChange"] }, { kind: "ngmodule", type: AXPopoverModule }, { kind: "component", type: i2.AXPopoverComponent, selector: "ax-popover", inputs: ["width", "disablePanelClass", "visualContextScope", "disabled", "offsetX", "offsetY", "target", "placement", "content", "openOn", "closeOn", "hasBackdrop", "openAfter", "closeAfter", "closeOnScroll", "closeOnNavigation", "backdropClass", "panelClass", "adaptivityEnabled"], outputs: ["onOpened", "onClosed"] }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "component", type: AXPLogoComponent, selector: "axp-logo", inputs: ["logoKey", "appearance", "size", "format"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: i3.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
118
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXMIntegrationRefWidgetColumnComponent, isStandalone: true, selector: "axm-integration-ref-widget-column", inputs: { rawValue: "rawValue", rowData: "rowData" }, host: { listeners: { "click": "onHostClick($event)", "mousedown": "onHostClick($event)", "dblclick": "onHostClick($event)" }, classAttribute: "inline-flex min-w-0 items-center" }, viewQueries: [{ propertyName: "trigger", first: true, predicate: ["infoTrigger"], descendants: true, isSignal: true }, { propertyName: "infoPopover", first: true, predicate: ["infoPopover"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<!-- ----- Provider logo/icon with display name label ----- -->\n@if (display(); as info) {\n <span\n #infoTrigger\n class=\"inline-flex min-w-0 cursor-pointer items-center gap-2 hover:opacity-80\"\n role=\"button\"\n tabindex=\"0\"\n [attr.aria-label]=\"info.displayName | translate | async\"\n (click)=\"onTriggerClick($event)\"\n (keydown.enter)=\"onTriggerClick($event)\"\n (keydown.space)=\"onTriggerClick($event)\"\n >\n @if (info.logoKey) {\n <axp-logo [logoKey]=\"info.logoKey\" appearance=\"colored\" [size]=\"20\" />\n }\n <!-- ----- Fallback FA icon when provider has no logoKey ----- -->\n @else if (info.icon) {\n <i [class]=\"info.icon\" class=\"shrink-0 text-base\"></i>\n }\n <span class=\"truncate text-sm\">{{ info.displayName | translate | async }}</span>\n </span>\n}\n\n<!-- ----- Connection details card opened on click ----- -->\n<ax-popover [openOn]=\"'manual'\" #infoPopover [adaptivityEnabled]=\"true\">\n <div class=\"lightest-surface min-w-[280px] rounded-lg border p-3 shadow-lg\">\n <div class=\"mb-3 border-b pb-2\">\n <h3 class=\"text-sm font-semibold\">\n {{ '@integration-management:widgets.integration-ref.card.title' | translate | async }}\n </h3>\n </div>\n\n @if (cardLoading()) {\n <!-- ----- Loading while connection is fetched ----- -->\n <div class=\"flex justify-center py-3\">\n <ax-loading></ax-loading>\n </div>\n }\n <!-- ----- Connection name + linked-at once loaded ----- -->\n @else if (card(); as details) {\n <div class=\"space-y-2.5\">\n <div>\n <div class=\"mb-1 text-xs font-semibold\">\n {{\n '@integration-management:widgets.integration-ref.card.connection' | translate | async\n }}\n </div>\n <div class=\"text-xs\">{{ details.connectionDisplayName }}</div>\n </div>\n <div>\n <div class=\"mb-1 text-xs font-semibold\">\n {{\n '@integration-management:widgets.integration-ref.card.linked-at' | translate | async\n }}\n </div>\n <div class=\"text-xs\" [dir]=\"'ltr'\">{{ details.linkedAtLabel }}</div>\n </div>\n </div>\n }\n </div>\n</ax-popover>\n", dependencies: [{ kind: "ngmodule", type: AXLoadingModule }, { kind: "component", type: i1.AXLoadingComponent, selector: "ax-loading", inputs: ["visible", "type", "context"], outputs: ["visibleChange"] }, { kind: "ngmodule", type: AXPopoverModule }, { kind: "component", type: i2.AXPopoverComponent, selector: "ax-popover", inputs: ["width", "disablePanelClass", "visualContextScope", "disabled", "offsetX", "offsetY", "target", "placement", "content", "openOn", "closeOn", "hasBackdrop", "restoreFocusOnClose", "openAfter", "closeAfter", "closeOnScroll", "closeOnNavigation", "backdropClass", "panelClass", "adaptivityEnabled"], outputs: ["onOpened", "onClosed"] }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "component", type: AXPLogoComponent, selector: "axp-logo", inputs: ["logoKey", "appearance", "size", "format"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: i3.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
119
119
  }
120
120
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMIntegrationRefWidgetColumnComponent, decorators: [{
121
121
  type: Component,
@@ -134,4 +134,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
134
134
  }], ctorParameters: () => [], propDecorators: { trigger: [{ type: i0.ViewChild, args: ['infoTrigger', { isSignal: true }] }], infoPopover: [{ type: i0.ViewChild, args: ['infoPopover', { isSignal: true }] }] } });
135
135
 
136
136
  export { AXMIntegrationRefWidgetColumnComponent };
137
- //# sourceMappingURL=acorex-platform-module-integration-management-client-integration-ref-widget-column.component-ClPcvcUW.mjs.map
137
+ //# sourceMappingURL=acorex-platform-module-integration-management-client-integration-ref-widget-column.component-C253nF3T.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"acorex-platform-module-integration-management-client-integration-ref-widget-column.component-ClPcvcUW.mjs","sources":["../../../../libs/modules/integration-management/client/src/lib/features/widgets/integration-ref/integration-ref-widget-column.component.ts","../../../../libs/modules/integration-management/client/src/lib/features/widgets/integration-ref/integration-ref-widget-column.component.html"],"sourcesContent":["//#region ----- Imports -----\n\nimport { AXLoadingModule } from '@acorex/components/loading';\nimport { AXPopoverComponent, AXPopoverModule } from '@acorex/components/popover';\nimport { AXFormatService } from '@acorex/core/format';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPSettingsService } from '@acorex-platform/framework-client/common';\nimport { AXPLogoComponent } from '@acorex-platform/framework-client/core';\nimport { AXPColumnWidgetComponent } from '@acorex-platform/framework-client/layout/widget-core';\nimport { AXPRegionalSetting } from '@acorex-platform/framework-shared/core';\nimport { AsyncPipe } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n effect,\n inject,\n signal,\n untracked,\n viewChild,\n} from '@angular/core';\nimport { trim } from 'lodash';\n\nimport {\n AXMIntegrationRefDisplay,\n AXMIntegrationRefDisplayService,\n} from './integration-ref-display.service';\n\n//#endregion\n\n//#region ----- Types -----\n\ninterface IntegrationRefCardState {\n connectionDisplayName: string;\n linkedAtLabel: string;\n}\n\n//#endregion\n\n//#region ----- Component -----\n\n@Component({\n selector: 'axm-integration-ref-widget-column',\n templateUrl: './integration-ref-widget-column.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n AsyncPipe,\n AXLoadingModule,\n AXPopoverModule,\n AXTranslationModule,\n AXPLogoComponent,\n ],\n inputs: ['rawValue', 'rowData'],\n host: {\n class: 'inline-flex min-w-0 items-center',\n '(click)': 'onHostClick($event)',\n '(mousedown)': 'onHostClick($event)',\n '(dblclick)': 'onHostClick($event)',\n },\n})\nexport class AXMIntegrationRefWidgetColumnComponent extends AXPColumnWidgetComponent<unknown> {\n //#region ----- Services & Dependencies -----\n\n private readonly displayService = inject(AXMIntegrationRefDisplayService);\n private readonly formatService = inject(AXFormatService);\n private readonly settingsService = inject(AXPSettingsService);\n\n //#endregion\n\n //#region ----- View Children -----\n\n protected readonly trigger = viewChild<ElementRef<HTMLElement>>('infoTrigger');\n protected readonly infoPopover = viewChild<AXPopoverComponent>('infoPopover');\n\n //#endregion\n\n //#region ----- State Signals -----\n\n protected readonly display = signal<AXMIntegrationRefDisplay | null>(null);\n protected readonly cardLoading = signal(false);\n protected readonly card = signal<IntegrationRefCardState | null>(null);\n\n //#endregion\n\n //#region ----- Lifecycle -----\n\n constructor() {\n super();\n effect(() => {\n const value = this.rawValue;\n untracked(() => {\n void this.resolveDisplay(value);\n });\n });\n }\n\n //#endregion\n\n //#region ----- Event Handlers -----\n\n /** Keeps grid row navigation from firing when interacting with this cell. */\n protected onHostClick(event: Event): void {\n if (!this.display()) {\n return;\n }\n event.stopPropagation();\n event.preventDefault();\n }\n\n protected async onTriggerClick(event: Event): Promise<void> {\n event.stopPropagation();\n event.preventDefault();\n await this.openCard();\n }\n\n //#endregion\n\n //#region ----- Data Loading -----\n\n private async resolveDisplay(value: unknown): Promise<void> {\n this.display.set(await this.displayService.resolve(value));\n }\n\n private async openCard(): Promise<void> {\n const ref = this.displayService.parseIntegrationRef(this.rawValue);\n if (!ref) {\n return;\n }\n\n this.cardLoading.set(true);\n this.card.set(null);\n this.openPopover();\n\n try {\n const connectionId = trim(ref.connectionId ?? '');\n const connection = connectionId\n ? await this.displayService.getConnectionById(connectionId)\n : null;\n\n this.card.set({\n connectionDisplayName: trim(connection?.displayName ?? '') || '---',\n linkedAtLabel: await this.formatLinkedAt(ref.linkedAt),\n });\n } finally {\n this.cardLoading.set(false);\n }\n }\n\n private openPopover(): void {\n const popover = this.infoPopover();\n const trigger = this.trigger();\n if (!popover || !trigger) {\n return;\n }\n popover.target = trigger.nativeElement;\n popover.open();\n }\n\n private async formatLinkedAt(linkedAt: string | undefined): Promise<string> {\n const value = trim(linkedAt ?? '');\n if (!value) {\n return '---';\n }\n\n try {\n const dateFormat = await this.settingsService.get(AXPRegionalSetting.ShortDate);\n const timeFormat = await this.settingsService.get(AXPRegionalSetting.ShortTime);\n const format = `${dateFormat} ${timeFormat}`.trim();\n return this.formatService.format(new Date(value), 'datetime', { format });\n } catch {\n return '---';\n }\n }\n\n //#endregion\n}\n\n//#endregion\n","<!-- ----- Provider logo/icon with display name label ----- -->\n@if (display(); as info) {\n <span\n #infoTrigger\n class=\"inline-flex min-w-0 cursor-pointer items-center gap-2 hover:opacity-80\"\n role=\"button\"\n tabindex=\"0\"\n [attr.aria-label]=\"info.displayName | translate | async\"\n (click)=\"onTriggerClick($event)\"\n (keydown.enter)=\"onTriggerClick($event)\"\n (keydown.space)=\"onTriggerClick($event)\"\n >\n @if (info.logoKey) {\n <axp-logo [logoKey]=\"info.logoKey\" appearance=\"colored\" [size]=\"20\" />\n }\n <!-- ----- Fallback FA icon when provider has no logoKey ----- -->\n @else if (info.icon) {\n <i [class]=\"info.icon\" class=\"shrink-0 text-base\"></i>\n }\n <span class=\"truncate text-sm\">{{ info.displayName | translate | async }}</span>\n </span>\n}\n\n<!-- ----- Connection details card opened on click ----- -->\n<ax-popover [openOn]=\"'manual'\" #infoPopover [adaptivityEnabled]=\"true\">\n <div class=\"lightest-surface min-w-[280px] rounded-lg border p-3 shadow-lg\">\n <div class=\"mb-3 border-b pb-2\">\n <h3 class=\"text-sm font-semibold\">\n {{ '@integration-management:widgets.integration-ref.card.title' | translate | async }}\n </h3>\n </div>\n\n @if (cardLoading()) {\n <!-- ----- Loading while connection is fetched ----- -->\n <div class=\"flex justify-center py-3\">\n <ax-loading></ax-loading>\n </div>\n }\n <!-- ----- Connection name + linked-at once loaded ----- -->\n @else if (card(); as details) {\n <div class=\"space-y-2.5\">\n <div>\n <div class=\"mb-1 text-xs font-semibold\">\n {{\n '@integration-management:widgets.integration-ref.card.connection' | translate | async\n }}\n </div>\n <div class=\"text-xs\">{{ details.connectionDisplayName }}</div>\n </div>\n <div>\n <div class=\"mb-1 text-xs font-semibold\">\n {{\n '@integration-management:widgets.integration-ref.card.linked-at' | translate | async\n }}\n </div>\n <div class=\"text-xs\" [dir]=\"'ltr'\">{{ details.linkedAtLabel }}</div>\n </div>\n </div>\n }\n </div>\n</ax-popover>\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"acorex-platform-module-integration-management-client-integration-ref-widget-column.component-C253nF3T.mjs","sources":["../../../../libs/modules/integration-management/client/src/lib/features/widgets/integration-ref/integration-ref-widget-column.component.ts","../../../../libs/modules/integration-management/client/src/lib/features/widgets/integration-ref/integration-ref-widget-column.component.html"],"sourcesContent":["//#region ----- Imports -----\n\nimport { AXLoadingModule } from '@acorex/components/loading';\nimport { AXPopoverComponent, AXPopoverModule } from '@acorex/components/popover';\nimport { AXFormatService } from '@acorex/core/format';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPSettingsService } from '@acorex-platform/framework-client/common';\nimport { AXPLogoComponent } from '@acorex-platform/framework-client/core';\nimport { AXPColumnWidgetComponent } from '@acorex-platform/framework-client/layout/widget-core';\nimport { AXPRegionalSetting } from '@acorex-platform/framework-shared/core';\nimport { AsyncPipe } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n effect,\n inject,\n signal,\n untracked,\n viewChild,\n} from '@angular/core';\nimport { trim } from 'lodash';\n\nimport {\n AXMIntegrationRefDisplay,\n AXMIntegrationRefDisplayService,\n} from './integration-ref-display.service';\n\n//#endregion\n\n//#region ----- Types -----\n\ninterface IntegrationRefCardState {\n connectionDisplayName: string;\n linkedAtLabel: string;\n}\n\n//#endregion\n\n//#region ----- Component -----\n\n@Component({\n selector: 'axm-integration-ref-widget-column',\n templateUrl: './integration-ref-widget-column.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n AsyncPipe,\n AXLoadingModule,\n AXPopoverModule,\n AXTranslationModule,\n AXPLogoComponent,\n ],\n inputs: ['rawValue', 'rowData'],\n host: {\n class: 'inline-flex min-w-0 items-center',\n '(click)': 'onHostClick($event)',\n '(mousedown)': 'onHostClick($event)',\n '(dblclick)': 'onHostClick($event)',\n },\n})\nexport class AXMIntegrationRefWidgetColumnComponent extends AXPColumnWidgetComponent<unknown> {\n //#region ----- Services & Dependencies -----\n\n private readonly displayService = inject(AXMIntegrationRefDisplayService);\n private readonly formatService = inject(AXFormatService);\n private readonly settingsService = inject(AXPSettingsService);\n\n //#endregion\n\n //#region ----- View Children -----\n\n protected readonly trigger = viewChild<ElementRef<HTMLElement>>('infoTrigger');\n protected readonly infoPopover = viewChild<AXPopoverComponent>('infoPopover');\n\n //#endregion\n\n //#region ----- State Signals -----\n\n protected readonly display = signal<AXMIntegrationRefDisplay | null>(null);\n protected readonly cardLoading = signal(false);\n protected readonly card = signal<IntegrationRefCardState | null>(null);\n\n //#endregion\n\n //#region ----- Lifecycle -----\n\n constructor() {\n super();\n effect(() => {\n const value = this.rawValue;\n untracked(() => {\n void this.resolveDisplay(value);\n });\n });\n }\n\n //#endregion\n\n //#region ----- Event Handlers -----\n\n /** Keeps grid row navigation from firing when interacting with this cell. */\n protected onHostClick(event: Event): void {\n if (!this.display()) {\n return;\n }\n event.stopPropagation();\n event.preventDefault();\n }\n\n protected async onTriggerClick(event: Event): Promise<void> {\n event.stopPropagation();\n event.preventDefault();\n await this.openCard();\n }\n\n //#endregion\n\n //#region ----- Data Loading -----\n\n private async resolveDisplay(value: unknown): Promise<void> {\n this.display.set(await this.displayService.resolve(value));\n }\n\n private async openCard(): Promise<void> {\n const ref = this.displayService.parseIntegrationRef(this.rawValue);\n if (!ref) {\n return;\n }\n\n this.cardLoading.set(true);\n this.card.set(null);\n this.openPopover();\n\n try {\n const connectionId = trim(ref.connectionId ?? '');\n const connection = connectionId\n ? await this.displayService.getConnectionById(connectionId)\n : null;\n\n this.card.set({\n connectionDisplayName: trim(connection?.displayName ?? '') || '---',\n linkedAtLabel: await this.formatLinkedAt(ref.linkedAt),\n });\n } finally {\n this.cardLoading.set(false);\n }\n }\n\n private openPopover(): void {\n const popover = this.infoPopover();\n const trigger = this.trigger();\n if (!popover || !trigger) {\n return;\n }\n popover.target = trigger.nativeElement;\n popover.open();\n }\n\n private async formatLinkedAt(linkedAt: string | undefined): Promise<string> {\n const value = trim(linkedAt ?? '');\n if (!value) {\n return '---';\n }\n\n try {\n const dateFormat = await this.settingsService.get(AXPRegionalSetting.ShortDate);\n const timeFormat = await this.settingsService.get(AXPRegionalSetting.ShortTime);\n const format = `${dateFormat} ${timeFormat}`.trim();\n return this.formatService.format(new Date(value), 'datetime', { format });\n } catch {\n return '---';\n }\n }\n\n //#endregion\n}\n\n//#endregion\n","<!-- ----- Provider logo/icon with display name label ----- -->\n@if (display(); as info) {\n <span\n #infoTrigger\n class=\"inline-flex min-w-0 cursor-pointer items-center gap-2 hover:opacity-80\"\n role=\"button\"\n tabindex=\"0\"\n [attr.aria-label]=\"info.displayName | translate | async\"\n (click)=\"onTriggerClick($event)\"\n (keydown.enter)=\"onTriggerClick($event)\"\n (keydown.space)=\"onTriggerClick($event)\"\n >\n @if (info.logoKey) {\n <axp-logo [logoKey]=\"info.logoKey\" appearance=\"colored\" [size]=\"20\" />\n }\n <!-- ----- Fallback FA icon when provider has no logoKey ----- -->\n @else if (info.icon) {\n <i [class]=\"info.icon\" class=\"shrink-0 text-base\"></i>\n }\n <span class=\"truncate text-sm\">{{ info.displayName | translate | async }}</span>\n </span>\n}\n\n<!-- ----- Connection details card opened on click ----- -->\n<ax-popover [openOn]=\"'manual'\" #infoPopover [adaptivityEnabled]=\"true\">\n <div class=\"lightest-surface min-w-[280px] rounded-lg border p-3 shadow-lg\">\n <div class=\"mb-3 border-b pb-2\">\n <h3 class=\"text-sm font-semibold\">\n {{ '@integration-management:widgets.integration-ref.card.title' | translate | async }}\n </h3>\n </div>\n\n @if (cardLoading()) {\n <!-- ----- Loading while connection is fetched ----- -->\n <div class=\"flex justify-center py-3\">\n <ax-loading></ax-loading>\n </div>\n }\n <!-- ----- Connection name + linked-at once loaded ----- -->\n @else if (card(); as details) {\n <div class=\"space-y-2.5\">\n <div>\n <div class=\"mb-1 text-xs font-semibold\">\n {{\n '@integration-management:widgets.integration-ref.card.connection' | translate | async\n }}\n </div>\n <div class=\"text-xs\">{{ details.connectionDisplayName }}</div>\n </div>\n <div>\n <div class=\"mb-1 text-xs font-semibold\">\n {{\n '@integration-management:widgets.integration-ref.card.linked-at' | translate | async\n }}\n </div>\n <div class=\"text-xs\" [dir]=\"'ltr'\">{{ details.linkedAtLabel }}</div>\n </div>\n </div>\n }\n </div>\n</ax-popover>\n"],"names":[],"mappings":"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"}
@@ -3,7 +3,7 @@ import { AXPSessionService, AXP_PERMISSION_DEFINITION_PROVIDER } from '@acorex-p
3
3
  import { AXPEntityService, configureEntityListColumnsSettingsMigrateDrop, configureEntityListColumnsSettingsVersion, AXP_ENTITY_ACTION_PLUGIN, AXP_ENTITY_MODIFIER } from '@acorex-platform/framework-client/layout/entity';
4
4
  import * as i0 from '@angular/core';
5
5
  import { inject, Injectable, NgModule } from '@angular/core';
6
- import { isEmpty, trim, defaultTo } from 'lodash';
6
+ import { trim, defaultTo, isEmpty } from 'lodash';
7
7
  import { RootConfig, AXPAdministrationPermissionKeys, AXMIntegrationManagementMenuKeys, AXMIntegrationManagementCommandKeys, AXMIntegrationManagementQueryKeys } from '@acorex-platform/module-integration-management-client/contracts';
8
8
  export { IntegrationManagementManifest } from '@acorex-platform/module-integration-management-client/contracts';
9
9
  import { AXPIntegrationRuntimeService, AXPIntegrationProviderRegistryService, AXP_INTEGRATION_SECRET_STORE, AXP_INTEGRATION_RUNTIME_PROVIDER, AXP_PROTECTED_ROUTE_GUARDS, AXP_MENU_PROVIDER, AXP_SETTING_DEFINITION_PROVIDER, AXP_INTEGRATION_DOMAIN_PROVIDER } from '@acorex-platform/framework-client/common';
@@ -23,12 +23,19 @@ import { AXPWidgetGroupEnum } from '@acorex-platform/framework-shared/widget-cor
23
23
 
24
24
  //#region ---- Credential helpers ----
25
25
  const AXP_INTEGRATION_CREDENTIAL_MASK = '••••••••';
26
+ /** User owner stored on `config` because create stamps `scopeInfo` without `userId`. */
27
+ const CONNECTION_OWNER_USER_ID_FIELD = 'config.ownerUserId';
28
+ function connectionOwnerUserId(connection) {
29
+ const config = (connection.config ?? {});
30
+ return trim(defaultTo(config.ownerUserId, connection.scopeInfo?.userId));
31
+ }
26
32
  function hasConfigCredential(config) {
27
33
  return (!isEmpty(trim(String(config['apiKey'] ?? ''))) ||
28
34
  !isEmpty(trim(String(config['accessToken'] ?? ''))) ||
29
35
  !isEmpty(trim(String(config['refreshToken'] ?? ''))) ||
30
36
  !isEmpty(trim(String(config['clientSecret'] ?? ''))) ||
31
- !isEmpty(trim(String(config['botToken'] ?? ''))));
37
+ !isEmpty(trim(String(config['botToken'] ?? ''))) ||
38
+ !isEmpty(trim(String(config['token'] ?? ''))));
32
39
  }
33
40
  function isMaskedIntegrationCredential(value) {
34
41
  const normalized = trim(value ?? '');
@@ -127,7 +134,7 @@ class AXMIntegrationConnectionManager {
127
134
  { field: 'scopeInfo.applicationId', operator: { type: 'equal' }, value: applicationId },
128
135
  ];
129
136
  if (userId) {
130
- filters.push({ field: 'scopeInfo.userId', operator: { type: 'equal' }, value: userId });
137
+ filters.push({ field: CONNECTION_OWNER_USER_ID_FIELD, operator: { type: 'equal' }, value: userId });
131
138
  }
132
139
  return filters;
133
140
  }
@@ -168,7 +175,7 @@ class AXMIntegrationConnectionManager {
168
175
  operator: { type: 'equal' },
169
176
  value: AXP_INTEGRATION_CONNECTION_SCOPE.User,
170
177
  },
171
- { field: 'scopeInfo.userId', operator: { type: 'equal' }, value: userId },
178
+ { field: CONNECTION_OWNER_USER_ID_FIELD, operator: { type: 'equal' }, value: userId },
172
179
  ],
173
180
  },
174
181
  ],
@@ -180,7 +187,7 @@ class AXMIntegrationConnectionManager {
180
187
  if (item.connectionScope === AXP_INTEGRATION_CONNECTION_SCOPE.Tenant) {
181
188
  return true;
182
189
  }
183
- return item.scopeInfo?.userId === userId;
190
+ return connectionOwnerUserId(item) === userId;
184
191
  });
185
192
  }
186
193
  async findByUniqueKey(input) {
@@ -221,8 +228,12 @@ class AXMIntegrationConnectionManager {
221
228
  userId: data.connectionScope === AXP_INTEGRATION_CONNECTION_SCOPE.User ? userId : undefined,
222
229
  });
223
230
  const scopeInfo = this.buildOwnershipInfo(tenantId, applicationId, data.connectionScope, userId);
231
+ const config = data.connectionScope === AXP_INTEGRATION_CONNECTION_SCOPE.User
232
+ ? { ...(data.config ?? {}), ownerUserId: userId }
233
+ : (data.config ?? null);
224
234
  const payload = {
225
235
  ...data,
236
+ config,
226
237
  scopeInfo,
227
238
  isRevoked: defaultTo(data.isRevoked, false),
228
239
  isDisabled: defaultTo(data.isDisabled, false),
@@ -258,7 +269,7 @@ class AXMIntegrationConnectionManager {
258
269
  lastSyncAt: data.lastSyncAt ?? null,
259
270
  lastErrorCode: data.lastErrorCode ?? null,
260
271
  lastErrorMessage: data.lastErrorMessage ?? null,
261
- config: data.config ?? null,
272
+ config,
262
273
  };
263
274
  const id = await this.connectionAccessor().create(createPayload);
264
275
  const created = await this.connectionAccessor().byKey(id);
@@ -299,7 +310,7 @@ class AXMIntegrationConnectionManager {
299
310
  if (connection.connectionScope === AXP_INTEGRATION_CONNECTION_SCOPE.Tenant) {
300
311
  return true;
301
312
  }
302
- return connection.scopeInfo?.userId === userId;
313
+ return connectionOwnerUserId(connection) === userId;
303
314
  }
304
315
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMIntegrationConnectionManager, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
305
316
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMIntegrationConnectionManager, providedIn: 'root' }); }
@@ -372,28 +383,28 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
372
383
  //#region ---- Imports ----
373
384
  //#endregion
374
385
  //#region ---- Settings Provider ----
375
- const I18N$1 = '@integration-management:settings';
386
+ const I18N$2 = '@integration-management:settings';
376
387
  class AXMIntegrationManagementSettingProvider {
377
388
  async provide(context) {
378
389
  if (context.hasGroup('integrations')) {
379
390
  return;
380
391
  }
381
392
  context
382
- .addGroup('integrations', `${I18N$1}.group.nav-title`, `${I18N$1}.group.description`, 'fa-light fa-plug', `${I18N$1}.group.title`, 45)
393
+ .addGroup('integrations', `${I18N$2}.group.nav-title`, `${I18N$2}.group.description`, 'fa-light fa-plug', `${I18N$2}.group.title`, 45)
383
394
  .endGroup();
384
395
  }
385
396
  }
386
397
  //#endregion
387
398
 
388
- const I18N = '@integration-management:settings.domains.other';
399
+ const I18N$1 = '@integration-management:settings.domains.other';
389
400
  /** Fallback domain for connectors not yet assigned to a first-class integration domain. */
390
401
  class AXMIntegrationLegacyDomainProvider {
391
402
  async provide(context) {
392
403
  context.register({
393
404
  id: 'other',
394
405
  module: RootConfig.module.name,
395
- displayName: `${I18N}.title`,
396
- description: `${I18N}.description`,
406
+ displayName: `${I18N$1}.title`,
407
+ description: `${I18N$1}.description`,
397
408
  icon: 'fa-light fa-plug',
398
409
  category: AXP_INTEGRATION_CATEGORY.Other,
399
410
  capabilities: [],
@@ -608,7 +619,7 @@ const AXMIntegrationRefFilterWidget = {
608
619
  properties: [AXP_NAME_PROPERTY, AXP_DATA_PATH_PROPERTY, AXP_DISABLED_PROPERTY],
609
620
  components: {
610
621
  edit: {
611
- component: () => import('./acorex-platform-module-integration-management-client-integration-ref-filter-widget-edit.component-zVURpFT4.mjs').then((c) => c.AXMIntegrationRefFilterWidgetEditComponent),
622
+ component: () => import('./acorex-platform-module-integration-management-client-integration-ref-filter-widget-edit.component-FkH3n7GW.mjs').then((c) => c.AXMIntegrationRefFilterWidgetEditComponent),
612
623
  },
613
624
  },
614
625
  };
@@ -633,7 +644,7 @@ const AXMIntegrationRefWidget = {
633
644
  properties: [],
634
645
  components: {
635
646
  column: {
636
- component: () => import('./acorex-platform-module-integration-management-client-integration-ref-widget-column.component-ClPcvcUW.mjs').then((c) => c.AXMIntegrationRefWidgetColumnComponent),
647
+ component: () => import('./acorex-platform-module-integration-management-client-integration-ref-widget-column.component-C253nF3T.mjs').then((c) => c.AXMIntegrationRefWidgetColumnComponent),
637
648
  },
638
649
  view: {
639
650
  component: () => import('./acorex-platform-module-integration-management-client-integration-ref-widget-view.component-BRpGpWHZ.mjs').then((c) => c.AXMIntegrationRefWidgetViewComponent),
@@ -1096,9 +1107,38 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
1096
1107
  }]
1097
1108
  }] });
1098
1109
 
1110
+ //#region ----- Imports -----
1111
+ //#endregion
1112
+ //#region ----- Constants -----
1113
+ const INTEGRATIONS_SETTINGS_GROUP = 'integrations';
1114
+ /** One section for every personal connection card (Telegram, WhatsApp, Jira, …). */
1115
+ const USER_CONNECTIONS_SECTION = 'user-connections';
1116
+ const I18N = '@integration-management:settings.section.connections';
1117
+ //#endregion
1118
+ //#region ----- Section -----
1119
+ /**
1120
+ * Returns the shared user-connections section on the Integrations settings group.
1121
+ * The first caller creates it. Later callers append cards to the same section.
1122
+ */
1123
+ function ensureUserIntegrationConnectionsSection(context) {
1124
+ if (!context.hasGroup(INTEGRATIONS_SETTINGS_GROUP)) {
1125
+ return null;
1126
+ }
1127
+ const integrations = context.group(INTEGRATIONS_SETTINGS_GROUP);
1128
+ const group = context.getGroup(INTEGRATIONS_SETTINGS_GROUP);
1129
+ if (!integrations || !group) {
1130
+ return null;
1131
+ }
1132
+ if (group.sections.some((section) => section.name === USER_CONNECTIONS_SECTION)) {
1133
+ return integrations.section(USER_CONNECTIONS_SECTION);
1134
+ }
1135
+ return integrations.addSection(USER_CONNECTIONS_SECTION, `${I18N}.title`, `${I18N}.description`);
1136
+ }
1137
+ //#endregion
1138
+
1099
1139
  /**
1100
1140
  * Generated bundle index. Do not edit.
1101
1141
  */
1102
1142
 
1103
- export { AXMIntegrationConnectionManager, AXMIntegrationManagementModule, AXP_INTEGRATION_CREDENTIAL_MASK, hasConfiguredIntegrationCredentials, isMaskedIntegrationCredential, scrubDisconnectedConnectionConfig, toSafeIntegrationConnectionDto };
1143
+ export { AXMIntegrationConnectionManager, AXMIntegrationManagementModule, AXP_INTEGRATION_CREDENTIAL_MASK, ensureUserIntegrationConnectionsSection, hasConfiguredIntegrationCredentials, isMaskedIntegrationCredential, scrubDisconnectedConnectionConfig, toSafeIntegrationConnectionDto };
1104
1144
  //# sourceMappingURL=acorex-platform-module-integration-management-client.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"acorex-platform-module-integration-management-client.mjs","sources":["../../../../libs/modules/integration-management/client/src/lib/features/connect/connect.command.types.ts","../../../../libs/modules/integration-management/client/src/lib/features/shared/integration-connection.manager.ts","../../../../libs/modules/integration-management/client/src/lib/menu.provider.ts","../../../../libs/modules/integration-management/client/src/lib/permission-definition.provider.ts","../../../../libs/modules/integration-management/client/src/lib/settings.provider.ts","../../../../libs/modules/integration-management/client/src/lib/features/domains/integration-legacy-domain.provider.ts","../../../../libs/modules/integration-management/client/src/lib/features/shared/integration-runtime.service.impl.ts","../../../../libs/modules/integration-management/client/src/lib/features/shared/integration-connection-status.util.ts","../../../../libs/modules/integration-management/client/src/lib/features/shared/integration-evaluator-scope.provider.ts","../../../../libs/modules/integration-management/client/src/lib/features/integrations-page/integrations-page.routes.ts","../../../../libs/modules/integration-management/client/src/lib/features/oauth-callback/integration-oauth-callback.routes.ts","../../../../libs/modules/integration-management/client/src/lib/features/widgets/integration-ref/integration-ref-page.constants.ts","../../../../libs/modules/integration-management/client/src/lib/features/widgets/integration-ref/integration-ref-filter.widget.config.ts","../../../../libs/modules/integration-management/client/src/lib/features/widgets/integration-ref/integration-ref.widget.config.ts","../../../../libs/modules/integration-management/client/src/lib/features/plugins/integration-ref/integration-ref.apply.ts","../../../../libs/modules/integration-management/client/src/lib/features/plugins/integration-ref/integration-ref.fallback-modifier.ts","../../../../libs/modules/integration-management/client/src/lib/features/plugins/integration-ref/integration-ref.plugin.ts","../../../../libs/modules/integration-management/client/src/lib/features/plugins/integration-ref/integration-ref-plugin.module.ts","../../../../libs/modules/integration-management/client/src/lib/features/widgets/integration-ref/integration-ref-page-component.provider.ts","../../../../libs/modules/integration-management/client/src/lib/features/widgets/integration-ref/integration-ref-widget.provider.ts","../../../../libs/modules/integration-management/client/src/lib/integration-management.module.ts","../../../../libs/modules/integration-management/client/src/acorex-platform-module-integration-management-client.ts"],"sourcesContent":["import type { AXPIntegrationAuthMethodType, AXPIntegrationConnectionScope, AXPSafeIntegrationConnectionDto } from '@acorex-platform/framework-shared/core';\n\n//#region ---- Connect command types ----\n\nexport interface ConnectCommandInput {\n providerId: string;\n connectionScope?: AXPIntegrationConnectionScope;\n /** When set, skips auth-method picker and uses this method directly. */\n authMethodType?: AXPIntegrationAuthMethodType;\n}\n\nexport type ConnectCommandResult =\n | { outcome: 'cancelled' }\n | { outcome: 'connected'; connection: AXPSafeIntegrationConnectionDto }\n | { outcome: 'redirect'; redirectUrl: string };\n\n//#endregion\n","import {\n AXP_INTEGRATION_CONNECTION_SCOPE,\n AXP_INTEGRATION_CONNECTION_STATUS,\n type AXPSafeIntegrationConnectionDto,\n} from '@acorex-platform/framework-shared/core';\nimport { AXPSessionService } from '@acorex-platform/framework-client/auth';\nimport { AXPEntityService } from '@acorex-platform/framework-client/layout/entity';\nimport { Injectable, inject } from '@angular/core';\nimport { defaultTo, isEmpty, trim } from 'lodash';\nimport { RootConfig } from '@acorex-platform/module-integration-management-client/contracts';\nimport type { AXMIntegrationManagementIntegrationConnectionEntityModel } from '@acorex-platform/module-integration-management-client/contracts';\n\n//#region ---- Credential helpers ----\n\nexport const AXP_INTEGRATION_CREDENTIAL_MASK = '••••••••';\n\nfunction hasConfigCredential(config: Record<string, unknown>): boolean {\n return (\n !isEmpty(trim(String(config['apiKey'] ?? ''))) ||\n !isEmpty(trim(String(config['accessToken'] ?? ''))) ||\n !isEmpty(trim(String(config['refreshToken'] ?? ''))) ||\n !isEmpty(trim(String(config['clientSecret'] ?? ''))) ||\n !isEmpty(trim(String(config['botToken'] ?? '')))\n );\n}\n\nexport function isMaskedIntegrationCredential(value: string | null | undefined): boolean {\n const normalized = trim(value ?? '');\n return !normalized || normalized === AXP_INTEGRATION_CREDENTIAL_MASK;\n}\n\n/** Clears runtime OAuth/token fields while keeping reconnect-friendly client settings. */\nexport function scrubDisconnectedConnectionConfig(\n config: Record<string, unknown> | null | undefined,\n): Record<string, unknown> | null {\n if (!config) {\n return null;\n }\n\n const next = { ...config };\n delete next['accessToken'];\n delete next['refreshToken'];\n delete next['tokenExpiresAt'];\n delete next['oauthTokenJson'];\n delete next['authorizationUrl'];\n delete next['token'];\n delete next['password'];\n delete next['apiToken'];\n delete next['apiKey'];\n delete next['botToken'];\n return next;\n}\n\nexport function hasConfiguredIntegrationCredentials(\n connection: AXMIntegrationManagementIntegrationConnectionEntityModel | null | undefined,\n): boolean {\n if (!connection || connection.status !== AXP_INTEGRATION_CONNECTION_STATUS.Connected) {\n return false;\n }\n if (connection.isRevoked || connection.isDisabled) {\n return false;\n }\n if (!isEmpty(trim(defaultTo(connection.secretRef, '')))) {\n return true;\n }\n const config = (connection.config ?? {}) as Record<string, unknown>;\n return hasConfigCredential(config);\n}\n\n//#endregion\n\n//#region ---- Safe mapper ----\n\nexport function toSafeIntegrationConnectionDto(\n connection: AXMIntegrationManagementIntegrationConnectionEntityModel,\n): AXPSafeIntegrationConnectionDto {\n const secretRef = defaultTo(connection.secretRef, '');\n const config = (connection.config ?? {}) as Record<string, unknown>;\n const hasConfigSecret = hasConfigCredential(config);\n const hasSecret = !isEmpty(trim(secretRef)) || hasConfigSecret;\n\n return {\n id: connection.id,\n providerId: connection.providerId,\n connectionScope: connection.connectionScope,\n connectionKey: connection.connectionKey,\n displayName: connection.displayName,\n authMethodType: connection.authMethodType,\n status: connection.status,\n instanceUrl: connection.instanceUrl,\n externalAccountId: connection.externalAccountId,\n externalAccountName: connection.externalAccountName,\n grantedScopes: connection.grantedScopes,\n expiresAt: connection.expiresAt,\n lastConnectedAt: connection.lastConnectedAt,\n lastValidatedAt: connection.lastValidatedAt,\n lastSyncAt: connection.lastSyncAt,\n lastErrorCode: connection.lastErrorCode,\n lastErrorMessage: connection.lastErrorMessage,\n isRevoked: connection.isRevoked,\n isDisabled: connection.isDisabled,\n config: connection.config,\n hasSecret,\n secretPreview: hasSecret ? '••••••••' : null,\n };\n}\n\n//#endregion\n\n//#region ---- Connection manager ----\n\n@Injectable({ providedIn: 'root' })\nexport class AXMIntegrationConnectionManager {\n //#region ---- Services & Dependencies ----\n\n private readonly entityService = inject(AXPEntityService);\n private readonly sessionService = inject(AXPSessionService);\n\n //#endregion\n\n //#region ---- Accessors ----\n\n private connectionAccessor() {\n return this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.integrationConnection.name)\n .data<string, AXMIntegrationManagementIntegrationConnectionEntityModel>();\n }\n\n getSessionContext(): { tenantId: string; applicationId: string; userId: string } {\n const tenantId = this.sessionService.tenant?.id;\n const applicationId = this.sessionService.application?.id;\n const userId = this.sessionService.user?.id;\n if (!tenantId || !applicationId || !userId) {\n throw new Error(\n 'Integration operations require an authenticated user, tenant, and application context.',\n );\n }\n return { tenantId, applicationId, userId };\n }\n\n private ownershipFilters(\n tenantId: string,\n applicationId: string,\n userId?: string,\n ): Array<Record<string, unknown>> {\n const filters: Array<Record<string, unknown>> = [\n { field: 'scopeInfo.tenantId', operator: { type: 'equal' }, value: tenantId },\n { field: 'scopeInfo.applicationId', operator: { type: 'equal' }, value: applicationId },\n ];\n if (userId) {\n filters.push({ field: 'scopeInfo.userId', operator: { type: 'equal' }, value: userId });\n }\n return filters;\n }\n\n private buildOwnershipInfo(\n tenantId: string,\n applicationId: string,\n connectionScope: 'user' | 'tenant',\n userId: string,\n ) {\n return {\n tenantId,\n applicationId,\n ...(connectionScope === AXP_INTEGRATION_CONNECTION_SCOPE.User ? { userId } : {}),\n };\n }\n\n //#endregion\n\n //#region ---- Queries ----\n\n async listForCurrentUser(\n connectionScope?: 'user' | 'tenant',\n ): Promise<AXMIntegrationManagementIntegrationConnectionEntityModel[]> {\n const { tenantId, applicationId, userId } = this.getSessionContext();\n const result = await this.connectionAccessor().query({\n skip: 0,\n take: 1000,\n filter: {\n logic: 'and',\n filters: [\n ...this.ownershipFilters(tenantId, applicationId),\n ...(connectionScope\n ? [{ field: 'connectionScope', operator: { type: 'equal' as const }, value: connectionScope }]\n : []),\n {\n logic: 'or',\n filters: [\n {\n field: 'connectionScope',\n operator: { type: 'equal' },\n value: AXP_INTEGRATION_CONNECTION_SCOPE.Tenant,\n },\n {\n logic: 'and',\n filters: [\n {\n field: 'connectionScope',\n operator: { type: 'equal' },\n value: AXP_INTEGRATION_CONNECTION_SCOPE.User,\n },\n { field: 'scopeInfo.userId', operator: { type: 'equal' }, value: userId },\n ],\n },\n ],\n },\n ],\n },\n });\n\n return (result.items ?? []).filter((item) => {\n if (item.connectionScope === AXP_INTEGRATION_CONNECTION_SCOPE.Tenant) {\n return true;\n }\n return item.scopeInfo?.userId === userId;\n });\n }\n\n async findByUniqueKey(input: {\n providerId: string;\n connectionScope: 'user' | 'tenant';\n connectionKey: string;\n userId?: string;\n tenantId?: string;\n applicationId?: string;\n }): Promise<AXMIntegrationManagementIntegrationConnectionEntityModel | null> {\n const ctx = this.getSessionContext();\n const tenantId = input.tenantId ?? ctx.tenantId;\n const applicationId = input.applicationId ?? ctx.applicationId;\n const userId = input.userId ?? ctx.userId;\n\n const filters: Array<Record<string, unknown>> = [\n ...this.ownershipFilters(\n tenantId,\n applicationId,\n input.connectionScope === AXP_INTEGRATION_CONNECTION_SCOPE.User ? userId : undefined,\n ),\n { field: 'providerId', operator: { type: 'equal' }, value: input.providerId },\n { field: 'connectionScope', operator: { type: 'equal' }, value: input.connectionScope },\n { field: 'connectionKey', operator: { type: 'equal' }, value: input.connectionKey },\n ];\n\n const result = await this.connectionAccessor().query({\n skip: 0,\n take: 1,\n filter: { logic: 'and', filters },\n });\n\n return result.items?.[0] ?? null;\n }\n\n async getByIdForCurrentUser(\n connectionId: string,\n ): Promise<AXMIntegrationManagementIntegrationConnectionEntityModel | null> {\n const connection = await this.connectionAccessor().byKey(connectionId);\n if (!connection) {\n return null;\n }\n return this.assertOwnership(connection) ? connection : null;\n }\n\n //#endregion\n\n //#region ---- Mutations ----\n\n async upsertConnection(\n data: Partial<AXMIntegrationManagementIntegrationConnectionEntityModel> & {\n providerId: string;\n connectionScope: 'user' | 'tenant';\n connectionKey: string;\n displayName: string;\n authMethodType: AXMIntegrationManagementIntegrationConnectionEntityModel['authMethodType'];\n },\n ): Promise<AXMIntegrationManagementIntegrationConnectionEntityModel> {\n const { tenantId, applicationId, userId } = this.getSessionContext();\n const existing = await this.findByUniqueKey({\n providerId: data.providerId,\n connectionScope: data.connectionScope,\n connectionKey: data.connectionKey,\n tenantId,\n applicationId,\n userId: data.connectionScope === AXP_INTEGRATION_CONNECTION_SCOPE.User ? userId : undefined,\n });\n\n const scopeInfo = this.buildOwnershipInfo(\n tenantId,\n applicationId,\n data.connectionScope,\n userId,\n );\n\n const payload: Partial<AXMIntegrationManagementIntegrationConnectionEntityModel> = {\n ...data,\n scopeInfo,\n isRevoked: defaultTo(data.isRevoked, false),\n isDisabled: defaultTo(data.isDisabled, false),\n status: data.status ?? AXP_INTEGRATION_CONNECTION_STATUS.Connected,\n lastConnectedAt: data.lastConnectedAt ?? new Date().toISOString(),\n };\n\n if (existing) {\n await this.connectionAccessor().update(existing.id, payload);\n const updated = await this.connectionAccessor().byKey(existing.id);\n if (!updated) {\n throw new Error('Connection not found after update.');\n }\n return updated;\n }\n\n const createPayload: Omit<AXMIntegrationManagementIntegrationConnectionEntityModel, 'id'> = {\n providerId: data.providerId,\n connectionScope: data.connectionScope,\n connectionKey: data.connectionKey,\n displayName: data.displayName,\n authMethodType: data.authMethodType,\n scopeInfo,\n isRevoked: defaultTo(data.isRevoked, false),\n isDisabled: defaultTo(data.isDisabled, false),\n status: data.status ?? AXP_INTEGRATION_CONNECTION_STATUS.Connected,\n lastConnectedAt: data.lastConnectedAt ?? new Date().toISOString(),\n instanceUrl: data.instanceUrl ?? null,\n externalAccountId: data.externalAccountId ?? null,\n externalAccountName: data.externalAccountName ?? null,\n grantedScopes: data.grantedScopes ?? null,\n secretRef: data.secretRef ?? null,\n expiresAt: data.expiresAt ?? null,\n lastValidatedAt: data.lastValidatedAt ?? null,\n lastSyncAt: data.lastSyncAt ?? null,\n lastErrorCode: data.lastErrorCode ?? null,\n lastErrorMessage: data.lastErrorMessage ?? null,\n config: data.config ?? null,\n };\n\n const id = await this.connectionAccessor().create(createPayload);\n const created = await this.connectionAccessor().byKey(id);\n if (!created) {\n throw new Error('Connection not found after create.');\n }\n return created;\n }\n\n async updateConnection(\n connectionId: string,\n patch: Partial<AXMIntegrationManagementIntegrationConnectionEntityModel>,\n ): Promise<AXMIntegrationManagementIntegrationConnectionEntityModel> {\n const existing = await this.getByIdForCurrentUser(connectionId);\n if (!existing) {\n throw new Error('Connection not found or access denied.');\n }\n await this.connectionAccessor().update(connectionId, patch);\n const updated = await this.connectionAccessor().byKey(connectionId);\n if (!updated) {\n throw new Error('Connection not found after update.');\n }\n return updated;\n }\n\n async deleteConnection(connectionId: string): Promise<void> {\n const existing = await this.getByIdForCurrentUser(connectionId);\n if (!existing) {\n throw new Error('Connection not found or access denied.');\n }\n await this.connectionAccessor().delete(connectionId);\n }\n\n //#endregion\n\n //#region ---- Authorization ----\n\n assertOwnership(connection: AXMIntegrationManagementIntegrationConnectionEntityModel): boolean {\n const { tenantId, applicationId, userId } = this.getSessionContext();\n if (connection.scopeInfo?.tenantId !== tenantId) {\n return false;\n }\n if (connection.scopeInfo?.applicationId !== applicationId) {\n return false;\n }\n if (connection.connectionScope === AXP_INTEGRATION_CONNECTION_SCOPE.Tenant) {\n return true;\n }\n return connection.scopeInfo?.userId === userId;\n }\n\n //#endregion\n}\n\n//#endregion\n","//#region ----- Imports -----\n\nimport { AXPSessionService } from '@acorex-platform/framework-client/auth';\nimport { AXPMenuProvider, AXPMenuProviderContext } from '@acorex-platform/framework-client/common';\nimport { AXPCommonMenuKeys } from '@acorex-platform/module-common-client/contracts';\nimport { inject } from '@angular/core';\nimport { firstValueFrom } from 'rxjs';\nimport {\n AXMIntegrationManagementMenuKeys,\n AXPAdministrationPermissionKeys,\n RootConfig,\n} from '@acorex-platform/module-integration-management-client/contracts';\n\n//#endregion\n\n//#region ----- Menu Provider -----\n\nexport class AXMIntegrationManagementMenuProvider implements AXPMenuProvider {\n private readonly sessionService = inject(AXPSessionService);\n\n async provide(context: AXPMenuProviderContext): Promise<void> {\n const isAuthorized = await firstValueFrom(this.sessionService.isAuthorized$);\n if (!isAuthorized) {\n return;\n }\n\n const appName = this.sessionService.application?.name;\n\n context.find(AXPCommonMenuKeys.Administration).addItems([\n {\n name: AXMIntegrationManagementMenuKeys.Integrations,\n priority: 1000,\n text: '@integration-management:pages.integrations.title',\n type: 'menu',\n icon: 'fa-light fa-plug',\n path: `/${appName}/admin/integrations`,\n policy: {\n features: [RootConfig.module.name],\n permissions: [AXPAdministrationPermissionKeys.MaintainConnections],\n },\n },\n ]);\n }\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport {\n AXPPermissionDefinitionProvider,\n AXPPermissionDefinitionProviderContext,\n} from '@acorex-platform/framework-client/auth';\nimport { AXPCommonPermissionGroupKeys } from '@acorex-platform/module-common-client/contracts';\nimport { AXPAdministrationPermissionKeys } from '@acorex-platform/module-integration-management-client/contracts';\nimport { Injectable } from '@angular/core';\n\n//#endregion\n\n//#region ---- Permission Definition Provider ----\n\n/**\n * Registers Integrations section capabilities under Administration.\n */\n@Injectable()\nexport class AXMIntegrationManagementPermissionDefinitionProvider implements AXPPermissionDefinitionProvider {\n async define(context: AXPPermissionDefinitionProviderContext): Promise<void> {\n const keys = AXPAdministrationPermissionKeys;\n const groups = AXPCommonPermissionGroupKeys;\n const P = '@common:administration.permissions';\n const G = '@common:permission-groups';\n\n context.addGroup(groups.Administration.Root, `${G}.administration.title`, `${G}.administration.description`, { order: 120 });\n\n context\n .addGroup(\n groups.Administration.Integrations,\n `${G}.administration-integrations.title`,\n `${G}.administration-integrations.description`,\n { parent: groups.Administration.Root, order: 20 },\n )\n .addPermission(keys.ViewIntegrations, `${P}.view-integrations.title`, `${P}.view-integrations.description`)\n .endPermission()\n .addPermission(\n keys.MaintainConnections,\n `${P}.maintain-connections.title`,\n `${P}.maintain-connections.description`,\n )\n .endPermission()\n .addPermission(\n keys.ManageIntegrationActions,\n `${P}.manage-integration-actions.title`,\n `${P}.manage-integration-actions.description`,\n )\n .endPermission()\n .endGroup();\n }\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport {\n AXPSettingDefinitionProvider,\n AXPSettingDefinitionProviderContext,\n} from '@acorex-platform/framework-client/common';\nimport { RootConfig } from '@acorex-platform/module-integration-management-client/contracts';\n\n//#endregion\n\n//#region ---- Settings Provider ----\n\nconst I18N = '@integration-management:settings';\n\nexport class AXMIntegrationManagementSettingProvider implements AXPSettingDefinitionProvider {\n async provide(context: AXPSettingDefinitionProviderContext): Promise<void> {\n if (context.hasGroup('integrations')) {\n return;\n }\n\n context\n .addGroup(\n 'integrations',\n `${I18N}.group.nav-title`,\n `${I18N}.group.description`,\n 'fa-light fa-plug',\n `${I18N}.group.title`,\n 45,\n )\n .endGroup();\n }\n}\n\n//#endregion\n","import { AXP_INTEGRATION_CATEGORY } from '@acorex-platform/framework-shared/core';\nimport {\n type AXPIntegrationDomainProvider,\n AXPIntegrationDomainProviderContext,\n} from '@acorex-platform/framework-client/common';\nimport { Injectable } from '@angular/core';\nimport { RootConfig } from '@acorex-platform/module-integration-management-client/contracts';\n\nconst I18N = '@integration-management:settings.domains.other';\n\n/** Fallback domain for connectors not yet assigned to a first-class integration domain. */\n@Injectable()\nexport class AXMIntegrationLegacyDomainProvider implements AXPIntegrationDomainProvider {\n async provide(context: AXPIntegrationDomainProviderContext): Promise<void> {\n context.register({\n id: 'other',\n module: RootConfig.module.name,\n displayName: `${I18N}.title`,\n description: `${I18N}.description`,\n icon: 'fa-light fa-plug',\n category: AXP_INTEGRATION_CATEGORY.Other,\n capabilities: [],\n sortOrder: 999,\n });\n }\n}\n","import { AXP_INTEGRATION_CONNECTION_STATUS, AXPIntegrationExpiredError, AXPIntegrationMissingScopeError, AXPIntegrationNotConnectedError, type AXPIntegrationProviderDefinition, type AXPIntegrationRuntimeContext, type AXPSafeIntegrationConnectionDto } from '@acorex-platform/framework-shared/core';\nimport {\n AXP_INTEGRATION_RUNTIME_PROVIDER,\n AXP_INTEGRATION_SECRET_STORE,\n AXPIntegrationProviderRegistryService,\n AXPIntegrationRuntimeService,\n type AXPIntegrationWithClientOptions,\n} from '@acorex-platform/framework-client/common';\nimport { Injectable, inject } from '@angular/core';\nimport { defaultTo, isEmpty } from 'lodash';\nimport { AXMIntegrationConnectionManager, toSafeIntegrationConnectionDto } from './integration-connection.manager';\n\n//#region ---- Runtime service implementation ----\n\n@Injectable({ providedIn: 'root' })\nexport class AXMIntegrationRuntimeServiceImpl extends AXPIntegrationRuntimeService {\n private readonly registry = inject(AXPIntegrationProviderRegistryService);\n private readonly connectionManager = inject(AXMIntegrationConnectionManager);\n private readonly secretStore = inject(AXP_INTEGRATION_SECRET_STORE, { optional: true });\n private readonly runtimeProviders = inject(AXP_INTEGRATION_RUNTIME_PROVIDER, { optional: true });\n\n async getProvider(id: string): Promise<AXPIntegrationProviderDefinition> {\n return this.registry.getOrThrow(id);\n }\n\n async listProviders(): Promise<AXPIntegrationProviderDefinition[]> {\n return this.registry.list();\n }\n\n async getConnection(options: AXPIntegrationWithClientOptions): Promise<AXPSafeIntegrationConnectionDto> {\n const connection = await this.resolveConnection(options);\n return toSafeIntegrationConnectionDto(connection);\n }\n\n async withClient<T>(\n options: AXPIntegrationWithClientOptions,\n fn: (client: unknown, ctx: AXPIntegrationRuntimeContext) => Promise<T>,\n ): Promise<T> {\n const connection = await this.resolveConnection(options);\n if (!connection.secretRef) {\n throw new AXPIntegrationNotConnectedError(options.providerId);\n }\n\n const ctx = await this.buildRuntimeContext({\n ...toSafeIntegrationConnectionDto(connection),\n secretRef: connection.secretRef,\n });\n\n const hooks = await this.resolveRuntimeHooks(options.providerId);\n if (!hooks?.createClient) {\n throw new Error(`Integration provider '${options.providerId}' does not expose a runtime client.`);\n }\n\n const client = await hooks.createClient(ctx);\n return fn(client, ctx);\n }\n\n async buildRuntimeContext(\n connection: AXPSafeIntegrationConnectionDto & { secretRef: string },\n ): Promise<AXPIntegrationRuntimeContext> {\n const { tenantId, applicationId, userId } = this.connectionManager.getSessionContext();\n return {\n tenantId,\n applicationId,\n userId,\n connectionId: connection.id,\n providerId: connection.providerId,\n connectionScope: connection.connectionScope,\n connectionKey: connection.connectionKey,\n authMethodType: connection.authMethodType,\n instanceUrl: connection.instanceUrl,\n config: connection.config,\n secretRef: connection.secretRef,\n };\n }\n\n private async resolveConnection(options: AXPIntegrationWithClientOptions) {\n const provider = await this.registry.getOrThrow(options.providerId);\n const connectionScope = options.connectionScope ?? 'user';\n const connectionKey = defaultTo(options.connectionKey, provider.defaultConnectionKey ?? 'default');\n\n if (options.requiredCapabilities?.length) {\n const missing = options.requiredCapabilities.filter((c) => !provider.capabilities.includes(c as never));\n if (missing.length) {\n throw new Error(`Provider '${provider.id}' is missing capabilities: ${missing.join(', ')}`);\n }\n }\n\n const connection = await this.connectionManager.findByUniqueKey({\n providerId: options.providerId,\n connectionScope,\n connectionKey,\n });\n\n if (!connection || connection.status !== AXP_INTEGRATION_CONNECTION_STATUS.Connected) {\n throw new AXPIntegrationNotConnectedError(options.providerId);\n }\n\n if (connection.expiresAt && new Date(connection.expiresAt).getTime() < Date.now()) {\n throw new AXPIntegrationExpiredError(options.providerId, connection.id);\n }\n\n if (options.requiredScopes?.length && connection.grantedScopes) {\n const missingScopes = options.requiredScopes.filter((s) => !connection.grantedScopes!.includes(s));\n if (!isEmpty(missingScopes)) {\n throw new AXPIntegrationMissingScopeError(options.providerId, missingScopes);\n }\n }\n\n return connection;\n }\n\n private async resolveRuntimeHooks(providerId: string) {\n const providers = this.runtimeProviders ?? [];\n for (const provider of providers) {\n const resolved = provider instanceof Promise ? await provider : provider;\n if (resolved.providerId === providerId) {\n return resolved.getHooks();\n }\n }\n return null;\n }\n}\n\n//#endregion\n","import {\n AXP_INTEGRATION_CONNECTION_STATUS,\n} from '@acorex-platform/framework-shared/core';\nimport type { AXMIntegrationManagementIntegrationConnectionEntityModel } from '@acorex-platform/module-integration-management-client/contracts';\n\n//#region ---- Integration connection status ----\n\n/** Matches integration-connections-panel `isProviderConnected` semantics. */\nexport function isActiveIntegrationConnection(\n connection: AXMIntegrationManagementIntegrationConnectionEntityModel | null | undefined,\n): boolean {\n if (!connection) {\n return false;\n }\n\n return (\n connection.status === AXP_INTEGRATION_CONNECTION_STATUS.Connected &&\n !connection.isRevoked &&\n !connection.isDisabled\n );\n}\n\n//#endregion\n","import { AXPExpressionEvaluatorScopeProvider, AXPExpressionEvaluatorScopeProviderContext } from '@acorex-platform/framework-shared/core';\nimport { Injectable, inject } from '@angular/core';\nimport { defaultTo } from 'lodash';\nimport {\n AXP_INTEGRATION_CONNECTION_SCOPE,\n} from '@acorex-platform/framework-shared/core';\nimport { AXMIntegrationConnectionManager } from './integration-connection.manager';\nimport { isActiveIntegrationConnection } from './integration-connection-status.util';\n\n//#region ---- Integration expression scope ----\n\n/**\n * Exposes integration connection checks in expression strings, e.g.\n * `{{ integration.isUserConnected('telegram') }}`.\n */\n@Injectable()\nexport class AXMIntegrationEvaluatorScopeProvider implements AXPExpressionEvaluatorScopeProvider {\n private readonly connectionManager = inject(AXMIntegrationConnectionManager);\n\n async provide(context: AXPExpressionEvaluatorScopeProviderContext): Promise<void> {\n context.addScope('integration', {\n isUserConnected: (providerId: string, connectionKey?: string) =>\n this.isConnected(providerId, AXP_INTEGRATION_CONNECTION_SCOPE.User, connectionKey),\n isTenantConfigured: (providerId: string, connectionKey?: string) =>\n this.isConnected(providerId, AXP_INTEGRATION_CONNECTION_SCOPE.Tenant, connectionKey),\n });\n }\n\n private async isConnected(\n providerId: string,\n scope: typeof AXP_INTEGRATION_CONNECTION_SCOPE.User | typeof AXP_INTEGRATION_CONNECTION_SCOPE.Tenant,\n connectionKey?: string,\n ): Promise<boolean> {\n const normalizedProviderId = String(providerId ?? '').trim();\n if (!normalizedProviderId) {\n return false;\n }\n\n const connection = await this.connectionManager.findByUniqueKey({\n providerId: normalizedProviderId,\n connectionScope: scope,\n connectionKey: defaultTo(connectionKey, 'default'),\n });\n\n return isActiveIntegrationConnection(connection);\n }\n}\n\n//#endregion\n","//#region ----- Imports -----\n\nimport { AXP_PROTECTED_ROUTE_GUARDS } from '@acorex-platform/framework-client/common';\nimport { AXPRootLayoutComponent } from '@acorex-platform/framework-client/themes/default';\nimport { Routes } from '@angular/router';\n\n//#endregion\n\n//#region ----- Routes -----\n\nexport function integrationManagementRoutesFactory(): Routes {\n return [\n {\n path: ':app/admin/integrations',\n canActivate: [...AXP_PROTECTED_ROUTE_GUARDS],\n data: { tab: true, rootLayout: true },\n loadComponent: () => AXPRootLayoutComponent,\n children: [\n {\n path: '',\n loadComponent: () =>\n import('./integrations-page.component').then((c) => c.AXMIntegrationsPageComponent),\n data: { reuse: true },\n },\n ],\n },\n ];\n}\n\n//#endregion\n","import { Routes } from '@angular/router';\n\nexport const integrationOAuthCallbackRoutes: Routes = [\n // App-agnostic callback first — must win over `:appName/...` (else appName=\"integrations\").\n {\n path: 'integrations/oauth/callback/:providerId',\n loadComponent: () =>\n import('./integration-oauth-callback-page.component').then((c) => c.AXMIntegrationOAuthCallbackPageComponent),\n },\n // Legacy app-prefixed callback (older provider redirect URI configs).\n {\n path: ':appName/integrations/oauth/callback/:providerId',\n loadComponent: () =>\n import('./integration-oauth-callback-page.component').then((c) => c.AXMIntegrationOAuthCallbackPageComponent),\n },\n];\n","export const AXM_INTEGRATION_REF_PAGE_COMPONENT_KEY = 'integration-management.integration-ref-page';\n","//#region ----- Imports -----\n\nimport {\n AXP_DATA_PATH_PROPERTY,\n AXP_DISABLED_PROPERTY,\n AXP_NAME_PROPERTY,\n} from '@acorex-platform/framework-client/layout/widgets';\nimport { AXPWidgetConfig } from '@acorex-platform/framework-shared/widget-core';\n\n//#endregion\n\n//#region ----- Constants -----\n\nexport const AXM_INTEGRATION_REF_FILTER_WIDGET_NAME = 'integration-ref-filter';\n\n//#endregion\n\n//#region ----- Widget config -----\n\nexport const AXMIntegrationRefFilterWidget: AXPWidgetConfig = {\n name: AXM_INTEGRATION_REF_FILTER_WIDGET_NAME,\n title: '@integration-management:widgets.integration-ref.filter.title',\n description: 'Select-box filter for integrationRef.source provider ids.',\n type: 'filter',\n defaultFilterOperator: 'equal',\n icon: 'fa-light fa-plug',\n /**\n * `path` is required so AXPValueWidgetComponent treats this as a value widget\n * and setValue/getValue bind into the filter context (otherwise Apply writes empty).\n */\n properties: [AXP_NAME_PROPERTY, AXP_DATA_PATH_PROPERTY, AXP_DISABLED_PROPERTY],\n components: {\n edit: {\n component: () =>\n import('./integration-ref-filter-widget-edit.component').then(\n (c) => c.AXMIntegrationRefFilterWidgetEditComponent,\n ),\n },\n },\n};\n\n//#endregion\n","//#region ----- Imports -----\n\nimport { AXPWidgetConfig, AXPWidgetGroupEnum } from '@acorex-platform/framework-shared/widget-core';\n\nimport { AXM_INTEGRATION_REF_FILTER_WIDGET_NAME } from './integration-ref-filter.widget.config';\n\n//#endregion\n\n//#region ----- Constants -----\n\n/** Widget name used on entity `integrationRef` fields (`schema.interface.type`). */\nexport const AXM_INTEGRATION_REF_WIDGET_NAME = 'integration-ref';\n\n//#endregion\n\n//#region ----- Widget config -----\n\nexport const AXMIntegrationRefWidget: AXPWidgetConfig = {\n name: AXM_INTEGRATION_REF_WIDGET_NAME,\n title: '@integration-management:widgets.integration-ref.page.title',\n description: 'Shows the integration provider logo for records linked via integrationRef.',\n type: 'view',\n categories: [],\n groups: [AXPWidgetGroupEnum.EntityWidget],\n icon: 'fa-light fa-plug',\n defaultFilterWidgetName: AXM_INTEGRATION_REF_FILTER_WIDGET_NAME,\n properties: [],\n components: {\n column: {\n component: () =>\n import('./integration-ref-widget-column.component').then(\n (c) => c.AXMIntegrationRefWidgetColumnComponent,\n ),\n },\n view: {\n component: () =>\n import('./integration-ref-widget-view.component').then(\n (c) => c.AXMIntegrationRefWidgetViewComponent,\n ),\n },\n },\n};\n\n//#endregion\n","//#region ----- Imports -----\n\nimport type { AXPEntityModifierContext } from '@acorex-platform/framework-client/layout/entity';\n\nimport { AXM_INTEGRATION_REF_PAGE_COMPONENT_KEY } from '../../widgets/integration-ref/integration-ref-page.constants';\nimport { AXM_INTEGRATION_REF_FILTER_WIDGET_NAME } from '../../widgets/integration-ref/integration-ref-filter.widget.config';\nimport { AXM_INTEGRATION_REF_WIDGET_NAME } from '../../widgets/integration-ref/integration-ref.widget.config';\nimport type { AXMIntegrationRefPluginOptions } from './integration-ref.types';\n\n//#endregion\n\n//#region ----- Constants -----\n\nexport const AXM_INTEGRATION_REF_PLUGIN_NAME = 'integration-ref';\n\nconst DEFAULT_FIELD = 'integrationRef';\nconst DEFAULT_COLUMN_TITLE = '@integration-management:widgets.integration-ref.column-title';\nconst DEFAULT_PAGE_TITLE = '@integration-management:widgets.integration-ref.page.title';\nconst DEFAULT_PAGE_ORDER = 20;\nconst DEFAULT_COLUMN_WIDTH = '140px';\n\n//#endregion\n\n//#region ----- Helpers -----\n\n/** List columns that represent entity status (`status`, `statusId`, `projectStatusId`, …). */\nfunction isStatusColumnName(name: string): boolean {\n const normalized = name.trim().toLowerCase();\n return (\n normalized === 'status' ||\n normalized === 'statusid' ||\n normalized.endsWith('statusid') ||\n (normalized.endsWith('status') && !normalized.includes('http'))\n );\n}\n\n//#endregion\n\n//#region ----- Apply -----\n\n/**\n * Ensures Source list column + Integration Info tab for an entity that carries `integrationRef`.\n */\nexport function applyIntegrationRefEnhancements(\n ctx: AXPEntityModifierContext,\n options: AXMIntegrationRefPluginOptions = {},\n): void {\n const field = String(options.field ?? DEFAULT_FIELD).trim() || DEFAULT_FIELD;\n const columnTitle = options.title ?? DEFAULT_COLUMN_TITLE;\n const pageTitle = options.pageTitle ?? DEFAULT_PAGE_TITLE;\n const pageIcon = options.pageIcon ?? 'fa-light fa-plug';\n const pageOrder = options.pageOrder ?? DEFAULT_PAGE_ORDER;\n const columnWidth = options.columnWidth ?? DEFAULT_COLUMN_WIDTH;\n /** Default off; still choosable in the column picker. */\n const columnVisible = options.columnVisible === true;\n const showListColumn = options.showListColumn !== false;\n const showPage = options.showPage !== false;\n const groupId = options.groupId ?? 'basic-info';\n\n if (!ctx.properties.find(field).get()) {\n ctx.properties.add({\n name: field,\n title: columnTitle,\n groupId,\n schema: {\n dataType: 'object',\n visible: false,\n nullable: true,\n readonly: true,\n },\n } as any);\n }\n\n ctx.properties.find(field).update((prop) => ({\n ...prop,\n title: prop.title ?? columnTitle,\n options: {\n ...prop.options,\n filter: {\n ...(prop.options?.filter ?? {}),\n advance: {\n ...(prop.options?.filter?.advance ?? {}),\n enabled: true,\n widgetType: AXM_INTEGRATION_REF_FILTER_WIDGET_NAME,\n },\n inline: {\n ...(prop.options?.filter?.inline ?? {}),\n enabled: true,\n },\n },\n },\n schema: {\n ...prop.schema,\n dataType: prop.schema?.dataType ?? 'object',\n // Keep off the overview form; Integration Info page owns the UI.\n visible: false,\n nullable: prop.schema?.nullable ?? true,\n readonly: true,\n interface: {\n ...(prop.schema.interface ?? {}),\n type: AXM_INTEGRATION_REF_WIDGET_NAME,\n options: {\n ...(prop.schema.interface?.options ?? {}),\n textField: 'source',\n expose: [\n {\n source: 'source',\n target: `${field}.source`,\n },\n ],\n },\n },\n },\n }));\n\n if (showListColumn) {\n if (!ctx.columns.find(field).get()) {\n ctx.columns.add({\n name: field,\n title: columnTitle,\n options: { width: columnWidth, visible: columnVisible },\n });\n } else {\n ctx.columns.find(field).update((col) => ({\n ...col,\n title: col.title ?? columnTitle,\n options: {\n ...(col.options ?? {}),\n width: columnWidth,\n visible: columnVisible,\n },\n }));\n }\n\n const columns = ctx.columns.list();\n if (columns?.length) {\n const index = columns.findIndex((col) => col.name === field);\n if (index >= 0) {\n const [column] = columns.splice(index, 1);\n const statusIndex = columns.findIndex((col) => isStatusColumnName(String(col.name ?? '')));\n if (statusIndex >= 0) {\n columns.splice(statusIndex, 0, column);\n } else {\n columns.push(column);\n }\n }\n }\n }\n\n if (showPage) {\n ctx.entity.pages ??= [];\n const page = {\n componentKey: AXM_INTEGRATION_REF_PAGE_COMPONENT_KEY,\n title: pageTitle,\n icon: pageIcon,\n layout: { order: pageOrder, position: 'after' as const },\n /**\n * Update/edit form wizard only. Details view always includes entity.pages.\n * Do not set create — empty Integration Info as a create wizard step remounts the dialog.\n */\n appearOn: { update: true },\n };\n const existingIndex = ctx.entity.pages.findIndex(\n (entry) => entry.componentKey === AXM_INTEGRATION_REF_PAGE_COMPONENT_KEY,\n );\n if (existingIndex >= 0) {\n ctx.entity.pages[existingIndex] = page;\n } else {\n ctx.entity.pages.push(page);\n }\n }\n}\n\n//#endregion\n","//#region ----- Imports -----\n\nimport type { AXPEntityModifierProvider } from '@acorex-platform/framework-client/layout/entity';\n\nimport {\n applyIntegrationRefEnhancements,\n AXM_INTEGRATION_REF_PLUGIN_NAME,\n} from './integration-ref.apply';\n\n//#endregion\n\n//#region ----- Fallback modifier -----\n\n/**\n * Applies Source column + Integration Info when the entity already declares `integrationRef`\n * but the seeded layout has not yet listed the `integration-ref` plugin (stale definitions).\n * Skips when the action plugin is declared so options (`groupId`, …) win.\n */\nexport const AXMIntegrationRefFallbackModifier: AXPEntityModifierProvider = {\n entityName: '*',\n /** Just after the action plugin (80) so declared plugins win when both could apply. */\n order: 81,\n modifier: (ctx) => {\n const hasPlugin = (ctx.entity.plugins ?? []).some((entry) => entry.name === AXM_INTEGRATION_REF_PLUGIN_NAME);\n if (hasPlugin) {\n return;\n }\n if (!ctx.properties.find('integrationRef').get()) {\n return;\n }\n applyIntegrationRefEnhancements(ctx, {});\n },\n};\n\n//#endregion\n","//#region ----- Imports -----\n\nimport type { AXPEntityActionPlugin } from '@acorex-platform/framework-client/layout/entity';\n\nimport {\n applyIntegrationRefEnhancements,\n AXM_INTEGRATION_REF_PLUGIN_NAME,\n} from './integration-ref.apply';\nimport type { AXMIntegrationRefPluginOptions } from './integration-ref.types';\n\n//#endregion\n\n//#region ----- Plugin -----\n\n/**\n * Opt-in plugin for entities linked from integration connections.\n * - Ensures `integrationRef` property + Source list column (off by default, toggable)\n * - Places Source last before Status when present\n * - Adds readonly Integration Info tab on update/detail (not create)\n */\nexport const integrationRefPlugin: AXPEntityActionPlugin = {\n name: AXM_INTEGRATION_REF_PLUGIN_NAME,\n /** After status (70) / attachments (50) so Source can sit before Status. */\n order: 80,\n apply: (ctx, options: AXMIntegrationRefPluginOptions = {}) => {\n applyIntegrationRefEnhancements(ctx, options);\n },\n};\n\nexport { AXM_INTEGRATION_REF_PLUGIN_NAME };\n\n//#endregion\n","//#region ----- Imports -----\n\nimport {\n AXP_ENTITY_ACTION_PLUGIN,\n AXP_ENTITY_MODIFIER,\n configureEntityListColumnsSettingsMigrateDrop,\n configureEntityListColumnsSettingsVersion,\n} from '@acorex-platform/framework-client/layout/entity';\nimport { NgModule } from '@angular/core';\n\nimport { AXMIntegrationRefFallbackModifier } from './integration-ref.fallback-modifier';\nimport { integrationRefPlugin } from './integration-ref.plugin';\n\n//#endregion\n\n//#region ----- Boot configure (once) -----\n\n/**\n * Clear stale Source column prefs from when the column was first-pinned.\n * Framework migrate-drop registry stays empty until this module loads.\n */\nconfigureEntityListColumnsSettingsMigrateDrop(['integrationRef']);\nconfigureEntityListColumnsSettingsVersion(3);\n\n//#endregion\n\n//#region ----- Module -----\n\n@NgModule({\n providers: [\n {\n provide: AXP_ENTITY_ACTION_PLUGIN,\n multi: true,\n useValue: integrationRefPlugin,\n },\n {\n provide: AXP_ENTITY_MODIFIER,\n multi: true,\n useValue: AXMIntegrationRefFallbackModifier,\n },\n ],\n})\nexport class AXMIntegrationRefPluginModule {}\n\n//#endregion\n","//#region ----- Imports -----\n\nimport { AXPPageComponentDefinition, AXPPageComponentProvider } from '@acorex-platform/framework-client/layout/components';\nimport { Injectable } from '@angular/core';\n\nimport { AXM_INTEGRATION_REF_PAGE_COMPONENT_KEY } from './integration-ref-page.constants';\n\n//#endregion\n\n//#region ----- Provider -----\n\n@Injectable()\nexport class AXMIntegrationRefPageComponentProvider implements AXPPageComponentProvider {\n async components(): Promise<AXPPageComponentDefinition[]> {\n return [\n {\n key: AXM_INTEGRATION_REF_PAGE_COMPONENT_KEY,\n loader: () =>\n import('./integration-ref-page.component').then((m) => m.AXMIntegrationRefPageComponent),\n },\n ];\n }\n}\n\n//#endregion\n","//#region ----- Imports -----\n\nimport { AXPWidgetDefinitionProvider } from '@acorex-platform/framework-client/layout/widget-core';\nimport { Injectable } from '@angular/core';\n\nimport { AXMIntegrationRefFilterWidget } from './integration-ref-filter.widget.config';\nimport { AXMIntegrationRefWidget } from './integration-ref.widget.config';\n\n//#endregion\n\n//#region ----- Provider -----\n\n@Injectable()\nexport class AXMIntegrationRefWidgetProvider implements AXPWidgetDefinitionProvider {\n getWidgets() {\n return [AXMIntegrationRefWidget, AXMIntegrationRefFilterWidget];\n }\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXP_PERMISSION_DEFINITION_PROVIDER } from '@acorex-platform/framework-client/auth';\nimport {\n AXP_MENU_PROVIDER,\n AXP_SETTING_DEFINITION_PROVIDER,\n AXPIntegrationRuntimeService,\n AXP_INTEGRATION_DOMAIN_PROVIDER,\n} from '@acorex-platform/framework-client/common';\nimport { AXP_EXPRESSION_EVALUATOR_SCOPE_PROVIDER } from '@acorex-platform/framework-client/core';\nimport { AXP_PAGE_COMPONENT_PROVIDER } from '@acorex-platform/framework-client/layout/components';\nimport { AXP_WIDGET_DEFINITION_PROVIDER } from '@acorex-platform/framework-client/layout/widget-core';\nimport { AXPRuntimeModule, provideCommandSetups, provideQuerySetups } from '@acorex-platform/framework-client/runtime';\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { ROUTES } from '@angular/router';\nimport {\n AXMIntegrationManagementCommandKeys,\n AXMIntegrationManagementQueryKeys,\n} from '@acorex-platform/module-integration-management-client/contracts';\n\nimport { AXMIntegrationManagementMenuProvider } from './menu.provider';\nimport { AXMIntegrationManagementPermissionDefinitionProvider } from './permission-definition.provider';\nimport { AXMIntegrationManagementSettingProvider } from './settings.provider';\nimport { AXMIntegrationLegacyDomainProvider } from './features/domains/integration-legacy-domain.provider';\nimport { AXMIntegrationRuntimeServiceImpl } from './features/shared/integration-runtime.service.impl';\nimport { AXMIntegrationEvaluatorScopeProvider } from './features/shared/integration-evaluator-scope.provider';\nimport { integrationManagementRoutesFactory } from './features/integrations-page/integrations-page.routes';\nimport { integrationOAuthCallbackRoutes } from './features/oauth-callback/integration-oauth-callback.routes';\nimport { AXMIntegrationRefPluginModule } from './features/plugins/integration-ref/integration-ref-plugin.module';\nimport { AXMIntegrationRefPageComponentProvider } from './features/widgets/integration-ref/integration-ref-page-component.provider';\nimport { AXMIntegrationRefWidgetProvider } from './features/widgets/integration-ref/integration-ref-widget.provider';\n\n//#endregion\n\n//#region ---- Module ----\n\n@NgModule({\n imports: [CommonModule, AXPRuntimeModule, AXMIntegrationRefPluginModule],\n providers: [\n {\n provide: ROUTES,\n multi: true,\n useFactory: () => [...integrationManagementRoutesFactory(), ...integrationOAuthCallbackRoutes],\n },\n {\n provide: AXP_PERMISSION_DEFINITION_PROVIDER,\n useClass: AXMIntegrationManagementPermissionDefinitionProvider,\n multi: true,\n },\n \n {\n provide: AXP_MENU_PROVIDER,\n useClass: AXMIntegrationManagementMenuProvider,\n multi: true,\n },\n {\n provide: AXP_SETTING_DEFINITION_PROVIDER,\n useClass: AXMIntegrationManagementSettingProvider,\n multi: true,\n },\n {\n provide: AXP_INTEGRATION_DOMAIN_PROVIDER,\n useClass: AXMIntegrationLegacyDomainProvider,\n multi: true,\n },\n {\n provide: AXPIntegrationRuntimeService,\n useClass: AXMIntegrationRuntimeServiceImpl,\n },\n {\n provide: AXP_EXPRESSION_EVALUATOR_SCOPE_PROVIDER,\n useClass: AXMIntegrationEvaluatorScopeProvider,\n multi: true,\n },\n {\n provide: AXP_WIDGET_DEFINITION_PROVIDER,\n useClass: AXMIntegrationRefWidgetProvider,\n multi: true,\n },\n {\n provide: AXP_PAGE_COMPONENT_PROVIDER,\n useClass: AXMIntegrationRefPageComponentProvider,\n multi: true,\n },\n provideCommandSetups([\n {\n key: AXMIntegrationManagementCommandKeys.ConnectionConnectWithCredentials,\n command: () =>\n import('./features/commands/connect-with-credentials.command').then((c) => c.ConnectWithCredentialsCommand),\n },\n {\n key: AXMIntegrationManagementCommandKeys.ConnectionDisconnect,\n command: () =>\n import('./features/commands/disconnect-connection.command').then((c) => c.DisconnectConnectionCommand),\n },\n {\n key: AXMIntegrationManagementCommandKeys.ConnectionDelete,\n command: () =>\n import('./features/commands/delete-connection.command').then((c) => c.DeleteConnectionCommand),\n },\n {\n key: AXMIntegrationManagementCommandKeys.ConnectionUpdate,\n command: () =>\n import('./features/commands/update-connection.command').then((c) => c.UpdateConnectionCommand),\n },\n {\n key: AXMIntegrationManagementCommandKeys.ConnectionValidate,\n command: () =>\n import('./features/commands/validate-connection.command').then((c) => c.ValidateConnectionCommand),\n },\n ]),\n provideQuerySetups([\n {\n key: AXMIntegrationManagementQueryKeys.DomainList,\n loader: () => import('./features/queries/list-domains.query').then((c) => c.ListDomainsQuery),\n },\n {\n key: AXMIntegrationManagementQueryKeys.ProviderList,\n loader: () => import('./features/queries/list-providers.query').then((c) => c.ListProvidersQuery),\n },\n {\n key: AXMIntegrationManagementQueryKeys.ProviderGet,\n loader: () => import('./features/queries/get-provider.query').then((c) => c.GetProviderQuery),\n },\n {\n key: AXMIntegrationManagementQueryKeys.ConnectionListMine,\n loader: () => import('./features/queries/list-my-connections.query').then((c) => c.ListMyConnectionsQuery),\n },\n ]),\n ],\n})\nexport class AXMIntegrationManagementModule {}\n\n//#endregion\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["I18N"],"mappings":"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"}
1
+ {"version":3,"file":"acorex-platform-module-integration-management-client.mjs","sources":["../../../../libs/modules/integration-management/client/src/lib/features/connect/connect.command.types.ts","../../../../libs/modules/integration-management/client/src/lib/features/shared/integration-connection.manager.ts","../../../../libs/modules/integration-management/client/src/lib/menu.provider.ts","../../../../libs/modules/integration-management/client/src/lib/permission-definition.provider.ts","../../../../libs/modules/integration-management/client/src/lib/settings.provider.ts","../../../../libs/modules/integration-management/client/src/lib/features/domains/integration-legacy-domain.provider.ts","../../../../libs/modules/integration-management/client/src/lib/features/shared/integration-runtime.service.impl.ts","../../../../libs/modules/integration-management/client/src/lib/features/shared/integration-connection-status.util.ts","../../../../libs/modules/integration-management/client/src/lib/features/shared/integration-evaluator-scope.provider.ts","../../../../libs/modules/integration-management/client/src/lib/features/integrations-page/integrations-page.routes.ts","../../../../libs/modules/integration-management/client/src/lib/features/oauth-callback/integration-oauth-callback.routes.ts","../../../../libs/modules/integration-management/client/src/lib/features/widgets/integration-ref/integration-ref-page.constants.ts","../../../../libs/modules/integration-management/client/src/lib/features/widgets/integration-ref/integration-ref-filter.widget.config.ts","../../../../libs/modules/integration-management/client/src/lib/features/widgets/integration-ref/integration-ref.widget.config.ts","../../../../libs/modules/integration-management/client/src/lib/features/plugins/integration-ref/integration-ref.apply.ts","../../../../libs/modules/integration-management/client/src/lib/features/plugins/integration-ref/integration-ref.fallback-modifier.ts","../../../../libs/modules/integration-management/client/src/lib/features/plugins/integration-ref/integration-ref.plugin.ts","../../../../libs/modules/integration-management/client/src/lib/features/plugins/integration-ref/integration-ref-plugin.module.ts","../../../../libs/modules/integration-management/client/src/lib/features/widgets/integration-ref/integration-ref-page-component.provider.ts","../../../../libs/modules/integration-management/client/src/lib/features/widgets/integration-ref/integration-ref-widget.provider.ts","../../../../libs/modules/integration-management/client/src/lib/integration-management.module.ts","../../../../libs/modules/integration-management/client/src/lib/settings/user-connections-section.ts","../../../../libs/modules/integration-management/client/src/acorex-platform-module-integration-management-client.ts"],"sourcesContent":["import type { AXPIntegrationAuthMethodType, AXPIntegrationConnectionScope, AXPSafeIntegrationConnectionDto } from '@acorex-platform/framework-shared/core';\n\n//#region ---- Connect command types ----\n\nexport interface ConnectCommandInput {\n providerId: string;\n connectionScope?: AXPIntegrationConnectionScope;\n /** When set, skips auth-method picker and uses this method directly. */\n authMethodType?: AXPIntegrationAuthMethodType;\n}\n\nexport type ConnectCommandResult =\n | { outcome: 'cancelled' }\n | { outcome: 'connected'; connection: AXPSafeIntegrationConnectionDto }\n | { outcome: 'redirect'; redirectUrl: string };\n\n//#endregion\n","import {\n AXP_INTEGRATION_CONNECTION_SCOPE,\n AXP_INTEGRATION_CONNECTION_STATUS,\n type AXPSafeIntegrationConnectionDto,\n} from '@acorex-platform/framework-shared/core';\nimport { AXPSessionService } from '@acorex-platform/framework-client/auth';\nimport { AXPEntityService } from '@acorex-platform/framework-client/layout/entity';\nimport { Injectable, inject } from '@angular/core';\nimport { defaultTo, isEmpty, trim } from 'lodash';\nimport { RootConfig } from '@acorex-platform/module-integration-management-client/contracts';\nimport type { AXMIntegrationManagementIntegrationConnectionEntityModel } from '@acorex-platform/module-integration-management-client/contracts';\n\n//#region ---- Credential helpers ----\n\nexport const AXP_INTEGRATION_CREDENTIAL_MASK = '••••••••';\n\n/** User owner stored on `config` because create stamps `scopeInfo` without `userId`. */\nconst CONNECTION_OWNER_USER_ID_FIELD = 'config.ownerUserId';\n\nfunction connectionOwnerUserId(\n connection: AXMIntegrationManagementIntegrationConnectionEntityModel,\n): string {\n const config = (connection.config ?? {}) as { ownerUserId?: string };\n return trim(defaultTo(config.ownerUserId, connection.scopeInfo?.userId));\n}\n\nfunction hasConfigCredential(config: Record<string, unknown>): boolean {\n return (\n !isEmpty(trim(String(config['apiKey'] ?? ''))) ||\n !isEmpty(trim(String(config['accessToken'] ?? ''))) ||\n !isEmpty(trim(String(config['refreshToken'] ?? ''))) ||\n !isEmpty(trim(String(config['clientSecret'] ?? ''))) ||\n !isEmpty(trim(String(config['botToken'] ?? ''))) ||\n !isEmpty(trim(String(config['token'] ?? '')))\n );\n}\n\nexport function isMaskedIntegrationCredential(value: string | null | undefined): boolean {\n const normalized = trim(value ?? '');\n return !normalized || normalized === AXP_INTEGRATION_CREDENTIAL_MASK;\n}\n\n/** Clears runtime OAuth/token fields while keeping reconnect-friendly client settings. */\nexport function scrubDisconnectedConnectionConfig(\n config: Record<string, unknown> | null | undefined,\n): Record<string, unknown> | null {\n if (!config) {\n return null;\n }\n\n const next = { ...config };\n delete next['accessToken'];\n delete next['refreshToken'];\n delete next['tokenExpiresAt'];\n delete next['oauthTokenJson'];\n delete next['authorizationUrl'];\n delete next['token'];\n delete next['password'];\n delete next['apiToken'];\n delete next['apiKey'];\n delete next['botToken'];\n return next;\n}\n\nexport function hasConfiguredIntegrationCredentials(\n connection: AXMIntegrationManagementIntegrationConnectionEntityModel | null | undefined,\n): boolean {\n if (!connection || connection.status !== AXP_INTEGRATION_CONNECTION_STATUS.Connected) {\n return false;\n }\n if (connection.isRevoked || connection.isDisabled) {\n return false;\n }\n if (!isEmpty(trim(defaultTo(connection.secretRef, '')))) {\n return true;\n }\n const config = (connection.config ?? {}) as Record<string, unknown>;\n return hasConfigCredential(config);\n}\n\n//#endregion\n\n//#region ---- Safe mapper ----\n\nexport function toSafeIntegrationConnectionDto(\n connection: AXMIntegrationManagementIntegrationConnectionEntityModel,\n): AXPSafeIntegrationConnectionDto {\n const secretRef = defaultTo(connection.secretRef, '');\n const config = (connection.config ?? {}) as Record<string, unknown>;\n const hasConfigSecret = hasConfigCredential(config);\n const hasSecret = !isEmpty(trim(secretRef)) || hasConfigSecret;\n\n return {\n id: connection.id,\n providerId: connection.providerId,\n connectionScope: connection.connectionScope,\n connectionKey: connection.connectionKey,\n displayName: connection.displayName,\n authMethodType: connection.authMethodType,\n status: connection.status,\n instanceUrl: connection.instanceUrl,\n externalAccountId: connection.externalAccountId,\n externalAccountName: connection.externalAccountName,\n grantedScopes: connection.grantedScopes,\n expiresAt: connection.expiresAt,\n lastConnectedAt: connection.lastConnectedAt,\n lastValidatedAt: connection.lastValidatedAt,\n lastSyncAt: connection.lastSyncAt,\n lastErrorCode: connection.lastErrorCode,\n lastErrorMessage: connection.lastErrorMessage,\n isRevoked: connection.isRevoked,\n isDisabled: connection.isDisabled,\n config: connection.config,\n hasSecret,\n secretPreview: hasSecret ? '••••••••' : null,\n };\n}\n\n//#endregion\n\n//#region ---- Connection manager ----\n\n@Injectable({ providedIn: 'root' })\nexport class AXMIntegrationConnectionManager {\n //#region ---- Services & Dependencies ----\n\n private readonly entityService = inject(AXPEntityService);\n private readonly sessionService = inject(AXPSessionService);\n\n //#endregion\n\n //#region ---- Accessors ----\n\n private connectionAccessor() {\n return this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.integrationConnection.name)\n .data<string, AXMIntegrationManagementIntegrationConnectionEntityModel>();\n }\n\n getSessionContext(): { tenantId: string; applicationId: string; userId: string } {\n const tenantId = this.sessionService.tenant?.id;\n const applicationId = this.sessionService.application?.id;\n const userId = this.sessionService.user?.id;\n if (!tenantId || !applicationId || !userId) {\n throw new Error(\n 'Integration operations require an authenticated user, tenant, and application context.',\n );\n }\n return { tenantId, applicationId, userId };\n }\n\n private ownershipFilters(\n tenantId: string,\n applicationId: string,\n userId?: string,\n ): Array<Record<string, unknown>> {\n const filters: Array<Record<string, unknown>> = [\n { field: 'scopeInfo.tenantId', operator: { type: 'equal' }, value: tenantId },\n { field: 'scopeInfo.applicationId', operator: { type: 'equal' }, value: applicationId },\n ];\n if (userId) {\n filters.push({ field: CONNECTION_OWNER_USER_ID_FIELD, operator: { type: 'equal' }, value: userId });\n }\n return filters;\n }\n\n private buildOwnershipInfo(\n tenantId: string,\n applicationId: string,\n connectionScope: 'user' | 'tenant',\n userId: string,\n ) {\n return {\n tenantId,\n applicationId,\n ...(connectionScope === AXP_INTEGRATION_CONNECTION_SCOPE.User ? { userId } : {}),\n };\n }\n\n //#endregion\n\n //#region ---- Queries ----\n\n async listForCurrentUser(\n connectionScope?: 'user' | 'tenant',\n ): Promise<AXMIntegrationManagementIntegrationConnectionEntityModel[]> {\n const { tenantId, applicationId, userId } = this.getSessionContext();\n const result = await this.connectionAccessor().query({\n skip: 0,\n take: 1000,\n filter: {\n logic: 'and',\n filters: [\n ...this.ownershipFilters(tenantId, applicationId),\n ...(connectionScope\n ? [{ field: 'connectionScope', operator: { type: 'equal' as const }, value: connectionScope }]\n : []),\n {\n logic: 'or',\n filters: [\n {\n field: 'connectionScope',\n operator: { type: 'equal' },\n value: AXP_INTEGRATION_CONNECTION_SCOPE.Tenant,\n },\n {\n logic: 'and',\n filters: [\n {\n field: 'connectionScope',\n operator: { type: 'equal' },\n value: AXP_INTEGRATION_CONNECTION_SCOPE.User,\n },\n { field: CONNECTION_OWNER_USER_ID_FIELD, operator: { type: 'equal' }, value: userId },\n ],\n },\n ],\n },\n ],\n },\n });\n\n return (result.items ?? []).filter((item) => {\n if (item.connectionScope === AXP_INTEGRATION_CONNECTION_SCOPE.Tenant) {\n return true;\n }\n return connectionOwnerUserId(item) === userId;\n });\n }\n\n async findByUniqueKey(input: {\n providerId: string;\n connectionScope: 'user' | 'tenant';\n connectionKey: string;\n userId?: string;\n tenantId?: string;\n applicationId?: string;\n }): Promise<AXMIntegrationManagementIntegrationConnectionEntityModel | null> {\n const ctx = this.getSessionContext();\n const tenantId = input.tenantId ?? ctx.tenantId;\n const applicationId = input.applicationId ?? ctx.applicationId;\n const userId = input.userId ?? ctx.userId;\n\n const filters: Array<Record<string, unknown>> = [\n ...this.ownershipFilters(\n tenantId,\n applicationId,\n input.connectionScope === AXP_INTEGRATION_CONNECTION_SCOPE.User ? userId : undefined,\n ),\n { field: 'providerId', operator: { type: 'equal' }, value: input.providerId },\n { field: 'connectionScope', operator: { type: 'equal' }, value: input.connectionScope },\n { field: 'connectionKey', operator: { type: 'equal' }, value: input.connectionKey },\n ];\n\n const result = await this.connectionAccessor().query({\n skip: 0,\n take: 1,\n filter: { logic: 'and', filters },\n });\n\n return result.items?.[0] ?? null;\n }\n\n async getByIdForCurrentUser(\n connectionId: string,\n ): Promise<AXMIntegrationManagementIntegrationConnectionEntityModel | null> {\n const connection = await this.connectionAccessor().byKey(connectionId);\n if (!connection) {\n return null;\n }\n return this.assertOwnership(connection) ? connection : null;\n }\n\n //#endregion\n\n //#region ---- Mutations ----\n\n async upsertConnection(\n data: Partial<AXMIntegrationManagementIntegrationConnectionEntityModel> & {\n providerId: string;\n connectionScope: 'user' | 'tenant';\n connectionKey: string;\n displayName: string;\n authMethodType: AXMIntegrationManagementIntegrationConnectionEntityModel['authMethodType'];\n },\n ): Promise<AXMIntegrationManagementIntegrationConnectionEntityModel> {\n const { tenantId, applicationId, userId } = this.getSessionContext();\n const existing = await this.findByUniqueKey({\n providerId: data.providerId,\n connectionScope: data.connectionScope,\n connectionKey: data.connectionKey,\n tenantId,\n applicationId,\n userId: data.connectionScope === AXP_INTEGRATION_CONNECTION_SCOPE.User ? userId : undefined,\n });\n\n const scopeInfo = this.buildOwnershipInfo(\n tenantId,\n applicationId,\n data.connectionScope,\n userId,\n );\n const config =\n data.connectionScope === AXP_INTEGRATION_CONNECTION_SCOPE.User\n ? { ...(data.config ?? {}), ownerUserId: userId }\n : (data.config ?? null);\n\n const payload: Partial<AXMIntegrationManagementIntegrationConnectionEntityModel> = {\n ...data,\n config,\n scopeInfo,\n isRevoked: defaultTo(data.isRevoked, false),\n isDisabled: defaultTo(data.isDisabled, false),\n status: data.status ?? AXP_INTEGRATION_CONNECTION_STATUS.Connected,\n lastConnectedAt: data.lastConnectedAt ?? new Date().toISOString(),\n };\n\n if (existing) {\n await this.connectionAccessor().update(existing.id, payload);\n const updated = await this.connectionAccessor().byKey(existing.id);\n if (!updated) {\n throw new Error('Connection not found after update.');\n }\n return updated;\n }\n\n const createPayload: Omit<AXMIntegrationManagementIntegrationConnectionEntityModel, 'id'> = {\n providerId: data.providerId,\n connectionScope: data.connectionScope,\n connectionKey: data.connectionKey,\n displayName: data.displayName,\n authMethodType: data.authMethodType,\n scopeInfo,\n isRevoked: defaultTo(data.isRevoked, false),\n isDisabled: defaultTo(data.isDisabled, false),\n status: data.status ?? AXP_INTEGRATION_CONNECTION_STATUS.Connected,\n lastConnectedAt: data.lastConnectedAt ?? new Date().toISOString(),\n instanceUrl: data.instanceUrl ?? null,\n externalAccountId: data.externalAccountId ?? null,\n externalAccountName: data.externalAccountName ?? null,\n grantedScopes: data.grantedScopes ?? null,\n secretRef: data.secretRef ?? null,\n expiresAt: data.expiresAt ?? null,\n lastValidatedAt: data.lastValidatedAt ?? null,\n lastSyncAt: data.lastSyncAt ?? null,\n lastErrorCode: data.lastErrorCode ?? null,\n lastErrorMessage: data.lastErrorMessage ?? null,\n config,\n };\n\n const id = await this.connectionAccessor().create(createPayload);\n const created = await this.connectionAccessor().byKey(id);\n if (!created) {\n throw new Error('Connection not found after create.');\n }\n return created;\n }\n\n async updateConnection(\n connectionId: string,\n patch: Partial<AXMIntegrationManagementIntegrationConnectionEntityModel>,\n ): Promise<AXMIntegrationManagementIntegrationConnectionEntityModel> {\n const existing = await this.getByIdForCurrentUser(connectionId);\n if (!existing) {\n throw new Error('Connection not found or access denied.');\n }\n await this.connectionAccessor().update(connectionId, patch);\n const updated = await this.connectionAccessor().byKey(connectionId);\n if (!updated) {\n throw new Error('Connection not found after update.');\n }\n return updated;\n }\n\n async deleteConnection(connectionId: string): Promise<void> {\n const existing = await this.getByIdForCurrentUser(connectionId);\n if (!existing) {\n throw new Error('Connection not found or access denied.');\n }\n await this.connectionAccessor().delete(connectionId);\n }\n\n //#endregion\n\n //#region ---- Authorization ----\n\n assertOwnership(connection: AXMIntegrationManagementIntegrationConnectionEntityModel): boolean {\n const { tenantId, applicationId, userId } = this.getSessionContext();\n if (connection.scopeInfo?.tenantId !== tenantId) {\n return false;\n }\n if (connection.scopeInfo?.applicationId !== applicationId) {\n return false;\n }\n if (connection.connectionScope === AXP_INTEGRATION_CONNECTION_SCOPE.Tenant) {\n return true;\n }\n return connectionOwnerUserId(connection) === userId;\n }\n\n //#endregion\n}\n\n//#endregion\n","//#region ----- Imports -----\n\nimport { AXPSessionService } from '@acorex-platform/framework-client/auth';\nimport { AXPMenuProvider, AXPMenuProviderContext } from '@acorex-platform/framework-client/common';\nimport { AXPCommonMenuKeys } from '@acorex-platform/module-common-client/contracts';\nimport { inject } from '@angular/core';\nimport { firstValueFrom } from 'rxjs';\nimport {\n AXMIntegrationManagementMenuKeys,\n AXPAdministrationPermissionKeys,\n RootConfig,\n} from '@acorex-platform/module-integration-management-client/contracts';\n\n//#endregion\n\n//#region ----- Menu Provider -----\n\nexport class AXMIntegrationManagementMenuProvider implements AXPMenuProvider {\n private readonly sessionService = inject(AXPSessionService);\n\n async provide(context: AXPMenuProviderContext): Promise<void> {\n const isAuthorized = await firstValueFrom(this.sessionService.isAuthorized$);\n if (!isAuthorized) {\n return;\n }\n\n const appName = this.sessionService.application?.name;\n\n context.find(AXPCommonMenuKeys.Administration).addItems([\n {\n name: AXMIntegrationManagementMenuKeys.Integrations,\n priority: 1000,\n text: '@integration-management:pages.integrations.title',\n type: 'menu',\n icon: 'fa-light fa-plug',\n path: `/${appName}/admin/integrations`,\n policy: {\n features: [RootConfig.module.name],\n permissions: [AXPAdministrationPermissionKeys.MaintainConnections],\n },\n },\n ]);\n }\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport {\n AXPPermissionDefinitionProvider,\n AXPPermissionDefinitionProviderContext,\n} from '@acorex-platform/framework-client/auth';\nimport { AXPCommonPermissionGroupKeys } from '@acorex-platform/module-common-client/contracts';\nimport { AXPAdministrationPermissionKeys } from '@acorex-platform/module-integration-management-client/contracts';\nimport { Injectable } from '@angular/core';\n\n//#endregion\n\n//#region ---- Permission Definition Provider ----\n\n/**\n * Registers Integrations section capabilities under Administration.\n */\n@Injectable()\nexport class AXMIntegrationManagementPermissionDefinitionProvider implements AXPPermissionDefinitionProvider {\n async define(context: AXPPermissionDefinitionProviderContext): Promise<void> {\n const keys = AXPAdministrationPermissionKeys;\n const groups = AXPCommonPermissionGroupKeys;\n const P = '@common:administration.permissions';\n const G = '@common:permission-groups';\n\n context.addGroup(groups.Administration.Root, `${G}.administration.title`, `${G}.administration.description`, { order: 120 });\n\n context\n .addGroup(\n groups.Administration.Integrations,\n `${G}.administration-integrations.title`,\n `${G}.administration-integrations.description`,\n { parent: groups.Administration.Root, order: 20 },\n )\n .addPermission(keys.ViewIntegrations, `${P}.view-integrations.title`, `${P}.view-integrations.description`)\n .endPermission()\n .addPermission(\n keys.MaintainConnections,\n `${P}.maintain-connections.title`,\n `${P}.maintain-connections.description`,\n )\n .endPermission()\n .addPermission(\n keys.ManageIntegrationActions,\n `${P}.manage-integration-actions.title`,\n `${P}.manage-integration-actions.description`,\n )\n .endPermission()\n .endGroup();\n }\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport {\n AXPSettingDefinitionProvider,\n AXPSettingDefinitionProviderContext,\n} from '@acorex-platform/framework-client/common';\nimport { RootConfig } from '@acorex-platform/module-integration-management-client/contracts';\n\n//#endregion\n\n//#region ---- Settings Provider ----\n\nconst I18N = '@integration-management:settings';\n\nexport class AXMIntegrationManagementSettingProvider implements AXPSettingDefinitionProvider {\n async provide(context: AXPSettingDefinitionProviderContext): Promise<void> {\n if (context.hasGroup('integrations')) {\n return;\n }\n\n context\n .addGroup(\n 'integrations',\n `${I18N}.group.nav-title`,\n `${I18N}.group.description`,\n 'fa-light fa-plug',\n `${I18N}.group.title`,\n 45,\n )\n .endGroup();\n }\n}\n\n//#endregion\n","import { AXP_INTEGRATION_CATEGORY } from '@acorex-platform/framework-shared/core';\nimport {\n type AXPIntegrationDomainProvider,\n AXPIntegrationDomainProviderContext,\n} from '@acorex-platform/framework-client/common';\nimport { Injectable } from '@angular/core';\nimport { RootConfig } from '@acorex-platform/module-integration-management-client/contracts';\n\nconst I18N = '@integration-management:settings.domains.other';\n\n/** Fallback domain for connectors not yet assigned to a first-class integration domain. */\n@Injectable()\nexport class AXMIntegrationLegacyDomainProvider implements AXPIntegrationDomainProvider {\n async provide(context: AXPIntegrationDomainProviderContext): Promise<void> {\n context.register({\n id: 'other',\n module: RootConfig.module.name,\n displayName: `${I18N}.title`,\n description: `${I18N}.description`,\n icon: 'fa-light fa-plug',\n category: AXP_INTEGRATION_CATEGORY.Other,\n capabilities: [],\n sortOrder: 999,\n });\n }\n}\n","import { AXP_INTEGRATION_CONNECTION_STATUS, AXPIntegrationExpiredError, AXPIntegrationMissingScopeError, AXPIntegrationNotConnectedError, type AXPIntegrationProviderDefinition, type AXPIntegrationRuntimeContext, type AXPSafeIntegrationConnectionDto } from '@acorex-platform/framework-shared/core';\nimport {\n AXP_INTEGRATION_RUNTIME_PROVIDER,\n AXP_INTEGRATION_SECRET_STORE,\n AXPIntegrationProviderRegistryService,\n AXPIntegrationRuntimeService,\n type AXPIntegrationWithClientOptions,\n} from '@acorex-platform/framework-client/common';\nimport { Injectable, inject } from '@angular/core';\nimport { defaultTo, isEmpty } from 'lodash';\nimport { AXMIntegrationConnectionManager, toSafeIntegrationConnectionDto } from './integration-connection.manager';\n\n//#region ---- Runtime service implementation ----\n\n@Injectable({ providedIn: 'root' })\nexport class AXMIntegrationRuntimeServiceImpl extends AXPIntegrationRuntimeService {\n private readonly registry = inject(AXPIntegrationProviderRegistryService);\n private readonly connectionManager = inject(AXMIntegrationConnectionManager);\n private readonly secretStore = inject(AXP_INTEGRATION_SECRET_STORE, { optional: true });\n private readonly runtimeProviders = inject(AXP_INTEGRATION_RUNTIME_PROVIDER, { optional: true });\n\n async getProvider(id: string): Promise<AXPIntegrationProviderDefinition> {\n return this.registry.getOrThrow(id);\n }\n\n async listProviders(): Promise<AXPIntegrationProviderDefinition[]> {\n return this.registry.list();\n }\n\n async getConnection(options: AXPIntegrationWithClientOptions): Promise<AXPSafeIntegrationConnectionDto> {\n const connection = await this.resolveConnection(options);\n return toSafeIntegrationConnectionDto(connection);\n }\n\n async withClient<T>(\n options: AXPIntegrationWithClientOptions,\n fn: (client: unknown, ctx: AXPIntegrationRuntimeContext) => Promise<T>,\n ): Promise<T> {\n const connection = await this.resolveConnection(options);\n if (!connection.secretRef) {\n throw new AXPIntegrationNotConnectedError(options.providerId);\n }\n\n const ctx = await this.buildRuntimeContext({\n ...toSafeIntegrationConnectionDto(connection),\n secretRef: connection.secretRef,\n });\n\n const hooks = await this.resolveRuntimeHooks(options.providerId);\n if (!hooks?.createClient) {\n throw new Error(`Integration provider '${options.providerId}' does not expose a runtime client.`);\n }\n\n const client = await hooks.createClient(ctx);\n return fn(client, ctx);\n }\n\n async buildRuntimeContext(\n connection: AXPSafeIntegrationConnectionDto & { secretRef: string },\n ): Promise<AXPIntegrationRuntimeContext> {\n const { tenantId, applicationId, userId } = this.connectionManager.getSessionContext();\n return {\n tenantId,\n applicationId,\n userId,\n connectionId: connection.id,\n providerId: connection.providerId,\n connectionScope: connection.connectionScope,\n connectionKey: connection.connectionKey,\n authMethodType: connection.authMethodType,\n instanceUrl: connection.instanceUrl,\n config: connection.config,\n secretRef: connection.secretRef,\n };\n }\n\n private async resolveConnection(options: AXPIntegrationWithClientOptions) {\n const provider = await this.registry.getOrThrow(options.providerId);\n const connectionScope = options.connectionScope ?? 'user';\n const connectionKey = defaultTo(options.connectionKey, provider.defaultConnectionKey ?? 'default');\n\n if (options.requiredCapabilities?.length) {\n const missing = options.requiredCapabilities.filter((c) => !provider.capabilities.includes(c as never));\n if (missing.length) {\n throw new Error(`Provider '${provider.id}' is missing capabilities: ${missing.join(', ')}`);\n }\n }\n\n const connection = await this.connectionManager.findByUniqueKey({\n providerId: options.providerId,\n connectionScope,\n connectionKey,\n });\n\n if (!connection || connection.status !== AXP_INTEGRATION_CONNECTION_STATUS.Connected) {\n throw new AXPIntegrationNotConnectedError(options.providerId);\n }\n\n if (connection.expiresAt && new Date(connection.expiresAt).getTime() < Date.now()) {\n throw new AXPIntegrationExpiredError(options.providerId, connection.id);\n }\n\n if (options.requiredScopes?.length && connection.grantedScopes) {\n const missingScopes = options.requiredScopes.filter((s) => !connection.grantedScopes!.includes(s));\n if (!isEmpty(missingScopes)) {\n throw new AXPIntegrationMissingScopeError(options.providerId, missingScopes);\n }\n }\n\n return connection;\n }\n\n private async resolveRuntimeHooks(providerId: string) {\n const providers = this.runtimeProviders ?? [];\n for (const provider of providers) {\n const resolved = provider instanceof Promise ? await provider : provider;\n if (resolved.providerId === providerId) {\n return resolved.getHooks();\n }\n }\n return null;\n }\n}\n\n//#endregion\n","import {\n AXP_INTEGRATION_CONNECTION_STATUS,\n} from '@acorex-platform/framework-shared/core';\nimport type { AXMIntegrationManagementIntegrationConnectionEntityModel } from '@acorex-platform/module-integration-management-client/contracts';\n\n//#region ---- Integration connection status ----\n\n/** Matches integration-connections-panel `isProviderConnected` semantics. */\nexport function isActiveIntegrationConnection(\n connection: AXMIntegrationManagementIntegrationConnectionEntityModel | null | undefined,\n): boolean {\n if (!connection) {\n return false;\n }\n\n return (\n connection.status === AXP_INTEGRATION_CONNECTION_STATUS.Connected &&\n !connection.isRevoked &&\n !connection.isDisabled\n );\n}\n\n//#endregion\n","import { AXPExpressionEvaluatorScopeProvider, AXPExpressionEvaluatorScopeProviderContext } from '@acorex-platform/framework-shared/core';\nimport { Injectable, inject } from '@angular/core';\nimport { defaultTo } from 'lodash';\nimport {\n AXP_INTEGRATION_CONNECTION_SCOPE,\n} from '@acorex-platform/framework-shared/core';\nimport { AXMIntegrationConnectionManager } from './integration-connection.manager';\nimport { isActiveIntegrationConnection } from './integration-connection-status.util';\n\n//#region ---- Integration expression scope ----\n\n/**\n * Exposes integration connection checks in expression strings, e.g.\n * `{{ integration.isUserConnected('telegram') }}`.\n */\n@Injectable()\nexport class AXMIntegrationEvaluatorScopeProvider implements AXPExpressionEvaluatorScopeProvider {\n private readonly connectionManager = inject(AXMIntegrationConnectionManager);\n\n async provide(context: AXPExpressionEvaluatorScopeProviderContext): Promise<void> {\n context.addScope('integration', {\n isUserConnected: (providerId: string, connectionKey?: string) =>\n this.isConnected(providerId, AXP_INTEGRATION_CONNECTION_SCOPE.User, connectionKey),\n isTenantConfigured: (providerId: string, connectionKey?: string) =>\n this.isConnected(providerId, AXP_INTEGRATION_CONNECTION_SCOPE.Tenant, connectionKey),\n });\n }\n\n private async isConnected(\n providerId: string,\n scope: typeof AXP_INTEGRATION_CONNECTION_SCOPE.User | typeof AXP_INTEGRATION_CONNECTION_SCOPE.Tenant,\n connectionKey?: string,\n ): Promise<boolean> {\n const normalizedProviderId = String(providerId ?? '').trim();\n if (!normalizedProviderId) {\n return false;\n }\n\n const connection = await this.connectionManager.findByUniqueKey({\n providerId: normalizedProviderId,\n connectionScope: scope,\n connectionKey: defaultTo(connectionKey, 'default'),\n });\n\n return isActiveIntegrationConnection(connection);\n }\n}\n\n//#endregion\n","//#region ----- Imports -----\n\nimport { AXP_PROTECTED_ROUTE_GUARDS } from '@acorex-platform/framework-client/common';\nimport { AXPRootLayoutComponent } from '@acorex-platform/framework-client/themes/default';\nimport { Routes } from '@angular/router';\n\n//#endregion\n\n//#region ----- Routes -----\n\nexport function integrationManagementRoutesFactory(): Routes {\n return [\n {\n path: ':app/admin/integrations',\n canActivate: [...AXP_PROTECTED_ROUTE_GUARDS],\n data: { tab: true, rootLayout: true },\n loadComponent: () => AXPRootLayoutComponent,\n children: [\n {\n path: '',\n loadComponent: () =>\n import('./integrations-page.component').then((c) => c.AXMIntegrationsPageComponent),\n data: { reuse: true },\n },\n ],\n },\n ];\n}\n\n//#endregion\n","import { Routes } from '@angular/router';\n\nexport const integrationOAuthCallbackRoutes: Routes = [\n // App-agnostic callback first — must win over `:appName/...` (else appName=\"integrations\").\n {\n path: 'integrations/oauth/callback/:providerId',\n loadComponent: () =>\n import('./integration-oauth-callback-page.component').then((c) => c.AXMIntegrationOAuthCallbackPageComponent),\n },\n // Legacy app-prefixed callback (older provider redirect URI configs).\n {\n path: ':appName/integrations/oauth/callback/:providerId',\n loadComponent: () =>\n import('./integration-oauth-callback-page.component').then((c) => c.AXMIntegrationOAuthCallbackPageComponent),\n },\n];\n","export const AXM_INTEGRATION_REF_PAGE_COMPONENT_KEY = 'integration-management.integration-ref-page';\n","//#region ----- Imports -----\n\nimport {\n AXP_DATA_PATH_PROPERTY,\n AXP_DISABLED_PROPERTY,\n AXP_NAME_PROPERTY,\n} from '@acorex-platform/framework-client/layout/widgets';\nimport { AXPWidgetConfig } from '@acorex-platform/framework-shared/widget-core';\n\n//#endregion\n\n//#region ----- Constants -----\n\nexport const AXM_INTEGRATION_REF_FILTER_WIDGET_NAME = 'integration-ref-filter';\n\n//#endregion\n\n//#region ----- Widget config -----\n\nexport const AXMIntegrationRefFilterWidget: AXPWidgetConfig = {\n name: AXM_INTEGRATION_REF_FILTER_WIDGET_NAME,\n title: '@integration-management:widgets.integration-ref.filter.title',\n description: 'Select-box filter for integrationRef.source provider ids.',\n type: 'filter',\n defaultFilterOperator: 'equal',\n icon: 'fa-light fa-plug',\n /**\n * `path` is required so AXPValueWidgetComponent treats this as a value widget\n * and setValue/getValue bind into the filter context (otherwise Apply writes empty).\n */\n properties: [AXP_NAME_PROPERTY, AXP_DATA_PATH_PROPERTY, AXP_DISABLED_PROPERTY],\n components: {\n edit: {\n component: () =>\n import('./integration-ref-filter-widget-edit.component').then(\n (c) => c.AXMIntegrationRefFilterWidgetEditComponent,\n ),\n },\n },\n};\n\n//#endregion\n","//#region ----- Imports -----\n\nimport { AXPWidgetConfig, AXPWidgetGroupEnum } from '@acorex-platform/framework-shared/widget-core';\n\nimport { AXM_INTEGRATION_REF_FILTER_WIDGET_NAME } from './integration-ref-filter.widget.config';\n\n//#endregion\n\n//#region ----- Constants -----\n\n/** Widget name used on entity `integrationRef` fields (`schema.interface.type`). */\nexport const AXM_INTEGRATION_REF_WIDGET_NAME = 'integration-ref';\n\n//#endregion\n\n//#region ----- Widget config -----\n\nexport const AXMIntegrationRefWidget: AXPWidgetConfig = {\n name: AXM_INTEGRATION_REF_WIDGET_NAME,\n title: '@integration-management:widgets.integration-ref.page.title',\n description: 'Shows the integration provider logo for records linked via integrationRef.',\n type: 'view',\n categories: [],\n groups: [AXPWidgetGroupEnum.EntityWidget],\n icon: 'fa-light fa-plug',\n defaultFilterWidgetName: AXM_INTEGRATION_REF_FILTER_WIDGET_NAME,\n properties: [],\n components: {\n column: {\n component: () =>\n import('./integration-ref-widget-column.component').then(\n (c) => c.AXMIntegrationRefWidgetColumnComponent,\n ),\n },\n view: {\n component: () =>\n import('./integration-ref-widget-view.component').then(\n (c) => c.AXMIntegrationRefWidgetViewComponent,\n ),\n },\n },\n};\n\n//#endregion\n","//#region ----- Imports -----\n\nimport type { AXPEntityModifierContext } from '@acorex-platform/framework-client/layout/entity';\n\nimport { AXM_INTEGRATION_REF_PAGE_COMPONENT_KEY } from '../../widgets/integration-ref/integration-ref-page.constants';\nimport { AXM_INTEGRATION_REF_FILTER_WIDGET_NAME } from '../../widgets/integration-ref/integration-ref-filter.widget.config';\nimport { AXM_INTEGRATION_REF_WIDGET_NAME } from '../../widgets/integration-ref/integration-ref.widget.config';\nimport type { AXMIntegrationRefPluginOptions } from './integration-ref.types';\n\n//#endregion\n\n//#region ----- Constants -----\n\nexport const AXM_INTEGRATION_REF_PLUGIN_NAME = 'integration-ref';\n\nconst DEFAULT_FIELD = 'integrationRef';\nconst DEFAULT_COLUMN_TITLE = '@integration-management:widgets.integration-ref.column-title';\nconst DEFAULT_PAGE_TITLE = '@integration-management:widgets.integration-ref.page.title';\nconst DEFAULT_PAGE_ORDER = 20;\nconst DEFAULT_COLUMN_WIDTH = '140px';\n\n//#endregion\n\n//#region ----- Helpers -----\n\n/** List columns that represent entity status (`status`, `statusId`, `projectStatusId`, …). */\nfunction isStatusColumnName(name: string): boolean {\n const normalized = name.trim().toLowerCase();\n return (\n normalized === 'status' ||\n normalized === 'statusid' ||\n normalized.endsWith('statusid') ||\n (normalized.endsWith('status') && !normalized.includes('http'))\n );\n}\n\n//#endregion\n\n//#region ----- Apply -----\n\n/**\n * Ensures Source list column + Integration Info tab for an entity that carries `integrationRef`.\n */\nexport function applyIntegrationRefEnhancements(\n ctx: AXPEntityModifierContext,\n options: AXMIntegrationRefPluginOptions = {},\n): void {\n const field = String(options.field ?? DEFAULT_FIELD).trim() || DEFAULT_FIELD;\n const columnTitle = options.title ?? DEFAULT_COLUMN_TITLE;\n const pageTitle = options.pageTitle ?? DEFAULT_PAGE_TITLE;\n const pageIcon = options.pageIcon ?? 'fa-light fa-plug';\n const pageOrder = options.pageOrder ?? DEFAULT_PAGE_ORDER;\n const columnWidth = options.columnWidth ?? DEFAULT_COLUMN_WIDTH;\n /** Default off; still choosable in the column picker. */\n const columnVisible = options.columnVisible === true;\n const showListColumn = options.showListColumn !== false;\n const showPage = options.showPage !== false;\n const groupId = options.groupId ?? 'basic-info';\n\n if (!ctx.properties.find(field).get()) {\n ctx.properties.add({\n name: field,\n title: columnTitle,\n groupId,\n schema: {\n dataType: 'object',\n visible: false,\n nullable: true,\n readonly: true,\n },\n } as any);\n }\n\n ctx.properties.find(field).update((prop) => ({\n ...prop,\n title: prop.title ?? columnTitle,\n options: {\n ...prop.options,\n filter: {\n ...(prop.options?.filter ?? {}),\n advance: {\n ...(prop.options?.filter?.advance ?? {}),\n enabled: true,\n widgetType: AXM_INTEGRATION_REF_FILTER_WIDGET_NAME,\n },\n inline: {\n ...(prop.options?.filter?.inline ?? {}),\n enabled: true,\n },\n },\n },\n schema: {\n ...prop.schema,\n dataType: prop.schema?.dataType ?? 'object',\n // Keep off the overview form; Integration Info page owns the UI.\n visible: false,\n nullable: prop.schema?.nullable ?? true,\n readonly: true,\n interface: {\n ...(prop.schema.interface ?? {}),\n type: AXM_INTEGRATION_REF_WIDGET_NAME,\n options: {\n ...(prop.schema.interface?.options ?? {}),\n textField: 'source',\n expose: [\n {\n source: 'source',\n target: `${field}.source`,\n },\n ],\n },\n },\n },\n }));\n\n if (showListColumn) {\n if (!ctx.columns.find(field).get()) {\n ctx.columns.add({\n name: field,\n title: columnTitle,\n options: { width: columnWidth, visible: columnVisible },\n });\n } else {\n ctx.columns.find(field).update((col) => ({\n ...col,\n title: col.title ?? columnTitle,\n options: {\n ...(col.options ?? {}),\n width: columnWidth,\n visible: columnVisible,\n },\n }));\n }\n\n const columns = ctx.columns.list();\n if (columns?.length) {\n const index = columns.findIndex((col) => col.name === field);\n if (index >= 0) {\n const [column] = columns.splice(index, 1);\n const statusIndex = columns.findIndex((col) => isStatusColumnName(String(col.name ?? '')));\n if (statusIndex >= 0) {\n columns.splice(statusIndex, 0, column);\n } else {\n columns.push(column);\n }\n }\n }\n }\n\n if (showPage) {\n ctx.entity.pages ??= [];\n const page = {\n componentKey: AXM_INTEGRATION_REF_PAGE_COMPONENT_KEY,\n title: pageTitle,\n icon: pageIcon,\n layout: { order: pageOrder, position: 'after' as const },\n /**\n * Update/edit form wizard only. Details view always includes entity.pages.\n * Do not set create — empty Integration Info as a create wizard step remounts the dialog.\n */\n appearOn: { update: true },\n };\n const existingIndex = ctx.entity.pages.findIndex(\n (entry) => entry.componentKey === AXM_INTEGRATION_REF_PAGE_COMPONENT_KEY,\n );\n if (existingIndex >= 0) {\n ctx.entity.pages[existingIndex] = page;\n } else {\n ctx.entity.pages.push(page);\n }\n }\n}\n\n//#endregion\n","//#region ----- Imports -----\n\nimport type { AXPEntityModifierProvider } from '@acorex-platform/framework-client/layout/entity';\n\nimport {\n applyIntegrationRefEnhancements,\n AXM_INTEGRATION_REF_PLUGIN_NAME,\n} from './integration-ref.apply';\n\n//#endregion\n\n//#region ----- Fallback modifier -----\n\n/**\n * Applies Source column + Integration Info when the entity already declares `integrationRef`\n * but the seeded layout has not yet listed the `integration-ref` plugin (stale definitions).\n * Skips when the action plugin is declared so options (`groupId`, …) win.\n */\nexport const AXMIntegrationRefFallbackModifier: AXPEntityModifierProvider = {\n entityName: '*',\n /** Just after the action plugin (80) so declared plugins win when both could apply. */\n order: 81,\n modifier: (ctx) => {\n const hasPlugin = (ctx.entity.plugins ?? []).some((entry) => entry.name === AXM_INTEGRATION_REF_PLUGIN_NAME);\n if (hasPlugin) {\n return;\n }\n if (!ctx.properties.find('integrationRef').get()) {\n return;\n }\n applyIntegrationRefEnhancements(ctx, {});\n },\n};\n\n//#endregion\n","//#region ----- Imports -----\n\nimport type { AXPEntityActionPlugin } from '@acorex-platform/framework-client/layout/entity';\n\nimport {\n applyIntegrationRefEnhancements,\n AXM_INTEGRATION_REF_PLUGIN_NAME,\n} from './integration-ref.apply';\nimport type { AXMIntegrationRefPluginOptions } from './integration-ref.types';\n\n//#endregion\n\n//#region ----- Plugin -----\n\n/**\n * Opt-in plugin for entities linked from integration connections.\n * - Ensures `integrationRef` property + Source list column (off by default, toggable)\n * - Places Source last before Status when present\n * - Adds readonly Integration Info tab on update/detail (not create)\n */\nexport const integrationRefPlugin: AXPEntityActionPlugin = {\n name: AXM_INTEGRATION_REF_PLUGIN_NAME,\n /** After status (70) / attachments (50) so Source can sit before Status. */\n order: 80,\n apply: (ctx, options: AXMIntegrationRefPluginOptions = {}) => {\n applyIntegrationRefEnhancements(ctx, options);\n },\n};\n\nexport { AXM_INTEGRATION_REF_PLUGIN_NAME };\n\n//#endregion\n","//#region ----- Imports -----\n\nimport {\n AXP_ENTITY_ACTION_PLUGIN,\n AXP_ENTITY_MODIFIER,\n configureEntityListColumnsSettingsMigrateDrop,\n configureEntityListColumnsSettingsVersion,\n} from '@acorex-platform/framework-client/layout/entity';\nimport { NgModule } from '@angular/core';\n\nimport { AXMIntegrationRefFallbackModifier } from './integration-ref.fallback-modifier';\nimport { integrationRefPlugin } from './integration-ref.plugin';\n\n//#endregion\n\n//#region ----- Boot configure (once) -----\n\n/**\n * Clear stale Source column prefs from when the column was first-pinned.\n * Framework migrate-drop registry stays empty until this module loads.\n */\nconfigureEntityListColumnsSettingsMigrateDrop(['integrationRef']);\nconfigureEntityListColumnsSettingsVersion(3);\n\n//#endregion\n\n//#region ----- Module -----\n\n@NgModule({\n providers: [\n {\n provide: AXP_ENTITY_ACTION_PLUGIN,\n multi: true,\n useValue: integrationRefPlugin,\n },\n {\n provide: AXP_ENTITY_MODIFIER,\n multi: true,\n useValue: AXMIntegrationRefFallbackModifier,\n },\n ],\n})\nexport class AXMIntegrationRefPluginModule {}\n\n//#endregion\n","//#region ----- Imports -----\n\nimport { AXPPageComponentDefinition, AXPPageComponentProvider } from '@acorex-platform/framework-client/layout/components';\nimport { Injectable } from '@angular/core';\n\nimport { AXM_INTEGRATION_REF_PAGE_COMPONENT_KEY } from './integration-ref-page.constants';\n\n//#endregion\n\n//#region ----- Provider -----\n\n@Injectable()\nexport class AXMIntegrationRefPageComponentProvider implements AXPPageComponentProvider {\n async components(): Promise<AXPPageComponentDefinition[]> {\n return [\n {\n key: AXM_INTEGRATION_REF_PAGE_COMPONENT_KEY,\n loader: () =>\n import('./integration-ref-page.component').then((m) => m.AXMIntegrationRefPageComponent),\n },\n ];\n }\n}\n\n//#endregion\n","//#region ----- Imports -----\n\nimport { AXPWidgetDefinitionProvider } from '@acorex-platform/framework-client/layout/widget-core';\nimport { Injectable } from '@angular/core';\n\nimport { AXMIntegrationRefFilterWidget } from './integration-ref-filter.widget.config';\nimport { AXMIntegrationRefWidget } from './integration-ref.widget.config';\n\n//#endregion\n\n//#region ----- Provider -----\n\n@Injectable()\nexport class AXMIntegrationRefWidgetProvider implements AXPWidgetDefinitionProvider {\n getWidgets() {\n return [AXMIntegrationRefWidget, AXMIntegrationRefFilterWidget];\n }\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXP_PERMISSION_DEFINITION_PROVIDER } from '@acorex-platform/framework-client/auth';\nimport {\n AXP_MENU_PROVIDER,\n AXP_SETTING_DEFINITION_PROVIDER,\n AXPIntegrationRuntimeService,\n AXP_INTEGRATION_DOMAIN_PROVIDER,\n} from '@acorex-platform/framework-client/common';\nimport { AXP_EXPRESSION_EVALUATOR_SCOPE_PROVIDER } from '@acorex-platform/framework-client/core';\nimport { AXP_PAGE_COMPONENT_PROVIDER } from '@acorex-platform/framework-client/layout/components';\nimport { AXP_WIDGET_DEFINITION_PROVIDER } from '@acorex-platform/framework-client/layout/widget-core';\nimport { AXPRuntimeModule, provideCommandSetups, provideQuerySetups } from '@acorex-platform/framework-client/runtime';\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { ROUTES } from '@angular/router';\nimport {\n AXMIntegrationManagementCommandKeys,\n AXMIntegrationManagementQueryKeys,\n} from '@acorex-platform/module-integration-management-client/contracts';\n\nimport { AXMIntegrationManagementMenuProvider } from './menu.provider';\nimport { AXMIntegrationManagementPermissionDefinitionProvider } from './permission-definition.provider';\nimport { AXMIntegrationManagementSettingProvider } from './settings.provider';\nimport { AXMIntegrationLegacyDomainProvider } from './features/domains/integration-legacy-domain.provider';\nimport { AXMIntegrationRuntimeServiceImpl } from './features/shared/integration-runtime.service.impl';\nimport { AXMIntegrationEvaluatorScopeProvider } from './features/shared/integration-evaluator-scope.provider';\nimport { integrationManagementRoutesFactory } from './features/integrations-page/integrations-page.routes';\nimport { integrationOAuthCallbackRoutes } from './features/oauth-callback/integration-oauth-callback.routes';\nimport { AXMIntegrationRefPluginModule } from './features/plugins/integration-ref/integration-ref-plugin.module';\nimport { AXMIntegrationRefPageComponentProvider } from './features/widgets/integration-ref/integration-ref-page-component.provider';\nimport { AXMIntegrationRefWidgetProvider } from './features/widgets/integration-ref/integration-ref-widget.provider';\n\n//#endregion\n\n//#region ---- Module ----\n\n@NgModule({\n imports: [CommonModule, AXPRuntimeModule, AXMIntegrationRefPluginModule],\n providers: [\n {\n provide: ROUTES,\n multi: true,\n useFactory: () => [...integrationManagementRoutesFactory(), ...integrationOAuthCallbackRoutes],\n },\n {\n provide: AXP_PERMISSION_DEFINITION_PROVIDER,\n useClass: AXMIntegrationManagementPermissionDefinitionProvider,\n multi: true,\n },\n \n {\n provide: AXP_MENU_PROVIDER,\n useClass: AXMIntegrationManagementMenuProvider,\n multi: true,\n },\n {\n provide: AXP_SETTING_DEFINITION_PROVIDER,\n useClass: AXMIntegrationManagementSettingProvider,\n multi: true,\n },\n {\n provide: AXP_INTEGRATION_DOMAIN_PROVIDER,\n useClass: AXMIntegrationLegacyDomainProvider,\n multi: true,\n },\n {\n provide: AXPIntegrationRuntimeService,\n useClass: AXMIntegrationRuntimeServiceImpl,\n },\n {\n provide: AXP_EXPRESSION_EVALUATOR_SCOPE_PROVIDER,\n useClass: AXMIntegrationEvaluatorScopeProvider,\n multi: true,\n },\n {\n provide: AXP_WIDGET_DEFINITION_PROVIDER,\n useClass: AXMIntegrationRefWidgetProvider,\n multi: true,\n },\n {\n provide: AXP_PAGE_COMPONENT_PROVIDER,\n useClass: AXMIntegrationRefPageComponentProvider,\n multi: true,\n },\n provideCommandSetups([\n {\n key: AXMIntegrationManagementCommandKeys.ConnectionConnectWithCredentials,\n command: () =>\n import('./features/commands/connect-with-credentials.command').then((c) => c.ConnectWithCredentialsCommand),\n },\n {\n key: AXMIntegrationManagementCommandKeys.ConnectionDisconnect,\n command: () =>\n import('./features/commands/disconnect-connection.command').then((c) => c.DisconnectConnectionCommand),\n },\n {\n key: AXMIntegrationManagementCommandKeys.ConnectionDelete,\n command: () =>\n import('./features/commands/delete-connection.command').then((c) => c.DeleteConnectionCommand),\n },\n {\n key: AXMIntegrationManagementCommandKeys.ConnectionUpdate,\n command: () =>\n import('./features/commands/update-connection.command').then((c) => c.UpdateConnectionCommand),\n },\n {\n key: AXMIntegrationManagementCommandKeys.ConnectionValidate,\n command: () =>\n import('./features/commands/validate-connection.command').then((c) => c.ValidateConnectionCommand),\n },\n ]),\n provideQuerySetups([\n {\n key: AXMIntegrationManagementQueryKeys.DomainList,\n loader: () => import('./features/queries/list-domains.query').then((c) => c.ListDomainsQuery),\n },\n {\n key: AXMIntegrationManagementQueryKeys.ProviderList,\n loader: () => import('./features/queries/list-providers.query').then((c) => c.ListProvidersQuery),\n },\n {\n key: AXMIntegrationManagementQueryKeys.ProviderGet,\n loader: () => import('./features/queries/get-provider.query').then((c) => c.GetProviderQuery),\n },\n {\n key: AXMIntegrationManagementQueryKeys.ConnectionListMine,\n loader: () => import('./features/queries/list-my-connections.query').then((c) => c.ListMyConnectionsQuery),\n },\n ]),\n ],\n})\nexport class AXMIntegrationManagementModule {}\n\n//#endregion\n","//#region ----- Imports -----\n\nimport {\n AXPSettingDefinitionProviderContext,\n AXPSettingDefinitionSectionBuilder,\n} from '@acorex-platform/framework-client/common';\n\n//#endregion\n\n//#region ----- Constants -----\n\nconst INTEGRATIONS_SETTINGS_GROUP = 'integrations';\n\n/** One section for every personal connection card (Telegram, WhatsApp, Jira, …). */\nconst USER_CONNECTIONS_SECTION = 'user-connections';\n\nconst I18N = '@integration-management:settings.section.connections';\n\n//#endregion\n\n//#region ----- Section -----\n\n/**\n * Returns the shared user-connections section on the Integrations settings group.\n * The first caller creates it. Later callers append cards to the same section.\n */\nexport function ensureUserIntegrationConnectionsSection(\n context: AXPSettingDefinitionProviderContext,\n): AXPSettingDefinitionSectionBuilder | null {\n if (!context.hasGroup(INTEGRATIONS_SETTINGS_GROUP)) {\n return null;\n }\n\n const integrations = context.group(INTEGRATIONS_SETTINGS_GROUP);\n const group = context.getGroup(INTEGRATIONS_SETTINGS_GROUP);\n if (!integrations || !group) {\n return null;\n }\n\n if (group.sections.some((section) => section.name === USER_CONNECTIONS_SECTION)) {\n return integrations.section(USER_CONNECTIONS_SECTION);\n }\n\n return integrations.addSection(USER_CONNECTIONS_SECTION, `${I18N}.title`, `${I18N}.description`);\n}\n\n//#endregion\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["I18N"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@acorex-platform/module-integration-management-client",
3
- "version": "2.0.0-next.0",
3
+ "version": "2.0.0-next.10",
4
4
  "sideEffects": false,
5
5
  "peerDependencies": {
6
6
  "@angular/common": "^21.0.0 || ^22.0.0",
@@ -4,6 +4,7 @@ export { IntegrationManagementManifest } from '@acorex-platform/module-integrati
4
4
  import * as i0 from '@angular/core';
5
5
  import * as i1 from '@angular/common';
6
6
  import * as i2 from '@acorex-platform/framework-client/runtime';
7
+ import { AXPSettingDefinitionProviderContext, AXPSettingDefinitionSectionBuilder } from '@acorex-platform/framework-client/common';
7
8
 
8
9
  interface ConnectCommandInput {
9
10
  providerId: string;
@@ -74,5 +75,11 @@ declare class AXMIntegrationManagementModule {
74
75
  static ɵinj: i0.ɵɵInjectorDeclaration<AXMIntegrationManagementModule>;
75
76
  }
76
77
 
77
- export { AXMIntegrationConnectionManager, AXMIntegrationManagementModule, AXP_INTEGRATION_CREDENTIAL_MASK, hasConfiguredIntegrationCredentials, isMaskedIntegrationCredential, scrubDisconnectedConnectionConfig, toSafeIntegrationConnectionDto };
78
+ /**
79
+ * Returns the shared user-connections section on the Integrations settings group.
80
+ * The first caller creates it. Later callers append cards to the same section.
81
+ */
82
+ declare function ensureUserIntegrationConnectionsSection(context: AXPSettingDefinitionProviderContext): AXPSettingDefinitionSectionBuilder | null;
83
+
84
+ export { AXMIntegrationConnectionManager, AXMIntegrationManagementModule, AXP_INTEGRATION_CREDENTIAL_MASK, ensureUserIntegrationConnectionsSection, hasConfiguredIntegrationCredentials, isMaskedIntegrationCredential, scrubDisconnectedConnectionConfig, toSafeIntegrationConnectionDto };
78
85
  export type { ConnectCommandInput, ConnectCommandResult };