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

@meltwater/engage-app-chrome

v1.2.1

Published

Shared app chrome (navigation, layout, shell) for the Meltwater Engage suite — Conversations, Publish, and Measure.

Readme

@meltwater/engage-app-chrome

Shared app chrome (navigation, layout, shell) for the Meltwater Engage suite — Conversations, Publish, and Measure.

Install

npm install @meltwater/engage-app-chrome

The package is scoped @meltwater and lives on the private npm registry. Consumer apps must be authenticated to the scope (either via a .npmrc _authToken or via npm login).

Use — React apps

import { AppChrome } from "@meltwater/engage-app-chrome";

export function App({ children }) {
  return <AppChrome>{children}</AppChrome>;
}

The chrome ships with its own styles, providers (React Query, App Router fallback), and layout — consumer apps do not need to import CSS or wire up context.

Optional props:

| Prop | Type | Purpose | |---|---|---| | hideChrome | boolean | Renders children with no chrome shell around them | | theme | "light" \| "dark" | Initial colour theme; defaults to the user's persisted preference | | options | ManifestPayload | Force-enables the listed company/user treatments on top of the fetched manifest | | disableIdentityClient | boolean | Opt out of the built-in session keep-alive (see below) |

Session keep-alive

The chrome bootstraps gaf-identity-client on mount: it loads the client from the CDN (reusing a copy the host already provides, if any), initializes it for the detected environment, and logs the user out on session-ending auth errors. This gives every consumer silent gyda-token refresh and idle-timeout logout without app-side wiring — the same behaviour the legacy CDN app-chrome provided.

Hosts that manage identity themselves should opt out with the disableIdentityClient prop (React) or the disable-identity-client attribute (custom element) and remove any duplicate initialization to avoid double refresh cycles.

Environment

The chrome resolves its backends at runtime: any *.meltwater.com host is treated as production, everything else (staging.meltwater.net, *.preview.meltwater.net, localhost.meltwater.net) as staging — the same heuristic the Engage apps use. Hosts can override either decision before the chrome is imported:

<script>
  window.__MW_APP_CHROME_ENV__ = "staging"; // force "production" | "staging"
  window.__MW_APP_CHROME_ENV_OVERRIDES__ = {
    // any environment value, e.g. rotate a key or pin the translations CDN
    TRANSLATION_CDN_VERSION: "1.31.682",
  };
</script>

What the chrome owns vs. what hosts own

Owned by the chrome (no host wiring needed): navigation, header, workspace/app switchers, user menu, universal search, Meltwaiter/Companion, i18n, theming, manifest, session keep-alive (see above), an error boundary (a chrome crash renders your content bare instead of a white page), and the notification bell mount point — the chrome renders <mi-notification-bell>; keep loading the mi-notification-bell CDN script for the bell to light up.

Host responsibilities (by design — every Engage app already does these itself):

| Concern | Host provides | |---|---| | Segment analytics | the analytics.js snippet / window.analytics | | Pendo (tracking, guides, onboarding) | the Pendo agent snippet | | Intercom / help widget | window.Intercom (e.g. via gaf-my-precious); the chrome's help button calls it | | Live feature flags (Split) | own Split client if needed; the chrome only consumes manifest treatments (+ options overrides) |

Bundler notes

  • The package guards process, global and __dirname itself (first import of both entries) — host apps do not need window.process shims.
  • Bundlers that don't read package.json exports (e.g. Stencil's rollup) resolve @meltwater/engage-app-chrome/elements through classic root files — no dist/ deep imports needed.

Use — Vue / vanilla apps (custom elements)

import "@meltwater/engage-app-chrome/elements";

Then use the custom-element markup in your templates:

<mi-app-chrome>
  <mi-app-chrome-content>
    <!-- your app content -->
  </mi-app-chrome-content>
</mi-app-chrome>

An appChromeComponentRendered event fires on the host element when the chrome has mounted.

Development

nvm use
npm ci
npm run build
npm test

Releases

Merges to main are versioned automatically by semantic-release based on Conventional Commits messages, then published to npm. Prerelease branches: next, beta, alpha.

Publish authentication uses npm OIDC Trusted Publishing — the workflow presents a GitHub OIDC token that npm validates against the trusted-publisher configuration on this package. No long-lived npm token is stored anywhere.

Status

See epic SMM-9312.