ssb-msg-schemas
v6.3.0
Published
validation and publishing methods for common ssb message types
Downloads
37
Keywords
Readme
SSB Message Schemas
Functions to create common SSB messages.
{ type: 'post', text: String, channel: String, root: MsgLink, branch: MsgLink|MsgLinks, recps: FeedLinks, mentions: Links }
{ type: 'post-edit', text: String, root: MsgLink, revisionRoot: MsgLink, revisionBranch: MsgLink, mentions: Links }
{ type: 'about', about: Link, name: String, image: BlobLink }
{ type: 'contact', contact: FeedLink, following: Bool, blocking: Bool }
{ type: 'vote', vote: { link: Ref, value: -1|0|1, reason: String } }
{ type: 'pub', pub: { link: FeedRef, host: String, port: Number } }
var schemas = require('ssb-msg-schemas')
schemas.post(text, root (optional), branch (optional), mentions (optional), recps (optional), channel (optional))
// => { type: 'post', text: text, channel: channel, root: root, branch: branch, mentions: mentions, recps: recps }
schemas.postEdit(text, root, revisionRoot, revisionBranch, mentions (optional))
// => { type: 'post-edit', text: text, root: root, revisionRoot: revisionRoot, revisionBranch: revisionBranch, mentions: mentions }
schemas.name(id, name)
// => { type: 'about', about: id, name: name }
schemas.image(id, imgLink)
// => { type: 'about', about: id, image: imgLink }
schemas.follow(userId)
// => { type: 'contact', contact: userId, following: true, blocking: false }
schemas.unfollow(userId)
// => { type: 'contact', contact: userId, following: false }
schemas.block(userId)
// => { type: 'contact', contact: userId, following: false, blocking: true }
schemas.unblock(userId)
// => { type: 'contact', contact: userId, blocking: false }
schemas.vote(id, vote)
// => { type: 'vote', vote: { link: id, value: vote } }
schemas.vote(id, vote, reason)
// => { type: 'vote', vote: { link: id, value: vote, reason: reason } }
schemas.pub(id, host, port)
// => { type: 'pub', pub: { link: id, host: host, port: port } }
Notes
type: post
{ type: 'post', text: String, channel: String, root: MsgLink, branch: MsgLink|MsgLinks, recps: FeedLinks, mentions: Links }
channel
is optionally used to filter posts into groups, similar to subreddits or chat channels.root
andbranch
are for replies.root
should point to the topmost message in the thread.branch
should point to the message or set of messages in the thread which is being replied to.- In the first reply of a thread,
root === branch
, and both should be included. root
andbranch
should only point totype: post
messages. If the post is about another message-type, usementions
.
mentions
is a generic reference to other feeds, entities, or blobs.- It is used by user mentions (you typed "@bob", so bob's link goes in
mentions
). - It is used by file-attachments (you attached a file, the reference goes in
mentions
). - It is used by message-mentions (to reference non-post messages).
- It is used by user mentions (you typed "@bob", so bob's link goes in
recps
is a list of user-links specifying who the message is for.- This is typically used for encrypted messages, to specify who the message was encrypted for.
type: postEdit
{ type: 'post-edit', text: String, root: MsgLink, revisionRoot: MsgLink, revisionBranch: MsgLink, mentions: Links }
text
is used for posting the revised text that should take the place of some previous text.root
should point to the topmost message in the thread (i.e., the original thread root).revisionRoot
points the original 'unrevised message', i.e., the root of the revision thread.revisionBranch
should point to the previous revision in the revision thread. If this is the first edit to a message,revisionRoot
andrevisionBranch
will be the same.mentions
is used as inpost
, replacing the previousmentions
of the message inrevisionBranch
.
type: about
{ type: 'about', about: Link, name: String, image: BlobLink }
- You should only include 1 votable piece of information at a time in an about message.
- Of the attributes specified here,
name
andimage
are votable. - Therefore,
name
andimage
should not appear in the same message. - Reason: vote messages cant differentiate on content within a message. If
name
andimage
are grouped together, a vote on the message is a vote on both pieces of information.
- Of the attributes specified here,
- Typically,
type: about
is for users, but it can also be used on msgs and blobs.