import { EncryptedEntityWithType } from '../utils/EntityWithDelegationTypeName';
import { SecureDelegation } from '../../icc-api/model/SecureDelegation';
import AccessLevelEnum = SecureDelegation.AccessLevelEnum;
import { ExtendedApisUtils } from './ExtendedApisUtils';
import { CryptoPrimitives } from './CryptoPrimitives';
import { AuthenticationProvider } from '../auth/AuthenticationProvider';
import { AccessControlKeysHeadersProvider } from './AccessControlKeysHeadersProvider';
import { AccessControlSecretUtils } from './AccessControlSecretUtils';
import { IccDataOwnerXApi } from '../icc-data-owner-x-api';
import { SecurityMetadataDecryptor } from './SecurityMetadataDecryptor';
export declare class DelegationsDeAnonymization {
    private readonly dataOwnerApi;
    private readonly securityMetadataDecryptor;
    private readonly xapis;
    private readonly cryptoPrimitives;
    private readonly accessControlSecretUtils;
    private readonly accessControlKeysHeadersProvider;
    private readonly delegationKeyMapFieldsToEncrypt;
    private readonly delegationKeyMapApi;
    constructor(dataOwnerApi: IccDataOwnerXApi, securityMetadataDecryptor: SecurityMetadataDecryptor, xapis: ExtendedApisUtils, cryptoPrimitives: CryptoPrimitives, accessControlSecretUtils: AccessControlSecretUtils, host: string, headers: {
        [key: string]: string;
    }, authenticationProvider: AuthenticationProvider | undefined, fetchImpl: ((input: RequestInfo, init?: RequestInit) => Promise<Response>) | undefined, accessControlKeysHeadersProvider: AccessControlKeysHeadersProvider);
    /**
     * Creates / updates information to allow the data owners in {@link shareWithDataOwners} to de-anonymize the delegations contained within
     * {@link entity}.
     * Note that the delegation de-anonymization information may be used also with other entities of the same type.
     */
    createOrUpdateDeAnonymizationInfo(entityWithType: EncryptedEntityWithType, shareWithDataOwners: string[]): Promise<void>;
    /**
     * Get the data owners which can access the entity. See {@link EncryptedEntityXApi.getDataOwnersWithAccessTo} for more details.
     * @param entityWithType an entity.
     */
    getDataOwnersWithAccessTo(entityWithType: EncryptedEntityWithType): Promise<{
        permissionsByDataOwnerId: {
            [dataOwnerId: string]: AccessLevelEnum;
        };
        hasUnknownAnonymousDataOwners: boolean;
    }>;
    private getDataOwnersWithAccessToSecureDelegations;
    private mergePermissions;
    private getDecryptedSecureDelegationKeyMaps;
    private ensureDelegationKeyMapSharedWith;
    private createSecureDelegationKeyMap;
}
