y-ipfs-connector
v2.3.0
Published
Y.js connector over IPFS
Downloads
36
Readme
y-ipfs-connector
IPFS Connector for Yjs
Use it!
Retrieve this with npm:
$ npm install y-ipfs-connector --save
Example
// you need to create and inject a IPFS object
const IPFS = require('ipfs')
const Y = require('yjs')
require('y-ipfs-connector')(Y)
// other Yjs deps:
require('y-memory')(Y)
require('y-array')(Y)
require('y-text')(Y)
// create IPFS node
const ipfs = new IPFS({
EXPERIMENTAL: {
pubsub: true // need this to work
}
})
Y({
db: {
name: 'memory'
},
connector: {
name: 'ipfs', // use the IPFS connector
ipfs: ipfs, // inject the IPFS object
room: 'Textarea-example-dev'
},
sourceDir: '/bower_components', // location of the y-* modules
share: {
textarea: 'Text' // y.share.textarea is of type Y.Text
}
}).then(function (y) {
// bind the textarea to a shared text element
y.share.textarea.bind(document.getElementById('textfield'))
}
Signature
options.sign
You can sign messages. For that, you have to provide a sign
option, which needs to be a function that accepts a message (string) and calls back with a buffer containing the signature for it (string):
Y({
connector: {
name: 'ipfs',
sign: (m, callback) => { ... }
// ...
}
// ...
})
Using this, messages will be sent alongside with a signature, which can be validated.
options.verifySignature
You can also verify a signature for a given message by providing a function like this:
Y({
connector: {
name: 'ipfs',
verifySignature: (peer, message, signature, callback) => { ... }
// ...
}
// ...
})
options.encode
Optional function that receives the message and encodes it. Useful if you want to encrypt the content before sending.
options.encode = (message) => {
return encrypt(message)
}
options.decode
Optional function that receives the message and decodes it. Useful if you want to decrypt the content after receiving.
options.decode = (message) => {
return decrypt(message)
}
Debug
Activate y-ipfs-connector
on debug
to see log messages.
License
MIT
Contribute
Feel free to join in. All welcome. Open an issue!
This repository falls under the IPFS Code of Conduct.