@memberjunction/ng-dashboards 5.22.0 → 5.23.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.
Files changed (204) hide show
  1. package/README.md +51 -0
  2. package/dist/AI/components/agents/agent-configuration.component.d.ts.map +1 -1
  3. package/dist/AI/components/agents/agent-configuration.component.js +364 -362
  4. package/dist/AI/components/agents/agent-configuration.component.js.map +1 -1
  5. package/dist/AI/components/agents/agent-editor.component.js +2 -2
  6. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.d.ts +275 -64
  7. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.d.ts.map +1 -1
  8. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js +2645 -436
  9. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js.map +1 -1
  10. package/dist/AI/components/duplicates/duplicate-detection-resource.component.d.ts +240 -6
  11. package/dist/AI/components/duplicates/duplicate-detection-resource.component.d.ts.map +1 -1
  12. package/dist/AI/components/duplicates/duplicate-detection-resource.component.js +2166 -256
  13. package/dist/AI/components/duplicates/duplicate-detection-resource.component.js.map +1 -1
  14. package/dist/AI/components/execution-monitoring.component.d.ts.map +1 -1
  15. package/dist/AI/components/execution-monitoring.component.js +191 -197
  16. package/dist/AI/components/execution-monitoring.component.js.map +1 -1
  17. package/dist/AI/components/models/model-management.component.js +9 -8
  18. package/dist/AI/components/models/model-management.component.js.map +1 -1
  19. package/dist/AI/components/prompts/prompt-management.component.js +305 -299
  20. package/dist/AI/components/prompts/prompt-management.component.js.map +1 -1
  21. package/dist/AI/components/system/system-configuration.component.js +319 -313
  22. package/dist/AI/components/system/system-configuration.component.js.map +1 -1
  23. package/dist/AI/components/vectors/vector-management-resource.component.d.ts +1 -2
  24. package/dist/AI/components/vectors/vector-management-resource.component.d.ts.map +1 -1
  25. package/dist/AI/components/vectors/vector-management-resource.component.js +12 -27
  26. package/dist/AI/components/vectors/vector-management-resource.component.js.map +1 -1
  27. package/dist/APIKeys/api-applications-panel.component.js +10 -12
  28. package/dist/APIKeys/api-applications-panel.component.js.map +1 -1
  29. package/dist/APIKeys/api-key-create-dialog.component.js +13 -19
  30. package/dist/APIKeys/api-key-create-dialog.component.js.map +1 -1
  31. package/dist/APIKeys/api-key-edit-panel.component.js +12 -14
  32. package/dist/APIKeys/api-key-edit-panel.component.js.map +1 -1
  33. package/dist/APIKeys/api-scopes-panel.component.js +61 -68
  34. package/dist/APIKeys/api-scopes-panel.component.js.map +1 -1
  35. package/dist/APIKeys/api-usage-panel.component.js +10 -11
  36. package/dist/APIKeys/api-usage-panel.component.js.map +1 -1
  37. package/dist/Actions/components/actions-list-view.component.js +82 -96
  38. package/dist/Actions/components/actions-list-view.component.js.map +1 -1
  39. package/dist/Actions/components/actions-overview.component.js +130 -134
  40. package/dist/Actions/components/actions-overview.component.js.map +1 -1
  41. package/dist/Actions/components/categories-list-view.component.d.ts.map +1 -1
  42. package/dist/Actions/components/categories-list-view.component.js +40 -46
  43. package/dist/Actions/components/categories-list-view.component.js.map +1 -1
  44. package/dist/Actions/components/code-management.component.js +2 -2
  45. package/dist/Actions/components/code-management.component.js.map +1 -1
  46. package/dist/Actions/components/entity-integration.component.js +2 -2
  47. package/dist/Actions/components/entity-integration.component.js.map +1 -1
  48. package/dist/Actions/components/execution-monitoring.component.js +127 -132
  49. package/dist/Actions/components/execution-monitoring.component.js.map +1 -1
  50. package/dist/Actions/components/executions-list-view.component.js +2 -2
  51. package/dist/Actions/components/executions-list-view.component.js.map +1 -1
  52. package/dist/Actions/components/explorer/action-card.component.js +11 -17
  53. package/dist/Actions/components/explorer/action-card.component.js.map +1 -1
  54. package/dist/Actions/components/explorer/action-explorer.component.js +5 -11
  55. package/dist/Actions/components/explorer/action-explorer.component.js.map +1 -1
  56. package/dist/Actions/components/explorer/action-list-item.component.js +8 -10
  57. package/dist/Actions/components/explorer/action-list-item.component.js.map +1 -1
  58. package/dist/Actions/components/explorer/action-toolbar.component.js +112 -133
  59. package/dist/Actions/components/explorer/action-toolbar.component.js.map +1 -1
  60. package/dist/Actions/components/explorer/action-tree-panel.component.js +63 -83
  61. package/dist/Actions/components/explorer/action-tree-panel.component.js.map +1 -1
  62. package/dist/Actions/components/explorer/new-action-panel.component.js +17 -21
  63. package/dist/Actions/components/explorer/new-action-panel.component.js.map +1 -1
  64. package/dist/Actions/components/explorer/new-category-panel.component.js +17 -21
  65. package/dist/Actions/components/explorer/new-category-panel.component.js.map +1 -1
  66. package/dist/Actions/components/scheduled-actions.component.js +2 -2
  67. package/dist/Actions/components/scheduled-actions.component.js.map +1 -1
  68. package/dist/Actions/components/security-permissions.component.js +2 -2
  69. package/dist/Actions/components/security-permissions.component.js.map +1 -1
  70. package/dist/ComponentStudio/component-studio-dashboard.component.d.ts +13 -5
  71. package/dist/ComponentStudio/component-studio-dashboard.component.d.ts.map +1 -1
  72. package/dist/ComponentStudio/component-studio-dashboard.component.js +168 -145
  73. package/dist/ComponentStudio/component-studio-dashboard.component.js.map +1 -1
  74. package/dist/ComponentStudio/components/artifact-load-dialog.component.d.ts +4 -5
  75. package/dist/ComponentStudio/components/artifact-load-dialog.component.d.ts.map +1 -1
  76. package/dist/ComponentStudio/components/artifact-load-dialog.component.js +197 -200
  77. package/dist/ComponentStudio/components/artifact-load-dialog.component.js.map +1 -1
  78. package/dist/ComponentStudio/components/artifact-selection-dialog.component.d.ts +5 -7
  79. package/dist/ComponentStudio/components/artifact-selection-dialog.component.d.ts.map +1 -1
  80. package/dist/ComponentStudio/components/artifact-selection-dialog.component.js +142 -148
  81. package/dist/ComponentStudio/components/artifact-selection-dialog.component.js.map +1 -1
  82. package/dist/ComponentStudio/components/browser/component-browser.component.js +153 -166
  83. package/dist/ComponentStudio/components/browser/component-browser.component.js.map +1 -1
  84. package/dist/ComponentStudio/components/editors/code-editor-panel.component.js +15 -20
  85. package/dist/ComponentStudio/components/editors/code-editor-panel.component.js.map +1 -1
  86. package/dist/ComponentStudio/components/editors/data-requirements-editor.component.js +16 -21
  87. package/dist/ComponentStudio/components/editors/data-requirements-editor.component.js.map +1 -1
  88. package/dist/ComponentStudio/components/editors/requirements-editor.component.js +18 -23
  89. package/dist/ComponentStudio/components/editors/requirements-editor.component.js.map +1 -1
  90. package/dist/ComponentStudio/components/editors/spec-editor.component.js +25 -30
  91. package/dist/ComponentStudio/components/editors/spec-editor.component.js.map +1 -1
  92. package/dist/ComponentStudio/components/new-component-dialog/new-component-dialog.component.js +10 -11
  93. package/dist/ComponentStudio/components/new-component-dialog/new-component-dialog.component.js.map +1 -1
  94. package/dist/ComponentStudio/components/save-version-dialog/save-version-dialog.component.d.ts.map +1 -1
  95. package/dist/ComponentStudio/components/save-version-dialog/save-version-dialog.component.js +24 -35
  96. package/dist/ComponentStudio/components/save-version-dialog/save-version-dialog.component.js.map +1 -1
  97. package/dist/ComponentStudio/components/text-import-dialog.component.js +15 -17
  98. package/dist/ComponentStudio/components/text-import-dialog.component.js.map +1 -1
  99. package/dist/Credentials/components/credentials-categories-resource.component.js +7 -6
  100. package/dist/Credentials/components/credentials-categories-resource.component.js.map +1 -1
  101. package/dist/Credentials/components/credentials-list-resource.component.js +6 -5
  102. package/dist/Credentials/components/credentials-list-resource.component.js.map +1 -1
  103. package/dist/Credentials/components/credentials-types-resource.component.js +7 -6
  104. package/dist/Credentials/components/credentials-types-resource.component.js.map +1 -1
  105. package/dist/DashboardBrowser/dashboard-share-dialog.component.js +9 -9
  106. package/dist/DashboardBrowser/dashboard-share-dialog.component.js.map +1 -1
  107. package/dist/Home/home-dashboard.component.js +4 -4
  108. package/dist/Home/home-dashboard.component.js.map +1 -1
  109. package/dist/Integration/components/connections/connections.component.js +4 -4
  110. package/dist/Integration/components/connections/connections.component.js.map +1 -1
  111. package/dist/Integration/components/mapping-workspace/mapping-workspace.component.js +246 -259
  112. package/dist/Integration/components/mapping-workspace/mapping-workspace.component.js.map +1 -1
  113. package/dist/Integration/components/widgets/integration-card.component.js +7 -9
  114. package/dist/Integration/components/widgets/integration-card.component.js.map +1 -1
  115. package/dist/Integration/integration.module.d.ts +6 -10
  116. package/dist/Integration/integration.module.d.ts.map +1 -1
  117. package/dist/Integration/integration.module.js +12 -20
  118. package/dist/Integration/integration.module.js.map +1 -1
  119. package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.d.ts +106 -0
  120. package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.d.ts.map +1 -0
  121. package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.js +607 -0
  122. package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.js.map +1 -0
  123. package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.d.ts +7 -2
  124. package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.d.ts.map +1 -1
  125. package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js +59 -31
  126. package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js.map +1 -1
  127. package/dist/KnowledgeHub/index.d.ts +1 -0
  128. package/dist/KnowledgeHub/index.d.ts.map +1 -1
  129. package/dist/KnowledgeHub/index.js +1 -0
  130. package/dist/KnowledgeHub/index.js.map +1 -1
  131. package/dist/Lists/components/lists-browse-resource.component.d.ts.map +1 -1
  132. package/dist/Lists/components/lists-browse-resource.component.js +9 -7
  133. package/dist/Lists/components/lists-browse-resource.component.js.map +1 -1
  134. package/dist/Lists/components/lists-my-lists-resource.component.js +5 -4
  135. package/dist/Lists/components/lists-my-lists-resource.component.js.map +1 -1
  136. package/dist/Lists/components/lists-operations-resource.component.js +10 -9
  137. package/dist/Lists/components/lists-operations-resource.component.js.map +1 -1
  138. package/dist/MCP/components/mcp-connection-dialog.component.js +141 -132
  139. package/dist/MCP/components/mcp-connection-dialog.component.js.map +1 -1
  140. package/dist/MCP/components/mcp-log-detail-panel.component.js +4 -4
  141. package/dist/MCP/components/mcp-log-detail-panel.component.js.map +1 -1
  142. package/dist/MCP/components/mcp-server-dialog.component.js +141 -128
  143. package/dist/MCP/components/mcp-server-dialog.component.js.map +1 -1
  144. package/dist/MCP/components/mcp-test-tool-dialog.component.js +210 -218
  145. package/dist/MCP/components/mcp-test-tool-dialog.component.js.map +1 -1
  146. package/dist/MCP/mcp-dashboard.component.js +2 -2
  147. package/dist/MCP/mcp-dashboard.component.js.map +1 -1
  148. package/dist/MCP/mcp.module.d.ts +6 -9
  149. package/dist/MCP/mcp.module.d.ts.map +1 -1
  150. package/dist/MCP/mcp.module.js +20 -22
  151. package/dist/MCP/mcp.module.js.map +1 -1
  152. package/dist/Scheduling/components/scheduling-activity.component.js +5 -4
  153. package/dist/Scheduling/components/scheduling-activity.component.js.map +1 -1
  154. package/dist/Scheduling/components/scheduling-jobs.component.js +6 -5
  155. package/dist/Scheduling/components/scheduling-jobs.component.js.map +1 -1
  156. package/dist/Scheduling/components/scheduling-overview.component.js +93 -92
  157. package/dist/Scheduling/components/scheduling-overview.component.js.map +1 -1
  158. package/dist/Testing/testing-dashboard.component.js +9 -10
  159. package/dist/Testing/testing-dashboard.component.js.map +1 -1
  160. package/dist/actions-dashboards.module.d.ts +8 -13
  161. package/dist/actions-dashboards.module.d.ts.map +1 -1
  162. package/dist/actions-dashboards.module.js +6 -27
  163. package/dist/actions-dashboards.module.js.map +1 -1
  164. package/dist/ai-dashboards.module.d.ts +16 -20
  165. package/dist/ai-dashboards.module.d.ts.map +1 -1
  166. package/dist/ai-dashboards.module.js +23 -44
  167. package/dist/ai-dashboards.module.js.map +1 -1
  168. package/dist/communication-dashboards.module.d.ts +4 -8
  169. package/dist/communication-dashboards.module.d.ts.map +1 -1
  170. package/dist/communication-dashboards.module.js +0 -19
  171. package/dist/communication-dashboards.module.js.map +1 -1
  172. package/dist/component-studio-dashboards.module.d.ts +7 -11
  173. package/dist/component-studio-dashboards.module.d.ts.map +1 -1
  174. package/dist/component-studio-dashboards.module.js +22 -34
  175. package/dist/component-studio-dashboards.module.js.map +1 -1
  176. package/dist/core-dashboards.module.d.ts +12 -18
  177. package/dist/core-dashboards.module.d.ts.map +1 -1
  178. package/dist/core-dashboards.module.js +15 -31
  179. package/dist/core-dashboards.module.js.map +1 -1
  180. package/dist/credentials-dashboards.module.d.ts +5 -8
  181. package/dist/credentials-dashboards.module.d.ts.map +1 -1
  182. package/dist/credentials-dashboards.module.js +3 -19
  183. package/dist/credentials-dashboards.module.js.map +1 -1
  184. package/dist/data-explorer-dashboards.module.d.ts +7 -13
  185. package/dist/data-explorer-dashboards.module.d.ts.map +1 -1
  186. package/dist/data-explorer-dashboards.module.js +0 -27
  187. package/dist/data-explorer-dashboards.module.js.map +1 -1
  188. package/dist/lists-dashboards.module.d.ts +5 -8
  189. package/dist/lists-dashboards.module.d.ts.map +1 -1
  190. package/dist/lists-dashboards.module.js +3 -19
  191. package/dist/lists-dashboards.module.js.map +1 -1
  192. package/dist/public-api.d.ts +1 -0
  193. package/dist/public-api.d.ts.map +1 -1
  194. package/dist/public-api.js +1 -0
  195. package/dist/public-api.js.map +1 -1
  196. package/dist/scheduling-dashboards.module.d.ts +6 -10
  197. package/dist/scheduling-dashboards.module.d.ts.map +1 -1
  198. package/dist/scheduling-dashboards.module.js +3 -23
  199. package/dist/scheduling-dashboards.module.js.map +1 -1
  200. package/dist/testing-dashboards.module.d.ts +7 -13
  201. package/dist/testing-dashboards.module.d.ts.map +1 -1
  202. package/dist/testing-dashboards.module.js +0 -27
  203. package/dist/testing-dashboards.module.js.map +1 -1
  204. package/package.json +47 -55
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-server-dialog.component.js","sourceRoot":"","sources":["../../../src/MCP/components/mcp-server-dialog.component.ts","../../../src/MCP/components/mcp-server-dialog.component.html"],"names":[],"mappings":"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","sourcesContent":["/**\n * @fileoverview MCP Server Dialog Component\n *\n * Dialog for creating and editing MCP server configurations.\n */\n\nimport { Component, Input, Output, EventEmitter, OnInit, OnChanges, SimpleChanges, ChangeDetectorRef } from '@angular/core';\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\nimport { Metadata, CompositeKey } from '@memberjunction/core';\nimport { MJMCPServerEntity } from '@memberjunction/core-entities';\nimport { MCPServerData } from '../mcp-dashboard.component';\n\n/**\n * Transport type options\n */\nexport const TRANSPORT_TYPES = [\n { value: 'StreamableHTTP', label: 'Streamable HTTP', description: 'HTTP-based transport with streaming support' },\n { value: 'SSE', label: 'Server-Sent Events', description: 'SSE-based transport for real-time updates' },\n { value: 'Stdio', label: 'Standard I/O', description: 'For local subprocess communication' },\n { value: 'WebSocket', label: 'WebSocket', description: 'Full-duplex WebSocket connection' }\n];\n\n/**\n * Auth type options\n */\nexport const AUTH_TYPES = [\n { value: 'None', label: 'None', description: 'No authentication required' },\n { value: 'Bearer', label: 'Bearer Token', description: 'Authorization header with Bearer token' },\n { value: 'APIKey', label: 'API Key', description: 'API key in custom header' },\n { value: 'OAuth2', label: 'OAuth 2.0', description: 'OAuth 2.0 authentication flow' },\n { value: 'Basic', label: 'Basic Auth', description: 'Username and password authentication' },\n { value: 'Custom', label: 'Custom', description: 'Custom authentication scheme' }\n];\n\n/**\n * Dialog result interface\n */\nexport interface ServerDialogResult {\n saved: boolean;\n server?: MCPServerData;\n}\n\n/**\n * MCP Server Dialog Component\n */\n@Component({\n standalone: false,\n selector: 'mj-mcp-server-dialog',\n templateUrl: './mcp-server-dialog.component.html',\n styleUrls: ['./mcp-server-dialog.component.css']\n})\nexport class MCPServerDialogComponent implements OnInit, OnChanges {\n\n @Input() server: MCPServerData | null = null;\n @Input() visible = false;\n @Output() close = new EventEmitter<ServerDialogResult>();\n\n public serverForm: FormGroup;\n public transportTypes = TRANSPORT_TYPES;\n public authTypes = AUTH_TYPES;\n public IsSaving = false;\n public ErrorMessage: string | null = null;\n\n public get IsEditMode(): boolean {\n return !!this.server?.ID;\n }\n\n public get DialogTitle(): string {\n return this.IsEditMode ? 'Edit MCP Server' : 'Add MCP Server';\n }\n\n public get SelectedTransportType(): string {\n return this.serverForm?.get('TransportType')?.value ?? 'StreamableHTTP';\n }\n\n public get RequiresURL(): boolean {\n const transport = this.SelectedTransportType;\n return transport === 'StreamableHTTP' || transport === 'SSE' || transport === 'WebSocket';\n }\n\n public get RequiresCommand(): boolean {\n return this.SelectedTransportType === 'Stdio';\n }\n\n public get SelectedAuthType(): string {\n return this.serverForm?.get('DefaultAuthType')?.value ?? 'None';\n }\n\n public get IsOAuth2(): boolean {\n return this.SelectedAuthType === 'OAuth2';\n }\n\n constructor(\n private fb: FormBuilder,\n private cdr: ChangeDetectorRef\n ) {\n this.serverForm = this.createForm();\n }\n\n ngOnInit(): void {\n this.initializeForm();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['server'] || changes['visible']) {\n if (this.visible) {\n this.initializeForm();\n }\n }\n }\n\n private createForm(): FormGroup {\n return this.fb.group({\n Name: ['', [Validators.required, Validators.maxLength(200)]],\n Description: ['', Validators.maxLength(2000)],\n TransportType: ['StreamableHTTP', Validators.required],\n ServerURL: [''],\n Command: [''],\n CommandArgs: [''],\n DefaultAuthType: ['None', Validators.required],\n RateLimitPerMinute: [null, [Validators.min(0)]],\n RateLimitPerHour: [null, [Validators.min(0)]],\n RequestTimeoutMs: [60000, [Validators.min(1000), Validators.max(600000)]],\n Status: ['Active'],\n // OAuth configuration fields\n OAuthIssuerURL: [''],\n OAuthScopes: [''],\n OAuthMetadataCacheTTLMinutes: [1440, [Validators.min(5)]],\n OAuthClientID: [''],\n OAuthClientSecretEncrypted: ['']\n });\n }\n\n private initializeForm(): void {\n if (this.server) {\n this.serverForm.patchValue({\n Name: this.server.Name,\n Description: this.server.Description ?? '',\n TransportType: this.server.TransportType,\n ServerURL: this.server.ServerURL ?? '',\n Command: this.server.Command ?? '',\n CommandArgs: '', // Would need to load from entity\n DefaultAuthType: this.server.DefaultAuthType,\n RateLimitPerMinute: this.server.RateLimitPerMinute,\n RateLimitPerHour: this.server.RateLimitPerHour,\n RequestTimeoutMs: 60000,\n Status: this.server.Status,\n // OAuth configuration fields\n OAuthIssuerURL: this.server.OAuthIssuerURL ?? '',\n OAuthScopes: this.server.OAuthScopes ?? '',\n OAuthMetadataCacheTTLMinutes: this.server.OAuthMetadataCacheTTLMinutes ?? 1440,\n OAuthClientID: this.server.OAuthClientID ?? '',\n OAuthClientSecretEncrypted: this.server.OAuthClientSecretEncrypted ?? ''\n });\n } else {\n this.serverForm.reset({\n Name: '',\n Description: '',\n TransportType: 'StreamableHTTP',\n ServerURL: '',\n Command: '',\n CommandArgs: '',\n DefaultAuthType: 'None',\n RateLimitPerMinute: null,\n RateLimitPerHour: null,\n RequestTimeoutMs: 60000,\n Status: 'Active',\n // OAuth configuration fields\n OAuthIssuerURL: '',\n OAuthScopes: '',\n OAuthMetadataCacheTTLMinutes: 1440,\n OAuthClientID: '',\n OAuthClientSecretEncrypted: ''\n });\n }\n this.ErrorMessage = null;\n this.updateValidators();\n this.cdr.detectChanges();\n }\n\n private updateValidators(): void {\n const urlControl = this.serverForm.get('ServerURL');\n const commandControl = this.serverForm.get('Command');\n const oauthIssuerControl = this.serverForm.get('OAuthIssuerURL');\n\n if (this.RequiresURL) {\n urlControl?.setValidators([Validators.required]);\n commandControl?.clearValidators();\n } else if (this.RequiresCommand) {\n commandControl?.setValidators([Validators.required]);\n urlControl?.clearValidators();\n } else {\n urlControl?.clearValidators();\n commandControl?.clearValidators();\n }\n\n // OAuth2 requires an issuer URL\n if (this.IsOAuth2) {\n oauthIssuerControl?.setValidators([Validators.required]);\n } else {\n oauthIssuerControl?.clearValidators();\n }\n\n urlControl?.updateValueAndValidity();\n commandControl?.updateValueAndValidity();\n oauthIssuerControl?.updateValueAndValidity();\n }\n\n public onTransportTypeChange(): void {\n this.updateValidators();\n }\n\n public onAuthTypeChange(): void {\n this.updateValidators();\n }\n\n public async save(): Promise<void> {\n if (this.serverForm.invalid) {\n this.serverForm.markAllAsTouched();\n return;\n }\n\n this.IsSaving = true;\n this.ErrorMessage = null;\n this.cdr.detectChanges();\n\n try {\n const md = new Metadata();\n const entity = await md.GetEntityObject<MJMCPServerEntity>('MJ: MCP Servers');\n\n if (this.IsEditMode && this.server) {\n await entity.InnerLoad(new CompositeKey([{ FieldName: 'ID', Value: this.server.ID }]));\n } else {\n entity.NewRecord();\n }\n\n // Apply form values\n const formValue = this.serverForm.value;\n entity.Name = formValue.Name;\n entity.Description = formValue.Description || null;\n entity.TransportType = formValue.TransportType;\n entity.ServerURL = formValue.ServerURL || null;\n entity.Command = formValue.Command || null;\n entity.CommandArgs = formValue.CommandArgs || null;\n entity.DefaultAuthType = formValue.DefaultAuthType;\n entity.RateLimitPerMinute = formValue.RateLimitPerMinute || null;\n entity.RateLimitPerHour = formValue.RateLimitPerHour || null;\n entity.RequestTimeoutMs = formValue.RequestTimeoutMs || 60000;\n entity.Status = formValue.Status;\n\n // OAuth configuration fields (only set if OAuth2 is selected)\n if (formValue.DefaultAuthType === 'OAuth2') {\n entity.OAuthIssuerURL = formValue.OAuthIssuerURL || null;\n entity.OAuthScopes = formValue.OAuthScopes || null;\n entity.OAuthMetadataCacheTTLMinutes = formValue.OAuthMetadataCacheTTLMinutes || 1440;\n entity.OAuthClientID = formValue.OAuthClientID || null;\n entity.OAuthClientSecretEncrypted = formValue.OAuthClientSecretEncrypted || null;\n } else {\n // Clear OAuth fields when not using OAuth2\n entity.OAuthIssuerURL = null;\n entity.OAuthScopes = null;\n entity.OAuthMetadataCacheTTLMinutes = null;\n entity.OAuthClientID = null;\n entity.OAuthClientSecretEncrypted = null;\n }\n\n const saved = await entity.Save();\n if (!saved) {\n throw new Error('Failed to save server');\n }\n\n this.close.emit({ saved: true });\n\n } catch (error) {\n this.ErrorMessage = `Failed to save: ${error instanceof Error ? error.message : String(error)}`;\n this.cdr.detectChanges();\n } finally {\n this.IsSaving = false;\n this.cdr.detectChanges();\n }\n }\n\n public cancel(): void {\n this.close.emit({ saved: false });\n }\n\n public hasError(controlName: string, errorType: string): boolean {\n const control = this.serverForm.get(controlName);\n return control?.hasError(errorType) && control?.touched || false;\n }\n}\n","@if (visible) {\n <kendo-dialog\n [title]=\"DialogTitle\"\n (close)=\"cancel()\"\n [width]=\"600\"\n [minWidth]=\"400\">\n <form [formGroup]=\"serverForm\" class=\"server-form\">\n <!-- Error Message -->\n @if (ErrorMessage) {\n <div class=\"error-banner\">\n <i class=\"fa-solid fa-exclamation-triangle\"></i>\n {{ ErrorMessage }}\n </div>\n }\n <!-- Basic Info Section -->\n <div class=\"form-section\">\n <h3><i class=\"fa-solid fa-info-circle\"></i> Basic Information</h3>\n <div class=\"form-group\">\n <label for=\"name\">Name <span class=\"required\">*</span></label>\n <input kendoTextBox\n id=\"name\"\n formControlName=\"Name\"\n placeholder=\"e.g., GitHub MCP Server\" />\n @if (hasError('Name', 'required')) {\n <span class=\"error-text\">Name is required</span>\n }\n </div>\n <div class=\"form-group\">\n <label for=\"description\">Description</label>\n <textarea kendoTextArea\n id=\"description\"\n formControlName=\"Description\"\n placeholder=\"Optional description of this server\"\n [rows]=\"3\"></textarea>\n </div>\n <div class=\"form-group\">\n <label for=\"status\">Status</label>\n <kendo-dropdownlist\n id=\"status\"\n formControlName=\"Status\"\n [data]=\"['Active', 'Inactive']\"\n [valuePrimitive]=\"true\">\n </kendo-dropdownlist>\n </div>\n </div>\n <!-- Transport Section -->\n <div class=\"form-section\">\n <h3><i class=\"fa-solid fa-network-wired\"></i> Transport Configuration</h3>\n <div class=\"form-group\">\n <label for=\"transportType\">Transport Type <span class=\"required\">*</span></label>\n <kendo-dropdownlist\n id=\"transportType\"\n formControlName=\"TransportType\"\n [data]=\"transportTypes\"\n textField=\"label\"\n valueField=\"value\"\n [valuePrimitive]=\"true\"\n (valueChange)=\"onTransportTypeChange()\">\n <ng-template kendoDropDownListItemTemplate let-dataItem>\n <div class=\"transport-option\">\n <span class=\"transport-label\">{{ dataItem.label }}</span>\n <span class=\"transport-desc\">{{ dataItem.description }}</span>\n </div>\n </ng-template>\n </kendo-dropdownlist>\n </div>\n @if (RequiresURL) {\n <div class=\"form-group\">\n <label for=\"serverUrl\">Server URL <span class=\"required\">*</span></label>\n <input kendoTextBox\n id=\"serverUrl\"\n formControlName=\"ServerURL\"\n placeholder=\"https://api.example.com/mcp\" />\n @if (hasError('ServerURL', 'required')) {\n <span class=\"error-text\">Server URL is required for this transport type</span>\n }\n </div>\n }\n @if (RequiresCommand) {\n <div class=\"form-group\">\n <label for=\"command\">Command <span class=\"required\">*</span></label>\n <input kendoTextBox\n id=\"command\"\n formControlName=\"Command\"\n placeholder=\"e.g., npx or /usr/local/bin/mcp-server\" />\n @if (hasError('Command', 'required')) {\n <span class=\"error-text\">Command is required for Stdio transport</span>\n }\n </div>\n <div class=\"form-group\">\n <label for=\"commandArgs\">Command Arguments (JSON array)</label>\n <input kendoTextBox\n id=\"commandArgs\"\n formControlName=\"CommandArgs\"\n placeholder='[\"arg1\", \"arg2\"]' />\n <span class=\"hint\">JSON array of command line arguments</span>\n </div>\n }\n </div>\n <!-- Authentication Section -->\n <div class=\"form-section\">\n <h3><i class=\"fa-solid fa-shield-halved\"></i> Authentication</h3>\n <div class=\"form-group\">\n <label for=\"authType\">Default Auth Type</label>\n <kendo-dropdownlist\n id=\"authType\"\n formControlName=\"DefaultAuthType\"\n [data]=\"authTypes\"\n textField=\"label\"\n valueField=\"value\"\n [valuePrimitive]=\"true\"\n (valueChange)=\"onAuthTypeChange()\">\n <ng-template kendoDropDownListItemTemplate let-dataItem>\n <div class=\"auth-option\">\n <span class=\"auth-label\">{{ dataItem.label }}</span>\n <span class=\"auth-desc\">{{ dataItem.description }}</span>\n </div>\n </ng-template>\n </kendo-dropdownlist>\n </div>\n </div>\n <!-- OAuth 2.0 Configuration Section (only shown when OAuth2 is selected) -->\n @if (IsOAuth2) {\n <div class=\"form-section oauth-section\">\n <h3><i class=\"fa-solid fa-key\"></i> OAuth 2.0 Configuration</h3>\n <div class=\"form-group\">\n <label for=\"oauthIssuerUrl\">OAuth Issuer URL <span class=\"required\">*</span></label>\n <input kendoTextBox\n id=\"oauthIssuerUrl\"\n formControlName=\"OAuthIssuerURL\"\n placeholder=\"https://auth.example.com\" />\n @if (hasError('OAuthIssuerURL', 'required')) {\n <span class=\"error-text\">OAuth Issuer URL is required for OAuth 2.0 authentication</span>\n }\n <span class=\"hint\">The authorization server's issuer URL (e.g., https://login.microsoftonline.com/tenant-id or https://your-domain.auth0.com)</span>\n </div>\n <div class=\"form-group\">\n <label for=\"oauthScopes\">OAuth Scopes</label>\n <input kendoTextBox\n id=\"oauthScopes\"\n formControlName=\"OAuthScopes\"\n placeholder=\"openid profile email\" />\n <span class=\"hint\">Space-separated list of OAuth scopes to request</span>\n </div>\n <div class=\"form-group\">\n <label for=\"oauthCacheTtl\">Metadata Cache TTL (minutes)</label>\n <kendo-numerictextbox\n id=\"oauthCacheTtl\"\n formControlName=\"OAuthMetadataCacheTTLMinutes\"\n [min]=\"5\"\n [format]=\"'n0'\"\n placeholder=\"1440\">\n </kendo-numerictextbox>\n <span class=\"hint\">How long to cache OAuth metadata (default: 1440 minutes = 24 hours)</span>\n </div>\n <div class=\"oauth-client-section\">\n <h4>Pre-configured Client (Optional)</h4>\n <p class=\"section-hint\">Leave blank to use Dynamic Client Registration (DCR). If the auth server doesn't support DCR, configure your client credentials here.</p>\n <div class=\"form-group\">\n <label for=\"oauthClientId\">Client ID</label>\n <input kendoTextBox\n id=\"oauthClientId\"\n formControlName=\"OAuthClientID\"\n placeholder=\"your-client-id\" />\n </div>\n <div class=\"form-group\">\n <label for=\"oauthClientSecret\">Client Secret</label>\n <input kendoTextBox\n id=\"oauthClientSecret\"\n formControlName=\"OAuthClientSecretEncrypted\"\n type=\"password\"\n placeholder=\"your-client-secret\" />\n <span class=\"hint\">The secret will be encrypted before storage</span>\n </div>\n </div>\n </div>\n }\n <!-- Rate Limiting Section -->\n <div class=\"form-section\">\n <h3><i class=\"fa-solid fa-gauge-high\"></i> Rate Limiting</h3>\n <div class=\"form-row\">\n <div class=\"form-group half\">\n <label for=\"rateLimitMinute\">Requests per Minute</label>\n <kendo-numerictextbox\n id=\"rateLimitMinute\"\n formControlName=\"RateLimitPerMinute\"\n [min]=\"0\"\n [format]=\"'n0'\"\n placeholder=\"No limit\">\n </kendo-numerictextbox>\n </div>\n <div class=\"form-group half\">\n <label for=\"rateLimitHour\">Requests per Hour</label>\n <kendo-numerictextbox\n id=\"rateLimitHour\"\n formControlName=\"RateLimitPerHour\"\n [min]=\"0\"\n [format]=\"'n0'\"\n placeholder=\"No limit\">\n </kendo-numerictextbox>\n </div>\n </div>\n <div class=\"form-group\">\n <label for=\"requestTimeout\">Request Timeout (ms)</label>\n <kendo-numerictextbox\n id=\"requestTimeout\"\n formControlName=\"RequestTimeoutMs\"\n [min]=\"1000\"\n [max]=\"600000\"\n [step]=\"1000\"\n [format]=\"'n0'\">\n </kendo-numerictextbox>\n <span class=\"hint\">Timeout for individual tool calls (1000-600000ms)</span>\n </div>\n </div>\n </form>\n <kendo-dialog-actions>\n <button kendoButton (click)=\"save()\" themeColor=\"primary\" [disabled]=\"IsSaving\">\n @if (IsSaving) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n }\n {{ IsEditMode ? 'Update' : 'Create' }}\n </button>\n <button kendoButton (click)=\"cancel()\">Cancel</button>\n </kendo-dialog-actions>\n </kendo-dialog>\n}\n"]}
1
+ {"version":3,"file":"mcp-server-dialog.component.js","sourceRoot":"","sources":["../../../src/MCP/components/mcp-server-dialog.component.ts","../../../src/MCP/components/mcp-server-dialog.component.html"],"names":[],"mappings":"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","sourcesContent":["/**\n * @fileoverview MCP Server Dialog Component\n *\n * Dialog for creating and editing MCP server configurations.\n */\n\nimport { Component, Input, Output, EventEmitter, OnInit, OnChanges, SimpleChanges, ChangeDetectorRef } from '@angular/core';\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\nimport { Metadata, CompositeKey } from '@memberjunction/core';\nimport { MJMCPServerEntity } from '@memberjunction/core-entities';\nimport { MCPServerData } from '../mcp-dashboard.component';\n\n/**\n * Transport type options\n */\nexport const TRANSPORT_TYPES = [\n { value: 'StreamableHTTP', label: 'Streamable HTTP', description: 'HTTP-based transport with streaming support' },\n { value: 'SSE', label: 'Server-Sent Events', description: 'SSE-based transport for real-time updates' },\n { value: 'Stdio', label: 'Standard I/O', description: 'For local subprocess communication' },\n { value: 'WebSocket', label: 'WebSocket', description: 'Full-duplex WebSocket connection' }\n];\n\n/**\n * Auth type options\n */\nexport const AUTH_TYPES = [\n { value: 'None', label: 'None', description: 'No authentication required' },\n { value: 'Bearer', label: 'Bearer Token', description: 'Authorization header with Bearer token' },\n { value: 'APIKey', label: 'API Key', description: 'API key in custom header' },\n { value: 'OAuth2', label: 'OAuth 2.0', description: 'OAuth 2.0 authentication flow' },\n { value: 'Basic', label: 'Basic Auth', description: 'Username and password authentication' },\n { value: 'Custom', label: 'Custom', description: 'Custom authentication scheme' }\n];\n\n/**\n * Dialog result interface\n */\nexport interface ServerDialogResult {\n saved: boolean;\n server?: MCPServerData;\n}\n\n/**\n * MCP Server Dialog Component\n */\n@Component({\n standalone: false,\n selector: 'mj-mcp-server-dialog',\n templateUrl: './mcp-server-dialog.component.html',\n styleUrls: ['./mcp-server-dialog.component.css']\n})\nexport class MCPServerDialogComponent implements OnInit, OnChanges {\n\n @Input() server: MCPServerData | null = null;\n @Input() visible = false;\n @Output() close = new EventEmitter<ServerDialogResult>();\n\n public serverForm: FormGroup;\n public transportTypes = TRANSPORT_TYPES;\n public authTypes = AUTH_TYPES;\n public IsSaving = false;\n public ErrorMessage: string | null = null;\n\n public get IsEditMode(): boolean {\n return !!this.server?.ID;\n }\n\n public get DialogTitle(): string {\n return this.IsEditMode ? 'Edit MCP Server' : 'Add MCP Server';\n }\n\n public get SelectedTransportType(): string {\n return this.serverForm?.get('TransportType')?.value ?? 'StreamableHTTP';\n }\n\n public get RequiresURL(): boolean {\n const transport = this.SelectedTransportType;\n return transport === 'StreamableHTTP' || transport === 'SSE' || transport === 'WebSocket';\n }\n\n public get RequiresCommand(): boolean {\n return this.SelectedTransportType === 'Stdio';\n }\n\n public get SelectedAuthType(): string {\n return this.serverForm?.get('DefaultAuthType')?.value ?? 'None';\n }\n\n public get IsOAuth2(): boolean {\n return this.SelectedAuthType === 'OAuth2';\n }\n\n constructor(\n private fb: FormBuilder,\n private cdr: ChangeDetectorRef\n ) {\n this.serverForm = this.createForm();\n }\n\n ngOnInit(): void {\n this.initializeForm();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['server'] || changes['visible']) {\n if (this.visible) {\n this.initializeForm();\n }\n }\n }\n\n private createForm(): FormGroup {\n return this.fb.group({\n Name: ['', [Validators.required, Validators.maxLength(200)]],\n Description: ['', Validators.maxLength(2000)],\n TransportType: ['StreamableHTTP', Validators.required],\n ServerURL: [''],\n Command: [''],\n CommandArgs: [''],\n DefaultAuthType: ['None', Validators.required],\n RateLimitPerMinute: [null, [Validators.min(0)]],\n RateLimitPerHour: [null, [Validators.min(0)]],\n RequestTimeoutMs: [60000, [Validators.min(1000), Validators.max(600000)]],\n Status: ['Active'],\n // OAuth configuration fields\n OAuthIssuerURL: [''],\n OAuthScopes: [''],\n OAuthMetadataCacheTTLMinutes: [1440, [Validators.min(5)]],\n OAuthClientID: [''],\n OAuthClientSecretEncrypted: ['']\n });\n }\n\n private initializeForm(): void {\n if (this.server) {\n this.serverForm.patchValue({\n Name: this.server.Name,\n Description: this.server.Description ?? '',\n TransportType: this.server.TransportType,\n ServerURL: this.server.ServerURL ?? '',\n Command: this.server.Command ?? '',\n CommandArgs: '', // Would need to load from entity\n DefaultAuthType: this.server.DefaultAuthType,\n RateLimitPerMinute: this.server.RateLimitPerMinute,\n RateLimitPerHour: this.server.RateLimitPerHour,\n RequestTimeoutMs: 60000,\n Status: this.server.Status,\n // OAuth configuration fields\n OAuthIssuerURL: this.server.OAuthIssuerURL ?? '',\n OAuthScopes: this.server.OAuthScopes ?? '',\n OAuthMetadataCacheTTLMinutes: this.server.OAuthMetadataCacheTTLMinutes ?? 1440,\n OAuthClientID: this.server.OAuthClientID ?? '',\n OAuthClientSecretEncrypted: this.server.OAuthClientSecretEncrypted ?? ''\n });\n } else {\n this.serverForm.reset({\n Name: '',\n Description: '',\n TransportType: 'StreamableHTTP',\n ServerURL: '',\n Command: '',\n CommandArgs: '',\n DefaultAuthType: 'None',\n RateLimitPerMinute: null,\n RateLimitPerHour: null,\n RequestTimeoutMs: 60000,\n Status: 'Active',\n // OAuth configuration fields\n OAuthIssuerURL: '',\n OAuthScopes: '',\n OAuthMetadataCacheTTLMinutes: 1440,\n OAuthClientID: '',\n OAuthClientSecretEncrypted: ''\n });\n }\n this.ErrorMessage = null;\n this.updateValidators();\n this.cdr.detectChanges();\n }\n\n private updateValidators(): void {\n const urlControl = this.serverForm.get('ServerURL');\n const commandControl = this.serverForm.get('Command');\n const oauthIssuerControl = this.serverForm.get('OAuthIssuerURL');\n\n if (this.RequiresURL) {\n urlControl?.setValidators([Validators.required]);\n commandControl?.clearValidators();\n } else if (this.RequiresCommand) {\n commandControl?.setValidators([Validators.required]);\n urlControl?.clearValidators();\n } else {\n urlControl?.clearValidators();\n commandControl?.clearValidators();\n }\n\n // OAuth2 requires an issuer URL\n if (this.IsOAuth2) {\n oauthIssuerControl?.setValidators([Validators.required]);\n } else {\n oauthIssuerControl?.clearValidators();\n }\n\n urlControl?.updateValueAndValidity();\n commandControl?.updateValueAndValidity();\n oauthIssuerControl?.updateValueAndValidity();\n }\n\n public onTransportTypeChange(): void {\n this.updateValidators();\n }\n\n public onAuthTypeChange(): void {\n this.updateValidators();\n }\n\n public async save(): Promise<void> {\n if (this.serverForm.invalid) {\n this.serverForm.markAllAsTouched();\n return;\n }\n\n this.IsSaving = true;\n this.ErrorMessage = null;\n this.cdr.detectChanges();\n\n try {\n const md = new Metadata();\n const entity = await md.GetEntityObject<MJMCPServerEntity>('MJ: MCP Servers');\n\n if (this.IsEditMode && this.server) {\n await entity.InnerLoad(new CompositeKey([{ FieldName: 'ID', Value: this.server.ID }]));\n } else {\n entity.NewRecord();\n }\n\n // Apply form values\n const formValue = this.serverForm.value;\n entity.Name = formValue.Name;\n entity.Description = formValue.Description || null;\n entity.TransportType = formValue.TransportType;\n entity.ServerURL = formValue.ServerURL || null;\n entity.Command = formValue.Command || null;\n entity.CommandArgs = formValue.CommandArgs || null;\n entity.DefaultAuthType = formValue.DefaultAuthType;\n entity.RateLimitPerMinute = formValue.RateLimitPerMinute || null;\n entity.RateLimitPerHour = formValue.RateLimitPerHour || null;\n entity.RequestTimeoutMs = formValue.RequestTimeoutMs || 60000;\n entity.Status = formValue.Status;\n\n // OAuth configuration fields (only set if OAuth2 is selected)\n if (formValue.DefaultAuthType === 'OAuth2') {\n entity.OAuthIssuerURL = formValue.OAuthIssuerURL || null;\n entity.OAuthScopes = formValue.OAuthScopes || null;\n entity.OAuthMetadataCacheTTLMinutes = formValue.OAuthMetadataCacheTTLMinutes || 1440;\n entity.OAuthClientID = formValue.OAuthClientID || null;\n entity.OAuthClientSecretEncrypted = formValue.OAuthClientSecretEncrypted || null;\n } else {\n // Clear OAuth fields when not using OAuth2\n entity.OAuthIssuerURL = null;\n entity.OAuthScopes = null;\n entity.OAuthMetadataCacheTTLMinutes = null;\n entity.OAuthClientID = null;\n entity.OAuthClientSecretEncrypted = null;\n }\n\n const saved = await entity.Save();\n if (!saved) {\n throw new Error('Failed to save server');\n }\n\n this.close.emit({ saved: true });\n\n } catch (error) {\n this.ErrorMessage = `Failed to save: ${error instanceof Error ? error.message : String(error)}`;\n this.cdr.detectChanges();\n } finally {\n this.IsSaving = false;\n this.cdr.detectChanges();\n }\n }\n\n public cancel(): void {\n this.close.emit({ saved: false });\n }\n\n public hasError(controlName: string, errorType: string): boolean {\n const control = this.serverForm.get(controlName);\n return control?.hasError(errorType) && control?.touched || false;\n }\n}\n","@if (visible) {\n <mj-dialog\n [Visible]=\"true\"\n [Title]=\"DialogTitle\"\n (Close)=\"cancel()\"\n [Width]=\"600\">\n <form [formGroup]=\"serverForm\" class=\"server-form\">\n <!-- Error Message -->\n @if (ErrorMessage) {\n <div class=\"error-banner\">\n <i class=\"fa-solid fa-exclamation-triangle\"></i>\n {{ ErrorMessage }}\n </div>\n }\n <!-- Basic Info Section -->\n <div class=\"form-section\">\n <h3><i class=\"fa-solid fa-info-circle\"></i> Basic Information</h3>\n <div class=\"form-group\">\n <label for=\"name\">Name <span class=\"required\">*</span></label>\n <input class=\"mj-input\"\n id=\"name\"\n formControlName=\"Name\"\n placeholder=\"e.g., GitHub MCP Server\" />\n @if (hasError('Name', 'required')) {\n <span class=\"error-text\">Name is required</span>\n }\n </div>\n <div class=\"form-group\">\n <label for=\"description\">Description</label>\n <textarea class=\"mj-textarea\"\n id=\"description\"\n formControlName=\"Description\"\n placeholder=\"Optional description of this server\"\n [rows]=\"3\"></textarea>\n </div>\n <div class=\"form-group\">\n <label for=\"status\">Status</label>\n <mj-dropdown\n [Data]=\"['Active', 'Inactive']\"\n [ngModelOptions]=\"{standalone: true}\" [ngModel]=\"serverForm.get('Status')?.value\"\n (ValueChange)=\"serverForm.get('Status')?.setValue($any($event))\">\n </mj-dropdown>\n </div>\n </div>\n <!-- Transport Section -->\n <div class=\"form-section\">\n <h3><i class=\"fa-solid fa-network-wired\"></i> Transport Configuration</h3>\n <div class=\"form-group\">\n <label for=\"transportType\">Transport Type <span class=\"required\">*</span></label>\n <mj-dropdown\n [Data]=\"transportTypes\"\n TextField=\"label\"\n ValueField=\"value\"\n [ValuePrimitive]=\"true\"\n [ngModelOptions]=\"{standalone: true}\" [ngModel]=\"serverForm.get('TransportType')?.value\"\n (ValueChange)=\"serverForm.get('TransportType')?.setValue($any($event)); onTransportTypeChange()\">\n <ng-template #mjDropdownItem let-dataItem>\n <div class=\"transport-option\">\n <span class=\"transport-label\">{{ dataItem.label }}</span>\n <span class=\"transport-desc\">{{ dataItem.description }}</span>\n </div>\n </ng-template>\n </mj-dropdown>\n </div>\n @if (RequiresURL) {\n <div class=\"form-group\">\n <label for=\"serverUrl\">Server URL <span class=\"required\">*</span></label>\n <input class=\"mj-input\"\n id=\"serverUrl\"\n formControlName=\"ServerURL\"\n placeholder=\"https://api.example.com/mcp\" />\n @if (hasError('ServerURL', 'required')) {\n <span class=\"error-text\">Server URL is required for this transport type</span>\n }\n </div>\n }\n @if (RequiresCommand) {\n <div class=\"form-group\">\n <label for=\"command\">Command <span class=\"required\">*</span></label>\n <input class=\"mj-input\"\n id=\"command\"\n formControlName=\"Command\"\n placeholder=\"e.g., npx or /usr/local/bin/mcp-server\" />\n @if (hasError('Command', 'required')) {\n <span class=\"error-text\">Command is required for Stdio transport</span>\n }\n </div>\n <div class=\"form-group\">\n <label for=\"commandArgs\">Command Arguments (JSON array)</label>\n <input class=\"mj-input\"\n id=\"commandArgs\"\n formControlName=\"CommandArgs\"\n placeholder='[\"arg1\", \"arg2\"]' />\n <span class=\"hint\">JSON array of command line arguments</span>\n </div>\n }\n </div>\n <!-- Authentication Section -->\n <div class=\"form-section\">\n <h3><i class=\"fa-solid fa-shield-halved\"></i> Authentication</h3>\n <div class=\"form-group\">\n <label for=\"authType\">Default Auth Type</label>\n <mj-dropdown\n [Data]=\"authTypes\"\n TextField=\"label\"\n ValueField=\"value\"\n [ValuePrimitive]=\"true\"\n [ngModelOptions]=\"{standalone: true}\" [ngModel]=\"serverForm.get('DefaultAuthType')?.value\"\n (ValueChange)=\"serverForm.get('DefaultAuthType')?.setValue($any($event)); onAuthTypeChange()\">\n <ng-template #mjDropdownItem let-dataItem>\n <div class=\"auth-option\">\n <span class=\"auth-label\">{{ dataItem.label }}</span>\n <span class=\"auth-desc\">{{ dataItem.description }}</span>\n </div>\n </ng-template>\n </mj-dropdown>\n </div>\n </div>\n <!-- OAuth 2.0 Configuration Section -->\n @if (IsOAuth2) {\n <div class=\"form-section oauth-section\">\n <h3><i class=\"fa-solid fa-key\"></i> OAuth 2.0 Configuration</h3>\n <div class=\"form-group\">\n <label for=\"oauthIssuerUrl\">OAuth Issuer URL <span class=\"required\">*</span></label>\n <input class=\"mj-input\"\n id=\"oauthIssuerUrl\"\n formControlName=\"OAuthIssuerURL\"\n placeholder=\"https://auth.example.com\" />\n @if (hasError('OAuthIssuerURL', 'required')) {\n <span class=\"error-text\">OAuth Issuer URL is required for OAuth 2.0 authentication</span>\n }\n <span class=\"hint\">The authorization server's issuer URL (e.g., https://login.microsoftonline.com/tenant-id or https://your-domain.auth0.com)</span>\n </div>\n <div class=\"form-group\">\n <label for=\"oauthScopes\">OAuth Scopes</label>\n <input class=\"mj-input\"\n id=\"oauthScopes\"\n formControlName=\"OAuthScopes\"\n placeholder=\"openid profile email\" />\n <span class=\"hint\">Space-separated list of OAuth scopes to request</span>\n </div>\n <div class=\"form-group\">\n <label for=\"oauthCacheTtl\">Metadata Cache TTL (minutes)</label>\n <mj-numeric-input\n [Min]=\"5\"\n Placeholder=\"1440\"\n [ngModelOptions]=\"{standalone: true}\" [ngModel]=\"serverForm.get('OAuthMetadataCacheTTLMinutes')?.value\"\n (ngModelChange)=\"serverForm.get('OAuthMetadataCacheTTLMinutes')?.setValue($event)\">\n </mj-numeric-input>\n <span class=\"hint\">How long to cache OAuth metadata (default: 1440 minutes = 24 hours)</span>\n </div>\n <div class=\"oauth-client-section\">\n <h4>Pre-configured Client (Optional)</h4>\n <p class=\"section-hint\">Leave blank to use Dynamic Client Registration (DCR). If the auth server doesn't support DCR, configure your client credentials here.</p>\n <div class=\"form-group\">\n <label for=\"oauthClientId\">Client ID</label>\n <input class=\"mj-input\"\n id=\"oauthClientId\"\n formControlName=\"OAuthClientID\"\n placeholder=\"your-client-id\" />\n </div>\n <div class=\"form-group\">\n <label for=\"oauthClientSecret\">Client Secret</label>\n <input class=\"mj-input\"\n id=\"oauthClientSecret\"\n formControlName=\"OAuthClientSecretEncrypted\"\n type=\"password\"\n placeholder=\"your-client-secret\" />\n <span class=\"hint\">The secret will be encrypted before storage</span>\n </div>\n </div>\n </div>\n }\n <!-- Rate Limiting Section -->\n <div class=\"form-section\">\n <h3><i class=\"fa-solid fa-gauge-high\"></i> Rate Limiting</h3>\n <div class=\"form-row\">\n <div class=\"form-group half\">\n <label for=\"rateLimitMinute\">Requests per Minute</label>\n <mj-numeric-input\n [Min]=\"0\"\n Placeholder=\"No limit\"\n [ngModelOptions]=\"{standalone: true}\" [ngModel]=\"serverForm.get('RateLimitPerMinute')?.value\"\n (ngModelChange)=\"serverForm.get('RateLimitPerMinute')?.setValue($event)\">\n </mj-numeric-input>\n </div>\n <div class=\"form-group half\">\n <label for=\"rateLimitHour\">Requests per Hour</label>\n <mj-numeric-input\n [Min]=\"0\"\n Placeholder=\"No limit\"\n [ngModelOptions]=\"{standalone: true}\" [ngModel]=\"serverForm.get('RateLimitPerHour')?.value\"\n (ngModelChange)=\"serverForm.get('RateLimitPerHour')?.setValue($event)\">\n </mj-numeric-input>\n </div>\n </div>\n <div class=\"form-group\">\n <label for=\"requestTimeout\">Request Timeout (ms)</label>\n <mj-numeric-input\n [Min]=\"1000\"\n [Max]=\"600000\"\n [Step]=\"1000\"\n [ngModelOptions]=\"{standalone: true}\" [ngModel]=\"serverForm.get('RequestTimeoutMs')?.value\"\n (ngModelChange)=\"serverForm.get('RequestTimeoutMs')?.setValue($event)\">\n </mj-numeric-input>\n <span class=\"hint\">Timeout for individual tool calls (1000-600000ms)</span>\n </div>\n </div>\n </form>\n <mj-dialog-actions>\n <button mjButton variant=\"primary\" (click)=\"save()\" [disabled]=\"IsSaving\">\n @if (IsSaving) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n }\n {{ IsEditMode ? 'Update' : 'Create' }}\n </button>\n <button mjButton (click)=\"cancel()\">Cancel</button>\n </mj-dialog-actions>\n </mj-dialog>\n}\n"]}