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

@tirs/recorder

v0.2.11

Published

Tirs recorder panel host: injects the Care recorder iframe on the tenant's page and bridges it to the capture runtime. Ships as recorder.js on the CDN.

Readme

@tirs/recorder

The Tirs recorder panel. When a customer opens a Tirs Customer Care link that points at your site, this package shows the floating recording panel — Start, pause, stop, preview, send — on your page, and connects it to the capture runtime.

What it does

  • Watches for a care link token on your site. Without one it does nothing — no DOM, no listeners beyond the initial check.
  • When a token is present, it displays the Tirs recording panel as a small floating window over your app. The panel is served from Tirs — your page never handles the recording, the video data, or any upload.
  • Coordinates the session: capture starts the instant the customer hits record and stops when they finish, so logs and video stay in sync.
  • Resizes itself as the customer moves through the flow, and removes itself when the session completes or the panel is closed.

How to use

npm i @tirs/core @tirs/care @tirs/recorder
import { init } from '@tirs/core';
import { care } from '@tirs/care';
import { mountRecorder } from '@tirs/recorder';

const tirs = init({ key: 'YOUR-KEY', plugins: [care()] });
mountRecorder(tirs);

mountRecorder() is safe to call unconditionally — it is a no-op unless a care link token is present.

Optional configuration

Pass placement options as the second argument. All are optional.

| Option | Type | Default | What it does | | --- | --- | --- | --- | | position | 'bottom-right' \| 'bottom-left' \| 'top-right' \| 'top-left' | 'bottom-right' | Corner the panel docks to. Move it if a chat widget or cookie banner already occupies that corner. | | offset | number (px) | 16 | Distance from the two edges of that corner. | | zIndex | number | 2147483000 | Stacking order. High enough to clear typical overlays; lower it if a modal of yours must sit on top. |

mountRecorder(tirs, {
  position: 'bottom-left',   // our chat widget owns bottom-right
  offset: 24,
});

With the script-tag install, the same options are data- attributes on the recorder tag:

<script src="https://cdn.try-trs.com/v1/recorder.js" defer
        data-tirs-position="bottom-left"
        data-tirs-offset="24"></script>

| Attribute | Maps to | | --- | --- | | data-tirs-position | position | | data-tirs-offset | offset | | data-tirs-z | zIndex |

Removing the panel

mountRecorder() returns a handle (or null when there is no token):

const handle = mountRecorder(tirs);
handle?.destroy();   // removes the panel and its listeners

Content-Security-Policy

If your site sets a CSP, allow the panel to load:

frame-src 'self' https://app.try-trs.com;

If you use the framework packages (@tirs/react, @tirs/nextjs, @tirs/angular) or the script-tag install, the panel is already wired up; you don't need this package directly.

MIT © Tirs