SnapMail Basic Workflow

Synchronous send

sequenceDiagram
    participant Sender Ribosome    
    participant Sender Zome
    participant Receiver Ribosome
    Note right of Sender Ribosome : 'send_mail' request received
    Sender Ribosome->>+Sender Zome: send_mail()
    Sender Zome->>Sender Zome: Create OutMail
    Sender Zome->>-Sender Ribosome: 
    Sender Ribosome->>Sender Ribosome: Commit OutMail

    Sender Ribosome->>+Sender Zome: post_commit()
    Sender Zome->>+Sender Ribosome: call_remote("receive_dm")
    Sender Ribosome->>+Receiver Ribosome: receive_dm(mail)
    Receiver Ribosome->>-Sender Ribosome: Success 
    Sender Ribosome->>-Sender Zome: ok 
    Sender Zome->>+Sender Ribosome: call_remote("commit_confirmation")
    Sender Ribosome->>+Sender Zome: commit_confirmation()
    Sender Zome->>Sender Zome: Create DeliveryConfirmation
    Sender Zome->>-Sender Ribosome: 
    Sender Ribosome->>Sender Ribosome: Commit DeliveryConfirmation    
    Sender Ribosome->>-Sender Zome: result
    Sender Zome->>-Sender Ribosome: ok

Synchronous send

sequenceDiagram
    participant Sender
    participant Receiver
    Sender->>Sender: Write OutMail
    Sender->>Receiver: {mail}
    Receiver->>Receiver: Write InMail
    Receiver-->>Sender: Success 
    Note right of Receiver: Opens mail
    Receiver->>Receiver: Write OutAck
    Receiver->>Receiver: Add 'acknowledgment' link to InMail    
    Receiver->>Sender: {ack}
    Sender->>Sender: Write InAck
    Sender-->>Receiver: Success    
    Sender->>Sender: Add 'receipt' link to OutMail

Asynchronous send

sequenceDiagram
    participant Sender
    participant DHT
    participant Receiver
    Sender->>Sender: Write OutMail
    loop receipient
        Sender->>Sender: Write PendingMail
        Sender->>DHT: Share PendingMail
        Sender->>DHT: Add 'mail_inbox' link at receipient's handle address
    end
        
    Note right of Receiver: Checks mail
    Receiver-->>+DHT: Looks up 'mail_inbox' links at handle address
    DHT-->>-Receiver:  [links]
    loop PendingMail link
        Receiver->>+DHT: Get PendingMail
        DHT->>-Receiver: [PendingMail]
        Receiver->>Receiver: Write InMail
        Receiver->>DHT: Delete PendingMail
    end
    Note right of Receiver: Opens mail
    Receiver->>Receiver: Write AckReceipt
    Receiver->>Receiver: Add 'acknowledgment' link to InMail
    Receiver->>DHT: Share AckReceipt
    Receiver->>DHT: Add 'ack_inbox' link at sender's handle address
    Note left of Sender: Checks mail
    Sender-->>+DHT: Looks up 'ack_inbox' links at handle address
    DHT-->>-Sender:  [links]
    loop receipt link
        Sender->>+DHT: Get AckReceipt
        DHT->>-Sender: [AckReceipt]    
        Sender->>Sender: Add 'receipts' link to OutMail
        Sender->>DHT: Delete AckReceipt
    end
Select a repo