<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.23 (Ruby 3.4.1) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-mahy-vcon-mimi-messages-02" category="info" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.27.0 -->
  <front>
    <title abbrev="VCON for MIMI">VCON for MIMI Messages</title>
    <seriesInfo name="Internet-Draft" value="draft-mahy-vcon-mimi-messages-02"/>
    <author fullname="Rohan Mahy">
      <organization>Rohan Mahy Consulting Services</organization>
      <address>
        <email>rohan.ietf@gmail.com</email>
      </address>
    </author>
    <date year="2025" month="February" day="24"/>
    <area>Applications and Real-Time</area>
    <workgroup>Virtualized Conversations</workgroup>
    <keyword>instant messaging</keyword>
    <keyword>message history</keyword>
    <abstract>
      <?line 36?>

<t>This document describes extensions to the Virtualized Conversation (VCON)
syntax for instant messaging systems using the More Instant Messaging
Interoperability (MIMI) content format.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://rohanmahy.github.io/vcon-mimi-messages/draft-mahy-vcon-mimi-messages.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-mahy-vcon-mimi-messages/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        Virtualized Conversations Working Group mailing list (<eref target="mailto:vcon@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/vcon/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/vcon/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/rohanmahy/vcon-mimi-messages"/>.</t>
    </note>
  </front>
  <middle>
    <?line 43?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>VCON <xref target="I-D.ietf-vcon-vcon-container"/> is a format for recording and
transmitting conversations. MIMI content <xref target="I-D.ietf-mimi-content"/>
is a format for conveying Instant Messages in an interoperable way
when end-to-end encrypted. This document describes a way to translate
a set of MIMI messages in a conversation or part of a conversation into
a VCON.</t>
    </section>
    <section anchor="conventions-and-definitions">
      <name>Conventions and Definitions</name>
      <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
      <?line -18?>

<t>The examples in this document may contain base64url encoded values that have extra whitespace added for readability, and to conform with Internet-Draft formatting conventions. That whitespace should be ignored.</t>
      <t>Some metadata about a MIMI content message is conveyed in the encryption protocol Messaging Layer Security (MLS) <xref target="RFC9420"/> or in the MIMI protocol <xref target="I-D.ietf-mimi-protocol"/>.</t>
      <t>For example, the sender, recipient, date, and message ID are not mandatory fields in a MIMI content message.
The recipient is the MIMI room ID associated with the corresponding MLS group.
The participants in the group are calculated from the MLS group state and MIMI participant list during the MLS "epoch" in which the message was sent.
The sender is conveyed in MLS.
The MIMI "Hub" received timestamp is conveyed in the MIMI protocol.
The MIMI content message ID is constructed by hashing fields from the MIMI content, and the sender and room URIs (see <xref section="3.3" sectionFormat="of" target="I-D.ietf-mimi-content"/>).</t>
      <t>When message franking is enabled, as defined in <xref section="5.4.1" sectionFormat="of" target="I-D.ietf-mimi-protocol"/>, the <tt>franking_tag</tt> is conveyed in the MLS message's Additional Authenticated Data (AAD) field, while the MIMI protocol conveys the <tt>Frank</tt> structure generated by the MIMI Hub.</t>
      <t>The room metadata described in this document comes from <xref section="3" sectionFormat="of" target="I-D.mahy-mimi-app-components"/>, while the names of the parties comes from the participant list defined in Section 4 of the same document.</t>
    </section>
    <section anchor="syntax">
      <name>Syntax</name>
      <t>A MIMI conversation (or portion thereof) is represented in VCON with
a mandatory list of parties and dialogs, a new top-level room object,
and optionally attachment objects.</t>
      <section anchor="room-information">
        <name>Room information</name>
        <t>This document adds a mandatory, top-level <tt>room</tt> object. It contains metadata
known about the room at the start of the VCON period.</t>
        <ul spacing="normal">
          <li>
            <t><tt>id</tt> is the MIMI room ID URL. It is mandatory.</t>
          </li>
          <li>
            <t><tt>name</tt> is the textual name of the room. It is optional.</t>
          </li>
          <li>
            <t><tt>avatar</tt> is a URL referencing the room image. It is optional.</t>
          </li>
          <li>
            <t><tt>subject</tt> is the room subject. It is optional.</t>
          </li>
          <li>
            <t><tt>mood</tt> is the room mood. It is optional</t>
          </li>
          <li>
            <t><tt>description</tt> is an array of room_description objects. It is optional. Each object can contain:  </t>
            <ul spacing="normal">
              <li>
                <t>a <tt>type</tt>- a media type or an empty string. It is optional. It's default value is <tt>text/plain;charset=UTF-8</tt>.</t>
              </li>
              <li>
                <t>a <tt>lang</tt> - a <tt>Language-tag</tt> as defined by <xref target="RFC5646"/>. It is optional.</t>
              </li>
              <li>
                <t>a <tt>content</tt> - if the <tt>type</tt> begins with "text" or is empty, the content the is UTF-8 text description of the room. Otherwise it is the base64url encoding of whatever type is described. The <tt>content</tt> field is mandatory in a room_description object.</t>
              </li>
            </ul>
          </li>
        </ul>
      </section>
      <section anchor="parties">
        <name>Parties</name>
        <t>The <tt>parties</tt> array <bcp14>MUST</bcp14> contain all the
participants who were in the conversation at any point in time during the
period represented by the VCON. The first party in the array is the MIMI room URI.</t>
        <t>This document adds a new party_object_type: <tt>im_uri</tt>. It is mandatory.
The <tt>name</tt> field is optional. The <tt>role</tt> indicates the MIMI role and is
optional. The document also adds a <tt>thumbprint</tt> party_object_type, which is
the JWK thumbprint of the public key of the party. If there are multiple
parties (clients) with the same <tt>im_uri</tt> then the thumbprint is required,
otherwise it is optional.</t>
      </section>
      <section anchor="the-dialog-object-text-type">
        <name>The dialog object (text type)</name>
        <t>The following section refers to changes and additions to the dialog object when the <tt>type</tt> field is "text".</t>
        <section anchor="semantics-of-the-existing-fields-for-text">
          <name>Semantics of the existing fields for text</name>
          <t>The dialog object consists of an array of instant messages of type "text".
