Docker / build (push) Failing after 22s
Синхронизация bindings в vps_domains с привязкой по IP, API приёма с Bearer-токеном, настройки и App Switcher из SQLite, UI доменов на VPS и уведомление CFDM при vps_down. Co-authored-by: Cursor <cursoragent@cursor.com>
58 lines
1.7 KiB
TypeScript
58 lines
1.7 KiB
TypeScript
import { settingsRepository } from '@cfdm/db/repositories/settings'
|
|
import { vpsRepository } from '@cfdm/db/repositories/vps'
|
|
import type { VpsTrackerEvent } from '@cfdm/shared/contracts/integration-cfdm'
|
|
|
|
const SETTINGS_ID = 'settings-main'
|
|
|
|
function resolveCfdmApiBase(): string | null {
|
|
const row = settingsRepository.getRow(SETTINGS_ID)
|
|
if (!row) return null
|
|
const explicit = row.cfdmApiUrl?.trim()
|
|
if (explicit) return explicit.replace(/\/$/, '')
|
|
const cfdm = settingsRepository.getAppSwitcher().apps.find((a) => a.id === 'cfdm')
|
|
return cfdm?.url?.trim().replace(/\/$/, '') ?? null
|
|
}
|
|
|
|
export async function notifyCfdmVpsEvent(
|
|
event: VpsTrackerEvent['event'],
|
|
vpsIds: string[],
|
|
): Promise<void> {
|
|
if (vpsIds.length === 0) return
|
|
|
|
const row = settingsRepository.getRow(SETTINGS_ID)
|
|
if (!row?.integrationEnabled) return
|
|
|
|
const token = settingsRepository.getIntegrationToken()
|
|
const baseUrl = resolveCfdmApiBase()
|
|
if (!baseUrl || !token) return
|
|
|
|
const payload: VpsTrackerEvent = {
|
|
event,
|
|
vps: vpsIds.map((id) => {
|
|
const vps = vpsRepository.get(id)
|
|
return {
|
|
id,
|
|
ip: vps?.ip ?? undefined,
|
|
label: vps?.dns || vps?.ip || id,
|
|
}
|
|
}),
|
|
timestamp: new Date().toISOString(),
|
|
}
|
|
|
|
try {
|
|
const res = await fetch(`${baseUrl}/api/v1/integrations/vps-tracker/events`, {
|
|
method: 'POST',
|
|
headers: {
|
|
'Content-Type': 'application/json',
|
|
Authorization: `Bearer ${token}`,
|
|
},
|
|
body: JSON.stringify(payload),
|
|
})
|
|
if (!res.ok) {
|
|
console.warn(`CFDM event notify failed (${res.status})`)
|
|
}
|
|
} catch (err) {
|
|
console.warn('CFDM event notify error:', err instanceof Error ? err.message : err)
|
|
}
|
|
}
|