aws-cdk-lib
Version:
Version 2 of the AWS Cloud Development Kit library
2 lines (1 loc) • 1.42 kB
JavaScript
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.WaiterStateMachine=void 0;const aws_iam_1=require("../../../aws-iam"),core_1=require("../../../core"),constructs_1=require("constructs");class WaiterStateMachine extends constructs_1.Construct{constructor(scope,id,props){super(scope,id);const role=new aws_iam_1.Role(this,"Role",{assumedBy:new aws_iam_1.ServicePrincipal("states.amazonaws.com")});props.isCompleteHandler.grantInvoke(role),props.timeoutHandler.grantInvoke(role);const definition=core_1.Stack.of(this).toJsonString({StartAt:"framework-isComplete-task",States:{"framework-isComplete-task":{End:!0,Retry:[{ErrorEquals:["States.ALL"],IntervalSeconds:props.interval.toSeconds(),MaxAttempts:props.maxAttempts,BackoffRate:props.backoffRate}],Catch:[{ErrorEquals:["States.ALL"],Next:"framework-onTimeout-task"}],Type:"Task",Resource:props.isCompleteHandler.functionArn},"framework-onTimeout-task":{End:!0,Type:"Task",Resource:props.timeoutHandler.functionArn}}}),resource=new core_1.CfnResource(this,"Resource",{type:"AWS::StepFunctions::StateMachine",properties:{DefinitionString:definition,RoleArn:role.roleArn}});resource.node.addDependency(role),this.stateMachineArn=resource.ref}grantStartExecution(identity){return aws_iam_1.Grant.addToPrincipal({grantee:identity,actions:["states:StartExecution"],resourceArns:[this.stateMachineArn]})}}exports.WaiterStateMachine=WaiterStateMachine;