Typed Activities

SBCanvas normalizes raw platform events into typed Activity objects. Every activity has a consistent shape regardless of whether it came from Kick, Rumble, or Blaze.

Activity Interface

interface Activity {
  id: string
  type: 'follow' | 'subscribe' | 'gift_sub' | 'rant' | 'tip' | 'raid' | 'host'
  provider: 'kick' | 'rumble' | 'blaze'
  username: string
  amount?: number
  currency?: string
  message?: string
  tier?: string
  gifted?: boolean
  recipient?: string
  viewers?: number
  timestamp: number
  raw: Record<string, any>
}

Listening for Activities

// Recommended: activities API
SBCanvas.activities.on('follow', (activity) => {
  console.log(`${activity.username} followed`);
});

// Wildcard: all activity types
SBCanvas.activities.on('*', (activity) => {
  console.log(`[${activity.type}] ${activity.username}`);
});

// Low-level: event bus (same data, different syntax)
SBCanvas.on('activity:follow', (activity) => {
  console.log(`${activity.username} followed`);
});
Both activities.on('follow', fn) and SBCanvas.on('activity:follow', fn) fire the same Activity object.

One-Time Listener

SBCanvas.activities.once('raid', (activity) => {
  console.log(`First raid: ${activity.username} with ${activity.viewers} viewers`);
});

Latest Activity

const lastTip = SBCanvas.activities.latest('tip');
if (lastTip) {
  console.log(`Last tip: $${lastTip.amount} from ${lastTip.username}`);
}

Recent Activities

const recent = SBCanvas.activities.recent(10);
// Up to 10 most recent activities of any type (max 50)

Unsubscribing

function handleFollow(activity) {
  showFollowAlert(activity.username);
}

SBCanvas.activities.on('follow', handleFollow);
SBCanvas.activities.off('follow', handleFollow);

Platform Support

ActivityKickRumbleBlaze
followYesYesYes
subscribeYesYesYes
gift_subYesYesYes
rantYes
tipYesYes
raidYesYes
hostYes
Use SBCanvas.platform.hasFeature() to check support before registering listeners.

API Reference

MethodDescription
activities.on(type, fn)Listen for activity type (* for all)
activities.once(type, fn)One-time listener
activities.off(type, fn?)Unsubscribe
activities.latest(type)Most recent activity of type
activities.recent(limit?)Recent activities (max 50)