diff --git a/azion/production/azion.json b/azion/production/azion.json index b6445a654..b0451adcc 100644 --- a/azion/production/azion.json +++ b/azion/production/azion.json @@ -68,6 +68,11 @@ "origin-id": 153663, "origin-key": "6ec17c87-d2fb-4c28-a3b7-588b1ae61bf2", "name": "origin-github-allowed-accounts" + }, + { + "origin-id": 154233, + "origin-key": "8c16e835-20af-41d5-a688-cac8e6aefa94", + "name": "origin-console-feedback" } ], "rules-engine": { @@ -152,6 +157,11 @@ "id": 296352, "name": "Route List Client Ids to Github", "phase": "request" + }, + { + "id": 297983, + "name": "Route Send Feedback", + "phase": "request" } ] }, diff --git a/cypress/e2e/edge-application/add-error-response.cy.js b/cypress/e2e/edge-application/add-error-response.cy.js index 1cfe7e210..593bd3dce 100644 --- a/cypress/e2e/edge-application/add-error-response.cy.js +++ b/cypress/e2e/edge-application/add-error-response.cy.js @@ -32,6 +32,7 @@ describe('Edge Application', { tags: ['@dev4'] }, () => { fixtures.edgeApplicationName = generateUniqueName('EdgeApp') // Login cy.login() + cy.intercept('GET', '/api/v3/edge_applications/*/origins*').as('getOriginsApi') fixtures = { functionName: generateUniqueName('EdgeFunction'), @@ -66,6 +67,7 @@ describe('Edge Application', { tags: ['@dev4'] }, () => { //select origin cy.get(selectors.edgeApplication.errorResponses.origin).click() + cy.wait('@getOriginsApi') cy.get(selectors.edgeApplication.errorResponses.origin).find('li').eq(0).click() //assert diff --git a/package.json b/package.json index 76d3f591e..672009842 100644 --- a/package.json +++ b/package.json @@ -54,7 +54,6 @@ "primeflex": "^3.3.1", "primeicons": "^7.0.0", "primevue": "^3.35.0", - "primevue-sass-theme": "git+https://github.com/primefaces/primevue-sass-theme.git#3.39.0", "qrcode.vue": "^3.4.1", "recaptcha-v3": "^1.10.0", "vee-validate": "^4.11.1", diff --git a/src/modules/real-time-metrics/chart/format-c3-graph-props.js b/src/modules/real-time-metrics/chart/format-c3-graph-props.js index 423d48ebf..4c8e5a024 100644 --- a/src/modules/real-time-metrics/chart/format-c3-graph-props.js +++ b/src/modules/real-time-metrics/chart/format-c3-graph-props.js @@ -273,8 +273,11 @@ function generateMeanLineValues(resultChart, mean) { * @returns {string} - The title case string */ export function camelToTitle(text) { - const title = text.replace(/([A-Z])/g, ' $1').replace(/([a-zA-Z])(\d+)/g, '$1 $2') - return title.charAt(0).toUpperCase() + title.slice(1) + return text + .replace(/([a-z])([A-Z0-9])/g, '$1 $2') + .replace(/\s+/g, ' ') + .trim() + .replace(/\b\w/g, (char) => char.toUpperCase()) } /** @@ -527,6 +530,16 @@ export function FormatC3GraphProps({ tooltip: { show: window.innerWidth > CHART_RULES.SCREEN_XSMALL_BREAKPOINT, contents(d, defaultTitleFormat, defaultValueFormat, color) { + if (chartData.type === 'ordered-bar') { + const { index } = d[0] + return this.getTooltipContent( + resetTooltipLabel(d), + defaultTitleFormat, + defaultValueFormat, + () => CHART_RULES.BASE_COLOR_PATTERNS[index] + ) + } + return this.getTooltipContent( resetTooltipLabel(d), defaultTitleFormat, @@ -540,10 +553,17 @@ export function FormatC3GraphProps({ return new Date(d).toLocaleString('en-US') } if (typeof d === 'number') { - return '' + return null } return d }, + name: (name, _, __, idx) => { + if (chartData.type === 'ordered-bar') { + return resultChart[0][idx + 1] + } + + return name + }, value: function (value) { return formatYAxisLabels(value, chartData) } diff --git a/src/modules/real-time-metrics/chart/format-graph.js b/src/modules/real-time-metrics/chart/format-graph.js index 2964aefcd..864609e63 100644 --- a/src/modules/real-time-metrics/chart/format-graph.js +++ b/src/modules/real-time-metrics/chart/format-graph.js @@ -12,8 +12,8 @@ export function formatDataUnit(data, chartData) { if (chartData.dataUnit === 'count') { return { - value: value, - unit: '' + value: Intl.NumberFormat('en', { notation: 'compact' }).format(value), + unit: chartData?.aggregations?.[0]?.variable || '' } } diff --git a/src/modules/real-time-metrics/constants/dashboards.js b/src/modules/real-time-metrics/constants/dashboards.js index ff192c625..b950572c9 100644 --- a/src/modules/real-time-metrics/constants/dashboards.js +++ b/src/modules/real-time-metrics/constants/dashboards.js @@ -130,14 +130,14 @@ const PAGES_DASHBOARDS = { }, { id: 9, - label: 'Bot Manager', - path: 'bot-manager', + label: 'Bot Manager Advanced', + path: 'bot-manager-advanced', groupId: 2, dashboards: [ { id: '371360344901061482', - label: 'Bot Manager Summary', - path: 'bot-manager-summary', + label: 'Overview', + path: 'overview', dataset: 'botManagerMetrics' } ] diff --git a/src/modules/real-time-metrics/constants/reports-texts.js b/src/modules/real-time-metrics/constants/reports-texts.js index 45d48634e..b3376e89c 100644 --- a/src/modules/real-time-metrics/constants/reports-texts.js +++ b/src/modules/real-time-metrics/constants/reports-texts.js @@ -177,32 +177,32 @@ const REPORTS_TEXTS = { botManager: { botManagerSummary: { badBotHits: { - description: 'Number of requests identified as bad bot' + description: 'Number of requests identified as bad bots.' }, goodBotHits: { - description: 'Number of requests identified as good bot' + description: 'Number of requests identified as good bots.' }, botHits: { - description: 'Number of requests identified as bot' + description: 'Number of requests identified as bots.' }, transactions: { - description: 'Number of requests evaluated by the Azion Bot Manager' + description: 'Number of requests evaluated by Azion Bot Manager.' }, botTraffic: { - description: 'Sum of requests grouped by classification' + description: 'Sum of requests grouped by classification.' }, botCaptcha: { - description: 'Sum of CAPTCHA challenge results returned for requests classified as bots' + description: 'Sum of CAPTCHA challenge results returned for requests classified as bots.' }, botAction: { description: - 'Action taken by the Azion Bot Manager for requests identified as bots, displayed in both absolute values and percentages' + 'Actions taken by Azion Bot Manager for requests identified as bots, displayed in both absolute values and percentages.' }, botClassification: { - description: 'Number of requests by bot category' + description: 'Number of requests by bot categories.' }, botActivityMap: { - description: 'Sum of requests identified as bots, presented by the country of origin' + description: 'Sum of requests identified as bots, presented by the country of origin.' } } } diff --git a/src/modules/real-time-metrics/constants/reports.js b/src/modules/real-time-metrics/constants/reports.js index fa7868c36..97e17bd98 100644 --- a/src/modules/real-time-metrics/constants/reports.js +++ b/src/modules/real-time-metrics/constants/reports.js @@ -861,7 +861,7 @@ const REPORTS = [ fields: [], orderDirection: 'DESC', dashboardId: '371360344901061482', - variationType: 'regular', + variationType: 'inverse', helpCenterPath: '' }, { @@ -891,7 +891,7 @@ const REPORTS = [ fields: [], orderDirection: 'DESC', dashboardId: '371360344901061482', - variationType: 'regular', + variationType: 'neutral', helpCenterPath: '' }, { @@ -921,7 +921,7 @@ const REPORTS = [ fields: [], orderDirection: 'DESC', dashboardId: '371360344901061482', - variationType: 'regular', + variationType: 'inverse', helpCenterPath: '' }, { @@ -948,7 +948,7 @@ const REPORTS = [ fields: [], orderDirection: 'DESC', dashboardId: '371360344901061482', - variationType: 'regular', + variationType: 'neutral', helpCenterPath: '' }, { @@ -970,7 +970,7 @@ const REPORTS = [ variable: 'requests' } ], - limit: 5000, + limit: 10000, groupBy: ['classified'], orderDirection: 'ASC', dashboardId: '371360344901061482', @@ -1106,7 +1106,7 @@ const REPORTS = [ label: 'Bot Activity Map', description: REPORTS_TEXTS.botManager.botManagerSummary.botActivityMap.description, aggregationType: 'sum', - columns: 12, + columns: 6, type: 'map', xAxis: 'cat', isTopX: true, diff --git a/src/modules/real-time-metrics/filters/extract-filters-and-variables.js b/src/modules/real-time-metrics/filters/extract-filters-and-variables.js index a4e0e7d2f..0d699cf5a 100644 --- a/src/modules/real-time-metrics/filters/extract-filters-and-variables.js +++ b/src/modules/real-time-metrics/filters/extract-filters-and-variables.js @@ -196,6 +196,11 @@ export default function ExtractFiltersAndVariables(pFilters) { Object.assign(variables, dataset.variables) } + const genericFilter = extractGeneric(pFilters) + if (genericFilter) { + Object.assign(filters, genericFilter.filters) + } + const andFilter = extractAnd(pFilters) if (andFilter) { Object.assign(filters, andFilter.filters) @@ -203,11 +208,6 @@ export default function ExtractFiltersAndVariables(pFilters) { Object.assign(variables, andFilter.variables) } - const genericFilter = extractGeneric(pFilters) - if (genericFilter) { - Object.assign(filters, genericFilter.filters) - } - return { filters, params, diff --git a/src/modules/real-time-metrics/reports/convert-beholder-to-chart.js b/src/modules/real-time-metrics/reports/convert-beholder-to-chart.js index a1291615d..82a3965a5 100644 --- a/src/modules/real-time-metrics/reports/convert-beholder-to-chart.js +++ b/src/modules/real-time-metrics/reports/convert-beholder-to-chart.js @@ -476,11 +476,19 @@ const formatMapChartData = ({ report, data }) => { const geolocCountryName = report.groupBy[0] const fieldName = report.aggregations[0].aggregation || report.fields[0] + const exhibitionValueFormatter = (value) => { + const variableType = report.aggregations[0].variable + return `${camelToTitle(variableType)}: ${Intl.NumberFormat('en', { + notation: 'compact' + }).format(value)}` + } + const heatmap = data[dataset].map((datasetMapData) => { + const value = datasetMapData[fieldName] const result = { countryName: datasetMapData[geolocCountryName], - value: datasetMapData[fieldName], - exhibitionValue: formatYAxisLabels(datasetMapData[fieldName], report), + value, + exhibitionValue: exhibitionValueFormatter(value), rangeVariation: report.variationType } diff --git a/src/modules/real-time-metrics/reports/fill-result-query.js b/src/modules/real-time-metrics/reports/fill-result-query.js index 48a3f15c3..a6286622f 100644 --- a/src/modules/real-time-metrics/reports/fill-result-query.js +++ b/src/modules/real-time-metrics/reports/fill-result-query.js @@ -122,22 +122,14 @@ function generateDefaultGroupedResults(intervalDefaults, data, groupBy, aggregat const groupedValues = [...new Set(data.map((item) => item[groupBy]))] for (let idx = 1; idx <= numberOfResults; idx++) { - const newTimestamp = new Date(intervalToBeAdded * idx + begin).toISOString() + const newTimestamp = new Date(intervalToBeAdded * idx + begin).fromLocaletoBeholderFormat() groupedValues.forEach((groupItem) => { - const existingItem = data.find( - (item) => item.ts === newTimestamp && item.classified === groupItem - ) - - if (existingItem) { - defaultResults.push(existingItem) - } else { - defaultResults.push({ - [aggregationType]: 0, - [groupBy]: groupItem, - ts: newTimestamp - }) - } + defaultResults.push({ + [aggregationType]: 0, + [groupBy]: groupItem, + ts: `${newTimestamp}Z` + }) }) } diff --git a/src/router/hooks/redirectToManager.js b/src/router/hooks/redirectToManager.js index 2af37ab58..88c996b7c 100644 --- a/src/router/hooks/redirectToManager.js +++ b/src/router/hooks/redirectToManager.js @@ -4,13 +4,13 @@ import { useAccountStore } from '@/stores/account' import { listClientIdsReleasedForConsoleService } from '@/services/account-services' /** @type {import('vue-router').NavigationGuardWithThis} */ -export default async function redirectToManager(to, __, next) { +export default async function redirectToManager(to, from, next) { const accountStore = useAccountStore() const isPrivateRoute = !to.meta.isPublic const accountData = accountStore.accountData - if (accountStore.shouldAvoidCalculateServicePlan) { - return next() + if (accountStore.shouldAvoidCalculateServicePlan || accountStore.hasAccessConsole) { + return forceRedirectViewAccess(to, next, from, accountStore) } try { @@ -29,14 +29,19 @@ export default async function redirectToManager(to, __, next) { } // account that are kind client, can access with developer service plan - const [{ isDeveloperSupportPlan }, clientIdsReleadesForConsole] = await Promise.all([ + const [{ isDeveloperSupportPlan }, consoleReleasedClient] = await Promise.all([ loadContractServicePlan({ clientId: accountData.client_id }), - listClientIdsReleasedForConsoleService() + listClientIdsReleasedForConsoleService(accountData.client_id) ]) - accountStore.setAccountData({ isDeveloperSupportPlan: isDeveloperSupportPlan }) + + accountStore.setAccountData({ + isDeveloperSupportPlan: isDeveloperSupportPlan, + consoleReleasedClient + }) + if (!isDeveloperSupportPlan) { - if (clientIdsReleadesForConsole.includes(accountData.client_id)) { - return next() + if (accountStore.hasAccessConsole) { + return forceRedirectViewAccess(to, next, from, accountStore) } permanentRedirectToManager() } @@ -54,3 +59,20 @@ function permanentRedirectToManager() { window.location.replace(managerUrl) } } + +function forceRedirectViewAccess(to, next, from, accountStore) { + const viewsAccessRestriction = accountStore.viewsAccessRestriction + const isPrivateRoute = !to.meta.isPublic + + if (isPrivateRoute && viewsAccessRestriction?.length) { + if (!viewsAccessRestriction.includes(to.name)) { + if (viewsAccessRestriction.includes(from.name)) { + return next(false) + } else { + return next({ name: viewsAccessRestriction[0] }) + } + } + } + + return next() +} diff --git a/src/router/index.js b/src/router/index.js index 40854ce13..123d617fb 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -1,8 +1,10 @@ import { accountRoutes } from '@routes/account-routes' import { activityHistoryRoutes } from '@routes/activity-history-routes' import { azionAiRoutes } from '@routes/azion-ai-routes' + import { cliCallbackRoutes } from '@routes/cli-callback-routes' import { createNewRoutes } from '@routes/create-new-routes' +import { compareWithAzionRoutes } from '@routes/compare-with-azion' import { dataStreamRoutes } from '@/router/routes/data-stream-routes' import { digitalCertificatesRoutes } from '@routes/digital-certificates-routes' import { domainsRoutes } from '@routes/domains-routes' @@ -78,7 +80,8 @@ const router = createRouter({ githubRoutes, billingRoutes, importGithubRoutes, - azionAiRoutes + azionAiRoutes, + compareWithAzionRoutes ].concat(errorRoutes) }) diff --git a/src/router/routes/compare-with-azion/index.js b/src/router/routes/compare-with-azion/index.js new file mode 100644 index 000000000..ee0d37772 --- /dev/null +++ b/src/router/routes/compare-with-azion/index.js @@ -0,0 +1,22 @@ +import * as CompareWithAzionService from '@/services/compare-with-azion' + +export const compareWithAzionRoutes = { + path: '/compare-with-azion/test', + name: 'test-compare-with-azion', + component: () => import('@views/CompareWithAzion/CompareView.vue'), + meta: { + breadCrumbs: [ + { + label: 'Compare with Azion', + to: '/compare-with-azion/test' + } + ] + }, + props: { + testConsolidationService: CompareWithAzionService.testConsolidation, + getTestById: CompareWithAzionService.getTestById, + getAllTestsByClientId: CompareWithAzionService.getAllTestsByClientId, + getResult: CompareWithAzionService.getResult, + getResultFromWebpagetest: CompareWithAzionService.getResultFromWebpagetest + } +} diff --git a/src/services/account-services/list-client-ids-released-for-console-service.js b/src/services/account-services/list-client-ids-released-for-console-service.js index e2086f819..9a52b1edf 100644 --- a/src/services/account-services/list-client-ids-released-for-console-service.js +++ b/src/services/account-services/list-client-ids-released-for-console-service.js @@ -1,17 +1,23 @@ import { AxiosHttpClientAdapter } from '../axios/AxiosHttpClientAdapter' import { getEnvironment } from '@/helpers/get-environment' -export const listClientIdsReleasedForConsoleService = async () => { +export const listClientIdsReleasedForConsoleService = async (clientId) => { const httpResponse = await AxiosHttpClientAdapter.request({ url: `/allowed-accounts`, method: 'GET' }) - return adapt(httpResponse) + return adapt(httpResponse, clientId) } -const adapt = (httpResponse) => { +const adapt = (httpResponse, clientId) => { const environment = getEnvironment() - const clientIds = httpResponse?.body?.[environment]?.client_ids + const env = environment === 'production' ? 'production' : 'stage' + if (!clientId) return {} - return clientIds ?? [] + const client = httpResponse?.body?.[env]?.access[clientId] + + return { + hasAccessConsole: ['global', 'restricted'].includes(client?.type), + views: client?.views || [] + } } diff --git a/src/services/axios/makeCompareWithAzionApi.js b/src/services/axios/makeCompareWithAzionApi.js new file mode 100644 index 000000000..d5160eeb0 --- /dev/null +++ b/src/services/axios/makeCompareWithAzionApi.js @@ -0,0 +1,15 @@ +import axios from 'axios' + +const makeCompareWithAzionApi = () => { + const baseURL = 'https://www.azion.com/api' + + delete axios.defaults.withCredentials + + axios.defaults.headers.common['Content-Type'] = 'application/json' + + return axios.create({ + baseURL + }) +} + +export default makeCompareWithAzionApi diff --git a/src/services/axios/makeWebpagetestApi.js b/src/services/axios/makeWebpagetestApi.js new file mode 100644 index 000000000..03be17250 --- /dev/null +++ b/src/services/axios/makeWebpagetestApi.js @@ -0,0 +1,15 @@ +import axios from 'axios' + +const makeWebpagetestApi = () => { + const baseURL = 'https://www.webpagetest.org/' + + delete axios.defaults.withCredentials + + axios.defaults.headers.common['Content-Type'] = 'application/json' + + return axios.create({ + baseURL + }) +} + +export default makeWebpagetestApi diff --git a/src/services/compare-with-azion/get-test-from-webpagetest.js b/src/services/compare-with-azion/get-test-from-webpagetest.js new file mode 100644 index 000000000..5c08119d6 --- /dev/null +++ b/src/services/compare-with-azion/get-test-from-webpagetest.js @@ -0,0 +1,22 @@ +import { AxiosHttpClientAdapter } from '../axios/AxiosHttpClientAdapter' +import makeWebpagetestApi from '../axios/makeWebpagetestApi' +// import { makeWebpagetestBaseUrlExternal } from './make-base-webpagetest-url' + +export const getResultFromWebpagetest = async (id) => { + if (!id) { + return { + status: 400, + error: `Invalid ID param.` + } + } + + let httpResponse = await AxiosHttpClientAdapter.request( + { + url: `/jsonResult.php?test=${id}`, + method: 'GET' + }, + makeWebpagetestApi() + ) + + return httpResponse +} diff --git a/src/services/compare-with-azion/get-test.js b/src/services/compare-with-azion/get-test.js new file mode 100644 index 000000000..de901f4a0 --- /dev/null +++ b/src/services/compare-with-azion/get-test.js @@ -0,0 +1,66 @@ +import { AxiosHttpClientAdapter } from '../axios/AxiosHttpClientAdapter' +import makeCompareWithAzionApi from '../axios/makeCompareWithAzionApi' +import { makeWebpagetestBaseUrl } from './make-base-url' + +export const getTestById = async (id, clientId = undefined) => { + if (!id) { + return { + status: 400, + error: `Invalid testId param.` + } + } + + let url = `${makeWebpagetestBaseUrl()}/db/test?id=${id}` + + if (clientId) { + url = url.concat(`&clientId=${clientId}`) + } + + let httpResponse = await AxiosHttpClientAdapter.request( + { + url: url, + method: 'GET' + }, + makeCompareWithAzionApi() + ) + + return httpResponse +} + +export const getAllTestsByClientId = async (clientId) => { + if (!clientId) { + return { + status: 400, + error: `Invalid clientId param.` + } + } + + let httpResponse = await AxiosHttpClientAdapter.request( + { + url: `${makeWebpagetestBaseUrl()}/db/all-clientid-tests?clientId=${clientId}`, + method: 'GET' + }, + makeCompareWithAzionApi() + ) + + return httpResponse +} + +export const getResult = async (testId) => { + if (!testId) { + return { + status: 400, + error: `Invalid testId param.` + } + } + + let httpResponse = await AxiosHttpClientAdapter.request( + { + url: `${makeWebpagetestBaseUrl()}/result?id=${testId}`, + method: 'GET' + }, + makeCompareWithAzionApi() + ) + + return httpResponse +} diff --git a/src/services/compare-with-azion/index.js b/src/services/compare-with-azion/index.js new file mode 100644 index 000000000..68dca6791 --- /dev/null +++ b/src/services/compare-with-azion/index.js @@ -0,0 +1,11 @@ +import { getTestById, getAllTestsByClientId, getResult } from './get-test' +import { getResultFromWebpagetest } from './get-test-from-webpagetest' +import { testConsolidation } from './test-consolidation' + +export { + getTestById, + getAllTestsByClientId, + getResult, + getResultFromWebpagetest, + testConsolidation +} diff --git a/src/services/compare-with-azion/make-base-url.js b/src/services/compare-with-azion/make-base-url.js new file mode 100644 index 000000000..5de07f4b7 --- /dev/null +++ b/src/services/compare-with-azion/make-base-url.js @@ -0,0 +1,3 @@ +export const makeWebpagetestBaseUrl = () => { + return '/webpagetest' +} diff --git a/src/services/compare-with-azion/make-base-webpagetest-url.js b/src/services/compare-with-azion/make-base-webpagetest-url.js new file mode 100644 index 000000000..a5d4bbe75 --- /dev/null +++ b/src/services/compare-with-azion/make-base-webpagetest-url.js @@ -0,0 +1,3 @@ +export const makeWebpagetestBaseUrlExternal = () => { + return '/webpagetest-external' +} diff --git a/src/services/compare-with-azion/test-consolidation.js b/src/services/compare-with-azion/test-consolidation.js new file mode 100644 index 000000000..e0501f5d3 --- /dev/null +++ b/src/services/compare-with-azion/test-consolidation.js @@ -0,0 +1,19 @@ +import { AxiosHttpClientAdapter } from '../axios/AxiosHttpClientAdapter' +import makeCompareWithAzionApi from '../axios/makeCompareWithAzionApi' +import { makeWebpagetestBaseUrl } from './make-base-url' + +export const testConsolidation = async ({ testId, clientId }) => { + let httpResponse = await AxiosHttpClientAdapter.request( + { + url: `${makeWebpagetestBaseUrl()}/db/consolidation`, + method: 'POST', + body: JSON.stringify({ + testId: testId, + clientId: clientId + }) + }, + makeCompareWithAzionApi() + ) + + return httpResponse +} diff --git a/src/services/edge-application-error-responses-services/make-edge-application-error-responses-base-url.js b/src/services/edge-application-error-responses-services/make-edge-application-error-responses-base-url.js index 2ffa54ed4..5b72b1957 100644 --- a/src/services/edge-application-error-responses-services/make-edge-application-error-responses-base-url.js +++ b/src/services/edge-application-error-responses-services/make-edge-application-error-responses-base-url.js @@ -1,4 +1,4 @@ export const makeEdgeApplicationErrorResponsesBaseUrl = () => { const version = 'v4' - return `${version}/edge/applications` + return `${version}/edge_application/applications` } diff --git a/src/services/edge-firewall-rules-engine-services/make-edge-firewall-rules-engine-reorder-base-url.js b/src/services/edge-firewall-rules-engine-services/make-edge-firewall-rules-engine-reorder-base-url.js index c5572862c..938f1e9bf 100644 --- a/src/services/edge-firewall-rules-engine-services/make-edge-firewall-rules-engine-reorder-base-url.js +++ b/src/services/edge-firewall-rules-engine-services/make-edge-firewall-rules-engine-reorder-base-url.js @@ -1,3 +1,3 @@ export const makeEdgeFirewallRulesEngineReorderBaseUrl = (edgeFirewallId) => { - return `v4/edge/firewall/${edgeFirewallId}/rules/order` + return `v4/edge_firewall/firewalls/${edgeFirewallId}/rules/order` } diff --git a/src/services/edge-firewall-rules-engine-services/reorder-edge-firewall-rules-engine-service.js b/src/services/edge-firewall-rules-engine-services/reorder-edge-firewall-rules-engine-service.js index 6a0358da6..50c3d1343 100644 --- a/src/services/edge-firewall-rules-engine-services/reorder-edge-firewall-rules-engine-service.js +++ b/src/services/edge-firewall-rules-engine-services/reorder-edge-firewall-rules-engine-service.js @@ -18,6 +18,5 @@ const adapt = (payload) => { ) .map(({ id }) => id) } - return parsedPayload } diff --git a/src/stores/account.js b/src/stores/account.js index f014c13b7..ff107bccc 100644 --- a/src/stores/account.js +++ b/src/stores/account.js @@ -26,6 +26,12 @@ export const useAccountStore = defineStore({ shouldAvoidCalculateServicePlan(state) { return !!state.account?.isDeveloperSupportPlan }, + viewsAccessRestriction(state) { + return state.account?.consoleReleasedClient?.views + }, + hasAccessConsole(state) { + return state.account?.consoleReleasedClient?.hasAccessConsole + }, currentTheme(state) { return state.account?.colorTheme }, diff --git a/src/templates/advanced-filter/dialog-filter.vue b/src/templates/advanced-filter/dialog-filter.vue index 5fd6bcb38..a8f6896db 100644 --- a/src/templates/advanced-filter/dialog-filter.vue +++ b/src/templates/advanced-filter/dialog-filter.vue @@ -305,7 +305,7 @@ optionLabel="label" optionValue="value" class="w-full" - placeholder="Select a operator" + placeholder="Select an operator" data-testid="filter-operator-dropdown" > diff --git a/src/views/NetworkLists/CreateView.vue b/src/views/NetworkLists/CreateView.vue index 61c4df873..6a77bf972 100644 --- a/src/views/NetworkLists/CreateView.vue +++ b/src/views/NetworkLists/CreateView.vue @@ -6,6 +6,8 @@