Created
July 10, 2018 09:45
-
-
Save datafatmunger/a1964509e1395d1f53821a9ef1eaeb85 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| const crypto = require('crypto'), | |
| sha = crypto.createHash('sha1'), | |
| hyperdb = require('hyperdb'), | |
| hyperdiscovery = require('hyperdiscovery'), | |
| cms = require('random-access-idb')('cms'), | |
| webrtc = require('webrtc-swarm'), | |
| signalhub = require('signalhub'), | |
| hyperdrive = require('hyperdrive'), | |
| pump = require('pump'); | |
| //var db = hyperdb("./db", { valueEncoding: 'utf-8' }); | |
| var key = "061734e2ec735cb52d93f3cee1e73113cdf913b75de310dd386e1e037651532d"; | |
| const db = hyperdb(filename => { | |
| return cms(filename); | |
| }, key, { valueEncoding: 'utf-8' }); | |
| //var DEFAULT_SIGNALHUBS = 'http://localhost/signalhub'; | |
| var DEFAULT_SIGNALHUBS = 'https://signalhub-jccqtwhdwc.now.sh'; | |
| //var archive = hyperdrive(); | |
| //var link = archive.discoveryKey.toString('hex'); | |
| db.on('ready', function () { | |
| // const key = db.key.toString('hex'); | |
| const disckey = db.discoveryKey.toString('hex'); | |
| // console.log('KEY: ' + key); | |
| console.log('DISC KEY: ' + disckey); | |
| // console.log('LOCAL KEY: ' + db.local.key.toString('hex')); | |
| const swarm = webrtc(signalhub(key, DEFAULT_SIGNALHUBS)); | |
| swarm.on('peer', function (conn) { | |
| console.log("PEER!!!!!!!"); | |
| const peer = db.replicate({ | |
| upload: true, | |
| download: true | |
| }); | |
| pump(conn, peer, conn) | |
| }); | |
| // swarm = hyperdiscovery(db); | |
| // swarm.on('connection', (peer, type) => { | |
| // console.log('PEER: ' + peer.key.toString('hex')); | |
| // }); | |
| }); | |
| function createKey(str) { | |
| sha.update(JSON.stringify(str)); | |
| return sha.digest('hex'); | |
| } | |
| function put(obj) { | |
| return new Promise( resolve => { | |
| const objStr = JSON.stringify(obj); | |
| const key = createKey(objStr); | |
| db.put(key, objStr, (err) => { | |
| if(err) throw err; | |
| resolve(key); | |
| }); | |
| }); | |
| } | |
| function get(key) { | |
| return new Promise((resolve, reject) => { | |
| db.get(key, (err, nodes) => { | |
| if(err) reject(err); | |
| try { | |
| if(nodes.length > 0) { | |
| const obj = JSON.parse(nodes[0].value); | |
| resolve(obj); | |
| } | |
| else resolve(undefined); | |
| } catch(e) { | |
| reject(e); | |
| } | |
| }); | |
| }); | |
| } | |
| function createPage(title, content) { | |
| return put({ | |
| title: title, | |
| content: content | |
| }); | |
| } | |
| function getPages() { | |
| return get("pages"); | |
| } | |
| function updatePages(pages) { | |
| return new Promise((resolve, reject) => { | |
| db.put("pages", JSON.stringify(pages), err => { | |
| if(err) reject(err); | |
| resolve(); | |
| }); | |
| }); | |
| } | |
| async function addPage(pageKey, pages) { | |
| if(!pages.includes(pageKey)) { | |
| pages = pages.concat(pageKey); | |
| } | |
| await updatePages(pages); | |
| } | |
| function handleError(err) { | |
| console.log(err); | |
| } | |
| async function test() { | |
| // createPage("Foo", "# Bar\n\nTester Testerson").then(async pageKey => { | |
| // console.log(pageKey); | |
| // await addPage(pageKey, []); | |
| const pages = await getPages(); | |
| if(pages.length !== 1) throw new Error("Page not added"); | |
| console.log(pages); | |
| // }).catch(handleError); | |
| } | |
| test(); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment