/**
 * R2 management API routes — owner-only operations that live alongside
 * the existing `/api/settings` + `/api/secrets` flow.
 *
 *   GET  /api/r2/status                — local-asset count + current mode
 *   POST /api/r2/create-bucket         — create the configured bucket (idempotent)
 *   POST /api/r2/sync                  — start a local-asset upload job
 *   GET  /api/r2/sync/:jobId           — poll progress
 *   POST /api/r2/sync/:jobId/cancel    — request cooperative cancel
 *
 * Credentials are read from the encrypted store (`r2.account_id` setting +
 * `r2.access_key_id`/`r2.secret_access_key` secrets) — the body never
 * carries them on the wire. The user is expected to have saved each
 * field via the existing settings UI before invoking these endpoints.
 *
 * Sync runs in-process. Jobs are tracked in a `Map<jobId, SyncJob>` and
 * survive only as long as the process. After completion (or cancel) the
 * job stays around for SYNC_JOB_TTL_MS so the UI can fetch the final
 * state, then auto-evicts.
 */
import type { FastifyInstance } from 'fastify';
import { type AuthService } from '../../services/auth-service.js';
import type { WorkspaceManager } from '../../core/workspace-manager.js';
import { type GitUser } from '../../services/git.js';
export declare function registerR2ApiRoutes(fastify: FastifyInstance, workspaceManager: WorkspaceManager, authService: AuthService, gitUser: GitUser): Promise<void>;
