@gravitee/ui-policy-studio-angular 13.1.3 → 13.1.4-fix-dev-angular-error-ddb956a
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/components/flow-details-phase-step/gio-ps-flow-details-phase-step.component.mjs +2 -2
- package/esm2022/lib/components/policies-catalog-dialog/gio-ps-policies-catalog-dialog.component.mjs +3 -3
- package/fesm2022/gravitee-ui-policy-studio-angular.mjs +3 -3
- package/fesm2022/gravitee-ui-policy-studio-angular.mjs.map +1 -1
- package/package.json +1 -1
|
@@ -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/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/index.ts","../../../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-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-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/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 './ApiType';\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 { ApiType } from '../flow';\n\nimport { ExecutionPhase } 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: ExecutionPhase;\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) 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';\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 { CommonModule } from '@angular/common';\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, 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 standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n MatButtonModule,\n MatDialogModule,\n MatFormFieldModule,\n MatSelectModule,\n MatInputModule,\n MatSlideToggleModule,\n GioFormSlideToggleModule,\n GioBannerModule,\n GioIconsModule,\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: true,\n };\n\n this.dialogRef.close({\n ...flowToSave,\n });\n }\n}\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-->\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<mat-dialog-content *ngIf=\"flowFormGroup\" 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\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\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\n <div class=\"content__row\">\n <mat-form-field>\n <mat-label>Entrypoints</mat-label>\n <mat-select multiple formControlName=\"entrypoints\">\n <mat-option *ngFor=\"let entrypoint of entrypoints\" [value]=\"entrypoint.type\">{{ entrypoint.name }}</mat-option>\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\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\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 </mat-form-field>\n </div>\n</mat-dialog-content>\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 { CommonModule } from '@angular/common';\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 { 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 standalone: true,\n imports: [\n CommonModule,\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-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: 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) 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-->\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<mat-dialog-content *ngIf=\"flowFormGroup\" 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\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\n <mat-form-field>\n <mat-label>Path</mat-label>\n <span matTextPrefix>/ </span>\n <input matInput formControlName=\"path\" />\n <mat-hint>Path</mat-hint>\n </mat-form-field>\n </div>\n\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\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 </mat-form-field>\n </div>\n</mat-dialog-content>\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 } from 'lodash';\nimport { CommonModule } from '@angular/common';\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 standalone: true,\n imports: [\n CommonModule,\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) 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-->\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<mat-dialog-content *ngIf=\"flowExecutionFormGroup\" 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. You\n 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\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<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) 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 { cloneDeep, isEmpty } from 'lodash';\nimport { GIO_DIALOG_WIDTH, GioIconsModule, GioLoaderModule } from '@gravitee/ui-particles-angular';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { MatButtonModule } from '@angular/material/button';\nimport { CommonModule } from '@angular/common';\n\nimport {\n GioPolicyStudioFlowMessageFormDialogComponent,\n GioPolicyStudioFlowMessageFormDialogData,\n} from '../flow-form-dialog/flow-message-form-dialog/gio-ps-flow-message-form-dialog.component';\nimport { FlowGroupVM, FlowVM } from '../../policy-studio/gio-policy-studio.model';\nimport { ApiType, ChannelSelector, ConditionSelector, ConnectorInfo, FlowExecution, HttpSelector, Operation } 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 {\n GioPolicyStudioFlowExecutionFormDialogComponent,\n GioPolicyStudioFlowExecutionFormDialogData,\n} from '../flow-execution-form-dialog/gio-ps-flow-execution-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 standalone: true,\n imports: [GioIconsModule, MatTooltipModule, MatButtonModule, CommonModule, GioLoaderModule],\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 {\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 selectedFlow?: FlowVM = undefined;\n\n @Input()\n public entrypoints: ConnectorInfo[] = [];\n\n @Output()\n public selectedFlowChange = new EventEmitter<FlowVM>();\n\n @Output()\n public flowsGroupsChange = new EventEmitter<FlowGroupVM[]>();\n\n @Output()\n public flowExecutionChange = new EventEmitter<FlowExecution>();\n\n public flowGroupMenuItems: FlowGroupMenuVM[] = [];\n\n constructor(private readonly matDialog: MatDialog) {}\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (changes.flowsGroups || changes.selectedFlow) {\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 = '';\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 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.selectedFlow?._id === flow._id,\n mouseOver: false,\n badges,\n pathOrChannelLabel,\n hasCondition,\n };\n }),\n };\n });\n }\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.selectedFlowChange.emit(flow);\n }\n }\n\n public onAddFlow(flowGroup: FlowGroupVM): void {\n const dialogResult =\n this.apiType === 'MESSAGE'\n ? 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 : 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\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.selectedFlowChange.emit(createdOrEdited);\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","<!--\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-->\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 <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</div>\n\n<div class=\"list\" *ngIf=\"!loading; else loadingList\">\n <div *ngFor=\"let flowsGroup of flowGroupMenuItems\" class=\"list__flowsGroup\">\n <div class=\"list__flowsGroup__header\">\n <div class=\"list__flowsGroup__header__label\">\n <mat-icon *ngIf=\"flowsGroup._icon\" [svgIcon]=\"flowsGroup._icon\"></mat-icon>\n <span>{{ flowsGroup.name }}</span>\n </div>\n <div class=\"list__flowsGroup__header__addBtn\">\n <button mat-button [disabled]=\"readOnly\" (click)=\"onAddFlow(flowsGroup)\">\n <mat-icon svgIcon=\"gio:plus\" matTooltip=\"New flow\"></mat-icon>\n </button>\n </div>\n </div>\n\n <div\n *ngFor=\"let flow of flowsGroup.flows\"\n class=\"list__flowsGroup__flow\"\n [class.selected]=\"flow.selected\"\n (click)=\"selectFlow(flowsGroup._id, flow._id)\"\n (mouseout)=\"flow.mouseOver = false\"\n (mouseover)=\"flow.mouseOver = true\"\n >\n <div *ngIf=\"flow.name\" class=\"list__flowsGroup__flow__name\" [attr.title]=\"flow.name\">\n {{ flow.name }}\n </div>\n <div class=\"list__flowsGroup__flow__infos\">\n <div class=\"list__flowsGroup__flow__infos__badges\">\n <span *ngFor=\"let badge of flow.badges\" class=\"list__flowsGroup__flow__infos__badges__badge\" [ngClass]=\"badge.class\">{{\n badge.label\n }}</span>\n </div>\n <div class=\"list__flowsGroup__flow__infos__pathOrChannelLabel\">\n <span *ngIf=\"flow.pathOrChannelLabel; else emptyPathOrChannelLabel\" [attr.title]=\"flow.pathOrChannelLabel\">{{\n flow.pathOrChannelLabel\n }}</span>\n <ng-template #emptyPathOrChannelLabel>\n <em>Empty</em>\n </ng-template>\n </div>\n\n <span *ngIf=\"flow.hasCondition\" class=\"list__flowsGroup__flow__infos__conditionBadge gio-badge-neutral\" matTooltip=\"Conditioned\"\n ><mat-icon svgIcon=\"gio:if\"></mat-icon\n ></span>\n </div>\n </div>\n </div>\n</div>\n\n<ng-template #loadingList>\n <div class=\"loadingList\">\n <gio-loader></gio-loader>\n </div>\n</ng-template>\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\n@Injectable({\n providedIn: 'root',\n})\nexport class GioPolicyStudioService {\n private schemasCache: Record<string, BehaviorSubject<unknown>> = {};\n private documentationsCache: Record<string, BehaviorSubject<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<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 GioFormJsonSchemaComponent,\n GioFormJsonSchemaModule,\n GioJsonSchema,\n GioJsonSchemaContext,\n GioLoaderModule,\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';\n\nimport { ExecutionPhase, isPolicy, isSharedPolicyGroupPolicy, Step, toPolicy, GenericPolicy } from '../../models';\nimport { GioPolicyStudioService } from '../../policy-studio/gio-policy-studio.service';\n\n@Component({\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n MatInputModule,\n MatFormFieldModule,\n GioFormJsonSchemaModule,\n GioAsciidoctorModule,\n GioLoaderModule,\n GioBannerModule,\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 @Input()\n public readOnly = false;\n\n @Input()\n public step?: Step;\n\n @Input({ required: true })\n public executionPhase!: ExecutionPhase;\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<string>;\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 => (isEmpty(doc) ? 'No documentation available.' : doc)),\n catchError(() => of('No documentation available.')),\n );\n }\n if (isSharedPolicyGroupPolicy(this.genericPolicy)) {\n this.policySchema$ = of({});\n\n this.policyDocumentation$ = of(' ');\n\n this.infoBanner = this.genericPolicy.prerequisiteMessage;\n }\n }\n if (changes.executionPhase) {\n this.context = {\n executionPhase: this.executionPhase,\n };\n this.isMessage = this.executionPhase === 'MESSAGE_REQUEST' || this.executionPhase === 'MESSAGE_RESPONSE';\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) 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<div class=\"settings\">\n <div class=\"settings__header\">Settings</div>\n\n <div class=\"settings__content\">\n <ng-container *ngIf=\"stepForm && (policySchema$ | async) as policySchema; else loadingTmpl\" [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\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 </mat-form-field>\n\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 </mat-form-field>\n }\n\n <gio-form-json-schema\n *ngIf=\"policySchema\"\n [jsonSchema]=\"$any(policySchema)\"\n [context]=\"context\"\n (ready)=\"onJsonSchemaReady($event)\"\n formControlName=\"configuration\"\n ></gio-form-json-schema>\n </ng-container>\n </div>\n</div>\n\n<div class=\"documentation\">\n <div class=\"documentation__header\">Documentation</div>\n\n <div class=\"documentation__content\">\n <gio-banner-warning *ngIf=\"infoBanner\">\n Prerequisite message\n <span gioBannerBody>{{ infoBanner }}</span>\n </gio-banner-warning>\n <ng-container *ngIf=\"policyDocumentation$ | async as policyDocumentation; else loadingTmpl\">\n <gio-asciidoctor [content]=\"policyDocumentation\"></gio-asciidoctor>\n </ng-container>\n </div>\n</div>\n\n<ng-template #loadingTmpl>\n <gio-loader></gio-loader>\n</ng-template>\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, ExecutionPhase, GenericPolicy, isPolicy, isSharedPolicyGroupPolicy, Step } from '../../models';\nimport { GioPolicyStudioStepFormComponent } from '../step-form/gio-ps-step-form.component';\n\nexport type GioPolicyStudioPoliciesCatalogDialogData = {\n genericPolicies: GenericPolicy[];\n executionPhase: ExecutionPhase;\n apiType: ApiType;\n trialUrl?: string;\n};\n\nexport type GioPolicyStudioPoliciesCatalogDialogResult = undefined | Step;\n\nconst executionPhaseLabels: Record<ExecutionPhase, string> = {\n REQUEST: 'Request',\n RESPONSE: 'Response',\n MESSAGE_REQUEST: 'Publish',\n MESSAGE_RESPONSE: 'Subscribe',\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 standalone: true,\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 executionPhase!: ExecutionPhase;\n public executionPhaseLabel!: 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 constructor(\n public dialogRef: MatDialogRef<GioPolicyStudioPoliciesCatalogDialogComponent, GioPolicyStudioPoliciesCatalogDialogResult>,\n @Inject(MAT_DIALOG_DATA) flowDialogData: GioPolicyStudioPoliciesCatalogDialogData,\n ) {\n this.executionPhase = flowDialogData.executionPhase;\n this.executionPhaseLabel = executionPhaseLabels[flowDialogData.executionPhase];\n\n this.allPolicies = flowDialogData.genericPolicies\n .filter(genericPolicy => {\n if (isPolicy(genericPolicy)) {\n if (flowDialogData.apiType === 'PROXY') {\n return genericPolicy.proxy?.includes(flowDialogData.executionPhase);\n }\n return genericPolicy.message?.includes(flowDialogData.executionPhase);\n }\n if (isSharedPolicyGroupPolicy(genericPolicy)) {\n return genericPolicy.apiType === flowDialogData.apiType && genericPolicy.phase === flowDialogData.executionPhase;\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).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) 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-->\n<h2 mat-dialog-title class=\"title\">\n Policies for <span class=\"title__phase\">{{ executionPhaseLabel }}</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 <mat-dialog-content *ngIf=\"!selectedPolicy\" 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\" />\n <button\n matIconSuffix\n mat-icon-button\n aria-label=\"Clear\"\n *ngIf=\"filtersForm.get('search')?.value\"\n (click)=\"filtersForm.get('search')?.setValue('')\"\n >\n <mat-icon svgIcon=\"gio:cancel\"></mat-icon>\n </button>\n </mat-form-field>\n <mat-chip-listbox\n *ngIf=\"categories.length > 1\"\n class=\"policiesCatalog__filters__categories\"\n aria-label=\"Categories selection\"\n multiple\n formControlName=\"categories\"\n >\n <mat-chip-option *ngFor=\"let category of categories\" [selected]=\"category\" [value]=\"category\"\n >{{ category | titlecase }}\n </mat-chip-option>\n </mat-chip-listbox>\n </div>\n\n <div *ngIf=\"policies.length; else emptyPoliciesTpl\" class=\"policiesCatalog__list\">\n <div *ngFor=\"let policy of policies\" 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\n <span *ngIf=\"policy.name\" class=\"policiesCatalog__list__policy__head__name\">{{ policy.name }}</span>\n\n <span\n *ngIf=\"policy.genericPolicy.type === 'SHARED_POLICY_GROUP'\"\n class=\"gio-badge-neutral policiesCatalog__list__policy__head__badge\"\n >\n <mat-icon svgIcon=\"gio:users\"></mat-icon> Shared Policy Group\n </span>\n </div>\n\n <div class=\"policiesCatalog__list__policy__enterprise\" *ngIf=\"policy.deployed === false\">\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 <div *ngIf=\"policy.description\" 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 </div>\n </mat-dialog-content>\n</ng-container>\n\n<ng-template #emptyPoliciesTpl>\n <div class=\"emptyPoliciesCatalog\">No policies available.</div>\n</ng-template>\n\n<mat-dialog-content *ngIf=\"selectedPolicy\" class=\"policyForm\">\n <button class=\"policyForm__goBackBtn\" mat-stroked-button (click)=\"onGoBack()\">\n <mat-icon svgIcon=\"gio:arrow-left\"></mat-icon>\n Go back\n </button>\n\n <gio-banner *ngIf=\"isUnlicensed\" 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 <a *ngIf=\"trialUrl\" mat-stroked-button [href]=\"trialUrl\" target=\"_blank\">Request upgrade</a>\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\n <span *ngIf=\"selectedPolicy.name\" class=\"policyForm__info__head__name\">{{ selectedPolicy.name }}</span>\n\n <span *ngIf=\"selectedPolicy.type === 'SHARED_POLICY_GROUP'\" class=\"gio-badge-neutral policiesCatalog__list__policy__head__badge\">\n <mat-icon svgIcon=\"gio:users\"></mat-icon> Shared Policy Group\n </span>\n </div>\n\n <div *ngIf=\"selectedPolicy.description\" class=\"policyForm__info__description\">{{ selectedPolicy.description }}</div>\n </div>\n\n <gio-ps-step-form\n [genericPolicy]=\"selectedPolicy\"\n [executionPhase]=\"executionPhase\"\n (stepChange)=\"onStepChange($event)\"\n (isValid)=\"onIsValid($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\n *ngIf=\"selectedPolicy\"\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</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 { CommonModule } from '@angular/common';\nimport { MatButtonModule } from '@angular/material/button';\n\nimport { ExecutionPhase, Step, GenericPolicy } from '../../models';\nimport { GioPolicyStudioStepFormComponent } from '../step-form/gio-ps-step-form.component';\n\nexport type GioPolicyStudioStepEditDialogData = {\n genericPolicy: GenericPolicy;\n step: Step;\n executionPhase: ExecutionPhase;\n readOnly?: boolean;\n};\n\nexport type GioPolicyStudioStepEditDialogResult = undefined | Step;\n\n@Component({\n standalone: true,\n imports: [CommonModule, 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 executionPhase!: ExecutionPhase;\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.executionPhase = flowDialogData.executionPhase;\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) 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-->\n<h2 mat-dialog-title class=\"title\">\n <mat-icon class=\"title__icon\" [svgIcon]=\"genericPolicy.icon ?? 'gio:puzzle'\"></mat-icon>\n\n <span *ngIf=\"step.name\" class=\"title__name\">\n {{ step.name }}\n <span *ngIf=\"genericPolicy.type === 'SHARED_POLICY_GROUP'\" class=\"gio-badge-neutral policiesCatalog__list__policy__head__badge\">\n <mat-icon svgIcon=\"gio:users\"></mat-icon> Shared Policy Group\n </span></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 [executionPhase]=\"executionPhase\"\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 { CommonModule } from '@angular/common';\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 { ExecutionPhase, isPolicy, isSharedPolicyGroupPolicy, Step, GenericPolicy } from '../../models';\n\n@Component({\n standalone: true,\n imports: [CommonModule, 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 executionPhase!: ExecutionPhase;\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 protected genericPolicy?: GenericPolicy;\n protected policyNotFound: false | 'SHARED_POLICY_GROUP' | 'POLICY' = false;\n\n protected get getPrerequisiteMessage(): string | undefined {\n if (!this.genericPolicy || !isSharedPolicyGroupPolicy(this.genericPolicy) || isEmpty(this.genericPolicy.prerequisiteMessage)) {\n return;\n }\n return this.genericPolicy.description;\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 executionPhase: this.executionPhase,\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","<!--\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-->\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 <span *ngIf=\"step.name\" class=\"info__head__name\">{{ step.name }}</span>\n\n <span *ngIf=\"genericPolicy?.type === 'SHARED_POLICY_GROUP'\" class=\"gio-badge-neutral\" matTooltip=\"Shared Policy Group\">\n <mat-icon svgIcon=\"gio:users\"></mat-icon>\n </span>\n @if (getPrerequisiteMessage) {\n <mat-icon class=\"info__head__info\" svgIcon=\"gio:info\" [matTooltip]=\"getPrerequisiteMessage\"></mat-icon>\n }\n <span\n *ngIf=\"policyNotFound !== false\"\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> \n }\n <mat-icon svgIcon=\"gio:alert-circle\"></mat-icon>\n </span>\n </div>\n\n <div *ngIf=\"step.description\" class=\"info__description\">{{ step.description }}</div>\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</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 { CommonModule } from '@angular/common';\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, ExecutionPhase, 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 standalone: true,\n imports: [CommonModule, 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 policyExecutionPhase!: ExecutionPhase;\n\n @Input()\n public trialUrl?: string;\n\n @Output()\n public stepsChange = new EventEmitter<Step[]>();\n\n public stepsVM: StepVM[] = [];\n\n public isDisabled = false;\n\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.isDisabled = 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 executionPhase: this.policyExecutionPhase,\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","<!--\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-->\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 <span *ngIf=\"isDisabled\" class=\"header__infoIcon\" matTooltip=\"Policies might not be evaluated\" matTooltipPosition=\"before\">\n <mat-icon svgIcon=\"gio:info\"></mat-icon>\n </span>\n</div>\n\n<div *ngIf=\"!isDisabled; else disabledPhaseContent\" 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 <ng-container *ngIf=\"stepVM.type === 'connectors'\">\n <div class=\"content__step__connector\">\n <span *ngFor=\"let connector of stepVM.connectors\" class=\"gio-badge-white content__step__connector__badge\">\n <mat-icon *ngIf=\"connector.icon\" [svgIcon]=\"connector.icon\" class=\"content__step__connector__badge__icon\"></mat-icon>\n {{ connector.name }}\n </span>\n </div>\n\n <!-- Add policy button after first connector -->\n <ng-container *ngIf=\"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 </ng-container>\n </ng-container>\n\n <!-- Policy -->\n @if (stepVM.type === 'step') {\n <div class=\"content__step__policy\">\n <div *ngIf=\"stepVM.step?.condition\" class=\"content__step__policy__condition\">\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 <gio-ps-flow-details-phase-step\n class=\"content__step__step\"\n [readOnly]=\"readOnly\"\n [class.disabled]=\"readOnly || !stepVM.step.enabled\"\n [genericPolicies]=\"genericPolicies\"\n [step]=\"stepVM.step\"\n [executionPhase]=\"policyExecutionPhase\"\n (stepChange)=\"onStepChange(stepVM.index, $event)\"\n (deleted)=\"onStepDeleted(stepVM.index)\"\n (disabled)=\"onStepDisabled(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\n<ng-template #disabledPhaseContent>\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</ng-template>\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 } 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, Operation } from '../../models';\nimport { FlowVM } from '../../policy-studio/gio-policy-studio.model';\n\n@Component({\n standalone: true,\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 {\n @Input()\n public flow?: FlowVM = undefined;\n\n @Input()\n public entrypointsInfo?: ConnectorInfo[];\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(): { name: string; class: 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?.methods?.length\n ? httpSelector?.methods.map(m => ({\n name: m,\n class: `gio-method-badge-${m.toLowerCase()}`,\n }))\n : [\n {\n name: 'ALL',\n class: 'gio-badge-neutral',\n },\n ];\n }\n}\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-->\n<div *ngIf=\"flow?.name\" class=\"info\">\n <span class=\"info__label\">Name</span>\n <span class=\"info__value strong\">{{ flow?.name }}</span>\n</div>\n\n<div *ngIf=\"entrypoints\" class=\"info\">\n <span class=\"info__label\">Entrypoints</span>\n <span *ngFor=\"let entrypoint of entrypoints\" class=\"info__value gio-badge gio-badge-neutral\">\n <mat-icon [svgIcon]=\"entrypoint.icon\"></mat-icon>\n {{ entrypoint.name }}</span\n >\n</div>\n\n<!-- MESSAGE API type -->\n\n<div *ngIf=\"operations\" class=\"info\">\n <span class=\"info__label\">Operations</span>\n <span *ngFor=\"let operation of operations\" class=\"info__value gio-badge-neutral\"> {{ operation }}</span>\n</div>\n\n<div *ngIf=\"channel\" class=\"info\">\n <span class=\"info__label\">Channel</span>\n <span class=\"info__value strong\">{{ channel }}</span>\n</div>\n\n<div *ngIf=\"channelOperator\" class=\"info\">\n <span class=\"info__label\">Channel Operator</span>\n <span class=\"info__value gio-badge-neutral\">{{ channelOperator }}</span>\n</div>\n\n<!-- PROXY API type -->\n\n<div *ngIf=\"path\" class=\"info\">\n <span class=\"info__label\">Path</span>\n <span class=\"info__value strong\">{{ path }}</span>\n</div>\n\n<div *ngIf=\"pathOperator\" class=\"info\">\n <span class=\"info__label\">Path Operator</span>\n <span class=\"info__value gio-badge-neutral\">{{ pathOperator }}</span>\n</div>\n\n<div *ngIf=\"methods\" class=\"info\">\n <span class=\"info__label\">HTTP methods</span>\n <span *ngFor=\"let method of methods\" class=\"info__value method\" [ngClass]=\"method.class\"> {{ method.name }}</span>\n</div>\n\n<!-- Condition -->\n\n<div *ngIf=\"condition\" class=\"info\">\n <span class=\"info__label\">Condition</span>\n <span class=\"info__value gio-badge-neutral condition\">{{ condition }}</span>\n</div>\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, GioIconsModule, GioLoaderModule } from '@gravitee/ui-particles-angular';\nimport { MatTabsModule } from '@angular/material/tabs';\nimport { MatButtonModule } from '@angular/material/button';\nimport { CommonModule } from '@angular/common';\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';\n\n@Component({\n standalone: true,\n imports: [\n CommonModule,\n MatTabsModule,\n MatButtonModule,\n GioIconsModule,\n GioPolicyStudioDetailsPhaseComponent,\n GioFilterConnectorsByModePipe,\n GioLoaderModule,\n GioPolicyStudioDetailsInfoBarComponent,\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 const dialogResult =\n this.apiType === 'MESSAGE'\n ? 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 : 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\n dialogResult\n .pipe(\n tap(createdOrEdited => {\n if (!createdOrEdited) {\n return;\n }\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 onStepsChange(flowPhase: '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) 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<ng-container *ngIf=\"!loading; then flowDetailsTpl; else loadingTpl\"></ng-container>\n\n<ng-template #flowDetailsTpl>\n <ng-container *ngIf=\"flow; else emptyFlows\">\n <div class=\"header\">\n <div class=\"header__label\">Flow details</div>\n <div class=\"header__configBtn\">\n <button [disabled]=\"readOnly\" class=\"header__configBtn__edit\" mat-stroked-button (click)=\"onEditFlow()\">\n <mat-icon svgIcon=\"gio:edit-pencil\"></mat-icon>\n </button>\n <button [disabled]=\"readOnly\" class=\"header__configBtn__delete\" mat-stroked-button (click)=\"onDeleteFlow()\">\n <mat-icon svgIcon=\"gio:trash\"></mat-icon>\n </button>\n </div>\n </div>\n <gio-ps-flow-details-info-bar class=\"infoBar\" [flow]=\"flow\" [entrypointsInfo]=\"entrypointsInfo\"></gio-ps-flow-details-info-bar>\n\n <div class=\"content\">\n <mat-tab-group *ngIf=\"apiType === 'MESSAGE'\" 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 policyExecutionPhase=\"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 policyExecutionPhase=\"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 policyExecutionPhase=\"MESSAGE_REQUEST\"\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 policyExecutionPhase=\"MESSAGE_RESPONSE\"\n (stepsChange)=\"onStepsChange('subscribe', $event)\"\n ></gio-ps-flow-details-phase>\n </mat-tab>\n </mat-tab-group>\n\n <ng-container *ngIf=\"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 policyExecutionPhase=\"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 policyExecutionPhase=\"RESPONSE\"\n (stepsChange)=\"onStepsChange('response', $event)\"\n ></gio-ps-flow-details-phase>\n </ng-container>\n </div>\n </ng-container>\n\n <ng-template #emptyFlows>\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 </ng-template>\n</ng-template>\n\n<ng-template #loadingTpl>\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</ng-template>\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, 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 ApiType,\n ConnectorInfo,\n Flow,\n FlowExecution,\n Plan,\n Policy,\n PolicyDocumentationFetcher,\n PolicySchemaFetcher,\n SaveOutput,\n SharedPolicyGroupPolicy,\n toGenericPolicies,\n GenericPolicy,\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\n@Component({\n standalone: true,\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 public 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 /**\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 // 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) {\n this.disableSaveButton = true;\n this.flowsGroups = getFlowsGroups(this.commonFlows, this.plans);\n this.initialFlowsGroups = cloneDeep(this.flowsGroups);\n\n // Select first flow by default on first load\n this.selectedFlow = flatten(this.flowsGroups.map(flowGroup => flowGroup.flows))[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 }\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 = flowsGroups;\n this.disableSaveButton = false;\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 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 nextSelectedFlow = 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.selectedFlow = flatten(this.flowsGroups.map(flowGroup => flowGroup.flows)).find(f => f._id === nextSelectedFlow);\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\n this.save.emit({\n ...(commonFlows ? { commonFlows } : {}),\n ...(plansToUpdate ? { plansToUpdate } : {}),\n ...(this.hasFlowExecutionChanged ? { flowExecution: this.flowExecution } : {}),\n });\n this.saving = 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 = (commonFlows: Flow[] = [], plans: Plan[] = []): FlowGroupVM[] => {\n const commFlowsGroup: FlowGroupVM = {\n _id: 'flowsGroup_commonFlow',\n name: 'Common flows',\n flows: commonFlows.map(flow => ({ ...flow, _id: uniqueId('flow_'), _hasChanged: false })),\n };\n\n return [\n ...plans.map(plan => ({\n _id: uniqueId('flowsGroup_'),\n _icon: 'gio:shield',\n _planId: plan.id,\n name: plan.name,\n flows: plan.flows.map(flow => ({ ...flow, _id: uniqueId('flow_'), _hasChanged: false })),\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 ? (commonFlowsGroup?.flows ?? []).map(flow => omit(flow, '_id', '_hasChanged')) : 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', '_icon', '_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')),\n }));\n\n return plansWithChangedFlowsOutput.length > 0 ? plansWithChangedFlowsOutput : null;\n};\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-->\n\n<div class=\"header\">\n <div class=\"header__apiInfo\" *ngIf=\"!loading; else loadingApiInfo\">\n <span class=\"gio-badge-primary\">\n {{ apiType | titlecase }}\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 <mat-icon *ngFor=\"let entrypoint of entrypointsInfo\" class=\"gio-left\" [svgIcon]=\"entrypoint.icon\"></mat-icon>\n <mat-icon *ngFor=\"let endpoint of endpointsInfo\" class=\"gio-left\" [svgIcon]=\"endpoint.icon\"></mat-icon>\n </span>\n </div>\n <ng-template #loadingApiInfo>\n <div class=\"header__apiInfo\">\n <span class=\"gio-badge-primary\"> </span>\n <span class=\"gio-badge-neutral\"> </span>\n </div>\n </ng-template>\n\n <div class=\"header__btn\">\n <button *ngIf=\"!saving\" mat-flat-button color=\"primary\" [disabled]=\"loading || disableSaveButton\" (click)=\"onSave()\">Save</button>\n <button *ngIf=\"saving\" mat-flat-button color=\"primary\" disabled>Saving...</button>\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 (flowsGroupsChange)=\"onFlowsGroupsChange($event)\"\n (flowExecutionChange)=\"onFlowExecutionChange($event)\"\n [(selectedFlow)]=\"selectedFlow\"\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 GenericPolicy,\n Policy,\n PolicyDocumentationFetcher,\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\n@Component({\n selector: 'gio-policy-group-studio',\n standalone: true,\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 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 */\n @Input({ required: true })\n public executionPhase!: ExecutionPhase;\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}__${ExecutionPhase}`, PolicyGroupVM | null> = {\n PROXY__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 PROXY__RESPONSE: {\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 PROXY__MESSAGE_REQUEST: null, // n/a\n PROXY__MESSAGE_RESPONSE: null, // n/a\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__MESSAGE_REQUEST: {\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__MESSAGE_RESPONSE: {\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 };\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) {\n this.policyGroupVM = this.phases[`${this.apiType}__${this.executionPhase}`] ?? 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 [policyExecutionPhase]=\"executionPhase\"\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":["i10","i9","i2","i3","i5","i6","i1.GioPolicyStudioService","i4","i7","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/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/index.ts","../../../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-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-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/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 './ApiType';\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 { ApiType } from '../flow';\n\nimport { ExecutionPhase } 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: ExecutionPhase;\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) 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';\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 { CommonModule } from '@angular/common';\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, 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 standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n MatButtonModule,\n MatDialogModule,\n MatFormFieldModule,\n MatSelectModule,\n MatInputModule,\n MatSlideToggleModule,\n GioFormSlideToggleModule,\n GioBannerModule,\n GioIconsModule,\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: true,\n };\n\n this.dialogRef.close({\n ...flowToSave,\n });\n }\n}\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-->\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<mat-dialog-content *ngIf=\"flowFormGroup\" 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\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\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\n <div class=\"content__row\">\n <mat-form-field>\n <mat-label>Entrypoints</mat-label>\n <mat-select multiple formControlName=\"entrypoints\">\n <mat-option *ngFor=\"let entrypoint of entrypoints\" [value]=\"entrypoint.type\">{{ entrypoint.name }}</mat-option>\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\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\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 </mat-form-field>\n </div>\n</mat-dialog-content>\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 { CommonModule } from '@angular/common';\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 { 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 standalone: true,\n imports: [\n CommonModule,\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-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: 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) 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-->\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<mat-dialog-content *ngIf=\"flowFormGroup\" 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\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\n <mat-form-field>\n <mat-label>Path</mat-label>\n <span matTextPrefix>/ </span>\n <input matInput formControlName=\"path\" />\n <mat-hint>Path</mat-hint>\n </mat-form-field>\n </div>\n\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\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 </mat-form-field>\n </div>\n</mat-dialog-content>\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 } from 'lodash';\nimport { CommonModule } from '@angular/common';\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 standalone: true,\n imports: [\n CommonModule,\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) 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-->\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<mat-dialog-content *ngIf=\"flowExecutionFormGroup\" 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. You\n 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\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<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) 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 { cloneDeep, isEmpty } from 'lodash';\nimport { GIO_DIALOG_WIDTH, GioIconsModule, GioLoaderModule } from '@gravitee/ui-particles-angular';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { MatButtonModule } from '@angular/material/button';\nimport { CommonModule } from '@angular/common';\n\nimport {\n GioPolicyStudioFlowMessageFormDialogComponent,\n GioPolicyStudioFlowMessageFormDialogData,\n} from '../flow-form-dialog/flow-message-form-dialog/gio-ps-flow-message-form-dialog.component';\nimport { FlowGroupVM, FlowVM } from '../../policy-studio/gio-policy-studio.model';\nimport { ApiType, ChannelSelector, ConditionSelector, ConnectorInfo, FlowExecution, HttpSelector, Operation } 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 {\n GioPolicyStudioFlowExecutionFormDialogComponent,\n GioPolicyStudioFlowExecutionFormDialogData,\n} from '../flow-execution-form-dialog/gio-ps-flow-execution-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 standalone: true,\n imports: [GioIconsModule, MatTooltipModule, MatButtonModule, CommonModule, GioLoaderModule],\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 {\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 selectedFlow?: FlowVM = undefined;\n\n @Input()\n public entrypoints: ConnectorInfo[] = [];\n\n @Output()\n public selectedFlowChange = new EventEmitter<FlowVM>();\n\n @Output()\n public flowsGroupsChange = new EventEmitter<FlowGroupVM[]>();\n\n @Output()\n public flowExecutionChange = new EventEmitter<FlowExecution>();\n\n public flowGroupMenuItems: FlowGroupMenuVM[] = [];\n\n constructor(private readonly matDialog: MatDialog) {}\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (changes.flowsGroups || changes.selectedFlow) {\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 = '';\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 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.selectedFlow?._id === flow._id,\n mouseOver: false,\n badges,\n pathOrChannelLabel,\n hasCondition,\n };\n }),\n };\n });\n }\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.selectedFlowChange.emit(flow);\n }\n }\n\n public onAddFlow(flowGroup: FlowGroupVM): void {\n const dialogResult =\n this.apiType === 'MESSAGE'\n ? 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 : 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\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.selectedFlowChange.emit(createdOrEdited);\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","<!--\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-->\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 <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</div>\n\n<div class=\"list\" *ngIf=\"!loading; else loadingList\">\n <div *ngFor=\"let flowsGroup of flowGroupMenuItems\" class=\"list__flowsGroup\">\n <div class=\"list__flowsGroup__header\">\n <div class=\"list__flowsGroup__header__label\">\n <mat-icon *ngIf=\"flowsGroup._icon\" [svgIcon]=\"flowsGroup._icon\"></mat-icon>\n <span>{{ flowsGroup.name }}</span>\n </div>\n <div class=\"list__flowsGroup__header__addBtn\">\n <button mat-button [disabled]=\"readOnly\" (click)=\"onAddFlow(flowsGroup)\">\n <mat-icon svgIcon=\"gio:plus\" matTooltip=\"New flow\"></mat-icon>\n </button>\n </div>\n </div>\n\n <div\n *ngFor=\"let flow of flowsGroup.flows\"\n class=\"list__flowsGroup__flow\"\n [class.selected]=\"flow.selected\"\n (click)=\"selectFlow(flowsGroup._id, flow._id)\"\n (mouseout)=\"flow.mouseOver = false\"\n (mouseover)=\"flow.mouseOver = true\"\n >\n <div *ngIf=\"flow.name\" class=\"list__flowsGroup__flow__name\" [attr.title]=\"flow.name\">\n {{ flow.name }}\n </div>\n <div class=\"list__flowsGroup__flow__infos\">\n <div class=\"list__flowsGroup__flow__infos__badges\">\n <span *ngFor=\"let badge of flow.badges\" class=\"list__flowsGroup__flow__infos__badges__badge\" [ngClass]=\"badge.class\">{{\n badge.label\n }}</span>\n </div>\n <div class=\"list__flowsGroup__flow__infos__pathOrChannelLabel\">\n <span *ngIf=\"flow.pathOrChannelLabel; else emptyPathOrChannelLabel\" [attr.title]=\"flow.pathOrChannelLabel\">{{\n flow.pathOrChannelLabel\n }}</span>\n <ng-template #emptyPathOrChannelLabel>\n <em>Empty</em>\n </ng-template>\n </div>\n\n <span *ngIf=\"flow.hasCondition\" class=\"list__flowsGroup__flow__infos__conditionBadge gio-badge-neutral\" matTooltip=\"Conditioned\"\n ><mat-icon svgIcon=\"gio:if\"></mat-icon\n ></span>\n </div>\n </div>\n </div>\n</div>\n\n<ng-template #loadingList>\n <div class=\"loadingList\">\n <gio-loader></gio-loader>\n </div>\n</ng-template>\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\n@Injectable({\n providedIn: 'root',\n})\nexport class GioPolicyStudioService {\n private schemasCache: Record<string, BehaviorSubject<unknown>> = {};\n private documentationsCache: Record<string, BehaviorSubject<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<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 GioFormJsonSchemaComponent,\n GioFormJsonSchemaModule,\n GioJsonSchema,\n GioJsonSchemaContext,\n GioLoaderModule,\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';\n\nimport { ExecutionPhase, isPolicy, isSharedPolicyGroupPolicy, Step, toPolicy, GenericPolicy } from '../../models';\nimport { GioPolicyStudioService } from '../../policy-studio/gio-policy-studio.service';\n\n@Component({\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n MatInputModule,\n MatFormFieldModule,\n GioFormJsonSchemaModule,\n GioAsciidoctorModule,\n GioLoaderModule,\n GioBannerModule,\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 @Input()\n public readOnly = false;\n\n @Input()\n public step?: Step;\n\n @Input({ required: true })\n public executionPhase!: ExecutionPhase;\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<string>;\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 => (isEmpty(doc) ? 'No documentation available.' : doc)),\n catchError(() => of('No documentation available.')),\n );\n }\n if (isSharedPolicyGroupPolicy(this.genericPolicy)) {\n this.policySchema$ = of({});\n\n this.policyDocumentation$ = of(' ');\n\n this.infoBanner = this.genericPolicy.prerequisiteMessage;\n }\n }\n if (changes.executionPhase) {\n this.context = {\n executionPhase: this.executionPhase,\n };\n this.isMessage = this.executionPhase === 'MESSAGE_REQUEST' || this.executionPhase === 'MESSAGE_RESPONSE';\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) 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<div class=\"settings\">\n <div class=\"settings__header\">Settings</div>\n\n <div class=\"settings__content\">\n <ng-container *ngIf=\"stepForm && (policySchema$ | async) as policySchema; else loadingTmpl\" [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\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 </mat-form-field>\n\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 </mat-form-field>\n }\n\n <gio-form-json-schema\n *ngIf=\"policySchema\"\n [jsonSchema]=\"$any(policySchema)\"\n [context]=\"context\"\n (ready)=\"onJsonSchemaReady($event)\"\n formControlName=\"configuration\"\n ></gio-form-json-schema>\n </ng-container>\n </div>\n</div>\n\n<div class=\"documentation\">\n <div class=\"documentation__header\">Documentation</div>\n\n <div class=\"documentation__content\">\n <gio-banner-warning *ngIf=\"infoBanner\">\n Prerequisite message\n <span gioBannerBody>{{ infoBanner }}</span>\n </gio-banner-warning>\n <ng-container *ngIf=\"policyDocumentation$ | async as policyDocumentation; else loadingTmpl\">\n <gio-asciidoctor [content]=\"policyDocumentation\"></gio-asciidoctor>\n </ng-container>\n </div>\n</div>\n\n<ng-template #loadingTmpl>\n <gio-loader></gio-loader>\n</ng-template>\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, ExecutionPhase, GenericPolicy, isPolicy, isSharedPolicyGroupPolicy, Step } from '../../models';\nimport { GioPolicyStudioStepFormComponent } from '../step-form/gio-ps-step-form.component';\n\nexport type GioPolicyStudioPoliciesCatalogDialogData = {\n genericPolicies: GenericPolicy[];\n executionPhase: ExecutionPhase;\n apiType: ApiType;\n trialUrl?: string;\n};\n\nexport type GioPolicyStudioPoliciesCatalogDialogResult = undefined | Step;\n\nconst executionPhaseLabels: Record<ExecutionPhase, string> = {\n REQUEST: 'Request',\n RESPONSE: 'Response',\n MESSAGE_REQUEST: 'Publish',\n MESSAGE_RESPONSE: 'Subscribe',\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 standalone: true,\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 executionPhase!: ExecutionPhase;\n public executionPhaseLabel!: 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 constructor(\n public dialogRef: MatDialogRef<GioPolicyStudioPoliciesCatalogDialogComponent, GioPolicyStudioPoliciesCatalogDialogResult>,\n @Inject(MAT_DIALOG_DATA) flowDialogData: GioPolicyStudioPoliciesCatalogDialogData,\n ) {\n this.executionPhase = flowDialogData.executionPhase;\n this.executionPhaseLabel = executionPhaseLabels[flowDialogData.executionPhase];\n\n this.allPolicies = flowDialogData.genericPolicies\n .filter(genericPolicy => {\n if (isPolicy(genericPolicy)) {\n if (flowDialogData.apiType === 'PROXY') {\n return genericPolicy.proxy?.includes(flowDialogData.executionPhase);\n }\n return genericPolicy.message?.includes(flowDialogData.executionPhase);\n }\n if (isSharedPolicyGroupPolicy(genericPolicy)) {\n return genericPolicy.apiType === flowDialogData.apiType && genericPolicy.phase === flowDialogData.executionPhase;\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).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) 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-->\n<h2 mat-dialog-title class=\"title\">\n Policies for <span class=\"title__phase\">{{ executionPhaseLabel }}</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 <mat-dialog-content *ngIf=\"!selectedPolicy\" 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\" />\n <button\n matIconSuffix\n mat-icon-button\n aria-label=\"Clear\"\n *ngIf=\"filtersForm.get('search')?.value\"\n (click)=\"filtersForm.get('search')?.setValue('')\"\n >\n <mat-icon svgIcon=\"gio:cancel\"></mat-icon>\n </button>\n </mat-form-field>\n <mat-chip-listbox\n *ngIf=\"categories.length > 1\"\n class=\"policiesCatalog__filters__categories\"\n aria-label=\"Categories selection\"\n multiple\n formControlName=\"categories\"\n >\n <mat-chip-option *ngFor=\"let category of categories\" [selected]=\"category\" [value]=\"category\"\n >{{ category | titlecase }}\n </mat-chip-option>\n </mat-chip-listbox>\n </div>\n\n <div *ngIf=\"policies.length; else emptyPoliciesTpl\" class=\"policiesCatalog__list\">\n <div *ngFor=\"let policy of policies\" 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\n <span *ngIf=\"policy.name\" class=\"policiesCatalog__list__policy__head__name\">{{ policy.name }}</span>\n\n <span\n *ngIf=\"policy.genericPolicy.type === 'SHARED_POLICY_GROUP'\"\n class=\"gio-badge-neutral policiesCatalog__list__policy__head__badge\"\n matTooltip=\"Shared Policy Group\"\n >\n <mat-icon svgIcon=\"gio:users\"></mat-icon>\n </span>\n </div>\n\n <div class=\"policiesCatalog__list__policy__enterprise\" *ngIf=\"policy.deployed === false\">\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 <div *ngIf=\"policy.description\" 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 </div>\n </mat-dialog-content>\n</ng-container>\n\n<ng-template #emptyPoliciesTpl>\n <div class=\"emptyPoliciesCatalog\">No policies available.</div>\n</ng-template>\n\n<mat-dialog-content *ngIf=\"selectedPolicy\" class=\"policyForm\">\n <button class=\"policyForm__goBackBtn\" mat-stroked-button (click)=\"onGoBack()\">\n <mat-icon svgIcon=\"gio:arrow-left\"></mat-icon>\n Go back\n </button>\n\n <gio-banner *ngIf=\"isUnlicensed\" 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 <a *ngIf=\"trialUrl\" mat-stroked-button [href]=\"trialUrl\" target=\"_blank\">Request upgrade</a>\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\n <span *ngIf=\"selectedPolicy.name\" class=\"policyForm__info__head__name\">{{ selectedPolicy.name }}</span>\n\n <span *ngIf=\"selectedPolicy.type === 'SHARED_POLICY_GROUP'\" class=\"gio-badge-neutral policiesCatalog__list__policy__head__badge\">\n <mat-icon svgIcon=\"gio:users\"></mat-icon> Shared Policy Group\n </span>\n </div>\n\n <div *ngIf=\"selectedPolicy.description\" class=\"policyForm__info__description\">{{ selectedPolicy.description }}</div>\n </div>\n\n <gio-ps-step-form\n [genericPolicy]=\"selectedPolicy\"\n [executionPhase]=\"executionPhase\"\n (stepChange)=\"onStepChange($event)\"\n (isValid)=\"onIsValid($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\n *ngIf=\"selectedPolicy\"\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</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 { CommonModule } from '@angular/common';\nimport { MatButtonModule } from '@angular/material/button';\n\nimport { ExecutionPhase, Step, GenericPolicy } from '../../models';\nimport { GioPolicyStudioStepFormComponent } from '../step-form/gio-ps-step-form.component';\n\nexport type GioPolicyStudioStepEditDialogData = {\n genericPolicy: GenericPolicy;\n step: Step;\n executionPhase: ExecutionPhase;\n readOnly?: boolean;\n};\n\nexport type GioPolicyStudioStepEditDialogResult = undefined | Step;\n\n@Component({\n standalone: true,\n imports: [CommonModule, 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 executionPhase!: ExecutionPhase;\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.executionPhase = flowDialogData.executionPhase;\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) 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-->\n<h2 mat-dialog-title class=\"title\">\n <mat-icon class=\"title__icon\" [svgIcon]=\"genericPolicy.icon ?? 'gio:puzzle'\"></mat-icon>\n\n <span *ngIf=\"step.name\" class=\"title__name\">\n {{ step.name }}\n <span *ngIf=\"genericPolicy.type === 'SHARED_POLICY_GROUP'\" class=\"gio-badge-neutral policiesCatalog__list__policy__head__badge\">\n <mat-icon svgIcon=\"gio:users\"></mat-icon> Shared Policy Group\n </span></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 [executionPhase]=\"executionPhase\"\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 { CommonModule } from '@angular/common';\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 { ExecutionPhase, isPolicy, isSharedPolicyGroupPolicy, Step, GenericPolicy } from '../../models';\n\n@Component({\n standalone: true,\n imports: [CommonModule, 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 executionPhase!: ExecutionPhase;\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 protected genericPolicy?: GenericPolicy;\n protected policyNotFound: false | 'SHARED_POLICY_GROUP' | 'POLICY' = false;\n\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 executionPhase: this.executionPhase,\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","<!--\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-->\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 <span *ngIf=\"step.name\" class=\"info__head__name\">{{ step.name }}</span>\n\n <span *ngIf=\"genericPolicy?.type === 'SHARED_POLICY_GROUP'\" class=\"gio-badge-neutral\" matTooltip=\"Shared Policy Group\">\n <mat-icon svgIcon=\"gio:users\"></mat-icon>\n </span>\n @if (getPrerequisiteMessage) {\n <mat-icon class=\"info__head__info\" svgIcon=\"gio:info\" [matTooltip]=\"getPrerequisiteMessage\"></mat-icon>\n }\n <span\n *ngIf=\"policyNotFound !== false\"\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> \n }\n <mat-icon svgIcon=\"gio:alert-circle\"></mat-icon>\n </span>\n </div>\n\n <div *ngIf=\"step.description\" class=\"info__description\">{{ step.description }}</div>\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</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 { CommonModule } from '@angular/common';\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, ExecutionPhase, 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 standalone: true,\n imports: [CommonModule, 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 policyExecutionPhase!: ExecutionPhase;\n\n @Input()\n public trialUrl?: string;\n\n @Output()\n public stepsChange = new EventEmitter<Step[]>();\n\n public stepsVM: StepVM[] = [];\n\n public isDisabled = false;\n\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.isDisabled = 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 executionPhase: this.policyExecutionPhase,\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","<!--\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-->\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 <span *ngIf=\"isDisabled\" class=\"header__infoIcon\" matTooltip=\"Policies might not be evaluated\" matTooltipPosition=\"before\">\n <mat-icon svgIcon=\"gio:info\"></mat-icon>\n </span>\n</div>\n\n<div *ngIf=\"!isDisabled; else disabledPhaseContent\" 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 <ng-container *ngIf=\"stepVM.type === 'connectors'\">\n <div class=\"content__step__connector\">\n <span *ngFor=\"let connector of stepVM.connectors\" class=\"gio-badge-white content__step__connector__badge\">\n <mat-icon *ngIf=\"connector.icon\" [svgIcon]=\"connector.icon\" class=\"content__step__connector__badge__icon\"></mat-icon>\n {{ connector.name }}\n </span>\n </div>\n\n <!-- Add policy button after first connector -->\n <ng-container *ngIf=\"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 </ng-container>\n </ng-container>\n\n <!-- Policy -->\n @if (stepVM.type === 'step') {\n <div class=\"content__step__policy\">\n <div *ngIf=\"stepVM.step?.condition\" class=\"content__step__policy__condition\">\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 <gio-ps-flow-details-phase-step\n class=\"content__step__step\"\n [readOnly]=\"readOnly\"\n [class.disabled]=\"readOnly || !stepVM.step.enabled\"\n [genericPolicies]=\"genericPolicies\"\n [step]=\"stepVM.step\"\n [executionPhase]=\"policyExecutionPhase\"\n (stepChange)=\"onStepChange(stepVM.index, $event)\"\n (deleted)=\"onStepDeleted(stepVM.index)\"\n (disabled)=\"onStepDisabled(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\n<ng-template #disabledPhaseContent>\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</ng-template>\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 } 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, Operation } from '../../models';\nimport { FlowVM } from '../../policy-studio/gio-policy-studio.model';\n\n@Component({\n standalone: true,\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 {\n @Input()\n public flow?: FlowVM = undefined;\n\n @Input()\n public entrypointsInfo?: ConnectorInfo[];\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(): { name: string; class: 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?.methods?.length\n ? httpSelector?.methods.map(m => ({\n name: m,\n class: `gio-method-badge-${m.toLowerCase()}`,\n }))\n : [\n {\n name: 'ALL',\n class: 'gio-badge-neutral',\n },\n ];\n }\n}\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-->\n<div *ngIf=\"flow?.name\" class=\"info\">\n <span class=\"info__label\">Name</span>\n <span class=\"info__value strong\">{{ flow?.name }}</span>\n</div>\n\n<div *ngIf=\"entrypoints\" class=\"info\">\n <span class=\"info__label\">Entrypoints</span>\n <span *ngFor=\"let entrypoint of entrypoints\" class=\"info__value gio-badge gio-badge-neutral\">\n <mat-icon [svgIcon]=\"entrypoint.icon\"></mat-icon>\n {{ entrypoint.name }}</span\n >\n</div>\n\n<!-- MESSAGE API type -->\n\n<div *ngIf=\"operations\" class=\"info\">\n <span class=\"info__label\">Operations</span>\n <span *ngFor=\"let operation of operations\" class=\"info__value gio-badge-neutral\"> {{ operation }}</span>\n</div>\n\n<div *ngIf=\"channel\" class=\"info\">\n <span class=\"info__label\">Channel</span>\n <span class=\"info__value strong\">{{ channel }}</span>\n</div>\n\n<div *ngIf=\"channelOperator\" class=\"info\">\n <span class=\"info__label\">Channel Operator</span>\n <span class=\"info__value gio-badge-neutral\">{{ channelOperator }}</span>\n</div>\n\n<!-- PROXY API type -->\n\n<div *ngIf=\"path\" class=\"info\">\n <span class=\"info__label\">Path</span>\n <span class=\"info__value strong\">{{ path }}</span>\n</div>\n\n<div *ngIf=\"pathOperator\" class=\"info\">\n <span class=\"info__label\">Path Operator</span>\n <span class=\"info__value gio-badge-neutral\">{{ pathOperator }}</span>\n</div>\n\n<div *ngIf=\"methods\" class=\"info\">\n <span class=\"info__label\">HTTP methods</span>\n <span *ngFor=\"let method of methods\" class=\"info__value method\" [ngClass]=\"method.class\"> {{ method.name }}</span>\n</div>\n\n<!-- Condition -->\n\n<div *ngIf=\"condition\" class=\"info\">\n <span class=\"info__label\">Condition</span>\n <span class=\"info__value gio-badge-neutral condition\">{{ condition }}</span>\n</div>\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, GioIconsModule, GioLoaderModule } from '@gravitee/ui-particles-angular';\nimport { MatTabsModule } from '@angular/material/tabs';\nimport { MatButtonModule } from '@angular/material/button';\nimport { CommonModule } from '@angular/common';\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';\n\n@Component({\n standalone: true,\n imports: [\n CommonModule,\n MatTabsModule,\n MatButtonModule,\n GioIconsModule,\n GioPolicyStudioDetailsPhaseComponent,\n GioFilterConnectorsByModePipe,\n GioLoaderModule,\n GioPolicyStudioDetailsInfoBarComponent,\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 const dialogResult =\n this.apiType === 'MESSAGE'\n ? 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 : 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\n dialogResult\n .pipe(\n tap(createdOrEdited => {\n if (!createdOrEdited) {\n return;\n }\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 onStepsChange(flowPhase: '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) 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<ng-container *ngIf=\"!loading; then flowDetailsTpl; else loadingTpl\"></ng-container>\n\n<ng-template #flowDetailsTpl>\n <ng-container *ngIf=\"flow; else emptyFlows\">\n <div class=\"header\">\n <div class=\"header__label\">Flow details</div>\n <div class=\"header__configBtn\">\n <button [disabled]=\"readOnly\" class=\"header__configBtn__edit\" mat-stroked-button (click)=\"onEditFlow()\">\n <mat-icon svgIcon=\"gio:edit-pencil\"></mat-icon>\n </button>\n <button [disabled]=\"readOnly\" class=\"header__configBtn__delete\" mat-stroked-button (click)=\"onDeleteFlow()\">\n <mat-icon svgIcon=\"gio:trash\"></mat-icon>\n </button>\n </div>\n </div>\n <gio-ps-flow-details-info-bar class=\"infoBar\" [flow]=\"flow\" [entrypointsInfo]=\"entrypointsInfo\"></gio-ps-flow-details-info-bar>\n\n <div class=\"content\">\n <mat-tab-group *ngIf=\"apiType === 'MESSAGE'\" 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 policyExecutionPhase=\"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 policyExecutionPhase=\"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 policyExecutionPhase=\"MESSAGE_REQUEST\"\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 policyExecutionPhase=\"MESSAGE_RESPONSE\"\n (stepsChange)=\"onStepsChange('subscribe', $event)\"\n ></gio-ps-flow-details-phase>\n </mat-tab>\n </mat-tab-group>\n\n <ng-container *ngIf=\"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 policyExecutionPhase=\"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 policyExecutionPhase=\"RESPONSE\"\n (stepsChange)=\"onStepsChange('response', $event)\"\n ></gio-ps-flow-details-phase>\n </ng-container>\n </div>\n </ng-container>\n\n <ng-template #emptyFlows>\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 </ng-template>\n</ng-template>\n\n<ng-template #loadingTpl>\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</ng-template>\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, 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 ApiType,\n ConnectorInfo,\n Flow,\n FlowExecution,\n Plan,\n Policy,\n PolicyDocumentationFetcher,\n PolicySchemaFetcher,\n SaveOutput,\n SharedPolicyGroupPolicy,\n toGenericPolicies,\n GenericPolicy,\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\n@Component({\n standalone: true,\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 public 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 /**\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 // 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) {\n this.disableSaveButton = true;\n this.flowsGroups = getFlowsGroups(this.commonFlows, this.plans);\n this.initialFlowsGroups = cloneDeep(this.flowsGroups);\n\n // Select first flow by default on first load\n this.selectedFlow = flatten(this.flowsGroups.map(flowGroup => flowGroup.flows))[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 }\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 = flowsGroups;\n this.disableSaveButton = false;\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 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 nextSelectedFlow = 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.selectedFlow = flatten(this.flowsGroups.map(flowGroup => flowGroup.flows)).find(f => f._id === nextSelectedFlow);\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\n this.save.emit({\n ...(commonFlows ? { commonFlows } : {}),\n ...(plansToUpdate ? { plansToUpdate } : {}),\n ...(this.hasFlowExecutionChanged ? { flowExecution: this.flowExecution } : {}),\n });\n this.saving = 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 = (commonFlows: Flow[] = [], plans: Plan[] = []): FlowGroupVM[] => {\n const commFlowsGroup: FlowGroupVM = {\n _id: 'flowsGroup_commonFlow',\n name: 'Common flows',\n flows: commonFlows.map(flow => ({ ...flow, _id: uniqueId('flow_'), _hasChanged: false })),\n };\n\n return [\n ...plans.map(plan => ({\n _id: uniqueId('flowsGroup_'),\n _icon: 'gio:shield',\n _planId: plan.id,\n name: plan.name,\n flows: plan.flows.map(flow => ({ ...flow, _id: uniqueId('flow_'), _hasChanged: false })),\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 ? (commonFlowsGroup?.flows ?? []).map(flow => omit(flow, '_id', '_hasChanged')) : 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', '_icon', '_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')),\n }));\n\n return plansWithChangedFlowsOutput.length > 0 ? plansWithChangedFlowsOutput : null;\n};\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-->\n\n<div class=\"header\">\n <div class=\"header__apiInfo\" *ngIf=\"!loading; else loadingApiInfo\">\n <span class=\"gio-badge-primary\">\n {{ apiType | titlecase }}\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 <mat-icon *ngFor=\"let entrypoint of entrypointsInfo\" class=\"gio-left\" [svgIcon]=\"entrypoint.icon\"></mat-icon>\n <mat-icon *ngFor=\"let endpoint of endpointsInfo\" class=\"gio-left\" [svgIcon]=\"endpoint.icon\"></mat-icon>\n </span>\n </div>\n <ng-template #loadingApiInfo>\n <div class=\"header__apiInfo\">\n <span class=\"gio-badge-primary\"> </span>\n <span class=\"gio-badge-neutral\"> </span>\n </div>\n </ng-template>\n\n <div class=\"header__btn\">\n <button *ngIf=\"!saving\" mat-flat-button color=\"primary\" [disabled]=\"loading || disableSaveButton\" (click)=\"onSave()\">Save</button>\n <button *ngIf=\"saving\" mat-flat-button color=\"primary\" disabled>Saving...</button>\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 (flowsGroupsChange)=\"onFlowsGroupsChange($event)\"\n (flowExecutionChange)=\"onFlowExecutionChange($event)\"\n [(selectedFlow)]=\"selectedFlow\"\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 GenericPolicy,\n Policy,\n PolicyDocumentationFetcher,\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\n@Component({\n selector: 'gio-policy-group-studio',\n standalone: true,\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 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 */\n @Input({ required: true })\n public executionPhase!: ExecutionPhase;\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}__${ExecutionPhase}`, PolicyGroupVM | null> = {\n PROXY__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 PROXY__RESPONSE: {\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 PROXY__MESSAGE_REQUEST: null, // n/a\n PROXY__MESSAGE_RESPONSE: null, // n/a\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__MESSAGE_REQUEST: {\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__MESSAGE_RESPONSE: {\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 };\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) {\n this.policyGroupVM = this.phases[`${this.apiType}__${this.executionPhase}`] ?? 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 [policyExecutionPhase]=\"executionPhase\"\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":["i10","i9","i2","i3","i5","i6","i1.GioPolicyStudioService","i4","i7","i1"],"mappings":"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"}
|