Compare commits
119 Commits
master
...
level-load
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,144 @@ |
|||||||
|
/* nodejs server to grab the current URL as tridactyl command and serve back page with content */ |
||||||
|
|
||||||
|
// mkdir tabs polydata
|
||||||
|
|
||||||
|
// autocmd TabEnter .* js fetch("http://localhost:7777/?url="+window.location.href)
|
||||||
|
// might be interesting to keep track of document.referrer too
|
||||||
|
// consider instead Firefox Account
|
||||||
|
|
||||||
|
const fs = require('fs'); |
||||||
|
const express = require('express') |
||||||
|
const cors = require('cors') |
||||||
|
const https = require('https') |
||||||
|
const path = require('path') |
||||||
|
const {execSync} = require('child_process'); |
||||||
|
const fetch = require('node-fetch'); |
||||||
|
|
||||||
|
const app = express() |
||||||
|
app.use(cors()) |
||||||
|
|
||||||
|
app.get('/getpoly', function(req, res){ |
||||||
|
const polypath = "polydata" |
||||||
|
const url = "https://static.poly.pizza/" |
||||||
|
const extensions = [".glb",".webp"] |
||||||
|
const filepath = path.join(__dirname, polypath, req.query.id+extensions[0]) |
||||||
|
if (!fs.existsSync(filepath)){ |
||||||
|
execSync("wget "+url+req.query.id+extensions[0], {cwd:path.join(__dirname,polypath)}) |
||||||
|
execSync("wget "+url+req.query.id+extensions[1], {cwd:path.join(__dirname,polypath)}) |
||||||
|
} |
||||||
|
res.send("received"); |
||||||
|
}); |
||||||
|
|
||||||
|
app.get('/voiceinput', function(req, res){ |
||||||
|
console.log(req.query.keyword) |
||||||
|
sseSend(req.query.keyword) |
||||||
|
res.send("received"); |
||||||
|
}); |
||||||
|
|
||||||
|
app.get('/search', async function(req, res){ |
||||||
|
const response = await fetch('https://api.poly.pizza/v1/search/'+req.query.keyword, { |
||||||
|
headers: {'x-auth-token': 'e821ece91d1a43c1ac70299368a72b8a'} |
||||||
|
}); |
||||||
|
const data = await response.json(); |
||||||
|
|
||||||
|
res.json(data); |
||||||
|
}); |
||||||
|
|
||||||
|
app.get('/cabin', function(req, res){ |
||||||
|
res.sendFile(path.join(__dirname, 'cabin.html')) |
||||||
|
}); |
||||||
|
|
||||||
|
app.get('/', function(req, res){ |
||||||
|
res.sendFile(path.join(__dirname, 'index.html')) |
||||||
|
}); |
||||||
|
|
||||||
|
app.get('/tabs', function(req, res){ |
||||||
|
res.json({"files":fs.readdirSync("tabs")}) |
||||||
|
}); |
||||||
|
|
||||||
|
// resulting in possibly getting /static/screens/1652811988.png
|
||||||
|
app.get('/screens', function(req, res){ |
||||||
|
res.json({"files":fs.readdirSync("screens")}) |
||||||
|
}); |
||||||
|
|
||||||
|
const container = "docker run --rm -e UID=$(id -u) -e GID=$(id -g) " |
||||||
|
// could try losing priviledges instead, if possible
|
||||||
|
fs.watch("cabin.html", (eventType, filename) => { |
||||||
|
if (eventType == "change") sseSend(filename+" modified") |
||||||
|
}) |
||||||
|
|
||||||
|
|
||||||
|
// SSE to force reload client-side
|
||||||
|
var connectedClients = [] |
||||||
|
function sseSend(data){ |
||||||
|
connectedClients.map( res => { |
||||||
|
console.log("notifying client") // seems to be call very often (might try to send to closed clients?)
|
||||||
|
res.write(`data: ${JSON.stringify({status: data})}\n\n`); |
||||||
|
}) |
||||||
|
} |
||||||
|
|
||||||
|
app.get('/streaming', (req, res) => { |
||||||
|
res.setHeader('Cache-Control', 'no-cache'); |
||||||
|
res.setHeader('Content-Type', 'text/event-stream'); |
||||||
|
//res.setHeader('Access-Control-Allow-Origin', '*');
|
||||||
|
// alread handled at the nginx level
|
||||||
|
res.setHeader('Connection', 'keep-alive'); |
||||||
|
res.setHeader('X-Accel-Buffering', 'no'); |
||||||
|
res.flushHeaders(); // flush the headers to establish SSE with client
|
||||||
|
|
||||||
|
res.write(`data: ${JSON.stringify({event: "userconnect"})}\n\n`); // res.write() instead of res.send()
|
||||||
|
connectedClients.push(res) |
||||||
|
|
||||||
|
// If client closes connection, stop sending events
|
||||||
|
res.on('close', () => { |
||||||
|
console.log('client dropped me'); |
||||||
|
res.end(); |
||||||
|
}); |
||||||
|
}); |
||||||
|
|
||||||
|
// consider instead CloudInit so that it can be delegated to another machine
|
||||||
|
// keeping a pool of available machine would start with a single one
|
||||||
|
// namely that it is possible to run multiple containers on 1 instance, simultaneously or not.
|
||||||
|
containersSupportedByLanguage = { |
||||||
|
bash: "debian ",
|
||||||
|
julia: "julia julia -E ", |
||||||
|
python: "python python -c ", |
||||||
|
// avoided file specific languages
|
||||||
|
// could be done by writing to a file in the container e.g /tmp/file.c then passing it as parameter
|
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
app.get('/invitereload', function(req, res){ |
||||||
|
sseSend("reload") |
||||||
|
res.json({"res":"reload requested"}) |
||||||
|
}) |
||||||
|
|
||||||
|
app.get('/command', function(req, res){ |
||||||
|
var req = req.query.command |
||||||
|
var foundContainer = containersSupportedByLanguage[req.split(" ")[0]] |
||||||
|
var code = req.split(" ").slice(1).join(" ") |
||||||
|
if (foundContainer) |
||||||
|
res.json({"res":execSync(container+foundContainer+code).toString()}) |
||||||
|
else |
||||||
|
res.json({"res":"language not supported"}) |
||||||
|
}); |
||||||
|
// could specify name, it then contiue instance
|
||||||
|
|
||||||
|
// ~/.openai-codex-test-xr
|
||||||
|
// potential alt backend to generate
|
||||||
|
|
||||||
|
app.get('/currenturl', function(req, res){ |
||||||
|
// could instead be the webxr page
|
||||||
|
let now = + new Date() |
||||||
|
fs.appendFile('currentURL.txt', now+" "+req.query.url+" "+req.query.referrer+"\n", function (err) { if (err) throw err; }); |
||||||
|
// could be JSON instead
|
||||||
|
res.json({"status":"test"}) |
||||||
|
}); |
||||||
|
|
||||||
|
app.use('/static', express.static(path.join(__dirname, '.'))) |
||||||
|
// including currentURL.txt
|
||||||
|
|
||||||
|
const port = 7777 |
||||||
|
app.listen(port, () => |
||||||
|
console.log('listening on port', port) |
||||||
|
); |
Loading…
Reference in new issue