import Serverless from 'serverless';
import { AutotaskClient } from '@openzeppelin/defender-autotask-client';
import { SentinelClient } from '@openzeppelin/defender-sentinel-client';
import { RelayClient } from '@openzeppelin/defender-relay-client';
import { AdminClient } from '@openzeppelin/defender-admin-client';
import { BlockExplorerApiKeyClient, DeploymentConfigClient } from '@openzeppelin/platform-deploy-client';
import { YSecret, YSentinel, YNotification, DefenderAutotask, DefenderNotification, DefenderBlockSentinel, DefenderFortaSentinel, TeamKey, YContract, ResourceType, DefenderBlockWatcher, YCategory, DefenderCategory } from '../types';
/**
 * @dev this function retrieves the Defender equivalent object of the provided template resource
 * This will not work for resources that do not have the stackResourceId property, ie. secrets and contracts
 */
export declare const getEquivalentResource: <Y, D>(context: Serverless, resource: Y, resources: Y[] | undefined, currentResources: D[]) => D | undefined;
export declare const validateTypesAndSanitise: (o: object) => object;
export declare const getEquivalentResourceByKey: <D>(resourceKey: string, currentResources: D[]) => D | undefined;
/**
 * @dev returns both a list of consolidated secrets for both global and stack, where the latter will be preceded with the stack name.
 * */
export declare const getConsolidatedSecrets: (context: Serverless) => YSecret[];
export declare const isTemplateResource: <Y, D>(context: Serverless, resource: D, resourceType: ResourceType, resources: Y[]) => boolean;
export declare const getResourceID: (stackName: string, resourceName: string) => string;
export declare const getStackName: (context: Serverless) => string;
export declare const isSSOT: (context: Serverless) => boolean;
export declare const getTeamAPIkeysOrThrow: (context: Serverless) => TeamKey;
export declare const getSentinelClient: (key: TeamKey) => SentinelClient;
export declare const getAutotaskClient: (key: TeamKey) => AutotaskClient;
export declare const getRelayClient: (key: TeamKey) => RelayClient;
export declare const getAdminClient: (key: TeamKey) => AdminClient;
export declare const getDeploymentConfigClient: (key: TeamKey) => DeploymentConfigClient;
export declare const getBlockExplorerApiKeyClient: (key: TeamKey) => BlockExplorerApiKeyClient;
export declare const constructNotification: (notification: YNotification, stackResourceId: string) => {
    config: {
        apiKey: string;
        metricPrefix: string;
        url?: undefined;
        emails?: undefined;
        botToken?: undefined;
        chatId?: undefined;
    };
    type: import("@openzeppelin/defender-sentinel-client").NotificationType;
    name: string;
    paused: boolean;
    stackResourceId: string;
} | {
    config: {
        url: string;
        apiKey?: undefined;
        metricPrefix?: undefined;
        emails?: undefined;
        botToken?: undefined;
        chatId?: undefined;
    };
    type: import("@openzeppelin/defender-sentinel-client").NotificationType;
    name: string;
    paused: boolean;
    stackResourceId: string;
} | {
    config: {
        emails: string[];
        apiKey?: undefined;
        metricPrefix?: undefined;
        url?: undefined;
        botToken?: undefined;
        chatId?: undefined;
    };
    type: import("@openzeppelin/defender-sentinel-client").NotificationType;
    name: string;
    paused: boolean;
    stackResourceId: string;
} | {
    config: {
        botToken: string;
        chatId: string;
        apiKey?: undefined;
        metricPrefix?: undefined;
        url?: undefined;
        emails?: undefined;
    };
    type: import("@openzeppelin/defender-sentinel-client").NotificationType;
    name: string;
    paused: boolean;
    stackResourceId: string;
} | {
    config: import("@openzeppelin/defender-sentinel-client/lib/models/opsgenie").OpsgenieConfig;
    type: import("@openzeppelin/defender-sentinel-client").NotificationType;
    name: string;
    paused: boolean;
    stackResourceId: string;
} | {
    config: import("@openzeppelin/defender-sentinel-client/lib/models/pager-duty").PagerDutyConfig;
    type: import("@openzeppelin/defender-sentinel-client").NotificationType;
    name: string;
    paused: boolean;
    stackResourceId: string;
};
export declare const constructNotificationCategory: (context: Serverless, category: YCategory, stackResourceId: string, notifications: DefenderNotification[]) => {
    name: string;
    description: string;
    notificationIds: [] | [import("@openzeppelin/defender-sentinel-client/lib/models/subscriber").NotificationReference] | [import("@openzeppelin/defender-sentinel-client/lib/models/subscriber").NotificationReference, import("@openzeppelin/defender-sentinel-client/lib/models/subscriber").NotificationReference];
    stackResourceId: string;
};
export declare const constructSentinel: (context: Serverless, stackResourceId: string, sentinel: YSentinel, notifications: DefenderNotification[], autotasks: DefenderAutotask[], blockwatchers: DefenderBlockWatcher[], categories: DefenderCategory[]) => DefenderBlockSentinel | DefenderFortaSentinel;
export declare const validateListPermissions: <T>(client: SentinelClient | AutotaskClient | DeploymentConfigClient | RelayClient | AdminClient | BlockExplorerApiKeyClient, resources: T[] | undefined, resourceType: ResourceType) => Promise<boolean>;
export declare const validateAdditionalPermissionsOrThrow: <T>(context: Serverless, resources: T[] | undefined, resourceType: ResourceType) => Promise<void>;
export declare const isUnauthorisedError: (e: any) => boolean;
export declare const formatABI: (abi: YContract['abi']) => string | undefined;
//# sourceMappingURL=index.d.ts.map