import type { SlackAccessor } from '../../accessor/slack.ts';
import { DirListing, FileStat, type PathSpec } from '../../types.ts';
import { type Listed } from '../hierarchy/readdir.ts';
import type { ScopeMatch } from '../hierarchy/scope.ts';
export declare const VIRTUAL_ROOTS: readonly ["channels", "dms", "users"];
export declare function latestMessageTs(accessor: SlackAccessor, channelId: string): Promise<number | null>;
/**
 * The channel's day directories, newest first.
 *
 * A day dir is real for any date the channel has existed for, so the bare
 * listing is a window: the last `maxDays` up to the newest message. A glob
 * names its own window instead, and then the cap does not apply, because the
 * span is already bounded by what was typed.
 */
export declare function dateRange(latestTs: number, created: number, maxDays?: number, span?: readonly [string, string] | null): string[];
export declare function listFiles(accessor: SlackAccessor, match: ScopeMatch, own: FileStat): Promise<Listed>;
/** List a Slack directory; a conversation Slack will not show is EACCES. */
export declare function readdir(accessor: SlackAccessor, pathSpec: PathSpec, entry?: FileStat | null, parent?: FileStat | null, limit?: number): Promise<FileStat[] | DirListing>;
//# sourceMappingURL=readdir.d.ts.map