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

@c1m-public/realtime

v0.1.1

Published

Realtime client and notification-inbox core for C1M surfaces. The root is framework-neutral (typed Ably client, token parsing, per-tab origin); ./react adds the status hook, provider factory and status dot; ./inbox adds the TanStack Query cache patches, t

Readme

@c1m-public/realtime

The realtime client and notification-inbox core shared by SaaSDash and the Platform Admin Center. Both apps had byte-identical copies of the Ably client, the token parser, the per-tab origin id and the cache patches; this is that code, once.

Entries

| Import | Contains | Peers | |---|---|---| | @c1m-public/realtime | createAblyRealtimeClient, parseRealtimeTokenPayload, RealtimeDisabledError, getRealtimeOrigin, REALTIME_ORIGIN_HEADER, types | ably (lazily imported at connect) | | @c1m-public/realtime/react | useRealtimeStatus, createRealtimeProvider, RealtimeStatusDot | react | | @c1m-public/realtime/inbox | useNotificationInbox, the cache patches, mountNotificationBridge, formatNotificationDate | react, @tanstack/react-query |

What stays in the app

Token fetching. Each surface has its own BFF route, session cookie and error mapping, so it fetches the payload and hands it to parseRealtimeTokenPayload. The package never imports next/*, so no entry can drag the Next runtime into a bundle that does not want it.

Query keys and the transport. useNotificationInbox takes both, so one hook serves a workspace inbox, a dash-level inbox and an operator inbox without knowing which is which.

Notes

Tokens are minted by the backend with a five-minute TTL and are re-fetched on every Ably authorization callback, so workspace suspension and membership changes take effect on renewal rather than being replayed from a cached credential. The client never holds an API key.

The badge counts unseen notifications: rows with no seen_at and no read_at. Opening a tray marks everything up to the newest rendered row seen; reading or dismissing implies seen. Seen-all decrements the count by the number of rows it changed rather than recomputing it from the cached page, because the page holds at most limit items.