@todesktop/recall-desktop-sdk-client
v1.0.1
Published
ToDesktop plugin for Recall.ai Desktop Recording SDK - Client library
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
- Recall.ai Account: Sign up at recall.ai and get your API key
- ToDesktop Builder App: Create a ToDesktop application
- Backend Integration: Set up webhook endpoints and upload token generation
1. Install Dependencies
npm install @todesktop/recall-desktop-sdk-client3. Add Plugin to ToDesktop Builder
- Open ToDesktop Builder
- 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 SDKshutdownSdk()- Shutdown the SDK and cleanupgetStatus()- Get plugin and SDK statusstartRecording(windowId, uploadToken)- Start recording a meetingstopRecording(windowId)- Stop recordingpauseRecording(windowId)- Pause recordingresumeRecording(windowId)- Resume recordinguploadRecording(windowId)- Upload completed recordingprepareDesktopAudioRecording()- Prepare desktop audio capture
Event Listeners
onMeetingDetected(callback)- Meeting window detectedonRecordingStateChange(callback)- Recording state changesonRecordingStarted(callback)- Recording startedonRecordingEnded(callback)- Recording completedonUploadProgress(callback)- Upload progress updatesonError(callback)- SDK errorsonPermissionStatusChange(callback)- Permission changes
Configuration
setConfig(config)- Update plugin configurationgetConfig()- Get current configurationrequestPermission(permission)- Request specific permission
Development
Available Scripts
npm run build- Build all packagesnpm run dev- Development mode with watchnpm run test- Run testsnpm run typecheck- TypeScript type checkingnpm run clean- Clean build artifacts
Plugin Development
The plugin uses a mock Recall SDK implementation for development. To integrate with the real SDK:
Install the actual Recall SDK:
npm install @recallai/desktop-sdk --workspace=packages/pluginReplace 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
- Plugin not loading: Verify plugin is properly configured in ToDesktop Builder
- Permissions denied: Ensure all required permissions are granted in System Preferences
- SDK initialization fails: Check API URL and network connectivity
- 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.
