Xeonr Developer Docs
SDK

Real-time Events

Subscribe to real-time upload and folder change events via WebSocket.

The EventsClient provides real-time event streaming for bucket and upload changes over WebSocket. Use it to react to file uploads, deletions, moves, and other changes as they happen.

Setup

import { EventsClient } from '@xeonr/uploads-sdk/api/Events';

const upl = new Upl({ clientId: 'your-client-id' });
const events = new EventsClient(upl.getApiAdapter());

await events.connect();

Subscribing to events

// Subscribe to all changes in a bucket
const subId = await events.subscribe({
  bucketId: 'bkt_abc123',
});

// Subscribe to a specific upload
const subId = await events.subscribe({
  bucketId: 'bkt_abc123',
  uploadId: 'upl_xyz789',
});

// Subscribe to everything the user has access to
const subId = await events.subscribe({
  everything: true,
});

// Subscribe with filters
const subId = await events.subscribe({
  bucketId: 'bkt_abc123',
  filter: {
    changeTypes: ['CREATE', 'UPDATE', 'DELETE'],
    resourceTypes: ['UPLOAD', 'FOLDER'],
    pathPrefix: '/images',
  },
});

Subscribe options

OptionTypeDescription
everythingbooleanSubscribe to all accessible buckets
bucketIdstringSubscribe to a specific bucket
uploadIdstringSubscribe to a specific upload (requires bucketId)
filter.changeTypesChangeType[]Filter by change type
filter.resourceTypesChangeTarget[]Filter by resource type
filter.pathPrefixstringFilter by path prefix

Listening to events

// Resource changes (uploads, folders)
events.on('resourceChange', (event) => {
  console.log('Change:', event.changeType, event.resourceType, event.resourceId);
});

// Connection events
events.on('connected', () => console.log('Connected'));
events.on('disconnected', ({ code, reason }) => console.log('Disconnected:', reason));

// State changes
events.on('stateChange', (state) => {
  // state: 'disconnected' | 'connecting' | 'connected' | 'reconnecting'
});

// Errors
events.on('error', (error) => console.error('Event error:', error));

Event types

EventPayloadDescription
resourceChangeChange event objectUpload or folder changed
hello{ socketId }Initial connection acknowledgement
connectedWebSocket connected
disconnected{ code, reason }WebSocket disconnected
stateChangeConnectionStateConnection state transition
subscribeAckSubscription confirmationSubscribe succeeded
unsubscribeAckUnsubscribe succeeded
errorError objectServer-side error

Unsubscribing

await events.unsubscribe(subId);

Disconnecting

events.disconnect();

Reconnection

The client automatically reconnects on disconnection using exponential backoff:

  • Min delay: 1 second
  • Max delay: 30 seconds
  • Strategy: minMs * 2^attempt, capped at maxMs

On reconnect, all active subscriptions are automatically re-established.

A keepalive ping is sent every 5 seconds to detect stale connections.

Connection options

const events = new EventsClient(adapter, {
  reconnect: {
    minMs: 1000,    // Minimum reconnect delay (default: 1000)
    maxMs: 30000,   // Maximum reconnect delay (default: 30000)
  },
});

On this page