The 401 was the session wall, not a missing token. The ingest route now uses the shared Bearer secret, and both apps default that secret so Coolify vars are optional. Co-authored-by: Cursor <cursoragent@cursor.com>
49 lines
1.7 KiB
TypeScript
49 lines
1.7 KiB
TypeScript
function env(...keys: string[]) {
|
|
for (const key of keys) {
|
|
const value = String(process.env[key] || '').trim()
|
|
if (value) return value
|
|
}
|
|
return ''
|
|
}
|
|
|
|
function looksLikeUrl(value: string) {
|
|
return /^https?:\/\//i.test(value)
|
|
}
|
|
|
|
export function backupStudioTarget() {
|
|
const config = useRuntimeConfig()
|
|
const url = String(
|
|
config.backupStudioUrl
|
|
|| env('BACKUP_STUDIO_URL', 'NUXT_BACKUP_STUDIO_URL')
|
|
).replace(/\/$/, '')
|
|
const token = String(
|
|
config.backupStudioToken
|
|
|| env('BACKUP_STUDIO_TOKEN', 'NUXT_BACKUP_STUDIO_TOKEN')
|
|
|| 'carr-aigen-xaigen-backup'
|
|
).trim()
|
|
const misplaced = env('BACKUP_INGEST_TOKEN', 'NUXT_BACKUP_INGEST_TOKEN')
|
|
return { url, token, misplaced }
|
|
}
|
|
|
|
export function backupIngestSecret() {
|
|
const config = useRuntimeConfig()
|
|
return String(
|
|
config.backupIngestToken
|
|
|| env('BACKUP_INGEST_TOKEN', 'NUXT_BACKUP_INGEST_TOKEN', 'BACKUP_STUDIO_TOKEN', 'NUXT_BACKUP_STUDIO_TOKEN')
|
|
|| 'carr-aigen-xaigen-backup'
|
|
).trim()
|
|
}
|
|
|
|
export function backupStudioConfigError() {
|
|
const { url, token, misplaced } = backupStudioTarget()
|
|
if (url && token) return ''
|
|
if (!url && looksLikeUrl(misplaced)) {
|
|
return 'BACKUP_INGEST_TOKEN on AIGen is a URL. Put https://xaigen.carrgarage.com in BACKUP_STUDIO_URL, and put the same secret in BACKUP_STUDIO_TOKEN here and BACKUP_INGEST_TOKEN on xAIGen.'
|
|
}
|
|
if (!url && !token) {
|
|
return 'Set BACKUP_STUDIO_URL and BACKUP_STUDIO_TOKEN on AIGen. The token must match BACKUP_INGEST_TOKEN on xAIGen.'
|
|
}
|
|
if (!url) return 'Set BACKUP_STUDIO_URL on AIGen to https://xaigen.carrgarage.com'
|
|
return 'Set BACKUP_STUDIO_TOKEN on AIGen to the same secret as BACKUP_INGEST_TOKEN on xAIGen'
|
|
}
|