diff --git a/src/api.ts b/src/api.ts index ce4128e..cf5ba5a 100644 --- a/src/api.ts +++ b/src/api.ts @@ -10,6 +10,8 @@ import { log as logModule, logErr as logErrModule, } from "#module/index.js"; +import defer, { DeferredPromise } from "p-defer"; +import { connectModuleBound } from "#module/client.js"; // @ts-ignore const kernelEnv = typeof window !== "undefined" && window?.document; @@ -20,3 +22,42 @@ export const connectModule = kernelEnv : connectModuleModule; export const log = kernelEnv ? logKernel : logModule; export const logErr = kernelEnv ? logErrKernel : logErrModule; + +export async function getNetworkModuleStatus( + callback?: any, + module?: string, + // @ts-ignore + CM: connectModuleBound = connectModule.bind(null, module), +): Promise Promise)> { + let recvUpdate = (data) => { + callback?.(data); + }; + + const [close, resp] = CM("status", null, (data) => { + recvUpdate(data); + }); + + if (!callback) { + return new Promise(async (resolve) => { + const d = defer(); + recvUpdate = (data) => { + resolve(data); + d.resolve(); + }; + + await d.promise; + close(); + }); + } + + let closed = false; + + return async () => { + if (closed) { + return; + } + + closed = true; + close(); + }; +} diff --git a/src/module/client.ts b/src/module/client.ts index b2a705c..4fa19d3 100644 --- a/src/module/client.ts +++ b/src/module/client.ts @@ -2,8 +2,8 @@ import Emittery from "emittery"; import { callModule, connectModule, log, logErr } from "../api.js"; import { DataFn, ErrTuple } from "@lumeweb/libweb"; -type callModuleBound = (method: string, data?: any) => Promise; -type connectModuleBound = ( +export type callModuleBound = (method: string, data?: any) => Promise; +export type connectModuleBound = ( method: string, data: any, receiveUpdate: DataFn,