import { KVNamespace } from "@cloudflare/workers-types";
import { Authorize, Installation, InstallationStore, InstallationStoreQuery, SlackOAuthEnv } from "slack-edge";
/**
 * Options for initializing a KV Installation Store instance
 */
export interface KVInstallationStoreOptions {
    /**
     * When this is set to true, calls to the `auth.test` Slack API method will use the authTestCacheStorage as a cache.
     * The authTestCacheStorage must be provided when this is set to true.
     * The default is set to false.
     */
    authTestCacheEnabled?: boolean;
    /**
     * When `authTestCacheEnabled` is set to true, this is the TTL expiration time in seconds for each cache entry.
     * 0 or negative value indicates the cache is permanent. The default is 10 minutes.
     * @see https://developers.cloudflare.com/kv/api/write-key-value-pairs/#expiring-keys
     */
    authTestCacheExpirationSecs?: number;
    /**
     * The KVNamespace to use for caching `auth.test` responses.
     * This must be provided when `authTestCacheEnabled` is set to true.
     */
    authTestCacheStorage?: KVNamespace;
}
export declare class KVInstallationStore<E extends SlackOAuthEnv> implements InstallationStore<E> {
    #private;
    constructor(env: E, namespace: KVNamespace, options?: KVInstallationStoreOptions);
    save(installation: Installation, request?: Request | undefined): Promise<void>;
    findBotInstallation(query: InstallationStoreQuery): Promise<Installation | undefined>;
    findUserInstallation(query: InstallationStoreQuery): Promise<Installation | undefined>;
    deleteBotInstallation(query: InstallationStoreQuery): Promise<void>;
    deleteUserInstallation(query: InstallationStoreQuery): Promise<void>;
    deleteAll(query: InstallationStoreQuery): Promise<void>;
    toAuthorize(): Authorize<E>;
    /**
     * Calls the `auth.test` Slack API method, first checking the auth.test cache if enabled.
     * @param client - The Slack API client to use for the request.
     * @param token - The token to use for the request, and/or cache key.
     * @returns The response from the `auth.test` Slack API method.
     */
    private callAuthTest;
    /**
     * Caches the auth.test response in the KV cache.
     * If the operation fails, it does not throw.
     * @param token - The token to use for the cache key.
     * @param authTestResponse - The auth.test response to cache.
     */
    private cacheAuthTestResponse;
}
export declare function toBotInstallationQuery(clientId: string, q: InstallationStoreQuery): string;
export declare function toUserInstallationQuery(clientId: string, q: InstallationStoreQuery): string;
export declare function toBotInstallationKey(clientId: string, installation: Installation): string;
export declare function toUserInstallationKey(clientId: string, installation: Installation): string;
//# sourceMappingURL=kv-installation-store.d.ts.map