45 lines
1.1 KiB
JavaScript
45 lines
1.1 KiB
JavaScript
|
// server.js
|
||
|
import express from 'express';
|
||
|
import { WebSocketServer } from 'ws';
|
||
|
import { createServer } from 'http';
|
||
|
import WebSocket from 'ws';
|
||
|
|
||
|
const app = express();
|
||
|
const server = createServer(app);
|
||
|
const wss = new WebSocketServer({ server });
|
||
|
|
||
|
const OPENAI_API_KEY = process.env.OPENAI_API_KEY;
|
||
|
|
||
|
wss.on('connection', (clientWs) => {
|
||
|
const openaiWs = new WebSocket('wss://api.openai.com/v1/realtime', {
|
||
|
headers: {
|
||
|
Authorization: `Bearer ${OPENAI_API_KEY}`
|
||
|
}
|
||
|
});
|
||
|
|
||
|
openaiWs.on('open', () => {
|
||
|
console.log('Connected to OpenAI');
|
||
|
});
|
||
|
|
||
|
// Proxy messages from client to OpenAI
|
||
|
clientWs.on('message', (message) => {
|
||
|
if (openaiWs.readyState === WebSocket.OPEN) {
|
||
|
openaiWs.send(message);
|
||
|
}
|
||
|
});
|
||
|
|
||
|
// Proxy messages from OpenAI back to client
|
||
|
openaiWs.on('message', (message) => {
|
||
|
if (clientWs.readyState === WebSocket.OPEN) {
|
||
|
clientWs.send(message);
|
||
|
}
|
||
|
});
|
||
|
|
||
|
openaiWs.on('close', () => clientWs.close());
|
||
|
clientWs.on('close', () => openaiWs.close());
|
||
|
});
|
||
|
|
||
|
server.listen(3001, () => {
|
||
|
console.log('WebSocket proxy listening on ws://localhost:3001');
|
||
|
});
|