tabby-rdp 0.2.7 → 0.3.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.
Files changed (57) hide show
  1. package/CHANGELOG.md +61 -2
  2. package/README.md +181 -21
  3. package/dist/connectionStatus.js +140 -0
  4. package/dist/connectionStatus.js.map +1 -0
  5. package/dist/desk.js +21 -10
  6. package/dist/desk.js.map +1 -1
  7. package/dist/deskScript.js +3 -0
  8. package/dist/deskScript.js.map +1 -1
  9. package/dist/desktop.service.js +993 -53
  10. package/dist/desktop.service.js.map +1 -1
  11. package/dist/desktopForm.js +64 -19
  12. package/dist/desktopForm.js.map +1 -1
  13. package/dist/desktops.js +60 -21
  14. package/dist/desktops.js.map +1 -1
  15. package/dist/fileTransfer.js +152 -5
  16. package/dist/fileTransfer.js.map +1 -1
  17. package/dist/header.js +22 -7
  18. package/dist/header.js.map +1 -1
  19. package/dist/help.js +235 -0
  20. package/dist/help.js.map +1 -0
  21. package/dist/index.js +14 -1
  22. package/dist/index.js.map +1 -1
  23. package/dist/keyboard.js +142 -5
  24. package/dist/keyboard.js.map +1 -1
  25. package/dist/microphone.js +295 -0
  26. package/dist/microphone.js.map +1 -0
  27. package/dist/osd.js +79 -0
  28. package/dist/osd.js.map +1 -0
  29. package/dist/probe.js +33 -0
  30. package/dist/probe.js.map +1 -0
  31. package/dist/rdcleanpath.js +132 -7
  32. package/dist/rdcleanpath.js.map +1 -1
  33. package/dist/rdpFile.js +47 -0
  34. package/dist/rdpFile.js.map +1 -0
  35. package/dist/rdpProfile.js +367 -0
  36. package/dist/rdpProfile.js.map +1 -0
  37. package/dist/remoteSetup.js +90 -11
  38. package/dist/remoteSetup.js.map +1 -1
  39. package/dist/settingsPage.js +538 -0
  40. package/dist/settingsPage.js.map +1 -0
  41. package/dist/signin.js +21 -2
  42. package/dist/signin.js.map +1 -1
  43. package/dist/ssh.js +28 -0
  44. package/dist/ssh.js.map +1 -1
  45. package/dist/targets.js +148 -8
  46. package/dist/targets.js.map +1 -1
  47. package/dist/ui.js +154 -24
  48. package/dist/ui.js.map +1 -1
  49. package/dist/vms.js +90 -0
  50. package/dist/vms.js.map +1 -0
  51. package/dist/wake.js +124 -0
  52. package/dist/wake.js.map +1 -0
  53. package/package.json +2 -1
  54. package/vendor/IRONRDP-LICENSE +3 -3
  55. package/vendor/iron-remote-desktop-rdp.js +698 -451
  56. package/vendor/iron-remote-desktop.js +87 -81
  57. package/vendor/ironrdp_web_bg.wasm +0 -0
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,wCAAkD;AAClD,2CAAmH;AACnH,mDAAkD;AAClD,uDAAsE;AACtE,iCAA6C;AAC7C,qCAAyC;AACzC,yCAA4C;AAC5C,+BAAkC;AAClC,uCAAwD;AACxD,6BAEa;AAWE,IAAM,mBAAmB,GAAzB,MAAM,mBAAmB;IACpC,YAAa,GAAe,EAAE,OAAuB,EAAE,OAA6B,EAAE,MAAsB,EAAE,OAAsB,EAAE,QAAyB,EAAE,QAAkB;QAC/K,IAAA,8BAAY,GAAE,CAAA;QACd,MAAM,CAAC,OAAO,EAAE,CAAA;QAChB,QAAQ,CAAC,OAAO,CAAC,kBAAa,CAAC,CAAA;QAC/B,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,EAAU,EAAE,EAAE;YACrC,IAAI,EAAE,KAAK,kBAAa,EAAE,CAAC;gBACvB,OAAM;YACV,CAAC;YACD,MAAM,IAAI,GAAG,IAAA,uBAAa,EAAC,GAAG,CAAC,SAAS,CAAC,CAAA;YACzC,IAAI,IAAI,EAAE,CAAC;gBACP,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;YACxB,CAAC;QACL,CAAC,CAAC,CAAA;QACF,sDAAsD;QACtD,MAAM,CAAC,GAAG,MAAa,CAAA;QACvB,CAAC,CAAC,eAAe,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,aAAa,EAAb,uBAAa,EAAE,QAAQ,EAAE,UAAU,EAAV,gBAAU,EAAE,CAAA;IACtF,CAAC;CACJ,CAAA;AAlBoB,mBAAmB;IATvC,IAAA,eAAQ,EAAC;QACN,SAAS,EAAE;YACP,EAAE,OAAO,EAAE,2BAAc,EAAE,QAAQ,EAAE,yBAAoB,EAAE,KAAK,EAAE,IAAI,EAAE;YACxE,EAAE,OAAO,EAAE,2BAAc,EAAE,QAAQ,EAAE,wBAAmB,EAAE,KAAK,EAAE,IAAI,EAAE;YACvE,EAAE,OAAO,EAAE,uCAA0B,EAAE,QAAQ,EAAE,6BAAwB,EAAE,KAAK,EAAE,IAAI,EAAE;YACxF,EAAE,OAAO,EAAE,kCAAiB,EAAE,QAAQ,EAAE,+BAA0B,EAAE,KAAK,EAAE,IAAI,EAAE;YACjF,EAAE,OAAO,EAAE,kCAAiB,EAAE,QAAQ,EAAE,2BAAoB,EAAE,KAAK,EAAE,IAAI,EAAE;SAC9E;KACJ,CAAC;qCAEoB,uBAAU,EAAW,2BAAc,EAAW,sCAAoB,EAAU,uBAAc,EAAW,uBAAa,EAAY,0BAAe,EAAY,eAAQ;GADlK,mBAAmB,CAkBvC;kBAlBoB,mBAAmB"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,wCAAkD;AAClD,2CAGmB;AACnB,mDAAoD;AACpD,mDAAkD;AAClD,uDAAsE;AACtE,iCAA6C;AAC7C,qCAAyC;AACzC,yCAA4C;AAC5C,iCAA0C;AAC1C,uCAAwC;AACxC,6CAEqB;AACrB,iDAAyF;AACzF,+BAAkC;AAClC,uCAAwD;AACxD,6BAEa;AAmBE,IAAM,mBAAmB,GAAzB,MAAM,mBAAmB;IACpC,YAAa,GAAe,EAAE,OAAuB,EAAE,OAA6B,EAAE,MAAsB,EAAE,OAAsB,EAAE,QAAyB,EAAE,QAAkB;QAC/K,IAAA,8BAAY,GAAE,CAAA;QACd,MAAM,CAAC,OAAO,EAAE,CAAA;QAChB,QAAQ,CAAC,OAAO,CAAC,kBAAa,CAAC,CAAA;QAC/B,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,EAAU,EAAE,EAAE;YACrC,IAAI,EAAE,KAAK,kBAAa,EAAE,CAAC;gBACvB,OAAM;YACV,CAAC;YACD,MAAM,IAAI,GAAG,IAAA,uBAAa,EAAC,GAAG,CAAC,SAAS,CAAC,CAAA;YACzC,IAAI,IAAI,EAAE,CAAC;gBACP,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;YACxB,CAAC;QACL,CAAC,CAAC,CAAA;QACF,sDAAsD;QACtD,MAAM,CAAC,GAAG,MAAa,CAAA;QACvB,CAAC,CAAC,eAAe,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,aAAa,EAAb,uBAAa,EAAE,QAAQ,EAAE,UAAU,EAAV,gBAAU,EAAE,YAAY,EAAZ,sBAAY,EAAE,IAAI,EAAE,QAAQ,CAAC,GAAG,CAAC,wBAAiB,CAAC,EAAE,CAAA;IAC3I,CAAC;CACJ,CAAA;AAlBoB,mBAAmB;IAjBvC,IAAA,eAAQ,EAAC;QACN,SAAS,EAAE;YACP,EAAE,OAAO,EAAE,2BAAc,EAAE,QAAQ,EAAE,yBAAoB,EAAE,KAAK,EAAE,IAAI,EAAE;YACxE,EAAE,OAAO,EAAE,2BAAc,EAAE,QAAQ,EAAE,wBAAmB,EAAE,KAAK,EAAE,IAAI,EAAE;YACvE,EAAE,OAAO,EAAE,uCAA0B,EAAE,QAAQ,EAAE,6BAAwB,EAAE,KAAK,EAAE,IAAI,EAAE;YACxF,EAAE,OAAO,EAAE,kCAAiB,EAAE,QAAQ,EAAE,+BAA0B,EAAE,KAAK,EAAE,IAAI,EAAE;YACjF,EAAE,OAAO,EAAE,kCAAiB,EAAE,QAAQ,EAAE,2BAAoB,EAAE,KAAK,EAAE,IAAI,EAAE;YAC3E,kDAAkD;YAClD,EAAE,OAAO,EAAE,4BAAe,EAAE,WAAW,EAAE,+BAAkB,EAAE,KAAK,EAAE,IAAI,EAAE;YAC1E,EAAE,OAAO,EAAE,gCAAmB,EAAE,QAAQ,EAAE,2BAAc,EAAE,KAAK,EAAE,IAAI,EAAE;YACvE,EAAE,OAAO,EAAE,kCAAiB,EAAE,QAAQ,EAAE,6BAAgB,EAAE,KAAK,EAAE,IAAI,EAAE;YACvE,EAAE,OAAO,EAAE,4BAAe,EAAE,QAAQ,EAAE,wBAAW,EAAE,KAAK,EAAE,IAAI,EAAE;YAChE,+EAA+E;YAC/E,EAAE,OAAO,EAAE,oCAAmB,EAAE,QAAQ,EAAE,uCAAwB,EAAE,KAAK,EAAE,IAAI,EAAE;SACpF;QACD,YAAY,EAAE,CAAC,4BAAe,EAAE,wCAA2B,EAAE,6CAA8B,CAAC;KAC/F,CAAC;qCAEoB,uBAAU,EAAW,2BAAc,EAAW,sCAAoB,EAAU,uBAAc,EAAW,uBAAa,EAAY,0BAAe,EAAY,eAAQ;GADlK,mBAAmB,CAkBvC;kBAlBoB,mBAAmB"}
package/dist/keyboard.js CHANGED
@@ -9,10 +9,11 @@ var __metadata = (this && this.__metadata) || function (k, v) {
9
9
  if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
10
  };
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.DesktopKeyboard = void 0;
12
+ exports.DesktopKeyboard = exports.SEND_KEYS = void 0;
13
13
  const core_1 = require("@angular/core");
