Skip to content

duckbugio/duckbug-js

Repository files navigation

@duckbug/js

npm version License: MIT

The official JavaScript SDK for DuckBug.io - a flexible logging and error tracking platform.

Features

  • πŸ¦† Simple Integration: Easy setup with DuckBug.io
  • πŸ”Œ Provider Architecture: Extensible plugin system for custom logging providers
  • πŸ“Š Multiple Log Levels: Support for debug, info, warn, and error levels
  • 🎯 TypeScript Support: Full TypeScript support with type definitions
  • πŸ“¦ Dual Module Format: Both CommonJS and ES Module support
  • ⚑ Lightweight: Minimal dependencies and small bundle size

Installation

# npm
npm install @duckbug/js

# yarn
yarn add @duckbug/js

# pnpm
pnpm add @duckbug/js

Quick Start

Basic Usage

import { DuckSDK, DuckBugProvider } from '@duckbug/js';

// Initialize with DuckBug.io provider
const providers = [
  new DuckBugProvider({
    dsn: 'your-duckbug-dsn-here'
  })
];

// Create SDK instance with optional configuration
const duck = new DuckSDK(providers, {
  logReports: {
    log: false,
    warn: true,
    error: true,
  }
});

// Start logging
duck.log('Info message', { userId: 123, action: 'user_login' });
duck.debug('Debug message', { debugInfo: 'Connection established' });
duck.warn('Warning message', { warning: 'Rate limit approaching' });
duck.error('Error message', { error: 'Database connection failed' });
duck.fatal('Fatal message', { error: 'Ay, caramba' });

//Send error
const testError = new Error("Integration test error");
testError.stack =
  "Error: Integration test error\n    at integration.test.ts:1:1";

// Use quack method directly on provider
duckBugProvider.quack("INTEGRATION_ERROR", testError);

API Reference

DuckSDK

The main SDK class that manages logging across multiple providers.

Constructor

new DuckSDK(providers: Provider[], config?: LogProviderConfig)
  • providers: Array of provider instances
  • config: Optional configuration for log reporting levels

Methods

  • log(tag: string, payload?: object): Log an info-level message
  • debug(tag: string, payload?: object): Log a debug-level message
  • warn(tag: string, payload?: object): Log a warning-level message
  • error(tag: string, payload?: object): Log an error-level message
  • fatal(tag: string, payload?: object): Log an fatal-level message
  • quack(tag: string, error: Error): Report error

DuckBugProvider

The official DuckBug.io provider for sending logs to the DuckBug.io platform.

Constructor

new DuckBugProvider(config: DuckConfig)
  • config.dsn: Your DuckBug.io DSN (Data Source Name)

Log Provider Configuration

type LogProviderConfig = {
  logReports: {
    log?: boolean;    // Enable/disable info logs (default: false)
    warn?: boolean;   // Enable/disable warning logs (default: true)
    error?: boolean;  // Enable/disable error logs (default: true)
  }
}

Custom Providers

You can create custom providers by implementing the Provider interface:

import { Provider, LogLevel } from '@duckbug/js';

class TelegramProvider implements Provider {
  constructor(private botToken: string, private chatId: string) {}

  log(...args: unknown[]): void {
    this.sendToTelegram('πŸ“', args);
  }

  warn(...args: unknown[]): void {
    this.sendToTelegram('⚠️', args);
  }

  error(...args: unknown[]): void {
    this.sendToTelegram('🚨', args);
  }

  report(tag: string, level: LogLevel, payload?: object): void {
    const emojiMap: Record<LogLevel, string> = {
      INFO: 'πŸ“',
      DEBUG: 'πŸ¦†',
      WARN: '⚠️',
      ERROR: '🚨',
      FATAL: 'πŸ’€',
    };
    this.sendToTelegram(emojiMap[level], [tag, payload]);
  }

  quack(tag: string, error: Error): void {
    this.sendToTelegram('πŸ’€', [tag, error.message]);
  }

  private sendToTelegram(emoji: string, args: unknown[]) {
    const message = `${emoji} ${args.join(' ')}`;
    // Implementation to send message to Telegram
    fetch(`https://api.telegram.org/bot${this.botToken}/sendMessage`, {
      method: 'POST',
      headers: { 'Content-Type': 'application/json' },
      body: JSON.stringify({
        chat_id: this.chatId,
        text: message
      })
    });
  }
}