The start time is set to the hub received timestamp when available.
The duration is zero.
The originator is set to the parties index of the sender of the message.</t>
          <t>The first MIMI message represented in a MIMI VCON should contain the complete list of parties who were participants in the room at that time.
For subsequent messages, a parties array consisting of index zero, indicates the recipients of the message are the active participants of the room.
Changes to the roster can be tracked if <tt>party_history</tt> is present for those changes (see <xref target="party-history"/>).</t>
        </section>
        <section anchor="extensions-to-the-dialog-object-for-text">
          <name>Extensions to the dialog object for text</name>
          <t>The parties array consist of the party indexes of those who were active participants when the message was sent.</t>
          <ul spacing="normal">
            <li>
              <t><tt>message_id</tt> is the base64url encoding of the MIMI content message ID. It is mandatory.</t>
            </li>
            <li>
              <t><tt>salt</tt> is the base64url encoding of the MIMI content salt. It is mandatory.</t>
            </li>
            <li>
              <t><tt>replaces</tt> is the base64url encoding of the MIMI content message_id of the message this message replaces. It is optional if empty.</t>
            </li>
            <li>
              <t><tt>topic_id</tt> is the base64url encoding of the MIMI topic_id. It is optional if empty.</t>
            </li>
            <li>
              <t><tt>expires</tt> is optional if empty in MIMI. It contains null or a map with the following items:  </t>
              <ul spacing="normal">
                <li>
                  <t><tt>relative</tt> is a boolean that is true if the time is expressed relative to the recipient read time, and false if it is expressed as an absolute date/time. It is mandatory when <tt>expires</tt> is present.</t>
                </li>
                <li>
                  <t><tt>relative_time</tt> is an integer number of seconds. If <tt>relative</tt> is true, once the message has been read, the client is expected to delete the message after <tt>relative_time</tt> seconds. It is mandatory if <tt>relative</tt> is true.</t>
                </li>
                <li>
                  <t><tt>absolute_time</tt> is the expiration date/time of the message expressed as a VCON (text) date_type. It is mandatory if <tt>relative</tt> is false and optional otherwise.</t>
                </li>
              </ul>
            </li>
            <li>
              <t><tt>in_reply_to</tt> is the base64url encoding of the MIMI content message_id of the message to which this message is replying (or reacting). It is optional if empty.</t>
            </li>
            <li>
              <t><tt>mimi_extensions</tt> is a base64 encoding of the CBOR MIMI content extensions map or null. It is optional if not present in the MIMI content.</t>
            </li>
            <li>
              <t><tt>franking_tag</tt> is a base64url encoding of the MIMI <tt>franking_tag</tt>, or null.  It is optional if not present.</t>
            </li>
            <li>
              <t><tt>frank</tt> is a base64url encoding of the MIMI protocol <tt>Frank</tt> TLS struct, or null. It is optional if not present.</t>
            </li>
          </ul>
          <t>VCON typically expresses message content using the <tt>body</tt>, <tt>encoding</tt>, and <tt>mediatype</tt> fields.
In order to preserve this convention we use these fields directly for a MIMI SinglePart structure, but use new MultiPart and ExternalPart objects for those corresponding MIMI structures.
For a SinglePart these two fields with the same semantics as their MIMI content counterparts could be present.</t>
          <ul spacing="normal">
            <li>
              <t><tt>disposition</tt> - optional if set to the default value ("render")</t>
            </li>
            <li>
              <t><tt>language</tt> - optional if absent</t>
            </li>
          </ul>
          <t>If there is only a single part its <tt>part_index</tt> is 0, and in this case it is optional.</t>
        </section>
        <section anchor="multipart-objects">
          <name>MultiPart objects</name>
          <t>A <tt>MultiPart</tt> object is designed to carry multiple items, as with the MultiPart structure in MIMI content or the top level multipart media types. It contains the following fields.</t>
          <ul spacing="normal">
            <li>
              <t><tt>part_semantics</tt> is one of "chooseOne", "singleUnit", or "processAll". It is mandatory.</t>
            </li>
            <li>
              <t><tt>parts</tt> is an array of <tt>Part</tt>s. It is mandatory in a <tt>MultiPart</tt> object.</t>
            </li>
          </ul>
        </section>
        <section anchor="part-objects">
          <name>Part objects</name>
          <t>The following fields can be in a Part object. They have the same meaning as their MIMI content counterparts.</t>
          <ul spacing="normal">
            <li>
              <t><tt>disposition</tt> optional if set to the default value ("render")</t>
            </li>
            <li>
              <t><tt>language</tt> - optional if absent</t>
            </li>
            <li>
              <t><tt>part_index</tt> is an unsigned integer. It is mandatory in a <tt>Part</tt> object.</t>
            </li>
            <li>
              <t><tt>cardinality</tt> is one of "nullpart", "single", "external", or "multi". mandatory.</t>
            </li>
          </ul>
          <t>If cardinality is "single" or "external", then <tt>body</tt>, <tt>encoding</tt>, and <tt>mediatype</tt> fields are included directly in the Part object.</t>
        </section>
        <section anchor="externalpart-objects">
          <name>ExternalPart objects</name>
          <t>The <tt>ExternalPart</tt> object can contain the following fields with similar meanings to those in MIMI content, with exceptions noted below.</t>
          <ul spacing="normal">
            <li>
              <t><tt>mediatype</tt> is the value of the <tt>contentType</tt> in MIMI. It is mandatory if present in the MIMI message and recommended otherwise.</t>
            </li>
            <li>
              <t><tt>url</tt> is the URL of the content as a text string. It is mandatory</t>
            </li>
            <li>
              <t><tt>expires</tt> is a date_type (text) date. It is optional if not present.</t>
            </li>
            <li>
              <t><tt>size</tt> is an integer number of octets. It is optional if not present.</t>
            </li>
            <li>
              <t><tt>description</tt> is a text string. It is optional if not present.</t>
            </li>
            <li>
              <t><tt>filename</tt> is a text string. It is optional if not present.</t>
            </li>
            <li>
              <t><tt>content_hash</tt> is the base64url encoded string of the MIMI <tt>contentHash</tt> of the ExternalPart, prefixed with the name of the hash algorithm corresponding to <tt>hashAlg</tt> and a colon (for example "sha256:"). <tt>content_hash</tt> is  mandatory if it was included in the MIMI content ExternalPart, and omitted otherwise.</t>
            </li>
          </ul>
          <t>In addition, the following fields are unique to MIMI VCON.</t>
          <ul spacing="normal">
            <li>
              <t><tt>cached</tt> is a boolean. It is mandatory if it is true, which means that a
