fix(integrations): pull bindings из CFDM вместо обратного push
Docker / build (push) Failing after 19s

Устраняет fetch failed при ручном sync, когда CFDM не может достучаться до VPS Tracker. Ошибки показывают URL; UI подсказывает URL из App Switcher.

Co-authored-by: Cursor <[email protected]>
This commit is contained in:
Denozordec
2026-08-01 00:36:04 +07:00
co-authored by Cursor
parent fd2d5f39c0
commit c5198cdd7f
4 changed files with 139 additions and 15 deletions
@@ -31,6 +31,8 @@ function generateToken(): string {
interface CfdmIntegrationFormProps {
settings?: Settings
/** URL CFDM из App Switcher — подсказка и fallback, если cfdmApiUrl не сохранён */
fallbackCfdmUrl?: string
onSave: (values: {
cfdmApiUrl?: string
integrationToken?: string
@@ -42,6 +44,7 @@ interface CfdmIntegrationFormProps {
/** CFDM integration form — Frame/SettingRow. Preview https://reui.io/preview/base/settings-2 · https://reui.io/preview/base/settings-16 */
export function CfdmIntegrationForm({
settings,
fallbackCfdmUrl,
onSave,
isSaving,
}: CfdmIntegrationFormProps) {
@@ -79,9 +82,9 @@ export function CfdmIntegrationForm({
})
}
// Sync по сохранённому токену (URL — cfdmApiUrl или App Switcher на API).
const hasSavedToken = Boolean(settings?.integrationTokenSet)
const hasSavedUrl = Boolean(settings?.cfdmApiUrl?.trim())
const switcherUrl = fallbackCfdmUrl?.trim() || ''
const canSync =
hasSavedToken || Boolean(settings?.integrationLastSyncAt?.trim())
@@ -93,7 +96,7 @@ export function CfdmIntegrationForm({
<FieldGroup className="gap-0">
<SettingRow
title="Принимать синхронизацию"
description="Разрешить CFDM пушить домены и сервисы"
description="Разрешить CFDM пушить домены и сервисы (авто-sync). Ручная кнопка работает и без этого."
>
<Controller
control={form.control}
@@ -111,8 +114,10 @@ export function CfdmIntegrationForm({
title="URL API CFDM"
description={
hasSavedUrl
? 'Сохранён — для failover vps_down и ручного sync'
: 'Не сохранён: укажите URL и нажмите «Сохранить», либо настройте CFDM в App Switcher'
? 'Сохранён — ручной sync и failover vps_down'
: switcherUrl
? `Не сохранён — sync пойдёт на App Switcher: ${switcherUrl}`
: 'Укажите URL API CFDM (например http://192.168.x.x:6363) и сохраните'
}
labelFor="cfdm-api-url"
stacked
@@ -120,7 +125,7 @@ export function CfdmIntegrationForm({
<Input
id="cfdm-api-url"
className="w-full"
placeholder="https://cfdm.example.com"
placeholder={switcherUrl || 'http://192.168.100.67:6363'}
{...form.register('cfdmApiUrl')}
/>
</SettingRow>
@@ -256,6 +256,9 @@ function SettingsIntegrationsPage() {
>
<CfdmIntegrationForm
settings={current}
fallbackCfdmUrl={
appSwitcher.apps.find((a) => a.id === 'cfdm')?.url
}
isSaving={saveMut.isPending}
onSave={(values) => saveMut.mutate(values)}
/>