-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathapp.js
More file actions
119 lines (103 loc) · 3.25 KB
/
app.js
File metadata and controls
119 lines (103 loc) · 3.25 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
/* eslint-disable no-console */
import { create } from 'ipfs-core'
import { WebSockets } from '@libp2p/websockets'
import * as filters from '@libp2p/websockets/filters'
import Helpers from './helpers.js'
document.addEventListener('DOMContentLoaded', async () => {
const $peerId = document.querySelector('#peer-id')
const $message = document.querySelector('#message')
const $msgs = document.querySelector('#msgs')
const $send = document.querySelector('#send')
const $peer = document.querySelector('#peer')
const $connect = document.querySelector('#connect')
const $pAddrs = document.querySelector('#peers-addrs')
const $room = document.querySelector('#room')
const $roomId = document.querySelector('#room-id')
let roomName = 'default'
const fragment = window.location.hash.substr(1)
if (fragment) {
roomName = fragment
}
$pAddrs.value = ''
$room.innerText = roomName
const repo = () => {
return 'ipfs/pubsub-demo/' + Math.random()
}
const ipfs = await create({
repo: repo(),
relay: {
enabled: true, // enable relay dialer/listener (STOP)
hop: {
enabled: true // make this node a relay (HOP)
}
},
config: {
Bootstrap: []
},
libp2p: {
transports: [
// This is added for local demo!
// In a production environment the default filter should be used
// where only DNS + WSS addresses will be dialed by websockets in the browser.
new WebSockets({
filter: filters.all
})
]
}
})
const peersSet = new Set()
const helpers = Helpers(ipfs, peersSet)
const createRoom = helpers.createRoom
const sendMsg = helpers.sendMsg
const updatePeers = helpers.updatePeers
const updateAddrs = helpers.updateAddrs
const updateSwarmPeers = helpers.updateSwarmPeers
const info = await ipfs.id()
console.log('IPFS node ready with id ' + info.id)
let room = createRoom(roomName)
$peerId.setAttribute('style', '')
$peerId.innerHTML = `<li>${info.id}</li>`
$send.addEventListener('click', () => {
sendMsg(room)
})
$room.addEventListener('dblclick', () => {
$room.setAttribute('style', 'display: none')
$roomId.setAttribute('style', 'display: inline')
})
$roomId.addEventListener('keyup', (event) => {
const kp = event.keyCode || event.which
if (kp === 13 && $roomId.value.length > 0) {
const name = $roomId.value
$room.innerText = name
$room.setAttribute('style', 'display: inline')
$roomId.setAttribute('style', 'display: none')
$roomId.value = ''
$msgs.innerHTML = ''
window.location.hash = name
room = createRoom(name)
peersSet.clear()
updatePeers(peersSet)
} else if (kp === 27) {
$roomId.value = ''
$room.setAttribute('style', 'display: inline')
$roomId.setAttribute('style', 'display: none')
}
})
$message.addEventListener('keyup', (event) => {
const kp = event.keyCode || event.which
if (kp === 13) {
sendMsg(room)
}
})
$connect.addEventListener('click', async () => {
const peer = $peer.value.trim()
$peer.value = ''
try {
await ipfs.swarm.connect(peer)
await updateAddrs(ipfs)
await updateSwarmPeers(ipfs)
} catch (err) {
return console.error(err)
}
})
})