copy of the external content is available in a vcon attachment object
(see <xref target="attachments"/>). If <tt>cache</tt> is true and no <tt>content_hash</tt> is present, a new content hash is calculated for the attachment and placed the <tt>cache_ref</tt> field (which can only be present in this case).</t>
            </li>
          </ul>
          <t>ExternalPart has several fields for the decryption of the
referenced content.
If it is not necessary to reconstruct the original MIMI content (for example to allow later verification of the message ID), these fields can be omitted once the content has been downloaded, decrypted, verified, and included in the VCON attachments array. Otherwise they are mandatory if present in the MIMI content.
All of these fields are base64url encoded strings.</t>
          <ul spacing="normal">
            <li>
              <t><tt>encAlg</tt></t>
            </li>
            <li>
              <t><tt>key</tt></t>
            </li>
            <li>
              <t><tt>nonce</tt></t>
            </li>
            <li>
              <t><tt>aad</tt></t>
            </li>
          </ul>
        </section>
      </section>
      <section anchor="party-history">
        <name>Changes to the parties</name>
        <t>The <tt>party_history</tt> object can be interleaved with text objects in the dialog objects array. It indicates when changes have been made to the participants represented by party index zero, as well as properties of individual parties (such as their role or name).</t>
        <t>The <tt>party_history</tt> object contains the following fields.</t>
        <ul spacing="normal">
          <li>
            <t><tt>party</tt> is the party index of the modified party. It is mandatory.</t>
          </li>
          <li>
            <t><tt>originator</tt> is the party that originated the change. It is optional.</t>
          </li>
          <li>
            <t><tt>time</tt> is the time that the change was effected</t>
          </li>
          <li>
            <t><tt>event</tt> is the type of change. It is mandatory and for MIMI VCONs can be one of the following new event types:
            </t>
            <ul spacing="normal">
              <li>
                <t><tt>add</tt>: user added by someone else</t>
              </li>
              <li>
                <t><tt>self_add</tt>: user added herself directly</t>
              </li>
              <li>
                <t><tt>leave</tt>: user leaves of their own accord</t>
              </li>
              <li>
                <t><tt>remove</tt>: user is removed by another user</t>
              </li>
              <li>
                <t><tt>ban</tt>: user is banned from the group</t>
              </li>
              <li>
                <t><tt>update</tt>:</t>
              </li>
            </ul>
          </li>
          <li>
            <t><tt>name</tt> is the new name of the user. It is only permitted for an update event.</t>
          </li>
          <li>
            <t><tt>role</tt> is the new role assigned to the user. It is only permitted for an update event.</t>
          </li>
        </ul>
      </section>
      <section anchor="changes-to-the-room">
        <name>Changes to the room</name>
        <t>Changes to the room metadata should be accompanied by a new <tt>room</tt> dialog type.
