@gravitee/ui-policy-studio-angular 16.2.5 → 16.3.0-renovate-digests-pin-a67a2bd

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"gravitee-ui-policy-studio-angular-testing.mjs","sources":["../../../projects/ui-policy-studio-angular/src/lib/models/flow/Flow.fixture.ts","../../../projects/ui-policy-studio-angular/src/lib/models/flow/FlowExecution.fixture.ts","../../../projects/ui-policy-studio-angular/src/lib/models/policy/Policy.fixture.ts","../../../projects/ui-policy-studio-angular/src/lib/models/flow/Step.fixture.ts","../../../projects/ui-policy-studio-angular/src/lib/models/flow/index-testing.ts","../../../projects/ui-policy-studio-angular/src/lib/models/plan/Plan.fixture.ts","../../../projects/ui-policy-studio-angular/src/lib/models/plan/index-testing.ts","../../../projects/ui-policy-studio-angular/src/lib/models/policy/index-testing.ts","../../../projects/ui-policy-studio-angular/src/lib/models/ConnectorsInfo.fixture.ts","../../../projects/ui-policy-studio-angular/src/lib/models/index-testing.ts","../../../projects/ui-policy-studio-angular/src/lib/components/flows-menu/gio-ps-flows-menu.harness.ts","../../../projects/ui-policy-studio-angular/src/lib/components/flow-details-info-bar/gio-ps-flow-details-info-bar.harness.ts","../../../projects/ui-policy-studio-angular/src/lib/components/flow-details/gio-ps-flow-details.harness.ts","../../../projects/ui-policy-studio-angular/src/lib/components/flow-form-dialog/flow-proxy-form-dialog/gio-ps-flow-proxy-form-dialog.harness.ts","../../../projects/ui-policy-studio-angular/src/lib/components/flow-form-dialog/flow-message-form-dialog/gio-ps-flow-message-form-dialog.harness.ts","../../../projects/ui-policy-studio-angular/src/lib/components/flow-execution-form-dialog/gio-ps-flow-execution-form-dialog.harness.ts","../../../projects/ui-policy-studio-angular/src/lib/components/flow-details-phase-step/gio-ps-flow-details-phase-step.harness.ts","../../../projects/ui-policy-studio-angular/src/lib/components/step-form/gio-ps-step-form.harness.ts","../../../projects/ui-policy-studio-angular/src/lib/components/step-edit-dialog/gio-ps-step-edit-dialog.harness.ts","../../../projects/ui-policy-studio-angular/src/lib/components/policies-catalog-dialog/gio-ps-policies-catalog-dialog.harness.ts","../../../projects/ui-policy-studio-angular/src/lib/components/flow-details-phase/gio-ps-flow-details-phase.harness.ts","../../../projects/ui-policy-studio-angular/src/lib/components/flow-form-dialog/flow-native-form-dialog/gio-ps-flow-native-form-dialog.harness.ts","../../../projects/ui-policy-studio-angular/src/lib/components/flow-form-dialog/flow-mcp-form-dialog/gio-ps-flow-mcp-form-dialog.harness.ts","../../../projects/ui-policy-studio-angular/src/lib/components/flow-form-dialog/flow-llm-form-dialog/gio-ps-flow-llm-form-dialog.harness.ts","../../../projects/ui-policy-studio-angular/src/lib/policy-studio/gio-policy-studio.harness.ts","../../../projects/ui-policy-studio-angular/src/lib/policy-group-studio/gio-policy-group-studio.harness.ts","../../../projects/ui-policy-studio-angular/src/public-testing-api.ts","../../../projects/ui-policy-studio-angular/src/gravitee-ui-policy-studio-angular-testing.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 */\nimport { isFunction } from 'lodash';\n\nimport { Flow } from './Flow';\nimport { ChannelSelector, HttpSelector, McpSelector } from './Selector';\n\nexport function fakeChannelFlow(modifier?: Partial<Flow> | ((baseApi: Flow) => Flow)): Flow {\n const channelSelector: ChannelSelector = {\n type: 'CHANNEL',\n channel: 'channel',\n channelOperator: 'EQUALS',\n entrypoints: ['webhook'],\n operations: ['PUBLISH'],\n };\n\n const base: Flow = {\n name: 'Flow name',\n selectors: [channelSelector],\n request: [],\n response: [],\n subscribe: [],\n publish: [],\n enabled: true,\n };\n\n if (isFunction(modifier)) {\n return modifier(base);\n }\n\n return {\n ...base,\n ...modifier,\n };\n}\n\nexport function fakeConditionedChannelFlow(modifier?: Partial<Flow> | ((baseApi: Flow) => Flow)): Flow {\n const base = fakeChannelFlow((baseApi: Flow) => ({\n ...baseApi,\n name: 'Conditioned flow',\n selectors: [\n ...(baseApi.selectors ?? []),\n {\n type: 'CONDITION',\n condition: 'false',\n },\n ],\n }));\n\n if (isFunction(modifier)) {\n return modifier(base);\n }\n\n return {\n ...base,\n ...modifier,\n };\n}\n\nexport function fakeHttpFlow(modifier?: Partial<Flow> | ((baseApi: Flow) => Flow)): Flow {\n const httpSelector: HttpSelector = {\n type: 'HTTP',\n path: '/path',\n pathOperator: 'EQUALS',\n methods: ['GET'],\n };\n\n const base: Flow = {\n name: 'Flow name',\n selectors: [httpSelector],\n request: [],\n response: [],\n subscribe: [],\n publish: [],\n enabled: true,\n };\n\n if (isFunction(modifier)) {\n return modifier(base);\n }\n\n return {\n ...base,\n ...modifier,\n };\n}\n\nexport function fakeConditionedHttpFlow(modifier?: Partial<Flow> | ((baseApi: Flow) => Flow)): Flow {\n const base = fakeHttpFlow((baseApi: Flow) => ({\n ...baseApi,\n name: 'Conditioned flow',\n selectors: [\n ...(baseApi.selectors ?? []),\n {\n type: 'CONDITION',\n condition: 'false',\n },\n ],\n }));\n\n if (isFunction(modifier)) {\n return modifier(base);\n }\n return {\n ...base,\n ...modifier,\n };\n}\n\nexport function fakeNativeFlow(modifier?: Partial<Flow> | ((baseApi: Flow) => Flow)): Flow {\n const base: Flow = {\n name: 'Flow name',\n interact: [],\n subscribe: [],\n publish: [],\n enabled: true,\n };\n\n if (isFunction(modifier)) {\n return modifier(base);\n }\n\n return {\n ...base,\n ...modifier,\n };\n}\n\nexport function fakeMcpFlow(modifier?: Partial<Flow> | ((baseApi: Flow) => Flow)): Flow {\n const mcpSelector: McpSelector = {\n type: 'MCP',\n methods: [],\n };\n\n const base: Flow = {\n name: 'Flow name',\n selectors: [mcpSelector],\n request: [],\n response: [],\n enabled: true,\n };\n\n if (isFunction(modifier)) {\n return modifier(base);\n }\n\n return {\n ...base,\n ...modifier,\n };\n}\nexport function fakeLlmFlow(modifier?: Partial<Flow> | ((baseApi: Flow) => Flow)): Flow {\n const httpSelector: HttpSelector = {\n type: 'HTTP',\n path: '/path',\n pathOperator: 'EQUALS',\n methods: ['GET'],\n };\n\n const base: Flow = {\n name: 'Flow name',\n selectors: [httpSelector],\n request: [],\n response: [],\n enabled: true,\n };\n\n if (isFunction(modifier)) {\n return modifier(base);\n }\n return {\n ...base,\n ...modifier,\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 */\nimport { isFunction } from 'lodash';\n\nimport { FlowExecution } from './FlowExecution';\n\nexport function fakeBestMatchFlowExecution(modifier?: Partial<FlowExecution> | ((baseApi: FlowExecution) => FlowExecution)): FlowExecution {\n const base: FlowExecution = {\n mode: 'BEST_MATCH',\n matchRequired: false,\n };\n\n if (isFunction(modifier)) {\n return modifier(base);\n }\n\n return {\n ...base,\n ...modifier,\n };\n}\n\nexport function fakeDefaultFlowExecution(modifier?: Partial<FlowExecution> | ((baseApi: FlowExecution) => FlowExecution)): FlowExecution {\n const base: FlowExecution = {\n mode: 'DEFAULT',\n matchRequired: false,\n };\n\n if (isFunction(modifier)) {\n return modifier(base);\n }\n\n return {\n ...base,\n ...modifier,\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\nimport { isFunction } from 'lodash';\n\nimport { Policy, PolicyInput } from './Policy';\n\n// 09/06/2023 - All API V4 available policies.\nexport const POLICIES_V4_UNREGISTERED_ICON: Policy[] = [\n {\n id: 'message-filtering',\n name: 'Message Filtering',\n description: 'Message Filtering Gravitee Policy',\n category: 'others',\n version: '1.1.1',\n flowPhaseCompatibility: {\n HTTP_PROXY: [],\n HTTP_MESSAGE: ['SUBSCRIBE', 'PUBLISH'],\n },\n },\n {\n id: 'json-xml',\n name: 'JSON to XML',\n description: 'Description of the JSON to XML Transformation Gravitee Policy',\n icon: 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxMDAuNzEgMTEyLjgyIj48ZGVmcz48c3R5bGU+LmNscy0xe2ZpbGw6Izg2YzNkMDt9LmNscy0ye2ZpbGw6I2ZmZjt9LmNscy0ze2ZvbnQtc2l6ZToxMnB4O2ZpbGw6IzFkMWQxYjtmb250LWZhbWlseTpNeXJpYWRQcm8tUmVndWxhciwgTXlyaWFkIFBybzt9LmNscy00e2xldHRlci1zcGFjaW5nOi0wLjAxZW07fTwvc3R5bGU+PC9kZWZzPjxnIGlkPSJBUEkiPjxwYXRoIGNsYXNzPSJjbHMtMSIgZD0iTTUwLjM1LDEzLjM3YTQzLDQzLDAsMSwwLDQzLjA1LDQzQTQzLDQzLDAsMCwwLDUwLjM1LDEzLjM3WiIvPjxwYXRoIGNsYXNzPSJjbHMtMiIgZD0iTTUxLjUsNjQuOTJBNi41Myw2LjUzLDAsMSwxLDU4LDU4LjM5LDYuNTMsNi41MywwLDAsMSw1MS41LDY0LjkyWm0wLTExLjM0YTQuODEsNC44MSwwLDEsMCw0LjgxLDQuODFBNC44MSw0LjgxLDAsMCwwLDUxLjUsNTMuNThaIi8+PHBhdGggY2xhc3M9ImNscy0yIiBkPSJNNjMuOCw3Ny4wOWE0LjgzLDQuODMsMCwxLDEsMy42OS03LjkyLDQuNzQsNC43NCwwLDAsMSwxLjEzLDMuMDlBNC44Myw0LjgzLDAsMCwxLDYzLjgsNzcuMDlabTAtNy45M2EzLjExLDMuMTEsMCwxLDAsMi4zOCwxLjEyQTMuMSwzLjEsMCwwLDAsNjMuOCw2OS4xNloiLz48cGF0aCBjbGFzcz0iY2xzLTIiIGQ9Ik01MS41LDQzLjY4YTQuODUsNC44NSwwLDAsMS00Ljc3LTQuMTQsNSw1LDAsMCwxLDAtLjY5LDQuODMsNC44MywwLDAsMSw5LjY1LDAsMy40NSwzLjQ1LDAsMCwxLS4wNy43NEE0LjgxLDQuODEsMCwwLDEsNTEuNSw0My42OFptMC03LjkzYTMuMSwzLjEsMCwwLDAtMy4xLDMuMSwzLjI1LDMuMjUsMCwwLDAsMCwuNDQsMy4xLDMuMSwwLDAsMCw2LjE0LDAsMi42NiwyLjY2LDAsMCwwLDAtLjQ1QTMuMTEsMy4xMSwwLDAsMCw1MS41LDM1Ljc1WiIvPjxwYXRoIGNsYXNzPSJjbHMtMiIgZD0iTTMzLjY0LDcwLjE1YTQuODMsNC44MywwLDAsMS0xLjM3LTkuNDYsNSw1LDAsMCwxLDEuMzctLjE5LDQuODIsNC44MiwwLDAsMSw0LjgyLDQuODIsNC44Nyw0Ljg3LDAsMCwxLTIuNzEsNC4zNUE0LjczLDQuNzMsMCwwLDEsMzMuNjQsNzAuMTVabTAtNy45M2EzLDMsMCwwLDAtLjg5LjEzLDMuMSwzLjEsMCwwLDAsLjg5LDYuMDhBMywzLDAsMCwwLDM1LDY4LjEyYTMuMTEsMy4xMSwwLDAsMC0xLjM1LTUuOVoiLz48cGF0aCBjbGFzcz0iY2xzLTIiIGQ9Ik0zMi4xOCw1Ni4zNWgtLjEyYS44Ny44NywwLDAsMS0uNzMtMUEyMC40NywyMC40NywwLDAsMSw0Miw0MC4zM2EuODYuODYsMCwxLDEsLjgsMS41MkExOC43NywxOC43NywwLDAsMCwzMyw1NS42MS44Ni44NiwwLDAsMSwzMi4xOCw1Ni4zNVoiLz48cGF0aCBjbGFzcz0iY2xzLTIiIGQ9Ik01MS41LDc4Ljc5YTIwLjE3LDIwLjE3LDAsMCwxLTEyLjI3LTQuMTEuODYuODYsMCwwLDEtLjE3LTEuMjEuODUuODUsMCwwLDEsMS4yLS4xNkExOC41MiwxOC41MiwwLDAsMCw1MS41LDc3LjA3LDE4LjIzLDE4LjIzLDAsMCwwLDU1LDc2LjczYS44Ny44NywwLDAsMSwuMzMsMS43QTIwLjg3LDIwLjg3LDAsMCwxLDUxLjUsNzguNzlaIi8+PHBhdGggY2xhc3M9ImNscy0yIiBkPSJNNzAsNjUuNDJhLjg0Ljg0LDAsMCwxLS4yNywwLC44Ni44NiwwLDAsMS0uNTQtMS4wOSwxOC43MSwxOC43MSwwLDAsMC04LjU1LTIyLjE3Ljg2Ljg2LDAsMSwxLC44NS0xLjUsMjAuNDIsMjAuNDIsMCwwLDEsOS4zMywyNC4yMUEuODcuODcsMCwwLDEsNzAsNjUuNDJaIi8+PC9nPjxnIGlkPSJIT1NUSU5HIj48dGV4dCBjbGFzcz0iY2xzLTMiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE3LjkzIC00Ljk4KSI+WE1MIDx0c3BhbiBjbGFzcz0iY2xzLTQiIHg9IjI0LjcxIiB5PSIwIj50PC90c3Bhbj48dHNwYW4geD0iMjguNjEiIHk9IjAiPm8gSlNPTjwvdHNwYW4+PC90ZXh0PjwvZz48L3N2Zz4=',\n category: 'transformation',\n version: '2.1.4',\n flowPhaseCompatibility: {\n HTTP_PROXY: ['REQUEST', 'RESPONSE'],\n HTTP_MESSAGE: ['SUBSCRIBE', 'PUBLISH'],\n },\n },\n {\n id: 'avro-json',\n name: 'Avro JSON Transformation',\n description: 'Policy used to transform Avro to JSON',\n icon: 'data:image/svg+xml;base64,PHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjUxMnB4IiBoZWlnaHQ9IjUxMnB4Ij48cGF0aCBkPSJNMTcwLjkxNjY3MTgsMzAzLjU3MTYyNDhoLTYuMzQzNDE0M2wzLjY1OTI4NjUtMTUuNDk2MzM3OUwxNzAuOTE2NjcxOCwzMDMuNTcxNjI0OHogTTIxOC44NDU1ODExLDIxMy41OTI4ODAybC0zMy45MTM1NTksMjMuNTE3MjExOWMtMzEuMTk2MDQ0OS0zMC44NDg4NjE3LTgxLjI2NzUzMjMtMy4xMDUzNDY3LTE0NS4yNzcwNjkxLTMxLjk1NDgwMzVDOTMuMzc1MjM2NSwyMTcuOTY2ODQyNywxNjUuMjA1MDE3MSwxOTAuNDQzNjQ5MywyMTguODQ1NTgxMSwyMTMuNTkyODgwMnogTTQxLjUwNzQxMiwyMTYuMjQ4NTA0NmMzMS4zNTk3NTI3LDExLjY5MzY5NTEsNjEuODQwMjc0OCwxNi4xMzY4NDA4LDk0LjIyNzMyNTQsMTQuNjM3MDg1YzMuNTMyOTU5LDEuNTc2MjAyNCw2LjMzODQyNDcsNS4wMjUxMTYsNy45NDYzMDQzLDguMzEwNzc1OEM4My4yODA4MDc1LDI0NS4xMzg1MTkzLDU2LjEwNzQ5ODIsMjI3LjAzOTMzNzIsNDEuNTA3NDEyLDIxNi4yNDg1MDQ2eiBNNTUuMDY1NzczLDIzNS4wMzQ3MTM3YzI4Ljc4NDI0ODQsMTEuMDQ3NTc2OSw1NC44ODU4MDMyLDE3LjU3MjQ3OTIsOTIuMDUzNjQyMywxMS4wNTU2OTQ2YzAsMCw1LjUwOTgxMTQsNC40MzA5OTk4LDUuNjYxNjk3NCw2LjczMzYyNzNDMTAyLjgyODg1NzQsMjYyLjEzMjMyNDIsODMuMzU2MDU2MiwyNTQuMDE2NjkzMSw1NS4wNjU3NzMsMjM1LjAzNDcxMzd6IE0xNTQuNTg0ODU0MSwyNjAuNDQyOTYyNmMtMjcuMDAxNTMzNSwxNC40NTA5Mjc3LTYyLjQ3NzgxMzcsMTAuNTAxMDA3MS03MC42MjIxMDA4LTAuMzQ2MjUyNEMxMTMuMjc0MzQ1NCwyNjUuODk4Mjg0OSwxMzIuNDMzMDEzOSwyNjQuODczMzUyMSwxNTQuNTg0ODU0MSwyNjAuNDQyOTYyNnogTTQ3Mi4zNDUwMzE3LDIwNS4xNTUyODg3Yy02NC4wMDk1MjE1LDI4Ljg0OTQ1NjgtMTE0LjA4MDk5MzcsMS4xMDU5NDE4LTE0NS4yNzcwNjkxLDMxLjk1NDgwMzVsLTMzLjkxMzU0MzctMjMuNTE3MjExOUMzNDYuNzk0OTgyOSwxOTAuNDQzNjQ5Myw0MTguNjI0NzU1OSwyMTcuOTY2ODQyNyw0NzIuMzQ1MDMxNywyMDUuMTU1Mjg4N3ogTTM2OC4zMTg5Njk3LDIzOS4xOTYzNjU0YzEuNjA3ODQ5MS0zLjI4NTY1OTgsNC40MTMzMzAxLTYuNzM0NTczNCw3Ljk0NjI4OTEtOC4zMTA3NzU4YzMyLjM4NzA1NDQsMS40OTk3NTU5LDYyLjg2NzU4NDItMi45NDMzODk5LDk0LjIyNzMyNTQtMTQuNjM3MDg1QzQ1NS44OTI0ODY2LDIyNy4wMzkzMzcyLDQyOC43MTkxNzcyLDI0NS4xMzg1MTkzLDM2OC4zMTg5Njk3LDIzOS4xOTYzNjU0eiBNMzU5LjIxODkwMjYsMjUyLjgyNDAzNTZjMC4xNTE4NTU1LTIuMzAyNjI3Niw1LjY2MTY4MjEtNi43MzM2MjczLDUuNjYxNjgyMS02LjczMzYyNzNjMzcuMTY3ODQ2Nyw2LjUxNjc4NDcsNjMuMjY5NDA5Mi0wLjAwODExNzcsOTIuMDUzNjQ5OS0xMS4wNTU2OTQ2QzQyOC42NDM5NTE0LDI1NC4wMTY2OTMxLDQwOS4xNzExNDI2LDI2Mi4xMzIzMjQyLDM1OS4yMTg5MDI2LDI1Mi44MjQwMzU2eiBNNDI4LjAzNzIzMTQsMjYwLjA5NjcxMDJjLTguMTQ0MjU2NiwxMC44NDcyNTk1LTQzLjYyMDU0NDQsMTQuNzk3MTgwMi03MC42MjIwNzAzLDAuMzQ2MjUyNEMzNzkuNTY2OTg2MSwyNjQuODczMzUyMSwzOTguNzI1NjQ3LDI2NS44OTgyODQ5LDQyOC4wMzcyMzE0LDI2MC4wOTY3MTAyeiBNMTQ3LjIwMDUzMSwzMTguNDk3MjgzOUg5OC41OTU4NjMzbDYwLjEwMzI5NDQtNDAuMjE5MDI0N0wxNDcuMjAwNTMxLDMxOC40OTcyODM5eiBNMTYwLjQxNzU1NjgsMzE4LjY2MDQwMDRsMS4xMjUwNDU4LTQuOTUzMzY5MWgxMS45OTE0MjQ2bDAuOTgxMjE2NCw0Ljk1MzM2OTFIMTYwLjQxNzU1Njh6IE0xODguMzEzODU4LDMxOC43NzAxMTExbC0xNC40NjAwMjItNTAuNTgyNzYzN2wxOS4xNjM4NjQxLTEzLjIzNTI5MDVsMTkuNDQ1MDUzMSw2My44MTgwNTQySDE4OC4zMTM4NTh6IE0yMDQuNjQ3ODI3MSwyNDcuMjI4NDg1MWwzMC40NDY1NDg1LTIwLjYyOTgzN2wtMTYuNDUyNjY3Miw2Ny43NjY3MDg0TDIwNC42NDc4MjcxLDI0Ny4yMjg0ODUxeiBNMjUzLjc1OTAxNzksMzE4LjQ0MTA3MDZoLTI4LjU1NDUxOTdsMjUuMTYzNDIxNi0xMDEuOTY5OTcwN2wzLjM5MTA5OC0xLjg2NDYwODhWMzE4LjQ0MTA3MDZ6IE0yNjUuOTcwNTUwNSwyMzEuMjY5MzYzNGMyNi4xNTI5NTQxLDI0Ljg1Nzk1NTksMjkuMDIxODgxMSwzNi4yNTI5NzU1LDAsMzcuNDExNTc1M1YyMzEuMjY5MzYzNHogTTI2Ni4xMzUwNzA4LDMxOC42NjA0MDA0bDAuMDQ1NzE1My0zMi44NTA0NjM5bDIyLjc2ODY0NjIsMzIuODUwNDYzOUgyNjYuMTM1MDcwOHogTTMwMy4zNTQ2MTQzLDMxOC42NjA0NjE0bC0yNS44ODU0OTgtMzguNTU0MTM4MmMyNC44ODgwOTItNS43ODE1ODU3LDI5LjAzMjE5Ni0yMi4yNjQ4NjIxLDguMDk4Mjk3MS00Ny40MjAxODEzYzE1LjQyODk4NTYsMTAuNzMwODA0NCwzMS4yNjAxMzE4LDIwLjYwMjM3MTIsNDYuNTA2MjI1NiwzMS41NzA4NDY2Yy0yMS40MjgyMjI3LDguMjUxNzctMjguMzY2MDg4OSwzOS40MDI0MzUzLTIuOTI0ODk2Miw1NC40MDM0NzI5SDMwMy4zNTQ2MTQzeiBNMzI3LjU4Mzg2MjMsMjk5LjgyNDY0NmMtOS42NDE4MTUyLTE4Ljc4MDI0MjksMTYuNTM3MjkyNS0zNy4yMzYyNjcxLDIyLjQ3ODAyNzMtMTAuMzk1MDgwNkMzNTIuMDAyNTk0LDMwNS44NzY5MjI2LDMzNS41MjY3NjM5LDMxNS4xODQxNzM2LDMyNy41ODM4NjIzLDI5OS44MjQ2NDZ6IE00MTMuMjAzNjQzOCwzMTguMzg2MjMwNWgtNjcuNjM4NzMyOWMxMy4xMjM4NDAzLTYuMDkzNTk3NCwxOS45MjA3NzY0LTIwLjc5NjE3MzEsMTYuMDMyMTY1NS0zNC43MzM0MjlMNDEzLjIwMzY0MzgsMzE4LjM4NjIzMDV6IE0yMjguODQyMzYxNSwyMDcuNDAzODU0NGMtODIuMjkwMTE1NC0zOC4wNzIwNjczLTE3MC45NzQ3MTYyLDI0LjgzMTgzMjktMjI4LjgxMzU5ODYtMzEuMjg0NzljLTEuMDczMDQ5NywyMC41NTQ5NjIyLDI4LjE1MzU2NDUsMzkuOTczMjIwOCw0MC44NjkyNDc0LDU4LjI4NTQxNTZjNy4yNTAyNDAzLDEzLjEwNTU0NSwyMS43OTM3MzkzLDI1LjE5NTA5ODksMzQuNjYwMzI3OSwzMS4xMzIxMTA2YzguMTc5NjQ5NCwxNC4zNjc5NTA0LDE3LjczMDE4NjUsMTMuMDAwNzAxOSw0NS44NDgxMTQsMTMuNjc0MDExMmwtODMuMTc3MzY4Miw1Ni42NzAzMTg2aDQzNS44ODU5MjUzbC04My41MjE0ODQ0LTU2LjY3MDMxODZjMjguMTE3OTUwNC0wLjY3MzMwOTMsMzcuNjY4NDg3NSwwLjY5MzkzOTIsNDUuODQ4MTE0LTEzLjY3NDAxMTJjMTIuODY2NjA3Ny01LjkzNzAxMTcsMjcuNDEwMDk1Mi0xOC4wMjY1NjU2LDM0LjY2MDMzOTQtMzEuMTMyMTEwNmMxMi43MTU2Njc3LTE4LjMxMjE5NDgsNDEuOTQyMzIxOC0zNy43MzA0NTM1LDQwLjg2OTIzMjItNTguMjg1NDE1NmMtNTcuODM4ODY3Miw1Ni4xMTY2MjI5LTE0Ni40OTc2NTAxLTYuNzg3Mjc3Mi0yMjguNzg3NzgwOCwzMS4yODQ3OWwtMjcuMTc1OTMzOC0xOC4wNzk2NTA5TDIyOC44NDIzNjE1LDIwNy40MDM4NTQ0eiIvPjwvc3ZnPg==',\n category: 'transformation',\n version: '1.2.0-alpha.2',\n flowPhaseCompatibility: {\n HTTP_PROXY: ['REQUEST', 'RESPONSE'],\n HTTP_MESSAGE: ['SUBSCRIBE', 'PUBLISH'],\n },\n },\n {\n id: 'jwt',\n name: 'JSON Web Tokens',\n description: 'Description of the JWT Gravitee Policy',\n icon: 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxMDAuNzEgMTEyLjgyIj48ZGVmcz48c3R5bGU+LmNscy0xe2ZpbGw6Izg2YzNkMDt9LmNscy0ye2ZpbGw6I2ZmZjt9LmNscy0ze2ZvbnQtc2l6ZToxMnB4O2ZpbGw6IzFkMWQxYjtmb250LWZhbWlseTpNeXJpYWRQcm8tUmVndWxhciwgTXlyaWFkIFBybzt9LmNscy00e2xldHRlci1zcGFjaW5nOjAuMDNlbTt9PC9zdHlsZT48L2RlZnM+PGcgaWQ9IkFQSSI+PHBhdGggY2xhc3M9ImNscy0xIiBkPSJNNTAuMzUsMTMuMzdhNDMsNDMsMCwxLDAsNDMuMDUsNDNBNDMsNDMsMCwwLDAsNTAuMzUsMTMuMzdaIi8+PHBhdGggY2xhc3M9ImNscy0yIiBkPSJNNDEuNzksNjEuNjdhMTMuODIsMTMuODIsMCwxLDEsMTIuNTctOCwuODcuODcsMCwwLDEtMS4xNS40Mi44Ni44NiwwLDAsMS0uNDItMS4xNCwxMi4xMiwxMi4xMiwwLDEsMC0yLjQ0LDMuNDkuODYuODYsMCwxLDEsMS4yMiwxLjIyQTEzLjgsMTMuOCwwLDAsMSw0MS43OSw2MS42N1oiLz48cGF0aCBjbGFzcz0iY2xzLTIiIGQ9Ik02OC4zMSw3OC44YTQuNCw0LjQsMCwwLDEtMy4xNC0xLjNMNTUuNiw2Ny45M2EuODYuODYsMCwxLDEsMS4yMi0xLjIybDkuNTcsOS41N2EyLjc3LDIuNzcsMCwwLDAsMy44NCwwLDIuNzIsMi43MiwwLDAsMCwwLTMuODNsLTkuNTctOS41OGEyLjc5LDIuNzksMCwwLDAtMy44NCwwLC44OC44OCwwLDAsMS0xLjIyLDBsLTUuMjUtNS4yNGEuODguODgsMCwwLDEsMC0xLjIyLjg2Ljg2LDAsMCwxLDEuMjIsMGw0LjcsNC43YTQuNDMsNC40MywwLDAsMSw1LjYuNTVsOS41OCw5LjU3YTQuNDQsNC40NCwwLDAsMS0zLjE0LDcuNTdaIi8+PHBhdGggY2xhc3M9ImNscy0yIiBkPSJNNDYuMzYsNTMuMjdhLjg1Ljg1LDAsMCwxLS42MS0uMjVsLTkuMTQtOS4xM2EuODguODgsMCwwLDEsMC0xLjIyLjg2Ljg2LDAsMCwxLDEuMjIsMEw0Nyw1MS44QS44OC44OCwwLDAsMSw0Nyw1MywuODUuODUsMCwwLDEsNDYuMzYsNTMuMjdaIi8+PHBhdGggY2xhc3M9ImNscy0yIiBkPSJNMzcuMjIsNTMuMjdhLjg1Ljg1LDAsMCwxLS42MS0uMjUuODguODgsMCwwLDEsMC0xLjIybDkuMTQtOS4xM2EuODYuODYsMCwwLDEsMS4yMiwwLC44OC44OCwwLDAsMSwwLDEuMjJMMzcuODMsNTNBLjg1Ljg1LDAsMCwxLDM3LjIyLDUzLjI3WiIvPjwvZz48ZyBpZD0iSE9TVElORyI+PHRleHQgY2xhc3M9ImNscy0zIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNy45MyAtNC45OCkiPko8dHNwYW4gY2xhc3M9ImNscy00IiB4PSI0LjQ0IiB5PSIwIj5XPC90c3Bhbj48dHNwYW4geD0iMTQuOTkiIHk9IjAiPlQ8L3RzcGFuPjwvdGV4dD48L2c+PC9zdmc+',\n category: 'security',\n version: '3.2.0',\n flowPhaseCompatibility: {\n HTTP_PROXY: ['REQUEST'],\n HTTP_MESSAGE: ['REQUEST'],\n },\n },\n {\n id: 'key-less',\n name: 'Keyless',\n description: 'Description of the Keyless Security Gravitee Policy',\n icon: 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxMDAuNzEgMTEyLjgyIj48ZGVmcz48c3R5bGU+LmNscy0xe2ZpbGw6Izg2YzNkMDt9LmNscy0ye2ZpbGw6I2ZmZjt9LmNscy0ze2ZpbGw6bm9uZTtzdHJva2U6I2ZmZjtzdHJva2UtbWl0ZXJsaW1pdDoxMDtzdHJva2Utd2lkdGg6MnB4O308L3N0eWxlPjwvZGVmcz48ZyBpZD0iQVBJIj48cGF0aCBjbGFzcz0iY2xzLTEiIGQ9Ik01MC4zNSwxNC4yNGE0Myw0MywwLDEsMCw0My4wNSw0M0E0Myw0MywwLDAsMCw1MC4zNSwxNC4yNFoiLz48L2c+PGcgaWQ9IkhPU1RJTkciPjxwYXRoIGNsYXNzPSJjbHMtMiIgZD0iTTU3LjU2LDg4LjYzSDQzLjE1YTIuOSwyLjksMCwwLDEtMi45LTIuOVY3Ni42MmEyLjg5LDIuODksMCwwLDEsMi45LTIuODlINTcuNTZhMi44OSwyLjg5LDAsMCwxLDIuOSwyLjg5djkuMTFBMi45LDIuOSwwLDAsMSw1Ny41Niw4OC42M1pNNDMuMTUsNzYuMTRhLjQ4LjQ4LDAsMCwwLS40OS40OHY5LjExYS40OS40OSwwLDAsMCwuNDkuNDlINTcuNTZhLjQ5LjQ5LDAsMCwwLC40OS0uNDlWNzYuNjJhLjQ4LjQ4LDAsMCwwLS40OS0uNDhaIi8+PHBhdGggY2xhc3M9ImNscy0yIiBkPSJNNTAuMzUsNjMuNjJBNy41OCw3LjU4LDAsMCwwLDQyLjg5LDcwaDIuNDdhNS4xNSw1LjE1LDAsMCwxLDEwLjE1LDEuMjN2My43NGExLjIxLDEuMjEsMCwxLDAsMi40MSwwVjcxLjE5QTcuNTgsNy41OCwwLDAsMCw1MC4zNSw2My42MloiLz48cGF0aCBjbGFzcz0iY2xzLTMiIGQ9Ik0yNi4xNiw0Ny40M2EyNS4yMiwyNS4yMiwwLDAsMSw0OC4zOS0uMzEiLz48cGF0aCBjbGFzcz0iY2xzLTMiIGQ9Ik0zMi4xMiw1Mi44YTE5LDE5LDAsMCwxLDM2LjQ3LS4yMyIvPjxwYXRoIGNsYXNzPSJjbHMtMyIgZD0iTTM5LjM0LDU2LjY1YTExLDExLDAsMCwxLDIxLjE3LS4xNCIvPjwvZz48L3N2Zz4=',\n category: 'security',\n version: '2.2.0',\n flowPhaseCompatibility: {\n HTTP_PROXY: ['REQUEST'],\n HTTP_MESSAGE: ['REQUEST'],\n },\n },\n {\n id: 'api-key',\n name: 'Api Key',\n description: 'Description of the ApiKey Gravitee Policy',\n icon: 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxMDAuNzEgMTEyLjgyIj48ZGVmcz48c3R5bGU+LmNscy0xe2ZpbGw6Izg2YzNkMDt9LmNscy0ye2ZpbGw6I2ZmZjt9LmNscy0ze2ZvbnQtc2l6ZToxMnB4O2ZpbGw6IzFkMWQxYjtmb250LWZhbWlseTpNeXJpYWRQcm8tUmVndWxhciwgTXlyaWFkIFBybzt9LmNscy00e2xldHRlci1zcGFjaW5nOjBlbTt9PC9zdHlsZT48L2RlZnM+PGcgaWQ9IkFQSSI+PHBhdGggY2xhc3M9ImNscy0xIiBkPSJNNTAuMzUsMTMuMzdhNDMsNDMsMCwxLDAsNDMuMDUsNDNBNDMsNDMsMCwwLDAsNTAuMzUsMTMuMzdaIi8+PHBhdGggY2xhc3M9ImNscy0yIiBkPSJNNjcuMzMsNzguNjVIMzkuNzhBMi42MSwyLjYxLDAsMCwxLDM3LjE3LDc2VjcxLjg4YS44NC44NCwwLDAsMSwuMzYtLjcsNy4wNiw3LjA2LDAsMCwwLDItMi4yMS44NS44NSwwLDAsMSwuNzUtLjQzSDQyLjZMNDUsNjYuNzlhLjg2Ljg2LDAsMCwxLDEtLjA1bDIuNzIsMS42NCwyLjUzLTEuNjJhLjg2Ljg2LDAsMCwxLDEsMGwuNDkuMzhWNjIuNDZINDAuMjhhLjg2Ljg2LDAsMCwxLS43NS0uNDQsNi43Niw2Ljc2LDAsMCwwLTItMi4xOS44OC44OCwwLDAsMS0uMzYtLjcxVjU1YTIuNjIsMi42MiwwLDAsMSwyLjYxLTIuNjJINjcuMzNBMi42MywyLjYzLDAsMCwxLDcwLDU1Vjc2QTIuNjIsMi42MiwwLDAsMSw2Ny4zMyw3OC42NVpNMzguOSw3Mi4zMlY3NmEuODkuODksMCwwLDAsLjg4Ljg4SDY3LjMzYS44Ny44NywwLDAsMCwuODgtLjg4VjU1YS44OC44OCwwLDAsMC0uODgtLjg4SDM5Ljc4YS44OS44OSwwLDAsMC0uODguODh2My43MmE4LjYyLDguNjIsMCwwLDEsMS44NywySDUzLjU1YS44Ny44NywwLDAsMSwuODcuODdWNjlhLjg3Ljg3LDAsMCwxLS40OS43OC44Ni44NiwwLDAsMS0uOTEtLjFsLTEuNDEtMS4xMS0yLjQ2LDEuNTlhLjg3Ljg3LDAsMCwxLS45MiwwbC0yLjY5LTEuNjJMNDMuNCw3MC4xMWEuOTQuOTQsMCwwLDEtLjUyLjE2SDQwLjc3QTguNjksOC42OSwwLDAsMSwzOC45LDcyLjMyWiIvPjxwYXRoIGNsYXNzPSJjbHMtMiIgZD0iTTY1Ljg0LDU0LjA4SDYxLjQ3YS44Ny44NywwLDAsMS0uODctLjg3di01LjlhNyw3LDAsMCwwLTE0LjA4LDB2NS45YS44Ny44NywwLDAsMS0uODcuODdINDEuMjhhLjg3Ljg3LDAsMCwxLS44Ny0uODd2LTUuOWExMy4xNSwxMy4xNSwwLDEsMSwyNi4zLDB2NS45QS44Ny44NywwLDAsMSw2NS44NCw1NC4wOFptLTMuNS0xLjc0SDY1di01YTExLjQxLDExLjQxLDAsMSwwLTIyLjgyLDB2NWgyLjYzdi01YTguNzgsOC43OCwwLDAsMSwxNy41NiwwWiIvPjxwYXRoIGNsYXNzPSJjbHMtMiIgZD0iTTMxLjcxLDY5YTMuNTEsMy41MSwwLDEsMSwzLjUxLTMuNTFBMy41MSwzLjUxLDAsMCwxLDMxLjcxLDY5Wm0wLTUuMjlhMS43OCwxLjc4LDAsMSwwLDEuNzcsMS43OEExLjc4LDEuNzgsMCwwLDAsMzEuNzEsNjMuNzJaIi8+PHBhdGggY2xhc3M9ImNscy0yIiBkPSJNMzMuNDgsNzQuMjJhOC43Miw4LjcyLDAsMSwxLDUuMDYtMTUuODEsOC41OSw4LjU5LDAsMCwxLDIuMjMsMi4zMUg1My41NWEuODcuODcsMCwwLDEsLjg3Ljg3VjY5YS44Ny44NywwLDAsMS0uNDkuNzguODYuODYsMCwwLDEtLjkxLS4xbC0xLjQxLTEuMTEtMi40NiwxLjU5YS44Ny44NywwLDAsMS0uOTIsMGwtMi42OS0xLjYyTDQzLjQsNzAuMTFhLjk0Ljk0LDAsMCwxLS41Mi4xNkg0MC43N2E4Ljc1LDguNzUsMCwwLDEtNy4yOSw0Wm0wLTE1LjY5YTcsNywwLDEsMCw0LjA1LDEyLjY1LDcuMDYsNy4wNiwwLDAsMCwyLTIuMjEuODUuODUsMCwwLDEsLjc1LS40M0g0Mi42TDQ1LDY2Ljc5YS44Ni44NiwwLDAsMSwxLS4wNWwyLjcyLDEuNjQsMi41My0xLjYyYS44Ni44NiwwLDAsMSwxLDBsLjQ5LjM4VjYyLjQ2SDQwLjI4YS44Ni44NiwwLDAsMS0uNzUtLjQ0LDYuNzYsNi43NiwwLDAsMC0yLTIuMTlBNi45Myw2LjkzLDAsMCwwLDMzLjQ4LDU4LjUzWk0zMS43MSw2OWEzLjUxLDMuNTEsMCwxLDEsMy41MS0zLjUxQTMuNTEsMy41MSwwLDAsMSwzMS43MSw2OVptMC01LjI5YTEuNzgsMS43OCwwLDEsMCwxLjc3LDEuNzhBMS43OCwxLjc4LDAsMCwwLDMxLjcxLDYzLjcyWiIvPjxwYXRoIGNsYXNzPSJjbHMtMiIgZD0iTTMxLjcxLDY5YTMuNTEsMy41MSwwLDEsMSwzLjUxLTMuNTFBMy41MSwzLjUxLDAsMCwxLDMxLjcxLDY5Wm0wLTUuMjlhMS43OCwxLjc4LDAsMSwwLDEuNzcsMS43OEExLjc4LDEuNzgsMCwwLDAsMzEuNzEsNjMuNzJaIi8+PHBhdGggY2xhc3M9ImNscy0yIiBkPSJNNTMuNTYsNzMuNjlhLjg3Ljg3LDAsMCwxLS44Ny0uODdWNjlhLjg3Ljg3LDAsMCwxLDEuNzQsMHYzLjg1QS44Ny44NywwLDAsMSw1My41Niw3My42OVoiLz48cGF0aCBjbGFzcz0iY2xzLTIiIGQ9Ik01My41Niw2Mi4zN2EuODcuODcsMCwwLDEtLjg3LS44N1Y1Ny42NWEuODcuODcsMCwwLDEsMS43NCwwVjYxLjVBLjg3Ljg3LDAsMCwxLDUzLjU2LDYyLjM3WiIvPjwvZz48ZyBpZD0iSE9TVElORyI+PHRleHQgY2xhc3M9ImNscy0zIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNy45MyAtNC45OCkiPjx0c3BhbiBjbGFzcz0iY2xzLTQiPkE8L3RzcGFuPjx0c3BhbiB4PSI3LjMxIiB5PSIwIj5waSBLZXk8L3RzcGFuPjwvdGV4dD48L2c+PC9zdmc+',\n category: 'security',\n version: '3.2.1',\n flowPhaseCompatibility: {\n HTTP_PROXY: ['REQUEST'],\n HTTP_MESSAGE: ['REQUEST'],\n },\n },\n {\n id: 'oauth2',\n name: 'OAuth2',\n description: 'Description of the OAuth2 Gravitee Policy',\n icon: 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxMDAuNzEgMTEyLjgyIj48ZGVmcz48c3R5bGU+LmNscy0xe2ZpbGw6Izg2YzNkMDt9LmNscy0ye2ZpbGw6I2ZmZjt9LmNscy0ze2ZvbnQtc2l6ZToxMnB4O2ZpbGw6IzFkMWQxYjtmb250LWZhbWlseTpNeXJpYWRQcm8tUmVndWxhciwgTXlyaWFkIFBybzt9LmNscy00e2xldHRlci1zcGFjaW5nOi0wLjAxZW07fS5jbHMtNXtsZXR0ZXItc3BhY2luZzowLjAxZW07fS5jbHMtNntsZXR0ZXItc3BhY2luZzowZW07fS5jbHMtN3tsZXR0ZXItc3BhY2luZzotMC4wMWVtO30uY2xzLTh7bGV0dGVyLXNwYWNpbmc6MC4wMWVtO30uY2xzLTl7bGV0dGVyLXNwYWNpbmc6LTAuMDFlbTt9LmNscy0xMHtsZXR0ZXItc3BhY2luZzotMC4wMWVtO30uY2xzLTExe2xldHRlci1zcGFjaW5nOi0wLjAxZW07fTwvc3R5bGU+PC9kZWZzPjxnIGlkPSJBUEkiPjxwYXRoIGNsYXNzPSJjbHMtMSIgZD0iTTUwLjM1LDEzLjM3YTQzLDQzLDAsMSwwLDQzLjA1LDQzQTQzLDQzLDAsMCwwLDUwLjM1LDEzLjM3WiIvPjxwYXRoIGNsYXNzPSJjbHMtMiIgZD0iTTUwLjE5LDMzLjc1YzUuOCwwLDYuNTUuNTMsOC4zNiw2UTYzLjg5LDU1Ljg4LDY5LjIxLDcyYy45MywyLjgxLjA3LDUuMjUtMi4wOCw2LjM4LTIuODgsMS41MS01Ljg3LjMxLTcuMDgtMi45NC0uNzktMi4xMi0xLjMxLTQuMzUtMi4yMy02LjQxYTMuMjksMy4yOSwwLDAsMC0yLjI0LTEuNzcsOTIuMyw5Mi4zLDAsMCwwLTEwLjUyLDAsMy4yNywzLjI3LDAsMCwwLTIuMTksMS44Yy0uODUsMi0xLjMyLDQuMTMtMiw2LjE4LTEuMDYsMy0zLjQ3LDQuMzItNi4xNywzLjQ5LTIuODctLjg4LTQuMTktMy4zNy0zLjIyLTYuNXE1LTE2LjExLDEwLjEyLTMyLjE3QzQzLjQsMzQuMjcsNDQuMTIsMzMuNzUsNTAuMTksMzMuNzVaIi8+PC9nPjxnIGlkPSJIT1NUSU5HIj48dGV4dCBjbGFzcz0iY2xzLTMiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDkyLjQ1IC00Ljk4KSI+T3BlbklEIDx0c3BhbiBjbGFzcz0iY2xzLTQiIHg9IjQxLjE3IiB5PSIwIj5DPC90c3Bhbj48dHNwYW4geD0iNDgiIHk9IjAiPm9ubmU8L3RzcGFuPjx0c3BhbiBjbGFzcz0iY2xzLTUiIHg9IjczLjkyIiB5PSIwIj5jPC90c3Bhbj48dHNwYW4gY2xhc3M9ImNscy02IiB4PSI3OS40NSIgeT0iMCI+dCAtIDwvdHNwYW4+PHRzcGFuIGNsYXNzPSJjbHMtNyIgeD0iOTIuMTkiIHk9IjAiPlU8L3RzcGFuPjx0c3BhbiB4PSI5OS44OSIgeT0iMCI+c2VyPC90c3Bhbj48dHNwYW4gY2xhc3M9ImNscy04IiB4PSIxMTQuNTciIHk9IjAiPkk8L3RzcGFuPjx0c3BhbiB4PSIxMTcuNTYiIHk9IjAiPm48L3RzcGFuPjx0c3BhbiBjbGFzcz0iY2xzLTkiIHg9IjEyNC4yMiIgeT0iMCI+ZjwvdHNwYW4+PHRzcGFuIHg9IjEyNy41NyIgeT0iMCI+bzwvdHNwYW4+PC90ZXh0Pjx0ZXh0IGNsYXNzPSJjbHMtMyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTcuOTMgLTQuOTgpIj48dHNwYW4gY2xhc3M9ImNscy0xMCI+TzwvdHNwYW4+PHRzcGFuIGNsYXNzPSJjbHMtMTEiIHg9IjguMSIgeT0iMCI+QTwvdHNwYW4+PHRzcGFuIHg9IjE1LjMiIHk9IjAiPnV0aDI8L3RzcGFuPjwvdGV4dD48L2c+PC9zdmc+',\n category: 'security',\n version: '2.2.0',\n flowPhaseCompatibility: {\n HTTP_PROXY: ['REQUEST'],\n HTTP_MESSAGE: ['REQUEST'],\n },\n },\n {\n id: 'json-to-json',\n name: 'JSON to JSON Transformation',\n description: 'Description of the JSON to JSON Transformation Gravitee Policy',\n icon: 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxMDAuNzEgMTEyLjgyIj48ZGVmcz48c3R5bGU+LmNscy0xe2ZpbGw6Izg2YzNkMDt9LmNscy0ye2ZpbGw6I2ZmZjt9LmNscy0ze2ZvbnQtc2l6ZToxMnB4O2ZpbGw6IzFkMWQxYjtmb250LWZhbWlseTpNeXJpYWRQcm8tUmVndWxhciwgTXlyaWFkIFBybzt9LmNscy00e2xldHRlci1zcGFjaW5nOi0wLjAxZW07fTwvc3R5bGU+PC9kZWZzPjxnIGlkPSJBUEkiPjxwYXRoIGNsYXNzPSJjbHMtMSIgZD0iTTUwLjM1LDEzLjM3YTQzLDQzLDAsMSwwLDQzLjA1LDQzQTQzLDQzLDAsMCwwLDUwLjM1LDEzLjM3WiIvPjxwYXRoIGNsYXNzPSJjbHMtMiIgZD0iTTYzLjgsNzcuMDlhNC44Myw0LjgzLDAsMSwxLDMuNjktNy45Miw0Ljc0LDQuNzQsMCwwLDEsMS4xMywzLjA5QTQuODMsNC44MywwLDAsMSw2My44LDc3LjA5Wm0wLTcuOTNhMy4xMSwzLjExLDAsMSwwLDIuMzgsMS4xMkEzLjEsMy4xLDAsMCwwLDYzLjgsNjkuMTZaIi8+PHBhdGggY2xhc3M9ImNscy0yIiBkPSJNNTEuNSw0My42OGE0Ljg1LDQuODUsMCwwLDEtNC43Ny00LjE0LDUsNSwwLDAsMSwwLS42OSw0LjgzLDQuODMsMCwwLDEsOS42NSwwLDMuNDUsMy40NSwwLDAsMS0uMDcuNzRBNC44MSw0LjgxLDAsMCwxLDUxLjUsNDMuNjhabTAtNy45M2EzLjEsMy4xLDAsMCwwLTMuMSwzLjEsMy4yNSwzLjI1LDAsMCwwLDAsLjQ0LDMuMSwzLjEsMCwwLDAsNi4xNCwwLDIuNjYsMi42NiwwLDAsMCwwLS40NUEzLjExLDMuMTEsMCwwLDAsNTEuNSwzNS43NVoiLz48cGF0aCBjbGFzcz0iY2xzLTIiIGQ9Ik0zMy42NCw3MC4xNWE0LjgzLDQuODMsMCwwLDEtMS4zNy05LjQ2LDUsNSwwLDAsMSwxLjM3LS4xOSw0LjgyLDQuODIsMCwwLDEsNC44Miw0LjgyLDQuODcsNC44NywwLDAsMS0yLjcxLDQuMzVBNC43Myw0LjczLDAsMCwxLDMzLjY0LDcwLjE1Wm0wLTcuOTNhMywzLDAsMCwwLS44OS4xMywzLjEsMy4xLDAsMCwwLC44OSw2LjA4QTMsMywwLDAsMCwzNSw2OC4xMmEzLjExLDMuMTEsMCwwLDAtMS4zNS01LjlaIi8+PHBhdGggY2xhc3M9ImNscy0yIiBkPSJNMzIuMTgsNTYuMzVoLS4xMmEuODcuODcsMCwwLDEtLjczLTFBMjAuNDcsMjAuNDcsMCwwLDEsNDIsNDAuMzNhLjg2Ljg2LDAsMSwxLC44LDEuNTJBMTguNzcsMTguNzcsMCwwLDAsMzMsNTUuNjEuODYuODYsMCwwLDEsMzIuMTgsNTYuMzVaIi8+PHBhdGggY2xhc3M9ImNscy0yIiBkPSJNNTEuNSw3OC43OWEyMC4xNywyMC4xNywwLDAsMS0xMi4yNy00LjExLjg2Ljg2LDAsMCwxLS4xNy0xLjIxLjg1Ljg1LDAsMCwxLDEuMi0uMTZBMTguNTIsMTguNTIsMCwwLDAsNTEuNSw3Ny4wNywxOC4yMywxOC4yMywwLDAsMCw1NSw3Ni43M2EuODcuODcsMCwwLDEsLjMzLDEuN0EyMC44NywyMC44NywwLDAsMSw1MS41LDc4Ljc5WiIvPjxwYXRoIGNsYXNzPSJjbHMtMiIgZD0iTTcwLDY1LjQyYS44NC44NCwwLDAsMS0uMjcsMCwuODYuODYsMCwwLDEtLjU0LTEuMDksMTguNzEsMTguNzEsMCwwLDAtOC41NS0yMi4xNy44Ni44NiwwLDEsMSwuODUtMS41LDIwLjQyLDIwLjQyLDAsMCwxLDkuMzMsMjQuMjFBLjg3Ljg3LDAsMCwxLDcwLDY1LjQyWiIvPjwvZz48ZyBpZD0iSE9TVElORyI+PHRleHQgY2xhc3M9ImNscy0zIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNy45MyAtNC45OCkiPkpTT04gPHRzcGFuIGNsYXNzPSJjbHMtNCIgeD0iMjkuMDYiIHk9IjAiPnQ8L3RzcGFuPjx0c3BhbiB4PSIzMi45NiIgeT0iMCI+byBKU09OPC90c3Bhbj48L3RleHQ+PC9nPjwvc3ZnPg==',\n category: 'transformation',\n version: '2.1.0',\n flowPhaseCompatibility: {\n HTTP_PROXY: ['REQUEST', 'RESPONSE'],\n HTTP_MESSAGE: ['SUBSCRIBE', 'PUBLISH'],\n },\n },\n {\n id: 'transform-headers',\n name: 'Transform Headers',\n description: 'Description of the Transform Headers Gravitee Policy',\n icon: 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxMDAuNzEgMTEyLjgyIj48ZGVmcz48c3R5bGU+LmNscy0xe2ZpbGw6Izg2YzNkMDt9LmNscy0ye2ZpbGw6I2ZmZjt9LmNscy0ze2ZvbnQtc2l6ZToxMnB4O2ZpbGw6IzFkMWQxYjtmb250LWZhbWlseTpNeXJpYWRQcm8tUmVndWxhciwgTXlyaWFkIFBybzt9LmNscy00e2xldHRlci1zcGFjaW5nOi0wLjAxZW07fTwvc3R5bGU+PC9kZWZzPjxnIGlkPSJBUEkiPjxwYXRoIGNsYXNzPSJjbHMtMSIgZD0iTTUwLjM1LDEzLjM3YTQzLDQzLDAsMSwwLDQzLjA1LDQzQTQzLDQzLDAsMCwwLDUwLjM1LDEzLjM3WiIvPjxwYXRoIGNsYXNzPSJjbHMtMiIgZD0iTTYzLjgsNzcuMDlhNC44Myw0LjgzLDAsMSwxLDMuNjktNy45Miw0Ljc0LDQuNzQsMCwwLDEsMS4xMywzLjA5QTQuODMsNC44MywwLDAsMSw2My44LDc3LjA5Wm0wLTcuOTNhMy4xMSwzLjExLDAsMSwwLDIuMzgsMS4xMkEzLjEsMy4xLDAsMCwwLDYzLjgsNjkuMTZaIi8+PHBhdGggY2xhc3M9ImNscy0yIiBkPSJNNTEuNSw0My42OGE0Ljg1LDQuODUsMCwwLDEtNC43Ny00LjE0LDUsNSwwLDAsMSwwLS42OSw0LjgzLDQuODMsMCwwLDEsOS42NSwwLDMuNDUsMy40NSwwLDAsMS0uMDcuNzRBNC44MSw0LjgxLDAsMCwxLDUxLjUsNDMuNjhabTAtNy45M2EzLjEsMy4xLDAsMCwwLTMuMSwzLjEsMy4yNSwzLjI1LDAsMCwwLDAsLjQ0LDMuMSwzLjEsMCwwLDAsNi4xNCwwLDIuNjYsMi42NiwwLDAsMCwwLS40NUEzLjExLDMuMTEsMCwwLDAsNTEuNSwzNS43NVoiLz48cGF0aCBjbGFzcz0iY2xzLTIiIGQ9Ik0zMy42NCw3MC4xNWE0LjgzLDQuODMsMCwwLDEtMS4zNy05LjQ2LDUsNSwwLDAsMSwxLjM3LS4xOSw0LjgyLDQuODIsMCwwLDEsNC44Miw0LjgyLDQuODcsNC44NywwLDAsMS0yLjcxLDQuMzVBNC43Myw0LjczLDAsMCwxLDMzLjY0LDcwLjE1Wm0wLTcuOTNhMywzLDAsMCwwLS44OS4xMywzLjEsMy4xLDAsMCwwLC44OSw2LjA4QTMsMywwLDAsMCwzNSw2OC4xMmEzLjExLDMuMTEsMCwwLDAtMS4zNS01LjlaIi8+PHBhdGggY2xhc3M9ImNscy0yIiBkPSJNMzIuMTgsNTYuMzVoLS4xMmEuODcuODcsMCwwLDEtLjczLTFBMjAuNDcsMjAuNDcsMCwwLDEsNDIsNDAuMzNhLjg2Ljg2LDAsMSwxLC44LDEuNTJBMTguNzcsMTguNzcsMCwwLDAsMzMsNTUuNjEuODYuODYsMCwwLDEsMzIuMTgsNTYuMzVaIi8+PHBhdGggY2xhc3M9ImNscy0yIiBkPSJNNTEuNSw3OC43OWEyMC4xNywyMC4xNywwLDAsMS0xMi4yNy00LjExLjg2Ljg2LDAsMCwxLS4xNy0xLjIxLjg1Ljg1LDAsMCwxLDEuMi0uMTZBMTguNTIsMTguNTIsMCwwLDAsNTEuNSw3Ny4wNywxOC4yMywxOC4yMywwLDAsMCw1NSw3Ni43M2EuODcuODcsMCwwLDEsLjMzLDEuN0EyMC44NywyMC44NywwLDAsMSw1MS41LDc4Ljc5WiIvPjxwYXRoIGNsYXNzPSJjbHMtMiIgZD0iTTcwLDY1LjQyYS44NC44NCwwLDAsMS0uMjcsMCwuODYuODYsMCwwLDEtLjU0LTEuMDksMTguNzEsMTguNzEsMCwwLDAtOC41NS0yMi4xNy44Ni44NiwwLDEsMSwuODUtMS41LDIwLjQyLDIwLjQyLDAsMCwxLDkuMzMsMjQuMjFBLjg3Ljg3LDAsMCwxLDcwLDY1LjQyWiIvPjwvZz48ZyBpZD0iSE9TVElORyI+PHRleHQgY2xhc3M9ImNscy0zIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNy45MyAtNC45OCkiPkpTT04gPHRzcGFuIGNsYXNzPSJjbHMtNCIgeD0iMjkuMDYiIHk9IjAiPnQ8L3RzcGFuPjx0c3BhbiB4PSIzMi45NiIgeT0iMCI+byBKU09OPC90c3Bhbj48L3RleHQ+PC9nPjwvc3ZnPg==',\n category: 'transformation',\n version: '2.1.0-alpha.2',\n deployed: true,\n flowPhaseCompatibility: {\n HTTP_PROXY: ['REQUEST', 'RESPONSE'],\n HTTP_MESSAGE: ['REQUEST', 'RESPONSE', 'SUBSCRIBE', 'PUBLISH'],\n },\n },\n];\n\nexport function fakeTestPolicy(modifier?: Partial<Policy> | ((base: Policy) => Policy)): Policy {\n const base: Policy = {\n id: 'test-policy',\n name: 'Policy to test UI',\n icon: 'gio:gift',\n flowPhaseCompatibility: {\n HTTP_PROXY: ['REQUEST', 'RESPONSE'],\n MCP_PROXY: ['REQUEST', 'RESPONSE'],\n LLM_PROXY: ['REQUEST', 'RESPONSE'],\n HTTP_MESSAGE: ['REQUEST', 'RESPONSE', 'SUBSCRIBE', 'PUBLISH'],\n NATIVE_KAFKA: ['CONNECT', 'INTERACT', 'PUBLISH', 'SUBSCRIBE'],\n },\n };\n\n if (isFunction(modifier)) {\n return modifier(base);\n }\n\n return {\n ...base,\n ...modifier,\n flowPhaseCompatibility: {\n ...base.flowPhaseCompatibility,\n ...modifier?.flowPhaseCompatibility,\n },\n };\n}\n\nexport function fakeAllPolicies(): (PolicyInput | Policy)[] {\n /**\n * @Deprecated to keep as long as we support APIM < 4.6\n */\n const TEST_POLICY_APIM_4_5: PolicyInput = {\n id: 'test-policy-4.5',\n name: 'Policy to test APIM < 4.6',\n icon: undefined,\n proxy: ['REQUEST', 'RESPONSE'],\n message: ['REQUEST', 'RESPONSE', 'MESSAGE_REQUEST', 'MESSAGE_RESPONSE'],\n };\n\n return [\n fakeTestPolicy(),\n fakeTestPolicy({\n id: 'test-policy-empty',\n name: 'Test policy - Witout icon, configuration and documentation',\n icon: undefined,\n }),\n fakeTestPolicy({\n name: 'Test policy - With very long name to test overflow. Lorem ipsum dolor sit amet, consectetur adipiscing elit.',\n description:\n 'Test policy description - With very long name to test overflow. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla quis sem at nibh elementum imperdiet.',\n }),\n fakeTestPolicy({\n name: 'No license policy',\n deployed: false,\n description: 'No license policy should display a lock icon and a clear CTA.',\n }),\n fakeTestPolicy({\n id: 'transformation-policy',\n name: 'transformation policy',\n category: 'transformation',\n flowPhaseCompatibility: {\n HTTP_PROXY: ['REQUEST'],\n },\n }),\n TEST_POLICY_APIM_4_5,\n ...POLICIES_V4_UNREGISTERED_ICON.map(policy => ({\n ...policy,\n // Replace all icons with the policy id. Icons are registred in the IconRegistry before.\n ...(policy.icon ? { icon: `gio-literal:${policy.id}` } : {}),\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 */\nimport { isFunction } from 'lodash';\n\nimport { fakeTestPolicy } from '../policy/Policy.fixture';\n\nimport { Step } from './Step';\n\nexport function fakeTestPolicyStep(modifier?: Partial<Step> | ((base: Step) => Step)): Step {\n const base: Step = {\n name: fakeTestPolicy().name,\n description: 'Test Policy description',\n enabled: true,\n policy: 'test-policy',\n configuration: {\n test: 'test',\n },\n };\n\n if (isFunction(modifier)) {\n return modifier(base);\n }\n\n return {\n ...base,\n ...modifier,\n };\n}\n\nexport function fakeRateLimitStep(modifier?: Partial<Step> | ((base: Step) => Step)): Step {\n const base: Step = {\n name: 'Rate Limit',\n description: 'Step description',\n enabled: true,\n policy: 'rate-limit',\n configuration: {\n rate: {\n limit: 10,\n periodTime: 1,\n periodTimeUnit: 'MINUTES',\n },\n },\n };\n\n if (isFunction(modifier)) {\n return modifier(base);\n }\n\n return {\n ...base,\n ...modifier,\n };\n}\n\nexport function fakeJsonToXmlStep(modifier?: Partial<Step> | ((base: Step) => Step)): Step {\n const base: Step = {\n name: 'JSON to XML',\n description: 'JSON to XML',\n enabled: true,\n policy: 'json-xml',\n configuration: {},\n };\n\n if (isFunction(modifier)) {\n return modifier(base);\n }\n\n return {\n ...base,\n ...modifier,\n };\n}\n\nexport function fakeSharedPolicyGroupPolicyStep(modifier?: Partial<Step> | ((base: Step) => Step)): Step {\n const base: Step = {\n name: 'Test PROXY SPG',\n description: 'Shared Policy Group',\n enabled: true,\n policy: 'shared-policy-group-policy',\n configuration: {\n sharedPolicyGroupId: '4d4c1b3b-3b1b-4b3b-8b3b-request',\n },\n };\n\n if (isFunction(modifier)) {\n return modifier(base);\n }\n\n return {\n ...base,\n ...modifier,\n };\n}\n","/*\n * Copyright (C) 2022 The Gravitee team (http://gravitee.io)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nexport * from './Flow.fixture';\nexport * from './FlowExecution.fixture';\nexport * from './Step.fixture';\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 { isFunction } from 'lodash';\n\nimport { Plan } from './Plan';\n\nexport function fakePlan(modifier?: Partial<Plan> | ((base: Plan) => Plan)): Plan {\n const base: Plan = {\n id: 'plan-id',\n name: 'Keyless plan',\n flows: [],\n };\n\n if (isFunction(modifier)) {\n return modifier(base);\n }\n\n return {\n ...base,\n ...modifier,\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 */\nexport * from './Plan.fixture';\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.fixture';\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 { isFunction } from 'lodash';\n\nimport { ConnectorInfo } from './ConnectorsInfo';\n\nexport function fakeSSEMessageEntrypoint(modifier?: Partial<ConnectorInfo> | ((base: ConnectorInfo) => ConnectorInfo)): ConnectorInfo {\n const base: ConnectorInfo = {\n type: 'sse',\n name: 'Server-Sent Events',\n supportedModes: ['SUBSCRIBE'],\n icon: 'gio:puzzle',\n };\n\n if (isFunction(modifier)) {\n return modifier(base);\n }\n\n return {\n ...base,\n ...modifier,\n };\n}\n\nexport function fakeWebsocketMessageEntrypoint(\n modifier?: Partial<ConnectorInfo> | ((base: ConnectorInfo) => ConnectorInfo),\n): ConnectorInfo {\n const base: ConnectorInfo = {\n type: 'websocket',\n name: 'Websocket',\n supportedModes: ['PUBLISH', 'SUBSCRIBE'],\n icon: 'gio:websocket',\n };\n\n if (isFunction(modifier)) {\n return modifier(base);\n }\n\n return {\n ...base,\n ...modifier,\n };\n}\n\nexport function fakeHTTPPostMessageEntrypoint(modifier?: Partial<ConnectorInfo> | ((base: ConnectorInfo) => ConnectorInfo)): ConnectorInfo {\n const base: ConnectorInfo = {\n type: 'http-post',\n name: 'HTTP POST',\n supportedModes: ['PUBLISH'],\n icon: 'gio:language',\n };\n\n if (isFunction(modifier)) {\n return modifier(base);\n }\n\n return {\n ...base,\n ...modifier,\n };\n}\n\nexport function fakeHTTPGetMessageEntrypoint(modifier?: Partial<ConnectorInfo> | ((base: ConnectorInfo) => ConnectorInfo)): ConnectorInfo {\n const base: ConnectorInfo = {\n type: 'http-get',\n name: 'HTTP Get',\n supportedModes: ['SUBSCRIBE'],\n icon: 'gio:language',\n };\n\n if (isFunction(modifier)) {\n return modifier(base);\n }\n\n return {\n ...base,\n ...modifier,\n };\n}\n\nexport function fakeWebhookMessageEntrypoint(modifier?: Partial<ConnectorInfo> | ((base: ConnectorInfo) => ConnectorInfo)): ConnectorInfo {\n const base: ConnectorInfo = {\n type: 'webhook',\n name: 'Webhook',\n supportedModes: ['SUBSCRIBE'],\n icon: 'gio:webhook',\n };\n\n if (isFunction(modifier)) {\n return modifier(base);\n }\n\n return {\n ...base,\n ...modifier,\n };\n}\n\nexport function fakeHTTPProxyEntrypoint(modifier?: Partial<ConnectorInfo> | ((base: ConnectorInfo) => ConnectorInfo)): ConnectorInfo {\n const base: ConnectorInfo = {\n type: 'http-proxy',\n name: 'HTTP Proxy',\n supportedModes: ['REQUEST_RESPONSE'],\n icon: 'gio:language',\n };\n\n if (isFunction(modifier)) {\n return modifier(base);\n }\n\n return {\n ...base,\n ...modifier,\n };\n}\n\nexport function fakeMockMessageEndpoint(modifier?: Partial<ConnectorInfo> | ((base: ConnectorInfo) => ConnectorInfo)): ConnectorInfo {\n const base: ConnectorInfo = {\n type: 'mock',\n name: 'Mock',\n supportedModes: ['PUBLISH', 'SUBSCRIBE'],\n icon: 'gio:language',\n };\n\n if (isFunction(modifier)) {\n return modifier(base);\n }\n\n return {\n ...base,\n ...modifier,\n };\n}\n\nexport function fakeKafkaMessageEndpoint(modifier?: Partial<ConnectorInfo> | ((base: ConnectorInfo) => ConnectorInfo)): ConnectorInfo {\n const base: ConnectorInfo = {\n type: 'kafka',\n name: 'Kafka',\n supportedModes: ['PUBLISH', 'SUBSCRIBE'],\n icon: 'gio:kafka',\n };\n\n if (isFunction(modifier)) {\n return modifier(base);\n }\n\n return {\n ...base,\n ...modifier,\n };\n}\n\nexport function fakeHTTPProxyEndpoint(modifier?: Partial<ConnectorInfo> | ((base: ConnectorInfo) => ConnectorInfo)): ConnectorInfo {\n const base: ConnectorInfo = {\n type: 'http-proxy',\n name: 'HTTP Proxy',\n supportedModes: ['REQUEST_RESPONSE'],\n icon: 'gio:language',\n };\n\n if (isFunction(modifier)) {\n return modifier(base);\n }\n\n return {\n ...base,\n ...modifier,\n };\n}\n\nexport function fakeKafkaNativeEntrypoint(modifier?: Partial<ConnectorInfo> | ((base: ConnectorInfo) => ConnectorInfo)): ConnectorInfo {\n const base: ConnectorInfo = {\n type: 'native-kafka',\n name: 'Client',\n supportedModes: ['INTERACT', 'PUBLISH', 'SUBSCRIBE'],\n icon: 'gio:kafka',\n };\n\n if (isFunction(modifier)) {\n return modifier(base);\n }\n\n return {\n ...base,\n ...modifier,\n };\n}\n\nexport function fakeKafkaNativeEndpoint(modifier?: Partial<ConnectorInfo> | ((base: ConnectorInfo) => ConnectorInfo)): ConnectorInfo {\n const base: ConnectorInfo = {\n type: 'native-kafka',\n name: 'Broker',\n supportedModes: ['INTERACT', 'PUBLISH', 'SUBSCRIBE'],\n icon: 'gio:kafka',\n };\n\n if (isFunction(modifier)) {\n return modifier(base);\n }\n\n return {\n ...base,\n ...modifier,\n };\n}\n\nexport function fakeMCPProxyEntrypoint(modifier?: Partial<ConnectorInfo> | ((base: ConnectorInfo) => ConnectorInfo)): ConnectorInfo {\n const base: ConnectorInfo = {\n type: 'mcp-proxy',\n name: 'MCP Proxy',\n supportedModes: ['REQUEST_RESPONSE'],\n icon: 'gio:language',\n };\n\n if (isFunction(modifier)) {\n return modifier(base);\n }\n\n return {\n ...base,\n ...modifier,\n };\n}\n\nexport function fakeMCPProxyEndpoint(modifier?: Partial<ConnectorInfo> | ((base: ConnectorInfo) => ConnectorInfo)): ConnectorInfo {\n const base: ConnectorInfo = {\n type: 'mcp-proxy',\n name: 'MCP Proxy',\n supportedModes: ['REQUEST_RESPONSE'],\n icon: 'gio:language',\n };\n\n if (isFunction(modifier)) {\n return modifier(base);\n }\n\n return {\n ...base,\n ...modifier,\n };\n}\n\nexport function fakeLlmProxyEntrypoint(modifier?: Partial<ConnectorInfo> | ((base: ConnectorInfo) => ConnectorInfo)): ConnectorInfo {\n const base: ConnectorInfo = {\n type: 'llm-proxy',\n name: 'LLM Proxy',\n supportedModes: ['REQUEST_RESPONSE'],\n icon: 'gio:language',\n };\n\n if (isFunction(modifier)) {\n return modifier(base);\n }\n\n return {\n ...base,\n ...modifier,\n };\n}\n\nexport function fakeLlmProxyEndpoint(modifier?: Partial<ConnectorInfo> | ((base: ConnectorInfo) => ConnectorInfo)): ConnectorInfo {\n const base: ConnectorInfo = {\n type: 'llm-proxy',\n name: 'LLM Proxy',\n supportedModes: ['REQUEST_RESPONSE'],\n icon: 'gio:language',\n };\n\n if (isFunction(modifier)) {\n return modifier(base);\n }\n\n return {\n ...base,\n ...modifier,\n };\n}\n","/*\n * Copyright (C) 2022 The Gravitee team (http://gravitee.io)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nexport * from './flow/index-testing';\nexport * from './plan/index-testing';\nexport * from './policy/index-testing';\n\nexport * from './ConnectorsInfo.fixture';\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 { ComponentHarness, parallel } from '@angular/cdk/testing';\nimport { MatButtonHarness } from '@angular/material/button/testing';\nimport { MatIconHarness } from '@angular/material/icon/testing';\nimport { DivHarness } from '@gravitee/ui-particles-angular/testing';\nimport { MatMenuHarness } from '@angular/material/menu/testing';\nimport { MatInputHarness } from '@angular/material/input/testing';\n\nexport class GioPolicyStudioFlowsMenuHarness extends ComponentHarness {\n public static hostSelector = 'gio-ps-flows-menu';\n\n private locateFlowsGroups = this.locatorForAll(DivHarness.with({ selector: '.list__flowsGroup' }));\n private locateFlowByText = (text: string | RegExp) =>\n this.locatorForOptional(DivHarness.with({ selector: '.list__flowsGroup__flows__flow', text }));\n\n public locateGroupByText = (text: string | RegExp) => this.locatorForOptional(DivHarness.with({ selector: '.list__flowsGroup', text }));\n\n private locateSelectedFlow = this.locatorForOptional(DivHarness.with({ selector: '.list__flowsGroup__flows__flow.selected' }));\n\n public async getAllFlowsGroups(): Promise<\n {\n name: string | null;\n flows: {\n name: string | null;\n isSelected: boolean;\n infos: string | null;\n hasCondition: boolean;\n }[];\n }[]\n > {\n const flowsGroups = await this.locateFlowsGroups();\n\n return parallel(() =>\n flowsGroups.map(async flowsGroup => {\n const flowsGroupName = await flowsGroup.getText({ childSelector: '.list__flowsGroup__header__label' });\n const flowsGroupNameWithoutPlanPrefix = flowsGroupName?.replace(/^Plan:\\s*/, '') ?? null;\n\n const flowsDiv = await flowsGroup.childLocatorForAll(DivHarness.with({ selector: '.list__flowsGroup__flows__flow' }))();\n\n const flowsInfos = parallel(() =>\n flowsDiv.map(async flowDiv => {\n return {\n name: await flowDiv.getText({ childSelector: '.list__flowsGroup__flows__flow__left__name' }),\n infos: await flowDiv.getText({ childSelector: '.list__flowsGroup__flows__flow__left__infos' }),\n isSelected: await flowDiv.host().then(host => host.hasClass('selected')),\n hasCondition: !!(await flowDiv.childLocatorFor(MatIconHarness.with({ name: 'gio:if' }))),\n };\n }),\n );\n\n return {\n name: flowsGroupNameWithoutPlanPrefix,\n flows: await flowsInfos,\n };\n }),\n );\n }\n\n public async getSelectedFlow(): Promise<{ name: string | null } | null> {\n const selectedFlow = await this.locateSelectedFlow();\n\n return selectedFlow ? { name: await selectedFlow.getText({ childSelector: '.list__flowsGroup__flows__flow__left__name' }) } : null;\n }\n\n /**\n * Select a flow by it's text content\n */\n public async selectFlow(flowText: string | RegExp): Promise<void> {\n const flowsGroups = await this.locateFlowByText(flowText)();\n\n if (flowsGroups) {\n await flowsGroups.host().then(host => host.click());\n }\n }\n\n public async addFlow(groupName: string | RegExp): Promise<void> {\n const flowsGroups = await this.locateGroupByText(groupName)();\n\n if (flowsGroups) {\n await (await flowsGroups.childLocatorFor(MatButtonHarness.with({ ancestor: '.list__flowsGroup__header__addBtn' }))()).click();\n }\n }\n\n public async isReadOnly(): Promise<boolean> {\n const flowsGroups = await this.locateFlowsGroups();\n const flowGroup = flowsGroups.pop();\n if (!flowGroup) {\n throw new Error('A flow group is required to test that menu is readonly');\n }\n const addBtn = await flowGroup.childLocatorFor(MatButtonHarness.with({ ancestor: '.list__flowsGroup__header__addBtn' }))();\n\n return await addBtn.isDisabled();\n }\n\n public async openFlowExecutionConfig(): Promise<void> {\n await (await this.locatorFor(MatButtonHarness.with({ selector: '.header__configBtn_edit' }))())?.click();\n }\n\n public async clickDuplicateFlowBtn(flowText: string | RegExp): Promise<void> {\n const flow = await this.locateFlowByText(flowText)();\n\n const matMenu = await flow?.childLocatorFor(MatMenuHarness.with({ selector: '.list__flowsGroup__flows__flow__right__name__menu' }))();\n await matMenu?.clickItem({ text: /Duplicate/ });\n }\n\n public async getSearchInput(): Promise<MatInputHarness> {\n return this.locatorFor(MatInputHarness.with({ selector: '.searchBar__input input[matInput]' }))();\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 */\n\nimport { ComponentHarness, parallel } from '@angular/cdk/testing';\nimport { DivHarness, SpanHarness } from '@gravitee/ui-particles-angular/testing';\n\nexport class GioPolicyStudioDetailsInfoBarHarness extends ComponentHarness {\n public static hostSelector = 'gio-ps-flow-details-info-bar';\n\n public async getInfos(): Promise<Record<string, (string | null)[]>> {\n const infosDiv = await this.locatorForAll(DivHarness.with({ selector: '.info' }))();\n\n const allKeyValue = await parallel(() =>\n infosDiv.map(async info => {\n const label = await info.childLocatorFor(SpanHarness.with({ selector: '.info__label' }))();\n const value = await info.childLocatorForAll(SpanHarness.with({ selector: '.info__value' }))();\n return { label: await label.getText(), value: await parallel(() => value.map(v => v.getText())) };\n }),\n );\n\n return allKeyValue.reduce(\n (acc, curr) => {\n if (curr.label) {\n return { ...acc, [curr.label]: curr.value };\n }\n return acc;\n },\n {} as Record<string, (string | null)[]>,\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 */\n\nimport { ComponentHarness } from '@angular/cdk/testing';\nimport { MatButtonHarness } from '@angular/material/button/testing';\n\nimport { GioPolicyStudioDetailsInfoBarHarness } from '../flow-details-info-bar/gio-ps-flow-details-info-bar.harness';\n\nexport class GioPolicyStudioDetailsHarness extends ComponentHarness {\n public static hostSelector = 'gio-ps-flow-details';\n\n public async isDisplayEmptyFlow(): Promise<boolean> {\n const hostText = await (await this.host()).text();\n return hostText.includes('No flows yet');\n }\n\n public async isDisabledFlow(): Promise<boolean> {\n const headerLabel = await this.locatorFor('.header__label')();\n return await headerLabel.text().then(text => text.includes('Disabled'));\n }\n\n public async getFlowInfos(): Promise<Record<string, (string | null)[]>> {\n return await (await this.locatorFor(GioPolicyStudioDetailsInfoBarHarness)()).getInfos();\n }\n\n public async matchText(matcher: RegExp): Promise<boolean> {\n const hostText = await (await this.host()).text();\n return matcher.test(hostText);\n }\n\n public async isReadOnly(): Promise<boolean> {\n const editFlowBtn = await this.locatorFor(MatButtonHarness.with({ selector: '.header__configBtn__edit' }))();\n const editBtnDisabled = await editFlowBtn.isDisabled();\n const deleteFlowBtn = await this.locatorFor(MatButtonHarness.with({ selector: '.header__configBtn__delete' }))();\n const deleteBtnDisabled = await deleteFlowBtn.isDisabled();\n return editBtnDisabled && deleteBtnDisabled;\n }\n\n public async clickEditFlowBtn(): Promise<void> {\n const editFlowBtn = await this.locatorFor(MatButtonHarness.with({ selector: '.header__configBtn__edit' }))();\n await editFlowBtn.click();\n }\n\n public async clickDeleteFlowBtn(): Promise<void> {\n const deleteFlowBtn = await this.locatorFor(MatButtonHarness.with({ selector: '.header__configBtn__delete' }))();\n await deleteFlowBtn.click();\n }\n\n public async clickEnableDisableFlowBtn(): Promise<void> {\n const enableDisableFlowBtn = await this.locatorFor(MatButtonHarness.with({ selector: '.header__configBtn__enableDisable' }))();\n await enableDisableFlowBtn.click();\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 { ComponentHarness } from '@angular/cdk/testing';\nimport { MatButtonHarness } from '@angular/material/button/testing';\nimport { MatInputHarness } from '@angular/material/input/testing';\nimport { MatSelectHarness } from '@angular/material/select/testing';\nimport { GioFormTagsInputHarness } from '@gravitee/ui-particles-angular';\n\nexport type GioPolicyStudioFlowProxyHarnessData = {\n name: string;\n pathOperator: string;\n path: string;\n methods: string[];\n condition: string;\n};\n\nexport class GioPolicyStudioFlowProxyFormDialogHarness extends ComponentHarness {\n public static hostSelector = 'gio-ps-flow-proxy-form-dialog';\n\n private getSaveBtn = this.locatorFor(MatButtonHarness.with({ selector: '.actions__saveBtn' }));\n private getCancelBtn = this.locatorFor(MatButtonHarness.with({ selector: '.actions__cancelBtn' }));\n private nameInput = this.locatorFor(MatInputHarness.with({ selector: '[formControlName=\"name\"]' }));\n private pathOperatorInput = this.locatorFor(MatSelectHarness.with({ selector: '[formControlName=\"pathOperator\"]' }));\n private pathInput = this.locatorFor(MatInputHarness.with({ selector: '[formControlName=\"path\"]' }));\n private methodsInput = this.locatorFor(GioFormTagsInputHarness.with({ selector: '[formControlName=\"methods\"]' }));\n private conditionInput = this.locatorFor(MatInputHarness.with({ selector: '[formControlName=\"condition\"]' }));\n\n public async setFlowFormValues(flow: {\n name?: string;\n pathOperator?: string;\n path?: string;\n methods?: string[];\n condition?: string;\n }): Promise<void> {\n if (flow.name) {\n const nameInput = await this.nameInput();\n await nameInput.setValue(flow.name);\n }\n if (flow.pathOperator) {\n const pathOperatorInput = await this.pathOperatorInput();\n await pathOperatorInput.open();\n\n // Unselect all options before selecting the new one\n for (const option of await pathOperatorInput.getOptions()) {\n if (await option.isSelected()) {\n await option.click();\n }\n }\n await pathOperatorInput.clickOptions({ text: new RegExp(flow.pathOperator, 'i') });\n }\n if (flow.path) {\n const input = await this.pathInput();\n await input.setValue(flow.path);\n }\n if (flow.methods) {\n const methodsInput = await this.methodsInput();\n await methodsInput.removeTag('ALL');\n for (const method of flow.methods) {\n await methodsInput.addTag(method);\n }\n }\n if (flow.condition) {\n const conditionInput = await this.conditionInput();\n await conditionInput.setValue(flow.condition);\n }\n }\n\n public async getFlowFormValues(): Promise<GioPolicyStudioFlowProxyHarnessData> {\n return {\n name: await this.getFlowName(),\n pathOperator: await this.getPathOperator(),\n path: await this.getFlowPath(),\n methods: await this.getMethods(),\n condition: await this.getCondition(),\n };\n }\n\n public async getFlowName(): Promise<string> {\n return this.nameInput().then(input => input.getValue());\n }\n\n public async getFlowPath(): Promise<string> {\n return this.pathInput().then(input => input.getValue());\n }\n\n public async getPathOperator(): Promise<string> {\n return this.pathOperatorInput().then(input => input.getValueText());\n }\n\n public async getMethods(): Promise<string[]> {\n return this.methodsInput().then(input => input.getTags());\n }\n\n public async getCondition(): Promise<string> {\n return this.conditionInput().then(input => input.getValue());\n }\n\n public async save(): Promise<void> {\n const button = await this.getSaveBtn();\n await button.click();\n }\n\n public async cancel(): Promise<void> {\n const button = await this.getCancelBtn();\n await button.click();\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 { ComponentHarness, parallel } from '@angular/cdk/testing';\nimport { MatButtonHarness } from '@angular/material/button/testing';\nimport { MatInputHarness } from '@angular/material/input/testing';\nimport { MatSelectHarness } from '@angular/material/select/testing';\n\nexport type GioPolicyStudioFlowMessageHarnessData = {\n name: string;\n channelOperator: string;\n channel: string;\n entrypoints: string[];\n operations: string[];\n condition: string;\n};\n\nexport class GioPolicyStudioFlowMessageFormDialogHarness extends ComponentHarness {\n public static hostSelector = 'gio-ps-flow-message-form-dialog';\n\n private getSaveBtn = this.locatorFor(MatButtonHarness.with({ selector: '.actions__saveBtn' }));\n private getCancelBtn = this.locatorFor(MatButtonHarness.with({ selector: '.actions__cancelBtn' }));\n private nameInput = this.locatorFor(MatInputHarness.with({ selector: '[formControlName=\"name\"]' }));\n private channelOperatorInput = this.locatorFor(MatSelectHarness.with({ selector: '[formControlName=\"channelOperator\"]' }));\n private channelInput = this.locatorFor(MatInputHarness.with({ selector: '[formControlName=\"channel\"]' }));\n private operationsInput = this.locatorFor(MatSelectHarness.with({ selector: '[formControlName=\"operations\"]' }));\n private entrypointsInput = this.locatorFor(MatSelectHarness.with({ selector: '[formControlName=\"entrypoints\"]' }));\n private conditionInput = this.locatorFor(MatInputHarness.with({ selector: '[formControlName=\"condition\"]' }));\n\n public async setFlowFormValues(flow: {\n name?: string;\n channelOperator?: string;\n channel?: string;\n operations?: string[];\n entrypoints?: string[];\n condition?: string;\n }): Promise<void> {\n if (flow.name) {\n const nameInput = await this.nameInput();\n await nameInput.setValue(flow.name);\n }\n if (flow.channelOperator) {\n const channelOperatorInput = await this.channelOperatorInput();\n const entrypointsInput = await this.entrypointsInput();\n await channelOperatorInput.open();\n // Unselect all options before selecting the new one\n for (const option of await entrypointsInput.getOptions()) {\n if (await option.isSelected()) {\n await option.click();\n }\n }\n await channelOperatorInput.clickOptions({ text: new RegExp(flow.channelOperator, 'i') });\n }\n if (flow.channel) {\n const channelInput = await this.channelInput();\n await channelInput.setValue(flow.channel);\n }\n if (flow.operations) {\n const operationsInput = await this.operationsInput();\n await parallel(() =>\n (flow.operations ?? []).map(async operation => {\n await operationsInput.open();\n // Unselect all options before selecting the new one\n for (const option of await operationsInput.getOptions()) {\n if (await option.isSelected()) {\n await option.click();\n }\n }\n await operationsInput.clickOptions({ text: new RegExp(operation, 'i') });\n }),\n );\n }\n if (flow.entrypoints) {\n const entrypointsInput = await this.entrypointsInput();\n await entrypointsInput.open();\n // Unselect all options before selecting the new one\n for (const option of await entrypointsInput.getOptions()) {\n if (await option.isSelected()) {\n await option.click();\n }\n }\n await parallel(() =>\n (flow.entrypoints ?? []).map(async entrypoint => {\n await entrypointsInput.clickOptions({ text: new RegExp(entrypoint, 'i') });\n }),\n );\n }\n if (flow.condition) {\n const conditionInput = await this.conditionInput();\n await conditionInput.setValue(flow.condition);\n }\n }\n\n public async getName(): Promise<string> {\n return this.nameInput().then(input => input.getValue());\n }\n\n public async getChannelOperator(): Promise<string> {\n return this.channelOperatorInput().then(input => input.getValueText());\n }\n\n public async getChannel(): Promise<string> {\n return this.channelInput().then(input => input.getValue());\n }\n\n public async getOperations(): Promise<string> {\n return this.operationsInput().then(input => input.getValueText());\n }\n\n public async getEntrypoints(): Promise<string> {\n return this.entrypointsInput().then(input => input.getValueText());\n }\n\n public async getCondition(): Promise<string> {\n return this.conditionInput().then(input => input.getValue());\n }\n\n public async save(): Promise<void> {\n const button = await this.getSaveBtn();\n await button.click();\n }\n\n public async cancel(): Promise<void> {\n const button = await this.getCancelBtn();\n await button.click();\n }\n\n public async getFormValues(): Promise<GioPolicyStudioFlowMessageHarnessData> {\n const name = await this.getName();\n const channelOperator = await this.getChannelOperator();\n const channel = await this.getChannel();\n const entrypoints = (await this.getEntrypoints()).split(',');\n const operations = (await this.getOperations()).split(',');\n const condition = await this.getCondition();\n return {\n name,\n channel,\n channelOperator,\n entrypoints,\n operations,\n condition,\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 { ComponentHarness } from '@angular/cdk/testing';\nimport { MatButtonHarness } from '@angular/material/button/testing';\nimport { MatSelectHarness } from '@angular/material/select/testing';\nimport { MatSlideToggleHarness } from '@angular/material/slide-toggle/testing';\n\nimport { FlowMode } from '../../models';\n\nexport class GioPolicyStudioFlowExecutionFormDialogHarness extends ComponentHarness {\n public static hostSelector = 'gio-ps-flow-execution-form-dialog';\n\n private getSaveBtn = this.locatorFor(MatButtonHarness.with({ selector: '.actions__saveBtn' }));\n private getCancelBtn = this.locatorFor(MatButtonHarness.with({ selector: '.actions__cancelBtn' }));\n\n public async setFlowFormValues(flowExecution: { mode?: FlowMode; matchRequired?: boolean }): Promise<void> {\n const modeInput = await this.locatorFor(MatSelectHarness.with({ selector: '[formControlName=\"mode\"]' }))();\n const matchRequiredInput = await this.locatorFor(MatSlideToggleHarness.with({ selector: '[formControlName=\"matchRequired\"]' }))();\n\n if (flowExecution.mode) {\n await modeInput.open();\n\n // Unselect all options before selecting the new one\n for (const option of await modeInput.getOptions()) {\n if (await option.isSelected()) {\n await option.click();\n }\n }\n const flowModeToValue: Record<FlowMode, string> = {\n BEST_MATCH: 'Best match',\n DEFAULT: 'Default',\n };\n\n await modeInput.clickOptions({ text: new RegExp(flowModeToValue[flowExecution.mode], 'i') });\n }\n\n if (flowExecution.matchRequired) {\n await matchRequiredInput.check();\n } else {\n await matchRequiredInput.uncheck();\n }\n }\n\n public async save(): Promise<void> {\n const button = await this.getSaveBtn();\n await button.click();\n }\n\n public async cancel(): Promise<void> {\n const button = await this.getCancelBtn();\n await button.click();\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 */\n\nimport { BaseHarnessFilters, ComponentHarness, HarnessPredicate } from '@angular/cdk/testing';\nimport { SpanHarness } from '@gravitee/ui-particles-angular/testing';\nimport { MatMenuHarness } from '@angular/material/menu/testing';\nimport { DivHarness } from '@gravitee/ui-particles-angular/testing';\nimport { MatTooltipHarness } from '@angular/material/tooltip/testing';\n\nexport type GioPolicyStudioDetailsPhaseStepHarnessFilters = BaseHarnessFilters;\n\nexport class GioPolicyStudioDetailsPhaseStepHarness extends ComponentHarness {\n public static hostSelector = 'gio-ps-flow-details-phase-step';\n\n /**\n * Get Harness with the given filter.\n *\n * @param options Options for filtering which input instances are considered a match.\n * @return a `HarnessPredicate` configured with the given options.\n */\n public static with(\n options: GioPolicyStudioDetailsPhaseStepHarnessFilters = {},\n ): HarnessPredicate<GioPolicyStudioDetailsPhaseStepHarness> {\n return new HarnessPredicate(GioPolicyStudioDetailsPhaseStepHarness, options);\n }\n\n public async getName(): Promise<string> {\n return (await (await this.locatorFor(SpanHarness.with({ selector: '.info__head__name' }))()).getText()) ?? '';\n }\n\n public async getDescription(): Promise<string | undefined> {\n return (await (await this.locatorForOptional(DivHarness.with({ selector: '.info__description' }))())?.getText()) ?? undefined;\n }\n\n public async getInfoMessage(): Promise<string | undefined> {\n const tooltip = await this.locatorForOptional(MatTooltipHarness.with({ selector: '.info__head__info' }))();\n // FIXME: await tooltip.getTooltipText(); returns empty string. when it's in a condition. I haven't figured out how to get over it.\n // This hack allows to validate the info anyway\n return tooltip ? 'HasInfoMessage' : undefined;\n }\n\n public async clickOnEdit(): Promise<void> {\n const matMenu = await this.locatorFor(MatMenuHarness)();\n await matMenu.clickItem({ text: 'Edit' });\n }\n\n public async clickOnDelete(): Promise<void> {\n const matMenu = await this.locatorFor(MatMenuHarness)();\n await matMenu.clickItem({ text: 'Delete' });\n }\n\n public async clickOnDisableEnable(): Promise<void> {\n const matMenu = await this.locatorFor(MatMenuHarness)();\n await matMenu.clickItem({ text: /Disable|Enable/ });\n }\n\n public async clickOnDuplicate(): Promise<void> {\n const matMenu = await this.locatorFor(MatMenuHarness)();\n await matMenu.clickItem({ text: 'Duplicate' });\n }\n\n public async clickOnMoveRight(): Promise<void> {\n const matMenu = await this.locatorFor(MatMenuHarness)();\n await matMenu.clickItem({ text: 'Move right' });\n }\n\n public async clickOnMoveLeft(): Promise<void> {\n const matMenu = await this.locatorFor(MatMenuHarness)();\n await matMenu.clickItem({ text: 'Move left' });\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 */\n\nimport { ComponentHarness, LocatorFactory } from '@angular/cdk/testing';\nimport { MatInputHarness } from '@angular/material/input/testing';\n\nexport type StepForm = {\n description?: string;\n condition?: string;\n messageCondition?: string;\n // Callback to allow to fill the fields of the jsonSchemaForm specific to each policy, if necessary. Useful if some are required.\n waitForPolicyFormCompletionCb?: (locator: LocatorFactory) => Promise<void>;\n // Callback to allow to fill init http request fields. Useful for httpTestingController.expectOne() onn `/schema` & ``/documentation` requests.\n waitForInitHttpRequestCompletionCb?: () => void;\n};\nexport class GioPolicyStudioStepFormHarness extends ComponentHarness {\n public static hostSelector = 'gio-ps-step-form';\n\n private getDescriptionInput = this.locatorFor(MatInputHarness.with({ selector: '[formControlName=\"description\"]' }));\n\n private getConditionInput = this.locatorFor(MatInputHarness.with({ selector: '[formControlName=\"condition\"]' }));\n\n public async setStepForm(stepForm: StepForm): Promise<void> {\n if (stepForm.waitForInitHttpRequestCompletionCb) {\n stepForm.waitForInitHttpRequestCompletionCb();\n }\n\n if (stepForm.description) {\n const descriptionInput = await this.getDescriptionInput();\n await descriptionInput.setValue(stepForm.description);\n }\n if (stepForm.condition) {\n const conditionInput = await this.getConditionInput();\n await conditionInput.setValue(stepForm.condition);\n }\n if (stepForm.messageCondition) {\n const messageConditionInput = await this.locatorFor(MatInputHarness.with({ selector: '[formControlName=\"messageCondition\"]' }))();\n await messageConditionInput.setValue(stepForm.messageCondition);\n }\n\n if (stepForm.waitForPolicyFormCompletionCb) {\n await stepForm.waitForPolicyFormCompletionCb(this.locatorFactory);\n }\n }\n\n public async getStepFormValue(): Promise<{\n description?: string;\n }> {\n const descriptionInput = await this.getDescriptionInput();\n\n return {\n description: await descriptionInput.getValue(),\n };\n }\n\n public async getDocumentation(): Promise<string | null> {\n const documentation = await this.locatorFor('.documentation__content > gio-asciidoctor')();\n return documentation.text();\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 { ComponentHarness } from '@angular/cdk/testing';\n\nimport { GioPolicyStudioStepFormHarness } from '../step-form/gio-ps-step-form.harness';\n\nexport class GioPolicyStudioStepEditDialogHarness extends ComponentHarness {\n public static hostSelector = 'gio-ps-step-edit-dialog';\n\n public async getPolicyName(): Promise<string> {\n return (await this.locatorFor('.title__name')()).text();\n }\n\n public async getStepForm(): Promise<GioPolicyStudioStepFormHarness> {\n return await this.locatorFor(GioPolicyStudioStepFormHarness)();\n }\n\n public async save(): Promise<void> {\n return (await this.locatorFor('.actions__saveBtn')()).click();\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 { ComponentHarness, parallel } from '@angular/cdk/testing';\nimport { MatButtonHarness } from '@angular/material/button/testing';\nimport { DivHarness } from '@gravitee/ui-particles-angular/testing';\nimport { MatChipListboxHarness, MatChipOptionHarness } from '@angular/material/chips/testing';\nimport { MatInputHarness } from '@angular/material/input/testing';\n\nimport { GioPolicyStudioStepFormHarness } from '../step-form/gio-ps-step-form.harness';\n\nexport class GioPolicyStudioPoliciesCatalogDialogHarness extends ComponentHarness {\n public static hostSelector = 'gio-ps-policies-catalog-dialog';\n\n private policiesLocator = this.locatorForAll(DivHarness.with({ selector: '.policiesCatalog__list__policy' }));\n\n private getCategoriesFilter = this.locatorForOptional(MatChipListboxHarness.with({ selector: '[formControlName=\"categories\"]' }));\n public async getPhase(): Promise<string> {\n const phase = await this.locatorFor('.title__phase')();\n return phase.text();\n }\n\n public async getPoliciesName(): Promise<string[]> {\n const policies = await this.locatorForAll('.policiesCatalog__list__policy__head__name')();\n return parallel(() => policies.map(policy => policy.text()));\n }\n\n public async selectPolicy(policyName: string): Promise<void> {\n const policies = await this.policiesLocator();\n for (const policy of policies) {\n const name = await policy.getText({ childSelector: '.policiesCatalog__list__policy__head__name' });\n if (name === policyName) {\n const selectBtn = await policy.childLocatorFor(MatButtonHarness.with({ selector: '.policiesCatalog__list__policy__selectBtn' }))();\n await selectBtn.click();\n return;\n }\n }\n throw new Error(`Policy ${policyName} not found`);\n }\n\n public async getSelectedPolicyName(): Promise<string> {\n const policy = await this.locatorFor('.policyForm__info__head__name')();\n return policy.text();\n }\n\n public async hasRequestUpgradeButton(): Promise<boolean> {\n const requestUpgradeButton = await this.locatorForOptional(MatButtonHarness.with({ text: 'Request upgrade' }))();\n return !!requestUpgradeButton;\n }\n\n public async clickAddPolicyButton(): Promise<void> {\n const addBtn = await this.locatorFor(MatButtonHarness.with({ selector: '.actions__addBtn' }))();\n await addBtn.click();\n }\n\n public async getStepForm(): Promise<GioPolicyStudioStepFormHarness> {\n return await this.locatorFor(GioPolicyStudioStepFormHarness)();\n }\n\n public async getCategoriesSelection(): Promise<{ name: string; selected: boolean }[]> {\n const chipList = await this.getCategoriesFilter();\n if (!chipList) {\n return [];\n }\n\n const chips: MatChipOptionHarness[] = await chipList.getChips();\n\n return parallel(() =>\n chips.map(async chip => {\n const selected = await chip.isSelected();\n const name = await chip.getText();\n return { name, selected };\n }),\n );\n }\n\n public async selectCategoryFilter(categoryName: string): Promise<void> {\n const chipList = await this.getCategoriesFilter();\n await chipList?.selectChips({ text: categoryName });\n }\n\n public async searchFilter(search: string): Promise<void> {\n const searchInput = await this.locatorFor(MatInputHarness.with({ selector: '[formControlName=\"search\"]' }))();\n if (searchInput) {\n await searchInput.setValue(search);\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 */\n\nimport { BaseHarnessFilters, ComponentHarness, HarnessPredicate, parallel } from '@angular/cdk/testing';\nimport { DivHarness, SpanHarness } from '@gravitee/ui-particles-angular/testing';\nimport { isEmpty } from 'lodash';\nimport { MatButtonHarness } from '@angular/material/button/testing';\n\nimport { GioPolicyStudioDetailsPhaseStepHarness } from '../flow-details-phase-step/gio-ps-flow-details-phase-step.harness';\nimport { GioPolicyStudioStepEditDialogHarness } from '../step-edit-dialog/gio-ps-step-edit-dialog.harness';\nimport { GioPolicyStudioPoliciesCatalogDialogHarness } from '../policies-catalog-dialog/gio-ps-policies-catalog-dialog.harness';\nimport { StepForm } from '../step-form/gio-ps-step-form.harness';\n\nexport type PhaseType = 'INTERACT' | 'REQUEST' | 'RESPONSE' | 'PUBLISH' | 'SUBSCRIBE';\n\nexport type GioPolicyStudioDetailsPhaseHarnessFilters = BaseHarnessFilters & {\n type?: PhaseType;\n};\n\nconst TYPE_TO_TEXT: Record<PhaseType, string> = {\n INTERACT: 'Interact phase',\n REQUEST: 'Request phase',\n RESPONSE: 'Response phase',\n PUBLISH: 'Publish phase',\n SUBSCRIBE: 'Subscribe phase',\n};\n\nexport type StepCard =\n | {\n name: string;\n type: 'connector';\n }\n | {\n name: string;\n description?: string;\n hasCondition: boolean;\n type: 'step';\n };\n\nexport class GioPolicyStudioDetailsPhaseHarness extends ComponentHarness {\n public static hostSelector = 'gio-ps-flow-details-phase';\n\n private getHeaderName = () =>\n this.locatorForOptional(SpanHarness.with({ selector: '.header__name' }))().then(async span => span?.getText() ?? null);\n\n /**\n * Get Harness with the given filter.\n *\n * @param options Options for filtering which input instances are considered a match.\n * @return a `HarnessPredicate` configured with the given options.\n */\n public static with(options: GioPolicyStudioDetailsPhaseHarnessFilters = {}): HarnessPredicate<GioPolicyStudioDetailsPhaseHarness> {\n return new HarnessPredicate(GioPolicyStudioDetailsPhaseHarness, options).addOption('type', options.type, async (harness, type) => {\n return HarnessPredicate.stringMatches(harness.getHeaderName(), TYPE_TO_TEXT[type]);\n });\n }\n\n public async getSteps(): Promise<StepCard[] | 'DISABLED'> {\n if (await this.locatorForOptional('.disabledContent')()) {\n return 'DISABLED';\n }\n\n const stepsDiv = await this.locatorForAll(DivHarness.with({ selector: '.content__step' }))();\n\n if (isEmpty(stepsDiv)) {\n // No step - the phase is disabled\n return [];\n }\n\n return await parallel(() =>\n stepsDiv.map(async stepDiv => {\n const idConnector = !!(await stepDiv.getText({ childSelector: '.content__step__connector__badge' }));\n if (idConnector) {\n return {\n name: (await stepDiv.getText()) ?? '',\n type: 'connector',\n };\n }\n const step = await stepDiv.childLocatorFor(GioPolicyStudioDetailsPhaseStepHarness)();\n const conditionDiv = await stepDiv.childLocatorForOptional(DivHarness.with({ selector: '.content__step__policy__condition' }))();\n const description = await step.getDescription();\n const infoMessage = await step.getInfoMessage();\n\n return {\n type: 'step',\n name: await step.getName(),\n hasCondition: !!conditionDiv,\n ...(description ? { description } : {}),\n ...(infoMessage ? { infoMessage } : {}),\n };\n }),\n );\n }\n\n public async getStep(index: number): Promise<GioPolicyStudioDetailsPhaseStepHarness> {\n const steps = await this.locatorForAll(GioPolicyStudioDetailsPhaseStepHarness)();\n if (!steps[index]) {\n throw new Error(`Step ${index} not found`);\n }\n return steps[index];\n }\n\n public async clickAddStep(index: number): Promise<void> {\n const addStepBtn = await this.locatorForAll(DivHarness.with({ selector: '.content__step' }))().then(divs => divs[index]);\n\n await addStepBtn\n .childLocatorFor(MatButtonHarness.with({ selector: '.content__step__addBtn' }))()\n .then(btn => btn.click());\n }\n\n /**\n * Add a step to a phase\n * @param index Index where to add the step. (Add button index)\n * @param stepConfig Step to add\n */\n public async addStep(\n index: number,\n stepConfig: {\n policyName: string;\n } & StepForm,\n ): Promise<void> {\n await this.clickAddStep(index);\n\n const catalogDialog = await this.documentRootLocatorFactory().locatorFor(GioPolicyStudioPoliciesCatalogDialogHarness)();\n await catalogDialog.selectPolicy(stepConfig.policyName);\n\n await (await catalogDialog.getStepForm()).setStepForm(stepConfig);\n\n await catalogDialog.clickAddPolicyButton();\n }\n\n /**\n * Edit a step configuration\n * @param index Index of the policy step to edit\n * @param stepConfig Step configuration\n */\n public async editStep(index: number, stepConfig: StepForm): Promise<void> {\n const step = await this.getStep(index);\n\n await step.clickOnEdit();\n\n const stepEditDialog = await this.documentRootLocatorFactory().locatorFor(GioPolicyStudioStepEditDialogHarness)();\n await (await stepEditDialog.getStepForm()).setStepForm(stepConfig);\n\n await stepEditDialog.save();\n }\n\n /**\n * Delete a step\n * @param index Index of the policy step to delete\n */\n public async deleteStep(index: number): Promise<void> {\n const step = await this.getStep(index);\n\n await step.clickOnDelete();\n }\n\n /**\n * Disable a step\n * @param index Index of the policy step to disable\n */\n public async disableEnableStep(index: number): Promise<void> {\n const step = await this.getStep(index);\n await step.clickOnDisableEnable();\n }\n\n /**\n * Duplicate a step\n * @param index Index of the policy step to duplicate\n */\n public async duplicateStep(index: number): Promise<void> {\n const step = await this.getStep(index);\n await step.clickOnDuplicate();\n }\n\n /**\n * Move a step to the right\n * @param index Index of the policy step to move\n */\n public async moveStepRight(index: number): Promise<void> {\n const step = await this.getStep(index);\n await step.clickOnMoveRight();\n }\n\n /**\n * Move a step to the left\n * @param index Index of the policy step to move\n */\n public async moveStepLeft(index: number): Promise<void> {\n const step = await this.getStep(index);\n await step.clickOnMoveLeft();\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 { ComponentHarness } from '@angular/cdk/testing';\nimport { MatButtonHarness } from '@angular/material/button/testing';\nimport { MatInputHarness } from '@angular/material/input/testing';\n\nexport type GioPolicyStudioFlowNativeHarnessData = {\n name: string;\n};\n\nexport class GioPolicyStudioFlowNativeFormDialogHarness extends ComponentHarness {\n public static hostSelector = 'gio-ps-flow-native-form-dialog';\n\n private getSaveBtn = this.locatorFor(MatButtonHarness.with({ selector: '.actions__saveBtn' }));\n private getCancelBtn = this.locatorFor(MatButtonHarness.with({ selector: '.actions__cancelBtn' }));\n private nameInput = this.locatorFor(MatInputHarness.with({ selector: '[formControlName=\"name\"]' }));\n\n public async setFlowFormValues(flow: { name?: string }): Promise<void> {\n if (flow.name) {\n const nameInput = await this.nameInput();\n await nameInput.setValue(flow.name);\n }\n }\n\n public async getFlowFormValues(): Promise<GioPolicyStudioFlowNativeHarnessData> {\n return {\n name: await this.getFlowName(),\n };\n }\n\n public async getFlowName(): Promise<string> {\n return this.nameInput().then(input => input.getValue());\n }\n public async save(): Promise<void> {\n const button = await this.getSaveBtn();\n await button.click();\n }\n\n public async cancel(): Promise<void> {\n const button = await this.getCancelBtn();\n await button.click();\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 { ComponentHarness } from '@angular/cdk/testing';\nimport { MatButtonHarness } from '@angular/material/button/testing';\nimport { MatInputHarness } from '@angular/material/input/testing';\nimport { GioFormTagsInputHarness } from '@gravitee/ui-particles-angular';\n\nexport type GioPolicyStudioFlowMcpHarnessData = {\n name: string;\n methods: string[];\n condition: string;\n};\n\nexport class GioPolicyStudioFlowMcpFormDialogHarness extends ComponentHarness {\n public static hostSelector = 'gio-ps-flow-mcp-form-dialog';\n\n private getSaveBtn = this.locatorFor(MatButtonHarness.with({ selector: '.actions__saveBtn' }));\n private getCancelBtn = this.locatorFor(MatButtonHarness.with({ selector: '.actions__cancelBtn' }));\n private nameInput = this.locatorFor(MatInputHarness.with({ selector: '[formControlName=\"name\"]' }));\n private methodsInput = this.locatorFor(GioFormTagsInputHarness.with({ selector: '[formControlName=\"mcpMethods\"]' }));\n private conditionInput = this.locatorFor(MatInputHarness.with({ selector: '[formControlName=\"condition\"]' }));\n\n public async setFlowFormValues(flow: { name?: string; methods?: string[]; condition?: string }): Promise<void> {\n if (flow.name) {\n const nameInput = await this.nameInput();\n await nameInput.setValue(flow.name);\n }\n if (flow.methods) {\n const methodsInput = await this.methodsInput();\n for (const method of flow.methods) {\n await methodsInput.addTag(method);\n }\n }\n if (flow.condition) {\n const conditionInput = await this.conditionInput();\n await conditionInput.setValue(flow.condition);\n }\n }\n\n public async getFlowFormValues(): Promise<GioPolicyStudioFlowMcpHarnessData> {\n return {\n name: await this.getFlowName(),\n methods: await this.methodsInput().then(input => input.getTags()),\n condition: await this.conditionInput().then(input => input.getValue()),\n };\n }\n\n public async getFlowName(): Promise<string> {\n return this.nameInput().then(input => input.getValue());\n }\n public async save(): Promise<void> {\n const button = await this.getSaveBtn();\n await button.click();\n }\n\n public async cancel(): Promise<void> {\n const button = await this.getCancelBtn();\n await button.click();\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 { ComponentHarness } from '@angular/cdk/testing';\nimport { MatButtonHarness } from '@angular/material/button/testing';\nimport { MatInputHarness } from '@angular/material/input/testing';\nimport { MatSelectHarness } from '@angular/material/select/testing';\nimport { GioFormTagsInputHarness } from '@gravitee/ui-particles-angular';\n\nexport type GioPolicyStudioFlowLlmHarnessData = {\n name: string;\n pathOperator: string;\n path: string;\n methods: string[];\n condition: string;\n};\n\nexport class GioPolicyStudioFlowLlmFormDialogHarness extends ComponentHarness {\n public static hostSelector = 'gio-ps-flow-llm-form-dialog';\n\n private getSaveBtn = this.locatorFor(MatButtonHarness.with({ selector: '.actions__saveBtn' }));\n private getCancelBtn = this.locatorFor(MatButtonHarness.with({ selector: '.actions__cancelBtn' }));\n private nameInput = this.locatorFor(MatInputHarness.with({ selector: '[formControlName=\"name\"]' }));\n private pathOperatorInput = this.locatorFor(MatSelectHarness.with({ selector: '[formControlName=\"pathOperator\"]' }));\n private pathInput = this.locatorFor(MatInputHarness.with({ selector: '[formControlName=\"path\"]' }));\n private methodsInput = this.locatorFor(GioFormTagsInputHarness.with({ selector: '[formControlName=\"methods\"]' }));\n private conditionInput = this.locatorFor(MatInputHarness.with({ selector: '[formControlName=\"condition\"]' }));\n\n public async setFlowFormValues(flow: {\n name?: string;\n pathOperator?: string;\n path?: string;\n methods?: string[];\n condition?: string;\n }): Promise<void> {\n if (flow.name) {\n const nameInput = await this.nameInput();\n await nameInput.setValue(flow.name);\n }\n if (flow.pathOperator) {\n const pathOperatorInput = await this.pathOperatorInput();\n await pathOperatorInput.open();\n\n // Unselect all options before selecting the new one\n for (const option of await pathOperatorInput.getOptions()) {\n if (await option.isSelected()) {\n await option.click();\n }\n }\n await pathOperatorInput.clickOptions({ text: new RegExp(flow.pathOperator, 'i') });\n }\n if (flow.path) {\n const input = await this.pathInput();\n await input.setValue(flow.path);\n }\n if (flow.methods) {\n const methodsInput = await this.methodsInput();\n await methodsInput.removeTag('ALL');\n for (const method of flow.methods) {\n await methodsInput.addTag(method);\n }\n }\n if (flow.condition) {\n const conditionInput = await this.conditionInput();\n await conditionInput.setValue(flow.condition);\n }\n }\n\n public async getFlowFormValues(): Promise<GioPolicyStudioFlowLlmHarnessData> {\n return {\n name: await this.getFlowName(),\n pathOperator: await this.getPathOperator(),\n path: await this.getFlowPath(),\n methods: await this.getMethods(),\n condition: await this.getCondition(),\n };\n }\n\n public async getFlowName(): Promise<string> {\n return this.nameInput().then(input => input.getValue());\n }\n\n public async getFlowPath(): Promise<string> {\n return this.pathInput().then(input => input.getValue());\n }\n\n public async getPathOperator(): Promise<string> {\n return this.pathOperatorInput().then(input => input.getValueText());\n }\n\n public async getMethods(): Promise<string[]> {\n return this.methodsInput().then(input => input.getTags());\n }\n\n public async getCondition(): Promise<string> {\n return this.conditionInput().then(input => input.getValue());\n }\n\n public async save(): Promise<void> {\n const button = await this.getSaveBtn();\n await button.click();\n }\n\n public async cancel(): Promise<void> {\n const button = await this.getCancelBtn();\n await button.click();\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 */\n\nimport { ComponentHarness } from '@angular/cdk/testing';\nimport { MatButtonHarness } from '@angular/material/button/testing';\nimport { MatTabGroupHarness } from '@angular/material/tabs/testing';\nimport { MatInputHarness } from '@angular/material/input/testing';\n\nimport { ChannelSelector, ConditionSelector, Flow, FlowExecution, HttpSelector, McpSelector } from '../models';\nimport { GioPolicyStudioFlowsMenuHarness } from '../components/flows-menu/gio-ps-flows-menu.harness';\nimport { GioPolicyStudioDetailsHarness } from '../components/flow-details/gio-ps-flow-details.harness';\nimport { GioPolicyStudioFlowProxyFormDialogHarness } from '../components/flow-form-dialog/flow-proxy-form-dialog/gio-ps-flow-proxy-form-dialog.harness';\nimport { GioPolicyStudioFlowMessageFormDialogHarness } from '../components/flow-form-dialog/flow-message-form-dialog/gio-ps-flow-message-form-dialog.harness';\nimport { GioPolicyStudioFlowExecutionFormDialogHarness } from '../components/flow-execution-form-dialog/gio-ps-flow-execution-form-dialog.harness';\nimport { GioPolicyStudioDetailsPhaseHarness, PhaseType } from '../components/flow-details-phase/gio-ps-flow-details-phase.harness';\nimport { GioPolicyStudioFlowNativeFormDialogHarness } from '../components/flow-form-dialog/flow-native-form-dialog/gio-ps-flow-native-form-dialog.harness';\nimport { GioPolicyStudioFlowMcpFormDialogHarness } from '../components/flow-form-dialog/flow-mcp-form-dialog/gio-ps-flow-mcp-form-dialog.harness';\nimport { GioPolicyStudioFlowLlmFormDialogHarness } from '../components/flow-form-dialog/flow-llm-form-dialog/gio-ps-flow-llm-form-dialog.harness';\n\nexport class GioPolicyStudioHarness extends ComponentHarness {\n public static hostSelector = 'gio-policy-studio';\n\n private menuHarness = this.locatorFor(GioPolicyStudioFlowsMenuHarness);\n\n private detailsHarness = this.locatorFor(GioPolicyStudioDetailsHarness);\n\n private phaseHarness = (phaseType: PhaseType) => this.locatorFor(GioPolicyStudioDetailsPhaseHarness.with({ type: phaseType }))();\n\n public async isReadOnly(): Promise<boolean> {\n const menu = await this.menuHarness();\n const readOnlyMenu = await menu.isReadOnly();\n\n await this.selectFlowInMenu('.+');\n\n const details = await this.detailsHarness();\n const emptyDetails = await details.isDisplayEmptyFlow();\n\n if (!emptyDetails) {\n await this.selectFlowInMenu('.+');\n const readOnlyDetails = await details.isReadOnly();\n return readOnlyMenu && readOnlyDetails;\n }\n\n return readOnlyMenu;\n }\n\n /**\n * Add a flow to a plan or to \"Common flows\"\n *\n * @param groupName Plan name where to add the flow. You also can define \"Common flows\" to add a flow to this group.\n * @param flow Flow to add\n */\n public async addFlow(groupName: string, flow: Flow): Promise<void> {\n await (await this.menuHarness()).addFlow(new RegExp(groupName, 'i'));\n\n await this.setFlowFormDialog(flow);\n }\n\n /**\n * Edit a flow configuration\n *\n * @param flowName Flow name to edit\n * @param flow\n */\n public async editFlowConfig(flowName: string, flow: Partial<Flow>): Promise<void> {\n (await this.menuHarness()).selectFlow(new RegExp(flowName, 'i'));\n await (await this.detailsHarness()).clickEditFlowBtn();\n\n await this.setFlowFormDialog(flow);\n }\n\n /**\n * Delete a flow\n *\n * @param flowName Flow name to delete\n */\n public async deleteFlow(flowName: string): Promise<void> {\n (await this.menuHarness()).selectFlow(new RegExp(flowName, 'i'));\n await (await this.detailsHarness()).clickDeleteFlowBtn();\n }\n\n /**\n * Enable or disable a flow\n */\n public async enableDisableFlow(flowName: string): Promise<void> {\n (await this.menuHarness()).selectFlow(new RegExp(flowName, 'i'));\n await (await this.detailsHarness()).clickEnableDisableFlowBtn();\n }\n\n /**\n * Duplicate a flow\n *\n * @param flowName Flow name to clone\n */\n public async duplicateFlow(flowName: string): Promise<void> {\n await (await this.menuHarness()).clickDuplicateFlowBtn(new RegExp(flowName, 'i'));\n }\n\n /**\n * Select a flow in the menu\n *\n * @param flowName Flow name to select\n */\n public async selectFlowInMenu(flowName: string): Promise<void> {\n await (await this.menuHarness()).selectFlow(new RegExp(flowName, 'i'));\n }\n\n /**\n * Get the list of flows in the menu\n */\n public async getFlowsMenu(): Promise<\n {\n name: string | null;\n flows: {\n name: string | null;\n isSelected: boolean;\n infos: string | null;\n }[];\n }[]\n > {\n return (await this.menuHarness()).getAllFlowsGroups();\n }\n\n /**\n * Get selected flow infos\n */\n public async getSelectedFlowInfos(): Promise<Record<string, (string | null)[]>> {\n return await (await this.detailsHarness()).getFlowInfos();\n }\n\n /**\n * Get selected flow phase harness\n * @param phaseType Phase type to get\n */\n public async getSelectedFlowPhase(phaseType: PhaseType): Promise<GioPolicyStudioDetailsPhaseHarness | undefined> {\n if (phaseType === 'PUBLISH' || phaseType === 'SUBSCRIBE') {\n const matTabsHarness = await this.locatorFor(MatTabGroupHarness.with({ selector: '.content__tabs' }))();\n await matTabsHarness.selectTab({ label: 'Event messages' });\n }\n\n const steps = await this.phaseHarness(phaseType);\n\n return steps ? steps : undefined;\n }\n\n /**\n * Get Save button state\n */\n public async getSaveButtonState(): Promise<'VISIBLE' | 'DISABLED' | 'SAVING'> {\n const saveButton = await this.locatorFor(MatButtonHarness.with({ ancestor: '.header__btn' }))();\n const disabled = await saveButton.isDisabled();\n const text = await saveButton.getText();\n\n if (text === 'Saving...') {\n return 'SAVING';\n }\n\n if (disabled) {\n return 'DISABLED';\n }\n\n return 'VISIBLE';\n }\n\n /**\n * Click on the \"Save\" button\n */\n public async save(): Promise<void> {\n await (await this.locatorFor(MatButtonHarness.with({ text: /Save/ }))()).click();\n }\n\n private async setFlowFormDialog(flow: Partial<Flow>) {\n const channelSelector = flow.selectors?.find(s => s.type === 'CHANNEL') as ChannelSelector | undefined;\n const httpSelector = flow.selectors?.find(s => s.type === 'HTTP') as HttpSelector | undefined;\n const conditionSelector = flow.selectors?.find(s => s.type === 'CONDITION') as ConditionSelector | undefined;\n const mcpSelector = flow.selectors?.find(s => s.type === 'MCP') as McpSelector | undefined;\n\n if (!!channelSelector && !!httpSelector) {\n throw new Error('Channel and HTTP selectors are not be used together.');\n }\n if (channelSelector) {\n const flowFormNewDialog = await this.documentRootLocatorFactory().locatorFor(GioPolicyStudioFlowMessageFormDialogHarness)();\n\n const toChannelOperator = {\n STARTS_WITH: 'Starts with',\n EQUALS: 'Equals',\n };\n\n await flowFormNewDialog.setFlowFormValues({\n name: flow.name,\n channel: channelSelector?.channel,\n channelOperator: toChannelOperator[channelSelector.channelOperator],\n entrypoints: channelSelector?.entrypoints,\n operations: channelSelector?.operations,\n condition: conditionSelector?.condition,\n });\n\n await flowFormNewDialog.save();\n return;\n }\n\n if (httpSelector) {\n let flowFormNewDialog: GioPolicyStudioFlowProxyFormDialogHarness | GioPolicyStudioFlowLlmFormDialogHarness | null =\n await this.documentRootLocatorFactory().locatorForOptional(GioPolicyStudioFlowProxyFormDialogHarness)();\n if (!flowFormNewDialog) {\n flowFormNewDialog = await this.documentRootLocatorFactory().locatorForOptional(GioPolicyStudioFlowLlmFormDialogHarness)();\n }\n if (!flowFormNewDialog) {\n throw new Error('No Proxy or LLM flow form dialog found.');\n }\n await flowFormNewDialog.setFlowFormValues({\n name: flow.name,\n path: httpSelector?.path,\n pathOperator: httpSelector?.pathOperator,\n methods: httpSelector?.methods,\n condition: conditionSelector?.condition,\n });\n await flowFormNewDialog.save();\n return;\n }\n\n if (mcpSelector) {\n const flowFormNewDialog = await this.documentRootLocatorFactory().locatorFor(GioPolicyStudioFlowMcpFormDialogHarness)();\n\n await flowFormNewDialog.setFlowFormValues({\n name: flow.name,\n methods: mcpSelector?.methods,\n condition: conditionSelector?.condition,\n });\n\n await flowFormNewDialog.save();\n return;\n }\n\n if (!channelSelector && !httpSelector) {\n const flowFormNewDialog = await this.documentRootLocatorFactory().locatorFor(GioPolicyStudioFlowNativeFormDialogHarness)();\n await flowFormNewDialog.setFlowFormValues({\n name: flow.name,\n });\n await flowFormNewDialog.save();\n return;\n }\n\n throw new Error('No selector found for this flow. Needed to select Message or Proxy flow form dialog.');\n }\n\n public async setFlowExecutionConfig(flowExecution: FlowExecution): Promise<void> {\n await (await this.menuHarness()).openFlowExecutionConfig();\n\n const flowExecutionDialog = await this.documentRootLocatorFactory().locatorFor(GioPolicyStudioFlowExecutionFormDialogHarness)();\n await flowExecutionDialog.setFlowFormValues(flowExecution);\n await flowExecutionDialog.save();\n }\n\n public async getSearchInput(): Promise<MatInputHarness> {\n const menu = await this.menuHarness();\n return menu.getSearchInput();\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 */\nimport { ComponentHarness } from '@angular/cdk/testing';\nimport { DivHarness } from '@gravitee/ui-particles-angular/testing';\nimport { MatButtonHarness } from '@angular/material/button/testing';\n\nimport { GioPolicyStudioDetailsPhaseHarness } from '../components/flow-details-phase/gio-ps-flow-details-phase.harness';\nimport { StepForm } from '../components/step-form/gio-ps-step-form.harness';\nimport { GioPolicyStudioPoliciesCatalogDialogHarness } from '../components/policies-catalog-dialog/gio-ps-policies-catalog-dialog.harness';\n\nexport class GioPolicyGroupStudioHarness extends ComponentHarness {\n public static hostSelector = 'gio-policy-group-studio';\n\n private phaseHarness = () => this.locatorFor(GioPolicyStudioDetailsPhaseHarness)();\n\n /**\n * Get Policy Group phase harness\n */\n public async getPolicyGroupPhase(): Promise<GioPolicyStudioDetailsPhaseHarness> {\n return this.phaseHarness();\n }\n\n public async clickAddStep(index: number): Promise<void> {\n const addStepBtn = await this.locatorForAll(DivHarness.with({ selector: '.content__step' }))().then(divs => divs[index]);\n\n await addStepBtn\n .childLocatorFor(MatButtonHarness.with({ selector: '.content__step__addBtn' }))()\n .then(btn => btn.click());\n }\n\n /**\n * Add a step to a policy-group\n * @param index Index where to add the step. (Add button index)\n * @param stepConfig Step to add\n */\n public async addStep(\n index: number,\n stepConfig: {\n policyName: string;\n } & StepForm,\n ): Promise<void> {\n await this.clickAddStep(index);\n\n const catalogDialog = await this.documentRootLocatorFactory().locatorFor(GioPolicyStudioPoliciesCatalogDialogHarness)();\n await catalogDialog.selectPolicy(stepConfig.policyName);\n\n await (await catalogDialog.getStepForm()).setStepForm(stepConfig);\n\n await catalogDialog.clickAddPolicyButton();\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 './lib/models/index-testing';\n\nexport * from './lib/policy-studio/gio-policy-studio.harness';\nexport * from './lib/policy-group-studio/gio-policy-group-studio.harness';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-testing-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"gravitee-ui-policy-studio-angular-testing.mjs","sources":["../../../projects/ui-policy-studio-angular/src/lib/models/flow/Flow.fixture.ts","../../../projects/ui-policy-studio-angular/src/lib/models/flow/FlowExecution.fixture.ts","../../../projects/ui-policy-studio-angular/src/lib/models/policy/Policy.fixture.ts","../../../projects/ui-policy-studio-angular/src/lib/models/flow/Step.fixture.ts","../../../projects/ui-policy-studio-angular/src/lib/models/flow/index-testing.ts","../../../projects/ui-policy-studio-angular/src/lib/models/plan/Plan.fixture.ts","../../../projects/ui-policy-studio-angular/src/lib/models/plan/index-testing.ts","../../../projects/ui-policy-studio-angular/src/lib/models/policy/index-testing.ts","../../../projects/ui-policy-studio-angular/src/lib/models/ConnectorsInfo.fixture.ts","../../../projects/ui-policy-studio-angular/src/lib/models/index-testing.ts","../../../projects/ui-policy-studio-angular/src/lib/components/flows-menu/gio-ps-flows-menu.harness.ts","../../../projects/ui-policy-studio-angular/src/lib/components/flow-details-info-bar/gio-ps-flow-details-info-bar.harness.ts","../../../projects/ui-policy-studio-angular/src/lib/components/flow-details/gio-ps-flow-details.harness.ts","../../../projects/ui-policy-studio-angular/src/lib/components/flow-form-dialog/flow-proxy-form-dialog/gio-ps-flow-proxy-form-dialog.harness.ts","../../../projects/ui-policy-studio-angular/src/lib/components/flow-form-dialog/flow-message-form-dialog/gio-ps-flow-message-form-dialog.harness.ts","../../../projects/ui-policy-studio-angular/src/lib/components/flow-execution-form-dialog/gio-ps-flow-execution-form-dialog.harness.ts","../../../projects/ui-policy-studio-angular/src/lib/components/flow-details-phase-step/gio-ps-flow-details-phase-step.harness.ts","../../../projects/ui-policy-studio-angular/src/lib/components/step-form/gio-ps-step-form.harness.ts","../../../projects/ui-policy-studio-angular/src/lib/components/step-edit-dialog/gio-ps-step-edit-dialog.harness.ts","../../../projects/ui-policy-studio-angular/src/lib/components/policies-catalog-dialog/gio-ps-policies-catalog-dialog.harness.ts","../../../projects/ui-policy-studio-angular/src/lib/components/flow-details-phase/gio-ps-flow-details-phase.harness.ts","../../../projects/ui-policy-studio-angular/src/lib/components/flow-form-dialog/flow-native-form-dialog/gio-ps-flow-native-form-dialog.harness.ts","../../../projects/ui-policy-studio-angular/src/lib/components/flow-form-dialog/flow-mcp-form-dialog/gio-ps-flow-mcp-form-dialog.harness.ts","../../../projects/ui-policy-studio-angular/src/lib/components/flow-form-dialog/flow-llm-form-dialog/gio-ps-flow-llm-form-dialog.harness.ts","../../../projects/ui-policy-studio-angular/src/lib/policy-studio/gio-policy-studio.harness.ts","../../../projects/ui-policy-studio-angular/src/lib/policy-group-studio/gio-policy-group-studio.harness.ts","../../../projects/ui-policy-studio-angular/src/public-testing-api.ts","../../../projects/ui-policy-studio-angular/src/gravitee-ui-policy-studio-angular-testing.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 */\nimport { isFunction } from 'lodash';\n\nimport { Flow } from './Flow';\nimport { ChannelSelector, HttpSelector, McpSelector } from './Selector';\n\nexport function fakeChannelFlow(modifier?: Partial<Flow> | ((baseApi: Flow) => Flow)): Flow {\n const channelSelector: ChannelSelector = {\n type: 'CHANNEL',\n channel: 'channel',\n channelOperator: 'EQUALS',\n entrypoints: ['webhook'],\n operations: ['PUBLISH'],\n };\n\n const base: Flow = {\n name: 'Flow name',\n selectors: [channelSelector],\n request: [],\n response: [],\n subscribe: [],\n publish: [],\n enabled: true,\n };\n\n if (isFunction(modifier)) {\n return modifier(base);\n }\n\n return {\n ...base,\n ...modifier,\n };\n}\n\nexport function fakeConditionedChannelFlow(modifier?: Partial<Flow> | ((baseApi: Flow) => Flow)): Flow {\n const base = fakeChannelFlow((baseApi: Flow) => ({\n ...baseApi,\n name: 'Conditioned flow',\n selectors: [\n ...(baseApi.selectors ?? []),\n {\n type: 'CONDITION',\n condition: 'false',\n },\n ],\n }));\n\n if (isFunction(modifier)) {\n return modifier(base);\n }\n\n return {\n ...base,\n ...modifier,\n };\n}\n\nexport function fakeHttpFlow(modifier?: Partial<Flow> | ((baseApi: Flow) => Flow)): Flow {\n const httpSelector: HttpSelector = {\n type: 'HTTP',\n path: '/path',\n pathOperator: 'EQUALS',\n methods: ['GET'],\n };\n\n const base: Flow = {\n name: 'Flow name',\n selectors: [httpSelector],\n request: [],\n response: [],\n subscribe: [],\n publish: [],\n enabled: true,\n };\n\n if (isFunction(modifier)) {\n return modifier(base);\n }\n\n return {\n ...base,\n ...modifier,\n };\n}\n\nexport function fakeConditionedHttpFlow(modifier?: Partial<Flow> | ((baseApi: Flow) => Flow)): Flow {\n const base = fakeHttpFlow((baseApi: Flow) => ({\n ...baseApi,\n name: 'Conditioned flow',\n selectors: [\n ...(baseApi.selectors ?? []),\n {\n type: 'CONDITION',\n condition: 'false',\n },\n ],\n }));\n\n if (isFunction(modifier)) {\n return modifier(base);\n }\n return {\n ...base,\n ...modifier,\n };\n}\n\nexport function fakeNativeFlow(modifier?: Partial<Flow> | ((baseApi: Flow) => Flow)): Flow {\n const base: Flow = {\n name: 'Flow name',\n interact: [],\n subscribe: [],\n publish: [],\n enabled: true,\n };\n\n if (isFunction(modifier)) {\n return modifier(base);\n }\n\n return {\n ...base,\n ...modifier,\n };\n}\n\nexport function fakeMcpFlow(modifier?: Partial<Flow> | ((baseApi: Flow) => Flow)): Flow {\n const mcpSelector: McpSelector = {\n type: 'MCP',\n methods: [],\n };\n\n const base: Flow = {\n name: 'Flow name',\n selectors: [mcpSelector],\n request: [],\n response: [],\n enabled: true,\n };\n\n if (isFunction(modifier)) {\n return modifier(base);\n }\n\n return {\n ...base,\n ...modifier,\n };\n}\nexport function fakeLlmFlow(modifier?: Partial<Flow> | ((baseApi: Flow) => Flow)): Flow {\n const httpSelector: HttpSelector = {\n type: 'HTTP',\n path: '/path',\n pathOperator: 'EQUALS',\n methods: ['GET'],\n };\n\n const base: Flow = {\n name: 'Flow name',\n selectors: [httpSelector],\n request: [],\n response: [],\n enabled: true,\n };\n\n if (isFunction(modifier)) {\n return modifier(base);\n }\n return {\n ...base,\n ...modifier,\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 */\nimport { isFunction } from 'lodash';\n\nimport { FlowExecution } from './FlowExecution';\n\nexport function fakeBestMatchFlowExecution(modifier?: Partial<FlowExecution> | ((baseApi: FlowExecution) => FlowExecution)): FlowExecution {\n const base: FlowExecution = {\n mode: 'BEST_MATCH',\n matchRequired: false,\n };\n\n if (isFunction(modifier)) {\n return modifier(base);\n }\n\n return {\n ...base,\n ...modifier,\n };\n}\n\nexport function fakeDefaultFlowExecution(modifier?: Partial<FlowExecution> | ((baseApi: FlowExecution) => FlowExecution)): FlowExecution {\n const base: FlowExecution = {\n mode: 'DEFAULT',\n matchRequired: false,\n };\n\n if (isFunction(modifier)) {\n return modifier(base);\n }\n\n return {\n ...base,\n ...modifier,\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\nimport { isFunction } from 'lodash';\n\nimport { Policy, PolicyInput } from './Policy';\n\n// 09/06/2023 - All API V4 available policies.\nexport const POLICIES_V4_UNREGISTERED_ICON: Policy[] = [\n {\n id: 'message-filtering',\n name: 'Message Filtering',\n description: 'Message Filtering Gravitee Policy',\n category: 'others',\n version: '1.1.1',\n flowPhaseCompatibility: {\n HTTP_PROXY: [],\n HTTP_MESSAGE: ['SUBSCRIBE', 'PUBLISH'],\n },\n },\n {\n id: 'json-xml',\n name: 'JSON to XML',\n description: 'Description of the JSON to XML Transformation Gravitee Policy',\n icon: 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxMDAuNzEgMTEyLjgyIj48ZGVmcz48c3R5bGU+LmNscy0xe2ZpbGw6Izg2YzNkMDt9LmNscy0ye2ZpbGw6I2ZmZjt9LmNscy0ze2ZvbnQtc2l6ZToxMnB4O2ZpbGw6IzFkMWQxYjtmb250LWZhbWlseTpNeXJpYWRQcm8tUmVndWxhciwgTXlyaWFkIFBybzt9LmNscy00e2xldHRlci1zcGFjaW5nOi0wLjAxZW07fTwvc3R5bGU+PC9kZWZzPjxnIGlkPSJBUEkiPjxwYXRoIGNsYXNzPSJjbHMtMSIgZD0iTTUwLjM1LDEzLjM3YTQzLDQzLDAsMSwwLDQzLjA1LDQzQTQzLDQzLDAsMCwwLDUwLjM1LDEzLjM3WiIvPjxwYXRoIGNsYXNzPSJjbHMtMiIgZD0iTTUxLjUsNjQuOTJBNi41Myw2LjUzLDAsMSwxLDU4LDU4LjM5LDYuNTMsNi41MywwLDAsMSw1MS41LDY0LjkyWm0wLTExLjM0YTQuODEsNC44MSwwLDEsMCw0LjgxLDQuODFBNC44MSw0LjgxLDAsMCwwLDUxLjUsNTMuNThaIi8+PHBhdGggY2xhc3M9ImNscy0yIiBkPSJNNjMuOCw3Ny4wOWE0LjgzLDQuODMsMCwxLDEsMy42OS03LjkyLDQuNzQsNC43NCwwLDAsMSwxLjEzLDMuMDlBNC44Myw0LjgzLDAsMCwxLDYzLjgsNzcuMDlabTAtNy45M2EzLjExLDMuMTEsMCwxLDAsMi4zOCwxLjEyQTMuMSwzLjEsMCwwLDAsNjMuOCw2OS4xNloiLz48cGF0aCBjbGFzcz0iY2xzLTIiIGQ9Ik01MS41LDQzLjY4YTQuODUsNC44NSwwLDAsMS00Ljc3LTQuMTQsNSw1LDAsMCwxLDAtLjY5LDQuODMsNC44MywwLDAsMSw5LjY1LDAsMy40NSwzLjQ1LDAsMCwxLS4wNy43NEE0LjgxLDQuODEsMCwwLDEsNTEuNSw0My42OFptMC03LjkzYTMuMSwzLjEsMCwwLDAtMy4xLDMuMSwzLjI1LDMuMjUsMCwwLDAsMCwuNDQsMy4xLDMuMSwwLDAsMCw2LjE0LDAsMi42NiwyLjY2LDAsMCwwLDAtLjQ1QTMuMTEsMy4xMSwwLDAsMCw1MS41LDM1Ljc1WiIvPjxwYXRoIGNsYXNzPSJjbHMtMiIgZD0iTTMzLjY0LDcwLjE1YTQuODMsNC44MywwLDAsMS0xLjM3LTkuNDYsNSw1LDAsMCwxLDEuMzctLjE5LDQuODIsNC44MiwwLDAsMSw0LjgyLDQuODIsNC44Nyw0Ljg3LDAsMCwxLTIuNzEsNC4zNUE0LjczLDQuNzMsMCwwLDEsMzMuNjQsNzAuMTVabTAtNy45M2EzLDMsMCwwLDAtLjg5LjEzLDMuMSwzLjEsMCwwLDAsLjg5LDYuMDhBMywzLDAsMCwwLDM1LDY4LjEyYTMuMTEsMy4xMSwwLDAsMC0xLjM1LTUuOVoiLz48cGF0aCBjbGFzcz0iY2xzLTIiIGQ9Ik0zMi4xOCw1Ni4zNWgtLjEyYS44Ny44NywwLDAsMS0uNzMtMUEyMC40NywyMC40NywwLDAsMSw0Miw0MC4zM2EuODYuODYsMCwxLDEsLjgsMS41MkExOC43NywxOC43NywwLDAsMCwzMyw1NS42MS44Ni44NiwwLDAsMSwzMi4xOCw1Ni4zNVoiLz48cGF0aCBjbGFzcz0iY2xzLTIiIGQ9Ik01MS41LDc4Ljc5YTIwLjE3LDIwLjE3LDAsMCwxLTEyLjI3LTQuMTEuODYuODYsMCwwLDEtLjE3LTEuMjEuODUuODUsMCwwLDEsMS4yLS4xNkExOC41MiwxOC41MiwwLDAsMCw1MS41LDc3LjA3LDE4LjIzLDE4LjIzLDAsMCwwLDU1LDc2LjczYS44Ny44NywwLDAsMSwuMzMsMS43QTIwLjg3LDIwLjg3LDAsMCwxLDUxLjUsNzguNzlaIi8+PHBhdGggY2xhc3M9ImNscy0yIiBkPSJNNzAsNjUuNDJhLjg0Ljg0LDAsMCwxLS4yNywwLC44Ni44NiwwLDAsMS0uNTQtMS4wOSwxOC43MSwxOC43MSwwLDAsMC04LjU1LTIyLjE3Ljg2Ljg2LDAsMSwxLC44NS0xLjUsMjAuNDIsMjAuNDIsMCwwLDEsOS4zMywyNC4yMUEuODcuODcsMCwwLDEsNzAsNjUuNDJaIi8+PC9nPjxnIGlkPSJIT1NUSU5HIj48dGV4dCBjbGFzcz0iY2xzLTMiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE3LjkzIC00Ljk4KSI+WE1MIDx0c3BhbiBjbGFzcz0iY2xzLTQiIHg9IjI0LjcxIiB5PSIwIj50PC90c3Bhbj48dHNwYW4geD0iMjguNjEiIHk9IjAiPm8gSlNPTjwvdHNwYW4+PC90ZXh0PjwvZz48L3N2Zz4=',\n category: 'transformation',\n version: '2.1.4',\n flowPhaseCompatibility: {\n HTTP_PROXY: ['REQUEST', 'RESPONSE'],\n HTTP_MESSAGE: ['SUBSCRIBE', 'PUBLISH'],\n },\n },\n {\n id: 'avro-json',\n name: 'Avro JSON Transformation',\n description: 'Policy used to transform Avro to JSON',\n icon: 'data:image/svg+xml;base64,PHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjUxMnB4IiBoZWlnaHQ9IjUxMnB4Ij48cGF0aCBkPSJNMTcwLjkxNjY3MTgsMzAzLjU3MTYyNDhoLTYuMzQzNDE0M2wzLjY1OTI4NjUtMTUuNDk2MzM3OUwxNzAuOTE2NjcxOCwzMDMuNTcxNjI0OHogTTIxOC44NDU1ODExLDIxMy41OTI4ODAybC0zMy45MTM1NTksMjMuNTE3MjExOWMtMzEuMTk2MDQ0OS0zMC44NDg4NjE3LTgxLjI2NzUzMjMtMy4xMDUzNDY3LTE0NS4yNzcwNjkxLTMxLjk1NDgwMzVDOTMuMzc1MjM2NSwyMTcuOTY2ODQyNywxNjUuMjA1MDE3MSwxOTAuNDQzNjQ5MywyMTguODQ1NTgxMSwyMTMuNTkyODgwMnogTTQxLjUwNzQxMiwyMTYuMjQ4NTA0NmMzMS4zNTk3NTI3LDExLjY5MzY5NTEsNjEuODQwMjc0OCwxNi4xMzY4NDA4LDk0LjIyNzMyNTQsMTQuNjM3MDg1YzMuNTMyOTU5LDEuNTc2MjAyNCw2LjMzODQyNDcsNS4wMjUxMTYsNy45NDYzMDQzLDguMzEwNzc1OEM4My4yODA4MDc1LDI0NS4xMzg1MTkzLDU2LjEwNzQ5ODIsMjI3LjAzOTMzNzIsNDEuNTA3NDEyLDIxNi4yNDg1MDQ2eiBNNTUuMDY1NzczLDIzNS4wMzQ3MTM3YzI4Ljc4NDI0ODQsMTEuMDQ3NTc2OSw1NC44ODU4MDMyLDE3LjU3MjQ3OTIsOTIuMDUzNjQyMywxMS4wNTU2OTQ2YzAsMCw1LjUwOTgxMTQsNC40MzA5OTk4LDUuNjYxNjk3NCw2LjczMzYyNzNDMTAyLjgyODg1NzQsMjYyLjEzMjMyNDIsODMuMzU2MDU2MiwyNTQuMDE2NjkzMSw1NS4wNjU3NzMsMjM1LjAzNDcxMzd6IE0xNTQuNTg0ODU0MSwyNjAuNDQyOTYyNmMtMjcuMDAxNTMzNSwxNC40NTA5Mjc3LTYyLjQ3NzgxMzcsMTAuNTAxMDA3MS03MC42MjIxMDA4LTAuMzQ2MjUyNEMxMTMuMjc0MzQ1NCwyNjUuODk4Mjg0OSwxMzIuNDMzMDEzOSwyNjQuODczMzUyMSwxNTQuNTg0ODU0MSwyNjAuNDQyOTYyNnogTTQ3Mi4zNDUwMzE3LDIwNS4xNTUyODg3Yy02NC4wMDk1MjE1LDI4Ljg0OTQ1NjgtMTE0LjA4MDk5MzcsMS4xMDU5NDE4LTE0NS4yNzcwNjkxLDMxLjk1NDgwMzVsLTMzLjkxMzU0MzctMjMuNTE3MjExOUMzNDYuNzk0OTgyOSwxOTAuNDQzNjQ5Myw0MTguNjI0NzU1OSwyMTcuOTY2ODQyNyw0NzIuMzQ1MDMxNywyMDUuMTU1Mjg4N3ogTTM2OC4zMTg5Njk3LDIzOS4xOTYzNjU0YzEuNjA3ODQ5MS0zLjI4NTY1OTgsNC40MTMzMzAxLTYuNzM0NTczNCw3Ljk0NjI4OTEtOC4zMTA3NzU4YzMyLjM4NzA1NDQsMS40OTk3NTU5LDYyLjg2NzU4NDItMi45NDMzODk5LDk0LjIyNzMyNTQtMTQuNjM3MDg1QzQ1NS44OTI0ODY2LDIyNy4wMzkzMzcyLDQyOC43MTkxNzcyLDI0NS4xMzg1MTkzLDM2OC4zMTg5Njk3LDIzOS4xOTYzNjU0eiBNMzU5LjIxODkwMjYsMjUyLjgyNDAzNTZjMC4xNTE4NTU1LTIuMzAyNjI3Niw1LjY2MTY4MjEtNi43MzM2MjczLDUuNjYxNjgyMS02LjczMzYyNzNjMzcuMTY3ODQ2Nyw2LjUxNjc4NDcsNjMuMjY5NDA5Mi0wLjAwODExNzcsOTIuMDUzNjQ5OS0xMS4wNTU2OTQ2QzQyOC42NDM5NTE0LDI1NC4wMTY2OTMxLDQwOS4xNzExNDI2LDI2Mi4xMzIzMjQyLDM1OS4yMTg5MDI2LDI1Mi44MjQwMzU2eiBNNDI4LjAzNzIzMTQsMjYwLjA5NjcxMDJjLTguMTQ0MjU2NiwxMC44NDcyNTk1LTQzLjYyMDU0NDQsMTQuNzk3MTgwMi03MC42MjIwNzAzLDAuMzQ2MjUyNEMzNzkuNTY2OTg2MSwyNjQuODczMzUyMSwzOTguNzI1NjQ3LDI2NS44OTgyODQ5LDQyOC4wMzcyMzE0LDI2MC4wOTY3MTAyeiBNMTQ3LjIwMDUzMSwzMTguNDk3MjgzOUg5OC41OTU4NjMzbDYwLjEwMzI5NDQtNDAuMjE5MDI0N0wxNDcuMjAwNTMxLDMxOC40OTcyODM5eiBNMTYwLjQxNzU1NjgsMzE4LjY2MDQwMDRsMS4xMjUwNDU4LTQuOTUzMzY5MWgxMS45OTE0MjQ2bDAuOTgxMjE2NCw0Ljk1MzM2OTFIMTYwLjQxNzU1Njh6IE0xODguMzEzODU4LDMxOC43NzAxMTExbC0xNC40NjAwMjItNTAuNTgyNzYzN2wxOS4xNjM4NjQxLTEzLjIzNTI5MDVsMTkuNDQ1MDUzMSw2My44MTgwNTQySDE4OC4zMTM4NTh6IE0yMDQuNjQ3ODI3MSwyNDcuMjI4NDg1MWwzMC40NDY1NDg1LTIwLjYyOTgzN2wtMTYuNDUyNjY3Miw2Ny43NjY3MDg0TDIwNC42NDc4MjcxLDI0Ny4yMjg0ODUxeiBNMjUzLjc1OTAxNzksMzE4LjQ0MTA3MDZoLTI4LjU1NDUxOTdsMjUuMTYzNDIxNi0xMDEuOTY5OTcwN2wzLjM5MTA5OC0xLjg2NDYwODhWMzE4LjQ0MTA3MDZ6IE0yNjUuOTcwNTUwNSwyMzEuMjY5MzYzNGMyNi4xNTI5NTQxLDI0Ljg1Nzk1NTksMjkuMDIxODgxMSwzNi4yNTI5NzU1LDAsMzcuNDExNTc1M1YyMzEuMjY5MzYzNHogTTI2Ni4xMzUwNzA4LDMxOC42NjA0MDA0bDAuMDQ1NzE1My0zMi44NTA0NjM5bDIyLjc2ODY0NjIsMzIuODUwNDYzOUgyNjYuMTM1MDcwOHogTTMwMy4zNTQ2MTQzLDMxOC42NjA0NjE0bC0yNS44ODU0OTgtMzguNTU0MTM4MmMyNC44ODgwOTItNS43ODE1ODU3LDI5LjAzMjE5Ni0yMi4yNjQ4NjIxLDguMDk4Mjk3MS00Ny40MjAxODEzYzE1LjQyODk4NTYsMTAuNzMwODA0NCwzMS4yNjAxMzE4LDIwLjYwMjM3MTIsNDYuNTA2MjI1NiwzMS41NzA4NDY2Yy0yMS40MjgyMjI3LDguMjUxNzctMjguMzY2MDg4OSwzOS40MDI0MzUzLTIuOTI0ODk2Miw1NC40MDM0NzI5SDMwMy4zNTQ2MTQzeiBNMzI3LjU4Mzg2MjMsMjk5LjgyNDY0NmMtOS42NDE4MTUyLTE4Ljc4MDI0MjksMTYuNTM3MjkyNS0zNy4yMzYyNjcxLDIyLjQ3ODAyNzMtMTAuMzk1MDgwNkMzNTIuMDAyNTk0LDMwNS44NzY5MjI2LDMzNS41MjY3NjM5LDMxNS4xODQxNzM2LDMyNy41ODM4NjIzLDI5OS44MjQ2NDZ6IE00MTMuMjAzNjQzOCwzMTguMzg2MjMwNWgtNjcuNjM4NzMyOWMxMy4xMjM4NDAzLTYuMDkzNTk3NCwxOS45MjA3NzY0LTIwLjc5NjE3MzEsMTYuMDMyMTY1NS0zNC43MzM0MjlMNDEzLjIwMzY0MzgsMzE4LjM4NjIzMDV6IE0yMjguODQyMzYxNSwyMDcuNDAzODU0NGMtODIuMjkwMTE1NC0zOC4wNzIwNjczLTE3MC45NzQ3MTYyLDI0LjgzMTgzMjktMjI4LjgxMzU5ODYtMzEuMjg0NzljLTEuMDczMDQ5NywyMC41NTQ5NjIyLDI4LjE1MzU2NDUsMzkuOTczMjIwOCw0MC44NjkyNDc0LDU4LjI4NTQxNTZjNy4yNTAyNDAzLDEzLjEwNTU0NSwyMS43OTM3MzkzLDI1LjE5NTA5ODksMzQuNjYwMzI3OSwzMS4xMzIxMTA2YzguMTc5NjQ5NCwxNC4zNjc5NTA0LDE3LjczMDE4NjUsMTMuMDAwNzAxOSw0NS44NDgxMTQsMTMuNjc0MDExMmwtODMuMTc3MzY4Miw1Ni42NzAzMTg2aDQzNS44ODU5MjUzbC04My41MjE0ODQ0LTU2LjY3MDMxODZjMjguMTE3OTUwNC0wLjY3MzMwOTMsMzcuNjY4NDg3NSwwLjY5MzkzOTIsNDUuODQ4MTE0LTEzLjY3NDAxMTJjMTIuODY2NjA3Ny01LjkzNzAxMTcsMjcuNDEwMDk1Mi0xOC4wMjY1NjU2LDM0LjY2MDMzOTQtMzEuMTMyMTEwNmMxMi43MTU2Njc3LTE4LjMxMjE5NDgsNDEuOTQyMzIxOC0zNy43MzA0NTM1LDQwLjg2OTIzMjItNTguMjg1NDE1NmMtNTcuODM4ODY3Miw1Ni4xMTY2MjI5LTE0Ni40OTc2NTAxLTYuNzg3Mjc3Mi0yMjguNzg3NzgwOCwzMS4yODQ3OWwtMjcuMTc1OTMzOC0xOC4wNzk2NTA5TDIyOC44NDIzNjE1LDIwNy40MDM4NTQ0eiIvPjwvc3ZnPg==',\n category: 'transformation',\n version: '1.2.0-alpha.2',\n flowPhaseCompatibility: {\n HTTP_PROXY: ['REQUEST', 'RESPONSE'],\n HTTP_MESSAGE: ['SUBSCRIBE', 'PUBLISH'],\n },\n },\n {\n id: 'jwt',\n name: 'JSON Web Tokens',\n description: 'Description of the JWT Gravitee Policy',\n icon: 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxMDAuNzEgMTEyLjgyIj48ZGVmcz48c3R5bGU+LmNscy0xe2ZpbGw6Izg2YzNkMDt9LmNscy0ye2ZpbGw6I2ZmZjt9LmNscy0ze2ZvbnQtc2l6ZToxMnB4O2ZpbGw6IzFkMWQxYjtmb250LWZhbWlseTpNeXJpYWRQcm8tUmVndWxhciwgTXlyaWFkIFBybzt9LmNscy00e2xldHRlci1zcGFjaW5nOjAuMDNlbTt9PC9zdHlsZT48L2RlZnM+PGcgaWQ9IkFQSSI+PHBhdGggY2xhc3M9ImNscy0xIiBkPSJNNTAuMzUsMTMuMzdhNDMsNDMsMCwxLDAsNDMuMDUsNDNBNDMsNDMsMCwwLDAsNTAuMzUsMTMuMzdaIi8+PHBhdGggY2xhc3M9ImNscy0yIiBkPSJNNDEuNzksNjEuNjdhMTMuODIsMTMuODIsMCwxLDEsMTIuNTctOCwuODcuODcsMCwwLDEtMS4xNS40Mi44Ni44NiwwLDAsMS0uNDItMS4xNCwxMi4xMiwxMi4xMiwwLDEsMC0yLjQ0LDMuNDkuODYuODYsMCwxLDEsMS4yMiwxLjIyQTEzLjgsMTMuOCwwLDAsMSw0MS43OSw2MS42N1oiLz48cGF0aCBjbGFzcz0iY2xzLTIiIGQ9Ik02OC4zMSw3OC44YTQuNCw0LjQsMCwwLDEtMy4xNC0xLjNMNTUuNiw2Ny45M2EuODYuODYsMCwxLDEsMS4yMi0xLjIybDkuNTcsOS41N2EyLjc3LDIuNzcsMCwwLDAsMy44NCwwLDIuNzIsMi43MiwwLDAsMCwwLTMuODNsLTkuNTctOS41OGEyLjc5LDIuNzksMCwwLDAtMy44NCwwLC44OC44OCwwLDAsMS0xLjIyLDBsLTUuMjUtNS4yNGEuODguODgsMCwwLDEsMC0xLjIyLjg2Ljg2LDAsMCwxLDEuMjIsMGw0LjcsNC43YTQuNDMsNC40MywwLDAsMSw1LjYuNTVsOS41OCw5LjU3YTQuNDQsNC40NCwwLDAsMS0zLjE0LDcuNTdaIi8+PHBhdGggY2xhc3M9ImNscy0yIiBkPSJNNDYuMzYsNTMuMjdhLjg1Ljg1LDAsMCwxLS42MS0uMjVsLTkuMTQtOS4xM2EuODguODgsMCwwLDEsMC0xLjIyLjg2Ljg2LDAsMCwxLDEuMjIsMEw0Nyw1MS44QS44OC44OCwwLDAsMSw0Nyw1MywuODUuODUsMCwwLDEsNDYuMzYsNTMuMjdaIi8+PHBhdGggY2xhc3M9ImNscy0yIiBkPSJNMzcuMjIsNTMuMjdhLjg1Ljg1LDAsMCwxLS42MS0uMjUuODguODgsMCwwLDEsMC0xLjIybDkuMTQtOS4xM2EuODYuODYsMCwwLDEsMS4yMiwwLC44OC44OCwwLDAsMSwwLDEuMjJMMzcuODMsNTNBLjg1Ljg1LDAsMCwxLDM3LjIyLDUzLjI3WiIvPjwvZz48ZyBpZD0iSE9TVElORyI+PHRleHQgY2xhc3M9ImNscy0zIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNy45MyAtNC45OCkiPko8dHNwYW4gY2xhc3M9ImNscy00IiB4PSI0LjQ0IiB5PSIwIj5XPC90c3Bhbj48dHNwYW4geD0iMTQuOTkiIHk9IjAiPlQ8L3RzcGFuPjwvdGV4dD48L2c+PC9zdmc+',\n category: 'security',\n version: '3.2.0',\n flowPhaseCompatibility: {\n HTTP_PROXY: ['REQUEST'],\n HTTP_MESSAGE: ['REQUEST'],\n },\n },\n {\n id: 'key-less',\n name: 'Keyless',\n description: 'Description of the Keyless Security Gravitee Policy',\n icon: 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxMDAuNzEgMTEyLjgyIj48ZGVmcz48c3R5bGU+LmNscy0xe2ZpbGw6Izg2YzNkMDt9LmNscy0ye2ZpbGw6I2ZmZjt9LmNscy0ze2ZpbGw6bm9uZTtzdHJva2U6I2ZmZjtzdHJva2UtbWl0ZXJsaW1pdDoxMDtzdHJva2Utd2lkdGg6MnB4O308L3N0eWxlPjwvZGVmcz48ZyBpZD0iQVBJIj48cGF0aCBjbGFzcz0iY2xzLTEiIGQ9Ik01MC4zNSwxNC4yNGE0Myw0MywwLDEsMCw0My4wNSw0M0E0Myw0MywwLDAsMCw1MC4zNSwxNC4yNFoiLz48L2c+PGcgaWQ9IkhPU1RJTkciPjxwYXRoIGNsYXNzPSJjbHMtMiIgZD0iTTU3LjU2LDg4LjYzSDQzLjE1YTIuOSwyLjksMCwwLDEtMi45LTIuOVY3Ni42MmEyLjg5LDIuODksMCwwLDEsMi45LTIuODlINTcuNTZhMi44OSwyLjg5LDAsMCwxLDIuOSwyLjg5djkuMTFBMi45LDIuOSwwLDAsMSw1Ny41Niw4OC42M1pNNDMuMTUsNzYuMTRhLjQ4LjQ4LDAsMCwwLS40OS40OHY5LjExYS40OS40OSwwLDAsMCwuNDkuNDlINTcuNTZhLjQ5LjQ5LDAsMCwwLC40OS0uNDlWNzYuNjJhLjQ4LjQ4LDAsMCwwLS40OS0uNDhaIi8+PHBhdGggY2xhc3M9ImNscy0yIiBkPSJNNTAuMzUsNjMuNjJBNy41OCw3LjU4LDAsMCwwLDQyLjg5LDcwaDIuNDdhNS4xNSw1LjE1LDAsMCwxLDEwLjE1LDEuMjN2My43NGExLjIxLDEuMjEsMCwxLDAsMi40MSwwVjcxLjE5QTcuNTgsNy41OCwwLDAsMCw1MC4zNSw2My42MloiLz48cGF0aCBjbGFzcz0iY2xzLTMiIGQ9Ik0yNi4xNiw0Ny40M2EyNS4yMiwyNS4yMiwwLDAsMSw0OC4zOS0uMzEiLz48cGF0aCBjbGFzcz0iY2xzLTMiIGQ9Ik0zMi4xMiw1Mi44YTE5LDE5LDAsMCwxLDM2LjQ3LS4yMyIvPjxwYXRoIGNsYXNzPSJjbHMtMyIgZD0iTTM5LjM0LDU2LjY1YTExLDExLDAsMCwxLDIxLjE3LS4xNCIvPjwvZz48L3N2Zz4=',\n category: 'security',\n version: '2.2.0',\n flowPhaseCompatibility: {\n HTTP_PROXY: ['REQUEST'],\n HTTP_MESSAGE: ['REQUEST'],\n },\n },\n {\n id: 'api-key',\n name: 'Api Key',\n description: 'Description of the ApiKey Gravitee Policy',\n icon: 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxMDAuNzEgMTEyLjgyIj48ZGVmcz48c3R5bGU+LmNscy0xe2ZpbGw6Izg2YzNkMDt9LmNscy0ye2ZpbGw6I2ZmZjt9LmNscy0ze2ZvbnQtc2l6ZToxMnB4O2ZpbGw6IzFkMWQxYjtmb250LWZhbWlseTpNeXJpYWRQcm8tUmVndWxhciwgTXlyaWFkIFBybzt9LmNscy00e2xldHRlci1zcGFjaW5nOjBlbTt9PC9zdHlsZT48L2RlZnM+PGcgaWQ9IkFQSSI+PHBhdGggY2xhc3M9ImNscy0xIiBkPSJNNTAuMzUsMTMuMzdhNDMsNDMsMCwxLDAsNDMuMDUsNDNBNDMsNDMsMCwwLDAsNTAuMzUsMTMuMzdaIi8+PHBhdGggY2xhc3M9ImNscy0yIiBkPSJNNjcuMzMsNzguNjVIMzkuNzhBMi42MSwyLjYxLDAsMCwxLDM3LjE3LDc2VjcxLjg4YS44NC44NCwwLDAsMSwuMzYtLjcsNy4wNiw3LjA2LDAsMCwwLDItMi4yMS44NS44NSwwLDAsMSwuNzUtLjQzSDQyLjZMNDUsNjYuNzlhLjg2Ljg2LDAsMCwxLDEtLjA1bDIuNzIsMS42NCwyLjUzLTEuNjJhLjg2Ljg2LDAsMCwxLDEsMGwuNDkuMzhWNjIuNDZINDAuMjhhLjg2Ljg2LDAsMCwxLS43NS0uNDQsNi43Niw2Ljc2LDAsMCwwLTItMi4xOS44OC44OCwwLDAsMS0uMzYtLjcxVjU1YTIuNjIsMi42MiwwLDAsMSwyLjYxLTIuNjJINjcuMzNBMi42MywyLjYzLDAsMCwxLDcwLDU1Vjc2QTIuNjIsMi42MiwwLDAsMSw2Ny4zMyw3OC42NVpNMzguOSw3Mi4zMlY3NmEuODkuODksMCwwLDAsLjg4Ljg4SDY3LjMzYS44Ny44NywwLDAsMCwuODgtLjg4VjU1YS44OC44OCwwLDAsMC0uODgtLjg4SDM5Ljc4YS44OS44OSwwLDAsMC0uODguODh2My43MmE4LjYyLDguNjIsMCwwLDEsMS44NywySDUzLjU1YS44Ny44NywwLDAsMSwuODcuODdWNjlhLjg3Ljg3LDAsMCwxLS40OS43OC44Ni44NiwwLDAsMS0uOTEtLjFsLTEuNDEtMS4xMS0yLjQ2LDEuNTlhLjg3Ljg3LDAsMCwxLS45MiwwbC0yLjY5LTEuNjJMNDMuNCw3MC4xMWEuOTQuOTQsMCwwLDEtLjUyLjE2SDQwLjc3QTguNjksOC42OSwwLDAsMSwzOC45LDcyLjMyWiIvPjxwYXRoIGNsYXNzPSJjbHMtMiIgZD0iTTY1Ljg0LDU0LjA4SDYxLjQ3YS44Ny44NywwLDAsMS0uODctLjg3di01LjlhNyw3LDAsMCwwLTE0LjA4LDB2NS45YS44Ny44NywwLDAsMS0uODcuODdINDEuMjhhLjg3Ljg3LDAsMCwxLS44Ny0uODd2LTUuOWExMy4xNSwxMy4xNSwwLDEsMSwyNi4zLDB2NS45QS44Ny44NywwLDAsMSw2NS44NCw1NC4wOFptLTMuNS0xLjc0SDY1di01YTExLjQxLDExLjQxLDAsMSwwLTIyLjgyLDB2NWgyLjYzdi01YTguNzgsOC43OCwwLDAsMSwxNy41NiwwWiIvPjxwYXRoIGNsYXNzPSJjbHMtMiIgZD0iTTMxLjcxLDY5YTMuNTEsMy41MSwwLDEsMSwzLjUxLTMuNTFBMy41MSwzLjUxLDAsMCwxLDMxLjcxLDY5Wm0wLTUuMjlhMS43OCwxLjc4LDAsMSwwLDEuNzcsMS43OEExLjc4LDEuNzgsMCwwLDAsMzEuNzEsNjMuNzJaIi8+PHBhdGggY2xhc3M9ImNscy0yIiBkPSJNMzMuNDgsNzQuMjJhOC43Miw4LjcyLDAsMSwxLDUuMDYtMTUuODEsOC41OSw4LjU5LDAsMCwxLDIuMjMsMi4zMUg1My41NWEuODcuODcsMCwwLDEsLjg3Ljg3VjY5YS44Ny44NywwLDAsMS0uNDkuNzguODYuODYsMCwwLDEtLjkxLS4xbC0xLjQxLTEuMTEtMi40NiwxLjU5YS44Ny44NywwLDAsMS0uOTIsMGwtMi42OS0xLjYyTDQzLjQsNzAuMTFhLjk0Ljk0LDAsMCwxLS41Mi4xNkg0MC43N2E4Ljc1LDguNzUsMCwwLDEtNy4yOSw0Wm0wLTE1LjY5YTcsNywwLDEsMCw0LjA1LDEyLjY1LDcuMDYsNy4wNiwwLDAsMCwyLTIuMjEuODUuODUsMCwwLDEsLjc1LS40M0g0Mi42TDQ1LDY2Ljc5YS44Ni44NiwwLDAsMSwxLS4wNWwyLjcyLDEuNjQsMi41My0xLjYyYS44Ni44NiwwLDAsMSwxLDBsLjQ5LjM4VjYyLjQ2SDQwLjI4YS44Ni44NiwwLDAsMS0uNzUtLjQ0LDYuNzYsNi43NiwwLDAsMC0yLTIuMTlBNi45Myw2LjkzLDAsMCwwLDMzLjQ4LDU4LjUzWk0zMS43MSw2OWEzLjUxLDMuNTEsMCwxLDEsMy41MS0zLjUxQTMuNTEsMy41MSwwLDAsMSwzMS43MSw2OVptMC01LjI5YTEuNzgsMS43OCwwLDEsMCwxLjc3LDEuNzhBMS43OCwxLjc4LDAsMCwwLDMxLjcxLDYzLjcyWiIvPjxwYXRoIGNsYXNzPSJjbHMtMiIgZD0iTTMxLjcxLDY5YTMuNTEsMy41MSwwLDEsMSwzLjUxLTMuNTFBMy41MSwzLjUxLDAsMCwxLDMxLjcxLDY5Wm0wLTUuMjlhMS43OCwxLjc4LDAsMSwwLDEuNzcsMS43OEExLjc4LDEuNzgsMCwwLDAsMzEuNzEsNjMuNzJaIi8+PHBhdGggY2xhc3M9ImNscy0yIiBkPSJNNTMuNTYsNzMuNjlhLjg3Ljg3LDAsMCwxLS44Ny0uODdWNjlhLjg3Ljg3LDAsMCwxLDEuNzQsMHYzLjg1QS44Ny44NywwLDAsMSw1My41Niw3My42OVoiLz48cGF0aCBjbGFzcz0iY2xzLTIiIGQ9Ik01My41Niw2Mi4zN2EuODcuODcsMCwwLDEtLjg3LS44N1Y1Ny42NWEuODcuODcsMCwwLDEsMS43NCwwVjYxLjVBLjg3Ljg3LDAsMCwxLDUzLjU2LDYyLjM3WiIvPjwvZz48ZyBpZD0iSE9TVElORyI+PHRleHQgY2xhc3M9ImNscy0zIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNy45MyAtNC45OCkiPjx0c3BhbiBjbGFzcz0iY2xzLTQiPkE8L3RzcGFuPjx0c3BhbiB4PSI3LjMxIiB5PSIwIj5waSBLZXk8L3RzcGFuPjwvdGV4dD48L2c+PC9zdmc+',\n category: 'security',\n version: '3.2.1',\n flowPhaseCompatibility: {\n HTTP_PROXY: ['REQUEST'],\n HTTP_MESSAGE: ['REQUEST'],\n },\n },\n {\n id: 'oauth2',\n name: 'OAuth2',\n description: 'Description of the OAuth2 Gravitee Policy',\n icon: 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxMDAuNzEgMTEyLjgyIj48ZGVmcz48c3R5bGU+LmNscy0xe2ZpbGw6Izg2YzNkMDt9LmNscy0ye2ZpbGw6I2ZmZjt9LmNscy0ze2ZvbnQtc2l6ZToxMnB4O2ZpbGw6IzFkMWQxYjtmb250LWZhbWlseTpNeXJpYWRQcm8tUmVndWxhciwgTXlyaWFkIFBybzt9LmNscy00e2xldHRlci1zcGFjaW5nOi0wLjAxZW07fS5jbHMtNXtsZXR0ZXItc3BhY2luZzowLjAxZW07fS5jbHMtNntsZXR0ZXItc3BhY2luZzowZW07fS5jbHMtN3tsZXR0ZXItc3BhY2luZzotMC4wMWVtO30uY2xzLTh7bGV0dGVyLXNwYWNpbmc6MC4wMWVtO30uY2xzLTl7bGV0dGVyLXNwYWNpbmc6LTAuMDFlbTt9LmNscy0xMHtsZXR0ZXItc3BhY2luZzotMC4wMWVtO30uY2xzLTExe2xldHRlci1zcGFjaW5nOi0wLjAxZW07fTwvc3R5bGU+PC9kZWZzPjxnIGlkPSJBUEkiPjxwYXRoIGNsYXNzPSJjbHMtMSIgZD0iTTUwLjM1LDEzLjM3YTQzLDQzLDAsMSwwLDQzLjA1LDQzQTQzLDQzLDAsMCwwLDUwLjM1LDEzLjM3WiIvPjxwYXRoIGNsYXNzPSJjbHMtMiIgZD0iTTUwLjE5LDMzLjc1YzUuOCwwLDYuNTUuNTMsOC4zNiw2UTYzLjg5LDU1Ljg4LDY5LjIxLDcyYy45MywyLjgxLjA3LDUuMjUtMi4wOCw2LjM4LTIuODgsMS41MS01Ljg3LjMxLTcuMDgtMi45NC0uNzktMi4xMi0xLjMxLTQuMzUtMi4yMy02LjQxYTMuMjksMy4yOSwwLDAsMC0yLjI0LTEuNzcsOTIuMyw5Mi4zLDAsMCwwLTEwLjUyLDAsMy4yNywzLjI3LDAsMCwwLTIuMTksMS44Yy0uODUsMi0xLjMyLDQuMTMtMiw2LjE4LTEuMDYsMy0zLjQ3LDQuMzItNi4xNywzLjQ5LTIuODctLjg4LTQuMTktMy4zNy0zLjIyLTYuNXE1LTE2LjExLDEwLjEyLTMyLjE3QzQzLjQsMzQuMjcsNDQuMTIsMzMuNzUsNTAuMTksMzMuNzVaIi8+PC9nPjxnIGlkPSJIT1NUSU5HIj48dGV4dCBjbGFzcz0iY2xzLTMiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDkyLjQ1IC00Ljk4KSI+T3BlbklEIDx0c3BhbiBjbGFzcz0iY2xzLTQiIHg9IjQxLjE3IiB5PSIwIj5DPC90c3Bhbj48dHNwYW4geD0iNDgiIHk9IjAiPm9ubmU8L3RzcGFuPjx0c3BhbiBjbGFzcz0iY2xzLTUiIHg9IjczLjkyIiB5PSIwIj5jPC90c3Bhbj48dHNwYW4gY2xhc3M9ImNscy02IiB4PSI3OS40NSIgeT0iMCI+dCAtIDwvdHNwYW4+PHRzcGFuIGNsYXNzPSJjbHMtNyIgeD0iOTIuMTkiIHk9IjAiPlU8L3RzcGFuPjx0c3BhbiB4PSI5OS44OSIgeT0iMCI+c2VyPC90c3Bhbj48dHNwYW4gY2xhc3M9ImNscy04IiB4PSIxMTQuNTciIHk9IjAiPkk8L3RzcGFuPjx0c3BhbiB4PSIxMTcuNTYiIHk9IjAiPm48L3RzcGFuPjx0c3BhbiBjbGFzcz0iY2xzLTkiIHg9IjEyNC4yMiIgeT0iMCI+ZjwvdHNwYW4+PHRzcGFuIHg9IjEyNy41NyIgeT0iMCI+bzwvdHNwYW4+PC90ZXh0Pjx0ZXh0IGNsYXNzPSJjbHMtMyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTcuOTMgLTQuOTgpIj48dHNwYW4gY2xhc3M9ImNscy0xMCI+TzwvdHNwYW4+PHRzcGFuIGNsYXNzPSJjbHMtMTEiIHg9IjguMSIgeT0iMCI+QTwvdHNwYW4+PHRzcGFuIHg9IjE1LjMiIHk9IjAiPnV0aDI8L3RzcGFuPjwvdGV4dD48L2c+PC9zdmc+',\n category: 'security',\n version: '2.2.0',\n flowPhaseCompatibility: {\n HTTP_PROXY: ['REQUEST'],\n HTTP_MESSAGE: ['REQUEST'],\n },\n },\n {\n id: 'json-to-json',\n name: 'JSON to JSON Transformation',\n description: 'Description of the JSON to JSON Transformation Gravitee Policy',\n icon: 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxMDAuNzEgMTEyLjgyIj48ZGVmcz48c3R5bGU+LmNscy0xe2ZpbGw6Izg2YzNkMDt9LmNscy0ye2ZpbGw6I2ZmZjt9LmNscy0ze2ZvbnQtc2l6ZToxMnB4O2ZpbGw6IzFkMWQxYjtmb250LWZhbWlseTpNeXJpYWRQcm8tUmVndWxhciwgTXlyaWFkIFBybzt9LmNscy00e2xldHRlci1zcGFjaW5nOi0wLjAxZW07fTwvc3R5bGU+PC9kZWZzPjxnIGlkPSJBUEkiPjxwYXRoIGNsYXNzPSJjbHMtMSIgZD0iTTUwLjM1LDEzLjM3YTQzLDQzLDAsMSwwLDQzLjA1LDQzQTQzLDQzLDAsMCwwLDUwLjM1LDEzLjM3WiIvPjxwYXRoIGNsYXNzPSJjbHMtMiIgZD0iTTYzLjgsNzcuMDlhNC44Myw0LjgzLDAsMSwxLDMuNjktNy45Miw0Ljc0LDQuNzQsMCwwLDEsMS4xMywzLjA5QTQuODMsNC44MywwLDAsMSw2My44LDc3LjA5Wm0wLTcuOTNhMy4xMSwzLjExLDAsMSwwLDIuMzgsMS4xMkEzLjEsMy4xLDAsMCwwLDYzLjgsNjkuMTZaIi8+PHBhdGggY2xhc3M9ImNscy0yIiBkPSJNNTEuNSw0My42OGE0Ljg1LDQuODUsMCwwLDEtNC43Ny00LjE0LDUsNSwwLDAsMSwwLS42OSw0LjgzLDQuODMsMCwwLDEsOS42NSwwLDMuNDUsMy40NSwwLDAsMS0uMDcuNzRBNC44MSw0LjgxLDAsMCwxLDUxLjUsNDMuNjhabTAtNy45M2EzLjEsMy4xLDAsMCwwLTMuMSwzLjEsMy4yNSwzLjI1LDAsMCwwLDAsLjQ0LDMuMSwzLjEsMCwwLDAsNi4xNCwwLDIuNjYsMi42NiwwLDAsMCwwLS40NUEzLjExLDMuMTEsMCwwLDAsNTEuNSwzNS43NVoiLz48cGF0aCBjbGFzcz0iY2xzLTIiIGQ9Ik0zMy42NCw3MC4xNWE0LjgzLDQuODMsMCwwLDEtMS4zNy05LjQ2LDUsNSwwLDAsMSwxLjM3LS4xOSw0LjgyLDQuODIsMCwwLDEsNC44Miw0LjgyLDQuODcsNC44NywwLDAsMS0yLjcxLDQuMzVBNC43Myw0LjczLDAsMCwxLDMzLjY0LDcwLjE1Wm0wLTcuOTNhMywzLDAsMCwwLS44OS4xMywzLjEsMy4xLDAsMCwwLC44OSw2LjA4QTMsMywwLDAsMCwzNSw2OC4xMmEzLjExLDMuMTEsMCwwLDAtMS4zNS01LjlaIi8+PHBhdGggY2xhc3M9ImNscy0yIiBkPSJNMzIuMTgsNTYuMzVoLS4xMmEuODcuODcsMCwwLDEtLjczLTFBMjAuNDcsMjAuNDcsMCwwLDEsNDIsNDAuMzNhLjg2Ljg2LDAsMSwxLC44LDEuNTJBMTguNzcsMTguNzcsMCwwLDAsMzMsNTUuNjEuODYuODYsMCwwLDEsMzIuMTgsNTYuMzVaIi8+PHBhdGggY2xhc3M9ImNscy0yIiBkPSJNNTEuNSw3OC43OWEyMC4xNywyMC4xNywwLDAsMS0xMi4yNy00LjExLjg2Ljg2LDAsMCwxLS4xNy0xLjIxLjg1Ljg1LDAsMCwxLDEuMi0uMTZBMTguNTIsMTguNTIsMCwwLDAsNTEuNSw3Ny4wNywxOC4yMywxOC4yMywwLDAsMCw1NSw3Ni43M2EuODcuODcsMCwwLDEsLjMzLDEuN0EyMC44NywyMC44NywwLDAsMSw1MS41LDc4Ljc5WiIvPjxwYXRoIGNsYXNzPSJjbHMtMiIgZD0iTTcwLDY1LjQyYS44NC44NCwwLDAsMS0uMjcsMCwuODYuODYsMCwwLDEtLjU0LTEuMDksMTguNzEsMTguNzEsMCwwLDAtOC41NS0yMi4xNy44Ni44NiwwLDEsMSwuODUtMS41LDIwLjQyLDIwLjQyLDAsMCwxLDkuMzMsMjQuMjFBLjg3Ljg3LDAsMCwxLDcwLDY1LjQyWiIvPjwvZz48ZyBpZD0iSE9TVElORyI+PHRleHQgY2xhc3M9ImNscy0zIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNy45MyAtNC45OCkiPkpTT04gPHRzcGFuIGNsYXNzPSJjbHMtNCIgeD0iMjkuMDYiIHk9IjAiPnQ8L3RzcGFuPjx0c3BhbiB4PSIzMi45NiIgeT0iMCI+byBKU09OPC90c3Bhbj48L3RleHQ+PC9nPjwvc3ZnPg==',\n category: 'transformation',\n version: '2.1.0',\n flowPhaseCompatibility: {\n HTTP_PROXY: ['REQUEST', 'RESPONSE'],\n HTTP_MESSAGE: ['SUBSCRIBE', 'PUBLISH'],\n },\n },\n {\n id: 'transform-headers',\n name: 'Transform Headers',\n description: 'Description of the Transform Headers Gravitee Policy',\n icon: 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxMDAuNzEgMTEyLjgyIj48ZGVmcz48c3R5bGU+LmNscy0xe2ZpbGw6Izg2YzNkMDt9LmNscy0ye2ZpbGw6I2ZmZjt9LmNscy0ze2ZvbnQtc2l6ZToxMnB4O2ZpbGw6IzFkMWQxYjtmb250LWZhbWlseTpNeXJpYWRQcm8tUmVndWxhciwgTXlyaWFkIFBybzt9LmNscy00e2xldHRlci1zcGFjaW5nOi0wLjAxZW07fTwvc3R5bGU+PC9kZWZzPjxnIGlkPSJBUEkiPjxwYXRoIGNsYXNzPSJjbHMtMSIgZD0iTTUwLjM1LDEzLjM3YTQzLDQzLDAsMSwwLDQzLjA1LDQzQTQzLDQzLDAsMCwwLDUwLjM1LDEzLjM3WiIvPjxwYXRoIGNsYXNzPSJjbHMtMiIgZD0iTTYzLjgsNzcuMDlhNC44Myw0LjgzLDAsMSwxLDMuNjktNy45Miw0Ljc0LDQuNzQsMCwwLDEsMS4xMywzLjA5QTQuODMsNC44MywwLDAsMSw2My44LDc3LjA5Wm0wLTcuOTNhMy4xMSwzLjExLDAsMSwwLDIuMzgsMS4xMkEzLjEsMy4xLDAsMCwwLDYzLjgsNjkuMTZaIi8+PHBhdGggY2xhc3M9ImNscy0yIiBkPSJNNTEuNSw0My42OGE0Ljg1LDQuODUsMCwwLDEtNC43Ny00LjE0LDUsNSwwLDAsMSwwLS42OSw0LjgzLDQuODMsMCwwLDEsOS42NSwwLDMuNDUsMy40NSwwLDAsMS0uMDcuNzRBNC44MSw0LjgxLDAsMCwxLDUxLjUsNDMuNjhabTAtNy45M2EzLjEsMy4xLDAsMCwwLTMuMSwzLjEsMy4yNSwzLjI1LDAsMCwwLDAsLjQ0LDMuMSwzLjEsMCwwLDAsNi4xNCwwLDIuNjYsMi42NiwwLDAsMCwwLS40NUEzLjExLDMuMTEsMCwwLDAsNTEuNSwzNS43NVoiLz48cGF0aCBjbGFzcz0iY2xzLTIiIGQ9Ik0zMy42NCw3MC4xNWE0LjgzLDQuODMsMCwwLDEtMS4zNy05LjQ2LDUsNSwwLDAsMSwxLjM3LS4xOSw0LjgyLDQuODIsMCwwLDEsNC44Miw0LjgyLDQuODcsNC44NywwLDAsMS0yLjcxLDQuMzVBNC43Myw0LjczLDAsMCwxLDMzLjY0LDcwLjE1Wm0wLTcuOTNhMywzLDAsMCwwLS44OS4xMywzLjEsMy4xLDAsMCwwLC44OSw2LjA4QTMsMywwLDAsMCwzNSw2OC4xMmEzLjExLDMuMTEsMCwwLDAtMS4zNS01LjlaIi8+PHBhdGggY2xhc3M9ImNscy0yIiBkPSJNMzIuMTgsNTYuMzVoLS4xMmEuODcuODcsMCwwLDEtLjczLTFBMjAuNDcsMjAuNDcsMCwwLDEsNDIsNDAuMzNhLjg2Ljg2LDAsMSwxLC44LDEuNTJBMTguNzcsMTguNzcsMCwwLDAsMzMsNTUuNjEuODYuODYsMCwwLDEsMzIuMTgsNTYuMzVaIi8+PHBhdGggY2xhc3M9ImNscy0yIiBkPSJNNTEuNSw3OC43OWEyMC4xNywyMC4xNywwLDAsMS0xMi4yNy00LjExLjg2Ljg2LDAsMCwxLS4xNy0xLjIxLjg1Ljg1LDAsMCwxLDEuMi0uMTZBMTguNTIsMTguNTIsMCwwLDAsNTEuNSw3Ny4wNywxOC4yMywxOC4yMywwLDAsMCw1NSw3Ni43M2EuODcuODcsMCwwLDEsLjMzLDEuN0EyMC44NywyMC44NywwLDAsMSw1MS41LDc4Ljc5WiIvPjxwYXRoIGNsYXNzPSJjbHMtMiIgZD0iTTcwLDY1LjQyYS44NC44NCwwLDAsMS0uMjcsMCwuODYuODYsMCwwLDEtLjU0LTEuMDksMTguNzEsMTguNzEsMCwwLDAtOC41NS0yMi4xNy44Ni44NiwwLDEsMSwuODUtMS41LDIwLjQyLDIwLjQyLDAsMCwxLDkuMzMsMjQuMjFBLjg3Ljg3LDAsMCwxLDcwLDY1LjQyWiIvPjwvZz48ZyBpZD0iSE9TVElORyI+PHRleHQgY2xhc3M9ImNscy0zIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNy45MyAtNC45OCkiPkpTT04gPHRzcGFuIGNsYXNzPSJjbHMtNCIgeD0iMjkuMDYiIHk9IjAiPnQ8L3RzcGFuPjx0c3BhbiB4PSIzMi45NiIgeT0iMCI+byBKU09OPC90c3Bhbj48L3RleHQ+PC9nPjwvc3ZnPg==',\n category: 'transformation',\n version: '2.1.0-alpha.2',\n deployed: true,\n flowPhaseCompatibility: {\n HTTP_PROXY: ['REQUEST', 'RESPONSE'],\n HTTP_MESSAGE: ['REQUEST', 'RESPONSE', 'SUBSCRIBE', 'PUBLISH'],\n },\n },\n];\n\nexport function fakeTestPolicy(modifier?: Partial<Policy> | ((base: Policy) => Policy)): Policy {\n const base: Policy = {\n id: 'test-policy',\n name: 'Policy to test UI',\n icon: 'gio:gift',\n flowPhaseCompatibility: {\n A2A_PROXY: ['REQUEST', 'RESPONSE'],\n HTTP_MESSAGE: ['REQUEST', 'RESPONSE', 'SUBSCRIBE', 'PUBLISH'],\n HTTP_PROXY: ['REQUEST', 'RESPONSE'],\n LLM_PROXY: ['REQUEST', 'RESPONSE'],\n MCP_PROXY: ['REQUEST', 'RESPONSE'],\n NATIVE_KAFKA: ['CONNECT', 'INTERACT', 'PUBLISH', 'SUBSCRIBE'],\n },\n };\n\n if (isFunction(modifier)) {\n return modifier(base);\n }\n\n return {\n ...base,\n ...modifier,\n flowPhaseCompatibility: {\n ...base.flowPhaseCompatibility,\n ...modifier?.flowPhaseCompatibility,\n },\n };\n}\n\nexport function fakeAllPolicies(): (PolicyInput | Policy)[] {\n /**\n * @Deprecated to keep as long as we support APIM < 4.6\n */\n const TEST_POLICY_APIM_4_5: PolicyInput = {\n id: 'test-policy-4.5',\n name: 'Policy to test APIM < 4.6',\n icon: undefined,\n proxy: ['REQUEST', 'RESPONSE'],\n message: ['REQUEST', 'RESPONSE', 'MESSAGE_REQUEST', 'MESSAGE_RESPONSE'],\n };\n\n return [\n fakeTestPolicy(),\n fakeTestPolicy({\n id: 'test-policy-empty',\n name: 'Test policy - Witout icon, configuration and documentation',\n icon: undefined,\n }),\n fakeTestPolicy({\n name: 'Test policy - With very long name to test overflow. Lorem ipsum dolor sit amet, consectetur adipiscing elit.',\n description:\n 'Test policy description - With very long name to test overflow. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla quis sem at nibh elementum imperdiet.',\n }),\n fakeTestPolicy({\n name: 'No license policy',\n deployed: false,\n description: 'No license policy should display a lock icon and a clear CTA.',\n }),\n fakeTestPolicy({\n id: 'transformation-policy',\n name: 'transformation policy',\n category: 'transformation',\n flowPhaseCompatibility: {\n HTTP_PROXY: ['REQUEST'],\n },\n }),\n TEST_POLICY_APIM_4_5,\n ...POLICIES_V4_UNREGISTERED_ICON.map(policy => ({\n ...policy,\n // Replace all icons with the policy id. Icons are registred in the IconRegistry before.\n ...(policy.icon ? { icon: `gio-literal:${policy.id}` } : {}),\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 */\nimport { isFunction } from 'lodash';\n\nimport { fakeTestPolicy } from '../policy/Policy.fixture';\n\nimport { Step } from './Step';\n\nexport function fakeTestPolicyStep(modifier?: Partial<Step> | ((base: Step) => Step)): Step {\n const base: Step = {\n name: fakeTestPolicy().name,\n description: 'Test Policy description',\n enabled: true,\n policy: 'test-policy',\n configuration: {\n test: 'test',\n },\n };\n\n if (isFunction(modifier)) {\n return modifier(base);\n }\n\n return {\n ...base,\n ...modifier,\n };\n}\n\nexport function fakeRateLimitStep(modifier?: Partial<Step> | ((base: Step) => Step)): Step {\n const base: Step = {\n name: 'Rate Limit',\n description: 'Step description',\n enabled: true,\n policy: 'rate-limit',\n configuration: {\n rate: {\n limit: 10,\n periodTime: 1,\n periodTimeUnit: 'MINUTES',\n },\n },\n };\n\n if (isFunction(modifier)) {\n return modifier(base);\n }\n\n return {\n ...base,\n ...modifier,\n };\n}\n\nexport function fakeJsonToXmlStep(modifier?: Partial<Step> | ((base: Step) => Step)): Step {\n const base: Step = {\n name: 'JSON to XML',\n description: 'JSON to XML',\n enabled: true,\n policy: 'json-xml',\n configuration: {},\n };\n\n if (isFunction(modifier)) {\n return modifier(base);\n }\n\n return {\n ...base,\n ...modifier,\n };\n}\n\nexport function fakeSharedPolicyGroupPolicyStep(modifier?: Partial<Step> | ((base: Step) => Step)): Step {\n const base: Step = {\n name: 'Test PROXY SPG',\n description: 'Shared Policy Group',\n enabled: true,\n policy: 'shared-policy-group-policy',\n configuration: {\n sharedPolicyGroupId: '4d4c1b3b-3b1b-4b3b-8b3b-request',\n },\n };\n\n if (isFunction(modifier)) {\n return modifier(base);\n }\n\n return {\n ...base,\n ...modifier,\n };\n}\n","/*\n * Copyright (C) 2022 The Gravitee team (http://gravitee.io)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nexport * from './Flow.fixture';\nexport * from './FlowExecution.fixture';\nexport * from './Step.fixture';\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 { isFunction } from 'lodash';\n\nimport { Plan } from './Plan';\n\nexport function fakePlan(modifier?: Partial<Plan> | ((base: Plan) => Plan)): Plan {\n const base: Plan = {\n id: 'plan-id',\n name: 'Keyless plan',\n flows: [],\n };\n\n if (isFunction(modifier)) {\n return modifier(base);\n }\n\n return {\n ...base,\n ...modifier,\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 */\nexport * from './Plan.fixture';\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.fixture';\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 { isFunction } from 'lodash';\n\nimport { ConnectorInfo } from './ConnectorsInfo';\n\nexport function fakeSSEMessageEntrypoint(modifier?: Partial<ConnectorInfo> | ((base: ConnectorInfo) => ConnectorInfo)): ConnectorInfo {\n const base: ConnectorInfo = {\n type: 'sse',\n name: 'Server-Sent Events',\n supportedModes: ['SUBSCRIBE'],\n icon: 'gio:puzzle',\n };\n\n if (isFunction(modifier)) {\n return modifier(base);\n }\n\n return {\n ...base,\n ...modifier,\n };\n}\n\nexport function fakeWebsocketMessageEntrypoint(\n modifier?: Partial<ConnectorInfo> | ((base: ConnectorInfo) => ConnectorInfo),\n): ConnectorInfo {\n const base: ConnectorInfo = {\n type: 'websocket',\n name: 'Websocket',\n supportedModes: ['PUBLISH', 'SUBSCRIBE'],\n icon: 'gio:websocket',\n };\n\n if (isFunction(modifier)) {\n return modifier(base);\n }\n\n return {\n ...base,\n ...modifier,\n };\n}\n\nexport function fakeHTTPPostMessageEntrypoint(modifier?: Partial<ConnectorInfo> | ((base: ConnectorInfo) => ConnectorInfo)): ConnectorInfo {\n const base: ConnectorInfo = {\n type: 'http-post',\n name: 'HTTP POST',\n supportedModes: ['PUBLISH'],\n icon: 'gio:language',\n };\n\n if (isFunction(modifier)) {\n return modifier(base);\n }\n\n return {\n ...base,\n ...modifier,\n };\n}\n\nexport function fakeHTTPGetMessageEntrypoint(modifier?: Partial<ConnectorInfo> | ((base: ConnectorInfo) => ConnectorInfo)): ConnectorInfo {\n const base: ConnectorInfo = {\n type: 'http-get',\n name: 'HTTP Get',\n supportedModes: ['SUBSCRIBE'],\n icon: 'gio:language',\n };\n\n if (isFunction(modifier)) {\n return modifier(base);\n }\n\n return {\n ...base,\n ...modifier,\n };\n}\n\nexport function fakeWebhookMessageEntrypoint(modifier?: Partial<ConnectorInfo> | ((base: ConnectorInfo) => ConnectorInfo)): ConnectorInfo {\n const base: ConnectorInfo = {\n type: 'webhook',\n name: 'Webhook',\n supportedModes: ['SUBSCRIBE'],\n icon: 'gio:webhook',\n };\n\n if (isFunction(modifier)) {\n return modifier(base);\n }\n\n return {\n ...base,\n ...modifier,\n };\n}\n\nexport function fakeHTTPProxyEntrypoint(modifier?: Partial<ConnectorInfo> | ((base: ConnectorInfo) => ConnectorInfo)): ConnectorInfo {\n const base: ConnectorInfo = {\n type: 'http-proxy',\n name: 'HTTP Proxy',\n supportedModes: ['REQUEST_RESPONSE'],\n icon: 'gio:language',\n };\n\n if (isFunction(modifier)) {\n return modifier(base);\n }\n\n return {\n ...base,\n ...modifier,\n };\n}\n\nexport function fakeMockMessageEndpoint(modifier?: Partial<ConnectorInfo> | ((base: ConnectorInfo) => ConnectorInfo)): ConnectorInfo {\n const base: ConnectorInfo = {\n type: 'mock',\n name: 'Mock',\n supportedModes: ['PUBLISH', 'SUBSCRIBE'],\n icon: 'gio:language',\n };\n\n if (isFunction(modifier)) {\n return modifier(base);\n }\n\n return {\n ...base,\n ...modifier,\n };\n}\n\nexport function fakeKafkaMessageEndpoint(modifier?: Partial<ConnectorInfo> | ((base: ConnectorInfo) => ConnectorInfo)): ConnectorInfo {\n const base: ConnectorInfo = {\n type: 'kafka',\n name: 'Kafka',\n supportedModes: ['PUBLISH', 'SUBSCRIBE'],\n icon: 'gio:kafka',\n };\n\n if (isFunction(modifier)) {\n return modifier(base);\n }\n\n return {\n ...base,\n ...modifier,\n };\n}\n\nexport function fakeHTTPProxyEndpoint(modifier?: Partial<ConnectorInfo> | ((base: ConnectorInfo) => ConnectorInfo)): ConnectorInfo {\n const base: ConnectorInfo = {\n type: 'http-proxy',\n name: 'HTTP Proxy',\n supportedModes: ['REQUEST_RESPONSE'],\n icon: 'gio:language',\n };\n\n if (isFunction(modifier)) {\n return modifier(base);\n }\n\n return {\n ...base,\n ...modifier,\n };\n}\n\nexport function fakeKafkaNativeEntrypoint(modifier?: Partial<ConnectorInfo> | ((base: ConnectorInfo) => ConnectorInfo)): ConnectorInfo {\n const base: ConnectorInfo = {\n type: 'native-kafka',\n name: 'Client',\n supportedModes: ['INTERACT', 'PUBLISH', 'SUBSCRIBE'],\n icon: 'gio:kafka',\n };\n\n if (isFunction(modifier)) {\n return modifier(base);\n }\n\n return {\n ...base,\n ...modifier,\n };\n}\n\nexport function fakeKafkaNativeEndpoint(modifier?: Partial<ConnectorInfo> | ((base: ConnectorInfo) => ConnectorInfo)): ConnectorInfo {\n const base: ConnectorInfo = {\n type: 'native-kafka',\n name: 'Broker',\n supportedModes: ['INTERACT', 'PUBLISH', 'SUBSCRIBE'],\n icon: 'gio:kafka',\n };\n\n if (isFunction(modifier)) {\n return modifier(base);\n }\n\n return {\n ...base,\n ...modifier,\n };\n}\n\nexport function fakeMCPProxyEntrypoint(modifier?: Partial<ConnectorInfo> | ((base: ConnectorInfo) => ConnectorInfo)): ConnectorInfo {\n const base: ConnectorInfo = {\n type: 'mcp-proxy',\n name: 'MCP Proxy',\n supportedModes: ['REQUEST_RESPONSE'],\n icon: 'gio:language',\n };\n\n if (isFunction(modifier)) {\n return modifier(base);\n }\n\n return {\n ...base,\n ...modifier,\n };\n}\n\nexport function fakeMCPProxyEndpoint(modifier?: Partial<ConnectorInfo> | ((base: ConnectorInfo) => ConnectorInfo)): ConnectorInfo {\n const base: ConnectorInfo = {\n type: 'mcp-proxy',\n name: 'MCP Proxy',\n supportedModes: ['REQUEST_RESPONSE'],\n icon: 'gio:language',\n };\n\n if (isFunction(modifier)) {\n return modifier(base);\n }\n\n return {\n ...base,\n ...modifier,\n };\n}\n\nexport function fakeLlmProxyEntrypoint(modifier?: Partial<ConnectorInfo> | ((base: ConnectorInfo) => ConnectorInfo)): ConnectorInfo {\n const base: ConnectorInfo = {\n type: 'llm-proxy',\n name: 'LLM Proxy',\n supportedModes: ['REQUEST_RESPONSE'],\n icon: 'gio:language',\n };\n\n if (isFunction(modifier)) {\n return modifier(base);\n }\n\n return {\n ...base,\n ...modifier,\n };\n}\n\nexport function fakeLlmProxyEndpoint(modifier?: Partial<ConnectorInfo> | ((base: ConnectorInfo) => ConnectorInfo)): ConnectorInfo {\n const base: ConnectorInfo = {\n type: 'llm-proxy',\n name: 'LLM Proxy',\n supportedModes: ['REQUEST_RESPONSE'],\n icon: 'gio:language',\n };\n\n if (isFunction(modifier)) {\n return modifier(base);\n }\n\n return {\n ...base,\n ...modifier,\n };\n}\n","/*\n * Copyright (C) 2022 The Gravitee team (http://gravitee.io)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nexport * from './flow/index-testing';\nexport * from './plan/index-testing';\nexport * from './policy/index-testing';\n\nexport * from './ConnectorsInfo.fixture';\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 { ComponentHarness, parallel } from '@angular/cdk/testing';\nimport { MatButtonHarness } from '@angular/material/button/testing';\nimport { MatIconHarness } from '@angular/material/icon/testing';\nimport { DivHarness } from '@gravitee/ui-particles-angular/testing';\nimport { MatMenuHarness } from '@angular/material/menu/testing';\nimport { MatInputHarness } from '@angular/material/input/testing';\n\nexport class GioPolicyStudioFlowsMenuHarness extends ComponentHarness {\n public static hostSelector = 'gio-ps-flows-menu';\n\n private locateFlowsGroups = this.locatorForAll(DivHarness.with({ selector: '.list__flowsGroup' }));\n private locateFlowByText = (text: string | RegExp) =>\n this.locatorForOptional(DivHarness.with({ selector: '.list__flowsGroup__flows__flow', text }));\n\n public locateGroupByText = (text: string | RegExp) => this.locatorForOptional(DivHarness.with({ selector: '.list__flowsGroup', text }));\n\n private locateSelectedFlow = this.locatorForOptional(DivHarness.with({ selector: '.list__flowsGroup__flows__flow.selected' }));\n\n public async getAllFlowsGroups(): Promise<\n {\n name: string | null;\n flows: {\n name: string | null;\n isSelected: boolean;\n infos: string | null;\n hasCondition: boolean;\n }[];\n }[]\n > {\n const flowsGroups = await this.locateFlowsGroups();\n\n return parallel(() =>\n flowsGroups.map(async flowsGroup => {\n const flowsGroupName = await flowsGroup.getText({ childSelector: '.list__flowsGroup__header__label' });\n const flowsGroupNameWithoutPlanPrefix = flowsGroupName?.replace(/^Plan:\\s*/, '') ?? null;\n\n const flowsDiv = await flowsGroup.childLocatorForAll(DivHarness.with({ selector: '.list__flowsGroup__flows__flow' }))();\n\n const flowsInfos = parallel(() =>\n flowsDiv.map(async flowDiv => {\n return {\n name: await flowDiv.getText({ childSelector: '.list__flowsGroup__flows__flow__left__name' }),\n infos: await flowDiv.getText({ childSelector: '.list__flowsGroup__flows__flow__left__infos' }),\n isSelected: await flowDiv.host().then(host => host.hasClass('selected')),\n hasCondition: !!(await flowDiv.childLocatorFor(MatIconHarness.with({ name: 'gio:if' }))),\n };\n }),\n );\n\n return {\n name: flowsGroupNameWithoutPlanPrefix,\n flows: await flowsInfos,\n };\n }),\n );\n }\n\n public async getSelectedFlow(): Promise<{ name: string | null } | null> {\n const selectedFlow = await this.locateSelectedFlow();\n\n return selectedFlow ? { name: await selectedFlow.getText({ childSelector: '.list__flowsGroup__flows__flow__left__name' }) } : null;\n }\n\n /**\n * Select a flow by it's text content\n */\n public async selectFlow(flowText: string | RegExp): Promise<void> {\n const flowsGroups = await this.locateFlowByText(flowText)();\n\n if (flowsGroups) {\n await flowsGroups.host().then(host => host.click());\n }\n }\n\n public async addFlow(groupName: string | RegExp): Promise<void> {\n const flowsGroups = await this.locateGroupByText(groupName)();\n\n if (flowsGroups) {\n await (await flowsGroups.childLocatorFor(MatButtonHarness.with({ ancestor: '.list__flowsGroup__header__addBtn' }))()).click();\n }\n }\n\n public async isReadOnly(): Promise<boolean> {\n const flowsGroups = await this.locateFlowsGroups();\n const flowGroup = flowsGroups.pop();\n if (!flowGroup) {\n throw new Error('A flow group is required to test that menu is readonly');\n }\n const addBtn = await flowGroup.childLocatorFor(MatButtonHarness.with({ ancestor: '.list__flowsGroup__header__addBtn' }))();\n\n return await addBtn.isDisabled();\n }\n\n public async openFlowExecutionConfig(): Promise<void> {\n await (await this.locatorFor(MatButtonHarness.with({ selector: '.header__configBtn_edit' }))())?.click();\n }\n\n public async clickDuplicateFlowBtn(flowText: string | RegExp): Promise<void> {\n const flow = await this.locateFlowByText(flowText)();\n\n const matMenu = await flow?.childLocatorFor(MatMenuHarness.with({ selector: '.list__flowsGroup__flows__flow__right__name__menu' }))();\n await matMenu?.clickItem({ text: /Duplicate/ });\n }\n\n public async getSearchInput(): Promise<MatInputHarness> {\n return this.locatorFor(MatInputHarness.with({ selector: '.searchBar__input input[matInput]' }))();\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 */\n\nimport { ComponentHarness, parallel } from '@angular/cdk/testing';\nimport { DivHarness, SpanHarness } from '@gravitee/ui-particles-angular/testing';\n\nexport class GioPolicyStudioDetailsInfoBarHarness extends ComponentHarness {\n public static hostSelector = 'gio-ps-flow-details-info-bar';\n\n public async getInfos(): Promise<Record<string, (string | null)[]>> {\n const infosDiv = await this.locatorForAll(DivHarness.with({ selector: '.info' }))();\n\n const allKeyValue = await parallel(() =>\n infosDiv.map(async info => {\n const label = await info.childLocatorFor(SpanHarness.with({ selector: '.info__label' }))();\n const value = await info.childLocatorForAll(SpanHarness.with({ selector: '.info__value' }))();\n return { label: await label.getText(), value: await parallel(() => value.map(v => v.getText())) };\n }),\n );\n\n return allKeyValue.reduce(\n (acc, curr) => {\n if (curr.label) {\n return { ...acc, [curr.label]: curr.value };\n }\n return acc;\n },\n {} as Record<string, (string | null)[]>,\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 */\n\nimport { ComponentHarness } from '@angular/cdk/testing';\nimport { MatButtonHarness } from '@angular/material/button/testing';\n\nimport { GioPolicyStudioDetailsInfoBarHarness } from '../flow-details-info-bar/gio-ps-flow-details-info-bar.harness';\n\nexport class GioPolicyStudioDetailsHarness extends ComponentHarness {\n public static hostSelector = 'gio-ps-flow-details';\n\n public async isDisplayEmptyFlow(): Promise<boolean> {\n const hostText = await (await this.host()).text();\n return hostText.includes('No flows yet');\n }\n\n public async isDisabledFlow(): Promise<boolean> {\n const headerLabel = await this.locatorFor('.header__label')();\n return await headerLabel.text().then(text => text.includes('Disabled'));\n }\n\n public async getFlowInfos(): Promise<Record<string, (string | null)[]>> {\n return await (await this.locatorFor(GioPolicyStudioDetailsInfoBarHarness)()).getInfos();\n }\n\n public async matchText(matcher: RegExp): Promise<boolean> {\n const hostText = await (await this.host()).text();\n return matcher.test(hostText);\n }\n\n public async isReadOnly(): Promise<boolean> {\n const editFlowBtn = await this.locatorFor(MatButtonHarness.with({ selector: '.header__configBtn__edit' }))();\n const editBtnDisabled = await editFlowBtn.isDisabled();\n const deleteFlowBtn = await this.locatorFor(MatButtonHarness.with({ selector: '.header__configBtn__delete' }))();\n const deleteBtnDisabled = await deleteFlowBtn.isDisabled();\n return editBtnDisabled && deleteBtnDisabled;\n }\n\n public async clickEditFlowBtn(): Promise<void> {\n const editFlowBtn = await this.locatorFor(MatButtonHarness.with({ selector: '.header__configBtn__edit' }))();\n await editFlowBtn.click();\n }\n\n public async clickDeleteFlowBtn(): Promise<void> {\n const deleteFlowBtn = await this.locatorFor(MatButtonHarness.with({ selector: '.header__configBtn__delete' }))();\n await deleteFlowBtn.click();\n }\n\n public async clickEnableDisableFlowBtn(): Promise<void> {\n const enableDisableFlowBtn = await this.locatorFor(MatButtonHarness.with({ selector: '.header__configBtn__enableDisable' }))();\n await enableDisableFlowBtn.click();\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 { ComponentHarness } from '@angular/cdk/testing';\nimport { MatButtonHarness } from '@angular/material/button/testing';\nimport { MatInputHarness } from '@angular/material/input/testing';\nimport { MatSelectHarness } from '@angular/material/select/testing';\nimport { GioFormTagsInputHarness } from '@gravitee/ui-particles-angular';\n\nexport type GioPolicyStudioFlowProxyHarnessData = {\n name: string;\n pathOperator: string;\n path: string;\n methods: string[];\n condition: string;\n};\n\nexport class GioPolicyStudioFlowProxyFormDialogHarness extends ComponentHarness {\n public static hostSelector = 'gio-ps-flow-proxy-form-dialog';\n\n private getSaveBtn = this.locatorFor(MatButtonHarness.with({ selector: '.actions__saveBtn' }));\n private getCancelBtn = this.locatorFor(MatButtonHarness.with({ selector: '.actions__cancelBtn' }));\n private nameInput = this.locatorFor(MatInputHarness.with({ selector: '[formControlName=\"name\"]' }));\n private pathOperatorInput = this.locatorFor(MatSelectHarness.with({ selector: '[formControlName=\"pathOperator\"]' }));\n private pathInput = this.locatorFor(MatInputHarness.with({ selector: '[formControlName=\"path\"]' }));\n private methodsInput = this.locatorFor(GioFormTagsInputHarness.with({ selector: '[formControlName=\"methods\"]' }));\n private conditionInput = this.locatorFor(MatInputHarness.with({ selector: '[formControlName=\"condition\"]' }));\n\n public async setFlowFormValues(flow: {\n name?: string;\n pathOperator?: string;\n path?: string;\n methods?: string[];\n condition?: string;\n }): Promise<void> {\n if (flow.name) {\n const nameInput = await this.nameInput();\n await nameInput.setValue(flow.name);\n }\n if (flow.pathOperator) {\n const pathOperatorInput = await this.pathOperatorInput();\n await pathOperatorInput.open();\n\n // Unselect all options before selecting the new one\n for (const option of await pathOperatorInput.getOptions()) {\n if (await option.isSelected()) {\n await option.click();\n }\n }\n await pathOperatorInput.clickOptions({ text: new RegExp(flow.pathOperator, 'i') });\n }\n if (flow.path) {\n const input = await this.pathInput();\n await input.setValue(flow.path);\n }\n if (flow.methods) {\n const methodsInput = await this.methodsInput();\n await methodsInput.removeTag('ALL');\n for (const method of flow.methods) {\n await methodsInput.addTag(method);\n }\n }\n if (flow.condition) {\n const conditionInput = await this.conditionInput();\n await conditionInput.setValue(flow.condition);\n }\n }\n\n public async getFlowFormValues(): Promise<GioPolicyStudioFlowProxyHarnessData> {\n return {\n name: await this.getFlowName(),\n pathOperator: await this.getPathOperator(),\n path: await this.getFlowPath(),\n methods: await this.getMethods(),\n condition: await this.getCondition(),\n };\n }\n\n public async getFlowName(): Promise<string> {\n return this.nameInput().then(input => input.getValue());\n }\n\n public async getFlowPath(): Promise<string> {\n return this.pathInput().then(input => input.getValue());\n }\n\n public async getPathOperator(): Promise<string> {\n return this.pathOperatorInput().then(input => input.getValueText());\n }\n\n public async getMethods(): Promise<string[]> {\n return this.methodsInput().then(input => input.getTags());\n }\n\n public async getCondition(): Promise<string> {\n return this.conditionInput().then(input => input.getValue());\n }\n\n public async save(): Promise<void> {\n const button = await this.getSaveBtn();\n await button.click();\n }\n\n public async cancel(): Promise<void> {\n const button = await this.getCancelBtn();\n await button.click();\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 { ComponentHarness, parallel } from '@angular/cdk/testing';\nimport { MatButtonHarness } from '@angular/material/button/testing';\nimport { MatInputHarness } from '@angular/material/input/testing';\nimport { MatSelectHarness } from '@angular/material/select/testing';\n\nexport type GioPolicyStudioFlowMessageHarnessData = {\n name: string;\n channelOperator: string;\n channel: string;\n entrypoints: string[];\n operations: string[];\n condition: string;\n};\n\nexport class GioPolicyStudioFlowMessageFormDialogHarness extends ComponentHarness {\n public static hostSelector = 'gio-ps-flow-message-form-dialog';\n\n private getSaveBtn = this.locatorFor(MatButtonHarness.with({ selector: '.actions__saveBtn' }));\n private getCancelBtn = this.locatorFor(MatButtonHarness.with({ selector: '.actions__cancelBtn' }));\n private nameInput = this.locatorFor(MatInputHarness.with({ selector: '[formControlName=\"name\"]' }));\n private channelOperatorInput = this.locatorFor(MatSelectHarness.with({ selector: '[formControlName=\"channelOperator\"]' }));\n private channelInput = this.locatorFor(MatInputHarness.with({ selector: '[formControlName=\"channel\"]' }));\n private operationsInput = this.locatorFor(MatSelectHarness.with({ selector: '[formControlName=\"operations\"]' }));\n private entrypointsInput = this.locatorFor(MatSelectHarness.with({ selector: '[formControlName=\"entrypoints\"]' }));\n private conditionInput = this.locatorFor(MatInputHarness.with({ selector: '[formControlName=\"condition\"]' }));\n\n public async setFlowFormValues(flow: {\n name?: string;\n channelOperator?: string;\n channel?: string;\n operations?: string[];\n entrypoints?: string[];\n condition?: string;\n }): Promise<void> {\n if (flow.name) {\n const nameInput = await this.nameInput();\n await nameInput.setValue(flow.name);\n }\n if (flow.channelOperator) {\n const channelOperatorInput = await this.channelOperatorInput();\n const entrypointsInput = await this.entrypointsInput();\n await channelOperatorInput.open();\n // Unselect all options before selecting the new one\n for (const option of await entrypointsInput.getOptions()) {\n if (await option.isSelected()) {\n await option.click();\n }\n }\n await channelOperatorInput.clickOptions({ text: new RegExp(flow.channelOperator, 'i') });\n }\n if (flow.channel) {\n const channelInput = await this.channelInput();\n await channelInput.setValue(flow.channel);\n }\n if (flow.operations) {\n const operationsInput = await this.operationsInput();\n await parallel(() =>\n (flow.operations ?? []).map(async operation => {\n await operationsInput.open();\n // Unselect all options before selecting the new one\n for (const option of await operationsInput.getOptions()) {\n if (await option.isSelected()) {\n await option.click();\n }\n }\n await operationsInput.clickOptions({ text: new RegExp(operation, 'i') });\n }),\n );\n }\n if (flow.entrypoints) {\n const entrypointsInput = await this.entrypointsInput();\n await entrypointsInput.open();\n // Unselect all options before selecting the new one\n for (const option of await entrypointsInput.getOptions()) {\n if (await option.isSelected()) {\n await option.click();\n }\n }\n await parallel(() =>\n (flow.entrypoints ?? []).map(async entrypoint => {\n await entrypointsInput.clickOptions({ text: new RegExp(entrypoint, 'i') });\n }),\n );\n }\n if (flow.condition) {\n const conditionInput = await this.conditionInput();\n await conditionInput.setValue(flow.condition);\n }\n }\n\n public async getName(): Promise<string> {\n return this.nameInput().then(input => input.getValue());\n }\n\n public async getChannelOperator(): Promise<string> {\n return this.channelOperatorInput().then(input => input.getValueText());\n }\n\n public async getChannel(): Promise<string> {\n return this.channelInput().then(input => input.getValue());\n }\n\n public async getOperations(): Promise<string> {\n return this.operationsInput().then(input => input.getValueText());\n }\n\n public async getEntrypoints(): Promise<string> {\n return this.entrypointsInput().then(input => input.getValueText());\n }\n\n public async getCondition(): Promise<string> {\n return this.conditionInput().then(input => input.getValue());\n }\n\n public async save(): Promise<void> {\n const button = await this.getSaveBtn();\n await button.click();\n }\n\n public async cancel(): Promise<void> {\n const button = await this.getCancelBtn();\n await button.click();\n }\n\n public async getFormValues(): Promise<GioPolicyStudioFlowMessageHarnessData> {\n const name = await this.getName();\n const channelOperator = await this.getChannelOperator();\n const channel = await this.getChannel();\n const entrypoints = (await this.getEntrypoints()).split(',');\n const operations = (await this.getOperations()).split(',');\n const condition = await this.getCondition();\n return {\n name,\n channel,\n channelOperator,\n entrypoints,\n operations,\n condition,\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 { ComponentHarness } from '@angular/cdk/testing';\nimport { MatButtonHarness } from '@angular/material/button/testing';\nimport { MatSelectHarness } from '@angular/material/select/testing';\nimport { MatSlideToggleHarness } from '@angular/material/slide-toggle/testing';\n\nimport { FlowMode } from '../../models';\n\nexport class GioPolicyStudioFlowExecutionFormDialogHarness extends ComponentHarness {\n public static hostSelector = 'gio-ps-flow-execution-form-dialog';\n\n private getSaveBtn = this.locatorFor(MatButtonHarness.with({ selector: '.actions__saveBtn' }));\n private getCancelBtn = this.locatorFor(MatButtonHarness.with({ selector: '.actions__cancelBtn' }));\n\n public async setFlowFormValues(flowExecution: { mode?: FlowMode; matchRequired?: boolean }): Promise<void> {\n const modeInput = await this.locatorFor(MatSelectHarness.with({ selector: '[formControlName=\"mode\"]' }))();\n const matchRequiredInput = await this.locatorFor(MatSlideToggleHarness.with({ selector: '[formControlName=\"matchRequired\"]' }))();\n\n if (flowExecution.mode) {\n await modeInput.open();\n\n // Unselect all options before selecting the new one\n for (const option of await modeInput.getOptions()) {\n if (await option.isSelected()) {\n await option.click();\n }\n }\n const flowModeToValue: Record<FlowMode, string> = {\n BEST_MATCH: 'Best match',\n DEFAULT: 'Default',\n };\n\n await modeInput.clickOptions({ text: new RegExp(flowModeToValue[flowExecution.mode], 'i') });\n }\n\n if (flowExecution.matchRequired) {\n await matchRequiredInput.check();\n } else {\n await matchRequiredInput.uncheck();\n }\n }\n\n public async save(): Promise<void> {\n const button = await this.getSaveBtn();\n await button.click();\n }\n\n public async cancel(): Promise<void> {\n const button = await this.getCancelBtn();\n await button.click();\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 */\n\nimport { BaseHarnessFilters, ComponentHarness, HarnessPredicate } from '@angular/cdk/testing';\nimport { SpanHarness } from '@gravitee/ui-particles-angular/testing';\nimport { MatMenuHarness } from '@angular/material/menu/testing';\nimport { DivHarness } from '@gravitee/ui-particles-angular/testing';\nimport { MatTooltipHarness } from '@angular/material/tooltip/testing';\n\nexport type GioPolicyStudioDetailsPhaseStepHarnessFilters = BaseHarnessFilters;\n\nexport class GioPolicyStudioDetailsPhaseStepHarness extends ComponentHarness {\n public static hostSelector = 'gio-ps-flow-details-phase-step';\n\n /**\n * Get Harness with the given filter.\n *\n * @param options Options for filtering which input instances are considered a match.\n * @return a `HarnessPredicate` configured with the given options.\n */\n public static with(\n options: GioPolicyStudioDetailsPhaseStepHarnessFilters = {},\n ): HarnessPredicate<GioPolicyStudioDetailsPhaseStepHarness> {\n return new HarnessPredicate(GioPolicyStudioDetailsPhaseStepHarness, options);\n }\n\n public async getName(): Promise<string> {\n return (await (await this.locatorFor(SpanHarness.with({ selector: '.info__head__name' }))()).getText()) ?? '';\n }\n\n public async getDescription(): Promise<string | undefined> {\n return (await (await this.locatorForOptional(DivHarness.with({ selector: '.info__description' }))())?.getText()) ?? undefined;\n }\n\n public async getInfoMessage(): Promise<string | undefined> {\n const tooltip = await this.locatorForOptional(MatTooltipHarness.with({ selector: '.info__head__info' }))();\n // FIXME: await tooltip.getTooltipText(); returns empty string. when it's in a condition. I haven't figured out how to get over it.\n // This hack allows to validate the info anyway\n return tooltip ? 'HasInfoMessage' : undefined;\n }\n\n public async clickOnEdit(): Promise<void> {\n const matMenu = await this.locatorFor(MatMenuHarness)();\n await matMenu.clickItem({ text: 'Edit' });\n }\n\n public async clickOnDelete(): Promise<void> {\n const matMenu = await this.locatorFor(MatMenuHarness)();\n await matMenu.clickItem({ text: 'Delete' });\n }\n\n public async clickOnDisableEnable(): Promise<void> {\n const matMenu = await this.locatorFor(MatMenuHarness)();\n await matMenu.clickItem({ text: /Disable|Enable/ });\n }\n\n public async clickOnDuplicate(): Promise<void> {\n const matMenu = await this.locatorFor(MatMenuHarness)();\n await matMenu.clickItem({ text: 'Duplicate' });\n }\n\n public async clickOnMoveRight(): Promise<void> {\n const matMenu = await this.locatorFor(MatMenuHarness)();\n await matMenu.clickItem({ text: 'Move right' });\n }\n\n public async clickOnMoveLeft(): Promise<void> {\n const matMenu = await this.locatorFor(MatMenuHarness)();\n await matMenu.clickItem({ text: 'Move left' });\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 */\n\nimport { ComponentHarness, LocatorFactory } from '@angular/cdk/testing';\nimport { MatInputHarness } from '@angular/material/input/testing';\n\nexport type StepForm = {\n description?: string;\n condition?: string;\n messageCondition?: string;\n // Callback to allow to fill the fields of the jsonSchemaForm specific to each policy, if necessary. Useful if some are required.\n waitForPolicyFormCompletionCb?: (locator: LocatorFactory) => Promise<void>;\n // Callback to allow to fill init http request fields. Useful for httpTestingController.expectOne() onn `/schema` & ``/documentation` requests.\n waitForInitHttpRequestCompletionCb?: () => void;\n};\nexport class GioPolicyStudioStepFormHarness extends ComponentHarness {\n public static hostSelector = 'gio-ps-step-form';\n\n private getDescriptionInput = this.locatorFor(MatInputHarness.with({ selector: '[formControlName=\"description\"]' }));\n\n private getConditionInput = this.locatorFor(MatInputHarness.with({ selector: '[formControlName=\"condition\"]' }));\n\n public async setStepForm(stepForm: StepForm): Promise<void> {\n if (stepForm.waitForInitHttpRequestCompletionCb) {\n stepForm.waitForInitHttpRequestCompletionCb();\n }\n\n if (stepForm.description) {\n const descriptionInput = await this.getDescriptionInput();\n await descriptionInput.setValue(stepForm.description);\n }\n if (stepForm.condition) {\n const conditionInput = await this.getConditionInput();\n await conditionInput.setValue(stepForm.condition);\n }\n if (stepForm.messageCondition) {\n const messageConditionInput = await this.locatorFor(MatInputHarness.with({ selector: '[formControlName=\"messageCondition\"]' }))();\n await messageConditionInput.setValue(stepForm.messageCondition);\n }\n\n if (stepForm.waitForPolicyFormCompletionCb) {\n await stepForm.waitForPolicyFormCompletionCb(this.locatorFactory);\n }\n }\n\n public async getStepFormValue(): Promise<{\n description?: string;\n }> {\n const descriptionInput = await this.getDescriptionInput();\n\n return {\n description: await descriptionInput.getValue(),\n };\n }\n\n public async getDocumentation(): Promise<string | null> {\n const documentation = await this.locatorFor('.documentation__content > gio-asciidoctor')();\n return documentation.text();\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 { ComponentHarness } from '@angular/cdk/testing';\n\nimport { GioPolicyStudioStepFormHarness } from '../step-form/gio-ps-step-form.harness';\n\nexport class GioPolicyStudioStepEditDialogHarness extends ComponentHarness {\n public static hostSelector = 'gio-ps-step-edit-dialog';\n\n public async getPolicyName(): Promise<string> {\n return (await this.locatorFor('.title__name')()).text();\n }\n\n public async getStepForm(): Promise<GioPolicyStudioStepFormHarness> {\n return await this.locatorFor(GioPolicyStudioStepFormHarness)();\n }\n\n public async save(): Promise<void> {\n return (await this.locatorFor('.actions__saveBtn')()).click();\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 { ComponentHarness, parallel } from '@angular/cdk/testing';\nimport { MatButtonHarness } from '@angular/material/button/testing';\nimport { DivHarness } from '@gravitee/ui-particles-angular/testing';\nimport { MatChipListboxHarness, MatChipOptionHarness } from '@angular/material/chips/testing';\nimport { MatInputHarness } from '@angular/material/input/testing';\n\nimport { GioPolicyStudioStepFormHarness } from '../step-form/gio-ps-step-form.harness';\n\nexport class GioPolicyStudioPoliciesCatalogDialogHarness extends ComponentHarness {\n public static hostSelector = 'gio-ps-policies-catalog-dialog';\n\n private policiesLocator = this.locatorForAll(DivHarness.with({ selector: '.policiesCatalog__list__policy' }));\n\n private getCategoriesFilter = this.locatorForOptional(MatChipListboxHarness.with({ selector: '[formControlName=\"categories\"]' }));\n public async getPhase(): Promise<string> {\n const phase = await this.locatorFor('.title__phase')();\n return phase.text();\n }\n\n public async getPoliciesName(): Promise<string[]> {\n const policies = await this.locatorForAll('.policiesCatalog__list__policy__head__name')();\n return parallel(() => policies.map(policy => policy.text()));\n }\n\n public async selectPolicy(policyName: string): Promise<void> {\n const policies = await this.policiesLocator();\n for (const policy of policies) {\n const name = await policy.getText({ childSelector: '.policiesCatalog__list__policy__head__name' });\n if (name === policyName) {\n const selectBtn = await policy.childLocatorFor(MatButtonHarness.with({ selector: '.policiesCatalog__list__policy__selectBtn' }))();\n await selectBtn.click();\n return;\n }\n }\n throw new Error(`Policy ${policyName} not found`);\n }\n\n public async getSelectedPolicyName(): Promise<string> {\n const policy = await this.locatorFor('.policyForm__info__head__name')();\n return policy.text();\n }\n\n public async hasRequestUpgradeButton(): Promise<boolean> {\n const requestUpgradeButton = await this.locatorForOptional(MatButtonHarness.with({ text: 'Request upgrade' }))();\n return !!requestUpgradeButton;\n }\n\n public async clickAddPolicyButton(): Promise<void> {\n const addBtn = await this.locatorFor(MatButtonHarness.with({ selector: '.actions__addBtn' }))();\n await addBtn.click();\n }\n\n public async getStepForm(): Promise<GioPolicyStudioStepFormHarness> {\n return await this.locatorFor(GioPolicyStudioStepFormHarness)();\n }\n\n public async getCategoriesSelection(): Promise<{ name: string; selected: boolean }[]> {\n const chipList = await this.getCategoriesFilter();\n if (!chipList) {\n return [];\n }\n\n const chips: MatChipOptionHarness[] = await chipList.getChips();\n\n return parallel(() =>\n chips.map(async chip => {\n const selected = await chip.isSelected();\n const name = await chip.getText();\n return { name, selected };\n }),\n );\n }\n\n public async selectCategoryFilter(categoryName: string): Promise<void> {\n const chipList = await this.getCategoriesFilter();\n await chipList?.selectChips({ text: categoryName });\n }\n\n public async searchFilter(search: string): Promise<void> {\n const searchInput = await this.locatorFor(MatInputHarness.with({ selector: '[formControlName=\"search\"]' }))();\n if (searchInput) {\n await searchInput.setValue(search);\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 */\n\nimport { BaseHarnessFilters, ComponentHarness, HarnessPredicate, parallel } from '@angular/cdk/testing';\nimport { DivHarness, SpanHarness } from '@gravitee/ui-particles-angular/testing';\nimport { isEmpty } from 'lodash';\nimport { MatButtonHarness } from '@angular/material/button/testing';\n\nimport { GioPolicyStudioDetailsPhaseStepHarness } from '../flow-details-phase-step/gio-ps-flow-details-phase-step.harness';\nimport { GioPolicyStudioStepEditDialogHarness } from '../step-edit-dialog/gio-ps-step-edit-dialog.harness';\nimport { GioPolicyStudioPoliciesCatalogDialogHarness } from '../policies-catalog-dialog/gio-ps-policies-catalog-dialog.harness';\nimport { StepForm } from '../step-form/gio-ps-step-form.harness';\n\nexport type PhaseType = 'INTERACT' | 'REQUEST' | 'RESPONSE' | 'PUBLISH' | 'SUBSCRIBE';\n\nexport type GioPolicyStudioDetailsPhaseHarnessFilters = BaseHarnessFilters & {\n type?: PhaseType;\n};\n\nconst TYPE_TO_TEXT: Record<PhaseType, string> = {\n INTERACT: 'Interact phase',\n REQUEST: 'Request phase',\n RESPONSE: 'Response phase',\n PUBLISH: 'Publish phase',\n SUBSCRIBE: 'Subscribe phase',\n};\n\nexport type StepCard =\n | {\n name: string;\n type: 'connector';\n }\n | {\n name: string;\n description?: string;\n hasCondition: boolean;\n type: 'step';\n };\n\nexport class GioPolicyStudioDetailsPhaseHarness extends ComponentHarness {\n public static hostSelector = 'gio-ps-flow-details-phase';\n\n private getHeaderName = () =>\n this.locatorForOptional(SpanHarness.with({ selector: '.header__name' }))().then(async span => span?.getText() ?? null);\n\n /**\n * Get Harness with the given filter.\n *\n * @param options Options for filtering which input instances are considered a match.\n * @return a `HarnessPredicate` configured with the given options.\n */\n public static with(options: GioPolicyStudioDetailsPhaseHarnessFilters = {}): HarnessPredicate<GioPolicyStudioDetailsPhaseHarness> {\n return new HarnessPredicate(GioPolicyStudioDetailsPhaseHarness, options).addOption('type', options.type, async (harness, type) => {\n return HarnessPredicate.stringMatches(harness.getHeaderName(), TYPE_TO_TEXT[type]);\n });\n }\n\n public async getSteps(): Promise<StepCard[] | 'DISABLED'> {\n if (await this.locatorForOptional('.disabledContent')()) {\n return 'DISABLED';\n }\n\n const stepsDiv = await this.locatorForAll(DivHarness.with({ selector: '.content__step' }))();\n\n if (isEmpty(stepsDiv)) {\n // No step - the phase is disabled\n return [];\n }\n\n return await parallel(() =>\n stepsDiv.map(async stepDiv => {\n const idConnector = !!(await stepDiv.getText({ childSelector: '.content__step__connector__badge' }));\n if (idConnector) {\n return {\n name: (await stepDiv.getText()) ?? '',\n type: 'connector',\n };\n }\n const step = await stepDiv.childLocatorFor(GioPolicyStudioDetailsPhaseStepHarness)();\n const conditionDiv = await stepDiv.childLocatorForOptional(DivHarness.with({ selector: '.content__step__policy__condition' }))();\n const description = await step.getDescription();\n const infoMessage = await step.getInfoMessage();\n\n return {\n type: 'step',\n name: await step.getName(),\n hasCondition: !!conditionDiv,\n ...(description ? { description } : {}),\n ...(infoMessage ? { infoMessage } : {}),\n };\n }),\n );\n }\n\n public async getStep(index: number): Promise<GioPolicyStudioDetailsPhaseStepHarness> {\n const steps = await this.locatorForAll(GioPolicyStudioDetailsPhaseStepHarness)();\n if (!steps[index]) {\n throw new Error(`Step ${index} not found`);\n }\n return steps[index];\n }\n\n public async clickAddStep(index: number): Promise<void> {\n const addStepBtn = await this.locatorForAll(DivHarness.with({ selector: '.content__step' }))().then(divs => divs[index]);\n\n await addStepBtn\n .childLocatorFor(MatButtonHarness.with({ selector: '.content__step__addBtn' }))()\n .then(btn => btn.click());\n }\n\n /**\n * Add a step to a phase\n * @param index Index where to add the step. (Add button index)\n * @param stepConfig Step to add\n */\n public async addStep(\n index: number,\n stepConfig: {\n policyName: string;\n } & StepForm,\n ): Promise<void> {\n await this.clickAddStep(index);\n\n const catalogDialog = await this.documentRootLocatorFactory().locatorFor(GioPolicyStudioPoliciesCatalogDialogHarness)();\n await catalogDialog.selectPolicy(stepConfig.policyName);\n\n await (await catalogDialog.getStepForm()).setStepForm(stepConfig);\n\n await catalogDialog.clickAddPolicyButton();\n }\n\n /**\n * Edit a step configuration\n * @param index Index of the policy step to edit\n * @param stepConfig Step configuration\n */\n public async editStep(index: number, stepConfig: StepForm): Promise<void> {\n const step = await this.getStep(index);\n\n await step.clickOnEdit();\n\n const stepEditDialog = await this.documentRootLocatorFactory().locatorFor(GioPolicyStudioStepEditDialogHarness)();\n await (await stepEditDialog.getStepForm()).setStepForm(stepConfig);\n\n await stepEditDialog.save();\n }\n\n /**\n * Delete a step\n * @param index Index of the policy step to delete\n */\n public async deleteStep(index: number): Promise<void> {\n const step = await this.getStep(index);\n\n await step.clickOnDelete();\n }\n\n /**\n * Disable a step\n * @param index Index of the policy step to disable\n */\n public async disableEnableStep(index: number): Promise<void> {\n const step = await this.getStep(index);\n await step.clickOnDisableEnable();\n }\n\n /**\n * Duplicate a step\n * @param index Index of the policy step to duplicate\n */\n public async duplicateStep(index: number): Promise<void> {\n const step = await this.getStep(index);\n await step.clickOnDuplicate();\n }\n\n /**\n * Move a step to the right\n * @param index Index of the policy step to move\n */\n public async moveStepRight(index: number): Promise<void> {\n const step = await this.getStep(index);\n await step.clickOnMoveRight();\n }\n\n /**\n * Move a step to the left\n * @param index Index of the policy step to move\n */\n public async moveStepLeft(index: number): Promise<void> {\n const step = await this.getStep(index);\n await step.clickOnMoveLeft();\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 { ComponentHarness } from '@angular/cdk/testing';\nimport { MatButtonHarness } from '@angular/material/button/testing';\nimport { MatInputHarness } from '@angular/material/input/testing';\n\nexport type GioPolicyStudioFlowNativeHarnessData = {\n name: string;\n};\n\nexport class GioPolicyStudioFlowNativeFormDialogHarness extends ComponentHarness {\n public static hostSelector = 'gio-ps-flow-native-form-dialog';\n\n private getSaveBtn = this.locatorFor(MatButtonHarness.with({ selector: '.actions__saveBtn' }));\n private getCancelBtn = this.locatorFor(MatButtonHarness.with({ selector: '.actions__cancelBtn' }));\n private nameInput = this.locatorFor(MatInputHarness.with({ selector: '[formControlName=\"name\"]' }));\n\n public async setFlowFormValues(flow: { name?: string }): Promise<void> {\n if (flow.name) {\n const nameInput = await this.nameInput();\n await nameInput.setValue(flow.name);\n }\n }\n\n public async getFlowFormValues(): Promise<GioPolicyStudioFlowNativeHarnessData> {\n return {\n name: await this.getFlowName(),\n };\n }\n\n public async getFlowName(): Promise<string> {\n return this.nameInput().then(input => input.getValue());\n }\n public async save(): Promise<void> {\n const button = await this.getSaveBtn();\n await button.click();\n }\n\n public async cancel(): Promise<void> {\n const button = await this.getCancelBtn();\n await button.click();\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 { ComponentHarness } from '@angular/cdk/testing';\nimport { MatButtonHarness } from '@angular/material/button/testing';\nimport { MatInputHarness } from '@angular/material/input/testing';\nimport { GioFormTagsInputHarness } from '@gravitee/ui-particles-angular';\n\nexport type GioPolicyStudioFlowMcpHarnessData = {\n name: string;\n methods: string[];\n condition: string;\n};\n\nexport class GioPolicyStudioFlowMcpFormDialogHarness extends ComponentHarness {\n public static hostSelector = 'gio-ps-flow-mcp-form-dialog';\n\n private getSaveBtn = this.locatorFor(MatButtonHarness.with({ selector: '.actions__saveBtn' }));\n private getCancelBtn = this.locatorFor(MatButtonHarness.with({ selector: '.actions__cancelBtn' }));\n private nameInput = this.locatorFor(MatInputHarness.with({ selector: '[formControlName=\"name\"]' }));\n private methodsInput = this.locatorFor(GioFormTagsInputHarness.with({ selector: '[formControlName=\"mcpMethods\"]' }));\n private conditionInput = this.locatorFor(MatInputHarness.with({ selector: '[formControlName=\"condition\"]' }));\n\n public async setFlowFormValues(flow: { name?: string; methods?: string[]; condition?: string }): Promise<void> {\n if (flow.name) {\n const nameInput = await this.nameInput();\n await nameInput.setValue(flow.name);\n }\n if (flow.methods) {\n const methodsInput = await this.methodsInput();\n for (const method of flow.methods) {\n await methodsInput.addTag(method);\n }\n }\n if (flow.condition) {\n const conditionInput = await this.conditionInput();\n await conditionInput.setValue(flow.condition);\n }\n }\n\n public async getFlowFormValues(): Promise<GioPolicyStudioFlowMcpHarnessData> {\n return {\n name: await this.getFlowName(),\n methods: await this.methodsInput().then(input => input.getTags()),\n condition: await this.conditionInput().then(input => input.getValue()),\n };\n }\n\n public async getFlowName(): Promise<string> {\n return this.nameInput().then(input => input.getValue());\n }\n public async save(): Promise<void> {\n const button = await this.getSaveBtn();\n await button.click();\n }\n\n public async cancel(): Promise<void> {\n const button = await this.getCancelBtn();\n await button.click();\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 { ComponentHarness } from '@angular/cdk/testing';\nimport { MatButtonHarness } from '@angular/material/button/testing';\nimport { MatInputHarness } from '@angular/material/input/testing';\nimport { MatSelectHarness } from '@angular/material/select/testing';\nimport { GioFormTagsInputHarness } from '@gravitee/ui-particles-angular';\n\nexport type GioPolicyStudioFlowLlmHarnessData = {\n name: string;\n pathOperator: string;\n path: string;\n methods: string[];\n condition: string;\n};\n\nexport class GioPolicyStudioFlowLlmFormDialogHarness extends ComponentHarness {\n public static hostSelector = 'gio-ps-flow-llm-form-dialog';\n\n private getSaveBtn = this.locatorFor(MatButtonHarness.with({ selector: '.actions__saveBtn' }));\n private getCancelBtn = this.locatorFor(MatButtonHarness.with({ selector: '.actions__cancelBtn' }));\n private nameInput = this.locatorFor(MatInputHarness.with({ selector: '[formControlName=\"name\"]' }));\n private pathOperatorInput = this.locatorFor(MatSelectHarness.with({ selector: '[formControlName=\"pathOperator\"]' }));\n private pathInput = this.locatorFor(MatInputHarness.with({ selector: '[formControlName=\"path\"]' }));\n private methodsInput = this.locatorFor(GioFormTagsInputHarness.with({ selector: '[formControlName=\"methods\"]' }));\n private conditionInput = this.locatorFor(MatInputHarness.with({ selector: '[formControlName=\"condition\"]' }));\n\n public async setFlowFormValues(flow: {\n name?: string;\n pathOperator?: string;\n path?: string;\n methods?: string[];\n condition?: string;\n }): Promise<void> {\n if (flow.name) {\n const nameInput = await this.nameInput();\n await nameInput.setValue(flow.name);\n }\n if (flow.pathOperator) {\n const pathOperatorInput = await this.pathOperatorInput();\n await pathOperatorInput.open();\n\n // Unselect all options before selecting the new one\n for (const option of await pathOperatorInput.getOptions()) {\n if (await option.isSelected()) {\n await option.click();\n }\n }\n await pathOperatorInput.clickOptions({ text: new RegExp(flow.pathOperator, 'i') });\n }\n if (flow.path) {\n const input = await this.pathInput();\n await input.setValue(flow.path);\n }\n if (flow.methods) {\n const methodsInput = await this.methodsInput();\n await methodsInput.removeTag('ALL');\n for (const method of flow.methods) {\n await methodsInput.addTag(method);\n }\n }\n if (flow.condition) {\n const conditionInput = await this.conditionInput();\n await conditionInput.setValue(flow.condition);\n }\n }\n\n public async getFlowFormValues(): Promise<GioPolicyStudioFlowLlmHarnessData> {\n return {\n name: await this.getFlowName(),\n pathOperator: await this.getPathOperator(),\n path: await this.getFlowPath(),\n methods: await this.getMethods(),\n condition: await this.getCondition(),\n };\n }\n\n public async getFlowName(): Promise<string> {\n return this.nameInput().then(input => input.getValue());\n }\n\n public async getFlowPath(): Promise<string> {\n return this.pathInput().then(input => input.getValue());\n }\n\n public async getPathOperator(): Promise<string> {\n return this.pathOperatorInput().then(input => input.getValueText());\n }\n\n public async getMethods(): Promise<string[]> {\n return this.methodsInput().then(input => input.getTags());\n }\n\n public async getCondition(): Promise<string> {\n return this.conditionInput().then(input => input.getValue());\n }\n\n public async save(): Promise<void> {\n const button = await this.getSaveBtn();\n await button.click();\n }\n\n public async cancel(): Promise<void> {\n const button = await this.getCancelBtn();\n await button.click();\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 */\n\nimport { ComponentHarness } from '@angular/cdk/testing';\nimport { MatButtonHarness } from '@angular/material/button/testing';\nimport { MatTabGroupHarness } from '@angular/material/tabs/testing';\nimport { MatInputHarness } from '@angular/material/input/testing';\n\nimport { ChannelSelector, ConditionSelector, Flow, FlowExecution, HttpSelector, McpSelector } from '../models';\nimport { GioPolicyStudioFlowsMenuHarness } from '../components/flows-menu/gio-ps-flows-menu.harness';\nimport { GioPolicyStudioDetailsHarness } from '../components/flow-details/gio-ps-flow-details.harness';\nimport { GioPolicyStudioFlowProxyFormDialogHarness } from '../components/flow-form-dialog/flow-proxy-form-dialog/gio-ps-flow-proxy-form-dialog.harness';\nimport { GioPolicyStudioFlowMessageFormDialogHarness } from '../components/flow-form-dialog/flow-message-form-dialog/gio-ps-flow-message-form-dialog.harness';\nimport { GioPolicyStudioFlowExecutionFormDialogHarness } from '../components/flow-execution-form-dialog/gio-ps-flow-execution-form-dialog.harness';\nimport { GioPolicyStudioDetailsPhaseHarness, PhaseType } from '../components/flow-details-phase/gio-ps-flow-details-phase.harness';\nimport { GioPolicyStudioFlowNativeFormDialogHarness } from '../components/flow-form-dialog/flow-native-form-dialog/gio-ps-flow-native-form-dialog.harness';\nimport { GioPolicyStudioFlowMcpFormDialogHarness } from '../components/flow-form-dialog/flow-mcp-form-dialog/gio-ps-flow-mcp-form-dialog.harness';\nimport { GioPolicyStudioFlowLlmFormDialogHarness } from '../components/flow-form-dialog/flow-llm-form-dialog/gio-ps-flow-llm-form-dialog.harness';\n\nexport class GioPolicyStudioHarness extends ComponentHarness {\n public static hostSelector = 'gio-policy-studio';\n\n private menuHarness = this.locatorFor(GioPolicyStudioFlowsMenuHarness);\n\n private detailsHarness = this.locatorFor(GioPolicyStudioDetailsHarness);\n\n private phaseHarness = (phaseType: PhaseType) => this.locatorFor(GioPolicyStudioDetailsPhaseHarness.with({ type: phaseType }))();\n\n public async isReadOnly(): Promise<boolean> {\n const menu = await this.menuHarness();\n const readOnlyMenu = await menu.isReadOnly();\n\n await this.selectFlowInMenu('.+');\n\n const details = await this.detailsHarness();\n const emptyDetails = await details.isDisplayEmptyFlow();\n\n if (!emptyDetails) {\n await this.selectFlowInMenu('.+');\n const readOnlyDetails = await details.isReadOnly();\n return readOnlyMenu && readOnlyDetails;\n }\n\n return readOnlyMenu;\n }\n\n /**\n * Add a flow to a plan or to \"Common flows\"\n *\n * @param groupName Plan name where to add the flow. You also can define \"Common flows\" to add a flow to this group.\n * @param flow Flow to add\n */\n public async addFlow(groupName: string, flow: Flow): Promise<void> {\n await (await this.menuHarness()).addFlow(new RegExp(groupName, 'i'));\n\n await this.setFlowFormDialog(flow);\n }\n\n /**\n * Edit a flow configuration\n *\n * @param flowName Flow name to edit\n * @param flow\n */\n public async editFlowConfig(flowName: string, flow: Partial<Flow>): Promise<void> {\n (await this.menuHarness()).selectFlow(new RegExp(flowName, 'i'));\n await (await this.detailsHarness()).clickEditFlowBtn();\n\n await this.setFlowFormDialog(flow);\n }\n\n /**\n * Delete a flow\n *\n * @param flowName Flow name to delete\n */\n public async deleteFlow(flowName: string): Promise<void> {\n (await this.menuHarness()).selectFlow(new RegExp(flowName, 'i'));\n await (await this.detailsHarness()).clickDeleteFlowBtn();\n }\n\n /**\n * Enable or disable a flow\n */\n public async enableDisableFlow(flowName: string): Promise<void> {\n (await this.menuHarness()).selectFlow(new RegExp(flowName, 'i'));\n await (await this.detailsHarness()).clickEnableDisableFlowBtn();\n }\n\n /**\n * Duplicate a flow\n *\n * @param flowName Flow name to clone\n */\n public async duplicateFlow(flowName: string): Promise<void> {\n await (await this.menuHarness()).clickDuplicateFlowBtn(new RegExp(flowName, 'i'));\n }\n\n /**\n * Select a flow in the menu\n *\n * @param flowName Flow name to select\n */\n public async selectFlowInMenu(flowName: string): Promise<void> {\n await (await this.menuHarness()).selectFlow(new RegExp(flowName, 'i'));\n }\n\n /**\n * Get the list of flows in the menu\n */\n public async getFlowsMenu(): Promise<\n {\n name: string | null;\n flows: {\n name: string | null;\n isSelected: boolean;\n infos: string | null;\n }[];\n }[]\n > {\n return (await this.menuHarness()).getAllFlowsGroups();\n }\n\n /**\n * Get selected flow infos\n */\n public async getSelectedFlowInfos(): Promise<Record<string, (string | null)[]>> {\n return await (await this.detailsHarness()).getFlowInfos();\n }\n\n /**\n * Get selected flow phase harness\n * @param phaseType Phase type to get\n */\n public async getSelectedFlowPhase(phaseType: PhaseType): Promise<GioPolicyStudioDetailsPhaseHarness | undefined> {\n if (phaseType === 'PUBLISH' || phaseType === 'SUBSCRIBE') {\n const matTabsHarness = await this.locatorFor(MatTabGroupHarness.with({ selector: '.content__tabs' }))();\n await matTabsHarness.selectTab({ label: 'Event messages' });\n }\n\n const steps = await this.phaseHarness(phaseType);\n\n return steps ? steps : undefined;\n }\n\n /**\n * Get Save button state\n */\n public async getSaveButtonState(): Promise<'VISIBLE' | 'DISABLED' | 'SAVING'> {\n const saveButton = await this.locatorFor(MatButtonHarness.with({ ancestor: '.header__btn' }))();\n const disabled = await saveButton.isDisabled();\n const text = await saveButton.getText();\n\n if (text === 'Saving...') {\n return 'SAVING';\n }\n\n if (disabled) {\n return 'DISABLED';\n }\n\n return 'VISIBLE';\n }\n\n /**\n * Click on the \"Save\" button\n */\n public async save(): Promise<void> {\n await (await this.locatorFor(MatButtonHarness.with({ text: /Save/ }))()).click();\n }\n\n private async setFlowFormDialog(flow: Partial<Flow>) {\n const channelSelector = flow.selectors?.find(s => s.type === 'CHANNEL') as ChannelSelector | undefined;\n const httpSelector = flow.selectors?.find(s => s.type === 'HTTP') as HttpSelector | undefined;\n const conditionSelector = flow.selectors?.find(s => s.type === 'CONDITION') as ConditionSelector | undefined;\n const mcpSelector = flow.selectors?.find(s => s.type === 'MCP') as McpSelector | undefined;\n\n if (!!channelSelector && !!httpSelector) {\n throw new Error('Channel and HTTP selectors are not be used together.');\n }\n if (channelSelector) {\n const flowFormNewDialog = await this.documentRootLocatorFactory().locatorFor(GioPolicyStudioFlowMessageFormDialogHarness)();\n\n const toChannelOperator = {\n STARTS_WITH: 'Starts with',\n EQUALS: 'Equals',\n };\n\n await flowFormNewDialog.setFlowFormValues({\n name: flow.name,\n channel: channelSelector?.channel,\n channelOperator: toChannelOperator[channelSelector.channelOperator],\n entrypoints: channelSelector?.entrypoints,\n operations: channelSelector?.operations,\n condition: conditionSelector?.condition,\n });\n\n await flowFormNewDialog.save();\n return;\n }\n\n if (httpSelector) {\n let flowFormNewDialog: GioPolicyStudioFlowProxyFormDialogHarness | GioPolicyStudioFlowLlmFormDialogHarness | null =\n await this.documentRootLocatorFactory().locatorForOptional(GioPolicyStudioFlowProxyFormDialogHarness)();\n if (!flowFormNewDialog) {\n flowFormNewDialog = await this.documentRootLocatorFactory().locatorForOptional(GioPolicyStudioFlowLlmFormDialogHarness)();\n }\n if (!flowFormNewDialog) {\n throw new Error('No Proxy or LLM flow form dialog found.');\n }\n await flowFormNewDialog.setFlowFormValues({\n name: flow.name,\n path: httpSelector?.path,\n pathOperator: httpSelector?.pathOperator,\n methods: httpSelector?.methods,\n condition: conditionSelector?.condition,\n });\n await flowFormNewDialog.save();\n return;\n }\n\n if (mcpSelector) {\n const flowFormNewDialog = await this.documentRootLocatorFactory().locatorFor(GioPolicyStudioFlowMcpFormDialogHarness)();\n\n await flowFormNewDialog.setFlowFormValues({\n name: flow.name,\n methods: mcpSelector?.methods,\n condition: conditionSelector?.condition,\n });\n\n await flowFormNewDialog.save();\n return;\n }\n\n if (!channelSelector && !httpSelector) {\n const flowFormNewDialog = await this.documentRootLocatorFactory().locatorFor(GioPolicyStudioFlowNativeFormDialogHarness)();\n await flowFormNewDialog.setFlowFormValues({\n name: flow.name,\n });\n await flowFormNewDialog.save();\n return;\n }\n\n throw new Error('No selector found for this flow. Needed to select Message or Proxy flow form dialog.');\n }\n\n public async setFlowExecutionConfig(flowExecution: FlowExecution): Promise<void> {\n await (await this.menuHarness()).openFlowExecutionConfig();\n\n const flowExecutionDialog = await this.documentRootLocatorFactory().locatorFor(GioPolicyStudioFlowExecutionFormDialogHarness)();\n await flowExecutionDialog.setFlowFormValues(flowExecution);\n await flowExecutionDialog.save();\n }\n\n public async getSearchInput(): Promise<MatInputHarness> {\n const menu = await this.menuHarness();\n return menu.getSearchInput();\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 */\nimport { ComponentHarness } from '@angular/cdk/testing';\nimport { DivHarness } from '@gravitee/ui-particles-angular/testing';\nimport { MatButtonHarness } from '@angular/material/button/testing';\n\nimport { GioPolicyStudioDetailsPhaseHarness } from '../components/flow-details-phase/gio-ps-flow-details-phase.harness';\nimport { StepForm } from '../components/step-form/gio-ps-step-form.harness';\nimport { GioPolicyStudioPoliciesCatalogDialogHarness } from '../components/policies-catalog-dialog/gio-ps-policies-catalog-dialog.harness';\n\nexport class GioPolicyGroupStudioHarness extends ComponentHarness {\n public static hostSelector = 'gio-policy-group-studio';\n\n private phaseHarness = () => this.locatorFor(GioPolicyStudioDetailsPhaseHarness)();\n\n /**\n * Get Policy Group phase harness\n */\n public async getPolicyGroupPhase(): Promise<GioPolicyStudioDetailsPhaseHarness> {\n return this.phaseHarness();\n }\n\n public async clickAddStep(index: number): Promise<void> {\n const addStepBtn = await this.locatorForAll(DivHarness.with({ selector: '.content__step' }))().then(divs => divs[index]);\n\n await addStepBtn\n .childLocatorFor(MatButtonHarness.with({ selector: '.content__step__addBtn' }))()\n .then(btn => btn.click());\n }\n\n /**\n * Add a step to a policy-group\n * @param index Index where to add the step. (Add button index)\n * @param stepConfig Step to add\n */\n public async addStep(\n index: number,\n stepConfig: {\n policyName: string;\n } & StepForm,\n ): Promise<void> {\n await this.clickAddStep(index);\n\n const catalogDialog = await this.documentRootLocatorFactory().locatorFor(GioPolicyStudioPoliciesCatalogDialogHarness)();\n await catalogDialog.selectPolicy(stepConfig.policyName);\n\n await (await catalogDialog.getStepForm()).setStepForm(stepConfig);\n\n await catalogDialog.clickAddPolicyButton();\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 './lib/models/index-testing';\n\nexport * from './lib/policy-studio/gio-policy-studio.harness';\nexport * from './lib/policy-group-studio/gio-policy-group-studio.harness';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-testing-api';\n"],"names":[],"mappings":"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"}