import { Metric, MetricOptions } from 'aws-cdk-lib/aws-cloudwatch';
import * as lambda from 'aws-cdk-lib/aws-lambda';
import * as s3 from 'aws-cdk-lib/aws-s3';
import { ISecret } from 'aws-cdk-lib/aws-secretsmanager';
import { IQueue } from 'aws-cdk-lib/aws-sqs';
import * as sfn from 'aws-cdk-lib/aws-stepfunctions';
import { Construct } from 'constructs';
import { GenerateReleaseNotes } from './generate-release-notes';
import { ReleaseNotesTrigger } from './release-notes-trigger';
import { Monitoring } from '../../monitoring';
import { OverviewDashboard } from '../../overview-dashboard';
import { FeedBuilder } from '../feed-builder';
/**
 * Properties for ReleaseNoteFetcher.
 */
export interface ReleaseNoteFetcherProps {
    /**
     * The package data storage bucket, where release-notes.md will be stored along with other assets
     */
    readonly bucket: s3.IBucket;
    /**
     * GitHub credential used to when making request to GitHub API to retrieve changelogs.
     * @default - do not fetch changelogs from GitHub
     */
    readonly gitHubCredentialsSecret?: ISecret;
    /**
     * The monitoring handler to register alarms with.
     */
    readonly monitoring: Monitoring;
    /**
     * The overview dashboard to register dashboards with.
     */
    readonly overviewDashboard: OverviewDashboard;
    /**
     * The lambda function that updates the RSS/ATOM feed
     */
    readonly feedBuilder: FeedBuilder;
}
/**
 * Creates a StepFunction which will generate change-log file for the packages that are added
 * to the ReleaseNoteFetcher Queue. To generate the release notes, the fetcher pulls data from
 * GitHub (release tag, releases and changelog.md file). When the GitHub credentials are passed,
 * the fetcher respects service rate limits of GitHub by pausing the generation of release notes
 */
export declare class ReleaseNoteFetcher extends Construct {
    /**
     * The queue where packages where the packages will be added to generate release notes
     */
    readonly queue: IQueue;
    private readonly bucket;
    private readonly githubTokenSecret?;
    /**
     * Lambda function that update the RSS/Atom feed
     */
    readonly updateFeedFunction: lambda.Function;
    readonly workerQueue: IQueue;
    readonly workerDLQ: IQueue;
    readonly stateMachine: sfn.IStateMachine;
    readonly releaseNotesTriggerLambda: ReleaseNotesTrigger;
    readonly generateReleaseNotesLambda: GenerateReleaseNotes;
    constructor(scope: Construct, id: string, props: ReleaseNoteFetcherProps);
    metricPackagesWithReleaseNotesCount(opts?: MetricOptions): Metric;
    metricInvalidCredentials(opts?: MetricOptions): Metric;
    metricRequestQuotaExhausted(opts?: MetricOptions): Metric;
    metricRequestUnknownError(opts?: MetricOptions): Metric;
    metricRequestUnSupportedRepo(opts?: MetricOptions): Metric;
    metricRequestInvalidPackageJson(opts?: MetricOptions): Metric;
    metricChangeLogFetchError(opts?: MetricOptions): Metric;
    metricChangeLogAllError(opts?: MetricOptions): Metric;
    metricGhRateLimitRemaining(opts?: MetricOptions): Metric;
    metricGhRateLimitUsed(opts?: MetricOptions): Metric;
    metricGhRateLimitLimit(opts?: MetricOptions): Metric;
    private generateGithubRateLimitAlarm;
}