The <tt>room</tt> dialog type can contain anything in the top-level <tt>room</tt> object except for the <tt>id</tt> (which cannot change).
It must contain a <tt>time</tt> field to convey the time of the change, and may contain an <tt>originator</tt> field to convey who made that change.</t>
      </section>
      <section anchor="attachments">
        <name>Attachments</name>
        <t>An attachment consists of the following fields:</t>
        <ul spacing="normal">
          <li>
            <t><tt>start</tt>: is the time when the attachment was downloaded. It is mandatory.</t>
          </li>
          <li>
            <t><tt>party</tt>: is the party that downloaded the attachment. It is mandatory.</t>
          </li>
          <li>
            <t><tt>content_hash</tt>: is the base64url encoded hash using the hash name prefixed with a colon before the hash (ex: "sha256:"). It is mandatory.</t>
          </li>
          <li>
            <t><tt>dialog_object_ref</tt> is a string consisting of: "mid:" (representing the message ID URI), the message_id of the message in the dialog object, a colon, the part_index of the Part (or "0" if the ExternalPart is at the top level), and the string "@anon.invalid"</t>
          </li>
        </ul>
        <t>The <tt>mediatype</tt>, <tt>filename</tt>, <tt>encoding</tt>, and <tt>body</tt> fields are as they are defined in VCON and are all mandatory.</t>
      </section>
      <section anchor="message-tombstones">
        <name>Message tombstones</name>
        <t>When a message has been deleted/retracted, or it expires, it can be valuable to present a record that such a message was previously present, by generating a dialog object with the following fields (which are all mandatory):</t>
        <ul spacing="normal">
          <li>
            <t><tt>type</tt> is "tombstone"</t>
          </li>
          <li>
            <t><tt>start</tt> is the time the tombstone was generated</t>
          </li>
          <li>
            <t><tt>message_id</tt> is the message ID of the message.</t>
          </li>
          <li>
            <t><tt>status</tt> is the status of the former message, either "retracted" or "expired".</t>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="examples">
      <name>Examples</name>
      <section anchor="mimi-examples-as-a-vcon">
        <name>MIMI examples as a VCON</name>
        <t>The example vcon consists of the example messages from Section 5 of the MIMI content specification plus a <tt>party_history</tt> object adding two new participants, and a single multipart message at the end.</t>
        <artwork><![CDATA[
{
  "vcon": "0.0.1",
  "room": {
    "id": "mimi://example.com/r/engineering_team",
    "name": "Engineering Team",
    "avatar": "https://example.com/images/tHMqLMAkmCzNmweL",
    "subject": None,
    "mood": None,
    "description": [
        {"type":"", "lang":"en", "content":"Engineering Team Internal Chat"},
        {  "type":"",
          "lang":"fr",
          "content":"Chat de l'équipe interne des ingénieurs"
        }
    ]
  }
  "parties": [
    {
      "imUri": "mimi://example.com/r/engineering_team",
    },
    {
      "im_uri": "mimi://example.com/u/alice-smith",
      "name": "Alice Smith",
      "role": "moderator",
      "thumbprint": "TODOFIXDZXCog_FfQp-xLemZkD5GKB9H7Z-Y41O4jEw"
    },
    {
      "im_uri": "mimi://example.com/u/bob-jones",
      "name": "Bob Jones",
      "role": "member",
      "thumbprint": "TODOFIXYUFE7bV9pXAHZHi5bwSWzLJqjncevs9aLKDg"
    },
    {
      "im_uri": "mimi://example.com/u/cathy-washington",
      "name": "Cathy Washington",
      "role": "member",
      "thumbprint": "TODOFIXzH3EeOGbI0-oiDGTXlgKmkMzQyQ2W_Y-TB1U"
    },
    {
      "im_uri": "mimi://example.com/u/doug-king",
      "name": "Doug King",
      "role": "member",
      "thumbprint": "TODOFIX3fdpORnHwncbdOS5XieH-z1m5r61u14WyNkj"
    },
    {
      "im_uri": "mimi://example.com/u/liz-roberts",
      "name": "Elizabeth Roberts",
      "role": "member",
      "thumbprint": "TODOFIX7qR7oFriyKfKgIJ43ZdANoObICqH0kN9g82J"
    }
  ],
  "dialog": [
    {
      "type": "text",
      "start": "2022-02-08T22:13:45.019-00:00",
      "duration": 0,
      "parties": [
        1, 2, 3
      ],
      "franking_tag": null,
      "frank": null,
      "originator": 1,
      "salt": "PC16IkqDbGRiffzjeyPKIg"
      "message_id": "yjetjodyYNLBto8YDnwLkEc89W09rOuEivbnxKGfHLQ",
      "mimi_extensions": "oQGiAXgrbWltaTovL2h1Yi5leGFtcGxlL3IvU
          mwzM0ZXTENZV093eEhyWW5wV0RRZwJ4GG1pbWk6Ly9iLmV4YW1wbG
          UvdS9hbGljZQ",
      "mimetype": "text/markdown;variant=GFM",
      "encoding": "none"
      "body":
        "Hi everyone, we just shipped release 2.0. __Good work__!",
    },

    {
      "type": "text",
      "start": "2022-02-08T22:13:57.492-00:00",
      "duration": 0,
      "parties": [
        0
      ],
      "originator": 2,
      "salt": "PVeWNQrjJej4AjhqkGlSkw"
      "message_id": "Ygye96VUeBhTO6U3D0ZllYsSwSdKB3SiRJgxAb3cdAo",
      "in_reply_to": "yjetjodyYNLBto8YDnwLkEc89W09rOuEivbnxKGfHLQ",
      "mimetype": "text/markdown;variant=GFM",
      "encoding": "none"
      "body": "Right on! _Congratulations_ \'all!",
    },

    {
      "type": "text",
      "start": "2022-02-08T22:13:57.728-00:00",
      "duration": 0,
      "parties": [
        0
      ],
      "originator": 3,
      "salt": "lV7CoeiFmX4ALPSKOdrR0w"
      "message_id": "2YF0k6blW9ZbJ8sgXJgMCTJOlofazdKwVRvf6ZUORFA",
      "in_reply_to": "yjetjodyYNLBto8YDnwLkEc89W09rOuEivbnxKGfHLQ",
      "disposition": "reaction",
      "mimetype": "text/plain;charset=utf-8",
      "encoding": "none"
      "body": "❤",
    },

    {
      "type": "text",
      "start": "2022-02-08T22:14:03.008-00:00",
      "duration": 0,
      "parties": [
        0
      ],
      "originator": 3,
      "salt": "pkL5Tr0pLla5EiLUOfVDJw"
      "message_id": "rF4iS5BcJ-aFfisoFDCrnTE9pZZBGCxGCoXGJ9VXnck",
      "mimetype": "text/markdown;variant=GFM",
      "encoding": "none"
      "body":
        "Kudos to [@Alice Smith](mimi://example.com/alice-smith) for
making the release happen!",
    },

    {
      "type": "text",
      "start": "2022-02-08T22:14:08.621-00:00",
      "duration": 0,
      "parties": [
        0
      ],
      "originator": 2,
      "salt": "26QI8adeG9TDfPvh-j1Stg"
      "message_id": "-GqJXuoaJu1Xosu-N8nt6NWzA2RLmIRY0q9jf_kvWkM",
      "replaces": "Ygye96VUeBhTO6U3D0ZllYsSwSdKB3SiRJgxAb3cdAo",
      "in_reply_to": "yjetjodyYNLBto8YDnwLkEc89W09rOuEivbnxKGfHLQ",
      "mimetype": "text/markdown;variant=GFM",
      "encoding": "none"
      "body": "Right on! _Congratulations_ y'all"
    },

    {
      "type": "text",
      "start": "2022-02-08T22:14:08.621-00:00",
      "duration": 0,
      "parties": [
        0
      ],
      "originator": 2,
      "salt": "HbkjCnTRrhn84LPT86VvYg"
      "message_id": "8cqo1B9IA6nnB63oPEnmWxIqr7uk7WvQTBgVVlD_Q2c",
      "replaces": "Ygye96VUeBhTO6U3D0ZllYsSwSdKB3SiRJgxAb3cdAo",
      "in_reply_to": "yjetjodyYNLBto8YDnwLkEc89W09rOuEivbnxKGfHLQ"
    },
    {
      "party_history": [
        {
          "party": 4,
          "event": "add",
          "originator": 1,
          "time": "2022-02-08T22:14:09.277-00:00"
        },
        {
          "party": 5,
          "event": "add",
          "originator": 1,
          "time": "2022-02-08T22:14:09.277-00:00"
        }
      ]
    },
    {
      "type": "text",
      "start": "2022-02-08T22:14:10.389-00:00",
      "duration": 0,
      "parties": [
        0
      ],
      "originator": 3,
      "salt": "IrAeojgZcZGiQjjBbmqVhw"
      "message_id": "bYZ2NHaryq0WS2pq5IE9fMc4zltUyE6WrKJ7bNB5tMc",
      "replaces": "Ygye96VUeBhTO6U3D0ZllYsSwSdKB3SiRJgxAb3cdAo",
      "in_reply_to": "yjetjodyYNLBto8YDnwLkEc89W09rOuEivbnxKGfHLQ",
      "disposition": "reaction"
    },

    {
      "type": "text",
      "start": "2022-02-08T22:49:06.227-00:00",
      "duration": 0,
      "parties": [
        0
      ],
      "originator": 1,
      "salt": "8xnQi9hjVw4N8cRGEm4X1A"
      "message_id": "GkblzkXJxyar0lTgkfcMQ0wo8qpbcU0MqtTg-gM1FiY",
      "expiring": {
        "relative": false,
        "expires": "2022-02-08T22:59:06.227-00:00"
      },
      "status": "expired"
    },

    {
      "type": "text",
      "start": "2022-02-08T22:53:41.134-00:00",
      "duration": 0,
      "parties": [
        0
      ],
      "originator": 2,
      "salt": "bqhJBqYaTyDmgTj-QtdZPA"
      "message_id": "Tdt8UCUl1ugSLRmuObvib_4bvu_Hz3NSwaYuy-TtET4",
      "disposition": "attachment",
      "language": "en",
      "ExternalPart": {
        "mimetype": "video/mp4",
        "url": "https://example.com/storage/8ksB4bSrrRE.mp4",
        "size": 708234961,
        "description": "2 hours of key signing video",
        "filename": "bigfile.mp4",
        "content_hash":
            "sha256:OczZYpW_L0B1DsMSLJqL2jTRJKoj7fTUJ2jhnX70-00",
        "enc_alg": 1,
        "key": "aZISOs306M7n_3csR-J1cw",
        "nonce": "5VM0QcZI3PNmnquV6CUgxg",
        "aad": ""
      }
    },

    {
      "type": "text",
      "start": "2022-02-08T22:54:09.972-00:00",
      "duration": 0,
      "parties": [
        0
      ],
      "originator": 3,
      "salt": "dPEJAGOdZGeX6_OCp0RUzA"
      "message_id": "KgDTc29ZP4YyYmXtaYyxpZNrnigjvCjrCYuLTz19zWc",
      "disposition": "session",
      "ExternalPart": {
        "url": "https://example.com/join/12345",
        "description": "Join the Foo 118 conference"
      }
    },
    {
      "type": "text",
      "start": "2022-02-08T22:57:14.084-00:00",
      "duration": 0,
      "parties": [
        0
      ],
      "originator": 1,
      "salt": "YSbs-8jeoXfI6Z4lQRUWQw"
      "message_id": "sD19bKRmu4mA9SHznfQOLQQzKnx1Q4mEtSNQhvzqCZw",
      "disposition": "render",
      "part_index": 0,
      "MultiPart": {
        "part_semantics": "chooseOne",
        "parts": [
          "Part": {
            "disposition": "render",
            "language": "en",
            "part_index": 1,
            "mimetype": "text/markdown;variant=GFM",
            "encoding": "none"
            "body": "Hello!"
          },
          "Part": {
            "disposition": "render",
            "language": "fr",
            "part_index": 2,
            "mimetype": "text/markdown;variant=GFM",
            "encoding": "none"
            "body": "Bonjour!"
          }
        ]
      }
    },
  ]
}
]]></artwork>
      </section>
      <section anchor="mimi-vcon-with-an-attachment">
        <name>MIMI VCON with an Attachment</name>
        <t>This example vcon consists of a single message in a dialog which references
