Spins up an empty, temporary ssb-server that stores data in your temp folder
var TestBot = require('scuttle-testbot')
var piet = TestBot()
piet.publish({type: 'test', content: "a test message"}, (err, msg) => {
console.log(msg)
piet.close()
})
Outputs:
{
key: '%FQ2auS8kVY9qPgpTWNY3le/JG5+IlO6JHDjBIQcSPSc=.sha256',
value: {
previous: null,
sequence: 1,
author: '@UreG2i/rf4mz7QAVOtg0OML5SRRB42Cwwl3D1ct0mbU=.ed25519',
timestamp: 1517190039755,
hash: 'sha256',
content: { type: 'test', content: 'a test message' },
signature: '0AxMJ7cKjHQ6vJDPkVNWcGND4gUwv2Z8barND5eha7ZXH/s5T0trFqcratIqzmhE3YJU2FY61Rf1S/Za2foLCA==.sig.ed25519'
},
timestamp: 1517190039758
}
var TestBot = require('scuttle-testbot')
TestBot(opts = {})
Returns a ssb-server instance.
By default, CreateTestSbot deletes an existing database of the same name
before starting.
Valid opts
keys include:
opts.name
String (optional) (default: ssb-test + Number(new Date)
)opts.path
String (optional) (default: /tmp/${name}
, where name
is the above)~/.ssb-test
: Sets the database in ~/.ssb-test
opts.keys
String (optional) (default: scuttle-testbot generates a new set of random keys)ssbKeys.generate()
opts.startUnclean
(default: false
)true
: Don't delete an existing database before starting up.name
and keys
options to be connecting to the same logdb2
(default: false
)TestBot.use(plugin)
CreateTestSbot.use
lets you add ssb-server plugins. use
can be chained the same as the ssb-server api.
Example:
function Server (opts) {
const stack = Testbot
.use('ssb-master')
.use('ssb-tribes')
return stack(opts)
}
Testbot.replicate({ from, to, live?, name?, log? }, done)
Replicates data from one testbot to another, which is sometimes needed when you have functions which are only triggered by another feedId, e.g. when I am added to a private group someone else started.
Example:
const piet = TestBot()
const katie = TestBot()
const content = {
type: 'direct-message',
text: 'oh hey'
}
piet.publish(content, (err, msg) => {
TestBot.replicate({ from: piet, to: katie }, (err) => {
katie.get({ id: msg.key, private: true }, (err, value) => {
console.log(value.content)
// should be same as content piet sent, if katie can decrypt
piet.close()
katie.close()
})
})
})
arguments:
from
SSB - an ssb instance to be replicated from. This will replicate only this feeds messages (not everything in log)to
SSB - an ssb instance being replicate to.name
Function (optional) - makes logged output easier to read by allowing you to replace feedIds with human readable names // example
const name = (feedId) => {
if (feedId === piet.id) return 'piet'
if (feedId === katie.id) return 'katie'
}
const piet = TestBot()
piet.name = 'piet'
log
Function|false (optional)live
Boolean (optional)- whether or not to keep replication running (default: false
).false
console.log
done
Function - an optional callback which is triggered when the replication is complete or if there is an error.live === true
this will ony be called on an error. Signature done (err) { ... }
Also supports promise style.
await TestBot.replicate({ from: piet, to: katie })
This requires that live: false
Under the hood this function just uses createHistoryStream
directly from one peer to another
Testbot.connect(peers, { names, friends }, done)
Connects all listed peers.
Example:
const crypto = require('crypto')
const Server = (opts) => {
const stack = require('scuttle-testbot')
.use('ssb-friends') // only needed if opts.friends
return stack(opts)
}
const caps = { shs: crypto.randomBytes(32).toString('base64') }
const piet = Server({ caps })
const katie = Server({ caps })
// all peers need to have same caps to be able to connect to each other
Testbot.connect([piet, katie], { friends: true }, (err) => {
// as friends: true - piet now follows katie + vice versa
// and there is a connection live between these two
piet.close()
katie.close()
})
arguments:
peers
Array
opts
Object
opts.friends
Boolean (optional)ssb-friends
to be installedfalse
opts.name
Function (optional) - makes logged output easier to read by allowing you to replace feedIds with human readable names // example
const name = (feedId) => {
if (feedId === piet.id) return 'piet'
if (feedId === katie.id) return 'katie'
}
opts.log
Function|false (optional)false
console.log
done
Function - an optional callback which is triggered when the replication is complete or if there is an error.
live === true
this will ony be called on an error. Signature done (err) { ... }
Under the hood this just uses createHistoryStream
directly from one peer to another
Also supports promise style.
await Testbot.connect([piet, katie], { friends: true })
TestBot.colorLog(obj, ...)
Like console.log(JSON.stringify(obj, null, 2))
but also:
MIT