Skip to content

Commit be04a50

Browse files
committed
creating promise for client
1 parent 51497eb commit be04a50

File tree

5 files changed

+116
-94
lines changed

5 files changed

+116
-94
lines changed

.gitignore

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
node_modules
2-
site/page-script.js
3-
site/page-script.js.map
2+
site/connect-ssb.js
3+
site/connect-ssb.js.map
44
webext/content-script.js
55
webext/content-script.js.LICENSE.txt
66
webext/content-script.js.map

rollup.config.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -73,12 +73,12 @@ export default [{
7373
clearScreen: false
7474
}
7575
}, {
76-
input: 'src/page-script.js',
76+
input: 'src/connect-ssb-page-script.js',
7777
output: {
7878
sourcemap: true,
7979
format: 'iife',
8080
name: 'app',
81-
file: 'site/page-script.js',
81+
file: 'site/connect-ssb.js',
8282
intro: 'const global = window;'
8383
},
8484
plugins: [

site/page.html

Lines changed: 34 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,42 @@
22
<html>
33
<head>
44
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
5+
<style>
6+
:not(.waited) .after_wait {
7+
display: none
8+
}
9+
.waited .after_wait {
10+
display: block
11+
}
12+
</style>
513
</head>
614
<body>
715
<p>RPC connection with SSB via native messaging.</p>
8-
<div id="output"></div>
9-
<script src="page-script.js"></script>
16+
<div id="output">
17+
<div style="background-color: yellow;" class="after_wait">
18+
This Page needs to access Scuttlebut. Make sure that Scuttle Shell Browser is installed and that "SSB access" is
19+
switched on for this page.
20+
</div>
21+
</div>
22+
<script src="connect-ssb.js"></script>
23+
<script>
24+
const outElem = document.getElementById('output')
25+
26+
const opts = {
27+
limit: 100,
28+
reverse: true
29+
}
30+
connectSsb().then(ssb => {
31+
outElem.innerHTML = ''
32+
pull(
33+
client.query.read(opts),
34+
pull.drain(msg => {
35+
outElem.innerHTML += `<pre>${JSON.stringify(msg, null, 2)}</pre>`
36+
outElem.innerHTML += '<hr/>'
37+
})
38+
)
39+
})
40+
setTimeout(() => document.body.classList.add('waited'), 1000)
41+
</script>
1042
</body>
1143
</html>

src/connect-ssb-page-script.js

Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
import MRPC from 'muxrpc'
2+
import { pull } from 'pull-stream'
3+
import { Buffer } from 'buffer'
4+
5+
6+
window.pull = pull
7+
8+
window.connectSsb = function() {
9+
return new Promise((resolve, reject) => {
10+
11+
let messageDataCallback = null
12+
let messageDataBuffer = []
13+
14+
const fromWebExt = function read(abort, cb) {
15+
if (messageDataBuffer.length > 0) {
16+
const data = messageDataBuffer[0]
17+
messageDataBuffer = messageDataBuffer.splice(1)
18+
cb(null, data)
19+
} else {
20+
messageDataCallback = cb
21+
}
22+
}
23+
24+
25+
window.addEventListener("message", (event) => {
26+
if (event.source == window &&
27+
event.data &&
28+
event.data.direction == "from-content-script") {
29+
const asBuffer = Buffer.from(event.data.message)
30+
if (messageDataCallback) {
31+
const _messageDataCallback = messageDataCallback
32+
messageDataCallback = null
33+
_messageDataCallback(null, asBuffer)
34+
} else {
35+
messageDataBuffer.push(asBuffer)
36+
}
37+
}
38+
});
39+
40+
const toWebExt = function sink(done) {
41+
return function (source) {
42+
source(null, function more(end,data) {
43+
if (end) return done()
44+
window.postMessage({
45+
direction: "from-page-script",
46+
message: data
47+
}, "*")
48+
source(null, more)
49+
})
50+
}
51+
}
52+
const client = MRPC(function (err, manifest) {
53+
if (err) reject(err)
54+
else {
55+
56+
//console.log(JSON.stringify(manifest,undefined, 2))
57+
58+
console.log('adding client to window')
59+
window.client = client
60+
61+
resolve(client)
62+
}
63+
})()
64+
65+
const onClose = () => {
66+
console.log('connected to muxrpc server')
67+
}
68+
69+
const clientStream = client.createStream(onClose)
70+
pull(
71+
fromWebExt,
72+
clientStream,
73+
toWebExt()
74+
)
75+
})
76+
}
77+
78+

src/page-script.js

Lines changed: 0 additions & 88 deletions
This file was deleted.

0 commit comments

Comments
 (0)