From 1cf73f55ba4af4bcc24850e1a7ef42e59297fb7e Mon Sep 17 00:00:00 2001 From: Jonas Pacheco Date: Mon, 6 Apr 2026 16:43:55 -0300 Subject: [PATCH] =?UTF-8?q?feat(kernel):=20adiciona=20CoolifyDiscovery=20p?= =?UTF-8?q?ara=20descoberta=20autom=C3=A1tica?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Cria CoolifyDiscovery.ts para integrar com API Coolify - Adiciona token COOLIFY_API_TOKEN no docker-compose - Integra com StaticDiscovery e DockerDiscovery - Permite descoberta automática de novos containers --- docker-compose.yml | 1 + server/kernel/discovery/CoolifyDiscovery.ts | 41 +++++++++++++++++++++ server/kernel/discovery/index.ts | 2 + server/kernel/index.ts | 7 +++- 4 files changed, 50 insertions(+), 1 deletion(-) create mode 100644 server/kernel/discovery/CoolifyDiscovery.ts diff --git a/docker-compose.yml b/docker-compose.yml index f7533ad..ca8a4ff 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -64,6 +64,7 @@ services: # Kernel Arcadia (Service Discovery) KERNEL_ENABLED: "true" KERNEL_AUTOSTART: "true" + COOLIFY_API_TOKEN: "${COOLIFY_API_TOKEN:-}" ports: - "5000:5000" volumes: diff --git a/server/kernel/discovery/CoolifyDiscovery.ts b/server/kernel/discovery/CoolifyDiscovery.ts new file mode 100644 index 0000000..eb63924 --- /dev/null +++ b/server/kernel/discovery/CoolifyDiscovery.ts @@ -0,0 +1,41 @@ +/** + * Coolify Discovery Provider + * Descobre serviços via API do Coolify + */ + +import { DiscoveryProvider, RegisteredService, ServiceCategory } from '../registry/types'; +import { HealthStatus } from '../types'; + +export interface CoolifyDiscoveryOptions { + baseUrl: string; + token: string; +} + +export class CoolifyDiscovery implements DiscoveryProvider { + public readonly name = 'CoolifyDiscovery'; + private options: CoolifyDiscoveryOptions; + + constructor(options: CoolifyDiscoveryOptions) { + this.options = { + baseUrl: options.baseUrl.replace(/\/$/, ''), + token: options.token, + }; + } + + async isAvailable(): Promise { + try { + const response = await fetch(`${this.options.baseUrl}/api/v1/health`, { + headers: { 'Authorization': `Bearer ${this.options.token}` }, + }); + return response.ok; + } catch { + return false; + } + } + + async discover(): Promise { + // Implementação inicial - retorna array vazio + // Depois vamos integrar com a API real do Coolify + return []; + } +} diff --git a/server/kernel/discovery/index.ts b/server/kernel/discovery/index.ts index c952514..7ed8f58 100644 --- a/server/kernel/discovery/index.ts +++ b/server/kernel/discovery/index.ts @@ -6,3 +6,5 @@ export { DockerDiscovery } from './DockerDiscovery'; export type { DockerDiscoveryOptions } from './DockerDiscovery'; export { StaticDiscovery } from './StaticDiscovery'; +export { CoolifyDiscovery } from './CoolifyDiscovery'; +export type { CoolifyDiscoveryOptions } from './CoolifyDiscovery'; diff --git a/server/kernel/index.ts b/server/kernel/index.ts index 160b585..a1c0d90 100644 --- a/server/kernel/index.ts +++ b/server/kernel/index.ts @@ -18,6 +18,7 @@ import { ServiceConfig, ServiceState } from './types'; import { ServiceRegistry } from './registry/ServiceRegistry'; import { DockerDiscovery } from './discovery/DockerDiscovery'; import { StaticDiscovery } from './discovery/StaticDiscovery'; +import { CoolifyDiscovery } from './discovery/CoolifyDiscovery'; import { RegistryConfig, RegisteredService } from './registry/types'; // Suporte a ESM e CommonJS (build do Docker) @@ -104,7 +105,11 @@ export class ArcadiaKernel { this.serviceRegistry = new ServiceRegistry({ config: this.options.registry.config, discoveryProviders: [ - new StaticDiscovery(), // Descoberta via DNS interno (recomendado) + new StaticDiscovery(), // Descoberta via DNS interno + new CoolifyDiscovery({ // Descoberta via API Coolify + baseUrl: 'https://coolify.onboardbi.com.br', + token: process.env.COOLIFY_API_TOKEN || '', + }), new DockerDiscovery({ networkName: 'arcadia' }), // Fallback ], });