mirror of
https://github.com/simstudioai/sim.git
synced 2026-02-14 16:35:01 -05:00
* improvement(collab): do not refetch active workflow id * progress on files * more integrations * separate server and client logic * consolidate more code * fix integrations * fix types * consolidate more code * fix tests * fix more bugbot comments * fix type check * fix circular impport * address more bugbot comments * fix ocr integrations * fix typing * remove leftover type * address bugbot comment * fix file block adv mode * fix * normalize file input * fix v2 blocmks for ocr * fix for v2 versions * fix more v2 blocks * update single file blocks * make interface simpler * cleanup fireflies * remove file only annotation * accept all types * added wand to ssh block * user files should be passed through * improve docs * fix slack to include successful execs * fix dropbox upload file * fix sendgrid * fix dropbox * fix * fix * update skills * fix uploaded file --------- Co-authored-by: waleed <walif6@gmail.com>
73 lines
2.1 KiB
TypeScript
73 lines
2.1 KiB
TypeScript
import { getEnv } from '@/lib/core/config/env'
|
|
import { isProd } from '@/lib/core/config/feature-flags'
|
|
|
|
/**
|
|
* Returns the base URL of the application from NEXT_PUBLIC_APP_URL
|
|
* This ensures webhooks, callbacks, and other integrations always use the correct public URL
|
|
* @returns The base URL string (e.g., 'http://localhost:3000' or 'https://example.com')
|
|
* @throws Error if NEXT_PUBLIC_APP_URL is not configured
|
|
*/
|
|
export function getBaseUrl(): string {
|
|
const baseUrl = getEnv('NEXT_PUBLIC_APP_URL')
|
|
|
|
if (!baseUrl) {
|
|
throw new Error(
|
|
'NEXT_PUBLIC_APP_URL must be configured for webhooks and callbacks to work correctly'
|
|
)
|
|
}
|
|
|
|
if (baseUrl.startsWith('http://') || baseUrl.startsWith('https://')) {
|
|
return baseUrl
|
|
}
|
|
|
|
const protocol = isProd ? 'https://' : 'http://'
|
|
return `${protocol}${baseUrl}`
|
|
}
|
|
|
|
/**
|
|
* Ensures a URL is absolute by prefixing the base URL when a relative path is provided.
|
|
* @param pathOrUrl - Relative path (e.g., /api/files/serve/...) or absolute URL
|
|
*/
|
|
export function ensureAbsoluteUrl(pathOrUrl: string): string {
|
|
if (!pathOrUrl) {
|
|
throw new Error('URL is required')
|
|
}
|
|
|
|
if (pathOrUrl.startsWith('/')) {
|
|
return `${getBaseUrl()}${pathOrUrl}`
|
|
}
|
|
|
|
return pathOrUrl
|
|
}
|
|
|
|
/**
|
|
* Returns just the domain and port part of the application URL
|
|
* @returns The domain with port if applicable (e.g., 'localhost:3000' or 'sim.ai')
|
|
*/
|
|
export function getBaseDomain(): string {
|
|
try {
|
|
const url = new URL(getBaseUrl())
|
|
return url.host // host includes port if specified
|
|
} catch (_e) {
|
|
const fallbackUrl = getEnv('NEXT_PUBLIC_APP_URL') || 'http://localhost:3000'
|
|
try {
|
|
return new URL(fallbackUrl).host
|
|
} catch {
|
|
return isProd ? 'sim.ai' : 'localhost:3000'
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Returns the domain for email addresses, stripping www subdomain for Resend compatibility
|
|
* @returns The email domain (e.g., 'sim.ai' instead of 'www.sim.ai')
|
|
*/
|
|
export function getEmailDomain(): string {
|
|
try {
|
|
const baseDomain = getBaseDomain()
|
|
return baseDomain.startsWith('www.') ? baseDomain.substring(4) : baseDomain
|
|
} catch (_e) {
|
|
return isProd ? 'sim.ai' : 'localhost:3000'
|
|
}
|
|
}
|