UNPKG

@directus/api

Version:

Directus is a real-time API and App dashboard for managing SQL database content

48 lines (46 loc) 1.24 kB
import { WebSocketMessage } from "../../packages/types/dist/index.js"; import { getMessageType } from "./message.js"; import { parseJSON } from "@directus/utils"; //#region src/websocket/utils/wait-for-message.ts const waitForAnyMessage = (client, timeout) => { return new Promise((resolve, reject) => { client.on("message", awaitMessage); const timer = setTimeout(() => { client.off("message", awaitMessage); reject(); }, timeout); function awaitMessage(event) { try { clearTimeout(timer); client.off("message", awaitMessage); resolve(parseJSON(event.toString())); } catch (err) { reject(err); } } }); }; const waitForMessageType = (client, type, timeout) => { return new Promise((resolve, reject) => { client.on("message", awaitMessage); const timer = setTimeout(() => { client.off("message", awaitMessage); reject(); }, timeout); function awaitMessage(event) { let msg; try { msg = WebSocketMessage.parse(parseJSON(event.toString())); } catch { return; } if (getMessageType(msg) === type) { clearTimeout(timer); client.off("message", awaitMessage); resolve(msg); } } }); }; //#endregion export { waitForAnyMessage, waitForMessageType };