121 Commits
Author SHA1 Message Date
Alex YusiukandGitHub cec3fa70fc refactor(web): raise TERMINATED event on connection error (#944)
This PR changes the session to not return an error on the connection
stage. The `iron-remote-desktop` raises `TERMINATED` instead of `ERROR`,
because `ERROR` is now handled as non-critical and does not close the
session.
2025-08-28 06:33:31 -04:00
Alex YusiukandGitHub a996d02a66 fix(web): remove contenteditable=true from top level element (#922)
Setting `contenteditable=true` causes spurious edits of that element
(when pressing dead keys using the BEPO or AZERTY keyboard).
2025-08-26 18:19:20 -04:00
Alex YusiukandGitHub dc6fd0433d fix(web): make check for isUnicodeCharacter in sendKeyboard more strict (#927)
This resolves an issue with Unicode input that happens under Chrome.
where entering `Alt` codes results in broken modifier state and broken
input in general.

This happens because of how _Chrome_ handles `KeyboardEvent` key and
code in this particular case. For example, holding `Alt`, pressing 1, 2,
3 on a numpad, then releasing `Alt` will result in events with the
following key/code values being passed to `sendKeyboard`:
`{ "key": "Alt", "code": "AltLeft" ,"type": "keydown" }`
`{ "key": "1", "code": "Numpad1" ,"type": "keydown" }`
`{ "key": "1", "code": "Numpad1" ,"type": "keyup" }`
`{ "key": "2", "code": "Numpad2" ,"type": "keydown" }`
`{ "key": "2", "code": "Numpad2" ,"type": "keyup" }`
`{ "key": "3", "code": "Numpad3" ,"type": "keydown" }`
`{ "key": "3", "code": "Numpad3" ,"type": "keyup" }`
`{ "key": "{", "code": "AltLeft" ,"type": "keyup" }`

Without this fix, this will send Unicode `{` instead of plain `Alt` to
the RDP server, messing up the `Alt` code sequence and leaving `Al` in
pressed state.

For comparison, in _Firefox_ last event looks like this: `{ "key":
"Alt", "code": "AltLeft","type": "keyup" }`
2025-08-22 03:39:55 -04:00
Gabriel BaumanandGitHub ac291423de refactor(web): add NegotiationFailure to IronErrorKind (#905)
Adds a general NegotiationFailure to IronErrorKind so that web embedders
can handle failures that occur during protocol negotiation, before
authentication.

Changes:
- RDP errors during the negotiation phase become
IronErrorKind.NegotiationError
- User-friendly RDP negotiation error messages to ironrdp-connector
- Update TypeScript definitions
2025-08-08 04:52:28 -04:00
Benoît CortierandGitHub 424e46d225 chore(release): prepare for iron-remote-desktop-rdp v0.5.2 (#901) 2025-07-31 08:23:29 -04:00
100765f98f feat(web): add outbound WebSocket message size limit extension (#889)
Add support for chunking outbound WebSocket messages when they exceed a
configurable size limit. This helps avoid browser- or proxy-specific
WebSocket message size restrictions while maintaining wire
compatibility.

Changes:
- Add outbound_message_size_limit field to SessionBuilderInner
- Implement extension handler with safe f64->u32 casting and validation
- Update writer_task to chunk large messages when limit is set
- Add outboundMessageSizeLimit() helper function to JavaScript API

---------

Co-authored-by: Benoît Cortier <3809077+CBenoit@users.noreply.github.com>
2025-07-31 11:18:36 +00:00
Benoît CortierandGitHub 555894ecc8 chore(release): prepare iron-remote-desktop-rdp v0.5.1 (#883) 2025-07-24 04:23:05 +00:00
Gabriel BaumanandGitHub 7a0fcce203 feat(web): add enableCredssp extension (#878)
Allows users to disable CredSSP/NLA, which is otherwise enabled by default.
This is necessary to connect to target hosts bound to AzureAD/Entra domains.
In this case, user authentication is handled in the interactive session.
2025-07-23 23:31:11 -04:00
Benoît CortierandGitHub 4fc295db4c chore(release): prepare iron-remote-desktop-rdp v0.5.0 (#879) 2025-07-23 08:54:46 +03:00
Alex YusiukandGitHub f7cbb08e2e feat(web): add RdpFile helper to parse RDP configs (#877) 2025-07-22 20:33:37 -04:00
Alex YusiukandGitHub f6fb3a41b3 fix(web): apply correct key codes to scan codes mapping (#866)
The root cause of the bug is the incorrect keycodes-to-scancodes
mappings. These mappings translated the browser's key codes (like
"KeyA") to OS-specific scancode (OS where the browser runs). However,
that's not exactly what we need to do. We need to map the browser's key
codes to _Windows_ scancodes - the only format that is accepted by _VNC_
and _RDP_) modules.
Let's look at an example for a better understanding. _Safari_ browser
used _Linux_'s _Gecko) mappings as a fallback (because there were no
MacOS-specific mappings). For a given key, _iron-remote-desktop_ was
providing a scancode that did not correspond to the _Windows_ scancode
for that same key. As a result, the `IronVNC` module incorrectly mapped
this scancode to a `KeySym`, which resulted in an incorrect `KeySym` or
`NO_SYMBOL`.
2025-07-11 15:08:53 +00:00
Alex YusiukandGitHub 067d80314a chore(release): prepare web packages for publishing (#865)
* iron-remote-desktop v0.7.0
* iron-remote-desktop-rdp v0.4.0
2025-07-11 07:53:22 -04:00
Alex YusiukandGitHub 4dc5945019 fix(web): run navigator.clipboard.write only when window has focus (#858)
When we receive clipboard update from the server and the browser window
is not in focus (for example, when the user copies some text directly on
the machine, not via the browser's VNC viewer), we got an error that
`navigator.clipboard.write` is not allowed when window is not in focus.
This PR adds a window check that the window has focus, and now
`clipboard.write` runs only when the window is in focus.
2025-07-04 11:21:52 +00:00
Alex YusiukandGitHub a84a5c0571 fix(web): prevent onMonitorClipboard from re-scheduling after iron-remote-desktop component destroys (#856) 2025-07-04 05:59:33 -04:00
Alex YusiukandGitHub b0e87a3776 fix(web): fix issue when clipboard monitoring treats clipboard update from server as the local update (#857)
When the server sends the clipboard update, we write it to our
clipboard. But this new clipboard data was then processed as a new one,
so we sent it back to the server. This commit fixes this behavior by
tracking the data that we received from the server.
2025-07-04 05:58:45 -04:00
Benoît CortierandGitHub 8bcf362102 chore(release): prepare web packages for publishing (#843)
- iron-remote-desktop v0.6.0
- iron-remote-desktop-rdp v0.3.0
2025-06-27 11:09:06 +03:00
f6285c5989 feat(web): add canvasResizedCallback method to SessionBuilder (#842)
Co-authored-by: Benoît Cortier <3809077+CBenoit@users.noreply.github.com>
2025-06-27 07:55:26 +00:00
Benoît CortierandGitHub 7c4a496ece chore(release): prepare web packages for publishing (#840)
- iron-remote-desktop v0.5.4
- iron-remote-desktop-rdp v0.2.3
2025-06-25 16:17:52 +00:00
Alex YusiukandGitHub dfb13ec499 fix(web): prevent scrolling when setting focus on the canvas (#838) 2025-06-24 10:19:42 -04:00
Alex YusiukandGitHub d3d758891b fix(web): raise only TERMINATED message on session termination with the error backtrace (#837) 2025-06-24 10:12:56 -04:00
Alex YusiukandGitHub d38c2013f0 fix(web): keyboard input not working after launching a session via Firefox (#833) 2025-06-23 08:33:23 -04:00
Benoît CortierandGitHub 153fe3c20d chore(release): prepare iron-remote-desktop v0.5.3 (#832) 2025-06-20 15:29:52 +00:00
Alex YusiukandGitHub ae3066337f fix(web): move onDestroy function out of the scaleSession function (#831) 2025-06-20 11:11:21 -04:00
Benoît CortierandGitHub bfa71126bf chore(release): prepare web packages for publishing (#830)
- iron-remote-desktop v0.5.2
- iron-remote-desktop-rdp v0.2.2
2025-06-20 11:51:35 +00:00
Alex YusiukandGitHub 4f9ef0c21a fix(web): fix invalid viewer style for dynamic resizing (#829) 2025-06-20 07:18:32 -04:00