14
14
  const tabby_core_1 = require("tabby-core");
15
15
  const desktop_service_1 = require("./desktop.service");
16
+ const fileTransfer_1 = require("./fileTransfer");
16
17
  const targets_1 = require("./targets");
17
18
  /**
18
19
  * Tabby shortcuts that keep working while a desktop covers the pane: getting back to the console, and moving
@@ -22,11 +23,50 @@ const targets_1 = require("./targets");
22
23
  /** Modifier and lock keys: macOS does send their keyups, and they must stay down until then. */
23
24
  const MODIFIERS = /^(Shift|Control|Alt|Meta|OS)(Left|Right)$|^(CapsLock|Fn|FnLock|NumLock|ScrollLock)$/;
24
25
  const TABBY_SHORTCUTS = new Set(['next-tab', 'previous-tab', 'next-mru-tab', 'previous-mru-tab', 'toggle-last-tab', 'toggle-fullscreen']);
26
+ /**
27
+ * "Send keys", per kind of desktop: combinations the local system keeps for itself (Ctrl+Alt+Del, Win+L) or that
28
+ * are awkward to press from here. GNOME gets its own: Ctrl+Alt+Del only offers to log out there, and Super+L would
29
+ * lock a headless session, whose password the user may not even have (SSH keys).
30
+ */
31
+ exports.SEND_KEYS = {
32
+ windows: [
33
+ { label: 'Ctrl+Alt+Del', codes: ['ControlLeft', 'AltLeft', 'Delete'] },
34
+ { label: 'Windows key (Start)', codes: ['MetaLeft'] },
35
+ { label: 'Win+R (Run)', codes: ['MetaLeft', 'KeyR'] },
36
+ { label: 'Win+E (File Explorer)', codes: ['MetaLeft', 'KeyE'] },
37
+ { label: 'Win+D (show the desktop)', codes: ['MetaLeft', 'KeyD'] },
38
+ { label: 'Win+L (lock)', codes: ['MetaLeft', 'KeyL'] },
39
+ { label: 'Alt+Tab', codes: ['AltLeft', 'Tab'] },
40
+ { label: 'Alt+F4 (close the window)', codes: ['AltLeft', 'F4'] },
41
+ { label: 'Ctrl+Shift+Esc (Task Manager)', codes: ['ControlLeft', 'ShiftLeft', 'Escape'] },
42
+ { label: 'Print Screen', codes: ['PrintScreen'] },
43
+ ],
44
+ gnome: [
45
+ { label: 'Super (Activities)', codes: ['MetaLeft'] },
46
+ { label: 'Super+A (apps)', codes: ['MetaLeft', 'KeyA'] },
47
+ { label: 'Super+V (notifications)', codes: ['MetaLeft', 'KeyV'] },
48
+ { label: 'Alt+F2 (run a command)', codes: ['AltLeft', 'F2'] },
49
+ { label: 'Alt+Tab', codes: ['AltLeft', 'Tab'] },
50
+ { label: 'Alt+F4 (close the window)', codes: ['AltLeft', 'F4'] },
51
+ { label: 'Print Screen (screenshot)', codes: ['PrintScreen'] },
52
+ ],
53
+ // xrdp: whichever desktop the host runs (XFCE, KDE, MATE, …); these mean much the same in all of them.
54
+ xrdp: [
55
+ { label: 'Super (menu)', codes: ['MetaLeft'] },
56
+ { label: 'Alt+F2 (run a command)', codes: ['AltLeft', 'F2'] },
57
+ { label: 'Alt+Tab', codes: ['AltLeft', 'Tab'] },
58
+ { label: 'Alt+F4 (close the window)', codes: ['AltLeft', 'F4'] },
59
+ { label: 'Ctrl+Alt+Del', codes: ['ControlLeft', 'AltLeft', 'Delete'] },
60
+ { label: 'Print Screen', codes: ['PrintScreen'] },
61
+ ],
62
+ };
25
63
  /**
26
64
  * Routes the keyboard while a remote desktop has it:
27
65
  * - Tabby's hotkeys: only the desktop/console switch and TABBY_SHORTCUTS fire, and those don't reach the remote.
28
66
  * - Mac shortcuts (setting, on by default): ⌘ is sent as Ctrl, so ⌘C/⌘V/⌘Z/… do what they do on a Mac, and
29
- * tapping ⌘ on its own is the Windows/Super key (Start, Activities). Off: ⌘ is the Windows/Super key.
67
+ * tapping ⌘ on its own is the Windows/Super key (Start, Activities). ⌃⌘+key is the Windows key with that key
68
+ * (Win+R, Win+E, …). Off: ⌘ is the Windows/Super key.
69
+ * - View only (per desktop): no keys reach the remote.
30
70
  * - macOS sends no keyup for a key pressed while ⌘ is down; the remote gets one right after the keydown, so
31
71
  * the key doesn't stay pressed there.
32
72
  */
