@memberjunction/ng-dashboards 5.28.0 → 5.30.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/AI/components/agents/agent-configuration.component.d.ts.map +1 -1
- package/dist/AI/components/agents/agent-configuration.component.js +11 -9
- package/dist/AI/components/agents/agent-configuration.component.js.map +1 -1
- package/dist/AI/components/agents/agent-editor.component.d.ts.map +1 -1
- package/dist/AI/components/agents/agent-editor.component.js +21 -19
- package/dist/AI/components/agents/agent-editor.component.js.map +1 -1
- package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js +154 -154
- package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js.map +1 -1
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.d.ts.map +1 -1
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.js +8 -0
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.js.map +1 -1
- package/dist/AI/components/vectors/vector-management-resource.component.d.ts +1 -1
- package/dist/AI/components/vectors/vector-management-resource.component.d.ts.map +1 -1
- package/dist/AI/components/vectors/vector-management-resource.component.js +2 -2
- package/dist/AI/components/vectors/vector-management-resource.component.js.map +1 -1
- package/dist/APIKeys/api-applications-panel.component.d.ts +1 -1
- package/dist/APIKeys/api-applications-panel.component.d.ts.map +1 -1
- package/dist/APIKeys/api-applications-panel.component.js +15 -2
- package/dist/APIKeys/api-applications-panel.component.js.map +1 -1
- package/dist/APIKeys/api-key-edit-panel.component.d.ts.map +1 -1
- package/dist/APIKeys/api-key-edit-panel.component.js +17 -5
- package/dist/APIKeys/api-key-edit-panel.component.js.map +1 -1
- package/dist/Archiving/components/archive-config-resource.component.d.ts +20 -0
- package/dist/Archiving/components/archive-config-resource.component.d.ts.map +1 -0
- package/dist/Archiving/components/archive-config-resource.component.js +46 -0
- package/dist/Archiving/components/archive-config-resource.component.js.map +1 -0
- package/dist/Archiving/components/archive-runs-resource.component.d.ts +20 -0
- package/dist/Archiving/components/archive-runs-resource.component.d.ts.map +1 -0
- package/dist/Archiving/components/archive-runs-resource.component.js +46 -0
- package/dist/Archiving/components/archive-runs-resource.component.js.map +1 -0
- package/dist/Credentials/components/credentials-list-resource.component.d.ts.map +1 -1
- package/dist/Credentials/components/credentials-list-resource.component.js +56 -71
- package/dist/Credentials/components/credentials-list-resource.component.js.map +1 -1
- package/dist/DashboardBrowser/dashboard-browser-resource.component.d.ts +0 -8
- package/dist/DashboardBrowser/dashboard-browser-resource.component.d.ts.map +1 -1
- package/dist/DashboardBrowser/dashboard-browser-resource.component.js +73 -74
- package/dist/DashboardBrowser/dashboard-browser-resource.component.js.map +1 -1
- package/dist/DashboardBrowser/dashboard-share-adapter.d.ts +25 -0
- package/dist/DashboardBrowser/dashboard-share-adapter.d.ts.map +1 -0
- package/dist/DashboardBrowser/dashboard-share-adapter.js +99 -0
- package/dist/DashboardBrowser/dashboard-share-adapter.js.map +1 -0
- package/dist/DashboardBrowser/dashboard-share-dialog.component.d.ts +21 -104
- package/dist/DashboardBrowser/dashboard-share-dialog.component.d.ts.map +1 -1
- package/dist/DashboardBrowser/dashboard-share-dialog.component.js +48 -530
- package/dist/DashboardBrowser/dashboard-share-dialog.component.js.map +1 -1
- package/dist/DataExplorer/data-explorer-dashboard.component.d.ts +5 -0
- package/dist/DataExplorer/data-explorer-dashboard.component.d.ts.map +1 -1
- package/dist/DataExplorer/data-explorer-dashboard.component.js +17 -0
- package/dist/DataExplorer/data-explorer-dashboard.component.js.map +1 -1
- package/dist/Integration/components/connections/connections.component.d.ts +18 -1
- package/dist/Integration/components/connections/connections.component.d.ts.map +1 -1
- package/dist/Integration/components/connections/connections.component.js +251 -199
- package/dist/Integration/components/connections/connections.component.js.map +1 -1
- package/dist/Integration/services/integration-data.service.d.ts +7 -2
- package/dist/Integration/services/integration-data.service.d.ts.map +1 -1
- package/dist/Integration/services/integration-data.service.js +10 -2
- package/dist/Integration/services/integration-data.service.js.map +1 -1
- package/dist/KnowledgeHub/components/analytics/analytics-resource.component.js +144 -144
- package/dist/KnowledgeHub/components/analytics/analytics-resource.component.js.map +1 -1
- package/dist/Lists/components/lists-operations-resource.component.d.ts.map +1 -1
- package/dist/Lists/components/lists-operations-resource.component.js +12 -14
- package/dist/Lists/components/lists-operations-resource.component.js.map +1 -1
- package/dist/MCP/components/mcp-connection-dialog.component.js +1 -1
- package/dist/MCP/components/mcp-connection-dialog.component.js.map +1 -1
- package/dist/MCP/mcp-dashboard.component.d.ts +170 -0
- package/dist/MCP/mcp-dashboard.component.d.ts.map +1 -1
- package/dist/MCP/mcp-dashboard.component.js +2521 -758
- package/dist/MCP/mcp-dashboard.component.js.map +1 -1
- package/dist/MCP/mcp-filter-panel.component.d.ts +16 -1
- package/dist/MCP/mcp-filter-panel.component.d.ts.map +1 -1
- package/dist/MCP/mcp-filter-panel.component.js +187 -60
- package/dist/MCP/mcp-filter-panel.component.js.map +1 -1
- package/dist/MCP/mcp-resource.component.d.ts +0 -9
- package/dist/MCP/mcp-resource.component.d.ts.map +1 -1
- package/dist/MCP/mcp-resource.component.js +1 -10
- package/dist/MCP/mcp-resource.component.js.map +1 -1
- package/dist/MCP/mcp.module.d.ts +7 -6
- package/dist/MCP/mcp.module.d.ts.map +1 -1
- package/dist/MCP/mcp.module.js +4 -8
- package/dist/MCP/mcp.module.js.map +1 -1
- package/dist/Permissions/audit-log-resource.component.d.ts +38 -0
- package/dist/Permissions/audit-log-resource.component.d.ts.map +1 -0
- package/dist/Permissions/audit-log-resource.component.js +380 -0
- package/dist/Permissions/audit-log-resource.component.js.map +1 -0
- package/dist/Permissions/permissions-shared.d.ts +51 -0
- package/dist/Permissions/permissions-shared.d.ts.map +1 -0
- package/dist/Permissions/permissions-shared.js +91 -0
- package/dist/Permissions/permissions-shared.js.map +1 -0
- package/dist/Permissions/resource-access-resource.component.d.ts +45 -0
- package/dist/Permissions/resource-access-resource.component.d.ts.map +1 -0
- package/dist/Permissions/resource-access-resource.component.js +342 -0
- package/dist/Permissions/resource-access-resource.component.js.map +1 -0
- package/dist/Permissions/user-access-resource.component.d.ts +39 -0
- package/dist/Permissions/user-access-resource.component.d.ts.map +1 -0
- package/dist/Permissions/user-access-resource.component.js +346 -0
- package/dist/Permissions/user-access-resource.component.js.map +1 -0
- package/dist/QueryBrowser/query-browser-resource.component.d.ts +13 -3
- package/dist/QueryBrowser/query-browser-resource.component.d.ts.map +1 -1
- package/dist/QueryBrowser/query-browser-resource.component.js +186 -139
- package/dist/QueryBrowser/query-browser-resource.component.js.map +1 -1
- package/dist/archiving-dashboards.module.d.ts +19 -0
- package/dist/archiving-dashboards.module.d.ts.map +1 -0
- package/dist/archiving-dashboards.module.js +52 -0
- package/dist/archiving-dashboards.module.js.map +1 -0
- package/dist/component-studio-dashboards.module.d.ts +1 -0
- package/dist/component-studio-dashboards.module.d.ts.map +1 -1
- package/dist/component-studio-dashboards.module.js +7 -0
- package/dist/component-studio-dashboards.module.js.map +1 -1
- package/dist/core-dashboards.module.d.ts +24 -19
- package/dist/core-dashboards.module.d.ts.map +1 -1
- package/dist/core-dashboards.module.js +30 -1
- package/dist/core-dashboards.module.js.map +1 -1
- package/dist/module.d.ts +13 -12
- package/dist/module.d.ts.map +1 -1
- package/dist/module.js +7 -0
- package/dist/module.js.map +1 -1
- package/dist/public-api.d.ts +7 -1
- package/dist/public-api.d.ts.map +1 -1
- package/dist/public-api.js +8 -0
- package/dist/public-api.js.map +1 -1
- package/dist/shared/pipes/highlight-search.pipe.d.ts +1 -1
- package/dist/shared/pipes/highlight-search.pipe.d.ts.map +1 -1
- package/dist/shared/pipes/highlight-search.pipe.js +14 -4
- package/dist/shared/pipes/highlight-search.pipe.js.map +1 -1
- package/package.json +52 -48
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api-key-edit-panel.component.js","sourceRoot":"","sources":["../../src/APIKeys/api-key-edit-panel.component.ts","../../src/APIKeys/api-key-edit-panel.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, EventEmitter, HostListener, Input, OnChanges, Output, SimpleChanges } from '@angular/core';\nimport { Metadata, RunView } from '@memberjunction/core';\nimport { MJAPIKeyEntity, MJAPIScopeEntity, MJAPIKeyScopeEntity, MJAPIKeyUsageLogEntity } from '@memberjunction/core-entities';\nimport { GraphQLDataProvider, GraphQLEncryptionClient } from '@memberjunction/graphql-dataprovider';\nimport { APIKeysEngineBase, parseAPIScopeUIConfig } from '@memberjunction/api-keys-base';\n/** Scope with selection state */\ninterface ScopeItem {\n scope: MJAPIScopeEntity;\n selected: boolean;\n originallySelected: boolean;\n}\n\n/** Grouped scopes by category */\ninterface ScopeCategory {\n name: string;\n icon: string;\n color: string;\n scopes: ScopeItem[];\n expanded: boolean;\n allSelected: boolean;\n}\n\n/** Usage log display item */\ninterface UsageLogItem {\n timestamp: Date;\n endpoint: string;\n method: string;\n statusCode: number;\n responseTime: number;\n ipAddress: string;\n}\n\n/**\n * Panel for viewing and editing existing API keys\n */\n@Component({\n standalone: false,\n selector: 'mj-api-key-edit-panel',\n templateUrl: './api-key-edit-panel.component.html',\n styleUrls: ['./api-key-edit-panel.component.css']\n})\nexport class APIKeyEditPanelComponent implements OnChanges {\n @Input() Visible = false;\n @Input() KeyId: string | null = null;\n @Output() VisibleChange = new EventEmitter<boolean>();\n @Output() Updated = new EventEmitter<MJAPIKeyEntity>();\n @Output() Revoked = new EventEmitter<MJAPIKeyEntity>();\n @Output() Closed = new EventEmitter<void>();\n\n private md = new Metadata();\n\n // Current key\n public APIKey: MJAPIKeyEntity | null = null;\n public IsLoading = true;\n public IsSaving = false;\n public IsRevoking = false;\n\n // Edit mode\n public IsEditing = false;\n public EditLabel = '';\n public EditDescription = '';\n public EditExpiresAt: Date | null = null;\n\n // Scopes\n public ScopeCategories: ScopeCategory[] = [];\n public IsLoadingScopes = true;\n public HasScopeChanges = false;\n\n // Usage logs\n public UsageLogs: UsageLogItem[] = [];\n public IsLoadingLogs = true;\n\n // Tabs\n public ActiveTab: 'details' | 'scopes' | 'usage' = 'details';\n\n // Revoke confirmation\n public ShowRevokeConfirm = false;\n public RevokeConfirmText = '';\n\n // Messages\n public SuccessMessage = '';\n public ErrorMessage = '';\n\n // Default UI config for categories without explicit configuration\n private readonly defaultUIConfig = {\n icon: 'fa-solid fa-ellipsis',\n color: 'var(--mj-text-muted)'\n };\n\n async ngOnChanges(changes: SimpleChanges): Promise<void> {\n if (changes['KeyId'] && this.KeyId) {\n await this.loadKey();\n }\n }\n\n /**\n * Handle escape key to close panel\n */\n @HostListener('document:keydown.escape')\n public onEscapeKey(): void {\n if (this.Visible && !this.IsSaving && !this.IsRevoking) {\n this.close();\n }\n }\n\n /**\n * Load the API key and related data\n */\n private async loadKey(): Promise<void> {\n this.IsLoading = true;\n this.resetState();\n\n try {\n const key = await this.md.GetEntityObject<MJAPIKeyEntity>('MJ: API Keys');\n if (await key.Load(this.KeyId!)) {\n this.APIKey = key;\n this.EditLabel = key.Label;\n this.EditDescription = key.Description || '';\n this.EditExpiresAt = key.ExpiresAt;\n\n // Load scopes and usage in parallel\n await Promise.all([\n this.loadScopes(),\n this.loadUsageLogs()\n ]);\n }\n } catch (error) {\n console.error('Error loading API key:', error);\n this.ErrorMessage = 'Failed to load API key details';\n } finally {\n this.IsLoading = false;\n }\n }\n\n /**\n * Load all scopes and mark assigned ones\n */\n private async loadScopes(): Promise<void> {\n this.IsLoadingScopes = true;\n try {\n const rv = new RunView();\n const base = APIKeysEngineBase.Instance;\n\n // Get all scopes from cache, load assigned scopes from DB\n const allScopes = base.Scopes;\n const assignedScopesResult = await rv.RunView<MJAPIKeyScopeEntity>({\n EntityName: 'MJ: API Key Scopes',\n ExtraFilter: `APIKeyID='${this.KeyId}'`,\n ResultType: 'entity_object'\n });\n\n if (assignedScopesResult.Success) {\n const assignedScopeIds = new Set(\n assignedScopesResult.Results.map(ks => ks.ScopeID)\n );\n\n // Build category UI config from root scopes\n const categoryUIConfigs = new Map<string, { icon: string; color: string }>();\n for (const scope of allScopes) {\n if (!scope.ParentID) {\n const uiConfig = parseAPIScopeUIConfig(scope);\n categoryUIConfigs.set(scope.Category, {\n icon: uiConfig.icon || this.defaultUIConfig.icon,\n color: uiConfig.color || this.defaultUIConfig.color\n });\n }\n }\n\n const categoryMap = new Map<string, ScopeItem[]>();\n\n for (const scope of allScopes) {\n const category = scope.Category || 'Other';\n if (!categoryMap.has(category)) {\n categoryMap.set(category, []);\n }\n const isSelected = assignedScopeIds.has(scope.ID);\n categoryMap.get(category)!.push({\n scope,\n selected: isSelected,\n originallySelected: isSelected\n });\n }\n\n this.ScopeCategories = Array.from(categoryMap.entries()).map(([name, scopes]) => {\n const config = categoryUIConfigs.get(name) || this.defaultUIConfig;\n return {\n name,\n icon: config.icon,\n color: config.color,\n scopes: scopes.sort((a, b) => a.scope.Name.localeCompare(b.scope.Name)),\n expanded: scopes.some(s => s.selected),\n allSelected: scopes.length > 0 && scopes.every(s => s.selected)\n };\n }).sort((a, b) => a.name.localeCompare(b.name));\n }\n } catch (error) {\n console.error('Error loading scopes:', error);\n } finally {\n this.IsLoadingScopes = false;\n }\n }\n\n /**\n * Load usage logs for this key\n */\n private async loadUsageLogs(): Promise<void> {\n this.IsLoadingLogs = true;\n try {\n const rv = new RunView();\n const result = await rv.RunView<MJAPIKeyUsageLogEntity>({\n EntityName: 'MJ: API Key Usage Logs',\n ExtraFilter: `APIKeyID='${this.KeyId}'`,\n OrderBy: '__mj_CreatedAt DESC',\n MaxRows: 100,\n ResultType: 'entity_object'\n });\n\n if (result.Success) {\n this.UsageLogs = result.Results.map(log => ({\n timestamp: log.__mj_CreatedAt,\n endpoint: log.Endpoint || '/unknown',\n method: log.Method || 'GET',\n statusCode: log.StatusCode || 200,\n responseTime: log.ResponseTimeMs || 0,\n ipAddress: log.IPAddress || 'Unknown'\n }));\n }\n } catch (error) {\n console.error('Error loading usage logs:', error);\n } finally {\n this.IsLoadingLogs = false;\n }\n }\n\n /**\n * Reset component state\n */\n private resetState(): void {\n this.IsEditing = false;\n this.ShowRevokeConfirm = false;\n this.RevokeConfirmText = '';\n this.SuccessMessage = '';\n this.ErrorMessage = '';\n this.HasScopeChanges = false;\n this.ActiveTab = 'details';\n }\n\n /**\n * Toggle edit mode\n */\n public toggleEdit(): void {\n if (this.IsEditing) {\n // Cancel edit\n this.EditLabel = this.APIKey!.Label;\n this.EditDescription = this.APIKey!.Description || '';\n this.EditExpiresAt = this.APIKey!.ExpiresAt;\n }\n this.IsEditing = !this.IsEditing;\n }\n\n /**\n * Save changes to the key\n */\n public async saveChanges(): Promise<void> {\n if (!this.APIKey) return;\n\n this.IsSaving = true;\n this.ErrorMessage = '';\n\n try {\n this.APIKey.Label = this.EditLabel.trim();\n this.APIKey.Description = this.EditDescription.trim() || null;\n this.APIKey.ExpiresAt = this.EditExpiresAt;\n\n const result = await this.APIKey.Save();\n if (result) {\n this.IsEditing = false;\n this.SuccessMessage = 'API key updated successfully';\n this.Updated.emit(this.APIKey);\n setTimeout(() => this.SuccessMessage = '', 3000);\n } else {\n this.ErrorMessage = 'Failed to save changes';\n }\n } catch (error) {\n console.error('Error saving key:', error);\n this.ErrorMessage = 'An error occurred while saving';\n } finally {\n this.IsSaving = false;\n }\n }\n\n /**\n * Save scope changes\n */\n public async saveScopeChanges(): Promise<void> {\n if (!this.APIKey) return;\n\n this.IsSaving = true;\n this.ErrorMessage = '';\n\n try {\n const allScopes = this.ScopeCategories.flatMap(cat => cat.scopes);\n\n // Find scopes to add and remove\n const toAdd = allScopes.filter(s => s.selected && !s.originallySelected);\n const toRemove = allScopes.filter(s => !s.selected && s.originallySelected);\n\n // Add new scope assignments\n for (const item of toAdd) {\n const keyScope = await this.md.GetEntityObject<MJAPIKeyScopeEntity>('MJ: API Key Scopes');\n keyScope.NewRecord();\n keyScope.APIKeyID = this.APIKey.ID;\n keyScope.ScopeID = item.scope.ID;\n await keyScope.Save();\n item.originallySelected = true;\n }\n\n // Remove scope assignments\n const rv = new RunView();\n for (const item of toRemove) {\n const result = await rv.RunView<MJAPIKeyScopeEntity>({\n EntityName: 'MJ: API Key Scopes',\n ExtraFilter: `APIKeyID='${this.APIKey.ID}' AND ScopeID='${item.scope.ID}'`,\n ResultType: 'entity_object'\n });\n if (result.Success && result.Results.length > 0) {\n await result.Results[0].Delete();\n }\n item.originallySelected = false;\n }\n\n this.HasScopeChanges = false;\n this.SuccessMessage = 'Permissions updated successfully';\n setTimeout(() => this.SuccessMessage = '', 3000);\n } catch (error) {\n console.error('Error saving scopes:', error);\n this.ErrorMessage = 'Failed to update permissions';\n } finally {\n this.IsSaving = false;\n }\n }\n\n /**\n * Check for scope changes and update category allSelected states\n */\n public onScopeChange(): void {\n // Update allSelected state for each category\n for (const category of this.ScopeCategories) {\n category.allSelected = category.scopes.length > 0 && category.scopes.every(s => s.selected);\n }\n\n // Track overall changes\n const allScopes = this.ScopeCategories.flatMap(cat => cat.scopes);\n this.HasScopeChanges = allScopes.some(s => s.selected !== s.originallySelected);\n }\n\n /**\n * Toggle category expansion\n */\n public toggleCategory(category: ScopeCategory): void {\n category.expanded = !category.expanded;\n }\n\n /**\n * Toggle all scopes in a category on/off\n */\n public toggleCategoryAll(category: ScopeCategory): void {\n // Toggle to opposite of current allSelected state\n const newState = !category.allSelected;\n category.allSelected = newState;\n\n // Apply to all scopes in category\n for (const item of category.scopes) {\n item.selected = newState;\n }\n\n // Update change tracking\n this.onScopeChange();\n }\n\n /**\n * Start revoke flow\n */\n public startRevoke(): void {\n this.ShowRevokeConfirm = true;\n this.RevokeConfirmText = '';\n }\n\n /**\n * Cancel revoke\n */\n public cancelRevoke(): void {\n this.ShowRevokeConfirm = false;\n this.RevokeConfirmText = '';\n }\n\n /**\n * Confirm and execute revoke using GraphQL client\n */\n public async confirmRevoke(): Promise<void> {\n if (!this.APIKey || this.RevokeConfirmText !== 'REVOKE') return;\n\n this.IsRevoking = true;\n this.ErrorMessage = '';\n\n try {\n const provider = Metadata.Provider as GraphQLDataProvider;\n const encryptionClient = new GraphQLEncryptionClient(provider);\n\n const result = await encryptionClient.RevokeAPIKey(this.APIKey.ID);\n\n if (result.Success) {\n // Update local state to reflect the change\n this.APIKey.Status = 'Revoked';\n this.ShowRevokeConfirm = false;\n this.SuccessMessage = 'API key has been revoked';\n this.Revoked.emit(this.APIKey);\n } else {\n this.ErrorMessage = result.Error || 'Failed to revoke key';\n }\n } catch (error) {\n console.error('Error revoking key:', error);\n this.ErrorMessage = 'An error occurred while revoking';\n } finally {\n this.IsRevoking = false;\n }\n }\n\n /**\n * Format date for display\n */\n public formatDate(date: Date | null): string {\n if (!date) return 'Never';\n return new Date(date).toLocaleDateString('en-US', {\n year: 'numeric',\n month: 'long',\n day: 'numeric',\n hour: '2-digit',\n minute: '2-digit'\n });\n }\n\n /**\n * Format relative time\n */\n public formatRelativeTime(date: Date): string {\n const now = new Date();\n const diff = now.getTime() - new Date(date).getTime();\n const minutes = Math.floor(diff / 60000);\n const hours = Math.floor(diff / 3600000);\n const days = Math.floor(diff / 86400000);\n\n if (minutes < 1) return 'Just now';\n if (minutes < 60) return `${minutes}m ago`;\n if (hours < 24) return `${hours}h ago`;\n if (days < 7) return `${days}d ago`;\n\n return new Date(date).toLocaleDateString();\n }\n\n /**\n * Get status class for HTTP status code\n */\n public getStatusClass(statusCode: number): string {\n if (statusCode >= 200 && statusCode < 300) return 'status-success';\n if (statusCode >= 400 && statusCode < 500) return 'status-warning';\n if (statusCode >= 500) return 'status-error';\n return '';\n }\n\n /**\n * Get assigned scope count\n */\n public getAssignedScopeCount(): number {\n return this.ScopeCategories.reduce((sum, cat) =>\n sum + cat.scopes.filter(s => s.selected).length, 0);\n }\n\n /**\n * Get selected scope count for a category (for template use)\n */\n public getSelectedCount(category: ScopeCategory): number {\n return category.scopes.filter(s => s.selected).length;\n }\n\n /**\n * Get minimum date for expiration (tomorrow)\n */\n public getMinDate(): Date {\n const tomorrow = new Date();\n tomorrow.setDate(tomorrow.getDate() + 1);\n return tomorrow;\n }\n\n /**\n * Close the panel\n */\n public close(): void {\n this.Visible = false;\n this.VisibleChange.emit(false);\n this.Closed.emit();\n }\n}\n","<!-- Slide-out Backdrop -->\n@if (Visible) {\n <div class=\"slideout-backdrop\" (click)=\"close()\"></div>\n}\n\n<!-- Slide-out Panel -->\n<div class=\"slideout-panel\" [class.open]=\"Visible\">\n <!-- Header -->\n <div class=\"slideout-header\">\n <div class=\"slideout-title\">\n <i class=\"fa-solid fa-key\"></i>\n <span>API Key Details</span>\n <span class=\"key-status\" [class.active]=\"APIKey?.Status === 'Active'\"\n [class.revoked]=\"APIKey?.Status === 'Revoked'\">\n {{APIKey?.Status}}\n </span>\n </div>\n <button class=\"slideout-close\" (click)=\"close()\" title=\"Close (Esc)\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n </div>\n\n @if (IsLoading) {\n <mj-loading text=\"Loading key details...\"></mj-loading>\n }\n\n @if (!IsLoading && APIKey) {\n <!-- Success/Error Messages -->\n @if (SuccessMessage) {\n <div class=\"message success\">\n <i class=\"fa-solid fa-check-circle\"></i>\n {{SuccessMessage}}\n </div>\n }\n @if (ErrorMessage) {\n <div class=\"message error\">\n <i class=\"fa-solid fa-circle-exclamation\"></i>\n {{ErrorMessage}}\n </div>\n }\n <!-- Tabs -->\n <div class=\"slideout-tabs\">\n <button class=\"slideout-tab\" [class.active]=\"ActiveTab === 'details'\"\n (click)=\"ActiveTab = 'details'\">\n <i class=\"fa-solid fa-info-circle\"></i>\n Details\n </button>\n <button class=\"slideout-tab\" [class.active]=\"ActiveTab === 'scopes'\"\n (click)=\"ActiveTab = 'scopes'\">\n <i class=\"fa-solid fa-shield-halved\"></i>\n Permissions\n @if (HasScopeChanges) {\n <span class=\"tab-badge unsaved\">!</span>\n }\n </button>\n <button class=\"slideout-tab\" [class.active]=\"ActiveTab === 'usage'\"\n (click)=\"ActiveTab = 'usage'\">\n <i class=\"fa-solid fa-chart-line\"></i>\n Usage\n </button>\n </div>\n <div class=\"slideout-content\">\n <!-- Details Tab -->\n @if (ActiveTab === 'details') {\n <div class=\"tab-panel\">\n <div class=\"key-info-card\">\n <div class=\"info-header\">\n <div class=\"info-row\">\n <span class=\"info-label\">Key Hash</span>\n <code class=\"hash-value\">{{APIKey.Hash}}</code>\n </div>\n </div>\n <div class=\"info-grid\">\n <div class=\"info-item\">\n <span class=\"info-label\">Created</span>\n <span class=\"info-value\">{{formatDate(APIKey.__mj_CreatedAt)}}</span>\n </div>\n <div class=\"info-item\">\n <span class=\"info-label\">Created By</span>\n <span class=\"info-value\">{{APIKey.CreatedByUser}}</span>\n </div>\n <div class=\"info-item\">\n <span class=\"info-label\">Owner</span>\n <span class=\"info-value\">{{APIKey.User}}</span>\n </div>\n <div class=\"info-item\">\n <span class=\"info-label\">Last Used</span>\n <span class=\"info-value\" [class.never-used]=\"!APIKey.LastUsedAt\">\n {{APIKey.LastUsedAt ? formatDate(APIKey.LastUsedAt) : 'Never'}}\n </span>\n </div>\n </div>\n </div>\n <!-- Editable Fields -->\n <div class=\"edit-section\">\n <div class=\"section-header\">\n <h4>Key Configuration</h4>\n @if (APIKey.Status === 'Active') {\n <button class=\"edit-toggle\"\n (click)=\"toggleEdit()\">\n <i class=\"fa-solid\" [class.fa-pencil]=\"!IsEditing\" [class.fa-times]=\"IsEditing\"></i>\n {{IsEditing ? 'Cancel' : 'Edit'}}\n </button>\n }\n </div>\n <div class=\"form-field\">\n <label>Label</label>\n <input class=\"mj-input form-input\" [(ngModel)]=\"EditLabel\"\n [disabled]=\"!IsEditing\" />\n </div>\n <div class=\"form-field\">\n <label>Description</label>\n <textarea class=\"mj-textarea form-textarea\" [(ngModel)]=\"EditDescription\"\n [disabled]=\"!IsEditing\"\n [rows]=\"3\"></textarea>\n </div>\n <div class=\"form-field\">\n <label>Expiration</label>\n <div class=\"expiration-field\">\n <mj-datepicker [(ngModel)]=\"EditExpiresAt\"\n [Disabled]=\"!IsEditing\"\n [Min]=\"getMinDate()\"\n Format=\"MMM d, yyyy\"\n Placeholder=\"Never expires\">\n </mj-datepicker>\n @if (IsEditing && EditExpiresAt) {\n <button class=\"clear-btn\"\n (click)=\"EditExpiresAt = null\">\n <i class=\"fa-solid fa-times\"></i>\n Never expires\n </button>\n }\n </div>\n </div>\n @if (IsEditing) {\n <div class=\"edit-actions\">\n <button mjButton variant=\"primary\"\n [disabled]=\"IsSaving\"\n (click)=\"saveChanges()\">\n @if (IsSaving) {\n <mj-loading [showText]=\"false\" size=\"small\"></mj-loading>\n }\n @if (!IsSaving) {\n <span>\n <i class=\"fa-solid fa-save\"></i>\n Save Changes\n </span>\n }\n </button>\n </div>\n }\n </div>\n <!-- Revoke Section -->\n @if (APIKey.Status === 'Active') {\n <div class=\"danger-zone\">\n <h4>Danger Zone</h4>\n @if (!ShowRevokeConfirm) {\n <div class=\"revoke-section\">\n <div class=\"revoke-info\">\n <i class=\"fa-solid fa-triangle-exclamation\"></i>\n <div>\n <strong>Revoke this API key</strong>\n <p>Once revoked, this key will immediately stop working. This action cannot be undone.</p>\n </div>\n </div>\n <button class=\"revoke-btn\" (click)=\"startRevoke()\">\n <i class=\"fa-solid fa-ban\"></i>\n Revoke Key\n </button>\n </div>\n }\n @if (ShowRevokeConfirm) {\n <div class=\"revoke-confirm\">\n <div class=\"confirm-warning\">\n <i class=\"fa-solid fa-skull-crossbones\"></i>\n <div>\n <strong>Are you absolutely sure?</strong>\n <p>This will permanently revoke the API key. Any applications using this key will immediately lose access.</p>\n </div>\n </div>\n <div class=\"confirm-input\">\n <label>Type <code>REVOKE</code> to confirm:</label>\n <input class=\"mj-input\" [(ngModel)]=\"RevokeConfirmText\"\n placeholder=\"REVOKE\" />\n </div>\n <div class=\"confirm-actions\">\n <button mjButton (click)=\"cancelRevoke()\">Cancel</button>\n <button class=\"confirm-revoke-btn\"\n [disabled]=\"RevokeConfirmText !== 'REVOKE' || IsRevoking\"\n (click)=\"confirmRevoke()\">\n @if (IsRevoking) {\n <mj-loading [showText]=\"false\" size=\"small\"></mj-loading>\n }\n @if (!IsRevoking) {\n <span>\n <i class=\"fa-solid fa-ban\"></i>\n Revoke Key\n </span>\n }\n </button>\n </div>\n </div>\n }\n </div>\n }\n <!-- Revoked Notice -->\n @if (APIKey.Status === 'Revoked') {\n <div class=\"revoked-notice\">\n <i class=\"fa-solid fa-ban\"></i>\n <div>\n <strong>This API key has been revoked</strong>\n <p>It can no longer be used for authentication. Consider deleting this record if no longer needed.</p>\n </div>\n </div>\n }\n </div>\n }\n <!-- Scopes Tab -->\n @if (ActiveTab === 'scopes') {\n <div class=\"tab-panel scopes-panel\">\n <div class=\"scopes-header\">\n <div class=\"scopes-info\">\n <span class=\"scope-count\">{{getAssignedScopeCount()}} permissions assigned</span>\n </div>\n @if (HasScopeChanges && APIKey.Status === 'Active') {\n <button mjButton variant=\"primary\"\n [disabled]=\"IsSaving\"\n (click)=\"saveScopeChanges()\">\n @if (IsSaving) {\n <mj-loading [showText]=\"false\" size=\"small\"></mj-loading>\n }\n @if (!IsSaving) {\n <span>\n <i class=\"fa-solid fa-save\"></i>\n Save Changes\n </span>\n }\n </button>\n }\n </div>\n <!-- No Scopes Warning -->\n @if (!IsLoadingScopes && getAssignedScopeCount() === 0 && APIKey.Status === 'Active') {\n <div class=\"no-scopes-warning\">\n <i class=\"fa-solid fa-triangle-exclamation\"></i>\n <div>\n <strong>Warning: No permissions assigned</strong>\n <p>This API key has no assigned scopes and cannot perform any operations. All API requests using this key will be rejected until scopes are assigned.</p>\n </div>\n </div>\n }\n @if (IsLoadingScopes) {\n <mj-loading text=\"Loading permissions...\"></mj-loading>\n }\n @if (!IsLoadingScopes) {\n <div class=\"scope-categories\">\n @for (category of ScopeCategories; track category) {\n <div class=\"scope-category\">\n <div class=\"category-header\" (click)=\"toggleCategory(category)\">\n <div class=\"category-left\">\n <i [class]=\"category.icon\" [style.color]=\"category.color\"></i>\n <span class=\"category-name\">{{category.name}}</span>\n <span class=\"category-count\">\n {{getSelectedCount(category)}}/{{category.scopes.length}}\n </span>\n </div>\n <div class=\"category-right\">\n @if (APIKey.Status === 'Active') {\n <label class=\"category-all-toggle\"\n (click)=\"$event.stopPropagation()\"\n >\n <input type=\"checkbox\" class=\"mj-checkbox\"\n [checked]=\"category.allSelected\"\n (change)=\"toggleCategoryAll(category)\" />\n <span>All</span>\n </label>\n }\n <i class=\"fa-solid expand-icon\" [class.fa-chevron-down]=\"!category.expanded\"\n [class.fa-chevron-up]=\"category.expanded\"></i>\n </div>\n </div>\n @if (category.expanded) {\n <div class=\"category-scopes\">\n @for (item of category.scopes; track item) {\n <div class=\"scope-item\">\n <label class=\"scope-label\">\n <input type=\"checkbox\" class=\"mj-checkbox\"\n [(ngModel)]=\"item.selected\"\n [disabled]=\"APIKey.Status === 'Revoked'\"\n (change)=\"onScopeChange()\" />\n <div class=\"scope-info\">\n <span class=\"scope-name\">{{item.scope.Name}}</span>\n @if (item.scope.Description) {\n <span class=\"scope-desc\">\n {{item.scope.Description}}\n </span>\n }\n </div>\n </label>\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n }\n <!-- Usage Tab -->\n @if (ActiveTab === 'usage') {\n <div class=\"tab-panel usage-panel\">\n @if (IsLoadingLogs) {\n <mj-loading text=\"Loading usage logs...\"></mj-loading>\n }\n @if (!IsLoadingLogs) {\n <div class=\"usage-content\">\n <div class=\"usage-stats\">\n <div class=\"stat-card\">\n <i class=\"fa-solid fa-chart-line\"></i>\n <div class=\"stat-value\">{{UsageLogs.length}}</div>\n <div class=\"stat-label\">Total Requests</div>\n </div>\n <div class=\"stat-card\">\n <i class=\"fa-solid fa-clock\"></i>\n <div class=\"stat-value\">\n {{UsageLogs.length > 0 ? formatRelativeTime(UsageLogs[0].timestamp) : 'Never'}}\n </div>\n <div class=\"stat-label\">Last Used</div>\n </div>\n </div>\n @if (UsageLogs.length > 0) {\n <div class=\"usage-logs\">\n <div class=\"log-header\">\n <span class=\"col-time\">Time</span>\n <span class=\"col-endpoint\">Endpoint</span>\n <span class=\"col-status\">Status</span>\n <span class=\"col-duration\">Duration</span>\n </div>\n @for (log of UsageLogs; track log) {\n <div class=\"log-item\">\n <span class=\"col-time\">{{formatRelativeTime(log.timestamp)}}</span>\n <span class=\"col-endpoint\">\n <span class=\"method-badge\">{{log.method}}</span>\n {{log.endpoint}}\n </span>\n <span class=\"col-status\" [ngClass]=\"getStatusClass(log.statusCode)\">\n {{log.statusCode}}\n </span>\n <span class=\"col-duration\">{{log.responseTime}}ms</span>\n </div>\n }\n </div>\n }\n @if (UsageLogs.length === 0) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-chart-area\"></i>\n <span>No usage logs yet</span>\n <p>Usage will be recorded when this API key is used for authentication</p>\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n <!-- Footer -->\n <div class=\"slideout-footer\">\n <button mjButton (click)=\"close()\">Close</button>\n </div>\n }\n</div>\n"]}
|
|
1
|
+
{"version":3,"file":"api-key-edit-panel.component.js","sourceRoot":"","sources":["../../src/APIKeys/api-key-edit-panel.component.ts","../../src/APIKeys/api-key-edit-panel.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, EventEmitter, HostListener, Input, OnChanges, Output, SimpleChanges } from '@angular/core';\nimport { Metadata, RunView } from '@memberjunction/core';\nimport { MJAPIKeyEntity, MJAPIScopeEntity, MJAPIKeyScopeEntity, MJAPIKeyUsageLogEntity } from '@memberjunction/core-entities';\nimport { GraphQLDataProvider, GraphQLEncryptionClient } from '@memberjunction/graphql-dataprovider';\nimport { APIKeysEngineBase, parseAPIScopeUIConfig } from '@memberjunction/api-keys-base';\n/** Scope with selection state */\ninterface ScopeItem {\n scope: MJAPIScopeEntity;\n selected: boolean;\n originallySelected: boolean;\n}\n\n/** Grouped scopes by category */\ninterface ScopeCategory {\n name: string;\n icon: string;\n color: string;\n scopes: ScopeItem[];\n expanded: boolean;\n allSelected: boolean;\n}\n\n/** Usage log display item */\ninterface UsageLogItem {\n timestamp: Date;\n endpoint: string;\n method: string;\n statusCode: number;\n responseTime: number;\n ipAddress: string;\n}\n\n/**\n * Panel for viewing and editing existing API keys\n */\n@Component({\n standalone: false,\n selector: 'mj-api-key-edit-panel',\n templateUrl: './api-key-edit-panel.component.html',\n styleUrls: ['./api-key-edit-panel.component.css']\n})\nexport class APIKeyEditPanelComponent implements OnChanges {\n @Input() Visible = false;\n @Input() KeyId: string | null = null;\n @Output() VisibleChange = new EventEmitter<boolean>();\n @Output() Updated = new EventEmitter<MJAPIKeyEntity>();\n @Output() Revoked = new EventEmitter<MJAPIKeyEntity>();\n @Output() Closed = new EventEmitter<void>();\n\n private md = new Metadata();\n\n // Current key\n public APIKey: MJAPIKeyEntity | null = null;\n public IsLoading = true;\n public IsSaving = false;\n public IsRevoking = false;\n\n // Edit mode\n public IsEditing = false;\n public EditLabel = '';\n public EditDescription = '';\n public EditExpiresAt: Date | null = null;\n\n // Scopes\n public ScopeCategories: ScopeCategory[] = [];\n public IsLoadingScopes = true;\n public HasScopeChanges = false;\n\n // Usage logs\n public UsageLogs: UsageLogItem[] = [];\n public IsLoadingLogs = true;\n\n // Tabs\n public ActiveTab: 'details' | 'scopes' | 'usage' = 'details';\n\n // Revoke confirmation\n public ShowRevokeConfirm = false;\n public RevokeConfirmText = '';\n\n // Messages\n public SuccessMessage = '';\n public ErrorMessage = '';\n\n // Default UI config for categories without explicit configuration\n private readonly defaultUIConfig = {\n icon: 'fa-solid fa-ellipsis',\n color: 'var(--mj-text-muted)'\n };\n\n async ngOnChanges(changes: SimpleChanges): Promise<void> {\n if (changes['KeyId'] && this.KeyId) {\n await this.loadKey();\n }\n }\n\n /**\n * Handle escape key to close panel\n */\n @HostListener('document:keydown.escape')\n public onEscapeKey(): void {\n if (this.Visible && !this.IsSaving && !this.IsRevoking) {\n this.close();\n }\n }\n\n /**\n * Load the API key and related data\n */\n private async loadKey(): Promise<void> {\n this.IsLoading = true;\n this.resetState();\n\n try {\n const key = await this.md.GetEntityObject<MJAPIKeyEntity>('MJ: API Keys');\n if (await key.Load(this.KeyId!)) {\n this.APIKey = key;\n this.EditLabel = key.Label;\n this.EditDescription = key.Description || '';\n this.EditExpiresAt = key.ExpiresAt;\n\n // Load scopes and usage in parallel\n await Promise.all([\n this.loadScopes(),\n this.loadUsageLogs()\n ]);\n }\n } catch (error) {\n console.error('Error loading API key:', error);\n this.ErrorMessage = 'Failed to load API key details';\n } finally {\n this.IsLoading = false;\n }\n }\n\n /**\n * Load all scopes and mark assigned ones\n */\n private async loadScopes(): Promise<void> {\n this.IsLoadingScopes = true;\n try {\n const rv = new RunView();\n const base = APIKeysEngineBase.Instance;\n\n // Get all scopes from cache, load assigned scopes from DB\n const allScopes = base.Scopes;\n const assignedScopesResult = await rv.RunView<MJAPIKeyScopeEntity>({\n EntityName: 'MJ: API Key Scopes',\n ExtraFilter: `APIKeyID='${this.KeyId}'`,\n ResultType: 'entity_object'\n });\n\n if (assignedScopesResult.Success) {\n const assignedScopeIds = new Set(\n assignedScopesResult.Results.map(ks => ks.ScopeID)\n );\n\n // Build category UI config from root scopes\n const categoryUIConfigs = new Map<string, { icon: string; color: string }>();\n for (const scope of allScopes) {\n if (!scope.ParentID) {\n const uiConfig = parseAPIScopeUIConfig(scope);\n categoryUIConfigs.set(scope.Category, {\n icon: uiConfig.icon || this.defaultUIConfig.icon,\n color: uiConfig.color || this.defaultUIConfig.color\n });\n }\n }\n\n const categoryMap = new Map<string, ScopeItem[]>();\n\n for (const scope of allScopes) {\n const category = scope.Category || 'Other';\n if (!categoryMap.has(category)) {\n categoryMap.set(category, []);\n }\n const isSelected = assignedScopeIds.has(scope.ID);\n categoryMap.get(category)!.push({\n scope,\n selected: isSelected,\n originallySelected: isSelected\n });\n }\n\n this.ScopeCategories = Array.from(categoryMap.entries()).map(([name, scopes]) => {\n const config = categoryUIConfigs.get(name) || this.defaultUIConfig;\n return {\n name,\n icon: config.icon,\n color: config.color,\n scopes: scopes.sort((a, b) => a.scope.Name.localeCompare(b.scope.Name)),\n expanded: scopes.some(s => s.selected),\n allSelected: scopes.length > 0 && scopes.every(s => s.selected)\n };\n }).sort((a, b) => a.name.localeCompare(b.name));\n }\n } catch (error) {\n console.error('Error loading scopes:', error);\n } finally {\n this.IsLoadingScopes = false;\n }\n }\n\n /**\n * Load usage logs for this key\n */\n private async loadUsageLogs(): Promise<void> {\n this.IsLoadingLogs = true;\n try {\n const rv = new RunView();\n const result = await rv.RunView<MJAPIKeyUsageLogEntity>({\n EntityName: 'MJ: API Key Usage Logs',\n ExtraFilter: `APIKeyID='${this.KeyId}'`,\n OrderBy: '__mj_CreatedAt DESC',\n MaxRows: 100,\n ResultType: 'entity_object'\n });\n\n if (result.Success) {\n this.UsageLogs = result.Results.map(log => ({\n timestamp: log.__mj_CreatedAt,\n endpoint: log.Endpoint || '/unknown',\n method: log.Method || 'GET',\n statusCode: log.StatusCode || 200,\n responseTime: log.ResponseTimeMs || 0,\n ipAddress: log.IPAddress || 'Unknown'\n }));\n }\n } catch (error) {\n console.error('Error loading usage logs:', error);\n } finally {\n this.IsLoadingLogs = false;\n }\n }\n\n /**\n * Reset component state\n */\n private resetState(): void {\n this.IsEditing = false;\n this.ShowRevokeConfirm = false;\n this.RevokeConfirmText = '';\n this.SuccessMessage = '';\n this.ErrorMessage = '';\n this.HasScopeChanges = false;\n this.ActiveTab = 'details';\n }\n\n /**\n * Toggle edit mode\n */\n public toggleEdit(): void {\n if (this.IsEditing) {\n // Cancel edit\n this.EditLabel = this.APIKey!.Label;\n this.EditDescription = this.APIKey!.Description || '';\n this.EditExpiresAt = this.APIKey!.ExpiresAt;\n }\n this.IsEditing = !this.IsEditing;\n }\n\n /**\n * Save changes to the key\n */\n public async saveChanges(): Promise<void> {\n if (!this.APIKey) return;\n\n this.IsSaving = true;\n this.ErrorMessage = '';\n\n try {\n this.APIKey.Label = this.EditLabel.trim();\n this.APIKey.Description = this.EditDescription.trim() || null;\n this.APIKey.ExpiresAt = this.EditExpiresAt;\n\n const result = await this.APIKey.Save();\n if (result) {\n this.IsEditing = false;\n this.SuccessMessage = 'API key updated successfully';\n this.Updated.emit(this.APIKey);\n setTimeout(() => this.SuccessMessage = '', 3000);\n } else {\n this.ErrorMessage = 'Failed to save changes';\n }\n } catch (error) {\n console.error('Error saving key:', error);\n this.ErrorMessage = 'An error occurred while saving';\n } finally {\n this.IsSaving = false;\n }\n }\n\n /**\n * Save scope changes\n */\n public async saveScopeChanges(): Promise<void> {\n if (!this.APIKey) return;\n\n this.IsSaving = true;\n this.ErrorMessage = '';\n\n try {\n const allScopes = this.ScopeCategories.flatMap(cat => cat.scopes);\n\n // Find scopes to add and remove\n const toAdd = allScopes.filter(s => s.selected && !s.originallySelected);\n const toRemove = allScopes.filter(s => !s.selected && s.originallySelected);\n\n if (toAdd.length === 0 && toRemove.length === 0) {\n this.HasScopeChanges = false;\n return;\n }\n\n const tg = await this.md.CreateTransactionGroup();\n const rv = new RunView();\n\n for (const item of toAdd) {\n const keyScope = await this.md.GetEntityObject<MJAPIKeyScopeEntity>('MJ: API Key Scopes');\n keyScope.NewRecord();\n keyScope.APIKeyID = this.APIKey.ID;\n keyScope.ScopeID = item.scope.ID;\n keyScope.TransactionGroup = tg;\n await keyScope.Save();\n }\n\n for (const item of toRemove) {\n const result = await rv.RunView<MJAPIKeyScopeEntity>({\n EntityName: 'MJ: API Key Scopes',\n ExtraFilter: `APIKeyID='${this.APIKey.ID}' AND ScopeID='${item.scope.ID}'`,\n ResultType: 'entity_object'\n });\n if (result.Success && result.Results.length > 0) {\n result.Results[0].TransactionGroup = tg;\n await result.Results[0].Delete();\n }\n }\n\n if (!await tg.Submit()) {\n this.ErrorMessage = 'Failed to update permissions — all changes have been rolled back';\n return;\n }\n\n // Commit succeeded — update client-side state to match\n for (const item of toAdd) item.originallySelected = true;\n for (const item of toRemove) item.originallySelected = false;\n\n this.HasScopeChanges = false;\n this.SuccessMessage = 'Permissions updated successfully';\n setTimeout(() => this.SuccessMessage = '', 3000);\n } catch (error) {\n console.error('Error saving scopes:', error);\n this.ErrorMessage = 'Failed to update permissions';\n } finally {\n this.IsSaving = false;\n }\n }\n\n /**\n * Check for scope changes and update category allSelected states\n */\n public onScopeChange(): void {\n // Update allSelected state for each category\n for (const category of this.ScopeCategories) {\n category.allSelected = category.scopes.length > 0 && category.scopes.every(s => s.selected);\n }\n\n // Track overall changes\n const allScopes = this.ScopeCategories.flatMap(cat => cat.scopes);\n this.HasScopeChanges = allScopes.some(s => s.selected !== s.originallySelected);\n }\n\n /**\n * Toggle category expansion\n */\n public toggleCategory(category: ScopeCategory): void {\n category.expanded = !category.expanded;\n }\n\n /**\n * Toggle all scopes in a category on/off\n */\n public toggleCategoryAll(category: ScopeCategory): void {\n // Toggle to opposite of current allSelected state\n const newState = !category.allSelected;\n category.allSelected = newState;\n\n // Apply to all scopes in category\n for (const item of category.scopes) {\n item.selected = newState;\n }\n\n // Update change tracking\n this.onScopeChange();\n }\n\n /**\n * Start revoke flow\n */\n public startRevoke(): void {\n this.ShowRevokeConfirm = true;\n this.RevokeConfirmText = '';\n }\n\n /**\n * Cancel revoke\n */\n public cancelRevoke(): void {\n this.ShowRevokeConfirm = false;\n this.RevokeConfirmText = '';\n }\n\n /**\n * Confirm and execute revoke using GraphQL client\n */\n public async confirmRevoke(): Promise<void> {\n if (!this.APIKey || this.RevokeConfirmText !== 'REVOKE') return;\n\n this.IsRevoking = true;\n this.ErrorMessage = '';\n\n try {\n const provider = Metadata.Provider as GraphQLDataProvider;\n const encryptionClient = new GraphQLEncryptionClient(provider);\n\n const result = await encryptionClient.RevokeAPIKey(this.APIKey.ID);\n\n if (result.Success) {\n // Update local state to reflect the change\n this.APIKey.Status = 'Revoked';\n this.ShowRevokeConfirm = false;\n this.SuccessMessage = 'API key has been revoked';\n this.Revoked.emit(this.APIKey);\n } else {\n this.ErrorMessage = result.Error || 'Failed to revoke key';\n }\n } catch (error) {\n console.error('Error revoking key:', error);\n this.ErrorMessage = 'An error occurred while revoking';\n } finally {\n this.IsRevoking = false;\n }\n }\n\n /**\n * Format date for display\n */\n public formatDate(date: Date | null): string {\n if (!date) return 'Never';\n return new Date(date).toLocaleDateString('en-US', {\n year: 'numeric',\n month: 'long',\n day: 'numeric',\n hour: '2-digit',\n minute: '2-digit'\n });\n }\n\n /**\n * Format relative time\n */\n public formatRelativeTime(date: Date): string {\n const now = new Date();\n const diff = now.getTime() - new Date(date).getTime();\n const minutes = Math.floor(diff / 60000);\n const hours = Math.floor(diff / 3600000);\n const days = Math.floor(diff / 86400000);\n\n if (minutes < 1) return 'Just now';\n if (minutes < 60) return `${minutes}m ago`;\n if (hours < 24) return `${hours}h ago`;\n if (days < 7) return `${days}d ago`;\n\n return new Date(date).toLocaleDateString();\n }\n\n /**\n * Get status class for HTTP status code\n */\n public getStatusClass(statusCode: number): string {\n if (statusCode >= 200 && statusCode < 300) return 'status-success';\n if (statusCode >= 400 && statusCode < 500) return 'status-warning';\n if (statusCode >= 500) return 'status-error';\n return '';\n }\n\n /**\n * Get assigned scope count\n */\n public getAssignedScopeCount(): number {\n return this.ScopeCategories.reduce((sum, cat) =>\n sum + cat.scopes.filter(s => s.selected).length, 0);\n }\n\n /**\n * Get selected scope count for a category (for template use)\n */\n public getSelectedCount(category: ScopeCategory): number {\n return category.scopes.filter(s => s.selected).length;\n }\n\n /**\n * Get minimum date for expiration (tomorrow)\n */\n public getMinDate(): Date {\n const tomorrow = new Date();\n tomorrow.setDate(tomorrow.getDate() + 1);\n return tomorrow;\n }\n\n /**\n * Close the panel\n */\n public close(): void {\n this.Visible = false;\n this.VisibleChange.emit(false);\n this.Closed.emit();\n }\n}\n","<!-- Slide-out Backdrop -->\n@if (Visible) {\n <div class=\"slideout-backdrop\" (click)=\"close()\"></div>\n}\n\n<!-- Slide-out Panel -->\n<div class=\"slideout-panel\" [class.open]=\"Visible\">\n <!-- Header -->\n <div class=\"slideout-header\">\n <div class=\"slideout-title\">\n <i class=\"fa-solid fa-key\"></i>\n <span>API Key Details</span>\n <span class=\"key-status\" [class.active]=\"APIKey?.Status === 'Active'\"\n [class.revoked]=\"APIKey?.Status === 'Revoked'\">\n {{APIKey?.Status}}\n </span>\n </div>\n <button class=\"slideout-close\" (click)=\"close()\" title=\"Close (Esc)\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n </div>\n\n @if (IsLoading) {\n <mj-loading text=\"Loading key details...\"></mj-loading>\n }\n\n @if (!IsLoading && APIKey) {\n <!-- Success/Error Messages -->\n @if (SuccessMessage) {\n <div class=\"message success\">\n <i class=\"fa-solid fa-check-circle\"></i>\n {{SuccessMessage}}\n </div>\n }\n @if (ErrorMessage) {\n <div class=\"message error\">\n <i class=\"fa-solid fa-circle-exclamation\"></i>\n {{ErrorMessage}}\n </div>\n }\n <!-- Tabs -->\n <div class=\"slideout-tabs\">\n <button class=\"slideout-tab\" [class.active]=\"ActiveTab === 'details'\"\n (click)=\"ActiveTab = 'details'\">\n <i class=\"fa-solid fa-info-circle\"></i>\n Details\n </button>\n <button class=\"slideout-tab\" [class.active]=\"ActiveTab === 'scopes'\"\n (click)=\"ActiveTab = 'scopes'\">\n <i class=\"fa-solid fa-shield-halved\"></i>\n Permissions\n @if (HasScopeChanges) {\n <span class=\"tab-badge unsaved\">!</span>\n }\n </button>\n <button class=\"slideout-tab\" [class.active]=\"ActiveTab === 'usage'\"\n (click)=\"ActiveTab = 'usage'\">\n <i class=\"fa-solid fa-chart-line\"></i>\n Usage\n </button>\n </div>\n <div class=\"slideout-content\">\n <!-- Details Tab -->\n @if (ActiveTab === 'details') {\n <div class=\"tab-panel\">\n <div class=\"key-info-card\">\n <div class=\"info-header\">\n <div class=\"info-row\">\n <span class=\"info-label\">Key Hash</span>\n <code class=\"hash-value\">{{APIKey.Hash}}</code>\n </div>\n </div>\n <div class=\"info-grid\">\n <div class=\"info-item\">\n <span class=\"info-label\">Created</span>\n <span class=\"info-value\">{{formatDate(APIKey.__mj_CreatedAt)}}</span>\n </div>\n <div class=\"info-item\">\n <span class=\"info-label\">Created By</span>\n <span class=\"info-value\">{{APIKey.CreatedByUser}}</span>\n </div>\n <div class=\"info-item\">\n <span class=\"info-label\">Owner</span>\n <span class=\"info-value\">{{APIKey.User}}</span>\n </div>\n <div class=\"info-item\">\n <span class=\"info-label\">Last Used</span>\n <span class=\"info-value\" [class.never-used]=\"!APIKey.LastUsedAt\">\n {{APIKey.LastUsedAt ? formatDate(APIKey.LastUsedAt) : 'Never'}}\n </span>\n </div>\n </div>\n </div>\n <!-- Editable Fields -->\n <div class=\"edit-section\">\n <div class=\"section-header\">\n <h4>Key Configuration</h4>\n @if (APIKey.Status === 'Active') {\n <button class=\"edit-toggle\"\n (click)=\"toggleEdit()\">\n <i class=\"fa-solid\" [class.fa-pencil]=\"!IsEditing\" [class.fa-times]=\"IsEditing\"></i>\n {{IsEditing ? 'Cancel' : 'Edit'}}\n </button>\n }\n </div>\n <div class=\"form-field\">\n <label>Label</label>\n <input class=\"mj-input form-input\" [(ngModel)]=\"EditLabel\"\n [disabled]=\"!IsEditing\" />\n </div>\n <div class=\"form-field\">\n <label>Description</label>\n <textarea class=\"mj-textarea form-textarea\" [(ngModel)]=\"EditDescription\"\n [disabled]=\"!IsEditing\"\n [rows]=\"3\"></textarea>\n </div>\n <div class=\"form-field\">\n <label>Expiration</label>\n <div class=\"expiration-field\">\n <mj-datepicker [(ngModel)]=\"EditExpiresAt\"\n [Disabled]=\"!IsEditing\"\n [Min]=\"getMinDate()\"\n Format=\"MMM d, yyyy\"\n Placeholder=\"Never expires\">\n </mj-datepicker>\n @if (IsEditing && EditExpiresAt) {\n <button class=\"clear-btn\"\n (click)=\"EditExpiresAt = null\">\n <i class=\"fa-solid fa-times\"></i>\n Never expires\n </button>\n }\n </div>\n </div>\n @if (IsEditing) {\n <div class=\"edit-actions\">\n <button mjButton variant=\"primary\"\n [disabled]=\"IsSaving\"\n (click)=\"saveChanges()\">\n @if (IsSaving) {\n <mj-loading [showText]=\"false\" size=\"small\"></mj-loading>\n }\n @if (!IsSaving) {\n <span>\n <i class=\"fa-solid fa-save\"></i>\n Save Changes\n </span>\n }\n </button>\n </div>\n }\n </div>\n <!-- Revoke Section -->\n @if (APIKey.Status === 'Active') {\n <div class=\"danger-zone\">\n <h4>Danger Zone</h4>\n @if (!ShowRevokeConfirm) {\n <div class=\"revoke-section\">\n <div class=\"revoke-info\">\n <i class=\"fa-solid fa-triangle-exclamation\"></i>\n <div>\n <strong>Revoke this API key</strong>\n <p>Once revoked, this key will immediately stop working. This action cannot be undone.</p>\n </div>\n </div>\n <button class=\"revoke-btn\" (click)=\"startRevoke()\">\n <i class=\"fa-solid fa-ban\"></i>\n Revoke Key\n </button>\n </div>\n }\n @if (ShowRevokeConfirm) {\n <div class=\"revoke-confirm\">\n <div class=\"confirm-warning\">\n <i class=\"fa-solid fa-skull-crossbones\"></i>\n <div>\n <strong>Are you absolutely sure?</strong>\n <p>This will permanently revoke the API key. Any applications using this key will immediately lose access.</p>\n </div>\n </div>\n <div class=\"confirm-input\">\n <label>Type <code>REVOKE</code> to confirm:</label>\n <input class=\"mj-input\" [(ngModel)]=\"RevokeConfirmText\"\n placeholder=\"REVOKE\" />\n </div>\n <div class=\"confirm-actions\">\n <button mjButton (click)=\"cancelRevoke()\">Cancel</button>\n <button class=\"confirm-revoke-btn\"\n [disabled]=\"RevokeConfirmText !== 'REVOKE' || IsRevoking\"\n (click)=\"confirmRevoke()\">\n @if (IsRevoking) {\n <mj-loading [showText]=\"false\" size=\"small\"></mj-loading>\n }\n @if (!IsRevoking) {\n <span>\n <i class=\"fa-solid fa-ban\"></i>\n Revoke Key\n </span>\n }\n </button>\n </div>\n </div>\n }\n </div>\n }\n <!-- Revoked Notice -->\n @if (APIKey.Status === 'Revoked') {\n <div class=\"revoked-notice\">\n <i class=\"fa-solid fa-ban\"></i>\n <div>\n <strong>This API key has been revoked</strong>\n <p>It can no longer be used for authentication. Consider deleting this record if no longer needed.</p>\n </div>\n </div>\n }\n </div>\n }\n <!-- Scopes Tab -->\n @if (ActiveTab === 'scopes') {\n <div class=\"tab-panel scopes-panel\">\n <div class=\"scopes-header\">\n <div class=\"scopes-info\">\n <span class=\"scope-count\">{{getAssignedScopeCount()}} permissions assigned</span>\n </div>\n @if (HasScopeChanges && APIKey.Status === 'Active') {\n <button mjButton variant=\"primary\"\n [disabled]=\"IsSaving\"\n (click)=\"saveScopeChanges()\">\n @if (IsSaving) {\n <mj-loading [showText]=\"false\" size=\"small\"></mj-loading>\n }\n @if (!IsSaving) {\n <span>\n <i class=\"fa-solid fa-save\"></i>\n Save Changes\n </span>\n }\n </button>\n }\n </div>\n <!-- No Scopes Warning -->\n @if (!IsLoadingScopes && getAssignedScopeCount() === 0 && APIKey.Status === 'Active') {\n <div class=\"no-scopes-warning\">\n <i class=\"fa-solid fa-triangle-exclamation\"></i>\n <div>\n <strong>Warning: No permissions assigned</strong>\n <p>This API key has no assigned scopes and cannot perform any operations. All API requests using this key will be rejected until scopes are assigned.</p>\n </div>\n </div>\n }\n @if (IsLoadingScopes) {\n <mj-loading text=\"Loading permissions...\"></mj-loading>\n }\n @if (!IsLoadingScopes) {\n <div class=\"scope-categories\">\n @for (category of ScopeCategories; track category) {\n <div class=\"scope-category\">\n <div class=\"category-header\" (click)=\"toggleCategory(category)\">\n <div class=\"category-left\">\n <i [class]=\"category.icon\" [style.color]=\"category.color\"></i>\n <span class=\"category-name\">{{category.name}}</span>\n <span class=\"category-count\">\n {{getSelectedCount(category)}}/{{category.scopes.length}}\n </span>\n </div>\n <div class=\"category-right\">\n @if (APIKey.Status === 'Active') {\n <label class=\"category-all-toggle\"\n (click)=\"$event.stopPropagation()\"\n >\n <input type=\"checkbox\" class=\"mj-checkbox\"\n [checked]=\"category.allSelected\"\n (change)=\"toggleCategoryAll(category)\" />\n <span>All</span>\n </label>\n }\n <i class=\"fa-solid expand-icon\" [class.fa-chevron-down]=\"!category.expanded\"\n [class.fa-chevron-up]=\"category.expanded\"></i>\n </div>\n </div>\n @if (category.expanded) {\n <div class=\"category-scopes\">\n @for (item of category.scopes; track item) {\n <div class=\"scope-item\">\n <label class=\"scope-label\">\n <input type=\"checkbox\" class=\"mj-checkbox\"\n [(ngModel)]=\"item.selected\"\n [disabled]=\"APIKey.Status === 'Revoked'\"\n (change)=\"onScopeChange()\" />\n <div class=\"scope-info\">\n <span class=\"scope-name\">{{item.scope.Name}}</span>\n @if (item.scope.Description) {\n <span class=\"scope-desc\">\n {{item.scope.Description}}\n </span>\n }\n </div>\n </label>\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n }\n <!-- Usage Tab -->\n @if (ActiveTab === 'usage') {\n <div class=\"tab-panel usage-panel\">\n @if (IsLoadingLogs) {\n <mj-loading text=\"Loading usage logs...\"></mj-loading>\n }\n @if (!IsLoadingLogs) {\n <div class=\"usage-content\">\n <div class=\"usage-stats\">\n <div class=\"stat-card\">\n <i class=\"fa-solid fa-chart-line\"></i>\n <div class=\"stat-value\">{{UsageLogs.length}}</div>\n <div class=\"stat-label\">Total Requests</div>\n </div>\n <div class=\"stat-card\">\n <i class=\"fa-solid fa-clock\"></i>\n <div class=\"stat-value\">\n {{UsageLogs.length > 0 ? formatRelativeTime(UsageLogs[0].timestamp) : 'Never'}}\n </div>\n <div class=\"stat-label\">Last Used</div>\n </div>\n </div>\n @if (UsageLogs.length > 0) {\n <div class=\"usage-logs\">\n <div class=\"log-header\">\n <span class=\"col-time\">Time</span>\n <span class=\"col-endpoint\">Endpoint</span>\n <span class=\"col-status\">Status</span>\n <span class=\"col-duration\">Duration</span>\n </div>\n @for (log of UsageLogs; track log) {\n <div class=\"log-item\">\n <span class=\"col-time\">{{formatRelativeTime(log.timestamp)}}</span>\n <span class=\"col-endpoint\">\n <span class=\"method-badge\">{{log.method}}</span>\n {{log.endpoint}}\n </span>\n <span class=\"col-status\" [ngClass]=\"getStatusClass(log.statusCode)\">\n {{log.statusCode}}\n </span>\n <span class=\"col-duration\">{{log.responseTime}}ms</span>\n </div>\n }\n </div>\n }\n @if (UsageLogs.length === 0) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-chart-area\"></i>\n <span>No usage logs yet</span>\n <p>Usage will be recorded when this API key is used for authentication</p>\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n <!-- Footer -->\n <div class=\"slideout-footer\">\n <button mjButton (click)=\"close()\">Close</button>\n </div>\n }\n</div>\n"]}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Archive Configuration Resource Component
|
|
3
|
+
*
|
|
4
|
+
* Dashboard resource wrapper for the "Configuration" tab in the Archiving application.
|
|
5
|
+
* Delegates all rendering to the reusable mj-archive-config-admin component from
|
|
6
|
+
* @memberjunction/ng-archive-manager.
|
|
7
|
+
*/
|
|
8
|
+
import { AfterViewInit } from '@angular/core';
|
|
9
|
+
import { ResourceData } from '@memberjunction/core-entities';
|
|
10
|
+
import { BaseResourceComponent } from '@memberjunction/ng-shared';
|
|
11
|
+
import * as i0 from "@angular/core";
|
|
12
|
+
export declare class ArchiveConfigResourceComponent extends BaseResourceComponent implements AfterViewInit {
|
|
13
|
+
ngAfterViewInit(): void;
|
|
14
|
+
GetResourceDisplayName(_data: ResourceData): Promise<string>;
|
|
15
|
+
GetResourceIconClass(_data: ResourceData): Promise<string>;
|
|
16
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<ArchiveConfigResourceComponent, never>;
|
|
17
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<ArchiveConfigResourceComponent, "app-archive-config-resource", never, {}, {}, never, never, false, never>;
|
|
18
|
+
}
|
|
19
|
+
export declare function LoadArchiveConfigResource(): void;
|
|
20
|
+
//# sourceMappingURL=archive-config-resource.component.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"archive-config-resource.component.d.ts","sourceRoot":"","sources":["../../../src/Archiving/components/archive-config-resource.component.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAa,aAAa,EAAE,MAAM,eAAe,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAE7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;;AAElE,qBAOa,8BAA+B,SAAQ,qBAAsB,YAAW,aAAa;IAC9F,eAAe,IAAI,IAAI;IAIjB,sBAAsB,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC;IAI5D,oBAAoB,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC;yCATvD,8BAA8B;2CAA9B,8BAA8B;CAY1C;AAED,wBAAgB,yBAAyB,SAExC"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
/**
|
|
8
|
+
* @fileoverview Archive Configuration Resource Component
|
|
9
|
+
*
|
|
10
|
+
* Dashboard resource wrapper for the "Configuration" tab in the Archiving application.
|
|
11
|
+
* Delegates all rendering to the reusable mj-archive-config-admin component from
|
|
12
|
+
* @memberjunction/ng-archive-manager.
|
|
13
|
+
*/
|
|
14
|
+
import { Component } from '@angular/core';
|
|
15
|
+
import { RegisterClass } from '@memberjunction/global';
|
|
16
|
+
import { BaseResourceComponent } from '@memberjunction/ng-shared';
|
|
17
|
+
import * as i0 from "@angular/core";
|
|
18
|
+
import * as i1 from "@memberjunction/ng-archive-manager";
|
|
19
|
+
let ArchiveConfigResourceComponent = class ArchiveConfigResourceComponent extends BaseResourceComponent {
|
|
20
|
+
ngAfterViewInit() {
|
|
21
|
+
this.NotifyLoadComplete();
|
|
22
|
+
}
|
|
23
|
+
async GetResourceDisplayName(_data) {
|
|
24
|
+
return 'Archive Configuration';
|
|
25
|
+
}
|
|
26
|
+
async GetResourceIconClass(_data) {
|
|
27
|
+
return 'fa-solid fa-sliders';
|
|
28
|
+
}
|
|
29
|
+
static ɵfac = /*@__PURE__*/ (() => { let ɵArchiveConfigResourceComponent_BaseFactory; return function ArchiveConfigResourceComponent_Factory(__ngFactoryType__) { return (ɵArchiveConfigResourceComponent_BaseFactory || (ɵArchiveConfigResourceComponent_BaseFactory = i0.ɵɵgetInheritedFactory(ArchiveConfigResourceComponent)))(__ngFactoryType__ || ArchiveConfigResourceComponent); }; })();
|
|
30
|
+
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ArchiveConfigResourceComponent, selectors: [["app-archive-config-resource"]], standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 1, vars: 0, template: function ArchiveConfigResourceComponent_Template(rf, ctx) { if (rf & 1) {
|
|
31
|
+
i0.ɵɵelement(0, "mj-archive-config-admin");
|
|
32
|
+
} }, dependencies: [i1.ArchiveConfigAdminComponent], styles: ["[_nghost-%COMP%] { display: block; height: 100%; width: 100%; overflow: auto; }"] });
|
|
33
|
+
};
|
|
34
|
+
ArchiveConfigResourceComponent = __decorate([
|
|
35
|
+
RegisterClass(BaseResourceComponent, 'ArchiveConfigResource')
|
|
36
|
+
], ArchiveConfigResourceComponent);
|
|
37
|
+
export { ArchiveConfigResourceComponent };
|
|
38
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ArchiveConfigResourceComponent, [{
|
|
39
|
+
type: Component,
|
|
40
|
+
args: [{ standalone: false, selector: 'app-archive-config-resource', template: `<mj-archive-config-admin></mj-archive-config-admin>`, styles: [":host { display: block; height: 100%; width: 100%; overflow: auto; }"] }]
|
|
41
|
+
}], null, null); })();
|
|
42
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(ArchiveConfigResourceComponent, { className: "ArchiveConfigResourceComponent", filePath: "src/Archiving/components/archive-config-resource.component.ts", lineNumber: 21 }); })();
|
|
43
|
+
export function LoadArchiveConfigResource() {
|
|
44
|
+
// Prevents tree-shaking
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=archive-config-resource.component.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"archive-config-resource.component.js","sourceRoot":"","sources":["../../../src/Archiving/components/archive-config-resource.component.ts"],"names":[],"mappings":";;;;;;AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,SAAS,EAAiB,MAAM,eAAe,CAAC;AAEzD,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;;;AAS3D,IAAM,8BAA8B,GAApC,MAAM,8BAA+B,SAAQ,qBAAqB;IACrE,eAAe;QACX,IAAI,CAAC,kBAAkB,EAAE,CAAC;IAC9B,CAAC;IAED,KAAK,CAAC,sBAAsB,CAAC,KAAmB;QAC5C,OAAO,uBAAuB,CAAC;IACnC,CAAC;IAED,KAAK,CAAC,oBAAoB,CAAC,KAAmB;QAC1C,OAAO,qBAAqB,CAAC;IACjC,CAAC;qSAXQ,8BAA8B,yBAA9B,8BAA8B;6DAA9B,8BAA8B;YAH5B,0CAAmD;;;AAGrD,8BAA8B;IAP1C,aAAa,CAAC,qBAAqB,EAAE,uBAAuB,CAAC;GAOjD,8BAA8B,CAY1C;;iFAZY,8BAA8B;cAN1C,SAAS;6BACM,KAAK,YACP,6BAA6B,YAC7B,qDAAqD;;kFAGtD,8BAA8B;AAc3C,MAAM,UAAU,yBAAyB;IACrC,wBAAwB;AAC5B,CAAC","sourcesContent":["/**\n * @fileoverview Archive Configuration Resource Component\n *\n * Dashboard resource wrapper for the \"Configuration\" tab in the Archiving application.\n * Delegates all rendering to the reusable mj-archive-config-admin component from\n * @memberjunction/ng-archive-manager.\n */\n\nimport { Component, AfterViewInit } from '@angular/core';\nimport { ResourceData } from '@memberjunction/core-entities';\nimport { RegisterClass } from '@memberjunction/global';\nimport { BaseResourceComponent } from '@memberjunction/ng-shared';\n\n@RegisterClass(BaseResourceComponent, 'ArchiveConfigResource')\n@Component({\n standalone: false,\n selector: 'app-archive-config-resource',\n template: `<mj-archive-config-admin></mj-archive-config-admin>`,\n styles: [`:host { display: block; height: 100%; width: 100%; overflow: auto; }`],\n})\nexport class ArchiveConfigResourceComponent extends BaseResourceComponent implements AfterViewInit {\n ngAfterViewInit(): void {\n this.NotifyLoadComplete();\n }\n\n async GetResourceDisplayName(_data: ResourceData): Promise<string> {\n return 'Archive Configuration';\n }\n\n async GetResourceIconClass(_data: ResourceData): Promise<string> {\n return 'fa-solid fa-sliders';\n }\n}\n\nexport function LoadArchiveConfigResource() {\n // Prevents tree-shaking\n}\n"]}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Archive Runs Resource Component
|
|
3
|
+
*
|
|
4
|
+
* Dashboard resource wrapper for the "Run History" tab in the Archiving application.
|
|
5
|
+
* Delegates all rendering to the reusable mj-archive-run-viewer component from
|
|
6
|
+
* @memberjunction/ng-archive-manager.
|
|
7
|
+
*/
|
|
8
|
+
import { AfterViewInit } from '@angular/core';
|
|
9
|
+
import { ResourceData } from '@memberjunction/core-entities';
|
|
10
|
+
import { BaseResourceComponent } from '@memberjunction/ng-shared';
|
|
11
|
+
import * as i0 from "@angular/core";
|
|
12
|
+
export declare class ArchiveRunsResourceComponent extends BaseResourceComponent implements AfterViewInit {
|
|
13
|
+
ngAfterViewInit(): void;
|
|
14
|
+
GetResourceDisplayName(_data: ResourceData): Promise<string>;
|
|
15
|
+
GetResourceIconClass(_data: ResourceData): Promise<string>;
|
|
16
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<ArchiveRunsResourceComponent, never>;
|
|
17
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<ArchiveRunsResourceComponent, "app-archive-runs-resource", never, {}, {}, never, never, false, never>;
|
|
18
|
+
}
|
|
19
|
+
export declare function LoadArchiveRunsResource(): void;
|
|
20
|
+
//# sourceMappingURL=archive-runs-resource.component.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"archive-runs-resource.component.d.ts","sourceRoot":"","sources":["../../../src/Archiving/components/archive-runs-resource.component.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAa,aAAa,EAAE,MAAM,eAAe,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAE7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;;AAElE,qBAOa,4BAA6B,SAAQ,qBAAsB,YAAW,aAAa;IAC5F,eAAe,IAAI,IAAI;IAIjB,sBAAsB,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC;IAI5D,oBAAoB,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC;yCATvD,4BAA4B;2CAA5B,4BAA4B;CAYxC;AAED,wBAAgB,uBAAuB,SAEtC"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
/**
|
|
8
|
+
* @fileoverview Archive Runs Resource Component
|
|
9
|
+
*
|
|
10
|
+
* Dashboard resource wrapper for the "Run History" tab in the Archiving application.
|
|
11
|
+
* Delegates all rendering to the reusable mj-archive-run-viewer component from
|
|
12
|
+
* @memberjunction/ng-archive-manager.
|
|
13
|
+
*/
|
|
14
|
+
import { Component } from '@angular/core';
|
|
15
|
+
import { RegisterClass } from '@memberjunction/global';
|
|
16
|
+
import { BaseResourceComponent } from '@memberjunction/ng-shared';
|
|
17
|
+
import * as i0 from "@angular/core";
|
|
18
|
+
import * as i1 from "@memberjunction/ng-archive-manager";
|
|
19
|
+
let ArchiveRunsResourceComponent = class ArchiveRunsResourceComponent extends BaseResourceComponent {
|
|
20
|
+
ngAfterViewInit() {
|
|
21
|
+
this.NotifyLoadComplete();
|
|
22
|
+
}
|
|
23
|
+
async GetResourceDisplayName(_data) {
|
|
24
|
+
return 'Archive Run History';
|
|
25
|
+
}
|
|
26
|
+
async GetResourceIconClass(_data) {
|
|
27
|
+
return 'fa-solid fa-clock-rotate-left';
|
|
28
|
+
}
|
|
29
|
+
static ɵfac = /*@__PURE__*/ (() => { let ɵArchiveRunsResourceComponent_BaseFactory; return function ArchiveRunsResourceComponent_Factory(__ngFactoryType__) { return (ɵArchiveRunsResourceComponent_BaseFactory || (ɵArchiveRunsResourceComponent_BaseFactory = i0.ɵɵgetInheritedFactory(ArchiveRunsResourceComponent)))(__ngFactoryType__ || ArchiveRunsResourceComponent); }; })();
|
|
30
|
+
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ArchiveRunsResourceComponent, selectors: [["app-archive-runs-resource"]], standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 1, vars: 0, template: function ArchiveRunsResourceComponent_Template(rf, ctx) { if (rf & 1) {
|
|
31
|
+
i0.ɵɵelement(0, "mj-archive-run-viewer");
|
|
32
|
+
} }, dependencies: [i1.ArchiveRunViewerComponent], styles: ["[_nghost-%COMP%] { display: block; height: 100%; width: 100%; overflow: auto; }"] });
|
|
33
|
+
};
|
|
34
|
+
ArchiveRunsResourceComponent = __decorate([
|
|
35
|
+
RegisterClass(BaseResourceComponent, 'ArchiveRunsResource')
|
|
36
|
+
], ArchiveRunsResourceComponent);
|
|
37
|
+
export { ArchiveRunsResourceComponent };
|
|
38
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ArchiveRunsResourceComponent, [{
|
|
39
|
+
type: Component,
|
|
40
|
+
args: [{ standalone: false, selector: 'app-archive-runs-resource', template: `<mj-archive-run-viewer></mj-archive-run-viewer>`, styles: [":host { display: block; height: 100%; width: 100%; overflow: auto; }"] }]
|
|
41
|
+
}], null, null); })();
|
|
42
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(ArchiveRunsResourceComponent, { className: "ArchiveRunsResourceComponent", filePath: "src/Archiving/components/archive-runs-resource.component.ts", lineNumber: 21 }); })();
|
|
43
|
+
export function LoadArchiveRunsResource() {
|
|
44
|
+
// Prevents tree-shaking
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=archive-runs-resource.component.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"archive-runs-resource.component.js","sourceRoot":"","sources":["../../../src/Archiving/components/archive-runs-resource.component.ts"],"names":[],"mappings":";;;;;;AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,SAAS,EAAiB,MAAM,eAAe,CAAC;AAEzD,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;;;AAS3D,IAAM,4BAA4B,GAAlC,MAAM,4BAA6B,SAAQ,qBAAqB;IACnE,eAAe;QACX,IAAI,CAAC,kBAAkB,EAAE,CAAC;IAC9B,CAAC;IAED,KAAK,CAAC,sBAAsB,CAAC,KAAmB;QAC5C,OAAO,qBAAqB,CAAC;IACjC,CAAC;IAED,KAAK,CAAC,oBAAoB,CAAC,KAAmB;QAC1C,OAAO,+BAA+B,CAAC;IAC3C,CAAC;6RAXQ,4BAA4B,yBAA5B,4BAA4B;6DAA5B,4BAA4B;YAH1B,wCAA+C;;;AAGjD,4BAA4B;IAPxC,aAAa,CAAC,qBAAqB,EAAE,qBAAqB,CAAC;GAO/C,4BAA4B,CAYxC;;iFAZY,4BAA4B;cANxC,SAAS;6BACM,KAAK,YACP,2BAA2B,YAC3B,iDAAiD;;kFAGlD,4BAA4B;AAczC,MAAM,UAAU,uBAAuB;IACnC,wBAAwB;AAC5B,CAAC","sourcesContent":["/**\n * @fileoverview Archive Runs Resource Component\n *\n * Dashboard resource wrapper for the \"Run History\" tab in the Archiving application.\n * Delegates all rendering to the reusable mj-archive-run-viewer component from\n * @memberjunction/ng-archive-manager.\n */\n\nimport { Component, AfterViewInit } from '@angular/core';\nimport { ResourceData } from '@memberjunction/core-entities';\nimport { RegisterClass } from '@memberjunction/global';\nimport { BaseResourceComponent } from '@memberjunction/ng-shared';\n\n@RegisterClass(BaseResourceComponent, 'ArchiveRunsResource')\n@Component({\n standalone: false,\n selector: 'app-archive-runs-resource',\n template: `<mj-archive-run-viewer></mj-archive-run-viewer>`,\n styles: [`:host { display: block; height: 100%; width: 100%; overflow: auto; }`],\n})\nexport class ArchiveRunsResourceComponent extends BaseResourceComponent implements AfterViewInit {\n ngAfterViewInit(): void {\n this.NotifyLoadComplete();\n }\n\n async GetResourceDisplayName(_data: ResourceData): Promise<string> {\n return 'Archive Run History';\n }\n\n async GetResourceIconClass(_data: ResourceData): Promise<string> {\n return 'fa-solid fa-clock-rotate-left';\n }\n}\n\nexport function LoadArchiveRunsResource() {\n // Prevents tree-shaking\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"credentials-list-resource.component.d.ts","sourceRoot":"","sources":["../../../src/Credentials/components/credentials-list-resource.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,MAAM,EAAE,SAAS,EAAE,iBAAiB,EAAsC,MAAM,eAAe,CAAC;AACpH,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAC/B,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AAEzG,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAGlE,OAAO,EAAE,4BAA4B,EAAE,MAAM,gCAAgC,CAAC;;AAC9E,KAAK,QAAQ,GAAG,MAAM,GAAG,MAAM,CAAC;AAChC,KAAK,YAAY,GAAG,EAAE,GAAG,QAAQ,GAAG,UAAU,GAAG,SAAS,GAAG,UAAU,CAAC;AAExE,qBAQa,gCAAiC,SAAQ,qBAAsB,YAAW,MAAM,EAAE,SAAS;IA0BhG,OAAO,CAAC,GAAG;IAzBR,SAAS,UAAQ;IACjB,WAAW,EAAE,kBAAkB,EAAE,CAAM;IACvC,mBAAmB,EAAE,kBAAkB,EAAE,CAAM;IAC/C,KAAK,EAAE,sBAAsB,EAAE,CAAM;IAGrC,QAAQ,EAAE,QAAQ,CAAU;IAC5B,UAAU,SAAM;IAChB,kBAAkB,SAAM;IACxB,oBAAoB,EAAE,YAAY,CAAM;IACxC,cAAc,UAAS;IAGvB,mBAAmB,cAAqB;IAC/C,OAAO,CAAC,cAAc,CAAS;IAG/B,OAAO,CAAC,SAAS,CAAkB;IACnC,OAAO,CAAC,gBAAgB,CAA8B;IAEtD,UAAmB,QAAQ,gBAAuB;IAE1B,SAAS,EAAG,4BAA4B,CAAC;gBAGrD,GAAG,EAAE,iBAAiB;IAKlC,QAAQ,IAAI,IAAI;IAKhB,WAAW,IAAI,IAAI;IAMb,sBAAsB,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC;IAI3D,oBAAoB,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC;IAK/D,IAAW,aAAa,IAAI,OAAO,CAElC;IAED,IAAW,aAAa,IAAI,OAAO,CAElC;IAED,IAAW,aAAa,IAAI,OAAO,CAElC;IAED,OAAO,CAAC,qBAAqB;YAgCf,QAAQ;IA6CtB,OAAO,CAAC,sBAAsB;IA4BvB,mBAAmB,IAAI,IAAI;IAM3B,2BAA2B,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI;IAMvE,cAAc,CAAC,UAAU,EAAE,kBAAkB,EAAE,KAAK,CAAC,EAAE,KAAK,GAAG,IAAI;IASnE,iBAAiB,CAAC,UAAU,EAAE,kBAAkB,GAAG,IAAI;IAcvD,mBAAmB,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI;IAOzC,gBAAgB,CAAC,UAAU,EAAE,kBAAkB,EAAE,KAAK,CAAC,EAAE,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC;IA6B9E,sBAAsB,CAAC,UAAU,EAAE,kBAAkB,EAAE,KAAK,CAAC,EAAE,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC;IAiC1F,eAAe,CAAC,UAAU,EAAE,kBAAkB,EAAE,KAAK,CAAC,EAAE,KAAK,GAAG,IAAI;IAapE,eAAe,IAAI,IAAI;IAUvB,aAAa,IAAI,OAAO;IAIxB,UAAU,CAAC,UAAU,EAAE,kBAAkB,GAAG,OAAO;IAInD,cAAc,IAAI,IAAI;IAM7B,OAAO,CAAC,sBAAsB;IAKjB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"credentials-list-resource.component.d.ts","sourceRoot":"","sources":["../../../src/Credentials/components/credentials-list-resource.component.ts"],"names":[],"mappings":"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"}
|