/**
 * Copyright (c) Meta Platforms, Inc. and affiliates.
 *
 * This source code is licensed under the MIT license found in the
 * LICENSE file in the root directory of this source tree.
 *
 * @flow strict-local
 * @format
 */

import type { Server } from "connect";
import type { TerminalReportableEvent } from "metro";

type DevServerMiddlewareFactory = (params: {
  host?: string,
  port: number,
  watchFolders: ReadonlyArray<string>,
}) => {
  middleware: Server,
  websocketEndpoints: { [path: string]: ws$WebSocketServer },
  messageSocketEndpoint: {
    server: ws$WebSocketServer,
    broadcast: (
      method: string,
      params?: Record<string, unknown> | null,
    ) => void,
  },
  eventsSocketEndpoint: {
    server: ws$WebSocketServer,
    reportEvent: (event: TerminalReportableEvent) => void,
  },
  ...
};

/**
 * Attempt to load the `createDevServerMiddleware` factory from
 * `@react-native-community/cli` (an optional peer dependency). If it cannot be
 * found, return a factory that produces stub middleware instead.
 */
declare export default function loadCommunityMiddleware(): DevServerMiddlewareFactory;
