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

cliengo-mfe-utils

v0.5.38

Published

common utils for developing MFEs at cliengo

Readme

MFE Utils

This package contains common utils used in the Cliengo MFE's.

Installation

El paquete se publica en npm como cliengo-mfe-utils. Se instala con el alias @cliengo/mfe-utils para no tener que tocar los imports:

yarn add @cliengo/mfe-utils@npm:cliengo-mfe-utils

Queda así en el package.json, y todos los imports siguen siendo @cliengo/mfe-utils/...:

  "@cliengo/mfe-utils": "npm:cliengo-mfe-utils"

Upgrade Version

yarn upgrade @cliengo/mfe-utils

Publicar

Se publica solo: cada push a prod dispara .github/workflows/publish.yml, que compara la version del package.json contra el registry y publica si falta. O sea, para publicar alcanza con bumpear la versión en el PR.

Si hace falta hacerlo a mano: npm run release.

El script no se llama publish a propósito. npm ejecuta cualquier script con ese nombre como hook de npm publish, así que npm publish disparaba una publicación anidada y --dry-run no se propagaba.

Antes se publicaba en JSR

Hasta la 0.5.34 este paquete vivía en JSR y se consumía vía npm:@jsr/cliengo__mfe-utils con un .npmrc que mapeaba el scope @jsr. Las versiones viejas siguen disponibles ahí, así que los consumidores que todavía no migraron no se rompen. Los nuevos releases van solo a npm.

Importante

Para asegurar de que las versiones de react-query, launch-darkly, y react-router-dom sean las mismas y que los hooks expuestos en este paquete funcionen correctamente. Agregar esto a tu package.json:

  "resolutions": {
    "@tanstack/react-query": "5.67.1",
    "launchdarkly-js-client-sdk": "3.5.0",
    "react-router-dom": "6.25.1"
  }

Usage

React Query

Para sincronizar la caché de React Query y que se re-utilize la data que ya otros MFEs han cargado deben ocurrir los siguientes pasos:

  1. Usar el cliente de este paquete al momento de inizializar el cliente de React Query.

importante, para que typescript reconozca el cliente de React Query, asegurate de estar usando la misma versión de React Query que este paquete. "@tanstack/react-query": "^5.59.15"

import { QueryClientProvider } from '@tanstack/react-query';
import { getQueryClient } from '@cliengo/mfe-utils/mod';

const App = () => {
  const queryClient = getQueryClient();

  return (
    <QueryClientProvider client={queryClient}>
      <App />
    </QueryClientProvider>
  );
};
  1. Usar los hooks de este paquete que ya tienen especificados el staleTime, queryKey, etc.
import { cliengoQueries } from '@cliengo/mfe-utils/hooks';

const App = () => {
  /**
   * eso por detras esta usando el useQuery de react query
   * y el service del cliente que corresponda
   * */
  const { data: account, status: accountStatus } = cliengoQueries.account();

  if (accountStatus === 'error') {
    return <div>Error</div>;
  }

  /**
   * usualmente, sobretodo para el User, el Account y el Website
   * al llegar a este punto de tu app, probablemente ya se ha cargado
   * y no veras que se ejecute este if.
   * */
  if (accountStatus === 'pending') {
    return <div>Loading...</div>;
  }

  return <div>{account.name}</div>;
};

Services

Este paquete contiene los servicios de la API de Cliengo en forma de un conveniente SDK.

import { getCliengoService } from '@cliengo/mfe-utils/services';
// import { getZordonService } from '@cliengo/mfe-utils/services'; // si usas Zordon

const App = () => {
  const chatbotConfigMutation = useMutation({
    mutationFn: () => {
      const service = getCliengoService();
    },
    onSuccess: () => {

    }
  })

  return (
    <button onClick={() => chatbotConfigMutation.mutate()}>
      {chatbotConfigMutation.isPending && 'Loading...'}
      {chatbotConfigMutation.isIdle && 'update'}
      {chatbotConfigMutation.isError && 'Error'}
    </button>
  )
}

Hooks

Este paquete contiene algunos hooks convenientes para usar en tu MFE.

useCompanyId

