Meshline
English translationDownload Markdown

The Simplified Chinese text is authoritative.

Group Member and Ban Management Methods

Group hosting protocol · Common method conventions

group.member.leave

A current non-owner member leaves immediately.

Item Convention
HTTP DELETE /meshline/v1/group/member/leave
Session requirement Device session
WSS group.member.leave
HTTP success status 204 No Content

Request Parameters

Field Type Required Semantics and constraints
$type string Yes Fixed as meshline.group.member.leave
group_id string Yes Group the caller leaves
account string Yes Leaving account, matching session and signer-certificate account
prev_hash string Yes Previous administration digest, still current at submission
device_signature string Yes Leaving member's calling device signs the complete request excluding this field

Response Object

None.

Processing and Errors

Check account/session equality and that the account remains a current unbanned non-owner at activation.

Invalid fixed fields/account format returns bad_request; missing group returns not_found; account mismatch, nonmembership, owner status, or ban returns forbidden; concurrency conflict returns state_conflict.

Resubmitting the same request with a valid session returns forbidden because the caller is no longer a member.

Success removes membership, closes all account device intervals, deletes its pending reset, generates a new relay secret, advances one epoch, and appends the leave event. If rotation preparation exists, the same atomic commit MUST remove this member's staged box under group.secret.rotation.prepare, retaining other boxes and original expiry. Voluntary departure does not invalidate preparation. After persistence, send group.timeline.changed; actual deletion of a pending reset additionally requires group.member.recovery.changed under the deletion recipient scope.

Clients verifying leave events MUST confirm that the referenced certificate belongs to account, verify the body signature and prior-state leave permission, then apply departure by that account.

group.member.remove

Owner or administrators remove one or more members. Owners may remove any non-owner; administrators only ordinary members. Neither the calling account nor current owner may be targeted.

Item Convention
HTTP DELETE /meshline/v1/group/member/remove
Session requirement Device session
WSS group.member.remove
HTTP success status 204 No Content

Request Parameters

Field Type Required Semantics and constraints
$type string Yes Fixed as meshline.group.member.removal
group_id string Yes Target members' group
prev_hash string Yes Previous administration digest, still current at submission
accounts array<string> Yes Nonempty, distinct current member accounts to remove
device_signature string Yes Initiating owner/administrator's calling device signs the complete request excluding this field

Response Object

None.

Processing and Errors

Invalid fixed fields, empty batch, or duplicate accounts returns bad_request; missing group returns not_found; insufficient owner/administrator role, caller ban, targeting owner/caller, or administrator targeting an administrator returns forbidden. Any noncurrent target or concurrent membership change returns state_conflict.

Validate all targets first, then atomically remove the entire batch, close target intervals, clean pending resets, generate one relay secret, advance one epoch, and append one event. Existing rotation preparation MUST lose these members' staged boxes in the same commit under group.secret.rotation.prepare, retaining others and original expiry. Removal does not invalidate preparation.

After persistence, send group.timeline.changed; actual pending-reset deletion also sends group.member.recovery.changed under deletion recipient scope.

group.member.ban

Owners may ban any non-owner account; administrators only ordinary members or nonmembers. Bans add targets to the set and prohibit group interfaces and rejoining.

Item Convention
HTTP PUT /meshline/v1/group/member/ban
Session requirement Device session
WSS group.member.ban
HTTP success status 204 No Content

Request Parameters

Field Type Required Semantics and constraints
$type string Yes Fixed as meshline.group.member.ban
group_id string Yes Group in which to ban
prev_hash string Yes Previous administration digest, still current at submission
accounts array<string> Yes Nonempty distinct target IDs; may include current members, nonmembers, and already banned accounts
device_signature string Yes Initiating owner/administrator's calling device signs the complete request excluding this field

Response Object

None.

Processing and Errors

Validation and Ban Count Limits

Invalid fixed values, empty array/accounts, or duplicates returns bad_request; missing group returns not_found; insufficient role, caller ban, targeting owner, or administrator targeting administrator returns forbidden. New bans causing the merged count to exceed the configured cap, or concurrency conflicts, return state_conflict.

Calculate additions and total from current ban state at activation; already banned targets do not count twice. After cap reduction, requests targeting only already banned accounts cannot be rejected solely because the existing total exceeds the new cap, but still require permission, signatures, and current head. Mixed batches with additions exceeding the cap are rejected entirely.

State Changes and Notifications

Validate the whole batch's permissions and cap, then atomically merge bans, delete all targets' pending join applications, remove current members among them, close their device intervals, and clean their pending resets. Application deletion consumes no invitation uses. If any members were removed, generate one relay secret and advance one epoch. In the same commit, existing rotation preparation MUST remove actually removed members' boxes under group.secret.rotation.prepare, preserving others and original expiry. Banning does not invalidate preparation. If no targets are current members, membership, intervals, keys, and staged rotation remain unchanged. Any failed check prevents the entire batch from taking effect.

Each success appends exactly one complete signed meshline.group.member.ban administration event and atomically advances the chain, without extra removal events.

After persistence, send group.timeline.changed; deleted applications additionally trigger group.application.changed; actual pending-reset deletion triggers group.member.recovery.changed under deletion recipient scope.

Clients verify permission from preceding membership, remove target members, and update bans together.

group.member.unban

Owner or administrators lift one or more bans at once.

Item Convention
HTTP DELETE /meshline/v1/group/member/unban
Session requirement Device session
WSS group.member.unban
HTTP success status 204 No Content

Request Parameters

Field Type Required Semantics and constraints
$type string Yes Fixed as meshline.group.member.unban
group_id string Yes Group in which to unban
prev_hash string Yes Previous administration digest, still current at submission
accounts array<string> Yes Nonempty distinct IDs to remove from the ban set; may include currently unbanned accounts
device_signature string Yes Initiating owner/administrator's calling device signs the complete request excluding this field

Response Object

None.

Processing and Errors

Invalid fixed values, empty array/accounts, or duplicates returns bad_request; missing group returns not_found; insufficient role or caller ban returns forbidden; concurrency conflict returns state_conflict.

Atomically remove listed existing bans, append the complete signed request, and advance the chain. Unbanning restores no deleted applications, membership, roles, or closed message/key intervals. Rejoining follows ordinary application/approval. Membership and epoch remain unchanged; clients update bans through the chain.

After persistence, send group.timeline.changed.