@memberjunction/ng-dashboards 5.30.0 → 5.31.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 +4 -4
- package/dist/AI/components/agents/agent-configuration.component.js.map +1 -1
- package/dist/AI/components/agents/agent-editor.component.d.ts +2 -1
- package/dist/AI/components/agents/agent-editor.component.d.ts.map +1 -1
- package/dist/AI/components/agents/agent-editor.component.js +8 -6
- package/dist/AI/components/agents/agent-editor.component.js.map +1 -1
- package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.d.ts +2 -1
- package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.js +6 -5
- package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.js.map +1 -1
- package/dist/AI/components/analytics/cost-budget/cost-budget.component.d.ts +2 -1
- package/dist/AI/components/analytics/cost-budget/cost-budget.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/cost-budget/cost-budget.component.js +6 -5
- package/dist/AI/components/analytics/cost-budget/cost-budget.component.js.map +1 -1
- package/dist/AI/components/analytics/error-analysis/error-analysis.component.d.ts +2 -1
- package/dist/AI/components/analytics/error-analysis/error-analysis.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/error-analysis/error-analysis.component.js +6 -5
- package/dist/AI/components/analytics/error-analysis/error-analysis.component.js.map +1 -1
- package/dist/AI/components/analytics/executive-summary/executive-summary.component.d.ts +2 -1
- package/dist/AI/components/analytics/executive-summary/executive-summary.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/executive-summary/executive-summary.component.js +7 -4
- package/dist/AI/components/analytics/executive-summary/executive-summary.component.js.map +1 -1
- package/dist/AI/components/analytics/model-performance/model-performance.component.d.ts +3 -2
- package/dist/AI/components/analytics/model-performance/model-performance.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/model-performance/model-performance.component.js +10 -6
- package/dist/AI/components/analytics/model-performance/model-performance.component.js.map +1 -1
- package/dist/AI/components/analytics/prompt-runs/prompt-run-analysis.component.d.ts +2 -1
- package/dist/AI/components/analytics/prompt-runs/prompt-run-analysis.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/prompt-runs/prompt-run-analysis.component.js +6 -5
- package/dist/AI/components/analytics/prompt-runs/prompt-run-analysis.component.js.map +1 -1
- package/dist/AI/components/analytics/usage-patterns/usage-patterns.component.d.ts +2 -1
- package/dist/AI/components/analytics/usage-patterns/usage-patterns.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/usage-patterns/usage-patterns.component.js +6 -5
- package/dist/AI/components/analytics/usage-patterns/usage-patterns.component.js.map +1 -1
- package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.d.ts.map +1 -1
- package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js +55 -52
- package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js.map +1 -1
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.js +15 -15
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.js.map +1 -1
- package/dist/AI/components/execution-monitoring.component.d.ts.map +1 -1
- package/dist/AI/components/execution-monitoring.component.js +4 -3
- package/dist/AI/components/execution-monitoring.component.js.map +1 -1
- package/dist/AI/components/models/model-management.component.js +2 -2
- package/dist/AI/components/models/model-management.component.js.map +1 -1
- package/dist/AI/components/prompts/model-prompt-priority-matrix.component.d.ts +2 -1
- package/dist/AI/components/prompts/model-prompt-priority-matrix.component.d.ts.map +1 -1
- package/dist/AI/components/prompts/model-prompt-priority-matrix.component.js +10 -8
- package/dist/AI/components/prompts/model-prompt-priority-matrix.component.js.map +1 -1
- package/dist/AI/components/prompts/prompt-management.component.d.ts.map +1 -1
- package/dist/AI/components/prompts/prompt-management.component.js +2 -2
- package/dist/AI/components/prompts/prompt-management.component.js.map +1 -1
- package/dist/AI/components/prompts/prompt-version-control.component.d.ts +2 -1
- package/dist/AI/components/prompts/prompt-version-control.component.d.ts.map +1 -1
- package/dist/AI/components/prompts/prompt-version-control.component.js +13 -10
- package/dist/AI/components/prompts/prompt-version-control.component.js.map +1 -1
- package/dist/AI/components/requests/agent-requests-resource.component.js +1 -1
- package/dist/AI/components/requests/agent-requests-resource.component.js.map +1 -1
- package/dist/AI/components/tags/tags-resource.component.d.ts +1181 -0
- package/dist/AI/components/tags/tags-resource.component.d.ts.map +1 -0
- package/dist/AI/components/tags/tags-resource.component.js +7487 -0
- package/dist/AI/components/tags/tags-resource.component.js.map +1 -0
- package/dist/AI/components/vectors/vector-management-resource.component.d.ts.map +1 -1
- package/dist/AI/components/vectors/vector-management-resource.component.js +25 -21
- package/dist/AI/components/vectors/vector-management-resource.component.js.map +1 -1
- package/dist/AI/index.d.ts +1 -0
- package/dist/AI/index.d.ts.map +1 -1
- package/dist/AI/index.js +5 -0
- package/dist/AI/index.js.map +1 -1
- package/dist/AI/services/ai-instrumentation.service.d.ts +5 -0
- package/dist/AI/services/ai-instrumentation.service.d.ts.map +1 -1
- package/dist/AI/services/ai-instrumentation.service.js +12 -4
- package/dist/AI/services/ai-instrumentation.service.js.map +1 -1
- package/dist/APIKeys/api-applications-panel.component.d.ts +3 -2
- package/dist/APIKeys/api-applications-panel.component.d.ts.map +1 -1
- package/dist/APIKeys/api-applications-panel.component.js +5 -4
- package/dist/APIKeys/api-applications-panel.component.js.map +1 -1
- package/dist/APIKeys/api-key-create-dialog.component.d.ts +2 -1
- package/dist/APIKeys/api-key-create-dialog.component.d.ts.map +1 -1
- package/dist/APIKeys/api-key-create-dialog.component.js +5 -5
- package/dist/APIKeys/api-key-create-dialog.component.js.map +1 -1
- package/dist/APIKeys/api-key-edit-panel.component.d.ts +3 -2
- package/dist/APIKeys/api-key-edit-panel.component.d.ts.map +1 -1
- package/dist/APIKeys/api-key-edit-panel.component.js +11 -10
- package/dist/APIKeys/api-key-edit-panel.component.js.map +1 -1
- package/dist/APIKeys/api-key-list.component.d.ts +2 -1
- package/dist/APIKeys/api-key-list.component.d.ts.map +1 -1
- package/dist/APIKeys/api-key-list.component.js +6 -5
- package/dist/APIKeys/api-key-list.component.js.map +1 -1
- package/dist/APIKeys/api-keys-resource.component.d.ts.map +1 -1
- package/dist/APIKeys/api-keys-resource.component.js +4 -4
- package/dist/APIKeys/api-keys-resource.component.js.map +1 -1
- package/dist/APIKeys/api-scopes-panel.component.d.ts +3 -2
- package/dist/APIKeys/api-scopes-panel.component.d.ts.map +1 -1
- package/dist/APIKeys/api-scopes-panel.component.js +8 -6
- package/dist/APIKeys/api-scopes-panel.component.js.map +1 -1
- package/dist/APIKeys/api-usage-panel.component.d.ts +3 -2
- package/dist/APIKeys/api-usage-panel.component.d.ts.map +1 -1
- package/dist/APIKeys/api-usage-panel.component.js +10 -8
- package/dist/APIKeys/api-usage-panel.component.js.map +1 -1
- package/dist/Actions/components/actions-list-view.component.d.ts +2 -1
- package/dist/Actions/components/actions-list-view.component.d.ts.map +1 -1
- package/dist/Actions/components/actions-list-view.component.js +6 -5
- package/dist/Actions/components/actions-list-view.component.js.map +1 -1
- package/dist/Actions/components/actions-overview.component.js +2 -2
- package/dist/Actions/components/actions-overview.component.js.map +1 -1
- package/dist/Actions/components/categories-list-view.component.d.ts +2 -1
- package/dist/Actions/components/categories-list-view.component.d.ts.map +1 -1
- package/dist/Actions/components/categories-list-view.component.js +6 -5
- package/dist/Actions/components/categories-list-view.component.js.map +1 -1
- package/dist/Actions/components/execution-monitoring.component.js +1 -1
- package/dist/Actions/components/execution-monitoring.component.js.map +1 -1
- package/dist/Actions/components/explorer/action-card.component.d.ts +2 -1
- package/dist/Actions/components/explorer/action-card.component.d.ts.map +1 -1
- package/dist/Actions/components/explorer/action-card.component.js +6 -4
- package/dist/Actions/components/explorer/action-card.component.js.map +1 -1
- package/dist/Actions/components/explorer/action-explorer.component.js +1 -1
- package/dist/Actions/components/explorer/action-explorer.component.js.map +1 -1
- package/dist/Actions/components/explorer/new-action-panel.component.d.ts +2 -1
- package/dist/Actions/components/explorer/new-action-panel.component.d.ts.map +1 -1
- package/dist/Actions/components/explorer/new-action-panel.component.js +7 -5
- package/dist/Actions/components/explorer/new-action-panel.component.js.map +1 -1
- package/dist/Actions/components/explorer/new-category-panel.component.d.ts +2 -1
- package/dist/Actions/components/explorer/new-category-panel.component.d.ts.map +1 -1
- package/dist/Actions/components/explorer/new-category-panel.component.js +7 -5
- package/dist/Actions/components/explorer/new-category-panel.component.js.map +1 -1
- package/dist/ApplicationRoles/application-roles-resource.component.js +4 -4
- package/dist/ApplicationRoles/application-roles-resource.component.js.map +1 -1
- package/dist/Communication/communication-logs-resource.component.js +1 -1
- package/dist/Communication/communication-logs-resource.component.js.map +1 -1
- package/dist/Communication/communication-monitor-resource.component.js +1 -1
- package/dist/Communication/communication-monitor-resource.component.js.map +1 -1
- package/dist/Communication/communication-providers-resource.component.js +3 -3
- package/dist/Communication/communication-providers-resource.component.js.map +1 -1
- package/dist/Communication/communication-runs-resource.component.js +1 -1
- package/dist/Communication/communication-runs-resource.component.js.map +1 -1
- package/dist/Communication/communication-templates-resource.component.js +3 -3
- package/dist/Communication/communication-templates-resource.component.js.map +1 -1
- package/dist/ComponentStudio/component-studio-dashboard.component.d.ts +1 -1
- package/dist/ComponentStudio/component-studio-dashboard.component.d.ts.map +1 -1
- package/dist/ComponentStudio/component-studio-dashboard.component.js +5 -4
- package/dist/ComponentStudio/component-studio-dashboard.component.js.map +1 -1
- package/dist/ComponentStudio/components/ai-assistant/ai-assistant-panel.component.d.ts +2 -1
- package/dist/ComponentStudio/components/ai-assistant/ai-assistant-panel.component.d.ts.map +1 -1
- package/dist/ComponentStudio/components/ai-assistant/ai-assistant-panel.component.js +6 -4
- package/dist/ComponentStudio/components/ai-assistant/ai-assistant-panel.component.js.map +1 -1
- package/dist/ComponentStudio/components/artifact-load-dialog.component.d.ts +11 -2
- package/dist/ComponentStudio/components/artifact-load-dialog.component.d.ts.map +1 -1
- package/dist/ComponentStudio/components/artifact-load-dialog.component.js +61 -27
- package/dist/ComponentStudio/components/artifact-load-dialog.component.js.map +1 -1
- package/dist/ComponentStudio/components/artifact-selection-dialog.component.d.ts +4 -2
- package/dist/ComponentStudio/components/artifact-selection-dialog.component.d.ts.map +1 -1
- package/dist/ComponentStudio/components/artifact-selection-dialog.component.js +19 -11
- package/dist/ComponentStudio/components/artifact-selection-dialog.component.js.map +1 -1
- package/dist/ComponentStudio/components/editors/data-requirements-editor.component.d.ts +4 -2
- package/dist/ComponentStudio/components/editors/data-requirements-editor.component.d.ts.map +1 -1
- package/dist/ComponentStudio/components/editors/data-requirements-editor.component.js +11 -3
- package/dist/ComponentStudio/components/editors/data-requirements-editor.component.js.map +1 -1
- package/dist/ComponentStudio/components/workspace/component-preview.component.d.ts +10 -1
- package/dist/ComponentStudio/components/workspace/component-preview.component.d.ts.map +1 -1
- package/dist/ComponentStudio/components/workspace/component-preview.component.js +18 -9
- package/dist/ComponentStudio/components/workspace/component-preview.component.js.map +1 -1
- package/dist/ComponentStudio/services/component-studio-state.service.d.ts +11 -1
- package/dist/ComponentStudio/services/component-studio-state.service.d.ts.map +1 -1
- package/dist/ComponentStudio/services/component-studio-state.service.js +23 -3
- package/dist/ComponentStudio/services/component-studio-state.service.js.map +1 -1
- package/dist/ComponentStudio/services/component-version.service.d.ts +6 -1
- package/dist/ComponentStudio/services/component-version.service.d.ts.map +1 -1
- package/dist/ComponentStudio/services/component-version.service.js +16 -6
- package/dist/ComponentStudio/services/component-version.service.js.map +1 -1
- package/dist/Credentials/components/credentials-audit-resource.component.js +1 -1
- package/dist/Credentials/components/credentials-audit-resource.component.js.map +1 -1
- package/dist/Credentials/components/credentials-categories-resource.component.d.ts.map +1 -1
- package/dist/Credentials/components/credentials-categories-resource.component.js +3 -3
- package/dist/Credentials/components/credentials-categories-resource.component.js.map +1 -1
- package/dist/Credentials/components/credentials-list-resource.component.d.ts.map +1 -1
- package/dist/Credentials/components/credentials-list-resource.component.js +3 -3
- package/dist/Credentials/components/credentials-list-resource.component.js.map +1 -1
- package/dist/Credentials/components/credentials-overview-resource.component.d.ts.map +1 -1
- package/dist/Credentials/components/credentials-overview-resource.component.js +3 -3
- package/dist/Credentials/components/credentials-overview-resource.component.js.map +1 -1
- package/dist/Credentials/components/credentials-types-resource.component.d.ts.map +1 -1
- package/dist/Credentials/components/credentials-types-resource.component.js +3 -3
- package/dist/Credentials/components/credentials-types-resource.component.js.map +1 -1
- package/dist/Credentials/credentials-dashboard.component.js +1 -1
- package/dist/Credentials/credentials-dashboard.component.js.map +1 -1
- package/dist/DashboardBrowser/dashboard-browser-resource.component.js +13 -13
- package/dist/DashboardBrowser/dashboard-browser-resource.component.js.map +1 -1
- package/dist/DashboardBrowser/dashboard-share-adapter.d.ts +4 -0
- package/dist/DashboardBrowser/dashboard-share-adapter.d.ts.map +1 -1
- package/dist/DashboardBrowser/dashboard-share-adapter.js +5 -2
- package/dist/DashboardBrowser/dashboard-share-adapter.js.map +1 -1
- package/dist/DashboardBrowser/dashboard-share-dialog.component.d.ts +3 -1
- package/dist/DashboardBrowser/dashboard-share-dialog.component.d.ts.map +1 -1
- package/dist/DashboardBrowser/dashboard-share-dialog.component.js +9 -4
- package/dist/DashboardBrowser/dashboard-share-dialog.component.js.map +1 -1
- package/dist/DataExplorer/components/navigation-panel/navigation-panel.component.d.ts +3 -2
- package/dist/DataExplorer/components/navigation-panel/navigation-panel.component.d.ts.map +1 -1
- package/dist/DataExplorer/components/navigation-panel/navigation-panel.component.js +7 -6
- package/dist/DataExplorer/components/navigation-panel/navigation-panel.component.js.map +1 -1
- package/dist/DataExplorer/components/view-selector/view-selector.component.d.ts +3 -2
- package/dist/DataExplorer/components/view-selector/view-selector.component.d.ts.map +1 -1
- package/dist/DataExplorer/components/view-selector/view-selector.component.js +6 -5
- package/dist/DataExplorer/components/view-selector/view-selector.component.js.map +1 -1
- package/dist/DataExplorer/data-explorer-dashboard.component.d.ts.map +1 -1
- package/dist/DataExplorer/data-explorer-dashboard.component.js +10 -9
- package/dist/DataExplorer/data-explorer-dashboard.component.js.map +1 -1
- package/dist/DataExplorer/services/explorer-state.service.d.ts +6 -1
- package/dist/DataExplorer/services/explorer-state.service.d.ts.map +1 -1
- package/dist/DataExplorer/services/explorer-state.service.js +15 -5
- package/dist/DataExplorer/services/explorer-state.service.js.map +1 -1
- package/dist/DatabaseDesigner/components/create-wizard/database-create-wizard.component.d.ts +64 -0
- package/dist/DatabaseDesigner/components/create-wizard/database-create-wizard.component.d.ts.map +1 -0
- package/dist/DatabaseDesigner/components/create-wizard/database-create-wizard.component.js +400 -0
- package/dist/DatabaseDesigner/components/create-wizard/database-create-wizard.component.js.map +1 -0
- package/dist/DatabaseDesigner/components/create-wizard/steps/step-basics.component.d.ts +42 -0
- package/dist/DatabaseDesigner/components/create-wizard/steps/step-basics.component.d.ts.map +1 -0
- package/dist/DatabaseDesigner/components/create-wizard/steps/step-basics.component.js +232 -0
- package/dist/DatabaseDesigner/components/create-wizard/steps/step-basics.component.js.map +1 -0
- package/dist/DatabaseDesigner/components/create-wizard/steps/step-fields.component.d.ts +14 -0
- package/dist/DatabaseDesigner/components/create-wizard/steps/step-fields.component.d.ts.map +1 -0
- package/dist/DatabaseDesigner/components/create-wizard/steps/step-fields.component.js +38 -0
- package/dist/DatabaseDesigner/components/create-wizard/steps/step-fields.component.js.map +1 -0
- package/dist/DatabaseDesigner/components/create-wizard/steps/step-pipeline.component.d.ts +24 -0
- package/dist/DatabaseDesigner/components/create-wizard/steps/step-pipeline.component.d.ts.map +1 -0
- package/dist/DatabaseDesigner/components/create-wizard/steps/step-pipeline.component.js +77 -0
- package/dist/DatabaseDesigner/components/create-wizard/steps/step-pipeline.component.js.map +1 -0
- package/dist/DatabaseDesigner/components/create-wizard/steps/step-relationships.component.d.ts +88 -0
- package/dist/DatabaseDesigner/components/create-wizard/steps/step-relationships.component.d.ts.map +1 -0
- package/dist/DatabaseDesigner/components/create-wizard/steps/step-relationships.component.js +404 -0
- package/dist/DatabaseDesigner/components/create-wizard/steps/step-relationships.component.js.map +1 -0
- package/dist/DatabaseDesigner/components/create-wizard/steps/step-review.component.d.ts +12 -0
- package/dist/DatabaseDesigner/components/create-wizard/steps/step-review.component.d.ts.map +1 -0
- package/dist/DatabaseDesigner/components/create-wizard/steps/step-review.component.js +116 -0
- package/dist/DatabaseDesigner/components/create-wizard/steps/step-review.component.js.map +1 -0
- package/dist/DatabaseDesigner/components/database-designer-dashboard.component.d.ts +55 -0
- package/dist/DatabaseDesigner/components/database-designer-dashboard.component.d.ts.map +1 -0
- package/dist/DatabaseDesigner/components/database-designer-dashboard.component.js +204 -0
- package/dist/DatabaseDesigner/components/database-designer-dashboard.component.js.map +1 -0
- package/dist/DatabaseDesigner/components/entity-list.component.d.ts +61 -0
- package/dist/DatabaseDesigner/components/entity-list.component.d.ts.map +1 -0
- package/dist/DatabaseDesigner/components/entity-list.component.js +485 -0
- package/dist/DatabaseDesigner/components/entity-list.component.js.map +1 -0
- package/dist/DatabaseDesigner/components/modify/database-modify.component.d.ts +52 -0
- package/dist/DatabaseDesigner/components/modify/database-modify.component.d.ts.map +1 -0
- package/dist/DatabaseDesigner/components/modify/database-modify.component.js +320 -0
- package/dist/DatabaseDesigner/components/modify/database-modify.component.js.map +1 -0
- package/dist/DatabaseDesigner/components/shared/database-preview-pane.component.d.ts +79 -0
- package/dist/DatabaseDesigner/components/shared/database-preview-pane.component.d.ts.map +1 -0
- package/dist/DatabaseDesigner/components/shared/database-preview-pane.component.js +378 -0
- package/dist/DatabaseDesigner/components/shared/database-preview-pane.component.js.map +1 -0
- package/dist/DatabaseDesigner/components/shared/entity-fields-grid.component.d.ts +85 -0
- package/dist/DatabaseDesigner/components/shared/entity-fields-grid.component.d.ts.map +1 -0
- package/dist/DatabaseDesigner/components/shared/entity-fields-grid.component.js +429 -0
- package/dist/DatabaseDesigner/components/shared/entity-fields-grid.component.js.map +1 -0
- package/dist/DatabaseDesigner/components/shared/entity-pipeline-panel.component.d.ts +58 -0
- package/dist/DatabaseDesigner/components/shared/entity-pipeline-panel.component.d.ts.map +1 -0
- package/dist/DatabaseDesigner/components/shared/entity-pipeline-panel.component.js +333 -0
- package/dist/DatabaseDesigner/components/shared/entity-pipeline-panel.component.js.map +1 -0
- package/dist/DatabaseDesigner/components/shared/entity-review-panel.component.d.ts +36 -0
- package/dist/DatabaseDesigner/components/shared/entity-review-panel.component.d.ts.map +1 -0
- package/dist/DatabaseDesigner/components/shared/entity-review-panel.component.js +345 -0
- package/dist/DatabaseDesigner/components/shared/entity-review-panel.component.js.map +1 -0
- package/dist/DatabaseDesigner/components/shared/wizard-step-indicator.component.d.ts +13 -0
- package/dist/DatabaseDesigner/components/shared/wizard-step-indicator.component.d.ts.map +1 -0
- package/dist/DatabaseDesigner/components/shared/wizard-step-indicator.component.js +81 -0
- package/dist/DatabaseDesigner/components/shared/wizard-step-indicator.component.js.map +1 -0
- package/dist/DatabaseDesigner/database-designer-dashboards.module.d.ts +30 -0
- package/dist/DatabaseDesigner/database-designer-dashboards.module.d.ts.map +1 -0
- package/dist/DatabaseDesigner/database-designer-dashboards.module.js +131 -0
- package/dist/DatabaseDesigner/database-designer-dashboards.module.js.map +1 -0
- package/dist/DatabaseDesigner/database-designer-erd.d.ts +19 -0
- package/dist/DatabaseDesigner/database-designer-erd.d.ts.map +1 -0
- package/dist/DatabaseDesigner/database-designer-erd.js +84 -0
- package/dist/DatabaseDesigner/database-designer-erd.js.map +1 -0
- package/dist/DatabaseDesigner/database-designer.types.d.ts +167 -0
- package/dist/DatabaseDesigner/database-designer.types.d.ts.map +1 -0
- package/dist/DatabaseDesigner/database-designer.types.js +26 -0
- package/dist/DatabaseDesigner/database-designer.types.js.map +1 -0
- package/dist/DatabaseDesigner/services/database-designer.engine.d.ts +94 -0
- package/dist/DatabaseDesigner/services/database-designer.engine.d.ts.map +1 -0
- package/dist/DatabaseDesigner/services/database-designer.engine.js +392 -0
- package/dist/DatabaseDesigner/services/database-designer.engine.js.map +1 -0
- package/dist/DatabaseDesigner/services/database-designer.service.d.ts +78 -0
- package/dist/DatabaseDesigner/services/database-designer.service.d.ts.map +1 -0
- package/dist/DatabaseDesigner/services/database-designer.service.js +273 -0
- package/dist/DatabaseDesigner/services/database-designer.service.js.map +1 -0
- package/dist/DatabaseDesigner/services/entity-wizard-state.service.d.ts +79 -0
- package/dist/DatabaseDesigner/services/entity-wizard-state.service.d.ts.map +1 -0
- package/dist/DatabaseDesigner/services/entity-wizard-state.service.js +204 -0
- package/dist/DatabaseDesigner/services/entity-wizard-state.service.js.map +1 -0
- package/dist/EntityAdmin/entity-admin-dashboard.component.d.ts.map +1 -1
- package/dist/EntityAdmin/entity-admin-dashboard.component.js +2 -2
- package/dist/EntityAdmin/entity-admin-dashboard.component.js.map +1 -1
- package/dist/Home/action-pin-config-dialog.component.d.ts +2 -1
- package/dist/Home/action-pin-config-dialog.component.d.ts.map +1 -1
- package/dist/Home/action-pin-config-dialog.component.js +6 -4
- package/dist/Home/action-pin-config-dialog.component.js.map +1 -1
- package/dist/Home/action-pin-runner-dialog.component.d.ts +2 -1
- package/dist/Home/action-pin-runner-dialog.component.d.ts.map +1 -1
- package/dist/Home/action-pin-runner-dialog.component.js +5 -4
- package/dist/Home/action-pin-runner-dialog.component.js.map +1 -1
- package/dist/Home/home-application.d.ts.map +1 -1
- package/dist/Home/home-application.js +10 -12
- package/dist/Home/home-application.js.map +1 -1
- package/dist/Home/home-dashboard.component.d.ts.map +1 -1
- package/dist/Home/home-dashboard.component.js +3 -3
- package/dist/Home/home-dashboard.component.js.map +1 -1
- package/dist/Integration/components/activity/activity.component.d.ts.map +1 -1
- package/dist/Integration/components/activity/activity.component.js +1 -0
- package/dist/Integration/components/activity/activity.component.js.map +1 -1
- package/dist/Integration/components/connections/connections.component.d.ts.map +1 -1
- package/dist/Integration/components/connections/connections.component.js +11 -10
- package/dist/Integration/components/connections/connections.component.js.map +1 -1
- package/dist/Integration/components/mapping-workspace/mapping-workspace.component.d.ts.map +1 -1
- package/dist/Integration/components/mapping-workspace/mapping-workspace.component.js +2 -2
- package/dist/Integration/components/mapping-workspace/mapping-workspace.component.js.map +1 -1
- package/dist/Integration/components/overview/overview.component.d.ts.map +1 -1
- package/dist/Integration/components/overview/overview.component.js +1 -0
- package/dist/Integration/components/overview/overview.component.js.map +1 -1
- package/dist/Integration/components/pipelines/pipelines.component.d.ts.map +1 -1
- package/dist/Integration/components/pipelines/pipelines.component.js +1 -0
- package/dist/Integration/components/pipelines/pipelines.component.js.map +1 -1
- package/dist/Integration/components/schedules/schedules.component.d.ts.map +1 -1
- package/dist/Integration/components/schedules/schedules.component.js +5 -4
- package/dist/Integration/components/schedules/schedules.component.js.map +1 -1
- package/dist/Integration/services/integration-data.service.d.ts +5 -1
- package/dist/Integration/services/integration-data.service.d.ts.map +1 -1
- package/dist/Integration/services/integration-data.service.js +27 -19
- package/dist/Integration/services/integration-data.service.js.map +1 -1
- package/dist/KnowledgeHub/components/analytics/analytics-resource.component.js +6 -6
- package/dist/KnowledgeHub/components/analytics/analytics-resource.component.js.map +1 -1
- package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.d.ts.map +1 -1
- package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.js +8 -6
- package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.js.map +1 -1
- package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js +6 -6
- package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js.map +1 -1
- package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.js +3 -3
- package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.js.map +1 -1
- package/dist/Lists/components/lists-browse-resource.component.js +6 -6
- package/dist/Lists/components/lists-browse-resource.component.js.map +1 -1
- package/dist/Lists/components/lists-categories-resource.component.js +4 -4
- package/dist/Lists/components/lists-categories-resource.component.js.map +1 -1
- package/dist/Lists/components/lists-my-lists-resource.component.js +6 -6
- package/dist/Lists/components/lists-my-lists-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 +11 -10
- package/dist/Lists/components/lists-operations-resource.component.js.map +1 -1
- package/dist/Lists/services/list-set-operations.service.d.ts +5 -0
- package/dist/Lists/services/list-set-operations.service.d.ts.map +1 -1
- package/dist/Lists/services/list-set-operations.service.js +11 -3
- package/dist/Lists/services/list-set-operations.service.js.map +1 -1
- package/dist/MCP/components/mcp-connection-dialog.component.d.ts +2 -1
- package/dist/MCP/components/mcp-connection-dialog.component.d.ts.map +1 -1
- package/dist/MCP/components/mcp-connection-dialog.component.js +8 -6
- package/dist/MCP/components/mcp-connection-dialog.component.js.map +1 -1
- package/dist/MCP/components/mcp-server-dialog.component.d.ts +2 -1
- package/dist/MCP/components/mcp-server-dialog.component.d.ts.map +1 -1
- package/dist/MCP/components/mcp-server-dialog.component.js +7 -5
- package/dist/MCP/components/mcp-server-dialog.component.js.map +1 -1
- package/dist/MCP/mcp-dashboard.component.d.ts.map +1 -1
- package/dist/MCP/mcp-dashboard.component.js +12 -12
- package/dist/MCP/mcp-dashboard.component.js.map +1 -1
- package/dist/Permissions/permissions-shared.d.ts +3 -3
- package/dist/Permissions/permissions-shared.d.ts.map +1 -1
- package/dist/Permissions/permissions-shared.js +5 -5
- package/dist/Permissions/permissions-shared.js.map +1 -1
- package/dist/Permissions/resource-access-resource.component.js +1 -1
- package/dist/Permissions/resource-access-resource.component.js.map +1 -1
- package/dist/Permissions/user-access-resource.component.js +1 -2
- package/dist/Permissions/user-access-resource.component.js.map +1 -1
- package/dist/QueryBrowser/query-browser-resource.component.d.ts.map +1 -1
- package/dist/QueryBrowser/query-browser-resource.component.js +2 -2
- package/dist/QueryBrowser/query-browser-resource.component.js.map +1 -1
- package/dist/Scheduling/scheduling-dashboard.component.d.ts.map +1 -1
- package/dist/Scheduling/scheduling-dashboard.component.js +1 -0
- package/dist/Scheduling/scheduling-dashboard.component.js.map +1 -1
- package/dist/Scheduling/services/scheduling-instrumentation.service.d.ts +5 -0
- package/dist/Scheduling/services/scheduling-instrumentation.service.d.ts.map +1 -1
- package/dist/Scheduling/services/scheduling-instrumentation.service.js +21 -13
- package/dist/Scheduling/services/scheduling-instrumentation.service.js.map +1 -1
- package/dist/SystemDiagnostics/system-diagnostics.component.d.ts.map +1 -1
- package/dist/SystemDiagnostics/system-diagnostics.component.js +2 -2
- package/dist/SystemDiagnostics/system-diagnostics.component.js.map +1 -1
- package/dist/Testing/components/testing-explorer.component.d.ts +2 -1
- package/dist/Testing/components/testing-explorer.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-explorer.component.js +9 -7
- package/dist/Testing/components/testing-explorer.component.js.map +1 -1
- package/dist/Testing/services/testing-instrumentation.service.d.ts +6 -1
- package/dist/Testing/services/testing-instrumentation.service.d.ts.map +1 -1
- package/dist/Testing/services/testing-instrumentation.service.js +21 -11
- package/dist/Testing/services/testing-instrumentation.service.js.map +1 -1
- package/dist/Testing/testing-dashboard.component.d.ts +3 -1
- package/dist/Testing/testing-dashboard.component.d.ts.map +1 -1
- package/dist/Testing/testing-dashboard.component.js +15 -11
- package/dist/Testing/testing-dashboard.component.js.map +1 -1
- package/dist/VersionHistory/components/diff-resource.component.d.ts.map +1 -1
- package/dist/VersionHistory/components/diff-resource.component.js +5 -5
- package/dist/VersionHistory/components/diff-resource.component.js.map +1 -1
- package/dist/VersionHistory/components/graph-resource.component.d.ts.map +1 -1
- package/dist/VersionHistory/components/graph-resource.component.js +1 -2
- package/dist/VersionHistory/components/graph-resource.component.js.map +1 -1
- package/dist/VersionHistory/components/labels-resource.component.d.ts.map +1 -1
- package/dist/VersionHistory/components/labels-resource.component.js +3 -3
- package/dist/VersionHistory/components/labels-resource.component.js.map +1 -1
- package/dist/VersionHistory/components/restore-resource.component.js +1 -1
- package/dist/VersionHistory/components/restore-resource.component.js.map +1 -1
- package/dist/ai-dashboards.module.d.ts +35 -34
- package/dist/ai-dashboards.module.d.ts.map +1 -1
- package/dist/ai-dashboards.module.js +6 -0
- package/dist/ai-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 +3 -1
- package/dist/public-api.d.ts.map +1 -1
- package/dist/public-api.js +3 -1
- package/dist/public-api.js.map +1 -1
- package/dist/shared/entity-field-display.d.ts +4 -3
- package/dist/shared/entity-field-display.d.ts.map +1 -1
- package/dist/shared/entity-field-display.js +9 -9
- package/dist/shared/entity-field-display.js.map +1 -1
- package/package.json +52 -51
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api-key-edit-panel.component.d.ts","sourceRoot":"","sources":["../../src/APIKeys/api-key-edit-panel.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,YAAY,EAAuB,SAAS,EAAU,aAAa,EAAE,MAAM,eAAe,CAAC;AAE/G,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAA+C,MAAM,+BAA+B,CAAC;;
|
|
1
|
+
{"version":3,"file":"api-key-edit-panel.component.d.ts","sourceRoot":"","sources":["../../src/APIKeys/api-key-edit-panel.component.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { Component, EventEmitter, HostListener, Input, Output } from '@angular/core';
|
|
2
|
-
import {
|
|
2
|
+
import { RunView } from '@memberjunction/core';
|
|
3
3
|
import { GraphQLEncryptionClient } from '@memberjunction/graphql-dataprovider';
|
|
4
|
+
import { BaseAngularComponent } from '@memberjunction/ng-base-types';
|
|
4
5
|
import { APIKeysEngineBase, parseAPIScopeUIConfig } from '@memberjunction/api-keys-base';
|
|
5
6
|
import * as i0 from "@angular/core";
|
|
6
7
|
import * as i1 from "@angular/common";
|
|
@@ -597,14 +598,14 @@ function APIKeyEditPanelComponent_Conditional_12_Template(rf, ctx) { if (rf & 1)
|
|
|
597
598
|
/**
|
|
598
599
|
* Panel for viewing and editing existing API keys
|
|
599
600
|
*/
|
|
600
|
-
export class APIKeyEditPanelComponent {
|
|
601
|
+
export class APIKeyEditPanelComponent extends BaseAngularComponent {
|
|
601
602
|
Visible = false;
|
|
602
603
|
KeyId = null;
|
|
603
604
|
VisibleChange = new EventEmitter();
|
|
604
605
|
Updated = new EventEmitter();
|
|
605
606
|
Revoked = new EventEmitter();
|
|
606
607
|
Closed = new EventEmitter();
|
|
607
|
-
md
|
|
608
|
+
get md() { return this.ProviderToUse; }
|
|
608
609
|
// Current key
|
|
609
610
|
APIKey = null;
|
|
610
611
|
IsLoading = true;
|
|
@@ -682,7 +683,7 @@ export class APIKeyEditPanelComponent {
|
|
|
682
683
|
async loadScopes() {
|
|
683
684
|
this.IsLoadingScopes = true;
|
|
684
685
|
try {
|
|
685
|
-
const rv =
|
|
686
|
+
const rv = RunView.FromMetadataProvider(this.ProviderToUse);
|
|
686
687
|
const base = APIKeysEngineBase.Instance;
|
|
687
688
|
// Get all scopes from cache, load assigned scopes from DB
|
|
688
689
|
const allScopes = base.Scopes;
|
|
@@ -743,7 +744,7 @@ export class APIKeyEditPanelComponent {
|
|
|
743
744
|
async loadUsageLogs() {
|
|
744
745
|
this.IsLoadingLogs = true;
|
|
745
746
|
try {
|
|
746
|
-
const rv =
|
|
747
|
+
const rv = RunView.FromMetadataProvider(this.ProviderToUse);
|
|
747
748
|
const result = await rv.RunView({
|
|
748
749
|
EntityName: 'MJ: API Key Usage Logs',
|
|
749
750
|
ExtraFilter: `APIKeyID='${this.KeyId}'`,
|
|
@@ -842,7 +843,7 @@ export class APIKeyEditPanelComponent {
|
|
|
842
843
|
return;
|
|
843
844
|
}
|
|
844
845
|
const tg = await this.md.CreateTransactionGroup();
|
|
845
|
-
const rv =
|
|
846
|
+
const rv = RunView.FromMetadataProvider(this.ProviderToUse);
|
|
846
847
|
for (const item of toAdd) {
|
|
847
848
|
const keyScope = await this.md.GetEntityObject('MJ: API Key Scopes');
|
|
848
849
|
keyScope.NewRecord();
|
|
@@ -938,7 +939,7 @@ export class APIKeyEditPanelComponent {
|
|
|
938
939
|
this.IsRevoking = true;
|
|
939
940
|
this.ErrorMessage = '';
|
|
940
941
|
try {
|
|
941
|
-
const provider =
|
|
942
|
+
const provider = this.ProviderToUse;
|
|
942
943
|
const encryptionClient = new GraphQLEncryptionClient(provider);
|
|
943
944
|
const result = await encryptionClient.RevokeAPIKey(this.APIKey.ID);
|
|
944
945
|
if (result.Success) {
|
|
@@ -1033,10 +1034,10 @@ export class APIKeyEditPanelComponent {
|
|
|
1033
1034
|
this.VisibleChange.emit(false);
|
|
1034
1035
|
this.Closed.emit();
|
|
1035
1036
|
}
|
|
1036
|
-
static ɵfac = function APIKeyEditPanelComponent_Factory(__ngFactoryType__) { return
|
|
1037
|
+
static ɵfac = /*@__PURE__*/ (() => { let ɵAPIKeyEditPanelComponent_BaseFactory; return function APIKeyEditPanelComponent_Factory(__ngFactoryType__) { return (ɵAPIKeyEditPanelComponent_BaseFactory || (ɵAPIKeyEditPanelComponent_BaseFactory = i0.ɵɵgetInheritedFactory(APIKeyEditPanelComponent)))(__ngFactoryType__ || APIKeyEditPanelComponent); }; })();
|
|
1037
1038
|
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: APIKeyEditPanelComponent, selectors: [["mj-api-key-edit-panel"]], hostBindings: function APIKeyEditPanelComponent_HostBindings(rf, ctx) { if (rf & 1) {
|
|
1038
1039
|
i0.ɵɵlistener("keydown.escape", function APIKeyEditPanelComponent_keydown_escape_HostBindingHandler() { return ctx.onEscapeKey(); }, i0.ɵɵresolveDocument);
|
|
1039
|
-
} }, inputs: { Visible: "Visible", KeyId: "KeyId" }, outputs: { VisibleChange: "VisibleChange", Updated: "Updated", Revoked: "Revoked", Closed: "Closed" }, standalone: false, features: [i0.ɵɵNgOnChangesFeature], decls: 13, vars: 10, consts: [[1, "slideout-backdrop"], [1, "slideout-panel"], [1, "slideout-header"], [1, "slideout-title"], [1, "fa-solid", "fa-key"], [1, "key-status"], ["title", "Close (Esc)", 1, "slideout-close", 3, "click"], [1, "fa-solid", "fa-times"], ["text", "Loading key details..."], [1, "slideout-backdrop", 3, "click"], [1, "message", "success"], [1, "message", "error"], [1, "slideout-tabs"], [1, "slideout-tab", 3, "click"], [1, "fa-solid", "fa-info-circle"], [1, "fa-solid", "fa-shield-halved"], [1, "tab-badge", "unsaved"], [1, "fa-solid", "fa-chart-line"], [1, "slideout-content"], [1, "tab-panel"], [1, "tab-panel", "scopes-panel"], [1, "tab-panel", "usage-panel"], [1, "slideout-footer"], ["mjButton", "", 3, "click"], [1, "fa-solid", "fa-check-circle"], [1, "fa-solid", "fa-circle-exclamation"], [1, "key-info-card"], [1, "info-header"], [1, "info-row"], [1, "info-label"], [1, "hash-value"], [1, "info-grid"], [1, "info-item"], [1, "info-value"], [1, "edit-section"], [1, "section-header"], [1, "edit-toggle"], [1, "form-field"], [1, "mj-input", "form-input", 3, "ngModelChange", "ngModel", "disabled"], [1, "mj-textarea", "form-textarea", 3, "ngModelChange", "ngModel", "disabled", "rows"], [1, "expiration-field"], ["Format", "MMM d, yyyy", "Placeholder", "Never expires", 3, "ngModelChange", "ngModel", "Disabled", "Min"], [1, "clear-btn"], [1, "edit-actions"], [1, "danger-zone"], [1, "revoked-notice"], [1, "edit-toggle", 3, "click"], [1, "fa-solid"], [1, "clear-btn", 3, "click"], ["mjButton", "", "variant", "primary", 3, "click", "disabled"], ["size", "small", 3, "showText"], [1, "fa-solid", "fa-save"], [1, "revoke-section"], [1, "revoke-confirm"], [1, "revoke-info"], [1, "fa-solid", "fa-triangle-exclamation"], [1, "revoke-btn", 3, "click"], [1, "fa-solid", "fa-ban"], [1, "confirm-warning"], [1, "fa-solid", "fa-skull-crossbones"], [1, "confirm-input"], ["placeholder", "REVOKE", 1, "mj-input", 3, "ngModelChange", "ngModel"], [1, "confirm-actions"], [1, "confirm-revoke-btn", 3, "click", "disabled"], [1, "scopes-header"], [1, "scopes-info"], [1, "scope-count"], ["mjButton", "", "variant", "primary", 3, "disabled"], [1, "no-scopes-warning"], ["text", "Loading permissions..."], [1, "scope-categories"], [1, "scope-category"], [1, "category-header", 3, "click"], [1, "category-left"], [1, "category-name"], [1, "category-count"], [1, "category-right"], [1, "category-all-toggle"], [1, "fa-solid", "expand-icon"], [1, "category-scopes"], [1, "category-all-toggle", 3, "click"], ["type", "checkbox", 1, "mj-checkbox", 3, "change", "checked"], [1, "scope-item"], [1, "scope-label"], ["type", "checkbox", 1, "mj-checkbox", 3, "ngModelChange", "change", "ngModel", "disabled"], [1, "scope-info"], [1, "scope-name"], [1, "scope-desc"], ["text", "Loading usage logs..."], [1, "usage-content"], [1, "usage-stats"], [1, "stat-card"], [1, "stat-value"], [1, "stat-label"], [1, "fa-solid", "fa-clock"], [1, "usage-logs"], [1, "empty-state"], [1, "log-header"], [1, "col-time"], [1, "col-endpoint"], [1, "col-status"], [1, "col-duration"], [1, "log-item"], [1, "method-badge"], [1, "col-status", 3, "ngClass"], [1, "fa-solid", "fa-chart-area"]], template: function APIKeyEditPanelComponent_Template(rf, ctx) { if (rf & 1) {
|
|
1040
|
+
} }, inputs: { Visible: "Visible", KeyId: "KeyId" }, outputs: { VisibleChange: "VisibleChange", Updated: "Updated", Revoked: "Revoked", Closed: "Closed" }, standalone: false, features: [i0.ɵɵInheritDefinitionFeature, i0.ɵɵNgOnChangesFeature], decls: 13, vars: 10, consts: [[1, "slideout-backdrop"], [1, "slideout-panel"], [1, "slideout-header"], [1, "slideout-title"], [1, "fa-solid", "fa-key"], [1, "key-status"], ["title", "Close (Esc)", 1, "slideout-close", 3, "click"], [1, "fa-solid", "fa-times"], ["text", "Loading key details..."], [1, "slideout-backdrop", 3, "click"], [1, "message", "success"], [1, "message", "error"], [1, "slideout-tabs"], [1, "slideout-tab", 3, "click"], [1, "fa-solid", "fa-info-circle"], [1, "fa-solid", "fa-shield-halved"], [1, "tab-badge", "unsaved"], [1, "fa-solid", "fa-chart-line"], [1, "slideout-content"], [1, "tab-panel"], [1, "tab-panel", "scopes-panel"], [1, "tab-panel", "usage-panel"], [1, "slideout-footer"], ["mjButton", "", 3, "click"], [1, "fa-solid", "fa-check-circle"], [1, "fa-solid", "fa-circle-exclamation"], [1, "key-info-card"], [1, "info-header"], [1, "info-row"], [1, "info-label"], [1, "hash-value"], [1, "info-grid"], [1, "info-item"], [1, "info-value"], [1, "edit-section"], [1, "section-header"], [1, "edit-toggle"], [1, "form-field"], [1, "mj-input", "form-input", 3, "ngModelChange", "ngModel", "disabled"], [1, "mj-textarea", "form-textarea", 3, "ngModelChange", "ngModel", "disabled", "rows"], [1, "expiration-field"], ["Format", "MMM d, yyyy", "Placeholder", "Never expires", 3, "ngModelChange", "ngModel", "Disabled", "Min"], [1, "clear-btn"], [1, "edit-actions"], [1, "danger-zone"], [1, "revoked-notice"], [1, "edit-toggle", 3, "click"], [1, "fa-solid"], [1, "clear-btn", 3, "click"], ["mjButton", "", "variant", "primary", 3, "click", "disabled"], ["size", "small", 3, "showText"], [1, "fa-solid", "fa-save"], [1, "revoke-section"], [1, "revoke-confirm"], [1, "revoke-info"], [1, "fa-solid", "fa-triangle-exclamation"], [1, "revoke-btn", 3, "click"], [1, "fa-solid", "fa-ban"], [1, "confirm-warning"], [1, "fa-solid", "fa-skull-crossbones"], [1, "confirm-input"], ["placeholder", "REVOKE", 1, "mj-input", 3, "ngModelChange", "ngModel"], [1, "confirm-actions"], [1, "confirm-revoke-btn", 3, "click", "disabled"], [1, "scopes-header"], [1, "scopes-info"], [1, "scope-count"], ["mjButton", "", "variant", "primary", 3, "disabled"], [1, "no-scopes-warning"], ["text", "Loading permissions..."], [1, "scope-categories"], [1, "scope-category"], [1, "category-header", 3, "click"], [1, "category-left"], [1, "category-name"], [1, "category-count"], [1, "category-right"], [1, "category-all-toggle"], [1, "fa-solid", "expand-icon"], [1, "category-scopes"], [1, "category-all-toggle", 3, "click"], ["type", "checkbox", 1, "mj-checkbox", 3, "change", "checked"], [1, "scope-item"], [1, "scope-label"], ["type", "checkbox", 1, "mj-checkbox", 3, "ngModelChange", "change", "ngModel", "disabled"], [1, "scope-info"], [1, "scope-name"], [1, "scope-desc"], ["text", "Loading usage logs..."], [1, "usage-content"], [1, "usage-stats"], [1, "stat-card"], [1, "stat-value"], [1, "stat-label"], [1, "fa-solid", "fa-clock"], [1, "usage-logs"], [1, "empty-state"], [1, "log-header"], [1, "col-time"], [1, "col-endpoint"], [1, "col-status"], [1, "col-duration"], [1, "log-item"], [1, "method-badge"], [1, "col-status", 3, "ngClass"], [1, "fa-solid", "fa-chart-area"]], template: function APIKeyEditPanelComponent_Template(rf, ctx) { if (rf & 1) {
|
|
1040
1041
|
i0.ɵɵconditionalCreate(0, APIKeyEditPanelComponent_Conditional_0_Template, 1, 0, "div", 0);
|
|
1041
1042
|
i0.ɵɵelementStart(1, "div", 1)(2, "div", 2)(3, "div", 3);
|
|
1042
1043
|
i0.ɵɵelement(4, "i", 4);
|
|
@@ -1086,5 +1087,5 @@ export class APIKeyEditPanelComponent {
|
|
|
1086
1087
|
type: HostListener,
|
|
1087
1088
|
args: ['document:keydown.escape']
|
|
1088
1089
|
}] }); })();
|
|
1089
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(APIKeyEditPanelComponent, { className: "APIKeyEditPanelComponent", filePath: "src/APIKeys/api-key-edit-panel.component.ts", lineNumber:
|
|
1090
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(APIKeyEditPanelComponent, { className: "APIKeyEditPanelComponent", filePath: "src/APIKeys/api-key-edit-panel.component.ts", lineNumber: 43 }); })();
|
|
1090
1091
|
//# sourceMappingURL=api-key-edit-panel.component.js.map
|
|
@@ -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 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"]}
|
|
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 { RunView } from '@memberjunction/core';\nimport { MJAPIKeyEntity, MJAPIScopeEntity, MJAPIKeyScopeEntity, MJAPIKeyUsageLogEntity } from '@memberjunction/core-entities';\nimport { GraphQLDataProvider, GraphQLEncryptionClient } from '@memberjunction/graphql-dataprovider';\nimport { BaseAngularComponent } from '@memberjunction/ng-base-types';\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 extends BaseAngularComponent 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 get md() { return this.ProviderToUse; }\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 = RunView.FromMetadataProvider(this.ProviderToUse);\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 = RunView.FromMetadataProvider(this.ProviderToUse);\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 = RunView.FromMetadataProvider(this.ProviderToUse);\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 = this.ProviderToUse 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,5 +1,6 @@
|
|
|
1
1
|
import { EventEmitter, OnChanges, OnInit, SimpleChanges } from '@angular/core';
|
|
2
2
|
import { MJAPIKeyEntity } from '@memberjunction/core-entities';
|
|
3
|
+
import { BaseAngularComponent } from '@memberjunction/ng-base-types';
|
|
3
4
|
import * as i0 from "@angular/core";
|
|
4
5
|
/** Filter options for the list */
|
|
5
6
|
export type APIKeyFilter = 'all' | 'active' | 'revoked' | 'expiring' | 'expired' | 'never-used';
|
|
@@ -19,7 +20,7 @@ interface KeyScopeInfo {
|
|
|
19
20
|
/**
|
|
20
21
|
* List view component for displaying and filtering API keys
|
|
21
22
|
*/
|
|
22
|
-
export declare class APIKeyListComponent implements OnInit, OnChanges {
|
|
23
|
+
export declare class APIKeyListComponent extends BaseAngularComponent implements OnInit, OnChanges {
|
|
23
24
|
Filter: APIKeyFilter;
|
|
24
25
|
KeySelected: EventEmitter<MJAPIKeyEntity>;
|
|
25
26
|
CreateRequested: EventEmitter<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api-key-list.component.d.ts","sourceRoot":"","sources":["../../src/APIKeys/api-key-list.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,YAAY,EAAS,SAAS,EAAE,MAAM,EAAU,aAAa,EAAE,MAAM,eAAe,CAAC;AAEzG,OAAO,EAAE,cAAc,EAAyC,MAAM,+BAA+B,CAAC;;
|
|
1
|
+
{"version":3,"file":"api-key-list.component.d.ts","sourceRoot":"","sources":["../../src/APIKeys/api-key-list.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,YAAY,EAAS,SAAS,EAAE,MAAM,EAAU,aAAa,EAAE,MAAM,eAAe,CAAC;AAEzG,OAAO,EAAE,cAAc,EAAyC,MAAM,+BAA+B,CAAC;AAEtG,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;;AAErE,kCAAkC;AAClC,MAAM,MAAM,YAAY,GAAG,KAAK,GAAG,QAAQ,GAAG,SAAS,GAAG,UAAU,GAAG,SAAS,GAAG,YAAY,CAAC;AAEhG,6BAA6B;AAC7B,UAAU,kBAAkB;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CAChB;AAED,6BAA6B;AAC7B,UAAU,YAAY;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,UAAU,EAAE,kBAAkB,EAAE,CAAC;CACpC;AACD;;GAEG;AACH,qBAMa,mBAAoB,SAAQ,oBAAqB,YAAW,MAAM,EAAE,SAAS;IAC7E,MAAM,EAAE,YAAY,CAAS;IAC5B,WAAW,+BAAsC;IACjD,eAAe,qBAA4B;IAG9C,IAAI,OAAQ;IAGZ,OAAO,EAAE,cAAc,EAAE,CAAM;IAC/B,YAAY,EAAE,cAAc,EAAE,CAAM;IACpC,SAAS,UAAQ;IAGjB,UAAU,SAAM;IAGhB,SAAS,EAAE,OAAO,GAAG,QAAQ,GAAG,MAAM,GAAG,YAAY,GAAG,WAAW,GAAG,gBAAgB,CAAoB;IAC1G,aAAa,EAAE,KAAK,GAAG,MAAM,CAAU;IAGvC,QAAQ,SAAM;IACd,WAAW,SAAK;IAGhB,KAAK;;;;;;;MAOV;IAGK,WAAW,4BAAmC;IACrD,OAAO,CAAC,SAAS,CAA0B;IAG3C,OAAO,CAAC,QAAQ,CAAC,eAAe,CAG9B;IAGF,OAAO,CAAC,iBAAiB,CAAsD;IAEzE,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAIzB,WAAW,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAMxD;;OAEG;IACU,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IA2FtC;;OAEG;IACI,YAAY,CAAC,GAAG,EAAE,cAAc,GAAG,YAAY;IAItD;;OAEG;IACH,OAAO,CAAC,cAAc;IAuBtB;;OAEG;IACI,YAAY,IAAI,IAAI;IAsF3B;;OAEG;IACI,QAAQ,IAAI,IAAI;IAIvB;;OAEG;IACI,WAAW,IAAI,IAAI;IAK1B;;OAEG;IACI,SAAS,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI;IAK5C;;OAEG;IACI,UAAU,CAAC,KAAK,EAAE,OAAO,IAAI,CAAC,SAAS,GAAG,IAAI;IAUrD;;OAEG;IACI,WAAW,CAAC,KAAK,EAAE,OAAO,IAAI,CAAC,SAAS,GAAG,MAAM;IAKxD;;OAEG;IACI,gBAAgB,IAAI,cAAc,EAAE;IAK3C;;OAEG;IACI,aAAa,IAAI,MAAM;IAI9B;;OAEG;IACI,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAMnC;;OAEG;IACI,cAAc,IAAI,MAAM,EAAE;IAuBjC;;OAEG;IACI,SAAS,CAAC,GAAG,EAAE,cAAc,GAAG,IAAI;IAI3C;;OAEG;IACI,aAAa,IAAI,IAAI;IAI5B;;OAEG;IACI,UAAU,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,GAAG,MAAM;IAsB5C;;OAEG;IACI,gBAAgB,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,GAAG,MAAM;IAiBlD;;OAEG;IACI,kBAAkB,CAAC,GAAG,EAAE,cAAc,GAAG,MAAM;IActD;;OAEG;IACI,cAAc,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM;yCA9b1C,mBAAmB;2CAAnB,mBAAmB;CAwc/B"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { Component, EventEmitter, Input, Output } from '@angular/core';
|
|
2
2
|
import { RunView } from '@memberjunction/core';
|
|
3
3
|
import { APIKeysEngineBase, parseAPIScopeUIConfig } from '@memberjunction/api-keys-base';
|
|
4
|
+
import { BaseAngularComponent } from '@memberjunction/ng-base-types';
|
|
4
5
|
import * as i0 from "@angular/core";
|
|
5
6
|
import * as i1 from "@angular/common";
|
|
6
7
|
import * as i2 from "@angular/forms";
|
|
@@ -294,7 +295,7 @@ function APIKeyListComponent_Conditional_47_Template(rf, ctx) { if (rf & 1) {
|
|
|
294
295
|
/**
|
|
295
296
|
* List view component for displaying and filtering API keys
|
|
296
297
|
*/
|
|
297
|
-
export class APIKeyListComponent {
|
|
298
|
+
export class APIKeyListComponent extends BaseAngularComponent {
|
|
298
299
|
Filter = 'all';
|
|
299
300
|
KeySelected = new EventEmitter();
|
|
300
301
|
CreateRequested = new EventEmitter();
|
|
@@ -345,7 +346,7 @@ export class APIKeyListComponent {
|
|
|
345
346
|
async loadKeys() {
|
|
346
347
|
this.IsLoading = true;
|
|
347
348
|
try {
|
|
348
|
-
const rv =
|
|
349
|
+
const rv = RunView.FromMetadataProvider(this.ProviderToUse);
|
|
349
350
|
const base = APIKeysEngineBase.Instance;
|
|
350
351
|
// Load keys and key-scope assignments (scopes from cache)
|
|
351
352
|
const [keysResult, keyScopesResult] = await rv.RunViews([
|
|
@@ -698,8 +699,8 @@ export class APIKeyListComponent {
|
|
|
698
699
|
case 'never-used': return this.Stats.neverUsed;
|
|
699
700
|
}
|
|
700
701
|
}
|
|
701
|
-
static ɵfac = function APIKeyListComponent_Factory(__ngFactoryType__) { return
|
|
702
|
-
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: APIKeyListComponent, selectors: [["mj-api-key-list"]], inputs: { Filter: "Filter" }, outputs: { KeySelected: "KeySelected", CreateRequested: "CreateRequested" }, standalone: false, features: [i0.ɵɵNgOnChangesFeature], decls: 48, vars: 29, consts: [[1, "list-container"], [1, "list-header"], [1, "header-left"], [1, "count-badge"], [1, "header-right"], [1, "search-box"], [1, "fa-solid", "fa-search"], ["type", "text", "placeholder", "Search keys...", 3, "ngModelChange", "ngModel"], [1, "clear-search"], [1, "create-btn", 3, "click"], [1, "fa-solid", "fa-plus"], [1, "filter-tabs"], [1, "filter-tab", 3, "click"], [1, "tab-count"], [1, "fa-solid", "fa-check-circle", "status-active"], [1, "fa-solid", "fa-clock", "status-warning"], [1, "fa-solid", "fa-circle-exclamation", "status-danger"], [1, "fa-solid", "fa-question-circle", "status-info"], [1, "fa-solid", "fa-ban", "status-revoked"], ["text", "Loading API keys..."], [1, "key-grid"], [1, "pagination"], [1, "clear-search", 3, "click"], [1, "fa-solid", "fa-times"], [1, "grid-header"], [1, "col-key", "sortable", 3, "click"], [1, "col-owner", "sortable", 3, "click"], [1, "col-status", "sortable", 3, "click"], [1, "col-scopes"], [1, "col-expires", "sortable", 3, "click"], [1, "col-used", "sortable", 3, "click"], [1, "col-created", "sortable", 3, "click"], [1, "grid-row"], [1, "empty-state"], [1, "grid-row", 3, "click"], [1, "col-key"], [1, "key-icon"], [1, "fa-solid", "fa-key"], [1, "key-details"], [1, "key-label"], [1, "key-hash"], [1, "col-owner"], [1, "owner-name"], [1, "col-status"], [1, "status-badge"], [1, "scopes-display"], [1, "no-scopes"], [1, "col-expires"], [1, "expires-value", 3, "ngClass"], [1, "col-used"], [1, "used-value"], [1, "col-created"], [1, "created-value"], [1, "scope-badges"], [1, "scope-more"], [1, "scopes-total"], [1, "scope-badge", 3, "backgroundColor", "color", "title"], [1, "scope-badge", 3, "title"], [1, "badge-count"], [1, "fa-solid", "fa-shield-xmark"], [1, "create-empty-btn"], [1, "create-empty-btn", 3, "click"], [1, "page-info"], [1, "page-buttons"], [1, "page-btn", 3, "click", "disabled"], [1, "fa-solid", "fa-chevron-left"], [1, "fa-solid", "fa-chevron-right"], [1, "page-btn", 3, "active"], [1, "page-ellipsis"], [1, "page-btn", 3, "click"]], template: function APIKeyListComponent_Template(rf, ctx) { if (rf & 1) {
|
|
702
|
+
static ɵfac = /*@__PURE__*/ (() => { let ɵAPIKeyListComponent_BaseFactory; return function APIKeyListComponent_Factory(__ngFactoryType__) { return (ɵAPIKeyListComponent_BaseFactory || (ɵAPIKeyListComponent_BaseFactory = i0.ɵɵgetInheritedFactory(APIKeyListComponent)))(__ngFactoryType__ || APIKeyListComponent); }; })();
|
|
703
|
+
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: APIKeyListComponent, selectors: [["mj-api-key-list"]], inputs: { Filter: "Filter" }, outputs: { KeySelected: "KeySelected", CreateRequested: "CreateRequested" }, standalone: false, features: [i0.ɵɵInheritDefinitionFeature, i0.ɵɵNgOnChangesFeature], decls: 48, vars: 29, consts: [[1, "list-container"], [1, "list-header"], [1, "header-left"], [1, "count-badge"], [1, "header-right"], [1, "search-box"], [1, "fa-solid", "fa-search"], ["type", "text", "placeholder", "Search keys...", 3, "ngModelChange", "ngModel"], [1, "clear-search"], [1, "create-btn", 3, "click"], [1, "fa-solid", "fa-plus"], [1, "filter-tabs"], [1, "filter-tab", 3, "click"], [1, "tab-count"], [1, "fa-solid", "fa-check-circle", "status-active"], [1, "fa-solid", "fa-clock", "status-warning"], [1, "fa-solid", "fa-circle-exclamation", "status-danger"], [1, "fa-solid", "fa-question-circle", "status-info"], [1, "fa-solid", "fa-ban", "status-revoked"], ["text", "Loading API keys..."], [1, "key-grid"], [1, "pagination"], [1, "clear-search", 3, "click"], [1, "fa-solid", "fa-times"], [1, "grid-header"], [1, "col-key", "sortable", 3, "click"], [1, "col-owner", "sortable", 3, "click"], [1, "col-status", "sortable", 3, "click"], [1, "col-scopes"], [1, "col-expires", "sortable", 3, "click"], [1, "col-used", "sortable", 3, "click"], [1, "col-created", "sortable", 3, "click"], [1, "grid-row"], [1, "empty-state"], [1, "grid-row", 3, "click"], [1, "col-key"], [1, "key-icon"], [1, "fa-solid", "fa-key"], [1, "key-details"], [1, "key-label"], [1, "key-hash"], [1, "col-owner"], [1, "owner-name"], [1, "col-status"], [1, "status-badge"], [1, "scopes-display"], [1, "no-scopes"], [1, "col-expires"], [1, "expires-value", 3, "ngClass"], [1, "col-used"], [1, "used-value"], [1, "col-created"], [1, "created-value"], [1, "scope-badges"], [1, "scope-more"], [1, "scopes-total"], [1, "scope-badge", 3, "backgroundColor", "color", "title"], [1, "scope-badge", 3, "title"], [1, "badge-count"], [1, "fa-solid", "fa-shield-xmark"], [1, "create-empty-btn"], [1, "create-empty-btn", 3, "click"], [1, "page-info"], [1, "page-buttons"], [1, "page-btn", 3, "click", "disabled"], [1, "fa-solid", "fa-chevron-left"], [1, "fa-solid", "fa-chevron-right"], [1, "page-btn", 3, "active"], [1, "page-ellipsis"], [1, "page-btn", 3, "click"]], template: function APIKeyListComponent_Template(rf, ctx) { if (rf & 1) {
|
|
703
704
|
i0.ɵɵelementStart(0, "div", 0)(1, "div", 1)(2, "div", 2)(3, "h3");
|
|
704
705
|
i0.ɵɵtext(4, "API Keys");
|
|
705
706
|
i0.ɵɵelementEnd();
|
|
@@ -813,5 +814,5 @@ export class APIKeyListComponent {
|
|
|
813
814
|
}], CreateRequested: [{
|
|
814
815
|
type: Output
|
|
815
816
|
}] }); })();
|
|
816
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(APIKeyListComponent, { className: "APIKeyListComponent", filePath: "src/APIKeys/api-key-list.component.ts", lineNumber:
|
|
817
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(APIKeyListComponent, { className: "APIKeyListComponent", filePath: "src/APIKeys/api-key-list.component.ts", lineNumber: 33 }); })();
|
|
817
818
|
//# sourceMappingURL=api-key-list.component.js.map
|