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

@haocruz/opentelemetry-web

v2.0.0

Published

HAOC OpenTelemetry for web frontends — automatic page tracking, browser/device detection, user identity, and distributed tracing

Readme

@haocruz/opentelemetry-web

Biblioteca de observabilidade padronizada do HAOC para frontends web — tracing distribuído, detecção de browser/dispositivo, identidade de usuário e propagação de contexto via W3C Baggage.

Características

  • Setup em 1 chamadainitTracing({ serviceName: 'meu-app' })
  • Instrumentação automática — Fetch, XMLHttpRequest e DocumentLoad
  • Detecção de browser/dispositivo — nome, versão, OS, tipo (desktop/mobile/tablet), plataforma (web/electron)
  • Page tracking — URL, rota e título da página em cada span
  • User identityuser.id, user.role, user.type consistentes com o backend
  • W3C Baggage propagation — contexto do frontend (página, browser, device, user) enviado para o backend automaticamente
  • Error tracking — handlers globais (window.onerror, unhandledrejection) + handler Vue
  • Batteries-included — todas as dependências OTel estão embarcadas na lib

Instalação

npm install @haocruz/opentelemetry-web

Todas as dependências do OpenTelemetry para web já estão embarcadas. Não é necessário instalar @opentelemetry/* separadamente.

Uso Básico

1. Inicializar tracing (antes de criar o app)

// main.ts — PRIMEIRA LINHA
import { initTracing } from '@haocruz/opentelemetry-web';

initTracing({
  serviceName: 'totem-client',
  otlpEndpoint: 'http://signoz.haoc.net:4318/v1/traces',
  environment: 'production',
  propagateTraceUrls: [
    /https?:\/\/api\.totem\.haoc/,
    'http://localhost:3002',
  ],
});

2. Integrar com Vue Router (page tracking)

import { setCurrentRoute } from '@haocruz/opentelemetry-web';
import router from './router';

router.afterEach((to) => {
  setCurrentRoute(String(to.name ?? ''), to.path);
});

3. Integrar com Vue Error Handler

import { createVueErrorHandler } from '@haocruz/opentelemetry-web';

const app = createApp(App);
app.config.errorHandler = createVueErrorHandler();

4. Identificar o usuário (após login)

import { setUser, clearUser } from '@haocruz/opentelemetry-web';

// Após login
setUser({ id: 'PAC12345', role: 'patient', type: 'authenticated' });

// Após logout
clearUser();

Exemplo Completo (Vue 3)

// main.ts
import { initTracing } from '@haocruz/opentelemetry-web';

initTracing({
  serviceName: 'totem-client',
  otlpEndpoint: import.meta.env.VITE_OTEL_EXPORTER_ENDPOINT,
  environment: import.meta.env.VITE_APP_ENV || 'local',
  propagateTraceUrls: [
    new RegExp(import.meta.env.VITE_API_BASE_URL?.replace(/[.*+?^${}()|[\]\\]/g, '\\$&') ?? ''),
  ],
});

import { createApp } from 'vue';
import App from './App.vue';
import router from './router';
import { setCurrentRoute, createVueErrorHandler } from '@haocruz/opentelemetry-web';

router.afterEach((to) => {
  setCurrentRoute(String(to.name ?? ''), to.path);
});

const app = createApp(App);
app.config.errorHandler = createVueErrorHandler();
app.use(router).mount('#app');

API Reference

initTracing(config: HaocWebConfig): WebTracerProvider

Inicializa o OpenTelemetry para web. Deve ser chamada antes de criar o app.

| Opção | Tipo | Default | Descrição | |---|---|---|---| | serviceName | string | (obrigatório) | Nome do serviço no SigNoz | | otlpEndpoint | string | http://localhost:4318/v1/traces | Endpoint do OTLP collector | | environment | string | local | Ambiente (local/dev/prod) | | propagateTraceUrls | (string\|RegExp)[] | [] | URLs para propagar headers de trace (CORS) | | platform | AppPlatform | auto-detect | Plataforma: web-browser, electron | | enableErrorTracking | boolean | true | Instalar handlers globais de erro | | enableDocumentLoad | boolean | true | Instrumentar DocumentLoad | | additionalResourceAttributes | Record<string, string> | — | Atributos extras no resource |

setCurrentRoute(routeName: string, routePath: string): void

Atualiza a rota atual. Todos os spans criados após a chamada terão page.route e page.path.

setUser(identity: HaocUserIdentity): void

Define o usuário autenticado. Propaga user.id em spans e baggage.

clearUser(): void

Remove o usuário (ex: logout).

getUser(): HaocUserIdentity | null

Retorna o usuário atual.

createVueErrorHandler(): (err, instance, info) => void

Cria um error handler para Vue que registra spans de erro no OpenTelemetry.

installErrorHandlers(): void

Instala handlers globais para window.onerror e unhandledrejection. Chamado automaticamente pelo initTracing().

detectBrowserInfo(platform?: AppPlatform): BrowserInfo

Detecta informações do browser, OS e dispositivo a partir do User-Agent.

Atributos Capturados

Em cada span (via HaocSpanProcessor)

| Atributo | Exemplo | Descrição | |---|---|---| | page.url | /totem/agenda | URL da página | | page.title | Agenda - Totem | Título da página | | page.route | schedule-today | Nome da rota (Vue Router) | | page.path | /totem/agenda/hoje | Path da rota | | browser.name | Chrome | Nome do browser | | browser.version | 120.0.6099.130 | Versão do browser | | os.name | Windows | Sistema operacional | | device.type | desktop | Tipo: desktop/mobile/tablet | | app.platform | electron | Plataforma: electron/web-browser | | user.id | PAC12345 | ID do usuário autenticado | | user.type | authenticated | Tipo: authenticated/anonymous | | user.role | patient | Role do usuário |

Propagados via W3C Baggage (para o backend)

O HaocSpanProcessor injeta automaticamente no cabeçalho baggage HTTP:

  • page.route, page.url
  • browser.name, device.type, app.platform
  • user.id

O backend (@haocruz/opentelemetry ou haoc/opentelemetry-laravel) extrai esses valores e adiciona nos spans do servidor.

Docker / Vite

Para desenvolvimento com Docker e Vite, basta que o container tenha acesso à rede do SigNoz:

# docker-compose.yml
services:
  node:
    volumes:
      - .:/app
    networks:
      - app
      - signoz

networks:
  signoz:
    name: signoz-net
    external: true

Desenvolvimento local: Para testar alterações na lib antes de publicar, adicione um volume mount:

volumes:
  - ../haoc-opentelemetry/packages/web:/app/node_modules/@haocruz/opentelemetry-web

Variáveis de Ambiente (Vite)

| Variável | Descrição | |---|---| | VITE_OTEL_EXPORTER_ENDPOINT | Endpoint do OTLP exporter | | VITE_APP_ENV | Ambiente (local/dev/prod) | | VITE_API_BASE_URL | URL da API para propagação de trace |