mirror of
https://github.com/outbackdingo/firezone.git
synced 2026-01-27 18:18:55 +00:00
58e6c3d4c31753767be21e17a4fc41eed752cc2c
553 Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
081b075f2c |
chore: bump gui, apple, gateway (#9586)
The new publish automation still [has some kinks](https://github.com/firezone/firezone/actions/runs/15764891111) so publishing this manually. |
||
|
|
92f8c8820f |
chore(gui-client): configure eslint (#9550)
Resolves: #9546 |
||
|
|
9701cfca0f | chore: publish gui 1.5.3 (#9547) | ||
|
|
2a96102db4 |
refactor(gui-client): introduce custom ReactRouterSidebarItem (#9508)
This cleans up some changes left over from #9505 by using a custom component. |
||
|
|
3660f53150 |
fix(gui-client): remove bad hook dependencies (#9537)
The removed hook dependencies are invalid because the side-effect specified in `useEffect` does in fact not depend on them. However, as a result of these dependencies, the `useEffect` closure appears to run in an end-less loop, constantly sending the `update_state` command to the backend which in turn re-sends all state to the frontend, causing a massive CPU and memory spike. Resolves: #9519 |
||
|
|
5e3c240501 | chore: publish gui 1.5.2 (#9516) | ||
|
|
60bdbb39cb |
refactor(gui-client): move change listeners to tunnel service (#8160)
At present, listening for DNS server change and network change events is handled in the GUI client. Upon an event, a message is sent to the tunnel service which then applies the new state to `connlib`. We can avoid some of this boilerplate by moving these listeners to the tunnel service as part of the handler. As a result, we get a few improvements: - We don't need to ignore these events if we don't have a session because the lifetime of these listeners is tied to the IPC handler on the service side. - We need fewer IPC messages - We can retry the connection directly from within the tunnel service in case we have no Internet at the time of startup - We can more easily model out the state machine of a connlib session in the tunnel service - On Linux, this means we no longer shell out to `resolvectl` from the GUI process, unifying access to the "resolvers" from the tunnel service - On Windows, we no longer need admin privileges on the GUI client for optimized network-change detection. This now happens in the Tunnel process which already runs as admin. Resolves: #9465 |
||
|
|
1295adc727 |
fix(gui-client): fix minor frontend issues in app window (#9505)
- removes `NavLink` in favor of using the `href` prop on `SidebarItem`. This fixes vertical spacing between sidebar items (it was inconsistent) and DOM structure issues caused by setting `NavLink` as a direct child of `<SidebarItemGroup>`. - adds `cursor-pointer` to all `<Button>`s - adds `cursor-pointer` to the `<SidebarCollapse>` ### Before <img width="1238" alt="Screenshot 2025-06-10 at 7 57 37 PM" src="https://github.com/user-attachments/assets/2e5e66f2-d4c1-48b7-b81d-1803de2442fc" /> ### After <img width="1238" alt="Screenshot 2025-06-10 at 7 57 55 PM" src="https://github.com/user-attachments/assets/aa676fc1-124a-4e33-859d-da8f3eaad211" /> |
||
|
|
ae4816d2a6 | refactor(gui-client): reduce duplication for sending requests (#9476) | ||
|
|
9210ed2a97 |
fix(gui-client): don't say "signed in" without a connlib session (#9477)
With the introduction of the "connect on start" configuration option, we introduced a bug where the GUI client said "Signed in as ..." even though we did not have a `connlib` session. The tray-menu handles this state correctly and clicking sign out and sign in restores Firezone to a functional state. This disparity happened because we assumed that having a token means we must have a session. To fix this, we introduce a new `SessionViewModel` that combines the state of the auth session and the `connlib` state. Only if we have both do we infer that we are "signed in". This also requires us to introduce an intermediary state where we are "loading". This is represented as a spinner in the UI. Last but not least, this also removes the automated hiding of the client window. In a prior design, the only job of this window was to show the "Sign in" button so it wasn't useful beyond clicking that. Now that we show more things in this window, automatically hiding it might confuse the user. Here is what this new design looks like: [Login flow](https://github.com/user-attachments/assets/276e390b-4837-48e2-aaf1-eea007472816) As a result of other improvements around "zero-click sign-in", the user often doesn't even have to switch to the browser window because sign-in happens in the background. Unfortunately, the tab still remains open but that is outside of our control (at least on Linux). |
||
|
|
490e9c1dde |
refactor(gui-client): tidy up app startup (#9468)
As part of investigating #9400, I refactored the startup code of the GUI client to play around with the initialization order of the runtime and other parts. After finding the root cause (fixed in #9469), I figured it would still be nice to land these improvements. This refactors the app startup: - Only initialize what is absolutely necessary outside of `try_main`: The runtime and the telemetry instance. - Settings are loaded earlier - Telemetry is initializer earlier - Add a bootstrap logger that logs to stdout whilst we are booting - Re-order some code inside `gui::run` to bundle the initialization of Tauri into a single command chain --------- Signed-off-by: Thomas Eizinger <thomas@eizinger.io> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> |
||
|
|
e15dde6648 |
fix(gui-client): remove timeout from opening deep-link (#9475)
This timeout seems to be problematic as deep-links don't open with it at all. This is a regression from #9445. |
||
|
|
caafcbcf0b |
fix(gui-client): apply log directives from MDM config (#9443)
When introducing the MDM config, we took into account the log directives from the config when applying it via the GUI but failed to apply the new directives on startup. |
||
|
|
2eda6f5f74 |
build(deps): bump react-router from 7.6.1 to 7.6.2 in /rust/gui-client in the react group (#9448)
Bumps the react group in /rust/gui-client with 1 update: [react-router](https://github.com/remix-run/react-router/tree/HEAD/packages/react-router). Updates `react-router` from 7.6.1 to 7.6.2 <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/remix-run/react-router/blob/main/packages/react-router/CHANGELOG.md">react-router's changelog</a>.</em></p> <blockquote> <h2>7.6.2</h2> <h3>Patch Changes</h3> <ul> <li>Avoid additional <code>with-props</code> chunk in Framework Mode by moving route module component prop logic from the Vite plugin to <code>react-router</code> (<a href="https://redirect.github.com/remix-run/react-router/pull/13650">#13650</a>)</li> <li>[INTERNAL] Slight refactor of internal <code>headers()</code> function processing for use with RSC (<a href="https://redirect.github.com/remix-run/react-router/pull/13639">#13639</a>)</li> </ul> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href=" |
||
|
|
b79b5702f0 |
chore(gui-client): specify correct path to frontend (#9444)
When debugging logging is enabled, we see that Tauri currently iterates through several possible paths of the frontend page before it finds the one that it actually renders. We can fix this by specifying the URL without the directory path. ``` 2025-06-06T08:23:06.538Z DEBUG tauri::manager: Asset `src-frontend/index.html` not found; fallback to src-frontend/index.html.html 2025-06-06T08:23:06.538Z DEBUG tauri::manager: Asset `src-frontend/index.html` not found; fallback to src-frontend/index.html/index.html 2025-06-06T08:23:06.539Z DEBUG tauri::manager: Asset `src-frontend/index.html` not found; fallback to index.html 2025-06-06T08:23:06.566Z DEBUG firezone_gui_client::controller: Starting new instance of `Controller` ``` |
||
|
|
b0d594100d |
fix(gui-client): don't busy-loop when update checker is disabled (#9445)
The GUI client's update checker is a task that runs concurrently to the main event-loop of the client. When a new update is found, it sends a notification through a channel. When the update checker is disabled via MDM, this channel is instantly closed, resulting in `None` being read as part of the event-loop in the client. Previously, we would then return `Poll::Ready(EventloopTick::UpdateNotification(None))` and then simply ignore this event. This however is wrong. Returning `Poll::Ready` means that the future needs to be polled again, resulting in an effective busy-loop where we constantly emit the above event and then ignore it. Due to the priority order that was previously defined, this led to us never checking another channel: The one where we receive deep-links from 2nd GUI instances. As a result, signing into the client when the update checker was disabled does not work and instead, the newly launched instance hangs because it can never send over the deep-link. Resolves: #9420 |
||
|
|
192e7e040e |
build(deps): bump @vitejs/plugin-react from 4.5.0 to 4.5.1 in /rust/gui-client (#9433)
Bumps [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/tree/HEAD/packages/plugin-react) from 4.5.0 to 4.5.1. <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/vitejs/vite-plugin-react/releases"><code>@vitejs/plugin-react</code>'s releases</a>.</em></p> <blockquote> <h2>plugin-react@4.5.1</h2> <h3>Add explicit semicolon in preambleCode <a href="https://redirect.github.com/vitejs/vite-plugin-react/pull/485">#485</a></h3> <p>This fixes an edge case when using HTML minifiers that strips line breaks aggressively.</p> </blockquote> </details> <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react/CHANGELOG.md"><code>@vitejs/plugin-react</code>'s changelog</a>.</em></p> <blockquote> <h2>4.5.1 (2025-06-03)</h2> <h3>Add explicit semicolon in preambleCode <a href="https://redirect.github.com/vitejs/vite-plugin-react/pull/485">#485</a></h3> <p>This fixes an edge case when using HTML minifiers that strips line breaks aggressively.</p> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href=" |
||
|
|
ca2b8fa10c |
build(deps): bump @sentry/react from 9.24.0 to 9.27.0 in /rust/gui-client (#9432)
Bumps [@sentry/react](https://github.com/getsentry/sentry-javascript) from 9.24.0 to 9.27.0. <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/getsentry/sentry-javascript/releases"><code>@sentry/react</code>'s releases</a>.</em></p> <blockquote> <h2>9.27.0</h2> <ul> <li>feat(node): Expand how vercel ai input/outputs can be set (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/16455">#16455</a>)</li> <li>feat(node): Switch to new semantic conventions for Vercel AI (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/16476">#16476</a>)</li> <li>feat(react-router): Add component annotation plugin (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/16472">#16472</a>)</li> <li>feat(react-router): Export wrappers for server loaders and actions (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/16481">#16481</a>)</li> <li>fix(browser): Ignore unrealistically long INP values (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/16484">#16484</a>)</li> <li>fix(react-router): Conditionally add <code>ReactRouterServer</code> integration (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/16470">#16470</a>)</li> </ul> <h2>Bundle size 📦</h2> <table> <thead> <tr> <th>Path</th> <th>Size</th> </tr> </thead> <tbody> <tr> <td><code>@sentry/browser</code></td> <td>23.43 KB</td> </tr> <tr> <td><code>@sentry/browser</code> - with treeshaking flags</td> <td>23.2 KB</td> </tr> <tr> <td><code>@sentry/browser</code> (incl. Tracing)</td> <td>37.46 KB</td> </tr> <tr> <td><code>@sentry/browser</code> (incl. Tracing, Replay)</td> <td>74.68 KB</td> </tr> <tr> <td><code>@sentry/browser</code> (incl. Tracing, Replay) - with treeshaking flags</td> <td>67.94 KB</td> </tr> <tr> <td><code>@sentry/browser</code> (incl. Tracing, Replay with Canvas)</td> <td>79.33 KB</td> </tr> <tr> <td><code>@sentry/browser</code> (incl. Tracing, Replay, Feedback)</td> <td>91.13 KB</td> </tr> <tr> <td><code>@sentry/browser</code> (incl. Feedback)</td> <td>39.77 KB</td> </tr> <tr> <td><code>@sentry/browser</code> (incl. sendFeedback)</td> <td>28.03 KB</td> </tr> <tr> <td><code>@sentry/browser</code> (incl. FeedbackAsync)</td> <td>32.8 KB</td> </tr> <tr> <td><code>@sentry/react</code></td> <td>25.15 KB</td> </tr> <tr> <td><code>@sentry/react</code> (incl. Tracing)</td> <td>39.41 KB</td> </tr> <tr> <td><code>@sentry/vue</code></td> <td>27.69 KB</td> </tr> <tr> <td><code>@sentry/vue</code> (incl. Tracing)</td> <td>39.27 KB</td> </tr> <tr> <td><code>@sentry/svelte</code></td> <td>23.45 KB</td> </tr> <tr> <td>CDN Bundle</td> <td>24.88 KB</td> </tr> <tr> <td>CDN Bundle (incl. Tracing)</td> <td>37.63 KB</td> </tr> <tr> <td>CDN Bundle (incl. Tracing, Replay)</td> <td>72.66 KB</td> </tr> <tr> <td>CDN Bundle (incl. Tracing, Replay, Feedback)</td> <td>77.99 KB</td> </tr> <tr> <td>CDN Bundle - uncompressed</td> <td>72.67 KB</td> </tr> <tr> <td>CDN Bundle (incl. Tracing) - uncompressed</td> <td>111.42 KB</td> </tr> <tr> <td>CDN Bundle (incl. Tracing, Replay) - uncompressed</td> <td>222.72 KB</td> </tr> <tr> <td>CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed</td> <td>235.25 KB</td> </tr> <tr> <td><code>@sentry/nextjs</code> (client)</td> <td>41.03 KB</td> </tr> <tr> <td><code>@sentry/sveltekit</code> (client)</td> <td>37.93 KB</td> </tr> <tr> <td><code>@sentry/node</code></td> <td>146.75 KB</td> </tr> <tr> <td><code>@sentry/node</code> - without tracing</td> <td>96.03 KB</td> </tr> <tr> <td><code>@sentry/aws-serverless</code></td> <td>121.19 KB</td> </tr> </tbody> </table> <h2>9.26.0</h2> <ul> <li>feat(react-router): Re-export functions from <code>@sentry/react</code> (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/16465">#16465</a>)</li> <li>fix(nextjs): Skip re instrumentating on generate phase of experimental build mode (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/16410">#16410</a>)</li> <li>fix(node): Ensure adding sentry-trace and baggage headers via SentryHttpInstrumentation doesn't crash (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/16473">#16473</a>)</li> </ul> <h2>Bundle size 📦</h2> <table> <thead> <tr> <th>Path</th> <th>Size</th> </tr> </thead> </table> <!-- raw HTML omitted --> </blockquote> <p>... (truncated)</p> </details> <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/getsentry/sentry-javascript/blob/develop/CHANGELOG.md"><code>@sentry/react</code>'s changelog</a>.</em></p> <blockquote> <h2>9.27.0</h2> <ul> <li>feat(node): Expand how vercel ai input/outputs can be set (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/16455">#16455</a>)</li> <li>feat(node): Switch to new semantic conventions for Vercel AI (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/16476">#16476</a>)</li> <li>feat(react-router): Add component annotation plugin (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/16472">#16472</a>)</li> <li>feat(react-router): Export wrappers for server loaders and actions (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/16481">#16481</a>)</li> <li>fix(browser): Ignore unrealistically long INP values (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/16484">#16484</a>)</li> <li>fix(react-router): Conditionally add <code>ReactRouterServer</code> integration (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/16470">#16470</a>)</li> </ul> <h2>9.26.0</h2> <ul> <li>feat(react-router): Re-export functions from <code>@sentry/react</code> (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/16465">#16465</a>)</li> <li>fix(nextjs): Skip re instrumentating on generate phase of experimental build mode (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/16410">#16410</a>)</li> <li>fix(node): Ensure adding sentry-trace and baggage headers via SentryHttpInstrumentation doesn't crash (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/16473">#16473</a>)</li> </ul> <h2>9.25.1</h2> <ul> <li>fix(otel): Don't ignore child spans after the root is sent (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/16416">#16416</a>)</li> </ul> <h2>9.25.0</h2> <h3>Important Changes</h3> <ul> <li><strong>feat(browser): Add option to ignore <code>mark</code> and <code>measure</code> spans (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/16443">#16443</a>)</strong></li> </ul> <p>This release adds an option to <code>browserTracingIntegration</code> that lets you ignore <code>mark</code> and <code>measure</code> spans created from the <code>performance.mark(...)</code> and <code>performance.measure(...)</code> browser APIs:</p> <pre lang="js"><code>Sentry.init({ integrations: [ Sentry.browserTracingIntegration({ ignorePerformanceApiSpans: ['measure-to-ignore', /mark-to-ignore/], }), ], }); </code></pre> <h3>Other Changes</h3> <ul> <li>feat(browser): Export getTraceData from the browser sdks (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/16433">#16433</a>)</li> <li>feat(node): Add <code>includeServerName</code> option (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/16442">#16442</a>)</li> <li>fix(nuxt): Remove setting <code>@sentry/nuxt</code> external (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/16444">#16444</a>)</li> </ul> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href=" |
||
|
|
30991327bc |
build(deps): bump @types/react-dom from 19.1.5 to 19.1.6 in /rust/gui-client (#9427)
Bumps [@types/react-dom](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/react-dom) from 19.1.5 to 19.1.6. <details> <summary>Commits</summary> <ul> <li>See full diff in <a href="https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/react-dom">compare view</a></li> </ul> </details> <br /> [](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) --- <details> <summary>Dependabot commands and options</summary> <br /> You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) </details> Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> |
||
|
|
d1551de09a |
build(deps): bump @types/node from 22.15.29 to 22.15.30 in /rust/gui-client (#9434)
Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 22.15.29 to 22.15.30. <details> <summary>Commits</summary> <ul> <li>See full diff in <a href="https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node">compare view</a></li> </ul> </details> <br /> [](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) --- <details> <summary>Dependabot commands and options</summary> <br /> You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) </details> Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> |
||
|
|
c3ad2cab42 |
build(deps): bump @sentry/core from 9.24.0 to 9.27.0 in /rust/gui-client (#9436)
Bumps [@sentry/core](https://github.com/getsentry/sentry-javascript) from 9.24.0 to 9.27.0. <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/getsentry/sentry-javascript/releases"><code>@sentry/core</code>'s releases</a>.</em></p> <blockquote> <h2>9.27.0</h2> <ul> <li>feat(node): Expand how vercel ai input/outputs can be set (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/16455">#16455</a>)</li> <li>feat(node): Switch to new semantic conventions for Vercel AI (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/16476">#16476</a>)</li> <li>feat(react-router): Add component annotation plugin (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/16472">#16472</a>)</li> <li>feat(react-router): Export wrappers for server loaders and actions (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/16481">#16481</a>)</li> <li>fix(browser): Ignore unrealistically long INP values (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/16484">#16484</a>)</li> <li>fix(react-router): Conditionally add <code>ReactRouterServer</code> integration (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/16470">#16470</a>)</li> </ul> <h2>Bundle size 📦</h2> <table> <thead> <tr> <th>Path</th> <th>Size</th> </tr> </thead> <tbody> <tr> <td><code>@sentry/browser</code></td> <td>23.43 KB</td> </tr> <tr> <td><code>@sentry/browser</code> - with treeshaking flags</td> <td>23.2 KB</td> </tr> <tr> <td><code>@sentry/browser</code> (incl. Tracing)</td> <td>37.46 KB</td> </tr> <tr> <td><code>@sentry/browser</code> (incl. Tracing, Replay)</td> <td>74.68 KB</td> </tr> <tr> <td><code>@sentry/browser</code> (incl. Tracing, Replay) - with treeshaking flags</td> <td>67.94 KB</td> </tr> <tr> <td><code>@sentry/browser</code> (incl. Tracing, Replay with Canvas)</td> <td>79.33 KB</td> </tr> <tr> <td><code>@sentry/browser</code> (incl. Tracing, Replay, Feedback)</td> <td>91.13 KB</td> </tr> <tr> <td><code>@sentry/browser</code> (incl. Feedback)</td> <td>39.77 KB</td> </tr> <tr> <td><code>@sentry/browser</code> (incl. sendFeedback)</td> <td>28.03 KB</td> </tr> <tr> <td><code>@sentry/browser</code> (incl. FeedbackAsync)</td> <td>32.8 KB</td> </tr> <tr> <td><code>@sentry/react</code></td> <td>25.15 KB</td> </tr> <tr> <td><code>@sentry/react</code> (incl. Tracing)</td> <td>39.41 KB</td> </tr> <tr> <td><code>@sentry/vue</code></td> <td>27.69 KB</td> </tr> <tr> <td><code>@sentry/vue</code> (incl. Tracing)</td> <td>39.27 KB</td> </tr> <tr> <td><code>@sentry/svelte</code></td> <td>23.45 KB</td> </tr> <tr> <td>CDN Bundle</td> <td>24.88 KB</td> </tr> <tr> <td>CDN Bundle (incl. Tracing)</td> <td>37.63 KB</td> </tr> <tr> <td>CDN Bundle (incl. Tracing, Replay)</td> <td>72.66 KB</td> </tr> <tr> <td>CDN Bundle (incl. Tracing, Replay, Feedback)</td> <td>77.99 KB</td> </tr> <tr> <td>CDN Bundle - uncompressed</td> <td>72.67 KB</td> </tr> <tr> <td>CDN Bundle (incl. Tracing) - uncompressed</td> <td>111.42 KB</td> </tr> <tr> <td>CDN Bundle (incl. Tracing, Replay) - uncompressed</td> <td>222.72 KB</td> </tr> <tr> <td>CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed</td> <td>235.25 KB</td> </tr> <tr> <td><code>@sentry/nextjs</code> (client)</td> <td>41.03 KB</td> </tr> <tr> <td><code>@sentry/sveltekit</code> (client)</td> <td>37.93 KB</td> </tr> <tr> <td><code>@sentry/node</code></td> <td>146.75 KB</td> </tr> <tr> <td><code>@sentry/node</code> - without tracing</td> <td>96.03 KB</td> </tr> <tr> <td><code>@sentry/aws-serverless</code></td> <td>121.19 KB</td> </tr> </tbody> </table> <h2>9.26.0</h2> <ul> <li>feat(react-router): Re-export functions from <code>@sentry/react</code> (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/16465">#16465</a>)</li> <li>fix(nextjs): Skip re instrumentating on generate phase of experimental build mode (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/16410">#16410</a>)</li> <li>fix(node): Ensure adding sentry-trace and baggage headers via SentryHttpInstrumentation doesn't crash (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/16473">#16473</a>)</li> </ul> <h2>Bundle size 📦</h2> <table> <thead> <tr> <th>Path</th> <th>Size</th> </tr> </thead> </table> <!-- raw HTML omitted --> </blockquote> <p>... (truncated)</p> </details> <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/getsentry/sentry-javascript/blob/develop/CHANGELOG.md"><code>@sentry/core</code>'s changelog</a>.</em></p> <blockquote> <h2>9.27.0</h2> <ul> <li>feat(node): Expand how vercel ai input/outputs can be set (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/16455">#16455</a>)</li> <li>feat(node): Switch to new semantic conventions for Vercel AI (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/16476">#16476</a>)</li> <li>feat(react-router): Add component annotation plugin (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/16472">#16472</a>)</li> <li>feat(react-router): Export wrappers for server loaders and actions (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/16481">#16481</a>)</li> <li>fix(browser): Ignore unrealistically long INP values (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/16484">#16484</a>)</li> <li>fix(react-router): Conditionally add <code>ReactRouterServer</code> integration (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/16470">#16470</a>)</li> </ul> <h2>9.26.0</h2> <ul> <li>feat(react-router): Re-export functions from <code>@sentry/react</code> (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/16465">#16465</a>)</li> <li>fix(nextjs): Skip re instrumentating on generate phase of experimental build mode (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/16410">#16410</a>)</li> <li>fix(node): Ensure adding sentry-trace and baggage headers via SentryHttpInstrumentation doesn't crash (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/16473">#16473</a>)</li> </ul> <h2>9.25.1</h2> <ul> <li>fix(otel): Don't ignore child spans after the root is sent (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/16416">#16416</a>)</li> </ul> <h2>9.25.0</h2> <h3>Important Changes</h3> <ul> <li><strong>feat(browser): Add option to ignore <code>mark</code> and <code>measure</code> spans (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/16443">#16443</a>)</strong></li> </ul> <p>This release adds an option to <code>browserTracingIntegration</code> that lets you ignore <code>mark</code> and <code>measure</code> spans created from the <code>performance.mark(...)</code> and <code>performance.measure(...)</code> browser APIs:</p> <pre lang="js"><code>Sentry.init({ integrations: [ Sentry.browserTracingIntegration({ ignorePerformanceApiSpans: ['measure-to-ignore', /mark-to-ignore/], }), ], }); </code></pre> <h3>Other Changes</h3> <ul> <li>feat(browser): Export getTraceData from the browser sdks (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/16433">#16433</a>)</li> <li>feat(node): Add <code>includeServerName</code> option (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/16442">#16442</a>)</li> <li>fix(nuxt): Remove setting <code>@sentry/nuxt</code> external (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/16444">#16444</a>)</li> </ul> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href=" |
||
|
|
ab01a1ef91 | chore: bump gui to 1.5.1 (#9440) | ||
|
|
7b0e33f0a2 |
fix(gui-client): allow legacy settings to parse new format (#9418)
As part of the introduction of General settings, we split up "Advanced settings" and also renamed one of the fields. Upon first start, the settings are migrated to the new format. What we failed to notice is that one the next subsequent start, the legacy settings struct will fail to parse the now migrated configuration and fall back to the default. This then appears as if the settings are not getting saved. Resolves: #9417 --------- Co-authored-by: Jamil Bou Kheir <jamilbk@users.noreply.github.com> |
||
|
|
51e13d453f |
chore: publish GUI client 1.5.0 (#9413)
Co-authored-by: Thomas Eizinger <thomas@eizinger.io> |
||
|
|
f6799fa16c |
chore(gui-client): rename log file of tunnel service (#9411)
This is a left-over from the rename of the background service for the GUI client from IPC to Tunnel service. |
||
|
|
c3eb880ee5 |
fix(ci): Keep indentation of TSLINK_BUILD output (#9407)
When building the gui client with `TSLINK_BUILD=true`, the library outputs using 4 spaces for indent. These are however currently checked into git with 2 spaces per indent, which causes the Tauri workflow to fail because it checks for a pristine git directory after the build. Unfortunately #9383 doesn't fix this issue because it has nothing to do with prettier in CI. Fixes https://github.com/firezone/firezone/actions/runs/15457631114/job/43512703266 |
||
|
|
339af8d7ab |
refactor(gui-client): embed fonts directly (#9398)
This will prevent the fonts from failing to load if the user has no internet connection. Tested. |
||
|
|
d6ecda59a1 |
feat(gui-client): introduce "General" settings page (#9381)
This PR introduces "General" settings for the GUI client. The "Settings" menu item in the GUI is split into two sub-sections. The menu item is collapsible but open by default. |General|Advanced| |---|---| ||| "Connect on start" and "Account slug" can both be MDM managed. The autostart functionality is implemented via the Windows Registry. --------- Co-authored-by: Jamil Bou Kheir <jamilbk@users.noreply.github.com> |
||
|
|
6ef079357c |
feat(connlib): add basic analytics about new sessions (#9379)
This PR adds basic analytics to `connlib` by sending two events to PostHog: 1. `new_session` which is sent every time we establish a new session with a Firezone backend. This could be our production or staging instance but also a session to an on-premise installation of Firezone. We include the API URL in the event payload to further distinguish these. 2. `$identify` to link the client + version as well as the operating system to the user. The user is identified by the Firezone ID. --------- Signed-off-by: Thomas Eizinger <thomas@eizinger.io> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> |
||
|
|
7bf98e2fdc |
refactor(gui-client): improve error handling of Tauri commands (#9380)
Introducing a dedicated `Error` type allows us to directly serialise `anyhow::Error`s to the GUI. Those will then be reported to Sentry on the TS side. |
||
|
|
1914ea7076 |
refactor(rust): remove forced callback indirection (#9362)
As relict from very early designs of `connlib`, the `Callbacks` trait is still present and defines how the host app receives events from a running `Session`. Callbacks are not a great design pattern however because they force the running code, i.e. `connlib`s event-loop to execute unknown code. For example, if that code panics, all of `connlib` is taken down. Additionally, not all consumers may want to receive events via callbacks. The GUI and headless client for example already have their own event-loop in which they process all kinds of things. Having to deal with the `Callbacks` interface introduces an odd indirection here. To fix this, we instead return an `EventStream` when constructing a `Session`. This essentially aligns the API of `Session` with that of a channel. You receive two handles, one for sending in commands and one for receiving events. A `Session` will automatically spawn itself onto the given runtime so progress is made even if one does not poll on these channel handles. This greatly simplifies the code: - We get to delete the `Callbacks` interface. - We can delete the threaded callback adapter. This was only necessary because we didn't want to block `connlib` with the handling of the event. By using a channel for events, this is automatically guaranteed. - The GUI and headless client can directly integrate the event handling in their event-loop, without having to create an indirection with a channel. - It is now clear that only the Apple and Android FFI layers actually use callbacks to communicate these events. - We net-delete 100 LoC |
||
|
|
b7b296a102 |
ci: apply prettier to all files (#9356)
Resolves: #8940 |
||
|
|
3ad7848e8f |
feat(gui-client): add Sentry to the frontend (#9316)
With an increased amount of complexity in the frontend of the GUI client, it pays off to initialise the Sentry React SDK to catch any errors that might occur. In particular, any failing commands that we issue to the backend will be caught that way as those rejected `Promise`s will surface as uncaught exceptions. Similar to the backend, Sentry in the frontend is only initialised for known environments, i.e. our production and staging deployments of Firezone. For on-premise installations, Sentry is disabled. Related: #6138 |
||
|
|
3312639ed2 |
build(deps): bump @types/node from 22.15.3 to 22.15.29 in /rust/gui-client (#9324)
Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 22.15.3 to 22.15.29. <details> <summary>Commits</summary> <ul> <li>See full diff in <a href="https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node">compare view</a></li> </ul> </details> <br /> [](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) --- <details> <summary>Dependabot commands and options</summary> <br /> You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) </details> Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> |
||
|
|
e05c98bfca |
ci: update to new cargo sort release (#9354)
The latest release now also sorts workspace dependencies, as well as different dependency sections. Keeping these things sorted reduces the chances of merge conflicts when multiple PRs edit these files. |
||
|
|
499a67f44b |
chore(gui-client): generate TypeScript interfaces from Rust (#9353)
The frontend of the GUI client is written in TypeScript and communicates with the backend via event listeners. Currently, we only have type-safety within either of those parts of the codebase but not across it. The payloads of these events are JSON-encoded. Any change to this interface therefore needs to be applied on either end. To avoid this, we add `tslink` to the GUI client which generates TypeScript interfaces from Rust structs. We still check those into Git into order to make local builds easy (otherwise every dev would have to set `TSLINK_BUILD=true` on their machine). Our Tauri CI build already has a check to ensure the Git workspace isn't modified after building so any changes to these generated files will fail CI. This adds a bit more type-safety to the codebase and makes refactorings on the GUI client easier. |
||
|
|
56ff469f03 |
refactor(gui-client): merge all windows into a single view (#9295)
This PR refactors the GUI clients frontend into a single window with a sidebar. The functionality remains the same but we do make minor UI improvements on the way. To pull the entire refactor off, we now use `react` and `flowbite-react` for the GUI. All the communication with the backend is moved towards one-way commands and events. That means, the flow is always: - Backend emits events to update frontend - Frontend triggers actions in the backend that may or may not result in further events This allows us to decouple the GUI from knowing about which side-effects change what parts of the state. Instead, it simply updates whenever it receives an event. - The previous "Advanced Settings" screen is now split into two parts: Settings and Diagnostics. Later, we will add a "General settings" page here. - The tray menu remains identical to the current one. When the user clicks "Settings" or "About", we open the window and navigate to the corresponding page. - The app and git version are now directly embedded in the frontend, simplifying the interaction between the frontend and the backend further. |Before|After| |---|---| ||| ||| || ||| |
||
|
|
1f5d28592b |
build(deps): bump the tailwind group in /rust/gui-client with 3 updates (#9258)
Bumps the tailwind group in /rust/gui-client with 3 updates: [@tailwindcss/cli](https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/@tailwindcss-cli), [@tailwindcss/vite](https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/@tailwindcss-vite) and [tailwindcss](https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/tailwindcss). Updates `@tailwindcss/cli` from 4.1.5 to 4.1.7 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/tailwindlabs/tailwindcss/releases"><code>@tailwindcss/cli</code>'s releases</a>.</em></p> <blockquote> <h2>v4.1.7</h2> <h3>Added</h3> <ul> <li>Upgrade: Migrate bare values to named values (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/18000">#18000</a>)</li> <li>Upgrade: Added cache to improve template migration performance (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/18025">#18025</a>)</li> </ul> <h3>Fixed</h3> <ul> <li>Allow <code>_</code> before numbers during candidate extraction (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17961">#17961</a>)</li> <li>Prevent duplicate suggestions when using <code>@theme</code> and <code>@utility</code> together (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17675">#17675</a>)</li> <li>Ensure that media queries within <code>::before</code> and <code>::after</code> pseudo selectors create valid CSS rules in production builds (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17979">#17979</a>)</li> <li>Ensure that the standalone CLI does not leave temporary files behind (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17981">#17981</a>)</li> <li>Ensure <code>-rotate-*</code> utilities properly negate arbitrary values (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/18014">#18014</a>)</li> <li>Ignore custom variants using <code>:merge(…)</code> selectors in legacy JS plugins (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/18020">#18020</a>)</li> <li>Ensure classes containing <code>.</code> are properly extracted from Clojure files (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/18038">#18038</a>)</li> <li>Upgrade: Fix error when using <code>@import … source(…)</code> (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17963">#17963</a>)</li> <li>Upgrade: Change casing of utilities with named values to kebab-case to match updated theme variables (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/18017">#18017</a>)</li> <li>Upgrade: Don't migrate strings that match utility names in Vue attribute bindings other than <code>class</code> (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/18025">#18025</a>)</li> </ul> <h2>v4.1.6</h2> <h3>Added</h3> <ul> <li>Upgrade: Automatically convert arbitrary values to named values when possible (e.g. <code>h-[1lh]</code> to <code>h-lh</code>) (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17831">#17831</a>, <a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17854">#17854</a>)</li> <li>Upgrade: Update dependencies in parallel for improved performance (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17898">#17898</a>)</li> <li>Add detailed logging about <code>@source</code> directives, discovered files and scanned files when using <code>DEBUG=*</code> (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17906">#17906</a>, <a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17952">#17952</a>)</li> <li>Add support for generating source maps in development (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17775">#17775</a>)</li> </ul> <h3>Fixed</h3> <ul> <li>Ensure negative arbitrary <code>scale</code> values generate negative values (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17831">#17831</a>)</li> <li>Fix HAML extraction with embedded Ruby (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17846">#17846</a>)</li> <li>Don't scan files for utilities when using <code>@reference</code> (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17836">#17836</a>)</li> <li>Fix incorrectly replacing <code>_</code> with <code> </code> in arbitrary modifier shorthand <code>bg-red-500/(--my_opacity)</code> (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17889">#17889</a>)</li> <li>Don't scan <code>.log</code> files for classes by default (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17906">#17906</a>)</li> <li>Ensure that custom utilities applying other custom utilities don't swallow nested <code>@apply</code> rules (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17925">#17925</a>)</li> <li>Download platform specific package if <code>optionalDependencies</code> are skipped (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17929">#17929</a>)</li> </ul> </blockquote> </details> <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/tailwindlabs/tailwindcss/blob/main/CHANGELOG.md"><code>@tailwindcss/cli</code>'s changelog</a>.</em></p> <blockquote> <h2>[4.1.7] - 2025-05-15</h2> <h3>Added</h3> <ul> <li>Upgrade: Migrate bare values to named values (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/18000">#18000</a>)</li> <li>Upgrade: Added cache to improve template migration performance (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/18025">#18025</a>)</li> </ul> <h3>Fixed</h3> <ul> <li>Allow <code>_</code> before numbers during candidate extraction (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17961">#17961</a>)</li> <li>Prevent duplicate suggestions when using <code>@theme</code> and <code>@utility</code> together (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17675">#17675</a>)</li> <li>Ensure that media queries within <code>::before</code> and <code>::after</code> pseudo selectors create valid CSS rules in production builds (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17979">#17979</a>)</li> <li>Ensure that the standalone CLI does not leave temporary files behind (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17981">#17981</a>)</li> <li>Ensure <code>-rotate-*</code> utilities properly negate arbitrary values (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/18014">#18014</a>)</li> <li>Ignore custom variants using <code>:merge(…)</code> selectors in legacy JS plugins (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/18020">#18020</a>)</li> <li>Ensure classes containing <code>.</code> are properly extracted from Clojure files (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/18038">#18038</a>)</li> <li>Upgrade: Fix error when using <code>@import … source(…)</code> (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17963">#17963</a>)</li> <li>Upgrade: Change casing of utilities with named values to kebab-case to match updated theme variables (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/18017">#18017</a>)</li> <li>Upgrade: Don't migrate strings that match utility names in Vue attribute bindings other than <code>class</code> (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/18025">#18025</a>)</li> </ul> <h2>[4.1.6] - 2025-05-09</h2> <h3>Added</h3> <ul> <li>Upgrade: Automatically convert arbitrary values to named values when possible (e.g. <code>h-[1lh]</code> to <code>h-lh</code>) (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17831">#17831</a>, <a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17854">#17854</a>)</li> <li>Upgrade: Update dependencies in parallel for improved performance (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17898">#17898</a>)</li> <li>Add detailed logging about <code>@source</code> directives, discovered files and scanned files when using <code>DEBUG=*</code> (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17906">#17906</a>, <a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17952">#17952</a>)</li> <li>Add support for generating source maps in development (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17775">#17775</a>)</li> </ul> <h3>Fixed</h3> <ul> <li>Ensure negative arbitrary <code>scale</code> values generate negative values (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17831">#17831</a>)</li> <li>Fix HAML extraction with embedded Ruby (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17846">#17846</a>)</li> <li>Don't scan files for utilities when using <code>@reference</code> (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17836">#17836</a>)</li> <li>Fix incorrectly replacing <code>_</code> with <code> </code> in arbitrary modifier shorthand <code>bg-red-500/(--my_opacity)</code> (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17889">#17889</a>)</li> <li>Don't scan <code>.log</code> files for classes by default (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17906">#17906</a>)</li> <li>Ensure that custom utilities applying other custom utilities don't swallow nested <code>@apply</code> rules (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17925">#17925</a>)</li> <li>Download platform specific package if <code>optionalDependencies</code> are skipped (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17929">#17929</a>)</li> </ul> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href=" |
||
|
|
bed94a1d21 |
feat(gui-client): add MDM config for Windows (#9203)
This PR adds the equivalent MDM configuration that we already have for MacOS & iOS for the GUI client on Windows. These options are retrieved from the Windows registry when the Client is started. Specifically, the key for these is: `HKEY_CURRENT_USER\Software\Policies\Firezone`. At moment, these cannot be configured or seen by the user. They are also not "watched" for whilst the Client is running. If an admin pushes a new MDM configuration, the Client will have to be restarted in order for that new config to take effect. Windows Policy templates are structured into two files: - An `.admx` file that defines the structure of the policy, like the kinds of values it has, where it is stored, which versions it is supported on and which category it belongs to. - An `.adml` file that defines defines all strings and presentation logic, like the actual text of the policies and how the values are presented in the GUI in e.g. Intune. Internally, we differentiate between `MdmSettings` and `AdvancedSettings`. The `MdmSettings` are cross-platform, however on Linux, we always fallback to the defaults and therefore, they are always "unset". Eventually, it might make sense to wrap both of these into a more general `Settings` struct that acts as as a proxy for the two. Related: #4505 |
||
|
|
b5c18db5e8 |
chore(ci): Bump next clients version to 1.5.0 (#9229)
We've decided we'll be bumping the minor with shipping managed configurations support. |
||
|
|
068f7dfc8e |
chore(deps): Bump codespell to 2.4.1 and fix found issues (#9221)
The dictionary was updated in and codespell found a few minor issues to fix. Supersedes #8990 |
||
|
|
67d11b1e01 |
fix(gui-client): don't reset favourites when settings change (#9211)
The GUI client currently has a bug that resets the favourites and the status of the Internet Resource every time the advanced settings are saved. This happens because those fields are annotated with `#[serde(default)]` and are thus initialised to their default value when the struct is deserialised from the frontend. To mitigate this, we introduce a new `GeneralSettings` struct that holds the status of the Internet Resource and the list of favourites. When a client starts up, it will try to migrate the existing advanced settings into the new split of general and advanced settings. |
||
|
|
600f00f82e |
refactor(gui-client): update settings window via event (#9193)
Ensuring that the "Settings" window always displays the latest state is important. At the moment, we achieve this by fetching the settings from Rust every time we know that they changed and when the window is opened. Currently, the settings can only change as a result of the reset button. Once we integrate MDM-controlled configuration into the GUI client, the settings can change at any point when administrators push a new configuration change. The window doesn't know that though. To simplify the code and handle dynamic changes to the settings, we now use an event to send the settings to the frontend. |
||
|
|
af7eaa8cc9 | chore: release GUI client 1.4.14 (#9197) | ||
|
|
ae872980ae |
refactor(gui-client): scope telemetry sessions to GUI client (#9179)
For our telemetry sessions with Sentry, we need to know which environment we are running in, i.e. staging, production or on-prem. The GUI client's tunnel service doesn't have a concept of an environment until a GUI connects and sends the `StartTelemetry` message. Therefore, we should scope a telemetry session to a GUI being connected over IPC. Any errors around setting up / tearing down the background service are a catch-22. Until a GUI connects, we can't initialise the telemetry connection but if we fail to set up the background service, no GUI can ever connect. Hence, the current setup and tear down of the `Telemetry` module around the `ipc_listen` calls can safely be removed as they are effectively no-ops anyway. |
||
|
|
042d03af2a |
feat(gui-client): polish Linux bundling (#9181)
Tauri's `deb` and `rpm` bundler have support for configuring maintainer scripts. We can therefore just use those instead of tearing apart the `deb` file that it creates and rebuilding it ourselves. Our `rpm` packaging is currently completely broken as well. I couldn't get it to work on CentOS 9 at all due to missing dependencies, likely introduced by our move to Tauri v2. It installs fine on CentOS 10 though, assuming that the user has the EPEL repository installed which provides the WebView dependency. I extended the docs to reflect this. Hence, with this PR, we drop support for CentOS 9 and now require CentOS 10. This allows us to remove a lot of cruft from our bundling process and instead entirely rely on the Tauri provided bundler. Lastly, for consistency with other platforms, the name of the application in places like app drawers has been changed from "Firezone Client" to just "Firezone". --------- Signed-off-by: Thomas Eizinger <thomas@eizinger.io> |
||
|
|
d53deaf0d8 |
chore(gui-client): allow override log filter from command-line (#9182)
Can be useful when debugging the GUI client process. |
||
|
|
9a4c87dd2e |
chore(gui-client): include version in run-debug log (#9187)
This TODO can now be resolved because we have moved the Tunnel service into the `gui-client` crate. |
||
|
|
00b40ae267 |
refactor(gui-client): improve error handling in Windows service (#9178)
The current error handling logic in the Windows service is a bit dodgy. We first initialise the logger but then pass the logging handle into the `try_run_service` function. This means that any failures in starting the Windows service aren't actually logged because the handle has been dropped by then already. |
||
|
|
1bdba3601a |
feat(gui-client): rename IPC service to Tunnel service (#9154)
The name IPC service is not very descriptive. By nature of being separate processes, we need to use IPC to communicate between them. The important thing is that the service process has control over the tunnel. Therefore, we rename everything to "Tunnel service". The only part that is not changed are historic changelog entries. Resolves: #9048 |