import * as api from 'handel-extension-api'; /******************************************************************************************************************* * A number of these types are just aliases or extensions of the types in the instance API. This allows us to keep * our types compatible while adding any internal extras we may need. ******************************************************************************************************************/ /************************************ * Types for the HandelFileParser contract ************************************/ export interface HandelFileParser { validateHandelFile(handelFile: HandelFile, serviceRegistry: api.ServiceRegistry): Promise; listExtensions(handelFile: HandelFile): Promise; createEnvironmentContext(handelFile: HandelFile, environmentName: string, accountConfig: api.AccountConfig, serviceRegistry: api.ServiceRegistry, options: HandelCoreOptions): EnvironmentContext; } /*********************************** * Types for the Handel File ***********************************/ export interface HandelFile { version: number; name: string; tags?: api.Tags; extensions?: HandelFileExtensions; environments: HandelFileEnvironments; } export interface HandelFileEnvironments { [environmentName: string]: HandelFileEnvironment; } export interface HandelFileEnvironment { [serviceName: string]: api.ServiceConfig; } export interface HandelFileExtensions { [extensionPrefix: string]: HandelFileExtension; } export declare type HandelFileExtension = string; /*********************************** * Types for the Environment Deployer framework and lifecycle ***********************************/ export declare class EnvironmentContext { appName: string; environmentName: string; accountConfig: api.AccountConfig; options: HandelCoreOptions; tags: api.Tags; serviceContexts: ServiceContexts; constructor(appName: string, environmentName: string, accountConfig: api.AccountConfig, options?: HandelCoreOptions, tags?: api.Tags); } export interface EnvironmentResult { environmentName: string; deploymentStartTime: number; status: string; message: string; error?: Error; } export declare class EnvironmentDeleteResult implements EnvironmentResult { environmentName: string; deploymentStartTime: number; status: string; message: string; error: Error | undefined; constructor(environmentName: string, deploymentStartTime: number, status: string, message: string, error?: Error); } export declare class EnvironmentDeployResult implements EnvironmentResult { environmentName: string; deploymentStartTime: number; status: string; message: string; error: Error | undefined; constructor(environmentName: string, deploymentStartTime: number, status: string, message: string, error?: Error); } export interface EnvironmentsCheckResults { [environmentName: string]: string[]; } export interface ServiceContexts { [serviceName: string]: api.ServiceContext; } export interface PreDeployContexts { [serviceName: string]: api.IPreDeployContext; } export interface BindContexts { [bindContextName: string]: api.IBindContext; } export interface DeployContexts { [serviceName: string]: api.IDeployContext; } export interface ConsumeEventsContexts { [serviceName: string]: api.IConsumeEventsContext; } export interface ProduceEventsContexts { [serviceName: string]: api.IProduceEventsContext; } export interface UnBindContexts { [serviceName: string]: api.IUnBindContext; } export interface UnDeployContexts { [serviceName: string]: api.IUnDeployContext; } export interface UnPreDeployContexts { [serviceName: string]: api.IUnPreDeployContext; } export declare type DeployOrder = string[][]; /*********************************** * Types used for services that do instance auto scaling ***********************************/ export interface InstanceAutoScalingConfig { min_instances: number; max_instances: number; scaling_policies?: InstanceScalingPolicyConfig[]; } export interface InstanceScalingPolicyConfig { type: InstanceScalingPolicyType; adjustment: InstanceScalingPolicyAdjustment; alarm: InstanceScalingPolicyAlarm; } export interface InstanceScalingPolicyAdjustment { type?: string; value: number; cooldown?: number; } export interface InstanceScalingPolicyAlarm { namespace?: string; dimensions?: InstanceScalingPolicyAlarmDimensions; metric_name: string; statistic?: string; threshold: number; comparison_operator: string; period?: number; evaluation_periods?: number; } export interface InstanceScalingPolicyAlarmDimensions { [key: string]: string; } export declare enum InstanceScalingPolicyType { UP = "up", DOWN = "down" } export interface HandlebarsInstanceScalingPolicy { adjustmentType: string; adjustmentValue: number; cooldown: number; statistic: string; comparisonOperator: string; dimensions: HandlebarsInstanceScalingDimension[] | undefined; metricName: string; namespace: string; period: number; evaluationPeriods: number; threshold: number; scaleUp?: boolean; scaleDown?: boolean; } export interface HandlebarsInstanceScalingDimension { name: string; value: string; } /*********************************** * Extension-related Types ***********************************/ export interface LoadedExtension { prefix: string; name: string; instance: api.Extension; } export interface ExtensionDefinition { source: ExtensionSource; prefix: string; spec: string; } export declare enum ExtensionSource { NPM = "npm", FILE = "file", SCM = "scm", GIT = "git" } export interface NpmExtensionDefinition extends ExtensionDefinition { source: ExtensionSource.NPM; name: string; versionSpec: string; } export declare function isNpmExtension(defn: ExtensionDefinition): defn is NpmExtensionDefinition; export declare function isFileExtension(defn: ExtensionDefinition): defn is FileExtensionDefinition; export declare function isGitExtension(defn: ExtensionDefinition): defn is GitExtensionDefinition; export declare function isScmExtension(defn: ExtensionDefinition): defn is ScmExtensionDefinition; export interface FileExtensionDefinition extends ExtensionDefinition { source: ExtensionSource.FILE; path: string; } export interface ScmExtensionDefinition extends ExtensionDefinition { source: ExtensionSource.SCM; provider: ScmProvider; owner: string; repo: string; commitish?: string; } export declare enum ScmProvider { GITHUB = "github", GITLAB = "gitlab", BITBUCKET = "bitbucket" } export declare const allScmProviders: ScmProvider[]; export interface GitExtensionDefinition extends ExtensionDefinition { source: ExtensionSource.GIT; url: string; } export declare class ExtensionLoadingError extends Error { readonly name: string; constructor(name: string, cause: Error); } export declare class DontBlameHandelError extends Error { constructor(message: string, serviceType?: api.ServiceType); } export declare class InvalidExtensionSpecificationError extends Error { readonly spec: string; constructor(spec: string, message: string); } export declare type ExtensionList = ExtensionDefinition[]; export declare class MissingPrefixError extends Error { readonly prefix: string; constructor(prefix: string); } export declare class MissingDeployerError extends Error { readonly name: string; readonly extension: string; constructor(name: string, extension: string); } export declare class ExtensionInstallationError extends Error { readonly extensions: ExtensionList; readonly output: string; constructor(extensions: ExtensionList, output: string); } /*********************************** * Other Types ***********************************/ export interface HandelCoreOptions { linkExtensions: boolean; } export interface CheckOptions extends HandelCoreOptions { } export interface DeployOptions extends HandelCoreOptions { accountConfig: string; environments: string[]; tags?: api.Tags; } export interface DeleteOptions extends HandelCoreOptions { accountConfig: string; environment: string; yes: boolean; }