import { IAppInitParams, IGetOrRefreshDataInPaginatedListParams, IGetOrRefreshParams, IGetOrRefreshReturnValue, IGetPaginatedListByPageParams, IInsertPaginatedListItemParams, IRemoveItemFromPaginatedListParams, ISetParams, IUpdateItemScoreFromPaginatedList } from "./types";
/**
 * Get latest cache data or force refresh before returning the value
 * @param {Object} params
 * @param {string} params.key - Data cache key
 * @param {number} params.expiry - (optional) Expiry in seconds
 * @param {boolean} params.forceRefresh - (optional) Force refresh
 * @param {boolean} params.parseResult - (optional) Call JSON.parse on resulting data
 * @param {function} params.cacheRefreshHandler - (optional) Refresh function
 * @returns
 */
export declare const getOrRefresh: <T>(params: IGetOrRefreshParams<T>) => IGetOrRefreshReturnValue<T>;
/**
 * Retrieve the formatted default cache key for an item in a paginated list.
 * @param   {string} listKey - Your list's cache key
 * @param   {string} itemId  - Your item id
 * @returns {string}
 */
export declare const getDefaulItemCacheKeyForPaginatedList: (listKey: string, itemId: string) => string;
/**
 * Get latest cache data of 'key'.
 * Wraps the `getOrRefresh` function and enables you to update the score of an item in the list.
 * @param   {Object}   params
 * @param   {string}   params.listKey - Your list's cache key
 * @param   {string}   params.id - Item ID
 * @param   {string}   params.key - (optional) Data cache key
 * @param   {number}   params.expiry - (optional) Expiry in seconds
 * @param   {boolean}  params.forceRefresh - (optional) Force refresh
 * @param   {boolean}  params.parseResult - (optional) Call JSON.parse on resulting data
 * @param   {number}   params.score - (optional) Determines the new score of the cache data. Update LRU score.
 * @param   {boolean}  params.updateScoreInPaginatedList - (optional) If set to true, thn apply new score.
 * @param   {function} params.cacheRefreshHandler - (optional) Refresh function
 * @returns {Object} IGetOrRefreshReturnValue
 */
export declare const getOrRefreshDataInPaginatedList: <T>(params: IGetOrRefreshDataInPaginatedListParams<T>) => IGetOrRefreshReturnValue<T>;
/**
 * Set redis cache.
 * Object data will be sanitzed with JSON.stringify()
 * @param {Object} params
 * @param {string} params.key - Data cache key
 * @param {string | number | Object} params.value - Your data for the cache key
 * @param {number} expiry - (optional) Expiry in seconds. No expiry set by default.
 * @returns {string} 'OK' | 'Error'
 */
export declare const set: <T>(params: ISetParams<T>) => Promise<string | "OK">;
/**
 * Required initial function to run from the start of your app
 * @param params
 * @param {Object} params.redis - (optional) Your ioredis instance
 * @param {Object} params.upstashRedis - (optional) Your @upstash/redis instance
 * @param {number} params.maxPaginatedItems - (optional) Maximum number of paginated items before it starts evicting data.
 */
export declare const init: (params: IAppInitParams) => void;
/**
 * Get paginated list by page.
 * Always in ascending order.
 * @param   {Object}   params
 * @param   {string}   params.key - Your list's cache key
 * @param   {number}   params.page - Target page
 * @param   {number}   params.sizePerPage - Total items in a single page
 * @param   {boolean}  params.ascendingOrder - (optional) Fetch list in ascending order. High to low by default.
 * @returns {Object} IGetPaginatedListByPageParams
 */
export declare const getPaginatedListByPage: (params: IGetPaginatedListByPageParams) => Promise<string[]>;
/**
 * Fetch total items in a list
 * @param {string} key - Your list's cache key
 * @returns
 */
export declare const getPaginatedListTotalItems: (key: string) => Promise<number>;
/**
 * Automatically insert ID data from your array of objects.
 * Use non-zero & non-negative scores.
 * Each payload will be cac
 * @param   {Object}  params
 * @param   {string}  params.listKey - Your list's cache key
 * @param   {Array}   params.listData - Your list data in array form.
 * @param   {string}  params.cacheDataPrefix - Prefix cache to your data. Example: `users:${id}`
 * @param   {boolean} params.cachePayload - If set to true, each payload in the list will be cached.
 * @param   {number}  params.cachePayloadExpiry - Expiry for each payload cache, unit in seconds.
 * @returns {string} - 'OK' | 'Error'
 */
export declare const insertRecordsToPaginatedList: <T>(params: {
    listKey: string;
    listData: T & {
        score: number;
        id: string;
    }[];
    cacheDataPrefix?: string;
    cachePayload?: boolean;
    cachePayloadExpiry?: number;
}) => Promise<string | "OK">;
/**
 * Insert an item to the list using the item ID.
 * Use non-zero & non-negative scores.
 * @param {Object} params
 * @param {string} params.key - Your list's cache key
 * @param {string} params.id - Data id
 * @param {number} params.score - (optional) Score order of the item in the paginated list, determining its placement.
 * @returns {string}
 */
export declare const insertToPaginatedList: (params: IInsertPaginatedListItemParams) => Promise<string | "OK">;
/**
 * Remove item from the list.
 * @param {Object} params
 * @param {string} params.key - Your list's cache key
 * @param {string} params.id - Item ID
 * @returns {string} 'OK' | 'Error'
 */
export declare const removeItemFromPaginatedList: (params: IRemoveItemFromPaginatedListParams) => Promise<string | "OK">;
/**
 * Update the score of an item in the paginated list to move it up or down in the order.
 * @param {Object} params
 * @param {string} params.key - Your list's cache key
 * @param {string} params.id - Item ID*
 * @param {number} params.score - Score order of the item in the paginated list, determining its placement.
 * @returns
 */
export declare const updateItemScoreFromPaginatedList: (params: IUpdateItemScoreFromPaginatedList) => Promise<string | "OK">;
/**
 * Generate a string key for your cache based on the formatted filter properties of your database query.
 * {"limit" : 1 , "team" : "team-id" } => "limit1Teamteamid"
 * @param filters
 * @returns
 */
export declare const generateKeyFromQueryFilters: (filters: Record<string, any>) => string;
/**
 * Hard delete paginated list and items
 * @param   {string} listKey
 * @returns {string | number} Status from upstash redis or ioredis
 */
export declare const deletePaginatedList: (listKey: string) => Promise<string | number>;
