This commit is contained in:
epoberezkin committed 2026-10-10 16:51:32 +00:00
1 parent 1fa31f2b43
commit a80a34cdc6
5 files changed
+11 -8

No files matched your search

+3 -3
View File
@@ -918,13 +918,13 @@ window.addEventListener('click',(e)=>{
<p>When a relay receives an invitation to serve a channel, it validates the channel and creates its own relay link. This flow is currently part of channel creation; adding relays to an existing channel is planned but not yet implemented.</p>
<ol>
<li>
<p>Owner sends <code>x.grp.relay.inv</code> to the relay's contact address. This message includes the relay's member ID and role, the owner's profile, and the channel's short link.</p>
<p>Owner sends <code>x.grp.relay.inv</code> to the relay's contact address. This message includes the relay's member ID and role, the owner's profile, the channel's short link, the channel's public group ID, and the owner's member key. The message is signed with the owner's member key over the public group ID and the owner's member ID.</p>
</li>
<li>
<p>Relay receives the invitation and creates a relay request record. A relay request worker processes it asynchronously.</p>
<p>Relay receives the invitation and creates a relay request record. From chat protocol version 22 of the owner, an invitation without a valid signature is ignored. The owner's badge is verified under the public group ID, the owner's member ID and the owner's member key from a signed invitation. A relay request worker processes it asynchronously.</p>
</li>
<li>
<p>The worker retrieves the channel's link data from the SMP server, extracts and validates the channel profile and owner authorization.</p>
<p>The worker retrieves the channel's link data from the SMP server, extracts and validates the channel profile and owner authorization. The request fails when the link's entity ID differs from the public group ID in the invitation, or when the owner's key in the link data differs from the owner's member key in the invitation.</p>
</li>
<li>
<p>The relay creates its own contact address link (the relay link) with the channel's entity ID in the immutable fixed data.</p>
+3 -3
View File
@@ -44,11 +44,11 @@ Creating a channel involves generating cryptographic material, creating the chan
When a relay receives an invitation to serve a channel, it validates the channel and creates its own relay link. This flow is currently part of channel creation; adding relays to an existing channel is planned but not yet implemented.
1. Owner sends `x.grp.relay.inv` to the relay's contact address. This message includes the relay's member ID and role, the owner's profile, and the channel's short link.
1. Owner sends `x.grp.relay.inv` to the relay's contact address. This message includes the relay's member ID and role, the owner's profile, the channel's short link, the channel's public group ID, and the owner's member key. The message is signed with the owner's member key over the public group ID and the owner's member ID.
2. Relay receives the invitation and creates a relay request record. A relay request worker processes it asynchronously.
2. Relay receives the invitation and creates a relay request record. From chat protocol version 22 of the owner, an invitation without a valid signature is ignored. The owner's badge is verified under the public group ID, the owner's member ID and the owner's member key from a signed invitation. A relay request worker processes it asynchronously.
3. The worker retrieves the channel's link data from the SMP server, extracts and validates the channel profile and owner authorization.
3. The worker retrieves the channel's link data from the SMP server, extracts and validates the channel profile and owner authorization. The request fails when the link's entity ID differs from the public group ID in the invitation, or when the owner's key in the link data differs from the owner's member key in the invitation.
4. The relay creates its own contact address link (the relay link) with the channel's entity ID in the immutable fixed data.
+1 -1
View File
@@ -1019,7 +1019,7 @@ eventWord = 1* ALPHA
<p>Currently members can have one of four roles - <code>owner</code>, <code>admin</code>, <code>member</code> and <code>observer</code>. The user that created the group is self-assigned owner role, the new members are assigned role by the member who adds them - only <code>owner</code> and <code>admin</code> members can add new members; only <code>owner</code> members can add members with <code>owner</code> role. <code>Observer</code> members only receive messages and aren't allowed to send messages.</p>
<h3 id="messages-to-manage-groups-and-add-members" tabindex="-1">Messages to manage groups and add members</h3>
<p><code>x.grp.inv</code> message is sent to invite contact to the group via contact's direct connection and includes group member connection address. This message MUST only be sent by members with <code>admin</code> or <code>owner</code> role. Optional <code>groupLinkId</code> is included when this message is sent to contacts connected via the user's group link. This identifier is a random byte sequence, with no global or even local uniqueness - it is only used for the user's invitations to a given group to provide confirmation to the contact that the group invitation is for the same group the contact was connecting to via the group link, so that the invitation can be automatically accepted by the contact - the contact compares it with the group link id contained in the group link uri's data field.</p>
<p><code>x.grp.acpt</code> message is sent as part of group member connection handshake, only to the inviting user.</p>
<p><code>x.grp.acpt</code> message is sent as part of group member connection handshake, only to the inviting user. It optionally includes the invited member's group profile. The inviting user replies with <code>x.grp.mem.info</code> that includes the inviting member's group profile.</p>
<p><code>x.grp.link.inv</code> message is sent as part of connection handshake to member joining via group link, and contains group profile and initial information about inviting and joining member.</p>
<p><code>x.grp.link.mem</code> message is sent as part of connection handshake to member joining via group link, and contains remaining information about inviting member.</p>
<p><code>x.grp.mem.new</code> message is sent by the inviting user to all connected members (and scheduled as pending to all announced but not yet connected members) to announce a new member to the existing members. This message MUST only be sent by members with <code>admin</code> or <code>owner</code> role. Receiving clients MUST ignore this message if it is received from member with <code>member</code> role.</p>
+1 -1
View File
@@ -228,7 +228,7 @@ Currently members can have one of four roles - `owner`, `admin`, `member` and `o
`x.grp.inv` message is sent to invite contact to the group via contact's direct connection and includes group member connection address. This message MUST only be sent by members with `admin` or `owner` role. Optional `groupLinkId` is included when this message is sent to contacts connected via the user's group link. This identifier is a random byte sequence, with no global or even local uniqueness - it is only used for the user's invitations to a given group to provide confirmation to the contact that the group invitation is for the same group the contact was connecting to via the group link, so that the invitation can be automatically accepted by the contact - the contact compares it with the group link id contained in the group link uri's data field.
`x.grp.acpt` message is sent as part of group member connection handshake, only to the inviting user.
`x.grp.acpt` message is sent as part of group member connection handshake, only to the inviting user. It optionally includes the invited member's group profile. The inviting user replies with `x.grp.mem.info` that includes the inviting member's group profile.
`x.grp.link.inv` message is sent as part of connection handshake to member joining via group link, and contains group profile and initial information about inviting and joining member.
+3
View File
@@ -568,6 +568,9 @@
"params": {
"properties": {
"memberId": {"ref": "base64url"}
},
"optionalProperties": {
"profile": {"ref": "profile"}
}
}
}