Commit 660c6b9bd39795033a2324ad53d2c6b960928d2b
add notes
mix irving committed on 1/12/2018, 10:37:05 PMParent: 987538efa0b0ba8fb17a68dd4229d47941f0ba08
Files changed
1_simple_demo/server.js | ||
---|---|---|
@@ -14,6 +14,7 @@ | ||
14 | 14 … | const server = Server(config) |
15 | 15 … | |
16 | 16 … | console.log('*** updating manifest ***') |
17 | 17 … | // this is required for ssb-client to consume |
18 … | +// it's a list of methods that can be called remotely, without this code we won't be able to call our new plugin | |
18 | 19 … | const manifest = server.getManifest() |
19 | 20 … | fs.writeFileSync(Path.join(config.path, 'manifest.json'), JSON.stringify(manifest)) |
2_actual_friends/config.js | ||
---|---|---|
@@ -2,9 +2,9 @@ | ||
2 | 2 … | // const Config = require('ssb-config') |
3 | 3 … | const ssbKeys = require('ssb-keys') |
4 | 4 … | const Path = require('path') |
5 | 5 … | |
6 | -const appName = "ssb" | |
6 … | +const appName = "ssb" // <<< NOTE THIS IS YOUR DEFAULT IDENTITY | |
7 | 7 … | const opts = null // can set things in here |
8 | 8 … | |
9 | 9 … | const config = Config(appName, opts) |
10 | 10 … | Object.assign(config, { |
2_actual_friends/server.js | ||
---|---|---|
@@ -14,6 +14,7 @@ | ||
14 | 14 … | const server = Server(config) |
15 | 15 … | |
16 | 16 … | console.log('*** updating manifest ***') |
17 | 17 … | // this is required for ssb-client to consume |
18 … | +// it's a list of methods that can be called remotely, without this code we won't be able to call our new plugin | |
18 | 19 … | const manifest = server.getManifest() |
19 | 20 … | fs.writeFileSync(Path.join(config.path, 'manifest.json'), JSON.stringify(manifest)) |
package-lock.json | ||
---|---|---|
The diff is too large to show. Use a local git client to view these changes. Old file size: 138978 bytes New file size: 140344 bytes |
package.json | ||
---|---|---|
@@ -14,7 +14,8 @@ | ||
14 | 14 … | "pull-stream": "^3.6.1", |
15 | 15 … | "scuttlebot": "^10.5.0", |
16 | 16 … | "ssb-client": "^4.5.2", |
17 | 17 … | "ssb-config": "^2.2.0", |
18 | - "ssb-keys": "^7.0.13" | |
18 … | + "ssb-keys": "^7.0.13", | |
19 … | + "ssb-server-actual-friends": "^1.0.0" | |
19 | 20 … | } |
20 | 21 … | } |
3_actual_friends_remote_module/client.js | ||
---|---|---|
@@ -1,0 +1,50 @@ | ||
1 … | +const Client = require('ssb-client') | |
2 … | +const config = require('./config') | |
3 … | + | |
4 … | +const map = require('lodash/map') | |
5 … | + | |
6 … | +Client(config.keys, config, (err, ssbServer) => { | |
7 … | + // ssbServer (also commonly called sbot) | |
8 … | + // a remote connection to our server | |
9 … | + if (err) throw err | |
10 … | + | |
11 … | + // console.log('methods', ssbServer) | |
12 … | + console.log('actualFriends methods:', ssbServer.actualFriends) | |
13 … | + | |
14 … | + ssbServer.whoami((err, data) => { | |
15 … | + if (err) throw err | |
16 … | + const myId = data.id | |
17 … | + const dominicId = '@EMovhfIrFk4NihAKnRNhrfRaqIhBv1Wj8pTxJNgvCCY=.ed25519' | |
18 … | + | |
19 … | + ssbServer.actualFriends.get((err, view) => { | |
20 … | + if (err) throw err | |
21 … | + | |
22 … | + // console.log(JSON.stringify(view[id.id], null, 2)) | |
23 … | + | |
24 … | + // actualFriends(view, myId) | |
25 … | + checkFriendShip(view, myId, dominicId) | |
26 … | + | |
27 … | + ssbServer.close() | |
28 … | + }) | |
29 … | + }) | |
30 … | +}) | |
31 … | + | |
32 … | +function actualFriends (view, id) { | |
33 … | + var idData = view[id] | |
34 … | + var orderedData = map(idData.mentions, (value, key) => { | |
35 … | + return { key , value } | |
36 … | + }) | |
37 … | + .sort((a,b) => b.value < a.value ? -1 : 1) | |
38 … | + | |
39 … | + write(orderedData) | |
40 … | +} | |
41 … | + | |
42 … | +function checkFriendShip (view, id1, id2) { | |
43 … | + console.log(`${id1} mentions ${id2} ${view[id1].mentions[id2]} times`) | |
44 … | + console.log(`${id2} mentions ${id1} ${view[id2].mentions[id1]} times`) | |
45 … | +} | |
46 … | + | |
47 … | +function write(object) { | |
48 … | + process.stdout.write(JSON.stringify(object, null, 2)) | |
49 … | +} | |
50 … | + |
3_actual_friends_remote_module/config.js | ||
---|---|---|
@@ -1,0 +1,15 @@ | ||
1 … | +const Config = require('ssb-config/inject') | |
2 … | +// const Config = require('ssb-config') | |
3 … | +const ssbKeys = require('ssb-keys') | |
4 … | +const Path = require('path') | |
5 … | + | |
6 … | +const appName = "ssb" | |
7 … | +const opts = null // can set things in here | |
8 … | + | |
9 … | +const config = Config(appName, opts) | |
10 … | +Object.assign(config, { | |
11 … | + appName, | |
12 … | + keys: ssbKeys.loadOrCreateSync(Path.join(config.path, 'secret')), | |
13 … | +}) | |
14 … | + | |
15 … | +module.exports = config |
3_actual_friends_remote_module/server.js | ||
---|---|---|
@@ -1,0 +1,20 @@ | ||
1 … | +const Server = require('scuttlebot') | |
2 … | +const fs = require('fs') | |
3 … | +const Path = require('path') | |
4 … | + | |
5 … | +const config = require('./config') | |
6 … | +console.log('config:', config) | |
7 … | + | |
8 … | +console.log('*** installing ssb-server plugins ***') | |
9 … | +Server | |
10 … | + .use(require('scuttlebot/plugins/master')) | |
11 … | + .use(require('ssb-server-actual-friends')) | |
12 … | + | |
13 … | +console.log('*** starting ssb-server ***') | |
14 … | +const server = Server(config) | |
15 … | + | |
16 … | +console.log('*** updating manifest ***') | |
17 … | +// this is required for ssb-client to consume | |
18 … | +// it's a list of methods that can be called remotely, without this code we won't be able to call our new plugin | |
19 … | +const manifest = server.getManifest() | |
20 … | +fs.writeFileSync(Path.join(config.path, 'manifest.json'), JSON.stringify(manifest)) |
README.md | ||
---|---|---|
@@ -1,0 +1,66 @@ | ||
1 … | +# Scuttlebot plugins intro | |
2 … | + | |
3 … | +repo ([ssb](%f2PZYbacgJpNq4buNCVsjG6j55K8olw80QxPjF2Teqs=.sha256) | [github](https://www.github.com:mixmix/ssb-server-plugin-intro)) | |
4 … | + | |
5 … | +In these 3 folders, I walk through a progression of making a simple plguin, through to making a plugins which creates and accesses `flumeview` | |
6 … | + | |
7 … | +## Project 1 : Simple Demo | |
8 … | + | |
9 … | +I've put the code into folders because in this project, you need to run a couple of different file seperately | |
10 … | + | |
11 … | +e.g. | |
12 … | +``` | |
13 … | +▾ 1_simple_demo/ | |
14 … | + client.js // start this second | |
15 … | + config.js | |
16 … | + server.js // start this first | |
17 … | + ssb-server-counter.js // our plugin | |
18 … | +``` | |
19 … | + | |
20 … | +For each project you need to start a scuttlebutt-server (scuttlebot/ sbot), which loads in your plugin, and then run you can run the client code that connects to this, and executes commands. e.g. | |
21 … | + | |
22 … | +```bash | |
23 … | +node 1_simple_demo/server.js | |
24 … | + | |
25 … | +// open another terminal in this repo | |
26 … | +node 1_simple_demo/client.js | |
27 … | +``` | |
28 … | + | |
29 … | +### `config.js` | |
30 … | + | |
31 … | +This first project has a config which starts the server with a **test identity** (`ssb_demo`). This means the database will start our empty (creates it at `~/.ssb_demo`) and won't have any of your Patchwork data | |
32 … | + | |
33 … | +### `manifest.json` | |
34 … | + | |
35 … | +This was a major gotcha for me. Basically `ssb-client` needs a list of methods which it is allowed to call remotely (on the server). | |
36 … | +This is provided by it consuming a `manifest.json`. | |
37 … | +You _can_ pass this in as one of the options when you instantiate your client i.e. `Client(keys, { manifest: ... }, fn)`. | |
38 … | +But it's easier to let `ssb-client` go and get it from the default location `~/.ssb/manifest.json` (or more generally `~/.<appName>/manifest.json` | |
39 … | + | |
40 … | + | |
41 … | +That's why there's this line in the **server** file: | |
42 … | +```js | |
43 … | +console.log('*** updating manifest ***') | |
44 … | +// this is required for ssb-client to consume | |
45 … | +// it's a list of methods that can be called remotely, without this code we won't be able to call our new plugin | |
46 … | +const manifest = server.getManifest() | |
47 … | +fs.writeFileSync(Path.join(config.path, 'manifest.json'), JSON.stringify(manifest)) | |
48 … | +``` | |
49 … | + | |
50 … | +Once the server has loaded all it's plugins, get it to generate that manifest. | |
51 … | +Then save that manifest in the place `ssb-client` will go looking for it. | |
52 … | + | |
53 … | +## Project 2 | |
54 … | + | |
55 … | +### `config.js` | |
56 … | + | |
57 … | +This project sets the your identity (in `config.js`) to `ssb`. This is the default identity, so if you'vebeen running Patchwork/ Patchbay etc, this is connecting to your **real identity**. | |
58 … | +Appending messages will publish them to your friends! | |
59 … | +Views are not published so messing around with those is chill. | |
60 … | + | |
61 … | + | |
62 … | +## Project 3 | |
63 … | + | |
64 … | +A trivial increment - I published the module as a plugin, and am requiring it in instead of using the local one. | |
65 … | + | |
66 … | + |
Built with git-ssb-web