/**
 * RemotePublisher — Story 14.1 (v1.5)
 *
 * Pushes a sealed asset (Squad or Skill) to a remote registry over HTTPS.
 * OpenLife does not yet bundle a registry of its own — this module ships
 * the client-side surface so any HTTPS endpoint that accepts an
 * authenticated PUT can serve as the registry.
 *
 * Wire-up:
 *   • Activate by setting OPENLIFE_REMOTE_PUBLISH_URL (base URL).
 *   • Optional OPENLIFE_REMOTE_PUBLISH_TOKEN — sent as `Authorization: Bearer ...`.
 *   • Each publish request is: PUT <base>/<kind>/<id>/<sha256>.md
 *     with the asset markdown as the request body and the SHA-256 in
 *     the `X-Asset-Sha256` header so the server can verify integrity.
 *
 * Failure shape: never throws. Returns
 *   { ok: false, error: '<stable-code>', detail?: '<short>' }
 * with stable codes:
 *   • 'remote_publish_not_configured'  — no URL env var set
 *   • 'invalid_url'                    — base URL is malformed
 *   • 'fetch_error'                    — network / abort
 *   • 'http_<status>'                  — non-2xx response
 *   • 'asset_not_found'                — local file disappeared mid-flight
 *   • 'sha_mismatch_local'             — local re-hash != provided sha256
 */
export interface RemotePublishResult {
    ok: boolean;
    url?: string;
    status?: number;
    etag?: string;
    error?: string;
    detail?: string;
}
export type AssetKind = 'squad' | 'skill';
export interface RemotePublisherOptions {
    /** Override OPENLIFE_REMOTE_PUBLISH_URL for tests. */
    baseUrl?: string;
    /** Override OPENLIFE_REMOTE_PUBLISH_TOKEN for tests. */
    token?: string;
    /** Override the global fetch for tests. */
    fetchImpl?: typeof fetch;
    /** Request timeout in ms (default 15s). */
    timeoutMs?: number;
}
export declare class RemotePublisher {
    private readonly baseUrl;
    private readonly token;
    private readonly fetchImpl;
    private readonly timeoutMs;
    constructor(opts?: RemotePublisherOptions);
    isConfigured(): boolean;
    publishAsset(kind: AssetKind, id: string, sha256: string, file: string): Promise<RemotePublishResult>;
    private buildUrl;
}