// Usage
const providers = [
  new DuckBugProvider({ dsn: 'your-dsn' }),
  new TelegramProvider('your-bot-token', 'your-chat-id')
];

const duck = new DuckSDK(providers);

Development

Setup

Install dependencies:

bun install

Build

Build the library:

bun run build

Linting

Run linting:

bun run lint

Commit Messages

Π­Ρ‚ΠΎΡ‚ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Conventional Commits для стандартизации сообщСний ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ². ВсС ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌΡƒ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Ρƒ:

<type>(<scope>): <subject>

<body>

<footer>

Π’ΠΈΠΏΡ‹ ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² (ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅)

  • feat: Новая Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ
  • fix: Π˜ΡΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π±Π°Π³Π°
  • docs: ИзмСнСния Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ
  • style: Π€ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° (Π½Π΅ влияСт Π½Π° Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π°)
  • refactor: Π Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ½Π³ ΠΊΠΎΠ΄Π°
  • perf: Π£Π»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ
  • test: Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ тСстов
  • build: ИзмСнСния Π² систСмС сборки ΠΈΠ»ΠΈ Π²Π½Π΅ΡˆΠ½ΠΈΡ… зависимостях
  • ci: ИзмСнСния Π² CI ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ
  • chore: ОбновлСниС Π·Π°Π΄Π°Ρ‡ сборки, настроСк ΠΈ Ρ‚.Π΄.
  • revert: ΠžΡ‚ΠΊΠ°Ρ‚ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π³ΠΎ ΠΊΠΎΠΌΠΌΠΈΡ‚Π°

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹Ρ… ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ²

feat: Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ логирования ошибок
fix: ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ΡƒΡ‚Π΅Ρ‡ΠΊΡƒ памяти Π² DuckBugProvider
docs: ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ README с ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°ΠΌΠΈ использования
test: Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ тСсты для DuckSDK
refactor: ΡƒΠ»ΡƒΡ‡ΡˆΠΈΡ‚ΡŒ структуру классов ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€ΠΎΠ²

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ²

АвтоматичСская ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² выполняСтся Ρ‡Π΅Ρ€Π΅Π· git hook. ΠŸΡ€ΠΈ создании ΠΊΠΎΠΌΠΌΠΈΡ‚Π° с Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΌ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΎΠΌ Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΠ΅ сообщСниС ΠΎΠ± ошибкС с описаниСм ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°ΠΌΠΈ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ³ΠΎ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π°.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ошибок:

❌ Если Π·Π°Π±Ρ‹Π»ΠΈ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Ρ‚ΠΈΠΏ:

❌ Π’ΠΈΠΏ ΠΊΠΎΠΌΠΌΠΈΡ‚Π° обязатСлСн!
πŸ“ Π€ΠΎΡ€ΠΌΠ°Ρ‚ ΠΊΠΎΠΌΠΌΠΈΡ‚Π°: <type>: <описаниС>
πŸ’‘ ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹:
   feat: Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π½ΠΎΠ²ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ
   fix: ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ ошибок

❌ Если использовали Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ Ρ‚ΠΈΠΏ:

❌ НСвСрный Ρ‚ΠΈΠΏ ΠΊΠΎΠΌΠΌΠΈΡ‚Π°!
βœ… Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· допустимых Ρ‚ΠΈΠΏΠΎΠ²:
   - feat: новая Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ
   - fix: исправлСниС Π±Π°Π³Π°
   ...

Для Ρ€ΡƒΡ‡Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ сообщСния ΠΊΠΎΠΌΠΌΠΈΡ‚Π°:

bun run commitlint -- --from HEAD~1 --to HEAD

АвтоматичСскиС Ρ€Π΅Π»ΠΈΠ·Ρ‹

Π­Ρ‚ΠΎΡ‚ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ semantic-release для автоматичСского управлСния вСрсиями ΠΈ Ρ€Π΅Π»ΠΈΠ·Π°ΠΌΠΈ.

