livekit-client
Version:
JavaScript/TypeScript client SDK for LiveKit
54 lines (40 loc) • 1.87 kB
text/typescript
import type { DataTrackInfo } from './types';
function isObject(subject: unknown): subject is object {
return subject !== null && typeof subject === 'object';
}
export const TrackSymbol: symbol = Symbol.for('lk.track');
export interface ITrack {
readonly trackSymbol: typeof TrackSymbol;
}
function isTrack(subject: unknown): subject is ITrack {
return isObject(subject) && 'trackSymbol' in subject && subject.trackSymbol === TrackSymbol;
}
/** An interface representing a track (of any type) which is local and sending data to the SFU. */
export interface ILocalTrack extends ITrack {
readonly isLocal: true;
isPublished(): boolean;
}
// @ts-ignore - Export this in the future when cutting over to new track interfaces more widely
function isLocalTrack(subject: unknown): subject is ILocalTrack {
return isTrack(subject) && 'isLocal' in subject && subject.isLocal === true;
}
export const RemoteTrackSymbol: symbol = Symbol.for('lk.remote-track');
/** An interface representing a track (of any type) which is remote and receiving data from the SFU. */
export interface IRemoteTrack extends ITrack {
readonly isLocal: false;
}
// @ts-ignore - Export this in the future when cutting over to new track interfaces more widely
function isRemoteTrack(subject: unknown): subject is IRemoteTrack {
return (
isTrack(subject) && 'localitySymbol' in subject && subject.localitySymbol === RemoteTrackSymbol
);
}
export const DataTrackSymbol: symbol = Symbol.for('lk.data-track');
/** An interface representing a data track, either local or remote. */
export interface IDataTrack extends ITrack {
readonly typeSymbol: typeof DataTrackSymbol;
readonly info?: DataTrackInfo;
}
export function isDataTrack(subject: unknown): subject is IDataTrack {
return isTrack(subject) && 'typeSymbol' in subject && subject.typeSymbol === DataTrackSymbol;
}