Skip to content

Instantly share code, notes, and snippets.

Avatar
💜
Decentralizing

RangerMauve

💜
Decentralizing
View GitHub Profile
View hyperbee-indexed.md

Hyperbee Indexed DB

Purpose:

Hyperbee is super useful for storing data and searching for data using it's ordered key search. When you set up your keyspace just right, you can query a small subset of a large database and quickly load what you need without having to download the entire dataset or traverse it.

This module seeks to make it easier to set up these indexes for JSON data and to make it easy to query large datasets.

How it works

View hyper-access-control.md

Acess Control In Hypercore

Allow Lists

One way to revoke access to a hypercore is to control who is allowed to replicate a hypercore.

WHen you create hypercore replication stream you can control when feeds can be added or removed.

As well, after a replication stream is created you can see a peer's remote public key which can be used to securely identify a peer in the network.

@RangerMauve
RangerMauve / filesystem.js
Created Mar 27, 2021
Test opening a write stream for the FileSystem API
View filesystem.js
// Execute this in Chrome Dev Tools on an HTTPs web page
// Choose a file on your FS
[fileHandle] = await window.showOpenFilePicker();
// This will throw an error on Electron 12
writable = await fileHandle.createWritable();
View gnome-palette.md

GNOME Palette

  • Kinda like web-palette but for Linux desktop
  • Use GJS's AT-SPI bindings
  • Search for every button / heading / hyperlink on the page
  • Generate a palette which lets you fuzzy match
  • Integrate with shell as a search providr? Look at this extension
@RangerMauve
RangerMauve / DatArchive.dream.js
Created Aug 27, 2019
Dream DatArchive API for extensions / peers
View DatArchive.dream.js
const archive = await DatArchive.load('someurl', {
// Gets passed down to hyperdrive constructor
extensions: ['example', 'foo', 'bar']
})
archive.addEventListener('extension', ({detail}) => {
const {type, message, peer} = detail
if(type === 'foo') {
// Similar to the hypercore API: https://github.com/mafintosh/hypercore#feedonextension-name-message-peer
@RangerMauve
RangerMauve / corestore.md
Last active Jul 30, 2019
Corestore API proposal
View corestore.md

Corestore API Proposal

Requirements

  • Storing multiple hypercores in a single "group"
  • Purging storage for a given hypercore key
  • Able to replicate whole group
  • Specifying which key should be used for replication handshake

API (from the SDK)

View gist:62501c98b42c63f2de6ee0644a6852ff
WebRTC, unlike Dat, requires doing a handshake through a third party.
With beaker, that third party can be the existing P2P connections that you have.
To connect between two peers you need to do the following:
- Create a Dat Archive for the call website
- Listen on messages in the [dat-peers API](https://beakerbrowser.com/docs/apis/experimental-datpeers)
- Have the user enter a "room"
- Set up the WebRTC connection, send the SDP handshake and the `room` through datPeers
- When you get messages for your room, pass them to the local PeerConnection as being remote SDP or ICE
@RangerMauve
RangerMauve / dat-sdk.md
Last active Apr 9, 2019
Tools in the Dat Toolbelt
View dat-sdk.md

Dat Toolbelt

Dat has a cool ecosystem with a bunch of different people working on interesting things. This is a list of what I'd like to have in an official Dat Toolbelt along with tutorials on how to use these tools.

Data

  • Files
    • Create a file, share it with a dat:// link
    • All archives should be multiwritable, with mounts / etc
@RangerMauve
RangerMauve / dirty-dat-fetch.js
Last active Oct 26, 2018
Patch `window.fetch` to support dat:// URLs
View dirty-dat-fetch.js
window._fetch = fetch
window.fetch = async function(url) {
if(url.startsWith("dat://")) {
const parsed = new URL(url)
const archive = await DatArchive.load(`dat://${parsed.hostname}`)
return {
text: async () => {
return archive.readFile(parsed.path, "utf8")
}
}
@RangerMauve
RangerMauve / clink_prompt.lua
Last active Apr 8, 2020
Clink script for having a nice command prompt with git branch support and home directory aliasing
View clink_prompt.lua