import type { lib as KeetaNetLib } from '@keetanetwork/keetanet-client';
import { getDefaultResolver } from '../../config.js';
import type { UserClient as KeetaNetUserClient } from '@keetanetwork/keetanet-client';
import type { Logger } from '../../lib/log/index.js';
import Resolver from '../../lib/resolver.js';
import type { ServiceMetadata, ServiceMetadataAuthenticationType, ServiceSearchCriteria, SharedLookupCriteria } from '../../lib/resolver.js';
import type { BrandedString } from '../../lib/utils/brand.js';
import type { KeetaNotificationAnchorRegisterTargetClientRequest, KeetaNotificationAnchorListTargetsClientRequest, KeetaNotificationAnchorDeleteTargetClientRequest, KeetaNotificationAnchorCreateSubscriptionClientRequest, KeetaNotificationAnchorListSubscriptionsClientRequest, KeetaNotificationAnchorDeleteSubscriptionClientRequest, NotificationTargetWithIDResponse, SubscriptionDetails, NotificationChannelArguments } from './common.js';
export type KeetaNotificationAnchorClientConfig = {
    id?: string;
    logger?: Logger | undefined;
    resolver?: Resolver;
    account?: InstanceType<typeof KeetaNetLib.Account>;
} & Omit<NonNullable<Parameters<typeof getDefaultResolver>[1]>, 'client'>;
type ProviderID = BrandedString<'NotificationProviderID'>;
type KeetaNotificationAnchorOperations = {
    [operation in keyof NonNullable<ServiceMetadata['services']['notification']>[string]['operations']]?: {
        url: (params?: {
            [key: string]: string;
        }) => URL;
        options: {
            authentication: ServiceMetadataAuthenticationType;
        };
    };
};
type KeetaNotificationServiceInfo = Omit<NonNullable<ServiceMetadata['services']['notification']>[string], 'operations'> & {
    operations: {
        [operation in keyof KeetaNotificationAnchorOperations]: Promise<KeetaNotificationAnchorOperations[operation]>;
    };
};
interface KeetaNotificationAnchorBaseConfig {
    client: KeetaNetUserClient;
    logger?: Logger | undefined;
    account?: InstanceType<typeof KeetaNetLib.Account> | undefined;
}
declare class KeetaNotificationAnchorBase {
    protected readonly client: KeetaNetUserClient;
    protected readonly logger?: Logger | undefined;
    protected readonly account?: InstanceType<typeof KeetaNetLib.Account> | undefined;
    constructor(config: KeetaNotificationAnchorBaseConfig);
}
declare class KeetaNotificationAnchorProvider extends KeetaNotificationAnchorBase {
    #private;
    readonly serviceInfo: KeetaNotificationServiceInfo;
    readonly providerID: ProviderID;
    constructor(serviceInfo: KeetaNotificationServiceInfo, providerID: ProviderID, parent: KeetaNotificationAnchorClient);
    registerTarget(input: KeetaNotificationAnchorRegisterTargetClientRequest & {
        channel: NotificationChannelArguments;
    }): Promise<{
        id: string;
    }>;
    listTargets(input?: KeetaNotificationAnchorListTargetsClientRequest): Promise<{
        targets: NotificationTargetWithIDResponse[];
    }>;
    deleteTarget(input: KeetaNotificationAnchorDeleteTargetClientRequest): Promise<{
        ok: boolean;
    }>;
    createSubscription(input: KeetaNotificationAnchorCreateSubscriptionClientRequest): Promise<{
        id: string;
    }>;
    listSubscriptions(input?: KeetaNotificationAnchorListSubscriptionsClientRequest): Promise<{
        subscriptions: SubscriptionDetails[];
    }>;
    deleteSubscription(input: KeetaNotificationAnchorDeleteSubscriptionClientRequest): Promise<{
        ok: boolean;
    }>;
}
declare class KeetaNotificationAnchorClient extends KeetaNotificationAnchorBase {
    #private;
    readonly resolver: Resolver;
    readonly id: string;
    constructor(client: KeetaNetUserClient, config?: KeetaNotificationAnchorClientConfig);
    getProviders(criteria?: ServiceSearchCriteria<'notification'>, shared?: SharedLookupCriteria): Promise<KeetaNotificationAnchorProvider[] | null>;
    getProvider(providerID: string, shared?: SharedLookupCriteria): Promise<KeetaNotificationAnchorProvider | null>;
}
export default KeetaNotificationAnchorClient;
export { KeetaNotificationAnchorProvider };
//# sourceMappingURL=client.d.ts.map