Как это Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚:

  • ВСрсионированиС: ВСрсия автоматичСски обновляСтся Π½Π° основС Ρ‚ΠΈΠΏΠΎΠ² ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ²:

    • feat: β†’ ΠΌΠΈΠ½ΠΎΡ€Π½ΠΎΠ΅ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ (1.0.0 β†’ 1.1.0)
    • fix: β†’ ΠΏΠ°Ρ‚Ρ‡ (1.0.0 β†’ 1.0.1)
    • BREAKING CHANGE ΠΈΠ»ΠΈ feat!: β†’ ΠΌΠ°ΠΆΠΎΡ€Π½ΠΎΠ΅ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ (1.0.0 β†’ 2.0.0)
    • chore:, docs:, style: ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ β†’ Π±Π΅Π· Ρ€Π΅Π»ΠΈΠ·Π°
  • АвтоматичСскиС дСйствия ΠΏΡ€ΠΈ ΠΏΡƒΡˆΠ΅ Π² main:

    1. Анализ ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² с послСднСго Ρ€Π΅Π»ΠΈΠ·Π°
    2. ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠΉ вСрсии
    3. ГСнСрация CHANGELOG.md
    4. ОбновлСниС вСрсии Π² package.json
    5. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ git Ρ‚Π΅Π³Π°
    6. ΠŸΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΡ Π² npm
    7. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ GitHub Release с Π·Π°ΠΌΠ΅Ρ‚ΠΊΠ°ΠΌΠΈ

Настройка:

  1. Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ NPM Ρ‚ΠΎΠΊΠ΅Π½ (Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΈ):

    • ΠŸΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ Π½Π° https://www.npmjs.com/settings/YOUR_USERNAME/tokens
    • Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ Ρ‚ΠΎΠΊΠ΅Π½ с ΠΏΡ€Π°Π²Π°ΠΌΠΈ Automation
    • Π”ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ Π΅Π³ΠΎ Π² GitHub Secrets ΠΊΠ°ΠΊ NPM_TOKEN
  2. GitHub Actions:

    • Workflow release.yaml автоматичСски запускаСтся ΠΏΡ€ΠΈ ΠΏΡƒΡˆΠ΅ Π² main ΠΈΠ»ΠΈ beta
    • Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ GITHUB_TOKEN (автоматичСски прСдоставляСтся GitHub Actions)
    • Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ NPM_TOKEN ΠΈΠ· сСкрСтов для ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΈ Π² npm

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² для Ρ€Π΅Π»ΠΈΠ·ΠΎΠ²:

# ΠŸΠ°Ρ‚Ρ‡ Ρ€Π΅Π»ΠΈΠ· (1.0.0 β†’ 1.0.1)
fix: ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ ошибок Π² DuckBugProvider

# ΠœΠΈΠ½ΠΎΡ€Π½Ρ‹ΠΉ Ρ€Π΅Π»ΠΈΠ· (1.0.0 β†’ 1.1.0)
feat: Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ Π»ΠΎΠ³ΠΎΠ²

# ΠœΠ°ΠΆΠΎΡ€Π½Ρ‹ΠΉ Ρ€Π΅Π»ΠΈΠ· (1.0.0 β†’ 2.0.0)
feat!: ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ API ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€ΠΎΠ²

# ΠΈΠ»ΠΈ

feat: Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π½ΠΎΠ²ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ

BREAKING CHANGE: ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π° структура ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ DuckBugProvider

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: ΠšΠΎΠΌΠΌΠΈΡ‚Ρ‹ Π±Π΅Π· Ρ‚ΠΈΠΏΠ° ΠΈΠ»ΠΈ с Ρ‚ΠΈΠΏΠΎΠΌ chore, docs, style Π½Π΅ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ Π½ΠΎΠ²Ρ‹ΠΉ Ρ€Π΅Π»ΠΈΠ·, Π½ΠΎ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹ Π² CHANGELOG.

TypeScript Support

This package includes TypeScript definitions. All exports are fully typed:

import type { Provider, DuckConfig, LogLevel } from '@duckbug/js';

Browser Compatibility

This SDK works in all modern browsers that support:

  • ES2015+ (ES6)
  • Fetch API
  • JSON API

For older browsers, you may need to include polyfills.

License

MIT Β© DuckBug.io

Support


Made with πŸ¦† by the DuckBug.io team

About

The official JS SDK for DuckBug (duckbug.io)

Resources

License

Stars

Watchers

Forks

Packages

No packages published