botframework-streaming
Version:
Streaming library for the Microsoft Bot Framework
59 lines (48 loc) • 1.65 kB
text/typescript
/**
* @module botframework-streaming
*/
/**
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License.
*/
import { INodeServer, INodeSocket } from '../interfaces';
type ConnectionListener = (socket: INodeSocket) => void;
/**
* Create a Node 'net' server
*
* @param callback Optional connection listener
* @returns a Node 'net' server instance
*/
export function createNodeServer(callback?: ConnectionListener): INodeServer {
if (callback && typeof callback !== 'function') {
throw new TypeError("Invalid callback; callback parameter must be a function to create Node 'net' Server.");
}
const server = getServerFactory()(callback);
if (!isNetServer(server)) {
throw new Error("Unable to create Node 'net' server");
}
return server;
}
/**
* Get a function that creates a Node 'net' server instance
*
* @returns a server factory function
*/
export function getServerFactory(): (callback?: ConnectionListener) => INodeServer {
if (typeof require !== 'undefined') {
// eslint-disable-next-line @typescript-eslint/no-require-imports
return require('net').Server;
}
throw TypeError(
"require is undefined. Must be in a Node module to require 'net' dynamically in order to fetch Server factory.",
);
}
function isNetServer(o: any): o is INodeServer {
return hasCloseMethod(o) && hasListenMethod(o);
}
function hasCloseMethod(o: any): o is INodeServer {
return o.close && typeof o.close === 'function';
}
function hasListenMethod(o: any): o is INodeServer {
return o.listen && typeof o.listen === 'function';
}