📄 | .gitignore |
📄 | README.md |
📁 | async |
📄 | index.js |
📄 | isBlog.js |
📁 | lib |
📁 | obs |
📄 | package-lock.json |
📄 | package.json |
📁 | schema |
📄 | struct.js |
📁 | sync |
📁 | tests |
Scuttle-blog
A helper module which covers all your ssb blog
related needs from blog data.
The parts of this modules are :
- queries/ getters
- schemas/ validaters
Usage
const isBlog = require('scuttle-blog/isBlog')
isBlog(msg)
// => true
const { h } = require(mutant)
const ScuttleBook = require('scuttle-blog')
const sBook = ScuttleBook(server) // server is sometimes called sbot
const myBook = sBook.obs.get('%GKGFNHKeUVAVPNUapE41skF3ND3Etm76XO7Y7sVeTLI=.sha256')
document.body.appendChild(
h('Blog', [
h('h1', blog.title),
h('pre', blog.body)
])
)
// the blog here would be raw markdown, but fixing that is left to the reader!
Constructor API
Blog(server)
server
is a connection to your scuttlebutt server provided by ssb-client
(sometimes called sbot in other docs).
server
can also be an observeable which will resolve into the above at some point. If you pass in an observeable, synchronous methods will return observeables.
Instance API
blog.sync.isBlog(msg) => Boolean
msg
- is a message from a server stream (or the message content).
blog.obs.get(blogMsg) => Observeable
blogMsg
(Object)
- a blog message (or the content of a blogMsg
)
The observeable returned is Mutant Struct which holds data structured like:
{
title,
channel,
summary,
thumbnail,
body, [MutantValue]
errors [MutantArray]
}
In this case all values will be observeables, and the blog content (body
) will take some time to load if you haven't already got the whole blog. (This method called blog.async.fetch
under the hood.)
blog.aync.get(blogMsg, cb)
blogMsg
(Object)
- a blog message (or the content of a blogMsg
)
cb
- a callback with signature (err, blogObj)
where blogObj
is a plain js object with the same form described in blog.obs.get
The observeable returned is Mutant Struct which holds data structured like:
{
title,
channel,
summary,
thumbnail,
body, [MutantValue]
errors [MutantArray]
}
In this case all values will be observeables, and the blog content (body
) will take some time to load if you haven't already got the whole blog. (This method called blog.async.fetch
under the hood.)
blog.async.fetch(msg, cb)
Blogs store the body of their text as an attachement. In Scuttlebutt, attachments have to be manually requested, hence this method.
key
(Object)
- a blog msg
cb
(function)
- a callback with the standard signature (err, success)
where success
is a Boolean
Schemas
Blog message content:
{
type: 'blog',
title: String,
blog: Blob,
summary: String, (optional)
thumbnail: Blob, (optional)
channel: String, (optional)
}
Development
Run the tests with npm test
Things could implement in future:
- have methods take a msg or a msgKey
- synchronous methods
- better pattern for not having to write
fetch(server)(cb)
when coding - blog creation
- blog editing
- blog drafts (encrypted, but later revealed .. or just republished)
Built with git-ssb-web