an attachment.</t>
        <artwork><![CDATA[
{
  "vcon": "0.0.1",
  "room": {
    "id": "mimi://example.com/r/engineering_team",
    "name": "Engineering Team",
  }
  "parties": [
    {
      "imUri": "mimi://example.com/r/engineering_team",
    },
    {
      "im_uri": "mimi://example.com/u/alice-smith",
      "name": "Alice Smith",
      "role": "moderator",
      "thumbprint": "TODOFIXDZXCog_FfQp-xLemZkD5GKB9H7Z-Y41O4jEw"
    },
    {
      "im_uri": "mimi://example.com/u/bob-jones",
      "name": "Bob Jones",
      "role": "member",
      "thumbprint": "TODOFIXYUFE7bV9pXAHZHi5bwSWzLJqjncevs9aLKDg"
    },
    {
      "im_uri": "mimi://example.com/u/cathy-washington",
      "name": "Cathy Washington",
      "role": "member",
      "thumbprint": "TODOFIXzH3EeOGbI0-oiDGTXlgKmkMzQyQ2W_Y-TB1U"
    }
  ],
  "dialog": [
    {
      "type": "text",
      "start": "2022-02-08T22:53:41.134-00:00",
      "duration": 0,
      "parties": [
        0, 1, 2, 3
      ],
      "originator": 1,
      "salt": "jaPfwAWReuvBdfayWkSvtQ"
      "message_id": "Tdt8UCUl1ugSLRmuObvib_4bvu_Hz3NSwaYuy-TtET4",
      "disposition": "attachment",
      "language": "en",
      "ExternalPart": {
        "mimetype": "video/mp4",
        "url": "https://example.com/storage/8ksB4bSrrRE.mp4",
        "size": 708234961,
        "description": "2 hours of key signing video",
        "filename": "bigfile.mp4",
        "content_hash":
            "sha256:OczZYpW_L0B1DsMSLJqL2jTRJKoj7fTUJ2jhnX70-00",
        "cached": true
      }
    },
  ],
  "attachments": [
    {
      "start": "2022-02-08T22:53:41.134-00:00",
      "party": 1,
      "content_hash":
          "sha256:OczZYpW_L0B1DsMSLJqL2jTRJKoj7fTUJ2jhnX70-00",
      "dialogObjectRef":
  "mid:Tdt8UCUl1ugSLRmuObvib_4bvu_Hz3NSwaYuy-TtET4:0@anon.invalid",
      "mimetype": "video/mp4",
      "filename": "bigfile.mp4",
      "encoding": "base64url",
      "body": "Ma0hHSr0f_iUk_RSShTgtY...nSQbZEip5danJYQqsvwWQ"
    }
  ]
}
]]></artwork>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>TODO Security</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document has no IANA actions.</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-normative-references">
      <name>Normative References</name>
      <reference anchor="I-D.ietf-vcon-vcon-container">
        <front>
          <title>The JSON format for vCon - Conversation Data Container</title>
          <author fullname="Daniel Petrie" initials="D." surname="Petrie">
            <organization>SIPez LLC</organization>
          </author>
          <author fullname="Thomas McCarthy-Howe" initials="T." surname="McCarthy-Howe">
            <organization>Strolid</organization>
          </author>
          <date day="20" month="October" year="2024"/>
          <abstract>
            <t>   A vCon is the container for data and information relating to a real-
   time, human conversation.  It is analogous to a [vCard] which enables
   the definition, interchange and storage of an individual's various
   points of contact.  The data contained in a vCon may be derived from
   any multimedia session, traditional phone call, video conference, SMS
   or MMS message exchange, webchat or email thread.  The data in the
   container relating to the conversation may include Call Detail
   Records (CDR), call meta data, participant identity information (e.g.
   STIR PASSporT), the actual conversational data exchanged (e.g. audio,
   video, text), realtime or post conversational analysis and
   attachments of files exchanged during the conversation.  A
   standardized conversation container enables many applications,
   establishes a common method of storage and interchange, and supports
   identity, privacy and security efforts (see [vCon-white-paper])

            </t>
          </abstract>
        </front>
        <seriesInfo name="Internet-Draft" value="draft-ietf-vcon-vcon-container-01"/>
      </reference>
      <reference anchor="I-D.ietf-mimi-content">
        <front>
          <title>More Instant Messaging Interoperability (MIMI) message content</title>
          <author fullname="Rohan Mahy" initials="R." surname="Mahy">
            <organization>Rohan Mahy Consulting Services</organization>
          </author>
          <date day="20" month="December" year="2024"/>
          <abstract>
            <t>   This document describes content semantics common in Instant Messaging
   (IM) systems and describes a profile suitable for instant messaging
   interoperability of messages end-to-end encrypted inside the MLS
   (Message Layer Security) Protocol.

            </t>
          </abstract>
        </front>
        <seriesInfo name="Internet-Draft" value="draft-ietf-mimi-content-05"/>
      </reference>
      <reference anchor="RFC2119" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml">
        <front>
          <title>Key words for use in RFCs to Indicate Requirement Levels</title>
          <author fullname="S. Bradner" initials="S." surname="Bradner"/>
          <date month="March" year="1997"/>
          <abstract>
            <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
          </abstract>
        </front>
        <seriesInfo name="BCP" value="14"/>
        <seriesInfo name="RFC" value="2119"/>
        <seriesInfo name="DOI" value="10.17487/RFC2119"/>
      </reference>
      <reference anchor="RFC8174" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml">
        <front>
          <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
          <author fullname="B. Leiba" initials="B." surname="Leiba"/>
          <date month="May" year="2017"/>
          <abstract>
            <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
          </abstract>
        </front>
        <seriesInfo name="BCP" value="14"/>
        <seriesInfo name="RFC" value="8174"/>
        <seriesInfo name="DOI" value="10.17487/RFC8174"/>
      </reference>
      <reference anchor="RFC9420" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9420.xml">
        <front>
          <title>The Messaging Layer Security (MLS) Protocol</title>
          <author fullname="R. Barnes" initials="R." surname="Barnes"/>
          <author fullname="B. Beurdouche" initials="B." surname="Beurdouche"/>
          <author fullname="R. Robert" initials="R." surname="Robert"/>
          <author fullname="J. Millican" initials="J." surname="Millican"/>
          <author fullname="E. Omara" initials="E." surname="Omara"/>
          <author fullname="K. Cohn-Gordon" initials="K." surname="Cohn-Gordon"/>
          <date month="July" year="2023"/>
          <abstract>
            <t>Messaging applications are increasingly making use of end-to-end security mechanisms to ensure that messages are only accessible to the communicating endpoints, and not to any servers involved in delivering messages. Establishing keys to provide such protections is challenging for group chat settings, in which more than two clients need to agree on a key but may not be online at the same time. In this document, we specify a key establishment protocol that provides efficient asynchronous group key establishment with forward secrecy (FS) and post-compromise security (PCS) for groups in size ranging from two to thousands.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="9420"/>
        <seriesInfo name="DOI" value="10.17487/RFC9420"/>
      </reference>
      <reference anchor="I-D.ietf-mimi-protocol">
        <front>
          <title>More Instant Messaging Interoperability (MIMI) using HTTPS and MLS</title>
          <author fullname="Richard Barnes" initials="R." surname="Barnes">
            <organization>Cisco</organization>
          </author>
          <author fullname="Matthew Hodgson" initials="M." surname="Hodgson">
            <organization>The Matrix.org Foundation C.I.C.</organization>
          </author>
          <author fullname="Konrad Kohbrok" initials="K." surname="Kohbrok">
            <organization>Phoenix R&amp;D</organization>
          </author>
          <author fullname="Rohan Mahy" initials="R." surname="Mahy">
            <organization>Unaffiliated</organization>
          </author>
          <author fullname="Travis Ralston" initials="T." surname="Ralston">
            <organization>The Matrix.org Foundation C.I.C.</organization>
          </author>
          <author fullname="Raphael Robert" initials="R." surname="Robert">
            <organization>Phoenix R&amp;D</organization>
          </author>
          <date day="21" month="October" year="2024"/>
          <abstract>
            <t>   This document specifies the More Instant Messaging Interoperability
   (MIMI) transport protocol, which allows users of different messaging
   providers to interoperate in group chats (rooms), including to send
   and receive messages, share room policy, and add participants to and
   remove participants from rooms.  MIMI describes messages between
   providers, leaving most aspects of the provider-internal client-
   server communication up to the provider.  MIMI integrates the
   Messaging Layer Security (MLS) protocol to provide end-to-end
   security assurances, including authentication of protocol
   participants, confidentiality of messages exchanged within a room,
   and agreement on the state of the room.

            </t>
          </abstract>
        </front>
        <seriesInfo name="Internet-Draft" value="draft-ietf-mimi-protocol-02"/>
      </reference>
      <reference anchor="I-D.mahy-mimi-app-components">
        <front>
          <title>Application State Components for More Instant Messaging Interoperability (MIMI)</title>
          <author fullname="Rohan Mahy" initials="R." surname="Mahy">
            <organization>Rohan Mahy Consulting Service</organization>
          </author>
          <date day="11" month="February" year="2025"/>
          <abstract>
            <t>   This document presents structures for room metadata, participant
   lists, pre-authorized roles for future participants, and role-based
   access control, all of which are intended for use in MIMI (More
   Instant Messaging Interoperability).

            </t>
          </abstract>
        </front>
        <seriesInfo name="Internet-Draft" value="draft-mahy-mimi-app-components-01"/>
      </reference>
      <reference anchor="RFC5646" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5646.xml">
        <front>
          <title>Tags for Identifying Languages</title>
          <author fullname="A. Phillips" initials="A." role="editor" surname="Phillips"/>
          <author fullname="M. Davis" initials="M." role="editor" surname="Davis"/>
          <date month="September" year="2009"/>
          <abstract>
            <t>This document describes the structure, content, construction, and semantics of language tags for use in cases where it is desirable to indicate the language used in an information object. It also describes how to register values for use in language tags and the creation of user-defined extensions for private interchange. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
          </abstract>
        </front>
        <seriesInfo name="BCP" value="47"/>
        <seriesInfo name="RFC" value="5646"/>
        <seriesInfo name="DOI" value="10.17487/RFC5646"/>
      </reference>
    </references>
    <?line 635?>

