/**
 * Cached wrapper for OktaClient to improve performance
 */
import { OktaClient } from './okta-client.js';
import { IOktaClient, ApiResponse } from './okta-client-interface.js';
import { ICache } from '../infrastructure/cache/interface.js';
import type { OktaUser, OktaGroup, OktaApplication, OktaPolicy, OktaPolicyRule } from './types.js';
export interface CachedOktaClientOptions {
    client: OktaClient;
    cache: ICache;
    defaultTtl?: number;
    cacheKeyPrefix?: string;
}
export declare class CachedOktaClient implements IOktaClient {
    private client;
    private cache;
    private defaultTtl;
    private keyPrefix;
    constructor(options: CachedOktaClientOptions);
    /**
     * Generate a cache key from method name and parameters
     */
    private generateCacheKey;
    /**
     * Get tags for cache invalidation based on resource type
     */
    private getTags;
    /**
     * Wrap a method with caching
     */
    private withCache;
    listUsers(params?: Parameters<IOktaClient['listUsers']>[0]): Promise<ApiResponse<OktaUser[]>>;
    getUser(userIdOrLogin: string): Promise<OktaUser>;
    createUser(userData: Parameters<OktaClient['createUser']>[0], queryParams?: Parameters<OktaClient['createUser']>[1]): Promise<OktaUser>;
    updateUser(userId: string, userData: Parameters<OktaClient['updateUser']>[1]): Promise<OktaUser>;
    deleteUser(userId: string): Promise<void>;
    deactivateUser(userId: string, sendEmail?: boolean): Promise<void>;
    getUserGroups(userId: string, params?: Parameters<IOktaClient['getUserGroups']>[1]): Promise<ApiResponse<OktaGroup[]>>;
    listGroups(params?: Parameters<IOktaClient['listGroups']>[0]): Promise<ApiResponse<OktaGroup[]>>;
    getGroup(groupId: string): Promise<OktaGroup>;
    createGroup(groupData: Parameters<IOktaClient['createGroup']>[0]): Promise<OktaGroup>;
    updateGroup(groupId: string, groupData: Parameters<IOktaClient['updateGroup']>[1]): Promise<OktaGroup>;
    deleteGroup(groupId: string): Promise<void>;
    listGroupMembers(groupId: string, params?: Parameters<IOktaClient['listGroupMembers']>[1]): Promise<ApiResponse<OktaUser[]>>;
    addGroupMember(groupId: string, userId: string): Promise<void>;
    removeGroupMember(groupId: string, userId: string): Promise<void>;
    getLogs(params?: Parameters<IOktaClient['getLogs']>[0]): Promise<ApiResponse<unknown[]>>;
    listApps(params?: Parameters<IOktaClient['listApps']>[0]): Promise<ApiResponse<OktaApplication[]>>;
    getApp(appId: string, expand?: string): Promise<OktaApplication>;
    createApp(appData: Parameters<IOktaClient['createApp']>[0]): Promise<OktaApplication>;
    updateApp(appId: string, appData: Parameters<IOktaClient['updateApp']>[1]): Promise<OktaApplication>;
    deleteApp(appId: string): Promise<void>;
    activateApp(appId: string): Promise<void>;
    deactivateApp(appId: string): Promise<void>;
    assignUserToApp(appId: string, userId: string, assignmentData?: Parameters<IOktaClient['assignUserToApp']>[2]): Promise<unknown>;
    assignGroupToApp(appId: string, groupId: string, assignmentData?: Parameters<IOktaClient['assignGroupToApp']>[2]): Promise<unknown>;
    removeUserFromApp(appId: string, userId: string, sendEmail?: boolean): Promise<void>;
    removeGroupFromApp(appId: string, groupId: string): Promise<void>;
    listAppUsers(appId: string, params?: Parameters<IOktaClient['listAppUsers']>[1]): Promise<ApiResponse<unknown[]>>;
    listAppGroups(appId: string, params?: Parameters<IOktaClient['listAppGroups']>[1]): Promise<ApiResponse<unknown[]>>;
    updateAppUser(appId: string, userId: string, updateData: Parameters<IOktaClient['updateAppUser']>[2]): Promise<unknown>;
    listPolicies(params?: Parameters<IOktaClient['listPolicies']>[0]): Promise<ApiResponse<OktaPolicy[]>>;
    getPolicy(policyId: string, expand?: string): Promise<OktaPolicy>;
    createPolicy(policyData: Parameters<IOktaClient['createPolicy']>[0]): Promise<OktaPolicy>;
    updatePolicy(policyId: string, policyData: Parameters<IOktaClient['updatePolicy']>[1]): Promise<OktaPolicy>;
    deletePolicy(policyId: string): Promise<void>;
    activatePolicy(policyId: string): Promise<void>;
    deactivatePolicy(policyId: string): Promise<void>;
    listPolicyRules(policyId: string, params?: Parameters<IOktaClient['listPolicyRules']>[1]): Promise<ApiResponse<OktaPolicyRule[]>>;
    getPolicyRule(policyId: string, ruleId: string): Promise<OktaPolicyRule>;
    createPolicyRule(policyId: string, ruleData: Parameters<IOktaClient['createPolicyRule']>[1]): Promise<OktaPolicyRule>;
    updatePolicyRule(policyId: string, ruleId: string, ruleData: Parameters<IOktaClient['updatePolicyRule']>[2]): Promise<OktaPolicyRule>;
    deletePolicyRule(policyId: string, ruleId: string): Promise<void>;
    activatePolicyRule(policyId: string, ruleId: string): Promise<void>;
    deactivatePolicyRule(policyId: string, ruleId: string): Promise<void>;
    close(): Promise<void>;
    /**
     * Clear all cached data
     */
    clearCache(): Promise<void>;
    /**
     * Clear cache for a specific resource type
     */
    clearCacheByType(resourceType: 'users' | 'groups' | 'apps' | 'policies'): Promise<void>;
}
//# sourceMappingURL=cached-okta-client.d.ts.map