(ou // api/platform?endpoint=… com 'clean_urls'). A lista é fechada // (platform_api_routes()), e cada endpoint continua a autenticar-se a si // próprio: este ficheiro só carrega o arranque do site e despacha. // // Um site com implementação própria de um endpoint declara-a no // platform_connect(): 'api_files' => ['backup_trigger' => ] // (a silver tem guardas com outros nomes). O 'migrations_dir' do site chega ao // agente, como chega às páginas. declare(strict_types=1); require_once __DIR__ . '/../hub_bootstrap.php'; // $repo_root, $pdo, o arranque do site require_once __DIR__ . '/../functions_routes.php'; $endpoint = (string) ($_GET['endpoint'] ?? ''); $file = platform_api_routes()[$endpoint] ?? null; if ($file === null) { hub_json(['ok' => false, 'error' => 'endpoint desconhecido'], 404); } $cfg = function_exists('platform_config') ? platform_config() : []; if (!empty($cfg['migrations_dir'])) { $GLOBALS['MIGRATIONS_DIR'] = (string) $cfg['migrations_dir']; } $target = (string) ($cfg['api_files'][$endpoint] ?? (dirname(__DIR__) . '/' . $file)); unset($cfg, $file); require $target;