From 6b1d730e49625a539046b43247b26ef1b2426c65 Mon Sep 17 00:00:00 2001 From: Aloisio Bertolo Bastian Date: Tue, 4 Feb 2025 12:37:51 -0300 Subject: [PATCH 1/3] feat: add origin type live_ingest form to origin pages --- src/services/contract-services/index.js | 4 +- .../load-products-list-service.js | 21 ++++++++++ .../create-origin-service.js | 8 ++++ .../edit-origin-service.js | 8 ++++ .../list-origins-service.js | 7 +++- .../load-origin-service.js | 1 + .../EdgeApplicationsOrigins/Drawer/index.vue | 39 +++++++++++++++---- .../FormFieldsEdgeApplicationsOrigins.vue | 33 ++++++++++++++-- 8 files changed, 107 insertions(+), 14 deletions(-) create mode 100644 src/services/contract-services/load-products-list-service.js diff --git a/src/services/contract-services/index.js b/src/services/contract-services/index.js index c3f399d62..a0db2f507 100644 --- a/src/services/contract-services/index.js +++ b/src/services/contract-services/index.js @@ -1,3 +1,5 @@ import { loadContractServicePlan } from './load-contract-service-plan' import { makeContractBaseUrl } from './make-contract-base-url' -export { loadContractServicePlan, makeContractBaseUrl } +import { loadProductsListService } from './load-products-list-service' + +export { loadContractServicePlan, makeContractBaseUrl, loadProductsListService } diff --git a/src/services/contract-services/load-products-list-service.js b/src/services/contract-services/load-products-list-service.js new file mode 100644 index 000000000..ee016cd99 --- /dev/null +++ b/src/services/contract-services/load-products-list-service.js @@ -0,0 +1,21 @@ +import { AxiosHttpClientAdapter, parseHttpResponse } from '../axios/AxiosHttpClientAdapter' +import { makeContractBaseUrl } from './make-contract-base-url' + +export const loadProductsListService = async ({ clientId }) => { + let httpResponse = await AxiosHttpClientAdapter.request({ + url: `${makeContractBaseUrl()}/${clientId}/products`, + method: 'GET' + }) + const parsedData = adapt(httpResponse) + return parseHttpResponse(parsedData) +} + +const adapt = (httpResponse) => { + const products = httpResponse.body || [] + const slugs = products?.map((product) => product.slug) + + return { + body: { slugs }, + statusCode: httpResponse.statusCode + } +} diff --git a/src/services/edge-application-origins-services/create-origin-service.js b/src/services/edge-application-origins-services/create-origin-service.js index c440784bd..a17436518 100644 --- a/src/services/edge-application-origins-services/create-origin-service.js +++ b/src/services/edge-application-origins-services/create-origin-service.js @@ -23,6 +23,14 @@ const adapt = (payload) => { } } + if (payload.originType === 'live_ingest') { + return { + name: payload.name, + origin_type: payload.originType, + streaming_endpoint: payload.streamingEndpoint + } + } + return { name: payload.name, origin_type: payload.originType, diff --git a/src/services/edge-application-origins-services/edit-origin-service.js b/src/services/edge-application-origins-services/edit-origin-service.js index 7a89f7690..6cfa5c2ff 100644 --- a/src/services/edge-application-origins-services/edit-origin-service.js +++ b/src/services/edge-application-origins-services/edit-origin-service.js @@ -23,6 +23,14 @@ const adapt = (payload) => { } } + if (payload.originType === 'live_ingest') { + return { + name: payload.name, + origin_type: payload.originType, + streaming_endpoint: payload.streamingEndpoint + } + } + let payloadAdapted = { name: payload.name, host_header: payload.hostHeader, diff --git a/src/services/edge-application-origins-services/list-origins-service.js b/src/services/edge-application-origins-services/list-origins-service.js index 646c44d41..e5f4b49b4 100644 --- a/src/services/edge-application-origins-services/list-origins-service.js +++ b/src/services/edge-application-origins-services/list-origins-service.js @@ -37,10 +37,13 @@ const adapt = (httpResponse) => { originId: convertOriginIdToString(origin.origin_id), name: origin.name, originType: originTypeFormat[origin.origin_type], - addresses: formattedListOfAddresses, + addresses: + origin.origin_type === 'live_ingest' + ? [origin.streaming_endpoint] + : formattedListOfAddresses, originProtocolPolicy: origin.origin_protocol_policy, isOriginRedirectionEnabled: origin.is_origin_redirection_enabled, - hostHeader: origin.host_header, + hostHeader: origin.origin_type === 'live_ingest' ? 'N/A' : origin.host_header, method: origin.method, originPath: origin.origin_path, connectionTimeout: origin.connection_timeout, diff --git a/src/services/edge-application-origins-services/load-origin-service.js b/src/services/edge-application-origins-services/load-origin-service.js index 9deb01603..c6d2664df 100644 --- a/src/services/edge-application-origins-services/load-origin-service.js +++ b/src/services/edge-application-origins-services/load-origin-service.js @@ -24,6 +24,7 @@ const adapt = (httpResponse) => { serverRole: address.server_role, isActive: address.is_active })), + streamingEndpoint: origin.streaming_endpoint, originProtocolPolicy: origin.origin_protocol_policy, isOriginRedirectionEnabled: origin.is_origin_redirection_enabled, hostHeader: origin.host_header, diff --git a/src/views/EdgeApplicationsOrigins/Drawer/index.vue b/src/views/EdgeApplicationsOrigins/Drawer/index.vue index 78002c897..d4ad402d3 100644 --- a/src/views/EdgeApplicationsOrigins/Drawer/index.vue +++ b/src/views/EdgeApplicationsOrigins/Drawer/index.vue @@ -5,6 +5,9 @@ import CopyKeyDialog from '@templates/dialog-copy-key' import { refDebounced } from '@vueuse/core' import { useToast } from 'primevue/usetoast' + import { onMounted } from 'vue' + import { useAccountStore } from '@/stores/account' + import { loadProductsListService } from '@/services/contract-services' import { useDialog } from 'primevue/usedialog' import { createOriginService } from '@/services/edge-application-origins-services' import { inject, ref } from 'vue' @@ -47,14 +50,28 @@ } }) + onMounted(async () => { + const products = await loadProductsListService({ clientId: accountStore.account.client_id }) + if (products.slugs.includes('live_ingest')) { + hasLiveIngest.value = true + } + originTypesOptions.value.push({ + label: 'Live Ingest', + value: 'live_ingest', + disabled: !hasLiveIngest.value + }) + }) + + const accountStore = useAccountStore() const toast = useToast() const showCreateOriginDrawer = ref(false) + const hasLiveIngest = ref(false) const showEditOriginDrawer = ref(false) const debouncedDrawerAnimate = 300 const loadCreateOriginDrawer = refDebounced(showCreateOriginDrawer, debouncedDrawerAnimate) const loadEditOriginDrawer = refDebounced(showEditOriginDrawer, debouncedDrawerAnimate) const selectedOriginToEdit = ref('') - const ORIGIN_TYPES_OPTIONS = [ + const originTypesOptions = ref([ { label: 'Single Origin', value: 'single_origin', @@ -70,7 +87,7 @@ value: 'object_storage', disabled: false } - ] + ]) const initialValues = ref({ id: props.edgeApplicationId, @@ -109,11 +126,11 @@ .string() .label('Host Header') .when('originType', { - is: (originType) => originType !== 'object_storage', + is: (originType) => originType !== 'object_storage' && originType !== 'live_ingest', then: (schema) => schema.required() }), addresses: yup.array().when('originType', { - is: (originType) => originType === 'object_storage', + is: (originType) => originType === 'object_storage' || originType === 'live_ingest', then: (schema) => schema.optional(), otherwise: (schema) => schema.of( @@ -130,6 +147,13 @@ return /^(\/\.?[\w][\w.-]*)+$/.test(value) || !value }) .label('Origin Path'), + streamingEndpoint: yup + .string() + .label('Streaming Endpoint') + .when('originType', { + is: (originType) => originType === 'live_ingest', + then: (schema) => schema.required() + }), hmacAuthentication: yup.boolean(), hmacRegionName: yup .string() @@ -285,11 +309,12 @@ @onError="handleFailedCreateOrigin" title="Create Origin" > - diff --git a/src/views/EdgeApplicationsOrigins/FormFields/FormFieldsEdgeApplicationsOrigins.vue b/src/views/EdgeApplicationsOrigins/FormFields/FormFieldsEdgeApplicationsOrigins.vue index cac155ad7..d3abd40f0 100644 --- a/src/views/EdgeApplicationsOrigins/FormFields/FormFieldsEdgeApplicationsOrigins.vue +++ b/src/views/EdgeApplicationsOrigins/FormFields/FormFieldsEdgeApplicationsOrigins.vue @@ -58,6 +58,14 @@ { title: 'Backup', inputValue: 'backup' } ] + const STREAMING_ENDPOINT_OPTIONS = [ + 'br-east-1.azioningest.net', + 'br-east-2.azioningest.net', + 'br-east-3.azioningest.net', + 'us-east-1.azioningest.net', + 'us-east-2.azioningest.net' + ] + const originKeyInput = ref(null) const { value: originKey, setValue: setOriginKey } = useField('originKey') @@ -72,6 +80,7 @@ const { value: originType } = useField('originType') useField('originProtocolPolicy') const { value: method } = useField('method') + const { value: streamingEndpoint } = useField('streamingEndpoint') const { value: originPath } = useField('originPath') const { value: connectionTimeout } = useField('connectionTimeout') const { value: timeoutBetweenBytes } = useField('timeoutBetweenBytes') @@ -83,6 +92,7 @@ const { value: prefix } = useField('prefix') const isSingleOriginType = computed(() => originType.value === 'single_origin') + const isLiveIngestOriginType = computed(() => originType.value === 'live_ingest') const isLoadBalancerOriginType = computed(() => originType.value === 'load_balancer') const isObjectStorageOriginType = computed(() => originType.value === 'object_storage') const isHmacAuthentication = computed(() => !!hmacAuthentication.value) @@ -216,7 +226,22 @@ :description="descriptionOriginType" /> -
+
+ +
+