@gravitee/ui-policy-studio-angular 16.3.0-renovate-angular-1a06bc7 → 16.3.0-renovate-all-devdependencies-minor-patch-e3e2b81

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.
@@ -1 +1 @@
1
- {"version":3,"file":"gravitee-ui-policy-studio-angular.mjs","sources":["../../../projects/ui-policy-studio-angular/src/lib/models/flow/FlowExecution.ts","../../../projects/ui-policy-studio-angular/src/lib/models/flow/HttpMethod.ts","../../../projects/ui-policy-studio-angular/src/lib/models/flow/index.ts","../../../projects/ui-policy-studio-angular/src/lib/models/plan/Plan.ts","../../../projects/ui-policy-studio-angular/src/lib/models/plan/index.ts","../../../projects/ui-policy-studio-angular/src/lib/models/policy/Policy.ts","../../../projects/ui-policy-studio-angular/src/lib/models/policy/SharedPolicyGroupPolicy.ts","../../../projects/ui-policy-studio-angular/src/lib/models/policy/GenericPolicy.ts","../../../projects/ui-policy-studio-angular/src/lib/models/policy/index.ts","../../../projects/ui-policy-studio-angular/src/lib/models/ApiProtocolType.ts","../../../projects/ui-policy-studio-angular/src/lib/models/ApiType.ts","../../../projects/ui-policy-studio-angular/src/lib/models/index.ts","../../../projects/ui-policy-studio-angular/src/lib/components/flow-execution-form-dialog/gio-ps-flow-execution-form-dialog.component.ts","../../../projects/ui-policy-studio-angular/src/lib/components/flow-execution-form-dialog/gio-ps-flow-execution-form-dialog.component.html","../../../projects/ui-policy-studio-angular/src/lib/components/flow-form-dialog/flow-message-form-dialog/gio-ps-flow-message-form-dialog.component.ts","../../../projects/ui-policy-studio-angular/src/lib/components/flow-form-dialog/flow-message-form-dialog/gio-ps-flow-message-form-dialog.component.html","../../../projects/ui-policy-studio-angular/src/lib/components/flow-form-dialog/flow-native-form-dialog/gio-ps-flow-native-form-dialog.component.ts","../../../projects/ui-policy-studio-angular/src/lib/components/flow-form-dialog/flow-native-form-dialog/gio-ps-flow-native-form-dialog.component.html","../../../projects/ui-policy-studio-angular/src/lib/components/flow-form-dialog/flow-proxy-form-dialog/gio-ps-flow-proxy-form-dialog.component.ts","../../../projects/ui-policy-studio-angular/src/lib/components/flow-form-dialog/flow-proxy-form-dialog/gio-ps-flow-proxy-form-dialog.component.html","../../../projects/ui-policy-studio-angular/src/lib/components/flow-form-dialog/flow-mcp-form-dialog/gio-ps-flow-mcp-form-dialog.component.ts","../../../projects/ui-policy-studio-angular/src/lib/components/flow-form-dialog/flow-mcp-form-dialog/gio-ps-flow-mcp-form-dialog.component.html","../../../projects/ui-policy-studio-angular/src/lib/components/flow-form-dialog/flow-llm-form-dialog/gio-ps-flow-llm-form-dialog.component.ts","../../../projects/ui-policy-studio-angular/src/lib/components/flow-form-dialog/flow-llm-form-dialog/gio-ps-flow-llm-form-dialog.component.html","../../../projects/ui-policy-studio-angular/src/lib/components/flows-menu/gio-ps-flows-menu.component.ts","../../../projects/ui-policy-studio-angular/src/lib/components/flows-menu/gio-ps-flows-menu.component.html","../../../projects/ui-policy-studio-angular/src/lib/policy-studio/gio-policy-studio.service.ts","../../../projects/ui-policy-studio-angular/src/lib/components/step-form/gio-ps-step-form.component.ts","../../../projects/ui-policy-studio-angular/src/lib/components/step-form/gio-ps-step-form.component.html","../../../projects/ui-policy-studio-angular/src/lib/components/policies-catalog-dialog/gio-ps-policies-catalog-dialog.component.ts","../../../projects/ui-policy-studio-angular/src/lib/components/policies-catalog-dialog/gio-ps-policies-catalog-dialog.component.html","../../../projects/ui-policy-studio-angular/src/lib/components/step-edit-dialog/gio-ps-step-edit-dialog.component.ts","../../../projects/ui-policy-studio-angular/src/lib/components/step-edit-dialog/gio-ps-step-edit-dialog.component.html","../../../projects/ui-policy-studio-angular/src/lib/components/flow-details-phase-step/gio-ps-flow-details-phase-step.component.ts","../../../projects/ui-policy-studio-angular/src/lib/components/flow-details-phase-step/gio-ps-flow-details-phase-step.component.html","../../../projects/ui-policy-studio-angular/src/lib/components/flow-details-phase/gio-ps-flow-details-phase.component.ts","../../../projects/ui-policy-studio-angular/src/lib/components/flow-details-phase/gio-ps-flow-details-phase.component.html","../../../projects/ui-policy-studio-angular/src/lib/components/filter-pipe/gio-flter-connectors-by-mode.pipe.ts","../../../projects/ui-policy-studio-angular/src/lib/components/flow-details-info-bar/gio-ps-flow-details-info-bar.component.ts","../../../projects/ui-policy-studio-angular/src/lib/components/flow-details-info-bar/gio-ps-flow-details-info-bar.component.html","../../../projects/ui-policy-studio-angular/src/lib/components/flow-details/gio-ps-flow-details.component.ts","../../../projects/ui-policy-studio-angular/src/lib/components/flow-details/gio-ps-flow-details.component.html","../../../projects/ui-policy-studio-angular/src/lib/policy-studio/gio-policy-studio.component.ts","../../../projects/ui-policy-studio-angular/src/lib/policy-studio/gio-policy-studio.component.html","../../../projects/ui-policy-studio-angular/src/lib/policy-group-studio/gio-policy-group-studio.component.ts","../../../projects/ui-policy-studio-angular/src/lib/policy-group-studio/gio-policy-group-studio.component.html","../../../projects/ui-policy-studio-angular/src/public-api.ts","../../../projects/ui-policy-studio-angular/src/gravitee-ui-policy-studio-angular.ts"],"sourcesContent":["/*\n * Copyright (C) 2023 The Gravitee team (http://gravitee.io)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * API's flow mode.\n */\nexport type FlowMode = 'BEST_MATCH' | 'DEFAULT';\n\nexport interface FlowExecution {\n mode?: FlowMode;\n /**\n * Is the flow execution match required.\n */\n matchRequired?: boolean;\n}\n","/*\n * Copyright (C) 2015 The Gravitee team (http://gravitee.io)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport const HttpMethods = ['CONNECT', 'DELETE', 'GET', 'HEAD', 'OPTIONS', 'PATCH', 'POST', 'PUT', 'TRACE', 'OTHER'] as const;\nexport type HttpMethod = (typeof HttpMethods)[number];\n\nexport const toHttpMethod: (value: string) => HttpMethod | undefined = (value: string) => {\n switch (value) {\n case 'CONNECT':\n return 'CONNECT';\n case 'DELETE':\n return 'DELETE';\n case 'GET':\n return 'GET';\n case 'HEAD':\n return 'HEAD';\n case 'OPTIONS':\n return 'OPTIONS';\n case 'PATCH':\n return 'PATCH';\n case 'POST':\n return 'POST';\n case 'PUT':\n return 'PUT';\n case 'TRACE':\n return 'TRACE';\n case 'OTHER':\n return 'OTHER';\n default:\n return undefined;\n }\n};\n","/*\n * Copyright (C) 2022 The Gravitee team (http://gravitee.io)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nexport * from './Flow';\nexport * from './FlowExecution';\nexport * from './HttpMethod';\nexport * from './Selector';\nexport * from './Step';\n","/*\n * Copyright (C) 2022 The Gravitee team (http://gravitee.io)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Flow } from '../flow';\n\nexport interface Plan {\n id: string;\n name: string;\n flows: Flow[];\n}\n","/*\n * Copyright (C) 2023 The Gravitee team (http://gravitee.io)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nexport * from './Plan';\n","/*\n * Copyright (C) 2023 The Gravitee team (http://gravitee.io)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { get } from 'lodash';\n\nimport { ApiProtocolType } from '../ApiProtocolType';\n\nexport type FlowPhase = 'REQUEST' | 'RESPONSE' | 'INTERACT' | 'CONNECT' | 'PUBLISH' | 'SUBSCRIBE';\n\nexport interface Policy {\n id: string;\n name: string;\n icon?: string;\n description?: string;\n category?: string;\n version?: string;\n flowPhaseCompatibility?: Partial<Record<ApiProtocolType, FlowPhase[]>>;\n deployed?: boolean;\n}\n\n/**\n * @Deprecated to keep as long as we support APIM < 4.6\n */\nexport type ExecutionPhase = 'REQUEST' | 'RESPONSE' | 'MESSAGE_REQUEST' | 'MESSAGE_RESPONSE';\n\nexport type PolicyInput = Omit<Policy, 'proxy' | 'message'> & {\n proxy?: ExecutionPhase[];\n message?: ExecutionPhase[];\n};\n\n/**\n * @Deprecated to keep as long as we support APIM < 4.6\n */\nexport const fromPolicyInput = (policy: PolicyInput | Policy): Policy => {\n const getProxyPhase = get(policy, 'proxy')?.map(fromExecutionPhase);\n const getMessagePhase = get(policy, 'message')?.map(fromExecutionPhase);\n\n return {\n ...policy,\n flowPhaseCompatibility: {\n ...(getProxyPhase && { HTTP_PROXY: getProxyPhase }),\n ...(getMessagePhase && { HTTP_MESSAGE: getMessagePhase }),\n ...policy.flowPhaseCompatibility,\n },\n };\n};\n\n/**\n * @Deprecated to keep as long as we support APIM < 4.6\n */\nexport const fromExecutionPhase = (phase: ExecutionPhase | FlowPhase): FlowPhase => {\n if (phase === 'MESSAGE_REQUEST') {\n return 'PUBLISH';\n }\n if (phase === 'MESSAGE_RESPONSE') {\n return 'SUBSCRIBE';\n }\n return phase;\n};\n","/*\n * Copyright (C) 2023 The Gravitee team (http://gravitee.io)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { ApiType } from '../ApiType';\n\nimport { FlowPhase } from './Policy';\n\nexport type SharedPolicyGroupPolicy = {\n id: string;\n policyId: string;\n name: string;\n description?: string;\n prerequisiteMessage?: string;\n apiType: ApiType;\n phase: FlowPhase;\n};\n","/*\n * Copyright (C) 2024 The Gravitee team (http://gravitee.io)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { SharedPolicyGroupPolicy } from './SharedPolicyGroupPolicy';\nimport { Policy } from './Policy';\n\ntype CommonGenericPolicy = {\n _id: string;\n policyId: string;\n icon?: string;\n category?: string;\n type: 'POLICY' | 'SHARED_POLICY_GROUP';\n};\n\nexport type GenericPolicyPolicy = CommonGenericPolicy & {\n type: 'POLICY';\n} & Omit<Policy, 'id'>;\n\nexport type GenericPolicySharedPolicyGroupPolicy = CommonGenericPolicy & {\n type: 'SHARED_POLICY_GROUP';\n sharedPolicyGroupId: string;\n} & Omit<SharedPolicyGroupPolicy, 'id'>;\n\nexport type GenericPolicy = GenericPolicyPolicy | GenericPolicySharedPolicyGroupPolicy;\n\nexport const isSharedPolicyGroupPolicy = (policy: GenericPolicy): policy is GenericPolicySharedPolicyGroupPolicy =>\n policy.type === 'SHARED_POLICY_GROUP';\nexport const isPolicy = (policy: GenericPolicy): policy is GenericPolicyPolicy => policy.type === 'POLICY';\n\nexport const toGenericPolicies = (policies: Policy[], sharedPolicyGroupPolicies: SharedPolicyGroupPolicy[] = []): GenericPolicy[] => {\n return [\n ...policies.map(policy => ({ _id: `POLICY_${policy.id}`, policyId: policy.id, type: 'POLICY' as const, ...policy })),\n ...sharedPolicyGroupPolicies.map(sharedPolicyGroupPolicy => ({\n _id: `SHARED_POLICY_GROUP_${sharedPolicyGroupPolicy.id}`,\n type: 'SHARED_POLICY_GROUP' as const,\n category: 'Shared Policy Group',\n sharedPolicyGroupId: sharedPolicyGroupPolicy.id,\n ...sharedPolicyGroupPolicy,\n })),\n ];\n};\n\nexport const toPolicy = (genericPolicy: GenericPolicy): Policy => {\n if (isPolicy(genericPolicy)) {\n return {\n id: genericPolicy.policyId,\n ...genericPolicy,\n };\n }\n throw new Error('Cannot convert a Shared Policy Group Policy to a Policy');\n};\n","/*\n * Copyright (C) 2023 The Gravitee team (http://gravitee.io)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nexport * from './Policy';\nexport * from './SharedPolicyGroupPolicy';\nexport * from './GenericPolicy';\n","/*\n * Copyright (C) 2023 The Gravitee team (http://gravitee.io)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport type ApiProtocolType = 'A2A_PROXY' | 'HTTP_MESSAGE' | 'HTTP_PROXY' | 'LLM_PROXY' | 'MCP_PROXY' | 'NATIVE_KAFKA';\n","/*\n * Copyright (C) 2023 The Gravitee team (http://gravitee.io)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport type ApiType = 'A2A_PROXY' | 'LLM_PROXY' | 'MCP_PROXY' | 'MESSAGE' | 'NATIVE' | 'PROXY';\n","/*\n * Copyright (C) 2022 The Gravitee team (http://gravitee.io)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nexport * from './flow';\nexport * from './plan';\nexport * from './policy';\n\nexport * from './ConnectorsInfo';\nexport * from './SaveOutput';\nexport * from './PolicySchemaFetcher';\nexport * from './ApiProtocolType';\nexport * from './ApiType';\n","/*\n * Copyright (C) 2015 The Gravitee team (http://gravitee.io)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { Component, Inject } from '@angular/core';\nimport { MatDialogRef, MAT_DIALOG_DATA, MatDialogModule } from '@angular/material/dialog';\nimport { ReactiveFormsModule, UntypedFormControl, UntypedFormGroup } from '@angular/forms';\nimport { cloneDeep } from 'lodash';\nimport { MatButtonModule } from '@angular/material/button';\nimport { GioBannerModule, GioFormSlideToggleModule, GioIconsModule } from '@gravitee/ui-particles-angular';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\n\nimport { FlowExecution } from '../../models';\n\nexport type GioPolicyStudioFlowExecutionFormDialogData = {\n flowExecution?: FlowExecution;\n readOnly?: boolean;\n};\n\n@Component({\n imports: [\n ReactiveFormsModule,\n MatButtonModule,\n MatDialogModule,\n MatFormFieldModule,\n MatSelectModule,\n MatSlideToggleModule,\n GioFormSlideToggleModule,\n GioBannerModule,\n GioIconsModule,\n ],\n selector: 'gio-ps-flow-execution-form-dialog',\n templateUrl: './gio-ps-flow-execution-form-dialog.component.html',\n styleUrls: ['./gio-ps-flow-execution-form-dialog.component.scss'],\n})\nexport class GioPolicyStudioFlowExecutionFormDialogComponent {\n public flowExecutionFormGroup?: UntypedFormGroup;\n\n public existingFlowExecution?: FlowExecution;\n\n public readOnly = false;\n\n constructor(\n public dialogRef: MatDialogRef<GioPolicyStudioFlowExecutionFormDialogComponent, FlowExecution | undefined>,\n @Inject(MAT_DIALOG_DATA) flowDialogData: GioPolicyStudioFlowExecutionFormDialogData,\n ) {\n this.existingFlowExecution = cloneDeep(flowDialogData?.flowExecution);\n\n this.flowExecutionFormGroup = new UntypedFormGroup({\n mode: new UntypedFormControl(flowDialogData?.flowExecution?.mode ?? 'DEFAULT'),\n matchRequired: new UntypedFormControl(flowDialogData?.flowExecution?.matchRequired ?? false),\n });\n\n this.readOnly = Boolean(flowDialogData.readOnly);\n\n if (this.readOnly) {\n this.flowExecutionFormGroup.disable({ emitEvent: false });\n }\n }\n\n public onSubmit(): void {\n const flowExecutionToSave: FlowExecution = {\n ...this.existingFlowExecution,\n mode: this.flowExecutionFormGroup?.get('mode')?.value,\n matchRequired: this.flowExecutionFormGroup?.get('matchRequired')?.value,\n };\n\n this.dialogRef.close({\n ...flowExecutionToSave,\n });\n }\n}\n","<!--\n\n Copyright (C) 2025 The Gravitee team (http://gravitee.io)\n \n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n \n http://www.apache.org/licenses/LICENSE-2.0\n \n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n\n-->\n<h2 mat-dialog-title class=\"title\">\n Flow execution\n\n <button class=\"title__closeBtn\" mat-icon-button aria-label=\"Close dialog\" [mat-dialog-close]=\"\">\n <mat-icon svgIcon=\"gio:cancel\"></mat-icon>\n </button>\n</h2>\n\n@if (flowExecutionFormGroup) {\n <mat-dialog-content class=\"content\" [formGroup]=\"flowExecutionFormGroup\">\n <div class=\"content__row\">\n <gio-banner-info>\n By default, flow selection is based on the operators defined in your flows, either when it “matches with” or “starts with” a path.\n You can choose the \"Best match\" option to select a flow from the closest path.\n </gio-banner-info>\n </div>\n <div class=\"content__row\">\n <mat-form-field>\n <mat-label>Default flow mode</mat-label>\n <mat-select formControlName=\"mode\">\n <mat-option value=\"BEST_MATCH\">Best Match</mat-option>\n <mat-option value=\"DEFAULT\">Default</mat-option>\n </mat-select>\n <mat-hint>Change how the flow selection is made</mat-hint>\n </mat-form-field>\n </div>\n <div class=\"content__row\">\n <gio-form-slide-toggle>\n <gio-form-label>Fail on flow mismatch</gio-form-label>\n Respond with an error when requests don’t match any defined flow\n <mat-slide-toggle gioFormSlideToggle formControlName=\"matchRequired\"></mat-slide-toggle>\n </gio-form-slide-toggle>\n </div>\n </mat-dialog-content>\n}\n\n<mat-dialog-actions class=\"actions\" align=\"end\">\n <button [disabled]=\"readOnly\" class=\"actions__cancelBtn\" mat-button [mat-dialog-close]=\"\">Cancel</button>\n <button [disabled]=\"readOnly\" class=\"actions__saveBtn\" color=\"primary\" mat-flat-button role=\"dialog\" (click)=\"onSubmit()\">Save</button>\n</mat-dialog-actions>\n","/*\n * Copyright (C) 2015 The Gravitee team (http://gravitee.io)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { Component, Inject } from '@angular/core';\nimport { MatDialogRef, MAT_DIALOG_DATA, MatDialogModule } from '@angular/material/dialog';\nimport { ReactiveFormsModule, UntypedFormControl, UntypedFormGroup } from '@angular/forms';\nimport { cloneDeep, uniqueId } from 'lodash';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\nimport { GioBannerModule, GioElAssistantComponent, GioFormSlideToggleModule, GioIconsModule } from '@gravitee/ui-particles-angular';\nimport { MatInputModule } from '@angular/material/input';\n\nimport { GioPolicyStudioFlowFormDialogResult } from '../gio-ps-flow-form-dialog-result.model';\nimport { ChannelSelector, ConditionSelector, ConnectorInfo } from '../../../models';\nimport { FlowVM } from '../../../policy-studio/gio-policy-studio.model';\n\nexport type GioPolicyStudioFlowMessageFormDialogData = {\n flow?: FlowVM;\n entrypoints?: ConnectorInfo[];\n};\n\n@Component({\n imports: [\n ReactiveFormsModule,\n MatButtonModule,\n MatDialogModule,\n MatFormFieldModule,\n MatSelectModule,\n MatInputModule,\n MatSlideToggleModule,\n GioFormSlideToggleModule,\n GioBannerModule,\n GioIconsModule,\n GioElAssistantComponent,\n ],\n selector: 'gio-ps-flow-message-form-dialog',\n templateUrl: './gio-ps-flow-message-form-dialog.component.html',\n styleUrls: ['./gio-ps-flow-message-form-dialog.component.scss'],\n})\nexport class GioPolicyStudioFlowMessageFormDialogComponent {\n public entrypoints: ConnectorInfo[] = [];\n public flowFormGroup?: UntypedFormGroup;\n\n public existingFlow?: FlowVM;\n public mode: 'create' | 'edit' = 'create';\n\n constructor(\n public dialogRef: MatDialogRef<GioPolicyStudioFlowMessageFormDialogComponent, GioPolicyStudioFlowFormDialogResult>,\n @Inject(MAT_DIALOG_DATA) flowDialogData: GioPolicyStudioFlowMessageFormDialogData,\n ) {\n this.entrypoints = flowDialogData?.entrypoints ?? [];\n\n this.existingFlow = cloneDeep(flowDialogData?.flow);\n this.mode = this.existingFlow ? 'edit' : 'create';\n\n const channelSelector = flowDialogData?.flow?.selectors?.find(s => s.type === 'CHANNEL') as ChannelSelector;\n const conditionSelector = flowDialogData?.flow?.selectors?.find(s => s.type === 'CONDITION') as ConditionSelector;\n\n this.flowFormGroup = new UntypedFormGroup({\n name: new UntypedFormControl(flowDialogData?.flow?.name ?? ''),\n channelOperator: new UntypedFormControl(channelSelector?.channelOperator ?? 'EQUALS'),\n channel: new UntypedFormControl(channelSelector?.channel ?? ''),\n operations: new UntypedFormControl(channelSelector?.operations ?? []),\n entrypoints: new UntypedFormControl(channelSelector?.entrypoints ?? []),\n condition: new UntypedFormControl(conditionSelector?.condition ?? ''),\n });\n }\n\n public onSubmit(): void {\n const channelSelectorToSave: ChannelSelector = {\n type: 'CHANNEL',\n channel: this.flowFormGroup?.get('channel')?.value,\n channelOperator: this.flowFormGroup?.get('channelOperator')?.value,\n operations: this.flowFormGroup?.get('operations')?.value,\n entrypoints: this.flowFormGroup?.get('entrypoints')?.value,\n };\n\n const conditionValue: string = this.flowFormGroup?.get('condition')?.value;\n const conditionSelectorToSave: ConditionSelector | undefined = conditionValue\n ? {\n type: 'CONDITION',\n condition: conditionValue,\n }\n : undefined;\n\n const flowToSave: FlowVM = {\n // New id for new flow\n _id: uniqueId('flow_'),\n // If existing flow, keep root props\n ...this.existingFlow,\n // Mark as changed\n _hasChanged: true,\n // Add changes\n name: this.flowFormGroup?.get('name')?.value,\n selectors: conditionSelectorToSave ? [channelSelectorToSave, conditionSelectorToSave] : [channelSelectorToSave],\n enabled: this.existingFlow ? this.existingFlow.enabled : true,\n };\n\n this.dialogRef.close({\n ...flowToSave,\n });\n }\n}\n","<!--\n\n Copyright (C) 2025 The Gravitee team (http://gravitee.io)\n \n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n \n http://www.apache.org/licenses/LICENSE-2.0\n \n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n\n-->\n<h2 mat-dialog-title class=\"title\">\n {{ mode === 'create' ? 'Create a new flow' : 'Edit flow'\n }}<button class=\"title__closeBtn\" mat-icon-button aria-label=\"Close dialog\" [mat-dialog-close]=\"false\">\n <mat-icon svgIcon=\"gio:cancel\"></mat-icon>\n </button>\n</h2>\n\n@if (flowFormGroup) {\n <mat-dialog-content class=\"content\" [formGroup]=\"flowFormGroup\">\n <p>Flows allow you to apply different policies per event phases. For example you can reroute calls based on the URL specified.</p>\n <div class=\"content__row\">\n <mat-form-field>\n <mat-label>Flow name</mat-label>\n <input matInput formControlName=\"name\" cdkFocusInitial />\n <mat-hint>Names will be automatically generated with channel and operation if left blank.</mat-hint>\n </mat-form-field>\n </div>\n <div class=\"content__row\">\n <mat-form-field>\n <mat-label>Operator</mat-label>\n <mat-select formControlName=\"channelOperator\">\n <mat-option value=\"EQUALS\">Equals</mat-option>\n <mat-option value=\"STARTS_WITH\">Starts with</mat-option>\n </mat-select>\n <mat-hint>Channel operator.</mat-hint>\n </mat-form-field>\n <mat-form-field>\n <mat-label>Channel</mat-label>\n <input matInput formControlName=\"channel\" />\n <mat-hint>Publish or Subscribe channel. This is the path of your request.</mat-hint>\n </mat-form-field>\n </div>\n <div class=\"content__row\">\n <mat-form-field>\n <mat-label>Entrypoints</mat-label>\n <mat-select multiple formControlName=\"entrypoints\">\n @for (entrypoint of entrypoints; track entrypoint) {\n <mat-option [value]=\"entrypoint.type\">{{ entrypoint.name }}</mat-option>\n }\n </mat-select>\n <mat-hint>Entrypoints where your flow will be executed. They will all be executed if left empty.</mat-hint>\n </mat-form-field>\n </div>\n <div class=\"content__row\">\n <mat-form-field>\n <mat-label>Entrypoints supported operations</mat-label>\n <mat-select multiple formControlName=\"operations\">\n <mat-option value=\"PUBLISH\">Publish</mat-option>\n <mat-option value=\"SUBSCRIBE\">Subscribe</mat-option>\n </mat-select>\n <mat-hint>They will all be supported if left empty.</mat-hint>\n </mat-form-field>\n </div>\n <div class=\"content__row\">\n <mat-form-field>\n <mat-label>Condition</mat-label>\n <input matInput formControlName=\"condition\" />\n <mat-hint>Condition to execute the flow, supports Expression Language.</mat-hint>\n <gio-el-assistant matSuffix />\n </mat-form-field>\n </div>\n </mat-dialog-content>\n}\n\n<mat-dialog-actions class=\"actions\" align=\"end\">\n <button class=\"actions__cancelBtn\" mat-button [mat-dialog-close]=\"false\">Cancel</button>\n <button class=\"actions__saveBtn\" color=\"primary\" mat-flat-button role=\"dialog\" (click)=\"onSubmit()\">\n {{ mode === 'create' ? 'Create' : 'Save' }}\n </button>\n</mat-dialog-actions>\n","/*\n * Copyright (C) 2015 The Gravitee team (http://gravitee.io)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { Component, Inject } from '@angular/core';\nimport { MatDialogRef, MAT_DIALOG_DATA, MatDialogModule } from '@angular/material/dialog';\nimport { ReactiveFormsModule, UntypedFormControl, UntypedFormGroup } from '@angular/forms';\nimport { capitalize, cloneDeep, isEmpty, trim, uniqueId } from 'lodash';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\nimport { GioBannerModule, GioFormSlideToggleModule, GioFormTagsInputModule, GioIconsModule } from '@gravitee/ui-particles-angular';\n\nimport { GioPolicyStudioFlowFormDialogResult } from '../gio-ps-flow-form-dialog-result.model';\nimport { FlowVM } from '../../../policy-studio/gio-policy-studio.model';\n\nexport type GioPolicyStudioFlowNativeFormDialogData = {\n flow?: FlowVM;\n parentGroupName?: string;\n};\n\n@Component({\n imports: [\n ReactiveFormsModule,\n MatButtonModule,\n MatDialogModule,\n MatFormFieldModule,\n MatSelectModule,\n MatInputModule,\n MatSlideToggleModule,\n GioFormSlideToggleModule,\n GioBannerModule,\n GioIconsModule,\n GioFormTagsInputModule,\n ],\n selector: 'gio-ps-flow-native-form-dialog',\n templateUrl: './gio-ps-flow-native-form-dialog.component.html',\n styleUrls: ['./gio-ps-flow-native-form-dialog.component.scss'],\n})\nexport class GioPolicyStudioFlowNativeFormDialogComponent {\n public flowFormGroup?: UntypedFormGroup;\n\n public existingFlow?: FlowVM;\n public mode: 'create' | 'edit' = 'create';\n\n private defaultFlowName;\n\n constructor(\n public dialogRef: MatDialogRef<GioPolicyStudioFlowNativeFormDialogComponent, GioPolicyStudioFlowFormDialogResult>,\n @Inject(MAT_DIALOG_DATA) flowDialogData: GioPolicyStudioFlowNativeFormDialogData,\n ) {\n this.existingFlow = cloneDeep(flowDialogData?.flow);\n this.mode = this.existingFlow ? 'edit' : 'create';\n\n this.flowFormGroup = new UntypedFormGroup({\n name: new UntypedFormControl(flowDialogData?.flow?.name ?? ''),\n });\n\n this.defaultFlowName = capitalize(flowDialogData.parentGroupName) + ' flow';\n }\n\n public onSubmit(): void {\n const flowToSave: FlowVM = {\n // New id for new flow\n _id: uniqueId('flow_'),\n // If existing flow, keep root props\n ...this.existingFlow,\n // Mark as changed\n _hasChanged: true,\n // Add changes\n name: this.getFlowName(),\n enabled: this.existingFlow ? this.existingFlow.enabled : true,\n };\n\n this.dialogRef.close({\n ...flowToSave,\n });\n }\n\n private getFlowName(): string {\n const inputName = trim(this.flowFormGroup?.get('name')?.value);\n return isEmpty(inputName) ? this.defaultFlowName : inputName;\n }\n}\n","<!--\n\n Copyright (C) 2025 The Gravitee team (http://gravitee.io)\n \n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n \n http://www.apache.org/licenses/LICENSE-2.0\n \n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n\n-->\n<h2 mat-dialog-title class=\"title\">\n {{ mode === 'create' ? 'Create a new flow' : 'Edit flow' }}\n\n <button class=\"title__closeBtn\" mat-icon-button aria-label=\"Close dialog\" [mat-dialog-close]=\"false\">\n <mat-icon svgIcon=\"gio:cancel\"></mat-icon>\n </button>\n</h2>\n\n@if (flowFormGroup) {\n <mat-dialog-content class=\"content\" [formGroup]=\"flowFormGroup\">\n <p>Flow allow you to apply different policies. Only one flow is allowed for a native API.</p>\n <div class=\"content__row\">\n <mat-form-field>\n <mat-label>Flow name</mat-label>\n <input matInput formControlName=\"name\" cdkFocusInitial />\n <mat-hint>Names will be automatically generated if left blank</mat-hint>\n </mat-form-field>\n </div>\n </mat-dialog-content>\n}\n\n<mat-dialog-actions class=\"actions\" align=\"end\">\n <button class=\"actions__cancelBtn\" mat-button [mat-dialog-close]=\"false\">Cancel</button>\n <button class=\"actions__saveBtn\" color=\"primary\" mat-flat-button role=\"dialog\" (click)=\"onSubmit()\">\n {{ mode === 'create' ? 'Create' : 'Save' }}\n </button>\n</mat-dialog-actions>\n","/*\n * Copyright (C) 2015 The Gravitee team (http://gravitee.io)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { Component, Inject } from '@angular/core';\nimport { MatDialogRef, MAT_DIALOG_DATA, MatDialogModule } from '@angular/material/dialog';\nimport { ReactiveFormsModule, UntypedFormControl, UntypedFormGroup } from '@angular/forms';\nimport { cloneDeep, uniqueId } from 'lodash';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\nimport {\n GioBannerModule,\n GioElAssistantComponent,\n GioFormSlideToggleModule,\n GioFormTagsInputModule,\n GioIconsModule,\n} from '@gravitee/ui-particles-angular';\n\nimport { GioPolicyStudioFlowFormDialogResult } from '../gio-ps-flow-form-dialog-result.model';\nimport { ConditionSelector, HttpMethod, HttpMethods, HttpSelector } from '../../../models';\nimport { FlowVM } from '../../../policy-studio/gio-policy-studio.model';\n\nexport type GioPolicyStudioFlowProxyFormDialogData = {\n flow?: FlowVM;\n};\n\ntype HttpMethodVM = HttpMethod | 'ALL';\n\nconst METHODS_AUTOCOMPLETE: HttpMethodVM[] = ['ALL', ...HttpMethods];\n\n@Component({\n imports: [\n ReactiveFormsModule,\n MatButtonModule,\n MatDialogModule,\n MatFormFieldModule,\n MatSelectModule,\n MatInputModule,\n MatSlideToggleModule,\n GioFormSlideToggleModule,\n GioBannerModule,\n GioIconsModule,\n GioFormTagsInputModule,\n GioElAssistantComponent,\n ],\n selector: 'gio-ps-flow-proxy-form-dialog',\n templateUrl: './gio-ps-flow-proxy-form-dialog.component.html',\n styleUrls: ['./gio-ps-flow-proxy-form-dialog.component.scss'],\n})\nexport class GioPolicyStudioFlowProxyFormDialogComponent {\n public flowFormGroup?: UntypedFormGroup;\n\n public existingFlow?: FlowVM;\n public mode: 'create' | 'edit' = 'create';\n public methods = METHODS_AUTOCOMPLETE;\n\n constructor(\n public dialogRef: MatDialogRef<GioPolicyStudioFlowProxyFormDialogComponent, GioPolicyStudioFlowFormDialogResult>,\n @Inject(MAT_DIALOG_DATA) flowDialogData: GioPolicyStudioFlowProxyFormDialogData,\n ) {\n this.existingFlow = cloneDeep(flowDialogData?.flow);\n this.mode = this.existingFlow ? 'edit' : 'create';\n\n const httpSelector = flowDialogData?.flow?.selectors?.find(s => s.type === 'HTTP') as HttpSelector;\n const conditionSelector = flowDialogData?.flow?.selectors?.find(s => s.type === 'CONDITION') as ConditionSelector;\n\n this.flowFormGroup = new UntypedFormGroup({\n name: new UntypedFormControl(flowDialogData?.flow?.name ?? ''),\n pathOperator: new UntypedFormControl(httpSelector?.pathOperator ?? 'EQUALS'),\n path: new UntypedFormControl(sanitizePathFormValue(httpSelector?.path)),\n methods: new UntypedFormControl(sanitizeMethodFormValue(httpSelector?.methods)),\n condition: new UntypedFormControl(conditionSelector?.condition ?? ''),\n });\n }\n\n public onSubmit(): void {\n const httpSelectorToSave: HttpSelector = {\n type: 'HTTP',\n path: sanitizePath(this.flowFormGroup?.get('path')?.value),\n pathOperator: this.flowFormGroup?.get('pathOperator')?.value,\n methods: sanitizeMethods(this.flowFormGroup?.get('methods')?.value),\n };\n\n const conditionValue: string = this.flowFormGroup?.get('condition')?.value;\n const conditionSelectorToSave: ConditionSelector | undefined = conditionValue\n ? {\n type: 'CONDITION',\n condition: conditionValue,\n }\n : undefined;\n\n const flowToSave: FlowVM = {\n // New id for new flow\n _id: uniqueId('flow_'),\n // If existing flow, keep root props\n ...this.existingFlow,\n // Mark as changed\n _hasChanged: true,\n // Add changes\n name: this.flowFormGroup?.get('name')?.value,\n selectors: conditionSelectorToSave ? [httpSelectorToSave, conditionSelectorToSave] : [httpSelectorToSave],\n enabled: this.existingFlow ? this.existingFlow.enabled : true,\n };\n\n this.dialogRef.close({\n ...flowToSave,\n });\n }\n\n public tagValidationHook(tag: string, validationCb: (shouldAddTag: boolean) => void) {\n validationCb(METHODS_AUTOCOMPLETE.map(m => `${m}`).includes(tag.toUpperCase()));\n }\n}\n\nconst sanitizeMethods: (value: HttpMethodVM[]) => HttpMethod[] = (value?: HttpMethodVM[]) => {\n if (!value || value.find(m => m === 'ALL')) return [];\n return value as HttpMethod[];\n};\n\nconst sanitizeMethodFormValue: (methods?: HttpMethod[]) => HttpMethodVM[] = (methods?: HttpMethod[]) => {\n if (!methods || methods.length === 0) return ['ALL'];\n return methods;\n};\n\nexport const sanitizePath = (path: string) => {\n if (!path || !path.startsWith('/')) {\n return `/${path}`;\n }\n return path;\n};\n\nconst sanitizePathFormValue = (path: string | undefined) => {\n if (path && path.startsWith('/')) {\n return path.substring(1);\n }\n return path ?? '';\n};\n","<!--\n\n Copyright (C) 2025 The Gravitee team (http://gravitee.io)\n \n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n \n http://www.apache.org/licenses/LICENSE-2.0\n \n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n\n-->\n<h2 mat-dialog-title class=\"title\">\n {{ mode === 'create' ? 'Create a new flow' : 'Edit flow' }}\n\n <button class=\"title__closeBtn\" mat-icon-button aria-label=\"Close dialog\" [mat-dialog-close]=\"false\">\n <mat-icon svgIcon=\"gio:cancel\"></mat-icon>\n </button>\n</h2>\n\n@if (flowFormGroup) {\n <mat-dialog-content class=\"content\" [formGroup]=\"flowFormGroup\">\n <p>\n Flows allow you to apply different policies per HTTP path and/or method. For example you can reroute calls based on the URL specified.\n </p>\n <div class=\"content__row\">\n <mat-form-field>\n <mat-label>Flow name</mat-label>\n <input matInput formControlName=\"name\" cdkFocusInitial />\n <mat-hint>Names will be automatically generated with path and method if left blank</mat-hint>\n </mat-form-field>\n </div>\n <div class=\"content__row\">\n <mat-form-field>\n <mat-label>Operator</mat-label>\n <mat-select formControlName=\"pathOperator\">\n <mat-option value=\"EQUALS\">Equals</mat-option>\n <mat-option value=\"STARTS_WITH\">Starts with</mat-option>\n </mat-select>\n <mat-hint>Path operator</mat-hint>\n </mat-form-field>\n <mat-form-field>\n <mat-label>Path</mat-label>\n <span matTextPrefix>/&nbsp;</span>\n <input matInput formControlName=\"path\" />\n <mat-hint>Path</mat-hint>\n </mat-form-field>\n </div>\n <div class=\"content__row\">\n <mat-form-field>\n <mat-label>Methods for your flow</mat-label>\n <gio-form-tags-input\n formControlName=\"methods\"\n [autocompleteOptions]=\"methods\"\n [tagValidationHook]=\"tagValidationHook\"\n ></gio-form-tags-input>\n </mat-form-field>\n </div>\n <div class=\"content__row\">\n <mat-form-field>\n <mat-label>Condition</mat-label>\n <input matInput formControlName=\"condition\" />\n <mat-hint>Condition to execute the flow, supports Expression Language</mat-hint>\n <gio-el-assistant matSuffix />\n </mat-form-field>\n </div>\n </mat-dialog-content>\n}\n\n<mat-dialog-actions class=\"actions\" align=\"end\">\n <button class=\"actions__cancelBtn\" mat-button [mat-dialog-close]=\"false\">Cancel</button>\n <button class=\"actions__saveBtn\" color=\"primary\" mat-flat-button role=\"dialog\" (click)=\"onSubmit()\">\n {{ mode === 'create' ? 'Create' : 'Save' }}\n </button>\n</mat-dialog-actions>\n","/*\n * Copyright (C) 2015 The Gravitee team (http://gravitee.io)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { Component, Inject } from '@angular/core';\nimport { MatDialogRef, MAT_DIALOG_DATA, MatDialogModule } from '@angular/material/dialog';\nimport { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms';\nimport { capitalize, cloneDeep, isEmpty, trim, uniqueId } from 'lodash';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\nimport {\n GioBannerModule,\n GioElAssistantComponent,\n GioFormSlideToggleModule,\n GioFormTagsInputModule,\n GioIconsModule,\n} from '@gravitee/ui-particles-angular';\n\nimport { GioPolicyStudioFlowFormDialogResult } from '../gio-ps-flow-form-dialog-result.model';\nimport { FlowVM } from '../../../policy-studio/gio-policy-studio.model';\nimport { ConditionSelector, McpSelector } from '../../../models';\n\nexport type GioPolicyStudioFlowMcpFormDialogData = {\n flow?: FlowVM;\n parentGroupName?: string;\n};\n\nconst MCP_METHODS: {\n groupLabel: string;\n groupOptions: { value: string; label: string }[];\n}[] = [\n {\n groupLabel: 'Lifecycle Methods',\n groupOptions: [\n { value: 'initialize', label: 'initialize' },\n { value: 'notifications/initialized', label: 'notifications/initialized' },\n { value: 'ping', label: 'ping' },\n { value: 'notifications/progress', label: 'notifications/progress' },\n { value: 'completion/complete', label: 'completion/complete' },\n ],\n },\n {\n groupLabel: 'Tool Methods',\n groupOptions: [\n { value: 'tools/list', label: 'tools/list' },\n { value: 'tools/call', label: 'tools/call' },\n { value: 'notifications/tools/list_changed', label: 'notifications/tools/list_changed' },\n ],\n },\n {\n groupLabel: 'Resources Methods',\n groupOptions: [\n { value: 'resources/list', label: 'resources/list' },\n { value: 'resources/read', label: 'resources/read' },\n { value: 'notifications/resources/list_changed', label: 'notifications/resources/list_changed' },\n { value: 'notifications/resources/updated', label: 'notifications/resources/updated' },\n { value: 'resources/templates/list', label: 'resources/templates/list' },\n { value: 'resources/subscribe', label: 'resources/subscribe' },\n { value: 'resources/unsubscribe', label: 'resources/unsubscribe' },\n ],\n },\n {\n groupLabel: 'Prompt Methods',\n groupOptions: [\n { value: 'prompts/list', label: 'prompts/list' },\n { value: 'prompts/get', label: 'prompts/get' },\n { value: 'notifications/prompts/list_changed', label: 'notifications/prompts/list_changed' },\n ],\n },\n {\n groupLabel: 'Logging Methods',\n groupOptions: [\n { value: 'logging/setLevel', label: 'logging/setLevel' },\n { value: 'notifications/message', label: 'notifications/message' },\n ],\n },\n {\n groupLabel: 'Roots Methods',\n groupOptions: [\n { value: 'roots/list', label: 'roots/list' },\n { value: 'notifications/roots/list_changed', label: 'notifications/roots/list_changed' },\n ],\n },\n {\n groupLabel: 'Sampling Methods',\n groupOptions: [{ value: 'sampling/createMessage', label: 'sampling/createMessage' }],\n },\n {\n groupLabel: 'Elicitation Methods',\n groupOptions: [{ value: 'elicitation/create', label: 'elicitation/create' }],\n },\n];\n\n@Component({\n imports: [\n ReactiveFormsModule,\n MatButtonModule,\n MatDialogModule,\n MatFormFieldModule,\n MatSelectModule,\n MatInputModule,\n MatSlideToggleModule,\n GioFormSlideToggleModule,\n GioBannerModule,\n GioIconsModule,\n GioFormTagsInputModule,\n GioElAssistantComponent,\n ],\n selector: 'gio-ps-flow-mcp-form-dialog',\n templateUrl: './gio-ps-flow-mcp-form-dialog.component.html',\n styleUrls: ['./gio-ps-flow-mcp-form-dialog.component.scss'],\n})\nexport class GioPolicyStudioFlowMcpFormDialogComponent {\n public flowFormGroup?: FormGroup<{\n name: FormControl<string | null>;\n mcpMethods: FormControl<string[] | null>;\n condition: FormControl<string | null>;\n }>;\n\n public existingFlow?: FlowVM;\n public mode: 'create' | 'edit' = 'create';\n public methods = MCP_METHODS;\n\n private defaultFlowName;\n\n constructor(\n public dialogRef: MatDialogRef<GioPolicyStudioFlowMcpFormDialogComponent, GioPolicyStudioFlowFormDialogResult>,\n @Inject(MAT_DIALOG_DATA) flowDialogData: GioPolicyStudioFlowMcpFormDialogData,\n ) {\n this.existingFlow = cloneDeep(flowDialogData?.flow);\n this.mode = this.existingFlow ? 'edit' : 'create';\n\n const mcpSelector = flowDialogData?.flow?.selectors?.find(s => s.type === 'MCP') as McpSelector;\n const conditionSelector = flowDialogData?.flow?.selectors?.find(s => s.type === 'CONDITION') as ConditionSelector;\n\n this.flowFormGroup = new FormGroup({\n name: new FormControl(flowDialogData?.flow?.name ?? ''),\n mcpMethods: new FormControl(mcpSelector?.methods ?? []),\n condition: new FormControl(conditionSelector?.condition ?? ''),\n });\n\n this.defaultFlowName = capitalize(flowDialogData.parentGroupName) + ' flow';\n }\n\n public onSubmit(): void {\n const mcpSelectorToSave: McpSelector = {\n type: 'MCP',\n methods: this.flowFormGroup?.get('mcpMethods')?.value ?? undefined,\n };\n\n const conditionValue = this.flowFormGroup?.get('condition')?.value ?? undefined;\n const conditionSelectorToSave: ConditionSelector | undefined = conditionValue\n ? {\n type: 'CONDITION',\n condition: conditionValue,\n }\n : undefined;\n\n const flowToSave: FlowVM = {\n // New id for new flow\n _id: uniqueId('flow_'),\n // If existing flow, keep root props\n ...this.existingFlow,\n // Mark as changed\n _hasChanged: true,\n // Add changes\n name: this.getFlowName(),\n enabled: this.existingFlow ? this.existingFlow.enabled : true,\n selectors: conditionSelectorToSave ? [mcpSelectorToSave, conditionSelectorToSave] : [mcpSelectorToSave],\n };\n\n this.dialogRef.close({\n ...flowToSave,\n });\n }\n\n private getFlowName(): string {\n const inputName = trim(this.flowFormGroup?.get('name')?.value ?? '');\n return isEmpty(inputName) ? this.defaultFlowName : inputName;\n }\n\n public tagValidationHook(tag: string, validationCb: (shouldAddTag: boolean) => void) {\n validationCb(\n MCP_METHODS.flatMap(group => group.groupOptions.map(m => m.value))\n .map(m => `${m}`)\n .includes(tag),\n );\n }\n}\n","<!--\n\n Copyright (C) 2025 The Gravitee team (http://gravitee.io)\n \n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n \n http://www.apache.org/licenses/LICENSE-2.0\n \n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n\n-->\n<h2 mat-dialog-title class=\"title\">\n {{ mode === 'create' ? 'Create a new flow' : 'Edit flow' }}\n\n <button class=\"title__closeBtn\" mat-icon-button aria-label=\"Close dialog\" [mat-dialog-close]=\"false\">\n <mat-icon svgIcon=\"gio:cancel\"></mat-icon>\n </button>\n</h2>\n\n@if (flowFormGroup) {\n <mat-dialog-content class=\"content\" [formGroup]=\"flowFormGroup\">\n <p>Flow allow you to apply different policies.</p>\n <div class=\"content__row\">\n <mat-form-field class=\"content__row__fullWidth\">\n <mat-label>Flow name</mat-label>\n <input matInput formControlName=\"name\" cdkFocusInitial />\n <mat-hint>Names will be automatically generated if left blank</mat-hint>\n </mat-form-field>\n </div>\n\n <div class=\"content__row\">\n <mat-form-field class=\"content__row__fullWidth\">\n <mat-label>MCP Methods for your flow</mat-label>\n <gio-form-tags-input\n formControlName=\"mcpMethods\"\n [autocompleteOptions]=\"methods\"\n [tagValidationHook]=\"tagValidationHook\"\n ></gio-form-tags-input>\n <mat-hint>If no method is specified, the flow will match all MCP Methods</mat-hint>\n </mat-form-field>\n </div>\n <div class=\"content__row\">\n <mat-form-field class=\"content__row__fullWidth\">\n <mat-label>Condition</mat-label>\n <input matInput formControlName=\"condition\" />\n <mat-hint>Condition to execute the flow, supports Expression Language</mat-hint>\n <gio-el-assistant matSuffix />\n </mat-form-field>\n </div>\n </mat-dialog-content>\n}\n\n<mat-dialog-actions class=\"actions\" align=\"end\">\n <button class=\"actions__cancelBtn\" mat-button [mat-dialog-close]=\"false\">Cancel</button>\n <button class=\"actions__saveBtn\" color=\"primary\" mat-flat-button role=\"dialog\" (click)=\"onSubmit()\">\n {{ mode === 'create' ? 'Create' : 'Save' }}\n </button>\n</mat-dialog-actions>\n","/*\n * Copyright (C) 2015 The Gravitee team (http://gravitee.io)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { Component, Inject } from '@angular/core';\nimport { MatDialogRef, MAT_DIALOG_DATA, MatDialogModule } from '@angular/material/dialog';\nimport { ReactiveFormsModule, UntypedFormControl, UntypedFormGroup } from '@angular/forms';\nimport { cloneDeep, uniqueId } from 'lodash';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\nimport {\n GioBannerModule,\n GioElAssistantComponent,\n GioFormSlideToggleModule,\n GioFormTagsInputModule,\n GioIconsModule,\n} from '@gravitee/ui-particles-angular';\n\nimport { GioPolicyStudioFlowFormDialogResult } from '../gio-ps-flow-form-dialog-result.model';\nimport { ConditionSelector, HttpMethod, HttpMethods, HttpSelector } from '../../../models';\nimport { FlowVM } from '../../../policy-studio/gio-policy-studio.model';\n\nexport type GioPolicyStudioFlowLlmFormDialogData = {\n flow?: FlowVM;\n};\n\ntype HttpMethodVM = HttpMethod | 'ALL';\n\nconst METHODS_AUTOCOMPLETE: HttpMethodVM[] = ['ALL', ...HttpMethods];\n\n@Component({\n imports: [\n ReactiveFormsModule,\n MatButtonModule,\n MatDialogModule,\n MatFormFieldModule,\n MatSelectModule,\n MatInputModule,\n MatSlideToggleModule,\n GioFormSlideToggleModule,\n GioBannerModule,\n GioIconsModule,\n GioFormTagsInputModule,\n GioElAssistantComponent,\n ],\n selector: 'gio-ps-flow-llm-form-dialog',\n templateUrl: './gio-ps-flow-llm-form-dialog.component.html',\n styleUrls: ['./gio-ps-flow-llm-form-dialog.component.scss'],\n})\nexport class GioPolicyStudioFlowLlmFormDialogComponent {\n public flowFormGroup?: UntypedFormGroup;\n\n public existingFlow?: FlowVM;\n public mode: 'create' | 'edit' = 'create';\n public methods = METHODS_AUTOCOMPLETE;\n\n constructor(\n public dialogRef: MatDialogRef<GioPolicyStudioFlowLlmFormDialogComponent, GioPolicyStudioFlowFormDialogResult>,\n @Inject(MAT_DIALOG_DATA) flowDialogData: GioPolicyStudioFlowLlmFormDialogData,\n ) {\n this.existingFlow = cloneDeep(flowDialogData?.flow);\n this.mode = this.existingFlow ? 'edit' : 'create';\n\n const httpSelector = flowDialogData?.flow?.selectors?.find(s => s.type === 'HTTP') as HttpSelector;\n const conditionSelector = flowDialogData?.flow?.selectors?.find(s => s.type === 'CONDITION') as ConditionSelector;\n this.flowFormGroup = new UntypedFormGroup({\n name: new UntypedFormControl(flowDialogData?.flow?.name ?? ''),\n pathOperator: new UntypedFormControl(httpSelector?.pathOperator ?? 'EQUALS'),\n path: new UntypedFormControl(sanitizePathFormValue(httpSelector?.path)),\n methods: new UntypedFormControl(sanitizeMethodFormValue(httpSelector?.methods)),\n condition: new UntypedFormControl(conditionSelector?.condition ?? ''),\n });\n }\n\n public onSubmit(): void {\n const httpSelectorToSave: HttpSelector = {\n type: 'HTTP',\n path: sanitizePath(this.flowFormGroup?.get('path')?.value),\n pathOperator: this.flowFormGroup?.get('pathOperator')?.value,\n methods: sanitizeMethods(this.flowFormGroup?.get('methods')?.value),\n };\n const conditionValue: string = this.flowFormGroup?.get('condition')?.value;\n const conditionSelectorToSave: ConditionSelector | undefined = conditionValue\n ? {\n type: 'CONDITION',\n condition: conditionValue,\n }\n : undefined;\n\n const flowToSave: FlowVM = {\n // New id for new flow\n _id: uniqueId('flow_'),\n // If existing flow, keep root props\n ...this.existingFlow,\n // Mark as changed\n _hasChanged: true,\n // Add changes\n name: this.flowFormGroup?.get('name')?.value,\n selectors: conditionSelectorToSave ? [httpSelectorToSave, conditionSelectorToSave] : [httpSelectorToSave],\n enabled: this.existingFlow ? this.existingFlow.enabled : true,\n };\n\n this.dialogRef.close({\n ...flowToSave,\n });\n }\n\n public tagValidationHook(tag: string, validationCb: (shouldAddTag: boolean) => void) {\n validationCb(METHODS_AUTOCOMPLETE.map(m => `${m}`).includes(tag.toUpperCase()));\n }\n}\n\nconst sanitizeMethods: (value: HttpMethodVM[]) => HttpMethod[] = (value?: HttpMethodVM[]) => {\n if (!value || value.find(m => m === 'ALL')) return [];\n return value as HttpMethod[];\n};\n\nconst sanitizeMethodFormValue: (methods?: HttpMethod[]) => HttpMethodVM[] = (methods?: HttpMethod[]) => {\n if (!methods || methods.length === 0) return ['ALL'];\n return methods;\n};\n\nexport const sanitizePath = (path: string) => {\n if (!path || !path.startsWith('/')) {\n return `/${path}`;\n }\n return path;\n};\n\nconst sanitizePathFormValue = (path: string | undefined) => {\n if (path && path.startsWith('/')) {\n return path.substring(1);\n }\n return path ?? '';\n};\n","<!--\n\n Copyright (C) 2025 The Gravitee team (http://gravitee.io)\n \n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n \n http://www.apache.org/licenses/LICENSE-2.0\n \n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n\n-->\n<h2 mat-dialog-title class=\"title\">\n {{ mode === 'create' ? 'Create a new flow' : 'Edit flow' }}\n\n <button class=\"title__closeBtn\" mat-icon-button aria-label=\"Close dialog\" [mat-dialog-close]=\"false\">\n <mat-icon svgIcon=\"gio:cancel\"></mat-icon>\n </button>\n</h2>\n\n@if (flowFormGroup) {\n <mat-dialog-content class=\"content\" [formGroup]=\"flowFormGroup\">\n <p>\n Flows allow you to apply different policies per HTTP path and/or method. For example you can reroute calls based on the URL specified.\n </p>\n <div class=\"content__row\">\n <mat-form-field>\n <mat-label>Flow name</mat-label>\n <input matInput formControlName=\"name\" cdkFocusInitial />\n <mat-hint>Names will be automatically generated with path and method if left blank</mat-hint>\n </mat-form-field>\n </div>\n <div class=\"content__row\">\n <mat-form-field>\n <mat-label>Operator</mat-label>\n <mat-select formControlName=\"pathOperator\">\n <mat-option value=\"EQUALS\">Equals</mat-option>\n <mat-option value=\"STARTS_WITH\">Starts with</mat-option>\n </mat-select>\n <mat-hint>Path operator</mat-hint>\n </mat-form-field>\n <mat-form-field>\n <mat-label>Path</mat-label>\n <span matTextPrefix>/&nbsp;</span>\n <input matInput formControlName=\"path\" />\n <mat-hint>Path</mat-hint>\n </mat-form-field>\n </div>\n <div class=\"content__row\">\n <mat-form-field>\n <mat-label>Methods for your flow</mat-label>\n <gio-form-tags-input\n formControlName=\"methods\"\n [autocompleteOptions]=\"methods\"\n [tagValidationHook]=\"tagValidationHook\"\n ></gio-form-tags-input>\n </mat-form-field>\n </div>\n <div class=\"content__row\">\n <mat-form-field>\n <mat-label>Condition</mat-label>\n <input matInput formControlName=\"condition\" />\n <mat-hint>Condition to execute the flow, supports Expression Language</mat-hint>\n <gio-el-assistant matSuffix />\n </mat-form-field>\n </div>\n </mat-dialog-content>\n}\n\n<mat-dialog-actions class=\"actions\" align=\"end\">\n <button class=\"actions__cancelBtn\" mat-button [mat-dialog-close]=\"false\">Cancel</button>\n <button class=\"actions__saveBtn\" color=\"primary\" mat-flat-button role=\"dialog\" (click)=\"onSubmit()\">\n {{ mode === 'create' ? 'Create' : 'Save' }}\n </button>\n</mat-dialog-actions>\n","/*\n * Copyright (C) 2022 The Gravitee team (http://gravitee.io)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { CdkDrag, CdkDragDrop, CdkDropList, DragDropModule, moveItemInArray, transferArrayItem } from '@angular/cdk/drag-drop';\nimport { CommonModule } from '@angular/common';\nimport { Component, EventEmitter, Input, OnChanges, OnDestroy, Output, SimpleChanges } from '@angular/core';\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatDialog } from '@angular/material/dialog';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { GIO_DIALOG_WIDTH, GioIconsModule, GioLoaderModule } from '@gravitee/ui-particles-angular';\nimport { cloneDeep, flatten, isEmpty, uniqueId } from 'lodash';\nimport { debounceTime, distinctUntilChanged, startWith, takeUntil, tap } from 'rxjs/operators';\nimport { Subject } from 'rxjs';\n\nimport {\n ApiType,\n ChannelSelector,\n ConditionSelector,\n ConnectorInfo,\n FlowExecution,\n HttpSelector,\n McpSelector,\n Operation,\n} from '../../models';\nimport { Selector } from '../../models/flow/Selector';\nimport { FlowGroupVM, FlowVM } from '../../policy-studio/gio-policy-studio.model';\nimport {\n GioPolicyStudioFlowExecutionFormDialogComponent,\n GioPolicyStudioFlowExecutionFormDialogData,\n} from '../flow-execution-form-dialog/gio-ps-flow-execution-form-dialog.component';\nimport {\n GioPolicyStudioFlowMessageFormDialogComponent,\n GioPolicyStudioFlowMessageFormDialogData,\n} from '../flow-form-dialog/flow-message-form-dialog/gio-ps-flow-message-form-dialog.component';\nimport {\n GioPolicyStudioFlowNativeFormDialogComponent,\n GioPolicyStudioFlowNativeFormDialogData,\n} from '../flow-form-dialog/flow-native-form-dialog/gio-ps-flow-native-form-dialog.component';\nimport {\n GioPolicyStudioFlowProxyFormDialogComponent,\n GioPolicyStudioFlowProxyFormDialogData,\n} from '../flow-form-dialog/flow-proxy-form-dialog/gio-ps-flow-proxy-form-dialog.component';\nimport { GioPolicyStudioFlowFormDialogResult } from '../flow-form-dialog/gio-ps-flow-form-dialog-result.model';\nimport {\n GioPolicyStudioFlowMcpFormDialogComponent,\n GioPolicyStudioFlowMcpFormDialogData,\n} from '../flow-form-dialog/flow-mcp-form-dialog/gio-ps-flow-mcp-form-dialog.component';\nimport {\n GioPolicyStudioFlowLlmFormDialogComponent,\n GioPolicyStudioFlowLlmFormDialogData,\n} from '../flow-form-dialog/flow-llm-form-dialog/gio-ps-flow-llm-form-dialog.component';\n\ninterface FlowGroupMenuVM extends FlowGroupVM {\n flows: FlowMenuVM[];\n}\n\ninterface FlowMenuVM extends FlowVM {\n selected: boolean;\n mouseOver: boolean;\n badges: {\n label: string;\n class: string;\n }[];\n pathOrChannelLabel?: string;\n hasCondition: boolean;\n}\n\n@Component({\n imports: [\n GioIconsModule,\n MatTooltipModule,\n MatButtonModule,\n CommonModule,\n GioLoaderModule,\n MatMenuModule,\n DragDropModule,\n MatInputModule,\n ReactiveFormsModule,\n MatFormFieldModule,\n ],\n selector: 'gio-ps-flows-menu',\n templateUrl: './gio-ps-flows-menu.component.html',\n styleUrls: ['./gio-ps-flows-menu.component.scss'],\n})\nexport class GioPolicyStudioFlowsMenuComponent implements OnChanges, OnDestroy {\n @Input()\n public readOnly = false;\n\n @Input()\n public loading = false;\n\n @Input()\n public apiType!: ApiType;\n\n @Input()\n public flowExecution!: FlowExecution;\n\n @Input()\n public flowsGroups: FlowGroupVM[] = [];\n\n @Input()\n public selectedFlowId?: string = undefined;\n\n @Input()\n public entrypoints: ConnectorInfo[] = [];\n\n @Input()\n public entrypointsInfo: ConnectorInfo[] = [];\n\n @Output()\n public selectedFlowIdChange = new EventEmitter<string>();\n\n @Output()\n public flowsGroupsChange = new EventEmitter<FlowGroupVM[]>();\n\n @Output()\n public flowExecutionChange = new EventEmitter<FlowExecution>();\n\n @Output()\n public deleteFlow = new EventEmitter<FlowVM>();\n\n public flowGroupMenuItems: FlowGroupMenuVM[] = [];\n\n public searchControl = new FormControl<string>('');\n\n public filteredFlowGroupMenuItems: FlowGroupMenuVM[] = [];\n\n private unsubscribe$ = new Subject<void>();\n\n public enterPredicate: (drag: CdkDrag<FlowGroupMenuVM>, drop: CdkDropList<FlowGroupMenuVM>) => boolean = () => true;\n\n constructor(private readonly matDialog: MatDialog) {\n this.searchControl.valueChanges\n .pipe(\n debounceTime(300),\n startWith(''),\n distinctUntilChanged(),\n tap(searchTerm => {\n this.applyFilter(searchTerm || '');\n }),\n takeUntil(this.unsubscribe$),\n )\n .subscribe();\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (changes.flowsGroups || changes.selectedFlowId) {\n this.flowGroupMenuItems = cloneDeep(this.flowsGroups).map(flowGroup => {\n return {\n ...flowGroup,\n flows: flowGroup.flows.map(flow => {\n const badges: FlowMenuVM['badges'] = [];\n let pathOrChannelLabel: string | undefined = undefined;\n let hasCondition = false;\n\n // MESSAGE API - CHANNEL\n const channelSelector = flow.selectors?.find(s => s.type === 'CHANNEL') as ChannelSelector;\n if (channelSelector) {\n const operationToBadge: Record<Operation, string> = {\n PUBLISH: 'PUB',\n SUBSCRIBE: 'SUB',\n };\n // If no operations are selected, all operations are valid\n const operationBadges = (\n !channelSelector.operations || isEmpty(channelSelector.operations)\n ? (['PUBLISH', 'SUBSCRIBE'] as const)\n : channelSelector.operations\n )\n .map(operation => ({\n label: operationToBadge[operation],\n class: 'gio-badge-neutral',\n }))\n .sort((a, b) => a.label.localeCompare(b.label));\n operationBadges && badges.push(...operationBadges);\n pathOrChannelLabel = `${channelSelector.channel}${channelSelector.channelOperator === 'STARTS_WITH' ? '**' : ''}`;\n }\n\n // HTTP API - HTTP\n const httpSelector = flow.selectors?.find(s => s.type === 'HTTP') as HttpSelector;\n if (httpSelector) {\n // Keep only 2 first http methods and add +X badge if there are more\n const httpMethodsToKeep = httpSelector.methods?.slice(0, 2);\n const httpMethodsLength = httpSelector.methods?.length ?? 0;\n httpMethodsToKeep &&\n badges.push(...httpMethodsToKeep.map(method => ({ label: method, class: `gio-method-badge-${method.toLowerCase()}` })));\n if (httpMethodsLength && httpMethodsLength > 2) {\n badges?.push({\n label: `+${httpMethodsLength - 2}`,\n class: 'gio-badge-neutral',\n });\n }\n if (httpMethodsLength === 0) {\n badges?.push({\n label: 'ALL',\n class: 'gio-badge-neutral',\n });\n }\n\n pathOrChannelLabel = `${httpSelector.path}${httpSelector.pathOperator === 'STARTS_WITH' ? '/**' : ''}`;\n }\n\n // MCP Proxy\n const mcpSelector = flow.selectors?.find(s => s.type === 'MCP') as McpSelector;\n if (mcpSelector) {\n if (mcpSelector.methods && mcpSelector.methods.length > 0) {\n // Keep only 2 first methods and add +X badge if there are more\n const methodsToKeep = mcpSelector.methods.slice(0, 2);\n const methodsLength = mcpSelector.methods.length;\n badges.push(...methodsToKeep.map(method => ({ label: method, class: `gio-badge-neutral` })));\n if (methodsLength > 2) {\n badges.push({\n label: `+${methodsLength - 2}`,\n class: 'gio-badge-neutral',\n });\n }\n } else {\n badges.push({\n label: 'All Methods',\n class: 'gio-badge-neutral',\n });\n }\n pathOrChannelLabel = '';\n }\n\n const conditionSelector = flow.selectors?.find(s => s.type === 'CONDITION') as ConditionSelector;\n if (conditionSelector && conditionSelector.condition) {\n hasCondition = true;\n }\n\n return {\n ...flow,\n selected: this.selectedFlowId === flow._id,\n mouseOver: false,\n badges,\n pathOrChannelLabel,\n hasCondition,\n };\n }),\n };\n });\n\n this.enterPredicate = (_drag: CdkDrag<FlowGroupMenuVM>, drop: CdkDropList<FlowGroupMenuVM>) => {\n if (this.apiType === 'NATIVE') {\n return isEmpty(drop.data.flows);\n }\n return true;\n };\n }\n this.applyFilter(this.searchControl.value || '');\n }\n\n public ngOnDestroy(): void {\n this.unsubscribe$.next();\n this.unsubscribe$.complete();\n }\n\n private applyFilter(searchTerm: string): void {\n const term = searchTerm.toLowerCase();\n if (!term) {\n this.filteredFlowGroupMenuItems = [...this.flowGroupMenuItems];\n return;\n }\n this.filteredFlowGroupMenuItems = this.flowGroupMenuItems\n .map(group => {\n const filteredFlows = group?.flows?.filter(flow => {\n return (\n (group.name && group.name?.toLowerCase().includes(term)) ||\n (flow.name && flow.name?.toLowerCase().includes(term)) ||\n (flow.pathOrChannelLabel && flow.pathOrChannelLabel?.toLowerCase().includes(term)) ||\n (flow.selectors && flow.selectors?.some(selector => this.selectorMatches(selector, term))) ||\n (flow.badges && flow.badges?.some(badges => badges.label?.toLowerCase().includes(term)))\n );\n });\n return { ...group, flows: filteredFlows };\n })\n .filter(group => group.flows.length > 0);\n }\n\n public resetSearchTerm() {\n this.searchControl.setValue('');\n this.applyFilter('');\n }\n\n private selectorMatches(selector: Selector, term: string): boolean {\n const type = selector.type;\n\n if (type === 'HTTP') {\n const httpSelector = selector as HttpSelector;\n if (httpSelector.path?.toLowerCase().includes(term)) return true;\n if (httpSelector.methods?.some(method => method.toLowerCase().includes(term))) {\n return true;\n }\n }\n\n if (type === 'CHANNEL') {\n const channelSelector = selector as ChannelSelector;\n if (channelSelector.channel?.toLowerCase().includes(term)) return true;\n if (channelSelector.operations?.some(op => op.toLowerCase().includes(term))) {\n return true;\n }\n }\n return false;\n }\n\n public selectFlow(groupId: string, flowId: string): void {\n const flow = this.flowsGroups.find(fg => fg._id === groupId)?.flows.find(f => f._id === flowId);\n if (flow) {\n this.selectedFlowIdChange.emit(flow._id);\n }\n }\n\n public onAddFlow(flowGroup: FlowGroupVM): void {\n let dialogResult;\n\n switch (this.apiType) {\n case 'MESSAGE':\n dialogResult = this.matDialog\n .open<\n GioPolicyStudioFlowMessageFormDialogComponent,\n GioPolicyStudioFlowMessageFormDialogData,\n GioPolicyStudioFlowFormDialogResult\n >(GioPolicyStudioFlowMessageFormDialogComponent, {\n data: {\n flow: undefined,\n entrypoints: this.entrypoints,\n },\n role: 'alertdialog',\n id: 'gioPsFlowFormDialog',\n width: GIO_DIALOG_WIDTH.MEDIUM,\n })\n .afterClosed();\n break;\n case 'PROXY':\n dialogResult = this.matDialog\n .open<GioPolicyStudioFlowProxyFormDialogComponent, GioPolicyStudioFlowProxyFormDialogData, GioPolicyStudioFlowFormDialogResult>(\n GioPolicyStudioFlowProxyFormDialogComponent,\n {\n data: {\n flow: undefined,\n },\n role: 'alertdialog',\n id: 'gioPsFlowFormDialog',\n width: GIO_DIALOG_WIDTH.MEDIUM,\n },\n )\n .afterClosed();\n break;\n case 'NATIVE':\n dialogResult = this.matDialog\n .open<GioPolicyStudioFlowNativeFormDialogComponent, GioPolicyStudioFlowNativeFormDialogData, GioPolicyStudioFlowFormDialogResult>(\n GioPolicyStudioFlowNativeFormDialogComponent,\n {\n data: {\n parentGroupName: flowGroup.name,\n flow: undefined,\n },\n role: 'alertdialog',\n id: 'gioPsFlowFormDialog',\n width: GIO_DIALOG_WIDTH.MEDIUM,\n },\n )\n .afterClosed();\n break;\n case 'MCP_PROXY':\n dialogResult = this.matDialog\n .open<GioPolicyStudioFlowMcpFormDialogComponent, GioPolicyStudioFlowMcpFormDialogData, GioPolicyStudioFlowFormDialogResult>(\n GioPolicyStudioFlowMcpFormDialogComponent,\n {\n data: {\n parentGroupName: flowGroup.name,\n flow: undefined,\n },\n role: 'alertdialog',\n id: 'gioPsFlowFormDialog',\n width: GIO_DIALOG_WIDTH.MEDIUM,\n },\n )\n .afterClosed();\n break;\n case 'LLM_PROXY':\n dialogResult = this.matDialog\n .open<GioPolicyStudioFlowLlmFormDialogComponent, GioPolicyStudioFlowLlmFormDialogData, GioPolicyStudioFlowFormDialogResult>(\n GioPolicyStudioFlowLlmFormDialogComponent,\n {\n data: {\n flow: undefined,\n },\n role: 'alertdialog',\n id: 'gioPsFlowFormDialog',\n width: GIO_DIALOG_WIDTH.MEDIUM,\n },\n )\n .afterClosed();\n break;\n default:\n throw new Error(`Unsupported API type ${this.apiType}`);\n }\n\n dialogResult\n .pipe(\n tap(createdOrEdited => {\n if (!createdOrEdited) {\n return;\n }\n const editedFlowsGroups = cloneDeep(this.flowsGroups);\n\n const flowsGroupToEdit = editedFlowsGroups.find(fg => fg._id === flowGroup._id);\n if (!flowsGroupToEdit) {\n throw new Error(`Flow group ${flowGroup._id} not found`);\n }\n flowsGroupToEdit.flows.push(createdOrEdited);\n\n this.flowsGroupsChange.emit(editedFlowsGroups);\n this.selectedFlowIdChange.emit(createdOrEdited._id);\n }),\n )\n .subscribe();\n }\n\n public onConfigureExecution(flowExecution: FlowExecution): void {\n const dialogResult = this.matDialog\n .open<GioPolicyStudioFlowExecutionFormDialogComponent, GioPolicyStudioFlowExecutionFormDialogData, FlowExecution | undefined>(\n GioPolicyStudioFlowExecutionFormDialogComponent,\n {\n data: {\n flowExecution,\n readOnly: this.readOnly,\n },\n role: 'alertdialog',\n id: 'gioPsFlowExecutionFormDialog',\n width: GIO_DIALOG_WIDTH.MEDIUM,\n },\n )\n .afterClosed();\n\n dialogResult\n .pipe(\n tap(edited => {\n if (!edited) {\n return;\n }\n this.flowExecutionChange.emit(edited);\n }),\n )\n .subscribe();\n }\n\n public onDisableFlow(flowId: string): void {\n const flowToEdit = flatten(this.flowsGroups.map(flowGroup => flowGroup.flows)).find(f => f._id === flowId);\n if (!flowToEdit) {\n throw new Error(`Flow ${flowId} not found`);\n }\n flowToEdit.enabled = !flowToEdit.enabled;\n flowToEdit._hasChanged = true;\n this.flowsGroupsChange.emit(this.flowsGroups);\n }\n\n public onDropFlow(event: CdkDragDrop<FlowGroupMenuVM>): void {\n if (event.previousContainer === event.container) {\n // Move inside the same group\n const flowsGroupToEdit = this.flowsGroups.find(fg => fg._id === event.container.data._id);\n if (!flowsGroupToEdit) {\n throw new Error(`Flow group ${event.container.data._id} not found`);\n }\n moveItemInArray(flowsGroupToEdit.flows, event.previousIndex, event.currentIndex);\n this.flowsGroupsChange.emit(this.flowsGroups);\n } else {\n // Move from a group to another\n const previousFlowsGroupToEdit = this.flowsGroups.find(fg => fg._id === event.previousContainer.data._id);\n const flowsGroupToEdit = this.flowsGroups.find(fg => fg._id === event.container.data._id);\n if (!previousFlowsGroupToEdit || !flowsGroupToEdit) {\n throw new Error(`Flow group ${event.previousContainer.data._id} or ${event.container.data._id} not found`);\n }\n transferArrayItem(previousFlowsGroupToEdit.flows, flowsGroupToEdit.flows, event.previousIndex, event.currentIndex);\n\n flowsGroupToEdit.flows[event.currentIndex]._hasChanged = true;\n flowsGroupToEdit.flows[event.currentIndex]._parentFlowGroupName = flowsGroupToEdit.name;\n this.flowsGroupsChange.emit(this.flowsGroups);\n }\n }\n\n public onEditFlow(flowId: string): void {\n const flowToEdit = flatten(this.flowsGroups.map(flowGroup => flowGroup.flows)).find(f => f._id === flowId);\n\n let dialogResult;\n\n switch (this.apiType) {\n case 'MESSAGE':\n dialogResult = this.matDialog\n .open<\n GioPolicyStudioFlowMessageFormDialogComponent,\n GioPolicyStudioFlowMessageFormDialogData,\n GioPolicyStudioFlowFormDialogResult\n >(GioPolicyStudioFlowMessageFormDialogComponent, {\n data: {\n flow: flowToEdit,\n entrypoints: this.entrypointsInfo ?? [],\n },\n role: 'alertdialog',\n id: 'gioPsFlowMessageFormDialog',\n width: GIO_DIALOG_WIDTH.MEDIUM,\n })\n .afterClosed();\n break;\n case 'PROXY':\n dialogResult = this.matDialog\n .open<GioPolicyStudioFlowProxyFormDialogComponent, GioPolicyStudioFlowProxyFormDialogData, GioPolicyStudioFlowFormDialogResult>(\n GioPolicyStudioFlowProxyFormDialogComponent,\n {\n data: {\n flow: flowToEdit,\n },\n role: 'alertdialog',\n id: 'gioPsFlowProxyFormDialog',\n width: GIO_DIALOG_WIDTH.MEDIUM,\n },\n )\n .afterClosed();\n break;\n case 'NATIVE':\n dialogResult = this.matDialog\n .open<GioPolicyStudioFlowNativeFormDialogComponent, GioPolicyStudioFlowNativeFormDialogData, GioPolicyStudioFlowFormDialogResult>(\n GioPolicyStudioFlowNativeFormDialogComponent,\n {\n data: {\n parentGroupName: flowToEdit!._parentFlowGroupName,\n flow: flowToEdit,\n },\n role: 'alertdialog',\n id: 'gioPsFlowNativeFormDialog',\n width: GIO_DIALOG_WIDTH.MEDIUM,\n },\n )\n .afterClosed();\n break;\n case 'MCP_PROXY':\n dialogResult = this.matDialog\n .open<GioPolicyStudioFlowMcpFormDialogComponent, GioPolicyStudioFlowMcpFormDialogData, GioPolicyStudioFlowFormDialogResult>(\n GioPolicyStudioFlowMcpFormDialogComponent,\n {\n data: {\n parentGroupName: flowToEdit!._parentFlowGroupName,\n flow: flowToEdit,\n },\n role: 'alertdialog',\n id: 'gioPsFlowFormDialog',\n width: GIO_DIALOG_WIDTH.MEDIUM,\n },\n )\n .afterClosed();\n break;\n case 'LLM_PROXY':\n dialogResult = this.matDialog\n .open<GioPolicyStudioFlowLlmFormDialogComponent, GioPolicyStudioFlowLlmFormDialogData, GioPolicyStudioFlowFormDialogResult>(\n GioPolicyStudioFlowLlmFormDialogComponent,\n {\n data: {\n flow: flowToEdit,\n },\n role: 'alertdialog',\n id: 'gioPsFlowFormDialog',\n width: GIO_DIALOG_WIDTH.MEDIUM,\n },\n )\n .afterClosed();\n break;\n default:\n throw new Error(`Unsupported API type ${this.apiType}`);\n }\n\n dialogResult\n .pipe(\n tap(editedFlow => {\n if (!editedFlow) {\n return;\n }\n this.flowsGroups = this.flowsGroups.map(fg => ({\n ...fg,\n flows: fg.flows.map(f => (f._id === editedFlow._id ? editedFlow : f)),\n }));\n this.flowsGroupsChange.emit(this.flowsGroups);\n }),\n )\n .subscribe();\n }\n\n public onDeleteFlow(flowId: string): void {\n const flowToEdit = flatten(this.flowsGroups.map(flowGroup => flowGroup.flows)).find(f => f._id === flowId);\n this.deleteFlow.emit(flowToEdit);\n }\n\n public onDuplicateFlow(flowGroupId: string, flowId: string): void {\n const flowsGroupToEdit = this.flowsGroups.find(fg => fg._id === flowGroupId);\n if (!flowsGroupToEdit) {\n throw new Error(`Flow group ${flowGroupId} not found`);\n }\n const flowToDuplicate = flowsGroupToEdit.flows.find(f => f._id === flowId);\n if (!flowToDuplicate) {\n throw new Error(`Flow ${flowId} not found`);\n }\n const duplicatedFlow = cloneDeep(flowToDuplicate);\n delete duplicatedFlow.id;\n\n duplicatedFlow._id = uniqueId('flow_');\n duplicatedFlow.name = `${duplicatedFlow.name} - Copy`;\n duplicatedFlow._hasChanged = true;\n const index = flowsGroupToEdit.flows.indexOf(flowToDuplicate);\n flowsGroupToEdit.flows.splice(index + 1, 0, duplicatedFlow);\n this.flowsGroupsChange.emit(this.flowsGroups);\n this.selectedFlowIdChange.emit(duplicatedFlow._id);\n }\n}\n","<!--\n\n Copyright (C) 2025 The Gravitee team (http://gravitee.io)\n \n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n \n http://www.apache.org/licenses/LICENSE-2.0\n \n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n\n-->\n\n<div class=\"header\">\n <div class=\"header__label\">\n Flows <mat-icon svgIcon=\"gio:info\" matTooltip=\"Flows allow you to apply different policies on your API event phases\"></mat-icon>\n </div>\n @if (apiType !== 'NATIVE' && apiType !== 'MCP_PROXY') {\n <div class=\"header__configBtn\">\n <button class=\"header__configBtn_edit\" mat-stroked-button [disabled]=\"loading\" (click)=\"onConfigureExecution(flowExecution)\">\n <mat-icon [svgIcon]=\"readOnly ? 'gio:eye-empty' : 'gio:settings'\"></mat-icon>\n </button>\n </div>\n }\n</div>\n@if (!loading) {\n <div class=\"searchBar\">\n <mat-form-field class=\"searchBar__input\">\n <mat-icon matPrefix>search</mat-icon>\n <input matInput placeholder=\"Search by name, path, or group...\" [formControl]=\"searchControl\" />\n @if (searchControl.value) {\n <button matSuffix mat-icon-button aria-label=\"Clear\" (click)=\"resetSearchTerm()\">\n <mat-icon>close</mat-icon>\n </button>\n }\n </mat-form-field>\n </div>\n}\n\n@if (!loading) {\n <div class=\"list\" cdkDropListGroup>\n @for (flowsGroup of filteredFlowGroupMenuItems; track flowsGroup._id) {\n <div\n class=\"list__flowsGroup\"\n cdkDropList\n [cdkDropListData]=\"flowsGroup\"\n [cdkDropListEnterPredicate]=\"enterPredicate\"\n (cdkDropListDropped)=\"onDropFlow($event)\"\n >\n <div class=\"list__flowsGroup__header\">\n <div class=\"list__flowsGroup__header__label\">\n <span>{{ (flowsGroup._isPlan ? 'Plan: ' : '') + flowsGroup.name }}</span>\n </div>\n <div class=\"list__flowsGroup__header__addBtn\">\n @if (apiType === 'NATIVE') {\n <span [matTooltipDisabled]=\"flowsGroup.flows.length < 1\" matTooltip=\"Only one flow is allowed for a native API\">\n <button mat-button [disabled]=\"readOnly || flowsGroup.flows.length > 0\" (click)=\"onAddFlow(flowsGroup)\">\n <mat-icon svgIcon=\"gio:plus\" matTooltip=\"New flow\"></mat-icon>\n </button>\n </span>\n } @else {\n <button mat-button [disabled]=\"readOnly\" (click)=\"onAddFlow(flowsGroup)\">\n <mat-icon svgIcon=\"gio:plus\" matTooltip=\"New flow\"></mat-icon>\n </button>\n }\n </div>\n </div>\n <div class=\"list__flowsGroup__flows\">\n @if (flowsGroup.flows.length > 0) {\n @for (flow of flowsGroup.flows; track flow._id) {\n <div\n class=\"list__flowsGroup__flows__flow\"\n [class.selected]=\"flow.selected\"\n [class.disabled]=\"!flow.enabled\"\n (click)=\"selectFlow(flowsGroup._id, flow._id)\"\n (mouseout)=\"flow.mouseOver = false\"\n (mouseover)=\"flow.mouseOver = true\"\n cdkDrag\n >\n <div class=\"list__flowsGroup__flows__flow__left\">\n @if (flow.name) {\n <div class=\"list__flowsGroup__flows__flow__left__name\" [attr.title]=\"flow.name\">\n {{ flow.name }}\n </div>\n }\n @if (apiType !== 'NATIVE') {\n <div class=\"list__flowsGroup__flows__flow__left__infos\">\n <div class=\"list__flowsGroup__flows__flow__left__infos__badges\">\n @for (badge of flow.badges; track badge.label) {\n <span class=\"list__flowsGroup__flows__flow__left__infos__badges__badge\" [ngClass]=\"badge.class\">{{\n badge.label\n }}</span>\n }\n </div>\n <div class=\"list__flowsGroup__flows__flow__left__infos__pathOrChannelLabel\">\n @if (flow.pathOrChannelLabel !== undefined) {\n <span [attr.title]=\"flow.pathOrChannelLabel\" [innerHTML]=\"flow.pathOrChannelLabel\"></span>\n } @else {\n <em>Empty</em>\n }\n </div>\n @if (flow.hasCondition) {\n <span class=\"list__flowsGroup__flows__flow__left__infos__conditionBadge gio-badge-neutral\" matTooltip=\"Conditioned\"\n ><mat-icon svgIcon=\"gio:if\"></mat-icon\n ></span>\n }\n </div>\n }\n </div>\n <div class=\"list__flowsGroup__flows__flow__right\">\n <button\n class=\"list__flowsGroup__flows__flow__right__name__menu\"\n mat-button\n [disabled]=\"readOnly\"\n [matMenuTriggerFor]=\"flowMenu\"\n (click)=\"$event.stopPropagation()\"\n >\n <mat-icon svgIcon=\"gio:more-vertical\"></mat-icon>\n </button>\n <mat-menu #flowMenu=\"matMenu\">\n <button [disabled]=\"readOnly\" mat-menu-item (click)=\"onDisableFlow(flow._id)\">\n <mat-icon [svgIcon]=\"flow.enabled ? 'gio:prohibition' : 'gio:check-circled-outline'\"></mat-icon>\n <span>{{ flow.enabled ? 'Disable' : 'Enable' }}</span>\n </button>\n <button mat-menu-item (click)=\"onEditFlow(flow._id)\"><mat-icon svgIcon=\"gio:edit-pencil\"></mat-icon> Edit</button>\n <button mat-menu-item (click)=\"onDeleteFlow(flow._id)\"><mat-icon svgIcon=\"gio:trash\"></mat-icon> Delete</button>\n @if (apiType !== 'NATIVE') {\n <button mat-menu-item (click)=\"onDuplicateFlow(flowsGroup._id, flow._id)\">\n <mat-icon svgIcon=\"gio:copy\"></mat-icon> Duplicate\n </button>\n }\n </mat-menu>\n </div>\n </div>\n }\n } @else {\n <div class=\"list__flowsGroup__no-flows\">No flows yet</div>\n }\n </div>\n </div>\n }\n </div>\n} @else {\n <div class=\"loadingList\">\n <gio-loader></gio-loader>\n </div>\n}\n","/*\n * Copyright (C) 2022 The Gravitee team (http://gravitee.io)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Injectable } from '@angular/core';\nimport { BehaviorSubject, Observable } from 'rxjs';\nimport { tap } from 'rxjs/operators';\n\nimport { Policy, PolicyDocumentationFetcher, PolicySchemaFetcher } from '../models';\n\nimport { PolicyDocumentation } from './gio-policy-studio.model';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class GioPolicyStudioService {\n private schemasCache: Record<string, BehaviorSubject<unknown>> = {};\n private documentationsCache: Record<string, BehaviorSubject<PolicyDocumentation | string>> = {};\n\n private policySchemaFetcher?: PolicySchemaFetcher;\n private policyDocumentationFetcher?: PolicyDocumentationFetcher;\n\n public setPolicySchemaFetcher(policySchemaFetcher: PolicySchemaFetcher) {\n this.policySchemaFetcher = policySchemaFetcher;\n }\n\n public setPolicyDocumentationFetcher(policyDocumentationFetcher: PolicyDocumentationFetcher) {\n this.policyDocumentationFetcher = policyDocumentationFetcher;\n }\n\n /**\n * Call the policy schema fetcher to get the schema for the given policy. If the\n * schema has already been fetched, it will be returned from the cache.\n *\n * @param policy to get the schema for\n * @returns the schema for the policy\n */\n public getPolicySchema(policy: Policy): Observable<unknown> {\n if (!this.policySchemaFetcher) throw new Error('PolicySchemaFetcher not defined!');\n\n if (this.schemasCache[policy.id]) {\n return this.schemasCache[policy.id].asObservable();\n }\n\n return this.policySchemaFetcher(policy).pipe(\n tap(schema => {\n this.schemasCache[policy.id] = new BehaviorSubject(schema);\n }),\n );\n }\n\n /**\n * Call the policy documentation fetcher to get the documentation for the given policy. If the\n * documentation has already been fetched, it will be returned from the cache.\n *\n * @param policy to get the documentation for\n * @returns the documentation for the policy\n */\n public getPolicyDocumentation(policy: Policy): Observable<PolicyDocumentation | string> {\n if (!this.policyDocumentationFetcher) throw new Error('PolicyDocumentationFetcher not defined!');\n\n if (this.documentationsCache[policy.id]) {\n return this.documentationsCache[policy.id].asObservable();\n }\n\n return this.policyDocumentationFetcher(policy).pipe(\n tap(documentation => {\n this.documentationsCache[policy.id] = new BehaviorSubject(documentation);\n }),\n );\n }\n}\n","/*\n * Copyright (C) 2022 The Gravitee team (http://gravitee.io)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { Component, EventEmitter, Input, OnChanges, OnDestroy, OnInit, Output, SimpleChanges } from '@angular/core';\nimport { FormControl, ReactiveFormsModule, UntypedFormControl, UntypedFormGroup } from '@angular/forms';\nimport { catchError, map, takeUntil } from 'rxjs/operators';\nimport { Observable, of, Subject } from 'rxjs';\nimport {\n GioBannerModule,\n GioElAssistantComponent,\n GioElPromptComponent,\n GioFormJsonSchemaComponent,\n GioFormJsonSchemaModule,\n GioJsonSchema,\n GioJsonSchemaContext,\n GioLoaderModule,\n GioPopoverComponent,\n PopoverTriggerDirective,\n} from '@gravitee/ui-particles-angular';\nimport { isEmpty } from 'lodash';\nimport { CommonModule } from '@angular/common';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { GioAsciidoctorModule } from '@gravitee/ui-particles-angular/gio-asciidoctor';\nimport { MarkdownComponent } from 'ngx-markdown';\nimport { MatIcon } from '@angular/material/icon';\n\nimport { ApiType, FlowPhase, GenericPolicy, isPolicy, isSharedPolicyGroupPolicy, Step, toPolicy } from '../../models';\nimport { GioPolicyStudioService } from '../../policy-studio/gio-policy-studio.service';\nimport { PolicyDocumentation } from '../../policy-studio/gio-policy-studio.model';\n\n@Component({\n imports: [\n CommonModule,\n ReactiveFormsModule,\n MatInputModule,\n MatFormFieldModule,\n GioFormJsonSchemaModule,\n GioAsciidoctorModule,\n GioLoaderModule,\n GioBannerModule,\n MarkdownComponent,\n GioElPromptComponent,\n GioPopoverComponent,\n MatIcon,\n PopoverTriggerDirective,\n GioElAssistantComponent,\n ],\n selector: 'gio-ps-step-form',\n templateUrl: './gio-ps-step-form.component.html',\n styleUrls: ['./gio-ps-step-form.component.scss'],\n})\nexport class GioPolicyStudioStepFormComponent implements OnChanges, OnInit, OnDestroy {\n private readonly noDocumentationAvailable: PolicyDocumentation = { content: 'No documentation available.', language: 'ASCIIDOC' };\n\n @Input()\n public readOnly = false;\n\n @Input()\n public step?: Step;\n\n @Input({ required: true })\n public flowPhase!: FlowPhase;\n\n @Input({ required: true })\n public apiType!: ApiType;\n\n @Input()\n public genericPolicy!: GenericPolicy;\n\n @Output()\n public stepChange = new EventEmitter<Step>();\n\n @Output()\n public isValid = new EventEmitter<boolean>();\n\n public policySchema$?: Observable<GioJsonSchema | null | undefined>;\n public policyDocumentation$?: Observable<PolicyDocumentation>;\n public infoBanner?: string;\n\n public stepForm?: UntypedFormGroup;\n\n public context?: GioJsonSchemaContext;\n\n private unsubscribe$ = new Subject<void>();\n public isMessage = false;\n constructor(private readonly policyStudioService: GioPolicyStudioService) {}\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (changes.genericPolicy) {\n if (isPolicy(this.genericPolicy)) {\n this.policySchema$ = this.policyStudioService.getPolicySchema(toPolicy(this.genericPolicy)).pipe(\n map(schema => {\n if (GioFormJsonSchemaComponent.isDisplayable(schema as GioJsonSchema)) {\n return schema as GioJsonSchema;\n }\n return {};\n }),\n );\n\n this.policyDocumentation$ = this.policyStudioService.getPolicyDocumentation(toPolicy(this.genericPolicy)).pipe(\n map(doc => {\n if (typeof doc === 'string') {\n return { content: doc, language: 'ASCIIDOC' } as PolicyDocumentation;\n }\n return isEmpty(doc?.content) ? this.noDocumentationAvailable : doc;\n }),\n catchError(() => of(this.noDocumentationAvailable)),\n );\n }\n if (isSharedPolicyGroupPolicy(this.genericPolicy)) {\n this.policySchema$ = of({});\n this.policyDocumentation$ = of({ content: ' ', language: 'ASCIIDOC' });\n this.infoBanner = this.genericPolicy.prerequisiteMessage;\n }\n }\n if (changes.flowPhase) {\n this.context = {\n flowPhase: this.flowPhase,\n apiType: this.apiType,\n };\n this.isMessage = this.flowPhase === 'PUBLISH' || this.flowPhase === 'SUBSCRIBE';\n }\n }\n\n public ngOnInit(): void {\n this.initStepForm();\n }\n\n public ngOnDestroy(): void {\n this.unsubscribe$.next();\n this.unsubscribe$.complete();\n }\n\n private initStepForm(): void {\n this.stepForm = new UntypedFormGroup({\n description: new UntypedFormControl({ value: this.step?.description, disabled: this.readOnly }),\n condition: new UntypedFormControl({ value: this.step?.condition, disabled: this.readOnly }),\n messageCondition: new FormControl<string | undefined>({ value: this.step?.messageCondition, disabled: this.readOnly }),\n configuration: new UntypedFormControl({ value: this.step?.configuration, disabled: this.readOnly }),\n });\n\n this.stepForm.valueChanges.pipe(takeUntil(this.unsubscribe$)).subscribe(() => {\n this.emitStepChange();\n });\n\n this.stepForm.statusChanges.pipe(takeUntil(this.unsubscribe$)).subscribe(valid => {\n this.isValid.emit(valid === 'VALID');\n });\n }\n\n public onJsonSchemaReady(isReady: boolean) {\n // When ready and if the form is valid, emit\n if (isReady) {\n this.emitStepChange();\n\n if (this.stepForm?.status === 'VALID') {\n this.isValid.emit(true);\n }\n }\n }\n\n public emitStepChange(): void {\n let configuration = this.stepForm?.get('configuration')?.value;\n\n if (isSharedPolicyGroupPolicy(this.genericPolicy)) {\n configuration = { sharedPolicyGroupId: this.genericPolicy.sharedPolicyGroupId };\n }\n\n this.stepChange.emit({\n ...this.step,\n description: this.stepForm?.get('description')?.value,\n condition: this.stepForm?.get('condition')?.value ?? undefined,\n messageCondition: this.stepForm?.get('messageCondition')?.value ?? undefined,\n configuration,\n });\n }\n}\n","<!--\n\n Copyright (C) 2025 The Gravitee team (http://gravitee.io)\n \n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n \n http://www.apache.org/licenses/LICENSE-2.0\n \n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n\n-->\n\n<div class=\"settings\">\n <div class=\"settings__header\">Settings</div>\n\n <div class=\"settings__content\">\n @if (stepForm && (policySchema$ | async); as policySchema) {\n <ng-container [formGroup]=\"stepForm\">\n <mat-form-field>\n <mat-label>Description</mat-label>\n <textarea matInput formControlName=\"description\" cdkFocusInitial></textarea>\n <mat-hint>Describe how your policy works.</mat-hint>\n </mat-form-field>\n <mat-form-field>\n <mat-label>Trigger condition</mat-label>\n <input matInput formControlName=\"condition\" />\n <mat-hint>The condition to execute this policy. Supports Expression Language.</mat-hint>\n <gio-el-assistant matSuffix />\n </mat-form-field>\n @if (isMessage) {\n <mat-form-field>\n <mat-label>Message trigger condition</mat-label>\n <input matInput formControlName=\"messageCondition\" />\n <mat-hint>The condition to execute this policy on message. Supports Expression Language.</mat-hint>\n <gio-el-assistant matSuffix />\n </mat-form-field>\n }\n @if (policySchema) {\n <gio-form-json-schema\n [jsonSchema]=\"$any(policySchema)\"\n [context]=\"context\"\n (ready)=\"onJsonSchemaReady($event)\"\n formControlName=\"configuration\"\n ></gio-form-json-schema>\n }\n </ng-container>\n } @else {\n <gio-loader></gio-loader>\n }\n </div>\n</div>\n\n<div class=\"documentation\">\n <div class=\"documentation__header\">Documentation</div>\n\n <div class=\"documentation__content\">\n @if (infoBanner) {\n <gio-banner-warning>\n Prerequisite message\n <span gioBannerBody>{{ infoBanner }}</span>\n </gio-banner-warning>\n }\n @if (policyDocumentation$ | async; as policyDocumentation) {\n @switch (policyDocumentation.language) {\n @case ('ASCIIDOC') {\n <gio-asciidoctor [content]=\"policyDocumentation.content\"></gio-asciidoctor>\n }\n @case ('MARKDOWN') {\n <markdown class=\"documentation__content__markdown\" [data]=\"policyDocumentation.content\"></markdown>\n }\n }\n } @else {\n <gio-loader></gio-loader>\n }\n </div>\n</div>\n","/*\n * Copyright (C) 2015 The Gravitee team (http://gravitee.io)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { Component, Inject, OnDestroy } from '@angular/core';\nimport { MatDialogRef, MAT_DIALOG_DATA, MatDialogModule } from '@angular/material/dialog';\nimport { toLower, uniq } from 'lodash';\nimport { ReactiveFormsModule, UntypedFormControl, UntypedFormGroup } from '@angular/forms';\nimport { startWith, takeUntil } from 'rxjs/operators';\nimport { Subject } from 'rxjs';\nimport { CommonModule } from '@angular/common';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { GioBannerModule, GioIconsModule } from '@gravitee/ui-particles-angular';\nimport { MatChipsModule } from '@angular/material/chips';\nimport { MatTooltip } from '@angular/material/tooltip';\n\nimport { ApiType, FlowPhase, GenericPolicy, isPolicy, isSharedPolicyGroupPolicy, Step } from '../../models';\nimport { GioPolicyStudioStepFormComponent } from '../step-form/gio-ps-step-form.component';\n\nexport type GioPolicyStudioPoliciesCatalogDialogData = {\n genericPolicies: GenericPolicy[];\n flowPhase: FlowPhase;\n apiType: ApiType;\n trialUrl?: string;\n};\n\nexport type GioPolicyStudioPoliciesCatalogDialogResult = undefined | Step;\n\nconst flowPhaseLabels: Record<FlowPhase, string> = {\n REQUEST: 'Request',\n RESPONSE: 'Response',\n PUBLISH: 'Publish',\n SUBSCRIBE: 'Subscribe',\n CONNECT: 'Connect',\n INTERACT: 'Interact',\n};\n\ntype PolicyVM = {\n _id: string;\n genericPolicy: GenericPolicy;\n name: string;\n description?: string;\n icon?: string;\n deployed?: boolean;\n category: string;\n};\n\n@Component({\n imports: [\n CommonModule,\n ReactiveFormsModule,\n MatButtonModule,\n MatDialogModule,\n MatFormFieldModule,\n MatChipsModule,\n MatInputModule,\n GioBannerModule,\n GioIconsModule,\n GioPolicyStudioStepFormComponent,\n MatTooltip,\n ],\n selector: 'gio-ps-policies-catalog-dialog',\n templateUrl: './gio-ps-policies-catalog-dialog.component.html',\n styleUrls: ['./gio-ps-policies-catalog-dialog.component.scss'],\n})\nexport class GioPolicyStudioPoliciesCatalogDialogComponent implements OnDestroy {\n public policies: PolicyVM[] = [];\n\n public flowPhase!: FlowPhase;\n public flowPhaseLabel!: string;\n\n public selectedPolicy?: GenericPolicy;\n\n public stepToAdd?: Step;\n\n public categories: string[] = [];\n\n public isValid = false;\n\n public filtersForm = new UntypedFormGroup({\n categories: new UntypedFormControl([]),\n search: new UntypedFormControl(''),\n });\n\n private allPolicies: PolicyVM[] = [];\n\n private unsubscribe$ = new Subject<void>();\n\n public isUnlicensed = false;\n\n public trialUrl?: string;\n\n public apiType: ApiType;\n\n constructor(\n public dialogRef: MatDialogRef<GioPolicyStudioPoliciesCatalogDialogComponent, GioPolicyStudioPoliciesCatalogDialogResult>,\n @Inject(MAT_DIALOG_DATA) flowDialogData: GioPolicyStudioPoliciesCatalogDialogData,\n ) {\n this.flowPhase = flowDialogData.flowPhase;\n this.apiType = flowDialogData.apiType;\n this.flowPhaseLabel = flowPhaseLabels[flowDialogData.flowPhase];\n\n this.allPolicies = flowDialogData.genericPolicies\n .filter(genericPolicy => {\n if (isPolicy(genericPolicy)) {\n switch (flowDialogData.apiType) {\n case 'PROXY':\n return genericPolicy.flowPhaseCompatibility?.HTTP_PROXY?.includes(flowDialogData.flowPhase);\n case 'MESSAGE':\n return genericPolicy.flowPhaseCompatibility?.HTTP_MESSAGE?.includes(flowDialogData.flowPhase);\n case 'NATIVE':\n return genericPolicy.flowPhaseCompatibility?.NATIVE_KAFKA?.includes(flowDialogData.flowPhase);\n case 'MCP_PROXY':\n return genericPolicy.flowPhaseCompatibility?.MCP_PROXY?.includes(flowDialogData.flowPhase);\n case 'LLM_PROXY':\n return genericPolicy.flowPhaseCompatibility?.LLM_PROXY?.includes(flowDialogData.flowPhase);\n default:\n throw new Error('Unknown API type');\n }\n }\n if (isSharedPolicyGroupPolicy(genericPolicy)) {\n return genericPolicy.apiType === flowDialogData.apiType && genericPolicy.phase === flowDialogData.flowPhase;\n }\n // Not expected\n throw new Error('Unknown policy type');\n })\n .map(policy => ({\n category: policy.category ?? 'Others',\n _id: policy._id,\n name: policy.name,\n description: policy.description,\n icon: isPolicy(policy) ? policy.icon : undefined,\n deployed: isPolicy(policy) ? policy.deployed : undefined,\n genericPolicy: policy,\n }));\n\n this.categories = uniq(this.allPolicies.map(policy => policy.category.toLowerCase())).sort((a, b) => a.localeCompare(b));\n const othersIndex = this.categories.indexOf('others');\n if (othersIndex !== -1) {\n this.categories.push(this.categories.splice(othersIndex, 1)[0]);\n }\n\n this.filtersForm.valueChanges\n .pipe(startWith(this.filtersForm.value), takeUntil(this.unsubscribe$))\n .subscribe(({ categories, search }: { categories?: string[]; search?: string }) => {\n const selectedCategories = categories && categories.length > 0 ? categories : this.categories;\n this.policies = this.allPolicies\n .filter(policy => {\n return selectedCategories.map(toLower).includes(toLower(policy.category));\n })\n .filter(policy => {\n return search ? toLower(policy.name + policy.description).includes(toLower(search)) : true;\n });\n });\n\n this.trialUrl = flowDialogData.trialUrl;\n }\n\n public ngOnDestroy(): void {\n this.unsubscribe$.next();\n this.unsubscribe$.complete();\n }\n\n public onSelectPolicy(policy: PolicyVM) {\n if (policy.deployed === false) {\n this.isUnlicensed = true;\n }\n this.selectedPolicy = policy.genericPolicy;\n }\n\n public onStepChange(step: Step) {\n this.stepToAdd = step;\n }\n\n public onIsValid(isValid: boolean) {\n this.isValid = isValid;\n }\n\n public onAddPolicy() {\n this.dialogRef.close({\n ...this.stepToAdd,\n name: this.selectedPolicy?.name,\n enabled: true,\n policy: this.selectedPolicy?.policyId,\n });\n }\n\n public onGoBack() {\n // Reset to initial value\n this.selectedPolicy = undefined;\n this.isValid = false;\n this.isUnlicensed = false;\n }\n}\n","<!--\n\n Copyright (C) 2025 The Gravitee team (http://gravitee.io)\n \n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n \n http://www.apache.org/licenses/LICENSE-2.0\n \n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n\n-->\n<h2 mat-dialog-title class=\"title\">\n @if (selectedPolicy) {\n <button class=\"title__goBackBtn\" mat-stroked-button (click)=\"onGoBack()\">\n <mat-icon svgIcon=\"gio:arrow-left\"></mat-icon>\n Go back\n </button>\n }\n Policies for <span class=\"title__phase\">{{ flowPhaseLabel }}</span> phase\n\n <button class=\"title__closeBtn\" mat-icon-button aria-label=\"Close dialog\" [mat-dialog-close]=\"\">\n <mat-icon svgIcon=\"gio:cancel\"></mat-icon>\n </button>\n</h2>\n\n<ng-container>\n @if (!selectedPolicy) {\n <mat-dialog-content class=\"policiesCatalog\">\n <div class=\"policiesCatalog__filters\" [formGroup]=\"filtersForm\">\n <mat-form-field class=\"policiesCatalog__filters__search\" appearance=\"outline\">\n <mat-label>Search</mat-label>\n <input matInput formControlName=\"search\" cdkFocusInitial />\n @if (filtersForm.get('search')?.value) {\n <button matIconSuffix mat-icon-button aria-label=\"Clear\" (click)=\"filtersForm.get('search')?.setValue('')\">\n <mat-icon svgIcon=\"gio:cancel\"></mat-icon>\n </button>\n }\n </mat-form-field>\n @if (categories.length > 1) {\n <mat-chip-listbox\n class=\"policiesCatalog__filters__categories\"\n aria-label=\"Categories selection\"\n multiple\n formControlName=\"categories\"\n >\n @for (category of categories; track category) {\n <mat-chip-option [selected]=\"category\" [value]=\"category\">{{ category | titlecase }} </mat-chip-option>\n }\n </mat-chip-listbox>\n }\n </div>\n @if (policies.length) {\n <div class=\"policiesCatalog__list\">\n @for (policy of policies; track policy) {\n <div class=\"policiesCatalog__list__policy\">\n <div class=\"policiesCatalog__list__policy__head\">\n <mat-icon class=\"policiesCatalog__list__policy__head__icon\" [svgIcon]=\"policy.icon ?? 'gio:puzzle'\"></mat-icon>\n @if (policy.name) {\n <span class=\"policiesCatalog__list__policy__head__name\">{{ policy.name }}</span>\n }\n @if (policy.genericPolicy.type === 'SHARED_POLICY_GROUP') {\n <span class=\"gio-badge-neutral policiesCatalog__list__policy__head__badge\" matTooltip=\"Shared Policy Group\">\n <mat-icon svgIcon=\"gio:users\"></mat-icon>\n </span>\n }\n </div>\n @if (policy.deployed === false) {\n <div class=\"policiesCatalog__list__policy__enterprise\">\n <mat-icon\n class=\"policiesCatalog__list__policy__enterprise__lock\"\n [svgIcon]=\"'gio:lock'\"\n matTooltip=\"This policy is only available for users with an enterprise license.\"\n ></mat-icon>\n </div>\n }\n @if (policy.description) {\n <div class=\"policiesCatalog__list__policy__description\">{{ policy.description }}</div>\n }\n <button class=\"policiesCatalog__list__policy__selectBtn\" mat-stroked-button role=\"dialog\" (click)=\"onSelectPolicy(policy)\">\n Select\n </button>\n </div>\n }\n </div>\n } @else {\n <div class=\"emptyPoliciesCatalog\">No policies available.</div>\n }\n </mat-dialog-content>\n }\n</ng-container>\n\n@if (selectedPolicy) {\n <mat-dialog-content class=\"policyForm\">\n @if (isUnlicensed) {\n <gio-banner type=\"error\" icon=\"gio:universe\">\n This policy is only available for users with an enterprise license.\n <span gioBannerBody>Request a license to upgrade your account and unlock this policy</span>\n <div gioBannerAction>\n @if (trialUrl) {\n <a mat-stroked-button [href]=\"trialUrl\" target=\"_blank\">Request upgrade</a>\n }\n </div>\n </gio-banner>\n }\n <div class=\"policyForm__info\">\n <div class=\"policyForm__info__head\">\n <mat-icon class=\"policyForm__info__head__icon\" [svgIcon]=\"selectedPolicy.icon ?? 'gio:puzzle'\"></mat-icon>\n @if (selectedPolicy.name) {\n <span class=\"policyForm__info__head__name\">{{ selectedPolicy.name }}</span>\n }\n @if (selectedPolicy.type === 'SHARED_POLICY_GROUP') {\n <span class=\"gio-badge-neutral policiesCatalog__list__policy__head__badge\">\n <mat-icon svgIcon=\"gio:users\"></mat-icon>&nbsp;Shared Policy Group\n </span>\n }\n </div>\n @if (selectedPolicy.description) {\n <div class=\"policyForm__info__description\">{{ selectedPolicy.description }}</div>\n }\n </div>\n <gio-ps-step-form\n [genericPolicy]=\"selectedPolicy\"\n [flowPhase]=\"flowPhase\"\n [apiType]=\"apiType\"\n (stepChange)=\"onStepChange($event)\"\n (isValid)=\"onIsValid($event)\"\n ></gio-ps-step-form>\n </mat-dialog-content>\n}\n\n<mat-dialog-actions class=\"actions\" align=\"end\">\n <button class=\"actions__cancelBtn\" mat-button [mat-dialog-close]=\"\">Cancel</button>\n @if (selectedPolicy) {\n <button\n class=\"actions__addBtn\"\n color=\"primary\"\n mat-flat-button\n role=\"dialog\"\n [disabled]=\"!isValid || isUnlicensed\"\n (click)=\"onAddPolicy()\"\n >\n Add policy\n </button>\n }\n</mat-dialog-actions>\n","/*\n * Copyright (C) 2015 The Gravitee team (http://gravitee.io)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { Component, Inject } from '@angular/core';\nimport { MatDialogRef, MAT_DIALOG_DATA, MatDialogModule } from '@angular/material/dialog';\nimport { GioIconsModule } from '@gravitee/ui-particles-angular';\nimport { MatButtonModule } from '@angular/material/button';\n\nimport { FlowPhase, Step, GenericPolicy, ApiType } from '../../models';\nimport { GioPolicyStudioStepFormComponent } from '../step-form/gio-ps-step-form.component';\n\nexport type GioPolicyStudioStepEditDialogData = {\n genericPolicy: GenericPolicy;\n step: Step;\n flowPhase: FlowPhase;\n apiType: ApiType;\n readOnly?: boolean;\n};\n\nexport type GioPolicyStudioStepEditDialogResult = undefined | Step;\n\n@Component({\n imports: [MatButtonModule, MatDialogModule, GioIconsModule, GioPolicyStudioStepFormComponent],\n selector: 'gio-ps-step-edit-dialog',\n templateUrl: './gio-ps-step-edit-dialog.component.html',\n styleUrls: ['./gio-ps-step-edit-dialog.component.scss'],\n})\nexport class GioPolicyStudioStepEditDialogComponent {\n public genericPolicy!: GenericPolicy;\n public step!: Step;\n public flowPhase!: FlowPhase;\n public apiType!: ApiType;\n\n public isValid = false;\n public readOnly = false;\n\n constructor(\n public dialogRef: MatDialogRef<GioPolicyStudioStepEditDialogComponent, GioPolicyStudioStepEditDialogResult>,\n @Inject(MAT_DIALOG_DATA) flowDialogData: GioPolicyStudioStepEditDialogData,\n ) {\n this.flowPhase = flowDialogData.flowPhase;\n this.apiType = flowDialogData.apiType;\n this.genericPolicy = flowDialogData.genericPolicy;\n this.step = flowDialogData.step;\n this.readOnly = Boolean(flowDialogData.readOnly);\n }\n\n public onSave(): void {\n this.dialogRef.close({\n ...this.step,\n });\n }\n}\n","<!--\n\n Copyright (C) 2025 The Gravitee team (http://gravitee.io)\n \n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n \n http://www.apache.org/licenses/LICENSE-2.0\n \n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n\n-->\n<h2 mat-dialog-title class=\"title\">\n <mat-icon class=\"title__icon\" [svgIcon]=\"genericPolicy.icon ?? 'gio:puzzle'\"></mat-icon>\n\n @if (step.name) {\n <span class=\"title__name\">\n {{ step.name }}\n @if (genericPolicy.type === 'SHARED_POLICY_GROUP') {\n <span class=\"gio-badge-neutral policiesCatalog__list__policy__head__badge\">\n <mat-icon svgIcon=\"gio:users\"></mat-icon>&nbsp;Shared Policy Group\n </span>\n }\n </span>\n }\n\n <button class=\"title__closeBtn\" mat-icon-button aria-label=\"Close dialog\" [mat-dialog-close]=\"\">\n <mat-icon svgIcon=\"gio:cancel\"></mat-icon>\n </button>\n\n <div class=\"title__description\">\n {{ genericPolicy.description }}\n </div>\n</h2>\n\n<mat-dialog-content class=\"content\">\n <gio-ps-step-form\n [readOnly]=\"readOnly\"\n [genericPolicy]=\"genericPolicy\"\n [flowPhase]=\"flowPhase\"\n [apiType]=\"apiType\"\n [(step)]=\"step\"\n (isValid)=\"isValid = $event\"\n ></gio-ps-step-form>\n</mat-dialog-content>\n\n<mat-dialog-actions class=\"actions\" align=\"end\">\n <button class=\"actions__cancelBtn\" mat-button [mat-dialog-close]=\"\">Cancel</button>\n <button class=\"actions__saveBtn\" color=\"primary\" mat-flat-button role=\"dialog\" (click)=\"onSave()\" [disabled]=\"!isValid\">Save</button>\n</mat-dialog-actions>\n","/*\n * Copyright (C) 2022 The Gravitee team (http://gravitee.io)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { Component, EventEmitter, Input, OnChanges, Output, SimpleChanges } from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { GIO_DIALOG_WIDTH, GioConfirmDialogComponent, GioConfirmDialogData, GioIconsModule } from '@gravitee/ui-particles-angular';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { get, isEmpty, isNil, has } from 'lodash';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\nimport {\n GioPolicyStudioStepEditDialogComponent,\n GioPolicyStudioStepEditDialogData,\n GioPolicyStudioStepEditDialogResult,\n} from '../step-edit-dialog/gio-ps-step-edit-dialog.component';\nimport { FlowPhase, isPolicy, isSharedPolicyGroupPolicy, Step, GenericPolicy, ApiType } from '../../models';\n\n@Component({\n imports: [GioIconsModule, MatButtonModule, MatMenuModule, MatTooltipModule],\n selector: 'gio-ps-flow-details-phase-step',\n templateUrl: './gio-ps-flow-details-phase-step.component.html',\n styleUrls: ['./gio-ps-flow-details-phase-step.component.scss'],\n})\nexport class GioPolicyStudioDetailsPhaseStepComponent implements OnChanges {\n @Input()\n public readOnly = false;\n\n @Input()\n public step!: Step;\n\n @Input()\n public genericPolicies: GenericPolicy[] = [];\n\n @Input({ required: true })\n public flowPhase!: FlowPhase;\n\n @Input({ required: true })\n public apiType!: ApiType;\n\n @Input()\n public disableMoveRight: boolean = false;\n\n @Input()\n public disableMoveLeft: boolean = false;\n\n @Output()\n public stepChange = new EventEmitter<Step>();\n\n @Output()\n public deleted = new EventEmitter<void>();\n\n @Output()\n public disabled = new EventEmitter<void>();\n\n @Output()\n public duplicated = new EventEmitter<void>();\n\n @Output()\n public movedRight = new EventEmitter<void>();\n\n @Output()\n public movedLeft = new EventEmitter<void>();\n\n protected genericPolicy?: GenericPolicy;\n protected policyNotFound: false | 'SHARED_POLICY_GROUP' | 'POLICY' = false;\n protected get getPrerequisiteMessage(): string | undefined {\n if (!this.genericPolicy || !isSharedPolicyGroupPolicy(this.genericPolicy) || isEmpty(this.genericPolicy.prerequisiteMessage)) {\n return;\n }\n return this.genericPolicy.prerequisiteMessage;\n }\n\n constructor(private readonly matDialog: MatDialog) {}\n\n public ngOnChanges(changes: SimpleChanges): void {\n if ((changes.policies || changes.step) && !isEmpty(this.genericPolicies) && !isNil(this.step.policy)) {\n this.genericPolicy = this.genericPolicies.find(policy => {\n if (isPolicy(policy)) {\n return policy.policyId === this.step.policy;\n }\n\n if (isSharedPolicyGroupPolicy(policy)) {\n return policy.sharedPolicyGroupId === get(this.step.configuration, 'sharedPolicyGroupId');\n }\n // Not expected\n throw new Error('Unknown policy type');\n });\n\n // if this.genericPolicy is not found, it means that the policy has been deleted or the shared policy group no longer exists (or deployed)\n if (!this.genericPolicy) {\n this.policyNotFound = has(this.step.configuration, 'sharedPolicyGroupId') ? 'SHARED_POLICY_GROUP' : 'POLICY';\n }\n }\n }\n\n public onEditOrView() {\n if (!this.genericPolicy || this.policyNotFound != false) {\n this.matDialog\n .open<GioConfirmDialogComponent, GioConfirmDialogData, boolean>(GioConfirmDialogComponent, {\n data: {\n title: `${this.policyNotFound === 'SHARED_POLICY_GROUP' ? 'Shared Policy Group' : 'Policy'} not found`,\n content: `This step is linked to a ${this.policyNotFound === 'SHARED_POLICY_GROUP' ? 'Shared Policy Group' : 'Policy'} that no longer exists.<br>\n${this.policyNotFound === 'SHARED_POLICY_GROUP' ? 'Note: The Gateway will ignore this step.' : 'Note: The Gateway will throw an error on deployment.'}\n`,\n confirmButton: 'OK',\n disableCancel: true,\n },\n role: 'alertdialog',\n id: 'gioPolicyNotFoundDialog',\n width: GIO_DIALOG_WIDTH.MEDIUM,\n })\n .afterClosed()\n .subscribe();\n return;\n }\n\n this.matDialog\n .open<GioPolicyStudioStepEditDialogComponent, GioPolicyStudioStepEditDialogData, GioPolicyStudioStepEditDialogResult>(\n GioPolicyStudioStepEditDialogComponent,\n {\n data: {\n readOnly: this.readOnly,\n genericPolicy: this.genericPolicy,\n step: this.step,\n flowPhase: this.flowPhase,\n apiType: this.apiType,\n },\n role: 'alertdialog',\n id: 'gioPolicyStudioPolicyFormDialog',\n width: GIO_DIALOG_WIDTH.LARGE,\n },\n )\n .afterClosed()\n .subscribe(stepToEdit => {\n if (!stepToEdit) {\n return;\n }\n\n this.stepChange.emit(stepToEdit);\n });\n }\n\n public onDisable() {\n this.disabled.emit();\n }\n\n public onDelete() {\n this.deleted.emit();\n }\n\n public onDuplicate() {\n this.duplicated.emit();\n }\n\n public onMoveRight() {\n this.movedRight.emit();\n }\n\n public onMoveLeft() {\n this.movedLeft.emit();\n }\n}\n","<!--\n\n Copyright (C) 2025 The Gravitee team (http://gravitee.io)\n \n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n \n http://www.apache.org/licenses/LICENSE-2.0\n \n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n\n-->\n\n<div class=\"info\">\n <div class=\"info__head\">\n <mat-icon class=\"info__head__icon\" [svgIcon]=\"genericPolicy?.icon ?? 'gio:puzzle'\"></mat-icon>\n\n @if (step.name) {\n <span class=\"info__head__name\">{{ step.name }}</span>\n }\n\n @if (genericPolicy?.type === 'SHARED_POLICY_GROUP') {\n <span class=\"gio-badge-neutral\" matTooltip=\"Shared Policy Group\">\n <mat-icon svgIcon=\"gio:users\"></mat-icon>\n </span>\n }\n @if (getPrerequisiteMessage) {\n <mat-icon class=\"info__head__info\" svgIcon=\"gio:info\" [matTooltip]=\"getPrerequisiteMessage\"></mat-icon>\n }\n @if (policyNotFound !== false) {\n <span\n class=\"gio-badge-error\"\n [matTooltip]=\"policyNotFound === 'SHARED_POLICY_GROUP' ? 'Shared Policy Group not found' : 'Policy not found'\"\n >\n @if (policyNotFound === 'SHARED_POLICY_GROUP') {\n <mat-icon svgIcon=\"gio:users\"></mat-icon>&nbsp;\n }\n <mat-icon svgIcon=\"gio:alert-circle\"></mat-icon>\n </span>\n }\n </div>\n\n @if (step.description) {\n <div class=\"info__description\">{{ step.description }}</div>\n }\n</div>\n\n<button class=\"menuBtn\" mat-icon-button [matMenuTriggerFor]=\"policyMenu\"><mat-icon svgIcon=\"gio:more-vertical\"></mat-icon></button>\n\n<mat-menu #policyMenu=\"matMenu\">\n <button mat-menu-item (click)=\"onEditOrView()\">\n <mat-icon [svgIcon]=\"readOnly ? 'gio:eye-empty' : 'gio:edit-pencil'\"></mat-icon>\n <span>{{ readOnly ? 'View' : 'Edit' }}</span>\n </button>\n\n <button [disabled]=\"readOnly\" mat-menu-item (click)=\"onDisable()\">\n <mat-icon [svgIcon]=\"step.enabled ? 'gio:prohibition' : 'gio:check-circled-outline'\"></mat-icon>\n <span>{{ step.enabled ? 'Disable' : 'Enable' }}</span>\n </button>\n\n <button [disabled]=\"readOnly\" mat-menu-item (click)=\"onDelete()\">\n <mat-icon svgIcon=\"gio:trash\"></mat-icon>\n <span>Delete</span>\n </button>\n <button [disabled]=\"readOnly\" mat-menu-item (click)=\"onDuplicate()\">\n <mat-icon svgIcon=\"gio:copy\"></mat-icon>\n <span>Duplicate</span>\n </button>\n @if (disableMoveRight) {\n <button [disabled]=\"readOnly\" mat-menu-item (click)=\"onMoveRight()\">\n <mat-icon svgIcon=\"gio:arrow-right\"></mat-icon>\n <span>Move right</span>\n </button>\n }\n @if (disableMoveLeft) {\n <button [disabled]=\"readOnly\" mat-menu-item (click)=\"onMoveLeft()\">\n <mat-icon svgIcon=\"gio:arrow-left\"></mat-icon>\n <span>Move left</span>\n </button>\n }\n</mat-menu>\n","/*\n * Copyright (C) 2022 The Gravitee team (http://gravitee.io)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { Component, EventEmitter, Input, OnChanges, Output, SimpleChanges } from '@angular/core';\nimport { isEmpty, uniqueId } from 'lodash';\nimport { MatDialog } from '@angular/material/dialog';\nimport { GIO_DIALOG_WIDTH, GioBannerModule, GioIconsModule } from '@gravitee/ui-particles-angular';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { MatButtonModule } from '@angular/material/button';\n\nimport {\n GioPolicyStudioPoliciesCatalogDialogComponent,\n GioPolicyStudioPoliciesCatalogDialogData,\n GioPolicyStudioPoliciesCatalogDialogResult,\n} from '../policies-catalog-dialog/gio-ps-policies-catalog-dialog.component';\nimport { ApiType, ConnectorInfo, FlowPhase, Step } from '../../models';\nimport { GioPolicyStudioDetailsPhaseStepComponent } from '../flow-details-phase-step/gio-ps-flow-details-phase-step.component';\nimport { GenericPolicy } from '../../models/policy/GenericPolicy';\n\ntype StepVM =\n | {\n _id: string;\n type: 'connectors';\n connectors: {\n name?: string;\n icon?: string;\n }[];\n }\n | {\n _id: string;\n type: 'step';\n step: Step;\n index: number;\n };\n\n@Component({\n imports: [MatTooltipModule, MatButtonModule, GioPolicyStudioDetailsPhaseStepComponent, GioIconsModule, GioBannerModule],\n selector: 'gio-ps-flow-details-phase',\n templateUrl: './gio-ps-flow-details-phase.component.html',\n styleUrls: ['./gio-ps-flow-details-phase.component.scss'],\n})\nexport class GioPolicyStudioDetailsPhaseComponent implements OnChanges {\n @Input()\n public readOnly = false;\n\n @Input()\n public steps: Step[] = [];\n\n @Input()\n public name!: string;\n\n @Input()\n public description!: string;\n\n @Input()\n public startConnector: ConnectorInfo[] = [];\n\n @Input()\n public endConnector: ConnectorInfo[] = [];\n\n @Input()\n public apiType!: ApiType;\n\n @Input()\n public genericPolicies: GenericPolicy[] = [];\n\n @Input()\n public policyFlowPhase!: FlowPhase;\n\n @Input()\n public trialUrl?: string;\n\n @Input()\n public disabledNotYetAvailable = false;\n\n @Output()\n public stepsChange = new EventEmitter<Step[]>();\n\n public stepsVM: StepVM[] = [];\n\n public hasStartAndEndConnectors = true;\n constructor(private readonly matDialog: MatDialog) {}\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (changes.steps || changes.startConnector || changes.endConnector) {\n this.stepsVM = [\n {\n _id: 'start',\n type: 'connectors',\n connectors: this.startConnector.map(connector => ({\n name: connector.name,\n icon: connector.icon,\n })),\n },\n\n ...(this.steps ?? []).map((step, index) => ({\n _id: uniqueId('step_'),\n type: 'step' as const,\n step: step,\n index,\n })),\n\n {\n _id: 'end',\n type: 'connectors',\n connectors: this.endConnector.map(connector => ({\n name: connector.name,\n icon: connector.icon,\n })),\n },\n ];\n\n // Disable phase if there are no start & end connectors\n this.hasStartAndEndConnectors = this.stepsVM.filter(step => step.type === 'connectors' && !isEmpty(step.connectors)).length >= 2;\n }\n }\n\n public onAddPolicy(index: number): void {\n this.matDialog\n .open<\n GioPolicyStudioPoliciesCatalogDialogComponent,\n GioPolicyStudioPoliciesCatalogDialogData,\n GioPolicyStudioPoliciesCatalogDialogResult\n >(GioPolicyStudioPoliciesCatalogDialogComponent, {\n data: {\n genericPolicies: this.genericPolicies,\n flowPhase: this.policyFlowPhase,\n apiType: this.apiType,\n trialUrl: this.trialUrl,\n },\n role: 'alertdialog',\n id: 'gioPolicyStudioPoliciesCatalogDialog',\n width: GIO_DIALOG_WIDTH.LARGE,\n })\n .afterClosed()\n .subscribe(stepToAdd => {\n if (!this.steps || !stepToAdd) {\n return;\n }\n // Add Step after the given index\n this.stepsChange.emit([...this.steps.slice(0, index + 1), stepToAdd, ...this.steps.slice(index + 1)]);\n });\n }\n\n public onStepChange(index: number, stepToEdit: Step): void {\n if (!this.steps) {\n return;\n }\n // Replace the step at the given index\n this.stepsChange.emit([...this.steps.slice(0, index), stepToEdit, ...this.steps.slice(index + 1)]);\n }\n\n public onStepDeleted(index: number): void {\n if (!this.steps) {\n return;\n }\n this.stepsChange.emit([...this.steps.slice(0, index), ...this.steps.slice(index + 1)]);\n }\n\n public onStepDisabled(index: number): void {\n if (!this.steps) {\n return;\n }\n\n this.stepsChange.emit([\n ...this.steps.slice(0, index),\n {\n ...this.steps[index],\n enabled: !this.steps[index].enabled,\n },\n ...this.steps.slice(index + 1),\n ]);\n }\n\n public onStepDuplicated(index: number) {\n if (!this.steps) {\n return;\n }\n\n this.stepsChange.emit([...this.steps.slice(0, index + 1), this.steps[index], ...this.steps.slice(index + 1)]);\n }\n\n public onStepMovedRight(index: number) {\n if (!this.steps) {\n return;\n }\n // Check if the step is not the last one\n if (index === this.steps.length - 1) {\n return;\n }\n\n this.stepsChange.emit([...this.steps.slice(0, index), this.steps[index + 1], this.steps[index], ...this.steps.slice(index + 2)]);\n }\n\n public onStepMovedLeft(index: number) {\n if (!this.steps) {\n return;\n }\n // Check if the step is not the first one\n if (index === 0) {\n return;\n }\n\n this.stepsChange.emit([...this.steps.slice(0, index - 1), this.steps[index], this.steps[index - 1], ...this.steps.slice(index + 1)]);\n }\n}\n","<!--\n\n Copyright (C) 2025 The Gravitee team (http://gravitee.io)\n \n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n \n http://www.apache.org/licenses/LICENSE-2.0\n \n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n\n-->\n\n<div class=\"header\">\n <span class=\"header__name\">\n {{ name }}\n </span>\n <span class=\"header__description\">\n {{ description }}\n </span>\n\n @if (!hasStartAndEndConnectors && !disabledNotYetAvailable) {\n <span class=\"header__infoIcon\" matTooltip=\"Policies might not be evaluated\" matTooltipPosition=\"before\">\n <mat-icon svgIcon=\"gio:info\"></mat-icon>\n </span>\n }\n</div>\n\n@if (disabledNotYetAvailable) {\n <div class=\"disabledContent\">\n <gio-banner-info>\n Coming soon\n <span gioBannerBody> This feature is not yet available in the current version of the API Studio. Stay tuned for updates. </span>\n </gio-banner-info>\n </div>\n} @else if (hasStartAndEndConnectors) {\n <div class=\"wrapper\">\n <div class=\"content\">\n @for (stepVM of stepsVM; track stepVM._id; let isFirst = $first) {\n <div class=\"content__step\">\n <!-- Connector -->\n @if (stepVM.type === 'connectors') {\n <div class=\"content__step__connector\">\n @for (connector of stepVM.connectors; track connector) {\n <span class=\"gio-badge-white content__step__connector__badge\">\n @if (connector.icon) {\n <mat-icon [svgIcon]=\"connector.icon\" class=\"content__step__connector__badge__icon\"></mat-icon>\n }\n {{ connector.name }}\n </span>\n }\n </div>\n <!-- Add policy button after first connector -->\n @if (isFirst) {\n <mat-icon class=\"content__step__rightArrow\" svgIcon=\"gio:arrow-right\"></mat-icon>\n <button [disabled]=\"readOnly\" class=\"content__step__addBtn\" mat-button (click)=\"onAddPolicy(-1)\">\n <mat-icon svgIcon=\"gio:plus\"></mat-icon>\n </button>\n <mat-icon class=\"content__step__rightArrow\" svgIcon=\"gio:arrow-right\"></mat-icon>\n }\n }\n\n <!-- Policy -->\n @if (stepVM.type === 'step') {\n <div class=\"content__step__policy\">\n @if (stepVM.step?.condition) {\n <div class=\"content__step__policy__condition\" [class.disabled]=\"!stepVM.step.enabled\">\n <span class=\"gio-badge-neutral\" [matTooltip]=\"'Condition: ' + stepVM.step.condition\"\n ><mat-icon svgIcon=\"gio:if\"></mat-icon> {{ stepVM.step.condition }}</span\n >\n </div>\n }\n\n <gio-ps-flow-details-phase-step\n class=\"content__step__step\"\n [readOnly]=\"readOnly\"\n [class.disabled]=\"!stepVM.step.enabled\"\n [genericPolicies]=\"genericPolicies\"\n [step]=\"stepVM.step\"\n [flowPhase]=\"policyFlowPhase\"\n [apiType]=\"apiType\"\n (stepChange)=\"onStepChange(stepVM.index, $event)\"\n (deleted)=\"onStepDeleted(stepVM.index)\"\n (disabled)=\"onStepDisabled(stepVM.index)\"\n (duplicated)=\"onStepDuplicated(stepVM.index)\"\n [disableMoveRight]=\"stepVM.index !== this.steps.length - 1\"\n (movedRight)=\"onStepMovedRight(stepVM.index)\"\n [disableMoveLeft]=\"stepVM.index !== 0\"\n (movedLeft)=\"onStepMovedLeft(stepVM.index)\"\n ></gio-ps-flow-details-phase-step>\n </div>\n\n <!-- Add policy button -->\n <mat-icon class=\"content__step__rightArrow\" svgIcon=\"gio:arrow-right\"></mat-icon>\n <button [disabled]=\"readOnly\" class=\"content__step__addBtn\" mat-button (click)=\"onAddPolicy(stepVM.index)\">\n <mat-icon svgIcon=\"gio:plus\"></mat-icon>\n </button>\n <mat-icon class=\"content__step__rightArrow\" svgIcon=\"gio:arrow-right\"></mat-icon>\n }\n </div>\n }\n </div>\n </div>\n} @else {\n <div class=\"disabledContent\">\n <gio-banner-warning>\n Policies might not be evaluated\n <span gioBannerBody>\n Your current flow settings are not applicable to this phase. Select supporting endpoints and operations in the flow configuration to\n enable this phase.\n </span>\n </gio-banner-warning>\n </div>\n}\n","/*\n * Copyright (C) 2023 The Gravitee team (http://gravitee.io)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { Pipe, PipeTransform } from '@angular/core';\nimport { filter, isEmpty } from 'lodash';\n\nimport { ConnectorInfo, ConnectorMode } from '../../models';\n\n@Pipe({\n standalone: true,\n name: 'gioFilterConnectorsByMode',\n})\nexport class GioFilterConnectorsByModePipe implements PipeTransform {\n public transform(items: ConnectorInfo[], mode: ConnectorMode, activeModes: ConnectorMode[] = []): ConnectorInfo[] {\n if (items) {\n if (!mode) {\n return items;\n }\n\n if (isEmpty(activeModes) || activeModes.includes(mode)) {\n return filter(items, (item: ConnectorInfo) => {\n return item.supportedModes.includes(mode);\n });\n }\n }\n return [];\n }\n}\n","/*\n * Copyright (C) 2022 The Gravitee team (http://gravitee.io)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { Component, Input, OnChanges, SimpleChanges } from '@angular/core';\nimport { isEmpty } from 'lodash';\nimport { GioIconsModule } from '@gravitee/ui-particles-angular';\nimport { MatCommonModule } from '@angular/material/core';\nimport { CommonModule } from '@angular/common';\n\nimport { ChannelSelector, ConditionSelector, ConnectorInfo, HttpSelector, McpSelector, Operation } from '../../models';\nimport { FlowVM } from '../../policy-studio/gio-policy-studio.model';\n\n@Component({\n imports: [CommonModule, GioIconsModule, MatCommonModule],\n selector: 'gio-ps-flow-details-info-bar',\n templateUrl: './gio-ps-flow-details-info-bar.component.html',\n styleUrls: ['./gio-ps-flow-details-info-bar.component.scss'],\n})\nexport class GioPolicyStudioDetailsInfoBarComponent implements OnChanges {\n @Input()\n public flow?: FlowVM = undefined;\n\n @Input()\n public entrypointsInfo?: ConnectorInfo[];\n\n private _methods?: { name: string; class: string }[] | null;\n\n private _mcpMethods?: { name: string; class: string }[] | null;\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (changes['flow']) {\n // Invalidate cache when flow changes\n this._methods = undefined;\n this._mcpMethods = undefined;\n }\n }\n\n public get condition(): string | undefined {\n const conditionSelector = this.flow?.selectors?.find(s => s.type === 'CONDITION') as ConditionSelector;\n if (!conditionSelector) {\n return undefined;\n }\n return conditionSelector?.condition;\n }\n\n // MESSAGE API type\n\n public get operations(): string[] | undefined {\n const channelSelector = this.flow?.selectors?.find(s => s.type === 'CHANNEL') as ChannelSelector;\n if (!channelSelector) {\n return undefined;\n }\n const operationToBadge: Record<Operation, string> = {\n PUBLISH: 'PUB',\n SUBSCRIBE: 'SUB',\n };\n // If no operations are selected, all operations are valid\n const operations =\n !channelSelector.operations || isEmpty(channelSelector.operations) ? (['PUBLISH', 'SUBSCRIBE'] as const) : channelSelector.operations;\n\n return operations.map(o => operationToBadge[o]).sort();\n }\n\n public get channel(): string | undefined {\n const channelSelector = this.flow?.selectors?.find(s => s.type === 'CHANNEL') as ChannelSelector;\n if (!channelSelector) {\n return undefined;\n }\n return channelSelector?.channel;\n }\n\n public get channelOperator(): string | undefined {\n const channelSelector = this.flow?.selectors?.find(s => s.type === 'CHANNEL') as ChannelSelector;\n if (!channelSelector) {\n return undefined;\n }\n return channelSelector?.channelOperator;\n }\n\n public get entrypoints(): ConnectorInfo[] | undefined {\n const channelSelector = this.flow?.selectors?.find(s => s.type === 'CHANNEL') as ChannelSelector;\n if (!channelSelector) {\n return undefined;\n }\n\n return this.entrypointsInfo?.filter(\n e =>\n // If no entrypoints are selected, all entrypoints are valid\n !channelSelector.entrypoints || isEmpty(channelSelector.entrypoints) || channelSelector.entrypoints?.includes(e.type),\n );\n }\n\n // PROXY API type\n\n public get path(): string | undefined {\n const httpSelector = this.flow?.selectors?.find(s => s.type === 'HTTP') as HttpSelector;\n if (!httpSelector) {\n return undefined;\n }\n return httpSelector?.path;\n }\n\n public get pathOperator(): string | undefined {\n const httpSelector = this.flow?.selectors?.find(s => s.type === 'HTTP') as HttpSelector;\n if (!httpSelector) {\n return undefined;\n }\n return httpSelector?.pathOperator;\n }\n\n public get methods() {\n if (this._methods === undefined && this.flow) {\n const httpSelector = this.flow.selectors?.find(s => s.type === 'HTTP') as HttpSelector;\n if (!httpSelector) {\n this._methods = null; // Cache null to avoid recomputation\n return undefined;\n }\n this._methods = httpSelector?.methods?.length\n ? httpSelector.methods.map(m => ({ name: m, class: `gio-method-badge-${m.toLowerCase()}` }))\n : [{ name: 'ALL', class: 'gio-badge-neutral' }];\n }\n return this._methods === null ? undefined : this._methods;\n }\n\n // MCP Proxy API\n public get mcpMethods() {\n if (this._mcpMethods === undefined && this.flow) {\n const mcpSelector = this.flow.selectors?.find(s => s.type === 'MCP') as McpSelector;\n if (!mcpSelector) {\n this._mcpMethods = null; // Cache null to avoid recomputation\n return undefined;\n }\n\n this._mcpMethods = mcpSelector?.methods?.length\n ? mcpSelector.methods.map(m => ({ name: m, class: `gio-badge-neutral` }))\n : [{ name: 'All Methods', class: 'gio-badge-neutral' }];\n }\n return this._mcpMethods === null ? undefined : this._mcpMethods;\n }\n}\n","<!--\n\n Copyright (C) 2025 The Gravitee team (http://gravitee.io)\n \n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n \n http://www.apache.org/licenses/LICENSE-2.0\n \n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n\n-->\n@if (flow?.name) {\n <div class=\"info\">\n <span class=\"info__label\">Name</span>\n <span class=\"info__value strong\">{{ flow?.name }}</span>\n </div>\n}\n\n@if (entrypoints) {\n <div class=\"info\">\n <span class=\"info__label\">Entrypoints</span>\n @for (entrypoint of entrypoints; track entrypoint) {\n <span class=\"info__value gio-badge gio-badge-neutral\">\n <mat-icon [svgIcon]=\"entrypoint.icon\"></mat-icon>\n {{ entrypoint.name }}</span\n >\n }\n </div>\n}\n\n<!-- MESSAGE API type -->\n\n@if (operations) {\n <div class=\"info\">\n <span class=\"info__label\">Operations</span>\n @for (operation of operations; track operation) {\n <span class=\"info__value gio-badge-neutral\"> {{ operation }}</span>\n }\n </div>\n}\n\n@if (channel) {\n <div class=\"info\">\n <span class=\"info__label\">Channel</span>\n <span class=\"info__value strong\">{{ channel }}</span>\n </div>\n}\n\n@if (channelOperator) {\n <div class=\"info\">\n <span class=\"info__label\">Channel Operator</span>\n <span class=\"info__value gio-badge-neutral\">{{ channelOperator }}</span>\n </div>\n}\n\n<!-- PROXY API type -->\n\n@if (path) {\n <div class=\"info\">\n <span class=\"info__label\">Path</span>\n <span class=\"info__value strong\">{{ path }}</span>\n </div>\n}\n\n@if (pathOperator) {\n <div class=\"info\">\n <span class=\"info__label\">Path Operator</span>\n <span class=\"info__value gio-badge-neutral\">{{ pathOperator }}</span>\n </div>\n}\n\n@if (methods) {\n <div class=\"info\">\n <span class=\"info__label\">HTTP methods</span>\n @for (method of methods; track method) {\n <span class=\"info__value method\" [ngClass]=\"method.class\"> {{ method.name }}</span>\n }\n </div>\n}\n\n<!-- Mcp Methods-->\n@if (mcpMethods) {\n <div class=\"info\">\n <span class=\"info__label\">MCP Methods</span>\n @for (mcpMethod of mcpMethods; track mcpMethod.name) {\n <span class=\"info__value\" [ngClass]=\"mcpMethod.class\">{{ mcpMethod.name }}</span>\n }\n </div>\n}\n<!-- Condition -->\n@if (condition) {\n <div class=\"info\">\n <span class=\"info__label\">Condition</span>\n <span class=\"info__value gio-badge-neutral condition\">{{ condition }}</span>\n </div>\n}\n","/*\n * Copyright (C) 2022 The Gravitee team (http://gravitee.io)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { Component, EventEmitter, Input, OnChanges, Output, SimpleChanges } from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { tap } from 'rxjs/operators';\nimport { isEmpty } from 'lodash';\nimport { GIO_DIALOG_WIDTH, GioBannerModule, GioIconsModule, GioLoaderModule } from '@gravitee/ui-particles-angular';\nimport { MatTabsModule } from '@angular/material/tabs';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\nimport { FlowVM } from '../../policy-studio/gio-policy-studio.model';\nimport {\n GioPolicyStudioFlowMessageFormDialogComponent,\n GioPolicyStudioFlowMessageFormDialogData,\n} from '../flow-form-dialog/flow-message-form-dialog/gio-ps-flow-message-form-dialog.component';\nimport { ApiType, ChannelSelector, ConnectorInfo, Operation, Policy, Step, GenericPolicy } from '../../models';\nimport {\n GioPolicyStudioFlowProxyFormDialogComponent,\n GioPolicyStudioFlowProxyFormDialogData,\n} from '../flow-form-dialog/flow-proxy-form-dialog/gio-ps-flow-proxy-form-dialog.component';\nimport { GioPolicyStudioFlowFormDialogResult } from '../flow-form-dialog/gio-ps-flow-form-dialog-result.model';\nimport { GioPolicyStudioDetailsPhaseComponent } from '../flow-details-phase/gio-ps-flow-details-phase.component';\nimport { GioFilterConnectorsByModePipe } from '../filter-pipe/gio-flter-connectors-by-mode.pipe';\nimport { GioPolicyStudioDetailsInfoBarComponent } from '../flow-details-info-bar/gio-ps-flow-details-info-bar.component';\nimport {\n GioPolicyStudioFlowNativeFormDialogComponent,\n GioPolicyStudioFlowNativeFormDialogData,\n} from '../flow-form-dialog/flow-native-form-dialog/gio-ps-flow-native-form-dialog.component';\nimport {\n GioPolicyStudioFlowMcpFormDialogComponent,\n GioPolicyStudioFlowMcpFormDialogData,\n} from '../flow-form-dialog/flow-mcp-form-dialog/gio-ps-flow-mcp-form-dialog.component';\nimport {\n GioPolicyStudioFlowLlmFormDialogComponent,\n GioPolicyStudioFlowLlmFormDialogData,\n} from '../flow-form-dialog/flow-llm-form-dialog/gio-ps-flow-llm-form-dialog.component';\n\n@Component({\n imports: [\n MatTabsModule,\n MatButtonModule,\n GioIconsModule,\n GioPolicyStudioDetailsPhaseComponent,\n GioFilterConnectorsByModePipe,\n GioLoaderModule,\n GioPolicyStudioDetailsInfoBarComponent,\n MatTooltipModule,\n GioBannerModule,\n ],\n selector: 'gio-ps-flow-details',\n templateUrl: './gio-ps-flow-details.component.html',\n styleUrls: ['./gio-ps-flow-details.component.scss'],\n})\nexport class GioPolicyStudioDetailsComponent implements OnChanges {\n @Input()\n public readOnly = false;\n\n @Input()\n public loading = false;\n\n @Input()\n public apiType!: ApiType;\n\n @Input()\n public flow?: FlowVM = undefined;\n\n @Input()\n public entrypointsInfo: ConnectorInfo[] = [];\n\n @Input()\n public endpointsInfo: ConnectorInfo[] = [];\n\n @Input()\n public policies: Policy[] = [];\n\n @Input()\n public genericPolicies: GenericPolicy[] = [];\n\n @Input()\n public trialUrl?: string;\n\n @Output()\n public flowChange = new EventEmitter<FlowVM>();\n\n @Output()\n public deleteFlow = new EventEmitter<FlowVM>();\n\n public messageFlowEntrypointsInfo: ConnectorInfo[] = [];\n\n public operations: Operation[] = [];\n\n constructor(private readonly matDialog: MatDialog) {}\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (changes.entrypointsInfo || changes.flow) {\n const channelSelector = this.flow?.selectors?.find(s => s.type === 'CHANNEL') as ChannelSelector;\n\n this.operations = channelSelector?.operations ?? [];\n\n if (!channelSelector) {\n // If no channel selector found. Keep default value\n this.messageFlowEntrypointsInfo = [];\n return;\n }\n\n this.messageFlowEntrypointsInfo =\n this.entrypointsInfo?.filter(\n e =>\n // If not entrypoints are defined, all entrypoints are valid\n !channelSelector.entrypoints || isEmpty(channelSelector.entrypoints) || channelSelector.entrypoints?.includes(e.type),\n ) ?? [];\n }\n }\n\n public onEditFlow(): void {\n let dialogResult;\n switch (this.apiType) {\n case 'MESSAGE':\n dialogResult = this.matDialog\n .open<\n GioPolicyStudioFlowMessageFormDialogComponent,\n GioPolicyStudioFlowMessageFormDialogData,\n GioPolicyStudioFlowFormDialogResult\n >(GioPolicyStudioFlowMessageFormDialogComponent, {\n data: {\n flow: this.flow,\n entrypoints: this.entrypointsInfo ?? [],\n },\n role: 'alertdialog',\n id: 'gioPsFlowMessageFormDialog',\n width: GIO_DIALOG_WIDTH.MEDIUM,\n })\n .afterClosed();\n break;\n case 'PROXY':\n dialogResult = this.matDialog\n .open<GioPolicyStudioFlowProxyFormDialogComponent, GioPolicyStudioFlowProxyFormDialogData, GioPolicyStudioFlowFormDialogResult>(\n GioPolicyStudioFlowProxyFormDialogComponent,\n {\n data: {\n flow: this.flow,\n },\n role: 'alertdialog',\n id: 'gioPsFlowProxyFormDialog',\n width: GIO_DIALOG_WIDTH.MEDIUM,\n },\n )\n .afterClosed();\n break;\n case 'NATIVE':\n dialogResult = this.matDialog\n .open<GioPolicyStudioFlowNativeFormDialogComponent, GioPolicyStudioFlowNativeFormDialogData, GioPolicyStudioFlowFormDialogResult>(\n GioPolicyStudioFlowNativeFormDialogComponent,\n {\n data: {\n flow: this.flow,\n parentGroupName: this.flow!._parentFlowGroupName,\n },\n role: 'alertdialog',\n id: 'gioPsFlowNativeFormDialog',\n width: GIO_DIALOG_WIDTH.MEDIUM,\n },\n )\n .afterClosed();\n break;\n case 'MCP_PROXY':\n dialogResult = this.matDialog\n .open<GioPolicyStudioFlowMcpFormDialogComponent, GioPolicyStudioFlowMcpFormDialogData, GioPolicyStudioFlowFormDialogResult>(\n GioPolicyStudioFlowMcpFormDialogComponent,\n {\n data: {\n parentGroupName: this.flow!._parentFlowGroupName,\n flow: this.flow,\n },\n role: 'alertdialog',\n id: 'gioPsFlowFormDialog',\n width: GIO_DIALOG_WIDTH.MEDIUM,\n },\n )\n .afterClosed();\n break;\n case 'LLM_PROXY':\n dialogResult = this.matDialog\n .open<GioPolicyStudioFlowLlmFormDialogComponent, GioPolicyStudioFlowLlmFormDialogData, GioPolicyStudioFlowFormDialogResult>(\n GioPolicyStudioFlowLlmFormDialogComponent,\n {\n data: {\n flow: this.flow,\n },\n role: 'alertdialog',\n id: 'gioPsFlowFormDialog',\n width: GIO_DIALOG_WIDTH.MEDIUM,\n },\n )\n .afterClosed();\n break;\n default:\n throw new Error(`Unsupported API type ${this.apiType}`);\n }\n\n dialogResult\n .pipe(\n tap(createdOrEdited => {\n if (!createdOrEdited) {\n return;\n }\n this.flowChange.emit(createdOrEdited);\n }),\n )\n .subscribe();\n }\n\n public onDeleteFlow(): void {\n this.deleteFlow.emit(this.flow);\n }\n\n public onEnableDisableFlow(): void {\n if (!this.flow) {\n return;\n }\n\n this.flowChange.emit({\n ...this.flow,\n enabled: !this.flow.enabled,\n _hasChanged: true,\n });\n }\n\n public onStepsChange(flowPhase: 'connect' | 'interact' | 'request' | 'response' | 'publish' | 'subscribe', steps: Step[]): void {\n if (!this.flow) {\n return;\n }\n\n this.flowChange.emit({\n ...this.flow,\n [flowPhase]: steps,\n _hasChanged: true,\n });\n }\n}\n","<!--\n\n Copyright (C) 2025 The Gravitee team (http://gravitee.io)\n \n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n \n http://www.apache.org/licenses/LICENSE-2.0\n \n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n\n-->\n\n@if (!loading) {\n @if (flow) {\n <div class=\"header\">\n <div class=\"header__label\">\n Flow details\n @if (!flow.enabled) {\n <div class=\"gio-badge gio-badge-neutral\">Disabled</div>\n }\n </div>\n <div class=\"header__configBtn\">\n <button\n [disabled]=\"readOnly\"\n class=\"header__configBtn__enableDisable\"\n mat-stroked-button\n [matTooltip]=\"flow.enabled ? 'Disable' : 'Enable'\"\n (click)=\"onEnableDisableFlow()\"\n >\n <mat-icon [svgIcon]=\"flow.enabled ? 'gio:prohibition' : 'gio:check-circled-outline'\"></mat-icon>\n </button>\n <button [disabled]=\"readOnly\" class=\"header__configBtn__edit\" mat-stroked-button (click)=\"onEditFlow()\" matTooltip=\"Edit\">\n <mat-icon svgIcon=\"gio:edit-pencil\"></mat-icon>\n </button>\n <button [disabled]=\"readOnly\" class=\"header__configBtn__delete\" mat-stroked-button (click)=\"onDeleteFlow()\" matTooltip=\"Delete\">\n <mat-icon svgIcon=\"gio:trash\"></mat-icon>\n </button>\n </div>\n </div>\n <gio-ps-flow-details-info-bar\n class=\"infoBar\"\n [class.flowDisabled]=\"!flow.enabled\"\n [flow]=\"flow\"\n [entrypointsInfo]=\"entrypointsInfo\"\n ></gio-ps-flow-details-info-bar>\n\n <div class=\"content\" [class.flowDisabled]=\"!flow.enabled\">\n @if (apiType === 'MESSAGE') {\n <mat-tab-group class=\"content__tabs\" dynamicHeight>\n <mat-tab label=\"Initial connection\" bodyClass=\"content__tabs__body\">\n <gio-ps-flow-details-phase\n class=\"content__phase\"\n name=\"Request phase\"\n description=\"Policies will be applied during the connection establishment\"\n [readOnly]=\"readOnly\"\n [startConnector]=\"messageFlowEntrypointsInfo\"\n [endConnector]=\"endpointsInfo\"\n [steps]=\"flow.request ?? []\"\n [apiType]=\"apiType\"\n [genericPolicies]=\"genericPolicies\"\n [trialUrl]=\"trialUrl\"\n policyFlowPhase=\"REQUEST\"\n (stepsChange)=\"onStepsChange('request', $event)\"\n ></gio-ps-flow-details-phase>\n <gio-ps-flow-details-phase\n class=\"content__phase\"\n name=\"Response phase\"\n description=\"Policies will be applied to the response from the initial connection\"\n [readOnly]=\"readOnly\"\n [startConnector]=\"endpointsInfo\"\n [endConnector]=\"messageFlowEntrypointsInfo\"\n [steps]=\"flow.response ?? []\"\n [apiType]=\"apiType\"\n [genericPolicies]=\"genericPolicies\"\n [trialUrl]=\"trialUrl\"\n policyFlowPhase=\"RESPONSE\"\n (stepsChange)=\"onStepsChange('response', $event)\"\n ></gio-ps-flow-details-phase>\n </mat-tab>\n <mat-tab label=\"Event messages\" bodyClass=\"content__tabs__body\">\n <gio-ps-flow-details-phase\n class=\"content__phase\"\n name=\"Publish phase\"\n description=\"Policies will be applied on messages sent to the endpoint\"\n [readOnly]=\"readOnly\"\n [startConnector]=\"messageFlowEntrypointsInfo | gioFilterConnectorsByMode: 'PUBLISH' : operations\"\n [endConnector]=\"endpointsInfo | gioFilterConnectorsByMode: 'PUBLISH' : operations\"\n [steps]=\"flow.publish ?? []\"\n [apiType]=\"apiType\"\n [genericPolicies]=\"genericPolicies\"\n [trialUrl]=\"trialUrl\"\n policyFlowPhase=\"PUBLISH\"\n (stepsChange)=\"onStepsChange('publish', $event)\"\n ></gio-ps-flow-details-phase>\n <gio-ps-flow-details-phase\n class=\"content__phase\"\n name=\"Subscribe phase\"\n description=\"Policies will be applied on messages received by the entrypoint\"\n [readOnly]=\"readOnly\"\n [startConnector]=\"endpointsInfo | gioFilterConnectorsByMode: 'SUBSCRIBE' : operations\"\n [endConnector]=\"messageFlowEntrypointsInfo | gioFilterConnectorsByMode: 'SUBSCRIBE' : operations\"\n [steps]=\"flow.subscribe ?? []\"\n [apiType]=\"apiType\"\n [genericPolicies]=\"genericPolicies\"\n [trialUrl]=\"trialUrl\"\n policyFlowPhase=\"SUBSCRIBE\"\n (stepsChange)=\"onStepsChange('subscribe', $event)\"\n ></gio-ps-flow-details-phase>\n </mat-tab>\n </mat-tab-group>\n }\n\n @if (apiType === 'PROXY') {\n <gio-ps-flow-details-phase\n class=\"content__phase\"\n name=\"Request phase\"\n description=\"Policies will be applied during the connection establishment\"\n [readOnly]=\"readOnly\"\n [startConnector]=\"entrypointsInfo | gioFilterConnectorsByMode: 'REQUEST_RESPONSE'\"\n [endConnector]=\"endpointsInfo | gioFilterConnectorsByMode: 'REQUEST_RESPONSE'\"\n [steps]=\"flow.request ?? []\"\n [apiType]=\"apiType\"\n [genericPolicies]=\"genericPolicies\"\n [trialUrl]=\"trialUrl\"\n policyFlowPhase=\"REQUEST\"\n (stepsChange)=\"onStepsChange('request', $event)\"\n ></gio-ps-flow-details-phase>\n <gio-ps-flow-details-phase\n class=\"content__phase\"\n name=\"Response phase\"\n description=\"Policies will be applied during the connection termination\"\n [readOnly]=\"readOnly\"\n [startConnector]=\"endpointsInfo | gioFilterConnectorsByMode: 'REQUEST_RESPONSE'\"\n [endConnector]=\"entrypointsInfo | gioFilterConnectorsByMode: 'REQUEST_RESPONSE'\"\n [steps]=\"flow.response ?? []\"\n [apiType]=\"apiType\"\n [genericPolicies]=\"genericPolicies\"\n [trialUrl]=\"trialUrl\"\n policyFlowPhase=\"RESPONSE\"\n (stepsChange)=\"onStepsChange('response', $event)\"\n ></gio-ps-flow-details-phase>\n }\n\n @if (apiType === 'NATIVE') {\n <mat-tab-group class=\"content__tabs\" dynamicHeight>\n <mat-tab label=\"Global\" bodyClass=\"content__tabs__body\">\n <gio-ps-flow-details-phase\n class=\"content__phase\"\n name=\"Connect phase\"\n description=\"Policies will be applied when the client connects to the Gateway\"\n [disabledNotYetAvailable]=\"true\"\n [readOnly]=\"readOnly\"\n [startConnector]=\"endpointsInfo | gioFilterConnectorsByMode: 'CONNECT'\"\n [endConnector]=\"entrypointsInfo | gioFilterConnectorsByMode: 'CONNECT'\"\n [steps]=\"flow.connect ?? []\"\n [apiType]=\"apiType\"\n [genericPolicies]=\"genericPolicies\"\n [trialUrl]=\"trialUrl\"\n policyFlowPhase=\"CONNECT\"\n (stepsChange)=\"onStepsChange('connect', $event)\"\n >\n </gio-ps-flow-details-phase>\n <gio-ps-flow-details-phase\n class=\"content__phase\"\n name=\"Interact phase\"\n description=\"Policies will be applied on all interactions between the client and the Gateway\"\n [readOnly]=\"readOnly\"\n [startConnector]=\"entrypointsInfo | gioFilterConnectorsByMode: 'INTERACT'\"\n [endConnector]=\"endpointsInfo | gioFilterConnectorsByMode: 'INTERACT'\"\n [steps]=\"flow.interact ?? []\"\n [apiType]=\"apiType\"\n [genericPolicies]=\"genericPolicies\"\n [trialUrl]=\"trialUrl\"\n policyFlowPhase=\"INTERACT\"\n (stepsChange)=\"onStepsChange('interact', $event)\"\n ></gio-ps-flow-details-phase>\n </mat-tab>\n <mat-tab label=\"Event messages\" bodyClass=\"content__tabs__body\">\n <gio-ps-flow-details-phase\n class=\"content__phase\"\n name=\"Publish phase\"\n description=\"Policies will be applied when publishing messages\"\n [readOnly]=\"readOnly\"\n [startConnector]=\"entrypointsInfo | gioFilterConnectorsByMode: 'PUBLISH'\"\n [endConnector]=\"endpointsInfo | gioFilterConnectorsByMode: 'PUBLISH'\"\n [steps]=\"flow.publish ?? []\"\n [apiType]=\"apiType\"\n [genericPolicies]=\"genericPolicies\"\n [trialUrl]=\"trialUrl\"\n policyFlowPhase=\"PUBLISH\"\n (stepsChange)=\"onStepsChange('publish', $event)\"\n ></gio-ps-flow-details-phase>\n <gio-ps-flow-details-phase\n class=\"content__phase\"\n name=\"Subscribe phase\"\n description=\"Policies will be applied when fetching messages\"\n [readOnly]=\"readOnly\"\n [startConnector]=\"endpointsInfo | gioFilterConnectorsByMode: 'SUBSCRIBE'\"\n [endConnector]=\"entrypointsInfo | gioFilterConnectorsByMode: 'SUBSCRIBE'\"\n [steps]=\"flow.subscribe ?? []\"\n [apiType]=\"apiType\"\n [genericPolicies]=\"genericPolicies\"\n [trialUrl]=\"trialUrl\"\n policyFlowPhase=\"SUBSCRIBE\"\n (stepsChange)=\"onStepsChange('subscribe', $event)\"\n ></gio-ps-flow-details-phase>\n </mat-tab>\n </mat-tab-group>\n }\n\n @if (apiType === 'MCP_PROXY') {\n <gio-ps-flow-details-phase\n class=\"content__phase\"\n name=\"Request phase\"\n description=\"Policies will be applied during the connection establishment\"\n [readOnly]=\"readOnly\"\n [startConnector]=\"entrypointsInfo | gioFilterConnectorsByMode: 'REQUEST_RESPONSE'\"\n [endConnector]=\"endpointsInfo | gioFilterConnectorsByMode: 'REQUEST_RESPONSE'\"\n [steps]=\"flow.request ?? []\"\n [apiType]=\"apiType\"\n [genericPolicies]=\"genericPolicies\"\n [trialUrl]=\"trialUrl\"\n policyFlowPhase=\"REQUEST\"\n (stepsChange)=\"onStepsChange('request', $event)\"\n ></gio-ps-flow-details-phase>\n <gio-ps-flow-details-phase\n class=\"content__phase\"\n name=\"Response phase\"\n description=\"Policies will be applied during the connection termination\"\n [readOnly]=\"readOnly\"\n [startConnector]=\"endpointsInfo | gioFilterConnectorsByMode: 'REQUEST_RESPONSE'\"\n [endConnector]=\"entrypointsInfo | gioFilterConnectorsByMode: 'REQUEST_RESPONSE'\"\n [steps]=\"flow.response ?? []\"\n [apiType]=\"apiType\"\n [genericPolicies]=\"genericPolicies\"\n [trialUrl]=\"trialUrl\"\n policyFlowPhase=\"RESPONSE\"\n (stepsChange)=\"onStepsChange('response', $event)\"\n ></gio-ps-flow-details-phase>\n }\n @if (apiType === 'LLM_PROXY') {\n <gio-ps-flow-details-phase\n class=\"content__phase\"\n name=\"Request phase\"\n description=\"Policies will be applied during the connection establishment\"\n [readOnly]=\"readOnly\"\n [startConnector]=\"entrypointsInfo | gioFilterConnectorsByMode: 'REQUEST_RESPONSE'\"\n [endConnector]=\"endpointsInfo | gioFilterConnectorsByMode: 'REQUEST_RESPONSE'\"\n [steps]=\"flow.request ?? []\"\n [apiType]=\"apiType\"\n [genericPolicies]=\"genericPolicies\"\n [trialUrl]=\"trialUrl\"\n policyFlowPhase=\"REQUEST\"\n (stepsChange)=\"onStepsChange('request', $event)\"\n ></gio-ps-flow-details-phase>\n <gio-ps-flow-details-phase\n class=\"content__phase\"\n name=\"Response phase\"\n description=\"Policies will be applied during the connection termination\"\n [readOnly]=\"readOnly\"\n [startConnector]=\"endpointsInfo | gioFilterConnectorsByMode: 'REQUEST_RESPONSE'\"\n [endConnector]=\"entrypointsInfo | gioFilterConnectorsByMode: 'REQUEST_RESPONSE'\"\n [steps]=\"flow.response ?? []\"\n [apiType]=\"apiType\"\n [genericPolicies]=\"genericPolicies\"\n [trialUrl]=\"trialUrl\"\n policyFlowPhase=\"RESPONSE\"\n (stepsChange)=\"onStepsChange('response', $event)\"\n ></gio-ps-flow-details-phase>\n }\n </div>\n } @else {\n <div class=\"emptyFlows\">\n <h2>No flows yet</h2>\n <p class=\"mat-body-1\">Flows allow you to customize the behavior of your API event phases through configurable policies</p>\n </div>\n }\n} @else {\n <div class=\"header loading\">\n <div class=\"header__label\">Flow details</div>\n <div class=\"header__configBtn\">\n <button class=\"header__configBtn__edit\" mat-stroked-button disabled>\n <mat-icon svgIcon=\"gio:edit-pencil\"></mat-icon>\n </button>\n <button class=\"header__configBtn__delete\" mat-stroked-button disabled>\n <mat-icon svgIcon=\"gio:trash\"></mat-icon>\n </button>\n </div>\n </div>\n <gio-ps-flow-details-info-bar class=\"infoBar loading\"></gio-ps-flow-details-info-bar>\n <div class=\"content loading\">\n <gio-loader></gio-loader>\n </div>\n}\n","/*\n * Copyright (C) 2022 The Gravitee team (http://gravitee.io)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { Component, computed, EventEmitter, Input, OnChanges, OnDestroy, Output, SimpleChanges } from '@angular/core';\nimport { cloneDeep, differenceBy, flatten, isEqual, omit, unionBy, uniqueId } from 'lodash';\nimport { EMPTY, Subscription, timer } from 'rxjs';\nimport { CommonModule } from '@angular/common';\nimport { GioIconsModule } from '@gravitee/ui-particles-angular';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { MatButtonModule } from '@angular/material/button';\n\nimport {\n ConnectorInfo,\n Flow,\n FlowExecution,\n Plan,\n Policy,\n PolicyDocumentationFetcher,\n PolicySchemaFetcher,\n SaveOutput,\n SharedPolicyGroupPolicy,\n toGenericPolicies,\n GenericPolicy,\n PolicyInput,\n fromPolicyInput,\n ApiType,\n} from '../models';\nimport { GioPolicyStudioFlowsMenuComponent } from '../components/flows-menu/gio-ps-flows-menu.component';\nimport { GioPolicyStudioDetailsComponent } from '../components/flow-details/gio-ps-flow-details.component';\n\nimport { FlowGroupVM, FlowVM } from './gio-policy-studio.model';\nimport { GioPolicyStudioService } from './gio-policy-studio.service';\n\nexport type FlowSelection = { planIndex: number; flowIndex: number };\n\n@Component({\n imports: [\n CommonModule,\n MatTooltipModule,\n MatButtonModule,\n GioIconsModule,\n GioPolicyStudioFlowsMenuComponent,\n GioPolicyStudioDetailsComponent,\n ],\n selector: 'gio-policy-studio',\n templateUrl: './gio-policy-studio.component.html',\n styleUrls: ['./gio-policy-studio.component.scss'],\n})\nexport class GioPolicyStudioComponent implements OnChanges, OnDestroy {\n /**\n * May be set to `true` if the API is not manageable from the UI (e.g. kubernetes operator APIs)\n */\n @Input()\n public readOnly = false;\n\n /**\n * API type (required)\n */\n @Input()\n public apiType!: ApiType;\n\n /**\n * Flow execution config (required)\n */\n @Input()\n public flowExecution!: FlowExecution;\n\n /**\n * List of entrypoints to display\n */\n @Input()\n public entrypointsInfo: ConnectorInfo[] = [];\n\n /**\n * List of endpoints to display\n */\n @Input()\n public endpointsInfo: ConnectorInfo[] = [];\n\n /**\n * List of common flows to add to common flows group\n */\n @Input()\n public commonFlows: Flow[] = [];\n\n /**\n * List of plans with their flows\n */\n @Input()\n public plans: Plan[] = [];\n\n /**\n * List of policies usable in the policy studio\n */\n @Input({\n transform: (policies: unknown) => policies ?? [],\n })\n public set policies(value: (PolicyInput | Policy)[]) {\n this._policies = value.map(fromPolicyInput);\n }\n public get policies(): Policy[] {\n return this._policies;\n }\n private _policies: Policy[] = [];\n\n /**\n * List of SharedPolicyGroups usable in the studio\n */\n @Input()\n public sharedPolicyGroupPolicies: SharedPolicyGroupPolicy[] = [];\n\n /**\n * When a policy is not available with the current license,\n * this URL is used to redirect the user to the trial page.\n */\n @Input()\n public trialUrl?: string;\n\n /**\n * Loading state\n */\n @Input()\n public loading = false;\n\n /**\n * Called when Policy Studio needs to fetch the policy schema\n * @returns Observable of the policy schema\n */\n @Input()\n public policySchemaFetcher: PolicySchemaFetcher = () => EMPTY;\n\n /**\n * Called when Policy Studio needs to fetch the policy documentation\n * @returns Observable of the policy documentation\n */\n @Input()\n public policyDocumentationFetcher: PolicyDocumentationFetcher = () => EMPTY;\n\n @Input()\n public selectedFlowIndexes: FlowSelection = { planIndex: 0, flowIndex: 0 };\n\n @Output()\n public selectedFlowChanged = new EventEmitter<FlowSelection>();\n\n /**\n * Return what is needed to save.\n **/\n @Output()\n public save = new EventEmitter<SaveOutput>();\n\n public connectorsTooltip = '';\n\n public selectedFlow?: FlowVM = undefined;\n\n public flowsGroups: FlowGroupVM[] = [];\n\n public disableSaveButton = true;\n\n public saving = false;\n\n public apiTypeDisplayable = computed(() => {\n const apiTypeMap: Record<ApiType, string> = {\n A2A_PROXY: 'A2A Proxy',\n LLM_PROXY: 'LLM Proxy',\n PROXY: 'HTTP Proxy',\n MESSAGE: 'HTTP Message',\n NATIVE: 'Native',\n MCP_PROXY: 'MCP Proxy',\n };\n\n return apiTypeMap[this.apiType];\n });\n\n // Used to keep track of initial flows groups to know if there are deleted flows\n private initialFlowsGroups: FlowGroupVM[] = [];\n\n private hasFlowExecutionChanged = false;\n\n private unSavingButtonSubscription?: Subscription;\n public enableSavingTimer = true;\n\n protected genericPolicies: GenericPolicy[] = [];\n\n constructor(private readonly policyStudioService: GioPolicyStudioService) {}\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (changes.entrypointsInfo || changes.endpointsInfo) {\n this.connectorsTooltip = `Entrypoints: ${(this.entrypointsInfo ?? []).map(e => e.name).join(', ')}\\nEndpoints: ${(\n this.endpointsInfo ?? []\n )\n .map(e => e.name)\n .join(', ')}`;\n }\n\n if (changes.commonFlows || changes.plans || changes.selectedFlowIndexes) {\n this.disableSaveButton = true;\n this.flowsGroups = getFlowsGroups(this.apiType, this.commonFlows, this.plans);\n this.initialFlowsGroups = cloneDeep(this.flowsGroups);\n this.selectedFlow = this.flowsGroups[this.selectedFlowIndexes?.planIndex ?? 0]?.flows[this.selectedFlowIndexes?.flowIndex ?? 0];\n\n // Reset saving state when flowsGroups are updated\n this.saving = false;\n this.unSavingButtonSubscription?.unsubscribe();\n }\n\n if (changes.policySchemaFetcher) {\n this.policyStudioService.setPolicySchemaFetcher(this.policySchemaFetcher);\n }\n\n if (changes.policyDocumentationFetcher) {\n this.policyStudioService.setPolicyDocumentationFetcher(this.policyDocumentationFetcher);\n }\n\n if (changes.policies || changes.sharedPolicyGroupPolicies) {\n this.initGenericPolicies();\n }\n if (changes.loading && this.loading && !this.saving) {\n this.saving = true;\n }\n }\n\n public ngOnDestroy() {\n this.unSavingButtonSubscription?.unsubscribe();\n }\n\n public onFlowExecutionChange(flowExecution: FlowExecution): void {\n this.hasFlowExecutionChanged = !isEqual(this.flowExecution, flowExecution);\n if (this.hasFlowExecutionChanged) {\n this.disableSaveButton = false;\n this.flowExecution = flowExecution;\n }\n }\n\n public onFlowsGroupsChange(flowsGroups: FlowGroupVM[]): void {\n this.flowsGroups = cloneDeep(flowsGroups);\n this.disableSaveButton = false;\n if (this.selectedFlow) {\n this.onSelectFlow(this.selectedFlow._id);\n }\n }\n\n public onSelectedFlowChange(flow: FlowVM): void {\n this.flowsGroups = this.flowsGroups.map(flowGroup => ({\n ...flowGroup,\n flows: flowGroup.flows.map(f => (f._id === flow._id ? flow : f)),\n }));\n this.selectedFlow = flow;\n this.disableSaveButton = false;\n }\n\n public onSelectFlow(flowId: string): void {\n let newPlanIndex = 0;\n let newFlowIndex = 0;\n for (let currentPlanIndex = 0; currentPlanIndex < this.flowsGroups.length; currentPlanIndex++) {\n const indexWithinPlan = this.flowsGroups[currentPlanIndex].flows.findIndex(flow => flow._id === flowId);\n if (indexWithinPlan !== -1) {\n newPlanIndex = currentPlanIndex;\n newFlowIndex = indexWithinPlan;\n break;\n }\n }\n\n this.selectedFlowIndexes = { planIndex: newPlanIndex, flowIndex: newFlowIndex };\n\n this.selectedFlow = this.flowsGroups[newPlanIndex].flows[newFlowIndex];\n\n this.selectedFlowChanged.emit(this.selectedFlowIndexes);\n }\n\n public onDeleteSelectedFlow(flow: FlowVM): void {\n // Define next selected flow and remove flow from flowsGroups\n const allFlowsId = flatten(this.flowsGroups.map(flowGroup => flowGroup.flows)).map(f => f._id);\n const flowToDeleteIndex = allFlowsId.indexOf(flow._id);\n const nextSelectedFlowId = allFlowsId[flowToDeleteIndex + 1] ?? allFlowsId[flowToDeleteIndex - 1];\n this.flowsGroups = this.flowsGroups.map(flowGroup => ({\n ...flowGroup,\n flows: flowGroup.flows.filter(f => f._id !== flow._id),\n }));\n\n this.onSelectFlow(nextSelectedFlowId);\n\n this.disableSaveButton = false;\n }\n\n public onSave(): void {\n // Emit common flows only if they have been updated\n const commonFlows = getCommonFlowsOutput(this.flowsGroups, this.initialFlowsGroups);\n\n // Emit plans only if they have been updated\n const plansToUpdate = getPlansChangeOutput(this.flowsGroups, this.initialFlowsGroups);\n this.save.emit({\n ...(commonFlows ? { commonFlows } : {}),\n ...(plansToUpdate ? { plansToUpdate } : {}),\n ...(this.hasFlowExecutionChanged ? { flowExecution: this.flowExecution } : {}),\n });\n this.saving = true;\n this.disableSaveButton = true;\n\n this.unSavingButtonSubscription?.unsubscribe();\n if (this.enableSavingTimer) {\n this.unSavingButtonSubscription = timer(5000).subscribe(() => {\n this.saving = false;\n });\n }\n }\n\n private initGenericPolicies(): void {\n this.genericPolicies = toGenericPolicies(this.policies ?? [], this.sharedPolicyGroupPolicies ?? []);\n }\n}\n\nconst getFlowsGroups = (apiType: ApiType, commonFlows: Flow[] = [], plans: Plan[] = []): FlowGroupVM[] => {\n const commFlowsGroup: FlowGroupVM = {\n _id: 'flowsGroup_commonFlow',\n _isPlan: false,\n name: 'All plans',\n flows: commonFlows.map(flow => ({ ...flow, _id: uniqueId('flow_'), _hasChanged: false, _parentFlowGroupName: 'Common' })),\n };\n\n return [\n ...plans.map(plan => ({\n _id: uniqueId('flowsGroup_'),\n _planId: plan.id,\n _isPlan: true,\n name: plan.name,\n flows: plan.flows.map(flow => ({ ...flow, _id: uniqueId('flow_'), _hasChanged: false, _parentFlowGroupName: plan.name })),\n })),\n commFlowsGroup,\n ];\n};\n\nconst getCommonFlowsOutput = (flowsGroups: FlowGroupVM[], initialFlowsGroups: FlowGroupVM[]): Flow[] | null => {\n const commonFlowsGroup = flowsGroups.find(flowGroup => flowGroup._id === 'flowsGroup_commonFlow');\n const initialCommonFlowsGroup = initialFlowsGroups.find(flowGroup => flowGroup._id === 'flowsGroup_commonFlow');\n // Check if common flows have been updated\n const hasChanged = commonFlowsGroup?.flows.some(flow => flow._hasChanged);\n\n // Check if common flows have been deleted\n const hasDeletedFlow = differenceBy(initialCommonFlowsGroup?.flows ?? [], commonFlowsGroup?.flows ?? [], '_id').length > 0;\n\n return hasChanged || hasDeletedFlow\n ? (commonFlowsGroup?.flows ?? []).map(flow => omit(flow, '_id', '_hasChanged', '_parentFlowGroupName'))\n : null;\n};\n\nconst getPlansChangeOutput = (flowsGroups: FlowGroupVM[], initialFlowsGroups: FlowGroupVM[]): Plan[] | null => {\n const plansGroups = flowsGroups.filter(flowGroup => flowGroup._id !== 'flowsGroup_commonFlow');\n const initialPlansGroups = initialFlowsGroups.filter(flowGroup => flowGroup._id !== 'flowsGroup_commonFlow');\n\n // Get plans with changed flows\n const plansGroupsWithChangedFlows = plansGroups.filter(plan => plan.flows.some(flow => flow._hasChanged));\n\n // Get plans with deleted flows\n const plansGroupsWithDeletedFlows: FlowGroupVM[] = [];\n\n // Check if there are deleted flows in initial initialPlansGroups\n initialPlansGroups.forEach(plan => {\n const planGroupToCompare = plansGroups.find(p => p._planId === plan._planId);\n if (planGroupToCompare && differenceBy(plan.flows, planGroupToCompare?.flows ?? [], '_id').length > 0) {\n // If there are deleted flows, we need to return the complete plan with the new flows\n plansGroupsWithDeletedFlows.push(planGroupToCompare);\n }\n });\n\n // Merge plans with changed flows and plans with deleted flows\n const plansWithChangedFlowsOutput = unionBy([...plansGroupsWithChangedFlows, ...plansGroupsWithDeletedFlows], '_planId').map(plan => ({\n ...omit(plan, '_id', '_isPlan', '_planId'),\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion -- planId is always defined\n id: plan._planId!,\n flows: plan.flows.map(flow => omit(flow, '_id', '_hasChanged', '_parentFlowGroupName')),\n }));\n\n return plansWithChangedFlowsOutput.length > 0 ? plansWithChangedFlowsOutput : null;\n};\n","<!--\n\n Copyright (C) 2025 The Gravitee team (http://gravitee.io)\n \n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n \n http://www.apache.org/licenses/LICENSE-2.0\n \n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n\n-->\n\n<div class=\"header\">\n @if (!loading) {\n <div class=\"header__apiInfo\">\n <span class=\"gio-badge-primary\">\n {{ apiTypeDisplayable() }}\n </span>\n <span\n class=\"gio-badge-neutral\"\n [matTooltip]=\"connectorsTooltip\"\n matTooltipPosition=\"right\"\n matTooltipClass=\"gio-policy-studio__tooltip-line-break\"\n >\n @for (entrypoint of entrypointsInfo; track entrypoint) {\n <mat-icon class=\"gio-left\" [svgIcon]=\"entrypoint.icon\"></mat-icon>\n }\n @for (endpoint of endpointsInfo; track endpoint) {\n <mat-icon class=\"gio-left\" [svgIcon]=\"endpoint.icon\"></mat-icon>\n }\n </span>\n </div>\n } @else {\n <div class=\"header__apiInfo\">\n <span class=\"gio-badge-primary\">&nbsp;</span>\n <span class=\"gio-badge-neutral\">&nbsp;</span>\n </div>\n }\n\n <div class=\"header__btn\">\n @if (!saving) {\n <button mat-flat-button color=\"primary\" [disabled]=\"loading || disableSaveButton\" (click)=\"onSave()\">Save</button>\n }\n @if (saving) {\n <button mat-flat-button color=\"primary\" disabled>Saving...</button>\n }\n </div>\n</div>\n\n<div class=\"wrapper\">\n <div class=\"wrapper__flowsMenu\">\n <gio-ps-flows-menu\n [readOnly]=\"readOnly\"\n [loading]=\"loading\"\n [apiType]=\"apiType\"\n [flowExecution]=\"flowExecution\"\n [flowsGroups]=\"flowsGroups\"\n [entrypoints]=\"entrypointsInfo\"\n [entrypointsInfo]=\"entrypointsInfo\"\n (flowsGroupsChange)=\"onFlowsGroupsChange($event)\"\n (flowExecutionChange)=\"onFlowExecutionChange($event)\"\n [selectedFlowId]=\"selectedFlow?._id\"\n (selectedFlowIdChange)=\"onSelectFlow($event)\"\n (deleteFlow)=\"onDeleteSelectedFlow($event)\"\n ></gio-ps-flows-menu>\n </div>\n\n <div class=\"wrapper__flowDetails\">\n <gio-ps-flow-details\n [readOnly]=\"readOnly\"\n [loading]=\"loading\"\n [apiType]=\"apiType\"\n [flow]=\"selectedFlow\"\n [entrypointsInfo]=\"entrypointsInfo\"\n [endpointsInfo]=\"endpointsInfo\"\n [policies]=\"policies\"\n [genericPolicies]=\"genericPolicies\"\n [trialUrl]=\"trialUrl\"\n (flowChange)=\"onSelectedFlowChange($event)\"\n (deleteFlow)=\"onDeleteSelectedFlow($event)\"\n ></gio-ps-flow-details>\n </div>\n</div>\n","/*\n * Copyright (C) 2024 The Gravitee team (http://gravitee.io)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { ChangeDetectionStrategy, Component, EventEmitter, Input, OnChanges, Output, SimpleChanges } from '@angular/core';\nimport { EMPTY } from 'rxjs';\nimport { GioFormJsonSchemaModule, GioLoaderModule } from '@gravitee/ui-particles-angular';\n\nimport { GioPolicyStudioDetailsPhaseComponent } from '../components/flow-details-phase/gio-ps-flow-details-phase.component';\nimport {\n ApiType,\n ConnectorInfo,\n ExecutionPhase,\n FlowPhase,\n fromExecutionPhase,\n fromPolicyInput,\n GenericPolicy,\n Policy,\n PolicyDocumentationFetcher,\n PolicyInput,\n PolicySchemaFetcher,\n Step,\n toGenericPolicies,\n} from '../models';\nimport { GioPolicyStudioService } from '../policy-studio/gio-policy-studio.service';\n\nexport type PolicyGroupOutput = Step[];\nexport type PolicyGroupInput = Step[];\n\ntype PolicyGroupVM = {\n name: string;\n description: string;\n startConnectorName: string;\n endConnectorName: string;\n};\n\nconst PROXY_REQUEST_PHASE: PolicyGroupVM = {\n name: 'Request phase',\n description: 'Policies will be applied during the connection establishment',\n startConnectorName: 'Incoming request',\n endConnectorName: 'Outgoing request',\n};\n\nconst PROXY_RESPONSE_PHASE: PolicyGroupVM = {\n name: 'Response phase',\n description: 'Policies will be applied to the response from the initial connection.',\n startConnectorName: 'Incoming response',\n endConnectorName: 'Outgoing response',\n};\n\n@Component({\n selector: 'gio-policy-group-studio',\n imports: [GioPolicyStudioDetailsPhaseComponent, GioFormJsonSchemaModule, GioLoaderModule],\n templateUrl: './gio-policy-group-studio.component.html',\n styleUrl: './gio-policy-group-studio.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class GioPolicyGroupStudioComponent implements OnChanges {\n /**\n * List of policies usable in the studio\n */\n @Input({\n transform: (policies: unknown) => policies ?? [],\n })\n public set policies(value: (PolicyInput | Policy)[]) {\n this._policies = value.map(fromPolicyInput);\n }\n public get policies(): Policy[] {\n return this._policies;\n }\n private _policies: Policy[] = [];\n\n /**\n * Whether the Policy Group Studio is in read-only mode\n */\n @Input()\n public readOnly = false;\n\n /**\n * Type of the API targeted by the Policy Group Studio\n */\n @Input({ required: true })\n public apiType!: ApiType;\n\n /**\n * Execution phase targeted by the Policy Group Studio\n * @deprecated Use `flowPhase` instead. To keep as long as we support APIM < 4.6\n */\n @Input()\n public set executionPhase(value: ExecutionPhase) {\n this.flowPhase = fromExecutionPhase(value);\n }\n\n /**\n * Execution phase targeted by the Policy Group Studio\n */\n @Input()\n public flowPhase!: FlowPhase;\n\n /**\n * Called when Policy Group Studio needs to fetch the policy schema\n * @returns Observable of the policy schema\n */\n @Input({ required: true })\n public policySchemaFetcher: PolicySchemaFetcher = () => EMPTY;\n\n /**\n * Called when Policy Group Studio needs to fetch the policy documentation\n * @returns Observable of the policy documentation\n */\n @Input({ required: true })\n public policyDocumentationFetcher: PolicyDocumentationFetcher = () => EMPTY;\n\n @Input()\n public policyGroup: PolicyGroupInput = [];\n\n /**\n * Output event when the Policy Group Studio changes\n */\n @Output()\n public policyGroupChange: EventEmitter<PolicyGroupOutput> = new EventEmitter<PolicyGroupOutput>();\n\n protected isLoading = true;\n protected createStartConnector: (name: string) => ConnectorInfo[] = name => [\n {\n name,\n icon: 'gio:arrow-right',\n type: 'start',\n supportedModes: [],\n },\n ];\n protected createEndConnector: (name: string) => ConnectorInfo[] = name => [\n {\n name,\n icon: 'gio:arrow-right',\n type: 'end',\n supportedModes: [],\n },\n ];\n protected policyGroupVM?: PolicyGroupVM;\n protected steps: Step[] = [];\n protected trialUrl: string | undefined;\n protected genericPolicies: GenericPolicy[] = [];\n protected startConnector: ConnectorInfo[] = [];\n protected endConnector: ConnectorInfo[] = [];\n\n private phases: Record<`${ApiType}__${FlowPhase}`, PolicyGroupVM | null> = {\n // HTTP Proxy\n PROXY__REQUEST: PROXY_REQUEST_PHASE,\n PROXY__RESPONSE: PROXY_RESPONSE_PHASE,\n PROXY__PUBLISH: null, // n/a\n PROXY__SUBSCRIBE: null, // n/a\n PROXY__CONNECT: null, // n/a\n PROXY__INTERACT: null, // n/a\n // A2A Proxy\n A2A_PROXY__REQUEST: PROXY_REQUEST_PHASE,\n A2A_PROXY__RESPONSE: PROXY_RESPONSE_PHASE,\n A2A_PROXY__PUBLISH: null, // n/a\n A2A_PROXY__SUBSCRIBE: null, // n/a\n A2A_PROXY__CONNECT: null, // n/a\n A2A_PROXY__INTERACT: null, // n/a\n // LLM Proxy\n LLM_PROXY__REQUEST: PROXY_REQUEST_PHASE,\n LLM_PROXY__RESPONSE: PROXY_RESPONSE_PHASE,\n LLM_PROXY__PUBLISH: null, // n/a\n LLM_PROXY__SUBSCRIBE: null, // n/a\n LLM_PROXY__CONNECT: null, // n/a\n LLM_PROXY__INTERACT: null, // n/a\n // MCP Proxy\n MCP_PROXY__REQUEST: PROXY_REQUEST_PHASE,\n MCP_PROXY__RESPONSE: PROXY_RESPONSE_PHASE,\n MCP_PROXY__PUBLISH: null, // n/a\n MCP_PROXY__SUBSCRIBE: null, // n/a\n MCP_PROXY__CONNECT: null, // n/a\n MCP_PROXY__INTERACT: null, // n/a\n // HTTP Message\n MESSAGE__REQUEST: {\n name: 'Request phase',\n description: 'Policies will be applied during the connection establishment',\n startConnectorName: 'Incoming request',\n endConnectorName: 'Outgoing request',\n },\n MESSAGE__RESPONSE: {\n name: 'Response phase',\n description: 'Policies will be applied during the connection termination',\n startConnectorName: 'Incoming response',\n endConnectorName: 'Outgoing response',\n },\n MESSAGE__PUBLISH: {\n name: 'Publish phase',\n description: 'Policies will be applied on messages sent to the endpoint',\n startConnectorName: 'Incoming message request',\n endConnectorName: 'Outgoing message request',\n },\n MESSAGE__SUBSCRIBE: {\n name: 'Subscribe phase',\n description: 'Policies will be applied on messages received by the entrypoint',\n startConnectorName: 'Incoming message response',\n endConnectorName: 'Outgoing message response',\n },\n MESSAGE__CONNECT: null, // n/a\n MESSAGE__INTERACT: null, // n/a\n // NATIVE\n // TODO: To implement we want to make PS compatible with the native API\n NATIVE__CONNECT: null, // n/a\n NATIVE__INTERACT: null, // n/a\n NATIVE__PUBLISH: null, // n/a\n NATIVE__SUBSCRIBE: null, // n/a\n NATIVE__REQUEST: null, // n/a\n NATIVE__RESPONSE: null, // n/a\n };\n\n constructor(private readonly policyStudioService: GioPolicyStudioService) {}\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (changes.policySchemaFetcher) {\n this.policyStudioService.setPolicySchemaFetcher(this.policySchemaFetcher);\n }\n\n if (changes.policyDocumentationFetcher) {\n this.policyStudioService.setPolicyDocumentationFetcher(this.policyDocumentationFetcher);\n }\n if (changes.policies) {\n this.isLoading = false;\n this.genericPolicies = toGenericPolicies(this._policies);\n }\n if (changes.executionPhase || changes.flowPhase) {\n this.policyGroupVM = this.phases[`${this.apiType}__${this.flowPhase}`] ?? undefined;\n this.startConnector = this.createStartConnector(this.policyGroupVM?.startConnectorName ?? '');\n this.endConnector = this.createEndConnector(this.policyGroupVM?.endConnectorName ?? '');\n }\n if (changes.policyGroup) {\n this.steps = this.policyGroup;\n }\n }\n\n protected onStepsChange(steps: Step[]): void {\n this.steps = steps;\n this.policyGroupChange.emit(steps);\n }\n}\n","<!--\n\n Copyright (C) 2024 The Gravitee team (http://gravitee.io)\n \n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n \n http://www.apache.org/licenses/LICENSE-2.0\n \n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n\n-->\n@if (!isLoading && policyGroupVM) {\n <gio-ps-flow-details-phase\n class=\"content__phase\"\n [name]=\"policyGroupVM.name\"\n [description]=\"policyGroupVM.description\"\n [readOnly]=\"readOnly\"\n [startConnector]=\"startConnector\"\n [endConnector]=\"endConnector\"\n [steps]=\"steps\"\n [apiType]=\"apiType\"\n [genericPolicies]=\"genericPolicies\"\n [trialUrl]=\"trialUrl\"\n [policyFlowPhase]=\"flowPhase\"\n (stepsChange)=\"onStepsChange($event)\"\n ></gio-ps-flow-details-phase>\n} @else {\n <gio-loader></gio-loader>\n}\n","/*\n * Copyright (C) 2022 The Gravitee team (http://gravitee.io)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/*\n * Public API Surface of ui-policy-studio-angular\n */\nexport * from './lib/models';\nexport { GioPolicyStudioComponent } from './lib/policy-studio/gio-policy-studio.component';\nexport * from './lib/policy-group-studio/gio-policy-group-studio.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i8","i6","i7","i5","METHODS_AUTOCOMPLETE","sanitizePathFormValue","sanitizeMethodFormValue","sanitizePath","sanitizeMethods","i3","i4","i9","i10","i11","i1.GioPolicyStudioService","i2","i1"],"mappings":"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"}
1
+ {"version":3,"file":"gravitee-ui-policy-studio-angular.mjs","sources":["../../../projects/ui-policy-studio-angular/src/lib/models/flow/FlowExecution.ts","../../../projects/ui-policy-studio-angular/src/lib/models/flow/HttpMethod.ts","../../../projects/ui-policy-studio-angular/src/lib/models/flow/index.ts","../../../projects/ui-policy-studio-angular/src/lib/models/plan/Plan.ts","../../../projects/ui-policy-studio-angular/src/lib/models/plan/index.ts","../../../projects/ui-policy-studio-angular/src/lib/models/policy/Policy.ts","../../../projects/ui-policy-studio-angular/src/lib/models/policy/SharedPolicyGroupPolicy.ts","../../../projects/ui-policy-studio-angular/src/lib/models/policy/GenericPolicy.ts","../../../projects/ui-policy-studio-angular/src/lib/models/policy/index.ts","../../../projects/ui-policy-studio-angular/src/lib/models/ApiProtocolType.ts","../../../projects/ui-policy-studio-angular/src/lib/models/ApiType.ts","../../../projects/ui-policy-studio-angular/src/lib/models/index.ts","../../../projects/ui-policy-studio-angular/src/lib/components/flow-execution-form-dialog/gio-ps-flow-execution-form-dialog.component.ts","../../../projects/ui-policy-studio-angular/src/lib/components/flow-execution-form-dialog/gio-ps-flow-execution-form-dialog.component.html","../../../projects/ui-policy-studio-angular/src/lib/components/flow-form-dialog/flow-message-form-dialog/gio-ps-flow-message-form-dialog.component.ts","../../../projects/ui-policy-studio-angular/src/lib/components/flow-form-dialog/flow-message-form-dialog/gio-ps-flow-message-form-dialog.component.html","../../../projects/ui-policy-studio-angular/src/lib/components/flow-form-dialog/flow-native-form-dialog/gio-ps-flow-native-form-dialog.component.ts","../../../projects/ui-policy-studio-angular/src/lib/components/flow-form-dialog/flow-native-form-dialog/gio-ps-flow-native-form-dialog.component.html","../../../projects/ui-policy-studio-angular/src/lib/components/flow-form-dialog/flow-proxy-form-dialog/gio-ps-flow-proxy-form-dialog.component.ts","../../../projects/ui-policy-studio-angular/src/lib/components/flow-form-dialog/flow-proxy-form-dialog/gio-ps-flow-proxy-form-dialog.component.html","../../../projects/ui-policy-studio-angular/src/lib/components/flow-form-dialog/flow-mcp-form-dialog/gio-ps-flow-mcp-form-dialog.component.ts","../../../projects/ui-policy-studio-angular/src/lib/components/flow-form-dialog/flow-mcp-form-dialog/gio-ps-flow-mcp-form-dialog.component.html","../../../projects/ui-policy-studio-angular/src/lib/components/flow-form-dialog/flow-llm-form-dialog/gio-ps-flow-llm-form-dialog.component.ts","../../../projects/ui-policy-studio-angular/src/lib/components/flow-form-dialog/flow-llm-form-dialog/gio-ps-flow-llm-form-dialog.component.html","../../../projects/ui-policy-studio-angular/src/lib/components/flows-menu/gio-ps-flows-menu.component.ts","../../../projects/ui-policy-studio-angular/src/lib/components/flows-menu/gio-ps-flows-menu.component.html","../../../projects/ui-policy-studio-angular/src/lib/policy-studio/gio-policy-studio.service.ts","../../../projects/ui-policy-studio-angular/src/lib/components/step-form/gio-ps-step-form.component.ts","../../../projects/ui-policy-studio-angular/src/lib/components/step-form/gio-ps-step-form.component.html","../../../projects/ui-policy-studio-angular/src/lib/components/policies-catalog-dialog/gio-ps-policies-catalog-dialog.component.ts","../../../projects/ui-policy-studio-angular/src/lib/components/policies-catalog-dialog/gio-ps-policies-catalog-dialog.component.html","../../../projects/ui-policy-studio-angular/src/lib/components/step-edit-dialog/gio-ps-step-edit-dialog.component.ts","../../../projects/ui-policy-studio-angular/src/lib/components/step-edit-dialog/gio-ps-step-edit-dialog.component.html","../../../projects/ui-policy-studio-angular/src/lib/components/flow-details-phase-step/gio-ps-flow-details-phase-step.component.ts","../../../projects/ui-policy-studio-angular/src/lib/components/flow-details-phase-step/gio-ps-flow-details-phase-step.component.html","../../../projects/ui-policy-studio-angular/src/lib/components/flow-details-phase/gio-ps-flow-details-phase.component.ts","../../../projects/ui-policy-studio-angular/src/lib/components/flow-details-phase/gio-ps-flow-details-phase.component.html","../../../projects/ui-policy-studio-angular/src/lib/components/filter-pipe/gio-flter-connectors-by-mode.pipe.ts","../../../projects/ui-policy-studio-angular/src/lib/components/flow-details-info-bar/gio-ps-flow-details-info-bar.component.ts","../../../projects/ui-policy-studio-angular/src/lib/components/flow-details-info-bar/gio-ps-flow-details-info-bar.component.html","../../../projects/ui-policy-studio-angular/src/lib/components/flow-details/gio-ps-flow-details.component.ts","../../../projects/ui-policy-studio-angular/src/lib/components/flow-details/gio-ps-flow-details.component.html","../../../projects/ui-policy-studio-angular/src/lib/policy-studio/gio-policy-studio.component.ts","../../../projects/ui-policy-studio-angular/src/lib/policy-studio/gio-policy-studio.component.html","../../../projects/ui-policy-studio-angular/src/lib/policy-group-studio/gio-policy-group-studio.component.ts","../../../projects/ui-policy-studio-angular/src/lib/policy-group-studio/gio-policy-group-studio.component.html","../../../projects/ui-policy-studio-angular/src/public-api.ts","../../../projects/ui-policy-studio-angular/src/gravitee-ui-policy-studio-angular.ts"],"sourcesContent":["/*\n * Copyright (C) 2023 The Gravitee team (http://gravitee.io)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * API's flow mode.\n */\nexport type FlowMode = 'BEST_MATCH' | 'DEFAULT';\n\nexport interface FlowExecution {\n mode?: FlowMode;\n /**\n * Is the flow execution match required.\n */\n matchRequired?: boolean;\n}\n","/*\n * Copyright (C) 2015 The Gravitee team (http://gravitee.io)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport const HttpMethods = ['CONNECT', 'DELETE', 'GET', 'HEAD', 'OPTIONS', 'PATCH', 'POST', 'PUT', 'TRACE', 'OTHER'] as const;\nexport type HttpMethod = (typeof HttpMethods)[number];\n\nexport const toHttpMethod: (value: string) => HttpMethod | undefined = (value: string) => {\n switch (value) {\n case 'CONNECT':\n return 'CONNECT';\n case 'DELETE':\n return 'DELETE';\n case 'GET':\n return 'GET';\n case 'HEAD':\n return 'HEAD';\n case 'OPTIONS':\n return 'OPTIONS';\n case 'PATCH':\n return 'PATCH';\n case 'POST':\n return 'POST';\n case 'PUT':\n return 'PUT';\n case 'TRACE':\n return 'TRACE';\n case 'OTHER':\n return 'OTHER';\n default:\n return undefined;\n }\n};\n","/*\n * Copyright (C) 2022 The Gravitee team (http://gravitee.io)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nexport * from './Flow';\nexport * from './FlowExecution';\nexport * from './HttpMethod';\nexport * from './Selector';\nexport * from './Step';\n","/*\n * Copyright (C) 2022 The Gravitee team (http://gravitee.io)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Flow } from '../flow';\n\nexport interface Plan {\n id: string;\n name: string;\n flows: Flow[];\n}\n","/*\n * Copyright (C) 2023 The Gravitee team (http://gravitee.io)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nexport * from './Plan';\n","/*\n * Copyright (C) 2023 The Gravitee team (http://gravitee.io)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { get } from 'lodash';\n\nimport { ApiProtocolType } from '../ApiProtocolType';\n\nexport type FlowPhase = 'REQUEST' | 'RESPONSE' | 'INTERACT' | 'CONNECT' | 'PUBLISH' | 'SUBSCRIBE';\n\nexport interface Policy {\n id: string;\n name: string;\n icon?: string;\n description?: string;\n category?: string;\n version?: string;\n flowPhaseCompatibility?: Partial<Record<ApiProtocolType, FlowPhase[]>>;\n deployed?: boolean;\n}\n\n/**\n * @Deprecated to keep as long as we support APIM < 4.6\n */\nexport type ExecutionPhase = 'REQUEST' | 'RESPONSE' | 'MESSAGE_REQUEST' | 'MESSAGE_RESPONSE';\n\nexport type PolicyInput = Omit<Policy, 'proxy' | 'message'> & {\n proxy?: ExecutionPhase[];\n message?: ExecutionPhase[];\n};\n\n/**\n * @Deprecated to keep as long as we support APIM < 4.6\n */\nexport const fromPolicyInput = (policy: PolicyInput | Policy): Policy => {\n const getProxyPhase = get(policy, 'proxy')?.map(fromExecutionPhase);\n const getMessagePhase = get(policy, 'message')?.map(fromExecutionPhase);\n\n return {\n ...policy,\n flowPhaseCompatibility: {\n ...(getProxyPhase && { HTTP_PROXY: getProxyPhase }),\n ...(getMessagePhase && { HTTP_MESSAGE: getMessagePhase }),\n ...policy.flowPhaseCompatibility,\n },\n };\n};\n\n/**\n * @Deprecated to keep as long as we support APIM < 4.6\n */\nexport const fromExecutionPhase = (phase: ExecutionPhase | FlowPhase): FlowPhase => {\n if (phase === 'MESSAGE_REQUEST') {\n return 'PUBLISH';\n }\n if (phase === 'MESSAGE_RESPONSE') {\n return 'SUBSCRIBE';\n }\n return phase;\n};\n","/*\n * Copyright (C) 2023 The Gravitee team (http://gravitee.io)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { ApiType } from '../ApiType';\n\nimport { FlowPhase } from './Policy';\n\nexport type SharedPolicyGroupPolicy = {\n id: string;\n policyId: string;\n name: string;\n description?: string;\n prerequisiteMessage?: string;\n apiType: ApiType;\n phase: FlowPhase;\n};\n","/*\n * Copyright (C) 2024 The Gravitee team (http://gravitee.io)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { SharedPolicyGroupPolicy } from './SharedPolicyGroupPolicy';\nimport { Policy } from './Policy';\n\ntype CommonGenericPolicy = {\n _id: string;\n policyId: string;\n icon?: string;\n category?: string;\n type: 'POLICY' | 'SHARED_POLICY_GROUP';\n};\n\nexport type GenericPolicyPolicy = CommonGenericPolicy & {\n type: 'POLICY';\n} & Omit<Policy, 'id'>;\n\nexport type GenericPolicySharedPolicyGroupPolicy = CommonGenericPolicy & {\n type: 'SHARED_POLICY_GROUP';\n sharedPolicyGroupId: string;\n} & Omit<SharedPolicyGroupPolicy, 'id'>;\n\nexport type GenericPolicy = GenericPolicyPolicy | GenericPolicySharedPolicyGroupPolicy;\n\nexport const isSharedPolicyGroupPolicy = (policy: GenericPolicy): policy is GenericPolicySharedPolicyGroupPolicy =>\n policy.type === 'SHARED_POLICY_GROUP';\nexport const isPolicy = (policy: GenericPolicy): policy is GenericPolicyPolicy => policy.type === 'POLICY';\n\nexport const toGenericPolicies = (policies: Policy[], sharedPolicyGroupPolicies: SharedPolicyGroupPolicy[] = []): GenericPolicy[] => {\n return [\n ...policies.map(policy => ({ _id: `POLICY_${policy.id}`, policyId: policy.id, type: 'POLICY' as const, ...policy })),\n ...sharedPolicyGroupPolicies.map(sharedPolicyGroupPolicy => ({\n _id: `SHARED_POLICY_GROUP_${sharedPolicyGroupPolicy.id}`,\n type: 'SHARED_POLICY_GROUP' as const,\n category: 'Shared Policy Group',\n sharedPolicyGroupId: sharedPolicyGroupPolicy.id,\n ...sharedPolicyGroupPolicy,\n })),\n ];\n};\n\nexport const toPolicy = (genericPolicy: GenericPolicy): Policy => {\n if (isPolicy(genericPolicy)) {\n return {\n id: genericPolicy.policyId,\n ...genericPolicy,\n };\n }\n throw new Error('Cannot convert a Shared Policy Group Policy to a Policy');\n};\n","/*\n * Copyright (C) 2023 The Gravitee team (http://gravitee.io)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nexport * from './Policy';\nexport * from './SharedPolicyGroupPolicy';\nexport * from './GenericPolicy';\n","/*\n * Copyright (C) 2023 The Gravitee team (http://gravitee.io)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport type ApiProtocolType = 'A2A_PROXY' | 'HTTP_MESSAGE' | 'HTTP_PROXY' | 'LLM_PROXY' | 'MCP_PROXY' | 'NATIVE_KAFKA';\n","/*\n * Copyright (C) 2023 The Gravitee team (http://gravitee.io)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport type ApiType = 'A2A_PROXY' | 'LLM_PROXY' | 'MCP_PROXY' | 'MESSAGE' | 'NATIVE' | 'PROXY';\n","/*\n * Copyright (C) 2022 The Gravitee team (http://gravitee.io)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nexport * from './flow';\nexport * from './plan';\nexport * from './policy';\n\nexport * from './ConnectorsInfo';\nexport * from './SaveOutput';\nexport * from './PolicySchemaFetcher';\nexport * from './ApiProtocolType';\nexport * from './ApiType';\n","/*\n * Copyright (C) 2015 The Gravitee team (http://gravitee.io)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { Component, Inject } from '@angular/core';\nimport { MatDialogRef, MAT_DIALOG_DATA, MatDialogModule } from '@angular/material/dialog';\nimport { ReactiveFormsModule, UntypedFormControl, UntypedFormGroup } from '@angular/forms';\nimport { cloneDeep } from 'lodash';\nimport { MatButtonModule } from '@angular/material/button';\nimport { GioBannerModule, GioFormSlideToggleModule, GioIconsModule } from '@gravitee/ui-particles-angular';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\n\nimport { FlowExecution } from '../../models';\n\nexport type GioPolicyStudioFlowExecutionFormDialogData = {\n flowExecution?: FlowExecution;\n readOnly?: boolean;\n};\n\n@Component({\n imports: [\n ReactiveFormsModule,\n MatButtonModule,\n MatDialogModule,\n MatFormFieldModule,\n MatSelectModule,\n MatSlideToggleModule,\n GioFormSlideToggleModule,\n GioBannerModule,\n GioIconsModule,\n ],\n selector: 'gio-ps-flow-execution-form-dialog',\n templateUrl: './gio-ps-flow-execution-form-dialog.component.html',\n styleUrls: ['./gio-ps-flow-execution-form-dialog.component.scss'],\n})\nexport class GioPolicyStudioFlowExecutionFormDialogComponent {\n public flowExecutionFormGroup?: UntypedFormGroup;\n\n public existingFlowExecution?: FlowExecution;\n\n public readOnly = false;\n\n constructor(\n public dialogRef: MatDialogRef<GioPolicyStudioFlowExecutionFormDialogComponent, FlowExecution | undefined>,\n @Inject(MAT_DIALOG_DATA) flowDialogData: GioPolicyStudioFlowExecutionFormDialogData,\n ) {\n this.existingFlowExecution = cloneDeep(flowDialogData?.flowExecution);\n\n this.flowExecutionFormGroup = new UntypedFormGroup({\n mode: new UntypedFormControl(flowDialogData?.flowExecution?.mode ?? 'DEFAULT'),\n matchRequired: new UntypedFormControl(flowDialogData?.flowExecution?.matchRequired ?? false),\n });\n\n this.readOnly = Boolean(flowDialogData.readOnly);\n\n if (this.readOnly) {\n this.flowExecutionFormGroup.disable({ emitEvent: false });\n }\n }\n\n public onSubmit(): void {\n const flowExecutionToSave: FlowExecution = {\n ...this.existingFlowExecution,\n mode: this.flowExecutionFormGroup?.get('mode')?.value,\n matchRequired: this.flowExecutionFormGroup?.get('matchRequired')?.value,\n };\n\n this.dialogRef.close({\n ...flowExecutionToSave,\n });\n }\n}\n","<!--\n\n Copyright (C) 2025 The Gravitee team (http://gravitee.io)\n \n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n \n http://www.apache.org/licenses/LICENSE-2.0\n \n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n\n-->\n<h2 mat-dialog-title class=\"title\">\n Flow execution\n\n <button class=\"title__closeBtn\" mat-icon-button aria-label=\"Close dialog\" [mat-dialog-close]=\"\">\n <mat-icon svgIcon=\"gio:cancel\"></mat-icon>\n </button>\n</h2>\n\n@if (flowExecutionFormGroup) {\n <mat-dialog-content class=\"content\" [formGroup]=\"flowExecutionFormGroup\">\n <div class=\"content__row\">\n <gio-banner-info>\n By default, flow selection is based on the operators defined in your flows, either when it “matches with” or “starts with” a path.\n You can choose the \"Best match\" option to select a flow from the closest path.\n </gio-banner-info>\n </div>\n <div class=\"content__row\">\n <mat-form-field>\n <mat-label>Default flow mode</mat-label>\n <mat-select formControlName=\"mode\">\n <mat-option value=\"BEST_MATCH\">Best Match</mat-option>\n <mat-option value=\"DEFAULT\">Default</mat-option>\n </mat-select>\n <mat-hint>Change how the flow selection is made</mat-hint>\n </mat-form-field>\n </div>\n <div class=\"content__row\">\n <gio-form-slide-toggle>\n <gio-form-label>Fail on flow mismatch</gio-form-label>\n Respond with an error when requests don’t match any defined flow\n <mat-slide-toggle gioFormSlideToggle formControlName=\"matchRequired\"></mat-slide-toggle>\n </gio-form-slide-toggle>\n </div>\n </mat-dialog-content>\n}\n\n<mat-dialog-actions class=\"actions\" align=\"end\">\n <button [disabled]=\"readOnly\" class=\"actions__cancelBtn\" mat-button [mat-dialog-close]=\"\">Cancel</button>\n <button [disabled]=\"readOnly\" class=\"actions__saveBtn\" color=\"primary\" mat-flat-button role=\"dialog\" (click)=\"onSubmit()\">Save</button>\n</mat-dialog-actions>\n","/*\n * Copyright (C) 2015 The Gravitee team (http://gravitee.io)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { Component, Inject } from '@angular/core';\nimport { MatDialogRef, MAT_DIALOG_DATA, MatDialogModule } from '@angular/material/dialog';\nimport { ReactiveFormsModule, UntypedFormControl, UntypedFormGroup } from '@angular/forms';\nimport { cloneDeep, uniqueId } from 'lodash';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\nimport { GioBannerModule, GioElAssistantComponent, GioFormSlideToggleModule, GioIconsModule } from '@gravitee/ui-particles-angular';\nimport { MatInputModule } from '@angular/material/input';\n\nimport { GioPolicyStudioFlowFormDialogResult } from '../gio-ps-flow-form-dialog-result.model';\nimport { ChannelSelector, ConditionSelector, ConnectorInfo } from '../../../models';\nimport { FlowVM } from '../../../policy-studio/gio-policy-studio.model';\n\nexport type GioPolicyStudioFlowMessageFormDialogData = {\n flow?: FlowVM;\n entrypoints?: ConnectorInfo[];\n};\n\n@Component({\n imports: [\n ReactiveFormsModule,\n MatButtonModule,\n MatDialogModule,\n MatFormFieldModule,\n MatSelectModule,\n MatInputModule,\n MatSlideToggleModule,\n GioFormSlideToggleModule,\n GioBannerModule,\n GioIconsModule,\n GioElAssistantComponent,\n ],\n selector: 'gio-ps-flow-message-form-dialog',\n templateUrl: './gio-ps-flow-message-form-dialog.component.html',\n styleUrls: ['./gio-ps-flow-message-form-dialog.component.scss'],\n})\nexport class GioPolicyStudioFlowMessageFormDialogComponent {\n public entrypoints: ConnectorInfo[] = [];\n public flowFormGroup?: UntypedFormGroup;\n\n public existingFlow?: FlowVM;\n public mode: 'create' | 'edit' = 'create';\n\n constructor(\n public dialogRef: MatDialogRef<GioPolicyStudioFlowMessageFormDialogComponent, GioPolicyStudioFlowFormDialogResult>,\n @Inject(MAT_DIALOG_DATA) flowDialogData: GioPolicyStudioFlowMessageFormDialogData,\n ) {\n this.entrypoints = flowDialogData?.entrypoints ?? [];\n\n this.existingFlow = cloneDeep(flowDialogData?.flow);\n this.mode = this.existingFlow ? 'edit' : 'create';\n\n const channelSelector = flowDialogData?.flow?.selectors?.find(s => s.type === 'CHANNEL') as ChannelSelector;\n const conditionSelector = flowDialogData?.flow?.selectors?.find(s => s.type === 'CONDITION') as ConditionSelector;\n\n this.flowFormGroup = new UntypedFormGroup({\n name: new UntypedFormControl(flowDialogData?.flow?.name ?? ''),\n channelOperator: new UntypedFormControl(channelSelector?.channelOperator ?? 'EQUALS'),\n channel: new UntypedFormControl(channelSelector?.channel ?? ''),\n operations: new UntypedFormControl(channelSelector?.operations ?? []),\n entrypoints: new UntypedFormControl(channelSelector?.entrypoints ?? []),\n condition: new UntypedFormControl(conditionSelector?.condition ?? ''),\n });\n }\n\n public onSubmit(): void {\n const channelSelectorToSave: ChannelSelector = {\n type: 'CHANNEL',\n channel: this.flowFormGroup?.get('channel')?.value,\n channelOperator: this.flowFormGroup?.get('channelOperator')?.value,\n operations: this.flowFormGroup?.get('operations')?.value,\n entrypoints: this.flowFormGroup?.get('entrypoints')?.value,\n };\n\n const conditionValue: string = this.flowFormGroup?.get('condition')?.value;\n const conditionSelectorToSave: ConditionSelector | undefined = conditionValue\n ? {\n type: 'CONDITION',\n condition: conditionValue,\n }\n : undefined;\n\n const flowToSave: FlowVM = {\n // New id for new flow\n _id: uniqueId('flow_'),\n // If existing flow, keep root props\n ...this.existingFlow,\n // Mark as changed\n _hasChanged: true,\n // Add changes\n name: this.flowFormGroup?.get('name')?.value,\n selectors: conditionSelectorToSave ? [channelSelectorToSave, conditionSelectorToSave] : [channelSelectorToSave],\n enabled: this.existingFlow ? this.existingFlow.enabled : true,\n };\n\n this.dialogRef.close({\n ...flowToSave,\n });\n }\n}\n","<!--\n\n Copyright (C) 2025 The Gravitee team (http://gravitee.io)\n \n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n \n http://www.apache.org/licenses/LICENSE-2.0\n \n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n\n-->\n<h2 mat-dialog-title class=\"title\">\n {{ mode === 'create' ? 'Create a new flow' : 'Edit flow'\n }}<button class=\"title__closeBtn\" mat-icon-button aria-label=\"Close dialog\" [mat-dialog-close]=\"false\">\n <mat-icon svgIcon=\"gio:cancel\"></mat-icon>\n </button>\n</h2>\n\n@if (flowFormGroup) {\n <mat-dialog-content class=\"content\" [formGroup]=\"flowFormGroup\">\n <p>Flows allow you to apply different policies per event phases. For example you can reroute calls based on the URL specified.</p>\n <div class=\"content__row\">\n <mat-form-field>\n <mat-label>Flow name</mat-label>\n <input matInput formControlName=\"name\" cdkFocusInitial />\n <mat-hint>Names will be automatically generated with channel and operation if left blank.</mat-hint>\n </mat-form-field>\n </div>\n <div class=\"content__row\">\n <mat-form-field>\n <mat-label>Operator</mat-label>\n <mat-select formControlName=\"channelOperator\">\n <mat-option value=\"EQUALS\">Equals</mat-option>\n <mat-option value=\"STARTS_WITH\">Starts with</mat-option>\n </mat-select>\n <mat-hint>Channel operator.</mat-hint>\n </mat-form-field>\n <mat-form-field>\n <mat-label>Channel</mat-label>\n <input matInput formControlName=\"channel\" />\n <mat-hint>Publish or Subscribe channel. This is the path of your request.</mat-hint>\n </mat-form-field>\n </div>\n <div class=\"content__row\">\n <mat-form-field>\n <mat-label>Entrypoints</mat-label>\n <mat-select multiple formControlName=\"entrypoints\">\n @for (entrypoint of entrypoints; track entrypoint) {\n <mat-option [value]=\"entrypoint.type\">{{ entrypoint.name }}</mat-option>\n }\n </mat-select>\n <mat-hint>Entrypoints where your flow will be executed. They will all be executed if left empty.</mat-hint>\n </mat-form-field>\n </div>\n <div class=\"content__row\">\n <mat-form-field>\n <mat-label>Entrypoints supported operations</mat-label>\n <mat-select multiple formControlName=\"operations\">\n <mat-option value=\"PUBLISH\">Publish</mat-option>\n <mat-option value=\"SUBSCRIBE\">Subscribe</mat-option>\n </mat-select>\n <mat-hint>They will all be supported if left empty.</mat-hint>\n </mat-form-field>\n </div>\n <div class=\"content__row\">\n <mat-form-field>\n <mat-label>Condition</mat-label>\n <input matInput formControlName=\"condition\" />\n <mat-hint>Condition to execute the flow, supports Expression Language.</mat-hint>\n <gio-el-assistant matSuffix />\n </mat-form-field>\n </div>\n </mat-dialog-content>\n}\n\n<mat-dialog-actions class=\"actions\" align=\"end\">\n <button class=\"actions__cancelBtn\" mat-button [mat-dialog-close]=\"false\">Cancel</button>\n <button class=\"actions__saveBtn\" color=\"primary\" mat-flat-button role=\"dialog\" (click)=\"onSubmit()\">\n {{ mode === 'create' ? 'Create' : 'Save' }}\n </button>\n</mat-dialog-actions>\n","/*\n * Copyright (C) 2015 The Gravitee team (http://gravitee.io)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { Component, Inject } from '@angular/core';\nimport { MatDialogRef, MAT_DIALOG_DATA, MatDialogModule } from '@angular/material/dialog';\nimport { ReactiveFormsModule, UntypedFormControl, UntypedFormGroup } from '@angular/forms';\nimport { capitalize, cloneDeep, isEmpty, trim, uniqueId } from 'lodash';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\nimport { GioBannerModule, GioFormSlideToggleModule, GioFormTagsInputModule, GioIconsModule } from '@gravitee/ui-particles-angular';\n\nimport { GioPolicyStudioFlowFormDialogResult } from '../gio-ps-flow-form-dialog-result.model';\nimport { FlowVM } from '../../../policy-studio/gio-policy-studio.model';\n\nexport type GioPolicyStudioFlowNativeFormDialogData = {\n flow?: FlowVM;\n parentGroupName?: string;\n};\n\n@Component({\n imports: [\n ReactiveFormsModule,\n MatButtonModule,\n MatDialogModule,\n MatFormFieldModule,\n MatSelectModule,\n MatInputModule,\n MatSlideToggleModule,\n GioFormSlideToggleModule,\n GioBannerModule,\n GioIconsModule,\n GioFormTagsInputModule,\n ],\n selector: 'gio-ps-flow-native-form-dialog',\n templateUrl: './gio-ps-flow-native-form-dialog.component.html',\n styleUrls: ['./gio-ps-flow-native-form-dialog.component.scss'],\n})\nexport class GioPolicyStudioFlowNativeFormDialogComponent {\n public flowFormGroup?: UntypedFormGroup;\n\n public existingFlow?: FlowVM;\n public mode: 'create' | 'edit' = 'create';\n\n private defaultFlowName;\n\n constructor(\n public dialogRef: MatDialogRef<GioPolicyStudioFlowNativeFormDialogComponent, GioPolicyStudioFlowFormDialogResult>,\n @Inject(MAT_DIALOG_DATA) flowDialogData: GioPolicyStudioFlowNativeFormDialogData,\n ) {\n this.existingFlow = cloneDeep(flowDialogData?.flow);\n this.mode = this.existingFlow ? 'edit' : 'create';\n\n this.flowFormGroup = new UntypedFormGroup({\n name: new UntypedFormControl(flowDialogData?.flow?.name ?? ''),\n });\n\n this.defaultFlowName = capitalize(flowDialogData.parentGroupName) + ' flow';\n }\n\n public onSubmit(): void {\n const flowToSave: FlowVM = {\n // New id for new flow\n _id: uniqueId('flow_'),\n // If existing flow, keep root props\n ...this.existingFlow,\n // Mark as changed\n _hasChanged: true,\n // Add changes\n name: this.getFlowName(),\n enabled: this.existingFlow ? this.existingFlow.enabled : true,\n };\n\n this.dialogRef.close({\n ...flowToSave,\n });\n }\n\n private getFlowName(): string {\n const inputName = trim(this.flowFormGroup?.get('name')?.value);\n return isEmpty(inputName) ? this.defaultFlowName : inputName;\n }\n}\n","<!--\n\n Copyright (C) 2025 The Gravitee team (http://gravitee.io)\n \n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n \n http://www.apache.org/licenses/LICENSE-2.0\n \n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n\n-->\n<h2 mat-dialog-title class=\"title\">\n {{ mode === 'create' ? 'Create a new flow' : 'Edit flow' }}\n\n <button class=\"title__closeBtn\" mat-icon-button aria-label=\"Close dialog\" [mat-dialog-close]=\"false\">\n <mat-icon svgIcon=\"gio:cancel\"></mat-icon>\n </button>\n</h2>\n\n@if (flowFormGroup) {\n <mat-dialog-content class=\"content\" [formGroup]=\"flowFormGroup\">\n <p>Flow allow you to apply different policies. Only one flow is allowed for a native API.</p>\n <div class=\"content__row\">\n <mat-form-field>\n <mat-label>Flow name</mat-label>\n <input matInput formControlName=\"name\" cdkFocusInitial />\n <mat-hint>Names will be automatically generated if left blank</mat-hint>\n </mat-form-field>\n </div>\n </mat-dialog-content>\n}\n\n<mat-dialog-actions class=\"actions\" align=\"end\">\n <button class=\"actions__cancelBtn\" mat-button [mat-dialog-close]=\"false\">Cancel</button>\n <button class=\"actions__saveBtn\" color=\"primary\" mat-flat-button role=\"dialog\" (click)=\"onSubmit()\">\n {{ mode === 'create' ? 'Create' : 'Save' }}\n </button>\n</mat-dialog-actions>\n","/*\n * Copyright (C) 2015 The Gravitee team (http://gravitee.io)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { Component, Inject } from '@angular/core';\nimport { MatDialogRef, MAT_DIALOG_DATA, MatDialogModule } from '@angular/material/dialog';\nimport { ReactiveFormsModule, UntypedFormControl, UntypedFormGroup } from '@angular/forms';\nimport { cloneDeep, uniqueId } from 'lodash';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\nimport {\n GioBannerModule,\n GioElAssistantComponent,\n GioFormSlideToggleModule,\n GioFormTagsInputModule,\n GioIconsModule,\n} from '@gravitee/ui-particles-angular';\n\nimport { GioPolicyStudioFlowFormDialogResult } from '../gio-ps-flow-form-dialog-result.model';\nimport { ConditionSelector, HttpMethod, HttpMethods, HttpSelector } from '../../../models';\nimport { FlowVM } from '../../../policy-studio/gio-policy-studio.model';\n\nexport type GioPolicyStudioFlowProxyFormDialogData = {\n flow?: FlowVM;\n};\n\ntype HttpMethodVM = HttpMethod | 'ALL';\n\nconst METHODS_AUTOCOMPLETE: HttpMethodVM[] = ['ALL', ...HttpMethods];\n\n@Component({\n imports: [\n ReactiveFormsModule,\n MatButtonModule,\n MatDialogModule,\n MatFormFieldModule,\n MatSelectModule,\n MatInputModule,\n MatSlideToggleModule,\n GioFormSlideToggleModule,\n GioBannerModule,\n GioIconsModule,\n GioFormTagsInputModule,\n GioElAssistantComponent,\n ],\n selector: 'gio-ps-flow-proxy-form-dialog',\n templateUrl: './gio-ps-flow-proxy-form-dialog.component.html',\n styleUrls: ['./gio-ps-flow-proxy-form-dialog.component.scss'],\n})\nexport class GioPolicyStudioFlowProxyFormDialogComponent {\n public flowFormGroup?: UntypedFormGroup;\n\n public existingFlow?: FlowVM;\n public mode: 'create' | 'edit' = 'create';\n public methods = METHODS_AUTOCOMPLETE;\n\n constructor(\n public dialogRef: MatDialogRef<GioPolicyStudioFlowProxyFormDialogComponent, GioPolicyStudioFlowFormDialogResult>,\n @Inject(MAT_DIALOG_DATA) flowDialogData: GioPolicyStudioFlowProxyFormDialogData,\n ) {\n this.existingFlow = cloneDeep(flowDialogData?.flow);\n this.mode = this.existingFlow ? 'edit' : 'create';\n\n const httpSelector = flowDialogData?.flow?.selectors?.find(s => s.type === 'HTTP') as HttpSelector;\n const conditionSelector = flowDialogData?.flow?.selectors?.find(s => s.type === 'CONDITION') as ConditionSelector;\n\n this.flowFormGroup = new UntypedFormGroup({\n name: new UntypedFormControl(flowDialogData?.flow?.name ?? ''),\n pathOperator: new UntypedFormControl(httpSelector?.pathOperator ?? 'EQUALS'),\n path: new UntypedFormControl(sanitizePathFormValue(httpSelector?.path)),\n methods: new UntypedFormControl(sanitizeMethodFormValue(httpSelector?.methods)),\n condition: new UntypedFormControl(conditionSelector?.condition ?? ''),\n });\n }\n\n public onSubmit(): void {\n const httpSelectorToSave: HttpSelector = {\n type: 'HTTP',\n path: sanitizePath(this.flowFormGroup?.get('path')?.value),\n pathOperator: this.flowFormGroup?.get('pathOperator')?.value,\n methods: sanitizeMethods(this.flowFormGroup?.get('methods')?.value),\n };\n\n const conditionValue: string = this.flowFormGroup?.get('condition')?.value;\n const conditionSelectorToSave: ConditionSelector | undefined = conditionValue\n ? {\n type: 'CONDITION',\n condition: conditionValue,\n }\n : undefined;\n\n const flowToSave: FlowVM = {\n // New id for new flow\n _id: uniqueId('flow_'),\n // If existing flow, keep root props\n ...this.existingFlow,\n // Mark as changed\n _hasChanged: true,\n // Add changes\n name: this.flowFormGroup?.get('name')?.value,\n selectors: conditionSelectorToSave ? [httpSelectorToSave, conditionSelectorToSave] : [httpSelectorToSave],\n enabled: this.existingFlow ? this.existingFlow.enabled : true,\n };\n\n this.dialogRef.close({\n ...flowToSave,\n });\n }\n\n public tagValidationHook(tag: string, validationCb: (shouldAddTag: boolean) => void) {\n validationCb(METHODS_AUTOCOMPLETE.map(m => `${m}`).includes(tag.toUpperCase()));\n }\n}\n\nconst sanitizeMethods: (value: HttpMethodVM[]) => HttpMethod[] = (value?: HttpMethodVM[]) => {\n if (!value || value.find(m => m === 'ALL')) return [];\n return value as HttpMethod[];\n};\n\nconst sanitizeMethodFormValue: (methods?: HttpMethod[]) => HttpMethodVM[] = (methods?: HttpMethod[]) => {\n if (!methods || methods.length === 0) return ['ALL'];\n return methods;\n};\n\nexport const sanitizePath = (path: string) => {\n if (!path || !path.startsWith('/')) {\n return `/${path}`;\n }\n return path;\n};\n\nconst sanitizePathFormValue = (path: string | undefined) => {\n if (path && path.startsWith('/')) {\n return path.substring(1);\n }\n return path ?? '';\n};\n","<!--\n\n Copyright (C) 2025 The Gravitee team (http://gravitee.io)\n \n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n \n http://www.apache.org/licenses/LICENSE-2.0\n \n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n\n-->\n<h2 mat-dialog-title class=\"title\">\n {{ mode === 'create' ? 'Create a new flow' : 'Edit flow' }}\n\n <button class=\"title__closeBtn\" mat-icon-button aria-label=\"Close dialog\" [mat-dialog-close]=\"false\">\n <mat-icon svgIcon=\"gio:cancel\"></mat-icon>\n </button>\n</h2>\n\n@if (flowFormGroup) {\n <mat-dialog-content class=\"content\" [formGroup]=\"flowFormGroup\">\n <p>\n Flows allow you to apply different policies per HTTP path and/or method. For example you can reroute calls based on the URL specified.\n </p>\n <div class=\"content__row\">\n <mat-form-field>\n <mat-label>Flow name</mat-label>\n <input matInput formControlName=\"name\" cdkFocusInitial />\n <mat-hint>Names will be automatically generated with path and method if left blank</mat-hint>\n </mat-form-field>\n </div>\n <div class=\"content__row\">\n <mat-form-field>\n <mat-label>Operator</mat-label>\n <mat-select formControlName=\"pathOperator\">\n <mat-option value=\"EQUALS\">Equals</mat-option>\n <mat-option value=\"STARTS_WITH\">Starts with</mat-option>\n </mat-select>\n <mat-hint>Path operator</mat-hint>\n </mat-form-field>\n <mat-form-field>\n <mat-label>Path</mat-label>\n <span matTextPrefix>/&nbsp;</span>\n <input matInput formControlName=\"path\" />\n <mat-hint>Path</mat-hint>\n </mat-form-field>\n </div>\n <div class=\"content__row\">\n <mat-form-field>\n <mat-label>Methods for your flow</mat-label>\n <gio-form-tags-input\n formControlName=\"methods\"\n [autocompleteOptions]=\"methods\"\n [tagValidationHook]=\"tagValidationHook\"\n ></gio-form-tags-input>\n </mat-form-field>\n </div>\n <div class=\"content__row\">\n <mat-form-field>\n <mat-label>Condition</mat-label>\n <input matInput formControlName=\"condition\" />\n <mat-hint>Condition to execute the flow, supports Expression Language</mat-hint>\n <gio-el-assistant matSuffix />\n </mat-form-field>\n </div>\n </mat-dialog-content>\n}\n\n<mat-dialog-actions class=\"actions\" align=\"end\">\n <button class=\"actions__cancelBtn\" mat-button [mat-dialog-close]=\"false\">Cancel</button>\n <button class=\"actions__saveBtn\" color=\"primary\" mat-flat-button role=\"dialog\" (click)=\"onSubmit()\">\n {{ mode === 'create' ? 'Create' : 'Save' }}\n </button>\n</mat-dialog-actions>\n","/*\n * Copyright (C) 2015 The Gravitee team (http://gravitee.io)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { Component, Inject } from '@angular/core';\nimport { MatDialogRef, MAT_DIALOG_DATA, MatDialogModule } from '@angular/material/dialog';\nimport { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms';\nimport { capitalize, cloneDeep, isEmpty, trim, uniqueId } from 'lodash';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\nimport {\n GioBannerModule,\n GioElAssistantComponent,\n GioFormSlideToggleModule,\n GioFormTagsInputModule,\n GioIconsModule,\n} from '@gravitee/ui-particles-angular';\n\nimport { GioPolicyStudioFlowFormDialogResult } from '../gio-ps-flow-form-dialog-result.model';\nimport { FlowVM } from '../../../policy-studio/gio-policy-studio.model';\nimport { ConditionSelector, McpSelector } from '../../../models';\n\nexport type GioPolicyStudioFlowMcpFormDialogData = {\n flow?: FlowVM;\n parentGroupName?: string;\n};\n\nconst MCP_METHODS: {\n groupLabel: string;\n groupOptions: { value: string; label: string }[];\n}[] = [\n {\n groupLabel: 'Lifecycle Methods',\n groupOptions: [\n { value: 'initialize', label: 'initialize' },\n { value: 'notifications/initialized', label: 'notifications/initialized' },\n { value: 'ping', label: 'ping' },\n { value: 'notifications/progress', label: 'notifications/progress' },\n { value: 'completion/complete', label: 'completion/complete' },\n ],\n },\n {\n groupLabel: 'Tool Methods',\n groupOptions: [\n { value: 'tools/list', label: 'tools/list' },\n { value: 'tools/call', label: 'tools/call' },\n { value: 'notifications/tools/list_changed', label: 'notifications/tools/list_changed' },\n ],\n },\n {\n groupLabel: 'Resources Methods',\n groupOptions: [\n { value: 'resources/list', label: 'resources/list' },\n { value: 'resources/read', label: 'resources/read' },\n { value: 'notifications/resources/list_changed', label: 'notifications/resources/list_changed' },\n { value: 'notifications/resources/updated', label: 'notifications/resources/updated' },\n { value: 'resources/templates/list', label: 'resources/templates/list' },\n { value: 'resources/subscribe', label: 'resources/subscribe' },\n { value: 'resources/unsubscribe', label: 'resources/unsubscribe' },\n ],\n },\n {\n groupLabel: 'Prompt Methods',\n groupOptions: [\n { value: 'prompts/list', label: 'prompts/list' },\n { value: 'prompts/get', label: 'prompts/get' },\n { value: 'notifications/prompts/list_changed', label: 'notifications/prompts/list_changed' },\n ],\n },\n {\n groupLabel: 'Logging Methods',\n groupOptions: [\n { value: 'logging/setLevel', label: 'logging/setLevel' },\n { value: 'notifications/message', label: 'notifications/message' },\n ],\n },\n {\n groupLabel: 'Roots Methods',\n groupOptions: [\n { value: 'roots/list', label: 'roots/list' },\n { value: 'notifications/roots/list_changed', label: 'notifications/roots/list_changed' },\n ],\n },\n {\n groupLabel: 'Sampling Methods',\n groupOptions: [{ value: 'sampling/createMessage', label: 'sampling/createMessage' }],\n },\n {\n groupLabel: 'Elicitation Methods',\n groupOptions: [{ value: 'elicitation/create', label: 'elicitation/create' }],\n },\n];\n\n@Component({\n imports: [\n ReactiveFormsModule,\n MatButtonModule,\n MatDialogModule,\n MatFormFieldModule,\n MatSelectModule,\n MatInputModule,\n MatSlideToggleModule,\n GioFormSlideToggleModule,\n GioBannerModule,\n GioIconsModule,\n GioFormTagsInputModule,\n GioElAssistantComponent,\n ],\n selector: 'gio-ps-flow-mcp-form-dialog',\n templateUrl: './gio-ps-flow-mcp-form-dialog.component.html',\n styleUrls: ['./gio-ps-flow-mcp-form-dialog.component.scss'],\n})\nexport class GioPolicyStudioFlowMcpFormDialogComponent {\n public flowFormGroup?: FormGroup<{\n name: FormControl<string | null>;\n mcpMethods: FormControl<string[] | null>;\n condition: FormControl<string | null>;\n }>;\n\n public existingFlow?: FlowVM;\n public mode: 'create' | 'edit' = 'create';\n public methods = MCP_METHODS;\n\n private defaultFlowName;\n\n constructor(\n public dialogRef: MatDialogRef<GioPolicyStudioFlowMcpFormDialogComponent, GioPolicyStudioFlowFormDialogResult>,\n @Inject(MAT_DIALOG_DATA) flowDialogData: GioPolicyStudioFlowMcpFormDialogData,\n ) {\n this.existingFlow = cloneDeep(flowDialogData?.flow);\n this.mode = this.existingFlow ? 'edit' : 'create';\n\n const mcpSelector = flowDialogData?.flow?.selectors?.find(s => s.type === 'MCP') as McpSelector;\n const conditionSelector = flowDialogData?.flow?.selectors?.find(s => s.type === 'CONDITION') as ConditionSelector;\n\n this.flowFormGroup = new FormGroup({\n name: new FormControl(flowDialogData?.flow?.name ?? ''),\n mcpMethods: new FormControl(mcpSelector?.methods ?? []),\n condition: new FormControl(conditionSelector?.condition ?? ''),\n });\n\n this.defaultFlowName = capitalize(flowDialogData.parentGroupName) + ' flow';\n }\n\n public onSubmit(): void {\n const mcpSelectorToSave: McpSelector = {\n type: 'MCP',\n methods: this.flowFormGroup?.get('mcpMethods')?.value ?? undefined,\n };\n\n const conditionValue = this.flowFormGroup?.get('condition')?.value ?? undefined;\n const conditionSelectorToSave: ConditionSelector | undefined = conditionValue\n ? {\n type: 'CONDITION',\n condition: conditionValue,\n }\n : undefined;\n\n const flowToSave: FlowVM = {\n // New id for new flow\n _id: uniqueId('flow_'),\n // If existing flow, keep root props\n ...this.existingFlow,\n // Mark as changed\n _hasChanged: true,\n // Add changes\n name: this.getFlowName(),\n enabled: this.existingFlow ? this.existingFlow.enabled : true,\n selectors: conditionSelectorToSave ? [mcpSelectorToSave, conditionSelectorToSave] : [mcpSelectorToSave],\n };\n\n this.dialogRef.close({\n ...flowToSave,\n });\n }\n\n private getFlowName(): string {\n const inputName = trim(this.flowFormGroup?.get('name')?.value ?? '');\n return isEmpty(inputName) ? this.defaultFlowName : inputName;\n }\n\n public tagValidationHook(tag: string, validationCb: (shouldAddTag: boolean) => void) {\n validationCb(\n MCP_METHODS.flatMap(group => group.groupOptions.map(m => m.value))\n .map(m => `${m}`)\n .includes(tag),\n );\n }\n}\n","<!--\n\n Copyright (C) 2025 The Gravitee team (http://gravitee.io)\n \n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n \n http://www.apache.org/licenses/LICENSE-2.0\n \n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n\n-->\n<h2 mat-dialog-title class=\"title\">\n {{ mode === 'create' ? 'Create a new flow' : 'Edit flow' }}\n\n <button class=\"title__closeBtn\" mat-icon-button aria-label=\"Close dialog\" [mat-dialog-close]=\"false\">\n <mat-icon svgIcon=\"gio:cancel\"></mat-icon>\n </button>\n</h2>\n\n@if (flowFormGroup) {\n <mat-dialog-content class=\"content\" [formGroup]=\"flowFormGroup\">\n <p>Flow allow you to apply different policies.</p>\n <div class=\"content__row\">\n <mat-form-field class=\"content__row__fullWidth\">\n <mat-label>Flow name</mat-label>\n <input matInput formControlName=\"name\" cdkFocusInitial />\n <mat-hint>Names will be automatically generated if left blank</mat-hint>\n </mat-form-field>\n </div>\n\n <div class=\"content__row\">\n <mat-form-field class=\"content__row__fullWidth\">\n <mat-label>MCP Methods for your flow</mat-label>\n <gio-form-tags-input\n formControlName=\"mcpMethods\"\n [autocompleteOptions]=\"methods\"\n [tagValidationHook]=\"tagValidationHook\"\n ></gio-form-tags-input>\n <mat-hint>If no method is specified, the flow will match all MCP Methods</mat-hint>\n </mat-form-field>\n </div>\n <div class=\"content__row\">\n <mat-form-field class=\"content__row__fullWidth\">\n <mat-label>Condition</mat-label>\n <input matInput formControlName=\"condition\" />\n <mat-hint>Condition to execute the flow, supports Expression Language</mat-hint>\n <gio-el-assistant matSuffix />\n </mat-form-field>\n </div>\n </mat-dialog-content>\n}\n\n<mat-dialog-actions class=\"actions\" align=\"end\">\n <button class=\"actions__cancelBtn\" mat-button [mat-dialog-close]=\"false\">Cancel</button>\n <button class=\"actions__saveBtn\" color=\"primary\" mat-flat-button role=\"dialog\" (click)=\"onSubmit()\">\n {{ mode === 'create' ? 'Create' : 'Save' }}\n </button>\n</mat-dialog-actions>\n","/*\n * Copyright (C) 2015 The Gravitee team (http://gravitee.io)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { Component, Inject } from '@angular/core';\nimport { MatDialogRef, MAT_DIALOG_DATA, MatDialogModule } from '@angular/material/dialog';\nimport { ReactiveFormsModule, UntypedFormControl, UntypedFormGroup } from '@angular/forms';\nimport { cloneDeep, uniqueId } from 'lodash';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\nimport {\n GioBannerModule,\n GioElAssistantComponent,\n GioFormSlideToggleModule,\n GioFormTagsInputModule,\n GioIconsModule,\n} from '@gravitee/ui-particles-angular';\n\nimport { GioPolicyStudioFlowFormDialogResult } from '../gio-ps-flow-form-dialog-result.model';\nimport { ConditionSelector, HttpMethod, HttpMethods, HttpSelector } from '../../../models';\nimport { FlowVM } from '../../../policy-studio/gio-policy-studio.model';\n\nexport type GioPolicyStudioFlowLlmFormDialogData = {\n flow?: FlowVM;\n};\n\ntype HttpMethodVM = HttpMethod | 'ALL';\n\nconst METHODS_AUTOCOMPLETE: HttpMethodVM[] = ['ALL', ...HttpMethods];\n\n@Component({\n imports: [\n ReactiveFormsModule,\n MatButtonModule,\n MatDialogModule,\n MatFormFieldModule,\n MatSelectModule,\n MatInputModule,\n MatSlideToggleModule,\n GioFormSlideToggleModule,\n GioBannerModule,\n GioIconsModule,\n GioFormTagsInputModule,\n GioElAssistantComponent,\n ],\n selector: 'gio-ps-flow-llm-form-dialog',\n templateUrl: './gio-ps-flow-llm-form-dialog.component.html',\n styleUrls: ['./gio-ps-flow-llm-form-dialog.component.scss'],\n})\nexport class GioPolicyStudioFlowLlmFormDialogComponent {\n public flowFormGroup?: UntypedFormGroup;\n\n public existingFlow?: FlowVM;\n public mode: 'create' | 'edit' = 'create';\n public methods = METHODS_AUTOCOMPLETE;\n\n constructor(\n public dialogRef: MatDialogRef<GioPolicyStudioFlowLlmFormDialogComponent, GioPolicyStudioFlowFormDialogResult>,\n @Inject(MAT_DIALOG_DATA) flowDialogData: GioPolicyStudioFlowLlmFormDialogData,\n ) {\n this.existingFlow = cloneDeep(flowDialogData?.flow);\n this.mode = this.existingFlow ? 'edit' : 'create';\n\n const httpSelector = flowDialogData?.flow?.selectors?.find(s => s.type === 'HTTP') as HttpSelector;\n const conditionSelector = flowDialogData?.flow?.selectors?.find(s => s.type === 'CONDITION') as ConditionSelector;\n this.flowFormGroup = new UntypedFormGroup({\n name: new UntypedFormControl(flowDialogData?.flow?.name ?? ''),\n pathOperator: new UntypedFormControl(httpSelector?.pathOperator ?? 'EQUALS'),\n path: new UntypedFormControl(sanitizePathFormValue(httpSelector?.path)),\n methods: new UntypedFormControl(sanitizeMethodFormValue(httpSelector?.methods)),\n condition: new UntypedFormControl(conditionSelector?.condition ?? ''),\n });\n }\n\n public onSubmit(): void {\n const httpSelectorToSave: HttpSelector = {\n type: 'HTTP',\n path: sanitizePath(this.flowFormGroup?.get('path')?.value),\n pathOperator: this.flowFormGroup?.get('pathOperator')?.value,\n methods: sanitizeMethods(this.flowFormGroup?.get('methods')?.value),\n };\n const conditionValue: string = this.flowFormGroup?.get('condition')?.value;\n const conditionSelectorToSave: ConditionSelector | undefined = conditionValue\n ? {\n type: 'CONDITION',\n condition: conditionValue,\n }\n : undefined;\n\n const flowToSave: FlowVM = {\n // New id for new flow\n _id: uniqueId('flow_'),\n // If existing flow, keep root props\n ...this.existingFlow,\n // Mark as changed\n _hasChanged: true,\n // Add changes\n name: this.flowFormGroup?.get('name')?.value,\n selectors: conditionSelectorToSave ? [httpSelectorToSave, conditionSelectorToSave] : [httpSelectorToSave],\n enabled: this.existingFlow ? this.existingFlow.enabled : true,\n };\n\n this.dialogRef.close({\n ...flowToSave,\n });\n }\n\n public tagValidationHook(tag: string, validationCb: (shouldAddTag: boolean) => void) {\n validationCb(METHODS_AUTOCOMPLETE.map(m => `${m}`).includes(tag.toUpperCase()));\n }\n}\n\nconst sanitizeMethods: (value: HttpMethodVM[]) => HttpMethod[] = (value?: HttpMethodVM[]) => {\n if (!value || value.find(m => m === 'ALL')) return [];\n return value as HttpMethod[];\n};\n\nconst sanitizeMethodFormValue: (methods?: HttpMethod[]) => HttpMethodVM[] = (methods?: HttpMethod[]) => {\n if (!methods || methods.length === 0) return ['ALL'];\n return methods;\n};\n\nexport const sanitizePath = (path: string) => {\n if (!path || !path.startsWith('/')) {\n return `/${path}`;\n }\n return path;\n};\n\nconst sanitizePathFormValue = (path: string | undefined) => {\n if (path && path.startsWith('/')) {\n return path.substring(1);\n }\n return path ?? '';\n};\n","<!--\n\n Copyright (C) 2025 The Gravitee team (http://gravitee.io)\n \n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n \n http://www.apache.org/licenses/LICENSE-2.0\n \n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n\n-->\n<h2 mat-dialog-title class=\"title\">\n {{ mode === 'create' ? 'Create a new flow' : 'Edit flow' }}\n\n <button class=\"title__closeBtn\" mat-icon-button aria-label=\"Close dialog\" [mat-dialog-close]=\"false\">\n <mat-icon svgIcon=\"gio:cancel\"></mat-icon>\n </button>\n</h2>\n\n@if (flowFormGroup) {\n <mat-dialog-content class=\"content\" [formGroup]=\"flowFormGroup\">\n <p>\n Flows allow you to apply different policies per HTTP path and/or method. For example you can reroute calls based on the URL specified.\n </p>\n <div class=\"content__row\">\n <mat-form-field>\n <mat-label>Flow name</mat-label>\n <input matInput formControlName=\"name\" cdkFocusInitial />\n <mat-hint>Names will be automatically generated with path and method if left blank</mat-hint>\n </mat-form-field>\n </div>\n <div class=\"content__row\">\n <mat-form-field>\n <mat-label>Operator</mat-label>\n <mat-select formControlName=\"pathOperator\">\n <mat-option value=\"EQUALS\">Equals</mat-option>\n <mat-option value=\"STARTS_WITH\">Starts with</mat-option>\n </mat-select>\n <mat-hint>Path operator</mat-hint>\n </mat-form-field>\n <mat-form-field>\n <mat-label>Path</mat-label>\n <span matTextPrefix>/&nbsp;</span>\n <input matInput formControlName=\"path\" />\n <mat-hint>Path</mat-hint>\n </mat-form-field>\n </div>\n <div class=\"content__row\">\n <mat-form-field>\n <mat-label>Methods for your flow</mat-label>\n <gio-form-tags-input\n formControlName=\"methods\"\n [autocompleteOptions]=\"methods\"\n [tagValidationHook]=\"tagValidationHook\"\n ></gio-form-tags-input>\n </mat-form-field>\n </div>\n <div class=\"content__row\">\n <mat-form-field>\n <mat-label>Condition</mat-label>\n <input matInput formControlName=\"condition\" />\n <mat-hint>Condition to execute the flow, supports Expression Language</mat-hint>\n <gio-el-assistant matSuffix />\n </mat-form-field>\n </div>\n </mat-dialog-content>\n}\n\n<mat-dialog-actions class=\"actions\" align=\"end\">\n <button class=\"actions__cancelBtn\" mat-button [mat-dialog-close]=\"false\">Cancel</button>\n <button class=\"actions__saveBtn\" color=\"primary\" mat-flat-button role=\"dialog\" (click)=\"onSubmit()\">\n {{ mode === 'create' ? 'Create' : 'Save' }}\n </button>\n</mat-dialog-actions>\n","/*\n * Copyright (C) 2022 The Gravitee team (http://gravitee.io)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { CdkDrag, CdkDragDrop, CdkDropList, DragDropModule, moveItemInArray, transferArrayItem } from '@angular/cdk/drag-drop';\nimport { CommonModule } from '@angular/common';\nimport { Component, EventEmitter, Input, OnChanges, OnDestroy, Output, SimpleChanges } from '@angular/core';\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatDialog } from '@angular/material/dialog';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { GIO_DIALOG_WIDTH, GioIconsModule, GioLoaderModule } from '@gravitee/ui-particles-angular';\nimport { cloneDeep, flatten, isEmpty, uniqueId } from 'lodash';\nimport { debounceTime, distinctUntilChanged, startWith, takeUntil, tap } from 'rxjs/operators';\nimport { Subject } from 'rxjs';\n\nimport {\n ApiType,\n ChannelSelector,\n ConditionSelector,\n ConnectorInfo,\n FlowExecution,\n HttpSelector,\n McpSelector,\n Operation,\n} from '../../models';\nimport { Selector } from '../../models/flow/Selector';\nimport { FlowGroupVM, FlowVM } from '../../policy-studio/gio-policy-studio.model';\nimport {\n GioPolicyStudioFlowExecutionFormDialogComponent,\n GioPolicyStudioFlowExecutionFormDialogData,\n} from '../flow-execution-form-dialog/gio-ps-flow-execution-form-dialog.component';\nimport {\n GioPolicyStudioFlowMessageFormDialogComponent,\n GioPolicyStudioFlowMessageFormDialogData,\n} from '../flow-form-dialog/flow-message-form-dialog/gio-ps-flow-message-form-dialog.component';\nimport {\n GioPolicyStudioFlowNativeFormDialogComponent,\n GioPolicyStudioFlowNativeFormDialogData,\n} from '../flow-form-dialog/flow-native-form-dialog/gio-ps-flow-native-form-dialog.component';\nimport {\n GioPolicyStudioFlowProxyFormDialogComponent,\n GioPolicyStudioFlowProxyFormDialogData,\n} from '../flow-form-dialog/flow-proxy-form-dialog/gio-ps-flow-proxy-form-dialog.component';\nimport { GioPolicyStudioFlowFormDialogResult } from '../flow-form-dialog/gio-ps-flow-form-dialog-result.model';\nimport {\n GioPolicyStudioFlowMcpFormDialogComponent,\n GioPolicyStudioFlowMcpFormDialogData,\n} from '../flow-form-dialog/flow-mcp-form-dialog/gio-ps-flow-mcp-form-dialog.component';\nimport {\n GioPolicyStudioFlowLlmFormDialogComponent,\n GioPolicyStudioFlowLlmFormDialogData,\n} from '../flow-form-dialog/flow-llm-form-dialog/gio-ps-flow-llm-form-dialog.component';\n\ninterface FlowGroupMenuVM extends FlowGroupVM {\n flows: FlowMenuVM[];\n}\n\ninterface FlowMenuVM extends FlowVM {\n selected: boolean;\n mouseOver: boolean;\n badges: {\n label: string;\n class: string;\n }[];\n pathOrChannelLabel?: string;\n hasCondition: boolean;\n}\n\n@Component({\n imports: [\n GioIconsModule,\n MatTooltipModule,\n MatButtonModule,\n CommonModule,\n GioLoaderModule,\n MatMenuModule,\n DragDropModule,\n MatInputModule,\n ReactiveFormsModule,\n MatFormFieldModule,\n ],\n selector: 'gio-ps-flows-menu',\n templateUrl: './gio-ps-flows-menu.component.html',\n styleUrls: ['./gio-ps-flows-menu.component.scss'],\n})\nexport class GioPolicyStudioFlowsMenuComponent implements OnChanges, OnDestroy {\n @Input()\n public readOnly = false;\n\n @Input()\n public loading = false;\n\n @Input()\n public apiType!: ApiType;\n\n @Input()\n public flowExecution!: FlowExecution;\n\n @Input()\n public flowsGroups: FlowGroupVM[] = [];\n\n @Input()\n public selectedFlowId?: string = undefined;\n\n @Input()\n public entrypoints: ConnectorInfo[] = [];\n\n @Input()\n public entrypointsInfo: ConnectorInfo[] = [];\n\n @Output()\n public selectedFlowIdChange = new EventEmitter<string>();\n\n @Output()\n public flowsGroupsChange = new EventEmitter<FlowGroupVM[]>();\n\n @Output()\n public flowExecutionChange = new EventEmitter<FlowExecution>();\n\n @Output()\n public deleteFlow = new EventEmitter<FlowVM>();\n\n public flowGroupMenuItems: FlowGroupMenuVM[] = [];\n\n public searchControl = new FormControl<string>('');\n\n public filteredFlowGroupMenuItems: FlowGroupMenuVM[] = [];\n\n private unsubscribe$ = new Subject<void>();\n\n public enterPredicate: (drag: CdkDrag<FlowGroupMenuVM>, drop: CdkDropList<FlowGroupMenuVM>) => boolean = () => true;\n\n constructor(private readonly matDialog: MatDialog) {\n this.searchControl.valueChanges\n .pipe(\n debounceTime(300),\n startWith(''),\n distinctUntilChanged(),\n tap(searchTerm => {\n this.applyFilter(searchTerm || '');\n }),\n takeUntil(this.unsubscribe$),\n )\n .subscribe();\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (changes.flowsGroups || changes.selectedFlowId) {\n this.flowGroupMenuItems = cloneDeep(this.flowsGroups).map(flowGroup => {\n return {\n ...flowGroup,\n flows: flowGroup.flows.map(flow => {\n const badges: FlowMenuVM['badges'] = [];\n let pathOrChannelLabel: string | undefined = undefined;\n let hasCondition = false;\n\n // MESSAGE API - CHANNEL\n const channelSelector = flow.selectors?.find(s => s.type === 'CHANNEL') as ChannelSelector;\n if (channelSelector) {\n const operationToBadge: Record<Operation, string> = {\n PUBLISH: 'PUB',\n SUBSCRIBE: 'SUB',\n };\n // If no operations are selected, all operations are valid\n const operationBadges = (\n !channelSelector.operations || isEmpty(channelSelector.operations)\n ? (['PUBLISH', 'SUBSCRIBE'] as const)\n : channelSelector.operations\n )\n .map(operation => ({\n label: operationToBadge[operation],\n class: 'gio-badge-neutral',\n }))\n .sort((a, b) => a.label.localeCompare(b.label));\n operationBadges && badges.push(...operationBadges);\n pathOrChannelLabel = `${channelSelector.channel}${channelSelector.channelOperator === 'STARTS_WITH' ? '**' : ''}`;\n }\n\n // HTTP API - HTTP\n const httpSelector = flow.selectors?.find(s => s.type === 'HTTP') as HttpSelector;\n if (httpSelector) {\n // Keep only 2 first http methods and add +X badge if there are more\n const httpMethodsToKeep = httpSelector.methods?.slice(0, 2);\n const httpMethodsLength = httpSelector.methods?.length ?? 0;\n httpMethodsToKeep &&\n badges.push(...httpMethodsToKeep.map(method => ({ label: method, class: `gio-method-badge-${method.toLowerCase()}` })));\n if (httpMethodsLength && httpMethodsLength > 2) {\n badges?.push({\n label: `+${httpMethodsLength - 2}`,\n class: 'gio-badge-neutral',\n });\n }\n if (httpMethodsLength === 0) {\n badges?.push({\n label: 'ALL',\n class: 'gio-badge-neutral',\n });\n }\n\n pathOrChannelLabel = `${httpSelector.path}${httpSelector.pathOperator === 'STARTS_WITH' ? '/**' : ''}`;\n }\n\n // MCP Proxy\n const mcpSelector = flow.selectors?.find(s => s.type === 'MCP') as McpSelector;\n if (mcpSelector) {\n if (mcpSelector.methods && mcpSelector.methods.length > 0) {\n // Keep only 2 first methods and add +X badge if there are more\n const methodsToKeep = mcpSelector.methods.slice(0, 2);\n const methodsLength = mcpSelector.methods.length;\n badges.push(...methodsToKeep.map(method => ({ label: method, class: `gio-badge-neutral` })));\n if (methodsLength > 2) {\n badges.push({\n label: `+${methodsLength - 2}`,\n class: 'gio-badge-neutral',\n });\n }\n } else {\n badges.push({\n label: 'All Methods',\n class: 'gio-badge-neutral',\n });\n }\n pathOrChannelLabel = '';\n }\n\n const conditionSelector = flow.selectors?.find(s => s.type === 'CONDITION') as ConditionSelector;\n if (conditionSelector && conditionSelector.condition) {\n hasCondition = true;\n }\n\n return {\n ...flow,\n selected: this.selectedFlowId === flow._id,\n mouseOver: false,\n badges,\n pathOrChannelLabel,\n hasCondition,\n };\n }),\n };\n });\n\n this.enterPredicate = (_drag: CdkDrag<FlowGroupMenuVM>, drop: CdkDropList<FlowGroupMenuVM>) => {\n if (this.apiType === 'NATIVE') {\n return isEmpty(drop.data.flows);\n }\n return true;\n };\n }\n this.applyFilter(this.searchControl.value || '');\n }\n\n public ngOnDestroy(): void {\n this.unsubscribe$.next();\n this.unsubscribe$.complete();\n }\n\n private applyFilter(searchTerm: string): void {\n const term = searchTerm.toLowerCase();\n if (!term) {\n this.filteredFlowGroupMenuItems = [...this.flowGroupMenuItems];\n return;\n }\n this.filteredFlowGroupMenuItems = this.flowGroupMenuItems\n .map(group => {\n const filteredFlows = group?.flows?.filter(flow => {\n return (\n (group.name && group.name?.toLowerCase().includes(term)) ||\n (flow.name && flow.name?.toLowerCase().includes(term)) ||\n (flow.pathOrChannelLabel && flow.pathOrChannelLabel?.toLowerCase().includes(term)) ||\n (flow.selectors && flow.selectors?.some(selector => this.selectorMatches(selector, term))) ||\n (flow.badges && flow.badges?.some(badges => badges.label?.toLowerCase().includes(term)))\n );\n });\n return { ...group, flows: filteredFlows };\n })\n .filter(group => group.flows.length > 0);\n }\n\n public resetSearchTerm() {\n this.searchControl.setValue('');\n this.applyFilter('');\n }\n\n private selectorMatches(selector: Selector, term: string): boolean {\n const type = selector.type;\n\n if (type === 'HTTP') {\n const httpSelector = selector as HttpSelector;\n if (httpSelector.path?.toLowerCase().includes(term)) return true;\n if (httpSelector.methods?.some(method => method.toLowerCase().includes(term))) {\n return true;\n }\n }\n\n if (type === 'CHANNEL') {\n const channelSelector = selector as ChannelSelector;\n if (channelSelector.channel?.toLowerCase().includes(term)) return true;\n if (channelSelector.operations?.some(op => op.toLowerCase().includes(term))) {\n return true;\n }\n }\n return false;\n }\n\n public selectFlow(groupId: string, flowId: string): void {\n const flow = this.flowsGroups.find(fg => fg._id === groupId)?.flows.find(f => f._id === flowId);\n if (flow) {\n this.selectedFlowIdChange.emit(flow._id);\n }\n }\n\n public onAddFlow(flowGroup: FlowGroupVM): void {\n let dialogResult;\n\n switch (this.apiType) {\n case 'MESSAGE':\n dialogResult = this.matDialog\n .open<\n GioPolicyStudioFlowMessageFormDialogComponent,\n GioPolicyStudioFlowMessageFormDialogData,\n GioPolicyStudioFlowFormDialogResult\n >(GioPolicyStudioFlowMessageFormDialogComponent, {\n data: {\n flow: undefined,\n entrypoints: this.entrypoints,\n },\n role: 'alertdialog',\n id: 'gioPsFlowFormDialog',\n width: GIO_DIALOG_WIDTH.MEDIUM,\n })\n .afterClosed();\n break;\n case 'PROXY':\n dialogResult = this.matDialog\n .open<GioPolicyStudioFlowProxyFormDialogComponent, GioPolicyStudioFlowProxyFormDialogData, GioPolicyStudioFlowFormDialogResult>(\n GioPolicyStudioFlowProxyFormDialogComponent,\n {\n data: {\n flow: undefined,\n },\n role: 'alertdialog',\n id: 'gioPsFlowFormDialog',\n width: GIO_DIALOG_WIDTH.MEDIUM,\n },\n )\n .afterClosed();\n break;\n case 'NATIVE':\n dialogResult = this.matDialog\n .open<GioPolicyStudioFlowNativeFormDialogComponent, GioPolicyStudioFlowNativeFormDialogData, GioPolicyStudioFlowFormDialogResult>(\n GioPolicyStudioFlowNativeFormDialogComponent,\n {\n data: {\n parentGroupName: flowGroup.name,\n flow: undefined,\n },\n role: 'alertdialog',\n id: 'gioPsFlowFormDialog',\n width: GIO_DIALOG_WIDTH.MEDIUM,\n },\n )\n .afterClosed();\n break;\n case 'MCP_PROXY':\n dialogResult = this.matDialog\n .open<GioPolicyStudioFlowMcpFormDialogComponent, GioPolicyStudioFlowMcpFormDialogData, GioPolicyStudioFlowFormDialogResult>(\n GioPolicyStudioFlowMcpFormDialogComponent,\n {\n data: {\n parentGroupName: flowGroup.name,\n flow: undefined,\n },\n role: 'alertdialog',\n id: 'gioPsFlowFormDialog',\n width: GIO_DIALOG_WIDTH.MEDIUM,\n },\n )\n .afterClosed();\n break;\n case 'LLM_PROXY':\n dialogResult = this.matDialog\n .open<GioPolicyStudioFlowLlmFormDialogComponent, GioPolicyStudioFlowLlmFormDialogData, GioPolicyStudioFlowFormDialogResult>(\n GioPolicyStudioFlowLlmFormDialogComponent,\n {\n data: {\n flow: undefined,\n },\n role: 'alertdialog',\n id: 'gioPsFlowFormDialog',\n width: GIO_DIALOG_WIDTH.MEDIUM,\n },\n )\n .afterClosed();\n break;\n default:\n throw new Error(`Unsupported API type ${this.apiType}`);\n }\n\n dialogResult\n .pipe(\n tap(createdOrEdited => {\n if (!createdOrEdited) {\n return;\n }\n const editedFlowsGroups = cloneDeep(this.flowsGroups);\n\n const flowsGroupToEdit = editedFlowsGroups.find(fg => fg._id === flowGroup._id);\n if (!flowsGroupToEdit) {\n throw new Error(`Flow group ${flowGroup._id} not found`);\n }\n flowsGroupToEdit.flows.push(createdOrEdited);\n\n this.flowsGroupsChange.emit(editedFlowsGroups);\n this.selectedFlowIdChange.emit(createdOrEdited._id);\n }),\n )\n .subscribe();\n }\n\n public onConfigureExecution(flowExecution: FlowExecution): void {\n const dialogResult = this.matDialog\n .open<GioPolicyStudioFlowExecutionFormDialogComponent, GioPolicyStudioFlowExecutionFormDialogData, FlowExecution | undefined>(\n GioPolicyStudioFlowExecutionFormDialogComponent,\n {\n data: {\n flowExecution,\n readOnly: this.readOnly,\n },\n role: 'alertdialog',\n id: 'gioPsFlowExecutionFormDialog',\n width: GIO_DIALOG_WIDTH.MEDIUM,\n },\n )\n .afterClosed();\n\n dialogResult\n .pipe(\n tap(edited => {\n if (!edited) {\n return;\n }\n this.flowExecutionChange.emit(edited);\n }),\n )\n .subscribe();\n }\n\n public onDisableFlow(flowId: string): void {\n const flowToEdit = flatten(this.flowsGroups.map(flowGroup => flowGroup.flows)).find(f => f._id === flowId);\n if (!flowToEdit) {\n throw new Error(`Flow ${flowId} not found`);\n }\n flowToEdit.enabled = !flowToEdit.enabled;\n flowToEdit._hasChanged = true;\n this.flowsGroupsChange.emit(this.flowsGroups);\n }\n\n public onDropFlow(event: CdkDragDrop<FlowGroupMenuVM>): void {\n if (event.previousContainer === event.container) {\n // Move inside the same group\n const flowsGroupToEdit = this.flowsGroups.find(fg => fg._id === event.container.data._id);\n if (!flowsGroupToEdit) {\n throw new Error(`Flow group ${event.container.data._id} not found`);\n }\n moveItemInArray(flowsGroupToEdit.flows, event.previousIndex, event.currentIndex);\n this.flowsGroupsChange.emit(this.flowsGroups);\n } else {\n // Move from a group to another\n const previousFlowsGroupToEdit = this.flowsGroups.find(fg => fg._id === event.previousContainer.data._id);\n const flowsGroupToEdit = this.flowsGroups.find(fg => fg._id === event.container.data._id);\n if (!previousFlowsGroupToEdit || !flowsGroupToEdit) {\n throw new Error(`Flow group ${event.previousContainer.data._id} or ${event.container.data._id} not found`);\n }\n transferArrayItem(previousFlowsGroupToEdit.flows, flowsGroupToEdit.flows, event.previousIndex, event.currentIndex);\n\n flowsGroupToEdit.flows[event.currentIndex]._hasChanged = true;\n flowsGroupToEdit.flows[event.currentIndex]._parentFlowGroupName = flowsGroupToEdit.name;\n this.flowsGroupsChange.emit(this.flowsGroups);\n }\n }\n\n public onEditFlow(flowId: string): void {\n const flowToEdit = flatten(this.flowsGroups.map(flowGroup => flowGroup.flows)).find(f => f._id === flowId);\n\n let dialogResult;\n\n switch (this.apiType) {\n case 'MESSAGE':\n dialogResult = this.matDialog\n .open<\n GioPolicyStudioFlowMessageFormDialogComponent,\n GioPolicyStudioFlowMessageFormDialogData,\n GioPolicyStudioFlowFormDialogResult\n >(GioPolicyStudioFlowMessageFormDialogComponent, {\n data: {\n flow: flowToEdit,\n entrypoints: this.entrypointsInfo ?? [],\n },\n role: 'alertdialog',\n id: 'gioPsFlowMessageFormDialog',\n width: GIO_DIALOG_WIDTH.MEDIUM,\n })\n .afterClosed();\n break;\n case 'PROXY':\n dialogResult = this.matDialog\n .open<GioPolicyStudioFlowProxyFormDialogComponent, GioPolicyStudioFlowProxyFormDialogData, GioPolicyStudioFlowFormDialogResult>(\n GioPolicyStudioFlowProxyFormDialogComponent,\n {\n data: {\n flow: flowToEdit,\n },\n role: 'alertdialog',\n id: 'gioPsFlowProxyFormDialog',\n width: GIO_DIALOG_WIDTH.MEDIUM,\n },\n )\n .afterClosed();\n break;\n case 'NATIVE':\n dialogResult = this.matDialog\n .open<GioPolicyStudioFlowNativeFormDialogComponent, GioPolicyStudioFlowNativeFormDialogData, GioPolicyStudioFlowFormDialogResult>(\n GioPolicyStudioFlowNativeFormDialogComponent,\n {\n data: {\n parentGroupName: flowToEdit!._parentFlowGroupName,\n flow: flowToEdit,\n },\n role: 'alertdialog',\n id: 'gioPsFlowNativeFormDialog',\n width: GIO_DIALOG_WIDTH.MEDIUM,\n },\n )\n .afterClosed();\n break;\n case 'MCP_PROXY':\n dialogResult = this.matDialog\n .open<GioPolicyStudioFlowMcpFormDialogComponent, GioPolicyStudioFlowMcpFormDialogData, GioPolicyStudioFlowFormDialogResult>(\n GioPolicyStudioFlowMcpFormDialogComponent,\n {\n data: {\n parentGroupName: flowToEdit!._parentFlowGroupName,\n flow: flowToEdit,\n },\n role: 'alertdialog',\n id: 'gioPsFlowFormDialog',\n width: GIO_DIALOG_WIDTH.MEDIUM,\n },\n )\n .afterClosed();\n break;\n case 'LLM_PROXY':\n dialogResult = this.matDialog\n .open<GioPolicyStudioFlowLlmFormDialogComponent, GioPolicyStudioFlowLlmFormDialogData, GioPolicyStudioFlowFormDialogResult>(\n GioPolicyStudioFlowLlmFormDialogComponent,\n {\n data: {\n flow: flowToEdit,\n },\n role: 'alertdialog',\n id: 'gioPsFlowFormDialog',\n width: GIO_DIALOG_WIDTH.MEDIUM,\n },\n )\n .afterClosed();\n break;\n default:\n throw new Error(`Unsupported API type ${this.apiType}`);\n }\n\n dialogResult\n .pipe(\n tap(editedFlow => {\n if (!editedFlow) {\n return;\n }\n this.flowsGroups = this.flowsGroups.map(fg => ({\n ...fg,\n flows: fg.flows.map(f => (f._id === editedFlow._id ? editedFlow : f)),\n }));\n this.flowsGroupsChange.emit(this.flowsGroups);\n }),\n )\n .subscribe();\n }\n\n public onDeleteFlow(flowId: string): void {\n const flowToEdit = flatten(this.flowsGroups.map(flowGroup => flowGroup.flows)).find(f => f._id === flowId);\n this.deleteFlow.emit(flowToEdit);\n }\n\n public onDuplicateFlow(flowGroupId: string, flowId: string): void {\n const flowsGroupToEdit = this.flowsGroups.find(fg => fg._id === flowGroupId);\n if (!flowsGroupToEdit) {\n throw new Error(`Flow group ${flowGroupId} not found`);\n }\n const flowToDuplicate = flowsGroupToEdit.flows.find(f => f._id === flowId);\n if (!flowToDuplicate) {\n throw new Error(`Flow ${flowId} not found`);\n }\n const duplicatedFlow = cloneDeep(flowToDuplicate);\n delete duplicatedFlow.id;\n\n duplicatedFlow._id = uniqueId('flow_');\n duplicatedFlow.name = `${duplicatedFlow.name} - Copy`;\n duplicatedFlow._hasChanged = true;\n const index = flowsGroupToEdit.flows.indexOf(flowToDuplicate);\n flowsGroupToEdit.flows.splice(index + 1, 0, duplicatedFlow);\n this.flowsGroupsChange.emit(this.flowsGroups);\n this.selectedFlowIdChange.emit(duplicatedFlow._id);\n }\n}\n","<!--\n\n Copyright (C) 2025 The Gravitee team (http://gravitee.io)\n \n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n \n http://www.apache.org/licenses/LICENSE-2.0\n \n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n\n-->\n\n<div class=\"header\">\n <div class=\"header__label\">\n Flows <mat-icon svgIcon=\"gio:info\" matTooltip=\"Flows allow you to apply different policies on your API event phases\"></mat-icon>\n </div>\n @if (apiType !== 'NATIVE' && apiType !== 'MCP_PROXY') {\n <div class=\"header__configBtn\">\n <button class=\"header__configBtn_edit\" mat-stroked-button [disabled]=\"loading\" (click)=\"onConfigureExecution(flowExecution)\">\n <mat-icon [svgIcon]=\"readOnly ? 'gio:eye-empty' : 'gio:settings'\"></mat-icon>\n </button>\n </div>\n }\n</div>\n@if (!loading) {\n <div class=\"searchBar\">\n <mat-form-field class=\"searchBar__input\">\n <mat-icon matPrefix>search</mat-icon>\n <input matInput placeholder=\"Search by name, path, or group...\" [formControl]=\"searchControl\" />\n @if (searchControl.value) {\n <button matSuffix mat-icon-button aria-label=\"Clear\" (click)=\"resetSearchTerm()\">\n <mat-icon>close</mat-icon>\n </button>\n }\n </mat-form-field>\n </div>\n}\n\n@if (!loading) {\n <div class=\"list\" cdkDropListGroup>\n @for (flowsGroup of filteredFlowGroupMenuItems; track flowsGroup._id) {\n <div\n class=\"list__flowsGroup\"\n cdkDropList\n [cdkDropListData]=\"flowsGroup\"\n [cdkDropListEnterPredicate]=\"enterPredicate\"\n (cdkDropListDropped)=\"onDropFlow($event)\"\n >\n <div class=\"list__flowsGroup__header\">\n <div class=\"list__flowsGroup__header__label\">\n <span>{{ (flowsGroup._isPlan ? 'Plan: ' : '') + flowsGroup.name }}</span>\n </div>\n <div class=\"list__flowsGroup__header__addBtn\">\n @if (apiType === 'NATIVE') {\n <span [matTooltipDisabled]=\"flowsGroup.flows.length < 1\" matTooltip=\"Only one flow is allowed for a native API\">\n <button mat-button [disabled]=\"readOnly || flowsGroup.flows.length > 0\" (click)=\"onAddFlow(flowsGroup)\">\n <mat-icon svgIcon=\"gio:plus\" matTooltip=\"New flow\"></mat-icon>\n </button>\n </span>\n } @else {\n <button mat-button [disabled]=\"readOnly\" (click)=\"onAddFlow(flowsGroup)\">\n <mat-icon svgIcon=\"gio:plus\" matTooltip=\"New flow\"></mat-icon>\n </button>\n }\n </div>\n </div>\n <div class=\"list__flowsGroup__flows\">\n @if (flowsGroup.flows.length > 0) {\n @for (flow of flowsGroup.flows; track flow._id) {\n <div\n class=\"list__flowsGroup__flows__flow\"\n [class.selected]=\"flow.selected\"\n [class.disabled]=\"!flow.enabled\"\n (click)=\"selectFlow(flowsGroup._id, flow._id)\"\n (mouseout)=\"flow.mouseOver = false\"\n (mouseover)=\"flow.mouseOver = true\"\n cdkDrag\n >\n <div class=\"list__flowsGroup__flows__flow__left\">\n @if (flow.name) {\n <div class=\"list__flowsGroup__flows__flow__left__name\" [attr.title]=\"flow.name\">\n {{ flow.name }}\n </div>\n }\n @if (apiType !== 'NATIVE') {\n <div class=\"list__flowsGroup__flows__flow__left__infos\">\n <div class=\"list__flowsGroup__flows__flow__left__infos__badges\">\n @for (badge of flow.badges; track badge.label) {\n <span class=\"list__flowsGroup__flows__flow__left__infos__badges__badge\" [ngClass]=\"badge.class\">{{\n badge.label\n }}</span>\n }\n </div>\n <div class=\"list__flowsGroup__flows__flow__left__infos__pathOrChannelLabel\">\n @if (flow.pathOrChannelLabel !== undefined) {\n <span [attr.title]=\"flow.pathOrChannelLabel\" [innerHTML]=\"flow.pathOrChannelLabel\"></span>\n } @else {\n <em>Empty</em>\n }\n </div>\n @if (flow.hasCondition) {\n <span class=\"list__flowsGroup__flows__flow__left__infos__conditionBadge gio-badge-neutral\" matTooltip=\"Conditioned\"\n ><mat-icon svgIcon=\"gio:if\"></mat-icon\n ></span>\n }\n </div>\n }\n </div>\n <div class=\"list__flowsGroup__flows__flow__right\">\n <button\n class=\"list__flowsGroup__flows__flow__right__name__menu\"\n mat-button\n [disabled]=\"readOnly\"\n [matMenuTriggerFor]=\"flowMenu\"\n (click)=\"$event.stopPropagation()\"\n >\n <mat-icon svgIcon=\"gio:more-vertical\"></mat-icon>\n </button>\n <mat-menu #flowMenu=\"matMenu\">\n <button [disabled]=\"readOnly\" mat-menu-item (click)=\"onDisableFlow(flow._id)\">\n <mat-icon [svgIcon]=\"flow.enabled ? 'gio:prohibition' : 'gio:check-circled-outline'\"></mat-icon>\n <span>{{ flow.enabled ? 'Disable' : 'Enable' }}</span>\n </button>\n <button mat-menu-item (click)=\"onEditFlow(flow._id)\"><mat-icon svgIcon=\"gio:edit-pencil\"></mat-icon> Edit</button>\n <button mat-menu-item (click)=\"onDeleteFlow(flow._id)\"><mat-icon svgIcon=\"gio:trash\"></mat-icon> Delete</button>\n @if (apiType !== 'NATIVE') {\n <button mat-menu-item (click)=\"onDuplicateFlow(flowsGroup._id, flow._id)\">\n <mat-icon svgIcon=\"gio:copy\"></mat-icon> Duplicate\n </button>\n }\n </mat-menu>\n </div>\n </div>\n }\n } @else {\n <div class=\"list__flowsGroup__no-flows\">No flows yet</div>\n }\n </div>\n </div>\n }\n </div>\n} @else {\n <div class=\"loadingList\">\n <gio-loader></gio-loader>\n </div>\n}\n","/*\n * Copyright (C) 2022 The Gravitee team (http://gravitee.io)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Injectable } from '@angular/core';\nimport { BehaviorSubject, Observable } from 'rxjs';\nimport { tap } from 'rxjs/operators';\n\nimport { Policy, PolicyDocumentationFetcher, PolicySchemaFetcher } from '../models';\n\nimport { PolicyDocumentation } from './gio-policy-studio.model';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class GioPolicyStudioService {\n private schemasCache: Record<string, BehaviorSubject<unknown>> = {};\n private documentationsCache: Record<string, BehaviorSubject<PolicyDocumentation | string>> = {};\n\n private policySchemaFetcher?: PolicySchemaFetcher;\n private policyDocumentationFetcher?: PolicyDocumentationFetcher;\n\n public setPolicySchemaFetcher(policySchemaFetcher: PolicySchemaFetcher) {\n this.policySchemaFetcher = policySchemaFetcher;\n }\n\n public setPolicyDocumentationFetcher(policyDocumentationFetcher: PolicyDocumentationFetcher) {\n this.policyDocumentationFetcher = policyDocumentationFetcher;\n }\n\n /**\n * Call the policy schema fetcher to get the schema for the given policy. If the\n * schema has already been fetched, it will be returned from the cache.\n *\n * @param policy to get the schema for\n * @returns the schema for the policy\n */\n public getPolicySchema(policy: Policy): Observable<unknown> {\n if (!this.policySchemaFetcher) throw new Error('PolicySchemaFetcher not defined!');\n\n if (this.schemasCache[policy.id]) {\n return this.schemasCache[policy.id].asObservable();\n }\n\n return this.policySchemaFetcher(policy).pipe(\n tap(schema => {\n this.schemasCache[policy.id] = new BehaviorSubject(schema);\n }),\n );\n }\n\n /**\n * Call the policy documentation fetcher to get the documentation for the given policy. If the\n * documentation has already been fetched, it will be returned from the cache.\n *\n * @param policy to get the documentation for\n * @returns the documentation for the policy\n */\n public getPolicyDocumentation(policy: Policy): Observable<PolicyDocumentation | string> {\n if (!this.policyDocumentationFetcher) throw new Error('PolicyDocumentationFetcher not defined!');\n\n if (this.documentationsCache[policy.id]) {\n return this.documentationsCache[policy.id].asObservable();\n }\n\n return this.policyDocumentationFetcher(policy).pipe(\n tap(documentation => {\n this.documentationsCache[policy.id] = new BehaviorSubject(documentation);\n }),\n );\n }\n}\n","/*\n * Copyright (C) 2022 The Gravitee team (http://gravitee.io)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { Component, EventEmitter, Input, OnChanges, OnDestroy, OnInit, Output, SimpleChanges } from '@angular/core';\nimport { FormControl, ReactiveFormsModule, UntypedFormControl, UntypedFormGroup } from '@angular/forms';\nimport { catchError, map, takeUntil } from 'rxjs/operators';\nimport { Observable, of, Subject } from 'rxjs';\nimport {\n GioBannerModule,\n GioElAssistantComponent,\n GioElPromptComponent,\n GioFormJsonSchemaComponent,\n GioFormJsonSchemaModule,\n GioJsonSchema,\n GioJsonSchemaContext,\n GioLoaderModule,\n GioPopoverComponent,\n PopoverTriggerDirective,\n} from '@gravitee/ui-particles-angular';\nimport { isEmpty } from 'lodash';\nimport { CommonModule } from '@angular/common';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { GioAsciidoctorModule } from '@gravitee/ui-particles-angular/gio-asciidoctor';\nimport { MarkdownComponent } from 'ngx-markdown';\nimport { MatIcon } from '@angular/material/icon';\n\nimport { ApiType, FlowPhase, GenericPolicy, isPolicy, isSharedPolicyGroupPolicy, Step, toPolicy } from '../../models';\nimport { GioPolicyStudioService } from '../../policy-studio/gio-policy-studio.service';\nimport { PolicyDocumentation } from '../../policy-studio/gio-policy-studio.model';\n\n@Component({\n imports: [\n CommonModule,\n ReactiveFormsModule,\n MatInputModule,\n MatFormFieldModule,\n GioFormJsonSchemaModule,\n GioAsciidoctorModule,\n GioLoaderModule,\n GioBannerModule,\n MarkdownComponent,\n GioElPromptComponent,\n GioPopoverComponent,\n MatIcon,\n PopoverTriggerDirective,\n GioElAssistantComponent,\n ],\n selector: 'gio-ps-step-form',\n templateUrl: './gio-ps-step-form.component.html',\n styleUrls: ['./gio-ps-step-form.component.scss'],\n})\nexport class GioPolicyStudioStepFormComponent implements OnChanges, OnInit, OnDestroy {\n private readonly noDocumentationAvailable: PolicyDocumentation = { content: 'No documentation available.', language: 'ASCIIDOC' };\n\n @Input()\n public readOnly = false;\n\n @Input()\n public step?: Step;\n\n @Input({ required: true })\n public flowPhase!: FlowPhase;\n\n @Input({ required: true })\n public apiType!: ApiType;\n\n @Input()\n public genericPolicy!: GenericPolicy;\n\n @Output()\n public stepChange = new EventEmitter<Step>();\n\n @Output()\n public isValid = new EventEmitter<boolean>();\n\n public policySchema$?: Observable<GioJsonSchema | null | undefined>;\n public policyDocumentation$?: Observable<PolicyDocumentation>;\n public infoBanner?: string;\n\n public stepForm?: UntypedFormGroup;\n\n public context?: GioJsonSchemaContext;\n\n private unsubscribe$ = new Subject<void>();\n public isMessage = false;\n constructor(private readonly policyStudioService: GioPolicyStudioService) {}\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (changes.genericPolicy) {\n if (isPolicy(this.genericPolicy)) {\n this.policySchema$ = this.policyStudioService.getPolicySchema(toPolicy(this.genericPolicy)).pipe(\n map(schema => {\n if (GioFormJsonSchemaComponent.isDisplayable(schema as GioJsonSchema)) {\n return schema as GioJsonSchema;\n }\n return {};\n }),\n );\n\n this.policyDocumentation$ = this.policyStudioService.getPolicyDocumentation(toPolicy(this.genericPolicy)).pipe(\n map(doc => {\n if (typeof doc === 'string') {\n return { content: doc, language: 'ASCIIDOC' } as PolicyDocumentation;\n }\n return isEmpty(doc?.content) ? this.noDocumentationAvailable : doc;\n }),\n catchError(() => of(this.noDocumentationAvailable)),\n );\n }\n if (isSharedPolicyGroupPolicy(this.genericPolicy)) {\n this.policySchema$ = of({});\n this.policyDocumentation$ = of({ content: ' ', language: 'ASCIIDOC' });\n this.infoBanner = this.genericPolicy.prerequisiteMessage;\n }\n }\n if (changes.flowPhase) {\n this.context = {\n flowPhase: this.flowPhase,\n apiType: this.apiType,\n };\n this.isMessage = this.flowPhase === 'PUBLISH' || this.flowPhase === 'SUBSCRIBE';\n }\n }\n\n public ngOnInit(): void {\n this.initStepForm();\n }\n\n public ngOnDestroy(): void {\n this.unsubscribe$.next();\n this.unsubscribe$.complete();\n }\n\n private initStepForm(): void {\n this.stepForm = new UntypedFormGroup({\n description: new UntypedFormControl({ value: this.step?.description, disabled: this.readOnly }),\n condition: new UntypedFormControl({ value: this.step?.condition, disabled: this.readOnly }),\n messageCondition: new FormControl<string | undefined>({ value: this.step?.messageCondition, disabled: this.readOnly }),\n configuration: new UntypedFormControl({ value: this.step?.configuration, disabled: this.readOnly }),\n });\n\n this.stepForm.valueChanges.pipe(takeUntil(this.unsubscribe$)).subscribe(() => {\n this.emitStepChange();\n });\n\n this.stepForm.statusChanges.pipe(takeUntil(this.unsubscribe$)).subscribe(valid => {\n this.isValid.emit(valid === 'VALID');\n });\n }\n\n public onJsonSchemaReady(isReady: boolean) {\n // When ready and if the form is valid, emit\n if (isReady) {\n this.emitStepChange();\n\n if (this.stepForm?.status === 'VALID') {\n this.isValid.emit(true);\n }\n }\n }\n\n public emitStepChange(): void {\n let configuration = this.stepForm?.get('configuration')?.value;\n\n if (isSharedPolicyGroupPolicy(this.genericPolicy)) {\n configuration = { sharedPolicyGroupId: this.genericPolicy.sharedPolicyGroupId };\n }\n\n this.stepChange.emit({\n ...this.step,\n description: this.stepForm?.get('description')?.value,\n condition: this.stepForm?.get('condition')?.value ?? undefined,\n messageCondition: this.stepForm?.get('messageCondition')?.value ?? undefined,\n configuration,\n });\n }\n}\n","<!--\n\n Copyright (C) 2025 The Gravitee team (http://gravitee.io)\n \n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n \n http://www.apache.org/licenses/LICENSE-2.0\n \n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n\n-->\n\n<div class=\"settings\">\n <div class=\"settings__header\">Settings</div>\n\n <div class=\"settings__content\">\n @if (stepForm && (policySchema$ | async); as policySchema) {\n <ng-container [formGroup]=\"stepForm\">\n <mat-form-field>\n <mat-label>Description</mat-label>\n <textarea matInput formControlName=\"description\" cdkFocusInitial></textarea>\n <mat-hint>Describe how your policy works.</mat-hint>\n </mat-form-field>\n <mat-form-field>\n <mat-label>Trigger condition</mat-label>\n <input matInput formControlName=\"condition\" />\n <mat-hint>The condition to execute this policy. Supports Expression Language.</mat-hint>\n <gio-el-assistant matSuffix />\n </mat-form-field>\n @if (isMessage) {\n <mat-form-field>\n <mat-label>Message trigger condition</mat-label>\n <input matInput formControlName=\"messageCondition\" />\n <mat-hint>The condition to execute this policy on message. Supports Expression Language.</mat-hint>\n <gio-el-assistant matSuffix />\n </mat-form-field>\n }\n @if (policySchema) {\n <gio-form-json-schema\n [jsonSchema]=\"$any(policySchema)\"\n [context]=\"context\"\n (ready)=\"onJsonSchemaReady($event)\"\n formControlName=\"configuration\"\n ></gio-form-json-schema>\n }\n </ng-container>\n } @else {\n <gio-loader></gio-loader>\n }\n </div>\n</div>\n\n<div class=\"documentation\">\n <div class=\"documentation__header\">Documentation</div>\n\n <div class=\"documentation__content\">\n @if (infoBanner) {\n <gio-banner-warning>\n Prerequisite message\n <span gioBannerBody>{{ infoBanner }}</span>\n </gio-banner-warning>\n }\n @if (policyDocumentation$ | async; as policyDocumentation) {\n @switch (policyDocumentation.language) {\n @case ('ASCIIDOC') {\n <gio-asciidoctor [content]=\"policyDocumentation.content\"></gio-asciidoctor>\n }\n @case ('MARKDOWN') {\n <markdown class=\"documentation__content__markdown\" [data]=\"policyDocumentation.content\"></markdown>\n }\n }\n } @else {\n <gio-loader></gio-loader>\n }\n </div>\n</div>\n","/*\n * Copyright (C) 2015 The Gravitee team (http://gravitee.io)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { Component, Inject, OnDestroy } from '@angular/core';\nimport { MatDialogRef, MAT_DIALOG_DATA, MatDialogModule } from '@angular/material/dialog';\nimport { toLower, uniq } from 'lodash';\nimport { ReactiveFormsModule, UntypedFormControl, UntypedFormGroup } from '@angular/forms';\nimport { startWith, takeUntil } from 'rxjs/operators';\nimport { Subject } from 'rxjs';\nimport { CommonModule } from '@angular/common';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { GioBannerModule, GioIconsModule } from '@gravitee/ui-particles-angular';\nimport { MatChipsModule } from '@angular/material/chips';\nimport { MatTooltip } from '@angular/material/tooltip';\n\nimport { ApiType, FlowPhase, GenericPolicy, isPolicy, isSharedPolicyGroupPolicy, Step } from '../../models';\nimport { GioPolicyStudioStepFormComponent } from '../step-form/gio-ps-step-form.component';\n\nexport type GioPolicyStudioPoliciesCatalogDialogData = {\n genericPolicies: GenericPolicy[];\n flowPhase: FlowPhase;\n apiType: ApiType;\n trialUrl?: string;\n};\n\nexport type GioPolicyStudioPoliciesCatalogDialogResult = undefined | Step;\n\nconst flowPhaseLabels: Record<FlowPhase, string> = {\n REQUEST: 'Request',\n RESPONSE: 'Response',\n PUBLISH: 'Publish',\n SUBSCRIBE: 'Subscribe',\n CONNECT: 'Connect',\n INTERACT: 'Interact',\n};\n\ntype PolicyVM = {\n _id: string;\n genericPolicy: GenericPolicy;\n name: string;\n description?: string;\n icon?: string;\n deployed?: boolean;\n category: string;\n};\n\n@Component({\n imports: [\n CommonModule,\n ReactiveFormsModule,\n MatButtonModule,\n MatDialogModule,\n MatFormFieldModule,\n MatChipsModule,\n MatInputModule,\n GioBannerModule,\n GioIconsModule,\n GioPolicyStudioStepFormComponent,\n MatTooltip,\n ],\n selector: 'gio-ps-policies-catalog-dialog',\n templateUrl: './gio-ps-policies-catalog-dialog.component.html',\n styleUrls: ['./gio-ps-policies-catalog-dialog.component.scss'],\n})\nexport class GioPolicyStudioPoliciesCatalogDialogComponent implements OnDestroy {\n public policies: PolicyVM[] = [];\n\n public flowPhase!: FlowPhase;\n public flowPhaseLabel!: string;\n\n public selectedPolicy?: GenericPolicy;\n\n public stepToAdd?: Step;\n\n public categories: string[] = [];\n\n public isValid = false;\n\n public filtersForm = new UntypedFormGroup({\n categories: new UntypedFormControl([]),\n search: new UntypedFormControl(''),\n });\n\n private allPolicies: PolicyVM[] = [];\n\n private unsubscribe$ = new Subject<void>();\n\n public isUnlicensed = false;\n\n public trialUrl?: string;\n\n public apiType: ApiType;\n\n constructor(\n public dialogRef: MatDialogRef<GioPolicyStudioPoliciesCatalogDialogComponent, GioPolicyStudioPoliciesCatalogDialogResult>,\n @Inject(MAT_DIALOG_DATA) flowDialogData: GioPolicyStudioPoliciesCatalogDialogData,\n ) {\n this.flowPhase = flowDialogData.flowPhase;\n this.apiType = flowDialogData.apiType;\n this.flowPhaseLabel = flowPhaseLabels[flowDialogData.flowPhase];\n\n this.allPolicies = flowDialogData.genericPolicies\n .filter(genericPolicy => {\n if (isPolicy(genericPolicy)) {\n switch (flowDialogData.apiType) {\n case 'PROXY':\n return genericPolicy.flowPhaseCompatibility?.HTTP_PROXY?.includes(flowDialogData.flowPhase);\n case 'MESSAGE':\n return genericPolicy.flowPhaseCompatibility?.HTTP_MESSAGE?.includes(flowDialogData.flowPhase);\n case 'NATIVE':\n return genericPolicy.flowPhaseCompatibility?.NATIVE_KAFKA?.includes(flowDialogData.flowPhase);\n case 'MCP_PROXY':\n return genericPolicy.flowPhaseCompatibility?.MCP_PROXY?.includes(flowDialogData.flowPhase);\n case 'LLM_PROXY':\n return genericPolicy.flowPhaseCompatibility?.LLM_PROXY?.includes(flowDialogData.flowPhase);\n default:\n throw new Error('Unknown API type');\n }\n }\n if (isSharedPolicyGroupPolicy(genericPolicy)) {\n return genericPolicy.apiType === flowDialogData.apiType && genericPolicy.phase === flowDialogData.flowPhase;\n }\n // Not expected\n throw new Error('Unknown policy type');\n })\n .map(policy => ({\n category: policy.category ?? 'Others',\n _id: policy._id,\n name: policy.name,\n description: policy.description,\n icon: isPolicy(policy) ? policy.icon : undefined,\n deployed: isPolicy(policy) ? policy.deployed : undefined,\n genericPolicy: policy,\n }));\n\n this.categories = uniq(this.allPolicies.map(policy => policy.category.toLowerCase())).sort((a, b) => a.localeCompare(b));\n const othersIndex = this.categories.indexOf('others');\n if (othersIndex !== -1) {\n this.categories.push(this.categories.splice(othersIndex, 1)[0]);\n }\n\n this.filtersForm.valueChanges\n .pipe(startWith(this.filtersForm.value), takeUntil(this.unsubscribe$))\n .subscribe(({ categories, search }: { categories?: string[]; search?: string }) => {\n const selectedCategories = categories && categories.length > 0 ? categories : this.categories;\n this.policies = this.allPolicies\n .filter(policy => {\n return selectedCategories.map(toLower).includes(toLower(policy.category));\n })\n .filter(policy => {\n return search ? toLower(policy.name + policy.description).includes(toLower(search)) : true;\n });\n });\n\n this.trialUrl = flowDialogData.trialUrl;\n }\n\n public ngOnDestroy(): void {\n this.unsubscribe$.next();\n this.unsubscribe$.complete();\n }\n\n public onSelectPolicy(policy: PolicyVM) {\n if (policy.deployed === false) {\n this.isUnlicensed = true;\n }\n this.selectedPolicy = policy.genericPolicy;\n }\n\n public onStepChange(step: Step) {\n this.stepToAdd = step;\n }\n\n public onIsValid(isValid: boolean) {\n this.isValid = isValid;\n }\n\n public onAddPolicy() {\n this.dialogRef.close({\n ...this.stepToAdd,\n name: this.selectedPolicy?.name,\n enabled: true,\n policy: this.selectedPolicy?.policyId,\n });\n }\n\n public onGoBack() {\n // Reset to initial value\n this.selectedPolicy = undefined;\n this.isValid = false;\n this.isUnlicensed = false;\n }\n}\n","<!--\n\n Copyright (C) 2025 The Gravitee team (http://gravitee.io)\n \n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n \n http://www.apache.org/licenses/LICENSE-2.0\n \n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n\n-->\n<h2 mat-dialog-title class=\"title\">\n @if (selectedPolicy) {\n <button class=\"title__goBackBtn\" mat-stroked-button (click)=\"onGoBack()\">\n <mat-icon svgIcon=\"gio:arrow-left\"></mat-icon>\n Go back\n </button>\n }\n Policies for <span class=\"title__phase\">{{ flowPhaseLabel }}</span> phase\n\n <button class=\"title__closeBtn\" mat-icon-button aria-label=\"Close dialog\" [mat-dialog-close]=\"\">\n <mat-icon svgIcon=\"gio:cancel\"></mat-icon>\n </button>\n</h2>\n\n<ng-container>\n @if (!selectedPolicy) {\n <mat-dialog-content class=\"policiesCatalog\">\n <div class=\"policiesCatalog__filters\" [formGroup]=\"filtersForm\">\n <mat-form-field class=\"policiesCatalog__filters__search\" appearance=\"outline\">\n <mat-label>Search</mat-label>\n <input matInput formControlName=\"search\" cdkFocusInitial />\n @if (filtersForm.get('search')?.value) {\n <button matIconSuffix mat-icon-button aria-label=\"Clear\" (click)=\"filtersForm.get('search')?.setValue('')\">\n <mat-icon svgIcon=\"gio:cancel\"></mat-icon>\n </button>\n }\n </mat-form-field>\n @if (categories.length > 1) {\n <mat-chip-listbox\n class=\"policiesCatalog__filters__categories\"\n aria-label=\"Categories selection\"\n multiple\n formControlName=\"categories\"\n >\n @for (category of categories; track category) {\n <mat-chip-option [selected]=\"category\" [value]=\"category\">{{ category | titlecase }} </mat-chip-option>\n }\n </mat-chip-listbox>\n }\n </div>\n @if (policies.length) {\n <div class=\"policiesCatalog__list\">\n @for (policy of policies; track policy) {\n <div class=\"policiesCatalog__list__policy\">\n <div class=\"policiesCatalog__list__policy__head\">\n <mat-icon class=\"policiesCatalog__list__policy__head__icon\" [svgIcon]=\"policy.icon ?? 'gio:puzzle'\"></mat-icon>\n @if (policy.name) {\n <span class=\"policiesCatalog__list__policy__head__name\">{{ policy.name }}</span>\n }\n @if (policy.genericPolicy.type === 'SHARED_POLICY_GROUP') {\n <span class=\"gio-badge-neutral policiesCatalog__list__policy__head__badge\" matTooltip=\"Shared Policy Group\">\n <mat-icon svgIcon=\"gio:users\"></mat-icon>\n </span>\n }\n </div>\n @if (policy.deployed === false) {\n <div class=\"policiesCatalog__list__policy__enterprise\">\n <mat-icon\n class=\"policiesCatalog__list__policy__enterprise__lock\"\n [svgIcon]=\"'gio:lock'\"\n matTooltip=\"This policy is only available for users with an enterprise license.\"\n ></mat-icon>\n </div>\n }\n @if (policy.description) {\n <div class=\"policiesCatalog__list__policy__description\">{{ policy.description }}</div>\n }\n <button class=\"policiesCatalog__list__policy__selectBtn\" mat-stroked-button role=\"dialog\" (click)=\"onSelectPolicy(policy)\">\n Select\n </button>\n </div>\n }\n </div>\n } @else {\n <div class=\"emptyPoliciesCatalog\">No policies available.</div>\n }\n </mat-dialog-content>\n }\n</ng-container>\n\n@if (selectedPolicy) {\n <mat-dialog-content class=\"policyForm\">\n @if (isUnlicensed) {\n <gio-banner type=\"error\" icon=\"gio:universe\">\n This policy is only available for users with an enterprise license.\n <span gioBannerBody>Request a license to upgrade your account and unlock this policy</span>\n <div gioBannerAction>\n @if (trialUrl) {\n <a mat-stroked-button [href]=\"trialUrl\" target=\"_blank\">Request upgrade</a>\n }\n </div>\n </gio-banner>\n }\n <div class=\"policyForm__info\">\n <div class=\"policyForm__info__head\">\n <mat-icon class=\"policyForm__info__head__icon\" [svgIcon]=\"selectedPolicy.icon ?? 'gio:puzzle'\"></mat-icon>\n @if (selectedPolicy.name) {\n <span class=\"policyForm__info__head__name\">{{ selectedPolicy.name }}</span>\n }\n @if (selectedPolicy.type === 'SHARED_POLICY_GROUP') {\n <span class=\"gio-badge-neutral policiesCatalog__list__policy__head__badge\">\n <mat-icon svgIcon=\"gio:users\"></mat-icon>&nbsp;Shared Policy Group\n </span>\n }\n </div>\n @if (selectedPolicy.description) {\n <div class=\"policyForm__info__description\">{{ selectedPolicy.description }}</div>\n }\n </div>\n <gio-ps-step-form\n [genericPolicy]=\"selectedPolicy\"\n [flowPhase]=\"flowPhase\"\n [apiType]=\"apiType\"\n (stepChange)=\"onStepChange($event)\"\n (isValid)=\"onIsValid($event)\"\n ></gio-ps-step-form>\n </mat-dialog-content>\n}\n\n<mat-dialog-actions class=\"actions\" align=\"end\">\n <button class=\"actions__cancelBtn\" mat-button [mat-dialog-close]=\"\">Cancel</button>\n @if (selectedPolicy) {\n <button\n class=\"actions__addBtn\"\n color=\"primary\"\n mat-flat-button\n role=\"dialog\"\n [disabled]=\"!isValid || isUnlicensed\"\n (click)=\"onAddPolicy()\"\n >\n Add policy\n </button>\n }\n</mat-dialog-actions>\n","/*\n * Copyright (C) 2015 The Gravitee team (http://gravitee.io)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { Component, Inject } from '@angular/core';\nimport { MatDialogRef, MAT_DIALOG_DATA, MatDialogModule } from '@angular/material/dialog';\nimport { GioIconsModule } from '@gravitee/ui-particles-angular';\nimport { MatButtonModule } from '@angular/material/button';\n\nimport { FlowPhase, Step, GenericPolicy, ApiType } from '../../models';\nimport { GioPolicyStudioStepFormComponent } from '../step-form/gio-ps-step-form.component';\n\nexport type GioPolicyStudioStepEditDialogData = {\n genericPolicy: GenericPolicy;\n step: Step;\n flowPhase: FlowPhase;\n apiType: ApiType;\n readOnly?: boolean;\n};\n\nexport type GioPolicyStudioStepEditDialogResult = undefined | Step;\n\n@Component({\n imports: [MatButtonModule, MatDialogModule, GioIconsModule, GioPolicyStudioStepFormComponent],\n selector: 'gio-ps-step-edit-dialog',\n templateUrl: './gio-ps-step-edit-dialog.component.html',\n styleUrls: ['./gio-ps-step-edit-dialog.component.scss'],\n})\nexport class GioPolicyStudioStepEditDialogComponent {\n public genericPolicy!: GenericPolicy;\n public step!: Step;\n public flowPhase!: FlowPhase;\n public apiType!: ApiType;\n\n public isValid = false;\n public readOnly = false;\n\n constructor(\n public dialogRef: MatDialogRef<GioPolicyStudioStepEditDialogComponent, GioPolicyStudioStepEditDialogResult>,\n @Inject(MAT_DIALOG_DATA) flowDialogData: GioPolicyStudioStepEditDialogData,\n ) {\n this.flowPhase = flowDialogData.flowPhase;\n this.apiType = flowDialogData.apiType;\n this.genericPolicy = flowDialogData.genericPolicy;\n this.step = flowDialogData.step;\n this.readOnly = Boolean(flowDialogData.readOnly);\n }\n\n public onSave(): void {\n this.dialogRef.close({\n ...this.step,\n });\n }\n}\n","<!--\n\n Copyright (C) 2025 The Gravitee team (http://gravitee.io)\n \n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n \n http://www.apache.org/licenses/LICENSE-2.0\n \n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n\n-->\n<h2 mat-dialog-title class=\"title\">\n <mat-icon class=\"title__icon\" [svgIcon]=\"genericPolicy.icon ?? 'gio:puzzle'\"></mat-icon>\n\n @if (step.name) {\n <span class=\"title__name\">\n {{ step.name }}\n @if (genericPolicy.type === 'SHARED_POLICY_GROUP') {\n <span class=\"gio-badge-neutral policiesCatalog__list__policy__head__badge\">\n <mat-icon svgIcon=\"gio:users\"></mat-icon>&nbsp;Shared Policy Group\n </span>\n }\n </span>\n }\n\n <button class=\"title__closeBtn\" mat-icon-button aria-label=\"Close dialog\" [mat-dialog-close]=\"\">\n <mat-icon svgIcon=\"gio:cancel\"></mat-icon>\n </button>\n\n <div class=\"title__description\">\n {{ genericPolicy.description }}\n </div>\n</h2>\n\n<mat-dialog-content class=\"content\">\n <gio-ps-step-form\n [readOnly]=\"readOnly\"\n [genericPolicy]=\"genericPolicy\"\n [flowPhase]=\"flowPhase\"\n [apiType]=\"apiType\"\n [(step)]=\"step\"\n (isValid)=\"isValid = $event\"\n ></gio-ps-step-form>\n</mat-dialog-content>\n\n<mat-dialog-actions class=\"actions\" align=\"end\">\n <button class=\"actions__cancelBtn\" mat-button [mat-dialog-close]=\"\">Cancel</button>\n <button class=\"actions__saveBtn\" color=\"primary\" mat-flat-button role=\"dialog\" (click)=\"onSave()\" [disabled]=\"!isValid\">Save</button>\n</mat-dialog-actions>\n","/*\n * Copyright (C) 2022 The Gravitee team (http://gravitee.io)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { Component, EventEmitter, Input, OnChanges, Output, SimpleChanges } from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { GIO_DIALOG_WIDTH, GioConfirmDialogComponent, GioConfirmDialogData, GioIconsModule } from '@gravitee/ui-particles-angular';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { get, isEmpty, isNil, has } from 'lodash';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\nimport {\n GioPolicyStudioStepEditDialogComponent,\n GioPolicyStudioStepEditDialogData,\n GioPolicyStudioStepEditDialogResult,\n} from '../step-edit-dialog/gio-ps-step-edit-dialog.component';\nimport { FlowPhase, isPolicy, isSharedPolicyGroupPolicy, Step, GenericPolicy, ApiType } from '../../models';\n\n@Component({\n imports: [GioIconsModule, MatButtonModule, MatMenuModule, MatTooltipModule],\n selector: 'gio-ps-flow-details-phase-step',\n templateUrl: './gio-ps-flow-details-phase-step.component.html',\n styleUrls: ['./gio-ps-flow-details-phase-step.component.scss'],\n})\nexport class GioPolicyStudioDetailsPhaseStepComponent implements OnChanges {\n @Input()\n public readOnly = false;\n\n @Input()\n public step!: Step;\n\n @Input()\n public genericPolicies: GenericPolicy[] = [];\n\n @Input({ required: true })\n public flowPhase!: FlowPhase;\n\n @Input({ required: true })\n public apiType!: ApiType;\n\n @Input()\n public disableMoveRight: boolean = false;\n\n @Input()\n public disableMoveLeft: boolean = false;\n\n @Output()\n public stepChange = new EventEmitter<Step>();\n\n @Output()\n public deleted = new EventEmitter<void>();\n\n @Output()\n public disabled = new EventEmitter<void>();\n\n @Output()\n public duplicated = new EventEmitter<void>();\n\n @Output()\n public movedRight = new EventEmitter<void>();\n\n @Output()\n public movedLeft = new EventEmitter<void>();\n\n protected genericPolicy?: GenericPolicy;\n protected policyNotFound: false | 'SHARED_POLICY_GROUP' | 'POLICY' = false;\n protected get getPrerequisiteMessage(): string | undefined {\n if (!this.genericPolicy || !isSharedPolicyGroupPolicy(this.genericPolicy) || isEmpty(this.genericPolicy.prerequisiteMessage)) {\n return;\n }\n return this.genericPolicy.prerequisiteMessage;\n }\n\n constructor(private readonly matDialog: MatDialog) {}\n\n public ngOnChanges(changes: SimpleChanges): void {\n if ((changes.policies || changes.step) && !isEmpty(this.genericPolicies) && !isNil(this.step.policy)) {\n this.genericPolicy = this.genericPolicies.find(policy => {\n if (isPolicy(policy)) {\n return policy.policyId === this.step.policy;\n }\n\n if (isSharedPolicyGroupPolicy(policy)) {\n return policy.sharedPolicyGroupId === get(this.step.configuration, 'sharedPolicyGroupId');\n }\n // Not expected\n throw new Error('Unknown policy type');\n });\n\n // if this.genericPolicy is not found, it means that the policy has been deleted or the shared policy group no longer exists (or deployed)\n if (!this.genericPolicy) {\n this.policyNotFound = has(this.step.configuration, 'sharedPolicyGroupId') ? 'SHARED_POLICY_GROUP' : 'POLICY';\n }\n }\n }\n\n public onEditOrView() {\n if (!this.genericPolicy || this.policyNotFound != false) {\n this.matDialog\n .open<GioConfirmDialogComponent, GioConfirmDialogData, boolean>(GioConfirmDialogComponent, {\n data: {\n title: `${this.policyNotFound === 'SHARED_POLICY_GROUP' ? 'Shared Policy Group' : 'Policy'} not found`,\n content: `This step is linked to a ${this.policyNotFound === 'SHARED_POLICY_GROUP' ? 'Shared Policy Group' : 'Policy'} that no longer exists.<br>\n${this.policyNotFound === 'SHARED_POLICY_GROUP' ? 'Note: The Gateway will ignore this step.' : 'Note: The Gateway will throw an error on deployment.'}\n`,\n confirmButton: 'OK',\n disableCancel: true,\n },\n role: 'alertdialog',\n id: 'gioPolicyNotFoundDialog',\n width: GIO_DIALOG_WIDTH.MEDIUM,\n })\n .afterClosed()\n .subscribe();\n return;\n }\n\n this.matDialog\n .open<GioPolicyStudioStepEditDialogComponent, GioPolicyStudioStepEditDialogData, GioPolicyStudioStepEditDialogResult>(\n GioPolicyStudioStepEditDialogComponent,\n {\n data: {\n readOnly: this.readOnly,\n genericPolicy: this.genericPolicy,\n step: this.step,\n flowPhase: this.flowPhase,\n apiType: this.apiType,\n },\n role: 'alertdialog',\n id: 'gioPolicyStudioPolicyFormDialog',\n width: GIO_DIALOG_WIDTH.LARGE,\n },\n )\n .afterClosed()\n .subscribe(stepToEdit => {\n if (!stepToEdit) {\n return;\n }\n\n this.stepChange.emit(stepToEdit);\n });\n }\n\n public onDisable() {\n this.disabled.emit();\n }\n\n public onDelete() {\n this.deleted.emit();\n }\n\n public onDuplicate() {\n this.duplicated.emit();\n }\n\n public onMoveRight() {\n this.movedRight.emit();\n }\n\n public onMoveLeft() {\n this.movedLeft.emit();\n }\n}\n","<!--\n\n Copyright (C) 2025 The Gravitee team (http://gravitee.io)\n \n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n \n http://www.apache.org/licenses/LICENSE-2.0\n \n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n\n-->\n\n<div class=\"info\">\n <div class=\"info__head\">\n <mat-icon class=\"info__head__icon\" [svgIcon]=\"genericPolicy?.icon ?? 'gio:puzzle'\"></mat-icon>\n\n @if (step.name) {\n <span class=\"info__head__name\">{{ step.name }}</span>\n }\n\n @if (genericPolicy?.type === 'SHARED_POLICY_GROUP') {\n <span class=\"gio-badge-neutral\" matTooltip=\"Shared Policy Group\">\n <mat-icon svgIcon=\"gio:users\"></mat-icon>\n </span>\n }\n @if (getPrerequisiteMessage) {\n <mat-icon class=\"info__head__info\" svgIcon=\"gio:info\" [matTooltip]=\"getPrerequisiteMessage\"></mat-icon>\n }\n @if (policyNotFound !== false) {\n <span\n class=\"gio-badge-error\"\n [matTooltip]=\"policyNotFound === 'SHARED_POLICY_GROUP' ? 'Shared Policy Group not found' : 'Policy not found'\"\n >\n @if (policyNotFound === 'SHARED_POLICY_GROUP') {\n <mat-icon svgIcon=\"gio:users\"></mat-icon>&nbsp;\n }\n <mat-icon svgIcon=\"gio:alert-circle\"></mat-icon>\n </span>\n }\n </div>\n\n @if (step.description) {\n <div class=\"info__description\">{{ step.description }}</div>\n }\n</div>\n\n<button class=\"menuBtn\" mat-icon-button [matMenuTriggerFor]=\"policyMenu\"><mat-icon svgIcon=\"gio:more-vertical\"></mat-icon></button>\n\n<mat-menu #policyMenu=\"matMenu\">\n <button mat-menu-item (click)=\"onEditOrView()\">\n <mat-icon [svgIcon]=\"readOnly ? 'gio:eye-empty' : 'gio:edit-pencil'\"></mat-icon>\n <span>{{ readOnly ? 'View' : 'Edit' }}</span>\n </button>\n\n <button [disabled]=\"readOnly\" mat-menu-item (click)=\"onDisable()\">\n <mat-icon [svgIcon]=\"step.enabled ? 'gio:prohibition' : 'gio:check-circled-outline'\"></mat-icon>\n <span>{{ step.enabled ? 'Disable' : 'Enable' }}</span>\n </button>\n\n <button [disabled]=\"readOnly\" mat-menu-item (click)=\"onDelete()\">\n <mat-icon svgIcon=\"gio:trash\"></mat-icon>\n <span>Delete</span>\n </button>\n <button [disabled]=\"readOnly\" mat-menu-item (click)=\"onDuplicate()\">\n <mat-icon svgIcon=\"gio:copy\"></mat-icon>\n <span>Duplicate</span>\n </button>\n @if (disableMoveRight) {\n <button [disabled]=\"readOnly\" mat-menu-item (click)=\"onMoveRight()\">\n <mat-icon svgIcon=\"gio:arrow-right\"></mat-icon>\n <span>Move right</span>\n </button>\n }\n @if (disableMoveLeft) {\n <button [disabled]=\"readOnly\" mat-menu-item (click)=\"onMoveLeft()\">\n <mat-icon svgIcon=\"gio:arrow-left\"></mat-icon>\n <span>Move left</span>\n </button>\n }\n</mat-menu>\n","/*\n * Copyright (C) 2022 The Gravitee team (http://gravitee.io)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { Component, EventEmitter, Input, OnChanges, Output, SimpleChanges } from '@angular/core';\nimport { isEmpty, uniqueId } from 'lodash';\nimport { MatDialog } from '@angular/material/dialog';\nimport { GIO_DIALOG_WIDTH, GioBannerModule, GioIconsModule } from '@gravitee/ui-particles-angular';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { MatButtonModule } from '@angular/material/button';\n\nimport {\n GioPolicyStudioPoliciesCatalogDialogComponent,\n GioPolicyStudioPoliciesCatalogDialogData,\n GioPolicyStudioPoliciesCatalogDialogResult,\n} from '../policies-catalog-dialog/gio-ps-policies-catalog-dialog.component';\nimport { ApiType, ConnectorInfo, FlowPhase, Step } from '../../models';\nimport { GioPolicyStudioDetailsPhaseStepComponent } from '../flow-details-phase-step/gio-ps-flow-details-phase-step.component';\nimport { GenericPolicy } from '../../models/policy/GenericPolicy';\n\ntype StepVM =\n | {\n _id: string;\n type: 'connectors';\n connectors: {\n name?: string;\n icon?: string;\n }[];\n }\n | {\n _id: string;\n type: 'step';\n step: Step;\n index: number;\n };\n\n@Component({\n imports: [MatTooltipModule, MatButtonModule, GioPolicyStudioDetailsPhaseStepComponent, GioIconsModule, GioBannerModule],\n selector: 'gio-ps-flow-details-phase',\n templateUrl: './gio-ps-flow-details-phase.component.html',\n styleUrls: ['./gio-ps-flow-details-phase.component.scss'],\n})\nexport class GioPolicyStudioDetailsPhaseComponent implements OnChanges {\n @Input()\n public readOnly = false;\n\n @Input()\n public steps: Step[] = [];\n\n @Input()\n public name!: string;\n\n @Input()\n public description!: string;\n\n @Input()\n public startConnector: ConnectorInfo[] = [];\n\n @Input()\n public endConnector: ConnectorInfo[] = [];\n\n @Input()\n public apiType!: ApiType;\n\n @Input()\n public genericPolicies: GenericPolicy[] = [];\n\n @Input()\n public policyFlowPhase!: FlowPhase;\n\n @Input()\n public trialUrl?: string;\n\n @Input()\n public disabledNotYetAvailable = false;\n\n @Output()\n public stepsChange = new EventEmitter<Step[]>();\n\n public stepsVM: StepVM[] = [];\n\n public hasStartAndEndConnectors = true;\n constructor(private readonly matDialog: MatDialog) {}\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (changes.steps || changes.startConnector || changes.endConnector) {\n this.stepsVM = [\n {\n _id: 'start',\n type: 'connectors',\n connectors: this.startConnector.map(connector => ({\n name: connector.name,\n icon: connector.icon,\n })),\n },\n\n ...(this.steps ?? []).map((step, index) => ({\n _id: uniqueId('step_'),\n type: 'step' as const,\n step: step,\n index,\n })),\n\n {\n _id: 'end',\n type: 'connectors',\n connectors: this.endConnector.map(connector => ({\n name: connector.name,\n icon: connector.icon,\n })),\n },\n ];\n\n // Disable phase if there are no start & end connectors\n this.hasStartAndEndConnectors = this.stepsVM.filter(step => step.type === 'connectors' && !isEmpty(step.connectors)).length >= 2;\n }\n }\n\n public onAddPolicy(index: number): void {\n this.matDialog\n .open<\n GioPolicyStudioPoliciesCatalogDialogComponent,\n GioPolicyStudioPoliciesCatalogDialogData,\n GioPolicyStudioPoliciesCatalogDialogResult\n >(GioPolicyStudioPoliciesCatalogDialogComponent, {\n data: {\n genericPolicies: this.genericPolicies,\n flowPhase: this.policyFlowPhase,\n apiType: this.apiType,\n trialUrl: this.trialUrl,\n },\n role: 'alertdialog',\n id: 'gioPolicyStudioPoliciesCatalogDialog',\n width: GIO_DIALOG_WIDTH.LARGE,\n })\n .afterClosed()\n .subscribe(stepToAdd => {\n if (!this.steps || !stepToAdd) {\n return;\n }\n // Add Step after the given index\n this.stepsChange.emit([...this.steps.slice(0, index + 1), stepToAdd, ...this.steps.slice(index + 1)]);\n });\n }\n\n public onStepChange(index: number, stepToEdit: Step): void {\n if (!this.steps) {\n return;\n }\n // Replace the step at the given index\n this.stepsChange.emit([...this.steps.slice(0, index), stepToEdit, ...this.steps.slice(index + 1)]);\n }\n\n public onStepDeleted(index: number): void {\n if (!this.steps) {\n return;\n }\n this.stepsChange.emit([...this.steps.slice(0, index), ...this.steps.slice(index + 1)]);\n }\n\n public onStepDisabled(index: number): void {\n if (!this.steps) {\n return;\n }\n\n this.stepsChange.emit([\n ...this.steps.slice(0, index),\n {\n ...this.steps[index],\n enabled: !this.steps[index].enabled,\n },\n ...this.steps.slice(index + 1),\n ]);\n }\n\n public onStepDuplicated(index: number) {\n if (!this.steps) {\n return;\n }\n\n this.stepsChange.emit([...this.steps.slice(0, index + 1), this.steps[index], ...this.steps.slice(index + 1)]);\n }\n\n public onStepMovedRight(index: number) {\n if (!this.steps) {\n return;\n }\n // Check if the step is not the last one\n if (index === this.steps.length - 1) {\n return;\n }\n\n this.stepsChange.emit([...this.steps.slice(0, index), this.steps[index + 1], this.steps[index], ...this.steps.slice(index + 2)]);\n }\n\n public onStepMovedLeft(index: number) {\n if (!this.steps) {\n return;\n }\n // Check if the step is not the first one\n if (index === 0) {\n return;\n }\n\n this.stepsChange.emit([...this.steps.slice(0, index - 1), this.steps[index], this.steps[index - 1], ...this.steps.slice(index + 1)]);\n }\n}\n","<!--\n\n Copyright (C) 2025 The Gravitee team (http://gravitee.io)\n \n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n \n http://www.apache.org/licenses/LICENSE-2.0\n \n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n\n-->\n\n<div class=\"header\">\n <span class=\"header__name\">\n {{ name }}\n </span>\n <span class=\"header__description\">\n {{ description }}\n </span>\n\n @if (!hasStartAndEndConnectors && !disabledNotYetAvailable) {\n <span class=\"header__infoIcon\" matTooltip=\"Policies might not be evaluated\" matTooltipPosition=\"before\">\n <mat-icon svgIcon=\"gio:info\"></mat-icon>\n </span>\n }\n</div>\n\n@if (disabledNotYetAvailable) {\n <div class=\"disabledContent\">\n <gio-banner-info>\n Coming soon\n <span gioBannerBody> This feature is not yet available in the current version of the API Studio. Stay tuned for updates. </span>\n </gio-banner-info>\n </div>\n} @else if (hasStartAndEndConnectors) {\n <div class=\"wrapper\">\n <div class=\"content\">\n @for (stepVM of stepsVM; track stepVM._id; let isFirst = $first) {\n <div class=\"content__step\">\n <!-- Connector -->\n @if (stepVM.type === 'connectors') {\n <div class=\"content__step__connector\">\n @for (connector of stepVM.connectors; track connector) {\n <span class=\"gio-badge-white content__step__connector__badge\">\n @if (connector.icon) {\n <mat-icon [svgIcon]=\"connector.icon\" class=\"content__step__connector__badge__icon\"></mat-icon>\n }\n {{ connector.name }}\n </span>\n }\n </div>\n <!-- Add policy button after first connector -->\n @if (isFirst) {\n <mat-icon class=\"content__step__rightArrow\" svgIcon=\"gio:arrow-right\"></mat-icon>\n <button [disabled]=\"readOnly\" class=\"content__step__addBtn\" mat-button (click)=\"onAddPolicy(-1)\">\n <mat-icon svgIcon=\"gio:plus\"></mat-icon>\n </button>\n <mat-icon class=\"content__step__rightArrow\" svgIcon=\"gio:arrow-right\"></mat-icon>\n }\n }\n\n <!-- Policy -->\n @if (stepVM.type === 'step') {\n <div class=\"content__step__policy\">\n @if (stepVM.step?.condition) {\n <div class=\"content__step__policy__condition\" [class.disabled]=\"!stepVM.step.enabled\">\n <span class=\"gio-badge-neutral\" [matTooltip]=\"'Condition: ' + stepVM.step.condition\"\n ><mat-icon svgIcon=\"gio:if\"></mat-icon> {{ stepVM.step.condition }}</span\n >\n </div>\n }\n\n <gio-ps-flow-details-phase-step\n class=\"content__step__step\"\n [readOnly]=\"readOnly\"\n [class.disabled]=\"!stepVM.step.enabled\"\n [genericPolicies]=\"genericPolicies\"\n [step]=\"stepVM.step\"\n [flowPhase]=\"policyFlowPhase\"\n [apiType]=\"apiType\"\n (stepChange)=\"onStepChange(stepVM.index, $event)\"\n (deleted)=\"onStepDeleted(stepVM.index)\"\n (disabled)=\"onStepDisabled(stepVM.index)\"\n (duplicated)=\"onStepDuplicated(stepVM.index)\"\n [disableMoveRight]=\"stepVM.index !== this.steps.length - 1\"\n (movedRight)=\"onStepMovedRight(stepVM.index)\"\n [disableMoveLeft]=\"stepVM.index !== 0\"\n (movedLeft)=\"onStepMovedLeft(stepVM.index)\"\n ></gio-ps-flow-details-phase-step>\n </div>\n\n <!-- Add policy button -->\n <mat-icon class=\"content__step__rightArrow\" svgIcon=\"gio:arrow-right\"></mat-icon>\n <button [disabled]=\"readOnly\" class=\"content__step__addBtn\" mat-button (click)=\"onAddPolicy(stepVM.index)\">\n <mat-icon svgIcon=\"gio:plus\"></mat-icon>\n </button>\n <mat-icon class=\"content__step__rightArrow\" svgIcon=\"gio:arrow-right\"></mat-icon>\n }\n </div>\n }\n </div>\n </div>\n} @else {\n <div class=\"disabledContent\">\n <gio-banner-warning>\n Policies might not be evaluated\n <span gioBannerBody>\n Your current flow settings are not applicable to this phase. Select supporting endpoints and operations in the flow configuration to\n enable this phase.\n </span>\n </gio-banner-warning>\n </div>\n}\n","/*\n * Copyright (C) 2023 The Gravitee team (http://gravitee.io)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { Pipe, PipeTransform } from '@angular/core';\nimport { filter, isEmpty } from 'lodash';\n\nimport { ConnectorInfo, ConnectorMode } from '../../models';\n\n@Pipe({\n standalone: true,\n name: 'gioFilterConnectorsByMode',\n})\nexport class GioFilterConnectorsByModePipe implements PipeTransform {\n public transform(items: ConnectorInfo[], mode: ConnectorMode, activeModes: ConnectorMode[] = []): ConnectorInfo[] {\n if (items) {\n if (!mode) {\n return items;\n }\n\n if (isEmpty(activeModes) || activeModes.includes(mode)) {\n return filter(items, (item: ConnectorInfo) => {\n return item.supportedModes.includes(mode);\n });\n }\n }\n return [];\n }\n}\n","/*\n * Copyright (C) 2022 The Gravitee team (http://gravitee.io)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { Component, Input, OnChanges, SimpleChanges } from '@angular/core';\nimport { isEmpty } from 'lodash';\nimport { GioIconsModule } from '@gravitee/ui-particles-angular';\nimport { MatCommonModule } from '@angular/material/core';\nimport { CommonModule } from '@angular/common';\n\nimport { ChannelSelector, ConditionSelector, ConnectorInfo, HttpSelector, McpSelector, Operation } from '../../models';\nimport { FlowVM } from '../../policy-studio/gio-policy-studio.model';\n\n@Component({\n imports: [CommonModule, GioIconsModule, MatCommonModule],\n selector: 'gio-ps-flow-details-info-bar',\n templateUrl: './gio-ps-flow-details-info-bar.component.html',\n styleUrls: ['./gio-ps-flow-details-info-bar.component.scss'],\n})\nexport class GioPolicyStudioDetailsInfoBarComponent implements OnChanges {\n @Input()\n public flow?: FlowVM = undefined;\n\n @Input()\n public entrypointsInfo?: ConnectorInfo[];\n\n private _methods?: { name: string; class: string }[] | null;\n\n private _mcpMethods?: { name: string; class: string }[] | null;\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (changes['flow']) {\n // Invalidate cache when flow changes\n this._methods = undefined;\n this._mcpMethods = undefined;\n }\n }\n\n public get condition(): string | undefined {\n const conditionSelector = this.flow?.selectors?.find(s => s.type === 'CONDITION') as ConditionSelector;\n if (!conditionSelector) {\n return undefined;\n }\n return conditionSelector?.condition;\n }\n\n // MESSAGE API type\n\n public get operations(): string[] | undefined {\n const channelSelector = this.flow?.selectors?.find(s => s.type === 'CHANNEL') as ChannelSelector;\n if (!channelSelector) {\n return undefined;\n }\n const operationToBadge: Record<Operation, string> = {\n PUBLISH: 'PUB',\n SUBSCRIBE: 'SUB',\n };\n // If no operations are selected, all operations are valid\n const operations =\n !channelSelector.operations || isEmpty(channelSelector.operations) ? (['PUBLISH', 'SUBSCRIBE'] as const) : channelSelector.operations;\n\n return operations.map(o => operationToBadge[o]).sort();\n }\n\n public get channel(): string | undefined {\n const channelSelector = this.flow?.selectors?.find(s => s.type === 'CHANNEL') as ChannelSelector;\n if (!channelSelector) {\n return undefined;\n }\n return channelSelector?.channel;\n }\n\n public get channelOperator(): string | undefined {\n const channelSelector = this.flow?.selectors?.find(s => s.type === 'CHANNEL') as ChannelSelector;\n if (!channelSelector) {\n return undefined;\n }\n return channelSelector?.channelOperator;\n }\n\n public get entrypoints(): ConnectorInfo[] | undefined {\n const channelSelector = this.flow?.selectors?.find(s => s.type === 'CHANNEL') as ChannelSelector;\n if (!channelSelector) {\n return undefined;\n }\n\n return this.entrypointsInfo?.filter(\n e =>\n // If no entrypoints are selected, all entrypoints are valid\n !channelSelector.entrypoints || isEmpty(channelSelector.entrypoints) || channelSelector.entrypoints?.includes(e.type),\n );\n }\n\n // PROXY API type\n\n public get path(): string | undefined {\n const httpSelector = this.flow?.selectors?.find(s => s.type === 'HTTP') as HttpSelector;\n if (!httpSelector) {\n return undefined;\n }\n return httpSelector?.path;\n }\n\n public get pathOperator(): string | undefined {\n const httpSelector = this.flow?.selectors?.find(s => s.type === 'HTTP') as HttpSelector;\n if (!httpSelector) {\n return undefined;\n }\n return httpSelector?.pathOperator;\n }\n\n public get methods() {\n if (this._methods === undefined && this.flow) {\n const httpSelector = this.flow.selectors?.find(s => s.type === 'HTTP') as HttpSelector;\n if (!httpSelector) {\n this._methods = null; // Cache null to avoid recomputation\n return undefined;\n }\n this._methods = httpSelector?.methods?.length\n ? httpSelector.methods.map(m => ({ name: m, class: `gio-method-badge-${m.toLowerCase()}` }))\n : [{ name: 'ALL', class: 'gio-badge-neutral' }];\n }\n return this._methods === null ? undefined : this._methods;\n }\n\n // MCP Proxy API\n public get mcpMethods() {\n if (this._mcpMethods === undefined && this.flow) {\n const mcpSelector = this.flow.selectors?.find(s => s.type === 'MCP') as McpSelector;\n if (!mcpSelector) {\n this._mcpMethods = null; // Cache null to avoid recomputation\n return undefined;\n }\n\n this._mcpMethods = mcpSelector?.methods?.length\n ? mcpSelector.methods.map(m => ({ name: m, class: `gio-badge-neutral` }))\n : [{ name: 'All Methods', class: 'gio-badge-neutral' }];\n }\n return this._mcpMethods === null ? undefined : this._mcpMethods;\n }\n}\n","<!--\n\n Copyright (C) 2025 The Gravitee team (http://gravitee.io)\n \n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n \n http://www.apache.org/licenses/LICENSE-2.0\n \n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n\n-->\n@if (flow?.name) {\n <div class=\"info\">\n <span class=\"info__label\">Name</span>\n <span class=\"info__value strong\">{{ flow?.name }}</span>\n </div>\n}\n\n@if (entrypoints) {\n <div class=\"info\">\n <span class=\"info__label\">Entrypoints</span>\n @for (entrypoint of entrypoints; track entrypoint) {\n <span class=\"info__value gio-badge gio-badge-neutral\">\n <mat-icon [svgIcon]=\"entrypoint.icon\"></mat-icon>\n {{ entrypoint.name }}</span\n >\n }\n </div>\n}\n\n<!-- MESSAGE API type -->\n\n@if (operations) {\n <div class=\"info\">\n <span class=\"info__label\">Operations</span>\n @for (operation of operations; track operation) {\n <span class=\"info__value gio-badge-neutral\"> {{ operation }}</span>\n }\n </div>\n}\n\n@if (channel) {\n <div class=\"info\">\n <span class=\"info__label\">Channel</span>\n <span class=\"info__value strong\">{{ channel }}</span>\n </div>\n}\n\n@if (channelOperator) {\n <div class=\"info\">\n <span class=\"info__label\">Channel Operator</span>\n <span class=\"info__value gio-badge-neutral\">{{ channelOperator }}</span>\n </div>\n}\n\n<!-- PROXY API type -->\n\n@if (path) {\n <div class=\"info\">\n <span class=\"info__label\">Path</span>\n <span class=\"info__value strong\">{{ path }}</span>\n </div>\n}\n\n@if (pathOperator) {\n <div class=\"info\">\n <span class=\"info__label\">Path Operator</span>\n <span class=\"info__value gio-badge-neutral\">{{ pathOperator }}</span>\n </div>\n}\n\n@if (methods) {\n <div class=\"info\">\n <span class=\"info__label\">HTTP methods</span>\n @for (method of methods; track method) {\n <span class=\"info__value method\" [ngClass]=\"method.class\"> {{ method.name }}</span>\n }\n </div>\n}\n\n<!-- Mcp Methods-->\n@if (mcpMethods) {\n <div class=\"info\">\n <span class=\"info__label\">MCP Methods</span>\n @for (mcpMethod of mcpMethods; track mcpMethod.name) {\n <span class=\"info__value\" [ngClass]=\"mcpMethod.class\">{{ mcpMethod.name }}</span>\n }\n </div>\n}\n<!-- Condition -->\n@if (condition) {\n <div class=\"info\">\n <span class=\"info__label\">Condition</span>\n <span class=\"info__value gio-badge-neutral condition\">{{ condition }}</span>\n </div>\n}\n","/*\n * Copyright (C) 2022 The Gravitee team (http://gravitee.io)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { Component, EventEmitter, Input, OnChanges, Output, SimpleChanges } from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { tap } from 'rxjs/operators';\nimport { isEmpty } from 'lodash';\nimport { GIO_DIALOG_WIDTH, GioBannerModule, GioIconsModule, GioLoaderModule } from '@gravitee/ui-particles-angular';\nimport { MatTabsModule } from '@angular/material/tabs';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\nimport { FlowVM } from '../../policy-studio/gio-policy-studio.model';\nimport {\n GioPolicyStudioFlowMessageFormDialogComponent,\n GioPolicyStudioFlowMessageFormDialogData,\n} from '../flow-form-dialog/flow-message-form-dialog/gio-ps-flow-message-form-dialog.component';\nimport { ApiType, ChannelSelector, ConnectorInfo, Operation, Policy, Step, GenericPolicy } from '../../models';\nimport {\n GioPolicyStudioFlowProxyFormDialogComponent,\n GioPolicyStudioFlowProxyFormDialogData,\n} from '../flow-form-dialog/flow-proxy-form-dialog/gio-ps-flow-proxy-form-dialog.component';\nimport { GioPolicyStudioFlowFormDialogResult } from '../flow-form-dialog/gio-ps-flow-form-dialog-result.model';\nimport { GioPolicyStudioDetailsPhaseComponent } from '../flow-details-phase/gio-ps-flow-details-phase.component';\nimport { GioFilterConnectorsByModePipe } from '../filter-pipe/gio-flter-connectors-by-mode.pipe';\nimport { GioPolicyStudioDetailsInfoBarComponent } from '../flow-details-info-bar/gio-ps-flow-details-info-bar.component';\nimport {\n GioPolicyStudioFlowNativeFormDialogComponent,\n GioPolicyStudioFlowNativeFormDialogData,\n} from '../flow-form-dialog/flow-native-form-dialog/gio-ps-flow-native-form-dialog.component';\nimport {\n GioPolicyStudioFlowMcpFormDialogComponent,\n GioPolicyStudioFlowMcpFormDialogData,\n} from '../flow-form-dialog/flow-mcp-form-dialog/gio-ps-flow-mcp-form-dialog.component';\nimport {\n GioPolicyStudioFlowLlmFormDialogComponent,\n GioPolicyStudioFlowLlmFormDialogData,\n} from '../flow-form-dialog/flow-llm-form-dialog/gio-ps-flow-llm-form-dialog.component';\n\n@Component({\n imports: [\n MatTabsModule,\n MatButtonModule,\n GioIconsModule,\n GioPolicyStudioDetailsPhaseComponent,\n GioFilterConnectorsByModePipe,\n GioLoaderModule,\n GioPolicyStudioDetailsInfoBarComponent,\n MatTooltipModule,\n GioBannerModule,\n ],\n selector: 'gio-ps-flow-details',\n templateUrl: './gio-ps-flow-details.component.html',\n styleUrls: ['./gio-ps-flow-details.component.scss'],\n})\nexport class GioPolicyStudioDetailsComponent implements OnChanges {\n @Input()\n public readOnly = false;\n\n @Input()\n public loading = false;\n\n @Input()\n public apiType!: ApiType;\n\n @Input()\n public flow?: FlowVM = undefined;\n\n @Input()\n public entrypointsInfo: ConnectorInfo[] = [];\n\n @Input()\n public endpointsInfo: ConnectorInfo[] = [];\n\n @Input()\n public policies: Policy[] = [];\n\n @Input()\n public genericPolicies: GenericPolicy[] = [];\n\n @Input()\n public trialUrl?: string;\n\n @Output()\n public flowChange = new EventEmitter<FlowVM>();\n\n @Output()\n public deleteFlow = new EventEmitter<FlowVM>();\n\n public messageFlowEntrypointsInfo: ConnectorInfo[] = [];\n\n public operations: Operation[] = [];\n\n constructor(private readonly matDialog: MatDialog) {}\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (changes.entrypointsInfo || changes.flow) {\n const channelSelector = this.flow?.selectors?.find(s => s.type === 'CHANNEL') as ChannelSelector;\n\n this.operations = channelSelector?.operations ?? [];\n\n if (!channelSelector) {\n // If no channel selector found. Keep default value\n this.messageFlowEntrypointsInfo = [];\n return;\n }\n\n this.messageFlowEntrypointsInfo =\n this.entrypointsInfo?.filter(\n e =>\n // If not entrypoints are defined, all entrypoints are valid\n !channelSelector.entrypoints || isEmpty(channelSelector.entrypoints) || channelSelector.entrypoints?.includes(e.type),\n ) ?? [];\n }\n }\n\n public onEditFlow(): void {\n let dialogResult;\n switch (this.apiType) {\n case 'MESSAGE':\n dialogResult = this.matDialog\n .open<\n GioPolicyStudioFlowMessageFormDialogComponent,\n GioPolicyStudioFlowMessageFormDialogData,\n GioPolicyStudioFlowFormDialogResult\n >(GioPolicyStudioFlowMessageFormDialogComponent, {\n data: {\n flow: this.flow,\n entrypoints: this.entrypointsInfo ?? [],\n },\n role: 'alertdialog',\n id: 'gioPsFlowMessageFormDialog',\n width: GIO_DIALOG_WIDTH.MEDIUM,\n })\n .afterClosed();\n break;\n case 'PROXY':\n dialogResult = this.matDialog\n .open<GioPolicyStudioFlowProxyFormDialogComponent, GioPolicyStudioFlowProxyFormDialogData, GioPolicyStudioFlowFormDialogResult>(\n GioPolicyStudioFlowProxyFormDialogComponent,\n {\n data: {\n flow: this.flow,\n },\n role: 'alertdialog',\n id: 'gioPsFlowProxyFormDialog',\n width: GIO_DIALOG_WIDTH.MEDIUM,\n },\n )\n .afterClosed();\n break;\n case 'NATIVE':\n dialogResult = this.matDialog\n .open<GioPolicyStudioFlowNativeFormDialogComponent, GioPolicyStudioFlowNativeFormDialogData, GioPolicyStudioFlowFormDialogResult>(\n GioPolicyStudioFlowNativeFormDialogComponent,\n {\n data: {\n flow: this.flow,\n parentGroupName: this.flow!._parentFlowGroupName,\n },\n role: 'alertdialog',\n id: 'gioPsFlowNativeFormDialog',\n width: GIO_DIALOG_WIDTH.MEDIUM,\n },\n )\n .afterClosed();\n break;\n case 'MCP_PROXY':\n dialogResult = this.matDialog\n .open<GioPolicyStudioFlowMcpFormDialogComponent, GioPolicyStudioFlowMcpFormDialogData, GioPolicyStudioFlowFormDialogResult>(\n GioPolicyStudioFlowMcpFormDialogComponent,\n {\n data: {\n parentGroupName: this.flow!._parentFlowGroupName,\n flow: this.flow,\n },\n role: 'alertdialog',\n id: 'gioPsFlowFormDialog',\n width: GIO_DIALOG_WIDTH.MEDIUM,\n },\n )\n .afterClosed();\n break;\n case 'LLM_PROXY':\n dialogResult = this.matDialog\n .open<GioPolicyStudioFlowLlmFormDialogComponent, GioPolicyStudioFlowLlmFormDialogData, GioPolicyStudioFlowFormDialogResult>(\n GioPolicyStudioFlowLlmFormDialogComponent,\n {\n data: {\n flow: this.flow,\n },\n role: 'alertdialog',\n id: 'gioPsFlowFormDialog',\n width: GIO_DIALOG_WIDTH.MEDIUM,\n },\n )\n .afterClosed();\n break;\n default:\n throw new Error(`Unsupported API type ${this.apiType}`);\n }\n\n dialogResult\n .pipe(\n tap(createdOrEdited => {\n if (!createdOrEdited) {\n return;\n }\n this.flowChange.emit(createdOrEdited);\n }),\n )\n .subscribe();\n }\n\n public onDeleteFlow(): void {\n this.deleteFlow.emit(this.flow);\n }\n\n public onEnableDisableFlow(): void {\n if (!this.flow) {\n return;\n }\n\n this.flowChange.emit({\n ...this.flow,\n enabled: !this.flow.enabled,\n _hasChanged: true,\n });\n }\n\n public onStepsChange(flowPhase: 'connect' | 'interact' | 'request' | 'response' | 'publish' | 'subscribe', steps: Step[]): void {\n if (!this.flow) {\n return;\n }\n\n this.flowChange.emit({\n ...this.flow,\n [flowPhase]: steps,\n _hasChanged: true,\n });\n }\n}\n","<!--\n\n Copyright (C) 2025 The Gravitee team (http://gravitee.io)\n \n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n \n http://www.apache.org/licenses/LICENSE-2.0\n \n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n\n-->\n\n@if (!loading) {\n @if (flow) {\n <div class=\"header\">\n <div class=\"header__label\">\n Flow details\n @if (!flow.enabled) {\n <div class=\"gio-badge gio-badge-neutral\">Disabled</div>\n }\n </div>\n <div class=\"header__configBtn\">\n <button\n [disabled]=\"readOnly\"\n class=\"header__configBtn__enableDisable\"\n mat-stroked-button\n [matTooltip]=\"flow.enabled ? 'Disable' : 'Enable'\"\n (click)=\"onEnableDisableFlow()\"\n >\n <mat-icon [svgIcon]=\"flow.enabled ? 'gio:prohibition' : 'gio:check-circled-outline'\"></mat-icon>\n </button>\n <button [disabled]=\"readOnly\" class=\"header__configBtn__edit\" mat-stroked-button (click)=\"onEditFlow()\" matTooltip=\"Edit\">\n <mat-icon svgIcon=\"gio:edit-pencil\"></mat-icon>\n </button>\n <button [disabled]=\"readOnly\" class=\"header__configBtn__delete\" mat-stroked-button (click)=\"onDeleteFlow()\" matTooltip=\"Delete\">\n <mat-icon svgIcon=\"gio:trash\"></mat-icon>\n </button>\n </div>\n </div>\n <gio-ps-flow-details-info-bar\n class=\"infoBar\"\n [class.flowDisabled]=\"!flow.enabled\"\n [flow]=\"flow\"\n [entrypointsInfo]=\"entrypointsInfo\"\n ></gio-ps-flow-details-info-bar>\n\n <div class=\"content\" [class.flowDisabled]=\"!flow.enabled\">\n @if (apiType === 'MESSAGE') {\n <mat-tab-group class=\"content__tabs\" dynamicHeight>\n <mat-tab label=\"Initial connection\" bodyClass=\"content__tabs__body\">\n <gio-ps-flow-details-phase\n class=\"content__phase\"\n name=\"Request phase\"\n description=\"Policies will be applied during the connection establishment\"\n [readOnly]=\"readOnly\"\n [startConnector]=\"messageFlowEntrypointsInfo\"\n [endConnector]=\"endpointsInfo\"\n [steps]=\"flow.request ?? []\"\n [apiType]=\"apiType\"\n [genericPolicies]=\"genericPolicies\"\n [trialUrl]=\"trialUrl\"\n policyFlowPhase=\"REQUEST\"\n (stepsChange)=\"onStepsChange('request', $event)\"\n ></gio-ps-flow-details-phase>\n <gio-ps-flow-details-phase\n class=\"content__phase\"\n name=\"Response phase\"\n description=\"Policies will be applied to the response from the initial connection\"\n [readOnly]=\"readOnly\"\n [startConnector]=\"endpointsInfo\"\n [endConnector]=\"messageFlowEntrypointsInfo\"\n [steps]=\"flow.response ?? []\"\n [apiType]=\"apiType\"\n [genericPolicies]=\"genericPolicies\"\n [trialUrl]=\"trialUrl\"\n policyFlowPhase=\"RESPONSE\"\n (stepsChange)=\"onStepsChange('response', $event)\"\n ></gio-ps-flow-details-phase>\n </mat-tab>\n <mat-tab label=\"Event messages\" bodyClass=\"content__tabs__body\">\n <gio-ps-flow-details-phase\n class=\"content__phase\"\n name=\"Publish phase\"\n description=\"Policies will be applied on messages sent to the endpoint\"\n [readOnly]=\"readOnly\"\n [startConnector]=\"messageFlowEntrypointsInfo | gioFilterConnectorsByMode: 'PUBLISH' : operations\"\n [endConnector]=\"endpointsInfo | gioFilterConnectorsByMode: 'PUBLISH' : operations\"\n [steps]=\"flow.publish ?? []\"\n [apiType]=\"apiType\"\n [genericPolicies]=\"genericPolicies\"\n [trialUrl]=\"trialUrl\"\n policyFlowPhase=\"PUBLISH\"\n (stepsChange)=\"onStepsChange('publish', $event)\"\n ></gio-ps-flow-details-phase>\n <gio-ps-flow-details-phase\n class=\"content__phase\"\n name=\"Subscribe phase\"\n description=\"Policies will be applied on messages received by the entrypoint\"\n [readOnly]=\"readOnly\"\n [startConnector]=\"endpointsInfo | gioFilterConnectorsByMode: 'SUBSCRIBE' : operations\"\n [endConnector]=\"messageFlowEntrypointsInfo | gioFilterConnectorsByMode: 'SUBSCRIBE' : operations\"\n [steps]=\"flow.subscribe ?? []\"\n [apiType]=\"apiType\"\n [genericPolicies]=\"genericPolicies\"\n [trialUrl]=\"trialUrl\"\n policyFlowPhase=\"SUBSCRIBE\"\n (stepsChange)=\"onStepsChange('subscribe', $event)\"\n ></gio-ps-flow-details-phase>\n </mat-tab>\n </mat-tab-group>\n }\n\n @if (apiType === 'PROXY') {\n <gio-ps-flow-details-phase\n class=\"content__phase\"\n name=\"Request phase\"\n description=\"Policies will be applied during the connection establishment\"\n [readOnly]=\"readOnly\"\n [startConnector]=\"entrypointsInfo | gioFilterConnectorsByMode: 'REQUEST_RESPONSE'\"\n [endConnector]=\"endpointsInfo | gioFilterConnectorsByMode: 'REQUEST_RESPONSE'\"\n [steps]=\"flow.request ?? []\"\n [apiType]=\"apiType\"\n [genericPolicies]=\"genericPolicies\"\n [trialUrl]=\"trialUrl\"\n policyFlowPhase=\"REQUEST\"\n (stepsChange)=\"onStepsChange('request', $event)\"\n ></gio-ps-flow-details-phase>\n <gio-ps-flow-details-phase\n class=\"content__phase\"\n name=\"Response phase\"\n description=\"Policies will be applied during the connection termination\"\n [readOnly]=\"readOnly\"\n [startConnector]=\"endpointsInfo | gioFilterConnectorsByMode: 'REQUEST_RESPONSE'\"\n [endConnector]=\"entrypointsInfo | gioFilterConnectorsByMode: 'REQUEST_RESPONSE'\"\n [steps]=\"flow.response ?? []\"\n [apiType]=\"apiType\"\n [genericPolicies]=\"genericPolicies\"\n [trialUrl]=\"trialUrl\"\n policyFlowPhase=\"RESPONSE\"\n (stepsChange)=\"onStepsChange('response', $event)\"\n ></gio-ps-flow-details-phase>\n }\n\n @if (apiType === 'NATIVE') {\n <mat-tab-group class=\"content__tabs\" dynamicHeight>\n <mat-tab label=\"Global\" bodyClass=\"content__tabs__body\">\n <gio-ps-flow-details-phase\n class=\"content__phase\"\n name=\"Connect phase\"\n description=\"Policies will be applied when the client connects to the Gateway\"\n [disabledNotYetAvailable]=\"true\"\n [readOnly]=\"readOnly\"\n [startConnector]=\"endpointsInfo | gioFilterConnectorsByMode: 'CONNECT'\"\n [endConnector]=\"entrypointsInfo | gioFilterConnectorsByMode: 'CONNECT'\"\n [steps]=\"flow.connect ?? []\"\n [apiType]=\"apiType\"\n [genericPolicies]=\"genericPolicies\"\n [trialUrl]=\"trialUrl\"\n policyFlowPhase=\"CONNECT\"\n (stepsChange)=\"onStepsChange('connect', $event)\"\n >\n </gio-ps-flow-details-phase>\n <gio-ps-flow-details-phase\n class=\"content__phase\"\n name=\"Interact phase\"\n description=\"Policies will be applied on all interactions between the client and the Gateway\"\n [readOnly]=\"readOnly\"\n [startConnector]=\"entrypointsInfo | gioFilterConnectorsByMode: 'INTERACT'\"\n [endConnector]=\"endpointsInfo | gioFilterConnectorsByMode: 'INTERACT'\"\n [steps]=\"flow.interact ?? []\"\n [apiType]=\"apiType\"\n [genericPolicies]=\"genericPolicies\"\n [trialUrl]=\"trialUrl\"\n policyFlowPhase=\"INTERACT\"\n (stepsChange)=\"onStepsChange('interact', $event)\"\n ></gio-ps-flow-details-phase>\n </mat-tab>\n <mat-tab label=\"Event messages\" bodyClass=\"content__tabs__body\">\n <gio-ps-flow-details-phase\n class=\"content__phase\"\n name=\"Publish phase\"\n description=\"Policies will be applied when publishing messages\"\n [readOnly]=\"readOnly\"\n [startConnector]=\"entrypointsInfo | gioFilterConnectorsByMode: 'PUBLISH'\"\n [endConnector]=\"endpointsInfo | gioFilterConnectorsByMode: 'PUBLISH'\"\n [steps]=\"flow.publish ?? []\"\n [apiType]=\"apiType\"\n [genericPolicies]=\"genericPolicies\"\n [trialUrl]=\"trialUrl\"\n policyFlowPhase=\"PUBLISH\"\n (stepsChange)=\"onStepsChange('publish', $event)\"\n ></gio-ps-flow-details-phase>\n <gio-ps-flow-details-phase\n class=\"content__phase\"\n name=\"Subscribe phase\"\n description=\"Policies will be applied when fetching messages\"\n [readOnly]=\"readOnly\"\n [startConnector]=\"endpointsInfo | gioFilterConnectorsByMode: 'SUBSCRIBE'\"\n [endConnector]=\"entrypointsInfo | gioFilterConnectorsByMode: 'SUBSCRIBE'\"\n [steps]=\"flow.subscribe ?? []\"\n [apiType]=\"apiType\"\n [genericPolicies]=\"genericPolicies\"\n [trialUrl]=\"trialUrl\"\n policyFlowPhase=\"SUBSCRIBE\"\n (stepsChange)=\"onStepsChange('subscribe', $event)\"\n ></gio-ps-flow-details-phase>\n </mat-tab>\n </mat-tab-group>\n }\n\n @if (apiType === 'MCP_PROXY') {\n <gio-ps-flow-details-phase\n class=\"content__phase\"\n name=\"Request phase\"\n description=\"Policies will be applied during the connection establishment\"\n [readOnly]=\"readOnly\"\n [startConnector]=\"entrypointsInfo | gioFilterConnectorsByMode: 'REQUEST_RESPONSE'\"\n [endConnector]=\"endpointsInfo | gioFilterConnectorsByMode: 'REQUEST_RESPONSE'\"\n [steps]=\"flow.request ?? []\"\n [apiType]=\"apiType\"\n [genericPolicies]=\"genericPolicies\"\n [trialUrl]=\"trialUrl\"\n policyFlowPhase=\"REQUEST\"\n (stepsChange)=\"onStepsChange('request', $event)\"\n ></gio-ps-flow-details-phase>\n <gio-ps-flow-details-phase\n class=\"content__phase\"\n name=\"Response phase\"\n description=\"Policies will be applied during the connection termination\"\n [readOnly]=\"readOnly\"\n [startConnector]=\"endpointsInfo | gioFilterConnectorsByMode: 'REQUEST_RESPONSE'\"\n [endConnector]=\"entrypointsInfo | gioFilterConnectorsByMode: 'REQUEST_RESPONSE'\"\n [steps]=\"flow.response ?? []\"\n [apiType]=\"apiType\"\n [genericPolicies]=\"genericPolicies\"\n [trialUrl]=\"trialUrl\"\n policyFlowPhase=\"RESPONSE\"\n (stepsChange)=\"onStepsChange('response', $event)\"\n ></gio-ps-flow-details-phase>\n }\n @if (apiType === 'LLM_PROXY') {\n <gio-ps-flow-details-phase\n class=\"content__phase\"\n name=\"Request phase\"\n description=\"Policies will be applied during the connection establishment\"\n [readOnly]=\"readOnly\"\n [startConnector]=\"entrypointsInfo | gioFilterConnectorsByMode: 'REQUEST_RESPONSE'\"\n [endConnector]=\"endpointsInfo | gioFilterConnectorsByMode: 'REQUEST_RESPONSE'\"\n [steps]=\"flow.request ?? []\"\n [apiType]=\"apiType\"\n [genericPolicies]=\"genericPolicies\"\n [trialUrl]=\"trialUrl\"\n policyFlowPhase=\"REQUEST\"\n (stepsChange)=\"onStepsChange('request', $event)\"\n ></gio-ps-flow-details-phase>\n <gio-ps-flow-details-phase\n class=\"content__phase\"\n name=\"Response phase\"\n description=\"Policies will be applied during the connection termination\"\n [readOnly]=\"readOnly\"\n [startConnector]=\"endpointsInfo | gioFilterConnectorsByMode: 'REQUEST_RESPONSE'\"\n [endConnector]=\"entrypointsInfo | gioFilterConnectorsByMode: 'REQUEST_RESPONSE'\"\n [steps]=\"flow.response ?? []\"\n [apiType]=\"apiType\"\n [genericPolicies]=\"genericPolicies\"\n [trialUrl]=\"trialUrl\"\n policyFlowPhase=\"RESPONSE\"\n (stepsChange)=\"onStepsChange('response', $event)\"\n ></gio-ps-flow-details-phase>\n }\n </div>\n } @else {\n <div class=\"emptyFlows\">\n <h2>No flows yet</h2>\n <p class=\"mat-body-1\">Flows allow you to customize the behavior of your API event phases through configurable policies</p>\n </div>\n }\n} @else {\n <div class=\"header loading\">\n <div class=\"header__label\">Flow details</div>\n <div class=\"header__configBtn\">\n <button class=\"header__configBtn__edit\" mat-stroked-button disabled>\n <mat-icon svgIcon=\"gio:edit-pencil\"></mat-icon>\n </button>\n <button class=\"header__configBtn__delete\" mat-stroked-button disabled>\n <mat-icon svgIcon=\"gio:trash\"></mat-icon>\n </button>\n </div>\n </div>\n <gio-ps-flow-details-info-bar class=\"infoBar loading\"></gio-ps-flow-details-info-bar>\n <div class=\"content loading\">\n <gio-loader></gio-loader>\n </div>\n}\n","/*\n * Copyright (C) 2022 The Gravitee team (http://gravitee.io)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { Component, computed, EventEmitter, Input, OnChanges, OnDestroy, Output, SimpleChanges } from '@angular/core';\nimport { cloneDeep, differenceBy, flatten, isEqual, omit, unionBy, uniqueId } from 'lodash';\nimport { EMPTY, Subscription, timer } from 'rxjs';\nimport { CommonModule } from '@angular/common';\nimport { GioIconsModule } from '@gravitee/ui-particles-angular';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { MatButtonModule } from '@angular/material/button';\n\nimport {\n ConnectorInfo,\n Flow,\n FlowExecution,\n Plan,\n Policy,\n PolicyDocumentationFetcher,\n PolicySchemaFetcher,\n SaveOutput,\n SharedPolicyGroupPolicy,\n toGenericPolicies,\n GenericPolicy,\n PolicyInput,\n fromPolicyInput,\n ApiType,\n} from '../models';\nimport { GioPolicyStudioFlowsMenuComponent } from '../components/flows-menu/gio-ps-flows-menu.component';\nimport { GioPolicyStudioDetailsComponent } from '../components/flow-details/gio-ps-flow-details.component';\n\nimport { FlowGroupVM, FlowVM } from './gio-policy-studio.model';\nimport { GioPolicyStudioService } from './gio-policy-studio.service';\n\nexport type FlowSelection = { planIndex: number; flowIndex: number };\n\n@Component({\n imports: [\n CommonModule,\n MatTooltipModule,\n MatButtonModule,\n GioIconsModule,\n GioPolicyStudioFlowsMenuComponent,\n GioPolicyStudioDetailsComponent,\n ],\n selector: 'gio-policy-studio',\n templateUrl: './gio-policy-studio.component.html',\n styleUrls: ['./gio-policy-studio.component.scss'],\n})\nexport class GioPolicyStudioComponent implements OnChanges, OnDestroy {\n /**\n * May be set to `true` if the API is not manageable from the UI (e.g. kubernetes operator APIs)\n */\n @Input()\n public readOnly = false;\n\n /**\n * API type (required)\n */\n @Input()\n public apiType!: ApiType;\n\n /**\n * Flow execution config (required)\n */\n @Input()\n public flowExecution!: FlowExecution;\n\n /**\n * List of entrypoints to display\n */\n @Input()\n public entrypointsInfo: ConnectorInfo[] = [];\n\n /**\n * List of endpoints to display\n */\n @Input()\n public endpointsInfo: ConnectorInfo[] = [];\n\n /**\n * List of common flows to add to common flows group\n */\n @Input()\n public commonFlows: Flow[] = [];\n\n /**\n * List of plans with their flows\n */\n @Input()\n public plans: Plan[] = [];\n\n /**\n * List of policies usable in the policy studio\n */\n @Input({\n transform: (policies: unknown) => policies ?? [],\n })\n public set policies(value: (PolicyInput | Policy)[]) {\n this._policies = value.map(fromPolicyInput);\n }\n public get policies(): Policy[] {\n return this._policies;\n }\n private _policies: Policy[] = [];\n\n /**\n * List of SharedPolicyGroups usable in the studio\n */\n @Input()\n public sharedPolicyGroupPolicies: SharedPolicyGroupPolicy[] = [];\n\n /**\n * When a policy is not available with the current license,\n * this URL is used to redirect the user to the trial page.\n */\n @Input()\n public trialUrl?: string;\n\n /**\n * Loading state\n */\n @Input()\n public loading = false;\n\n /**\n * Called when Policy Studio needs to fetch the policy schema\n * @returns Observable of the policy schema\n */\n @Input()\n public policySchemaFetcher: PolicySchemaFetcher = () => EMPTY;\n\n /**\n * Called when Policy Studio needs to fetch the policy documentation\n * @returns Observable of the policy documentation\n */\n @Input()\n public policyDocumentationFetcher: PolicyDocumentationFetcher = () => EMPTY;\n\n @Input()\n public selectedFlowIndexes: FlowSelection = { planIndex: 0, flowIndex: 0 };\n\n @Output()\n public selectedFlowChanged = new EventEmitter<FlowSelection>();\n\n /**\n * Return what is needed to save.\n **/\n @Output()\n public save = new EventEmitter<SaveOutput>();\n\n public connectorsTooltip = '';\n\n public selectedFlow?: FlowVM = undefined;\n\n public flowsGroups: FlowGroupVM[] = [];\n\n public disableSaveButton = true;\n\n public saving = false;\n\n public apiTypeDisplayable = computed(() => {\n const apiTypeMap: Record<ApiType, string> = {\n A2A_PROXY: 'A2A Proxy',\n LLM_PROXY: 'LLM Proxy',\n PROXY: 'HTTP Proxy',\n MESSAGE: 'HTTP Message',\n NATIVE: 'Native',\n MCP_PROXY: 'MCP Proxy',\n };\n\n return apiTypeMap[this.apiType];\n });\n\n // Used to keep track of initial flows groups to know if there are deleted flows\n private initialFlowsGroups: FlowGroupVM[] = [];\n\n private hasFlowExecutionChanged = false;\n\n private unSavingButtonSubscription?: Subscription;\n public enableSavingTimer = true;\n\n protected genericPolicies: GenericPolicy[] = [];\n\n constructor(private readonly policyStudioService: GioPolicyStudioService) {}\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (changes.entrypointsInfo || changes.endpointsInfo) {\n this.connectorsTooltip = `Entrypoints: ${(this.entrypointsInfo ?? []).map(e => e.name).join(', ')}\\nEndpoints: ${(\n this.endpointsInfo ?? []\n )\n .map(e => e.name)\n .join(', ')}`;\n }\n\n if (changes.commonFlows || changes.plans || changes.selectedFlowIndexes) {\n this.disableSaveButton = true;\n this.flowsGroups = getFlowsGroups(this.apiType, this.commonFlows, this.plans);\n this.initialFlowsGroups = cloneDeep(this.flowsGroups);\n this.selectedFlow = this.flowsGroups[this.selectedFlowIndexes?.planIndex ?? 0]?.flows[this.selectedFlowIndexes?.flowIndex ?? 0];\n\n // Reset saving state when flowsGroups are updated\n this.saving = false;\n this.unSavingButtonSubscription?.unsubscribe();\n }\n\n if (changes.policySchemaFetcher) {\n this.policyStudioService.setPolicySchemaFetcher(this.policySchemaFetcher);\n }\n\n if (changes.policyDocumentationFetcher) {\n this.policyStudioService.setPolicyDocumentationFetcher(this.policyDocumentationFetcher);\n }\n\n if (changes.policies || changes.sharedPolicyGroupPolicies) {\n this.initGenericPolicies();\n }\n if (changes.loading && this.loading && !this.saving) {\n this.saving = true;\n }\n }\n\n public ngOnDestroy() {\n this.unSavingButtonSubscription?.unsubscribe();\n }\n\n public onFlowExecutionChange(flowExecution: FlowExecution): void {\n this.hasFlowExecutionChanged = !isEqual(this.flowExecution, flowExecution);\n if (this.hasFlowExecutionChanged) {\n this.disableSaveButton = false;\n this.flowExecution = flowExecution;\n }\n }\n\n public onFlowsGroupsChange(flowsGroups: FlowGroupVM[]): void {\n this.flowsGroups = cloneDeep(flowsGroups);\n this.disableSaveButton = false;\n if (this.selectedFlow) {\n this.onSelectFlow(this.selectedFlow._id);\n }\n }\n\n public onSelectedFlowChange(flow: FlowVM): void {\n this.flowsGroups = this.flowsGroups.map(flowGroup => ({\n ...flowGroup,\n flows: flowGroup.flows.map(f => (f._id === flow._id ? flow : f)),\n }));\n this.selectedFlow = flow;\n this.disableSaveButton = false;\n }\n\n public onSelectFlow(flowId: string): void {\n let newPlanIndex = 0;\n let newFlowIndex = 0;\n for (let currentPlanIndex = 0; currentPlanIndex < this.flowsGroups.length; currentPlanIndex++) {\n const indexWithinPlan = this.flowsGroups[currentPlanIndex].flows.findIndex(flow => flow._id === flowId);\n if (indexWithinPlan !== -1) {\n newPlanIndex = currentPlanIndex;\n newFlowIndex = indexWithinPlan;\n break;\n }\n }\n\n this.selectedFlowIndexes = { planIndex: newPlanIndex, flowIndex: newFlowIndex };\n\n this.selectedFlow = this.flowsGroups[newPlanIndex].flows[newFlowIndex];\n\n this.selectedFlowChanged.emit(this.selectedFlowIndexes);\n }\n\n public onDeleteSelectedFlow(flow: FlowVM): void {\n // Define next selected flow and remove flow from flowsGroups\n const allFlowsId = flatten(this.flowsGroups.map(flowGroup => flowGroup.flows)).map(f => f._id);\n const flowToDeleteIndex = allFlowsId.indexOf(flow._id);\n const nextSelectedFlowId = allFlowsId[flowToDeleteIndex + 1] ?? allFlowsId[flowToDeleteIndex - 1];\n this.flowsGroups = this.flowsGroups.map(flowGroup => ({\n ...flowGroup,\n flows: flowGroup.flows.filter(f => f._id !== flow._id),\n }));\n\n this.onSelectFlow(nextSelectedFlowId);\n\n this.disableSaveButton = false;\n }\n\n public onSave(): void {\n // Emit common flows only if they have been updated\n const commonFlows = getCommonFlowsOutput(this.flowsGroups, this.initialFlowsGroups);\n\n // Emit plans only if they have been updated\n const plansToUpdate = getPlansChangeOutput(this.flowsGroups, this.initialFlowsGroups);\n this.save.emit({\n ...(commonFlows ? { commonFlows } : {}),\n ...(plansToUpdate ? { plansToUpdate } : {}),\n ...(this.hasFlowExecutionChanged ? { flowExecution: this.flowExecution } : {}),\n });\n this.saving = true;\n this.disableSaveButton = true;\n\n this.unSavingButtonSubscription?.unsubscribe();\n if (this.enableSavingTimer) {\n this.unSavingButtonSubscription = timer(5000).subscribe(() => {\n this.saving = false;\n });\n }\n }\n\n private initGenericPolicies(): void {\n this.genericPolicies = toGenericPolicies(this.policies ?? [], this.sharedPolicyGroupPolicies ?? []);\n }\n}\n\nconst getFlowsGroups = (apiType: ApiType, commonFlows: Flow[] = [], plans: Plan[] = []): FlowGroupVM[] => {\n const commFlowsGroup: FlowGroupVM = {\n _id: 'flowsGroup_commonFlow',\n _isPlan: false,\n name: 'All plans',\n flows: commonFlows.map(flow => ({ ...flow, _id: uniqueId('flow_'), _hasChanged: false, _parentFlowGroupName: 'Common' })),\n };\n\n return [\n ...plans.map(plan => ({\n _id: uniqueId('flowsGroup_'),\n _planId: plan.id,\n _isPlan: true,\n name: plan.name,\n flows: plan.flows.map(flow => ({ ...flow, _id: uniqueId('flow_'), _hasChanged: false, _parentFlowGroupName: plan.name })),\n })),\n commFlowsGroup,\n ];\n};\n\nconst getCommonFlowsOutput = (flowsGroups: FlowGroupVM[], initialFlowsGroups: FlowGroupVM[]): Flow[] | null => {\n const commonFlowsGroup = flowsGroups.find(flowGroup => flowGroup._id === 'flowsGroup_commonFlow');\n const initialCommonFlowsGroup = initialFlowsGroups.find(flowGroup => flowGroup._id === 'flowsGroup_commonFlow');\n // Check if common flows have been updated\n const hasChanged = commonFlowsGroup?.flows.some(flow => flow._hasChanged);\n\n // Check if common flows have been deleted\n const hasDeletedFlow = differenceBy(initialCommonFlowsGroup?.flows ?? [], commonFlowsGroup?.flows ?? [], '_id').length > 0;\n\n return hasChanged || hasDeletedFlow\n ? (commonFlowsGroup?.flows ?? []).map(flow => omit(flow, '_id', '_hasChanged', '_parentFlowGroupName'))\n : null;\n};\n\nconst getPlansChangeOutput = (flowsGroups: FlowGroupVM[], initialFlowsGroups: FlowGroupVM[]): Plan[] | null => {\n const plansGroups = flowsGroups.filter(flowGroup => flowGroup._id !== 'flowsGroup_commonFlow');\n const initialPlansGroups = initialFlowsGroups.filter(flowGroup => flowGroup._id !== 'flowsGroup_commonFlow');\n\n // Get plans with changed flows\n const plansGroupsWithChangedFlows = plansGroups.filter(plan => plan.flows.some(flow => flow._hasChanged));\n\n // Get plans with deleted flows\n const plansGroupsWithDeletedFlows: FlowGroupVM[] = [];\n\n // Check if there are deleted flows in initial initialPlansGroups\n initialPlansGroups.forEach(plan => {\n const planGroupToCompare = plansGroups.find(p => p._planId === plan._planId);\n if (planGroupToCompare && differenceBy(plan.flows, planGroupToCompare?.flows ?? [], '_id').length > 0) {\n // If there are deleted flows, we need to return the complete plan with the new flows\n plansGroupsWithDeletedFlows.push(planGroupToCompare);\n }\n });\n\n // Merge plans with changed flows and plans with deleted flows\n const plansWithChangedFlowsOutput = unionBy([...plansGroupsWithChangedFlows, ...plansGroupsWithDeletedFlows], '_planId').map(plan => ({\n ...omit(plan, '_id', '_isPlan', '_planId'),\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion -- planId is always defined\n id: plan._planId!,\n flows: plan.flows.map(flow => omit(flow, '_id', '_hasChanged', '_parentFlowGroupName')),\n }));\n\n return plansWithChangedFlowsOutput.length > 0 ? plansWithChangedFlowsOutput : null;\n};\n","<!--\n\n Copyright (C) 2025 The Gravitee team (http://gravitee.io)\n \n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n \n http://www.apache.org/licenses/LICENSE-2.0\n \n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n\n-->\n\n<div class=\"header\">\n @if (!loading) {\n <div class=\"header__apiInfo\">\n <span class=\"gio-badge-primary\">\n {{ apiTypeDisplayable() }}\n </span>\n <span\n class=\"gio-badge-neutral\"\n [matTooltip]=\"connectorsTooltip\"\n matTooltipPosition=\"right\"\n matTooltipClass=\"gio-policy-studio__tooltip-line-break\"\n >\n @for (entrypoint of entrypointsInfo; track entrypoint) {\n <mat-icon class=\"gio-left\" [svgIcon]=\"entrypoint.icon\"></mat-icon>\n }\n @for (endpoint of endpointsInfo; track endpoint) {\n <mat-icon class=\"gio-left\" [svgIcon]=\"endpoint.icon\"></mat-icon>\n }\n </span>\n </div>\n } @else {\n <div class=\"header__apiInfo\">\n <span class=\"gio-badge-primary\">&nbsp;</span>\n <span class=\"gio-badge-neutral\">&nbsp;</span>\n </div>\n }\n\n <div class=\"header__btn\">\n @if (!saving) {\n <button mat-flat-button color=\"primary\" [disabled]=\"loading || disableSaveButton\" (click)=\"onSave()\">Save</button>\n }\n @if (saving) {\n <button mat-flat-button color=\"primary\" disabled>Saving...</button>\n }\n </div>\n</div>\n\n<div class=\"wrapper\">\n <div class=\"wrapper__flowsMenu\">\n <gio-ps-flows-menu\n [readOnly]=\"readOnly\"\n [loading]=\"loading\"\n [apiType]=\"apiType\"\n [flowExecution]=\"flowExecution\"\n [flowsGroups]=\"flowsGroups\"\n [entrypoints]=\"entrypointsInfo\"\n [entrypointsInfo]=\"entrypointsInfo\"\n (flowsGroupsChange)=\"onFlowsGroupsChange($event)\"\n (flowExecutionChange)=\"onFlowExecutionChange($event)\"\n [selectedFlowId]=\"selectedFlow?._id\"\n (selectedFlowIdChange)=\"onSelectFlow($event)\"\n (deleteFlow)=\"onDeleteSelectedFlow($event)\"\n ></gio-ps-flows-menu>\n </div>\n\n <div class=\"wrapper__flowDetails\">\n <gio-ps-flow-details\n [readOnly]=\"readOnly\"\n [loading]=\"loading\"\n [apiType]=\"apiType\"\n [flow]=\"selectedFlow\"\n [entrypointsInfo]=\"entrypointsInfo\"\n [endpointsInfo]=\"endpointsInfo\"\n [policies]=\"policies\"\n [genericPolicies]=\"genericPolicies\"\n [trialUrl]=\"trialUrl\"\n (flowChange)=\"onSelectedFlowChange($event)\"\n (deleteFlow)=\"onDeleteSelectedFlow($event)\"\n ></gio-ps-flow-details>\n </div>\n</div>\n","/*\n * Copyright (C) 2024 The Gravitee team (http://gravitee.io)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { ChangeDetectionStrategy, Component, EventEmitter, Input, OnChanges, Output, SimpleChanges } from '@angular/core';\nimport { EMPTY } from 'rxjs';\nimport { GioFormJsonSchemaModule, GioLoaderModule } from '@gravitee/ui-particles-angular';\n\nimport { GioPolicyStudioDetailsPhaseComponent } from '../components/flow-details-phase/gio-ps-flow-details-phase.component';\nimport {\n ApiType,\n ConnectorInfo,\n ExecutionPhase,\n FlowPhase,\n fromExecutionPhase,\n fromPolicyInput,\n GenericPolicy,\n Policy,\n PolicyDocumentationFetcher,\n PolicyInput,\n PolicySchemaFetcher,\n Step,\n toGenericPolicies,\n} from '../models';\nimport { GioPolicyStudioService } from '../policy-studio/gio-policy-studio.service';\n\nexport type PolicyGroupOutput = Step[];\nexport type PolicyGroupInput = Step[];\n\ntype PolicyGroupVM = {\n name: string;\n description: string;\n startConnectorName: string;\n endConnectorName: string;\n};\n\nconst PROXY_REQUEST_PHASE: PolicyGroupVM = {\n name: 'Request phase',\n description: 'Policies will be applied during the connection establishment',\n startConnectorName: 'Incoming request',\n endConnectorName: 'Outgoing request',\n};\n\nconst PROXY_RESPONSE_PHASE: PolicyGroupVM = {\n name: 'Response phase',\n description: 'Policies will be applied to the response from the initial connection.',\n startConnectorName: 'Incoming response',\n endConnectorName: 'Outgoing response',\n};\n\n@Component({\n selector: 'gio-policy-group-studio',\n imports: [GioPolicyStudioDetailsPhaseComponent, GioFormJsonSchemaModule, GioLoaderModule],\n templateUrl: './gio-policy-group-studio.component.html',\n styleUrl: './gio-policy-group-studio.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class GioPolicyGroupStudioComponent implements OnChanges {\n /**\n * List of policies usable in the studio\n */\n @Input({\n transform: (policies: unknown) => policies ?? [],\n })\n public set policies(value: (PolicyInput | Policy)[]) {\n this._policies = value.map(fromPolicyInput);\n }\n public get policies(): Policy[] {\n return this._policies;\n }\n private _policies: Policy[] = [];\n\n /**\n * Whether the Policy Group Studio is in read-only mode\n */\n @Input()\n public readOnly = false;\n\n /**\n * Type of the API targeted by the Policy Group Studio\n */\n @Input({ required: true })\n public apiType!: ApiType;\n\n /**\n * Execution phase targeted by the Policy Group Studio\n * @deprecated Use `flowPhase` instead. To keep as long as we support APIM < 4.6\n */\n @Input()\n public set executionPhase(value: ExecutionPhase) {\n this.flowPhase = fromExecutionPhase(value);\n }\n\n /**\n * Execution phase targeted by the Policy Group Studio\n */\n @Input()\n public flowPhase!: FlowPhase;\n\n /**\n * Called when Policy Group Studio needs to fetch the policy schema\n * @returns Observable of the policy schema\n */\n @Input({ required: true })\n public policySchemaFetcher: PolicySchemaFetcher = () => EMPTY;\n\n /**\n * Called when Policy Group Studio needs to fetch the policy documentation\n * @returns Observable of the policy documentation\n */\n @Input({ required: true })\n public policyDocumentationFetcher: PolicyDocumentationFetcher = () => EMPTY;\n\n @Input()\n public policyGroup: PolicyGroupInput = [];\n\n /**\n * Output event when the Policy Group Studio changes\n */\n @Output()\n public policyGroupChange: EventEmitter<PolicyGroupOutput> = new EventEmitter<PolicyGroupOutput>();\n\n protected isLoading = true;\n protected createStartConnector: (name: string) => ConnectorInfo[] = name => [\n {\n name,\n icon: 'gio:arrow-right',\n type: 'start',\n supportedModes: [],\n },\n ];\n protected createEndConnector: (name: string) => ConnectorInfo[] = name => [\n {\n name,\n icon: 'gio:arrow-right',\n type: 'end',\n supportedModes: [],\n },\n ];\n protected policyGroupVM?: PolicyGroupVM;\n protected steps: Step[] = [];\n protected trialUrl: string | undefined;\n protected genericPolicies: GenericPolicy[] = [];\n protected startConnector: ConnectorInfo[] = [];\n protected endConnector: ConnectorInfo[] = [];\n\n private phases: Record<`${ApiType}__${FlowPhase}`, PolicyGroupVM | null> = {\n // HTTP Proxy\n PROXY__REQUEST: PROXY_REQUEST_PHASE,\n PROXY__RESPONSE: PROXY_RESPONSE_PHASE,\n PROXY__PUBLISH: null, // n/a\n PROXY__SUBSCRIBE: null, // n/a\n PROXY__CONNECT: null, // n/a\n PROXY__INTERACT: null, // n/a\n // A2A Proxy\n A2A_PROXY__REQUEST: PROXY_REQUEST_PHASE,\n A2A_PROXY__RESPONSE: PROXY_RESPONSE_PHASE,\n A2A_PROXY__PUBLISH: null, // n/a\n A2A_PROXY__SUBSCRIBE: null, // n/a\n A2A_PROXY__CONNECT: null, // n/a\n A2A_PROXY__INTERACT: null, // n/a\n // LLM Proxy\n LLM_PROXY__REQUEST: PROXY_REQUEST_PHASE,\n LLM_PROXY__RESPONSE: PROXY_RESPONSE_PHASE,\n LLM_PROXY__PUBLISH: null, // n/a\n LLM_PROXY__SUBSCRIBE: null, // n/a\n LLM_PROXY__CONNECT: null, // n/a\n LLM_PROXY__INTERACT: null, // n/a\n // MCP Proxy\n MCP_PROXY__REQUEST: PROXY_REQUEST_PHASE,\n MCP_PROXY__RESPONSE: PROXY_RESPONSE_PHASE,\n MCP_PROXY__PUBLISH: null, // n/a\n MCP_PROXY__SUBSCRIBE: null, // n/a\n MCP_PROXY__CONNECT: null, // n/a\n MCP_PROXY__INTERACT: null, // n/a\n // HTTP Message\n MESSAGE__REQUEST: {\n name: 'Request phase',\n description: 'Policies will be applied during the connection establishment',\n startConnectorName: 'Incoming request',\n endConnectorName: 'Outgoing request',\n },\n MESSAGE__RESPONSE: {\n name: 'Response phase',\n description: 'Policies will be applied during the connection termination',\n startConnectorName: 'Incoming response',\n endConnectorName: 'Outgoing response',\n },\n MESSAGE__PUBLISH: {\n name: 'Publish phase',\n description: 'Policies will be applied on messages sent to the endpoint',\n startConnectorName: 'Incoming message request',\n endConnectorName: 'Outgoing message request',\n },\n MESSAGE__SUBSCRIBE: {\n name: 'Subscribe phase',\n description: 'Policies will be applied on messages received by the entrypoint',\n startConnectorName: 'Incoming message response',\n endConnectorName: 'Outgoing message response',\n },\n MESSAGE__CONNECT: null, // n/a\n MESSAGE__INTERACT: null, // n/a\n // NATIVE\n // TODO: To implement we want to make PS compatible with the native API\n NATIVE__CONNECT: null, // n/a\n NATIVE__INTERACT: null, // n/a\n NATIVE__PUBLISH: null, // n/a\n NATIVE__SUBSCRIBE: null, // n/a\n NATIVE__REQUEST: null, // n/a\n NATIVE__RESPONSE: null, // n/a\n };\n\n constructor(private readonly policyStudioService: GioPolicyStudioService) {}\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (changes.policySchemaFetcher) {\n this.policyStudioService.setPolicySchemaFetcher(this.policySchemaFetcher);\n }\n\n if (changes.policyDocumentationFetcher) {\n this.policyStudioService.setPolicyDocumentationFetcher(this.policyDocumentationFetcher);\n }\n if (changes.policies) {\n this.isLoading = false;\n this.genericPolicies = toGenericPolicies(this._policies);\n }\n if (changes.executionPhase || changes.flowPhase) {\n this.policyGroupVM = this.phases[`${this.apiType}__${this.flowPhase}`] ?? undefined;\n this.startConnector = this.createStartConnector(this.policyGroupVM?.startConnectorName ?? '');\n this.endConnector = this.createEndConnector(this.policyGroupVM?.endConnectorName ?? '');\n }\n if (changes.policyGroup) {\n this.steps = this.policyGroup;\n }\n }\n\n protected onStepsChange(steps: Step[]): void {\n this.steps = steps;\n this.policyGroupChange.emit(steps);\n }\n}\n","<!--\n\n Copyright (C) 2024 The Gravitee team (http://gravitee.io)\n \n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n \n http://www.apache.org/licenses/LICENSE-2.0\n \n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n\n-->\n@if (!isLoading && policyGroupVM) {\n <gio-ps-flow-details-phase\n class=\"content__phase\"\n [name]=\"policyGroupVM.name\"\n [description]=\"policyGroupVM.description\"\n [readOnly]=\"readOnly\"\n [startConnector]=\"startConnector\"\n [endConnector]=\"endConnector\"\n [steps]=\"steps\"\n [apiType]=\"apiType\"\n [genericPolicies]=\"genericPolicies\"\n [trialUrl]=\"trialUrl\"\n [policyFlowPhase]=\"flowPhase\"\n (stepsChange)=\"onStepsChange($event)\"\n ></gio-ps-flow-details-phase>\n} @else {\n <gio-loader></gio-loader>\n}\n","/*\n * Copyright (C) 2022 The Gravitee team (http://gravitee.io)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/*\n * Public API Surface of ui-policy-studio-angular\n */\nexport * from './lib/models';\nexport { GioPolicyStudioComponent } from './lib/policy-studio/gio-policy-studio.component';\nexport * from './lib/policy-group-studio/gio-policy-group-studio.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i8","i6","i7","i5","METHODS_AUTOCOMPLETE","sanitizePathFormValue","sanitizeMethodFormValue","sanitizePath","sanitizeMethods","i3","i4","i9","i10","i11","i1.GioPolicyStudioService","i2","i1"],"mappings":"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"}