68 lines
2.2 KiB
TypeScript
68 lines
2.2 KiB
TypeScript
import { createServer } from "node:http";
|
|
import { WebSocketServer } from "npm:ws";
|
|
import type {
|
|
WebSocket as WSWebSocket,
|
|
WebSocketServer as _WebSocketServer,
|
|
} from "npm:@types/ws";
|
|
import { authenticateUser } from "./utils.ts";
|
|
import { getSupabaseClient } from "./supabase.ts";
|
|
import { SupabaseClient } from "@supabase/supabase-js";
|
|
import { isDev } from "./utils.ts";
|
|
import { connectToOpenAI } from "./models/openai.ts";
|
|
import { connectToGemini } from "./models/gemini.ts";
|
|
|
|
const server = createServer();
|
|
|
|
const wss: _WebSocketServer = new WebSocketServer({ noServer: true });
|
|
|
|
wss.on("connection", async (ws: WSWebSocket, payload: IPayload) => {
|
|
// await connectToOpenAI(ws, payload);
|
|
await connectToGemini(ws, payload);
|
|
});
|
|
|
|
server.on("upgrade", async (req, socket, head) => {
|
|
console.log("upgrade");
|
|
let user: IUser;
|
|
let supabase: SupabaseClient;
|
|
let authToken: string;
|
|
try {
|
|
const { authorization: authHeader, "x-wifi-rssi": rssi } = req.headers;
|
|
authToken = authHeader?.replace("Bearer ", "") ?? "";
|
|
const wifiStrength = parseInt(rssi as string); // Convert to number
|
|
|
|
// You can now use wifiStrength in your code
|
|
console.log("WiFi RSSI:", wifiStrength); // Will log something like -50
|
|
|
|
// Remove debug logging
|
|
if (!authToken) {
|
|
socket.write("HTTP/1.1 401 Unauthorized\r\n\r\n");
|
|
socket.destroy();
|
|
return;
|
|
}
|
|
|
|
supabase = getSupabaseClient(authToken as string);
|
|
user = await authenticateUser(supabase, authToken as string);
|
|
} catch (_e: any) {
|
|
socket.write("HTTP/1.1 401 Unauthorized\r\n\r\n");
|
|
socket.destroy();
|
|
return;
|
|
}
|
|
|
|
wss.handleUpgrade(req, socket, head, (ws) => {
|
|
wss.emit("connection", ws, {
|
|
user,
|
|
supabase,
|
|
timestamp: new Date().toISOString(),
|
|
});
|
|
});
|
|
});
|
|
|
|
if (isDev) { // deno run -A --env-file=.env main.ts
|
|
const HOST = Deno.env.get("HOST") || "0.0.0.0";
|
|
const PORT = Deno.env.get("PORT") || "8000";
|
|
server.listen(Number(PORT), HOST, () => {
|
|
console.log(`Audio capture server running on ws://${HOST}:${PORT}`);
|
|
});
|
|
} else {
|
|
server.listen(8080);
|
|
}
|