TracerBench / chrome-debugging-client

An async / await friendly debugging client for chrome
BSD 2-Clause "Simplified" License
134 stars 19 forks source link

Allow passthrough of `ws` options to websocket factory #218

Open prescience-data opened 1 year ago

prescience-data commented 1 year ago

Happy to do this as a PR given it seems trivial to add, but prefer to ask before sending unsolicited PRs.

https://github.com/TracerBench/chrome-debugging-client/blob/3d20f8eebfc81be0a438fc5c87536da257b4aeb3/%40tracerbench/websocket-message-transport/src/index.ts#L26

This should allow passing of the parent ws library options to allow setting headers and other environment-specific options that might be required.

A practical example I just ran into was a Chromium fork that requires authentication headers to be sent with the websocket request.

The implementation I'd suggest to avoid breaking any existing API is something like:

import type { ClientOptions } from "ws"
// ... other imports

export default async function openWebSocket(
  url: string,
  raceCancellation?: RaceCancellation,
  clientOptions?: ClientOptions
): Promise<[AttachMessageTransport, CloseWebSocket]> {
  const ws = new NodeWebSocket(url, clientOptions);
  // ... remaining code
}

This allows appending the options as an optional trailing arg which avoids any breaking change or API surface modification.

krisselden commented 1 year ago

@prescience-data sorry for such a late reply, I'm happy to accept a PR for this. I primarily launch chrome via the stdio pipes method. Also most of this API is composition of apis, the design of this library was to decouple as much as possible via interfaces