message_new
message_new is implemented by handleMessageNew in src/api/handlers/message/message_new.osl.
Handles the message new protocol operation through the resource-specific helper and storage layers.
Access
Section titled “Access”| 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. |
Request
Section titled “Request”Every request includes cmd: "message_new" and may include an opaque listener correlation value.
| Field | Validation / meaning |
|---|---|
channel |
schema.string().defaultValue("") |
thread_id |
schema.string().defaultValue("") |
content |
schema.string().optional() |
embeds |
schema.array(schema.any()).optional() |
attachments |
schema.array(schema.any()).optional() |
reply_to |
schema.string().optional() |
ping |
schema.boolean().optional() |
author_id |
schema.string().optional() |
key_id |
schema.string().optional() |
signature |
schema.string().optional() |
timestamp |
schema.number().optional() |
Validator source
Section titled “Validator source”The handler and shared validation path use these OSL schema definitions before normalization:
*schema.Schema schemaMessageNew = schema.object({ channel: schema.string().defaultValue(""), thread_id: schema.string().defaultValue(""), content: schema.string().optional(), embeds: schema.array(schema.any()).optional(), attachments: schema.array(schema.any()).optional(), reply_to: schema.string().optional(), ping: schema.boolean().optional(), author_id: schema.string().optional(), key_id: schema.string().optional(), signature: schema.string().optional(), timestamp: schema.number().optional()})Processing path
Section titled “Processing path”handleCmdenforces authentication.dispatchCmdroutesmessage_newtohandleMessageNew.- The adapter validates and normalizes input, then calls its domain collaborators.
- Durable mutations complete before the response or event is returned.
onMessageadds the request listener to direct responses and performs any marked broadcast.
Direct collaborators visible in the handler: messageContext, messageSigningData, messagePayloadError, attachmentResolve, validateRoleMentionsPermissions, userFromId, messageRateLimit, configGetString, storedMessageById, randomUUID
Responses and events
Section titled “Responses and events”Response/event command names visible in this adapter: message_new.
Validation and domain failures use:
{ "cmd": "error", "val": "<message>", "src": "message_new", "listener": "<copied from request>"}