fix(ci): resolve TS build errors across all services

- recordings.routes.ts: cast req.params.id to string (express 5 typed params)
- recordings.service.ts: cast Record<string,unknown>[] via unknown first
- guilds.routes.ts: cast req.params.guildId to string (2 sites)
- transmitter.ts: capture pcmStream ref locally + re-acquire in drain callback

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
MythEclipse
2026-06-14 01:17:18 +07:00
co-authored by Claude
parent 92d73fe12d
commit c317cfb420
4 changed files with 11 additions and 7 deletions
@@ -31,7 +31,7 @@ export function createRecordingsRouter(): Router {
router.delete(
"/recordings/:id",
asyncHandler(async (req: Request, res: Response) => {
const { id } = req.params;
const id = req.params.id as string;
await recordingsService.deleteById(id);
res.json({ ok: true });
}),
@@ -68,7 +68,7 @@ export class RecordingsService {
LIMIT ${limit + 1}
`);
const items = rows.slice(0, limit) as RecordingRow[];
const items = rows.slice(0, limit) as unknown as RecordingRow[];
const hasMore = rows.length > limit;
const nextCursor = hasMore ? String(items[items.length - 1]!.created_at) : null;
@@ -27,7 +27,7 @@ export function createGuildsRouter(): Router {
router.get(
"/:guildId/channels",
asyncHandler(async (req: Request, res: Response) => {
const guildId = req.params.guildId;
const guildId = req.params.guildId as string;
logger.debug({ guildId }, "Fetching text channels");
const channels = await getTextChannels(guildId);
res.json(channels);
@@ -38,7 +38,7 @@ export function createGuildsRouter(): Router {
router.get(
"/:guildId/voice-channels",
asyncHandler(async (req: Request, res: Response) => {
const guildId = req.params.guildId;
const guildId = req.params.guildId as string;
logger.debug({ guildId }, "Fetching voice channels");
const channels = await getVoiceChannels(guildId);
res.json(channels);
@@ -133,16 +133,20 @@ export class VoiceTransmitter {
const data = JSON.parse(message);
if (data.type === "pcm" && data.buffer) {
const pcmBuffer = Buffer.from(data.buffer, "base64");
const canContinue = this.pcmStream.write(pcmBuffer);
const stream = this.pcmStream;
const canContinue = stream.write(pcmBuffer);
// Backpressure: queue until drain
if (!canContinue) {
this.draining = true;
this.pcmStream.once("drain", () => {
stream.once("drain", () => {
this.draining = false;
// Re-acquire stream reference (could have been replaced by restart)
const currentStream = this.pcmStream;
if (!currentStream) return;
// Flush queued chunks
while (this.backpressureQueue.length > 0) {
const queued = this.backpressureQueue.shift()!;
if (!this.pcmStream.write(queued)) break;
if (!currentStream.write(queued)) break;
}
});
}