Skip to content

Instantly share code, notes, and snippets.

@datafatmunger
Created July 10, 2018 09:45
Show Gist options
  • Select an option

  • Save datafatmunger/a1964509e1395d1f53821a9ef1eaeb85 to your computer and use it in GitHub Desktop.

Select an option

Save datafatmunger/a1964509e1395d1f53821a9ef1eaeb85 to your computer and use it in GitHub Desktop.
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