When a message is deleted from the client side in Stream, it is "soft deleted". This means that Stream will retain the message information in the channel, return the message, but mark it as "type: deleted". A message can be "hard deleted" through the same API call made server-side, with a second boolean argument "true".
await serverClient.deleteMessage(messageID, true);
When a message is updated, no record of the original message is kept and the message is completely replaced. This means that if you wish to retain a record of the original message, you will need to do so in your own system.