<section anchor="cddl-changes">
      <name>CDDL changes</name>
      <t><strong>TODO</strong></t>
    </section>
    <section anchor="change-list">
      <name>Change list</name>
      <section anchor="changes-in-draft-mahy-vcon-mimi-messages-02">
        <name>Changes in draft-mahy-vcon-mimi-messages-02</name>
        <ul spacing="normal">
          <li>
            <t>adjust to make consistent with new syntax of MIMI content (add salt, removed lastSeen, in_reply_to is just a message id, expires is an object to handle relative expiration, added mimi_extensions).</t>
          </li>
          <li>
            <t>use a different field from content_hash when attaching an ExternalPart that did not have a hash in the MIMI message.</t>
          </li>
          <li>
            <t>allow the parties list of 0 to indicate sending to every active participant in the room.</t>
          </li>
          <li>
            <t>added a description of using party_history to track changes to the participant list.</t>
          </li>
          <li>
            <t>added room metadata, and a way to modify it</t>
          </li>
          <li>
            <t>added support for message "tombstones"</t>
          </li>
          <li>
            <t>use mediatype instead of mimetype throughout</t>
          </li>
          <li>
            <t>make the case of field names more consistent</t>
          </li>
        </ul>
      </section>
    </section>
    <section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>TODO acknowledge.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