Usa una query con react-query para obtener el account y de ahi el id (que s el companyId)

import { useCompanyId } from '@cliengo/mfe-utils/hooks';

const App = () => {
  const companyId = useCompanyId();

  return <div>{companyId}</div>;
}

useCurrentWebsite

Usa una query con react-query para obtener el account y de ahi el website actual

import { useCurrentWebsite } from '@cliengo/mfe-utils/hooks';

const App = () => {
  const website = useCurrentWebsite();

  return <div>{website.title}</div>;
}

useWebsiteId

Usualme, cuando se necesita el websiteId, este suele estar en la url como un param. Este hook usa el useParams de react-router-dom para obtenerlo.

import { useWebsiteId } from '@cliengo/mfe-utils/hooks';

const App = () => {
  const websiteId = useWebsiteId();

  return <div>{websiteId}</div>;
}

useCurrentWebsite

Obtener el objeto website.

import { useCurrentWebsite, useWebsiteId } from '@cliengo/mfe-utils/hooks';

const App = () => {
  const websiteId = useWebsiteId();
  /**
   * El hook usa react-query por detras y no se ejecuta
   * hasta que el websiteId esté definido.
   * 
   */
  const website = useCurrentWebsite(websiteId);

  return <div>{website.title}</div>;
}

useCustomEvent

Definir un callback para cuando un custom event sea disparado desde otro mfe.

interface TheDetailType {
  someProp: string;
}

const App = () => {
  /**
   * el hook se encarga de agregar el eventList
   * y de removerlo cuando el componente se desmonte.
   */
  useCustomEvent('some-event-name', (e) => {
    const event = e as CustomEvent<TheDetailType>;

    someFunction(event.detail);
  });
}

useDisclosure

Handy hook para usar con modales, popovers, etc.

import { useDisclosure } from '@cliengo/mfe-utils/hooks';

const App = () => {
  const { isOpen, onOpen, onClose } = useDisclosure();

  return (
    <>
      <button onClick={onOpen}>Open</button>
      <Modal isOpen={isOpen} onClose={onClose}>
        <button onClick={onClose}>Close</button>
      </Modal>
    </>
  );
};

Theme

Este paquete contiene un tema personalizado compatible con Material UI.

import { theme } from '@cliengo/mfe-utils/theme';

const App = () => {
  return (
    <ThemeProvider theme={theme}>
      <App />
    </ThemeProvider>
  );
};

Types

Este paquete contiene una serie de tipos que pueden ser usados en tus aplicaciones.

import type { Website } from '@cliengo/mfe-utils/types';

Utils

withCharacterLimit

Maneja el límite de caracteres en un input o textarea.

import { withCharacterLimit } from '@cliengo/mfe-utils/utils';

const App = () => {
  const handleChange = (e: React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement>) => {
    withCharacterLimit(100, e, (value) => {
      // solo se ejecuta si el valor no excede el límite
      console.log(value);
    });
  };

  return (
    <input type="text" onChange={handleChange} />
  );
};

URLS

Este paquete contiene las URLs de los servicios de la API de Cliengo.

import { getUrls } from '@cliengo/mfe-utils/utils/urls';

const App = () => {
  /**
   * por defecto, revisa si la variable de entorno ENVIRONMENT
   * es 'prod' y si es, devuelve las URLs de producción.
   * 
   * Si no es 'prod', devuelve las URLs de stage.
   * 
   * También le puedes pasar el valor de la variable de entorno
   * por argumento getUrls('prod') o getUrls('stage').
   */
  const urls = getUrls();

  return (
    <div>
      {urls.API_URL}
      {urls.ZORDON_URL}
    </div>
  );
};

Guia de actualizacion de versiones y agregado de codigo

  1. Crear una rama desde prod
  2. Hacer los cambios
  3. Actualizar el archivo jsr.json con la nueva version del paquete (sumar 1 al numero de version) ej: si la version anterior es 0.5.6, la nueva version es 0.5.7
  4. PR a prod

Una vez mergeado el PR, se actualizará el paquete en jsr.io automaticamente.

A partir de ahi, la proxima vez que se ejecute npx jsr install se instalará la nueva version del paquete en tu MFE.