/**
 * 获取项目组的详细信息以及项目组下所有项目。
 *
 * 对应 API: `GET /api/v3/groups/:id`
 *
 * @see https://code.tencent.com/help/api/group#获取项目组的详细信息以及项目组下所有项目
 * @example
 *
 * fetchGroupDetail({
 *   groupId: 'pmd-mobile',
 *   privateToken: 'xxxxx',
 *   includeSubgroups: true,
 * }).then((detail) => {
 *   console.log(detail.projects);
 *   console.log(detail.sub_projects);
 * })
 */
export declare function fetchGroupDetail({ groupId, privateToken, baseUrl, includeSubgroups, }: {
    /** 项目组 ID 或 项目组全路径 namespace_full_path */
    groupId: string | number;
    privateToken: string;
    baseUrl?: string;
    /** 是否包含 subgroup 项目，默认 false */
    includeSubgroups?: boolean;
}): Promise<IGroupDetail>;
/**
 * 获取 / 搜索项目组列表。
 *
 * 对应 API: `GET /api/v3/groups`
 *
 * @see https://code.tencent.com/help/api/group#获取项目组列表
 * @example
 *
 * // 搜索名称包含 'pmd' 的项目组
 * fetchGroups({
 *   privateToken: 'xxxxx',
 *   search: 'pmd',
 *   page: 1,
 *   perPage: 20,
 * }).then((groups) => {
 *   console.log(groups.length);
 * })
 */
export declare function fetchGroups({ privateToken, baseUrl, search, owned, minAccessLevel, createdByMe, excludeOrgGroup, page, perPage, }: {
    privateToken: string;
    baseUrl?: string;
    /** 搜索关键字，按名称或路径匹配 */
    search?: string;
    /** 若为 true 则只返回 owner 为当前用户的 group */
    owned?: boolean;
    /** 指定最小访问级别 */
    minAccessLevel?: number;
    /** 仅当前用户创建 true / 仅非当前用户创建 false / 不传则不过滤 */
    createdByMe?: boolean;
    /** 排除组织架构授权 */
    excludeOrgGroup?: boolean;
    page?: number;
    perPage?: number;
}): Promise<IGroupInfo[]>;
/**
 * 分页获取全部项目组列表（自动翻页）。
 *
 * 基于 {@link fetchGroups} 封装，自动遍历所有分页。
 * @example
 *
 * // 一次拿到当前 token 权限下的所有项目组
 * fetchAllGroups({
 *   privateToken: 'xxxxx',
 * }).then((groups) => {
 *   console.log(groups.length);
 * })
 */
export declare function fetchAllGroups({ privateToken, baseUrl, search, owned, minAccessLevel, createdByMe, excludeOrgGroup, }: {
    privateToken: string;
    baseUrl?: string;
    search?: string;
    owned?: boolean;
    minAccessLevel?: number;
    createdByMe?: boolean;
    excludeOrgGroup?: boolean;
}): Promise<IGroupInfo[]>;
/**
 * 获取某个组下所有项目（通过 `GET /api/v3/groups/:id` 接口，速度更快）。
 *
 * 当 `includeSubgroups` 为 true 时，会同时返回子组下的项目（`sub_projects`）。
 *
 * 兼容旧调用方式：返回值既是数组，又带有 `projects` 属性。
 * - 旧方式：`res.projects.map(item => ...)`
 * - 新方式：`res.map(item => ...)`
 * @example
 *
 * // 获取 pmd-mobile 组下（含子组）所有项目
 * fetchAllProjectsInGroup({
 *   groupName: 'pmd-mobile',
 *   privateToken: 'xxxxx',
 *   includeSubgroups: true,
 * }).then((res) => {
 *   res.forEach(p => console.log(p.path_with_namespace));
 * })
 */
export declare function fetchAllProjectsInGroup({ groupName, privateToken, baseUrl, includeSubgroups, }: {
    groupName: string;
    privateToken: string;
    baseUrl?: string;
    includeSubgroups?: boolean;
}): Promise<any>;
export interface IGroupProject {
    id: number;
    name: string;
    path_with_namespace: string;
    archived: boolean;
    last_activity_at: string;
    [k: string]: any;
}
export interface IGroupProjectFilter {
    /** 自定义过滤函数，返回 true 表示保留 */
    filterFn?: (project: IGroupProject) => boolean;
    /** 需要排除的路径前缀列表，如 ['pmd-mobile/test/'] */
    excludePathPrefixes?: string[];
    /** 是否过滤已归档仓库，默认 true（过滤掉已归档的） */
    excludeArchived?: boolean;
    /** 最后活跃时间不早于此日期（ISO 字符串或 Date），早于此时间的仓库将被过滤 */
    lastActivityAfter?: string | Date;
}
/**
 * 递归获取某个组（含所有子组）下的全部仓库列表，支持多种过滤条件。
 *
 * 通过 `GET /api/v3/groups/:id`（`include_subgroups=true`）一次性获取
 * 组及子组下所有项目，避免逐页遍历 `/projects` 接口，速度更快。
 *
 * @param {object} options 输入配置
 * @param {string} options.groupName 组名称或完整路径，如 'pmd-mobile'
 * @param {string} options.privateToken 密钥
 * @param {string} [options.baseUrl] 自定义 API 基础路径，如 https://git.woa.com
 * @param {IGroupProjectFilter} [options.filter] 过滤配置
 * @returns {Promise<Array<IGroupProject>>} 过滤后的仓库列表
 * @example
 *
 * // 获取 pmd-mobile 组下所有仓库，排除 test 子组、归档仓库，以及前一天没有活跃的仓库
 * const yesterday = new Date();
 * yesterday.setDate(yesterday.getDate() - 1);
 *
 * const projects = await getGroupProjectsRecursive({
 *   groupName: 'pmd-mobile',
 *   privateToken: 'xxxxx',
 *   baseUrl: 'https://git.woa.com',
 *   filter: {
 *     excludePathPrefixes: ['pmd-mobile/test/'],
 *     excludeArchived: true,
 *     lastActivityAfter: yesterday,
 *     filterFn: (project) => !project.name.startsWith('deprecated-'),
 *   },
 * });
 *
 * console.log(projects);
 */
export declare function getGroupProjectsRecursive({ groupName, privateToken, baseUrl, filter, }: {
    groupName: string;
    privateToken: string;
    baseUrl?: string;
    filter?: IGroupProjectFilter;
}): Promise<Array<IGroupProject>>;
/** 项目组基本信息（列表接口返回） */
export interface IGroupInfo {
    id: number;
    name: string;
    path: string;
    description: string;
    avatar_url: string;
    full_name: string;
    full_path: string;
    web_url: string;
    parent_id: number | null;
    [k: string]: any;
}
/** 项目组详情（含 projects / sub_projects） */
export interface IGroupDetail extends IGroupInfo {
    projects: IGroupProject[];
    sub_projects: IGroupProject[];
}