W89m7cq77tUPX86K46vqYK98LqiHf9+Th+YBfNnyuSsSFXFyWorHeLtcLJfz
Rfi71y6X90tb+5XtQrFUzReL+8Vi0j4ugIMuRXlz0dvgn1JOLefULXH9XrZN
H45DBzx+yT5bvJnsKOBJKSFct4num8PSTn38ctQ7bVr9/tuIzW8u6oPYMWoJ
esDG8xELR4Dsnq4aB6G393TkzhrjY2Ov+lCs+tfRsTXtua8Xp/2zxm2y5IVy
BBzHuz21ao8Dv/dgh3rbmzbKw9KTtW2z05PQOH21G1v16V3Ktzuzt8vi82P7
+Or5vljdYsfD+cPD9uy+2Gw+z84rp6elSe9hvNOYV62Gc195eijNeqep/ndT
s1Ud9k7t0XOWMJaW6qaj+2Pco/xhqvsWxP0/nZ5cJs1jiIvNXcJj4gFiXW1f
TqedWbgD9ucYMPFwfoS7RPAdkwmvJ2J4BFwGTKB2OqcQXPHlyHGn80MSLX6d
5m3vFirV8jdrXnFJ5zIqVF5WoXv2cHXrj87ZqFIbDV/Gp3ZrPFujQk+DOavu
3N+xg2H7eudu66j4bNtPQWvWMi8OtlpW83zwWuttGWbNS2hP1dz8GjX8jtJW
taY1GIaq5/6gdg49dwDMxVQ7anhH/ZefANN/T3nulvd+K3luLcnTvt899Jh1
4jxWao2b1sW16TeL6+RZfjopjnd69kP1uXe+FwwezweXh+3za9vr62/mxey+
Oe3vPN9dN09q31eeqdNzHIPXRqVj85LAsy9jRGE/v/cV8v7Pf/337yPQyn5x
q1As/o4CnYwb222/OGnY+vax1bi77t8fna8TqH9SsVrbB8Z5Xj/pW4F3cnTo
u+3j6uT5+eD08PX00Hs8Pa/eP7rG+Ld3pReR6VGe8K+/pIDv+3crIEUKNW/g
NlVx9LF8e0k43SG+h+1+J8MEOe4Vdsql38/Rlndu63u6yU6r7aP+zXSYH5Va
4bpYnT99OX+MPP08Kj16QZS/2nPDnauHt1q52XDqzafiS3XU74ynD+OUYOJK
4P83nnqOnlr736kOZ73x6NBtN/2hu1dp3LT3du6nT+vUYc948UoH1Xptx3UP
dra8m2PXeXitv/i70Xj3YXrbPhjc39tHnduy8T9DHVZuKjKZm2zuIQX3eDN4
XMkkCOhYAsnQTTObOliNkbkSWHxLsiztaqG8uyukLXuk8xerKNr+/SmK1Wol
Q79Wx0vFwtbet+9qvjp01f0a80aDZ+P51LodjQ56zsv9cF3o6j09l6/OdH/+
UnxolScv2/Xjav/SqLzZ4d38eOfBvzjf7V0dbIeX/0N0/LNg5js4pkp1v7hT
KJd3fyuhLe8p917dW6s6HN3PKld7RvP02Kk8lmprhHY67tlv48fz17nuF+32
YNw3Lm+LM2/vZdIz7oqXL2F7kB9clk6sp5TPx/wy9/mJmWlxIT/cpTL+xGxE
QjpYZs/2AntEl49ptoYRdYyT2t9BKNtb+5VSobRV+f2iRe9leH7w8qS350fO
oD3K34bm8806obTNcO/u8M4uRYNWo+lE172p1etUetOoc/a2ddWa6U/RPN8O
j9uVtUqcHO8lTeKSVWJnCqunz6eyMk2DgallMm/TmVRSvlKLfFtbk+3GKAGT
be6Ng4NKr+X7zePCQm8sJoTuu8W98lalupPytAtZbq2sDr3Ip9MIfEcVj8YR
XhJN6RHjUzHiuTXAy8VJ0webKbTLCeLnkNfG2/PT5KHTKB6UjoLLVuP8pVEe
tZvnF95ot9++Oy+Phu7jbjGfUh6OhTq6PcjGDA3oJYE811vXwVZx53LX7WwZ
QTN/XjJm6e5U8YNNt+8vi7fGc33r5spxX6L7ncO7wesg3VTXSVGkvXwPo6AQ
Vt39zVIXy+HFvDk+r51em8+n7HGnc304KTbv3tYZxcXgqG2Uq883laf5k/MY
6k/z18nzle9ag9H0cOQfPkWN9lup+vZgrDWKgNGXAL9E8z+h2CPPcjdLoLHb
2nqFPffE8fGJ56ml0h5964jX2i1J7VcIbRdgQaG495t5suXw8tTqBfm9EfMe
+/Wd54p927x7uF2HCYKjUrV3AS6s4tSqrbM3t3973bi9fbtwX0u3Fec4bF3d
DqdvL4fPs0+EYyq6z6yCn7lnFidfM8jKMfsyBI6Xegci2yzLGLi5NNoXkCca
rXG1q5ZQWnj4dRsw0WndNkw8jjdjZ8y2vR/SDz/mfoMV95eeZlZc/h1XfOC5
I4gc2TXL3++XTfG98pHOkOVxufwyDpYIJbU+4kMRaw/Nk/PqpJxEFijw8gNZ
fRsoerps6L/1FPufJ7D/PIFdIP33P4FVvut54HfA+7m1R4KfCZcj/aY/qz00
WTQ9MPv6/GHcmoa3/wT+/6eAP3+1RRNfguY30yGFVDn1qsGyPn+t5sYZrUTh
1q7u16xN2N81FSY1WZ8GpvrKr1DV/WK2mnFlqnlZyT4r0gwEkIWpyeMYAlzq
xeFZyy/2O9bduNNstYbtQfhUKBTc1m3v+diabJu6e/50+xJMZw+3KQ8kkUDy
uU/8DrRFQUZ8YRdcm3yq0DeQa1e15WaZb0phzaTr8ZY81RTE31Lu6caYPut7
dNSI36tQlJ9/xnl+/pme8Hp//EJOpsYb4MVnP4au5FXdpAPxEIuZxyxGLFRd
jBAHa+/EN6TjzxTL93p006SvpORkVb2tB2GL4Xd2U2k4LF2kOZLyTcvMxWWg
4tVBUfUHrYF802bJlz6Sr03kxJsBCyUMG1gnie/MI5rqE4IKRbU21SSmDUF8
Boksj39ROluMywujLZPedaLXV3Tx/tbyO5o4LX+XKf3yTfyloiKuJX4vhr6S
JF7no2KEFZ/HSX+9iIamteqLH3zjldWZzLv4prQxli/eLL9pQ3Qlw2aK/ON6
SvF5anqPZa5aoWwdRBP8YiTV4cciTCphA03wX5Yj0xes8HssQG9s00CQ70UD
cN44LukaVd/jQSA04/Lin8Z0sCA8UUSyopqBX260mTngdfUf9vlLpsz8k0bZ
Re2jMD5dtgQJ/RfHXdLCZGAAAA==

-->

</rfc>
