/**
 * AWS resource name length limits
 */
export declare const AWS_RESOURCE_LIMITS: {
    /** Lambda function name maximum length */
    readonly LAMBDA_FUNCTION_NAME: 64;
    /** IAM role name maximum length */
    readonly IAM_ROLE_NAME: 64;
    /** EventBridge rule name maximum length */
    readonly EVENTBRIDGE_RULE_NAME: 64;
    /** CloudFormation stack name maximum length */
    readonly CLOUDFORMATION_STACK_NAME: 128;
    /** API Gateway name maximum length */
    readonly API_GATEWAY_NAME: 128;
    /** S3 bucket name maximum length */
    readonly S3_BUCKET_NAME: 63;
    /** CloudWatch log group name maximum length */
    readonly CLOUDWATCH_LOG_GROUP: 512;
};
/**
 * Resource type for name generation
 */
export type ResourceType = keyof typeof AWS_RESOURCE_LIMITS;
/**
 * Options for generating a safe resource name
 */
export interface ResourceNameOptions {
    /**
     * Service name (e.g., 'my-app')
     */
    serviceName: string;
    /**
     * Resource identifier (e.g., 'payments-handler')
     */
    resourceName: string;
    /**
     * Deployment stage (e.g., 'dev', 'staging', 'prod')
     */
    stage: string;
    /**
     * AWS region (e.g., 'us-east-1')
     * Will be converted to signature (e.g., 'ue1')
     */
    region?: string;
    /**
     * Type of AWS resource for determining max length
     */
    resourceType: ResourceType;
    /**
     * Optional prefix to add before the name
     */
    prefix?: string;
    /**
     * Optional suffix to add after the name
     */
    suffix?: string;
}
/**
 * Result of resource name generation
 */
export interface ResourceNameResult {
    /**
     * The generated resource name, guaranteed to be within limits
     */
    name: string;
    /**
     * Whether the name was truncated to fit the limit
     */
    wasTruncated: boolean;
    /**
     * The original full name before truncation (if any)
     */
    originalName: string;
    /**
     * The hash suffix added for uniqueness (if truncated)
     */
    hashSuffix?: string;
    /**
     * The maximum length for this resource type
     */
    maxLength: number;
    /**
     * Final length of the generated name
     */
    finalLength: number;
}
/**
 * Generates a short hash suffix for uniqueness when truncating names.
 * Uses SHA-256 and takes first 8 characters in hex format (alphanumeric only).
 *
 * @param input - String to hash
 * @returns 8-character alphanumeric hash suffix (0-9, a-f)
 */
export declare function generateHashSuffix(input: string): string;
/**
 * Converts AWS region to a short signature.
 * Example: 'us-east-1' -> 'ue1', 'eu-west-2' -> 'ew2'
 *
 * @param region - AWS region string
 * @returns Short region signature
 */
export declare function getRegionSignature(region: string): string;
/**
 * Sanitizes a name to contain only valid AWS resource name characters.
 * Valid characters: a-z, A-Z, 0-9, hyphen (-)
 *
 * @param name - Name to sanitize
 * @returns Sanitized name
 */
export declare function sanitizeResourceName(name: string): string;
/**
 * Generates a safe AWS resource name that is guaranteed to be within
 * the specified length limit while maintaining uniqueness.
 *
 * Strategy:
 * 1. Build full name from components
 * 2. If within limit, return as-is
 * 3. If over limit, truncate intelligently and add hash suffix for uniqueness
 *
 * Truncation priority (preserved in order):
 * 1. Stage (always preserved)
 * 2. Region signature (always preserved)
 * 3. Hash suffix (8 chars, added when truncating)
 * 4. Service name (truncated proportionally)
 * 5. Resource name (truncated proportionally)
 *
 * @param options - Resource name generation options
 * @returns Resource name result with metadata
 *
 * @example
 * ```typescript
 * const result = generateSafeResourceName({
 *   serviceName: 'my-super-long-application',
 *   resourceName: 'payments-process-handler',
 *   stage: 'dev',
 *   region: 'us-east-1',
 *   resourceType: 'LAMBDA_FUNCTION_NAME'
 * });
 * // result.name will be <= 64 characters
 * ```
 */
export declare function generateSafeResourceName(options: ResourceNameOptions): ResourceNameResult;
/**
 * Validates if a resource name is within AWS limits for the specified type.
 *
 * @param name - Resource name to validate
 * @param resourceType - Type of AWS resource
 * @returns true if valid, false otherwise
 */
export declare function isValidResourceName(name: string, resourceType: ResourceType): boolean;
/**
 * Convenience function for generating Lambda function names.
 *
 * @param serviceName - Service name
 * @param lambdaId - Lambda identifier
 * @param stage - Deployment stage
 * @param region - AWS region
 * @returns Safe Lambda function name
 */
export declare function generateLambdaFunctionName(serviceName: string, lambdaId: string, stage: string, region?: string): string;
/**
 * Convenience function for generating IAM role names.
 *
 * @param serviceName - Service name
 * @param rolePurpose - Role purpose/identifier
 * @param stage - Deployment stage
 * @param region - AWS region
 * @returns Safe IAM role name
 */
export declare function generateIamRoleName(serviceName: string, rolePurpose: string, stage: string, region?: string): string;
/**
 * Convenience function for generating EventBridge rule names.
 *
 * @param serviceName - Service name
 * @param rulePurpose - Rule purpose/identifier
 * @param stage - Deployment stage
 * @param region - AWS region
 * @returns Safe EventBridge rule name
 */
export declare function generateEventBridgeRuleName(serviceName: string, rulePurpose: string, stage: string, region?: string): string;
/**
 * Convenience function for generating API Gateway names.
 *
 * @param serviceName - Service name
 * @param apiPurpose - API purpose/identifier
 * @param stage - Deployment stage
 * @param region - AWS region
 * @returns Safe API Gateway name
 */
export declare function generateApiGatewayName(serviceName: string, apiPurpose: string, stage: string, region?: string): string;
