@recallai/desktop-sdk 1.3.5 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,3 +1,22 @@
1
+ ### 2.0.0 [major] (MacOS+Windows) 2025-12-03
2
+
3
+ - Captured data now is streamed to the Recall API backend rather than uploading after call
4
+ - Numerous crash fixes
5
+ - URL detection improvements for Google Meet and Teams
6
+ - Fix bug in Slack detection where changing microphones would prematurely end recording
7
+ - Fix bug where switching virtual desktops could prematurely end recordings on Safari
8
+ - Fix bug where Teams pre-join room was detected as a meeting
9
+ - Fix false positive Meet detections
10
+ - Don't prompt for permission to access Teams URL database if the app doesn't have permission
11
+ - Handle audio device errors more gracefully on Windows
12
+ - Support for Speechmatics realtime transcription
13
+ - Mitigation for cases when ScreenCaptureKit locks up
14
+
15
+ ### 1.3.6 [patch] (Windows) - 2025-11-18
16
+
17
+ - Fixed an issue that would cause audio to not process properly depending on recording config.
18
+ - Fixed an issue causing a crash on windows.
19
+
1
20
  ### 1.3.5 [patch] (MacOS+Windows) - 2025-11-16
2
21
 
3
22
  - Improved crash reporting on windows.
package/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- export type RecallAiSdkEvent = RecordingStartEvent | RecordingStopEvent | UploadProgressEvent | MeetingDetectedEvent | MeetingUpdatedEvent | MeetingClosedEvent | SdkStateChangeEvent | ErrorEvent | MediaCaptureStatusEvent | ParticipantCaptureStatusEvent | PermissionsGrantedEvent | RealtimeEvent | ShutdownEvent;
1
+ export type RecallAiSdkEvent = RecordingStartEvent | RecordingStopEvent | UploadProgressEvent | MeetingDetectedEvent | MeetingUpdatedEvent | MeetingClosedEvent | SdkStateChangeEvent | ErrorEvent | MediaCaptureStatusEvent | ParticipantCaptureStatusEvent | PermissionsGrantedEvent | RealtimeEvent | ShutdownEvent | LogEvent;
2
2
  export type EventTypeToPayloadMap = {
3
3
  'recording-started': RecordingStartEvent;
4
4
  'recording-ended': RecordingStopEvent;
@@ -14,13 +14,14 @@ export type EventTypeToPayloadMap = {
14
14
  'permission-status': PermissionStatusEvent;
15
15
  'realtime-event': RealtimeEvent;
16
16
  'shutdown': ShutdownEvent;
17
+ 'log': LogEvent;
17
18
  };
18
19
  export type Permission = 'accessibility' | 'screen-capture' | 'microphone' | 'system-audio' | 'full-disk-access';
19
20
  export interface RecallAiSdkWindow {
20
21
  id: string;
21
22
  title?: string;
22
23
  url?: string;
23
- platform: string;
24
+ platform?: string;
24
25
  }
25
26
  export interface RecallAiSdkConfig {
26
27
  api_url?: string;
@@ -103,6 +104,13 @@ export interface ShutdownEvent {
103
104
  code: number;
104
105
  signal: string;
105
106
  }
107
+ export interface LogEvent {
108
+ level: 'debug' | 'info' | 'warning' | 'error';
109
+ message: string;
110
+ subsystem: string;
111
+ category: string;
112
+ window_id: string;
113
+ }
106
114
  export declare function init(options: RecallAiSdkConfig): Promise<null>;
107
115
  export declare function shutdown(): Promise<null>;
108
116
  export declare function dumpAXTree(procName: string): Promise<any>;
package/index.js CHANGED
@@ -172,7 +172,7 @@ function logError(...log) {
172
172
  doLog("error", log);
173
173
  }
174
174
  function emitEvent(type, payload) {
175
- if (type !== "upload-progress" && type !== "realtime-event") {
175
+ if (type !== "upload-progress" && type !== "realtime-event" && type !== "log") {
176
176
  doLog("info", ["Receiving event: " + type + " | " + sortedStringify(payload)], false);
177
177
  }
178
178
  for (const listener of listeners) {
@@ -204,6 +204,16 @@ function startProcess() {
204
204
  if (process.platform === "win32" && process.env.GLOBAL_GST_RECALL !== "1") {
205
205
  envExtra["GST_PLUGIN_PATH"] = path.join(path.dirname(exe_path), "gstreamer-1.0");
206
206
  }
207
+ if (process.platform === "darwin") {
208
+ try {
209
+ const electron = require('electron');
210
+ envExtra["EXE_NAME"] = electron?.app?.getBundleID?.();
211
+ }
212
+ catch { }
213
+ }
214
+ if (!envExtra["EXE_NAME"]) {
215
+ envExtra["EXE_NAME"] = path.basename(process.execPath);
216
+ }
207
217
  const gst_dump_dir = process.env.RECALLAI_DESKTOP_SDK_DEV ? path.join(os.tmpdir(), "gst.nocommit") : os.tmpdir();
208
218
  if (!fs.existsSync(gst_dump_dir)) {
209
219
  try {
@@ -216,7 +226,7 @@ function startProcess() {
216
226
  proc = (0, child_process_1.spawn)(exe_path, {
217
227
  stdio: (process.platform === "darwin" ? ["pipe", "pipe", "pipe", "pipe"] : "pipe"),
218
228
  env: {
219
- GST_DEBUG: "2",
229
+ GST_DEBUG: "2,transcriber:4,rtewebsocketsink:4,rtewebhooksink:4,audiomixer:4,galleryview:4,dsdks3sink:5",
220
230
  GST_DEBUG_DUMP_DOT_DIR: gst_dump_dir,
221
231
  RUST_BACKTRACE: "1",
222
232
  // "DYLD_INSERT_LIBRARIES":"/opt/homebrew/lib/libjemalloc.dylib",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@recallai/desktop-sdk",
3
- "version": "1.3.5",
3
+ "version": "2.0.0",
4
4
  "description": "Recall Desktop SDK",
5
5
  "main": "./index.js",
6
6
  "types": "./index.d.ts",
@@ -20,5 +20,5 @@
20
20
  "@types/node": "^24.2.0",
21
21
  "typescript": "^5.3.3"
22
22
  },
23
- "commit_sha": "03a03fc6df97116782cba6e1675296fea793fad8"
23
+ "commit_sha": "8ea4cf1b6546f249d1ed3c2f61aa70542ff55eed"
24
24
  }