drone/web/cypress/utils/generateRequestObject.ts

69 lines
1.7 KiB
TypeScript

/*
* Copyright 2024 Harness Inc. All rights reserved.
* Use of this source code is governed by the PolyForm Shield 1.0.0 license
* that can be found in the licenses directory at the root of this repository, also available at
* https://polyformproject.org/wp-content/uploads/2020/06/PolyForm-Shield-1.0.0.txt.
*/
import qs from 'qs'
import { mapKeys } from 'lodash-es'
export const generateHeaders = (headers: RequestInit['headers'] = {}): RequestInit['headers'] => {
const retHeaders: RequestInit['headers'] = {
'content-type': 'application/json'
}
const token = localStorage.getItem('token')
if (token && token.length > 0) {
const parsedToken = JSON.parse(decodeURIComponent(atob(token)))
retHeaders.Authorization = `Bearer ${parsedToken}`
}
Object.assign(
retHeaders,
mapKeys(headers, (_value, key) => key.toLowerCase())
)
return retHeaders
}
export const generateRequestObject = (
method: string,
endpoint: string,
body?: any,
queryParams?: { [key: string]: string },
headerOptions?: HeadersInit,
origin?: string
): object => {
const headers = generateHeaders(headerOptions)
const apiOrigin = origin ?? window.location.origin
let url = `${apiOrigin}/${endpoint}`
if (method === 'DELETE' && typeof body === 'string') {
url += `/${body}`
}
if (queryParams && Object.keys(queryParams).length) {
url += `?${qs.stringify(queryParams)}`
}
let requestBody: BodyInit | null = null
if (body instanceof FormData) {
requestBody = body
} else if (typeof body === 'object') {
try {
requestBody = JSON.stringify(body)
} catch {
requestBody = body
}
} else {
requestBody = body
}
return {
method: method,
url: url,
body: requestBody,
headers: headers
}
}