Skip to main content

Overview

The Subscription Service is responsible for managing which apps receive which data streams from user sessions. It handles subscription lifecycle, validates permissions, tracks history, and provides efficient queries for message routing. File: packages/cloud/src/services/session/subscription.service.ts

Key Features

  1. In-memory subscription storage for fast access
  2. Permission validation for each subscription
  3. Language-specific subscriptions (e.g., transcription:en-US)
  4. Wildcard subscriptions (* or all)
  5. Subscription history tracking for debugging
  6. Calendar event and location caching
  7. Rate limiting for location updates

Data Structures

Subscription Storage

Subscription History

Core Operations

Update Subscriptions

Updates app subscriptions with permission validation and history tracking:

Query Subscriptions

Get Subscribed Apps

Find all apps subscribed to a specific stream:

Check Media Subscriptions

Determine what types of media processing are needed:

Language Subscriptions

Get minimal set of languages needed for transcription:

Caching Services

Calendar Events

Location Data

Session Cleanup

Remove all subscriptions and cached data for a session:

Permission Integration

The service integrates with the SimplePermissionChecker to validate each subscription:

Database Persistence

Location subscription rates are persisted to the User model with retry logic:

Best Practices

  1. Always validate permissions before accepting subscriptions
  2. Use version tracking for concurrent update detection
  3. Implement retry logic for database operations
  4. Clean up session data to prevent memory leaks
  5. Log subscription changes for debugging
  6. Sanitize package names for MongoDB keys