Files
supabase/apps/studio/lib/api/apiHelpers.ts
Terry Sutton dff6c817ae Chore/assistant in self hosted (#33422)
* Add layoutheader to self-hosted to allow showing assistant

* Fix layout

* Remove debug checks

* Check for key

* Dont load tables

* Fix assistant error handling

* Yeet

* Update turbo.json

* Another one

* god

* Fix

* Add fallback

* last attempt to fix

* Clean up

* take the wheel

* Tiny fix

* Skip enrich query for local, to match prod

---------

Co-authored-by: Alaister Young <alaister@users.noreply.github.com>
Co-authored-by: Joshen Lim <joshenlimek@gmail.com>
2025-02-18 17:37:53 +08:00

70 lines
2.0 KiB
TypeScript

import { IS_PLATFORM } from 'lib/constants'
import { snakeCase } from 'lodash'
/**
* Construct headers for api request.
* For platform, it will include apiKey into the provided headers.
*
* To prevent relay frontend request headers like useragent, referrer... into the middleware requests.
* We will only keep the header keys that are in this list: Accept, Authorization, Content-Type, x-connection-encrypted
*/
export function constructHeaders(headers: { [prop: string]: any }) {
if (headers) {
const cleansedHeaders = {
Accept: headers.Accept,
Authorization: headers.Authorization,
cookie: headers.cookie,
'Content-Type': headers['Content-Type'],
'x-connection-encrypted': headers['x-connection-encrypted'],
} as any
// clean up key with underfined value
Object.keys(cleansedHeaders).forEach((key) =>
cleansedHeaders[key] === undefined ? delete cleansedHeaders[key] : {}
)
return {
...cleansedHeaders,
...(IS_PLATFORM
? { apiKey: `${process.env.READ_ONLY_API_KEY}` }
: { apiKey: `${process.env.SUPABASE_SERVICE_KEY}` }),
}
} else {
return {
'Content-Type': 'application/json',
Accept: 'application/json',
}
}
}
// Typically for HTTP payloads
// @ts-ignore
export const toSnakeCase = (object) => {
const snakeCaseObject = {}
const snakeCaseArray = []
if (!object) return null
if (Array.isArray(object)) {
for (const item of object) {
if (typeof item === 'object') {
snakeCaseArray.push(toSnakeCase(item))
} else {
snakeCaseArray.push(item)
}
}
return snakeCaseArray
} else if (typeof object === 'object') {
for (const key of Object.keys(object)) {
if (typeof object[key] === 'object') {
// @ts-ignore
snakeCaseObject[snakeCase(key)] = toSnakeCase(object[key])
} else {
// @ts-ignore
snakeCaseObject[snakeCase(key)] = object[key]
}
}
return snakeCaseObject
} else {
return object
}
}