@@ -42,6 +82,8 @@ let DesktopKeyboard = class DesktopKeyboard {
42
82
  this.startedOn = new WeakMap();
43
83
  /** ⌘ is down and nothing else was pressed with it (a tap sends the Windows key). */
44
84
  this.metaAlone = false;
85
+ /** The pane whose keys are being routed: its tab's other desktops get copies when typing into all. */
86
+ this.routing = null;
45
87
  }
46
88
  install(toggleHotkey) {
47
89
  // Tabby matches hotkeys in a document listener; filter what it may match while a desktop covers the pane.
@@ -79,6 +121,21 @@ let DesktopKeyboard = class DesktopKeyboard {
79
121
  if (!pane || focused?.tagName !== 'IRON-REMOTE-DESKTOP' || !pane.element.nativeElement.contains(focused)) {
80
122
  return;
81
123
  }
124
+ this.routing = pane;
125
+ try {
126
+ this.routeFor(pane, event);
127
+ }
128
+ finally {
129
+ this.routing = null;
130
+ }
131
+ }
132
+ /** A key as the focused desktop gets it, also to the others of a tab typing into all (see RemoteDesktopService.broadcastKey). */
133
+ mirror(type, init) {
134
+ if (this.routing) {
135
+ this.desktop.broadcastKey(this.routing, type, init);
136
+ }
137
+ }
138
+ routeFor(pane, event) {
82
139
  // A Tabby shortcut Tabby just acted on: not for the remote.
83
140
  if (event.type === 'keydown' && this.hotkeys.pressedHotkey) {
84
141
  this.metaAlone = false;
@@ -86,8 +143,54 @@ let DesktopKeyboard = class DesktopKeyboard {
86
143
  event.preventDefault();
87
144
  return;
88
145
  }
146
+ if (this.desktop.isViewOnly(pane)) {
147
+ this.metaAlone = false;
148
+ event.stopImmediatePropagation();
149
+ event.preventDefault();
150
+ return;
151
+ }
89
152
  const isMeta = event.code === 'MetaLeft' || event.code === 'MetaRight';
90
153
  const macShortcuts = process.platform === 'darwin' && this.desktop.settings().macShortcuts;
154
+ // Paste with files copied here (Finder, …): offer them first, then paste once the remote has had a moment to
155
+ // take the new clipboard (else it pastes what it had). The whole Ctrl+V goes then, whenever ⌘ is let go.
156
+ const paste = event.code === 'KeyV' && !event.shiftKey && !event.altKey && (macShortcuts ? event.metaKey && !event.ctrlKey : event.ctrlKey && !event.metaKey);
157
+ if (paste && event.type === 'keydown' && !event.repeat && this.desktop.isBroadcast(pane) && (0, fileTransfer_1.clipboardPaths)().length) {
158
+ // Typing into all desktops: the copied files go to all of them.
159
+ this.metaAlone = false;
160
+ event.stopImmediatePropagation();
161
+ event.preventDefault();
162
+ this.desktop.pasteToAll(pane);
163
+ return;
164
+ }
165
+ if (paste && event.type === 'keydown' && !event.repeat && this.desktop.pasteClipboardFiles(pane)) {
166
+ this.metaAlone = false;
167
+ event.stopImmediatePropagation();
168
+ event.preventDefault();
169
+ this.desktop.pasteReady(pane).then(ok => { if (ok)
170
+ this.send(pane, { label: 'Ctrl+V (files copied here)', codes: ['ControlLeft', 'KeyV'] }); });
171
+ return;
172
+ }
173
+ if (macShortcuts && event.metaKey && event.ctrlKey && !MODIFIERS.test(event.code)) {
174
+ // ⌃⌘+key: the Windows key with that key. With ⌘ sent as Ctrl, ⌃⌘ would only mean Ctrl again, so
175
+ // nothing is lost, and macOS keeps few ⌃⌘ shortcuts for itself.
176
+ event.stopImmediatePropagation();
177
+ event.preventDefault();
178
+ if (event.type === 'keydown') {
179
+ this.metaAlone = false;
180
+ // Ctrl is down on the remote (⌃, and ⌘ sent as Ctrl): let go of it, or this would be Ctrl+Win+key.
181
+ // Releasing a key that isn't down sends nothing.
182
+ for (const code of ['ControlLeft', 'ControlRight']) {
183
+ this.forward(event, { key: 'Control', code, plain: true }, 'keyup');
184
+ }
185
+ const win = { key: 'Meta', code: 'MetaLeft', plain: true };
186
+ this.forward(event, win, 'keydown');
187
+ this.forward(event, { plain: true }, 'keydown');
188
+ // The keyup macOS won't send while ⌘ is down; if one does come, it is dropped here.
189
+ this.forward(event, { plain: true }, 'keyup');
190
+ this.forward(event, win, 'keyup');
191
+ }
192
+ return;
193
+ }
91
194
  if (macShortcuts && (isMeta || event.metaKey)) {
92
195
  // Replace the event for IronRDP: ⌘ becomes Ctrl.
93
196
  event.stopImmediatePropagation();
@@ -110,14 +213,28 @@ let DesktopKeyboard = class DesktopKeyboard {
110
213
  }
111
214
  if (process.platform === 'darwin' && event.type === 'keydown' && event.metaKey && !MODIFIERS.test(event.code)) {
112
215
  // ⌘ stays the Windows key: IronRDP gets this keydown as is, plus the keyup macOS won't send.
113
- setTimeout(() => this.forward(event, {}, 'keyup'));
216
+ const routed = this.routing;
217
+ setTimeout(() => {
218
+ this.routing = routed;
219
+ try {
220
+ this.forward(event, {}, 'keyup');
221
+ }
222
+ finally {
223
+ this.routing = null;
224
+ }
225
+ });
114
226
  }
227
+ // The focused desktop takes this one from IronRDP's own listener; the others of a tab typing into all get it here.
228
+ this.mirror(event.type, {
229
+ key: event.key, code: event.code, location: event.location, repeat: event.repeat,
230
+ shiftKey: event.shiftKey, altKey: event.altKey, ctrlKey: event.ctrlKey, metaKey: event.metaKey,
231
+ });
115
232
  }
116
233
  /** Hands IronRDP (its listeners are on window) a copy of the event, with ⌘ mapped to Ctrl when asked. */
117
234
  forward(event, change, type = event.type) {
118
235
  // `plain`: send the key as is (the Windows key for a ⌘ tap), not mapped.
119
236
  const macShortcuts = process.platform === 'darwin' && this.desktop.settings().macShortcuts && !change.plain;
120
- const copy = new KeyboardEvent(type, {
237
+ const init = {
121
238
  key: change.key ?? event.key,
122
239
  code: change.code ?? event.code,
123
240
  location: event.location,
@@ -127,9 +244,29 @@ let DesktopKeyboard = class DesktopKeyboard {
127
244
  ctrlKey: macShortcuts ? event.ctrlKey || event.metaKey : event.ctrlKey,
128
245
  metaKey: macShortcuts ? false : event.metaKey,
129
246
  cancelable: true,
130
- });
247
+ };
248
+ const copy = new KeyboardEvent(type, init);
131
249
  this.copies.add(copy);
132
250
  window.dispatchEvent(copy);
251
+ this.mirror(type, init);
252
+ }
253
+ /** "Send keys": presses a combination on the pane's desktop (showing it, if hidden). */
254
+ async send(pane, combo) {
255
+ // IronRDP only takes keys while it has focus, and they go through its window listeners like typed ones.
256
+ if (!await this.desktop.takeKeyboard(pane)) {
257
+ return;
258
+ }
259
+ const press = (type, code) => {
260
+ // IronRDP sends the scancode for `code`; `key` only matters in its Unicode mode, which is off.
261
+ const init = { key: code.replace(/^Key|(Left|Right)$/g, ''), code, cancelable: true };
262
+ const copy = new KeyboardEvent(type, init);
263
+ this.copies.add(copy);
264
+ window.dispatchEvent(copy);
265
+ this.desktop.broadcastKey(pane, type, init);
266
+ };
267
+ combo.codes.forEach(code => press('keydown', code));
268
+ [...combo.codes].reverse().forEach(code => press('keyup', code));
269
+ this.desktop.logOf(pane).push(`keys: sent ${combo.label}`);
133
270
  }
134
271
  };
135
272
  exports.DesktopKeyboard = DesktopKeyboard;
@@ -1 +1 @@
1
- {"version":3,"file":"keyboard.js","sourceRoot":"","sources":["../src/keyboard.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"keyboard.js","sourceRoot":"","sources":["../src/keyboard.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,295 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Resampler = exports.Microphone = void 0;
4
+ /**
5
+ * Redirects the local microphone to a remote desktop (IronRDP's `audioInput` extension). The server asks for it
6
+ * only while an application there records: IronRDP says `open` (with the format the server chose) and `close`, and
7
+ * the microphone is captured only in between. The browser's capture runs at the audio device's rate; it is resampled
8
+ * and converted to interleaved 16-bit PCM here, in blocks of about 20 ms.
9
+ *
10
+ * It keeps capturing while the desktop layer is hidden: the remote application is still recording (a call, say), and
11
+ * the console being in front doesn't mean the user stopped talking to it. The system shows its own microphone
12
+ * indicator meanwhile.
13
+ */
14
+ class Microphone {
15
+ /**
16
+ * `send`: pushes PCM to IronRDP. `changed`: capturing started or stopped (for the indicator). `error`: the
17
+ * microphone couldn't be opened (reported once per connection).
18
+ */
19
+ constructor(send, changed, log, error) {
20
+ this.send = send;
21
+ this.changed = changed;
22
+ this.log = log;
23
+ this.error = error;
24
+ /** The format the server asked for, while it has the microphone open. */
25
+ this.format = null;
26
+ /** Whether the microphone is being captured right now. */
27
+ this.capturing = false;
28
+ /** Seconds of audio sent (for tests and troubleshooting). */
29
+ this.sent = 0;
30
+ /** Loudest sample sent, 0..1 (for tests: tells sound from silence). */
31
+ this.peak = 0;
32
+ this.stream = null;
33
+ this.context = null;
34
+ this.nodes = [];
35
+ /** Bumped by stop(), so that a capture still starting when the remote closes is dropped. */
36
+ this.generation = 0;
37
+ this.starting = false;
38
+ this.resampler = null;
39
+ this.reportedError = false;
40
+ /** The callback for IronRDP's audioInput extension. */
41
+ this.callback = (message) => {
42
+ try {
43
+ if (message?.type === 'open') {
44
+ const sampleRate = Number(message.sampleRate);
45
+ const channels = Number(message.channels);
46
+ if (!(sampleRate > 0) || !(channels === 1 || channels === 2)) {
47
+ this.log(`microphone: unsupported format ${sampleRate} Hz × ${channels}`);
48
+ return;
49
+ }
50
+ this.format = { sampleRate, channels };
51
+ this.log(`microphone: the remote opened it (${sampleRate} Hz, ${channels === 1 ? 'mono' : 'stereo'})`);
52
+ this.start().catch(e => this.failed(e));
53
+ }
54
+ else if (message?.type === 'close') {
55
+ this.log('microphone: the remote closed it');
56
+ this.format = null;
57
+ this.stop();
58
+ }
59
+ }
60
+ catch (e) {
61
+ console.warn('remote desktop microphone:', e);
62
+ }
63
+ };
64
+ }
65
+ async start() {
66
+ this.resampler = null; // the format may have changed; the next block starts a new one
67
+ if (this.stream || this.starting) {
68
+ return;
69
+ }
70
+ this.starting = true;
71
+ try {
72
+ await this.open(this.generation);
73
+ }
74
+ finally {
75
+ this.starting = false;
76
+ }
77
+ // Closed and opened again while starting: that start was dropped, so start over.
78
+ if (!this.stream && this.format) {
79
+ await this.start();
80
+ }
81
+ }
82
+ async open(generation) {
83
+ const stream = await navigator.mediaDevices.getUserMedia({
84
+ // Echo cancellation keeps the remote's own sound, played here, out of what goes back to it.
85
+ audio: { echoCancellation: true, noiseSuppression: true, autoGainControl: true },
86
+ video: false,
87
+ });
88
+ if (generation !== this.generation) {
89
+ stream.getTracks().forEach(track => track.stop());
90
+ return;
91
+ }
92
+ this.stream = stream;
93
+ const context = new AudioContext({ latencyHint: 'interactive' });
94
+ this.context = context;
95
+ const source = context.createMediaStreamSource(stream);
96
+ // Nothing is played: the capture node only needs to be pulled, which a connection to the output ensures.
97
+ const mute = context.createGain();
98
+ mute.gain.value = 0;
99
+ mute.connect(context.destination);
100
+ let capture;
101
+ try {
102
+ await context.audioWorklet.addModule(workletURL());
103
+ const node = new AudioWorkletNode(context, 'trd-microphone', { numberOfInputs: 1, numberOfOutputs: 1, outputChannelCount: [1] });
104
+ node.port.onmessage = event => this.captured(event.data, context.sampleRate);
105
+ capture = node;
106
+ }
107
+ catch (e) {
108
+ // No AudioWorklet (or its module was refused): the deprecated ScriptProcessor does the same on the main thread.
109
+ this.log(`microphone: AudioWorklet unavailable (${e?.message ?? e}), using ScriptProcessor`);
110
+ const node = context.createScriptProcessor(1024, 2, 1);
111
+ node.onaudioprocess = event => {
112
+ const input = event.inputBuffer;
113
+ this.captured(Array.from({ length: input.numberOfChannels }, (_, i) => input.getChannelData(i).slice()), context.sampleRate);
114
+ };
115
+ capture = node;
116
+ }
117
+ if (generation !== this.generation) {
118
+ return; // closed meanwhile: stop() released the stream and the context
119
+ }
120
+ source.connect(capture);
121
+ capture.connect(mute);
122
+ this.nodes = [source, capture, mute];
123
+ if (context.state === 'suspended') {
124
+ await context.resume().catch(() => null);
125
+ }
126
+ const track = stream.getAudioTracks()[0];
127
+ this.log(`microphone: capturing from ${track?.label || 'the default input'} at ${context.sampleRate} Hz`);
128
+ track?.addEventListener('ended', () => {
129
+ this.log('microphone: the input device went away');
130
+ this.stop();
131
+ });
132
+ this.capturing = true;
133
+ this.changed();
134
+ }
135
+ /** A block of captured audio (per channel, at the device's rate): resample, convert, send. */
136
+ captured(channels, inputRate) {
137
+ const format = this.format;
138
+ if (!format || !channels.length || !channels[0].length) {
139
+ return;
140
+ }
141
+ if (!this.resampler || this.resampler.inputRate !== inputRate) {
142
+ this.resampler = new Resampler(inputRate, format.sampleRate, format.channels);
143
+ }
144
+ const pcm = this.resampler.process(channels);
145
+ if (!pcm.length) {
146
+ return;
147
+ }
148
+ for (let i = 0; i < pcm.length; i++) {
149
+ const v = Math.abs(pcm[i]) / 32768;
150
+ if (v > this.peak) {
151
+ this.peak = v;
152
+ }
153
+ }
154
+ try {
155
+ this.send(pcm);
156
+ this.sent += pcm.length / format.channels / format.sampleRate;
157
+ }
158
+ catch (e) {
159
+ this.log(`microphone: sending failed: ${e?.message ?? e}`);
160
+ }
161
+ }
162
+ failed(e) {
163
+ const denied = e?.name === 'NotAllowedError' || e?.name === 'SecurityError';
164
+ const message = denied
165
+ ? process.platform === 'darwin'
166
+ ? 'Tabby isn\'t allowed to use the microphone. Allow it in System Settings › Privacy & Security › Microphone, then restart Tabby.'
167
+ : 'Access to the microphone was denied.'
168
+ : `The microphone couldn't be opened: ${e?.message ?? e}`;
169
+ this.log(`microphone: ${e?.name ?? 'error'}: ${e?.message ?? e}`);
170
+ this.stop();
171
+ if (!this.reportedError) {
172
+ this.reportedError = true;
173
+ this.error(message);
174
+ }
175
+ }
176
+ /** Stops capturing and releases the device (the remote may open it again later). */
177
+ stop() {
178
+ this.generation++;
179
+ this.resampler = null;
180
+ this.nodes.forEach(node => node.disconnect());
181
+ this.nodes = [];
182
+ this.stream?.getTracks().forEach(track => track.stop());
183
+ this.stream = null;
184
+ this.context?.close().catch(() => null);
185
+ this.context = null;
186
+ if (this.capturing) {
187
+ this.capturing = false;
188
+ this.changed();
189
+ }
190
+ }
191
+ /** The connection ended. */
192
+ close() {
193
+ this.format = null;
194
+ this.stop();
195
+ }
196
+ }
197
+ exports.Microphone = Microphone;
198
+ /**
199
+ * Linear-interpolation resampler to interleaved 16-bit PCM, carrying its position across blocks so that blocks
200
+ * join without clicks. Channels are mixed down (mono) or duplicated (a mono microphone, stereo requested).
201
+ */
202
+ class Resampler {
203
+ constructor(inputRate, outputRate, channels) {
204
+ this.inputRate = inputRate;
205
+ this.outputRate = outputRate;
206
+ this.channels = channels;
207
+ /** Position of the next output frame, in input frames from the start of the next block (-1: the last frame of the previous one). */
208
+ this.position = 0;
209
+ this.step = inputRate / outputRate;
210
+ this.last = new Array(channels).fill(0);
211
+ }
212
+ process(input) {
213
+ const frames = input[0].length;
214
+ // The requested channels from what the device gave.
215
+ const mixed = [];
216
+ if (this.channels === 1 && input.length > 1) {
217
+ const mono = new Float32Array(frames);
218
+ for (const channel of input) {
219
+ for (let i = 0; i < frames; i++) {
220
+ mono[i] += channel[i] / input.length;
221
+ }
222
+ }
223
+ mixed.push(mono);
224
+ }
225
+ else {
226
+ for (let c = 0; c < this.channels; c++) {
227
+ mixed.push(input[c] ?? input[0]);
228
+ }
229
+ }
230
+ const count = Math.max(0, Math.ceil((frames - 1 - this.position) / this.step));
231
+ const out = new Int16Array(count * this.channels);
232
+ let t = this.position;
233
+ for (let n = 0; n < count; n++, t += this.step) {
234
+ const i = Math.floor(t);
235
+ const frac = t - i;
236
+ for (let c = 0; c < this.channels; c++) {
237
+ const samples = mixed[c];
238
+ const a = i < 0 ? this.last[c] : samples[i];
239
+ const b = samples[i + 1];
240
+ const v = Math.max(-1, Math.min(1, a + (b - a) * frac));
241
+ out[n * this.channels + c] = Math.round(v * 32767);
242
+ }
243
+ }
244
+ this.position = t - frames;
245
+ for (let c = 0; c < this.channels; c++) {
246
+ this.last[c] = mixed[c][frames - 1];
247
+ }
248
+ return out;
249
+ }
250
+ }
251
+ exports.Resampler = Resampler;
252
+ /**
253
+ * The capture processor: collects the render quanta (128 frames) into blocks of about 20 ms and posts copies to
254
+ * the main thread, which does the rest.
255
+ */
256
+ const WORKLET = `
257
+ class TrdMicrophone extends AudioWorkletProcessor {
258
+ constructor () {
259
+ super()
260
+ this.blocks = []
261
+ this.frames = 0
262
+ }
263
+ process (inputs) {
264
+ const input = inputs[0]
265
+ if (input && input.length && input[0].length) {
266
+ this.blocks.push(input.map(channel => channel.slice()))
267
+ this.frames += input[0].length
268
+ if (this.frames >= sampleRate / 50) {
269
+ const channels = Math.max(...this.blocks.map(b => b.length))
270
+ const out = []
271
+ for (let c = 0; c < channels; c++) {
272
+ const merged = new Float32Array(this.frames)
273
+ let offset = 0
274
+ for (const block of this.blocks) {
275
+ merged.set(block[c] ?? block[0], offset)
276
+ offset += block[0].length
277
+ }
278
+ out.push(merged)
279
+ }
280
+ this.port.postMessage(out, out.map(a => a.buffer))
281
+ this.blocks = []
282
+ this.frames = 0
283
+ }
284
+ }
285
+ return true
286
+ }
287
+ }
288
+ registerProcessor('trd-microphone', TrdMicrophone)
289
+ `;
290
+ let workletBlobURL = null;
291
+ function workletURL() {
292
+ workletBlobURL ??= URL.createObjectURL(new Blob([WORKLET], { type: 'application/javascript' }));
293
+ return workletBlobURL;
294
+ }
295
+ //# sourceMappingURL=microphone.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"microphone.js","sourceRoot":"","sources":["../src/microphone.ts"],"names":[],"mappings":"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"}