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 🙏

© 2025 – Pkg Stats / Ryan Hefner

omnis-logger-sdk

v1.0.16

Published

SDK для интеграции Omnis Logger в проекты

Downloads

30

Readme

Omnis Logger SDK

Универсальный SDK для логирования с автоматическим перехватом сетевых ошибок для Web и React Native приложений.

Основные возможности

  • 🌐 Автоматический перехват сетевых ошибок (fetch, XMLHttpRequest)
  • 🔧 Поддержка Web и React Native
  • 📱 Автоматический сбор данных о браузере (для Web)
  • 📊 Передача готовых данных об устройстве (для React Native)
  • 🚨 Перехват необработанных ошибок
  • 📝 Гибкое логирование с контекстом
  • 🔄 Автоматические повторы при ошибках отправки

Установка

npm install @your-org/omnis-logger

Использование

Web (Браузер)

import { initOmnisLogger } from '@your-org/omnis-logger';

// Инициализация для Web
const logger = initOmnisLogger({
  endpoint: 'https://your-api.com',
  apiKey: 'your-api-key',
  environment: 'production',
  platform: 'web',
  version: '1.0.0',
  userId: 'user-123',
  sessionId: 'session-456'
});

// Логирование
logger.error('Произошла ошибка', { 
  action: 'user_click',
  component: 'Button' 
});

logger.info('Пользователь вошел в систему');

Для Web браузера SDK автоматически соберет:

  • Данные о браузере и ОС
  • Размер экрана и пиксельное соотношение
  • User Agent
  • Язык и временная зона

React Native

import { initOmnisLogger } from '@your-org/omnis-logger';
import DeviceInfo from 'react-native-device-info';
import { Platform } from 'react-native';

// Простая инициализация - SDK сам соберет все данные
const logger = initOmnisLogger({
  endpoint: 'https://your-api.com',
  apiKey: 'your-api-key',
  environment: 'production',
  platform: Platform.OS,
  version: '1.0.0',
  userId: 'user-123',
  sessionId: 'session-456',
  deviceInfoModule: DeviceInfo // Передаем модуль, SDK сам соберет данные
});

// Логирование
logger.error('Сетевая ошибка', { screen: 'Profile' });

SDK автоматически соберет:

  • Синхронные данные (мгновенно): deviceId, model, brand, systemName, version, isTablet и др.
  • Асинхронные данные (в фоне): deviceName, manufacturer, isEmulator, uniqueId и др.
  • Платформо-специфичные данные: hasNotch/hasDynamicIsland для iOS, androidId/apiLevel для Android
  • Размеры экрана из React Native Dimensions API
  • Сетевые данные (если установлен @react-native-netinfo/netinfo)

Конфигурация

OmnisLoggerConfig

interface OmnisLoggerConfig {
  endpoint: string;                    // URL API для отправки логов
  apiKey: string;                      // API ключ для авторизации
  environment?: 'development' | 'staging' | 'production'; // Окружение
  platform?: string;                  // Платформа (web, react-native)
  version?: string;                    // Версия приложения
  userId?: string;                     // ID пользователя
  sessionId?: string;                  // ID сессии
  enableConsole?: boolean;             // Логирование в консоль (по умолчанию: true)
  enableGlobalErrorHandlers?: boolean; // Перехват глобальных ошибок (по умолчанию: true)
  enableNetworkErrorCapture?: boolean; // Перехват сетевых ошибок (по умолчанию: true)
  maxRetries?: number;                 // Количество повторов (по умолчанию: 3)
  timeout?: number;                    // Таймаут запросов в мс (по умолчанию: 5000)
  deviceInfo?: DeviceInfo;             // Готовые данные об устройстве (для Web или кастомных данных)
  deviceInfoModule?: any;              // Модуль react-native-device-info (для React Native)
}

DeviceInfo (упрощенный)

interface DeviceInfo {
  // Общие поля
  platform?: string;
  os?: string;
  osVersion?: string;
  userAgent?: string;
  language?: string;
  timezone?: string;
  
  // Экран
  screenWidth?: number;
  screenHeight?: number;
  pixelRatio?: number;
  
