Socket
Socket
Sign inDemoInstall

immers

Package Overview
Dependencies
214
Maintainers
1
Versions
11
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

Comparing version 0.0.1 to 0.0.2

3

config.json
{
"port": 8081,
"domain": "localhost:8081",
"hub": "https://localhost:8080"
"hub": "https://localhost:8080",
"name": "immers.space"
}

@@ -0,1 +1,2 @@

'use strict'
const fs = require('fs')

@@ -8,4 +9,7 @@ const path = require('path')

const ActivitypubExpress = require('activitypub-express')
const socketio = require('socket.io')
const request = require('request-promise-native')
const { port, domain, hub } = JSON.parse(fs.readFileSync(path.join(__dirname, 'config.json')))
const config = JSON.parse(fs.readFileSync(path.join(__dirname, 'config.json')))
const { port, domain, hub, name } = config
const app = express()

@@ -32,7 +36,9 @@ const routes = {

const client = new MongoClient('mongodb://localhost:27017', { useUnifiedTopology: true, useNewUrlParser: true })
const hubCors = cors({ origin: hub })
app.use(express.urlencoded({ extended: false }))
app.use(express.urlencoded({ extended: true }))
app.use(express.json({ type: ['application/json'].concat(apex.consts.jsonldTypes) }))
app.use(cors({ origin: hub }))
app.use(hubCors)
// preflight needed for some socketio requests
app.options('*', hubCors)
app.use(apex)

@@ -101,5 +107,78 @@ app

// custom c2s apis
async function friendsLocations (req, res, next) {
const locals = res.locals.apex
const friends = await apex.store.db.collection('streams').aggregate([
{ $match: { '_meta.collection': locals.target.inbox[0], type: { $in: ['Arrive', 'Leave', 'Accept'] } } },
{ $sort: { _id: -1 } },
{ $group: { _id: '$actor', loc: { $first: '$$ROOT' } } },
{ $replaceRoot: { newRoot: '$loc' } },
{ $lookup: { from: 'objects', localField: 'actor', foreignField: 'id', as: 'actor' } },
{ $project: { _id: 0, 'actor.publicKey': 0 } }
]).toArray()
locals.result = {
id: `https://${domain}${req.originalUrl}`,
type: 'OrderedCollection',
totalItems: friends.length,
orderedItems: friends
}
next()
}
app.get('/u/:actor/friends', [
apex.net.validators.jsonld,
apex.net.validators.targetActor,
friendsLocations,
apex.net.responders.result
])
const key = fs.readFileSync(path.join(__dirname, 'certs', 'server.key'))
const cert = fs.readFileSync(path.join(__dirname, 'certs', 'server.cert'))
const server = https.createServer({ key, cert }, app)
// streaming updates
const profilesSockets = new Map()
const io = socketio(server)
io.on('connection', socket => {
socket.immers = {}
socket.on('disconnect', async () => {
if (socket.immers.id) {
profilesSockets.delete(socket.immers.id)
}
if (socket.immers.outbox && socket.immers.leave) {
request({
method: 'POST',
url: socket.immers.outbox,
headers: {
'Content-Type': apex.consts.jsonldOutgoingType
},
json: true,
simple: false,
body: await apex.toJSONLD(socket.immers.leave)
}).catch(err => console.log(err.message))
delete socket.immers.leave
}
})
socket.on('profile', id => {
if (!id) return
socket.immers.id = id
profilesSockets.set(id, socket)
})
socket.on('entered', msg => {
socket.immers.outbox = msg.outbox
socket.immers.leave = msg.leave
})
})
function onInboxFriendUpdate (msg) {
if (!msg.recipient) return // ignore outbox
const liveSocket = profilesSockets.get(msg.recipient.id)
if (liveSocket) {
liveSocket.emit('friends-update')
}
}
app.on('apex-arrive', onInboxFriendUpdate)
app.on('apex-leave', onInboxFriendUpdate)
app.on('apex-accept', onInboxFriendUpdate)
client

@@ -109,6 +188,16 @@ .connect({ useNewUrlParser: true })

apex.store.db = client.db('immers')
return apex.store.setup()
// Place object representing this node
const immer = {
id: `https://${domain}/o/immer`,
type: 'Place',
name,
url: `https://${domain}`
}
return apex.fromJSONLD(immer)
})
.then(immer => {
return apex.store.setup(immer)
})
.then(() => {
return https.createServer({ key, cert }, app).listen(port, () => console.log(`apex app listening on port ${port}`))
return server.listen(port, () => console.log(`apex app listening on port ${port}`))
})
{
"name": "immers",
"version": "0.0.1",
"version": "0.0.2",
"description": "ActivityPub server for the metaverse",

@@ -31,3 +31,4 @@ "main": "index.js",

"express": "^4.17.1",
"mongodb": "^3.5.7"
"mongodb": "^3.5.7",
"socket.io": "^2.3.0"
},

@@ -34,0 +35,0 @@ "devDependencies": {

# immers
ActivityPub server for immers.space - a decentralized virtual reality metaverse platform powered by Mozilla Hubs.
ActivityPub server for immers.space - a decentralized virtual reality metaverse platform powered by Mozilla Hubs and activitypub-express.
Server
* [x] Get followers with current location
* [x] Streaming connection for updates/notifications
Hubs client
* [x] Follow button on users
* [x] List followers with location in presence panel
* [x] Update notification icon in VR
* [x] Publish Arrive/Leave activities
SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc