Luigit
repositories / dotfiles

dotfiles

bugabingas dorkfiles

owned by admin

quickshell/nuguland/test-fixtures/ui/niri-integration-proxy.mjs

Raw
// Outputs-only controlled server. The QML subscription and actions never use it.
import assert from 'node:assert/strict';
import { readFileSync, realpathSync, lstatSync } from 'node:fs';
import { createConnection, createServer } from 'node:net';
import { dirname, join } from 'node:path';

assert.equal(process.env.NUGULAND_UI_SANDBOX, '1');
assert.equal(process.env.HOME, '/home/test');
const [socket, native, modeFile] = process.argv.slice(2);
const runtime = realpathSync(process.env.XDG_RUNTIME_DIR);
assert.equal(dirname(socket), runtime);
assert.equal(dirname(realpathSync(native)), runtime);
assert(lstatSync(native).isSocket());
assert.equal(modeFile, join(runtime, 'niri-integration-outputs.json'));
createServer({ allowHalfOpen: true }, client => {
    let request = '';
    client.on('error', error => { throw error; });
    function first(chunk) {
        request += chunk;
        assert(request.length < 65536);
        if (!request.includes('\n')) return;
        client.removeListener('data', first);
        const name = JSON.parse(request.trim());
        // niri msg requests Version when an output query is rejected.
        assert(['Outputs', 'Version'].includes(name));
        const mode = JSON.parse(readFileSync(modeFile, 'utf8'));
        if (name === 'Outputs' && mode !== null) {
            client.end(JSON.stringify(mode) + '\n');
            return;
        }
        let reply = '';
        const upstream = createConnection(native, () => upstream.end(request));
        upstream.on('error', error => { throw error; });
        upstream.on('data', chunk => {
            reply += chunk;
            assert(reply.length < 1024 * 1024);
            if (reply.includes('\n')) {
                JSON.parse(reply.trim());
                client.end(reply);
                upstream.destroy();
            }
        });
    }
    client.on('data', first);
}).listen(socket, () => console.log('output fixture ready'));