@masterteam/system-settings 0.0.15 → 0.0.16

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"masterteam-system-settings-email-delivery-shell-Co2SifYp.mjs","sources":["../../../../packages/masterteam/system-settings/src/lib/email-delivery/components/email-delivery-status/email-delivery-status.ts","../../../../packages/masterteam/system-settings/src/lib/email-delivery/email-delivery.api.ts","../../../../packages/masterteam/system-settings/src/lib/email-delivery/email-delivery.http-api.ts","../../../../packages/masterteam/system-settings/src/lib/email-delivery/email-delivery.facade.ts","../../../../packages/masterteam/system-settings/src/lib/email-delivery/dialogs/operator-reason/email-operator-reason-dialog.ts","../../../../packages/masterteam/system-settings/src/lib/email-delivery/dialogs/operator-reason/email-operator-reason-dialog.html","../../../../packages/masterteam/system-settings/src/lib/email-delivery/dialogs/attempt-details/email-attempt-details.ts","../../../../packages/masterteam/system-settings/src/lib/email-delivery/dialogs/attempt-details/email-attempt-details.html","../../../../packages/masterteam/system-settings/src/lib/email-delivery/email-delivery.ui.ts","../../../../packages/masterteam/system-settings/src/lib/email-delivery/pages/attempts/email-delivery-attempts.ts","../../../../packages/masterteam/system-settings/src/lib/email-delivery/pages/attempts/email-delivery-attempts.html","../../../../packages/masterteam/system-settings/src/lib/email-delivery/pages/host-evidence/email-delivery-host-evidence.ts","../../../../packages/masterteam/system-settings/src/lib/email-delivery/pages/host-evidence/email-delivery-host-evidence.html","../../../../packages/masterteam/system-settings/src/lib/email-delivery/pages/quarantine/email-delivery-quarantine.ts","../../../../packages/masterteam/system-settings/src/lib/email-delivery/pages/quarantine/email-delivery-quarantine.html","../../../../packages/masterteam/system-settings/src/lib/email-delivery/pages/activity/email-delivery-activity.ts","../../../../packages/masterteam/system-settings/src/lib/email-delivery/pages/activity/email-delivery-activity.html","../../../../packages/masterteam/system-settings/src/lib/email-delivery/dialogs/controlled-test/email-controlled-test-dialog.ts","../../../../packages/masterteam/system-settings/src/lib/email-delivery/dialogs/controlled-test/email-controlled-test-dialog.html","../../../../packages/masterteam/system-settings/src/lib/email-delivery/email-delivery-descriptor.utils.ts","../../../../packages/masterteam/system-settings/src/lib/email-delivery/pages/connection-editor/email-connection-editor.ts","../../../../packages/masterteam/system-settings/src/lib/email-delivery/pages/connection-editor/email-connection-editor.html","../../../../packages/masterteam/system-settings/src/lib/email-delivery/pages/connection-details/email-connection-details.ts","../../../../packages/masterteam/system-settings/src/lib/email-delivery/pages/connection-details/email-connection-details.html","../../../../packages/masterteam/system-settings/src/lib/email-delivery/pages/connections/email-delivery-connections.ts","../../../../packages/masterteam/system-settings/src/lib/email-delivery/pages/connections/email-delivery-connections.html","../../../../packages/masterteam/system-settings/src/lib/email-delivery/shell/email-delivery-shell.ts","../../../../packages/masterteam/system-settings/src/lib/email-delivery/shell/email-delivery-shell.html"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n input,\n} from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { TranslocoService } from '@jsverse/transloco';\nimport {\n EntityStatus,\n type EntityData,\n type EntityStatusValue,\n} from '@masterteam/components/entities';\nimport type { ColumnDef } from '@masterteam/components/table';\n\nexport type EmailDeliveryStatusKind =\n | 'readiness'\n | 'connection'\n | 'attempt'\n | 'support';\n\ninterface EmailDeliveryStatusDefinition {\n color: string;\n translationKey: string;\n}\n\ntype EmailDeliveryStatusMap = NonNullable<ColumnDef['statusMap']>;\n\nconst STATUS_DEFINITIONS: Record<\n EmailDeliveryStatusKind,\n Record<string, EmailDeliveryStatusDefinition>\n> = {\n // Page-level readiness, shown as a chip beside the page title instead of the\n // banner that used to sit above every tab.\n readiness: {\n ready: status('#059669', 'readiness.ready'),\n 'needs-setup': status('#D97706', 'readiness.needs-setup'),\n unavailable: status('#64748B', 'readiness.unavailable'),\n },\n connection: {\n Draft: status('#64748B', 'connection.draft'),\n PendingAuthorization: status('#D97706', 'connection.pending-authorization'),\n PendingValidation: status('#0284C7', 'connection.pending-validation'),\n Ready: status('#059669', 'connection.ready'),\n ReauthorizationRequired: status(\n '#EA580C',\n 'connection.reauthorization-required',\n ),\n ConditionalAccessRequired: status(\n '#EA580C',\n 'connection.conditional-access-required',\n ),\n Disabled: status('#64748B', 'connection.disabled'),\n Invalid: status('#DC2626', 'connection.invalid'),\n },\n attempt: {\n Reserved: status('#64748B', 'attempt.reserved'),\n ProviderInvocationStarted: status(\n '#0284C7',\n 'attempt.provider-invocation-started',\n ),\n ProviderInvocationDefinitivelyNotAccepted: status(\n '#DC2626',\n 'attempt.provider-not-accepted',\n ),\n ProviderResultReconciliation: status('#7C3AED', 'attempt.reconciling'),\n ProviderResultPending: status('#0284C7', 'attempt.pending'),\n Blocked: status('#DC2626', 'attempt.blocked'),\n RetryScheduled: status('#D97706', 'attempt.retry-scheduled'),\n Accepted: status('#059669', 'attempt.accepted'),\n OutcomeUnknown: status('#EA580C', 'attempt.outcome-unknown'),\n FailedPermanent: status('#DC2626', 'attempt.failed-permanent'),\n DeadLettered: status('#BE123C', 'attempt.dead-lettered'),\n },\n support: {\n active: status('#D97706', 'support.active'),\n 'repair-pending': status('#0284C7', 'support.repair-pending'),\n repaired: status('#059669', 'support.repaired'),\n 'acknowledgement-pending': status(\n '#0284C7',\n 'support.acknowledgement-pending',\n ),\n acknowledged: status('#64748B', 'support.acknowledged'),\n Owned: status('#059669', 'support.owned'),\n owned: status('#059669', 'support.owned'),\n Missing: status('#D97706', 'support.missing'),\n missing: status('#D97706', 'support.missing'),\n Conflict: status('#DC2626', 'support.conflict'),\n conflict: status('#DC2626', 'support.conflict'),\n IdentityIncomplete: status('#EA580C', 'support.identity-incomplete'),\n identityincomplete: status('#EA580C', 'support.identity-incomplete'),\n 'retryable-after-upgrade': status(\n '#0284C7',\n 'support.retryable-after-upgrade',\n ),\n 'repair-required': status('#EA580C', 'support.repair-required'),\n 'acknowledge-only': status('#64748B', 'support.acknowledge-only'),\n configured: status('#059669', 'support.configured'),\n 'not-configured': status('#64748B', 'support.not-configured'),\n },\n};\n\n@Component({\n selector: 'mt-email-delivery-status',\n imports: [EntityStatus],\n template: `<mt-entity-status [data]=\"statusData()\" />`,\n host: { class: 'inline-flex' },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class EmailDeliveryStatus {\n readonly value = input.required<string>();\n readonly kind = input<EmailDeliveryStatusKind>('support');\n\n private readonly transloco = inject(TranslocoService);\n private readonly activeLanguage = toSignal(this.transloco.langChanges$, {\n initialValue: this.transloco.getActiveLang(),\n });\n\n protected readonly statusData = computed<EntityData>(() => {\n this.activeLanguage();\n return {\n name: '',\n viewType: 'Status',\n value: getEmailDeliveryStatusValue(this.kind(), this.value(), (key) =>\n this.transloco.translate(key),\n ),\n configuration: { hideName: true },\n };\n });\n}\n\nexport function getEmailDeliveryStatusMap(\n kind: EmailDeliveryStatusKind,\n translate: (key: string) => string,\n): EmailDeliveryStatusMap {\n return Object.fromEntries(\n Object.entries(STATUS_DEFINITIONS[kind]).map(([key, definition]) => [\n key,\n {\n color: definition.color,\n display: translate(\n `email-delivery.status.${definition.translationKey}`,\n ),\n },\n ]),\n );\n}\n\nfunction getEmailDeliveryStatusValue(\n kind: EmailDeliveryStatusKind,\n value: string,\n translate: (key: string) => string,\n): EntityStatusValue {\n const definition = STATUS_DEFINITIONS[kind][value];\n return {\n key: value,\n display: definition\n ? translate(`email-delivery.status.${definition.translationKey}`)\n : value,\n color: definition?.color ?? '#64748B',\n };\n}\n\nfunction status(\n color: string,\n translationKey: string,\n): EmailDeliveryStatusDefinition {\n return { color, translationKey };\n}\n","import { Injectable } from '@angular/core';\r\nimport type { Observable } from 'rxjs';\r\nimport type {\r\n EmailAttemptPage,\r\n EmailAttemptReplayRequest,\r\n EmailAttemptReplayResult,\r\n EmailAuthorizationStartResult,\r\n EmailConnectionCreateRequest,\r\n EmailConnectionDetails,\r\n EmailConnectionSummary,\r\n EmailConnectionTestRequest,\r\n EmailConnectionTestResult,\r\n EmailConnectionUpdateRequest,\r\n EmailConnectionValidationResult,\r\n EmailDeliveryStatus,\r\n EmailErrorCatalogEntry,\r\n EmailEvidenceDecisionRequest,\r\n EmailEvidenceDownload,\r\n EmailEvidenceRebuildResult,\r\n EmailFinalizationQuarantineItem,\r\n EmailFinalizationQuarantinePage,\r\n EmailHostEvidenceItem,\r\n EmailHostEvidencePage,\r\n EmailProviderDescriptor,\r\n EmailSendResult,\r\n EmailUserTestDispatchResult,\r\n} from './email-delivery.model';\r\n\r\n@Injectable()\r\nexport abstract class EmailDeliveryApi {\r\n abstract getStatus(): Observable<EmailDeliveryStatus>;\r\n abstract getProviders(): Observable<EmailProviderDescriptor[]>;\r\n abstract getErrorCatalog(): Observable<EmailErrorCatalogEntry[]>;\r\n abstract getConnections(): Observable<EmailConnectionSummary[]>;\r\n abstract getConnection(id: string): Observable<EmailConnectionDetails>;\r\n abstract createConnection(\r\n request: EmailConnectionCreateRequest,\r\n ): Observable<EmailConnectionDetails>;\r\n abstract updateConnection(\r\n id: string,\r\n request: EmailConnectionUpdateRequest,\r\n ): Observable<EmailConnectionDetails>;\r\n abstract deleteConnection(\r\n id: string,\r\n concurrencyToken: string,\r\n ): Observable<void>;\r\n abstract bindConnection(\r\n purpose: string,\r\n connectionId: string,\r\n ): Observable<void>;\r\n abstract unbindConnection(purpose: string): Observable<void>;\r\n abstract validateConnection(\r\n id: string,\r\n ): Observable<EmailConnectionValidationResult>;\r\n abstract sendConnectionTest(\r\n id: string,\r\n request: EmailConnectionTestRequest,\r\n ): Observable<EmailSendResult>;\r\n abstract getConnectionTest(\r\n connectionId: string,\r\n testRequestId: string,\r\n ): Observable<EmailConnectionTestResult>;\r\n abstract startDelegatedAuthorization(\r\n id: string,\r\n ): Observable<EmailAuthorizationStartResult>;\r\n abstract startAdminConsent(\r\n id: string,\r\n ): Observable<EmailAuthorizationStartResult>;\r\n abstract revokeAuthorization(id: string): Observable<void>;\r\n abstract getAttempts(\r\n status: string | null,\r\n cursor: string | null,\r\n take: number,\r\n ): Observable<EmailAttemptPage>;\r\n abstract replayAttempt(\r\n id: string,\r\n request: EmailAttemptReplayRequest,\r\n ): Observable<EmailAttemptReplayResult>;\r\n abstract getTestRequest(\r\n testRequestId: string,\r\n ): Observable<EmailUserTestDispatchResult>;\r\n abstract sendTemplateTest(\r\n eventId: number,\r\n templateId: number,\r\n request: {\r\n testRequestId: string;\r\n emails: string[];\r\n metadata: Record<string, string>;\r\n },\r\n ): Observable<EmailUserTestDispatchResult>;\r\n abstract sendAlertTest(\r\n alertId: number,\r\n request: {\r\n testRequestId: string;\r\n emails: string[];\r\n metadata: Record<string, string>;\r\n },\r\n ): Observable<EmailUserTestDispatchResult>;\r\n abstract getFinalizationQuarantine(\r\n cursor: string | null,\r\n take: number,\r\n ): Observable<EmailFinalizationQuarantinePage>;\r\n abstract retryFinalizationQuarantine(\r\n itemId: string,\r\n reason: string,\r\n ): Observable<EmailFinalizationQuarantineItem>;\r\n abstract acknowledgeFinalizationQuarantine(\r\n itemId: string,\r\n reason: string,\r\n ): Observable<EmailFinalizationQuarantineItem>;\r\n abstract getHostEvidence(\r\n cursor: string | null,\r\n take: number,\r\n ): Observable<EmailHostEvidencePage>;\r\n abstract exportHostEvidence(\r\n evidenceOccurrenceId: string,\r\n ): Observable<EmailEvidenceDownload>;\r\n abstract repairHostEvidence(\r\n evidenceOccurrenceId: string,\r\n request: EmailEvidenceDecisionRequest,\r\n ): Observable<EmailHostEvidenceItem>;\r\n abstract acknowledgeHostEvidence(\r\n evidenceOccurrenceId: string,\r\n request: EmailEvidenceDecisionRequest,\r\n ): Observable<EmailHostEvidenceItem>;\r\n abstract rebuildEvidenceIndex(\r\n take: number,\r\n ): Observable<EmailEvidenceRebuildResult>;\r\n}\r\n","import {\n HttpClient,\n HttpErrorResponse,\n type HttpResponse,\n} from '@angular/common/http';\nimport { inject, Injectable } from '@angular/core';\nimport { catchError, map, mergeMap, of, throwError } from 'rxjs';\nimport { EMAIL_DELIVERY_OPTIONS } from './email-delivery.config';\nimport { EmailDeliveryApi } from './email-delivery.api';\nimport type {\n AppResponse,\n EmailAttemptPage,\n EmailAttemptReplayRequest,\n EmailAttemptReplayResult,\n EmailAuthorizationStartResult,\n EmailConnectionCreateRequest,\n EmailConnectionDetails,\n EmailConnectionSummary,\n EmailConnectionTestRequest,\n EmailConnectionTestResult,\n EmailConnectionUpdateRequest,\n EmailConnectionValidationResult,\n EmailDeliveryStatus,\n EmailDeliveryProblem,\n EmailErrorCatalogEntry,\n EmailEvidenceDecisionRequest,\n EmailEvidenceDownload,\n EmailEvidenceRebuildResult,\n EmailFinalizationQuarantineItem,\n EmailFinalizationQuarantinePage,\n EmailHostEvidenceItem,\n EmailHostEvidencePage,\n EmailProviderDescriptor,\n EmailSendResult,\n EmailUserTestDispatchResult,\n} from './email-delivery.model';\n\n@Injectable({ providedIn: 'root' })\nexport class EmailDeliveryHttpApi extends EmailDeliveryApi {\n private readonly http = inject(HttpClient);\n private readonly options = inject(EMAIL_DELIVERY_OPTIONS);\n\n getStatus() {\n return this.http.get<EmailDeliveryStatus>(this.url('status'));\n }\n\n getProviders() {\n return this.http.get<EmailProviderDescriptor[]>(this.url('providers'));\n }\n\n getErrorCatalog() {\n return this.http.get<EmailErrorCatalogEntry[]>(this.url('error-catalog'));\n }\n\n getConnections() {\n return this.http.get<EmailConnectionSummary[]>(this.url('connections'));\n }\n\n getConnection(id: string) {\n return this.http.get<EmailConnectionDetails>(\n this.url(`connections/${encodeURIComponent(id)}`),\n );\n }\n\n createConnection(request: EmailConnectionCreateRequest) {\n return this.http.post<EmailConnectionDetails>(\n this.url('connections'),\n request,\n );\n }\n\n updateConnection(id: string, request: EmailConnectionUpdateRequest) {\n return this.http.put<EmailConnectionDetails>(\n this.url(`connections/${encodeURIComponent(id)}`),\n request,\n );\n }\n\n deleteConnection(id: string, concurrencyToken: string) {\n return this.http.delete<void>(\n this.url(`connections/${encodeURIComponent(id)}`),\n { params: { concurrencyToken } },\n );\n }\n\n bindConnection(purpose: string, connectionId: string) {\n return this.http.put<void>(\n this.url(`bindings/${encodeURIComponent(purpose)}`),\n { connectionId },\n );\n }\n\n unbindConnection(purpose: string) {\n return this.http.delete<void>(\n this.url(`bindings/${encodeURIComponent(purpose)}`),\n );\n }\n\n validateConnection(id: string) {\n return this.http.post<EmailConnectionValidationResult>(\n this.url(`connections/${encodeURIComponent(id)}/validate`),\n null,\n );\n }\n\n sendConnectionTest(id: string, request: EmailConnectionTestRequest) {\n return this.http\n .post<\n EmailSendResult | EmailDeliveryProblem\n >(this.url(`connections/${encodeURIComponent(id)}/test`), request, { observe: 'response' })\n .pipe(\n mergeMap((response) => {\n const body = response.body;\n if (isEmailSendResult(body)) return of(body);\n // 202 means the send was accepted without a result on this response.\n // The caller must read the outcome back with the same testRequestId;\n // posting again would deliver a second real email.\n if (response.status === 202) {\n return throwError(() => body ?? PENDING_CONTROLLED_TEST);\n }\n return throwError(() => body);\n }),\n catchError((error: unknown) => {\n const body = error instanceof HttpErrorResponse ? error.error : error;\n return isEmailSendResult(body) ? of(body) : throwError(() => error);\n }),\n );\n }\n\n getConnectionTest(connectionId: string, testRequestId: string) {\n return this.http.get<EmailConnectionTestResult>(\n this.url(\n `connections/${encodeURIComponent(connectionId)}/test-requests/${encodeURIComponent(testRequestId)}`,\n ),\n );\n }\n\n startDelegatedAuthorization(id: string) {\n return this.http.post<EmailAuthorizationStartResult>(\n this.url(\n `connections/${encodeURIComponent(id)}/authorization/delegated/start`,\n ),\n null,\n );\n }\n\n startAdminConsent(id: string) {\n return this.http.post<EmailAuthorizationStartResult>(\n this.url(\n `connections/${encodeURIComponent(id)}/authorization/admin-consent/start`,\n ),\n null,\n );\n }\n\n revokeAuthorization(id: string) {\n return this.http.post<void>(\n this.url(`connections/${encodeURIComponent(id)}/authorization/revoke`),\n null,\n );\n }\n\n getAttempts(status: string | null, cursor: string | null, take: number) {\n return this.http.get<EmailAttemptPage>(this.url('attempts'), {\n params: withoutNulls({ status, cursor, take }),\n });\n }\n\n replayAttempt(id: string, request: EmailAttemptReplayRequest) {\n return this.http.post<EmailAttemptReplayResult>(\n this.url(`attempts/${encodeURIComponent(id)}/replay`),\n request,\n );\n }\n\n getTestRequest(testRequestId: string) {\n return this.http.get<EmailUserTestDispatchResult>(\n this.url(`test-requests/${encodeURIComponent(testRequestId)}`),\n );\n }\n\n sendTemplateTest(\n eventId: number,\n templateId: number,\n request: {\n testRequestId: string;\n emails: string[];\n metadata: Record<string, string>;\n },\n ) {\n return this.http\n .post<\n AppResponse<EmailUserTestDispatchResult>\n >(this.notificationUrl(`events/${eventId}/templates/${templateId}/test-email`), request)\n .pipe(map((response) => response.data));\n }\n\n sendAlertTest(\n alertId: number,\n request: {\n testRequestId: string;\n emails: string[];\n metadata: Record<string, string>;\n },\n ) {\n return this.http\n .post<\n AppResponse<EmailUserTestDispatchResult>\n >(this.notificationUrl(`alerts/${alertId}/test`), request)\n .pipe(map((response) => response.data));\n }\n\n getFinalizationQuarantine(cursor: string | null, take: number) {\n return this.http.get<EmailFinalizationQuarantinePage>(\n this.url('finalization-quarantine'),\n { params: withoutNulls({ cursor, take }) },\n );\n }\n\n retryFinalizationQuarantine(itemId: string, reason: string) {\n return this.http.post<EmailFinalizationQuarantineItem>(\n this.url(`finalization-quarantine/${encodeURIComponent(itemId)}/retry`),\n { reason },\n );\n }\n\n acknowledgeFinalizationQuarantine(itemId: string, reason: string) {\n return this.http.post<EmailFinalizationQuarantineItem>(\n this.url(\n `finalization-quarantine/${encodeURIComponent(itemId)}/acknowledge`,\n ),\n { reason },\n );\n }\n\n getHostEvidence(cursor: string | null, take: number) {\n return this.http.get<EmailHostEvidencePage>(this.url('orphan-evidence'), {\n params: withoutNulls({ cursor, take }),\n });\n }\n\n exportHostEvidence(evidenceOccurrenceId: string) {\n return this.http\n .get(\n this.url(\n `orphan-evidence/${encodeURIComponent(evidenceOccurrenceId)}/export`,\n ),\n {\n observe: 'response',\n responseType: 'blob',\n },\n )\n .pipe(map((response) => toEvidenceDownload(response)));\n }\n\n repairHostEvidence(\n evidenceOccurrenceId: string,\n request: EmailEvidenceDecisionRequest,\n ) {\n return this.http.post<EmailHostEvidenceItem>(\n this.url(\n `orphan-evidence/${encodeURIComponent(evidenceOccurrenceId)}/repair`,\n ),\n request,\n );\n }\n\n acknowledgeHostEvidence(\n evidenceOccurrenceId: string,\n request: EmailEvidenceDecisionRequest,\n ) {\n return this.http.post<EmailHostEvidenceItem>(\n this.url(\n `orphan-evidence/${encodeURIComponent(evidenceOccurrenceId)}/acknowledge`,\n ),\n request,\n );\n }\n\n rebuildEvidenceIndex(take: number) {\n return this.http.post<EmailEvidenceRebuildResult>(\n this.url('orphan-evidence/rebuild-index'),\n null,\n { params: { take } },\n );\n }\n\n private url(path: string): string {\n return joinPath(this.options.apiBasePath, path);\n }\n\n private notificationUrl(path: string): string {\n return joinPath(this.options.notificationApiBasePath, path);\n }\n}\n\n/**\n * Stand-in problem for a bare `202 Accepted` that carries no body of its own —\n * it routes the dialog to retrieval by GUID, the same as the catalog problem\n * the backend normally returns for an in-flight test.\n */\nconst PENDING_CONTROLLED_TEST: EmailDeliveryProblem = {\n code: 'email.delivery_test_request_in_progress',\n category: 'pending',\n retryable: true,\n action: 'poll_status',\n readinessImpact: 'unchanged',\n correlationId: '',\n retryAfterSeconds: null,\n};\n\nfunction isEmailSendResult(value: unknown): value is EmailSendResult {\n return (\n typeof value === 'object' &&\n value !== null &&\n typeof (value as EmailSendResult).outcome === 'string' &&\n typeof (value as EmailSendResult).code === 'string'\n );\n}\n\nfunction withoutNulls(\n values: Record<string, string | number | null>,\n): Record<string, string | number> {\n return Object.fromEntries(\n Object.entries(values).filter(\n (entry): entry is [string, string | number] => entry[1] !== null,\n ),\n );\n}\n\nfunction joinPath(base: string, path: string): string {\n return `${base.replace(/\\/$/, '')}/${path.replace(/^\\//, '')}`;\n}\n\nfunction toEvidenceDownload(\n response: HttpResponse<Blob>,\n): EmailEvidenceDownload {\n const contentDisposition = response.headers.get('content-disposition') ?? '';\n const fileNameMatch = /filename\\*?=(?:UTF-8''|\\\")?([^\\\";]+)/i.exec(\n contentDisposition,\n );\n\n return {\n blob: response.body ?? new Blob(),\n fileName: fileNameMatch\n ? decodeURIComponent(fileNameMatch[1].replace(/\\\"$/, ''))\n : 'email-delivery-evidence.json',\n contentType:\n response.headers.get('content-type') ?? 'application/octet-stream',\n };\n}\n","import { HttpErrorResponse } from '@angular/common/http';\nimport { computed, inject, Injectable, signal } from '@angular/core';\nimport { TranslocoService } from '@jsverse/transloco';\nimport { ToastService } from '@masterteam/components/toast';\nimport {\n finalize,\n forkJoin,\n map,\n Observable,\n switchMap,\n tap,\n throwError,\n} from 'rxjs';\nimport { EMAIL_DELIVERY_OPTIONS } from './email-delivery.config';\nimport { EmailDeliveryHttpApi } from './email-delivery.http-api';\nimport type {\n EmailAttemptReplayRequest,\n EmailAttemptReplayResult,\n EmailAuthorizationStartResult,\n EmailConnectionCreateRequest,\n EmailConnectionDetails,\n EmailConnectionSummary,\n EmailConnectionTestRequest,\n EmailConnectionTestResult,\n EmailConnectionUpdateRequest,\n EmailConnectionValidationResult,\n EmailDeliveryAttempt,\n EmailDeliveryPermission,\n EmailDeliveryProblem,\n EmailDeliveryStatus,\n EmailErrorCatalogEntry,\n EmailEvidenceDecisionRequest,\n EmailEvidenceDownload,\n EmailEvidenceRebuildResult,\n EmailFinalizationQuarantineItem,\n EmailHostEvidenceItem,\n EmailProviderDescriptor,\n EmailSendResult,\n} from './email-delivery.model';\n\nconst PENDING_AUTHORIZATION_STORAGE_KEY =\n 'mt.email-delivery.pending-authorization-connection';\n\n@Injectable({ providedIn: 'root' })\nexport class EmailDeliveryFacade {\n private readonly options = inject(EMAIL_DELIVERY_OPTIONS);\n private readonly api = inject(EmailDeliveryHttpApi);\n private readonly transloco = inject(TranslocoService);\n private readonly toast = inject(ToastService);\n private initialized = false;\n private attemptsLoaded = false;\n\n readonly status = signal<EmailDeliveryStatus | null>(null);\n readonly providers = signal<EmailProviderDescriptor[]>([]);\n readonly errorCatalog = signal<EmailErrorCatalogEntry[]>([]);\n readonly connections = signal<EmailConnectionSummary[]>([]);\n readonly selectedConnection = signal<EmailConnectionDetails | null>(null);\n readonly attempts = signal<EmailDeliveryAttempt[]>([]);\n readonly attemptsNextCursor = signal<string | null>(null);\n readonly attemptStatusFilter = signal<string | null>(null);\n readonly quarantine = signal<EmailFinalizationQuarantineItem[]>([]);\n readonly quarantineNextCursor = signal<string | null>(null);\n readonly hostEvidence = signal<EmailHostEvidenceItem[]>([]);\n readonly hostEvidenceNextCursor = signal<string | null>(null);\n readonly hostEvidenceScanBudgetExhausted = signal(false);\n\n readonly statusLoading = signal(false);\n readonly catalogLoading = signal(false);\n readonly connectionsLoading = signal(false);\n readonly detailsLoading = signal(false);\n readonly attemptsLoading = signal(false);\n readonly quarantineLoading = signal(false);\n readonly hostEvidenceLoading = signal(false);\n readonly mutationLoading = signal<string | null>(null);\n readonly lastConnectionTest = signal<EmailSendResult | null>(null);\n readonly lastConnectionTestRequestId = signal<string | null>(null);\n\n readonly activeConnection = computed(() =>\n this.connections().find((connection) =>\n connection.bindings.includes('notifications'),\n ),\n );\n readonly managementAvailable = computed(\n () => this.status()?.managementEnabled === true,\n );\n\n initialize(): void {\n if (this.initialized) return;\n this.initialized = true;\n this.loadStatus()\n .pipe(\n switchMap(() =>\n forkJoin({\n catalog: this.loadCatalog(),\n connections: this.loadConnections(),\n }),\n ),\n )\n .subscribe({ error: (error) => this.showError(error) });\n }\n\n hasPermission(permission: EmailDeliveryPermission): boolean {\n return this.options.permissionKeys.includes(permission);\n }\n\n loadStatus(): Observable<EmailDeliveryStatus> {\n this.statusLoading.set(true);\n return this.api.getStatus().pipe(\n tap((status) => this.status.set(status)),\n finalize(() => this.statusLoading.set(false)),\n );\n }\n\n loadCatalog(): Observable<{\n providers: EmailProviderDescriptor[];\n errors: EmailErrorCatalogEntry[];\n }> {\n this.catalogLoading.set(true);\n return forkJoin({\n providers: this.api.getProviders(),\n errors: this.api.getErrorCatalog(),\n }).pipe(\n tap(({ providers, errors }) => {\n this.providers.set(providers);\n this.errorCatalog.set(errors);\n }),\n finalize(() => this.catalogLoading.set(false)),\n );\n }\n\n loadConnections(): Observable<EmailConnectionSummary[]> {\n this.connectionsLoading.set(true);\n return this.api.getConnections().pipe(\n tap((connections) => this.connections.set(connections)),\n finalize(() => this.connectionsLoading.set(false)),\n );\n }\n\n loadConnection(id: string): Observable<EmailConnectionDetails> {\n this.detailsLoading.set(true);\n return this.api.getConnection(id).pipe(\n tap((details) => this.selectedConnection.set(details)),\n finalize(() => this.detailsLoading.set(false)),\n );\n }\n\n createConnection(\n request: EmailConnectionCreateRequest,\n ): Observable<EmailConnectionDetails> {\n this.mutationLoading.set('create');\n return this.api.createConnection(request).pipe(\n switchMap((details) => this.refreshConnection(details.connection.id)),\n tap(() => this.showSuccess('connection-created')),\n finalize(() => this.mutationLoading.set(null)),\n );\n }\n\n updateConnection(\n id: string,\n request: EmailConnectionUpdateRequest,\n ): Observable<EmailConnectionDetails> {\n this.mutationLoading.set('update');\n return this.api.updateConnection(id, request).pipe(\n switchMap(() => this.refreshConnection(id)),\n tap(() => this.showSuccess('connection-updated')),\n finalize(() => this.mutationLoading.set(null)),\n );\n }\n\n deleteConnection(id: string, concurrencyToken: string): Observable<void> {\n this.mutationLoading.set('delete');\n return this.api.deleteConnection(id, concurrencyToken).pipe(\n switchMap(() =>\n forkJoin({\n connections: this.loadConnections(),\n status: this.loadStatus(),\n }),\n ),\n tap(() => {\n this.selectedConnection.set(null);\n this.showSuccess('connection-deleted');\n }),\n map(() => undefined),\n finalize(() => this.mutationLoading.set(null)),\n );\n }\n\n validateConnection(id: string): Observable<EmailConnectionValidationResult> {\n this.mutationLoading.set('validate');\n return this.api.validateConnection(id).pipe(\n switchMap((result) => this.refreshConnection(id).pipe(map(() => result))),\n tap((result) =>\n result.isValid\n ? this.toast.success(this.describeCode(result.code))\n : this.toast.warn(this.describeCode(result.code)),\n ),\n finalize(() => this.mutationLoading.set(null)),\n );\n }\n\n sendConnectionTest(\n id: string,\n request: EmailConnectionTestRequest,\n ): Observable<EmailSendResult> {\n this.mutationLoading.set('test');\n this.lastConnectionTestRequestId.set(request.testRequestId);\n return this.api.sendConnectionTest(id, request).pipe(\n tap((result) => {\n this.lastConnectionTest.set(result);\n this.refreshActivity();\n }),\n switchMap((result) => this.refreshConnection(id).pipe(map(() => result))),\n finalize(() => this.mutationLoading.set(null)),\n );\n }\n\n retrieveConnectionTest(\n connectionId: string,\n testRequestId: string,\n ): Observable<EmailConnectionTestResult> {\n this.mutationLoading.set('retrieve-test');\n return this.api.getConnectionTest(connectionId, testRequestId).pipe(\n tap((stored) => {\n this.lastConnectionTest.set(stored.result);\n if (stored.result) this.refreshActivity();\n }),\n finalize(() => this.mutationLoading.set(null)),\n );\n }\n\n bindConnection(id: string, purpose = 'notifications'): Observable<void> {\n this.mutationLoading.set('bind');\n return this.api.bindConnection(purpose, id).pipe(\n switchMap(() => this.refreshConnection(id)),\n tap(() => this.showSuccess('connection-bound')),\n map(() => undefined),\n finalize(() => this.mutationLoading.set(null)),\n );\n }\n\n unbindConnection(id: string, purpose = 'notifications'): Observable<void> {\n this.mutationLoading.set('unbind');\n return this.api.unbindConnection(purpose).pipe(\n switchMap(() => this.refreshConnection(id)),\n tap(() => this.showSuccess('connection-unbound')),\n map(() => undefined),\n finalize(() => this.mutationLoading.set(null)),\n );\n }\n\n startAuthorization(\n id: string,\n kind: 'delegated' | 'admin-consent',\n ): Observable<EmailAuthorizationStartResult> {\n this.mutationLoading.set(kind);\n const request =\n kind === 'delegated'\n ? this.api.startDelegatedAuthorization(id)\n : this.api.startAdminConsent(id);\n return request.pipe(\n tap(() => this.rememberAuthorizationConnection(id)),\n finalize(() => this.mutationLoading.set(null)),\n );\n }\n\n revokeAuthorization(id: string): Observable<void> {\n this.mutationLoading.set('revoke');\n return this.api.revokeAuthorization(id).pipe(\n switchMap(() => this.refreshConnection(id)),\n tap(() => this.showSuccess('authorization-revoked')),\n map(() => undefined),\n finalize(() => this.mutationLoading.set(null)),\n );\n }\n\n loadAttempts(reset = true, status = this.attemptStatusFilter()) {\n this.attemptsLoading.set(true);\n const cursor = reset ? null : this.attemptsNextCursor();\n if (reset) this.attemptStatusFilter.set(status);\n return this.api.getAttempts(status, cursor, 50).pipe(\n tap((page) => {\n this.attemptsLoaded = true;\n this.attempts.set(\n reset ? page.items : mergeById(this.attempts(), page.items, 'id'),\n );\n this.attemptsNextCursor.set(page.nextCursor);\n }),\n finalize(() => this.attemptsLoading.set(false)),\n );\n }\n\n replayAttempt(\n attempt: EmailDeliveryAttempt,\n request: EmailAttemptReplayRequest,\n ): Observable<EmailAttemptReplayResult> {\n this.mutationLoading.set(`replay-${attempt.id}`);\n return this.api.replayAttempt(attempt.id, request).pipe(\n tap((result) => {\n this.attempts.update((items) =>\n replaceById(items, result.attempt, 'id'),\n );\n this.showSuccess('attempt-replay-scheduled');\n }),\n finalize(() => this.mutationLoading.set(null)),\n );\n }\n\n loadQuarantine(reset = true) {\n this.quarantineLoading.set(true);\n const cursor = reset ? null : this.quarantineNextCursor();\n return this.api.getFinalizationQuarantine(cursor, 100).pipe(\n tap((page) => {\n this.quarantine.set(\n reset\n ? page.items\n : mergeById(this.quarantine(), page.items, 'itemId'),\n );\n this.quarantineNextCursor.set(page.nextCursor);\n }),\n finalize(() => this.quarantineLoading.set(false)),\n );\n }\n\n decideQuarantine(\n item: EmailFinalizationQuarantineItem,\n action: 'retry' | 'acknowledge',\n reason: string,\n ): Observable<EmailFinalizationQuarantineItem> {\n this.mutationLoading.set(`${action}-${item.itemId}`);\n const request =\n action === 'retry'\n ? this.api.retryFinalizationQuarantine(item.itemId, reason)\n : this.api.acknowledgeFinalizationQuarantine(item.itemId, reason);\n return request.pipe(\n switchMap((updated) =>\n this.loadQuarantine(true).pipe(map(() => updated)),\n ),\n tap(() => {\n this.showSuccess(\n action === 'retry'\n ? 'quarantine-retry-submitted'\n : 'quarantine-acknowledged',\n );\n }),\n finalize(() => this.mutationLoading.set(null)),\n );\n }\n\n loadHostEvidence(reset = true) {\n this.hostEvidenceLoading.set(true);\n const cursor = reset ? null : this.hostEvidenceNextCursor();\n return this.api.getHostEvidence(cursor, 100).pipe(\n tap((page) => {\n this.hostEvidence.set(\n reset\n ? page.items\n : mergeHostEvidence(this.hostEvidence(), page.items),\n );\n this.hostEvidenceNextCursor.set(page.nextCursor);\n this.hostEvidenceScanBudgetExhausted.set(page.scanBudgetExhausted);\n }),\n finalize(() => this.hostEvidenceLoading.set(false)),\n );\n }\n\n exportHostEvidence(\n evidenceOccurrenceId: string,\n ): Observable<EmailEvidenceDownload> {\n this.mutationLoading.set(`export-${evidenceOccurrenceId}`);\n return this.api\n .exportHostEvidence(evidenceOccurrenceId)\n .pipe(finalize(() => this.mutationLoading.set(null)));\n }\n\n decideHostEvidence(\n item: EmailHostEvidenceItem,\n action: 'repair' | 'acknowledge',\n reason: string,\n ): Observable<EmailHostEvidenceItem> {\n if (!item.evidenceOccurrenceId || !item.decisionToken) {\n return throwError(() => new Error('Incomplete evidence identity'));\n }\n this.mutationLoading.set(`${action}-${item.evidenceOccurrenceId}`);\n const request: EmailEvidenceDecisionRequest = {\n reason,\n decisionToken: item.decisionToken,\n };\n const operation =\n action === 'repair'\n ? this.api.repairHostEvidence(item.evidenceOccurrenceId, request)\n : this.api.acknowledgeHostEvidence(item.evidenceOccurrenceId, request);\n return operation.pipe(\n switchMap((updated) =>\n this.loadHostEvidence(true).pipe(map(() => updated)),\n ),\n tap(() => {\n this.showSuccess(\n action === 'repair' ? 'evidence-repaired' : 'evidence-acknowledged',\n );\n }),\n finalize(() => this.mutationLoading.set(null)),\n );\n }\n\n rebuildEvidenceIndex(take: number): Observable<EmailEvidenceRebuildResult> {\n this.mutationLoading.set('rebuild-evidence');\n return this.api.rebuildEvidenceIndex(take).pipe(\n switchMap((result) =>\n this.loadHostEvidence(true).pipe(map(() => result)),\n ),\n tap(() => this.showSuccess('evidence-index-rebuilt')),\n finalize(() => this.mutationLoading.set(null)),\n );\n }\n\n providerByKey(\n key: string | null | undefined,\n ): EmailProviderDescriptor | null {\n return this.providers().find((provider) => provider.key === key) ?? null;\n }\n\n describeCode(code: string | null | undefined): string {\n if (!code) return this.transloco.translate('email-delivery.unknown-code');\n const key = `email-delivery.codes.${code}`;\n const translated = this.transloco.translate(key);\n if (translated !== key) return translated;\n\n const contract = this.errorCatalog().find((entry) => entry.code === code);\n if (!contract || contract.frontendAction === 'none') return code;\n\n const actionKey = `email-delivery.error-actions.${contract.frontendAction}`;\n const action = this.transloco.translate(actionKey);\n return action === actionKey ? code : `${action} (${code})`;\n }\n\n describeError(error: unknown): string {\n const problem = extractProblem(error);\n const base = this.describeCode(problem?.code);\n return problem?.correlationId\n ? `${base} (${this.transloco.translate('email-delivery.correlation-id')}: ${problem.correlationId})`\n : base;\n }\n\n errorAction(error: unknown): string | null {\n const problem = extractProblem(error);\n if (!problem) return null;\n return (\n problem.action ||\n this.errorCatalog().find((entry) => entry.code === problem.code)\n ?.frontendAction ||\n null\n );\n }\n\n showError(error: unknown): void {\n this.toast.error(this.describeError(error));\n }\n\n takePendingAuthorizationConnection(): string | null {\n if (typeof sessionStorage === 'undefined') return null;\n const id = sessionStorage.getItem(PENDING_AUTHORIZATION_STORAGE_KEY);\n sessionStorage.removeItem(PENDING_AUTHORIZATION_STORAGE_KEY);\n return id;\n }\n\n /**\n * A completed controlled test writes its own Activity row, so the loaded\n * Activity list is stale the moment the test returns. Only refresh once\n * Activity has been opened — before that its own load covers it, and the\n * status filter in effect there is preserved.\n */\n private refreshActivity(): void {\n if (!this.attemptsLoaded) return;\n this.loadAttempts(true).subscribe({ error: () => undefined });\n }\n\n private refreshConnection(id: string): Observable<EmailConnectionDetails> {\n return forkJoin({\n details: this.api.getConnection(id),\n connections: this.api.getConnections(),\n status: this.api.getStatus(),\n }).pipe(\n tap(({ details, connections, status }) => {\n this.selectedConnection.set(details);\n this.connections.set(connections);\n this.status.set(status);\n }),\n map(({ details }) => details),\n );\n }\n\n private rememberAuthorizationConnection(id: string): void {\n if (typeof sessionStorage === 'undefined') return;\n sessionStorage.setItem(PENDING_AUTHORIZATION_STORAGE_KEY, id);\n }\n\n private showSuccess(key: string): void {\n this.toast.success(this.transloco.translate(`email-delivery.${key}`));\n }\n}\n\nfunction extractProblem(error: unknown): EmailDeliveryProblem | null {\n if (error instanceof HttpErrorResponse) {\n const value = error.error as Partial<EmailDeliveryProblem> | null;\n return value && typeof value.code === 'string'\n ? (value as EmailDeliveryProblem)\n : null;\n }\n if (\n typeof error === 'object' &&\n error !== null &&\n typeof (error as Partial<EmailDeliveryProblem>).code === 'string'\n ) {\n return error as EmailDeliveryProblem;\n }\n return null;\n}\n\nfunction mergeById<T extends Record<K, string>, K extends keyof T>(\n current: T[],\n incoming: T[],\n key: K,\n): T[] {\n const values = new Map(current.map((item) => [item[key], item]));\n incoming.forEach((item) => values.set(item[key], item));\n return Array.from(values.values());\n}\n\nfunction replaceById<T extends Record<K, string>, K extends keyof T>(\n current: T[],\n replacement: T,\n key: K,\n): T[] {\n return current.map((item) =>\n item[key] === replacement[key] ? replacement : item,\n );\n}\n\nfunction mergeHostEvidence(\n current: EmailHostEvidenceItem[],\n incoming: EmailHostEvidenceItem[],\n): EmailHostEvidenceItem[] {\n const identity = (item: EmailHostEvidenceItem) =>\n item.evidenceOccurrenceId ?? item.itemId;\n const values = new Map(current.map((item) => [identity(item), item]));\n incoming.forEach((item) => values.set(identity(item), item));\n return Array.from(values.values());\n}\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\r\nimport { FormControl, ReactiveFormsModule, Validators } from '@angular/forms';\r\nimport { TranslocoDirective } from '@jsverse/transloco';\r\nimport { Button } from '@masterteam/components/button';\r\nimport { ModalRef } from '@masterteam/components/dialog';\r\nimport { ModalService } from '@masterteam/components/modal';\r\nimport { TextareaField } from '@masterteam/components/textarea-field';\r\nimport { ToggleField } from '@masterteam/components/toggle-field';\r\nimport { inject } from '@angular/core';\r\n\r\nexport interface EmailOperatorDecision {\r\n reason: string;\r\n exceptionalOverride: boolean;\r\n}\r\n\r\n@Component({\r\n selector: 'mt-email-operator-reason-dialog',\r\n imports: [\r\n ReactiveFormsModule,\r\n TranslocoDirective,\r\n Button,\r\n TextareaField,\r\n ToggleField,\r\n ],\r\n templateUrl: './email-operator-reason-dialog.html',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class EmailOperatorReasonDialog {\r\n readonly itemName = input.required<string>();\r\n readonly consequence = input.required<string>();\r\n readonly showExceptionalOverride = input(false);\r\n readonly confirmLabel = input<string | null>(null);\r\n\r\n private readonly ref = inject(ModalRef);\r\n protected readonly modal = inject(ModalService);\r\n protected readonly reason = new FormControl('', {\r\n nonNullable: true,\r\n validators: [Validators.required, Validators.maxLength(500)],\r\n });\r\n protected readonly exceptionalOverride = new FormControl(false, {\r\n nonNullable: true,\r\n });\r\n\r\n protected cancel(): void {\r\n this.ref.close();\r\n }\r\n\r\n protected confirm(): void {\r\n this.reason.markAsTouched();\r\n this.exceptionalOverride.markAsTouched();\r\n if (!this.canConfirm()) return;\r\n this.ref.close({\r\n reason: this.reason.getRawValue().trim(),\r\n exceptionalOverride: this.exceptionalOverride.getRawValue(),\r\n } satisfies EmailOperatorDecision);\r\n }\r\n\r\n protected canConfirm(): boolean {\r\n return (\r\n this.reason.valid &&\r\n (!this.showExceptionalOverride() ||\r\n this.exceptionalOverride.getRawValue())\r\n );\r\n }\r\n}\r\n","<ng-container *transloco=\"let t; prefix: 'email-delivery'\">\n <form\n [class]=\"'space-y-5 p-4 sm:p-5 ' + modal.contentClass\"\n (ngSubmit)=\"confirm()\"\n >\n <div\n class=\"rounded-md border border-amber-200 bg-amber-50 p-4 text-sm text-amber-950\"\n role=\"note\"\n >\n <p class=\"m-0 break-words font-semibold\">{{ itemName() }}</p>\n <p class=\"mb-0 mt-1\">{{ consequence() }}</p>\n </div>\n\n <mt-textarea-field\n [formControl]=\"reason\"\n [label]=\"t('operator-reason')\"\n [hint]=\"t('operator-reason-hint')\"\n [required]=\"true\"\n [maxLength]=\"500\"\n rows=\"4\"\n />\n\n @if (showExceptionalOverride()) {\n <div class=\"flex flex-col gap-1\">\n <mt-toggle-field\n [formControl]=\"exceptionalOverride\"\n [label]=\"t('exceptional-override')\"\n />\n <!-- mt-toggle-field has no hint input, so the consequence of an\n exceptional replay is rendered here instead of silently dropped. -->\n <p class=\"m-0 text-xs text-muted-color\">\n {{ t(\"exceptional-override-hint\") }}\n </p>\n </div>\n }\n </form>\n\n <div [class]=\"modal.footerClass\">\n <mt-button\n type=\"button\"\n [label]=\"t('cancel')\"\n variant=\"outlined\"\n styleClass=\"w-full sm:w-auto\"\n (onClick)=\"cancel()\"\n />\n <mt-button\n type=\"button\"\n severity=\"warn\"\n [label]=\"confirmLabel() || t('confirm-action')\"\n [disabled]=\"!canConfirm()\"\n styleClass=\"w-full sm:w-auto\"\n (onClick)=\"confirm()\"\n />\n </div>\n</ng-container>\n","import { DatePipe } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n inject,\n input,\n} from '@angular/core';\nimport { TranslocoDirective, TranslocoService } from '@jsverse/transloco';\nimport { Button } from '@masterteam/components/button';\nimport { ModalRef } from '@masterteam/components/dialog';\nimport { ModalService } from '@masterteam/components/modal';\nimport { take } from 'rxjs';\nimport { EmailDeliveryStatus } from '../../components/email-delivery-status/email-delivery-status';\nimport {\n EmailOperatorReasonDialog,\n type EmailOperatorDecision,\n} from '../operator-reason/email-operator-reason-dialog';\nimport { EmailDeliveryFacade } from '../../email-delivery.facade';\nimport {\n isConnectionTestAttempt,\n type EmailDeliveryAttempt,\n} from '../../email-delivery.model';\n\n@Component({\n selector: 'mt-email-attempt-details',\n imports: [DatePipe, TranslocoDirective, Button, EmailDeliveryStatus],\n templateUrl: './email-attempt-details.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class EmailAttemptDetails {\n readonly attempt = input.required<EmailDeliveryAttempt>();\n\n private readonly ref = inject(ModalRef);\n private readonly transloco = inject(TranslocoService);\n protected readonly modal = inject(ModalService);\n protected readonly facade = inject(EmailDeliveryFacade);\n\n protected isConnectionTest(): boolean {\n return isConnectionTestAttempt(this.attempt());\n }\n\n /**\n * A controlled test is an operator action against one connection, not product\n * work the platform owes anyone — replaying it would send a second real email\n * nobody asked for, so the backend's test rows are never replayable.\n */\n protected canReplay(): boolean {\n if (this.isConnectionTest()) return false;\n return [\n 'Blocked',\n 'RetryScheduled',\n 'Accepted',\n 'FailedPermanent',\n 'DeadLettered',\n 'OutcomeUnknown',\n ].includes(this.attempt().status);\n }\n\n protected providerLabel(providerKey: string | null | undefined): string {\n return (\n this.facade.providerByKey(providerKey)?.displayName ?? providerKey ?? '—'\n );\n }\n\n protected replay(): void {\n const attempt = this.attempt();\n const dialog = this.modal.openModal(EmailOperatorReasonDialog, 'dialog', {\n header: this.t('replay-attempt'),\n styleClass: '!w-[36rem] max-w-[96vw]',\n dismissible: true,\n inputValues: {\n itemName: attempt.id,\n consequence: isExceptionalReplay(attempt.status)\n ? this.t('replay-exceptional-warning')\n : this.t('replay-warning'),\n showExceptionalOverride: isExceptionalReplay(attempt.status),\n confirmLabel: this.t('replay-attempt'),\n },\n });\n dialog.onClose\n .pipe(take(1))\n .subscribe((decision: EmailOperatorDecision) => {\n if (!decision) return;\n this.facade\n .replayAttempt(attempt, {\n concurrencyToken: attempt.concurrencyToken,\n exceptionalOverride: decision.exceptionalOverride,\n reason: decision.reason,\n })\n .subscribe({\n next: (result) => this.ref.close(result.attempt),\n error: (error) => this.facade.showError(error),\n });\n });\n }\n\n protected close(): void {\n this.ref.close();\n }\n\n private t(key: string): string {\n return this.transloco.translate(`email-delivery.${key}`);\n }\n}\n\nfunction isExceptionalReplay(status: string): boolean {\n return status === 'Accepted' || status === 'OutcomeUnknown';\n}\n","<ng-container *transloco=\"let t; prefix: 'email-delivery'\">\n @if (attempt(); as item) {\n <div [class]=\"'min-h-0 overflow-y-auto p-4 sm:p-5 ' + modal.contentClass\">\n <div class=\"grid w-full gap-5\">\n <div\n class=\"rounded-md border px-4 py-3 text-sm\"\n [class.border-amber-200]=\"item.status === 'OutcomeUnknown'\"\n [class.bg-amber-50]=\"item.status === 'OutcomeUnknown'\"\n [class.border-blue-200]=\"item.status !== 'OutcomeUnknown'\"\n [class.bg-blue-50]=\"item.status !== 'OutcomeUnknown'\"\n role=\"status\"\n >\n @if (item.status === \"OutcomeUnknown\") {\n {{ t(\"outcome-unknown-copy\") }}\n } @else if (item.outcome === \"Accepted\") {\n {{ t(\"accepted-copy\") }}\n } @else {\n {{ facade.describeCode(item.resultCode) }}\n }\n </div>\n\n <!-- Same section shape the connection form uses (mt-client-form section\n mode): header strip on a bordered, flat, rounded-md container. -->\n <section\n class=\"flex flex-col gap-0 overflow-hidden rounded-md border border-surface-200 bg-surface-0\"\n >\n <h3\n class=\"m-0 border-b border-surface-200 bg-surface-50 px-4 py-3 text-lg font-semibold text-color\"\n >\n {{ t(\"delivery-summary\") }}\n </h3>\n <dl class=\"grid gap-3 p-4 sm:grid-cols-2\">\n <div class=\"rounded-md border border-surface-200 bg-surface-50 p-3\">\n <dt class=\"text-xs text-muted-color\">\n {{ t(\"attempt.operation\") }}\n </dt>\n <dd class=\"mb-0 mt-1 break-words font-medium text-color\">\n {{\n isConnectionTest()\n ? t(\"operation.connection-test\")\n : item.operationKind\n }}\n </dd>\n </div>\n <div class=\"rounded-md border border-surface-200 bg-surface-50 p-3\">\n <dt class=\"text-xs text-muted-color\">\n {{ t(\"attempt.status\") }}\n </dt>\n <dd class=\"mb-0 mt-2\">\n <mt-email-delivery-status\n kind=\"attempt\"\n [value]=\"item.status\"\n />\n </dd>\n </div>\n <div class=\"rounded-md border border-surface-200 bg-surface-50 p-3\">\n <dt class=\"text-xs text-muted-color\">\n {{ t(\"attempt.outcome\") }}\n </dt>\n <dd class=\"mb-0 mt-2\">\n @if (item.outcome) {\n <mt-email-delivery-status\n kind=\"attempt\"\n [value]=\"item.outcome\"\n />\n } @else {\n <span class=\"font-medium text-color\">—</span>\n }\n </dd>\n </div>\n <div class=\"rounded-md border border-surface-200 bg-surface-50 p-3\">\n <dt class=\"text-xs text-muted-color\">\n {{ t(\"attempt.provider\") }}\n </dt>\n <dd class=\"mb-0 mt-1 break-words font-medium text-color\">\n {{ providerLabel(item.providerKey) }}\n </dd>\n </div>\n <div class=\"rounded-md border border-surface-200 bg-surface-50 p-3\">\n <dt class=\"text-xs text-muted-color\">\n {{ t(\"attempt.created\") }}\n </dt>\n <dd class=\"mb-0 mt-1 font-medium text-color\">\n <time [attr.datetime]=\"item.createdAtUtc\">{{\n item.createdAtUtc | date: \"medium\"\n }}</time>\n </dd>\n </div>\n <div class=\"rounded-md border border-surface-200 bg-surface-50 p-3\">\n <dt class=\"text-xs text-muted-color\">\n {{ t(\"attempt.count\") }}\n </dt>\n <dd class=\"mb-0 mt-1 font-medium text-color\">\n {{ item.attemptCount }}\n </dd>\n </div>\n </dl>\n </section>\n\n <section\n class=\"flex flex-col gap-0 overflow-hidden rounded-md border border-surface-200 bg-surface-0\"\n >\n <h3\n class=\"m-0 border-b border-surface-200 bg-surface-50 px-4 py-3 text-lg font-semibold text-color\"\n >\n {{ t(\"technical-identifiers\") }}\n </h3>\n <dl class=\"grid gap-3 p-4 sm:grid-cols-2\">\n <div class=\"rounded-md border border-surface-200 bg-surface-50 p-3\">\n <dt class=\"text-xs text-muted-color\">\n {{ t(\"recipient-fingerprint\") }}\n </dt>\n <dd class=\"mb-0 mt-1 break-all font-mono text-sm text-color\">\n {{ item.recipientFingerprint }}\n </dd>\n <p class=\"mt-2 text-xs text-muted-color\">\n {{ t(\"recipient-fingerprint-hint\") }}\n </p>\n </div>\n @if (item.testRequestId) {\n <div\n class=\"rounded-md border border-surface-200 bg-surface-50 p-3\"\n >\n <dt class=\"text-xs text-muted-color\">\n {{ t(\"test-request-id\") }}\n </dt>\n <dd class=\"mb-0 mt-1 break-all font-mono text-sm text-color\">\n {{ item.testRequestId }}\n </dd>\n </div>\n }\n <div class=\"rounded-md border border-surface-200 bg-surface-50 p-3\">\n <dt class=\"text-xs text-muted-color\">{{ t(\"attempt.id\") }}</dt>\n <dd class=\"mb-0 mt-1 break-all font-mono text-sm text-color\">\n {{ item.id }}\n </dd>\n </div>\n @if (item.correlationId) {\n <div\n class=\"rounded-md border border-surface-200 bg-surface-50 p-3\"\n >\n <dt class=\"text-xs text-muted-color\">\n {{ t(\"correlation-id\") }}\n </dt>\n <dd class=\"mb-0 mt-1 break-all font-mono text-sm text-color\">\n {{ item.correlationId }}\n </dd>\n </div>\n }\n @if (item.providerRequestId) {\n <div\n class=\"rounded-md border border-surface-200 bg-surface-50 p-3\"\n >\n <dt class=\"text-xs text-muted-color\">\n {{ t(\"provider-request-id\") }}\n </dt>\n <dd class=\"mb-0 mt-1 break-all font-mono text-sm text-color\">\n {{ item.providerRequestId }}\n </dd>\n </div>\n }\n </dl>\n </section>\n </div>\n </div>\n\n <div [class]=\"modal.footerClass\">\n <mt-button\n [label]=\"t('close')\"\n variant=\"outlined\"\n styleClass=\"w-full sm:w-auto\"\n (onClick)=\"close()\"\n />\n @if (canReplay()) {\n <mt-button\n severity=\"warn\"\n icon=\"arrow.refresh-cw-01\"\n [label]=\"t('replay-attempt')\"\n [disabled]=\"!facade.managementAvailable()\"\n [loading]=\"facade.mutationLoading() === 'replay-' + item.id\"\n styleClass=\"w-full sm:w-auto\"\n (onClick)=\"replay()\"\n />\n }\n </div>\n }\n</ng-container>\n","/**\n * Shared chrome for the Email Delivery overlays.\n *\n * Every drawer on this page opens over the page content (`appendTo:\n * 'page-content'`), so it is positioned absolutely and drops its own shadow.\n * It takes the full width only while there is no room to spare — from `lg` up\n * it settles at half the page so the table stays readable behind it, which is\n * also what keeps the forms and callouts inside from stretching into\n * unreadably long lines.\n */\nexport const EMAIL_DELIVERY_DRAWER_STYLE_CLASS =\n '!absolute !shadow-none !w-full !max-w-full md:!w-[70%] lg:!w-[50%]';\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n OnInit,\n signal,\n} from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { TranslocoDirective, TranslocoService } from '@jsverse/transloco';\nimport { Button } from '@masterteam/components/button';\nimport { ModalService } from '@masterteam/components/modal';\nimport {\n Table,\n type ColumnDef,\n type TableAction,\n type TableFilters,\n} from '@masterteam/components/table';\nimport { take } from 'rxjs';\nimport { getEmailDeliveryStatusMap } from '../../components/email-delivery-status/email-delivery-status';\nimport { EmailAttemptDetails } from '../../dialogs/attempt-details/email-attempt-details';\nimport { EmailDeliveryFacade } from '../../email-delivery.facade';\nimport { EMAIL_DELIVERY_DRAWER_STYLE_CLASS } from '../../email-delivery.ui';\nimport {\n EMAIL_DELIVERY_ATTEMPT_STATUSES,\n isConnectionTestAttempt,\n type EmailDeliveryAttempt,\n} from '../../email-delivery.model';\n\n@Component({\n selector: 'mt-email-delivery-attempts',\n imports: [TranslocoDirective, Button, Table],\n templateUrl: './email-delivery-attempts.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class EmailDeliveryAttempts implements OnInit {\n private readonly modal = inject(ModalService);\n private readonly transloco = inject(TranslocoService);\n protected readonly facade = inject(EmailDeliveryFacade);\n private readonly activeLanguage = toSignal(this.transloco.langChanges$, {\n initialValue: this.transloco.getActiveLang(),\n });\n\n /**\n * Status is the one filter the backend understands (`?status=`), so it is\n * held here and round-tripped into the query; every other column filters the\n * rows already loaded.\n */\n protected readonly tableFilters = signal<TableFilters>({});\n\n /**\n * Activity mixes product sends with the operator's own controlled tests. The\n * table renders plain fields, so the labels are projected onto the row here;\n * the extra properties are inert everywhere the raw attempt is used.\n */\n protected readonly rows = computed<AttemptRow[]>(() => {\n this.activeLanguage();\n return this.facade.attempts().map((attempt) => ({\n ...attempt,\n operationLabel: this.operationLabel(attempt),\n providerLabel:\n this.facade.providerByKey(attempt.providerKey)?.displayName ??\n attempt.providerKey ??\n '—',\n resultLabel: attempt.resultCode\n ? this.facade.describeCode(attempt.resultCode)\n : '—',\n recipientFingerprintShort: shortenFingerprint(\n attempt.recipientFingerprint,\n ),\n }));\n });\n protected readonly columns = computed<ColumnDef[]>(() => {\n this.activeLanguage();\n const statusMap = getEmailDeliveryStatusMap(\n 'attempt',\n this.transloco.translate.bind(this.transloco),\n );\n return [\n {\n key: 'status',\n label: this.t('attempt.status'),\n type: 'status',\n width: '15rem',\n statusMap,\n filterConfig: {\n type: 'select',\n multiple: false,\n options: EMAIL_DELIVERY_ATTEMPT_STATUSES.map((value) => ({\n label: statusMap[value]?.display ?? value,\n value,\n })),\n },\n },\n {\n key: 'operationLabel',\n label: this.t('attempt.operation'),\n width: '14rem',\n filterConfig: {\n type: 'select',\n options: this.distinctOptions((row) => row.operationLabel),\n },\n },\n {\n key: 'providerLabel',\n label: this.t('attempt.provider'),\n width: '15rem',\n filterConfig: {\n type: 'select',\n options: this.distinctOptions((row) => row.providerLabel),\n },\n },\n {\n key: 'resultLabel',\n label: this.t('attempt.result'),\n filterConfig: { type: 'text' },\n },\n {\n key: 'recipientFingerprintShort',\n label: this.t('recipient-fingerprint'),\n width: '15rem',\n filterable: false,\n },\n {\n key: 'createdAtUtc',\n label: this.t('attempt.created'),\n type: 'dateTime',\n width: '10rem',\n filterConfig: { type: 'date' },\n },\n {\n key: 'attemptCount',\n label: this.t('attempt.count'),\n type: 'number',\n width: '7rem',\n },\n ];\n });\n protected readonly actions = computed<TableAction[]>(() => {\n this.activeLanguage();\n return [\n {\n icon: 'general.eye',\n label: this.t('view-details'),\n action: (row) => this.openDetails(row as EmailDeliveryAttempt),\n },\n ];\n });\n\n ngOnInit(): void {\n this.load(true);\n }\n\n /**\n * Only the status filter reaches the backend; the rest narrow the rows the\n * table already holds, so nothing else needs a round trip.\n */\n protected onFiltersChange(filters: TableFilters): void {\n this.tableFilters.set(filters);\n const status = readStatusFilter(filters['status']);\n if (status === this.facade.attemptStatusFilter()) return;\n this.load(true, status);\n }\n\n protected refresh(): void {\n this.load(true);\n }\n\n protected loadMore(): void {\n this.load(false);\n }\n\n protected openDetails(attempt: EmailDeliveryAttempt): void {\n const ref = this.modal.openModal(EmailAttemptDetails, 'drawer', {\n header: this.t('attempt-details'),\n styleClass: EMAIL_DELIVERY_DRAWER_STYLE_CLASS,\n position: 'end',\n appendTo: 'page-content',\n dismissableMask: true,\n dismissible: true,\n inputValues: { attempt },\n });\n ref.onClose.pipe(take(1)).subscribe((updated: EmailDeliveryAttempt) => {\n if (updated) this.load(true);\n });\n }\n\n private load(\n reset: boolean,\n status = this.facade.attemptStatusFilter(),\n ): void {\n this.facade.loadAttempts(reset, status).subscribe({\n error: (error) => this.facade.showError(error),\n });\n }\n\n /**\n * Select filters over locally-filtered columns only offer values that are\n * actually present, so the operator never picks an option that empties the\n * table.\n */\n private distinctOptions(\n select: (row: AttemptRow) => string,\n ): { label: string; value: string }[] {\n const values = new Set(this.rows().map(select).filter(Boolean));\n return Array.from(values)\n .sort((left, right) => left.localeCompare(right))\n .map((value) => ({ label: value, value }));\n }\n\n /**\n * Controlled tests are always shown as \"Connection test\"; anything else falls\n * back to the backend's own operation kind rather than a guessed label.\n */\n private operationLabel(attempt: EmailDeliveryAttempt): string {\n return isConnectionTestAttempt(attempt)\n ? this.t('operation.connection-test')\n : attempt.operationKind;\n }\n\n private t(key: string): string {\n return this.transloco.translate(`email-delivery.${key}`);\n }\n}\n\ninterface AttemptRow extends EmailDeliveryAttempt {\n operationLabel: string;\n providerLabel: string;\n resultLabel: string;\n recipientFingerprintShort: string;\n}\n\n/**\n * The status column is a single-select, so its stored value is the raw status.\n * An empty selection clears the backend filter rather than sending a blank.\n */\nfunction readStatusFilter(value: unknown): string | null {\n const raw = Array.isArray(value) ? value[0] : value;\n return typeof raw === 'string' && raw.trim() !== '' ? raw : null;\n}\n\nconst FINGERPRINT_PREFIX_LENGTH = 12;\n\n/**\n * A 64-character hash has nowhere to wrap, so rendering it whole pushed its\n * column far past the width the table asked for. The list only needs enough of\n * it to tell two recipients apart; the drawer still shows the value in full.\n */\nfunction shortenFingerprint(value: string | null): string {\n if (!value) return '—';\n return value.length > FINGERPRINT_PREFIX_LENGTH\n ? value.slice(0, FINGERPRINT_PREFIX_LENGTH) + '…'\n : value;\n}\n","<ng-container *transloco=\"let t; prefix: 'email-delivery'\">\n <section class=\"space-y-4\" aria-label=\"{{ t('activity-title') }}\">\n <mt-table\n [data]=\"rows()\"\n [columns]=\"columns()\"\n [rowActions]=\"actions()\"\n [filters]=\"tableFilters()\"\n [loading]=\"facade.attemptsLoading()\"\n [generalSearch]=\"true\"\n [showFilters]=\"true\"\n [emptyTitle]=\"t('no-attempts-title')\"\n [emptyDescription]=\"t('no-attempts-description')\"\n filterMode=\"column\"\n dataKey=\"id\"\n actionShape=\"popover\"\n [clickableRows]=\"true\"\n storageKey=\"email-delivery-attempts\"\n (filtersChange)=\"onFiltersChange($event)\"\n (rowClick)=\"openDetails($event)\"\n >\n <ng-template #captionEnd>\n <mt-button\n severity=\"secondary\"\n variant=\"outlined\"\n icon=\"arrow.refresh-cw-01\"\n [label]=\"t('refresh')\"\n [loading]=\"facade.attemptsLoading()\"\n (onClick)=\"refresh()\"\n />\n </ng-template>\n </mt-table>\n\n @if (facade.attemptsNextCursor()) {\n <div class=\"flex justify-center\">\n <mt-button\n severity=\"secondary\"\n variant=\"outlined\"\n [label]=\"t('load-more')\"\n [loading]=\"facade.attemptsLoading()\"\n (onClick)=\"loadMore()\"\n />\n </div>\n }\n </section>\n</ng-container>\n","import { DOCUMENT } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n OnInit,\n} from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { TranslocoDirective, TranslocoService } from '@jsverse/transloco';\nimport { Button } from '@masterteam/components/button';\nimport { ConfirmationService } from '@masterteam/components/confirmation';\nimport type { EntityData } from '@masterteam/components/entities';\nimport { ModalService } from '@masterteam/components/modal';\nimport {\n Table,\n type ColumnDef,\n type TableAction,\n} from '@masterteam/components/table';\nimport { take } from 'rxjs';\nimport { getEmailDeliveryStatusMap } from '../../components/email-delivery-status/email-delivery-status';\nimport {\n EmailOperatorReasonDialog,\n type EmailOperatorDecision,\n} from '../../dialogs/operator-reason/email-operator-reason-dialog';\nimport { EmailDeliveryFacade } from '../../email-delivery.facade';\nimport type { EmailHostEvidenceItem } from '../../email-delivery.model';\n\n@Component({\n selector: 'mt-email-delivery-host-evidence',\n imports: [TranslocoDirective, Button, Table],\n templateUrl: './email-delivery-host-evidence.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class EmailDeliveryHostEvidence implements OnInit {\n private readonly document = inject(DOCUMENT);\n private readonly modal = inject(ModalService);\n private readonly confirmation = inject(ConfirmationService);\n private readonly transloco = inject(TranslocoService);\n protected readonly facade = inject(EmailDeliveryFacade);\n private readonly activeLanguage = toSignal(this.transloco.langChanges$, {\n initialValue: this.transloco.getActiveLang(),\n });\n protected readonly rows = computed(() =>\n this.facade.hostEvidence().map((item) => ({\n ...item,\n evidenceRowId: item.evidenceOccurrenceId ?? item.itemId,\n evidenceKindLabel: humanizeIdentifier(item.evidenceKind),\n evidenceOccurrenceIdentity: identifierEntity(item.evidenceOccurrenceId),\n errorLabel: this.facade.describeCode(item.errorCode),\n })),\n );\n protected readonly columns = computed<ColumnDef[]>(() => {\n this.activeLanguage();\n const statusMap = getEmailDeliveryStatusMap(\n 'support',\n this.transloco.translate.bind(this.transloco),\n );\n return [\n {\n key: 'evidenceKindLabel',\n label: this.t('evidence-kind'),\n width: '11rem',\n },\n {\n key: 'resolutionState',\n label: this.t('resolution-state'),\n type: 'status',\n width: '12rem',\n statusMap,\n },\n {\n key: 'ownershipState',\n label: this.t('ownership-state'),\n type: 'status',\n width: '11rem',\n statusMap,\n },\n {\n key: 'detectedAtUtc',\n label: this.t('detected'),\n type: 'dateTime',\n width: '10rem',\n },\n { key: 'errorLabel', label: this.t('issue') },\n {\n key: 'evidenceOccurrenceIdentity',\n label: this.t('evidence-occurrence-id'),\n type: 'entity',\n width: '15rem',\n shrink: true,\n },\n ];\n });\n protected readonly actions = computed<TableAction[]>(() => {\n this.activeLanguage();\n return [\n {\n icon: 'general.download-01',\n label: this.t('export'),\n hidden: (row) => {\n const item = row as EmailHostEvidenceItem;\n return !item.canExport || !item.evidenceOccurrenceId;\n },\n action: (row) => this.export(row as EmailHostEvidenceItem),\n },\n {\n icon: 'general.tool-02',\n label: this.t('repair'),\n hidden: (row) =>\n !this.facade.managementAvailable() ||\n !(row as EmailHostEvidenceItem).canRepair ||\n !(row as EmailHostEvidenceItem).evidenceOccurrenceId ||\n !(row as EmailHostEvidenceItem).decisionToken,\n action: (row) => this.decide(row as EmailHostEvidenceItem, 'repair'),\n },\n {\n icon: 'general.check-circle',\n label: this.t('acknowledge'),\n color: 'danger',\n hidden: (row) =>\n !this.facade.managementAvailable() ||\n !(row as EmailHostEvidenceItem).evidenceOccurrenceId ||\n !(row as EmailHostEvidenceItem).decisionToken,\n action: (row) =>\n this.decide(row as EmailHostEvidenceItem, 'acknowledge'),\n },\n ];\n });\n\n ngOnInit(): void {\n if (this.facade.hostEvidence().length === 0) this.load(true);\n }\n\n protected export(item: EmailHostEvidenceItem): void {\n if (!item.evidenceOccurrenceId) return;\n this.facade.exportHostEvidence(item.evidenceOccurrenceId).subscribe({\n next: (download) => {\n const url = URL.createObjectURL(download.blob);\n const anchor = this.document.createElement('a');\n anchor.href = url;\n anchor.download = download.fileName;\n anchor.rel = 'noopener';\n anchor.click();\n URL.revokeObjectURL(url);\n },\n error: (error) => this.facade.showError(error),\n });\n }\n\n protected decide(\n item: EmailHostEvidenceItem,\n action: 'repair' | 'acknowledge',\n ): void {\n if (!item.evidenceOccurrenceId || !item.decisionToken) return;\n const dialog = this.modal.openModal(EmailOperatorReasonDialog, 'dialog', {\n header: this.t(\n action === 'repair' ? 'repair-evidence' : 'acknowledge-evidence',\n ),\n styleClass: '!w-[36rem] max-w-[96vw]',\n dismissible: true,\n inputValues: {\n itemName: item.evidenceOccurrenceId,\n consequence: this.t(\n action === 'repair'\n ? 'evidence-repair-warning'\n : 'evidence-acknowledge-warning',\n ),\n confirmLabel: this.t(action),\n },\n });\n dialog.onClose\n .pipe(take(1))\n .subscribe((decision: EmailOperatorDecision) => {\n if (!decision) return;\n this.facade\n .decideHostEvidence(item, action, decision.reason)\n .subscribe({\n error: (error) => {\n this.facade.showError(error);\n this.load(true);\n },\n });\n });\n }\n\n protected confirmRebuild(): void {\n this.confirmation.confirm({\n type: 'dialog',\n header: this.t('rebuild-evidence-index'),\n message: this.t('rebuild-evidence-warning'),\n accept: () =>\n this.facade.rebuildEvidenceIndex(200).subscribe({\n error: (error) => this.facade.showError(error),\n }),\n });\n }\n\n protected loadMore(): void {\n this.load(false);\n }\n\n private load(reset: boolean): void {\n this.facade.loadHostEvidence(reset).subscribe({\n error: (error) => this.facade.showError(error),\n });\n }\n\n private t(key: string): string {\n return this.transloco.translate(`email-delivery.${key}`);\n }\n}\n\nfunction identifierEntity(value: string | null): EntityData {\n return {\n name: '',\n viewType: 'Text',\n value: value ?? '—',\n configuration: { hideName: true },\n };\n}\n\nfunction humanizeIdentifier(value: string): string {\n return value\n .replace(/[._-]+/g, ' ')\n .replace(/([a-z0-9])([A-Z])/g, '$1 $2')\n .replace(/\\s+/g, ' ')\n .trim()\n .replace(/^./, (character) => character.toUpperCase())\n .replace(/\\bSmtp\\b/g, 'SMTP')\n .replace(/\\bTls\\b/g, 'TLS')\n .replace(/\\bOauth2?\\b/gi, 'OAuth2')\n .replace(/\\bHttp\\b/g, 'HTTP')\n .replace(/\\bApi\\b/g, 'API');\n}\n","<ng-container *transloco=\"let t; prefix: 'email-delivery'\">\n <section class=\"space-y-3\" aria-labelledby=\"host-evidence-heading\">\n <div\n class=\"flex flex-col gap-3 sm:flex-row sm:items-start sm:justify-between\"\n >\n <div>\n <h3 id=\"host-evidence-heading\" class=\"font-semibold text-color\">\n {{ t(\"host-evidence-title\") }}\n </h3>\n <p class=\"mt-1 text-sm text-muted-color\">\n {{ t(\"host-evidence-description\") }}\n </p>\n </div>\n <mt-button\n severity=\"secondary\"\n variant=\"outlined\"\n icon=\"arrow.refresh-cw-01\"\n [label]=\"t('rebuild-evidence-index')\"\n [disabled]=\"!facade.managementAvailable()\"\n [loading]=\"facade.mutationLoading() === 'rebuild-evidence'\"\n (onClick)=\"confirmRebuild()\"\n />\n </div>\n\n @if (facade.hostEvidenceScanBudgetExhausted()) {\n <div\n class=\"rounded-md border border-amber-200 bg-amber-50 p-3 text-sm text-amber-950\"\n role=\"status\"\n >\n {{ t(\"scan-budget-exhausted\") }}\n </div>\n }\n\n <mt-table\n [data]=\"rows()\"\n [columns]=\"columns()\"\n [rowActions]=\"actions()\"\n [loading]=\"facade.hostEvidenceLoading()\"\n [generalSearch]=\"true\"\n [showFilters]=\"true\"\n [emptyTitle]=\"t('no-evidence-title')\"\n [emptyDescription]=\"t('no-evidence-description')\"\n filterMode=\"column\"\n actionShape=\"popover\"\n dataKey=\"evidenceRowId\"\n storageKey=\"email-delivery-host-evidence\"\n />\n\n @if (facade.hostEvidenceNextCursor()) {\n <div class=\"flex justify-center\">\n <mt-button\n severity=\"secondary\"\n variant=\"outlined\"\n [label]=\"t('load-more')\"\n [loading]=\"facade.hostEvidenceLoading()\"\n (onClick)=\"loadMore()\"\n />\n </div>\n }\n </section>\n</ng-container>\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n OnInit,\n} from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { TranslocoDirective, TranslocoService } from '@jsverse/transloco';\nimport { Button } from '@masterteam/components/button';\nimport type { EntityData } from '@masterteam/components/entities';\nimport { ModalService } from '@masterteam/components/modal';\nimport {\n Table,\n type ColumnDef,\n type TableAction,\n} from '@masterteam/components/table';\nimport { take } from 'rxjs';\nimport { getEmailDeliveryStatusMap } from '../../components/email-delivery-status/email-delivery-status';\nimport {\n EmailOperatorReasonDialog,\n type EmailOperatorDecision,\n} from '../../dialogs/operator-reason/email-operator-reason-dialog';\nimport { EmailDeliveryFacade } from '../../email-delivery.facade';\nimport type { EmailFinalizationQuarantineItem } from '../../email-delivery.model';\n\n@Component({\n selector: 'mt-email-delivery-quarantine',\n imports: [TranslocoDirective, Button, Table],\n templateUrl: './email-delivery-quarantine.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class EmailDeliveryQuarantine implements OnInit {\n private readonly modal = inject(ModalService);\n private readonly transloco = inject(TranslocoService);\n protected readonly facade = inject(EmailDeliveryFacade);\n private readonly activeLanguage = toSignal(this.transloco.langChanges$, {\n initialValue: this.transloco.getActiveLang(),\n });\n protected readonly rows = computed(() =>\n this.facade.quarantine().map((item) => ({\n ...item,\n attemptIdentity: identifierEntity(item.attemptId),\n errorLabel: this.facade.describeCode(item.errorCode),\n })),\n );\n protected readonly columns = computed<ColumnDef[]>(() => {\n this.activeLanguage();\n return [\n {\n key: 'attemptIdentity',\n label: this.t('attempt.id'),\n type: 'entity',\n width: '15rem',\n shrink: true,\n },\n {\n key: 'recoveryClassification',\n label: this.t('recovery-classification'),\n type: 'status',\n width: '12rem',\n statusMap: getEmailDeliveryStatusMap(\n 'support',\n this.transloco.translate.bind(this.transloco),\n ),\n },\n { key: 'errorLabel', label: this.t('issue') },\n {\n key: 'quarantinedAtUtc',\n label: this.t('detected'),\n type: 'dateTime',\n width: '10rem',\n },\n ];\n });\n protected readonly actions = computed<TableAction[]>(() => {\n this.activeLanguage();\n return [\n {\n icon: 'arrow.refresh-cw-01',\n label: this.t('retry'),\n hidden: (row) =>\n !this.facade.managementAvailable() ||\n (row as EmailFinalizationQuarantineItem).recoveryClassification !==\n 'retryable-after-upgrade',\n action: (row) =>\n this.decide(row as EmailFinalizationQuarantineItem, 'retry'),\n },\n {\n icon: 'general.check-circle',\n label: this.t('acknowledge'),\n color: 'danger',\n hidden: () => !this.facade.managementAvailable(),\n action: (row) =>\n this.decide(row as EmailFinalizationQuarantineItem, 'acknowledge'),\n },\n ];\n });\n\n ngOnInit(): void {\n if (this.facade.quarantine().length === 0) this.load(true);\n }\n\n protected decide(\n item: EmailFinalizationQuarantineItem,\n action: 'retry' | 'acknowledge',\n ): void {\n const dialog = this.modal.openModal(EmailOperatorReasonDialog, 'dialog', {\n header: this.t(\n action === 'retry' ? 'retry-quarantine' : 'acknowledge-quarantine',\n ),\n styleClass: '!w-[36rem] max-w-[96vw]',\n dismissible: true,\n inputValues: {\n itemName: item.itemId,\n consequence: this.t(\n action === 'retry'\n ? 'quarantine-retry-warning'\n : 'quarantine-acknowledge-warning',\n ),\n confirmLabel: this.t(action),\n },\n });\n dialog.onClose\n .pipe(take(1))\n .subscribe((decision: EmailOperatorDecision) => {\n if (!decision) return;\n this.facade.decideQuarantine(item, action, decision.reason).subscribe({\n error: (error) => this.facade.showError(error),\n });\n });\n }\n\n protected loadMore(): void {\n this.load(false);\n }\n\n private load(reset: boolean): void {\n this.facade.loadQuarantine(reset).subscribe({\n error: (error) => this.facade.showError(error),\n });\n }\n\n private t(key: string): string {\n return this.transloco.translate(`email-delivery.${key}`);\n }\n}\n\nfunction identifierEntity(value: string | null): EntityData {\n return {\n name: '',\n viewType: 'Text',\n value: value ?? '—',\n configuration: { hideName: true },\n };\n}\n","<ng-container *transloco=\"let t; prefix: 'email-delivery'\">\n <section class=\"space-y-3\" aria-labelledby=\"quarantine-heading\">\n <div>\n <h3 id=\"quarantine-heading\" class=\"font-semibold text-color\">\n {{ t(\"quarantine-title\") }}\n </h3>\n <p class=\"mt-1 text-sm text-muted-color\">\n {{ t(\"quarantine-description\") }}\n </p>\n </div>\n\n <mt-table\n [data]=\"rows()\"\n [columns]=\"columns()\"\n [rowActions]=\"actions()\"\n [loading]=\"facade.quarantineLoading()\"\n [generalSearch]=\"true\"\n [showFilters]=\"true\"\n [emptyTitle]=\"t('no-quarantine-title')\"\n [emptyDescription]=\"t('no-quarantine-description')\"\n filterMode=\"column\"\n actionShape=\"popover\"\n dataKey=\"itemId\"\n storageKey=\"email-delivery-quarantine\"\n />\n\n @if (facade.quarantineNextCursor()) {\n <div class=\"flex justify-center\">\n <mt-button\n severity=\"secondary\"\n variant=\"outlined\"\n [label]=\"t('load-more')\"\n [loading]=\"facade.quarantineLoading()\"\n (onClick)=\"loadMore()\"\n />\n </div>\n }\n </section>\n</ng-container>\n","import { ChangeDetectionStrategy, Component, signal } from '@angular/core';\r\nimport { TranslocoDirective } from '@jsverse/transloco';\r\nimport { Icon } from '@masterteam/icons';\r\nimport { EmailDeliveryAttempts } from '../attempts/email-delivery-attempts';\r\nimport { EmailDeliveryHostEvidence } from '../host-evidence/email-delivery-host-evidence';\r\nimport { EmailDeliveryQuarantine } from '../quarantine/email-delivery-quarantine';\r\n\r\n@Component({\r\n selector: 'mt-email-delivery-activity',\r\n imports: [\r\n TranslocoDirective,\r\n Icon,\r\n EmailDeliveryAttempts,\r\n EmailDeliveryQuarantine,\r\n EmailDeliveryHostEvidence,\r\n ],\r\n templateUrl: './email-delivery-activity.html',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class EmailDeliveryActivity {\r\n protected readonly advancedExpanded = signal(false);\r\n\r\n protected onAdvancedToggle(event: Event): void {\r\n this.advancedExpanded.set((event.currentTarget as HTMLDetailsElement).open);\r\n }\r\n}\r\n","<ng-container *transloco=\"let t; prefix: 'email-delivery'\">\n <div class=\"grid gap-5\">\n <mt-email-delivery-attempts class=\"block min-w-0\" />\n\n <!-- Operator recovery tools. Kept collapsed and visually quieter than the\n Activity table above it: they are for incident work, not daily use. -->\n <details\n class=\"group overflow-hidden rounded-md border border-surface-200 bg-surface-0\"\n (toggle)=\"onAdvancedToggle($event)\"\n >\n <summary\n class=\"flex cursor-pointer list-none items-center gap-3 p-4 focus-visible:outline-2 focus-visible:outline-offset-2\"\n >\n <span\n class=\"inline-flex size-9 shrink-0 items-center justify-center rounded-md bg-surface-100 text-muted-color\"\n >\n <mt-icon icon=\"general.tool-02\" aria-hidden=\"true\" />\n </span>\n <span class=\"min-w-0 flex-1\">\n <span class=\"block font-semibold text-color\">\n {{ t(\"advanced-support\") }}\n </span>\n <span class=\"mt-0.5 block text-sm font-normal text-muted-color\">\n {{ t(\"advanced-support-description\") }}\n </span>\n </span>\n <mt-icon\n icon=\"arrow.chevron-down\"\n aria-hidden=\"true\"\n class=\"shrink-0 text-base text-muted-color transition-transform group-open:rotate-180\"\n />\n </summary>\n @if (advancedExpanded()) {\n <div\n class=\"grid gap-4 border-t border-surface-200 bg-surface-50/60 p-4 sm:p-5\"\n >\n <mt-email-delivery-quarantine class=\"block min-w-0\" />\n <mt-email-delivery-host-evidence class=\"block min-w-0\" />\n </div>\n }\n </details>\n </div>\n</ng-container>\n","import { HttpErrorResponse } from '@angular/common/http';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n DestroyRef,\n inject,\n input,\n signal,\n} from '@angular/core';\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\nimport { takeUntilDestroyed, toSignal } from '@angular/core/rxjs-interop';\nimport { TranslocoDirective, TranslocoService } from '@jsverse/transloco';\nimport {\n DynamicFormConfig,\n TextareaFieldConfig,\n TextFieldConfig,\n ToggleFieldConfig,\n ValidatorConfig,\n} from '@masterteam/components';\nimport { Button } from '@masterteam/components/button';\nimport { ModalRef } from '@masterteam/components/dialog';\nimport { ModalService } from '@masterteam/components/modal';\nimport { DynamicForm } from '@masterteam/forms/dynamic-form';\nimport { timer } from 'rxjs';\nimport { EmailDeliveryStatus } from '../../components/email-delivery-status/email-delivery-status';\nimport { EmailDeliveryFacade } from '../../email-delivery.facade';\nimport type { EmailSendResult } from '../../email-delivery.model';\n\ninterface ControlledTestFormValue {\n recipients: string | null;\n subject: string | null;\n body: string | null;\n isHtml: boolean;\n}\n\n@Component({\n selector: 'mt-email-controlled-test-dialog',\n imports: [\n ReactiveFormsModule,\n TranslocoDirective,\n DynamicForm,\n Button,\n EmailDeliveryStatus,\n ],\n templateUrl: './email-controlled-test-dialog.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class EmailControlledTestDialog {\n readonly connectionId = input.required<string>();\n readonly connectionName = input.required<string>();\n\n protected readonly modal = inject(ModalService);\n private readonly ref = inject(ModalRef);\n private readonly destroyRef = inject(DestroyRef);\n private readonly transloco = inject(TranslocoService);\n protected readonly facade = inject(EmailDeliveryFacade);\n protected readonly testRequestId = signal(createId());\n protected readonly timedOut = signal(false);\n protected readonly polling = signal(false);\n protected readonly result = signal<EmailSendResult | null>(null);\n private pollIndex = 0;\n\n protected readonly form = new FormControl<ControlledTestFormValue>(\n {\n recipients: null,\n subject: 'Pplus email delivery test',\n body: 'This is a controlled test.',\n isHtml: false,\n },\n { nonNullable: true },\n );\n private readonly formStatus = toSignal(this.form.statusChanges, {\n initialValue: this.form.status,\n });\n protected readonly canSubmit = computed(\n () =>\n this.formStatus() === 'VALID' &&\n !this.facade.mutationLoading() &&\n !this.result(),\n );\n\n protected readonly formConfig = computed<DynamicFormConfig>(() => ({\n sections: [\n {\n key: 'controlled-test',\n type: 'none',\n columns: 12,\n fields: [\n new TextareaFieldConfig({\n key: 'recipients',\n label: this.t('test.recipients'),\n placeholder: this.t('test.recipients-placeholder'),\n hint: this.t('test.recipients-hint'),\n colSpan: 12,\n rows: 3,\n validators: [\n ValidatorConfig.required(),\n ValidatorConfig.custom(\n (value) => validRecipients(value),\n this.t('test.recipients-invalid'),\n ),\n ],\n }),\n new TextFieldConfig({\n key: 'subject',\n label: this.t('test.subject'),\n colSpan: 12,\n validators: [\n ValidatorConfig.required(),\n ValidatorConfig.maxLength(998),\n ValidatorConfig.pattern('^[^\\\\r\\\\n]*$'),\n ],\n }),\n new TextareaFieldConfig({\n key: 'body',\n label: this.t('test.body'),\n colSpan: 12,\n rows: 8,\n validators: [ValidatorConfig.maxLength(2_000_000)],\n }),\n new ToggleFieldConfig({\n key: 'isHtml',\n label: this.t('test.html'),\n colSpan: 12,\n }),\n ],\n },\n ],\n }));\n\n /**\n * The provider-acceptance caveat is shown once. When the backend already\n * answers with the accepted-delivery-unconfirmed code, the code message\n * above carries that sentence and the extra line would just repeat it.\n */\n protected showsAcceptedCaveat(result: EmailSendResult): boolean {\n return (\n result.outcome === 'Accepted' &&\n result.code !== ACCEPTED_DELIVERY_UNCONFIRMED_CODE\n );\n }\n\n protected submit(): void {\n if (!this.canSubmit()) {\n this.form.markAllAsTouched();\n return;\n }\n const value = this.form.getRawValue();\n this.facade\n .sendConnectionTest(this.connectionId(), {\n testRequestId: this.testRequestId(),\n recipients: parseRecipients(value.recipients),\n subject: value.subject?.trim() ?? '',\n body: value.body ?? '',\n isHtml: value.isHtml,\n })\n .subscribe({\n next: (result) => {\n this.result.set(result);\n this.timedOut.set(false);\n },\n error: (error) => {\n if (\n isAmbiguousTimeout(error) ||\n this.facade.errorAction(error) === 'poll_status'\n ) {\n this.startPolling();\n return;\n }\n this.facade.showError(error);\n },\n });\n }\n\n protected retrieve(): void {\n if (this.polling()) return;\n this.retrieveStoredResult(false);\n }\n\n private retrieveStoredResult(fromPoll: boolean): void {\n this.facade\n .retrieveConnectionTest(this.connectionId(), this.testRequestId())\n .subscribe({\n next: (stored) => {\n if (stored.result) {\n this.result.set(stored.result);\n this.timedOut.set(false);\n this.polling.set(false);\n return;\n }\n\n if (fromPoll && isPendingRequestState(stored.requestState)) {\n this.schedulePoll();\n } else {\n this.polling.set(false);\n this.timedOut.set(true);\n }\n },\n error: (error) => {\n if (fromPoll && this.facade.errorAction(error) === 'poll_status') {\n this.schedulePoll();\n return;\n }\n this.polling.set(false);\n this.timedOut.set(true);\n this.facade.showError(error);\n },\n });\n }\n\n private startPolling(): void {\n if (this.polling()) return;\n this.timedOut.set(true);\n this.polling.set(true);\n this.pollIndex = 0;\n this.schedulePoll();\n }\n\n private schedulePoll(): void {\n const delay = POLL_DELAYS_MS[this.pollIndex++];\n if (delay === undefined) {\n this.polling.set(false);\n return;\n }\n\n timer(delay)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => this.retrieveStoredResult(true));\n }\n\n protected close(): void {\n this.ref.close(this.result());\n }\n\n private t(key: string): string {\n return this.transloco.translate(`email-delivery.${key}`);\n }\n}\n\nconst ACCEPTED_DELIVERY_UNCONFIRMED_CODE =\n 'email.accepted_delivery_unconfirmed';\n\nconst POLL_DELAYS_MS = [1_000, 2_000, 4_000, 5_000, 5_000, 5_000] as const;\n\nfunction isPendingRequestState(value: string): boolean {\n return !['Completed', 'Failed', 'Cancelled', 'Canceled'].includes(value);\n}\n\nfunction parseRecipients(value: string | null): string[] {\n return Array.from(\n new Set(\n (value ?? '')\n .split(/[\\s,;]+/)\n .map((item) => item.trim())\n .filter(Boolean),\n ),\n );\n}\n\nfunction validRecipients(value: unknown): boolean {\n const recipients = parseRecipients(String(value ?? ''));\n return (\n recipients.length >= 1 &&\n recipients.length <= 100 &&\n recipients.every(\n (recipient) =>\n recipient.length <= 320 && /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(recipient),\n )\n );\n}\n\nfunction isAmbiguousTimeout(error: unknown): boolean {\n return (\n error instanceof HttpErrorResponse &&\n (error.status === 0 || error.status === 408 || error.status === 504)\n );\n}\n\nfunction createId(): string {\n if (typeof crypto !== 'undefined' && 'randomUUID' in crypto) {\n return crypto.randomUUID();\n }\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(\n /[xy]/g,\n (character) => {\n const random = Math.floor(Math.random() * 16);\n const value = character === 'x' ? random : (random & 0x3) | 0x8;\n return value.toString(16);\n },\n );\n}\n","<ng-container *transloco=\"let t; prefix: 'email-delivery'\">\n <div [class]=\"modal.contentClass + ' p-4 sm:p-5'\">\n <div\n class=\"mb-4 rounded-md border border-amber-200 bg-amber-50 px-4 py-3 text-sm text-amber-950\"\n role=\"note\"\n >\n <strong>{{ t(\"test.real-email-warning-title\") }}</strong>\n {{ t(\"test.real-email-warning\") }}\n </div>\n\n @if (!result()) {\n <mt-dynamic-form [formConfig]=\"formConfig()\" [formControl]=\"form\" />\n }\n\n @if (timedOut()) {\n <div\n class=\"mt-4 rounded-md border border-orange-200 bg-orange-50 px-4 py-3\"\n role=\"alert\"\n >\n <p class=\"font-semibold text-orange-950\">\n {{ t(\"test.timeout-title\") }}\n </p>\n <p class=\"mt-1 text-sm text-orange-900\">\n {{ t(\"test.timeout-description\") }}\n </p>\n </div>\n }\n\n @if (result(); as testResult) {\n <div\n class=\"rounded-md border border-surface-200 bg-surface-50 px-4 py-4\"\n aria-live=\"polite\"\n >\n <mt-email-delivery-status kind=\"attempt\" [value]=\"testResult.outcome\" />\n <p class=\"mt-1 text-sm text-muted-color\">\n {{ facade.describeCode(testResult.code) }}\n </p>\n @if (showsAcceptedCaveat(testResult)) {\n <p class=\"mt-3 text-sm font-medium text-amber-800\">\n {{ t(\"accepted-unconfirmed\") }}\n </p>\n }\n @if (testResult.outcome === \"OutcomeUnknown\") {\n <p class=\"mt-3 text-sm font-medium text-red-700\">\n {{ t(\"outcome-unknown-warning\") }}\n </p>\n }\n </div>\n }\n </div>\n\n <div [class]=\"modal.footerClass\">\n <mt-button\n severity=\"secondary\"\n variant=\"outlined\"\n [label]=\"t('close')\"\n styleClass=\"w-full sm:w-auto\"\n (onClick)=\"close()\"\n />\n @if (timedOut()) {\n <mt-button\n [label]=\"t('test.retrieve')\"\n icon=\"arrow.refresh-cw-01\"\n [disabled]=\"polling()\"\n [loading]=\"polling() || facade.mutationLoading() === 'retrieve-test'\"\n styleClass=\"w-full sm:w-auto\"\n (onClick)=\"retrieve()\"\n />\n } @else if (!result()) {\n <mt-button\n [label]=\"t('test.send')\"\n icon=\"communication.send-01\"\n [disabled]=\"!canSubmit()\"\n [loading]=\"facade.mutationLoading() === 'test'\"\n styleClass=\"w-full sm:w-auto\"\n (onClick)=\"submit()\"\n />\n }\n </div>\n</ng-container>\n","import {\r\n type EmailConnectionCreateRequest,\r\n type EmailConnectionUpdateRequest,\r\n type EmailCredentialMutation,\r\n type EmailCredentialOperation,\r\n type EmailCredentialStorageKind,\r\n type EmailProviderActionDescriptor,\r\n type EmailProviderDescriptor,\r\n type EmailProviderFieldDescriptor,\r\n} from './email-delivery.model';\r\n\r\nexport interface EmailConnectionEditorValue extends Record<string, unknown> {\r\n name: string | null;\r\n providerKey: string | null;\r\n authenticationMode: string | null;\r\n senderAddress: string | null;\r\n senderDisplayName: string | null;\r\n}\r\n\r\nexport function getApplicableProviderFields(\r\n provider: EmailProviderDescriptor | null | undefined,\r\n authenticationMode: string | null | undefined,\r\n): EmailProviderFieldDescriptor[] {\r\n if (!provider || !authenticationMode) {\r\n return [];\r\n }\r\n\r\n return provider.fields.filter(\r\n (field) =>\r\n field.authenticationModes.length === 0 ||\r\n field.authenticationModes.includes(authenticationMode),\r\n );\r\n}\r\n\r\nexport function getApplicableProviderActions(\r\n provider: EmailProviderDescriptor | null | undefined,\r\n authenticationMode: string | null | undefined,\r\n authorizationModel?: string | null,\r\n): EmailProviderActionDescriptor[] {\r\n if (!provider || !authenticationMode) {\r\n return [];\r\n }\r\n\r\n return (provider.actions ?? []).filter((action) => {\r\n if (!action.isExecutable) {\r\n return false;\r\n }\r\n\r\n if (\r\n action.authenticationModes.length > 0 &&\r\n !action.authenticationModes.includes(authenticationMode)\r\n ) {\r\n return false;\r\n }\r\n\r\n return (\r\n !action.authorizationModels?.length ||\r\n (!!authorizationModel &&\r\n action.authorizationModels.includes(authorizationModel))\r\n );\r\n });\r\n}\r\n\r\nexport function parseProviderCapabilities(value: string): string[] {\r\n return value\r\n .split(',')\r\n .map((item) => item.trim())\r\n .filter(Boolean);\r\n}\r\n\r\nexport function providerFieldControlKey(index: number): string {\r\n return `providerField${index}`;\r\n}\r\n\r\nexport function credentialOperationControlKey(index: number): string {\r\n return `credentialOperation${index}`;\r\n}\r\n\r\nexport function credentialStorageControlKey(index: number): string {\r\n return `credentialStorage${index}`;\r\n}\r\n\r\nexport function credentialValueControlKey(index: number): string {\r\n return `credentialValue${index}`;\r\n}\r\n\r\nexport function credentialReferenceControlKey(index: number): string {\r\n return `credentialReference${index}`;\r\n}\r\n\r\nexport function buildConnectionRequest(\r\n value: EmailConnectionEditorValue,\r\n provider: EmailProviderDescriptor,\r\n existingConcurrencyToken?: string,\r\n): EmailConnectionCreateRequest | EmailConnectionUpdateRequest {\r\n const mode = requiredTrimmed(value.authenticationMode);\r\n const publicConfiguration: Record<string, string> = {};\r\n const credentials: EmailCredentialMutation[] = [];\r\n\r\n provider.fields.forEach((field, index) => {\r\n if (\r\n field.authenticationModes.length > 0 &&\r\n !field.authenticationModes.includes(mode)\r\n ) {\r\n return;\r\n }\r\n\r\n if (field.isSecret) {\r\n const operation = value[\r\n credentialOperationControlKey(index)\r\n ] as EmailCredentialOperation | null;\r\n\r\n if (!operation || operation === 'omitted') {\r\n return;\r\n }\r\n\r\n const storageKind = (value[credentialStorageControlKey(index)] ??\r\n 'protected-value') as EmailCredentialStorageKind;\r\n\r\n credentials.push({\r\n key: field.key,\r\n operation,\r\n storageKind,\r\n value:\r\n operation === 'replace' && storageKind === 'protected-value'\r\n ? optionalTrimmed(value[credentialValueControlKey(index)])\r\n : null,\r\n externalReference:\r\n operation === 'replace' && storageKind === 'external-reference'\r\n ? optionalTrimmed(value[credentialReferenceControlKey(index)])\r\n : null,\r\n });\r\n return;\r\n }\r\n\r\n const fieldValue = value[providerFieldControlKey(index)];\r\n if (fieldValue === null || fieldValue === undefined || fieldValue === '') {\r\n return;\r\n }\r\n\r\n publicConfiguration[field.key] =\r\n typeof fieldValue === 'boolean' ? String(fieldValue) : String(fieldValue);\r\n });\r\n\r\n const request: EmailConnectionCreateRequest = {\r\n name: requiredTrimmed(value.name),\r\n providerKey: provider.key,\r\n authenticationMode: mode,\r\n senderAddress: requiredTrimmed(value.senderAddress),\r\n senderDisplayName: optionalTrimmed(value.senderDisplayName),\r\n publicConfiguration,\r\n credentials,\r\n };\r\n\r\n return existingConcurrencyToken\r\n ? { ...request, concurrencyToken: existingConcurrencyToken }\r\n : request;\r\n}\r\n\r\nfunction requiredTrimmed(value: unknown): string {\r\n return String(value ?? '').trim();\r\n}\r\n\r\nfunction optionalTrimmed(value: unknown): string | null {\r\n const normalized = String(value ?? '').trim();\r\n return normalized || null;\r\n}\r\n","import { HttpErrorResponse } from '@angular/common/http';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n input,\n OnDestroy,\n OnInit,\n signal,\n} from '@angular/core';\nimport { takeUntilDestroyed, toSignal } from '@angular/core/rxjs-interop';\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\nimport { TranslocoDirective, TranslocoService } from '@jsverse/transloco';\nimport {\n type BaseFieldConfig,\n DynamicFormConfig,\n NumberFieldConfig,\n RadioButtonFieldConfig,\n type SectionConfig,\n SelectFieldConfig,\n TextFieldConfig,\n ToggleFieldConfig,\n ValidatorConfig,\n} from '@masterteam/components';\nimport { Button } from '@masterteam/components/button';\nimport { ModalRef } from '@masterteam/components/dialog';\nimport { ModalService } from '@masterteam/components/modal';\nimport { DynamicForm } from '@masterteam/forms/dynamic-form';\nimport { SkeletonModule } from 'primeng/skeleton';\nimport { finalize, map, of, switchMap } from 'rxjs';\nimport {\n buildConnectionRequest,\n credentialOperationControlKey,\n credentialReferenceControlKey,\n credentialStorageControlKey,\n credentialValueControlKey,\n getApplicableProviderFields,\n providerFieldControlKey,\n type EmailConnectionEditorValue,\n} from '../../email-delivery-descriptor.utils';\nimport { EmailDeliveryFacade } from '../../email-delivery.facade';\nimport type {\n EmailConnectionDetails,\n EmailConnectionUpdateRequest,\n EmailCredentialOperation,\n EmailCredentialStorageKind,\n EmailProviderDescriptor,\n EmailProviderFieldDescriptor,\n} from '../../email-delivery.model';\n\n@Component({\n selector: 'mt-email-connection-editor',\n imports: [\n ReactiveFormsModule,\n TranslocoDirective,\n SkeletonModule,\n DynamicForm,\n Button,\n ],\n templateUrl: './email-connection-editor.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class EmailConnectionEditor implements OnInit, OnDestroy {\n readonly editorConnectionId = input<string | null>(null);\n\n private readonly ref = inject(ModalRef);\n private readonly transloco = inject(TranslocoService);\n protected readonly modal = inject(ModalService);\n protected readonly facade = inject(EmailDeliveryFacade);\n\n protected readonly connectionId = signal<string | null>(null);\n protected readonly existingDetails = signal<EmailConnectionDetails | null>(\n null,\n );\n protected readonly editorLoading = signal(true);\n protected readonly formGeneration = signal(0);\n protected readonly formValue =\n signal<EmailConnectionEditorValue>(emptyEditorValue());\n protected readonly form = new FormControl<EmailConnectionEditorValue>(\n emptyEditorValue(),\n { nonNullable: true },\n );\n private readonly formStatus = toSignal(this.form.statusChanges, {\n initialValue: this.form.status,\n });\n private previousProviderKey: string | null = null;\n private previousAuthenticationMode: string | null = null;\n private structureSignature = '';\n\n protected readonly isEdit = computed(() => !!this.connectionId());\n protected readonly selectedProvider = computed(() =>\n this.facade.providerByKey(this.formValue().providerKey),\n );\n protected readonly selectedMode = computed(\n () => this.formValue().authenticationMode,\n );\n protected readonly applicableFields = computed(() =>\n getApplicableProviderFields(this.selectedProvider(), this.selectedMode()),\n );\n protected readonly canSave = computed(\n () =>\n !this.editorLoading() &&\n this.formStatus() === 'VALID' &&\n !this.facade.mutationLoading(),\n );\n protected readonly configurationFields = computed(() =>\n this.buildConfigurationFields(),\n );\n /**\n * Empty whenever the selected mode authenticates without a stored secret —\n * an anonymous QC-test SMTP endpoint, for instance. That is a valid provider\n * descriptor, not a load failure.\n */\n protected readonly credentialFields = computed(() =>\n this.buildCredentialFields(),\n );\n /**\n * A section header over an empty body reads as something that failed to\n * load, so a section with no applicable fields is not rendered at all.\n */\n protected readonly formConfig = computed<DynamicFormConfig>(() => ({\n layout: SECTION_MODE_LAYOUT,\n sections: [\n this.section('basics', this.buildBasicFields()),\n this.section('configuration', this.configurationFields()),\n this.section('credentials', this.credentialFields()),\n ].filter((section) => section.fields.length > 0),\n }));\n\n constructor() {\n this.form.valueChanges.pipe(takeUntilDestroyed()).subscribe((value) => {\n this.handleFormValue(value);\n });\n }\n\n ngOnInit(): void {\n const id = this.editorConnectionId();\n this.connectionId.set(id);\n\n const catalog$ = this.facade.providers().length\n ? of(undefined)\n : this.facade.loadCatalog().pipe(map(() => undefined));\n catalog$\n .pipe(\n switchMap(() => (id ? this.facade.loadConnection(id) : of(null))),\n finalize(() => this.editorLoading.set(false)),\n )\n .subscribe({\n next: (details: EmailConnectionDetails | null) => {\n this.existingDetails.set(details);\n this.seedForm(details);\n },\n error: (error: unknown) => this.facade.showError(error),\n });\n }\n\n ngOnDestroy(): void {\n this.clearSecretControls();\n }\n\n protected save(): void {\n if (!this.canSave()) {\n this.form.markAllAsTouched();\n return;\n }\n const provider = this.selectedProvider();\n if (!provider) return;\n\n const id = this.connectionId();\n const request = buildConnectionRequest(\n this.form.getRawValue(),\n provider,\n this.existingDetails()?.connection.concurrencyToken,\n );\n const operation = id\n ? this.facade.updateConnection(\n id,\n request as EmailConnectionUpdateRequest,\n )\n : this.facade.createConnection(request);\n\n operation.pipe(finalize(() => this.clearSecretControls())).subscribe({\n next: () => {\n this.ref.close(true);\n },\n error: (error) => this.handleSaveError(error),\n });\n }\n\n protected cancel(): void {\n this.clearSecretControls();\n this.ref.close(false);\n }\n\n private seedForm(details: EmailConnectionDetails | null): void {\n const provider = details\n ? this.facade.providerByKey(details.connection.providerKey)\n : (this.facade.providers()[0] ?? null);\n const mode = details\n ? details.connection.authenticationMode\n : (provider?.authenticationModes[0]?.key ?? null);\n const value: EmailConnectionEditorValue = {\n name: details?.connection.name ?? null,\n providerKey: provider?.key ?? null,\n authenticationMode: mode,\n senderAddress: details?.connection.senderAddress ?? null,\n senderDisplayName: details?.connection.senderDisplayName ?? null,\n };\n\n provider?.fields.forEach((field, index) => {\n if (!isApplicable(field, mode)) return;\n if (field.isSecret) {\n const status = details?.credentials.find(\n (credential) => credential.key === field.key,\n );\n value[credentialOperationControlKey(index)] = details\n ? 'omitted'\n : 'replace';\n value[credentialStorageControlKey(index)] =\n status?.storageKind === 'ExternalReference'\n ? 'external-reference'\n : 'protected-value';\n value[credentialValueControlKey(index)] = null;\n value[credentialReferenceControlKey(index)] = null;\n return;\n }\n\n const rawValue =\n details?.connection.publicConfiguration[field.key] ??\n field.defaultValue;\n value[providerFieldControlKey(index)] = toEditorFieldValue(\n field,\n rawValue,\n );\n });\n\n this.previousProviderKey = provider?.key ?? null;\n this.previousAuthenticationMode = mode;\n this.formValue.set(value);\n this.form.setValue(value, { emitEvent: false });\n this.structureSignature = this.getStructureSignature(value, provider);\n this.formGeneration.update((generation) => generation + 1);\n }\n\n private handleFormValue(value: EmailConnectionEditorValue): void {\n let provider = this.facade.providerByKey(value.providerKey);\n const providerChanged = value.providerKey !== this.previousProviderKey;\n let mode = value.authenticationMode;\n if (\n provider &&\n !provider.authenticationModes.some((item) => item.key === mode)\n ) {\n mode = provider.authenticationModes[0]?.key ?? null;\n }\n const modeChanged = mode !== this.previousAuthenticationMode;\n\n if (providerChanged || modeChanged) {\n const reset = this.resetProviderValues(value, provider, mode);\n this.previousProviderKey = provider?.key ?? null;\n this.previousAuthenticationMode = mode;\n this.formValue.set(reset);\n this.form.setValue(reset, { emitEvent: false });\n this.structureSignature = this.getStructureSignature(reset, provider);\n this.formGeneration.update((generation) => generation + 1);\n return;\n }\n\n provider = this.facade.providerByKey(value.providerKey);\n this.formValue.set(value);\n const signature = this.getStructureSignature(value, provider);\n if (signature !== this.structureSignature) {\n this.structureSignature = signature;\n this.formGeneration.update((generation) => generation + 1);\n }\n }\n\n private resetProviderValues(\n value: EmailConnectionEditorValue,\n provider: EmailProviderDescriptor | null,\n mode: string | null,\n ): EmailConnectionEditorValue {\n const reset: EmailConnectionEditorValue = {\n name: value.name,\n providerKey: provider?.key ?? null,\n authenticationMode: mode,\n senderAddress: value.senderAddress,\n senderDisplayName: value.senderDisplayName,\n };\n\n provider?.fields.forEach((field, index) => {\n if (!isApplicable(field, mode)) return;\n if (field.isSecret) {\n reset[credentialOperationControlKey(index)] = 'replace';\n reset[credentialStorageControlKey(index)] = 'protected-value';\n reset[credentialValueControlKey(index)] = null;\n reset[credentialReferenceControlKey(index)] = null;\n } else {\n reset[providerFieldControlKey(index)] = toEditorFieldValue(\n field,\n field.defaultValue,\n );\n }\n });\n return reset;\n }\n\n /**\n * Every section wears the same shell mt-client-form gives its sections — a\n * bordered, flat, rounded-md card with a header strip — so the connection\n * form reads like the runtime forms in the rest of the product.\n */\n private section(\n key: 'basics' | 'configuration' | 'credentials',\n fields: BaseFieldConfig[],\n ): SectionConfig {\n return {\n key,\n label: this.t(`editor.${key}`),\n type: 'header',\n columns: 12,\n headerClass: SECTION_MODE_HEADER_CLASS,\n bodyClass: SECTION_MODE_BODY_CLASS,\n fields,\n };\n }\n\n private buildBasicFields(): BaseFieldConfig[] {\n const provider = this.selectedProvider();\n return [\n new TextFieldConfig({\n key: 'name',\n label: this.t('connection.name'),\n colSpan: 12,\n validators: [\n ValidatorConfig.required(),\n ValidatorConfig.maxLength(150),\n ],\n }),\n new SelectFieldConfig({\n key: 'providerKey',\n label: this.t('connection.provider'),\n options: this.facade.providers().map((item) => ({\n label: item.displayName,\n value: item.key,\n })),\n optionLabel: 'label',\n optionValue: 'value',\n colSpan: 6,\n validators: [ValidatorConfig.required()],\n }),\n new SelectFieldConfig({\n key: 'authenticationMode',\n label: this.t('connection.authentication-mode'),\n options:\n provider?.authenticationModes.map((item) => ({\n label: item.displayName,\n value: item.key,\n })) ?? [],\n optionLabel: 'label',\n optionValue: 'value',\n colSpan: 6,\n validators: [ValidatorConfig.required()],\n }),\n new TextFieldConfig({\n key: 'senderAddress',\n label: this.t('connection.sender-address'),\n inputType: 'email',\n colSpan: 6,\n validators: [ValidatorConfig.required(), ValidatorConfig.email()],\n }),\n new TextFieldConfig({\n key: 'senderDisplayName',\n label: this.t('connection.sender-display-name'),\n colSpan: 6,\n validators: [ValidatorConfig.maxLength(200)],\n }),\n ];\n }\n\n private buildConfigurationFields(): BaseFieldConfig[] {\n const provider = this.selectedProvider();\n if (!provider) return [];\n return provider.fields.flatMap((field, index) => {\n if (field.isSecret || !isApplicable(field, this.selectedMode())) {\n return [];\n }\n return [this.toProviderFieldConfig(field, index)];\n });\n }\n\n private buildCredentialFields(): BaseFieldConfig[] {\n const provider = this.selectedProvider();\n if (!provider) return [];\n return provider.fields.flatMap((field, index) => {\n if (!field.isSecret || !isApplicable(field, this.selectedMode())) {\n return [];\n }\n\n const operationKey = credentialOperationControlKey(index);\n const storageKey = credentialStorageControlKey(index);\n const operation = (this.formValue()[operationKey] ??\n (this.isEdit() ? 'omitted' : 'replace')) as EmailCredentialOperation;\n const storageKind = (this.formValue()[storageKey] ??\n 'protected-value') as EmailCredentialStorageKind;\n const operationOptions = [\n ...(this.isEdit()\n ? [{ label: this.t('credential.keep'), value: 'omitted' }]\n : []),\n { label: this.t('credential.replace'), value: 'replace' },\n ...(!field.required && this.isEdit()\n ? [{ label: this.t('credential.clear'), value: 'clear' }]\n : []),\n ];\n const fields: BaseFieldConfig[] = [\n new SelectFieldConfig({\n key: operationKey,\n label: `${field.displayName} — ${this.t('credential.operation')}`,\n options: operationOptions,\n optionLabel: 'label',\n optionValue: 'value',\n colSpan: 6,\n validators: [ValidatorConfig.required()],\n }),\n ];\n\n if (operation !== 'replace') return fields;\n fields.push(\n new RadioButtonFieldConfig({\n key: storageKey,\n label: this.t('credential.storage-choice'),\n options: [\n {\n label: this.t('credential.protected-value'),\n value: 'protected-value',\n },\n {\n label: this.t('credential.external-reference'),\n value: 'external-reference',\n },\n ],\n optionLabel: 'label',\n optionValue: 'value',\n orientation: 'vertical',\n colSpan: 6,\n validators: [ValidatorConfig.required()],\n }),\n );\n\n fields.push(\n storageKind === 'external-reference'\n ? new TextFieldConfig({\n key: credentialReferenceControlKey(index),\n label: this.t('credential.external-reference'),\n hint: this.t('credential.external-reference-hint'),\n colSpan: 12,\n validators: [\n ValidatorConfig.required(),\n ValidatorConfig.maxLength(500),\n ValidatorConfig.pattern('^EmailSecrets:[A-Za-z0-9_.-]{1,100}$'),\n ],\n })\n : new TextFieldConfig({\n key: credentialValueControlKey(index),\n label: field.displayName,\n inputType: 'password',\n hint: this.t('credential.protected-value-hint'),\n colSpan: 12,\n validators: [\n ValidatorConfig.required(),\n ...(field.maximumLength\n ? [ValidatorConfig.maxLength(field.maximumLength)]\n : []),\n ],\n }),\n );\n return fields;\n });\n }\n\n private toProviderFieldConfig(\n field: EmailProviderFieldDescriptor,\n index: number,\n ): BaseFieldConfig {\n const config = {\n key: providerFieldControlKey(index),\n label: field.displayName,\n colSpan: 6,\n readonly:\n !!this.existingDetails()?.authorizationState &&\n !field.editableAfterAuthorization,\n validators: providerFieldValidators(field, this.t.bind(this)),\n };\n\n if (field.dataType === 'Boolean') {\n return new ToggleFieldConfig(config);\n }\n if (field.dataType === 'Integer' || field.dataType === 'Port') {\n return new NumberFieldConfig({\n ...config,\n min: field.dataType === 'Port' ? 1 : undefined,\n max: field.dataType === 'Port' ? 65_535 : undefined,\n useGrouping: false,\n });\n }\n if (field.dataType === 'Choice') {\n return new SelectFieldConfig({\n ...config,\n options: (field.allowedValues ?? []).map((value) => ({\n label: value,\n value,\n })),\n optionLabel: 'label',\n optionValue: 'value',\n });\n }\n return new TextFieldConfig({\n ...config,\n inputType: field.dataType === 'Email' ? 'email' : 'text',\n });\n }\n\n private getStructureSignature(\n value: EmailConnectionEditorValue,\n provider: EmailProviderDescriptor | null,\n ): string {\n const credentials = provider?.fields.flatMap((field, index) =>\n field.isSecret && isApplicable(field, value.authenticationMode)\n ? [\n `${value[credentialOperationControlKey(index)] ?? ''}:${\n value[credentialStorageControlKey(index)] ?? ''\n }`,\n ]\n : [],\n );\n return `${value.providerKey ?? ''}|${value.authenticationMode ?? ''}|${\n credentials?.join('|') ?? ''\n }`;\n }\n\n private clearSecretControls(): void {\n const provider = this.selectedProvider();\n if (!provider) return;\n const value = { ...this.form.getRawValue() };\n provider.fields.forEach((field, index) => {\n if (!field.isSecret) return;\n value[credentialValueControlKey(index)] = null;\n value[credentialReferenceControlKey(index)] = null;\n });\n this.formValue.set(value);\n this.form.setValue(value, { emitEvent: false });\n this.formGeneration.update((generation) => generation + 1);\n }\n\n private handleSaveError(error: unknown): void {\n this.facade.showError(error);\n const id = this.connectionId();\n if (!(error instanceof HttpErrorResponse) || error.status !== 409 || !id) {\n return;\n }\n this.editorLoading.set(true);\n this.facade\n .loadConnection(id)\n .pipe(finalize(() => this.editorLoading.set(false)))\n .subscribe({\n next: (details) => {\n this.existingDetails.set(details);\n this.seedForm(details);\n },\n error: (loadError) => this.facade.showError(loadError),\n });\n }\n\n private t(key: string): string {\n return this.transloco.translate(`email-delivery.${key}`);\n }\n}\n\n// Mirrors the section-mode styling mt-client-form applies to its own sections.\nconst SECTION_MODE_LAYOUT: NonNullable<DynamicFormConfig['layout']> = {\n sectionClass:\n 'flex flex-col gap-0 overflow-hidden rounded-md border border-surface-200 bg-surface-0',\n};\n\nconst SECTION_MODE_HEADER_CLASS =\n 'm-0 border-b border-surface-200 bg-surface-50 px-4 py-3 text-lg font-semibold text-color';\n\nconst SECTION_MODE_BODY_CLASS =\n '@container grid grid-cols-12 gap-4 items-start p-4';\n\nfunction emptyEditorValue(): EmailConnectionEditorValue {\n return {\n name: null,\n providerKey: null,\n authenticationMode: null,\n senderAddress: null,\n senderDisplayName: null,\n };\n}\n\nfunction isApplicable(\n field: EmailProviderFieldDescriptor,\n mode: string | null,\n): boolean {\n return (\n !!mode &&\n (field.authenticationModes.length === 0 ||\n field.authenticationModes.includes(mode))\n );\n}\n\nfunction toEditorFieldValue(\n field: EmailProviderFieldDescriptor,\n value: string | null | undefined,\n): string | number | boolean | null {\n if (value === null || value === undefined || value === '') return null;\n if (field.dataType === 'Boolean') return value.toLowerCase() === 'true';\n if (field.dataType === 'Integer' || field.dataType === 'Port') {\n const numberValue = Number(value);\n return Number.isFinite(numberValue) ? numberValue : null;\n }\n return value;\n}\n\nfunction providerFieldValidators(\n field: EmailProviderFieldDescriptor,\n translate: (key: string) => string,\n): ValidatorConfig[] {\n const validators: ValidatorConfig[] = [];\n if (field.required) validators.push(ValidatorConfig.required());\n if (field.maximumLength) {\n validators.push(ValidatorConfig.maxLength(field.maximumLength));\n }\n if (field.dataType === 'Email') validators.push(ValidatorConfig.email());\n if (field.dataType === 'Text') {\n validators.push(ValidatorConfig.pattern('^[^\\\\r\\\\n\\\\u0000]*$'));\n }\n if (field.dataType === 'Identifier') {\n validators.push(ValidatorConfig.pattern('^[A-Za-z0-9._-]+$'));\n }\n if (field.dataType === 'Host') {\n validators.push(\n ValidatorConfig.custom(\n (value) => validHost(value),\n translate('validation.host'),\n ),\n );\n }\n if (field.dataType === 'Url') {\n validators.push(\n ValidatorConfig.custom(\n (value) => validHttpsUrl(value),\n translate('validation.https-url'),\n ),\n );\n }\n if (field.dataType === 'HeaderName') {\n validators.push(ValidatorConfig.pattern('^X-[A-Za-z0-9-]+$'));\n }\n return validators;\n}\n\nfunction validHost(value: unknown): boolean {\n const host = String(value ?? '')\n .trim()\n .toLowerCase();\n return (\n !!host &&\n host !== 'localhost' &&\n !/^\\d{1,3}(?:\\.\\d{1,3}){3}$/.test(host) &&\n /^(?=.{1,253}$)(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\\.)+[a-z0-9][a-z0-9-]{0,62}$/.test(\n host,\n )\n );\n}\n\nfunction validHttpsUrl(value: unknown): boolean {\n try {\n const url = new URL(String(value ?? ''));\n return (\n url.protocol === 'https:' &&\n !url.username &&\n !url.password &&\n !url.hash &&\n url.hostname.toLowerCase() !== 'localhost'\n );\n } catch {\n return false;\n }\n}\n","<ng-container *transloco=\"let t; prefix: 'email-delivery'\">\n <div\n [class]=\"\n 'flex min-h-0 flex-col gap-5 overflow-y-auto p-4 sm:p-5 ' +\n modal.contentClass\n \"\n >\n @if (editorLoading()) {\n <div\n class=\"flex flex-col gap-5\"\n role=\"status\"\n [attr.aria-label]=\"t('loading')\"\n >\n @for (section of [1, 2, 3]; track section) {\n <div class=\"overflow-hidden rounded-md border border-surface-200\">\n <div class=\"border-b border-surface-200 bg-surface-50 px-4 py-3\">\n <p-skeleton\n width=\"10rem\"\n height=\"1.25rem\"\n borderRadius=\"0.375rem\"\n />\n </div>\n <div class=\"grid gap-4 p-4 sm:grid-cols-2\">\n @for (field of [1, 2, 3, 4]; track field) {\n <p-skeleton height=\"3.25rem\" borderRadius=\"0.375rem\" />\n }\n </div>\n </div>\n }\n </div>\n } @else {\n @if (selectedProvider(); as provider) {\n @if (provider.warnings.length > 0) {\n <section\n class=\"rounded-md border border-amber-200 bg-amber-50 p-4\"\n role=\"note\"\n aria-labelledby=\"provider-warnings-heading\"\n >\n <h2\n id=\"provider-warnings-heading\"\n class=\"m-0 text-sm font-semibold text-amber-950\"\n >\n {{ t(\"provider-warnings\") }}\n </h2>\n <ul\n class=\"mb-0 mt-2.5 list-disc space-y-2 ps-5 text-sm leading-relaxed text-amber-900\"\n >\n @for (warning of provider.warnings; track warning) {\n <li class=\"ps-1\">{{ warning }}</li>\n }\n </ul>\n </section>\n }\n }\n\n @if (isEdit()) {\n <div\n class=\"rounded-md border border-blue-200 bg-blue-50 px-4 py-3 text-sm text-blue-950\"\n role=\"note\"\n >\n {{ t(\"editor.update-invalidates-proof\") }}\n </div>\n }\n\n @for (generation of [formGeneration()]; track generation) {\n <mt-dynamic-form [formConfig]=\"formConfig()\" [formControl]=\"form\" />\n }\n\n @if (applicableFields().length === 0) {\n <div\n class=\"rounded-md border border-surface-200 bg-surface-50 px-4 py-3 text-sm text-muted-color\"\n >\n {{ t(\"editor.select-provider-mode\") }}\n </div>\n }\n }\n </div>\n\n <div [class]=\"modal.footerClass\">\n <mt-button\n [label]=\"t('cancel')\"\n variant=\"outlined\"\n [disabled]=\"!!facade.mutationLoading()\"\n styleClass=\"w-full sm:w-auto\"\n (onClick)=\"cancel()\"\n />\n <mt-button\n [label]=\"t('save')\"\n icon=\"general.save-01\"\n [disabled]=\"!canSave()\"\n [loading]=\"facade.mutationLoading() === (isEdit() ? 'update' : 'create')\"\n styleClass=\"w-full sm:w-auto\"\n (onClick)=\"save()\"\n />\n </div>\n</ng-container>\n","import { DatePipe, DOCUMENT } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n input,\n OnInit,\n} from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { TranslocoDirective, TranslocoService } from '@jsverse/transloco';\nimport { Button } from '@masterteam/components/button';\nimport { ConfirmationService } from '@masterteam/components/confirmation';\nimport { ModalRef } from '@masterteam/components/dialog';\nimport { EmptyState } from '@masterteam/components/empty-state';\nimport { Menu, type MTMenuItem } from '@masterteam/components/menu';\nimport { ModalService } from '@masterteam/components/modal';\nimport { SkeletonModule } from 'primeng/skeleton';\nimport { take } from 'rxjs';\nimport { EmailDeliveryStatus } from '../../components/email-delivery-status/email-delivery-status';\nimport { EmailControlledTestDialog } from '../../dialogs/controlled-test/email-controlled-test-dialog';\nimport { getApplicableProviderActions } from '../../email-delivery-descriptor.utils';\nimport { EmailDeliveryFacade } from '../../email-delivery.facade';\nimport { EMAIL_DELIVERY_DRAWER_STYLE_CLASS } from '../../email-delivery.ui';\nimport type {\n EmailProviderActionDescriptor,\n EmailProviderFieldDescriptor,\n} from '../../email-delivery.model';\nimport { EmailConnectionEditor } from '../connection-editor/email-connection-editor';\n\ninterface EmailConfigurationViewItem {\n key: string;\n label: string;\n value: string;\n}\n\ninterface EmailCredentialViewItem {\n key: string;\n label: string;\n configured: boolean;\n storageLabel: string;\n lastRotatedAtUtc: string | null;\n}\n\n@Component({\n selector: 'mt-email-connection-details',\n imports: [\n DatePipe,\n TranslocoDirective,\n SkeletonModule,\n Button,\n EmptyState,\n Menu,\n EmailDeliveryStatus,\n ],\n templateUrl: './email-connection-details.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class EmailConnectionDetailsPage implements OnInit {\n readonly connectionId = input.required<string>();\n\n private readonly document = inject(DOCUMENT);\n private readonly ref = inject(ModalRef);\n private readonly confirmation = inject(ConfirmationService);\n private readonly transloco = inject(TranslocoService);\n protected readonly modal = inject(ModalService);\n protected readonly facade = inject(EmailDeliveryFacade);\n private readonly activeLanguage = toSignal(this.transloco.langChanges$, {\n initialValue: this.transloco.getActiveLang(),\n });\n\n protected readonly actions = computed(() => {\n const details = this.facade.selectedConnection();\n if (!details || details.connection.id !== this.connectionId()) return [];\n return getApplicableProviderActions(\n this.facade.providerByKey(details.connection.providerKey),\n details.connection.authenticationMode,\n details.connection.publicConfiguration['AuthorizationModel'],\n );\n });\n protected readonly provider = computed(() => {\n const details = this.facade.selectedConnection();\n return details\n ? this.facade.providerByKey(details.connection.providerKey)\n : null;\n });\n protected readonly authenticationModeLabel = computed(() => {\n const details = this.facade.selectedConnection();\n if (!details) return '';\n return (\n this.provider()?.authenticationModes.find(\n (mode) => mode.key === details.connection.authenticationMode,\n )?.displayName ?? details.connection.authenticationMode\n );\n });\n protected readonly publicConfiguration = computed<\n EmailConfigurationViewItem[]\n >(() => {\n this.activeLanguage();\n const details = this.facade.selectedConnection();\n if (!details) return [];\n const fields = this.provider()?.fields ?? [];\n const fieldOrder = new Map(\n fields.map((field, index) => [field.key.toLowerCase(), index]),\n );\n\n return Object.entries(details.connection.publicConfiguration)\n .filter(([, value]) => value !== '')\n .sort(\n ([left], [right]) =>\n (fieldOrder.get(left.toLowerCase()) ?? Number.MAX_SAFE_INTEGER) -\n (fieldOrder.get(right.toLowerCase()) ?? Number.MAX_SAFE_INTEGER),\n )\n .map(([key, value]) => {\n const field = fields.find(\n (candidate) => candidate.key.toLowerCase() === key.toLowerCase(),\n );\n return {\n key,\n label: field?.displayName ?? humanizeIdentifier(key),\n value: this.configurationValueLabel(value, field),\n };\n });\n });\n protected readonly credentialItems = computed<EmailCredentialViewItem[]>(\n () => {\n this.activeLanguage();\n const details = this.facade.selectedConnection();\n if (!details) return [];\n const fields = this.provider()?.fields ?? [];\n\n return details.credentials.map((credential) => ({\n key: credential.key,\n label:\n fields.find(\n (field) => field.key.toLowerCase() === credential.key.toLowerCase(),\n )?.displayName ?? humanizeIdentifier(credential.key),\n configured: credential.configured,\n storageLabel: this.credentialStorageLabel(credential.storageKind),\n lastRotatedAtUtc: credential.lastRotatedAtUtc,\n }));\n },\n );\n protected readonly actionMenuItems = computed<MTMenuItem[]>(() => {\n this.activeLanguage();\n const details = this.facade.selectedConnection();\n if (!details || !this.facade.managementAvailable()) return [];\n\n const items: MTMenuItem[] = this.interactiveActions().map((action) => ({\n id: action.key,\n label: action.displayName,\n icon: 'security.lock-unlocked-01',\n command: () => this.authorize(action),\n }));\n\n if (this.hasAction('validate')) {\n items.push({\n id: 'validate',\n label: this.t('validate'),\n icon: 'general.check-circle',\n command: () => this.validate(),\n });\n }\n if (this.hasAction('test-send')) {\n items.push({\n id: 'test-send',\n label: this.t('test-send'),\n icon: 'communication.send-01',\n command: () => this.test(),\n });\n }\n if (\n details.connection.state === 'Ready' &&\n !details.bindings.includes('notifications')\n ) {\n items.push({\n id: 'bind',\n label: this.t('use-for-notifications'),\n icon: 'general.link-01',\n command: () => this.bind(),\n });\n }\n if (details.bindings.includes('notifications')) {\n items.push({\n id: 'unbind',\n label: this.t('stop-using'),\n icon: 'general.link-broken-01',\n severity: 'warn',\n command: () => this.unbind(),\n });\n }\n if (details.authorizationState) {\n items.push({\n id: 'revoke',\n label: this.t('revoke'),\n icon: 'security.lock-01',\n severity: 'warn',\n command: () => this.revoke(),\n });\n }\n if (details.bindings.length === 0) {\n items.push(\n { id: 'destructive-separator', separator: true },\n {\n id: 'delete',\n label: this.t('delete'),\n icon: 'general.trash-01',\n severity: 'danger',\n command: () => this.delete(),\n },\n );\n }\n\n return items;\n });\n\n ngOnInit(): void {\n this.reload();\n }\n\n protected edit(): void {\n const drawer = this.modal.openModal(EmailConnectionEditor, 'drawer', {\n header: this.t('editor.edit-title'),\n styleClass: EMAIL_DELIVERY_DRAWER_STYLE_CLASS,\n position: 'end',\n appendTo: 'page-content',\n dismissableMask: true,\n dismissible: true,\n inputValues: { editorConnectionId: this.connectionId() },\n });\n drawer.onClose.pipe(take(1)).subscribe((saved: boolean) => {\n if (saved) this.reload();\n });\n }\n\n protected validate(): void {\n this.facade.validateConnection(this.connectionId()).subscribe({\n error: (error) => this.facade.showError(error),\n });\n }\n\n protected test(): void {\n const details = this.facade.selectedConnection();\n if (!details) return;\n const dialog = this.modal.openModal(EmailControlledTestDialog, 'dialog', {\n header: this.t('test.title'),\n styleClass: '!w-[42rem] max-w-[96vw]',\n dismissible: true,\n inputValues: {\n connectionId: details.connection.id,\n connectionName: details.connection.name,\n },\n });\n dialog.onClose.pipe(take(1)).subscribe(() => this.reload());\n }\n\n protected authorize(action: EmailProviderActionDescriptor): void {\n const kind = action.key === 'authorize' ? 'delegated' : 'admin-consent';\n this.facade.startAuthorization(this.connectionId(), kind).subscribe({\n next: (result) => this.document.location.assign(result.authorizationUrl),\n error: (error) => this.facade.showError(error),\n });\n }\n\n protected revoke(): void {\n const details = this.facade.selectedConnection();\n if (!details) return;\n this.confirmation.confirm({\n type: 'dialog',\n header: this.t('revoke'),\n message: this.t('confirm.revoke'),\n accept: () =>\n this.facade.revokeAuthorization(this.connectionId()).subscribe({\n error: (error) => this.facade.showError(error),\n }),\n });\n }\n\n protected bind(): void {\n this.facade.bindConnection(this.connectionId()).subscribe({\n error: (error) => this.facade.showError(error),\n });\n }\n\n protected unbind(): void {\n this.confirmation.confirm({\n type: 'dialog',\n header: this.t('stop-using'),\n message: this.t('confirm.unbind'),\n accept: () =>\n this.facade.unbindConnection(this.connectionId()).subscribe({\n error: (error) => this.facade.showError(error),\n }),\n });\n }\n\n protected delete(): void {\n const details = this.facade.selectedConnection();\n if (!details) return;\n this.confirmation.confirmDelete({\n type: 'dialog',\n message: this.t('confirm.delete'),\n accept: () =>\n this.facade\n .deleteConnection(\n this.connectionId(),\n details.connection.concurrencyToken,\n )\n .subscribe({\n next: () => this.ref.close(true),\n error: (error) => this.facade.showError(error),\n }),\n });\n }\n\n protected hasAction(key: string): boolean {\n return this.actions().some((action) => action.key === key);\n }\n\n protected interactiveActions(): EmailProviderActionDescriptor[] {\n return this.actions().filter((action) => action.isInteractive);\n }\n\n protected close(): void {\n this.ref.close();\n }\n\n private reload(): void {\n this.facade.loadConnection(this.connectionId()).subscribe({\n error: (error) => this.facade.showError(error),\n });\n }\n\n private t(key: string): string {\n return this.transloco.translate(`email-delivery.${key}`);\n }\n\n private credentialStorageLabel(storageKind: string): string {\n switch (storageKind.replace(/[-_\\s]/g, '').toLowerCase()) {\n case 'externalreference':\n return this.t('credential.external-reference');\n case 'protectedvalue':\n return this.t('credential.protected-value');\n default:\n return humanizeIdentifier(storageKind);\n }\n }\n\n private configurationValueLabel(\n value: string,\n field?: EmailProviderFieldDescriptor,\n ): string {\n if (value.toLowerCase() === 'true') return this.t('yes');\n if (value.toLowerCase() === 'false') return this.t('no');\n return field?.dataType === 'Choice' ? humanizeIdentifier(value) : value;\n }\n}\n\nfunction humanizeIdentifier(value: string): string {\n return value\n .replace(/[._-]+/g, ' ')\n .replace(/([a-z0-9])([A-Z])/g, '$1 $2')\n .replace(/\\s+/g, ' ')\n .trim()\n .replace(/^./, (character) => character.toUpperCase())\n .replace(/\\bSmtp\\b/g, 'SMTP')\n .replace(/\\bTls\\b/g, 'TLS')\n .replace(/\\bOauth2?\\b/gi, 'OAuth2')\n .replace(/\\bHttp\\b/g, 'HTTP')\n .replace(/\\bApi\\b/g, 'API');\n}\n","<ng-container *transloco=\"let t; prefix: 'email-delivery'\">\n @if (facade.detailsLoading()) {\n <div\n [class]=\"'min-h-0 overflow-y-auto p-4 sm:p-5 ' + modal.contentClass\"\n role=\"status\"\n [attr.aria-label]=\"t('loading')\"\n >\n <div class=\"grid w-full gap-5\">\n <p-skeleton height=\"5rem\" borderRadius=\"0.375rem\" />\n @for (section of [1, 2, 3]; track section) {\n <div class=\"overflow-hidden rounded-md border border-surface-200\">\n <div class=\"border-b border-surface-200 bg-surface-50 px-4 py-3\">\n <p-skeleton\n width=\"12rem\"\n height=\"1.25rem\"\n borderRadius=\"0.375rem\"\n />\n </div>\n <div class=\"grid gap-3 p-4 sm:grid-cols-2 xl:grid-cols-3\">\n @for (tile of [1, 2, 3]; track tile) {\n <p-skeleton height=\"4rem\" borderRadius=\"0.375rem\" />\n }\n </div>\n </div>\n }\n </div>\n </div>\n } @else if (facade.selectedConnection(); as details) {\n <div [class]=\"'min-h-0 overflow-y-auto p-4 sm:p-5 ' + modal.contentClass\">\n <div class=\"grid w-full gap-5\">\n <section\n class=\"flex flex-col gap-3 rounded-md border border-surface-200 bg-surface-0 p-4 sm:flex-row sm:items-center sm:justify-between\"\n >\n <div class=\"min-w-0\">\n <h2 class=\"m-0 truncate text-lg font-semibold text-color\">\n {{ details.connection.name }}\n </h2>\n <p class=\"mb-0 mt-1 break-all text-sm text-muted-color\">\n {{ details.connection.senderAddress }}\n </p>\n </div>\n <mt-email-delivery-status\n class=\"shrink-0\"\n kind=\"connection\"\n [value]=\"details.connection.state\"\n />\n </section>\n\n <!-- Same section shape the connection form uses (mt-client-form section\n mode): header strip on a bordered, flat, rounded-md container. -->\n <section\n class=\"flex flex-col gap-0 overflow-hidden rounded-md border border-surface-200 bg-surface-0\"\n >\n <h3\n class=\"m-0 border-b border-surface-200 bg-surface-50 px-4 py-3 text-lg font-semibold text-color\"\n >\n {{ t(\"connection-overview\") }}\n </h3>\n <dl class=\"grid gap-3 p-4 sm:grid-cols-2 xl:grid-cols-3\">\n <div class=\"rounded-md border border-surface-200 bg-surface-50 p-3\">\n <dt class=\"text-xs text-muted-color\">\n {{ t(\"connection.provider\") }}\n </dt>\n <dd class=\"mb-0 mt-1 break-words font-medium text-color\">\n {{ provider()?.displayName || details.connection.providerKey }}\n </dd>\n </div>\n <div class=\"rounded-md border border-surface-200 bg-surface-50 p-3\">\n <dt class=\"text-xs text-muted-color\">\n {{ t(\"connection.authentication-mode\") }}\n </dt>\n <dd class=\"mb-0 mt-1 break-words font-medium text-color\">\n {{ authenticationModeLabel() }}\n </dd>\n </div>\n <div class=\"rounded-md border border-surface-200 bg-surface-50 p-3\">\n <dt class=\"text-xs text-muted-color\">\n {{ t(\"used-for-notifications\") }}\n </dt>\n <dd class=\"mb-0 mt-1 font-medium text-color\">\n {{\n details.bindings.includes(\"notifications\")\n ? t(\"yes\")\n : t(\"no\")\n }}\n </dd>\n </div>\n <div class=\"rounded-md border border-surface-200 bg-surface-50 p-3\">\n <dt class=\"text-xs text-muted-color\">\n {{ t(\"connection.last-validation\") }}\n </dt>\n <dd class=\"mb-0 mt-1 font-medium text-color\">\n {{\n details.connection.lastValidatedAtUtc\n ? (details.connection.lastValidatedAtUtc | date: \"medium\")\n : \"—\"\n }}\n </dd>\n </div>\n <div class=\"rounded-md border border-surface-200 bg-surface-50 p-3\">\n <dt class=\"text-xs text-muted-color\">\n {{ t(\"authorization-state\") }}\n </dt>\n <dd class=\"mb-0 mt-1 break-words font-medium text-color\">\n {{ details.authorizationState || \"—\" }}\n </dd>\n </div>\n @if (details.connection.senderDisplayName) {\n <div\n class=\"rounded-md border border-surface-200 bg-surface-50 p-3\"\n >\n <dt class=\"text-xs text-muted-color\">\n {{ t(\"connection.sender-display-name\") }}\n </dt>\n <dd class=\"mb-0 mt-1 break-words font-medium text-color\">\n {{ details.connection.senderDisplayName }}\n </dd>\n </div>\n }\n </dl>\n </section>\n\n @if (publicConfiguration().length > 0) {\n <section\n class=\"flex flex-col gap-0 overflow-hidden rounded-md border border-surface-200 bg-surface-0\"\n >\n <h3\n class=\"m-0 border-b border-surface-200 bg-surface-50 px-4 py-3 text-lg font-semibold text-color\"\n >\n {{ t(\"provider-settings\") }}\n </h3>\n <dl class=\"grid gap-3 p-4 sm:grid-cols-2 xl:grid-cols-3\">\n @for (entry of publicConfiguration(); track entry.key) {\n <div\n class=\"rounded-md border border-surface-200 bg-surface-50 p-3\"\n >\n <dt class=\"text-xs text-muted-color\">{{ entry.label }}</dt>\n <dd class=\"mb-0 mt-1 break-words font-medium text-color\">\n {{ entry.value }}\n </dd>\n </div>\n }\n </dl>\n </section>\n }\n\n <section\n class=\"flex flex-col gap-0 overflow-hidden rounded-md border border-surface-200 bg-surface-0\"\n >\n <h3\n class=\"m-0 border-b border-surface-200 bg-surface-50 px-4 py-3 text-lg font-semibold text-color\"\n >\n {{ t(\"credential-status\") }}\n </h3>\n <div class=\"grid gap-3 p-4\">\n @for (credential of credentialItems(); track credential.key) {\n <div\n class=\"grid gap-3 rounded-md border border-surface-200 bg-surface-50 p-3 sm:grid-cols-3 sm:items-center\"\n >\n <div class=\"min-w-0\">\n <p class=\"m-0 break-words font-medium text-color\">\n {{ credential.label }}\n </p>\n <p class=\"mb-0 mt-1 text-xs text-muted-color\">\n {{ credential.key }}\n </p>\n </div>\n <div class=\"min-w-0\">\n <p class=\"m-0 text-sm font-medium text-color\">\n {{ credential.storageLabel }}\n </p>\n <p class=\"mb-0 mt-1 text-xs text-muted-color\">\n @if (credential.lastRotatedAtUtc) {\n {{ t(\"last-rotated\") }} ·\n {{ credential.lastRotatedAtUtc | date: \"medium\" }}\n } @else {\n {{ t(\"last-rotated\") }} · —\n }\n </p>\n </div>\n <mt-email-delivery-status\n class=\"shrink-0 sm:justify-self-end\"\n kind=\"support\"\n [value]=\"\n credential.configured ? 'configured' : 'not-configured'\n \"\n />\n </div>\n } @empty {\n <p class=\"m-0 text-sm text-muted-color\">\n {{ t(\"no-credentials\") }}\n </p>\n }\n </div>\n </section>\n </div>\n </div>\n\n <div [class]=\"modal.footerClass\">\n <mt-button\n [label]=\"t('close')\"\n variant=\"outlined\"\n styleClass=\"w-full sm:w-auto\"\n (onClick)=\"close()\"\n />\n @if (actionMenuItems().length > 0) {\n <mt-button\n [label]=\"t('actions')\"\n icon=\"general.dots-vertical\"\n severity=\"secondary\"\n variant=\"outlined\"\n styleClass=\"w-full sm:w-auto\"\n (onClick)=\"actionMenu.toggle($event)\"\n />\n <mt-menu\n #actionMenu\n [model]=\"actionMenuItems()\"\n appendTo=\"body\"\n [ariaLabel]=\"t('actions')\"\n />\n }\n <mt-button\n [label]=\"t('edit')\"\n icon=\"general.edit-01\"\n [disabled]=\"!facade.managementAvailable()\"\n styleClass=\"w-full sm:w-auto\"\n (onClick)=\"edit()\"\n />\n </div>\n } @else {\n <div [class]=\"modal.contentClass + ' p-4 sm:p-5'\">\n <mt-empty-state illustration=\"none\" [title]=\"t('connection-not-found')\" />\n </div>\n <div [class]=\"modal.footerClass\">\n <mt-button [label]=\"t('close')\" variant=\"outlined\" (onClick)=\"close()\" />\n </div>\n }\n</ng-container>\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n} from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { TranslocoDirective, TranslocoService } from '@jsverse/transloco';\nimport { Button } from '@masterteam/components/button';\nimport { ConfirmationService } from '@masterteam/components/confirmation';\nimport { EmptyState } from '@masterteam/components/empty-state';\nimport { ModalService } from '@masterteam/components/modal';\nimport {\n Table,\n type ColumnDef,\n type TableAction,\n} from '@masterteam/components/table';\nimport { EmailControlledTestDialog } from '../../dialogs/controlled-test/email-controlled-test-dialog';\nimport { getEmailDeliveryStatusMap } from '../../components/email-delivery-status/email-delivery-status';\nimport { getApplicableProviderActions } from '../../email-delivery-descriptor.utils';\nimport { EmailDeliveryFacade } from '../../email-delivery.facade';\nimport { EMAIL_DELIVERY_DRAWER_STYLE_CLASS } from '../../email-delivery.ui';\nimport {\n EMAIL_DELIVERY_PERMISSIONS,\n type EmailConnectionSummary,\n} from '../../email-delivery.model';\nimport { EmailConnectionDetailsPage } from '../connection-details/email-connection-details';\nimport { EmailConnectionEditor } from '../connection-editor/email-connection-editor';\n\ninterface EmailConnectionTableRow extends EmailConnectionSummary {\n providerLabel: string;\n usedForNotifications: boolean;\n}\n\n@Component({\n selector: 'mt-email-delivery-connections',\n imports: [TranslocoDirective, Button, EmptyState, Table],\n templateUrl: './email-delivery-connections.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class EmailDeliveryConnections {\n private readonly transloco = inject(TranslocoService);\n private readonly modal = inject(ModalService);\n private readonly confirmationService = inject(ConfirmationService);\n protected readonly facade = inject(EmailDeliveryFacade);\n private readonly activeLanguage = toSignal(this.transloco.langChanges$, {\n initialValue: this.transloco.getActiveLang(),\n });\n\n protected readonly canConfigure = this.facade.hasPermission(\n EMAIL_DELIVERY_PERMISSIONS.controlPanel,\n );\n /** One rule for both the caption action and the empty-state action. */\n protected readonly canCreate = computed(\n () =>\n this.canConfigure &&\n this.facade.managementAvailable() &&\n this.facade.providers().length > 0,\n );\n protected readonly rows = computed<EmailConnectionTableRow[]>(() =>\n this.facade.connections().map((connection) => ({\n ...connection,\n providerLabel:\n this.facade.providerByKey(connection.providerKey)?.displayName ??\n connection.providerKey,\n usedForNotifications: connection.bindings.includes('notifications'),\n })),\n );\n protected readonly columns = computed<ColumnDef[]>(() => {\n this.activeLanguage();\n return [\n {\n key: 'name',\n label: this.t('connection.name'),\n sortable: true,\n filterConfig: { type: 'text' },\n },\n {\n key: 'providerLabel',\n label: this.t('connection.provider'),\n width: '18rem',\n filterConfig: {\n type: 'select',\n options: this.facade.providers().map((provider) => ({\n label: provider.displayName,\n value: provider.displayName,\n })),\n },\n },\n {\n key: 'senderAddress',\n label: this.t('connection.sender'),\n width: '18rem',\n filterConfig: { type: 'text' },\n },\n {\n key: 'state',\n label: this.t('connection.state'),\n type: 'status',\n width: '15rem',\n filterConfig: {\n type: 'select',\n options: connectionStates.map((state) => ({\n label: this.t(`status.connection.${toKebabCase(state)}`),\n value: state,\n })),\n },\n statusMap: getEmailDeliveryStatusMap(\n 'connection',\n this.transloco.translate.bind(this.transloco),\n ),\n },\n {\n key: 'usedForNotifications',\n label: this.t('in-use'),\n type: 'boolean',\n width: '10rem',\n readonly: true,\n filterConfig: { type: 'boolean' },\n },\n {\n key: 'lastValidatedAtUtc',\n label: this.t('connection.last-validation'),\n type: 'dateTime',\n width: '15rem',\n },\n ];\n });\n protected readonly rowActions = computed<TableAction[]>(() => {\n this.activeLanguage();\n return [\n {\n icon: 'general.eye',\n label: this.t('details'),\n action: (row) => this.openDetails(row as EmailConnectionSummary),\n },\n {\n icon: 'general.edit-01',\n label: this.t('edit'),\n hidden: () => !this.canMutate(),\n action: (row) => this.openEdit(row as EmailConnectionSummary),\n },\n {\n icon: 'general.check-circle',\n label: this.t('validate'),\n hidden: (row) =>\n !this.canMutate() ||\n !this.hasAction(row as EmailConnectionSummary, 'validate'),\n loading: () => this.facade.mutationLoading() === 'validate',\n action: (row) => this.validate(row as EmailConnectionSummary),\n },\n {\n icon: 'communication.send-01',\n label: this.t('test-send'),\n hidden: (row) =>\n !this.canMutate() ||\n !this.hasAction(row as EmailConnectionSummary, 'test-send'),\n action: (row) => this.openTest(row as EmailConnectionSummary),\n },\n {\n icon: 'general.link-01',\n label: this.t('bind'),\n hidden: (row) => {\n const connection = row as EmailConnectionSummary;\n return (\n !this.canMutate() ||\n connection.state !== 'Ready' ||\n connection.bindings.includes('notifications')\n );\n },\n action: (row) => this.bind(row as EmailConnectionSummary),\n },\n {\n icon: 'general.link-broken-01',\n label: this.t('unbind'),\n color: 'warn',\n hidden: (row) =>\n !this.canMutate() ||\n !(row as EmailConnectionSummary).bindings.includes('notifications'),\n action: (row) => this.confirmUnbind(row as EmailConnectionSummary),\n },\n {\n icon: 'general.trash-01',\n label: this.t('delete'),\n color: 'danger',\n hidden: (row) =>\n !this.canMutate() ||\n (row as EmailConnectionSummary).bindings.length > 0,\n action: (row) => this.confirmDelete(row as EmailConnectionSummary),\n },\n ];\n });\n\n protected createConnection(): void {\n this.openEditor(null);\n }\n\n protected openDetails(connection: EmailConnectionSummary): void {\n const drawer = this.modal.openModal(EmailConnectionDetailsPage, 'drawer', {\n header: this.t('connection-details'),\n styleClass: EMAIL_DELIVERY_DRAWER_STYLE_CLASS,\n position: 'end',\n appendTo: 'page-content',\n dismissableMask: true,\n dismissible: true,\n inputValues: { connectionId: connection.id },\n });\n drawer.onClose.subscribe(() => {\n this.facade.loadConnections().subscribe({\n error: (error) => this.facade.showError(error),\n });\n });\n }\n\n protected openEdit(connection: EmailConnectionSummary): void {\n this.openEditor(connection.id);\n }\n\n private validate(connection: EmailConnectionSummary): void {\n this.facade.validateConnection(connection.id).subscribe({\n error: (error) => this.facade.showError(error),\n });\n }\n\n private openTest(connection: EmailConnectionSummary): void {\n this.modal.openModal(EmailControlledTestDialog, 'dialog', {\n header: this.t('test.title'),\n styleClass: '!w-[42rem] max-w-[96vw]',\n dismissible: true,\n inputValues: {\n connectionId: connection.id,\n connectionName: connection.name,\n },\n });\n }\n\n private bind(connection: EmailConnectionSummary): void {\n this.facade.bindConnection(connection.id).subscribe({\n error: (error) => this.facade.showError(error),\n });\n }\n\n private confirmUnbind(connection: EmailConnectionSummary): void {\n this.confirmationService.confirm({\n type: 'dialog',\n header: this.t('unbind'),\n message: this.t('confirm.unbind'),\n accept: () =>\n this.facade.unbindConnection(connection.id).subscribe({\n error: (error) => this.facade.showError(error),\n }),\n });\n }\n\n private confirmDelete(connection: EmailConnectionSummary): void {\n this.confirmationService.confirmDelete({\n type: 'dialog',\n message: this.t('confirm.delete'),\n accept: () =>\n this.facade\n .deleteConnection(connection.id, connection.concurrencyToken)\n .subscribe({ error: (error) => this.facade.showError(error) }),\n });\n }\n\n private canMutate(): boolean {\n return this.canConfigure && this.facade.managementAvailable();\n }\n\n private openEditor(connectionId: string | null): void {\n const drawer = this.modal.openModal(EmailConnectionEditor, 'drawer', {\n header: this.t(\n connectionId ? 'editor.edit-title' : 'editor.create-title',\n ),\n styleClass: EMAIL_DELIVERY_DRAWER_STYLE_CLASS,\n position: 'end',\n appendTo: 'page-content',\n dismissableMask: true,\n dismissible: true,\n inputValues: { editorConnectionId: connectionId },\n });\n drawer.onClose.subscribe((saved: boolean) => {\n if (!saved) return;\n this.facade.loadConnections().subscribe({\n error: (error) => this.facade.showError(error),\n });\n });\n }\n\n private hasAction(\n connection: EmailConnectionSummary,\n actionKey: string,\n ): boolean {\n return getApplicableProviderActions(\n this.facade.providerByKey(connection.providerKey),\n connection.authenticationMode,\n ).some((action) => action.key === actionKey);\n }\n\n private t(key: string): string {\n return this.transloco.translate(`email-delivery.${key}`);\n }\n}\n\nconst connectionStates = [\n 'Draft',\n 'PendingAuthorization',\n 'PendingValidation',\n 'Ready',\n 'ReauthorizationRequired',\n 'ConditionalAccessRequired',\n 'Disabled',\n 'Invalid',\n];\n\nfunction toKebabCase(value: string): string {\n return value.replace(/([a-z0-9])([A-Z])/g, '$1-$2').toLowerCase();\n}\n","<ng-container *transloco=\"let t; prefix: 'email-delivery'\">\n <section class=\"space-y-4\" aria-label=\"{{ t('connections-title') }}\">\n @if (\n !facade.statusLoading() &&\n !facade.catalogLoading() &&\n facade.providers().length === 0\n ) {\n <mt-empty-state\n illustration=\"none\"\n [title]=\"t('no-providers-title')\"\n [description]=\"t('no-providers-description')\"\n />\n } @else {\n <mt-table\n [data]=\"rows()\"\n [columns]=\"columns()\"\n [rowActions]=\"rowActions()\"\n [loading]=\"\n facade.statusLoading() ||\n facade.connectionsLoading() ||\n facade.catalogLoading()\n \"\n [generalSearch]=\"true\"\n [showFilters]=\"true\"\n [emptyTitle]=\"t('no-connections-title')\"\n [emptyDescription]=\"t('no-connections-description')\"\n [emptyActionLabel]=\"canCreate() ? t('create-connection') : undefined\"\n emptyActionIcon=\"general.plus\"\n filterMode=\"column\"\n actionShape=\"popover\"\n [clickableRows]=\"true\"\n dataKey=\"id\"\n storageKey=\"email-delivery-connections\"\n (emptyAction)=\"createConnection()\"\n (rowClick)=\"openDetails($event)\"\n >\n <ng-template #captionEnd>\n @if (canCreate()) {\n <mt-button\n [label]=\"t('create-connection')\"\n icon=\"general.plus\"\n (onClick)=\"createConnection()\"\n />\n }\n </ng-template>\n </mt-table>\n }\n </section>\n</ng-container>\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n OnInit,\n signal,\n} from '@angular/core';\nimport { takeUntilDestroyed, toSignal } from '@angular/core/rxjs-interop';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { TranslocoDirective, TranslocoService } from '@jsverse/transloco';\nimport {\n Breadcrumb,\n type BreadcrumbItem,\n} from '@masterteam/components/breadcrumb';\nimport { EmptyState } from '@masterteam/components/empty-state';\nimport { Page } from '@masterteam/components/page';\nimport type { PageHeaderTab } from '@masterteam/components/page-header';\nimport { ToastService } from '@masterteam/components/toast';\nimport { Tooltip } from '@masterteam/components/tooltip';\nimport { EmailDeliveryStatus } from '../components/email-delivery-status/email-delivery-status';\nimport { EmailDeliveryFacade } from '../email-delivery.facade';\nimport { EMAIL_DELIVERY_PERMISSIONS } from '../email-delivery.model';\nimport { EmailDeliveryActivity } from '../pages/activity/email-delivery-activity';\nimport { EmailDeliveryConnections } from '../pages/connections/email-delivery-connections';\n\ntype EmailDeliveryTab = 'connections' | 'activity';\n\n@Component({\n selector: 'mt-email-delivery-shell',\n imports: [\n Page,\n TranslocoDirective,\n Breadcrumb,\n EmptyState,\n Tooltip,\n EmailDeliveryStatus,\n EmailDeliveryConnections,\n EmailDeliveryActivity,\n ],\n templateUrl: './email-delivery-shell.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class EmailDeliveryShell implements OnInit {\n private readonly route = inject(ActivatedRoute);\n private readonly router = inject(Router);\n private readonly transloco = inject(TranslocoService);\n private readonly toast = inject(ToastService);\n protected readonly facade = inject(EmailDeliveryFacade);\n\n private readonly activeLanguage = toSignal(this.transloco.langChanges$, {\n initialValue: this.transloco.getActiveLang(),\n });\n protected readonly activeTab = signal<EmailDeliveryTab>('connections');\n protected readonly canView = this.facade.hasPermission(\n EMAIL_DELIVERY_PERMISSIONS.controlPanel,\n );\n protected readonly tabs = computed<PageHeaderTab[]>(() => {\n this.activeLanguage();\n return [\n { label: this.t('tabs.connections'), value: 'connections' },\n { label: this.t('tabs.activity'), value: 'activity' },\n ];\n });\n /**\n * Same trail the sibling control-panel pages render, so Email Delivery reads\n * as part of Product Settings rather than a standalone screen.\n */\n protected readonly breadcrumbItems = computed<BreadcrumbItem[]>(() => {\n this.activeLanguage();\n return [\n {\n label: '',\n icon: 'general.home-line',\n routerLink: '/control-panel/workspaces',\n },\n {\n label: this.t('breadcrumb.product-settings'),\n routerLink: PRODUCT_SETTINGS_ROUTE,\n },\n { label: this.t('title') },\n ];\n });\n /**\n * Readiness moved out of a page-wide banner and onto a chip beside the title.\n * The banner's explanation survives as the chip's tooltip, so the reason is\n * still one hover away without a block of text above every tab.\n */\n protected readonly readiness = computed<\n 'ready' | 'needs-setup' | 'unavailable' | null\n >(() => {\n const status = this.facade.status();\n if (!status) return null;\n if (!status.managementEnabled) return 'unavailable';\n return status.isReady ? 'ready' : 'needs-setup';\n });\n protected readonly readinessHint = computed(() => {\n this.activeLanguage();\n const status = this.facade.status();\n return status ? this.facade.describeCode(status.code) : '';\n });\n\n constructor() {\n this.route.queryParamMap.pipe(takeUntilDestroyed()).subscribe((params) => {\n this.activeTab.set(\n params.get('tab') === 'activity' ? 'activity' : 'connections',\n );\n });\n }\n\n ngOnInit(): void {\n if (!this.canView) return;\n this.facade.initialize();\n this.syncTabFromUrl();\n this.handleAuthorizationCallback();\n }\n\n protected onTabChange(value: string | number): void {\n if (value !== 'connections' && value !== 'activity') return;\n void this.router.navigate([], {\n relativeTo: this.route,\n queryParams: { tab: value === 'connections' ? null : value },\n queryParamsHandling: 'merge',\n });\n }\n\n protected goBack(): void {\n void this.router.navigate([PRODUCT_SETTINGS_ROUTE]);\n }\n\n private syncTabFromUrl(): void {\n this.activeTab.set(\n this.route.snapshot.queryParamMap.get('tab') === 'activity'\n ? 'activity'\n : 'connections',\n );\n }\n\n private handleAuthorizationCallback(): void {\n const query = this.route.snapshot.queryParamMap;\n const authorization = query.get('authorization');\n const code = query.get('code');\n if (!authorization && !code) return;\n\n const message = this.facade.describeCode(code);\n if (authorization === 'completed') {\n this.toast.success(message);\n } else {\n this.toast.error(message);\n }\n\n const pendingConnectionId =\n this.facade.takePendingAuthorizationConnection();\n void this.router\n .navigate([], {\n relativeTo: this.route,\n queryParams: { authorization: null, code: null },\n queryParamsHandling: 'merge',\n replaceUrl: true,\n })\n .then(() => {\n if (!pendingConnectionId) return;\n this.facade.loadConnection(pendingConnectionId).subscribe({\n next: () => this.facade.loadConnections().subscribe(),\n error: (error) => this.facade.showError(error),\n });\n });\n }\n\n private t(key: string): string {\n return this.transloco.translate(`email-delivery.${key}`);\n }\n}\n\nconst PRODUCT_SETTINGS_ROUTE = '/control-panel/product-settings';\n","<ng-container *transloco=\"let t; prefix: 'email-delivery'\">\n <mt-page\n [title]=\"t('title')\"\n avatarIcon=\"communication.mail-01\"\n [avatarStyle]=\"{\n '--p-avatar-background': 'var(--p-blue-100)',\n '--p-avatar-color': 'var(--p-blue-700)',\n }\"\n [tabs]=\"canView ? tabs() : []\"\n [activeTab]=\"activeTab()\"\n contentClass=\"min-h-0 max-[1025px]:p-4 max-[640px]:p-3\"\n backButton\n (backButtonClick)=\"goBack()\"\n (tabChange)=\"onTabChange($event)\"\n >\n <!-- Declared unconditionally: a content query cannot reach a template that\n only exists inside a control-flow block, so the condition lives here. -->\n <ng-template #titleEnd>\n @if (canView && readiness(); as state) {\n <span class=\"shrink-0\" [mtTooltip]=\"readinessHint()\">\n <mt-email-delivery-status kind=\"readiness\" [value]=\"state\" />\n </span>\n }\n </ng-template>\n\n @if (canView) {\n <div\n class=\"flex min-h-0 flex-col gap-4 [&_.mt-actions-column]:w-[5rem] [&_mt-card]:rounded-md [&_mt-table_:has(>.p-datatable)]:rounded-md\"\n >\n <mt-breadcrumb\n [items]=\"breadcrumbItems()\"\n styleClass=\"mx-1 flex justify-start\"\n />\n\n @if (activeTab() === \"activity\") {\n <mt-email-delivery-activity />\n } @else {\n <mt-email-delivery-connections />\n }\n </div>\n } @else {\n <mt-empty-state\n illustration=\"none\"\n [title]=\"t('access-denied-title')\"\n [description]=\"t('access-denied-description')\"\n />\n }\n </mt-page>\n</ng-container>\n"],"names":["humanizeIdentifier","identifierEntity","i2","i1"],"mappings":"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"}