code: private void addCloudTrailLogsAndMessageAttributes(Message sqsMessage, JsonNode s3RecordsNode, List<CloudTrailLog> cloudTrailLogs) {
          SourceType sourceType = SourceType.Other;
  
          for (JsonNode s3Record: s3RecordsNode) {
              String bucketName = s3Record.at(S3_BUCKET_NAME).textValue();
              String objectKey = s3Record.at(S3_OBJECT_KEY).textValue();
              String eventName = s3Record.get(EVENT_NAME).textValue();
  
              SourceType currSourceType = sourceIdentifier.identifyWithEventName(objectKey, eventName);
              if (currSourceType == SourceType.CloudTrailLog) {
                  cloudTrailLogs.add(new CloudTrailLog(bucketName, objectKey));
                  sourceType = currSourceType;
                  LibraryUtils.setMessageAccountId(sqsMessage, objectKey);
              }
          }
  
          sqsMessage.addAttributesEntry(SourceAttributeKeys.SOURCE_TYPE.getAttributeKey(), sourceType.name());
      }
docs: As long as there is at least one CloudTrail log object:
  <p>
  <li>Add the CloudTrail log object key to the list.</li>
  <li>Add <code>accountId</code> extracted from log object key to <code>sqsMessage</code>.</li>
  <li>Add {@link SourceType#CloudTrailLog} to the <code>sqsMessage</code>.</li>
  </p>
  
  If there is no CloudTrail log object and it is a valid S3 message, CPL adds only {@link SourceType#Other}
  to the <code>sqsMessage</code>.