Skip to main content

Shared Core Live Guest Queue Tutorial

Build a headless guest queue with mediasfu-shared@1.3.1. Your application renders waiting people and requests; shared core sends the published allow or reject operations through the live room runtime.

Prerequisites​

  • Node.js 18 to 20 and a TypeScript application with a live room socket.
  • A queue renderer and an authenticated backend that decides who may enter.

Project files​

package.json
{"private":true,"type":"module","scripts":{"typecheck":"tsc --noEmit"},"dependencies":{"mediasfu-shared":"1.3.1","mediasoup-client":"3.20.0","socket.io-client":"4.8.3"},"devDependencies":{"typescript":"5.9.3"}}
tsconfig.json
{"compilerOptions":{"strict":true,"target":"ES2022","module":"ESNext","moduleResolution":"bundler","lib":["DOM","ES2022"],"skipLibCheck":true,"noEmit":true},"include":["src/**/*.ts"]}
src/guest-queue.ts
import { respondToRequests, respondToWaiting } from 'mediasfu-shared';
export type GuestQueueRuntime={waiting:Parameters<typeof respondToWaiting>[0];request:Parameters<typeof respondToRequests>[0]};
export async function decideGuestEntry(runtime:GuestQueueRuntime){
await respondToWaiting(runtime.waiting);
await respondToRequests(runtime.request);
}
src/app-boundaries.ts
import type { GuestQueueRuntime } from './guest-queue';
export type QueueRenderer={renderWaiting():void;renderRequests():void;showFailure(message:string):void};
export type QueueApplication={runtime:GuestQueueRuntime;renderer:QueueRenderer;mayModerate:boolean};

The application fills the typed runtime from its active socket, and calls decideGuestEntry only after its host-policy check succeeds.

Run​

npm install
npm run typecheck

Expected result​

With a live room runtime, choosing an allow or reject decision updates waiting and request state for the room. The renderer reflects the socket update rather than assuming entry succeeded immediately.

Recovery​

Keep the guest pending when a decision fails or the host reconnects. Reload the queue before retrying, and announce entry only after the guest's room has opened.

Cleanup​

Clear outstanding selections, unmount the queue, and close app-owned room resources when the moderator leaves. Shared core has no host-wide end operation.

Release boundary​

An authenticated backend owns room entry and moderation authorization. Shared core does not render a queue or provide safe client-side hosted room creation; do not expose a MediaSFU Cloud credential to the browser.