Spaces:
Running
Running
// server/index.ts | |
import express2 from "express"; | |
import { fileURLToPath } from "url"; | |
import { dirname } from "path"; | |
// Get __dirname equivalent for ES modules | |
const __filename = fileURLToPath(import.meta.url); | |
const __dirname = dirname(__filename); | |
// server/routes.ts | |
import { createServer } from "http"; | |
async function registerRoutes(app2) { | |
app2.get("/api/download-audio/:videoId", async (req, res) => { | |
try { | |
const { videoId } = req.params; | |
const response = await fetch(`https://backendmix.vercel.app/streams/${videoId}`); | |
if (!response.ok) { | |
return res.status(404).json({ error: "Stream not found" }); | |
} | |
const data = await response.json(); | |
if (data.audioStreams && data.audioStreams.length > 0) { | |
const audioStream = data.audioStreams[0]; | |
const audioResponse = await fetch(audioStream.url); | |
if (!audioResponse.ok) { | |
return res.status(404).json({ error: "Audio stream not available" }); | |
} | |
res.setHeader("Content-Type", "audio/webm"); | |
res.setHeader("Cache-Control", "public, max-age=86400"); | |
const audioBuffer = await audioResponse.arrayBuffer(); | |
res.send(Buffer.from(audioBuffer)); | |
} else { | |
res.status(404).json({ error: "No audio streams available" }); | |
} | |
} catch (error) { | |
console.error("Audio download error:", error); | |
res.status(500).json({ error: "Failed to download audio" }); | |
} | |
}); | |
const httpServer = createServer(app2); | |
return httpServer; | |
} | |
// server/vite.ts | |
import express from "express"; | |
import fs from "fs"; | |
import path2 from "path"; | |
import { createServer as createViteServer, createLogger } from "vite"; | |
// vite.config.ts | |
import { defineConfig } from "vite"; | |
import react from "@vitejs/plugin-react"; | |
import path from "path"; | |
import runtimeErrorOverlay from "@replit/vite-plugin-runtime-error-modal"; | |
// Get __dirname for vite config | |
const getViteConfigDirname = () => { | |
const __filename = fileURLToPath(import.meta.url); | |
return dirname(__filename); | |
}; | |
var vite_config_default = defineConfig({ | |
plugins: [ | |
react(), | |
runtimeErrorOverlay(), | |
...process.env.NODE_ENV !== "production" && process.env.REPL_ID !== undefined ? [ | |
await import("@replit/vite-plugin-cartographer").then( | |
(m) => m.cartographer() | |
) | |
] : [] | |
], | |
resolve: { | |
alias: { | |
"@": path.resolve(getViteConfigDirname(), "client", "src"), | |
"@shared": path.resolve(getViteConfigDirname(), "shared"), | |
"@assets": path.resolve(getViteConfigDirname(), "attached_assets") | |
} | |
}, | |
root: path.resolve(getViteConfigDirname(), "client"), | |
build: { | |
outDir: path.resolve(getViteConfigDirname(), "dist/public"), | |
emptyOutDir: true | |
}, | |
server: { | |
fs: { | |
strict: true, | |
deny: ["**/.*"] | |
} | |
} | |
}); | |
// server/vite.ts | |
import { nanoid } from "nanoid"; | |
var viteLogger = createLogger(); | |
function log(message, source = "express") { | |
const formattedTime = (new Date()).toLocaleTimeString("en-US", { | |
hour: "numeric", | |
minute: "2-digit", | |
second: "2-digit", | |
hour12: true | |
}); | |
console.log(`${formattedTime} [${source}] ${message}`); | |
} | |
async function setupVite(app2, server) { | |
const serverOptions = { | |
middlewareMode: true, | |
hmr: { server }, | |
allowedHosts: true | |
}; | |
const vite = await createViteServer({ | |
...vite_config_default, | |
configFile: false, | |
customLogger: { | |
...viteLogger, | |
error: (msg, options) => { | |
viteLogger.error(msg, options); | |
process.exit(1); | |
} | |
}, | |
server: serverOptions, | |
appType: "custom" | |
}); | |
app2.use(vite.middlewares); | |
app2.use("*", async (req, res, next) => { | |
const url = req.originalUrl; | |
try { | |
const clientTemplate = path2.resolve( | |
__dirname, | |
"..", | |
"client", | |
"index.html" | |
); | |
let template = await fs.promises.readFile(clientTemplate, "utf-8"); | |
template = template.replace( | |
`src="/src/main.tsx"`, | |
`src="/src/main.tsx?v=${nanoid()}"` | |
); | |
const page = await vite.transformIndexHtml(url, template); | |
res.status(200).set({ "Content-Type": "text/html" }).end(page); | |
} catch (e) { | |
vite.ssrFixStacktrace(e); | |
next(e); | |
} | |
}); | |
} | |
function serveStatic(app2) { | |
const distPath = path2.resolve(__dirname, "public"); | |
if (!fs.existsSync(distPath)) { | |
throw new Error( | |
`Could not find the build directory: ${distPath}, make sure to build the client first` | |
); | |
} | |
app2.use(express.static(distPath)); | |
app2.use("*", (_req, res) => { | |
res.sendFile(path2.resolve(distPath, "index.html")); | |
}); | |
} | |
// server/index.ts | |
var app = express2(); | |
app.use(express2.json()); | |
app.use(express2.urlencoded({ extended: false })); | |
app.use((req, res, next) => { | |
const start = Date.now(); | |
const path3 = req.path; | |
let capturedJsonResponse = undefined; | |
const originalResJson = res.json; | |
res.json = function(bodyJson, ...args) { | |
capturedJsonResponse = bodyJson; | |
return originalResJson.apply(res, [bodyJson, ...args]); | |
}; | |
res.on("finish", () => { | |
const duration = Date.now() - start; | |
if (path3.startsWith("/api")) { | |
let logLine = `${req.method} ${path3} ${res.statusCode} in ${duration}ms`; | |
if (capturedJsonResponse) { | |
logLine += ` :: ${JSON.stringify(capturedJsonResponse)}`; | |
} | |
if (logLine.length > 80) { | |
logLine = logLine.slice(0, 79) + "…"; | |
} | |
log(logLine); | |
} | |
}); | |
next(); | |
}); | |
(async () => { | |
const server = await registerRoutes(app); | |
app.use((err, _req, res, _next) => { | |
const status = err.status || err.statusCode || 500; | |
const message = err.message || "Internal Server Error"; | |
res.status(status).json({ message }); | |
throw err; | |
}); | |
if (app.get("env") === "development") { | |
await setupVite(app, server); | |
} else { | |
serveStatic(app); | |
} | |
const port = parseInt(process.env.PORT || "7860", 10); | |
server.listen({ | |
port, | |
host: "0.0.0.0", | |
reusePort: true | |
}, () => { | |
log(`serving on port ${port}`); | |
}); | |
})(); |