UNPKG

@orbitdb/voyager

Version:

A storage service OrbitDB databases.

43 lines (36 loc) 1.38 kB
import { pipe } from 'it-pipe' import all from 'it-all' import { Requests, Responses, RequestMessage, parseMessage } from './messages/index.js' import { voyagerProtocol } from './protocol.js' // utils const toArray = (v) => Array.isArray(v) ? v : [v] const getSubarray = (e) => e.subarray() const getType = (e) => e.type const isOk = (e) => e === Responses.OK export default async ({ orbitdb, address }) => { const request = async (type, addresses) => { return await RequestMessage(type, addresses, orbitdb.identity) } const parseResponse = async (source) => { const res = await all(source) const ok = res.map(getSubarray).map(parseMessage).map(getType).every(isOk) return ok } const add = async (addresses) => { const addDBs = () => [request(Requests.ADD, toArray(addresses))] const stream = await orbitdb.ipfs.libp2p.dialProtocol(address, voyagerProtocol, { runOnLimitedConnection: true }) const added = await pipe(addDBs, stream, parseResponse) return added } const remove = async (addresses) => { const removeDBs = () => [request(Requests.REMOVE, toArray(addresses))] const stream = await orbitdb.ipfs.libp2p.dialProtocol(address, voyagerProtocol, { runOnLimitedConnection: true }) const removed = await pipe(removeDBs, stream, parseResponse) return removed } return { orbitdb, add, remove } }