@directus/api
Version:
Directus is a real-time API and App dashboard for managing SQL database content
48 lines (46 loc) • 1.24 kB
JavaScript
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 };