import * as React from 'react';
import { type AtomEffect } from 'recoil';
import { type WebSocketClientInterface } from '../../api';
import { RequestExtrasSerializable } from '../../api/http';
import { type GlobalTaskContext, type PathParamStore, type QueryParamStore, type RouteMatchStore, type SingleVariable } from '../../types';
import { type BackendStore, type BrowserStore, type PersistenceStore } from '../../types/core';
/**
 * Get the session key used to persist a variable value
 *
 * @param uid uid of the variable to persist
 */
export declare function getSessionKey(uid: string): string;
export declare function PathParamSync({ children }: {
    children: React.ReactNode;
}): React.ReactNode;
export declare function RouteMatchSync({ children }: {
    children: React.ReactNode;
}): React.ReactNode;
interface Effect<T = any, TStore extends PersistenceStore = PersistenceStore> {
    (variable: SingleVariable<T, TStore>, requestExtras: RequestExtrasSerializable, wsClient: WebSocketClientInterface, taskContext: GlobalTaskContext): AtomEffect<T>;
}
type StoreTypeMap = {
    BackendStore: BackendStore;
    BrowserStore: BrowserStore;
    QueryParamStore: QueryParamStore;
    _PathParamStore: PathParamStore;
    _RouteMatchStore: RouteMatchStore;
};
type StoresConfig = {
    [K in keyof StoreTypeMap]: {
        effect: Effect<any, StoreTypeMap[K]>;
    };
};
export declare const STORES: StoresConfig;
/**
 * Get the effect creator function for a given variable
 *
 * Looks up correct definition based on variable.store type
 *
 * @param variable variable to get effect for
 */
export declare function getEffect<T, StoreType extends PersistenceStore>(variable: SingleVariable<T, StoreType>): Effect<T, StoreType> | null;
/**
 * Wrapper for the store providers.
 *
 * Applies all STORES around the children.
 */
export declare function StoreProviders({ children }: {
    children: React.ReactNode;
}): JSX.Element;
export {};
//# sourceMappingURL=persistence.d.ts.map