Skip to content

message_react_remove

message_react_remove is implemented by handleMessageReactRemove in src/api/handlers/reaction/message_react_remove.osl.

Legacy alias for reaction_remove.

Gate Requirement
Authentication Required by the central API gate.
Central permission None. Resource, channel, ownership, or hierarchy checks may still apply in the handler/helpers.
Broadcast Yes. The transport removes the internal marker and filters recipients by channel visibility.

Every request includes cmd: "message_react_remove" and may include an opaque listener correlation value.

Field Validation / meaning
channel schema.string().defaultValue("")
thread_id schema.string().defaultValue("")
id schema.string().minLen(1)
emoji schema.string().minLen(1).maxLen(200)
cmd Read separately by the handler or a shared domain helper

The handler and shared validation path use these OSL schema definitions before normalization:

*schema.Schema schemaReactionChange = schema.object({
channel: schema.string().defaultValue(""),
thread_id: schema.string().defaultValue(""),
id: schema.string().minLen(1),
emoji: schema.string().minLen(1).maxLen(200)
})

Shared validation and domain flow: src/api/helpers/reactions.osl.

  1. handleCmd enforces authentication.
  2. dispatchCmd routes message_react_remove to handleMessageReactRemove.
  3. The adapter validates and normalizes input, then calls its domain collaborators.
  4. Durable mutations complete before the response or event is returned.
  5. onMessage adds the request listener to direct responses and performs any marked broadcast.

Direct collaborators visible in the handler: reactionChange, messageContext, messageTimeoutLimit, canUserReactInChannel, storedMessageById, else, configGetString, storedMessageRewrite

Response/event command names visible in this adapter: message_react_remove.

Validation and domain failures use:

{
"cmd": "error",
"val": "<message>",
"src": "message_react_remove",
"listener": "<copied from request>"
}