import { CloudWatchLogsClient, CreateLogGroupCommandInput, DeleteSubscriptionFilterCommandInput, PutSubscriptionFilterCommandInput } from "@aws-sdk/client-cloudwatch-logs";
import { FunctionConfiguration, LambdaClient, Runtime, TagResourceCommandInput, UntagResourceCommandInput, UpdateFunctionConfigurationCommandInput } from "@aws-sdk/client-lambda";

//#region src/interfaces.d.ts
/**
 * Configuration comprised by a Lambda Function ARN,
 * its configuration from AWS, its library layer ARN,
 * the changes in logs, tags, and the update request.
 */
interface FunctionConfiguration$1 {
  functionARN: string;
  lambdaConfig: FunctionConfiguration;
  logGroupConfiguration?: LogGroupConfiguration;
  tagConfiguration?: TagConfiguration;
  updateFunctionConfigurationCommandInput?: UpdateFunctionConfigurationCommandInput;
}
type Version = number | 'latest' | 'none';
/**
 * Basic settings to use in every specified
 * lambda to be instrumented.
 */
interface InstrumentationSettings extends InstrumentationTags {
  apmFlushDeadline?: string;
  appsecEnabled?: boolean;
  captureLambdaPayload?: boolean;
  extensionVersion: Version;
  lambdaFips?: boolean;
  flushMetricsToLogs: boolean;
  forwarderARN?: string;
  interactive?: boolean;
  layerAWSAccount?: string;
  layerVersion: Version;
  loggingEnabled?: boolean;
  logLevel?: string;
  mergeXrayTraces: boolean;
  tracingEnabled: boolean;
  llmobsEnabled?: boolean;
  llmobsMlApp?: string;
}
/**
 * Interface for Unified Service Tagging.
 *
 * See more at: https://docs.datadoghq.com/getting_started/tagging/unified_service_tagging/?tab=kubernetes#overview
 */
interface InstrumentationTags {
  environment?: string;
  extraTags?: string;
  service?: string;
  version?: string;
}
interface LogGroupConfiguration {
  createLogGroupCommandInput?: CreateLogGroupCommandInput;
  deleteSubscriptionFilterCommandInput?: DeleteSubscriptionFilterCommandInput;
  logGroupName: string;
  putSubscriptionFilterCommandInput?: PutSubscriptionFilterCommandInput;
}
interface TagConfiguration {
  tagResourceCommandInput?: TagResourceCommandInput;
  untagResourceCommandInput?: UntagResourceCommandInput;
}
//#endregion
//#region src/functions/instrument.d.ts
declare const getInstrumentedFunctionConfigs: (lambdaClient: LambdaClient, cloudWatchLogsClient: CloudWatchLogsClient, region: string, functionARNs: string[], settings: InstrumentationSettings) => Promise<FunctionConfiguration$1[]>;
declare const getInstrumentedFunctionConfig: (lambdaClient: LambdaClient, cloudWatchLogsClient: CloudWatchLogsClient, config: FunctionConfiguration, region: string, settings: InstrumentationSettings) => Promise<FunctionConfiguration$1>;
declare const getInstrumentedFunctionConfigsFromRegEx: (lambdaClient: LambdaClient, cloudWatchLogsClient: CloudWatchLogsClient, region: string, pattern: string, settings: InstrumentationSettings) => Promise<FunctionConfiguration$1[]>;
declare const calculateUpdateRequest: (config: FunctionConfiguration, settings: InstrumentationSettings, region: string, runtime: Runtime) => Promise<UpdateFunctionConfigurationCommandInput | undefined>;
//#endregion
export { calculateUpdateRequest, getInstrumentedFunctionConfig, getInstrumentedFunctionConfigs, getInstrumentedFunctionConfigsFromRegEx };
//# sourceMappingURL=instrument.d.ts.map