Ramble-FE / machine / guards.ts
guards.ts
Raw
import { not, stateIn } from "xstate";
import { CallContext } from "./types";

/**
 * 시그널링이 준비된 상태인지 확인
 */
export const isSignalingReady = stateIn("session.signaling.connected");

/**
 * 종료가 가능한 상태인지 확인
 */
export const canDisconnect = not(stateIn("session.flow.idle"));

/**
 * 미디어 스트림이 준비되었는지 확인
 */
export const hasLocalStream = ({ context }: { context: CallContext }) => {
    return context.localStream !== null;
};

/**
 * 원격 스트림이 준비되었는지 확인
 */
export const hasRemoteStream = ({ context }: { context: CallContext }) => {
    return context.remoteStream !== null;
};

/**
 * 재시도 가능 여부 확인
 */
export const canMatching = ({ context }: { context: CallContext }) => {
    return context.matchRequest !== null;
};