import { APIResource } from "../../../core/resource.js";
import { APIPromise } from "../../../core/api-promise.js";
import { CursorLimitPagination, type CursorLimitPaginationParams, PagePromise } from "../../../core/pagination.js";
import { RequestOptions } from "../../../internal/request-options.js";
export declare class BaseRepositories extends APIResource {
    static readonly _key: readonly ['managedDefense', 'vulnerabilityDiscovery', 'repositories'];
    /**
     * Creates an upload repository or reserves an asynchronous deployed Worker import
     * by name. Worker imports require Idempotency-Key.
     *
     * @example
     * ```ts
     * const repository =
     *   await client.managedDefense.vulnerabilityDiscovery.repositories.create(
     *     {
     *       account_id: '023e105f4ecef8ad9ca31a8372d0c353',
     *       name: 'x',
     *     },
     *   );
     * ```
     */
    create(params: RepositoryCreateParams, options?: RequestOptions): APIPromise<RepositoryCreateResponse>;
    /**
     * Lists repositories available for vulnerability discovery in an account.
     *
     * @example
     * ```ts
     * // Automatically fetches more pages as needed.
     * for await (const repositoryListResponse of client.managedDefense.vulnerabilityDiscovery.repositories.list(
     *   { account_id: '023e105f4ecef8ad9ca31a8372d0c353' },
     * )) {
     *   // ...
     * }
     * ```
     */
    list(params: RepositoryListParams, options?: RequestOptions): PagePromise<RepositoryListResponsesCursorLimitPagination, RepositoryListResponse>;
    /**
     * Gets repository metadata, source readiness, and customer scan history.
     *
     * @example
     * ```ts
     * const repository =
     *   await client.managedDefense.vulnerabilityDiscovery.repositories.get(
     *     '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e',
     *     { account_id: '023e105f4ecef8ad9ca31a8372d0c353' },
     *   );
     * ```
     */
    get(repoID: string, params: RepositoryGetParams, options?: RequestOptions): APIPromise<RepositoryGetResponse>;
}
export declare class Repositories extends BaseRepositories {
}
export type RepositoryListResponsesCursorLimitPagination = CursorLimitPagination<RepositoryListResponse>;
export type RepositoryCreateResponse = RepositoryCreateResponse.UnionMember0 | RepositoryCreateResponse.Repository;
export declare namespace RepositoryCreateResponse {
    interface UnionMember0 {
        repository: UnionMember0.Repository;
        upload: UnionMember0.Upload;
    }
    namespace UnionMember0 {
        interface Repository {
            id: string;
            name: string;
            readiness: 'awaiting_source' | 'processing' | 'ready' | 'failed';
            source: 'upload' | 'worker';
            import_error?: Repository.ImportError;
        }
        namespace Repository {
            interface ImportError {
                code: 'worker_import_failed';
                message: 'Worker import failed.';
            }
        }
        interface Upload {
            token: string;
            expires_in: 3600;
            remote: string;
        }
    }
    interface Repository {
        repository: Repository.Repository;
    }
    namespace Repository {
        interface Repository {
            id: string;
            name: string;
            readiness: 'awaiting_source' | 'processing' | 'ready' | 'failed';
            source: 'upload' | 'worker';
            import_error?: Repository.ImportError;
        }
        namespace Repository {
            interface ImportError {
                code: 'worker_import_failed';
                message: 'Worker import failed.';
            }
        }
    }
}
export interface RepositoryListResponse {
    id: string;
    created_at: string;
    name: string;
    readiness: 'awaiting_source' | 'processing' | 'ready' | 'failed';
    source: 'upload' | 'worker';
    import_error?: RepositoryListResponse.ImportError;
}
export declare namespace RepositoryListResponse {
    interface ImportError {
        code: 'worker_import_failed';
        message: 'Worker import failed.';
    }
}
export interface RepositoryGetResponse {
    repository: RepositoryGetResponse.Repository;
    scans: Array<RepositoryGetResponse.Scan>;
}
export declare namespace RepositoryGetResponse {
    interface Repository {
        id: string;
        created_at: string;
        name: string;
        readiness: 'awaiting_source' | 'processing' | 'ready' | 'failed';
        source: 'upload' | 'worker';
        import_error?: Repository.ImportError;
    }
    namespace Repository {
        interface ImportError {
            code: 'worker_import_failed';
            message: 'Worker import failed.';
        }
    }
    interface Scan {
        id: string;
        completed_at: string | null;
        message: string | null;
        phase: 'provisioning' | 'indexing' | 'analyzing' | 'reporting' | 'finalizing' | null;
        repositories: Array<Scan.Repository>;
        started_at: string | null;
        status: 'requested' | 'accepted' | 'running' | 'completed' | 'failed' | 'rejected' | 'cancelled';
        submitted_at: string;
        /**
         * UTC ISO-8601 interval. Start is inclusive, end is exclusive, and the interval
         * must be positive and at most seven days.
         */
        telemetry_window?: Scan.TelemetryWindow;
    }
    namespace Scan {
        interface Repository {
            id: string;
            name: string;
            phase: 'provisioning' | 'indexing' | 'analyzing' | 'reporting' | 'finalizing' | null;
            report_status: 'not_ready' | 'pending_review' | 'published' | 'withdrawn';
            status: 'requested' | 'accepted' | 'running' | 'completed' | 'failed' | 'rejected' | 'cancelled';
        }
        /**
         * UTC ISO-8601 interval. Start is inclusive, end is exclusive, and the interval
         * must be positive and at most seven days.
         */
        interface TelemetryWindow {
            end: string;
            start: string;
        }
    }
}
export interface RepositoryCreateParams {
    /**
     * Path param
     */
    account_id: string;
    /**
     * Body param
     */
    name: string;
    /**
     * Body param
     */
    worker_script_name?: string;
    /**
     * Header param: Optional. Supply this header to safely retry a request. Required
     * when `worker_script_name` is supplied.
     */
    'Idempotency-Key'?: string;
}
export interface RepositoryListParams extends CursorLimitPaginationParams {
    /**
     * Path param
     */
    account_id: string;
}
export interface RepositoryGetParams {
    /**
     * Path param
     */
    account_id: string;
    /**
     * Query param
     */
    scan_cursor?: string;
    /**
     * Query param
     */
    scan_limit?: number;
}
export declare namespace Repositories {
    export { type RepositoryCreateResponse as RepositoryCreateResponse, type RepositoryListResponse as RepositoryListResponse, type RepositoryGetResponse as RepositoryGetResponse, type RepositoryListResponsesCursorLimitPagination as RepositoryListResponsesCursorLimitPagination, type RepositoryCreateParams as RepositoryCreateParams, type RepositoryListParams as RepositoryListParams, type RepositoryGetParams as RepositoryGetParams, };
}
//# sourceMappingURL=repositories.d.ts.map