mirror of
https://github.com/aljazceru/nostr-watch.git
synced 2025-12-17 05:24:19 +01:00
first version, reviving @rsbondi's work.
This commit is contained in:
4
.gitignore
vendored
Normal file
4
.gitignore
vendored
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
yarn.lock
|
||||||
|
node_modules
|
||||||
|
*.wasm
|
||||||
|
out.js
|
||||||
10
.prettierrc.yaml
Normal file
10
.prettierrc.yaml
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
semi: false
|
||||||
|
arrowParens: avoid
|
||||||
|
insertPragma: false
|
||||||
|
printWidth: 80
|
||||||
|
proseWrap: preserve
|
||||||
|
singleQuote: true
|
||||||
|
trailingComma: none
|
||||||
|
useTabs: false
|
||||||
|
jsxBracketSameLine: false
|
||||||
|
bracketSpacing: false
|
||||||
4
README
Normal file
4
README
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
nostr-relay-registry
|
||||||
|
--------------------
|
||||||
|
|
||||||
|
a dynamic registry of nostr relays that tests for very basic tasks in real-time.
|
||||||
8
index.html
Normal file
8
index.html
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
|
||||||
|
<meta charset="utf-8" />
|
||||||
|
<title>Nostr Relay Registry</title>
|
||||||
|
|
||||||
|
<div id="app"></div>
|
||||||
|
|
||||||
|
<script src="out.js"></script>
|
||||||
101
main.js
Normal file
101
main.js
Normal file
@@ -0,0 +1,101 @@
|
|||||||
|
import {createApp, h} from 'vue'
|
||||||
|
import {relayConnect} from 'nostr-tools/relay'
|
||||||
|
|
||||||
|
const App = {
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
relays: [
|
||||||
|
'wss://nostr-pub.wellorder.net',
|
||||||
|
'wss://relayer.fiatjaf.com',
|
||||||
|
'wss://nostr.rocks'
|
||||||
|
],
|
||||||
|
status: {}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
mounted() {
|
||||||
|
this.connections = {}
|
||||||
|
this.relays.forEach(async url => {
|
||||||
|
this.status[url] = {}
|
||||||
|
|
||||||
|
try {
|
||||||
|
let conn = relayConnect(
|
||||||
|
url,
|
||||||
|
() => {},
|
||||||
|
() => {
|
||||||
|
this.status[url].didConnect = false
|
||||||
|
}
|
||||||
|
)
|
||||||
|
this.status[url].didConnect = true
|
||||||
|
|
||||||
|
try {
|
||||||
|
await conn.publish({
|
||||||
|
id: '41ce9bc50da77dda5542f020370ecc2b056d8f2be93c1cedf1bf57efcab095b0',
|
||||||
|
pubkey:
|
||||||
|
'5a462fa6044b4b8da318528a6987a45e3adf832bd1c64bd6910eacfecdf07541',
|
||||||
|
created_at: 1640305962,
|
||||||
|
kind: 1,
|
||||||
|
tags: [],
|
||||||
|
content: 'running branle',
|
||||||
|
sig: '08e6303565e9282f32bed41eee4136f45418f366c0ec489ef4f90d13de1b3b9fb45e14c74f926441f8155236fb2f6fef5b48a5c52b19298a0585a2c06afe39ed'
|
||||||
|
})
|
||||||
|
this.status[url].didPublish = true
|
||||||
|
} catch (err) {
|
||||||
|
this.status[url].didPublish = false
|
||||||
|
}
|
||||||
|
|
||||||
|
let {unsub} = conn.sub(
|
||||||
|
{
|
||||||
|
cb: () => {
|
||||||
|
this.status[url].didQuery = true
|
||||||
|
unsub()
|
||||||
|
clearTimeout(willUnsub)
|
||||||
|
},
|
||||||
|
filter: {
|
||||||
|
id: '41ce9bc50da77dda5542f020370ecc2b056d8f2be93c1cedf1bf57efcab095b0'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
'nostr-registry'
|
||||||
|
)
|
||||||
|
let willUnsub = setTimeout(() => {
|
||||||
|
unsub()
|
||||||
|
this.status[url].didQuery = false
|
||||||
|
}, 3000)
|
||||||
|
} catch (err) {
|
||||||
|
this.status[url].didConnect = false
|
||||||
|
}
|
||||||
|
})
|
||||||
|
},
|
||||||
|
|
||||||
|
render() {
|
||||||
|
return h('table', {style: {fontSize: '28px'}}, [
|
||||||
|
h('tr', [h('th'), h('th', 'connect'), h('th', 'read'), h('th', 'write')]),
|
||||||
|
...this.relays.map(url =>
|
||||||
|
h('tr', [
|
||||||
|
h('th', {style: {textAlign: 'right'}}, url),
|
||||||
|
...['didConnect', 'didQuery', 'didPublish'].map(attr =>
|
||||||
|
h(
|
||||||
|
'td',
|
||||||
|
{
|
||||||
|
style: {
|
||||||
|
fontSize: '50px',
|
||||||
|
textAlign: 'center',
|
||||||
|
padding: '5px 35px',
|
||||||
|
color:
|
||||||
|
this.status?.[url]?.[attr] === true
|
||||||
|
? 'green'
|
||||||
|
: this.status?.[url]?.[attr] === false
|
||||||
|
? 'red'
|
||||||
|
: 'silver'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
'•'
|
||||||
|
)
|
||||||
|
)
|
||||||
|
])
|
||||||
|
)
|
||||||
|
])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
createApp(App).mount('#app')
|
||||||
15
package.json
Normal file
15
package.json
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
{
|
||||||
|
"dependencies": {
|
||||||
|
"buffer": "^6.0.3",
|
||||||
|
"nostr-tools": "^0.12.4",
|
||||||
|
"readable-stream": "^3.6.0",
|
||||||
|
"vue": "3"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"webpack": "^5.65.0",
|
||||||
|
"webpack-cli": "^4.9.1"
|
||||||
|
},
|
||||||
|
"scripts": {
|
||||||
|
"build": "webpack"
|
||||||
|
}
|
||||||
|
}
|
||||||
21
webpack.config.js
Normal file
21
webpack.config.js
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
const path = require('path')
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
mode: 'development',
|
||||||
|
entry: './main.js',
|
||||||
|
output: {
|
||||||
|
path: __dirname,
|
||||||
|
filename: 'out.js'
|
||||||
|
},
|
||||||
|
experiments: {asyncWebAssembly: true},
|
||||||
|
resolve: {
|
||||||
|
alias: {
|
||||||
|
stream: 'readable-stream'
|
||||||
|
},
|
||||||
|
fallback: {
|
||||||
|
buffer: 'buffer/index.js',
|
||||||
|
stream: 'readable-stream/readable.js',
|
||||||
|
crypto: false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user