Skip to content

messages_search

messages_search is implemented by handleMessagesSearch in src/api/handlers/message/messages_search.osl.

Handles the messages search protocol operation through the resource-specific helper and storage layers.

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 Not marked global directly by this adapter. A helper may emit focused or server-wide updates.

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

Field Validation / meaning
query schema.string().trim().maxLen(200).defaultValue("")
fuzzy schema.boolean().defaultValue(false)
channel schema.string().defaultValue("")
thread_id schema.string().defaultValue("")
filters schema.object({
limit schema.integer().optional()
offset schema.integer().min(0).defaultValue(0)

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

*schema.Schema schemaSearchStrList = schema.oneOrMany(schema.string())
*schema.Schema schemaSearchHasValue = schema.enum([
"attachment", "embed", "reaction", "reply", "edit",
"webhook", "command", "image", "video", "audio",
"poll", "link", "mention"
])
*schema.Schema schemaSearch = schema.object({
query: schema.string().trim().maxLen(200).defaultValue(""),
fuzzy: schema.boolean().defaultValue(false),
channel: schema.string().defaultValue(""),
thread_id: schema.string().defaultValue(""),
filters: schema.object({
from: schemaSearchStrList.optional(),
mentions: schemaSearchStrList.optional(),
mentions_role: schemaSearchStrList.optional(),
pinged: schema.boolean().optional(),
has: schema.oneOrMany(schemaSearchHasValue).optional(),
pinned: schema.boolean().optional(),
edited: schema.boolean().optional(),
before: schema.number().min(0).optional(),
after: schema.number().min(0).optional()
}).strict().defaultValue({}),
limit: schema.integer().optional(),
offset: schema.integer().min(0).defaultValue(0)
})
  1. handleCmd enforces authentication.
  2. dispatchCmd routes messages_search to handleMessagesSearch.
  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: messageContext, values, userFromUsername, else, stripStart, roleFromName, true, userFromId, configGet, messagesSearch

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

Validation and domain failures use:

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