{
  "Comment": "Handles Sound Recording delivery to TikTok",
  "StartAt": "SRRecordEvent",
  "States": {
    "SRRecordEvent": {
      "Type": "Task",
      "Resource": "${lambda_sr_record_event_arn}",
      "Parameters": {
        "sound_recording": {
          "id.$": "$.sound_recording.id",
          "version.$": "$.sound_recording.version"
        },
        "upload_asset.$": "$.upload_asset",
        "delivery_type.$": "$.delivery_type",
        "event_type": "start",
        "execution_name.$": "$$.Execution.Name",
        "state_machine_name.$": "$$.StateMachine.Name",
        "execution_start_time.$": "$$.Execution.StartTime",
        "step_function_execution_id.$": "$$.Execution.Id"
      },
      "Retry": [
        {
          "ErrorEquals": [
            "States.Timeout",
            "Lambda.ServiceException",
            "Lambda.AWSLambdaException",
            "Lambda.SdkClientException",
            "Lambda.TooManyRequestsException",
            "RetryableException"
          ],
          "IntervalSeconds": 5,
          "MaxAttempts": 5,
          "BackoffRate": 3
        }
      ],
      "Next": "TiktokSRDelivery"
    },
    "TiktokSRDelivery": {
      "Type": "Task",
      "Resource": "${lambda_sr_delivery_tiktok_arn}",
      "HeartbeatSeconds": 60,
      "TimeoutSeconds": 3600,
      "Retry": [
        {
          "ErrorEquals": [
            "States.Timeout",
            "Lambda.ServiceException",
            "Lambda.AWSLambdaException",
            "Lambda.SdkClientException",
            "Lambda.TooManyRequestsException",
            "RetryableException"
          ],
          "IntervalSeconds": 5,
          "MaxAttempts": 5,
          "BackoffRate": 3
        }
      ],
      "Catch": [
        {
          "ErrorEquals": [
            "States.ALL"
          ],
          "Next": "SRRecordEventFinalErrors",
          "ResultPath": "$.error"
        }
      ],
      "Next": "SRRecordEventFinalSuccess",
      "ResultPath": "$.taskresult"
    },
    "SRRecordEventFinalSuccess": {
      "Type": "Task",
      "Resource": "${lambda_sr_record_event_arn}",
      "Parameters": {
        "sound_recording": {
          "id.$": "$.sound_recording.id",
          "version.$": "$.sound_recording.version"
        },
        "upload_asset.$": "$.upload_asset",
        "delivery_type.$": "$.delivery_type",
        "event_type": "success",
        "details.$": "$.taskresult.details",
        "execution_name.$": "$$.Execution.Name",
        "state_machine_name.$": "$$.StateMachine.Name",
        "execution_start_time.$": "$$.Execution.StartTime",
        "step_function_execution_id.$": "$$.Execution.Id"
      },
      "HeartbeatSeconds": 60,
      "TimeoutSeconds": 3600,
      "Retry": [
        {
          "ErrorEquals": [
            "States.Timeout",
            "Lambda.ServiceException",
            "Lambda.AWSLambdaException",
            "Lambda.SdkClientException",
            "Lambda.TooManyRequestsException"
          ],
          "IntervalSeconds": 5,
          "MaxAttempts": 5,
          "BackoffRate": 3
        }
      ],
      "End": true
    },
    "SRRecordEventFinalErrors": {
      "Type": "Task",
      "Resource": "${lambda_sr_record_event_arn}",
      "Parameters": {
        "sound_recording": {
          "id.$": "$.sound_recording.id",
          "version.$": "$.sound_recording.version"
        },
        "upload_asset.$": "$.upload_asset",
        "delivery_type.$": "$.delivery_type",
        "event_type": "failure",
        "execution_name.$": "$$.Execution.Name",
        "state_machine_name.$": "$$.StateMachine.Name",
        "execution_start_time.$": "$$.Execution.StartTime",
        "step_function_execution_id.$": "$$.Execution.Id",
        "error.$": "$.error"
      },
      "HeartbeatSeconds": 60,
      "TimeoutSeconds": 3600,
      "Retry": [
        {
          "ErrorEquals": [
            "States.Timeout",
            "Lambda.ServiceException",
            "Lambda.AWSLambdaException",
            "Lambda.SdkClientException",
            "Lambda.TooManyRequestsException"
          ],
          "IntervalSeconds": 5,
          "MaxAttempts": 5,
          "BackoffRate": 3
        }
      ],
      "Next": "FatalError"
    },
    "FatalError": {
      "Type": "Fail"
    }
  }
}
