diff --git a/.gitignore b/.gitignore index 7a28dea..36c87de 100644 --- a/.gitignore +++ b/.gitignore @@ -9,11 +9,6 @@ test/ipfs/ test/browser/ipfs/ test/browser/bundle.js* -# Don't track examples' dependencies (libs) in git -examples/browser/browser-webpack-example/bundle.js -examples/browser/browser-webpack-example/*.map -examples/browser/lib - # Don't track builds in git # Distribution builds are available via npm dist/ diff --git a/.npmignore b/.npmignore index 0c1f668..97e0f9d 100644 --- a/.npmignore +++ b/.npmignore @@ -4,10 +4,6 @@ orbitdb/ # Don't distribute the dependencies node_modules/ -# Don't distribute examples with the module -# See examples at https://github.com/orbitdb/orbit-db -examples/ - # Don't distribute source maps dist/*.map diff --git a/Makefile b/Makefile index c3754b4..2e7d322 100644 --- a/Makefile +++ b/Makefile @@ -9,13 +9,7 @@ test: deps build: test mkdir -p examples/browser/lib/ npm run build - cp dist/orbitdb.min.js examples/browser/lib/orbitdb.min.js - cp dist/orbitdb.js examples/browser/lib/orbitdb.js - cp dist/orbitdb.js.map examples/browser/lib/orbitdb.js.map - cp node_modules/ipfs/dist/index.min.js examples/browser/lib/ipfs.min.js - cp node_modules/ipfs/dist/index.min.js examples/browser/lib/ipfs.js @echo "Build success!" - @echo "Output: 'dist/', 'examples/browser/'" clean: rm -rf node_modules/ diff --git a/examples/browser/browser-webpack-example/browser.css b/examples/browser/browser-webpack-example/browser.css deleted file mode 100644 index 0fbd2b7..0000000 --- a/examples/browser/browser-webpack-example/browser.css +++ /dev/null @@ -1,41 +0,0 @@ -body { - font-family: 'Abel', sans-serif; - font-size: 0.8em; -} - -#logo { - border-top: 1px dotted black; - border-bottom: 1px dotted black; -} - -#status { - border-top: 1px dotted black; - border-bottom: 1px dotted black; - padding: 0.5em 0em; - text-align: center; -} - -#results { - border: 1px dotted black; - padding: 0.5em; -} - -#writerText { - padding-top: 0.5em; -} - -pre { - text-align: center; -} - -input { - padding: 0.5em; -} - -h2 { - margin-bottom: 0.2em; -} -h3 { - margin-top: 0.8em; - margin-bottom: 0.2em; -} diff --git a/examples/browser/browser-webpack-example/index.html b/examples/browser/browser-webpack-example/index.html deleted file mode 100644 index 8596385..0000000 --- a/examples/browser/browser-webpack-example/index.html +++ /dev/null @@ -1,56 +0,0 @@ - - - - - - - - - - -

Open or Create Local Database

- Open a database locally and create it if the database doesn't exist. -

- - - - Public - -

Open Remote Database

- Open a database from an OrbitDB address, eg. /orbitdb/QmfY3udPcWUD5NREjrUV351Cia7q4DXNcfyRLJzUPL3wPD/hello -
- Note! Open the remote database in an Incognito Window or in a different browser. It won't work if you don't. -

- - - Read-only -

-
Init
-
-
-
-
-
- - - - - diff --git a/examples/browser/browser-webpack-example/index.js b/examples/browser/browser-webpack-example/index.js deleted file mode 100644 index 1346f67..0000000 --- a/examples/browser/browser-webpack-example/index.js +++ /dev/null @@ -1,27 +0,0 @@ -'use strict' - -/* - This is the entry point for Webpack to build the bundle from. - We use the same example code as the html browser example, - but we inject the Node.js modules of OrbitDB and IPFS into - the example. - - In the html example, IPFS and OrbitDB are loaded by ../browser.html from the - minified distribution builds - */ - -// Import IPFS module -import IPFS from 'ipfs' - -// Import OrbitDB module from 'orbit-db', eg. directory to its package.json -import OrbitDB from '../../..' - -// When 'orbit-db' was installed from npm, use with: -// import OrbitDB from 'orbit-db' - -// Example main code -const example = require('../example') - -// Call the start function and pass in the -// IPFS and OrbitDB modules -example(IPFS, OrbitDB) diff --git a/examples/browser/browser.css b/examples/browser/browser.css deleted file mode 100644 index 2b43fef..0000000 --- a/examples/browser/browser.css +++ /dev/null @@ -1,50 +0,0 @@ -body { - font-family: 'Abel', sans-serif; - font-size: 0.8em; -} - -#logo { - border-top: 1px dotted black; - border-bottom: 1px dotted black; -} - -#status { - border-top: 1px dotted black; - border-bottom: 1px dotted black; - padding: 0.5em 0em; - text-align: center; -} - -#results { - border: 1px dotted black; - padding: 0.5em; -} - -#output-header > p { - margin: 0; - font-style: italic; -} - -#output { - padding-top: 1em; -} - -#writerText { - padding-top: 0.5em; -} - -pre { - text-align: center; -} - -input { - padding: 0.5em; -} - -h2 { - margin-bottom: 0.2em; -} -h3 { - margin-top: 0.8em; - margin-bottom: 0.2em; -} diff --git a/examples/browser/browser.html b/examples/browser/browser.html deleted file mode 100644 index 397b1d4..0000000 --- a/examples/browser/browser.html +++ /dev/null @@ -1,62 +0,0 @@ - - - - - - - - - - - -

