New:Microsoft Teams Notifications Are Now Available in Socket.Learn more →
Get Started

@xiboplayer/utils

Package Overview
Dependencies
Maintainers
1
Versions
82
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@xiboplayer/utils

Shared utilities for xiboplayer packages

Source
npmnpm
Version
0.7.22
Version published
Weekly downloads
114
16.33%
Maintainers
1
Weekly downloads
 
Created
Source

@xiboplayer/utils

Shared utilities for all XiboPlayer SDK packages.

Overview

Foundation utilities used across the SDK:

  • Logger -- structured logging with configurable levels (DEBUG, INFO, WARNING, ERROR, NONE) and per-module tags
  • Log sinks -- pluggable log destinations (console, LogReporter for CMS submission)
  • EventEmitter -- lightweight pub/sub event system
  • fetchWithRetry -- HTTP fetch with exponential backoff, jitter, and configurable retries
  • Config -- hardware key management, IndexedDB-backed configuration, CMS ID computation
  • CMS REST API client -- 77-method JSON API client with ETag caching and JWT auth
  • PLAYER_API -- configurable base path for media/widget/dependency URLs

Installation

npm install @xiboplayer/utils

Usage

Logger

import { createLogger, setLogLevel, applyCmsLogLevel, registerLogSink } from '@xiboplayer/utils';

const log = createLogger('my-module');
log.info('Starting...');
log.debug('Detailed info', { key: 'value' });
log.warn('Something unexpected');
log.error('Critical failure', error);

// Set global log level
setLogLevel('DEBUG');  // DEBUG, INFO, WARNING, ERROR, NONE

// Apply CMS log level (maps CMS values to SDK levels)
applyCmsLogLevel('audit'); // maps to DEBUG

// Register a custom log sink (e.g., CMS log reporter)
registerLogSink({
  log(level, tag, ...args) {
    cmsReporter.log(level, args.join(' '), tag);
  }
});

EventEmitter

import { EventEmitter } from '@xiboplayer/utils';

class MyClass extends EventEmitter {
  doSomething() {
    this.emit('done', { result: 42 });
  }
}

const obj = new MyClass();
obj.on('done', (data) => console.log(data));
obj.once('done', (data) => console.log('First time only'));
obj.off('done', handler);

fetchWithRetry

import { fetchWithRetry } from '@xiboplayer/utils';

const response = await fetchWithRetry(url, {
  retries: 3,        // Max retry attempts (default: 2)
  baseDelay: 2000,   // Base delay in ms (default: 2000)
  // Backoff: baseDelay * 2^attempt + random jitter
  headers: { 'Content-Type': 'application/json' },
  method: 'POST',
  body: JSON.stringify(data),
});

Config

import { config, computeCmsId } from '@xiboplayer/utils';

// Read config values (from localStorage / IndexedDB)
const cmsUrl = config.data.cmsUrl;
const hardwareKey = config.data.hardwareKey;

// Compute CMS ID for namespacing databases
const cmsId = computeCmsId('https://cms.example.com', 'display-key');
// Returns FNV hash string for unique IndexedDB names per CMS+display pair

CMS REST API client

import { CmsApiClient } from '@xiboplayer/utils';

const api = new CmsApiClient({
  baseUrl: 'https://cms.example.com',
  clientId: 'oauth-client-id',
  clientSecret: 'oauth-client-secret',
});

// 77 methods covering all CMS entities
const displays = await api.getDisplays();
const layouts = await api.getLayouts();
await api.authorizeDisplay(displayId);

PLAYER_API

import { PLAYER_API, setPlayerApi } from '@xiboplayer/utils';

// Default: '/api/v2/player'
console.log(PLAYER_API); // '/api/v2/player'

// Override before route registration (e.g., in proxy setup)
setPlayerApi('/custom/player/path');

Exports

ExportDescription
createLogger(tag)Create a tagged logger instance
setLogLevel(level)Set global log level
getLogLevel()Get current log level
isDebug()Check if DEBUG level is active
applyCmsLogLevel(cmsLevel)Map CMS log level to SDK level
registerLogSink(sink)Add custom log destination
unregisterLogSink(sink)Remove log destination
LOG_LEVELSLevel constants: DEBUG, INFO, WARNING, ERROR, NONE
EventEmitterPub/sub event emitter class
fetchWithRetry(url, opts)Fetch with exponential backoff
configGlobal config instance (localStorage/IndexedDB)
extractPwaConfig(config)Extract PWA-relevant keys from shell config
computeCmsId(url, key)FNV hash for CMS+display namespacing
SHELL_ONLY_KEYSConfig keys not forwarded to PWA
CmsApiClientCMS REST API client (77 methods)
CmsApiErrorAPI error class with status code
PLAYER_APIMedia/widget base path (configurable)
setPlayerApi(base)Override PLAYER_API at runtime
VERSIONPackage version from package.json

Dependencies

No external runtime dependencies.

xiboplayer.org · Part of the XiboPlayer SDK

Keywords

xibo

FAQs

Package last updated on 16 Apr 2026

Related posts