updateGroupProfile function 
 
    
    
    
  Implementation
  Future<GroupInfoDTO> updateGroupProfile({
  required ChatUpdateGroupProfileType options,
}) async {
  options.account ??= getCachedWallet()?.address;
  options.signer ??= getCachedWallet()?.signer;
  options.pgpPrivateKey ??= getCachedWallet()?.pgpPrivateKey;
  /**
   * VALIDATIONS
   */
  if (options.account == null && options.signer == null) {
    throw Exception('At least one from account or signer is necessary!');
  }
  final wallet = getWallet(
      address: walletToPCAIP10(options.account!), signer: options.signer);
  String userDID = getAccountAddress(wallet);
  final connectedUser = await getConnectedUserV2(
    wallet: wallet,
    privateKey: options.pgpPrivateKey,
  );
  updateGroupRequestValidator(
    options.chatId,
    options.groupName,
    options.groupDescription ?? '',
    options.groupImage,
    [],
    [],
    userDID,
  );
  final group = await getGroupInfo(chatId: options.chatId);
  /**
   * CREATE PROFILE VERIFICATION PROOF
   */
  final bodyToBeHashed = {
    'groupName': options.groupName,
    'groupDescription': options.groupDescription ?? group.groupDescription,
    'groupImage': options.groupImage,
    'rules': options.rules ?? {},
    "isPublic": group.isPublic,
    "groupType": group.groupType,
  };
  final hash = generateHash(bodyToBeHashed);
  final signature = await sign(
    message: hash,
    privateKey: connectedUser.privateKey!,
  );
  final sigType = 'pgpv2';
  final profileVerificationProof =
      '$sigType:$signature:${walletToPCAIP10(userDID)}';
  final body = {
    'groupName': options.groupName,
    'groupDescription': options.groupDescription ?? group.groupDescription,
    'groupImage': options.groupImage,
    'rules': options.rules ?? {},
    'profileVerificationProof': profileVerificationProof,
  };
  final result = await http.put(
    path: '/v1/chat/groups/${options.chatId}/profile',
    data: body,
  );
  if (result == null || result is String) {
    throw Exception(result);
  }
  return GroupInfoDTO.fromJson(result);
}