@spinnaker/amazon 0.0.0-2026.3-2 → 0.0.0-2026.3-1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{SETTINGS as e,HelpField as t,DeploymentStrategyRegistry as a,FormValidator as n,FormikFormField as r,TextInput as l,AccountService as i,ReactSelectInput as s,CheckboxInput as o,MapEditorInput as c,NumberInput as d,NetworkReader as m,useData as u,SubnetReader as p,TetheredSelect as h,DeckRuntimeContext as g,TaskMonitor as v,FunctionWriter as f,ReactModal as E,WizardModal as y,WizardPage as b,noop as C,withRouter as N,ConfirmationModalService as w,ApplicationReader as S,AddEntityTagLinks as k,REST as T,FunctionReader as I,Details as P,AccountTag as A,CollapsibleSection as G,HelpContentsRegistry as x,LabeledValue as D,timestamp as B,SubnetTag as F,LabeledValueList as z,LinkWithClipboard as M,FirewallLabels as R,robotToHuman as L,Tooltip as O,InstanceLoadBalancerHealth as U,InstanceWriter as V,TaskExecutor as H,RecentHistoryService as q,InstanceDetailsHeader as W,InstanceInsights as j,ConsoleOutputLink as Z,InstanceLinks as _,InstanceReader as K,InstanceActions as Y,LoadBalancerServerGroup as X,HealthCounts as J,LoadBalancerInstances as Q,LoadBalancerClusterContainer as ee,logger as te,LoadBalancerDataUtils as ae,Spinner as ne,HoverablePopover as re,NameUtils as le,CopyToClipboard as ie,ManagedResourceDetailsIndicator as se,relativeTime as oe,Overridable as ce,SpinFormik as de,ModalClose as me,SubmitButton as ue,SelectInput as pe,CertificateReader as he,ValidationMessage as ge,CustomLabels as ve,Validators as fe,spelNumberCheck as Ee,SpInput as ye,SpelNumberInput as be,ChecklistInput as Ce,useDeepObjectDiff as Ne,useMountStatusRef as we,createFakeReactSyntheticEvent as Se,Markdown as ke,AccountSelectInput as Te,RegionSelectField as Ie,InfrastructureCaches as Pe,LoadBalancerWriter as Ae,CloudProviderRegistry as Ge,ManagedMenuItem as xe,useDeckRuntimeServices as De,useDataSource as Be,BakeryReader as Fe,AuthenticationService as ze,StageConfigField as Me,Registry as Re,BakeExecutionLabel as Le,ExecutionDetailsTasks as Oe,ExecutionDetailsSection as $e,StageFailureMessage as Ue,StageConstants as Ve,AppListExtractor as He,AccountRegionClusterSelector as qe,TargetSelect as We,PlatformHealthOverride as je,DeploymentStrategySelector as Ze,FormikStageConfig as _e,YamlEditor as Ke,StageArtifactSelectorDelegate as Ye,MapEditor as Xe,yamlDocumentsToString as Je,ExecutionStepDetails as Qe,ExecutionBarLabel as et,ArtifactReferenceService as tt,ExpectedArtifactService as at,TetheredCreatable as nt,excludeAllTypesExcept as rt,ArtifactTypePatterns as lt,PipelineConfigService as it,SecurityGroupWriter as st,TaskMonitorWrapper as ot,confirmNotManaged as ct,setMatchingResourceSummary as dt,DeployInitializer as mt,DeployingIntoManagedClusterWarning as ut,ServerGroupDetailsField as pt,ServerGroupNamePreview as ht,TaskReason as gt,parseNum as vt,ToggleButtonGroup as ft,ToggleSize as Et,usePrevious as yt,InstanceArchetypeSelector as bt,InstanceTypeSelector as Ct,UserVerification as Nt,MinMaxDesiredChanges as wt,ServerGroupWarningMessageService as St,ClusterTargetBuilder as kt,ServerGroupReader as Tt,CloudMetricsReader as It,TaskMonitorModal as Pt,EntitySource as At,ViewChangesLink as Gt,CapacityDetailsSection as xt,ViewScalingActivitiesLink as Dt,ShowUserData as Bt,ApplicationNameValidator as Ft}from"@spinnaker/core";import*as zt from"react";import Mt,{useState as Rt,useEffect as Lt}from"react";import Ot,{isEmpty as $t,forOwn as Ut,uniqBy as Vt,cloneDeep as Ht,orderBy as qt,flatten as Wt,isNil as jt,flatMap as Zt,isEqual as _t,sortBy as Kt,filter as Yt,chain as Xt,map as Jt,pickBy as Qt,groupBy as ea,get as ta,uniq as aa,difference as na,some as ra,isNumber as la,set as ia,partition as sa,every as oa,values as ca,head as da,isString as ma,clone as ua,has as pa,keys as ha,intersection as ga,extend as va,find as fa,xor as Ea,keyBy as ya}from"lodash";import ba from"classnames";import{Subject as Ca,from as Na,combineLatest as wa,BehaviorSubject as Sa,of as ka,Observable as Ta}from"rxjs";import{map as Ia,distinctUntilChanged as Pa,shareReplay as Aa,switchMap as Ga,withLatestFrom as xa,takeUntil as Da,tap as Ba,mergeMap as Fa,catchError as za,debounceTime as Ma,take as Ra}from"rxjs/operators";import{Dropdown as La,Modal as Oa,Button as $a,MenuItem as Ua,Tooltip as Va,OverlayTrigger as Ha,Checkbox as qa,ModalFooter as Wa}from"react-bootstrap";import{UISref as ja,UISrefActive as Za}from"@uirouter/react";import _a from"react-select";import{SortableHandle as Ka,arrayMove as Ya,SortableElement as Xa,SortableContainer as Ja}from"react-sortable-hoc";import{Form as Qa,Field as en}from"formik";import tn from"react-virtualized-select";import{Chart as an,LineController as nn,LineElement as rn,PointElement as ln,LinearScale as sn,Title as on,TimeScale as cn,Tooltip as dn,Legend as mn,Filler as un}from"chart.js";import"chartjs-adapter-luxon";var pn;const hn=e.providers.aws||{defaults:{}};hn&&(hn.adHocInfraWritesEnabled=null==(pn=hn.adHocInfraWritesEnabled)||pn,hn.resetToOriginal=e.resetProvider("aws"));class gn extends Mt.Component{constructor(){super(...arguments),this.handleChange=(e,t)=>{this.props.command.termination[e]=t,this.forceUpdate()}}render(){var e;const{command:a}=this.props;return Mt.createElement("div",{className:"form-group",style:{marginTop:"20px"}},Mt.createElement("div",{className:"well-compact alert alert-warning"},Mt.createElement("strong",null,"Note:")," a rolling push only updates the"," ",Mt.createElement("em",null,"launch ",Boolean(null==(e=hn.serverGroups)?void 0:e.enableLaunchTemplates)?"template":"configuration")," ","for the auto scaling group.",Mt.createElement("br",null)," Changes to the following fields will be ignored:",Mt.createElement("ul",null,Mt.createElement("li",null,"Account, Region, Subnet Type"),Mt.createElement("li",null,"Capacity"),Mt.createElement("li",null,"Load Balancers"),Mt.createElement("li",null,"Health Check Configuration"),Mt.createElement("li",null,"Termination Policies, Enable Traffic flag"))),Mt.createElement("div",{className:"form-group"},Mt.createElement("div",{className:"col-md-12 checkbox"},Mt.createElement("label",null,Mt.createElement("input",{type:"checkbox",checked:a.termination.relaunchAllInstances,onChange:e=>this.handleChange("relaunchAllInstances",e.target.checked)}),Mt.createElement("b",null,"Relaunch all instances"),Mt.createElement(t,{id:"strategy.rollingPush.relaunchAll"})))),!a.termination.relaunchAllInstances&&Mt.createElement("div",{className:"form-group"},Mt.createElement("div",{className:"col-md-5 sm-label-right"},"Total relaunches",Mt.createElement(t,{id:"strategy.rollingPush.totalRelaunches"})),Mt.createElement("div",{className:"col-md-2"},Mt.createElement("input",{className:"form-control input-sm",type:"number",value:a.termination.totalRelaunches,onChange:e=>this.handleChange("totalRelaunches",e.target.value),min:"0"}))),(a.termination.totalRelaunches>0||a.termination.relaunchAllInstances)&&Mt.createElement("div",{className:"form-group"},Mt.createElement("div",{className:"col-md-5 sm-label-right"},"Concurrent relaunches",Mt.createElement(t,{id:"strategy.rollingPush.concurrentRelaunches"})),Mt.createElement("div",{className:"col-md-2"},Mt.createElement("input",{className:"form-control input-sm",type:"number",value:a.termination.concurrentRelaunches,onChange:e=>this.handleChange("concurrentRelaunches",e.target.value),min:"1"}))),(a.termination.totalRelaunches>0||a.termination.relaunchAllInstances)&&Mt.createElement("div",{className:"form-group"},Mt.createElement("div",{className:"col-md-5 sm-label-right"},"Order",Mt.createElement(t,{id:"strategy.rollingPush.order"})),Mt.createElement("div",{className:"col-md-3"},Mt.createElement("select",{className:"input input-sm",style:{width:"100px"},value:a.termination.order,onChange:e=>this.handleChange("order",e.target.value)},Mt.createElement("option",{value:"oldest"},"oldest first"),Mt.createElement("option",{value:"newest"},"newest first")))))}}var vn;a.registerStrategy({label:"Rolling Push (not recommended)",description:`Updates the launch ${(null==(vn=hn.serverGroups)?void 0:vn.enableLaunchTemplates)?"template":"configuration"} for this server group, then terminates instances incrementally,\n replacing them with instances launched with the updated configuration. This is not a best practice - it goes against\n the principles of immutable infrastructure - but may be necessary in some cases.`,key:"rollingpush",providerRestricted:!0,additionalFields:["termination.totalRelaunches","termination.concurrentRelaunches","termination.order","termination.relaunchAllInstances"],AdditionalFieldsComponent:gn,initializationMethod:e=>{var t,a;e.termination=e.termination||{order:"oldest",relaunchAllInstances:!0,concurrentRelaunches:1,totalRelaunches:Number(null!=(a=null==(t=null==e?void 0:e.capacity)?void 0:t.max)?a:1)}}});class fn{constructor(){this.convertFunctionForEditing=e=>({...e,envVariables:e.environment?e.environment.variables:{},credentials:e.account,tracingConfig:{mode:e.tracingConfig?e.tracingConfig.mode:""},deadLetterConfig:{targetArn:e.deadLetterConfig?e.deadLetterConfig.targetArn:""},KMSKeyArn:e.kmskeyArn?e.kmskeyArn:"",subnetIds:e.vpcConfig?e.vpcConfig.subnetIds:[],securityGroupIds:e.vpcConfig?e.vpcConfig.securityGroupIds:[],vpcId:e.vpcConfig?e.vpcConfig.vpcId:"",operation:"",cloudProvider:e.cloudProvider,region:e.region,targetGroups:$t(e.targetGroups)?"":e.targetGroups})}normalizeFunction(e){const t=e;return t.credentials=e.account,t}normalizeFunctionSet(e){return e.map(e=>this.normalizeFunction(e))}constructNewAwsFunctionTemplate(e){return{role:"",runtime:"",s3bucket:"",s3key:"",handler:"",functionName:"",publish:!1,tags:{},memorySize:128,description:"",credentials:e.defaultCredentials.aws||hn.defaults.account,cloudProvider:"aws",detail:"",region:e.defaultRegions.aws||hn.defaults.region,envVariables:{},tracingConfig:{mode:"PassThrough"},kmskeyArn:"",vpcId:"",subnetIds:[],securityGroupIds:[],timeout:3,deadLetterConfig:{targetArn:""},operation:"",targetGroups:""}}}const En=(e,t)=>e.match(/^arn:aws:iam::\d{12}:role\/?\/[a-zA-Z_0-9+=,.@\-/]+/)?void 0:`Invalid role. ${t} must match regular expression: arn:aws:iam::d{12}:role/?[a-zA-Z_0-9+=,.@-_/]+`,yn=(e,t)=>e.match(/^[0-9A-Za-z.-]*[^.]$/)?void 0:`Invalid S3 Bucket name. ${t} must match regular expression: [0-9A-Za-z.-]*[^.]$`,bn=(e,t)=>e.match(/arn:aws[a-zA-Z-]?:[a-zA-Z_0-9.-]+:./)?void 0:`Invalid ARN. ${t} must match regular expression: /arn:aws[a-zA-Z-]?:[a-zA-Z_0-9.-]+:./`,Cn=(e,t)=>$t(e)?`At least one ${t} is required`:void 0,Nn=(e,t)=>e.match(/^[0-9A-Za-z]*$/)?void 0:`Invalid String Value. ${t} must match regular expression: [0-9A-Za-z]`;class wn extends Mt.Component{constructor(e){super(e)}validate(e){const t=new n(e);return t.field("role","Role ARN").required().withValidators(En),t.validateForm()}render(){return Mt.createElement("div",{className:"form-group"},Mt.createElement("div",{className:"col-md-11"},Mt.createElement("div",{className:"sp-margin-m-bottom"},Mt.createElement(r,{name:"role",label:"Role ARN",input:e=>Mt.createElement(l,{...e,placeholder:"Enter role ARN",name:"role"}),required:!0}))))}}const Sn=["nodejs24.x","nodejs22.x","java25","java21","java17","java11","java8.al2","python3.14","python3.13","python3.12","python3.11","python3.10","dotnet10","dotnet9","dotnet8","ruby4.0","ruby3.4","ruby3.3","provided.al2023","provided.al2"],kn="(Optional) Stack is naming components of a function, used to create vertical stacks of dependent services for integration testing.",Tn="(Optional) Detail is a string of free-form alphanumeric characters to describe any other variables in naming a function.";class In extends Mt.Component{constructor(){super(...arguments),this.state={accounts:[],existingFunctionNames:[],regions:[]},this.props$=new Ca,this.destroy$=new Ca}validate(e){const t=new n(e);t.field("s3bucket","S3 Bucket Name").optional().withValidators(yn);const a=t.validateForm();return this.props.isNew&&this.state.existingFunctionNames.includes(this.props.app.name.concat("-").concat(e.functionName))&&(a.functionName=`There is already a function in ${e.credentials}:${e.region} with that name.`),a}componentDidUpdate(){this.props$.next(this.props)}componentWillUnmount(){this.destroy$.next()}componentDidMount(){const e=this.props$.pipe(Ia(e=>e.formik.values)),t={account$:e.pipe(Ia(e=>e.credentials),Pa()),region$:e.pipe(Ia(e=>e.region),Pa()),functionName$:e.pipe(Ia(e=>e.functionName),Pa()),runtime$:e.pipe(Ia(e=>e.runtime),Pa()),s3bucket$:e.pipe(Ia(e=>e.s3bucket),Pa()),s3key$:e.pipe(Ia(e=>e.s3key),Pa()),handler$:e.pipe(Ia(e=>e.handler),Pa())},a=Na(i.listAccounts("aws")).pipe(Aa(1)),n=wa([t.account$,a]).pipe(Ga(([e,t])=>i.getRegionsForAccount(e)),Aa(1)),r=this.props.app.getDataSource("functions").data$,l=wa([r,t.account$,t.region$]).pipe(Ia(([e,t,a])=>e.filter(e=>e.account===t&&e.region===a).map(e=>e.functionName)),Aa(1));n.pipe(xa(t.region$),Da(this.destroy$)).subscribe(([e,t])=>{e.some(e=>e.name===t)||this.props.formik.setFieldValue("region",e[0]&&e[0].name)}),wa([a,n,l]).pipe(Da(this.destroy$)).subscribe(([e,t,a])=>this.setState({accounts:e,regions:t,existingFunctionNames:a}))}render(){const{isNew:e}=this.props,{errors:a,values:n}=this.props.formik,{accounts:i,regions:c}=this.state,d=ba({well:!0,"alert-danger":!!a.functionName,"alert-info":!a.functionName});return Mt.createElement("div",{className:"container-fluid form-horizontal "},e&&Mt.createElement("div",{className:d},Mt.createElement("strong",null,"Your function will be named: "),Mt.createElement(t,{id:"aws.function.name"}),Mt.createElement("span",null,this.props.app.name,"-",n.functionName),Mt.createElement(r,{name:"functionName",input:()=>null})),Mt.createElement(r,{name:"credentials",label:"Account",input:e=>Mt.createElement(s,{...e,stringOptions:i.map(e=>e.name),clearable:!0})}),Mt.createElement(r,{name:"region",label:"Region",input:e=>Mt.createElement(s,{...e,stringOptions:c.map(e=>e.name),clearable:!0})}),Mt.createElement(r,{name:"functionName",label:"Function Name",help:Mt.createElement(t,{id:"aws.function.name"}),input:e=>Mt.createElement(l,{...e})}),Mt.createElement(r,{name:"runtime",label:"Runtime",help:Mt.createElement(t,{id:"aws.function.runtime"}),input:e=>Mt.createElement(s,{...e,stringOptions:Sn,clearable:!0})}),Mt.createElement(r,{name:"s3bucket",label:"S3 Bucket",help:Mt.createElement(t,{id:"aws.function.s3bucket"}),input:e=>Mt.createElement(l,{...e,placeholder:"S3 bucket name"})}),Mt.createElement(r,{name:"s3key",label:"S3 Key",help:Mt.createElement(t,{id:"aws.function.s3key"}),input:e=>Mt.createElement(l,{...e,placeholder:"object.zip"})}),Mt.createElement(r,{name:"handler",label:"Handler",help:Mt.createElement(t,{id:"aws.function.handler"}),input:e=>Mt.createElement(l,{...e,placeholder:"filename.method"})}),Mt.createElement(r,{name:"publish",label:"Publish",input:e=>Mt.createElement(o,{...e})}))}}class Pn extends Mt.Component{constructor(e){super(e),this.validate=e=>{const t=new n(e);return t.field("deadLetterConfig.targetArn","Target ARN").optional().withValidators(bn),t.validateForm()}}render(){return Mt.createElement("div",{className:"container-fluid form-horizontal "},"Dead Letter Config",Mt.createElement(r,{name:"deadLetterConfig.targetArn",label:"Target ARN",help:Mt.createElement(t,{id:"aws.function.deadletterqueue"}),input:e=>Mt.createElement(l,{...e})}),"X-Ray Tracing",Mt.createElement(r,{name:"tracingConfig.mode",label:"Mode",help:Mt.createElement(t,{id:"aws.function.tracingConfig.mode"}),input:e=>Mt.createElement(s,{...e,stringOptions:["Active","PassThrough"],clearable:!0})}))}}class An extends Mt.Component{constructor(){super(...arguments),this.validate=e=>{const t=new n(e);return t.field("kmskeyArn","KMS Key ARN").optional().withValidators(bn),t.validateForm()}}render(){return Mt.createElement("div",{className:"container-fluid form-horizontal "},Mt.createElement(r,{name:"envVariables",label:"Env Variables",input:e=>Mt.createElement(c,{...e,allowEmptyValues:!0,addButtonLabel:"Add"})}),Mt.createElement(r,{name:"kmskeyArn",label:"Key ARN",help:Mt.createElement(t,{id:"aws.function.kmsKeyArn"}),input:e=>Mt.createElement(l,{...e})}))}}class Gn extends Mt.Component{constructor(){super(...arguments),this.validate=()=>({})}render(){return Mt.createElement("div",{className:"container-fluid form-horizontal "},Mt.createElement(r,{name:"description",label:"Description",input:e=>Mt.createElement(l,{...e})}),Mt.createElement(r,{name:"memorySize",label:"Memory (MB)",help:Mt.createElement(t,{id:"aws.functionBasicSettings.memorySize"}),input:e=>Mt.createElement(d,{...e,min:128,max:3008})}),Mt.createElement(r,{name:"timeout",label:"Timeout (seconds)",help:Mt.createElement(t,{id:"aws.functionBasicSettings.timeout"}),input:e=>Mt.createElement(d,{...e,min:1,max:900})}),Mt.createElement(r,{name:"targetGroups",label:"Target Group Name",input:e=>Mt.createElement(l,{...e})}))}}class xn extends Mt.Component{constructor(){super(...arguments),this.validate=e=>{const t=new n(e);return t.field("tags","Tag").required().withValidators(Cn),t.validateForm()}}render(){return Mt.createElement("div",{className:"container-fluid form-horizontal "},Mt.createElement(r,{name:"tags",input:e=>Mt.createElement(c,{...e,allowEmptyValues:!1,addButtonLabel:"Add"})}))}}class Dn{static listVpcs(){return this.cache||(this.cache=m.listNetworksByProvider("aws").then(e=>e.map(e=>(e.label=e.name,e.deprecated=!!e.deprecated,e.deprecated&&(e.label+=" (deprecated)"),e)))),this.cache}static resetCache(){this.cache=null}static getVpcName(e){return this.listVpcs().then(t=>{const a=t.find(t=>t.id===e);return a?a.name:null})}}const Bn="None (EC2 Classic)";function Fn(e){const{vpcId:t}=e,a=u(async()=>{const t=await Dn.getVpcName(e.vpcId);return t?`${t} (${e.vpcId})`:`(${e.vpcId})`},Bn,[t]),n=t?a.result:Bn;return Mt.createElement("span",{className:"vpc-tag"},n)}class zn extends Mt.Component{constructor(e){super(e),this.state={vpcOptions:[],accounts:null,regions:[],subnets:[],availableSubnets:[],securityGroups:null},this.props$=new Ca,this.destroy$=new Ca,this.handleSubnetUpdate=e=>{const t=e.map(e=>e.value);this.props.formik.setFieldValue("subnetIds",t)},this.handleSecurityGroupsUpdate=e=>{const t=e.map(e=>e.value);this.props.formik.setFieldValue("securityGroupIds",t)},this.setVpc=e=>{this.props.formik.setFieldValue("vpcId",e),this.props.formik.setFieldValue("subnetIds",[]);const{availableSubnets:t}=this.state,a=t.filter(function(t){return t.vpcId.includes(e)});this.setState({subnets:a})},this.toSubnetOption=e=>({value:e.subnetId,label:e.subnetId}),this.getSecurityGroupsByVpc=e=>{const{values:t}=this.props.formik,a=[];return Ut(e,function(e,n){n===t.credentials&&Ut(e,function(e,n){"aws"===n&&Ut(e,function(e,n){n===t.region&&e.forEach(function(e){e.vpcId===t.vpcId&&a.push({value:e.id,label:e.name})})})})}),a},this.getSubnetOptions=()=>{const{subnets:e,availableSubnets:t}=this.state,{values:a}=this.props.formik;return!this.props.isNew&&a.vpcId?t.filter(function(e){return e.vpcId.includes(a.vpcId)}).map(this.toSubnetOption):e.map(this.toSubnetOption)},this.getAllVpcs()}getAllVpcs(){Na(Dn.listVpcs()).pipe(Da(this.destroy$)).subscribe(e=>{this.setState({vpcOptions:e})})}validate(){return{}}getAvailableSubnets(){return p.listSubnetsByProvider("aws")}getAvailableSecurityGroups(){return this.context.services.securityGroupReader.getAllSecurityGroups()}makeSubnetOptions(e){const t=e.map(e=>({subnetId:e.id,vpcId:e.vpcId}));return Vt(t,"subnetId")}componentDidUpdate(){this.props$.next(this.props)}componentWillUnmount(){this.destroy$.next()}componentDidMount(){const e=Promise.resolve(this.getAvailableSubnets()).then(e=>(e.forEach(e=>{e.label=e.id,e.deprecated=!!e.deprecated,e.deprecated&&(e.label+=" (deprecated)")}),e.filter(e=>e.label))).then(e=>this.makeSubnetOptions(e)),t=Promise.resolve(this.getAvailableSecurityGroups());wa([e,t]).pipe(Da(this.destroy$)).subscribe(([e,t])=>this.setState({availableSubnets:e,securityGroups:t}))}render(){const{vpcOptions:e,securityGroups:a}=this.state,{values:n}=this.props.formik,l=this.getSubnetOptions(),i=a?this.getSecurityGroupsByVpc(a):[];return Mt.createElement("div",{className:"form-group"},Mt.createElement("div",{className:"col-md-11"},Mt.createElement("div",{className:"sp-margin-m-bottom"},n.credentials&&Mt.createElement(r,{name:"vpcId",label:"VPC Id",help:Mt.createElement(t,{id:"aws.function.vpc.id"}),input:t=>Mt.createElement(s,{...t,stringOptions:e.filter(e=>e.account===n.credentials).map(e=>e.id),clearable:!0}),onChange:this.setVpc,required:!1})),Mt.createElement("div",{className:"form-group"},Mt.createElement("div",{className:"col-md-4 sm-label-right"},Mt.createElement("b",null,"Subnets "),Mt.createElement(t,{id:"aws.function.subnet"})),Mt.createElement("div",{className:"col-md-7"},0===l.length&&Mt.createElement("div",{className:"form-control-static"},"No subnets found in the selected account/region/VPC"),n.vpcId?Mt.createElement(h,{multi:!0,options:l,value:n.subnetIds,onChange:this.handleSubnetUpdate}):null)),Mt.createElement("div",{className:"form-group"},Mt.createElement("div",{className:"col-md-4 sm-label-right"},Mt.createElement("b",null,"Security Groups "),Mt.createElement(t,{id:"aws.function.subnet"})),Mt.createElement("div",{className:"col-md-7"},0===i.length&&Mt.createElement("div",{className:"form-control-static"},"No security groups found in the selected account/region/VPC"),n.credentials&&n.vpcId?Mt.createElement(h,{multi:!0,options:i,value:n.securityGroupIds,onChange:this.handleSecurityGroupsUpdate}):null))))}}zn.contextType=g;class Mn extends Mt.Component{constructor(e){super(e),this._isUnmounted=!1,this.submit=e=>{const{app:t}=this.props,{isNew:a}=this.state,n=Ht(e),r=a?"Create":"Update",l=new v({application:t,title:(a?"Creating":"Updating")+" your function",onDismiss:()=>this.props.dismissModal(),onTaskComplete:()=>{this.checkForS3Update(n,r)}});l.submit(()=>(n.type="lambdaFunction",n.operation=a?"createLambdaFunction":"updateLambdaFunctionConfiguration",f.upsertFunction(n,t,r))),this.setState({taskMonitor:l})};const t=new fn,a=e.functionDef?t.convertFunctionForEditing(e.functionDef):t.constructNewAwsFunctionTemplate(e.app);this.state={isNew:!e.functionDef,functionCommand:a,taskMonitor:null}}static show(e,t){return E.show(Rn,e,{dialogClassName:"wizard-modal modal-lg"},t)}componentWillUnmount(){var e;this._isUnmounted=!0,null==(e=this.refreshUnsubscribe)||e.call(this),this.refreshUnsubscribe=void 0}onApplicationRefresh(e){var t;if(null==(t=this.refreshUnsubscribe)||t.call(this),this.refreshUnsubscribe=void 0,this._isUnmounted)return;this.props.dismissModal(),this.setState({taskMonitor:void 0});const a={name:e.name,accountId:e.credentials,region:e.region,vpcId:e.vpcId,provider:"aws"};this.props.stateService.includes("**.functionDetails")?this.props.stateService.go("^.functionDetails",a):this.props.stateService.go(".functionDetails",a)}onTaskComplete(e){var t;null==(t=this.refreshUnsubscribe)||t.call(this),this.refreshUnsubscribe=void 0,this.refreshUnsubscribe=this.props.app.functions.onNextRefresh(()=>this.onApplicationRefresh(e)),this.props.app.functions.refresh()}checkForS3Update(e,t){const{isNew:a}=this.state;if(!a&&(e.s3bucket||e.s3key)){e.operation="updateLambdaFunctionCode";const{app:a}=this.props;f.upsertFunction(e,a,t)}this.onTaskComplete(e)}render(){const{app:e,dismissModal:t,forPipelineConfig:a,functionDef:n}=this.props,{isNew:r,functionCommand:l,taskMonitor:i}=this.state;let s=a?"Configure Existing Function":"Create New Function";return r||(s=`Edit ${l.functionName}: ${l.region}: ${l.credentials}`),Mt.createElement(y,{heading:s,initialValues:l,taskMonitor:i,dismissModal:t,closeModal:this.submit,submitButtonLabel:a?r?"Add":"Done":r?"Create":"Update",render:({formik:t,nextIdx:a,wizard:l})=>Mt.createElement(Mt.Fragment,null,Mt.createElement(b,{label:"Basic information",wizard:l,order:a(),render:({innerRef:a})=>Mt.createElement(In,{ref:a,app:e,formik:t,isNew:r,functionDef:n})}),Mt.createElement(b,{label:"Execution Role",wizard:l,order:a(),render:({innerRef:e})=>Mt.createElement(wn,{ref:e,formik:t,isNew:r,functionDef:n})}),Mt.createElement(b,{label:"Environment",wizard:l,order:a(),render:({innerRef:e})=>Mt.createElement(An,{ref:e,formik:t,isNew:r,functionDef:n})}),Mt.createElement(b,{label:"Tags",wizard:l,order:a(),render:({innerRef:e})=>Mt.createElement(xn,{ref:e,formik:t,isNew:r,functionDef:n})}),Mt.createElement(b,{label:"Settings",wizard:l,order:a(),render:({innerRef:e})=>Mt.createElement(Gn,{ref:e,formik:t,isNew:r,functionDef:n})}),Mt.createElement(b,{label:"Network",wizard:l,order:a(),render:({innerRef:a})=>Mt.createElement(zn,{ref:a,app:e,formik:t,isNew:r})}),Mt.createElement(b,{label:"Debugging and Error Handling",wizard:l,order:a(),render:({innerRef:e})=>Mt.createElement(Pn,{ref:e,formik:t,isNew:r,functionDef:n})}))})}}Mn.defaultProps={closeModal:C,dismissModal:C};const Rn=Object.assign(N(Mn),{show:Mn.show});class Ln extends Mt.Component{constructor(e){super(e),this.editFunction=()=>{const{functionDef:e}=this.props,{application:t}=this.state;Rn.show({app:t,functionDef:e},this.context.services)},this.deleteFunction=()=>{const{app:e,functionDef:t,functionFromParams:a}=this.props,n={application:e,title:"Deleting "+a.functionName},r={cloudProvider:t.cloudProvider,functionName:t.functionName,region:t.region,credentials:t.credentials};w.confirm({header:`Really delete ${a.functionName} in ${a.region}: ${a.account}?`,buttonText:`Delete ${a.functionName}`,account:a.account,taskMonitorConfig:n,submitMethod:()=>f.deleteFunction(r,e)})},this.entityTagUpdate=()=>{this.props.app.functions.refresh()},this.state={application:e.app}}componentDidMount(){const{app:e,functionDef:t}=this.props;let a;const n=t.functionName.split("-")[0];n===e.name?a=e:S.getApplication(n).then(e=>{this.setState({application:e})}).catch(()=>{this.setState({application:this.props.app})}),this.setState({application:a})}render(){const{app:t,functionDef:a}=this.props,{application:n}=this.state;return Mt.createElement("div",{style:{display:"inline-block"}},hn.adHocInfraWritesEnabled&&Mt.createElement(La,{className:"dropdown",id:"function-actions-dropdown"},Mt.createElement(La.Toggle,{className:"btn btn-sm btn-primary dropdown-toggle"},Mt.createElement("span",null,"Function Actions")),Mt.createElement(La.Menu,{className:"dropdown-menu"},Mt.createElement("li",{className:n?"":"disabled"},Mt.createElement("a",{className:"clickable",onClick:this.editFunction},"Edit Function")),a.functionName&&Mt.createElement("li",null,Mt.createElement("a",{className:"clickable",onClick:this.deleteFunction},"Delete Function")),e&&e.feature.entityTags&&Mt.createElement(k,{component:a,application:t,entityType:"function",onUpdate:this.entityTagUpdate}))))}}var On,$n,Un,Vn,Hn,qn;Ln.contextType=g;const Wn={type:"m5",description:"m5 instances provide a balance of compute, memory, and network resources. They are a good choice for most applications.",instanceTypes:[{name:"m5.large",label:"Large",cpu:2,memory:8,storage:{type:"EBS"},costFactor:2},{name:"m5.xlarge",label:"XLarge",cpu:4,memory:16,storage:{type:"EBS"},costFactor:3},{name:"m5.2xlarge",label:"2XLarge",cpu:8,memory:32,storage:{type:"EBS"},costFactor:4}]},jn=[{type:"general",label:"General Purpose",families:[Wn,{type:"t2",description:"t2 instances are a good choice for workloads that don’t use the full CPU often or consistently, but occasionally need to burst (e.g. web servers, developer environments and small databases).",instanceTypes:[{name:"t2.small",label:"Small",cpu:1,memory:2,storage:{type:"EBS"},costFactor:1,cpuCreditsPerHour:12},{name:"t2.medium",label:"Medium",cpu:2,memory:4,storage:{type:"EBS"},costFactor:1,cpuCreditsPerHour:24},{name:"t2.large",label:"Large",cpu:2,memory:8,storage:{type:"EBS"},costFactor:2,cpuCreditsPerHour:36},{name:"t2.xlarge",label:"XLarge",cpu:4,memory:16,storage:{type:"EBS"},costFactor:3,cpuCreditsPerHour:54},{name:"t2.2xlarge",label:"2XLarge",cpu:8,memory:32,storage:{type:"EBS"},costFactor:4,cpuCreditsPerHour:81}]},{type:"t3",description:"t3 instances are a good choice for workloads that don’t use the full CPU often or consistently, but occasionally need to burst (e.g. web servers, developer environments and small databases).",instanceTypes:[{name:"t3.small",label:"Small",cpu:2,memory:2,storage:{type:"EBS"},costFactor:1,cpuCreditsPerHour:24},{name:"t3.medium",label:"Medium",cpu:2,memory:4,storage:{type:"EBS"},costFactor:1,cpuCreditsPerHour:24},{name:"t3.large",label:"Large",cpu:2,memory:8,storage:{type:"EBS"},costFactor:2,cpuCreditsPerHour:36},{name:"t3.xlarge",label:"XLarge",cpu:4,memory:16,storage:{type:"EBS"},costFactor:3,cpuCreditsPerHour:96},{name:"t3.2xlarge",label:"2XLarge",cpu:8,memory:32,storage:{type:"EBS"},costFactor:4,cpuCreditsPerHour:192}]}],icon:"hdd",showCpuCredits:!0,descriptionListOverride:[Wn.description,"t2/t3 instances are a good choice for workloads that don’t use the full CPU often or consistently, but occasionally need to burst (e.g. web servers, developer environments and small databases)."]},{type:"memory",label:"High Memory",families:[{type:"r5",description:"r5 instances are optimized for memory-intensive applications and have the lowest cost per GiB of RAM among Amazon EC2 instance types.",instanceTypes:[{name:"r5.large",label:"Large",cpu:2,memory:16,storage:{type:"EBS"},costFactor:1},{name:"r5.xlarge",label:"XLarge",cpu:4,memory:32,storage:{type:"EBS"},costFactor:2},{name:"r5.2xlarge",label:"2XLarge",cpu:8,memory:64,storage:{type:"EBS"},costFactor:2},{name:"r5.4xlarge",label:"4XLarge",cpu:16,memory:128,storage:{type:"EBS"},costFactor:3}]}],icon:"hdd"},{type:"micro",label:"Micro Utility",families:[{type:"t2",description:"t2 instances are a good choice for workloads that don’t use the full CPU often or consistently, but occasionally need to burst (e.g. web servers, developer environments and small databases).",instanceTypes:[{name:"t2.nano",label:"Nano",cpu:1,memory:.5,storage:{type:"EBS"},costFactor:1,cpuCreditsPerHour:3},{name:"t2.micro",label:"Micro",cpu:1,memory:1,storage:{type:"EBS"},costFactor:1,cpuCreditsPerHour:6},{name:"t2.small",label:"Small",cpu:1,memory:2,storage:{type:"EBS"},costFactor:1,cpuCreditsPerHour:12}]},{type:"t3",description:"t3 instances are a good choice for workloads that don’t use the full CPU often or consistently, but occasionally need to burst (e.g. web servers, developer environments and small databases).",instanceTypes:[{name:"t3.nano",label:"Nano",cpu:2,memory:.5,storage:{type:"EBS"},costFactor:1,cpuCreditsPerHour:6},{name:"t3.micro",label:"Micro",cpu:2,memory:1,storage:{type:"EBS"},costFactor:1,cpuCreditsPerHour:12},{name:"t3.small",label:"Small",cpu:2,memory:2,storage:{type:"EBS"},costFactor:1,cpuCreditsPerHour:24}]}],icon:"hdd",showCpuCredits:!0,descriptionListOverride:["t2/t3 instances are a good choice for workloads that don’t use the full CPU often or consistently, but occasionally need to burst (e.g. web servers, developer environments and small databases)."]},{type:"custom",label:"Custom Type",families:[],icon:"asterisk"}],Zn=null!=(Un=null==($n=null==(On=hn.instanceTypes)?void 0:On.exclude)?void 0:$n.categories)?Un:[],_n=null!=(qn=null==(Hn=null==(Vn=hn.instanceTypes)?void 0:Vn.exclude)?void 0:Hn.families)?qn:[],Kn=jn.filter(({type:e})=>!Zn.includes(e)).map(e=>Object.assign({},e,{families:e.families.filter(({type:e})=>!_n.includes(e))}));class Yn{constructor(){this.instanceClassOrder=["xlarge","large","medium","small","micro","nano"],this.families={ec2ClassicSupported:["m1","m3","t1","c1","c3","cc2","cr1","m2","r3","d2","hs1","i2","g2"],ebsOptimized:["c4","d2","f1","g3","i3","m4","m5","p2","r4","r5","x1"],burstablePerf:["t2","t3","t3a","t4g"]}}getCategories(){return Promise.resolve(Kn)}getAllTypesByRegion(){return T("/instanceTypes").get().then(function(e){return Ot.chain(e).map(function(e){return{...e,key:[e.region,e.account,e.name].join(":")}}).uniqBy("key").groupBy("region").value()})}sortTypesByFamilyAndSize(e,t){const a=e.split("."),n=t.split("."),[r,l=""]=a,[i,s=""]=n;if(r!==i)return r>i?1:r<i?-1:0;const o=this.instanceClassOrder.findIndex(e=>l.endsWith(e)),c=this.instanceClassOrder.findIndex(e=>s.endsWith(e));if(-1===o||-1===c)return 0;if(0===o&&0===c){const e=parseInt(l.replace("xlarge",""))||0,t=parseInt(s.replace("xlarge",""))||0;return t<e?1:t>e?-1:0}return o>c?-1:o<c?1:0}getAvailableTypesForRegions(e,t){let a=[];return(t=t||[])&&t.length&&(a=e[t[0]]||[]),t.forEach(function(t){e[t]&&(a=Ot.intersectionBy(a,e[t],"name"))}),null==a?void 0:a.sort((e,t)=>this.sortTypesByFamilyAndSize(e.name,t.name))}filterInstanceTypes(e,t,a,n){const r=(e,t)=>e.some(e=>e.toLowerCase()===t.toLowerCase());return Ot.filter(e,e=>"*"===t&&"*"===n||!(!a&&!this.families.ec2ClassicSupported.includes(e.name.split(".")[0]))&&(!(t&&e.supportedVirtualizationTypes&&!r(e.supportedVirtualizationTypes,t))&&!(n&&e.supportedArchitectures&&!r(e.supportedArchitectures,n))))}isEbsOptimized(e){if(!e)return!1;const t=Ot.split(e,".",1)[0];return this.families.ebsOptimized.includes(t)}isBurstingSupportedForAllTypes(e){return!(!e||!e.length)&&e.every(e=>this.isBurstingSupported(e))}isBurstingSupported(e){if(!e)return!1;const t=Ot.split(e,".",1)[0];return this.families.burstablePerf.includes(t)}getInstanceTypesInCategory(e,t){var a;if(!e||!e.length||!t)return[];if("custom"===t)return e;const n=Ot.flatten(null==(a=Ot.find(jn,{type:t}))?void 0:a.families.map(e=>e.instanceTypes.map(e=>e.name)));return Ot.intersection(e,n)}}class Xn{addComparator(e){if(e.comparisonOperator)switch(e.comparisonOperator){case"LessThanThreshold":e.comparator="<";break;case"GreaterThanThreshold":e.comparator=">";break;case"LessThanOrEqualToThreshold":e.comparator="≤";break;case"GreaterThanOrEqualToThreshold":e.comparator="≥"}}addAdjustmentAttributes(e){e.operator=e.scalingAdjustment<0?"decrease":"increase",e.absAdjustment=Math.abs(e.scalingAdjustment)}transformScalingPolicy(e){const t={...e},a=(e,t)=>t.metricIntervalUpperBound-e.metricIntervalUpperBound,n=(e,t)=>e.metricIntervalLowerBound-t.metricIntervalLowerBound;if(t.alarms=e.alarms||[],t.alarms.forEach(e=>this.addComparator(e)),this.addAdjustmentAttributes(t),t.stepAdjustments&&t.stepAdjustments.length){t.stepAdjustments.forEach(e=>this.addAdjustmentAttributes(e));const r=e.stepAdjustments.every(e=>void 0!==e.metricIntervalUpperBound)?a:n;t.stepAdjustments.sort((e,t)=>r(e,t))}return t}normalizeServerGroupDetails(e){const t={...e};return e.scalingPolicies&&(t.scalingPolicies=e.scalingPolicies.map(e=>this.transformScalingPolicy(e))),t}normalizeServerGroup(e){return e.instances.forEach(t=>{t.vpcId=e.vpcId}),Dn.listVpcs().then(t=>this.addVpcNameToServerGroup(e)(t))}addVpcNameToServerGroup(e){return t=>{const a=t.find(t=>t.id===e.vpcId);return e.vpcName=a?a.name:"",e}}convertServerGroupCommandToDeployConfiguration(e){const t={...e};t.cloudProvider="aws",t.availabilityZones={[t.region]:e.availabilityZones},t.loadBalancers=(e.loadBalancers||[]).concat(e.vpcLoadBalancers||[]),t.targetGroups=e.targetGroups||[],t.account=t.credentials,t.subnetType=t.subnetType||"",t.instanceType=t.instanceType||t.launchTemplateOverridesForInstanceType&&t.launchTemplateOverridesForInstanceType[0].instanceType,"clone"!==e.viewState.mode&&delete t.source,t.ramdiskId||delete t.ramdiskId;return["region","viewState","backingData","selectedProvider","instanceProfile","vpcId"].forEach(e=>{delete t[e]}),t}constructNewStepScalingPolicyTemplate(e){return{alarms:[{namespace:"AWS/EC2",metricName:"CPUUtilization",threshold:50,statistic:"Average",comparisonOperator:"GreaterThanThreshold",evaluationPeriods:1,dimensions:[{name:"AutoScalingGroupName",value:e.name}],period:60}],adjustmentType:"ChangeInCapacity",stepAdjustments:[{scalingAdjustment:1,metricIntervalLowerBound:0}],estimatedInstanceWarmup:600}}constructNewTargetTrackingPolicyTemplate(){return{alarms:[],estimatedInstanceWarmup:300,targetTrackingConfiguration:{targetValue:null,predefinedMetricSpecification:{predefinedMetricType:"ASGAverageCPUUtilization"}}}}}let Jn,Qn,er;const tr={get awsInstanceTypeService(){return Jn=Jn||new Yn},get awsServerGroupTransformer(){return Qn=Qn||new Xn},get functionReader(){return er=er||new I(new fn)}};class ar extends Mt.Component{constructor(e){super(e),this.destroy$=new Ca,this.state={loading:!0}}extractFunction(){const{app:e,functionObj:t}=this.props;e.functions.data.find(e=>e.functionName===t.functionName&&e.region===t.region&&e.account===t.account)?Na(tr.functionReader.getFunctionDetails("aws",t.account,t.region,t.functionName)).pipe(Da(this.destroy$)).subscribe(e=>{e.length&&this.setState({functionDef:e[0],loading:!1})}):this.setState({functionDef:{},loading:!1})}componentDidMount(){const{app:e}=this.props,t=e.functions;Na(t.ready()).pipe(Da(this.destroy$)).subscribe(()=>{const e=t.onRefresh(()=>this.extractFunction());this.setState({dataSourceUnsubscribe:e}),this.extractFunction()})}componentWillUnmount(){this.state.dataSourceUnsubscribe&&this.state.dataSourceUnsubscribe(),this.destroy$.next()}render(){const{app:e}=this.props,{loading:t,functionDef:a}=this.state;if(t)return Mt.createElement(P,{loading:t});const n=Mt.createElement("dl",{className:"horizontal-when-filters-collapsed dl-horizontal dl-narrow"},Mt.createElement("dt",null,"Last Modified "),Mt.createElement("dd",null,a.lastModified),Mt.createElement("dt",null,"In"),Mt.createElement("dd",null,Mt.createElement(A,{account:a.account})," ",a.region),Mt.createElement("dt",null,"VPC"),Mt.createElement("dd",null,a.vpcConfig?a.vpcConfig.vpcId:"Default"),Mt.createElement("dt",null,"Function ARN"),Mt.createElement("dd",null,a.functionArn),Mt.createElement("dt",null,"Revision ID"),Mt.createElement("dd",null,a.revisionId),Mt.createElement("dt",null,"Version"),Mt.createElement("dd",null,a.version)),r=Mt.createElement("dl",{className:"horizontal-when-filters-collapsed dl-horizontal dl-narrow"},a.eventSourceMappings&&0!==a.eventSourceMappings.length?a.eventSourceMappings.map(e=>Mt.createElement(Mt.Fragment,null,Mt.createElement("h5",null,Mt.createElement("strong",null,"Event Source")),Mt.createElement("dl",null,Mt.createElement("dt",null,"ARN"),Mt.createElement("dd",null,e.eventSourceArn),Mt.createElement("dt",null,"State"),Mt.createElement("dd",null,e.state)))):"None"),l=Mt.createElement("dl",{className:"horizontal-when-filters-collapsed dl-horizontal dl-narrow"},a.aliasConfigurations&&0!==a.aliasConfigurations.length?a.aliasConfigurations.map(e=>Mt.createElement(Mt.Fragment,null,Mt.createElement("h5",null,Mt.createElement("strong",null,"Alias Details")),Mt.createElement("dl",null,Mt.createElement("dt",null,"Name"),Mt.createElement("dd",null,e.name),Mt.createElement("dt",null,"ARN"),Mt.createElement("dd",null,e.aliasArn)))):"None"),i=Mt.createElement(G,{heading:"Function Details"},n),s=Mt.createElement(G,{heading:"Event Source Details"},r),o=Mt.createElement(G,{heading:"Alias Configuration Details"},l);return Mt.createElement(P,{loading:this.state.loading},$t(this.state.functionDef)?"Function not found.":Mt.createElement(P.Header,{icon:Mt.createElement("i",{className:"fa fa-xs fa-fw fa-asterisk"}),name:this.state.functionDef.functionName},Mt.createElement("div",{className:"actions"},Mt.createElement(Ln,{app:e,functionDef:a,functionFromParams:{account:this.state.functionDef.account,region:this.state.functionDef.region,functionName:this.state.functionDef.functionName}}))),$t(this.state.functionDef)?"":i,$t(this.state.functionDef)||$t(this.state.functionDef.eventSourceMappings)?"":s,$t(this.state.functionDef)||$t(this.state.functionDef.aliasConfigurations)?"":o)}}const nr={"aws.associateElasticIp.elasticIp":"<p>(Optional) <b>Elastic IP</b> is an IP address that Spinnaker will associate with this cluster.</p>\n <p>If specified, this elastic IP must exist and not already be attached to an instance or cluster.</p>\n <p>If left blank, Spinnaker will make a selection from the list of available elastic IPs in the provided account and region.</p>","aws.associateElasticIp.type":"<p><b>Type</b> of elastic IP to associate:'\n <ul>\n <li><b>standard</b> is usable in EC2 Classic</li>\n <li><b>vpc</b> is usable in VPC</li>\n </ul>","aws.serverGroup.subnet":"The subnet selection determines the VPC in which your server group will run. Options vary by account and region; the most common ones are:\n <ul>\n <li><b>None (EC2 Classic)</b>: instances will not run in a VPC</li>\n <li><b>internal</b> instances will be restricted to internal clients (i.e. require VPN access)</li>\n <li><b>external</b> instances will be publicly accessible and running in VPC</li>\n </ul>","aws.loadBalancer.subnet":"The subnet selection determines the VPC in which your load balancer will run.<br/>\n This also restricts the server groups which can be serviced by the load balancer.\n Options vary by account and region; the most common ones are:\n <ul>\n <li><b>None (EC2 Classic)</b>: the load balancer will not run in a VPC</li>\n <li><b>internal</b> access to the load balancer will be restricted to internal clients (i.e. require VPN access)</li>\n <li><b>external</b> the load balancer will be publicly accessible and running in VPC</li>\n </ul>","aws.loadBalancer.detail":'<p>(Optional) <b>Detail</b> is a string of free-form alphanumeric characters; by convention, we recommend using "frontend".</p>\n <p>However, if your stack name needs to be longer (load balancer names are limited to 32 characters), consider changing it to "elb", or omit it altogether.</p>',"aws.loadBalancer.internal":"Controls the load balancer scheme, <strong>not</strong> the subnet. By default, load balancers are created with a DNS name that resolves to public IP addresses. Specify internal to create a load balancer with a DNS name that resolves to private IP addresses.","aws.loadBalancer.stack":"(Optional) <b>Stack</b> is one of the core naming components of a cluster, used to create vertical stacks of dependent services for integration testing.","aws.loadBalancer.name":"<p>The load balancer name is formed by combining the application name, the <b>Stack</b> field, and the <b>Detail</b> field.</p>","aws.loadBalancer.targetGroups":"Add a target group if you want to associate this with an Application Load Balancer (ALB) or Network Load Balancer (NLB)","aws.loadBalancer.loadBalancers":"Add a load balancer directly if you created a Classic Load Balancer (a classic load balancer does not have target groups)","aws.loadBalancer.ruleCondition.host":"<p>You can specify a single host name (for example, <em>my.example.com</em>). A host name is case insensitive, can be up to 128 characters in length, and can contain any of the following characters. Note that you can include up to three wildcard characters.</p>\n <ul>\n <li>A-Z, a-z, 0-9</li>\n <li>- .</li>\n <li>* (matches 0 or more characters)</li>\n <li>? (matches exactly 1 character)</li>\n </ul>\n <p>Note that <strong>*.example.com</strong> will match <strong>test.example.com</strong> but won't match <strong>example.com</strong>.</p>","aws.loadBalancer.ruleCondition.path":"<p>You can specify a single path pattern (for example, <em>/img/*</em>). A path pattern is case sensitive, can be up to 128 characters in length, and can contain any of the following characters. Note that you can include up to three wildcard characters.</p>\n <ul>\n <li>A-Z, a-z, 0-9</li>\n <li>_ - . $ / ~ \" ' @ : +</li>\n <li>& (using &amp;)</li>\n <li>* (matches 0 or more characters)</li>\n <li>? (matches exactly 1 character)</li>\n </ul>\n <p>Note that the path pattern is used to route requests but does not alter them. For example, if a rule has a path pattern of <em>/img/*</em>, the rule would forward a request for <em>/img/picture.jpg</em> to the specified target group as a request for <em>/img/picture.jpg</em>.</p>","aws.loadBalancer.oidcAuthentication":"Authentication requires a configured OIDC client.","aws.serverGroup.stack":"(Optional) <b>Stack</b> is one of the core naming components of a cluster, used to create vertical stacks of dependent services for integration testing.","aws.serverGroup.detail":"(Optional) <b>Detail</b> is a string of free-form alphanumeric characters and hyphens to describe any other variables.","aws.serverGroup.imageName":"(Required) <b>Image</b> is the deployable Amazon Machine Image. Images are restricted to the account and region selected.","aws.serverGroup.storageType":"AWS offers various storage options like temporary block-level storage via instance store (SSD, HDD) and Amazon Elastic Block Store (EBS). This column lists the storage type supported for the instance type.","aws.serverGroup.instancesDistribution":'Learn more in <a target="_blank" href="https://docs.aws.amazon.com/autoscaling/ec2/userguide/asg-purchase-options.html">AWS docs</a>.',"aws.serverGroup.spotMaxPrice":"The maximum price per unit hour to pay for a Spot instance. By <b>default (empty)</b>, Amazon EC2 Auto Scaling uses the On-Demand price as the maximum Spot price.","aws.serverGroup.spotAllocationStrategy":"<p>Indicates how to allocate instances across Spot Instance pools.</p>\n <ul>\n <li><b>capacity-optimized (recommended)</b>: Instances launched using Spot pools that are optimally chosen based on the available Spot capacity.</li>\n <li><b>capacity-optimized-prioritized</b>: Instances launched using the priority on a best-effort basis to determine which launch template override to use first, but AWS optimizes for capacity first.</li>\n <li><b>lowest-price (default)</b>: Instances launched using Spot pools with the lowest price, and evenly allocated across the number of Spot pools specified</li>\n </ul>","aws.serverGroup.spotInstancePoolCount":"Number of lowest priced Spot Instance pools to diversify across. Only applicable for strategy 'lowest-price'. <b>Default: 2.</b>","aws.serverGroup.odAllocationStrategy":"The only strategy / <b>default is 'prioritized'</b>. The order specified in the list of selected instance types is used to determine which instance type to use first when fulfilling On-Demand capacity.","aws.serverGroup.odBase":"Minimum amount of the Auto Scaling Group's capacity that must be fulfilled by On-Demand Instances. This base portion is provisioned first as the group scales. <b>Default: 0.</b>","aws.serverGroup.odPercentAboveBase":"Percentages of On-Demand and Spot instances for additional capacity beyond OnDemandBaseCapacity.<b>Default: 100.</b>","aws.serverGroup.instanceTypeWeight":'The number of capacity units gives the instance type a proportional weight to other instance types. When specified, weights count towards desired capacity.\nLearn more in <a target="_blank" href="https://spinnaker.io/docs/setup/other_config/server-group-launch-settings/aws-ec2/launch-templates/#convert-a-server-group-with-launch-template-to-use-mixed-instances-policy-with-multiple-instance-types-and-capacity-weighting">examples and docs</a>.',"aws.serverGroup.instanceTypes":"Specify up to 20 instance types.","aws.serverGroup.instanceTypesSelect":"<p>Filter instance types on one or more criteria, comma separated:\n <ul>\n <li>Minimum vCPU e.g. 16vcpu</li>\n <li>Minimum memory e.g. 32gib</li>\n <li>Spot support</li>\n <li>EBS support</li>\n <li>GPU support</li>\n <li>Instance storage type e.g. ssd</li>\n <li>Generation with 'currentGen' / 'oldGen'</li>\n <li>Instance family / size / type e.g. c3 / large / c3.large</li>\n </ul>\n Examples:\n <ul>\n <li>16vcpu, 32gib, spot, oldGen</li>\n <li>medium, ebs</li>\n <li>ssd,ebs,gpu,currentgen</li>\n </ul>","aws.serverGroup.multipleInstanceTypes":"Instance types a server group can launch, first (highest priority) to last (lowest priority).","aws.serverGroup.unlimitedCpuCredits":"<p>CPU credits can be configured with 2 modes:</p><br/>\n <ul>\n <li><b>Unlimited (i.e. Unlimited On)</b>: Can sustain high CPU utilization for any period of time whenever required.<br/>\n If the average CPU usage over a rolling 24-hour period exceeds the baseline, charges for surplus credits will apply.</li>\n <li><b>Standard (i.e. Unlimited Off)</b>: <b>Default mode in Spinnaker.</b> Suited to workloads with an average CPU utilization that is consistently below the baseline CPU utilization of the instance.<br/>\n To burst above the baseline, the instance spends credits that it has accrued in its CPU credit balance.</li>\n </ul>","aws.serverGroup.capacityRebalance":"Enabling <b>Capacity Rebalance</b> allows EC2 Auto Scaling to proactively replace Spot Instances that have received a rebalance recommendation, <b>before</b> it is interrupted by AWS EC2.","aws.serverGroup.advancedMode":'Advanced mode allows you to configure allocation strategies, multiple instance types with weighting, instance distribution across Spot / On-Demand and their proportions in the server group. Learn more in <a target="_blank" href="https://docs.aws.amazon.com/autoscaling/ec2/userguide/asg-purchase-options.html">AWS docs</a>.',"aws.serverGroup.legacyUdf":"<p>(Optional) <b>User Data Format</b> allows overriding of the format used when generating user data during deployment. The default format used is configured\n in the application's attributes, editable via the 'Config' tab.</p>\n <p><b>Default</b> will use the value from the application's configuration.</p>\n <p><b>Modern</b> will use the modern template.</p>\n <p><b>Legacy</b> will use the legacy (<b>deprecated</b>) template.</p>\n <p>This option is intended to allow testing migration from legacy to modern before configuring it for the entire application. If unsure, pick <b>Default</b>.</p>","aws.serverGroup.base64UserData":"(Optional) <b>UserData</b> is a base64 encoded string.","aws.serverGroup.enabledMetrics":"(Optional) <b>Enabled Metrics</b> are the Auto Scaling Group metrics to enable on this group. Existing metrics are not modified.","aws.serverGroup.imdsv2":"(Recommended) <b>IMDSv2</b> helps mitigate AWS credential theft from the exploitation of SSRF vulnerabilities in web applications. All modern AWS SDKs support IMDSv2 and it should not be disabled unless you're using a legacy SDK.","aws.serverGroup.instanceMonitoring":"(Optional) <b>Instance Monitoring</b> whether to enable detailed monitoring of instances. Group metrics must be disabled to update an ASG with Instance Monitoring set to false.","aws.serverGroup.tags":"(Optional) <b>Tags</b> are propagated to the instances in this cluster.","aws.serverGroup.allImages":"Search for an image that does not match the name of your application.","aws.serverGroup.filterImages":"Select from a pre-filtered list of images matching the name of your application.","aws.serverGroup.traffic":'<p>Enables the "AddToLoadBalancer" scaling process, which is used by Spinnaker and discovery services to determine if the server group is enabled.</p>\n <p>Will be automatically enabled when any non "custom" deployment strategy is selected.</p>',"aws.securityGroup.vpc":'\n <p>The VPC to which this {{firewall}} will apply.</p>\n <p>If you wish to use VPC but are unsure which VPC to use, the most common one is "Main".</p>\n <p>If you do not wish to use VPC, select "None".</p>',"aws.securityGroup.name":"<p>The {{firewall}} name is formed by combining the application name, the <b>Stack</b> field, and the <b>Detail</b> field.</p>","aws.securityGroup.cross.account.ingress.help":"<p>Accounts that are excluded will not show up in this list</p>","aws.scalingPolicy.search.restricted":'<p>Resets dimensions to "AutoScalingGroupName: {name of the ASG}" and provides\n a simpler, combined input for the namespace and metric name fields.</p>',"aws.scalingPolicy.search.all":"\n <p>Allows you to edit the dimensions and namespace to find a specific metric for this alarm.</p>","aws.blockDeviceMappings.useSource":'\n <p>Spinnaker will use the block device mappings of the existing server group when deploying a new server group.</p>\n <p>In the event that there is no existing server group, the\n <a target="_blank" href="https://github.com/spinnaker/clouddriver/blob/master/clouddriver-aws/src/main/groovy/com/netflix/spinnaker/clouddriver/aws/deploy/InstanceTypeUtils.java">defaults</a>\n for the selected instance type will be used.</p>',"aws.blockDeviceMappings.useAMI":"<p>Spinnaker will use the block device mappings from the selected AMI when deploying a new server group.</p>","aws.blockDeviceMappings.useDefaults":'<p>Spinnaker will use the <a target="_blank" href="https://github.com/spinnaker/clouddriver/blob/master/clouddriver-aws/src/main/groovy/com/netflix/spinnaker/clouddriver/aws/deploy/InstanceTypeUtils.java">default block device mappings</a> for the selected instance type when deploying a new server group.</p>',"aws.targetGroup.protocol":"The protocol to use for routing traffic to the targets. Cannot be edited after being saved; if you want to use a different protocol, create a new target group, save the load balancer, move your targets, and then delete this target group.","aws.targetGroup.targetType":"Determines how targets are specified. Only set to ip if you need to attach individual ips. Cannot be edited after being saved; if you want to use a different target type, create a new target group, save the load balancer, move your targets, and then delete this target group.","aws.targetGroup.port":"The port on which the targets receive traffic. Cannot be edited after being saved; if you want to use a different port, create a new target group, save the load balancer, move your targets, and then delete this target group.","aws.targetGroup.attributes.deregistrationDelay":"The amount of time for the load balancer to wait before changing the state of a deregistering target from draining to unused. The range is 0-3600 seconds. The default value is 300 seconds.","aws.targetGroup.attributes.stickinessEnabled":" Indicates whether sticky sessions are enabled.","aws.targetGroup.attributes.deregistrationDelayConnectionTermination":"If enabled, your Network Load Balancer will terminate active connections when deregistration delay is reached.","aws.targetGroup.attributes.preserveClientIp":"If enabled, your Network Load Balancer will preserve client IP addresses to the target.","aws.targetGroup.attributes.stickinessType":"The type of sticky sessions. The only current possible value is <code>lb_cookie</code>.","aws.targetGroup.attributes.stickinessDuration":"The time period, in seconds, during which requests from a client should be routed to the same target. After this time period expires, the load balancer-generated cookie is considered stale. The range is 1 second to 1 week (604800 seconds). The default value is 1 day (86400 seconds).","aws.targetGroup.attributes.healthCheckPort.trafficPort":"The port the load balancer uses when performing health checks on targets. The default is <b>traffic-port</b>, which is the port on which each target receives traffic from the load balancer.","aws.targetGroup.healthCheckProtocol":"TCP health checks only support 10s and 30s intervals","aws.targetGroup.healthCheckTimeout":"Target groups with TCP or TLS protocol must have a 6s timeout for HTTP health checks or a 10s timeout for HTTPS/TLS health checks.","aws.targetGroup.nlbHealthcheckThreshold":"The healthy and unhealthy threshold for NLBs must be equal. This represents the number of successful and failed healthchecks required for healthy and unhealthy targets, respectively.","aws.serverGroup.capacityConstraint":"\n <p>Ensures that the capacity of this server group has not changed in the background (i.e. due to autoscaling activity).</p>\n <p>If the capacity has changed, this resize operation will be rejected.</p>","aws.tagImage.consideredStages":"Limit which previous stages will be considered when locating AMI's to tag. If left unchecked, AMI's generated by any upstream stage will be tagged.","aws.loadBalancer.redirect.host":"The hostname. This component is not percent-encoded. The hostname can contain <code>#{host}</code>.","aws.loadBalancer.redirect.path":'The absolute path, starting with the leading "/". This component is not percent-encoded. The path can contain <code>#{host}</code>, <code>#{path}</code>, and <code>#{port}</code>.',"aws.loadBalancer.redirect.port":"The port. You can specify a value from 1 to 65535 or <code>#{port}</code>.","aws.loadBalancer.redirect.protocol":"The protocol. You can specify HTTP, HTTPS, or <code>#{protocol}</code>. You can redirect HTTP to HTTP, HTTP to HTTPS, and HTTPS to HTTPS. You cannot redirect HTTPS to HTTP.","aws.loadBalancer.redirect.query":'The query parameters, URL-encoded when necessary, but not percent-encoded. Do not include the leading "?", as it is automatically added. You can specify any of the reserved keywords.',"aws.loadBalancer.redirect.statusCode":"The HTTP redirect code. The redirect is either permanent (HTTP 301) or temporary (HTTP 302).","aws.loadBalancer.redirect":'<p>A URI consists of the following components: protocol://hostname:port/path?query. You must modify at least one of the following components to avoid a redirect loop: protocol, hostname, port, or path. Any components that you do not modify retain their original values.\n\n <p>You can reuse URI components using the following reserved keywords:\n\n <ul><li>#{protocol}\n <li>#{host}\n <li>#{port}\n <li>#{path} (the leading "/" is removed)\n <li>#{query}\n </ul>\n <p>For example, you can change the path to "/new/#{path}", the hostname to "example.#{host}", or the query to "#{query}&value=xyz".',"aws.cloudformation.source":"\n <p>Where the template file content is read from.</p>\n <p>\n <b>text:</b> The template is supplied statically to the pipeline from the below text-box.\n </p>\n <p>\n <b>artifact:</b> The template is read from an artifact supplied/created upstream. The expected artifact must be referenced here, and will be bound at runtime.\n </p>\n ","aws.cloudformation.expectedArtifact":"The artifact that is to be applied to this stage. The artifact should represent a valid cloudformation template.","aws.function.name":"Enter a name that describes the purpose of your function. Function name will be prefixed with the application name.","aws.function.runtime":"Choose the language to use to write your function","aws.function.s3key":"The Amazon S3 key of the deployment package","aws.function.handler":"The name of the method within your code that Lambda calls to execute your function. The format includes the file name. It can also include namespaces and other qualifiers, depending on the runtime.","aws.function.s3bucket":"An Amazon S3 bucket in the same AWS Region as your function. The bucket can be in a different AWS account.","aws.function.execution.role":"Lambda will create an execution role with permission to upload logs to Amazon CloudWatch Logs. You can also choose an existing role that defines the permissions of your function.","aws.function.env.vars":"You can define environment variables as key-value pairs that are accessible from your function code. These are useful to store configuration settings without the need to change function code","aws.function.tags":"You can use tags to group and filter your functions. A tag consists of a case-sensitive key-value pair","aws.functionBasicSettings.memorySize":"Your function is allocated CPU proportional to the memory configured.","aws.functionBasicSettings.timeout":"The amount of time that Lambda allows a function to run before stopping it. The default is 3 seconds. The maximum allowed value is 900 seconds.","aws.function.publish":"Set to true to publish the first version of the function during creation.","aws.function.deadletterqueue":"A dead letter queue configuration that specifies the queue or topic where Lambda sends asynchronous events when they fail processing. (SNS or SQS)","aws.function.tracingConfig.mode":"The function's AWS X-Ray tracing configuration.","aws.function.kmsKeyArn":"The ARN of the AWS Key Management Service (AWS KMS) key that's used to encrypt your function's environment variables. If it's not provided, AWS Lambda uses a default service key.","aws.cloudformation.changeSet.options":"<p>Action to take when the created ChangeSet contains a replacement.</p>\n <p>\n <b>ask:</b> Execution will be put on hold asking for user feedback.\n </p>\n <p>\n <b>skip it:</b> ChangeSet will not be executed and stage will continue.\n </p>\n <p>\n <b>execute it</b> ChangeSet will be executed.\n </p>\n <p>\n <b>fail stage</b> ChangeSet will not be executed and the stage will fail.\n </p>"};Object.keys(nr).forEach(e=>x.register(e,nr[e]));class rr{findImages(e){return!e.q||e.q.length<3?Promise.resolve([{message:"Please enter at least 3 characters...",disabled:!0}]):T("/images/find").query(e).get().catch(()=>[])}getImage(e,t,a){return T("/images").path(a,t,e).query({provider:"aws"}).get().then(e=>e&&e.length?e[0]:null).catch(()=>null)}}const lr=({account:e,availabilityZone:t,instanceType:a,capacityType:n,launchTime:r,provider:l,region:i,serverGroup:s,showInstanceType:o})=>Mt.createElement(Mt.Fragment,null,Mt.createElement(D,{label:"Launched",value:r?B(r):"Unknown"}),Mt.createElement(D,{label:"In",value:Mt.createElement("div",null,Mt.createElement(A,{account:e}),t||"Unknown")}),o&&Mt.createElement(D,{label:"Type",value:a||"Unknown"}),o&&n&&Mt.createElement(D,{label:"Capacity Type",value:n||"Unknown"}),s&&Mt.createElement(D,{label:"Server Group",value:Mt.createElement("div",null,Mt.createElement(ja,{to:"^.serverGroup",params:{region:i,accountId:e,serverGroup:s,provider:l}},Mt.createElement("a",null,s)))})),ir=({instance:e})=>{const{imageId:t,serverGroup:a,subnetId:n,vpcId:r}=e;return Mt.createElement(G,{heading:"Instance Information",defaultExpanded:!0},Mt.createElement("dl",{className:"dl-horizontal dl-narrow"},Mt.createElement(lr,{account:e.account,availabilityZone:e.availabilityZone,instanceType:e.instanceType,capacityType:e.capacityType,launchTime:e.launchTime,provider:e.provider,region:e.region,serverGroup:e.serverGroup,showInstanceType:!0}),a&&Mt.createElement(D,{label:"VPC",value:Mt.createElement(Fn,{vpcId:r})}),n&&Mt.createElement(D,{label:"Subnet",value:Mt.createElement(F,{subnetId:n})}),t&&Mt.createElement(D,{label:"Image ID",value:t})))},sr=({instancePort:e,ipv6Addresses:t,permanentIps:a,privateDnsName:n,privateIpAddress:r,publicDnsName:l,publicIpAddress:i})=>{const s=e?`:${e}`:"";return zt.createElement(z,{className:"horizontal-when-filters-collapsed"},n&&zt.createElement(D,{label:"Private DNS Name",value:zt.createElement(M,{text:n,url:`http://${n}${s}`})}),l&&zt.createElement(D,{label:"Public DNS Name",value:zt.createElement(M,{text:l,url:`http://${l}${s}`})}),r&&zt.createElement(D,{label:"Private IP Address",value:zt.createElement(M,{text:r,url:`http://${r}${s}`})}),Boolean(null==a?void 0:a.length)&&zt.createElement(D,{label:"Permanent IP Address",value:a.map(e=>zt.createElement(M,{key:e,text:e,url:`http://${e}${s}`}))}),i&&zt.createElement(D,{label:"Public IP Address",value:zt.createElement(M,{text:i,url:`http://${i}${s}`})}),Boolean(null==t?void 0:t.length)&&zt.createElement(D,{label:"IPv6 Address"+(t.length>1?"es":""),value:t.map(e=>zt.createElement(M,{key:e.ip,text:e.ip,url:e.url}))}))},or=({instance:e})=>{const{account:t,region:a,provider:n,securityGroups:r,vpcId:l}=e,i=qt(r,["groupName"],["asc"]),s=R.get("Firewalls");return Mt.createElement(G,{heading:s,defaultExpanded:!0},Mt.createElement("ul",null,(i||[]).map(e=>Mt.createElement("li",{key:e.groupId},Mt.createElement(ja,{to:"^.firewallDetails",params:{name:e.groupName,accountId:t,region:a,vpcId:l,provider:n}},Mt.createElement("a",null,e.groupName," (",e.groupId,")"))))))},cr=({healthMetrics:e,healthState:t,metricTypes:a,customHealthUrl:n,privateIpAddress:r})=>{const l=a.includes("LoadBalancer"),i=a.includes("TargetGroup");return Mt.createElement(G,{heading:"Status",defaultExpanded:!0},!e.length&&Mt.createElement("p",null,"Starting"===t?"Starting":"No health metrics found for this instance"),Mt.createElement("dl",{className:"horizontal-when-filters-collapsed"},e.sort((e,t)=>e.type<t.type?-1:e.type>t.type?1:0).map(e=>Mt.createElement(Mt.Fragment,{key:`${e.type}-${e.description}`},Mt.createElement("dt",null,L(e.type)),Mt.createElement("dd",null,!a.includes(e.type)&&Mt.createElement("div",null,Mt.createElement(O,{value:"down"===e.state.toLowerCase()?e.description:"",placement:"left"},Mt.createElement("span",null,Mt.createElement("span",{className:`glyphicon glyphicon-${e.state}-triangle`}),Mt.createElement("span",null,L(e.state)))),Mt.createElement("span",{className:"pad-left small"},e.healthCheckUrl&&Mt.createElement("a",{target:"_blank",href:e.healthCheckUrl},"Health Check"),e.healthCheckUrl&&e.statusPageUrl&&Mt.createElement("span",null," | "),e.statusPageUrl&&Mt.createElement("a",{target:"_blank",href:e.statusPageUrl},"Status"),n&&e.type===n.type&&Mt.createElement("span",null," ","|"," ",Mt.createElement("a",{target:"_blank",href:n.href},n.text)))),l&&"LoadBalancer"===e.type&&(e.loadBalancers||[]).map(e=>Mt.createElement(U,{key:`lb-${e.name}`,loadBalancer:e})),i&&"TargetGroup"===e.type&&(e.targetGroups||[]).map(e=>Mt.createElement(U,{key:`tg-${e.name}`,loadBalancer:e,ipAddress:r})))))))},dr=({tags:e})=>{const t=e||[],a=qt(t,["key"],["asc"]);return Mt.createElement(G,{heading:"Tags",defaultExpanded:!0},!t.length&&Mt.createElement("div",null,"No tags associated with this server"),Boolean(t.length)&&a.map(e=>Mt.createElement(D,{key:e.key,label:e.key,value:e.value})))};class mr extends V{static deregisterInstancesFromTargetGroup(e,t,a,n){const r=super.buildMultiInstanceJob(e,n,"deregisterInstancesFromLoadBalancer");r.forEach(e=>e.targetGroupNames=a);const l=super.buildMultiInstanceDescriptor(r,"Deregister",`from ${a.join(" and ")}`);return H.executeTask({job:r,application:t,description:l})}static deregisterInstanceFromTargetGroup(e,t,a={}){return a.type="deregisterInstancesFromLoadBalancer",a.instanceIds=[e.id],a.targetGroupNames=e.targetGroups,a.region=e.region,a.credentials=e.account,a.cloudProvider=e.cloudProvider,H.executeTask({job:[a],application:t,description:`Deregister instance: ${e.id}`})}static registerInstancesWithTargetGroup(e,t,a,n){const r=super.buildMultiInstanceJob(e,n,"registerInstancesWithLoadBalancer");r.forEach(e=>e.targetGroupNames=a);const l=super.buildMultiInstanceDescriptor(r,"Register",`with ${a.join(" and ")}`);return H.executeTask({job:r,application:t,description:l})}static registerInstanceWithTargetGroup(e,t,a={}){return a.type="registerInstancesWithLoadBalancer",a.instanceIds=[e.id],a.targetGroupNames=e.targetGroups,a.region=e.region,a.credentials=e.account,a.cloudProvider=e.cloudProvider,H.executeTask({job:[a],application:t,description:`Register instance: ${e.id}`})}}const ur=e=>{const t=e.map(e=>e.targetGroups);return Wt(t)},pr=(e,t,a)=>{e.forEach(e=>{"TargetGroup"===e.type&&e.targetGroups.forEach(e=>{var n,r,l;const i=null!=(n=t.find(t=>t.name===e.name&&t.account===a))?n:{},s="traffic-port"===i.healthCheckPort||jt(i.healthCheckPort)?i.port:i.healthCheckPort;e.healthCheckProtocol=null==(r=i.healthCheckProtocol)?void 0:r.toLowerCase(),e.healthCheckPath=`:${s}${null!=(l=i.healthCheckPath)?l:""}`})})};function hr(e,t,a,n){var r;e.isStandalone&&(t.health=a.health);const l=(t.health||[]).filter(e=>"Amazon"!==e.type||"Unknown"!==e.state);if(!e.isStandalone){const t=ur(((null==(r=e.loadBalancers)?void 0:r.data)||[]).filter(e=>"aws"===e.cloudProvider));pr(l,t,n)}return(a.health||[]).forEach(e=>{const t=l.find(t=>t.type===e.type);t&&Object.assign(t,{...e,...t})}),l}async function gr({app:t,instance:a}){var n,r;const l=function(e,t){return e.serverGroups?function(e,t){var a,n;const r=(null==(a=e.serverGroups)?void 0:a.data)||[];for(const e of r){const a=null==(n=e.instances)?void 0:n.find(e=>e.id===t);if(a)return{account:e.account,extraData:{serverGroup:e.name,vpcId:e.vpcId},loadBalancers:e.loadBalancers,region:e.region,serverGroupDisabled:e.isDisabled,summary:a,targetGroups:e.targetGroups,vpcId:e.vpcId}}}(e,t.instanceId)||function(e,t){var a,n,r;const l=(null==(a=e.loadBalancers)?void 0:a.data)||[];for(const e of l){const a=null==(n=e.instances)?void 0:n.find(e=>e.id===t);if(a)return{account:e.account,loadBalancers:[e.name],region:e.region,summary:a,vpcId:e.vpcId};const l=null==(r=e.targetGroups)?void 0:r.find(e=>{var a;return null==(a=e.instances)?void 0:a.some(e=>e.id===t)});if(l){const a=l.instances.find(e=>e.id===t);return{account:e.account,region:e.region,summary:a,targetGroups:[l.name],vpcId:e.vpcId}}}}(e,t.instanceId)||function(e,t){var a,n,r;const l=(null==(a=e.loadBalancers)?void 0:a.data)||[];for(const e of l){const a=(e.serverGroups||[]).filter(e=>e.isDisabled);for(const r of a){const a=null==(n=r.instances)?void 0:n.find(e=>e.id===t);if(a)return{account:e.account,loadBalancers:[e.name],region:e.region,summary:a,vpcId:e.vpcId}}const l=null==(r=e.targetGroups)?void 0:r.find(e=>(e.serverGroups||[]).some(e=>{var a;return e.isDisabled&&(null==(a=e.instances)?void 0:a.some(e=>e.id===t))}));if(l){const a=l.serverGroups.find(e=>{var a;return null==(a=e.instances)?void 0:a.some(e=>e.id===t)}).instances.find(e=>e.id===t);return{account:e.account,loadBalancers:[e.name],region:e.region,summary:a,vpcId:e.vpcId}}}}(e,t.instanceId):{account:t.account,loadBalancers:[],region:t.region,summary:{id:t.instanceId}}}(t,a);if(!(null==l?void 0:l.summary)||!l.account||!l.region)return{instanceIdNotFound:a.instanceId};q.addExtraDataToLatest("instances",{...l.extraData,account:l.account,region:l.region});const i=await K.getInstanceDetails(l.account,l.region,a.instanceId),s={...l.summary,...i,account:l.account,baseIpAddress:i.publicDnsName||i.privateIpAddress,healthMetrics:hr(t,l.summary,i,l.account),instanceId:i.instanceId||l.summary.instanceId||l.summary.id||a.instanceId,loadBalancers:l.loadBalancers,region:l.region,serverGroupDisabled:l.serverGroupDisabled,targetGroups:l.targetGroups,vpcId:l.vpcId};if((null==(n=l.extraData)?void 0:n.serverGroup)&&(s.serverGroup=l.extraData.serverGroup),s.networkInterfaces){const a=(null==(r=t.attributes)?void 0:r.instancePort)||e.defaultInstancePort||80;s.ipv6Addresses=Zt(s.networkInterfaces,e=>(e.ipv6Addresses||[]).map(e=>({ip:e.ipv6Address,url:`http://${e.ipv6Address}:${a}`}))),s.permanentIps=s.networkInterfaces.filter(e=>{var t;return!1===(null==(t=e.attachment)?void 0:t.deleteOnTermination)}).map(e=>e.privateIpAddress)}return s}function vr(e,t,a){return(e.health||[]).some(e=>e.type===t&&e.state===a)}function fr({app:e,instance:t,stateService:a}){if(!hn.adHocInfraWritesEnabled)return null;const n=()=>{a.includes("**.instanceDetails",{instanceId:t.instanceId})&&a.go("^")},r=(a,r,l,i,s=!1,o={})=>{w.confirm({header:a,buttonText:r,account:t.account,taskMonitorConfig:{application:e,title:l,onTaskComplete:s?n:void 0},submitMethod:i,...o})},l=(t.loadBalancers||[]).join(" and "),i=(t.targetGroups||[]).join(" and "),s=[{label:"Reboot",triggerAction:()=>{var a;return r(`Really reboot ${t.instanceId}?`,`Reboot ${t.instanceId}`,`Rebooting ${t.instanceId}`,(a={})=>{var n,r;return(null==(n=e.attributes)?void 0:n.platformHealthOnlyShowOverride)&&(null==(r=e.attributes)?void 0:r.platformHealthOnly)&&(a.interestingHealthProviderNames=["Amazon"]),mr.rebootInstance(t,e,a)},!1,{platformHealthOnlyShowOverride:null==(a=e.attributes)?void 0:a.platformHealthOnlyShowOverride,platformHealthType:"Amazon"})}},{label:"Terminate",triggerAction:()=>r(`Really terminate ${t.instanceId}?`,`Terminate ${t.instanceId}`,`Terminating ${t.instanceId}`,()=>mr.terminateInstance(t,e),!0)}];return t.serverGroup&&s.push({label:"Terminate and Shrink Server Group",triggerAction:()=>r(`Really terminate ${t.instanceId} and shrink ${t.serverGroup}?`,`Terminate ${t.instanceId} and shrink ${t.serverGroup}`,`Terminating ${t.instanceId} and shrinking server group`,()=>mr.terminateInstanceAndShrinkServerGroup(t,e),!0)}),vr(t,"Discovery","OutOfService")&&!t.serverGroupDisabled&&s.unshift({label:"Enable In Discovery",triggerAction:()=>r(`Really enable ${t.instanceId} in discovery?`,`Enable ${t.instanceId}`,`Enabling ${t.instanceId} in discovery`,()=>mr.enableInstanceInDiscovery(t,e))}),(vr(t,"Discovery","Up")||vr(t,"Discovery","Down"))&&s.unshift({label:"Disable in Discovery",triggerAction:()=>r(`Really disable ${t.instanceId} in discovery?`,`Disable ${t.instanceId}`,`Disabling ${t.instanceId} in discovery`,()=>mr.disableInstanceInDiscovery(t,e))}),function(e){var t;return!!(null==(t=e.loadBalancers)?void 0:t.length)&&(vr(e,"LoadBalancer","OutOfService")||!(e.health||[]).some(e=>"LoadBalancer"===e.type))}(t)&&s.unshift({label:"Register with Load Balancer",triggerAction:()=>r(`Really register ${t.instanceId} with ${l}?`,`Register ${t.instanceId}`,`Registering ${t.instanceId} with ${l}`,()=>mr.registerInstanceWithLoadBalancer(t,e))}),(t.health||[]).some(e=>"LoadBalancer"===e.type)&&s.unshift({label:"Deregister from Load Balancer",triggerAction:()=>r(`Really deregister ${t.instanceId} from ${l}?`,`Deregister ${t.instanceId}`,`Deregistering ${t.instanceId} from ${l}`,()=>mr.deregisterInstanceFromLoadBalancer(t,e))}),function(e){var t;return!!(null==(t=e.targetGroups)?void 0:t.length)&&(vr(e,"TargetGroup","OutOfService")||!(e.health||[]).some(e=>"TargetGroup"===e.type))}(t)&&s.unshift({label:"Register with Target Group",triggerAction:()=>r(`Really register ${t.instanceId} with ${i}?`,`Register ${t.instanceId}`,`Registering ${t.instanceId} with ${i}`,()=>mr.registerInstanceWithTargetGroup(t,e))}),function(e){return(e.health||[]).some(e=>"TargetGroup"===e.type&&"OutOfService"!==e.state)}(t)&&s.unshift({label:"Deregister from Target Group",triggerAction:()=>r(`Really deregister ${t.instanceId} from ${i}?`,`Deregister ${t.instanceId}`,`Deregistering ${t.instanceId} from ${i}`,()=>mr.deregisterInstanceFromTargetGroup(t,e))}),Mt.createElement(Y,{actions:s})}class Er extends Mt.Component{constructor(){super(...arguments),this.state={instance:this.props.initialInstance,loading:!this.props.initialInstance},this.activeRequestId=0,this.isUnmounted=!1,this.retrieveInstance=(e=!1)=>{const t=++this.activeRequestId;this.setState(e?{instance:void 0,loading:!0}:{loading:!0}),gr({app:this.props.app,instance:this.getInstanceParams()}).then(e=>{this.isUnmounted||t!==this.activeRequestId||this.setState({instance:e,loading:!1})},()=>{this.isUnmounted||t!==this.activeRequestId||(this.props.app.isStandalone?(q.removeLastItem("instances"),this.setState({instance:{instanceIdNotFound:this.getInstanceParams().instanceId},loading:!1})):this.closeDetails())})}}componentDidMount(){if(this.props.initialInstance)return;const{app:e}=this.props;(e.isStandalone?Promise.resolve():Promise.all([e.serverGroups.ready(),e.loadBalancers.ready()])).then(()=>{var t;this.isUnmounted||(this.retrieveInstance(),!e.isStandalone&&(null==(t=e.serverGroups)?void 0:t.onRefresh)&&(this.unsubscribeFromRefresh=e.serverGroups.onRefresh(this.retrieveInstance)))}).catch(()=>{this.isUnmounted||this.closeDetails()})}closeDetails(){this.props.stateService.go("^",{allowModalToStayOpen:!0},{location:"replace"})}componentDidUpdate(e){const t=this.getInstanceParams(e),a=this.getInstanceParams();t.account===a.account&&t.instanceId===a.instanceId&&t.region===a.region||this.retrieveInstance(!0)}componentWillUnmount(){this.isUnmounted=!0,this.unsubscribeFromRefresh&&this.unsubscribeFromRefresh()}getInstanceParams(e=this.props){const t=e.instance||e.$stateParams||e.stateParams;return{account:null==t?void 0:t.account,instanceId:null==t?void 0:t.instanceId,provider:null==t?void 0:t.provider,region:null==t?void 0:t.region}}render(){var t;const{app:a,environment:n,moniker:r}=this.props,{instance:l,loading:i}=this.state,s=(null==l?void 0:l.instanceId)||(null==l?void 0:l.instanceIdNotFound)||this.getInstanceParams().instanceId,o=(null==(t=a.attributes)?void 0:t.instancePort)||e.defaultInstancePort||80;return Mt.createElement("div",{className:"details-panel"},Mt.createElement("div",{className:"header"},Mt.createElement(W,{cloudProvider:"aws",healthState:null==l?void 0:l.healthState,instanceId:s,loading:i,standalone:a.isStandalone}),!i&&l&&!l.instanceIdNotFound&&l.placement&&Mt.createElement("div",{className:"actions"},Mt.createElement(fr,{app:a,instance:l,router:this.props.router,stateParams:this.props.stateParams,stateService:this.props.stateService}),Mt.createElement(j,{insights:l.insightActions,instance:l}))),!i&&l&&!l.instanceIdNotFound&&Mt.createElement("div",{className:"content"},Mt.createElement(ir,{instance:l}),Mt.createElement(cr,{healthMetrics:l.healthMetrics||[],healthState:l.healthState,metricTypes:["LoadBalancer","TargetGroup"],privateIpAddress:l.privateIpAddress}),Mt.createElement(G,{heading:"DNS"},Mt.createElement(sr,{instancePort:String(l.instancePort||o),ipv6Addresses:l.ipv6Addresses||[],permanentIps:l.permanentIps||[],privateDnsName:l.privateDnsName||"",privateIpAddress:l.privateIpAddress||"",publicDnsName:l.publicDnsName||"",publicIpAddress:l.publicIpAddress||""})),Mt.createElement(or,{instance:l}),Mt.createElement(dr,{tags:l.tags||[]}),l.baseIpAddress&&Mt.createElement(G,{heading:"Console Output"},Mt.createElement("ul",null,Mt.createElement("li",null,Mt.createElement(Z,{instance:l})))),Mt.createElement(_,{address:l.baseIpAddress,application:a,instance:l,moniker:r,environment:n})),!i&&(null==l?void 0:l.instanceIdNotFound)&&Mt.createElement("div",{className:"content"},Mt.createElement("div",{className:"content-section"},Mt.createElement("div",{className:"content-body text-center"},Mt.createElement("h3",null,"Instance not found.")))))}}const yr=N(fr),br=N(Er);function Cr(e,t){void 0===t&&(t={});var a=t.insertAt;if(e&&"undefined"!=typeof document){var n=document.head||document.getElementsByTagName("head")[0],r=document.createElement("style");r.type="text/css","top"===a&&n.firstChild?n.insertBefore(r,n.firstChild):n.appendChild(r),r.styleSheet?r.styleSheet.cssText=e:r.appendChild(document.createTextNode(e))}}Cr(".target-group-title {\n color: var(--color-mineshaft);\n font-weight: 600;\n font-size: 14px;\n padding-right: 15px;\n text-transform: uppercase;\n padding-left: 10px;\n}\n.cluster-container .target-group-container {\n margin-top: 3px;\n}\n.cluster-container .target-group-container:not(:first-child) {\n padding-top: 5px;\n}\n.target-group-container .target-group-header {\n padding: 4px 0;\n}\n.target-group-container .server-group-title {\n padding-top: 0;\n}\n.target-group-container .server-group-title .clickable-row {\n margin-top: -1px;\n}\n.target-group-container .no-margin-y {\n margin-top: -1px !important;\n margin-bottom: 0 !important;\n}\n.target-group-container > div > .text-right {\n padding-right: 10px;\n font-weight: 600;\n}\n.listener-targets {\n display: inline-block;\n vertical-align: top;\n}\n");class Nr extends Mt.Component{render(){const{targetGroup:e,showInstances:t,showServerGroups:a,loadBalancer:n}=this.props,r=qt(e.serverGroups,["isDisabled","name"],["asc","desc"]).map(e=>Mt.createElement(X,{key:e.name,account:e.account,region:e.region,serverGroup:e,showInstances:t})),l={loadBalancerName:n.name,region:e.region,accountId:e.account,name:e.name,vpcId:e.vpcId,provider:e.cloudProvider};return Mt.createElement("div",{className:"target-group-container container-fluid no-padding"},Mt.createElement(Za,{class:"active"},Mt.createElement(ja,{to:".targetGroupDetails",params:l},Mt.createElement("div",{className:"clickable clickable-row row no-margin-y target-group-header"},Mt.createElement("div",{className:"col-md-8 target-group-title"},e.name),Mt.createElement("div",{className:"col-md-4 text-right"},Mt.createElement(J,{container:e.instanceCounts}))))),a&&r,!a&&t&&Mt.createElement(Q,{serverGroups:e.serverGroups,instances:e.instances}))}}class wr extends Mt.Component{shouldComponentUpdate(e){return e.showInstances!==this.props.showInstances||e.showServerGroups!==this.props.showServerGroups||e.loadBalancer!==this.props.loadBalancer||(()=>!_t((e.serverGroups||[]).map(e=>e.name),(this.props.serverGroups||[]).map(e=>e.name)))()||(()=>!_t((e.loadBalancer.targetGroups||[]).map(e=>e.name),(this.props.loadBalancer.targetGroups||[]).map(e=>e.name)))()}render(){const{loadBalancer:e,showInstances:t,showServerGroups:a}=this.props;if("classic"!==e.loadBalancerType){const n=e.targetGroups.map(n=>Mt.createElement(Nr,{key:n.name,loadBalancer:e,targetGroup:n,showInstances:t,showServerGroups:a}));return Mt.createElement("div",{className:"cluster-container"},n)}return Mt.createElement(ee,{...this.props})}}class Sr{static buildTargetGroup(e,t){if(!e)return null;const a={name:e.name,vpcId:e.vpcId,cloudProvider:e.cloudProvider,account:e.account,region:e.region,loadBalancerNames:e.loadBalancerNames,instanceCounts:{up:0,down:0,succeeded:0,failed:0,outOfService:0,unknown:0,starting:0}};return t.instances.forEach(t=>{const n=t.health.find(e=>"TargetGroup"===e.type);if(n){const t=n.targetGroups.find(t=>t.name===e.name);if(void 0!==t&&void 0!==t.healthState){const e=t.healthState.toLowerCase();void 0!==a.instanceCounts[e]&&a.instanceCounts[e]++}}}),a}static populateTargetGroups(e,t){return Promise.all([i.getAccountDetails(t.account),e.getDataSource("loadBalancers").ready()]).then(a=>{const n=a[0]&&a[0].awsAccount||t.account,r=e.loadBalancers.data.filter(e=>"application"===e.loadBalancerType||"network"===e.loadBalancerType);return t.targetGroups.map(e=>{const a=Wt(r.map(e=>e.targetGroups||[])).find(a=>a.name===e&&a.region===t.region&&a.account===n);return this.buildTargetGroup(a,t)}).filter(e=>e)})}}class kr extends Mt.Component{constructor(){super(...arguments),this.onClick=e=>{this.props.onItemClick(this.props.loadBalancer),e.nativeEvent.preventDefault()}}render(){return Mt.createElement("a",{onClick:this.onClick},Mt.createElement("span",{className:"name"},this.props.loadBalancer.name),Mt.createElement(J,{container:this.props.loadBalancer.instanceCounts}))}}class Tr extends Mt.Component{constructor(){super(...arguments),this.onClick=e=>{this.props.onItemClick(this.props.loadBalancer),e.nativeEvent.preventDefault()}}render(){return Mt.createElement(O,{value:`${this.props.label||"Load Balancer"}: ${this.props.loadBalancer.name}`},Mt.createElement("button",{className:"btn btn-link no-padding",onClick:this.onClick},Mt.createElement("span",{className:"badge badge-counter"},Mt.createElement("span",{className:"icon"},Mt.createElement("i",{className:"fa icon-sitemap"})))))}}class Ir extends Mt.Component{constructor(e){super(e),this.mounted=!1,this.showLoadBalancerDetails=e=>{const{stateService:t}=this.props,a=this.props.serverGroup;te.log({category:"Cluster Pod",action:"Load Load Balancer Details (multiple menu)"});const n=t.current.name.endsWith(".clusters")?".loadBalancerDetails":"^.loadBalancerDetails";t.go(n,{region:a.region,accountId:a.account,name:e.name,provider:a.type})},this.showTargetGroupDetails=e=>{const{stateService:t}=this.props;te.log({category:"Cluster Pod",action:"Load Target Group Details (multiple menu)"});const a=t.current.name.endsWith(".clusters")?".targetGroupDetails":"^.targetGroupDetails";t.go(a,{region:e.region,accountId:e.account,name:e.name,provider:"aws",loadBalancerName:e.loadBalancerNames[0]})},this.handleShowPopover=()=>{te.log({category:"Cluster Pod",action:"Show Load Balancers Menu"})},this.handleClick=e=>{e.preventDefault(),e.stopPropagation()},this.state={loadBalancers:[],targetGroups:[],isLoading:!0}}componentDidMount(){this.mounted=!0,this.loadBalancersRefreshUnsubscribe=this.props.application.getDataSource("loadBalancers").onRefresh(()=>{this.forceUpdate()}),ae.populateLoadBalancers(this.props.application,this.props.serverGroup).then(e=>{this.mounted&&this.setState({loadBalancers:e,isLoading:!1})}),Sr.populateTargetGroups(this.props.application,this.props.serverGroup).then(e=>{this.mounted&&this.setState({targetGroups:e})})}componentWillUnmount(){this.mounted=!1,this.loadBalancersRefreshUnsubscribe()}render(){const{loadBalancers:e,targetGroups:t,isLoading:a}=this.state,n=t&&t.length||0,r=e&&e.length||0,l=n+r;if(!l)return a?Mt.createElement(ne,{size:"nano"}):null;const i="load-balancers-tag "+(l>1?"overflowing":""),s=Mt.createElement("div",{className:"menu-load-balancers"},r>0&&Mt.createElement("div",{className:"menu-load-balancers-header"},"Load Balancers"),Kt(e,"name").map(e=>Mt.createElement(kr,{key:e.name,loadBalancer:e,onItemClick:this.showLoadBalancerDetails})),n>0&&Mt.createElement("div",{className:"menu-load-balancers-header"},"Target Groups"),Kt(t,"name").map(e=>Mt.createElement(kr,{key:e.name,loadBalancer:e,onItemClick:this.showTargetGroupDetails})));return Mt.createElement("span",{className:i},l>1&&Mt.createElement(re,{delayShow:100,delayHide:150,onShow:this.handleShowPopover,placement:"bottom",template:s,hOffsetPercent:"80%",container:this.props.container,className:"no-padding menu-load-balancers"},Mt.createElement("button",{onClick:this.handleClick,className:"btn btn-link btn-multiple-load-balancers clearfix no-padding"},Mt.createElement("span",{className:"badge badge-counter"},Mt.createElement("span",{className:"icon"},Mt.createElement("i",{className:"fa icon-sitemap"}))," ",l))),1===e.length&&0===t.length&&Mt.createElement("span",{className:"btn-load-balancer"},Mt.createElement(Tr,{key:e[0].name,label:"Load Balancer",loadBalancer:e[0],onItemClick:this.showLoadBalancerDetails})),1===t.length&&0===e.length&&Mt.createElement("span",{className:"btn-load-balancer"},Mt.createElement(Tr,{key:t[0].name,label:"Target Group",loadBalancer:t[0],onItemClick:this.showTargetGroupDetails})))}}const Pr=N(Ir);class Ar{updateHealthCounts(e){const t=e.instances;if(e.instanceCounts={up:t.filter(e=>"InService"===e.health[0].state).length,down:t.filter(e=>"Down"===e.healthState).length,outOfService:t.filter(e=>"OutOfService"===e.healthState).length,starting:void 0,succeeded:void 0,failed:void 0,unknown:void 0},e.serverGroups){const t=Wt(e.serverGroups.map(e=>e.instances));e.instanceCounts.up=t.filter(e=>"InService"===e.health[0].state).length,e.instanceCounts.down=t.filter(e=>"Down"===e.healthState).length,e.instanceCounts.outOfService=t.filter(e=>"OutOfService"===e.healthState).length}}transformInstance(e,t,a,n){const r=e.health||{};"healthy"===r.state&&(r.state="InService"),e.provider=t,e.account=a,e.region=n,e.healthState=r.state?"InService"===r.state?"Up":"Down":"OutOfService",e.health=[r]}addVpcNameToContainer(e){return t=>{const a=t.find(t=>t.id===e.vpcId);return e.vpcName=a?a.name:"",e}}normalizeServerGroups(e,t,a,n){e.forEach(e=>{e.account=e.account||t.account,e.region=e.region||t.region,e.cloudProvider=e.cloudProvider||t.cloudProvider,e.detachedInstances?(e.detachedInstances=e.detachedInstances.map(e=>({id:e})),e.instances=e.instances.concat(e.detachedInstances)):e.detachedInstances=[],e.instances.forEach(e=>{this.transformInstance(e,t.type,t.account,t.region),e[a]=[t.name],e.health.type=n}),this.updateHealthCounts(e)})}normalizeTargetGroup(e){this.normalizeServerGroups(e.serverGroups,e,"targetGroups","TargetGroup");const t=Yt(e.serverGroups,{isDisabled:!1});return e.provider=e.type,e.instances=Xt(t).map("instances").flatten().value(),e.detachedInstances=Xt(t).map("detachedInstances").flatten().value(),this.updateHealthCounts(e),Promise.all([Dn.listVpcs(),i.listAllAccounts()]).then(([t,a])=>{const n=this.addVpcNameToContainer(e)(t);return n.serverGroups=n.serverGroups.map(e=>{const t=a.find(t=>t.name===e.account),n=t&&t.cloudProvider||e.cloudProvider;return e.cloudProvider=n,e.instances.forEach(e=>{e.cloudProvider=n,e.provider=n}),{...e,cloudProvider:n}}),n})}normalizeActions(e){if("application"===e.loadBalancerType){e.listeners.forEach(e=>{e.defaultActions.sort((e,t)=>e.order-t.order),e.rules.forEach(e=>e.actions.sort((e,t)=>e.order-t.order))})}}normalizeLoadBalancer(e){this.normalizeServerGroups(e.serverGroups,e,"loadBalancers","LoadBalancer");let t=e.serverGroups;if(e.targetGroups){const a=e;a.targetGroups.forEach(e=>this.normalizeTargetGroup(e)),t=Wt(Jt(a.targetGroups,"serverGroups"))}e.loadBalancerType=e.loadBalancerType||"classic",e.provider=e.type,this.normalizeActions(e);const a=Yt(t,{isDisabled:!1});return e.instances=Xt(a).map("instances").flatten().value(),e.detachedInstances=Xt(a).map("detachedInstances").flatten().value(),this.updateHealthCounts(e),Dn.listVpcs().then(t=>this.addVpcNameToContainer(e)(t))}static convertClassicLoadBalancerForEditing(e){const t={availabilityZones:void 0,isInternal:e.isInternal,region:e.region,cloudProvider:e.cloudProvider,credentials:e.credentials||e.account,listeners:e.listeners,loadBalancerType:"classic",name:e.name,regionZones:e.availabilityZones,securityGroups:e.securityGroups,vpcId:e.vpcId,healthCheck:void 0,healthTimeout:e.healthTimeout,healthInterval:e.healthInterval,healthyThreshold:e.healthyThreshold,unhealthyThreshold:e.unhealthyThreshold,healthCheckProtocol:e.healthCheckProtocol,healthCheckPort:e.healthCheckPort,healthCheckPath:e.healthCheckPath,idleTimeout:e.idleTimeout||60,subnetType:e.subnetType};if(e.elb){const a=e.elb;if(t.securityGroups=a.securityGroups,t.vpcId=a.vpcid||a.vpcId,a.listenerDescriptions&&(t.listeners=a.listenerDescriptions.map(e=>{const t=e.listener;if(t.sslcertificateId){const e=t.sslcertificateId.split("/");t.sslcertificateId=e[1],t.sslCertificateType=e[0].split(":")[2]}return{internalProtocol:t.instanceProtocol,internalPort:t.instancePort,externalProtocol:t.protocol,externalPort:t.loadBalancerPort,sslCertificateId:t.sslcertificateId,sslCertificateName:t.sslcertificateId,sslCertificateType:t.sslCertificateType,policyNames:e.policyNames}})),a.healthCheck&&a.healthCheck.target){t.healthTimeout=a.healthCheck.timeout,t.healthInterval=a.healthCheck.interval,t.healthyThreshold=a.healthCheck.healthyThreshold,t.unhealthyThreshold=a.healthCheck.unhealthyThreshold;const e=a.healthCheck.target,n=e.indexOf(":");let r=e.indexOf("/");if(-1===r&&(r=e.length),-1!==n){t.healthCheckProtocol=e.substring(0,n);const a=Number(e.substring(n+1,r));t.healthCheckPath=e.substring(r),isNaN(a)||(t.healthCheckPort=a)}}}return t}static convertApplicationLoadBalancerForEditing(e){const t=le.parseLoadBalancerName(e.name).application,a={availabilityZones:void 0,isInternal:e.isInternal,region:e.region,loadBalancerType:"application",cloudProvider:e.cloudProvider,credentials:e.account||e.credentials,listeners:[],targetGroups:[],name:e.name,regionZones:e.availabilityZones,securityGroups:[],subnetType:e.subnetType,vpcId:void 0,idleTimeout:e.idleTimeout||60,deletionProtection:e.deletionProtection||!1,ipAddressType:e.ipAddressType||"ipv4",dualstack:"dualstack"===e.ipAddressType};if(e.elb){const n=e.elb;a.securityGroups=n.securityGroups,a.vpcId=n.vpcid||n.vpcId,n.listeners&&(a.listeners=n.listeners.map(e=>{const a=[];return e.certificates&&e.certificates.forEach(e=>{const t=e.certificateArn.split(":"),n=t[5].split("/");a.push({certificateArn:e.certificateArn,type:t[2],name:n[1]})}),(e.defaultActions||[]).forEach(e=>{e.targetGroupName&&(e.targetGroupName=e.targetGroupName.replace(`${t}-`,"")),e.redirectActionConfig=e.redirectConfig}),e.rules=(e.rules||[]).filter(e=>!e.default),e.rules.forEach(e=>{(e.actions||[]).forEach(e=>{e.targetGroupName&&(e.targetGroupName=e.targetGroupName.replace(`${t}-`,"")),e.redirectActionConfig=e.redirectConfig}),(e.conditions||[]).forEach(e=>{"http-request-method"===e.field&&(e.values=e.httpRequestMethodConfig.values)}),e.conditions=e.conditions||[]}),e.rules.sort((e,t)=>e.priority-t.priority),{protocol:e.protocol,port:e.port,defaultActions:e.defaultActions,certificates:a,rules:e.rules||[],sslPolicy:e.sslPolicy}})),n.targetGroups&&(a.targetGroups=n.targetGroups.map(e=>({name:e.targetGroupName.replace(`${t}-`,""),protocol:e.protocol,port:e.port,targetType:e.targetType,healthCheckProtocol:e.healthCheckProtocol,healthCheckPort:e.healthCheckPort,healthCheckPath:e.healthCheckPath,healthCheckTimeout:e.healthCheckTimeoutSeconds,healthCheckInterval:e.healthCheckIntervalSeconds,healthyThreshold:e.healthyThresholdCount,unhealthyThreshold:e.unhealthyThresholdCount,attributes:{deregistrationDelay:Number(e.attributes["deregistration_delay.timeout_seconds"]),stickinessEnabled:"true"===e.attributes["stickiness.enabled"],stickinessType:e.attributes["stickiness.type"],stickinessDuration:Number(e.attributes["stickiness.lb_cookie.duration_seconds"]),multiValueHeadersEnabled:"true"===e.attributes["lambda.multi_value_headers.enabled"]}})))}return a}static convertNetworkLoadBalancerForEditing(e){const t=le.parseLoadBalancerName(e.name).application,a={availabilityZones:void 0,isInternal:e.isInternal,region:e.region,loadBalancerType:"network",cloudProvider:e.cloudProvider,credentials:e.account||e.credentials,listeners:[],targetGroups:[],name:e.name,regionZones:e.availabilityZones,securityGroups:[],subnetType:e.subnetType,vpcId:void 0,deletionProtection:e.deletionProtection,loadBalancingCrossZone:e.loadBalancingCrossZone,ipAddressType:e.ipAddressType||"ipv4",dualstack:"dualstack"===e.ipAddressType};if(e.elb){const n=e.elb;a.securityGroups=n.securityGroups,a.vpcId=n.vpcid||n.vpcId,n.listeners&&(a.listeners=n.listeners.map(e=>{const a=[];return e.certificates&&e.certificates.forEach(e=>{const t=e.certificateArn.split(":"),n=t[5].split("/");a.push({certificateArn:e.certificateArn,type:t[2],name:n[1]})}),(e.defaultActions||[]).forEach(e=>{e.targetGroupName&&(e.targetGroupName=e.targetGroupName.replace(`${t}-`,""))}),e.rules=(e.rules||[]).filter(e=>!e.default),e.rules.forEach(e=>{(e.actions||[]).forEach(e=>{e.targetGroupName&&(e.targetGroupName=e.targetGroupName.replace(`${t}-`,""))}),e.conditions=e.conditions||[]}),e.rules.sort((e,t)=>e.priority-t.priority),{protocol:e.protocol,port:e.port,defaultActions:e.defaultActions,certificates:a,rules:e.rules||[],sslPolicy:e.sslPolicy}})),n.targetGroups&&(a.targetGroups=n.targetGroups.map(e=>({name:e.targetGroupName.replace(`${t}-`,""),protocol:e.protocol,port:e.port,targetType:e.targetType,healthCheckProtocol:e.healthCheckProtocol,healthCheckPort:e.healthCheckPort,healthCheckTimeout:e.healthCheckTimeoutSeconds,healthCheckInterval:e.healthCheckIntervalSeconds,healthyThreshold:e.healthyThresholdCount,unhealthyThreshold:e.unhealthyThresholdCount,healthCheckPath:e.healthCheckPath,attributes:{deregistrationDelay:Number(e.attributes["deregistration_delay.timeout_seconds"]),deregistrationDelayConnectionTermination:Boolean("true"===e.attributes["deregistration_delay.connection_termination.enabled"]),preserveClientIp:Boolean("true"===e.attributes["preserve_client_ip.enabled"])}})))}return a}static constructNewClassicLoadBalancerTemplate(e){return{availabilityZones:void 0,name:"",stack:"",detail:"",loadBalancerType:"classic",isInternal:!1,cloudProvider:"aws",credentials:e.defaultCredentials.aws||hn.defaults.account,region:e.defaultRegions.aws||hn.defaults.region,vpcId:null,subnetType:hn.defaults.subnetType,healthCheck:void 0,healthCheckProtocol:"HTTP",healthCheckPort:7001,healthCheckPath:"/healthcheck",healthTimeout:5,healthInterval:10,healthyThreshold:10,unhealthyThreshold:2,idleTimeout:60,regionZones:[],securityGroups:[],listeners:[{externalPort:80,externalProtocol:"HTTP",internalPort:7001,internalProtocol:"HTTP"}]}}static constructNewApplicationLoadBalancerTemplate(t){const a="targetgroup";return{name:"",availabilityZones:void 0,stack:"",detail:"",loadBalancerType:"application",ipAddressType:"ipv4",dualstack:!1,isInternal:!1,cloudProvider:"aws",credentials:t.defaultCredentials.aws||hn.defaults.account,region:t.defaultRegions.aws||hn.defaults.region,vpcId:null,subnetType:hn.defaults.subnetType,idleTimeout:60,deletionProtection:!1,targetGroups:[{name:a,protocol:"HTTP",port:t.attributes.instancePort||e.defaultInstancePort,targetType:"instance",healthCheckProtocol:"HTTP",healthCheckPort:"traffic-port",healthCheckPath:"/healthcheck",healthCheckTimeout:5,healthCheckInterval:10,healthyThreshold:10,unhealthyThreshold:2,attributes:{deregistrationDelay:300,stickinessEnabled:!1,stickinessType:"lb_cookie",stickinessDuration:8400,multiValueHeadersEnabled:!1}}],regionZones:[],securityGroups:[],listeners:[{certificates:[],protocol:"HTTP",port:80,defaultActions:[{type:"forward",targetGroupName:a}],rules:[]}]}}static constructNewNetworkLoadBalancerTemplate(e){const t="targetgroup";return{name:"",availabilityZones:void 0,stack:"",detail:"",loadBalancerType:"network",isInternal:!1,ipAddressType:"ipv4",dualstack:!1,cloudProvider:"aws",credentials:e.defaultCredentials.aws||hn.defaults.account,region:e.defaultRegions.aws||hn.defaults.region,vpcId:null,subnetType:hn.defaults.subnetType,deletionProtection:!1,loadBalancingCrossZone:!0,securityGroups:[],targetGroups:[{name:t,protocol:"TCP",port:7001,targetType:"instance",healthCheckProtocol:"TCP",healthCheckPath:"/healthcheck",healthCheckPort:"traffic-port",healthCheckTimeout:5,healthCheckInterval:10,healthyThreshold:10,unhealthyThreshold:10,attributes:{deregistrationDelay:300}}],regionZones:[],listeners:[{certificates:[],protocol:"TCP",port:80,defaultActions:[{type:"forward",targetGroupName:t}],rules:[]}]}}}function Gr(e){var t;return(null==(t=e.listeners)?void 0:t.some(e=>"HTTPS"===e.protocol))?"https:":"http:"}class xr extends Mt.Component{constructor(){super(...arguments),this.state={loading:!0},this.isUnmounted=!1,this.extractTargetGroup=()=>{var e;const{accountId:t,loadBalancerName:a,name:n,region:r}=this.props.targetGroup,l=this.props.app.getDataSource("loadBalancers").data.find(e=>e.name===a&&e.region===r&&e.account===t),i=null==(e=null==l?void 0:l.targetGroups)?void 0:e.find(e=>e.name===n);l&&i?this.isUnmounted||this.setState({loadBalancer:l,targetGroup:i,loading:!1}):this.autoClose()},this.autoClose=()=>{this.isUnmounted||(this.props.stateService.params.allowModalToStayOpen=!0,this.props.stateService.go("^",null,{location:"replace"}))},this.closeDetails=()=>{this.props.stateService.go("^")}}componentDidMount(){this.props.app.getDataSource("loadBalancers").ready().then(()=>{this.isUnmounted||(this.extractTargetGroup(),this.unsubscribeFromRefresh=this.props.app.getDataSource("loadBalancers").onRefresh(this.extractTargetGroup))}).catch(()=>{this.isUnmounted||this.setState({loading:!1})})}componentWillUnmount(){this.isUnmounted=!0,this.unsubscribeFromRefresh&&this.unsubscribeFromRefresh()}renderHeader(){const{name:e}=this.props,{loading:t}=this.state;return Mt.createElement("div",{className:"header"},Mt.createElement("div",{className:"close-button"},Mt.createElement("a",{className:"btn btn-link",onClick:this.closeDetails},Mt.createElement("span",{className:"glyphicon glyphicon-remove"}))),t&&Mt.createElement("div",{className:"horizontal center middle"},Mt.createElement(ne,{size:"small"})),!t&&Mt.createElement("div",{className:"header-text horizontal middle"},Mt.createElement("i",{className:"fa fa-crosshairs icon","aria-hidden":"true"}),Mt.createElement("h3",{className:"horizontal middle space-between flex-1"},e)))}renderNotFound(){return Mt.createElement("div",{className:"content"},Mt.createElement("div",{className:"content-section"},Mt.createElement("div",{className:"content-body text-center"},Mt.createElement("h3",null,"Target group not found."))))}renderDetails(e,t){var a,n,r,l,i,s;const o=e.dnsname||(null==(a=e.elb)?void 0:a.dnsname),c=t.attributes||{};return Mt.createElement("div",{className:"content"},Mt.createElement(G,{heading:"Target Group Details",defaultExpanded:!0},Mt.createElement("dl",{className:"dl-horizontal dl-narrow"},Mt.createElement("dt",null,"In"),Mt.createElement("dd",null,Mt.createElement(A,{account:t.account})," ",t.region),Mt.createElement("dt",null,"VPC"),Mt.createElement("dd",null,Mt.createElement(Fn,{vpcId:t.vpcId})),Mt.createElement("dt",null,"Protocol"),Mt.createElement("dd",null,t.protocol),Mt.createElement("dt",null,"Port"),Mt.createElement("dd",null,t.port),Mt.createElement("dt",null,"Target Type"),Mt.createElement("dd",null,t.targetType)),Mt.createElement("dl",{className:"horizontal-when-filters-collapsed"},Mt.createElement("dt",null,"Load Balancer"),Mt.createElement("dd",null,Mt.createElement("ul",{className:"collapse-margin-on-filter-collapse"},Mt.createElement("li",null,Mt.createElement(ja,{to:"^.loadBalancerDetails",params:{name:e.name,region:e.region,accountId:e.account,vpcId:e.vpcId,provider:"aws"}},Mt.createElement("a",null,e.name)))))),o&&Mt.createElement("dl",{className:"horizontal-when-filters-collapsed"},Mt.createElement("dt",null,"Load Balancer DNS Name"),Mt.createElement("dd",null,Mt.createElement("a",{target:"_blank",href:`${Gr(e)}//${o}`},o)," ",Mt.createElement(ie,{text:o,toolTip:"Copy DNS Name to clipboard"}))),!!(null==(n=t.serverGroups)?void 0:n.length)&&Mt.createElement("dl",{className:"horizontal-when-filters-collapsed"},Mt.createElement("dt",null,"Server Groups"),Mt.createElement("dd",null,Mt.createElement("ul",{className:"collapse-margin-on-filter-collapse"},t.serverGroups.map(e=>Mt.createElement("li",{key:e.name},Mt.createElement(ja,{to:"^.serverGroup",params:{region:e.region,accountId:e.account,serverGroup:e.name,provider:e.cloudProvider}},Mt.createElement("a",null,e.name)))))))),Mt.createElement(G,{heading:"Status",defaultExpanded:!0},Mt.createElement(J,{className:"pull-left",container:t.instanceCounts})),Mt.createElement(G,{heading:"Health Checks"},Mt.createElement("dl",{className:"horizontal-when-filters-collapsed"},Mt.createElement("dt",null,"Target"),Mt.createElement("dd",null,t.healthCheckProtocol,":",t.healthCheckPort,t.healthCheckPath),Mt.createElement("dt",null,"Timeout"),Mt.createElement("dd",null,t.healthCheckTimeoutSeconds||t.healthTimeout," seconds"),Mt.createElement("dt",null,"Interval"),Mt.createElement("dd",null,t.healthCheckIntervalSeconds||t.healthInterval," seconds"),Mt.createElement("dt",null,"Healthy Threshold"),Mt.createElement("dd",null,t.healthyThresholdCount||t.healthyThreshold),Mt.createElement("dt",null,"Unhealthy Threshold"),Mt.createElement("dd",null,t.unhealthyThresholdCount||t.unhealthyThreshold),t.matcher&&Mt.createElement("dt",null,"Matcher"),t.matcher&&Mt.createElement("dd",null,"HTTP Code(s): ",t.matcher.httpCode))),Mt.createElement(G,{heading:"Attributes",defaultExpanded:!0},Mt.createElement("dl",{className:"horizontal-when-filters-collapsed"},Mt.createElement("dt",null,"Deregistration Delay Timeout"),Mt.createElement("dd",null,c["deregistration_delay.timeout_seconds"]||c.deregistrationDelay," seconds"),Mt.createElement("dt",null,"Stickiness Enabled"),Mt.createElement("dd",null,String(null!=(l=null!=(r=c["stickiness.enabled"])?r:c.stickinessEnabled)&&l)),("true"===c["stickiness.enabled"]||c.stickinessEnabled)&&Mt.createElement(Mt.Fragment,null,Mt.createElement("dt",null,"Stickiness Load Balancer Cookie Duration"),Mt.createElement("dd",null,c["stickiness.lb_cookie.duration_seconds"]||c.stickinessDuration," seconds"),Mt.createElement("dt",null,"Stickiness Type"),Mt.createElement("dd",null,c["stickiness.type"]||c.stickinessType)),"network"===e.loadBalancerType&&Mt.createElement(Mt.Fragment,null,Mt.createElement("dt",null,"Preserve Client IP"),Mt.createElement("dd",null,String(null!=(s=null!=(i=c["preserve_client_ip.enabled"])?i:c.preserveClientIp)&&s))))))}render(){const{app:e}=this.props,{loadBalancer:t,loading:a,targetGroup:n}=this.state;return Mt.createElement("div",{className:"details-panel"},this.renderHeader(),!a&&(null==t?void 0:t.isManaged)&&Mt.createElement(se,{resourceSummary:t.managedResourceSummary,application:e}),!a&&!n&&this.renderNotFound(),!a&&n&&t&&this.renderDetails(t,n))}}const Dr=N(xr);var Br=Object.getOwnPropertyDescriptor;let Fr=class extends Mt.Component{render(){const{certificates:e,accountName:t,onCertificateSelect:a,currentValue:n}=this.props,r=e[t]||[],l=r.map(e=>({label:e.serverCertificateName,value:e.serverCertificateName})),i=r.find(e=>e.serverCertificateName===n);return Mt.createElement("div",{style:{width:"100%"}},Mt.createElement(_a,{className:"input-sm",wrapperStyle:{width:"100%"},clearable:!0,required:!0,options:l,onChange:e=>a(e.value),value:n}),i&&Mt.createElement("div",{className:"small sp-margin-xs-top sp-margin-m-bottom sp-margin-m-left"},Mt.createElement("div",null,"Uploaded ",oe(i.uploadDate)," (",B(i.uploadDate),")"),Mt.createElement("b",null,"Expires ",oe(i.expiration))," (",B(i.expiration),")"))}};Fr=((e,t,a,n)=>{for(var r,l=n>1?void 0:n?Br(t,a):t,i=e.length-1;i>=0;i--)(r=e[i])&&(l=r(l)||l);return l})([ce("amazon.certificateSelectField")],Fr);const zr=Mt.forwardRef((e,a)=>Mt.createElement("div",{ref:a},Mt.createElement(r,{name:"idleTimeout",label:"Idle Timeout",help:Mt.createElement(t,{id:"loadBalancer.advancedSettings.idleTimeout"}),input:e=>Mt.createElement(d,{...e,min:0})}),Mt.createElement(r,{name:"deletionProtection",label:"Protection",help:Mt.createElement(t,{id:"loadBalancer.advancedSettings.deletionProtection"}),input:e=>Mt.createElement(o,{...e,text:"Enable delete protection"})}),Mt.createElement(r,{name:"dualstack",label:"Dualstack",help:Mt.createElement(t,{id:"loadBalancer.advancedSettings.albIpAddressType"}),input:e=>Mt.createElement(o,{...e,text:"Assign Ipv4 and IPv6"})})));Cr(".configure-config-modal .StandardFieldLayout .sm-label-right {\n min-width: 160px;\n}\n");const Mr=class e extends Mt.Component{constructor(e){super(e),this.close=e=>{this.props.dismissModal(e)},this.submit=e=>{this.props.closeModal(e)},this.validate=()=>({});const t=e.config||{};this.state={initialValues:{authorizationEndpoint:t.authorizationEndpoint||"",clientId:t.clientId||"",clientSecret:t.clientSecret||"",issuer:t.issuer||"",scope:t.scope||"openid",sessionCookieName:t.sessionCookieName||"AWSELBAuthSessionCookie",tokenEndpoint:t.tokenEndpoint||"",userInfoEndpoint:t.userInfoEndpoint||""}}}static show(t){return E.show(e,t)}render(){const{initialValues:e}=this.state;return Mt.createElement("div",{className:"configure-config-modal"},Mt.createElement(de,{initialValues:e,onSubmit:this.submit,validate:this.validate,render:({isValid:e})=>Mt.createElement(Qa,{className:"form-horizontal"},Mt.createElement(me,{dismiss:this.close}),Mt.createElement(Oa.Header,null,Mt.createElement(Oa.Title,null,"Configure OIDC Client")),Mt.createElement(Oa.Body,null,Mt.createElement(r,{name:"issuer",label:"Issuer",required:!0,input:e=>Mt.createElement(l,{...e,placeholder:"Enter the OpenId Provider"})}),Mt.createElement(r,{name:"authorizationEndpoint",label:"Authorization Endpoint",required:!0,input:e=>Mt.createElement(l,{...e,placeholder:"Enter OpenID provider server endpoint"})}),Mt.createElement(r,{name:"tokenEndpoint",label:"Token Endpoint",required:!0,input:e=>Mt.createElement(l,{...e,placeholder:"Enter a URI for your token endpoint"})}),Mt.createElement(r,{name:"userInfoEndpoint",label:"User info Endpoint",required:!0,input:e=>Mt.createElement(l,{...e,placeholder:"Enter a URI for your user info endpoint"})}),Mt.createElement(r,{name:"clientId",label:"Client ID",required:!0,input:e=>Mt.createElement(l,{...e,placeholder:"Enter the client ID"})}),Mt.createElement(r,{name:"clientSecret",label:"Client secret",required:!0,input:e=>Mt.createElement(l,{...e,placeholder:"Enter the client secret"})})),Mt.createElement(Oa.Footer,null,Mt.createElement("button",{className:"btn btn-default",onClick:this.close,type:"button"},"Cancel"),Mt.createElement(ue,{isDisabled:!e,submitting:!1,isFormSubmit:!0,label:"Save Client"})))}))}};Mr.defaultProps={closeModal:C,dismissModal:C};let Rr=Mr;const Lr=class e extends Mt.Component{constructor(e){super(e),this.close=e=>{this.props.dismissModal(e)},this.submit=e=>{const t=Qt(e,e=>e&&""!==e);this.props.closeModal(t)};const t=e.config||{};this.initialValues={host:t.host||"",path:t.path||"",port:t.port||"",protocol:t.protocol||void 0,query:t.query||"",statusCode:t.statusCode||"HTTP_301"}}static show(t){return E.show(e,t)}render(){return Mt.createElement("div",{className:"configure-config-modal"},Mt.createElement(de,{initialValues:this.initialValues,onSubmit:this.submit,render:({isValid:e})=>Mt.createElement(Qa,{className:"form-horizontal"},Mt.createElement(me,{dismiss:this.close}),Mt.createElement(Oa.Header,null,Mt.createElement(Oa.Title,null,"Configure Redirect ",Mt.createElement(t,{id:"aws.loadBalancer.redirect"}))),Mt.createElement(Oa.Body,null,Mt.createElement(r,{name:"host",label:"Host",required:!1,input:e=>Mt.createElement(l,{...e}),help:Mt.createElement(t,{id:"aws.loadBalancer.redirect.host"})}),Mt.createElement(r,{name:"path",label:"Path",required:!1,input:e=>Mt.createElement(l,{...e}),help:Mt.createElement(t,{id:"aws.loadBalancer.redirect.path"})}),Mt.createElement(r,{name:"port",label:"Port",required:!1,input:e=>Mt.createElement(l,{...e}),help:Mt.createElement(t,{id:"aws.loadBalancer.redirect.port"})}),Mt.createElement(r,{name:"protocol",label:"Protocol",required:!1,input:e=>Mt.createElement(s,{...e,stringOptions:["HTTP","HTTPS","#{protocol}"],placeholder:"Select Protocol",clearable:!1,style:{width:"130px"}}),help:Mt.createElement(t,{id:"aws.loadBalancer.redirect.protocol"})}),Mt.createElement(r,{name:"query",label:"Query",required:!1,input:e=>Mt.createElement(l,{...e}),help:Mt.createElement(t,{id:"aws.loadBalancer.redirect.query"})}),Mt.createElement(r,{name:"statusCode",label:"Status Code",required:!0,input:e=>Mt.createElement(pe,{...e,options:["HTTP_301","HTTP_302"]}),help:Mt.createElement(t,{id:"aws.loadBalancer.redirect.statusCode"})})),Mt.createElement(Oa.Footer,null,Mt.createElement("button",{className:"btn btn-default",onClick:this.close,type:"button"},"Cancel"),Mt.createElement(ue,{isDisabled:!e,submitting:!1,isFormSubmit:!0,label:"Save Config"})))}))}};Lr.defaultProps={closeModal:C,dismissModal:C};let Or=Lr;class $r{static getOidcConfigsByApp(e){return T("/oidcConfigs").query({app:e}).get()}}class Ur{static listCertificates(){return he.listCertificatesByProvider("aws").then(e=>i.listAllAccounts("aws").then(t=>{const a=t.reduce((e,t)=>(e[t.accountId]=t.name,e),{}),n=Kt(e,"serverCertificateName");return ea(n,e=>{const[,,,,t]=e.arn.split(":");return a[t]||"unknown"})}))}}const Vr=Ka(()=>Mt.createElement("span",{className:"pipeline-drag-handle clickable glyphicon glyphicon-resize-vertical"})),Hr={authenticateOidcConfig:{authorizationEndpoint:"",clientId:"",issuer:"",scope:"openid",sessionCookieName:"AWSELBAuthSessionCookie",tokenEndpoint:"",userInfoEndpoint:""},type:"authenticate-oidc"};class qr extends Mt.Component{constructor(e){super(e),this.protocols=["HTTP","HTTPS"],this.initialActionsWithAuth=new Set,this.initialListenersWithDefaultAuth=new Set,this.removedAuthActions=new Map,this.attachClientSecret=(e,t)=>{if("authenticate-oidc"===e.type){const a=t.find(t=>t.clientId===e.authenticateOidcConfig.clientId);a&&(e.authenticateOidcConfig.clientSecret=a.clientSecret)}},this.addListener=()=>{this.props.formik.values.listeners.push({certificates:[],protocol:"HTTP",port:80,defaultActions:[{type:"forward",targetGroupName:""}],rules:[]}),this.updateListeners()},this.addRule=e=>{e.rules.push({priority:null,actions:[{type:"forward",targetGroupName:""}],conditions:[{field:"path-pattern",values:[""]}]}),this.updateListeners()},this.removeRule=(e,t)=>{e.rules.splice(t,1),this.updateListeners()},this.handleConditionFieldChanged=(e,t)=>{e.field=t,"http-request-method"===t&&(e.values=[]),this.updateListeners()},this.handleConditionValueChanged=(e,t)=>{e.values[0]=t,this.updateListeners()},this.handleHttpRequestMethodChanged=(e,t,a)=>{let n=e.values||[];a?n.push(t):n=n.filter(e=>e!==t),e.values=n,e.httpRequestMethodConfig={values:n},this.updateListeners()},this.addCondition=e=>{if(1===e.conditions.length){const t="path-pattern"===e.conditions[0].field?"host-header":"path-pattern";e.conditions.push({field:t,values:[""]})}this.updateListeners()},this.removeCondition=(e,t)=>{e.conditions.splice(t,1),this.updateListeners()},this.handleRuleActionTargetChanged=(e,t)=>{e.targetGroupName=t,this.updateListeners()},this.handleRuleActionTypeChanged=(e,t)=>{e.type=t,"forward"===e.type?delete e.redirectActionConfig:"redirect"===e.type&&(e.redirectActionConfig={statusCode:"HTTP_301"},delete e.targetGroupName),this.updateListeners()},this.handleSortEnd=(e,t)=>{t.rules=Ya(t.rules,e.oldIndex,e.newIndex),this.updateListeners()},this.configureOidcClient=e=>{Rr.show({config:e.authenticateOidcConfig}).then(t=>{e.authenticateOidcConfig=t,this.updateListeners()}).catch(()=>{})},this.configureRedirect=e=>{Or.show({config:e.redirectActionConfig}).then(t=>{e.redirectActionConfig=t,this.updateListeners()}).catch(()=>{})},this.authenticateRuleToggle=(e,t)=>{const a=e.rules[t],n=a&&a.actions||e.defaultActions;if(n){const a=n.findIndex(e=>"authenticate-oidc"===e.type);if(-1!==a)this.removeAuthAction(e,n,a,t);else{const a=(this.removedAuthActions.has(e)?this.removedAuthActions.get(e)[t||-1]:void 0)||{...Hr};n.unshift({...a})}this.updateListeners()}},this.oidcConfigChanged=(e,t)=>{e.authenticateOidcConfig={...t},this.updateListeners()},this.redirectConfigChanged=(e,t)=>{e.redirectActionConfig={...t},this.updateListeners()},this.state={certificates:[],certificateTypes:ta(hn,"loadBalancers.certificateTypes",["iam","acm"]),oidcConfigs:void 0},this.props.formik.initialValues.listeners.forEach(e=>{"authenticate-oidc"===e.defaultActions[0].type&&this.initialListenersWithDefaultAuth.add(e),e.rules.forEach(e=>{"authenticate-oidc"===e.actions[0].type&&this.initialActionsWithAuth.add(e.actions)})})}getAllTargetGroupsFromListeners(e){const t=Wt(e.map(e=>e.defaultActions)),a=Wt(e.map(e=>e.rules));return t.push(...Wt(a.map(e=>e.actions))),aa(t.map(e=>e.targetGroupName))}validate(e){const t={},a=e.targetGroups.map(e=>e.name),n=this.getAllTargetGroupsFromListeners(e.listeners),r=na(a,n);1===r.length?t.listeners=`Target group ${r[0]} is unused.`:r.length>1&&(t.listeners=`Target groups ${r.join(", ")} are unused.`);const{listeners:l}=e;Vt(l,"port").length<l.length&&(t.listenerPorts="Multiple listeners cannot use the same port.");return e.listeners.find(e=>{const t=!!e.defaultActions.find(e=>"forward"===e.type&&!e.targetGroupName||"authenticate-oidc"===e.type&&!e.authenticateOidcConfig.clientId||"redirect"===e.type&&(!e.redirectActionConfig||!ra(e.redirectActionConfig,e=>e&&""!==e))),a=!!e.rules.find(e=>{const t=!!e.actions.find(e=>"forward"===e.type&&!e.targetGroupName),a=!!e.actions.find(e=>"authenticate-oidc"===e.type&&!e.authenticateOidcConfig.clientId),n=!!e.conditions.find(e=>"http-request-method"===e.field?!e.values.length:e.values.includes(""));return t||a||n});return t||a})&&(t.listeners="Missing fields in rule configuration."),t}componentDidMount(){this.loadCertificates(),this.loadOidcClients()}loadCertificates(){Ur.listCertificates().then(e=>{this.setState({certificates:e})})}loadOidcClients(){$r.getOidcConfigsByApp(this.props.app.name).then(e=>{e&&e.length&&this.props.formik.values.listeners.forEach(t=>{t.defaultActions.forEach(t=>this.attachClientSecret(t,e)),t.rules.forEach(t=>t.actions.forEach(t=>this.attachClientSecret(t,e)))}),this.setState({oidcConfigs:e}),this.updateListeners()}).catch(()=>{})}updateListeners(){this.props.formik.setFieldValue("listeners",this.props.formik.values.listeners)}needsCert(e){return"HTTPS"===e.protocol}showCertificateSelect(e){return"iam"===e.type&&this.state.certificates&&Object.keys(this.state.certificates).length>0}addListenerCertificate(e){e.certificates=e.certificates||[],e.certificates.push({certificateArn:void 0,type:"iam",name:void 0})}removeAuthActions(e){const t=e.defaultActions.findIndex(e=>"authenticate-oidc"===e.type);-1!==t&&this.removeAuthAction(e,e.defaultActions,t,-1),e.rules.forEach((t,a)=>{const n=t.actions.findIndex(e=>"authenticate-oidc"===e.type);-1!==n&&this.removeAuthAction(e,t.actions,n,a)}),this.updateListeners()}reenableAuthActions(e){const t=this.removedAuthActions.has(e)?this.removedAuthActions.get(e):[],a=t[-1];a&&(t[-1]=void 0,e.defaultActions.unshift({...a})),e.rules.forEach((e,a)=>{const n=t[a];t[a]=void 0,n&&e.actions.unshift({...n})})}listenerProtocolChanged(e,t){e.protocol=t,"HTTPS"===e.protocol&&(e.port=443,e.certificates&&0!==e.certificates.length||this.addListenerCertificate(e),this.reenableAuthActions(e)),"HTTP"===e.protocol&&(e.port=80,e.certificates.length=0,this.removeAuthActions(e)),this.updateListeners()}listenerPortChanged(e,t){e.port=Number.parseInt(t,10),this.updateListeners()}certificateTypeChanged(e,t){e.type=t,this.updateListeners()}handleCertificateChanged(e,t){e.name=t,this.updateListeners()}removeListener(e){this.props.formik.values.listeners.splice(e,1),this.updateListeners()}removeAuthActionInternal(e,t,a,n=-1){const r=t.splice(a,1)[0];this.removedAuthActions.has(e)||this.removedAuthActions.set(e,[]),this.removedAuthActions.get(e)[n||-1]=r,this.updateListeners()}removeAuthAction(e,t,a,n=-1){const r=-1===n&&this.initialListenersWithDefaultAuth.has(e),l=n>-1&&this.initialActionsWithAuth.has(t);r||l?w.confirm({header:"Really remove authentication?",buttonText:"Remove Auth",submitMethod:()=>(this.removeAuthActionInternal(e,t,a,n),r&&this.initialListenersWithDefaultAuth.delete(e),l&&this.initialActionsWithAuth.delete(t),Promise.resolve())}):this.removeAuthActionInternal(e,t,a,n)}render(){const{errors:e,values:t}=this.props.formik,{certificates:a,certificateTypes:n,oidcConfigs:r}=this.state;return Mt.createElement("div",{className:"container-fluid form-horizontal"},Mt.createElement("div",{className:"form-group"},Mt.createElement("div",{className:"col-md-12"},t.listeners.map((e,l)=>Mt.createElement("div",{key:l,className:"wizard-pod"},Mt.createElement("div",null,Mt.createElement("div",{className:"wizard-pod-row header"},Mt.createElement("div",{className:"wizard-pod-row-title"},"Listen On"),Mt.createElement("div",{className:"wizard-pod-row-contents spread"},Mt.createElement("div",null,Mt.createElement("span",{className:"wizard-pod-content"},Mt.createElement("label",null,"Protocol"),Mt.createElement("select",{className:"form-control input-sm inline-number",style:{width:"80px"},value:e.protocol,onChange:t=>this.listenerProtocolChanged(e,t.target.value)},this.protocols.map(e=>Mt.createElement("option",{key:e},e)))),Mt.createElement("span",{className:"wizard-pod-content"},Mt.createElement("label",null,"Port"),Mt.createElement("input",{className:"form-control input-sm inline-number",type:"text",min:0,value:e.port||"",onChange:t=>this.listenerPortChanged(e,t.target.value),style:{width:"80px"},required:!0}))),Mt.createElement("div",null,Mt.createElement("a",{className:"sm-label clickable",onClick:()=>this.removeListener(l)},Mt.createElement("span",{className:"glyphicon glyphicon-trash"}))))),this.needsCert(e)&&Mt.createElement("div",{className:"wizard-pod-row"},Mt.createElement("div",{className:"wizard-pod-row-title"},"Certificate"),Mt.createElement("div",{className:"wizard-pod-row-contents"},e.certificates.map((e,r)=>Mt.createElement("div",{key:r,style:{width:"100%",display:"flex",flexDirection:"row"}},Mt.createElement("select",{className:"form-control input-sm inline-number",style:{width:"45px"},value:e.type,onChange:t=>this.certificateTypeChanged(e,t.target.value)},n.map(e=>Mt.createElement("option",{key:e},e))),this.showCertificateSelect(e)&&Mt.createElement(Fr,{certificates:a,accountName:t.credentials,currentValue:e.name,app:this.props.app,onCertificateSelect:t=>this.handleCertificateChanged(e,t)}),!this.showCertificateSelect(e)&&Mt.createElement("input",{className:"form-control input-sm no-spel",style:{display:"inline-block"},type:"text",value:e.name,onChange:t=>this.handleCertificateChanged(e,t.target.value),required:!0}))))),Mt.createElement("div",{className:"wizard-pod-row"},Mt.createElement("div",{className:"wizard-pod-row-contents",style:{padding:"0"}},Mt.createElement("table",{className:"table table-condensed packed rules-table"},Mt.createElement("thead",null,Mt.createElement("tr",null,Mt.createElement("th",{style:{width:"15px",padding:"0"}}),Mt.createElement("th",null,"If"),Mt.createElement("th",{style:{width:"315px"}},"Then"),Mt.createElement("th",{style:{width:"45px"}}))),Mt.createElement(_r,{addCondition:this.addCondition,addRule:this.addRule,authenticateRuleToggle:this.authenticateRuleToggle,distance:10,handleConditionFieldChanged:this.handleConditionFieldChanged,handleConditionValueChanged:this.handleConditionValueChanged,handleHttpRequestMethodChanged:this.handleHttpRequestMethodChanged,handleRuleActionTargetChanged:this.handleRuleActionTargetChanged,handleRuleActionTypeChanged:this.handleRuleActionTypeChanged,listener:e,helperClass:"rule-sortable-helper",removeRule:this.removeRule,removeCondition:this.removeCondition,targetGroups:t.targetGroups,oidcConfigs:r,oidcConfigChanged:this.oidcConfigChanged,redirectConfigChanged:this.redirectConfigChanged,onSortEnd:t=>this.handleSortEnd(t,e),configureOidcClient:this.configureOidcClient,configureRedirect:this.configureRedirect}))))))),e.listenerPorts&&Mt.createElement("div",{className:"wizard-pod-row-errors"},Mt.createElement(ge,{type:"error",message:e.listenerPorts})),e.listeners&&Mt.createElement("div",{className:"wizard-pod-row-errors"},Mt.createElement(ge,{type:"error",message:e.listeners})),Mt.createElement("table",{className:"table table-condensed packed"},Mt.createElement("tbody",null,Mt.createElement("tr",null,Mt.createElement("td",null,Mt.createElement("button",{type:"button",className:"add-new col-md-12",onClick:this.addListener},Mt.createElement("span",null,Mt.createElement("span",{className:"glyphicon glyphicon-plus-sign"})," Add new listener")))))))))}}const Wr=Xa(e=>Mt.createElement("tr",{className:"listener-rule"},Mt.createElement("td",{className:"handle"},Mt.createElement(Vr,null)),Mt.createElement("td",null,e.rule.conditions.map((a,n)=>Mt.createElement("div",{key:n,className:"listener-rule-condition"},Mt.createElement("select",{className:"form-control input-sm inline-number",value:a.field,onChange:t=>e.handleConditionFieldChanged(a,t.target.value),style:{width:"40%"},required:!0},(1===e.rule.conditions.length||"host-header"===a.field)&&Mt.createElement("option",{value:"host-header"},"Host"),(1===e.rule.conditions.length||"path-pattern"===a.field)&&Mt.createElement("option",{value:"path-pattern"},"Path"),(1===e.rule.conditions.length||"http-request-method"===a.field)&&Mt.createElement("option",{value:"http-request-method"},"Method(s)")),"path-pattern"===a.field&&Mt.createElement(t,{id:"aws.loadBalancer.ruleCondition.path"}),"host-header"===a.field&&Mt.createElement(t,{id:"aws.loadBalancer.ruleCondition.host"}),"http-request-method"!==a.field&&Mt.createElement("input",{className:"form-control input-sm",type:"text",value:a.values[0],onChange:t=>e.handleConditionValueChanged(a,t.target.value),maxLength:128,required:!0,style:{width:"63%"}}),"http-request-method"===a.field&&Mt.createElement("div",{className:"col-md-6 checkbox"},["DELETE","GET","PATCH","POST","PUT"].map(t=>Mt.createElement("label",{key:`${t}-checkbox`},Mt.createElement("input",{type:"checkbox",checked:a.values.includes(t),onChange:n=>e.handleHttpRequestMethodChanged(a,t,n.target.checked)}),t))),Mt.createElement("span",{className:"remove-condition"},1===n&&Mt.createElement("a",{className:"btn btn-sm btn-link clickable",onClick:()=>e.removeCondition(e.rule,n),style:{padding:"0"}},Mt.createElement(O,{value:"Remove Condition"},Mt.createElement("span",{className:"glyphicon glyphicon-trash"})))))),1===e.rule.conditions.length&&Mt.createElement("div",{className:"add-new-container"},Mt.createElement("button",{type:"button",className:"add-new col-md-12",onClick:()=>e.addCondition(e.rule)},Mt.createElement("span",null,Mt.createElement("span",{className:"glyphicon glyphicon-plus-sign"})," Add new condition")),Mt.createElement("span",{style:{minWidth:"15px"}}))),Mt.createElement("td",null,e.rule.actions.map((t,a)=>Mt.createElement(jr,{key:a,action:t,actionTypeChanged:a=>e.handleRuleActionTypeChanged(t,a),oidcConfigChanged:a=>e.oidcConfigChanged(t,a),redirectConfigChanged:a=>e.redirectConfigChanged(t,a),targetChanged:a=>e.handleRuleActionTargetChanged(t,a),targetGroups:e.targetGroups,oidcConfigs:e.oidcConfigs,configureOidcClient:e.configureOidcClient,configureRedirect:e.configureRedirect}))),Mt.createElement("td",null,Mt.createElement(Zr,{ruleIndex:e.ruleIndex,listener:e.listener,authenticateRuleToggle:e.authenticateRuleToggle,removeRule:e.removeRule,actions:e.rule.actions})))),jr=e=>{var t;if("authenticate-oidc"!==e.action.type){const t=e.action.redirectActionConfig||e.action.redirectConfig;return Mt.createElement("div",{className:"horizontal top"},Mt.createElement("select",{className:"form-control input-sm",style:{width:"80px"},value:e.action.type,onChange:t=>e.actionTypeChanged(t.target.value)},Mt.createElement("option",{value:"forward"},"forward to"),Mt.createElement("option",{value:"redirect"},"redirect to")),"forward"===e.action.type&&Mt.createElement("select",{className:"form-control input-sm",value:e.action.targetGroupName,onChange:t=>e.targetChanged(t.target.value),required:!0},Mt.createElement("option",{value:""}),aa(e.targetGroups.map(e=>e.name)).map(e=>Mt.createElement("option",{key:e},e))),"redirect"===e.action.type&&Mt.createElement("dl",{className:"dl-horizontal dl-narrow"},Mt.createElement("dt",null,"Host"),Mt.createElement("dd",null,t.host),Mt.createElement("dt",null,"Path"),Mt.createElement("dd",null,t.path),Mt.createElement("dt",null,"Port"),Mt.createElement("dd",null,t.port),Mt.createElement("dt",null,"Protocol"),Mt.createElement("dd",null,t.protocol),Mt.createElement("dt",null,"Query"),Mt.createElement("dd",null,t.query),Mt.createElement("dt",null,"Status Code"),Mt.createElement("dd",null,t.statusCode),Mt.createElement("dt",null,Mt.createElement("button",{className:"btn btn-link no-padding",type:"button",onClick:()=>e.configureRedirect(e.action)},"Configure..."))))}if("authenticate-oidc"===e.action.type){const a=e.action.authenticateOidcConfig.clientId,n=ta(hn,"loadBalancers.disableManualOidcDialog",!1)||e.oidcConfigs&&e.oidcConfigs.length>0&&(!a||e.oidcConfigs.find(e=>e.clientId===a)),r=(null==(t=e.oidcConfigs)?void 0:t.length)?e.oidcConfigs.map(e=>Mt.createElement("option",{key:e.clientId},e.clientId)):Mt.createElement("option",{disabled:!0},"No ",ve.get("OIDC client")," config found");return Mt.createElement("div",{className:"horizontal middle",style:{height:"30px"}},Mt.createElement("span",{style:{whiteSpace:"pre"}},"auth with ",ve.get("OIDC client")," "),n&&Mt.createElement("select",{className:"form-control input-sm",value:a,onChange:t=>e.oidcConfigChanged(e.oidcConfigs.find(e=>e.clientId===t.target.value)),required:!0},Mt.createElement("option",{value:""}),r),!n&&Mt.createElement("a",{onClick:()=>e.configureOidcClient(e.action),className:"clickable"},a||"Configure..."),Mt.createElement("span",{style:{whiteSpace:"pre"}},Mt.createElement("em",null," and then")))}return null},Zr=e=>{const a=Boolean(e.actions.find(e=>"authenticate-oidc"===e.type)),n="HTTPS"===e.listener.protocol,r=a?"Remove authentication from rule":"Authenticate rule",l=a?"fas fa-fw fa-lock-open":"fas fa-fw fa-user-lock";return Mt.createElement("span",null,n&&Mt.createElement(Mt.Fragment,null,Mt.createElement("a",{className:"btn btn-sm btn-link clickable",onClick:()=>e.authenticateRuleToggle(e.listener,e.ruleIndex),style:{padding:"0"}},Mt.createElement(O,{value:r},Mt.createElement("i",{className:l}))),Mt.createElement(t,{id:"aws.loadBalancer.oidcAuthentication"})),void 0!==e.ruleIndex&&e.ruleIndex>=0&&e.removeRule&&Mt.createElement("a",{className:"btn btn-sm btn-link clickable",onClick:()=>e.removeRule(e.listener,e.ruleIndex),style:{padding:"0"}},Mt.createElement(O,{value:"Remove Rule"},Mt.createElement("i",{className:"far fa-fw fa-trash-alt"}))))},_r=Ja(e=>Mt.createElement("tbody",null,Mt.createElement("tr",{className:"not-sortable"},Mt.createElement("td",null),Mt.createElement("td",null,"Default"),Mt.createElement("td",null,e.listener.defaultActions.map((t,a)=>Mt.createElement(jr,{key:a,action:t,actionTypeChanged:a=>e.handleRuleActionTypeChanged(t,a),targetChanged:a=>e.handleRuleActionTargetChanged(t,a),targetGroups:e.targetGroups,oidcConfigs:e.oidcConfigs,oidcConfigChanged:a=>e.oidcConfigChanged(t,a),redirectConfigChanged:a=>e.redirectConfigChanged(t,a),configureOidcClient:e.configureOidcClient,configureRedirect:e.configureRedirect}))),Mt.createElement("td",null,Mt.createElement(Zr,{listener:e.listener,actions:e.listener.defaultActions,authenticateRuleToggle:e.authenticateRuleToggle}))),e.listener.rules.sort((e,t)=>e.priority-t.priority).map((t,a)=>Mt.createElement(Wr,{key:a,rule:t,addCondition:e.addCondition,handleConditionFieldChanged:e.handleConditionFieldChanged,handleConditionValueChanged:e.handleConditionValueChanged,handleHttpRequestMethodChanged:e.handleHttpRequestMethodChanged,handleRuleActionTargetChanged:e.handleRuleActionTargetChanged,handleRuleActionTypeChanged:e.handleRuleActionTypeChanged,oidcConfigChanged:e.oidcConfigChanged,redirectConfigChanged:e.redirectConfigChanged,removeCondition:e.removeCondition,authenticateRuleToggle:e.authenticateRuleToggle,removeRule:e.removeRule,targetGroups:e.targetGroups,oidcConfigs:e.oidcConfigs,listener:e.listener,index:a,ruleIndex:a,configureOidcClient:e.configureOidcClient,configureRedirect:e.configureRedirect})),Mt.createElement("tr",{className:"not-sortable"},Mt.createElement("td",{colSpan:5},Mt.createElement("button",{type:"button",className:"add-new col-md-12",onClick:()=>e.addRule(e.listener)},Mt.createElement("span",null,Mt.createElement("span",{className:"glyphicon glyphicon-plus-sign"})," Add new rule")))))),Kr=(e,t,a)=>n=>ta(e,[t,a],[]).includes(n.toLowerCase())?`There is already a target group in ${t}:${a} with that name.`:null,Yr=e=>t=>t.length<32-e?null:"Target group names are automatically prefixed with their application name and cannot exceed 32 characters in length.";let Xr=class extends Mt.Component{constructor(e){super(e),this.protocols=["HTTP","HTTPS"],this.targetTypes=["instance","ip","lambda"],this.destroy$=new Ca,this.addTargetGroup=()=>{const{setFieldValue:e,values:t}=this.props.formik,a=t.targetGroups.length;t.targetGroups.push({name:"targetgroup"+(a?`${a}`:""),protocol:"HTTP",port:7001,targetType:"instance",healthCheckProtocol:"HTTP",healthCheckPort:"7001",healthCheckPath:"/healthcheck",healthCheckTimeout:5,healthCheckInterval:10,healthyThreshold:10,unhealthyThreshold:2,attributes:{deregistrationDelay:300,stickinessEnabled:!1,stickinessType:"lb_cookie",stickinessDuration:8400}}),e("targetGroups",t.targetGroups)};const t=e.isNew?0:e.formik.initialValues.targetGroups.length;this.state={existingTargetGroupNames:{},oldTargetGroupCount:t}}validate(e){const t=aa(Wt(Yt(ea(e.targetGroups,"name"),e=>e.length>1)).map(e=>e.name)),a=new n(e),{arrayForEach:r}=a;return a.field("targetGroups").withValidators(r((a,n)=>{var r;a.field("name","Name").withValidators(Kr(this.state.existingTargetGroupNames,e.credentials,e.region),Yr(this.props.app.name.length),fe.valueUnique(t,"There is already a target group in this load balancer with the same name.")),a.field("healthCheckInterval","Health Check Interval").withValidators((r=n,e=>"TCP"!==r.healthCheckProtocol||"TCP"===r.healthCheckProtocol&&(10===Number.parseInt(e,10)||30===Number.parseInt(e,10))?null:"TCP health checks only support 10s and 30s intervals"),fe.checkBetween("healthCheckInterval",5,300)),a.field("healthyThreshold","Healthy Threshold").withValidators(fe.checkBetween("healthyThreshold",2,10)),a.field("unhealthyThreshold","Unhealthy Threshold").spelAware().withValidators(fe.checkBetween("unhealthyThreshold",2,10)),a.field("healthCheckTimeout","Timeout").withValidators((e=>t=>{const a=la(t)?t:Number.parseInt(t,10),{protocol:n,healthCheckProtocol:r}=e;if("TCP"===n||"TLS"===n){if("HTTP"===r&&6!==a)return"HTTP health check timeouts for TCP/TLS target groups must be 6s";if(("HTTPS"===r||"TLS"===r)&&10!==a)return"HTTPS/TLS health check timeouts for TCP/TLS target groups must be 10s"}return null})(n),fe.checkBetween("healthCheckTimeout",2,120)),"lambda"!==n.targetType&&(a.field("protocol","Protocol").required(),a.field("healthCheckPath","Health Check Path").required(),a.field("healthCheckProtocol","Health Check Protocol").required(),a.field("name","Name").required(),a.field("healthyThreshold","Healthy Threshold").required().spelAware().withValidators(e=>Ee(e)),a.field("unhealthyThreshold","Unhealthy Threshold").required().spelAware().withValidators(e=>Ee(e)),a.field("healthCheckInterval","Health Check Interval").required().spelAware().withValidators(e=>Ee(e)),a.field("healthCheckPort","Health Check Port").required().spelAware().withValidators(e=>"traffic-port"===e?null:Ee(e)),a.field("port","Port").required().spelAware().withValidators(e=>Ee(e)),a.field("healthyThreshold","Healthy Threshold").required().spelAware().withValidators(e=>Ee(e),fe.checkBetween("healthyThreshold",2,10)),a.field("unhealthyThreshold","Unhealthy Threshold").required().spelAware().withValidators(e=>Ee(e),fe.checkBetween("unhealthyThreshold",2,10)))})),a.validateForm()}removeAppName(e){return e.replace(`${this.props.app.name}-`,"")}updateLoadBalancerNames(e){const{app:t,loadBalancer:a}=e,n={};Na(t.getDataSource("loadBalancers").refresh(!0)).pipe(Da(this.destroy$)).subscribe(()=>{t.getDataSource("loadBalancers").data.forEach(e=>{"classic"!==e.loadBalancerType&&(a&&e.name===a.name||e.targetGroups.forEach(t=>{n[e.account]=n[e.account]||{},n[e.account][e.region]=n[e.account][e.region]||[],n[e.account][e.region].push(this.removeAppName(t.name))}))}),this.setState({existingTargetGroupNames:n},()=>this.props.formik.validateForm())})}targetGroupFieldChanged(e,t,a){const{setFieldValue:n,values:r}=this.props.formik,l=r.targetGroups[e];"targetType"===t&&"lambda"===a&&delete l.port,ia(l,t,a),n("targetGroups",r.targetGroups)}removeTargetGroup(e){const{setFieldValue:t,values:a}=this.props.formik,{oldTargetGroupCount:n}=this.state;a.targetGroups.splice(e,1),e<n&&this.setState({oldTargetGroupCount:n-1}),t("targetGroups",a.targetGroups)}componentDidMount(){this.updateLoadBalancerNames(this.props)}componentWillUnmount(){this.destroy$.next(),this.destroy$.complete()}render(){const{app:e}=this.props,{errors:a,values:n}=this.props.formik,{oldTargetGroupCount:r}=this.state,l=this.protocols.map(e=>Mt.createElement("option",{key:e},e)),i=this.targetTypes.map(e=>Mt.createElement("option",{key:e},e));return Mt.createElement("div",{className:"container-fluid form-horizontal"},Mt.createElement("div",{className:"form-group"},Mt.createElement("div",{className:"col-md-12"},n.targetGroups.map((n,s)=>{const o=a.targetGroups&&a.targetGroups[s]||{},c=("TCP"===n.protocol||"TLS"===n.protocol)&&"HTTP"===n.healthCheckProtocol,d=("TCP"===n.protocol||"TLS"===n.protocol)&&"HTTPS"===n.healthCheckProtocol;return Mt.createElement("div",{key:s,className:"wizard-pod"},Mt.createElement("div",null,Mt.createElement("div",{className:"wizard-pod-row header"},Mt.createElement("div",{className:"wizard-pod-row-title"},"Group Name"),Mt.createElement("div",{className:"wizard-pod-row-contents"},Mt.createElement("div",{className:"wizard-pod-row-data"},Mt.createElement("span",{className:"group-name-prefix"},e.name,"-"),Mt.createElement("input",{className:"form-control input-sm target-group-name",type:"text",value:n.name,onChange:e=>this.targetGroupFieldChanged(s,"name",e.target.value),required:!0,disabled:s<r}),Mt.createElement("a",{className:"sm-label clickable",onClick:()=>this.removeTargetGroup(s)},Mt.createElement("span",{className:"glyphicon glyphicon-trash"}))),o.name&&Mt.createElement("div",{className:"wizard-pod-row-errors"},Mt.createElement(ge,{type:"error",message:o.name})))),Mt.createElement("div",{className:"wizard-pod-row"},Mt.createElement("div",{className:"wizard-pod-row-title"},Mt.createElement(t,{id:"aws.targetGroup.targetType"})," ",Mt.createElement("span",null,"Target Type ")),Mt.createElement("div",{className:"wizard-pod-row-contents"},Mt.createElement("div",{className:"wizard-pod-row-data"},Mt.createElement("span",{className:"wizard-pod-content"},Mt.createElement("select",{className:"form-control input-sm",value:n.targetType,onChange:e=>this.targetGroupFieldChanged(s,"targetType",e.target.value),disabled:s<r},i))))),"lambda"!==n.targetType&&Mt.createElement("div",{className:"wizard-pod-row"},Mt.createElement("div",{className:"wizard-pod-row-title"},"Backend Connection"),Mt.createElement("div",{className:"wizard-pod-row-contents"},Mt.createElement("div",{className:"wizard-pod-row-data"},Mt.createElement("span",{className:"wizard-pod-content"},Mt.createElement("label",null,"Protocol "),Mt.createElement(t,{id:"aws.targetGroup.protocol"})," ",Mt.createElement("select",{className:"form-control input-sm inline-number",value:n.protocol,onChange:e=>this.targetGroupFieldChanged(s,"protocol",e.target.value),disabled:s<r},l)),Mt.createElement("span",{className:"wizard-pod-content"},Mt.createElement("label",null,"Port "),Mt.createElement(t,{id:"aws.targetGroup.port"})," ",Mt.createElement("input",{className:"form-control input-sm inline-number",value:n.port,onChange:e=>this.targetGroupFieldChanged(s,"port",e.target.value),type:"text",required:!0,disabled:s<r}))))),Mt.createElement("div",{className:"wizard-pod-row"},Mt.createElement("div",{className:"wizard-pod-row-title"},"Healthcheck"),Mt.createElement("div",{className:"wizard-pod-row-contents"},Mt.createElement("div",{className:"wizard-pod-row-data"},"lambda"!==n.targetType&&Mt.createElement("span",{className:"wizard-pod-content"},Mt.createElement("label",null,"Protocol "),"TCP"===n.healthCheckProtocol&&Mt.createElement(t,{id:"aws.targetGroup.healthCheckProtocol"})," ",Mt.createElement("select",{className:"form-control input-sm inline-number",value:n.healthCheckProtocol,onChange:e=>this.targetGroupFieldChanged(s,"healthCheckProtocol",e.target.value)},l)),"lambda"!==n.targetType&&Mt.createElement("span",{className:"wizard-pod-content"},Mt.createElement("label",null,"Port "),Mt.createElement(t,{id:"aws.targetGroup.attributes.healthCheckPort.trafficPort"})," ",Mt.createElement("select",{className:"form-control input-sm inline-number",style:{width:"90px"},value:"traffic-port"===n.healthCheckPort?"traffic-port":"manual",onChange:e=>this.targetGroupFieldChanged(s,"healthCheckPort","traffic-port"===e.target.value?"traffic-port":"")},Mt.createElement("option",{value:"traffic-port"},"Traffic Port"),Mt.createElement("option",{value:"manual"},"Manual"))," ",Mt.createElement(ye,{className:"form-control input-sm inline-number",error:o.healthCheckPort,style:{visibility:"traffic-port"===n.healthCheckPort?"hidden":"inherit"},name:"healthCheckPort",required:!0,value:n.healthCheckPort,onChange:e=>this.targetGroupFieldChanged(s,"healthCheckPort",e.target.value)})),Mt.createElement("span",{className:"wizard-pod-content"},Mt.createElement("label",null,"Path "),Mt.createElement(ye,{error:o.healthCheckPath,name:"healthCheckPath",required:!0,value:n.healthCheckPath,onChange:e=>this.targetGroupFieldChanged(s,"healthCheckPath",e.target.value)})),Mt.createElement("span",{className:"wizard-pod-content"},Mt.createElement("label",null,"Timeout "),(c||d)&&Mt.createElement(t,{id:"aws.targetGroup.healthCheckTimeout"}),Mt.createElement(be,{error:o.healthCheckTimeout,disabled:c||d,required:!0,value:c?6:d?10:n.healthCheckTimeout,min:2,max:120,onChange:e=>this.targetGroupFieldChanged(s,"healthCheckTimeout",e)})),Mt.createElement("span",{className:"wizard-pod-content"},Mt.createElement("label",null,"Interval "),Mt.createElement(be,{error:o.healthCheckInterval,required:!0,value:n.healthCheckInterval,min:5,max:300,onChange:e=>this.targetGroupFieldChanged(s,"healthCheckInterval",e)}))))),Mt.createElement("div",{className:"wizard-pod-row"},Mt.createElement("div",{className:"wizard-pod-row-title"},"Healthcheck Threshold"),Mt.createElement("div",{className:"wizard-pod-row-contents"},Mt.createElement("div",{className:"wizard-pod-row-data"},Mt.createElement("span",{className:"wizard-pod-content"},Mt.createElement("label",null,"Healthy "),Mt.createElement(be,{error:o.healthyThreshold,value:n.healthyThreshold,min:2,max:10,onChange:e=>this.targetGroupFieldChanged(s,"healthyThreshold",e)})),Mt.createElement("span",{className:"wizard-pod-content"},Mt.createElement("label",null,"Unhealthy "),Mt.createElement(be,{error:o.unhealthyThreshold,required:!0,value:n.unhealthyThreshold,min:2,max:10,onChange:e=>this.targetGroupFieldChanged(s,"unhealthyThreshold",e)}))))),Mt.createElement("div",{className:"wizard-pod-row"},Mt.createElement("div",{className:"wizard-pod-row-title"},"Attributes"),"lambda"!==n.targetType?Mt.createElement("div",{className:"wizard-pod-row-contents"},Mt.createElement("div",{className:"wizard-pod-row-data"},Mt.createElement("span",{className:"wizard-pod-content"},Mt.createElement("label",null,"Dereg. Delay"),Mt.createElement(t,{id:"aws.targetGroup.attributes.deregistrationDelay"})," ",Mt.createElement("input",{className:"form-control input-sm inline-number",type:"text",value:n.attributes.deregistrationDelay,onChange:e=>this.targetGroupFieldChanged(s,"attributes.deregistrationDelay",e.target.value)})),Mt.createElement("span",{className:"wizard-pod-content"},Mt.createElement("label",{className:"checkbox-inline",style:{paddingTop:"2px"}},Mt.createElement("input",{type:"checkbox",checked:n.attributes.stickinessEnabled,onChange:e=>this.targetGroupFieldChanged(s,"attributes.stickinessEnabled",e.target.checked)})," ",Mt.createElement("label",null,"Sticky"),Mt.createElement(t,{id:"aws.targetGroup.attributes.stickinessEnabled"}))),n.attributes.stickinessEnabled&&Mt.createElement("span",{className:"wizard-pod-content"},Mt.createElement("label",null,"Duration "),Mt.createElement(t,{id:"aws.targetGroup.attributes.stickinessDuration"})," ",Mt.createElement("input",{className:"form-control input-sm inline-number",value:n.attributes.stickinessDuration,onChange:e=>this.targetGroupFieldChanged(s,"attributes.stickinessDuration",e.target.value),type:"text"})))):Mt.createElement("span",{className:"wizard-pod-content"},Mt.createElement("label",{className:"checkbox-inline",style:{paddingTop:"2px"}},Mt.createElement("input",{type:"checkbox",checked:n.attributes.multiValueHeadersEnabled,onChange:e=>this.targetGroupFieldChanged(s,"attributes.multiValueHeadersEnabled",e.target.checked)})," ",Mt.createElement("label",null,"Enable Multi Value Headers"))))))}),Mt.createElement("table",{className:"table table-condensed packed"},Mt.createElement("tbody",null,Mt.createElement("tr",null,Mt.createElement("td",null,Mt.createElement("button",{type:"button",className:"add-new col-md-12",onClick:this.addTargetGroup},Mt.createElement("span",{className:"glyphicon glyphicon-plus-sign"})," Add new target group"))))))))}};class Jr extends Mt.Component{constructor(e){super(e),this.handleUsePreferredZonesChanged=e=>{const t="true"===e.target.value;this.setState({usePreferredZones:t}),t&&this.setDefaultZones(t,this.props)},this.handleSelectedZonesChanged=e=>{this.props.onChange([...e])},this.state={defaultZones:[],usePreferredZones:e.usePreferredZones||!e.selectedZones||0===e.selectedZones.length},this.setDefaultZones(this.state.usePreferredZones,e)}componentWillReceiveProps(e){e.region===this.props.region&&e.credentials===this.props.credentials||this.setDefaultZones(this.state.usePreferredZones,e)}setDefaultZones(e,t){const{credentials:a,region:n}=t;i.getAvailabilityZonesForAccountAndRegion("aws",a,n).then(a=>{this.setState({defaultZones:a}),e&&a&&t.onChange(a.slice())})}render(){const{region:e,allZones:t,selectedZones:a}=this.props,{defaultZones:n,usePreferredZones:r}=this.state;return Mt.createElement("div",{className:"form-group"},Mt.createElement("div",{className:"col-md-3 sm-label-right"},"Availability Zones"),e&&Mt.createElement("div",{className:"col-md-7"},Mt.createElement("p",{className:"form-control-static"},"Automatic Availability Zone Balancing:"),Mt.createElement("select",{className:"form-control input-sm",value:r?"true":"false",onChange:this.handleUsePreferredZonesChanged},Mt.createElement("option",{value:"true"},"Enabled"),Mt.createElement("option",{value:"false"},"Manual")),Mt.createElement("br",null),r&&Mt.createElement("div",null,Mt.createElement("p",{className:"form-control-static"},"Server group will be available in:"),Mt.createElement("ul",null,n.map(e=>Mt.createElement("li",{key:e},e)))),!r&&Mt.createElement("div",null,"Restrict server group instances to:",Mt.createElement(Ce,{stringOptions:t,value:a,onChange:e=>this.handleSelectedZonesChanged(e.target.value)}))))}}function Qr(e){const{application:t,credentials:a,defaultSubnetTypes:n,hideClassic:r,name:l,onChange:i,readOnly:s,region:o,subnets:c,value:d,...m}=e,u=Ne(c),p=Mt.useMemo(()=>{const e=r||function(e,t,a){const{classicLaunchLockout:n,classicLaunchAllowlist:r}=hn,l=Number(ta(a,"attributes.createTs",0))>(n||0),i=!!r&&r.some(a=>a.region===e&&a.credentials===t);return l||!i}(o,a,t);return function(e,t){const a=(e,t)=>e.label.localeCompare(t.label),n=e=>({value:e.purpose,label:e.label}),r=t?[]:[{label:"None (EC2 Classic)",value:""}],l=e.filter(e=>!e.deprecated).sort(a).map(n),i=e.filter(e=>e.deprecated).sort(a).map(n);return i.length&&i.unshift({label:"-----------",value:"",disabled:!0}),r.concat(l).concat(i)}(c,e)},[r,o,a,t,u]),h=function(e,t=[]){for(const a of t){const t=e.find(e=>a===e.purpose);if(t)return t}}(c,n)||c[0],g=we().current;return Mt.useEffect(()=>{const e=p.some(e=>e.value===d);h&&(!e||"FIRST_RENDER"!==g)&&i(Se({name:l,value:h.purpose}))},[p]),s?Mt.createElement("p",{className:"form-control-static"},e.value||"None (EC2 Classic)"):Mt.createElement(pe,{options:p,value:d,onChange:i,...m})}class el extends zt.Component{constructor(){super(...arguments),this.handleChange=e=>{const{component:t,onChange:a,field:n}=this.props;t[n]=e.target.value,a()}}render(){var e,a,n;const{component:r,defaultSubnetTypes:l,field:i,helpKey:s,labelColumns:o,recommendedSubnetTypes:c,region:d,showSubnetWarning:m,...u}=this.props,p=r[i],h=null!=(a=null!=c?c:null==(e=hn.serverGroups)?void 0:e.recommendedSubnets)?a:[],g=null!=l?l:[hn.defaults.subnetType],v=h.some(e=>p&&p.includes(e)),f=null==(n=hn.serverGroups)?void 0:n.subnetWarning;return zt.createElement("div",{className:"form-group"},zt.createElement("div",{className:`col-md-${o} sm-label-right`},"VPC Subnet ",zt.createElement(t,{id:s})),zt.createElement("div",{className:"col-md-7"},d?zt.createElement(Qr,{...u,inputClassName:"form-control input-sm",credentials:r.credentials,defaultSubnetTypes:g,region:d,value:p,onChange:this.handleChange}):"(Select an account)",m&&!v&&Boolean(f)&&zt.createElement("div",{className:"alert alert-warning sp-margin-s-top horizontal center"},zt.createElement("i",{className:"fa fa-exclamation-triangle sp-margin-s-top"}),zt.createElement("div",{className:"sp-margin-s-left"},zt.createElement(ke,{message:f,style:{display:"inline-block",marginLeft:"2px"}})))))}}class tl extends Mt.Component{constructor(){super(...arguments),this.state={accounts:void 0,availabilityZones:[],existingLoadBalancerNames:[],hideInternalFlag:!1,internalFlagToggled:!1,regions:[],subnets:[]},this.props$=new Ca,this.destroy$=new Ca,this.internalFlagChanged=e=>{this.setState({internalFlagToggled:!0}),this.props.formik.handleChange(e)},this.handleSubnetUpdated=e=>{this.props.formik.setFieldValue("subnetType",e)},this.accountUpdated=e=>{this.props.formik.setFieldValue("credentials",e)},this.regionUpdated=e=>{this.props.formik.setFieldValue("region",e)},this.stackChanged=e=>{this.props.formik.setFieldValue("stack",e.target.value)},this.detailChanged=e=>{this.props.formik.setFieldValue("detail",e.target.value)},this.handleAvailabilityZonesChanged=e=>{this.props.formik.setFieldValue("regionZones",e)}}validate(e){const t={};return this.state.existingLoadBalancerNames.includes(e.name)&&(t.name=`There is already a load balancer in ${e.credentials}:${e.region} with that name.`),e.name&&e.name.length>32&&(t.name="Load balancer names cannot exceed 32 characters in length"),e.stack&&!e.stack.match(/^[a-zA-Z0-9]*$/)&&(t.stack="Stack can only contain letters and numbers."),e.detail&&!e.detail.match(/^[a-zA-Z0-9-]*$/)&&(t.detail="Detail can only contain letters, numbers, and dashes."),t}buildName(){const{values:e}=this.props.formik;if(jt(e.moniker)){const t=le.parseLoadBalancerName(e.name);e.stack=t.stack,e.detail=t.freeFormDetails}else e.stack=e.moniker.stack,e.detail=e.moniker.detail;delete e.name}shouldHideInternalFlag(){return!!(hn&&hn.loadBalancers&&hn.loadBalancers.inferInternalFlagFromSubnet)&&(delete this.props.formik.values.isInternal,!0)}componentDidMount(){this.setState({hideInternalFlag:this.shouldHideInternalFlag()}),this.props.loadBalancer&&this.props.isNew&&this.buildName();const e=this.props$.pipe(Ia(e=>e.formik.values)),t=this.props$.pipe(Ia(e=>e.app.name),Pa()),a={account$:e.pipe(Ia(e=>e.credentials),Pa()),region$:e.pipe(Ia(e=>e.region),Pa()),subnetPurpose$:e.pipe(Ia(e=>e.subnetType),Pa()),stack$:e.pipe(Ia(e=>e.stack),Pa()),detail$:e.pipe(Ia(e=>e.detail),Pa())},n=Na(i.listAccounts("aws")).pipe(Aa(1)),r=wa([a.account$,n]).pipe(Ga(([e,t])=>i.getRegionsForAccount(e)),Aa(1)),l=this.props.app.getDataSource("loadBalancers").data$,s=wa([l,a.account$,a.region$]).pipe(Ia(([e,t,a])=>e.filter(e=>e.account===t&&e.region===a).map(e=>e.name)),Aa(1)),o=wa([a.account$,a.region$]).pipe(Ga(([e,t])=>this.getAvailableSubnets(e,t)),Ia(e=>this.makeSubnetOptions(e)),Aa(1)),c=wa([o,a.subnetPurpose$]).pipe(Ia(([e,t])=>e&&e.find(e=>e.purpose===t))),d=c.pipe(Ia(e=>e?aa(e.availabilityZones).sort():[])),m=a.region$.pipe(xa(r),Ia(([e,t])=>t.find(t=>t.name===e)),Ia(e=>e?e.availabilityZones:[])),u=wa([t,a.stack$,a.detail$]).pipe(Ia(([e,t,a])=>({app:e,stack:t,detail:a,cluster:le.getClusterName(e,t,a)})));r.pipe(xa(a.region$),Da(this.destroy$)).subscribe(([e,t])=>{e.some(e=>e.name===t)||this.props.formik.setFieldValue("region",e[0]&&e[0].name)}),m.pipe(Da(this.destroy$)).subscribe(e=>{this.props.formik.setFieldValue("regionZones",e)}),c.pipe(Da(this.destroy$)).subscribe(e=>{this.props.formik.setFieldValue("vpcId",e&&e.vpcIds[0]),this.props.formik.setFieldValue("subnetType",e&&e.purpose),!this.state.hideInternalFlag&&!this.state.internalFlagToggled&&e&&e.purpose&&this.props.formik.setFieldValue("isInternal",e.purpose.includes("internal"))}),u.pipe(Da(this.destroy$)).subscribe(e=>{this.props.formik.setFieldValue("moniker",e),this.props.formik.setFieldValue("name",e.cluster)}),wa([n,r,d,s,o]).pipe(Da(this.destroy$)).subscribe(([e,t,a,n,r])=>this.setState({accounts:e,regions:t,availabilityZones:a,existingLoadBalancerNames:n,subnets:r}))}componentDidUpdate(){this.props$.next(this.props)}componentWillUnmount(){this.destroy$.next()}getAvailableSubnets(e,t){return p.listSubnets().then(a=>Xt(a).filter({account:e,region:t}).reject({target:"ec2"}).reject({purpose:null}).value())}makeSubnetOptions(e){const t=ea(e,e=>e.purpose);return Object.keys(t).map(e=>t[e]).map(e=>(e=>{const{purpose:t,label:a,deprecated:n}=e[0];return{purpose:t,label:a,deprecated:n,vpcIds:aa(e.map(e=>e.vpcId)),availabilityZones:aa(e.map(e=>e.availabilityZone))}})(e))}render(){const{app:e}=this.props,{errors:a,values:n}=this.props.formik,{accounts:r,availabilityZones:l,hideInternalFlag:i,regions:s,subnets:o}=this.state,c=ba({"col-md-12":!0,well:!0,"alert-danger":!!a.name,"alert-info":!a.name});return Mt.createElement("div",{className:"container-fluid form-horizontal"},!r&&Mt.createElement("div",{style:{height:"200px"}},Mt.createElement(ne,{size:"medium"})),r&&Mt.createElement("div",{className:"modal-body"},Mt.createElement("div",{className:"form-group"},Mt.createElement("div",{className:c},Mt.createElement("strong",null,"Your load balancer will be named: "),Mt.createElement("span",null,n.name),Mt.createElement(t,{id:"aws.loadBalancer.name"}),Mt.createElement(en,{type:"text",style:{display:"none"},className:"form-control input-sm no-spel",name:"name"}),a.name&&Mt.createElement(ge,{type:"error",message:a.name}))),Mt.createElement("div",{className:"form-group"},Mt.createElement("div",{className:"col-md-3 sm-label-right"},"Account"),Mt.createElement("div",{className:"col-md-7"},Mt.createElement(Te,{value:n.credentials,onChange:e=>this.accountUpdated(e.target.value),accounts:r,provider:"aws"}))),Mt.createElement(Ie,{labelColumns:3,component:n,field:"region",account:n.credentials,onChange:this.regionUpdated,regions:s}),Mt.createElement("div",{className:"form-group"},Mt.createElement("div",{className:"col-md-3 sm-label-right"},"Stack ",Mt.createElement(t,{id:"aws.loadBalancer.stack"})),Mt.createElement("div",{className:"col-md-3"},Mt.createElement("input",{type:"text",className:"form-control input-sm no-spel "+(a.stack?"invalid":""),value:n.stack,name:"stack",onChange:this.stackChanged})),Mt.createElement("div",{className:"col-md-6 form-inline"},Mt.createElement("label",{className:"sm-label-right"},Mt.createElement("span",null,"Detail ",Mt.createElement(t,{id:"aws.loadBalancer.detail"})," ")),Mt.createElement("input",{type:"text",className:"form-control input-sm no-spel "+(a.detail?"invalid":""),value:n.detail,name:"detail",onChange:this.detailChanged})),a.stack&&Mt.createElement("div",{className:"col-md-7 col-md-offset-3"},Mt.createElement(ge,{type:"error",message:a.stack})),a.detail&&Mt.createElement("div",{className:"col-md-7 col-md-offset-3"},Mt.createElement(ge,{type:"error",message:a.detail}))),Mt.createElement(Jr,{credentials:n.credentials,region:n.region,onChange:this.handleAvailabilityZonesChanged,selectedZones:n.regionZones,allZones:l}),Mt.createElement(el,{labelColumns:3,helpKey:"aws.loadBalancer.subnet",component:n,field:"subnetType",region:n.region,subnets:o,application:e,onChange:()=>this.handleSubnetUpdated(n.subnetType)}),n.vpcId&&!i&&Mt.createElement("div",{className:"form-group"},Mt.createElement("div",{className:"col-md-3 sm-label-right"},Mt.createElement("b",null,"Internal")," ",Mt.createElement(t,{id:"aws.loadBalancer.internal"})),Mt.createElement("div",{className:"col-md-7 checkbox"},Mt.createElement("label",null,Mt.createElement(en,{name:"isInternal",onChange:this.internalFlagChanged,render:({field:{value:e,...t}})=>Mt.createElement("input",{type:"checkbox",...t,checked:!!e})}),"Create an internal load balancer")))))}}class al extends Mt.Component{constructor(e){super(e),this.destroy$=new Ca,this.props$=new Ca,this.refresh$=new Ca,this.getRefreshTime=()=>{var e;return(null==(e=Pe.get("securityGroups"))?void 0:e.getStats().ageMax)||0},this.clearRemoved=()=>{this.setState({removed:[]},()=>this.props.formik.validateForm())},this.handleSecurityGroupsChanged=e=>{this.props.formik.setFieldValue("securityGroups",e.map(e=>e.value))};const t=ta(hn,"defaultSecurityGroups",[]);this.state={availableSecurityGroups:[],defaultSecurityGroups:t,loaded:!1,refreshing:!1,removed:[],refreshTime:this.getRefreshTime()}}validate(){const{removed:e}=this.state;if(e&&e.length){return{securityGroupsRemoved:`${R.get("Firewalls")} removed: ${e.join(", ")}`}}return{}}updateRemovedSecurityGroups(e,t){const{isNew:a}=this.props,{defaultSecurityGroups:n,removed:r}=this.state,l=e=>t.find(t=>t.name===e||t.id===e),[i,s]=sa((()=>{const t=e.concat(r).sort();return aa((a?n:[]).concat(t))})(),e=>!!l(e)),o=i.map(e=>l(e).name);_t(e,o)||this.props.formik.setFieldValue("securityGroups",o),this.setState({removed:s},()=>this.props.formik.validateForm())}onRefreshStart(){this.props.onLoadingChanged(!0),this.setState({refreshing:!0})}onRefreshComplete(){this.props.onLoadingChanged(!1);const e=this.getRefreshTime();this.setState({refreshing:!1,loaded:!0,refreshTime:e})}componentDidMount(){const e=this.refresh$.pipe(Ba(()=>this.onRefreshStart()),Ga(()=>this.context.services.cacheInitializer.refreshCache("securityGroups")),Fa(()=>this.context.services.securityGroupReader.getAllSecurityGroups()),Ba(()=>this.onRefreshComplete())),t=this.props$.pipe(Ia(e=>e.formik.values)),a=t.pipe(Ia(e=>e.vpcId),Pa());wa([a,e]).pipe(xa(t),Ia(([[e,t],a])=>{const n=t[a.credentials]||{};return(n.aws&&n.aws[a.region]||[]).filter(t=>e===t.vpcId).sort()})).pipe(xa(t),Da(this.destroy$)).subscribe(([e,t])=>{this.setState({availableSecurityGroups:e.map(e=>({label:`${e.name} (${e.id})`,value:e.name}))}),this.updateRemovedSecurityGroups(t.securityGroups,e)}),this.refresh$.next()}componentDidUpdate(){this.props$.next(this.props)}componentWillUnmount(){this.destroy$.next(),this.destroy$.complete()}render(){const{securityGroups:e}=this.props.formik.values,{availableSecurityGroups:t,loaded:a,refreshing:n,removed:r,refreshTime:l}=this.state;return Mt.createElement("div",{className:"container-fluid form-horizontal"},Mt.createElement("div",null,r.length>0&&Mt.createElement("div",{className:"form-group"},Mt.createElement("div",{className:"col-md-12"},Mt.createElement("div",{className:"alert alert-warning"},Mt.createElement("p",null,Mt.createElement("i",{className:"fa fa-exclamation-triangle"}),"The following ",R.get("firewalls")," could not be found in the selected account/region/VPC and were removed:"),Mt.createElement("ul",null,r.map(e=>Mt.createElement("li",{key:e},e))),Mt.createElement("p",{className:"text-right"},Mt.createElement("a",{className:"btn btn-sm btn-default dirty-flag-dismiss clickable",onClick:this.clearRemoved},"Okay"))))),Mt.createElement("div",{className:"form-group"},Mt.createElement("div",{className:"col-md-3 sm-label-right"},R.get("Firewalls")),Mt.createElement("div",{className:"col-md-9"},!a&&Mt.createElement("div",{style:{paddingTop:"13px"}},Mt.createElement(ne,{size:"small"})),a&&Mt.createElement(tn,{multi:!0,value:e,options:t,onChange:this.handleSecurityGroupsChanged,clearable:!1}))),Mt.createElement("div",{className:"form-group small",style:{marginTop:"20px"}},Mt.createElement("div",{className:"col-md-9 col-md-offset-3"},Mt.createElement("p",null,n&&Mt.createElement("span",null,Mt.createElement("span",{className:"fa fa-sync-alt fa-spin"})," "),R.get("Firewalls"),!n&&Mt.createElement("span",null," last refreshed ",B(l)),n&&Mt.createElement("span",null," refreshing...")),Mt.createElement("p",null,"If you're not finding a ",R.get("firewall")," that was recently added,"," ",Mt.createElement("a",{className:"clickable",onClick:()=>this.refresh$.next()},"click here")," ","to refresh the list.")))))}}al.contextType=g;Cr(".wizard-pod {\n padding-bottom: 15px;\n}\n.wizard-pod > div {\n border: 1px solid var(--color-cirrus);\n}\n.wizard-pod .wizard-pod-row {\n display: flex;\n padding: 5px;\n border-bottom: 1px solid var(--color-cirrus);\n}\n.wizard-pod .wizard-pod-row label {\n font-weight: 400;\n padding-right: 5px;\n}\n.wizard-pod .wizard-pod-row.header {\n background-color: var(--color-cirrus);\n}\n.wizard-pod .wizard-pod-row.header .glyphicon-trash {\n padding: 0 8px;\n}\n.wizard-pod .wizard-pod-row.header .wizard-pod-row-contents .wizard-pod-row-title {\n font-weight: 800;\n}\n.wizard-pod .wizard-pod-row.header .wizard-pod-row-contents .wizard-pod-row-data {\n flex-wrap: nowrap;\n padding: 0;\n}\n.wizard-pod .wizard-pod-row.header .wizard-pod-row-contents .wizard-pod-row-data label {\n font-weight: 600;\n}\n.wizard-pod .wizard-pod-row.header .wizard-pod-row-contents .wizard-pod-row-data .wizard-pod-content {\n padding: 0 10px 0 0;\n}\n.wizard-pod .wizard-pod-row .wizard-pod-row-title {\n display: flex;\n align-items: center;\n max-height: 37px;\n flex-basis: 120px;\n flex-direction: row-reverse;\n font-weight: 600;\n text-align: right;\n margin-right: 10px;\n width: 100px;\n}\n.wizard-pod .wizard-pod-row .wizard-pod-row-contents {\n display: flex;\n width: 100%;\n align-items: baseline;\n flex-wrap: wrap;\n}\n.wizard-pod .wizard-pod-row .wizard-pod-row-contents .wizard-pod-row-data {\n display: flex;\n width: 100%;\n align-items: baseline;\n flex-wrap: wrap;\n padding: 5px 0;\n}\n.wizard-pod .wizard-pod-row .wizard-pod-row-contents .wizard-pod-row-data.spread {\n justify-content: space-between;\n}\n.wizard-pod .wizard-pod-row .wizard-pod-row-contents .wizard-pod-row-data .wizard-pod-content {\n padding: 0 10px 5px 0;\n display: flex;\n align-items: center;\n}\n.wizard-pod .wizard-pod-row .wizard-pod-row-contents .wizard-pod-row-data .group-name-prefix {\n flex-grow: 2;\n white-space: nowrap;\n}\n.wizard-pod .wizard-pod-row .wizard-pod-row-contents .wizard-pod-row-data .rules-table thead th {\n font-weight: 600;\n}\n.wizard-pod .wizard-pod-row .wizard-pod-row-contents .wizard-pod-row-data .rules-table td {\n vertical-align: middle;\n}\n.wizard-pod .wizard-pod-row .wizard-pod-row-contents .wizard-pod-row-data .rules-table > tbody > tr:first-child > td {\n border-top: none;\n}\n.wizard-pod .wizard-pod-row .wizard-pod-row-contents .wizard-pod-row-errors {\n display: flex;\n width: 100%;\n}\n.wizard-pod .listener-rule .handle {\n cursor: move;\n width: 10px;\n padding: 0;\n}\n.wizard-pod .listener-rule .listener-rule-condition {\n display: flex;\n}\n.wizard-pod .listener-rule .listener-rule-condition label {\n white-space: nowrap;\n}\n.wizard-pod .listener-rule .listener-rule-condition .help-field > span {\n top: 4px;\n padding: 0 2px;\n}\n.wizard-pod .listener-rule .listener-rule-condition .remove-condition {\n min-width: 15px;\n padding-top: 4px;\n}\n.wizard-pod .listener-rule .add-new-container {\n display: flex;\n}\n.wizard-pod .listener-rule .add-new-container .add-new {\n padding: 2px;\n margin-bottom: 0;\n}\n.rule-sortable-helper {\n z-index: 99999;\n width: 500px;\n}\n");class nl extends Mt.Component{constructor(e){super(e),this._isUnmounted=!1,this.certificateTypes=ta(hn,"loadBalancers.certificateTypes",["iam","acm"]),this.submit=e=>{const{app:t,forPipelineConfig:a,closeModal:n}=this.props,{isNew:r}=this.state,l=r?"Create":"Update",i=Ht(e);if(i.listeners.forEach(e=>{e.defaultActions.forEach(e=>{e.authenticateOidcConfig&&(e.authenticateOidcActionConfig=e.authenticateOidcConfig,delete e.authenticateOidcConfig)}),e.rules.forEach(e=>e.actions.forEach(e=>{e.authenticateOidcConfig&&(e.authenticateOidcActionConfig=e.authenticateOidcConfig,delete e.authenticateOidcConfig)}))}),a)this.formatListeners(i).then(()=>{this.setIpAddressType(i),n&&n(i)});else{const e=new v({application:t,title:(r?"Creating":"Updating")+" your load balancer",onDismiss:()=>this.props.dismissModal(),onTaskComplete:()=>this.onTaskComplete(i)});e.submit(()=>this.formatListeners(i).then(()=>(this.formatCommand(i),Ae.upsertLoadBalancer(i,t,l)))),this.setState({taskMonitor:e})}};const t=e.command?e.command:e.loadBalancer?Ar.convertApplicationLoadBalancerForEditing(e.loadBalancer):Ar.constructNewApplicationLoadBalancerTemplate(e.app);this.state={includeSecurityGroups:!!t.vpcId,isNew:!e.loadBalancer,loadBalancerCommand:t,taskMonitor:null}}static show(e,t){return E.show(rl,e,{dialogClassName:"wizard-modal modal-lg"},t)}certificateIdAsARN(e,t,a,n){if(t&&(0!==t.indexOf("arn:aws:iam::")||0!==t.indexOf("arn:aws:acm:"))){if("iam"===n)return`arn:aws:iam::${e}:server-certificate/${t}`;if("acm"===n)return`arn:aws:acm:${a}:${e}:certificate/${t}`}return t}formatListeners(e){return i.getAccountDetails(e.credentials).then(t=>{e.listeners.forEach(a=>{"HTTP"===a.protocol&&(delete a.sslPolicy,a.certificates=[]),a.certificates.forEach(a=>{a.certificateArn=this.certificateIdAsARN(t.accountId,a.name,e.region,a.type||this.certificateTypes[0])})})})}setAvailabilityZones(e){const t={};t[e.region]=e.regionZones||[],e.availabilityZones=t}addAppName(e){return`${this.props.app.name}-${e}`}manageTargetGroupNames(e){(e.targetGroups||[]).forEach(e=>{e.name=this.addAppName(e.name)}),(e.listeners||[]).forEach(e=>{e.defaultActions.forEach(e=>{e.targetGroupName&&(e.targetGroupName=this.addAppName(e.targetGroupName))}),(e.rules||[]).forEach(e=>{e.actions.forEach(e=>{e.targetGroupName&&(e.targetGroupName=this.addAppName(e.targetGroupName))})})})}manageRules(e){e.listeners.forEach(e=>{e.rules.forEach((e,t)=>{e.priority=t+1,e.conditions=e.conditions.filter(e=>"http-request-method"!==e.field?e.values[0].length>0:e.values.length>0)})})}setIpAddressType(e){e.ipAddressType=e.dualstack?"dualstack":"ipv4",delete e.dualstack}formatCommand(e){this.setAvailabilityZones(e),this.manageTargetGroupNames(e),this.manageRules(e),this.setIpAddressType(e)}onApplicationRefresh(e){var t;if(null==(t=this.refreshUnsubscribe)||t.call(this),this.refreshUnsubscribe=void 0,this._isUnmounted)return;this.props.dismissModal(),this.setState({taskMonitor:void 0});const a={name:e.name,accountId:e.credentials,region:e.region,vpcId:e.vpcId,provider:"aws"};this.props.stateService.includes("**.loadBalancerDetails")?this.props.stateService.go("^.loadBalancerDetails",a):this.props.stateService.go(".loadBalancerDetails",a)}componentWillUnmount(){var e;this._isUnmounted=!0,null==(e=this.refreshUnsubscribe)||e.call(this),this.refreshUnsubscribe=void 0}onTaskComplete(e){var t;null==(t=this.refreshUnsubscribe)||t.call(this),this.refreshUnsubscribe=void 0,this.refreshUnsubscribe=this.props.app.loadBalancers.onNextRefresh(()=>this.onApplicationRefresh(e)),this.props.app.loadBalancers.refresh()}render(){const{app:e,dismissModal:t,forPipelineConfig:a,loadBalancer:n}=this.props,{isNew:r,loadBalancerCommand:l,taskMonitor:i}=this.state;let s=a?"Configure Application Load Balancer":"Create New Application Load Balancer";return r||(s=`Edit ${l.name}: ${l.region}: ${l.credentials}`),Mt.createElement(y,{heading:s,initialValues:l,taskMonitor:i,dismissModal:t,closeModal:this.submit,submitButtonLabel:a?r?"Add":"Done":r?"Create":"Update",render:({formik:t,nextIdx:l,wizard:i})=>{const s=r||a,o=!!t.values.vpcId;return Mt.createElement(Mt.Fragment,null,s&&Mt.createElement(b,{label:"Location",wizard:i,order:l(),render:({innerRef:l})=>Mt.createElement(tl,{app:e,forPipelineConfig:a,formik:t,isNew:r,loadBalancer:n,ref:l})}),o&&Mt.createElement(b,{label:R.get("Firewalls"),wizard:i,order:l(),render:({innerRef:e,onLoadingChanged:a})=>Mt.createElement(al,{formik:t,isNew:r,onLoadingChanged:a,ref:e})}),Mt.createElement(b,{label:"Target Groups",wizard:i,order:l(),render:({innerRef:a})=>Mt.createElement(Xr,{ref:a,app:e,formik:t,isNew:r,loadBalancer:n})}),Mt.createElement(b,{label:"Listeners",wizard:i,order:l(),render:({innerRef:a})=>Mt.createElement(qr,{ref:a,app:e,formik:t})}),Mt.createElement(b,{label:"Advanced Settings",wizard:i,order:l(),render:({innerRef:e})=>Mt.createElement(zr,{ref:e})}))}})}}nl.defaultProps={closeModal:C,dismissModal:C};const rl=Object.assign(N(nl),{show:nl.show});Cr(".AmazonLoadBalancer-AdvancedSettings .StandardFieldLayout .sm-label-right {\n width: 180px;\n}\n");class ll extends Mt.Component{render(){const{values:e}=this.props.formik,{maxValue:a}=fe;return Mt.createElement("div",{className:"form-group AmazonLoadBalancer-AdvancedSettings"},Mt.createElement(r,{name:"healthTimeout",label:"Timeout",required:!0,help:Mt.createElement(t,{id:"loadBalancer.advancedSettings.healthTimeout"}),input:t=>Mt.createElement(d,{...t,min:0,max:e.healthInterval}),validate:a(e.healthInterval,"Timeout must be less than the health interval.")}),Mt.createElement(r,{name:"healthInterval",label:"Interval",required:!0,help:Mt.createElement(t,{id:"loadBalancer.advancedSettings.healthInterval"}),input:e=>Mt.createElement(d,{...e,min:0})}),Mt.createElement(r,{name:"healthyThreshold",label:"Healthy Threshold",required:!0,help:Mt.createElement(t,{id:"loadBalancer.advancedSettings.healthyThreshold"}),input:e=>Mt.createElement(d,{...e,min:0})}),Mt.createElement(r,{name:"unhealthyThreshold",label:"Unhealthy Threshold",required:!0,help:Mt.createElement(t,{id:"loadBalancer.advancedSettings.unhealthyThreshold"}),input:e=>Mt.createElement(d,{...e,min:0})}),Mt.createElement(r,{name:"idleTimeout",label:"Idle Timeout",required:!0,help:Mt.createElement(t,{id:"loadBalancer.advancedSettings.idleTimeout"}),input:e=>Mt.createElement(d,{...e,min:0})}),Mt.createElement("div",{className:"col-md-12"},Mt.createElement("p",null,"Additional configuration options (cross-zone load balancing, session stickiness, access logs) are available via the AWS console.")))}}class il extends Mt.Component{constructor(){super(...arguments),this.healthCheckPathChanged=e=>{e&&0!==e.indexOf("/")&&this.props.formik.setFieldValue("healthCheckPath",`/${e}`)}}requiresHealthCheckPath(){const{values:e}=this.props.formik;return e.healthCheckProtocol&&0===e.healthCheckProtocol.indexOf("HTTP")}render(){return Mt.createElement("div",{className:"container-fluid form-horizontal"},Mt.createElement("div",{className:"col-md-4 sm-label-right"},"Ping"),Mt.createElement("div",{className:"col-md-8"},Mt.createElement("table",{className:"table table-condensed packed"},Mt.createElement("thead",null,Mt.createElement("tr",null,Mt.createElement("th",{style:{width:"35%"}},"Protocol"),Mt.createElement("th",{style:{width:"30%"}},"Port"),Mt.createElement("th",null,this.requiresHealthCheckPath()&&Mt.createElement("span",null,"Path")))),Mt.createElement("tbody",null,Mt.createElement("tr",null,Mt.createElement("td",null,Mt.createElement(r,{name:"healthCheckProtocol",required:!0,input:e=>Mt.createElement(pe,{...e,options:["HTTP","HTTPS","SSL","TCP"]})})),Mt.createElement("td",null,Mt.createElement(r,{name:"healthCheckPort",required:!0,input:e=>Mt.createElement(d,{...e,min:1,max:65534})})),Mt.createElement("td",null,this.requiresHealthCheckPath()&&Mt.createElement(r,{name:"healthCheckPath",input:e=>Mt.createElement(l,{...e}),required:!0,onChange:this.healthCheckPathChanged})))))))}}Cr(".create-classic-load-balancer-wizard-listeners .Select-control {\n height: 30px;\n}\n.create-classic-load-balancer-wizard-listeners .Select-control .Select-placeholder {\n line-height: 26px;\n}\n.create-classic-load-balancer-wizard-listeners .Select-control .Select-value {\n line-height: 26px !important;\n}\n.create-classic-load-balancer-wizard-listeners .Select-control .Select-value .Select-value-label {\n line-height: 26px;\n}\n.create-classic-load-balancer-wizard-listeners .Select-control .Select-input {\n height: 26px;\n}\n");class sl extends Mt.Component{constructor(){super(...arguments),this.protocols=["HTTP","HTTPS","TCP","SSL"],this.secureProtocols=["HTTPS","SSL"],this.certificateTypes=ta(hn,"loadBalancers.certificateTypes",["iam","acm"]),this.state={certificates:[]},this.addListener=()=>{this.props.formik.values.listeners.push({internalProtocol:"HTTP",externalProtocol:"HTTP",externalPort:80,internalPort:80}),this.updateListeners()}}componentDidMount(){this.loadCertificates()}loadCertificates(){Ur.listCertificates().then(e=>{this.setState({certificates:e})})}updateListeners(){const{values:e,setFieldValue:t}=this.props.formik;t("listeners",e.listeners)}showCertificateSelect(e){return"iam"===e.sslCertificateType&&this.state.certificates&&Object.keys(this.state.certificates).length>0}listenerExternalProtocolChanged(e,t){e.externalProtocol=t,this.secureProtocols.includes(t)&&(e.externalPort=443,this.certificateTypes.length>=1&&(e.sslCertificateType=this.certificateTypes[0])),"HTTP"===t&&(e.externalPort=80),this.updateListeners()}listenerInternalProtocolChanged(e,t){e.internalProtocol=t,this.updateListeners()}listenerExternalPortChanged(e,t){e.externalPort=Number.parseInt(t,10),this.updateListeners()}listenerInternalPortChanged(e,t){e.internalPort=Number.parseInt(t,10),this.updateListeners()}listenerCertificateTypeChanged(e,t){e.sslCertificateType=t,this.updateListeners()}handleListenerCertificateChanged(e,t){e.sslCertificateName=t,this.updateListeners()}removeListener(e){this.props.formik.values.listeners.splice(e,1),this.updateListeners()}renderCertificateSelector(e){if(this.secureProtocols.includes(e.externalProtocol)){if(this.showCertificateSelect(e)){const{values:t}=this.props.formik,{certificates:a}=this.state;return Mt.createElement(Fr,{certificates:a,accountName:t.credentials,currentValue:e.sslCertificateName,app:this.props.app,onCertificateSelect:t=>this.handleListenerCertificateChanged(e,t)})}return Mt.createElement("input",{className:"input-sm",style:{width:"100%",marginLeft:"10px"},required:!0,onChange:t=>this.handleListenerCertificateChanged(e,t.target.value),value:e.sslCertificateName})}return null}render(){const{values:e}=this.props.formik;return Mt.createElement("div",{className:"container-fluid form-horizontal create-classic-load-balancer-wizard-listeners"},Mt.createElement("div",{className:"form-group"},Mt.createElement("div",{className:"col-md-12"},Mt.createElement("table",{className:"table table-condensed packed"},Mt.createElement("thead",null,Mt.createElement("tr",null,Mt.createElement("th",null,"External Protocol"),Mt.createElement("th",null,"External Port"),Mt.createElement("th",null),Mt.createElement("th",null,"Internal Protocol"),Mt.createElement("th",null,"Internal Port"),Mt.createElement("th",null))),Mt.createElement("tbody",null,e.listeners.map((e,t)=>Mt.createElement(Mt.Fragment,{key:t},Mt.createElement("tr",{key:t+"-main"},Mt.createElement("td",null,Mt.createElement("select",{className:"form-control input-sm",value:e.externalProtocol,onChange:t=>this.listenerExternalProtocolChanged(e,t.target.value)},this.protocols.map(e=>Mt.createElement("option",{key:e},e)))),Mt.createElement("td",null,Mt.createElement("input",{className:"form-control input-sm",type:"number",min:"0",value:e.externalPort,onChange:t=>this.listenerExternalPortChanged(e,t.target.value),required:!0})),Mt.createElement("td",{className:"small",style:{paddingTop:"10px"}},"→"),Mt.createElement("td",null,Mt.createElement("select",{className:"form-control input-sm",value:e.internalProtocol,onChange:t=>this.listenerInternalProtocolChanged(e,t.target.value)},this.protocols.map(e=>Mt.createElement("option",{key:e},e)))),Mt.createElement("td",null,Mt.createElement("input",{className:"form-control input-sm",type:"number",min:"0",value:e.internalPort,onChange:t=>this.listenerInternalPortChanged(e,t.target.value),required:!0})),Mt.createElement("td",null,Mt.createElement("a",{className:"sm-label clickable",onClick:()=>this.removeListener(t)},Mt.createElement("span",{className:"glyphicon glyphicon-trash"})))),this.secureProtocols.includes(e.externalProtocol)&&Mt.createElement("tr",{key:t+"-ssl"},Mt.createElement("td",{colSpan:5,style:{borderTopWidth:0}},Mt.createElement("div",{className:"horizontal space-between"},Mt.createElement("div",{className:"sm-label-right"},"Certificate"),this.certificateTypes.length>1&&Mt.createElement("select",{style:{width:"45px",marginLeft:"10px"},className:"form-control input-sm",value:e.sslCertificateType,onChange:t=>this.listenerCertificateTypeChanged(e,t.target.value)},this.certificateTypes.map(e=>Mt.createElement("option",{key:e},e))),this.renderCertificateSelector(e))))))),Mt.createElement("tfoot",null,Mt.createElement("tr",null,Mt.createElement("td",{colSpan:5},Mt.createElement("button",{className:"add-new col-md-12",onClick:this.addListener,type:"button"},Mt.createElement("span",{className:"glyphicon glyphicon-plus-sign"}),Mt.createElement("span",null," Add new port mapping")))))))))}}class ol extends Mt.Component{constructor(e){super(e),this._isUnmounted=!1,this.certificateTypes=ta(hn,"loadBalancers.certificateTypes",["iam","acm"]),this.submit=e=>{const{app:t,forPipelineConfig:a,closeModal:n}=this.props,{isNew:r}=this.state,l=r?"Create":"Update",i=Ht(e);if(a)this.formatListeners(i).then(()=>{n&&n(i)});else{const e=new v({application:t,title:(r?"Creating":"Updating")+" your load balancer",onDismiss:()=>this.props.dismissModal(),onTaskComplete:()=>this.onTaskComplete(i)});e.submit(()=>this.formatListeners(i).then(()=>(this.formatCommand(i),Ae.upsertLoadBalancer(i,t,l)))),this.setState({taskMonitor:e})}},this.validate=e=>({});const t=e.command?e.command:e.loadBalancer?Ar.convertClassicLoadBalancerForEditing(e.loadBalancer):Ar.constructNewClassicLoadBalancerTemplate(e.app);this.state={isNew:!e.loadBalancer,loadBalancerCommand:t,taskMonitor:null}}static show(e,t){return E.show(cl,e,{dialogClassName:"wizard-modal modal-lg"},t)}certificateIdAsARN(e,t,a,n){if(t&&(0!==t.indexOf("arn:aws:iam::")||0!==t.indexOf("arn:aws:acm:"))){if("iam"===n)return`arn:aws:iam::${e}:server-certificate/${t}`;if("acm"===n)return`arn:aws:acm:${a}:${e}:certificate/${t}`}return t}formatListeners(e){return i.getAccountDetails(e.credentials).then(t=>{e.listeners.forEach(a=>{a.sslCertificateId=this.certificateIdAsARN(t.accountId,a.sslCertificateName,e.region,a.sslCertificateType||this.certificateTypes[0])})})}clearSecurityGroupsIfNotInVpc(e){e.vpcId||e.subnetType||(e.securityGroups=null)}addHealthCheckToCommand(e){let t=null;const a=e.healthCheckProtocol||"";t=a.startsWith("HTTP")?`${a}:${e.healthCheckPort}${e.healthCheckPath}`:`${a}:${e.healthCheckPort}`,e.healthCheck=t}setAvailabilityZones(e){const t={};t[e.region]=e.regionZones||[],e.availabilityZones=t}formatCommand(e){this.setAvailabilityZones(e),this.clearSecurityGroupsIfNotInVpc(e),this.addHealthCheckToCommand(e)}onApplicationRefresh(e){var t;if(null==(t=this.refreshUnsubscribe)||t.call(this),this.refreshUnsubscribe=void 0,this._isUnmounted)return;this.props.dismissModal(),this.setState({taskMonitor:void 0});const a={name:e.name,accountId:e.credentials,region:e.region,vpcId:e.vpcId,provider:"aws"};this.props.stateService.includes("**.loadBalancerDetails")?this.props.stateService.go("^.loadBalancerDetails",a):this.props.stateService.go(".loadBalancerDetails",a)}componentWillUnmount(){var e;this._isUnmounted=!0,null==(e=this.refreshUnsubscribe)||e.call(this),this.refreshUnsubscribe=void 0}onTaskComplete(e){var t;null==(t=this.refreshUnsubscribe)||t.call(this),this.refreshUnsubscribe=void 0,this.refreshUnsubscribe=this.props.app.loadBalancers.onNextRefresh(()=>this.onApplicationRefresh(e)),this.props.app.loadBalancers.refresh()}render(){const{app:e,dismissModal:t,forPipelineConfig:a,loadBalancer:n}=this.props,{isNew:r,loadBalancerCommand:l,taskMonitor:i}=this.state,s=r||a;let o=a?"Configure Classic Load Balancer":"Create New Classic Load Balancer";return r||(o=`Edit ${l.name}: ${l.region}: ${l.credentials}`),Mt.createElement(y,{heading:o,initialValues:l,taskMonitor:i,dismissModal:t,closeModal:this.submit,submitButtonLabel:a?r?"Add":"Done":r?"Create":"Update",validate:this.validate,render:({formik:t,nextIdx:l,wizard:i})=>Mt.createElement(Mt.Fragment,null,s&&Mt.createElement(b,{label:"Location",wizard:i,order:l(),render:({innerRef:l})=>Mt.createElement(tl,{app:e,formik:t,isNew:r,forPipelineConfig:a,loadBalancer:n,ref:l})}),!!t.values.vpcId&&Mt.createElement(b,{label:R.get("Firewall"),wizard:i,order:l(),render:({innerRef:e,onLoadingChanged:a})=>Mt.createElement(al,{formik:t,isNew:r,onLoadingChanged:a,ref:e})}),Mt.createElement(b,{label:"Listeners",wizard:i,order:l(),render:({innerRef:a})=>Mt.createElement(sl,{ref:a,formik:t,app:e})}),Mt.createElement(b,{label:"Health Check",wizard:i,order:l(),render:({innerRef:e})=>Mt.createElement(il,{ref:e,formik:t})}),Mt.createElement(b,{label:"Advanced Settings",wizard:i,order:l(),render:({innerRef:e})=>Mt.createElement(ll,{ref:e,formik:t})}))})}}ol.defaultProps={closeModal:C,dismissModal:C};const cl=Object.assign(N(ol),{show:ol.show}),dl=Mt.forwardRef((e,a)=>Mt.createElement("div",{ref:a},Mt.createElement(r,{name:"deletionProtection",label:"Protection",help:Mt.createElement(t,{id:"loadBalancer.advancedSettings.deletionProtection"}),input:e=>Mt.createElement(o,{...e,text:"Enable deletion protection"})}),Mt.createElement(r,{name:"loadBalancingCrossZone",label:"Cross-Zone Load Balancing",help:Mt.createElement(t,{id:"loadBalancer.advancedSettings.loadBalancingCrossZone"}),input:e=>Mt.createElement(o,{...e,text:"Distribute traffic across zones"})}),e.showDualstack&&Mt.createElement(r,{name:"dualstack",label:"Dualstack",help:Mt.createElement(t,{id:"loadBalancer.advancedSettings.nlbIpAddressType"}),input:e=>Mt.createElement(o,{...e,text:"Assign Ipv4 and IPv6"})})));function ml({availableCertificates:e,certificates:t,formik:a,app:n,certificateTypes:r}){function l(){a.setFieldValue("listeners",a.values.listeners)}function i(e,t){e.name=t,l()}function s(e){return"iam"===e.type&&t&&Object.keys(t).length>0}const{values:o}=a;return Mt.createElement("div",{className:"wizard-pod-row"},Mt.createElement("div",{className:"wizard-pod-row-title"},"Certificate"),Mt.createElement("div",{className:"wizard-pod-row-contents"},e.map((e,a)=>Mt.createElement("div",{key:a,style:{width:"100%",display:"flex",flexDirection:"row"}},Mt.createElement("select",{className:"form-control input-sm inline-number",style:{width:"45px"},value:e.type,onChange:t=>function(e,t){e.type=t,l()}(e,t.target.value)},r.map(e=>Mt.createElement("option",{key:e},e))),s(e)&&Mt.createElement(Fr,{certificates:t,accountName:o.credentials,currentValue:e.name,app:n,onCertificateSelect:t=>i(e,t)}),!s(e)&&Mt.createElement("input",{className:"form-control input-sm no-spel",style:{display:"inline-block"},type:"text",value:e.name,onChange:t=>i(e,t.target.value),required:!0})))))}class ul extends Mt.Component{constructor(e){super(e),this.protocols=["TCP","UDP","TLS"],this.removedAuthActions=new Map,this.addListener=()=>{this.props.formik.values.listeners.push({certificates:[],protocol:"TCP",port:80,defaultActions:[{type:"forward",targetGroupName:""}],rules:[]}),this.updateListeners()},this.handleDefaultTargetChanged=(e,t)=>{e.defaultActions[0].targetGroupName=t,this.updateListeners()},this.state={certificates:[],certificateTypes:ta(hn,"loadBalancers.certificateTypes",["iam","acm"]),oidcConfigs:void 0}}getAllTargetGroupsFromListeners(e){const t=Wt(e.map(e=>e.defaultActions)),a=Wt(e.map(e=>e.rules));return t.push(...Wt(a.map(e=>e.actions))),aa(t.map(e=>e.targetGroupName))}validate(e){const t={},a=e.targetGroups.map(e=>e.name),n=this.getAllTargetGroupsFromListeners(e.listeners),r=na(a,n);1===r.length?t.listeners=`Target group ${r[0]} is unused.`:r.length>1&&(t.listeners=`Target groups ${r.join(", ")} are unused.`);const{listeners:l}=e;return Vt(l,"port").length<l.length&&(t.listenerPorts="Multiple listeners cannot use the same port."),t}updateListeners(){this.props.formik.setFieldValue("listeners",this.props.formik.values.listeners)}componentDidMount(){this.loadCertificates()}addListenerCertificate(e){e.certificates=e.certificates||[],e.certificates.push({certificateArn:void 0,type:"iam",name:void 0})}loadCertificates(){Ur.listCertificates().then(e=>{this.setState({certificates:e})})}listenerProtocolChanged(e,t){e.protocol=t,"TCP"===e.protocol?e.port=80:"UDP"===e.protocol?e.port=53:"TLS"===e.protocol&&(e.port=443,e.certificates&&0!==e.certificates.length||this.addListenerCertificate(e),this.reenableAuthActions(e)),this.updateListeners()}reenableAuthActions(e){const t=this.removedAuthActions.has(e)?this.removedAuthActions.get(e):[],a=t[-1];a&&(t[-1]=void 0,e.defaultActions.unshift({...a})),e.rules.forEach((e,a)=>{const n=t[a];t[a]=void 0,n&&e.actions.unshift({...n})})}listenerPortChanged(e,t){e.port=Number.parseInt(t,10),this.updateListeners()}removeListener(e){this.props.formik.values.listeners.splice(e,1),this.updateListeners()}render(){const{errors:e,values:t}=this.props.formik,{certificates:a,certificateTypes:n}=this.state;return Mt.createElement("div",{className:"container-fluid form-horizontal"},Mt.createElement("div",{className:"form-group"},Mt.createElement("div",{className:"col-md-12"},t.listeners.map((e,r)=>Mt.createElement("div",{key:r,className:"wizard-pod"},Mt.createElement("div",null,Mt.createElement("div",{className:"wizard-pod-row header"},Mt.createElement("div",{className:"wizard-pod-row-title"},"Listen On"),Mt.createElement("div",{className:"wizard-pod-row-contents spread"},Mt.createElement("div",null,Mt.createElement("span",{className:"wizard-pod-content"},Mt.createElement("label",null,"Protocol"),Mt.createElement("select",{className:"form-control input-sm inline-number",style:{width:"80px"},value:e.protocol,onChange:t=>this.listenerProtocolChanged(e,t.target.value)},this.protocols.map(e=>Mt.createElement("option",{key:e},e)))),Mt.createElement("span",{className:"wizard-pod-content"},Mt.createElement("label",null,"Port"),Mt.createElement("input",{className:"form-control input-sm inline-number",type:"text",min:0,value:e.port||"",onChange:t=>this.listenerPortChanged(e,t.target.value),style:{width:"80px"},required:!0}))),Mt.createElement("div",null,Mt.createElement("a",{className:"sm-label clickable",onClick:()=>this.removeListener(r)},Mt.createElement("span",{className:"glyphicon glyphicon-trash"}))))),Mt.createElement("div",null,"TLS"===e.protocol&&Mt.createElement(ml,{availableCertificates:e.certificates,formik:this.props.formik,app:this.props.app,certificateTypes:n,certificates:a})),Mt.createElement("div",{className:"wizard-pod-row"},Mt.createElement("div",{className:"wizard-pod-row-title",style:{height:"30px"}},"Rules"),Mt.createElement("div",{className:"wizard-pod-row-contents",style:{padding:"0"}},Mt.createElement("table",{className:"table table-condensed packed rules-table"},Mt.createElement("thead",null,Mt.createElement("tr",null,Mt.createElement("th",{style:{width:"10px",padding:"0"}}),Mt.createElement("th",{style:{width:"226px"}},"If"),Mt.createElement("th",{style:{width:"75px"}},"Then"),Mt.createElement("th",null,"Target"),Mt.createElement("th",{style:{width:"30px"}}))),Mt.createElement("tbody",null,Mt.createElement("tr",{className:"not-sortable"},Mt.createElement("td",null),Mt.createElement("td",null,"Default"),Mt.createElement("td",null,"forward to"),Mt.createElement("td",null,Mt.createElement("select",{className:"form-control input-sm",value:e.defaultActions[0].targetGroupName,onChange:t=>this.handleDefaultTargetChanged(e,t.target.value),required:!0},Mt.createElement("option",{value:""}),aa(t.targetGroups.map(e=>e.name)).map(e=>Mt.createElement("option",{key:e},e)))),Mt.createElement("td",null))))))))),e.listenerPorts&&Mt.createElement("div",{className:"wizard-pod-row-errors"},Mt.createElement(ge,{type:"error",message:e.listenerPorts})),e.listeners&&Mt.createElement("div",{className:"wizard-pod-row-errors"},Mt.createElement(ge,{type:"error",message:e.listeners})),Mt.createElement("table",{className:"table table-condensed packed"},Mt.createElement("tbody",null,Mt.createElement("tr",null,Mt.createElement("td",null,Mt.createElement("button",{type:"button",className:"add-new col-md-12",onClick:this.addListener},Mt.createElement("span",null,Mt.createElement("span",{className:"glyphicon glyphicon-plus-sign"})," Add new listener")))))))))}}class pl extends Mt.Component{constructor(e){super(e),this.protocols=["TCP","UDP"],this.healthProtocols=["TCP","HTTP","HTTPS"],this.targetTypes=["instance","ip"],this.destroy$=new Ca,this.addTargetGroup=()=>{const{setFieldValue:e,values:t}=this.props.formik,a=t.targetGroups.length;t.targetGroups.push({name:"targetgroup"+(a?`${a}`:""),protocol:"TCP",port:7001,targetType:"instance",healthCheckProtocol:"TCP",healthCheckPort:"traffic-port",healthCheckPath:"/healthcheck",healthCheckTimeout:5,healthCheckInterval:10,healthyThreshold:10,unhealthyThreshold:10,attributes:{deregistrationDelay:300,preserveClientIp:!0}}),e("targetGroups",t.targetGroups)};const t=e.isNew?0:e.formik.initialValues.targetGroups.length;this.state={existingTargetGroupNames:{},oldTargetGroupCount:t}}validate(e){const t=aa(Wt(Yt(ea(e.targetGroups,"name"),e=>e.length>1)).map(e=>e.name)),a=new n(e),{arrayForEach:r}=a;return a.field("targetGroups").withValidators(r(a=>{a.field("name","Name").required().withValidators(Kr(this.state.existingTargetGroupNames,e.credentials,e.region),Yr(this.props.app.name.length),fe.valueUnique(t,"There is already a target group in this load balancer with the same name.")),a.field("port","Port").required().spelAware().withValidators(e=>Ee(e)),a.field("healthCheckInterval","Health Check Interval").required().spelAware().withValidators(e=>Ee(e)),a.field("healthyThreshold","Healthy Threshold").required().spelAware().withValidators(e=>Ee(e)),a.field("unhealthyThreshold","Unhealthy Threshold").required().spelAware().withValidators(e=>Ee(e)),a.field("healthCheckPort","Health Check Port").required().spelAware().withValidators(e=>"traffic-port"===e?null:Ee(e)),a.field("protocol","Protocol").required(),a.field("healthCheckProtocol","Health Check Protocol").required()})),a.validateForm()}removeAppName(e){return e.replace(`${this.props.app.name}-`,"")}updateLoadBalancerNames(e){const{app:t,loadBalancer:a}=e,n={};Na(t.getDataSource("loadBalancers").refresh(!0)).pipe(Da(this.destroy$)).subscribe(()=>{t.getDataSource("loadBalancers").data.forEach(e=>{"classic"!==e.loadBalancerType&&(a&&e.name===a.name||e.targetGroups.forEach(t=>{n[e.account]=n[e.account]||{},n[e.account][e.region]=n[e.account][e.region]||[],n[e.account][e.region].push(this.removeAppName(t.name))}))}),this.setState({existingTargetGroupNames:n},()=>this.props.formik.validateForm())})}targetGroupFieldChanged(e,t,a){const{setFieldValue:n,values:r}=this.props.formik,l=r.targetGroups[e];ia(l,t,a),"healthyThreshold"===t&&ia(l,"unhealthyThreshold",a),n("targetGroups",r.targetGroups)}removeTargetGroup(e){const{setFieldValue:t,values:a}=this.props.formik,{oldTargetGroupCount:n}=this.state;a.targetGroups.splice(e,1),e<n&&this.setState({oldTargetGroupCount:n-1}),t("targetGroups",a.targetGroups)}componentDidMount(){this.updateLoadBalancerNames(this.props)}componentWillUnmount(){this.destroy$.next(),this.destroy$.complete()}render(){const{app:e}=this.props,{errors:a,values:n}=this.props.formik,{oldTargetGroupCount:r}=this.state,l=this.protocols.map(e=>Mt.createElement("option",{key:e},e)),i=this.healthProtocols.map(e=>Mt.createElement("option",{key:e},e)),s=this.targetTypes.map(e=>Mt.createElement("option",{key:e},e));return Mt.createElement("div",{className:"container-fluid form-horizontal"},Mt.createElement("div",{className:"form-group"},Mt.createElement("div",{className:"col-md-12"},n.targetGroups.map((n,c)=>{const d=a.targetGroups&&a.targetGroups[c]||{};return Mt.createElement("div",{key:c,className:"wizard-pod"},Mt.createElement("div",null,Mt.createElement("div",{className:"wizard-pod-row header"},Mt.createElement("div",{className:"wizard-pod-row-title"},"Group Name"),Mt.createElement("div",{className:"wizard-pod-row-contents"},Mt.createElement("div",{className:"wizard-pod-row-data"},Mt.createElement("span",{className:"group-name-prefix"},e.name,"-"),Mt.createElement("input",{className:"form-control input-sm target-group-name",type:"text",value:n.name,onChange:e=>this.targetGroupFieldChanged(c,"name",e.target.value),required:!0,disabled:c<r}),Mt.createElement("a",{className:"sm-label clickable",onClick:()=>this.removeTargetGroup(c)},Mt.createElement("span",{className:"glyphicon glyphicon-trash"}))),d.name&&Mt.createElement("div",{className:"wizard-pod-row-errors"},Mt.createElement(ge,{type:"error",message:d.name})))),Mt.createElement("div",{className:"wizard-pod-row"},Mt.createElement("div",{className:"wizard-pod-row-title"},Mt.createElement(t,{id:"aws.targetGroup.targetType"})," ",Mt.createElement("span",null,"Target Type ")),Mt.createElement("div",{className:"wizard-pod-row-contents"},Mt.createElement("div",{className:"wizard-pod-row-data"},Mt.createElement("span",{className:"wizard-pod-content"},Mt.createElement("select",{className:"form-control input-sm",value:n.targetType,onChange:e=>this.targetGroupFieldChanged(c,"targetType",e.target.value),disabled:c<r},s))))),Mt.createElement("div",{className:"wizard-pod-row"},Mt.createElement("div",{className:"wizard-pod-row-title"},"Backend Connection"),Mt.createElement("div",{className:"wizard-pod-row-contents"},Mt.createElement("div",{className:"wizard-pod-row-data"},Mt.createElement("span",{className:"wizard-pod-content"},Mt.createElement("label",null,"Protocol "),Mt.createElement(t,{id:"aws.targetGroup.protocol"})," ",Mt.createElement("select",{className:"form-control input-sm inline-number",value:n.protocol,onChange:e=>this.targetGroupFieldChanged(c,"protocol",e.target.value),disabled:c<r},l)),Mt.createElement("span",{className:"wizard-pod-content"},Mt.createElement("label",null,"Port "),Mt.createElement(t,{id:"aws.targetGroup.port"})," ",Mt.createElement("input",{className:"form-control input-sm inline-number",value:n.port,onChange:e=>this.targetGroupFieldChanged(c,"port",e.target.value),type:"text",required:!0,disabled:c<r}))))),Mt.createElement("div",{className:"wizard-pod-row"},Mt.createElement("div",{className:"wizard-pod-row-title"},"Healthcheck"),Mt.createElement("div",{className:"wizard-pod-row-contents"},Mt.createElement("div",{className:"wizard-pod-row-data"},Mt.createElement("span",{className:"wizard-pod-content"},Mt.createElement("label",null,"Protocol "),Mt.createElement("select",{disabled:c<r,className:"form-control input-sm inline-number",value:n.healthCheckProtocol,onChange:e=>this.targetGroupFieldChanged(c,"healthCheckProtocol",e.target.value)},i)),Mt.createElement("span",{className:"wizard-pod-content"},Mt.createElement("label",null,"Port "),Mt.createElement(ye,{className:"form-control input-sm inline-number",error:d.healthCheckPort,name:"healthCheckPort",required:!0,value:n.healthCheckPort,onChange:e=>this.targetGroupFieldChanged(c,"healthCheckPort",e.target.value)})),"TCP"!==n.healthCheckProtocol&&Mt.createElement("span",{className:"wizard-pod-content"},Mt.createElement("label",null,"Path "),Mt.createElement(ye,{className:"form-control input-sm inline-text",error:d.healthCheckPath,name:"healthCheckPath",required:!0,value:n.healthCheckPath,onChange:e=>this.targetGroupFieldChanged(c,"healthCheckPath",e.target.value)})),Mt.createElement("span",{className:"wizard-pod-content"},Mt.createElement("label",null,"Timeout "),Mt.createElement(be,{error:d.healthCheckTimeout,required:!0,value:n.healthCheckTimeout,onChange:e=>this.targetGroupFieldChanged(c,"healthCheckTimeout",e)})),Mt.createElement("span",{className:"wizard-pod-content"},Mt.createElement("label",null,"Interval "),Mt.createElement(be,{error:d.healthCheckInterval,required:!0,value:n.healthCheckInterval,onChange:e=>this.targetGroupFieldChanged(c,"healthCheckInterval",e)}))))),Mt.createElement("div",{className:"wizard-pod-row"},Mt.createElement("div",{className:"wizard-pod-row-title"},Mt.createElement(t,{id:"aws.targetGroup.nlbHealthcheckThreshold"})," ",Mt.createElement("span",null,"Healthcheck Threshold ")),Mt.createElement("div",{className:"wizard-pod-row-contents"},Mt.createElement("div",{className:"wizard-pod-row-data"},Mt.createElement("span",{className:"wizard-pod-content"},Mt.createElement(be,{error:d.healthyThreshold,value:n.healthyThreshold,onChange:e=>this.targetGroupFieldChanged(c,"healthyThreshold",e)}))))),Mt.createElement("div",{className:"wizard-pod-row"},Mt.createElement("div",{className:"wizard-pod-row-title"},"Attributes"),Mt.createElement("div",{className:"wizard-pod-row-contents"},Mt.createElement("div",{className:"wizard-pod-row-data"},Mt.createElement("span",{className:"wizard-pod-content"},Mt.createElement("label",null,"Dereg. Delay"),Mt.createElement(t,{id:"aws.targetGroup.attributes.deregistrationDelay"})," ",Mt.createElement("input",{className:"form-control input-sm inline-number",type:"text",value:n.attributes.deregistrationDelay,onChange:e=>this.targetGroupFieldChanged(c,"attributes.deregistrationDelay",e.target.value)})),Mt.createElement("span",{className:"wizard-pod-content"},Mt.createElement(o,{name:"deregistrationDelayConnectionTermination",text:"Connection Termination",checked:n.attributes.deregistrationDelayConnectionTermination,onChange:e=>{this.targetGroupFieldChanged(c,"attributes.deregistrationDelayConnectionTermination",e.target.checked)}}),Mt.createElement(t,{id:"aws.targetGroup.attributes.deregistrationDelayConnectionTermination"})),"instance"!==n.targetType&&Mt.createElement("span",{className:"wizard-pod-content"},Mt.createElement(o,{name:"preserveClientIp",text:"Preserve Client IP",checked:n.attributes.preserveClientIp,onChange:e=>{this.targetGroupFieldChanged(c,"attributes.preserveClientIp",e.target.checked)}}),Mt.createElement(t,{id:"aws.targetGroup.attributes.preserveClientIp"})))))))}),Mt.createElement("table",{className:"table table-condensed packed"},Mt.createElement("tbody",null,Mt.createElement("tr",null,Mt.createElement("td",null,Mt.createElement("button",{type:"button",className:"add-new col-md-12",onClick:this.addTargetGroup},Mt.createElement("span",{className:"glyphicon glyphicon-plus-sign"})," Add new target group"))))))))}}class hl extends Mt.Component{constructor(e){super(e),this._isUnmounted=!1,this.certificateTypes=ta(hn,"loadBalancers.certificateTypes",["iam","acm"]),this.submit=e=>{const{app:t,forPipelineConfig:a,closeModal:n}=this.props,{isNew:r}=this.state,l=r?"Create":"Update",i=Ht(e);if(i.ipAddressType=i.dualstack?"dualstack":"ipv4",delete i.dualstack,a)this.formatListeners(i).then(()=>{n&&n(i)});else{const e=new v({application:t,title:(r?"Creating":"Updating")+" your load balancer",onDismiss:()=>this.props.dismissModal(),onTaskComplete:()=>this.onTaskComplete(i)});e.submit(()=>this.formatListeners(i).then(()=>(this.formatCommand(i),Ae.upsertLoadBalancer(i,t,l)))),this.setState({taskMonitor:e})}},this.validate=()=>({});const t=e.loadBalancer?Ar.convertNetworkLoadBalancerForEditing(e.loadBalancer):Ar.constructNewNetworkLoadBalancerTemplate(e.app);this.state={isNew:!e.loadBalancer,loadBalancerCommand:t,taskMonitor:null}}static show(e,t){return E.show(gl,e,{dialogClassName:"wizard-modal modal-lg"},t)}certificateIdAsARN(e,t,a,n){if(t&&(0!==t.indexOf("arn:aws:iam::")||0!==t.indexOf("arn:aws:acm:"))){if("iam"===n)return`arn:aws:iam::${e}:server-certificate/${t}`;if("acm"===n)return`arn:aws:acm:${a}:${e}:certificate/${t}`}return t}formatListeners(e){return i.getAccountDetails(e.credentials).then(t=>{e.listeners.forEach(a=>{"TCP"===a.protocol&&(delete a.sslPolicy,a.certificates=[]),a.certificates.forEach(a=>{a.certificateArn=this.certificateIdAsARN(t.accountId,a.name,e.region,a.type||this.certificateTypes[0])})})})}setAvailabilityZones(e){const t={};t[e.region]=e.regionZones||[],e.availabilityZones=t}addAppName(e){return`${this.props.app.name}-${e}`}manageTargetGroupNames(e){(e.targetGroups||[]).forEach(e=>{e.name=this.addAppName(e.name)}),(e.listeners||[]).forEach(e=>{e.defaultActions.forEach(e=>{e.targetGroupName&&(e.targetGroupName=this.addAppName(e.targetGroupName))}),(e.rules||[]).forEach(e=>{e.actions.forEach(e=>{e.targetGroupName&&(e.targetGroupName=this.addAppName(e.targetGroupName))})})})}manageRules(e){e.listeners.forEach(e=>{e.rules.forEach((e,t)=>{e.priority=t+1,e.conditions=e.conditions.filter(e=>e.values[0].length>0)})})}formatCommand(e){this.setAvailabilityZones(e),this.manageTargetGroupNames(e),this.manageRules(e)}onApplicationRefresh(e){var t;if(null==(t=this.refreshUnsubscribe)||t.call(this),this.refreshUnsubscribe=void 0,this._isUnmounted)return;this.props.dismissModal(),this.setState({taskMonitor:void 0});const a={name:e.name,accountId:e.credentials,region:e.region,vpcId:e.vpcId,provider:"aws"};this.props.stateService.includes("**.loadBalancerDetails")?this.props.stateService.go("^.loadBalancerDetails",a):this.props.stateService.go(".loadBalancerDetails",a)}componentWillUnmount(){var e;this._isUnmounted=!0,null==(e=this.refreshUnsubscribe)||e.call(this),this.refreshUnsubscribe=void 0}onTaskComplete(e){var t;null==(t=this.refreshUnsubscribe)||t.call(this),this.refreshUnsubscribe=void 0,this.refreshUnsubscribe=this.props.app.loadBalancers.onNextRefresh(()=>this.onApplicationRefresh(e)),this.props.app.loadBalancers.refresh()}render(){const{app:e,dismissModal:t,forPipelineConfig:a,loadBalancer:n}=this.props,{isNew:r,loadBalancerCommand:l,taskMonitor:i}=this.state;let s=a?"Configure Network Load Balancer":"Create New Network Load Balancer";r||(s=`Edit ${l.name}: ${l.region}: ${l.credentials}`);const o=r||a;return Mt.createElement(y,{heading:s,initialValues:l,taskMonitor:i,dismissModal:t,closeModal:this.submit,submitButtonLabel:a?r?"Add":"Done":r?"Create":"Update",validate:this.validate,render:({formik:t,nextIdx:l,wizard:i})=>Mt.createElement(Mt.Fragment,null,o&&Mt.createElement(b,{label:"Location",wizard:i,order:l(),render:({innerRef:l})=>Mt.createElement(tl,{app:e,forPipelineConfig:a,formik:t,isNew:r,loadBalancer:n,ref:l})}),Mt.createElement(b,{label:"Target Groups",wizard:i,order:l(),render:({innerRef:a})=>Mt.createElement(pl,{ref:a,formik:t,app:e,isNew:r,loadBalancer:n})}),Mt.createElement(b,{label:"Listeners",wizard:i,order:l(),render:({innerRef:e})=>Mt.createElement(ul,{ref:e,formik:t})}),Mt.createElement(b,{label:"Advanced Settings",wizard:i,order:l(),render:({innerRef:e})=>Mt.createElement(dl,{ref:e,showDualstack:!t.values.isInternal&&oa(t.values.targetGroups,{targetType:"instance"})})}))})}}hl.defaultProps={closeModal:C,dismissModal:C};const gl=Object.assign(N(hl),{show:hl.show}),vl=[{type:"application",label:"Application",sublabel:"ALB",description:"Highly configurable, application-focused balancer. HTTP and HTTPS only.",component:rl},{type:"network",label:"Network",sublabel:"NLB",description:"Basic, high-performance balancer with fixed IP.",component:gl},{type:"classic",label:"Classic",sublabel:"Legacy",description:"Previous generation balancer (ELB).",component:cl}],fl=class e extends Mt.Component{constructor(e){super(e),this.choose=()=>{const{children:e,...t}=this.props;this.close(),this.state.selectedChoice.component.show(t,this.context.services).then(e=>{this.props.closeModal(e)}).catch(()=>{})},this.close=e=>{this.props.dismissModal(e)},this.state={choices:vl,selectedChoice:vl[0]}}static show(t,a){var n;if(!1===t.isNew&&(null==(n=t.loadBalancer)?void 0:n.loadBalancerType)){const e=vl.find(e=>e.type===t.loadBalancer.loadBalancerType);if(e)return e.component.show(t,a)}return E.show(e,{...t,className:"create-pipeline-modal-overflow-visible modal-lg"},{bsSize:"lg"},a)}choiceSelected(e){this.setState({selectedChoice:e})}getIncompatibility(e,t){const{loadBalancer:a={}}=Ge.getProvider(t),{incompatibleLoadBalancerTypes:n=[]}=a;return n.find(t=>t.type===e.type)}isIncompatibleWithAllProviders(e){const{app:{attributes:t}}=this.props,{cloudProviders:a=[]}=t;return a.length>0&&a.every(t=>!!this.getIncompatibility(e,t))}render(){const{app:{attributes:e}}=this.props,{cloudProviders:t=[]}=e,{choices:a,selectedChoice:n}=this.state,r=a.filter(e=>!this.isIncompatibleWithAllProviders(e)),l=t.map(e=>this.getIncompatibility(n,e)).filter(e=>e),i=hn.createLoadBalancerWarnings&&hn.createLoadBalancerWarnings[n.type];return Mt.createElement(Mt.Fragment,null,Mt.createElement(me,{dismiss:this.close}),Mt.createElement(Oa.Header,null,Mt.createElement(Oa.Title,null,"Select Type of Load Balancer")),Mt.createElement(Oa.Body,null,Mt.createElement("div",{className:"modal-body"},Mt.createElement("div",{className:"card-choices"},r.map(e=>Mt.createElement("div",{key:e.type,className:"card "+(n===e?"active":""),onClick:()=>this.choiceSelected(e)},Mt.createElement("h3",{className:"load-balancer-label"},e.label),Mt.createElement("h3",null,"(",e.sublabel,")"),Mt.createElement("div",null,e.description)))),Mt.createElement(Mt.Fragment,null,l.length>0&&l.map(e=>Mt.createElement("div",{className:"alert alert-warning"},Mt.createElement("p",null,Mt.createElement("i",{className:"fa fa-exclamation-triangle"})," ",e.reason)))),!!i&&Mt.createElement("div",{className:"alert alert-warning"},Mt.createElement("p",null,Mt.createElement("i",{className:"fa fa-exclamation-triangle"}),Mt.createElement(ke,{message:i,style:{display:"inline-block",marginLeft:"2px"}}))),Mt.createElement("div",{className:"load-balancer-description"}))),Mt.createElement(Oa.Footer,null,Mt.createElement($a,{onClick:this.choose},"Configure Load Balancer ",Mt.createElement("span",{className:"glyphicon glyphicon-chevron-right"}))))}};fl.contextType=g,fl.supportsPipelineConfig=!0,fl.defaultProps={closeModal:C,dismissModal:C};let El=fl;class yl extends Mt.Component{constructor(e){super(e),this.editLoadBalancer=()=>{const{loadBalancer:e}=this.props,{application:t}=this.state;vl.find(t=>t.type===e.loadBalancerType).component.show({app:t,loadBalancer:e},this.context.services)},this.deleteLoadBalancer=()=>{const{app:e,loadBalancer:t}=this.props,a=this.props.loadBalancerFromParams||{accountId:t.account,region:t.region,name:t.name};if(t.instances&&t.instances.length)return;const n={application:e,title:"Deleting "+a.name},r={cloudProvider:t.cloudProvider,loadBalancerName:t.name,loadBalancerType:t.loadBalancerType||"classic",regions:[t.region],credentials:t.account,vpcId:ta(t,"elb.vpcId",null)};w.confirm({header:`Really delete ${a.name} in ${a.region}: ${a.accountId}?`,buttonText:`Delete ${a.name}`,account:a.accountId,taskMonitorConfig:n,submitMethod:()=>Ae.deleteLoadBalancer(r,e)})},this.entityTagUpdate=()=>{this.props.app.loadBalancers.refresh()};const{app:t,loadBalancer:a}=this.props;let n;const r=a.name.split("-")[0];r===t.name?n=t:S.getApplication(r).then(e=>{this.setState({application:e})}).catch(()=>{}),this.state={application:n}}render(){const{app:a,loadBalancer:n}=this.props,{application:r}=this.state,{loadBalancerType:l,instances:i=[],instanceCounts:s}=n,o=n.name.split("-")[0],c=!("classic"===l&&ca(s).filter(e=>e).length)&&!i.length;return Mt.createElement("div",{style:{display:"inline-block"}},hn.adHocInfraWritesEnabled&&Mt.createElement(La,{className:"dropdown",id:"load-balancer-actions-dropdown"},Mt.createElement(La.Toggle,{className:"btn btn-sm btn-primary dropdown-toggle"},Mt.createElement("span",null,"Load Balancer Actions")),Mt.createElement(La.Menu,{className:"dropdown-menu"},r&&Mt.createElement(xe,{resource:n,application:a,onClick:this.editLoadBalancer},"Edit Load Balancer"),!r&&Mt.createElement("li",{className:"disabled"},Mt.createElement("a",null,"Edit Load Balancer"," ",Mt.createElement(t,{content:`The application <b>${o}</b> must be configured before this load balancer can be edited.`}))),c&&Mt.createElement(xe,{resource:n,application:a,onClick:this.deleteLoadBalancer},"Delete Load Balancer"),!c&&Mt.createElement("li",{className:"disabled"},Mt.createElement("a",null,"Delete Load Balancer"," ",Mt.createElement(t,{content:"You must detach all instances before you can delete this load balancer."}))),e&&e.feature.entityTags&&Mt.createElement(k,{component:n,application:a,entityType:"loadBalancer",onUpdate:this.entityTagUpdate}))))}}async function bl({app:e,autoClose:t,loadBalancerParams:a,loadBalancers:n,securityGroupReader:r}){const{accountId:l,name:i,region:s}=a,o=(n||e.loadBalancers.data).find(e=>e.name===i&&e.region===s&&e.account===l)||void 0;if(!o)return void t();const c=await T("/loadBalancers").path(l,s,i).query({provider:"aws"}).get();var d;return c.length&&(o.elb=c[0],o.elb.vpcId=o.elb.vpcId||o.elb.vpcid,o.account=l,o.securityGroups=function(e,t,a,n){var r;return((null==(r=t.elb)?void 0:r.securityGroups)||t.securityGroups||[]).map(t=>{var r,l,i;return n?n.getApplicationSecurityGroup(e,a.accountId,a.region,t):null==(i=null==(l=null==(r=e.securityGroupsIndex)?void 0:r[a.accountId])?void 0:l[a.region])?void 0:i[t]}).filter(Boolean).sort((e,t)=>e.name.localeCompare(t.name))}(e,o,a,r),o.elbProtocol=function(e,t){var a,n;return(null==(a=t.listenerDescriptions)?void 0:a.some(e=>"HTTPS"===e.listener.protocol))||(null==(n=e.listeners)?void 0:n.some(e=>"HTTPS"===e.protocol))?"https:":"http:"}(o,c[0]),o.ipAddressTypeDescription="dualstack"===(d=c[0].ipAddressType)?"IPv4 and IPv6":"ipv4"===d?"IPv4":"",o.listenerRows="classic"===o.loadBalancerType?[]:function(e){const t=e.listeners||[],a=[];return t.forEach(t=>{(t.rules||[]).forEach(n=>{let r=[t.protocol,(n.conditions.find(e=>"host-header"===e.field)||{values:[""]}).values[0],t.port].filter(e=>e).join(":");const l=(n.conditions.find(e=>"path-pattern"===e.field)||{values:[]}).values[0];l&&(r=`${r}${l}`);const i=(n.actions||[]).map(t=>{const a={...t};return"forward"===a.type&&(a.targetGroup=(e.targetGroups||[]).find(e=>e.name===a.targetGroupName)),a});a.push({in:r,actions:i})})}),a}(o),await async function(e){var t;(null==(t=e.subnets)?void 0:t.length)?e.subnetDetails=await Promise.all(e.subnets.map(t=>p.getSubnetByIdAndProvider(t,e.provider))):e.subnetDetails=e.subnetDetails||[]}(o)),o}function Cl({app:e,loadBalancerParams:t,autoClose:a}){const{securityGroupReader:n}=De(),r=e.getDataSource("loadBalancers"),{data:l,loaded:i,refresh:s,error:o}=Be(r),[c,d]=Mt.useState(),[m,u]=Mt.useState(!1),[p,h]=Mt.useState(null),g=Mt.useRef(a),v=Mt.useRef(!0),{accountId:f,name:E,provider:y,region:b,vpcId:C}=t;Mt.useEffect(()=>()=>{v.current=!1},[]),Mt.useEffect(()=>{g.current=a},[a]);const N=Mt.useCallback(async()=>{if(i&&!o){u(!0),h(null);try{const t=await bl({app:e,autoClose:()=>g.current(),loadBalancerParams:{accountId:f,name:E,provider:y,region:b,vpcId:C},loadBalancers:l,securityGroupReader:n});v.current&&d(t)}catch(e){v.current&&h((null==e?void 0:e.message)||String(e))}finally{v.current&&u(!1)}}},[f,e,o,l,i,E,y,b,n,C]);return Mt.useEffect(()=>{N()},[N]),{data:c,loading:!i||m,error:o||p,refetch:async()=>s()}}function Nl(e,t){return e.isDisabled!==t.isDisabled?e.isDisabled?1:-1:t.name.localeCompare(e.name)}function wl(e,t){return e.isDisabled!==t.isDisabled?e.isDisabled?1:-1:t.name.localeCompare(e.name)}function Sl({app:e,loadBalancer:t}){var a;const n=t,r=(null==(a=n.elb)?void 0:a.insightActions)||[];return Mt.createElement(Mt.Fragment,null,Mt.createElement(yl,{app:e,loadBalancer:n}),r.length>0&&Mt.createElement(La,{className:"dropdown",id:"amazon-load-balancer-insights-dropdown"},Mt.createElement(La.Toggle,{className:"btn btn-sm btn-default dropdown-toggle"},"Insight"),Mt.createElement(La.Menu,null,r.map(e=>Mt.createElement(Ua,{key:e.url||e.label,href:e.url,target:"_blank"},e.label)))))}function kl({app:e,loadBalancer:t}){var a,n,r;const l=t,i=l.elb||{},s=i.dnsname||i.dnsName,o=da((l.subnetDetails||[]).map(e=>e.purpose))||"";return Mt.createElement(Mt.Fragment,null,l.isManaged&&Mt.createElement(se,{resourceSummary:l.managedResourceSummary,application:e}),Mt.createElement(G,{heading:"Load Balancer Details",defaultExpanded:!0},Mt.createElement("dl",{className:"dl-horizontal dl-narrow"},Mt.createElement("dt",null,"Created"),Mt.createElement("dd",null,i.createdTime?B(i.createdTime):"-"),Mt.createElement("dt",null,"In"),Mt.createElement("dd",null,Mt.createElement(A,{account:l.account})," ",l.region),Mt.createElement("dt",null,"VPC"),Mt.createElement("dd",null,Mt.createElement(Fn,{vpcId:i.vpcId||l.vpcId})),Mt.createElement("dt",null,"Subnet"),Mt.createElement("dd",null,o),Mt.createElement("dt",null,"Scheme"),Mt.createElement("dd",null,l.scheme||"-"),l.loadBalancerType&&Mt.createElement("dt",null,"Type"),l.loadBalancerType&&Mt.createElement("dd",null,l.loadBalancerType),l.ipAddressTypeDescription&&Mt.createElement("dt",null,"IP Type"),l.ipAddressTypeDescription&&Mt.createElement("dd",null,l.ipAddressTypeDescription)),!!(null==(a=i.availabilityZones)?void 0:a.length)&&Mt.createElement("dl",{className:"horizontal-when-filters-collapsed"},Mt.createElement("dt",null,"Availability Zones"),Mt.createElement("dd",null,Mt.createElement("ul",{className:"collapse-margin-on-filter-collapse"},i.availabilityZones.map(e=>Mt.createElement("li",{key:e},e))))),!!(null==(n=l.serverGroups)?void 0:n.length)&&Mt.createElement("dl",{className:"horizontal-when-filters-collapsed"},Mt.createElement("dt",null,"Server Groups"),Mt.createElement("dd",null,Mt.createElement("ul",{className:"collapse-margin-on-filter-collapse"},l.serverGroups.slice().sort(Nl).map(e=>Mt.createElement("li",{key:e.name},Mt.createElement(ja,{to:"^.serverGroup",params:{region:e.region,accountId:e.account,serverGroup:e.name,provider:"aws"}},Mt.createElement("a",null,e.name))))))),!!(null==(r=l.targetGroups)?void 0:r.length)&&Mt.createElement("dl",{className:"horizontal-when-filters-collapsed"},Mt.createElement("dt",null,"Target Groups"),Mt.createElement("dd",null,Mt.createElement("ul",{className:"collapse-margin-on-filter-collapse"},l.targetGroups.slice().sort(wl).map(e=>Mt.createElement("li",{key:e.name},Mt.createElement(ja,{to:"^.targetGroupDetails",params:{region:e.region,loadBalancerName:l.name,accountId:e.account,name:e.name,vpcId:e.vpcId,provider:"aws"}},Mt.createElement("a",null,e.name))))))),s&&Mt.createElement("dl",{className:"horizontal-when-filters-collapsed"},Mt.createElement("dt",null,"DNS Name"),Mt.createElement("dd",null,Mt.createElement("a",{target:"_blank",href:`${l.elbProtocol||"http:"}//${s}`},s)," ",Mt.createElement(ie,{text:s,toolTip:"Copy DNS Name to clipboard"})))))}function Tl({loadBalancer:e}){return Mt.createElement(G,{heading:"Status",defaultExpanded:"classic"===e.loadBalancerType},"classic"===e.loadBalancerType?Mt.createElement(J,{className:"pull-left",container:e.instanceCounts}):Mt.createElement("span",null,"Select a target group to check the instance health status from the view of the target group."))}function Il({loadBalancer:e}){const t=e,a=t.elb;return"classic"===t.loadBalancerType?Mt.createElement(G,{heading:"Listeners"},Mt.createElement("dl",null,Mt.createElement("dt",null,"Load Balancer -> Instance"),(a.listenerDescriptions||[]).map((e,t)=>Mt.createElement("dd",{key:t},e.listener.protocol,":",e.listener.loadBalancerPort," ->"," ",e.listener.instanceProtocol,":",e.listener.instancePort)))):Mt.createElement(G,{heading:"Listeners"},(t.listenerRows||[]).map(e=>Mt.createElement("div",{key:e.in},Mt.createElement("div",{className:"listener-targets"},e.in," ->"),Mt.createElement("div",{className:"listener-targets"},e.actions.map((a,n)=>Mt.createElement("div",{key:`${e.in}-${n}`},function(e,t){var a;if("redirect"===e.type){const t=e.redirectConfig;return Mt.createElement("span",null,"#{protocol}"!==t.protocol&&`${t.protocol}:`,"#{host}"!==t.host&&` ${t.host} `,"#{port}"!==t.port&&` ${t.port} `,"/#{path}"!==t.path&&` ${t.path} `,"#{query}"!==t.query&&` ?${t.query} `,"(",t.statusCode,")")}if("authenticate-oidc"===e.type){const t=null==(a=e.authenticateOidcConfig)?void 0:a.clientId;return Mt.createElement("span",null,Mt.createElement("i",{className:"fas fa-fw fa-user-lock"})," ",t)}return e.targetGroupName&&e.targetGroup?Mt.createElement("span",null,Mt.createElement("i",{className:"fa fa-fw fa-crosshairs icon","aria-hidden":"true"}),Mt.createElement(ja,{to:"^.targetGroupDetails",params:{region:e.targetGroup.region,loadBalancerName:t.name,accountId:e.targetGroup.account,name:e.targetGroup.name,vpcId:e.targetGroup.vpcId,provider:"aws"}},Mt.createElement("a",null,e.targetGroupName))):Mt.createElement("span",null,Mt.createElement("i",{className:"fa fa-fw fa-crosshairs icon","aria-hidden":"true"})," ",e.targetGroupName||e.type)}(a,t)))))))}function Pl({loadBalancer:e}){const t=e,a=Kt(t.securityGroups||[],"name");return"network"!==t.loadBalancerType||a.length?Mt.createElement(G,{heading:R.get("Firewalls")},Mt.createElement("ul",null,a.map(e=>Mt.createElement("li",{key:e.id||e.name},Mt.createElement(ja,{to:"^.firewallDetails",params:{name:e.name,accountId:t.account,region:t.region,vpcId:t.vpcId,provider:t.provider}},Mt.createElement("a",null,e.name," (",e.id,")")))))):null}function Al({loadBalancer:e}){const t=(e.subnetDetails||[]).filter(Boolean);return Mt.createElement(G,{heading:"Subnets"},!t.length&&Mt.createElement("h5",null,"No subnets"),t.map(e=>Mt.createElement("div",{key:e.id,className:"bottom-border"},Mt.createElement("h5",null,Mt.createElement("strong",null,e.id)),Mt.createElement("dl",{className:"dl-horizontal dl-narrow"},Mt.createElement("dt",null,"Purpose"),Mt.createElement("dd",null,e.purpose),Mt.createElement("dt",null,"State"),Mt.createElement("dd",null,e.state),Mt.createElement("dt",null,"Cidr Block"),Mt.createElement("dd",null,e.cidrBlock)))))}function Gl({loadBalancer:e}){var t;if("classic"!==e.loadBalancerType)return null;const a=null==(t=e.elb)?void 0:t.healthCheck;return Mt.createElement(G,{heading:"Health Checks"},Mt.createElement("dl",{className:"horizontal-when-filters-collapsed"},Mt.createElement("dt",null,"Target"),Mt.createElement("dd",null,(null==a?void 0:a.target)||"-"),Mt.createElement("dt",null,"Timeout"),Mt.createElement("dd",null,null==a?void 0:a.timeout," seconds"),Mt.createElement("dt",null,"Interval"),Mt.createElement("dd",null,null==a?void 0:a.interval," seconds"),Mt.createElement("dt",null,"Healthy Threshold"),Mt.createElement("dd",null,null==a?void 0:a.healthyThreshold),Mt.createElement("dt",null,"Unhealthy Threshold"),Mt.createElement("dd",null,null==a?void 0:a.unhealthyThreshold)))}yl.contextType=g;const xl=[kl,Tl,Il,Pl,Al,Gl];const Dl=["ebs","docker"];function Bl(e){return Object.keys(e).reduce((t,a)=>(""!==e[a]&&(t[a]=e[a]),t),{})}function Fl(t){return e.feature.roscoMode||"function"==typeof e.feature.roscoSelector&&e.feature.roscoSelector(t)}function zl(e){return"Started"!==(null==e?void 0:e.migrationStatus)}class Ml extends Mt.Component{constructor(){super(...arguments),this.mounted=!1,this.state={baseLabelOptions:[],baseOsOptions:[],extendedAttributeKey:"",extendedAttributeValue:"",loading:!0,loadError:!1,regions:[],roscoMode:!1,showAdvancedOptions:!1,vmTypes:["hvm","pv"]}}componentDidMount(){this.mounted=!0,this.initialize()}componentWillUnmount(){this.mounted=!1}initialize(){const e=this.props.stage;Promise.all([Fe.getRegions("aws"),Fe.getBaseOsOptions("aws"),Fe.getBaseLabelOptions()]).then(([t,a,n])=>{if(!this.mounted)return;const r=a.baseImages||[],l=this.applyDefaults(e,t,r,n);this.replaceStage(l),this.setState({baseLabelOptions:n,baseOsOptions:r,loading:!1,loadError:!1,regions:t,roscoMode:Fl(l),showAdvancedOptions:this.showAdvanced(l),vmTypes:this.computeVmTypes(r,l.baseOs)})}).catch(()=>{this.mounted&&this.setState({loading:!1,loadError:!0})})}applyDefaults(e,t,a,n){var r;const l=Bl({...e});l.extendedAttributes=l.extendedAttributes||{},l.regions=l.regions&&[...l.regions].sort()||[],l.user||(l.user=null==(r=ze.getAuthenticatedUser())?void 0:r.name),!l.storeType&&Dl.length&&(l.storeType=Dl[0]),1===t.length?l.region=t[0]:l.region&&!t.includes(l.region)&&delete l.region,!l.regions.length&&this.props.application.defaultRegions.aws&&(l.regions=[this.props.application.defaultRegions.aws]);let i=a;!l.baseOs&&a.length?l.baseOs=a[0].id:l.baseOs&&!a.find(e=>e.id===l.baseOs)&&(i=[...a,{id:l.baseOs,detailedDescription:"Custom",vmTypes:["hvm","pv"]}]),!l.baseLabel&&n.length&&(l.baseLabel=n[0]);const s=this.computeVmTypes(i,l.baseOs);return!l.vmType&&s.length&&(l.vmType=s[0]),l}computeVmTypes(e,t){if(e.length&&e.every(e=>e.vmTypes)){const a=e.find(e=>e.id===t);return(null==a?void 0:a.vmTypes)||["hvm","pv"]}return["hvm","pv"]}showAdvanced(e){return!!(e.templateFileName||e.extendedAttributes&&Object.keys(e.extendedAttributes).length>0||e.varFileName||e.baseName||e.baseAmi||e.amiName||e.amiSuffix||e.rootVolumeSize)}replaceStage(e){this.props.updateStage?this.props.updateStage(e):this.props.updateStageField(e)}updateStage(e){const t=Bl({...this.props.stage,...e});if(this.replaceStage(t),this.setState({roscoMode:Fl(t)}),void 0!==e.baseOs){const a=this.computeVmTypes(this.state.baseOsOptions,e.baseOs);this.setState({vmTypes:a}),a.length&&!a.includes(t.vmType)&&this.updateStage({vmType:a[0]})}}updateExtendedAttribute(e,t){this.updateStage({extendedAttributes:{...this.props.stage.extendedAttributes||{},[e]:t}})}removeExtendedAttribute(e){const t={...this.props.stage.extendedAttributes||{}};delete t[e],this.updateStage({extendedAttributes:t})}addExtendedAttribute(){const e=this.state.extendedAttributeKey.trim();e&&(this.updateExtendedAttribute(e,this.state.extendedAttributeValue),this.setState({extendedAttributeKey:"",extendedAttributeValue:"",showAdvancedOptions:!0}))}renderDockerPreview(){const e=this.props.stage,t=!this.state.roscoMode&&zl(this.props.pipeline);return Mt.createElement(Mt.Fragment,null,hn.dockerBakeWarning&&Mt.createElement("div",{className:"alert alert-warning sp-margin-s-top horizontal middle"},Mt.createElement("i",{className:"fa fa-exclamation-triangle"}),Mt.createElement("div",{className:"sp-margin-s-left"},Mt.createElement(ke,{message:hn.dockerBakeWarning}))),Mt.createElement("div",{className:"alert alert-info horizontal middle"},Mt.createElement("i",{className:"fa fa-info-circle"}),Mt.createElement("div",{className:"sp-margin-s-left"},Mt.createElement(ke,{message:"To edit bake configuration or view advanced options, migrate to EBS store type."}))),t&&Mt.createElement(Me,{label:"Store Type"},Dl.map(t=>Mt.createElement("label",{className:"radio-inline",key:t},Mt.createElement("input",{checked:e.storeType===t,name:"storeType",type:"radio",onChange:()=>this.updateStage({storeType:t})}),t.toUpperCase()))),Mt.createElement(Me,{label:"Regions"},(e.regions||[]).map(e=>Mt.createElement("span",{className:"sp-margin-xs-right",key:e},e))),Mt.createElement(Me,{label:"Skip Region Detection"},String(!!e.skipRegionDetection)),Mt.createElement(Me,{label:"Repo Path"},e.package),Mt.createElement(Me,{label:"Base OS"},e.baseOs),Mt.createElement(Me,{label:"VM Type"},e.vmType),Mt.createElement(Me,{label:"Store Type"},e.storeType),Mt.createElement(Me,{label:"Base Label"},e.baseLabel))}render(){if(this.state.loading)return Mt.createElement(ne,null);if(this.state.loadError)return Mt.createElement("div",{className:"alert alert-danger"},"Unable to load bakery options.");const e=this.props.stage;if(function(e){return!!hn.dockerBakeryDeprecated&&"docker"===e.storeType}(e))return Mt.createElement("div",{className:"form-horizontal"},this.renderDockerPreview());const t=zl(this.props.pipeline),a=this.state.vmTypes.length>1&&t,n=!hn.dockerBakeryDeprecated,r=!this.state.roscoMode&&t&&n,l=this.state.roscoMode||e.rebake,i=this.state.showAdvancedOptions,s=e.extendedAttributes||{},o="docker"===e.storeType?"Repo Path":"Package";return Mt.createElement("div",{className:"form-horizontal"},hn.bakeWarning&&Mt.createElement("div",{className:"alert alert-warning sp-margin-s-top horizontal middle"},Mt.createElement("i",{className:"fa fa-exclamation-triangle"}),Mt.createElement("div",{className:"sp-margin-s-left"},Mt.createElement(ke,{message:hn.bakeWarning}))),Mt.createElement(Me,{label:"Regions"},Mt.createElement(Ce,{inline:!0,name:"regions",onChange:e=>this.updateStage({regions:e.target.value}),showSelectAll:!0,stringOptions:this.state.regions,value:e.regions||[]})),Mt.createElement(Me,{label:"Skip Region Detection",helpKey:"pipeline.config.bake.skipRegionDetection"},Mt.createElement("div",{className:"checkbox",style:{marginBottom:0}},Mt.createElement("label",null,Mt.createElement("input",{checked:!!e.skipRegionDetection,type:"checkbox",onChange:e=>this.updateStage({skipRegionDetection:e.target.checked})}),"Only bake explicitly selected regions"))),Mt.createElement(Me,{label:o,helpKey:"pipeline.config.bake.package"},Mt.createElement("input",{className:"form-control input-sm",value:e.package||"",onChange:e=>this.updateStage({package:e.target.value})})),Mt.createElement(Me,{label:"Base OS"},Mt.createElement("select",{className:"form-control input-sm",value:e.baseOs||"",onChange:e=>this.updateStage({baseOs:e.target.value})},this.state.baseOsOptions.map(e=>Mt.createElement("option",{key:e.id,value:e.id},function(e){const t=(null==e?void 0:e.displayName)||(null==e?void 0:e.id)||"";return(null==e?void 0:e.shortDescription)?`${t} (${e.shortDescription})`:t}(e))))),a&&Mt.createElement(Me,{label:"VM Type"},this.state.vmTypes.map(t=>Mt.createElement("label",{className:"radio-inline",key:t},Mt.createElement("input",{checked:e.vmType===t,name:"vmType",type:"radio",onChange:()=>this.updateStage({vmType:t})}),t.toUpperCase()))),r&&Mt.createElement(Me,{label:"Store Type"},Dl.map(t=>Mt.createElement("label",{className:"radio-inline",key:t},Mt.createElement("input",{checked:e.storeType===t,name:"storeType",type:"radio",onChange:()=>this.updateStage({storeType:t})}),t.toUpperCase()))),Mt.createElement(Me,{label:"Base Label"},this.state.baseLabelOptions.map(t=>Mt.createElement("label",{className:"radio-inline",key:t},Mt.createElement("input",{checked:e.baseLabel===t,name:"baseLabel",type:"radio",onChange:()=>this.updateStage({baseLabel:t})}),t))),l&&Mt.createElement(Me,{label:"Rebake"},Mt.createElement("div",{className:"checkbox",style:{marginBottom:0}},Mt.createElement("label",null,Mt.createElement("input",{checked:!!e.rebake,type:"checkbox",onChange:e=>this.updateStage({rebake:e.target.checked})}),"Rebake image without regard to the status of any existing bake"))),Mt.createElement("div",{className:"form-group"},Mt.createElement("div",{className:"col-md-9 col-md-offset-1"},Mt.createElement("div",{className:"checkbox"},Mt.createElement("label",null,Mt.createElement("input",{checked:this.state.showAdvancedOptions,type:"checkbox",onChange:e=>this.setState({showAdvancedOptions:e.target.checked})}),Mt.createElement("strong",null,"Show Advanced Options"))))),i&&Mt.createElement(Mt.Fragment,null,t&&Mt.createElement(Me,{label:"Template File Name",helpKey:"pipeline.config.bake.templateFileName"},Mt.createElement("input",{className:"form-control input-sm",value:e.templateFileName||"",onChange:e=>this.updateStage({templateFileName:e.target.value})})),Mt.createElement(Me,{label:"Extended Attributes",helpKey:"pipeline.config.bake.extendedAttributes"},Mt.createElement("table",{className:"table table-condensed packed"},Mt.createElement("thead",null,Mt.createElement("tr",null,Mt.createElement("th",{style:{width:"40%"}},"Key"),Mt.createElement("th",{style:{width:"60%"}},"Value"),Mt.createElement("th",{className:"text-right"},"Actions"))),Mt.createElement("tbody",null,Object.keys(s).map(e=>Mt.createElement("tr",{key:e},Mt.createElement("td",null,Mt.createElement("strong",{className:"small"},e)),Mt.createElement("td",null,Mt.createElement("input",{className:"form-control input-sm",value:s[e],onChange:t=>this.updateExtendedAttribute(e,t.target.value)})),Mt.createElement("td",{className:"text-right"},Mt.createElement("a",{className:"small",href:"",onClick:t=>{t.preventDefault(),this.removeExtendedAttribute(e)}},"Remove"))))),Mt.createElement("tfoot",null,Mt.createElement("tr",null,Mt.createElement("td",null,Mt.createElement("input",{className:"form-control input-sm",placeholder:"Key",value:this.state.extendedAttributeKey,onChange:e=>this.setState({extendedAttributeKey:e.target.value})})),Mt.createElement("td",null,Mt.createElement("input",{className:"form-control input-sm",placeholder:"Value",value:this.state.extendedAttributeValue,onChange:e=>this.setState({extendedAttributeValue:e.target.value})})),Mt.createElement("td",{className:"text-right"},Mt.createElement("button",{className:"btn btn-block btn-sm add-new",type:"button",onClick:()=>this.addExtendedAttribute()},Mt.createElement("span",{className:"glyphicon glyphicon-plus-sign"})," Add Extended Attribute")))))),t&&Mt.createElement(Me,{label:"Var File Name",helpKey:"pipeline.config.bake.varFileName"},Mt.createElement("input",{className:"form-control input-sm",value:e.varFileName||"",onChange:e=>this.updateStage({varFileName:e.target.value})})),!!hn.minRootVolumeSize&&t&&Mt.createElement(Me,{label:"Root Volume Size"},Mt.createElement("input",{type:"number",className:"form-control input-sm",style:{width:80,display:"inline-block"},min:hn.minRootVolumeSize,value:e.rootVolumeSize||"",onChange:e=>this.updateStage({rootVolumeSize:e.target.value})})," ","GB ",Mt.createElement("span",{className:"small"},"(minimum: ",hn.minRootVolumeSize,")")),"docker"!==e.storeType&&t&&Mt.createElement(Me,{label:"Base Name"},Mt.createElement("input",{className:"form-control input-sm",value:e.baseName||"",onChange:e=>this.updateStage({baseName:e.target.value})})),"docker"!==e.storeType&&t&&Mt.createElement(Me,{label:"Base AMI",helpKey:"pipeline.config.bake.baseAmi"},Mt.createElement("input",{className:"form-control input-sm",value:e.baseAmi||"",onChange:e=>this.updateStage({baseAmi:e.target.value})})),t&&Mt.createElement(Me,{label:"docker"===e.storeType?"Docker Image Name":"AMI Name",helpKey:"pipeline.config.bake.amiName"},Mt.createElement("input",{className:"form-control input-sm",value:e.amiName||"",onChange:e=>this.updateStage({amiName:e.target.value})})),t&&Mt.createElement(Me,{label:"docker"===e.storeType?"Docker Image Prefix":"AMI Suffix",helpKey:"pipeline.config.bake.amiSuffix"},Mt.createElement("input",{className:"form-control input-sm",value:e.amiSuffix||"",onChange:e=>this.updateStage({amiSuffix:e.target.value})}))))}}function Rl({current:t,execution:a,name:n,stage:r}){var l,i,s,o,c;const d=r.context||{},m=Fl(d),u=m||(null==(l=null==a?void 0:a.trigger)?void 0:l.rebake)||d.rebake,p="FAILURE"===(null==(i=d.status)?void 0:i.result)&&!r.failureMessage,h=((m&&e.roscoDetailUrl?e.roscoDetailUrl:e.bakeryDetailUrl)||"").replace(/\{\{\s*context\.region\s*\}\}/g,d.region||"").replace(/\{\{\s*context\.status\.resourceId\s*\}\}/g,(null==(s=d.status)?void 0:s.resourceId)||"");return Mt.createElement($e,{name:n,current:t},Mt.createElement("div",{className:"row"},Mt.createElement("div",{className:"col-md-6"},Mt.createElement("dl",{className:"dl-narrow dl-horizontal"},Mt.createElement("dt",null,"Image"),Mt.createElement("dd",null,d.ami),Mt.createElement("dt",null,"Region"),Mt.createElement("dd",null,d.region),Mt.createElement("dt",null,"Package"),Mt.createElement("dd",null,d.package))),Mt.createElement("div",{className:"col-md-6"},Mt.createElement("dl",{className:"dl-narrow dl-horizontal"},Mt.createElement("dt",null,"Base OS"),Mt.createElement("dd",null,d.baseOs),Mt.createElement("dt",null,"VM Type"),Mt.createElement("dd",null,(d.vmType||"").toUpperCase()),!m&&Mt.createElement(Mt.Fragment,null,Mt.createElement("dt",null,"Store Type"),Mt.createElement("dd",null,(d.storeType||"").toUpperCase()),Mt.createElement("dt",null,"Label"),Mt.createElement("dd",null,d.baseLabel)),u&&Mt.createElement(Mt.Fragment,null,Mt.createElement("dt",null,"Rebake"),Mt.createElement("dd",null,String((null==(o=null==a?void 0:a.trigger)?void 0:o.rebake)||d.rebake||!1))),d.templateFileName&&Mt.createElement(Mt.Fragment,null,Mt.createElement("dt",null,"Template"),Mt.createElement("dd",null,d.templateFileName)),d.varFileName&&Mt.createElement(Mt.Fragment,null,Mt.createElement("dt",null,"Var File"),Mt.createElement("dd",null,d.varFileName))))),Mt.createElement(Ue,{stage:r,message:r.failureMessage}),d.region&&(null==(c=d.status)?void 0:c.resourceId)&&Mt.createElement("div",{className:"row"},Mt.createElement("div",{className:"col-md-12"},Mt.createElement("div",{className:"alert alert-"+(r.isFailed?"danger":"info")},d.previouslyBaked&&Mt.createElement("div",null,"No changes detected; reused existing bake"),d.imageName&&Mt.createElement("div",null,Mt.createElement("strong",null,"Image:"),Mt.createElement("div",null,d.imageName),Mt.createElement("div",null,"(",d.ami,")")),p&&Mt.createElement("span",null,"Bake failed. "),Mt.createElement("a",{target:"_blank",rel:"noopener noreferrer",href:h},"View Bakery Details"),p&&Mt.createElement("span",null," for more info.")))))}Rl.title="bakeConfig";const Ll={key:"bake",provides:"bake",cloudProvider:"aws",label:"Bake",description:"Bakes an image",component:Ml,executionDetailsSections:[Rl,Oe],executionLabelComponent:Le,extraLabelLines:e=>e.masterStage.context.allPreviouslyBaked||e.masterStage.context.somePreviouslyBaked?1:0,supportsCustomTimeout:!0,validators:[{type:"requiredField",fieldName:"package"},{type:"requiredField",fieldName:"regions"},{type:"upstreamVersionProvided",checkParentTriggers:!0,getMessage:e=>"Bake stages should always have a stage or trigger preceding them that provides version information: <ul>"+e.map(e=>`<li>${e}</li>`).join("")+"</ul>Otherwise, Spinnaker will bake and deploy the most-recently built package."}],restartable:!0};function Ol(){Re.pipeline.registerStage(Ll)}Ol();const $l=["min","max","desired"];const Ul={key:"cloneServerGroup",provides:"cloneServerGroup",cloudProvider:"aws",component:function(e){const{application:a,pipeline:n,stage:r,stageFieldUpdated:l,updateStageField:s}=e,[o,c]=Rt([]);Lt(()=>{var e;const t={};r.application||(t.application=a.name),"aws"!==r.cloudProvider&&(t.cloudProvider="aws"),"aws"!==r.cloudProviderType&&(t.cloudProviderType="aws"),!r.credentials&&(null==(e=a.defaultCredentials)?void 0:e.aws)&&(t.credentials=a.defaultCredentials.aws),void 0===r.target&&(t.target=Ve.TARGET_LIST[0].val),void 0===r.useSourceCapacity&&(t.useSourceCapacity=!0),r.isNew&&a.attributes.platformHealthOnlyShowOverride&&a.attributes.platformHealthOnly&&void 0===r.interestingHealthProviderNames&&(t.interestingHealthProviderNames=["Amazon"]),r.isNew&&(t.useAmiBlockDeviceMappings=ta(a,"attributes.providerSettings.aws.useAmiBlockDeviceMappings",!1),t.copySourceCustomBlockDeviceMappings=!1),Object.keys(t).length&&s(t)},[]),Lt(()=>{let e=!0;return i.listAccounts("aws").then(t=>e&&c(t)),()=>{e=!1}},[]),Lt(()=>{if(r.targetCluster){const e=He.monikerClusterNameFilter(r.targetCluster),t=He.getMonikers([a],e)[0];if(t)s({stack:t.stack,freeFormDetails:t.detail});else{const e=le.parseClusterName(r.targetCluster);s({stack:e.stack,freeFormDetails:e.freeFormDetails})}}else(r.stack||r.freeFormDetails)&&s({stack:"",freeFormDetails:""})},[r.targetCluster]);const d=r.copySourceCustomBlockDeviceMappings?"source":r.useAmiBlockDeviceMappings?"ami":"default",m=e=>{s("source"===e?{copySourceCustomBlockDeviceMappings:!0,useAmiBlockDeviceMappings:!1}:"ami"===e?{copySourceCustomBlockDeviceMappings:!1,useAmiBlockDeviceMappings:!0}:{copySourceCustomBlockDeviceMappings:!1,useAmiBlockDeviceMappings:!1})};return Mt.createElement("div",{className:"form-horizontal"},!n.strategy&&Mt.createElement(qe,{accounts:o,application:a,clusterField:"targetCluster",component:r,onComponentUpdate:l,singleRegion:"true"}),Mt.createElement(Me,{label:"Target"},Mt.createElement(We,{model:{target:r.target},onChange:e=>s({target:e}),options:Ve.TARGET_LIST})),Mt.createElement(Me,{label:"Capacity"},Mt.createElement("div",{className:"radio"},Mt.createElement("label",null,Mt.createElement("input",{checked:!1!==r.useSourceCapacity,onChange:()=>s({useSourceCapacity:!0,capacity:void 0}),type:"radio"}),"Copy the capacity from the current server group ",Mt.createElement(t,{id:"serverGroupCapacity.useSourceCapacityTrue"}))),Mt.createElement("div",{className:"radio"},Mt.createElement("label",null,Mt.createElement("input",{checked:!1===r.useSourceCapacity,onChange:()=>s({useSourceCapacity:!1}),type:"radio"}),"Let me specify the capacity ",Mt.createElement(t,{id:"serverGroupCapacity.useSourceCapacityFalse"})))),!1===r.useSourceCapacity&&Mt.createElement(Mt.Fragment,null,Mt.createElement("div",{className:"form-group"},Mt.createElement("div",{className:"col-md-2 col-md-offset-3"},"Min"),Mt.createElement("div",{className:"col-md-2"},"Max"),Mt.createElement("div",{className:"col-md-2"},"Desired")),Mt.createElement("div",{className:"form-group"},$l.map(e=>{var t,a;return Mt.createElement("div",{className:"col-md-2",style:"min"===e?{marginLeft:"25%"}:void 0,key:e},Mt.createElement("input",{className:"form-control input-sm",onChange:t=>s({capacity:{...r.capacity,[e]:""===t.target.value?void 0:Number(t.target.value)}}),required:!0,type:"number",value:null!=(a=null==(t=r.capacity)?void 0:t[e])?a:""}))}))),Mt.createElement(Me,{label:"Traffic",helpKey:"aws.serverGroup.traffic"},Mt.createElement("div",{className:"checkbox"},Mt.createElement("label",null,Mt.createElement("input",{checked:!(r.suspendedProcesses||[]).includes("AddToLoadBalancer"),onChange:()=>(e=>{const t=r.suspendedProcesses?[...r.suspendedProcesses]:[],a=t.indexOf(e);-1===a?t.push(e):t.splice(a,1),s({suspendedProcesses:t})})("AddToLoadBalancer"),type:"checkbox"}),"Send client requests to new instances"))),Mt.createElement(Me,{label:"AMI Block Device Mappings"},Mt.createElement("div",{className:"radio"},Mt.createElement("div",null,Mt.createElement("label",null,Mt.createElement("input",{checked:"source"===d,name:"blockDeviceMappingsSource",onChange:()=>m("source"),type:"radio"}),"Copy from current server group ",Mt.createElement(t,{id:"aws.blockDeviceMappings.useSource"}))),Mt.createElement("div",null,Mt.createElement("label",null,Mt.createElement("input",{checked:"ami"===d,name:"blockDeviceMappingsSource",onChange:()=>m("ami"),type:"radio"}),"Prefer AMI block device mappings ",Mt.createElement(t,{id:"aws.blockDeviceMappings.useAMI"}))),Mt.createElement("div",null,Mt.createElement("label",null,Mt.createElement("input",{checked:"default"===d,name:"blockDeviceMappingsSource",onChange:()=>m("default"),type:"radio"}),"Defaults for selected instance type ",Mt.createElement(t,{id:"aws.blockDeviceMappings.useDefaults"}))))),a.attributes.platformHealthOnlyShowOverride&&Mt.createElement(Me,{label:"Task Completion"},Mt.createElement(je,{interestingHealthProviderNames:r.interestingHealthProviderNames||[],onChange:e=>s({interestingHealthProviderNames:e}),platformHealthType:"Amazon"})),Mt.createElement(Ze,{command:r,fieldColumns:"6",onFieldChange:(e,t)=>{ia(r,e,t),l()},onStrategyChange:()=>l()}))},accountExtractor:e=>[e.context.credentials],validators:[{type:"requiredField",fieldName:"targetCluster",fieldLabel:"cluster"},{type:"requiredField",fieldName:"target"},{type:"requiredField",fieldName:"region"},{type:"requiredField",fieldName:"credentials",fieldLabel:"account"}]};function Vl(){Re.pipeline.registerStage(Ul)}Vl();const Hl=[{label:"Newest Function Version",value:"$LATEST",description:"Delete the most recently deployed function version when this stage starts."},{label:"Previous Function Version",value:"$PREVIOUS",description:"Delete the second-most recently deployed function version when this stage starts."},{label:"Older Than N",value:"$MOVING",description:"Delete all version but the N most recent versions."},{label:"Provide Version Number",value:"$PROVIDED",description:"Provide a specific version number to delete."},{label:"All Function Versions",value:"$ALL",description:"Delete all function versions and function infrastructure. This will completely delete the Lambda function."}];class ql extends Mt.Component{constructor(e){super(e);const{value:t}=this.props,a=Hl.filter(e=>e.value===t)[0];this.state={label:a.label,value:a.value,description:a.description}}render(){return Mt.createElement("div",null,Mt.createElement("b",null," ",this.state.label," "),Mt.createElement("br",null),Mt.createElement("small",null," ",this.state.description," "))}}function Wl(e){const{values:a}=e.formik,{functions:n}=e.application,{result:l,status:o}=u(()=>i.listAccounts("aws"),[],[]),c=a.account&&a.region?n.data.filter(e=>e.account===a.account).filter(e=>e.region===a.region).map(e=>e.functionName):[];return Mt.createElement("div",{className:"form-horizontal"},Mt.createElement(r,{label:"Account",name:"account",onChange:(t,a)=>{e.formik.setFieldValue("region",null),e.formik.setFieldValue("functionName",null),e.formik.setFieldValue(t,a)},required:!0,input:e=>Mt.createElement(s,{...e,clearable:!1,isLoading:"PENDING"===o,stringOptions:l.map(e=>e.name)})}),Mt.createElement(r,{label:"Region",name:"region",onChange:(t,a)=>{e.formik.setFieldValue("functionName",null),e.formik.setFieldValue(t,a)},input:e=>Mt.createElement(s,{clearable:!1,disabled:!a.account,placeholder:a.account?"Select...":"Select an Account...",...e,isLoading:"PENDING"===o,stringOptions:l.filter(e=>e.name===a.account).flatMap(e=>e.regions).map(e=>e.name)})}),Mt.createElement(r,{label:"Function Name",name:"functionName",input:e=>Mt.createElement(s,{clearable:!1,disabled:!(a.account&&a.region),placeholder:a.account&&a.region?"Select...":"Select an Account and Region...",...e,stringOptions:c})}),Mt.createElement(r,{label:"Target Version",name:"version",input:t=>Mt.createElement(s,{...t,clearable:!1,options:Hl,optionRenderer:t=>Mt.createElement(ql,{config:e,value:t.value,showingDetails:!0})})}),"$PROVIDED"===a.version?Mt.createElement(r,{label:"Version Number",name:"versionNumber",input:e=>Mt.createElement(s,{...e,clearable:!1,stringOptions:n.data.filter(e=>e.account===a.account).filter(e=>e.region===a.region).filter(e=>e.functionName===a.functionName).flatMap(e=>Object.values(e.revisions).sort(function(e,t){return t-e})).filter(e=>"$LATEST"!==e)})}):null,"$MOVING"===a.version?Mt.createElement(r,{name:"retentionNumber",help:Mt.createElement(t,{content:"The number of Lambda versions to retain"}),label:"Prior Versions to Retain",input:e=>Mt.createElement(d,{...e,min:1,max:100})}):null)}function jl(e){const{stage:t,name:a,current:n}=e;return Mt.createElement($e,{name:a,current:n},Mt.createElement(Ue,{stage:t,message:t.outputs.failureMessage}),Mt.createElement("div",null,Mt.createElement("p",null," ",Mt.createElement("b",null," Status: ")," ","done"===t.outputs.deleteTask?"COMPLETE":t.outputs.deleteTask," "),Mt.createElement("p",null," ",Mt.createElement("b",null," Deleted Version: ")," ",t.outputs["deleteTask:deleteVersion"]?t.outputs["deleteTask:deleteVersion"]:"N/A"," ")))}function Zl(e){const t=new n(e);return t.field("account","Account Name").required(),t.field("region","Region").required(),t.field("functionName","Lambda Function Name").required(),t.field("version","Lambda Function Version").required(),t.validateForm()}(jl||(jl={})).title="Delete Lambda Stage";const _l={key:"Aws.LambdaDeleteStage",label:"AWS Lambda Delete",description:"Delete an AWS Lambda Function",component:function(e){return Mt.createElement("div",{className:"DeleteLambdaStageConfig"},Mt.createElement(_e,{...e,validate:Zl,onChange:e.updateStage,render:e=>Mt.createElement(Wl,{...e})}))},executionDetailsSections:[jl,Oe],validateFn:Zl};function Kl(){e.feature.lambdaAdditionalStages&&Re.pipeline.registerStage(_l)}const Yl=e=>{const{stage:t,updateStageField:a}=e,n=t.changeSetName||"ChangeSet-${execution['id']}";return Mt.createElement("div",null,Mt.createElement("hr",null),Mt.createElement("h4",null,"ChangeSet Configuration"),Mt.createElement(Me,{label:"ChangeSet Name"},Mt.createElement(l,{className:"form-control",type:"text",value:n,onChange:e=>{return t=e.target.value,void a({changeSetName:t});var t}})),Mt.createElement(Me,{label:"Execute ChangeSet"},Mt.createElement(o,{checked:t.executeChangeSet,onChange:e=>{return t=e.target.checked,void a({executeChangeSet:t});var t}})),t.executeChangeSet&&Mt.createElement(Me,{label:"If ChangeSet contains a replacement",helpKey:"aws.cloudformation.changeSet.options"},Mt.createElement(s,{clearable:!1,value:t.actionOnReplacement,options:[{value:"ask",label:"ask"},{value:"skip",label:"skip it"},{value:"execute",label:"execute it"},{value:"fail",label:"fail stage"}],onChange:e=>{return t=e.target.value,void a({actionOnReplacement:t});var t}})))},Xl=["CAPABILITY_IAM","CAPABILITY_NAMED_IAM","CAPABILITY_AUTO_EXPAND"];function Jl(e){return"string"==typeof e?e:null==e?"":Je(Array.isArray(e)?e:[e])}function Ql({application:e,pipeline:t,stage:a,updateStageField:n}){var r,l;const[o,c]=Mt.useState([]),[d,m]=Mt.useState([]),[u,p]=Mt.useState(()=>({refId:a.refId,rawTemplateBody:Jl(a.templateBody)})),h=a.source||"text",g=a.credentials||a.account||"",v=[g,...o.map(e=>e.name)].filter((e,t,a)=>e&&a.indexOf(e)===t),f=[...a.regions||[],...d].filter((e,t,a)=>e&&a.indexOf(e)===t);u.refId!==a.refId&&p({refId:a.refId,rawTemplateBody:Jl(a.templateBody)}),Mt.useEffect(()=>{var t,r;const l={},i={capabilities:[],cloudProvider:"aws",parameters:{},regions:(null==(t=e.defaultRegions)?void 0:t.aws)?[e.defaultRegions.aws]:[],source:"text",tags:{}};Object.entries(i).forEach(([e,t])=>{void 0===a[e]&&(l[e]=t)});const s=null==(r=e.defaultCredentials)?void 0:r.aws;s&&(void 0===a.credentials&&(l.credentials=s),void 0===a.account&&(l.account=s)),Object.keys(l).length&&n(l)},[]),Mt.useEffect(()=>{let e=!0;return Promise.all([i.getAllAccountDetailsForProvider("aws"),i.getUniqueAttributeForAllAccounts("aws","regions")]).then(([t,a])=>{e&&(c(t),m(a))}),()=>{e=!1}},[]);return Mt.createElement("div",{className:"container-fluid form-horizontal"},Mt.createElement("h4",null,"Basic Settings"),Mt.createElement(Me,{label:"Account"},Mt.createElement(Te,{accounts:v,name:"credentials",onChange:e=>n({credentials:e.target.value,account:e.target.value}),provider:"aws",value:g})),Mt.createElement(Me,{label:"Regions"},Mt.createElement(Ce,{inline:!0,name:"regions",onChange:e=>n({regions:e.target.value}),showSelectAll:!0,stringOptions:f,value:a.regions||[]})),Mt.createElement("h4",null,"Template Configuration"),Mt.createElement(Me,{label:"Stack name"},Mt.createElement("input",{className:"form-control input-sm",name:"stackName",onChange:e=>n({stackName:e.target.value}),required:!0,type:"text",value:a.stackName||""}),Mt.createElement("label",null,Mt.createElement("input",{checked:!!a.isChangeSet,name:"isChangeSet",onChange:e=>n({isChangeSet:e.target.checked}),type:"checkbox"})," ",Mt.createElement("strong",null,"Create CloudFormation ChangeSet"))),Mt.createElement(Me,{label:"IAM role ARN"},Mt.createElement("input",{className:"form-control input-sm",name:"roleARN",onChange:e=>n({roleARN:e.target.value}),type:"text",value:a.roleARN||""})),Mt.createElement(Me,{label:"Source",helpKey:"aws.cloudformation.source"},Mt.createElement("label",null,Mt.createElement("input",{checked:"text"===h,name:"source",onChange:()=>n({source:"text",stackArtifactId:null,stackArtifactAccount:null,stackArtifact:null}),type:"radio",value:"text"})," ","Text"),Mt.createElement("br",null),Mt.createElement("label",null,Mt.createElement("input",{checked:"artifact"===h,name:"source",onChange:()=>n({source:"artifact"}),type:"radio",value:"artifact"})," ","Artifact")),"text"===h&&Mt.createElement(Ke,{onChange:(e,t)=>{p({refId:a.refId,rawTemplateBody:e}),null!==t&&n({templateBody:t})},value:u.rawTemplateBody}),"artifact"===h&&Mt.createElement(Ye,{artifact:a.stackArtifact,excludedArtifactTypePatterns:[],expectedArtifactId:a.stackArtifactId,fieldColumns:8,helpKey:"aws.cloudformation.expectedArtifact",label:"Expected Artifact",onArtifactEdited:e=>{n({stackArtifactId:null,stackArtifact:e})},onExpectedArtifactSelected:e=>{var t;n({stackArtifactId:e.id,stackArtifactAccount:(null==(t=e.matchArtifact)?void 0:t.artifactAccount)||null,stackArtifact:null})},pipeline:t,stage:a}),a.isChangeSet&&Mt.createElement(Yl,{stage:a,updateStageField:n}),Mt.createElement("hr",null),Mt.createElement(Me,{label:"Parameters",fieldColumns:6},Mt.createElement(Xe,{addButtonLabel:"Add parameter",model:null!=(r=a.parameters)?r:{},onChange:e=>n({parameters:e}),pipeline:t,valueCanContainSpel:!0})),Mt.createElement("hr",null),Mt.createElement(Me,{label:"Tags",fieldColumns:6},Mt.createElement(Xe,{addButtonLabel:"Add tag",model:null!=(l=a.tags)?l:{},onChange:e=>n({tags:e}),pipeline:t,valueCanContainSpel:!0})),Mt.createElement("hr",null),Mt.createElement(Me,{label:"Capabilities",fieldColumns:6},Mt.createElement(s,{multi:!0,name:"capabilities",onChange:e=>n({capabilities:e.target.value}),stringOptions:Xl,value:a.capabilities})))}class ei extends zt.Component{constructor(e){super(e)}render(){const{stage:e,current:t,name:a}=this.props;return zt.createElement($e,{name:a,current:t},zt.createElement(Qe,{item:e}),zt.createElement(Ue,{stage:e,message:e.failureMessage}))}}ei.title="Task Status";class ti{constructor(e){this.executionService=e}evaluateExecution(e,t,a,n){const r=e=>{const t=e.stages.find(e=>e.id===a.id);return t&&"RUNNING"!==t.status};return this.executionService.patchExecution(t.id,a.id,{changeSetExecutionChoice:n}).then(()=>this.executionService.waitUntilExecutionMatches(t.id,r)).then(t=>this.executionService.updateExecution(e,t))}}const ai=e=>{const{execution:t,stage:a,application:n}=e,{executionService:r}=De(),[l,i]=Rt(!1),[s,o]=Rt(""),[c,d]=Rt(!1),m=e=>{i(!0),o(e),d(!1),new ti(r).evaluateExecution(n,t,a,e)},u=e=>a.judgmentStatus===e||l&&s===e;return Mt.createElement("div",null,Mt.createElement("div",null,Mt.createElement("p",null,"This ChangeSet contains a replacement, which means there will be ",Mt.createElement("b",null,"potential data loss")," when executed."),Mt.createElement("p",null,"How do you want to proceed?"),Mt.createElement("div",{className:"action-buttons"},Mt.createElement("button",{className:"btn btn-danger",onClick:()=>{m("execute")},disabled:l},u("Execute")&&Mt.createElement(ne,{mode:"circular"}),a.context.stopButtonLabel||"Execute"),Mt.createElement("button",{className:"btn btn-primary",disabled:l,onClick:()=>{m("skip")}},u("Skip")&&Mt.createElement(ne,{mode:"circular"}),a.context.skipButtonLabel||"Skip"),Mt.createElement("button",{className:"btn btn-primary",disabled:l,onClick:()=>{m("fail")}},u("Fail")&&Mt.createElement(ne,{mode:"circular"}),a.context.FailButtonLabel||"Fail"))),c&&Mt.createElement("div",{className:"error-message"},"There was an error recording your decision. Please try again."))};class ni extends zt.Component{constructor(e){super(e)}render(){const{application:e,execution:t,stage:a,current:n,name:r}=this.props,l=a.context.changeSetContainsReplacement,i=l&&a.isRunning&&"ask"===a.context.actionOnReplacement,s=a.context.isChangeSet;return zt.createElement($e,{name:r,current:n},i?zt.createElement(ai,{key:a.refId,application:e,execution:t,stage:a}):zt.createElement("div",null,s?zt.createElement("div",null,zt.createElement("dl",{className:"no-margin"},zt.createElement("dt",null,"ChangeSet Name"),zt.createElement("dd",null,a.context.changeSetName),zt.createElement("dt",null,"Replacement"),zt.createElement("dd",null,String(l)),a.context.changeSetExecutionChoice&&zt.createElement("div",null,zt.createElement("dt",null,"Judgment"),zt.createElement("dd",null,a.context.changeSetExecutionChoice),zt.createElement("dt",null,"Judged By"),zt.createElement("dd",null,a.context.lastModifiedBy)))):zt.createElement("div",null,"No changeSets found")))}}ni.title="Change Set Execution";class ri extends zt.Component{render(){if(!this.props.executionMarker)return zt.createElement(et,{...this.props});const{stage:e}=this.props;if(e.isRunning&&e.stages[0].context.changeSetContainsReplacement&&"ask"===e.stages[0].context.actionOnReplacement){const t=zt.createElement("div",null,zt.createElement("div",null,zt.createElement("b",null,e.name)),zt.createElement(ai,{stage:e.masterStage,application:this.props.application,execution:this.props.execution}));return zt.createElement(re,{template:t},this.props.children)}const t=zt.createElement(Va,{id:e.id},e.name);return zt.createElement(Ha,{placement:"top",overlay:t},zt.createElement("span",null,this.props.children))}}class li extends zt.Component{constructor(e){super(e)}render(){return this.props.stage.isRunning&&this.props.stage.stages[0].context.changeSetContainsReplacement&&"ask"===this.props.stage.stages[0].context.actionOnReplacement?(this.props.stage.requiresAttention=!0,zt.createElement("span",{className:"fa fa-child"})):null}}function ii(){Re.pipeline.registerStage({label:"Deploy (CloudFormation Stack)",description:"Deploy a CloudFormation Stack",key:"deployCloudFormation",cloudProvider:"aws",component:Ql,useCustomTooltip:!0,executionDetailsSections:[ei,ni],executionLabelComponent:ri,producesArtifacts:!0,supportsCustomTimeout:!0,validators:[],markerIcon:li,accountExtractor:e=>e.account?[e.account]:[],configAccountExtractor:e=>e.account?[e.account]:[],artifactExtractor:at.accumulateArtifacts(["stackArtifactId","requiredArtifactIds"]),artifactRemover:tt.removeArtifactFromFields(["stackArtifactId","requiredArtifactIds"])})}function si(e,t){return Object.entries(t).forEach(([t,a])=>{var n;e[t]||ma(n=a)&&(jt(n)||""===n)||(e[t]=a)}),e}function oi(e){const{values:a}=e.formik,n=()=>{const t=le.getClusterName(e.application.name,a.stackName,a.detailName),n=a.functionUid;e.formik.setFieldValue("functionName",`${t}-${n}`)},{result:c,status:d}=u(()=>i.listAccounts("aws"),[],[]);return Mt.createElement("div",null,Mt.createElement(r,{label:"Account",name:"account",input:e=>Mt.createElement(s,{...e,clearable:!1,isLoading:"PENDING"===d,stringOptions:c.map(e=>e.name)})}),Mt.createElement(r,{label:"Region",name:"region",onChange:t=>{e.formik.setFieldValue("enableLambdaAtEdge",!1),e.formik.setFieldValue("region",t)},input:e=>Mt.createElement(s,{...e,clearable:!1,isLoading:"PENDING"===d,stringOptions:c.filter(e=>e.name===a.account).flatMap(e=>e.regions).map(e=>e.name)})}),Mt.createElement(r,{name:"functionUid",label:"Function Name",onChange:t=>{e.formik.setFieldValue("functionUid",t),n()},help:Mt.createElement(t,{id:"aws.function.name"}),input:e=>Mt.createElement(l,{...e})}),Mt.createElement(r,{name:"stackName",label:"Stack",help:Mt.createElement(t,{content:kn}),onChange:t=>{e.formik.setFieldValue("stackName",t),n()},input:e=>Mt.createElement(l,{...e})}),Mt.createElement(r,{name:"detailName",label:"Detail",help:Mt.createElement(t,{content:Tn}),onChange:t=>{e.formik.setFieldValue("detailName",t),n()},input:e=>Mt.createElement(l,{...e})}),Mt.createElement(r,{name:"aliasNames",label:"Alias Name",help:Mt.createElement(t,{content:"AWS Lambda aliases are like a pointer to a specific function version. Users can access the function version using the alias Amazon Resource Name (ARN). Input the alias name and select `Create option ALIAS-INPUT` to add the alias."}),input:t=>Mt.createElement(nt,{...t,multi:!0,clearable:!1,placeholder:"Input Alias Name...",onChange:t=>{var a,n;a=t,n="aliases",e.formik.setFieldValue(n,a.map(e=>e.value))},value:a.aliases?a.aliases.map(e=>({value:e,label:e})):[]})}),Mt.createElement(r,{name:"runtime",label:"Runtime",help:Mt.createElement(t,{id:"aws.function.runtime"}),input:e=>Mt.createElement(s,{...e,stringOptions:Sn,clearable:!0})}),Mt.createElement(r,{name:"s3bucket",label:"S3 Bucket",help:Mt.createElement(t,{id:"aws.function.s3bucket"}),input:e=>Mt.createElement(l,{...e,placeholder:"S3 bucket name"})}),Mt.createElement(r,{name:"s3key",label:"S3 Key",help:Mt.createElement(t,{id:"aws.function.s3key"}),input:e=>Mt.createElement(l,{...e,placeholder:"object.zip"})}),Mt.createElement(r,{name:"handler",label:"Handler",help:Mt.createElement(t,{id:"aws.function.handler"}),input:e=>Mt.createElement(l,{...e,placeholder:"filename.method"})}),Mt.createElement(r,{name:"publish",label:"Publish",help:Mt.createElement(t,{id:"aws.function.publish"}),input:e=>Mt.createElement(o,{...e})}))}function ci(e){const{securityGroupReader:t}=De(),{values:a}=e.formik,n=t=>{e.formik.setFieldValue("securityGroupIds",null),e.formik.setFieldValue("subnetIds",null),e.formik.setFieldValue("vpcId",t.target.value)},{result:l,status:i}=u(()=>m.listNetworksByProvider("aws"),[],[]),{result:o}=u(()=>p.listSubnetsByProvider("aws"),[],[]),{result:c}=u(()=>t.getAllSecurityGroups(),void 0,[]),d=a.account&&a.region&&"PENDING"!==i?l.filter(e=>!1===e.deprecated).filter(e=>e.account===a.account).filter(e=>e.region===a.region).map(e=>e.id):[],g=Vt(o.filter(e=>e.vpcId===a.vpcId),"id"),v=a.account&&a.region&&a.vpcId?c[a.account].aws[a.region].filter(e=>e.vpcId===a.vpcId).map(e=>({value:e.id,label:e.name})):[];return Mt.createElement("div",null,Mt.createElement(r,{name:"vpcId",label:"VPC Id",input:e=>Mt.createElement(s,{...e,onChange:n,isLoading:"PENDING"===i,stringOptions:d,clearable:!0})}),Mt.createElement("div",{className:"form-group"},Mt.createElement("div",{className:"col-md-4 sm-label-right"},Mt.createElement("b",null,"Subnets ")),0===g.length?Mt.createElement("div",{className:"form-control-static"},"No subnets found in the selected account/region/VPC "):Mt.createElement("div",{className:"col-md-6"},Mt.createElement(h,{multi:!0,options:g.map(e=>{return{value:(t=e).id,label:t.id};var t}),value:a.subnetIds,onChange:t=>{const a=t.map(e=>e.value);e.formik.setFieldValue("subnetIds",a)}}))),Mt.createElement("div",{className:"form-group"},Mt.createElement("div",{className:"col-md-4 sm-label-right"},Mt.createElement("b",null,"Security Groups ")),0===v.length?Mt.createElement("div",{className:"form-control-static"},"No security groups found in the selected account/region/VPC "):Mt.createElement("div",{className:"col-md-6"},Mt.createElement(h,{multi:!0,options:v,value:a.securityGroupIds,onChange:t=>{const a=t.map(e=>e.value);e.formik.setFieldValue("securityGroupIds",a)}}))))}function di(){return Mt.createElement(r,{name:"role",label:"Role ARN",input:e=>Mt.createElement(l,{...e,placeholder:"Enter role ARN",name:"role"})})}function mi(e){const{values:a}=e.formik;return Mt.createElement("div",null,Mt.createElement(r,{name:"triggerArns",label:"Event ARNs",help:Mt.createElement(t,{content:"The resource ARNs for Lambda event trigger sources. Triggers created here will only be applied to the higher level function, and will NOT be applied to function aliases. Input the entire ARN and select `Create option TRIGGER-ARN-INPUT` to add the ARN."}),input:t=>Mt.createElement(nt,{...t,multi:!0,placeholder:"Input ARN...",onChange:t=>{var a,n;a=t,n="triggerArns",e.formik.setFieldValue(n,a.map(e=>e.value))},value:a.triggerArns?a.triggerArns.map(e=>({value:e,label:e})):[]})}),Mt.createElement(r,{name:"batchsize",label:"Event Batch Size",input:e=>Mt.createElement(d,{...e,min:1,max:1e3})}))}const ui="Validate AWS Lambda function configuration against Lambda@Edge requirements. This will not enable Lambda@Edge on this function. ";function pi(e){const{values:a}=e.formik;return"us-east-1"!==a.region?Mt.createElement("div",{className:"horizontal center"},"Lambda@Edge is only available in region us-east-1."):Mt.createElement("div",null,Mt.createElement(r,{name:"enableLambdaAtEdge",label:"Enable Lambda@Edge Validation",help:Mt.createElement(t,{content:ui}),input:e=>Mt.createElement(o,{...e})}))}function hi(e){const{values:a,errors:n}=e.formik,i=ba({well:!0,"alert-danger":!!n.functionName,"alert-info":!n.functionName});return Mt.createElement("div",{className:"form-horizontal"},Mt.createElement("div",{className:i},Mt.createElement("strong",null,"Your function will be named: "),Mt.createElement(t,{id:"aws.function.name"}),Mt.createElement("span",null,a.functionName?a.functionName:e.application.name),Mt.createElement(r,{name:"functionName",input:()=>null})),Mt.createElement("h4",null,"Basic Settings"),Mt.createElement(oi,{...e}),Mt.createElement("h4",null," Execution Role "),Mt.createElement(di,null),Mt.createElement("h4",null," Environment "),!0!==a.enableLambdaAtEdge?Mt.createElement(Mt.Fragment,null,Mt.createElement(r,{name:"envVariables",label:"Env Variables",input:e=>Mt.createElement(c,{...e,allowEmptyValues:!0,addButtonLabel:"Add"})}),Mt.createElement(r,{name:"encryptionKMSKeyArn",label:"Key ARN",help:Mt.createElement(t,{id:"aws.function.kmsKeyArn"}),input:e=>Mt.createElement(l,{...e})})):Mt.createElement("div",{className:"horizontal center"},"Environment variables not available with Lambda@Edge functions."),Mt.createElement("h4",null," Tags "),Mt.createElement(r,{name:"tags",input:e=>Mt.createElement(c,{...e,allowEmptyValues:!1,addButtonLabel:"Add"})}),Mt.createElement("h4",null," Settings "),Mt.createElement(r,{name:"description",label:"Description",input:e=>Mt.createElement(l,{...e})}),Mt.createElement(r,{name:"layers",label:"Layer ARNs",help:Mt.createElement(t,{content:"The resource ARNs for Lambda layer. Input the entire ARN and select `Create option TRIGGER-ARN-INPUT` to add the ARN."}),input:t=>Mt.createElement(nt,{...t,multi:!0,placeholder:"Layer ARN...",onChange:t=>{var a,n;a=t,n="layers",e.formik.setFieldValue(n,a.map(e=>e.value))},value:a.layers?a.layers.map(e=>({value:e,label:e})):[]})}),Mt.createElement(r,{name:"reservedConcurrentExecutions",label:"Reserved Concurrency",help:Mt.createElement(t,{content:"The total number of current executions of your Lambda function that can be instantiated at any time."}),input:e=>Mt.createElement(d,{...e,min:0,max:3e3})}),Mt.createElement(r,{name:"memorySize",label:"Memory (MB)",help:Mt.createElement(t,{id:"aws.functionBasicSettings.memorySize"}),input:e=>Mt.createElement(d,{...e,min:128,max:!0===a.enableLambdaAtEdge?128:3008})}),Mt.createElement(r,{name:"timeout",label:"Timeout (seconds)",help:Mt.createElement(t,{id:"aws.functionBasicSettings.timeout"}),input:e=>Mt.createElement(d,{...e,min:1,max:!0===a.enableLambdaAtEdge?5:900})}),Mt.createElement(pi,{...e}),Mt.createElement("h4",null," Network "),!0!==a.enableLambdaAtEdge?Mt.createElement(ci,{...e}):Mt.createElement("div",{className:"horizontal center"},"VPC configuration not available with Lambda@Edge functions."),Mt.createElement("h4",null," Event Triggers "),Mt.createElement(mi,{...e}),Mt.createElement("h4",null," Debugging and Error Handling "),"Dead Letter Config",Mt.createElement(r,{name:"deadLetterConfig.targetArn",label:"Target ARN",help:Mt.createElement(t,{id:"aws.function.deadletterqueue"}),input:e=>Mt.createElement(l,{...e})}),"X-Ray Tracing",Mt.createElement(r,{name:"tracingConfig.mode",label:"Mode",help:Mt.createElement(t,{id:"aws.function.tracingConfig.mode"}),input:e=>Mt.createElement(s,{...e,stringOptions:["Active","PassThrough"],clearable:!0})}))}function gi(e){const t=new n(e);return t.field("runtime","Runtime").required(),t.field("s3key","S3 Object Key").required(),t.field("handler","Handler").required(),t.field("functionUid","Function Name").required(),t.field("stackName","Stack Name").optional().withValidators(Nn),t.field("detailName","Detail Name").optional().withValidators(Nn),t.field("s3bucket","S3 Bucket Name").required().withValidators(yn),t.field("role","Role ARN").required().withValidators(En),t.field("triggerArns","Trigger ARNs").optional().withValidators((e,t)=>e.map(e=>bn(e,e)).every(e=>void 0===e)?void 0:"Invalid ARN. Event ARN must match regular expression: /^arn:aws[a-zA-Z-]?:[a-zA-Z_0-9.-]+:./"),t.validateForm()}function vi(e){const{stage:t,current:a,name:n}=e;return Mt.createElement($e,{name:n,current:a},Mt.createElement(Ue,{stage:t,message:t.outputs.failureMessage}),Mt.createElement("div",null,Mt.createElement("p",null," ",Mt.createElement("b",null," Function Name: ")," ",t.outputs.functionName?t.outputs.functionName:"N/A"," "),Mt.createElement("p",null," ",Mt.createElement("b",null," Function ARN: ")," ",t.outputs.functionARN?t.outputs.functionARN:"N/A"," ")))}(vi||(vi={})).title="Lambda Deployment Stage";const fi={key:"Aws.LambdaDeploymentStage",label:"AWS Lambda Deployment",description:"Create a Single AWS Lambda Function",component:function(e){const t={role:"",runtime:"",s3key:"",s3bucket:"",handler:"",functionName:"",publish:!1,tags:{},memorySize:128,description:"",credentials:"",cloudProvider:"aws",region:"",envVariables:{},tracingConfig:{mode:"PassThrough"},kmskeyArn:"",vpcId:"",subnetIds:[],securityGroupIds:[],timeout:3,deadLetterConfig:{targetArn:""},operation:"",targetGroups:""};return Mt.createElement("div",{className:"LambdaDeploymentConfig"},Mt.createElement(_e,{...e,stage:si(e.stage,t),validate:gi,onChange:e.updateStage,render:e=>Mt.createElement(hi,{...e})}))},executionDetailsSections:[vi,Oe],validateFn:gi};function Ei(){e.feature.lambdaAdditionalStages&&Re.pipeline.registerStage(fi)}const yi=[{label:"Largest",val:"LARGEST",description:"When multiple server groups exist, prefer the server group with the most instances"},{label:"Newest",val:"NEWEST",description:"When multiple server groups exist, prefer the newest"},{label:"Oldest",val:"OLDEST",description:"When multiple server groups exist, prefer the oldest"},{label:"Fail",val:"FAIL",description:"When multiple server groups exist, fail"}],bi=[{fieldName:"credentials",label:"Account",type:"account"},{fieldName:"regions",label:"Region",type:"regions"},{fieldName:"cluster",label:"Cluster"},{fieldName:"selectionStrategy",label:"Server Group Selection",type:"selectionStrategy"},{fieldName:"onlyEnabled",label:"Server Group Filters",type:"onlyEnabled"}],Ci={destroyAsg:[{fieldName:"credentials",label:"Account",type:"account"},{fieldName:"regions",label:"Region",type:"regions"},{fieldName:"cluster",label:"Cluster"},{fieldName:"target",label:"Server Group",type:"target"}],destroyServerGroup:[{fieldName:"credentials",label:"Account",type:"account"},{fieldName:"regions",label:"Region",type:"regions"},{fieldName:"cluster",label:"Cluster"},{fieldName:"target",label:"Server Group",type:"target"}],findAmi:bi,findImage:bi},Ni=[{fieldName:"credentials",label:"Account",type:"account"},{fieldName:"regions",label:"Region",type:"regions"}];function wi(e,t){return"regions"===t.type?(e.regions||[]).join(", "):"account"===t.type?e[t.fieldName]||e.account||"":e[t.fieldName]||""}function Si(e,t,a,n){const{application:r,stage:l,updateStageField:i}=e;if("selectionStrategy"===t.type)return Mt.createElement("select",{className:"form-control input-sm",onChange:e=>i({[t.fieldName]:e.target.value}),value:l[t.fieldName]||yi[0].val},yi.map(e=>Mt.createElement("option",{key:e.val,title:e.description,value:e.val},e.label)));if("onlyEnabled"===t.type)return Mt.createElement("label",{className:"checkbox-inline"},Mt.createElement("input",{checked:!1!==l[t.fieldName],onChange:e=>i({[t.fieldName]:e.target.checked}),type:"checkbox"}),"Only consider enabled Server Groups");if("target"===t.type)return Mt.createElement("select",{className:"form-control input-sm",onChange:e=>i({[t.fieldName]:e.target.value}),value:l[t.fieldName]||""},Mt.createElement("option",{value:""},"Select server group"),Ve.TARGET_LIST.map(e=>Mt.createElement("option",{key:e.val,title:e.description,value:e.val},e.label)));if("account"===t.type)return Mt.createElement("select",{className:"form-control input-sm",name:t.fieldName,onChange:e=>i({[t.fieldName]:e.target.value,account:e.target.value}),value:wi(l,t)},Mt.createElement("option",{value:""},"Select..."),a.map(e=>e.name).sort().map(e=>Mt.createElement("option",{key:e,value:e},e)));if("regions"===t.type)return Mt.createElement(Ce,{inline:!0,name:t.fieldName,onChange:e=>i({[t.fieldName]:e.target.value}),showSelectAll:!0,stringOptions:n,value:l[t.fieldName]||[]});if("cluster"===t.fieldName){const e=He.clusterFilterForCredentialsAndRegion(l.credentials,l.regions),a=He.getClusters([r],e);return Mt.createElement("select",{className:"form-control input-sm cluster-select",onChange:e=>i({[t.fieldName]:e.target.value}),value:l[t.fieldName]||""},Mt.createElement("option",{value:""},"Select a cluster..."),a.map(e=>Mt.createElement("option",{key:e,value:e},e)))}return Mt.createElement("input",{className:"form-control input-sm",onChange:e=>{return a=e.target.value,void("regions"!==t.type?"account"!==t.type?i({[t.fieldName]:a}):i({[t.fieldName]:a,account:a}):i({regions:a.split(",").map(e=>e.trim()).filter(Boolean)}));var a},value:wi(l,t)})}function ki({application:e,stage:t,updateStageField:a}){const n=function(e){return Ci[e.type||e.alias||e.key||""]||Ni}(t),[r,l]=Rt([]),[s,o]=Rt([]);return Lt(()=>{let e=!0;return i.listAccounts("aws").then(t=>e&&l(t)),i.getUniqueAttributeForAllAccounts("aws","regions").then(t=>e&&o(t)),()=>{e=!1}},[]),Lt(()=>{const r={};t.cloudProvider||(r.cloudProvider="aws"),n.some(e=>"regions"===e.type)&&!t.regions&&(r.regions=[]),n.some(e=>"selectionStrategy"===e.type)&&!t.selectionStrategy&&(r.selectionStrategy=yi[0].val),n.some(e=>"selectionStrategy"===e.type)&&void 0===t.onlyEnabled&&(r.onlyEnabled=!0),n.some(e=>"account"===e.type)&&!t.credentials&&e.defaultCredentials.aws&&(r.credentials=e.defaultCredentials.aws,r.account=e.defaultCredentials.aws),!n.some(e=>"regions"===e.type)||t.regions&&t.regions.length||!e.defaultRegions.aws||(r.regions=[e.defaultRegions.aws]),Object.keys(r).length&&a(r)},[e,n,t.cloudProvider,t.credentials,t.onlyEnabled,t.regions,t.selectionStrategy,a]),Mt.createElement("div",{className:"form-horizontal"},n.map(n=>Mt.createElement(Me,{key:n.fieldName,label:n.label},Si({application:e,stage:t,updateStageField:a},n,r,s))))}const Ti={provides:"destroyServerGroup",alias:"destroyAsg",cloudProvider:"aws",component:ki,accountExtractor:e=>[e.context.credentials],configAccountExtractor:e=>[e.credentials],validators:[{type:"targetImpedance",message:"This pipeline will attempt to destroy a server group without deploying a new version into the same cluster."},{type:"requiredField",fieldName:"cluster"},{type:"requiredField",fieldName:"target"},{type:"requiredField",fieldName:"regions"},{type:"requiredField",fieldName:"credentials",fieldLabel:"account"}]};function Ii(){Re.pipeline.registerStage(Ti)}Ii();const Pi={key:"disableServerGroup",provides:"disableServerGroup",alias:"disableAsg",cloudProvider:"aws",component:function(e){const{application:t,pipeline:a,stage:n,stageFieldUpdated:r,updateStageField:l}=e,[s,o]=Rt([]);return Lt(()=>{var e;const a={};"aws"!==n.cloudProvider&&(a.cloudProvider="aws"),!n.credentials&&(null==(e=t.defaultCredentials)?void 0:e.aws)&&(a.credentials=t.defaultCredentials.aws),n.target||(a.target=Ve.TARGET_LIST[0].val),n.isNew&&t.attributes.platformHealthOnlyShowOverride&&t.attributes.platformHealthOnly&&void 0===n.interestingHealthProviderNames&&(a.interestingHealthProviderNames=["Amazon"]),Object.keys(a).length&&l(a)},[]),Lt(()=>{let e=!0;return i.listAccounts("aws").then(t=>e&&o(t)),()=>{e=!1}},[]),Mt.createElement("div",{className:"form-horizontal"},!a.strategy&&Mt.createElement(qe,{accounts:s,application:t,component:n,onComponentUpdate:r}),Mt.createElement(Me,{label:"Target"},Mt.createElement(We,{model:{target:n.target},onChange:e=>l({target:e}),options:Ve.TARGET_LIST})),t.attributes.platformHealthOnlyShowOverride&&Mt.createElement(Me,{label:"Task Completion"},Mt.createElement(je,{interestingHealthProviderNames:n.interestingHealthProviderNames||[],onChange:e=>l({interestingHealthProviderNames:e}),platformHealthType:"Amazon"})))},validators:[{type:"targetImpedance",message:"This pipeline will attempt to disable a server group without deploying a new version into the same cluster."},{type:"requiredField",fieldName:"cluster"},{type:"requiredField",fieldName:"target"},{type:"requiredField",fieldName:"regions"},{type:"requiredField",fieldName:"credentials",fieldLabel:"account"}]};function Ai(){Re.pipeline.registerStage(Pi)}Ai();const Gi={key:"disableCluster",provides:"disableCluster",cloudProvider:"aws",component:function(e){var t,a;const{application:n,pipeline:r,stage:l,stageFieldUpdated:s,updateStageField:o}=e,[c,d]=Rt([]);return Lt(()=>{var e;const t={};"aws"!==l.cloudProvider&&(t.cloudProvider="aws"),!l.credentials&&(null==(e=n.defaultCredentials)?void 0:e.aws)&&(t.credentials=n.defaultCredentials.aws),void 0===l.remainingEnabledServerGroups&&(t.remainingEnabledServerGroups=1),void 0===l.preferLargerOverNewer&&(t.preferLargerOverNewer="false"),l.isNew&&n.attributes.platformHealthOnlyShowOverride&&n.attributes.platformHealthOnly&&void 0===l.interestingHealthProviderNames&&(t.interestingHealthProviderNames=["Amazon"]),Object.keys(t).length&&o(t)},[]),Lt(()=>{let e=!0;return i.listAccounts("aws").then(t=>e&&d(t)),()=>{e=!1}},[]),Mt.createElement("div",{className:"form-horizontal"},!r.strategy&&Mt.createElement(qe,{accounts:c,application:n,component:l,onComponentUpdate:s}),Mt.createElement(Me,{label:"Disable Options"},Mt.createElement("div",{className:"form-inline"},"Keep the"," ",Mt.createElement("input",{className:"form-control input-sm",min:0,onChange:e=>o({remainingEnabledServerGroups:Number(e.target.value)}),required:!0,style:{width:50},type:"number",value:null!=(t=l.remainingEnabledServerGroups)?t:""})," ",Mt.createElement("select",{className:"form-control input-sm",onChange:e=>o({preferLargerOverNewer:e.target.value}),style:{width:100},value:null!=(a=l.preferLargerOverNewer)?a:"false"},Mt.createElement("option",{value:"true"},"largest"),Mt.createElement("option",{value:"false"},"newest"))," ",(m="server group",1===l.remainingEnabledServerGroups?m:`${m}s`)," enabled.")),n.attributes.platformHealthOnlyShowOverride&&Mt.createElement(Me,{label:"Task Completion"},Mt.createElement(je,{interestingHealthProviderNames:l.interestingHealthProviderNames||[],onChange:e=>o({interestingHealthProviderNames:e}),platformHealthType:"Amazon"})));var m},validators:[{type:"requiredField",fieldName:"cluster"},{type:"requiredField",fieldName:"remainingEnabledServerGroups",fieldLabel:"Keep [X] enabled Server Groups"},{type:"requiredField",fieldName:"regions"},{type:"requiredField",fieldName:"credentials",fieldLabel:"account"}]};function xi(){Re.pipeline.registerStage(Gi)}xi();const Di={key:"enableServerGroup",provides:"enableServerGroup",alias:"enableAsg",cloudProvider:"aws",component:function(e){const{application:t,pipeline:a,stage:n,stageFieldUpdated:r,updateStageField:l}=e,[s,o]=Rt([]);return Lt(()=>{var e;const a={};"aws"!==n.cloudProvider&&(a.cloudProvider="aws"),!n.credentials&&(null==(e=t.defaultCredentials)?void 0:e.aws)&&(a.credentials=t.defaultCredentials.aws),n.target||(a.target=Ve.TARGET_LIST[0].val),n.isNew&&t.attributes.platformHealthOnlyShowOverride&&t.attributes.platformHealthOnly&&void 0===n.interestingHealthProviderNames&&(a.interestingHealthProviderNames=["Amazon"]),Object.keys(a).length&&l(a)},[]),Lt(()=>{let e=!0;return i.listAccounts("aws").then(t=>e&&o(t)),()=>{e=!1}},[]),Mt.createElement("div",{className:"form-horizontal"},!a.strategy&&Mt.createElement(qe,{accounts:s,application:t,component:n,onComponentUpdate:r}),Mt.createElement(Me,{label:"Target"},Mt.createElement(We,{model:{target:n.target},onChange:e=>l({target:e}),options:Ve.TARGET_LIST})),t.attributes.platformHealthOnlyShowOverride&&Mt.createElement(Me,{label:"Task Completion"},Mt.createElement(je,{interestingHealthProviderNames:n.interestingHealthProviderNames||[],onChange:e=>l({interestingHealthProviderNames:e}),platformHealthType:"Amazon"})))},validators:[{type:"requiredField",fieldName:"cluster"},{type:"requiredField",fieldName:"target"},{type:"requiredField",fieldName:"regions"},{type:"requiredField",fieldName:"credentials",fieldLabel:"account"}]};function Bi(){Re.pipeline.registerStage(Di)}Bi();const Fi={provides:"findImage",alias:"findAmi",cloudProvider:"aws",component:ki,validators:[{type:"requiredField",fieldName:"cluster"},{type:"requiredField",fieldName:"selectionStrategy",fieldLabel:"Server Group Selection"},{type:"requiredField",fieldName:"regions"},{type:"requiredField",fieldName:"credentials"}]};function zi(){Re.pipeline.registerStage(Fi)}zi();const Mi={key:"findImageFromTags",provides:"findImageFromTags",cloudProvider:"aws",component:function({application:e,pipeline:t,stage:a,updateStageField:n}){var r,l,i,s;const[o,c]=Mt.useState([]),d=[...null!=(r=a.regions)?r:[],...o].filter((e,t,a)=>e&&a.indexOf(e)===t);return Mt.useEffect(()=>{var t;const r={};void 0===a.cloudProvider&&(r.cloudProvider="aws"),void 0===a.regions&&(r.regions=(null==(t=e.defaultRegions)?void 0:t.aws)?[e.defaultRegions.aws]:[]),void 0===a.tags&&(r.tags={}),Object.keys(r).length>0&&n(r)},[]),Mt.useEffect(()=>{let e=!0;return Fe.getRegions("aws").then(t=>{e&&c(t)}),()=>{e=!1}},[]),Mt.createElement("div",{className:"form-horizontal"},Mt.createElement(Me,{label:"Package"},Mt.createElement("input",{className:"form-control input-sm",name:"packageName",onChange:e=>n({packageName:e.target.value}),type:"text",value:null!=(l=a.packageName)?l:""})),Mt.createElement(Me,{label:"Regions"},Mt.createElement(Ce,{inline:!0,name:"regions",onChange:e=>n({regions:e.target.value}),showSelectAll:!0,stringOptions:d,value:null!=(i=a.regions)?i:[]})),Mt.createElement(Me,{label:"Tags"},Mt.createElement(Xe,{allowEmpty:!0,model:null!=(s=a.tags)?s:{},onChange:e=>n({tags:e}),pipeline:t})))},validators:[{type:"requiredField",fieldName:"packageName"},{type:"requiredField",fieldName:"regions"},{type:"requiredField",fieldName:"tags"}]};function Ri(){Re.pipeline.registerStage(Mi)}function Li(e){const{values:t}=e.formik,a=rt(lt.BITBUCKET_FILE,lt.CUSTOM_OBJECT,lt.EMBEDDED_BASE64,lt.REMOTE_BASE64,lt.GCS_OBJECT,lt.GITHUB_FILE,lt.GITLAB_FILE,lt.S3_OBJECT,lt.HTTP_FILE),n=(e,t)=>e[t]?e[t]:{account:"",id:""};return Mt.createElement("div",null,Mt.createElement(r,{name:"timeout",label:"Timeout",input:e=>Mt.createElement(d,{...e,min:0,max:900})}),Mt.createElement(r,{name:"executionCount",label:"Execution Count",input:e=>Mt.createElement(d,{...e,min:0,max:100})}),Mt.createElement(Ye,{artifact:n(t,"payloadArtifact").artifact,excludedArtifactTypePatterns:a,expectedArtifactId:n(t,"payloadArtifact").id,label:"Payload Artifact",onArtifactEdited:t=>{((t,a)=>{e.formik.setFieldValue(`${a}.id`,null),e.formik.setFieldValue(`${a}.artifact`,t),e.formik.setFieldValue(`${a}.account`,t.artifactAccount)})(t,"payloadArtifact")},helpKey:"",onExpectedArtifactSelected:t=>{return a=t.id,n="payloadrtifact",e.formik.setFieldValue(`${n}.id`,a),void e.formik.setFieldValue(`${n}.artifact`,null);var a,n},pipeline:e.pipeline,stage:t}))}function Oi(e){const{values:t}=e.formik,{functions:a}=e.application,{result:n,status:o}=u(()=>i.listAccounts("aws"),[],[]),c=t.account&&t.region?a.data.filter(e=>e.account===t.account).filter(e=>e.region===t.region).map(e=>e.functionName):[];return Mt.createElement("div",{className:"form-horizontal"},Mt.createElement("h4",null," Basic Settings "),Mt.createElement(r,{label:"Account",name:"account",onChange:t=>{e.formik.setFieldValue("region",null),e.formik.setFieldValue("functionName",null),e.formik.setFieldValue("account",t)},required:!0,input:e=>Mt.createElement(s,{...e,clearable:!1,isLoading:"PENDING"===o,stringOptions:n.map(e=>e.name)})}),Mt.createElement(r,{label:"Region",name:"region",onChange:t=>{e.formik.setFieldValue("functionName",null),e.formik.setFieldValue("region",t)},input:e=>Mt.createElement(s,{clearable:!1,disabled:!t.account,placeholder:t.account?"Select...":"Select an Account...",...e,isLoading:"PENDING"===o,stringOptions:n.filter(e=>e.name===t.account).flatMap(e=>e.regions).map(e=>e.name)})}),Mt.createElement(r,{label:"Function Name",name:"functionName",input:e=>Mt.createElement(s,{clearable:!1,disabled:!(t.account&&t.region),placeholder:t.account&&t.region?"Select...":"Select an Account and Region...",...e,stringOptions:c})}),Mt.createElement(r,{label:"Alias",name:"aliasName",input:e=>Mt.createElement(l,{...e})}),Mt.createElement("h4",null," Invoke Settings "),Mt.createElement(Li,{...e}))}function $i(e){const{stage:t}=e;return Mt.createElement($e,{name:e.name,current:e.current},Mt.createElement(Ue,{stage:t,message:t.outputs.failureMessage}),Mt.createElement("div",null,Mt.createElement("p",null," Function Name: ",t.outputs.functionName?t.outputs.functionName:"N/A"," "),Mt.createElement("p",null," ","Deployed Alias:"," ",t.outputs["deployment:aliasDeployed"]?t.outputs["deployment:aliasDeployed"]:"N/A"," "),Mt.createElement("p",null," ","Deployed Major Version:"," ",t.outputs["deployment:majorVersionDeployed"]?t.outputs["deployment:majorVersionDeployed"]:"N/A"," ")))}function Ui(e){const t=new n(e);return t.field("triggerArns","Trigger ARNs").optional().withValidators((e,t)=>e.map(e=>bn(e,e)).every(e=>void 0===e)?void 0:"Invalid ARN. Event ARN must match regular expression: /^arn:aws[a-zA-Z-]?:[a-zA-Z_0-9.-]+:./"),t.validateForm()}Ri(),($i||($i={})).title="Invoke Lambda Stage";const Vi={key:"Aws.LambdaInvokeStage",label:"AWS Lambda Invoke",description:"Invoke a Lambda function",component:function(e){return Mt.createElement("div",{className:"InvokeLambdaStageConfig"},Mt.createElement(_e,{...e,validate:Ui,onChange:e.updateStage,render:e=>Mt.createElement(Oi,{...e})}))},executionDetailsSections:[$i,Oe],validateFn:Ui};function Hi(){e.feature.lambdaAdditionalStages&&Re.pipeline.registerStage(Vi)}const qi=[{label:"Suspend",value:"suspend"},{label:"Resume",value:"resume"}],Wi=["Launch","Terminate","AddToLoadBalancer","AlarmNotification","AZRebalance","HealthCheck","ReplaceUnhealthy","ScheduledActions"];const ji={label:"Modify Scaling Process",description:"Suspend/Resume Scaling Processes",key:"modifyAwsScalingProcess",alias:"modifyScalingProcess",component:function({application:e,pipeline:t,stage:a,updateStage:n,updateStageField:r}){const[l,s]=Mt.useState([]);return Mt.useEffect(()=>{let e=!0;return i.listAccounts("aws").then(t=>e&&s(t)),()=>{e=!1}},[]),Mt.useEffect(()=>{const t={},n=e.defaultCredentials.aws,l=e.defaultRegions.aws;a.cloudProvider||(t.cloudProvider="aws"),a.processes||(t.processes=[]),a.regions?!a.regions.length&&l&&(t.regions=[l]):t.regions=l?[l]:[],!a.credentials&&n&&(t.credentials=n),a.action||(t.action=qi[0].value),a.target||(t.target=Ve.TARGET_LIST[0].val),void 0===a.suspendProcesses&&void 0===a.resumeProcesses||(t.suspendProcesses=void 0,t.resumeProcesses=void 0),Object.keys(t).length&&r(t)},[e.defaultCredentials.aws,e.defaultRegions.aws,a.action,a.cloudProvider,a.credentials,a.processes,a.regions,a.resumeProcesses,a.suspendProcesses,a.target,r]),Mt.createElement("div",{className:"form-horizontal"},!t.strategy&&Mt.createElement(qe,{accounts:l,application:e,component:{...a},onComponentUpdate:n}),Mt.createElement(Me,{label:"Target"},Mt.createElement("select",{className:"form-control input-sm",name:"target",onChange:e=>r({target:e.target.value}),value:a.target||Ve.TARGET_LIST[0].val},Ve.TARGET_LIST.map(e=>Mt.createElement("option",{key:e.val,title:e.description,value:e.val},e.label)))),Mt.createElement(Me,{label:"Action"},Mt.createElement("select",{className:"form-control input-sm",name:"action",onChange:e=>r({action:e.target.value,suspendProcesses:void 0,resumeProcesses:void 0}),value:a.action||qi[0].value},qi.map(e=>Mt.createElement("option",{key:e.value,value:e.value},e.label)))),Mt.createElement(Me,{label:"Processes"},Mt.createElement(Ce,{name:"processes",onChange:e=>r({processes:e.target.value}),showSelectAll:!0,stringOptions:Wi,value:a.processes||[]})))},validators:[{type:"requiredField",fieldName:"cluster"},{type:"requiredField",fieldName:"target"},{type:"requiredField",fieldName:"action"},{type:"requiredField",fieldName:"regions"},{type:"requiredField",fieldName:"processes"},{type:"requiredField",fieldName:"credentials",fieldLabel:"account"}],cloudProvider:"aws",strategy:!0};function Zi(){Re.pipeline.registerStage(ji)}Zi();const _i=[{label:"Upsert",value:"upsert"},{label:"Delete",value:"delete"}],Ki=["Stopped","Running","Hibernated"];const Yi={label:"Modify Warm Pool",description:"Upsert or delete an Auto Scaling Group warm pool",key:"modifyWarmPool",component:function({application:e,pipeline:t,stage:a,updateStage:n,updateStageField:r}){var l,s;const[o,c]=Mt.useState([]);Mt.useEffect(()=>{let e=!0;return i.listAccounts("aws").then(t=>e&&c(t)),()=>{e=!1}},[]),Mt.useEffect(()=>{const t={},n=e.defaultCredentials.aws,l=e.defaultRegions.aws;a.cloudProvider||(t.cloudProvider="aws"),a.regions?!a.regions.length&&l&&(t.regions=[l]):t.regions=l?[l]:[],!a.credentials&&n&&(t.credentials=n),a.action||(t.action=_i[0].value),a.target||(t.target=Ve.TARGET_LIST[0].val),a.poolState||(t.poolState=Ki[0]),Object.keys(t).length&&r(t)},[e.defaultCredentials.aws,e.defaultRegions.aws,a.action,a.cloudProvider,a.credentials,a.poolState,a.regions,a.target,r]);const d="upsert"===(a.action||_i[0].value);return Mt.createElement("div",{className:"form-horizontal"},!t.strategy&&Mt.createElement(qe,{accounts:o,application:e,component:{...a},onComponentUpdate:n}),Mt.createElement(Me,{label:"Target"},Mt.createElement("select",{className:"form-control input-sm",name:"target",onChange:e=>r({target:e.target.value}),value:a.target||Ve.TARGET_LIST[0].val},Ve.TARGET_LIST.map(e=>Mt.createElement("option",{key:e.val,title:e.description,value:e.val},e.label)))),Mt.createElement(Me,{label:"Action"},Mt.createElement("select",{className:"form-control input-sm",name:"action",onChange:e=>r({action:e.target.value}),value:a.action||_i[0].value},_i.map(e=>Mt.createElement("option",{key:e.value,value:e.value},e.label)))),d&&Mt.createElement(Mt.Fragment,null,Mt.createElement(Me,{label:"Min Size"},Mt.createElement("input",{className:"form-control input-sm",type:"number",min:0,name:"minSize",onChange:e=>r({minSize:Number(e.target.value)}),value:null!=(l=a.minSize)?l:0})),Mt.createElement(Me,{label:"Max Group Prepared Capacity"},Mt.createElement("input",{className:"form-control input-sm",type:"number",min:-1,name:"maxGroupPreparedCapacity",onChange:e=>r({maxGroupPreparedCapacity:Number(e.target.value)}),value:null!=(s=a.maxGroupPreparedCapacity)?s:-1})),Mt.createElement(Me,{label:"Instance State"},Mt.createElement("select",{className:"form-control input-sm",name:"poolState",onChange:e=>r({poolState:e.target.value}),value:a.poolState||Ki[0]},Ki.map(e=>Mt.createElement("option",{key:e,value:e},e)))),Mt.createElement(Me,{label:"Reuse Instances on Scale In"},Mt.createElement("input",{type:"checkbox",checked:!!a.reuseOnScaleIn,onChange:e=>r({reuseOnScaleIn:e.target.checked})}))))},executionConfigSections:["modifyWarmPoolConfig","taskStatus"],validators:[{type:"requiredField",fieldName:"cluster"},{type:"requiredField",fieldName:"target"},{type:"requiredField",fieldName:"action"},{type:"requiredField",fieldName:"regions"},{type:"requiredField",fieldName:"credentials",fieldLabel:"account"}],cloudProvider:"aws",strategy:!0};function Xi(){Re.pipeline.registerStage(Yi)}Xi();const Ji=[{label:"Scale Up",value:"scale_up"},{label:"Scale Down",value:"scale_down"},{label:"Scale to Cluster Size",value:"scale_to_cluster"},{label:"Scale to Exact Size",value:"scale_exact"}],Qi=[{label:"Percentage",value:"pct"},{label:"Incremental",value:"incr"}],es=String.raw`(?:\$\{.+\}|\d+)`;function ts(e){return"string"==typeof e&&/^\$\{[\s\S]+\}$/.test(e)}function as(e,t,a){if(ts(e))return!0;if("number"!=typeof e&&"string"!=typeof e)return!1;const n=Number(e);return Number.isFinite(n)&&n>=0&&Number.isInteger(n)&&(void 0===a||n<=a)}function ns({dataCapacityField:e,maximum:t,name:a,onValidChange:n,resetKey:r,value:l}){const[i,s]=Rt(null!=l?l:"");Lt(()=>s(null!=l?l:""),[r,l]);const o=as(i,0,t);return Mt.createElement("input",{"aria-invalid":!o,className:"form-control input-sm","data-capacity-field":e,inputMode:"numeric",name:a,onChange:e=>{const a=e.target.value;s(a),as(a,0,t)&&n(function(e){return ts(e)||!as(e)?e:Number(e)}(a))},pattern:es,required:!0,value:i})}const rs={key:"resizeServerGroup",provides:"resizeServerGroup",alias:"resizeAsg",cloudProvider:"aws",component:function(e){const{application:t,pipeline:a,stage:n,stageFieldUpdated:r,updateStage:l,updateStageField:s}=e,[o,c]=Rt([]);Lt(()=>{var e,a,r;const l={cloudProvider:"aws"},i={action:"exact"===n.resizeType?"scale_exact":Ji[0].value,capacity:{},resizeType:Qi[0].value,target:Ve.TARGET_LIST[0].val,targetHealthyDeployPercentage:100};Object.entries(i).forEach(([e,t])=>{void 0===n[e]&&(l[e]=t)}),!n.credentials&&(null==(e=t.defaultCredentials)?void 0:e.aws)&&(l.credentials=t.defaultCredentials.aws),(null==(a=n.regions)?void 0:a.length)||(l.regions=(null==(r=t.defaultRegions)?void 0:r.aws)?[t.defaultRegions.aws]:[]),n.isNew&&void 0===n.interestingHealthProviderNames&&t.attributes.platformHealthOnlyShowOverride&&t.attributes.platformHealthOnly&&(l.interestingHealthProviderNames=["Amazon"]),s(l)},[]),Lt(()=>{let e=!0;return i.listAccounts("aws").then(t=>e&&c(t)),()=>{e=!1}},[]);const d=(e,t=n.resizeType||Qi[0].value)=>{if("scale_exact"===e)return void l({action:e,resizeType:"exact",scaleNum:void 0,scalePct:void 0});const a="incr"===t?"incr":"pct",r={action:e,capacity:{},resizeType:a,scaleNum:void 0,scalePct:void 0};"pct"===a?r.scalePct=n.scalePct||0:r.scaleNum=n.scaleNum||0,l(r)};return Mt.createElement("div",{className:"form-horizontal"},!a.strategy&&Mt.createElement(qe,{accounts:o,application:t,component:n,onComponentUpdate:r}),Mt.createElement(Me,{label:"Target"},Mt.createElement(We,{model:{target:n.target},options:Ve.TARGET_LIST,onChange:e=>s({target:e})})),Mt.createElement(Me,{label:"Action",helpKey:"pipeline.config.resizeAsg.action"},Mt.createElement("select",{className:"form-control input-sm",name:"action",onChange:e=>d(e.target.value),required:!0,value:n.action},Ji.map(e=>Mt.createElement("option",{key:e.value,value:e.value},e.label)))),"scale_exact"!==n.action&&Mt.createElement(Mt.Fragment,null,Mt.createElement(Me,{label:"scale_to_cluster"===n.action?"Additional Capacity":"Type"},Mt.createElement("select",{className:"form-control input-sm",name:"resizeType",onChange:e=>d(n.action,e.target.value),required:!0,value:n.resizeType},Qi.map(e=>Mt.createElement("option",{key:e.value,value:e.value},e.label)))),"pct"===n.resizeType&&Mt.createElement(Me,{label:"Resize Percentage"},Mt.createElement(ns,{name:"scalePct",onValidChange:e=>s({scalePct:e}),resetKey:n.refId,value:n.scalePct})),"incr"===n.resizeType&&Mt.createElement(Me,{label:"Resize Count"},Mt.createElement(ns,{name:"scaleNum",onValidChange:e=>s({scaleNum:e}),resetKey:n.refId,value:n.scaleNum})),("scale_up"===n.action||"scale_to_cluster"===n.action)&&Mt.createElement(Me,{label:"Target Healthy Percentage"},Mt.createElement(ns,{maximum:100,name:"targetHealthyDeployPercentage",onValidChange:e=>s({targetHealthyDeployPercentage:e}),resetKey:n.refId,value:n.targetHealthyDeployPercentage}))),"scale_exact"===n.action&&Mt.createElement(Mt.Fragment,null,Mt.createElement(Me,{label:"Capacity"},Mt.createElement("div",{className:"row small"},Mt.createElement("div",{className:"col-md-3"},"Min"),Mt.createElement("div",{className:"col-md-3"},"Max"),Mt.createElement("div",{className:"col-md-3"},"Desired"))),Mt.createElement(Me,{label:"Match Capacity"},Mt.createElement("div",{className:"row"},["min","max","desired"].map(e=>{var t;return Mt.createElement("div",{className:"col-md-3",key:e},Mt.createElement(ns,{dataCapacityField:e,name:`capacity.${e}`,onValidChange:t=>s({capacity:{...n.capacity,[e]:t}}),resetKey:n.refId,value:null==(t=n.capacity)?void 0:t[e]}))}))),Mt.createElement(Me,{label:""},Mt.createElement("em",{className:"subinput-note"},"This is the exact amount to which the target server group will be scaled"))),t.attributes.platformHealthOnlyShowOverride&&Mt.createElement(Me,{label:"Task Completion"},Mt.createElement(je,{interestingHealthProviderNames:n.interestingHealthProviderNames||[],onChange:e=>s({interestingHealthProviderNames:e}),platformHealthType:"Amazon"})))},accountExtractor:e=>[e.context.credentials],configAccountExtractor:e=>[e.credentials],validators:[{type:"targetImpedance",message:"This pipeline will attempt to resize a server group without deploying a new version into the same cluster."},{type:"requiredField",fieldName:"target"},{type:"requiredField",fieldName:"action"},{type:"requiredField",fieldName:"regions"},{type:"requiredField",fieldName:"cluster"},{type:"requiredField",fieldName:"credentials",fieldLabel:"account"},{type:"custom",preventSave:!0,validate:(e,t)=>function(e){var t;if("scale_exact"===e.action){const a=[["min","Minimum"],["max","Maximum"],["desired","Desired"]];for(const[n,r]of a)if(!as(null==(t=e.capacity)?void 0:t[n]))return`${r} capacity must be a nonnegative integer or pipeline expression.`}else{if("pct"===e.resizeType&&!as(e.scalePct))return"Resize percentage must be a nonnegative integer or pipeline expression.";if("incr"===e.resizeType&&!as(e.scaleNum))return"Resize count must be a nonnegative integer or pipeline expression."}return"scale_up"!==e.action&&"scale_to_cluster"!==e.action||as(e.targetHealthyDeployPercentage,0,100)?"":"Target healthy percentage must be an integer from 0 through 100 or pipeline expression."}(t)}]};function ls(){Re.pipeline.registerStage(rs)}ls();const is={key:"rollbackCluster",provides:"rollbackCluster",cloudProvider:"aws",component:function(t){var a,n,r;const{application:l,pipeline:s,stage:o,stageFieldUpdated:c,updateStageField:d}=t,[m,u]=Rt([]);return Lt(()=>{var e;const t={};"aws"!==o.cloudProvider&&(t.cloudProvider="aws"),!o.credentials&&(null==(e=l.defaultCredentials)?void 0:e.aws)&&(t.credentials=l.defaultCredentials.aws),o.targetHealthyRollbackPercentage||(t.targetHealthyRollbackPercentage=100),o.isNew&&l.attributes.platformHealthOnlyShowOverride&&l.attributes.platformHealthOnly&&void 0===o.interestingHealthProviderNames&&(t.interestingHealthProviderNames=["Amazon"]),Object.keys(t).length&&d(t)},[]),Lt(()=>{let e=!0;return i.listAccounts("aws").then(t=>e&&u(t)),()=>{e=!1}},[]),Mt.createElement("div",{className:"form-horizontal"},!s.strategy&&Mt.createElement(qe,{accounts:m,application:l,component:o,onComponentUpdate:c}),l.attributes.platformHealthOnlyShowOverride&&Mt.createElement(Me,{label:"Task Completion"},Mt.createElement(je,{interestingHealthProviderNames:o.interestingHealthProviderNames||[],onChange:e=>d({interestingHealthProviderNames:e}),platformHealthType:"Amazon"})),Mt.createElement("div",{className:"row"},(o.regions||[]).length>1&&Mt.createElement("div",{className:"col-sm-10 col-sm-offset-2"},"Wait"," ",Mt.createElement("input",{className:"form-control input-sm inline-number",min:0,onChange:e=>d({waitTimeBetweenRegions:Number(e.target.value)}),type:"number",value:null!=(a=o.waitTimeBetweenRegions)?a:""})," ","seconds between regional rollbacks."),Mt.createElement("div",{className:"col-sm-10 col-sm-offset-2"},"Consider rollback successful when"," ",Mt.createElement("input",{className:"form-control input-sm inline-number",max:100,min:0,onChange:e=>d({targetHealthyRollbackPercentage:Number(e.target.value)}),type:"number",value:null!=(n=o.targetHealthyRollbackPercentage)?n:""})," ","percent of instances are healthy."),e.feature.dynamicRollbackTimeout&&Mt.createElement("div",{className:"col-sm-10 col-sm-offset-2"},"Rollback Timeout is"," ",Mt.createElement("input",{className:"form-control input-sm inline-number",max:100,min:0,onChange:e=>d({rollbackTimeout:Number(e.target.value)}),type:"number",value:null!=(r=o.rollbackTimeout)?r:""})," ","minutes.")))},validators:[{type:"requiredField",fieldName:"cluster"},{type:"requiredField",fieldName:"regions"},{type:"requiredField",fieldName:"credentials",fieldLabel:"account"}]};function ss(){Re.pipeline.registerStage(is)}function os(e){const{values:a}=e.formik;return Mt.createElement("div",null,Mt.createElement(r,{name:"triggerArns",label:"Event ARNs",help:Mt.createElement(t,{content:"The resource ARNs for Lambda event trigger sources. Input the entire ARN and select `Create option TRIGGER-ARN-INPUT` to add the ARN."}),input:t=>Mt.createElement(nt,{...t,multi:!0,placeholder:"Input ARN...",onChange:t=>{var a,n;a=t,n="triggerArns",e.formik.setFieldValue(n,a.map(e=>e.value))},value:a.triggerArns?a.triggerArns.map(e=>({value:e,label:e})):[]}),required:!1}),Mt.createElement(r,{name:"batchsize",label:"Event Batch Size",input:e=>Mt.createElement(d,{...e,min:1,max:10}),required:!1}))}function cs(e){const{values:t}=e.formik,a=rt(lt.BITBUCKET_FILE,lt.CUSTOM_OBJECT,lt.EMBEDDED_BASE64,lt.GCS_OBJECT,lt.GITHUB_FILE,lt.GITLAB_FILE,lt.S3_OBJECT,lt.HTTP_FILE),n=(t,a)=>{e.formik.setFieldValue(`${a}.id`,null),e.formik.setFieldValue(`${a}.artifact`,t),e.formik.setFieldValue(`${a}.account`,t.artifactAccount)},l=(t,a)=>{e.formik.setFieldValue(`${a}.id`,t),e.formik.setFieldValue(`${a}.artifact`,null)},i=(e,t)=>e[t]?e[t]:{account:"",id:""};return Mt.createElement("div",null,Mt.createElement(r,{name:"destroyOnFail",label:"On Fail",input:e=>Mt.createElement(o,{text:"Destroy latest lambda version on fail.",...e})}),Mt.createElement(r,{name:"timeout",label:"Timeout",input:e=>Mt.createElement(d,{...e,min:0,max:900})}),Mt.createElement(Ye,{artifact:i(t,"payloadArtifact").artifact,excludedArtifactTypePatterns:a,expectedArtifactId:i(t,"payloadArtifact").id,label:"Payload Artifact",onArtifactEdited:e=>{n(e,"payloadArtifact")},helpKey:"",onExpectedArtifactSelected:e=>l(e.id,"payloadrtifact"),pipeline:e.pipeline,stage:t}),Mt.createElement(Ye,{artifact:i(t,"outputArtifact").artifact,excludedArtifactTypePatterns:a,expectedArtifactId:i(t,"outputArtifact").id,label:"Output Artifact",onArtifactEdited:e=>{n(e,"outputArtifact")},helpKey:"",onExpectedArtifactSelected:e=>l(e.id,"outputArtifact"),pipeline:e.pipeline,stage:t}))}ss();const ds=[{label:"Lambda Invocation",value:"$LAMBDA"}];function ms(e){const{values:t}=e.formik;return Mt.createElement("div",null,Mt.createElement(r,{label:"Health Check Type",name:"healthCheckType",input:e=>Mt.createElement(s,{...e,clearable:!1,options:ds})}),t.healthCheckType?function(e,t){return"$LAMBDA"===e?Mt.createElement(cs,{...t}):null}(t.healthCheckType,e):null)}const us=[{label:"Simple",value:"$SIMPLE",description:"Route 100% of traffic to specified version"},{label:"Weighted Deployment",value:"$WEIGHTED",description:"Split the traffic weight between two function versions."},{label:"Blue/Green",value:"$BLUEGREEN",description:"Disable all previous versions once the latest version passes health checks."}];class ps extends Mt.Component{constructor(e){super(e);const{value:t}=this.props,a=us.filter(e=>e.value===t)[0];this.state={label:a.label,value:a.value,description:a.description}}render(){return Mt.createElement("div",null,Mt.createElement("b",null," ",this.state.label," "),Mt.createElement("br",null),Mt.createElement("small",null," ",this.state.description," "))}}const hs=[{label:"Newest Function Version",value:"$LATEST",description:"Selects the most recently deployed function when this stage starts."},{label:"Previous Function Version",value:"$PREVIOUS",description:"Selects the second-most recently deployed function when this stage starts."},{label:"Oldest Function Verion",value:"$OLDEST",description:"Selects the least recently deployed function when this stage starts."},{label:"Provide Version Number",value:"$PROVIDED",description:"Provide a specific version number to destroy."}];class gs extends Mt.Component{constructor(e){super(e);const{value:t}=this.props,a=hs.filter(e=>e.value===t)[0];this.state={label:a.label,value:a.value,description:a.description}}render(){return Mt.createElement("div",null,Mt.createElement("b",null," ",this.state.label," ")," ",Mt.createElement("br",null),Mt.createElement("small",null," ",this.state.description," "))}}function vs(e){const{values:t}=e.formik,{functions:a}=e.application;return Mt.createElement("div",{className:"form-horizontal"},Mt.createElement(r,{label:"Target Version",name:"versionNameA",onChange:t=>{e.formik.setFieldValue("trafficPercentA",100),e.formik.setFieldValue("versionNameA",t)},input:e=>Mt.createElement(s,{...e,clearable:!1,options:hs,optionRenderer:e=>Mt.createElement(gs,{value:e.value,showingDetails:!0})})}),"$PROVIDED"===t.versionNameA?Mt.createElement(r,{label:"Version Number",name:"versionNumberA",input:e=>Mt.createElement(s,{...e,clearable:!1,stringOptions:a.data.filter(e=>e.account===t.account).filter(e=>e.region===t.region).filter(e=>e.functionName===t.functionName).flatMap(e=>Object.values(e.revisions).sort(function(e,t){return t-e})).filter(e=>"$LATEST"!==e)})}):null,Mt.createElement(r,{name:"trafficPercentA",label:"Traffic %",input:e=>Mt.createElement(d,{...e,min:0,max:100,value:100,disabled:!0})}))}function fs(e){const{values:t}=e.formik,{functions:a}=e.application;return Mt.createElement("div",{className:"form-horizontal"},Mt.createElement(r,{label:"Target Version",name:"versionNameA",input:e=>Mt.createElement(s,{...e,clearable:!1,options:hs,optionRenderer:e=>Mt.createElement(gs,{value:e.value,showingDetails:!0})})}),"$PROVIDED"===t.versionNameA?Mt.createElement(r,{label:"Version Number",name:"versionNumberA",input:e=>Mt.createElement(s,{...e,clearable:!1,stringOptions:a.data.filter(e=>e.account===t.account).filter(e=>e.region===t.region).filter(e=>e.functionName===t.functionName).flatMap(e=>Object.values(e.revisions).sort(function(e,t){return t-e})).filter(e=>"$LATEST"!==e)})}):null,Mt.createElement(r,{name:"trafficPercentA",label:"Traffic %",input:e=>Mt.createElement(d,{...e,min:0,max:100})}),Mt.createElement(r,{label:"Version Name",name:"versionNameB",input:e=>Mt.createElement(s,{...e,clearable:!1,options:hs,optionRenderer:e=>Mt.createElement(gs,{value:e.value,showingDetails:!0})})}),"$PROVIDED"===t.versionNameB?Mt.createElement(r,{label:"Version Number",name:"versionNumberB",input:e=>Mt.createElement(s,{...e,clearable:!1,stringOptions:a.data.filter(e=>e.account===t.account).filter(e=>e.region===t.region).filter(e=>e.functionName===t.functionName).flatMap(e=>Object.values(e.revisions).sort(function(e,t){return t-e})).filter(e=>"$LATEST"!==e)})}):null,Mt.createElement(r,{name:"trafficPercentB",label:"Traffic %",input:e=>Mt.createElement(d,{...e,min:0,max:100,disabled:!0,value:t.trafficPercentA||0===t.trafficPercentA?100-t.trafficPercentA:null})}))}function Es(e){const{values:t}=e.formik;return Mt.createElement("div",{className:"form-horizontal"},t.deploymentStrategy?function(e,t){switch(e){case"$SIMPLE":return Mt.createElement(vs,{...t});case"$WEIGHTED":return Mt.createElement(fs,{...t});case"$BLUEGREEN":return Mt.createElement(ms,{...t});default:return null}}(t.deploymentStrategy,e):null)}function ys(e){const{values:a}=e.formik,{functions:n}=e.application,{result:o,status:c}=u(()=>i.listAccounts("aws"),[],[]),m=a.account&&a.region?n.data.filter(e=>e.account===a.account).filter(e=>e.region===a.region).map(e=>e.functionName):[];return Mt.createElement("div",{className:"form-horizontal"},Mt.createElement("h4",null," Basic Settings "),Mt.createElement(r,{label:"Account",name:"account",onChange:t=>{e.formik.setFieldValue("region",null),e.formik.setFieldValue("functionName",null),e.formik.setFieldValue("account",t)},required:!0,input:e=>Mt.createElement(s,{...e,clearable:!1,isLoading:"PENDING"===c,stringOptions:o.map(e=>e.name)})}),Mt.createElement(r,{label:"Region",name:"region",onChange:t=>{e.formik.setFieldValue("functionName",null),e.formik.setFieldValue("region",t)},input:e=>Mt.createElement(s,{clearable:!1,disabled:!a.account,placeholder:a.account?"Select...":"Select an Account...",...e,isLoading:"PENDING"===c,stringOptions:o.filter(e=>e.name===a.account).flatMap(e=>e.regions).map(e=>e.name)})}),Mt.createElement(r,{label:"Function Name",name:"functionName",input:e=>Mt.createElement(s,{clearable:!1,disabled:!(a.account&&a.region),placeholder:a.account&&a.region?"Select...":"Select an Account and Region...",...e,stringOptions:m})}),Mt.createElement(r,{label:"Alias",name:"aliasName",input:e=>Mt.createElement(l,{...e})}),Mt.createElement("h4",null," Alias Settings "),Mt.createElement(os,{...e}),Mt.createElement(r,{name:"provisionedConcurrentExecutions",label:"Provisioned Concurrency",help:Mt.createElement(t,{content:"To enable your function to scale without fluctuations in latency, use provisioned concurrency. Provisioned concurrency runs continually and has separate pricing for concurrency and execution duration. Concurrency cannot be provisioned with a weighted deployment strategy."}),input:e=>"$WEIGHTED"===a.deploymentStrategy?Mt.createElement(d,{...e,min:0,max:0}):Mt.createElement(d,{...e,min:0,max:3e3}),required:!1}),Mt.createElement("h4",null," Deployment Strategy "),Mt.createElement(r,{label:"Strategy",name:"deploymentStrategy",help:Mt.createElement(t,{content:""}),input:t=>Mt.createElement(s,{...t,clearable:!1,options:us,optionRenderer:t=>Mt.createElement(ps,{config:e,value:t.value,showingDetails:!0})})}),a.deploymentStrategy?Mt.createElement(Es,{...e}):null)}function bs(e){const{stage:t}=e;return Mt.createElement($e,{name:e.name,current:e.current},Mt.createElement(Ue,{stage:t,message:t.outputs.failureMessage}),Mt.createElement("div",null,Mt.createElement("p",null," Function Name: ",t.outputs.functionName?t.outputs.functionName:"N/A"," "),Mt.createElement("p",null," ","Deployed Alias:"," ",t.outputs["deployment:aliasDeployed"]?t.outputs["deployment:aliasDeployed"]:"N/A"," "),Mt.createElement("p",null," ","Deployed Major Version:"," ",t.outputs["deployment:majorVersionDeployed"]?t.outputs["deployment:majorVersionDeployed"]:"N/A"," ")))}function Cs(e){const t=new n(e);return t.field("triggerArns","Trigger ARNs").optional().withValidators((e,t)=>e.map(e=>bn(e,e)).every(e=>void 0===e)?void 0:"Invalid ARN. Event ARN must match regular expression: /^arn:aws[a-zA-Z-]?:[a-zA-Z_0-9.-]+:./"),t.validateForm()}(bs||(bs={})).title="Route Lambda Traffic Stage";const Ns={key:"Aws.LambdaTrafficRoutingStage",label:"AWS Lambda Route",description:"Route traffic across various versions of your Lambda function",component:function(e){return Mt.createElement("div",{className:"RouteLambdaStageConfig"},Mt.createElement(_e,{...e,validate:Cs,onChange:e.updateStage,render:e=>Mt.createElement(ys,{...e})}))},executionDetailsSections:[bs,Oe],validateFn:Cs};function ws(){e.feature.lambdaAdditionalStages&&Re.pipeline.registerStage(Ns)}const Ss={key:"scaleDownCluster",provides:"scaleDownCluster",cloudProvider:"aws",component:function(e){var t,a;const{application:n,pipeline:r,stage:l,stageFieldUpdated:s,updateStageField:o}=e,[c,d]=Rt([]);return Lt(()=>{var e;const t={};"aws"!==l.cloudProvider&&(t.cloudProvider="aws"),!l.credentials&&(null==(e=n.defaultCredentials)?void 0:e.aws)&&(t.credentials=n.defaultCredentials.aws),void 0===l.remainingFullSizeServerGroups&&(t.remainingFullSizeServerGroups=1),void 0===l.allowScaleDownActive&&(t.allowScaleDownActive=!1),void 0===l.preferLargerOverNewer&&(t.preferLargerOverNewer="false"),Object.keys(t).length&&o(t)},[]),Lt(()=>{let e=!0;return i.listAccounts("aws").then(t=>e&&d(t)),()=>{e=!1}},[]),Mt.createElement("div",{className:"form-horizontal"},!r.strategy&&Mt.createElement(qe,{accounts:c,application:n,component:l,onComponentUpdate:s}),Mt.createElement(Me,{label:"Scale Down Options"},Mt.createElement("div",{className:"form-inline"},Mt.createElement("p",null,"Keep the"," ",Mt.createElement("input",{className:"form-control input-sm",min:0,onChange:e=>o({remainingFullSizeServerGroups:Number(e.target.value)}),required:!0,style:{width:50},type:"number",value:null!=(t=l.remainingFullSizeServerGroups)?t:""})," ",Mt.createElement("select",{className:"form-control input-sm",onChange:e=>o({preferLargerOverNewer:e.target.value}),style:{width:100},value:null!=(a=l.preferLargerOverNewer)?a:"false"},Mt.createElement("option",{value:"true"},"largest"),Mt.createElement("option",{value:"false"},"newest"))," ",(m="server group",1===l.remainingFullSizeServerGroups?m:`${m}s`)," at current size."),Mt.createElement("p",null,"The remaining server groups will be scaled down to zero instances."))),Mt.createElement("div",{className:"form-group"},Mt.createElement("div",{className:"col-md-offset-3 col-md-6 checkbox"},Mt.createElement("label",null,Mt.createElement("input",{checked:!!l.allowScaleDownActive,onChange:e=>o({allowScaleDownActive:e.target.checked}),type:"checkbox"}),"Allow scale down of active server groups"))));var m},accountExtractor:e=>[e.context.credentials],configAccountExtractor:e=>[e.credentials],validators:[{type:"requiredField",fieldName:"cluster"},{type:"requiredField",fieldName:"remainingFullSizeServerGroups",fieldLabel:"Keep [X] full size Server Groups"},{type:"requiredField",fieldName:"regions"},{type:"requiredField",fieldName:"credentials",fieldLabel:"account"}],strategy:!0};function ks(){Re.pipeline.registerStage(Ss)}ks();const Ts={key:"shrinkCluster",provides:"shrinkCluster",cloudProvider:"aws",component:function(e){var t,a;const{application:n,pipeline:r,stage:l,stageFieldUpdated:s,updateStageField:o}=e,[c,d]=Rt([]);return Lt(()=>{var e;const t={};"aws"!==l.cloudProvider&&(t.cloudProvider="aws"),!l.credentials&&(null==(e=n.defaultCredentials)?void 0:e.aws)&&(t.credentials=n.defaultCredentials.aws),void 0===l.shrinkToSize&&(t.shrinkToSize=1),void 0===l.allowDeleteActive&&(t.allowDeleteActive=!1),void 0===l.retainLargerOverNewer&&(t.retainLargerOverNewer="false"),l.isNew&&n.attributes.platformHealthOnlyShowOverride&&n.attributes.platformHealthOnly&&void 0===l.interestingHealthProviderNames&&(t.interestingHealthProviderNames=["Amazon"]),Object.keys(t).length&&o(t)},[]),Lt(()=>{let e=!0;return i.listAccounts("aws").then(t=>e&&d(t)),()=>{e=!1}},[]),Mt.createElement("div",{className:"form-horizontal"},!r.strategy&&Mt.createElement(qe,{accounts:c,application:n,component:l,onComponentUpdate:s}),Mt.createElement(Me,{label:"Shrink Options"},Mt.createElement("div",{className:"form-inline"},"Shrink to"," ",Mt.createElement("input",{className:"form-control input-sm",min:0,onChange:e=>o({shrinkToSize:Number(e.target.value)}),required:!0,style:{width:50},type:"number",value:null!=(t=l.shrinkToSize)?t:""})," ",(m="server group",1===l.shrinkToSize?m:`${m}s`),", keeping the"," ",Mt.createElement("select",{className:"form-control input-sm",onChange:e=>o({retainLargerOverNewer:e.target.value}),style:{width:100},value:null!=(a=l.retainLargerOverNewer)?a:"false"},Mt.createElement("option",{value:"true"},"largest"),Mt.createElement("option",{value:"false"},"newest")))),Mt.createElement("div",{className:"form-group"},Mt.createElement("div",{className:"col-md-offset-3 col-md-6 checkbox"},Mt.createElement("label",null,Mt.createElement("input",{checked:!!l.allowDeleteActive,onChange:e=>o({allowDeleteActive:e.target.checked}),type:"checkbox"}),"Allow deletion of active server groups"))),n.attributes.platformHealthOnlyShowOverride&&Mt.createElement(Me,{label:"Task Completion"},Mt.createElement(je,{interestingHealthProviderNames:l.interestingHealthProviderNames||[],onChange:e=>o({interestingHealthProviderNames:e}),platformHealthType:"Amazon"})));var m},accountExtractor:e=>[e.context.credentials],configAccountExtractor:e=>[e.credentials],validators:[{type:"requiredField",fieldName:"cluster"},{type:"requiredField",fieldName:"shrinkToSize",fieldLabel:"shrink to [X] Server Groups"},{type:"requiredField",fieldName:"regions"},{type:"requiredField",fieldName:"credentials",fieldLabel:"account"}]};function Is(){Re.pipeline.registerStage(Ts)}Is();const Ps={key:"upsertImageTags",provides:"upsertImageTags",cloudProvider:"aws",component:function({pipeline:e,stage:t,updateStageField:a}){const n=t.consideredStages||[],r=it.getAllUpstreamDependencies(e,t).filter(e=>Ve.IMAGE_PRODUCING_STAGES.includes(e.type)),l=new Set(r.map(e=>e.refId)),i=n.filter(e=>!l.has(e));return Mt.useEffect(()=>{const e={};void 0===t.cloudProvider&&(e.cloudProvider="aws"),void 0===t.tags&&(e.tags={}),Object.keys(e).length&&a(e)},[t.cloudProvider,t.tags,a]),Mt.createElement("div",{className:"form-horizontal"},Mt.createElement(Me,{label:"Tags"},Mt.createElement(Xe,{allowEmpty:!0,model:t.tags||{},onChange:e=>a({tags:e}),pipeline:e})),Mt.createElement(Me,{helpKey:"aws.tagImage.consideredStages",label:"Stages (optional)"},Mt.createElement("div",{className:"checkbox"},r.map(e=>Mt.createElement("label",{key:e.refId,style:{display:"block"}},Mt.createElement("input",{checked:n.includes(e.refId),onChange:t=>{return a({consideredStages:(r=n,l=e.refId,i=t.target.checked,i&&!r.includes(l)?[...r,l]:i?r:r.filter(e=>e!==l))});var r,l,i},type:"checkbox",value:e.refId})," ",e.name||e.refId)),i.map(e=>Mt.createElement("label",{key:e,style:{display:"block"}},Mt.createElement("input",{checked:!0,disabled:!0,readOnly:!0,type:"checkbox",value:e})," ",e," ","(unavailable)")))))}};function As(){Re.pipeline.registerStage(Ps)}function Gs(e){const{values:a}=e.formik,{functions:n}=e.application,{result:c,status:d}=u(()=>i.listAccounts("aws"),[],[]),m=a.account&&a.region?n.data.filter(e=>e.account===a.account).filter(e=>e.region===a.region).map(e=>e.functionName):[];return Mt.createElement("div",{className:"form-horizontal"},Mt.createElement("h4",null," Basic Settings "),Mt.createElement(r,{label:"Account",name:"account",onChange:t=>{e.formik.setFieldValue("region",null),e.formik.setFieldValue("functionName",null),e.formik.setFieldValue("account",t)},required:!0,input:e=>Mt.createElement(s,{...e,clearable:!1,isLoading:"PENDING"===d,stringOptions:c.map(e=>e.name)})}),Mt.createElement(r,{label:"Region",name:"region",onChange:t=>{e.formik.setFieldValue("functionName",null),e.formik.setFieldValue("region",t)},input:e=>Mt.createElement(s,{clearable:!1,disabled:!a.account,placeholder:a.account?"Select...":"Select an Account...",...e,isLoading:"PENDING"===d,stringOptions:c.filter(e=>e.name===a.account).flatMap(e=>e.regions).map(e=>e.name)})}),Mt.createElement(r,{label:"Function Name",name:"functionName",input:e=>Mt.createElement(s,{clearable:!1,disabled:!(a.account&&a.region),placeholder:a.account&&a.region?"Select...":"Select an Account and Region...",...e,stringOptions:m})}),Mt.createElement(r,{name:"s3bucket",label:"S3 Bucket",help:Mt.createElement(t,{id:"aws.function.s3bucket"}),input:e=>Mt.createElement(l,{...e,placeholder:"S3 bucket name"})}),Mt.createElement(r,{name:"s3key",label:"S3 Key",help:Mt.createElement(t,{id:"aws.function.s3key"}),input:e=>Mt.createElement(l,{...e,placeholder:"object.zip"})}),Mt.createElement(r,{name:"publish",label:"Publish",help:Mt.createElement(t,{id:"aws.function.publish"}),input:e=>Mt.createElement(o,{...e})}))}As();function xs(e){const t=new n(e);return t.field("account","Account Name").required(),t.field("region","Region").required(),t.field("functionName","Lambda Function Name").required(),t.field("s3key","S3 Object Key").required(),t.field("s3bucket","S3 Bucket Name").required().withValidators(yn),t.validateForm()}function Ds(e){const{stage:t,current:a,name:n}=e;return Mt.createElement($e,{name:n,current:a},Mt.createElement(Ue,{stage:t,message:t.outputs.failureMessage}),Mt.createElement("div",null,Mt.createElement("p",null," ",Mt.createElement("b",null," Function Name: ")," ",t.outputs.functionName?t.outputs.functionName:"N/A"," "),Mt.createElement("p",null," ",Mt.createElement("b",null," Function ARN: ")," ",t.outputs.functionARN?t.outputs.functionARN:"N/A"," ")))}Cr(""),(Ds||(Ds={})).title="Lambda Update Code Stage";const Bs={key:"Aws.LambdaUpdateCodeStage",label:"AWS Lambda Update Code",description:"Update code for a single AWS Lambda Function",component:function(e){return Mt.createElement("div",{className:"LambdaUpdateCodeConfig"},Mt.createElement(_e,{...e,validate:xs,onChange:e.updateStage,render:e=>Mt.createElement(Gs,{...e})}))},executionDetailsSections:[Ds,Oe],validateFn:xs};function Fs(){e.feature.lambdaAdditionalStages&&Re.pipeline.registerStage(Bs)}function zs(e){return e.credentials||e.accountName||e.accountId||e.account||""}function Ms(e){return(e.inboundRules||[]).filter(e=>e.range).reduce((e,t)=>((t.portRanges||[]).forEach(a=>{e.push({cidr:t.range.ip+t.range.cidr,type:t.protocol,startPort:a.startPort,endPort:a.endPort})}),e),[])}function Rs(e,t){return(e.inboundRules||[]).filter(e=>e.securityGroup).reduce((a,n)=>((n.portRanges||[]).forEach(r=>{const l=n.securityGroup,i="edit"===t;a.push({...i?{account:l.account,accountId:l.accountId,accountName:l.accountName||l.accountId,existing:!0,id:l.id,vpcId:l.vpcId!==e.vpcId?l.vpcId:null}:{},name:l.inferredName?null:l.name,type:n.protocol,startPort:r.startPort,endPort:r.endPort})}),a),[])}function Ls(e,t){var a;const n=e.securityGroup||{},r=zs(n)||e.credentials||"",l=n.region||e.region||(null==(a=n.regions)?void 0:a[0])||"",i=e.mode||"create",s=n.name||t,o={...n,account:r,accountId:n.accountId||r,accountName:n.accountName||r,credentials:r,description:n.description||"",ipIngress:n.ipIngress||Ms(n),name:s,region:l,regions:[l].filter(Boolean),securityGroupIngress:n.securityGroupIngress||Rs(n,i),vpcId:n.vpcId||""};return"clone"===i&&delete o.id,o}function Os(e){return!!e.type&&void 0!==e.startPort&&void 0!==e.endPort}function $s(e){return!!e.name&&!!zs(e)&&!!e.region&&(e.ipIngress||[]).every(e=>!!e.cidr&&Os(e))&&(e.securityGroupIngress||[]).every(e=>!(!e.name&&!e.id)&&Os(e))}class Us extends Mt.Component{constructor(e){super(e),this.updateSecurityGroup=e=>{this.setState(({securityGroup:t})=>({securityGroup:{...t,...e}}))},this.updateRule=(e,t,a)=>{const n=this.state.securityGroup[e].slice();n[t]={...n[t],...a},this.updateSecurityGroup({[e]:n})},this.addIpRule=()=>{this.updateSecurityGroup({ipIngress:[...this.state.securityGroup.ipIngress,{cidr:"0.0.0.0/0",type:"tcp",startPort:7001,endPort:7001}]})},this.addSecurityGroupRule=()=>{this.updateSecurityGroup({securityGroupIngress:[...this.state.securityGroup.securityGroupIngress,{name:"",type:"tcp",startPort:7001,endPort:7001}]})},this.removeRule=(e,t)=>{this.updateSecurityGroup({[e]:this.state.securityGroup[e].filter((e,a)=>a!==t)})},this.onTaskComplete=()=>{var e,t;if(null==(t=null==(e=this.getApplication().securityGroups)?void 0:e.refresh)||t.call(e),this.props.closeModal(),"edit"===this.getMode())return;const{securityGroup:a}=this.state;this.props.stateService.go(this.props.stateService.includes("**.firewallDetails")?"^.firewallDetails":".firewallDetails",{accountId:zs(a),name:a.name,provider:"aws",region:a.region,vpcId:a.vpcId})},this.submit=()=>{const e=this.getApplication(),{securityGroup:t}=this.state,a=zs(t),n={...t,account:a,accountId:a,accountName:a,cloudProvider:"aws",credentials:a,regions:[t.region]},r="edit"===this.getMode()?"Update":"clone"===this.getMode()?"Clone":"Create";this.state.taskMonitor.submit(()=>st.upsertSecurityGroup(n,e,r))};const t=this.getApplication(e);this.state={securityGroup:Ls(e,t.name),taskMonitor:new v({application:t,title:`${"edit"===this.getMode(e)?"Updating":"Creating"} your ${R.get("firewall")}`,onDismiss:()=>e.dismissModal(),onTaskComplete:this.onTaskComplete})}}static show(e){return E.show(Vs,e,{dialogClassName:"modal-lg"})}getApplication(e=this.props){return e.app||e.application}getMode(e=this.props){return e.mode||"create"}renderTextField(e,t,a){return Mt.createElement("div",{className:"form-group row"},Mt.createElement("label",{className:"col-md-3 sm-label-right"},e),Mt.createElement("div",{className:"col-md-7"},Mt.createElement("input",{className:"form-control input-sm",value:t||"",onChange:e=>a(e.target.value)})))}renderIpRules(){const e=this.state.securityGroup.ipIngress||[];return Mt.createElement("div",null,Mt.createElement("h5",null,"IP Ingress"),e.map((e,t)=>Mt.createElement("div",{className:"row",key:`ip-${t}`},Mt.createElement("div",{className:"col-md-3"},Mt.createElement("input",{className:"form-control input-sm",value:e.cidr||"",onChange:e=>this.updateRule("ipIngress",t,{cidr:e.target.value})})),Mt.createElement("div",{className:"col-md-2"},Mt.createElement("input",{className:"form-control input-sm",value:e.type||"",onChange:e=>this.updateRule("ipIngress",t,{type:e.target.value})})),Mt.createElement("div",{className:"col-md-2"},Mt.createElement("input",{className:"form-control input-sm",type:"number",value:e.startPort,onChange:e=>this.updateRule("ipIngress",t,{startPort:Number(e.target.value)})})),Mt.createElement("div",{className:"col-md-2"},Mt.createElement("input",{className:"form-control input-sm",type:"number",value:e.endPort,onChange:e=>this.updateRule("ipIngress",t,{endPort:Number(e.target.value)})})),Mt.createElement("div",{className:"col-md-1"},Mt.createElement($a,{bsSize:"xsmall",onClick:()=>this.removeRule("ipIngress",t)},"Remove")))),Mt.createElement($a,{bsSize:"small",onClick:this.addIpRule},"Add IP Rule"))}renderSecurityGroupRules(){const e=this.state.securityGroup.securityGroupIngress||[];return Mt.createElement("div",null,Mt.createElement("h5",null,R.get("Firewall")," Ingress"),e.map((e,t)=>Mt.createElement("div",{className:"row",key:`sg-${t}`},Mt.createElement("div",{className:"col-md-3"},e.existing?Mt.createElement("span",{className:"form-control-static"},e.name||e.id):Mt.createElement("input",{className:"form-control input-sm",value:e.name||"",onChange:e=>this.updateRule("securityGroupIngress",t,{name:e.target.value})})),Mt.createElement("div",{className:"col-md-2"},Mt.createElement("input",{className:"form-control input-sm",value:e.type||"",onChange:e=>this.updateRule("securityGroupIngress",t,{type:e.target.value})})),Mt.createElement("div",{className:"col-md-2"},Mt.createElement("input",{className:"form-control input-sm",type:"number",value:e.startPort,onChange:e=>this.updateRule("securityGroupIngress",t,{startPort:Number(e.target.value)})})),Mt.createElement("div",{className:"col-md-2"},Mt.createElement("input",{className:"form-control input-sm",type:"number",value:e.endPort,onChange:e=>this.updateRule("securityGroupIngress",t,{endPort:Number(e.target.value)})})),Mt.createElement("div",{className:"col-md-1"},Mt.createElement($a,{bsSize:"xsmall",onClick:()=>this.removeRule("securityGroupIngress",t)},"Remove")))),Mt.createElement($a,{bsSize:"small",onClick:this.addSecurityGroupRule},"Add ",R.get("Firewall")," Rule"))}render(){const{securityGroup:e,taskMonitor:t}=this.state,a=this.getMode(),n=$s(e);return Mt.createElement(Mt.Fragment,null,Mt.createElement(ot,{monitor:t}),Mt.createElement(me,{dismiss:this.props.dismissModal}),Mt.createElement(Oa.Header,null,Mt.createElement(Oa.Title,null,"edit"===a?"Edit":"clone"===a?"Clone":"Create"," ",R.get("Firewall"))),Mt.createElement(Oa.Body,null,this.renderTextField("Account",zs(e),e=>this.updateSecurityGroup({account:e,accountId:e,accountName:e,credentials:e})),this.renderTextField("Region",e.region,e=>this.updateSecurityGroup({region:e,regions:[e]})),this.renderTextField("VPC ID",e.vpcId,e=>this.updateSecurityGroup({vpcId:e})),this.renderTextField("Name",e.name,e=>this.updateSecurityGroup({name:e})),this.renderTextField("Description",e.description,e=>this.updateSecurityGroup({description:e})),Mt.createElement("div",{className:"well"},Mt.createElement("div",{className:"row small text-bold"},Mt.createElement("div",{className:"col-md-3"},"CIDR / ",R.get("Firewall")),Mt.createElement("div",{className:"col-md-2"},"Protocol"),Mt.createElement("div",{className:"col-md-2"},"Start Port"),Mt.createElement("div",{className:"col-md-2"},"End Port")),this.renderIpRules(),this.renderSecurityGroupRules())),Mt.createElement(Oa.Footer,null,Mt.createElement($a,{onClick:this.props.dismissModal},"Cancel"),Mt.createElement(ue,{isDisabled:!n,isFormSubmit:!1,submitting:t.submitting,onClick:this.submit,label:"edit"===a?"Update":"clone"===a?"Clone":"Create"})))}}Us.defaultProps={closeModal:C,dismissModal:C,mode:"create"};const Vs=Object.assign(N(Us),{show:Us.show});var Hs=Object.getOwnPropertyDescriptor;let qs=class extends Mt.Component{render(){const e=this.props.ipRules||[],t=`IP Range Rules (${e.length})`;return Mt.createElement(G,{heading:t},e.map(e=>Mt.createElement(z,{key:e.address,className:"horizontal-when-filters-collapsed"},Mt.createElement(D,{label:"IP Range",value:e.address}),Mt.createElement(D,{label:"Port Ranges",value:e.rules.map(t=>"-1"===t.protocol?Mt.createElement("span",null,"All ports and protocols",e.rules.length>1?Mt.createElement("div",null,Mt.createElement("em",null,"Additional port ranges are specified, but redundant:")):null):Mt.createElement("div",null,Mt.createElement("span",null,t.protocol,":",t.startPort," → ",t.endPort)))}))))}};function Ws(e,t){const a=[];return e[t].forEach(e=>{(e.portRanges||[]).forEach(t=>{("-1"===e.protocol||void 0!==t.startPort&&void 0!==t.endPort)&&a.push({startPort:t.startPort,endPort:t.endPort,protocol:e.protocol,description:e.description||""})})}),a}function js(e){const t=ea(e.ipRangeRules||[],e=>e.range.ip+e.range.cidr);return Object.keys(t).map(e=>({address:e,rules:Ws(t,e)})).filter(e=>e.rules.length)}function Zs(e){const t=ea(e.securityGroupRules||[],e=>e.securityGroup.id);return Object.keys(t).map(e=>({securityGroup:t[e][0].securityGroup,rules:Ws(t,e)})).filter(e=>e.rules.length)}function _s(e,t){return e.accountId||e.accountName||e.account||e.credentials||(null==t?void 0:t.accountId)}function Ks(e,t){if(!t)return e;const a=_s(e,t);return{...e,accountId:a,accountName:e.accountName||a,name:e.name||t.name,region:e.region||t.region,vpcId:e.vpcId||t.vpcId}}function Ys({app:t,resolvedSecurityGroup:a,securityGroup:n}){if(!hn.adHocInfraWritesEnabled)return null;const r=Ks(n,a);return Mt.createElement(La,{className:"dropdown",id:"amazon-security-group-actions-dropdown"},Mt.createElement(La.Toggle,{className:"btn btn-sm btn-primary dropdown-toggle"},R.get("Firewall")," Actions"),Mt.createElement(La.Menu,null,Mt.createElement(Ua,{onClick:()=>{ct(r,t).then(e=>{e&&Vs.show({app:t,mode:"edit",securityGroup:r})})}},"Edit Inbound Rules"),Mt.createElement(Ua,{onClick:()=>{let e=!1;ct(r,t).then(a=>{a&&w.confirm({header:`Really delete ${r.name}?`,buttonText:`Delete ${r.name}`,account:_s(r),taskMonitorConfig:{application:t,title:`Deleting ${r.name}`,onTaskRetry:()=>{e=!0}},submitMethod:()=>{const a={cloudProvider:r.provider||"aws",vpcId:r.vpcId};return e&&(a.removeDependencies=!0),st.deleteSecurityGroup(r,t,a)},retryBody:`<div><p>Retry deleting the ${R.get("firewall")} and revoke any dependent ingress rules?</p><p>Any instance or load balancer associations will have to removed manually.</p></div>`})})}},"Delete ",R.get("Firewall")),Mt.createElement(Ua,{onClick:()=>{Vs.show({app:t,mode:"clone",securityGroup:r})}},"Clone ",R.get("Firewall")),e.feature.entityTags&&Mt.createElement(k,{component:r,application:t,entityType:"securityGroup",onUpdate:()=>t.securityGroups.refresh()})))}qs=((e,t,a,n)=>{for(var r,l=n>1?void 0:n?Hs(t,a):t,i=e.length-1;i>=0;i--)(r=e[i])&&(l=r(l)||l);return l})([ce("aws.securityGroup.ip.rules")],qs);class Xs extends Mt.Component{constructor(){super(...arguments),this.state={loading:!0},this.isUnmounted=!1,this.loadRequestId=0,this.autoClose=()=>{if(!this.isUnmounted){if(!this.props.autoClose)return this.props.app.isStandalone?(q.removeLastItem("securityGroups"),void this.setState({loading:!1,notFound:!0})):void this.props.stateService.go("^",{allowModalToStayOpen:!0},{location:"replace"});this.props.autoClose()}},this.loadSecurityGroup=()=>{const{app:e,resolvedSecurityGroup:t}=this.props,a=++this.loadRequestId;this.setState({loading:!0,notFound:!1}),this.getSecurityGroupReader().getSecurityGroupDetails(e,t.accountId,"aws",t.region,t.vpcId||"",t.name).then(n=>this.isUnmounted||a!==this.loadRequestId?Promise.resolve():!n||$t(n)?(this.autoClose(),Promise.resolve()):Promise.resolve(Dn.getVpcName(n.vpcId)).then(r=>{if(this.isUnmounted||a!==this.loadRequestId)return;const l=this.getSecurityGroupReader().getApplicationSecurityGroup(e,t.accountId,t.region,t.name);this.setState({loading:!1,securityGroup:Ks({...l,...n,vpcName:r},t)})})).catch(()=>{a===this.loadRequestId&&this.autoClose()})},this.closeDetails=()=>{this.props.stateService.go("^")}}componentDidMount(){var e,t;const a=null==(t=(e=this.props.app).getDataSource)?void 0:t.call(e,"securityGroups");a?a.ready().then(()=>{this.isUnmounted||(this.loadSecurityGroup(),this.unsubscribeFromRefresh=a.onRefresh(this.loadSecurityGroup))}):this.loadSecurityGroup()}componentDidUpdate(e){this.getCoordinatesKey(e)!==this.getCoordinatesKey(this.props)&&this.loadSecurityGroup()}componentWillUnmount(){this.isUnmounted=!0,this.unsubscribeFromRefresh&&this.unsubscribeFromRefresh()}getCoordinatesKey(e){const{accountId:t,name:a,region:n,vpcId:r}=e.resolvedSecurityGroup;return[t,n,r||"",a].join(":")}getSecurityGroupReader(){return this.props.securityGroupReader||this.context.services.securityGroupReader}render(){const{app:e,resolvedSecurityGroup:t}=this.props,{loading:a,notFound:n,securityGroup:r}=this.state;return n?Mt.createElement("div",{className:"text-center"},Mt.createElement("h3",null,"Could not find ",R.get("firewall")," ",t.name,"."),Mt.createElement(ja,{to:"home.infrastructure"},Mt.createElement("a",null,"Back to search results"))):Mt.createElement("div",{className:"details-panel"},Mt.createElement("div",{className:"header"},!e.isStandalone&&Mt.createElement("div",{className:"close-button"},Mt.createElement("a",{className:"btn btn-link",onClick:this.closeDetails},Mt.createElement("span",{className:"glyphicon glyphicon-remove"}))),a&&Mt.createElement("div",{className:"horizontal center middle"},Mt.createElement(ne,{size:"small"})),!a&&r&&Mt.createElement("div",{className:"header-text horizontal middle"},Mt.createElement("span",{className:"glyphicon glyphicon-transfer"}),Mt.createElement("h3",{className:"horizontal middle space-between flex-1"},r.name||"(not found)")),!a&&r&&Mt.createElement("div",{className:"actions"},Mt.createElement(Ys,{app:e,resolvedSecurityGroup:t,securityGroup:r}))),!a&&(null==r?void 0:r.isManaged)&&Mt.createElement(se,{resourceSummary:r.managedResourceSummary,application:e}),!a&&r&&Mt.createElement("div",{className:"content"},Mt.createElement(G,{heading:`${R.get("Firewall")} Details`,defaultExpanded:!0},Mt.createElement("dl",{className:"dl-horizontal dl-medium"},Mt.createElement("dt",null,"ID"),Mt.createElement("dd",null,r.id),Mt.createElement("dt",null,"Account"),Mt.createElement("dd",null,Mt.createElement(A,{account:r.accountName||r.accountId})),Mt.createElement("dt",null,"Region"),Mt.createElement("dd",null,r.region),Mt.createElement("dt",null,"VPC"),Mt.createElement("dd",null,r.vpcName||r.vpcId),Mt.createElement("dt",null,"Description"),Mt.createElement("dd",null,r.description))),Mt.createElement(qs,{ipRules:js(r)}),Mt.createElement(G,{heading:`${R.get("Firewall")} Rules (${Zs(r).length||0})`,defaultExpanded:Zs(r).length>0},!Zs(r).length&&Mt.createElement("div",null,"None"),Zs(r).map(e=>Mt.createElement("dl",{className:"dl-horizontal dl-medium",key:e.securityGroup.id||e.securityGroup.name},Mt.createElement("dt",null,R.get("Firewall")),Mt.createElement("dd",null,Mt.createElement(ja,{to:"^.firewallDetails",params:{name:e.securityGroup.name,accountId:e.securityGroup.accountName||e.securityGroup.accountId,region:e.securityGroup.region,vpcId:e.securityGroup.vpcId,provider:"aws"}},Mt.createElement("a",null,e.securityGroup.accountName!==r.accountName&&Mt.createElement(A,{account:e.securityGroup.accountName||e.securityGroup.accountId})," ",e.securityGroup.name," (",e.securityGroup.id,")"))),Mt.createElement("dt",null,"Port Ranges"),e.rules.map(e=>Mt.createElement("dd",{key:`${e.protocol}-${e.startPort}-${e.endPort}`},e.protocol,": ",e.startPort," → ",e.endPort)))))))}}Xs.contextType=g;const Js=N(Xs);class Qs{resolveIndexedSecurityGroup(e,t,a){return Qs.resolveIndexedSecurityGroup(e,t,a)}static resolveIndexedSecurityGroup(e,t,a){return e[t.account][t.region][a]}}class eo{constructor(){this.supportsCompression=!0}normalizeSecurityGroup(e){return Dn.listVpcs().then(t=>{const a=t.find(t=>t.id===e.vpcId);return e.vpcName=a?a.name:"",e})}compress(e){const t=ea(e,"vpcId");return Object.keys(t).forEach(e=>{t[e]=t[e].map(e=>[e.name,e.id])}),t}decompress(e){const t=[];return Object.keys(e).forEach(a=>{e[a].forEach(e=>{t.push({name:e[0],id:e[1],vpcId:a})})}),t}}function to(e,t){function n(e,t){t=t||{};const a=i.getCredentialsKeyedByAccount("aws"),n=t.account||e.defaultCredentials.aws||hn.defaults.account,l=t.region||e.defaultRegions.aws||hn.defaults.region,s=t.subnet||hn.defaults.subnetType||"",o=i.getAvailabilityZonesForAccountAndRegion("aws",n,l);return Promise.all([o,a]).then(function([a,i]){var o,c,d,m,u,p,h,g;const v=i[n],f=v?v.defaultKeyPair:null,E=null!=(d=null==(c=null==(o=e.attributes)?void 0:o.providerSettings)?void 0:c.aws)?d:{};let y=hn.defaults.iamRole||"BaseIAMRole";y=y.replace("{{application}}",e.name);const b=E.useAmiBlockDeviceMappings||!1,C={application:e.name,credentials:n,region:l,strategy:"",capacity:{min:1,max:1,desired:1},targetHealthyDeployPercentage:100,cooldown:10,enabledMetrics:[],healthCheckType:"EC2",healthCheckGracePeriod:600,instanceMonitoring:!1,ebsOptimized:!1,selectedProvider:"aws",iamRole:y,terminationPolicies:["Default"],vpcId:null,subnetType:s,availabilityZones:a,keyPair:f,suspendedProcesses:[],securityGroups:[],stack:"",freeFormDetails:"",spotPrice:"",tags:{},useAmiBlockDeviceMappings:b,copySourceCustomBlockDeviceMappings:!1,viewState:{instanceProfile:"custom",useSimpleInstanceTypeSelector:!0,useAllImageSelection:!1,useSimpleCapacity:!0,usePreferredZones:!0,mode:t.mode||"create",disableStrategySelection:!0,dirty:{},submitButtonLabel:r(t.mode||"create")}};if((null==(m=e.attributes)?void 0:m.platformHealthOnlyShowOverride)&&(null==(u=e.attributes)?void 0:u.platformHealthOnly)&&(C.interestingHealthProviderNames=["Amazon"]),"test"===n&&(null==(p=hn.serverGroups)?void 0:p.enableIPv6)&&(C.associateIPv6Address=!0),null==(h=hn.serverGroups)?void 0:h.enableIMDSv2){const t=hn.serverGroups.defaultIMDSv2AppAgeLimit,a=null==(g=e.attributes)?void 0:g.createTs;C.requireIMDSv2=t&&a&&Number(a)>t}return C})}function r(e){switch(e){case"createPipeline":return"Add";case"editPipeline":return"Done";case"clone":return"Clone";default:return"Create"}}function l(e){return!(e.onDemandAllocationStrategy||e.onDemandBaseCapacity||e.onDemandPercentageAboveBaseCapacity||e.spotAllocationStrategy||e.spotInstancePools||e.launchTemplateOverridesForInstanceType&&e.launchTemplateOverridesForInstanceType.length>0)}return{buildNewServerGroupCommand:n,buildServerGroupCommandFromExisting:function(t,n,s="clone"){var o,c,d,m;const u=i.getPreferredZonesByAccount("aws"),h=p.listSubnets(),g=le.parseServerGroupName(n.asg.autoScalingGroupName);let v;if(n.mixedInstancesPolicy){const e=null==(o=n.mixedInstancesPolicy)?void 0:o.launchTemplateOverridesForInstanceType;v=e?e.map(e=>e.instanceType):[null==(m=null==(d=null==(c=n.mixedInstancesPolicy)?void 0:c.launchTemplates[0])?void 0:d.launchTemplateData)?void 0:m.instanceType]}else n.launchTemplate?v=[Ot.get(n,"launchTemplate.launchTemplateData.instanceType")]:n.launchConfig&&(v=[Ot.get(n,"launchConfig.instanceType")]);const f=e.getCategoryForMultipleInstanceTypes("aws",v);return Promise.all([u,h,f]).then(([e,i,o])=>{var c,d,m,u,p,h,v,f,E,y,b,C,N,w;const S=n.asg.availabilityZones.sort();let k=!1;const T=e[n.account];if(T){const e=T[n.region].sort();k=S.join(",")===e.join(",")}const I=["Launch","Terminate","AddToLoadBalancer"],P=(null!=(m=null==(d=null==(c=t.attributes)?void 0:c.providerSettings)?void 0:d.aws)?m:{}).useAmiBlockDeviceMappings||!1,A={},G=["spinnaker:application","spinnaker:stack","spinnaker:details"];n.asg.tags&&n.asg.tags.filter(e=>!G.includes(e.key)).forEach(e=>{A[e.key]=e.value});const x={application:t.name,strategy:"",stack:g.stack,freeFormDetails:g.freeFormDetails,credentials:n.account,cooldown:n.asg.defaultCooldown,enabledMetrics:Ot.get(n,"asg.enabledMetrics",[]).map(e=>e.metric),healthCheckGracePeriod:n.asg.healthCheckGracePeriod,healthCheckType:n.asg.healthCheckType,terminationPolicies:n.asg.terminationPolicies,loadBalancers:n.asg.loadBalancerNames,region:n.region,useSourceCapacity:!1,capacity:{min:n.asg.minSize,max:n.asg.maxSize,desired:n.asg.desiredCapacity},targetHealthyDeployPercentage:100,availabilityZones:S,selectedProvider:"aws",source:{account:n.account,region:n.region,asgName:n.asg.autoScalingGroupName},suspendedProcesses:(n.asg.suspendedProcesses||[]).map(e=>e.processName).filter(e=>!I.includes(e)),tags:Object.assign({},n.tags,A),targetGroups:n.targetGroups,useAmiBlockDeviceMappings:P,copySourceCustomBlockDeviceMappings:"clone"===s,viewState:{instanceProfile:o,useAllImageSelection:!1,useSimpleCapacity:n.asg.minSize===n.asg.maxSize,usePreferredZones:k,mode:s,submitButtonLabel:r(s),isNew:!1,dirty:{}}};if((null==(u=t.attributes)?void 0:u.platformHealthOnlyShowOverride)&&(null==(p=t.attributes)?void 0:p.platformHealthOnly)&&(x.interestingHealthProviderNames=["Amazon"]),"editPipeline"===s){x.useSourceCapacity=!0,x.viewState.useSimpleCapacity=!1,x.strategy="redblack";const e=a.getStrategy("redblack");e.initializationMethod&&e.initializationMethod(x),x.suspendedProcesses=[]}const D=n.asg.vpczoneIdentifier;if(""!==D){const e=D.split(",")[0],t=i.find(t=>t.id===e);x.subnetType=t.purpose,x.vpcId=t.vpcId}else x.subnetType="",x.vpcId=null;if(n.launchConfig&&(Object.assign(x,{instanceType:n.launchConfig.instanceType,iamRole:n.launchConfig.iamInstanceProfile,keyPair:n.launchConfig.keyName,associatePublicIpAddress:n.launchConfig.associatePublicIpAddress,ramdiskId:n.launchConfig.ramdiskId,instanceMonitoring:n.launchConfig.instanceMonitoring&&n.launchConfig.instanceMonitoring.enabled,ebsOptimized:n.launchConfig.ebsOptimized,spotPrice:n.launchConfig.spotPrice}),n.launchConfig.userData&&(x.base64UserData=n.launchConfig.userData),x.viewState.imageId=n.launchConfig.imageId,x.viewState.useSimpleInstanceTypeSelector=!0),n.launchTemplate||n.mixedInstancesPolicy){let e,t;if(n.launchTemplate&&(e=n.launchTemplate.launchTemplateData,t=null==(v=null==(h=e.instanceMarketOptions)?void 0:h.spotOptions)?void 0:v.maxPrice,x.instanceType=e.instanceType,x.viewState.useSimpleInstanceTypeSelector=!0,e.userData&&(x.base64UserData=e.userData)),n.mixedInstancesPolicy){const a=n.mixedInstancesPolicy;e=null==(E=null==(f=null==a?void 0:a.launchTemplates)?void 0:f[0])?void 0:E.launchTemplateData,t=null==(y=null==a?void 0:a.instancesDistribution)?void 0:y.spotMaxPrice,x.securityGroups=e.networkInterfaces?(null!=(b=e.networkInterfaces.find(e=>0===e.deviceIndex))?b:{}).groups:e.securityGroups,x.onDemandAllocationStrategy=a.instancesDistribution.onDemandAllocationStrategy,x.onDemandBaseCapacity=a.instancesDistribution.onDemandBaseCapacity,x.onDemandPercentageAboveBaseCapacity=a.instancesDistribution.onDemandPercentageAboveBaseCapacity,x.spotAllocationStrategy=a.instancesDistribution.spotAllocationStrategy,x.spotInstancePools=a.instancesDistribution.spotInstancePools,a.launchTemplateOverridesForInstanceType?x.launchTemplateOverridesForInstanceType=function(e){let t=1;return Ot.sortBy(e,["priority"]).map(e=>{const{instanceType:a,weightedCapacity:n}=e;let r;return e.priority?(r=e.priority,t=e.priority+1):r=t++,{instanceType:a,weightedCapacity:n,priority:r}})}(a.launchTemplateOverridesForInstanceType):x.instanceType=e.instanceType,x.viewState.useSimpleInstanceTypeSelector=l(x)}const a=Ot.get(e,"networkInterfaces[0]"),r=null!=(C=null==a?void 0:a.ipv6AddressCount)?C:0,i=hn.serverGroups,s=n.accountDetails&&"test"===n.accountDetails.environment,o=i&&i.enableIPv6&&i.setIPv6InTest&&s;Object.assign(x,{iamRole:e.iamInstanceProfile.name,keyPair:e.keyName,associateIPv6Address:o||Boolean(r),ramdiskId:e.ramdiskId,instanceMonitoring:e.monitoring&&e.monitoring.enabled,ebsOptimized:e.ebsOptimized,spotPrice:t||void 0,requireIMDSv2:Boolean("required"===(null==(N=e.metadataOptions)?void 0:N.httpTokens)),unlimitedCpuCredits:e.creditSpecification?"unlimited"===e.creditSpecification.cpuCredits:void 0}),x.viewState.imageId=e.imageId}if("clone"===s&&n.image&&n.image.name&&(x.amiName=n.image.name),n.launchConfig&&n.launchConfig.securityGroups.length&&(x.securityGroups=n.launchConfig.securityGroups),n.launchTemplate&&n.launchTemplate.launchTemplateData.securityGroups.length&&(x.securityGroups=n.launchTemplate.launchTemplateData.securityGroups),n.launchTemplate&&n.launchTemplate.launchTemplateData.networkInterfaces){const e=null!=(w=n.launchTemplate.launchTemplateData.networkInterfaces.find(e=>0===e.deviceIndex))?w:{};x.securityGroups=e.groups}return x})},buildNewServerGroupCommandForPipeline:function(){return Promise.resolve({viewState:{requiresTemplateSelection:!0}})},buildServerGroupCommandFromPipeline:function(t,a){const r=Ot.cloneDeep(a),i=Object.keys(r.availabilityZones)[0],s=r.launchTemplateOverridesForInstanceType?r.launchTemplateOverridesForInstanceType.map(e=>e.instanceType):[r.instanceType],o=e.getCategoryForMultipleInstanceTypes("aws",s),c={account:r.account,region:i};return Promise.all([n(t,c),o]).then(function([e,t]){const a=r.availabilityZones[i].join(",")===e.availabilityZones.join(","),n={instanceProfile:t,disableImageSelection:!0,useSimpleCapacity:r.capacity.min===r.capacity.max&&!0!==r.useSourceCapacity,usePreferredZones:a,mode:"editPipeline",submitButtonLabel:"Done",templatingEnabled:!0,existingPipelineCluster:!0,dirty:{},useSimpleInstanceTypeSelector:l(r)},s={region:i,credentials:r.account,availabilityZones:r.availabilityZones[i],iamRole:r.iamRole,viewState:n};return r.strategy=r.strategy||"",Object.assign({},e,r,s)})},buildUpdateServerGroupCommand:function(e){var a,n;const r={type:"modifyAsg",asgs:[{asgName:e.name,region:e.region}],cooldown:e.asg.defaultCooldown,enabledMetrics:(null!=(n=null==(a=e.asg)?void 0:a.enabledMetrics)?n:[]).map(e=>e.metric),healthCheckGracePeriod:e.asg.healthCheckGracePeriod,healthCheckType:e.asg.healthCheckType,terminationPolicies:Ot.cloneDeep(e.asg.terminationPolicies),credentials:e.account,capacityRebalance:e.asg.capacityRebalance};return t.configureUpdateCommand(r),r}}}class ao{constructor(e,t){const a=t.providerServiceDelegate.getDelegate("aws","serverGroup.configurationService");this.delegate=to(t.instanceTypeService,a)}buildNewServerGroupCommand(e,t){return this.delegate.buildNewServerGroupCommand(e,t)}buildServerGroupCommandFromExisting(e,t,a){return this.delegate.buildServerGroupCommandFromExisting(e,t,a)}buildNewServerGroupCommandForPipeline(){return this.delegate.buildNewServerGroupCommandForPipeline()}buildServerGroupCommandFromPipeline(e,t){return this.delegate.buildServerGroupCommandFromPipeline(e,t)}buildUpdateServerGroupCommand(e){return this.delegate.buildUpdateServerGroupCommand(e)}}ao.requiresDeckRuntimeServices=!0;const no=ao;class ro{static getDisabledDate(e){if(e.isDisabled){const t=this.normalizeScalingProcesses(e).find(e=>"AddToLoadBalancer"===e.name&&!e.enabled);if(t)return t.suspensionDate}return null}static normalizeScalingProcesses(e){if(!e.asg||!e.asg.suspendedProcesses)return[];const t=e.asg.suspendedProcesses;return this.listProcesses().map(e=>{const a=t.find(t=>t.processName===e.name),n={name:e.name,enabled:!a,description:e.description};if(a){const e=a.suspensionReason.replace("User suspended at ","");n.suspensionDate=new Date(e).getTime()}return n})}static listProcesses(){return[{name:"Launch",description:"Controls if new instances should be launched into the ASG. If this is disabled, scale-up events will not produce new instances."},{name:"Terminate",description:"Controls if instances should be terminated during a scale-down event."},{name:"AddToLoadBalancer",description:"Controls if new instances should be added to the ASG’s ELB."},{name:"AlarmNotification",description:"This disables autoscaling."},{name:"AZRebalance",description:"Controls whether AWS should attempt to maintain an even distribution of instances across all healthy Availability Zones configured for the ASG."},{name:"HealthCheck",description:"If disabled, the instance’s health will no longer be reported to the autoscaling processor."},{name:"ReplaceUnhealthy",description:"Controls whether instances should be replaced if they failed the health check."},{name:"ScheduledActions",description:"Controls whether scheduled actions should be executed."}]}}class lo{static listKeyPairs(){return T("/keyPairs").useCache().get().then(e=>e.sort((e,t)=>e.keyName.localeCompare(t.keyName)))}}class io{constructor(e,t,a,n={getCommandOverrides:()=>[]}){this.serverGroupCommandRegistry=n,this.enabledMetrics=["GroupMinSize","GroupMaxSize","GroupDesiredCapacity","GroupInServiceInstances","GroupPendingInstances","GroupStandbyInstances","GroupTerminatingInstances","GroupTotalInstances"],this.healthCheckTypes=["EC2","ELB"],this.terminationPolicies=["OldestInstance","NewestInstance","OldestLaunchConfiguration","ClosestToNextInstanceHour","Default"],this.securityGroupReader=e,this.awsInstanceTypeService=t,this.cacheInitializer=a}getSecurityGroupReader(){return this.securityGroupReader}getCacheInitializer(){return this.cacheInitializer}configureUpdateCommand(e){e.backingData={enabledMetrics:ua(this.enabledMetrics),healthCheckTypes:ua(this.healthCheckTypes),terminationPolicies:ua(this.terminationPolicies)}}configureCommand(e,t){this.applyOverrides("beforeConfiguration",t),t.toggleSuspendedProcess=(e,t)=>{e.suspendedProcesses=e.suspendedProcesses||[];const a=e.suspendedProcesses.indexOf(t);e.suspendedProcesses=-1===a?e.suspendedProcesses.concat(t):e.suspendedProcesses.filter(e=>e!==t)},t.processIsSuspended=(e,t)=>e.suspendedProcesses.includes(t),t.onStrategyChange=(e,t)=>{var a;(null==(a=hn.serverGroups)?void 0:a.enableLaunchTemplates)&&(e.setLaunchTemplate="rollingpush"===t.key||void 0),""!==t.key&&"custom"!==t.key&&(e.suspendedProcesses=(e.suspendedProcesses||[]).filter(e=>"AddToLoadBalancer"!==e))},t.getBlockDeviceMappingsSource=e=>e.copySourceCustomBlockDeviceMappings?"source":e.useAmiBlockDeviceMappings?"ami":"default",t.selectBlockDeviceMappingsSource=(e,t)=>{"source"===t?(e.copySourceCustomBlockDeviceMappings=!0,e.useAmiBlockDeviceMappings=!1):"ami"===t?(e.copySourceCustomBlockDeviceMappings=!1,e.useAmiBlockDeviceMappings=!0):(e.copySourceCustomBlockDeviceMappings=!1,e.useAmiBlockDeviceMappings=!1)},t.regionIsDeprecated=e=>pa(e,"backingData.filtered.regions")&&e.backingData.filtered.regions.some(t=>t.name===e.region&&t.deprecated);const a=this.getSecurityGroupReader();return Promise.all([i.getCredentialsKeyedByAccount("aws"),a.getAllSecurityGroups(),p.listSubnets(),i.getPreferredZonesByAccount("aws"),lo.listKeyPairs(),this.awsInstanceTypeService.getAllTypesByRegion(),Promise.resolve(ua(this.enabledMetrics)),Promise.resolve(ua(this.healthCheckTypes)),Promise.resolve(ua(this.terminationPolicies))]).then(([a,n,r,l,i,s,o,c,d])=>{var m,u;const p={credentialsKeyedByAccount:a,securityGroups:n,subnets:r,preferredZones:l,keyPairs:i,instanceTypesInfo:s,enabledMetrics:o,healthCheckTypes:c,terminationPolicies:d};let h=Promise.resolve();if(p.accounts=ha(p.credentialsKeyedByAccount),p.filtered={},p.scalingProcesses=ro.listProcesses(),p.appLoadBalancers=e.getDataSource("loadBalancers").data,p.managedResources=null==(u=null==(m=e.getDataSource("managedResources"))?void 0:m.data)?void 0:u.resources,t.backingData=p,this.configureVpcId(t),p.filtered.securityGroups=this.getRegionalSecurityGroups(t),t.viewState.disableImageSelection&&this.configureInstanceTypes(t),t.securityGroups&&t.securityGroups.length){const e=Jt(this.getRegionalSecurityGroups(t),"id");ga(t.securityGroups,e).length<t.securityGroups.length&&(h=this.refreshSecurityGroups(t,!0))}return h.then(()=>{this.applyOverrides("afterConfiguration",t),this.attachEventHandlers(t)})})}applyOverrides(e,t){this.serverGroupCommandRegistry.getCommandOverrides("aws").forEach(a=>{a[e]&&a[e](t)})}configureKeyPairs(e){const t={dirty:{}};if(e.credentials&&e.region){const a=ra(e.backingData.credentialsKeyedByAccount,t=>t.defaultKeyPair&&e.keyPair&&0===e.keyPair.indexOf(t.defaultKeyPair.replace("{{region}}",""))),n=Xt(e.backingData.keyPairs).filter({account:e.credentials,region:e.region}).map("keyName").value();if(e.keyPair&&n.length&&!n.includes(e.keyPair)){const r=e.backingData.credentialsKeyedByAccount[e.credentials]||{defaultKeyPair:null};if(r.defaultKeyPair){const l=r.defaultKeyPair.replace("{{region}}",e.region);a&&n.includes(l)?e.keyPair=l:(e.keyPair=null,t.dirty.keyPair=!0)}else e.keyPair=null,t.dirty.keyPair=!0}e.backingData.filtered.keyPairs=n}else e.backingData.filtered.keyPairs=[];return t}configureInstanceTypes(e){const t={dirty:{}};if(e.region&&(e.virtualizationType||e.viewState.disableImageSelection)){let a=this.awsInstanceTypeService.getAvailableTypesForRegions(e.backingData.instanceTypesInfo,[e.region]);(e.virtualizationType||e.amiArchitecture)&&(a=this.awsInstanceTypeService.filterInstanceTypes(a,e.virtualizationType,!!e.vpcId,e.amiArchitecture));const n=Jt(a,"name");e.instanceType&&!n.includes(e.instanceType)&&(t.dirty.instanceType=e.instanceType,e.instanceType=null);const r=Jt(e.launchTemplateOverridesForInstanceType,"instanceType"),l=ga(r,n),i=na(r,l);e.launchTemplateOverridesForInstanceType&&i.length>0&&(t.dirty.launchTemplateOverridesForInstanceType=e.launchTemplateOverridesForInstanceType.filter(e=>i.includes(e.instanceType)),e.launchTemplateOverridesForInstanceType=e.launchTemplateOverridesForInstanceType.filter(e=>l.includes(e.instanceType))),e.backingData.filtered.instanceTypes=n,e.backingData.filtered.instanceTypesInfo=a}else e.backingData.filtered.instanceTypes=[],e.backingData.filtered.instanceTypesInfo=[];return va(e.viewState.dirty,t.dirty),t}configureImages(e){const t={dirty:{}};return e.amiName||(e.virtualizationType=null,e.amiArchitecture=null),e.viewState.disableImageSelection||e.amiName&&!e.region&&(t.dirty.amiName=!0,e.amiName=null),t}configureAvailabilityZones(e){e.backingData.filtered.availabilityZones=fa(e.backingData.credentialsKeyedByAccount[e.credentials].regions,{name:e.region}).availabilityZones}configureSubnetPurposes(e){const t={dirty:{}},a=e.backingData.filtered;return null===e.region||(a.subnetPurposes=Xt(e.backingData.subnets).filter({account:e.credentials,region:e.region}).reject({target:"elb"}).reject({purpose:null}).uniqBy("purpose").value(),Xt(a.subnetPurposes).some({purpose:e.subnetType}).value()||(e.subnetType=null,t.dirty.subnetType=!0)),t}getRegionalSecurityGroups(e){const t=e.backingData.securityGroups[e.credentials]||{aws:{}};return Xt(t.aws[e.region]).filter({vpcId:e.vpcId||null}).sortBy("name").value()}configureSecurityGroupOptions(e){const t={dirty:{}},a=e.backingData.filtered.securityGroups,n=this.getRegionalSecurityGroups(e),r="string"==typeof e.securityGroups&&e.securityGroups.includes("${");if(a&&e.securityGroups&&!r){const r=e.securityGroups.map(e=>{const t=fa(a,{id:e});return t?t.name:e}),l=e.securityGroups.map(e=>{const t=fa(a,{id:e})||fa(a,{name:e});return t?t.name:null}).map(e=>fa(n,{name:e})).filter(e=>e),i=Jt(l,"name"),s=Ea(r,i);e.securityGroups=Jt(l,"id"),s.length&&(t.dirty.securityGroups=s)}return e.backingData.filtered.securityGroups=n.sort((e,t)=>e.name.localeCompare(t.name)),t}refreshSecurityGroups(e,t){return this.getCacheInitializer().refreshCache("securityGroups").then(()=>this.getSecurityGroupReader().getAllSecurityGroups().then(a=>{e.backingData.securityGroups=a,t||this.configureSecurityGroupOptions(e)}))}getLoadBalancerMap(e){if(e.backingData.loadBalancers)return Xt(e.backingData.loadBalancers).map("accounts").flattenDeep().filter({name:e.credentials}).map("regions").flattenDeep().filter({name:e.region}).map("loadBalancers").flattenDeep().value();return(e.backingData.appLoadBalancers||[]).filter(t=>t.region===e.region&&t.account===e.credentials)}getLoadBalancerNames(e){return this.getLoadBalancerMap(e).filter(t=>(!t.loadBalancerType||"classic"===t.loadBalancerType)&&t.vpcId===e.vpcId).map(e=>e.name).sort()}getVpcLoadBalancerNames(e){return this.getLoadBalancerMap(e).filter(e=>(!e.loadBalancerType||"classic"===e.loadBalancerType)&&e.vpcId).map(e=>e.name).sort()}getTargetGroupNames(e){const t=this.getLoadBalancerMap(e).filter(e=>"classic"!==e.loadBalancerType);return Wt(t.map(e=>e.targetGroups.filter(e=>"instance"===e.targetType))).map(e=>e.name).sort()}getValidMatches(e,t){const a=t.filter(e=>e.includes("${")),n=ga(e,t),[r,l]=sa(t,e=>n.includes(e)||a.includes(e));return{valid:r,invalid:l,spel:a}}configureLoadBalancerOptions(e){const t={dirty:{}},a=(e.loadBalancers||[]).concat(e.vpcLoadBalancers||[]),n=e.targetGroups||[],r=this.getLoadBalancerNames(e),l=this.getVpcLoadBalancerNames(e),i=this.getTargetGroupNames(e);if(a&&e.loadBalancers){const n=e.vpcId?r:r.concat(l),{valid:i,invalid:s,spel:o}=this.getValidMatches(n,a);e.loadBalancers=ga(r.concat(o),i),e.vpcId?delete e.vpcLoadBalancers:e.vpcLoadBalancers=ga(l,i),s.length&&(t.dirty.loadBalancers=s),e.viewState.spelLoadBalancers=o||[]}if(n&&e.targetGroups&&!n.includes("${")){const{valid:a,invalid:r,spel:l}=this.getValidMatches(i,n);e.targetGroups=a,r.length&&(t.dirty.targetGroups=r),e.viewState.spelTargetGroups=l||[]}return e.backingData.filtered.loadBalancers=r,e.backingData.filtered.vpcLoadBalancers=l,e.backingData.filtered.targetGroups=i,t}refreshLoadBalancers(e,t){return T("/loadBalancers").query({provider:"aws"}).get().then(a=>{e.backingData.loadBalancers=a,t||this.configureLoadBalancerOptions(e)})}configureVpcId(e){const t={dirty:{}};if(e.subnetType){const t=fa(e.backingData.subnets,{purpose:e.subnetType,account:e.credentials,region:e.region});e.vpcId=t?t.vpcId:null}else e.vpcId=null,t.dirty.vpcId=!0;return va(t.dirty,this.configureInstanceTypes(e).dirty),t}attachEventHandlers(e){e.usePreferredZonesChanged=e=>{const t=e.availabilityZones?e.availabilityZones.length:0,a={dirty:{}},n=e.backingData.preferredZones[e.credentials];if(n&&n[e.region]&&e.viewState.usePreferredZones)e.availabilityZones=Ht(n[e.region].sort());else{e.availabilityZones=ga(e.availabilityZones,e.backingData.filtered.availabilityZones);t!==(e.availabilityZones?e.availabilityZones.length:0)&&(a.dirty.availabilityZones=!0)}return a},e.subnetChanged=e=>{const t=this.configureVpcId(e);return va(t.dirty,this.configureSecurityGroupOptions(e).dirty),va(t.dirty,this.configureLoadBalancerOptions(e).dirty),e.viewState.dirty=e.viewState.dirty||{},va(e.viewState.dirty,t.dirty),t},e.regionChanged=e=>{const t={dirty:{}},a=e.backingData.filtered;return va(t.dirty,this.configureSubnetPurposes(e).dirty),e.region?(va(t.dirty,e.subnetChanged(e).dirty),va(t.dirty,this.configureInstanceTypes(e).dirty),this.configureAvailabilityZones(e),va(t.dirty,e.usePreferredZonesChanged(e).dirty),va(t.dirty,this.configureImages(e).dirty),va(t.dirty,this.configureKeyPairs(e).dirty)):a.regionalAvailabilityZones=null,dt(e),t},e.clusterChanged=e=>{e.moniker=le.getMoniker(e.application,e.stack,e.freeFormDetails),dt(e)},e.credentialsChanged=e=>{const t={dirty:{}},a=e.backingData;if(e.credentials){const n=a.credentialsKeyedByAccount[e.credentials]||{regions:[]};a.filtered.regions=n.regions,ra(a.filtered.regions,{name:e.region})?va(t.dirty,e.regionChanged(e).dirty):(e.region=null,t.dirty.region=!0)}else e.region=null;return dt(e),t},e.imageChanged=e=>this.configureInstanceTypes(e),e.instanceTypeChanged=e=>{e.ebsOptimized=this.awsInstanceTypeService.isEbsOptimized(e.instanceType)},e.launchTemplateOverridesChanged=e=>{var t;e.ebsOptimized=null==(t=e.launchTemplateOverridesForInstanceType)?void 0:t.every(e=>this.awsInstanceTypeService.isEbsOptimized(e.instanceType))},this.applyOverrides("attachEventHandlers",e)}}class so extends io{constructor(e,t){super(t.securityGroupReader,new Yn,t.cacheInitializer)}}so.requiresDeckRuntimeServices=!0;class oo extends Mt.Component{constructor(e){super(e),this.state={templateSelectionText:{copied:["account, region, subnet, cluster name (stack, details)","load balancers",R.get("firewalls"),"instance type","all fields on the Advanced Settings page"],notCopied:["the following suspended scaling processes: Launch, Terminate, AddToLoadBalancer"],additionalCopyText:"If a server group exists in this cluster at the time of deployment, its scaling policies will be copied over to the new server group."}},e.command.viewState.disableStrategySelection||this.state.templateSelectionText.notCopied.push("the deployment strategy (if any) used to deploy the most recent server group")}render(){const{app:e,command:t,onDismiss:a,onTemplateSelected:n}=this.props,{templateSelectionText:r}=this.state;return Mt.createElement(mt,{cloudProvider:"aws",application:e,command:t,onDismiss:a,onTemplateSelected:n,templateSelectionText:r})}}class co extends Mt.Component{constructor(){super(...arguments),this.state={errorMessage:null,selectionMode:"packageImages",searchString:"",searchResults:[],isSearching:!1,packageImages:null,isLoadingPackageImages:!0},this.awsImageReader=new rr,this.props$=new Ca,this.searchInput$=new Ca,this.destroy$=new Ca,this.sortImagesBy$=new Sa("ts"),this.buildImageMenu=e=>{const{ImageMenuHeading:t,ImageLabel:a}=this,{options:n}=e;return Mt.createElement(Mt.Fragment,null,n.length>0&&Mt.createElement(t,null),n.map(t=>Mt.createElement(a,{key:t.imageName,option:t,params:e})))},this.ImageMenuHeading=()=>{const e=this.sortImagesBy$.value;return Mt.createElement("div",{className:"sp-padding-s-xaxis sp-padding-xs-yaxis small",style:{borderBottom:"1px solid var(--color-silver)",position:"sticky",top:0,backgroundColor:"var(--color-white)"}},Mt.createElement("b",null,"Sort by: "),Mt.createElement("a",{className:"clickable sp-padding-xs-xaxis",onClick:()=>this.setSortImagesBy("ts")},"ts"===e?Mt.createElement("b",null,"timestamp (newest first)"):"timestamp (newest first)"),Mt.createElement("span",null," | "),Mt.createElement("a",{className:"clickable sp-padding-xs-xaxis",onClick:()=>this.setSortImagesBy("name")},"name"===e?Mt.createElement("b",null,"name (A-Z)"):"name (A-Z)"))},this.ImageLabel=e=>{const{credentials:t,region:a}=this.props,{option:n,params:r}=e,l=n.amis[a]&&n.amis[a][0]?n.amis[a][0]:` - not found in ${t}/${a}`;return Mt.createElement("div",{key:n.imageName,onMouseDown:e=>{e.preventDefault(),e.stopPropagation(),r.selectValue(n)},onMouseOver:()=>r.focusOption(n),className:"Select-option "+(r.focusedOption&&r.focusedOption.imageName===n.imageName?"is-focused":""),role:"option"},Mt.createElement("div",null,n.imageName),Mt.createElement("div",{className:"small"},Mt.createElement("b",null,"Created: "),n.attributes.creationDate,Mt.createElement("b",{className:"sp-padding-s-left"},"AMI: "),l))}}static makeFakeImage(e,t,a){if(!e&&!t)return null;return{imageName:e,amis:{[a]:[t]},attributes:{virtualizationType:"*",architecture:"*",creationDate:(new Date).toISOString()}}}loadImagesFromApplicationName(e){const t=e.name.replace(/_/g,"[_\\-]")+"*";return this.awsImageReader.findImages({q:t})}buildQueryForSimilarImages(e){let t=!1,a=e.split("_")[0];const n=a.split("-");n.length>3&&(a=n.slice(0,-3).join("-"),t=!0);return!a||a.length<3?null:a+(t?"-*":"*")}loadImageById(e,t,a){return e?this.awsImageReader.getImage(e,t,a).catch(()=>null):Promise.resolve(null)}searchForImages(e){return e&&e.length>=3?this.awsImageReader.findImages({q:e}):Promise.resolve([])}fetchPackageImages(e,t,a,n){const r=e&&e.amis&&e.amis[t]&&e.amis[t][0];return this.loadImageById(r,t,a).then(e=>e?this.searchForImages(this.buildQueryForSimilarImages(e.imageName)).then(t=>t.find(t=>t.imageName===e.imageName)?t:t.concat(e)):this.loadImagesFromApplicationName(n))}selectImage(e){this.props.value!==e&&this.props.onChange(e)}findMatchingImage(e,t){return e.find(e=>t&&t.imageName===e.imageName)}componentDidMount(){const e=this.props$.pipe(Ia(e=>e.region),Pa()),{value:t,region:a,credentials:n,application:r}=this.props;this.setState({isLoadingPackageImages:!0});const l=this.fetchPackageImages(t,a,n,r),i=Na(l).pipe(za(e=>(console.error(e),this.setState({errorMessage:"Unable to load package images"}),ka([]))),Ba(()=>this.setState({isLoadingPackageImages:!1}))),s=wa([i,e,this.sortImagesBy$]).pipe(Ia(([e,t,a])=>{const n=e.filter(e=>!!e.amis[t]);return this.sortImages(n,a)})),o=this.searchInput$.pipe(Ba(e=>this.setState({searchString:e})),Pa(),Ma(250)).pipe(Ba(()=>this.setState({isSearching:!0})),Ga(e=>this.searchForImages(e)),za(e=>(console.error(e),this.setState({errorMessage:"Unable to search for images"}),ka([]))),Ba(()=>this.setState({isSearching:!1})));wa([o,e,this.sortImagesBy$]).pipe(Ia(([e,t,a])=>{const{searchString:n}=this.state;if(0===e.length&&/ami-[0-9a-f]{8,17}/.exec(n)){return[co.makeFakeImage(n,n,t)].filter(e=>!!e)}const r=e.filter(e=>!!e.amis[t]);return this.sortImages(r,a)})).pipe(Da(this.destroy$)).subscribe(e=>this.setState({searchResults:e})),s.pipe(Da(this.destroy$)).subscribe(e=>{this.setState({packageImages:e}),this.selectImage(this.findMatchingImage(e,this.props.value))}),e.pipe(Ga(e=>{const t=this.props.value;if("packageImages"===this.state.selectionMode)return s.pipe(Ia(e=>this.findMatchingImage(e,t)));{const a=!!(t&&t.amis&&t.amis[e]);return ka(a?t:void 0)}}),Da(this.destroy$)).subscribe(e=>this.selectImage(e))}setSortImagesBy(e){this.sortImagesBy$.next(e)}sortImages(e,t){return e.slice().sort((e,a)=>"ts"===t?a.attributes.creationDate.localeCompare(e.attributes.creationDate):e.imageName.localeCompare(a.imageName))}componentDidUpdate(){this.props$.next(this.props)}componentWillUnmount(){this.destroy$.next()}render(){const{value:e,credentials:a,region:n,onChange:r}=this.props,{isLoadingPackageImages:l,isSearching:i,selectionMode:s,packageImages:o,searchResults:c,searchString:d}=this.state,m=!!o,u=e=>{const t=e.amis||{},r=t[n]&&t[n][0],l=r?`(${r})`:` - not found in ${a}/${n}`;return Mt.createElement(Mt.Fragment,null,Mt.createElement("span",null,e.imageName),Mt.createElement("span",null,l))},p={clearable:!1,required:!0,valueKey:"imageName",optionRenderer:u,valueRenderer:u,onSelectResetsInput:!1,onBlurResetsInput:!1,onCloseResetsInput:!1,value:e},g=this.state.errorMessage?Mt.createElement(ge,{message:this.state.errorMessage,type:"error"}):null,v=`No results found in ${a}/${n}`;if("searchAllImages"===s){const e=!d||d.length<3?"Please enter at least 3 characters":i?"Searching...":v;return Mt.createElement("div",{className:"col-md-9"},Mt.createElement(h,{...p,menuRenderer:this.buildImageMenu,isLoading:i,placeholder:"Search for an image...",filterOptions:!1,noResultsText:e,options:null!=c?c:[],onInputChange:e=>(this.searchInput$.next(e),e),onChange:r}),g,Mt.createElement("button",{type:"button",className:"link",onClick:()=>this.setState({selectionMode:"packageImages",searchString:"",searchResults:null})},"Back to Package Images")," ",Mt.createElement(t,{id:"aws.serverGroup.allImages"}))}return m?Mt.createElement("div",{className:"col-md-9"},Mt.createElement(h,{...p,menuRenderer:this.buildImageMenu,isLoading:l,placeholder:"Pick an image",noResultsText:v,options:o,onChange:r}),g,Mt.createElement("button",{type:"button",className:"link",onClick:()=>this.setState({selectionMode:"searchAllImages"})},"Search All Images")," ",Mt.createElement(t,{id:"aws.serverGroup.allImages"})):Mt.createElement("div",{className:"col-md-9"},Mt.createElement(h,{...p,isLoading:l,disabled:!0,options:[e].filter(e=>!!e)}),g,Mt.createElement("button",{type:"button",className:"link",onClick:()=>this.setState({selectionMode:"searchAllImages"})},"Search All Images")," ",Mt.createElement(t,{id:"aws.serverGroup.allImages"}))}}const mo=e=>e&&e.includes("${");class uo extends Mt.Component{constructor(t){super(t),this.imageChanged=t=>{var a,n;const{setFieldValue:r,values:l}=this.props.formik;this.setState({selectedImage:t});const i=t&&t.attributes.virtualizationType,s=t&&t.attributes.architecture,o=t&&t.imageName;if(l.virtualizationType=i,l.amiArchitecture=s,l.amiName=o,r("amiArchitecture",s),r("virtualizationType",i),r("amiName",o),l.imageChanged(l),t&&(null==(a=e.disabledImages)?void 0:a.length)&&(null==(n=hn.serverGroups)?void 0:n.enableIPv6)){e.disabledImages.some(e=>t.imageName.includes(e))&&r("associateIPv6Address",!1)}this.props.formik.validateForm()},this.accountUpdated=e=>{var t,a,n,r,l,i,s,o,c,d,m;const{setFieldValue:u,values:p}=this.props.formik;p.credentials=e,p.credentialsChanged(p),p.subnetChanged(p),u("credentials",e);const h=p.backingData.credentialsKeyedByAccount[e];if(u("associateIPv6Address",(null==(a=null==(t=hn)?void 0:t.serverGroups)?void 0:a.enableIPv6)&&(null==(r=null==(n=hn)?void 0:n.serverGroups)?void 0:r.setIPv6InTest)&&"test"===h.environment),null==(l=hn.serverGroups)?void 0:l.enableIMDSv2){const t=!(null==(o=null==(s=null==(i=hn)?void 0:i.serverGroups)?void 0:s.accountDenyListIMDSv2)?void 0:o.includes(e)),a=null==(c=hn.serverGroups)?void 0:c.defaultIMDSv2AppAgeLimit,n=null==(m=null==(d=this.props.app)?void 0:d.attributes)?void 0:m.createTs;u("requireIMDSv2",t&&a&&n&&Number(n)>a)}},this.regionUpdated=e=>{const{values:t,setFieldValue:a}=this.props.formik;t.region=e,t.regionChanged(t),a("region",e)},this.subnetUpdated=()=>{const{setFieldValue:e,values:t}=this.props.formik;t.subnetChanged(t),e("subnetType",t.subnetType)},this.clientRequestsChanged=()=>{const{values:e,setFieldValue:t}=this.props.formik;e.toggleSuspendedProcess(e,"AddToLoadBalancer"),t("suspendedProcesses",e.suspendedProcesses),this.setState({})},this.navigateToLatestServerGroup=()=>{const{values:e}=this.props.formik,{latestServerGroup:t}=this.state,a={provider:e.selectedProvider,accountId:t.account,region:t.region,serverGroup:t.name};this.props.stateService.is("home.applications.application.insight.clusters")?this.props.stateService.go(".serverGroup",a):this.props.stateService.go("^.serverGroup",a)},this.stackChanged=e=>{const{setFieldValue:t,values:a}=this.props.formik;a.stack=e,t("stack",e),a.clusterChanged(a)},this.handleReasonChanged=e=>{this.props.formik.setFieldValue("reason",e)},this.strategyChanged=(e,t)=>{e.onStrategyChange(e,t),this.props.formik.setFieldValue("strategy",t.key)},this.onStrategyFieldChange=(e,t)=>{this.props.formik.setFieldValue(e,t)};const{amiName:a,region:n,viewState:{imageId:r}}=t.formik.values,l=co.makeFakeImage(a,r,n);this.state={...this.getStateFromProps(t),selectedImage:l}}getStateFromProps(e){const{app:t}=e,{values:a}=e.formik,n=le.getClusterName(t.name,a.stack,a.freeFormDetails),r=!t.clusters.find(e=>e.name===n),l=t.serverGroups.data.filter(e=>e.cluster===n&&e.account===a.credentials&&e.region===a.region).sort((e,t)=>e.createdTime-t.createdTime),i=l.length?l.pop():null;return{namePreview:n,createsNewCluster:r,latestServerGroup:i}}validate(e){const t={};var a,n;return a=e.stack,mo(a)||/^([a-zA-Z_0-9._${}]*(\${.+})*)*$/.test(a)||(t.stack="Only dot(.) and underscore(_) special characters are allowed in the Stack field."),n=e.freeFormDetails,mo(n)||/^([a-zA-Z_0-9._${}-]*(\${.+})*)*$/.test(n)||(t.freeFormDetails="Only dot(.), underscore(_), and dash(-) special characters are allowed in the Detail field."),e.viewState.disableImageSelection||e.amiName||(t.amiName="Image required."),e.resourceSummary&&(t.resourceSummary={id:"Cluster is managed"}),t}componentWillReceiveProps(e){this.setState(this.getStateFromProps(e))}render(){const{app:e,formik:a}=this.props,{errors:n,values:r}=a,{createsNewCluster:l,latestServerGroup:i,namePreview:s}=this.state,o=r.backingData.accounts,c=r.viewState.readOnlyFields||{};return Mt.createElement("div",{className:"container-fluid form-horizontal"},r.regionIsDeprecated(r)&&Mt.createElement("div",{className:"form-group row"},Mt.createElement("div",{className:"col-md-12 error-message"},Mt.createElement("div",{className:"alert alert-danger"},"You are deploying into a deprecated region within the ",r.credentials," account!"))),Mt.createElement(ut,{app:e,formik:a}),Mt.createElement("div",{className:"form-group"},Mt.createElement("div",{className:"col-md-3 sm-label-right"},"Account"),Mt.createElement("div",{className:"col-md-7"},Mt.createElement(Te,{value:r.credentials,onChange:e=>this.accountUpdated(e.target.value),readOnly:c.credentials,accounts:o,provider:"aws"}))),Mt.createElement(Ie,{readOnly:c.region,labelColumns:3,component:r,field:"region",account:r.credentials,regions:r.backingData.filtered.regions,onChange:this.regionUpdated}),Mt.createElement(el,{readOnly:c.subnet,labelColumns:3,helpKey:"aws.serverGroup.subnet",component:r,field:"subnetType",region:r.region,application:e,subnets:r.backingData.filtered.subnetPurposes,onChange:this.subnetUpdated,showSubnetWarning:!0}),Mt.createElement("div",{className:"form-group"},Mt.createElement("div",{className:"col-md-3 sm-label-right"},"Stack ",Mt.createElement(t,{id:"aws.serverGroup.stack"})),Mt.createElement("div",{className:"col-md-7"},Mt.createElement("input",{type:"text",className:"form-control input-sm no-spel",value:r.stack,onChange:e=>this.stackChanged(e.target.value)}))),n.stack&&Mt.createElement("div",{className:"form-group row slide-in"},Mt.createElement("div",{className:"col-sm-9 col-sm-offset-2 error-message"},Mt.createElement("span",null,n.stack))),Mt.createElement(pt,{app:e,formik:a}),r.viewState.imageSourceText&&Mt.createElement("div",{className:"form-group"},Mt.createElement("div",{className:"col-md-3 sm-label-right"},"Image Source"),Mt.createElement("div",{className:"col-md-7",style:{marginTop:"5px"}},Mt.createElement(ke,{tag:"span",message:r.viewState.imageSourceText}))),!r.viewState.disableImageSelection&&Mt.createElement("div",{className:"form-group"},Mt.createElement("div",{className:"col-md-3 sm-label-right"},"Image ",Mt.createElement(t,{id:"aws.serverGroup.imageName"})),mo(r.amiName)?Mt.createElement(en,{name:"amiName"}):Mt.createElement(co,{onChange:e=>this.imageChanged(e),value:this.state.selectedImage,application:e,credentials:r.credentials,region:r.region})),Mt.createElement("div",{className:"form-group"},Mt.createElement("div",{className:"col-md-3 sm-label-right"},"Traffic ",Mt.createElement(t,{id:"aws.serverGroup.traffic"})),Mt.createElement("div",{className:"col-md-9 checkbox"},Mt.createElement("label",null,Mt.createElement("input",{type:"checkbox",onChange:this.clientRequestsChanged,checked:!r.processIsSuspended(r,"AddToLoadBalancer"),disabled:""!==r.strategy&&"custom"!==r.strategy}),"Send client requests to new instances"))),!r.viewState.disableStrategySelection&&r.selectedProvider&&Mt.createElement(Ze,{command:r,onFieldChange:this.onStrategyFieldChange,onStrategyChange:this.strategyChanged}),!r.viewState.hideClusterNamePreview&&Mt.createElement(ht,{createsNewCluster:l,latestServerGroupName:null==i?void 0:i.name,mode:r.viewState.mode,namePreview:s,navigateToLatestServerGroup:this.navigateToLatestServerGroup}),Mt.createElement(gt,{reason:r.reason,onChange:this.handleReasonChanged}))}}const po=N(uo);class ho extends Mt.Component{constructor(){super(...arguments),this.preferSourceCapacityOptions=[{label:"fail the stage",value:!1},{label:"use fallback values",value:!0}],this.useSourceCapacityUpdated=e=>{const t="true"===e.target.value,{command:a}=this.props;this.props.setFieldValue("useSourceCapacity",t),t||(delete a.preferSourceCapacity,this.props.setFieldValue("preferSourceCapacity",void 0)),this.setState({})},this.simpleInstancesChanged=e=>{this.setMinMax(e)},this.preferSourceCapacityChanged=e=>{this.props.setFieldValue("preferSourceCapacity",!(!e||!e.value)||void 0),this.setState({})},this.capacityFieldChanged=(e,t)=>{const{command:a,setFieldValue:n}=this.props;a.capacity={...a.capacity},a.capacity[e]=t,n("capacity",a.capacity)}}setSimpleCapacity(e){const{command:t}=this.props,a={...t.viewState,useSimpleCapacity:e};this.props.setFieldValue("useSourceCapacity",!1),this.props.setFieldValue("viewState",a),this.setMinMax(t.capacity.desired),this.setState({})}setMinMax(e){const{command:t}=this.props;t.viewState.useSimpleCapacity&&(t.capacity={min:e,max:e,desired:e},this.props.setFieldValue("useSourceCapacity",!1),this.props.setFieldValue("capacity",t.capacity)),this.setState({})}render(){const{command:e,MinMaxDesired:a}=this.props,n=e.viewState.readOnlyFields||{};return!e.viewState.useSimpleCapacity||e.useSourceCapacity?Mt.createElement("div",null,Mt.createElement("div",{className:"form-group"},Mt.createElement("div",{className:"col-md-12"},Mt.createElement("p",null,"Sets up auto-scaling constraints for this server group."),Mt.createElement("p",null,"To set min, max, and desired instance counts to the same value use the"," ",Mt.createElement("a",{className:"clickable",onClick:()=>this.setSimpleCapacity(!0)},"Simple Mode"),"."))),!n.useSourceCapacity&&"editPipeline"===e.viewState.mode&&Mt.createElement("div",{className:"form-group"},Mt.createElement("div",{className:"col-md-3 sm-label-right"},"Capacity"),Mt.createElement("div",{className:"col-md-9 radio"},Mt.createElement("label",null,Mt.createElement("input",{type:"radio",checked:e.useSourceCapacity,value:"true",id:"useSourceCapacityTrue",onChange:this.useSourceCapacityUpdated}),"Copy the capacity from the current server group",Mt.createElement(t,{id:"serverGroupCapacity.useSourceCapacityTrue"}))),e.useSourceCapacity&&Mt.createElement("div",{className:"col-md-9 col-md-offset-3 radio",style:{paddingLeft:"35px"}},Mt.createElement("div",null,"If no current server group is found,",Mt.createElement(_a,{clearable:!1,value:!!e.preferSourceCapacity,options:this.preferSourceCapacityOptions,onChange:this.preferSourceCapacityChanged})),e.preferSourceCapacity&&Mt.createElement("div",null,Mt.createElement("b",null,"Fallback values"),Mt.createElement(a,{command:e,fieldChanged:this.capacityFieldChanged}))),Mt.createElement("div",{className:"col-md-9 col-md-offset-3 radio"},Mt.createElement("label",null,Mt.createElement("input",{type:"radio",checked:!e.useSourceCapacity,value:"false",id:"useSourceCapacityFalse",onChange:this.useSourceCapacityUpdated}),"Let me specify the capacity",Mt.createElement(t,{id:"serverGroupCapacity.useSourceCapacityFalse"})))),(!e.useSourceCapacity||"editPipeline"!==e.viewState.mode)&&Mt.createElement("div",null,Mt.createElement("div",{className:"col-md-9 col-md-offset-3"},Mt.createElement(a,{command:e,fieldChanged:this.capacityFieldChanged})))):Mt.createElement("div",null,Mt.createElement("div",{className:"form-group"},Mt.createElement("div",{className:"col-md-12"},Mt.createElement("p",null,"Sets the min, max, and desired instance counts to the same value."),Mt.createElement("p",null," ","To set capacity for auto-scaling, use the"," ",Mt.createElement("a",{className:"clickable",onClick:()=>this.setSimpleCapacity(!1)},"Advanced Mode"),"."))),Mt.createElement("div",{className:"form-group"},Mt.createElement("div",{className:"col-md-3 sm-label-right"},"Number of Instances"),Mt.createElement("div",{className:"col-md-8"},Mt.createElement(be,{value:e.capacity.desired,min:0,onChange:this.simpleInstancesChanged}))))}}class go extends Mt.Component{render(){const{command:{capacity:{min:e,max:t,desired:a}},fieldChanged:n}=this.props;return Mt.createElement("div",null,Mt.createElement("div",{className:"form-group"},Mt.createElement("div",{className:"col-md-2"},"Min"),Mt.createElement("div",{className:"col-md-8"},Mt.createElement(be,{value:e,min:0,max:"number"==typeof t?t:void 0,onChange:e=>n("min",e),required:!0}))),Mt.createElement("div",{className:"form-group"},Mt.createElement("div",{className:"col-md-2"},"Max"),Mt.createElement("div",{className:"col-md-8"},Mt.createElement(be,{value:t,min:"number"==typeof e?e:void 0,onChange:e=>n("max",e),required:!0}))),Mt.createElement("div",{className:"form-group"},Mt.createElement("div",{className:"col-md-2"},"Desired"),Mt.createElement("div",{className:"col-md-8"},Mt.createElement(be,{value:a,min:"number"==typeof e?e:void 0,max:"number"==typeof t?t:void 0,onChange:e=>n("desired",e),required:!0}))))}}class vo extends Mt.Component{validate(e){const t={};(vt(e.capacity.min)<0||vt(e.capacity.max)<0||vt(e.capacity.desired)<0)&&(t.capacity="Capacity min, max, and desired all have to be non-negative values.");const a=e;return void 0!==a.targetHealthyDeployPercentage&&null!==a.targetHealthyDeployPercentage||(t.targetHealthyDeployPercentage="Target Healthy Deploy Percentage required."),t}render(){const{setFieldValue:e,values:t}=this.props.formik;return Mt.createElement("div",{className:"container-fluid form-horizontal"},Mt.createElement("div",{className:"row"},Mt.createElement("div",{className:"col-md-12"},Mt.createElement(ho,{command:t,setFieldValue:e,MinMaxDesired:go}))),Mt.createElement("div",{className:"row"},Mt.createElement("div",{className:"col-md-12"},Mt.createElement("div",{className:"form-group form-inline",style:{marginTop:"20px"}},Mt.createElement("div",{className:"col-md-12"},"Consider deployment successful when"," ",Mt.createElement(en,{type:"number",name:"targetHealthyDeployPercentage",min:"0",max:"100",className:"form-control input-sm inline-number",required:!0})," ","percent of instances are healthy.")))))}}function fo(e){return Mt.createElement("div",null,Mt.createElement("h4",{style:{marginTop:"10px"}},"This application is"),e.instanceProfileList.map(t=>Mt.createElement("div",{key:t.type,className:"instance-profile-header profile-button"},Mt.createElement("button",{type:"button",onClick:()=>e.handleProfileChange(t.type),className:e.currentProfile===t.type?"instance-profile active":"instance-profile"},e.currentProfile===t.type&&Mt.createElement("span",{className:"far fa-check-circle selected-indicator"}),Mt.createElement("div",{className:"panel-heading"},Mt.createElement("h4",null,Mt.createElement("span",{className:`glyphicon glyphicon-${t.icon}`}),Mt.createElement("div",null,t.label)))))))}function Eo(e){const{selectedInstanceTypes:t,currentProfile:a}=e,n=tr.awsInstanceTypeService.isBurstingSupportedForAllTypes(t),r=!!tr.awsInstanceTypeService.getInstanceTypesInCategory(t,a).length,[l,i]=Rt(!1);return Lt(()=>{t&&t.length&&(n||e.setUnlimitedCpuCredits(void 0),i(n)),a&&i(t&&t.length>0&&n&&r)},[a,t]),Mt.createElement("div",{className:"row",style:{fontSize:"110%"}},l&&Mt.createElement("div",null,Mt.createElement(ft,{toggleSize:Et.XSMALL,propLabel:"Unlimited CPU credits ",propHelpFieldId:"aws.serverGroup.unlimitedCpuCredits",tooltipPropOffBtn:"Toggle to turn OFF unlimited CPU credits",displayTextPropOffBtn:"Off",tooltipPropOnBtn:"Toggle to turn ON unlimited CPU credits",displayTextPropOnBtn:"On",onClick:t=>e.setUnlimitedCpuCredits(t),isPropertyActive:e.unlimitedCpuCredits})))}function yo(e){var t,a,n,r,l,i,s,o,c,d,m,u,p,h,g,v,f,E,y,b,C,N,w,S,k;const T=(null==(a=null==(t=e.instanceType)?void 0:t.supportedUsageClasses)?void 0:a.includes("spot"))?"| SPOT supported":"",I=`${null==(n=e.instanceType)?void 0:n.defaultVCpus} vCPU | ${null==(r=e.instanceType)?void 0:r.memoryInGiB} Gib Memory ${T}`,P=(null==(l=e.instanceType)?void 0:l.instanceStorageSupported)&&Mt.createElement("span",null,Mt.createElement("br",null),Mt.createElement("span",{className:"select-option-label-attributes"},`Instance Storage: ${Ot.toUpper(null==(s=null==(i=e.instanceType)?void 0:i.instanceStorageInfo)?void 0:s.storageTypes)} | ${null==(c=null==(o=e.instanceType)?void 0:o.instanceStorageInfo)?void 0:c.totalSizeInGB} Gib total size`)),A=(null==(d=e.instanceType)?void 0:d.ebsInfo)&&Mt.createElement("span",null,Mt.createElement("br",null),Mt.createElement("span",{className:"select-option-label-attributes"},`EBS: optimization ${null==(u=null==(m=e.instanceType)?void 0:m.ebsInfo)?void 0:u.ebsOptimizedSupport} | NVMe ${null==(h=null==(p=e.instanceType)?void 0:p.ebsInfo)?void 0:h.nvmeSupport} | Encryption ${null==(v=null==(g=e.instanceType)?void 0:g.ebsInfo)?void 0:v.encryptionSupport}`)),G=(null==(f=e.instanceType)?void 0:f.gpuInfo)&&Mt.createElement("span",null,Mt.createElement("br",null),Mt.createElement("span",{className:"select-option-label-attributes"},`GPU: ${null==(y=null==(E=e.instanceType)?void 0:E.gpuInfo)?void 0:y.totalGpuMemoryInMiB} MiB total memory`,null==(C=null==(b=e.instanceType)?void 0:b.gpuInfo)?void 0:C.gpus.map(e=>` | ${e.count} ${e.manufacturer} ${e.name} GPUs, size: ${e.gpuSizeInMiB} MiB`))),x=void 0!==(null==(N=e.instanceType)?void 0:N.currentGeneration)&&null!==(null==(w=e.instanceType)?void 0:w.currentGeneration)&&Mt.createElement("span",null,Mt.createElement("br",null),Mt.createElement("span",{className:"select-option-label-attributes"},(null==(S=e.instanceType)?void 0:S.currentGeneration)?"Current Generation":"Previous Generation"));return Mt.createElement("span",null,Mt.createElement("span",{className:"select-option-label"},null==(k=e.instanceType)?void 0:k.name),Mt.createElement("br",null),Mt.createElement("span",{className:"select-option-label-attributes"},I),P,A,G,x)}Cr(".advanced-mode-selector .instance-profile-header {\n display: inline-block;\n}\n.advanced-mode-selector .instance-profile-header button {\n width: 100%;\n}\n.advanced-mode-selector .instance-profile-header h4 {\n min-height: 52px;\n}\n.advanced-mode-selector .instance-profile-header .panel-heading {\n padding: 0 0 0 0;\n}\n.advanced-mode-selector .instance-profile-header.profile-button {\n width: calc(25% - 20px);\n margin: 0 10px 15px 10px;\n}\n.advanced-mode-selector .sub-section {\n padding: 0 15px;\n margin-bottom: 5px;\n}\n.advanced-mode-selector .sub-section .description {\n padding: 0 10px;\n}\n.advanced-mode-selector .sub-section tr.unavailable {\n opacity: 0.5;\n}\n.advanced-mode-selector .sub-section tr.sortable .instance-type-drag-handle {\n display: inline-block;\n opacity: 0.9;\n font-size: 100%;\n padding-top: 8px;\n}\n.advanced-mode-selector .sub-section th {\n font-size: 110%;\n}\n.custom-profile .select {\n width: 97%;\n display: inline-flex;\n}\n.custom-profile .select-option-label {\n font-size: 100%;\n font-weight: bold;\n}\n.custom-profile .select-option-label-attributes {\n font-size: 90%;\n font-weight: normal;\n font-style: italic;\n}\n.instance-profile {\n vertical-align: top;\n text-align: left;\n min-height: 100px;\n font-size: 90%;\n border: 1px solid var(--color-silver);\n border-radius: 3px;\n color: var(--color-mineshaft);\n background-color: transparent;\n}\n.instance-profile:hover,\n.instance-profile:focus {\n color: var(--color-mineshaft);\n text-decoration: none;\n}\n.instance-profile .selected-indicator {\n display: flex;\n width: 100%;\n text-align: right;\n padding-right: 5px;\n font-size: 150%;\n color: var(--color-accent);\n}\n.instance-profile .selected-indicator.custom {\n margin-top: 5px;\n}\n.instance-profile h4 {\n margin-top: 0;\n text-align: center;\n word-spacing: 300px;\n}\n.instance-profile ul {\n font-size: 95%;\n padding-left: 20px;\n}\n.instance-profile .panel-heading {\n padding-top: 0;\n padding-bottom: 0;\n}\n.instance-profile:hover,\n.instance-profile:focus,\n.instance-profile.active {\n outline: 0;\n}\n.instance-profile.active {\n box-shadow: inset 0 0 3px 2px var(--color-accent);\n border-color: var(--color-accent);\n}\n.instance-profile:hover,\n.instance-profile:focus {\n box-shadow: 0 0 8px 2px var(--color-accent);\n}\n");const bo=({min:e,max:t})=>{const a=Mt.createElement(Mt.Fragment,null,Mt.createElement("span",{className:"cost"},"$".repeat(e)),"$".repeat(4-e)),n=Mt.createElement(Mt.Fragment,null,Mt.createElement("span",{className:"cost"},"$".repeat(Math.min(4,t))),"$".repeat(4-Math.min(4,t)));return Mt.createElement("span",{className:"cost-factor"},a,t?` - ${n}`:"")};function Co(e){var t,a;const n=!!e.selectedType,[r,i]=Rt(""),s=n?e.selectedType.instanceType:e.instanceTypeDetails.name,o=!n&&e.instanceTypeDetails.unavailable,c=(t,a)=>{o||e.addOrUpdateInstanceType(t,a),i("")},d=e=>{i(e.target.value),n?c(s,e.target.value):document.getElementById(`selectInstanceType-${s}`).focus()};let m;if(e.isCustom){const a=Mt.createElement(yo,{instanceType:e.selectedTypeInfo});m=Mt.createElement("tr",{key:s,className:"sortable clickable"},Mt.createElement("td",null,Mt.createElement(No,null)),Mt.createElement("td",null,`${s} `,Mt.createElement(re,{placement:"right",template:a,className:"custom-profile"},Mt.createElement("span",{className:"clickable help-field"},Mt.createElement("i",{className:"small glyphicon glyphicon-info-sign"})))),Mt.createElement("td",{title:"Enter optional weight (allowed values: 1 to 999)."},Mt.createElement(l,{className:"form-control input input-sm",pattern:"[0-9]*",placeholder:"Enter optional weight (allowed values: 1 to 999).",value:(null==(t=e.selectedType)?void 0:t.weightedCapacity)||"",onChange:e=>c(s,e.target.value)})),Mt.createElement("td",null,Mt.createElement("div",null,Mt.createElement("span",null,Mt.createElement("a",{className:"btn btn-sm btn-link clickable",onClick:()=>e.removeInstanceType(s),style:{padding:"5px"}},Mt.createElement(O,{value:"Remove instance type"},Mt.createElement("span",{className:"glyphicon glyphicon-trash"})))))))}else{const{cpu:t,memory:i,cpuCreditsPerHour:u,storage:p,costFactor:h}=e.instanceTypeDetails;m=Mt.createElement("tr",{key:s,className:n?"sortable clickable":"non-sortable "+(o?"unavailable":"clickable"),title:n?"Click to unselect instance type":o?"This instance type is not available for the selected configuration":"Click to select instance type",onClick:t=>{$(t.target).is("input")||(n?e.removeInstanceType(s):c(s,r))}},n?Mt.createElement("td",null,Mt.createElement(No,null)):Mt.createElement("td",null),Mt.createElement("td",null,Mt.createElement(qa,{id:`selectInstanceType-${s}`,checked:!!n,disabled:o,onChange:()=>{n?e.removeInstanceType(s):c(s,r)}})),Mt.createElement("td",null,s),Mt.createElement("td",null,t),Mt.createElement("td",null,i),u?Mt.createElement("td",null,u):Mt.createElement("td",{title:"Cpu credits not applicable to instance type."},"-"),"EBS"===p.type&&Mt.createElement("td",null,"EBS Only"),"SSD"===p.type&&Mt.createElement("td",null,p.count+"x"+p.size),Mt.createElement("td",null,Mt.createElement(bo,{min:h})),Mt.createElement("td",{title:o?"":"Enter optional weight (allowed values: 1 to 999)."},Mt.createElement(l,{inputClassName:"form-control input input-sm",id:`weightedCapacity-${s}`,pattern:"[0-9]*",placeholder:"Enter optional weight (allowed values: 1 to 999).",disabled:o,value:(null==(a=e.selectedType)?void 0:a.weightedCapacity)||r||"",onChange:d})))}return m}const No=Ka(()=>Mt.createElement(O,{value:"Drag to change priority"},Mt.createElement("span",{className:"instance-type-drag-handle glyphicon glyphicon-resize-vertical"})));function wo(e){return Mt.createElement(So,{isCustom:e.isCustom,selectedInstanceTypesMap:e.selectedInstanceTypesMap,selectedInstanceTypesInfo:e.selectedInstanceTypesInfo,removeInstanceType:e.removeInstanceType,addOrUpdateInstanceType:e.addOrUpdateInstanceType,instanceTypeDetails:e.isCustom?null:new Map(Object.entries(ya(Wt(e.profileFamiliesDetails.map(e=>e.instanceTypes)),"name"))),onSortEnd:t=>e.handleSortEnd(t),distance:1})}const So=Ja(e=>{const{isCustom:t,selectedInstanceTypesMap:a}=e;let n,r;if(t)n=a.size>0&&Array.from(a.values()).sort((e,t)=>e.priority-t.priority).map((t,a)=>Mt.createElement(ko,{key:`${t.instanceType}-${a}`,index:a,isCustom:!0,selectedType:t,selectedTypeInfo:e.selectedInstanceTypesInfo.find(e=>e.name===t.instanceType),removeInstanceType:e.removeInstanceType,addOrUpdateInstanceType:e.addOrUpdateInstanceType}));else{const{instanceTypeDetails:t}=e,l=Array.from(null==t?void 0:t.keys()),i=na(l,Array.from(a.keys())),s=Array.from(a.values()).filter(e=>l.includes(e.instanceType)).sort((e,t)=>e.priority-t.priority);n=s&&s.length>0&&s.map((a,n)=>Mt.createElement(ko,{key:`${a.instanceType}-${n}`,index:n,isCustom:!1,selectedType:a,instanceTypeDetails:t,removeInstanceType:e.removeInstanceType,addOrUpdateInstanceType:e.addOrUpdateInstanceType})),r=i&&i.length>0&&i.map(a=>Mt.createElement(Co,{key:a,isCustom:!1,instanceTypeDetails:t.get(a),addOrUpdateInstanceType:e.addOrUpdateInstanceType}))}return Mt.createElement("tbody",null,n,t?null:r)}),ko=Xa(e=>Mt.createElement(Co,{key:e.selectedType.instanceType,isCustom:e.isCustom,selectedType:e.selectedType,selectedTypeInfo:e.selectedTypeInfo,instanceTypeDetails:e.isCustom?null:e.instanceTypeDetails.get(e.selectedType.instanceType),removeInstanceType:e.removeInstanceType,addOrUpdateInstanceType:e.addOrUpdateInstanceType}));function To(e){return Mt.createElement("div",{className:"custom-profile"},Mt.createElement(_a,{className:"select",clearable:!1,multi:!1,placeholder:"Filter like 16vcpu, 32gib, spot, oldGen or Select an instance type to add",removeSelected:!0,searchable:!0,options:e.availableInstanceTypesList,optionRenderer:e=>Mt.createElement(yo,{instanceType:e}),filterOption:(e,t)=>{const{name:a,defaultVCpus:n,memoryInGiB:r,instanceStorageInfo:l,ebsInfo:i,gpuInfo:s,supportedUsageClasses:o,currentGeneration:c}=e;return t.split(",").every(e=>{const t=Ot.toLower(e.trim());return t.match(/\d+\s*vcpu/)&&n>=Ot.toNumber(t.split("vcpu")[0].trim())||t.match(/\d+\s*gib/)&&r>=Ot.toNumber(t.split("gib")[0].trim())||t.match(/\b(ssd|hdd)\b/)&&(null==l?void 0:l.storageTypes.includes(t))||"spot"===t&&(null==o?void 0:o.includes(t))||"ebs"===t&&i||"gpu"===t&&s||"currentgen"===t&&c||"oldgen"===t&&!c||a.match(t)})},valueRenderer:e=>Mt.createElement(Mt.Fragment,null,e.name),onChange:t=>e.addOrUpdateInstanceType(t.name,void 0)})," ",Mt.createElement(t,{id:"aws.serverGroup.instanceTypesSelect"}))}function Io(e){let t;return t=e.isCustom?Mt.createElement("p",null,"Choose the instance types that best suit the needs of your application."):Mt.createElement(Mt.Fragment,null,Mt.createElement("p",null,Mt.createElement("b",null,e.profileLabel)),Mt.createElement("ul",null,e.profileDescriptionArr.map((e,t)=>Mt.createElement("li",{key:t},e)))),Mt.createElement("div",{className:"row sub-section"},Mt.createElement("h4",null,"Instance Types"),Mt.createElement("div",{className:"description"},t,Mt.createElement("p",null,"Learn about AWS recommended best practices in"," ",Mt.createElement("a",{target:"_blank",href:"https://spinnaker.io/docs/setup/other_config/server-group-launch-settings/aws-ec2/launch-templates/#create-a-server-group-with-aws-recommended-best-practices-for-ec2-spot"},"examples and docs"),"."),Mt.createElement("i",null,Mt.createElement("b",null,"Note:"),Mt.createElement("ul",null,Mt.createElement("li",null,"The order of instance types sets their priority when On-Demand capacity is launched; instance type at the top is prioritized the highest."),Mt.createElement("li",null,"Some instance types might not be available for the selected configuration.")))))}function Po(e){let a,n,r,l;return e.isCustom?(a=Mt.createElement("th",null),n=Mt.createElement("th",null,"Instance Type ",Mt.createElement(t,{id:"aws.serverGroup.instanceTypes"})),r=null,l=Mt.createElement("th",null)):(a=Mt.createElement(Mt.Fragment,null,Mt.createElement("th",null),Mt.createElement("th",null)),n=Mt.createElement("th",null,"InstanceType"),r=Mt.createElement(Mt.Fragment,null,Mt.createElement("th",null,"vCPU"),Mt.createElement("th",null,"Mem (GiB)"),e.showCpuCredits&&Mt.createElement("th",null,"CPU Credits"),Mt.createElement("th",null,"Storage (GB)",Mt.createElement(t,{id:"aws.serverGroup.storageType"})),Mt.createElement("th",null,"Cost")),l=null),Mt.createElement("thead",null,Mt.createElement("tr",null,a,n,r,Mt.createElement("th",null,"Weight ",Mt.createElement(t,{id:"aws.serverGroup.instanceTypeWeight"})),l))}function Ao(e){return e.isCustom?Mt.createElement("tfoot",null,Mt.createElement("tr",null,Mt.createElement("td",null,Mt.createElement("span",{className:"glyphicon glyphicon-plus-sign",style:{paddingTop:"8px"}})),Mt.createElement("td",{colSpan:2},Mt.createElement(To,{availableInstanceTypesList:e.availableInstanceTypesList,addOrUpdateInstanceType:e.addOrUpdateInstanceType})),Mt.createElement("td",null))):null}function Go(e){return e.dirty.instanceType||e.dirty.launchTemplateOverridesForInstanceType&&e.dirty.launchTemplateOverridesForInstanceType.length>0?Mt.createElement("div",{className:"col-md-12"},Mt.createElement("div",{className:"alert alert-warning"},Mt.createElement("p",null,Mt.createElement("i",{className:"fa fa-exclamation-triangle"}),e.dirty.instanceType&&"The following instance type was found incompatible with the selected image/region and was removed:",e.dirty.launchTemplateOverridesForInstanceType&&e.dirty.launchTemplateOverridesForInstanceType.length>0&&"The following instance type(s) were found incompatible with the selected image/region and were removed:"),Mt.createElement("ul",null,e.dirty.instanceType&&Mt.createElement("li",{key:e.dirty.instanceType},e.dirty.instanceType),e.dirty.launchTemplateOverridesForInstanceType&&e.dirty.launchTemplateOverridesForInstanceType.length>0&&e.dirty.launchTemplateOverridesForInstanceType.map(e=>Mt.createElement("li",{key:e.instanceType},e.instanceType,e.weightedCapacity?" with weight "+e.weightedCapacity:""))),Mt.createElement("p",{className:"text-right"},Mt.createElement("a",{className:"btn btn-sm btn-default dirty-flag-dismiss clickable",onClick:()=>e.clearWarnings()},"Okay")))):null}function xo(e){var t;const{currentProfile:a,selectedInstanceTypesMap:n}=e,r=e=>{const t=Array.from(n.values()).sort((e,t)=>e.priority-t.priority).map(e=>e.instanceType),a=Ya(t,e.oldIndex,e.newIndex);l(a)},l=t=>{n.forEach((e,a)=>{const n=1+t.indexOf(a);e.priority!==n&&(e.priority=n)}),e.handleInstanceTypesChange(Array.from(n.values()))},i=t=>{const a=new Map(n);a.delete(t),e.handleInstanceTypesChange(Array.from(a.values()))},s=(t,a)=>{const r=Number(a),l=isNaN(r)||0===r?void 0:r.toString(),i=n.has(t)?{...n.get(t),weightedCapacity:l}:{instanceType:t,weightedCapacity:l,priority:1+Array.from(n.values()).reduce((e,t)=>t.priority>e?t.priority:e,0)};n.set(t,i),e.handleInstanceTypesChange(Array.from(n.values()))},o=null==(t=hn.serverGroups)?void 0:t.enableCpuCredits,c=Array.from(n.keys()),d=Mt.createElement("div",null,Mt.createElement(Eo,{unlimitedCpuCredits:e.unlimitedCpuCreditsInCmd,currentProfile:a,selectedInstanceTypes:c,setUnlimitedCpuCredits:e.setUnlimitedCpuCredits}));if(a&&"custom"!==a){const{label:t,descriptionListOverride:a,families:l,showCpuCredits:c}=e.profileDetails,m=!1;return Mt.createElement("div",{className:"row sub-section"},Mt.createElement(Io,{isCustom:m,profileLabel:t,profileDescriptionArr:a||l.map(e=>e.description)}),Mt.createElement(Go,{dirty:e.viewState.dirty,clearWarnings:e.clearWarnings}),o&&d,Mt.createElement("table",{className:"table table-hover"},Mt.createElement(Po,{isCustom:m,showCpuCredits:c}),Mt.createElement(wo,{isCustom:m,profileFamiliesDetails:l,selectedInstanceTypesMap:n,addOrUpdateInstanceType:s,removeInstanceType:i,handleSortEnd:r})))}{const t=!0;return Mt.createElement("div",{className:"row sub-section"},Mt.createElement(Io,{isCustom:t}),Mt.createElement(Go,{dirty:e.viewState.dirty,clearWarnings:e.clearWarnings}),o&&d,Mt.createElement("table",{className:"table table-hover"},Mt.createElement(Po,{isCustom:t}),Mt.createElement(wo,{isCustom:t,selectedInstanceTypesMap:n,selectedInstanceTypesInfo:e.availableInstanceTypesList.filter(e=>c.includes(e.name)),addOrUpdateInstanceType:s,removeInstanceType:i,handleSortEnd:r}),Mt.createElement(Ao,{isCustom:t,availableInstanceTypesList:e.availableInstanceTypesList.filter(e=>!c.includes(e.name)),addOrUpdateInstanceType:s})))}}function Do(e,t,a){const n=ta(e.values,t);Mt.useEffect(()=>{void 0===n&&void 0!==a&&e.setFieldValue(t,a)},[t,a,n])}function Bo(e){const{values:a,setFieldValue:n}=e.formik,i=[{label:"capacity-optimized (recommended)",value:"capacity-optimized"},{label:"capacity-optimized-prioritized",value:"capacity-optimized-prioritized"},{label:"lowest-price",value:"lowest-price"}];return Mt.useEffect(()=>{"lowest-price"!==a.spotAllocationStrategy?n("spotInstancePools",void 0):void 0===a.spotInstancePools&&n("spotInstancePools",2)},[a.spotAllocationStrategy]),Do(e.formik,"spotAllocationStrategy","capacity-optimized"),Do(e.formik,"onDemandAllocationStrategy","prioritized"),Do(e.formik,"onDemandBaseCapacity",0),Do(e.formik,"onDemandPercentageAboveBaseCapacity",100),Mt.createElement("div",{className:"InstancesDistribution row sub-section form-group"},Mt.createElement("h4",null,"Instances Distribution"),Mt.createElement("div",{className:"description"},"Diversify and distribute instance types across purchase options."," ",Mt.createElement(t,{id:"aws.serverGroup.instancesDistribution"})),Mt.createElement("br",null),Mt.createElement(r,{label:"Spot Allocation Strategy",name:"spotAllocationStrategy",help:Mt.createElement(t,{id:"aws.serverGroup.spotAllocationStrategy"}),input:e=>Mt.createElement(s,{...e,mode:"PLAIN",options:i})}),"lowest-price"===e.formik.values.spotAllocationStrategy&&Mt.createElement(r,{label:"Spot Instance Pools Count",name:"spotInstancePools",help:Mt.createElement(t,{id:"aws.serverGroup.spotInstancePoolCount"}),input:e=>Mt.createElement(d,{...e})}),Mt.createElement(r,{label:"On-Demand Allocation Strategy",name:"onDemandAllocationStrategy",help:Mt.createElement(t,{id:"aws.serverGroup.odAllocationStrategy"}),input:e=>Mt.createElement(l,{...e,disabled:!0})}),Mt.createElement(r,{label:"On-Demand Base Capacity",name:"onDemandBaseCapacity",help:Mt.createElement(t,{id:"aws.serverGroup.odBase"}),input:e=>Mt.createElement(d,{...e})}),Mt.createElement(r,{label:"On-Demand Percentage Above Base Capacity",name:"onDemandPercentageAboveBaseCapacity",help:Mt.createElement(t,{id:"aws.serverGroup.odPercentAboveBase"}),input:e=>Mt.createElement(d,{...e})}),Mt.createElement(r,{label:"Spot Max Price",name:"spotPrice",help:Mt.createElement(t,{id:"aws.serverGroup.spotMaxPrice"}),input:e=>Mt.createElement(O,{value:"Recommended to leave empty and use AWS default i.e. On-Demand price"},Mt.createElement(l,{...e,placeholder:"Recommended to leave empty and use AWS default i.e. On-Demand price"}))}))}function Fo(e){const{instanceTypeDetails:t,setUnlimitedCpuCredits:a}=e,{values:n,setFieldValue:r}=e.formik,{instanceType:l,launchTemplateOverridesForInstanceType:i}=n;Lt(()=>{!i&&l&&e.formik.setFieldValue("launchTemplateOverridesForInstanceType",[{instanceType:n.instanceType,priority:1}])});const s=n.launchTemplateOverridesForInstanceType?n.launchTemplateOverridesForInstanceType:void 0,o=new Map(Object.entries(ya(s,"instanceType"))),[c,d]=Rt(n.viewState.instanceProfile||"custom"),m=yt(c);return t&&t.length>0?Mt.createElement("div",{className:"advanced-mode-selector"},Mt.createElement(fo,{currentProfile:c,handleProfileChange:e=>{d(e),r("viewState",{...n.viewState,instanceProfile:e});const t=m&&e&&m!==e,a="custom"!==e&&s&&s.length;if(t&&a){const t=tr.awsInstanceTypeService.getInstanceTypesInCategory(s.map(e=>e.instanceType),e),a=s.filter(e=>t.includes(e.instanceType));r("launchTemplateOverridesForInstanceType",a),n.launchTemplateOverridesChanged(n)}},instanceProfileList:t}),Mt.createElement(Bo,{formik:e.formik}),Mt.createElement(xo,{currentProfile:c,selectedInstanceTypesMap:o,unlimitedCpuCreditsInCmd:n.unlimitedCpuCredits,profileDetails:t.find(e=>e.type===c),availableInstanceTypesList:n.backingData&&n.backingData.filtered&&n.backingData.filtered.instanceTypesInfo||[],handleInstanceTypesChange:e=>{r("launchTemplateOverridesForInstanceType",e),n.launchTemplateOverridesChanged(n)},setUnlimitedCpuCredits:a,viewState:n.viewState,clearWarnings:e.clearWarnings})):null}function zo(e){var t,a;const{command:n}=e,[r,l]=Mt.useState(n.viewState.instanceProfile),i=null==(t=hn.serverGroups)?void 0:t.enableLaunchTemplates,s=null==(a=hn.serverGroups)?void 0:a.enableCpuCredits;Mt.useEffect(()=>{l(n.viewState.instanceProfile)},[n.viewState.instanceProfile]);const o=t=>{n.instanceType=t,n.instanceTypeChanged(n),e.setFieldValue("instanceType",t)},c={...n,viewState:{...n.viewState,instanceProfile:r}};return Mt.createElement("div",{className:"container-fluid form-horizontal"},Mt.createElement("div",{className:"row"},Mt.createElement(bt,{command:n,onTypeChanged:o,onProfileChanged:t=>{l(t),e.setFieldValue("viewState",{...n.viewState,instanceProfile:t})}}),Mt.createElement(Go,{dirty:n.viewState.dirty,clearWarnings:e.clearWarnings}),Mt.createElement("div",{style:{padding:"0 15px"}},r&&"custom"!==r&&Mt.createElement(Ct,{command:c,onTypeChanged:o}))),i&&s&&Mt.createElement("div",{className:"row"},Mt.createElement(Eo,{unlimitedCpuCredits:n.unlimitedCpuCredits,selectedInstanceTypes:[n.instanceType],currentProfile:r,setUnlimitedCpuCredits:e.setUnlimitedCpuCredits})))}function Mo(e){var a;const{instanceTypeDetails:n}=e,{values:r,setFieldValue:l}=e.formik,i=null==(a=hn.serverGroups)?void 0:a.enableLaunchTemplates,s=r.viewState.useSimpleInstanceTypeSelector,[o,c]=Rt(r.unlimitedCpuCredits);Lt(()=>{r.unlimitedCpuCredits!==o&&l("unlimitedCpuCredits",o)},[o]);const d=()=>{const{formik:t}=e;t.values.viewState.dirty.instanceType=null,t.values.viewState.dirty.launchTemplateOverridesForInstanceType=null,t.validateForm()},m=e=>{if(s!==e)if(l("viewState",{...r.viewState,useSimpleInstanceTypeSelector:e}),e){const e=r.launchTemplateOverridesForInstanceType,t=r.viewState.dirty.launchTemplateOverridesForInstanceType;if(null==e?void 0:e.length){const t=e.reduce((e,t)=>e.priority<t.priority?e:t).instanceType;l("instanceType",t),l("launchTemplateOverridesForInstanceType",[]),r.instanceTypeChanged(r)}if(null==t?void 0:t.length){const e=t.reduce((e,t)=>e.priority<t.priority?e:t).instanceType;l("viewState.dirty.instanceType",e),l("viewState.dirty.launchTemplateOverridesForInstanceType",[])}}else if(!e){const e=r.instanceType,t=r.viewState.dirty.instanceType;if(e){const t=[{instanceType:e,priority:1}];l("instanceType",void 0),l("launchTemplateOverridesForInstanceType",t),r.launchTemplateOverridesChanged(r)}if(t){const e=[{instanceType:t,priority:1}];l("viewState.dirty.instanceType",void 0),l("viewState.dirty.launchTemplateOverridesForInstanceType",e)}}};return i&&!s?Mt.createElement("div",{className:"container-fluid form-horizontal",style:{padding:"0 15px"}},Mt.createElement("div",null,Mt.createElement("p",null,"Switch to",Mt.createElement("a",{className:"clickable",onClick:()=>m(!0)},Mt.createElement("span",null," Simple Mode")),"."),Mt.createElement("i",null,Mt.createElement("b",null,"Note:")," If multiple instance types are already selected in advanced mode, the instance type with highest priority will be preserved in simple mode.")),Mt.createElement(Fo,{formik:e.formik,instanceTypeDetails:n,setUnlimitedCpuCredits:c,clearWarnings:d})):Mt.createElement("div",{className:"container-fluid form-horizontal",style:{padding:"0 15px"}},Mt.createElement("div",null,Mt.createElement("span",null,"To configure mixed server groups and/or multiple instance types,"),!i&&Mt.createElement("span",null,Mt.createElement("a",{href:"https://spinnaker.io/docs/setup/other_config/server-group-launch-settings/aws-ec2/launch-templates-setup/"},Mt.createElement("span",null," enable launch templates")),Mt.createElement("span",null," and")),Mt.createElement("span",null,Mt.createElement("a",{className:i?"clickable":"disabled",onClick:i?()=>m(!1):()=>{}},Mt.createElement("span",null," use Advanced Mode ")),Mt.createElement(t,{id:"aws.serverGroup.advancedMode"}),"."),Mt.createElement("p",null),i&&Mt.createElement("i",null,Mt.createElement("b",null,"Note:")," If an instance type is already selected in simple mode, it will be preserved in advanced mode.")),Mt.createElement(zo,{command:r,setUnlimitedCpuCredits:c,setFieldValue:l,clearWarnings:d}))}Cr(".InstancesDistribution .StandardFieldLayout_Label {\n min-width: 300px;\n}\n");class Ro extends Mt.Component{constructor(){super(...arguments),this.state={instanceTypeDetails:[]},this.props$=new Ca,this.destroy$=new Ca}validate(e){const t={};if(e.viewState.useSimpleInstanceTypeSelector)e.viewState.dirty.instanceType?t.instanceType="You must confirm removed instance type and pick a compatible instance type.":e.instanceType||(t.instanceType="Instance Type required.");else{const a=e.viewState.dirty.launchTemplateOverridesForInstanceType;if(a&&a.length>0)t.instanceType="You must confirm removed instance types and/or pick more instance types.";else{const a=this.validateAdvancedModeFields(e,t);Object.assign(t,{...a})}}return t}validateAdvancedModeFields(e,t){e.launchTemplateOverridesForInstanceType.length||(t.instanceType="At least one instance type required."),e.launchTemplateOverridesForInstanceType.length>40&&(t.instanceType="Maximum of 40 instance types are allowed.");const a=e.launchTemplateOverridesForInstanceType.filter(e=>void 0!==e.weightedCapacity);if(a.length!==e.launchTemplateOverridesForInstanceType.length&&0!==a.length&&(t.instanceType="Weighted capacity must be specified for all instance types selected or none."),ra(a,function(e){const t=Number(e.weightedCapacity);return t<1||t>999})&&(t.instanceType="Weighted capacity must be a number between 1 and 999."),e.onDemandBaseCapacity<0&&(t.onDemandBaseCapacity="On-Demand base capacity must be non-negative."),e.onDemandBaseCapacity>vt(e.capacity.max)&&(t.onDemandBaseCapacity="On-Demand base capacity must be less than or equal to max capacity."),(e.onDemandPercentageAboveBaseCapacity<0||e.onDemandPercentageAboveBaseCapacity>100)&&(t.onDemandPercentageAboveBaseCapacity="On-Demand percentage above base capacity must be a number between 0 and 100."),e.spotPrice){const a=Number(e.spotPrice);Number.isNaN(a)&&(t.spotPrice="Spot Max Price must be a number or empty string, used to unset previous max price."),a<=0&&(t.spotPrice="Spot Max Price must be greater than 0, if specified.")}return e.spotInstancePools&&"lowest-price"!==e.spotAllocationStrategy&&(t.spotInstancePools="Spot Instance Pools is only supported for 'lowest-price' Spot Allocation Strategy."),(e.spotInstancePools<=0||e.spotInstancePools>20)&&(t.spotInstancePools="Spot Instance Pools count must be a number between 1 and 20, when applicable."),t}componentDidMount(){Promise.resolve(tr.awsInstanceTypeService.getCategories()).then(e=>{this.setState({instanceTypeDetails:e})})}componentDidUpdate(){this.props$.next(this.props)}componentWillUnmount(){this.destroy$.next()}render(){var e,t,a;const{values:n}=this.props.formik,r=!(!n.viewState.disableImageSelection&&!n.amiName),l=null!=(a=null==(t=null==(e=n.backingData)?void 0:e.filtered)?void 0:t.instanceTypes)?a:[],i=Array.from(this.state.instanceTypeDetails);return!n.viewState.disableImageSelection&&l.length&&i.forEach(e=>{e.families.forEach(e=>{e.instanceTypes.forEach(e=>{e.unavailable=!l.includes(e.name)})})}),r&&n?Mt.createElement(Mo,{formik:this.props.formik,instanceTypeDetails:i}):Mt.createElement("h5",{className:"text-center"},"Please select an image.")}}class Lo extends Mt.Component{constructor(){super(...arguments),this.handleAvailabilityZonesChanged=e=>{const{values:t,setFieldValue:a}=this.props.formik;t.usePreferredZonesChanged(t),a("availabilityZones",e)},this.rebalanceToggled=()=>{const{values:e,setFieldValue:t}=this.props.formik;e.toggleSuspendedProcess(e,"AZRebalance"),t("suspendedProcesses",e.suspendedProcesses),this.setState({})}}validate(e){const t={};return e.availabilityZones&&0!==e.availabilityZones.length||(t.availabilityZones="You must select at least one availability zone."),t}render(){const{values:e}=this.props.formik;return Mt.createElement("div",{className:"container-fluid form-horizontal"},Mt.createElement(Jr,{credentials:e.credentials,region:e.region,onChange:this.handleAvailabilityZonesChanged,selectedZones:e.availabilityZones,allZones:e.backingData.filtered.availabilityZones,usePreferredZones:e.viewState.usePreferredZones}),Mt.createElement("div",{className:"form-group"},Mt.createElement("div",{className:"col-md-3 sm-label-right"},Mt.createElement("b",null,"AZ Rebalance")),Mt.createElement("div",{className:"col-md-7 checkbox"},Mt.createElement("label",null,Mt.createElement("input",{type:"checkbox",onChange:this.rebalanceToggled,checked:!e.processIsSuspended(e,"AZRebalance")}),"Keep instances evenly distributed across zones"))))}}const Oo=e=>({value:e,label:e});class $o extends Mt.Component{constructor(){super(...arguments),this.state={refreshing:!1,refreshed:!1,showVpcLoadBalancers:!1},this.refreshLoadBalancers=()=>{const{values:e}=this.props.formik;this.setState({refreshing:!0});this.context.services.providerServiceDelegate.getDelegate(e.cloudProvider||e.selectedProvider,"serverGroup.configurationService").refreshLoadBalancers(e).then(()=>{this.setState({refreshing:!1,refreshed:!0})})},this.targetGroupsChanged=e=>{const t=e.map(e=>e.value);this.props.formik.setFieldValue("targetGroups",t)},this.loadBalancersChanged=e=>{const t=e.map(e=>e.value);this.props.formik.setFieldValue("loadBalancers",t)},this.vpcLoadBalancersChanged=e=>{const t=e.map(e=>e.value);this.props.formik.setFieldValue("vpcLoadBalancers",t)}}validate(e){const t={};return e.viewState.dirty.targetGroups&&(t.targetGroups="You must confirm the removed target groups."),e.viewState.dirty.loadBalancers&&(t.loadBalancers="You must confirm the removed load balancers."),t}clearWarnings(e){this.props.formik.values.viewState.dirty[e]=null,this.props.formik.validateForm()}render(){var e;const{hideLoadBalancers:a,hideTargetGroups:n}=this.props,{values:r}=this.props.formik,{dirty:l}=r.viewState,{refreshed:i,refreshing:s,showVpcLoadBalancers:o}=this.state;let c=null;if(!n){const a=(r.backingData.filtered.targetGroups||[]).concat(r.viewState.spelTargetGroups||[]).map(Oo);c=Mt.createElement(Mt.Fragment,null,l.targetGroups&&Mt.createElement("div",{className:"col-md-12"},Mt.createElement("div",{className:"alert alert-warning"},Mt.createElement("p",null,Mt.createElement("i",{className:"fa fa-exclamation-triangle"}),"The following target groups could not be found in the selected account/region/VPC and were removed:"),Mt.createElement("ul",null,l.targetGroups.map(e=>Mt.createElement("li",{key:e},e))),Mt.createElement("p",{className:"text-right"},Mt.createElement("a",{className:"btn btn-sm btn-default dirty-flag-dismiss clickable",onClick:()=>this.clearWarnings("targetGroups")},"Okay")))),Mt.createElement("div",{className:"form-group"},Mt.createElement("div",{className:"col-md-4 sm-label-right"},Mt.createElement("b",null,"Target Groups "),Mt.createElement(t,{id:"aws.loadBalancer.targetGroups"})),Mt.createElement("div",{className:"col-md-7"},0===a.length&&Mt.createElement("div",{className:"form-control-static"},"No ",Mt.createElement("b",null,null!=(e=this.props.targetGroupTypeHelpText)?e:"instance")," target groups found in the selected account/region/VPC"),a.length>0&&Mt.createElement(h,{multi:!0,options:a,value:r.targetGroups,onChange:this.targetGroupsChanged}))))}let d=null;if(!a){const e=(r.backingData.filtered.loadBalancers||[]).concat(r.viewState.spelLoadBalancers||[]).map(Oo),a=(r.backingData.filtered.vpcLoadBalancers||[]).map(Oo),n=r.vpcLoadBalancers&&r.vpcLoadBalancers.length>0;d=Mt.createElement(Mt.Fragment,null,l.loadBalancers&&Mt.createElement("div",{className:"col-md-12"},Mt.createElement("div",{className:"alert alert-warning"},Mt.createElement("p",null,Mt.createElement("i",{className:"fa fa-exclamation-triangle"}),"The following load balancers could not be found in the selected account/region/VPC and were removed:"),Mt.createElement("ul",null,l.loadBalancers.map(e=>Mt.createElement("li",{key:e},e))),Mt.createElement("p",{className:"text-right"},Mt.createElement("a",{className:"btn btn-sm btn-default dirty-flag-dismiss clickable",onClick:()=>this.clearWarnings("loadBalancers")},"Okay")))),Mt.createElement("div",{className:"form-group"},Mt.createElement("div",{className:"col-md-4 sm-label-right"},Mt.createElement("b",null,"Classic Load Balancers "),Mt.createElement(t,{id:"aws.loadBalancer.loadBalancers"})),Mt.createElement("div",{className:"col-md-7"},0===e.length&&Mt.createElement("div",{className:"form-control-static"},"No load balancers found in the selected account/region/VPC"),e.length>0&&Mt.createElement(h,{multi:!0,options:e,value:r.loadBalancers,onChange:this.loadBalancersChanged}))),!r.vpcId&&Mt.createElement("div",{className:"form-group"},!n&&!o&&Mt.createElement("div",null,Mt.createElement("div",{className:"col-md-8 col-md-offset-3"},Mt.createElement("a",{className:"clickable",onClick:()=>this.setState({showVpcLoadBalancers:!0})},"Add VPC Load Balancers"))),n&&Mt.createElement("div",null,Mt.createElement("div",{className:"col-md-4 sm-label-right"},Mt.createElement("b",null,"VPC Load Balancers")),Mt.createElement("div",{className:"col-md-8"},a.length>0&&Mt.createElement(h,{multi:!0,options:a,value:r.vpcLoadBalancers,onChange:this.vpcLoadBalancersChanged})))),!i&&Mt.createElement("div",{className:"form-group small",style:{marginTop:"20px"}},Mt.createElement("div",{className:"col-md-8 col-md-offset-4"},s&&Mt.createElement("p",null,Mt.createElement("span",{className:"fa fa-sync-alt fa-spin"}),Mt.createElement("span",null," refreshing...")),!s&&Mt.createElement("p",null,"If you are looking for a load balancer or target group from a different application, ",Mt.createElement("br",null),Mt.createElement("a",{className:"clickable",onClick:this.refreshLoadBalancers},"click here")," ","to load all load balancers."))))}return Mt.createElement("div",{className:"container-fluid form-horizontal"},c,d)}}$o.contextType=g;class Uo extends Mt.Component{constructor(e){super(e),this.getRefreshTime=()=>{var e;return(null==(e=Pe.get("securityGroups"))?void 0:e.getStats().ageMax)||0},this.refreshSecurityGroups=()=>{this.setState({refreshing:!0}),this.props.refresh?this.props.refresh().then(()=>this.setState({refreshing:!1})):this.context.services.providerServiceDelegate.getDelegate(this.props.command.selectedProvider,"serverGroup.configurationService").refreshSecurityGroups(this.props.command).then(()=>{this.setState({refreshing:!1,refreshTime:this.getRefreshTime()})})},this.onChange=e=>{const t=e.map(e=>e.value);this.props.onChange(t)},this.state={refreshing:!1,refreshTime:this.getRefreshTime()}}render(){const{availableGroups:e,groupsToEdit:a,helpKey:n,hideLabel:r}=this.props,{refreshing:l,refreshTime:i}=this.state,s=e.map(e=>({label:`${e.name} (${e.id})`,value:e.id}));return Mt.createElement(Mt.Fragment,null,Mt.createElement("div",{className:"form-group"},!r&&Mt.createElement("div",{className:"col-md-3 sm-label-right"},Mt.createElement("b",null,R.get("Firewalls")),n&&Mt.createElement(t,{key:n})),Mt.createElement("div",{className:"col-md-8"},Mt.createElement(tn,{ignoreAccents:!0,options:s,onChange:this.onChange,value:a,multi:!0}))),Mt.createElement("div",{className:"form-group small",style:{marginTop:"20px"}},Mt.createElement("div",{className:`col-md-${r?12:9} col-md-offset-${r?0:3}`},Mt.createElement("p",null,l&&Mt.createElement("span",null,Mt.createElement("span",{className:"fa fa-sync-alt fa-spin"})),R.get("Firewalls"),!l&&Mt.createElement("span",null," last refreshed ",B(i)),l&&Mt.createElement("span",null," refreshing...")),Mt.createElement("p",null,"If you're not finding a ",R.get("firewall")," that was recently added,"," ",Mt.createElement("a",{className:"clickable",onClick:this.refreshSecurityGroups},"click here")," ","to refresh the list."))))}}Uo.contextType=g;class Vo extends Mt.Component{render(){const{command:e,onClear:t,removed:a}=this.props,n=(e&&e.viewState.dirty.securityGroups||[]).concat(a||[]);return 0===n.length?null:Mt.createElement("div",{className:"col-md-12"},Mt.createElement("div",{className:"alert alert-warning"},Mt.createElement("p",null,Mt.createElement("i",{className:"fa fa-exclamation-triangle"}),"The following ",R.get("firewalls")," could not be found in the selected account/region/VPC and were removed:"),Mt.createElement("ul",null,n.map(e=>Mt.createElement("li",{key:e},e))),Mt.createElement("p",{className:"text-right"},Mt.createElement("a",{className:"btn btn-sm btn-default dirty-flag-dismiss clickable",onClick:t},"Okay"))))}}Vo.defaultProps={onClear:C};class Ho extends Mt.Component{constructor(){super(...arguments),this.onChange=e=>{this.props.formik.setFieldValue("securityGroups",e)},this.acknowledgeRemovedGroups=()=>{const{viewState:e}=this.props.formik.values;e.dirty.securityGroups=null,this.props.formik.setFieldValue("viewState",e)}}validate(e){const t={};return e.viewState.dirty.securityGroups&&(t.securityGroups="You must acknowledge removed security groups."),t}render(){const{values:e}=this.props.formik;return Mt.createElement("div",{className:"container-fluid form-horizontal"},Mt.createElement(Vo,{command:e,onClear:this.acknowledgeRemovedGroups}),Mt.createElement(Uo,{command:e,availableGroups:e.backingData.filtered.securityGroups,groupsToEdit:e.securityGroups,onChange:this.onChange}))}}class qo extends Mt.Component{constructor(){super(...arguments),this.duplicateKeys=!1,this.validate=e=>{const t={};return e.keyPair||(t.keyPair="Key Name is required"),this.duplicateKeys&&(t.tags="Tags have duplicate keys."),t},this.selectBlockDeviceMappingsSource=e=>{const{values:t}=this.props.formik;t.selectBlockDeviceMappingsSource(t,e),this.setState({})},this.toggleSuspendedProcess=e=>{const{values:t,setFieldValue:a}=this.props.formik;t.toggleSuspendedProcess(t,e),a("suspendedProcesses",t.suspendedProcesses),this.setState({})},this.platformHealthOverrideChanged=e=>{this.props.formik.setFieldValue("interestingHealthProviderNames",e)},this.tagsChanged=(e,t)=>{this.duplicateKeys=t,this.props.formik.setFieldValue("tags",e)}}render(){const{app:e}=this.props,{setFieldValue:a,values:n}=this.props.formik,r=n.getBlockDeviceMappingsSource(n),l=n.backingData.filtered.keyPairs||[],i=hn.serverGroups;return Mt.createElement("div",{className:"container-fluid form-horizontal"},Mt.createElement("div",{className:"form-group"},Mt.createElement("div",{className:"col-md-3 sm-label-right"},Mt.createElement("b",null,"Cooldown")),Mt.createElement("div",{className:"col-md-2"},Mt.createElement(en,{type:"text",required:!0,name:"cooldown",className:"form-control input-sm no-spel"}))," ","seconds"),Mt.createElement("div",{className:"form-group"},Mt.createElement("div",{className:"col-md-3 sm-label-right"},Mt.createElement("b",null,"Enabled Metrics "),Mt.createElement(t,{id:"aws.serverGroup.enabledMetrics"})),Mt.createElement("div",{className:"col-md-7"},Mt.createElement(_a,{multi:!0,value:n.enabledMetrics,options:n.backingData.enabledMetrics.map(e=>({label:e,value:e})),onChange:e=>a("enabledMetrics",e.map(e=>e.value))}))),Mt.createElement("div",{className:"form-group"},Mt.createElement("div",{className:"col-md-3 sm-label-right"},Mt.createElement("b",null,"Health Check Type")),Mt.createElement("div",{className:"col-md-7"},Mt.createElement(_a,{value:n.healthCheckType,clearable:!1,placeholder:"Select...",options:n.backingData.healthCheckTypes.map(e=>({label:e,value:e})),onChange:e=>a("healthCheckType",e.value)}))),Mt.createElement("div",{className:"form-group"},Mt.createElement("div",{className:"col-md-3 sm-label-right"},Mt.createElement("b",null,"Health Check Grace Period")),Mt.createElement("div",{className:"col-md-2"},Mt.createElement(en,{type:"text",required:!0,className:"form-control input-sm no-spel",name:"healthCheckGracePeriod"}))," ","seconds"),Mt.createElement("div",{className:"form-group"},Mt.createElement("div",{className:"col-md-3 sm-label-right"},Mt.createElement("b",null,"Termination Policies")),Mt.createElement("div",{className:"col-md-7"},Mt.createElement(_a,{multi:!0,value:n.terminationPolicies,options:n.backingData.terminationPolicies.map(e=>({label:e,value:e})),onChange:e=>a("terminationPolicies",e.map(e=>e.value))}))),Mt.createElement("div",{className:"form-group"},Mt.createElement("div",{className:"col-md-3 sm-label-right"},Mt.createElement("b",null,"Key Name")),Mt.createElement("div",{className:"col-md-7"},Mt.createElement(_a,{value:n.keyPair,required:!0,clearable:!1,options:l.map(e=>({label:e,value:e})),onChange:e=>a("keyPair",e.value)}))),Mt.createElement("div",{className:"form-group"},Mt.createElement("div",{className:"col-md-3 sm-label-right"},Mt.createElement("b",null,"Ramdisk Id (optional)")),Mt.createElement("div",{className:"col-md-7"},Mt.createElement(en,{type:"text",name:"ramdiskId",className:"form-control input-sm no-spel"}))),Mt.createElement("div",{className:"form-group"},Mt.createElement("div",{className:"col-md-3 sm-label-right"},Mt.createElement("b",null,"IAM Instance Profile (optional)")),Mt.createElement("div",{className:"col-md-7"},Mt.createElement(en,{type:"text",className:"form-control input-sm no-spel",name:"iamRole"}))),Mt.createElement("div",{className:"form-group"},Mt.createElement("div",{className:"col-md-3 sm-label-right"},Mt.createElement("b",null,"UserData (optional) "),Mt.createElement(t,{id:"aws.serverGroup.base64UserData"})),Mt.createElement("div",{className:"col-md-7"},Mt.createElement(en,{type:"text",className:"form-control input-sm no-spel",name:"base64UserData"}))),Mt.createElement("div",{className:"form-group"},Mt.createElement("div",{className:"col-md-3 sm-label-right"},Mt.createElement("b",null,"Instance Monitoring "),Mt.createElement(t,{id:"aws.serverGroup.instanceMonitoring"})),Mt.createElement("div",{className:"col-md-7 checkbox"},Mt.createElement("label",null,Mt.createElement("input",{type:"checkbox",checked:n.instanceMonitoring,onChange:e=>a("instanceMonitoring",e.target.checked)})," ","Enforce Instance Monitoring"," "))),Mt.createElement("div",{className:"form-group"},Mt.createElement("div",{className:"col-md-3 sm-label-right"},Mt.createElement("b",null,"EBS Optimized")),Mt.createElement("div",{className:"col-md-7 checkbox"},Mt.createElement("label",null,Mt.createElement("input",{type:"checkbox",checked:n.ebsOptimized,onChange:e=>a("ebsOptimized",e.target.checked)})," ","Optimize Instances for EBS"))),(null==i?void 0:i.enableIMDSv2)&&Mt.createElement("div",{className:"form-group"},Mt.createElement("div",{className:"col-md-3 sm-label-right"},Mt.createElement("b",null,"IMDSv2 "),Mt.createElement(t,{id:"aws.serverGroup.imdsv2"})),Mt.createElement("div",{className:"col-md-7 checkbox"},Mt.createElement("label",null,Mt.createElement("input",{type:"checkbox",checked:!0===n.requireIMDSv2,onChange:e=>a("requireIMDSv2",e.target.checked)})," ","Require IMDSv2"," "))),!hn.disableSpotPricing&&n.viewState.useSimpleInstanceTypeSelector&&Mt.createElement("div",{className:"form-group"},Mt.createElement("div",{className:"col-md-3 sm-label-right"},Mt.createElement("b",null,"Spot Instances Price (optional)")," ",Mt.createElement(t,{id:"aws.serverGroup.spotMaxPrice"})),Mt.createElement("div",{className:"col-md-2"},Mt.createElement(en,{type:"text",className:"form-control input-sm",name:"spotPrice"}))),Mt.createElement("div",{className:"form-group"},Mt.createElement("div",{className:"col-md-3 sm-label-right"},Mt.createElement("b",null,"AMI Block Device Mappings")),Mt.createElement("div",{className:"col-md-7 radio"},Mt.createElement("div",null,Mt.createElement("label",null,Mt.createElement("input",{type:"radio",onChange:()=>this.selectBlockDeviceMappingsSource("source"),checked:"source"===r,name:"blockDeviceMappingsSource"}),"Copy from current server group ",Mt.createElement(t,{id:"aws.blockDeviceMappings.useSource"}))),Mt.createElement("div",null,Mt.createElement("label",null,Mt.createElement("input",{type:"radio",onChange:()=>this.selectBlockDeviceMappingsSource("ami"),checked:"ami"===r,name:"blockDeviceMappingsSource"}),"Prefer AMI block device mappings ",Mt.createElement(t,{id:"aws.blockDeviceMappings.useAMI"}))),Mt.createElement("div",null,Mt.createElement("label",null,Mt.createElement("input",{type:"radio",onChange:()=>this.selectBlockDeviceMappingsSource("default"),checked:"default"===r,name:"blockDeviceMappingsSource"}),"Defaults for selected instance type ",Mt.createElement(t,{id:"aws.blockDeviceMappings.useDefaults"}))))),Mt.createElement("div",{className:"form-group"},Mt.createElement("div",{className:"col-md-3 sm-label-right"},Mt.createElement("b",null,`Associate ${(null==i?void 0:i.enableIPv6)?"IPv6 (Recommended)":"Public IPv4"} Address`),Mt.createElement(t,{id:"serverGroup.ipv6"})),(null==i?void 0:i.enableIPv6)&&Mt.createElement("div",{className:"col-md-7 checkbox"},Mt.createElement("label",null,Mt.createElement("input",{type:"checkbox",checked:!0===n.associateIPv6Address,onChange:e=>a("associateIPv6Address",e.target.checked),id:"associateIPv6AddressToggle"})," ","Assign an IPv6 address to instances"," ")),!(null==i?void 0:i.enableIPv6)&&Mt.createElement("div",null,Mt.createElement("div",{className:"col-md-2 radio"},Mt.createElement("label",null,Mt.createElement("input",{type:"radio",checked:!0===n.associatePublicIpAddress,onChange:()=>a("associatePublicIpAddress",!0),id:"associatePublicIpAddressTrue"}),"Yes")),Mt.createElement("div",{className:"col-md-2 radio"},Mt.createElement("label",null,Mt.createElement("input",{type:"radio",checked:!1===n.associatePublicIpAddress,onChange:()=>a("associatePublicIpAddress",!1),id:"associatePublicIpAddressFalse"}),"No")),Mt.createElement("div",{className:"col-md-2 radio"},Mt.createElement("label",null,Mt.createElement("input",{type:"radio",checked:null===n.associatePublicIpAddress,onChange:()=>a("associatePublicIpAddress",null),id:"associatePublicIpAddressDefault"}),"Default")))),Mt.createElement("div",{className:"form-group"},Mt.createElement("div",{className:"col-md-3 sm-label-right"},Mt.createElement("b",null,"Scaling Processes")),Mt.createElement("div",{className:"col-md-7 checkbox"},n.backingData.scalingProcesses.map(e=>Mt.createElement("div",{key:e.name},Mt.createElement("label",null,Mt.createElement("input",{type:"checkbox",onChange:()=>this.toggleSuspendedProcess(e.name),checked:!n.suspendedProcesses.includes(e.name)})," ",e.name," ",Mt.createElement(t,{content:e.description})))))),e.attributes.platformHealthOnlyShowOverride&&Mt.createElement("div",{className:"form-group"},Mt.createElement("div",{className:"col-md-3 sm-label-right"},Mt.createElement("b",null,"Task Completion")),Mt.createElement("div",{className:"col-md-7"},Mt.createElement(je,{interestingHealthProviderNames:n.interestingHealthProviderNames,platformHealthType:"Amazon",onChange:this.platformHealthOverrideChanged}))),Mt.createElement("div",{className:"form-group"},Mt.createElement("div",{className:"col-md-3 sm-label-right"},Mt.createElement("b",null,"Tags (optional)"),Mt.createElement(t,{id:"aws.serverGroup.tags"})),Mt.createElement("div",{className:"col-md-7"},Mt.createElement(Xe,{model:n.tags,allowEmpty:!0,onChange:this.tagsChanged}))))}}var Wo=Object.getOwnPropertyDescriptor;let jo=class extends Mt.Component{constructor(){super(...arguments),this.validators=new Map,this.validate=e=>{const t={};return this.validators.forEach(a=>{const n=a(e);Object.assign(t,{...n})}),t},this.handleRef=e=>{e?this.validators.set("common",e.validate):this.validators.delete("common")}}render(){const{formik:e,app:t}=this.props;return Mt.createElement(qo,{formik:e,app:t,ref:this.handleRef})}};jo=((e,t,a,n)=>{for(var r,l=n>1?void 0:n?Wo(t,a):t,i=e.length-1;i>=0;i--)(r=e[i])&&(l=r(l)||l);return l})([ce("aws.serverGroup.advancedSettings")],jo);class Zo extends Mt.Component{constructor(){super(...arguments),this.ref=Mt.createRef()}validate(e){return this.ref&&this.ref.current?this.ref.current.validate(e):{}}render(){const{app:e,formik:t}=this.props;return Mt.createElement(jo,{formik:t,app:e,ref:this.ref})}}class _o extends Mt.Component{constructor(e){super(e),this._isUnmounted=!1,this.templateSelected=()=>{this.setState({requiresTemplateSelection:!1}),this.configureCommand()},this.onTaskComplete=()=>{this.clearRefreshSubscription(),this.refreshUnsubscribe=this.props.application.serverGroups.onNextRefresh(this.onApplicationRefresh),this.props.application.serverGroups.refresh()},this.onApplicationRefresh=()=>{if(this.clearRefreshSubscription(),this._isUnmounted)return;const{command:e}=this.props,{taskMonitor:t}=this.state,a=t.task.execution.stages.find(e=>"cloneServerGroup"===e.type);if(a&&a.context["deploy.server.groups"]){const t=a.context["deploy.server.groups"][e.region];if(t){const a={serverGroup:t,accountId:e.credentials,region:e.region,provider:"aws"};let n="^.^.^.clusters.serverGroup";this.props.stateService.includes("**.clusters.serverGroup")&&(n="^.serverGroup"),this.props.stateService.includes("**.clusters.cluster.serverGroup")&&(n="^.^.serverGroup"),this.props.stateService.includes("**.clusters")&&(n=".serverGroup"),this.props.stateService.go(n,a)}}},this.initializeCommand=()=>{const{command:e}=this.props;e.credentialsChanged(e),e.regionChanged(e),this.configurationService.configureSubnetPurposes(e)},this.configureCommand=()=>{const{application:e,command:t}=this.props;this.configurationService.configureCommand(e,t).then(()=>{this.initializeCommand(),this.setState({loaded:!0,requiresTemplateSelection:!1})})},this.normalizeCommand=({tags:e})=>{e&&Object.keys(e).forEach(t=>{t.length||e[t].length||delete e[t]})},this.clearRefreshSubscription=()=>{var e;null==(e=this.refreshUnsubscribe)||e.call(this),this.refreshUnsubscribe=void 0},this.submit=e=>{this.normalizeCommand(e);"editPipeline"===e.viewState.mode||"createPipeline"===e.viewState.mode?this.props.closeModal&&this.props.closeModal(e):this.state.taskMonitor.submit(()=>this.context.services.serverGroupWriter.cloneServerGroup(e,this.props.application))};const t=ta(e,"command.viewState.requiresTemplateSelection",!1);this.state={firewallsLabel:R.get("Firewalls"),loaded:!1,requiresTemplateSelection:t,taskMonitor:new v({application:e.application,title:"Creating your server group",onDismiss:()=>this.props.dismissModal(),onTaskComplete:this.onTaskComplete})}}static show(e,t){return E.show(Ko,e,{dialogClassName:"wizard-modal modal-lg"},t)}componentDidMount(){this.state.requiresTemplateSelection||this.configureCommand()}get configurationService(){return this.context.services.providerServiceDelegate.getDelegate(this.props.command.selectedProvider,"serverGroup.configurationService")}componentWillUnmount(){this._isUnmounted=!0,this.clearRefreshSubscription()}render(){const{application:e,command:t,dismissModal:a,title:n}=this.props,{loaded:r,taskMonitor:l,requiresTemplateSelection:i}=this.state;return i?Mt.createElement(oo,{app:e,command:t,onDismiss:a,onTemplateSelected:this.templateSelected}):Mt.createElement(y,{heading:n,initialValues:t,loading:!r,taskMonitor:l,dismissModal:a,closeModal:this.submit,submitButtonLabel:t.viewState.submitButtonLabel,render:({formik:a,nextIdx:n,wizard:r})=>Mt.createElement(Mt.Fragment,null,Mt.createElement(b,{label:"Basic Settings",wizard:r,order:n(),render:({innerRef:t})=>Mt.createElement(po,{ref:t,formik:a,app:e})}),Mt.createElement(b,{label:"Load Balancers",wizard:r,order:n(),render:({innerRef:e})=>Mt.createElement($o,{ref:e,formik:a})}),Mt.createElement(b,{label:R.get("Firewalls"),wizard:r,order:n(),render:({innerRef:e})=>Mt.createElement(Ho,{ref:e,formik:a})}),Mt.createElement(b,{label:t.viewState.useSimpleInstanceTypeSelector?"Instance Type":"Instance Types",wizard:r,order:n(),render:({innerRef:e})=>Mt.createElement(Ro,{ref:e,formik:a})}),Mt.createElement(b,{label:"Capacity",wizard:r,order:n(),render:({innerRef:e})=>Mt.createElement(vo,{ref:e,formik:a})}),Mt.createElement(b,{label:"Availability Zones",wizard:r,order:n(),render:({innerRef:e})=>Mt.createElement(Lo,{ref:e,formik:a})}),Mt.createElement(b,{label:"Advanced Settings",wizard:r,order:n(),render:({innerRef:t})=>Mt.createElement(Zo,{ref:t,formik:a,app:e})}))})}}_o.contextType=g,_o.defaultProps={closeModal:C,dismissModal:C};const Ko=Object.assign(N(_o),{show:_o.show});class Yo extends Mt.Component{constructor(){super(...arguments),this.state={verified:!1,requireVerification:!1},this.handleVerification=e=>{this.setState({verified:e})}}componentDidMount(){i.accounts$.pipe(Ra(1),Ia(e=>e.find(e=>e.name===this.props.account))).subscribe(e=>{this.setState({requireVerification:!!e&&e.challengeDestructiveActions})})}render(){const{account:e,onCancel:t,onSubmit:a,isValid:n}=this.props,{verified:r,requireVerification:l}=this.state;return Mt.createElement(Wa,null,Mt.createElement("form",{onSubmit:()=>(this.props.onSubmit(),!1)},l&&Mt.createElement(Nt,{expectedValue:e,onValidChange:this.handleVerification})),Mt.createElement("button",{className:"btn btn-default",onClick:t},"Cancel"),Mt.createElement("button",{type:"submit",className:"btn btn-primary",onClick:a,disabled:!n||l&&!r},"Submit"))}}Yo.defaultProps={isValid:!0};const Xo=class e extends Mt.Component{constructor(e){super(e),this.formikRef=Mt.createRef(),this.validate=e=>{const{min:t,max:a,desired:n}=e,r={};return this.state.advancedMode?(t>a&&t>n?r.min="Min cannot be larger than Max/Desired":a<t&&a<n?r.max="Max cannot be smaller than Min/Desired":(t>a&&(r.min="Min cannot be larger than Max"),this.isDesiredControlledByAutoscaling()||(n<t&&(r.desired="Desired cannot be smaller than Min"),n>a&&(r.desired="Desired cannot be larger than Max"))),r):r},this.toggleAdvancedMode=()=>{const{desired:e}=this.formikRef.current.getFormikContext().values;this.formikRef.current.setFieldValue("min",e),this.formikRef.current.setFieldValue("max",e),this.setState({advancedMode:!this.state.advancedMode})},this.close=e=>{this.props.dismissModal.apply(null,e)},this.platformHealthOverrideChanged=e=>{this.setState({interestingHealthProviderNames:e})},this.isDesiredControlledByAutoscaling=()=>{const{serverGroup:e}=this.props,{suspendedProcesses:t}=e.asg,{advancedMode:a}=this.state;return(e.scalingPolicies||[]).length&&a&&t.every(e=>"AlarmNotification"!==e.processName)},this.submit=e=>{const{min:t,max:a,desired:n,enforceCapacityConstraints:r,reason:l}=e,{interestingHealthProviderNames:i}=this.state,{serverGroup:s,application:o}=this.props,{asg:c}=s,d={capacity:Qt({min:t!==c.minSize?t:void 0,max:a!==c.maxSize?a:void 0,desired:n!==c.desiredCapacity?n:void 0},e=>void 0!==e),reason:l,interestingHealthProviderNames:i};r&&(d.constraints={capacity:{min:c.minSize,max:c.maxSize,desired:c.desiredCapacity}}),this.state.taskMonitor.submit(()=>this.context.services.serverGroupWriter.resizeServerGroup(s,o,d))};const{minSize:t,maxSize:a,desiredCapacity:n}=e.serverGroup.asg,{attributes:r}=e.application;this.state={advancedMode:t!==a,initialValues:{min:t,max:a,desired:n,enforceCapacityConstraints:!1},taskMonitor:new v({application:e.application,title:"Resizing your server group",onDismiss:()=>this.props.dismissModal(),onTaskComplete:()=>this.props.application.serverGroups.refresh()}),platformHealthOnlyShowOverride:r.platformHealthOnlyShowOverride,interestingHealthProviderNames:r.platformHealthOnlyShowOverride&&r.platformHealthOnly?["Amazon"]:null}}static show(t,a){const n={},{serverGroup:r,application:l}=t;return ct(r,l).then(r=>{r&&E.show(e,t,n,a)})}autoIncrementDesiredIfNeeded(){if(!this.isDesiredControlledByAutoscaling())return;const e=this.formikRef.current.getFormikContext(),{asg:t}=this.props.serverGroup,{min:a,max:n,desired:r}=e.values,l=Math.min(n,Math.max(a,t.desiredCapacity));r!==l&&e.setFieldValue("desired",l)}renderSimpleMode(e){const{serverGroup:t}=this.props,{asg:a}=t;return Mt.createElement("div",null,Mt.createElement("p",null,"Sets min, max, and desired instance counts to the same value."),Mt.createElement("p",null,"To allow autoscaling, use the"," ",Mt.createElement("a",{className:"clickable",onClick:()=>this.toggleAdvancedMode()},"Advanced Mode"),"."),Mt.createElement("div",{className:"form-group"},Mt.createElement("div",{className:"col-md-3 sm-label-right"},"Current size"),Mt.createElement("div",{className:"col-md-4"},Mt.createElement("div",{className:"horizontal middle"},Mt.createElement("input",{type:"number",className:"NumberInput form-control",value:a.desiredCapacity,disabled:!0}),Mt.createElement("div",{className:"sp-padding-xs-xaxis"},"instances")))),Mt.createElement("div",{className:"form-group"},Mt.createElement("div",{className:"col-md-3 sm-label-right"},"Resize to"),Mt.createElement("div",{className:"col-md-4"},Mt.createElement("div",{className:"horizontal middle"},Mt.createElement(r,{name:"desired",input:e=>Mt.createElement(d,{...e,min:0}),touched:!0,onChange:t=>{e.setFieldValue("min",t),e.setFieldValue("max",t)}}),Mt.createElement("div",{className:"sp-padding-xs-xaxis"},"instances")))))}renderAdvancedMode(e){const{serverGroup:t}=this.props,{errors:a}=e,{asg:n}=t,l=a.min||a.max||a.desired;return Mt.createElement("div",null,Mt.createElement("p",null,"Sets up autoscaling for this server group."),Mt.createElement("p",null,"To disable autoscaling, use the"," ",Mt.createElement("a",{className:"clickable",onClick:()=>this.toggleAdvancedMode()},"Simple Mode"),"."),Mt.createElement("div",{className:"form-group bold"},Mt.createElement("div",{className:"col-md-2 col-md-offset-3"},"Min"),Mt.createElement("div",{className:"col-md-2"},"Max"),Mt.createElement("div",{className:"col-md-2"},"Desired")),Mt.createElement("div",{className:"form-group"},Mt.createElement("div",{className:"col-md-3 sm-label-right"},"Current"),Mt.createElement("div",{className:"col-md-2"},Mt.createElement("input",{type:"number",className:"NumberInput form-control",value:n.minSize,disabled:!0})),Mt.createElement("div",{className:"col-md-2"},Mt.createElement("input",{type:"number",className:"NumberInput form-control",value:n.maxSize,disabled:!0})),Mt.createElement("div",{className:"col-md-2"},Mt.createElement("input",{type:"number",className:"NumberInput form-control",value:n.desiredCapacity,disabled:!0}))),Mt.createElement("div",{className:"form-group"},Mt.createElement("div",{className:"col-md-3 sm-label-right"},"Resize to"),Mt.createElement("div",{className:"col-md-2"},Mt.createElement(r,{name:"min",input:e=>Mt.createElement(d,{...e,min:0}),onChange:()=>this.autoIncrementDesiredIfNeeded(),layout:({input:e})=>Mt.createElement(Mt.Fragment,null,e),touched:!0})),Mt.createElement("div",{className:"col-md-2"},Mt.createElement(r,{name:"max",input:e=>Mt.createElement(d,{...e,min:0}),onChange:()=>this.autoIncrementDesiredIfNeeded(),layout:({input:e})=>Mt.createElement(Mt.Fragment,null,e),touched:!0})),Mt.createElement("div",{className:"col-md-2"},Mt.createElement(r,{name:"desired",input:e=>Mt.createElement(d,{...e,min:0,disabled:this.isDesiredControlledByAutoscaling()}),layout:({input:e})=>Mt.createElement(Mt.Fragment,null,e),touched:!0}))),!!l&&Mt.createElement("div",{className:"col-md-offset-3 col-md-9"},Mt.createElement(ge,{message:l,type:"error"})))}renderCapacityConstraintSelector(){return Mt.createElement("div",{className:"form-group"},Mt.createElement("div",{className:"col-md-7 col-md-offset-3"},Mt.createElement(r,{name:"enforceCapacityConstraints",input:e=>Mt.createElement(Mt.Fragment,null,Mt.createElement(o,{...e,text:"Enforce Capacity Constraints"}),Mt.createElement(t,{id:"aws.serverGroup.capacityConstraint"}))})))}renderScalingPolicyWarning(e){const{serverGroup:t}=this.props,{min:a,max:n}=e.values,{advancedMode:r}=this.state,l=t.scalingPolicies||[];return l.length&&a===n?Mt.createElement("div",{className:"form-group"},Mt.createElement("div",{className:"col-md-7 col-md-offset-3"},Mt.createElement("div",{className:"well-compact alert alert-warning"},Mt.createElement("b",null,"Warning"),": this server group has",1===l.length&&Mt.createElement("span",null," a scaling policy. "),l.length>1&&Mt.createElement("span",null," scaling policies. "),!r&&Mt.createElement("span",null,"Scaling policies will not take effect in Simple Mode. Switch to"," ",Mt.createElement("a",{className:"clickable",onClick:()=>this.toggleAdvancedMode()},"Advanced Mode"),"."),r&&Mt.createElement("span",null,"Scaling policies will not take effect when ",Mt.createElement("b",null,"Min")," is the same as ",Mt.createElement("b",null,"Max"),".")))):this.isDesiredControlledByAutoscaling()?Mt.createElement("div",{className:"form-group"},Mt.createElement("div",{className:"col-md-8 col-md-offset-1"},Mt.createElement("div",{className:"well-compact alert alert-warning"},Mt.createElement("p",null,Mt.createElement("b",null,"Desired")," capacity is managed by Autoscaling Policies."),Mt.createElement("p",null,"If you need to scale ",Mt.createElement("b",null,"down")," this server group, set ",Mt.createElement("b",null,"Max")," to the new desired size."),Mt.createElement("p",null,"If you need to scale ",Mt.createElement("b",null,"up")," this server group, set ",Mt.createElement("b",null,"Min")," to the new desired size.")))):null}render(){const{serverGroup:e}=this.props,{advancedMode:t,initialValues:a,platformHealthOnlyShowOverride:n}=this.state;return Mt.createElement(Mt.Fragment,null,Mt.createElement(ot,{monitor:this.state.taskMonitor}),Mt.createElement(de,{ref:this.formikRef,initialValues:a,validate:this.validate,onSubmit:this.submit,render:a=>{const{asg:r}=e,l={min:r.minSize,max:r.maxSize,desired:r.desiredCapacity},i=a.values;return Mt.createElement(Mt.Fragment,null,Mt.createElement(me,{dismiss:this.close}),Mt.createElement(Oa.Header,null,Mt.createElement(Oa.Title,null,"Resize ",e.name)),Mt.createElement(Oa.Body,null,Mt.createElement(Qa,{className:"form-horizontal"},t&&this.renderAdvancedMode(a),!t&&this.renderSimpleMode(a),this.renderScalingPolicyWarning(a),this.renderCapacityConstraintSelector(),n&&Mt.createElement("div",{className:"form-group"},Mt.createElement("div",{className:"col-md-8 col-md-offset-3"},Mt.createElement(je,{interestingHealthProviderNames:this.state.interestingHealthProviderNames,platformHealthType:"Amazon",onChange:this.platformHealthOverrideChanged,showHelpDetails:!0}))),Mt.createElement(gt,{reason:a.values.reason,onChange:e=>a.setFieldValue("reason",e)}),Mt.createElement("div",{className:"form-group"},Mt.createElement("div",{className:"col-md-3 sm-label-right"},"Changes"),Mt.createElement("div",{className:"col-md-9 sm-control-field"},Mt.createElement(wt,{current:l,next:i}))))),Mt.createElement(Yo,{onSubmit:()=>this.submit(a.values),onCancel:this.close,isValid:a.isValid,account:e.account}))}}))}};Xo.contextType=g,Xo.defaultProps={closeModal:C,dismissModal:C};let Jo=Xo;function Qo(e){return e<10?100:e<20?90:95}function ec(e){var t,a,n,r,l;const i=null==(n=null==(a=null==(t=e.entityTags)?void 0:t.creationMetadata)?void 0:a.value)?void 0:n.previousServerGroup;if(!i)return;const s=null==(l=null==(r=i.buildInfo)?void 0:r.jenkins)?void 0:l.number;return{...void 0!==s?{buildNumber:s}:{},imageId:i.imageId&&i.imageId!==i.imageName?i.imageId:void 0,imageName:i.imageName,name:i.name}}function tc(e,t,a){const n={};return"EXPLICIT"===t&&(e.restoreServerGroupName?a&&!a.includes(e.restoreServerGroupName)&&(n.restoreServerGroupName="Select an eligible server group to restore"):n.restoreServerGroupName="Select a server group to restore"),(!Number.isFinite(e.targetHealthyRollbackPercentage)||e.targetHealthyRollbackPercentage<0||e.targetHealthyRollbackPercentage>100)&&(n.targetHealthyRollbackPercentage="Healthy threshold must be between 0 and 100"),(!Number.isFinite(e.delayBeforeDisableSeconds)||!Number.isInteger(e.delayBeforeDisableSeconds)||e.delayBeforeDisableSeconds<0)&&(n.delayBeforeDisableSeconds="Delay must be a non-negative whole number"),n}const ac=class e extends Mt.Component{constructor(e){var t,a;super(e),this.close=()=>this.props.dismissModal(),this.submit=e=>{const{allServerGroups:t,application:a,serverGroup:n}=this.props,r=tc(e,this.rollbackType,t.map(({name:e})=>e));if(!this.state.verified||Object.keys(r).length>0)return;const l=function(e,t,a,n){var r;return{interestingHealthProviderNames:n.interestingHealthProviderNames,platformHealthOnlyShowOverride:null==(r=e.attributes)?void 0:r.platformHealthOnlyShowOverride,reason:n.reason,rollbackContext:{delayBeforeDisableSeconds:n.delayBeforeDisableSeconds,restoreServerGroupName:n.restoreServerGroupName,rollbackServerGroupName:t.name,targetHealthyRollbackPercentage:n.targetHealthyRollbackPercentage},rollbackType:a}}(a,n,this.rollbackType,e);this.state.taskMonitor.submit(()=>this.context.services.serverGroupWriter.rollbackServerGroup(n,a,l))};const{application:n,previousServerGroup:r,serverGroup:l}=e,i=Number(l.capacity.desired);this.state={initialValues:{delayBeforeDisableSeconds:0,interestingHealthProviderNames:(null==(t=n.attributes)?void 0:t.platformHealthOnlyShowOverride)&&(null==(a=n.attributes)?void 0:a.platformHealthOnly)?["Amazon"]:void 0,restoreServerGroupName:null==r?void 0:r.name,targetHealthyRollbackPercentage:Qo(i)},taskMonitor:new v({application:n,title:`Rollback ${l.name}`,onDismiss:()=>this.props.dismissModal(),onTaskComplete:()=>n.serverGroups.refresh()}),verified:!1}}static show(t,a){return E.show(e,t,void 0,a)}get rollbackType(){return e=this.props.serverGroup,0===this.props.allServerGroups.length&&ec(e)?"PREVIOUS_IMAGE":"EXPLICIT";var e}label(e){var t,a;const n=null==(a=null==(t=null==e?void 0:e.buildInfo)?void 0:t.jenkins)?void 0:a.number;return n?`${e.name} (build #${n})`:(null==e?void 0:e.name)||""}minHealthy(e){return Math.ceil(Number(this.props.serverGroup.capacity.desired)*e/100)}renderRestoreTarget(e,t){if("PREVIOUS_IMAGE"===this.rollbackType){const e=ec(this.props.serverGroup);return Mt.createElement("div",{style:{marginTop:"5px"}},e.name," ",Mt.createElement("span",{className:"small"},"(no longer deployed)"),Mt.createElement("br",null),Mt.createElement("span",{className:"small"},Mt.createElement("strong",null,"Image"),": ",e.imageName,e.imageId&&Mt.createElement(Mt.Fragment,null," (",e.imageId,")")),void 0!==e.buildNumber&&Mt.createElement(Mt.Fragment,null,Mt.createElement("br",null),Mt.createElement("span",{className:"small"},Mt.createElement("strong",null,"Build")," #",e.buildNumber)))}const a=this.props.allServerGroups.filter(({isDisabled:e})=>!e),n=this.props.allServerGroups.filter(({isDisabled:e})=>e),r=e=>e.map(e=>Mt.createElement("option",{key:e.name,value:e.name},this.label(e)));return Mt.createElement("select",{className:"form-control input-sm",name:"restoreServerGroupName",onChange:e=>t("restoreServerGroupName",e.target.value||void 0),value:e.restoreServerGroupName||""},Mt.createElement("option",{value:""},"Select..."),a.length>0&&Mt.createElement("optgroup",{label:"Enabled Server Groups"},r(a)),n.length>0&&Mt.createElement("optgroup",{label:"Disabled Server Groups"},r(n)))}renderOperations(e){const{serverGroup:t}=this.props,a=ec(t),n=e.restoreServerGroupName||"previous server group";return Mt.createElement("div",{className:"row"},Mt.createElement("div",{className:"col-sm-11 col-sm-offset-1"},Mt.createElement("ol",null,"EXPLICIT"===this.rollbackType?Mt.createElement(Mt.Fragment,null,Mt.createElement("li",null,"Enable ",Mt.createElement("em",null,n)),Mt.createElement("li",null,"Resize ",Mt.createElement("em",null,n)," to [",Mt.createElement("strong",null,"min"),": ",t.capacity.desired,","," ",Mt.createElement("strong",null,"max"),": ",t.capacity.max,", ",Mt.createElement("strong",null,"desired"),":"," ",t.capacity.desired,"]")):Mt.createElement("li",null,"Deploy ",Mt.createElement("em",null,a.imageId||a.imageName)," [",Mt.createElement("strong",null,"min"),":"," ",t.capacity.desired,", ",Mt.createElement("strong",null,"max"),": ",t.capacity.max,","," ",Mt.createElement("strong",null,"desired"),": ",t.capacity.desired,"]"),e.targetHealthyRollbackPercentage<100&&Mt.createElement("li",null,"Wait for at least ",this.minHealthy(e.targetHealthyRollbackPercentage)," instances to report as healthy"),e.delayBeforeDisableSeconds>0&&Mt.createElement("li",null,"Wait ",e.delayBeforeDisableSeconds," seconds"),Mt.createElement("li",null,"Disable ",Mt.createElement("em",null,t.name)),Mt.createElement("li",null,"Restore minimum capacity of ",Mt.createElement("em",null,"EXPLICIT"===this.rollbackType?n:"new server group")," ","[",Mt.createElement("strong",null,"min"),": ",t.capacity.min,"]")),Mt.createElement("p",null,"This rollback will affect server groups in ",t.account," (",t.region,").")))}render(){const{application:e,serverGroup:t}=this.props,a=this.props.allServerGroups.map(({name:e})=>e);return Mt.createElement(Mt.Fragment,null,Mt.createElement(ot,{monitor:this.state.taskMonitor}),Mt.createElement(de,{initialValues:this.state.initialValues,onSubmit:this.submit,validate:e=>tc(e,this.rollbackType,a),render:a=>{var n;return Mt.createElement(Mt.Fragment,null,Mt.createElement(me,{dismiss:this.close}),Mt.createElement(Oa.Header,null,Mt.createElement(Oa.Title,null,"Rollback ",t.name)),Mt.createElement(Oa.Body,null,Mt.createElement("form",{className:"form-horizontal"},Mt.createElement("div",{className:"form-group row"},Mt.createElement("div",{className:"col-sm-3 sm-label-right"},"Restore to"),Mt.createElement("div",{className:"col-md-7"},this.renderRestoreTarget(a.values,a.setFieldValue),a.errors.restoreServerGroupName&&Mt.createElement(ge,{message:a.errors.restoreServerGroupName,type:"error"}))),(null==(n=e.attributes)?void 0:n.platformHealthOnlyShowOverride)&&Mt.createElement("div",{className:"form-group row"},Mt.createElement("div",{className:"col-sm-10 col-sm-offset-1"},Mt.createElement(je,{interestingHealthProviderNames:a.values.interestingHealthProviderNames,onChange:e=>a.setFieldValue("interestingHealthProviderNames",e),platformHealthType:"Amazon",showHelpDetails:!0}))),Mt.createElement(gt,{reason:a.values.reason,onChange:e=>a.setFieldValue("reason",e)}),Mt.createElement("div",{className:"form-group row"},Mt.createElement("div",{className:"col-sm-11 col-sm-offset-1"},"Wait"," ",Mt.createElement("input",{className:"form-control input-sm inline-number",min:0,name:"delayBeforeDisableSeconds",onChange:e=>a.setFieldValue("delayBeforeDisableSeconds",Number(e.target.value)),placeholder:"0",step:1,type:"number",value:a.values.delayBeforeDisableSeconds})," ","seconds before disabling ",Mt.createElement("em",null,this.label(t)),".",a.errors.delayBeforeDisableSeconds&&Mt.createElement(ge,{message:a.errors.delayBeforeDisableSeconds,type:"error"}))),Mt.createElement("div",{className:"form-group row"},Mt.createElement("div",{className:"col-sm-11 col-sm-offset-1"},"Consider rollback successful when"," ",Mt.createElement("input",{className:"form-control input-sm inline-number",max:100,min:0,name:"targetHealthyRollbackPercentage",onChange:e=>a.setFieldValue("targetHealthyRollbackPercentage",Number(e.target.value)),type:"number",value:a.values.targetHealthyRollbackPercentage})," ","percent of instances are healthy.",a.errors.targetHealthyRollbackPercentage&&Mt.createElement(ge,{message:a.errors.targetHealthyRollbackPercentage,type:"error"})))),Mt.createElement("div",{className:"row"},Mt.createElement("div",{className:"col-sm-4 sm-label-right"},"Rollback Operations")),this.renderOperations(a.values)),Mt.createElement(Oa.Footer,null,Mt.createElement(Nt,{account:t.account,onValidChange:e=>this.setState({verified:e})}),Mt.createElement("button",{className:"btn btn-default",onClick:this.close,type:"button"},"Cancel"),Mt.createElement("button",{className:"btn btn-primary",disabled:!this.state.verified||!a.isValid,onClick:()=>this.submit(a.values),type:"button"},"Submit")))}}))}};ac.contextType=g,ac.defaultProps={allServerGroups:[],closeModal:C,dismissModal:C};let nc=ac;function rc(e,t,a){return a.filter(a=>a.name!==t.name&&function(e,t,a){return function(e){var t;return e.app||(null==(t=e.moniker)?void 0:t.app)}(a)===e&&a.cluster===t.cluster&&a.account===t.account&&a.region===t.region}(e,t,a)).sort((e,t)=>t.name.localeCompare(e.name))}var lc=Object.getOwnPropertyDescriptor;let ic=class extends Mt.Component{constructor(){super(...arguments),this.resizeServerGroup=()=>{Jo.show(this.props,this.context.services)}}render(){return Mt.createElement(Ua,{onClick:this.resizeServerGroup},"Resize")}};ic.contextType=g,ic=((e,t,a,n)=>{for(var r,l=n>1?void 0:n?lc(t,a):t,i=e.length-1;i>=0;i--)(r=e[i])&&(l=r(l)||l);return l})([ce("AmazonServerGroupActions.resize")],ic);class sc extends Mt.Component{constructor(){super(...arguments),this.destroyServerGroup=()=>{const{app:e,serverGroup:t}=this.props,a={application:e,title:"Destroying "+t.name,onTaskComplete:()=>{this.props.stateService.includes("**.serverGroup",n)&&this.props.stateService.go("^")}},n={name:t.name,accountId:t.account,region:t.region},r={header:"Really destroy "+t.name+"?",buttonText:"Destroy "+t.name,account:t.account,taskMonitorConfig:a,interestingHealthProviderNames:void 0,submitMethod:a=>this.context.services.serverGroupWriter.destroyServerGroup(t,e,a),askForReason:!0,platformHealthOnlyShowOverride:e.attributes.platformHealthOnlyShowOverride,platformHealthType:"Amazon"};St.addDestroyWarningMessage(e,t,r),e.attributes.platformHealthOnlyShowOverride&&e.attributes.platformHealthOnly&&(r.interestingHealthProviderNames=["Amazon"]),w.confirm(r)},this.disableServerGroup=()=>{const{app:e,serverGroup:t}=this.props,a={application:e,title:"Disabling "+t.name},n={header:"Really disable "+t.name+"?",buttonText:"Disable "+t.name,account:t.account,interestingHealthProviderNames:void 0,taskMonitorConfig:a,platformHealthOnlyShowOverride:e.attributes.platformHealthOnlyShowOverride,platformHealthType:"Amazon",submitMethod:a=>this.context.services.serverGroupWriter.disableServerGroup(t,e.name,a),askForReason:!0};St.addDisableWarningMessage(e,t,n),e.attributes.platformHealthOnlyShowOverride&&e.attributes.platformHealthOnly&&(n.interestingHealthProviderNames=["Amazon"]),w.confirm(n)},this.enableServerGroup=()=>{if(!this.isRollbackEnabled())return void this.showEnableServerGroupModal();const e={header:"Rolling back?",body:"Spinnaker provides an orchestrated rollback feature to carefully restore a different version of this\n server group. Do you want to use the orchestrated rollback?",buttonText:"Yes, take me to the rollback settings modal",cancelButtonText:"No, I just want to enable the server group"};w.confirm(e).then(()=>this.rollbackServerGroup()).catch(e=>{"footer"===(null==e?void 0:e.source)&&this.showEnableServerGroupModal()})},this.rollbackServerGroup=()=>{const{app:e,serverGroup:t}=this.props,a=function(e,t,a){let n,r=t;if(t.isDisabled&&(n=t,r=rc(e,t,a).filter(e=>!e.isDisabled).sort((e,t)=>{var a,n;return((null==(a=t.instanceCounts)?void 0:a.total)||0)-((null==(n=e.instanceCounts)?void 0:n.total)||0)||(t.createdTime||0)-(e.createdTime||0)})[0],!r))return;const l=rc(e,r,a);return 1!==l.length||n||(n=l[0]),{allServerGroups:l,previousServerGroup:n,serverGroup:r}}(e.name,t,e.getDataSource("serverGroups").data);a&&nc.show({application:e,...a},this.context.services)},this.cloneServerGroup=()=>{const{app:e,serverGroup:t}=this.props;this.context.services.serverGroupCommandBuilder.buildServerGroupCommandFromExisting(e,t).then(a=>{const n=`Clone ${t.name}`;Ko.show({title:n,application:e,command:a},this.context.services)})}}isEnableLocked(){if(this.props.serverGroup.isDisabled){if((this.props.serverGroup.runningTasks||[]).filter(e=>ta(e,"execution.stages",[]).some(e=>"resizeServerGroup"===e.type)).length)return!0}return!1}isRollbackEnabled(){const{app:e,serverGroup:t}=this.props;return a=e.name,n=t,r=e.getDataSource("serverGroups").data,!n.isDisabled||rc(a,n,r).some(e=>!e.isDisabled);var a,n,r}hasDisabledInstances(){return this.props.serverGroup.isDisabled||ta(this.props.serverGroup,"instanceCounts.outOfService",0)>0}showEnableServerGroupModal(){const{app:e,serverGroup:t}=this.props,a={application:e,title:"Enabling "+t.name},n={header:"Really enable "+t.name+"?",buttonText:"Enable "+t.name,account:t.account,interestingHealthProviderNames:void 0,taskMonitorConfig:a,platformHealthOnlyShowOverride:e.attributes.platformHealthOnlyShowOverride,platformHealthType:"Amazon",submitMethod:a=>this.context.services.serverGroupWriter.enableServerGroup(t,e,a),askForReason:!0};e.attributes.platformHealthOnlyShowOverride&&e.attributes.platformHealthOnly&&(n.interestingHealthProviderNames=["Amazon"]),w.confirm(n)}render(){const{app:t,serverGroup:a}=this.props,n=e.feature&&e.feature.entityTags,r=kt.buildClusterTargets(a);return Mt.createElement(Mt.Fragment,null,hn.adHocInfraWritesEnabled&&Mt.createElement(La,{className:"dropdown",id:"server-group-actions-dropdown"},Mt.createElement(La.Toggle,{className:"btn btn-sm btn-primary dropdown-toggle"},"Server Group Actions"),Mt.createElement(La.Menu,{className:"dropdown-menu"},this.isRollbackEnabled()&&Mt.createElement(xe,{resource:a,application:t,onClick:this.rollbackServerGroup},"Rollback"),this.isRollbackEnabled()&&Mt.createElement("li",{role:"presentation",className:"divider"}),Mt.createElement(ic,{application:t,serverGroup:a}),!a.isDisabled&&Mt.createElement(xe,{resource:a,application:t,onClick:this.disableServerGroup},"Disable"),this.hasDisabledInstances()&&!this.isEnableLocked()&&Mt.createElement(xe,{resource:a,application:t,onClick:this.enableServerGroup},"Enable"),this.isEnableLocked()&&Mt.createElement("li",{className:"disabled"},Mt.createElement(Va,{value:"Cannot enable this server group until resize operation completes",placement:"left"},Mt.createElement("a",null,Mt.createElement("span",{className:"small glyphicon glyphicon-lock"})," Enable"))),Mt.createElement(xe,{resource:a,application:t,onClick:this.destroyServerGroup},"Destroy"),Mt.createElement("li",null,Mt.createElement("a",{className:"clickable",onClick:this.cloneServerGroup},"Clone")),n&&Mt.createElement(k,{component:a,application:t,entityType:"serverGroup",ownerOptions:r,onUpdate:()=>t.serverGroups.refresh()}))))}}sc.contextType=g;const oc=N(sc);function cc(e,t){const{app:a,serverGroup:n}=e;return new Ta(r=>{(function(e){const{app:t,serverGroup:a}=e;return t.ready().then(()=>{let e=t.serverGroups.data.find(e=>e.name===a.name&&e.account===a.accountId&&e.region===a.region);return e||t.loadBalancers.data.some(t=>t.account===a.accountId&&t.region===a.region&&t.serverGroups.some(t=>t.name===a.name&&(e=t,!0))),e})})(e).then(e=>{Tt.getServerGroup(a.name,n.accountId,n.region,n.name).then(a=>{Object.assign(a,e,{account:n.accountId});const l=tr.awsServerGroupTransformer.normalizeServerGroupDetails(a);if(i.getAccountDetails(l.account).then(e=>{l.accountDetails=e,r.next(l)}),$t(l))t();else{const e=l.asg?l.asg.vpczoneIdentifier:"";if(""!==e){const t=e.split(",")[0];p.listSubnets().then(e=>{const a=e.find(e=>e.id===t);l.subnetType=a.purpose,r.next(l)})}l.disabledDate=ro.getDisabledDate(l),r.next(l)}},t)},t)})}function dc(e){const t=zt.useRef(),a=zt.useRef(),{lines:n,className:r="",style:l={}}=e;return zt.useEffect(()=>t?(a.current=function(e){const t={type:"line",data:{labels:[],datasets:[{data:[]}]},options:{plugins:{tooltip:{mode:"index",itemSort:(e,t)=>{var a,n;const r=e.chart.data.datasets.map(e=>e.label),l=null!=(a=e.dataset.label)?a:r[0],i=null!=(n=t.dataset.label)?n:r[0];return r.indexOf(i)-r.indexOf(l)}}},hover:{mode:"index"},elements:{point:{hitRadius:12,radius:1,hoverRadius:5}},scales:{x:{type:"time",display:!0,scaleLabel:{labelString:"Date"},ticks:{major:{enabled:!0}}},y:{min:0,stacked:!0}}}};return new an(e,t)}(t.current),()=>{var e;return null==(e=a.current)?void 0:e.destroy()}):null,[t.current]),zt.useEffect(()=>{const e=a.current;e&&n&&(e.options.animation=!1,e.data.datasets=n,e.update())},[a.current,n]),zt.createElement("canvas",{ref:t,...l,className:r})}function mc(e){return e.serverGroup&&e.alarm?zt.createElement(uc,{...e}):null}function uc(e){var t,a;const n=null!=(t=e.alarm)?t:{},r=null!=(a=e.serverGroup)?a:{},{account:l,awsAccount:i,region:s,type:o}=r,{metricName:c,namespace:d,statistic:m,period:p}=n,{status:h,result:g}=u(async()=>{var t;const a={namespace:d,statistics:m,period:p};n.dimensions.forEach(e=>a[e.name]=e.value);const r="aws"===o?l:i,u=await It.getMetricStatistics("aws",r,s,c,a);return u.datapoints=u.datapoints||[],null==(t=e.onChartLoaded)||t.call(e,u),u},{datapoints:[],unit:""},[d,m,p,o,l,s,c,n.dimensions]);if("PENDING"===h)return zt.createElement("div",{className:"flex-container-v middle center sp-margin-xl"},zt.createElement(ne,null));if("REJECTED"===h)return zt.createElement(zt.Fragment,null,zt.createElement("div",null,"no data"),zt.createElement("div",null,"something went wrong fetching stats"));if(0===g.datapoints.length)return zt.createElement(zt.Fragment,null,"no data");const v=new Date,f=new Date(Date.now()-864e5),E={label:c,fill:"stack",borderColor:"green",borderWidth:2,data:g.datapoints.map(e=>({x:new Date(e.timestamp),y:ta(e,[n.statistic.toLowerCase()],void 0)}))},y={label:"threshold",borderWidth:1,borderColor:"red",data:[{x:f,y:n.threshold},{x:v,y:n.threshold}]};return zt.createElement(dc,{lines:[E,y]})}an.register(nn,rn,ln,sn,on,cn,dn,mn,un);const pc={ASGAverageCPUUtilization:"CPUUtilization",ASGAverageNetworkIn:"NetworkIn",ASGAverageNetworkOut:"NetworkOut",ALBRequestCountPerTarget:"RequestCountPerTarget"},hc=({config:e,serverGroup:t,updateUnit:a})=>{const[n,r]=zt.useState({alarmName:null,alarmArn:null,metricName:null,namespace:null,statistic:"Average",dimensions:[],period:60,threshold:e.targetValue,comparisonOperator:"GreaterThanThreshold",okactions:[],insufficientDataActions:[],alarmActions:[],evaluationPeriods:null,alarmDescription:null,unit:null});zt.useEffect(()=>{(()=>{const a=null==e?void 0:e.customizedMetricSpecification,l=null==e?void 0:e.predefinedMetricSpecification,i={...n,dimensions:(null==a?void 0:a.dimensions)||[{name:"AutoScalingGroupName",value:t.name}],metricName:(null==a?void 0:a.metricName)||pc[null==l?void 0:l.predefinedMetricType],namespace:(null==a?void 0:a.namespace)||"AWS/EC2",threshold:null==e?void 0:e.targetValue};if(a&&(i.statistic=null==a?void 0:a.statistic),l&&"ALBRequestCountPerTarget"===l.predefinedMetricType&&(i.statistic="Sum",i.namespace="AWS/ApplicationELB",null==l?void 0:l.resourceLabel)){const e=null==l?void 0:l.resourceLabel.split("/"),t=e.slice(0,3).join("/"),a=e.slice(3).join("/");i.dimensions=[{name:"LoadBalancer",value:t},{name:"TargetGroup",value:a}]}r(i)})()},[e]);return zt.createElement(mc,{alarm:n,onChartLoaded:e=>{a&&a(e.unit)},serverGroup:t})},gc=({alarm:e,serverGroup:t,updateAvailableMetrics:a})=>{const n=e.dimensions||[],{result:r}=u(()=>It.listMetrics("aws",t.account,t.region,{namespace:e.namespace}).then(e=>{const t=Zt(e,e=>e.dimensions);return aa(t.filter(e=>e).map(e=>e.name)).sort()}).catch(()=>[]),[],[e.namespace,t.name]),i=(e,t,r)=>{const l=[...n];l[r][e]=t,a(l)};return zt.createElement("div",null,zt.createElement("div",{className:"row"},zt.createElement("div",{className:"col-md-12 small"},zt.createElement("h5",null,"Dimensions"))),n.map((t,n)=>zt.createElement("div",{key:`dimension-${n}`,className:"row dimensions-row horizontal middle"},zt.createElement("div",{className:"col-md-6"},zt.createElement(s,{onChange:e=>i("name",e.target.value,n),value:t.name,stringOptions:r})),zt.createElement(l,{onChange:e=>i("value",e.target.value,n),value:t.value}),!e.disableEditingDimensions&&zt.createElement("div",{className:"col-md-1",onClick:()=>(t=>{const n=e.dimensions.filter((e,a)=>a!==t);a(n)})(n)},zt.createElement("a",null,zt.createElement("i",{className:"glyphicon glyphicon-trash clickable"}))))),!e.disableEditingDimensions&&zt.createElement("div",{className:"row"},zt.createElement("div",null,zt.createElement("button",{type:"button",className:"btn btn-block btn-xs add-new",onClick:()=>{const e=[...n,{}];a(e)}},zt.createElement("span",{className:"glyphicon glyphicon-plus-sign sp-margin-xs-left"}),"Add dimension"))))},vc=["AWS/ApplicationELB","AWS/AutoScaling","AWS/AmazonMQ","AWS/Billing","AWS/CloudFront","AWS/CloudSearch","AWS/Events","AWS/DynamoDB","AWS/ECS","AWS/ElastiCache","AWS/EBS","AWS/EC2","AWS/ELB","AWS/ElasticMapReduce","AWS/ES","AWS/Kinesis","AWS/Lambda","AWS/ML","AWS/OpsWorks","AWS/Redshift","AWS/RDS","AWS/Route53","AWS/SNS","AWS/SQS","AWS/S3","AWS/SWF","AWS/StorageGateway","AWS/WAF","AWS/WorkSpaces"];Cr(".MetricSelector {\n font-size: 12px;\n}\n.MetricSelector .simple-input {\n width: 216px;\n}\n.MetricSelector .advanced-input-namespace {\n width: 138px;\n}\n.MetricSelector .advanced-input-metric {\n width: 300px;\n}\n");const fc=({alarm:e,updateAlarm:a,serverGroup:n})=>{var r,l;const i=((null==(l=null==(r=hn)?void 0:r.metrics)?void 0:l.customNamespaces)||[]).concat(vc),[o,c]=zt.useState(!1),d=((null==e?void 0:e.dimensions)||[]).reduce((e,t)=>(e[t.name]=t.value,e),{}),{result:m}=u(()=>{const t="aws"===n.cloudProvider?n.account:null==n?void 0:n.awsAccount,a=o?{namespace:null==e?void 0:e.namespace}:{AutoScalingGroupName:n.name};return It.listMetrics("aws",t,n.region,a).then(e=>(e||[]).map(e=>{return{label:`(${e.namespace}) ${e.name}`,dimensions:[],dimensionValues:(t=e.dimensions||[],t.sort((e,t)=>{var a;return null==(a=e.name)?void 0:a.localeCompare(t.name)}).map(e=>e.value).join(", ")),value:e,...e};var t}).sort((e,t)=>{var a;return null==(a=e.label)?void 0:a.localeCompare(t.label)})).catch(()=>[])},[],[n,null==e?void 0:e.namespace]),p=(m||[]).filter(t=>t.namespace===(null==e?void 0:e.namespace)),h=p.find(t=>t.name===(null==e?void 0:e.metricName)&&t.namespace===(null==e?void 0:e.namespace))||p.find(e=>e.name.match("CPUUtilization"))||p[0],{name:g,namespace:v}=h||{},f=()=>{const t=!o;if(t)d.namespace=null==e?void 0:e.namespace;else{const t={...e,dimension:[{name:"AutoScalingGroupName",value:n.name}]};a(t)}c(t)},E=t=>{const n={...e,metricName:t.name,namespace:t.namespace,dimensions:t.dimensions};a(n)},y=(t,n)=>{const r={...e,metricName:n,namespace:t};a(r)};return zt.useEffect(()=>{h&&E(h)},[h]),o?zt.createElement("div",{className:"MetricSelector"},zt.createElement("div",{className:"horizontal middle"},zt.createElement(s,{value:v,onChange:t=>y(t.target.value,null==e?void 0:e.metricName),stringOptions:i,inputClassName:"advanced-input-namespace sp-margin-m-right"}),zt.createElement(s,{value:g,onChange:t=>y(null==e?void 0:e.namespace,t.target.value),stringOptions:m.map(e=>e.name),placeholder:"name",searchable:!0,inputClassName:"advanced-input-metric"})),zt.createElement("div",{className:"vertical"},!Boolean(m.length)&&zt.createElement("span",{className:"input-label"},zt.createElement("b",null,"Note:")," no metrics found for selected namespace + dimensions"),zt.createElement("a",{className:"clickable",onClick:f},zt.createElement("span",{className:"sp-margin-s-yaxis sp-margin-xs-right"},"Only show metrics for this auto scaling group"),zt.createElement(t,{id:"aws.scalingPolicy.search.restricted"}))),zt.createElement(gc,{alarm:e,serverGroup:n,updateAvailableMetrics:t=>{const n={...e,dimensions:t};a(n)}})):zt.createElement("div",{className:"MetricSelector horizontal middle"},zt.createElement(s,{value:h,onChange:e=>E(e.target.value),options:m,clearable:!1,inputClassName:"sp-margin-s-right simple-input"}),zt.createElement("a",{className:"clickable",onClick:f},zt.createElement("span",{className:"sp-margin-xs-right"},"Search all metrics"),zt.createElement(t,{id:"aws.scalingPolicy.search.all"})))};Cr(".TargetMetricFields .metric-select-input {\n font-size: 12px;\n width: 180px;\n}\n.TargetMetricFields .target-input {\n width: 120px;\n}\n");const Ec=({allowDualMode:e,cloudwatch:t,command:a,isCustomMetric:n,app:r,serverGroup:l,toggleMetricType:i,updateCommand:o})=>{var c,m,u,p;const[h,g]=zt.useState(null),v=(e,t)=>{const n=Ht(a);ia(n,e,t),o(n)};return zt.createElement("div",{className:"TargetMetricFields sp-margin-l-xaxis"},zt.createElement("p",null,"With target tracking policies, Amazon will automatically adjust the size of your ASG to keep the selected metric as close as possible to the selected value."),t&&zt.createElement("p",null,zt.createElement("b",null,"Note:"),' metrics must be sent to Amazon CloudWatch before they can be used in auto scaling. If you do not see a metric below, click "Configure available metrics" in the server group details to set up forwarding from Atlas to CloudWatch.'),zt.createElement("div",{className:"row sp-margin-s-yaxis"},zt.createElement("div",{className:"col-md-2 sm-label-right"},"Metric"),zt.createElement("div",{className:"col-md-10 content-fields"},!n&&zt.createElement(s,{value:null==(c=a.targetTrackingConfiguration.predefinedMetricSpecification)?void 0:c.predefinedMetricType,stringOptions:["ASGAverageCPUUtilization","ASGAverageNetworkOut","ASGAverageNetworkIn","ALBRequestCountPerTarget"],onChange:e=>v("targetTrackingConfiguration.predefinedMetricSpecification.predefinedMetricType",e.target.value),inputClassName:"metric-select-input"}),n&&zt.createElement(fc,{alarm:a.targetTrackingConfiguration.customizedMetricSpecification,serverGroup:l,updateAlarm:e=>{v("targetTrackingConfiguration.customizedMetricSpecification",e)}}),e&&zt.createElement("a",{className:"clickable",onClick:()=>{const e=Ht(a);n?(ia(e,"targetTrackingConfiguration.predefinedMetricSpecification",{predefinedMetricType:"ASGAverageCPUUtilization"}),ia(e,"targetTrackingConfiguration.customizedMetricSpecification",null)):(ia(e,"targetTrackingConfiguration.predefinedMetricSpecification",null),ia(e,"targetTrackingConfiguration.customizedMetricSpecification",{metricName:"CPUUtilization",namespace:"AWS/EC2",dimensions:[{name:"AutoScalingGroupName",value:l.name}],statistic:"Average"})),o(e),i(n?"predefined":"custom")}},n?"Use a predefined metric":"Select a custom metric"))),!n&&"ALBRequestCountPerTarget"===(null==(m=a.targetTrackingConfiguration.predefinedMetricSpecification)?void 0:m.predefinedMetricType)&&zt.createElement("div",{className:"row sp-margin-s-yaxis"},zt.createElement("div",{className:"col-md-2 sm-label-right"},"Target Group"),zt.createElement("div",{className:"col-md-10 content-fields horizontal"},zt.createElement(s,{value:null==(u=a.targetTrackingConfiguration.predefinedMetricSpecification)?void 0:u.resourceLabel,options:r.loadBalancers.data.filter(e=>e.account===l.account&&e.region===l.region).flatMap(e=>e.targetGroups.filter(e=>l.targetGroups.some(t=>t===e.name)).map(t=>({...t,loadBalancerArn:e.loadBalancerArn}))).map(e=>({label:e.name,value:`${e.loadBalancerArn.substring(e.loadBalancerArn.indexOf("app"))}/${e.targetGroupArn.substring(e.targetGroupArn.indexOf("targetgroup"))}`})),onChange:e=>v("targetTrackingConfiguration.predefinedMetricSpecification.resourceLabel",e.target.value),inputClassName:"metric-select-input"}))),zt.createElement("div",{className:"row sp-margin-s-yaxis"},zt.createElement("div",{className:"col-md-2 sm-label-right"},"Target"),zt.createElement("div",{className:"col-md-10 content-fields horizontal"},n&&zt.createElement("div",{className:"horizontal middle"},zt.createElement(s,{value:null==(p=a.targetTrackingConfiguration.customizedMetricSpecification)?void 0:p.statistic,stringOptions:["Average","Maximum","Minimum","SampleCount","Sum"],onChange:e=>v("targetTrackingConfiguration.customizedMetricSpecification.statistic",e.target.value),inputClassName:"form-control input-sm target-input"}),zt.createElement("span",{className:"sp-margin-xs-xaxis"},"of")),zt.createElement("div",{className:"horizontal middle"},zt.createElement(d,{value:a.targetTrackingConfiguration.targetValue,onChange:e=>v("targetTrackingConfiguration.targetValue",Number.parseInt(e.target.value)),inputClassName:"form-control input-sm sp-margin-xs-right"}),zt.createElement("span",null,h)))),zt.createElement("div",{className:"row"},zt.createElement("div",{className:"col-md-10 col-md-offset-1"},zt.createElement(hc,{config:a.targetTrackingConfiguration,serverGroup:l,unit:h,updateUnit:e=>g(e)}))))};Cr(".TargetTrackingAdditionalSettings {\n font-size: 14px;\n}\n.TargetTrackingAdditionalSettings .row {\n margin-bottom: 10px;\n}\n.TargetTrackingAdditionalSettings .number-input-sm {\n width: 120px;\n}\n");const yc=({command:e,cooldowns:a,policyName:n,updateCommand:r})=>{var l;const i=(t,a)=>{const n={...e};ia(n,t,a),r(n)},s=null==(l=e.targetTrackingConfiguration)?void 0:l.disableScaleIn;return zt.createElement("div",{className:"section-body TargetTrackingAdditionalSettings"},n&&zt.createElement("div",{className:"row"},zt.createElement("div",{className:"col-md-2 sm-label-right"},"Policy Name"),zt.createElement("div",{className:"col-md-10 horizontal middle"},n)),Boolean(e.estimatedInstanceWarmup)&&zt.createElement("div",{className:"row"},zt.createElement("div",{className:"col-md-2 sm-label-right"},"Warmup"),zt.createElement("div",{className:"col-md-10 horizontal middle"},zt.createElement("span",{className:"form-control-static"},"Instances need"),zt.createElement(d,{value:e.estimatedInstanceWarmup,onChange:e=>i("estimatedInstanceWarmup",Number.parseInt(e.target.value)),inputClassName:"form-control number-input-sm sp-margin-xs-xaxis"}),zt.createElement("span",{className:"input-label"}," seconds to warm up "))),zt.createElement("div",{className:"row"},zt.createElement("div",{className:"col-md-2 sm-label-right"},"Scale In"),zt.createElement("div",{className:"col-md-9"},zt.createElement("div",{className:"checkbox"},zt.createElement(o,{text:"Disable Scale-downs",checked:s,onChange:e=>i("targetTrackingConfiguration.disableScaleIn",e.target.checked)}),zt.createElement("div",{className:"small"},zt.createElement("p",null,"This option disables scale-downs for the target tracking policy, while keeping the scale-ups. This means that ASG will not scale down unless you explicitly set up a separate step policy to scale it down."),zt.createElement("p",null,"This is useful when you have special requirements, such as gradual or delayed scale-down."))))),zt.createElement("div",{className:"row"},zt.createElement("div",{className:"col-md-10 col-md-offset-1"},s&&zt.createElement("div",{className:"well"},"This policy will not scale down. Make sure you have another policy (either TT or Step) that will scale down this ASG."),!1===s&&zt.createElement("div",{className:"well"},"This policy will scale both up and down. Make sure you don't have other scaling policies, as they will likely interfere with each other."))),a&&!s&&zt.createElement("div",{className:"row"},zt.createElement("div",{className:"col-md-3 sm-label-right"},zt.createElement("span",{className:"sp-margin-xs-right"},"Scale In Cooldown"),zt.createElement(t,{id:"titus.autoscaling.scaleIn.cooldown"})),zt.createElement("div",{className:"col-md-9 horizontal middle"},zt.createElement(d,{value:e.targetTrackingConfiguration.scaleInCooldown,onChange:e=>i("targetTrackingConfiguration.scaleInCooldown",Number.parseInt(e.target.value)),inputClassName:"sp-margin-xs-xaxis number-input-sm"}),zt.createElement("span",{className:"input-label"}," seconds "))),a&&zt.createElement("div",{className:"row"},zt.createElement("div",{className:"col-md-3 sm-label-right"},zt.createElement("span",{className:"sp-margin-xs-right"},"Scale Out Cooldown"),zt.createElement(t,{id:"titus.autoscaling.scaleOut.cooldown"})),zt.createElement("div",{className:"col-md-9 horizontal middle"},zt.createElement(d,{value:e.targetTrackingConfiguration.scaleOutCooldown,onChange:e=>i("targetTrackingConfiguration.scaleOutCooldown",Number.parseInt(e.target.value)),inputClassName:"sp-margin-xs-xaxis number-input-sm"}),zt.createElement("span",{className:"input-label"}," seconds "))))},bc={buildAlarm:(e,t,a)=>{const n=(null==e?void 0:e.alarms)?e.alarms[0]:{};return{name:n.alarmName,actionsEnabled:!0,alarmActionArns:n.alarmActions,alarmDescription:n.alarmDescription,asgName:a,comparisonOperator:n.comparisonOperator,dimensions:n.dimensions,evaluationPeriods:n.evaluationPeriods,insufficientDataActionArns:n.insufficientDataActions,metricName:n.metricName,namespace:n.namespace,okActionArns:n.okactions,period:n.period,region:t,statistic:n.statistic,threshold:n.threshold,unit:n.unit}},buildStepPolicy:(e,t,a)=>{var n,r;const l=e.stepAdjustments.map(e=>{const a={scalingAdjustment:Math.abs(e.scalingAdjustment)};return void 0!==e.metricIntervalUpperBound&&(a.metricIntervalUpperBound=e.metricIntervalUpperBound+t),void 0!==e.metricIntervalLowerBound&&(a.metricIntervalLowerBound=e.metricIntervalLowerBound+t),a});return{estimatedInstanceWarmup:null!=(r=null!=(n=e.estimatedInstanceWarmup)?n:a)?r:600,metricAggregationType:"Average",stepAdjustments:l}},buildSimplePolicy:e=>{var t,a;return{cooldown:null!=(t=e.cooldown)?t:600,scalingAdjustment:null!=(a=Math.abs(e.scalingAdjustment))?a:1}},buildNewCommand:(e,t,a)=>{var n,r,l;const i={name:a.policyName,adjustmentType:"Step"===e?a.adjustmentType:null,cloudProvider:t.cloudProvider,credentials:t.account,provider:t.type,region:t.region,serverGroupName:t.name};return"Step"===e&&(i.alarm=bc.buildAlarm(a,t.region,t.name),i.minAdjustmentMagnitude=null!=(n=a.minAdjustmentMagnitude)?n:1,(null==(r=a.stepAdjustments)?void 0:r.length)?i.step=bc.buildStepPolicy(a,i.alarm.threshold,i.cooldown):i.simple=bc.buildSimplePolicy(a)),"TargetTracking"===e&&(i.estimatedInstanceWarmup=null!=(l=a.estimatedInstanceWarmup)?l:600,i.targetTrackingConfiguration={...a.targetTrackingConfiguration}),i},prepareCommandForUpsert:(e,t)=>{const a=Ht(e);return"PercentChangeInCapacity"!==a.adjustmentType&&delete a.minAdjustmentMagnitude,a.step?a.step.stepAdjustments.forEach(e=>{t&&(e.scalingAdjustment=0-e.scalingAdjustment,delete a.step.estimatedInstanceWarmup),void 0!==e.metricIntervalLowerBound&&(e.metricIntervalLowerBound-=a.alarm.threshold),void 0!==e.metricIntervalUpperBound&&(e.metricIntervalUpperBound-=a.alarm.threshold)}):t&&(e.simple.scalingAdjustment=0-e.simple.scalingAdjustment),a}},Cc=({app:e,closeModal:t,dismissModal:a,policy:n,serverGroup:r})=>{var l;const[i,s]=zt.useState(Boolean(null==(l=n.targetTrackingConfiguration)?void 0:l.customizedMetricSpecification)),[o,c]=zt.useState({});zt.useEffect(()=>{const e=bc.buildNewCommand("TargetTracking",r,n);c(e)},[]);const d=n.policyName?"Update":"Create";return zt.createElement(Pt,{closeModal:t,dismissModal:a,title:`${d} scaling policy`,application:e,description:`${d} scaling policy for ${r.name}`,initialValues:o,mapValuesToTask:()=>({application:e,job:[{type:"upsertScalingPolicy",...o}]}),render:()=>zt.createElement("div",{className:"modal-body"},zt.createElement("h4",{className:"section-heading"},"Target Metric"),zt.createElement(Ec,{allowDualMode:!0,cloudwatch:!1,command:o,isCustomMetric:i,app:e,serverGroup:r,toggleMetricType:e=>s("custom"===e),updateCommand:c}),zt.createElement("h4",{className:"section-heading"},"Additional Settings"),zt.createElement(yc,{command:o,cooldowns:!1,policyName:n.policyName,updateCommand:c}))})};function Nc(e){const[a,n]=Mt.useState(null),r=e=>{n(e.currentTarget.id)},l="step"===a?"card active":"card",i="targetTracking"===a?"card active":"card",s="aws.scalingPolicy.additionalHelp",o=!!x.getHelpField(s);return Mt.createElement(Oa,{show:!0,onHide:e.showCallback},Mt.createElement(Oa.Header,{closeButton:!0},Mt.createElement("h3",null,"Select a policy type")),Mt.createElement(Oa.Body,null,Mt.createElement("div",{className:"card-choices"},Mt.createElement("div",{className:i,onClick:r,id:"targetTracking"},Mt.createElement("h3",null,"Target Tracking"),Mt.createElement("div",null,"Continuously adjusts the size of the ASG to keep a specified metric at the target value")),Mt.createElement("div",{className:l,onClick:r,id:"step"},Mt.createElement("h3",null,"Step"),Mt.createElement("div",null,"Rule-based scaling, with the ability to define different scaling amounts depending on the magnitude of the alarm breach"))),o&&Mt.createElement(ge,{type:"info",message:Mt.createElement(t,{id:s,expand:!0})}),e.warnOnMinMaxCapacity&&Mt.createElement(ge,{type:"warning",message:Mt.createElement(Mt.Fragment,null,Mt.createElement("p",null,"This server group's ",Mt.createElement("em",null,"min")," and ",Mt.createElement("em",null,"max")," capacity are identical, so scaling policies will have ",Mt.createElement("b",null,"no effect.")),Mt.createElement("p",null,"Scaling policies work by adjusting the server group's ",Mt.createElement("em",null,"desired")," capacity to a value between the min and max."))})),Mt.createElement(Oa.Footer,null,Mt.createElement("button",{className:"btn btn-default",onClick:e.showCallback},"Cancel"),Mt.createElement("button",{className:"btn btn-primary",disabled:!a,onClick:()=>{e.typeSelectedCallback(a)}},"Next")))}Cr(".ScalingPolicyAdditionalSettings .section-additional-settings .row {\n margin-bottom: 10px;\n}\n.ScalingPolicyAdditionalSettings .section-additional-settings .number-input-sm {\n width: 60px;\n}\n");const wc=({command:e,isInstanceType:a,isNew:n,operator:r,updateCommand:l})=>{var i,s,o,c;const m=(t,a)=>{const n={...e};ia(n,t,a),l(n)};return zt.createElement("div",{className:"ScalingPolicyAdditionalSettings"},zt.createElement("h4",{className:"section-heading"},"Additional Settings"),zt.createElement("div",{className:"section-body section-additional-settings"},!n&&zt.createElement("div",{className:"row"},zt.createElement("div",{className:"col-md-2 sm-label-right"},"Policy Name"),zt.createElement("div",{className:"col-md-10 horizontal middle"},zt.createElement("span",{className:"form-control-static select-placeholder"},e.name))),!a&&zt.createElement("div",{className:"row"},zt.createElement("div",{className:"col-md-2 sm-label-right"},"Adjustment Step"),zt.createElement("div",{className:"col-md-10 horizontal middle"},zt.createElement("span",{className:"form-control-static select-placeholder"},`${r} instances in increments of at least `),zt.createElement(d,{value:e.minAdjustmentMagnitude,onChange:e=>m("minAdjustmentMagnitude",Number.parseInt(e.target.value)),inputClassName:"sp-margin-xs-xaxis input-sm number-input-sm"}),zt.createElement("span",{className:"input-label"}," instance(s) "))),Boolean(e.simple)&&zt.createElement("div",{className:"row"},zt.createElement("div",{className:"col-md-2 sm-label-right"},"Cooldown"),zt.createElement("div",{className:"col-md-10 horizontal middle"},zt.createElement("span",{className:"form-control-static select-placeholder"}," Wait at least "),zt.createElement(d,{value:null==(i=e.simple)?void 0:i.cooldown,onChange:e=>m("simple.cooldown",Number.parseInt(e.target.value)),inputClassName:"sp-margin-xs-xaxis input-sm number-input-sm"}),zt.createElement("span",{className:"input-label"}," seconds before another scaling event "))),Boolean(null==(s=e.step)?void 0:s.estimatedInstanceWarmup)&&"Remove"!==r&&zt.createElement("div",{className:"row"},zt.createElement("div",{className:"col-md-2 sm-label-right"},"Warmup"),zt.createElement("div",{className:"col-md-10 horizontal middle"},zt.createElement("span",{className:"form-control-static select-placeholder"},"Instances need"),zt.createElement(d,{value:e.step.estimatedInstanceWarmup,onChange:e=>m("step.estimatedInstanceWarmup",Number.parseInt(e.target.value)),inputClassName:"sp-margin-xs-xaxis input-sm number-input-sm"}),zt.createElement("span",{className:"input-label"}," seconds to warm up after each step "))),Boolean(null==(o=e.step)?void 0:o.cooldown)&&"Remove"!==r&&zt.createElement("div",{className:"row"},zt.createElement("div",{className:"col-md-2 sm-label-right"},zt.createElement("span",{className:"sp-margin-xs-right"},"Cooldown"),zt.createElement(t,{id:`${e.cloudProvider||e.provider}.autoscaling.cooldown`})),zt.createElement("div",{className:"col-md-10 horizontal middle"},zt.createElement(d,{value:null==(c=e.step)?void 0:c.cooldown,onChange:e=>m("step.cooldown",Number.parseInt(e.target.value)),inputClassName:"sp-margin-xs-xaxis input-sm number-input-sm"}),zt.createElement("span",{className:"input-label"}," seconds ")))))};Cr(".AlarmConfigurer {\n font-size: 12px;\n margin: 0px;\n}\n.AlarmConfigurer .configurer-field-lg {\n width: 90px;\n}\n.AlarmConfigurer .configurer-field-small {\n width: 32px;\n}\n.AlarmConfigurer .configurer-field-med {\n width: 60px;\n}\n.AlarmConfigurer .number-input-field {\n margin: 0px;\n}\n");const Sc=["Average","Maximum","Minimum","SampleCount","Sum"],kc=[{label:">=",value:"GreaterThanOrEqualToThreshold"},{label:">",value:"GreaterThanThreshold"},{label:"<=",value:"LessThanOrEqualToThreshold"},{label:"<",value:"LessThanThreshold"}],Tc=[{label:"1 minute",value:60},{label:"5 minutes",value:300},{label:"15 minutes",value:900},{label:"1 hour",value:3600},{label:"4 hours",value:14400},{label:"1 day",value:86400}],Ic=({alarm:e,multipleAlarms:t,serverGroup:a,stepAdjustments:n,stepsChanged:r,updateAlarm:l})=>{var i,o;const c=0===(null==(i=e.comparisonOperator)?void 0:i.indexOf("Greater"))?"max":"min",[m,u]=zt.useState(null==e?void 0:e.unit),p=yt(c);zt.useEffect(()=>{if(n&&void 0!==p){const t="max"===c?"metricIntervalLowerBound":"metricIntervalUpperBound",a={scalingAdjustment:1,[t]:e.threshold};r([a])}},[c]),zt.useEffect(()=>{const t="max"===c?"metricIntervalLowerBound":"metricIntervalUpperBound";if(null==n?void 0:n.length){const a=[...n];a[0][t]=e.threshold,r(a)}},[e.threshold]);const h=(t,a)=>{const n={...e,[t]:a};l(n)};return zt.createElement("div",{className:"AlarmConfigurer"},t&&zt.createElement("div",{className:"row"},zt.createElement("div",{className:"col-md-12"},zt.createElement("div",{className:"alert alert-warning"},zt.createElement("p",null,zt.createElement("i",{className:"fa fa-exclamation-triangle"})," This scaling policy is configured with multiple alarms. You are only editing the first alarm."),zt.createElement("p",null,"To edit or remove the additional alarms, you will need to use the AWS console.")))),(null==(o=e.alarmActionArns)?void 0:o.length)>1&&zt.createElement("div",{className:"row"},zt.createElement("div",{className:"col-md-12"},zt.createElement("div",{className:"alert alert-warning"},zt.createElement("p",null,zt.createElement("i",{className:"fa fa-exclamation-triangle"})," This alarm is used in multiple scaling policies. Any changes here will affect those other scaling policies.")))),zt.createElement("div",{className:"row sp-margin-s-yaxis"},zt.createElement("div",{className:"col-md-2 sm-label-right"},"Whenever"),zt.createElement("div",{className:"col-md-10 horizontal"},zt.createElement(s,{value:e.statistic,onChange:e=>h("statistic",e.target.value),stringOptions:Sc,clearable:!1,inputClassName:"sp-margin-xs-right configurer-field-lg"}),zt.createElement("span",{className:"input-label sp-margin-xs-right sp-margin-s-top"}," of "),zt.createElement(fc,{alarm:e,serverGroup:a,updateAlarm:e=>{l(e)}}))),zt.createElement("div",{className:"row sp-margin-s-yaxis"},zt.createElement("div",{className:"col-md-2 sm-label-right"},"is"),zt.createElement("div",{className:"col-md-10 horizontal middle"},zt.createElement(s,{value:e.comparisonOperator,onChange:e=>h("comparisonOperator",e.target.value),options:kc,clearable:!1,inputClassName:"sp-margin-s-right configurer-field-small"}),zt.createElement("div",{className:"sp-margin-xl-left"},zt.createElement(d,{value:e.threshold,onChange:e=>h("threshold",Number.parseInt(e.target.value)),inputClassName:"sp-margin-xs-right configurer-field-lg"})),zt.createElement("span",{className:"input-label"},m))),zt.createElement("div",{className:"row sp-margin-s-yaxis"},zt.createElement("div",{className:"col-md-2 sm-label-right"},"for at least"),zt.createElement("div",{className:"col-md-10 horizontal middle"},zt.createElement(d,{value:e.evaluationPeriods,onChange:e=>h("evaluationPeriods",Number.parseInt(e.target.value)),inputClassName:"configurer-field-med number-input-field"}),zt.createElement("span",{className:"input-label sp-margin-s-xaxis"}," consecutive period(s) of "),zt.createElement(s,{value:e.period,onChange:e=>h("period",e.target.value),options:Tc,clearable:!1,inputClassName:"sp-margin-xs-right configurer-field-lg"}))),zt.createElement("div",{className:"row sp-margin-s-yaxis"},zt.createElement("div",{className:"col-md-10 col-md-offset-1"},e&&zt.createElement("div",null,zt.createElement(mc,{alarm:e,serverGroup:a,onChartLoaded:e=>u(e.unit)})))))};Cr(".SimplePolicyAction .action-input {\n width: 65px;\n}\n.SimplePolicyAction .adjustment-type-input {\n width: 110px;\n}\n");const Pc=({adjustmentType:e,adjustmentTypeChanged:t,operator:a,scalingAdjustment:n,updateScalingAdjustment:r})=>{const l="Set to"===a?["instances"]:["instances","percent of group"],[i,o]=zt.useState(e),[c,m]=zt.useState(n);return zt.createElement("div",{className:"SimplePolicyAction row"},zt.createElement("div",{className:"col-md-10 col-md-offset-1 horizontal middle"},zt.createElement(s,{value:a,stringOptions:["Add","Remove","Set to"],onChange:a=>{return n=a.target.value,void t(n,e);var n},clearable:!1,inputClassName:"action-input"}),zt.createElement(d,{value:c,min:1,onChange:e=>{return t=Number.parseInt(e.target.value),m(t),void r(t);var t},inputClassName:"action-input"}),zt.createElement(s,{value:i,stringOptions:l,onChange:e=>{return n=e.target.value,o(n),void t(a,n);var n},clearable:!1,inputClassName:"adjustment-type-input"})))};Cr(".StepPolicyAction .step-policy-row {\n padding: 5px 0;\n border-bottom: 1px solid var(--color-seashell);\n}\n.StepPolicyAction .step-policy-row .action-input {\n width: 65px !important;\n}\n.StepPolicyAction .step-policy-row .adjustment-type-input {\n width: 110px;\n}\n.StepPolicyAction .step-policy-row .remove-step-action-icon {\n margin-left: auto;\n}\n");const Ac=({adjustmentType:e,adjustmentTypeChanged:t,alarm:a,isMin:n,operator:r,step:l,stepAdjustments:i,stepsChanged:o})=>{const c=null==a?void 0:a.comparisonOperator.includes("Equal"),m=["Add","Remove","Set to"],u="Set to"===r?["instances"]:["instances","percent of group"],p=(null==l?void 0:l.stepAdjustments)||i,h=(e,t)=>{const a=[...p];a[t]=e,o(a)};return zt.createElement("div",{className:"StepPolicyAction row"},null==p?void 0:p.map((l,i)=>zt.createElement("div",{key:`step-adjustment-${i}`,className:"step-policy-row col-md-10 col-md-offset-1 horizontal middle"},Boolean(i)?zt.createElement("span",{className:"action-input sp-margin-xs-left"},r):zt.createElement(s,{value:r,stringOptions:m,onChange:a=>{return n=a.target.value,void t(n,e);var n},clearable:!1,inputClassName:"action-input sp-margin-xs-right"}),zt.createElement(d,{value:l.scalingAdjustment,min:1,onChange:e=>h({...l,scalingAdjustment:Number.parseInt(e.target.value)},i),inputClassName:"action-input"}),Boolean(i)?zt.createElement("span",{className:"sp-margin-xs-left"},e):zt.createElement(s,{value:e,stringOptions:u,onChange:e=>{return a=e.target.value,void t(r,a);var a},clearable:!1,inputClassName:"adjustment-type-input sp-margin-xs-left"}),zt.createElement("span",{className:"sp-margin-xs-xaxis"}," ","when ",zt.createElement("b",null,null==a?void 0:a.metricName)," is"," "),i===p.length-1&&zt.createElement("span",null,` ${n?"less":"greater"} than${!Boolean(i)||c?" or equal to":""} ${n?l.metricIntervalUpperBound||"":l.metricIntervalLowerBound||""} `),i<p.length-1&&zt.createElement(zt.Fragment,null,zt.createElement("span",{className:"sp-margin-xs-xaxis"},"between"),n?zt.createElement(d,{value:l.metricIntervalLowerBound,max:l.metricIntervalUpperBound,step:.1,onChange:e=>h({...l,metricIntervalLowerBound:Number.parseFloat(e.target.value)},i),inputClassName:"action-input"}):zt.createElement("span",null,l.metricIntervalLowerBound),zt.createElement("span",{className:"sp-margin-xs-xaxis"},"and"),n?zt.createElement("span",null,l.metricIntervalUpperBound):zt.createElement(d,{value:l.metricIntervalUpperBound,min:l.metricIntervalLowerBound,step:.1,onChange:e=>h({...l,metricIntervalUpperBound:Number.parseFloat(e.target.value)},i),inputClassName:"action-input"})),Boolean(i)&&zt.createElement("a",{className:"glyphicon glyphicon-trash clickable sp-margin-xs-xaxis remove-step-action-icon",onClick:()=>(e=>{const t=p.filter((t,a)=>a!==e);o(t)})(i)}))),zt.createElement("div",{className:"row sp-margin-s"},zt.createElement("div",{className:"col-md-10 col-md-offset-1"},zt.createElement("button",{type:"button",className:"btn btn-block btn-sm add-new",onClick:()=>{const e=[...p,{scalingAdjustment:1}];o(e)}},zt.createElement("span",{className:"glyphicon glyphicon-plus-sign"}),"Add step"))),zt.createElement("div",{className:"row sp-margin-s-xaxis"},zt.createElement("div",{className:"col-md-10 col-md-offset-1"},zt.createElement("a",{href:"http://docs.aws.amazon.com/autoscaling/latest/userguide/as-scale-based-on-demand.html#as-scaling-steps",target:"_blank"},zt.createElement("i",{className:"far fa-file-alt sp-margin-xs-right"}),"Documentation"))))},Gc=({app:e,closeModal:t,dismissModal:a,policy:n,serverGroup:r})=>{var l,i,s;const o={closeModal:t,dismissModal:a},[c,d]=zt.useState({});zt.useEffect(()=>{const e=bc.buildNewCommand("Step",r,n);d(e)},[]);const m=(null==(l=n.stepAdjustments)?void 0:l.length)?n.stepAdjustments[0].scalingAdjustment:n.scalingAdjustment,[u,p]=zt.useState("ExactCapacity"===c.adjustmentType?"Set to":m>0?"Add":"Remove"),h="ExactCapacity"===c.adjustmentType||"ChangeInCapacity"===c.adjustmentType?"instances":"percent of group",g=c.step,v=n.policyARN?"Edit":"Create",f=0===(null==(s=null==(i=null==c?void 0:c.alarm)?void 0:i.comparisonOperator)?void 0:s.indexOf("Greater"))?"max":"min",E=e=>{const t="min"===f?"metricIntervalLowerBound":"metricIntervalUpperBound",a="metricIntervalLowerBound"===t?"metricIntervalUpperBound":"metricIntervalLowerBound",n=e.stepAdjustments;(n||[]).forEach((e,r)=>{n.length>r+1&&(n[r+1][a]=e[t])}),delete n[n.length-1][t]},y=e=>{const t=Ht(c);t.simplescalingAdjustment=e,d(t)},b=e=>{const t=Ht(c);t.step.stepAdjustments=e,E(t.step),d(t)},C=(e,t)=>{p(e);const a="instances"!==t?"PercentChangeInCapacity":"Set to"===e?"ExactCapacity":"ChangeInCapacity";d({...c,adjustmentType:a})},N=()=>{const e=Ht(c),t=c.step?c.step.estimatedInstanceWarmup:c.simple.cooldown;if(c.step)delete e.step,e.simple=bc.buildSimplePolicy({cooldown:t});else{const a=[{scalingAdjustment:c.simple.scalingAdjustment}];"min"===f?a[0].metricIntervalUpperBound=0:a[0].metricIntervalLowerBound=0;const n={estimatedInstanceWarmup:t,stepAdjustments:a};delete e.simple,e.step=bc.buildStepPolicy(n,e.alarm.threshold,t),E(e.step)}d(e)};return zt.createElement(Pt,{...o,title:`${v} scaling policy`,application:e,description:`${v} scaling policy for ${r.name}`,initialValues:c,mapValuesToTask:()=>{const t=bc.prepareCommandForUpsert(c,"Remove"===u);return{application:e,job:[{type:t.type||"upsertScalingPolicy",...t}]}},render:()=>{var e,t,a,l,i;return zt.createElement("div",null,zt.createElement("h4",{className:"section-heading"},"Conditions"),zt.createElement("div",{className:"section-body"},zt.createElement(Ic,{alarm:c.alarm,multipleAlarms:Boolean((null==(e=null==n?void 0:n.alarms)?void 0:e.length)>1),serverGroup:r,stepAdjustments:c.step.stepAdjustments,stepsChanged:b,updateAlarm:e=>d({...c,alarm:e})})),zt.createElement("h4",{className:"section-heading"},"Actions"),zt.createElement("div",{className:"section-body"},!(null==(t=c.alarm)?void 0:t.metricName)&&zt.createElement("h4",{className:"text-center"},"Select a metric"),(null==(a=c.alarm)?void 0:a.metricName)&&!g&&zt.createElement("div",null,zt.createElement("div",{className:"row"},zt.createElement("div",{className:"col-md-10 col-md-offset-1"},zt.createElement("p",null,"This is a simple scaling policy. To declare different actions based on the magnitude of the alarm,",zt.createElement("b",null,"switch to a",zt.createElement("a",{className:"clickable sp-margin-xs-l",onClick:N},"step policy"),".")))),zt.createElement(Pc,{adjustmentType:h,adjustmentTypeChanged:C,operator:u,scalingAdjustment:null==(l=c.simple)?void 0:l.scalingAdjustment,updateScalingAdjustment:y})),(null==(i=c.alarm)?void 0:i.metricName)&&g&&zt.createElement(Ac,{adjustmentType:h,adjustmentTypeChanged:C,alarm:c.alarm,isMin:"min"===f,operator:u,step:c.step,stepsChanged:b})),zt.createElement(wc,{command:c,isInstanceType:"instances"===h,isNew:Boolean(!n.policyARN),operator:u,updateCommand:d}))}})};class xc extends Mt.Component{constructor(e){super(e),this.handleClick=()=>{this.setState({showSelection:!0})},this.typeSelected=e=>{this.setState({typeSelection:e,showSelection:!1,showModal:!0}),"step"===e&&this.createStepPolicy(),"targetTracking"===e&&this.createTargetTrackingPolicy()},this.showModalCallback=()=>{this.setState({showSelection:!1,showModal:!1,typeSelection:null})},this.state={showSelection:!1,showModal:!1,typeSelection:null}}createStepPolicy(){const{serverGroup:e,application:t}=this.props,a={app:t,policy:tr.awsServerGroupTransformer.constructNewStepScalingPolicyTemplate(e),serverGroup:e};E.show(Gc,a,{dialogClassName:"wizard-modal modal-lg"})}createTargetTrackingPolicy(){const{serverGroup:e,application:t}=this.props,a={app:t,policy:tr.awsServerGroupTransformer.constructNewTargetTrackingPolicyTemplate(),serverGroup:e};E.show(Cc,a,{dialogClassName:"wizard-modal modal-lg"})}render(){const{min:e,max:t}=this.props.serverGroup.capacity;return Mt.createElement("div",null,Mt.createElement("a",{className:"clickable",onClick:this.handleClick},"Create new scaling policy"),this.state.showSelection&&Mt.createElement(Nc,{warnOnMinMaxCapacity:e===t,typeSelectedCallback:this.typeSelected,showCallback:this.showModalCallback}))}}class Dc{static upsertScalingPolicy(e,t){return t.type=t.type||"upsertScalingPolicy",H.executeTask({application:e,description:"Upsert scaling policy "+(t.name||t.serverGroupName),job:[t]})}static deleteScalingPolicy(e,t,a){return H.executeTask({application:e,description:"Delete scaling policy "+a.policyName,job:[{type:"deleteScalingPolicy",cloudProvider:"aws",credentials:t.account,region:t.region,policyName:a.policyName,serverGroupName:t.name}]})}}const Bc={GreaterThanOrEqualToThreshold:">=",GreaterThanThreshold:">",LessThanOrEqualToThreshold:"<=",LessThanThreshold:"<"},Fc=({alarm:e})=>zt.createElement("div",null,zt.createElement("div",null,zt.createElement("b",null,"Whenever"),` ${e.statistic} of ${e.metricName}`),zt.createElement("div",null,zt.createElement("b",null,"for at least"),` ${e.evaluationPeriods} consecutive periods of ${e.period} seconds`)),zc=({policy:e,serverGroup:t})=>{var a;const{adjustmentType:n,alarms:r,cooldown:l,estimatedInstanceWarmup:i,minAdjustmentMagnitude:s,stepAdjustments:o}=e,c=!!l||"decrease"===(null==(a=null==o?void 0:o[0])?void 0:a.operator),d=r[0]||{},m=null==d?void 0:d.comparisonOperator.includes("Greater"),u=e=>"ExactCapacity"===n?`set capacity to ${e.scalingAdjustment} instance${e.scalingAdjustment>1?"s":""}`:`${e.operator} capacity by ${e.absAdjustment}${"PercentChangeInCapacity"===n?"%":" instance"}${"ChangeInCapacity"===n&&e.absAdjustment>1?"s":""}`;return zt.createElement("div",null,zt.createElement(z,{className:"dl-horizontal dl-narrow"},zt.createElement(D,{label:"Whenever",value:`${d.statistic} of ${d.metricName} is ${Bc[d.comparisonOperator]} ${d.threshold}`}),zt.createElement(D,{label:"for at least",value:`${d.evaluationPeriods} consecutive periods of ${d.period} seconds`}),Boolean(null==o?void 0:o.length)&&zt.createElement(D,{label:"then",value:o.map((e,t)=>zt.createElement("div",{key:`step-adjustment-boundary-${t}`},o.length>1&&zt.createElement("span",null,(e=>{const t=void 0!==e.metricIntervalLowerBound&&void 0!==e.metricIntervalUpperBound?`is between ${d.threshold+e.metricIntervalLowerBound} and ${d.threshold+e.metricIntervalUpperBound} `:"",a=m?e.metricIntervalLowerBound:e.metricIntervalUpperBound,n=`is ${m?"greater":"less"} than ${d.threshold+a}`;return`if ${d.metricName} ${t}${n}`})(e)),zt.createElement("span",null,u(e))))}),!Boolean(null==o?void 0:o.length)&&zt.createElement(D,{label:"then",value:u(e)}),Boolean(s)&&zt.createElement(D,{label:"in",value:`increments of at least ${s} instance${s>1?"s":""}`}),Boolean(c)&&zt.createElement(D,{label:"wait",value:`${l} seconds before allowing another scaling activity.`}),Boolean(i)&&zt.createElement(D,{label:"wait",value:`${i} seconds to warm up after each step.`})),zt.createElement(mc,{alarm:d,serverGroup:t}))};Cr(".StepPolicySummary .HoverablePopover {\n text-decoration: none;\n}\n.StepPolicySummary .actions {\n margin: 0 0 15px 0;\n border-bottom: 1px solid var(--color-alto);\n}\n");const Mc=({application:e,policy:t,serverGroup:a})=>{var n,r;const l=a.type||a.cloudProvider||"aws",i=Ge.getValue(l,"serverGroup"),s="aws"===l?t.policyName:t.id,o=i.UpsertStepPolicyModal,c=()=>{const n={app:e,policy:t,serverGroup:a};E.show(o,n,{dialogClassName:"wizard-modal modal-lg"})},d=()=>{const n={application:e,title:`Deleting scaling policy ${s}`},r={type:"deleteScalingPolicy",cloudProvider:l,credentials:a.account,region:a.region,scalingPolicyID:t.id,serverGroupName:a.name};"aws"===l&&(delete r.scalingPolicyID,r.policyName=t.policyName),w.confirm({header:`Really delete ${s}?`,buttonText:"Delete scaling policy",account:a.account,taskMonitorConfig:n,submitMethod:()=>H.executeTask({application:e,description:`Delete scaling policy ${s}`,job:[r]})})};return zt.createElement("div",{className:"StepPolicySummary"},zt.createElement("div",null,!Boolean(null==(n=t.alarms)?void 0:n.length)&&zt.createElement("div",null,"No alarms configured for this policy - it's safe to delete."),Boolean(null==(r=t.alarms)?void 0:r.length)&&t.alarms.map(e=>zt.createElement("div",{key:`step-summary-${t.policyName}`},zt.createElement(re,{Component:()=>zt.createElement(zc,{policy:t,serverGroup:a}),placement:"left",title:t.policyName},zt.createElement("div",null,zt.createElement("div",{className:"label label-default"},L(t.policyType).toUpperCase()),zt.createElement(Fc,{alarm:e}))),zt.createElement("div",{className:"actions"},zt.createElement("button",{className:"btn btn-xs btn-link",onClick:c},zt.createElement("span",{className:"glyphicon glyphicon-cog"}),zt.createElement("span",{className:"sr-only"},"Edit policy")),zt.createElement("button",{className:"btn btn-xs btn-link",onClick:d},zt.createElement("span",{className:"glyphicon glyphicon-trash"}),zt.createElement("span",{className:"sr-only"},"Delete policy")))))))};Cr(".TargetTrackingSummary .HoverablePopover {\n min-height: 600px;\n text-decoration: none;\n}\n.TargetTrackingSummary .actions {\n margin: 0 0 15px 0;\n border-bottom: 1px solid var(--color-alto);\n}\n");const Rc=({application:e,policy:t,serverGroup:a})=>{var n,r,l;const i=a.type||a.cloudProvider||"aws",s=Ge.getValue(i,"serverGroup"),o="aws"===i?t.policyName:t.id,c=s.UpsertTargetTrackingModal,d=s.TargetTrackingChart,m=t.targetTrackingConfiguration;return zt.createElement("div",{className:"TargetTrackingSummary"},zt.createElement(re,{Component:()=>zt.createElement(d,{config:t.targetTrackingConfiguration,serverGroup:a}),placement:"left",title:o},zt.createElement("div",null,zt.createElement("div",{className:"label label-default"},L(t.policyType).toUpperCase()),zt.createElement("div",null,zt.createElement("b",null,"Target"),zt.createElement("span",{className:"sp-margin-xs-left"},(null==(n=m.predefinedMetricSpecification)?void 0:n.predefinedMetricType)||(null==(r=m.customizedMetricSpecification)?void 0:r.metricName)),Boolean(null==(l=m.customizedMetricSpecification)?void 0:l.statistic)&&zt.createElement("span",null,` @ ${m.targetValue}`)))),zt.createElement("div",{className:"actions"},zt.createElement("button",{className:"btn btn-xs btn-link",onClick:()=>{const n={app:e,policy:t,serverGroup:a};E.show(c,n,{dialogClassName:"wizard-modal modal-lg"})}},zt.createElement("span",{className:"glyphicon glyphicon-cog"}),zt.createElement("span",{className:"sr-only"},"Edit policy")),zt.createElement("button",{className:"btn btn-xs btn-link",onClick:()=>{const n={application:e,title:`Deleting scaling policy ${o}`},r={type:"deleteScalingPolicy",cloudProvider:i,credentials:a.account,region:a.region,scalingPolicyID:t.id,serverGroupName:a.name};"aws"===i&&(delete r.scalingPolicyID,r.policyName=t.policyName),w.confirm({header:`Really delete ${o}?`,buttonText:"Delete scaling policy",account:a.account,taskMonitorConfig:n,submitMethod:()=>H.executeTask({application:e,description:`Delete scaling policy ${o}`,job:[r]})})}},zt.createElement("span",{className:"glyphicon glyphicon-trash"}),zt.createElement("span",{className:"sr-only"},"Delete policy"))))},Lc=({application:e,policy:t,serverGroup:a})=>"TargetTrackingScaling"===(t.policyType?t.policyType:t.targetTrackingConfiguration?"TargetTrackingScaling":"StepScaling")?zt.createElement(Rc,{application:e,policy:t,serverGroup:a}):zt.createElement(Mc,{application:e,policy:t,serverGroup:a});function Oc(e){return"number"!=typeof e||!Number.isFinite(e)||e<0?"Enter a finite non-negative number":void 0}const $c=class e extends Mt.Component{constructor(){super(...arguments),this.renderFields=e=>{const{backingData:a}=e.values;return Mt.createElement(Mt.Fragment,null,Mt.createElement(r,{label:"Cooldown",name:"cooldown",help:"Seconds",input:e=>Mt.createElement(d,{...e,min:0}),required:!0,validate:Oc}),Mt.createElement(r,{label:"Enabled Metrics",name:"enabledMetrics",help:Mt.createElement(t,{id:"aws.serverGroup.enabledMetrics"}),input:e=>Mt.createElement(s,{...e,multi:!0,stringOptions:a.enabledMetrics})}),Mt.createElement(r,{label:"Health Check Type",name:"healthCheckType",input:e=>Mt.createElement(s,{...e,clearable:!1,stringOptions:a.healthCheckTypes})}),Mt.createElement(r,{label:"Health Check Grace Period",name:"healthCheckGracePeriod",help:"Seconds",input:e=>Mt.createElement(d,{...e,min:0}),required:!0,validate:Oc}),Mt.createElement(r,{label:"Termination Policies",name:"terminationPolicies",input:e=>Mt.createElement(s,{...e,multi:!0,stringOptions:a.terminationPolicies})}),Mt.createElement(r,{label:"Capacity Rebalance",name:"capacityRebalance",help:Mt.createElement(t,{id:"aws.serverGroup.capacityRebalance"}),input:e=>Mt.createElement(o,{...e,text:"Enable capacity rebalance"})}))}}static show(t,a){return ct(t.serverGroup,t.application).then(n=>n&&E.show(e,t,{dialogClassName:"modal-lg"},a))}get command(){return this.directCommand||(this.directCommand=this.context.services.providerServiceDelegate.getDelegate("aws","serverGroup.commandBuilder").buildUpdateServerGroupCommand(this.props.serverGroup))}render(){const{application:e,closeModal:t,dismissModal:a,serverGroup:n}=this.props;return Mt.createElement(Pt,{application:e,closeModal:t,description:`Update Advanced Settings for ${n.name}`,dismissModal:a,initialValues:this.command,mapValuesToTask:t=>({application:e,job:[t]}),render:this.renderFields,title:`Edit Advanced Settings for ${n.name}`})}};$c.contextType=g;let Uc=$c;class Vc extends Mt.Component{constructor(){super(...arguments),this.editAdvancedSettings=()=>{const{app:e,serverGroup:t}=this.props;Uc.show({application:e,serverGroup:t},this.context.services)}}render(){const{serverGroup:e}=this.props,a=e.asg;return Mt.createElement(G,{heading:"Advanced Settings"},Mt.createElement("dl",{className:"horizontal-when-filters-collapsed"},Mt.createElement("dt",null,"Cooldown"),Mt.createElement("dd",null,a.defaultCooldown," seconds"),a.enabledMetrics.length>0&&[Mt.createElement("dt",{key:"t-metrics"},"Enabled Metrics"),Mt.createElement("dd",{key:"d-metrics"},a.enabledMetrics.map(e=>e.metric).join(", "))],Mt.createElement("dt",null,"Health Check Type"),Mt.createElement("dd",null,a.healthCheckType),Mt.createElement("dt",null,"Grace Period"),Mt.createElement("dd",null,a.healthCheckGracePeriod," seconds"),Mt.createElement("dt",null,"Termination Policies"),Mt.createElement("dd",null,a.terminationPolicies.join(", ")),a.capacityRebalance&&[Mt.createElement("dt",null,"Capacity Rebalance ",Mt.createElement(t,{id:"aws.serverGroup.capacityRebalance"})),Mt.createElement("dd",null,`${a.capacityRebalance}`)]),hn.adHocInfraWritesEnabled&&Mt.createElement("a",{className:"clickable",onClick:this.editAdvancedSettings},"Edit Advanced Settings"))}}Vc.contextType=g;class Hc extends Mt.Component{constructor(e){super(e),this.state={changeConfig:this.getChangeConfig(e.serverGroup)}}getChangeConfig(e){const t={metadata:ta(e.entityTags,"creationMetadata")};return pa(e,"buildInfo.jenkins")&&(t.buildInfo={ancestor:void 0,jenkins:e.buildInfo.jenkins,target:void 0}),t}componentWillReceiveProps(e){this.setState({changeConfig:this.getChangeConfig(e.serverGroup)})}render(){const{serverGroup:t}=this.props,{changeConfig:a}=this.state,n=e.feature&&e.feature.entityTags,r=t.entityTags||{};return Mt.createElement(G,{heading:"Server Group Information",defaultExpanded:!0},Mt.createElement("dl",{className:"dl-horizontal dl-narrow"},Mt.createElement("dt",null,"Created"),Mt.createElement("dd",null,B(t.createdTime)),n&&Mt.createElement(At,{metadata:r.creationMetadata}),n&&Mt.createElement(Gt,{changeConfig:a,linkText:"view changes",nameItem:t,viewType:"description"}),Mt.createElement("dt",null,"In"),Mt.createElement("dd",null,Mt.createElement(A,{account:t.account}),t.region),Mt.createElement("dt",null,"VPC"),Mt.createElement("dd",null,Mt.createElement(Fn,{vpcId:t.vpcId})),t.vpcId&&t.subnetType&&Mt.createElement("dt",null,"Subnet"),t.vpcId&&t.subnetType&&Mt.createElement("dd",null,t.subnetType),t.asg&&Mt.createElement("dt",null,"Zones"),t.asg&&Mt.createElement("dd",null,Mt.createElement("ul",null,t.asg.availabilityZones.map(e=>Mt.createElement("li",{key:e},e))))))}}var qc=Object.getOwnPropertyDescriptor;let Wc=class extends Mt.Component{render(){const{serverGroup:e,app:t}=this.props,a={min:e.asg.minSize,max:e.asg.maxSize,desired:e.asg.desiredCapacity};return Mt.createElement(G,{heading:"Capacity",defaultExpanded:!0},Mt.createElement(xt,{current:e.instances.length,capacity:a}),Mt.createElement("div",null,hn.adHocInfraWritesEnabled&&Mt.createElement("a",{className:"clickable",onClick:()=>Jo.show({application:t,serverGroup:e},this.context.services)},"Resize Server Group")),Mt.createElement("div",null,Mt.createElement(Dt,{serverGroup:e})))}};Wc.contextType=g,Wc=((e,t,a,n)=>{for(var r,l=n>1?void 0:n?qc(t,a):t,i=e.length-1;i>=0;i--)(r=e[i])&&(l=r(l)||l);return l})([ce("amazon.serverGroup.CapacityDetailsSection")],Wc);class jc extends Mt.Component{render(){const{serverGroup:e}=this.props;return e.instanceCounts.total>0?Mt.createElement(G,{heading:"Health",defaultExpanded:!0},Mt.createElement("dl",{className:"dl-horizontal dl-narrow"},Mt.createElement("dt",null,"Instances"),Mt.createElement("dd",null,Mt.createElement(J,{container:e.instanceCounts,className:"pull-left"})))):null}}const Zc=({serverGroup:e})=>{if(!e.mixedInstancesPolicy)return null;const t=e.mixedInstancesPolicy.instancesDistribution;return Mt.createElement(G,{heading:"Instances Distribution"},Mt.createElement(z,{className:"horizontal-when-filters-collapsed"},Mt.createElement(D,{label:"On-Demand Allocation Strategy",helpFieldId:"aws.serverGroup.odAllocationStrategy",value:t.onDemandAllocationStrategy}),Mt.createElement(D,{label:"On-Demand Base Capacity",helpFieldId:"aws.serverGroup.odBase",value:t.onDemandBaseCapacity}),Mt.createElement(D,{label:"On-Demand Percentage Above Base Capacity",helpFieldId:"aws.serverGroup.odPercentAboveBase",value:t.onDemandPercentageAboveBaseCapacity}),Mt.createElement(D,{label:"Spot Allocation Strategy",helpFieldId:"aws.serverGroup.spotAllocationStrategy",value:t.spotAllocationStrategy}),t.spotInstancePools&&Mt.createElement(D,{label:"Spot Instance Pools",helpFieldId:"aws.serverGroup.spotInstancePoolCount",value:t.spotInstancePools}),Mt.createElement(D,{label:"Max Spot Price",helpFieldId:"aws.serverGroup.spotMaxPrice",value:t.spotMaxPrice||"on-demand price, default"})))},_c=e=>{let t;return(e||"").split(", ").forEach(e=>{const a=e.split("=");2===a.length&&"ancestor_name"===a[0]&&(t=a[1])}),t};class Kc extends Mt.Component{constructor(e){super(e),this.state={image:this.getImage(e.serverGroup)}}getImage(e){const t=e.image?e.image:void 0;return e.image&&e.image.description&&(t.baseImage=_c(e.image.description)),t}componentWillReceiveProps(e){this.setState({image:this.getImage(e.serverGroup)})}render(){const{name:e,launchConfig:t}=this.props.serverGroup,{image:a}=this.state;return t?Mt.createElement(G,{heading:"Launch Configuration"},Mt.createElement("dl",{className:"horizontal-when-filters-collapsed"},Mt.createElement("dt",null,"Name"),Mt.createElement("dd",null,t.launchConfigurationName),Mt.createElement("dt",null,"Image ID"),Mt.createElement("dd",null,t.imageId),a&&a.imageLocation&&Mt.createElement("dt",null,"Image Name"),a&&a.imageLocation&&Mt.createElement("dd",null,a.imageLocation),a&&a.baseImage&&Mt.createElement("dt",null,"Base Image Name"),a&&a.baseImage&&Mt.createElement("dd",null,a.baseImage),Mt.createElement("dt",null,"Instance Type"),Mt.createElement("dd",null,t.instanceType),Mt.createElement("dt",null,"IAM Profile"),Mt.createElement("dd",null,t.iamInstanceProfile),t.instanceMonitoring&&Mt.createElement(Mt.Fragment,null,Mt.createElement("dt",null,"Instance Monitoring"),Mt.createElement("dd",null,t.instanceMonitoring.enabled?"enabled":"disabled")),t.spotPrice&&Mt.createElement("dt",null,"Spot Price"),t.spotPrice&&Mt.createElement("dd",null,t.spotPrice),t.keyName&&Mt.createElement("dt",null,"Key Name"),t.keyName&&Mt.createElement("dd",null,t.keyName),t.kernelId&&Mt.createElement("dt",null,"Kernel ID"),t.kernelId&&Mt.createElement("dd",null,t.kernelId),t.ramdiskId&&Mt.createElement("dt",null,"Ramdisk ID"),t.ramdiskId&&Mt.createElement("dd",null,t.ramdiskId),Mt.createElement("dt",null,"User Data"),t.userData&&Mt.createElement("dd",null,Mt.createElement(Bt,{serverGroupName:e,userData:t.userData})),!t.userData&&Mt.createElement("dd",null,"[none]"))):null}}function Yc(e){return e.instanceTypeOverrides?Mt.createElement(G,{heading:"Instance Types",defaultExpanded:!0,outerDivClassName:"multiple-instance-types-subsection",toggleClassName:"clickable subsection-heading",headingClassName:"collapsible-subheading"},Mt.createElement("table",{className:"table table-condensed packed",id:"MultipleInstanceTypes"},Mt.createElement("thead",null,Mt.createElement("tr",null,Mt.createElement("th",{id:"instanceType"},"Type ",Mt.createElement(t,{id:"aws.serverGroup.multipleInstanceTypes"})),Mt.createElement("th",{id:"weight"},"Weighted Capacity ",Mt.createElement(t,{id:"aws.serverGroup.instanceTypeWeight"})))),Mt.createElement("tbody",null,e.instanceTypeOverrides.map(e=>[Mt.createElement("tr",{key:e.instanceType},Mt.createElement("td",{headers:"instanceType"},e.instanceType),Mt.createElement("td",{headers:"weight"},e.weightedCapacity))])))):null}Cr('.multiple-instance-types-subsection {\n padding: 0;\n}\n.multiple-instance-types-subsection a.subsection-heading {\n color: var(--color-black);\n}\n.multiple-instance-types-subsection h4.collapsible-subheading {\n padding: 10px 0px;\n background-color: var(--color-alabaster);\n margin: 0;\n font-size: 103%;\n font-weight: 600;\n text-transform: none;\n}\n.multiple-instance-types-subsection h4.collapsible-subheading .glyphicon {\n font-size: 10px;\n opacity: 0.5;\n margin-right: 4px;\n}\n.multiple-instance-types-subsection .content-body {\n animation: 0.15 ease-in 0 fadeIn;\n animation-iteration-count: 1;\n padding-left: 17px;\n margin: 10px 0 20px 0;\n}\n.multiple-instance-types-subsection .content-body:before,\n.multiple-instance-types-subsection .content-body:after {\n display: table;\n content: " ";\n}\n.multiple-instance-types-subsection .content-body:after {\n clear: both;\n}\n.multiple-instance-types-subsection .content-body ul {\n list-style-type: none;\n padding-left: 0;\n}\n.multiple-instance-types-subsection:last-child {\n border-bottom-width: 0;\n}\n.multiple-instance-types-subsection:first-child {\n padding-top: 0;\n}\n');const Xc=({serverGroup:e})=>{var t,a,n;const{image:r}=e,l=_c(null==r?void 0:r.description);if(!e.launchTemplate&&!e.mixedInstancesPolicy)return null;const i=!!e.mixedInstancesPolicy,s=i?e.mixedInstancesPolicy.launchTemplates[0]:e.launchTemplate,{launchTemplateData:o}=s,c=i?e.mixedInstancesPolicy.instancesDistribution.spotMaxPrice:null==(a=null==(t=null==o?void 0:o.instanceMarketOptions)?void 0:t.spotOptions)?void 0:a.maxPrice,d=null==(n=null==o?void 0:o.creditSpecification)?void 0:n.cpuCredits,m=i?e.mixedInstancesPolicy.launchTemplateOverridesForInstanceType:null;return Mt.createElement(G,{heading:"Launch Template"},Mt.createElement(z,{className:"horizontal-when-filters-collapsed"},Mt.createElement(D,{label:"Name",value:s.launchTemplateName}),Mt.createElement(D,{label:"Image ID",value:o.imageId}),(null==r?void 0:r.imageLocation)&&Mt.createElement(D,{label:"Image Name",value:null==r?void 0:r.imageLocation}),l&&Mt.createElement(D,{label:"Base Image Name",value:l}),m&&m.length>0?Mt.createElement(Yc,{instanceTypeOverrides:m}):Mt.createElement(D,{label:"Instance Type",value:o.instanceType}),d&&Mt.createElement(D,{label:"CPU Credit Specification",value:d}),Mt.createElement(D,{label:"IAM Profile",value:o.iamInstanceProfile.name}),o.monitoring&&Mt.createElement(D,{label:"Instance Monitoring",value:o.monitoring.enabled?"enabled":"disabled"}),c&&Mt.createElement(D,{label:"Max Spot Price",value:c}),o.keyName&&Mt.createElement(D,{label:"Key Name",value:o.keyName}),o.kernelId&&Mt.createElement(D,{label:"Kernel ID",value:o.kernelId}),o.ramDiskId&&Mt.createElement(D,{label:"Ramdisk ID",value:o.ramDiskId}),o.userData&&Mt.createElement(D,{label:"User Data",value:Mt.createElement(Bt,{serverGroupName:e.name,userData:o.userData})})))};class Jc extends Mt.Component{render(){return Mt.createElement(G,{heading:"Logs"},Mt.createElement("ul",null,Mt.createElement("li",null,Mt.createElement(Dt,{serverGroup:this.props.serverGroup}))))}}class Qc extends Mt.Component{constructor(e){super(e),this.state=this.getState(e)}getState(e){const{serverGroup:t}=e,a=t.buildInfo||{};let n=null;a.commit&&(n=t.buildInfo.commit.substring(0,8));let r=null;if(a.buildInfoUrl)r=t.buildInfo.buildInfoUrl;else if(a.jenkins){const e=t.buildInfo.jenkins;r=`${e.host}job/${e.name}/${e.number}`}return{commitHash:n,jenkinsLink:r}}componentWillReceiveProps(e){this.setState(this.getState(e))}render(){const{serverGroup:e}=this.props,{commitHash:t,jenkinsLink:a}=this.state;return e.buildInfo&&e.buildInfo.jenkins?Mt.createElement(G,{heading:"Package"},Mt.createElement("dl",{className:"horizontal-when-filters-collapsed"},Mt.createElement("dt",null,"Job"),Mt.createElement("dd",null,e.buildInfo.jenkins.name),Mt.createElement("dt",null,"Package"),Mt.createElement("dd",null,e.buildInfo.package_name),Mt.createElement("dt",null,"Build"),Mt.createElement("dd",null,e.buildInfo.jenkins.number),Mt.createElement("dt",null,"Commit"),Mt.createElement("dd",null,t),Mt.createElement("dt",null,"Version"),Mt.createElement("dd",null,e.buildInfo.version),Mt.createElement("dt",null,"Build Link"),Mt.createElement("dd",null,Mt.createElement("a",{target:"_blank",href:a},a)))):null}}var ed=Object.getOwnPropertyDescriptor;let td=class extends Mt.Component{constructor(e){super(e)}static arePoliciesDisabled(e){const t=ro.normalizeScalingProcesses(e);return e.scalingPolicies.length>0&&t.filter(e=>!e.enabled).some(e=>["Launch","Terminate","AlarmNotification"].includes(e.name))}render(){const{app:e,serverGroup:t}=this.props,a=td.arePoliciesDisabled(t);return Mt.createElement(G,{cacheKey:"Scaling Policies",heading:({chevron:e})=>Mt.createElement("h4",{className:"collapsible-heading"},e,Mt.createElement("span",null,a&&Mt.createElement(O,{value:"Some scaling processes are disabled that may prevent scaling policies from working"},Mt.createElement("span",{className:"fa fa-exclamation-circle warning-text"})),"Scaling Policies"))},a&&Mt.createElement("div",{className:"band band-warning"},"Some scaling processes are disabled that may prevent scaling policies from working."),t.scalingPolicies.map(a=>Mt.createElement(Lc,{key:a.policyARN,policy:a,serverGroup:t,application:e})),hn.adHocInfraWritesEnabled?Mt.createElement(xc,{serverGroup:t,application:e}):Mt.createElement("p",null,"Can not create scaling policy, because ad-hoc operations are disabled for AWS providers."))}};td=((e,t,a,n)=>{for(var r,l=n>1?void 0:n?ed(t,a):t,i=e.length-1;i>=0;i--)(r=e[i])&&(l=r(l)||l);return l})([ce("aws.serverGroup.ScalingPoliciesDetailsSection")],td);class ad extends Mt.Component{constructor(){super(...arguments),this.initialProcesses=ro.normalizeScalingProcesses(this.props.serverGroup),this.state={processes:this.initialProcesses.map(e=>({...e})),taskMonitor:new v({application:this.props.application,title:`Update Auto Scaling Processes for ${this.props.serverGroup.name}`,onDismiss:this.props.dismissModal,onTaskComplete:()=>this.props.application.serverGroups.refresh()})},this.setProcessEnabled=(e,t)=>{const a=this.state.processes.map((a,n)=>n===e?{...a,enabled:t}:a);this.setState({processes:a})},this.getJobs=()=>function(e,t,a,n){const r=t.filter(t=>{var a;return(null==(a=e.find(e=>e.name===t.name))?void 0:a.enabled)!==t.enabled}),l=r.filter(e=>e.enabled).map(e=>e.name),i=r.filter(e=>!e.enabled).map(e=>e.name),s=(e,t)=>({type:"modifyScalingProcess",action:e,processes:t,asgName:a.name,regions:[a.region],credentials:a.account,cloudProvider:"aws",reason:n});return[l.length&&s("resume",l),i.length&&s("suspend",i)].filter(Boolean)}(this.initialProcesses,this.state.processes,this.props.serverGroup,this.state.reason),this.submit=()=>{const{application:e,serverGroup:t}=this.props,a=this.getJobs();this.state.taskMonitor.submit(()=>H.executeTask({application:e,description:`Update Auto Scaling Processes for ${t.name}`,job:a}))}}static show(e){return ct(e.serverGroup,e.application).then(t=>t&&E.show(ad,e))}render(){const{dismissModal:e,serverGroup:a}=this.props;return Mt.createElement(Mt.Fragment,null,Mt.createElement(ot,{monitor:this.state.taskMonitor}),Mt.createElement(me,{dismiss:e}),Mt.createElement(Oa.Header,null,Mt.createElement(Oa.Title,null,"Modify Scaling Processes for ",a.name)),Mt.createElement(Oa.Body,{className:"container-fluid form-horizontal"},Mt.createElement("div",{className:"form-group"},Mt.createElement("div",{className:"col-sm-offset-2 col-sm-10"},this.state.processes.map((e,a)=>Mt.createElement("div",{className:"checkbox",key:e.name},Mt.createElement("label",null,Mt.createElement("input",{checked:e.enabled,onChange:e=>this.setProcessEnabled(a,e.target.checked),type:"checkbox"})," ",e.name)," ",Mt.createElement(t,{content:e.description,placement:"right"}))))),Mt.createElement(gt,{reason:this.state.reason,onChange:e=>this.setState({reason:e})})),Mt.createElement(Yo,{account:a.account,isValid:this.getJobs().length>0,onCancel:e,onSubmit:this.submit}))}}class nd extends Mt.Component{constructor(e){super(e),this.editScalingProcesses=()=>{const{app:e,serverGroup:t}=this.props;ad.show({application:e,serverGroup:t})},this.state=this.getState(e)}getState(e){const{serverGroup:t}=e,a=ro.normalizeScalingProcesses(t),n=t.scalingPolicies.length>0&&a.filter(e=>!e.enabled).some(e=>["Launch","Terminate","AlarmNotification"].includes(e.name)),r=t.scheduledActions.length>0&&a.filter(e=>!e.enabled).some(e=>["Launch","Terminate","ScheduledAction"].includes(e.name));return{autoScalingProcesses:a,scalingPoliciesDisabled:n,scheduledActionsDisabled:r}}componentWillReceiveProps(e){this.setState(this.getState(e))}render(){const{autoScalingProcesses:e,scalingPoliciesDisabled:a,scheduledActionsDisabled:n}=this.state;return Mt.createElement(G,{cacheKey:"Scaling Processes",heading:({chevron:e})=>Mt.createElement("h4",{className:"collapsible-heading"},e,Mt.createElement("span",null,a&&Mt.createElement(O,{value:"Some scaling processes are disabled that may prevent scaling policies from working"},Mt.createElement("span",{className:"fa fa-exclamation-circle warning-text"})),n&&Mt.createElement(O,{value:"Some scaling processes are disabled that may prevent scheduled actions from working"},Mt.createElement("span",{className:"fa fa-exclamation-circle warning-text"})),"Scaling Processes"))},Mt.createElement("ul",{className:"scaling-processes"},e.map(e=>Mt.createElement("li",{key:e.name},Mt.createElement("span",{style:{visibility:e.enabled?"visible":"hidden"},className:"fa fa-check small"}),Mt.createElement("span",{className:e.enabled?"":"text-disabled"},e.name," "),Mt.createElement(t,{content:e.description,placement:"bottom"}),e.suspensionDate&&Mt.createElement("div",{className:"text-disabled small",style:{marginLeft:"35px"}},"Suspended ",B(e.suspensionDate))))),hn.adHocInfraWritesEnabled&&Mt.createElement("a",{className:"clickable",onClick:this.editScalingProcesses},"Edit Scaling Processes"))}}class rd extends Mt.Component{render(){const{action:e}=this.props;return Mt.createElement("dl",{className:"horizontal-when-filters-collapsed",style:{marginBottom:"20px"}},Mt.createElement("dt",null,"Schedule"),Mt.createElement("dd",null,e.recurrence),void 0!==e.minSize&&Mt.createElement("dt",null,"Min Size"),void 0!==e.minSize&&Mt.createElement("dd",null,e.minSize),void 0!==e.maxSize&&Mt.createElement("dt",null,"Max Size"),void 0!==e.maxSize&&Mt.createElement("dd",null,e.maxSize),void 0!==e.desiredCapacity&&Mt.createElement("dt",null,"Desired Size"),void 0!==e.desiredCapacity&&Mt.createElement("dd",null,e.desiredCapacity))}}function ld(e){return{recurrence:e.recurrence,minSize:e.minSize,maxSize:e.maxSize,desiredCapacity:e.desiredCapacity}}function id(e){var t;const a=[e.minSize,e.maxSize,e.desiredCapacity];return!(!String(null!=(t=e.recurrence)?t:"").trim()||a.every(e=>void 0===e))&&(!a.some(e=>void 0!==e&&(!Number.isFinite(e)||!Number.isInteger(e)||e<0))&&(!(void 0!==e.minSize&&void 0!==e.maxSize&&e.minSize>e.maxSize)&&(!(void 0!==e.desiredCapacity&&void 0!==e.minSize&&e.desiredCapacity<e.minSize)&&!(void 0!==e.desiredCapacity&&void 0!==e.maxSize&&e.desiredCapacity>e.maxSize))))}function sd(e,t){return{type:"upsertAsgScheduledActions",asgs:[{asgName:e.name,region:e.region}],scheduledActions:t.map(ld),credentials:e.account}}class od extends Mt.Component{constructor(){super(...arguments),this.state={scheduledActions:(this.props.serverGroup.scheduledActions||[]).map(ld),taskMonitor:new v({application:this.props.application,title:`Update Scheduled Actions for ${this.props.serverGroup.name}`,onDismiss:this.props.dismissModal,onTaskComplete:()=>this.props.application.serverGroups.refresh()})},this.addScheduledAction=()=>{this.setState(({scheduledActions:e})=>({scheduledActions:[...e,{}]}))},this.removeScheduledAction=e=>{this.setState(({scheduledActions:t})=>({scheduledActions:t.filter((t,a)=>a!==e)}))},this.updateScheduledAction=(e,t,a)=>{this.setState(({scheduledActions:n})=>({scheduledActions:n.map((n,r)=>r===e?{...n,[t]:""===a?void 0:a}:n)}))},this.submit=()=>{const{application:e,serverGroup:t}=this.props;this.state.taskMonitor.submit(()=>H.executeTask({application:e,description:`Update Scheduled Actions for ${t.name}`,job:[sd(t,this.state.scheduledActions)]}))}}static show(e){return ct(e.serverGroup,e.application).then(t=>t&&E.show(od,e,{dialogClassName:"modal-lg"}))}renderNumberInput(e,t,a){return Mt.createElement("input",{className:"form-control input-sm",min:0,onChange:a=>this.updateScheduledAction(e,t,""===a.target.value?"":Number(a.target.value)),type:"number",value:null!=a?a:""})}render(){const{dismissModal:e,serverGroup:t}=this.props,a=this.state.scheduledActions.every(id);return Mt.createElement(Mt.Fragment,null,Mt.createElement(ot,{monitor:this.state.taskMonitor}),Mt.createElement(me,{dismiss:e}),Mt.createElement(Oa.Header,null,Mt.createElement(Oa.Title,null,"Edit Scheduled Actions for ",t.name)),Mt.createElement(Oa.Body,{className:"container-fluid"},Mt.createElement("p",null,"You must specify at least one of: Min Size, Max Size, Desired Capacity."),Mt.createElement("p",null,Mt.createElement("strong",null,"Note:")," CRON expressions are evaluated in UTC."),Mt.createElement("table",{className:"table table-condensed packed"},Mt.createElement("thead",null,Mt.createElement("tr",null,Mt.createElement("th",null,"Recurrence (CRON)"),Mt.createElement("th",null,"Min Size"),Mt.createElement("th",null,"Max Size"),Mt.createElement("th",null,"Desired Capacity"),Mt.createElement("th",null))),Mt.createElement("tbody",null,this.state.scheduledActions.map((e,t)=>{var a;return Mt.createElement("tr",{key:t},Mt.createElement("td",null,Mt.createElement("input",{className:"form-control input-sm no-spel",onChange:e=>this.updateScheduledAction(t,"recurrence",e.target.value),required:!0,type:"text",value:null!=(a=e.recurrence)?a:""})),Mt.createElement("td",null,this.renderNumberInput(t,"minSize",e.minSize)),Mt.createElement("td",null,this.renderNumberInput(t,"maxSize",e.maxSize)),Mt.createElement("td",null,this.renderNumberInput(t,"desiredCapacity",e.desiredCapacity)),Mt.createElement("td",null,Mt.createElement("button",{"aria-label":"Remove scheduled action",className:"btn btn-link",onClick:()=>this.removeScheduledAction(t),type:"button"},Mt.createElement("span",{className:"glyphicon glyphicon-trash"}))))}))),Mt.createElement("button",{className:"add-new col-md-12",onClick:this.addScheduledAction,type:"button"},Mt.createElement("span",{className:"glyphicon glyphicon-plus-sign"})," Add new Scheduled Action")),Mt.createElement(Yo,{account:t.account,isValid:a,onCancel:e,onSubmit:this.submit}))}}class cd extends Mt.Component{constructor(e){super(e),this.editScheduledActions=()=>{const{app:e,serverGroup:t}=this.props;od.show({application:e,serverGroup:t})},this.state=this.getState(e)}getState(e){const{serverGroup:t}=e,a=ro.normalizeScalingProcesses(t);return{scheduledActionsDisabled:t.scheduledActions.length>0&&a.filter(e=>!e.enabled).some(e=>["Launch","Terminate","ScheduledAction"].includes(e.name))}}componentWillReceiveProps(e){this.setState(this.getState(e))}render(){const{serverGroup:e}=this.props,{scheduledActionsDisabled:t}=this.state;return Mt.createElement(G,{cacheKey:"Scheduled Actions",heading:({chevron:e})=>Mt.createElement("h4",{className:"collapsible-heading"},e,Mt.createElement("span",null,t&&Mt.createElement(O,{value:"Some scaling processes are disabled that may prevent scheduled actions from working"},Mt.createElement("span",{className:"fa fa-exclamation-circle warning-text"})),"Scheduled Actions"))},e.scheduledActions.map((e,t)=>Mt.createElement(rd,{key:t,action:e})),e.scheduledActions.length>0&&Mt.createElement("p",null,Mt.createElement("strong",null,"Note:")," Schedules are evaluated in UTC."),0===e.scheduledActions.length&&Mt.createElement("p",null,"No Scheduled Actions are configured for this server group."),hn.adHocInfraWritesEnabled&&Mt.createElement("a",{className:"clickable",onClick:this.editScheduledActions},"Edit Scheduled Actions"))}}function dd(e,t,a){var n,r;const l=((null==(r=null==(n=null==e?void 0:e[t.account])?void 0:n.aws)?void 0:r[t.region])||[]).filter(e=>e.vpcId===t.vpcId),i=new Map(l.map(e=>[e.id,e])),s=new Set;return[...(a||[]).map(e=>(s.add(e.id),i.get(e.id)||e)),...l.filter(e=>!s.has(e.id)).sort((e,t)=>e.name.localeCompare(t.name))]}const md=class e extends Mt.Component{constructor(){super(...arguments),this.initialSecurityGroups=this.props.securityGroups||(this.props.serverGroup.securityGroups||[]).map(e=>({id:e,name:e})),this.state={availableSecurityGroups:this.initialSecurityGroups,securityGroups:this.initialSecurityGroups,securityGroupsLoaded:!1,taskMonitor:new v({application:this.props.application,title:`Update ${R.get("Firewalls")} for ${this.props.serverGroup.name}`,onDismiss:this.props.dismissModal,onTaskComplete:()=>this.props.application.serverGroups.refresh()})},this.isUnmounted=!1,this.loadSecurityGroups=()=>(this.setState({securityGroupsLoaded:!1,securityGroupsLoadError:void 0}),this.context.services.securityGroupReader.getAllSecurityGroups().then(e=>{this.isUnmounted||this.setState({availableSecurityGroups:dd(e,this.props.serverGroup,this.state.securityGroups),securityGroupsLoaded:!0})}).catch(()=>{this.isUnmounted||this.setState({securityGroupsLoaded:!0,securityGroupsLoadError:"Unable to load security groups. Check your connection and try again."})})),this.submit=()=>{const{application:e,serverGroup:t}=this.props;this.state.taskMonitor.submit(()=>this.context.services.serverGroupWriter.updateSecurityGroups(t,this.state.securityGroups,e,function(e){return Boolean(e.launchTemplate||e.mixedInstancesPolicy)}(t)))}}static show(t,a){return ct(t.serverGroup,t.application).then(n=>n&&E.show(e,t,void 0,a))}componentDidMount(){this.loadSecurityGroups()}componentWillUnmount(){this.isUnmounted=!0}render(){const{dismissModal:e,serverGroup:t}=this.props;return Mt.createElement(Mt.Fragment,null,Mt.createElement(ot,{monitor:this.state.taskMonitor}),Mt.createElement(me,{dismiss:e}),Mt.createElement(Oa.Header,null,Mt.createElement(Oa.Title,null,"Edit ",R.get("Firewalls")," for ",t.name)),Mt.createElement(Oa.Body,{className:"container-fluid form-horizontal"},Mt.createElement("div",{className:"form-group"},Mt.createElement("div",{className:"col-md-10 col-md-offset-1"},Mt.createElement(_a,{labelKey:"name",isLoading:!this.state.securityGroupsLoaded,multi:!0,onChange:e=>this.setState({securityGroups:e||[]}),optionRenderer:e=>Mt.createElement("span",null,`${e.name} (${e.id})`),options:this.state.availableSecurityGroups,value:this.state.securityGroups,valueKey:"id"}),this.state.securityGroupsLoadError&&Mt.createElement("div",{className:"alert alert-danger security-groups-load-error",role:"alert"},this.state.securityGroupsLoadError," ",Mt.createElement("button",{className:"btn btn-default btn-xs",onClick:this.loadSecurityGroups,type:"button"},"Retry"))))),Mt.createElement(Yo,{account:t.account,isValid:this.state.securityGroupsLoaded&&!this.state.securityGroupsLoadError,onCancel:e,onSubmit:this.submit}))}};md.contextType=g;let ud=md;class pd extends Mt.Component{constructor(e){super(e),this.editSecurityGroups=()=>{const{app:e,serverGroup:t}=this.props;ud.show({application:e,securityGroups:this.state.securityGroups,serverGroup:t},this.context.services)},this.state={securityGroups:this.getSecurityGroups(e)}}tryFindingSecurityGroupInIndex(e,t,a,n){try{return Qs.resolveIndexedSecurityGroup(e,{account:t,region:a},n)}catch(e){return}}getSecurityGroups(e){let t;const{app:a,serverGroup:n}=e;return n.securityGroups&&n.securityGroups.length&&(t=Xt(n.securityGroups).map(e=>fa(a.securityGroups.data,{accountName:n.account,region:n.region,id:e})||fa(a.securityGroups.data,{accountName:n.account,region:n.region,name:e})||this.tryFindingSecurityGroupInIndex(a.securityGroupsIndex,n.account,n.region,e)||{id:e,name:e}).compact().value()),t}componentWillReceiveProps(e){this.setState({securityGroups:this.getSecurityGroups(e)})}render(){const{serverGroup:e}=this.props,{securityGroups:t}=this.state;return Mt.createElement(G,{heading:R.get("Firewalls")},Mt.createElement("ul",null,Kt(t,"name").map(t=>Mt.createElement("li",{key:t.name},Mt.createElement(ja,{to:"^.firewallDetails",params:{name:t.name,accountId:t.accountName,region:e.region,vpcId:e.vpcId,provider:e.type}},Mt.createElement("a",null,t.name," (",t.id,")"))))),hn.adHocInfraWritesEnabled&&e.vpcId&&Mt.createElement("a",{className:"clickable",onClick:this.editSecurityGroups},"Edit ",R.get("Firewalls")))}}pd.contextType=g;class hd extends Mt.Component{render(){const{serverGroup:e}=this.props;return Mt.createElement(G,{heading:"Tags"},0===e.asg.tags.length&&Mt.createElement("div",null,"No tags associated with this server group"),e.asg.tags.length>0&&Mt.createElement("dl",null,Kt(e.asg.tags,"key").map(e=>[Mt.createElement("dt",{key:e.key},e.key),Mt.createElement("dd",{key:e.value},e.value)])))}}class gd{static getWarmPoolConfiguration(e){var t;return null==(t=e.asg)?void 0:t.warmPoolConfiguration}static isEnabled(e){return!!gd.getWarmPoolConfiguration(e)}static poolStates(){return["Stopped","Running","Hibernated"]}}var vd,fd,Ed,yd,bd,Cd,Nd,wd,Sd;class kd extends Mt.Component{constructor(){super(...arguments),this.initialConfiguration=gd.getWarmPoolConfiguration(this.props.serverGroup),this.state={enabled:!!this.initialConfiguration,minSize:null!=(fd=null==(vd=this.initialConfiguration)?void 0:vd.minSize)?fd:0,maxGroupPreparedCapacity:null!=(yd=null==(Ed=this.initialConfiguration)?void 0:Ed.maxGroupPreparedCapacity)?yd:-1,poolState:null!=(Cd=null==(bd=this.initialConfiguration)?void 0:bd.poolState)?Cd:"Stopped",reuseOnScaleIn:null!=(Sd=null==(wd=null==(Nd=this.initialConfiguration)?void 0:Nd.instanceReusePolicy)?void 0:wd.reuseOnScaleIn)&&Sd,taskMonitor:new v({application:this.props.application,title:`Update Warm Pool for ${this.props.serverGroup.name}`,onDismiss:this.props.dismissModal,onTaskComplete:()=>this.props.application.serverGroups.refresh()})},this.submit=()=>{const{application:e,serverGroup:t}=this.props,a=function(e,t){const a={asgName:t.name,regions:[t.region],credentials:t.account,cloudProvider:"aws",reason:e.reason};return e.enabled?{...a,type:"modifyWarmPool",action:"upsert",minSize:e.minSize,maxGroupPreparedCapacity:e.maxGroupPreparedCapacity,poolState:e.poolState,reuseOnScaleIn:e.reuseOnScaleIn}:{...a,type:"modifyWarmPool",action:"delete"}}(this.state,t);this.state.taskMonitor.submit(()=>H.executeTask({application:e,description:`Update Warm Pool for ${t.name}`,job:[a]}))}}static show(e){return ct(e.serverGroup,e.application).then(t=>t&&E.show(kd,e))}render(){const{dismissModal:e,serverGroup:a}=this.props,{enabled:n,minSize:r,maxGroupPreparedCapacity:l,poolState:i,reuseOnScaleIn:s}=this.state;return Mt.createElement(Mt.Fragment,null,Mt.createElement(ot,{monitor:this.state.taskMonitor}),Mt.createElement(me,{dismiss:e}),Mt.createElement(Oa.Header,null,Mt.createElement(Oa.Title,null,"Modify Warm Pool for ",a.name)),Mt.createElement(Oa.Body,{className:"container-fluid form-horizontal"},Mt.createElement("div",{className:"form-group"},Mt.createElement("div",{className:"col-sm-offset-2 col-sm-10"},Mt.createElement("div",{className:"checkbox"},Mt.createElement("label",null,Mt.createElement("input",{checked:n,onChange:e=>this.setState({enabled:e.target.checked}),type:"checkbox"})," ","Enable Warm Pool",Mt.createElement(t,{content:"Keeps a pool of pre-initialized instances alongside this Auto Scaling Group to speed up scale-out.",placement:"right"}))))),n&&Mt.createElement(Mt.Fragment,null,Mt.createElement("div",{className:"form-group"},Mt.createElement("label",{className:"col-sm-4 control-label"},"Min Size"),Mt.createElement("div",{className:"col-sm-6"},Mt.createElement("input",{className:"form-control",type:"number",min:0,value:r,onChange:e=>this.setState({minSize:Number(e.target.value)})}))),Mt.createElement("div",{className:"form-group"},Mt.createElement("label",{className:"col-sm-4 control-label"},"Max Group Prepared Capacity",Mt.createElement(t,{content:"The maximum capacity of the Auto Scaling Group, including the warm pool. -1 means no limit beyond the group's own max size."})),Mt.createElement("div",{className:"col-sm-6"},Mt.createElement("input",{className:"form-control",type:"number",min:-1,value:l,onChange:e=>this.setState({maxGroupPreparedCapacity:Number(e.target.value)})}))),Mt.createElement("div",{className:"form-group"},Mt.createElement("label",{className:"col-sm-4 control-label"},"Instance State"),Mt.createElement("div",{className:"col-sm-6"},Mt.createElement("select",{className:"form-control",value:i,onChange:e=>this.setState({poolState:e.target.value})},gd.poolStates().map(e=>Mt.createElement("option",{key:e,value:e},e))))),Mt.createElement("div",{className:"form-group"},Mt.createElement("div",{className:"col-sm-offset-2 col-sm-10"},Mt.createElement("div",{className:"checkbox"},Mt.createElement("label",null,Mt.createElement("input",{checked:s,onChange:e=>this.setState({reuseOnScaleIn:e.target.checked}),type:"checkbox"})," ","Reuse instances on scale in",Mt.createElement(t,{content:"If enabled, instances terminated by scale-in are returned to the warm pool instead of being terminated."})))))),Mt.createElement(gt,{reason:this.state.reason,onChange:e=>this.setState({reason:e})})),Mt.createElement(Yo,{account:a.account,isValid:!0,onCancel:e,onSubmit:this.submit}))}}class Td extends Mt.Component{constructor(){super(...arguments),this.editWarmPool=()=>{const{app:e,serverGroup:t}=this.props;kd.show({application:e,serverGroup:t})}}render(){var e,t,a;const{serverGroup:n}=this.props,r=gd.getWarmPoolConfiguration(n);return Mt.createElement(G,{cacheKey:"Warm Pool",heading:"Warm Pool"},r?Mt.createElement("ul",{className:"warm-pool"},Mt.createElement("li",null,"Min Size: ",null!=(e=r.minSize)?e:0),Mt.createElement("li",null,"Max Group Prepared Capacity:"," ",null!=r.maxGroupPreparedCapacity&&r.maxGroupPreparedCapacity>=0?r.maxGroupPreparedCapacity:"No limit"),Mt.createElement("li",null,"Instance State: ",null!=(t=r.poolState)?t:"Stopped"),Mt.createElement("li",null,"Reuse on Scale In: ",(null==(a=r.instanceReusePolicy)?void 0:a.reuseOnScaleIn)?"Yes":"No")):Mt.createElement("div",{className:"text-disabled"},"No warm pool configured"),hn.adHocInfraWritesEnabled&&Mt.createElement("a",{className:"clickable",onClick:this.editWarmPool},"Edit Warm Pool"))}}Ft.registerValidator("aws",new class{validateSpecialCharacters(e,t){/^[a-zA-Z_0-9.]*$/g.test(e)||t.push("Only dot(.) and underscore(_) special characters are allowed.")}validateClassicLock(e){const t=hn.classicLaunchLockout;t&&t<(new Date).getTime()&&e.push(`New applications deployed to AWS are restricted to VPC; you cannot create server groups,\n load balancers, or ${R.get("firewalls")} in EC2 Classic.`)}validateLoadBalancerCharacters(e,t){(e.includes(".")||e.includes("_"))&&t.push("If the application's name contains an underscore(_) or dot(.),\n you will not be able to create a load balancer,\n preventing it from being used as a front end service.\n Any hostname constructed with this application name may have issues.")}validateLength(e,t,a){if(e.length>250)a.push("The maximum length for an application in Amazon is 250 characters.");else{if(e.length>240)if(e.length>=248)t.push(`You will not be able to include a stack or detail field for clusters or ${R.get("firewalls")}.`);else{const a=248-e.length;t.push(`If you plan to include a stack or detail field for clusters, you will only\n have ~${a} characters to do so.`)}if(e.length>20)if(e.length>32)t.push(`You will not be able to create an Amazon load balancer for this application if the\n application's name is longer than 32 characters (currently: ${e.length} characters)`);else if(e.length>=30)t.push(`If you plan to create load balancers for this application, be aware that the character limit\n for load balancer names is 32 (currently: ${e.length} characters). With separators ("-"), you will not\n be able to add a stack and detail field to any load balancer.`);else{const a=30-e.length;t.push(`If you plan to create load balancers for this application, be aware that the character limit\n for load balancer names is 32. You will only have ~${a} characters to add a stack or detail\n field to any load balancer.`)}}}validate(e=""){const t=[],a=[];return e.length&&(this.validateClassicLock(t),this.validateSpecialCharacters(e,a),this.validateLoadBalancerCharacters(e,t),this.validateLength(e,t,a)),{warnings:t,errors:a}}});function Id(e,t,a="aws"){Re.pipeline.getStageTypes().some(t=>{const n=t.provides||t.key,r=null===a||t.cloudProvider===a;return n===e&&r})||t()}Cr('.cloud-provider-logo .icon-aws {\n -webkit-mask-image: url("data:image/svg+xml,%3C%3Fxml version%3D%221.0%22 encoding%3D%22utf-8%22%3F%3E%3C!DOCTYPE svg PUBLIC %22-%2F%2FW3C%2F%2FDTD SVG 1.1%2F%2FEN%22 %22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg version%3D%221.1%22 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22 xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22 x%3D%220px%22 y%3D%220px%22%09 width%3D%22130px%22 height%3D%22130px%22 viewBox%3D%220 0 27 27%22%3E%3Cg%3E%09%3Cpolygon fill%3D%22%23000000%22 stroke%3D%22%23FFFFFF%22 stroke-width%3D%220%22 points%3D%2213.2%2C27 2.4%2C23.1 2.4%2C8.5 13.2%2C12.5 %22%2F%3E%09%3Cpolygon fill%3D%22%23000000%22 stroke%3D%22%23FFFFFF%22 stroke-width%3D%220%22 points%3D%2226.5%2C23.1 15.2%2C27 15.2%2C12.5 26.5%2C8 %22%2F%3E%09%3Cpolygon fill%3D%22%23000000%22 stroke%3D%22%23FFFFFF%22 stroke-width%3D%220%22 points%3D%2214.2%2C3.4 25.5%2C7 14.2%2C11.0 2.9%2C7 %22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E");\n mask-image: url("data:image/svg+xml,%3C%3Fxml version%3D%221.0%22 encoding%3D%22utf-8%22%3F%3E%3C!DOCTYPE svg PUBLIC %22-%2F%2FW3C%2F%2FDTD SVG 1.1%2F%2FEN%22 %22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg version%3D%221.1%22 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22 xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22 x%3D%220px%22 y%3D%220px%22%09 width%3D%22130px%22 height%3D%22130px%22 viewBox%3D%220 0 27 27%22%3E%3Cg%3E%09%3Cpolygon fill%3D%22%23000000%22 stroke%3D%22%23FFFFFF%22 stroke-width%3D%220%22 points%3D%2213.2%2C27 2.4%2C23.1 2.4%2C8.5 13.2%2C12.5 %22%2F%3E%09%3Cpolygon fill%3D%22%23000000%22 stroke%3D%22%23FFFFFF%22 stroke-width%3D%220%22 points%3D%2226.5%2C23.1 15.2%2C27 15.2%2C12.5 26.5%2C8 %22%2F%3E%09%3Cpolygon fill%3D%22%23000000%22 stroke%3D%22%23FFFFFF%22 stroke-width%3D%220%22 points%3D%2214.2%2C3.4 25.5%2C7 14.2%2C11.0 2.9%2C7 %22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E");\n}\n'),Ge.registerProvider("aws",{name:"Amazon",adHocInfrastructureWritesEnabled:hn.adHocInfraWritesEnabled,logo:{path:"amazon.logo352d4e042476837f.svg"},applicationProviderFields:[{field:"useAmiBlockDeviceMappings",label:"Prefer AMI Block Device Mappings",type:"boolean"}],image:{reader:rr},serverGroup:{transformer:Xn,detailsActions:oc,detailsGetter:cc,detailsSections:[Hc,Wc,jc,Zc,Kc,Xc,pd,nd,td,cd,Td,hd,Qc,Vc,Jc],CloneServerGroupModal:Ko,commandBuilder:no,configurationService:so,instanceTypeService:Yn,scalingActivitiesEnabled:!0,TargetTrackingChart:hc,UpsertStepPolicyModal:Gc,UpsertTargetTrackingModal:Cc},instance:{instanceTypeService:Yn,details:br},loadBalancer:{transformer:Ar,CreateLoadBalancerModal:El,useDetailsHook:Cl,detailsActions:Sl,detailsSections:xl,targetGroupDetails:Dr,ClusterContainer:wr,LoadBalancersTag:Pr},function:{details:ar,CreateFunctionModal:Rn,setTransformer:fn,transformer:fn},securityGroup:{transformer:eo,reader:Qs,CreateSecurityGroupModal:Vs,details:Js}}),Id("bake",Ol),Id("cloneServerGroup",Vl),Id("deployCloudFormation",ii),Id("destroyServerGroup",Ii),Id("disableServerGroup",Ai),Id("disableCluster",xi),Id("enableServerGroup",Bi),Id("findImage",zi),Id("findImageFromTags",Ri),Id("Aws.LambdaDeleteStage",Kl,null),Id("Aws.LambdaDeploymentStage",Ei,null),Id("Aws.LambdaInvokeStage",Hi,null),Id("modifyAwsScalingProcess",Zi),Id("modifyWarmPool",Xi),Id("resizeServerGroup",ls),Id("rollbackCluster",ss),Id("Aws.LambdaUpdateCodeStage",Fs,null),Id("Aws.LambdaTrafficRoutingStage",ws,null),Id("scaleDownCluster",ks),Id("shrinkCluster",Is),Id("upsertImageTags",As),a.registerProvider("aws",["custom","redblack","rollingpush","rollingredblack","monitored"]);export{hn as AWSProviderSettings,Vc as AdvancedSettingsDetailsSection,Ic as AlarmConfigurer,Wc as AmazonCapacityDetailsSection,Ur as AmazonCertificateReader,Fr as AmazonCertificateSelectField,ar as AmazonFunctionDetails,co as AmazonImageSelectInput,Hc as AmazonInfoDetailsSection,yr as AmazonInstanceActions,fr as AmazonInstanceActionsComponent,br as AmazonInstanceDetails,Er as AmazonInstanceDetailsComponent,mr as AmazonInstanceWriter,Sl as AmazonLoadBalancerActions,El as AmazonLoadBalancerChoiceModal,wr as AmazonLoadBalancerClusterContainer,Sr as AmazonLoadBalancerDataUtils,kl as AmazonLoadBalancerDetailsSection,Pl as AmazonLoadBalancerFirewallsSection,Gl as AmazonLoadBalancerHealthChecksSection,Il as AmazonLoadBalancerListenersSection,Tl as AmazonLoadBalancerStatusSection,Al as AmazonLoadBalancerSubnetsSection,Pr as AmazonLoadBalancersTag,Ir as AmazonLoadBalancersTagComponent,Jo as AmazonResizeServerGroupModal,Ys as AmazonSecurityGroupActions,Js as AmazonSecurityGroupDetails,Xs as AmazonSecurityGroupDetailsComponent,Vs as AmazonSecurityGroupModal,Us as AmazonSecurityGroupModalComponent,Gc as AmazonUpsertScalingPolicyModal,Cc as AmazonUpsertTargetTrackingModal,fn as AwsFunctionTransformer,Ar as AwsLoadBalancerTransformer,Yo as AwsModalFooter,io as AwsServerGroupConfigurationService,so as AwsServerGroupConfigurationServiceDelegate,tr as AwsServices,kc as COMPARATORS,Rn as CreateLambdaFunction,Mn as CreateLambdaFunctionComponent,xc as CreateScalingPolicyButton,dc as DateLineChart,gc as DimensionsEditor,Ln as FunctionActions,In as FunctionBasicInformation,jc as HealthDetailsSection,qs as IPRangeRules,sr as InstanceDns,lr as InstanceInformation,cr as InstanceStatus,Zc as InstancesDistributionDetailsSection,lo as KeyPairsReader,Kc as LaunchConfigDetailsSection,Xc as LaunchTemplateDetailsSection,vl as LoadBalancerTypes,Jc as LogsDetailsSection,mc as MetricAlarmChart,fc as MetricSelector,Qc as PackageDetailsSection,Nc as PolicyTypeSelectionModal,td as ScalingPoliciesDetailsSection,wc as ScalingPolicyAdditionalSettings,Lc as ScalingPolicySummary,Dc as ScalingPolicyWriter,nd as ScalingProcessesDetailsSection,cd as ScheduledActionsDetailsSection,Uo as SecurityGroupSelector,pd as SecurityGroupsDetailsSection,Zo as ServerGroupAdvancedSettings,qo as ServerGroupAdvancedSettingsCommon,po as ServerGroupBasicSettings,uo as ServerGroupBasicSettingsComponent,vo as ServerGroupCapacity,Ro as ServerGroupInstanceType,$o as ServerGroupLoadBalancers,Ho as ServerGroupSecurityGroups,Vo as ServerGroupSecurityGroupsRemoved,Lo as ServerGroupZones,Ac as StepPolicyAction,Mc as StepPolicySummary,el as SubnetSelectField,Qr as SubnetSelectInput,hd as TagsDetailsSection,Nr as TargetGroup,Dr as TargetGroupDetails,xr as TargetGroupDetailsComponent,Ec as TargetMetricFields,yc as TargetTrackingAdditionalSettings,hc as TargetTrackingChart,Rc as TargetTrackingSummary,Dn as VpcReader,Fn as VpcTag,Td as WarmPoolDetailsSection,xl as amazonLoadBalancerDetailsSections,pr as applyHealthCheckInfoToTargetGroups,js as buildIpRulesModel,Zs as buildSecurityGroupRulesModel,ur as getAllTargetGroups,_c as getBaseImageName,Ls as initializeAmazonSecurityGroupForModal,$s as isAmazonSecurityGroupValid,gr as loadAmazonInstanceDetails,bl as loadAmazonLoadBalancerDetails,Cl as useAmazonLoadBalancerDetails};
|
|
1
|
+
import{SETTINGS as e,HelpField as t,DeploymentStrategyRegistry as a,FormValidator as n,FormikFormField as r,TextInput as l,AccountService as i,ReactSelectInput as s,CheckboxInput as o,MapEditorInput as c,NumberInput as d,NetworkReader as m,useData as u,SubnetReader as p,TetheredSelect as h,DeckRuntimeContext as g,TaskMonitor as v,FunctionWriter as f,ReactModal as E,WizardModal as y,WizardPage as b,noop as C,withRouter as N,ConfirmationModalService as w,ApplicationReader as S,AddEntityTagLinks as k,REST as T,FunctionReader as I,Details as P,AccountTag as A,CollapsibleSection as G,HelpContentsRegistry as x,LabeledValue as D,timestamp as B,SubnetTag as F,LabeledValueList as z,LinkWithClipboard as M,FirewallLabels as R,robotToHuman as L,Tooltip as O,InstanceLoadBalancerHealth as U,InstanceWriter as V,TaskExecutor as H,RecentHistoryService as q,InstanceDetailsHeader as W,InstanceInsights as j,ConsoleOutputLink as Z,InstanceLinks as _,InstanceReader as K,InstanceActions as Y,LoadBalancerServerGroup as X,HealthCounts as J,LoadBalancerInstances as Q,LoadBalancerClusterContainer as ee,logger as te,LoadBalancerDataUtils as ae,Spinner as ne,HoverablePopover as re,NameUtils as le,CopyToClipboard as ie,ManagedResourceDetailsIndicator as se,relativeTime as oe,Overridable as ce,SpinFormik as de,ModalClose as me,SubmitButton as ue,SelectInput as pe,CertificateReader as he,ValidationMessage as ge,CustomLabels as ve,Validators as fe,spelNumberCheck as Ee,SpInput as ye,SpelNumberInput as be,ChecklistInput as Ce,useDeepObjectDiff as Ne,useMountStatusRef as we,createFakeReactSyntheticEvent as Se,Markdown as ke,AccountSelectInput as Te,RegionSelectField as Ie,InfrastructureCaches as Pe,LoadBalancerWriter as Ae,CloudProviderRegistry as Ge,ManagedMenuItem as xe,useDeckRuntimeServices as De,useDataSource as Be,BakeryReader as Fe,AuthenticationService as ze,StageConfigField as Me,Registry as Re,BakeExecutionLabel as Le,ExecutionDetailsTasks as Oe,ExecutionDetailsSection as $e,StageFailureMessage as Ue,StageConstants as Ve,AppListExtractor as He,AccountRegionClusterSelector as qe,TargetSelect as We,PlatformHealthOverride as je,DeploymentStrategySelector as Ze,FormikStageConfig as _e,YamlEditor as Ke,StageArtifactSelectorDelegate as Ye,MapEditor as Xe,yamlDocumentsToString as Je,ExecutionStepDetails as Qe,ExecutionBarLabel as et,ArtifactReferenceService as tt,ExpectedArtifactService as at,TetheredCreatable as nt,excludeAllTypesExcept as rt,ArtifactTypePatterns as lt,PipelineConfigService as it,SecurityGroupWriter as st,TaskMonitorWrapper as ot,confirmNotManaged as ct,setMatchingResourceSummary as dt,DeployInitializer as mt,DeployingIntoManagedClusterWarning as ut,ServerGroupDetailsField as pt,ServerGroupNamePreview as ht,TaskReason as gt,parseNum as vt,ToggleButtonGroup as ft,ToggleSize as Et,usePrevious as yt,InstanceArchetypeSelector as bt,InstanceTypeSelector as Ct,UserVerification as Nt,MinMaxDesiredChanges as wt,ServerGroupWarningMessageService as St,ClusterTargetBuilder as kt,ServerGroupReader as Tt,CloudMetricsReader as It,TaskMonitorModal as Pt,EntitySource as At,ViewChangesLink as Gt,CapacityDetailsSection as xt,ViewScalingActivitiesLink as Dt,ShowUserData as Bt,ApplicationNameValidator as Ft}from"@spinnaker/core";import*as zt from"react";import Mt,{useState as Rt,useEffect as Lt}from"react";import Ot,{isEmpty as $t,forOwn as Ut,uniqBy as Vt,cloneDeep as Ht,orderBy as qt,flatten as Wt,isNil as jt,flatMap as Zt,isEqual as _t,sortBy as Kt,filter as Yt,chain as Xt,map as Jt,pickBy as Qt,groupBy as ea,get as ta,uniq as aa,difference as na,some as ra,isNumber as la,set as ia,partition as sa,every as oa,values as ca,head as da,isString as ma,clone as ua,has as pa,keys as ha,intersection as ga,extend as va,find as fa,xor as Ea,keyBy as ya}from"lodash";import ba from"classnames";import{Subject as Ca,from as Na,combineLatest as wa,BehaviorSubject as Sa,of as ka,Observable as Ta}from"rxjs";import{map as Ia,distinctUntilChanged as Pa,shareReplay as Aa,switchMap as Ga,withLatestFrom as xa,takeUntil as Da,tap as Ba,mergeMap as Fa,catchError as za,debounceTime as Ma,take as Ra}from"rxjs/operators";import{Dropdown as La,Modal as Oa,Button as $a,MenuItem as Ua,Tooltip as Va,OverlayTrigger as Ha,Checkbox as qa,ModalFooter as Wa}from"react-bootstrap";import{UISref as ja,UISrefActive as Za}from"@uirouter/react";import _a from"react-select";import{SortableHandle as Ka,arrayMove as Ya,SortableElement as Xa,SortableContainer as Ja}from"react-sortable-hoc";import{Form as Qa,Field as en}from"formik";import tn from"react-virtualized-select";import{Chart as an,LineController as nn,LineElement as rn,PointElement as ln,LinearScale as sn,Title as on,TimeScale as cn,Tooltip as dn,Legend as mn,Filler as un}from"chart.js";import"chartjs-adapter-luxon";var pn;const hn=e.providers.aws||{defaults:{}};hn&&(hn.adHocInfraWritesEnabled=null==(pn=hn.adHocInfraWritesEnabled)||pn,hn.resetToOriginal=e.resetProvider("aws"));class gn extends Mt.Component{constructor(){super(...arguments),this.handleChange=(e,t)=>{this.props.command.termination[e]=t,this.forceUpdate()}}render(){var e;const{command:a}=this.props;return Mt.createElement("div",{className:"form-group",style:{marginTop:"20px"}},Mt.createElement("div",{className:"well-compact alert alert-warning"},Mt.createElement("strong",null,"Note:")," a rolling push only updates the"," ",Mt.createElement("em",null,"launch ",Boolean(null==(e=hn.serverGroups)?void 0:e.enableLaunchTemplates)?"template":"configuration")," ","for the auto scaling group.",Mt.createElement("br",null)," Changes to the following fields will be ignored:",Mt.createElement("ul",null,Mt.createElement("li",null,"Account, Region, Subnet Type"),Mt.createElement("li",null,"Capacity"),Mt.createElement("li",null,"Load Balancers"),Mt.createElement("li",null,"Health Check Configuration"),Mt.createElement("li",null,"Termination Policies, Enable Traffic flag"))),Mt.createElement("div",{className:"form-group"},Mt.createElement("div",{className:"col-md-12 checkbox"},Mt.createElement("label",null,Mt.createElement("input",{type:"checkbox",checked:a.termination.relaunchAllInstances,onChange:e=>this.handleChange("relaunchAllInstances",e.target.checked)}),Mt.createElement("b",null,"Relaunch all instances"),Mt.createElement(t,{id:"strategy.rollingPush.relaunchAll"})))),!a.termination.relaunchAllInstances&&Mt.createElement("div",{className:"form-group"},Mt.createElement("div",{className:"col-md-5 sm-label-right"},"Total relaunches",Mt.createElement(t,{id:"strategy.rollingPush.totalRelaunches"})),Mt.createElement("div",{className:"col-md-2"},Mt.createElement("input",{className:"form-control input-sm",type:"number",value:a.termination.totalRelaunches,onChange:e=>this.handleChange("totalRelaunches",e.target.value),min:"0"}))),(a.termination.totalRelaunches>0||a.termination.relaunchAllInstances)&&Mt.createElement("div",{className:"form-group"},Mt.createElement("div",{className:"col-md-5 sm-label-right"},"Concurrent relaunches",Mt.createElement(t,{id:"strategy.rollingPush.concurrentRelaunches"})),Mt.createElement("div",{className:"col-md-2"},Mt.createElement("input",{className:"form-control input-sm",type:"number",value:a.termination.concurrentRelaunches,onChange:e=>this.handleChange("concurrentRelaunches",e.target.value),min:"1"}))),(a.termination.totalRelaunches>0||a.termination.relaunchAllInstances)&&Mt.createElement("div",{className:"form-group"},Mt.createElement("div",{className:"col-md-5 sm-label-right"},"Order",Mt.createElement(t,{id:"strategy.rollingPush.order"})),Mt.createElement("div",{className:"col-md-3"},Mt.createElement("select",{className:"input input-sm",style:{width:"100px"},value:a.termination.order,onChange:e=>this.handleChange("order",e.target.value)},Mt.createElement("option",{value:"oldest"},"oldest first"),Mt.createElement("option",{value:"newest"},"newest first")))))}}var vn;a.registerStrategy({label:"Rolling Push (not recommended)",description:`Updates the launch ${(null==(vn=hn.serverGroups)?void 0:vn.enableLaunchTemplates)?"template":"configuration"} for this server group, then terminates instances incrementally,\n replacing them with instances launched with the updated configuration. This is not a best practice - it goes against\n the principles of immutable infrastructure - but may be necessary in some cases.`,key:"rollingpush",providerRestricted:!0,additionalFields:["termination.totalRelaunches","termination.concurrentRelaunches","termination.order","termination.relaunchAllInstances"],AdditionalFieldsComponent:gn,initializationMethod:e=>{var t,a;e.termination=e.termination||{order:"oldest",relaunchAllInstances:!0,concurrentRelaunches:1,totalRelaunches:Number(null!=(a=null==(t=null==e?void 0:e.capacity)?void 0:t.max)?a:1)}}});class fn{constructor(){this.convertFunctionForEditing=e=>({...e,envVariables:e.environment?e.environment.variables:{},credentials:e.account,tracingConfig:{mode:e.tracingConfig?e.tracingConfig.mode:""},deadLetterConfig:{targetArn:e.deadLetterConfig?e.deadLetterConfig.targetArn:""},KMSKeyArn:e.kmskeyArn?e.kmskeyArn:"",subnetIds:e.vpcConfig?e.vpcConfig.subnetIds:[],securityGroupIds:e.vpcConfig?e.vpcConfig.securityGroupIds:[],vpcId:e.vpcConfig?e.vpcConfig.vpcId:"",operation:"",cloudProvider:e.cloudProvider,region:e.region,targetGroups:$t(e.targetGroups)?"":e.targetGroups})}normalizeFunction(e){const t=e;return t.credentials=e.account,t}normalizeFunctionSet(e){return e.map(e=>this.normalizeFunction(e))}constructNewAwsFunctionTemplate(e){return{role:"",runtime:"",s3bucket:"",s3key:"",handler:"",functionName:"",publish:!1,tags:{},memorySize:128,description:"",credentials:e.defaultCredentials.aws||hn.defaults.account,cloudProvider:"aws",detail:"",region:e.defaultRegions.aws||hn.defaults.region,envVariables:{},tracingConfig:{mode:"PassThrough"},kmskeyArn:"",vpcId:"",subnetIds:[],securityGroupIds:[],timeout:3,deadLetterConfig:{targetArn:""},operation:"",targetGroups:""}}}const En=(e,t)=>e.match(/^arn:aws:iam::\d{12}:role\/?\/[a-zA-Z_0-9+=,.@\-/]+/)?void 0:`Invalid role. ${t} must match regular expression: arn:aws:iam::d{12}:role/?[a-zA-Z_0-9+=,.@-_/]+`,yn=(e,t)=>e.match(/^[0-9A-Za-z.-]*[^.]$/)?void 0:`Invalid S3 Bucket name. ${t} must match regular expression: [0-9A-Za-z.-]*[^.]$`,bn=(e,t)=>e.match(/arn:aws[a-zA-Z-]?:[a-zA-Z_0-9.-]+:./)?void 0:`Invalid ARN. ${t} must match regular expression: /arn:aws[a-zA-Z-]?:[a-zA-Z_0-9.-]+:./`,Cn=(e,t)=>$t(e)?`At least one ${t} is required`:void 0,Nn=(e,t)=>e.match(/^[0-9A-Za-z]*$/)?void 0:`Invalid String Value. ${t} must match regular expression: [0-9A-Za-z]`;class wn extends Mt.Component{constructor(e){super(e)}validate(e){const t=new n(e);return t.field("role","Role ARN").required().withValidators(En),t.validateForm()}render(){return Mt.createElement("div",{className:"form-group"},Mt.createElement("div",{className:"col-md-11"},Mt.createElement("div",{className:"sp-margin-m-bottom"},Mt.createElement(r,{name:"role",label:"Role ARN",input:e=>Mt.createElement(l,{...e,placeholder:"Enter role ARN",name:"role"}),required:!0}))))}}const Sn=["nodejs24.x","nodejs22.x","java25","java21","java17","java11","java8.al2","python3.14","python3.13","python3.12","python3.11","python3.10","dotnet10","dotnet9","dotnet8","ruby4.0","ruby3.4","ruby3.3","provided.al2023","provided.al2"],kn="(Optional) Stack is naming components of a function, used to create vertical stacks of dependent services for integration testing.",Tn="(Optional) Detail is a string of free-form alphanumeric characters to describe any other variables in naming a function.";class In extends Mt.Component{constructor(){super(...arguments),this.state={accounts:[],existingFunctionNames:[],regions:[]},this.props$=new Ca,this.destroy$=new Ca}validate(e){const t=new n(e);t.field("s3bucket","S3 Bucket Name").optional().withValidators(yn);const a=t.validateForm();return this.props.isNew&&this.state.existingFunctionNames.includes(this.props.app.name.concat("-").concat(e.functionName))&&(a.functionName=`There is already a function in ${e.credentials}:${e.region} with that name.`),a}componentDidUpdate(){this.props$.next(this.props)}componentWillUnmount(){this.destroy$.next()}componentDidMount(){const e=this.props$.pipe(Ia(e=>e.formik.values)),t={account$:e.pipe(Ia(e=>e.credentials),Pa()),region$:e.pipe(Ia(e=>e.region),Pa()),functionName$:e.pipe(Ia(e=>e.functionName),Pa()),runtime$:e.pipe(Ia(e=>e.runtime),Pa()),s3bucket$:e.pipe(Ia(e=>e.s3bucket),Pa()),s3key$:e.pipe(Ia(e=>e.s3key),Pa()),handler$:e.pipe(Ia(e=>e.handler),Pa())},a=Na(i.listAccounts("aws")).pipe(Aa(1)),n=wa([t.account$,a]).pipe(Ga(([e,t])=>i.getRegionsForAccount(e)),Aa(1)),r=this.props.app.getDataSource("functions").data$,l=wa([r,t.account$,t.region$]).pipe(Ia(([e,t,a])=>e.filter(e=>e.account===t&&e.region===a).map(e=>e.functionName)),Aa(1));n.pipe(xa(t.region$),Da(this.destroy$)).subscribe(([e,t])=>{e.some(e=>e.name===t)||this.props.formik.setFieldValue("region",e[0]&&e[0].name)}),wa([a,n,l]).pipe(Da(this.destroy$)).subscribe(([e,t,a])=>this.setState({accounts:e,regions:t,existingFunctionNames:a}))}render(){const{isNew:e}=this.props,{errors:a,values:n}=this.props.formik,{accounts:i,regions:c}=this.state,d=ba({well:!0,"alert-danger":!!a.functionName,"alert-info":!a.functionName});return Mt.createElement("div",{className:"container-fluid form-horizontal "},e&&Mt.createElement("div",{className:d},Mt.createElement("strong",null,"Your function will be named: "),Mt.createElement(t,{id:"aws.function.name"}),Mt.createElement("span",null,this.props.app.name,"-",n.functionName),Mt.createElement(r,{name:"functionName",input:()=>null})),Mt.createElement(r,{name:"credentials",label:"Account",input:e=>Mt.createElement(s,{...e,stringOptions:i.map(e=>e.name),clearable:!0})}),Mt.createElement(r,{name:"region",label:"Region",input:e=>Mt.createElement(s,{...e,stringOptions:c.map(e=>e.name),clearable:!0})}),Mt.createElement(r,{name:"functionName",label:"Function Name",help:Mt.createElement(t,{id:"aws.function.name"}),input:e=>Mt.createElement(l,{...e})}),Mt.createElement(r,{name:"runtime",label:"Runtime",help:Mt.createElement(t,{id:"aws.function.runtime"}),input:e=>Mt.createElement(s,{...e,stringOptions:Sn,clearable:!0})}),Mt.createElement(r,{name:"s3bucket",label:"S3 Bucket",help:Mt.createElement(t,{id:"aws.function.s3bucket"}),input:e=>Mt.createElement(l,{...e,placeholder:"S3 bucket name"})}),Mt.createElement(r,{name:"s3key",label:"S3 Key",help:Mt.createElement(t,{id:"aws.function.s3key"}),input:e=>Mt.createElement(l,{...e,placeholder:"object.zip"})}),Mt.createElement(r,{name:"handler",label:"Handler",help:Mt.createElement(t,{id:"aws.function.handler"}),input:e=>Mt.createElement(l,{...e,placeholder:"filename.method"})}),Mt.createElement(r,{name:"publish",label:"Publish",input:e=>Mt.createElement(o,{...e})}))}}class Pn extends Mt.Component{constructor(e){super(e),this.validate=e=>{const t=new n(e);return t.field("deadLetterConfig.targetArn","Target ARN").optional().withValidators(bn),t.validateForm()}}render(){return Mt.createElement("div",{className:"container-fluid form-horizontal "},"Dead Letter Config",Mt.createElement(r,{name:"deadLetterConfig.targetArn",label:"Target ARN",help:Mt.createElement(t,{id:"aws.function.deadletterqueue"}),input:e=>Mt.createElement(l,{...e})}),"X-Ray Tracing",Mt.createElement(r,{name:"tracingConfig.mode",label:"Mode",help:Mt.createElement(t,{id:"aws.function.tracingConfig.mode"}),input:e=>Mt.createElement(s,{...e,stringOptions:["Active","PassThrough"],clearable:!0})}))}}class An extends Mt.Component{constructor(){super(...arguments),this.validate=e=>{const t=new n(e);return t.field("kmskeyArn","KMS Key ARN").optional().withValidators(bn),t.validateForm()}}render(){return Mt.createElement("div",{className:"container-fluid form-horizontal "},Mt.createElement(r,{name:"envVariables",label:"Env Variables",input:e=>Mt.createElement(c,{...e,allowEmptyValues:!0,addButtonLabel:"Add"})}),Mt.createElement(r,{name:"kmskeyArn",label:"Key ARN",help:Mt.createElement(t,{id:"aws.function.kmsKeyArn"}),input:e=>Mt.createElement(l,{...e})}))}}class Gn extends Mt.Component{constructor(){super(...arguments),this.validate=()=>({})}render(){return Mt.createElement("div",{className:"container-fluid form-horizontal "},Mt.createElement(r,{name:"description",label:"Description",input:e=>Mt.createElement(l,{...e})}),Mt.createElement(r,{name:"memorySize",label:"Memory (MB)",help:Mt.createElement(t,{id:"aws.functionBasicSettings.memorySize"}),input:e=>Mt.createElement(d,{...e,min:128,max:3008})}),Mt.createElement(r,{name:"timeout",label:"Timeout (seconds)",help:Mt.createElement(t,{id:"aws.functionBasicSettings.timeout"}),input:e=>Mt.createElement(d,{...e,min:1,max:900})}),Mt.createElement(r,{name:"targetGroups",label:"Target Group Name",input:e=>Mt.createElement(l,{...e})}))}}class xn extends Mt.Component{constructor(){super(...arguments),this.validate=e=>{const t=new n(e);return t.field("tags","Tag").required().withValidators(Cn),t.validateForm()}}render(){return Mt.createElement("div",{className:"container-fluid form-horizontal "},Mt.createElement(r,{name:"tags",input:e=>Mt.createElement(c,{...e,allowEmptyValues:!1,addButtonLabel:"Add"})}))}}class Dn{static listVpcs(){return this.cache||(this.cache=m.listNetworksByProvider("aws").then(e=>e.map(e=>(e.label=e.name,e.deprecated=!!e.deprecated,e.deprecated&&(e.label+=" (deprecated)"),e)))),this.cache}static resetCache(){this.cache=null}static getVpcName(e){return this.listVpcs().then(t=>{const a=t.find(t=>t.id===e);return a?a.name:null})}}const Bn="None (EC2 Classic)";function Fn(e){const{vpcId:t}=e,a=u(async()=>{const t=await Dn.getVpcName(e.vpcId);return t?`${t} (${e.vpcId})`:`(${e.vpcId})`},Bn,[t]),n=t?a.result:Bn;return Mt.createElement("span",{className:"vpc-tag"},n)}class zn extends Mt.Component{constructor(e){super(e),this.state={vpcOptions:[],accounts:null,regions:[],subnets:[],availableSubnets:[],securityGroups:null},this.props$=new Ca,this.destroy$=new Ca,this.handleSubnetUpdate=e=>{const t=e.map(e=>e.value);this.props.formik.setFieldValue("subnetIds",t)},this.handleSecurityGroupsUpdate=e=>{const t=e.map(e=>e.value);this.props.formik.setFieldValue("securityGroupIds",t)},this.setVpc=e=>{this.props.formik.setFieldValue("vpcId",e),this.props.formik.setFieldValue("subnetIds",[]);const{availableSubnets:t}=this.state,a=t.filter(function(t){return t.vpcId.includes(e)});this.setState({subnets:a})},this.toSubnetOption=e=>({value:e.subnetId,label:e.subnetId}),this.getSecurityGroupsByVpc=e=>{const{values:t}=this.props.formik,a=[];return Ut(e,function(e,n){n===t.credentials&&Ut(e,function(e,n){"aws"===n&&Ut(e,function(e,n){n===t.region&&e.forEach(function(e){e.vpcId===t.vpcId&&a.push({value:e.id,label:e.name})})})})}),a},this.getSubnetOptions=()=>{const{subnets:e,availableSubnets:t}=this.state,{values:a}=this.props.formik;return!this.props.isNew&&a.vpcId?t.filter(function(e){return e.vpcId.includes(a.vpcId)}).map(this.toSubnetOption):e.map(this.toSubnetOption)},this.getAllVpcs()}getAllVpcs(){Na(Dn.listVpcs()).pipe(Da(this.destroy$)).subscribe(e=>{this.setState({vpcOptions:e})})}validate(){return{}}getAvailableSubnets(){return p.listSubnetsByProvider("aws")}getAvailableSecurityGroups(){return this.context.services.securityGroupReader.getAllSecurityGroups()}makeSubnetOptions(e){const t=e.map(e=>({subnetId:e.id,vpcId:e.vpcId}));return Vt(t,"subnetId")}componentDidUpdate(){this.props$.next(this.props)}componentWillUnmount(){this.destroy$.next()}componentDidMount(){const e=Promise.resolve(this.getAvailableSubnets()).then(e=>(e.forEach(e=>{e.label=e.id,e.deprecated=!!e.deprecated,e.deprecated&&(e.label+=" (deprecated)")}),e.filter(e=>e.label))).then(e=>this.makeSubnetOptions(e)),t=Promise.resolve(this.getAvailableSecurityGroups());wa([e,t]).pipe(Da(this.destroy$)).subscribe(([e,t])=>this.setState({availableSubnets:e,securityGroups:t}))}render(){const{vpcOptions:e,securityGroups:a}=this.state,{values:n}=this.props.formik,l=this.getSubnetOptions(),i=a?this.getSecurityGroupsByVpc(a):[];return Mt.createElement("div",{className:"form-group"},Mt.createElement("div",{className:"col-md-11"},Mt.createElement("div",{className:"sp-margin-m-bottom"},n.credentials&&Mt.createElement(r,{name:"vpcId",label:"VPC Id",help:Mt.createElement(t,{id:"aws.function.vpc.id"}),input:t=>Mt.createElement(s,{...t,stringOptions:e.filter(e=>e.account===n.credentials).map(e=>e.id),clearable:!0}),onChange:this.setVpc,required:!1})),Mt.createElement("div",{className:"form-group"},Mt.createElement("div",{className:"col-md-4 sm-label-right"},Mt.createElement("b",null,"Subnets "),Mt.createElement(t,{id:"aws.function.subnet"})),Mt.createElement("div",{className:"col-md-7"},0===l.length&&Mt.createElement("div",{className:"form-control-static"},"No subnets found in the selected account/region/VPC"),n.vpcId?Mt.createElement(h,{multi:!0,options:l,value:n.subnetIds,onChange:this.handleSubnetUpdate}):null)),Mt.createElement("div",{className:"form-group"},Mt.createElement("div",{className:"col-md-4 sm-label-right"},Mt.createElement("b",null,"Security Groups "),Mt.createElement(t,{id:"aws.function.subnet"})),Mt.createElement("div",{className:"col-md-7"},0===i.length&&Mt.createElement("div",{className:"form-control-static"},"No security groups found in the selected account/region/VPC"),n.credentials&&n.vpcId?Mt.createElement(h,{multi:!0,options:i,value:n.securityGroupIds,onChange:this.handleSecurityGroupsUpdate}):null))))}}zn.contextType=g;class Mn extends Mt.Component{constructor(e){super(e),this._isUnmounted=!1,this.submit=e=>{const{app:t}=this.props,{isNew:a}=this.state,n=Ht(e),r=a?"Create":"Update",l=new v({application:t,title:(a?"Creating":"Updating")+" your function",onDismiss:()=>this.props.dismissModal(),onTaskComplete:()=>{this.checkForS3Update(n,r)}});l.submit(()=>(n.type="lambdaFunction",n.operation=a?"createLambdaFunction":"updateLambdaFunctionConfiguration",f.upsertFunction(n,t,r))),this.setState({taskMonitor:l})};const t=new fn,a=e.functionDef?t.convertFunctionForEditing(e.functionDef):t.constructNewAwsFunctionTemplate(e.app);this.state={isNew:!e.functionDef,functionCommand:a,taskMonitor:null}}static show(e,t){return E.show(Rn,e,{dialogClassName:"wizard-modal modal-lg"},t)}componentWillUnmount(){var e;this._isUnmounted=!0,null==(e=this.refreshUnsubscribe)||e.call(this),this.refreshUnsubscribe=void 0}onApplicationRefresh(e){var t;if(null==(t=this.refreshUnsubscribe)||t.call(this),this.refreshUnsubscribe=void 0,this._isUnmounted)return;this.props.dismissModal(),this.setState({taskMonitor:void 0});const a={name:e.name,accountId:e.credentials,region:e.region,vpcId:e.vpcId,provider:"aws"};this.props.stateService.includes("**.functionDetails")?this.props.stateService.go("^.functionDetails",a):this.props.stateService.go(".functionDetails",a)}onTaskComplete(e){var t;null==(t=this.refreshUnsubscribe)||t.call(this),this.refreshUnsubscribe=void 0,this.refreshUnsubscribe=this.props.app.functions.onNextRefresh(()=>this.onApplicationRefresh(e)),this.props.app.functions.refresh()}checkForS3Update(e,t){const{isNew:a}=this.state;if(!a&&(e.s3bucket||e.s3key)){e.operation="updateLambdaFunctionCode";const{app:a}=this.props;f.upsertFunction(e,a,t)}this.onTaskComplete(e)}render(){const{app:e,dismissModal:t,forPipelineConfig:a,functionDef:n}=this.props,{isNew:r,functionCommand:l,taskMonitor:i}=this.state;let s=a?"Configure Existing Function":"Create New Function";return r||(s=`Edit ${l.functionName}: ${l.region}: ${l.credentials}`),Mt.createElement(y,{heading:s,initialValues:l,taskMonitor:i,dismissModal:t,closeModal:this.submit,submitButtonLabel:a?r?"Add":"Done":r?"Create":"Update",render:({formik:t,nextIdx:a,wizard:l})=>Mt.createElement(Mt.Fragment,null,Mt.createElement(b,{label:"Basic information",wizard:l,order:a(),render:({innerRef:a})=>Mt.createElement(In,{ref:a,app:e,formik:t,isNew:r,functionDef:n})}),Mt.createElement(b,{label:"Execution Role",wizard:l,order:a(),render:({innerRef:e})=>Mt.createElement(wn,{ref:e,formik:t,isNew:r,functionDef:n})}),Mt.createElement(b,{label:"Environment",wizard:l,order:a(),render:({innerRef:e})=>Mt.createElement(An,{ref:e,formik:t,isNew:r,functionDef:n})}),Mt.createElement(b,{label:"Tags",wizard:l,order:a(),render:({innerRef:e})=>Mt.createElement(xn,{ref:e,formik:t,isNew:r,functionDef:n})}),Mt.createElement(b,{label:"Settings",wizard:l,order:a(),render:({innerRef:e})=>Mt.createElement(Gn,{ref:e,formik:t,isNew:r,functionDef:n})}),Mt.createElement(b,{label:"Network",wizard:l,order:a(),render:({innerRef:a})=>Mt.createElement(zn,{ref:a,app:e,formik:t,isNew:r})}),Mt.createElement(b,{label:"Debugging and Error Handling",wizard:l,order:a(),render:({innerRef:e})=>Mt.createElement(Pn,{ref:e,formik:t,isNew:r,functionDef:n})}))})}}Mn.defaultProps={closeModal:C,dismissModal:C};const Rn=Object.assign(N(Mn),{show:Mn.show});class Ln extends Mt.Component{constructor(e){super(e),this.editFunction=()=>{const{functionDef:e}=this.props,{application:t}=this.state;Rn.show({app:t,functionDef:e},this.context.services)},this.deleteFunction=()=>{const{app:e,functionDef:t,functionFromParams:a}=this.props,n={application:e,title:"Deleting "+a.functionName},r={cloudProvider:t.cloudProvider,functionName:t.functionName,region:t.region,credentials:t.credentials};w.confirm({header:`Really delete ${a.functionName} in ${a.region}: ${a.account}?`,buttonText:`Delete ${a.functionName}`,account:a.account,taskMonitorConfig:n,submitMethod:()=>f.deleteFunction(r,e)})},this.entityTagUpdate=()=>{this.props.app.functions.refresh()},this.state={application:e.app}}componentDidMount(){const{app:e,functionDef:t}=this.props;let a;const n=t.functionName.split("-")[0];n===e.name?a=e:S.getApplication(n).then(e=>{this.setState({application:e})}).catch(()=>{this.setState({application:this.props.app})}),this.setState({application:a})}render(){const{app:t,functionDef:a}=this.props,{application:n}=this.state;return Mt.createElement("div",{style:{display:"inline-block"}},hn.adHocInfraWritesEnabled&&Mt.createElement(La,{className:"dropdown",id:"function-actions-dropdown"},Mt.createElement(La.Toggle,{className:"btn btn-sm btn-primary dropdown-toggle"},Mt.createElement("span",null,"Function Actions")),Mt.createElement(La.Menu,{className:"dropdown-menu"},Mt.createElement("li",{className:n?"":"disabled"},Mt.createElement("a",{className:"clickable",onClick:this.editFunction},"Edit Function")),a.functionName&&Mt.createElement("li",null,Mt.createElement("a",{className:"clickable",onClick:this.deleteFunction},"Delete Function")),e&&e.feature.entityTags&&Mt.createElement(k,{component:a,application:t,entityType:"function",onUpdate:this.entityTagUpdate}))))}}var On,$n,Un,Vn,Hn,qn;Ln.contextType=g;const Wn={type:"m5",description:"m5 instances provide a balance of compute, memory, and network resources. They are a good choice for most applications.",instanceTypes:[{name:"m5.large",label:"Large",cpu:2,memory:8,storage:{type:"EBS"},costFactor:2},{name:"m5.xlarge",label:"XLarge",cpu:4,memory:16,storage:{type:"EBS"},costFactor:3},{name:"m5.2xlarge",label:"2XLarge",cpu:8,memory:32,storage:{type:"EBS"},costFactor:4}]},jn=[{type:"general",label:"General Purpose",families:[Wn,{type:"t2",description:"t2 instances are a good choice for workloads that don’t use the full CPU often or consistently, but occasionally need to burst (e.g. web servers, developer environments and small databases).",instanceTypes:[{name:"t2.small",label:"Small",cpu:1,memory:2,storage:{type:"EBS"},costFactor:1,cpuCreditsPerHour:12},{name:"t2.medium",label:"Medium",cpu:2,memory:4,storage:{type:"EBS"},costFactor:1,cpuCreditsPerHour:24},{name:"t2.large",label:"Large",cpu:2,memory:8,storage:{type:"EBS"},costFactor:2,cpuCreditsPerHour:36},{name:"t2.xlarge",label:"XLarge",cpu:4,memory:16,storage:{type:"EBS"},costFactor:3,cpuCreditsPerHour:54},{name:"t2.2xlarge",label:"2XLarge",cpu:8,memory:32,storage:{type:"EBS"},costFactor:4,cpuCreditsPerHour:81}]},{type:"t3",description:"t3 instances are a good choice for workloads that don’t use the full CPU often or consistently, but occasionally need to burst (e.g. web servers, developer environments and small databases).",instanceTypes:[{name:"t3.small",label:"Small",cpu:2,memory:2,storage:{type:"EBS"},costFactor:1,cpuCreditsPerHour:24},{name:"t3.medium",label:"Medium",cpu:2,memory:4,storage:{type:"EBS"},costFactor:1,cpuCreditsPerHour:24},{name:"t3.large",label:"Large",cpu:2,memory:8,storage:{type:"EBS"},costFactor:2,cpuCreditsPerHour:36},{name:"t3.xlarge",label:"XLarge",cpu:4,memory:16,storage:{type:"EBS"},costFactor:3,cpuCreditsPerHour:96},{name:"t3.2xlarge",label:"2XLarge",cpu:8,memory:32,storage:{type:"EBS"},costFactor:4,cpuCreditsPerHour:192}]}],icon:"hdd",showCpuCredits:!0,descriptionListOverride:[Wn.description,"t2/t3 instances are a good choice for workloads that don’t use the full CPU often or consistently, but occasionally need to burst (e.g. web servers, developer environments and small databases)."]},{type:"memory",label:"High Memory",families:[{type:"r5",description:"r5 instances are optimized for memory-intensive applications and have the lowest cost per GiB of RAM among Amazon EC2 instance types.",instanceTypes:[{name:"r5.large",label:"Large",cpu:2,memory:16,storage:{type:"EBS"},costFactor:1},{name:"r5.xlarge",label:"XLarge",cpu:4,memory:32,storage:{type:"EBS"},costFactor:2},{name:"r5.2xlarge",label:"2XLarge",cpu:8,memory:64,storage:{type:"EBS"},costFactor:2},{name:"r5.4xlarge",label:"4XLarge",cpu:16,memory:128,storage:{type:"EBS"},costFactor:3}]}],icon:"hdd"},{type:"micro",label:"Micro Utility",families:[{type:"t2",description:"t2 instances are a good choice for workloads that don’t use the full CPU often or consistently, but occasionally need to burst (e.g. web servers, developer environments and small databases).",instanceTypes:[{name:"t2.nano",label:"Nano",cpu:1,memory:.5,storage:{type:"EBS"},costFactor:1,cpuCreditsPerHour:3},{name:"t2.micro",label:"Micro",cpu:1,memory:1,storage:{type:"EBS"},costFactor:1,cpuCreditsPerHour:6},{name:"t2.small",label:"Small",cpu:1,memory:2,storage:{type:"EBS"},costFactor:1,cpuCreditsPerHour:12}]},{type:"t3",description:"t3 instances are a good choice for workloads that don’t use the full CPU often or consistently, but occasionally need to burst (e.g. web servers, developer environments and small databases).",instanceTypes:[{name:"t3.nano",label:"Nano",cpu:2,memory:.5,storage:{type:"EBS"},costFactor:1,cpuCreditsPerHour:6},{name:"t3.micro",label:"Micro",cpu:2,memory:1,storage:{type:"EBS"},costFactor:1,cpuCreditsPerHour:12},{name:"t3.small",label:"Small",cpu:2,memory:2,storage:{type:"EBS"},costFactor:1,cpuCreditsPerHour:24}]}],icon:"hdd",showCpuCredits:!0,descriptionListOverride:["t2/t3 instances are a good choice for workloads that don’t use the full CPU often or consistently, but occasionally need to burst (e.g. web servers, developer environments and small databases)."]},{type:"custom",label:"Custom Type",families:[],icon:"asterisk"}],Zn=null!=(Un=null==($n=null==(On=hn.instanceTypes)?void 0:On.exclude)?void 0:$n.categories)?Un:[],_n=null!=(qn=null==(Hn=null==(Vn=hn.instanceTypes)?void 0:Vn.exclude)?void 0:Hn.families)?qn:[],Kn=jn.filter(({type:e})=>!Zn.includes(e)).map(e=>Object.assign({},e,{families:e.families.filter(({type:e})=>!_n.includes(e))}));class Yn{constructor(){this.instanceClassOrder=["xlarge","large","medium","small","micro","nano"],this.families={ec2ClassicSupported:["m1","m3","t1","c1","c3","cc2","cr1","m2","r3","d2","hs1","i2","g2"],ebsOptimized:["c4","d2","f1","g3","i3","m4","m5","p2","r4","r5","x1"],burstablePerf:["t2","t3","t3a","t4g"]}}getCategories(){return Promise.resolve(Kn)}getAllTypesByRegion(){return T("/instanceTypes").get().then(function(e){return Ot.chain(e).map(function(e){return{...e,key:[e.region,e.account,e.name].join(":")}}).uniqBy("key").groupBy("region").value()})}sortTypesByFamilyAndSize(e,t){const a=e.split("."),n=t.split("."),[r,l=""]=a,[i,s=""]=n;if(r!==i)return r>i?1:r<i?-1:0;const o=this.instanceClassOrder.findIndex(e=>l.endsWith(e)),c=this.instanceClassOrder.findIndex(e=>s.endsWith(e));if(-1===o||-1===c)return 0;if(0===o&&0===c){const e=parseInt(l.replace("xlarge",""))||0,t=parseInt(s.replace("xlarge",""))||0;return t<e?1:t>e?-1:0}return o>c?-1:o<c?1:0}getAvailableTypesForRegions(e,t){let a=[];return(t=t||[])&&t.length&&(a=e[t[0]]||[]),t.forEach(function(t){e[t]&&(a=Ot.intersectionBy(a,e[t],"name"))}),null==a?void 0:a.sort((e,t)=>this.sortTypesByFamilyAndSize(e.name,t.name))}filterInstanceTypes(e,t,a,n){return Ot.filter(e,e=>"*"===t&&"*"===n||!(!a&&!this.families.ec2ClassicSupported.includes(e.name.split(".")[0]))&&(!(t&&e.supportedVirtualizationTypes&&!e.supportedVirtualizationTypes.includes(t))&&!(n&&e.supportedArchitectures&&!((e,t)=>e.some(e=>e.toLowerCase()===t.toLowerCase()))(e.supportedArchitectures,n))))}isEbsOptimized(e){if(!e)return!1;const t=Ot.split(e,".",1)[0];return this.families.ebsOptimized.includes(t)}isBurstingSupportedForAllTypes(e){return!(!e||!e.length)&&e.every(e=>this.isBurstingSupported(e))}isBurstingSupported(e){if(!e)return!1;const t=Ot.split(e,".",1)[0];return this.families.burstablePerf.includes(t)}getInstanceTypesInCategory(e,t){var a;if(!e||!e.length||!t)return[];if("custom"===t)return e;const n=Ot.flatten(null==(a=Ot.find(jn,{type:t}))?void 0:a.families.map(e=>e.instanceTypes.map(e=>e.name)));return Ot.intersection(e,n)}}class Xn{addComparator(e){if(e.comparisonOperator)switch(e.comparisonOperator){case"LessThanThreshold":e.comparator="<";break;case"GreaterThanThreshold":e.comparator=">";break;case"LessThanOrEqualToThreshold":e.comparator="≤";break;case"GreaterThanOrEqualToThreshold":e.comparator="≥"}}addAdjustmentAttributes(e){e.operator=e.scalingAdjustment<0?"decrease":"increase",e.absAdjustment=Math.abs(e.scalingAdjustment)}transformScalingPolicy(e){const t={...e},a=(e,t)=>t.metricIntervalUpperBound-e.metricIntervalUpperBound,n=(e,t)=>e.metricIntervalLowerBound-t.metricIntervalLowerBound;if(t.alarms=e.alarms||[],t.alarms.forEach(e=>this.addComparator(e)),this.addAdjustmentAttributes(t),t.stepAdjustments&&t.stepAdjustments.length){t.stepAdjustments.forEach(e=>this.addAdjustmentAttributes(e));const r=e.stepAdjustments.every(e=>void 0!==e.metricIntervalUpperBound)?a:n;t.stepAdjustments.sort((e,t)=>r(e,t))}return t}normalizeServerGroupDetails(e){const t={...e};return e.scalingPolicies&&(t.scalingPolicies=e.scalingPolicies.map(e=>this.transformScalingPolicy(e))),t}normalizeServerGroup(e){return e.instances.forEach(t=>{t.vpcId=e.vpcId}),Dn.listVpcs().then(t=>this.addVpcNameToServerGroup(e)(t))}addVpcNameToServerGroup(e){return t=>{const a=t.find(t=>t.id===e.vpcId);return e.vpcName=a?a.name:"",e}}convertServerGroupCommandToDeployConfiguration(e){const t={...e};t.cloudProvider="aws",t.availabilityZones={[t.region]:e.availabilityZones},t.loadBalancers=(e.loadBalancers||[]).concat(e.vpcLoadBalancers||[]),t.targetGroups=e.targetGroups||[],t.account=t.credentials,t.subnetType=t.subnetType||"",t.instanceType=t.instanceType||t.launchTemplateOverridesForInstanceType&&t.launchTemplateOverridesForInstanceType[0].instanceType,"clone"!==e.viewState.mode&&delete t.source,t.ramdiskId||delete t.ramdiskId;return["region","viewState","backingData","selectedProvider","instanceProfile","vpcId"].forEach(e=>{delete t[e]}),t}constructNewStepScalingPolicyTemplate(e){return{alarms:[{namespace:"AWS/EC2",metricName:"CPUUtilization",threshold:50,statistic:"Average",comparisonOperator:"GreaterThanThreshold",evaluationPeriods:1,dimensions:[{name:"AutoScalingGroupName",value:e.name}],period:60}],adjustmentType:"ChangeInCapacity",stepAdjustments:[{scalingAdjustment:1,metricIntervalLowerBound:0}],estimatedInstanceWarmup:600}}constructNewTargetTrackingPolicyTemplate(){return{alarms:[],estimatedInstanceWarmup:300,targetTrackingConfiguration:{targetValue:null,predefinedMetricSpecification:{predefinedMetricType:"ASGAverageCPUUtilization"}}}}}let Jn,Qn,er;const tr={get awsInstanceTypeService(){return Jn=Jn||new Yn},get awsServerGroupTransformer(){return Qn=Qn||new Xn},get functionReader(){return er=er||new I(new fn)}};class ar extends Mt.Component{constructor(e){super(e),this.destroy$=new Ca,this.state={loading:!0}}extractFunction(){const{app:e,functionObj:t}=this.props;e.functions.data.find(e=>e.functionName===t.functionName&&e.region===t.region&&e.account===t.account)?Na(tr.functionReader.getFunctionDetails("aws",t.account,t.region,t.functionName)).pipe(Da(this.destroy$)).subscribe(e=>{e.length&&this.setState({functionDef:e[0],loading:!1})}):this.setState({functionDef:{},loading:!1})}componentDidMount(){const{app:e}=this.props,t=e.functions;Na(t.ready()).pipe(Da(this.destroy$)).subscribe(()=>{const e=t.onRefresh(()=>this.extractFunction());this.setState({dataSourceUnsubscribe:e}),this.extractFunction()})}componentWillUnmount(){this.state.dataSourceUnsubscribe&&this.state.dataSourceUnsubscribe(),this.destroy$.next()}render(){const{app:e}=this.props,{loading:t,functionDef:a}=this.state;if(t)return Mt.createElement(P,{loading:t});const n=Mt.createElement("dl",{className:"horizontal-when-filters-collapsed dl-horizontal dl-narrow"},Mt.createElement("dt",null,"Last Modified "),Mt.createElement("dd",null,a.lastModified),Mt.createElement("dt",null,"In"),Mt.createElement("dd",null,Mt.createElement(A,{account:a.account})," ",a.region),Mt.createElement("dt",null,"VPC"),Mt.createElement("dd",null,a.vpcConfig?a.vpcConfig.vpcId:"Default"),Mt.createElement("dt",null,"Function ARN"),Mt.createElement("dd",null,a.functionArn),Mt.createElement("dt",null,"Revision ID"),Mt.createElement("dd",null,a.revisionId),Mt.createElement("dt",null,"Version"),Mt.createElement("dd",null,a.version)),r=Mt.createElement("dl",{className:"horizontal-when-filters-collapsed dl-horizontal dl-narrow"},a.eventSourceMappings&&0!==a.eventSourceMappings.length?a.eventSourceMappings.map(e=>Mt.createElement(Mt.Fragment,null,Mt.createElement("h5",null,Mt.createElement("strong",null,"Event Source")),Mt.createElement("dl",null,Mt.createElement("dt",null,"ARN"),Mt.createElement("dd",null,e.eventSourceArn),Mt.createElement("dt",null,"State"),Mt.createElement("dd",null,e.state)))):"None"),l=Mt.createElement("dl",{className:"horizontal-when-filters-collapsed dl-horizontal dl-narrow"},a.aliasConfigurations&&0!==a.aliasConfigurations.length?a.aliasConfigurations.map(e=>Mt.createElement(Mt.Fragment,null,Mt.createElement("h5",null,Mt.createElement("strong",null,"Alias Details")),Mt.createElement("dl",null,Mt.createElement("dt",null,"Name"),Mt.createElement("dd",null,e.name),Mt.createElement("dt",null,"ARN"),Mt.createElement("dd",null,e.aliasArn)))):"None"),i=Mt.createElement(G,{heading:"Function Details"},n),s=Mt.createElement(G,{heading:"Event Source Details"},r),o=Mt.createElement(G,{heading:"Alias Configuration Details"},l);return Mt.createElement(P,{loading:this.state.loading},$t(this.state.functionDef)?"Function not found.":Mt.createElement(P.Header,{icon:Mt.createElement("i",{className:"fa fa-xs fa-fw fa-asterisk"}),name:this.state.functionDef.functionName},Mt.createElement("div",{className:"actions"},Mt.createElement(Ln,{app:e,functionDef:a,functionFromParams:{account:this.state.functionDef.account,region:this.state.functionDef.region,functionName:this.state.functionDef.functionName}}))),$t(this.state.functionDef)?"":i,$t(this.state.functionDef)||$t(this.state.functionDef.eventSourceMappings)?"":s,$t(this.state.functionDef)||$t(this.state.functionDef.aliasConfigurations)?"":o)}}const nr={"aws.associateElasticIp.elasticIp":"<p>(Optional) <b>Elastic IP</b> is an IP address that Spinnaker will associate with this cluster.</p>\n <p>If specified, this elastic IP must exist and not already be attached to an instance or cluster.</p>\n <p>If left blank, Spinnaker will make a selection from the list of available elastic IPs in the provided account and region.</p>","aws.associateElasticIp.type":"<p><b>Type</b> of elastic IP to associate:'\n <ul>\n <li><b>standard</b> is usable in EC2 Classic</li>\n <li><b>vpc</b> is usable in VPC</li>\n </ul>","aws.serverGroup.subnet":"The subnet selection determines the VPC in which your server group will run. Options vary by account and region; the most common ones are:\n <ul>\n <li><b>None (EC2 Classic)</b>: instances will not run in a VPC</li>\n <li><b>internal</b> instances will be restricted to internal clients (i.e. require VPN access)</li>\n <li><b>external</b> instances will be publicly accessible and running in VPC</li>\n </ul>","aws.loadBalancer.subnet":"The subnet selection determines the VPC in which your load balancer will run.<br/>\n This also restricts the server groups which can be serviced by the load balancer.\n Options vary by account and region; the most common ones are:\n <ul>\n <li><b>None (EC2 Classic)</b>: the load balancer will not run in a VPC</li>\n <li><b>internal</b> access to the load balancer will be restricted to internal clients (i.e. require VPN access)</li>\n <li><b>external</b> the load balancer will be publicly accessible and running in VPC</li>\n </ul>","aws.loadBalancer.detail":'<p>(Optional) <b>Detail</b> is a string of free-form alphanumeric characters; by convention, we recommend using "frontend".</p>\n <p>However, if your stack name needs to be longer (load balancer names are limited to 32 characters), consider changing it to "elb", or omit it altogether.</p>',"aws.loadBalancer.internal":"Controls the load balancer scheme, <strong>not</strong> the subnet. By default, load balancers are created with a DNS name that resolves to public IP addresses. Specify internal to create a load balancer with a DNS name that resolves to private IP addresses.","aws.loadBalancer.stack":"(Optional) <b>Stack</b> is one of the core naming components of a cluster, used to create vertical stacks of dependent services for integration testing.","aws.loadBalancer.name":"<p>The load balancer name is formed by combining the application name, the <b>Stack</b> field, and the <b>Detail</b> field.</p>","aws.loadBalancer.targetGroups":"Add a target group if you want to associate this with an Application Load Balancer (ALB) or Network Load Balancer (NLB)","aws.loadBalancer.loadBalancers":"Add a load balancer directly if you created a Classic Load Balancer (a classic load balancer does not have target groups)","aws.loadBalancer.ruleCondition.host":"<p>You can specify a single host name (for example, <em>my.example.com</em>). A host name is case insensitive, can be up to 128 characters in length, and can contain any of the following characters. Note that you can include up to three wildcard characters.</p>\n <ul>\n <li>A-Z, a-z, 0-9</li>\n <li>- .</li>\n <li>* (matches 0 or more characters)</li>\n <li>? (matches exactly 1 character)</li>\n </ul>\n <p>Note that <strong>*.example.com</strong> will match <strong>test.example.com</strong> but won't match <strong>example.com</strong>.</p>","aws.loadBalancer.ruleCondition.path":"<p>You can specify a single path pattern (for example, <em>/img/*</em>). A path pattern is case sensitive, can be up to 128 characters in length, and can contain any of the following characters. Note that you can include up to three wildcard characters.</p>\n <ul>\n <li>A-Z, a-z, 0-9</li>\n <li>_ - . $ / ~ \" ' @ : +</li>\n <li>& (using &amp;)</li>\n <li>* (matches 0 or more characters)</li>\n <li>? (matches exactly 1 character)</li>\n </ul>\n <p>Note that the path pattern is used to route requests but does not alter them. For example, if a rule has a path pattern of <em>/img/*</em>, the rule would forward a request for <em>/img/picture.jpg</em> to the specified target group as a request for <em>/img/picture.jpg</em>.</p>","aws.loadBalancer.oidcAuthentication":"Authentication requires a configured OIDC client.","aws.serverGroup.stack":"(Optional) <b>Stack</b> is one of the core naming components of a cluster, used to create vertical stacks of dependent services for integration testing.","aws.serverGroup.detail":"(Optional) <b>Detail</b> is a string of free-form alphanumeric characters and hyphens to describe any other variables.","aws.serverGroup.imageName":"(Required) <b>Image</b> is the deployable Amazon Machine Image. Images are restricted to the account and region selected.","aws.serverGroup.storageType":"AWS offers various storage options like temporary block-level storage via instance store (SSD, HDD) and Amazon Elastic Block Store (EBS). This column lists the storage type supported for the instance type.","aws.serverGroup.instancesDistribution":'Learn more in <a target="_blank" href="https://docs.aws.amazon.com/autoscaling/ec2/userguide/asg-purchase-options.html">AWS docs</a>.',"aws.serverGroup.spotMaxPrice":"The maximum price per unit hour to pay for a Spot instance. By <b>default (empty)</b>, Amazon EC2 Auto Scaling uses the On-Demand price as the maximum Spot price.","aws.serverGroup.spotAllocationStrategy":"<p>Indicates how to allocate instances across Spot Instance pools.</p>\n <ul>\n <li><b>capacity-optimized (recommended)</b>: Instances launched using Spot pools that are optimally chosen based on the available Spot capacity.</li>\n <li><b>capacity-optimized-prioritized</b>: Instances launched using the priority on a best-effort basis to determine which launch template override to use first, but AWS optimizes for capacity first.</li>\n <li><b>lowest-price (default)</b>: Instances launched using Spot pools with the lowest price, and evenly allocated across the number of Spot pools specified</li>\n </ul>","aws.serverGroup.spotInstancePoolCount":"Number of lowest priced Spot Instance pools to diversify across. Only applicable for strategy 'lowest-price'. <b>Default: 2.</b>","aws.serverGroup.odAllocationStrategy":"The only strategy / <b>default is 'prioritized'</b>. The order specified in the list of selected instance types is used to determine which instance type to use first when fulfilling On-Demand capacity.","aws.serverGroup.odBase":"Minimum amount of the Auto Scaling Group's capacity that must be fulfilled by On-Demand Instances. This base portion is provisioned first as the group scales. <b>Default: 0.</b>","aws.serverGroup.odPercentAboveBase":"Percentages of On-Demand and Spot instances for additional capacity beyond OnDemandBaseCapacity.<b>Default: 100.</b>","aws.serverGroup.instanceTypeWeight":'The number of capacity units gives the instance type a proportional weight to other instance types. When specified, weights count towards desired capacity.\nLearn more in <a target="_blank" href="https://spinnaker.io/docs/setup/other_config/server-group-launch-settings/aws-ec2/launch-templates/#convert-a-server-group-with-launch-template-to-use-mixed-instances-policy-with-multiple-instance-types-and-capacity-weighting">examples and docs</a>.',"aws.serverGroup.instanceTypes":"Specify up to 20 instance types.","aws.serverGroup.instanceTypesSelect":"<p>Filter instance types on one or more criteria, comma separated:\n <ul>\n <li>Minimum vCPU e.g. 16vcpu</li>\n <li>Minimum memory e.g. 32gib</li>\n <li>Spot support</li>\n <li>EBS support</li>\n <li>GPU support</li>\n <li>Instance storage type e.g. ssd</li>\n <li>Generation with 'currentGen' / 'oldGen'</li>\n <li>Instance family / size / type e.g. c3 / large / c3.large</li>\n </ul>\n Examples:\n <ul>\n <li>16vcpu, 32gib, spot, oldGen</li>\n <li>medium, ebs</li>\n <li>ssd,ebs,gpu,currentgen</li>\n </ul>","aws.serverGroup.multipleInstanceTypes":"Instance types a server group can launch, first (highest priority) to last (lowest priority).","aws.serverGroup.unlimitedCpuCredits":"<p>CPU credits can be configured with 2 modes:</p><br/>\n <ul>\n <li><b>Unlimited (i.e. Unlimited On)</b>: Can sustain high CPU utilization for any period of time whenever required.<br/>\n If the average CPU usage over a rolling 24-hour period exceeds the baseline, charges for surplus credits will apply.</li>\n <li><b>Standard (i.e. Unlimited Off)</b>: <b>Default mode in Spinnaker.</b> Suited to workloads with an average CPU utilization that is consistently below the baseline CPU utilization of the instance.<br/>\n To burst above the baseline, the instance spends credits that it has accrued in its CPU credit balance.</li>\n </ul>","aws.serverGroup.capacityRebalance":"Enabling <b>Capacity Rebalance</b> allows EC2 Auto Scaling to proactively replace Spot Instances that have received a rebalance recommendation, <b>before</b> it is interrupted by AWS EC2.","aws.serverGroup.advancedMode":'Advanced mode allows you to configure allocation strategies, multiple instance types with weighting, instance distribution across Spot / On-Demand and their proportions in the server group. Learn more in <a target="_blank" href="https://docs.aws.amazon.com/autoscaling/ec2/userguide/asg-purchase-options.html">AWS docs</a>.',"aws.serverGroup.legacyUdf":"<p>(Optional) <b>User Data Format</b> allows overriding of the format used when generating user data during deployment. The default format used is configured\n in the application's attributes, editable via the 'Config' tab.</p>\n <p><b>Default</b> will use the value from the application's configuration.</p>\n <p><b>Modern</b> will use the modern template.</p>\n <p><b>Legacy</b> will use the legacy (<b>deprecated</b>) template.</p>\n <p>This option is intended to allow testing migration from legacy to modern before configuring it for the entire application. If unsure, pick <b>Default</b>.</p>","aws.serverGroup.base64UserData":"(Optional) <b>UserData</b> is a base64 encoded string.","aws.serverGroup.enabledMetrics":"(Optional) <b>Enabled Metrics</b> are the Auto Scaling Group metrics to enable on this group. Existing metrics are not modified.","aws.serverGroup.imdsv2":"(Recommended) <b>IMDSv2</b> helps mitigate AWS credential theft from the exploitation of SSRF vulnerabilities in web applications. All modern AWS SDKs support IMDSv2 and it should not be disabled unless you're using a legacy SDK.","aws.serverGroup.instanceMonitoring":"(Optional) <b>Instance Monitoring</b> whether to enable detailed monitoring of instances. Group metrics must be disabled to update an ASG with Instance Monitoring set to false.","aws.serverGroup.tags":"(Optional) <b>Tags</b> are propagated to the instances in this cluster.","aws.serverGroup.allImages":"Search for an image that does not match the name of your application.","aws.serverGroup.filterImages":"Select from a pre-filtered list of images matching the name of your application.","aws.serverGroup.traffic":'<p>Enables the "AddToLoadBalancer" scaling process, which is used by Spinnaker and discovery services to determine if the server group is enabled.</p>\n <p>Will be automatically enabled when any non "custom" deployment strategy is selected.</p>',"aws.securityGroup.vpc":'\n <p>The VPC to which this {{firewall}} will apply.</p>\n <p>If you wish to use VPC but are unsure which VPC to use, the most common one is "Main".</p>\n <p>If you do not wish to use VPC, select "None".</p>',"aws.securityGroup.name":"<p>The {{firewall}} name is formed by combining the application name, the <b>Stack</b> field, and the <b>Detail</b> field.</p>","aws.securityGroup.cross.account.ingress.help":"<p>Accounts that are excluded will not show up in this list</p>","aws.scalingPolicy.search.restricted":'<p>Resets dimensions to "AutoScalingGroupName: {name of the ASG}" and provides\n a simpler, combined input for the namespace and metric name fields.</p>',"aws.scalingPolicy.search.all":"\n <p>Allows you to edit the dimensions and namespace to find a specific metric for this alarm.</p>","aws.blockDeviceMappings.useSource":'\n <p>Spinnaker will use the block device mappings of the existing server group when deploying a new server group.</p>\n <p>In the event that there is no existing server group, the\n <a target="_blank" href="https://github.com/spinnaker/clouddriver/blob/master/clouddriver-aws/src/main/groovy/com/netflix/spinnaker/clouddriver/aws/deploy/InstanceTypeUtils.java">defaults</a>\n for the selected instance type will be used.</p>',"aws.blockDeviceMappings.useAMI":"<p>Spinnaker will use the block device mappings from the selected AMI when deploying a new server group.</p>","aws.blockDeviceMappings.useDefaults":'<p>Spinnaker will use the <a target="_blank" href="https://github.com/spinnaker/clouddriver/blob/master/clouddriver-aws/src/main/groovy/com/netflix/spinnaker/clouddriver/aws/deploy/InstanceTypeUtils.java">default block device mappings</a> for the selected instance type when deploying a new server group.</p>',"aws.targetGroup.protocol":"The protocol to use for routing traffic to the targets. Cannot be edited after being saved; if you want to use a different protocol, create a new target group, save the load balancer, move your targets, and then delete this target group.","aws.targetGroup.targetType":"Determines how targets are specified. Only set to ip if you need to attach individual ips. Cannot be edited after being saved; if you want to use a different target type, create a new target group, save the load balancer, move your targets, and then delete this target group.","aws.targetGroup.port":"The port on which the targets receive traffic. Cannot be edited after being saved; if you want to use a different port, create a new target group, save the load balancer, move your targets, and then delete this target group.","aws.targetGroup.attributes.deregistrationDelay":"The amount of time for the load balancer to wait before changing the state of a deregistering target from draining to unused. The range is 0-3600 seconds. The default value is 300 seconds.","aws.targetGroup.attributes.stickinessEnabled":" Indicates whether sticky sessions are enabled.","aws.targetGroup.attributes.deregistrationDelayConnectionTermination":"If enabled, your Network Load Balancer will terminate active connections when deregistration delay is reached.","aws.targetGroup.attributes.preserveClientIp":"If enabled, your Network Load Balancer will preserve client IP addresses to the target.","aws.targetGroup.attributes.stickinessType":"The type of sticky sessions. The only current possible value is <code>lb_cookie</code>.","aws.targetGroup.attributes.stickinessDuration":"The time period, in seconds, during which requests from a client should be routed to the same target. After this time period expires, the load balancer-generated cookie is considered stale. The range is 1 second to 1 week (604800 seconds). The default value is 1 day (86400 seconds).","aws.targetGroup.attributes.healthCheckPort.trafficPort":"The port the load balancer uses when performing health checks on targets. The default is <b>traffic-port</b>, which is the port on which each target receives traffic from the load balancer.","aws.targetGroup.healthCheckProtocol":"TCP health checks only support 10s and 30s intervals","aws.targetGroup.healthCheckTimeout":"Target groups with TCP or TLS protocol must have a 6s timeout for HTTP health checks or a 10s timeout for HTTPS/TLS health checks.","aws.targetGroup.nlbHealthcheckThreshold":"The healthy and unhealthy threshold for NLBs must be equal. This represents the number of successful and failed healthchecks required for healthy and unhealthy targets, respectively.","aws.serverGroup.capacityConstraint":"\n <p>Ensures that the capacity of this server group has not changed in the background (i.e. due to autoscaling activity).</p>\n <p>If the capacity has changed, this resize operation will be rejected.</p>","aws.tagImage.consideredStages":"Limit which previous stages will be considered when locating AMI's to tag. If left unchecked, AMI's generated by any upstream stage will be tagged.","aws.loadBalancer.redirect.host":"The hostname. This component is not percent-encoded. The hostname can contain <code>#{host}</code>.","aws.loadBalancer.redirect.path":'The absolute path, starting with the leading "/". This component is not percent-encoded. The path can contain <code>#{host}</code>, <code>#{path}</code>, and <code>#{port}</code>.',"aws.loadBalancer.redirect.port":"The port. You can specify a value from 1 to 65535 or <code>#{port}</code>.","aws.loadBalancer.redirect.protocol":"The protocol. You can specify HTTP, HTTPS, or <code>#{protocol}</code>. You can redirect HTTP to HTTP, HTTP to HTTPS, and HTTPS to HTTPS. You cannot redirect HTTPS to HTTP.","aws.loadBalancer.redirect.query":'The query parameters, URL-encoded when necessary, but not percent-encoded. Do not include the leading "?", as it is automatically added. You can specify any of the reserved keywords.',"aws.loadBalancer.redirect.statusCode":"The HTTP redirect code. The redirect is either permanent (HTTP 301) or temporary (HTTP 302).","aws.loadBalancer.redirect":'<p>A URI consists of the following components: protocol://hostname:port/path?query. You must modify at least one of the following components to avoid a redirect loop: protocol, hostname, port, or path. Any components that you do not modify retain their original values.\n\n <p>You can reuse URI components using the following reserved keywords:\n\n <ul><li>#{protocol}\n <li>#{host}\n <li>#{port}\n <li>#{path} (the leading "/" is removed)\n <li>#{query}\n </ul>\n <p>For example, you can change the path to "/new/#{path}", the hostname to "example.#{host}", or the query to "#{query}&value=xyz".',"aws.cloudformation.source":"\n <p>Where the template file content is read from.</p>\n <p>\n <b>text:</b> The template is supplied statically to the pipeline from the below text-box.\n </p>\n <p>\n <b>artifact:</b> The template is read from an artifact supplied/created upstream. The expected artifact must be referenced here, and will be bound at runtime.\n </p>\n ","aws.cloudformation.expectedArtifact":"The artifact that is to be applied to this stage. The artifact should represent a valid cloudformation template.","aws.function.name":"Enter a name that describes the purpose of your function. Function name will be prefixed with the application name.","aws.function.runtime":"Choose the language to use to write your function","aws.function.s3key":"The Amazon S3 key of the deployment package","aws.function.handler":"The name of the method within your code that Lambda calls to execute your function. The format includes the file name. It can also include namespaces and other qualifiers, depending on the runtime.","aws.function.s3bucket":"An Amazon S3 bucket in the same AWS Region as your function. The bucket can be in a different AWS account.","aws.function.execution.role":"Lambda will create an execution role with permission to upload logs to Amazon CloudWatch Logs. You can also choose an existing role that defines the permissions of your function.","aws.function.env.vars":"You can define environment variables as key-value pairs that are accessible from your function code. These are useful to store configuration settings without the need to change function code","aws.function.tags":"You can use tags to group and filter your functions. A tag consists of a case-sensitive key-value pair","aws.functionBasicSettings.memorySize":"Your function is allocated CPU proportional to the memory configured.","aws.functionBasicSettings.timeout":"The amount of time that Lambda allows a function to run before stopping it. The default is 3 seconds. The maximum allowed value is 900 seconds.","aws.function.publish":"Set to true to publish the first version of the function during creation.","aws.function.deadletterqueue":"A dead letter queue configuration that specifies the queue or topic where Lambda sends asynchronous events when they fail processing. (SNS or SQS)","aws.function.tracingConfig.mode":"The function's AWS X-Ray tracing configuration.","aws.function.kmsKeyArn":"The ARN of the AWS Key Management Service (AWS KMS) key that's used to encrypt your function's environment variables. If it's not provided, AWS Lambda uses a default service key.","aws.cloudformation.changeSet.options":"<p>Action to take when the created ChangeSet contains a replacement.</p>\n <p>\n <b>ask:</b> Execution will be put on hold asking for user feedback.\n </p>\n <p>\n <b>skip it:</b> ChangeSet will not be executed and stage will continue.\n </p>\n <p>\n <b>execute it</b> ChangeSet will be executed.\n </p>\n <p>\n <b>fail stage</b> ChangeSet will not be executed and the stage will fail.\n </p>"};Object.keys(nr).forEach(e=>x.register(e,nr[e]));class rr{findImages(e){return!e.q||e.q.length<3?Promise.resolve([{message:"Please enter at least 3 characters...",disabled:!0}]):T("/images/find").query(e).get().catch(()=>[])}getImage(e,t,a){return T("/images").path(a,t,e).query({provider:"aws"}).get().then(e=>e&&e.length?e[0]:null).catch(()=>null)}}const lr=({account:e,availabilityZone:t,instanceType:a,capacityType:n,launchTime:r,provider:l,region:i,serverGroup:s,showInstanceType:o})=>Mt.createElement(Mt.Fragment,null,Mt.createElement(D,{label:"Launched",value:r?B(r):"Unknown"}),Mt.createElement(D,{label:"In",value:Mt.createElement("div",null,Mt.createElement(A,{account:e}),t||"Unknown")}),o&&Mt.createElement(D,{label:"Type",value:a||"Unknown"}),o&&n&&Mt.createElement(D,{label:"Capacity Type",value:n||"Unknown"}),s&&Mt.createElement(D,{label:"Server Group",value:Mt.createElement("div",null,Mt.createElement(ja,{to:"^.serverGroup",params:{region:i,accountId:e,serverGroup:s,provider:l}},Mt.createElement("a",null,s)))})),ir=({instance:e})=>{const{imageId:t,serverGroup:a,subnetId:n,vpcId:r}=e;return Mt.createElement(G,{heading:"Instance Information",defaultExpanded:!0},Mt.createElement("dl",{className:"dl-horizontal dl-narrow"},Mt.createElement(lr,{account:e.account,availabilityZone:e.availabilityZone,instanceType:e.instanceType,capacityType:e.capacityType,launchTime:e.launchTime,provider:e.provider,region:e.region,serverGroup:e.serverGroup,showInstanceType:!0}),a&&Mt.createElement(D,{label:"VPC",value:Mt.createElement(Fn,{vpcId:r})}),n&&Mt.createElement(D,{label:"Subnet",value:Mt.createElement(F,{subnetId:n})}),t&&Mt.createElement(D,{label:"Image ID",value:t})))},sr=({instancePort:e,ipv6Addresses:t,permanentIps:a,privateDnsName:n,privateIpAddress:r,publicDnsName:l,publicIpAddress:i})=>{const s=e?`:${e}`:"";return zt.createElement(z,{className:"horizontal-when-filters-collapsed"},n&&zt.createElement(D,{label:"Private DNS Name",value:zt.createElement(M,{text:n,url:`http://${n}${s}`})}),l&&zt.createElement(D,{label:"Public DNS Name",value:zt.createElement(M,{text:l,url:`http://${l}${s}`})}),r&&zt.createElement(D,{label:"Private IP Address",value:zt.createElement(M,{text:r,url:`http://${r}${s}`})}),Boolean(null==a?void 0:a.length)&&zt.createElement(D,{label:"Permanent IP Address",value:a.map(e=>zt.createElement(M,{key:e,text:e,url:`http://${e}${s}`}))}),i&&zt.createElement(D,{label:"Public IP Address",value:zt.createElement(M,{text:i,url:`http://${i}${s}`})}),Boolean(null==t?void 0:t.length)&&zt.createElement(D,{label:"IPv6 Address"+(t.length>1?"es":""),value:t.map(e=>zt.createElement(M,{key:e.ip,text:e.ip,url:e.url}))}))},or=({instance:e})=>{const{account:t,region:a,provider:n,securityGroups:r,vpcId:l}=e,i=qt(r,["groupName"],["asc"]),s=R.get("Firewalls");return Mt.createElement(G,{heading:s,defaultExpanded:!0},Mt.createElement("ul",null,(i||[]).map(e=>Mt.createElement("li",{key:e.groupId},Mt.createElement(ja,{to:"^.firewallDetails",params:{name:e.groupName,accountId:t,region:a,vpcId:l,provider:n}},Mt.createElement("a",null,e.groupName," (",e.groupId,")"))))))},cr=({healthMetrics:e,healthState:t,metricTypes:a,customHealthUrl:n,privateIpAddress:r})=>{const l=a.includes("LoadBalancer"),i=a.includes("TargetGroup");return Mt.createElement(G,{heading:"Status",defaultExpanded:!0},!e.length&&Mt.createElement("p",null,"Starting"===t?"Starting":"No health metrics found for this instance"),Mt.createElement("dl",{className:"horizontal-when-filters-collapsed"},e.sort((e,t)=>e.type<t.type?-1:e.type>t.type?1:0).map(e=>Mt.createElement(Mt.Fragment,{key:`${e.type}-${e.description}`},Mt.createElement("dt",null,L(e.type)),Mt.createElement("dd",null,!a.includes(e.type)&&Mt.createElement("div",null,Mt.createElement(O,{value:"down"===e.state.toLowerCase()?e.description:"",placement:"left"},Mt.createElement("span",null,Mt.createElement("span",{className:`glyphicon glyphicon-${e.state}-triangle`}),Mt.createElement("span",null,L(e.state)))),Mt.createElement("span",{className:"pad-left small"},e.healthCheckUrl&&Mt.createElement("a",{target:"_blank",href:e.healthCheckUrl},"Health Check"),e.healthCheckUrl&&e.statusPageUrl&&Mt.createElement("span",null," | "),e.statusPageUrl&&Mt.createElement("a",{target:"_blank",href:e.statusPageUrl},"Status"),n&&e.type===n.type&&Mt.createElement("span",null," ","|"," ",Mt.createElement("a",{target:"_blank",href:n.href},n.text)))),l&&"LoadBalancer"===e.type&&(e.loadBalancers||[]).map(e=>Mt.createElement(U,{key:`lb-${e.name}`,loadBalancer:e})),i&&"TargetGroup"===e.type&&(e.targetGroups||[]).map(e=>Mt.createElement(U,{key:`tg-${e.name}`,loadBalancer:e,ipAddress:r})))))))},dr=({tags:e})=>{const t=e||[],a=qt(t,["key"],["asc"]);return Mt.createElement(G,{heading:"Tags",defaultExpanded:!0},!t.length&&Mt.createElement("div",null,"No tags associated with this server"),Boolean(t.length)&&a.map(e=>Mt.createElement(D,{key:e.key,label:e.key,value:e.value})))};class mr extends V{static deregisterInstancesFromTargetGroup(e,t,a,n){const r=super.buildMultiInstanceJob(e,n,"deregisterInstancesFromLoadBalancer");r.forEach(e=>e.targetGroupNames=a);const l=super.buildMultiInstanceDescriptor(r,"Deregister",`from ${a.join(" and ")}`);return H.executeTask({job:r,application:t,description:l})}static deregisterInstanceFromTargetGroup(e,t,a={}){return a.type="deregisterInstancesFromLoadBalancer",a.instanceIds=[e.id],a.targetGroupNames=e.targetGroups,a.region=e.region,a.credentials=e.account,a.cloudProvider=e.cloudProvider,H.executeTask({job:[a],application:t,description:`Deregister instance: ${e.id}`})}static registerInstancesWithTargetGroup(e,t,a,n){const r=super.buildMultiInstanceJob(e,n,"registerInstancesWithLoadBalancer");r.forEach(e=>e.targetGroupNames=a);const l=super.buildMultiInstanceDescriptor(r,"Register",`with ${a.join(" and ")}`);return H.executeTask({job:r,application:t,description:l})}static registerInstanceWithTargetGroup(e,t,a={}){return a.type="registerInstancesWithLoadBalancer",a.instanceIds=[e.id],a.targetGroupNames=e.targetGroups,a.region=e.region,a.credentials=e.account,a.cloudProvider=e.cloudProvider,H.executeTask({job:[a],application:t,description:`Register instance: ${e.id}`})}}const ur=e=>{const t=e.map(e=>e.targetGroups);return Wt(t)},pr=(e,t,a)=>{e.forEach(e=>{"TargetGroup"===e.type&&e.targetGroups.forEach(e=>{var n,r,l;const i=null!=(n=t.find(t=>t.name===e.name&&t.account===a))?n:{},s="traffic-port"===i.healthCheckPort||jt(i.healthCheckPort)?i.port:i.healthCheckPort;e.healthCheckProtocol=null==(r=i.healthCheckProtocol)?void 0:r.toLowerCase(),e.healthCheckPath=`:${s}${null!=(l=i.healthCheckPath)?l:""}`})})};function hr(e,t,a,n){var r;e.isStandalone&&(t.health=a.health);const l=(t.health||[]).filter(e=>"Amazon"!==e.type||"Unknown"!==e.state);if(!e.isStandalone){const t=ur(((null==(r=e.loadBalancers)?void 0:r.data)||[]).filter(e=>"aws"===e.cloudProvider));pr(l,t,n)}return(a.health||[]).forEach(e=>{const t=l.find(t=>t.type===e.type);t&&Object.assign(t,{...e,...t})}),l}async function gr({app:t,instance:a}){var n,r;const l=function(e,t){return e.serverGroups?function(e,t){var a,n;const r=(null==(a=e.serverGroups)?void 0:a.data)||[];for(const e of r){const a=null==(n=e.instances)?void 0:n.find(e=>e.id===t);if(a)return{account:e.account,extraData:{serverGroup:e.name,vpcId:e.vpcId},loadBalancers:e.loadBalancers,region:e.region,serverGroupDisabled:e.isDisabled,summary:a,targetGroups:e.targetGroups,vpcId:e.vpcId}}}(e,t.instanceId)||function(e,t){var a,n,r;const l=(null==(a=e.loadBalancers)?void 0:a.data)||[];for(const e of l){const a=null==(n=e.instances)?void 0:n.find(e=>e.id===t);if(a)return{account:e.account,loadBalancers:[e.name],region:e.region,summary:a,vpcId:e.vpcId};const l=null==(r=e.targetGroups)?void 0:r.find(e=>{var a;return null==(a=e.instances)?void 0:a.some(e=>e.id===t)});if(l){const a=l.instances.find(e=>e.id===t);return{account:e.account,region:e.region,summary:a,targetGroups:[l.name],vpcId:e.vpcId}}}}(e,t.instanceId)||function(e,t){var a,n,r;const l=(null==(a=e.loadBalancers)?void 0:a.data)||[];for(const e of l){const a=(e.serverGroups||[]).filter(e=>e.isDisabled);for(const r of a){const a=null==(n=r.instances)?void 0:n.find(e=>e.id===t);if(a)return{account:e.account,loadBalancers:[e.name],region:e.region,summary:a,vpcId:e.vpcId}}const l=null==(r=e.targetGroups)?void 0:r.find(e=>(e.serverGroups||[]).some(e=>{var a;return e.isDisabled&&(null==(a=e.instances)?void 0:a.some(e=>e.id===t))}));if(l){const a=l.serverGroups.find(e=>{var a;return null==(a=e.instances)?void 0:a.some(e=>e.id===t)}).instances.find(e=>e.id===t);return{account:e.account,loadBalancers:[e.name],region:e.region,summary:a,vpcId:e.vpcId}}}}(e,t.instanceId):{account:t.account,loadBalancers:[],region:t.region,summary:{id:t.instanceId}}}(t,a);if(!(null==l?void 0:l.summary)||!l.account||!l.region)return{instanceIdNotFound:a.instanceId};q.addExtraDataToLatest("instances",{...l.extraData,account:l.account,region:l.region});const i=await K.getInstanceDetails(l.account,l.region,a.instanceId),s={...l.summary,...i,account:l.account,baseIpAddress:i.publicDnsName||i.privateIpAddress,healthMetrics:hr(t,l.summary,i,l.account),instanceId:i.instanceId||l.summary.instanceId||l.summary.id||a.instanceId,loadBalancers:l.loadBalancers,region:l.region,serverGroupDisabled:l.serverGroupDisabled,targetGroups:l.targetGroups,vpcId:l.vpcId};if((null==(n=l.extraData)?void 0:n.serverGroup)&&(s.serverGroup=l.extraData.serverGroup),s.networkInterfaces){const a=(null==(r=t.attributes)?void 0:r.instancePort)||e.defaultInstancePort||80;s.ipv6Addresses=Zt(s.networkInterfaces,e=>(e.ipv6Addresses||[]).map(e=>({ip:e.ipv6Address,url:`http://${e.ipv6Address}:${a}`}))),s.permanentIps=s.networkInterfaces.filter(e=>{var t;return!1===(null==(t=e.attachment)?void 0:t.deleteOnTermination)}).map(e=>e.privateIpAddress)}return s}function vr(e,t,a){return(e.health||[]).some(e=>e.type===t&&e.state===a)}function fr({app:e,instance:t,stateService:a}){if(!hn.adHocInfraWritesEnabled)return null;const n=()=>{a.includes("**.instanceDetails",{instanceId:t.instanceId})&&a.go("^")},r=(a,r,l,i,s=!1,o={})=>{w.confirm({header:a,buttonText:r,account:t.account,taskMonitorConfig:{application:e,title:l,onTaskComplete:s?n:void 0},submitMethod:i,...o})},l=(t.loadBalancers||[]).join(" and "),i=(t.targetGroups||[]).join(" and "),s=[{label:"Reboot",triggerAction:()=>{var a;return r(`Really reboot ${t.instanceId}?`,`Reboot ${t.instanceId}`,`Rebooting ${t.instanceId}`,(a={})=>{var n,r;return(null==(n=e.attributes)?void 0:n.platformHealthOnlyShowOverride)&&(null==(r=e.attributes)?void 0:r.platformHealthOnly)&&(a.interestingHealthProviderNames=["Amazon"]),mr.rebootInstance(t,e,a)},!1,{platformHealthOnlyShowOverride:null==(a=e.attributes)?void 0:a.platformHealthOnlyShowOverride,platformHealthType:"Amazon"})}},{label:"Terminate",triggerAction:()=>r(`Really terminate ${t.instanceId}?`,`Terminate ${t.instanceId}`,`Terminating ${t.instanceId}`,()=>mr.terminateInstance(t,e),!0)}];return t.serverGroup&&s.push({label:"Terminate and Shrink Server Group",triggerAction:()=>r(`Really terminate ${t.instanceId} and shrink ${t.serverGroup}?`,`Terminate ${t.instanceId} and shrink ${t.serverGroup}`,`Terminating ${t.instanceId} and shrinking server group`,()=>mr.terminateInstanceAndShrinkServerGroup(t,e),!0)}),vr(t,"Discovery","OutOfService")&&!t.serverGroupDisabled&&s.unshift({label:"Enable In Discovery",triggerAction:()=>r(`Really enable ${t.instanceId} in discovery?`,`Enable ${t.instanceId}`,`Enabling ${t.instanceId} in discovery`,()=>mr.enableInstanceInDiscovery(t,e))}),(vr(t,"Discovery","Up")||vr(t,"Discovery","Down"))&&s.unshift({label:"Disable in Discovery",triggerAction:()=>r(`Really disable ${t.instanceId} in discovery?`,`Disable ${t.instanceId}`,`Disabling ${t.instanceId} in discovery`,()=>mr.disableInstanceInDiscovery(t,e))}),function(e){var t;return!!(null==(t=e.loadBalancers)?void 0:t.length)&&(vr(e,"LoadBalancer","OutOfService")||!(e.health||[]).some(e=>"LoadBalancer"===e.type))}(t)&&s.unshift({label:"Register with Load Balancer",triggerAction:()=>r(`Really register ${t.instanceId} with ${l}?`,`Register ${t.instanceId}`,`Registering ${t.instanceId} with ${l}`,()=>mr.registerInstanceWithLoadBalancer(t,e))}),(t.health||[]).some(e=>"LoadBalancer"===e.type)&&s.unshift({label:"Deregister from Load Balancer",triggerAction:()=>r(`Really deregister ${t.instanceId} from ${l}?`,`Deregister ${t.instanceId}`,`Deregistering ${t.instanceId} from ${l}`,()=>mr.deregisterInstanceFromLoadBalancer(t,e))}),function(e){var t;return!!(null==(t=e.targetGroups)?void 0:t.length)&&(vr(e,"TargetGroup","OutOfService")||!(e.health||[]).some(e=>"TargetGroup"===e.type))}(t)&&s.unshift({label:"Register with Target Group",triggerAction:()=>r(`Really register ${t.instanceId} with ${i}?`,`Register ${t.instanceId}`,`Registering ${t.instanceId} with ${i}`,()=>mr.registerInstanceWithTargetGroup(t,e))}),function(e){return(e.health||[]).some(e=>"TargetGroup"===e.type&&"OutOfService"!==e.state)}(t)&&s.unshift({label:"Deregister from Target Group",triggerAction:()=>r(`Really deregister ${t.instanceId} from ${i}?`,`Deregister ${t.instanceId}`,`Deregistering ${t.instanceId} from ${i}`,()=>mr.deregisterInstanceFromTargetGroup(t,e))}),Mt.createElement(Y,{actions:s})}class Er extends Mt.Component{constructor(){super(...arguments),this.state={instance:this.props.initialInstance,loading:!this.props.initialInstance},this.activeRequestId=0,this.isUnmounted=!1,this.retrieveInstance=(e=!1)=>{const t=++this.activeRequestId;this.setState(e?{instance:void 0,loading:!0}:{loading:!0}),gr({app:this.props.app,instance:this.getInstanceParams()}).then(e=>{this.isUnmounted||t!==this.activeRequestId||this.setState({instance:e,loading:!1})},()=>{this.isUnmounted||t!==this.activeRequestId||(this.props.app.isStandalone?(q.removeLastItem("instances"),this.setState({instance:{instanceIdNotFound:this.getInstanceParams().instanceId},loading:!1})):this.closeDetails())})}}componentDidMount(){if(this.props.initialInstance)return;const{app:e}=this.props;(e.isStandalone?Promise.resolve():Promise.all([e.serverGroups.ready(),e.loadBalancers.ready()])).then(()=>{var t;this.isUnmounted||(this.retrieveInstance(),!e.isStandalone&&(null==(t=e.serverGroups)?void 0:t.onRefresh)&&(this.unsubscribeFromRefresh=e.serverGroups.onRefresh(this.retrieveInstance)))}).catch(()=>{this.isUnmounted||this.closeDetails()})}closeDetails(){this.props.stateService.go("^",{allowModalToStayOpen:!0},{location:"replace"})}componentDidUpdate(e){const t=this.getInstanceParams(e),a=this.getInstanceParams();t.account===a.account&&t.instanceId===a.instanceId&&t.region===a.region||this.retrieveInstance(!0)}componentWillUnmount(){this.isUnmounted=!0,this.unsubscribeFromRefresh&&this.unsubscribeFromRefresh()}getInstanceParams(e=this.props){const t=e.instance||e.$stateParams||e.stateParams;return{account:null==t?void 0:t.account,instanceId:null==t?void 0:t.instanceId,provider:null==t?void 0:t.provider,region:null==t?void 0:t.region}}render(){var t;const{app:a,environment:n,moniker:r}=this.props,{instance:l,loading:i}=this.state,s=(null==l?void 0:l.instanceId)||(null==l?void 0:l.instanceIdNotFound)||this.getInstanceParams().instanceId,o=(null==(t=a.attributes)?void 0:t.instancePort)||e.defaultInstancePort||80;return Mt.createElement("div",{className:"details-panel"},Mt.createElement("div",{className:"header"},Mt.createElement(W,{cloudProvider:"aws",healthState:null==l?void 0:l.healthState,instanceId:s,loading:i,standalone:a.isStandalone}),!i&&l&&!l.instanceIdNotFound&&l.placement&&Mt.createElement("div",{className:"actions"},Mt.createElement(fr,{app:a,instance:l,router:this.props.router,stateParams:this.props.stateParams,stateService:this.props.stateService}),Mt.createElement(j,{insights:l.insightActions,instance:l}))),!i&&l&&!l.instanceIdNotFound&&Mt.createElement("div",{className:"content"},Mt.createElement(ir,{instance:l}),Mt.createElement(cr,{healthMetrics:l.healthMetrics||[],healthState:l.healthState,metricTypes:["LoadBalancer","TargetGroup"],privateIpAddress:l.privateIpAddress}),Mt.createElement(G,{heading:"DNS"},Mt.createElement(sr,{instancePort:String(l.instancePort||o),ipv6Addresses:l.ipv6Addresses||[],permanentIps:l.permanentIps||[],privateDnsName:l.privateDnsName||"",privateIpAddress:l.privateIpAddress||"",publicDnsName:l.publicDnsName||"",publicIpAddress:l.publicIpAddress||""})),Mt.createElement(or,{instance:l}),Mt.createElement(dr,{tags:l.tags||[]}),l.baseIpAddress&&Mt.createElement(G,{heading:"Console Output"},Mt.createElement("ul",null,Mt.createElement("li",null,Mt.createElement(Z,{instance:l})))),Mt.createElement(_,{address:l.baseIpAddress,application:a,instance:l,moniker:r,environment:n})),!i&&(null==l?void 0:l.instanceIdNotFound)&&Mt.createElement("div",{className:"content"},Mt.createElement("div",{className:"content-section"},Mt.createElement("div",{className:"content-body text-center"},Mt.createElement("h3",null,"Instance not found.")))))}}const yr=N(fr),br=N(Er);function Cr(e,t){void 0===t&&(t={});var a=t.insertAt;if(e&&"undefined"!=typeof document){var n=document.head||document.getElementsByTagName("head")[0],r=document.createElement("style");r.type="text/css","top"===a&&n.firstChild?n.insertBefore(r,n.firstChild):n.appendChild(r),r.styleSheet?r.styleSheet.cssText=e:r.appendChild(document.createTextNode(e))}}Cr(".target-group-title {\n color: var(--color-mineshaft);\n font-weight: 600;\n font-size: 14px;\n padding-right: 15px;\n text-transform: uppercase;\n padding-left: 10px;\n}\n.cluster-container .target-group-container {\n margin-top: 3px;\n}\n.cluster-container .target-group-container:not(:first-child) {\n padding-top: 5px;\n}\n.target-group-container .target-group-header {\n padding: 4px 0;\n}\n.target-group-container .server-group-title {\n padding-top: 0;\n}\n.target-group-container .server-group-title .clickable-row {\n margin-top: -1px;\n}\n.target-group-container .no-margin-y {\n margin-top: -1px !important;\n margin-bottom: 0 !important;\n}\n.target-group-container > div > .text-right {\n padding-right: 10px;\n font-weight: 600;\n}\n.listener-targets {\n display: inline-block;\n vertical-align: top;\n}\n");class Nr extends Mt.Component{render(){const{targetGroup:e,showInstances:t,showServerGroups:a,loadBalancer:n}=this.props,r=qt(e.serverGroups,["isDisabled","name"],["asc","desc"]).map(e=>Mt.createElement(X,{key:e.name,account:e.account,region:e.region,serverGroup:e,showInstances:t})),l={loadBalancerName:n.name,region:e.region,accountId:e.account,name:e.name,vpcId:e.vpcId,provider:e.cloudProvider};return Mt.createElement("div",{className:"target-group-container container-fluid no-padding"},Mt.createElement(Za,{class:"active"},Mt.createElement(ja,{to:".targetGroupDetails",params:l},Mt.createElement("div",{className:"clickable clickable-row row no-margin-y target-group-header"},Mt.createElement("div",{className:"col-md-8 target-group-title"},e.name),Mt.createElement("div",{className:"col-md-4 text-right"},Mt.createElement(J,{container:e.instanceCounts}))))),a&&r,!a&&t&&Mt.createElement(Q,{serverGroups:e.serverGroups,instances:e.instances}))}}class wr extends Mt.Component{shouldComponentUpdate(e){return e.showInstances!==this.props.showInstances||e.showServerGroups!==this.props.showServerGroups||e.loadBalancer!==this.props.loadBalancer||(()=>!_t((e.serverGroups||[]).map(e=>e.name),(this.props.serverGroups||[]).map(e=>e.name)))()||(()=>!_t((e.loadBalancer.targetGroups||[]).map(e=>e.name),(this.props.loadBalancer.targetGroups||[]).map(e=>e.name)))()}render(){const{loadBalancer:e,showInstances:t,showServerGroups:a}=this.props;if("classic"!==e.loadBalancerType){const n=e.targetGroups.map(n=>Mt.createElement(Nr,{key:n.name,loadBalancer:e,targetGroup:n,showInstances:t,showServerGroups:a}));return Mt.createElement("div",{className:"cluster-container"},n)}return Mt.createElement(ee,{...this.props})}}class Sr{static buildTargetGroup(e,t){if(!e)return null;const a={name:e.name,vpcId:e.vpcId,cloudProvider:e.cloudProvider,account:e.account,region:e.region,loadBalancerNames:e.loadBalancerNames,instanceCounts:{up:0,down:0,succeeded:0,failed:0,outOfService:0,unknown:0,starting:0}};return t.instances.forEach(t=>{const n=t.health.find(e=>"TargetGroup"===e.type);if(n){const t=n.targetGroups.find(t=>t.name===e.name);if(void 0!==t&&void 0!==t.healthState){const e=t.healthState.toLowerCase();void 0!==a.instanceCounts[e]&&a.instanceCounts[e]++}}}),a}static populateTargetGroups(e,t){return Promise.all([i.getAccountDetails(t.account),e.getDataSource("loadBalancers").ready()]).then(a=>{const n=a[0]&&a[0].awsAccount||t.account,r=e.loadBalancers.data.filter(e=>"application"===e.loadBalancerType||"network"===e.loadBalancerType);return t.targetGroups.map(e=>{const a=Wt(r.map(e=>e.targetGroups||[])).find(a=>a.name===e&&a.region===t.region&&a.account===n);return this.buildTargetGroup(a,t)}).filter(e=>e)})}}class kr extends Mt.Component{constructor(){super(...arguments),this.onClick=e=>{this.props.onItemClick(this.props.loadBalancer),e.nativeEvent.preventDefault()}}render(){return Mt.createElement("a",{onClick:this.onClick},Mt.createElement("span",{className:"name"},this.props.loadBalancer.name),Mt.createElement(J,{container:this.props.loadBalancer.instanceCounts}))}}class Tr extends Mt.Component{constructor(){super(...arguments),this.onClick=e=>{this.props.onItemClick(this.props.loadBalancer),e.nativeEvent.preventDefault()}}render(){return Mt.createElement(O,{value:`${this.props.label||"Load Balancer"}: ${this.props.loadBalancer.name}`},Mt.createElement("button",{className:"btn btn-link no-padding",onClick:this.onClick},Mt.createElement("span",{className:"badge badge-counter"},Mt.createElement("span",{className:"icon"},Mt.createElement("i",{className:"fa icon-sitemap"})))))}}class Ir extends Mt.Component{constructor(e){super(e),this.mounted=!1,this.showLoadBalancerDetails=e=>{const{stateService:t}=this.props,a=this.props.serverGroup;te.log({category:"Cluster Pod",action:"Load Load Balancer Details (multiple menu)"});const n=t.current.name.endsWith(".clusters")?".loadBalancerDetails":"^.loadBalancerDetails";t.go(n,{region:a.region,accountId:a.account,name:e.name,provider:a.type})},this.showTargetGroupDetails=e=>{const{stateService:t}=this.props;te.log({category:"Cluster Pod",action:"Load Target Group Details (multiple menu)"});const a=t.current.name.endsWith(".clusters")?".targetGroupDetails":"^.targetGroupDetails";t.go(a,{region:e.region,accountId:e.account,name:e.name,provider:"aws",loadBalancerName:e.loadBalancerNames[0]})},this.handleShowPopover=()=>{te.log({category:"Cluster Pod",action:"Show Load Balancers Menu"})},this.handleClick=e=>{e.preventDefault(),e.stopPropagation()},this.state={loadBalancers:[],targetGroups:[],isLoading:!0}}componentDidMount(){this.mounted=!0,this.loadBalancersRefreshUnsubscribe=this.props.application.getDataSource("loadBalancers").onRefresh(()=>{this.forceUpdate()}),ae.populateLoadBalancers(this.props.application,this.props.serverGroup).then(e=>{this.mounted&&this.setState({loadBalancers:e,isLoading:!1})}),Sr.populateTargetGroups(this.props.application,this.props.serverGroup).then(e=>{this.mounted&&this.setState({targetGroups:e})})}componentWillUnmount(){this.mounted=!1,this.loadBalancersRefreshUnsubscribe()}render(){const{loadBalancers:e,targetGroups:t,isLoading:a}=this.state,n=t&&t.length||0,r=e&&e.length||0,l=n+r;if(!l)return a?Mt.createElement(ne,{size:"nano"}):null;const i="load-balancers-tag "+(l>1?"overflowing":""),s=Mt.createElement("div",{className:"menu-load-balancers"},r>0&&Mt.createElement("div",{className:"menu-load-balancers-header"},"Load Balancers"),Kt(e,"name").map(e=>Mt.createElement(kr,{key:e.name,loadBalancer:e,onItemClick:this.showLoadBalancerDetails})),n>0&&Mt.createElement("div",{className:"menu-load-balancers-header"},"Target Groups"),Kt(t,"name").map(e=>Mt.createElement(kr,{key:e.name,loadBalancer:e,onItemClick:this.showTargetGroupDetails})));return Mt.createElement("span",{className:i},l>1&&Mt.createElement(re,{delayShow:100,delayHide:150,onShow:this.handleShowPopover,placement:"bottom",template:s,hOffsetPercent:"80%",container:this.props.container,className:"no-padding menu-load-balancers"},Mt.createElement("button",{onClick:this.handleClick,className:"btn btn-link btn-multiple-load-balancers clearfix no-padding"},Mt.createElement("span",{className:"badge badge-counter"},Mt.createElement("span",{className:"icon"},Mt.createElement("i",{className:"fa icon-sitemap"}))," ",l))),1===e.length&&0===t.length&&Mt.createElement("span",{className:"btn-load-balancer"},Mt.createElement(Tr,{key:e[0].name,label:"Load Balancer",loadBalancer:e[0],onItemClick:this.showLoadBalancerDetails})),1===t.length&&0===e.length&&Mt.createElement("span",{className:"btn-load-balancer"},Mt.createElement(Tr,{key:t[0].name,label:"Target Group",loadBalancer:t[0],onItemClick:this.showTargetGroupDetails})))}}const Pr=N(Ir);class Ar{updateHealthCounts(e){const t=e.instances;if(e.instanceCounts={up:t.filter(e=>"InService"===e.health[0].state).length,down:t.filter(e=>"Down"===e.healthState).length,outOfService:t.filter(e=>"OutOfService"===e.healthState).length,starting:void 0,succeeded:void 0,failed:void 0,unknown:void 0},e.serverGroups){const t=Wt(e.serverGroups.map(e=>e.instances));e.instanceCounts.up=t.filter(e=>"InService"===e.health[0].state).length,e.instanceCounts.down=t.filter(e=>"Down"===e.healthState).length,e.instanceCounts.outOfService=t.filter(e=>"OutOfService"===e.healthState).length}}transformInstance(e,t,a,n){const r=e.health||{};"healthy"===r.state&&(r.state="InService"),e.provider=t,e.account=a,e.region=n,e.healthState=r.state?"InService"===r.state?"Up":"Down":"OutOfService",e.health=[r]}addVpcNameToContainer(e){return t=>{const a=t.find(t=>t.id===e.vpcId);return e.vpcName=a?a.name:"",e}}normalizeServerGroups(e,t,a,n){e.forEach(e=>{e.account=e.account||t.account,e.region=e.region||t.region,e.cloudProvider=e.cloudProvider||t.cloudProvider,e.detachedInstances?(e.detachedInstances=e.detachedInstances.map(e=>({id:e})),e.instances=e.instances.concat(e.detachedInstances)):e.detachedInstances=[],e.instances.forEach(e=>{this.transformInstance(e,t.type,t.account,t.region),e[a]=[t.name],e.health.type=n}),this.updateHealthCounts(e)})}normalizeTargetGroup(e){this.normalizeServerGroups(e.serverGroups,e,"targetGroups","TargetGroup");const t=Yt(e.serverGroups,{isDisabled:!1});return e.provider=e.type,e.instances=Xt(t).map("instances").flatten().value(),e.detachedInstances=Xt(t).map("detachedInstances").flatten().value(),this.updateHealthCounts(e),Promise.all([Dn.listVpcs(),i.listAllAccounts()]).then(([t,a])=>{const n=this.addVpcNameToContainer(e)(t);return n.serverGroups=n.serverGroups.map(e=>{const t=a.find(t=>t.name===e.account),n=t&&t.cloudProvider||e.cloudProvider;return e.cloudProvider=n,e.instances.forEach(e=>{e.cloudProvider=n,e.provider=n}),{...e,cloudProvider:n}}),n})}normalizeActions(e){if("application"===e.loadBalancerType){e.listeners.forEach(e=>{e.defaultActions.sort((e,t)=>e.order-t.order),e.rules.forEach(e=>e.actions.sort((e,t)=>e.order-t.order))})}}normalizeLoadBalancer(e){this.normalizeServerGroups(e.serverGroups,e,"loadBalancers","LoadBalancer");let t=e.serverGroups;if(e.targetGroups){const a=e;a.targetGroups.forEach(e=>this.normalizeTargetGroup(e)),t=Wt(Jt(a.targetGroups,"serverGroups"))}e.loadBalancerType=e.loadBalancerType||"classic",e.provider=e.type,this.normalizeActions(e);const a=Yt(t,{isDisabled:!1});return e.instances=Xt(a).map("instances").flatten().value(),e.detachedInstances=Xt(a).map("detachedInstances").flatten().value(),this.updateHealthCounts(e),Dn.listVpcs().then(t=>this.addVpcNameToContainer(e)(t))}static convertClassicLoadBalancerForEditing(e){const t={availabilityZones:void 0,isInternal:e.isInternal,region:e.region,cloudProvider:e.cloudProvider,credentials:e.credentials||e.account,listeners:e.listeners,loadBalancerType:"classic",name:e.name,regionZones:e.availabilityZones,securityGroups:e.securityGroups,vpcId:e.vpcId,healthCheck:void 0,healthTimeout:e.healthTimeout,healthInterval:e.healthInterval,healthyThreshold:e.healthyThreshold,unhealthyThreshold:e.unhealthyThreshold,healthCheckProtocol:e.healthCheckProtocol,healthCheckPort:e.healthCheckPort,healthCheckPath:e.healthCheckPath,idleTimeout:e.idleTimeout||60,subnetType:e.subnetType};if(e.elb){const a=e.elb;if(t.securityGroups=a.securityGroups,t.vpcId=a.vpcid||a.vpcId,a.listenerDescriptions&&(t.listeners=a.listenerDescriptions.map(e=>{const t=e.listener;if(t.sslcertificateId){const e=t.sslcertificateId.split("/");t.sslcertificateId=e[1],t.sslCertificateType=e[0].split(":")[2]}return{internalProtocol:t.instanceProtocol,internalPort:t.instancePort,externalProtocol:t.protocol,externalPort:t.loadBalancerPort,sslCertificateId:t.sslcertificateId,sslCertificateName:t.sslcertificateId,sslCertificateType:t.sslCertificateType,policyNames:e.policyNames}})),a.healthCheck&&a.healthCheck.target){t.healthTimeout=a.healthCheck.timeout,t.healthInterval=a.healthCheck.interval,t.healthyThreshold=a.healthCheck.healthyThreshold,t.unhealthyThreshold=a.healthCheck.unhealthyThreshold;const e=a.healthCheck.target,n=e.indexOf(":");let r=e.indexOf("/");if(-1===r&&(r=e.length),-1!==n){t.healthCheckProtocol=e.substring(0,n);const a=Number(e.substring(n+1,r));t.healthCheckPath=e.substring(r),isNaN(a)||(t.healthCheckPort=a)}}}return t}static convertApplicationLoadBalancerForEditing(e){const t=le.parseLoadBalancerName(e.name).application,a={availabilityZones:void 0,isInternal:e.isInternal,region:e.region,loadBalancerType:"application",cloudProvider:e.cloudProvider,credentials:e.account||e.credentials,listeners:[],targetGroups:[],name:e.name,regionZones:e.availabilityZones,securityGroups:[],subnetType:e.subnetType,vpcId:void 0,idleTimeout:e.idleTimeout||60,deletionProtection:e.deletionProtection||!1,ipAddressType:e.ipAddressType||"ipv4",dualstack:"dualstack"===e.ipAddressType};if(e.elb){const n=e.elb;a.securityGroups=n.securityGroups,a.vpcId=n.vpcid||n.vpcId,n.listeners&&(a.listeners=n.listeners.map(e=>{const a=[];return e.certificates&&e.certificates.forEach(e=>{const t=e.certificateArn.split(":"),n=t[5].split("/");a.push({certificateArn:e.certificateArn,type:t[2],name:n[1]})}),(e.defaultActions||[]).forEach(e=>{e.targetGroupName&&(e.targetGroupName=e.targetGroupName.replace(`${t}-`,"")),e.redirectActionConfig=e.redirectConfig}),e.rules=(e.rules||[]).filter(e=>!e.default),e.rules.forEach(e=>{(e.actions||[]).forEach(e=>{e.targetGroupName&&(e.targetGroupName=e.targetGroupName.replace(`${t}-`,"")),e.redirectActionConfig=e.redirectConfig}),(e.conditions||[]).forEach(e=>{"http-request-method"===e.field&&(e.values=e.httpRequestMethodConfig.values)}),e.conditions=e.conditions||[]}),e.rules.sort((e,t)=>e.priority-t.priority),{protocol:e.protocol,port:e.port,defaultActions:e.defaultActions,certificates:a,rules:e.rules||[],sslPolicy:e.sslPolicy}})),n.targetGroups&&(a.targetGroups=n.targetGroups.map(e=>({name:e.targetGroupName.replace(`${t}-`,""),protocol:e.protocol,port:e.port,targetType:e.targetType,healthCheckProtocol:e.healthCheckProtocol,healthCheckPort:e.healthCheckPort,healthCheckPath:e.healthCheckPath,healthCheckTimeout:e.healthCheckTimeoutSeconds,healthCheckInterval:e.healthCheckIntervalSeconds,healthyThreshold:e.healthyThresholdCount,unhealthyThreshold:e.unhealthyThresholdCount,attributes:{deregistrationDelay:Number(e.attributes["deregistration_delay.timeout_seconds"]),stickinessEnabled:"true"===e.attributes["stickiness.enabled"],stickinessType:e.attributes["stickiness.type"],stickinessDuration:Number(e.attributes["stickiness.lb_cookie.duration_seconds"]),multiValueHeadersEnabled:"true"===e.attributes["lambda.multi_value_headers.enabled"]}})))}return a}static convertNetworkLoadBalancerForEditing(e){const t=le.parseLoadBalancerName(e.name).application,a={availabilityZones:void 0,isInternal:e.isInternal,region:e.region,loadBalancerType:"network",cloudProvider:e.cloudProvider,credentials:e.account||e.credentials,listeners:[],targetGroups:[],name:e.name,regionZones:e.availabilityZones,securityGroups:[],subnetType:e.subnetType,vpcId:void 0,deletionProtection:e.deletionProtection,loadBalancingCrossZone:e.loadBalancingCrossZone,ipAddressType:e.ipAddressType||"ipv4",dualstack:"dualstack"===e.ipAddressType};if(e.elb){const n=e.elb;a.securityGroups=n.securityGroups,a.vpcId=n.vpcid||n.vpcId,n.listeners&&(a.listeners=n.listeners.map(e=>{const a=[];return e.certificates&&e.certificates.forEach(e=>{const t=e.certificateArn.split(":"),n=t[5].split("/");a.push({certificateArn:e.certificateArn,type:t[2],name:n[1]})}),(e.defaultActions||[]).forEach(e=>{e.targetGroupName&&(e.targetGroupName=e.targetGroupName.replace(`${t}-`,""))}),e.rules=(e.rules||[]).filter(e=>!e.default),e.rules.forEach(e=>{(e.actions||[]).forEach(e=>{e.targetGroupName&&(e.targetGroupName=e.targetGroupName.replace(`${t}-`,""))}),e.conditions=e.conditions||[]}),e.rules.sort((e,t)=>e.priority-t.priority),{protocol:e.protocol,port:e.port,defaultActions:e.defaultActions,certificates:a,rules:e.rules||[],sslPolicy:e.sslPolicy}})),n.targetGroups&&(a.targetGroups=n.targetGroups.map(e=>({name:e.targetGroupName.replace(`${t}-`,""),protocol:e.protocol,port:e.port,targetType:e.targetType,healthCheckProtocol:e.healthCheckProtocol,healthCheckPort:e.healthCheckPort,healthCheckTimeout:e.healthCheckTimeoutSeconds,healthCheckInterval:e.healthCheckIntervalSeconds,healthyThreshold:e.healthyThresholdCount,unhealthyThreshold:e.unhealthyThresholdCount,healthCheckPath:e.healthCheckPath,attributes:{deregistrationDelay:Number(e.attributes["deregistration_delay.timeout_seconds"]),deregistrationDelayConnectionTermination:Boolean("true"===e.attributes["deregistration_delay.connection_termination.enabled"]),preserveClientIp:Boolean("true"===e.attributes["preserve_client_ip.enabled"])}})))}return a}static constructNewClassicLoadBalancerTemplate(e){return{availabilityZones:void 0,name:"",stack:"",detail:"",loadBalancerType:"classic",isInternal:!1,cloudProvider:"aws",credentials:e.defaultCredentials.aws||hn.defaults.account,region:e.defaultRegions.aws||hn.defaults.region,vpcId:null,subnetType:hn.defaults.subnetType,healthCheck:void 0,healthCheckProtocol:"HTTP",healthCheckPort:7001,healthCheckPath:"/healthcheck",healthTimeout:5,healthInterval:10,healthyThreshold:10,unhealthyThreshold:2,idleTimeout:60,regionZones:[],securityGroups:[],listeners:[{externalPort:80,externalProtocol:"HTTP",internalPort:7001,internalProtocol:"HTTP"}]}}static constructNewApplicationLoadBalancerTemplate(t){const a="targetgroup";return{name:"",availabilityZones:void 0,stack:"",detail:"",loadBalancerType:"application",ipAddressType:"ipv4",dualstack:!1,isInternal:!1,cloudProvider:"aws",credentials:t.defaultCredentials.aws||hn.defaults.account,region:t.defaultRegions.aws||hn.defaults.region,vpcId:null,subnetType:hn.defaults.subnetType,idleTimeout:60,deletionProtection:!1,targetGroups:[{name:a,protocol:"HTTP",port:t.attributes.instancePort||e.defaultInstancePort,targetType:"instance",healthCheckProtocol:"HTTP",healthCheckPort:"traffic-port",healthCheckPath:"/healthcheck",healthCheckTimeout:5,healthCheckInterval:10,healthyThreshold:10,unhealthyThreshold:2,attributes:{deregistrationDelay:300,stickinessEnabled:!1,stickinessType:"lb_cookie",stickinessDuration:8400,multiValueHeadersEnabled:!1}}],regionZones:[],securityGroups:[],listeners:[{certificates:[],protocol:"HTTP",port:80,defaultActions:[{type:"forward",targetGroupName:a}],rules:[]}]}}static constructNewNetworkLoadBalancerTemplate(e){const t="targetgroup";return{name:"",availabilityZones:void 0,stack:"",detail:"",loadBalancerType:"network",isInternal:!1,ipAddressType:"ipv4",dualstack:!1,cloudProvider:"aws",credentials:e.defaultCredentials.aws||hn.defaults.account,region:e.defaultRegions.aws||hn.defaults.region,vpcId:null,subnetType:hn.defaults.subnetType,deletionProtection:!1,loadBalancingCrossZone:!0,securityGroups:[],targetGroups:[{name:t,protocol:"TCP",port:7001,targetType:"instance",healthCheckProtocol:"TCP",healthCheckPath:"/healthcheck",healthCheckPort:"traffic-port",healthCheckTimeout:5,healthCheckInterval:10,healthyThreshold:10,unhealthyThreshold:10,attributes:{deregistrationDelay:300}}],regionZones:[],listeners:[{certificates:[],protocol:"TCP",port:80,defaultActions:[{type:"forward",targetGroupName:t}],rules:[]}]}}}function Gr(e){var t;return(null==(t=e.listeners)?void 0:t.some(e=>"HTTPS"===e.protocol))?"https:":"http:"}class xr extends Mt.Component{constructor(){super(...arguments),this.state={loading:!0},this.isUnmounted=!1,this.extractTargetGroup=()=>{var e;const{accountId:t,loadBalancerName:a,name:n,region:r}=this.props.targetGroup,l=this.props.app.getDataSource("loadBalancers").data.find(e=>e.name===a&&e.region===r&&e.account===t),i=null==(e=null==l?void 0:l.targetGroups)?void 0:e.find(e=>e.name===n);l&&i?this.isUnmounted||this.setState({loadBalancer:l,targetGroup:i,loading:!1}):this.autoClose()},this.autoClose=()=>{this.isUnmounted||(this.props.stateService.params.allowModalToStayOpen=!0,this.props.stateService.go("^",null,{location:"replace"}))},this.closeDetails=()=>{this.props.stateService.go("^")}}componentDidMount(){this.props.app.getDataSource("loadBalancers").ready().then(()=>{this.isUnmounted||(this.extractTargetGroup(),this.unsubscribeFromRefresh=this.props.app.getDataSource("loadBalancers").onRefresh(this.extractTargetGroup))}).catch(()=>{this.isUnmounted||this.setState({loading:!1})})}componentWillUnmount(){this.isUnmounted=!0,this.unsubscribeFromRefresh&&this.unsubscribeFromRefresh()}renderHeader(){const{name:e}=this.props,{loading:t}=this.state;return Mt.createElement("div",{className:"header"},Mt.createElement("div",{className:"close-button"},Mt.createElement("a",{className:"btn btn-link",onClick:this.closeDetails},Mt.createElement("span",{className:"glyphicon glyphicon-remove"}))),t&&Mt.createElement("div",{className:"horizontal center middle"},Mt.createElement(ne,{size:"small"})),!t&&Mt.createElement("div",{className:"header-text horizontal middle"},Mt.createElement("i",{className:"fa fa-crosshairs icon","aria-hidden":"true"}),Mt.createElement("h3",{className:"horizontal middle space-between flex-1"},e)))}renderNotFound(){return Mt.createElement("div",{className:"content"},Mt.createElement("div",{className:"content-section"},Mt.createElement("div",{className:"content-body text-center"},Mt.createElement("h3",null,"Target group not found."))))}renderDetails(e,t){var a,n,r,l,i,s;const o=e.dnsname||(null==(a=e.elb)?void 0:a.dnsname),c=t.attributes||{};return Mt.createElement("div",{className:"content"},Mt.createElement(G,{heading:"Target Group Details",defaultExpanded:!0},Mt.createElement("dl",{className:"dl-horizontal dl-narrow"},Mt.createElement("dt",null,"In"),Mt.createElement("dd",null,Mt.createElement(A,{account:t.account})," ",t.region),Mt.createElement("dt",null,"VPC"),Mt.createElement("dd",null,Mt.createElement(Fn,{vpcId:t.vpcId})),Mt.createElement("dt",null,"Protocol"),Mt.createElement("dd",null,t.protocol),Mt.createElement("dt",null,"Port"),Mt.createElement("dd",null,t.port),Mt.createElement("dt",null,"Target Type"),Mt.createElement("dd",null,t.targetType)),Mt.createElement("dl",{className:"horizontal-when-filters-collapsed"},Mt.createElement("dt",null,"Load Balancer"),Mt.createElement("dd",null,Mt.createElement("ul",{className:"collapse-margin-on-filter-collapse"},Mt.createElement("li",null,Mt.createElement(ja,{to:"^.loadBalancerDetails",params:{name:e.name,region:e.region,accountId:e.account,vpcId:e.vpcId,provider:"aws"}},Mt.createElement("a",null,e.name)))))),o&&Mt.createElement("dl",{className:"horizontal-when-filters-collapsed"},Mt.createElement("dt",null,"Load Balancer DNS Name"),Mt.createElement("dd",null,Mt.createElement("a",{target:"_blank",href:`${Gr(e)}//${o}`},o)," ",Mt.createElement(ie,{text:o,toolTip:"Copy DNS Name to clipboard"}))),!!(null==(n=t.serverGroups)?void 0:n.length)&&Mt.createElement("dl",{className:"horizontal-when-filters-collapsed"},Mt.createElement("dt",null,"Server Groups"),Mt.createElement("dd",null,Mt.createElement("ul",{className:"collapse-margin-on-filter-collapse"},t.serverGroups.map(e=>Mt.createElement("li",{key:e.name},Mt.createElement(ja,{to:"^.serverGroup",params:{region:e.region,accountId:e.account,serverGroup:e.name,provider:e.cloudProvider}},Mt.createElement("a",null,e.name)))))))),Mt.createElement(G,{heading:"Status",defaultExpanded:!0},Mt.createElement(J,{className:"pull-left",container:t.instanceCounts})),Mt.createElement(G,{heading:"Health Checks"},Mt.createElement("dl",{className:"horizontal-when-filters-collapsed"},Mt.createElement("dt",null,"Target"),Mt.createElement("dd",null,t.healthCheckProtocol,":",t.healthCheckPort,t.healthCheckPath),Mt.createElement("dt",null,"Timeout"),Mt.createElement("dd",null,t.healthCheckTimeoutSeconds||t.healthTimeout," seconds"),Mt.createElement("dt",null,"Interval"),Mt.createElement("dd",null,t.healthCheckIntervalSeconds||t.healthInterval," seconds"),Mt.createElement("dt",null,"Healthy Threshold"),Mt.createElement("dd",null,t.healthyThresholdCount||t.healthyThreshold),Mt.createElement("dt",null,"Unhealthy Threshold"),Mt.createElement("dd",null,t.unhealthyThresholdCount||t.unhealthyThreshold),t.matcher&&Mt.createElement("dt",null,"Matcher"),t.matcher&&Mt.createElement("dd",null,"HTTP Code(s): ",t.matcher.httpCode))),Mt.createElement(G,{heading:"Attributes",defaultExpanded:!0},Mt.createElement("dl",{className:"horizontal-when-filters-collapsed"},Mt.createElement("dt",null,"Deregistration Delay Timeout"),Mt.createElement("dd",null,c["deregistration_delay.timeout_seconds"]||c.deregistrationDelay," seconds"),Mt.createElement("dt",null,"Stickiness Enabled"),Mt.createElement("dd",null,String(null!=(l=null!=(r=c["stickiness.enabled"])?r:c.stickinessEnabled)&&l)),("true"===c["stickiness.enabled"]||c.stickinessEnabled)&&Mt.createElement(Mt.Fragment,null,Mt.createElement("dt",null,"Stickiness Load Balancer Cookie Duration"),Mt.createElement("dd",null,c["stickiness.lb_cookie.duration_seconds"]||c.stickinessDuration," seconds"),Mt.createElement("dt",null,"Stickiness Type"),Mt.createElement("dd",null,c["stickiness.type"]||c.stickinessType)),"network"===e.loadBalancerType&&Mt.createElement(Mt.Fragment,null,Mt.createElement("dt",null,"Preserve Client IP"),Mt.createElement("dd",null,String(null!=(s=null!=(i=c["preserve_client_ip.enabled"])?i:c.preserveClientIp)&&s))))))}render(){const{app:e}=this.props,{loadBalancer:t,loading:a,targetGroup:n}=this.state;return Mt.createElement("div",{className:"details-panel"},this.renderHeader(),!a&&(null==t?void 0:t.isManaged)&&Mt.createElement(se,{resourceSummary:t.managedResourceSummary,application:e}),!a&&!n&&this.renderNotFound(),!a&&n&&t&&this.renderDetails(t,n))}}const Dr=N(xr);var Br=Object.getOwnPropertyDescriptor;let Fr=class extends Mt.Component{render(){const{certificates:e,accountName:t,onCertificateSelect:a,currentValue:n}=this.props,r=e[t]||[],l=r.map(e=>({label:e.serverCertificateName,value:e.serverCertificateName})),i=r.find(e=>e.serverCertificateName===n);return Mt.createElement("div",{style:{width:"100%"}},Mt.createElement(_a,{className:"input-sm",wrapperStyle:{width:"100%"},clearable:!0,required:!0,options:l,onChange:e=>a(e.value),value:n}),i&&Mt.createElement("div",{className:"small sp-margin-xs-top sp-margin-m-bottom sp-margin-m-left"},Mt.createElement("div",null,"Uploaded ",oe(i.uploadDate)," (",B(i.uploadDate),")"),Mt.createElement("b",null,"Expires ",oe(i.expiration))," (",B(i.expiration),")"))}};Fr=((e,t,a,n)=>{for(var r,l=n>1?void 0:n?Br(t,a):t,i=e.length-1;i>=0;i--)(r=e[i])&&(l=r(l)||l);return l})([ce("amazon.certificateSelectField")],Fr);const zr=Mt.forwardRef((e,a)=>Mt.createElement("div",{ref:a},Mt.createElement(r,{name:"idleTimeout",label:"Idle Timeout",help:Mt.createElement(t,{id:"loadBalancer.advancedSettings.idleTimeout"}),input:e=>Mt.createElement(d,{...e,min:0})}),Mt.createElement(r,{name:"deletionProtection",label:"Protection",help:Mt.createElement(t,{id:"loadBalancer.advancedSettings.deletionProtection"}),input:e=>Mt.createElement(o,{...e,text:"Enable delete protection"})}),Mt.createElement(r,{name:"dualstack",label:"Dualstack",help:Mt.createElement(t,{id:"loadBalancer.advancedSettings.albIpAddressType"}),input:e=>Mt.createElement(o,{...e,text:"Assign Ipv4 and IPv6"})})));Cr(".configure-config-modal .StandardFieldLayout .sm-label-right {\n min-width: 160px;\n}\n");const Mr=class e extends Mt.Component{constructor(e){super(e),this.close=e=>{this.props.dismissModal(e)},this.submit=e=>{this.props.closeModal(e)},this.validate=()=>({});const t=e.config||{};this.state={initialValues:{authorizationEndpoint:t.authorizationEndpoint||"",clientId:t.clientId||"",clientSecret:t.clientSecret||"",issuer:t.issuer||"",scope:t.scope||"openid",sessionCookieName:t.sessionCookieName||"AWSELBAuthSessionCookie",tokenEndpoint:t.tokenEndpoint||"",userInfoEndpoint:t.userInfoEndpoint||""}}}static show(t){return E.show(e,t)}render(){const{initialValues:e}=this.state;return Mt.createElement("div",{className:"configure-config-modal"},Mt.createElement(de,{initialValues:e,onSubmit:this.submit,validate:this.validate,render:({isValid:e})=>Mt.createElement(Qa,{className:"form-horizontal"},Mt.createElement(me,{dismiss:this.close}),Mt.createElement(Oa.Header,null,Mt.createElement(Oa.Title,null,"Configure OIDC Client")),Mt.createElement(Oa.Body,null,Mt.createElement(r,{name:"issuer",label:"Issuer",required:!0,input:e=>Mt.createElement(l,{...e,placeholder:"Enter the OpenId Provider"})}),Mt.createElement(r,{name:"authorizationEndpoint",label:"Authorization Endpoint",required:!0,input:e=>Mt.createElement(l,{...e,placeholder:"Enter OpenID provider server endpoint"})}),Mt.createElement(r,{name:"tokenEndpoint",label:"Token Endpoint",required:!0,input:e=>Mt.createElement(l,{...e,placeholder:"Enter a URI for your token endpoint"})}),Mt.createElement(r,{name:"userInfoEndpoint",label:"User info Endpoint",required:!0,input:e=>Mt.createElement(l,{...e,placeholder:"Enter a URI for your user info endpoint"})}),Mt.createElement(r,{name:"clientId",label:"Client ID",required:!0,input:e=>Mt.createElement(l,{...e,placeholder:"Enter the client ID"})}),Mt.createElement(r,{name:"clientSecret",label:"Client secret",required:!0,input:e=>Mt.createElement(l,{...e,placeholder:"Enter the client secret"})})),Mt.createElement(Oa.Footer,null,Mt.createElement("button",{className:"btn btn-default",onClick:this.close,type:"button"},"Cancel"),Mt.createElement(ue,{isDisabled:!e,submitting:!1,isFormSubmit:!0,label:"Save Client"})))}))}};Mr.defaultProps={closeModal:C,dismissModal:C};let Rr=Mr;const Lr=class e extends Mt.Component{constructor(e){super(e),this.close=e=>{this.props.dismissModal(e)},this.submit=e=>{const t=Qt(e,e=>e&&""!==e);this.props.closeModal(t)};const t=e.config||{};this.initialValues={host:t.host||"",path:t.path||"",port:t.port||"",protocol:t.protocol||void 0,query:t.query||"",statusCode:t.statusCode||"HTTP_301"}}static show(t){return E.show(e,t)}render(){return Mt.createElement("div",{className:"configure-config-modal"},Mt.createElement(de,{initialValues:this.initialValues,onSubmit:this.submit,render:({isValid:e})=>Mt.createElement(Qa,{className:"form-horizontal"},Mt.createElement(me,{dismiss:this.close}),Mt.createElement(Oa.Header,null,Mt.createElement(Oa.Title,null,"Configure Redirect ",Mt.createElement(t,{id:"aws.loadBalancer.redirect"}))),Mt.createElement(Oa.Body,null,Mt.createElement(r,{name:"host",label:"Host",required:!1,input:e=>Mt.createElement(l,{...e}),help:Mt.createElement(t,{id:"aws.loadBalancer.redirect.host"})}),Mt.createElement(r,{name:"path",label:"Path",required:!1,input:e=>Mt.createElement(l,{...e}),help:Mt.createElement(t,{id:"aws.loadBalancer.redirect.path"})}),Mt.createElement(r,{name:"port",label:"Port",required:!1,input:e=>Mt.createElement(l,{...e}),help:Mt.createElement(t,{id:"aws.loadBalancer.redirect.port"})}),Mt.createElement(r,{name:"protocol",label:"Protocol",required:!1,input:e=>Mt.createElement(s,{...e,stringOptions:["HTTP","HTTPS","#{protocol}"],placeholder:"Select Protocol",clearable:!1,style:{width:"130px"}}),help:Mt.createElement(t,{id:"aws.loadBalancer.redirect.protocol"})}),Mt.createElement(r,{name:"query",label:"Query",required:!1,input:e=>Mt.createElement(l,{...e}),help:Mt.createElement(t,{id:"aws.loadBalancer.redirect.query"})}),Mt.createElement(r,{name:"statusCode",label:"Status Code",required:!0,input:e=>Mt.createElement(pe,{...e,options:["HTTP_301","HTTP_302"]}),help:Mt.createElement(t,{id:"aws.loadBalancer.redirect.statusCode"})})),Mt.createElement(Oa.Footer,null,Mt.createElement("button",{className:"btn btn-default",onClick:this.close,type:"button"},"Cancel"),Mt.createElement(ue,{isDisabled:!e,submitting:!1,isFormSubmit:!0,label:"Save Config"})))}))}};Lr.defaultProps={closeModal:C,dismissModal:C};let Or=Lr;class $r{static getOidcConfigsByApp(e){return T("/oidcConfigs").query({app:e}).get()}}class Ur{static listCertificates(){return he.listCertificatesByProvider("aws").then(e=>i.listAllAccounts("aws").then(t=>{const a=t.reduce((e,t)=>(e[t.accountId]=t.name,e),{}),n=Kt(e,"serverCertificateName");return ea(n,e=>{const[,,,,t]=e.arn.split(":");return a[t]||"unknown"})}))}}const Vr=Ka(()=>Mt.createElement("span",{className:"pipeline-drag-handle clickable glyphicon glyphicon-resize-vertical"})),Hr={authenticateOidcConfig:{authorizationEndpoint:"",clientId:"",issuer:"",scope:"openid",sessionCookieName:"AWSELBAuthSessionCookie",tokenEndpoint:"",userInfoEndpoint:""},type:"authenticate-oidc"};class qr extends Mt.Component{constructor(e){super(e),this.protocols=["HTTP","HTTPS"],this.initialActionsWithAuth=new Set,this.initialListenersWithDefaultAuth=new Set,this.removedAuthActions=new Map,this.attachClientSecret=(e,t)=>{if("authenticate-oidc"===e.type){const a=t.find(t=>t.clientId===e.authenticateOidcConfig.clientId);a&&(e.authenticateOidcConfig.clientSecret=a.clientSecret)}},this.addListener=()=>{this.props.formik.values.listeners.push({certificates:[],protocol:"HTTP",port:80,defaultActions:[{type:"forward",targetGroupName:""}],rules:[]}),this.updateListeners()},this.addRule=e=>{e.rules.push({priority:null,actions:[{type:"forward",targetGroupName:""}],conditions:[{field:"path-pattern",values:[""]}]}),this.updateListeners()},this.removeRule=(e,t)=>{e.rules.splice(t,1),this.updateListeners()},this.handleConditionFieldChanged=(e,t)=>{e.field=t,"http-request-method"===t&&(e.values=[]),this.updateListeners()},this.handleConditionValueChanged=(e,t)=>{e.values[0]=t,this.updateListeners()},this.handleHttpRequestMethodChanged=(e,t,a)=>{let n=e.values||[];a?n.push(t):n=n.filter(e=>e!==t),e.values=n,e.httpRequestMethodConfig={values:n},this.updateListeners()},this.addCondition=e=>{if(1===e.conditions.length){const t="path-pattern"===e.conditions[0].field?"host-header":"path-pattern";e.conditions.push({field:t,values:[""]})}this.updateListeners()},this.removeCondition=(e,t)=>{e.conditions.splice(t,1),this.updateListeners()},this.handleRuleActionTargetChanged=(e,t)=>{e.targetGroupName=t,this.updateListeners()},this.handleRuleActionTypeChanged=(e,t)=>{e.type=t,"forward"===e.type?delete e.redirectActionConfig:"redirect"===e.type&&(e.redirectActionConfig={statusCode:"HTTP_301"},delete e.targetGroupName),this.updateListeners()},this.handleSortEnd=(e,t)=>{t.rules=Ya(t.rules,e.oldIndex,e.newIndex),this.updateListeners()},this.configureOidcClient=e=>{Rr.show({config:e.authenticateOidcConfig}).then(t=>{e.authenticateOidcConfig=t,this.updateListeners()}).catch(()=>{})},this.configureRedirect=e=>{Or.show({config:e.redirectActionConfig}).then(t=>{e.redirectActionConfig=t,this.updateListeners()}).catch(()=>{})},this.authenticateRuleToggle=(e,t)=>{const a=e.rules[t],n=a&&a.actions||e.defaultActions;if(n){const a=n.findIndex(e=>"authenticate-oidc"===e.type);if(-1!==a)this.removeAuthAction(e,n,a,t);else{const a=(this.removedAuthActions.has(e)?this.removedAuthActions.get(e)[t||-1]:void 0)||{...Hr};n.unshift({...a})}this.updateListeners()}},this.oidcConfigChanged=(e,t)=>{e.authenticateOidcConfig={...t},this.updateListeners()},this.redirectConfigChanged=(e,t)=>{e.redirectActionConfig={...t},this.updateListeners()},this.state={certificates:[],certificateTypes:ta(hn,"loadBalancers.certificateTypes",["iam","acm"]),oidcConfigs:void 0},this.props.formik.initialValues.listeners.forEach(e=>{"authenticate-oidc"===e.defaultActions[0].type&&this.initialListenersWithDefaultAuth.add(e),e.rules.forEach(e=>{"authenticate-oidc"===e.actions[0].type&&this.initialActionsWithAuth.add(e.actions)})})}getAllTargetGroupsFromListeners(e){const t=Wt(e.map(e=>e.defaultActions)),a=Wt(e.map(e=>e.rules));return t.push(...Wt(a.map(e=>e.actions))),aa(t.map(e=>e.targetGroupName))}validate(e){const t={},a=e.targetGroups.map(e=>e.name),n=this.getAllTargetGroupsFromListeners(e.listeners),r=na(a,n);1===r.length?t.listeners=`Target group ${r[0]} is unused.`:r.length>1&&(t.listeners=`Target groups ${r.join(", ")} are unused.`);const{listeners:l}=e;Vt(l,"port").length<l.length&&(t.listenerPorts="Multiple listeners cannot use the same port.");return e.listeners.find(e=>{const t=!!e.defaultActions.find(e=>"forward"===e.type&&!e.targetGroupName||"authenticate-oidc"===e.type&&!e.authenticateOidcConfig.clientId||"redirect"===e.type&&(!e.redirectActionConfig||!ra(e.redirectActionConfig,e=>e&&""!==e))),a=!!e.rules.find(e=>{const t=!!e.actions.find(e=>"forward"===e.type&&!e.targetGroupName),a=!!e.actions.find(e=>"authenticate-oidc"===e.type&&!e.authenticateOidcConfig.clientId),n=!!e.conditions.find(e=>"http-request-method"===e.field?!e.values.length:e.values.includes(""));return t||a||n});return t||a})&&(t.listeners="Missing fields in rule configuration."),t}componentDidMount(){this.loadCertificates(),this.loadOidcClients()}loadCertificates(){Ur.listCertificates().then(e=>{this.setState({certificates:e})})}loadOidcClients(){$r.getOidcConfigsByApp(this.props.app.name).then(e=>{e&&e.length&&this.props.formik.values.listeners.forEach(t=>{t.defaultActions.forEach(t=>this.attachClientSecret(t,e)),t.rules.forEach(t=>t.actions.forEach(t=>this.attachClientSecret(t,e)))}),this.setState({oidcConfigs:e}),this.updateListeners()}).catch(()=>{})}updateListeners(){this.props.formik.setFieldValue("listeners",this.props.formik.values.listeners)}needsCert(e){return"HTTPS"===e.protocol}showCertificateSelect(e){return"iam"===e.type&&this.state.certificates&&Object.keys(this.state.certificates).length>0}addListenerCertificate(e){e.certificates=e.certificates||[],e.certificates.push({certificateArn:void 0,type:"iam",name:void 0})}removeAuthActions(e){const t=e.defaultActions.findIndex(e=>"authenticate-oidc"===e.type);-1!==t&&this.removeAuthAction(e,e.defaultActions,t,-1),e.rules.forEach((t,a)=>{const n=t.actions.findIndex(e=>"authenticate-oidc"===e.type);-1!==n&&this.removeAuthAction(e,t.actions,n,a)}),this.updateListeners()}reenableAuthActions(e){const t=this.removedAuthActions.has(e)?this.removedAuthActions.get(e):[],a=t[-1];a&&(t[-1]=void 0,e.defaultActions.unshift({...a})),e.rules.forEach((e,a)=>{const n=t[a];t[a]=void 0,n&&e.actions.unshift({...n})})}listenerProtocolChanged(e,t){e.protocol=t,"HTTPS"===e.protocol&&(e.port=443,e.certificates&&0!==e.certificates.length||this.addListenerCertificate(e),this.reenableAuthActions(e)),"HTTP"===e.protocol&&(e.port=80,e.certificates.length=0,this.removeAuthActions(e)),this.updateListeners()}listenerPortChanged(e,t){e.port=Number.parseInt(t,10),this.updateListeners()}certificateTypeChanged(e,t){e.type=t,this.updateListeners()}handleCertificateChanged(e,t){e.name=t,this.updateListeners()}removeListener(e){this.props.formik.values.listeners.splice(e,1),this.updateListeners()}removeAuthActionInternal(e,t,a,n=-1){const r=t.splice(a,1)[0];this.removedAuthActions.has(e)||this.removedAuthActions.set(e,[]),this.removedAuthActions.get(e)[n||-1]=r,this.updateListeners()}removeAuthAction(e,t,a,n=-1){const r=-1===n&&this.initialListenersWithDefaultAuth.has(e),l=n>-1&&this.initialActionsWithAuth.has(t);r||l?w.confirm({header:"Really remove authentication?",buttonText:"Remove Auth",submitMethod:()=>(this.removeAuthActionInternal(e,t,a,n),r&&this.initialListenersWithDefaultAuth.delete(e),l&&this.initialActionsWithAuth.delete(t),Promise.resolve())}):this.removeAuthActionInternal(e,t,a,n)}render(){const{errors:e,values:t}=this.props.formik,{certificates:a,certificateTypes:n,oidcConfigs:r}=this.state;return Mt.createElement("div",{className:"container-fluid form-horizontal"},Mt.createElement("div",{className:"form-group"},Mt.createElement("div",{className:"col-md-12"},t.listeners.map((e,l)=>Mt.createElement("div",{key:l,className:"wizard-pod"},Mt.createElement("div",null,Mt.createElement("div",{className:"wizard-pod-row header"},Mt.createElement("div",{className:"wizard-pod-row-title"},"Listen On"),Mt.createElement("div",{className:"wizard-pod-row-contents spread"},Mt.createElement("div",null,Mt.createElement("span",{className:"wizard-pod-content"},Mt.createElement("label",null,"Protocol"),Mt.createElement("select",{className:"form-control input-sm inline-number",style:{width:"80px"},value:e.protocol,onChange:t=>this.listenerProtocolChanged(e,t.target.value)},this.protocols.map(e=>Mt.createElement("option",{key:e},e)))),Mt.createElement("span",{className:"wizard-pod-content"},Mt.createElement("label",null,"Port"),Mt.createElement("input",{className:"form-control input-sm inline-number",type:"text",min:0,value:e.port||"",onChange:t=>this.listenerPortChanged(e,t.target.value),style:{width:"80px"},required:!0}))),Mt.createElement("div",null,Mt.createElement("a",{className:"sm-label clickable",onClick:()=>this.removeListener(l)},Mt.createElement("span",{className:"glyphicon glyphicon-trash"}))))),this.needsCert(e)&&Mt.createElement("div",{className:"wizard-pod-row"},Mt.createElement("div",{className:"wizard-pod-row-title"},"Certificate"),Mt.createElement("div",{className:"wizard-pod-row-contents"},e.certificates.map((e,r)=>Mt.createElement("div",{key:r,style:{width:"100%",display:"flex",flexDirection:"row"}},Mt.createElement("select",{className:"form-control input-sm inline-number",style:{width:"45px"},value:e.type,onChange:t=>this.certificateTypeChanged(e,t.target.value)},n.map(e=>Mt.createElement("option",{key:e},e))),this.showCertificateSelect(e)&&Mt.createElement(Fr,{certificates:a,accountName:t.credentials,currentValue:e.name,app:this.props.app,onCertificateSelect:t=>this.handleCertificateChanged(e,t)}),!this.showCertificateSelect(e)&&Mt.createElement("input",{className:"form-control input-sm no-spel",style:{display:"inline-block"},type:"text",value:e.name,onChange:t=>this.handleCertificateChanged(e,t.target.value),required:!0}))))),Mt.createElement("div",{className:"wizard-pod-row"},Mt.createElement("div",{className:"wizard-pod-row-contents",style:{padding:"0"}},Mt.createElement("table",{className:"table table-condensed packed rules-table"},Mt.createElement("thead",null,Mt.createElement("tr",null,Mt.createElement("th",{style:{width:"15px",padding:"0"}}),Mt.createElement("th",null,"If"),Mt.createElement("th",{style:{width:"315px"}},"Then"),Mt.createElement("th",{style:{width:"45px"}}))),Mt.createElement(_r,{addCondition:this.addCondition,addRule:this.addRule,authenticateRuleToggle:this.authenticateRuleToggle,distance:10,handleConditionFieldChanged:this.handleConditionFieldChanged,handleConditionValueChanged:this.handleConditionValueChanged,handleHttpRequestMethodChanged:this.handleHttpRequestMethodChanged,handleRuleActionTargetChanged:this.handleRuleActionTargetChanged,handleRuleActionTypeChanged:this.handleRuleActionTypeChanged,listener:e,helperClass:"rule-sortable-helper",removeRule:this.removeRule,removeCondition:this.removeCondition,targetGroups:t.targetGroups,oidcConfigs:r,oidcConfigChanged:this.oidcConfigChanged,redirectConfigChanged:this.redirectConfigChanged,onSortEnd:t=>this.handleSortEnd(t,e),configureOidcClient:this.configureOidcClient,configureRedirect:this.configureRedirect}))))))),e.listenerPorts&&Mt.createElement("div",{className:"wizard-pod-row-errors"},Mt.createElement(ge,{type:"error",message:e.listenerPorts})),e.listeners&&Mt.createElement("div",{className:"wizard-pod-row-errors"},Mt.createElement(ge,{type:"error",message:e.listeners})),Mt.createElement("table",{className:"table table-condensed packed"},Mt.createElement("tbody",null,Mt.createElement("tr",null,Mt.createElement("td",null,Mt.createElement("button",{type:"button",className:"add-new col-md-12",onClick:this.addListener},Mt.createElement("span",null,Mt.createElement("span",{className:"glyphicon glyphicon-plus-sign"})," Add new listener")))))))))}}const Wr=Xa(e=>Mt.createElement("tr",{className:"listener-rule"},Mt.createElement("td",{className:"handle"},Mt.createElement(Vr,null)),Mt.createElement("td",null,e.rule.conditions.map((a,n)=>Mt.createElement("div",{key:n,className:"listener-rule-condition"},Mt.createElement("select",{className:"form-control input-sm inline-number",value:a.field,onChange:t=>e.handleConditionFieldChanged(a,t.target.value),style:{width:"40%"},required:!0},(1===e.rule.conditions.length||"host-header"===a.field)&&Mt.createElement("option",{value:"host-header"},"Host"),(1===e.rule.conditions.length||"path-pattern"===a.field)&&Mt.createElement("option",{value:"path-pattern"},"Path"),(1===e.rule.conditions.length||"http-request-method"===a.field)&&Mt.createElement("option",{value:"http-request-method"},"Method(s)")),"path-pattern"===a.field&&Mt.createElement(t,{id:"aws.loadBalancer.ruleCondition.path"}),"host-header"===a.field&&Mt.createElement(t,{id:"aws.loadBalancer.ruleCondition.host"}),"http-request-method"!==a.field&&Mt.createElement("input",{className:"form-control input-sm",type:"text",value:a.values[0],onChange:t=>e.handleConditionValueChanged(a,t.target.value),maxLength:128,required:!0,style:{width:"63%"}}),"http-request-method"===a.field&&Mt.createElement("div",{className:"col-md-6 checkbox"},["DELETE","GET","PATCH","POST","PUT"].map(t=>Mt.createElement("label",{key:`${t}-checkbox`},Mt.createElement("input",{type:"checkbox",checked:a.values.includes(t),onChange:n=>e.handleHttpRequestMethodChanged(a,t,n.target.checked)}),t))),Mt.createElement("span",{className:"remove-condition"},1===n&&Mt.createElement("a",{className:"btn btn-sm btn-link clickable",onClick:()=>e.removeCondition(e.rule,n),style:{padding:"0"}},Mt.createElement(O,{value:"Remove Condition"},Mt.createElement("span",{className:"glyphicon glyphicon-trash"})))))),1===e.rule.conditions.length&&Mt.createElement("div",{className:"add-new-container"},Mt.createElement("button",{type:"button",className:"add-new col-md-12",onClick:()=>e.addCondition(e.rule)},Mt.createElement("span",null,Mt.createElement("span",{className:"glyphicon glyphicon-plus-sign"})," Add new condition")),Mt.createElement("span",{style:{minWidth:"15px"}}))),Mt.createElement("td",null,e.rule.actions.map((t,a)=>Mt.createElement(jr,{key:a,action:t,actionTypeChanged:a=>e.handleRuleActionTypeChanged(t,a),oidcConfigChanged:a=>e.oidcConfigChanged(t,a),redirectConfigChanged:a=>e.redirectConfigChanged(t,a),targetChanged:a=>e.handleRuleActionTargetChanged(t,a),targetGroups:e.targetGroups,oidcConfigs:e.oidcConfigs,configureOidcClient:e.configureOidcClient,configureRedirect:e.configureRedirect}))),Mt.createElement("td",null,Mt.createElement(Zr,{ruleIndex:e.ruleIndex,listener:e.listener,authenticateRuleToggle:e.authenticateRuleToggle,removeRule:e.removeRule,actions:e.rule.actions})))),jr=e=>{var t;if("authenticate-oidc"!==e.action.type){const t=e.action.redirectActionConfig||e.action.redirectConfig;return Mt.createElement("div",{className:"horizontal top"},Mt.createElement("select",{className:"form-control input-sm",style:{width:"80px"},value:e.action.type,onChange:t=>e.actionTypeChanged(t.target.value)},Mt.createElement("option",{value:"forward"},"forward to"),Mt.createElement("option",{value:"redirect"},"redirect to")),"forward"===e.action.type&&Mt.createElement("select",{className:"form-control input-sm",value:e.action.targetGroupName,onChange:t=>e.targetChanged(t.target.value),required:!0},Mt.createElement("option",{value:""}),aa(e.targetGroups.map(e=>e.name)).map(e=>Mt.createElement("option",{key:e},e))),"redirect"===e.action.type&&Mt.createElement("dl",{className:"dl-horizontal dl-narrow"},Mt.createElement("dt",null,"Host"),Mt.createElement("dd",null,t.host),Mt.createElement("dt",null,"Path"),Mt.createElement("dd",null,t.path),Mt.createElement("dt",null,"Port"),Mt.createElement("dd",null,t.port),Mt.createElement("dt",null,"Protocol"),Mt.createElement("dd",null,t.protocol),Mt.createElement("dt",null,"Query"),Mt.createElement("dd",null,t.query),Mt.createElement("dt",null,"Status Code"),Mt.createElement("dd",null,t.statusCode),Mt.createElement("dt",null,Mt.createElement("button",{className:"btn btn-link no-padding",type:"button",onClick:()=>e.configureRedirect(e.action)},"Configure..."))))}if("authenticate-oidc"===e.action.type){const a=e.action.authenticateOidcConfig.clientId,n=ta(hn,"loadBalancers.disableManualOidcDialog",!1)||e.oidcConfigs&&e.oidcConfigs.length>0&&(!a||e.oidcConfigs.find(e=>e.clientId===a)),r=(null==(t=e.oidcConfigs)?void 0:t.length)?e.oidcConfigs.map(e=>Mt.createElement("option",{key:e.clientId},e.clientId)):Mt.createElement("option",{disabled:!0},"No ",ve.get("OIDC client")," config found");return Mt.createElement("div",{className:"horizontal middle",style:{height:"30px"}},Mt.createElement("span",{style:{whiteSpace:"pre"}},"auth with ",ve.get("OIDC client")," "),n&&Mt.createElement("select",{className:"form-control input-sm",value:a,onChange:t=>e.oidcConfigChanged(e.oidcConfigs.find(e=>e.clientId===t.target.value)),required:!0},Mt.createElement("option",{value:""}),r),!n&&Mt.createElement("a",{onClick:()=>e.configureOidcClient(e.action),className:"clickable"},a||"Configure..."),Mt.createElement("span",{style:{whiteSpace:"pre"}},Mt.createElement("em",null," and then")))}return null},Zr=e=>{const a=Boolean(e.actions.find(e=>"authenticate-oidc"===e.type)),n="HTTPS"===e.listener.protocol,r=a?"Remove authentication from rule":"Authenticate rule",l=a?"fas fa-fw fa-lock-open":"fas fa-fw fa-user-lock";return Mt.createElement("span",null,n&&Mt.createElement(Mt.Fragment,null,Mt.createElement("a",{className:"btn btn-sm btn-link clickable",onClick:()=>e.authenticateRuleToggle(e.listener,e.ruleIndex),style:{padding:"0"}},Mt.createElement(O,{value:r},Mt.createElement("i",{className:l}))),Mt.createElement(t,{id:"aws.loadBalancer.oidcAuthentication"})),void 0!==e.ruleIndex&&e.ruleIndex>=0&&e.removeRule&&Mt.createElement("a",{className:"btn btn-sm btn-link clickable",onClick:()=>e.removeRule(e.listener,e.ruleIndex),style:{padding:"0"}},Mt.createElement(O,{value:"Remove Rule"},Mt.createElement("i",{className:"far fa-fw fa-trash-alt"}))))},_r=Ja(e=>Mt.createElement("tbody",null,Mt.createElement("tr",{className:"not-sortable"},Mt.createElement("td",null),Mt.createElement("td",null,"Default"),Mt.createElement("td",null,e.listener.defaultActions.map((t,a)=>Mt.createElement(jr,{key:a,action:t,actionTypeChanged:a=>e.handleRuleActionTypeChanged(t,a),targetChanged:a=>e.handleRuleActionTargetChanged(t,a),targetGroups:e.targetGroups,oidcConfigs:e.oidcConfigs,oidcConfigChanged:a=>e.oidcConfigChanged(t,a),redirectConfigChanged:a=>e.redirectConfigChanged(t,a),configureOidcClient:e.configureOidcClient,configureRedirect:e.configureRedirect}))),Mt.createElement("td",null,Mt.createElement(Zr,{listener:e.listener,actions:e.listener.defaultActions,authenticateRuleToggle:e.authenticateRuleToggle}))),e.listener.rules.sort((e,t)=>e.priority-t.priority).map((t,a)=>Mt.createElement(Wr,{key:a,rule:t,addCondition:e.addCondition,handleConditionFieldChanged:e.handleConditionFieldChanged,handleConditionValueChanged:e.handleConditionValueChanged,handleHttpRequestMethodChanged:e.handleHttpRequestMethodChanged,handleRuleActionTargetChanged:e.handleRuleActionTargetChanged,handleRuleActionTypeChanged:e.handleRuleActionTypeChanged,oidcConfigChanged:e.oidcConfigChanged,redirectConfigChanged:e.redirectConfigChanged,removeCondition:e.removeCondition,authenticateRuleToggle:e.authenticateRuleToggle,removeRule:e.removeRule,targetGroups:e.targetGroups,oidcConfigs:e.oidcConfigs,listener:e.listener,index:a,ruleIndex:a,configureOidcClient:e.configureOidcClient,configureRedirect:e.configureRedirect})),Mt.createElement("tr",{className:"not-sortable"},Mt.createElement("td",{colSpan:5},Mt.createElement("button",{type:"button",className:"add-new col-md-12",onClick:()=>e.addRule(e.listener)},Mt.createElement("span",null,Mt.createElement("span",{className:"glyphicon glyphicon-plus-sign"})," Add new rule")))))),Kr=(e,t,a)=>n=>ta(e,[t,a],[]).includes(n.toLowerCase())?`There is already a target group in ${t}:${a} with that name.`:null,Yr=e=>t=>t.length<32-e?null:"Target group names are automatically prefixed with their application name and cannot exceed 32 characters in length.";let Xr=class extends Mt.Component{constructor(e){super(e),this.protocols=["HTTP","HTTPS"],this.targetTypes=["instance","ip","lambda"],this.destroy$=new Ca,this.addTargetGroup=()=>{const{setFieldValue:e,values:t}=this.props.formik,a=t.targetGroups.length;t.targetGroups.push({name:"targetgroup"+(a?`${a}`:""),protocol:"HTTP",port:7001,targetType:"instance",healthCheckProtocol:"HTTP",healthCheckPort:"7001",healthCheckPath:"/healthcheck",healthCheckTimeout:5,healthCheckInterval:10,healthyThreshold:10,unhealthyThreshold:2,attributes:{deregistrationDelay:300,stickinessEnabled:!1,stickinessType:"lb_cookie",stickinessDuration:8400}}),e("targetGroups",t.targetGroups)};const t=e.isNew?0:e.formik.initialValues.targetGroups.length;this.state={existingTargetGroupNames:{},oldTargetGroupCount:t}}validate(e){const t=aa(Wt(Yt(ea(e.targetGroups,"name"),e=>e.length>1)).map(e=>e.name)),a=new n(e),{arrayForEach:r}=a;return a.field("targetGroups").withValidators(r((a,n)=>{var r;a.field("name","Name").withValidators(Kr(this.state.existingTargetGroupNames,e.credentials,e.region),Yr(this.props.app.name.length),fe.valueUnique(t,"There is already a target group in this load balancer with the same name.")),a.field("healthCheckInterval","Health Check Interval").withValidators((r=n,e=>"TCP"!==r.healthCheckProtocol||"TCP"===r.healthCheckProtocol&&(10===Number.parseInt(e,10)||30===Number.parseInt(e,10))?null:"TCP health checks only support 10s and 30s intervals"),fe.checkBetween("healthCheckInterval",5,300)),a.field("healthyThreshold","Healthy Threshold").withValidators(fe.checkBetween("healthyThreshold",2,10)),a.field("unhealthyThreshold","Unhealthy Threshold").spelAware().withValidators(fe.checkBetween("unhealthyThreshold",2,10)),a.field("healthCheckTimeout","Timeout").withValidators((e=>t=>{const a=la(t)?t:Number.parseInt(t,10),{protocol:n,healthCheckProtocol:r}=e;if("TCP"===n||"TLS"===n){if("HTTP"===r&&6!==a)return"HTTP health check timeouts for TCP/TLS target groups must be 6s";if(("HTTPS"===r||"TLS"===r)&&10!==a)return"HTTPS/TLS health check timeouts for TCP/TLS target groups must be 10s"}return null})(n),fe.checkBetween("healthCheckTimeout",2,120)),"lambda"!==n.targetType&&(a.field("protocol","Protocol").required(),a.field("healthCheckPath","Health Check Path").required(),a.field("healthCheckProtocol","Health Check Protocol").required(),a.field("name","Name").required(),a.field("healthyThreshold","Healthy Threshold").required().spelAware().withValidators(e=>Ee(e)),a.field("unhealthyThreshold","Unhealthy Threshold").required().spelAware().withValidators(e=>Ee(e)),a.field("healthCheckInterval","Health Check Interval").required().spelAware().withValidators(e=>Ee(e)),a.field("healthCheckPort","Health Check Port").required().spelAware().withValidators(e=>"traffic-port"===e?null:Ee(e)),a.field("port","Port").required().spelAware().withValidators(e=>Ee(e)),a.field("healthyThreshold","Healthy Threshold").required().spelAware().withValidators(e=>Ee(e),fe.checkBetween("healthyThreshold",2,10)),a.field("unhealthyThreshold","Unhealthy Threshold").required().spelAware().withValidators(e=>Ee(e),fe.checkBetween("unhealthyThreshold",2,10)))})),a.validateForm()}removeAppName(e){return e.replace(`${this.props.app.name}-`,"")}updateLoadBalancerNames(e){const{app:t,loadBalancer:a}=e,n={};Na(t.getDataSource("loadBalancers").refresh(!0)).pipe(Da(this.destroy$)).subscribe(()=>{t.getDataSource("loadBalancers").data.forEach(e=>{"classic"!==e.loadBalancerType&&(a&&e.name===a.name||e.targetGroups.forEach(t=>{n[e.account]=n[e.account]||{},n[e.account][e.region]=n[e.account][e.region]||[],n[e.account][e.region].push(this.removeAppName(t.name))}))}),this.setState({existingTargetGroupNames:n},()=>this.props.formik.validateForm())})}targetGroupFieldChanged(e,t,a){const{setFieldValue:n,values:r}=this.props.formik,l=r.targetGroups[e];"targetType"===t&&"lambda"===a&&delete l.port,ia(l,t,a),n("targetGroups",r.targetGroups)}removeTargetGroup(e){const{setFieldValue:t,values:a}=this.props.formik,{oldTargetGroupCount:n}=this.state;a.targetGroups.splice(e,1),e<n&&this.setState({oldTargetGroupCount:n-1}),t("targetGroups",a.targetGroups)}componentDidMount(){this.updateLoadBalancerNames(this.props)}componentWillUnmount(){this.destroy$.next(),this.destroy$.complete()}render(){const{app:e}=this.props,{errors:a,values:n}=this.props.formik,{oldTargetGroupCount:r}=this.state,l=this.protocols.map(e=>Mt.createElement("option",{key:e},e)),i=this.targetTypes.map(e=>Mt.createElement("option",{key:e},e));return Mt.createElement("div",{className:"container-fluid form-horizontal"},Mt.createElement("div",{className:"form-group"},Mt.createElement("div",{className:"col-md-12"},n.targetGroups.map((n,s)=>{const o=a.targetGroups&&a.targetGroups[s]||{},c=("TCP"===n.protocol||"TLS"===n.protocol)&&"HTTP"===n.healthCheckProtocol,d=("TCP"===n.protocol||"TLS"===n.protocol)&&"HTTPS"===n.healthCheckProtocol;return Mt.createElement("div",{key:s,className:"wizard-pod"},Mt.createElement("div",null,Mt.createElement("div",{className:"wizard-pod-row header"},Mt.createElement("div",{className:"wizard-pod-row-title"},"Group Name"),Mt.createElement("div",{className:"wizard-pod-row-contents"},Mt.createElement("div",{className:"wizard-pod-row-data"},Mt.createElement("span",{className:"group-name-prefix"},e.name,"-"),Mt.createElement("input",{className:"form-control input-sm target-group-name",type:"text",value:n.name,onChange:e=>this.targetGroupFieldChanged(s,"name",e.target.value),required:!0,disabled:s<r}),Mt.createElement("a",{className:"sm-label clickable",onClick:()=>this.removeTargetGroup(s)},Mt.createElement("span",{className:"glyphicon glyphicon-trash"}))),o.name&&Mt.createElement("div",{className:"wizard-pod-row-errors"},Mt.createElement(ge,{type:"error",message:o.name})))),Mt.createElement("div",{className:"wizard-pod-row"},Mt.createElement("div",{className:"wizard-pod-row-title"},Mt.createElement(t,{id:"aws.targetGroup.targetType"})," ",Mt.createElement("span",null,"Target Type ")),Mt.createElement("div",{className:"wizard-pod-row-contents"},Mt.createElement("div",{className:"wizard-pod-row-data"},Mt.createElement("span",{className:"wizard-pod-content"},Mt.createElement("select",{className:"form-control input-sm",value:n.targetType,onChange:e=>this.targetGroupFieldChanged(s,"targetType",e.target.value),disabled:s<r},i))))),"lambda"!==n.targetType&&Mt.createElement("div",{className:"wizard-pod-row"},Mt.createElement("div",{className:"wizard-pod-row-title"},"Backend Connection"),Mt.createElement("div",{className:"wizard-pod-row-contents"},Mt.createElement("div",{className:"wizard-pod-row-data"},Mt.createElement("span",{className:"wizard-pod-content"},Mt.createElement("label",null,"Protocol "),Mt.createElement(t,{id:"aws.targetGroup.protocol"})," ",Mt.createElement("select",{className:"form-control input-sm inline-number",value:n.protocol,onChange:e=>this.targetGroupFieldChanged(s,"protocol",e.target.value),disabled:s<r},l)),Mt.createElement("span",{className:"wizard-pod-content"},Mt.createElement("label",null,"Port "),Mt.createElement(t,{id:"aws.targetGroup.port"})," ",Mt.createElement("input",{className:"form-control input-sm inline-number",value:n.port,onChange:e=>this.targetGroupFieldChanged(s,"port",e.target.value),type:"text",required:!0,disabled:s<r}))))),Mt.createElement("div",{className:"wizard-pod-row"},Mt.createElement("div",{className:"wizard-pod-row-title"},"Healthcheck"),Mt.createElement("div",{className:"wizard-pod-row-contents"},Mt.createElement("div",{className:"wizard-pod-row-data"},"lambda"!==n.targetType&&Mt.createElement("span",{className:"wizard-pod-content"},Mt.createElement("label",null,"Protocol "),"TCP"===n.healthCheckProtocol&&Mt.createElement(t,{id:"aws.targetGroup.healthCheckProtocol"})," ",Mt.createElement("select",{className:"form-control input-sm inline-number",value:n.healthCheckProtocol,onChange:e=>this.targetGroupFieldChanged(s,"healthCheckProtocol",e.target.value)},l)),"lambda"!==n.targetType&&Mt.createElement("span",{className:"wizard-pod-content"},Mt.createElement("label",null,"Port "),Mt.createElement(t,{id:"aws.targetGroup.attributes.healthCheckPort.trafficPort"})," ",Mt.createElement("select",{className:"form-control input-sm inline-number",style:{width:"90px"},value:"traffic-port"===n.healthCheckPort?"traffic-port":"manual",onChange:e=>this.targetGroupFieldChanged(s,"healthCheckPort","traffic-port"===e.target.value?"traffic-port":"")},Mt.createElement("option",{value:"traffic-port"},"Traffic Port"),Mt.createElement("option",{value:"manual"},"Manual"))," ",Mt.createElement(ye,{className:"form-control input-sm inline-number",error:o.healthCheckPort,style:{visibility:"traffic-port"===n.healthCheckPort?"hidden":"inherit"},name:"healthCheckPort",required:!0,value:n.healthCheckPort,onChange:e=>this.targetGroupFieldChanged(s,"healthCheckPort",e.target.value)})),Mt.createElement("span",{className:"wizard-pod-content"},Mt.createElement("label",null,"Path "),Mt.createElement(ye,{error:o.healthCheckPath,name:"healthCheckPath",required:!0,value:n.healthCheckPath,onChange:e=>this.targetGroupFieldChanged(s,"healthCheckPath",e.target.value)})),Mt.createElement("span",{className:"wizard-pod-content"},Mt.createElement("label",null,"Timeout "),(c||d)&&Mt.createElement(t,{id:"aws.targetGroup.healthCheckTimeout"}),Mt.createElement(be,{error:o.healthCheckTimeout,disabled:c||d,required:!0,value:c?6:d?10:n.healthCheckTimeout,min:2,max:120,onChange:e=>this.targetGroupFieldChanged(s,"healthCheckTimeout",e)})),Mt.createElement("span",{className:"wizard-pod-content"},Mt.createElement("label",null,"Interval "),Mt.createElement(be,{error:o.healthCheckInterval,required:!0,value:n.healthCheckInterval,min:5,max:300,onChange:e=>this.targetGroupFieldChanged(s,"healthCheckInterval",e)}))))),Mt.createElement("div",{className:"wizard-pod-row"},Mt.createElement("div",{className:"wizard-pod-row-title"},"Healthcheck Threshold"),Mt.createElement("div",{className:"wizard-pod-row-contents"},Mt.createElement("div",{className:"wizard-pod-row-data"},Mt.createElement("span",{className:"wizard-pod-content"},Mt.createElement("label",null,"Healthy "),Mt.createElement(be,{error:o.healthyThreshold,value:n.healthyThreshold,min:2,max:10,onChange:e=>this.targetGroupFieldChanged(s,"healthyThreshold",e)})),Mt.createElement("span",{className:"wizard-pod-content"},Mt.createElement("label",null,"Unhealthy "),Mt.createElement(be,{error:o.unhealthyThreshold,required:!0,value:n.unhealthyThreshold,min:2,max:10,onChange:e=>this.targetGroupFieldChanged(s,"unhealthyThreshold",e)}))))),Mt.createElement("div",{className:"wizard-pod-row"},Mt.createElement("div",{className:"wizard-pod-row-title"},"Attributes"),"lambda"!==n.targetType?Mt.createElement("div",{className:"wizard-pod-row-contents"},Mt.createElement("div",{className:"wizard-pod-row-data"},Mt.createElement("span",{className:"wizard-pod-content"},Mt.createElement("label",null,"Dereg. Delay"),Mt.createElement(t,{id:"aws.targetGroup.attributes.deregistrationDelay"})," ",Mt.createElement("input",{className:"form-control input-sm inline-number",type:"text",value:n.attributes.deregistrationDelay,onChange:e=>this.targetGroupFieldChanged(s,"attributes.deregistrationDelay",e.target.value)})),Mt.createElement("span",{className:"wizard-pod-content"},Mt.createElement("label",{className:"checkbox-inline",style:{paddingTop:"2px"}},Mt.createElement("input",{type:"checkbox",checked:n.attributes.stickinessEnabled,onChange:e=>this.targetGroupFieldChanged(s,"attributes.stickinessEnabled",e.target.checked)})," ",Mt.createElement("label",null,"Sticky"),Mt.createElement(t,{id:"aws.targetGroup.attributes.stickinessEnabled"}))),n.attributes.stickinessEnabled&&Mt.createElement("span",{className:"wizard-pod-content"},Mt.createElement("label",null,"Duration "),Mt.createElement(t,{id:"aws.targetGroup.attributes.stickinessDuration"})," ",Mt.createElement("input",{className:"form-control input-sm inline-number",value:n.attributes.stickinessDuration,onChange:e=>this.targetGroupFieldChanged(s,"attributes.stickinessDuration",e.target.value),type:"text"})))):Mt.createElement("span",{className:"wizard-pod-content"},Mt.createElement("label",{className:"checkbox-inline",style:{paddingTop:"2px"}},Mt.createElement("input",{type:"checkbox",checked:n.attributes.multiValueHeadersEnabled,onChange:e=>this.targetGroupFieldChanged(s,"attributes.multiValueHeadersEnabled",e.target.checked)})," ",Mt.createElement("label",null,"Enable Multi Value Headers"))))))}),Mt.createElement("table",{className:"table table-condensed packed"},Mt.createElement("tbody",null,Mt.createElement("tr",null,Mt.createElement("td",null,Mt.createElement("button",{type:"button",className:"add-new col-md-12",onClick:this.addTargetGroup},Mt.createElement("span",{className:"glyphicon glyphicon-plus-sign"})," Add new target group"))))))))}};class Jr extends Mt.Component{constructor(e){super(e),this.handleUsePreferredZonesChanged=e=>{const t="true"===e.target.value;this.setState({usePreferredZones:t}),t&&this.setDefaultZones(t,this.props)},this.handleSelectedZonesChanged=e=>{this.props.onChange([...e])},this.state={defaultZones:[],usePreferredZones:e.usePreferredZones||!e.selectedZones||0===e.selectedZones.length},this.setDefaultZones(this.state.usePreferredZones,e)}componentWillReceiveProps(e){e.region===this.props.region&&e.credentials===this.props.credentials||this.setDefaultZones(this.state.usePreferredZones,e)}setDefaultZones(e,t){const{credentials:a,region:n}=t;i.getAvailabilityZonesForAccountAndRegion("aws",a,n).then(a=>{this.setState({defaultZones:a}),e&&a&&t.onChange(a.slice())})}render(){const{region:e,allZones:t,selectedZones:a}=this.props,{defaultZones:n,usePreferredZones:r}=this.state;return Mt.createElement("div",{className:"form-group"},Mt.createElement("div",{className:"col-md-3 sm-label-right"},"Availability Zones"),e&&Mt.createElement("div",{className:"col-md-7"},Mt.createElement("p",{className:"form-control-static"},"Automatic Availability Zone Balancing:"),Mt.createElement("select",{className:"form-control input-sm",value:r?"true":"false",onChange:this.handleUsePreferredZonesChanged},Mt.createElement("option",{value:"true"},"Enabled"),Mt.createElement("option",{value:"false"},"Manual")),Mt.createElement("br",null),r&&Mt.createElement("div",null,Mt.createElement("p",{className:"form-control-static"},"Server group will be available in:"),Mt.createElement("ul",null,n.map(e=>Mt.createElement("li",{key:e},e)))),!r&&Mt.createElement("div",null,"Restrict server group instances to:",Mt.createElement(Ce,{stringOptions:t,value:a,onChange:e=>this.handleSelectedZonesChanged(e.target.value)}))))}}function Qr(e){const{application:t,credentials:a,defaultSubnetTypes:n,hideClassic:r,name:l,onChange:i,readOnly:s,region:o,subnets:c,value:d,...m}=e,u=Ne(c),p=Mt.useMemo(()=>{const e=r||function(e,t,a){const{classicLaunchLockout:n,classicLaunchAllowlist:r}=hn,l=Number(ta(a,"attributes.createTs",0))>(n||0),i=!!r&&r.some(a=>a.region===e&&a.credentials===t);return l||!i}(o,a,t);return function(e,t){const a=(e,t)=>e.label.localeCompare(t.label),n=e=>({value:e.purpose,label:e.label}),r=t?[]:[{label:"None (EC2 Classic)",value:""}],l=e.filter(e=>!e.deprecated).sort(a).map(n),i=e.filter(e=>e.deprecated).sort(a).map(n);return i.length&&i.unshift({label:"-----------",value:"",disabled:!0}),r.concat(l).concat(i)}(c,e)},[r,o,a,t,u]),h=function(e,t=[]){for(const a of t){const t=e.find(e=>a===e.purpose);if(t)return t}}(c,n)||c[0],g=we().current;return Mt.useEffect(()=>{const e=p.some(e=>e.value===d);h&&(!e||"FIRST_RENDER"!==g)&&i(Se({name:l,value:h.purpose}))},[p]),s?Mt.createElement("p",{className:"form-control-static"},e.value||"None (EC2 Classic)"):Mt.createElement(pe,{options:p,value:d,onChange:i,...m})}class el extends zt.Component{constructor(){super(...arguments),this.handleChange=e=>{const{component:t,onChange:a,field:n}=this.props;t[n]=e.target.value,a()}}render(){var e,a,n;const{component:r,defaultSubnetTypes:l,field:i,helpKey:s,labelColumns:o,recommendedSubnetTypes:c,region:d,showSubnetWarning:m,...u}=this.props,p=r[i],h=null!=(a=null!=c?c:null==(e=hn.serverGroups)?void 0:e.recommendedSubnets)?a:[],g=null!=l?l:[hn.defaults.subnetType],v=h.some(e=>p&&p.includes(e)),f=null==(n=hn.serverGroups)?void 0:n.subnetWarning;return zt.createElement("div",{className:"form-group"},zt.createElement("div",{className:`col-md-${o} sm-label-right`},"VPC Subnet ",zt.createElement(t,{id:s})),zt.createElement("div",{className:"col-md-7"},d?zt.createElement(Qr,{...u,inputClassName:"form-control input-sm",credentials:r.credentials,defaultSubnetTypes:g,region:d,value:p,onChange:this.handleChange}):"(Select an account)",m&&!v&&Boolean(f)&&zt.createElement("div",{className:"alert alert-warning sp-margin-s-top horizontal center"},zt.createElement("i",{className:"fa fa-exclamation-triangle sp-margin-s-top"}),zt.createElement("div",{className:"sp-margin-s-left"},zt.createElement(ke,{message:f,style:{display:"inline-block",marginLeft:"2px"}})))))}}class tl extends Mt.Component{constructor(){super(...arguments),this.state={accounts:void 0,availabilityZones:[],existingLoadBalancerNames:[],hideInternalFlag:!1,internalFlagToggled:!1,regions:[],subnets:[]},this.props$=new Ca,this.destroy$=new Ca,this.internalFlagChanged=e=>{this.setState({internalFlagToggled:!0}),this.props.formik.handleChange(e)},this.handleSubnetUpdated=e=>{this.props.formik.setFieldValue("subnetType",e)},this.accountUpdated=e=>{this.props.formik.setFieldValue("credentials",e)},this.regionUpdated=e=>{this.props.formik.setFieldValue("region",e)},this.stackChanged=e=>{this.props.formik.setFieldValue("stack",e.target.value)},this.detailChanged=e=>{this.props.formik.setFieldValue("detail",e.target.value)},this.handleAvailabilityZonesChanged=e=>{this.props.formik.setFieldValue("regionZones",e)}}validate(e){const t={};return this.state.existingLoadBalancerNames.includes(e.name)&&(t.name=`There is already a load balancer in ${e.credentials}:${e.region} with that name.`),e.name&&e.name.length>32&&(t.name="Load balancer names cannot exceed 32 characters in length"),e.stack&&!e.stack.match(/^[a-zA-Z0-9]*$/)&&(t.stack="Stack can only contain letters and numbers."),e.detail&&!e.detail.match(/^[a-zA-Z0-9-]*$/)&&(t.detail="Detail can only contain letters, numbers, and dashes."),t}buildName(){const{values:e}=this.props.formik;if(jt(e.moniker)){const t=le.parseLoadBalancerName(e.name);e.stack=t.stack,e.detail=t.freeFormDetails}else e.stack=e.moniker.stack,e.detail=e.moniker.detail;delete e.name}shouldHideInternalFlag(){return!!(hn&&hn.loadBalancers&&hn.loadBalancers.inferInternalFlagFromSubnet)&&(delete this.props.formik.values.isInternal,!0)}componentDidMount(){this.setState({hideInternalFlag:this.shouldHideInternalFlag()}),this.props.loadBalancer&&this.props.isNew&&this.buildName();const e=this.props$.pipe(Ia(e=>e.formik.values)),t=this.props$.pipe(Ia(e=>e.app.name),Pa()),a={account$:e.pipe(Ia(e=>e.credentials),Pa()),region$:e.pipe(Ia(e=>e.region),Pa()),subnetPurpose$:e.pipe(Ia(e=>e.subnetType),Pa()),stack$:e.pipe(Ia(e=>e.stack),Pa()),detail$:e.pipe(Ia(e=>e.detail),Pa())},n=Na(i.listAccounts("aws")).pipe(Aa(1)),r=wa([a.account$,n]).pipe(Ga(([e,t])=>i.getRegionsForAccount(e)),Aa(1)),l=this.props.app.getDataSource("loadBalancers").data$,s=wa([l,a.account$,a.region$]).pipe(Ia(([e,t,a])=>e.filter(e=>e.account===t&&e.region===a).map(e=>e.name)),Aa(1)),o=wa([a.account$,a.region$]).pipe(Ga(([e,t])=>this.getAvailableSubnets(e,t)),Ia(e=>this.makeSubnetOptions(e)),Aa(1)),c=wa([o,a.subnetPurpose$]).pipe(Ia(([e,t])=>e&&e.find(e=>e.purpose===t))),d=c.pipe(Ia(e=>e?aa(e.availabilityZones).sort():[])),m=a.region$.pipe(xa(r),Ia(([e,t])=>t.find(t=>t.name===e)),Ia(e=>e?e.availabilityZones:[])),u=wa([t,a.stack$,a.detail$]).pipe(Ia(([e,t,a])=>({app:e,stack:t,detail:a,cluster:le.getClusterName(e,t,a)})));r.pipe(xa(a.region$),Da(this.destroy$)).subscribe(([e,t])=>{e.some(e=>e.name===t)||this.props.formik.setFieldValue("region",e[0]&&e[0].name)}),m.pipe(Da(this.destroy$)).subscribe(e=>{this.props.formik.setFieldValue("regionZones",e)}),c.pipe(Da(this.destroy$)).subscribe(e=>{this.props.formik.setFieldValue("vpcId",e&&e.vpcIds[0]),this.props.formik.setFieldValue("subnetType",e&&e.purpose),!this.state.hideInternalFlag&&!this.state.internalFlagToggled&&e&&e.purpose&&this.props.formik.setFieldValue("isInternal",e.purpose.includes("internal"))}),u.pipe(Da(this.destroy$)).subscribe(e=>{this.props.formik.setFieldValue("moniker",e),this.props.formik.setFieldValue("name",e.cluster)}),wa([n,r,d,s,o]).pipe(Da(this.destroy$)).subscribe(([e,t,a,n,r])=>this.setState({accounts:e,regions:t,availabilityZones:a,existingLoadBalancerNames:n,subnets:r}))}componentDidUpdate(){this.props$.next(this.props)}componentWillUnmount(){this.destroy$.next()}getAvailableSubnets(e,t){return p.listSubnets().then(a=>Xt(a).filter({account:e,region:t}).reject({target:"ec2"}).reject({purpose:null}).value())}makeSubnetOptions(e){const t=ea(e,e=>e.purpose);return Object.keys(t).map(e=>t[e]).map(e=>(e=>{const{purpose:t,label:a,deprecated:n}=e[0];return{purpose:t,label:a,deprecated:n,vpcIds:aa(e.map(e=>e.vpcId)),availabilityZones:aa(e.map(e=>e.availabilityZone))}})(e))}render(){const{app:e}=this.props,{errors:a,values:n}=this.props.formik,{accounts:r,availabilityZones:l,hideInternalFlag:i,regions:s,subnets:o}=this.state,c=ba({"col-md-12":!0,well:!0,"alert-danger":!!a.name,"alert-info":!a.name});return Mt.createElement("div",{className:"container-fluid form-horizontal"},!r&&Mt.createElement("div",{style:{height:"200px"}},Mt.createElement(ne,{size:"medium"})),r&&Mt.createElement("div",{className:"modal-body"},Mt.createElement("div",{className:"form-group"},Mt.createElement("div",{className:c},Mt.createElement("strong",null,"Your load balancer will be named: "),Mt.createElement("span",null,n.name),Mt.createElement(t,{id:"aws.loadBalancer.name"}),Mt.createElement(en,{type:"text",style:{display:"none"},className:"form-control input-sm no-spel",name:"name"}),a.name&&Mt.createElement(ge,{type:"error",message:a.name}))),Mt.createElement("div",{className:"form-group"},Mt.createElement("div",{className:"col-md-3 sm-label-right"},"Account"),Mt.createElement("div",{className:"col-md-7"},Mt.createElement(Te,{value:n.credentials,onChange:e=>this.accountUpdated(e.target.value),accounts:r,provider:"aws"}))),Mt.createElement(Ie,{labelColumns:3,component:n,field:"region",account:n.credentials,onChange:this.regionUpdated,regions:s}),Mt.createElement("div",{className:"form-group"},Mt.createElement("div",{className:"col-md-3 sm-label-right"},"Stack ",Mt.createElement(t,{id:"aws.loadBalancer.stack"})),Mt.createElement("div",{className:"col-md-3"},Mt.createElement("input",{type:"text",className:"form-control input-sm no-spel "+(a.stack?"invalid":""),value:n.stack,name:"stack",onChange:this.stackChanged})),Mt.createElement("div",{className:"col-md-6 form-inline"},Mt.createElement("label",{className:"sm-label-right"},Mt.createElement("span",null,"Detail ",Mt.createElement(t,{id:"aws.loadBalancer.detail"})," ")),Mt.createElement("input",{type:"text",className:"form-control input-sm no-spel "+(a.detail?"invalid":""),value:n.detail,name:"detail",onChange:this.detailChanged})),a.stack&&Mt.createElement("div",{className:"col-md-7 col-md-offset-3"},Mt.createElement(ge,{type:"error",message:a.stack})),a.detail&&Mt.createElement("div",{className:"col-md-7 col-md-offset-3"},Mt.createElement(ge,{type:"error",message:a.detail}))),Mt.createElement(Jr,{credentials:n.credentials,region:n.region,onChange:this.handleAvailabilityZonesChanged,selectedZones:n.regionZones,allZones:l}),Mt.createElement(el,{labelColumns:3,helpKey:"aws.loadBalancer.subnet",component:n,field:"subnetType",region:n.region,subnets:o,application:e,onChange:()=>this.handleSubnetUpdated(n.subnetType)}),n.vpcId&&!i&&Mt.createElement("div",{className:"form-group"},Mt.createElement("div",{className:"col-md-3 sm-label-right"},Mt.createElement("b",null,"Internal")," ",Mt.createElement(t,{id:"aws.loadBalancer.internal"})),Mt.createElement("div",{className:"col-md-7 checkbox"},Mt.createElement("label",null,Mt.createElement(en,{name:"isInternal",onChange:this.internalFlagChanged,render:({field:{value:e,...t}})=>Mt.createElement("input",{type:"checkbox",...t,checked:!!e})}),"Create an internal load balancer")))))}}class al extends Mt.Component{constructor(e){super(e),this.destroy$=new Ca,this.props$=new Ca,this.refresh$=new Ca,this.getRefreshTime=()=>{var e;return(null==(e=Pe.get("securityGroups"))?void 0:e.getStats().ageMax)||0},this.clearRemoved=()=>{this.setState({removed:[]},()=>this.props.formik.validateForm())},this.handleSecurityGroupsChanged=e=>{this.props.formik.setFieldValue("securityGroups",e.map(e=>e.value))};const t=ta(hn,"defaultSecurityGroups",[]);this.state={availableSecurityGroups:[],defaultSecurityGroups:t,loaded:!1,refreshing:!1,removed:[],refreshTime:this.getRefreshTime()}}validate(){const{removed:e}=this.state;if(e&&e.length){return{securityGroupsRemoved:`${R.get("Firewalls")} removed: ${e.join(", ")}`}}return{}}updateRemovedSecurityGroups(e,t){const{isNew:a}=this.props,{defaultSecurityGroups:n,removed:r}=this.state,l=e=>t.find(t=>t.name===e||t.id===e),[i,s]=sa((()=>{const t=e.concat(r).sort();return aa((a?n:[]).concat(t))})(),e=>!!l(e)),o=i.map(e=>l(e).name);_t(e,o)||this.props.formik.setFieldValue("securityGroups",o),this.setState({removed:s},()=>this.props.formik.validateForm())}onRefreshStart(){this.props.onLoadingChanged(!0),this.setState({refreshing:!0})}onRefreshComplete(){this.props.onLoadingChanged(!1);const e=this.getRefreshTime();this.setState({refreshing:!1,loaded:!0,refreshTime:e})}componentDidMount(){const e=this.refresh$.pipe(Ba(()=>this.onRefreshStart()),Ga(()=>this.context.services.cacheInitializer.refreshCache("securityGroups")),Fa(()=>this.context.services.securityGroupReader.getAllSecurityGroups()),Ba(()=>this.onRefreshComplete())),t=this.props$.pipe(Ia(e=>e.formik.values)),a=t.pipe(Ia(e=>e.vpcId),Pa());wa([a,e]).pipe(xa(t),Ia(([[e,t],a])=>{const n=t[a.credentials]||{};return(n.aws&&n.aws[a.region]||[]).filter(t=>e===t.vpcId).sort()})).pipe(xa(t),Da(this.destroy$)).subscribe(([e,t])=>{this.setState({availableSecurityGroups:e.map(e=>({label:`${e.name} (${e.id})`,value:e.name}))}),this.updateRemovedSecurityGroups(t.securityGroups,e)}),this.refresh$.next()}componentDidUpdate(){this.props$.next(this.props)}componentWillUnmount(){this.destroy$.next(),this.destroy$.complete()}render(){const{securityGroups:e}=this.props.formik.values,{availableSecurityGroups:t,loaded:a,refreshing:n,removed:r,refreshTime:l}=this.state;return Mt.createElement("div",{className:"container-fluid form-horizontal"},Mt.createElement("div",null,r.length>0&&Mt.createElement("div",{className:"form-group"},Mt.createElement("div",{className:"col-md-12"},Mt.createElement("div",{className:"alert alert-warning"},Mt.createElement("p",null,Mt.createElement("i",{className:"fa fa-exclamation-triangle"}),"The following ",R.get("firewalls")," could not be found in the selected account/region/VPC and were removed:"),Mt.createElement("ul",null,r.map(e=>Mt.createElement("li",{key:e},e))),Mt.createElement("p",{className:"text-right"},Mt.createElement("a",{className:"btn btn-sm btn-default dirty-flag-dismiss clickable",onClick:this.clearRemoved},"Okay"))))),Mt.createElement("div",{className:"form-group"},Mt.createElement("div",{className:"col-md-3 sm-label-right"},R.get("Firewalls")),Mt.createElement("div",{className:"col-md-9"},!a&&Mt.createElement("div",{style:{paddingTop:"13px"}},Mt.createElement(ne,{size:"small"})),a&&Mt.createElement(tn,{multi:!0,value:e,options:t,onChange:this.handleSecurityGroupsChanged,clearable:!1}))),Mt.createElement("div",{className:"form-group small",style:{marginTop:"20px"}},Mt.createElement("div",{className:"col-md-9 col-md-offset-3"},Mt.createElement("p",null,n&&Mt.createElement("span",null,Mt.createElement("span",{className:"fa fa-sync-alt fa-spin"})," "),R.get("Firewalls"),!n&&Mt.createElement("span",null," last refreshed ",B(l)),n&&Mt.createElement("span",null," refreshing...")),Mt.createElement("p",null,"If you're not finding a ",R.get("firewall")," that was recently added,"," ",Mt.createElement("a",{className:"clickable",onClick:()=>this.refresh$.next()},"click here")," ","to refresh the list.")))))}}al.contextType=g;Cr(".wizard-pod {\n padding-bottom: 15px;\n}\n.wizard-pod > div {\n border: 1px solid var(--color-cirrus);\n}\n.wizard-pod .wizard-pod-row {\n display: flex;\n padding: 5px;\n border-bottom: 1px solid var(--color-cirrus);\n}\n.wizard-pod .wizard-pod-row label {\n font-weight: 400;\n padding-right: 5px;\n}\n.wizard-pod .wizard-pod-row.header {\n background-color: var(--color-cirrus);\n}\n.wizard-pod .wizard-pod-row.header .glyphicon-trash {\n padding: 0 8px;\n}\n.wizard-pod .wizard-pod-row.header .wizard-pod-row-contents .wizard-pod-row-title {\n font-weight: 800;\n}\n.wizard-pod .wizard-pod-row.header .wizard-pod-row-contents .wizard-pod-row-data {\n flex-wrap: nowrap;\n padding: 0;\n}\n.wizard-pod .wizard-pod-row.header .wizard-pod-row-contents .wizard-pod-row-data label {\n font-weight: 600;\n}\n.wizard-pod .wizard-pod-row.header .wizard-pod-row-contents .wizard-pod-row-data .wizard-pod-content {\n padding: 0 10px 0 0;\n}\n.wizard-pod .wizard-pod-row .wizard-pod-row-title {\n display: flex;\n align-items: center;\n max-height: 37px;\n flex-basis: 120px;\n flex-direction: row-reverse;\n font-weight: 600;\n text-align: right;\n margin-right: 10px;\n width: 100px;\n}\n.wizard-pod .wizard-pod-row .wizard-pod-row-contents {\n display: flex;\n width: 100%;\n align-items: baseline;\n flex-wrap: wrap;\n}\n.wizard-pod .wizard-pod-row .wizard-pod-row-contents .wizard-pod-row-data {\n display: flex;\n width: 100%;\n align-items: baseline;\n flex-wrap: wrap;\n padding: 5px 0;\n}\n.wizard-pod .wizard-pod-row .wizard-pod-row-contents .wizard-pod-row-data.spread {\n justify-content: space-between;\n}\n.wizard-pod .wizard-pod-row .wizard-pod-row-contents .wizard-pod-row-data .wizard-pod-content {\n padding: 0 10px 5px 0;\n display: flex;\n align-items: center;\n}\n.wizard-pod .wizard-pod-row .wizard-pod-row-contents .wizard-pod-row-data .group-name-prefix {\n flex-grow: 2;\n white-space: nowrap;\n}\n.wizard-pod .wizard-pod-row .wizard-pod-row-contents .wizard-pod-row-data .rules-table thead th {\n font-weight: 600;\n}\n.wizard-pod .wizard-pod-row .wizard-pod-row-contents .wizard-pod-row-data .rules-table td {\n vertical-align: middle;\n}\n.wizard-pod .wizard-pod-row .wizard-pod-row-contents .wizard-pod-row-data .rules-table > tbody > tr:first-child > td {\n border-top: none;\n}\n.wizard-pod .wizard-pod-row .wizard-pod-row-contents .wizard-pod-row-errors {\n display: flex;\n width: 100%;\n}\n.wizard-pod .listener-rule .handle {\n cursor: move;\n width: 10px;\n padding: 0;\n}\n.wizard-pod .listener-rule .listener-rule-condition {\n display: flex;\n}\n.wizard-pod .listener-rule .listener-rule-condition label {\n white-space: nowrap;\n}\n.wizard-pod .listener-rule .listener-rule-condition .help-field > span {\n top: 4px;\n padding: 0 2px;\n}\n.wizard-pod .listener-rule .listener-rule-condition .remove-condition {\n min-width: 15px;\n padding-top: 4px;\n}\n.wizard-pod .listener-rule .add-new-container {\n display: flex;\n}\n.wizard-pod .listener-rule .add-new-container .add-new {\n padding: 2px;\n margin-bottom: 0;\n}\n.rule-sortable-helper {\n z-index: 99999;\n width: 500px;\n}\n");class nl extends Mt.Component{constructor(e){super(e),this._isUnmounted=!1,this.certificateTypes=ta(hn,"loadBalancers.certificateTypes",["iam","acm"]),this.submit=e=>{const{app:t,forPipelineConfig:a,closeModal:n}=this.props,{isNew:r}=this.state,l=r?"Create":"Update",i=Ht(e);if(i.listeners.forEach(e=>{e.defaultActions.forEach(e=>{e.authenticateOidcConfig&&(e.authenticateOidcActionConfig=e.authenticateOidcConfig,delete e.authenticateOidcConfig)}),e.rules.forEach(e=>e.actions.forEach(e=>{e.authenticateOidcConfig&&(e.authenticateOidcActionConfig=e.authenticateOidcConfig,delete e.authenticateOidcConfig)}))}),a)this.formatListeners(i).then(()=>{this.setIpAddressType(i),n&&n(i)});else{const e=new v({application:t,title:(r?"Creating":"Updating")+" your load balancer",onDismiss:()=>this.props.dismissModal(),onTaskComplete:()=>this.onTaskComplete(i)});e.submit(()=>this.formatListeners(i).then(()=>(this.formatCommand(i),Ae.upsertLoadBalancer(i,t,l)))),this.setState({taskMonitor:e})}};const t=e.command?e.command:e.loadBalancer?Ar.convertApplicationLoadBalancerForEditing(e.loadBalancer):Ar.constructNewApplicationLoadBalancerTemplate(e.app);this.state={includeSecurityGroups:!!t.vpcId,isNew:!e.loadBalancer,loadBalancerCommand:t,taskMonitor:null}}static show(e,t){return E.show(rl,e,{dialogClassName:"wizard-modal modal-lg"},t)}certificateIdAsARN(e,t,a,n){if(t&&(0!==t.indexOf("arn:aws:iam::")||0!==t.indexOf("arn:aws:acm:"))){if("iam"===n)return`arn:aws:iam::${e}:server-certificate/${t}`;if("acm"===n)return`arn:aws:acm:${a}:${e}:certificate/${t}`}return t}formatListeners(e){return i.getAccountDetails(e.credentials).then(t=>{e.listeners.forEach(a=>{"HTTP"===a.protocol&&(delete a.sslPolicy,a.certificates=[]),a.certificates.forEach(a=>{a.certificateArn=this.certificateIdAsARN(t.accountId,a.name,e.region,a.type||this.certificateTypes[0])})})})}setAvailabilityZones(e){const t={};t[e.region]=e.regionZones||[],e.availabilityZones=t}addAppName(e){return`${this.props.app.name}-${e}`}manageTargetGroupNames(e){(e.targetGroups||[]).forEach(e=>{e.name=this.addAppName(e.name)}),(e.listeners||[]).forEach(e=>{e.defaultActions.forEach(e=>{e.targetGroupName&&(e.targetGroupName=this.addAppName(e.targetGroupName))}),(e.rules||[]).forEach(e=>{e.actions.forEach(e=>{e.targetGroupName&&(e.targetGroupName=this.addAppName(e.targetGroupName))})})})}manageRules(e){e.listeners.forEach(e=>{e.rules.forEach((e,t)=>{e.priority=t+1,e.conditions=e.conditions.filter(e=>"http-request-method"!==e.field?e.values[0].length>0:e.values.length>0)})})}setIpAddressType(e){e.ipAddressType=e.dualstack?"dualstack":"ipv4",delete e.dualstack}formatCommand(e){this.setAvailabilityZones(e),this.manageTargetGroupNames(e),this.manageRules(e),this.setIpAddressType(e)}onApplicationRefresh(e){var t;if(null==(t=this.refreshUnsubscribe)||t.call(this),this.refreshUnsubscribe=void 0,this._isUnmounted)return;this.props.dismissModal(),this.setState({taskMonitor:void 0});const a={name:e.name,accountId:e.credentials,region:e.region,vpcId:e.vpcId,provider:"aws"};this.props.stateService.includes("**.loadBalancerDetails")?this.props.stateService.go("^.loadBalancerDetails",a):this.props.stateService.go(".loadBalancerDetails",a)}componentWillUnmount(){var e;this._isUnmounted=!0,null==(e=this.refreshUnsubscribe)||e.call(this),this.refreshUnsubscribe=void 0}onTaskComplete(e){var t;null==(t=this.refreshUnsubscribe)||t.call(this),this.refreshUnsubscribe=void 0,this.refreshUnsubscribe=this.props.app.loadBalancers.onNextRefresh(()=>this.onApplicationRefresh(e)),this.props.app.loadBalancers.refresh()}render(){const{app:e,dismissModal:t,forPipelineConfig:a,loadBalancer:n}=this.props,{isNew:r,loadBalancerCommand:l,taskMonitor:i}=this.state;let s=a?"Configure Application Load Balancer":"Create New Application Load Balancer";return r||(s=`Edit ${l.name}: ${l.region}: ${l.credentials}`),Mt.createElement(y,{heading:s,initialValues:l,taskMonitor:i,dismissModal:t,closeModal:this.submit,submitButtonLabel:a?r?"Add":"Done":r?"Create":"Update",render:({formik:t,nextIdx:l,wizard:i})=>{const s=r||a,o=!!t.values.vpcId;return Mt.createElement(Mt.Fragment,null,s&&Mt.createElement(b,{label:"Location",wizard:i,order:l(),render:({innerRef:l})=>Mt.createElement(tl,{app:e,forPipelineConfig:a,formik:t,isNew:r,loadBalancer:n,ref:l})}),o&&Mt.createElement(b,{label:R.get("Firewalls"),wizard:i,order:l(),render:({innerRef:e,onLoadingChanged:a})=>Mt.createElement(al,{formik:t,isNew:r,onLoadingChanged:a,ref:e})}),Mt.createElement(b,{label:"Target Groups",wizard:i,order:l(),render:({innerRef:a})=>Mt.createElement(Xr,{ref:a,app:e,formik:t,isNew:r,loadBalancer:n})}),Mt.createElement(b,{label:"Listeners",wizard:i,order:l(),render:({innerRef:a})=>Mt.createElement(qr,{ref:a,app:e,formik:t})}),Mt.createElement(b,{label:"Advanced Settings",wizard:i,order:l(),render:({innerRef:e})=>Mt.createElement(zr,{ref:e})}))}})}}nl.defaultProps={closeModal:C,dismissModal:C};const rl=Object.assign(N(nl),{show:nl.show});Cr(".AmazonLoadBalancer-AdvancedSettings .StandardFieldLayout .sm-label-right {\n width: 180px;\n}\n");class ll extends Mt.Component{render(){const{values:e}=this.props.formik,{maxValue:a}=fe;return Mt.createElement("div",{className:"form-group AmazonLoadBalancer-AdvancedSettings"},Mt.createElement(r,{name:"healthTimeout",label:"Timeout",required:!0,help:Mt.createElement(t,{id:"loadBalancer.advancedSettings.healthTimeout"}),input:t=>Mt.createElement(d,{...t,min:0,max:e.healthInterval}),validate:a(e.healthInterval,"Timeout must be less than the health interval.")}),Mt.createElement(r,{name:"healthInterval",label:"Interval",required:!0,help:Mt.createElement(t,{id:"loadBalancer.advancedSettings.healthInterval"}),input:e=>Mt.createElement(d,{...e,min:0})}),Mt.createElement(r,{name:"healthyThreshold",label:"Healthy Threshold",required:!0,help:Mt.createElement(t,{id:"loadBalancer.advancedSettings.healthyThreshold"}),input:e=>Mt.createElement(d,{...e,min:0})}),Mt.createElement(r,{name:"unhealthyThreshold",label:"Unhealthy Threshold",required:!0,help:Mt.createElement(t,{id:"loadBalancer.advancedSettings.unhealthyThreshold"}),input:e=>Mt.createElement(d,{...e,min:0})}),Mt.createElement(r,{name:"idleTimeout",label:"Idle Timeout",required:!0,help:Mt.createElement(t,{id:"loadBalancer.advancedSettings.idleTimeout"}),input:e=>Mt.createElement(d,{...e,min:0})}),Mt.createElement("div",{className:"col-md-12"},Mt.createElement("p",null,"Additional configuration options (cross-zone load balancing, session stickiness, access logs) are available via the AWS console.")))}}class il extends Mt.Component{constructor(){super(...arguments),this.healthCheckPathChanged=e=>{e&&0!==e.indexOf("/")&&this.props.formik.setFieldValue("healthCheckPath",`/${e}`)}}requiresHealthCheckPath(){const{values:e}=this.props.formik;return e.healthCheckProtocol&&0===e.healthCheckProtocol.indexOf("HTTP")}render(){return Mt.createElement("div",{className:"container-fluid form-horizontal"},Mt.createElement("div",{className:"col-md-4 sm-label-right"},"Ping"),Mt.createElement("div",{className:"col-md-8"},Mt.createElement("table",{className:"table table-condensed packed"},Mt.createElement("thead",null,Mt.createElement("tr",null,Mt.createElement("th",{style:{width:"35%"}},"Protocol"),Mt.createElement("th",{style:{width:"30%"}},"Port"),Mt.createElement("th",null,this.requiresHealthCheckPath()&&Mt.createElement("span",null,"Path")))),Mt.createElement("tbody",null,Mt.createElement("tr",null,Mt.createElement("td",null,Mt.createElement(r,{name:"healthCheckProtocol",required:!0,input:e=>Mt.createElement(pe,{...e,options:["HTTP","HTTPS","SSL","TCP"]})})),Mt.createElement("td",null,Mt.createElement(r,{name:"healthCheckPort",required:!0,input:e=>Mt.createElement(d,{...e,min:1,max:65534})})),Mt.createElement("td",null,this.requiresHealthCheckPath()&&Mt.createElement(r,{name:"healthCheckPath",input:e=>Mt.createElement(l,{...e}),required:!0,onChange:this.healthCheckPathChanged})))))))}}Cr(".create-classic-load-balancer-wizard-listeners .Select-control {\n height: 30px;\n}\n.create-classic-load-balancer-wizard-listeners .Select-control .Select-placeholder {\n line-height: 26px;\n}\n.create-classic-load-balancer-wizard-listeners .Select-control .Select-value {\n line-height: 26px !important;\n}\n.create-classic-load-balancer-wizard-listeners .Select-control .Select-value .Select-value-label {\n line-height: 26px;\n}\n.create-classic-load-balancer-wizard-listeners .Select-control .Select-input {\n height: 26px;\n}\n");class sl extends Mt.Component{constructor(){super(...arguments),this.protocols=["HTTP","HTTPS","TCP","SSL"],this.secureProtocols=["HTTPS","SSL"],this.certificateTypes=ta(hn,"loadBalancers.certificateTypes",["iam","acm"]),this.state={certificates:[]},this.addListener=()=>{this.props.formik.values.listeners.push({internalProtocol:"HTTP",externalProtocol:"HTTP",externalPort:80,internalPort:80}),this.updateListeners()}}componentDidMount(){this.loadCertificates()}loadCertificates(){Ur.listCertificates().then(e=>{this.setState({certificates:e})})}updateListeners(){const{values:e,setFieldValue:t}=this.props.formik;t("listeners",e.listeners)}showCertificateSelect(e){return"iam"===e.sslCertificateType&&this.state.certificates&&Object.keys(this.state.certificates).length>0}listenerExternalProtocolChanged(e,t){e.externalProtocol=t,this.secureProtocols.includes(t)&&(e.externalPort=443,this.certificateTypes.length>=1&&(e.sslCertificateType=this.certificateTypes[0])),"HTTP"===t&&(e.externalPort=80),this.updateListeners()}listenerInternalProtocolChanged(e,t){e.internalProtocol=t,this.updateListeners()}listenerExternalPortChanged(e,t){e.externalPort=Number.parseInt(t,10),this.updateListeners()}listenerInternalPortChanged(e,t){e.internalPort=Number.parseInt(t,10),this.updateListeners()}listenerCertificateTypeChanged(e,t){e.sslCertificateType=t,this.updateListeners()}handleListenerCertificateChanged(e,t){e.sslCertificateName=t,this.updateListeners()}removeListener(e){this.props.formik.values.listeners.splice(e,1),this.updateListeners()}renderCertificateSelector(e){if(this.secureProtocols.includes(e.externalProtocol)){if(this.showCertificateSelect(e)){const{values:t}=this.props.formik,{certificates:a}=this.state;return Mt.createElement(Fr,{certificates:a,accountName:t.credentials,currentValue:e.sslCertificateName,app:this.props.app,onCertificateSelect:t=>this.handleListenerCertificateChanged(e,t)})}return Mt.createElement("input",{className:"input-sm",style:{width:"100%",marginLeft:"10px"},required:!0,onChange:t=>this.handleListenerCertificateChanged(e,t.target.value),value:e.sslCertificateName})}return null}render(){const{values:e}=this.props.formik;return Mt.createElement("div",{className:"container-fluid form-horizontal create-classic-load-balancer-wizard-listeners"},Mt.createElement("div",{className:"form-group"},Mt.createElement("div",{className:"col-md-12"},Mt.createElement("table",{className:"table table-condensed packed"},Mt.createElement("thead",null,Mt.createElement("tr",null,Mt.createElement("th",null,"External Protocol"),Mt.createElement("th",null,"External Port"),Mt.createElement("th",null),Mt.createElement("th",null,"Internal Protocol"),Mt.createElement("th",null,"Internal Port"),Mt.createElement("th",null))),Mt.createElement("tbody",null,e.listeners.map((e,t)=>Mt.createElement(Mt.Fragment,{key:t},Mt.createElement("tr",{key:t+"-main"},Mt.createElement("td",null,Mt.createElement("select",{className:"form-control input-sm",value:e.externalProtocol,onChange:t=>this.listenerExternalProtocolChanged(e,t.target.value)},this.protocols.map(e=>Mt.createElement("option",{key:e},e)))),Mt.createElement("td",null,Mt.createElement("input",{className:"form-control input-sm",type:"number",min:"0",value:e.externalPort,onChange:t=>this.listenerExternalPortChanged(e,t.target.value),required:!0})),Mt.createElement("td",{className:"small",style:{paddingTop:"10px"}},"→"),Mt.createElement("td",null,Mt.createElement("select",{className:"form-control input-sm",value:e.internalProtocol,onChange:t=>this.listenerInternalProtocolChanged(e,t.target.value)},this.protocols.map(e=>Mt.createElement("option",{key:e},e)))),Mt.createElement("td",null,Mt.createElement("input",{className:"form-control input-sm",type:"number",min:"0",value:e.internalPort,onChange:t=>this.listenerInternalPortChanged(e,t.target.value),required:!0})),Mt.createElement("td",null,Mt.createElement("a",{className:"sm-label clickable",onClick:()=>this.removeListener(t)},Mt.createElement("span",{className:"glyphicon glyphicon-trash"})))),this.secureProtocols.includes(e.externalProtocol)&&Mt.createElement("tr",{key:t+"-ssl"},Mt.createElement("td",{colSpan:5,style:{borderTopWidth:0}},Mt.createElement("div",{className:"horizontal space-between"},Mt.createElement("div",{className:"sm-label-right"},"Certificate"),this.certificateTypes.length>1&&Mt.createElement("select",{style:{width:"45px",marginLeft:"10px"},className:"form-control input-sm",value:e.sslCertificateType,onChange:t=>this.listenerCertificateTypeChanged(e,t.target.value)},this.certificateTypes.map(e=>Mt.createElement("option",{key:e},e))),this.renderCertificateSelector(e))))))),Mt.createElement("tfoot",null,Mt.createElement("tr",null,Mt.createElement("td",{colSpan:5},Mt.createElement("button",{className:"add-new col-md-12",onClick:this.addListener,type:"button"},Mt.createElement("span",{className:"glyphicon glyphicon-plus-sign"}),Mt.createElement("span",null," Add new port mapping")))))))))}}class ol extends Mt.Component{constructor(e){super(e),this._isUnmounted=!1,this.certificateTypes=ta(hn,"loadBalancers.certificateTypes",["iam","acm"]),this.submit=e=>{const{app:t,forPipelineConfig:a,closeModal:n}=this.props,{isNew:r}=this.state,l=r?"Create":"Update",i=Ht(e);if(a)this.formatListeners(i).then(()=>{n&&n(i)});else{const e=new v({application:t,title:(r?"Creating":"Updating")+" your load balancer",onDismiss:()=>this.props.dismissModal(),onTaskComplete:()=>this.onTaskComplete(i)});e.submit(()=>this.formatListeners(i).then(()=>(this.formatCommand(i),Ae.upsertLoadBalancer(i,t,l)))),this.setState({taskMonitor:e})}},this.validate=e=>({});const t=e.command?e.command:e.loadBalancer?Ar.convertClassicLoadBalancerForEditing(e.loadBalancer):Ar.constructNewClassicLoadBalancerTemplate(e.app);this.state={isNew:!e.loadBalancer,loadBalancerCommand:t,taskMonitor:null}}static show(e,t){return E.show(cl,e,{dialogClassName:"wizard-modal modal-lg"},t)}certificateIdAsARN(e,t,a,n){if(t&&(0!==t.indexOf("arn:aws:iam::")||0!==t.indexOf("arn:aws:acm:"))){if("iam"===n)return`arn:aws:iam::${e}:server-certificate/${t}`;if("acm"===n)return`arn:aws:acm:${a}:${e}:certificate/${t}`}return t}formatListeners(e){return i.getAccountDetails(e.credentials).then(t=>{e.listeners.forEach(a=>{a.sslCertificateId=this.certificateIdAsARN(t.accountId,a.sslCertificateName,e.region,a.sslCertificateType||this.certificateTypes[0])})})}clearSecurityGroupsIfNotInVpc(e){e.vpcId||e.subnetType||(e.securityGroups=null)}addHealthCheckToCommand(e){let t=null;const a=e.healthCheckProtocol||"";t=a.startsWith("HTTP")?`${a}:${e.healthCheckPort}${e.healthCheckPath}`:`${a}:${e.healthCheckPort}`,e.healthCheck=t}setAvailabilityZones(e){const t={};t[e.region]=e.regionZones||[],e.availabilityZones=t}formatCommand(e){this.setAvailabilityZones(e),this.clearSecurityGroupsIfNotInVpc(e),this.addHealthCheckToCommand(e)}onApplicationRefresh(e){var t;if(null==(t=this.refreshUnsubscribe)||t.call(this),this.refreshUnsubscribe=void 0,this._isUnmounted)return;this.props.dismissModal(),this.setState({taskMonitor:void 0});const a={name:e.name,accountId:e.credentials,region:e.region,vpcId:e.vpcId,provider:"aws"};this.props.stateService.includes("**.loadBalancerDetails")?this.props.stateService.go("^.loadBalancerDetails",a):this.props.stateService.go(".loadBalancerDetails",a)}componentWillUnmount(){var e;this._isUnmounted=!0,null==(e=this.refreshUnsubscribe)||e.call(this),this.refreshUnsubscribe=void 0}onTaskComplete(e){var t;null==(t=this.refreshUnsubscribe)||t.call(this),this.refreshUnsubscribe=void 0,this.refreshUnsubscribe=this.props.app.loadBalancers.onNextRefresh(()=>this.onApplicationRefresh(e)),this.props.app.loadBalancers.refresh()}render(){const{app:e,dismissModal:t,forPipelineConfig:a,loadBalancer:n}=this.props,{isNew:r,loadBalancerCommand:l,taskMonitor:i}=this.state,s=r||a;let o=a?"Configure Classic Load Balancer":"Create New Classic Load Balancer";return r||(o=`Edit ${l.name}: ${l.region}: ${l.credentials}`),Mt.createElement(y,{heading:o,initialValues:l,taskMonitor:i,dismissModal:t,closeModal:this.submit,submitButtonLabel:a?r?"Add":"Done":r?"Create":"Update",validate:this.validate,render:({formik:t,nextIdx:l,wizard:i})=>Mt.createElement(Mt.Fragment,null,s&&Mt.createElement(b,{label:"Location",wizard:i,order:l(),render:({innerRef:l})=>Mt.createElement(tl,{app:e,formik:t,isNew:r,forPipelineConfig:a,loadBalancer:n,ref:l})}),!!t.values.vpcId&&Mt.createElement(b,{label:R.get("Firewall"),wizard:i,order:l(),render:({innerRef:e,onLoadingChanged:a})=>Mt.createElement(al,{formik:t,isNew:r,onLoadingChanged:a,ref:e})}),Mt.createElement(b,{label:"Listeners",wizard:i,order:l(),render:({innerRef:a})=>Mt.createElement(sl,{ref:a,formik:t,app:e})}),Mt.createElement(b,{label:"Health Check",wizard:i,order:l(),render:({innerRef:e})=>Mt.createElement(il,{ref:e,formik:t})}),Mt.createElement(b,{label:"Advanced Settings",wizard:i,order:l(),render:({innerRef:e})=>Mt.createElement(ll,{ref:e,formik:t})}))})}}ol.defaultProps={closeModal:C,dismissModal:C};const cl=Object.assign(N(ol),{show:ol.show}),dl=Mt.forwardRef((e,a)=>Mt.createElement("div",{ref:a},Mt.createElement(r,{name:"deletionProtection",label:"Protection",help:Mt.createElement(t,{id:"loadBalancer.advancedSettings.deletionProtection"}),input:e=>Mt.createElement(o,{...e,text:"Enable deletion protection"})}),Mt.createElement(r,{name:"loadBalancingCrossZone",label:"Cross-Zone Load Balancing",help:Mt.createElement(t,{id:"loadBalancer.advancedSettings.loadBalancingCrossZone"}),input:e=>Mt.createElement(o,{...e,text:"Distribute traffic across zones"})}),e.showDualstack&&Mt.createElement(r,{name:"dualstack",label:"Dualstack",help:Mt.createElement(t,{id:"loadBalancer.advancedSettings.nlbIpAddressType"}),input:e=>Mt.createElement(o,{...e,text:"Assign Ipv4 and IPv6"})})));function ml({availableCertificates:e,certificates:t,formik:a,app:n,certificateTypes:r}){function l(){a.setFieldValue("listeners",a.values.listeners)}function i(e,t){e.name=t,l()}function s(e){return"iam"===e.type&&t&&Object.keys(t).length>0}const{values:o}=a;return Mt.createElement("div",{className:"wizard-pod-row"},Mt.createElement("div",{className:"wizard-pod-row-title"},"Certificate"),Mt.createElement("div",{className:"wizard-pod-row-contents"},e.map((e,a)=>Mt.createElement("div",{key:a,style:{width:"100%",display:"flex",flexDirection:"row"}},Mt.createElement("select",{className:"form-control input-sm inline-number",style:{width:"45px"},value:e.type,onChange:t=>function(e,t){e.type=t,l()}(e,t.target.value)},r.map(e=>Mt.createElement("option",{key:e},e))),s(e)&&Mt.createElement(Fr,{certificates:t,accountName:o.credentials,currentValue:e.name,app:n,onCertificateSelect:t=>i(e,t)}),!s(e)&&Mt.createElement("input",{className:"form-control input-sm no-spel",style:{display:"inline-block"},type:"text",value:e.name,onChange:t=>i(e,t.target.value),required:!0})))))}class ul extends Mt.Component{constructor(e){super(e),this.protocols=["TCP","UDP","TLS"],this.removedAuthActions=new Map,this.addListener=()=>{this.props.formik.values.listeners.push({certificates:[],protocol:"TCP",port:80,defaultActions:[{type:"forward",targetGroupName:""}],rules:[]}),this.updateListeners()},this.handleDefaultTargetChanged=(e,t)=>{e.defaultActions[0].targetGroupName=t,this.updateListeners()},this.state={certificates:[],certificateTypes:ta(hn,"loadBalancers.certificateTypes",["iam","acm"]),oidcConfigs:void 0}}getAllTargetGroupsFromListeners(e){const t=Wt(e.map(e=>e.defaultActions)),a=Wt(e.map(e=>e.rules));return t.push(...Wt(a.map(e=>e.actions))),aa(t.map(e=>e.targetGroupName))}validate(e){const t={},a=e.targetGroups.map(e=>e.name),n=this.getAllTargetGroupsFromListeners(e.listeners),r=na(a,n);1===r.length?t.listeners=`Target group ${r[0]} is unused.`:r.length>1&&(t.listeners=`Target groups ${r.join(", ")} are unused.`);const{listeners:l}=e;return Vt(l,"port").length<l.length&&(t.listenerPorts="Multiple listeners cannot use the same port."),t}updateListeners(){this.props.formik.setFieldValue("listeners",this.props.formik.values.listeners)}componentDidMount(){this.loadCertificates()}addListenerCertificate(e){e.certificates=e.certificates||[],e.certificates.push({certificateArn:void 0,type:"iam",name:void 0})}loadCertificates(){Ur.listCertificates().then(e=>{this.setState({certificates:e})})}listenerProtocolChanged(e,t){e.protocol=t,"TCP"===e.protocol?e.port=80:"UDP"===e.protocol?e.port=53:"TLS"===e.protocol&&(e.port=443,e.certificates&&0!==e.certificates.length||this.addListenerCertificate(e),this.reenableAuthActions(e)),this.updateListeners()}reenableAuthActions(e){const t=this.removedAuthActions.has(e)?this.removedAuthActions.get(e):[],a=t[-1];a&&(t[-1]=void 0,e.defaultActions.unshift({...a})),e.rules.forEach((e,a)=>{const n=t[a];t[a]=void 0,n&&e.actions.unshift({...n})})}listenerPortChanged(e,t){e.port=Number.parseInt(t,10),this.updateListeners()}removeListener(e){this.props.formik.values.listeners.splice(e,1),this.updateListeners()}render(){const{errors:e,values:t}=this.props.formik,{certificates:a,certificateTypes:n}=this.state;return Mt.createElement("div",{className:"container-fluid form-horizontal"},Mt.createElement("div",{className:"form-group"},Mt.createElement("div",{className:"col-md-12"},t.listeners.map((e,r)=>Mt.createElement("div",{key:r,className:"wizard-pod"},Mt.createElement("div",null,Mt.createElement("div",{className:"wizard-pod-row header"},Mt.createElement("div",{className:"wizard-pod-row-title"},"Listen On"),Mt.createElement("div",{className:"wizard-pod-row-contents spread"},Mt.createElement("div",null,Mt.createElement("span",{className:"wizard-pod-content"},Mt.createElement("label",null,"Protocol"),Mt.createElement("select",{className:"form-control input-sm inline-number",style:{width:"80px"},value:e.protocol,onChange:t=>this.listenerProtocolChanged(e,t.target.value)},this.protocols.map(e=>Mt.createElement("option",{key:e},e)))),Mt.createElement("span",{className:"wizard-pod-content"},Mt.createElement("label",null,"Port"),Mt.createElement("input",{className:"form-control input-sm inline-number",type:"text",min:0,value:e.port||"",onChange:t=>this.listenerPortChanged(e,t.target.value),style:{width:"80px"},required:!0}))),Mt.createElement("div",null,Mt.createElement("a",{className:"sm-label clickable",onClick:()=>this.removeListener(r)},Mt.createElement("span",{className:"glyphicon glyphicon-trash"}))))),Mt.createElement("div",null,"TLS"===e.protocol&&Mt.createElement(ml,{availableCertificates:e.certificates,formik:this.props.formik,app:this.props.app,certificateTypes:n,certificates:a})),Mt.createElement("div",{className:"wizard-pod-row"},Mt.createElement("div",{className:"wizard-pod-row-title",style:{height:"30px"}},"Rules"),Mt.createElement("div",{className:"wizard-pod-row-contents",style:{padding:"0"}},Mt.createElement("table",{className:"table table-condensed packed rules-table"},Mt.createElement("thead",null,Mt.createElement("tr",null,Mt.createElement("th",{style:{width:"10px",padding:"0"}}),Mt.createElement("th",{style:{width:"226px"}},"If"),Mt.createElement("th",{style:{width:"75px"}},"Then"),Mt.createElement("th",null,"Target"),Mt.createElement("th",{style:{width:"30px"}}))),Mt.createElement("tbody",null,Mt.createElement("tr",{className:"not-sortable"},Mt.createElement("td",null),Mt.createElement("td",null,"Default"),Mt.createElement("td",null,"forward to"),Mt.createElement("td",null,Mt.createElement("select",{className:"form-control input-sm",value:e.defaultActions[0].targetGroupName,onChange:t=>this.handleDefaultTargetChanged(e,t.target.value),required:!0},Mt.createElement("option",{value:""}),aa(t.targetGroups.map(e=>e.name)).map(e=>Mt.createElement("option",{key:e},e)))),Mt.createElement("td",null))))))))),e.listenerPorts&&Mt.createElement("div",{className:"wizard-pod-row-errors"},Mt.createElement(ge,{type:"error",message:e.listenerPorts})),e.listeners&&Mt.createElement("div",{className:"wizard-pod-row-errors"},Mt.createElement(ge,{type:"error",message:e.listeners})),Mt.createElement("table",{className:"table table-condensed packed"},Mt.createElement("tbody",null,Mt.createElement("tr",null,Mt.createElement("td",null,Mt.createElement("button",{type:"button",className:"add-new col-md-12",onClick:this.addListener},Mt.createElement("span",null,Mt.createElement("span",{className:"glyphicon glyphicon-plus-sign"})," Add new listener")))))))))}}class pl extends Mt.Component{constructor(e){super(e),this.protocols=["TCP","UDP"],this.healthProtocols=["TCP","HTTP","HTTPS"],this.targetTypes=["instance","ip"],this.destroy$=new Ca,this.addTargetGroup=()=>{const{setFieldValue:e,values:t}=this.props.formik,a=t.targetGroups.length;t.targetGroups.push({name:"targetgroup"+(a?`${a}`:""),protocol:"TCP",port:7001,targetType:"instance",healthCheckProtocol:"TCP",healthCheckPort:"traffic-port",healthCheckPath:"/healthcheck",healthCheckTimeout:5,healthCheckInterval:10,healthyThreshold:10,unhealthyThreshold:10,attributes:{deregistrationDelay:300,preserveClientIp:!0}}),e("targetGroups",t.targetGroups)};const t=e.isNew?0:e.formik.initialValues.targetGroups.length;this.state={existingTargetGroupNames:{},oldTargetGroupCount:t}}validate(e){const t=aa(Wt(Yt(ea(e.targetGroups,"name"),e=>e.length>1)).map(e=>e.name)),a=new n(e),{arrayForEach:r}=a;return a.field("targetGroups").withValidators(r(a=>{a.field("name","Name").required().withValidators(Kr(this.state.existingTargetGroupNames,e.credentials,e.region),Yr(this.props.app.name.length),fe.valueUnique(t,"There is already a target group in this load balancer with the same name.")),a.field("port","Port").required().spelAware().withValidators(e=>Ee(e)),a.field("healthCheckInterval","Health Check Interval").required().spelAware().withValidators(e=>Ee(e)),a.field("healthyThreshold","Healthy Threshold").required().spelAware().withValidators(e=>Ee(e)),a.field("unhealthyThreshold","Unhealthy Threshold").required().spelAware().withValidators(e=>Ee(e)),a.field("healthCheckPort","Health Check Port").required().spelAware().withValidators(e=>"traffic-port"===e?null:Ee(e)),a.field("protocol","Protocol").required(),a.field("healthCheckProtocol","Health Check Protocol").required()})),a.validateForm()}removeAppName(e){return e.replace(`${this.props.app.name}-`,"")}updateLoadBalancerNames(e){const{app:t,loadBalancer:a}=e,n={};Na(t.getDataSource("loadBalancers").refresh(!0)).pipe(Da(this.destroy$)).subscribe(()=>{t.getDataSource("loadBalancers").data.forEach(e=>{"classic"!==e.loadBalancerType&&(a&&e.name===a.name||e.targetGroups.forEach(t=>{n[e.account]=n[e.account]||{},n[e.account][e.region]=n[e.account][e.region]||[],n[e.account][e.region].push(this.removeAppName(t.name))}))}),this.setState({existingTargetGroupNames:n},()=>this.props.formik.validateForm())})}targetGroupFieldChanged(e,t,a){const{setFieldValue:n,values:r}=this.props.formik,l=r.targetGroups[e];ia(l,t,a),"healthyThreshold"===t&&ia(l,"unhealthyThreshold",a),n("targetGroups",r.targetGroups)}removeTargetGroup(e){const{setFieldValue:t,values:a}=this.props.formik,{oldTargetGroupCount:n}=this.state;a.targetGroups.splice(e,1),e<n&&this.setState({oldTargetGroupCount:n-1}),t("targetGroups",a.targetGroups)}componentDidMount(){this.updateLoadBalancerNames(this.props)}componentWillUnmount(){this.destroy$.next(),this.destroy$.complete()}render(){const{app:e}=this.props,{errors:a,values:n}=this.props.formik,{oldTargetGroupCount:r}=this.state,l=this.protocols.map(e=>Mt.createElement("option",{key:e},e)),i=this.healthProtocols.map(e=>Mt.createElement("option",{key:e},e)),s=this.targetTypes.map(e=>Mt.createElement("option",{key:e},e));return Mt.createElement("div",{className:"container-fluid form-horizontal"},Mt.createElement("div",{className:"form-group"},Mt.createElement("div",{className:"col-md-12"},n.targetGroups.map((n,c)=>{const d=a.targetGroups&&a.targetGroups[c]||{};return Mt.createElement("div",{key:c,className:"wizard-pod"},Mt.createElement("div",null,Mt.createElement("div",{className:"wizard-pod-row header"},Mt.createElement("div",{className:"wizard-pod-row-title"},"Group Name"),Mt.createElement("div",{className:"wizard-pod-row-contents"},Mt.createElement("div",{className:"wizard-pod-row-data"},Mt.createElement("span",{className:"group-name-prefix"},e.name,"-"),Mt.createElement("input",{className:"form-control input-sm target-group-name",type:"text",value:n.name,onChange:e=>this.targetGroupFieldChanged(c,"name",e.target.value),required:!0,disabled:c<r}),Mt.createElement("a",{className:"sm-label clickable",onClick:()=>this.removeTargetGroup(c)},Mt.createElement("span",{className:"glyphicon glyphicon-trash"}))),d.name&&Mt.createElement("div",{className:"wizard-pod-row-errors"},Mt.createElement(ge,{type:"error",message:d.name})))),Mt.createElement("div",{className:"wizard-pod-row"},Mt.createElement("div",{className:"wizard-pod-row-title"},Mt.createElement(t,{id:"aws.targetGroup.targetType"})," ",Mt.createElement("span",null,"Target Type ")),Mt.createElement("div",{className:"wizard-pod-row-contents"},Mt.createElement("div",{className:"wizard-pod-row-data"},Mt.createElement("span",{className:"wizard-pod-content"},Mt.createElement("select",{className:"form-control input-sm",value:n.targetType,onChange:e=>this.targetGroupFieldChanged(c,"targetType",e.target.value),disabled:c<r},s))))),Mt.createElement("div",{className:"wizard-pod-row"},Mt.createElement("div",{className:"wizard-pod-row-title"},"Backend Connection"),Mt.createElement("div",{className:"wizard-pod-row-contents"},Mt.createElement("div",{className:"wizard-pod-row-data"},Mt.createElement("span",{className:"wizard-pod-content"},Mt.createElement("label",null,"Protocol "),Mt.createElement(t,{id:"aws.targetGroup.protocol"})," ",Mt.createElement("select",{className:"form-control input-sm inline-number",value:n.protocol,onChange:e=>this.targetGroupFieldChanged(c,"protocol",e.target.value),disabled:c<r},l)),Mt.createElement("span",{className:"wizard-pod-content"},Mt.createElement("label",null,"Port "),Mt.createElement(t,{id:"aws.targetGroup.port"})," ",Mt.createElement("input",{className:"form-control input-sm inline-number",value:n.port,onChange:e=>this.targetGroupFieldChanged(c,"port",e.target.value),type:"text",required:!0,disabled:c<r}))))),Mt.createElement("div",{className:"wizard-pod-row"},Mt.createElement("div",{className:"wizard-pod-row-title"},"Healthcheck"),Mt.createElement("div",{className:"wizard-pod-row-contents"},Mt.createElement("div",{className:"wizard-pod-row-data"},Mt.createElement("span",{className:"wizard-pod-content"},Mt.createElement("label",null,"Protocol "),Mt.createElement("select",{disabled:c<r,className:"form-control input-sm inline-number",value:n.healthCheckProtocol,onChange:e=>this.targetGroupFieldChanged(c,"healthCheckProtocol",e.target.value)},i)),Mt.createElement("span",{className:"wizard-pod-content"},Mt.createElement("label",null,"Port "),Mt.createElement(ye,{className:"form-control input-sm inline-number",error:d.healthCheckPort,name:"healthCheckPort",required:!0,value:n.healthCheckPort,onChange:e=>this.targetGroupFieldChanged(c,"healthCheckPort",e.target.value)})),"TCP"!==n.healthCheckProtocol&&Mt.createElement("span",{className:"wizard-pod-content"},Mt.createElement("label",null,"Path "),Mt.createElement(ye,{className:"form-control input-sm inline-text",error:d.healthCheckPath,name:"healthCheckPath",required:!0,value:n.healthCheckPath,onChange:e=>this.targetGroupFieldChanged(c,"healthCheckPath",e.target.value)})),Mt.createElement("span",{className:"wizard-pod-content"},Mt.createElement("label",null,"Timeout "),Mt.createElement(be,{error:d.healthCheckTimeout,required:!0,value:n.healthCheckTimeout,onChange:e=>this.targetGroupFieldChanged(c,"healthCheckTimeout",e)})),Mt.createElement("span",{className:"wizard-pod-content"},Mt.createElement("label",null,"Interval "),Mt.createElement(be,{error:d.healthCheckInterval,required:!0,value:n.healthCheckInterval,onChange:e=>this.targetGroupFieldChanged(c,"healthCheckInterval",e)}))))),Mt.createElement("div",{className:"wizard-pod-row"},Mt.createElement("div",{className:"wizard-pod-row-title"},Mt.createElement(t,{id:"aws.targetGroup.nlbHealthcheckThreshold"})," ",Mt.createElement("span",null,"Healthcheck Threshold ")),Mt.createElement("div",{className:"wizard-pod-row-contents"},Mt.createElement("div",{className:"wizard-pod-row-data"},Mt.createElement("span",{className:"wizard-pod-content"},Mt.createElement(be,{error:d.healthyThreshold,value:n.healthyThreshold,onChange:e=>this.targetGroupFieldChanged(c,"healthyThreshold",e)}))))),Mt.createElement("div",{className:"wizard-pod-row"},Mt.createElement("div",{className:"wizard-pod-row-title"},"Attributes"),Mt.createElement("div",{className:"wizard-pod-row-contents"},Mt.createElement("div",{className:"wizard-pod-row-data"},Mt.createElement("span",{className:"wizard-pod-content"},Mt.createElement("label",null,"Dereg. Delay"),Mt.createElement(t,{id:"aws.targetGroup.attributes.deregistrationDelay"})," ",Mt.createElement("input",{className:"form-control input-sm inline-number",type:"text",value:n.attributes.deregistrationDelay,onChange:e=>this.targetGroupFieldChanged(c,"attributes.deregistrationDelay",e.target.value)})),Mt.createElement("span",{className:"wizard-pod-content"},Mt.createElement(o,{name:"deregistrationDelayConnectionTermination",text:"Connection Termination",checked:n.attributes.deregistrationDelayConnectionTermination,onChange:e=>{this.targetGroupFieldChanged(c,"attributes.deregistrationDelayConnectionTermination",e.target.checked)}}),Mt.createElement(t,{id:"aws.targetGroup.attributes.deregistrationDelayConnectionTermination"})),"instance"!==n.targetType&&Mt.createElement("span",{className:"wizard-pod-content"},Mt.createElement(o,{name:"preserveClientIp",text:"Preserve Client IP",checked:n.attributes.preserveClientIp,onChange:e=>{this.targetGroupFieldChanged(c,"attributes.preserveClientIp",e.target.checked)}}),Mt.createElement(t,{id:"aws.targetGroup.attributes.preserveClientIp"})))))))}),Mt.createElement("table",{className:"table table-condensed packed"},Mt.createElement("tbody",null,Mt.createElement("tr",null,Mt.createElement("td",null,Mt.createElement("button",{type:"button",className:"add-new col-md-12",onClick:this.addTargetGroup},Mt.createElement("span",{className:"glyphicon glyphicon-plus-sign"})," Add new target group"))))))))}}class hl extends Mt.Component{constructor(e){super(e),this._isUnmounted=!1,this.certificateTypes=ta(hn,"loadBalancers.certificateTypes",["iam","acm"]),this.submit=e=>{const{app:t,forPipelineConfig:a,closeModal:n}=this.props,{isNew:r}=this.state,l=r?"Create":"Update",i=Ht(e);if(i.ipAddressType=i.dualstack?"dualstack":"ipv4",delete i.dualstack,a)this.formatListeners(i).then(()=>{n&&n(i)});else{const e=new v({application:t,title:(r?"Creating":"Updating")+" your load balancer",onDismiss:()=>this.props.dismissModal(),onTaskComplete:()=>this.onTaskComplete(i)});e.submit(()=>this.formatListeners(i).then(()=>(this.formatCommand(i),Ae.upsertLoadBalancer(i,t,l)))),this.setState({taskMonitor:e})}},this.validate=()=>({});const t=e.loadBalancer?Ar.convertNetworkLoadBalancerForEditing(e.loadBalancer):Ar.constructNewNetworkLoadBalancerTemplate(e.app);this.state={isNew:!e.loadBalancer,loadBalancerCommand:t,taskMonitor:null}}static show(e,t){return E.show(gl,e,{dialogClassName:"wizard-modal modal-lg"},t)}certificateIdAsARN(e,t,a,n){if(t&&(0!==t.indexOf("arn:aws:iam::")||0!==t.indexOf("arn:aws:acm:"))){if("iam"===n)return`arn:aws:iam::${e}:server-certificate/${t}`;if("acm"===n)return`arn:aws:acm:${a}:${e}:certificate/${t}`}return t}formatListeners(e){return i.getAccountDetails(e.credentials).then(t=>{e.listeners.forEach(a=>{"TCP"===a.protocol&&(delete a.sslPolicy,a.certificates=[]),a.certificates.forEach(a=>{a.certificateArn=this.certificateIdAsARN(t.accountId,a.name,e.region,a.type||this.certificateTypes[0])})})})}setAvailabilityZones(e){const t={};t[e.region]=e.regionZones||[],e.availabilityZones=t}addAppName(e){return`${this.props.app.name}-${e}`}manageTargetGroupNames(e){(e.targetGroups||[]).forEach(e=>{e.name=this.addAppName(e.name)}),(e.listeners||[]).forEach(e=>{e.defaultActions.forEach(e=>{e.targetGroupName&&(e.targetGroupName=this.addAppName(e.targetGroupName))}),(e.rules||[]).forEach(e=>{e.actions.forEach(e=>{e.targetGroupName&&(e.targetGroupName=this.addAppName(e.targetGroupName))})})})}manageRules(e){e.listeners.forEach(e=>{e.rules.forEach((e,t)=>{e.priority=t+1,e.conditions=e.conditions.filter(e=>e.values[0].length>0)})})}formatCommand(e){this.setAvailabilityZones(e),this.manageTargetGroupNames(e),this.manageRules(e)}onApplicationRefresh(e){var t;if(null==(t=this.refreshUnsubscribe)||t.call(this),this.refreshUnsubscribe=void 0,this._isUnmounted)return;this.props.dismissModal(),this.setState({taskMonitor:void 0});const a={name:e.name,accountId:e.credentials,region:e.region,vpcId:e.vpcId,provider:"aws"};this.props.stateService.includes("**.loadBalancerDetails")?this.props.stateService.go("^.loadBalancerDetails",a):this.props.stateService.go(".loadBalancerDetails",a)}componentWillUnmount(){var e;this._isUnmounted=!0,null==(e=this.refreshUnsubscribe)||e.call(this),this.refreshUnsubscribe=void 0}onTaskComplete(e){var t;null==(t=this.refreshUnsubscribe)||t.call(this),this.refreshUnsubscribe=void 0,this.refreshUnsubscribe=this.props.app.loadBalancers.onNextRefresh(()=>this.onApplicationRefresh(e)),this.props.app.loadBalancers.refresh()}render(){const{app:e,dismissModal:t,forPipelineConfig:a,loadBalancer:n}=this.props,{isNew:r,loadBalancerCommand:l,taskMonitor:i}=this.state;let s=a?"Configure Network Load Balancer":"Create New Network Load Balancer";r||(s=`Edit ${l.name}: ${l.region}: ${l.credentials}`);const o=r||a;return Mt.createElement(y,{heading:s,initialValues:l,taskMonitor:i,dismissModal:t,closeModal:this.submit,submitButtonLabel:a?r?"Add":"Done":r?"Create":"Update",validate:this.validate,render:({formik:t,nextIdx:l,wizard:i})=>Mt.createElement(Mt.Fragment,null,o&&Mt.createElement(b,{label:"Location",wizard:i,order:l(),render:({innerRef:l})=>Mt.createElement(tl,{app:e,forPipelineConfig:a,formik:t,isNew:r,loadBalancer:n,ref:l})}),Mt.createElement(b,{label:"Target Groups",wizard:i,order:l(),render:({innerRef:a})=>Mt.createElement(pl,{ref:a,formik:t,app:e,isNew:r,loadBalancer:n})}),Mt.createElement(b,{label:"Listeners",wizard:i,order:l(),render:({innerRef:e})=>Mt.createElement(ul,{ref:e,formik:t})}),Mt.createElement(b,{label:"Advanced Settings",wizard:i,order:l(),render:({innerRef:e})=>Mt.createElement(dl,{ref:e,showDualstack:!t.values.isInternal&&oa(t.values.targetGroups,{targetType:"instance"})})}))})}}hl.defaultProps={closeModal:C,dismissModal:C};const gl=Object.assign(N(hl),{show:hl.show}),vl=[{type:"application",label:"Application",sublabel:"ALB",description:"Highly configurable, application-focused balancer. HTTP and HTTPS only.",component:rl},{type:"network",label:"Network",sublabel:"NLB",description:"Basic, high-performance balancer with fixed IP.",component:gl},{type:"classic",label:"Classic",sublabel:"Legacy",description:"Previous generation balancer (ELB).",component:cl}],fl=class e extends Mt.Component{constructor(e){super(e),this.choose=()=>{const{children:e,...t}=this.props;this.close(),this.state.selectedChoice.component.show(t,this.context.services).then(e=>{this.props.closeModal(e)}).catch(()=>{})},this.close=e=>{this.props.dismissModal(e)},this.state={choices:vl,selectedChoice:vl[0]}}static show(t,a){var n;if(!1===t.isNew&&(null==(n=t.loadBalancer)?void 0:n.loadBalancerType)){const e=vl.find(e=>e.type===t.loadBalancer.loadBalancerType);if(e)return e.component.show(t,a)}return E.show(e,{...t,className:"create-pipeline-modal-overflow-visible modal-lg"},{bsSize:"lg"},a)}choiceSelected(e){this.setState({selectedChoice:e})}getIncompatibility(e,t){const{loadBalancer:a={}}=Ge.getProvider(t),{incompatibleLoadBalancerTypes:n=[]}=a;return n.find(t=>t.type===e.type)}isIncompatibleWithAllProviders(e){const{app:{attributes:t}}=this.props,{cloudProviders:a=[]}=t;return a.length>0&&a.every(t=>!!this.getIncompatibility(e,t))}render(){const{app:{attributes:e}}=this.props,{cloudProviders:t=[]}=e,{choices:a,selectedChoice:n}=this.state,r=a.filter(e=>!this.isIncompatibleWithAllProviders(e)),l=t.map(e=>this.getIncompatibility(n,e)).filter(e=>e),i=hn.createLoadBalancerWarnings&&hn.createLoadBalancerWarnings[n.type];return Mt.createElement(Mt.Fragment,null,Mt.createElement(me,{dismiss:this.close}),Mt.createElement(Oa.Header,null,Mt.createElement(Oa.Title,null,"Select Type of Load Balancer")),Mt.createElement(Oa.Body,null,Mt.createElement("div",{className:"modal-body"},Mt.createElement("div",{className:"card-choices"},r.map(e=>Mt.createElement("div",{key:e.type,className:"card "+(n===e?"active":""),onClick:()=>this.choiceSelected(e)},Mt.createElement("h3",{className:"load-balancer-label"},e.label),Mt.createElement("h3",null,"(",e.sublabel,")"),Mt.createElement("div",null,e.description)))),Mt.createElement(Mt.Fragment,null,l.length>0&&l.map(e=>Mt.createElement("div",{className:"alert alert-warning"},Mt.createElement("p",null,Mt.createElement("i",{className:"fa fa-exclamation-triangle"})," ",e.reason)))),!!i&&Mt.createElement("div",{className:"alert alert-warning"},Mt.createElement("p",null,Mt.createElement("i",{className:"fa fa-exclamation-triangle"}),Mt.createElement(ke,{message:i,style:{display:"inline-block",marginLeft:"2px"}}))),Mt.createElement("div",{className:"load-balancer-description"}))),Mt.createElement(Oa.Footer,null,Mt.createElement($a,{onClick:this.choose},"Configure Load Balancer ",Mt.createElement("span",{className:"glyphicon glyphicon-chevron-right"}))))}};fl.contextType=g,fl.supportsPipelineConfig=!0,fl.defaultProps={closeModal:C,dismissModal:C};let El=fl;class yl extends Mt.Component{constructor(e){super(e),this.editLoadBalancer=()=>{const{loadBalancer:e}=this.props,{application:t}=this.state;vl.find(t=>t.type===e.loadBalancerType).component.show({app:t,loadBalancer:e},this.context.services)},this.deleteLoadBalancer=()=>{const{app:e,loadBalancer:t}=this.props,a=this.props.loadBalancerFromParams||{accountId:t.account,region:t.region,name:t.name};if(t.instances&&t.instances.length)return;const n={application:e,title:"Deleting "+a.name},r={cloudProvider:t.cloudProvider,loadBalancerName:t.name,loadBalancerType:t.loadBalancerType||"classic",regions:[t.region],credentials:t.account,vpcId:ta(t,"elb.vpcId",null)};w.confirm({header:`Really delete ${a.name} in ${a.region}: ${a.accountId}?`,buttonText:`Delete ${a.name}`,account:a.accountId,taskMonitorConfig:n,submitMethod:()=>Ae.deleteLoadBalancer(r,e)})},this.entityTagUpdate=()=>{this.props.app.loadBalancers.refresh()};const{app:t,loadBalancer:a}=this.props;let n;const r=a.name.split("-")[0];r===t.name?n=t:S.getApplication(r).then(e=>{this.setState({application:e})}).catch(()=>{}),this.state={application:n}}render(){const{app:a,loadBalancer:n}=this.props,{application:r}=this.state,{loadBalancerType:l,instances:i=[],instanceCounts:s}=n,o=n.name.split("-")[0],c=!("classic"===l&&ca(s).filter(e=>e).length)&&!i.length;return Mt.createElement("div",{style:{display:"inline-block"}},hn.adHocInfraWritesEnabled&&Mt.createElement(La,{className:"dropdown",id:"load-balancer-actions-dropdown"},Mt.createElement(La.Toggle,{className:"btn btn-sm btn-primary dropdown-toggle"},Mt.createElement("span",null,"Load Balancer Actions")),Mt.createElement(La.Menu,{className:"dropdown-menu"},r&&Mt.createElement(xe,{resource:n,application:a,onClick:this.editLoadBalancer},"Edit Load Balancer"),!r&&Mt.createElement("li",{className:"disabled"},Mt.createElement("a",null,"Edit Load Balancer"," ",Mt.createElement(t,{content:`The application <b>${o}</b> must be configured before this load balancer can be edited.`}))),c&&Mt.createElement(xe,{resource:n,application:a,onClick:this.deleteLoadBalancer},"Delete Load Balancer"),!c&&Mt.createElement("li",{className:"disabled"},Mt.createElement("a",null,"Delete Load Balancer"," ",Mt.createElement(t,{content:"You must detach all instances before you can delete this load balancer."}))),e&&e.feature.entityTags&&Mt.createElement(k,{component:n,application:a,entityType:"loadBalancer",onUpdate:this.entityTagUpdate}))))}}async function bl({app:e,autoClose:t,loadBalancerParams:a,loadBalancers:n,securityGroupReader:r}){const{accountId:l,name:i,region:s}=a,o=(n||e.loadBalancers.data).find(e=>e.name===i&&e.region===s&&e.account===l)||void 0;if(!o)return void t();const c=await T("/loadBalancers").path(l,s,i).query({provider:"aws"}).get();var d;return c.length&&(o.elb=c[0],o.elb.vpcId=o.elb.vpcId||o.elb.vpcid,o.account=l,o.securityGroups=function(e,t,a,n){var r;return((null==(r=t.elb)?void 0:r.securityGroups)||t.securityGroups||[]).map(t=>{var r,l,i;return n?n.getApplicationSecurityGroup(e,a.accountId,a.region,t):null==(i=null==(l=null==(r=e.securityGroupsIndex)?void 0:r[a.accountId])?void 0:l[a.region])?void 0:i[t]}).filter(Boolean).sort((e,t)=>e.name.localeCompare(t.name))}(e,o,a,r),o.elbProtocol=function(e,t){var a,n;return(null==(a=t.listenerDescriptions)?void 0:a.some(e=>"HTTPS"===e.listener.protocol))||(null==(n=e.listeners)?void 0:n.some(e=>"HTTPS"===e.protocol))?"https:":"http:"}(o,c[0]),o.ipAddressTypeDescription="dualstack"===(d=c[0].ipAddressType)?"IPv4 and IPv6":"ipv4"===d?"IPv4":"",o.listenerRows="classic"===o.loadBalancerType?[]:function(e){const t=e.listeners||[],a=[];return t.forEach(t=>{(t.rules||[]).forEach(n=>{let r=[t.protocol,(n.conditions.find(e=>"host-header"===e.field)||{values:[""]}).values[0],t.port].filter(e=>e).join(":");const l=(n.conditions.find(e=>"path-pattern"===e.field)||{values:[]}).values[0];l&&(r=`${r}${l}`);const i=(n.actions||[]).map(t=>{const a={...t};return"forward"===a.type&&(a.targetGroup=(e.targetGroups||[]).find(e=>e.name===a.targetGroupName)),a});a.push({in:r,actions:i})})}),a}(o),await async function(e){var t;(null==(t=e.subnets)?void 0:t.length)?e.subnetDetails=await Promise.all(e.subnets.map(t=>p.getSubnetByIdAndProvider(t,e.provider))):e.subnetDetails=e.subnetDetails||[]}(o)),o}function Cl({app:e,loadBalancerParams:t,autoClose:a}){const{securityGroupReader:n}=De(),r=e.getDataSource("loadBalancers"),{data:l,loaded:i,refresh:s,error:o}=Be(r),[c,d]=Mt.useState(),[m,u]=Mt.useState(!1),[p,h]=Mt.useState(null),g=Mt.useRef(a),v=Mt.useRef(!0),{accountId:f,name:E,provider:y,region:b,vpcId:C}=t;Mt.useEffect(()=>()=>{v.current=!1},[]),Mt.useEffect(()=>{g.current=a},[a]);const N=Mt.useCallback(async()=>{if(i&&!o){u(!0),h(null);try{const t=await bl({app:e,autoClose:()=>g.current(),loadBalancerParams:{accountId:f,name:E,provider:y,region:b,vpcId:C},loadBalancers:l,securityGroupReader:n});v.current&&d(t)}catch(e){v.current&&h((null==e?void 0:e.message)||String(e))}finally{v.current&&u(!1)}}},[f,e,o,l,i,E,y,b,n,C]);return Mt.useEffect(()=>{N()},[N]),{data:c,loading:!i||m,error:o||p,refetch:async()=>s()}}function Nl(e,t){return e.isDisabled!==t.isDisabled?e.isDisabled?1:-1:t.name.localeCompare(e.name)}function wl(e,t){return e.isDisabled!==t.isDisabled?e.isDisabled?1:-1:t.name.localeCompare(e.name)}function Sl({app:e,loadBalancer:t}){var a;const n=t,r=(null==(a=n.elb)?void 0:a.insightActions)||[];return Mt.createElement(Mt.Fragment,null,Mt.createElement(yl,{app:e,loadBalancer:n}),r.length>0&&Mt.createElement(La,{className:"dropdown",id:"amazon-load-balancer-insights-dropdown"},Mt.createElement(La.Toggle,{className:"btn btn-sm btn-default dropdown-toggle"},"Insight"),Mt.createElement(La.Menu,null,r.map(e=>Mt.createElement(Ua,{key:e.url||e.label,href:e.url,target:"_blank"},e.label)))))}function kl({app:e,loadBalancer:t}){var a,n,r;const l=t,i=l.elb||{},s=i.dnsname||i.dnsName,o=da((l.subnetDetails||[]).map(e=>e.purpose))||"";return Mt.createElement(Mt.Fragment,null,l.isManaged&&Mt.createElement(se,{resourceSummary:l.managedResourceSummary,application:e}),Mt.createElement(G,{heading:"Load Balancer Details",defaultExpanded:!0},Mt.createElement("dl",{className:"dl-horizontal dl-narrow"},Mt.createElement("dt",null,"Created"),Mt.createElement("dd",null,i.createdTime?B(i.createdTime):"-"),Mt.createElement("dt",null,"In"),Mt.createElement("dd",null,Mt.createElement(A,{account:l.account})," ",l.region),Mt.createElement("dt",null,"VPC"),Mt.createElement("dd",null,Mt.createElement(Fn,{vpcId:i.vpcId||l.vpcId})),Mt.createElement("dt",null,"Subnet"),Mt.createElement("dd",null,o),Mt.createElement("dt",null,"Scheme"),Mt.createElement("dd",null,l.scheme||"-"),l.loadBalancerType&&Mt.createElement("dt",null,"Type"),l.loadBalancerType&&Mt.createElement("dd",null,l.loadBalancerType),l.ipAddressTypeDescription&&Mt.createElement("dt",null,"IP Type"),l.ipAddressTypeDescription&&Mt.createElement("dd",null,l.ipAddressTypeDescription)),!!(null==(a=i.availabilityZones)?void 0:a.length)&&Mt.createElement("dl",{className:"horizontal-when-filters-collapsed"},Mt.createElement("dt",null,"Availability Zones"),Mt.createElement("dd",null,Mt.createElement("ul",{className:"collapse-margin-on-filter-collapse"},i.availabilityZones.map(e=>Mt.createElement("li",{key:e},e))))),!!(null==(n=l.serverGroups)?void 0:n.length)&&Mt.createElement("dl",{className:"horizontal-when-filters-collapsed"},Mt.createElement("dt",null,"Server Groups"),Mt.createElement("dd",null,Mt.createElement("ul",{className:"collapse-margin-on-filter-collapse"},l.serverGroups.slice().sort(Nl).map(e=>Mt.createElement("li",{key:e.name},Mt.createElement(ja,{to:"^.serverGroup",params:{region:e.region,accountId:e.account,serverGroup:e.name,provider:"aws"}},Mt.createElement("a",null,e.name))))))),!!(null==(r=l.targetGroups)?void 0:r.length)&&Mt.createElement("dl",{className:"horizontal-when-filters-collapsed"},Mt.createElement("dt",null,"Target Groups"),Mt.createElement("dd",null,Mt.createElement("ul",{className:"collapse-margin-on-filter-collapse"},l.targetGroups.slice().sort(wl).map(e=>Mt.createElement("li",{key:e.name},Mt.createElement(ja,{to:"^.targetGroupDetails",params:{region:e.region,loadBalancerName:l.name,accountId:e.account,name:e.name,vpcId:e.vpcId,provider:"aws"}},Mt.createElement("a",null,e.name))))))),s&&Mt.createElement("dl",{className:"horizontal-when-filters-collapsed"},Mt.createElement("dt",null,"DNS Name"),Mt.createElement("dd",null,Mt.createElement("a",{target:"_blank",href:`${l.elbProtocol||"http:"}//${s}`},s)," ",Mt.createElement(ie,{text:s,toolTip:"Copy DNS Name to clipboard"})))))}function Tl({loadBalancer:e}){return Mt.createElement(G,{heading:"Status",defaultExpanded:"classic"===e.loadBalancerType},"classic"===e.loadBalancerType?Mt.createElement(J,{className:"pull-left",container:e.instanceCounts}):Mt.createElement("span",null,"Select a target group to check the instance health status from the view of the target group."))}function Il({loadBalancer:e}){const t=e,a=t.elb;return"classic"===t.loadBalancerType?Mt.createElement(G,{heading:"Listeners"},Mt.createElement("dl",null,Mt.createElement("dt",null,"Load Balancer -> Instance"),(a.listenerDescriptions||[]).map((e,t)=>Mt.createElement("dd",{key:t},e.listener.protocol,":",e.listener.loadBalancerPort," ->"," ",e.listener.instanceProtocol,":",e.listener.instancePort)))):Mt.createElement(G,{heading:"Listeners"},(t.listenerRows||[]).map(e=>Mt.createElement("div",{key:e.in},Mt.createElement("div",{className:"listener-targets"},e.in," ->"),Mt.createElement("div",{className:"listener-targets"},e.actions.map((a,n)=>Mt.createElement("div",{key:`${e.in}-${n}`},function(e,t){var a;if("redirect"===e.type){const t=e.redirectConfig;return Mt.createElement("span",null,"#{protocol}"!==t.protocol&&`${t.protocol}:`,"#{host}"!==t.host&&` ${t.host} `,"#{port}"!==t.port&&` ${t.port} `,"/#{path}"!==t.path&&` ${t.path} `,"#{query}"!==t.query&&` ?${t.query} `,"(",t.statusCode,")")}if("authenticate-oidc"===e.type){const t=null==(a=e.authenticateOidcConfig)?void 0:a.clientId;return Mt.createElement("span",null,Mt.createElement("i",{className:"fas fa-fw fa-user-lock"})," ",t)}return e.targetGroupName&&e.targetGroup?Mt.createElement("span",null,Mt.createElement("i",{className:"fa fa-fw fa-crosshairs icon","aria-hidden":"true"}),Mt.createElement(ja,{to:"^.targetGroupDetails",params:{region:e.targetGroup.region,loadBalancerName:t.name,accountId:e.targetGroup.account,name:e.targetGroup.name,vpcId:e.targetGroup.vpcId,provider:"aws"}},Mt.createElement("a",null,e.targetGroupName))):Mt.createElement("span",null,Mt.createElement("i",{className:"fa fa-fw fa-crosshairs icon","aria-hidden":"true"})," ",e.targetGroupName||e.type)}(a,t)))))))}function Pl({loadBalancer:e}){const t=e,a=Kt(t.securityGroups||[],"name");return"network"!==t.loadBalancerType||a.length?Mt.createElement(G,{heading:R.get("Firewalls")},Mt.createElement("ul",null,a.map(e=>Mt.createElement("li",{key:e.id||e.name},Mt.createElement(ja,{to:"^.firewallDetails",params:{name:e.name,accountId:t.account,region:t.region,vpcId:t.vpcId,provider:t.provider}},Mt.createElement("a",null,e.name," (",e.id,")")))))):null}function Al({loadBalancer:e}){const t=(e.subnetDetails||[]).filter(Boolean);return Mt.createElement(G,{heading:"Subnets"},!t.length&&Mt.createElement("h5",null,"No subnets"),t.map(e=>Mt.createElement("div",{key:e.id,className:"bottom-border"},Mt.createElement("h5",null,Mt.createElement("strong",null,e.id)),Mt.createElement("dl",{className:"dl-horizontal dl-narrow"},Mt.createElement("dt",null,"Purpose"),Mt.createElement("dd",null,e.purpose),Mt.createElement("dt",null,"State"),Mt.createElement("dd",null,e.state),Mt.createElement("dt",null,"Cidr Block"),Mt.createElement("dd",null,e.cidrBlock)))))}function Gl({loadBalancer:e}){var t;if("classic"!==e.loadBalancerType)return null;const a=null==(t=e.elb)?void 0:t.healthCheck;return Mt.createElement(G,{heading:"Health Checks"},Mt.createElement("dl",{className:"horizontal-when-filters-collapsed"},Mt.createElement("dt",null,"Target"),Mt.createElement("dd",null,(null==a?void 0:a.target)||"-"),Mt.createElement("dt",null,"Timeout"),Mt.createElement("dd",null,null==a?void 0:a.timeout," seconds"),Mt.createElement("dt",null,"Interval"),Mt.createElement("dd",null,null==a?void 0:a.interval," seconds"),Mt.createElement("dt",null,"Healthy Threshold"),Mt.createElement("dd",null,null==a?void 0:a.healthyThreshold),Mt.createElement("dt",null,"Unhealthy Threshold"),Mt.createElement("dd",null,null==a?void 0:a.unhealthyThreshold)))}yl.contextType=g;const xl=[kl,Tl,Il,Pl,Al,Gl];const Dl=["ebs","docker"];function Bl(e){return Object.keys(e).reduce((t,a)=>(""!==e[a]&&(t[a]=e[a]),t),{})}function Fl(t){return e.feature.roscoMode||"function"==typeof e.feature.roscoSelector&&e.feature.roscoSelector(t)}function zl(e){return"Started"!==(null==e?void 0:e.migrationStatus)}class Ml extends Mt.Component{constructor(){super(...arguments),this.mounted=!1,this.state={baseLabelOptions:[],baseOsOptions:[],extendedAttributeKey:"",extendedAttributeValue:"",loading:!0,loadError:!1,regions:[],roscoMode:!1,showAdvancedOptions:!1,vmTypes:["hvm","pv"]}}componentDidMount(){this.mounted=!0,this.initialize()}componentWillUnmount(){this.mounted=!1}initialize(){const e=this.props.stage;Promise.all([Fe.getRegions("aws"),Fe.getBaseOsOptions("aws"),Fe.getBaseLabelOptions()]).then(([t,a,n])=>{if(!this.mounted)return;const r=a.baseImages||[],l=this.applyDefaults(e,t,r,n);this.replaceStage(l),this.setState({baseLabelOptions:n,baseOsOptions:r,loading:!1,loadError:!1,regions:t,roscoMode:Fl(l),showAdvancedOptions:this.showAdvanced(l),vmTypes:this.computeVmTypes(r,l.baseOs)})}).catch(()=>{this.mounted&&this.setState({loading:!1,loadError:!0})})}applyDefaults(e,t,a,n){var r;const l=Bl({...e});l.extendedAttributes=l.extendedAttributes||{},l.regions=l.regions&&[...l.regions].sort()||[],l.user||(l.user=null==(r=ze.getAuthenticatedUser())?void 0:r.name),!l.storeType&&Dl.length&&(l.storeType=Dl[0]),1===t.length?l.region=t[0]:l.region&&!t.includes(l.region)&&delete l.region,!l.regions.length&&this.props.application.defaultRegions.aws&&(l.regions=[this.props.application.defaultRegions.aws]);let i=a;!l.baseOs&&a.length?l.baseOs=a[0].id:l.baseOs&&!a.find(e=>e.id===l.baseOs)&&(i=[...a,{id:l.baseOs,detailedDescription:"Custom",vmTypes:["hvm","pv"]}]),!l.baseLabel&&n.length&&(l.baseLabel=n[0]);const s=this.computeVmTypes(i,l.baseOs);return!l.vmType&&s.length&&(l.vmType=s[0]),l}computeVmTypes(e,t){if(e.length&&e.every(e=>e.vmTypes)){const a=e.find(e=>e.id===t);return(null==a?void 0:a.vmTypes)||["hvm","pv"]}return["hvm","pv"]}showAdvanced(e){return!!(e.templateFileName||e.extendedAttributes&&Object.keys(e.extendedAttributes).length>0||e.varFileName||e.baseName||e.baseAmi||e.amiName||e.amiSuffix||e.rootVolumeSize)}replaceStage(e){this.props.updateStage?this.props.updateStage(e):this.props.updateStageField(e)}updateStage(e){const t=Bl({...this.props.stage,...e});if(this.replaceStage(t),this.setState({roscoMode:Fl(t)}),void 0!==e.baseOs){const a=this.computeVmTypes(this.state.baseOsOptions,e.baseOs);this.setState({vmTypes:a}),a.length&&!a.includes(t.vmType)&&this.updateStage({vmType:a[0]})}}updateExtendedAttribute(e,t){this.updateStage({extendedAttributes:{...this.props.stage.extendedAttributes||{},[e]:t}})}removeExtendedAttribute(e){const t={...this.props.stage.extendedAttributes||{}};delete t[e],this.updateStage({extendedAttributes:t})}addExtendedAttribute(){const e=this.state.extendedAttributeKey.trim();e&&(this.updateExtendedAttribute(e,this.state.extendedAttributeValue),this.setState({extendedAttributeKey:"",extendedAttributeValue:"",showAdvancedOptions:!0}))}renderDockerPreview(){const e=this.props.stage,t=!this.state.roscoMode&&zl(this.props.pipeline);return Mt.createElement(Mt.Fragment,null,hn.dockerBakeWarning&&Mt.createElement("div",{className:"alert alert-warning sp-margin-s-top horizontal middle"},Mt.createElement("i",{className:"fa fa-exclamation-triangle"}),Mt.createElement("div",{className:"sp-margin-s-left"},Mt.createElement(ke,{message:hn.dockerBakeWarning}))),Mt.createElement("div",{className:"alert alert-info horizontal middle"},Mt.createElement("i",{className:"fa fa-info-circle"}),Mt.createElement("div",{className:"sp-margin-s-left"},Mt.createElement(ke,{message:"To edit bake configuration or view advanced options, migrate to EBS store type."}))),t&&Mt.createElement(Me,{label:"Store Type"},Dl.map(t=>Mt.createElement("label",{className:"radio-inline",key:t},Mt.createElement("input",{checked:e.storeType===t,name:"storeType",type:"radio",onChange:()=>this.updateStage({storeType:t})}),t.toUpperCase()))),Mt.createElement(Me,{label:"Regions"},(e.regions||[]).map(e=>Mt.createElement("span",{className:"sp-margin-xs-right",key:e},e))),Mt.createElement(Me,{label:"Skip Region Detection"},String(!!e.skipRegionDetection)),Mt.createElement(Me,{label:"Repo Path"},e.package),Mt.createElement(Me,{label:"Base OS"},e.baseOs),Mt.createElement(Me,{label:"VM Type"},e.vmType),Mt.createElement(Me,{label:"Store Type"},e.storeType),Mt.createElement(Me,{label:"Base Label"},e.baseLabel))}render(){if(this.state.loading)return Mt.createElement(ne,null);if(this.state.loadError)return Mt.createElement("div",{className:"alert alert-danger"},"Unable to load bakery options.");const e=this.props.stage;if(function(e){return!!hn.dockerBakeryDeprecated&&"docker"===e.storeType}(e))return Mt.createElement("div",{className:"form-horizontal"},this.renderDockerPreview());const t=zl(this.props.pipeline),a=this.state.vmTypes.length>1&&t,n=!hn.dockerBakeryDeprecated,r=!this.state.roscoMode&&t&&n,l=this.state.roscoMode||e.rebake,i=this.state.showAdvancedOptions,s=e.extendedAttributes||{},o="docker"===e.storeType?"Repo Path":"Package";return Mt.createElement("div",{className:"form-horizontal"},hn.bakeWarning&&Mt.createElement("div",{className:"alert alert-warning sp-margin-s-top horizontal middle"},Mt.createElement("i",{className:"fa fa-exclamation-triangle"}),Mt.createElement("div",{className:"sp-margin-s-left"},Mt.createElement(ke,{message:hn.bakeWarning}))),Mt.createElement(Me,{label:"Regions"},Mt.createElement(Ce,{inline:!0,name:"regions",onChange:e=>this.updateStage({regions:e.target.value}),showSelectAll:!0,stringOptions:this.state.regions,value:e.regions||[]})),Mt.createElement(Me,{label:"Skip Region Detection",helpKey:"pipeline.config.bake.skipRegionDetection"},Mt.createElement("div",{className:"checkbox",style:{marginBottom:0}},Mt.createElement("label",null,Mt.createElement("input",{checked:!!e.skipRegionDetection,type:"checkbox",onChange:e=>this.updateStage({skipRegionDetection:e.target.checked})}),"Only bake explicitly selected regions"))),Mt.createElement(Me,{label:o,helpKey:"pipeline.config.bake.package"},Mt.createElement("input",{className:"form-control input-sm",value:e.package||"",onChange:e=>this.updateStage({package:e.target.value})})),Mt.createElement(Me,{label:"Base OS"},Mt.createElement("select",{className:"form-control input-sm",value:e.baseOs||"",onChange:e=>this.updateStage({baseOs:e.target.value})},this.state.baseOsOptions.map(e=>Mt.createElement("option",{key:e.id,value:e.id},function(e){const t=(null==e?void 0:e.displayName)||(null==e?void 0:e.id)||"";return(null==e?void 0:e.shortDescription)?`${t} (${e.shortDescription})`:t}(e))))),a&&Mt.createElement(Me,{label:"VM Type"},this.state.vmTypes.map(t=>Mt.createElement("label",{className:"radio-inline",key:t},Mt.createElement("input",{checked:e.vmType===t,name:"vmType",type:"radio",onChange:()=>this.updateStage({vmType:t})}),t.toUpperCase()))),r&&Mt.createElement(Me,{label:"Store Type"},Dl.map(t=>Mt.createElement("label",{className:"radio-inline",key:t},Mt.createElement("input",{checked:e.storeType===t,name:"storeType",type:"radio",onChange:()=>this.updateStage({storeType:t})}),t.toUpperCase()))),Mt.createElement(Me,{label:"Base Label"},this.state.baseLabelOptions.map(t=>Mt.createElement("label",{className:"radio-inline",key:t},Mt.createElement("input",{checked:e.baseLabel===t,name:"baseLabel",type:"radio",onChange:()=>this.updateStage({baseLabel:t})}),t))),l&&Mt.createElement(Me,{label:"Rebake"},Mt.createElement("div",{className:"checkbox",style:{marginBottom:0}},Mt.createElement("label",null,Mt.createElement("input",{checked:!!e.rebake,type:"checkbox",onChange:e=>this.updateStage({rebake:e.target.checked})}),"Rebake image without regard to the status of any existing bake"))),Mt.createElement("div",{className:"form-group"},Mt.createElement("div",{className:"col-md-9 col-md-offset-1"},Mt.createElement("div",{className:"checkbox"},Mt.createElement("label",null,Mt.createElement("input",{checked:this.state.showAdvancedOptions,type:"checkbox",onChange:e=>this.setState({showAdvancedOptions:e.target.checked})}),Mt.createElement("strong",null,"Show Advanced Options"))))),i&&Mt.createElement(Mt.Fragment,null,t&&Mt.createElement(Me,{label:"Template File Name",helpKey:"pipeline.config.bake.templateFileName"},Mt.createElement("input",{className:"form-control input-sm",value:e.templateFileName||"",onChange:e=>this.updateStage({templateFileName:e.target.value})})),Mt.createElement(Me,{label:"Extended Attributes",helpKey:"pipeline.config.bake.extendedAttributes"},Mt.createElement("table",{className:"table table-condensed packed"},Mt.createElement("thead",null,Mt.createElement("tr",null,Mt.createElement("th",{style:{width:"40%"}},"Key"),Mt.createElement("th",{style:{width:"60%"}},"Value"),Mt.createElement("th",{className:"text-right"},"Actions"))),Mt.createElement("tbody",null,Object.keys(s).map(e=>Mt.createElement("tr",{key:e},Mt.createElement("td",null,Mt.createElement("strong",{className:"small"},e)),Mt.createElement("td",null,Mt.createElement("input",{className:"form-control input-sm",value:s[e],onChange:t=>this.updateExtendedAttribute(e,t.target.value)})),Mt.createElement("td",{className:"text-right"},Mt.createElement("a",{className:"small",href:"",onClick:t=>{t.preventDefault(),this.removeExtendedAttribute(e)}},"Remove"))))),Mt.createElement("tfoot",null,Mt.createElement("tr",null,Mt.createElement("td",null,Mt.createElement("input",{className:"form-control input-sm",placeholder:"Key",value:this.state.extendedAttributeKey,onChange:e=>this.setState({extendedAttributeKey:e.target.value})})),Mt.createElement("td",null,Mt.createElement("input",{className:"form-control input-sm",placeholder:"Value",value:this.state.extendedAttributeValue,onChange:e=>this.setState({extendedAttributeValue:e.target.value})})),Mt.createElement("td",{className:"text-right"},Mt.createElement("button",{className:"btn btn-block btn-sm add-new",type:"button",onClick:()=>this.addExtendedAttribute()},Mt.createElement("span",{className:"glyphicon glyphicon-plus-sign"})," Add Extended Attribute")))))),t&&Mt.createElement(Me,{label:"Var File Name",helpKey:"pipeline.config.bake.varFileName"},Mt.createElement("input",{className:"form-control input-sm",value:e.varFileName||"",onChange:e=>this.updateStage({varFileName:e.target.value})})),!!hn.minRootVolumeSize&&t&&Mt.createElement(Me,{label:"Root Volume Size"},Mt.createElement("input",{type:"number",className:"form-control input-sm",style:{width:80,display:"inline-block"},min:hn.minRootVolumeSize,value:e.rootVolumeSize||"",onChange:e=>this.updateStage({rootVolumeSize:e.target.value})})," ","GB ",Mt.createElement("span",{className:"small"},"(minimum: ",hn.minRootVolumeSize,")")),"docker"!==e.storeType&&t&&Mt.createElement(Me,{label:"Base Name"},Mt.createElement("input",{className:"form-control input-sm",value:e.baseName||"",onChange:e=>this.updateStage({baseName:e.target.value})})),"docker"!==e.storeType&&t&&Mt.createElement(Me,{label:"Base AMI",helpKey:"pipeline.config.bake.baseAmi"},Mt.createElement("input",{className:"form-control input-sm",value:e.baseAmi||"",onChange:e=>this.updateStage({baseAmi:e.target.value})})),t&&Mt.createElement(Me,{label:"docker"===e.storeType?"Docker Image Name":"AMI Name",helpKey:"pipeline.config.bake.amiName"},Mt.createElement("input",{className:"form-control input-sm",value:e.amiName||"",onChange:e=>this.updateStage({amiName:e.target.value})})),t&&Mt.createElement(Me,{label:"docker"===e.storeType?"Docker Image Prefix":"AMI Suffix",helpKey:"pipeline.config.bake.amiSuffix"},Mt.createElement("input",{className:"form-control input-sm",value:e.amiSuffix||"",onChange:e=>this.updateStage({amiSuffix:e.target.value})}))))}}function Rl({current:t,execution:a,name:n,stage:r}){var l,i,s,o,c;const d=r.context||{},m=Fl(d),u=m||(null==(l=null==a?void 0:a.trigger)?void 0:l.rebake)||d.rebake,p="FAILURE"===(null==(i=d.status)?void 0:i.result)&&!r.failureMessage,h=((m&&e.roscoDetailUrl?e.roscoDetailUrl:e.bakeryDetailUrl)||"").replace(/\{\{\s*context\.region\s*\}\}/g,d.region||"").replace(/\{\{\s*context\.status\.resourceId\s*\}\}/g,(null==(s=d.status)?void 0:s.resourceId)||"");return Mt.createElement($e,{name:n,current:t},Mt.createElement("div",{className:"row"},Mt.createElement("div",{className:"col-md-6"},Mt.createElement("dl",{className:"dl-narrow dl-horizontal"},Mt.createElement("dt",null,"Image"),Mt.createElement("dd",null,d.ami),Mt.createElement("dt",null,"Region"),Mt.createElement("dd",null,d.region),Mt.createElement("dt",null,"Package"),Mt.createElement("dd",null,d.package))),Mt.createElement("div",{className:"col-md-6"},Mt.createElement("dl",{className:"dl-narrow dl-horizontal"},Mt.createElement("dt",null,"Base OS"),Mt.createElement("dd",null,d.baseOs),Mt.createElement("dt",null,"VM Type"),Mt.createElement("dd",null,(d.vmType||"").toUpperCase()),!m&&Mt.createElement(Mt.Fragment,null,Mt.createElement("dt",null,"Store Type"),Mt.createElement("dd",null,(d.storeType||"").toUpperCase()),Mt.createElement("dt",null,"Label"),Mt.createElement("dd",null,d.baseLabel)),u&&Mt.createElement(Mt.Fragment,null,Mt.createElement("dt",null,"Rebake"),Mt.createElement("dd",null,String((null==(o=null==a?void 0:a.trigger)?void 0:o.rebake)||d.rebake||!1))),d.templateFileName&&Mt.createElement(Mt.Fragment,null,Mt.createElement("dt",null,"Template"),Mt.createElement("dd",null,d.templateFileName)),d.varFileName&&Mt.createElement(Mt.Fragment,null,Mt.createElement("dt",null,"Var File"),Mt.createElement("dd",null,d.varFileName))))),Mt.createElement(Ue,{stage:r,message:r.failureMessage}),d.region&&(null==(c=d.status)?void 0:c.resourceId)&&Mt.createElement("div",{className:"row"},Mt.createElement("div",{className:"col-md-12"},Mt.createElement("div",{className:"alert alert-"+(r.isFailed?"danger":"info")},d.previouslyBaked&&Mt.createElement("div",null,"No changes detected; reused existing bake"),d.imageName&&Mt.createElement("div",null,Mt.createElement("strong",null,"Image:"),Mt.createElement("div",null,d.imageName),Mt.createElement("div",null,"(",d.ami,")")),p&&Mt.createElement("span",null,"Bake failed. "),Mt.createElement("a",{target:"_blank",rel:"noopener noreferrer",href:h},"View Bakery Details"),p&&Mt.createElement("span",null," for more info.")))))}Rl.title="bakeConfig";const Ll={key:"bake",provides:"bake",cloudProvider:"aws",label:"Bake",description:"Bakes an image",component:Ml,executionDetailsSections:[Rl,Oe],executionLabelComponent:Le,extraLabelLines:e=>e.masterStage.context.allPreviouslyBaked||e.masterStage.context.somePreviouslyBaked?1:0,supportsCustomTimeout:!0,validators:[{type:"requiredField",fieldName:"package"},{type:"requiredField",fieldName:"regions"},{type:"upstreamVersionProvided",checkParentTriggers:!0,getMessage:e=>"Bake stages should always have a stage or trigger preceding them that provides version information: <ul>"+e.map(e=>`<li>${e}</li>`).join("")+"</ul>Otherwise, Spinnaker will bake and deploy the most-recently built package."}],restartable:!0};function Ol(){Re.pipeline.registerStage(Ll)}Ol();const $l=["min","max","desired"];const Ul={key:"cloneServerGroup",provides:"cloneServerGroup",cloudProvider:"aws",component:function(e){const{application:a,pipeline:n,stage:r,stageFieldUpdated:l,updateStageField:s}=e,[o,c]=Rt([]);Lt(()=>{var e;const t={};r.application||(t.application=a.name),"aws"!==r.cloudProvider&&(t.cloudProvider="aws"),"aws"!==r.cloudProviderType&&(t.cloudProviderType="aws"),!r.credentials&&(null==(e=a.defaultCredentials)?void 0:e.aws)&&(t.credentials=a.defaultCredentials.aws),void 0===r.target&&(t.target=Ve.TARGET_LIST[0].val),void 0===r.useSourceCapacity&&(t.useSourceCapacity=!0),r.isNew&&a.attributes.platformHealthOnlyShowOverride&&a.attributes.platformHealthOnly&&void 0===r.interestingHealthProviderNames&&(t.interestingHealthProviderNames=["Amazon"]),r.isNew&&(t.useAmiBlockDeviceMappings=ta(a,"attributes.providerSettings.aws.useAmiBlockDeviceMappings",!1),t.copySourceCustomBlockDeviceMappings=!1),Object.keys(t).length&&s(t)},[]),Lt(()=>{let e=!0;return i.listAccounts("aws").then(t=>e&&c(t)),()=>{e=!1}},[]),Lt(()=>{if(r.targetCluster){const e=He.monikerClusterNameFilter(r.targetCluster),t=He.getMonikers([a],e)[0];if(t)s({stack:t.stack,freeFormDetails:t.detail});else{const e=le.parseClusterName(r.targetCluster);s({stack:e.stack,freeFormDetails:e.freeFormDetails})}}else(r.stack||r.freeFormDetails)&&s({stack:"",freeFormDetails:""})},[r.targetCluster]);const d=r.copySourceCustomBlockDeviceMappings?"source":r.useAmiBlockDeviceMappings?"ami":"default",m=e=>{s("source"===e?{copySourceCustomBlockDeviceMappings:!0,useAmiBlockDeviceMappings:!1}:"ami"===e?{copySourceCustomBlockDeviceMappings:!1,useAmiBlockDeviceMappings:!0}:{copySourceCustomBlockDeviceMappings:!1,useAmiBlockDeviceMappings:!1})};return Mt.createElement("div",{className:"form-horizontal"},!n.strategy&&Mt.createElement(qe,{accounts:o,application:a,clusterField:"targetCluster",component:r,onComponentUpdate:l,singleRegion:"true"}),Mt.createElement(Me,{label:"Target"},Mt.createElement(We,{model:{target:r.target},onChange:e=>s({target:e}),options:Ve.TARGET_LIST})),Mt.createElement(Me,{label:"Capacity"},Mt.createElement("div",{className:"radio"},Mt.createElement("label",null,Mt.createElement("input",{checked:!1!==r.useSourceCapacity,onChange:()=>s({useSourceCapacity:!0,capacity:void 0}),type:"radio"}),"Copy the capacity from the current server group ",Mt.createElement(t,{id:"serverGroupCapacity.useSourceCapacityTrue"}))),Mt.createElement("div",{className:"radio"},Mt.createElement("label",null,Mt.createElement("input",{checked:!1===r.useSourceCapacity,onChange:()=>s({useSourceCapacity:!1}),type:"radio"}),"Let me specify the capacity ",Mt.createElement(t,{id:"serverGroupCapacity.useSourceCapacityFalse"})))),!1===r.useSourceCapacity&&Mt.createElement(Mt.Fragment,null,Mt.createElement("div",{className:"form-group"},Mt.createElement("div",{className:"col-md-2 col-md-offset-3"},"Min"),Mt.createElement("div",{className:"col-md-2"},"Max"),Mt.createElement("div",{className:"col-md-2"},"Desired")),Mt.createElement("div",{className:"form-group"},$l.map(e=>{var t,a;return Mt.createElement("div",{className:"col-md-2",style:"min"===e?{marginLeft:"25%"}:void 0,key:e},Mt.createElement("input",{className:"form-control input-sm",onChange:t=>s({capacity:{...r.capacity,[e]:""===t.target.value?void 0:Number(t.target.value)}}),required:!0,type:"number",value:null!=(a=null==(t=r.capacity)?void 0:t[e])?a:""}))}))),Mt.createElement(Me,{label:"Traffic",helpKey:"aws.serverGroup.traffic"},Mt.createElement("div",{className:"checkbox"},Mt.createElement("label",null,Mt.createElement("input",{checked:!(r.suspendedProcesses||[]).includes("AddToLoadBalancer"),onChange:()=>(e=>{const t=r.suspendedProcesses?[...r.suspendedProcesses]:[],a=t.indexOf(e);-1===a?t.push(e):t.splice(a,1),s({suspendedProcesses:t})})("AddToLoadBalancer"),type:"checkbox"}),"Send client requests to new instances"))),Mt.createElement(Me,{label:"AMI Block Device Mappings"},Mt.createElement("div",{className:"radio"},Mt.createElement("div",null,Mt.createElement("label",null,Mt.createElement("input",{checked:"source"===d,name:"blockDeviceMappingsSource",onChange:()=>m("source"),type:"radio"}),"Copy from current server group ",Mt.createElement(t,{id:"aws.blockDeviceMappings.useSource"}))),Mt.createElement("div",null,Mt.createElement("label",null,Mt.createElement("input",{checked:"ami"===d,name:"blockDeviceMappingsSource",onChange:()=>m("ami"),type:"radio"}),"Prefer AMI block device mappings ",Mt.createElement(t,{id:"aws.blockDeviceMappings.useAMI"}))),Mt.createElement("div",null,Mt.createElement("label",null,Mt.createElement("input",{checked:"default"===d,name:"blockDeviceMappingsSource",onChange:()=>m("default"),type:"radio"}),"Defaults for selected instance type ",Mt.createElement(t,{id:"aws.blockDeviceMappings.useDefaults"}))))),a.attributes.platformHealthOnlyShowOverride&&Mt.createElement(Me,{label:"Task Completion"},Mt.createElement(je,{interestingHealthProviderNames:r.interestingHealthProviderNames||[],onChange:e=>s({interestingHealthProviderNames:e}),platformHealthType:"Amazon"})),Mt.createElement(Ze,{command:r,fieldColumns:"6",onFieldChange:(e,t)=>{ia(r,e,t),l()},onStrategyChange:()=>l()}))},accountExtractor:e=>[e.context.credentials],validators:[{type:"requiredField",fieldName:"targetCluster",fieldLabel:"cluster"},{type:"requiredField",fieldName:"target"},{type:"requiredField",fieldName:"region"},{type:"requiredField",fieldName:"credentials",fieldLabel:"account"}]};function Vl(){Re.pipeline.registerStage(Ul)}Vl();const Hl=[{label:"Newest Function Version",value:"$LATEST",description:"Delete the most recently deployed function version when this stage starts."},{label:"Previous Function Version",value:"$PREVIOUS",description:"Delete the second-most recently deployed function version when this stage starts."},{label:"Older Than N",value:"$MOVING",description:"Delete all version but the N most recent versions."},{label:"Provide Version Number",value:"$PROVIDED",description:"Provide a specific version number to delete."},{label:"All Function Versions",value:"$ALL",description:"Delete all function versions and function infrastructure. This will completely delete the Lambda function."}];class ql extends Mt.Component{constructor(e){super(e);const{value:t}=this.props,a=Hl.filter(e=>e.value===t)[0];this.state={label:a.label,value:a.value,description:a.description}}render(){return Mt.createElement("div",null,Mt.createElement("b",null," ",this.state.label," "),Mt.createElement("br",null),Mt.createElement("small",null," ",this.state.description," "))}}function Wl(e){const{values:a}=e.formik,{functions:n}=e.application,{result:l,status:o}=u(()=>i.listAccounts("aws"),[],[]),c=a.account&&a.region?n.data.filter(e=>e.account===a.account).filter(e=>e.region===a.region).map(e=>e.functionName):[];return Mt.createElement("div",{className:"form-horizontal"},Mt.createElement(r,{label:"Account",name:"account",onChange:(t,a)=>{e.formik.setFieldValue("region",null),e.formik.setFieldValue("functionName",null),e.formik.setFieldValue(t,a)},required:!0,input:e=>Mt.createElement(s,{...e,clearable:!1,isLoading:"PENDING"===o,stringOptions:l.map(e=>e.name)})}),Mt.createElement(r,{label:"Region",name:"region",onChange:(t,a)=>{e.formik.setFieldValue("functionName",null),e.formik.setFieldValue(t,a)},input:e=>Mt.createElement(s,{clearable:!1,disabled:!a.account,placeholder:a.account?"Select...":"Select an Account...",...e,isLoading:"PENDING"===o,stringOptions:l.filter(e=>e.name===a.account).flatMap(e=>e.regions).map(e=>e.name)})}),Mt.createElement(r,{label:"Function Name",name:"functionName",input:e=>Mt.createElement(s,{clearable:!1,disabled:!(a.account&&a.region),placeholder:a.account&&a.region?"Select...":"Select an Account and Region...",...e,stringOptions:c})}),Mt.createElement(r,{label:"Target Version",name:"version",input:t=>Mt.createElement(s,{...t,clearable:!1,options:Hl,optionRenderer:t=>Mt.createElement(ql,{config:e,value:t.value,showingDetails:!0})})}),"$PROVIDED"===a.version?Mt.createElement(r,{label:"Version Number",name:"versionNumber",input:e=>Mt.createElement(s,{...e,clearable:!1,stringOptions:n.data.filter(e=>e.account===a.account).filter(e=>e.region===a.region).filter(e=>e.functionName===a.functionName).flatMap(e=>Object.values(e.revisions).sort(function(e,t){return t-e})).filter(e=>"$LATEST"!==e)})}):null,"$MOVING"===a.version?Mt.createElement(r,{name:"retentionNumber",help:Mt.createElement(t,{content:"The number of Lambda versions to retain"}),label:"Prior Versions to Retain",input:e=>Mt.createElement(d,{...e,min:1,max:100})}):null)}function jl(e){const{stage:t,name:a,current:n}=e;return Mt.createElement($e,{name:a,current:n},Mt.createElement(Ue,{stage:t,message:t.outputs.failureMessage}),Mt.createElement("div",null,Mt.createElement("p",null," ",Mt.createElement("b",null," Status: ")," ","done"===t.outputs.deleteTask?"COMPLETE":t.outputs.deleteTask," "),Mt.createElement("p",null," ",Mt.createElement("b",null," Deleted Version: ")," ",t.outputs["deleteTask:deleteVersion"]?t.outputs["deleteTask:deleteVersion"]:"N/A"," ")))}function Zl(e){const t=new n(e);return t.field("account","Account Name").required(),t.field("region","Region").required(),t.field("functionName","Lambda Function Name").required(),t.field("version","Lambda Function Version").required(),t.validateForm()}(jl||(jl={})).title="Delete Lambda Stage";const _l={key:"Aws.LambdaDeleteStage",label:"AWS Lambda Delete",description:"Delete an AWS Lambda Function",component:function(e){return Mt.createElement("div",{className:"DeleteLambdaStageConfig"},Mt.createElement(_e,{...e,validate:Zl,onChange:e.updateStage,render:e=>Mt.createElement(Wl,{...e})}))},executionDetailsSections:[jl,Oe],validateFn:Zl};function Kl(){e.feature.lambdaAdditionalStages&&Re.pipeline.registerStage(_l)}const Yl=e=>{const{stage:t,updateStageField:a}=e,n=t.changeSetName||"ChangeSet-${execution['id']}";return Mt.createElement("div",null,Mt.createElement("hr",null),Mt.createElement("h4",null,"ChangeSet Configuration"),Mt.createElement(Me,{label:"ChangeSet Name"},Mt.createElement(l,{className:"form-control",type:"text",value:n,onChange:e=>{return t=e.target.value,void a({changeSetName:t});var t}})),Mt.createElement(Me,{label:"Execute ChangeSet"},Mt.createElement(o,{checked:t.executeChangeSet,onChange:e=>{return t=e.target.checked,void a({executeChangeSet:t});var t}})),t.executeChangeSet&&Mt.createElement(Me,{label:"If ChangeSet contains a replacement",helpKey:"aws.cloudformation.changeSet.options"},Mt.createElement(s,{clearable:!1,value:t.actionOnReplacement,options:[{value:"ask",label:"ask"},{value:"skip",label:"skip it"},{value:"execute",label:"execute it"},{value:"fail",label:"fail stage"}],onChange:e=>{return t=e.target.value,void a({actionOnReplacement:t});var t}})))},Xl=["CAPABILITY_IAM","CAPABILITY_NAMED_IAM","CAPABILITY_AUTO_EXPAND"];function Jl(e){return"string"==typeof e?e:null==e?"":Je(Array.isArray(e)?e:[e])}function Ql({application:e,pipeline:t,stage:a,updateStageField:n}){var r,l;const[o,c]=Mt.useState([]),[d,m]=Mt.useState([]),[u,p]=Mt.useState(()=>({refId:a.refId,rawTemplateBody:Jl(a.templateBody)})),h=a.source||"text",g=a.credentials||a.account||"",v=[g,...o.map(e=>e.name)].filter((e,t,a)=>e&&a.indexOf(e)===t),f=[...a.regions||[],...d].filter((e,t,a)=>e&&a.indexOf(e)===t);u.refId!==a.refId&&p({refId:a.refId,rawTemplateBody:Jl(a.templateBody)}),Mt.useEffect(()=>{var t,r;const l={},i={capabilities:[],cloudProvider:"aws",parameters:{},regions:(null==(t=e.defaultRegions)?void 0:t.aws)?[e.defaultRegions.aws]:[],source:"text",tags:{}};Object.entries(i).forEach(([e,t])=>{void 0===a[e]&&(l[e]=t)});const s=null==(r=e.defaultCredentials)?void 0:r.aws;s&&(void 0===a.credentials&&(l.credentials=s),void 0===a.account&&(l.account=s)),Object.keys(l).length&&n(l)},[]),Mt.useEffect(()=>{let e=!0;return Promise.all([i.getAllAccountDetailsForProvider("aws"),i.getUniqueAttributeForAllAccounts("aws","regions")]).then(([t,a])=>{e&&(c(t),m(a))}),()=>{e=!1}},[]);return Mt.createElement("div",{className:"container-fluid form-horizontal"},Mt.createElement("h4",null,"Basic Settings"),Mt.createElement(Me,{label:"Account"},Mt.createElement(Te,{accounts:v,name:"credentials",onChange:e=>n({credentials:e.target.value,account:e.target.value}),provider:"aws",value:g})),Mt.createElement(Me,{label:"Regions"},Mt.createElement(Ce,{inline:!0,name:"regions",onChange:e=>n({regions:e.target.value}),showSelectAll:!0,stringOptions:f,value:a.regions||[]})),Mt.createElement("h4",null,"Template Configuration"),Mt.createElement(Me,{label:"Stack name"},Mt.createElement("input",{className:"form-control input-sm",name:"stackName",onChange:e=>n({stackName:e.target.value}),required:!0,type:"text",value:a.stackName||""}),Mt.createElement("label",null,Mt.createElement("input",{checked:!!a.isChangeSet,name:"isChangeSet",onChange:e=>n({isChangeSet:e.target.checked}),type:"checkbox"})," ",Mt.createElement("strong",null,"Create CloudFormation ChangeSet"))),Mt.createElement(Me,{label:"IAM role ARN"},Mt.createElement("input",{className:"form-control input-sm",name:"roleARN",onChange:e=>n({roleARN:e.target.value}),type:"text",value:a.roleARN||""})),Mt.createElement(Me,{label:"Source",helpKey:"aws.cloudformation.source"},Mt.createElement("label",null,Mt.createElement("input",{checked:"text"===h,name:"source",onChange:()=>n({source:"text",stackArtifactId:null,stackArtifactAccount:null,stackArtifact:null}),type:"radio",value:"text"})," ","Text"),Mt.createElement("br",null),Mt.createElement("label",null,Mt.createElement("input",{checked:"artifact"===h,name:"source",onChange:()=>n({source:"artifact"}),type:"radio",value:"artifact"})," ","Artifact")),"text"===h&&Mt.createElement(Ke,{onChange:(e,t)=>{p({refId:a.refId,rawTemplateBody:e}),null!==t&&n({templateBody:t})},value:u.rawTemplateBody}),"artifact"===h&&Mt.createElement(Ye,{artifact:a.stackArtifact,excludedArtifactTypePatterns:[],expectedArtifactId:a.stackArtifactId,fieldColumns:8,helpKey:"aws.cloudformation.expectedArtifact",label:"Expected Artifact",onArtifactEdited:e=>{n({stackArtifactId:null,stackArtifact:e})},onExpectedArtifactSelected:e=>{var t;n({stackArtifactId:e.id,stackArtifactAccount:(null==(t=e.matchArtifact)?void 0:t.artifactAccount)||null,stackArtifact:null})},pipeline:t,stage:a}),a.isChangeSet&&Mt.createElement(Yl,{stage:a,updateStageField:n}),Mt.createElement("hr",null),Mt.createElement(Me,{label:"Parameters",fieldColumns:6},Mt.createElement(Xe,{addButtonLabel:"Add parameter",model:null!=(r=a.parameters)?r:{},onChange:e=>n({parameters:e}),pipeline:t,valueCanContainSpel:!0})),Mt.createElement("hr",null),Mt.createElement(Me,{label:"Tags",fieldColumns:6},Mt.createElement(Xe,{addButtonLabel:"Add tag",model:null!=(l=a.tags)?l:{},onChange:e=>n({tags:e}),pipeline:t,valueCanContainSpel:!0})),Mt.createElement("hr",null),Mt.createElement(Me,{label:"Capabilities",fieldColumns:6},Mt.createElement(s,{multi:!0,name:"capabilities",onChange:e=>n({capabilities:e.target.value}),stringOptions:Xl,value:a.capabilities})))}class ei extends zt.Component{constructor(e){super(e)}render(){const{stage:e,current:t,name:a}=this.props;return zt.createElement($e,{name:a,current:t},zt.createElement(Qe,{item:e}),zt.createElement(Ue,{stage:e,message:e.failureMessage}))}}ei.title="Task Status";class ti{constructor(e){this.executionService=e}evaluateExecution(e,t,a,n){const r=e=>{const t=e.stages.find(e=>e.id===a.id);return t&&"RUNNING"!==t.status};return this.executionService.patchExecution(t.id,a.id,{changeSetExecutionChoice:n}).then(()=>this.executionService.waitUntilExecutionMatches(t.id,r)).then(t=>this.executionService.updateExecution(e,t))}}const ai=e=>{const{execution:t,stage:a,application:n}=e,{executionService:r}=De(),[l,i]=Rt(!1),[s,o]=Rt(""),[c,d]=Rt(!1),m=e=>{i(!0),o(e),d(!1),new ti(r).evaluateExecution(n,t,a,e)},u=e=>a.judgmentStatus===e||l&&s===e;return Mt.createElement("div",null,Mt.createElement("div",null,Mt.createElement("p",null,"This ChangeSet contains a replacement, which means there will be ",Mt.createElement("b",null,"potential data loss")," when executed."),Mt.createElement("p",null,"How do you want to proceed?"),Mt.createElement("div",{className:"action-buttons"},Mt.createElement("button",{className:"btn btn-danger",onClick:()=>{m("execute")},disabled:l},u("Execute")&&Mt.createElement(ne,{mode:"circular"}),a.context.stopButtonLabel||"Execute"),Mt.createElement("button",{className:"btn btn-primary",disabled:l,onClick:()=>{m("skip")}},u("Skip")&&Mt.createElement(ne,{mode:"circular"}),a.context.skipButtonLabel||"Skip"),Mt.createElement("button",{className:"btn btn-primary",disabled:l,onClick:()=>{m("fail")}},u("Fail")&&Mt.createElement(ne,{mode:"circular"}),a.context.FailButtonLabel||"Fail"))),c&&Mt.createElement("div",{className:"error-message"},"There was an error recording your decision. Please try again."))};class ni extends zt.Component{constructor(e){super(e)}render(){const{application:e,execution:t,stage:a,current:n,name:r}=this.props,l=a.context.changeSetContainsReplacement,i=l&&a.isRunning&&"ask"===a.context.actionOnReplacement,s=a.context.isChangeSet;return zt.createElement($e,{name:r,current:n},i?zt.createElement(ai,{key:a.refId,application:e,execution:t,stage:a}):zt.createElement("div",null,s?zt.createElement("div",null,zt.createElement("dl",{className:"no-margin"},zt.createElement("dt",null,"ChangeSet Name"),zt.createElement("dd",null,a.context.changeSetName),zt.createElement("dt",null,"Replacement"),zt.createElement("dd",null,String(l)),a.context.changeSetExecutionChoice&&zt.createElement("div",null,zt.createElement("dt",null,"Judgment"),zt.createElement("dd",null,a.context.changeSetExecutionChoice),zt.createElement("dt",null,"Judged By"),zt.createElement("dd",null,a.context.lastModifiedBy)))):zt.createElement("div",null,"No changeSets found")))}}ni.title="Change Set Execution";class ri extends zt.Component{render(){if(!this.props.executionMarker)return zt.createElement(et,{...this.props});const{stage:e}=this.props;if(e.isRunning&&e.stages[0].context.changeSetContainsReplacement&&"ask"===e.stages[0].context.actionOnReplacement){const t=zt.createElement("div",null,zt.createElement("div",null,zt.createElement("b",null,e.name)),zt.createElement(ai,{stage:e.masterStage,application:this.props.application,execution:this.props.execution}));return zt.createElement(re,{template:t},this.props.children)}const t=zt.createElement(Va,{id:e.id},e.name);return zt.createElement(Ha,{placement:"top",overlay:t},zt.createElement("span",null,this.props.children))}}class li extends zt.Component{constructor(e){super(e)}render(){return this.props.stage.isRunning&&this.props.stage.stages[0].context.changeSetContainsReplacement&&"ask"===this.props.stage.stages[0].context.actionOnReplacement?(this.props.stage.requiresAttention=!0,zt.createElement("span",{className:"fa fa-child"})):null}}function ii(){Re.pipeline.registerStage({label:"Deploy (CloudFormation Stack)",description:"Deploy a CloudFormation Stack",key:"deployCloudFormation",cloudProvider:"aws",component:Ql,useCustomTooltip:!0,executionDetailsSections:[ei,ni],executionLabelComponent:ri,producesArtifacts:!0,supportsCustomTimeout:!0,validators:[],markerIcon:li,accountExtractor:e=>e.account?[e.account]:[],configAccountExtractor:e=>e.account?[e.account]:[],artifactExtractor:at.accumulateArtifacts(["stackArtifactId","requiredArtifactIds"]),artifactRemover:tt.removeArtifactFromFields(["stackArtifactId","requiredArtifactIds"])})}function si(e,t){return Object.entries(t).forEach(([t,a])=>{var n;e[t]||ma(n=a)&&(jt(n)||""===n)||(e[t]=a)}),e}function oi(e){const{values:a}=e.formik,n=()=>{const t=le.getClusterName(e.application.name,a.stackName,a.detailName),n=a.functionUid;e.formik.setFieldValue("functionName",`${t}-${n}`)},{result:c,status:d}=u(()=>i.listAccounts("aws"),[],[]);return Mt.createElement("div",null,Mt.createElement(r,{label:"Account",name:"account",input:e=>Mt.createElement(s,{...e,clearable:!1,isLoading:"PENDING"===d,stringOptions:c.map(e=>e.name)})}),Mt.createElement(r,{label:"Region",name:"region",onChange:t=>{e.formik.setFieldValue("enableLambdaAtEdge",!1),e.formik.setFieldValue("region",t)},input:e=>Mt.createElement(s,{...e,clearable:!1,isLoading:"PENDING"===d,stringOptions:c.filter(e=>e.name===a.account).flatMap(e=>e.regions).map(e=>e.name)})}),Mt.createElement(r,{name:"functionUid",label:"Function Name",onChange:t=>{e.formik.setFieldValue("functionUid",t),n()},help:Mt.createElement(t,{id:"aws.function.name"}),input:e=>Mt.createElement(l,{...e})}),Mt.createElement(r,{name:"stackName",label:"Stack",help:Mt.createElement(t,{content:kn}),onChange:t=>{e.formik.setFieldValue("stackName",t),n()},input:e=>Mt.createElement(l,{...e})}),Mt.createElement(r,{name:"detailName",label:"Detail",help:Mt.createElement(t,{content:Tn}),onChange:t=>{e.formik.setFieldValue("detailName",t),n()},input:e=>Mt.createElement(l,{...e})}),Mt.createElement(r,{name:"aliasNames",label:"Alias Name",help:Mt.createElement(t,{content:"AWS Lambda aliases are like a pointer to a specific function version. Users can access the function version using the alias Amazon Resource Name (ARN). Input the alias name and select `Create option ALIAS-INPUT` to add the alias."}),input:t=>Mt.createElement(nt,{...t,multi:!0,clearable:!1,placeholder:"Input Alias Name...",onChange:t=>{var a,n;a=t,n="aliases",e.formik.setFieldValue(n,a.map(e=>e.value))},value:a.aliases?a.aliases.map(e=>({value:e,label:e})):[]})}),Mt.createElement(r,{name:"runtime",label:"Runtime",help:Mt.createElement(t,{id:"aws.function.runtime"}),input:e=>Mt.createElement(s,{...e,stringOptions:Sn,clearable:!0})}),Mt.createElement(r,{name:"s3bucket",label:"S3 Bucket",help:Mt.createElement(t,{id:"aws.function.s3bucket"}),input:e=>Mt.createElement(l,{...e,placeholder:"S3 bucket name"})}),Mt.createElement(r,{name:"s3key",label:"S3 Key",help:Mt.createElement(t,{id:"aws.function.s3key"}),input:e=>Mt.createElement(l,{...e,placeholder:"object.zip"})}),Mt.createElement(r,{name:"handler",label:"Handler",help:Mt.createElement(t,{id:"aws.function.handler"}),input:e=>Mt.createElement(l,{...e,placeholder:"filename.method"})}),Mt.createElement(r,{name:"publish",label:"Publish",help:Mt.createElement(t,{id:"aws.function.publish"}),input:e=>Mt.createElement(o,{...e})}))}function ci(e){const{securityGroupReader:t}=De(),{values:a}=e.formik,n=t=>{e.formik.setFieldValue("securityGroupIds",null),e.formik.setFieldValue("subnetIds",null),e.formik.setFieldValue("vpcId",t.target.value)},{result:l,status:i}=u(()=>m.listNetworksByProvider("aws"),[],[]),{result:o}=u(()=>p.listSubnetsByProvider("aws"),[],[]),{result:c}=u(()=>t.getAllSecurityGroups(),void 0,[]),d=a.account&&a.region&&"PENDING"!==i?l.filter(e=>!1===e.deprecated).filter(e=>e.account===a.account).filter(e=>e.region===a.region).map(e=>e.id):[],g=Vt(o.filter(e=>e.vpcId===a.vpcId),"id"),v=a.account&&a.region&&a.vpcId?c[a.account].aws[a.region].filter(e=>e.vpcId===a.vpcId).map(e=>({value:e.id,label:e.name})):[];return Mt.createElement("div",null,Mt.createElement(r,{name:"vpcId",label:"VPC Id",input:e=>Mt.createElement(s,{...e,onChange:n,isLoading:"PENDING"===i,stringOptions:d,clearable:!0})}),Mt.createElement("div",{className:"form-group"},Mt.createElement("div",{className:"col-md-4 sm-label-right"},Mt.createElement("b",null,"Subnets ")),0===g.length?Mt.createElement("div",{className:"form-control-static"},"No subnets found in the selected account/region/VPC "):Mt.createElement("div",{className:"col-md-6"},Mt.createElement(h,{multi:!0,options:g.map(e=>{return{value:(t=e).id,label:t.id};var t}),value:a.subnetIds,onChange:t=>{const a=t.map(e=>e.value);e.formik.setFieldValue("subnetIds",a)}}))),Mt.createElement("div",{className:"form-group"},Mt.createElement("div",{className:"col-md-4 sm-label-right"},Mt.createElement("b",null,"Security Groups ")),0===v.length?Mt.createElement("div",{className:"form-control-static"},"No security groups found in the selected account/region/VPC "):Mt.createElement("div",{className:"col-md-6"},Mt.createElement(h,{multi:!0,options:v,value:a.securityGroupIds,onChange:t=>{const a=t.map(e=>e.value);e.formik.setFieldValue("securityGroupIds",a)}}))))}function di(){return Mt.createElement(r,{name:"role",label:"Role ARN",input:e=>Mt.createElement(l,{...e,placeholder:"Enter role ARN",name:"role"})})}function mi(e){const{values:a}=e.formik;return Mt.createElement("div",null,Mt.createElement(r,{name:"triggerArns",label:"Event ARNs",help:Mt.createElement(t,{content:"The resource ARNs for Lambda event trigger sources. Triggers created here will only be applied to the higher level function, and will NOT be applied to function aliases. Input the entire ARN and select `Create option TRIGGER-ARN-INPUT` to add the ARN."}),input:t=>Mt.createElement(nt,{...t,multi:!0,placeholder:"Input ARN...",onChange:t=>{var a,n;a=t,n="triggerArns",e.formik.setFieldValue(n,a.map(e=>e.value))},value:a.triggerArns?a.triggerArns.map(e=>({value:e,label:e})):[]})}),Mt.createElement(r,{name:"batchsize",label:"Event Batch Size",input:e=>Mt.createElement(d,{...e,min:1,max:1e3})}))}const ui="Validate AWS Lambda function configuration against Lambda@Edge requirements. This will not enable Lambda@Edge on this function. ";function pi(e){const{values:a}=e.formik;return"us-east-1"!==a.region?Mt.createElement("div",{className:"horizontal center"},"Lambda@Edge is only available in region us-east-1."):Mt.createElement("div",null,Mt.createElement(r,{name:"enableLambdaAtEdge",label:"Enable Lambda@Edge Validation",help:Mt.createElement(t,{content:ui}),input:e=>Mt.createElement(o,{...e})}))}function hi(e){const{values:a,errors:n}=e.formik,i=ba({well:!0,"alert-danger":!!n.functionName,"alert-info":!n.functionName});return Mt.createElement("div",{className:"form-horizontal"},Mt.createElement("div",{className:i},Mt.createElement("strong",null,"Your function will be named: "),Mt.createElement(t,{id:"aws.function.name"}),Mt.createElement("span",null,a.functionName?a.functionName:e.application.name),Mt.createElement(r,{name:"functionName",input:()=>null})),Mt.createElement("h4",null,"Basic Settings"),Mt.createElement(oi,{...e}),Mt.createElement("h4",null," Execution Role "),Mt.createElement(di,null),Mt.createElement("h4",null," Environment "),!0!==a.enableLambdaAtEdge?Mt.createElement(Mt.Fragment,null,Mt.createElement(r,{name:"envVariables",label:"Env Variables",input:e=>Mt.createElement(c,{...e,allowEmptyValues:!0,addButtonLabel:"Add"})}),Mt.createElement(r,{name:"encryptionKMSKeyArn",label:"Key ARN",help:Mt.createElement(t,{id:"aws.function.kmsKeyArn"}),input:e=>Mt.createElement(l,{...e})})):Mt.createElement("div",{className:"horizontal center"},"Environment variables not available with Lambda@Edge functions."),Mt.createElement("h4",null," Tags "),Mt.createElement(r,{name:"tags",input:e=>Mt.createElement(c,{...e,allowEmptyValues:!1,addButtonLabel:"Add"})}),Mt.createElement("h4",null," Settings "),Mt.createElement(r,{name:"description",label:"Description",input:e=>Mt.createElement(l,{...e})}),Mt.createElement(r,{name:"layers",label:"Layer ARNs",help:Mt.createElement(t,{content:"The resource ARNs for Lambda layer. Input the entire ARN and select `Create option TRIGGER-ARN-INPUT` to add the ARN."}),input:t=>Mt.createElement(nt,{...t,multi:!0,placeholder:"Layer ARN...",onChange:t=>{var a,n;a=t,n="layers",e.formik.setFieldValue(n,a.map(e=>e.value))},value:a.layers?a.layers.map(e=>({value:e,label:e})):[]})}),Mt.createElement(r,{name:"reservedConcurrentExecutions",label:"Reserved Concurrency",help:Mt.createElement(t,{content:"The total number of current executions of your Lambda function that can be instantiated at any time."}),input:e=>Mt.createElement(d,{...e,min:0,max:3e3})}),Mt.createElement(r,{name:"memorySize",label:"Memory (MB)",help:Mt.createElement(t,{id:"aws.functionBasicSettings.memorySize"}),input:e=>Mt.createElement(d,{...e,min:128,max:!0===a.enableLambdaAtEdge?128:3008})}),Mt.createElement(r,{name:"timeout",label:"Timeout (seconds)",help:Mt.createElement(t,{id:"aws.functionBasicSettings.timeout"}),input:e=>Mt.createElement(d,{...e,min:1,max:!0===a.enableLambdaAtEdge?5:900})}),Mt.createElement(pi,{...e}),Mt.createElement("h4",null," Network "),!0!==a.enableLambdaAtEdge?Mt.createElement(ci,{...e}):Mt.createElement("div",{className:"horizontal center"},"VPC configuration not available with Lambda@Edge functions."),Mt.createElement("h4",null," Event Triggers "),Mt.createElement(mi,{...e}),Mt.createElement("h4",null," Debugging and Error Handling "),"Dead Letter Config",Mt.createElement(r,{name:"deadLetterConfig.targetArn",label:"Target ARN",help:Mt.createElement(t,{id:"aws.function.deadletterqueue"}),input:e=>Mt.createElement(l,{...e})}),"X-Ray Tracing",Mt.createElement(r,{name:"tracingConfig.mode",label:"Mode",help:Mt.createElement(t,{id:"aws.function.tracingConfig.mode"}),input:e=>Mt.createElement(s,{...e,stringOptions:["Active","PassThrough"],clearable:!0})}))}function gi(e){const t=new n(e);return t.field("runtime","Runtime").required(),t.field("s3key","S3 Object Key").required(),t.field("handler","Handler").required(),t.field("functionUid","Function Name").required(),t.field("stackName","Stack Name").optional().withValidators(Nn),t.field("detailName","Detail Name").optional().withValidators(Nn),t.field("s3bucket","S3 Bucket Name").required().withValidators(yn),t.field("role","Role ARN").required().withValidators(En),t.field("triggerArns","Trigger ARNs").optional().withValidators((e,t)=>e.map(e=>bn(e,e)).every(e=>void 0===e)?void 0:"Invalid ARN. Event ARN must match regular expression: /^arn:aws[a-zA-Z-]?:[a-zA-Z_0-9.-]+:./"),t.validateForm()}function vi(e){const{stage:t,current:a,name:n}=e;return Mt.createElement($e,{name:n,current:a},Mt.createElement(Ue,{stage:t,message:t.outputs.failureMessage}),Mt.createElement("div",null,Mt.createElement("p",null," ",Mt.createElement("b",null," Function Name: ")," ",t.outputs.functionName?t.outputs.functionName:"N/A"," "),Mt.createElement("p",null," ",Mt.createElement("b",null," Function ARN: ")," ",t.outputs.functionARN?t.outputs.functionARN:"N/A"," ")))}(vi||(vi={})).title="Lambda Deployment Stage";const fi={key:"Aws.LambdaDeploymentStage",label:"AWS Lambda Deployment",description:"Create a Single AWS Lambda Function",component:function(e){const t={role:"",runtime:"",s3key:"",s3bucket:"",handler:"",functionName:"",publish:!1,tags:{},memorySize:128,description:"",credentials:"",cloudProvider:"aws",region:"",envVariables:{},tracingConfig:{mode:"PassThrough"},kmskeyArn:"",vpcId:"",subnetIds:[],securityGroupIds:[],timeout:3,deadLetterConfig:{targetArn:""},operation:"",targetGroups:""};return Mt.createElement("div",{className:"LambdaDeploymentConfig"},Mt.createElement(_e,{...e,stage:si(e.stage,t),validate:gi,onChange:e.updateStage,render:e=>Mt.createElement(hi,{...e})}))},executionDetailsSections:[vi,Oe],validateFn:gi};function Ei(){e.feature.lambdaAdditionalStages&&Re.pipeline.registerStage(fi)}const yi=[{label:"Largest",val:"LARGEST",description:"When multiple server groups exist, prefer the server group with the most instances"},{label:"Newest",val:"NEWEST",description:"When multiple server groups exist, prefer the newest"},{label:"Oldest",val:"OLDEST",description:"When multiple server groups exist, prefer the oldest"},{label:"Fail",val:"FAIL",description:"When multiple server groups exist, fail"}],bi=[{fieldName:"credentials",label:"Account",type:"account"},{fieldName:"regions",label:"Region",type:"regions"},{fieldName:"cluster",label:"Cluster"},{fieldName:"selectionStrategy",label:"Server Group Selection",type:"selectionStrategy"},{fieldName:"onlyEnabled",label:"Server Group Filters",type:"onlyEnabled"}],Ci={destroyAsg:[{fieldName:"credentials",label:"Account",type:"account"},{fieldName:"regions",label:"Region",type:"regions"},{fieldName:"cluster",label:"Cluster"},{fieldName:"target",label:"Server Group",type:"target"}],destroyServerGroup:[{fieldName:"credentials",label:"Account",type:"account"},{fieldName:"regions",label:"Region",type:"regions"},{fieldName:"cluster",label:"Cluster"},{fieldName:"target",label:"Server Group",type:"target"}],findAmi:bi,findImage:bi},Ni=[{fieldName:"credentials",label:"Account",type:"account"},{fieldName:"regions",label:"Region",type:"regions"}];function wi(e,t){return"regions"===t.type?(e.regions||[]).join(", "):"account"===t.type?e[t.fieldName]||e.account||"":e[t.fieldName]||""}function Si(e,t,a,n){const{application:r,stage:l,updateStageField:i}=e;if("selectionStrategy"===t.type)return Mt.createElement("select",{className:"form-control input-sm",onChange:e=>i({[t.fieldName]:e.target.value}),value:l[t.fieldName]||yi[0].val},yi.map(e=>Mt.createElement("option",{key:e.val,title:e.description,value:e.val},e.label)));if("onlyEnabled"===t.type)return Mt.createElement("label",{className:"checkbox-inline"},Mt.createElement("input",{checked:!1!==l[t.fieldName],onChange:e=>i({[t.fieldName]:e.target.checked}),type:"checkbox"}),"Only consider enabled Server Groups");if("target"===t.type)return Mt.createElement("select",{className:"form-control input-sm",onChange:e=>i({[t.fieldName]:e.target.value}),value:l[t.fieldName]||""},Mt.createElement("option",{value:""},"Select server group"),Ve.TARGET_LIST.map(e=>Mt.createElement("option",{key:e.val,title:e.description,value:e.val},e.label)));if("account"===t.type)return Mt.createElement("select",{className:"form-control input-sm",name:t.fieldName,onChange:e=>i({[t.fieldName]:e.target.value,account:e.target.value}),value:wi(l,t)},Mt.createElement("option",{value:""},"Select..."),a.map(e=>e.name).sort().map(e=>Mt.createElement("option",{key:e,value:e},e)));if("regions"===t.type)return Mt.createElement(Ce,{inline:!0,name:t.fieldName,onChange:e=>i({[t.fieldName]:e.target.value}),showSelectAll:!0,stringOptions:n,value:l[t.fieldName]||[]});if("cluster"===t.fieldName){const e=He.clusterFilterForCredentialsAndRegion(l.credentials,l.regions),a=He.getClusters([r],e);return Mt.createElement("select",{className:"form-control input-sm cluster-select",onChange:e=>i({[t.fieldName]:e.target.value}),value:l[t.fieldName]||""},Mt.createElement("option",{value:""},"Select a cluster..."),a.map(e=>Mt.createElement("option",{key:e,value:e},e)))}return Mt.createElement("input",{className:"form-control input-sm",onChange:e=>{return a=e.target.value,void("regions"!==t.type?"account"!==t.type?i({[t.fieldName]:a}):i({[t.fieldName]:a,account:a}):i({regions:a.split(",").map(e=>e.trim()).filter(Boolean)}));var a},value:wi(l,t)})}function ki({application:e,stage:t,updateStageField:a}){const n=function(e){return Ci[e.type||e.alias||e.key||""]||Ni}(t),[r,l]=Rt([]),[s,o]=Rt([]);return Lt(()=>{let e=!0;return i.listAccounts("aws").then(t=>e&&l(t)),i.getUniqueAttributeForAllAccounts("aws","regions").then(t=>e&&o(t)),()=>{e=!1}},[]),Lt(()=>{const r={};t.cloudProvider||(r.cloudProvider="aws"),n.some(e=>"regions"===e.type)&&!t.regions&&(r.regions=[]),n.some(e=>"selectionStrategy"===e.type)&&!t.selectionStrategy&&(r.selectionStrategy=yi[0].val),n.some(e=>"selectionStrategy"===e.type)&&void 0===t.onlyEnabled&&(r.onlyEnabled=!0),n.some(e=>"account"===e.type)&&!t.credentials&&e.defaultCredentials.aws&&(r.credentials=e.defaultCredentials.aws,r.account=e.defaultCredentials.aws),!n.some(e=>"regions"===e.type)||t.regions&&t.regions.length||!e.defaultRegions.aws||(r.regions=[e.defaultRegions.aws]),Object.keys(r).length&&a(r)},[e,n,t.cloudProvider,t.credentials,t.onlyEnabled,t.regions,t.selectionStrategy,a]),Mt.createElement("div",{className:"form-horizontal"},n.map(n=>Mt.createElement(Me,{key:n.fieldName,label:n.label},Si({application:e,stage:t,updateStageField:a},n,r,s))))}const Ti={provides:"destroyServerGroup",alias:"destroyAsg",cloudProvider:"aws",component:ki,accountExtractor:e=>[e.context.credentials],configAccountExtractor:e=>[e.credentials],validators:[{type:"targetImpedance",message:"This pipeline will attempt to destroy a server group without deploying a new version into the same cluster."},{type:"requiredField",fieldName:"cluster"},{type:"requiredField",fieldName:"target"},{type:"requiredField",fieldName:"regions"},{type:"requiredField",fieldName:"credentials",fieldLabel:"account"}]};function Ii(){Re.pipeline.registerStage(Ti)}Ii();const Pi={key:"disableServerGroup",provides:"disableServerGroup",alias:"disableAsg",cloudProvider:"aws",component:function(e){const{application:t,pipeline:a,stage:n,stageFieldUpdated:r,updateStageField:l}=e,[s,o]=Rt([]);return Lt(()=>{var e;const a={};"aws"!==n.cloudProvider&&(a.cloudProvider="aws"),!n.credentials&&(null==(e=t.defaultCredentials)?void 0:e.aws)&&(a.credentials=t.defaultCredentials.aws),n.target||(a.target=Ve.TARGET_LIST[0].val),n.isNew&&t.attributes.platformHealthOnlyShowOverride&&t.attributes.platformHealthOnly&&void 0===n.interestingHealthProviderNames&&(a.interestingHealthProviderNames=["Amazon"]),Object.keys(a).length&&l(a)},[]),Lt(()=>{let e=!0;return i.listAccounts("aws").then(t=>e&&o(t)),()=>{e=!1}},[]),Mt.createElement("div",{className:"form-horizontal"},!a.strategy&&Mt.createElement(qe,{accounts:s,application:t,component:n,onComponentUpdate:r}),Mt.createElement(Me,{label:"Target"},Mt.createElement(We,{model:{target:n.target},onChange:e=>l({target:e}),options:Ve.TARGET_LIST})),t.attributes.platformHealthOnlyShowOverride&&Mt.createElement(Me,{label:"Task Completion"},Mt.createElement(je,{interestingHealthProviderNames:n.interestingHealthProviderNames||[],onChange:e=>l({interestingHealthProviderNames:e}),platformHealthType:"Amazon"})))},validators:[{type:"targetImpedance",message:"This pipeline will attempt to disable a server group without deploying a new version into the same cluster."},{type:"requiredField",fieldName:"cluster"},{type:"requiredField",fieldName:"target"},{type:"requiredField",fieldName:"regions"},{type:"requiredField",fieldName:"credentials",fieldLabel:"account"}]};function Ai(){Re.pipeline.registerStage(Pi)}Ai();const Gi={key:"disableCluster",provides:"disableCluster",cloudProvider:"aws",component:function(e){var t,a;const{application:n,pipeline:r,stage:l,stageFieldUpdated:s,updateStageField:o}=e,[c,d]=Rt([]);return Lt(()=>{var e;const t={};"aws"!==l.cloudProvider&&(t.cloudProvider="aws"),!l.credentials&&(null==(e=n.defaultCredentials)?void 0:e.aws)&&(t.credentials=n.defaultCredentials.aws),void 0===l.remainingEnabledServerGroups&&(t.remainingEnabledServerGroups=1),void 0===l.preferLargerOverNewer&&(t.preferLargerOverNewer="false"),l.isNew&&n.attributes.platformHealthOnlyShowOverride&&n.attributes.platformHealthOnly&&void 0===l.interestingHealthProviderNames&&(t.interestingHealthProviderNames=["Amazon"]),Object.keys(t).length&&o(t)},[]),Lt(()=>{let e=!0;return i.listAccounts("aws").then(t=>e&&d(t)),()=>{e=!1}},[]),Mt.createElement("div",{className:"form-horizontal"},!r.strategy&&Mt.createElement(qe,{accounts:c,application:n,component:l,onComponentUpdate:s}),Mt.createElement(Me,{label:"Disable Options"},Mt.createElement("div",{className:"form-inline"},"Keep the"," ",Mt.createElement("input",{className:"form-control input-sm",min:0,onChange:e=>o({remainingEnabledServerGroups:Number(e.target.value)}),required:!0,style:{width:50},type:"number",value:null!=(t=l.remainingEnabledServerGroups)?t:""})," ",Mt.createElement("select",{className:"form-control input-sm",onChange:e=>o({preferLargerOverNewer:e.target.value}),style:{width:100},value:null!=(a=l.preferLargerOverNewer)?a:"false"},Mt.createElement("option",{value:"true"},"largest"),Mt.createElement("option",{value:"false"},"newest"))," ",(m="server group",1===l.remainingEnabledServerGroups?m:`${m}s`)," enabled.")),n.attributes.platformHealthOnlyShowOverride&&Mt.createElement(Me,{label:"Task Completion"},Mt.createElement(je,{interestingHealthProviderNames:l.interestingHealthProviderNames||[],onChange:e=>o({interestingHealthProviderNames:e}),platformHealthType:"Amazon"})));var m},validators:[{type:"requiredField",fieldName:"cluster"},{type:"requiredField",fieldName:"remainingEnabledServerGroups",fieldLabel:"Keep [X] enabled Server Groups"},{type:"requiredField",fieldName:"regions"},{type:"requiredField",fieldName:"credentials",fieldLabel:"account"}]};function xi(){Re.pipeline.registerStage(Gi)}xi();const Di={key:"enableServerGroup",provides:"enableServerGroup",alias:"enableAsg",cloudProvider:"aws",component:function(e){const{application:t,pipeline:a,stage:n,stageFieldUpdated:r,updateStageField:l}=e,[s,o]=Rt([]);return Lt(()=>{var e;const a={};"aws"!==n.cloudProvider&&(a.cloudProvider="aws"),!n.credentials&&(null==(e=t.defaultCredentials)?void 0:e.aws)&&(a.credentials=t.defaultCredentials.aws),n.target||(a.target=Ve.TARGET_LIST[0].val),n.isNew&&t.attributes.platformHealthOnlyShowOverride&&t.attributes.platformHealthOnly&&void 0===n.interestingHealthProviderNames&&(a.interestingHealthProviderNames=["Amazon"]),Object.keys(a).length&&l(a)},[]),Lt(()=>{let e=!0;return i.listAccounts("aws").then(t=>e&&o(t)),()=>{e=!1}},[]),Mt.createElement("div",{className:"form-horizontal"},!a.strategy&&Mt.createElement(qe,{accounts:s,application:t,component:n,onComponentUpdate:r}),Mt.createElement(Me,{label:"Target"},Mt.createElement(We,{model:{target:n.target},onChange:e=>l({target:e}),options:Ve.TARGET_LIST})),t.attributes.platformHealthOnlyShowOverride&&Mt.createElement(Me,{label:"Task Completion"},Mt.createElement(je,{interestingHealthProviderNames:n.interestingHealthProviderNames||[],onChange:e=>l({interestingHealthProviderNames:e}),platformHealthType:"Amazon"})))},validators:[{type:"requiredField",fieldName:"cluster"},{type:"requiredField",fieldName:"target"},{type:"requiredField",fieldName:"regions"},{type:"requiredField",fieldName:"credentials",fieldLabel:"account"}]};function Bi(){Re.pipeline.registerStage(Di)}Bi();const Fi={provides:"findImage",alias:"findAmi",cloudProvider:"aws",component:ki,validators:[{type:"requiredField",fieldName:"cluster"},{type:"requiredField",fieldName:"selectionStrategy",fieldLabel:"Server Group Selection"},{type:"requiredField",fieldName:"regions"},{type:"requiredField",fieldName:"credentials"}]};function zi(){Re.pipeline.registerStage(Fi)}zi();const Mi={key:"findImageFromTags",provides:"findImageFromTags",cloudProvider:"aws",component:function({application:e,pipeline:t,stage:a,updateStageField:n}){var r,l,i,s;const[o,c]=Mt.useState([]),d=[...null!=(r=a.regions)?r:[],...o].filter((e,t,a)=>e&&a.indexOf(e)===t);return Mt.useEffect(()=>{var t;const r={};void 0===a.cloudProvider&&(r.cloudProvider="aws"),void 0===a.regions&&(r.regions=(null==(t=e.defaultRegions)?void 0:t.aws)?[e.defaultRegions.aws]:[]),void 0===a.tags&&(r.tags={}),Object.keys(r).length>0&&n(r)},[]),Mt.useEffect(()=>{let e=!0;return Fe.getRegions("aws").then(t=>{e&&c(t)}),()=>{e=!1}},[]),Mt.createElement("div",{className:"form-horizontal"},Mt.createElement(Me,{label:"Package"},Mt.createElement("input",{className:"form-control input-sm",name:"packageName",onChange:e=>n({packageName:e.target.value}),type:"text",value:null!=(l=a.packageName)?l:""})),Mt.createElement(Me,{label:"Regions"},Mt.createElement(Ce,{inline:!0,name:"regions",onChange:e=>n({regions:e.target.value}),showSelectAll:!0,stringOptions:d,value:null!=(i=a.regions)?i:[]})),Mt.createElement(Me,{label:"Tags"},Mt.createElement(Xe,{allowEmpty:!0,model:null!=(s=a.tags)?s:{},onChange:e=>n({tags:e}),pipeline:t})))},validators:[{type:"requiredField",fieldName:"packageName"},{type:"requiredField",fieldName:"regions"},{type:"requiredField",fieldName:"tags"}]};function Ri(){Re.pipeline.registerStage(Mi)}function Li(e){const{values:t}=e.formik,a=rt(lt.BITBUCKET_FILE,lt.CUSTOM_OBJECT,lt.EMBEDDED_BASE64,lt.REMOTE_BASE64,lt.GCS_OBJECT,lt.GITHUB_FILE,lt.GITLAB_FILE,lt.S3_OBJECT,lt.HTTP_FILE),n=(e,t)=>e[t]?e[t]:{account:"",id:""};return Mt.createElement("div",null,Mt.createElement(r,{name:"timeout",label:"Timeout",input:e=>Mt.createElement(d,{...e,min:0,max:900})}),Mt.createElement(r,{name:"executionCount",label:"Execution Count",input:e=>Mt.createElement(d,{...e,min:0,max:100})}),Mt.createElement(Ye,{artifact:n(t,"payloadArtifact").artifact,excludedArtifactTypePatterns:a,expectedArtifactId:n(t,"payloadArtifact").id,label:"Payload Artifact",onArtifactEdited:t=>{((t,a)=>{e.formik.setFieldValue(`${a}.id`,null),e.formik.setFieldValue(`${a}.artifact`,t),e.formik.setFieldValue(`${a}.account`,t.artifactAccount)})(t,"payloadArtifact")},helpKey:"",onExpectedArtifactSelected:t=>{return a=t.id,n="payloadrtifact",e.formik.setFieldValue(`${n}.id`,a),void e.formik.setFieldValue(`${n}.artifact`,null);var a,n},pipeline:e.pipeline,stage:t}))}function Oi(e){const{values:t}=e.formik,{functions:a}=e.application,{result:n,status:o}=u(()=>i.listAccounts("aws"),[],[]),c=t.account&&t.region?a.data.filter(e=>e.account===t.account).filter(e=>e.region===t.region).map(e=>e.functionName):[];return Mt.createElement("div",{className:"form-horizontal"},Mt.createElement("h4",null," Basic Settings "),Mt.createElement(r,{label:"Account",name:"account",onChange:t=>{e.formik.setFieldValue("region",null),e.formik.setFieldValue("functionName",null),e.formik.setFieldValue("account",t)},required:!0,input:e=>Mt.createElement(s,{...e,clearable:!1,isLoading:"PENDING"===o,stringOptions:n.map(e=>e.name)})}),Mt.createElement(r,{label:"Region",name:"region",onChange:t=>{e.formik.setFieldValue("functionName",null),e.formik.setFieldValue("region",t)},input:e=>Mt.createElement(s,{clearable:!1,disabled:!t.account,placeholder:t.account?"Select...":"Select an Account...",...e,isLoading:"PENDING"===o,stringOptions:n.filter(e=>e.name===t.account).flatMap(e=>e.regions).map(e=>e.name)})}),Mt.createElement(r,{label:"Function Name",name:"functionName",input:e=>Mt.createElement(s,{clearable:!1,disabled:!(t.account&&t.region),placeholder:t.account&&t.region?"Select...":"Select an Account and Region...",...e,stringOptions:c})}),Mt.createElement(r,{label:"Alias",name:"aliasName",input:e=>Mt.createElement(l,{...e})}),Mt.createElement("h4",null," Invoke Settings "),Mt.createElement(Li,{...e}))}function $i(e){const{stage:t}=e;return Mt.createElement($e,{name:e.name,current:e.current},Mt.createElement(Ue,{stage:t,message:t.outputs.failureMessage}),Mt.createElement("div",null,Mt.createElement("p",null," Function Name: ",t.outputs.functionName?t.outputs.functionName:"N/A"," "),Mt.createElement("p",null," ","Deployed Alias:"," ",t.outputs["deployment:aliasDeployed"]?t.outputs["deployment:aliasDeployed"]:"N/A"," "),Mt.createElement("p",null," ","Deployed Major Version:"," ",t.outputs["deployment:majorVersionDeployed"]?t.outputs["deployment:majorVersionDeployed"]:"N/A"," ")))}function Ui(e){const t=new n(e);return t.field("triggerArns","Trigger ARNs").optional().withValidators((e,t)=>e.map(e=>bn(e,e)).every(e=>void 0===e)?void 0:"Invalid ARN. Event ARN must match regular expression: /^arn:aws[a-zA-Z-]?:[a-zA-Z_0-9.-]+:./"),t.validateForm()}Ri(),($i||($i={})).title="Invoke Lambda Stage";const Vi={key:"Aws.LambdaInvokeStage",label:"AWS Lambda Invoke",description:"Invoke a Lambda function",component:function(e){return Mt.createElement("div",{className:"InvokeLambdaStageConfig"},Mt.createElement(_e,{...e,validate:Ui,onChange:e.updateStage,render:e=>Mt.createElement(Oi,{...e})}))},executionDetailsSections:[$i,Oe],validateFn:Ui};function Hi(){e.feature.lambdaAdditionalStages&&Re.pipeline.registerStage(Vi)}const qi=[{label:"Suspend",value:"suspend"},{label:"Resume",value:"resume"}],Wi=["Launch","Terminate","AddToLoadBalancer","AlarmNotification","AZRebalance","HealthCheck","ReplaceUnhealthy","ScheduledActions"];const ji={label:"Modify Scaling Process",description:"Suspend/Resume Scaling Processes",key:"modifyAwsScalingProcess",alias:"modifyScalingProcess",component:function({application:e,pipeline:t,stage:a,updateStage:n,updateStageField:r}){const[l,s]=Mt.useState([]);return Mt.useEffect(()=>{let e=!0;return i.listAccounts("aws").then(t=>e&&s(t)),()=>{e=!1}},[]),Mt.useEffect(()=>{const t={},n=e.defaultCredentials.aws,l=e.defaultRegions.aws;a.cloudProvider||(t.cloudProvider="aws"),a.processes||(t.processes=[]),a.regions?!a.regions.length&&l&&(t.regions=[l]):t.regions=l?[l]:[],!a.credentials&&n&&(t.credentials=n),a.action||(t.action=qi[0].value),a.target||(t.target=Ve.TARGET_LIST[0].val),void 0===a.suspendProcesses&&void 0===a.resumeProcesses||(t.suspendProcesses=void 0,t.resumeProcesses=void 0),Object.keys(t).length&&r(t)},[e.defaultCredentials.aws,e.defaultRegions.aws,a.action,a.cloudProvider,a.credentials,a.processes,a.regions,a.resumeProcesses,a.suspendProcesses,a.target,r]),Mt.createElement("div",{className:"form-horizontal"},!t.strategy&&Mt.createElement(qe,{accounts:l,application:e,component:{...a},onComponentUpdate:n}),Mt.createElement(Me,{label:"Target"},Mt.createElement("select",{className:"form-control input-sm",name:"target",onChange:e=>r({target:e.target.value}),value:a.target||Ve.TARGET_LIST[0].val},Ve.TARGET_LIST.map(e=>Mt.createElement("option",{key:e.val,title:e.description,value:e.val},e.label)))),Mt.createElement(Me,{label:"Action"},Mt.createElement("select",{className:"form-control input-sm",name:"action",onChange:e=>r({action:e.target.value,suspendProcesses:void 0,resumeProcesses:void 0}),value:a.action||qi[0].value},qi.map(e=>Mt.createElement("option",{key:e.value,value:e.value},e.label)))),Mt.createElement(Me,{label:"Processes"},Mt.createElement(Ce,{name:"processes",onChange:e=>r({processes:e.target.value}),showSelectAll:!0,stringOptions:Wi,value:a.processes||[]})))},validators:[{type:"requiredField",fieldName:"cluster"},{type:"requiredField",fieldName:"target"},{type:"requiredField",fieldName:"action"},{type:"requiredField",fieldName:"regions"},{type:"requiredField",fieldName:"processes"},{type:"requiredField",fieldName:"credentials",fieldLabel:"account"}],cloudProvider:"aws",strategy:!0};function Zi(){Re.pipeline.registerStage(ji)}Zi();const _i=[{label:"Upsert",value:"upsert"},{label:"Delete",value:"delete"}],Ki=["Stopped","Running","Hibernated"];const Yi={label:"Modify Warm Pool",description:"Upsert or delete an Auto Scaling Group warm pool",key:"modifyWarmPool",component:function({application:e,pipeline:t,stage:a,updateStage:n,updateStageField:r}){var l,s;const[o,c]=Mt.useState([]);Mt.useEffect(()=>{let e=!0;return i.listAccounts("aws").then(t=>e&&c(t)),()=>{e=!1}},[]),Mt.useEffect(()=>{const t={},n=e.defaultCredentials.aws,l=e.defaultRegions.aws;a.cloudProvider||(t.cloudProvider="aws"),a.regions?!a.regions.length&&l&&(t.regions=[l]):t.regions=l?[l]:[],!a.credentials&&n&&(t.credentials=n),a.action||(t.action=_i[0].value),a.target||(t.target=Ve.TARGET_LIST[0].val),a.poolState||(t.poolState=Ki[0]),Object.keys(t).length&&r(t)},[e.defaultCredentials.aws,e.defaultRegions.aws,a.action,a.cloudProvider,a.credentials,a.poolState,a.regions,a.target,r]);const d="upsert"===(a.action||_i[0].value);return Mt.createElement("div",{className:"form-horizontal"},!t.strategy&&Mt.createElement(qe,{accounts:o,application:e,component:{...a},onComponentUpdate:n}),Mt.createElement(Me,{label:"Target"},Mt.createElement("select",{className:"form-control input-sm",name:"target",onChange:e=>r({target:e.target.value}),value:a.target||Ve.TARGET_LIST[0].val},Ve.TARGET_LIST.map(e=>Mt.createElement("option",{key:e.val,title:e.description,value:e.val},e.label)))),Mt.createElement(Me,{label:"Action"},Mt.createElement("select",{className:"form-control input-sm",name:"action",onChange:e=>r({action:e.target.value}),value:a.action||_i[0].value},_i.map(e=>Mt.createElement("option",{key:e.value,value:e.value},e.label)))),d&&Mt.createElement(Mt.Fragment,null,Mt.createElement(Me,{label:"Min Size"},Mt.createElement("input",{className:"form-control input-sm",type:"number",min:0,name:"minSize",onChange:e=>r({minSize:Number(e.target.value)}),value:null!=(l=a.minSize)?l:0})),Mt.createElement(Me,{label:"Max Group Prepared Capacity"},Mt.createElement("input",{className:"form-control input-sm",type:"number",min:-1,name:"maxGroupPreparedCapacity",onChange:e=>r({maxGroupPreparedCapacity:Number(e.target.value)}),value:null!=(s=a.maxGroupPreparedCapacity)?s:-1})),Mt.createElement(Me,{label:"Instance State"},Mt.createElement("select",{className:"form-control input-sm",name:"poolState",onChange:e=>r({poolState:e.target.value}),value:a.poolState||Ki[0]},Ki.map(e=>Mt.createElement("option",{key:e,value:e},e)))),Mt.createElement(Me,{label:"Reuse Instances on Scale In"},Mt.createElement("input",{type:"checkbox",checked:!!a.reuseOnScaleIn,onChange:e=>r({reuseOnScaleIn:e.target.checked})}))))},executionConfigSections:["modifyWarmPoolConfig","taskStatus"],validators:[{type:"requiredField",fieldName:"cluster"},{type:"requiredField",fieldName:"target"},{type:"requiredField",fieldName:"action"},{type:"requiredField",fieldName:"regions"},{type:"requiredField",fieldName:"credentials",fieldLabel:"account"}],cloudProvider:"aws",strategy:!0};function Xi(){Re.pipeline.registerStage(Yi)}Xi();const Ji=[{label:"Scale Up",value:"scale_up"},{label:"Scale Down",value:"scale_down"},{label:"Scale to Cluster Size",value:"scale_to_cluster"},{label:"Scale to Exact Size",value:"scale_exact"}],Qi=[{label:"Percentage",value:"pct"},{label:"Incremental",value:"incr"}],es=String.raw`(?:\$\{.+\}|\d+)`;function ts(e){return"string"==typeof e&&/^\$\{[\s\S]+\}$/.test(e)}function as(e,t,a){if(ts(e))return!0;if("number"!=typeof e&&"string"!=typeof e)return!1;const n=Number(e);return Number.isFinite(n)&&n>=0&&Number.isInteger(n)&&(void 0===a||n<=a)}function ns({dataCapacityField:e,maximum:t,name:a,onValidChange:n,resetKey:r,value:l}){const[i,s]=Rt(null!=l?l:"");Lt(()=>s(null!=l?l:""),[r,l]);const o=as(i,0,t);return Mt.createElement("input",{"aria-invalid":!o,className:"form-control input-sm","data-capacity-field":e,inputMode:"numeric",name:a,onChange:e=>{const a=e.target.value;s(a),as(a,0,t)&&n(function(e){return ts(e)||!as(e)?e:Number(e)}(a))},pattern:es,required:!0,value:i})}const rs={key:"resizeServerGroup",provides:"resizeServerGroup",alias:"resizeAsg",cloudProvider:"aws",component:function(e){const{application:t,pipeline:a,stage:n,stageFieldUpdated:r,updateStage:l,updateStageField:s}=e,[o,c]=Rt([]);Lt(()=>{var e,a,r;const l={cloudProvider:"aws"},i={action:"exact"===n.resizeType?"scale_exact":Ji[0].value,capacity:{},resizeType:Qi[0].value,target:Ve.TARGET_LIST[0].val,targetHealthyDeployPercentage:100};Object.entries(i).forEach(([e,t])=>{void 0===n[e]&&(l[e]=t)}),!n.credentials&&(null==(e=t.defaultCredentials)?void 0:e.aws)&&(l.credentials=t.defaultCredentials.aws),(null==(a=n.regions)?void 0:a.length)||(l.regions=(null==(r=t.defaultRegions)?void 0:r.aws)?[t.defaultRegions.aws]:[]),n.isNew&&void 0===n.interestingHealthProviderNames&&t.attributes.platformHealthOnlyShowOverride&&t.attributes.platformHealthOnly&&(l.interestingHealthProviderNames=["Amazon"]),s(l)},[]),Lt(()=>{let e=!0;return i.listAccounts("aws").then(t=>e&&c(t)),()=>{e=!1}},[]);const d=(e,t=n.resizeType||Qi[0].value)=>{if("scale_exact"===e)return void l({action:e,resizeType:"exact",scaleNum:void 0,scalePct:void 0});const a="incr"===t?"incr":"pct",r={action:e,capacity:{},resizeType:a,scaleNum:void 0,scalePct:void 0};"pct"===a?r.scalePct=n.scalePct||0:r.scaleNum=n.scaleNum||0,l(r)};return Mt.createElement("div",{className:"form-horizontal"},!a.strategy&&Mt.createElement(qe,{accounts:o,application:t,component:n,onComponentUpdate:r}),Mt.createElement(Me,{label:"Target"},Mt.createElement(We,{model:{target:n.target},options:Ve.TARGET_LIST,onChange:e=>s({target:e})})),Mt.createElement(Me,{label:"Action",helpKey:"pipeline.config.resizeAsg.action"},Mt.createElement("select",{className:"form-control input-sm",name:"action",onChange:e=>d(e.target.value),required:!0,value:n.action},Ji.map(e=>Mt.createElement("option",{key:e.value,value:e.value},e.label)))),"scale_exact"!==n.action&&Mt.createElement(Mt.Fragment,null,Mt.createElement(Me,{label:"scale_to_cluster"===n.action?"Additional Capacity":"Type"},Mt.createElement("select",{className:"form-control input-sm",name:"resizeType",onChange:e=>d(n.action,e.target.value),required:!0,value:n.resizeType},Qi.map(e=>Mt.createElement("option",{key:e.value,value:e.value},e.label)))),"pct"===n.resizeType&&Mt.createElement(Me,{label:"Resize Percentage"},Mt.createElement(ns,{name:"scalePct",onValidChange:e=>s({scalePct:e}),resetKey:n.refId,value:n.scalePct})),"incr"===n.resizeType&&Mt.createElement(Me,{label:"Resize Count"},Mt.createElement(ns,{name:"scaleNum",onValidChange:e=>s({scaleNum:e}),resetKey:n.refId,value:n.scaleNum})),("scale_up"===n.action||"scale_to_cluster"===n.action)&&Mt.createElement(Me,{label:"Target Healthy Percentage"},Mt.createElement(ns,{maximum:100,name:"targetHealthyDeployPercentage",onValidChange:e=>s({targetHealthyDeployPercentage:e}),resetKey:n.refId,value:n.targetHealthyDeployPercentage}))),"scale_exact"===n.action&&Mt.createElement(Mt.Fragment,null,Mt.createElement(Me,{label:"Capacity"},Mt.createElement("div",{className:"row small"},Mt.createElement("div",{className:"col-md-3"},"Min"),Mt.createElement("div",{className:"col-md-3"},"Max"),Mt.createElement("div",{className:"col-md-3"},"Desired"))),Mt.createElement(Me,{label:"Match Capacity"},Mt.createElement("div",{className:"row"},["min","max","desired"].map(e=>{var t;return Mt.createElement("div",{className:"col-md-3",key:e},Mt.createElement(ns,{dataCapacityField:e,name:`capacity.${e}`,onValidChange:t=>s({capacity:{...n.capacity,[e]:t}}),resetKey:n.refId,value:null==(t=n.capacity)?void 0:t[e]}))}))),Mt.createElement(Me,{label:""},Mt.createElement("em",{className:"subinput-note"},"This is the exact amount to which the target server group will be scaled"))),t.attributes.platformHealthOnlyShowOverride&&Mt.createElement(Me,{label:"Task Completion"},Mt.createElement(je,{interestingHealthProviderNames:n.interestingHealthProviderNames||[],onChange:e=>s({interestingHealthProviderNames:e}),platformHealthType:"Amazon"})))},accountExtractor:e=>[e.context.credentials],configAccountExtractor:e=>[e.credentials],validators:[{type:"targetImpedance",message:"This pipeline will attempt to resize a server group without deploying a new version into the same cluster."},{type:"requiredField",fieldName:"target"},{type:"requiredField",fieldName:"action"},{type:"requiredField",fieldName:"regions"},{type:"requiredField",fieldName:"cluster"},{type:"requiredField",fieldName:"credentials",fieldLabel:"account"},{type:"custom",preventSave:!0,validate:(e,t)=>function(e){var t;if("scale_exact"===e.action){const a=[["min","Minimum"],["max","Maximum"],["desired","Desired"]];for(const[n,r]of a)if(!as(null==(t=e.capacity)?void 0:t[n]))return`${r} capacity must be a nonnegative integer or pipeline expression.`}else{if("pct"===e.resizeType&&!as(e.scalePct))return"Resize percentage must be a nonnegative integer or pipeline expression.";if("incr"===e.resizeType&&!as(e.scaleNum))return"Resize count must be a nonnegative integer or pipeline expression."}return"scale_up"!==e.action&&"scale_to_cluster"!==e.action||as(e.targetHealthyDeployPercentage,0,100)?"":"Target healthy percentage must be an integer from 0 through 100 or pipeline expression."}(t)}]};function ls(){Re.pipeline.registerStage(rs)}ls();const is={key:"rollbackCluster",provides:"rollbackCluster",cloudProvider:"aws",component:function(t){var a,n,r;const{application:l,pipeline:s,stage:o,stageFieldUpdated:c,updateStageField:d}=t,[m,u]=Rt([]);return Lt(()=>{var e;const t={};"aws"!==o.cloudProvider&&(t.cloudProvider="aws"),!o.credentials&&(null==(e=l.defaultCredentials)?void 0:e.aws)&&(t.credentials=l.defaultCredentials.aws),o.targetHealthyRollbackPercentage||(t.targetHealthyRollbackPercentage=100),o.isNew&&l.attributes.platformHealthOnlyShowOverride&&l.attributes.platformHealthOnly&&void 0===o.interestingHealthProviderNames&&(t.interestingHealthProviderNames=["Amazon"]),Object.keys(t).length&&d(t)},[]),Lt(()=>{let e=!0;return i.listAccounts("aws").then(t=>e&&u(t)),()=>{e=!1}},[]),Mt.createElement("div",{className:"form-horizontal"},!s.strategy&&Mt.createElement(qe,{accounts:m,application:l,component:o,onComponentUpdate:c}),l.attributes.platformHealthOnlyShowOverride&&Mt.createElement(Me,{label:"Task Completion"},Mt.createElement(je,{interestingHealthProviderNames:o.interestingHealthProviderNames||[],onChange:e=>d({interestingHealthProviderNames:e}),platformHealthType:"Amazon"})),Mt.createElement("div",{className:"row"},(o.regions||[]).length>1&&Mt.createElement("div",{className:"col-sm-10 col-sm-offset-2"},"Wait"," ",Mt.createElement("input",{className:"form-control input-sm inline-number",min:0,onChange:e=>d({waitTimeBetweenRegions:Number(e.target.value)}),type:"number",value:null!=(a=o.waitTimeBetweenRegions)?a:""})," ","seconds between regional rollbacks."),Mt.createElement("div",{className:"col-sm-10 col-sm-offset-2"},"Consider rollback successful when"," ",Mt.createElement("input",{className:"form-control input-sm inline-number",max:100,min:0,onChange:e=>d({targetHealthyRollbackPercentage:Number(e.target.value)}),type:"number",value:null!=(n=o.targetHealthyRollbackPercentage)?n:""})," ","percent of instances are healthy."),e.feature.dynamicRollbackTimeout&&Mt.createElement("div",{className:"col-sm-10 col-sm-offset-2"},"Rollback Timeout is"," ",Mt.createElement("input",{className:"form-control input-sm inline-number",max:100,min:0,onChange:e=>d({rollbackTimeout:Number(e.target.value)}),type:"number",value:null!=(r=o.rollbackTimeout)?r:""})," ","minutes.")))},validators:[{type:"requiredField",fieldName:"cluster"},{type:"requiredField",fieldName:"regions"},{type:"requiredField",fieldName:"credentials",fieldLabel:"account"}]};function ss(){Re.pipeline.registerStage(is)}function os(e){const{values:a}=e.formik;return Mt.createElement("div",null,Mt.createElement(r,{name:"triggerArns",label:"Event ARNs",help:Mt.createElement(t,{content:"The resource ARNs for Lambda event trigger sources. Input the entire ARN and select `Create option TRIGGER-ARN-INPUT` to add the ARN."}),input:t=>Mt.createElement(nt,{...t,multi:!0,placeholder:"Input ARN...",onChange:t=>{var a,n;a=t,n="triggerArns",e.formik.setFieldValue(n,a.map(e=>e.value))},value:a.triggerArns?a.triggerArns.map(e=>({value:e,label:e})):[]}),required:!1}),Mt.createElement(r,{name:"batchsize",label:"Event Batch Size",input:e=>Mt.createElement(d,{...e,min:1,max:10}),required:!1}))}function cs(e){const{values:t}=e.formik,a=rt(lt.BITBUCKET_FILE,lt.CUSTOM_OBJECT,lt.EMBEDDED_BASE64,lt.GCS_OBJECT,lt.GITHUB_FILE,lt.GITLAB_FILE,lt.S3_OBJECT,lt.HTTP_FILE),n=(t,a)=>{e.formik.setFieldValue(`${a}.id`,null),e.formik.setFieldValue(`${a}.artifact`,t),e.formik.setFieldValue(`${a}.account`,t.artifactAccount)},l=(t,a)=>{e.formik.setFieldValue(`${a}.id`,t),e.formik.setFieldValue(`${a}.artifact`,null)},i=(e,t)=>e[t]?e[t]:{account:"",id:""};return Mt.createElement("div",null,Mt.createElement(r,{name:"destroyOnFail",label:"On Fail",input:e=>Mt.createElement(o,{text:"Destroy latest lambda version on fail.",...e})}),Mt.createElement(r,{name:"timeout",label:"Timeout",input:e=>Mt.createElement(d,{...e,min:0,max:900})}),Mt.createElement(Ye,{artifact:i(t,"payloadArtifact").artifact,excludedArtifactTypePatterns:a,expectedArtifactId:i(t,"payloadArtifact").id,label:"Payload Artifact",onArtifactEdited:e=>{n(e,"payloadArtifact")},helpKey:"",onExpectedArtifactSelected:e=>l(e.id,"payloadrtifact"),pipeline:e.pipeline,stage:t}),Mt.createElement(Ye,{artifact:i(t,"outputArtifact").artifact,excludedArtifactTypePatterns:a,expectedArtifactId:i(t,"outputArtifact").id,label:"Output Artifact",onArtifactEdited:e=>{n(e,"outputArtifact")},helpKey:"",onExpectedArtifactSelected:e=>l(e.id,"outputArtifact"),pipeline:e.pipeline,stage:t}))}ss();const ds=[{label:"Lambda Invocation",value:"$LAMBDA"}];function ms(e){const{values:t}=e.formik;return Mt.createElement("div",null,Mt.createElement(r,{label:"Health Check Type",name:"healthCheckType",input:e=>Mt.createElement(s,{...e,clearable:!1,options:ds})}),t.healthCheckType?function(e,t){return"$LAMBDA"===e?Mt.createElement(cs,{...t}):null}(t.healthCheckType,e):null)}const us=[{label:"Simple",value:"$SIMPLE",description:"Route 100% of traffic to specified version"},{label:"Weighted Deployment",value:"$WEIGHTED",description:"Split the traffic weight between two function versions."},{label:"Blue/Green",value:"$BLUEGREEN",description:"Disable all previous versions once the latest version passes health checks."}];class ps extends Mt.Component{constructor(e){super(e);const{value:t}=this.props,a=us.filter(e=>e.value===t)[0];this.state={label:a.label,value:a.value,description:a.description}}render(){return Mt.createElement("div",null,Mt.createElement("b",null," ",this.state.label," "),Mt.createElement("br",null),Mt.createElement("small",null," ",this.state.description," "))}}const hs=[{label:"Newest Function Version",value:"$LATEST",description:"Selects the most recently deployed function when this stage starts."},{label:"Previous Function Version",value:"$PREVIOUS",description:"Selects the second-most recently deployed function when this stage starts."},{label:"Oldest Function Verion",value:"$OLDEST",description:"Selects the least recently deployed function when this stage starts."},{label:"Provide Version Number",value:"$PROVIDED",description:"Provide a specific version number to destroy."}];class gs extends Mt.Component{constructor(e){super(e);const{value:t}=this.props,a=hs.filter(e=>e.value===t)[0];this.state={label:a.label,value:a.value,description:a.description}}render(){return Mt.createElement("div",null,Mt.createElement("b",null," ",this.state.label," ")," ",Mt.createElement("br",null),Mt.createElement("small",null," ",this.state.description," "))}}function vs(e){const{values:t}=e.formik,{functions:a}=e.application;return Mt.createElement("div",{className:"form-horizontal"},Mt.createElement(r,{label:"Target Version",name:"versionNameA",onChange:t=>{e.formik.setFieldValue("trafficPercentA",100),e.formik.setFieldValue("versionNameA",t)},input:e=>Mt.createElement(s,{...e,clearable:!1,options:hs,optionRenderer:e=>Mt.createElement(gs,{value:e.value,showingDetails:!0})})}),"$PROVIDED"===t.versionNameA?Mt.createElement(r,{label:"Version Number",name:"versionNumberA",input:e=>Mt.createElement(s,{...e,clearable:!1,stringOptions:a.data.filter(e=>e.account===t.account).filter(e=>e.region===t.region).filter(e=>e.functionName===t.functionName).flatMap(e=>Object.values(e.revisions).sort(function(e,t){return t-e})).filter(e=>"$LATEST"!==e)})}):null,Mt.createElement(r,{name:"trafficPercentA",label:"Traffic %",input:e=>Mt.createElement(d,{...e,min:0,max:100,value:100,disabled:!0})}))}function fs(e){const{values:t}=e.formik,{functions:a}=e.application;return Mt.createElement("div",{className:"form-horizontal"},Mt.createElement(r,{label:"Target Version",name:"versionNameA",input:e=>Mt.createElement(s,{...e,clearable:!1,options:hs,optionRenderer:e=>Mt.createElement(gs,{value:e.value,showingDetails:!0})})}),"$PROVIDED"===t.versionNameA?Mt.createElement(r,{label:"Version Number",name:"versionNumberA",input:e=>Mt.createElement(s,{...e,clearable:!1,stringOptions:a.data.filter(e=>e.account===t.account).filter(e=>e.region===t.region).filter(e=>e.functionName===t.functionName).flatMap(e=>Object.values(e.revisions).sort(function(e,t){return t-e})).filter(e=>"$LATEST"!==e)})}):null,Mt.createElement(r,{name:"trafficPercentA",label:"Traffic %",input:e=>Mt.createElement(d,{...e,min:0,max:100})}),Mt.createElement(r,{label:"Version Name",name:"versionNameB",input:e=>Mt.createElement(s,{...e,clearable:!1,options:hs,optionRenderer:e=>Mt.createElement(gs,{value:e.value,showingDetails:!0})})}),"$PROVIDED"===t.versionNameB?Mt.createElement(r,{label:"Version Number",name:"versionNumberB",input:e=>Mt.createElement(s,{...e,clearable:!1,stringOptions:a.data.filter(e=>e.account===t.account).filter(e=>e.region===t.region).filter(e=>e.functionName===t.functionName).flatMap(e=>Object.values(e.revisions).sort(function(e,t){return t-e})).filter(e=>"$LATEST"!==e)})}):null,Mt.createElement(r,{name:"trafficPercentB",label:"Traffic %",input:e=>Mt.createElement(d,{...e,min:0,max:100,disabled:!0,value:t.trafficPercentA||0===t.trafficPercentA?100-t.trafficPercentA:null})}))}function Es(e){const{values:t}=e.formik;return Mt.createElement("div",{className:"form-horizontal"},t.deploymentStrategy?function(e,t){switch(e){case"$SIMPLE":return Mt.createElement(vs,{...t});case"$WEIGHTED":return Mt.createElement(fs,{...t});case"$BLUEGREEN":return Mt.createElement(ms,{...t});default:return null}}(t.deploymentStrategy,e):null)}function ys(e){const{values:a}=e.formik,{functions:n}=e.application,{result:o,status:c}=u(()=>i.listAccounts("aws"),[],[]),m=a.account&&a.region?n.data.filter(e=>e.account===a.account).filter(e=>e.region===a.region).map(e=>e.functionName):[];return Mt.createElement("div",{className:"form-horizontal"},Mt.createElement("h4",null," Basic Settings "),Mt.createElement(r,{label:"Account",name:"account",onChange:t=>{e.formik.setFieldValue("region",null),e.formik.setFieldValue("functionName",null),e.formik.setFieldValue("account",t)},required:!0,input:e=>Mt.createElement(s,{...e,clearable:!1,isLoading:"PENDING"===c,stringOptions:o.map(e=>e.name)})}),Mt.createElement(r,{label:"Region",name:"region",onChange:t=>{e.formik.setFieldValue("functionName",null),e.formik.setFieldValue("region",t)},input:e=>Mt.createElement(s,{clearable:!1,disabled:!a.account,placeholder:a.account?"Select...":"Select an Account...",...e,isLoading:"PENDING"===c,stringOptions:o.filter(e=>e.name===a.account).flatMap(e=>e.regions).map(e=>e.name)})}),Mt.createElement(r,{label:"Function Name",name:"functionName",input:e=>Mt.createElement(s,{clearable:!1,disabled:!(a.account&&a.region),placeholder:a.account&&a.region?"Select...":"Select an Account and Region...",...e,stringOptions:m})}),Mt.createElement(r,{label:"Alias",name:"aliasName",input:e=>Mt.createElement(l,{...e})}),Mt.createElement("h4",null," Alias Settings "),Mt.createElement(os,{...e}),Mt.createElement(r,{name:"provisionedConcurrentExecutions",label:"Provisioned Concurrency",help:Mt.createElement(t,{content:"To enable your function to scale without fluctuations in latency, use provisioned concurrency. Provisioned concurrency runs continually and has separate pricing for concurrency and execution duration. Concurrency cannot be provisioned with a weighted deployment strategy."}),input:e=>"$WEIGHTED"===a.deploymentStrategy?Mt.createElement(d,{...e,min:0,max:0}):Mt.createElement(d,{...e,min:0,max:3e3}),required:!1}),Mt.createElement("h4",null," Deployment Strategy "),Mt.createElement(r,{label:"Strategy",name:"deploymentStrategy",help:Mt.createElement(t,{content:""}),input:t=>Mt.createElement(s,{...t,clearable:!1,options:us,optionRenderer:t=>Mt.createElement(ps,{config:e,value:t.value,showingDetails:!0})})}),a.deploymentStrategy?Mt.createElement(Es,{...e}):null)}function bs(e){const{stage:t}=e;return Mt.createElement($e,{name:e.name,current:e.current},Mt.createElement(Ue,{stage:t,message:t.outputs.failureMessage}),Mt.createElement("div",null,Mt.createElement("p",null," Function Name: ",t.outputs.functionName?t.outputs.functionName:"N/A"," "),Mt.createElement("p",null," ","Deployed Alias:"," ",t.outputs["deployment:aliasDeployed"]?t.outputs["deployment:aliasDeployed"]:"N/A"," "),Mt.createElement("p",null," ","Deployed Major Version:"," ",t.outputs["deployment:majorVersionDeployed"]?t.outputs["deployment:majorVersionDeployed"]:"N/A"," ")))}function Cs(e){const t=new n(e);return t.field("triggerArns","Trigger ARNs").optional().withValidators((e,t)=>e.map(e=>bn(e,e)).every(e=>void 0===e)?void 0:"Invalid ARN. Event ARN must match regular expression: /^arn:aws[a-zA-Z-]?:[a-zA-Z_0-9.-]+:./"),t.validateForm()}(bs||(bs={})).title="Route Lambda Traffic Stage";const Ns={key:"Aws.LambdaTrafficRoutingStage",label:"AWS Lambda Route",description:"Route traffic across various versions of your Lambda function",component:function(e){return Mt.createElement("div",{className:"RouteLambdaStageConfig"},Mt.createElement(_e,{...e,validate:Cs,onChange:e.updateStage,render:e=>Mt.createElement(ys,{...e})}))},executionDetailsSections:[bs,Oe],validateFn:Cs};function ws(){e.feature.lambdaAdditionalStages&&Re.pipeline.registerStage(Ns)}const Ss={key:"scaleDownCluster",provides:"scaleDownCluster",cloudProvider:"aws",component:function(e){var t,a;const{application:n,pipeline:r,stage:l,stageFieldUpdated:s,updateStageField:o}=e,[c,d]=Rt([]);return Lt(()=>{var e;const t={};"aws"!==l.cloudProvider&&(t.cloudProvider="aws"),!l.credentials&&(null==(e=n.defaultCredentials)?void 0:e.aws)&&(t.credentials=n.defaultCredentials.aws),void 0===l.remainingFullSizeServerGroups&&(t.remainingFullSizeServerGroups=1),void 0===l.allowScaleDownActive&&(t.allowScaleDownActive=!1),void 0===l.preferLargerOverNewer&&(t.preferLargerOverNewer="false"),Object.keys(t).length&&o(t)},[]),Lt(()=>{let e=!0;return i.listAccounts("aws").then(t=>e&&d(t)),()=>{e=!1}},[]),Mt.createElement("div",{className:"form-horizontal"},!r.strategy&&Mt.createElement(qe,{accounts:c,application:n,component:l,onComponentUpdate:s}),Mt.createElement(Me,{label:"Scale Down Options"},Mt.createElement("div",{className:"form-inline"},Mt.createElement("p",null,"Keep the"," ",Mt.createElement("input",{className:"form-control input-sm",min:0,onChange:e=>o({remainingFullSizeServerGroups:Number(e.target.value)}),required:!0,style:{width:50},type:"number",value:null!=(t=l.remainingFullSizeServerGroups)?t:""})," ",Mt.createElement("select",{className:"form-control input-sm",onChange:e=>o({preferLargerOverNewer:e.target.value}),style:{width:100},value:null!=(a=l.preferLargerOverNewer)?a:"false"},Mt.createElement("option",{value:"true"},"largest"),Mt.createElement("option",{value:"false"},"newest"))," ",(m="server group",1===l.remainingFullSizeServerGroups?m:`${m}s`)," at current size."),Mt.createElement("p",null,"The remaining server groups will be scaled down to zero instances."))),Mt.createElement("div",{className:"form-group"},Mt.createElement("div",{className:"col-md-offset-3 col-md-6 checkbox"},Mt.createElement("label",null,Mt.createElement("input",{checked:!!l.allowScaleDownActive,onChange:e=>o({allowScaleDownActive:e.target.checked}),type:"checkbox"}),"Allow scale down of active server groups"))));var m},accountExtractor:e=>[e.context.credentials],configAccountExtractor:e=>[e.credentials],validators:[{type:"requiredField",fieldName:"cluster"},{type:"requiredField",fieldName:"remainingFullSizeServerGroups",fieldLabel:"Keep [X] full size Server Groups"},{type:"requiredField",fieldName:"regions"},{type:"requiredField",fieldName:"credentials",fieldLabel:"account"}],strategy:!0};function ks(){Re.pipeline.registerStage(Ss)}ks();const Ts={key:"shrinkCluster",provides:"shrinkCluster",cloudProvider:"aws",component:function(e){var t,a;const{application:n,pipeline:r,stage:l,stageFieldUpdated:s,updateStageField:o}=e,[c,d]=Rt([]);return Lt(()=>{var e;const t={};"aws"!==l.cloudProvider&&(t.cloudProvider="aws"),!l.credentials&&(null==(e=n.defaultCredentials)?void 0:e.aws)&&(t.credentials=n.defaultCredentials.aws),void 0===l.shrinkToSize&&(t.shrinkToSize=1),void 0===l.allowDeleteActive&&(t.allowDeleteActive=!1),void 0===l.retainLargerOverNewer&&(t.retainLargerOverNewer="false"),l.isNew&&n.attributes.platformHealthOnlyShowOverride&&n.attributes.platformHealthOnly&&void 0===l.interestingHealthProviderNames&&(t.interestingHealthProviderNames=["Amazon"]),Object.keys(t).length&&o(t)},[]),Lt(()=>{let e=!0;return i.listAccounts("aws").then(t=>e&&d(t)),()=>{e=!1}},[]),Mt.createElement("div",{className:"form-horizontal"},!r.strategy&&Mt.createElement(qe,{accounts:c,application:n,component:l,onComponentUpdate:s}),Mt.createElement(Me,{label:"Shrink Options"},Mt.createElement("div",{className:"form-inline"},"Shrink to"," ",Mt.createElement("input",{className:"form-control input-sm",min:0,onChange:e=>o({shrinkToSize:Number(e.target.value)}),required:!0,style:{width:50},type:"number",value:null!=(t=l.shrinkToSize)?t:""})," ",(m="server group",1===l.shrinkToSize?m:`${m}s`),", keeping the"," ",Mt.createElement("select",{className:"form-control input-sm",onChange:e=>o({retainLargerOverNewer:e.target.value}),style:{width:100},value:null!=(a=l.retainLargerOverNewer)?a:"false"},Mt.createElement("option",{value:"true"},"largest"),Mt.createElement("option",{value:"false"},"newest")))),Mt.createElement("div",{className:"form-group"},Mt.createElement("div",{className:"col-md-offset-3 col-md-6 checkbox"},Mt.createElement("label",null,Mt.createElement("input",{checked:!!l.allowDeleteActive,onChange:e=>o({allowDeleteActive:e.target.checked}),type:"checkbox"}),"Allow deletion of active server groups"))),n.attributes.platformHealthOnlyShowOverride&&Mt.createElement(Me,{label:"Task Completion"},Mt.createElement(je,{interestingHealthProviderNames:l.interestingHealthProviderNames||[],onChange:e=>o({interestingHealthProviderNames:e}),platformHealthType:"Amazon"})));var m},accountExtractor:e=>[e.context.credentials],configAccountExtractor:e=>[e.credentials],validators:[{type:"requiredField",fieldName:"cluster"},{type:"requiredField",fieldName:"shrinkToSize",fieldLabel:"shrink to [X] Server Groups"},{type:"requiredField",fieldName:"regions"},{type:"requiredField",fieldName:"credentials",fieldLabel:"account"}]};function Is(){Re.pipeline.registerStage(Ts)}Is();const Ps={key:"upsertImageTags",provides:"upsertImageTags",cloudProvider:"aws",component:function({pipeline:e,stage:t,updateStageField:a}){const n=t.consideredStages||[],r=it.getAllUpstreamDependencies(e,t).filter(e=>Ve.IMAGE_PRODUCING_STAGES.includes(e.type)),l=new Set(r.map(e=>e.refId)),i=n.filter(e=>!l.has(e));return Mt.useEffect(()=>{const e={};void 0===t.cloudProvider&&(e.cloudProvider="aws"),void 0===t.tags&&(e.tags={}),Object.keys(e).length&&a(e)},[t.cloudProvider,t.tags,a]),Mt.createElement("div",{className:"form-horizontal"},Mt.createElement(Me,{label:"Tags"},Mt.createElement(Xe,{allowEmpty:!0,model:t.tags||{},onChange:e=>a({tags:e}),pipeline:e})),Mt.createElement(Me,{helpKey:"aws.tagImage.consideredStages",label:"Stages (optional)"},Mt.createElement("div",{className:"checkbox"},r.map(e=>Mt.createElement("label",{key:e.refId,style:{display:"block"}},Mt.createElement("input",{checked:n.includes(e.refId),onChange:t=>{return a({consideredStages:(r=n,l=e.refId,i=t.target.checked,i&&!r.includes(l)?[...r,l]:i?r:r.filter(e=>e!==l))});var r,l,i},type:"checkbox",value:e.refId})," ",e.name||e.refId)),i.map(e=>Mt.createElement("label",{key:e,style:{display:"block"}},Mt.createElement("input",{checked:!0,disabled:!0,readOnly:!0,type:"checkbox",value:e})," ",e," ","(unavailable)")))))}};function As(){Re.pipeline.registerStage(Ps)}function Gs(e){const{values:a}=e.formik,{functions:n}=e.application,{result:c,status:d}=u(()=>i.listAccounts("aws"),[],[]),m=a.account&&a.region?n.data.filter(e=>e.account===a.account).filter(e=>e.region===a.region).map(e=>e.functionName):[];return Mt.createElement("div",{className:"form-horizontal"},Mt.createElement("h4",null," Basic Settings "),Mt.createElement(r,{label:"Account",name:"account",onChange:t=>{e.formik.setFieldValue("region",null),e.formik.setFieldValue("functionName",null),e.formik.setFieldValue("account",t)},required:!0,input:e=>Mt.createElement(s,{...e,clearable:!1,isLoading:"PENDING"===d,stringOptions:c.map(e=>e.name)})}),Mt.createElement(r,{label:"Region",name:"region",onChange:t=>{e.formik.setFieldValue("functionName",null),e.formik.setFieldValue("region",t)},input:e=>Mt.createElement(s,{clearable:!1,disabled:!a.account,placeholder:a.account?"Select...":"Select an Account...",...e,isLoading:"PENDING"===d,stringOptions:c.filter(e=>e.name===a.account).flatMap(e=>e.regions).map(e=>e.name)})}),Mt.createElement(r,{label:"Function Name",name:"functionName",input:e=>Mt.createElement(s,{clearable:!1,disabled:!(a.account&&a.region),placeholder:a.account&&a.region?"Select...":"Select an Account and Region...",...e,stringOptions:m})}),Mt.createElement(r,{name:"s3bucket",label:"S3 Bucket",help:Mt.createElement(t,{id:"aws.function.s3bucket"}),input:e=>Mt.createElement(l,{...e,placeholder:"S3 bucket name"})}),Mt.createElement(r,{name:"s3key",label:"S3 Key",help:Mt.createElement(t,{id:"aws.function.s3key"}),input:e=>Mt.createElement(l,{...e,placeholder:"object.zip"})}),Mt.createElement(r,{name:"publish",label:"Publish",help:Mt.createElement(t,{id:"aws.function.publish"}),input:e=>Mt.createElement(o,{...e})}))}As();function xs(e){const t=new n(e);return t.field("account","Account Name").required(),t.field("region","Region").required(),t.field("functionName","Lambda Function Name").required(),t.field("s3key","S3 Object Key").required(),t.field("s3bucket","S3 Bucket Name").required().withValidators(yn),t.validateForm()}function Ds(e){const{stage:t,current:a,name:n}=e;return Mt.createElement($e,{name:n,current:a},Mt.createElement(Ue,{stage:t,message:t.outputs.failureMessage}),Mt.createElement("div",null,Mt.createElement("p",null," ",Mt.createElement("b",null," Function Name: ")," ",t.outputs.functionName?t.outputs.functionName:"N/A"," "),Mt.createElement("p",null," ",Mt.createElement("b",null," Function ARN: ")," ",t.outputs.functionARN?t.outputs.functionARN:"N/A"," ")))}Cr(""),(Ds||(Ds={})).title="Lambda Update Code Stage";const Bs={key:"Aws.LambdaUpdateCodeStage",label:"AWS Lambda Update Code",description:"Update code for a single AWS Lambda Function",component:function(e){return Mt.createElement("div",{className:"LambdaUpdateCodeConfig"},Mt.createElement(_e,{...e,validate:xs,onChange:e.updateStage,render:e=>Mt.createElement(Gs,{...e})}))},executionDetailsSections:[Ds,Oe],validateFn:xs};function Fs(){e.feature.lambdaAdditionalStages&&Re.pipeline.registerStage(Bs)}function zs(e){return e.credentials||e.accountName||e.accountId||e.account||""}function Ms(e){return(e.inboundRules||[]).filter(e=>e.range).reduce((e,t)=>((t.portRanges||[]).forEach(a=>{e.push({cidr:t.range.ip+t.range.cidr,type:t.protocol,startPort:a.startPort,endPort:a.endPort})}),e),[])}function Rs(e,t){return(e.inboundRules||[]).filter(e=>e.securityGroup).reduce((a,n)=>((n.portRanges||[]).forEach(r=>{const l=n.securityGroup,i="edit"===t;a.push({...i?{account:l.account,accountId:l.accountId,accountName:l.accountName||l.accountId,existing:!0,id:l.id,vpcId:l.vpcId!==e.vpcId?l.vpcId:null}:{},name:l.inferredName?null:l.name,type:n.protocol,startPort:r.startPort,endPort:r.endPort})}),a),[])}function Ls(e,t){var a;const n=e.securityGroup||{},r=zs(n)||e.credentials||"",l=n.region||e.region||(null==(a=n.regions)?void 0:a[0])||"",i=e.mode||"create",s=n.name||t,o={...n,account:r,accountId:n.accountId||r,accountName:n.accountName||r,credentials:r,description:n.description||"",ipIngress:n.ipIngress||Ms(n),name:s,region:l,regions:[l].filter(Boolean),securityGroupIngress:n.securityGroupIngress||Rs(n,i),vpcId:n.vpcId||""};return"clone"===i&&delete o.id,o}function Os(e){return!!e.type&&void 0!==e.startPort&&void 0!==e.endPort}function $s(e){return!!e.name&&!!zs(e)&&!!e.region&&(e.ipIngress||[]).every(e=>!!e.cidr&&Os(e))&&(e.securityGroupIngress||[]).every(e=>!(!e.name&&!e.id)&&Os(e))}class Us extends Mt.Component{constructor(e){super(e),this.updateSecurityGroup=e=>{this.setState(({securityGroup:t})=>({securityGroup:{...t,...e}}))},this.updateRule=(e,t,a)=>{const n=this.state.securityGroup[e].slice();n[t]={...n[t],...a},this.updateSecurityGroup({[e]:n})},this.addIpRule=()=>{this.updateSecurityGroup({ipIngress:[...this.state.securityGroup.ipIngress,{cidr:"0.0.0.0/0",type:"tcp",startPort:7001,endPort:7001}]})},this.addSecurityGroupRule=()=>{this.updateSecurityGroup({securityGroupIngress:[...this.state.securityGroup.securityGroupIngress,{name:"",type:"tcp",startPort:7001,endPort:7001}]})},this.removeRule=(e,t)=>{this.updateSecurityGroup({[e]:this.state.securityGroup[e].filter((e,a)=>a!==t)})},this.onTaskComplete=()=>{var e,t;if(null==(t=null==(e=this.getApplication().securityGroups)?void 0:e.refresh)||t.call(e),this.props.closeModal(),"edit"===this.getMode())return;const{securityGroup:a}=this.state;this.props.stateService.go(this.props.stateService.includes("**.firewallDetails")?"^.firewallDetails":".firewallDetails",{accountId:zs(a),name:a.name,provider:"aws",region:a.region,vpcId:a.vpcId})},this.submit=()=>{const e=this.getApplication(),{securityGroup:t}=this.state,a=zs(t),n={...t,account:a,accountId:a,accountName:a,cloudProvider:"aws",credentials:a,regions:[t.region]},r="edit"===this.getMode()?"Update":"clone"===this.getMode()?"Clone":"Create";this.state.taskMonitor.submit(()=>st.upsertSecurityGroup(n,e,r))};const t=this.getApplication(e);this.state={securityGroup:Ls(e,t.name),taskMonitor:new v({application:t,title:`${"edit"===this.getMode(e)?"Updating":"Creating"} your ${R.get("firewall")}`,onDismiss:()=>e.dismissModal(),onTaskComplete:this.onTaskComplete})}}static show(e){return E.show(Vs,e,{dialogClassName:"modal-lg"})}getApplication(e=this.props){return e.app||e.application}getMode(e=this.props){return e.mode||"create"}renderTextField(e,t,a){return Mt.createElement("div",{className:"form-group row"},Mt.createElement("label",{className:"col-md-3 sm-label-right"},e),Mt.createElement("div",{className:"col-md-7"},Mt.createElement("input",{className:"form-control input-sm",value:t||"",onChange:e=>a(e.target.value)})))}renderIpRules(){const e=this.state.securityGroup.ipIngress||[];return Mt.createElement("div",null,Mt.createElement("h5",null,"IP Ingress"),e.map((e,t)=>Mt.createElement("div",{className:"row",key:`ip-${t}`},Mt.createElement("div",{className:"col-md-3"},Mt.createElement("input",{className:"form-control input-sm",value:e.cidr||"",onChange:e=>this.updateRule("ipIngress",t,{cidr:e.target.value})})),Mt.createElement("div",{className:"col-md-2"},Mt.createElement("input",{className:"form-control input-sm",value:e.type||"",onChange:e=>this.updateRule("ipIngress",t,{type:e.target.value})})),Mt.createElement("div",{className:"col-md-2"},Mt.createElement("input",{className:"form-control input-sm",type:"number",value:e.startPort,onChange:e=>this.updateRule("ipIngress",t,{startPort:Number(e.target.value)})})),Mt.createElement("div",{className:"col-md-2"},Mt.createElement("input",{className:"form-control input-sm",type:"number",value:e.endPort,onChange:e=>this.updateRule("ipIngress",t,{endPort:Number(e.target.value)})})),Mt.createElement("div",{className:"col-md-1"},Mt.createElement($a,{bsSize:"xsmall",onClick:()=>this.removeRule("ipIngress",t)},"Remove")))),Mt.createElement($a,{bsSize:"small",onClick:this.addIpRule},"Add IP Rule"))}renderSecurityGroupRules(){const e=this.state.securityGroup.securityGroupIngress||[];return Mt.createElement("div",null,Mt.createElement("h5",null,R.get("Firewall")," Ingress"),e.map((e,t)=>Mt.createElement("div",{className:"row",key:`sg-${t}`},Mt.createElement("div",{className:"col-md-3"},e.existing?Mt.createElement("span",{className:"form-control-static"},e.name||e.id):Mt.createElement("input",{className:"form-control input-sm",value:e.name||"",onChange:e=>this.updateRule("securityGroupIngress",t,{name:e.target.value})})),Mt.createElement("div",{className:"col-md-2"},Mt.createElement("input",{className:"form-control input-sm",value:e.type||"",onChange:e=>this.updateRule("securityGroupIngress",t,{type:e.target.value})})),Mt.createElement("div",{className:"col-md-2"},Mt.createElement("input",{className:"form-control input-sm",type:"number",value:e.startPort,onChange:e=>this.updateRule("securityGroupIngress",t,{startPort:Number(e.target.value)})})),Mt.createElement("div",{className:"col-md-2"},Mt.createElement("input",{className:"form-control input-sm",type:"number",value:e.endPort,onChange:e=>this.updateRule("securityGroupIngress",t,{endPort:Number(e.target.value)})})),Mt.createElement("div",{className:"col-md-1"},Mt.createElement($a,{bsSize:"xsmall",onClick:()=>this.removeRule("securityGroupIngress",t)},"Remove")))),Mt.createElement($a,{bsSize:"small",onClick:this.addSecurityGroupRule},"Add ",R.get("Firewall")," Rule"))}render(){const{securityGroup:e,taskMonitor:t}=this.state,a=this.getMode(),n=$s(e);return Mt.createElement(Mt.Fragment,null,Mt.createElement(ot,{monitor:t}),Mt.createElement(me,{dismiss:this.props.dismissModal}),Mt.createElement(Oa.Header,null,Mt.createElement(Oa.Title,null,"edit"===a?"Edit":"clone"===a?"Clone":"Create"," ",R.get("Firewall"))),Mt.createElement(Oa.Body,null,this.renderTextField("Account",zs(e),e=>this.updateSecurityGroup({account:e,accountId:e,accountName:e,credentials:e})),this.renderTextField("Region",e.region,e=>this.updateSecurityGroup({region:e,regions:[e]})),this.renderTextField("VPC ID",e.vpcId,e=>this.updateSecurityGroup({vpcId:e})),this.renderTextField("Name",e.name,e=>this.updateSecurityGroup({name:e})),this.renderTextField("Description",e.description,e=>this.updateSecurityGroup({description:e})),Mt.createElement("div",{className:"well"},Mt.createElement("div",{className:"row small text-bold"},Mt.createElement("div",{className:"col-md-3"},"CIDR / ",R.get("Firewall")),Mt.createElement("div",{className:"col-md-2"},"Protocol"),Mt.createElement("div",{className:"col-md-2"},"Start Port"),Mt.createElement("div",{className:"col-md-2"},"End Port")),this.renderIpRules(),this.renderSecurityGroupRules())),Mt.createElement(Oa.Footer,null,Mt.createElement($a,{onClick:this.props.dismissModal},"Cancel"),Mt.createElement(ue,{isDisabled:!n,isFormSubmit:!1,submitting:t.submitting,onClick:this.submit,label:"edit"===a?"Update":"clone"===a?"Clone":"Create"})))}}Us.defaultProps={closeModal:C,dismissModal:C,mode:"create"};const Vs=Object.assign(N(Us),{show:Us.show});var Hs=Object.getOwnPropertyDescriptor;let qs=class extends Mt.Component{render(){const e=this.props.ipRules||[],t=`IP Range Rules (${e.length})`;return Mt.createElement(G,{heading:t},e.map(e=>Mt.createElement(z,{key:e.address,className:"horizontal-when-filters-collapsed"},Mt.createElement(D,{label:"IP Range",value:e.address}),Mt.createElement(D,{label:"Port Ranges",value:e.rules.map(t=>"-1"===t.protocol?Mt.createElement("span",null,"All ports and protocols",e.rules.length>1?Mt.createElement("div",null,Mt.createElement("em",null,"Additional port ranges are specified, but redundant:")):null):Mt.createElement("div",null,Mt.createElement("span",null,t.protocol,":",t.startPort," → ",t.endPort)))}))))}};function Ws(e,t){const a=[];return e[t].forEach(e=>{(e.portRanges||[]).forEach(t=>{("-1"===e.protocol||void 0!==t.startPort&&void 0!==t.endPort)&&a.push({startPort:t.startPort,endPort:t.endPort,protocol:e.protocol,description:e.description||""})})}),a}function js(e){const t=ea(e.ipRangeRules||[],e=>e.range.ip+e.range.cidr);return Object.keys(t).map(e=>({address:e,rules:Ws(t,e)})).filter(e=>e.rules.length)}function Zs(e){const t=ea(e.securityGroupRules||[],e=>e.securityGroup.id);return Object.keys(t).map(e=>({securityGroup:t[e][0].securityGroup,rules:Ws(t,e)})).filter(e=>e.rules.length)}function _s(e,t){return e.accountId||e.accountName||e.account||e.credentials||(null==t?void 0:t.accountId)}function Ks(e,t){if(!t)return e;const a=_s(e,t);return{...e,accountId:a,accountName:e.accountName||a,name:e.name||t.name,region:e.region||t.region,vpcId:e.vpcId||t.vpcId}}function Ys({app:t,resolvedSecurityGroup:a,securityGroup:n}){if(!hn.adHocInfraWritesEnabled)return null;const r=Ks(n,a);return Mt.createElement(La,{className:"dropdown",id:"amazon-security-group-actions-dropdown"},Mt.createElement(La.Toggle,{className:"btn btn-sm btn-primary dropdown-toggle"},R.get("Firewall")," Actions"),Mt.createElement(La.Menu,null,Mt.createElement(Ua,{onClick:()=>{ct(r,t).then(e=>{e&&Vs.show({app:t,mode:"edit",securityGroup:r})})}},"Edit Inbound Rules"),Mt.createElement(Ua,{onClick:()=>{let e=!1;ct(r,t).then(a=>{a&&w.confirm({header:`Really delete ${r.name}?`,buttonText:`Delete ${r.name}`,account:_s(r),taskMonitorConfig:{application:t,title:`Deleting ${r.name}`,onTaskRetry:()=>{e=!0}},submitMethod:()=>{const a={cloudProvider:r.provider||"aws",vpcId:r.vpcId};return e&&(a.removeDependencies=!0),st.deleteSecurityGroup(r,t,a)},retryBody:`<div><p>Retry deleting the ${R.get("firewall")} and revoke any dependent ingress rules?</p><p>Any instance or load balancer associations will have to removed manually.</p></div>`})})}},"Delete ",R.get("Firewall")),Mt.createElement(Ua,{onClick:()=>{Vs.show({app:t,mode:"clone",securityGroup:r})}},"Clone ",R.get("Firewall")),e.feature.entityTags&&Mt.createElement(k,{component:r,application:t,entityType:"securityGroup",onUpdate:()=>t.securityGroups.refresh()})))}qs=((e,t,a,n)=>{for(var r,l=n>1?void 0:n?Hs(t,a):t,i=e.length-1;i>=0;i--)(r=e[i])&&(l=r(l)||l);return l})([ce("aws.securityGroup.ip.rules")],qs);class Xs extends Mt.Component{constructor(){super(...arguments),this.state={loading:!0},this.isUnmounted=!1,this.loadRequestId=0,this.autoClose=()=>{if(!this.isUnmounted){if(!this.props.autoClose)return this.props.app.isStandalone?(q.removeLastItem("securityGroups"),void this.setState({loading:!1,notFound:!0})):void this.props.stateService.go("^",{allowModalToStayOpen:!0},{location:"replace"});this.props.autoClose()}},this.loadSecurityGroup=()=>{const{app:e,resolvedSecurityGroup:t}=this.props,a=++this.loadRequestId;this.setState({loading:!0,notFound:!1}),this.getSecurityGroupReader().getSecurityGroupDetails(e,t.accountId,"aws",t.region,t.vpcId||"",t.name).then(n=>this.isUnmounted||a!==this.loadRequestId?Promise.resolve():!n||$t(n)?(this.autoClose(),Promise.resolve()):Promise.resolve(Dn.getVpcName(n.vpcId)).then(r=>{if(this.isUnmounted||a!==this.loadRequestId)return;const l=this.getSecurityGroupReader().getApplicationSecurityGroup(e,t.accountId,t.region,t.name);this.setState({loading:!1,securityGroup:Ks({...l,...n,vpcName:r},t)})})).catch(()=>{a===this.loadRequestId&&this.autoClose()})},this.closeDetails=()=>{this.props.stateService.go("^")}}componentDidMount(){var e,t;const a=null==(t=(e=this.props.app).getDataSource)?void 0:t.call(e,"securityGroups");a?a.ready().then(()=>{this.isUnmounted||(this.loadSecurityGroup(),this.unsubscribeFromRefresh=a.onRefresh(this.loadSecurityGroup))}):this.loadSecurityGroup()}componentDidUpdate(e){this.getCoordinatesKey(e)!==this.getCoordinatesKey(this.props)&&this.loadSecurityGroup()}componentWillUnmount(){this.isUnmounted=!0,this.unsubscribeFromRefresh&&this.unsubscribeFromRefresh()}getCoordinatesKey(e){const{accountId:t,name:a,region:n,vpcId:r}=e.resolvedSecurityGroup;return[t,n,r||"",a].join(":")}getSecurityGroupReader(){return this.props.securityGroupReader||this.context.services.securityGroupReader}render(){const{app:e,resolvedSecurityGroup:t}=this.props,{loading:a,notFound:n,securityGroup:r}=this.state;return n?Mt.createElement("div",{className:"text-center"},Mt.createElement("h3",null,"Could not find ",R.get("firewall")," ",t.name,"."),Mt.createElement(ja,{to:"home.infrastructure"},Mt.createElement("a",null,"Back to search results"))):Mt.createElement("div",{className:"details-panel"},Mt.createElement("div",{className:"header"},!e.isStandalone&&Mt.createElement("div",{className:"close-button"},Mt.createElement("a",{className:"btn btn-link",onClick:this.closeDetails},Mt.createElement("span",{className:"glyphicon glyphicon-remove"}))),a&&Mt.createElement("div",{className:"horizontal center middle"},Mt.createElement(ne,{size:"small"})),!a&&r&&Mt.createElement("div",{className:"header-text horizontal middle"},Mt.createElement("span",{className:"glyphicon glyphicon-transfer"}),Mt.createElement("h3",{className:"horizontal middle space-between flex-1"},r.name||"(not found)")),!a&&r&&Mt.createElement("div",{className:"actions"},Mt.createElement(Ys,{app:e,resolvedSecurityGroup:t,securityGroup:r}))),!a&&(null==r?void 0:r.isManaged)&&Mt.createElement(se,{resourceSummary:r.managedResourceSummary,application:e}),!a&&r&&Mt.createElement("div",{className:"content"},Mt.createElement(G,{heading:`${R.get("Firewall")} Details`,defaultExpanded:!0},Mt.createElement("dl",{className:"dl-horizontal dl-medium"},Mt.createElement("dt",null,"ID"),Mt.createElement("dd",null,r.id),Mt.createElement("dt",null,"Account"),Mt.createElement("dd",null,Mt.createElement(A,{account:r.accountName||r.accountId})),Mt.createElement("dt",null,"Region"),Mt.createElement("dd",null,r.region),Mt.createElement("dt",null,"VPC"),Mt.createElement("dd",null,r.vpcName||r.vpcId),Mt.createElement("dt",null,"Description"),Mt.createElement("dd",null,r.description))),Mt.createElement(qs,{ipRules:js(r)}),Mt.createElement(G,{heading:`${R.get("Firewall")} Rules (${Zs(r).length||0})`,defaultExpanded:Zs(r).length>0},!Zs(r).length&&Mt.createElement("div",null,"None"),Zs(r).map(e=>Mt.createElement("dl",{className:"dl-horizontal dl-medium",key:e.securityGroup.id||e.securityGroup.name},Mt.createElement("dt",null,R.get("Firewall")),Mt.createElement("dd",null,Mt.createElement(ja,{to:"^.firewallDetails",params:{name:e.securityGroup.name,accountId:e.securityGroup.accountName||e.securityGroup.accountId,region:e.securityGroup.region,vpcId:e.securityGroup.vpcId,provider:"aws"}},Mt.createElement("a",null,e.securityGroup.accountName!==r.accountName&&Mt.createElement(A,{account:e.securityGroup.accountName||e.securityGroup.accountId})," ",e.securityGroup.name," (",e.securityGroup.id,")"))),Mt.createElement("dt",null,"Port Ranges"),e.rules.map(e=>Mt.createElement("dd",{key:`${e.protocol}-${e.startPort}-${e.endPort}`},e.protocol,": ",e.startPort," → ",e.endPort)))))))}}Xs.contextType=g;const Js=N(Xs);class Qs{resolveIndexedSecurityGroup(e,t,a){return Qs.resolveIndexedSecurityGroup(e,t,a)}static resolveIndexedSecurityGroup(e,t,a){return e[t.account][t.region][a]}}class eo{constructor(){this.supportsCompression=!0}normalizeSecurityGroup(e){return Dn.listVpcs().then(t=>{const a=t.find(t=>t.id===e.vpcId);return e.vpcName=a?a.name:"",e})}compress(e){const t=ea(e,"vpcId");return Object.keys(t).forEach(e=>{t[e]=t[e].map(e=>[e.name,e.id])}),t}decompress(e){const t=[];return Object.keys(e).forEach(a=>{e[a].forEach(e=>{t.push({name:e[0],id:e[1],vpcId:a})})}),t}}function to(e,t){function n(e,t){t=t||{};const a=i.getCredentialsKeyedByAccount("aws"),n=t.account||e.defaultCredentials.aws||hn.defaults.account,l=t.region||e.defaultRegions.aws||hn.defaults.region,s=t.subnet||hn.defaults.subnetType||"",o=i.getAvailabilityZonesForAccountAndRegion("aws",n,l);return Promise.all([o,a]).then(function([a,i]){var o,c,d,m,u,p,h,g;const v=i[n],f=v?v.defaultKeyPair:null,E=null!=(d=null==(c=null==(o=e.attributes)?void 0:o.providerSettings)?void 0:c.aws)?d:{};let y=hn.defaults.iamRole||"BaseIAMRole";y=y.replace("{{application}}",e.name);const b=E.useAmiBlockDeviceMappings||!1,C={application:e.name,credentials:n,region:l,strategy:"",capacity:{min:1,max:1,desired:1},targetHealthyDeployPercentage:100,cooldown:10,enabledMetrics:[],healthCheckType:"EC2",healthCheckGracePeriod:600,instanceMonitoring:!1,ebsOptimized:!1,selectedProvider:"aws",iamRole:y,terminationPolicies:["Default"],vpcId:null,subnetType:s,availabilityZones:a,keyPair:f,suspendedProcesses:[],securityGroups:[],stack:"",freeFormDetails:"",spotPrice:"",tags:{},useAmiBlockDeviceMappings:b,copySourceCustomBlockDeviceMappings:!1,viewState:{instanceProfile:"custom",useSimpleInstanceTypeSelector:!0,useAllImageSelection:!1,useSimpleCapacity:!0,usePreferredZones:!0,mode:t.mode||"create",disableStrategySelection:!0,dirty:{},submitButtonLabel:r(t.mode||"create")}};if((null==(m=e.attributes)?void 0:m.platformHealthOnlyShowOverride)&&(null==(u=e.attributes)?void 0:u.platformHealthOnly)&&(C.interestingHealthProviderNames=["Amazon"]),"test"===n&&(null==(p=hn.serverGroups)?void 0:p.enableIPv6)&&(C.associateIPv6Address=!0),null==(h=hn.serverGroups)?void 0:h.enableIMDSv2){const t=hn.serverGroups.defaultIMDSv2AppAgeLimit,a=null==(g=e.attributes)?void 0:g.createTs;C.requireIMDSv2=t&&a&&Number(a)>t}return C})}function r(e){switch(e){case"createPipeline":return"Add";case"editPipeline":return"Done";case"clone":return"Clone";default:return"Create"}}function l(e){return!(e.onDemandAllocationStrategy||e.onDemandBaseCapacity||e.onDemandPercentageAboveBaseCapacity||e.spotAllocationStrategy||e.spotInstancePools||e.launchTemplateOverridesForInstanceType&&e.launchTemplateOverridesForInstanceType.length>0)}return{buildNewServerGroupCommand:n,buildServerGroupCommandFromExisting:function(t,n,s="clone"){var o,c,d,m;const u=i.getPreferredZonesByAccount("aws"),h=p.listSubnets(),g=le.parseServerGroupName(n.asg.autoScalingGroupName);let v;if(n.mixedInstancesPolicy){const e=null==(o=n.mixedInstancesPolicy)?void 0:o.launchTemplateOverridesForInstanceType;v=e?e.map(e=>e.instanceType):[null==(m=null==(d=null==(c=n.mixedInstancesPolicy)?void 0:c.launchTemplates[0])?void 0:d.launchTemplateData)?void 0:m.instanceType]}else n.launchTemplate?v=[Ot.get(n,"launchTemplate.launchTemplateData.instanceType")]:n.launchConfig&&(v=[Ot.get(n,"launchConfig.instanceType")]);const f=e.getCategoryForMultipleInstanceTypes("aws",v);return Promise.all([u,h,f]).then(([e,i,o])=>{var c,d,m,u,p,h,v,f,E,y,b,C,N,w;const S=n.asg.availabilityZones.sort();let k=!1;const T=e[n.account];if(T){const e=T[n.region].sort();k=S.join(",")===e.join(",")}const I=["Launch","Terminate","AddToLoadBalancer"],P=(null!=(m=null==(d=null==(c=t.attributes)?void 0:c.providerSettings)?void 0:d.aws)?m:{}).useAmiBlockDeviceMappings||!1,A={},G=["spinnaker:application","spinnaker:stack","spinnaker:details"];n.asg.tags&&n.asg.tags.filter(e=>!G.includes(e.key)).forEach(e=>{A[e.key]=e.value});const x={application:t.name,strategy:"",stack:g.stack,freeFormDetails:g.freeFormDetails,credentials:n.account,cooldown:n.asg.defaultCooldown,enabledMetrics:Ot.get(n,"asg.enabledMetrics",[]).map(e=>e.metric),healthCheckGracePeriod:n.asg.healthCheckGracePeriod,healthCheckType:n.asg.healthCheckType,terminationPolicies:n.asg.terminationPolicies,loadBalancers:n.asg.loadBalancerNames,region:n.region,useSourceCapacity:!1,capacity:{min:n.asg.minSize,max:n.asg.maxSize,desired:n.asg.desiredCapacity},targetHealthyDeployPercentage:100,availabilityZones:S,selectedProvider:"aws",source:{account:n.account,region:n.region,asgName:n.asg.autoScalingGroupName},suspendedProcesses:(n.asg.suspendedProcesses||[]).map(e=>e.processName).filter(e=>!I.includes(e)),tags:Object.assign({},n.tags,A),targetGroups:n.targetGroups,useAmiBlockDeviceMappings:P,copySourceCustomBlockDeviceMappings:"clone"===s,viewState:{instanceProfile:o,useAllImageSelection:!1,useSimpleCapacity:n.asg.minSize===n.asg.maxSize,usePreferredZones:k,mode:s,submitButtonLabel:r(s),isNew:!1,dirty:{}}};if((null==(u=t.attributes)?void 0:u.platformHealthOnlyShowOverride)&&(null==(p=t.attributes)?void 0:p.platformHealthOnly)&&(x.interestingHealthProviderNames=["Amazon"]),"editPipeline"===s){x.useSourceCapacity=!0,x.viewState.useSimpleCapacity=!1,x.strategy="redblack";const e=a.getStrategy("redblack");e.initializationMethod&&e.initializationMethod(x),x.suspendedProcesses=[]}const D=n.asg.vpczoneIdentifier;if(""!==D){const e=D.split(",")[0],t=i.find(t=>t.id===e);x.subnetType=t.purpose,x.vpcId=t.vpcId}else x.subnetType="",x.vpcId=null;if(n.launchConfig&&(Object.assign(x,{instanceType:n.launchConfig.instanceType,iamRole:n.launchConfig.iamInstanceProfile,keyPair:n.launchConfig.keyName,associatePublicIpAddress:n.launchConfig.associatePublicIpAddress,ramdiskId:n.launchConfig.ramdiskId,instanceMonitoring:n.launchConfig.instanceMonitoring&&n.launchConfig.instanceMonitoring.enabled,ebsOptimized:n.launchConfig.ebsOptimized,spotPrice:n.launchConfig.spotPrice}),n.launchConfig.userData&&(x.base64UserData=n.launchConfig.userData),x.viewState.imageId=n.launchConfig.imageId,x.viewState.useSimpleInstanceTypeSelector=!0),n.launchTemplate||n.mixedInstancesPolicy){let e,t;if(n.launchTemplate&&(e=n.launchTemplate.launchTemplateData,t=null==(v=null==(h=e.instanceMarketOptions)?void 0:h.spotOptions)?void 0:v.maxPrice,x.instanceType=e.instanceType,x.viewState.useSimpleInstanceTypeSelector=!0,e.userData&&(x.base64UserData=e.userData)),n.mixedInstancesPolicy){const a=n.mixedInstancesPolicy;e=null==(E=null==(f=null==a?void 0:a.launchTemplates)?void 0:f[0])?void 0:E.launchTemplateData,t=null==(y=null==a?void 0:a.instancesDistribution)?void 0:y.spotMaxPrice,x.securityGroups=e.networkInterfaces?(null!=(b=e.networkInterfaces.find(e=>0===e.deviceIndex))?b:{}).groups:e.securityGroups,x.onDemandAllocationStrategy=a.instancesDistribution.onDemandAllocationStrategy,x.onDemandBaseCapacity=a.instancesDistribution.onDemandBaseCapacity,x.onDemandPercentageAboveBaseCapacity=a.instancesDistribution.onDemandPercentageAboveBaseCapacity,x.spotAllocationStrategy=a.instancesDistribution.spotAllocationStrategy,x.spotInstancePools=a.instancesDistribution.spotInstancePools,a.launchTemplateOverridesForInstanceType?x.launchTemplateOverridesForInstanceType=function(e){let t=1;return Ot.sortBy(e,["priority"]).map(e=>{const{instanceType:a,weightedCapacity:n}=e;let r;return e.priority?(r=e.priority,t=e.priority+1):r=t++,{instanceType:a,weightedCapacity:n,priority:r}})}(a.launchTemplateOverridesForInstanceType):x.instanceType=e.instanceType,x.viewState.useSimpleInstanceTypeSelector=l(x)}const a=Ot.get(e,"networkInterfaces[0]"),r=null!=(C=null==a?void 0:a.ipv6AddressCount)?C:0,i=hn.serverGroups,s=n.accountDetails&&"test"===n.accountDetails.environment,o=i&&i.enableIPv6&&i.setIPv6InTest&&s;Object.assign(x,{iamRole:e.iamInstanceProfile.name,keyPair:e.keyName,associateIPv6Address:o||Boolean(r),ramdiskId:e.ramdiskId,instanceMonitoring:e.monitoring&&e.monitoring.enabled,ebsOptimized:e.ebsOptimized,spotPrice:t||void 0,requireIMDSv2:Boolean("required"===(null==(N=e.metadataOptions)?void 0:N.httpTokens)),unlimitedCpuCredits:e.creditSpecification?"unlimited"===e.creditSpecification.cpuCredits:void 0}),x.viewState.imageId=e.imageId}if("clone"===s&&n.image&&n.image.name&&(x.amiName=n.image.name),n.launchConfig&&n.launchConfig.securityGroups.length&&(x.securityGroups=n.launchConfig.securityGroups),n.launchTemplate&&n.launchTemplate.launchTemplateData.securityGroups.length&&(x.securityGroups=n.launchTemplate.launchTemplateData.securityGroups),n.launchTemplate&&n.launchTemplate.launchTemplateData.networkInterfaces){const e=null!=(w=n.launchTemplate.launchTemplateData.networkInterfaces.find(e=>0===e.deviceIndex))?w:{};x.securityGroups=e.groups}return x})},buildNewServerGroupCommandForPipeline:function(){return Promise.resolve({viewState:{requiresTemplateSelection:!0}})},buildServerGroupCommandFromPipeline:function(t,a){const r=Ot.cloneDeep(a),i=Object.keys(r.availabilityZones)[0],s=r.launchTemplateOverridesForInstanceType?r.launchTemplateOverridesForInstanceType.map(e=>e.instanceType):[r.instanceType],o=e.getCategoryForMultipleInstanceTypes("aws",s),c={account:r.account,region:i};return Promise.all([n(t,c),o]).then(function([e,t]){const a=r.availabilityZones[i].join(",")===e.availabilityZones.join(","),n={instanceProfile:t,disableImageSelection:!0,useSimpleCapacity:r.capacity.min===r.capacity.max&&!0!==r.useSourceCapacity,usePreferredZones:a,mode:"editPipeline",submitButtonLabel:"Done",templatingEnabled:!0,existingPipelineCluster:!0,dirty:{},useSimpleInstanceTypeSelector:l(r)},s={region:i,credentials:r.account,availabilityZones:r.availabilityZones[i],iamRole:r.iamRole,viewState:n};return r.strategy=r.strategy||"",Object.assign({},e,r,s)})},buildUpdateServerGroupCommand:function(e){var a,n;const r={type:"modifyAsg",asgs:[{asgName:e.name,region:e.region}],cooldown:e.asg.defaultCooldown,enabledMetrics:(null!=(n=null==(a=e.asg)?void 0:a.enabledMetrics)?n:[]).map(e=>e.metric),healthCheckGracePeriod:e.asg.healthCheckGracePeriod,healthCheckType:e.asg.healthCheckType,terminationPolicies:Ot.cloneDeep(e.asg.terminationPolicies),credentials:e.account,capacityRebalance:e.asg.capacityRebalance};return t.configureUpdateCommand(r),r}}}class ao{constructor(e,t){const a=t.providerServiceDelegate.getDelegate("aws","serverGroup.configurationService");this.delegate=to(t.instanceTypeService,a)}buildNewServerGroupCommand(e,t){return this.delegate.buildNewServerGroupCommand(e,t)}buildServerGroupCommandFromExisting(e,t,a){return this.delegate.buildServerGroupCommandFromExisting(e,t,a)}buildNewServerGroupCommandForPipeline(){return this.delegate.buildNewServerGroupCommandForPipeline()}buildServerGroupCommandFromPipeline(e,t){return this.delegate.buildServerGroupCommandFromPipeline(e,t)}buildUpdateServerGroupCommand(e){return this.delegate.buildUpdateServerGroupCommand(e)}}ao.requiresDeckRuntimeServices=!0;const no=ao;class ro{static getDisabledDate(e){if(e.isDisabled){const t=this.normalizeScalingProcesses(e).find(e=>"AddToLoadBalancer"===e.name&&!e.enabled);if(t)return t.suspensionDate}return null}static normalizeScalingProcesses(e){if(!e.asg||!e.asg.suspendedProcesses)return[];const t=e.asg.suspendedProcesses;return this.listProcesses().map(e=>{const a=t.find(t=>t.processName===e.name),n={name:e.name,enabled:!a,description:e.description};if(a){const e=a.suspensionReason.replace("User suspended at ","");n.suspensionDate=new Date(e).getTime()}return n})}static listProcesses(){return[{name:"Launch",description:"Controls if new instances should be launched into the ASG. If this is disabled, scale-up events will not produce new instances."},{name:"Terminate",description:"Controls if instances should be terminated during a scale-down event."},{name:"AddToLoadBalancer",description:"Controls if new instances should be added to the ASG’s ELB."},{name:"AlarmNotification",description:"This disables autoscaling."},{name:"AZRebalance",description:"Controls whether AWS should attempt to maintain an even distribution of instances across all healthy Availability Zones configured for the ASG."},{name:"HealthCheck",description:"If disabled, the instance’s health will no longer be reported to the autoscaling processor."},{name:"ReplaceUnhealthy",description:"Controls whether instances should be replaced if they failed the health check."},{name:"ScheduledActions",description:"Controls whether scheduled actions should be executed."}]}}class lo{static listKeyPairs(){return T("/keyPairs").useCache().get().then(e=>e.sort((e,t)=>e.keyName.localeCompare(t.keyName)))}}class io{constructor(e,t,a,n={getCommandOverrides:()=>[]}){this.serverGroupCommandRegistry=n,this.enabledMetrics=["GroupMinSize","GroupMaxSize","GroupDesiredCapacity","GroupInServiceInstances","GroupPendingInstances","GroupStandbyInstances","GroupTerminatingInstances","GroupTotalInstances"],this.healthCheckTypes=["EC2","ELB"],this.terminationPolicies=["OldestInstance","NewestInstance","OldestLaunchConfiguration","ClosestToNextInstanceHour","Default"],this.securityGroupReader=e,this.awsInstanceTypeService=t,this.cacheInitializer=a}getSecurityGroupReader(){return this.securityGroupReader}getCacheInitializer(){return this.cacheInitializer}configureUpdateCommand(e){e.backingData={enabledMetrics:ua(this.enabledMetrics),healthCheckTypes:ua(this.healthCheckTypes),terminationPolicies:ua(this.terminationPolicies)}}configureCommand(e,t){this.applyOverrides("beforeConfiguration",t),t.toggleSuspendedProcess=(e,t)=>{e.suspendedProcesses=e.suspendedProcesses||[];const a=e.suspendedProcesses.indexOf(t);e.suspendedProcesses=-1===a?e.suspendedProcesses.concat(t):e.suspendedProcesses.filter(e=>e!==t)},t.processIsSuspended=(e,t)=>e.suspendedProcesses.includes(t),t.onStrategyChange=(e,t)=>{var a;(null==(a=hn.serverGroups)?void 0:a.enableLaunchTemplates)&&(e.setLaunchTemplate="rollingpush"===t.key||void 0),""!==t.key&&"custom"!==t.key&&(e.suspendedProcesses=(e.suspendedProcesses||[]).filter(e=>"AddToLoadBalancer"!==e))},t.getBlockDeviceMappingsSource=e=>e.copySourceCustomBlockDeviceMappings?"source":e.useAmiBlockDeviceMappings?"ami":"default",t.selectBlockDeviceMappingsSource=(e,t)=>{"source"===t?(e.copySourceCustomBlockDeviceMappings=!0,e.useAmiBlockDeviceMappings=!1):"ami"===t?(e.copySourceCustomBlockDeviceMappings=!1,e.useAmiBlockDeviceMappings=!0):(e.copySourceCustomBlockDeviceMappings=!1,e.useAmiBlockDeviceMappings=!1)},t.regionIsDeprecated=e=>pa(e,"backingData.filtered.regions")&&e.backingData.filtered.regions.some(t=>t.name===e.region&&t.deprecated);const a=this.getSecurityGroupReader();return Promise.all([i.getCredentialsKeyedByAccount("aws"),a.getAllSecurityGroups(),p.listSubnets(),i.getPreferredZonesByAccount("aws"),lo.listKeyPairs(),this.awsInstanceTypeService.getAllTypesByRegion(),Promise.resolve(ua(this.enabledMetrics)),Promise.resolve(ua(this.healthCheckTypes)),Promise.resolve(ua(this.terminationPolicies))]).then(([a,n,r,l,i,s,o,c,d])=>{var m,u;const p={credentialsKeyedByAccount:a,securityGroups:n,subnets:r,preferredZones:l,keyPairs:i,instanceTypesInfo:s,enabledMetrics:o,healthCheckTypes:c,terminationPolicies:d};let h=Promise.resolve();if(p.accounts=ha(p.credentialsKeyedByAccount),p.filtered={},p.scalingProcesses=ro.listProcesses(),p.appLoadBalancers=e.getDataSource("loadBalancers").data,p.managedResources=null==(u=null==(m=e.getDataSource("managedResources"))?void 0:m.data)?void 0:u.resources,t.backingData=p,this.configureVpcId(t),p.filtered.securityGroups=this.getRegionalSecurityGroups(t),t.viewState.disableImageSelection&&this.configureInstanceTypes(t),t.securityGroups&&t.securityGroups.length){const e=Jt(this.getRegionalSecurityGroups(t),"id");ga(t.securityGroups,e).length<t.securityGroups.length&&(h=this.refreshSecurityGroups(t,!0))}return h.then(()=>{this.applyOverrides("afterConfiguration",t),this.attachEventHandlers(t)})})}applyOverrides(e,t){this.serverGroupCommandRegistry.getCommandOverrides("aws").forEach(a=>{a[e]&&a[e](t)})}configureKeyPairs(e){const t={dirty:{}};if(e.credentials&&e.region){const a=ra(e.backingData.credentialsKeyedByAccount,t=>t.defaultKeyPair&&e.keyPair&&0===e.keyPair.indexOf(t.defaultKeyPair.replace("{{region}}",""))),n=Xt(e.backingData.keyPairs).filter({account:e.credentials,region:e.region}).map("keyName").value();if(e.keyPair&&n.length&&!n.includes(e.keyPair)){const r=e.backingData.credentialsKeyedByAccount[e.credentials]||{defaultKeyPair:null};if(r.defaultKeyPair){const l=r.defaultKeyPair.replace("{{region}}",e.region);a&&n.includes(l)?e.keyPair=l:(e.keyPair=null,t.dirty.keyPair=!0)}else e.keyPair=null,t.dirty.keyPair=!0}e.backingData.filtered.keyPairs=n}else e.backingData.filtered.keyPairs=[];return t}configureInstanceTypes(e){const t={dirty:{}};if(e.region&&(e.virtualizationType||e.viewState.disableImageSelection)){let a=this.awsInstanceTypeService.getAvailableTypesForRegions(e.backingData.instanceTypesInfo,[e.region]);(e.virtualizationType||e.amiArchitecture)&&(a=this.awsInstanceTypeService.filterInstanceTypes(a,e.virtualizationType,!!e.vpcId,e.amiArchitecture));const n=Jt(a,"name");e.instanceType&&!n.includes(e.instanceType)&&(t.dirty.instanceType=e.instanceType,e.instanceType=null);const r=Jt(e.launchTemplateOverridesForInstanceType,"instanceType"),l=ga(r,n),i=na(r,l);e.launchTemplateOverridesForInstanceType&&i.length>0&&(t.dirty.launchTemplateOverridesForInstanceType=e.launchTemplateOverridesForInstanceType.filter(e=>i.includes(e.instanceType)),e.launchTemplateOverridesForInstanceType=e.launchTemplateOverridesForInstanceType.filter(e=>l.includes(e.instanceType))),e.backingData.filtered.instanceTypes=n,e.backingData.filtered.instanceTypesInfo=a}else e.backingData.filtered.instanceTypes=[],e.backingData.filtered.instanceTypesInfo=[];return va(e.viewState.dirty,t.dirty),t}configureImages(e){const t={dirty:{}};return e.amiName||(e.virtualizationType=null,e.amiArchitecture=null),e.viewState.disableImageSelection||e.amiName&&!e.region&&(t.dirty.amiName=!0,e.amiName=null),t}configureAvailabilityZones(e){e.backingData.filtered.availabilityZones=fa(e.backingData.credentialsKeyedByAccount[e.credentials].regions,{name:e.region}).availabilityZones}configureSubnetPurposes(e){const t={dirty:{}},a=e.backingData.filtered;return null===e.region||(a.subnetPurposes=Xt(e.backingData.subnets).filter({account:e.credentials,region:e.region}).reject({target:"elb"}).reject({purpose:null}).uniqBy("purpose").value(),Xt(a.subnetPurposes).some({purpose:e.subnetType}).value()||(e.subnetType=null,t.dirty.subnetType=!0)),t}getRegionalSecurityGroups(e){const t=e.backingData.securityGroups[e.credentials]||{aws:{}};return Xt(t.aws[e.region]).filter({vpcId:e.vpcId||null}).sortBy("name").value()}configureSecurityGroupOptions(e){const t={dirty:{}},a=e.backingData.filtered.securityGroups,n=this.getRegionalSecurityGroups(e),r="string"==typeof e.securityGroups&&e.securityGroups.includes("${");if(a&&e.securityGroups&&!r){const r=e.securityGroups.map(e=>{const t=fa(a,{id:e});return t?t.name:e}),l=e.securityGroups.map(e=>{const t=fa(a,{id:e})||fa(a,{name:e});return t?t.name:null}).map(e=>fa(n,{name:e})).filter(e=>e),i=Jt(l,"name"),s=Ea(r,i);e.securityGroups=Jt(l,"id"),s.length&&(t.dirty.securityGroups=s)}return e.backingData.filtered.securityGroups=n.sort((e,t)=>e.name.localeCompare(t.name)),t}refreshSecurityGroups(e,t){return this.getCacheInitializer().refreshCache("securityGroups").then(()=>this.getSecurityGroupReader().getAllSecurityGroups().then(a=>{e.backingData.securityGroups=a,t||this.configureSecurityGroupOptions(e)}))}getLoadBalancerMap(e){if(e.backingData.loadBalancers)return Xt(e.backingData.loadBalancers).map("accounts").flattenDeep().filter({name:e.credentials}).map("regions").flattenDeep().filter({name:e.region}).map("loadBalancers").flattenDeep().value();return(e.backingData.appLoadBalancers||[]).filter(t=>t.region===e.region&&t.account===e.credentials)}getLoadBalancerNames(e){return this.getLoadBalancerMap(e).filter(t=>(!t.loadBalancerType||"classic"===t.loadBalancerType)&&t.vpcId===e.vpcId).map(e=>e.name).sort()}getVpcLoadBalancerNames(e){return this.getLoadBalancerMap(e).filter(e=>(!e.loadBalancerType||"classic"===e.loadBalancerType)&&e.vpcId).map(e=>e.name).sort()}getTargetGroupNames(e){const t=this.getLoadBalancerMap(e).filter(e=>"classic"!==e.loadBalancerType);return Wt(t.map(e=>e.targetGroups.filter(e=>"instance"===e.targetType))).map(e=>e.name).sort()}getValidMatches(e,t){const a=t.filter(e=>e.includes("${")),n=ga(e,t),[r,l]=sa(t,e=>n.includes(e)||a.includes(e));return{valid:r,invalid:l,spel:a}}configureLoadBalancerOptions(e){const t={dirty:{}},a=(e.loadBalancers||[]).concat(e.vpcLoadBalancers||[]),n=e.targetGroups||[],r=this.getLoadBalancerNames(e),l=this.getVpcLoadBalancerNames(e),i=this.getTargetGroupNames(e);if(a&&e.loadBalancers){const n=e.vpcId?r:r.concat(l),{valid:i,invalid:s,spel:o}=this.getValidMatches(n,a);e.loadBalancers=ga(r.concat(o),i),e.vpcId?delete e.vpcLoadBalancers:e.vpcLoadBalancers=ga(l,i),s.length&&(t.dirty.loadBalancers=s),e.viewState.spelLoadBalancers=o||[]}if(n&&e.targetGroups&&!n.includes("${")){const{valid:a,invalid:r,spel:l}=this.getValidMatches(i,n);e.targetGroups=a,r.length&&(t.dirty.targetGroups=r),e.viewState.spelTargetGroups=l||[]}return e.backingData.filtered.loadBalancers=r,e.backingData.filtered.vpcLoadBalancers=l,e.backingData.filtered.targetGroups=i,t}refreshLoadBalancers(e,t){return T("/loadBalancers").query({provider:"aws"}).get().then(a=>{e.backingData.loadBalancers=a,t||this.configureLoadBalancerOptions(e)})}configureVpcId(e){const t={dirty:{}};if(e.subnetType){const t=fa(e.backingData.subnets,{purpose:e.subnetType,account:e.credentials,region:e.region});e.vpcId=t?t.vpcId:null}else e.vpcId=null,t.dirty.vpcId=!0;return va(t.dirty,this.configureInstanceTypes(e).dirty),t}attachEventHandlers(e){e.usePreferredZonesChanged=e=>{const t=e.availabilityZones?e.availabilityZones.length:0,a={dirty:{}},n=e.backingData.preferredZones[e.credentials];if(n&&n[e.region]&&e.viewState.usePreferredZones)e.availabilityZones=Ht(n[e.region].sort());else{e.availabilityZones=ga(e.availabilityZones,e.backingData.filtered.availabilityZones);t!==(e.availabilityZones?e.availabilityZones.length:0)&&(a.dirty.availabilityZones=!0)}return a},e.subnetChanged=e=>{const t=this.configureVpcId(e);return va(t.dirty,this.configureSecurityGroupOptions(e).dirty),va(t.dirty,this.configureLoadBalancerOptions(e).dirty),e.viewState.dirty=e.viewState.dirty||{},va(e.viewState.dirty,t.dirty),t},e.regionChanged=e=>{const t={dirty:{}},a=e.backingData.filtered;return va(t.dirty,this.configureSubnetPurposes(e).dirty),e.region?(va(t.dirty,e.subnetChanged(e).dirty),va(t.dirty,this.configureInstanceTypes(e).dirty),this.configureAvailabilityZones(e),va(t.dirty,e.usePreferredZonesChanged(e).dirty),va(t.dirty,this.configureImages(e).dirty),va(t.dirty,this.configureKeyPairs(e).dirty)):a.regionalAvailabilityZones=null,dt(e),t},e.clusterChanged=e=>{e.moniker=le.getMoniker(e.application,e.stack,e.freeFormDetails),dt(e)},e.credentialsChanged=e=>{const t={dirty:{}},a=e.backingData;if(e.credentials){const n=a.credentialsKeyedByAccount[e.credentials]||{regions:[]};a.filtered.regions=n.regions,ra(a.filtered.regions,{name:e.region})?va(t.dirty,e.regionChanged(e).dirty):(e.region=null,t.dirty.region=!0)}else e.region=null;return dt(e),t},e.imageChanged=e=>this.configureInstanceTypes(e),e.instanceTypeChanged=e=>{e.ebsOptimized=this.awsInstanceTypeService.isEbsOptimized(e.instanceType)},e.launchTemplateOverridesChanged=e=>{var t;e.ebsOptimized=null==(t=e.launchTemplateOverridesForInstanceType)?void 0:t.every(e=>this.awsInstanceTypeService.isEbsOptimized(e.instanceType))},this.applyOverrides("attachEventHandlers",e)}}class so extends io{constructor(e,t){super(t.securityGroupReader,new Yn,t.cacheInitializer)}}so.requiresDeckRuntimeServices=!0;class oo extends Mt.Component{constructor(e){super(e),this.state={templateSelectionText:{copied:["account, region, subnet, cluster name (stack, details)","load balancers",R.get("firewalls"),"instance type","all fields on the Advanced Settings page"],notCopied:["the following suspended scaling processes: Launch, Terminate, AddToLoadBalancer"],additionalCopyText:"If a server group exists in this cluster at the time of deployment, its scaling policies will be copied over to the new server group."}},e.command.viewState.disableStrategySelection||this.state.templateSelectionText.notCopied.push("the deployment strategy (if any) used to deploy the most recent server group")}render(){const{app:e,command:t,onDismiss:a,onTemplateSelected:n}=this.props,{templateSelectionText:r}=this.state;return Mt.createElement(mt,{cloudProvider:"aws",application:e,command:t,onDismiss:a,onTemplateSelected:n,templateSelectionText:r})}}class co extends Mt.Component{constructor(){super(...arguments),this.state={errorMessage:null,selectionMode:"packageImages",searchString:"",searchResults:[],isSearching:!1,packageImages:null,isLoadingPackageImages:!0},this.awsImageReader=new rr,this.props$=new Ca,this.searchInput$=new Ca,this.destroy$=new Ca,this.sortImagesBy$=new Sa("ts"),this.buildImageMenu=e=>{const{ImageMenuHeading:t,ImageLabel:a}=this,{options:n}=e;return Mt.createElement(Mt.Fragment,null,n.length>0&&Mt.createElement(t,null),n.map(t=>Mt.createElement(a,{key:t.imageName,option:t,params:e})))},this.ImageMenuHeading=()=>{const e=this.sortImagesBy$.value;return Mt.createElement("div",{className:"sp-padding-s-xaxis sp-padding-xs-yaxis small",style:{borderBottom:"1px solid var(--color-silver)",position:"sticky",top:0,backgroundColor:"var(--color-white)"}},Mt.createElement("b",null,"Sort by: "),Mt.createElement("a",{className:"clickable sp-padding-xs-xaxis",onClick:()=>this.setSortImagesBy("ts")},"ts"===e?Mt.createElement("b",null,"timestamp (newest first)"):"timestamp (newest first)"),Mt.createElement("span",null," | "),Mt.createElement("a",{className:"clickable sp-padding-xs-xaxis",onClick:()=>this.setSortImagesBy("name")},"name"===e?Mt.createElement("b",null,"name (A-Z)"):"name (A-Z)"))},this.ImageLabel=e=>{const{credentials:t,region:a}=this.props,{option:n,params:r}=e,l=n.amis[a]&&n.amis[a][0]?n.amis[a][0]:` - not found in ${t}/${a}`;return Mt.createElement("div",{key:n.imageName,onMouseDown:e=>{e.preventDefault(),e.stopPropagation(),r.selectValue(n)},onMouseOver:()=>r.focusOption(n),className:"Select-option "+(r.focusedOption&&r.focusedOption.imageName===n.imageName?"is-focused":""),role:"option"},Mt.createElement("div",null,n.imageName),Mt.createElement("div",{className:"small"},Mt.createElement("b",null,"Created: "),n.attributes.creationDate,Mt.createElement("b",{className:"sp-padding-s-left"},"AMI: "),l))}}static makeFakeImage(e,t,a){if(!e&&!t)return null;return{imageName:e,amis:{[a]:[t]},attributes:{virtualizationType:"*",architecture:"*",creationDate:(new Date).toISOString()}}}loadImagesFromApplicationName(e){const t=e.name.replace(/_/g,"[_\\-]")+"*";return this.awsImageReader.findImages({q:t})}buildQueryForSimilarImages(e){let t=!1,a=e.split("_")[0];const n=a.split("-");n.length>3&&(a=n.slice(0,-3).join("-"),t=!0);return!a||a.length<3?null:a+(t?"-*":"*")}loadImageById(e,t,a){return e?this.awsImageReader.getImage(e,t,a).catch(()=>null):Promise.resolve(null)}searchForImages(e){return e&&e.length>=3?this.awsImageReader.findImages({q:e}):Promise.resolve([])}fetchPackageImages(e,t,a,n){const r=e&&e.amis&&e.amis[t]&&e.amis[t][0];return this.loadImageById(r,t,a).then(e=>e?this.searchForImages(this.buildQueryForSimilarImages(e.imageName)).then(t=>t.find(t=>t.imageName===e.imageName)?t:t.concat(e)):this.loadImagesFromApplicationName(n))}selectImage(e){this.props.value!==e&&this.props.onChange(e)}findMatchingImage(e,t){return e.find(e=>t&&t.imageName===e.imageName)}componentDidMount(){const e=this.props$.pipe(Ia(e=>e.region),Pa()),{value:t,region:a,credentials:n,application:r}=this.props;this.setState({isLoadingPackageImages:!0});const l=this.fetchPackageImages(t,a,n,r),i=Na(l).pipe(za(e=>(console.error(e),this.setState({errorMessage:"Unable to load package images"}),ka([]))),Ba(()=>this.setState({isLoadingPackageImages:!1}))),s=wa([i,e,this.sortImagesBy$]).pipe(Ia(([e,t,a])=>{const n=e.filter(e=>!!e.amis[t]);return this.sortImages(n,a)})),o=this.searchInput$.pipe(Ba(e=>this.setState({searchString:e})),Pa(),Ma(250)).pipe(Ba(()=>this.setState({isSearching:!0})),Ga(e=>this.searchForImages(e)),za(e=>(console.error(e),this.setState({errorMessage:"Unable to search for images"}),ka([]))),Ba(()=>this.setState({isSearching:!1})));wa([o,e,this.sortImagesBy$]).pipe(Ia(([e,t,a])=>{const{searchString:n}=this.state;if(0===e.length&&/ami-[0-9a-f]{8,17}/.exec(n)){return[co.makeFakeImage(n,n,t)].filter(e=>!!e)}const r=e.filter(e=>!!e.amis[t]);return this.sortImages(r,a)})).pipe(Da(this.destroy$)).subscribe(e=>this.setState({searchResults:e})),s.pipe(Da(this.destroy$)).subscribe(e=>{this.setState({packageImages:e}),this.selectImage(this.findMatchingImage(e,this.props.value))}),e.pipe(Ga(e=>{const t=this.props.value;if("packageImages"===this.state.selectionMode)return s.pipe(Ia(e=>this.findMatchingImage(e,t)));{const a=!!(t&&t.amis&&t.amis[e]);return ka(a?t:void 0)}}),Da(this.destroy$)).subscribe(e=>this.selectImage(e))}setSortImagesBy(e){this.sortImagesBy$.next(e)}sortImages(e,t){return e.slice().sort((e,a)=>"ts"===t?a.attributes.creationDate.localeCompare(e.attributes.creationDate):e.imageName.localeCompare(a.imageName))}componentDidUpdate(){this.props$.next(this.props)}componentWillUnmount(){this.destroy$.next()}render(){const{value:e,credentials:a,region:n,onChange:r}=this.props,{isLoadingPackageImages:l,isSearching:i,selectionMode:s,packageImages:o,searchResults:c,searchString:d}=this.state,m=!!o,u=e=>{const t=e.amis||{},r=t[n]&&t[n][0],l=r?`(${r})`:` - not found in ${a}/${n}`;return Mt.createElement(Mt.Fragment,null,Mt.createElement("span",null,e.imageName),Mt.createElement("span",null,l))},p={clearable:!1,required:!0,valueKey:"imageName",optionRenderer:u,valueRenderer:u,onSelectResetsInput:!1,onBlurResetsInput:!1,onCloseResetsInput:!1,value:e},g=this.state.errorMessage?Mt.createElement(ge,{message:this.state.errorMessage,type:"error"}):null,v=`No results found in ${a}/${n}`;if("searchAllImages"===s){const e=!d||d.length<3?"Please enter at least 3 characters":i?"Searching...":v;return Mt.createElement("div",{className:"col-md-9"},Mt.createElement(h,{...p,menuRenderer:this.buildImageMenu,isLoading:i,placeholder:"Search for an image...",filterOptions:!1,noResultsText:e,options:null!=c?c:[],onInputChange:e=>(this.searchInput$.next(e),e),onChange:r}),g,Mt.createElement("button",{type:"button",className:"link",onClick:()=>this.setState({selectionMode:"packageImages",searchString:"",searchResults:null})},"Back to Package Images")," ",Mt.createElement(t,{id:"aws.serverGroup.allImages"}))}return m?Mt.createElement("div",{className:"col-md-9"},Mt.createElement(h,{...p,menuRenderer:this.buildImageMenu,isLoading:l,placeholder:"Pick an image",noResultsText:v,options:o,onChange:r}),g,Mt.createElement("button",{type:"button",className:"link",onClick:()=>this.setState({selectionMode:"searchAllImages"})},"Search All Images")," ",Mt.createElement(t,{id:"aws.serverGroup.allImages"})):Mt.createElement("div",{className:"col-md-9"},Mt.createElement(h,{...p,isLoading:l,disabled:!0,options:[e].filter(e=>!!e)}),g,Mt.createElement("button",{type:"button",className:"link",onClick:()=>this.setState({selectionMode:"searchAllImages"})},"Search All Images")," ",Mt.createElement(t,{id:"aws.serverGroup.allImages"}))}}const mo=e=>e&&e.includes("${");class uo extends Mt.Component{constructor(t){super(t),this.imageChanged=t=>{var a,n;const{setFieldValue:r,values:l}=this.props.formik;this.setState({selectedImage:t});const i=t&&t.attributes.virtualizationType,s=t&&t.attributes.architecture,o=t&&t.imageName;if(l.virtualizationType=i,l.amiArchitecture=s,l.amiName=o,r("amiArchitecture",s),r("virtualizationType",i),r("amiName",o),l.imageChanged(l),t&&(null==(a=e.disabledImages)?void 0:a.length)&&(null==(n=hn.serverGroups)?void 0:n.enableIPv6)){e.disabledImages.some(e=>t.imageName.includes(e))&&r("associateIPv6Address",!1)}this.props.formik.validateForm()},this.accountUpdated=e=>{var t,a,n,r,l,i,s,o,c,d,m;const{setFieldValue:u,values:p}=this.props.formik;p.credentials=e,p.credentialsChanged(p),p.subnetChanged(p),u("credentials",e);const h=p.backingData.credentialsKeyedByAccount[e];if(u("associateIPv6Address",(null==(a=null==(t=hn)?void 0:t.serverGroups)?void 0:a.enableIPv6)&&(null==(r=null==(n=hn)?void 0:n.serverGroups)?void 0:r.setIPv6InTest)&&"test"===h.environment),null==(l=hn.serverGroups)?void 0:l.enableIMDSv2){const t=!(null==(o=null==(s=null==(i=hn)?void 0:i.serverGroups)?void 0:s.accountDenyListIMDSv2)?void 0:o.includes(e)),a=null==(c=hn.serverGroups)?void 0:c.defaultIMDSv2AppAgeLimit,n=null==(m=null==(d=this.props.app)?void 0:d.attributes)?void 0:m.createTs;u("requireIMDSv2",t&&a&&n&&Number(n)>a)}},this.regionUpdated=e=>{const{values:t,setFieldValue:a}=this.props.formik;t.region=e,t.regionChanged(t),a("region",e)},this.subnetUpdated=()=>{const{setFieldValue:e,values:t}=this.props.formik;t.subnetChanged(t),e("subnetType",t.subnetType)},this.clientRequestsChanged=()=>{const{values:e,setFieldValue:t}=this.props.formik;e.toggleSuspendedProcess(e,"AddToLoadBalancer"),t("suspendedProcesses",e.suspendedProcesses),this.setState({})},this.navigateToLatestServerGroup=()=>{const{values:e}=this.props.formik,{latestServerGroup:t}=this.state,a={provider:e.selectedProvider,accountId:t.account,region:t.region,serverGroup:t.name};this.props.stateService.is("home.applications.application.insight.clusters")?this.props.stateService.go(".serverGroup",a):this.props.stateService.go("^.serverGroup",a)},this.stackChanged=e=>{const{setFieldValue:t,values:a}=this.props.formik;a.stack=e,t("stack",e),a.clusterChanged(a)},this.handleReasonChanged=e=>{this.props.formik.setFieldValue("reason",e)},this.strategyChanged=(e,t)=>{e.onStrategyChange(e,t),this.props.formik.setFieldValue("strategy",t.key)},this.onStrategyFieldChange=(e,t)=>{this.props.formik.setFieldValue(e,t)};const{amiName:a,region:n,viewState:{imageId:r}}=t.formik.values,l=co.makeFakeImage(a,r,n);this.state={...this.getStateFromProps(t),selectedImage:l}}getStateFromProps(e){const{app:t}=e,{values:a}=e.formik,n=le.getClusterName(t.name,a.stack,a.freeFormDetails),r=!t.clusters.find(e=>e.name===n),l=t.serverGroups.data.filter(e=>e.cluster===n&&e.account===a.credentials&&e.region===a.region).sort((e,t)=>e.createdTime-t.createdTime),i=l.length?l.pop():null;return{namePreview:n,createsNewCluster:r,latestServerGroup:i}}validate(e){const t={};var a,n;return a=e.stack,mo(a)||/^([a-zA-Z_0-9._${}]*(\${.+})*)*$/.test(a)||(t.stack="Only dot(.) and underscore(_) special characters are allowed in the Stack field."),n=e.freeFormDetails,mo(n)||/^([a-zA-Z_0-9._${}-]*(\${.+})*)*$/.test(n)||(t.freeFormDetails="Only dot(.), underscore(_), and dash(-) special characters are allowed in the Detail field."),e.viewState.disableImageSelection||e.amiName||(t.amiName="Image required."),e.resourceSummary&&(t.resourceSummary={id:"Cluster is managed"}),t}componentWillReceiveProps(e){this.setState(this.getStateFromProps(e))}render(){const{app:e,formik:a}=this.props,{errors:n,values:r}=a,{createsNewCluster:l,latestServerGroup:i,namePreview:s}=this.state,o=r.backingData.accounts,c=r.viewState.readOnlyFields||{};return Mt.createElement("div",{className:"container-fluid form-horizontal"},r.regionIsDeprecated(r)&&Mt.createElement("div",{className:"form-group row"},Mt.createElement("div",{className:"col-md-12 error-message"},Mt.createElement("div",{className:"alert alert-danger"},"You are deploying into a deprecated region within the ",r.credentials," account!"))),Mt.createElement(ut,{app:e,formik:a}),Mt.createElement("div",{className:"form-group"},Mt.createElement("div",{className:"col-md-3 sm-label-right"},"Account"),Mt.createElement("div",{className:"col-md-7"},Mt.createElement(Te,{value:r.credentials,onChange:e=>this.accountUpdated(e.target.value),readOnly:c.credentials,accounts:o,provider:"aws"}))),Mt.createElement(Ie,{readOnly:c.region,labelColumns:3,component:r,field:"region",account:r.credentials,regions:r.backingData.filtered.regions,onChange:this.regionUpdated}),Mt.createElement(el,{readOnly:c.subnet,labelColumns:3,helpKey:"aws.serverGroup.subnet",component:r,field:"subnetType",region:r.region,application:e,subnets:r.backingData.filtered.subnetPurposes,onChange:this.subnetUpdated,showSubnetWarning:!0}),Mt.createElement("div",{className:"form-group"},Mt.createElement("div",{className:"col-md-3 sm-label-right"},"Stack ",Mt.createElement(t,{id:"aws.serverGroup.stack"})),Mt.createElement("div",{className:"col-md-7"},Mt.createElement("input",{type:"text",className:"form-control input-sm no-spel",value:r.stack,onChange:e=>this.stackChanged(e.target.value)}))),n.stack&&Mt.createElement("div",{className:"form-group row slide-in"},Mt.createElement("div",{className:"col-sm-9 col-sm-offset-2 error-message"},Mt.createElement("span",null,n.stack))),Mt.createElement(pt,{app:e,formik:a}),r.viewState.imageSourceText&&Mt.createElement("div",{className:"form-group"},Mt.createElement("div",{className:"col-md-3 sm-label-right"},"Image Source"),Mt.createElement("div",{className:"col-md-7",style:{marginTop:"5px"}},Mt.createElement(ke,{tag:"span",message:r.viewState.imageSourceText}))),!r.viewState.disableImageSelection&&Mt.createElement("div",{className:"form-group"},Mt.createElement("div",{className:"col-md-3 sm-label-right"},"Image ",Mt.createElement(t,{id:"aws.serverGroup.imageName"})),mo(r.amiName)?Mt.createElement(en,{name:"amiName"}):Mt.createElement(co,{onChange:e=>this.imageChanged(e),value:this.state.selectedImage,application:e,credentials:r.credentials,region:r.region})),Mt.createElement("div",{className:"form-group"},Mt.createElement("div",{className:"col-md-3 sm-label-right"},"Traffic ",Mt.createElement(t,{id:"aws.serverGroup.traffic"})),Mt.createElement("div",{className:"col-md-9 checkbox"},Mt.createElement("label",null,Mt.createElement("input",{type:"checkbox",onChange:this.clientRequestsChanged,checked:!r.processIsSuspended(r,"AddToLoadBalancer"),disabled:""!==r.strategy&&"custom"!==r.strategy}),"Send client requests to new instances"))),!r.viewState.disableStrategySelection&&r.selectedProvider&&Mt.createElement(Ze,{command:r,onFieldChange:this.onStrategyFieldChange,onStrategyChange:this.strategyChanged}),!r.viewState.hideClusterNamePreview&&Mt.createElement(ht,{createsNewCluster:l,latestServerGroupName:null==i?void 0:i.name,mode:r.viewState.mode,namePreview:s,navigateToLatestServerGroup:this.navigateToLatestServerGroup}),Mt.createElement(gt,{reason:r.reason,onChange:this.handleReasonChanged}))}}const po=N(uo);class ho extends Mt.Component{constructor(){super(...arguments),this.preferSourceCapacityOptions=[{label:"fail the stage",value:!1},{label:"use fallback values",value:!0}],this.useSourceCapacityUpdated=e=>{const t="true"===e.target.value,{command:a}=this.props;this.props.setFieldValue("useSourceCapacity",t),t||(delete a.preferSourceCapacity,this.props.setFieldValue("preferSourceCapacity",void 0)),this.setState({})},this.simpleInstancesChanged=e=>{this.setMinMax(e)},this.preferSourceCapacityChanged=e=>{this.props.setFieldValue("preferSourceCapacity",!(!e||!e.value)||void 0),this.setState({})},this.capacityFieldChanged=(e,t)=>{const{command:a,setFieldValue:n}=this.props;a.capacity={...a.capacity},a.capacity[e]=t,n("capacity",a.capacity)}}setSimpleCapacity(e){const{command:t}=this.props,a={...t.viewState,useSimpleCapacity:e};this.props.setFieldValue("useSourceCapacity",!1),this.props.setFieldValue("viewState",a),this.setMinMax(t.capacity.desired),this.setState({})}setMinMax(e){const{command:t}=this.props;t.viewState.useSimpleCapacity&&(t.capacity={min:e,max:e,desired:e},this.props.setFieldValue("useSourceCapacity",!1),this.props.setFieldValue("capacity",t.capacity)),this.setState({})}render(){const{command:e,MinMaxDesired:a}=this.props,n=e.viewState.readOnlyFields||{};return!e.viewState.useSimpleCapacity||e.useSourceCapacity?Mt.createElement("div",null,Mt.createElement("div",{className:"form-group"},Mt.createElement("div",{className:"col-md-12"},Mt.createElement("p",null,"Sets up auto-scaling constraints for this server group."),Mt.createElement("p",null,"To set min, max, and desired instance counts to the same value use the"," ",Mt.createElement("a",{className:"clickable",onClick:()=>this.setSimpleCapacity(!0)},"Simple Mode"),"."))),!n.useSourceCapacity&&"editPipeline"===e.viewState.mode&&Mt.createElement("div",{className:"form-group"},Mt.createElement("div",{className:"col-md-3 sm-label-right"},"Capacity"),Mt.createElement("div",{className:"col-md-9 radio"},Mt.createElement("label",null,Mt.createElement("input",{type:"radio",checked:e.useSourceCapacity,value:"true",id:"useSourceCapacityTrue",onChange:this.useSourceCapacityUpdated}),"Copy the capacity from the current server group",Mt.createElement(t,{id:"serverGroupCapacity.useSourceCapacityTrue"}))),e.useSourceCapacity&&Mt.createElement("div",{className:"col-md-9 col-md-offset-3 radio",style:{paddingLeft:"35px"}},Mt.createElement("div",null,"If no current server group is found,",Mt.createElement(_a,{clearable:!1,value:!!e.preferSourceCapacity,options:this.preferSourceCapacityOptions,onChange:this.preferSourceCapacityChanged})),e.preferSourceCapacity&&Mt.createElement("div",null,Mt.createElement("b",null,"Fallback values"),Mt.createElement(a,{command:e,fieldChanged:this.capacityFieldChanged}))),Mt.createElement("div",{className:"col-md-9 col-md-offset-3 radio"},Mt.createElement("label",null,Mt.createElement("input",{type:"radio",checked:!e.useSourceCapacity,value:"false",id:"useSourceCapacityFalse",onChange:this.useSourceCapacityUpdated}),"Let me specify the capacity",Mt.createElement(t,{id:"serverGroupCapacity.useSourceCapacityFalse"})))),(!e.useSourceCapacity||"editPipeline"!==e.viewState.mode)&&Mt.createElement("div",null,Mt.createElement("div",{className:"col-md-9 col-md-offset-3"},Mt.createElement(a,{command:e,fieldChanged:this.capacityFieldChanged})))):Mt.createElement("div",null,Mt.createElement("div",{className:"form-group"},Mt.createElement("div",{className:"col-md-12"},Mt.createElement("p",null,"Sets the min, max, and desired instance counts to the same value."),Mt.createElement("p",null," ","To set capacity for auto-scaling, use the"," ",Mt.createElement("a",{className:"clickable",onClick:()=>this.setSimpleCapacity(!1)},"Advanced Mode"),"."))),Mt.createElement("div",{className:"form-group"},Mt.createElement("div",{className:"col-md-3 sm-label-right"},"Number of Instances"),Mt.createElement("div",{className:"col-md-8"},Mt.createElement(be,{value:e.capacity.desired,min:0,onChange:this.simpleInstancesChanged}))))}}class go extends Mt.Component{render(){const{command:{capacity:{min:e,max:t,desired:a}},fieldChanged:n}=this.props;return Mt.createElement("div",null,Mt.createElement("div",{className:"form-group"},Mt.createElement("div",{className:"col-md-2"},"Min"),Mt.createElement("div",{className:"col-md-8"},Mt.createElement(be,{value:e,min:0,max:"number"==typeof t?t:void 0,onChange:e=>n("min",e),required:!0}))),Mt.createElement("div",{className:"form-group"},Mt.createElement("div",{className:"col-md-2"},"Max"),Mt.createElement("div",{className:"col-md-8"},Mt.createElement(be,{value:t,min:"number"==typeof e?e:void 0,onChange:e=>n("max",e),required:!0}))),Mt.createElement("div",{className:"form-group"},Mt.createElement("div",{className:"col-md-2"},"Desired"),Mt.createElement("div",{className:"col-md-8"},Mt.createElement(be,{value:a,min:"number"==typeof e?e:void 0,max:"number"==typeof t?t:void 0,onChange:e=>n("desired",e),required:!0}))))}}class vo extends Mt.Component{validate(e){const t={};(vt(e.capacity.min)<0||vt(e.capacity.max)<0||vt(e.capacity.desired)<0)&&(t.capacity="Capacity min, max, and desired all have to be non-negative values.");const a=e;return void 0!==a.targetHealthyDeployPercentage&&null!==a.targetHealthyDeployPercentage||(t.targetHealthyDeployPercentage="Target Healthy Deploy Percentage required."),t}render(){const{setFieldValue:e,values:t}=this.props.formik;return Mt.createElement("div",{className:"container-fluid form-horizontal"},Mt.createElement("div",{className:"row"},Mt.createElement("div",{className:"col-md-12"},Mt.createElement(ho,{command:t,setFieldValue:e,MinMaxDesired:go}))),Mt.createElement("div",{className:"row"},Mt.createElement("div",{className:"col-md-12"},Mt.createElement("div",{className:"form-group form-inline",style:{marginTop:"20px"}},Mt.createElement("div",{className:"col-md-12"},"Consider deployment successful when"," ",Mt.createElement(en,{type:"number",name:"targetHealthyDeployPercentage",min:"0",max:"100",className:"form-control input-sm inline-number",required:!0})," ","percent of instances are healthy.")))))}}function fo(e){return Mt.createElement("div",null,Mt.createElement("h4",{style:{marginTop:"10px"}},"This application is"),e.instanceProfileList.map(t=>Mt.createElement("div",{key:t.type,className:"instance-profile-header profile-button"},Mt.createElement("button",{type:"button",onClick:()=>e.handleProfileChange(t.type),className:e.currentProfile===t.type?"instance-profile active":"instance-profile"},e.currentProfile===t.type&&Mt.createElement("span",{className:"far fa-check-circle selected-indicator"}),Mt.createElement("div",{className:"panel-heading"},Mt.createElement("h4",null,Mt.createElement("span",{className:`glyphicon glyphicon-${t.icon}`}),Mt.createElement("div",null,t.label)))))))}function Eo(e){const{selectedInstanceTypes:t,currentProfile:a}=e,n=tr.awsInstanceTypeService.isBurstingSupportedForAllTypes(t),r=!!tr.awsInstanceTypeService.getInstanceTypesInCategory(t,a).length,[l,i]=Rt(!1);return Lt(()=>{t&&t.length&&(n||e.setUnlimitedCpuCredits(void 0),i(n)),a&&i(t&&t.length>0&&n&&r)},[a,t]),Mt.createElement("div",{className:"row",style:{fontSize:"110%"}},l&&Mt.createElement("div",null,Mt.createElement(ft,{toggleSize:Et.XSMALL,propLabel:"Unlimited CPU credits ",propHelpFieldId:"aws.serverGroup.unlimitedCpuCredits",tooltipPropOffBtn:"Toggle to turn OFF unlimited CPU credits",displayTextPropOffBtn:"Off",tooltipPropOnBtn:"Toggle to turn ON unlimited CPU credits",displayTextPropOnBtn:"On",onClick:t=>e.setUnlimitedCpuCredits(t),isPropertyActive:e.unlimitedCpuCredits})))}function yo(e){var t,a,n,r,l,i,s,o,c,d,m,u,p,h,g,v,f,E,y,b,C,N,w,S,k;const T=(null==(a=null==(t=e.instanceType)?void 0:t.supportedUsageClasses)?void 0:a.includes("spot"))?"| SPOT supported":"",I=`${null==(n=e.instanceType)?void 0:n.defaultVCpus} vCPU | ${null==(r=e.instanceType)?void 0:r.memoryInGiB} Gib Memory ${T}`,P=(null==(l=e.instanceType)?void 0:l.instanceStorageSupported)&&Mt.createElement("span",null,Mt.createElement("br",null),Mt.createElement("span",{className:"select-option-label-attributes"},`Instance Storage: ${Ot.toUpper(null==(s=null==(i=e.instanceType)?void 0:i.instanceStorageInfo)?void 0:s.storageTypes)} | ${null==(c=null==(o=e.instanceType)?void 0:o.instanceStorageInfo)?void 0:c.totalSizeInGB} Gib total size`)),A=(null==(d=e.instanceType)?void 0:d.ebsInfo)&&Mt.createElement("span",null,Mt.createElement("br",null),Mt.createElement("span",{className:"select-option-label-attributes"},`EBS: optimization ${null==(u=null==(m=e.instanceType)?void 0:m.ebsInfo)?void 0:u.ebsOptimizedSupport} | NVMe ${null==(h=null==(p=e.instanceType)?void 0:p.ebsInfo)?void 0:h.nvmeSupport} | Encryption ${null==(v=null==(g=e.instanceType)?void 0:g.ebsInfo)?void 0:v.encryptionSupport}`)),G=(null==(f=e.instanceType)?void 0:f.gpuInfo)&&Mt.createElement("span",null,Mt.createElement("br",null),Mt.createElement("span",{className:"select-option-label-attributes"},`GPU: ${null==(y=null==(E=e.instanceType)?void 0:E.gpuInfo)?void 0:y.totalGpuMemoryInMiB} MiB total memory`,null==(C=null==(b=e.instanceType)?void 0:b.gpuInfo)?void 0:C.gpus.map(e=>` | ${e.count} ${e.manufacturer} ${e.name} GPUs, size: ${e.gpuSizeInMiB} MiB`))),x=void 0!==(null==(N=e.instanceType)?void 0:N.currentGeneration)&&null!==(null==(w=e.instanceType)?void 0:w.currentGeneration)&&Mt.createElement("span",null,Mt.createElement("br",null),Mt.createElement("span",{className:"select-option-label-attributes"},(null==(S=e.instanceType)?void 0:S.currentGeneration)?"Current Generation":"Previous Generation"));return Mt.createElement("span",null,Mt.createElement("span",{className:"select-option-label"},null==(k=e.instanceType)?void 0:k.name),Mt.createElement("br",null),Mt.createElement("span",{className:"select-option-label-attributes"},I),P,A,G,x)}Cr(".advanced-mode-selector .instance-profile-header {\n display: inline-block;\n}\n.advanced-mode-selector .instance-profile-header button {\n width: 100%;\n}\n.advanced-mode-selector .instance-profile-header h4 {\n min-height: 52px;\n}\n.advanced-mode-selector .instance-profile-header .panel-heading {\n padding: 0 0 0 0;\n}\n.advanced-mode-selector .instance-profile-header.profile-button {\n width: calc(25% - 20px);\n margin: 0 10px 15px 10px;\n}\n.advanced-mode-selector .sub-section {\n padding: 0 15px;\n margin-bottom: 5px;\n}\n.advanced-mode-selector .sub-section .description {\n padding: 0 10px;\n}\n.advanced-mode-selector .sub-section tr.unavailable {\n opacity: 0.5;\n}\n.advanced-mode-selector .sub-section tr.sortable .instance-type-drag-handle {\n display: inline-block;\n opacity: 0.9;\n font-size: 100%;\n padding-top: 8px;\n}\n.advanced-mode-selector .sub-section th {\n font-size: 110%;\n}\n.custom-profile .select {\n width: 97%;\n display: inline-flex;\n}\n.custom-profile .select-option-label {\n font-size: 100%;\n font-weight: bold;\n}\n.custom-profile .select-option-label-attributes {\n font-size: 90%;\n font-weight: normal;\n font-style: italic;\n}\n.instance-profile {\n vertical-align: top;\n text-align: left;\n min-height: 100px;\n font-size: 90%;\n border: 1px solid var(--color-silver);\n border-radius: 3px;\n color: var(--color-mineshaft);\n background-color: transparent;\n}\n.instance-profile:hover,\n.instance-profile:focus {\n color: var(--color-mineshaft);\n text-decoration: none;\n}\n.instance-profile .selected-indicator {\n display: flex;\n width: 100%;\n text-align: right;\n padding-right: 5px;\n font-size: 150%;\n color: var(--color-accent);\n}\n.instance-profile .selected-indicator.custom {\n margin-top: 5px;\n}\n.instance-profile h4 {\n margin-top: 0;\n text-align: center;\n word-spacing: 300px;\n}\n.instance-profile ul {\n font-size: 95%;\n padding-left: 20px;\n}\n.instance-profile .panel-heading {\n padding-top: 0;\n padding-bottom: 0;\n}\n.instance-profile:hover,\n.instance-profile:focus,\n.instance-profile.active {\n outline: 0;\n}\n.instance-profile.active {\n box-shadow: inset 0 0 3px 2px var(--color-accent);\n border-color: var(--color-accent);\n}\n.instance-profile:hover,\n.instance-profile:focus {\n box-shadow: 0 0 8px 2px var(--color-accent);\n}\n");const bo=({min:e,max:t})=>{const a=Mt.createElement(Mt.Fragment,null,Mt.createElement("span",{className:"cost"},"$".repeat(e)),"$".repeat(4-e)),n=Mt.createElement(Mt.Fragment,null,Mt.createElement("span",{className:"cost"},"$".repeat(Math.min(4,t))),"$".repeat(4-Math.min(4,t)));return Mt.createElement("span",{className:"cost-factor"},a,t?` - ${n}`:"")};function Co(e){var t,a;const n=!!e.selectedType,[r,i]=Rt(""),s=n?e.selectedType.instanceType:e.instanceTypeDetails.name,o=!n&&e.instanceTypeDetails.unavailable,c=(t,a)=>{o||e.addOrUpdateInstanceType(t,a),i("")},d=e=>{i(e.target.value),n?c(s,e.target.value):document.getElementById(`selectInstanceType-${s}`).focus()};let m;if(e.isCustom){const a=Mt.createElement(yo,{instanceType:e.selectedTypeInfo});m=Mt.createElement("tr",{key:s,className:"sortable clickable"},Mt.createElement("td",null,Mt.createElement(No,null)),Mt.createElement("td",null,`${s} `,Mt.createElement(re,{placement:"right",template:a,className:"custom-profile"},Mt.createElement("span",{className:"clickable help-field"},Mt.createElement("i",{className:"small glyphicon glyphicon-info-sign"})))),Mt.createElement("td",{title:"Enter optional weight (allowed values: 1 to 999)."},Mt.createElement(l,{className:"form-control input input-sm",pattern:"[0-9]*",placeholder:"Enter optional weight (allowed values: 1 to 999).",value:(null==(t=e.selectedType)?void 0:t.weightedCapacity)||"",onChange:e=>c(s,e.target.value)})),Mt.createElement("td",null,Mt.createElement("div",null,Mt.createElement("span",null,Mt.createElement("a",{className:"btn btn-sm btn-link clickable",onClick:()=>e.removeInstanceType(s),style:{padding:"5px"}},Mt.createElement(O,{value:"Remove instance type"},Mt.createElement("span",{className:"glyphicon glyphicon-trash"})))))))}else{const{cpu:t,memory:i,cpuCreditsPerHour:u,storage:p,costFactor:h}=e.instanceTypeDetails;m=Mt.createElement("tr",{key:s,className:n?"sortable clickable":"non-sortable "+(o?"unavailable":"clickable"),title:n?"Click to unselect instance type":o?"This instance type is not available for the selected configuration":"Click to select instance type",onClick:t=>{$(t.target).is("input")||(n?e.removeInstanceType(s):c(s,r))}},n?Mt.createElement("td",null,Mt.createElement(No,null)):Mt.createElement("td",null),Mt.createElement("td",null,Mt.createElement(qa,{id:`selectInstanceType-${s}`,checked:!!n,disabled:o,onChange:()=>{n?e.removeInstanceType(s):c(s,r)}})),Mt.createElement("td",null,s),Mt.createElement("td",null,t),Mt.createElement("td",null,i),u?Mt.createElement("td",null,u):Mt.createElement("td",{title:"Cpu credits not applicable to instance type."},"-"),"EBS"===p.type&&Mt.createElement("td",null,"EBS Only"),"SSD"===p.type&&Mt.createElement("td",null,p.count+"x"+p.size),Mt.createElement("td",null,Mt.createElement(bo,{min:h})),Mt.createElement("td",{title:o?"":"Enter optional weight (allowed values: 1 to 999)."},Mt.createElement(l,{inputClassName:"form-control input input-sm",id:`weightedCapacity-${s}`,pattern:"[0-9]*",placeholder:"Enter optional weight (allowed values: 1 to 999).",disabled:o,value:(null==(a=e.selectedType)?void 0:a.weightedCapacity)||r||"",onChange:d})))}return m}const No=Ka(()=>Mt.createElement(O,{value:"Drag to change priority"},Mt.createElement("span",{className:"instance-type-drag-handle glyphicon glyphicon-resize-vertical"})));function wo(e){return Mt.createElement(So,{isCustom:e.isCustom,selectedInstanceTypesMap:e.selectedInstanceTypesMap,selectedInstanceTypesInfo:e.selectedInstanceTypesInfo,removeInstanceType:e.removeInstanceType,addOrUpdateInstanceType:e.addOrUpdateInstanceType,instanceTypeDetails:e.isCustom?null:new Map(Object.entries(ya(Wt(e.profileFamiliesDetails.map(e=>e.instanceTypes)),"name"))),onSortEnd:t=>e.handleSortEnd(t),distance:1})}const So=Ja(e=>{const{isCustom:t,selectedInstanceTypesMap:a}=e;let n,r;if(t)n=a.size>0&&Array.from(a.values()).sort((e,t)=>e.priority-t.priority).map((t,a)=>Mt.createElement(ko,{key:`${t.instanceType}-${a}`,index:a,isCustom:!0,selectedType:t,selectedTypeInfo:e.selectedInstanceTypesInfo.find(e=>e.name===t.instanceType),removeInstanceType:e.removeInstanceType,addOrUpdateInstanceType:e.addOrUpdateInstanceType}));else{const{instanceTypeDetails:t}=e,l=Array.from(null==t?void 0:t.keys()),i=na(l,Array.from(a.keys())),s=Array.from(a.values()).filter(e=>l.includes(e.instanceType)).sort((e,t)=>e.priority-t.priority);n=s&&s.length>0&&s.map((a,n)=>Mt.createElement(ko,{key:`${a.instanceType}-${n}`,index:n,isCustom:!1,selectedType:a,instanceTypeDetails:t,removeInstanceType:e.removeInstanceType,addOrUpdateInstanceType:e.addOrUpdateInstanceType})),r=i&&i.length>0&&i.map(a=>Mt.createElement(Co,{key:a,isCustom:!1,instanceTypeDetails:t.get(a),addOrUpdateInstanceType:e.addOrUpdateInstanceType}))}return Mt.createElement("tbody",null,n,t?null:r)}),ko=Xa(e=>Mt.createElement(Co,{key:e.selectedType.instanceType,isCustom:e.isCustom,selectedType:e.selectedType,selectedTypeInfo:e.selectedTypeInfo,instanceTypeDetails:e.isCustom?null:e.instanceTypeDetails.get(e.selectedType.instanceType),removeInstanceType:e.removeInstanceType,addOrUpdateInstanceType:e.addOrUpdateInstanceType}));function To(e){return Mt.createElement("div",{className:"custom-profile"},Mt.createElement(_a,{className:"select",clearable:!1,multi:!1,placeholder:"Filter like 16vcpu, 32gib, spot, oldGen or Select an instance type to add",removeSelected:!0,searchable:!0,options:e.availableInstanceTypesList,optionRenderer:e=>Mt.createElement(yo,{instanceType:e}),filterOption:(e,t)=>{const{name:a,defaultVCpus:n,memoryInGiB:r,instanceStorageInfo:l,ebsInfo:i,gpuInfo:s,supportedUsageClasses:o,currentGeneration:c}=e;return t.split(",").every(e=>{const t=Ot.toLower(e.trim());return t.match(/\d+\s*vcpu/)&&n>=Ot.toNumber(t.split("vcpu")[0].trim())||t.match(/\d+\s*gib/)&&r>=Ot.toNumber(t.split("gib")[0].trim())||t.match(/\b(ssd|hdd)\b/)&&(null==l?void 0:l.storageTypes.includes(t))||"spot"===t&&(null==o?void 0:o.includes(t))||"ebs"===t&&i||"gpu"===t&&s||"currentgen"===t&&c||"oldgen"===t&&!c||a.match(t)})},valueRenderer:e=>Mt.createElement(Mt.Fragment,null,e.name),onChange:t=>e.addOrUpdateInstanceType(t.name,void 0)})," ",Mt.createElement(t,{id:"aws.serverGroup.instanceTypesSelect"}))}function Io(e){let t;return t=e.isCustom?Mt.createElement("p",null,"Choose the instance types that best suit the needs of your application."):Mt.createElement(Mt.Fragment,null,Mt.createElement("p",null,Mt.createElement("b",null,e.profileLabel)),Mt.createElement("ul",null,e.profileDescriptionArr.map((e,t)=>Mt.createElement("li",{key:t},e)))),Mt.createElement("div",{className:"row sub-section"},Mt.createElement("h4",null,"Instance Types"),Mt.createElement("div",{className:"description"},t,Mt.createElement("p",null,"Learn about AWS recommended best practices in"," ",Mt.createElement("a",{target:"_blank",href:"https://spinnaker.io/docs/setup/other_config/server-group-launch-settings/aws-ec2/launch-templates/#create-a-server-group-with-aws-recommended-best-practices-for-ec2-spot"},"examples and docs"),"."),Mt.createElement("i",null,Mt.createElement("b",null,"Note:"),Mt.createElement("ul",null,Mt.createElement("li",null,"The order of instance types sets their priority when On-Demand capacity is launched; instance type at the top is prioritized the highest."),Mt.createElement("li",null,"Some instance types might not be available for the selected configuration.")))))}function Po(e){let a,n,r,l;return e.isCustom?(a=Mt.createElement("th",null),n=Mt.createElement("th",null,"Instance Type ",Mt.createElement(t,{id:"aws.serverGroup.instanceTypes"})),r=null,l=Mt.createElement("th",null)):(a=Mt.createElement(Mt.Fragment,null,Mt.createElement("th",null),Mt.createElement("th",null)),n=Mt.createElement("th",null,"InstanceType"),r=Mt.createElement(Mt.Fragment,null,Mt.createElement("th",null,"vCPU"),Mt.createElement("th",null,"Mem (GiB)"),e.showCpuCredits&&Mt.createElement("th",null,"CPU Credits"),Mt.createElement("th",null,"Storage (GB)",Mt.createElement(t,{id:"aws.serverGroup.storageType"})),Mt.createElement("th",null,"Cost")),l=null),Mt.createElement("thead",null,Mt.createElement("tr",null,a,n,r,Mt.createElement("th",null,"Weight ",Mt.createElement(t,{id:"aws.serverGroup.instanceTypeWeight"})),l))}function Ao(e){return e.isCustom?Mt.createElement("tfoot",null,Mt.createElement("tr",null,Mt.createElement("td",null,Mt.createElement("span",{className:"glyphicon glyphicon-plus-sign",style:{paddingTop:"8px"}})),Mt.createElement("td",{colSpan:2},Mt.createElement(To,{availableInstanceTypesList:e.availableInstanceTypesList,addOrUpdateInstanceType:e.addOrUpdateInstanceType})),Mt.createElement("td",null))):null}function Go(e){return e.dirty.instanceType||e.dirty.launchTemplateOverridesForInstanceType&&e.dirty.launchTemplateOverridesForInstanceType.length>0?Mt.createElement("div",{className:"col-md-12"},Mt.createElement("div",{className:"alert alert-warning"},Mt.createElement("p",null,Mt.createElement("i",{className:"fa fa-exclamation-triangle"}),e.dirty.instanceType&&"The following instance type was found incompatible with the selected image/region and was removed:",e.dirty.launchTemplateOverridesForInstanceType&&e.dirty.launchTemplateOverridesForInstanceType.length>0&&"The following instance type(s) were found incompatible with the selected image/region and were removed:"),Mt.createElement("ul",null,e.dirty.instanceType&&Mt.createElement("li",{key:e.dirty.instanceType},e.dirty.instanceType),e.dirty.launchTemplateOverridesForInstanceType&&e.dirty.launchTemplateOverridesForInstanceType.length>0&&e.dirty.launchTemplateOverridesForInstanceType.map(e=>Mt.createElement("li",{key:e.instanceType},e.instanceType,e.weightedCapacity?" with weight "+e.weightedCapacity:""))),Mt.createElement("p",{className:"text-right"},Mt.createElement("a",{className:"btn btn-sm btn-default dirty-flag-dismiss clickable",onClick:()=>e.clearWarnings()},"Okay")))):null}function xo(e){var t;const{currentProfile:a,selectedInstanceTypesMap:n}=e,r=e=>{const t=Array.from(n.values()).sort((e,t)=>e.priority-t.priority).map(e=>e.instanceType),a=Ya(t,e.oldIndex,e.newIndex);l(a)},l=t=>{n.forEach((e,a)=>{const n=1+t.indexOf(a);e.priority!==n&&(e.priority=n)}),e.handleInstanceTypesChange(Array.from(n.values()))},i=t=>{const a=new Map(n);a.delete(t),e.handleInstanceTypesChange(Array.from(a.values()))},s=(t,a)=>{const r=Number(a),l=isNaN(r)||0===r?void 0:r.toString(),i=n.has(t)?{...n.get(t),weightedCapacity:l}:{instanceType:t,weightedCapacity:l,priority:1+Array.from(n.values()).reduce((e,t)=>t.priority>e?t.priority:e,0)};n.set(t,i),e.handleInstanceTypesChange(Array.from(n.values()))},o=null==(t=hn.serverGroups)?void 0:t.enableCpuCredits,c=Array.from(n.keys()),d=Mt.createElement("div",null,Mt.createElement(Eo,{unlimitedCpuCredits:e.unlimitedCpuCreditsInCmd,currentProfile:a,selectedInstanceTypes:c,setUnlimitedCpuCredits:e.setUnlimitedCpuCredits}));if(a&&"custom"!==a){const{label:t,descriptionListOverride:a,families:l,showCpuCredits:c}=e.profileDetails,m=!1;return Mt.createElement("div",{className:"row sub-section"},Mt.createElement(Io,{isCustom:m,profileLabel:t,profileDescriptionArr:a||l.map(e=>e.description)}),Mt.createElement(Go,{dirty:e.viewState.dirty,clearWarnings:e.clearWarnings}),o&&d,Mt.createElement("table",{className:"table table-hover"},Mt.createElement(Po,{isCustom:m,showCpuCredits:c}),Mt.createElement(wo,{isCustom:m,profileFamiliesDetails:l,selectedInstanceTypesMap:n,addOrUpdateInstanceType:s,removeInstanceType:i,handleSortEnd:r})))}{const t=!0;return Mt.createElement("div",{className:"row sub-section"},Mt.createElement(Io,{isCustom:t}),Mt.createElement(Go,{dirty:e.viewState.dirty,clearWarnings:e.clearWarnings}),o&&d,Mt.createElement("table",{className:"table table-hover"},Mt.createElement(Po,{isCustom:t}),Mt.createElement(wo,{isCustom:t,selectedInstanceTypesMap:n,selectedInstanceTypesInfo:e.availableInstanceTypesList.filter(e=>c.includes(e.name)),addOrUpdateInstanceType:s,removeInstanceType:i,handleSortEnd:r}),Mt.createElement(Ao,{isCustom:t,availableInstanceTypesList:e.availableInstanceTypesList.filter(e=>!c.includes(e.name)),addOrUpdateInstanceType:s})))}}function Do(e,t,a){const n=ta(e.values,t);Mt.useEffect(()=>{void 0===n&&void 0!==a&&e.setFieldValue(t,a)},[t,a,n])}function Bo(e){const{values:a,setFieldValue:n}=e.formik,i=[{label:"capacity-optimized (recommended)",value:"capacity-optimized"},{label:"capacity-optimized-prioritized",value:"capacity-optimized-prioritized"},{label:"lowest-price",value:"lowest-price"}];return Mt.useEffect(()=>{"lowest-price"!==a.spotAllocationStrategy?n("spotInstancePools",void 0):void 0===a.spotInstancePools&&n("spotInstancePools",2)},[a.spotAllocationStrategy]),Do(e.formik,"spotAllocationStrategy","capacity-optimized"),Do(e.formik,"onDemandAllocationStrategy","prioritized"),Do(e.formik,"onDemandBaseCapacity",0),Do(e.formik,"onDemandPercentageAboveBaseCapacity",100),Mt.createElement("div",{className:"InstancesDistribution row sub-section form-group"},Mt.createElement("h4",null,"Instances Distribution"),Mt.createElement("div",{className:"description"},"Diversify and distribute instance types across purchase options."," ",Mt.createElement(t,{id:"aws.serverGroup.instancesDistribution"})),Mt.createElement("br",null),Mt.createElement(r,{label:"Spot Allocation Strategy",name:"spotAllocationStrategy",help:Mt.createElement(t,{id:"aws.serverGroup.spotAllocationStrategy"}),input:e=>Mt.createElement(s,{...e,mode:"PLAIN",options:i})}),"lowest-price"===e.formik.values.spotAllocationStrategy&&Mt.createElement(r,{label:"Spot Instance Pools Count",name:"spotInstancePools",help:Mt.createElement(t,{id:"aws.serverGroup.spotInstancePoolCount"}),input:e=>Mt.createElement(d,{...e})}),Mt.createElement(r,{label:"On-Demand Allocation Strategy",name:"onDemandAllocationStrategy",help:Mt.createElement(t,{id:"aws.serverGroup.odAllocationStrategy"}),input:e=>Mt.createElement(l,{...e,disabled:!0})}),Mt.createElement(r,{label:"On-Demand Base Capacity",name:"onDemandBaseCapacity",help:Mt.createElement(t,{id:"aws.serverGroup.odBase"}),input:e=>Mt.createElement(d,{...e})}),Mt.createElement(r,{label:"On-Demand Percentage Above Base Capacity",name:"onDemandPercentageAboveBaseCapacity",help:Mt.createElement(t,{id:"aws.serverGroup.odPercentAboveBase"}),input:e=>Mt.createElement(d,{...e})}),Mt.createElement(r,{label:"Spot Max Price",name:"spotPrice",help:Mt.createElement(t,{id:"aws.serverGroup.spotMaxPrice"}),input:e=>Mt.createElement(O,{value:"Recommended to leave empty and use AWS default i.e. On-Demand price"},Mt.createElement(l,{...e,placeholder:"Recommended to leave empty and use AWS default i.e. On-Demand price"}))}))}function Fo(e){const{instanceTypeDetails:t,setUnlimitedCpuCredits:a}=e,{values:n,setFieldValue:r}=e.formik,{instanceType:l,launchTemplateOverridesForInstanceType:i}=n;Lt(()=>{!i&&l&&e.formik.setFieldValue("launchTemplateOverridesForInstanceType",[{instanceType:n.instanceType,priority:1}])});const s=n.launchTemplateOverridesForInstanceType?n.launchTemplateOverridesForInstanceType:void 0,o=new Map(Object.entries(ya(s,"instanceType"))),[c,d]=Rt(n.viewState.instanceProfile||"custom"),m=yt(c);return t&&t.length>0?Mt.createElement("div",{className:"advanced-mode-selector"},Mt.createElement(fo,{currentProfile:c,handleProfileChange:e=>{d(e),r("viewState",{...n.viewState,instanceProfile:e});const t=m&&e&&m!==e,a="custom"!==e&&s&&s.length;if(t&&a){const t=tr.awsInstanceTypeService.getInstanceTypesInCategory(s.map(e=>e.instanceType),e),a=s.filter(e=>t.includes(e.instanceType));r("launchTemplateOverridesForInstanceType",a),n.launchTemplateOverridesChanged(n)}},instanceProfileList:t}),Mt.createElement(Bo,{formik:e.formik}),Mt.createElement(xo,{currentProfile:c,selectedInstanceTypesMap:o,unlimitedCpuCreditsInCmd:n.unlimitedCpuCredits,profileDetails:t.find(e=>e.type===c),availableInstanceTypesList:n.backingData&&n.backingData.filtered&&n.backingData.filtered.instanceTypesInfo||[],handleInstanceTypesChange:e=>{r("launchTemplateOverridesForInstanceType",e),n.launchTemplateOverridesChanged(n)},setUnlimitedCpuCredits:a,viewState:n.viewState,clearWarnings:e.clearWarnings})):null}function zo(e){var t,a;const{command:n}=e,[r,l]=Mt.useState(n.viewState.instanceProfile),i=null==(t=hn.serverGroups)?void 0:t.enableLaunchTemplates,s=null==(a=hn.serverGroups)?void 0:a.enableCpuCredits;Mt.useEffect(()=>{l(n.viewState.instanceProfile)},[n.viewState.instanceProfile]);const o=t=>{n.instanceType=t,n.instanceTypeChanged(n),e.setFieldValue("instanceType",t)},c={...n,viewState:{...n.viewState,instanceProfile:r}};return Mt.createElement("div",{className:"container-fluid form-horizontal"},Mt.createElement("div",{className:"row"},Mt.createElement(bt,{command:n,onTypeChanged:o,onProfileChanged:t=>{l(t),e.setFieldValue("viewState",{...n.viewState,instanceProfile:t})}}),Mt.createElement(Go,{dirty:n.viewState.dirty,clearWarnings:e.clearWarnings}),Mt.createElement("div",{style:{padding:"0 15px"}},r&&"custom"!==r&&Mt.createElement(Ct,{command:c,onTypeChanged:o}))),i&&s&&Mt.createElement("div",{className:"row"},Mt.createElement(Eo,{unlimitedCpuCredits:n.unlimitedCpuCredits,selectedInstanceTypes:[n.instanceType],currentProfile:r,setUnlimitedCpuCredits:e.setUnlimitedCpuCredits})))}function Mo(e){var a;const{instanceTypeDetails:n}=e,{values:r,setFieldValue:l}=e.formik,i=null==(a=hn.serverGroups)?void 0:a.enableLaunchTemplates,s=r.viewState.useSimpleInstanceTypeSelector,[o,c]=Rt(r.unlimitedCpuCredits);Lt(()=>{r.unlimitedCpuCredits!==o&&l("unlimitedCpuCredits",o)},[o]);const d=()=>{const{formik:t}=e;t.values.viewState.dirty.instanceType=null,t.values.viewState.dirty.launchTemplateOverridesForInstanceType=null,t.validateForm()},m=e=>{if(s!==e)if(l("viewState",{...r.viewState,useSimpleInstanceTypeSelector:e}),e){const e=r.launchTemplateOverridesForInstanceType,t=r.viewState.dirty.launchTemplateOverridesForInstanceType;if(null==e?void 0:e.length){const t=e.reduce((e,t)=>e.priority<t.priority?e:t).instanceType;l("instanceType",t),l("launchTemplateOverridesForInstanceType",[]),r.instanceTypeChanged(r)}if(null==t?void 0:t.length){const e=t.reduce((e,t)=>e.priority<t.priority?e:t).instanceType;l("viewState.dirty.instanceType",e),l("viewState.dirty.launchTemplateOverridesForInstanceType",[])}}else if(!e){const e=r.instanceType,t=r.viewState.dirty.instanceType;if(e){const t=[{instanceType:e,priority:1}];l("instanceType",void 0),l("launchTemplateOverridesForInstanceType",t),r.launchTemplateOverridesChanged(r)}if(t){const e=[{instanceType:t,priority:1}];l("viewState.dirty.instanceType",void 0),l("viewState.dirty.launchTemplateOverridesForInstanceType",e)}}};return i&&!s?Mt.createElement("div",{className:"container-fluid form-horizontal",style:{padding:"0 15px"}},Mt.createElement("div",null,Mt.createElement("p",null,"Switch to",Mt.createElement("a",{className:"clickable",onClick:()=>m(!0)},Mt.createElement("span",null," Simple Mode")),"."),Mt.createElement("i",null,Mt.createElement("b",null,"Note:")," If multiple instance types are already selected in advanced mode, the instance type with highest priority will be preserved in simple mode.")),Mt.createElement(Fo,{formik:e.formik,instanceTypeDetails:n,setUnlimitedCpuCredits:c,clearWarnings:d})):Mt.createElement("div",{className:"container-fluid form-horizontal",style:{padding:"0 15px"}},Mt.createElement("div",null,Mt.createElement("span",null,"To configure mixed server groups and/or multiple instance types,"),!i&&Mt.createElement("span",null,Mt.createElement("a",{href:"https://spinnaker.io/docs/setup/other_config/server-group-launch-settings/aws-ec2/launch-templates-setup/"},Mt.createElement("span",null," enable launch templates")),Mt.createElement("span",null," and")),Mt.createElement("span",null,Mt.createElement("a",{className:i?"clickable":"disabled",onClick:i?()=>m(!1):()=>{}},Mt.createElement("span",null," use Advanced Mode ")),Mt.createElement(t,{id:"aws.serverGroup.advancedMode"}),"."),Mt.createElement("p",null),i&&Mt.createElement("i",null,Mt.createElement("b",null,"Note:")," If an instance type is already selected in simple mode, it will be preserved in advanced mode.")),Mt.createElement(zo,{command:r,setUnlimitedCpuCredits:c,setFieldValue:l,clearWarnings:d}))}Cr(".InstancesDistribution .StandardFieldLayout_Label {\n min-width: 300px;\n}\n");class Ro extends Mt.Component{constructor(){super(...arguments),this.state={instanceTypeDetails:[]},this.props$=new Ca,this.destroy$=new Ca}validate(e){const t={};if(e.viewState.useSimpleInstanceTypeSelector)e.viewState.dirty.instanceType?t.instanceType="You must confirm removed instance type and pick a compatible instance type.":e.instanceType||(t.instanceType="Instance Type required.");else{const a=e.viewState.dirty.launchTemplateOverridesForInstanceType;if(a&&a.length>0)t.instanceType="You must confirm removed instance types and/or pick more instance types.";else{const a=this.validateAdvancedModeFields(e,t);Object.assign(t,{...a})}}return t}validateAdvancedModeFields(e,t){e.launchTemplateOverridesForInstanceType.length||(t.instanceType="At least one instance type required."),e.launchTemplateOverridesForInstanceType.length>40&&(t.instanceType="Maximum of 40 instance types are allowed.");const a=e.launchTemplateOverridesForInstanceType.filter(e=>void 0!==e.weightedCapacity);if(a.length!==e.launchTemplateOverridesForInstanceType.length&&0!==a.length&&(t.instanceType="Weighted capacity must be specified for all instance types selected or none."),ra(a,function(e){const t=Number(e.weightedCapacity);return t<1||t>999})&&(t.instanceType="Weighted capacity must be a number between 1 and 999."),e.onDemandBaseCapacity<0&&(t.onDemandBaseCapacity="On-Demand base capacity must be non-negative."),e.onDemandBaseCapacity>vt(e.capacity.max)&&(t.onDemandBaseCapacity="On-Demand base capacity must be less than or equal to max capacity."),(e.onDemandPercentageAboveBaseCapacity<0||e.onDemandPercentageAboveBaseCapacity>100)&&(t.onDemandPercentageAboveBaseCapacity="On-Demand percentage above base capacity must be a number between 0 and 100."),e.spotPrice){const a=Number(e.spotPrice);Number.isNaN(a)&&(t.spotPrice="Spot Max Price must be a number or empty string, used to unset previous max price."),a<=0&&(t.spotPrice="Spot Max Price must be greater than 0, if specified.")}return e.spotInstancePools&&"lowest-price"!==e.spotAllocationStrategy&&(t.spotInstancePools="Spot Instance Pools is only supported for 'lowest-price' Spot Allocation Strategy."),(e.spotInstancePools<=0||e.spotInstancePools>20)&&(t.spotInstancePools="Spot Instance Pools count must be a number between 1 and 20, when applicable."),t}componentDidMount(){Promise.resolve(tr.awsInstanceTypeService.getCategories()).then(e=>{this.setState({instanceTypeDetails:e})})}componentDidUpdate(){this.props$.next(this.props)}componentWillUnmount(){this.destroy$.next()}render(){var e,t,a;const{values:n}=this.props.formik,r=!(!n.viewState.disableImageSelection&&!n.amiName),l=null!=(a=null==(t=null==(e=n.backingData)?void 0:e.filtered)?void 0:t.instanceTypes)?a:[],i=Array.from(this.state.instanceTypeDetails);return!n.viewState.disableImageSelection&&l.length&&i.forEach(e=>{e.families.forEach(e=>{e.instanceTypes.forEach(e=>{e.unavailable=!l.includes(e.name)})})}),r&&n?Mt.createElement(Mo,{formik:this.props.formik,instanceTypeDetails:i}):Mt.createElement("h5",{className:"text-center"},"Please select an image.")}}class Lo extends Mt.Component{constructor(){super(...arguments),this.handleAvailabilityZonesChanged=e=>{const{values:t,setFieldValue:a}=this.props.formik;t.usePreferredZonesChanged(t),a("availabilityZones",e)},this.rebalanceToggled=()=>{const{values:e,setFieldValue:t}=this.props.formik;e.toggleSuspendedProcess(e,"AZRebalance"),t("suspendedProcesses",e.suspendedProcesses),this.setState({})}}validate(e){const t={};return e.availabilityZones&&0!==e.availabilityZones.length||(t.availabilityZones="You must select at least one availability zone."),t}render(){const{values:e}=this.props.formik;return Mt.createElement("div",{className:"container-fluid form-horizontal"},Mt.createElement(Jr,{credentials:e.credentials,region:e.region,onChange:this.handleAvailabilityZonesChanged,selectedZones:e.availabilityZones,allZones:e.backingData.filtered.availabilityZones,usePreferredZones:e.viewState.usePreferredZones}),Mt.createElement("div",{className:"form-group"},Mt.createElement("div",{className:"col-md-3 sm-label-right"},Mt.createElement("b",null,"AZ Rebalance")),Mt.createElement("div",{className:"col-md-7 checkbox"},Mt.createElement("label",null,Mt.createElement("input",{type:"checkbox",onChange:this.rebalanceToggled,checked:!e.processIsSuspended(e,"AZRebalance")}),"Keep instances evenly distributed across zones"))))}}const Oo=e=>({value:e,label:e});class $o extends Mt.Component{constructor(){super(...arguments),this.state={refreshing:!1,refreshed:!1,showVpcLoadBalancers:!1},this.refreshLoadBalancers=()=>{const{values:e}=this.props.formik;this.setState({refreshing:!0});this.context.services.providerServiceDelegate.getDelegate(e.cloudProvider||e.selectedProvider,"serverGroup.configurationService").refreshLoadBalancers(e).then(()=>{this.setState({refreshing:!1,refreshed:!0})})},this.targetGroupsChanged=e=>{const t=e.map(e=>e.value);this.props.formik.setFieldValue("targetGroups",t)},this.loadBalancersChanged=e=>{const t=e.map(e=>e.value);this.props.formik.setFieldValue("loadBalancers",t)},this.vpcLoadBalancersChanged=e=>{const t=e.map(e=>e.value);this.props.formik.setFieldValue("vpcLoadBalancers",t)}}validate(e){const t={};return e.viewState.dirty.targetGroups&&(t.targetGroups="You must confirm the removed target groups."),e.viewState.dirty.loadBalancers&&(t.loadBalancers="You must confirm the removed load balancers."),t}clearWarnings(e){this.props.formik.values.viewState.dirty[e]=null,this.props.formik.validateForm()}render(){var e;const{hideLoadBalancers:a,hideTargetGroups:n}=this.props,{values:r}=this.props.formik,{dirty:l}=r.viewState,{refreshed:i,refreshing:s,showVpcLoadBalancers:o}=this.state;let c=null;if(!n){const a=(r.backingData.filtered.targetGroups||[]).concat(r.viewState.spelTargetGroups||[]).map(Oo);c=Mt.createElement(Mt.Fragment,null,l.targetGroups&&Mt.createElement("div",{className:"col-md-12"},Mt.createElement("div",{className:"alert alert-warning"},Mt.createElement("p",null,Mt.createElement("i",{className:"fa fa-exclamation-triangle"}),"The following target groups could not be found in the selected account/region/VPC and were removed:"),Mt.createElement("ul",null,l.targetGroups.map(e=>Mt.createElement("li",{key:e},e))),Mt.createElement("p",{className:"text-right"},Mt.createElement("a",{className:"btn btn-sm btn-default dirty-flag-dismiss clickable",onClick:()=>this.clearWarnings("targetGroups")},"Okay")))),Mt.createElement("div",{className:"form-group"},Mt.createElement("div",{className:"col-md-4 sm-label-right"},Mt.createElement("b",null,"Target Groups "),Mt.createElement(t,{id:"aws.loadBalancer.targetGroups"})),Mt.createElement("div",{className:"col-md-7"},0===a.length&&Mt.createElement("div",{className:"form-control-static"},"No ",Mt.createElement("b",null,null!=(e=this.props.targetGroupTypeHelpText)?e:"instance")," target groups found in the selected account/region/VPC"),a.length>0&&Mt.createElement(h,{multi:!0,options:a,value:r.targetGroups,onChange:this.targetGroupsChanged}))))}let d=null;if(!a){const e=(r.backingData.filtered.loadBalancers||[]).concat(r.viewState.spelLoadBalancers||[]).map(Oo),a=(r.backingData.filtered.vpcLoadBalancers||[]).map(Oo),n=r.vpcLoadBalancers&&r.vpcLoadBalancers.length>0;d=Mt.createElement(Mt.Fragment,null,l.loadBalancers&&Mt.createElement("div",{className:"col-md-12"},Mt.createElement("div",{className:"alert alert-warning"},Mt.createElement("p",null,Mt.createElement("i",{className:"fa fa-exclamation-triangle"}),"The following load balancers could not be found in the selected account/region/VPC and were removed:"),Mt.createElement("ul",null,l.loadBalancers.map(e=>Mt.createElement("li",{key:e},e))),Mt.createElement("p",{className:"text-right"},Mt.createElement("a",{className:"btn btn-sm btn-default dirty-flag-dismiss clickable",onClick:()=>this.clearWarnings("loadBalancers")},"Okay")))),Mt.createElement("div",{className:"form-group"},Mt.createElement("div",{className:"col-md-4 sm-label-right"},Mt.createElement("b",null,"Classic Load Balancers "),Mt.createElement(t,{id:"aws.loadBalancer.loadBalancers"})),Mt.createElement("div",{className:"col-md-7"},0===e.length&&Mt.createElement("div",{className:"form-control-static"},"No load balancers found in the selected account/region/VPC"),e.length>0&&Mt.createElement(h,{multi:!0,options:e,value:r.loadBalancers,onChange:this.loadBalancersChanged}))),!r.vpcId&&Mt.createElement("div",{className:"form-group"},!n&&!o&&Mt.createElement("div",null,Mt.createElement("div",{className:"col-md-8 col-md-offset-3"},Mt.createElement("a",{className:"clickable",onClick:()=>this.setState({showVpcLoadBalancers:!0})},"Add VPC Load Balancers"))),n&&Mt.createElement("div",null,Mt.createElement("div",{className:"col-md-4 sm-label-right"},Mt.createElement("b",null,"VPC Load Balancers")),Mt.createElement("div",{className:"col-md-8"},a.length>0&&Mt.createElement(h,{multi:!0,options:a,value:r.vpcLoadBalancers,onChange:this.vpcLoadBalancersChanged})))),!i&&Mt.createElement("div",{className:"form-group small",style:{marginTop:"20px"}},Mt.createElement("div",{className:"col-md-8 col-md-offset-4"},s&&Mt.createElement("p",null,Mt.createElement("span",{className:"fa fa-sync-alt fa-spin"}),Mt.createElement("span",null," refreshing...")),!s&&Mt.createElement("p",null,"If you are looking for a load balancer or target group from a different application, ",Mt.createElement("br",null),Mt.createElement("a",{className:"clickable",onClick:this.refreshLoadBalancers},"click here")," ","to load all load balancers."))))}return Mt.createElement("div",{className:"container-fluid form-horizontal"},c,d)}}$o.contextType=g;class Uo extends Mt.Component{constructor(e){super(e),this.getRefreshTime=()=>{var e;return(null==(e=Pe.get("securityGroups"))?void 0:e.getStats().ageMax)||0},this.refreshSecurityGroups=()=>{this.setState({refreshing:!0}),this.props.refresh?this.props.refresh().then(()=>this.setState({refreshing:!1})):this.context.services.providerServiceDelegate.getDelegate(this.props.command.selectedProvider,"serverGroup.configurationService").refreshSecurityGroups(this.props.command).then(()=>{this.setState({refreshing:!1,refreshTime:this.getRefreshTime()})})},this.onChange=e=>{const t=e.map(e=>e.value);this.props.onChange(t)},this.state={refreshing:!1,refreshTime:this.getRefreshTime()}}render(){const{availableGroups:e,groupsToEdit:a,helpKey:n,hideLabel:r}=this.props,{refreshing:l,refreshTime:i}=this.state,s=e.map(e=>({label:`${e.name} (${e.id})`,value:e.id}));return Mt.createElement(Mt.Fragment,null,Mt.createElement("div",{className:"form-group"},!r&&Mt.createElement("div",{className:"col-md-3 sm-label-right"},Mt.createElement("b",null,R.get("Firewalls")),n&&Mt.createElement(t,{key:n})),Mt.createElement("div",{className:"col-md-8"},Mt.createElement(tn,{ignoreAccents:!0,options:s,onChange:this.onChange,value:a,multi:!0}))),Mt.createElement("div",{className:"form-group small",style:{marginTop:"20px"}},Mt.createElement("div",{className:`col-md-${r?12:9} col-md-offset-${r?0:3}`},Mt.createElement("p",null,l&&Mt.createElement("span",null,Mt.createElement("span",{className:"fa fa-sync-alt fa-spin"})),R.get("Firewalls"),!l&&Mt.createElement("span",null," last refreshed ",B(i)),l&&Mt.createElement("span",null," refreshing...")),Mt.createElement("p",null,"If you're not finding a ",R.get("firewall")," that was recently added,"," ",Mt.createElement("a",{className:"clickable",onClick:this.refreshSecurityGroups},"click here")," ","to refresh the list."))))}}Uo.contextType=g;class Vo extends Mt.Component{render(){const{command:e,onClear:t,removed:a}=this.props,n=(e&&e.viewState.dirty.securityGroups||[]).concat(a||[]);return 0===n.length?null:Mt.createElement("div",{className:"col-md-12"},Mt.createElement("div",{className:"alert alert-warning"},Mt.createElement("p",null,Mt.createElement("i",{className:"fa fa-exclamation-triangle"}),"The following ",R.get("firewalls")," could not be found in the selected account/region/VPC and were removed:"),Mt.createElement("ul",null,n.map(e=>Mt.createElement("li",{key:e},e))),Mt.createElement("p",{className:"text-right"},Mt.createElement("a",{className:"btn btn-sm btn-default dirty-flag-dismiss clickable",onClick:t},"Okay"))))}}Vo.defaultProps={onClear:C};class Ho extends Mt.Component{constructor(){super(...arguments),this.onChange=e=>{this.props.formik.setFieldValue("securityGroups",e)},this.acknowledgeRemovedGroups=()=>{const{viewState:e}=this.props.formik.values;e.dirty.securityGroups=null,this.props.formik.setFieldValue("viewState",e)}}validate(e){const t={};return e.viewState.dirty.securityGroups&&(t.securityGroups="You must acknowledge removed security groups."),t}render(){const{values:e}=this.props.formik;return Mt.createElement("div",{className:"container-fluid form-horizontal"},Mt.createElement(Vo,{command:e,onClear:this.acknowledgeRemovedGroups}),Mt.createElement(Uo,{command:e,availableGroups:e.backingData.filtered.securityGroups,groupsToEdit:e.securityGroups,onChange:this.onChange}))}}class qo extends Mt.Component{constructor(){super(...arguments),this.duplicateKeys=!1,this.validate=e=>{const t={};return e.keyPair||(t.keyPair="Key Name is required"),this.duplicateKeys&&(t.tags="Tags have duplicate keys."),t},this.selectBlockDeviceMappingsSource=e=>{const{values:t}=this.props.formik;t.selectBlockDeviceMappingsSource(t,e),this.setState({})},this.toggleSuspendedProcess=e=>{const{values:t,setFieldValue:a}=this.props.formik;t.toggleSuspendedProcess(t,e),a("suspendedProcesses",t.suspendedProcesses),this.setState({})},this.platformHealthOverrideChanged=e=>{this.props.formik.setFieldValue("interestingHealthProviderNames",e)},this.tagsChanged=(e,t)=>{this.duplicateKeys=t,this.props.formik.setFieldValue("tags",e)}}render(){const{app:e}=this.props,{setFieldValue:a,values:n}=this.props.formik,r=n.getBlockDeviceMappingsSource(n),l=n.backingData.filtered.keyPairs||[],i=hn.serverGroups;return Mt.createElement("div",{className:"container-fluid form-horizontal"},Mt.createElement("div",{className:"form-group"},Mt.createElement("div",{className:"col-md-3 sm-label-right"},Mt.createElement("b",null,"Cooldown")),Mt.createElement("div",{className:"col-md-2"},Mt.createElement(en,{type:"text",required:!0,name:"cooldown",className:"form-control input-sm no-spel"}))," ","seconds"),Mt.createElement("div",{className:"form-group"},Mt.createElement("div",{className:"col-md-3 sm-label-right"},Mt.createElement("b",null,"Enabled Metrics "),Mt.createElement(t,{id:"aws.serverGroup.enabledMetrics"})),Mt.createElement("div",{className:"col-md-7"},Mt.createElement(_a,{multi:!0,value:n.enabledMetrics,options:n.backingData.enabledMetrics.map(e=>({label:e,value:e})),onChange:e=>a("enabledMetrics",e.map(e=>e.value))}))),Mt.createElement("div",{className:"form-group"},Mt.createElement("div",{className:"col-md-3 sm-label-right"},Mt.createElement("b",null,"Health Check Type")),Mt.createElement("div",{className:"col-md-7"},Mt.createElement(_a,{value:n.healthCheckType,clearable:!1,placeholder:"Select...",options:n.backingData.healthCheckTypes.map(e=>({label:e,value:e})),onChange:e=>a("healthCheckType",e.value)}))),Mt.createElement("div",{className:"form-group"},Mt.createElement("div",{className:"col-md-3 sm-label-right"},Mt.createElement("b",null,"Health Check Grace Period")),Mt.createElement("div",{className:"col-md-2"},Mt.createElement(en,{type:"text",required:!0,className:"form-control input-sm no-spel",name:"healthCheckGracePeriod"}))," ","seconds"),Mt.createElement("div",{className:"form-group"},Mt.createElement("div",{className:"col-md-3 sm-label-right"},Mt.createElement("b",null,"Termination Policies")),Mt.createElement("div",{className:"col-md-7"},Mt.createElement(_a,{multi:!0,value:n.terminationPolicies,options:n.backingData.terminationPolicies.map(e=>({label:e,value:e})),onChange:e=>a("terminationPolicies",e.map(e=>e.value))}))),Mt.createElement("div",{className:"form-group"},Mt.createElement("div",{className:"col-md-3 sm-label-right"},Mt.createElement("b",null,"Key Name")),Mt.createElement("div",{className:"col-md-7"},Mt.createElement(_a,{value:n.keyPair,required:!0,clearable:!1,options:l.map(e=>({label:e,value:e})),onChange:e=>a("keyPair",e.value)}))),Mt.createElement("div",{className:"form-group"},Mt.createElement("div",{className:"col-md-3 sm-label-right"},Mt.createElement("b",null,"Ramdisk Id (optional)")),Mt.createElement("div",{className:"col-md-7"},Mt.createElement(en,{type:"text",name:"ramdiskId",className:"form-control input-sm no-spel"}))),Mt.createElement("div",{className:"form-group"},Mt.createElement("div",{className:"col-md-3 sm-label-right"},Mt.createElement("b",null,"IAM Instance Profile (optional)")),Mt.createElement("div",{className:"col-md-7"},Mt.createElement(en,{type:"text",className:"form-control input-sm no-spel",name:"iamRole"}))),Mt.createElement("div",{className:"form-group"},Mt.createElement("div",{className:"col-md-3 sm-label-right"},Mt.createElement("b",null,"UserData (optional) "),Mt.createElement(t,{id:"aws.serverGroup.base64UserData"})),Mt.createElement("div",{className:"col-md-7"},Mt.createElement(en,{type:"text",className:"form-control input-sm no-spel",name:"base64UserData"}))),Mt.createElement("div",{className:"form-group"},Mt.createElement("div",{className:"col-md-3 sm-label-right"},Mt.createElement("b",null,"Instance Monitoring "),Mt.createElement(t,{id:"aws.serverGroup.instanceMonitoring"})),Mt.createElement("div",{className:"col-md-7 checkbox"},Mt.createElement("label",null,Mt.createElement("input",{type:"checkbox",checked:n.instanceMonitoring,onChange:e=>a("instanceMonitoring",e.target.checked)})," ","Enforce Instance Monitoring"," "))),Mt.createElement("div",{className:"form-group"},Mt.createElement("div",{className:"col-md-3 sm-label-right"},Mt.createElement("b",null,"EBS Optimized")),Mt.createElement("div",{className:"col-md-7 checkbox"},Mt.createElement("label",null,Mt.createElement("input",{type:"checkbox",checked:n.ebsOptimized,onChange:e=>a("ebsOptimized",e.target.checked)})," ","Optimize Instances for EBS"))),(null==i?void 0:i.enableIMDSv2)&&Mt.createElement("div",{className:"form-group"},Mt.createElement("div",{className:"col-md-3 sm-label-right"},Mt.createElement("b",null,"IMDSv2 "),Mt.createElement(t,{id:"aws.serverGroup.imdsv2"})),Mt.createElement("div",{className:"col-md-7 checkbox"},Mt.createElement("label",null,Mt.createElement("input",{type:"checkbox",checked:!0===n.requireIMDSv2,onChange:e=>a("requireIMDSv2",e.target.checked)})," ","Require IMDSv2"," "))),!hn.disableSpotPricing&&n.viewState.useSimpleInstanceTypeSelector&&Mt.createElement("div",{className:"form-group"},Mt.createElement("div",{className:"col-md-3 sm-label-right"},Mt.createElement("b",null,"Spot Instances Price (optional)")," ",Mt.createElement(t,{id:"aws.serverGroup.spotMaxPrice"})),Mt.createElement("div",{className:"col-md-2"},Mt.createElement(en,{type:"text",className:"form-control input-sm",name:"spotPrice"}))),Mt.createElement("div",{className:"form-group"},Mt.createElement("div",{className:"col-md-3 sm-label-right"},Mt.createElement("b",null,"AMI Block Device Mappings")),Mt.createElement("div",{className:"col-md-7 radio"},Mt.createElement("div",null,Mt.createElement("label",null,Mt.createElement("input",{type:"radio",onChange:()=>this.selectBlockDeviceMappingsSource("source"),checked:"source"===r,name:"blockDeviceMappingsSource"}),"Copy from current server group ",Mt.createElement(t,{id:"aws.blockDeviceMappings.useSource"}))),Mt.createElement("div",null,Mt.createElement("label",null,Mt.createElement("input",{type:"radio",onChange:()=>this.selectBlockDeviceMappingsSource("ami"),checked:"ami"===r,name:"blockDeviceMappingsSource"}),"Prefer AMI block device mappings ",Mt.createElement(t,{id:"aws.blockDeviceMappings.useAMI"}))),Mt.createElement("div",null,Mt.createElement("label",null,Mt.createElement("input",{type:"radio",onChange:()=>this.selectBlockDeviceMappingsSource("default"),checked:"default"===r,name:"blockDeviceMappingsSource"}),"Defaults for selected instance type ",Mt.createElement(t,{id:"aws.blockDeviceMappings.useDefaults"}))))),Mt.createElement("div",{className:"form-group"},Mt.createElement("div",{className:"col-md-3 sm-label-right"},Mt.createElement("b",null,`Associate ${(null==i?void 0:i.enableIPv6)?"IPv6 (Recommended)":"Public IPv4"} Address`),Mt.createElement(t,{id:"serverGroup.ipv6"})),(null==i?void 0:i.enableIPv6)&&Mt.createElement("div",{className:"col-md-7 checkbox"},Mt.createElement("label",null,Mt.createElement("input",{type:"checkbox",checked:!0===n.associateIPv6Address,onChange:e=>a("associateIPv6Address",e.target.checked),id:"associateIPv6AddressToggle"})," ","Assign an IPv6 address to instances"," ")),!(null==i?void 0:i.enableIPv6)&&Mt.createElement("div",null,Mt.createElement("div",{className:"col-md-2 radio"},Mt.createElement("label",null,Mt.createElement("input",{type:"radio",checked:!0===n.associatePublicIpAddress,onChange:()=>a("associatePublicIpAddress",!0),id:"associatePublicIpAddressTrue"}),"Yes")),Mt.createElement("div",{className:"col-md-2 radio"},Mt.createElement("label",null,Mt.createElement("input",{type:"radio",checked:!1===n.associatePublicIpAddress,onChange:()=>a("associatePublicIpAddress",!1),id:"associatePublicIpAddressFalse"}),"No")),Mt.createElement("div",{className:"col-md-2 radio"},Mt.createElement("label",null,Mt.createElement("input",{type:"radio",checked:null===n.associatePublicIpAddress,onChange:()=>a("associatePublicIpAddress",null),id:"associatePublicIpAddressDefault"}),"Default")))),Mt.createElement("div",{className:"form-group"},Mt.createElement("div",{className:"col-md-3 sm-label-right"},Mt.createElement("b",null,"Scaling Processes")),Mt.createElement("div",{className:"col-md-7 checkbox"},n.backingData.scalingProcesses.map(e=>Mt.createElement("div",{key:e.name},Mt.createElement("label",null,Mt.createElement("input",{type:"checkbox",onChange:()=>this.toggleSuspendedProcess(e.name),checked:!n.suspendedProcesses.includes(e.name)})," ",e.name," ",Mt.createElement(t,{content:e.description})))))),e.attributes.platformHealthOnlyShowOverride&&Mt.createElement("div",{className:"form-group"},Mt.createElement("div",{className:"col-md-3 sm-label-right"},Mt.createElement("b",null,"Task Completion")),Mt.createElement("div",{className:"col-md-7"},Mt.createElement(je,{interestingHealthProviderNames:n.interestingHealthProviderNames,platformHealthType:"Amazon",onChange:this.platformHealthOverrideChanged}))),Mt.createElement("div",{className:"form-group"},Mt.createElement("div",{className:"col-md-3 sm-label-right"},Mt.createElement("b",null,"Tags (optional)"),Mt.createElement(t,{id:"aws.serverGroup.tags"})),Mt.createElement("div",{className:"col-md-7"},Mt.createElement(Xe,{model:n.tags,allowEmpty:!0,onChange:this.tagsChanged}))))}}var Wo=Object.getOwnPropertyDescriptor;let jo=class extends Mt.Component{constructor(){super(...arguments),this.validators=new Map,this.validate=e=>{const t={};return this.validators.forEach(a=>{const n=a(e);Object.assign(t,{...n})}),t},this.handleRef=e=>{e?this.validators.set("common",e.validate):this.validators.delete("common")}}render(){const{formik:e,app:t}=this.props;return Mt.createElement(qo,{formik:e,app:t,ref:this.handleRef})}};jo=((e,t,a,n)=>{for(var r,l=n>1?void 0:n?Wo(t,a):t,i=e.length-1;i>=0;i--)(r=e[i])&&(l=r(l)||l);return l})([ce("aws.serverGroup.advancedSettings")],jo);class Zo extends Mt.Component{constructor(){super(...arguments),this.ref=Mt.createRef()}validate(e){return this.ref&&this.ref.current?this.ref.current.validate(e):{}}render(){const{app:e,formik:t}=this.props;return Mt.createElement(jo,{formik:t,app:e,ref:this.ref})}}class _o extends Mt.Component{constructor(e){super(e),this._isUnmounted=!1,this.templateSelected=()=>{this.setState({requiresTemplateSelection:!1}),this.configureCommand()},this.onTaskComplete=()=>{this.clearRefreshSubscription(),this.refreshUnsubscribe=this.props.application.serverGroups.onNextRefresh(this.onApplicationRefresh),this.props.application.serverGroups.refresh()},this.onApplicationRefresh=()=>{if(this.clearRefreshSubscription(),this._isUnmounted)return;const{command:e}=this.props,{taskMonitor:t}=this.state,a=t.task.execution.stages.find(e=>"cloneServerGroup"===e.type);if(a&&a.context["deploy.server.groups"]){const t=a.context["deploy.server.groups"][e.region];if(t){const a={serverGroup:t,accountId:e.credentials,region:e.region,provider:"aws"};let n="^.^.^.clusters.serverGroup";this.props.stateService.includes("**.clusters.serverGroup")&&(n="^.serverGroup"),this.props.stateService.includes("**.clusters.cluster.serverGroup")&&(n="^.^.serverGroup"),this.props.stateService.includes("**.clusters")&&(n=".serverGroup"),this.props.stateService.go(n,a)}}},this.initializeCommand=()=>{const{command:e}=this.props;e.credentialsChanged(e),e.regionChanged(e),this.configurationService.configureSubnetPurposes(e)},this.configureCommand=()=>{const{application:e,command:t}=this.props;this.configurationService.configureCommand(e,t).then(()=>{this.initializeCommand(),this.setState({loaded:!0,requiresTemplateSelection:!1})})},this.normalizeCommand=({tags:e})=>{e&&Object.keys(e).forEach(t=>{t.length||e[t].length||delete e[t]})},this.clearRefreshSubscription=()=>{var e;null==(e=this.refreshUnsubscribe)||e.call(this),this.refreshUnsubscribe=void 0},this.submit=e=>{this.normalizeCommand(e);"editPipeline"===e.viewState.mode||"createPipeline"===e.viewState.mode?this.props.closeModal&&this.props.closeModal(e):this.state.taskMonitor.submit(()=>this.context.services.serverGroupWriter.cloneServerGroup(e,this.props.application))};const t=ta(e,"command.viewState.requiresTemplateSelection",!1);this.state={firewallsLabel:R.get("Firewalls"),loaded:!1,requiresTemplateSelection:t,taskMonitor:new v({application:e.application,title:"Creating your server group",onDismiss:()=>this.props.dismissModal(),onTaskComplete:this.onTaskComplete})}}static show(e,t){return E.show(Ko,e,{dialogClassName:"wizard-modal modal-lg"},t)}componentDidMount(){this.state.requiresTemplateSelection||this.configureCommand()}get configurationService(){return this.context.services.providerServiceDelegate.getDelegate(this.props.command.selectedProvider,"serverGroup.configurationService")}componentWillUnmount(){this._isUnmounted=!0,this.clearRefreshSubscription()}render(){const{application:e,command:t,dismissModal:a,title:n}=this.props,{loaded:r,taskMonitor:l,requiresTemplateSelection:i}=this.state;return i?Mt.createElement(oo,{app:e,command:t,onDismiss:a,onTemplateSelected:this.templateSelected}):Mt.createElement(y,{heading:n,initialValues:t,loading:!r,taskMonitor:l,dismissModal:a,closeModal:this.submit,submitButtonLabel:t.viewState.submitButtonLabel,render:({formik:a,nextIdx:n,wizard:r})=>Mt.createElement(Mt.Fragment,null,Mt.createElement(b,{label:"Basic Settings",wizard:r,order:n(),render:({innerRef:t})=>Mt.createElement(po,{ref:t,formik:a,app:e})}),Mt.createElement(b,{label:"Load Balancers",wizard:r,order:n(),render:({innerRef:e})=>Mt.createElement($o,{ref:e,formik:a})}),Mt.createElement(b,{label:R.get("Firewalls"),wizard:r,order:n(),render:({innerRef:e})=>Mt.createElement(Ho,{ref:e,formik:a})}),Mt.createElement(b,{label:t.viewState.useSimpleInstanceTypeSelector?"Instance Type":"Instance Types",wizard:r,order:n(),render:({innerRef:e})=>Mt.createElement(Ro,{ref:e,formik:a})}),Mt.createElement(b,{label:"Capacity",wizard:r,order:n(),render:({innerRef:e})=>Mt.createElement(vo,{ref:e,formik:a})}),Mt.createElement(b,{label:"Availability Zones",wizard:r,order:n(),render:({innerRef:e})=>Mt.createElement(Lo,{ref:e,formik:a})}),Mt.createElement(b,{label:"Advanced Settings",wizard:r,order:n(),render:({innerRef:t})=>Mt.createElement(Zo,{ref:t,formik:a,app:e})}))})}}_o.contextType=g,_o.defaultProps={closeModal:C,dismissModal:C};const Ko=Object.assign(N(_o),{show:_o.show});class Yo extends Mt.Component{constructor(){super(...arguments),this.state={verified:!1,requireVerification:!1},this.handleVerification=e=>{this.setState({verified:e})}}componentDidMount(){i.accounts$.pipe(Ra(1),Ia(e=>e.find(e=>e.name===this.props.account))).subscribe(e=>{this.setState({requireVerification:!!e&&e.challengeDestructiveActions})})}render(){const{account:e,onCancel:t,onSubmit:a,isValid:n}=this.props,{verified:r,requireVerification:l}=this.state;return Mt.createElement(Wa,null,Mt.createElement("form",{onSubmit:()=>(this.props.onSubmit(),!1)},l&&Mt.createElement(Nt,{expectedValue:e,onValidChange:this.handleVerification})),Mt.createElement("button",{className:"btn btn-default",onClick:t},"Cancel"),Mt.createElement("button",{type:"submit",className:"btn btn-primary",onClick:a,disabled:!n||l&&!r},"Submit"))}}Yo.defaultProps={isValid:!0};const Xo=class e extends Mt.Component{constructor(e){super(e),this.formikRef=Mt.createRef(),this.validate=e=>{const{min:t,max:a,desired:n}=e,r={};return this.state.advancedMode?(t>a&&t>n?r.min="Min cannot be larger than Max/Desired":a<t&&a<n?r.max="Max cannot be smaller than Min/Desired":(t>a&&(r.min="Min cannot be larger than Max"),this.isDesiredControlledByAutoscaling()||(n<t&&(r.desired="Desired cannot be smaller than Min"),n>a&&(r.desired="Desired cannot be larger than Max"))),r):r},this.toggleAdvancedMode=()=>{const{desired:e}=this.formikRef.current.getFormikContext().values;this.formikRef.current.setFieldValue("min",e),this.formikRef.current.setFieldValue("max",e),this.setState({advancedMode:!this.state.advancedMode})},this.close=e=>{this.props.dismissModal.apply(null,e)},this.platformHealthOverrideChanged=e=>{this.setState({interestingHealthProviderNames:e})},this.isDesiredControlledByAutoscaling=()=>{const{serverGroup:e}=this.props,{suspendedProcesses:t}=e.asg,{advancedMode:a}=this.state;return(e.scalingPolicies||[]).length&&a&&t.every(e=>"AlarmNotification"!==e.processName)},this.submit=e=>{const{min:t,max:a,desired:n,enforceCapacityConstraints:r,reason:l}=e,{interestingHealthProviderNames:i}=this.state,{serverGroup:s,application:o}=this.props,{asg:c}=s,d={capacity:Qt({min:t!==c.minSize?t:void 0,max:a!==c.maxSize?a:void 0,desired:n!==c.desiredCapacity?n:void 0},e=>void 0!==e),reason:l,interestingHealthProviderNames:i};r&&(d.constraints={capacity:{min:c.minSize,max:c.maxSize,desired:c.desiredCapacity}}),this.state.taskMonitor.submit(()=>this.context.services.serverGroupWriter.resizeServerGroup(s,o,d))};const{minSize:t,maxSize:a,desiredCapacity:n}=e.serverGroup.asg,{attributes:r}=e.application;this.state={advancedMode:t!==a,initialValues:{min:t,max:a,desired:n,enforceCapacityConstraints:!1},taskMonitor:new v({application:e.application,title:"Resizing your server group",onDismiss:()=>this.props.dismissModal(),onTaskComplete:()=>this.props.application.serverGroups.refresh()}),platformHealthOnlyShowOverride:r.platformHealthOnlyShowOverride,interestingHealthProviderNames:r.platformHealthOnlyShowOverride&&r.platformHealthOnly?["Amazon"]:null}}static show(t,a){const n={},{serverGroup:r,application:l}=t;return ct(r,l).then(r=>{r&&E.show(e,t,n,a)})}autoIncrementDesiredIfNeeded(){if(!this.isDesiredControlledByAutoscaling())return;const e=this.formikRef.current.getFormikContext(),{asg:t}=this.props.serverGroup,{min:a,max:n,desired:r}=e.values,l=Math.min(n,Math.max(a,t.desiredCapacity));r!==l&&e.setFieldValue("desired",l)}renderSimpleMode(e){const{serverGroup:t}=this.props,{asg:a}=t;return Mt.createElement("div",null,Mt.createElement("p",null,"Sets min, max, and desired instance counts to the same value."),Mt.createElement("p",null,"To allow autoscaling, use the"," ",Mt.createElement("a",{className:"clickable",onClick:()=>this.toggleAdvancedMode()},"Advanced Mode"),"."),Mt.createElement("div",{className:"form-group"},Mt.createElement("div",{className:"col-md-3 sm-label-right"},"Current size"),Mt.createElement("div",{className:"col-md-4"},Mt.createElement("div",{className:"horizontal middle"},Mt.createElement("input",{type:"number",className:"NumberInput form-control",value:a.desiredCapacity,disabled:!0}),Mt.createElement("div",{className:"sp-padding-xs-xaxis"},"instances")))),Mt.createElement("div",{className:"form-group"},Mt.createElement("div",{className:"col-md-3 sm-label-right"},"Resize to"),Mt.createElement("div",{className:"col-md-4"},Mt.createElement("div",{className:"horizontal middle"},Mt.createElement(r,{name:"desired",input:e=>Mt.createElement(d,{...e,min:0}),touched:!0,onChange:t=>{e.setFieldValue("min",t),e.setFieldValue("max",t)}}),Mt.createElement("div",{className:"sp-padding-xs-xaxis"},"instances")))))}renderAdvancedMode(e){const{serverGroup:t}=this.props,{errors:a}=e,{asg:n}=t,l=a.min||a.max||a.desired;return Mt.createElement("div",null,Mt.createElement("p",null,"Sets up autoscaling for this server group."),Mt.createElement("p",null,"To disable autoscaling, use the"," ",Mt.createElement("a",{className:"clickable",onClick:()=>this.toggleAdvancedMode()},"Simple Mode"),"."),Mt.createElement("div",{className:"form-group bold"},Mt.createElement("div",{className:"col-md-2 col-md-offset-3"},"Min"),Mt.createElement("div",{className:"col-md-2"},"Max"),Mt.createElement("div",{className:"col-md-2"},"Desired")),Mt.createElement("div",{className:"form-group"},Mt.createElement("div",{className:"col-md-3 sm-label-right"},"Current"),Mt.createElement("div",{className:"col-md-2"},Mt.createElement("input",{type:"number",className:"NumberInput form-control",value:n.minSize,disabled:!0})),Mt.createElement("div",{className:"col-md-2"},Mt.createElement("input",{type:"number",className:"NumberInput form-control",value:n.maxSize,disabled:!0})),Mt.createElement("div",{className:"col-md-2"},Mt.createElement("input",{type:"number",className:"NumberInput form-control",value:n.desiredCapacity,disabled:!0}))),Mt.createElement("div",{className:"form-group"},Mt.createElement("div",{className:"col-md-3 sm-label-right"},"Resize to"),Mt.createElement("div",{className:"col-md-2"},Mt.createElement(r,{name:"min",input:e=>Mt.createElement(d,{...e,min:0}),onChange:()=>this.autoIncrementDesiredIfNeeded(),layout:({input:e})=>Mt.createElement(Mt.Fragment,null,e),touched:!0})),Mt.createElement("div",{className:"col-md-2"},Mt.createElement(r,{name:"max",input:e=>Mt.createElement(d,{...e,min:0}),onChange:()=>this.autoIncrementDesiredIfNeeded(),layout:({input:e})=>Mt.createElement(Mt.Fragment,null,e),touched:!0})),Mt.createElement("div",{className:"col-md-2"},Mt.createElement(r,{name:"desired",input:e=>Mt.createElement(d,{...e,min:0,disabled:this.isDesiredControlledByAutoscaling()}),layout:({input:e})=>Mt.createElement(Mt.Fragment,null,e),touched:!0}))),!!l&&Mt.createElement("div",{className:"col-md-offset-3 col-md-9"},Mt.createElement(ge,{message:l,type:"error"})))}renderCapacityConstraintSelector(){return Mt.createElement("div",{className:"form-group"},Mt.createElement("div",{className:"col-md-7 col-md-offset-3"},Mt.createElement(r,{name:"enforceCapacityConstraints",input:e=>Mt.createElement(Mt.Fragment,null,Mt.createElement(o,{...e,text:"Enforce Capacity Constraints"}),Mt.createElement(t,{id:"aws.serverGroup.capacityConstraint"}))})))}renderScalingPolicyWarning(e){const{serverGroup:t}=this.props,{min:a,max:n}=e.values,{advancedMode:r}=this.state,l=t.scalingPolicies||[];return l.length&&a===n?Mt.createElement("div",{className:"form-group"},Mt.createElement("div",{className:"col-md-7 col-md-offset-3"},Mt.createElement("div",{className:"well-compact alert alert-warning"},Mt.createElement("b",null,"Warning"),": this server group has",1===l.length&&Mt.createElement("span",null," a scaling policy. "),l.length>1&&Mt.createElement("span",null," scaling policies. "),!r&&Mt.createElement("span",null,"Scaling policies will not take effect in Simple Mode. Switch to"," ",Mt.createElement("a",{className:"clickable",onClick:()=>this.toggleAdvancedMode()},"Advanced Mode"),"."),r&&Mt.createElement("span",null,"Scaling policies will not take effect when ",Mt.createElement("b",null,"Min")," is the same as ",Mt.createElement("b",null,"Max"),".")))):this.isDesiredControlledByAutoscaling()?Mt.createElement("div",{className:"form-group"},Mt.createElement("div",{className:"col-md-8 col-md-offset-1"},Mt.createElement("div",{className:"well-compact alert alert-warning"},Mt.createElement("p",null,Mt.createElement("b",null,"Desired")," capacity is managed by Autoscaling Policies."),Mt.createElement("p",null,"If you need to scale ",Mt.createElement("b",null,"down")," this server group, set ",Mt.createElement("b",null,"Max")," to the new desired size."),Mt.createElement("p",null,"If you need to scale ",Mt.createElement("b",null,"up")," this server group, set ",Mt.createElement("b",null,"Min")," to the new desired size.")))):null}render(){const{serverGroup:e}=this.props,{advancedMode:t,initialValues:a,platformHealthOnlyShowOverride:n}=this.state;return Mt.createElement(Mt.Fragment,null,Mt.createElement(ot,{monitor:this.state.taskMonitor}),Mt.createElement(de,{ref:this.formikRef,initialValues:a,validate:this.validate,onSubmit:this.submit,render:a=>{const{asg:r}=e,l={min:r.minSize,max:r.maxSize,desired:r.desiredCapacity},i=a.values;return Mt.createElement(Mt.Fragment,null,Mt.createElement(me,{dismiss:this.close}),Mt.createElement(Oa.Header,null,Mt.createElement(Oa.Title,null,"Resize ",e.name)),Mt.createElement(Oa.Body,null,Mt.createElement(Qa,{className:"form-horizontal"},t&&this.renderAdvancedMode(a),!t&&this.renderSimpleMode(a),this.renderScalingPolicyWarning(a),this.renderCapacityConstraintSelector(),n&&Mt.createElement("div",{className:"form-group"},Mt.createElement("div",{className:"col-md-8 col-md-offset-3"},Mt.createElement(je,{interestingHealthProviderNames:this.state.interestingHealthProviderNames,platformHealthType:"Amazon",onChange:this.platformHealthOverrideChanged,showHelpDetails:!0}))),Mt.createElement(gt,{reason:a.values.reason,onChange:e=>a.setFieldValue("reason",e)}),Mt.createElement("div",{className:"form-group"},Mt.createElement("div",{className:"col-md-3 sm-label-right"},"Changes"),Mt.createElement("div",{className:"col-md-9 sm-control-field"},Mt.createElement(wt,{current:l,next:i}))))),Mt.createElement(Yo,{onSubmit:()=>this.submit(a.values),onCancel:this.close,isValid:a.isValid,account:e.account}))}}))}};Xo.contextType=g,Xo.defaultProps={closeModal:C,dismissModal:C};let Jo=Xo;function Qo(e){return e<10?100:e<20?90:95}function ec(e){var t,a,n,r,l;const i=null==(n=null==(a=null==(t=e.entityTags)?void 0:t.creationMetadata)?void 0:a.value)?void 0:n.previousServerGroup;if(!i)return;const s=null==(l=null==(r=i.buildInfo)?void 0:r.jenkins)?void 0:l.number;return{...void 0!==s?{buildNumber:s}:{},imageId:i.imageId&&i.imageId!==i.imageName?i.imageId:void 0,imageName:i.imageName,name:i.name}}function tc(e,t,a){const n={};return"EXPLICIT"===t&&(e.restoreServerGroupName?a&&!a.includes(e.restoreServerGroupName)&&(n.restoreServerGroupName="Select an eligible server group to restore"):n.restoreServerGroupName="Select a server group to restore"),(!Number.isFinite(e.targetHealthyRollbackPercentage)||e.targetHealthyRollbackPercentage<0||e.targetHealthyRollbackPercentage>100)&&(n.targetHealthyRollbackPercentage="Healthy threshold must be between 0 and 100"),(!Number.isFinite(e.delayBeforeDisableSeconds)||!Number.isInteger(e.delayBeforeDisableSeconds)||e.delayBeforeDisableSeconds<0)&&(n.delayBeforeDisableSeconds="Delay must be a non-negative whole number"),n}const ac=class e extends Mt.Component{constructor(e){var t,a;super(e),this.close=()=>this.props.dismissModal(),this.submit=e=>{const{allServerGroups:t,application:a,serverGroup:n}=this.props,r=tc(e,this.rollbackType,t.map(({name:e})=>e));if(!this.state.verified||Object.keys(r).length>0)return;const l=function(e,t,a,n){var r;return{interestingHealthProviderNames:n.interestingHealthProviderNames,platformHealthOnlyShowOverride:null==(r=e.attributes)?void 0:r.platformHealthOnlyShowOverride,reason:n.reason,rollbackContext:{delayBeforeDisableSeconds:n.delayBeforeDisableSeconds,restoreServerGroupName:n.restoreServerGroupName,rollbackServerGroupName:t.name,targetHealthyRollbackPercentage:n.targetHealthyRollbackPercentage},rollbackType:a}}(a,n,this.rollbackType,e);this.state.taskMonitor.submit(()=>this.context.services.serverGroupWriter.rollbackServerGroup(n,a,l))};const{application:n,previousServerGroup:r,serverGroup:l}=e,i=Number(l.capacity.desired);this.state={initialValues:{delayBeforeDisableSeconds:0,interestingHealthProviderNames:(null==(t=n.attributes)?void 0:t.platformHealthOnlyShowOverride)&&(null==(a=n.attributes)?void 0:a.platformHealthOnly)?["Amazon"]:void 0,restoreServerGroupName:null==r?void 0:r.name,targetHealthyRollbackPercentage:Qo(i)},taskMonitor:new v({application:n,title:`Rollback ${l.name}`,onDismiss:()=>this.props.dismissModal(),onTaskComplete:()=>n.serverGroups.refresh()}),verified:!1}}static show(t,a){return E.show(e,t,void 0,a)}get rollbackType(){return e=this.props.serverGroup,0===this.props.allServerGroups.length&&ec(e)?"PREVIOUS_IMAGE":"EXPLICIT";var e}label(e){var t,a;const n=null==(a=null==(t=null==e?void 0:e.buildInfo)?void 0:t.jenkins)?void 0:a.number;return n?`${e.name} (build #${n})`:(null==e?void 0:e.name)||""}minHealthy(e){return Math.ceil(Number(this.props.serverGroup.capacity.desired)*e/100)}renderRestoreTarget(e,t){if("PREVIOUS_IMAGE"===this.rollbackType){const e=ec(this.props.serverGroup);return Mt.createElement("div",{style:{marginTop:"5px"}},e.name," ",Mt.createElement("span",{className:"small"},"(no longer deployed)"),Mt.createElement("br",null),Mt.createElement("span",{className:"small"},Mt.createElement("strong",null,"Image"),": ",e.imageName,e.imageId&&Mt.createElement(Mt.Fragment,null," (",e.imageId,")")),void 0!==e.buildNumber&&Mt.createElement(Mt.Fragment,null,Mt.createElement("br",null),Mt.createElement("span",{className:"small"},Mt.createElement("strong",null,"Build")," #",e.buildNumber)))}const a=this.props.allServerGroups.filter(({isDisabled:e})=>!e),n=this.props.allServerGroups.filter(({isDisabled:e})=>e),r=e=>e.map(e=>Mt.createElement("option",{key:e.name,value:e.name},this.label(e)));return Mt.createElement("select",{className:"form-control input-sm",name:"restoreServerGroupName",onChange:e=>t("restoreServerGroupName",e.target.value||void 0),value:e.restoreServerGroupName||""},Mt.createElement("option",{value:""},"Select..."),a.length>0&&Mt.createElement("optgroup",{label:"Enabled Server Groups"},r(a)),n.length>0&&Mt.createElement("optgroup",{label:"Disabled Server Groups"},r(n)))}renderOperations(e){const{serverGroup:t}=this.props,a=ec(t),n=e.restoreServerGroupName||"previous server group";return Mt.createElement("div",{className:"row"},Mt.createElement("div",{className:"col-sm-11 col-sm-offset-1"},Mt.createElement("ol",null,"EXPLICIT"===this.rollbackType?Mt.createElement(Mt.Fragment,null,Mt.createElement("li",null,"Enable ",Mt.createElement("em",null,n)),Mt.createElement("li",null,"Resize ",Mt.createElement("em",null,n)," to [",Mt.createElement("strong",null,"min"),": ",t.capacity.desired,","," ",Mt.createElement("strong",null,"max"),": ",t.capacity.max,", ",Mt.createElement("strong",null,"desired"),":"," ",t.capacity.desired,"]")):Mt.createElement("li",null,"Deploy ",Mt.createElement("em",null,a.imageId||a.imageName)," [",Mt.createElement("strong",null,"min"),":"," ",t.capacity.desired,", ",Mt.createElement("strong",null,"max"),": ",t.capacity.max,","," ",Mt.createElement("strong",null,"desired"),": ",t.capacity.desired,"]"),e.targetHealthyRollbackPercentage<100&&Mt.createElement("li",null,"Wait for at least ",this.minHealthy(e.targetHealthyRollbackPercentage)," instances to report as healthy"),e.delayBeforeDisableSeconds>0&&Mt.createElement("li",null,"Wait ",e.delayBeforeDisableSeconds," seconds"),Mt.createElement("li",null,"Disable ",Mt.createElement("em",null,t.name)),Mt.createElement("li",null,"Restore minimum capacity of ",Mt.createElement("em",null,"EXPLICIT"===this.rollbackType?n:"new server group")," ","[",Mt.createElement("strong",null,"min"),": ",t.capacity.min,"]")),Mt.createElement("p",null,"This rollback will affect server groups in ",t.account," (",t.region,").")))}render(){const{application:e,serverGroup:t}=this.props,a=this.props.allServerGroups.map(({name:e})=>e);return Mt.createElement(Mt.Fragment,null,Mt.createElement(ot,{monitor:this.state.taskMonitor}),Mt.createElement(de,{initialValues:this.state.initialValues,onSubmit:this.submit,validate:e=>tc(e,this.rollbackType,a),render:a=>{var n;return Mt.createElement(Mt.Fragment,null,Mt.createElement(me,{dismiss:this.close}),Mt.createElement(Oa.Header,null,Mt.createElement(Oa.Title,null,"Rollback ",t.name)),Mt.createElement(Oa.Body,null,Mt.createElement("form",{className:"form-horizontal"},Mt.createElement("div",{className:"form-group row"},Mt.createElement("div",{className:"col-sm-3 sm-label-right"},"Restore to"),Mt.createElement("div",{className:"col-md-7"},this.renderRestoreTarget(a.values,a.setFieldValue),a.errors.restoreServerGroupName&&Mt.createElement(ge,{message:a.errors.restoreServerGroupName,type:"error"}))),(null==(n=e.attributes)?void 0:n.platformHealthOnlyShowOverride)&&Mt.createElement("div",{className:"form-group row"},Mt.createElement("div",{className:"col-sm-10 col-sm-offset-1"},Mt.createElement(je,{interestingHealthProviderNames:a.values.interestingHealthProviderNames,onChange:e=>a.setFieldValue("interestingHealthProviderNames",e),platformHealthType:"Amazon",showHelpDetails:!0}))),Mt.createElement(gt,{reason:a.values.reason,onChange:e=>a.setFieldValue("reason",e)}),Mt.createElement("div",{className:"form-group row"},Mt.createElement("div",{className:"col-sm-11 col-sm-offset-1"},"Wait"," ",Mt.createElement("input",{className:"form-control input-sm inline-number",min:0,name:"delayBeforeDisableSeconds",onChange:e=>a.setFieldValue("delayBeforeDisableSeconds",Number(e.target.value)),placeholder:"0",step:1,type:"number",value:a.values.delayBeforeDisableSeconds})," ","seconds before disabling ",Mt.createElement("em",null,this.label(t)),".",a.errors.delayBeforeDisableSeconds&&Mt.createElement(ge,{message:a.errors.delayBeforeDisableSeconds,type:"error"}))),Mt.createElement("div",{className:"form-group row"},Mt.createElement("div",{className:"col-sm-11 col-sm-offset-1"},"Consider rollback successful when"," ",Mt.createElement("input",{className:"form-control input-sm inline-number",max:100,min:0,name:"targetHealthyRollbackPercentage",onChange:e=>a.setFieldValue("targetHealthyRollbackPercentage",Number(e.target.value)),type:"number",value:a.values.targetHealthyRollbackPercentage})," ","percent of instances are healthy.",a.errors.targetHealthyRollbackPercentage&&Mt.createElement(ge,{message:a.errors.targetHealthyRollbackPercentage,type:"error"})))),Mt.createElement("div",{className:"row"},Mt.createElement("div",{className:"col-sm-4 sm-label-right"},"Rollback Operations")),this.renderOperations(a.values)),Mt.createElement(Oa.Footer,null,Mt.createElement(Nt,{account:t.account,onValidChange:e=>this.setState({verified:e})}),Mt.createElement("button",{className:"btn btn-default",onClick:this.close,type:"button"},"Cancel"),Mt.createElement("button",{className:"btn btn-primary",disabled:!this.state.verified||!a.isValid,onClick:()=>this.submit(a.values),type:"button"},"Submit")))}}))}};ac.contextType=g,ac.defaultProps={allServerGroups:[],closeModal:C,dismissModal:C};let nc=ac;function rc(e,t,a){return a.filter(a=>a.name!==t.name&&function(e,t,a){return function(e){var t;return e.app||(null==(t=e.moniker)?void 0:t.app)}(a)===e&&a.cluster===t.cluster&&a.account===t.account&&a.region===t.region}(e,t,a)).sort((e,t)=>t.name.localeCompare(e.name))}var lc=Object.getOwnPropertyDescriptor;let ic=class extends Mt.Component{constructor(){super(...arguments),this.resizeServerGroup=()=>{Jo.show(this.props,this.context.services)}}render(){return Mt.createElement(Ua,{onClick:this.resizeServerGroup},"Resize")}};ic.contextType=g,ic=((e,t,a,n)=>{for(var r,l=n>1?void 0:n?lc(t,a):t,i=e.length-1;i>=0;i--)(r=e[i])&&(l=r(l)||l);return l})([ce("AmazonServerGroupActions.resize")],ic);class sc extends Mt.Component{constructor(){super(...arguments),this.destroyServerGroup=()=>{const{app:e,serverGroup:t}=this.props,a={application:e,title:"Destroying "+t.name,onTaskComplete:()=>{this.props.stateService.includes("**.serverGroup",n)&&this.props.stateService.go("^")}},n={name:t.name,accountId:t.account,region:t.region},r={header:"Really destroy "+t.name+"?",buttonText:"Destroy "+t.name,account:t.account,taskMonitorConfig:a,interestingHealthProviderNames:void 0,submitMethod:a=>this.context.services.serverGroupWriter.destroyServerGroup(t,e,a),askForReason:!0,platformHealthOnlyShowOverride:e.attributes.platformHealthOnlyShowOverride,platformHealthType:"Amazon"};St.addDestroyWarningMessage(e,t,r),e.attributes.platformHealthOnlyShowOverride&&e.attributes.platformHealthOnly&&(r.interestingHealthProviderNames=["Amazon"]),w.confirm(r)},this.disableServerGroup=()=>{const{app:e,serverGroup:t}=this.props,a={application:e,title:"Disabling "+t.name},n={header:"Really disable "+t.name+"?",buttonText:"Disable "+t.name,account:t.account,interestingHealthProviderNames:void 0,taskMonitorConfig:a,platformHealthOnlyShowOverride:e.attributes.platformHealthOnlyShowOverride,platformHealthType:"Amazon",submitMethod:a=>this.context.services.serverGroupWriter.disableServerGroup(t,e.name,a),askForReason:!0};St.addDisableWarningMessage(e,t,n),e.attributes.platformHealthOnlyShowOverride&&e.attributes.platformHealthOnly&&(n.interestingHealthProviderNames=["Amazon"]),w.confirm(n)},this.enableServerGroup=()=>{if(!this.isRollbackEnabled())return void this.showEnableServerGroupModal();const e={header:"Rolling back?",body:"Spinnaker provides an orchestrated rollback feature to carefully restore a different version of this\n server group. Do you want to use the orchestrated rollback?",buttonText:"Yes, take me to the rollback settings modal",cancelButtonText:"No, I just want to enable the server group"};w.confirm(e).then(()=>this.rollbackServerGroup()).catch(e=>{"footer"===(null==e?void 0:e.source)&&this.showEnableServerGroupModal()})},this.rollbackServerGroup=()=>{const{app:e,serverGroup:t}=this.props,a=function(e,t,a){let n,r=t;if(t.isDisabled&&(n=t,r=rc(e,t,a).filter(e=>!e.isDisabled).sort((e,t)=>{var a,n;return((null==(a=t.instanceCounts)?void 0:a.total)||0)-((null==(n=e.instanceCounts)?void 0:n.total)||0)||(t.createdTime||0)-(e.createdTime||0)})[0],!r))return;const l=rc(e,r,a);return 1!==l.length||n||(n=l[0]),{allServerGroups:l,previousServerGroup:n,serverGroup:r}}(e.name,t,e.getDataSource("serverGroups").data);a&&nc.show({application:e,...a},this.context.services)},this.cloneServerGroup=()=>{const{app:e,serverGroup:t}=this.props;this.context.services.serverGroupCommandBuilder.buildServerGroupCommandFromExisting(e,t).then(a=>{const n=`Clone ${t.name}`;Ko.show({title:n,application:e,command:a},this.context.services)})}}isEnableLocked(){if(this.props.serverGroup.isDisabled){if((this.props.serverGroup.runningTasks||[]).filter(e=>ta(e,"execution.stages",[]).some(e=>"resizeServerGroup"===e.type)).length)return!0}return!1}isRollbackEnabled(){const{app:e,serverGroup:t}=this.props;return a=e.name,n=t,r=e.getDataSource("serverGroups").data,!n.isDisabled||rc(a,n,r).some(e=>!e.isDisabled);var a,n,r}hasDisabledInstances(){return this.props.serverGroup.isDisabled||ta(this.props.serverGroup,"instanceCounts.outOfService",0)>0}showEnableServerGroupModal(){const{app:e,serverGroup:t}=this.props,a={application:e,title:"Enabling "+t.name},n={header:"Really enable "+t.name+"?",buttonText:"Enable "+t.name,account:t.account,interestingHealthProviderNames:void 0,taskMonitorConfig:a,platformHealthOnlyShowOverride:e.attributes.platformHealthOnlyShowOverride,platformHealthType:"Amazon",submitMethod:a=>this.context.services.serverGroupWriter.enableServerGroup(t,e,a),askForReason:!0};e.attributes.platformHealthOnlyShowOverride&&e.attributes.platformHealthOnly&&(n.interestingHealthProviderNames=["Amazon"]),w.confirm(n)}render(){const{app:t,serverGroup:a}=this.props,n=e.feature&&e.feature.entityTags,r=kt.buildClusterTargets(a);return Mt.createElement(Mt.Fragment,null,hn.adHocInfraWritesEnabled&&Mt.createElement(La,{className:"dropdown",id:"server-group-actions-dropdown"},Mt.createElement(La.Toggle,{className:"btn btn-sm btn-primary dropdown-toggle"},"Server Group Actions"),Mt.createElement(La.Menu,{className:"dropdown-menu"},this.isRollbackEnabled()&&Mt.createElement(xe,{resource:a,application:t,onClick:this.rollbackServerGroup},"Rollback"),this.isRollbackEnabled()&&Mt.createElement("li",{role:"presentation",className:"divider"}),Mt.createElement(ic,{application:t,serverGroup:a}),!a.isDisabled&&Mt.createElement(xe,{resource:a,application:t,onClick:this.disableServerGroup},"Disable"),this.hasDisabledInstances()&&!this.isEnableLocked()&&Mt.createElement(xe,{resource:a,application:t,onClick:this.enableServerGroup},"Enable"),this.isEnableLocked()&&Mt.createElement("li",{className:"disabled"},Mt.createElement(Va,{value:"Cannot enable this server group until resize operation completes",placement:"left"},Mt.createElement("a",null,Mt.createElement("span",{className:"small glyphicon glyphicon-lock"})," Enable"))),Mt.createElement(xe,{resource:a,application:t,onClick:this.destroyServerGroup},"Destroy"),Mt.createElement("li",null,Mt.createElement("a",{className:"clickable",onClick:this.cloneServerGroup},"Clone")),n&&Mt.createElement(k,{component:a,application:t,entityType:"serverGroup",ownerOptions:r,onUpdate:()=>t.serverGroups.refresh()}))))}}sc.contextType=g;const oc=N(sc);function cc(e,t){const{app:a,serverGroup:n}=e;return new Ta(r=>{(function(e){const{app:t,serverGroup:a}=e;return t.ready().then(()=>{let e=t.serverGroups.data.find(e=>e.name===a.name&&e.account===a.accountId&&e.region===a.region);return e||t.loadBalancers.data.some(t=>t.account===a.accountId&&t.region===a.region&&t.serverGroups.some(t=>t.name===a.name&&(e=t,!0))),e})})(e).then(e=>{Tt.getServerGroup(a.name,n.accountId,n.region,n.name).then(a=>{Object.assign(a,e,{account:n.accountId});const l=tr.awsServerGroupTransformer.normalizeServerGroupDetails(a);if(i.getAccountDetails(l.account).then(e=>{l.accountDetails=e,r.next(l)}),$t(l))t();else{const e=l.asg?l.asg.vpczoneIdentifier:"";if(""!==e){const t=e.split(",")[0];p.listSubnets().then(e=>{const a=e.find(e=>e.id===t);l.subnetType=a.purpose,r.next(l)})}l.disabledDate=ro.getDisabledDate(l),r.next(l)}},t)},t)})}function dc(e){const t=zt.useRef(),a=zt.useRef(),{lines:n,className:r="",style:l={}}=e;return zt.useEffect(()=>t?(a.current=function(e){const t={type:"line",data:{labels:[],datasets:[{data:[]}]},options:{plugins:{tooltip:{mode:"index",itemSort:(e,t)=>{var a,n;const r=e.chart.data.datasets.map(e=>e.label),l=null!=(a=e.dataset.label)?a:r[0],i=null!=(n=t.dataset.label)?n:r[0];return r.indexOf(i)-r.indexOf(l)}}},hover:{mode:"index"},elements:{point:{hitRadius:12,radius:1,hoverRadius:5}},scales:{x:{type:"time",display:!0,scaleLabel:{labelString:"Date"},ticks:{major:{enabled:!0}}},y:{min:0,stacked:!0}}}};return new an(e,t)}(t.current),()=>{var e;return null==(e=a.current)?void 0:e.destroy()}):null,[t.current]),zt.useEffect(()=>{const e=a.current;e&&n&&(e.options.animation=!1,e.data.datasets=n,e.update())},[a.current,n]),zt.createElement("canvas",{ref:t,...l,className:r})}function mc(e){return e.serverGroup&&e.alarm?zt.createElement(uc,{...e}):null}function uc(e){var t,a;const n=null!=(t=e.alarm)?t:{},r=null!=(a=e.serverGroup)?a:{},{account:l,awsAccount:i,region:s,type:o}=r,{metricName:c,namespace:d,statistic:m,period:p}=n,{status:h,result:g}=u(async()=>{var t;const a={namespace:d,statistics:m,period:p};n.dimensions.forEach(e=>a[e.name]=e.value);const r="aws"===o?l:i,u=await It.getMetricStatistics("aws",r,s,c,a);return u.datapoints=u.datapoints||[],null==(t=e.onChartLoaded)||t.call(e,u),u},{datapoints:[],unit:""},[d,m,p,o,l,s,c,n.dimensions]);if("PENDING"===h)return zt.createElement("div",{className:"flex-container-v middle center sp-margin-xl"},zt.createElement(ne,null));if("REJECTED"===h)return zt.createElement(zt.Fragment,null,zt.createElement("div",null,"no data"),zt.createElement("div",null,"something went wrong fetching stats"));if(0===g.datapoints.length)return zt.createElement(zt.Fragment,null,"no data");const v=new Date,f=new Date(Date.now()-864e5),E={label:c,fill:"stack",borderColor:"green",borderWidth:2,data:g.datapoints.map(e=>({x:new Date(e.timestamp),y:ta(e,[n.statistic.toLowerCase()],void 0)}))},y={label:"threshold",borderWidth:1,borderColor:"red",data:[{x:f,y:n.threshold},{x:v,y:n.threshold}]};return zt.createElement(dc,{lines:[E,y]})}an.register(nn,rn,ln,sn,on,cn,dn,mn,un);const pc={ASGAverageCPUUtilization:"CPUUtilization",ASGAverageNetworkIn:"NetworkIn",ASGAverageNetworkOut:"NetworkOut",ALBRequestCountPerTarget:"RequestCountPerTarget"},hc=({config:e,serverGroup:t,updateUnit:a})=>{const[n,r]=zt.useState({alarmName:null,alarmArn:null,metricName:null,namespace:null,statistic:"Average",dimensions:[],period:60,threshold:e.targetValue,comparisonOperator:"GreaterThanThreshold",okactions:[],insufficientDataActions:[],alarmActions:[],evaluationPeriods:null,alarmDescription:null,unit:null});zt.useEffect(()=>{(()=>{const a=null==e?void 0:e.customizedMetricSpecification,l=null==e?void 0:e.predefinedMetricSpecification,i={...n,dimensions:(null==a?void 0:a.dimensions)||[{name:"AutoScalingGroupName",value:t.name}],metricName:(null==a?void 0:a.metricName)||pc[null==l?void 0:l.predefinedMetricType],namespace:(null==a?void 0:a.namespace)||"AWS/EC2",threshold:null==e?void 0:e.targetValue};if(a&&(i.statistic=null==a?void 0:a.statistic),l&&"ALBRequestCountPerTarget"===l.predefinedMetricType&&(i.statistic="Sum",i.namespace="AWS/ApplicationELB",null==l?void 0:l.resourceLabel)){const e=null==l?void 0:l.resourceLabel.split("/"),t=e.slice(0,3).join("/"),a=e.slice(3).join("/");i.dimensions=[{name:"LoadBalancer",value:t},{name:"TargetGroup",value:a}]}r(i)})()},[e]);return zt.createElement(mc,{alarm:n,onChartLoaded:e=>{a&&a(e.unit)},serverGroup:t})},gc=({alarm:e,serverGroup:t,updateAvailableMetrics:a})=>{const n=e.dimensions||[],{result:r}=u(()=>It.listMetrics("aws",t.account,t.region,{namespace:e.namespace}).then(e=>{const t=Zt(e,e=>e.dimensions);return aa(t.filter(e=>e).map(e=>e.name)).sort()}).catch(()=>[]),[],[e.namespace,t.name]),i=(e,t,r)=>{const l=[...n];l[r][e]=t,a(l)};return zt.createElement("div",null,zt.createElement("div",{className:"row"},zt.createElement("div",{className:"col-md-12 small"},zt.createElement("h5",null,"Dimensions"))),n.map((t,n)=>zt.createElement("div",{key:`dimension-${n}`,className:"row dimensions-row horizontal middle"},zt.createElement("div",{className:"col-md-6"},zt.createElement(s,{onChange:e=>i("name",e.target.value,n),value:t.name,stringOptions:r})),zt.createElement(l,{onChange:e=>i("value",e.target.value,n),value:t.value}),!e.disableEditingDimensions&&zt.createElement("div",{className:"col-md-1",onClick:()=>(t=>{const n=e.dimensions.filter((e,a)=>a!==t);a(n)})(n)},zt.createElement("a",null,zt.createElement("i",{className:"glyphicon glyphicon-trash clickable"}))))),!e.disableEditingDimensions&&zt.createElement("div",{className:"row"},zt.createElement("div",null,zt.createElement("button",{type:"button",className:"btn btn-block btn-xs add-new",onClick:()=>{const e=[...n,{}];a(e)}},zt.createElement("span",{className:"glyphicon glyphicon-plus-sign sp-margin-xs-left"}),"Add dimension"))))},vc=["AWS/ApplicationELB","AWS/AutoScaling","AWS/AmazonMQ","AWS/Billing","AWS/CloudFront","AWS/CloudSearch","AWS/Events","AWS/DynamoDB","AWS/ECS","AWS/ElastiCache","AWS/EBS","AWS/EC2","AWS/ELB","AWS/ElasticMapReduce","AWS/ES","AWS/Kinesis","AWS/Lambda","AWS/ML","AWS/OpsWorks","AWS/Redshift","AWS/RDS","AWS/Route53","AWS/SNS","AWS/SQS","AWS/S3","AWS/SWF","AWS/StorageGateway","AWS/WAF","AWS/WorkSpaces"];Cr(".MetricSelector {\n font-size: 12px;\n}\n.MetricSelector .simple-input {\n width: 216px;\n}\n.MetricSelector .advanced-input-namespace {\n width: 138px;\n}\n.MetricSelector .advanced-input-metric {\n width: 300px;\n}\n");const fc=({alarm:e,updateAlarm:a,serverGroup:n})=>{var r,l;const i=((null==(l=null==(r=hn)?void 0:r.metrics)?void 0:l.customNamespaces)||[]).concat(vc),[o,c]=zt.useState(!1),d=((null==e?void 0:e.dimensions)||[]).reduce((e,t)=>(e[t.name]=t.value,e),{}),{result:m}=u(()=>{const t="aws"===n.cloudProvider?n.account:null==n?void 0:n.awsAccount,a=o?{namespace:null==e?void 0:e.namespace}:{AutoScalingGroupName:n.name};return It.listMetrics("aws",t,n.region,a).then(e=>(e||[]).map(e=>{return{label:`(${e.namespace}) ${e.name}`,dimensions:[],dimensionValues:(t=e.dimensions||[],t.sort((e,t)=>{var a;return null==(a=e.name)?void 0:a.localeCompare(t.name)}).map(e=>e.value).join(", ")),value:e,...e};var t}).sort((e,t)=>{var a;return null==(a=e.label)?void 0:a.localeCompare(t.label)})).catch(()=>[])},[],[n,null==e?void 0:e.namespace]),p=(m||[]).filter(t=>t.namespace===(null==e?void 0:e.namespace)),h=p.find(t=>t.name===(null==e?void 0:e.metricName)&&t.namespace===(null==e?void 0:e.namespace))||p.find(e=>e.name.match("CPUUtilization"))||p[0],{name:g,namespace:v}=h||{},f=()=>{const t=!o;if(t)d.namespace=null==e?void 0:e.namespace;else{const t={...e,dimension:[{name:"AutoScalingGroupName",value:n.name}]};a(t)}c(t)},E=t=>{const n={...e,metricName:t.name,namespace:t.namespace,dimensions:t.dimensions};a(n)},y=(t,n)=>{const r={...e,metricName:n,namespace:t};a(r)};return zt.useEffect(()=>{h&&E(h)},[h]),o?zt.createElement("div",{className:"MetricSelector"},zt.createElement("div",{className:"horizontal middle"},zt.createElement(s,{value:v,onChange:t=>y(t.target.value,null==e?void 0:e.metricName),stringOptions:i,inputClassName:"advanced-input-namespace sp-margin-m-right"}),zt.createElement(s,{value:g,onChange:t=>y(null==e?void 0:e.namespace,t.target.value),stringOptions:m.map(e=>e.name),placeholder:"name",searchable:!0,inputClassName:"advanced-input-metric"})),zt.createElement("div",{className:"vertical"},!Boolean(m.length)&&zt.createElement("span",{className:"input-label"},zt.createElement("b",null,"Note:")," no metrics found for selected namespace + dimensions"),zt.createElement("a",{className:"clickable",onClick:f},zt.createElement("span",{className:"sp-margin-s-yaxis sp-margin-xs-right"},"Only show metrics for this auto scaling group"),zt.createElement(t,{id:"aws.scalingPolicy.search.restricted"}))),zt.createElement(gc,{alarm:e,serverGroup:n,updateAvailableMetrics:t=>{const n={...e,dimensions:t};a(n)}})):zt.createElement("div",{className:"MetricSelector horizontal middle"},zt.createElement(s,{value:h,onChange:e=>E(e.target.value),options:m,clearable:!1,inputClassName:"sp-margin-s-right simple-input"}),zt.createElement("a",{className:"clickable",onClick:f},zt.createElement("span",{className:"sp-margin-xs-right"},"Search all metrics"),zt.createElement(t,{id:"aws.scalingPolicy.search.all"})))};Cr(".TargetMetricFields .metric-select-input {\n font-size: 12px;\n width: 180px;\n}\n.TargetMetricFields .target-input {\n width: 120px;\n}\n");const Ec=({allowDualMode:e,cloudwatch:t,command:a,isCustomMetric:n,app:r,serverGroup:l,toggleMetricType:i,updateCommand:o})=>{var c,m,u,p;const[h,g]=zt.useState(null),v=(e,t)=>{const n=Ht(a);ia(n,e,t),o(n)};return zt.createElement("div",{className:"TargetMetricFields sp-margin-l-xaxis"},zt.createElement("p",null,"With target tracking policies, Amazon will automatically adjust the size of your ASG to keep the selected metric as close as possible to the selected value."),t&&zt.createElement("p",null,zt.createElement("b",null,"Note:"),' metrics must be sent to Amazon CloudWatch before they can be used in auto scaling. If you do not see a metric below, click "Configure available metrics" in the server group details to set up forwarding from Atlas to CloudWatch.'),zt.createElement("div",{className:"row sp-margin-s-yaxis"},zt.createElement("div",{className:"col-md-2 sm-label-right"},"Metric"),zt.createElement("div",{className:"col-md-10 content-fields"},!n&&zt.createElement(s,{value:null==(c=a.targetTrackingConfiguration.predefinedMetricSpecification)?void 0:c.predefinedMetricType,stringOptions:["ASGAverageCPUUtilization","ASGAverageNetworkOut","ASGAverageNetworkIn","ALBRequestCountPerTarget"],onChange:e=>v("targetTrackingConfiguration.predefinedMetricSpecification.predefinedMetricType",e.target.value),inputClassName:"metric-select-input"}),n&&zt.createElement(fc,{alarm:a.targetTrackingConfiguration.customizedMetricSpecification,serverGroup:l,updateAlarm:e=>{v("targetTrackingConfiguration.customizedMetricSpecification",e)}}),e&&zt.createElement("a",{className:"clickable",onClick:()=>{const e=Ht(a);n?(ia(e,"targetTrackingConfiguration.predefinedMetricSpecification",{predefinedMetricType:"ASGAverageCPUUtilization"}),ia(e,"targetTrackingConfiguration.customizedMetricSpecification",null)):(ia(e,"targetTrackingConfiguration.predefinedMetricSpecification",null),ia(e,"targetTrackingConfiguration.customizedMetricSpecification",{metricName:"CPUUtilization",namespace:"AWS/EC2",dimensions:[{name:"AutoScalingGroupName",value:l.name}],statistic:"Average"})),o(e),i(n?"predefined":"custom")}},n?"Use a predefined metric":"Select a custom metric"))),!n&&"ALBRequestCountPerTarget"===(null==(m=a.targetTrackingConfiguration.predefinedMetricSpecification)?void 0:m.predefinedMetricType)&&zt.createElement("div",{className:"row sp-margin-s-yaxis"},zt.createElement("div",{className:"col-md-2 sm-label-right"},"Target Group"),zt.createElement("div",{className:"col-md-10 content-fields horizontal"},zt.createElement(s,{value:null==(u=a.targetTrackingConfiguration.predefinedMetricSpecification)?void 0:u.resourceLabel,options:r.loadBalancers.data.filter(e=>e.account===l.account&&e.region===l.region).flatMap(e=>e.targetGroups.filter(e=>l.targetGroups.some(t=>t===e.name)).map(t=>({...t,loadBalancerArn:e.loadBalancerArn}))).map(e=>({label:e.name,value:`${e.loadBalancerArn.substring(e.loadBalancerArn.indexOf("app"))}/${e.targetGroupArn.substring(e.targetGroupArn.indexOf("targetgroup"))}`})),onChange:e=>v("targetTrackingConfiguration.predefinedMetricSpecification.resourceLabel",e.target.value),inputClassName:"metric-select-input"}))),zt.createElement("div",{className:"row sp-margin-s-yaxis"},zt.createElement("div",{className:"col-md-2 sm-label-right"},"Target"),zt.createElement("div",{className:"col-md-10 content-fields horizontal"},n&&zt.createElement("div",{className:"horizontal middle"},zt.createElement(s,{value:null==(p=a.targetTrackingConfiguration.customizedMetricSpecification)?void 0:p.statistic,stringOptions:["Average","Maximum","Minimum","SampleCount","Sum"],onChange:e=>v("targetTrackingConfiguration.customizedMetricSpecification.statistic",e.target.value),inputClassName:"form-control input-sm target-input"}),zt.createElement("span",{className:"sp-margin-xs-xaxis"},"of")),zt.createElement("div",{className:"horizontal middle"},zt.createElement(d,{value:a.targetTrackingConfiguration.targetValue,onChange:e=>v("targetTrackingConfiguration.targetValue",Number.parseInt(e.target.value)),inputClassName:"form-control input-sm sp-margin-xs-right"}),zt.createElement("span",null,h)))),zt.createElement("div",{className:"row"},zt.createElement("div",{className:"col-md-10 col-md-offset-1"},zt.createElement(hc,{config:a.targetTrackingConfiguration,serverGroup:l,unit:h,updateUnit:e=>g(e)}))))};Cr(".TargetTrackingAdditionalSettings {\n font-size: 14px;\n}\n.TargetTrackingAdditionalSettings .row {\n margin-bottom: 10px;\n}\n.TargetTrackingAdditionalSettings .number-input-sm {\n width: 120px;\n}\n");const yc=({command:e,cooldowns:a,policyName:n,updateCommand:r})=>{var l;const i=(t,a)=>{const n={...e};ia(n,t,a),r(n)},s=null==(l=e.targetTrackingConfiguration)?void 0:l.disableScaleIn;return zt.createElement("div",{className:"section-body TargetTrackingAdditionalSettings"},n&&zt.createElement("div",{className:"row"},zt.createElement("div",{className:"col-md-2 sm-label-right"},"Policy Name"),zt.createElement("div",{className:"col-md-10 horizontal middle"},n)),Boolean(e.estimatedInstanceWarmup)&&zt.createElement("div",{className:"row"},zt.createElement("div",{className:"col-md-2 sm-label-right"},"Warmup"),zt.createElement("div",{className:"col-md-10 horizontal middle"},zt.createElement("span",{className:"form-control-static"},"Instances need"),zt.createElement(d,{value:e.estimatedInstanceWarmup,onChange:e=>i("estimatedInstanceWarmup",Number.parseInt(e.target.value)),inputClassName:"form-control number-input-sm sp-margin-xs-xaxis"}),zt.createElement("span",{className:"input-label"}," seconds to warm up "))),zt.createElement("div",{className:"row"},zt.createElement("div",{className:"col-md-2 sm-label-right"},"Scale In"),zt.createElement("div",{className:"col-md-9"},zt.createElement("div",{className:"checkbox"},zt.createElement(o,{text:"Disable Scale-downs",checked:s,onChange:e=>i("targetTrackingConfiguration.disableScaleIn",e.target.checked)}),zt.createElement("div",{className:"small"},zt.createElement("p",null,"This option disables scale-downs for the target tracking policy, while keeping the scale-ups. This means that ASG will not scale down unless you explicitly set up a separate step policy to scale it down."),zt.createElement("p",null,"This is useful when you have special requirements, such as gradual or delayed scale-down."))))),zt.createElement("div",{className:"row"},zt.createElement("div",{className:"col-md-10 col-md-offset-1"},s&&zt.createElement("div",{className:"well"},"This policy will not scale down. Make sure you have another policy (either TT or Step) that will scale down this ASG."),!1===s&&zt.createElement("div",{className:"well"},"This policy will scale both up and down. Make sure you don't have other scaling policies, as they will likely interfere with each other."))),a&&!s&&zt.createElement("div",{className:"row"},zt.createElement("div",{className:"col-md-3 sm-label-right"},zt.createElement("span",{className:"sp-margin-xs-right"},"Scale In Cooldown"),zt.createElement(t,{id:"titus.autoscaling.scaleIn.cooldown"})),zt.createElement("div",{className:"col-md-9 horizontal middle"},zt.createElement(d,{value:e.targetTrackingConfiguration.scaleInCooldown,onChange:e=>i("targetTrackingConfiguration.scaleInCooldown",Number.parseInt(e.target.value)),inputClassName:"sp-margin-xs-xaxis number-input-sm"}),zt.createElement("span",{className:"input-label"}," seconds "))),a&&zt.createElement("div",{className:"row"},zt.createElement("div",{className:"col-md-3 sm-label-right"},zt.createElement("span",{className:"sp-margin-xs-right"},"Scale Out Cooldown"),zt.createElement(t,{id:"titus.autoscaling.scaleOut.cooldown"})),zt.createElement("div",{className:"col-md-9 horizontal middle"},zt.createElement(d,{value:e.targetTrackingConfiguration.scaleOutCooldown,onChange:e=>i("targetTrackingConfiguration.scaleOutCooldown",Number.parseInt(e.target.value)),inputClassName:"sp-margin-xs-xaxis number-input-sm"}),zt.createElement("span",{className:"input-label"}," seconds "))))},bc={buildAlarm:(e,t,a)=>{const n=(null==e?void 0:e.alarms)?e.alarms[0]:{};return{name:n.alarmName,actionsEnabled:!0,alarmActionArns:n.alarmActions,alarmDescription:n.alarmDescription,asgName:a,comparisonOperator:n.comparisonOperator,dimensions:n.dimensions,evaluationPeriods:n.evaluationPeriods,insufficientDataActionArns:n.insufficientDataActions,metricName:n.metricName,namespace:n.namespace,okActionArns:n.okactions,period:n.period,region:t,statistic:n.statistic,threshold:n.threshold,unit:n.unit}},buildStepPolicy:(e,t,a)=>{var n,r;const l=e.stepAdjustments.map(e=>{const a={scalingAdjustment:Math.abs(e.scalingAdjustment)};return void 0!==e.metricIntervalUpperBound&&(a.metricIntervalUpperBound=e.metricIntervalUpperBound+t),void 0!==e.metricIntervalLowerBound&&(a.metricIntervalLowerBound=e.metricIntervalLowerBound+t),a});return{estimatedInstanceWarmup:null!=(r=null!=(n=e.estimatedInstanceWarmup)?n:a)?r:600,metricAggregationType:"Average",stepAdjustments:l}},buildSimplePolicy:e=>{var t,a;return{cooldown:null!=(t=e.cooldown)?t:600,scalingAdjustment:null!=(a=Math.abs(e.scalingAdjustment))?a:1}},buildNewCommand:(e,t,a)=>{var n,r,l;const i={name:a.policyName,adjustmentType:"Step"===e?a.adjustmentType:null,cloudProvider:t.cloudProvider,credentials:t.account,provider:t.type,region:t.region,serverGroupName:t.name};return"Step"===e&&(i.alarm=bc.buildAlarm(a,t.region,t.name),i.minAdjustmentMagnitude=null!=(n=a.minAdjustmentMagnitude)?n:1,(null==(r=a.stepAdjustments)?void 0:r.length)?i.step=bc.buildStepPolicy(a,i.alarm.threshold,i.cooldown):i.simple=bc.buildSimplePolicy(a)),"TargetTracking"===e&&(i.estimatedInstanceWarmup=null!=(l=a.estimatedInstanceWarmup)?l:600,i.targetTrackingConfiguration={...a.targetTrackingConfiguration}),i},prepareCommandForUpsert:(e,t)=>{const a=Ht(e);return"PercentChangeInCapacity"!==a.adjustmentType&&delete a.minAdjustmentMagnitude,a.step?a.step.stepAdjustments.forEach(e=>{t&&(e.scalingAdjustment=0-e.scalingAdjustment,delete a.step.estimatedInstanceWarmup),void 0!==e.metricIntervalLowerBound&&(e.metricIntervalLowerBound-=a.alarm.threshold),void 0!==e.metricIntervalUpperBound&&(e.metricIntervalUpperBound-=a.alarm.threshold)}):t&&(e.simple.scalingAdjustment=0-e.simple.scalingAdjustment),a}},Cc=({app:e,closeModal:t,dismissModal:a,policy:n,serverGroup:r})=>{var l;const[i,s]=zt.useState(Boolean(null==(l=n.targetTrackingConfiguration)?void 0:l.customizedMetricSpecification)),[o,c]=zt.useState({});zt.useEffect(()=>{const e=bc.buildNewCommand("TargetTracking",r,n);c(e)},[]);const d=n.policyName?"Update":"Create";return zt.createElement(Pt,{closeModal:t,dismissModal:a,title:`${d} scaling policy`,application:e,description:`${d} scaling policy for ${r.name}`,initialValues:o,mapValuesToTask:()=>({application:e,job:[{type:"upsertScalingPolicy",...o}]}),render:()=>zt.createElement("div",{className:"modal-body"},zt.createElement("h4",{className:"section-heading"},"Target Metric"),zt.createElement(Ec,{allowDualMode:!0,cloudwatch:!1,command:o,isCustomMetric:i,app:e,serverGroup:r,toggleMetricType:e=>s("custom"===e),updateCommand:c}),zt.createElement("h4",{className:"section-heading"},"Additional Settings"),zt.createElement(yc,{command:o,cooldowns:!1,policyName:n.policyName,updateCommand:c}))})};function Nc(e){const[a,n]=Mt.useState(null),r=e=>{n(e.currentTarget.id)},l="step"===a?"card active":"card",i="targetTracking"===a?"card active":"card",s="aws.scalingPolicy.additionalHelp",o=!!x.getHelpField(s);return Mt.createElement(Oa,{show:!0,onHide:e.showCallback},Mt.createElement(Oa.Header,{closeButton:!0},Mt.createElement("h3",null,"Select a policy type")),Mt.createElement(Oa.Body,null,Mt.createElement("div",{className:"card-choices"},Mt.createElement("div",{className:i,onClick:r,id:"targetTracking"},Mt.createElement("h3",null,"Target Tracking"),Mt.createElement("div",null,"Continuously adjusts the size of the ASG to keep a specified metric at the target value")),Mt.createElement("div",{className:l,onClick:r,id:"step"},Mt.createElement("h3",null,"Step"),Mt.createElement("div",null,"Rule-based scaling, with the ability to define different scaling amounts depending on the magnitude of the alarm breach"))),o&&Mt.createElement(ge,{type:"info",message:Mt.createElement(t,{id:s,expand:!0})}),e.warnOnMinMaxCapacity&&Mt.createElement(ge,{type:"warning",message:Mt.createElement(Mt.Fragment,null,Mt.createElement("p",null,"This server group's ",Mt.createElement("em",null,"min")," and ",Mt.createElement("em",null,"max")," capacity are identical, so scaling policies will have ",Mt.createElement("b",null,"no effect.")),Mt.createElement("p",null,"Scaling policies work by adjusting the server group's ",Mt.createElement("em",null,"desired")," capacity to a value between the min and max."))})),Mt.createElement(Oa.Footer,null,Mt.createElement("button",{className:"btn btn-default",onClick:e.showCallback},"Cancel"),Mt.createElement("button",{className:"btn btn-primary",disabled:!a,onClick:()=>{e.typeSelectedCallback(a)}},"Next")))}Cr(".ScalingPolicyAdditionalSettings .section-additional-settings .row {\n margin-bottom: 10px;\n}\n.ScalingPolicyAdditionalSettings .section-additional-settings .number-input-sm {\n width: 60px;\n}\n");const wc=({command:e,isInstanceType:a,isNew:n,operator:r,updateCommand:l})=>{var i,s,o,c;const m=(t,a)=>{const n={...e};ia(n,t,a),l(n)};return zt.createElement("div",{className:"ScalingPolicyAdditionalSettings"},zt.createElement("h4",{className:"section-heading"},"Additional Settings"),zt.createElement("div",{className:"section-body section-additional-settings"},!n&&zt.createElement("div",{className:"row"},zt.createElement("div",{className:"col-md-2 sm-label-right"},"Policy Name"),zt.createElement("div",{className:"col-md-10 horizontal middle"},zt.createElement("span",{className:"form-control-static select-placeholder"},e.name))),!a&&zt.createElement("div",{className:"row"},zt.createElement("div",{className:"col-md-2 sm-label-right"},"Adjustment Step"),zt.createElement("div",{className:"col-md-10 horizontal middle"},zt.createElement("span",{className:"form-control-static select-placeholder"},`${r} instances in increments of at least `),zt.createElement(d,{value:e.minAdjustmentMagnitude,onChange:e=>m("minAdjustmentMagnitude",Number.parseInt(e.target.value)),inputClassName:"sp-margin-xs-xaxis input-sm number-input-sm"}),zt.createElement("span",{className:"input-label"}," instance(s) "))),Boolean(e.simple)&&zt.createElement("div",{className:"row"},zt.createElement("div",{className:"col-md-2 sm-label-right"},"Cooldown"),zt.createElement("div",{className:"col-md-10 horizontal middle"},zt.createElement("span",{className:"form-control-static select-placeholder"}," Wait at least "),zt.createElement(d,{value:null==(i=e.simple)?void 0:i.cooldown,onChange:e=>m("simple.cooldown",Number.parseInt(e.target.value)),inputClassName:"sp-margin-xs-xaxis input-sm number-input-sm"}),zt.createElement("span",{className:"input-label"}," seconds before another scaling event "))),Boolean(null==(s=e.step)?void 0:s.estimatedInstanceWarmup)&&"Remove"!==r&&zt.createElement("div",{className:"row"},zt.createElement("div",{className:"col-md-2 sm-label-right"},"Warmup"),zt.createElement("div",{className:"col-md-10 horizontal middle"},zt.createElement("span",{className:"form-control-static select-placeholder"},"Instances need"),zt.createElement(d,{value:e.step.estimatedInstanceWarmup,onChange:e=>m("step.estimatedInstanceWarmup",Number.parseInt(e.target.value)),inputClassName:"sp-margin-xs-xaxis input-sm number-input-sm"}),zt.createElement("span",{className:"input-label"}," seconds to warm up after each step "))),Boolean(null==(o=e.step)?void 0:o.cooldown)&&"Remove"!==r&&zt.createElement("div",{className:"row"},zt.createElement("div",{className:"col-md-2 sm-label-right"},zt.createElement("span",{className:"sp-margin-xs-right"},"Cooldown"),zt.createElement(t,{id:`${e.cloudProvider||e.provider}.autoscaling.cooldown`})),zt.createElement("div",{className:"col-md-10 horizontal middle"},zt.createElement(d,{value:null==(c=e.step)?void 0:c.cooldown,onChange:e=>m("step.cooldown",Number.parseInt(e.target.value)),inputClassName:"sp-margin-xs-xaxis input-sm number-input-sm"}),zt.createElement("span",{className:"input-label"}," seconds ")))))};Cr(".AlarmConfigurer {\n font-size: 12px;\n margin: 0px;\n}\n.AlarmConfigurer .configurer-field-lg {\n width: 90px;\n}\n.AlarmConfigurer .configurer-field-small {\n width: 32px;\n}\n.AlarmConfigurer .configurer-field-med {\n width: 60px;\n}\n.AlarmConfigurer .number-input-field {\n margin: 0px;\n}\n");const Sc=["Average","Maximum","Minimum","SampleCount","Sum"],kc=[{label:">=",value:"GreaterThanOrEqualToThreshold"},{label:">",value:"GreaterThanThreshold"},{label:"<=",value:"LessThanOrEqualToThreshold"},{label:"<",value:"LessThanThreshold"}],Tc=[{label:"1 minute",value:60},{label:"5 minutes",value:300},{label:"15 minutes",value:900},{label:"1 hour",value:3600},{label:"4 hours",value:14400},{label:"1 day",value:86400}],Ic=({alarm:e,multipleAlarms:t,serverGroup:a,stepAdjustments:n,stepsChanged:r,updateAlarm:l})=>{var i,o;const c=0===(null==(i=e.comparisonOperator)?void 0:i.indexOf("Greater"))?"max":"min",[m,u]=zt.useState(null==e?void 0:e.unit),p=yt(c);zt.useEffect(()=>{if(n&&void 0!==p){const t="max"===c?"metricIntervalLowerBound":"metricIntervalUpperBound",a={scalingAdjustment:1,[t]:e.threshold};r([a])}},[c]),zt.useEffect(()=>{const t="max"===c?"metricIntervalLowerBound":"metricIntervalUpperBound";if(null==n?void 0:n.length){const a=[...n];a[0][t]=e.threshold,r(a)}},[e.threshold]);const h=(t,a)=>{const n={...e,[t]:a};l(n)};return zt.createElement("div",{className:"AlarmConfigurer"},t&&zt.createElement("div",{className:"row"},zt.createElement("div",{className:"col-md-12"},zt.createElement("div",{className:"alert alert-warning"},zt.createElement("p",null,zt.createElement("i",{className:"fa fa-exclamation-triangle"})," This scaling policy is configured with multiple alarms. You are only editing the first alarm."),zt.createElement("p",null,"To edit or remove the additional alarms, you will need to use the AWS console.")))),(null==(o=e.alarmActionArns)?void 0:o.length)>1&&zt.createElement("div",{className:"row"},zt.createElement("div",{className:"col-md-12"},zt.createElement("div",{className:"alert alert-warning"},zt.createElement("p",null,zt.createElement("i",{className:"fa fa-exclamation-triangle"})," This alarm is used in multiple scaling policies. Any changes here will affect those other scaling policies.")))),zt.createElement("div",{className:"row sp-margin-s-yaxis"},zt.createElement("div",{className:"col-md-2 sm-label-right"},"Whenever"),zt.createElement("div",{className:"col-md-10 horizontal"},zt.createElement(s,{value:e.statistic,onChange:e=>h("statistic",e.target.value),stringOptions:Sc,clearable:!1,inputClassName:"sp-margin-xs-right configurer-field-lg"}),zt.createElement("span",{className:"input-label sp-margin-xs-right sp-margin-s-top"}," of "),zt.createElement(fc,{alarm:e,serverGroup:a,updateAlarm:e=>{l(e)}}))),zt.createElement("div",{className:"row sp-margin-s-yaxis"},zt.createElement("div",{className:"col-md-2 sm-label-right"},"is"),zt.createElement("div",{className:"col-md-10 horizontal middle"},zt.createElement(s,{value:e.comparisonOperator,onChange:e=>h("comparisonOperator",e.target.value),options:kc,clearable:!1,inputClassName:"sp-margin-s-right configurer-field-small"}),zt.createElement("div",{className:"sp-margin-xl-left"},zt.createElement(d,{value:e.threshold,onChange:e=>h("threshold",Number.parseInt(e.target.value)),inputClassName:"sp-margin-xs-right configurer-field-lg"})),zt.createElement("span",{className:"input-label"},m))),zt.createElement("div",{className:"row sp-margin-s-yaxis"},zt.createElement("div",{className:"col-md-2 sm-label-right"},"for at least"),zt.createElement("div",{className:"col-md-10 horizontal middle"},zt.createElement(d,{value:e.evaluationPeriods,onChange:e=>h("evaluationPeriods",Number.parseInt(e.target.value)),inputClassName:"configurer-field-med number-input-field"}),zt.createElement("span",{className:"input-label sp-margin-s-xaxis"}," consecutive period(s) of "),zt.createElement(s,{value:e.period,onChange:e=>h("period",e.target.value),options:Tc,clearable:!1,inputClassName:"sp-margin-xs-right configurer-field-lg"}))),zt.createElement("div",{className:"row sp-margin-s-yaxis"},zt.createElement("div",{className:"col-md-10 col-md-offset-1"},e&&zt.createElement("div",null,zt.createElement(mc,{alarm:e,serverGroup:a,onChartLoaded:e=>u(e.unit)})))))};Cr(".SimplePolicyAction .action-input {\n width: 65px;\n}\n.SimplePolicyAction .adjustment-type-input {\n width: 110px;\n}\n");const Pc=({adjustmentType:e,adjustmentTypeChanged:t,operator:a,scalingAdjustment:n,updateScalingAdjustment:r})=>{const l="Set to"===a?["instances"]:["instances","percent of group"],[i,o]=zt.useState(e),[c,m]=zt.useState(n);return zt.createElement("div",{className:"SimplePolicyAction row"},zt.createElement("div",{className:"col-md-10 col-md-offset-1 horizontal middle"},zt.createElement(s,{value:a,stringOptions:["Add","Remove","Set to"],onChange:a=>{return n=a.target.value,void t(n,e);var n},clearable:!1,inputClassName:"action-input"}),zt.createElement(d,{value:c,min:1,onChange:e=>{return t=Number.parseInt(e.target.value),m(t),void r(t);var t},inputClassName:"action-input"}),zt.createElement(s,{value:i,stringOptions:l,onChange:e=>{return n=e.target.value,o(n),void t(a,n);var n},clearable:!1,inputClassName:"adjustment-type-input"})))};Cr(".StepPolicyAction .step-policy-row {\n padding: 5px 0;\n border-bottom: 1px solid var(--color-seashell);\n}\n.StepPolicyAction .step-policy-row .action-input {\n width: 65px !important;\n}\n.StepPolicyAction .step-policy-row .adjustment-type-input {\n width: 110px;\n}\n.StepPolicyAction .step-policy-row .remove-step-action-icon {\n margin-left: auto;\n}\n");const Ac=({adjustmentType:e,adjustmentTypeChanged:t,alarm:a,isMin:n,operator:r,step:l,stepAdjustments:i,stepsChanged:o})=>{const c=null==a?void 0:a.comparisonOperator.includes("Equal"),m=["Add","Remove","Set to"],u="Set to"===r?["instances"]:["instances","percent of group"],p=(null==l?void 0:l.stepAdjustments)||i,h=(e,t)=>{const a=[...p];a[t]=e,o(a)};return zt.createElement("div",{className:"StepPolicyAction row"},null==p?void 0:p.map((l,i)=>zt.createElement("div",{key:`step-adjustment-${i}`,className:"step-policy-row col-md-10 col-md-offset-1 horizontal middle"},Boolean(i)?zt.createElement("span",{className:"action-input sp-margin-xs-left"},r):zt.createElement(s,{value:r,stringOptions:m,onChange:a=>{return n=a.target.value,void t(n,e);var n},clearable:!1,inputClassName:"action-input sp-margin-xs-right"}),zt.createElement(d,{value:l.scalingAdjustment,min:1,onChange:e=>h({...l,scalingAdjustment:Number.parseInt(e.target.value)},i),inputClassName:"action-input"}),Boolean(i)?zt.createElement("span",{className:"sp-margin-xs-left"},e):zt.createElement(s,{value:e,stringOptions:u,onChange:e=>{return a=e.target.value,void t(r,a);var a},clearable:!1,inputClassName:"adjustment-type-input sp-margin-xs-left"}),zt.createElement("span",{className:"sp-margin-xs-xaxis"}," ","when ",zt.createElement("b",null,null==a?void 0:a.metricName)," is"," "),i===p.length-1&&zt.createElement("span",null,` ${n?"less":"greater"} than${!Boolean(i)||c?" or equal to":""} ${n?l.metricIntervalUpperBound||"":l.metricIntervalLowerBound||""} `),i<p.length-1&&zt.createElement(zt.Fragment,null,zt.createElement("span",{className:"sp-margin-xs-xaxis"},"between"),n?zt.createElement(d,{value:l.metricIntervalLowerBound,max:l.metricIntervalUpperBound,step:.1,onChange:e=>h({...l,metricIntervalLowerBound:Number.parseFloat(e.target.value)},i),inputClassName:"action-input"}):zt.createElement("span",null,l.metricIntervalLowerBound),zt.createElement("span",{className:"sp-margin-xs-xaxis"},"and"),n?zt.createElement("span",null,l.metricIntervalUpperBound):zt.createElement(d,{value:l.metricIntervalUpperBound,min:l.metricIntervalLowerBound,step:.1,onChange:e=>h({...l,metricIntervalUpperBound:Number.parseFloat(e.target.value)},i),inputClassName:"action-input"})),Boolean(i)&&zt.createElement("a",{className:"glyphicon glyphicon-trash clickable sp-margin-xs-xaxis remove-step-action-icon",onClick:()=>(e=>{const t=p.filter((t,a)=>a!==e);o(t)})(i)}))),zt.createElement("div",{className:"row sp-margin-s"},zt.createElement("div",{className:"col-md-10 col-md-offset-1"},zt.createElement("button",{type:"button",className:"btn btn-block btn-sm add-new",onClick:()=>{const e=[...p,{scalingAdjustment:1}];o(e)}},zt.createElement("span",{className:"glyphicon glyphicon-plus-sign"}),"Add step"))),zt.createElement("div",{className:"row sp-margin-s-xaxis"},zt.createElement("div",{className:"col-md-10 col-md-offset-1"},zt.createElement("a",{href:"http://docs.aws.amazon.com/autoscaling/latest/userguide/as-scale-based-on-demand.html#as-scaling-steps",target:"_blank"},zt.createElement("i",{className:"far fa-file-alt sp-margin-xs-right"}),"Documentation"))))},Gc=({app:e,closeModal:t,dismissModal:a,policy:n,serverGroup:r})=>{var l,i,s;const o={closeModal:t,dismissModal:a},[c,d]=zt.useState({});zt.useEffect(()=>{const e=bc.buildNewCommand("Step",r,n);d(e)},[]);const m=(null==(l=n.stepAdjustments)?void 0:l.length)?n.stepAdjustments[0].scalingAdjustment:n.scalingAdjustment,[u,p]=zt.useState("ExactCapacity"===c.adjustmentType?"Set to":m>0?"Add":"Remove"),h="ExactCapacity"===c.adjustmentType||"ChangeInCapacity"===c.adjustmentType?"instances":"percent of group",g=c.step,v=n.policyARN?"Edit":"Create",f=0===(null==(s=null==(i=null==c?void 0:c.alarm)?void 0:i.comparisonOperator)?void 0:s.indexOf("Greater"))?"max":"min",E=e=>{const t="min"===f?"metricIntervalLowerBound":"metricIntervalUpperBound",a="metricIntervalLowerBound"===t?"metricIntervalUpperBound":"metricIntervalLowerBound",n=e.stepAdjustments;(n||[]).forEach((e,r)=>{n.length>r+1&&(n[r+1][a]=e[t])}),delete n[n.length-1][t]},y=e=>{const t=Ht(c);t.simplescalingAdjustment=e,d(t)},b=e=>{const t=Ht(c);t.step.stepAdjustments=e,E(t.step),d(t)},C=(e,t)=>{p(e);const a="instances"!==t?"PercentChangeInCapacity":"Set to"===e?"ExactCapacity":"ChangeInCapacity";d({...c,adjustmentType:a})},N=()=>{const e=Ht(c),t=c.step?c.step.estimatedInstanceWarmup:c.simple.cooldown;if(c.step)delete e.step,e.simple=bc.buildSimplePolicy({cooldown:t});else{const a=[{scalingAdjustment:c.simple.scalingAdjustment}];"min"===f?a[0].metricIntervalUpperBound=0:a[0].metricIntervalLowerBound=0;const n={estimatedInstanceWarmup:t,stepAdjustments:a};delete e.simple,e.step=bc.buildStepPolicy(n,e.alarm.threshold,t),E(e.step)}d(e)};return zt.createElement(Pt,{...o,title:`${v} scaling policy`,application:e,description:`${v} scaling policy for ${r.name}`,initialValues:c,mapValuesToTask:()=>{const t=bc.prepareCommandForUpsert(c,"Remove"===u);return{application:e,job:[{type:t.type||"upsertScalingPolicy",...t}]}},render:()=>{var e,t,a,l,i;return zt.createElement("div",null,zt.createElement("h4",{className:"section-heading"},"Conditions"),zt.createElement("div",{className:"section-body"},zt.createElement(Ic,{alarm:c.alarm,multipleAlarms:Boolean((null==(e=null==n?void 0:n.alarms)?void 0:e.length)>1),serverGroup:r,stepAdjustments:c.step.stepAdjustments,stepsChanged:b,updateAlarm:e=>d({...c,alarm:e})})),zt.createElement("h4",{className:"section-heading"},"Actions"),zt.createElement("div",{className:"section-body"},!(null==(t=c.alarm)?void 0:t.metricName)&&zt.createElement("h4",{className:"text-center"},"Select a metric"),(null==(a=c.alarm)?void 0:a.metricName)&&!g&&zt.createElement("div",null,zt.createElement("div",{className:"row"},zt.createElement("div",{className:"col-md-10 col-md-offset-1"},zt.createElement("p",null,"This is a simple scaling policy. To declare different actions based on the magnitude of the alarm,",zt.createElement("b",null,"switch to a",zt.createElement("a",{className:"clickable sp-margin-xs-l",onClick:N},"step policy"),".")))),zt.createElement(Pc,{adjustmentType:h,adjustmentTypeChanged:C,operator:u,scalingAdjustment:null==(l=c.simple)?void 0:l.scalingAdjustment,updateScalingAdjustment:y})),(null==(i=c.alarm)?void 0:i.metricName)&&g&&zt.createElement(Ac,{adjustmentType:h,adjustmentTypeChanged:C,alarm:c.alarm,isMin:"min"===f,operator:u,step:c.step,stepsChanged:b})),zt.createElement(wc,{command:c,isInstanceType:"instances"===h,isNew:Boolean(!n.policyARN),operator:u,updateCommand:d}))}})};class xc extends Mt.Component{constructor(e){super(e),this.handleClick=()=>{this.setState({showSelection:!0})},this.typeSelected=e=>{this.setState({typeSelection:e,showSelection:!1,showModal:!0}),"step"===e&&this.createStepPolicy(),"targetTracking"===e&&this.createTargetTrackingPolicy()},this.showModalCallback=()=>{this.setState({showSelection:!1,showModal:!1,typeSelection:null})},this.state={showSelection:!1,showModal:!1,typeSelection:null}}createStepPolicy(){const{serverGroup:e,application:t}=this.props,a={app:t,policy:tr.awsServerGroupTransformer.constructNewStepScalingPolicyTemplate(e),serverGroup:e};E.show(Gc,a,{dialogClassName:"wizard-modal modal-lg"})}createTargetTrackingPolicy(){const{serverGroup:e,application:t}=this.props,a={app:t,policy:tr.awsServerGroupTransformer.constructNewTargetTrackingPolicyTemplate(),serverGroup:e};E.show(Cc,a,{dialogClassName:"wizard-modal modal-lg"})}render(){const{min:e,max:t}=this.props.serverGroup.capacity;return Mt.createElement("div",null,Mt.createElement("a",{className:"clickable",onClick:this.handleClick},"Create new scaling policy"),this.state.showSelection&&Mt.createElement(Nc,{warnOnMinMaxCapacity:e===t,typeSelectedCallback:this.typeSelected,showCallback:this.showModalCallback}))}}class Dc{static upsertScalingPolicy(e,t){return t.type=t.type||"upsertScalingPolicy",H.executeTask({application:e,description:"Upsert scaling policy "+(t.name||t.serverGroupName),job:[t]})}static deleteScalingPolicy(e,t,a){return H.executeTask({application:e,description:"Delete scaling policy "+a.policyName,job:[{type:"deleteScalingPolicy",cloudProvider:"aws",credentials:t.account,region:t.region,policyName:a.policyName,serverGroupName:t.name}]})}}const Bc={GreaterThanOrEqualToThreshold:">=",GreaterThanThreshold:">",LessThanOrEqualToThreshold:"<=",LessThanThreshold:"<"},Fc=({alarm:e})=>zt.createElement("div",null,zt.createElement("div",null,zt.createElement("b",null,"Whenever"),` ${e.statistic} of ${e.metricName}`),zt.createElement("div",null,zt.createElement("b",null,"for at least"),` ${e.evaluationPeriods} consecutive periods of ${e.period} seconds`)),zc=({policy:e,serverGroup:t})=>{var a;const{adjustmentType:n,alarms:r,cooldown:l,estimatedInstanceWarmup:i,minAdjustmentMagnitude:s,stepAdjustments:o}=e,c=!!l||"decrease"===(null==(a=null==o?void 0:o[0])?void 0:a.operator),d=r[0]||{},m=null==d?void 0:d.comparisonOperator.includes("Greater"),u=e=>"ExactCapacity"===n?`set capacity to ${e.scalingAdjustment} instance${e.scalingAdjustment>1?"s":""}`:`${e.operator} capacity by ${e.absAdjustment}${"PercentChangeInCapacity"===n?"%":" instance"}${"ChangeInCapacity"===n&&e.absAdjustment>1?"s":""}`;return zt.createElement("div",null,zt.createElement(z,{className:"dl-horizontal dl-narrow"},zt.createElement(D,{label:"Whenever",value:`${d.statistic} of ${d.metricName} is ${Bc[d.comparisonOperator]} ${d.threshold}`}),zt.createElement(D,{label:"for at least",value:`${d.evaluationPeriods} consecutive periods of ${d.period} seconds`}),Boolean(null==o?void 0:o.length)&&zt.createElement(D,{label:"then",value:o.map((e,t)=>zt.createElement("div",{key:`step-adjustment-boundary-${t}`},o.length>1&&zt.createElement("span",null,(e=>{const t=void 0!==e.metricIntervalLowerBound&&void 0!==e.metricIntervalUpperBound?`is between ${d.threshold+e.metricIntervalLowerBound} and ${d.threshold+e.metricIntervalUpperBound} `:"",a=m?e.metricIntervalLowerBound:e.metricIntervalUpperBound,n=`is ${m?"greater":"less"} than ${d.threshold+a}`;return`if ${d.metricName} ${t}${n}`})(e)),zt.createElement("span",null,u(e))))}),!Boolean(null==o?void 0:o.length)&&zt.createElement(D,{label:"then",value:u(e)}),Boolean(s)&&zt.createElement(D,{label:"in",value:`increments of at least ${s} instance${s>1?"s":""}`}),Boolean(c)&&zt.createElement(D,{label:"wait",value:`${l} seconds before allowing another scaling activity.`}),Boolean(i)&&zt.createElement(D,{label:"wait",value:`${i} seconds to warm up after each step.`})),zt.createElement(mc,{alarm:d,serverGroup:t}))};Cr(".StepPolicySummary .HoverablePopover {\n text-decoration: none;\n}\n.StepPolicySummary .actions {\n margin: 0 0 15px 0;\n border-bottom: 1px solid var(--color-alto);\n}\n");const Mc=({application:e,policy:t,serverGroup:a})=>{var n,r;const l=a.type||a.cloudProvider||"aws",i=Ge.getValue(l,"serverGroup"),s="aws"===l?t.policyName:t.id,o=i.UpsertStepPolicyModal,c=()=>{const n={app:e,policy:t,serverGroup:a};E.show(o,n,{dialogClassName:"wizard-modal modal-lg"})},d=()=>{const n={application:e,title:`Deleting scaling policy ${s}`},r={type:"deleteScalingPolicy",cloudProvider:l,credentials:a.account,region:a.region,scalingPolicyID:t.id,serverGroupName:a.name};"aws"===l&&(delete r.scalingPolicyID,r.policyName=t.policyName),w.confirm({header:`Really delete ${s}?`,buttonText:"Delete scaling policy",account:a.account,taskMonitorConfig:n,submitMethod:()=>H.executeTask({application:e,description:`Delete scaling policy ${s}`,job:[r]})})};return zt.createElement("div",{className:"StepPolicySummary"},zt.createElement("div",null,!Boolean(null==(n=t.alarms)?void 0:n.length)&&zt.createElement("div",null,"No alarms configured for this policy - it's safe to delete."),Boolean(null==(r=t.alarms)?void 0:r.length)&&t.alarms.map(e=>zt.createElement("div",{key:`step-summary-${t.policyName}`},zt.createElement(re,{Component:()=>zt.createElement(zc,{policy:t,serverGroup:a}),placement:"left",title:t.policyName},zt.createElement("div",null,zt.createElement("div",{className:"label label-default"},L(t.policyType).toUpperCase()),zt.createElement(Fc,{alarm:e}))),zt.createElement("div",{className:"actions"},zt.createElement("button",{className:"btn btn-xs btn-link",onClick:c},zt.createElement("span",{className:"glyphicon glyphicon-cog"}),zt.createElement("span",{className:"sr-only"},"Edit policy")),zt.createElement("button",{className:"btn btn-xs btn-link",onClick:d},zt.createElement("span",{className:"glyphicon glyphicon-trash"}),zt.createElement("span",{className:"sr-only"},"Delete policy")))))))};Cr(".TargetTrackingSummary .HoverablePopover {\n min-height: 600px;\n text-decoration: none;\n}\n.TargetTrackingSummary .actions {\n margin: 0 0 15px 0;\n border-bottom: 1px solid var(--color-alto);\n}\n");const Rc=({application:e,policy:t,serverGroup:a})=>{var n,r,l;const i=a.type||a.cloudProvider||"aws",s=Ge.getValue(i,"serverGroup"),o="aws"===i?t.policyName:t.id,c=s.UpsertTargetTrackingModal,d=s.TargetTrackingChart,m=t.targetTrackingConfiguration;return zt.createElement("div",{className:"TargetTrackingSummary"},zt.createElement(re,{Component:()=>zt.createElement(d,{config:t.targetTrackingConfiguration,serverGroup:a}),placement:"left",title:o},zt.createElement("div",null,zt.createElement("div",{className:"label label-default"},L(t.policyType).toUpperCase()),zt.createElement("div",null,zt.createElement("b",null,"Target"),zt.createElement("span",{className:"sp-margin-xs-left"},(null==(n=m.predefinedMetricSpecification)?void 0:n.predefinedMetricType)||(null==(r=m.customizedMetricSpecification)?void 0:r.metricName)),Boolean(null==(l=m.customizedMetricSpecification)?void 0:l.statistic)&&zt.createElement("span",null,` @ ${m.targetValue}`)))),zt.createElement("div",{className:"actions"},zt.createElement("button",{className:"btn btn-xs btn-link",onClick:()=>{const n={app:e,policy:t,serverGroup:a};E.show(c,n,{dialogClassName:"wizard-modal modal-lg"})}},zt.createElement("span",{className:"glyphicon glyphicon-cog"}),zt.createElement("span",{className:"sr-only"},"Edit policy")),zt.createElement("button",{className:"btn btn-xs btn-link",onClick:()=>{const n={application:e,title:`Deleting scaling policy ${o}`},r={type:"deleteScalingPolicy",cloudProvider:i,credentials:a.account,region:a.region,scalingPolicyID:t.id,serverGroupName:a.name};"aws"===i&&(delete r.scalingPolicyID,r.policyName=t.policyName),w.confirm({header:`Really delete ${o}?`,buttonText:"Delete scaling policy",account:a.account,taskMonitorConfig:n,submitMethod:()=>H.executeTask({application:e,description:`Delete scaling policy ${o}`,job:[r]})})}},zt.createElement("span",{className:"glyphicon glyphicon-trash"}),zt.createElement("span",{className:"sr-only"},"Delete policy"))))},Lc=({application:e,policy:t,serverGroup:a})=>"TargetTrackingScaling"===(t.policyType?t.policyType:t.targetTrackingConfiguration?"TargetTrackingScaling":"StepScaling")?zt.createElement(Rc,{application:e,policy:t,serverGroup:a}):zt.createElement(Mc,{application:e,policy:t,serverGroup:a});function Oc(e){return"number"!=typeof e||!Number.isFinite(e)||e<0?"Enter a finite non-negative number":void 0}const $c=class e extends Mt.Component{constructor(){super(...arguments),this.renderFields=e=>{const{backingData:a}=e.values;return Mt.createElement(Mt.Fragment,null,Mt.createElement(r,{label:"Cooldown",name:"cooldown",help:"Seconds",input:e=>Mt.createElement(d,{...e,min:0}),required:!0,validate:Oc}),Mt.createElement(r,{label:"Enabled Metrics",name:"enabledMetrics",help:Mt.createElement(t,{id:"aws.serverGroup.enabledMetrics"}),input:e=>Mt.createElement(s,{...e,multi:!0,stringOptions:a.enabledMetrics})}),Mt.createElement(r,{label:"Health Check Type",name:"healthCheckType",input:e=>Mt.createElement(s,{...e,clearable:!1,stringOptions:a.healthCheckTypes})}),Mt.createElement(r,{label:"Health Check Grace Period",name:"healthCheckGracePeriod",help:"Seconds",input:e=>Mt.createElement(d,{...e,min:0}),required:!0,validate:Oc}),Mt.createElement(r,{label:"Termination Policies",name:"terminationPolicies",input:e=>Mt.createElement(s,{...e,multi:!0,stringOptions:a.terminationPolicies})}),Mt.createElement(r,{label:"Capacity Rebalance",name:"capacityRebalance",help:Mt.createElement(t,{id:"aws.serverGroup.capacityRebalance"}),input:e=>Mt.createElement(o,{...e,text:"Enable capacity rebalance"})}))}}static show(t,a){return ct(t.serverGroup,t.application).then(n=>n&&E.show(e,t,{dialogClassName:"modal-lg"},a))}get command(){return this.directCommand||(this.directCommand=this.context.services.providerServiceDelegate.getDelegate("aws","serverGroup.commandBuilder").buildUpdateServerGroupCommand(this.props.serverGroup))}render(){const{application:e,closeModal:t,dismissModal:a,serverGroup:n}=this.props;return Mt.createElement(Pt,{application:e,closeModal:t,description:`Update Advanced Settings for ${n.name}`,dismissModal:a,initialValues:this.command,mapValuesToTask:t=>({application:e,job:[t]}),render:this.renderFields,title:`Edit Advanced Settings for ${n.name}`})}};$c.contextType=g;let Uc=$c;class Vc extends Mt.Component{constructor(){super(...arguments),this.editAdvancedSettings=()=>{const{app:e,serverGroup:t}=this.props;Uc.show({application:e,serverGroup:t},this.context.services)}}render(){const{serverGroup:e}=this.props,a=e.asg;return Mt.createElement(G,{heading:"Advanced Settings"},Mt.createElement("dl",{className:"horizontal-when-filters-collapsed"},Mt.createElement("dt",null,"Cooldown"),Mt.createElement("dd",null,a.defaultCooldown," seconds"),a.enabledMetrics.length>0&&[Mt.createElement("dt",{key:"t-metrics"},"Enabled Metrics"),Mt.createElement("dd",{key:"d-metrics"},a.enabledMetrics.map(e=>e.metric).join(", "))],Mt.createElement("dt",null,"Health Check Type"),Mt.createElement("dd",null,a.healthCheckType),Mt.createElement("dt",null,"Grace Period"),Mt.createElement("dd",null,a.healthCheckGracePeriod," seconds"),Mt.createElement("dt",null,"Termination Policies"),Mt.createElement("dd",null,a.terminationPolicies.join(", ")),a.capacityRebalance&&[Mt.createElement("dt",null,"Capacity Rebalance ",Mt.createElement(t,{id:"aws.serverGroup.capacityRebalance"})),Mt.createElement("dd",null,`${a.capacityRebalance}`)]),hn.adHocInfraWritesEnabled&&Mt.createElement("a",{className:"clickable",onClick:this.editAdvancedSettings},"Edit Advanced Settings"))}}Vc.contextType=g;class Hc extends Mt.Component{constructor(e){super(e),this.state={changeConfig:this.getChangeConfig(e.serverGroup)}}getChangeConfig(e){const t={metadata:ta(e.entityTags,"creationMetadata")};return pa(e,"buildInfo.jenkins")&&(t.buildInfo={ancestor:void 0,jenkins:e.buildInfo.jenkins,target:void 0}),t}componentWillReceiveProps(e){this.setState({changeConfig:this.getChangeConfig(e.serverGroup)})}render(){const{serverGroup:t}=this.props,{changeConfig:a}=this.state,n=e.feature&&e.feature.entityTags,r=t.entityTags||{};return Mt.createElement(G,{heading:"Server Group Information",defaultExpanded:!0},Mt.createElement("dl",{className:"dl-horizontal dl-narrow"},Mt.createElement("dt",null,"Created"),Mt.createElement("dd",null,B(t.createdTime)),n&&Mt.createElement(At,{metadata:r.creationMetadata}),n&&Mt.createElement(Gt,{changeConfig:a,linkText:"view changes",nameItem:t,viewType:"description"}),Mt.createElement("dt",null,"In"),Mt.createElement("dd",null,Mt.createElement(A,{account:t.account}),t.region),Mt.createElement("dt",null,"VPC"),Mt.createElement("dd",null,Mt.createElement(Fn,{vpcId:t.vpcId})),t.vpcId&&t.subnetType&&Mt.createElement("dt",null,"Subnet"),t.vpcId&&t.subnetType&&Mt.createElement("dd",null,t.subnetType),t.asg&&Mt.createElement("dt",null,"Zones"),t.asg&&Mt.createElement("dd",null,Mt.createElement("ul",null,t.asg.availabilityZones.map(e=>Mt.createElement("li",{key:e},e))))))}}var qc=Object.getOwnPropertyDescriptor;let Wc=class extends Mt.Component{render(){const{serverGroup:e,app:t}=this.props,a={min:e.asg.minSize,max:e.asg.maxSize,desired:e.asg.desiredCapacity};return Mt.createElement(G,{heading:"Capacity",defaultExpanded:!0},Mt.createElement(xt,{current:e.instances.length,capacity:a}),Mt.createElement("div",null,hn.adHocInfraWritesEnabled&&Mt.createElement("a",{className:"clickable",onClick:()=>Jo.show({application:t,serverGroup:e},this.context.services)},"Resize Server Group")),Mt.createElement("div",null,Mt.createElement(Dt,{serverGroup:e})))}};Wc.contextType=g,Wc=((e,t,a,n)=>{for(var r,l=n>1?void 0:n?qc(t,a):t,i=e.length-1;i>=0;i--)(r=e[i])&&(l=r(l)||l);return l})([ce("amazon.serverGroup.CapacityDetailsSection")],Wc);class jc extends Mt.Component{render(){const{serverGroup:e}=this.props;return e.instanceCounts.total>0?Mt.createElement(G,{heading:"Health",defaultExpanded:!0},Mt.createElement("dl",{className:"dl-horizontal dl-narrow"},Mt.createElement("dt",null,"Instances"),Mt.createElement("dd",null,Mt.createElement(J,{container:e.instanceCounts,className:"pull-left"})))):null}}const Zc=({serverGroup:e})=>{if(!e.mixedInstancesPolicy)return null;const t=e.mixedInstancesPolicy.instancesDistribution;return Mt.createElement(G,{heading:"Instances Distribution"},Mt.createElement(z,{className:"horizontal-when-filters-collapsed"},Mt.createElement(D,{label:"On-Demand Allocation Strategy",helpFieldId:"aws.serverGroup.odAllocationStrategy",value:t.onDemandAllocationStrategy}),Mt.createElement(D,{label:"On-Demand Base Capacity",helpFieldId:"aws.serverGroup.odBase",value:t.onDemandBaseCapacity}),Mt.createElement(D,{label:"On-Demand Percentage Above Base Capacity",helpFieldId:"aws.serverGroup.odPercentAboveBase",value:t.onDemandPercentageAboveBaseCapacity}),Mt.createElement(D,{label:"Spot Allocation Strategy",helpFieldId:"aws.serverGroup.spotAllocationStrategy",value:t.spotAllocationStrategy}),t.spotInstancePools&&Mt.createElement(D,{label:"Spot Instance Pools",helpFieldId:"aws.serverGroup.spotInstancePoolCount",value:t.spotInstancePools}),Mt.createElement(D,{label:"Max Spot Price",helpFieldId:"aws.serverGroup.spotMaxPrice",value:t.spotMaxPrice||"on-demand price, default"})))},_c=e=>{let t;return(e||"").split(", ").forEach(e=>{const a=e.split("=");2===a.length&&"ancestor_name"===a[0]&&(t=a[1])}),t};class Kc extends Mt.Component{constructor(e){super(e),this.state={image:this.getImage(e.serverGroup)}}getImage(e){const t=e.image?e.image:void 0;return e.image&&e.image.description&&(t.baseImage=_c(e.image.description)),t}componentWillReceiveProps(e){this.setState({image:this.getImage(e.serverGroup)})}render(){const{name:e,launchConfig:t}=this.props.serverGroup,{image:a}=this.state;return t?Mt.createElement(G,{heading:"Launch Configuration"},Mt.createElement("dl",{className:"horizontal-when-filters-collapsed"},Mt.createElement("dt",null,"Name"),Mt.createElement("dd",null,t.launchConfigurationName),Mt.createElement("dt",null,"Image ID"),Mt.createElement("dd",null,t.imageId),a&&a.imageLocation&&Mt.createElement("dt",null,"Image Name"),a&&a.imageLocation&&Mt.createElement("dd",null,a.imageLocation),a&&a.baseImage&&Mt.createElement("dt",null,"Base Image Name"),a&&a.baseImage&&Mt.createElement("dd",null,a.baseImage),Mt.createElement("dt",null,"Instance Type"),Mt.createElement("dd",null,t.instanceType),Mt.createElement("dt",null,"IAM Profile"),Mt.createElement("dd",null,t.iamInstanceProfile),t.instanceMonitoring&&Mt.createElement(Mt.Fragment,null,Mt.createElement("dt",null,"Instance Monitoring"),Mt.createElement("dd",null,t.instanceMonitoring.enabled?"enabled":"disabled")),t.spotPrice&&Mt.createElement("dt",null,"Spot Price"),t.spotPrice&&Mt.createElement("dd",null,t.spotPrice),t.keyName&&Mt.createElement("dt",null,"Key Name"),t.keyName&&Mt.createElement("dd",null,t.keyName),t.kernelId&&Mt.createElement("dt",null,"Kernel ID"),t.kernelId&&Mt.createElement("dd",null,t.kernelId),t.ramdiskId&&Mt.createElement("dt",null,"Ramdisk ID"),t.ramdiskId&&Mt.createElement("dd",null,t.ramdiskId),Mt.createElement("dt",null,"User Data"),t.userData&&Mt.createElement("dd",null,Mt.createElement(Bt,{serverGroupName:e,userData:t.userData})),!t.userData&&Mt.createElement("dd",null,"[none]"))):null}}function Yc(e){return e.instanceTypeOverrides?Mt.createElement(G,{heading:"Instance Types",defaultExpanded:!0,outerDivClassName:"multiple-instance-types-subsection",toggleClassName:"clickable subsection-heading",headingClassName:"collapsible-subheading"},Mt.createElement("table",{className:"table table-condensed packed",id:"MultipleInstanceTypes"},Mt.createElement("thead",null,Mt.createElement("tr",null,Mt.createElement("th",{id:"instanceType"},"Type ",Mt.createElement(t,{id:"aws.serverGroup.multipleInstanceTypes"})),Mt.createElement("th",{id:"weight"},"Weighted Capacity ",Mt.createElement(t,{id:"aws.serverGroup.instanceTypeWeight"})))),Mt.createElement("tbody",null,e.instanceTypeOverrides.map(e=>[Mt.createElement("tr",{key:e.instanceType},Mt.createElement("td",{headers:"instanceType"},e.instanceType),Mt.createElement("td",{headers:"weight"},e.weightedCapacity))])))):null}Cr('.multiple-instance-types-subsection {\n padding: 0;\n}\n.multiple-instance-types-subsection a.subsection-heading {\n color: var(--color-black);\n}\n.multiple-instance-types-subsection h4.collapsible-subheading {\n padding: 10px 0px;\n background-color: var(--color-alabaster);\n margin: 0;\n font-size: 103%;\n font-weight: 600;\n text-transform: none;\n}\n.multiple-instance-types-subsection h4.collapsible-subheading .glyphicon {\n font-size: 10px;\n opacity: 0.5;\n margin-right: 4px;\n}\n.multiple-instance-types-subsection .content-body {\n animation: 0.15 ease-in 0 fadeIn;\n animation-iteration-count: 1;\n padding-left: 17px;\n margin: 10px 0 20px 0;\n}\n.multiple-instance-types-subsection .content-body:before,\n.multiple-instance-types-subsection .content-body:after {\n display: table;\n content: " ";\n}\n.multiple-instance-types-subsection .content-body:after {\n clear: both;\n}\n.multiple-instance-types-subsection .content-body ul {\n list-style-type: none;\n padding-left: 0;\n}\n.multiple-instance-types-subsection:last-child {\n border-bottom-width: 0;\n}\n.multiple-instance-types-subsection:first-child {\n padding-top: 0;\n}\n');const Xc=({serverGroup:e})=>{var t,a,n;const{image:r}=e,l=_c(null==r?void 0:r.description);if(!e.launchTemplate&&!e.mixedInstancesPolicy)return null;const i=!!e.mixedInstancesPolicy,s=i?e.mixedInstancesPolicy.launchTemplates[0]:e.launchTemplate,{launchTemplateData:o}=s,c=i?e.mixedInstancesPolicy.instancesDistribution.spotMaxPrice:null==(a=null==(t=null==o?void 0:o.instanceMarketOptions)?void 0:t.spotOptions)?void 0:a.maxPrice,d=null==(n=null==o?void 0:o.creditSpecification)?void 0:n.cpuCredits,m=i?e.mixedInstancesPolicy.launchTemplateOverridesForInstanceType:null;return Mt.createElement(G,{heading:"Launch Template"},Mt.createElement(z,{className:"horizontal-when-filters-collapsed"},Mt.createElement(D,{label:"Name",value:s.launchTemplateName}),Mt.createElement(D,{label:"Image ID",value:o.imageId}),(null==r?void 0:r.imageLocation)&&Mt.createElement(D,{label:"Image Name",value:null==r?void 0:r.imageLocation}),l&&Mt.createElement(D,{label:"Base Image Name",value:l}),m&&m.length>0?Mt.createElement(Yc,{instanceTypeOverrides:m}):Mt.createElement(D,{label:"Instance Type",value:o.instanceType}),d&&Mt.createElement(D,{label:"CPU Credit Specification",value:d}),Mt.createElement(D,{label:"IAM Profile",value:o.iamInstanceProfile.name}),o.monitoring&&Mt.createElement(D,{label:"Instance Monitoring",value:o.monitoring.enabled?"enabled":"disabled"}),c&&Mt.createElement(D,{label:"Max Spot Price",value:c}),o.keyName&&Mt.createElement(D,{label:"Key Name",value:o.keyName}),o.kernelId&&Mt.createElement(D,{label:"Kernel ID",value:o.kernelId}),o.ramDiskId&&Mt.createElement(D,{label:"Ramdisk ID",value:o.ramDiskId}),o.userData&&Mt.createElement(D,{label:"User Data",value:Mt.createElement(Bt,{serverGroupName:e.name,userData:o.userData})})))};class Jc extends Mt.Component{render(){return Mt.createElement(G,{heading:"Logs"},Mt.createElement("ul",null,Mt.createElement("li",null,Mt.createElement(Dt,{serverGroup:this.props.serverGroup}))))}}class Qc extends Mt.Component{constructor(e){super(e),this.state=this.getState(e)}getState(e){const{serverGroup:t}=e,a=t.buildInfo||{};let n=null;a.commit&&(n=t.buildInfo.commit.substring(0,8));let r=null;if(a.buildInfoUrl)r=t.buildInfo.buildInfoUrl;else if(a.jenkins){const e=t.buildInfo.jenkins;r=`${e.host}job/${e.name}/${e.number}`}return{commitHash:n,jenkinsLink:r}}componentWillReceiveProps(e){this.setState(this.getState(e))}render(){const{serverGroup:e}=this.props,{commitHash:t,jenkinsLink:a}=this.state;return e.buildInfo&&e.buildInfo.jenkins?Mt.createElement(G,{heading:"Package"},Mt.createElement("dl",{className:"horizontal-when-filters-collapsed"},Mt.createElement("dt",null,"Job"),Mt.createElement("dd",null,e.buildInfo.jenkins.name),Mt.createElement("dt",null,"Package"),Mt.createElement("dd",null,e.buildInfo.package_name),Mt.createElement("dt",null,"Build"),Mt.createElement("dd",null,e.buildInfo.jenkins.number),Mt.createElement("dt",null,"Commit"),Mt.createElement("dd",null,t),Mt.createElement("dt",null,"Version"),Mt.createElement("dd",null,e.buildInfo.version),Mt.createElement("dt",null,"Build Link"),Mt.createElement("dd",null,Mt.createElement("a",{target:"_blank",href:a},a)))):null}}var ed=Object.getOwnPropertyDescriptor;let td=class extends Mt.Component{constructor(e){super(e)}static arePoliciesDisabled(e){const t=ro.normalizeScalingProcesses(e);return e.scalingPolicies.length>0&&t.filter(e=>!e.enabled).some(e=>["Launch","Terminate","AlarmNotification"].includes(e.name))}render(){const{app:e,serverGroup:t}=this.props,a=td.arePoliciesDisabled(t);return Mt.createElement(G,{cacheKey:"Scaling Policies",heading:({chevron:e})=>Mt.createElement("h4",{className:"collapsible-heading"},e,Mt.createElement("span",null,a&&Mt.createElement(O,{value:"Some scaling processes are disabled that may prevent scaling policies from working"},Mt.createElement("span",{className:"fa fa-exclamation-circle warning-text"})),"Scaling Policies"))},a&&Mt.createElement("div",{className:"band band-warning"},"Some scaling processes are disabled that may prevent scaling policies from working."),t.scalingPolicies.map(a=>Mt.createElement(Lc,{key:a.policyARN,policy:a,serverGroup:t,application:e})),hn.adHocInfraWritesEnabled?Mt.createElement(xc,{serverGroup:t,application:e}):Mt.createElement("p",null,"Can not create scaling policy, because ad-hoc operations are disabled for AWS providers."))}};td=((e,t,a,n)=>{for(var r,l=n>1?void 0:n?ed(t,a):t,i=e.length-1;i>=0;i--)(r=e[i])&&(l=r(l)||l);return l})([ce("aws.serverGroup.ScalingPoliciesDetailsSection")],td);class ad extends Mt.Component{constructor(){super(...arguments),this.initialProcesses=ro.normalizeScalingProcesses(this.props.serverGroup),this.state={processes:this.initialProcesses.map(e=>({...e})),taskMonitor:new v({application:this.props.application,title:`Update Auto Scaling Processes for ${this.props.serverGroup.name}`,onDismiss:this.props.dismissModal,onTaskComplete:()=>this.props.application.serverGroups.refresh()})},this.setProcessEnabled=(e,t)=>{const a=this.state.processes.map((a,n)=>n===e?{...a,enabled:t}:a);this.setState({processes:a})},this.getJobs=()=>function(e,t,a,n){const r=t.filter(t=>{var a;return(null==(a=e.find(e=>e.name===t.name))?void 0:a.enabled)!==t.enabled}),l=r.filter(e=>e.enabled).map(e=>e.name),i=r.filter(e=>!e.enabled).map(e=>e.name),s=(e,t)=>({type:"modifyScalingProcess",action:e,processes:t,asgName:a.name,regions:[a.region],credentials:a.account,cloudProvider:"aws",reason:n});return[l.length&&s("resume",l),i.length&&s("suspend",i)].filter(Boolean)}(this.initialProcesses,this.state.processes,this.props.serverGroup,this.state.reason),this.submit=()=>{const{application:e,serverGroup:t}=this.props,a=this.getJobs();this.state.taskMonitor.submit(()=>H.executeTask({application:e,description:`Update Auto Scaling Processes for ${t.name}`,job:a}))}}static show(e){return ct(e.serverGroup,e.application).then(t=>t&&E.show(ad,e))}render(){const{dismissModal:e,serverGroup:a}=this.props;return Mt.createElement(Mt.Fragment,null,Mt.createElement(ot,{monitor:this.state.taskMonitor}),Mt.createElement(me,{dismiss:e}),Mt.createElement(Oa.Header,null,Mt.createElement(Oa.Title,null,"Modify Scaling Processes for ",a.name)),Mt.createElement(Oa.Body,{className:"container-fluid form-horizontal"},Mt.createElement("div",{className:"form-group"},Mt.createElement("div",{className:"col-sm-offset-2 col-sm-10"},this.state.processes.map((e,a)=>Mt.createElement("div",{className:"checkbox",key:e.name},Mt.createElement("label",null,Mt.createElement("input",{checked:e.enabled,onChange:e=>this.setProcessEnabled(a,e.target.checked),type:"checkbox"})," ",e.name)," ",Mt.createElement(t,{content:e.description,placement:"right"}))))),Mt.createElement(gt,{reason:this.state.reason,onChange:e=>this.setState({reason:e})})),Mt.createElement(Yo,{account:a.account,isValid:this.getJobs().length>0,onCancel:e,onSubmit:this.submit}))}}class nd extends Mt.Component{constructor(e){super(e),this.editScalingProcesses=()=>{const{app:e,serverGroup:t}=this.props;ad.show({application:e,serverGroup:t})},this.state=this.getState(e)}getState(e){const{serverGroup:t}=e,a=ro.normalizeScalingProcesses(t),n=t.scalingPolicies.length>0&&a.filter(e=>!e.enabled).some(e=>["Launch","Terminate","AlarmNotification"].includes(e.name)),r=t.scheduledActions.length>0&&a.filter(e=>!e.enabled).some(e=>["Launch","Terminate","ScheduledAction"].includes(e.name));return{autoScalingProcesses:a,scalingPoliciesDisabled:n,scheduledActionsDisabled:r}}componentWillReceiveProps(e){this.setState(this.getState(e))}render(){const{autoScalingProcesses:e,scalingPoliciesDisabled:a,scheduledActionsDisabled:n}=this.state;return Mt.createElement(G,{cacheKey:"Scaling Processes",heading:({chevron:e})=>Mt.createElement("h4",{className:"collapsible-heading"},e,Mt.createElement("span",null,a&&Mt.createElement(O,{value:"Some scaling processes are disabled that may prevent scaling policies from working"},Mt.createElement("span",{className:"fa fa-exclamation-circle warning-text"})),n&&Mt.createElement(O,{value:"Some scaling processes are disabled that may prevent scheduled actions from working"},Mt.createElement("span",{className:"fa fa-exclamation-circle warning-text"})),"Scaling Processes"))},Mt.createElement("ul",{className:"scaling-processes"},e.map(e=>Mt.createElement("li",{key:e.name},Mt.createElement("span",{style:{visibility:e.enabled?"visible":"hidden"},className:"fa fa-check small"}),Mt.createElement("span",{className:e.enabled?"":"text-disabled"},e.name," "),Mt.createElement(t,{content:e.description,placement:"bottom"}),e.suspensionDate&&Mt.createElement("div",{className:"text-disabled small",style:{marginLeft:"35px"}},"Suspended ",B(e.suspensionDate))))),hn.adHocInfraWritesEnabled&&Mt.createElement("a",{className:"clickable",onClick:this.editScalingProcesses},"Edit Scaling Processes"))}}class rd extends Mt.Component{render(){const{action:e}=this.props;return Mt.createElement("dl",{className:"horizontal-when-filters-collapsed",style:{marginBottom:"20px"}},Mt.createElement("dt",null,"Schedule"),Mt.createElement("dd",null,e.recurrence),void 0!==e.minSize&&Mt.createElement("dt",null,"Min Size"),void 0!==e.minSize&&Mt.createElement("dd",null,e.minSize),void 0!==e.maxSize&&Mt.createElement("dt",null,"Max Size"),void 0!==e.maxSize&&Mt.createElement("dd",null,e.maxSize),void 0!==e.desiredCapacity&&Mt.createElement("dt",null,"Desired Size"),void 0!==e.desiredCapacity&&Mt.createElement("dd",null,e.desiredCapacity))}}function ld(e){return{recurrence:e.recurrence,minSize:e.minSize,maxSize:e.maxSize,desiredCapacity:e.desiredCapacity}}function id(e){var t;const a=[e.minSize,e.maxSize,e.desiredCapacity];return!(!String(null!=(t=e.recurrence)?t:"").trim()||a.every(e=>void 0===e))&&(!a.some(e=>void 0!==e&&(!Number.isFinite(e)||!Number.isInteger(e)||e<0))&&(!(void 0!==e.minSize&&void 0!==e.maxSize&&e.minSize>e.maxSize)&&(!(void 0!==e.desiredCapacity&&void 0!==e.minSize&&e.desiredCapacity<e.minSize)&&!(void 0!==e.desiredCapacity&&void 0!==e.maxSize&&e.desiredCapacity>e.maxSize))))}function sd(e,t){return{type:"upsertAsgScheduledActions",asgs:[{asgName:e.name,region:e.region}],scheduledActions:t.map(ld),credentials:e.account}}class od extends Mt.Component{constructor(){super(...arguments),this.state={scheduledActions:(this.props.serverGroup.scheduledActions||[]).map(ld),taskMonitor:new v({application:this.props.application,title:`Update Scheduled Actions for ${this.props.serverGroup.name}`,onDismiss:this.props.dismissModal,onTaskComplete:()=>this.props.application.serverGroups.refresh()})},this.addScheduledAction=()=>{this.setState(({scheduledActions:e})=>({scheduledActions:[...e,{}]}))},this.removeScheduledAction=e=>{this.setState(({scheduledActions:t})=>({scheduledActions:t.filter((t,a)=>a!==e)}))},this.updateScheduledAction=(e,t,a)=>{this.setState(({scheduledActions:n})=>({scheduledActions:n.map((n,r)=>r===e?{...n,[t]:""===a?void 0:a}:n)}))},this.submit=()=>{const{application:e,serverGroup:t}=this.props;this.state.taskMonitor.submit(()=>H.executeTask({application:e,description:`Update Scheduled Actions for ${t.name}`,job:[sd(t,this.state.scheduledActions)]}))}}static show(e){return ct(e.serverGroup,e.application).then(t=>t&&E.show(od,e,{dialogClassName:"modal-lg"}))}renderNumberInput(e,t,a){return Mt.createElement("input",{className:"form-control input-sm",min:0,onChange:a=>this.updateScheduledAction(e,t,""===a.target.value?"":Number(a.target.value)),type:"number",value:null!=a?a:""})}render(){const{dismissModal:e,serverGroup:t}=this.props,a=this.state.scheduledActions.every(id);return Mt.createElement(Mt.Fragment,null,Mt.createElement(ot,{monitor:this.state.taskMonitor}),Mt.createElement(me,{dismiss:e}),Mt.createElement(Oa.Header,null,Mt.createElement(Oa.Title,null,"Edit Scheduled Actions for ",t.name)),Mt.createElement(Oa.Body,{className:"container-fluid"},Mt.createElement("p",null,"You must specify at least one of: Min Size, Max Size, Desired Capacity."),Mt.createElement("p",null,Mt.createElement("strong",null,"Note:")," CRON expressions are evaluated in UTC."),Mt.createElement("table",{className:"table table-condensed packed"},Mt.createElement("thead",null,Mt.createElement("tr",null,Mt.createElement("th",null,"Recurrence (CRON)"),Mt.createElement("th",null,"Min Size"),Mt.createElement("th",null,"Max Size"),Mt.createElement("th",null,"Desired Capacity"),Mt.createElement("th",null))),Mt.createElement("tbody",null,this.state.scheduledActions.map((e,t)=>{var a;return Mt.createElement("tr",{key:t},Mt.createElement("td",null,Mt.createElement("input",{className:"form-control input-sm no-spel",onChange:e=>this.updateScheduledAction(t,"recurrence",e.target.value),required:!0,type:"text",value:null!=(a=e.recurrence)?a:""})),Mt.createElement("td",null,this.renderNumberInput(t,"minSize",e.minSize)),Mt.createElement("td",null,this.renderNumberInput(t,"maxSize",e.maxSize)),Mt.createElement("td",null,this.renderNumberInput(t,"desiredCapacity",e.desiredCapacity)),Mt.createElement("td",null,Mt.createElement("button",{"aria-label":"Remove scheduled action",className:"btn btn-link",onClick:()=>this.removeScheduledAction(t),type:"button"},Mt.createElement("span",{className:"glyphicon glyphicon-trash"}))))}))),Mt.createElement("button",{className:"add-new col-md-12",onClick:this.addScheduledAction,type:"button"},Mt.createElement("span",{className:"glyphicon glyphicon-plus-sign"})," Add new Scheduled Action")),Mt.createElement(Yo,{account:t.account,isValid:a,onCancel:e,onSubmit:this.submit}))}}class cd extends Mt.Component{constructor(e){super(e),this.editScheduledActions=()=>{const{app:e,serverGroup:t}=this.props;od.show({application:e,serverGroup:t})},this.state=this.getState(e)}getState(e){const{serverGroup:t}=e,a=ro.normalizeScalingProcesses(t);return{scheduledActionsDisabled:t.scheduledActions.length>0&&a.filter(e=>!e.enabled).some(e=>["Launch","Terminate","ScheduledAction"].includes(e.name))}}componentWillReceiveProps(e){this.setState(this.getState(e))}render(){const{serverGroup:e}=this.props,{scheduledActionsDisabled:t}=this.state;return Mt.createElement(G,{cacheKey:"Scheduled Actions",heading:({chevron:e})=>Mt.createElement("h4",{className:"collapsible-heading"},e,Mt.createElement("span",null,t&&Mt.createElement(O,{value:"Some scaling processes are disabled that may prevent scheduled actions from working"},Mt.createElement("span",{className:"fa fa-exclamation-circle warning-text"})),"Scheduled Actions"))},e.scheduledActions.map((e,t)=>Mt.createElement(rd,{key:t,action:e})),e.scheduledActions.length>0&&Mt.createElement("p",null,Mt.createElement("strong",null,"Note:")," Schedules are evaluated in UTC."),0===e.scheduledActions.length&&Mt.createElement("p",null,"No Scheduled Actions are configured for this server group."),hn.adHocInfraWritesEnabled&&Mt.createElement("a",{className:"clickable",onClick:this.editScheduledActions},"Edit Scheduled Actions"))}}function dd(e,t,a){var n,r;const l=((null==(r=null==(n=null==e?void 0:e[t.account])?void 0:n.aws)?void 0:r[t.region])||[]).filter(e=>e.vpcId===t.vpcId),i=new Map(l.map(e=>[e.id,e])),s=new Set;return[...(a||[]).map(e=>(s.add(e.id),i.get(e.id)||e)),...l.filter(e=>!s.has(e.id)).sort((e,t)=>e.name.localeCompare(t.name))]}const md=class e extends Mt.Component{constructor(){super(...arguments),this.initialSecurityGroups=this.props.securityGroups||(this.props.serverGroup.securityGroups||[]).map(e=>({id:e,name:e})),this.state={availableSecurityGroups:this.initialSecurityGroups,securityGroups:this.initialSecurityGroups,securityGroupsLoaded:!1,taskMonitor:new v({application:this.props.application,title:`Update ${R.get("Firewalls")} for ${this.props.serverGroup.name}`,onDismiss:this.props.dismissModal,onTaskComplete:()=>this.props.application.serverGroups.refresh()})},this.isUnmounted=!1,this.loadSecurityGroups=()=>(this.setState({securityGroupsLoaded:!1,securityGroupsLoadError:void 0}),this.context.services.securityGroupReader.getAllSecurityGroups().then(e=>{this.isUnmounted||this.setState({availableSecurityGroups:dd(e,this.props.serverGroup,this.state.securityGroups),securityGroupsLoaded:!0})}).catch(()=>{this.isUnmounted||this.setState({securityGroupsLoaded:!0,securityGroupsLoadError:"Unable to load security groups. Check your connection and try again."})})),this.submit=()=>{const{application:e,serverGroup:t}=this.props;this.state.taskMonitor.submit(()=>this.context.services.serverGroupWriter.updateSecurityGroups(t,this.state.securityGroups,e,function(e){return Boolean(e.launchTemplate||e.mixedInstancesPolicy)}(t)))}}static show(t,a){return ct(t.serverGroup,t.application).then(n=>n&&E.show(e,t,void 0,a))}componentDidMount(){this.loadSecurityGroups()}componentWillUnmount(){this.isUnmounted=!0}render(){const{dismissModal:e,serverGroup:t}=this.props;return Mt.createElement(Mt.Fragment,null,Mt.createElement(ot,{monitor:this.state.taskMonitor}),Mt.createElement(me,{dismiss:e}),Mt.createElement(Oa.Header,null,Mt.createElement(Oa.Title,null,"Edit ",R.get("Firewalls")," for ",t.name)),Mt.createElement(Oa.Body,{className:"container-fluid form-horizontal"},Mt.createElement("div",{className:"form-group"},Mt.createElement("div",{className:"col-md-10 col-md-offset-1"},Mt.createElement(_a,{labelKey:"name",isLoading:!this.state.securityGroupsLoaded,multi:!0,onChange:e=>this.setState({securityGroups:e||[]}),optionRenderer:e=>Mt.createElement("span",null,`${e.name} (${e.id})`),options:this.state.availableSecurityGroups,value:this.state.securityGroups,valueKey:"id"}),this.state.securityGroupsLoadError&&Mt.createElement("div",{className:"alert alert-danger security-groups-load-error",role:"alert"},this.state.securityGroupsLoadError," ",Mt.createElement("button",{className:"btn btn-default btn-xs",onClick:this.loadSecurityGroups,type:"button"},"Retry"))))),Mt.createElement(Yo,{account:t.account,isValid:this.state.securityGroupsLoaded&&!this.state.securityGroupsLoadError,onCancel:e,onSubmit:this.submit}))}};md.contextType=g;let ud=md;class pd extends Mt.Component{constructor(e){super(e),this.editSecurityGroups=()=>{const{app:e,serverGroup:t}=this.props;ud.show({application:e,securityGroups:this.state.securityGroups,serverGroup:t},this.context.services)},this.state={securityGroups:this.getSecurityGroups(e)}}tryFindingSecurityGroupInIndex(e,t,a,n){try{return Qs.resolveIndexedSecurityGroup(e,{account:t,region:a},n)}catch(e){return}}getSecurityGroups(e){let t;const{app:a,serverGroup:n}=e;return n.securityGroups&&n.securityGroups.length&&(t=Xt(n.securityGroups).map(e=>fa(a.securityGroups.data,{accountName:n.account,region:n.region,id:e})||fa(a.securityGroups.data,{accountName:n.account,region:n.region,name:e})||this.tryFindingSecurityGroupInIndex(a.securityGroupsIndex,n.account,n.region,e)||{id:e,name:e}).compact().value()),t}componentWillReceiveProps(e){this.setState({securityGroups:this.getSecurityGroups(e)})}render(){const{serverGroup:e}=this.props,{securityGroups:t}=this.state;return Mt.createElement(G,{heading:R.get("Firewalls")},Mt.createElement("ul",null,Kt(t,"name").map(t=>Mt.createElement("li",{key:t.name},Mt.createElement(ja,{to:"^.firewallDetails",params:{name:t.name,accountId:t.accountName,region:e.region,vpcId:e.vpcId,provider:e.type}},Mt.createElement("a",null,t.name," (",t.id,")"))))),hn.adHocInfraWritesEnabled&&e.vpcId&&Mt.createElement("a",{className:"clickable",onClick:this.editSecurityGroups},"Edit ",R.get("Firewalls")))}}pd.contextType=g;class hd extends Mt.Component{render(){const{serverGroup:e}=this.props;return Mt.createElement(G,{heading:"Tags"},0===e.asg.tags.length&&Mt.createElement("div",null,"No tags associated with this server group"),e.asg.tags.length>0&&Mt.createElement("dl",null,Kt(e.asg.tags,"key").map(e=>[Mt.createElement("dt",{key:e.key},e.key),Mt.createElement("dd",{key:e.value},e.value)])))}}class gd{static getWarmPoolConfiguration(e){var t;return null==(t=e.asg)?void 0:t.warmPoolConfiguration}static isEnabled(e){return!!gd.getWarmPoolConfiguration(e)}static poolStates(){return["Stopped","Running","Hibernated"]}}var vd,fd,Ed,yd,bd,Cd,Nd,wd,Sd;class kd extends Mt.Component{constructor(){super(...arguments),this.initialConfiguration=gd.getWarmPoolConfiguration(this.props.serverGroup),this.state={enabled:!!this.initialConfiguration,minSize:null!=(fd=null==(vd=this.initialConfiguration)?void 0:vd.minSize)?fd:0,maxGroupPreparedCapacity:null!=(yd=null==(Ed=this.initialConfiguration)?void 0:Ed.maxGroupPreparedCapacity)?yd:-1,poolState:null!=(Cd=null==(bd=this.initialConfiguration)?void 0:bd.poolState)?Cd:"Stopped",reuseOnScaleIn:null!=(Sd=null==(wd=null==(Nd=this.initialConfiguration)?void 0:Nd.instanceReusePolicy)?void 0:wd.reuseOnScaleIn)&&Sd,taskMonitor:new v({application:this.props.application,title:`Update Warm Pool for ${this.props.serverGroup.name}`,onDismiss:this.props.dismissModal,onTaskComplete:()=>this.props.application.serverGroups.refresh()})},this.submit=()=>{const{application:e,serverGroup:t}=this.props,a=function(e,t){const a={asgName:t.name,regions:[t.region],credentials:t.account,cloudProvider:"aws",reason:e.reason};return e.enabled?{...a,type:"modifyWarmPool",action:"upsert",minSize:e.minSize,maxGroupPreparedCapacity:e.maxGroupPreparedCapacity,poolState:e.poolState,reuseOnScaleIn:e.reuseOnScaleIn}:{...a,type:"modifyWarmPool",action:"delete"}}(this.state,t);this.state.taskMonitor.submit(()=>H.executeTask({application:e,description:`Update Warm Pool for ${t.name}`,job:[a]}))}}static show(e){return ct(e.serverGroup,e.application).then(t=>t&&E.show(kd,e))}render(){const{dismissModal:e,serverGroup:a}=this.props,{enabled:n,minSize:r,maxGroupPreparedCapacity:l,poolState:i,reuseOnScaleIn:s}=this.state;return Mt.createElement(Mt.Fragment,null,Mt.createElement(ot,{monitor:this.state.taskMonitor}),Mt.createElement(me,{dismiss:e}),Mt.createElement(Oa.Header,null,Mt.createElement(Oa.Title,null,"Modify Warm Pool for ",a.name)),Mt.createElement(Oa.Body,{className:"container-fluid form-horizontal"},Mt.createElement("div",{className:"form-group"},Mt.createElement("div",{className:"col-sm-offset-2 col-sm-10"},Mt.createElement("div",{className:"checkbox"},Mt.createElement("label",null,Mt.createElement("input",{checked:n,onChange:e=>this.setState({enabled:e.target.checked}),type:"checkbox"})," ","Enable Warm Pool",Mt.createElement(t,{content:"Keeps a pool of pre-initialized instances alongside this Auto Scaling Group to speed up scale-out.",placement:"right"}))))),n&&Mt.createElement(Mt.Fragment,null,Mt.createElement("div",{className:"form-group"},Mt.createElement("label",{className:"col-sm-4 control-label"},"Min Size"),Mt.createElement("div",{className:"col-sm-6"},Mt.createElement("input",{className:"form-control",type:"number",min:0,value:r,onChange:e=>this.setState({minSize:Number(e.target.value)})}))),Mt.createElement("div",{className:"form-group"},Mt.createElement("label",{className:"col-sm-4 control-label"},"Max Group Prepared Capacity",Mt.createElement(t,{content:"The maximum capacity of the Auto Scaling Group, including the warm pool. -1 means no limit beyond the group's own max size."})),Mt.createElement("div",{className:"col-sm-6"},Mt.createElement("input",{className:"form-control",type:"number",min:-1,value:l,onChange:e=>this.setState({maxGroupPreparedCapacity:Number(e.target.value)})}))),Mt.createElement("div",{className:"form-group"},Mt.createElement("label",{className:"col-sm-4 control-label"},"Instance State"),Mt.createElement("div",{className:"col-sm-6"},Mt.createElement("select",{className:"form-control",value:i,onChange:e=>this.setState({poolState:e.target.value})},gd.poolStates().map(e=>Mt.createElement("option",{key:e,value:e},e))))),Mt.createElement("div",{className:"form-group"},Mt.createElement("div",{className:"col-sm-offset-2 col-sm-10"},Mt.createElement("div",{className:"checkbox"},Mt.createElement("label",null,Mt.createElement("input",{checked:s,onChange:e=>this.setState({reuseOnScaleIn:e.target.checked}),type:"checkbox"})," ","Reuse instances on scale in",Mt.createElement(t,{content:"If enabled, instances terminated by scale-in are returned to the warm pool instead of being terminated."})))))),Mt.createElement(gt,{reason:this.state.reason,onChange:e=>this.setState({reason:e})})),Mt.createElement(Yo,{account:a.account,isValid:!0,onCancel:e,onSubmit:this.submit}))}}class Td extends Mt.Component{constructor(){super(...arguments),this.editWarmPool=()=>{const{app:e,serverGroup:t}=this.props;kd.show({application:e,serverGroup:t})}}render(){var e,t,a;const{serverGroup:n}=this.props,r=gd.getWarmPoolConfiguration(n);return Mt.createElement(G,{cacheKey:"Warm Pool",heading:"Warm Pool"},r?Mt.createElement("ul",{className:"warm-pool"},Mt.createElement("li",null,"Min Size: ",null!=(e=r.minSize)?e:0),Mt.createElement("li",null,"Max Group Prepared Capacity:"," ",null!=r.maxGroupPreparedCapacity&&r.maxGroupPreparedCapacity>=0?r.maxGroupPreparedCapacity:"No limit"),Mt.createElement("li",null,"Instance State: ",null!=(t=r.poolState)?t:"Stopped"),Mt.createElement("li",null,"Reuse on Scale In: ",(null==(a=r.instanceReusePolicy)?void 0:a.reuseOnScaleIn)?"Yes":"No")):Mt.createElement("div",{className:"text-disabled"},"No warm pool configured"),hn.adHocInfraWritesEnabled&&Mt.createElement("a",{className:"clickable",onClick:this.editWarmPool},"Edit Warm Pool"))}}Ft.registerValidator("aws",new class{validateSpecialCharacters(e,t){/^[a-zA-Z_0-9.]*$/g.test(e)||t.push("Only dot(.) and underscore(_) special characters are allowed.")}validateClassicLock(e){const t=hn.classicLaunchLockout;t&&t<(new Date).getTime()&&e.push(`New applications deployed to AWS are restricted to VPC; you cannot create server groups,\n load balancers, or ${R.get("firewalls")} in EC2 Classic.`)}validateLoadBalancerCharacters(e,t){(e.includes(".")||e.includes("_"))&&t.push("If the application's name contains an underscore(_) or dot(.),\n you will not be able to create a load balancer,\n preventing it from being used as a front end service.\n Any hostname constructed with this application name may have issues.")}validateLength(e,t,a){if(e.length>250)a.push("The maximum length for an application in Amazon is 250 characters.");else{if(e.length>240)if(e.length>=248)t.push(`You will not be able to include a stack or detail field for clusters or ${R.get("firewalls")}.`);else{const a=248-e.length;t.push(`If you plan to include a stack or detail field for clusters, you will only\n have ~${a} characters to do so.`)}if(e.length>20)if(e.length>32)t.push(`You will not be able to create an Amazon load balancer for this application if the\n application's name is longer than 32 characters (currently: ${e.length} characters)`);else if(e.length>=30)t.push(`If you plan to create load balancers for this application, be aware that the character limit\n for load balancer names is 32 (currently: ${e.length} characters). With separators ("-"), you will not\n be able to add a stack and detail field to any load balancer.`);else{const a=30-e.length;t.push(`If you plan to create load balancers for this application, be aware that the character limit\n for load balancer names is 32. You will only have ~${a} characters to add a stack or detail\n field to any load balancer.`)}}}validate(e=""){const t=[],a=[];return e.length&&(this.validateClassicLock(t),this.validateSpecialCharacters(e,a),this.validateLoadBalancerCharacters(e,t),this.validateLength(e,t,a)),{warnings:t,errors:a}}});function Id(e,t,a="aws"){Re.pipeline.getStageTypes().some(t=>{const n=t.provides||t.key,r=null===a||t.cloudProvider===a;return n===e&&r})||t()}Cr('.cloud-provider-logo .icon-aws {\n -webkit-mask-image: url("data:image/svg+xml,%3C%3Fxml version%3D%221.0%22 encoding%3D%22utf-8%22%3F%3E%3C!DOCTYPE svg PUBLIC %22-%2F%2FW3C%2F%2FDTD SVG 1.1%2F%2FEN%22 %22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg version%3D%221.1%22 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22 xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22 x%3D%220px%22 y%3D%220px%22%09 width%3D%22130px%22 height%3D%22130px%22 viewBox%3D%220 0 27 27%22%3E%3Cg%3E%09%3Cpolygon fill%3D%22%23000000%22 stroke%3D%22%23FFFFFF%22 stroke-width%3D%220%22 points%3D%2213.2%2C27 2.4%2C23.1 2.4%2C8.5 13.2%2C12.5 %22%2F%3E%09%3Cpolygon fill%3D%22%23000000%22 stroke%3D%22%23FFFFFF%22 stroke-width%3D%220%22 points%3D%2226.5%2C23.1 15.2%2C27 15.2%2C12.5 26.5%2C8 %22%2F%3E%09%3Cpolygon fill%3D%22%23000000%22 stroke%3D%22%23FFFFFF%22 stroke-width%3D%220%22 points%3D%2214.2%2C3.4 25.5%2C7 14.2%2C11.0 2.9%2C7 %22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E");\n mask-image: url("data:image/svg+xml,%3C%3Fxml version%3D%221.0%22 encoding%3D%22utf-8%22%3F%3E%3C!DOCTYPE svg PUBLIC %22-%2F%2FW3C%2F%2FDTD SVG 1.1%2F%2FEN%22 %22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg version%3D%221.1%22 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22 xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22 x%3D%220px%22 y%3D%220px%22%09 width%3D%22130px%22 height%3D%22130px%22 viewBox%3D%220 0 27 27%22%3E%3Cg%3E%09%3Cpolygon fill%3D%22%23000000%22 stroke%3D%22%23FFFFFF%22 stroke-width%3D%220%22 points%3D%2213.2%2C27 2.4%2C23.1 2.4%2C8.5 13.2%2C12.5 %22%2F%3E%09%3Cpolygon fill%3D%22%23000000%22 stroke%3D%22%23FFFFFF%22 stroke-width%3D%220%22 points%3D%2226.5%2C23.1 15.2%2C27 15.2%2C12.5 26.5%2C8 %22%2F%3E%09%3Cpolygon fill%3D%22%23000000%22 stroke%3D%22%23FFFFFF%22 stroke-width%3D%220%22 points%3D%2214.2%2C3.4 25.5%2C7 14.2%2C11.0 2.9%2C7 %22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E");\n}\n'),Ge.registerProvider("aws",{name:"Amazon",adHocInfrastructureWritesEnabled:hn.adHocInfraWritesEnabled,logo:{path:"amazon.logo352d4e042476837f.svg"},applicationProviderFields:[{field:"useAmiBlockDeviceMappings",label:"Prefer AMI Block Device Mappings",type:"boolean"}],image:{reader:rr},serverGroup:{transformer:Xn,detailsActions:oc,detailsGetter:cc,detailsSections:[Hc,Wc,jc,Zc,Kc,Xc,pd,nd,td,cd,Td,hd,Qc,Vc,Jc],CloneServerGroupModal:Ko,commandBuilder:no,configurationService:so,instanceTypeService:Yn,scalingActivitiesEnabled:!0,TargetTrackingChart:hc,UpsertStepPolicyModal:Gc,UpsertTargetTrackingModal:Cc},instance:{instanceTypeService:Yn,details:br},loadBalancer:{transformer:Ar,CreateLoadBalancerModal:El,useDetailsHook:Cl,detailsActions:Sl,detailsSections:xl,targetGroupDetails:Dr,ClusterContainer:wr,LoadBalancersTag:Pr},function:{details:ar,CreateFunctionModal:Rn,setTransformer:fn,transformer:fn},securityGroup:{transformer:eo,reader:Qs,CreateSecurityGroupModal:Vs,details:Js}}),Id("bake",Ol),Id("cloneServerGroup",Vl),Id("deployCloudFormation",ii),Id("destroyServerGroup",Ii),Id("disableServerGroup",Ai),Id("disableCluster",xi),Id("enableServerGroup",Bi),Id("findImage",zi),Id("findImageFromTags",Ri),Id("Aws.LambdaDeleteStage",Kl,null),Id("Aws.LambdaDeploymentStage",Ei,null),Id("Aws.LambdaInvokeStage",Hi,null),Id("modifyAwsScalingProcess",Zi),Id("modifyWarmPool",Xi),Id("resizeServerGroup",ls),Id("rollbackCluster",ss),Id("Aws.LambdaUpdateCodeStage",Fs,null),Id("Aws.LambdaTrafficRoutingStage",ws,null),Id("scaleDownCluster",ks),Id("shrinkCluster",Is),Id("upsertImageTags",As),a.registerProvider("aws",["custom","redblack","rollingpush","rollingredblack","monitored"]);export{hn as AWSProviderSettings,Vc as AdvancedSettingsDetailsSection,Ic as AlarmConfigurer,Wc as AmazonCapacityDetailsSection,Ur as AmazonCertificateReader,Fr as AmazonCertificateSelectField,ar as AmazonFunctionDetails,co as AmazonImageSelectInput,Hc as AmazonInfoDetailsSection,yr as AmazonInstanceActions,fr as AmazonInstanceActionsComponent,br as AmazonInstanceDetails,Er as AmazonInstanceDetailsComponent,mr as AmazonInstanceWriter,Sl as AmazonLoadBalancerActions,El as AmazonLoadBalancerChoiceModal,wr as AmazonLoadBalancerClusterContainer,Sr as AmazonLoadBalancerDataUtils,kl as AmazonLoadBalancerDetailsSection,Pl as AmazonLoadBalancerFirewallsSection,Gl as AmazonLoadBalancerHealthChecksSection,Il as AmazonLoadBalancerListenersSection,Tl as AmazonLoadBalancerStatusSection,Al as AmazonLoadBalancerSubnetsSection,Pr as AmazonLoadBalancersTag,Ir as AmazonLoadBalancersTagComponent,Jo as AmazonResizeServerGroupModal,Ys as AmazonSecurityGroupActions,Js as AmazonSecurityGroupDetails,Xs as AmazonSecurityGroupDetailsComponent,Vs as AmazonSecurityGroupModal,Us as AmazonSecurityGroupModalComponent,Gc as AmazonUpsertScalingPolicyModal,Cc as AmazonUpsertTargetTrackingModal,fn as AwsFunctionTransformer,Ar as AwsLoadBalancerTransformer,Yo as AwsModalFooter,io as AwsServerGroupConfigurationService,so as AwsServerGroupConfigurationServiceDelegate,tr as AwsServices,kc as COMPARATORS,Rn as CreateLambdaFunction,Mn as CreateLambdaFunctionComponent,xc as CreateScalingPolicyButton,dc as DateLineChart,gc as DimensionsEditor,Ln as FunctionActions,In as FunctionBasicInformation,jc as HealthDetailsSection,qs as IPRangeRules,sr as InstanceDns,lr as InstanceInformation,cr as InstanceStatus,Zc as InstancesDistributionDetailsSection,lo as KeyPairsReader,Kc as LaunchConfigDetailsSection,Xc as LaunchTemplateDetailsSection,vl as LoadBalancerTypes,Jc as LogsDetailsSection,mc as MetricAlarmChart,fc as MetricSelector,Qc as PackageDetailsSection,Nc as PolicyTypeSelectionModal,td as ScalingPoliciesDetailsSection,wc as ScalingPolicyAdditionalSettings,Lc as ScalingPolicySummary,Dc as ScalingPolicyWriter,nd as ScalingProcessesDetailsSection,cd as ScheduledActionsDetailsSection,Uo as SecurityGroupSelector,pd as SecurityGroupsDetailsSection,Zo as ServerGroupAdvancedSettings,qo as ServerGroupAdvancedSettingsCommon,po as ServerGroupBasicSettings,uo as ServerGroupBasicSettingsComponent,vo as ServerGroupCapacity,Ro as ServerGroupInstanceType,$o as ServerGroupLoadBalancers,Ho as ServerGroupSecurityGroups,Vo as ServerGroupSecurityGroupsRemoved,Lo as ServerGroupZones,Ac as StepPolicyAction,Mc as StepPolicySummary,el as SubnetSelectField,Qr as SubnetSelectInput,hd as TagsDetailsSection,Nr as TargetGroup,Dr as TargetGroupDetails,xr as TargetGroupDetailsComponent,Ec as TargetMetricFields,yc as TargetTrackingAdditionalSettings,hc as TargetTrackingChart,Rc as TargetTrackingSummary,Dn as VpcReader,Fn as VpcTag,Td as WarmPoolDetailsSection,xl as amazonLoadBalancerDetailsSections,pr as applyHealthCheckInfoToTargetGroups,js as buildIpRulesModel,Zs as buildSecurityGroupRulesModel,ur as getAllTargetGroups,_c as getBaseImageName,Ls as initializeAmazonSecurityGroupForModal,$s as isAmazonSecurityGroupValid,gr as loadAmazonInstanceDetails,bl as loadAmazonLoadBalancerDetails,Cl as useAmazonLoadBalancerDetails};
|
|
2
2
|
//# sourceMappingURL=index.js.map
|