npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@amond-ai/harness-transport

v0.1.0

Published

The bridge socket a turn driver speaks over — the `ws`-shaped socket shim, the upgrade handshake, and a dialer built on the standard WebSocket constructor

Readme

@amond-ai/harness-transport

The bridge socket a turn driver speaks over, on any runtime that has a WebSocket.

The driver in @amond-ai/harness-claude-code attaches to a turn host over one socket. It does not care who dialed it, only that what comes back wears the ws API it drives — so this package owns that shape (WsLike), the shim that puts it on a platform WebSocket, the upgrade handshake, and one opener built on the standard constructor.

What it provides

| Export | Purpose | | --- | --- | | BridgeEndpoint | Where the turn host is: a url, and optionally headers. | | createStandardSocketOpener(options?) | BridgeEndpoint → an open, ws-shaped socket, dialed with globalThis.WebSocket (or an injected constructor). | | toWsLike(socket) | A platform WebSocket wearing the ws API the driver drives. | | acceptUpgrade(response) | The 101 side of the handshake, for an opener that dials over fetch. | | upgradeHeaders(endpoint) | The Upgrade: websocket request headers. |

Headers are the fork in the road

The standard WebSocket constructor takes a URL and nothing else: there is no way to send a request header with the handshake. createStandardSocketOpener therefore rejects an endpoint that carries headers, naming the keys it would have had to drop, rather than dialing an unauthenticated socket that fails later and elsewhere. An endpoint with headers needs a header-capable opener — the workerd fetch upgrade in @amond-ai/harness-transport-cloudflare, or Node's ws package.

That is also why the Cloudflare opener is a separate package rather than a branch in this one: a Cloudflare Sandbox port is private, reachable only through Sandbox.wsConnect(request, port), so it dials a Request and needs @cloudflare/sandbox. Nothing in this package's src imports cloudflare:, node: or bun:, and closure.test.ts in @amond-ai/harness-claude-code keeps it that way.