The official JavaScript SDK for DuckBug.io - a flexible logging and error tracking platform.
- 🦆 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
# npm
npm install @duckbug/js
# yarn
yarn add @duckbug/js
# pnpm
pnpm add @duckbug/jsimport { 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);The main SDK class that manages logging across multiple providers.
new DuckSDK(providers: Provider[], config?: LogProviderConfig)providers: Array of provider instancesconfig: Optional configuration for log reporting levels
log(tag: string, payload?: object): Log an info-level messagedebug(tag: string, payload?: object): Log a debug-level messagewarn(tag: string, payload?: object): Log a warning-level messageerror(tag: string, payload?: object): Log an error-level messagefatal(tag: string, payload?: object): Log an fatal-level messagequack(tag: string, error: Error): Report error
The official DuckBug.io provider for sending logs to the DuckBug.io platform.
new DuckBugProvider(config: DuckConfig)config.dsn: Your DuckBug.io DSN (Data Source Name)
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)
}
}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);Install dependencies:
bun installBuild the library:
bun run buildRun linting:
bun run lintЭтот проект использует 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:- Анализ коммитов с последнего релиза
- Определение новой версии
- Генерация CHANGELOG.md
- Обновление версии в package.json
- Создание git тега
- Публикация в npm
- Создание GitHub Release с заметками
-
Создайте NPM токен (только для публикации):
- Перейдите на https://www.npmjs.com/settings/YOUR_USERNAME/tokens
- Создайте токен с правами
Automation - Добавьте его в GitHub Secrets как
NPM_TOKEN
-
GitHub Actions:
- Workflow
release.yamlавтоматически запускается при пуше вmainилиbeta - Использует
GITHUB_TOKEN(автоматически предоставляется GitHub Actions) - Использует
NPM_TOKENиз секретов для публикации в npm
- Workflow
# Патч релиз (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.
This package includes TypeScript definitions. All exports are fully typed:
import type { Provider, DuckConfig, LogLevel } from '@duckbug/js';This SDK works in all modern browsers that support:
- ES2015+ (ES6)
- Fetch API
- JSON API
For older browsers, you may need to include polyfills.
MIT © DuckBug.io
- 🐛 Issues: GitHub Issues
Made with 🦆 by the DuckBug.io team