  // React Native основные поля
  deviceId?: string;
  deviceName?: string;
  manufacturer?: string;
  brand?: string;
  model?: string;
  systemName?: string;
  systemVersion?: string;
  version?: string;
  isTablet?: boolean;
  isEmulator?: boolean;
  
  // Сетевые данные
  networkType?: string;
  isConnected?: boolean;
  
  // Дополнительные поля
  [key: string]: any;
}

API

Методы логирования

logger.error('Сообщение об ошибке', context);
logger.warn('Предупреждение', context);
logger.info('Информация', context);
logger.debug('Отладочная информация', context);
logger.exception(error, context); // Для объектов Error

Управление контекстом

// Установка глобального контекста (будет добавлен ко всем логам)
logger.setGlobalContext({ 
  feature: 'auth',
  experiment: 'new-ui' 
});

// Получение текущего контекста
const context = logger.getGlobalContext();

// Очистка глобального контекста
logger.clearGlobalContext();

Управление пользователем и сессией

logger.setUser('new-user-id');
logger.setSession('new-session-id');

Управление данными об устройстве

// Установка новых данных об устройстве (для React Native)
logger.setDeviceInfo(newDeviceInfo);

// Обновление существующих данных
logger.updateDeviceInfo({ 
  customField: 'value',
  networkType: '5g' 
});

// Получение текущих данных
const deviceInfo = logger.getDeviceInfo();

Принудительная отправка

// Отправить все логи из очереди немедленно
await logger.flush();

Автоматический перехват

Сетевые ошибки

SDK автоматически перехватывает:

  • HTTP ошибки (статус >= 400)
  • Сетевые ошибки (нет соединения)
  • Таймауты

Для fetch и XMLHttpRequest в браузере и React Native.

Глобальные ошибки

SDK автоматически перехватывает:

  • Необработанные исключения
  • Unhandled Promise rejections
  • JavaScript ошибки в React Native

Примеры использования

Базовое использование в React Native

import { initOmnisLogger } from '@your-org/omnis-logger';
import DeviceInfo from 'react-native-device-info';

// App.js
const App = () => {
  useEffect(() => {
    const initializeLogger = async () => {
      const deviceInfo = {
        platform: 'react-native',
        deviceId: await DeviceInfo.getDeviceId(),
        deviceName: await DeviceInfo.getDeviceName(),
        manufacturer: await DeviceInfo.getManufacturer(),
        model: DeviceInfo.getModel(),
        systemName: DeviceInfo.getSystemName(),
        systemVersion: DeviceInfo.getSystemVersion(),
        version: DeviceInfo.getVersion(),
        isTablet: DeviceInfo.isTablet(),
        isEmulator: await DeviceInfo.isEmulator(),
      };

      const logger = initOmnisLogger({
        endpoint: 'https://api.example.com',
        apiKey: 'your-api-key',
        environment: __DEV__ ? 'development' : 'production',
        platform: 'react-native',
        version: '1.0.0',
        deviceInfo: deviceInfo
      });

      // Глобальный контекст
      logger.setGlobalContext({
        appVersion: '1.0.0',
        buildNumber: '123'
      });
    };

    initializeLogger();
  }, []);

  return <YourApp />;
};

Использование в компонентах

import { getOmnisLogger } from '@your-org/omnis-logger';

const ProfileScreen = () => {
  const logger = getOmnisLogger();

  const handleSaveProfile = async () => {
    try {
      await saveProfile();
      logger?.info('Профиль сохранен', { 
        screen: 'Profile',
        action: 'save' 
      });
    } catch (error) {
      logger?.exception(error, { 
        screen: 'Profile',
        action: 'save' 
      });
    }
  };

  return (
    // ваш UI
  );
};

Формат данных лога

Каждый лог отправляется в следующем формате:

{
  level: 'error' | 'warn' | 'info' | 'debug',
  message: 'Сообщение лога',
  stack?: 'Stack trace для ошибок',
  context: { /* пользовательский контекст */ },
  userAgent: 'User agent браузера',
  url: 'Текущий URL (для браузера)',
  userId: 'ID пользователя',
  sessionId: 'ID сессии',
  platform: 'Платформа',
  version: 'Версия приложения',
  environment: 'development|staging|production',
  deviceInfo: { /* данные об устройстве */ }
}