export type HostedDemoSessionPersistedRuntimeState = 'running' | 'stopped' | 'starting' | 'failed';
export type HostedDemoSessionPersistedValue = {
    sessionId: string;
    userId: string;
    createdAt: number;
    expiresAt: number;
    lastActionAt: number;
    lastRuntimeStartAt?: number;
    worktreePath: string;
    projectPath: string;
    rivetPort: number;
    runtimeState: HostedDemoSessionPersistedRuntimeState;
};
export type HostedDemoSessionStoreRecord = {
    sessionId: string;
    value: HostedDemoSessionPersistedValue;
};
export type HostedDemoSessionStore = {
    initialize: () => Promise<void>;
    loadAll: () => Promise<HostedDemoSessionStoreRecord[]>;
    set: (sessionId: string, value: HostedDemoSessionPersistedValue, ttlMs: number) => Promise<void>;
    delete: (sessionId: string) => Promise<void>;
    shutdown: () => Promise<void>;
};
export declare class InMemoryHostedDemoSessionStore implements HostedDemoSessionStore {
    private readonly records;
    initialize(): Promise<void>;
    loadAll(): Promise<HostedDemoSessionStoreRecord[]>;
    set(sessionId: string, value: HostedDemoSessionPersistedValue, _ttlMs: number): Promise<void>;
    delete(sessionId: string): Promise<void>;
    shutdown(): Promise<void>;
}
type RedisHostedDemoSessionStoreOptions = {
    redisUrl: string;
    keyPrefix: string;
};
export declare class RedisHostedDemoSessionStore implements HostedDemoSessionStore {
    private readonly client;
    private readonly keyPrefix;
    constructor(options: RedisHostedDemoSessionStoreOptions);
    initialize(): Promise<void>;
    loadAll(): Promise<HostedDemoSessionStoreRecord[]>;
    set(sessionId: string, value: HostedDemoSessionPersistedValue, ttlMs: number): Promise<void>;
    delete(sessionId: string): Promise<void>;
    shutdown(): Promise<void>;
    private getKey;
}
export {};
//# sourceMappingURL=HostedDemoSessionStore.d.ts.map