import { Observable } from 'rxjs';
import { MixerConnection } from '../mixer-connection';
/**
 * Per-client resource listings (playlists, shows, snapshots, cues) are not part of the
 * global SETD/SETS mixer state. They are sent only on request, via dedicated list messages.
 *
 * This config maps each reply command to whether it is keyed by a parent:
 * - flat list `CMD^entry^entry…`            (`keyed: false`, e.g. `PLISTS`, `SHOWLIST`)
 * - keyed list `CMD^key^entry^entry…`       (`keyed: true`, e.g. `PLIST_TRACKS`, `SNAPSHOTLIST`,
 *   `CUELIST`), where `key` is the parent (playlist/show)
 *
 * The store stores each message under its "address" (the command plus its key, i.e. everything
 * before the entries): 1 leading part for flat lists, 2 for keyed lists.
 *
 * An empty list is sent with a trailing separator and no entries (e.g. `CUELIST^Default^`),
 * which splits into a single empty-string entry — so empty entries are filtered out on parsing.
 */
export declare const RESOURCE_LIST_CONFIG: Record<string, {
    keyed: boolean;
}>;
/** Key addresses and prefixes in the state */
export declare const PLAYLISTS_KEY = "PLISTS";
export declare const PLAYLIST_TRACKS_KEY = "PLIST_TRACKS";
export declare const SHOWS_KEY = "SHOWLIST";
export declare const SNAPSHOTS_KEY = "SNAPSHOTLIST";
export declare const CUES_KEY = "CUELIST";
/**
 * Request a per-client resource list and emit the entries of the matching reply once.
 * Subscribes to the reply BEFORE sending the request, so the reply is never missed.
 * @param conn connection
 * @param requestCmd full message to send, e.g. `MEDIA_GET_PLISTS` or `SHOWLIST`
 * @param replyCmd reply command to wait for, e.g. `PLISTS` or `SHOWLIST`
 */
export declare function requestResourceList(conn: MixerConnection, requestCmd: string, replyCmd: string): Observable<string[]>;
