* Add kube fixture
* Make items in unified resources more semantically accurate so they are easier to find
* Add shell utility that executes a command and waits for its completion
* Add kube tests
* Use unique pod name
* Use `tsh kubectl`
* Ignore kubeconfigs in git
* Set up kube cluster only for Connect
* Remove stale kind cluster before calling create
* Handle Docker networking
* Use stable image
* Fix race condition on launch
* Do not download `busybox` image, exec into kind's internal pod
* Disable tests to avoid hitting rate limiter
* Disable kube fixture for now
* Lint
* Update `node-tar` to 7.5.22
* Update `postcss` to 8.5.16
* Update `brace-expansion` to 1.1.18, 2.1.4, and 5.0.9
* Update `fast-uri` to 3.1.5
* Bump `undici` to 6.28.0, 7.29.0, and 8.10.0
* Bump `form-data` to 4.0.5
* Bump `tar` to 7.5.16
* Bump `protobufjs` to 7.6.4
* Bump `js-yaml` to 4.2.0
* Bump `@storybook` to 10.4.6 to get rid of `[email protected].7`
* Bump `esbuild` to 0.28.1
* `pnpm dedupe`
* Use `os.Root` for directory sharing
* Remove unreachable code
Create creates or truncates the named file. If the file already exists, it is truncated.
* Fix `userpreferences.Update` panic on nil request
* Recover from panic in gRPC middleware, add logging for stream handlers
* Use `trace.Errorf` to log stack trace, skip logging the actual panic
* Make panic recovery interceptor the last interceptor
* Replace incorrect `require.Errorf` usage with `require.ErrorContains`
* Use grpc getters instead of direct field access
* Avoid falling back to system CA when cert cannot be read
* Add test
* Fix flaky test
* Ensure cert is trusted by verifier
* Add explicit comment for non-nil `ClientCAs`
* Apply `pnpx codemod run pnpm-v10-to-v11`
* Remove `eslint` hoisting, it's in the root package.json anyway
* `pnpm install`
* Bump Node.js to 24.15
* Bump pnpm to 11.1.1
* Update pnpm to 11.3.0
* Update `electron` to 42.2.0, `electron-builder` to 26.11.1
* Update `node-abi` to 4.31.0
* Override `yauzl` to workaround Electron not being installed on Node.js 24.16
* Update Node.js to 24.16
* Bump Playwright to 1.60.0
* Separate logging out and forgetting profile
* Store `proxyHost` in the workspace and decouple workspace existence from profile existence
* Display workspaces instead of profiles in identity list
* Only activate workspace on launch when cluster exists
* Handle cluster disappearing when `ClusterLogin` is open
* Fix e2e tests
* Add comments
* Clean up rendering workspaces
* Make test name more obvious
* Make workspace state the source of truth for activation
* Adjust callsites to updated `addWorkspace` and `setActiveWorkspace` behavior
* Add `makeWorkspace` and `makePersistedWorkspace` test helpers
* Fix mistakenly passed `cluster.uri` instead of `cluster.proxyHost`
* Read `activeClusterUri` from `useStoreSelector`
* Update `proxyHost` in workspace whenever it changes in profile
* Use `proxyHost` in notification
* Introduce `rootClusterProxyHost`
* Get rid of `getActiveRootCluster()`
* Rename `identityItems`
* Improve comment for `setActiveWorkspace` init action
* Fix `Identity` story
* Previously used -> Saved in Connect
* Clear app updates managing cluster only when forgetting cluster
* Wrap `hasAnyWorkspaces` in boolean
* Expired session -> Session expired, Saved in Connect -> In history
* Fix e2e test
* Log full timestamp
Instead of '30-09-2017 03:57' log '2017-09-30T03:57:26.875Z'
* Add better logging to `AwaitableSender`, `ClusterStore`, and `ClusterLifecycleManager`
* Add logging to `profileWatcher`
* Handle `this.clustersService.findCluster(uri)` being potentially `undefined`
* Bump default `AwaitableSender` timeout to 20 seconds
Just in case it's related to https://github.com/electron/electron/issues/51065
* Do not log every FS event
* Remove unnecessary "Profile watcher already started" log
* Logging improvements
* Remove redundant "File system event limit exceeded" log
* Improve results layout
* Do not show matches in resource's secondary properties/labels if there's already a match on the main field
* Adjust stories and add tests
* Change `font-weight` to 400 for better redability
* Add tests for `getVisibleMatches`
* Remove unnecessary trailing spaces
* Update managed updates docs
* Link to docs in app
* Add defaults
* Instruct how to collect logs from `TeleportConnectUpdater`
* Update paths in uninstall instructions
* Add `VERSION_MISMATCH` status to `WindowsServiceStatus`
* Show error in UI
* Verify service compatibility with client
* Fix outdated comment
* Remove unnecessary stories
* Move `VerifyServiceInstalledAndMatchesClient` to separate file
* Move `tests` to `tests/web`
* Enable building Connect
* Prepare Playwright test setup
* Add `browse` mode
* Replace `foo-` with `connect-e2e-test-`
* Merge if statements together
* `--browse-web` -> `--browse`
* Build Connect if requested path is `tests`
* Make imports more readable
* Attach logs to failed tests
* Link to docs about `use`
* Include "." in slashPath comparison
* Properly clean up app when `launchApp` throws before returning async disposer
* Add `message_of_the_day` to `AuthSettings`, remove unused `has_message_of_the_day`
* Support passing `whiteSpace` to `Text`
* Show MOTD before login
* Add tests and stories
* Remove `minHeight={0}`
* Move `MessageOfTheDay` to `ClusterLogin`
* Minor code style fix
* Add service commands to tsh
* Install updater service and run updates through it
* Add signature verification
* Disable CTMU for `tsh.exe connect-updater-install-update`
* Force install mode when migrating from one-click to assisted multi-user
* Spawn `tsh.exe connect-updater-install-update` synchronously and catch errors
* Use single parent command, remove args from `service.Start`
* Do not ignore error from closing handle
* Grammar fixes
* Use single command in installer.nsh too
* Use `svc.IsWindowsService()` instead of `isWindowsService`
* Switch from `CertCompareCertificateName` to comparing subject properties
* Log certs if they don't match
* Improve comment
* Add privileged updater service
* Add integration tests for updater
* Review fixes
* Move privileged updater to its own module
* Fix comments
* Interpolate registry pathnames, switch errors to AccessDenied
* Improve error handling in `waitForSingleClient`
* Use stricter DACL for named pipe
* Close `conn` on context cancellation
* Move reading update meta to separate function
* `trace.LimitExceeded` -> `trace.Errorf`
* Fix test
* Ensure updater only allows HTTPS
* Use TLS server in tests
* Fix tests
* RFD 0242: Improve Windows installation experience
* Review comments
* Fix spelling
* Review fixes
* Update reviewers
* Replace clusters allowlist with upgrade-only update policy
* Resolve install location from system registry
* Improve update process
* Lint
* Clarify downgrade behavior for versions set via env var or system registry
* Clarify creating secure directory
* Fix typo
* Make improvements to update process based on implementation findings
* Typos
* Add exact security descriptors
* Lint
* Disallow downgrades
* Improve "update-not-available" state
* Fix title casing
* Add test for downgrades
* Ensure app version is greater than update version in test
* Bring back `UpdateInfo` interface to avoid unnecessary conflicts with other PRs
* Replace `GetDownloadBaseUrl` RPC with `GetConfig`
* Implement reading ToolsVersion and CdnBaseUrl from system registry
* Read values from `getConfig()` instead of `getDownloadBaseUrl` and `process.env`
* Use UAC updater when app is configured with env vars
* Fix typos
* Handle tools version being 'off'
* Safely read values from `GetConfigResponse`
* Fix ordering in proto
* Non-official -> Unofficial
* Add TODO about docs
* Use switch-case instead of if-else
* Bring back if-else
* Switch installer to dual-mode
* Customize NSIS updater to disallow attempts to update per-machine installations if update is triggered from per-user instance
* Make `assertTshInProgramFiles` more strict
Reading Program Files path should be done using Windows API instead of env var that can be overridden.
* Add RPC to check if VNet service is installed
* Show warning and disable auto-start if there is no VNet service
* `GetWindowsSystemService` -> `CheckPreRunRequirements`
* `CheckPreRunRequirements` -> `CheckInstallTimeRequirements`
* Customize `forAll` option with VNet message
* Check for per-machine installation in system registry
* Fix vars with PreRun in the name
* Link to source file from the electron-builder repo, add commit hash
* Read per-machine location from Go instead of via PowerShell
* `IsPerMachineInstallResponse` -> `GetInstallationMetadataResponse`
* Define `GetInstallationMetadata` handler in separate file
* Fix tests failing on "updates not wrapped into act"
* Extract reusable function for service installation
* Move `install_service_windows.go` to `lib/windowsservice`
* Reintroduce `vnet/install_service_windows.go`
* Make service runner reusable
* Add missing service description and returns on error
* Log service name when installing/uninstalling
* Rename files
* Put `err` first
* Add `sub_kind` and `permission_sets` to `App` message
* Allow launching AWS IAM IC
* Add AWS domain to allowlist
* Fix makeApp helper
* Add story
* Validate path and host parts, add test
* Support US gov partition addresses
* Update proto message
* Use more realistic publicAddr in test
---------
Co-authored-by: Rafał Cieślak <[email protected]>
* Initialize default Username/HostLogin only in tsh
* Move `Username()` from `api.go` to `tsh.go`
* Remove wrong `Profile.SiteName` default
* Remove resetting `SiteName`
Not sure why it was needed. Perhaps to clear the default that we just removed? But even if add the default back and remove this fix, everything works.
* Gracefully handle missing SSH/TLS certs
* Remove unused `TeleportClient.LoadKeyForClusterWithReissue`
* Revert "Move `Username()` from `api.go` to `tsh.go`"
This reverts commit f7ff0ff6d1.
* Revert "Initialize default Username/HostLogin only in tsh"
This reverts commit ed38babf5e.
* When any of SSH/TLS cert is missing, return partial profile
* Only log non-nil errors
* Revert "Remove wrong `Profile.SiteName` default"
* Revert "Remove resetting `SiteName`"
This reverts commit f54ab3f22a.
* Set `SiteName` when adding cluster
* Improve comments
* Add test
* Fix test
* Add myself to TODO
* Add test for logging out with missing SSH cert
* Lint
* Add tooltip to Connect tray icon
* Use `app.name`
* Use `app.name` for the open button too
---------
Co-authored-by: Rafał Cieślak <[email protected]>
* Detect when user's access changes
* Refresh resources in UI when `did-change-access` is received
* Add tests for `ClusterLifecycleManager`
* Add better docs for ClusterLifecycleEvent
* Test assuming requests too
* Improve test names
* Switch tsh home directory to ~/.tsh
* Migrate old tsh home to new location, disallow updating fields outside the `state` key in app_state.json from the renderer process
* Show banner about migrated tsh home
* `promoteMigratedTshHome` -> `showTshHomeMigrationBanner`
* `MigratedTshHomeBanner` -> `TshHomeMigrationBanner`
* 'Profiles are' -> 'Profiles are now', remove unnecessary space
* Fix assigning colors for new workspaces
* Improve logs
* Respect `TELEPORT_PROXY` env var in `tsh status`
* Enable listing profiles if there is no active profile
* Add test
* Define `err` within the block where it's actually used
* Handle missing current profile in `tsh logout`
* Make check more explicit
* Revert mistakenly commited change
* Include expiration time in `LoggedInUser`
This will allow the profile watcher to detect when the user relogged.
* Display expiration time in UI
* Add `ClearStaleClusterClients` RPC
* Implement `ClearStaleClusterClients`
* Clear stale clients when profile changes
* Improve session expiration component
* Move refresh button back to top
* `ClearCachedStaleClientsForRoot` -> `ClearStaleCachedClientsForRoot`
* `unchanged` -> `stale`
* Make "closing stale clients" a subtest
* Add `clientcache` test
* Remove `getProfile` error wrapping
* Improve comment
* Convert story to controls
* Add `ClusterLifecycleManager`
* Register handlers for adding, removing and logging out from cluster
* Provide `rootCluster` in `useWorkspaceContext`
The handlers in the profile watcher will proceed with updating the cluster store, even if the renderer handlers returned errors.
This check protects us from a runtime error if the renderer fails to remove the workspace.
* Improve docs
* Move processing queue to listener
* Make `will-` operations always interrupt main process actions
* Improve error messages
* Do not remove managing cluster when **only** logging out
The app updater displays all clusters, not just those the user is logged into.
* Revert "Provide `rootCluster` in `useWorkspaceContext`"
This reverts commit cf76d2ba27.
* Rename `logoutWithCleanup` to `cleanUpBeforeLogout`
* Do not pass `AbortSignal` to `this.mainProcessClient.syncRootClusters`
* Lint
* Fix types issues
* Do not stack watcher notifications
* Add profile watcher
* Move `makeClusterWithOnlyProfileProperties` to `profileWatcher.ts`, improve test
* Handle watched directory removal
* Improve comments
* Make tests faster, pass abort signal everywhere
* Improve docs
* Make `removing tsh directory does not break watcher` easier to understand
* Make test dir per test
* Improve timing in tests
* Add a limit of how many events can be emitted by `fs.watch` (to break the endless stream of events on Windows when watched dir is removed), go into the polling mode only when it's expected that the watched dir was removed
* Use `expect().rejects.toThrow` correctly
* Deflake 'max file system events count is restricted'
* Replace `makeClusterWithOnlyProfileProperties` with `mergeClusterProfileWithDetails`, move it back to `cluster.ts`
* Attempt to fix tests
* Clarify comment
* Remove `ClusterRemove` RPC, make logging out idempotent
* Move calling `removeKubeConfig` and `maybeRemoveAppUpdatesManagingCluster` to main process
The main process should not depend on the renderer to clean up its own resources.
* Remove cleaning up kube dir
* Lint
* Do not read root cluster name from profile's `cluster` field
* Update docs for `name` field
* Use profile name in places that refer to workspace
* Improve comments
* `clusterName` -> `profileName`
* Get rid of `nameOrProfile`
* Add JSDoc for `captureUserLogin`
* `cluster` -> `certificate`
* Create `ClusterStore` that manages cluster state
* Fix tests that mocked tshd directly
* Remove IPC to notify the main process about cluster list changes
* Load immer plugins in `MainProcess`
* Improve comments
* Refactor `useSender`
* Get rid of unnecessary Map and try/catch around send
* Get rid of `MainProcess.create`
* Do not return early `c.proxyHost` is falsy
* Add more context to test
* Add missing logout handler in main process
* Fix applying patches
* Adjust `subscribeToClusterStore` to updated `startAwaitableSenderListener`
* Crash window when sending state update fails
* Extract WebContents navigation handlers and add tests for opening links
* Improve error message
* Initialize `ClusterStore` synchronously
* Convert `lazyTshdClient` field to `getTshdClient` function, add docs
* Remove unused eslint directive
* Enable `noImplicitThis`
* Get rid of `memoize`
* Refactor `runOnce`
* Verify return value of `runOnce`
* Fix name
* Return value from `runOnce` in test
* Remove clusters immediately after a logout, move `useClusterLogout` to `AppContext`
* Review callsites to ensure cluster is properly checked before being accessed
* Revert "Review callsites to ensure cluster is properly checked before being accessed"
This reverts commit 8343c3c291.
* Switch to removing the cluster at the end of logout sequence
* Lint
* Move `logoutWithCleanup` to `ui/ClusterLogout`