Skip to content

Instantly share code, notes, and snippets.

@StoneyEagle
Forked from clarkio/obs-websocket.js
Created March 6, 2024 22:59
Show Gist options
  • Save StoneyEagle/81577849f3cfc4bdd33145a9453b2026 to your computer and use it in GitHub Desktop.
Save StoneyEagle/81577849f3cfc4bdd33145a9453b2026 to your computer and use it in GitHub Desktop.
Connecting to OBS Websocket Server with Authentication
const obsConfig = {
address: '127.0.0.1',
port: 4455,
password: 'your-password'
}
const socket = new WebSocket(`ws://${obsConfig.address}:${obsConfig.port}`);
const password = obsConfig.password;
socket.onopen = function(event) {
console.log('Connected to OBS WebSocket server');
};
socket.onclose = function(event) {
console.log('Disconnected from OBS WebSocket server');
console.log('Reason:', event.reason);
console.log('Code:', event.code);
};
socket.onerror = function(error) {
console.error('WebSocket error:', error);
};
socket.onmessage = async function(event) {
console.log('Received message:', event.data);
const response = JSON.parse(event.data);
// If the authentication is required, send a response
if (response.d.authentication && response.op === 0) {
const salt = response.d.authentication.salt;
const challenge = response.d.authentication.challenge;
const secret = await sha256Hash(password + salt);
const authResponseHash = await sha256Hash(secret + challenge);
const payload = {
op: 1,
d: {
rpcVersion: 1,
authentication: authResponseHash,
}
}
socket.send(JSON.stringify(payload));
}
};
async function sha256Hash(inputText) {
const utf8 = new TextEncoder().encode(inputText);
const hashBuffer = await crypto.subtle.digest('SHA-256', utf8);
const hashArray = Array.from(new Uint8Array(hashBuffer));
const base64Hash = btoa(String.fromCharCode(...hashArray));
return base64Hash;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment