mirror of
https://github.com/supabase/supabase.git
synced 2026-09-07 02:20:52 +08:00
59 lines
1.9 KiB
TypeScript
59 lines
1.9 KiB
TypeScript
import { IS_PLATFORM } from '@/lib/constants'
|
|
|
|
const NIMBUS_PROD_PROJECTS_URL = process.env.NIMBUS_PROD_PROJECTS_URL
|
|
// Cron jobs and database hooks run inside Postgres, where Kong is available by this network alias.
|
|
const SELF_HOSTED_EDGE_FUNCTIONS_URL = 'http://kong:8000/functions/v1'
|
|
const PLATFORM_TLDS = ['co', 'red'] as const
|
|
|
|
export const buildDatabaseEdgeFunctionUrl = (
|
|
slug: string,
|
|
projectRef: string,
|
|
restUrl?: string,
|
|
isPlatform = IS_PLATFORM
|
|
) => {
|
|
if (!isPlatform) return `${SELF_HOSTED_EDGE_FUNCTIONS_URL}/${slug}`
|
|
|
|
const projectOrigin = restUrl ? new URL(restUrl).origin : `https://${projectRef}.supabase.co`
|
|
return `${projectOrigin}/functions/v1/${slug}`
|
|
}
|
|
|
|
export const isEdgeFunctionUrl = (
|
|
url: string,
|
|
projectRef: string,
|
|
restUrl?: string,
|
|
isPlatform = IS_PLATFORM
|
|
) => {
|
|
if (!isPlatform && url.startsWith(`${SELF_HOSTED_EDGE_FUNCTIONS_URL}/`)) return true
|
|
|
|
const projectOrigin = restUrl ? new URL(restUrl).origin : undefined
|
|
if (projectOrigin && url.startsWith(`${projectOrigin}/functions/v1/`)) return true
|
|
|
|
return PLATFORM_TLDS.some(
|
|
(tld) =>
|
|
url.startsWith(`https://${projectRef}.functions.supabase.${tld}/`) ||
|
|
url.startsWith(`https://${projectRef}.supabase.${tld}/functions/`)
|
|
)
|
|
}
|
|
|
|
export const isValidEdgeFunctionURL = (url: string, isPlatform: boolean) => {
|
|
if (NIMBUS_PROD_PROJECTS_URL !== undefined) {
|
|
const apexDomain = NIMBUS_PROD_PROJECTS_URL.replace('https://*.', '').replace(/\./g, '\\.')
|
|
const nimbusRegex = new RegExp('^https://[a-z]*\\.' + apexDomain + '/functions/v[0-9]{1}/.*$')
|
|
return nimbusRegex.test(url)
|
|
}
|
|
|
|
if (!isPlatform) {
|
|
const regexValidLocalEdgeFunctionURL = new RegExp(
|
|
/^https?:\/\/[^\s/?#]+\/functions\/v[0-9]{1}\/.*$/
|
|
)
|
|
|
|
return regexValidLocalEdgeFunctionURL.test(url)
|
|
}
|
|
|
|
const regexValidEdgeFunctionURL = new RegExp(
|
|
/^https:\/\/[a-z]{20}\.supabase\.(red|co)\/functions\/v[0-9]{1}\/.*$/
|
|
)
|
|
|
|
return regexValidEdgeFunctionURL.test(url)
|
|
}
|