Skip to content

[Bug]: Missing await keywords in Livekit Webhook Room Cleanup #142

Description

@ayushman1210

Description

A critical logic error was identified in the livekit-webhook function. The handler responsible for cleaning up Appwrite room documents after a Livekit session ends is failing to properly synchronize asynchronous calls.

In JavaScript, an async function always returns a Promise. When the code checks if (appwrite.doesRoomExist(...)), it is evaluating a Promise object rather than the boolean result of that promise. Since objects in JavaScript are "truthy," the condition will always pass, potentially attempting to delete rooms that don't exist or failing to wait for the deletion to complete before the function execution context closes

Location

functions/livekit-webhook/src/main.js

currently

if (event.event === 'room_finished') {
    const appwriteRoomDocId = event.room.name;

    // Bug: doesRoomExist returns a Promise, which is always truthy
    log(appwrite.doesRoomExist(appwriteRoomDocId)); 
    if (appwrite.doesRoomExist(appwriteRoomDocId)) {
        // Bug: deleteRoom is an async operation but is not awaited
        appwrite.deleteRoom(appwriteRoomDocId);
    }
}

Impact

  • Race Conditions: The function may return a success response to Livekit before the database cleanup actually finishes.
  • Unreliable Logging: The log() statement currently logs a Promise { } instead of the actual room status.

Proposed Fix

Apply the await keyword to ensure the asynchronous database checks and deletions resolve before proceeding

I would Like to work on this issue

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions