- Implement `releaseHeaders.js` to manage release-related HTTP headers. - Update requests to include runtime-based release headers. - Extend i18n phrases across multiple locales for release runtime and configuration labels. - Enhance unit tests for header building and API availability error handling.
120 lines
3.1 KiB
Vue
120 lines
3.1 KiB
Vue
<script>
|
|
import axios from 'axios'
|
|
import { enqueueRequest } from "@/services/requestQueue.js";
|
|
import { buildCurrentReleaseHeaders, resolveReleaseApiUrl } from "@/services/releaseTimeline.js";
|
|
|
|
/**
|
|
* Get the selected customer number for X-Customer-Number header (used by subusers)
|
|
* @returns {number|null}
|
|
*/
|
|
const getSelectedCustomerNumber = () => {
|
|
const stored = localStorage.getItem('selected_customer_number');
|
|
return stored ? parseInt(stored) : null;
|
|
};
|
|
|
|
export const authenticatedRequest = (url, method, data, catchCallable = null, thenCallable = null) => {
|
|
const token = localStorage.getItem('token');
|
|
if (!token) {
|
|
//throw new Error('No token was found, unable to make authenticated request');
|
|
}
|
|
|
|
// Build headers
|
|
const headers = {
|
|
...buildCurrentReleaseHeaders(),
|
|
};
|
|
if (token && token.length > 0) {
|
|
headers.Authorization = `Bearer ${token}`;
|
|
}
|
|
|
|
// Add X-Customer-Number header if subuser has selected a grant
|
|
const isSubuser = localStorage.getItem('is_subuser') === 'true';
|
|
const selectedCustomerNumber = getSelectedCustomerNumber();
|
|
if (isSubuser && selectedCustomerNumber) {
|
|
headers['X-Customer-Number'] = selectedCustomerNumber;
|
|
}
|
|
|
|
const requestUrl = resolveReleaseApiUrl(url);
|
|
return enqueueRequest(
|
|
() => axios({
|
|
method,
|
|
url: requestUrl,
|
|
...(method === 'GET' ? { params: data } : { data }),
|
|
__skipRequestQueue: true,
|
|
headers
|
|
}),
|
|
{
|
|
method,
|
|
url: requestUrl,
|
|
requestData: {
|
|
params: method === 'GET' ? data : null,
|
|
data: method === 'GET' ? null : data,
|
|
headers,
|
|
}
|
|
}
|
|
)
|
|
.catch((error) => {
|
|
if (catchCallable) {
|
|
// Call the catch callable
|
|
catchCallable(error);
|
|
}
|
|
throw error;
|
|
})
|
|
.then((response) => {
|
|
if (thenCallable) {
|
|
// Call the then callable
|
|
thenCallable(response);
|
|
}
|
|
return response;
|
|
});
|
|
};
|
|
|
|
export const unauthenticatedRequest = (url, method, data, catchCallable = null, thenCallable = null) => {
|
|
return axios({
|
|
method,
|
|
url: resolveReleaseApiUrl(url),
|
|
data,
|
|
headers: buildCurrentReleaseHeaders(),
|
|
}).catch((error) => {
|
|
if (catchCallable) {
|
|
// Call the catch callable
|
|
catchCallable(error);
|
|
}
|
|
throw error;
|
|
}).then((response) => {
|
|
if (thenCallable) {
|
|
// Call the then callable
|
|
thenCallable(response);
|
|
}
|
|
return response;
|
|
});
|
|
};
|
|
|
|
export const paginatedGetRequest = (url, currentPage, itemsPerPage) => {
|
|
const token = localStorage.getItem('token');
|
|
if (!token) {
|
|
return null;
|
|
}
|
|
|
|
// Build headers
|
|
const headers = {
|
|
...buildCurrentReleaseHeaders(),
|
|
Authorization: `Bearer ${token}`
|
|
};
|
|
|
|
// Add X-Customer-Number header if subuser has selected a grant
|
|
const isSubuser = localStorage.getItem('is_subuser') === 'true';
|
|
const selectedCustomerNumber = getSelectedCustomerNumber();
|
|
if (isSubuser && selectedCustomerNumber) {
|
|
headers['X-Customer-Number'] = selectedCustomerNumber;
|
|
}
|
|
|
|
return axios.get(resolveReleaseApiUrl(url), {
|
|
params: {
|
|
page: currentPage,
|
|
limit: itemsPerPage
|
|
},
|
|
headers
|
|
});
|
|
};
|
|
</script>
|