npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2025 – Pkg Stats / Ryan Hefner

@todesktop/recall-desktop-sdk-plugin

v1.0.1

Published

ToDesktop plugin for Recall.ai Desktop Recording SDK - Plugin package

Readme

ToDesktop Recall Desktop SDK Plugin

A ToDesktop plugin that integrates with Recall.ai's Desktop Recording SDK to enable automatic meeting recording for Zoom, Google Meet, and Microsoft Teams.

Overview

This plugin provides a complete integration between ToDesktop and the Recall.ai Desktop Recording SDK, offering:

  • Automatic meeting detection for Zoom, Google Meet, Microsoft Teams, and Slack
  • Recording management with start, stop, pause, and resume functionality
  • Desktop audio recording for non-meeting scenarios
  • Real-time events including transcription and participant data
  • Permission management for accessibility, screen capture, and microphone access
  • Upload progress tracking and webhook integration
  • Type-safe client library for web applications

Installation &s Setup

Prerequisites

  1. Recall.ai Account: Sign up at recall.ai and get your API key
  2. ToDesktop Builder App: Create a ToDesktop application
  3. Backend Integration: Set up webhook endpoints and upload token generation

1. Install Dependencies

npm install @todesktop/recall-desktop-sdk-client

3. Add Plugin to ToDesktop Builder

  1. Open ToDesktop Builder
  2. Install the recall desktop sdk plugin

4. Configure Plugin Preferences

In ToDesktop Builder, configure the following preferences:

  • API URL: Your Recall.ai region URL (e.g., https://us-east-1.recall.ai)
  • Enable Plugin: Toggle to enable/disable recording functionality
  • Request permissions on startup: Automatically request required permissions

Usage

Basic Recording Workflow

import { recallDesktop } from "@todesktop/recall-desktop-sdk-client";

// Initialize the SDK
await recallDesktop.initSdk();

// Listen for meeting detection
recallDesktop.onMeetingDetected(async ({ window }) => {
  console.log("Meeting detected:", window);

  // Get upload token from your backend
  const uploadToken = await getUploadTokenFromBackend();

  // Start recording
  const result = await recallDesktop.startRecording(window.id, uploadToken);
  if (result.success) {
    console.log("Recording started successfully");
  }
});

// Listen for recording events
recallDesktop.onRecordingStateChange(({ sdk }) => {
  console.log("Recording state:", sdk.state.code);
});

recallDesktop.onUploadProgress(({ progress }) => {
  console.log(`Upload progress: ${progress}%`);
});

// Handle recording completion
recallDesktop.onRecordingEnded(async ({ window }) => {
  console.log("Recording ended for window:", window.id);

  // Upload the recording
  await recallDesktop.uploadRecording(window.id);
});

Desktop Audio Recording

For capturing audio from applications other than supported meeting platforms:

// Prepare desktop audio recording
const { data } = await recallDesktop.prepareDesktopAudioRecording();
const { windowId } = data;

// Get upload token and start recording
const uploadToken = await getUploadTokenFromBackend();
await recallDesktop.startRecording(windowId, uploadToken);

// Stop when done
await recallDesktop.stopRecording(windowId);
await recallDesktop.uploadRecording(windowId);

Permission Management

// Check permission status
const status = await recallDesktop.getStatus();
console.log("Permissions:", status.permissions);

// Request specific permission
await recallDesktop.requestPermission("screen-capture");

// Listen for permission changes
recallDesktop.onPermissionStatusChange(({ permission, status }) => {
  console.log(`Permission ${permission}: ${status}`);
});

Backend Integration

Creating Upload Tokens

Your backend needs to create upload tokens using the Recall.ai API:

// Example backend endpoint
app.post("/api/create-upload-token", async (req, res) => {
  const response = await fetch(`${RECALL_API_URL}/api/v1/sdk-upload/`, {
    method: "POST",
    headers: {
      Authorization: `Token ${RECALL_API_KEY}`,
      "Content-Type": "application/json",
    },
    body: JSON.stringify({
      transcript: {
        provider: {
          assembly_ai_streaming: {},
        },
      },
    }),
  });

  const data = await response.json();
  res.json({ uploadToken: data.upload_token });
});

Webhook Handling

Set up webhooks to handle recording completion:

app.post("/webhooks/recall", (req, res) => {
  const { event, data } = req.body;

  switch (event) {
    case "sdk_upload.complete":
      console.log("Recording completed:", data.recording.id);
      // Process completed recording
      break;

    case "sdk_upload.failed":
      console.log("Recording failed:", data);
      // Handle failure
      break;

    case "sdk_upload.uploading":
      console.log("Recording uploading:", data);
      // Track upload progress
      break;
  }

  res.status(200).send("OK");
});

API Reference

Main Methods

  • initSdk() - Initialize the Recall SDK
  • shutdownSdk() - Shutdown the SDK and cleanup
  • getStatus() - Get plugin and SDK status
  • startRecording(windowId, uploadToken) - Start recording a meeting
  • stopRecording(windowId) - Stop recording
  • pauseRecording(windowId) - Pause recording
  • resumeRecording(windowId) - Resume recording
  • uploadRecording(windowId) - Upload completed recording
  • prepareDesktopAudioRecording() - Prepare desktop audio capture

Event Listeners

  • onMeetingDetected(callback) - Meeting window detected
  • onRecordingStateChange(callback) - Recording state changes
  • onRecordingStarted(callback) - Recording started
  • onRecordingEnded(callback) - Recording completed
  • onUploadProgress(callback) - Upload progress updates
  • onError(callback) - SDK errors
  • onPermissionStatusChange(callback) - Permission changes

Configuration

  • setConfig(config) - Update plugin configuration
  • getConfig() - Get current configuration
  • requestPermission(permission) - Request specific permission

Development

Available Scripts

  • npm run build - Build all packages
  • npm run dev - Development mode with watch
  • npm run test - Run tests
  • npm run typecheck - TypeScript type checking
  • npm run clean - Clean build artifacts

Plugin Development

The plugin uses a mock Recall SDK implementation for development. To integrate with the real SDK:

  1. Install the actual Recall SDK:

    npm install @recallai/desktop-sdk --workspace=packages/plugin
  2. Replace the mock in packages/plugin/src/main.ts:

    // Replace mock with real import
    import RecallAiSdk from "@recallai/desktop-sdk";

Supported Platforms

  • Zoom: Full meeting detection and recording
  • Google Meet: Full meeting detection and recording
  • Microsoft Teams: Full meeting detection and recording
  • Slack Huddles: Audio capture (limited metadata)
  • Desktop Audio: General audio capture for other applications

Security & Privacy

  • All recording operations require explicit user consent
  • Plugin preferences control recording behavior
  • Recordings are encrypted during upload
  • Only authorized applications can access the recording APIs
  • Meeting participants should be notified of recording as required by law

Troubleshooting

Common Issues

  1. Plugin not loading: Verify plugin is properly configured in ToDesktop Builder
  2. Permissions denied: Ensure all required permissions are granted in System Preferences
  3. SDK initialization fails: Check API URL and network connectivity
  4. Recording fails: Verify upload token is valid and backend is accessible

Debug Mode

Enable debug logging by setting preferences or environment variables in your ToDesktop app.

License

MIT License - see LICENSE file for details.

Support