Open or Create Local Database

- Open a database locally and create it if the database doesn't exist. -

- - - - Public - -

Open Remote Database

- Open a database from an OrbitDB address, eg. /orbitdb/QmfY3udPcWUD5NREjrUV351Cia7q4DXNcfyRLJzUPL3wPD/hello -
- Note! Open the remote database in an Incognito Window or in a different browser. It won't work if you don't. -

- - - Read-only -

-
Init
-
-
-
-
-
- - - - - - - diff --git a/examples/browser/example.js b/examples/browser/example.js deleted file mode 100644 index 754f2b3..0000000 --- a/examples/browser/example.js +++ /dev/null @@ -1,282 +0,0 @@ -const creatures = [ - '🐙', '🐷', '🐬', '🐞', - '🐈', '🙉', '🐸', '🐓', - '🐊', '🕷', '🐠', '🐘', - '🐼', '🐰', '🐶', '🐥' -] - -const outputHeaderElm = document.getElementById("output-header") -const outputElm = document.getElementById("output") -const statusElm = document.getElementById("status") -const dbnameField = document.getElementById("dbname") -const dbAddressField = document.getElementById("dbaddress") -const createButton = document.getElementById("create") -const openButton = document.getElementById("open") -const createType = document.getElementById("type") -const writerText = document.getElementById("writerText") -const publicCheckbox = document.getElementById("public") -const readonlyCheckbox = document.getElementById("readonly") - -function handleError(e) { - console.error(e.stack) - statusElm.innerHTML = e.message -} - -const main = async (IPFS, ORBITDB) => { - let orbitdb, db - let count = 0 - let interval = Math.floor((Math.random() * 300) + (Math.random() * 2000)) - let updateInterval - let dbType, dbAddress - - // If we're building with Webpack, use the injected IPFS module. - // Otherwise use 'Ipfs' which is exposed by ipfs.min.js - if (IPFS) - Ipfs = IPFS - - // If we're building with Webpack, use the injected OrbitDB module. - // Otherwise use 'OrbitDB' which is exposed by orbitdb.min.js - if (ORBITDB) - OrbitDB = ORBITDB - - // Init UI - openButton.disabled = true - createButton.disabled = true - statusElm.innerHTML = "Starting IPFS..." - - // Create IPFS instance - const ipfs = await Ipfs.create({ - repo: '/orbitdb/examples/browser/new/ipfs/0.33.1', - start: true, - preload: { - enabled: false - }, - EXPERIMENTAL: { - pubsub: true, - }, - config: { - Addresses: { - Swarm: [ - // Use IPFS dev signal server - // '/dns4/star-signal.cloud.ipfs.team/wss/p2p-webrtc-star', - // '/dns4/ws-star.discovery.libp2p.io/tcp/443/wss/p2p-websocket-star', - // Use IPFS dev webrtc signal server - '/dns4/wrtc-star1.par.dwebops.pub/tcp/443/wss/p2p-webrtc-star/', - '/dns4/wrtc-star2.sjc.dwebops.pub/tcp/443/wss/p2p-webrtc-star/', - '/dns4/webrtc-star.discovery.libp2p.io/tcp/443/wss/p2p-webrtc-star/', - // Use local signal server - // '/ip4/0.0.0.0/tcp/9090/wss/p2p-webrtc-star', - ] - }, - } - }) - - openButton.disabled = false - createButton.disabled = false - statusElm.innerHTML = "IPFS Started" - orbitdb = await OrbitDB.createInstance(ipfs) - - const load = async (db, statusText) => { - // Set the status text - statusElm.innerHTML = statusText - - // When the database is ready (ie. loaded), display results - db.events.on('ready', () => queryAndRender(db)) - // When database gets replicated with a peer, display results - db.events.on('replicated', () => queryAndRender(db)) - // When we update the database, display result - db.events.on('write', () => queryAndRender(db)) - - db.events.on('replicate.progress', () => queryAndRender(db)) - - // Hook up to the load progress event and render the progress - let maxTotal = 0, loaded = 0 - db.events.on('load.progress', (address, hash, entry, progress, total) => { - loaded ++ - maxTotal = Math.max.apply(null, [maxTotal, progress, 0]) - total = Math.max.apply(null, [progress, maxTotal, total, entry.clock.time, 0]) - statusElm.innerHTML = `Loading database... ${maxTotal} / ${total}` - }) - - db.events.on('ready', () => { - // Set the status text - setTimeout(() => { - statusElm.innerHTML = 'Database is ready' - }, 1000) - }) - - // Load locally persisted database - await db.load() - } - - const startWriter = async (db, interval) => { - // Set the status text - writerText.innerHTML = `Writing to database every ${interval} milliseconds...` - - // Start update/insert loop - updateInterval = setInterval(async () => { - try { - await update(db) - } catch (e) { - console.error(e.toString()) - writerText.innerHTML = '' + e.toString() + '' - clearInterval(updateInterval) - } - }, interval) - } - - const resetDatabase = async (db) => { - writerText.innerHTML = "" - outputElm.innerHTML = "" - outputHeaderElm.innerHTML = "" - - clearInterval(updateInterval) - - if (db) { - await db.close() - } - - interval = Math.floor((Math.random() * 300) + (Math.random() * 2000)) - } - - const createDatabase = async () => { - await resetDatabase(db) - - openButton.disabled = true - createButton.disabled = true - - try { - const name = dbnameField.value - const type = createType.value - const publicAccess = publicCheckbox.checked - - db = await orbitdb.open(name, { - // If database doesn't exist, create it - create: true, - overwrite: true, - // Load only the local version of the database, - // don't load the latest from the network yet - localOnly: false, - type: type, - // If "Public" flag is set, allow anyone to write to the database, - // otherwise only the creator of the database can write - accessController: { - write: publicAccess ? ['*'] : [orbitdb.identity.id], - } - }) - - await load(db, 'Creating database...') - startWriter(db, interval) - } catch (e) { - console.error(e) - } - openButton.disabled = false - createButton.disabled = false - } - - const openDatabase = async () => { - const address = dbAddressField.value - - await resetDatabase(db) - - openButton.disabled = true - createButton.disabled = true - - try { - statusElm.innerHTML = "Connecting to peers..." - db = await orbitdb.open(address, { sync: true }) - await load(db, 'Loading database...') - - if (!readonlyCheckbox.checked) { - startWriter(db, interval) - } else { - writerText.innerHTML = `Listening for updates to the database...` - } - } catch (e) { - console.error(e) - } - openButton.disabled = false - createButton.disabled = false - } - - const update = async (db) => { - count ++ - - const time = new Date().toISOString() - const idx = Math.floor(Math.random() * creatures.length) - const creature = creatures[idx] - - if (db.type === 'eventlog') { - const value = "GrEEtinGs from " + orbitdb.id + " " + creature + ": Hello #" + count + " (" + time + ")" - await db.add(value) - } else if (db.type === 'feed') { - const value = "GrEEtinGs from " + orbitdb.id + " " + creature + ": Hello #" + count + " (" + time + ")" - await db.add(value) - } else if (db.type === 'docstore') { - const value = { _id: 'peer1', avatar: creature, updated: time } - await db.put(value) - } else if (db.type === 'keyvalue') { - await db.set('mykey', creature) - } else if (db.type === 'counter') { - await db.inc(1) - } else { - throw new Error("Unknown datatbase type: ", db.type) - } - } - - const query = (db) => { - if (db.type === 'eventlog') - return db.iterator({ limit: 5 }).collect() - else if (db.type === 'feed') - return db.iterator({ limit: 5 }).collect() - else if (db.type === 'docstore') - return db.get('peer1') - else if (db.type === 'keyvalue') - return db.get('mykey') - else if (db.type === 'counter') - return db.value - else - throw new Error("Unknown datatbase type: ", db.type) - } - - const queryAndRender = async (db) => { - const networkPeers = await ipfs.swarm.peers() - const databasePeers = await ipfs.pubsub.peers(db.address.toString()) - - const result = query(db) - - if (dbType !== db.type || dbAddress !== db.address) { - dbType = db.type; - dbAddress = db.address; - - outputHeaderElm.innerHTML = ` -

${dbType.toUpperCase()}

-

${dbAddress}

-

Copy this address and use the 'Open Remote Database' in another browser to replicate this database between peers.

- ` - } - - outputElm.innerHTML = ` -
Peer ID: ${orbitdb.id}
-
Peers (database/network): ${databasePeers.length} / ${networkPeers.length}
-
Oplog Size: ${Math.max(db._replicationStatus.progress, db._oplog.length)} / ${db._replicationStatus.max}
-

Results

-
-
- ${result && Array.isArray(result) && result.length > 0 && db.type !== 'docstore' && db.type !== 'keyvalue' - ? result.slice().reverse().map((e) => e.payload.value).join('
\n') - : db.type === 'docstore' - ? JSON.stringify(result, null, 2) - : result ? result.toString().replace('"', '').replace('"', '') : result - } -
-
- ` - } - - openButton.addEventListener('click', openDatabase) - createButton.addEventListener('click', createDatabase) -} - -if (typeof module !== 'undefined' && typeof module.exports !== 'undefined') - module.exports = main diff --git a/examples/events.js b/examples/events.js deleted file mode 100644 index edc07b6..0000000 --- a/examples/events.js +++ /dev/null @@ -1,48 +0,0 @@ -import { create } from 'ipfs-core' -import OrbitDB from '../src/orbitdb.js' - -const creatures = ['🐙', '🐷', '🐬', '🐞', '🐈', '🙉', '🐸', '🐓'] - -console.log("Starting...") - -async function main () { - let db - - try { - const ipfs = await create({ - repo: './orbitdb/examples/ipfs', - start: true, - EXPERIMENTAL: { - pubsub: true, - }, - }) - const orbitdb = await OrbitDB({ ipfs, directory: './orbitdb/examples' }) - db = await orbitdb.open('example') - } catch (e) { - console.error(e) - process.exit(1) - } - - const query = async () => { - const index = Math.floor(Math.random() * creatures.length) - const userId = Math.floor(Math.random() * 900 + 100) - - try { - await db.add({ avatar: creatures[index], userId: userId }) - let latest = await db.all() - let output = `` - output += `[Latest Visitors]\n` - output += `--------------------\n` - output += `ID | Visitor\n` - output += `--------------------\n` - output += latest.reverse().map((e) => e.value.userId + ' | ' + e.value.avatar).join('\n') + `\n` - console.log(output) - } catch (e) { - console.error(e) - process.exit(1) - } - } - - setInterval(query, 1000) -} -main() diff --git a/examples/keyvalue.js b/examples/keyvalue.js deleted file mode 100644 index 8cb1039..0000000 --- a/examples/keyvalue.js +++ /dev/null @@ -1,67 +0,0 @@ -'use strict' - -const IPFS = require('ipfs') -const OrbitDB = require('../src/OrbitDB') - -const userId = 1 -const creatures = ['🐙', '🐬', '🐋', '🐠', '🐡', '🦀', '🐢', '🐟', '🐳'] - -const output = (user) => { - if (!user) - return - - let output = `` - output += `----------------------\n` - output += `User\n` - output += `----------------------\n` - output += `Id: ${userId}\n` - output += `Avatar: ${user.avatar}\n` - output += `Updated: ${user.updated}\n` - output += `----------------------\n` - console.log(output) -} - -console.log("Starting...") - -async function main () { - let db - - try { - const ipfs = await IPFS.create({ - repo: './orbitdb/examples/ipfs', - start: true, - EXPERIMENTAL: { - pubsub: true, - }, - }) - const orbitdb = await OrbitDB.createInstance(ipfs, { - directory: './orbitdb/examples/keyvalue' - }) - db = await orbitdb.kvstore('example', { overwrite: true }) - await db.load() - // Query immediately after loading - const user = db.get(userId) - output(user) - } catch (e) { - console.error(e) - process.exit(1) - } - - const query = async () => { - // Randomly select an avatar - const index = Math.floor(Math.random() * creatures.length) - - // Set the key to the newly selected avatar and update the timestamp - await db.put(userId, { avatar: creatures[index], updated: new Date().getTime() }) - - // Get the value of the key - const user = db.get(userId) - - // Display the value - output(user) - } - - console.log("Starting update loop...") - setInterval(query, 1000) -} -main()