diff --git a/web/packages/teleport/src/UnifiedResources/UnifiedResources.tsx b/web/packages/teleport/src/UnifiedResources/UnifiedResources.tsx
index cb035aa69526d..0799197a4f329 100644
--- a/web/packages/teleport/src/UnifiedResources/UnifiedResources.tsx
+++ b/web/packages/teleport/src/UnifiedResources/UnifiedResources.tsx
@@ -27,9 +27,10 @@ import {
useUnifiedResourcesFetch,
UnifiedResourcesPinning,
} from 'shared/components/UnifiedResources';
-import { DefaultTab } from 'shared/services/unifiedResourcePreferences';
import { ClusterDropdown } from 'shared/components/ClusterDropdown/ClusterDropdown';
+import { DefaultTab } from 'gen-proto-ts/teleport/userpreferences/v1/unified_resource_preferences_pb';
+
import useStickyClusterId from 'teleport/useStickyClusterId';
import { storageService } from 'teleport/services/storageService';
import { useUser } from 'teleport/User/UserContext';
@@ -123,8 +124,7 @@ function ClusterResources({
dir: 'ASC',
},
pinnedOnly:
- preferences?.unifiedResourcePreferences?.defaultTab ===
- DefaultTab.DEFAULT_TAB_PINNED,
+ preferences?.unifiedResourcePreferences?.defaultTab === DefaultTab.PINNED,
});
const getCurrentClusterPinnedResources = useCallback(
diff --git a/web/packages/teleport/src/User/UserContext.test.tsx b/web/packages/teleport/src/User/UserContext.test.tsx
index dbce69b748ad8..62a7b7ac9122a 100644
--- a/web/packages/teleport/src/User/UserContext.test.tsx
+++ b/web/packages/teleport/src/User/UserContext.test.tsx
@@ -26,11 +26,12 @@ import { render, screen, waitFor } from '@testing-library/react';
import '@testing-library/jest-dom';
+import { Theme } from 'gen-proto-ts/teleport/userpreferences/v1/theme_pb';
+
import cfg from 'teleport/config';
import { UserContextProvider } from 'teleport/User';
-import { ThemePreference } from 'teleport/services/userPreferences/types';
import { useUser } from 'teleport/User/UserContext';
import { KeysEnum } from 'teleport/services/storageService';
@@ -38,9 +39,7 @@ function ThemeName() {
const { preferences } = useUser();
return (
-
- theme: {preferences.theme === ThemePreference.Light ? 'light' : 'dark'}
-
+ theme: {preferences.theme === Theme.LIGHT ? 'light' : 'dark'}
);
}
@@ -49,7 +48,7 @@ describe('user context - success state', () => {
rest.get(cfg.api.userPreferencesPath, (req, res, ctx) => {
return res(
ctx.json({
- theme: ThemePreference.Light,
+ theme: Theme.LIGHT,
assist: {},
})
);
@@ -76,7 +75,7 @@ describe('user context - success state', () => {
});
it('should migrate the previous theme setting from local storage', async () => {
- let updateBody: { theme?: ThemePreference } = {};
+ let updateBody: { theme?: Theme } = {};
server.use(
rest.put(cfg.api.userPreferencesPath, async (req, res, ctx) => {
@@ -96,7 +95,7 @@ describe('user context - success state', () => {
);
- await waitFor(() => expect(updateBody.theme).toEqual(ThemePreference.Dark));
+ await waitFor(() => expect(updateBody.theme).toEqual(Theme.DARK));
const theme = await screen.findByText(/theme: dark/i);
diff --git a/web/packages/teleport/src/User/UserContext.tsx b/web/packages/teleport/src/User/UserContext.tsx
index 5b5146be8eb81..7a1eb47a51359 100644
--- a/web/packages/teleport/src/User/UserContext.tsx
+++ b/web/packages/teleport/src/User/UserContext.tsx
@@ -30,6 +30,12 @@ import useAttempt from 'shared/hooks/useAttemptNext';
import { Indicator } from 'design';
+import { UserPreferences } from 'gen-proto-ts/teleport/userpreferences/v1/userpreferences_pb';
+
+import { ClusterUserPreferences } from 'gen-proto-ts/teleport/userpreferences/v1/cluster_preferences_pb';
+
+import { Theme } from 'gen-proto-ts/teleport/userpreferences/v1/theme_pb';
+
import { StyledIndicator } from 'teleport/Main';
import * as service from 'teleport/services/userPreferences';
@@ -37,18 +43,10 @@ import cfg from 'teleport/config';
import { KeysEnum, storageService } from 'teleport/services/storageService';
-import {
- deprecatedThemeToThemePreference,
- ThemePreference,
-} from 'teleport/services/userPreferences/types';
+import { deprecatedThemeToThemePreference } from 'teleport/services/userPreferences/types';
import { makeDefaultUserPreferences } from 'teleport/services/userPreferences/userPreferences';
-import type {
- UserClusterPreferences,
- UserPreferences,
-} from 'teleport/services/userPreferences/types';
-
export interface UserContextValue {
preferences: UserPreferences;
updatePreferences: (preferences: Partial) => Promise;
@@ -69,7 +67,7 @@ export function UserContextProvider(props: PropsWithChildren) {
const { attempt, run } = useAttempt('processing');
// because we have to update cluster preferences with itself during the update
// we useRef here to prevent infinite rerenders
- const clusterPreferences = useRef>({});
+ const clusterPreferences = useRef>({});
const [preferences, setPreferences] = useState(
makeDefaultUserPreferences()
@@ -80,12 +78,12 @@ export function UserContextProvider(props: PropsWithChildren) {
// we know that pinned resources is supported because we've already successfully
// fetched their pinned resources once before
window.localStorage.removeItem(KeysEnum.PINNED_RESOURCES_NOT_SUPPORTED);
- return clusterPreferences.current[clusterId].pinnedResources;
+ return clusterPreferences.current[clusterId].pinnedResources.resourceIds;
}
const prefs = await service.getUserClusterPreferences(clusterId);
if (prefs) {
clusterPreferences.current[clusterId] = prefs;
- return prefs.pinnedResources;
+ return prefs.pinnedResources.resourceIds;
}
return null;
}, []);
@@ -95,9 +93,12 @@ export function UserContextProvider(props: PropsWithChildren) {
pinnedResources: string[]
) => {
if (!clusterPreferences.current[clusterId]) {
- clusterPreferences.current[clusterId] = { pinnedResources: [] };
+ clusterPreferences.current[clusterId] = {
+ pinnedResources: { resourceIds: [] },
+ };
}
- clusterPreferences.current[clusterId].pinnedResources = pinnedResources;
+ clusterPreferences.current[clusterId].pinnedResources.resourceIds =
+ pinnedResources;
return service.updateUserClusterPreferences(clusterId, {
...preferences,
@@ -121,7 +122,7 @@ export function UserContextProvider(props: PropsWithChildren) {
if (theme) {
preferences.theme = deprecatedThemeToThemePreference(theme);
- if (preferences.theme !== ThemePreference.Light) {
+ if (preferences.theme !== Theme.LIGHT) {
// the light theme is the default, so only update the backend if it is not light
updatePreferences(preferences);
}
diff --git a/web/packages/teleport/src/components/UserMenuNav/UserMenuNav.test.tsx b/web/packages/teleport/src/components/UserMenuNav/UserMenuNav.test.tsx
index c46e487afb887..d56b6565169a0 100644
--- a/web/packages/teleport/src/components/UserMenuNav/UserMenuNav.test.tsx
+++ b/web/packages/teleport/src/components/UserMenuNav/UserMenuNav.test.tsx
@@ -28,6 +28,8 @@ import {
fireEvent,
} from 'design/utils/testing';
+import { Theme } from 'gen-proto-ts/teleport/userpreferences/v1/theme_pb';
+
import cfg from 'teleport/config';
import { FeaturesContextProvider } from 'teleport/FeaturesContext';
@@ -38,8 +40,6 @@ import TeleportContext from 'teleport/teleportContext';
import { makeUserContext } from 'teleport/services/user';
-import { ThemePreference } from 'teleport/services/userPreferences/types';
-
import { mockUserContextProviderWith } from 'teleport/User/testHelpers/mockUserContextWith';
import { makeTestUserContext } from 'teleport/User/testHelpers/makeTestUserContext';
@@ -49,7 +49,7 @@ const server = setupServer(
rest.get(cfg.api.userPreferencesPath, (req, res, ctx) => {
return res(
ctx.json({
- theme: ThemePreference.Light,
+ theme: Theme.LIGHT,
assist: {},
})
);
diff --git a/web/packages/teleport/src/components/UserMenuNav/UserMenuNav.tsx b/web/packages/teleport/src/components/UserMenuNav/UserMenuNav.tsx
index f1d0881a1e0de..1fb88f4d953fa 100644
--- a/web/packages/teleport/src/components/UserMenuNav/UserMenuNav.tsx
+++ b/web/packages/teleport/src/components/UserMenuNav/UserMenuNav.tsx
@@ -23,11 +23,12 @@ import { Moon, Sun, ChevronDown, Logout as LogoutIcon } from 'design/Icon';
import { Text } from 'design';
import { useRefClickOutside } from 'shared/hooks/useRefClickOutside';
+import { Theme } from 'gen-proto-ts/teleport/userpreferences/v1/theme_pb';
+
import session from 'teleport/services/websession';
import { useFeatures } from 'teleport/FeaturesContext';
import { useTeleport } from 'teleport';
import { useUser } from 'teleport/User/UserContext';
-import { ThemePreference } from 'teleport/services/userPreferences/types';
import {
Dropdown,
DropdownItem,
@@ -124,9 +125,7 @@ export function UserMenuNav({ username }: UserMenuNavProps) {
const onThemeChange = () => {
const nextTheme =
- preferences.theme === ThemePreference.Light
- ? ThemePreference.Dark
- : ThemePreference.Light;
+ preferences.theme === Theme.LIGHT ? Theme.DARK : Theme.LIGHT;
updatePreferences({ theme: nextTheme });
setOpen(false);
@@ -180,14 +179,9 @@ export function UserMenuNav({ username }: UserMenuNavProps) {
- {preferences.theme === ThemePreference.Dark ? (
-
- ) : (
-
- )}
+ {preferences.theme === Theme.DARK ? : }
- Switch to{' '}
- {preferences.theme === ThemePreference.Dark ? 'Light' : 'Dark'}{' '}
+ Switch to {preferences.theme === Theme.DARK ? 'Light' : 'Dark'}{' '}
Theme
diff --git a/web/packages/teleport/src/services/storageService/storageService.ts b/web/packages/teleport/src/services/storageService/storageService.ts
index 07b79c6c7c571..090441b1ba6eb 100644
--- a/web/packages/teleport/src/services/storageService/storageService.ts
+++ b/web/packages/teleport/src/services/storageService/storageService.ts
@@ -18,14 +18,20 @@
import { DeprecatedThemeOption } from 'design/theme/types';
+import { UserPreferences } from 'gen-proto-ts/teleport/userpreferences/v1/userpreferences_pb';
+
+import { Theme } from 'gen-proto-ts/teleport/userpreferences/v1/theme_pb';
+
+import { OnboardUserPreferences } from 'gen-proto-ts/teleport/userpreferences/v1/onboard_pb';
+
import { BearerToken } from 'teleport/services/websession';
import { OnboardDiscover } from 'teleport/services/user';
import {
- OnboardUserPreferences,
- ThemePreference,
- UserPreferences,
-} from 'teleport/services/userPreferences/types';
+ BackendUserPreferences,
+ convertBackendUserPreferences,
+ isBackendUserPreferences,
+} from 'teleport/services/userPreferences/userPreferences';
import { CloudUserInvites, KeysEnum, LocalStorageSurvey } from './types';
@@ -107,7 +113,17 @@ export const storageService = {
getUserPreferences(): UserPreferences {
const preferences = window.localStorage.getItem(KeysEnum.USER_PREFERENCES);
if (preferences) {
- return JSON.parse(preferences);
+ const parsed: UserPreferences | BackendUserPreferences =
+ JSON.parse(preferences);
+
+ // TODO(ryan): DELETE in v17: remove reference to `BackendUserPreferences` - all
+ // locally stored copies of user preferences should be `UserPreferences` by then
+ // (they are updated on every login)
+ if (isBackendUserPreferences(parsed)) {
+ return convertBackendUserPreferences(parsed);
+ }
+
+ return parsed;
}
return null;
},
@@ -161,7 +177,7 @@ export const storageService = {
window.localStorage.removeItem(KeysEnum.CLOUD_USER_INVITES);
},
- getThemePreference(): ThemePreference {
+ getThemePreference(): Theme {
const userPreferences = storageService.getUserPreferences();
if (userPreferences) {
return userPreferences.theme;
@@ -169,10 +185,10 @@ export const storageService = {
const theme = this.getDeprecatedThemePreference();
if (theme) {
- return theme === 'light' ? ThemePreference.Light : ThemePreference.Dark;
+ return theme === 'light' ? Theme.LIGHT : Theme.DARK;
}
- return ThemePreference.Light;
+ return Theme.LIGHT;
},
getOnboardUserPreference(): OnboardUserPreferences {
diff --git a/web/packages/teleport/src/services/userPreferences/types.ts b/web/packages/teleport/src/services/userPreferences/types.ts
index fcc2017b3b45f..3bb2bffa347c6 100644
--- a/web/packages/teleport/src/services/userPreferences/types.ts
+++ b/web/packages/teleport/src/services/userPreferences/types.ts
@@ -18,23 +18,7 @@
import { DeprecatedThemeOption } from 'design/theme';
-import type { UnifiedResourcePreferences } from 'shared/services/unifiedResourcePreferences';
-
-import type { AssistUserPreferences } from 'teleport/Assist/types';
-
-export enum ThemePreference {
- Light = 1,
- Dark = 2,
-}
-
-export enum ClusterResource {
- RESOURCE_UNSPECIFIED = 0,
- RESOURCE_WINDOWS_DESKTOPS = 1,
- RESOURCE_SERVER_SSH = 2,
- RESOURCE_DATABASES = 3,
- RESOURCE_KUBERNETES = 4,
- RESOURCE_WEB_APPLICATIONS = 5,
-}
+import { Theme } from 'gen-proto-ts/teleport/userpreferences/v1/theme_pb';
export type MarketingParams = {
campaign: string;
@@ -43,36 +27,13 @@ export type MarketingParams = {
intent: string;
};
-export type OnboardUserPreferences = {
- preferredResources: ClusterResource[];
- marketingParams: MarketingParams;
-};
-
-export interface UserPreferences {
- theme: ThemePreference;
- assist: AssistUserPreferences;
- onboard: OnboardUserPreferences;
- clusterPreferences: UserClusterPreferences;
- unifiedResourcePreferences: UnifiedResourcePreferences;
-}
-
-// UserClusterPreferences are user preferences that are
-// different per cluster.
-export interface UserClusterPreferences {
- // pinnedResources is an array of resource IDs.
- pinnedResources: string[];
-}
-
-export type GetUserClusterPreferencesResponse = UserClusterPreferences;
-export type GetUserPreferencesResponse = UserPreferences;
-
export function deprecatedThemeToThemePreference(
theme: DeprecatedThemeOption
-): ThemePreference {
+): Theme {
switch (theme) {
case 'light':
- return ThemePreference.Light;
+ return Theme.LIGHT;
case 'dark':
- return ThemePreference.Dark;
+ return Theme.DARK;
}
}
diff --git a/web/packages/teleport/src/services/userPreferences/userPreferences.test.ts b/web/packages/teleport/src/services/userPreferences/userPreferences.test.ts
new file mode 100644
index 0000000000000..d32b766245060
--- /dev/null
+++ b/web/packages/teleport/src/services/userPreferences/userPreferences.test.ts
@@ -0,0 +1,74 @@
+/**
+ * Teleport
+ * Copyright (C) 2023 Gravitational, Inc.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see .
+ */
+
+import { Theme } from 'gen-proto-ts/teleport/userpreferences/v1/theme_pb';
+import { UserPreferences } from 'gen-proto-ts/teleport/userpreferences/v1/userpreferences_pb';
+
+import {
+ BackendUserPreferences,
+ convertBackendUserPreferences,
+ convertUserPreferences,
+ isBackendUserPreferences,
+} from 'teleport/services/userPreferences/userPreferences';
+
+test('should convert the old cluster user preferences format to the new one', () => {
+ // this is how the backend currently returns cluster preferences - as an array of strings
+ // instead of the protobuf representation of an object with a `resourceIds` field that contains
+ // that array of strings
+ const oldBackendPreferences: BackendUserPreferences = {
+ theme: Theme.LIGHT,
+ clusterPreferences: {
+ pinnedResources: ['resource1', 'resource2'],
+ },
+ };
+
+ const actualUserPreferences: UserPreferences = {
+ theme: Theme.LIGHT,
+ clusterPreferences: {
+ pinnedResources: { resourceIds: ['resource1', 'resource2'] },
+ },
+ };
+
+ // when we grab the user preferences from the local storage, we check if it is in the old format
+ expect(isBackendUserPreferences(oldBackendPreferences)).toBe(true);
+ expect(isBackendUserPreferences(actualUserPreferences)).toBe(false);
+
+ // and convert it to the new format if it is
+ const newPreferences = convertBackendUserPreferences(oldBackendPreferences);
+
+ expect(newPreferences.clusterPreferences.pinnedResources.resourceIds).toEqual(
+ oldBackendPreferences.clusterPreferences.pinnedResources
+ );
+});
+
+test('should convert the user preferences back to the old format when updating', () => {
+ // the backend still expects the old format when updating user preferences
+
+ const actualUserPreferences: UserPreferences = {
+ theme: Theme.LIGHT,
+ clusterPreferences: {
+ pinnedResources: { resourceIds: ['resource1', 'resource2'] },
+ },
+ };
+
+ const convertedPreferences = convertUserPreferences(actualUserPreferences);
+
+ expect(convertedPreferences.clusterPreferences.pinnedResources).toEqual(
+ actualUserPreferences.clusterPreferences.pinnedResources.resourceIds
+ );
+});
diff --git a/web/packages/teleport/src/services/userPreferences/userPreferences.ts b/web/packages/teleport/src/services/userPreferences/userPreferences.ts
index 2c4faa5654bbb..dcfb0cf9bb3c7 100644
--- a/web/packages/teleport/src/services/userPreferences/userPreferences.ts
+++ b/web/packages/teleport/src/services/userPreferences/userPreferences.ts
@@ -16,40 +16,63 @@
* along with this program. If not, see .
*/
-import * as unifiedResourcePreferences from 'shared/services/unifiedResourcePreferences';
+import {
+ DefaultTab,
+ LabelsViewMode,
+ UnifiedResourcePreferences,
+ ViewMode,
+} from 'gen-proto-ts/teleport/userpreferences/v1/unified_resource_preferences_pb';
+
+import {
+ AssistUserPreferences,
+ AssistViewMode,
+} from 'gen-proto-ts/teleport/userpreferences/v1/assist_pb';
+
+import { UserPreferences } from 'gen-proto-ts/teleport/userpreferences/v1/userpreferences_pb';
+
+import { ClusterUserPreferences } from 'gen-proto-ts/teleport/userpreferences/v1/cluster_preferences_pb';
+
+import { Theme } from 'gen-proto-ts/teleport/userpreferences/v1/theme_pb';
+
+import { OnboardUserPreferences } from 'gen-proto-ts/teleport/userpreferences/v1/onboard_pb';
import cfg from 'teleport/config';
import api from 'teleport/services/api';
-import { ViewMode } from 'teleport/Assist/types';
import { KeysEnum } from '../storageService';
-import { ThemePreference } from './types';
+interface BackendClusterUserPreferences {
+ pinnedResources?: string[];
+}
-import type {
- GetUserPreferencesResponse,
- UserClusterPreferences,
- UserPreferences,
-} from 'teleport/services/userPreferences/types';
+export interface BackendUserPreferences {
+ assist?: AssistUserPreferences;
+ theme: Theme;
+ onboard?: OnboardUserPreferences;
+ clusterPreferences?: BackendClusterUserPreferences;
+ unifiedResourcePreferences?: UnifiedResourcePreferences;
+}
-export async function getUserPreferences() {
- const res: GetUserPreferencesResponse = await api.get(
+export async function getUserPreferences(): Promise {
+ const res: BackendUserPreferences = await api.get(
cfg.api.userPreferencesPath
);
- return res;
+ return convertBackendUserPreferences(res);
}
-export async function getUserClusterPreferences(clusterId: string) {
+export async function getUserClusterPreferences(
+ clusterId: string
+): Promise {
return await api
.get(cfg.getUserClusterPreferencesUrl(clusterId))
- .then(res => {
+ .then((res: BackendClusterUserPreferences) => {
// TODO (avatus) DELETE IN 16
// this item is used to disabled the pinned resources button if they
// haven't upgraded to 14.1.0 yet. Anything lower than 14 doesn't matter
// because the unified resource view isn't enabled so pinning isn't there either
localStorage.removeItem(KeysEnum.PINNED_RESOURCES_NOT_SUPPORTED);
- return res;
+ return convertBackendClusterUserPreferences(res);
})
.catch(res => {
if (res.response?.status === 403 || res.response?.status === 404) {
@@ -68,18 +91,24 @@ export function updateUserClusterPreferences(
clusterId: string,
preferences: UserPreferences
) {
- return api.put(cfg.getUserClusterPreferencesUrl(clusterId), preferences);
+ return api.put(
+ cfg.getUserClusterPreferencesUrl(clusterId),
+ convertUserPreferences(preferences)
+ );
}
export function updateUserPreferences(preferences: Partial) {
- return api.put(cfg.api.userPreferencesPath, preferences);
+ return api.put(
+ cfg.api.userPreferencesPath,
+ convertUserPreferences(preferences as UserPreferences)
+ );
}
export function makeDefaultUserPreferences(): UserPreferences {
return {
- theme: ThemePreference.Light,
+ theme: Theme.LIGHT,
assist: {
- viewMode: ViewMode.Docked,
+ viewMode: AssistViewMode.DOCKED,
preferredLogins: [],
},
onboard: {
@@ -92,17 +121,61 @@ export function makeDefaultUserPreferences(): UserPreferences {
},
},
unifiedResourcePreferences: {
- defaultTab: unifiedResourcePreferences.DefaultTab.DEFAULT_TAB_ALL,
- viewMode: unifiedResourcePreferences.ViewMode.VIEW_MODE_CARD,
- labelsViewMode:
- unifiedResourcePreferences.LabelsViewMode.LABELS_VIEW_MODE_COLLAPSED,
+ defaultTab: DefaultTab.ALL,
+ viewMode: ViewMode.CARD,
+ labelsViewMode: LabelsViewMode.COLLAPSED,
},
clusterPreferences: makeDefaultUserClusterPreferences(),
};
}
-export function makeDefaultUserClusterPreferences(): UserClusterPreferences {
+export function makeDefaultUserClusterPreferences(): ClusterUserPreferences {
return {
- pinnedResources: [],
+ pinnedResources: {
+ resourceIds: [],
+ },
};
}
+
+export function convertUserPreferences(
+ preferences: UserPreferences
+): BackendUserPreferences {
+ return {
+ ...preferences,
+ clusterPreferences: {
+ ...preferences.clusterPreferences,
+ pinnedResources:
+ preferences.clusterPreferences?.pinnedResources?.resourceIds ?? [],
+ },
+ };
+}
+
+export function convertBackendUserPreferences(
+ preferences: BackendUserPreferences
+): UserPreferences {
+ return {
+ ...preferences,
+ clusterPreferences: convertBackendClusterUserPreferences(
+ preferences.clusterPreferences
+ ),
+ };
+}
+
+export function convertBackendClusterUserPreferences(
+ clusterPreferences: BackendClusterUserPreferences
+): ClusterUserPreferences {
+ return {
+ ...clusterPreferences,
+ pinnedResources: {
+ resourceIds: clusterPreferences?.pinnedResources ?? [],
+ },
+ };
+}
+
+export function isBackendUserPreferences(
+ preferences: UserPreferences | BackendUserPreferences
+): preferences is BackendUserPreferences {
+ return Array.isArray(
+ (preferences as BackendUserPreferences).clusterPreferences?.pinnedResources
+ );
+}
diff --git a/web/packages/teleterm/babel.config.js b/web/packages/teleterm/babel.config.js
index 69365ad001626..7ae725ec5ca2f 100644
--- a/web/packages/teleterm/babel.config.js
+++ b/web/packages/teleterm/babel.config.js
@@ -1,11 +1,4 @@
const baseCfg = require('@gravitational/build/.babelrc');
-
-baseCfg.presets = [
- ['@babel/preset-env', { targets: { node: 'current' } }],
- ['@babel/preset-react', { runtime: 'automatic' }],
- '@babel/preset-typescript',
-];
-
module.exports = function (api) {
api.cache(true);
return baseCfg;
diff --git a/web/packages/teleterm/csp.ts b/web/packages/teleterm/csp.ts
new file mode 100644
index 0000000000000..e2ad7a5634179
--- /dev/null
+++ b/web/packages/teleterm/csp.ts
@@ -0,0 +1,42 @@
+/**
+ * Teleport
+ * Copyright (C) 2023 Gravitational, Inc.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see .
+ */
+
+export function getConnectCsp(development: boolean) {
+ // feedbackAddress needs to be kept in sync with the same property in staticConfig.ts.
+ const feedbackAddress = development
+ ? 'https://kcwm2is93l.execute-api.us-west-2.amazonaws.com/prod'
+ : 'https://usage.teleport.dev';
+
+ let csp = `
+default-src 'self';
+connect-src 'self' ${feedbackAddress};
+style-src 'self' 'unsafe-inline';
+img-src 'self' data: blob:;
+object-src 'none';
+font-src 'self' data:;
+`
+ .replaceAll('\n', ' ')
+ .trim();
+
+ if (development) {
+ // Required to make source maps work in dev mode.
+ csp += " script-src 'self' 'unsafe-eval' 'unsafe-inline';";
+ }
+
+ return csp;
+}
diff --git a/web/packages/teleterm/electron-builder-config.js b/web/packages/teleterm/electron-builder-config.js
index da151c2567f8f..74ac22cddfdf1 100644
--- a/web/packages/teleterm/electron-builder-config.js
+++ b/web/packages/teleterm/electron-builder-config.js
@@ -71,7 +71,7 @@ module.exports = {
}
},
files: [
- 'build/app/dist',
+ 'build/app',
// node-pty creates some files that differ across architecture builds causing
// the error "can't reconcile the non-macho files" as they cant be combined
// with lipo for a universal build. They aren't needed so skip them.
diff --git a/web/packages/teleterm/electron.vite.config.mts b/web/packages/teleterm/electron.vite.config.mts
new file mode 100644
index 0000000000000..e83c461e79bea
--- /dev/null
+++ b/web/packages/teleterm/electron.vite.config.mts
@@ -0,0 +1,170 @@
+/**
+ * Teleport
+ * Copyright (C) 2023 Gravitational, Inc.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see .
+ */
+
+import { resolve } from 'path';
+
+import { existsSync, readFileSync } from 'fs';
+
+import react from '@vitejs/plugin-react-swc';
+import tsconfigPaths from 'vite-tsconfig-paths';
+import { defineConfig, externalizeDepsPlugin, UserConfig } from 'electron-vite';
+
+import { cspPlugin } from '../build/vite/csp';
+
+import { getStyledComponentsConfig } from '../build/vite/styled';
+
+import { getConnectCsp } from './csp';
+
+const rootDirectory = resolve(__dirname, '../../..');
+const outputDirectory = resolve(__dirname, 'build', 'app');
+
+// these dependencies don't play well unless they're externalized
+// if Vite complains about a dependency, add it here
+const externalizeDeps = ['strip-ansi', 'ansi-regex', 'd3-color'];
+
+const config = defineConfig(env => {
+ const tsConfigPathsPlugin = tsconfigPaths({
+ projects: [resolve(rootDirectory, 'tsconfig.json')],
+ });
+
+ const commonPlugins = [
+ externalizeDepsPlugin({ exclude: externalizeDeps }),
+ tsConfigPathsPlugin,
+ ];
+
+ const config: UserConfig = {
+ main: {
+ build: {
+ outDir: resolve(outputDirectory, 'main'),
+ rollupOptions: {
+ input: {
+ index: resolve(__dirname, 'src/main.ts'),
+ sharedProcess: resolve(
+ __dirname,
+ 'src/sharedProcess/sharedProcess.ts'
+ ),
+ agentCleanupDaemon: resolve(
+ __dirname,
+ 'src/agentCleanupDaemon/agentCleanupDaemon.js'
+ ),
+ },
+ output: {
+ manualChunks,
+ },
+ },
+ },
+ plugins: commonPlugins,
+ define: {
+ // It's not common to pre-process Node code with NODE_ENV, but this is what our Webpack
+ // config used to do, so for compatibility purposes we kept the Vite config this way.
+ //
+ // If we were to get rid of this, we'd somehow need to set NODE_ENV when the packaged app
+ // gets started.
+ 'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV),
+ },
+ },
+ preload: {
+ build: {
+ outDir: resolve(outputDirectory, 'preload'),
+ rollupOptions: {
+ input: {
+ index: resolve(__dirname, 'src/preload.ts'),
+ },
+ output: {
+ manualChunks,
+ },
+ },
+ },
+ plugins: commonPlugins,
+ define: {
+ // Preload is also mean to be run by Node, see the comment for define under main.
+ 'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV),
+ },
+ },
+ renderer: {
+ root: '.',
+ build: {
+ outDir: resolve(outputDirectory, 'renderer'),
+ rollupOptions: {
+ input: {
+ index: resolve(__dirname, 'index.html'),
+ },
+ },
+ },
+ server: {
+ host: '0.0.0.0',
+ port: 8080,
+ fs: {
+ allow: [rootDirectory, '.'],
+ },
+ },
+ plugins: [
+ react({
+ plugins: [
+ [
+ '@swc/plugin-styled-components',
+ getStyledComponentsConfig(env.mode),
+ ],
+ ],
+ }),
+ cspPlugin(getConnectCsp(env.mode === 'development')),
+ tsConfigPathsPlugin,
+ ],
+ define: {
+ 'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV),
+ },
+ },
+ };
+
+ if (env.mode === 'development') {
+ if (process.env.VITE_HTTPS_KEY && process.env.VITE_HTTPS_CERT) {
+ config.renderer.server.https = {
+ key: readFileSync(process.env.VITE_HTTPS_KEY),
+ cert: readFileSync(process.env.VITE_HTTPS_CERT),
+ };
+ } else {
+ const certsDirectory = resolve(rootDirectory, 'web/certs');
+
+ if (!existsSync(certsDirectory)) {
+ throw new Error(
+ 'Could not find SSL certificates. Please follow web/README.md to generate certificates.'
+ );
+ }
+
+ const keyPath = resolve(certsDirectory, 'server.key');
+ const certPath = resolve(certsDirectory, 'server.crt');
+
+ config.renderer.server.https = {
+ key: readFileSync(keyPath),
+ cert: readFileSync(certPath),
+ };
+ }
+ }
+
+ return config;
+});
+
+export { config as default };
+
+function manualChunks(id: string) {
+ for (const dep of externalizeDeps) {
+ if (id.includes(dep)) {
+ return dep;
+ }
+ }
+}
diff --git a/web/packages/teleterm/index.html b/web/packages/teleterm/index.html
new file mode 100644
index 0000000000000..6768880201364
--- /dev/null
+++ b/web/packages/teleterm/index.html
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/web/packages/teleterm/package.json b/web/packages/teleterm/package.json
index ed837faa7b997..4eac15f3f8823 100644
--- a/web/packages/teleterm/package.json
+++ b/web/packages/teleterm/package.json
@@ -2,7 +2,7 @@
"name": "@gravitational/teleterm",
"version": "1.0.0-dev",
"description": "Teleport Connect",
- "main": "build/app/dist/main/main.js",
+ "main": "build/app/main/index.js",
"author": {
"name": "Gravitational, Inc.",
"email": "support@goteleport.com",
@@ -10,15 +10,13 @@
},
"license": "Apache-2.0",
"scripts": {
- "start": "yarn build-native-deps && webpack serve --config webpack.renderer.dev.config.js --progress",
- "start-main": "webpack build --config webpack.main.config.js --mode=development --progress --watch",
+ "start": "yarn build-native-deps && yarn start-skip-native-deps",
+ "start-skip-native-deps": "electron-vite dev",
"start-electron": "electron build/app/dist/main/main.js",
- "build": "yarn build-main && yarn build-renderer",
- "build-main": "webpack build --config webpack.main.config.js --progress --mode=production",
- "build-renderer": "webpack build --config webpack.renderer.prod.config.js --progress",
+ "build": "electron-vite build",
"build-native-deps": "electron-builder install-app-deps",
"package": "electron-builder build --config electron-builder-config.js --publish never -c.extraMetadata.name=teleport-connect",
- "generate-grpc-shared": "npx -y --target_arch=x64 --package=grpc_tools_node_protoc_ts@5.3.2 --package=grpc-tools@1.12.4 -- grpc_tools_node_protoc -I=src/sharedProcess/api/proto --ts_out=service=grpc-node,mode=grpc-js:src/sharedProcess/api/protogen --grpc_out=grpc_js:src/sharedProcess/api/protogen --js_out=import_style=commonjs,binary:src/sharedProcess/api/protogen src/sharedProcess/api/proto/*.proto"
+ "generate-grpc-shared": "npx -y --target_arch=x64 --package=@protobuf-ts/plugin@2.9.3 -- protoc -I=src/sharedProcess/api/proto --ts_opt long_type_number,eslint_disable,add_pb_suffix,client_grpc1,server_grpc1,ts_nocheck --ts_out=src/sharedProcess/api/protogen src/sharedProcess/api/proto/*.proto"
},
"repository": {
"type": "git",
@@ -28,35 +26,38 @@
"private": true,
"homepage": "https://goteleport.com",
"dependencies": {
- "@types/tar-fs": "^2.0.1",
+ "@grpc/grpc-js": "1.8.8",
+ "node-forge": "^1.3.1",
"node-pty": "1.1.0-beta5",
+ "split2": "4.1.0",
"strip-ansi": "^7.1.0",
- "tar-fs": "^3.0.3"
+ "tar-fs": "^3.0.3",
+ "winston": "^3.3.3"
},
"devDependencies": {
"@gravitational/build": "^1.0.0",
"@gravitational/design": "1.0.0",
"@gravitational/shared": "1.0.0",
- "@grpc/grpc-js": "1.8.8",
+ "@protobuf-ts/runtime": "^2.9.3",
+ "@protobuf-ts/runtime-rpc": "^2.9.3",
"@types/google-protobuf": "^3.10.0",
"@types/node-forge": "^1.0.4",
+ "@types/tar-fs": "^2.0.1",
"@types/whatwg-url": "^11.0.1",
"clean-webpack-plugin": "4.0.0",
- "cross-env": "5.0.5",
"electron": "28.1.1",
"electron-notarize": "^1.2.1",
+ "electron-vite": "^2.0.0",
"eslint-import-resolver-webpack": "0.13.2",
"eslint-loader": "3.0.3",
- "google-protobuf": "^3.20.1",
+ "google-protobuf": "^3.21.2",
"immer": "^9.0.7",
"jest-canvas-mock": "^2.3.1",
- "node-forge": "^1.3.1",
"react-dnd": "^14.0.4",
"react-dnd-html5-backend": "^14.0.2",
- "split2": "4.1.0",
"ts-loader": "^9.4.2",
+ "vite-plugin-commonjs": "^0.10.1",
"whatwg-url": "^13.0.0",
- "winston": "^3.3.3",
"xterm": "^5.3.0",
"xterm-addon-fit": "^0.8.0",
"zod": "^3.22.3",
diff --git a/web/packages/teleterm/src/helpers.ts b/web/packages/teleterm/src/helpers.ts
new file mode 100644
index 0000000000000..74d117dbcff96
--- /dev/null
+++ b/web/packages/teleterm/src/helpers.ts
@@ -0,0 +1,198 @@
+/**
+ * Teleport
+ * Copyright (C) 2023 Gravitational, Inc.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see .
+ */
+
+// ExcludesFalse is a method that can be used instead of [].filter(Boolean)
+// this removes the false values from the array type
+import { PaginatedResource } from 'gen-proto-ts/teleport/lib/teleterm/v1/service_pb';
+import { Server } from 'gen-proto-ts/teleport/lib/teleterm/v1/server_pb';
+import { Database } from 'gen-proto-ts/teleport/lib/teleterm/v1/database_pb';
+import { App } from 'gen-proto-ts/teleport/lib/teleterm/v1/app_pb';
+import { Kube } from 'gen-proto-ts/teleport/lib/teleterm/v1/kube_pb';
+
+import * as prehog from 'gen-proto-ts/prehog/v1alpha/connect_pb';
+
+import {
+ PtyClientEvent,
+ PtyEventData,
+ PtyEventExit,
+ PtyEventResize,
+ PtyEventStart,
+ PtyEventStartError,
+ PtyServerEvent,
+} from 'teleterm/sharedProcess/api/protogen/ptyHostService_pb';
+
+export function resourceOneOfIsServer(
+ resource: PaginatedResource['resource']
+): resource is {
+ oneofKind: 'server';
+ server: Server;
+} {
+ return resource.oneofKind === 'server';
+}
+
+export function resourceOneOfIsDatabase(
+ resource: PaginatedResource['resource']
+): resource is {
+ oneofKind: 'database';
+ database: Database;
+} {
+ return resource.oneofKind === 'database';
+}
+
+export function resourceOneOfIsApp(
+ resource: PaginatedResource['resource']
+): resource is {
+ oneofKind: 'app';
+ app: App;
+} {
+ return resource.oneofKind === 'app';
+}
+
+export function resourceOneOfIsKube(
+ resource: PaginatedResource['resource']
+): resource is {
+ oneofKind: 'kube';
+ kube: Kube;
+} {
+ return resource.oneofKind === 'kube';
+}
+
+export function ptyEventOneOfIsStart(
+ event: PtyClientEvent['event'] | PtyServerEvent['event']
+): event is {
+ oneofKind: 'start';
+ start: PtyEventStart;
+} {
+ return event.oneofKind === 'start';
+}
+
+export function ptyEventOneOfIsData(
+ event: PtyClientEvent['event'] | PtyServerEvent['event']
+): event is {
+ oneofKind: 'data';
+ data: PtyEventData;
+} {
+ return event.oneofKind === 'data';
+}
+
+export function ptyEventOneOfIsResize(
+ event: PtyClientEvent['event'] | PtyServerEvent['event']
+): event is {
+ oneofKind: 'resize';
+ resize: PtyEventResize;
+} {
+ return event.oneofKind === 'resize';
+}
+
+export function ptyEventOneOfIsExit(
+ event: PtyClientEvent['event'] | PtyServerEvent['event']
+): event is {
+ oneofKind: 'exit';
+ exit: PtyEventExit;
+} {
+ return event.oneofKind === 'exit';
+}
+export function ptyEventOneOfIsStartError(
+ event: PtyClientEvent['event'] | PtyServerEvent['event']
+): event is {
+ oneofKind: 'startError';
+ startError: PtyEventStartError;
+} {
+ return event.oneofKind === 'startError';
+}
+
+export function connectEventOneOfIsClusterLogin(
+ event: prehog.SubmitConnectEventRequest['event']
+): event is {
+ oneofKind: 'clusterLogin';
+ clusterLogin: prehog.ConnectClusterLoginEvent;
+} {
+ return event.oneofKind === 'clusterLogin';
+}
+
+export function connectEventOneOfIsProtocolUse(
+ event: prehog.SubmitConnectEventRequest['event']
+): event is {
+ oneofKind: 'protocolUse';
+ protocolUse: prehog.ConnectProtocolUseEvent;
+} {
+ return event.oneofKind === 'protocolUse';
+}
+
+export function connectEventOneOfIsAccessRequestCreate(
+ event: prehog.SubmitConnectEventRequest['event']
+): event is {
+ oneofKind: 'accessRequestCreate';
+ accessRequestCreate: prehog.ConnectAccessRequestCreateEvent;
+} {
+ return event.oneofKind === 'accessRequestCreate';
+}
+
+export function connectEventOneOfIsAccessRequestReview(
+ event: prehog.SubmitConnectEventRequest['event']
+): event is {
+ oneofKind: 'accessRequestReview';
+ accessRequestReview: prehog.ConnectAccessRequestReviewEvent;
+} {
+ return event.oneofKind === 'accessRequestReview';
+}
+
+export function connectEventOneOfIsAccessRequestAssumeRole(
+ event: prehog.SubmitConnectEventRequest['event']
+): event is {
+ oneofKind: 'accessRequestAssumeRole';
+ accessRequestAssumeRole: prehog.ConnectAccessRequestAssumeRoleEvent;
+} {
+ return event.oneofKind === 'accessRequestAssumeRole';
+}
+
+export function connectEventOneOfIsFileTransferRun(
+ event: prehog.SubmitConnectEventRequest['event']
+): event is {
+ oneofKind: 'fileTransferRun';
+ fileTransferRun: prehog.ConnectFileTransferRunEvent;
+} {
+ return event.oneofKind === 'fileTransferRun';
+}
+
+export function connectEventOneOfIsUserJobRoleUpdate(
+ event: prehog.SubmitConnectEventRequest['event']
+): event is {
+ oneofKind: 'userJobRoleUpdate';
+ userJobRoleUpdate: prehog.ConnectUserJobRoleUpdateEvent;
+} {
+ return event.oneofKind === 'userJobRoleUpdate';
+}
+
+export function connectEventOneOfIsConnectMyComputerSetup(
+ event: prehog.SubmitConnectEventRequest['event']
+): event is {
+ oneofKind: 'connectMyComputerSetup';
+ connectMyComputerSetup: prehog.ConnectConnectMyComputerSetup;
+} {
+ return event.oneofKind === 'connectMyComputerSetup';
+}
+
+export function connectEventOneOfIsConnectMyComputerAgentStart(
+ event: prehog.SubmitConnectEventRequest['event']
+): event is {
+ oneofKind: 'connectMyComputerAgentStart';
+ connectMyComputerAgentStart: prehog.ConnectConnectMyComputerAgentStart;
+} {
+ return event.oneofKind === 'connectMyComputerAgentStart';
+}
diff --git a/web/packages/teleterm/src/main.ts b/web/packages/teleterm/src/main.ts
index 54ea4d2c7027a..c3c69bc00f04d 100644
--- a/web/packages/teleterm/src/main.ts
+++ b/web/packages/teleterm/src/main.ts
@@ -91,6 +91,7 @@ function initializeApp(): void {
windowsManager,
});
+ //TODO(gzdunek): Make sure this is not needed after migrating to Vite.
app.on(
'certificate-error',
(event, webContents, url, error, certificate, callback) => {
@@ -201,6 +202,10 @@ function initializeApp(): void {
// https://github.com/electron/electron/blob/v17.2.0/docs/tutorial/security.md#12-verify-webview-options-before-creation
app.on('web-contents-created', (_, contents) => {
contents.on('will-navigate', (event, navigationUrl) => {
+ // Allow reloading the renderer app in dev mode.
+ if (settings.dev && new URL(navigationUrl).host === 'localhost:8080') {
+ return;
+ }
logger.warn(`Navigation to ${navigationUrl} blocked by 'will-navigate'`);
event.preventDefault();
});
diff --git a/web/packages/teleterm/src/mainProcess/runtimeSettings.ts b/web/packages/teleterm/src/mainProcess/runtimeSettings.ts
index 6093e1d99dd7b..f757bf22353c9 100644
--- a/web/packages/teleterm/src/mainProcess/runtimeSettings.ts
+++ b/web/packages/teleterm/src/mainProcess/runtimeSettings.ts
@@ -36,13 +36,13 @@ const RESOURCES_PATH = app.isPackaged
: path.join(__dirname, '../../../../');
const TSH_BIN_ENV_VAR = 'CONNECT_TSH_BIN_PATH';
-// __dirname of this file in dev mode is webapps/packages/teleterm/build/app/dist/main
-// We default to webapps/../teleport/build/tsh.
+// __dirname of this file in dev mode is teleport/web/packages/teleterm/build/app/main
+// We default to teleport/build/tsh.
// prettier-ignore
const TSH_BIN_DEFAULT_PATH_FOR_DEV = path.resolve(
__dirname,
- '..', '..', '..', '..', '..', '..', '..', '..',
- 'teleport', 'build', 'tsh',
+ '..', '..', '..', '..', '..', '..',
+ 'build', 'tsh',
);
// Refer to the docs of RuntimeSettings type for an explanation behind dev, debug and insecure.
diff --git a/web/packages/teleterm/src/mainProcess/windowsManager.ts b/web/packages/teleterm/src/mainProcess/windowsManager.ts
index 720efecf79c89..01281ba77397f 100644
--- a/web/packages/teleterm/src/mainProcess/windowsManager.ts
+++ b/web/packages/teleterm/src/mainProcess/windowsManager.ts
@@ -121,7 +121,7 @@ export class WindowsManager {
contextIsolation: true,
nodeIntegration: false,
sandbox: false,
- preload: path.join(__dirname, 'preload.js'),
+ preload: path.join(__dirname, '../preload/index.js'),
},
});
diff --git a/web/packages/teleterm/src/services/pty/ptyHost/ptyEventsStreamHandler.ts b/web/packages/teleterm/src/services/pty/ptyHost/ptyEventsStreamHandler.ts
index b7b631880c243..ef0fdf9a07c83 100644
--- a/web/packages/teleterm/src/services/pty/ptyHost/ptyEventsStreamHandler.ts
+++ b/web/packages/teleterm/src/services/pty/ptyHost/ptyEventsStreamHandler.ts
@@ -27,6 +27,11 @@ import {
PtyEventStart,
PtyServerEvent,
} from 'teleterm/sharedProcess/ptyHost';
+import {
+ ptyEventOneOfIsData,
+ ptyEventOneOfIsExit,
+ ptyEventOneOfIsStartError,
+} from 'teleterm/helpers';
export class PtyEventsStreamHandler {
private logger: Logger;
@@ -46,23 +51,34 @@ export class PtyEventsStreamHandler {
this.logger.info('Start');
this.writeOrThrow(
- new PtyClientEvent().setStart(
- new PtyEventStart().setColumns(columns).setRows(rows)
- )
+ PtyClientEvent.create({
+ event: {
+ oneofKind: 'start',
+ start: PtyEventStart.create({ columns, rows }),
+ },
+ })
);
}
write(data: string): void {
this.writeOrThrow(
- new PtyClientEvent().setData(new PtyEventData().setMessage(data))
+ PtyClientEvent.create({
+ event: {
+ oneofKind: 'data',
+ data: PtyEventData.create({ message: data }),
+ },
+ })
);
}
resize(columns: number, rows: number): void {
this.writeOrThrow(
- new PtyClientEvent().setResize(
- new PtyEventResize().setColumns(columns).setRows(rows)
- )
+ PtyClientEvent.create({
+ event: {
+ oneofKind: 'resize',
+ resize: PtyEventResize.create({ columns, rows }),
+ },
+ })
);
}
@@ -80,7 +96,7 @@ export class PtyEventsStreamHandler {
onOpen(callback: () => void): RemoveListenerFunction {
return this.addDataListenerAndReturnRemovalFunction(
(event: PtyServerEvent) => {
- if (event.hasOpen()) {
+ if (event.event.oneofKind === 'open') {
callback();
}
}
@@ -90,8 +106,8 @@ export class PtyEventsStreamHandler {
onData(callback: (data: string) => void): RemoveListenerFunction {
return this.addDataListenerAndReturnRemovalFunction(
(event: PtyServerEvent) => {
- if (event.hasData()) {
- callback(event.getData().getMessage());
+ if (ptyEventOneOfIsData(event.event)) {
+ callback(event.event.data.message);
}
}
);
@@ -102,9 +118,9 @@ export class PtyEventsStreamHandler {
): RemoveListenerFunction {
return this.addDataListenerAndReturnRemovalFunction(
(event: PtyServerEvent) => {
- if (event.hasExit()) {
- this.logger.info('On exit', event.getExit().toObject());
- callback(event.getExit().toObject());
+ if (ptyEventOneOfIsExit(event.event)) {
+ this.logger.info('On exit', event.event.exit);
+ callback(event.event.exit);
}
}
);
@@ -113,12 +129,9 @@ export class PtyEventsStreamHandler {
onStartError(callback: (message: string) => void): RemoveListenerFunction {
return this.addDataListenerAndReturnRemovalFunction(
(event: PtyServerEvent) => {
- if (event.hasStartError()) {
- this.logger.info(
- 'On start error',
- event.getStartError().toObject().message
- );
- callback(event.getStartError().toObject().message);
+ if (ptyEventOneOfIsStartError(event.event)) {
+ this.logger.info('On start error', event.event.startError.message);
+ callback(event.event.startError.message);
}
}
);
diff --git a/web/packages/teleterm/src/services/pty/ptyHost/ptyHostClient.ts b/web/packages/teleterm/src/services/pty/ptyHost/ptyHostClient.ts
index 0964eb7ef8295..74c9dfd90fa29 100644
--- a/web/packages/teleterm/src/services/pty/ptyHost/ptyHostClient.ts
+++ b/web/packages/teleterm/src/services/pty/ptyHost/ptyHostClient.ts
@@ -17,7 +17,6 @@
*/
import { ChannelCredentials, Metadata } from '@grpc/grpc-js';
-import { Struct } from 'google-protobuf/google/protobuf/struct_pb';
import {
PtyHostClient as GrpcClient,
@@ -25,6 +24,8 @@ import {
PtyId,
} from 'teleterm/sharedProcess/ptyHost';
+import { Struct } from 'teleterm/sharedProcess/api/protogen/google/protobuf/struct_pb';
+
import { PtyHostClient } from '../types';
import { PtyEventsStreamHandler } from './ptyEventsStreamHandler';
@@ -36,16 +37,17 @@ export function createPtyHostClient(
const client = new GrpcClient(address, credentials);
return {
createPtyProcess(ptyOptions) {
- const request = new PtyCreate()
- .setArgsList(ptyOptions.args)
- .setPath(ptyOptions.path)
- .setEnv(Struct.fromJavaScript(ptyOptions.env));
+ const request = PtyCreate.create({
+ args: ptyOptions.args,
+ path: ptyOptions.path,
+ env: Struct.fromJson(ptyOptions.env),
+ });
if (ptyOptions.cwd) {
- request.setCwd(ptyOptions.cwd);
+ request.cwd = ptyOptions.cwd;
}
if (ptyOptions.initMessage) {
- request.setInitMessage(ptyOptions.initMessage);
+ request.initMessage = ptyOptions.initMessage;
}
return new Promise((resolve, reject) => {
@@ -53,18 +55,18 @@ export function createPtyHostClient(
if (error) {
reject(error);
} else {
- resolve(response.toObject().id);
+ resolve(response.id);
}
});
});
},
getCwd(ptyId) {
return new Promise((resolve, reject) => {
- client.getCwd(new PtyId().setId(ptyId), (error, response) => {
+ client.getCwd(PtyId.create({ id: ptyId }), (error, response) => {
if (error) {
reject(error);
} else {
- resolve(response.toObject().cwd);
+ resolve(response.cwd);
}
});
});
diff --git a/web/packages/teleterm/src/services/tshd/createClient.ts b/web/packages/teleterm/src/services/tshd/createClient.ts
index 9b3218a876bd0..92d0865a72fdc 100644
--- a/web/packages/teleterm/src/services/tshd/createClient.ts
+++ b/web/packages/teleterm/src/services/tshd/createClient.ts
@@ -17,31 +17,39 @@
*/
import grpc from '@grpc/grpc-js';
-import * as api from 'gen-proto-js/teleport/lib/teleterm/v1/service_pb';
-import { UserPreferences } from 'gen-proto-js/teleport/userpreferences/v1/userpreferences_pb';
+import * as api from 'gen-proto-ts/teleport/lib/teleterm/v1/service_pb';
+import { TerminalServiceClient } from 'gen-proto-ts/teleport/lib/teleterm/v1/service_pb.grpc-client';
+import { UserPreferences } from 'gen-proto-ts/teleport/userpreferences/v1/userpreferences_pb';
import {
ClusterUserPreferences,
PinnedResourcesUserPreferences,
-} from 'gen-proto-js/teleport/userpreferences/v1/cluster_preferences_pb';
-import { UnifiedResourcePreferences } from 'gen-proto-js/teleport/userpreferences/v1/unified_resource_preferences_pb';
-import { TerminalServiceClient } from 'gen-proto-js/teleport/lib/teleterm/v1/service_grpc_pb';
+} from 'gen-proto-ts/teleport/userpreferences/v1/cluster_preferences_pb';
+import { UnifiedResourcePreferences } from 'gen-proto-ts/teleport/userpreferences/v1/unified_resource_preferences_pb';
import {
AccessRequest,
ResourceID,
-} from 'gen-proto-js/teleport/lib/teleterm/v1/access_request_pb';
+} from 'gen-proto-ts/teleport/lib/teleterm/v1/access_request_pb';
import Logger from 'teleterm/logger';
import * as uri from 'teleterm/ui/uri';
+import {
+ resourceOneOfIsApp,
+ resourceOneOfIsDatabase,
+ resourceOneOfIsKube,
+ resourceOneOfIsServer,
+} from 'teleterm/helpers';
+
import { createFileTransferStream } from './createFileTransferStream';
import middleware, { withLogging } from './middleware';
import * as types from './types';
-import createAbortController from './createAbortController';
-import { mapUsageEvent } from './mapUsageEvent';
import {
ReportUsageEventRequest,
+ UnifiedResourceResponse,
UpdateHeadlessAuthenticationStateParams,
} from './types';
+import createAbortController from './createAbortController';
+import { mapUsageEvent } from './mapUsageEvent';
export function createTshdClient(
addr: string,
@@ -57,7 +65,7 @@ export function createTshdClient(
createAbortController,
async logout(clusterUri: uri.RootClusterUri) {
- const req = new api.LogoutRequest().setClusterUri(clusterUri);
+ const req = api.LogoutRequest.create({ clusterUri });
return new Promise((resolve, reject) => {
tshd.logout(req, err => {
if (err) {
@@ -78,16 +86,17 @@ export function createTshdClient(
startKey,
limit,
}: types.GetResourcesParams) {
- const req = new api.GetKubesRequest()
- .setClusterUri(clusterUri)
- .setSearchAsRoles(searchAsRoles)
- .setStartKey(startKey)
- .setSearch(search)
- .setQuery(query)
- .setLimit(limit);
+ const req = api.GetKubesRequest.create({
+ clusterUri,
+ searchAsRoles,
+ startKey,
+ search,
+ query,
+ limit,
+ });
if (sort) {
- req.setSortBy(`${sort.fieldName}:${sort.dir.toLowerCase()}`);
+ req.sortBy = `${sort.fieldName}:${sort.dir.toLowerCase()}`;
}
return new Promise((resolve, reject) => {
@@ -95,7 +104,7 @@ export function createTshdClient(
if (err) {
reject(err);
} else {
- resolve(response.toObject() as types.GetKubesResponse);
+ resolve(response as types.GetKubesResponse);
}
});
});
@@ -110,16 +119,17 @@ export function createTshdClient(
startKey,
limit,
}: types.GetResourcesParams) {
- const req = new api.GetAppsRequest()
- .setClusterUri(clusterUri)
- .setSearchAsRoles(searchAsRoles)
- .setStartKey(startKey)
- .setSearch(search)
- .setQuery(query)
- .setLimit(limit);
+ const req = api.GetAppsRequest.create({
+ clusterUri,
+ searchAsRoles,
+ startKey,
+ search,
+ query,
+ limit,
+ });
if (sort) {
- req.setSortBy(`${sort.fieldName}:${sort.dir.toLowerCase()}`);
+ req.sortBy = `${sort.fieldName}:${sort.dir.toLowerCase()}`;
}
return new Promise((resolve, reject) => {
@@ -127,33 +137,33 @@ export function createTshdClient(
if (err) {
reject(err);
} else {
- resolve(response.toObject() as types.GetAppsResponse);
+ resolve(response as types.GetAppsResponse);
}
});
});
},
async listGateways() {
- const req = new api.ListGatewaysRequest();
+ const req = api.ListGatewaysRequest.create();
return new Promise((resolve, reject) => {
tshd.listGateways(req, (err, response) => {
if (err) {
reject(err);
} else {
- resolve(response.toObject().gatewaysList as types.Gateway[]);
+ resolve(response.gateways as types.Gateway[]);
}
});
});
},
async listLeafClusters(clusterUri: uri.RootClusterUri) {
- const req = new api.ListLeafClustersRequest().setClusterUri(clusterUri);
+ const req = api.ListLeafClustersRequest.create({ clusterUri });
return new Promise((resolve, reject) => {
tshd.listLeafClusters(req, (err, response) => {
if (err) {
reject(err);
} else {
- resolve(response.toObject().clustersList as types.Cluster[]);
+ resolve(response.clusters as types.Cluster[]);
}
});
});
@@ -163,12 +173,12 @@ export function createTshdClient(
return withAbort(abortSignal, callRef => {
return new Promise((resolve, reject) => {
callRef.current = tshd.listRootClusters(
- new api.ListClustersRequest(),
+ api.ListClustersRequest.create(),
(err, response) => {
if (err) {
reject(err);
} else {
- resolve(response.toObject().clustersList as types.Cluster[]);
+ resolve(response.clusters as types.Cluster[]);
}
}
);
@@ -185,16 +195,17 @@ export function createTshdClient(
startKey,
limit,
}: types.GetResourcesParams) {
- const req = new api.GetDatabasesRequest()
- .setClusterUri(clusterUri)
- .setSearchAsRoles(searchAsRoles)
- .setStartKey(startKey)
- .setSearch(search)
- .setQuery(query)
- .setLimit(limit);
+ const req = api.GetDatabasesRequest.create({
+ clusterUri,
+ searchAsRoles,
+ startKey,
+ search,
+ query,
+ limit,
+ });
if (sort) {
- req.setSortBy(`${sort.fieldName}:${sort.dir.toLowerCase()}`);
+ req.sortBy = `${sort.fieldName}:${sort.dir.toLowerCase()}`;
}
return new Promise((resolve, reject) => {
@@ -202,48 +213,49 @@ export function createTshdClient(
if (err) {
reject(err);
} else {
- resolve(response.toObject() as types.GetDatabasesResponse);
+ resolve(response as types.GetDatabasesResponse);
}
});
});
},
async listDatabaseUsers(dbUri: uri.DatabaseUri) {
- const req = new api.ListDatabaseUsersRequest().setDbUri(dbUri);
+ const req = api.ListDatabaseUsersRequest.create({ dbUri });
return new Promise((resolve, reject) => {
tshd.listDatabaseUsers(req, (err, response) => {
if (err) {
reject(err);
} else {
- resolve(response.toObject().usersList);
+ resolve(response.users);
}
});
});
},
async getAccessRequest(clusterUri: uri.RootClusterUri, requestId: string) {
- const req = new api.GetAccessRequestRequest()
- .setClusterUri(clusterUri)
- .setAccessRequestId(requestId);
+ const req = api.GetAccessRequestRequest.create({
+ clusterUri,
+ accessRequestId: requestId,
+ });
return new Promise((resolve, reject) => {
tshd.getAccessRequest(req, (err, response) => {
if (err) {
reject(err);
} else {
- resolve(response.toObject().request);
+ resolve(response.request);
}
});
});
},
async getAccessRequests(clusterUri: uri.RootClusterUri) {
- const req = new api.GetAccessRequestsRequest().setClusterUri(clusterUri);
+ const req = api.GetAccessRequestsRequest.create({ clusterUri });
return new Promise((resolve, reject) => {
tshd.getAccessRequests(req, (err, response) => {
if (err) {
reject(err);
} else {
- resolve(response.toObject().requestsList);
+ resolve(response.requests);
}
});
});
@@ -258,16 +270,17 @@ export function createTshdClient(
startKey,
limit,
}: types.GetResourcesParams) {
- const req = new api.GetServersRequest()
- .setClusterUri(clusterUri)
- .setSearchAsRoles(searchAsRoles)
- .setStartKey(startKey)
- .setSearch(search)
- .setQuery(query)
- .setLimit(limit);
+ const req = api.GetServersRequest.create({
+ clusterUri,
+ searchAsRoles,
+ startKey,
+ search,
+ query,
+ limit,
+ });
if (sort) {
- req.setSortBy(`${sort.fieldName}:${sort.dir.toLowerCase()}`);
+ req.sortBy = `${sort.fieldName}:${sort.dir.toLowerCase()}`;
}
return new Promise((resolve, reject) => {
@@ -275,33 +288,32 @@ export function createTshdClient(
if (err) {
reject(err);
} else {
- resolve(response.toObject() as types.GetServersResponse);
+ resolve(response as types.GetServersResponse);
}
});
});
},
async createAccessRequest(params: types.CreateAccessRequestParams) {
- const req = new api.CreateAccessRequestRequest()
- .setRootClusterUri(params.rootClusterUri)
- .setSuggestedReviewersList(params.suggestedReviewers)
- .setRolesList(params.roles)
- .setResourceIdsList(
- params.resourceIds.map(({ id, clusterName, kind }) => {
- const resourceId = new ResourceID();
- resourceId.setName(id);
- resourceId.setClusterName(clusterName);
- resourceId.setKind(kind);
- return resourceId;
+ const req = api.CreateAccessRequestRequest.create({
+ rootClusterUri: params.rootClusterUri,
+ suggestedReviewers: params.suggestedReviewers,
+ roles: params.roles,
+ reason: params.reason,
+ resourceIds: params.resourceIds.map(({ id, clusterName, kind }) =>
+ ResourceID.create({
+ name: id,
+ clusterName,
+ kind,
})
- )
- .setReason(params.reason);
- return new Promise((resolve, reject) => {
+ ),
+ });
+ return new Promise((resolve, reject) => {
tshd.createAccessRequest(req, (err, response) => {
if (err) {
reject(err);
} else {
- resolve(response.toObject().request);
+ resolve(response.request);
}
});
});
@@ -311,9 +323,10 @@ export function createTshdClient(
clusterUri: uri.RootClusterUri,
requestId: string
) {
- const req = new api.DeleteAccessRequestRequest()
- .setRootClusterUri(clusterUri)
- .setAccessRequestId(requestId);
+ const req = api.DeleteAccessRequestRequest.create({
+ rootClusterUri: clusterUri,
+ accessRequestId: requestId,
+ });
return new Promise((resolve, reject) => {
tshd.deleteAccessRequest(req, err => {
if (err) {
@@ -330,10 +343,11 @@ export function createTshdClient(
requestIds: string[],
dropIds: string[]
) {
- const req = new api.AssumeRoleRequest()
- .setRootClusterUri(clusterUri)
- .setAccessRequestIdsList(requestIds)
- .setDropRequestIdsList(dropIds);
+ const req = api.AssumeRoleRequest.create({
+ rootClusterUri: clusterUri,
+ accessRequestIds: requestIds,
+ dropRequestIds: dropIds,
+ });
return new Promise((resolve, reject) => {
tshd.assumeRole(req, err => {
if (err) {
@@ -349,42 +363,42 @@ export function createTshdClient(
clusterUri: uri.RootClusterUri,
params: types.ReviewAccessRequestParams
) {
- const req = new api.ReviewAccessRequestRequest()
- .setRootClusterUri(clusterUri)
- .setAccessRequestId(params.id)
- .setState(params.state)
- .setReason(params.reason)
- .setRolesList(params.roles);
+ const req = api.ReviewAccessRequestRequest.create({
+ rootClusterUri: clusterUri,
+ accessRequestId: params.id,
+ state: params.state,
+ reason: params.reason,
+ roles: params.roles,
+ });
return new Promise((resolve, reject) => {
tshd.reviewAccessRequest(req, (err, response) => {
if (err) {
reject(err);
} else {
- resolve(response.toObject().request);
+ resolve(response.request);
}
});
});
},
async getRequestableRoles(params: types.GetRequestableRolesParams) {
- const req = new api.GetRequestableRolesRequest()
- .setClusterUri(params.rootClusterUri)
- .setResourceIdsList(
- params.resourceIds.map(({ id, clusterName, kind }) => {
- const resourceId = new ResourceID();
- resourceId.setName(id);
- resourceId.setClusterName(clusterName);
- resourceId.setKind(kind);
- return resourceId;
+ const req = api.GetRequestableRolesRequest.create({
+ clusterUri: params.rootClusterUri,
+ resourceIds: params.resourceIds!.map(({ id, clusterName, kind }) =>
+ ResourceID.create({
+ name: id,
+ clusterName,
+ kind,
})
- );
+ ),
+ });
return new Promise(
(resolve, reject) => {
tshd.getRequestableRoles(req, (err, response) => {
if (err) {
reject(err);
} else {
- resolve(response.toObject());
+ resolve(response);
}
});
}
@@ -392,26 +406,26 @@ export function createTshdClient(
},
async addRootCluster(addr: string) {
- const req = new api.AddClusterRequest().setName(addr);
+ const req = api.AddClusterRequest.create({ name: addr });
return new Promise((resolve, reject) => {
tshd.addCluster(req, (err, response) => {
if (err) {
reject(err);
} else {
- resolve(response.toObject() as types.Cluster);
+ resolve(response as types.Cluster);
}
});
});
},
async getCluster(uri: uri.RootClusterUri) {
- const req = new api.GetClusterRequest().setClusterUri(uri);
+ const req = api.GetClusterRequest.create({ clusterUri: uri });
return new Promise((resolve, reject) => {
tshd.getCluster(req, (err, response) => {
if (err) {
reject(err);
} else {
- resolve(response.toObject() as types.Cluster);
+ resolve(response as types.Cluster);
}
});
});
@@ -421,15 +435,19 @@ export function createTshdClient(
params: types.LoginLocalParams,
abortSignal?: types.TshAbortSignal
) {
- const localParams = new api.LoginRequest.LocalParams()
- .setToken(params.token)
- .setUser(params.username)
- .setPassword(params.password);
-
+ const localParams = api.LoginRequest_LocalParams.create({
+ token: params.token,
+ user: params.username,
+ password: params.password,
+ });
return withAbort(abortSignal, callRef => {
- const req = new api.LoginRequest().setClusterUri(params.clusterUri);
- req.setLocal(localParams);
-
+ const req = api.LoginRequest.create({
+ clusterUri: params.clusterUri,
+ params: {
+ oneofKind: 'local',
+ local: localParams,
+ },
+ });
return new Promise((resolve, reject) => {
callRef.current = tshd.login(req, err => {
if (err) {
@@ -446,14 +464,18 @@ export function createTshdClient(
params: types.LoginSsoParams,
abortSignal?: types.TshAbortSignal
) {
- const ssoParams = new api.LoginRequest.SsoParams()
- .setProviderName(params.providerName)
- .setProviderType(params.providerType);
-
+ const ssoParams = api.LoginRequest_SsoParams.create({
+ providerName: params.providerName,
+ providerType: params.providerType,
+ });
return withAbort(abortSignal, callRef => {
- const req = new api.LoginRequest().setClusterUri(params.clusterUri);
- req.setSso(ssoParams);
-
+ const req = api.LoginRequest.create({
+ clusterUri: params.clusterUri,
+ params: {
+ oneofKind: 'sso',
+ sso: ssoParams,
+ },
+ });
return new Promise((resolve, reject) => {
callRef.current = tshd.login(req, err => {
if (err) {
@@ -472,13 +494,15 @@ export function createTshdClient(
) {
return withAbort(abortSignal, callRef => {
const streamInitReq =
- new api.LoginPasswordlessRequest.LoginPasswordlessRequestInit().setClusterUri(
- params.clusterUri
- );
- const streamReq = new api.LoginPasswordlessRequest().setInit(
- streamInitReq
- );
-
+ api.LoginPasswordlessRequest_LoginPasswordlessRequestInit.create({
+ clusterUri: params.clusterUri,
+ });
+ const streamReq = api.LoginPasswordlessRequest.create({
+ request: {
+ oneofKind: 'init',
+ init: streamInitReq,
+ },
+ });
return new Promise((resolve, reject) => {
callRef.current = tshd.loginPasswordless();
const stream = callRef.current as grpc.ClientDuplexStream<
@@ -492,17 +516,20 @@ export function createTshdClient(
stream.write(streamReq);
stream.on('data', function (response: api.LoginPasswordlessResponse) {
- const req = response.toObject();
-
- switch (req.prompt) {
- case api.PasswordlessPrompt.PASSWORDLESS_PROMPT_PIN:
+ switch (response.prompt) {
+ case api.PasswordlessPrompt.PIN:
const pinResponse = pin => {
const pinRes =
- new api.LoginPasswordlessRequest.LoginPasswordlessPINResponse().setPin(
- pin
+ api.LoginPasswordlessRequest_LoginPasswordlessPINResponse.create(
+ { pin }
);
stream.write(
- new api.LoginPasswordlessRequest().setPin(pinRes)
+ api.LoginPasswordlessRequest.create({
+ request: {
+ oneofKind: 'pin',
+ pin: pinRes,
+ },
+ })
);
};
@@ -512,25 +539,30 @@ export function createTshdClient(
});
return;
- case api.PasswordlessPrompt.PASSWORDLESS_PROMPT_CREDENTIAL:
+ case api.PasswordlessPrompt.CREDENTIAL:
const credResponse = index => {
const credRes =
- new api.LoginPasswordlessRequest.LoginPasswordlessCredentialResponse().setIndex(
- index
+ api.LoginPasswordlessRequest_LoginPasswordlessCredentialResponse.create(
+ { index }
);
stream.write(
- new api.LoginPasswordlessRequest().setCredential(credRes)
+ api.LoginPasswordlessRequest.create({
+ request: {
+ oneofKind: 'credential',
+ credential: credRes,
+ },
+ })
);
};
params.onPromptCallback({
type: 'credential',
onUserResponse: credResponse,
- data: { credentials: req.credentialsList || [] },
+ data: { credentials: response.credentials || [] },
});
return;
- case api.PasswordlessPrompt.PASSWORDLESS_PROMPT_TAP:
+ case api.PasswordlessPrompt.TAP:
if (hasDeviceBeenTapped) {
params.onPromptCallback({ type: 'retap' });
} else {
@@ -540,7 +572,7 @@ export function createTshdClient(
return;
// Following cases should never happen but just in case?
- case api.PasswordlessPrompt.PASSWORDLESS_PROMPT_UNSPECIFIED:
+ case api.PasswordlessPrompt.UNSPECIFIED:
stream.cancel();
return reject(
new Error('no passwordless prompt was specified')
@@ -549,7 +581,9 @@ export function createTshdClient(
default:
stream.cancel();
return reject(
- new Error(`passwordless prompt '${req.prompt}' not supported`)
+ new Error(
+ `passwordless prompt '${response.prompt}' not supported`
+ )
);
}
});
@@ -566,37 +600,38 @@ export function createTshdClient(
},
async getAuthSettings(clusterUri: uri.RootClusterUri) {
- const req = new api.GetAuthSettingsRequest().setClusterUri(clusterUri);
+ const req = api.GetAuthSettingsRequest.create({ clusterUri });
return new Promise((resolve, reject) => {
tshd.getAuthSettings(req, (err, response) => {
if (err) {
reject(err);
} else {
- resolve(response.toObject());
+ resolve(response);
}
});
});
},
async createGateway(params: types.CreateGatewayParams) {
- const req = new api.CreateGatewayRequest()
- .setTargetUri(params.targetUri)
- .setTargetUser(params.user)
- .setLocalPort(params.port)
- .setTargetSubresourceName(params.subresource_name);
+ const req = api.CreateGatewayRequest.create({
+ targetUri: params.targetUri,
+ targetUser: params.user,
+ localPort: params.port,
+ targetSubresourceName: params.subresource_name,
+ });
return new Promise((resolve, reject) => {
tshd.createGateway(req, (err, response) => {
if (err) {
reject(err);
} else {
- resolve(response.toObject() as types.Gateway);
+ resolve(response as types.Gateway);
}
});
});
},
async removeCluster(clusterUri: uri.RootClusterUri) {
- const req = new api.RemoveClusterRequest().setClusterUri(clusterUri);
+ const req = api.RemoveClusterRequest.create({ clusterUri });
return new Promise((resolve, reject) => {
tshd.removeCluster(req, err => {
if (err) {
@@ -609,7 +644,7 @@ export function createTshdClient(
},
async removeGateway(gatewayUri: uri.GatewayUri) {
- const req = new api.RemoveGatewayRequest().setGatewayUri(gatewayUri);
+ const req = api.RemoveGatewayRequest.create({ gatewayUri });
return new Promise((resolve, reject) => {
tshd.removeGateway(req, err => {
if (err) {
@@ -625,30 +660,32 @@ export function createTshdClient(
gatewayUri: uri.GatewayUri,
targetSubresourceName = ''
) {
- const req = new api.SetGatewayTargetSubresourceNameRequest()
- .setGatewayUri(gatewayUri)
- .setTargetSubresourceName(targetSubresourceName);
+ const req = api.SetGatewayTargetSubresourceNameRequest.create({
+ gatewayUri,
+ targetSubresourceName,
+ });
return new Promise((resolve, reject) => {
tshd.setGatewayTargetSubresourceName(req, (err, response) => {
if (err) {
reject(err);
} else {
- resolve(response.toObject() as types.Gateway);
+ resolve(response as types.Gateway);
}
});
});
},
async setGatewayLocalPort(gatewayUri: uri.GatewayUri, localPort: string) {
- const req = new api.SetGatewayLocalPortRequest()
- .setGatewayUri(gatewayUri)
- .setLocalPort(localPort);
+ const req = api.SetGatewayLocalPortRequest.create({
+ gatewayUri,
+ localPort,
+ });
return new Promise((resolve, reject) => {
tshd.setGatewayLocalPort(req, (err, response) => {
if (err) {
reject(err);
} else {
- resolve(response.toObject() as types.Gateway);
+ resolve(response as types.Gateway);
}
});
});
@@ -658,20 +695,19 @@ export function createTshdClient(
options: types.FileTransferRequest,
abortSignal: types.TshAbortSignal
) {
- const req = new api.FileTransferRequest()
- .setServerUri(options.serverUri)
- .setLogin(options.login)
- .setSource(options.source)
- .setDestination(options.destination)
- .setDirection(options.direction);
+ const req = api.FileTransferRequest.create({
+ serverUri: options.serverUri,
+ login: options.login,
+ source: options.source,
+ destination: options.destination,
+ direction: options.direction,
+ });
return createFileTransferStream(tshd.transferFile(req), abortSignal);
},
updateTshdEventsServerAddress(address: string) {
- const req = new api.UpdateTshdEventsServerAddressRequest().setAddress(
- address
- );
+ const req = api.UpdateTshdEventsServerAddressRequest.create({ address });
return new Promise((resolve, reject) => {
tshd.updateTshdEventsServerAddress(req, err => {
if (err) {
@@ -697,10 +733,9 @@ export function createTshdClient(
},
createConnectMyComputerRole(rootClusterUri: uri.RootClusterUri) {
- const req =
- new api.CreateConnectMyComputerRoleRequest().setRootClusterUri(
- rootClusterUri
- );
+ const req = api.CreateConnectMyComputerRoleRequest.create({
+ rootClusterUri,
+ });
return new Promise(
(resolve, reject) => {
@@ -708,7 +743,7 @@ export function createTshdClient(
if (err) {
reject(err);
} else {
- resolve(response.toObject());
+ resolve(response);
}
});
}
@@ -719,14 +754,14 @@ export function createTshdClient(
return new Promise(
(resolve, reject) => {
tshd.createConnectMyComputerNodeToken(
- new api.CreateConnectMyComputerNodeTokenRequest().setRootClusterUri(
- uri
- ),
+ api.CreateConnectMyComputerNodeTokenRequest.create({
+ rootClusterUri: uri,
+ }),
(err, response) => {
if (err) {
reject(err);
} else {
- resolve(response.toObject());
+ resolve(response);
}
}
);
@@ -737,9 +772,10 @@ export function createTshdClient(
deleteConnectMyComputerToken(uri: uri.RootClusterUri, token: string) {
return new Promise((resolve, reject) => {
tshd.deleteConnectMyComputerToken(
- new api.DeleteConnectMyComputerTokenRequest()
- .setRootClusterUri(uri)
- .setToken(token),
+ api.DeleteConnectMyComputerTokenRequest.create({
+ rootClusterUri: uri,
+ token,
+ }),
err => {
if (err) {
reject(err);
@@ -755,10 +791,9 @@ export function createTshdClient(
uri: uri.RootClusterUri,
abortSignal: types.TshAbortSignal
) {
- const req =
- new api.WaitForConnectMyComputerNodeJoinRequest().setRootClusterUri(
- uri
- );
+ const req = api.WaitForConnectMyComputerNodeJoinRequest.create({
+ rootClusterUri: uri,
+ });
return withAbort(
abortSignal,
@@ -772,7 +807,7 @@ export function createTshdClient(
reject(err);
} else {
resolve(
- response.toObject() as types.WaitForConnectMyComputerNodeJoinResponse
+ response as types.WaitForConnectMyComputerNodeJoinResponse
);
}
}
@@ -785,7 +820,9 @@ export function createTshdClient(
deleteConnectMyComputerNode(uri: uri.RootClusterUri) {
return new Promise((resolve, reject) => {
tshd.deleteConnectMyComputerNode(
- new api.DeleteConnectMyComputerNodeRequest().setRootClusterUri(uri),
+ api.DeleteConnectMyComputerNodeRequest.create({
+ rootClusterUri: uri,
+ }),
err => {
if (err) {
reject(err);
@@ -800,12 +837,14 @@ export function createTshdClient(
getConnectMyComputerNodeName(uri: uri.RootClusterUri) {
return new Promise((resolve, reject) => {
tshd.getConnectMyComputerNodeName(
- new api.GetConnectMyComputerNodeNameRequest().setRootClusterUri(uri),
+ api.GetConnectMyComputerNodeNameRequest.create({
+ rootClusterUri: uri,
+ }),
(err, response) => {
if (err) {
reject(err);
} else {
- resolve(response.getName() as uri.ServerUri);
+ resolve(response.name as uri.ServerUri);
}
}
);
@@ -817,10 +856,11 @@ export function createTshdClient(
abortSignal?: types.TshAbortSignal
) {
return withAbort(abortSignal, callRef => {
- const req = new api.UpdateHeadlessAuthenticationStateRequest()
- .setRootClusterUri(params.rootClusterUri)
- .setHeadlessAuthenticationId(params.headlessAuthenticationId)
- .setState(params.state);
+ const req = api.UpdateHeadlessAuthenticationStateRequest.create({
+ rootClusterUri: params.rootClusterUri,
+ headlessAuthenticationId: params.headlessAuthenticationId,
+ state: params.state,
+ });
return new Promise((resolve, reject) => {
callRef.current = tshd.updateHeadlessAuthenticationState(req, err => {
@@ -839,21 +879,21 @@ export function createTshdClient(
abortSignal?: types.TshAbortSignal
) {
return withAbort(abortSignal, callRef => {
- const req = new api.ListUnifiedResourcesRequest()
- .setClusterUri(params.clusterUri)
- .setLimit(params.limit)
- .setKindsList(params.kindsList)
- .setStartKey(params.startKey)
- .setSearch(params.search)
- .setQuery(params.query)
- .setPinnedOnly(params.pinnedOnly)
- .setSearchAsRoles(params.searchAsRoles);
+ const req = api.ListUnifiedResourcesRequest.create({
+ clusterUri: params.clusterUri,
+ limit: params.limit,
+ kinds: params.kinds,
+ startKey: params.startKey,
+ search: params.search,
+ query: params.query,
+ pinnedOnly: params.pinnedOnly,
+ searchAsRoles: params.searchAsRoles,
+ });
if (params.sortBy) {
- req.setSortBy(
- new api.SortBy()
- .setField(params.sortBy.field)
- .setIsDesc(params.sortBy.isDesc)
- );
+ req.sortBy = api.SortBy.create({
+ field: params.sortBy.field,
+ isDesc: params.sortBy.isDesc,
+ });
}
return new Promise(
@@ -863,42 +903,42 @@ export function createTshdClient(
reject(err);
} else {
resolve({
- nextKey: res.getNextKey(),
- resources: res
- .getResourcesList()
+ nextKey: res.nextKey,
+ resources: res.resources
.map(p => {
- switch (p.getResourceCase()) {
- case api.PaginatedResource.ResourceCase.SERVER:
- return {
- kind: 'server' as const,
- resource: p.getServer().toObject() as types.Server,
- };
- case api.PaginatedResource.ResourceCase.DATABASE:
- return {
- kind: 'database' as const,
- resource: p
- .getDatabase()
- .toObject() as types.Database,
- };
- case api.PaginatedResource.ResourceCase.KUBE:
- return {
- kind: 'kube' as const,
- resource: p.getKube().toObject() as types.Kube,
- };
- case api.PaginatedResource.ResourceCase.APP:
- return {
- kind: 'app' as const,
- resource: p.getApp().toObject() as types.App,
- };
- default:
- logger.info(
- `Ignoring unsupported resource ${JSON.stringify(
- p.toObject()
- )}.`
- );
+ if (resourceOneOfIsServer(p.resource)) {
+ return {
+ kind: 'server',
+ resource: p.resource.server,
+ };
+ }
+
+ if (resourceOneOfIsDatabase(p.resource)) {
+ return {
+ kind: 'database',
+ resource: p.resource.database,
+ };
}
+
+ if (resourceOneOfIsApp(p.resource)) {
+ return {
+ kind: 'app',
+ resource: p.resource.app,
+ };
+ }
+
+ if (resourceOneOfIsKube(p.resource)) {
+ return {
+ kind: 'kube',
+ resource: p.resource.kube,
+ };
+ }
+
+ logger.info(
+ `Ignoring unsupported resource ${JSON.stringify(p)}.`
+ );
})
- .filter(Boolean),
+ .filter(Boolean) as UnifiedResourceResponse[],
});
}
});
@@ -907,105 +947,101 @@ export function createTshdClient(
});
},
getUserPreferences(
- params: api.GetUserPreferencesRequest.AsObject,
+ params: api.GetUserPreferencesRequest,
abortSignal?: types.TshAbortSignal
- ): Promise {
+ ): Promise {
return withAbort(abortSignal, callRef => {
- const req = new api.GetUserPreferencesRequest().setClusterUri(
- params.clusterUri
- );
+ const req = api.GetUserPreferencesRequest.create({
+ clusterUri: params.clusterUri,
+ });
return new Promise((resolve, reject) => {
callRef.current = tshd.getUserPreferences(req, (err, response) => {
if (err) {
reject(err);
} else {
- const res = response.toObject();
- resolve(res.userPreferences);
+ resolve(response.userPreferences);
}
});
});
});
},
updateUserPreferences(
- params: api.UpdateUserPreferencesRequest.AsObject,
+ params: api.UpdateUserPreferencesRequest,
abortSignal?: types.TshAbortSignal
- ): Promise {
- const userPreferences = new UserPreferences();
+ ): Promise {
+ const userPreferences = UserPreferences.create();
if (params.userPreferences.clusterPreferences) {
- userPreferences.setClusterPreferences(
- new ClusterUserPreferences().setPinnedResources(
- new PinnedResourcesUserPreferences().setResourceIdsList(
+ userPreferences.clusterPreferences = ClusterUserPreferences.create({
+ pinnedResources: PinnedResourcesUserPreferences.create({
+ resourceIds:
params.userPreferences.clusterPreferences.pinnedResources
- .resourceIdsList
- )
- )
- );
+ ?.resourceIds,
+ }),
+ });
}
if (params.userPreferences.unifiedResourcePreferences) {
- userPreferences.setUnifiedResourcePreferences(
- new UnifiedResourcePreferences()
- .setDefaultTab(
- params.userPreferences.unifiedResourcePreferences.defaultTab
- )
- .setViewMode(
- params.userPreferences.unifiedResourcePreferences.viewMode
- )
- .setLabelsViewMode(
- params.userPreferences.unifiedResourcePreferences.labelsViewMode
- )
- );
+ userPreferences.unifiedResourcePreferences =
+ UnifiedResourcePreferences.create({
+ defaultTab:
+ params.userPreferences.unifiedResourcePreferences.defaultTab,
+ viewMode:
+ params.userPreferences.unifiedResourcePreferences.viewMode,
+ labelsViewMode:
+ params.userPreferences.unifiedResourcePreferences.labelsViewMode,
+ });
}
return withAbort(abortSignal, callRef => {
- const req = new api.UpdateUserPreferencesRequest()
- .setClusterUri(params.clusterUri)
- .setUserPreferences(userPreferences);
+ const req = api.UpdateUserPreferencesRequest.create({
+ clusterUri: params.clusterUri,
+ userPreferences,
+ });
return new Promise((resolve, reject) => {
callRef.current = tshd.updateUserPreferences(req, (err, response) => {
if (err) {
reject(err);
} else {
- const res = response.toObject();
- resolve(res.userPreferences);
+ resolve(response.userPreferences);
}
});
});
});
},
promoteAccessRequest(
- params: api.PromoteAccessRequestRequest.AsObject,
+ params: api.PromoteAccessRequestRequest,
abortSignal?: types.TshAbortSignal
): Promise {
return withAbort(abortSignal, callRef => {
- const req = new api.PromoteAccessRequestRequest()
- .setRootClusterUri(params.rootClusterUri)
- .setAccessRequestId(params.accessRequestId)
- .setAccessListId(params.accessListId)
- .setReason(params.reason);
+ const req = api.PromoteAccessRequestRequest.create({
+ rootClusterUri: params.rootClusterUri,
+ accessRequestId: params.accessRequestId,
+ accessListId: params.accessListId,
+ reason: params.reason,
+ });
return new Promise((resolve, reject) => {
callRef.current = tshd.promoteAccessRequest(req, (err, response) => {
if (err) {
reject(err);
} else {
- const res = response.toObject();
- resolve(res.request);
+ resolve(response.request);
}
});
});
});
},
getSuggestedAccessLists(
- params: api.GetSuggestedAccessListsRequest.AsObject,
+ params: api.GetSuggestedAccessListsRequest,
abortSignal?: types.TshAbortSignal
): Promise {
return withAbort(abortSignal, callRef => {
- const req = new api.GetSuggestedAccessListsRequest()
- .setRootClusterUri(params.rootClusterUri)
- .setAccessRequestId(params.accessRequestId);
+ const req = api.GetSuggestedAccessListsRequest.create({
+ rootClusterUri: params.rootClusterUri,
+ accessRequestId: params.accessRequestId,
+ });
return new Promise((resolve, reject) => {
callRef.current = tshd.getSuggestedAccessLists(
@@ -1014,8 +1050,7 @@ export function createTshdClient(
if (err) {
reject(err);
} else {
- const res = response.toObject();
- resolve(res.accessListsList);
+ resolve(response.accessLists);
}
}
);
@@ -1028,21 +1063,21 @@ export function createTshdClient(
}
type CallRef = {
- current?: {
+ current: {
cancel(): void;
- };
+ } | null;
};
async function withAbort(
- sig: types.TshAbortSignal,
+ sig: types.TshAbortSignal | undefined,
cb: (ref: CallRef) => Promise
) {
- const ref = {
+ const ref: CallRef = {
current: null,
};
const abort = () => {
- ref?.current.cancel();
+ ref?.current?.cancel();
};
sig?.addEventListener(abort);
diff --git a/web/packages/teleterm/src/services/tshd/createFileTransferStream.ts b/web/packages/teleterm/src/services/tshd/createFileTransferStream.ts
index 84db0461eef1f..d9066526ccfad 100644
--- a/web/packages/teleterm/src/services/tshd/createFileTransferStream.ts
+++ b/web/packages/teleterm/src/services/tshd/createFileTransferStream.ts
@@ -18,8 +18,8 @@
import { ClientReadableStream } from '@grpc/grpc-js';
import { FileTransferListeners } from 'shared/components/FileTransfer';
-import { FileTransferProgress } from 'gen-proto-js/teleport/lib/teleterm/v1/service_pb';
-import * as api from 'gen-proto-js/teleport/lib/teleterm/v1/service_pb';
+import { FileTransferProgress } from 'gen-proto-ts/teleport/lib/teleterm/v1/service_pb';
+import * as api from 'gen-proto-ts/teleport/lib/teleterm/v1/service_pb';
import { TshAbortSignal } from './types';
@@ -32,7 +32,7 @@ export function createFileTransferStream(
return {
onProgress(callback: (progress: number) => void) {
stream.on('data', (data: api.FileTransferProgress) =>
- callback(data.getPercentage())
+ callback(data.percentage)
);
},
onComplete(callback: () => void) {
diff --git a/web/packages/teleterm/src/services/tshd/gateway.test.ts b/web/packages/teleterm/src/services/tshd/gateway.test.ts
index 940d1725c4f3d..fba0fad9461b6 100644
--- a/web/packages/teleterm/src/services/tshd/gateway.test.ts
+++ b/web/packages/teleterm/src/services/tshd/gateway.test.ts
@@ -20,12 +20,12 @@ import { getCliCommandArgs, getCliCommandEnv } from './gateway';
import { GatewayCLICommand } from './types';
describe('getCliCommandArgs', () => {
- it("extracts Node.js-style args from cliCommand's argsList", () => {
+ it("extracts Node.js-style args from cliCommand's args", () => {
const cliCommand = makeCliCommand();
const args = getCliCommandArgs(cliCommand);
- expect(args).toEqual([cliCommand.argsList[1]]);
+ expect(args).toEqual([cliCommand.args[1]]);
});
});
@@ -43,8 +43,8 @@ describe('getCliCommandEnv', () => {
const makeCliCommand = (): GatewayCLICommand => {
return {
path: '/Users/foo/Applications/psql.app/MacOS/psql',
- argsList: ['psql', 'localhost:1337'],
- envList: ['foo=bar', 'baz=quux'],
+ args: ['psql', 'localhost:1337'],
+ env: ['foo=bar', 'baz=quux'],
preview: 'foo=bar baz=quux psql localhost:1337',
};
};
diff --git a/web/packages/teleterm/src/services/tshd/gateway.ts b/web/packages/teleterm/src/services/tshd/gateway.ts
index ed2532b149f0a..629706188b24e 100644
--- a/web/packages/teleterm/src/services/tshd/gateway.ts
+++ b/web/packages/teleterm/src/services/tshd/gateway.ts
@@ -27,7 +27,7 @@ import { GatewayCLICommand } from './types';
* include just the args.
*/
export function getCliCommandArgs(cliCommand: GatewayCLICommand): string[] {
- const [, ...args] = cliCommand.argsList;
+ const [, ...args] = cliCommand.args;
return args;
}
@@ -36,7 +36,7 @@ export function getCliCommandArgs(cliCommand: GatewayCLICommand): string[] {
* We are safe to use this as the presentational command name.
*/
export function getCliCommandArgv0(cliCommand: GatewayCLICommand): string {
- return cliCommand.argsList[0];
+ return cliCommand.args[0];
}
/**
@@ -48,7 +48,7 @@ export function getCliCommandEnv(
cliCommand: GatewayCLICommand
): Record {
return Object.fromEntries(
- cliCommand.envList.map(nameEqualsValue => nameEqualsValue.split('='))
+ cliCommand.env.map(nameEqualsValue => nameEqualsValue.split('='))
);
}
diff --git a/web/packages/teleterm/src/services/tshd/mapUsageEvent.ts b/web/packages/teleterm/src/services/tshd/mapUsageEvent.ts
index bfbb25abfcb92..ac04fba361c99 100644
--- a/web/packages/teleterm/src/services/tshd/mapUsageEvent.ts
+++ b/web/packages/teleterm/src/services/tshd/mapUsageEvent.ts
@@ -16,9 +16,19 @@
* along with this program. If not, see .
*/
-import { Timestamp } from 'google-protobuf/google/protobuf/timestamp_pb';
-import * as api from 'gen-proto-js/teleport/lib/teleterm/v1/usage_events_pb';
-import * as prehogApi from 'gen-proto-js/prehog/v1alpha/connect_pb';
+import * as api from 'gen-proto-ts/teleport/lib/teleterm/v1/usage_events_pb';
+import * as prehogApi from 'gen-proto-ts/prehog/v1alpha/connect_pb';
+
+import {
+ connectEventOneOfIsAccessRequestAssumeRole,
+ connectEventOneOfIsAccessRequestCreate,
+ connectEventOneOfIsAccessRequestReview,
+ connectEventOneOfIsClusterLogin,
+ connectEventOneOfIsConnectMyComputerAgentStart,
+ connectEventOneOfIsConnectMyComputerSetup,
+ connectEventOneOfIsFileTransferRun,
+ connectEventOneOfIsProtocolUse,
+} from 'teleterm/helpers';
import * as types from './types';
@@ -26,103 +36,162 @@ import * as types from './types';
* Maps a plain JS object into a gRPC request object.
*/
export function mapUsageEvent(event: types.ReportUsageEventRequest) {
- return new api.ReportUsageEventRequest()
- .setAuthClusterId(event.authClusterId)
- .setPrehogReq(mapPrehogBody(event.prehogReq));
+ return api.ReportUsageEventRequest.create({
+ authClusterId: event.authClusterId,
+ prehogReq: mapPrehogBody(event.prehogReq),
+ });
}
function mapPrehogBody(
plainReq: types.ReportUsageEventRequest['prehogReq']
): prehogApi.SubmitConnectEventRequest {
- const req = new prehogApi.SubmitConnectEventRequest()
- .setTimestamp(Timestamp.fromDate(plainReq.timestamp))
- .setDistinctId(plainReq.distinctId);
+ if (!plainReq) {
+ throw new Error(`Unrecognized event: ${JSON.stringify(plainReq)}`);
+ }
- // Non-anonymized events.
- if (plainReq.userJobRoleUpdate) {
- const event = plainReq.userJobRoleUpdate;
- const reqEvent = new prehogApi.ConnectUserJobRoleUpdateEvent().setJobRole(
- event.jobRole
- );
+ const req = prehogApi.SubmitConnectEventRequest.create({
+ timestamp: plainReq.timestamp,
+ distinctId: plainReq.distinctId,
+ });
- return req.setUserJobRoleUpdate(reqEvent);
+ // Non-anonymized events.
+ if (plainReq.event.oneofKind === 'userJobRoleUpdate') {
+ const event = plainReq.event.userJobRoleUpdate;
+ const reqEvent = prehogApi.ConnectUserJobRoleUpdateEvent.create({
+ jobRole: event.jobRole,
+ });
+
+ req.event = {
+ oneofKind: 'userJobRoleUpdate',
+ userJobRoleUpdate: reqEvent,
+ };
+
+ return req;
}
// Anonymized events.
- if (plainReq.clusterLogin) {
- const event = plainReq.clusterLogin;
- const reqEvent = new prehogApi.ConnectClusterLoginEvent()
- .setClusterName(event.clusterName)
- .setUserName(event.userName)
- .setConnectorType(event.connectorType)
- .setOs(event.os)
- .setArch(event.arch)
- .setOsVersion(event.osVersion)
- .setAppVersion(event.appVersion);
-
- return req.setClusterLogin(reqEvent);
+ if (connectEventOneOfIsClusterLogin(plainReq.event)) {
+ const event = plainReq.event.clusterLogin;
+ const reqEvent = prehogApi.ConnectClusterLoginEvent.create({
+ clusterName: event.clusterName,
+ userName: event.userName,
+ connectorType: event.connectorType,
+ os: event.os,
+ arch: event.arch,
+ osVersion: event.osVersion,
+ appVersion: event.appVersion,
+ });
+
+ req.event = {
+ oneofKind: 'clusterLogin',
+ clusterLogin: reqEvent,
+ };
+
+ return req;
}
- if (plainReq.protocolUse) {
- const event = plainReq.protocolUse;
- const reqEvent = new prehogApi.ConnectProtocolUseEvent()
- .setClusterName(event.clusterName)
- .setUserName(event.userName)
- .setProtocol(event.protocol)
- .setOrigin(event.origin);
-
- return req.setProtocolUse(reqEvent);
+ if (connectEventOneOfIsProtocolUse(plainReq.event)) {
+ const event = plainReq.event.protocolUse;
+ const reqEvent = prehogApi.ConnectProtocolUseEvent.create({
+ clusterName: event.clusterName,
+ userName: event.userName,
+ protocol: event.protocol,
+ origin: event.origin,
+ });
+
+ req.event = {
+ oneofKind: 'protocolUse',
+ protocolUse: reqEvent,
+ };
+
+ return req;
}
- if (plainReq.accessRequestCreate) {
- const event = plainReq.accessRequestCreate;
- const reqEvent = new prehogApi.ConnectAccessRequestCreateEvent()
- .setClusterName(event.clusterName)
- .setUserName(event.userName)
- .setKind(event.kind);
-
- return req.setAccessRequestCreate(reqEvent);
+ if (connectEventOneOfIsAccessRequestCreate(plainReq.event)) {
+ const event = plainReq.event.accessRequestCreate;
+ const reqEvent = prehogApi.ConnectAccessRequestCreateEvent.create({
+ clusterName: event.clusterName,
+ userName: event.userName,
+ kind: event.kind,
+ });
+
+ req.event = {
+ oneofKind: 'accessRequestCreate',
+ accessRequestCreate: reqEvent,
+ };
+
+ return req;
}
- if (plainReq.accessRequestReview) {
- const event = plainReq.accessRequestReview;
- const reqEvent = new prehogApi.ConnectAccessRequestReviewEvent()
- .setClusterName(event.clusterName)
- .setUserName(event.userName);
-
- return req.setAccessRequestReview(reqEvent);
+ if (connectEventOneOfIsAccessRequestReview(plainReq.event)) {
+ const event = plainReq.event.accessRequestReview;
+ const reqEvent = prehogApi.ConnectAccessRequestReviewEvent.create({
+ clusterName: event.clusterName,
+ userName: event.userName,
+ });
+
+ req.event = {
+ oneofKind: 'accessRequestReview',
+ accessRequestReview: reqEvent,
+ };
+
+ return req;
}
- if (plainReq.accessRequestAssumeRole) {
- const event = plainReq.accessRequestAssumeRole;
- const reqEvent = new prehogApi.ConnectAccessRequestAssumeRoleEvent()
- .setClusterName(event.clusterName)
- .setUserName(event.userName);
-
- return req.setAccessRequestAssumeRole(reqEvent);
+ if (connectEventOneOfIsAccessRequestAssumeRole(plainReq.event)) {
+ const event = plainReq.event.accessRequestAssumeRole;
+ const reqEvent = prehogApi.ConnectAccessRequestAssumeRoleEvent.create({
+ clusterName: event.clusterName,
+ userName: event.userName,
+ });
+
+ req.event = {
+ oneofKind: 'accessRequestAssumeRole',
+ accessRequestAssumeRole: reqEvent,
+ };
+
+ return req;
}
- if (plainReq.fileTransferRun) {
- const event = plainReq.fileTransferRun;
- const reqEvent = new prehogApi.ConnectFileTransferRunEvent()
- .setClusterName(event.clusterName)
- .setUserName(event.userName)
- .setIsUpload(event.isUpload);
-
- return req.setFileTransferRun(reqEvent);
+ if (connectEventOneOfIsFileTransferRun(plainReq.event)) {
+ const event = plainReq.event.fileTransferRun;
+ const reqEvent = prehogApi.ConnectFileTransferRunEvent.create({
+ clusterName: event.clusterName,
+ userName: event.userName,
+ isUpload: event.isUpload,
+ });
+
+ req.event = {
+ oneofKind: 'fileTransferRun',
+ fileTransferRun: reqEvent,
+ };
+
+ return req;
}
- if (plainReq.connectMyComputerSetup) {
- const event = plainReq.connectMyComputerSetup;
- const reqEvent = new prehogApi.ConnectConnectMyComputerSetup()
- .setClusterName(event.clusterName)
- .setUserName(event.userName)
- .setSuccess(event.success)
- .setFailedStep(event.failedStep);
-
- return req.setConnectMyComputerSetup(reqEvent);
+ if (connectEventOneOfIsConnectMyComputerSetup(plainReq.event)) {
+ const event = plainReq.event.connectMyComputerSetup;
+ const reqEvent = prehogApi.ConnectConnectMyComputerSetup.create({
+ clusterName: event.clusterName,
+ userName: event.userName,
+ success: event.success,
+ failedStep: event.failedStep,
+ });
+
+ req.event = {
+ oneofKind: 'connectMyComputerSetup',
+ connectMyComputerSetup: reqEvent,
+ };
+
+ return req;
}
- if (plainReq.connectMyComputerAgentStart) {
- const event = plainReq.connectMyComputerAgentStart;
- const reqEvent = new prehogApi.ConnectConnectMyComputerAgentStart()
- .setClusterName(event.clusterName)
- .setUserName(event.userName);
-
- return req.setConnectMyComputerAgentStart(reqEvent);
+ if (connectEventOneOfIsConnectMyComputerAgentStart(plainReq.event)) {
+ const event = plainReq.event.connectMyComputerAgentStart;
+ const reqEvent = prehogApi.ConnectConnectMyComputerAgentStart.create({
+ clusterName: event.clusterName,
+ userName: event.userName,
+ });
+
+ req.event = {
+ oneofKind: 'connectMyComputerAgentStart',
+ connectMyComputerAgentStart: reqEvent,
+ };
+
+ return req;
}
throw new Error(`Unrecognized event: ${JSON.stringify(plainReq)}`);
diff --git a/web/packages/teleterm/src/services/tshd/testHelpers.ts b/web/packages/teleterm/src/services/tshd/testHelpers.ts
index 16bb0dfdbced3..d40b2d0ac149c 100644
--- a/web/packages/teleterm/src/services/tshd/testHelpers.ts
+++ b/web/packages/teleterm/src/services/tshd/testHelpers.ts
@@ -26,7 +26,7 @@ export const makeServer = (props: Partial = {}): tsh.Server => ({
name: '1234abcd-1234-abcd-1234-abcd1234abcd',
hostname: 'foo',
addr: '127.0.0.1:3022',
- labelsList: [],
+ labels: [],
subKind: 'teleport',
...props,
});
@@ -44,20 +44,20 @@ export const makeDatabase = (
desc: '',
hostname: '',
addr: '',
- labelsList: [],
+ labels: [],
...props,
});
export const makeKube = (props: Partial = {}): tsh.Kube => ({
name: 'foo',
- labelsList: [],
+ labels: [],
uri: '/clusters/bar/kubes/foo',
...props,
});
export const makeApp = (props: Partial = {}): App => ({
name: 'foo',
- labelsList: [],
+ labels: [],
endpointUri: 'tcp://localhost:3000',
friendlyName: '',
desc: '',
@@ -104,7 +104,7 @@ export const makeLeafCluster = (
export const makeLoggedInUser = (
props: Partial = {}
): tsh.LoggedInUser => ({
- activeRequestsList: [],
+ activeRequests: [],
assumedRequests: {},
name: 'alice',
acl: {
@@ -113,7 +113,7 @@ export const makeLoggedInUser = (
read: true,
edit: true,
create: true,
- pb_delete: true,
+ delete: true,
use: true,
},
activeSessions: {
@@ -121,7 +121,7 @@ export const makeLoggedInUser = (
read: true,
edit: true,
create: true,
- pb_delete: true,
+ delete: true,
use: true,
},
authConnectors: {
@@ -129,7 +129,7 @@ export const makeLoggedInUser = (
read: true,
edit: true,
create: true,
- pb_delete: true,
+ delete: true,
use: true,
},
roles: {
@@ -137,7 +137,7 @@ export const makeLoggedInUser = (
read: true,
edit: true,
create: true,
- pb_delete: true,
+ delete: true,
use: true,
},
users: {
@@ -145,7 +145,7 @@ export const makeLoggedInUser = (
read: true,
edit: true,
create: true,
- pb_delete: true,
+ delete: true,
use: true,
},
trustedClusters: {
@@ -153,7 +153,7 @@ export const makeLoggedInUser = (
read: true,
edit: true,
create: true,
- pb_delete: true,
+ delete: true,
use: true,
},
events: {
@@ -161,7 +161,7 @@ export const makeLoggedInUser = (
read: true,
edit: true,
create: true,
- pb_delete: true,
+ delete: true,
use: true,
},
tokens: {
@@ -169,7 +169,7 @@ export const makeLoggedInUser = (
read: true,
edit: true,
create: true,
- pb_delete: true,
+ delete: true,
use: true,
},
servers: {
@@ -177,7 +177,7 @@ export const makeLoggedInUser = (
read: true,
edit: true,
create: true,
- pb_delete: true,
+ delete: true,
use: true,
},
apps: {
@@ -185,7 +185,7 @@ export const makeLoggedInUser = (
read: true,
edit: true,
create: true,
- pb_delete: true,
+ delete: true,
use: true,
},
dbs: {
@@ -193,7 +193,7 @@ export const makeLoggedInUser = (
read: true,
edit: true,
create: true,
- pb_delete: true,
+ delete: true,
use: true,
},
kubeservers: {
@@ -201,7 +201,7 @@ export const makeLoggedInUser = (
read: true,
edit: true,
create: true,
- pb_delete: true,
+ delete: true,
use: true,
},
accessRequests: {
@@ -209,15 +209,15 @@ export const makeLoggedInUser = (
read: true,
edit: true,
create: true,
- pb_delete: true,
+ delete: true,
use: true,
},
},
- sshLoginsList: [],
- rolesList: [],
- requestableRolesList: [],
- suggestedReviewersList: [],
- userType: tsh.UserType.USER_TYPE_LOCAL,
+ sshLogins: [],
+ roles: [],
+ requestableRoles: [],
+ suggestedReviewers: [],
+ userType: tsh.UserType.LOCAL,
...props,
});
@@ -233,8 +233,8 @@ export const makeDatabaseGateway = (
protocol: 'postgres',
gatewayCliCommand: {
path: '/foo/psql',
- argsList: ['psql', 'localhost:1337'],
- envList: [],
+ args: ['psql', 'localhost:1337'],
+ env: [],
preview: 'psql localhost:1337',
},
targetSubresourceName: 'bar',
@@ -253,8 +253,8 @@ export const makeKubeGateway = (
protocol: '',
gatewayCliCommand: {
path: '/bin/kubectl',
- argsList: ['version'],
- envList: ['KUBECONFIG=/path/to/kubeconfig'],
+ args: ['version'],
+ env: ['KUBECONFIG=/path/to/kubeconfig'],
preview: 'KUBECONFIG=/path/to/kubeconfig /bin/kubectl version',
},
targetSubresourceName: '',
@@ -273,8 +273,8 @@ export const makeAppGateway = (
gatewayCliCommand: {
path: '',
preview: 'curl http://localhost:1337',
- envList: [],
- argsList: [],
+ env: [],
+ args: [],
},
targetUser: '',
protocol: 'HTTP',
diff --git a/web/packages/teleterm/src/services/tshd/types.ts b/web/packages/teleterm/src/services/tshd/types.ts
index 7f29a96a7edfd..8ea3778570f25 100644
--- a/web/packages/teleterm/src/services/tshd/types.ts
+++ b/web/packages/teleterm/src/services/tshd/types.ts
@@ -24,40 +24,38 @@ import { RequestState } from 'e-teleport/services/workflow';
import { SortType } from 'design/DataTable/types';
import { FileTransferListeners } from 'shared/components/FileTransfer';
import { NodeSubKind } from 'shared/services';
-import apiCluster from 'gen-proto-js/teleport/lib/teleterm/v1/cluster_pb';
-import apiDb from 'gen-proto-js/teleport/lib/teleterm/v1/database_pb';
-import apiGateway from 'gen-proto-js/teleport/lib/teleterm/v1/gateway_pb';
-import apiServer from 'gen-proto-js/teleport/lib/teleterm/v1/server_pb';
-import apiKube from 'gen-proto-js/teleport/lib/teleterm/v1/kube_pb';
-import apiApp from 'gen-proto-js/teleport/lib/teleterm/v1/app_pb';
-import apiLabel from 'gen-proto-js/teleport/lib/teleterm/v1/label_pb';
-import apiService, {
- FileTransferDirection,
- HeadlessAuthenticationState,
-} from 'gen-proto-js/teleport/lib/teleterm/v1/service_pb';
-import apiAuthSettings from 'gen-proto-js/teleport/lib/teleterm/v1/auth_settings_pb';
-import apiAccessRequest from 'gen-proto-js/teleport/lib/teleterm/v1/access_request_pb';
-import apiUsageEvents from 'gen-proto-js/teleport/lib/teleterm/v1/usage_events_pb';
-import apiAccessList from 'gen-proto-js/teleport/accesslist/v1/accesslist_pb';
+import * as apiCluster from 'gen-proto-ts/teleport/lib/teleterm/v1/cluster_pb';
+import * as apiDb from 'gen-proto-ts/teleport/lib/teleterm/v1/database_pb';
+import * as apiGateway from 'gen-proto-ts/teleport/lib/teleterm/v1/gateway_pb';
+import * as apiServer from 'gen-proto-ts/teleport/lib/teleterm/v1/server_pb';
+import * as apiKube from 'gen-proto-ts/teleport/lib/teleterm/v1/kube_pb';
+import * as apiApp from 'gen-proto-ts/teleport/lib/teleterm/v1/app_pb';
+import * as apiLabel from 'gen-proto-ts/teleport/lib/teleterm/v1/label_pb';
+import * as apiService from 'gen-proto-ts/teleport/lib/teleterm/v1/service_pb';
+import * as apiAuthSettings from 'gen-proto-ts/teleport/lib/teleterm/v1/auth_settings_pb';
+import * as apiAccessRequest from 'gen-proto-ts/teleport/lib/teleterm/v1/access_request_pb';
+import * as apiUsageEvents from 'gen-proto-ts/teleport/lib/teleterm/v1/usage_events_pb';
+import * as apiAccessList from 'gen-proto-ts/teleport/accesslist/v1/accesslist_pb';
import * as uri from 'teleterm/ui/uri';
// We want to reexport both the type and the value of UserType. Because it's in a namespace, we have
// to alias it first to do the reexport.
// https://www.typescriptlang.org/docs/handbook/namespaces.html#aliases
-import UserType = apiCluster.LoggedInUser.UserType;
+import UserType = apiCluster.LoggedInUser_UserType;
+
export { UserType };
-export interface Kube extends apiKube.Kube.AsObject {
+export interface Kube extends apiKube.Kube {
uri: uri.KubeUri;
}
-export interface Server extends apiServer.Server.AsObject {
+export interface Server extends apiServer.Server {
uri: uri.ServerUri;
subKind: NodeSubKind;
}
-export interface App extends apiApp.App.AsObject {
+export interface App extends apiApp.App {
uri: uri.AppUri;
/** Name of the application. */
name: string;
@@ -86,7 +84,7 @@ export interface App extends apiApp.App.AsObject {
samlApp: boolean;
}
-export interface Gateway extends apiGateway.Gateway.AsObject {
+export interface Gateway extends apiGateway.Gateway {
uri: uri.GatewayUri;
targetUri: uri.GatewayTargetUri;
// The type of gatewayCliCommand was repeated here just to refer to the type with the JSDoc.
@@ -107,43 +105,33 @@ export interface Gateway extends apiGateway.Gateway.AsObject {
* if the user was to invoke it manually from the terminal. Should not be actually used to execute
* anything in the shell.
*/
-export type GatewayCLICommand = apiGateway.GatewayCLICommand.AsObject;
+export type GatewayCLICommand = apiGateway.GatewayCLICommand;
-export type AccessRequest = apiAccessRequest.AccessRequest.AsObject;
-export type ResourceId = apiAccessRequest.ResourceID.AsObject;
-export type AccessRequestReview = apiAccessRequest.AccessRequestReview.AsObject;
-export type AccessList = apiAccessList.AccessList.AsObject;
+export type AccessRequest = apiAccessRequest.AccessRequest;
+export type ResourceId = apiAccessRequest.ResourceID;
+export type AccessRequestReview = apiAccessRequest.AccessRequestReview;
+export type AccessList = apiAccessList.AccessList;
-export interface GetServersResponse
- extends apiService.GetServersResponse.AsObject {
- agentsList: Server[];
+export interface GetServersResponse extends apiService.GetServersResponse {
+ agents: Server[];
}
-export interface GetDatabasesResponse
- extends apiService.GetDatabasesResponse.AsObject {
- agentsList: Database[];
+export interface GetDatabasesResponse extends apiService.GetDatabasesResponse {
+ agents: Database[];
}
-export interface GetKubesResponse extends apiService.GetKubesResponse.AsObject {
- agentsList: Kube[];
+export interface GetKubesResponse extends apiService.GetKubesResponse {
+ agents: Kube[];
}
-export interface GetAppsResponse extends apiService.GetAppsResponse.AsObject {
- agentsList: App[];
+export interface GetAppsResponse extends apiService.GetAppsResponse {
+ agents: App[];
}
export type GetRequestableRolesResponse =
- apiService.GetRequestableRolesResponse.AsObject;
-
-export type ReportUsageEventRequest = Modify<
- apiUsageEvents.ReportUsageEventRequest.AsObject,
- {
- prehogReq: Modify<
- apiUsageEvents.ReportUsageEventRequest.AsObject['prehogReq'],
- { timestamp: Date }
- >;
- }
->;
+ apiService.GetRequestableRolesResponse;
+
+export type ReportUsageEventRequest = apiUsageEvents.ReportUsageEventRequest;
// Available types are listed here:
// https://github.com/gravitational/teleport/blob/v9.0.3/lib/defaults/defaults.go#L513-L530
@@ -157,11 +145,11 @@ export type GatewayProtocol =
| 'redis'
| 'sqlserver';
-export interface Database extends apiDb.Database.AsObject {
+export interface Database extends apiDb.Database {
uri: uri.DatabaseUri;
}
-export interface Cluster extends apiCluster.Cluster.AsObject {
+export interface Cluster extends apiCluster.Cluster {
/**
* The URI of the cluster.
*
@@ -196,22 +184,21 @@ export interface Cluster extends apiCluster.Cluster.AsObject {
* includes a situation in which the cert has expired. If the cluster was added to the app but the
* user is yet to log in, loggedInUser is not present.
*/
-export type LoggedInUser = apiCluster.LoggedInUser.AsObject & {
+export type LoggedInUser = apiCluster.LoggedInUser & {
assumedRequests?: Record;
/**
* acl is available only after the cluster details are fetched, as acl is not stored on disk.
*/
- acl?: apiCluster.ACL.AsObject;
+ acl?: apiCluster.ACL;
};
-export type AuthProvider = apiAuthSettings.AuthProvider.AsObject;
-export type AuthSettings = apiAuthSettings.AuthSettings.AsObject;
+export type AuthProvider = apiAuthSettings.AuthProvider;
+export type AuthSettings = apiAuthSettings.AuthSettings;
-export interface FileTransferRequest
- extends apiService.FileTransferRequest.AsObject {
+export interface FileTransferRequest extends apiService.FileTransferRequest {
serverUri: uri.ServerUri;
}
-export type WebauthnCredentialInfo = apiService.CredentialInfo.AsObject;
+export type WebauthnCredentialInfo = apiService.CredentialInfo;
export type WebauthnLoginPrompt =
| WebauthnLoginTapPrompt
| WebauthnLoginRetapPrompt
@@ -229,7 +216,7 @@ export type WebauthnLoginCredentialPrompt = {
onUserResponse(index: number): void;
};
export type LoginPasswordlessRequest =
- Partial;
+ Partial;
export type TshdClient = {
listRootClusters: (abortSignal?: TshAbortSignal) => Promise;
@@ -327,20 +314,20 @@ export type TshdClient = {
) => Promise;
listUnifiedResources: (
- params: apiService.ListUnifiedResourcesRequest.AsObject,
+ params: apiService.ListUnifiedResourcesRequest,
abortSignal?: TshAbortSignal
) => Promise;
getUserPreferences: (
- params: apiService.GetUserPreferencesRequest.AsObject,
+ params: apiService.GetUserPreferencesRequest,
abortSignal?: TshAbortSignal
) => Promise;
updateUserPreferences: (
- params: apiService.UpdateUserPreferencesRequest.AsObject,
+ params: apiService.UpdateUserPreferencesRequest,
abortSignal?: TshAbortSignal
) => Promise;
getSuggestedAccessLists: (
- params: apiService.GetSuggestedAccessListsRequest.AsObject,
+ params: apiService.GetSuggestedAccessListsRequest,
abortSignal?: TshAbortSignal
) => Promise;
promoteAccessRequest: (
@@ -433,21 +420,19 @@ export type AssumedRequest = {
roles: string[];
};
-export { FileTransferDirection };
-
-export type Label = apiLabel.Label.AsObject;
+export type Label = apiLabel.Label;
export type CreateConnectMyComputerRoleResponse =
- apiService.CreateConnectMyComputerRoleResponse.AsObject;
+ apiService.CreateConnectMyComputerRoleResponse;
export type CreateConnectMyComputerNodeTokenResponse =
- apiService.CreateConnectMyComputerNodeTokenResponse.AsObject;
+ apiService.CreateConnectMyComputerNodeTokenResponse;
export type WaitForConnectMyComputerNodeJoinResponse =
- apiService.WaitForConnectMyComputerNodeJoinResponse.AsObject & {
+ apiService.WaitForConnectMyComputerNodeJoinResponse & {
server: Server;
};
export type ListUnifiedResourcesRequest =
- apiService.ListUnifiedResourcesRequest.AsObject;
+ apiService.ListUnifiedResourcesRequest;
export type ListUnifiedResourcesResponse = {
resources: UnifiedResourceResponse[];
nextKey: string;
@@ -461,19 +446,14 @@ export type UnifiedResourceResponse =
| { kind: 'kube'; resource: Kube }
| { kind: 'app'; resource: App };
-export type UserPreferences = apiService.UserPreferences.AsObject;
+export type UserPreferences = apiService.UserPreferences;
export type PromoteAccessRequestParams =
- apiService.PromoteAccessRequestRequest.AsObject & {
+ apiService.PromoteAccessRequestRequest & {
rootClusterUri: uri.RootClusterUri;
};
-// Replaces object property with a new type
-type Modify = Omit & R;
-
export type UpdateHeadlessAuthenticationStateParams = {
rootClusterUri: uri.RootClusterUri;
headlessAuthenticationId: string;
state: apiService.HeadlessAuthenticationState;
};
-
-export { HeadlessAuthenticationState };
diff --git a/web/packages/teleterm/src/services/tshdEvents/index.ts b/web/packages/teleterm/src/services/tshdEvents/index.ts
index 4136549f104a0..e52b021053fe8 100644
--- a/web/packages/teleterm/src/services/tshdEvents/index.ts
+++ b/web/packages/teleterm/src/services/tshdEvents/index.ts
@@ -17,40 +17,42 @@
*/
import * as grpc from '@grpc/grpc-js';
-import * as api from 'gen-proto-js/teleport/lib/teleterm/v1/tshd_events_service_pb';
-import * as apiService from 'gen-proto-js/teleport/lib/teleterm/v1/tshd_events_service_grpc_pb';
-import * as protobuf from 'google-protobuf';
+import * as api from 'gen-proto-ts/teleport/lib/teleterm/v1/tshd_events_service_pb';
+import * as apiService from 'gen-proto-ts/teleport/lib/teleterm/v1/tshd_events_service_pb.grpc-server';
import * as uri from 'teleterm/ui/uri';
import Logger from 'teleterm/logger';
-import { TshdEventContextBridgeService } from 'teleterm/types';
+import {
+ ExtractRequestType,
+ ExtractResponseType,
+ TshdEventContextBridgeService,
+} from 'teleterm/types';
import { filterSensitiveProperties } from 'teleterm/services/tshd/middleware';
-export interface ReloginRequest extends api.ReloginRequest.AsObject {
+export interface ReloginRequest extends api.ReloginRequest {
rootClusterUri: uri.RootClusterUri;
gatewayCertExpired?: GatewayCertExpired;
}
-export interface GatewayCertExpired extends api.GatewayCertExpired.AsObject {
+export interface GatewayCertExpired extends api.GatewayCertExpired {
gatewayUri: uri.GatewayUri;
targetUri: uri.DatabaseUri;
}
-export interface SendNotificationRequest
- extends api.SendNotificationRequest.AsObject {
+export interface SendNotificationRequest extends api.SendNotificationRequest {
cannotProxyGatewayConnection?: CannotProxyGatewayConnection;
}
export interface CannotProxyGatewayConnection
- extends api.CannotProxyGatewayConnection.AsObject {
+ extends api.CannotProxyGatewayConnection {
gatewayUri: uri.GatewayUri;
targetUri: uri.DatabaseUri;
}
-export type PromptMfaRequest = api.PromptMFARequest.AsObject & {
+export type PromptMfaRequest = api.PromptMFARequest & {
rootClusterUri: uri.RootClusterUri;
};
export interface SendPendingHeadlessAuthenticationRequest
- extends api.SendPendingHeadlessAuthenticationRequest.AsObject {
+ extends api.SendPendingHeadlessAuthenticationRequest {
rootClusterUri: uri.RootClusterUri;
}
@@ -77,17 +79,7 @@ export async function createTshdEventsServer(
);
const { service, setupTshdEventContextBridgeService } = createService(logger);
- server.addService(
- apiService.TshdEventsServiceService,
- // Whatever we use for generating protobufs generated wrong types. The types say that
- // server.addService expects an UntypedServiceImplementation as the second argument.
- // ITshdEventsServiceService does implement UntypedServiceImplementation.
- //
- // However, what we actually need to pass as the second argument needs to have the shape of
- // ITshdEventsServiceServer. That's why we ignore the error below.
- // @ts-expect-error The generated protobuf types seem to be wrong.
- service
- );
+ server.addService(apiService.tshdEventsServiceDefinition, service);
return { resolvedAddress, setupTshdEventContextBridgeService };
}
@@ -134,7 +126,7 @@ async function createServer(
* See the JSDoc for TshdEventContextBridgeService for more details.
*/
function createService(logger: Logger): {
- service: apiService.ITshdEventsServiceServer;
+ service: apiService.ITshdEventsService;
setupTshdEventContextBridgeService: (
listener: TshdEventContextBridgeService
) => void;
@@ -155,18 +147,20 @@ function createService(logger: Logger): {
* through the context bridge) to a class instance (as expected by grpc-js).
*/
function processEvent<
- RpcName extends keyof apiService.ITshdEventsServiceServer,
- Request extends protobuf.Message,
- Response extends protobuf.Message
+ RpcName extends keyof apiService.ITshdEventsService,
+ Request extends ExtractRequestType<
+ Parameters[0]
+ >,
+ Response extends ExtractResponseType<
+ Parameters[1]
+ >
>(
rpcName: RpcName,
call: grpc.ServerUnaryCall,
- callback: (error: Error, response: Response) => void,
- mapResponseObjectToResponseInstance: (
- responseObject: ReturnType
- ) => Response
+ callback: (error: Error | null, response: Response | null) => void,
+ mapResponseObjectToResponseInstance: (responseObject: Response) => Response
) {
- const request = call.request.toObject();
+ const request = call.request;
logger.info(`got ${rpcName}`, filterSensitiveProperties(request));
@@ -190,12 +184,7 @@ function createService(logger: Logger): {
throw new Error(`No context bridge handler for ${rpcName}`);
}
- contextBridgeHandler({
- // `as` is a workaround. We'd have to tell TypeScript somehow that `Request` is the same
- // between `contextBridgeService` and `processEvent`, but it's not clear how to achieve that.
- request: request as ReturnType,
- onRequestCancelled,
- }).then(
+ contextBridgeHandler({ request, onRequestCancelled }).then(
response => {
if (call.cancelled) {
return;
@@ -232,29 +221,25 @@ function createService(logger: Logger): {
);
}
- const service: apiService.ITshdEventsServiceServer = {
+ const service: apiService.ITshdEventsService = {
relogin: (call, callback) =>
- processEvent('relogin', call, callback, () => new api.ReloginResponse()),
+ processEvent('relogin', call, callback, () =>
+ api.ReloginResponse.create()
+ ),
sendNotification: (call, callback) =>
- processEvent(
- 'sendNotification',
- call,
- callback,
- () => new api.SendNotificationResponse()
+ processEvent('sendNotification', call, callback, () =>
+ api.SendNotificationResponse.create()
),
sendPendingHeadlessAuthentication: (call, callback) =>
- processEvent(
- 'sendPendingHeadlessAuthentication',
- call,
- callback,
- () => new api.SendPendingHeadlessAuthenticationResponse()
+ processEvent('sendPendingHeadlessAuthentication', call, callback, () =>
+ api.SendPendingHeadlessAuthenticationResponse.create()
),
promptMFA: (call, callback) => {
processEvent('promptMFA', call, callback, response =>
- new api.PromptMFAResponse().setTotpCode(response.totpCode)
+ api.PromptMFAResponse.create({ totpCode: response?.totpCode })
);
},
};
diff --git a/web/packages/teleterm/src/sharedProcess/api/protogen/google/protobuf/struct_pb.ts b/web/packages/teleterm/src/sharedProcess/api/protogen/google/protobuf/struct_pb.ts
new file mode 100644
index 0000000000000..52db53154bc89
--- /dev/null
+++ b/web/packages/teleterm/src/sharedProcess/api/protogen/google/protobuf/struct_pb.ts
@@ -0,0 +1,484 @@
+/* eslint-disable */
+// @generated by protobuf-ts 2.9.3 with parameter long_type_number,eslint_disable,add_pb_suffix,client_grpc1,server_grpc1,ts_nocheck
+// @generated from protobuf file "google/protobuf/struct.proto" (package "google.protobuf", syntax proto3)
+// tslint:disable
+// @ts-nocheck
+//
+// Protocol Buffers - Google's data interchange format
+// Copyright 2008 Google Inc. All rights reserved.
+// https://developers.google.com/protocol-buffers/
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+// * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+//
+import type { BinaryWriteOptions } from "@protobuf-ts/runtime";
+import type { IBinaryWriter } from "@protobuf-ts/runtime";
+import { WireType } from "@protobuf-ts/runtime";
+import type { BinaryReadOptions } from "@protobuf-ts/runtime";
+import type { IBinaryReader } from "@protobuf-ts/runtime";
+import { UnknownFieldHandler } from "@protobuf-ts/runtime";
+import type { PartialMessage } from "@protobuf-ts/runtime";
+import { reflectionMergePartial } from "@protobuf-ts/runtime";
+import { isJsonObject } from "@protobuf-ts/runtime";
+import { typeofJsonValue } from "@protobuf-ts/runtime";
+import type { JsonValue } from "@protobuf-ts/runtime";
+import type { JsonReadOptions } from "@protobuf-ts/runtime";
+import type { JsonWriteOptions } from "@protobuf-ts/runtime";
+import type { JsonObject } from "@protobuf-ts/runtime";
+import { MessageType } from "@protobuf-ts/runtime";
+/**
+ * `Struct` represents a structured data value, consisting of fields
+ * which map to dynamically typed values. In some languages, `Struct`
+ * might be supported by a native representation. For example, in
+ * scripting languages like JS a struct is represented as an
+ * object. The details of that representation are described together
+ * with the proto support for the language.
+ *
+ * The JSON representation for `Struct` is JSON object.
+ *
+ * @generated from protobuf message google.protobuf.Struct
+ */
+export interface Struct {
+ /**
+ * Unordered map of dynamically typed values.
+ *
+ * @generated from protobuf field: map fields = 1;
+ */
+ fields: {
+ [key: string]: Value;
+ };
+}
+/**
+ * `Value` represents a dynamically typed value which can be either
+ * null, a number, a string, a boolean, a recursive struct value, or a
+ * list of values. A producer of value is expected to set one of these
+ * variants. Absence of any variant indicates an error.
+ *
+ * The JSON representation for `Value` is JSON value.
+ *
+ * @generated from protobuf message google.protobuf.Value
+ */
+export interface Value {
+ /**
+ * @generated from protobuf oneof: kind
+ */
+ kind: {
+ oneofKind: "nullValue";
+ /**
+ * Represents a null value.
+ *
+ * @generated from protobuf field: google.protobuf.NullValue null_value = 1;
+ */
+ nullValue: NullValue;
+ } | {
+ oneofKind: "numberValue";
+ /**
+ * Represents a double value.
+ *
+ * @generated from protobuf field: double number_value = 2;
+ */
+ numberValue: number;
+ } | {
+ oneofKind: "stringValue";
+ /**
+ * Represents a string value.
+ *
+ * @generated from protobuf field: string string_value = 3;
+ */
+ stringValue: string;
+ } | {
+ oneofKind: "boolValue";
+ /**
+ * Represents a boolean value.
+ *
+ * @generated from protobuf field: bool bool_value = 4;
+ */
+ boolValue: boolean;
+ } | {
+ oneofKind: "structValue";
+ /**
+ * Represents a structured value.
+ *
+ * @generated from protobuf field: google.protobuf.Struct struct_value = 5;
+ */
+ structValue: Struct;
+ } | {
+ oneofKind: "listValue";
+ /**
+ * Represents a repeated `Value`.
+ *
+ * @generated from protobuf field: google.protobuf.ListValue list_value = 6;
+ */
+ listValue: ListValue;
+ } | {
+ oneofKind: undefined;
+ };
+}
+/**
+ * `ListValue` is a wrapper around a repeated field of values.
+ *
+ * The JSON representation for `ListValue` is JSON array.
+ *
+ * @generated from protobuf message google.protobuf.ListValue
+ */
+export interface ListValue {
+ /**
+ * Repeated field of dynamically typed values.
+ *
+ * @generated from protobuf field: repeated google.protobuf.Value values = 1;
+ */
+ values: Value[];
+}
+/**
+ * `NullValue` is a singleton enumeration to represent the null value for the
+ * `Value` type union.
+ *
+ * The JSON representation for `NullValue` is JSON `null`.
+ *
+ * @generated from protobuf enum google.protobuf.NullValue
+ */
+export enum NullValue {
+ /**
+ * Null value.
+ *
+ * @generated from protobuf enum value: NULL_VALUE = 0;
+ */
+ NULL_VALUE = 0
+}
+// @generated message type with reflection information, may provide speed optimized methods
+class Struct$Type extends MessageType {
+ constructor() {
+ super("google.protobuf.Struct", [
+ { no: 1, name: "fields", kind: "map", K: 9 /*ScalarType.STRING*/, V: { kind: "message", T: () => Value } }
+ ]);
+ }
+ /**
+ * Encode `Struct` to JSON object.
+ */
+ internalJsonWrite(message: Struct, options: JsonWriteOptions): JsonValue {
+ let json: JsonObject = {};
+ for (let [k, v] of Object.entries(message.fields)) {
+ json[k] = Value.toJson(v);
+ }
+ return json;
+ }
+ /**
+ * Decode `Struct` from JSON object.
+ */
+ internalJsonRead(json: JsonValue, options: JsonReadOptions, target?: Struct): Struct {
+ if (!isJsonObject(json))
+ throw new globalThis.Error("Unable to parse message " + this.typeName + " from JSON " + typeofJsonValue(json) + ".");
+ if (!target)
+ target = this.create();
+ for (let [k, v] of globalThis.Object.entries(json)) {
+ target.fields[k] = Value.fromJson(v);
+ }
+ return target;
+ }
+ create(value?: PartialMessage): Struct {
+ const message = globalThis.Object.create((this.messagePrototype!));
+ message.fields = {};
+ if (value !== undefined)
+ reflectionMergePartial(this, message, value);
+ return message;
+ }
+ internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: Struct): Struct {
+ let message = target ?? this.create(), end = reader.pos + length;
+ while (reader.pos < end) {
+ let [fieldNo, wireType] = reader.tag();
+ switch (fieldNo) {
+ case /* map fields */ 1:
+ this.binaryReadMap1(message.fields, reader, options);
+ break;
+ default:
+ let u = options.readUnknownField;
+ if (u === "throw")
+ throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);
+ let d = reader.skip(wireType);
+ if (u !== false)
+ (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);
+ }
+ }
+ return message;
+ }
+ private binaryReadMap1(map: Struct["fields"], reader: IBinaryReader, options: BinaryReadOptions): void {
+ let len = reader.uint32(), end = reader.pos + len, key: keyof Struct["fields"] | undefined, val: Struct["fields"][any] | undefined;
+ while (reader.pos < end) {
+ let [fieldNo, wireType] = reader.tag();
+ switch (fieldNo) {
+ case 1:
+ key = reader.string();
+ break;
+ case 2:
+ val = Value.internalBinaryRead(reader, reader.uint32(), options);
+ break;
+ default: throw new globalThis.Error("unknown map entry field for field google.protobuf.Struct.fields");
+ }
+ }
+ map[key ?? ""] = val ?? Value.create();
+ }
+ internalBinaryWrite(message: Struct, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {
+ /* map fields = 1; */
+ for (let k of globalThis.Object.keys(message.fields)) {
+ writer.tag(1, WireType.LengthDelimited).fork().tag(1, WireType.LengthDelimited).string(k);
+ writer.tag(2, WireType.LengthDelimited).fork();
+ Value.internalBinaryWrite(message.fields[k], writer, options);
+ writer.join().join();
+ }
+ let u = options.writeUnknownFields;
+ if (u !== false)
+ (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
+ return writer;
+ }
+}
+/**
+ * @generated MessageType for protobuf message google.protobuf.Struct
+ */
+export const Struct = new Struct$Type();
+// @generated message type with reflection information, may provide speed optimized methods
+class Value$Type extends MessageType {
+ constructor() {
+ super("google.protobuf.Value", [
+ { no: 1, name: "null_value", kind: "enum", oneof: "kind", T: () => ["google.protobuf.NullValue", NullValue] },
+ { no: 2, name: "number_value", kind: "scalar", oneof: "kind", T: 1 /*ScalarType.DOUBLE*/ },
+ { no: 3, name: "string_value", kind: "scalar", oneof: "kind", T: 9 /*ScalarType.STRING*/ },
+ { no: 4, name: "bool_value", kind: "scalar", oneof: "kind", T: 8 /*ScalarType.BOOL*/ },
+ { no: 5, name: "struct_value", kind: "message", oneof: "kind", T: () => Struct },
+ { no: 6, name: "list_value", kind: "message", oneof: "kind", T: () => ListValue }
+ ]);
+ }
+ /**
+ * Encode `Value` to JSON value.
+ */
+ internalJsonWrite(message: Value, options: JsonWriteOptions): JsonValue {
+ if (message.kind.oneofKind === undefined)
+ throw new globalThis.Error();
+ switch (message.kind.oneofKind) {
+ case undefined: throw new globalThis.Error();
+ case "boolValue": return message.kind.boolValue;
+ case "nullValue": return null;
+ case "numberValue":
+ let numberValue = message.kind.numberValue;
+ if (typeof numberValue == "number" && !Number.isFinite(numberValue))
+ throw new globalThis.Error();
+ return numberValue;
+ case "stringValue": return message.kind.stringValue;
+ case "listValue":
+ let listValueField = this.fields.find(f => f.no === 6);
+ if (listValueField?.kind !== "message")
+ throw new globalThis.Error();
+ return listValueField.T().toJson(message.kind.listValue);
+ case "structValue":
+ let structValueField = this.fields.find(f => f.no === 5);
+ if (structValueField?.kind !== "message")
+ throw new globalThis.Error();
+ return structValueField.T().toJson(message.kind.structValue);
+ }
+ }
+ /**
+ * Decode `Value` from JSON value.
+ */
+ internalJsonRead(json: JsonValue, options: JsonReadOptions, target?: Value): Value {
+ if (!target)
+ target = this.create();
+ switch (typeof json) {
+ case "number":
+ target.kind = { oneofKind: "numberValue", numberValue: json };
+ break;
+ case "string":
+ target.kind = { oneofKind: "stringValue", stringValue: json };
+ break;
+ case "boolean":
+ target.kind = { oneofKind: "boolValue", boolValue: json };
+ break;
+ case "object":
+ if (json === null) {
+ target.kind = { oneofKind: "nullValue", nullValue: NullValue.NULL_VALUE };
+ }
+ else if (globalThis.Array.isArray(json)) {
+ target.kind = { oneofKind: "listValue", listValue: ListValue.fromJson(json) };
+ }
+ else {
+ target.kind = { oneofKind: "structValue", structValue: Struct.fromJson(json) };
+ }
+ break;
+ default: throw new globalThis.Error("Unable to parse " + this.typeName + " from JSON " + typeofJsonValue(json));
+ }
+ return target;
+ }
+ create(value?: PartialMessage): Value {
+ const message = globalThis.Object.create((this.messagePrototype!));
+ message.kind = { oneofKind: undefined };
+ if (value !== undefined)
+ reflectionMergePartial(this, message, value);
+ return message;
+ }
+ internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: Value): Value {
+ let message = target ?? this.create(), end = reader.pos + length;
+ while (reader.pos < end) {
+ let [fieldNo, wireType] = reader.tag();
+ switch (fieldNo) {
+ case /* google.protobuf.NullValue null_value */ 1:
+ message.kind = {
+ oneofKind: "nullValue",
+ nullValue: reader.int32()
+ };
+ break;
+ case /* double number_value */ 2:
+ message.kind = {
+ oneofKind: "numberValue",
+ numberValue: reader.double()
+ };
+ break;
+ case /* string string_value */ 3:
+ message.kind = {
+ oneofKind: "stringValue",
+ stringValue: reader.string()
+ };
+ break;
+ case /* bool bool_value */ 4:
+ message.kind = {
+ oneofKind: "boolValue",
+ boolValue: reader.bool()
+ };
+ break;
+ case /* google.protobuf.Struct struct_value */ 5:
+ message.kind = {
+ oneofKind: "structValue",
+ structValue: Struct.internalBinaryRead(reader, reader.uint32(), options, (message.kind as any).structValue)
+ };
+ break;
+ case /* google.protobuf.ListValue list_value */ 6:
+ message.kind = {
+ oneofKind: "listValue",
+ listValue: ListValue.internalBinaryRead(reader, reader.uint32(), options, (message.kind as any).listValue)
+ };
+ break;
+ default:
+ let u = options.readUnknownField;
+ if (u === "throw")
+ throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);
+ let d = reader.skip(wireType);
+ if (u !== false)
+ (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);
+ }
+ }
+ return message;
+ }
+ internalBinaryWrite(message: Value, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {
+ /* google.protobuf.NullValue null_value = 1; */
+ if (message.kind.oneofKind === "nullValue")
+ writer.tag(1, WireType.Varint).int32(message.kind.nullValue);
+ /* double number_value = 2; */
+ if (message.kind.oneofKind === "numberValue")
+ writer.tag(2, WireType.Bit64).double(message.kind.numberValue);
+ /* string string_value = 3; */
+ if (message.kind.oneofKind === "stringValue")
+ writer.tag(3, WireType.LengthDelimited).string(message.kind.stringValue);
+ /* bool bool_value = 4; */
+ if (message.kind.oneofKind === "boolValue")
+ writer.tag(4, WireType.Varint).bool(message.kind.boolValue);
+ /* google.protobuf.Struct struct_value = 5; */
+ if (message.kind.oneofKind === "structValue")
+ Struct.internalBinaryWrite(message.kind.structValue, writer.tag(5, WireType.LengthDelimited).fork(), options).join();
+ /* google.protobuf.ListValue list_value = 6; */
+ if (message.kind.oneofKind === "listValue")
+ ListValue.internalBinaryWrite(message.kind.listValue, writer.tag(6, WireType.LengthDelimited).fork(), options).join();
+ let u = options.writeUnknownFields;
+ if (u !== false)
+ (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
+ return writer;
+ }
+}
+/**
+ * @generated MessageType for protobuf message google.protobuf.Value
+ */
+export const Value = new Value$Type();
+// @generated message type with reflection information, may provide speed optimized methods
+class ListValue$Type extends MessageType {
+ constructor() {
+ super("google.protobuf.ListValue", [
+ { no: 1, name: "values", kind: "message", repeat: 1 /*RepeatType.PACKED*/, T: () => Value }
+ ]);
+ }
+ /**
+ * Encode `ListValue` to JSON array.
+ */
+ internalJsonWrite(message: ListValue, options: JsonWriteOptions): JsonValue {
+ return message.values.map(v => Value.toJson(v));
+ }
+ /**
+ * Decode `ListValue` from JSON array.
+ */
+ internalJsonRead(json: JsonValue, options: JsonReadOptions, target?: ListValue): ListValue {
+ if (!globalThis.Array.isArray(json))
+ throw new globalThis.Error("Unable to parse " + this.typeName + " from JSON " + typeofJsonValue(json));
+ if (!target)
+ target = this.create();
+ let values = json.map(v => Value.fromJson(v));
+ target.values.push(...values);
+ return target;
+ }
+ create(value?: PartialMessage): ListValue {
+ const message = globalThis.Object.create((this.messagePrototype!));
+ message.values = [];
+ if (value !== undefined)
+ reflectionMergePartial(this, message, value);
+ return message;
+ }
+ internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: ListValue): ListValue {
+ let message = target ?? this.create(), end = reader.pos + length;
+ while (reader.pos < end) {
+ let [fieldNo, wireType] = reader.tag();
+ switch (fieldNo) {
+ case /* repeated google.protobuf.Value values */ 1:
+ message.values.push(Value.internalBinaryRead(reader, reader.uint32(), options));
+ break;
+ default:
+ let u = options.readUnknownField;
+ if (u === "throw")
+ throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);
+ let d = reader.skip(wireType);
+ if (u !== false)
+ (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);
+ }
+ }
+ return message;
+ }
+ internalBinaryWrite(message: ListValue, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {
+ /* repeated google.protobuf.Value values = 1; */
+ for (let i = 0; i < message.values.length; i++)
+ Value.internalBinaryWrite(message.values[i], writer.tag(1, WireType.LengthDelimited).fork(), options).join();
+ let u = options.writeUnknownFields;
+ if (u !== false)
+ (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
+ return writer;
+ }
+}
+/**
+ * @generated MessageType for protobuf message google.protobuf.ListValue
+ */
+export const ListValue = new ListValue$Type();
diff --git a/web/packages/teleterm/src/sharedProcess/api/protogen/ptyHostService_grpc_pb.d.ts b/web/packages/teleterm/src/sharedProcess/api/protogen/ptyHostService_grpc_pb.d.ts
deleted file mode 100644
index 87a48128a3e1b..0000000000000
--- a/web/packages/teleterm/src/sharedProcess/api/protogen/ptyHostService_grpc_pb.d.ts
+++ /dev/null
@@ -1,93 +0,0 @@
-/**
- * Teleport
- * Copyright (C) 2023 Gravitational, Inc.
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see .
- */
-
-// package:
-// file: ptyHostService.proto
-
-/* tslint:disable */
-/* eslint-disable */
-
-import * as grpc from "grpc";
-import * as ptyHostService_pb from "./ptyHostService_pb";
-import * as google_protobuf_struct_pb from "google-protobuf/google/protobuf/struct_pb";
-
-interface IPtyHostService extends grpc.ServiceDefinition {
- createPtyProcess: IPtyHostService_ICreatePtyProcess;
- exchangeEvents: IPtyHostService_IExchangeEvents;
- getCwd: IPtyHostService_IGetCwd;
-}
-
-interface IPtyHostService_ICreatePtyProcess extends grpc.MethodDefinition {
- path: "/PtyHost/CreatePtyProcess";
- requestStream: false;
- responseStream: false;
- requestSerialize: grpc.serialize;
- requestDeserialize: grpc.deserialize;
- responseSerialize: grpc.serialize;
- responseDeserialize: grpc.deserialize;
-}
-interface IPtyHostService_IExchangeEvents extends grpc.MethodDefinition {
- path: "/PtyHost/ExchangeEvents";
- requestStream: true;
- responseStream: true;
- requestSerialize: grpc.serialize;
- requestDeserialize: grpc.deserialize;
- responseSerialize: grpc.serialize;
- responseDeserialize: grpc.deserialize;
-}
-interface IPtyHostService_IGetCwd extends grpc.MethodDefinition {
- path: "/PtyHost/GetCwd";
- requestStream: false;
- responseStream: false;
- requestSerialize: grpc.serialize;
- requestDeserialize: grpc.deserialize;
- responseSerialize: grpc.serialize;
- responseDeserialize: grpc.deserialize;
-}
-
-export const PtyHostService: IPtyHostService;
-
-export interface IPtyHostServer {
- createPtyProcess: grpc.handleUnaryCall;
- exchangeEvents: grpc.handleBidiStreamingCall;
- getCwd: grpc.handleUnaryCall;
-}
-
-export interface IPtyHostClient {
- createPtyProcess(request: ptyHostService_pb.PtyCreate, callback: (error: grpc.ServiceError | null, response: ptyHostService_pb.PtyId) => void): grpc.ClientUnaryCall;
- createPtyProcess(request: ptyHostService_pb.PtyCreate, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: ptyHostService_pb.PtyId) => void): grpc.ClientUnaryCall;
- createPtyProcess(request: ptyHostService_pb.PtyCreate, metadata: grpc.Metadata, options: Partial, callback: (error: grpc.ServiceError | null, response: ptyHostService_pb.PtyId) => void): grpc.ClientUnaryCall;
- exchangeEvents(): grpc.ClientDuplexStream;
- exchangeEvents(options: Partial): grpc.ClientDuplexStream;
- exchangeEvents(metadata: grpc.Metadata, options?: Partial): grpc.ClientDuplexStream;
- getCwd(request: ptyHostService_pb.PtyId, callback: (error: grpc.ServiceError | null, response: ptyHostService_pb.PtyCwd) => void): grpc.ClientUnaryCall;
- getCwd(request: ptyHostService_pb.PtyId, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: ptyHostService_pb.PtyCwd) => void): grpc.ClientUnaryCall;
- getCwd(request: ptyHostService_pb.PtyId, metadata: grpc.Metadata, options: Partial, callback: (error: grpc.ServiceError | null, response: ptyHostService_pb.PtyCwd) => void): grpc.ClientUnaryCall;
-}
-
-export class PtyHostClient extends grpc.Client implements IPtyHostClient {
- constructor(address: string, credentials: grpc.ChannelCredentials, options?: object);
- public createPtyProcess(request: ptyHostService_pb.PtyCreate, callback: (error: grpc.ServiceError | null, response: ptyHostService_pb.PtyId) => void): grpc.ClientUnaryCall;
- public createPtyProcess(request: ptyHostService_pb.PtyCreate, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: ptyHostService_pb.PtyId) => void): grpc.ClientUnaryCall;
- public createPtyProcess(request: ptyHostService_pb.PtyCreate, metadata: grpc.Metadata, options: Partial, callback: (error: grpc.ServiceError | null, response: ptyHostService_pb.PtyId) => void): grpc.ClientUnaryCall;
- public exchangeEvents(options?: Partial): grpc.ClientDuplexStream;
- public exchangeEvents(metadata?: grpc.Metadata, options?: Partial): grpc.ClientDuplexStream;
- public getCwd(request: ptyHostService_pb.PtyId, callback: (error: grpc.ServiceError | null, response: ptyHostService_pb.PtyCwd) => void): grpc.ClientUnaryCall;
- public getCwd(request: ptyHostService_pb.PtyId, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: ptyHostService_pb.PtyCwd) => void): grpc.ClientUnaryCall;
- public getCwd(request: ptyHostService_pb.PtyId, metadata: grpc.Metadata, options: Partial, callback: (error: grpc.ServiceError | null, response: ptyHostService_pb.PtyCwd) => void): grpc.ClientUnaryCall;
-}
diff --git a/web/packages/teleterm/src/sharedProcess/api/protogen/ptyHostService_grpc_pb.js b/web/packages/teleterm/src/sharedProcess/api/protogen/ptyHostService_grpc_pb.js
deleted file mode 100644
index e369de46d8d52..0000000000000
--- a/web/packages/teleterm/src/sharedProcess/api/protogen/ptyHostService_grpc_pb.js
+++ /dev/null
@@ -1,122 +0,0 @@
-// GENERATED CODE -- DO NOT EDIT!
-
-// Original file comments:
-/*
- * Teleport
- * Copyright (C) 2023 Gravitational, Inc.
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see .
- */
-
-// TODO(ravicious): Before introducing any changes, move this file to the /proto dir and
-// remove the generate-grpc-shared script.
-//
-'use strict';
-var grpc = require('@grpc/grpc-js');
-var ptyHostService_pb = require('./ptyHostService_pb.js');
-var google_protobuf_struct_pb = require('google-protobuf/google/protobuf/struct_pb.js');
-
-function serialize_PtyClientEvent(arg) {
- if (!(arg instanceof ptyHostService_pb.PtyClientEvent)) {
- throw new Error('Expected argument of type PtyClientEvent');
- }
- return Buffer.from(arg.serializeBinary());
-}
-
-function deserialize_PtyClientEvent(buffer_arg) {
- return ptyHostService_pb.PtyClientEvent.deserializeBinary(new Uint8Array(buffer_arg));
-}
-
-function serialize_PtyCreate(arg) {
- if (!(arg instanceof ptyHostService_pb.PtyCreate)) {
- throw new Error('Expected argument of type PtyCreate');
- }
- return Buffer.from(arg.serializeBinary());
-}
-
-function deserialize_PtyCreate(buffer_arg) {
- return ptyHostService_pb.PtyCreate.deserializeBinary(new Uint8Array(buffer_arg));
-}
-
-function serialize_PtyCwd(arg) {
- if (!(arg instanceof ptyHostService_pb.PtyCwd)) {
- throw new Error('Expected argument of type PtyCwd');
- }
- return Buffer.from(arg.serializeBinary());
-}
-
-function deserialize_PtyCwd(buffer_arg) {
- return ptyHostService_pb.PtyCwd.deserializeBinary(new Uint8Array(buffer_arg));
-}
-
-function serialize_PtyId(arg) {
- if (!(arg instanceof ptyHostService_pb.PtyId)) {
- throw new Error('Expected argument of type PtyId');
- }
- return Buffer.from(arg.serializeBinary());
-}
-
-function deserialize_PtyId(buffer_arg) {
- return ptyHostService_pb.PtyId.deserializeBinary(new Uint8Array(buffer_arg));
-}
-
-function serialize_PtyServerEvent(arg) {
- if (!(arg instanceof ptyHostService_pb.PtyServerEvent)) {
- throw new Error('Expected argument of type PtyServerEvent');
- }
- return Buffer.from(arg.serializeBinary());
-}
-
-function deserialize_PtyServerEvent(buffer_arg) {
- return ptyHostService_pb.PtyServerEvent.deserializeBinary(new Uint8Array(buffer_arg));
-}
-
-
-var PtyHostService = exports.PtyHostService = {
- createPtyProcess: {
- path: '/PtyHost/CreatePtyProcess',
- requestStream: false,
- responseStream: false,
- requestType: ptyHostService_pb.PtyCreate,
- responseType: ptyHostService_pb.PtyId,
- requestSerialize: serialize_PtyCreate,
- requestDeserialize: deserialize_PtyCreate,
- responseSerialize: serialize_PtyId,
- responseDeserialize: deserialize_PtyId,
- },
- exchangeEvents: {
- path: '/PtyHost/ExchangeEvents',
- requestStream: true,
- responseStream: true,
- requestType: ptyHostService_pb.PtyClientEvent,
- responseType: ptyHostService_pb.PtyServerEvent,
- requestSerialize: serialize_PtyClientEvent,
- requestDeserialize: deserialize_PtyClientEvent,
- responseSerialize: serialize_PtyServerEvent,
- responseDeserialize: deserialize_PtyServerEvent,
- },
- getCwd: {
- path: '/PtyHost/GetCwd',
- requestStream: false,
- responseStream: false,
- requestType: ptyHostService_pb.PtyId,
- responseType: ptyHostService_pb.PtyCwd,
- requestSerialize: serialize_PtyId,
- requestDeserialize: deserialize_PtyId,
- responseSerialize: serialize_PtyCwd,
- responseDeserialize: deserialize_PtyCwd,
- },
-};
-
-exports.PtyHostClient = grpc.makeGenericClientConstructor(PtyHostService);
diff --git a/web/packages/teleterm/src/sharedProcess/api/protogen/ptyHostService_pb.d.ts b/web/packages/teleterm/src/sharedProcess/api/protogen/ptyHostService_pb.d.ts
deleted file mode 100644
index fe71e09295a3f..0000000000000
--- a/web/packages/teleterm/src/sharedProcess/api/protogen/ptyHostService_pb.d.ts
+++ /dev/null
@@ -1,336 +0,0 @@
-/**
- * Teleport
- * Copyright (C) 2023 Gravitational, Inc.
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see .
- */
-
-// package:
-// file: ptyHostService.proto
-
-/* tslint:disable */
-/* eslint-disable */
-
-import * as jspb from "google-protobuf";
-import * as google_protobuf_struct_pb from "google-protobuf/google/protobuf/struct_pb";
-
-export class PtyId extends jspb.Message {
- getId(): string;
- setId(value: string): PtyId;
-
- serializeBinary(): Uint8Array;
- toObject(includeInstance?: boolean): PtyId.AsObject;
- static toObject(includeInstance: boolean, msg: PtyId): PtyId.AsObject;
- static extensions: {[key: number]: jspb.ExtensionFieldInfo};
- static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo};
- static serializeBinaryToWriter(message: PtyId, writer: jspb.BinaryWriter): void;
- static deserializeBinary(bytes: Uint8Array): PtyId;
- static deserializeBinaryFromReader(message: PtyId, reader: jspb.BinaryReader): PtyId;
-}
-
-export namespace PtyId {
- export type AsObject = {
- id: string,
- }
-}
-
-export class PtyCreate extends jspb.Message {
- getPath(): string;
- setPath(value: string): PtyCreate;
- clearArgsList(): void;
- getArgsList(): Array;
- setArgsList(value: Array): PtyCreate;
- addArgs(value: string, index?: number): string;
- getCwd(): string;
- setCwd(value: string): PtyCreate;
-
- hasEnv(): boolean;
- clearEnv(): void;
- getEnv(): google_protobuf_struct_pb.Struct | undefined;
- setEnv(value?: google_protobuf_struct_pb.Struct): PtyCreate;
- getInitMessage(): string;
- setInitMessage(value: string): PtyCreate;
-
- serializeBinary(): Uint8Array;
- toObject(includeInstance?: boolean): PtyCreate.AsObject;
- static toObject(includeInstance: boolean, msg: PtyCreate): PtyCreate.AsObject;
- static extensions: {[key: number]: jspb.ExtensionFieldInfo};
- static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo};
- static serializeBinaryToWriter(message: PtyCreate, writer: jspb.BinaryWriter): void;
- static deserializeBinary(bytes: Uint8Array): PtyCreate;
- static deserializeBinaryFromReader(message: PtyCreate, reader: jspb.BinaryReader): PtyCreate;
-}
-
-export namespace PtyCreate {
- export type AsObject = {
- path: string,
- argsList: Array,
- cwd: string,
- env?: google_protobuf_struct_pb.Struct.AsObject,
- initMessage: string,
- }
-}
-
-export class PtyClientEvent extends jspb.Message {
-
- hasStart(): boolean;
- clearStart(): void;
- getStart(): PtyEventStart | undefined;
- setStart(value?: PtyEventStart): PtyClientEvent;
-
- hasResize(): boolean;
- clearResize(): void;
- getResize(): PtyEventResize | undefined;
- setResize(value?: PtyEventResize): PtyClientEvent;
-
- hasData(): boolean;
- clearData(): void;
- getData(): PtyEventData | undefined;
- setData(value?: PtyEventData): PtyClientEvent;
-
- getEventCase(): PtyClientEvent.EventCase;
-
- serializeBinary(): Uint8Array;
- toObject(includeInstance?: boolean): PtyClientEvent.AsObject;
- static toObject(includeInstance: boolean, msg: PtyClientEvent): PtyClientEvent.AsObject;
- static extensions: {[key: number]: jspb.ExtensionFieldInfo};
- static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo};
- static serializeBinaryToWriter(message: PtyClientEvent, writer: jspb.BinaryWriter): void;
- static deserializeBinary(bytes: Uint8Array): PtyClientEvent;
- static deserializeBinaryFromReader(message: PtyClientEvent, reader: jspb.BinaryReader): PtyClientEvent;
-}
-
-export namespace PtyClientEvent {
- export type AsObject = {
- start?: PtyEventStart.AsObject,
- resize?: PtyEventResize.AsObject,
- data?: PtyEventData.AsObject,
- }
-
- export enum EventCase {
- EVENT_NOT_SET = 0,
- START = 2,
- RESIZE = 3,
- DATA = 4,
- }
-
-}
-
-export class PtyServerEvent extends jspb.Message {
-
- hasResize(): boolean;
- clearResize(): void;
- getResize(): PtyEventResize | undefined;
- setResize(value?: PtyEventResize): PtyServerEvent;
-
- hasData(): boolean;
- clearData(): void;
- getData(): PtyEventData | undefined;
- setData(value?: PtyEventData): PtyServerEvent;
-
- hasOpen(): boolean;
- clearOpen(): void;
- getOpen(): PtyEventOpen | undefined;
- setOpen(value?: PtyEventOpen): PtyServerEvent;
-
- hasExit(): boolean;
- clearExit(): void;
- getExit(): PtyEventExit | undefined;
- setExit(value?: PtyEventExit): PtyServerEvent;
-
- hasStartError(): boolean;
- clearStartError(): void;
- getStartError(): PtyEventStartError | undefined;
- setStartError(value?: PtyEventStartError): PtyServerEvent;
-
- getEventCase(): PtyServerEvent.EventCase;
-
- serializeBinary(): Uint8Array;
- toObject(includeInstance?: boolean): PtyServerEvent.AsObject;
- static toObject(includeInstance: boolean, msg: PtyServerEvent): PtyServerEvent.AsObject;
- static extensions: {[key: number]: jspb.ExtensionFieldInfo};
- static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo};
- static serializeBinaryToWriter(message: PtyServerEvent, writer: jspb.BinaryWriter): void;
- static deserializeBinary(bytes: Uint8Array): PtyServerEvent;
- static deserializeBinaryFromReader(message: PtyServerEvent, reader: jspb.BinaryReader): PtyServerEvent;
-}
-
-export namespace PtyServerEvent {
- export type AsObject = {
- resize?: PtyEventResize.AsObject,
- data?: PtyEventData.AsObject,
- open?: PtyEventOpen.AsObject,
- exit?: PtyEventExit.AsObject,
- startError?: PtyEventStartError.AsObject,
- }
-
- export enum EventCase {
- EVENT_NOT_SET = 0,
- RESIZE = 1,
- DATA = 2,
- OPEN = 3,
- EXIT = 4,
- START_ERROR = 5,
- }
-
-}
-
-export class PtyEventStart extends jspb.Message {
- getColumns(): number;
- setColumns(value: number): PtyEventStart;
- getRows(): number;
- setRows(value: number): PtyEventStart;
-
- serializeBinary(): Uint8Array;
- toObject(includeInstance?: boolean): PtyEventStart.AsObject;
- static toObject(includeInstance: boolean, msg: PtyEventStart): PtyEventStart.AsObject;
- static extensions: {[key: number]: jspb.ExtensionFieldInfo};
- static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo};
- static serializeBinaryToWriter(message: PtyEventStart, writer: jspb.BinaryWriter): void;
- static deserializeBinary(bytes: Uint8Array): PtyEventStart;
- static deserializeBinaryFromReader(message: PtyEventStart, reader: jspb.BinaryReader): PtyEventStart;
-}
-
-export namespace PtyEventStart {
- export type AsObject = {
- columns: number,
- rows: number,
- }
-}
-
-export class PtyEventData extends jspb.Message {
- getMessage(): string;
- setMessage(value: string): PtyEventData;
-
- serializeBinary(): Uint8Array;
- toObject(includeInstance?: boolean): PtyEventData.AsObject;
- static toObject(includeInstance: boolean, msg: PtyEventData): PtyEventData.AsObject;
- static extensions: {[key: number]: jspb.ExtensionFieldInfo};
- static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo};
- static serializeBinaryToWriter(message: PtyEventData, writer: jspb.BinaryWriter): void;
- static deserializeBinary(bytes: Uint8Array): PtyEventData;
- static deserializeBinaryFromReader(message: PtyEventData, reader: jspb.BinaryReader): PtyEventData;
-}
-
-export namespace PtyEventData {
- export type AsObject = {
- message: string,
- }
-}
-
-export class PtyEventResize extends jspb.Message {
- getColumns(): number;
- setColumns(value: number): PtyEventResize;
- getRows(): number;
- setRows(value: number): PtyEventResize;
-
- serializeBinary(): Uint8Array;
- toObject(includeInstance?: boolean): PtyEventResize.AsObject;
- static toObject(includeInstance: boolean, msg: PtyEventResize): PtyEventResize.AsObject;
- static extensions: {[key: number]: jspb.ExtensionFieldInfo};
- static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo};
- static serializeBinaryToWriter(message: PtyEventResize, writer: jspb.BinaryWriter): void;
- static deserializeBinary(bytes: Uint8Array): PtyEventResize;
- static deserializeBinaryFromReader(message: PtyEventResize, reader: jspb.BinaryReader): PtyEventResize;
-}
-
-export namespace PtyEventResize {
- export type AsObject = {
- columns: number,
- rows: number,
- }
-}
-
-export class PtyEventOpen extends jspb.Message {
-
- serializeBinary(): Uint8Array;
- toObject(includeInstance?: boolean): PtyEventOpen.AsObject;
- static toObject(includeInstance: boolean, msg: PtyEventOpen): PtyEventOpen.AsObject;
- static extensions: {[key: number]: jspb.ExtensionFieldInfo};
- static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo};
- static serializeBinaryToWriter(message: PtyEventOpen, writer: jspb.BinaryWriter): void;
- static deserializeBinary(bytes: Uint8Array): PtyEventOpen;
- static deserializeBinaryFromReader(message: PtyEventOpen, reader: jspb.BinaryReader): PtyEventOpen;
-}
-
-export namespace PtyEventOpen {
- export type AsObject = {
- }
-}
-
-export class PtyEventExit extends jspb.Message {
- getExitCode(): number;
- setExitCode(value: number): PtyEventExit;
-
- hasSignal(): boolean;
- clearSignal(): void;
- getSignal(): number | undefined;
- setSignal(value: number): PtyEventExit;
-
- serializeBinary(): Uint8Array;
- toObject(includeInstance?: boolean): PtyEventExit.AsObject;
- static toObject(includeInstance: boolean, msg: PtyEventExit): PtyEventExit.AsObject;
- static extensions: {[key: number]: jspb.ExtensionFieldInfo};
- static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo};
- static serializeBinaryToWriter(message: PtyEventExit, writer: jspb.BinaryWriter): void;
- static deserializeBinary(bytes: Uint8Array): PtyEventExit;
- static deserializeBinaryFromReader(message: PtyEventExit, reader: jspb.BinaryReader): PtyEventExit;
-}
-
-export namespace PtyEventExit {
- export type AsObject = {
- exitCode: number,
- signal?: number,
- }
-}
-
-export class PtyEventStartError extends jspb.Message {
- getMessage(): string;
- setMessage(value: string): PtyEventStartError;
-
- serializeBinary(): Uint8Array;
- toObject(includeInstance?: boolean): PtyEventStartError.AsObject;
- static toObject(includeInstance: boolean, msg: PtyEventStartError): PtyEventStartError.AsObject;
- static extensions: {[key: number]: jspb.ExtensionFieldInfo};
- static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo};
- static serializeBinaryToWriter(message: PtyEventStartError, writer: jspb.BinaryWriter): void;
- static deserializeBinary(bytes: Uint8Array): PtyEventStartError;
- static deserializeBinaryFromReader(message: PtyEventStartError, reader: jspb.BinaryReader): PtyEventStartError;
-}
-
-export namespace PtyEventStartError {
- export type AsObject = {
- message: string,
- }
-}
-
-export class PtyCwd extends jspb.Message {
- getCwd(): string;
- setCwd(value: string): PtyCwd;
-
- serializeBinary(): Uint8Array;
- toObject(includeInstance?: boolean): PtyCwd.AsObject;
- static toObject(includeInstance: boolean, msg: PtyCwd): PtyCwd.AsObject;
- static extensions: {[key: number]: jspb.ExtensionFieldInfo};
- static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo};
- static serializeBinaryToWriter(message: PtyCwd, writer: jspb.BinaryWriter): void;
- static deserializeBinary(bytes: Uint8Array): PtyCwd;
- static deserializeBinaryFromReader(message: PtyCwd, reader: jspb.BinaryReader): PtyCwd;
-}
-
-export namespace PtyCwd {
- export type AsObject = {
- cwd: string,
- }
-}
diff --git a/web/packages/teleterm/src/sharedProcess/api/protogen/ptyHostService_pb.grpc-client.ts b/web/packages/teleterm/src/sharedProcess/api/protogen/ptyHostService_pb.grpc-client.ts
new file mode 100644
index 0000000000000..69e6f944f6c2a
--- /dev/null
+++ b/web/packages/teleterm/src/sharedProcess/api/protogen/ptyHostService_pb.grpc-client.ts
@@ -0,0 +1,91 @@
+/* eslint-disable */
+// @generated by protobuf-ts 2.9.3 with parameter long_type_number,eslint_disable,add_pb_suffix,client_grpc1,server_grpc1,ts_nocheck
+// @generated from protobuf file "ptyHostService.proto" (syntax proto3)
+// tslint:disable
+// @ts-nocheck
+//
+//
+// Teleport
+// Copyright (C) 2023 Gravitational, Inc.
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU Affero General Public License for more details.
+//
+// You should have received a copy of the GNU Affero General Public License
+// along with this program. If not, see .
+//
+//
+// TODO(ravicious): Before introducing any changes, move this file to the /proto dir and
+// remove the generate-grpc-shared script.
+//
+import { PtyHost } from "./ptyHostService_pb";
+import type { BinaryWriteOptions } from "@protobuf-ts/runtime";
+import type { BinaryReadOptions } from "@protobuf-ts/runtime";
+import type { PtyCwd } from "./ptyHostService_pb";
+import type { PtyServerEvent } from "./ptyHostService_pb";
+import type { PtyClientEvent } from "./ptyHostService_pb";
+import type { PtyId } from "./ptyHostService_pb";
+import type { PtyCreate } from "./ptyHostService_pb";
+import * as grpc from "@grpc/grpc-js";
+/**
+ * @generated from protobuf service PtyHost
+ */
+export interface IPtyHostClient {
+ /**
+ * @generated from protobuf rpc: CreatePtyProcess(PtyCreate) returns (PtyId);
+ */
+ createPtyProcess(input: PtyCreate, metadata: grpc.Metadata, options: grpc.CallOptions, callback: (err: grpc.ServiceError | null, value?: PtyId) => void): grpc.ClientUnaryCall;
+ createPtyProcess(input: PtyCreate, metadata: grpc.Metadata, callback: (err: grpc.ServiceError | null, value?: PtyId) => void): grpc.ClientUnaryCall;
+ createPtyProcess(input: PtyCreate, options: grpc.CallOptions, callback: (err: grpc.ServiceError | null, value?: PtyId) => void): grpc.ClientUnaryCall;
+ createPtyProcess(input: PtyCreate, callback: (err: grpc.ServiceError | null, value?: PtyId) => void): grpc.ClientUnaryCall;
+ /**
+ * @generated from protobuf rpc: ExchangeEvents(stream PtyClientEvent) returns (stream PtyServerEvent);
+ */
+ exchangeEvents(metadata: grpc.Metadata, options?: grpc.CallOptions): grpc.ClientDuplexStream;
+ exchangeEvents(options?: grpc.CallOptions): grpc.ClientDuplexStream;
+ /**
+ * @generated from protobuf rpc: GetCwd(PtyId) returns (PtyCwd);
+ */
+ getCwd(input: PtyId, metadata: grpc.Metadata, options: grpc.CallOptions, callback: (err: grpc.ServiceError | null, value?: PtyCwd) => void): grpc.ClientUnaryCall;
+ getCwd(input: PtyId, metadata: grpc.Metadata, callback: (err: grpc.ServiceError | null, value?: PtyCwd) => void): grpc.ClientUnaryCall;
+ getCwd(input: PtyId, options: grpc.CallOptions, callback: (err: grpc.ServiceError | null, value?: PtyCwd) => void): grpc.ClientUnaryCall;
+ getCwd(input: PtyId, callback: (err: grpc.ServiceError | null, value?: PtyCwd) => void): grpc.ClientUnaryCall;
+}
+/**
+ * @generated from protobuf service PtyHost
+ */
+export class PtyHostClient extends grpc.Client implements IPtyHostClient {
+ private readonly _binaryOptions: Partial;
+ constructor(address: string, credentials: grpc.ChannelCredentials, options: grpc.ClientOptions = {}, binaryOptions: Partial = {}) {
+ super(address, credentials, options);
+ this._binaryOptions = binaryOptions;
+ }
+ /**
+ * @generated from protobuf rpc: CreatePtyProcess(PtyCreate) returns (PtyId);
+ */
+ createPtyProcess(input: PtyCreate, metadata: grpc.Metadata | grpc.CallOptions | ((err: grpc.ServiceError | null, value?: PtyId) => void), options?: grpc.CallOptions | ((err: grpc.ServiceError | null, value?: PtyId) => void), callback?: ((err: grpc.ServiceError | null, value?: PtyId) => void)): grpc.ClientUnaryCall {
+ const method = PtyHost.methods[0];
+ return this.makeUnaryRequest(`/${PtyHost.typeName}/${method.name}`, (value: PtyCreate): Buffer => Buffer.from(method.I.toBinary(value, this._binaryOptions)), (value: Buffer): PtyId => method.O.fromBinary(value, this._binaryOptions), input, (metadata as any), (options as any), (callback as any));
+ }
+ /**
+ * @generated from protobuf rpc: ExchangeEvents(stream PtyClientEvent) returns (stream PtyServerEvent);
+ */
+ exchangeEvents(metadata?: grpc.Metadata | grpc.CallOptions, options?: grpc.CallOptions): grpc.ClientDuplexStream {
+ const method = PtyHost.methods[1];
+ return this.makeBidiStreamRequest(`/${PtyHost.typeName}/${method.name}`, (value: PtyClientEvent): Buffer => Buffer.from(method.I.toBinary(value, this._binaryOptions)), (value: Buffer): PtyServerEvent => method.O.fromBinary(value, this._binaryOptions), (metadata as any), options);
+ }
+ /**
+ * @generated from protobuf rpc: GetCwd(PtyId) returns (PtyCwd);
+ */
+ getCwd(input: PtyId, metadata: grpc.Metadata | grpc.CallOptions | ((err: grpc.ServiceError | null, value?: PtyCwd) => void), options?: grpc.CallOptions | ((err: grpc.ServiceError | null, value?: PtyCwd) => void), callback?: ((err: grpc.ServiceError | null, value?: PtyCwd) => void)): grpc.ClientUnaryCall {
+ const method = PtyHost.methods[2];
+ return this.makeUnaryRequest(`/${PtyHost.typeName}/${method.name}`, (value: PtyId): Buffer => Buffer.from(method.I.toBinary(value, this._binaryOptions)), (value: Buffer): PtyCwd => method.O.fromBinary(value, this._binaryOptions), input, (metadata as any), (options as any), (callback as any));
+ }
+}
diff --git a/web/packages/teleterm/src/sharedProcess/api/protogen/ptyHostService_pb.grpc-server.ts b/web/packages/teleterm/src/sharedProcess/api/protogen/ptyHostService_pb.grpc-server.ts
new file mode 100644
index 0000000000000..fa0591e3818b6
--- /dev/null
+++ b/web/packages/teleterm/src/sharedProcess/api/protogen/ptyHostService_pb.grpc-server.ts
@@ -0,0 +1,93 @@
+/* eslint-disable */
+// @generated by protobuf-ts 2.9.3 with parameter long_type_number,eslint_disable,add_pb_suffix,client_grpc1,server_grpc1,ts_nocheck
+// @generated from protobuf file "ptyHostService.proto" (syntax proto3)
+// tslint:disable
+// @ts-nocheck
+//
+//
+// Teleport
+// Copyright (C) 2023 Gravitational, Inc.
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU Affero General Public License for more details.
+//
+// You should have received a copy of the GNU Affero General Public License
+// along with this program. If not, see .
+//
+//
+// TODO(ravicious): Before introducing any changes, move this file to the /proto dir and
+// remove the generate-grpc-shared script.
+//
+import { PtyCwd } from "./ptyHostService_pb";
+import { PtyServerEvent } from "./ptyHostService_pb";
+import { PtyClientEvent } from "./ptyHostService_pb";
+import { PtyId } from "./ptyHostService_pb";
+import { PtyCreate } from "./ptyHostService_pb";
+import type * as grpc from "@grpc/grpc-js";
+/**
+ * @generated from protobuf service PtyHost
+ */
+export interface IPtyHost extends grpc.UntypedServiceImplementation {
+ /**
+ * @generated from protobuf rpc: CreatePtyProcess(PtyCreate) returns (PtyId);
+ */
+ createPtyProcess: grpc.handleUnaryCall;
+ /**
+ * @generated from protobuf rpc: ExchangeEvents(stream PtyClientEvent) returns (stream PtyServerEvent);
+ */
+ exchangeEvents: grpc.handleBidiStreamingCall;
+ /**
+ * @generated from protobuf rpc: GetCwd(PtyId) returns (PtyCwd);
+ */
+ getCwd: grpc.handleUnaryCall;
+}
+/**
+ * @grpc/grpc-js definition for the protobuf service PtyHost.
+ *
+ * Usage: Implement the interface IPtyHost and add to a grpc server.
+ *
+ * ```typescript
+ * const server = new grpc.Server();
+ * const service: IPtyHost = ...
+ * server.addService(ptyHostDefinition, service);
+ * ```
+ */
+export const ptyHostDefinition: grpc.ServiceDefinition = {
+ createPtyProcess: {
+ path: "/PtyHost/CreatePtyProcess",
+ originalName: "CreatePtyProcess",
+ requestStream: false,
+ responseStream: false,
+ responseDeserialize: bytes => PtyId.fromBinary(bytes),
+ requestDeserialize: bytes => PtyCreate.fromBinary(bytes),
+ responseSerialize: value => Buffer.from(PtyId.toBinary(value)),
+ requestSerialize: value => Buffer.from(PtyCreate.toBinary(value))
+ },
+ exchangeEvents: {
+ path: "/PtyHost/ExchangeEvents",
+ originalName: "ExchangeEvents",
+ requestStream: true,
+ responseStream: true,
+ responseDeserialize: bytes => PtyServerEvent.fromBinary(bytes),
+ requestDeserialize: bytes => PtyClientEvent.fromBinary(bytes),
+ responseSerialize: value => Buffer.from(PtyServerEvent.toBinary(value)),
+ requestSerialize: value => Buffer.from(PtyClientEvent.toBinary(value))
+ },
+ getCwd: {
+ path: "/PtyHost/GetCwd",
+ originalName: "GetCwd",
+ requestStream: false,
+ responseStream: false,
+ responseDeserialize: bytes => PtyCwd.fromBinary(bytes),
+ requestDeserialize: bytes => PtyId.fromBinary(bytes),
+ responseSerialize: value => Buffer.from(PtyCwd.toBinary(value)),
+ requestSerialize: value => Buffer.from(PtyId.toBinary(value))
+ }
+};
diff --git a/web/packages/teleterm/src/sharedProcess/api/protogen/ptyHostService_pb.js b/web/packages/teleterm/src/sharedProcess/api/protogen/ptyHostService_pb.js
deleted file mode 100644
index 8fe3572655761..0000000000000
--- a/web/packages/teleterm/src/sharedProcess/api/protogen/ptyHostService_pb.js
+++ /dev/null
@@ -1,2350 +0,0 @@
-// source: ptyHostService.proto
-/**
- * @fileoverview
- * @enhanceable
- * @suppress {missingRequire} reports error on implicit type usages.
- * @suppress {messageConventions} JS Compiler reports an error if a variable or
- * field starts with 'MSG_' and isn't a translatable message.
- * @public
- */
-// GENERATED CODE -- DO NOT EDIT!
-/* eslint-disable */
-// @ts-nocheck
-
-var jspb = require('google-protobuf');
-var goog = jspb;
-var global = (function() {
- if (this) { return this; }
- if (typeof window !== 'undefined') { return window; }
- if (typeof global !== 'undefined') { return global; }
- if (typeof self !== 'undefined') { return self; }
- return Function('return this')();
-}.call(null));
-
-var google_protobuf_struct_pb = require('google-protobuf/google/protobuf/struct_pb.js');
-goog.object.extend(proto, google_protobuf_struct_pb);
-goog.exportSymbol('proto.PtyClientEvent', null, global);
-goog.exportSymbol('proto.PtyClientEvent.EventCase', null, global);
-goog.exportSymbol('proto.PtyCreate', null, global);
-goog.exportSymbol('proto.PtyCwd', null, global);
-goog.exportSymbol('proto.PtyEventData', null, global);
-goog.exportSymbol('proto.PtyEventExit', null, global);
-goog.exportSymbol('proto.PtyEventOpen', null, global);
-goog.exportSymbol('proto.PtyEventResize', null, global);
-goog.exportSymbol('proto.PtyEventStart', null, global);
-goog.exportSymbol('proto.PtyEventStartError', null, global);
-goog.exportSymbol('proto.PtyId', null, global);
-goog.exportSymbol('proto.PtyServerEvent', null, global);
-goog.exportSymbol('proto.PtyServerEvent.EventCase', null, global);
-/**
- * Generated by JsPbCodeGenerator.
- * @param {Array=} opt_data Optional initial data array, typically from a
- * server response, or constructed directly in Javascript. The array is used
- * in place and becomes part of the constructed object. It is not cloned.
- * If no data is provided, the constructed object will be empty, but still
- * valid.
- * @extends {jspb.Message}
- * @constructor
- */
-proto.PtyId = function(opt_data) {
- jspb.Message.initialize(this, opt_data, 0, -1, null, null);
-};
-goog.inherits(proto.PtyId, jspb.Message);
-if (goog.DEBUG && !COMPILED) {
- /**
- * @public
- * @override
- */
- proto.PtyId.displayName = 'proto.PtyId';
-}
-/**
- * Generated by JsPbCodeGenerator.
- * @param {Array=} opt_data Optional initial data array, typically from a
- * server response, or constructed directly in Javascript. The array is used
- * in place and becomes part of the constructed object. It is not cloned.
- * If no data is provided, the constructed object will be empty, but still
- * valid.
- * @extends {jspb.Message}
- * @constructor
- */
-proto.PtyCreate = function(opt_data) {
- jspb.Message.initialize(this, opt_data, 0, -1, proto.PtyCreate.repeatedFields_, null);
-};
-goog.inherits(proto.PtyCreate, jspb.Message);
-if (goog.DEBUG && !COMPILED) {
- /**
- * @public
- * @override
- */
- proto.PtyCreate.displayName = 'proto.PtyCreate';
-}
-/**
- * Generated by JsPbCodeGenerator.
- * @param {Array=} opt_data Optional initial data array, typically from a
- * server response, or constructed directly in Javascript. The array is used
- * in place and becomes part of the constructed object. It is not cloned.
- * If no data is provided, the constructed object will be empty, but still
- * valid.
- * @extends {jspb.Message}
- * @constructor
- */
-proto.PtyClientEvent = function(opt_data) {
- jspb.Message.initialize(this, opt_data, 0, -1, null, proto.PtyClientEvent.oneofGroups_);
-};
-goog.inherits(proto.PtyClientEvent, jspb.Message);
-if (goog.DEBUG && !COMPILED) {
- /**
- * @public
- * @override
- */
- proto.PtyClientEvent.displayName = 'proto.PtyClientEvent';
-}
-/**
- * Generated by JsPbCodeGenerator.
- * @param {Array=} opt_data Optional initial data array, typically from a
- * server response, or constructed directly in Javascript. The array is used
- * in place and becomes part of the constructed object. It is not cloned.
- * If no data is provided, the constructed object will be empty, but still
- * valid.
- * @extends {jspb.Message}
- * @constructor
- */
-proto.PtyServerEvent = function(opt_data) {
- jspb.Message.initialize(this, opt_data, 0, -1, null, proto.PtyServerEvent.oneofGroups_);
-};
-goog.inherits(proto.PtyServerEvent, jspb.Message);
-if (goog.DEBUG && !COMPILED) {
- /**
- * @public
- * @override
- */
- proto.PtyServerEvent.displayName = 'proto.PtyServerEvent';
-}
-/**
- * Generated by JsPbCodeGenerator.
- * @param {Array=} opt_data Optional initial data array, typically from a
- * server response, or constructed directly in Javascript. The array is used
- * in place and becomes part of the constructed object. It is not cloned.
- * If no data is provided, the constructed object will be empty, but still
- * valid.
- * @extends {jspb.Message}
- * @constructor
- */
-proto.PtyEventStart = function(opt_data) {
- jspb.Message.initialize(this, opt_data, 0, -1, null, null);
-};
-goog.inherits(proto.PtyEventStart, jspb.Message);
-if (goog.DEBUG && !COMPILED) {
- /**
- * @public
- * @override
- */
- proto.PtyEventStart.displayName = 'proto.PtyEventStart';
-}
-/**
- * Generated by JsPbCodeGenerator.
- * @param {Array=} opt_data Optional initial data array, typically from a
- * server response, or constructed directly in Javascript. The array is used
- * in place and becomes part of the constructed object. It is not cloned.
- * If no data is provided, the constructed object will be empty, but still
- * valid.
- * @extends {jspb.Message}
- * @constructor
- */
-proto.PtyEventData = function(opt_data) {
- jspb.Message.initialize(this, opt_data, 0, -1, null, null);
-};
-goog.inherits(proto.PtyEventData, jspb.Message);
-if (goog.DEBUG && !COMPILED) {
- /**
- * @public
- * @override
- */
- proto.PtyEventData.displayName = 'proto.PtyEventData';
-}
-/**
- * Generated by JsPbCodeGenerator.
- * @param {Array=} opt_data Optional initial data array, typically from a
- * server response, or constructed directly in Javascript. The array is used
- * in place and becomes part of the constructed object. It is not cloned.
- * If no data is provided, the constructed object will be empty, but still
- * valid.
- * @extends {jspb.Message}
- * @constructor
- */
-proto.PtyEventResize = function(opt_data) {
- jspb.Message.initialize(this, opt_data, 0, -1, null, null);
-};
-goog.inherits(proto.PtyEventResize, jspb.Message);
-if (goog.DEBUG && !COMPILED) {
- /**
- * @public
- * @override
- */
- proto.PtyEventResize.displayName = 'proto.PtyEventResize';
-}
-/**
- * Generated by JsPbCodeGenerator.
- * @param {Array=} opt_data Optional initial data array, typically from a
- * server response, or constructed directly in Javascript. The array is used
- * in place and becomes part of the constructed object. It is not cloned.
- * If no data is provided, the constructed object will be empty, but still
- * valid.
- * @extends {jspb.Message}
- * @constructor
- */
-proto.PtyEventOpen = function(opt_data) {
- jspb.Message.initialize(this, opt_data, 0, -1, null, null);
-};
-goog.inherits(proto.PtyEventOpen, jspb.Message);
-if (goog.DEBUG && !COMPILED) {
- /**
- * @public
- * @override
- */
- proto.PtyEventOpen.displayName = 'proto.PtyEventOpen';
-}
-/**
- * Generated by JsPbCodeGenerator.
- * @param {Array=} opt_data Optional initial data array, typically from a
- * server response, or constructed directly in Javascript. The array is used
- * in place and becomes part of the constructed object. It is not cloned.
- * If no data is provided, the constructed object will be empty, but still
- * valid.
- * @extends {jspb.Message}
- * @constructor
- */
-proto.PtyEventExit = function(opt_data) {
- jspb.Message.initialize(this, opt_data, 0, -1, null, null);
-};
-goog.inherits(proto.PtyEventExit, jspb.Message);
-if (goog.DEBUG && !COMPILED) {
- /**
- * @public
- * @override
- */
- proto.PtyEventExit.displayName = 'proto.PtyEventExit';
-}
-/**
- * Generated by JsPbCodeGenerator.
- * @param {Array=} opt_data Optional initial data array, typically from a
- * server response, or constructed directly in Javascript. The array is used
- * in place and becomes part of the constructed object. It is not cloned.
- * If no data is provided, the constructed object will be empty, but still
- * valid.
- * @extends {jspb.Message}
- * @constructor
- */
-proto.PtyEventStartError = function(opt_data) {
- jspb.Message.initialize(this, opt_data, 0, -1, null, null);
-};
-goog.inherits(proto.PtyEventStartError, jspb.Message);
-if (goog.DEBUG && !COMPILED) {
- /**
- * @public
- * @override
- */
- proto.PtyEventStartError.displayName = 'proto.PtyEventStartError';
-}
-/**
- * Generated by JsPbCodeGenerator.
- * @param {Array=} opt_data Optional initial data array, typically from a
- * server response, or constructed directly in Javascript. The array is used
- * in place and becomes part of the constructed object. It is not cloned.
- * If no data is provided, the constructed object will be empty, but still
- * valid.
- * @extends {jspb.Message}
- * @constructor
- */
-proto.PtyCwd = function(opt_data) {
- jspb.Message.initialize(this, opt_data, 0, -1, null, null);
-};
-goog.inherits(proto.PtyCwd, jspb.Message);
-if (goog.DEBUG && !COMPILED) {
- /**
- * @public
- * @override
- */
- proto.PtyCwd.displayName = 'proto.PtyCwd';
-}
-
-
-
-if (jspb.Message.GENERATE_TO_OBJECT) {
-/**
- * Creates an object representation of this proto.
- * Field names that are reserved in JavaScript and will be renamed to pb_name.
- * Optional fields that are not set will be set to undefined.
- * To access a reserved field use, foo.pb_, eg, foo.pb_default.
- * For the list of reserved names please see:
- * net/proto2/compiler/js/internal/generator.cc#kKeyword.
- * @param {boolean=} opt_includeInstance Deprecated. whether to include the
- * JSPB instance for transitional soy proto support:
- * http://goto/soy-param-migration
- * @return {!Object}
- */
-proto.PtyId.prototype.toObject = function(opt_includeInstance) {
- return proto.PtyId.toObject(opt_includeInstance, this);
-};
-
-
-/**
- * Static version of the {@see toObject} method.
- * @param {boolean|undefined} includeInstance Deprecated. Whether to include
- * the JSPB instance for transitional soy proto support:
- * http://goto/soy-param-migration
- * @param {!proto.PtyId} msg The msg instance to transform.
- * @return {!Object}
- * @suppress {unusedLocalVariables} f is only used for nested messages
- */
-proto.PtyId.toObject = function(includeInstance, msg) {
- var f, obj = {
- id: jspb.Message.getFieldWithDefault(msg, 1, "")
- };
-
- if (includeInstance) {
- obj.$jspbMessageInstance = msg;
- }
- return obj;
-};
-}
-
-
-/**
- * Deserializes binary data (in protobuf wire format).
- * @param {jspb.ByteSource} bytes The bytes to deserialize.
- * @return {!proto.PtyId}
- */
-proto.PtyId.deserializeBinary = function(bytes) {
- var reader = new jspb.BinaryReader(bytes);
- var msg = new proto.PtyId;
- return proto.PtyId.deserializeBinaryFromReader(msg, reader);
-};
-
-
-/**
- * Deserializes binary data (in protobuf wire format) from the
- * given reader into the given message object.
- * @param {!proto.PtyId} msg The message object to deserialize into.
- * @param {!jspb.BinaryReader} reader The BinaryReader to use.
- * @return {!proto.PtyId}
- */
-proto.PtyId.deserializeBinaryFromReader = function(msg, reader) {
- while (reader.nextField()) {
- if (reader.isEndGroup()) {
- break;
- }
- var field = reader.getFieldNumber();
- switch (field) {
- case 1:
- var value = /** @type {string} */ (reader.readString());
- msg.setId(value);
- break;
- default:
- reader.skipField();
- break;
- }
- }
- return msg;
-};
-
-
-/**
- * Serializes the message to binary data (in protobuf wire format).
- * @return {!Uint8Array}
- */
-proto.PtyId.prototype.serializeBinary = function() {
- var writer = new jspb.BinaryWriter();
- proto.PtyId.serializeBinaryToWriter(this, writer);
- return writer.getResultBuffer();
-};
-
-
-/**
- * Serializes the given message to binary data (in protobuf wire
- * format), writing to the given BinaryWriter.
- * @param {!proto.PtyId} message
- * @param {!jspb.BinaryWriter} writer
- * @suppress {unusedLocalVariables} f is only used for nested messages
- */
-proto.PtyId.serializeBinaryToWriter = function(message, writer) {
- var f = undefined;
- f = message.getId();
- if (f.length > 0) {
- writer.writeString(
- 1,
- f
- );
- }
-};
-
-
-/**
- * optional string id = 1;
- * @return {string}
- */
-proto.PtyId.prototype.getId = function() {
- return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, ""));
-};
-
-
-/**
- * @param {string} value
- * @return {!proto.PtyId} returns this
- */
-proto.PtyId.prototype.setId = function(value) {
- return jspb.Message.setProto3StringField(this, 1, value);
-};
-
-
-
-/**
- * List of repeated fields within this message type.
- * @private {!Array}
- * @const
- */
-proto.PtyCreate.repeatedFields_ = [4];
-
-
-
-if (jspb.Message.GENERATE_TO_OBJECT) {
-/**
- * Creates an object representation of this proto.
- * Field names that are reserved in JavaScript and will be renamed to pb_name.
- * Optional fields that are not set will be set to undefined.
- * To access a reserved field use, foo.pb_, eg, foo.pb_default.
- * For the list of reserved names please see:
- * net/proto2/compiler/js/internal/generator.cc#kKeyword.
- * @param {boolean=} opt_includeInstance Deprecated. whether to include the
- * JSPB instance for transitional soy proto support:
- * http://goto/soy-param-migration
- * @return {!Object}
- */
-proto.PtyCreate.prototype.toObject = function(opt_includeInstance) {
- return proto.PtyCreate.toObject(opt_includeInstance, this);
-};
-
-
-/**
- * Static version of the {@see toObject} method.
- * @param {boolean|undefined} includeInstance Deprecated. Whether to include
- * the JSPB instance for transitional soy proto support:
- * http://goto/soy-param-migration
- * @param {!proto.PtyCreate} msg The msg instance to transform.
- * @return {!Object}
- * @suppress {unusedLocalVariables} f is only used for nested messages
- */
-proto.PtyCreate.toObject = function(includeInstance, msg) {
- var f, obj = {
- path: jspb.Message.getFieldWithDefault(msg, 3, ""),
- argsList: (f = jspb.Message.getRepeatedField(msg, 4)) == null ? undefined : f,
- cwd: jspb.Message.getFieldWithDefault(msg, 5, ""),
- env: (f = msg.getEnv()) && google_protobuf_struct_pb.Struct.toObject(includeInstance, f),
- initMessage: jspb.Message.getFieldWithDefault(msg, 8, "")
- };
-
- if (includeInstance) {
- obj.$jspbMessageInstance = msg;
- }
- return obj;
-};
-}
-
-
-/**
- * Deserializes binary data (in protobuf wire format).
- * @param {jspb.ByteSource} bytes The bytes to deserialize.
- * @return {!proto.PtyCreate}
- */
-proto.PtyCreate.deserializeBinary = function(bytes) {
- var reader = new jspb.BinaryReader(bytes);
- var msg = new proto.PtyCreate;
- return proto.PtyCreate.deserializeBinaryFromReader(msg, reader);
-};
-
-
-/**
- * Deserializes binary data (in protobuf wire format) from the
- * given reader into the given message object.
- * @param {!proto.PtyCreate} msg The message object to deserialize into.
- * @param {!jspb.BinaryReader} reader The BinaryReader to use.
- * @return {!proto.PtyCreate}
- */
-proto.PtyCreate.deserializeBinaryFromReader = function(msg, reader) {
- while (reader.nextField()) {
- if (reader.isEndGroup()) {
- break;
- }
- var field = reader.getFieldNumber();
- switch (field) {
- case 3:
- var value = /** @type {string} */ (reader.readString());
- msg.setPath(value);
- break;
- case 4:
- var value = /** @type {string} */ (reader.readString());
- msg.addArgs(value);
- break;
- case 5:
- var value = /** @type {string} */ (reader.readString());
- msg.setCwd(value);
- break;
- case 7:
- var value = new google_protobuf_struct_pb.Struct;
- reader.readMessage(value,google_protobuf_struct_pb.Struct.deserializeBinaryFromReader);
- msg.setEnv(value);
- break;
- case 8:
- var value = /** @type {string} */ (reader.readString());
- msg.setInitMessage(value);
- break;
- default:
- reader.skipField();
- break;
- }
- }
- return msg;
-};
-
-
-/**
- * Serializes the message to binary data (in protobuf wire format).
- * @return {!Uint8Array}
- */
-proto.PtyCreate.prototype.serializeBinary = function() {
- var writer = new jspb.BinaryWriter();
- proto.PtyCreate.serializeBinaryToWriter(this, writer);
- return writer.getResultBuffer();
-};
-
-
-/**
- * Serializes the given message to binary data (in protobuf wire
- * format), writing to the given BinaryWriter.
- * @param {!proto.PtyCreate} message
- * @param {!jspb.BinaryWriter} writer
- * @suppress {unusedLocalVariables} f is only used for nested messages
- */
-proto.PtyCreate.serializeBinaryToWriter = function(message, writer) {
- var f = undefined;
- f = message.getPath();
- if (f.length > 0) {
- writer.writeString(
- 3,
- f
- );
- }
- f = message.getArgsList();
- if (f.length > 0) {
- writer.writeRepeatedString(
- 4,
- f
- );
- }
- f = message.getCwd();
- if (f.length > 0) {
- writer.writeString(
- 5,
- f
- );
- }
- f = message.getEnv();
- if (f != null) {
- writer.writeMessage(
- 7,
- f,
- google_protobuf_struct_pb.Struct.serializeBinaryToWriter
- );
- }
- f = message.getInitMessage();
- if (f.length > 0) {
- writer.writeString(
- 8,
- f
- );
- }
-};
-
-
-/**
- * optional string path = 3;
- * @return {string}
- */
-proto.PtyCreate.prototype.getPath = function() {
- return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 3, ""));
-};
-
-
-/**
- * @param {string} value
- * @return {!proto.PtyCreate} returns this
- */
-proto.PtyCreate.prototype.setPath = function(value) {
- return jspb.Message.setProto3StringField(this, 3, value);
-};
-
-
-/**
- * repeated string args = 4;
- * @return {!Array}
- */
-proto.PtyCreate.prototype.getArgsList = function() {
- return /** @type {!Array} */ (jspb.Message.getRepeatedField(this, 4));
-};
-
-
-/**
- * @param {!Array} value
- * @return {!proto.PtyCreate} returns this
- */
-proto.PtyCreate.prototype.setArgsList = function(value) {
- return jspb.Message.setField(this, 4, value || []);
-};
-
-
-/**
- * @param {string} value
- * @param {number=} opt_index
- * @return {!proto.PtyCreate} returns this
- */
-proto.PtyCreate.prototype.addArgs = function(value, opt_index) {
- return jspb.Message.addToRepeatedField(this, 4, value, opt_index);
-};
-
-
-/**
- * Clears the list making it empty but non-null.
- * @return {!proto.PtyCreate} returns this
- */
-proto.PtyCreate.prototype.clearArgsList = function() {
- return this.setArgsList([]);
-};
-
-
-/**
- * optional string cwd = 5;
- * @return {string}
- */
-proto.PtyCreate.prototype.getCwd = function() {
- return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 5, ""));
-};
-
-
-/**
- * @param {string} value
- * @return {!proto.PtyCreate} returns this
- */
-proto.PtyCreate.prototype.setCwd = function(value) {
- return jspb.Message.setProto3StringField(this, 5, value);
-};
-
-
-/**
- * optional google.protobuf.Struct env = 7;
- * @return {?proto.google.protobuf.Struct}
- */
-proto.PtyCreate.prototype.getEnv = function() {
- return /** @type{?proto.google.protobuf.Struct} */ (
- jspb.Message.getWrapperField(this, google_protobuf_struct_pb.Struct, 7));
-};
-
-
-/**
- * @param {?proto.google.protobuf.Struct|undefined} value
- * @return {!proto.PtyCreate} returns this
-*/
-proto.PtyCreate.prototype.setEnv = function(value) {
- return jspb.Message.setWrapperField(this, 7, value);
-};
-
-
-/**
- * Clears the message field making it undefined.
- * @return {!proto.PtyCreate} returns this
- */
-proto.PtyCreate.prototype.clearEnv = function() {
- return this.setEnv(undefined);
-};
-
-
-/**
- * Returns whether this field is set.
- * @return {boolean}
- */
-proto.PtyCreate.prototype.hasEnv = function() {
- return jspb.Message.getField(this, 7) != null;
-};
-
-
-/**
- * optional string init_message = 8;
- * @return {string}
- */
-proto.PtyCreate.prototype.getInitMessage = function() {
- return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 8, ""));
-};
-
-
-/**
- * @param {string} value
- * @return {!proto.PtyCreate} returns this
- */
-proto.PtyCreate.prototype.setInitMessage = function(value) {
- return jspb.Message.setProto3StringField(this, 8, value);
-};
-
-
-
-/**
- * Oneof group definitions for this message. Each group defines the field
- * numbers belonging to that group. When of these fields' value is set, all
- * other fields in the group are cleared. During deserialization, if multiple
- * fields are encountered for a group, only the last value seen will be kept.
- * @private {!Array>}
- * @const
- */
-proto.PtyClientEvent.oneofGroups_ = [[2,3,4]];
-
-/**
- * @enum {number}
- */
-proto.PtyClientEvent.EventCase = {
- EVENT_NOT_SET: 0,
- START: 2,
- RESIZE: 3,
- DATA: 4
-};
-
-/**
- * @return {proto.PtyClientEvent.EventCase}
- */
-proto.PtyClientEvent.prototype.getEventCase = function() {
- return /** @type {proto.PtyClientEvent.EventCase} */(jspb.Message.computeOneofCase(this, proto.PtyClientEvent.oneofGroups_[0]));
-};
-
-
-
-if (jspb.Message.GENERATE_TO_OBJECT) {
-/**
- * Creates an object representation of this proto.
- * Field names that are reserved in JavaScript and will be renamed to pb_name.
- * Optional fields that are not set will be set to undefined.
- * To access a reserved field use, foo.pb_, eg, foo.pb_default.
- * For the list of reserved names please see:
- * net/proto2/compiler/js/internal/generator.cc#kKeyword.
- * @param {boolean=} opt_includeInstance Deprecated. whether to include the
- * JSPB instance for transitional soy proto support:
- * http://goto/soy-param-migration
- * @return {!Object}
- */
-proto.PtyClientEvent.prototype.toObject = function(opt_includeInstance) {
- return proto.PtyClientEvent.toObject(opt_includeInstance, this);
-};
-
-
-/**
- * Static version of the {@see toObject} method.
- * @param {boolean|undefined} includeInstance Deprecated. Whether to include
- * the JSPB instance for transitional soy proto support:
- * http://goto/soy-param-migration
- * @param {!proto.PtyClientEvent} msg The msg instance to transform.
- * @return {!Object}
- * @suppress {unusedLocalVariables} f is only used for nested messages
- */
-proto.PtyClientEvent.toObject = function(includeInstance, msg) {
- var f, obj = {
- start: (f = msg.getStart()) && proto.PtyEventStart.toObject(includeInstance, f),
- resize: (f = msg.getResize()) && proto.PtyEventResize.toObject(includeInstance, f),
- data: (f = msg.getData()) && proto.PtyEventData.toObject(includeInstance, f)
- };
-
- if (includeInstance) {
- obj.$jspbMessageInstance = msg;
- }
- return obj;
-};
-}
-
-
-/**
- * Deserializes binary data (in protobuf wire format).
- * @param {jspb.ByteSource} bytes The bytes to deserialize.
- * @return {!proto.PtyClientEvent}
- */
-proto.PtyClientEvent.deserializeBinary = function(bytes) {
- var reader = new jspb.BinaryReader(bytes);
- var msg = new proto.PtyClientEvent;
- return proto.PtyClientEvent.deserializeBinaryFromReader(msg, reader);
-};
-
-
-/**
- * Deserializes binary data (in protobuf wire format) from the
- * given reader into the given message object.
- * @param {!proto.PtyClientEvent} msg The message object to deserialize into.
- * @param {!jspb.BinaryReader} reader The BinaryReader to use.
- * @return {!proto.PtyClientEvent}
- */
-proto.PtyClientEvent.deserializeBinaryFromReader = function(msg, reader) {
- while (reader.nextField()) {
- if (reader.isEndGroup()) {
- break;
- }
- var field = reader.getFieldNumber();
- switch (field) {
- case 2:
- var value = new proto.PtyEventStart;
- reader.readMessage(value,proto.PtyEventStart.deserializeBinaryFromReader);
- msg.setStart(value);
- break;
- case 3:
- var value = new proto.PtyEventResize;
- reader.readMessage(value,proto.PtyEventResize.deserializeBinaryFromReader);
- msg.setResize(value);
- break;
- case 4:
- var value = new proto.PtyEventData;
- reader.readMessage(value,proto.PtyEventData.deserializeBinaryFromReader);
- msg.setData(value);
- break;
- default:
- reader.skipField();
- break;
- }
- }
- return msg;
-};
-
-
-/**
- * Serializes the message to binary data (in protobuf wire format).
- * @return {!Uint8Array}
- */
-proto.PtyClientEvent.prototype.serializeBinary = function() {
- var writer = new jspb.BinaryWriter();
- proto.PtyClientEvent.serializeBinaryToWriter(this, writer);
- return writer.getResultBuffer();
-};
-
-
-/**
- * Serializes the given message to binary data (in protobuf wire
- * format), writing to the given BinaryWriter.
- * @param {!proto.PtyClientEvent} message
- * @param {!jspb.BinaryWriter} writer
- * @suppress {unusedLocalVariables} f is only used for nested messages
- */
-proto.PtyClientEvent.serializeBinaryToWriter = function(message, writer) {
- var f = undefined;
- f = message.getStart();
- if (f != null) {
- writer.writeMessage(
- 2,
- f,
- proto.PtyEventStart.serializeBinaryToWriter
- );
- }
- f = message.getResize();
- if (f != null) {
- writer.writeMessage(
- 3,
- f,
- proto.PtyEventResize.serializeBinaryToWriter
- );
- }
- f = message.getData();
- if (f != null) {
- writer.writeMessage(
- 4,
- f,
- proto.PtyEventData.serializeBinaryToWriter
- );
- }
-};
-
-
-/**
- * optional PtyEventStart start = 2;
- * @return {?proto.PtyEventStart}
- */
-proto.PtyClientEvent.prototype.getStart = function() {
- return /** @type{?proto.PtyEventStart} */ (
- jspb.Message.getWrapperField(this, proto.PtyEventStart, 2));
-};
-
-
-/**
- * @param {?proto.PtyEventStart|undefined} value
- * @return {!proto.PtyClientEvent} returns this
-*/
-proto.PtyClientEvent.prototype.setStart = function(value) {
- return jspb.Message.setOneofWrapperField(this, 2, proto.PtyClientEvent.oneofGroups_[0], value);
-};
-
-
-/**
- * Clears the message field making it undefined.
- * @return {!proto.PtyClientEvent} returns this
- */
-proto.PtyClientEvent.prototype.clearStart = function() {
- return this.setStart(undefined);
-};
-
-
-/**
- * Returns whether this field is set.
- * @return {boolean}
- */
-proto.PtyClientEvent.prototype.hasStart = function() {
- return jspb.Message.getField(this, 2) != null;
-};
-
-
-/**
- * optional PtyEventResize resize = 3;
- * @return {?proto.PtyEventResize}
- */
-proto.PtyClientEvent.prototype.getResize = function() {
- return /** @type{?proto.PtyEventResize} */ (
- jspb.Message.getWrapperField(this, proto.PtyEventResize, 3));
-};
-
-
-/**
- * @param {?proto.PtyEventResize|undefined} value
- * @return {!proto.PtyClientEvent} returns this
-*/
-proto.PtyClientEvent.prototype.setResize = function(value) {
- return jspb.Message.setOneofWrapperField(this, 3, proto.PtyClientEvent.oneofGroups_[0], value);
-};
-
-
-/**
- * Clears the message field making it undefined.
- * @return {!proto.PtyClientEvent} returns this
- */
-proto.PtyClientEvent.prototype.clearResize = function() {
- return this.setResize(undefined);
-};
-
-
-/**
- * Returns whether this field is set.
- * @return {boolean}
- */
-proto.PtyClientEvent.prototype.hasResize = function() {
- return jspb.Message.getField(this, 3) != null;
-};
-
-
-/**
- * optional PtyEventData data = 4;
- * @return {?proto.PtyEventData}
- */
-proto.PtyClientEvent.prototype.getData = function() {
- return /** @type{?proto.PtyEventData} */ (
- jspb.Message.getWrapperField(this, proto.PtyEventData, 4));
-};
-
-
-/**
- * @param {?proto.PtyEventData|undefined} value
- * @return {!proto.PtyClientEvent} returns this
-*/
-proto.PtyClientEvent.prototype.setData = function(value) {
- return jspb.Message.setOneofWrapperField(this, 4, proto.PtyClientEvent.oneofGroups_[0], value);
-};
-
-
-/**
- * Clears the message field making it undefined.
- * @return {!proto.PtyClientEvent} returns this
- */
-proto.PtyClientEvent.prototype.clearData = function() {
- return this.setData(undefined);
-};
-
-
-/**
- * Returns whether this field is set.
- * @return {boolean}
- */
-proto.PtyClientEvent.prototype.hasData = function() {
- return jspb.Message.getField(this, 4) != null;
-};
-
-
-
-/**
- * Oneof group definitions for this message. Each group defines the field
- * numbers belonging to that group. When of these fields' value is set, all
- * other fields in the group are cleared. During deserialization, if multiple
- * fields are encountered for a group, only the last value seen will be kept.
- * @private {!Array>}
- * @const
- */
-proto.PtyServerEvent.oneofGroups_ = [[1,2,3,4,5]];
-
-/**
- * @enum {number}
- */
-proto.PtyServerEvent.EventCase = {
- EVENT_NOT_SET: 0,
- RESIZE: 1,
- DATA: 2,
- OPEN: 3,
- EXIT: 4,
- START_ERROR: 5
-};
-
-/**
- * @return {proto.PtyServerEvent.EventCase}
- */
-proto.PtyServerEvent.prototype.getEventCase = function() {
- return /** @type {proto.PtyServerEvent.EventCase} */(jspb.Message.computeOneofCase(this, proto.PtyServerEvent.oneofGroups_[0]));
-};
-
-
-
-if (jspb.Message.GENERATE_TO_OBJECT) {
-/**
- * Creates an object representation of this proto.
- * Field names that are reserved in JavaScript and will be renamed to pb_name.
- * Optional fields that are not set will be set to undefined.
- * To access a reserved field use, foo.pb_, eg, foo.pb_default.
- * For the list of reserved names please see:
- * net/proto2/compiler/js/internal/generator.cc#kKeyword.
- * @param {boolean=} opt_includeInstance Deprecated. whether to include the
- * JSPB instance for transitional soy proto support:
- * http://goto/soy-param-migration
- * @return {!Object}
- */
-proto.PtyServerEvent.prototype.toObject = function(opt_includeInstance) {
- return proto.PtyServerEvent.toObject(opt_includeInstance, this);
-};
-
-
-/**
- * Static version of the {@see toObject} method.
- * @param {boolean|undefined} includeInstance Deprecated. Whether to include
- * the JSPB instance for transitional soy proto support:
- * http://goto/soy-param-migration
- * @param {!proto.PtyServerEvent} msg The msg instance to transform.
- * @return {!Object}
- * @suppress {unusedLocalVariables} f is only used for nested messages
- */
-proto.PtyServerEvent.toObject = function(includeInstance, msg) {
- var f, obj = {
- resize: (f = msg.getResize()) && proto.PtyEventResize.toObject(includeInstance, f),
- data: (f = msg.getData()) && proto.PtyEventData.toObject(includeInstance, f),
- open: (f = msg.getOpen()) && proto.PtyEventOpen.toObject(includeInstance, f),
- exit: (f = msg.getExit()) && proto.PtyEventExit.toObject(includeInstance, f),
- startError: (f = msg.getStartError()) && proto.PtyEventStartError.toObject(includeInstance, f)
- };
-
- if (includeInstance) {
- obj.$jspbMessageInstance = msg;
- }
- return obj;
-};
-}
-
-
-/**
- * Deserializes binary data (in protobuf wire format).
- * @param {jspb.ByteSource} bytes The bytes to deserialize.
- * @return {!proto.PtyServerEvent}
- */
-proto.PtyServerEvent.deserializeBinary = function(bytes) {
- var reader = new jspb.BinaryReader(bytes);
- var msg = new proto.PtyServerEvent;
- return proto.PtyServerEvent.deserializeBinaryFromReader(msg, reader);
-};
-
-
-/**
- * Deserializes binary data (in protobuf wire format) from the
- * given reader into the given message object.
- * @param {!proto.PtyServerEvent} msg The message object to deserialize into.
- * @param {!jspb.BinaryReader} reader The BinaryReader to use.
- * @return {!proto.PtyServerEvent}
- */
-proto.PtyServerEvent.deserializeBinaryFromReader = function(msg, reader) {
- while (reader.nextField()) {
- if (reader.isEndGroup()) {
- break;
- }
- var field = reader.getFieldNumber();
- switch (field) {
- case 1:
- var value = new proto.PtyEventResize;
- reader.readMessage(value,proto.PtyEventResize.deserializeBinaryFromReader);
- msg.setResize(value);
- break;
- case 2:
- var value = new proto.PtyEventData;
- reader.readMessage(value,proto.PtyEventData.deserializeBinaryFromReader);
- msg.setData(value);
- break;
- case 3:
- var value = new proto.PtyEventOpen;
- reader.readMessage(value,proto.PtyEventOpen.deserializeBinaryFromReader);
- msg.setOpen(value);
- break;
- case 4:
- var value = new proto.PtyEventExit;
- reader.readMessage(value,proto.PtyEventExit.deserializeBinaryFromReader);
- msg.setExit(value);
- break;
- case 5:
- var value = new proto.PtyEventStartError;
- reader.readMessage(value,proto.PtyEventStartError.deserializeBinaryFromReader);
- msg.setStartError(value);
- break;
- default:
- reader.skipField();
- break;
- }
- }
- return msg;
-};
-
-
-/**
- * Serializes the message to binary data (in protobuf wire format).
- * @return {!Uint8Array}
- */
-proto.PtyServerEvent.prototype.serializeBinary = function() {
- var writer = new jspb.BinaryWriter();
- proto.PtyServerEvent.serializeBinaryToWriter(this, writer);
- return writer.getResultBuffer();
-};
-
-
-/**
- * Serializes the given message to binary data (in protobuf wire
- * format), writing to the given BinaryWriter.
- * @param {!proto.PtyServerEvent} message
- * @param {!jspb.BinaryWriter} writer
- * @suppress {unusedLocalVariables} f is only used for nested messages
- */
-proto.PtyServerEvent.serializeBinaryToWriter = function(message, writer) {
- var f = undefined;
- f = message.getResize();
- if (f != null) {
- writer.writeMessage(
- 1,
- f,
- proto.PtyEventResize.serializeBinaryToWriter
- );
- }
- f = message.getData();
- if (f != null) {
- writer.writeMessage(
- 2,
- f,
- proto.PtyEventData.serializeBinaryToWriter
- );
- }
- f = message.getOpen();
- if (f != null) {
- writer.writeMessage(
- 3,
- f,
- proto.PtyEventOpen.serializeBinaryToWriter
- );
- }
- f = message.getExit();
- if (f != null) {
- writer.writeMessage(
- 4,
- f,
- proto.PtyEventExit.serializeBinaryToWriter
- );
- }
- f = message.getStartError();
- if (f != null) {
- writer.writeMessage(
- 5,
- f,
- proto.PtyEventStartError.serializeBinaryToWriter
- );
- }
-};
-
-
-/**
- * optional PtyEventResize resize = 1;
- * @return {?proto.PtyEventResize}
- */
-proto.PtyServerEvent.prototype.getResize = function() {
- return /** @type{?proto.PtyEventResize} */ (
- jspb.Message.getWrapperField(this, proto.PtyEventResize, 1));
-};
-
-
-/**
- * @param {?proto.PtyEventResize|undefined} value
- * @return {!proto.PtyServerEvent} returns this
-*/
-proto.PtyServerEvent.prototype.setResize = function(value) {
- return jspb.Message.setOneofWrapperField(this, 1, proto.PtyServerEvent.oneofGroups_[0], value);
-};
-
-
-/**
- * Clears the message field making it undefined.
- * @return {!proto.PtyServerEvent} returns this
- */
-proto.PtyServerEvent.prototype.clearResize = function() {
- return this.setResize(undefined);
-};
-
-
-/**
- * Returns whether this field is set.
- * @return {boolean}
- */
-proto.PtyServerEvent.prototype.hasResize = function() {
- return jspb.Message.getField(this, 1) != null;
-};
-
-
-/**
- * optional PtyEventData data = 2;
- * @return {?proto.PtyEventData}
- */
-proto.PtyServerEvent.prototype.getData = function() {
- return /** @type{?proto.PtyEventData} */ (
- jspb.Message.getWrapperField(this, proto.PtyEventData, 2));
-};
-
-
-/**
- * @param {?proto.PtyEventData|undefined} value
- * @return {!proto.PtyServerEvent} returns this
-*/
-proto.PtyServerEvent.prototype.setData = function(value) {
- return jspb.Message.setOneofWrapperField(this, 2, proto.PtyServerEvent.oneofGroups_[0], value);
-};
-
-
-/**
- * Clears the message field making it undefined.
- * @return {!proto.PtyServerEvent} returns this
- */
-proto.PtyServerEvent.prototype.clearData = function() {
- return this.setData(undefined);
-};
-
-
-/**
- * Returns whether this field is set.
- * @return {boolean}
- */
-proto.PtyServerEvent.prototype.hasData = function() {
- return jspb.Message.getField(this, 2) != null;
-};
-
-
-/**
- * optional PtyEventOpen open = 3;
- * @return {?proto.PtyEventOpen}
- */
-proto.PtyServerEvent.prototype.getOpen = function() {
- return /** @type{?proto.PtyEventOpen} */ (
- jspb.Message.getWrapperField(this, proto.PtyEventOpen, 3));
-};
-
-
-/**
- * @param {?proto.PtyEventOpen|undefined} value
- * @return {!proto.PtyServerEvent} returns this
-*/
-proto.PtyServerEvent.prototype.setOpen = function(value) {
- return jspb.Message.setOneofWrapperField(this, 3, proto.PtyServerEvent.oneofGroups_[0], value);
-};
-
-
-/**
- * Clears the message field making it undefined.
- * @return {!proto.PtyServerEvent} returns this
- */
-proto.PtyServerEvent.prototype.clearOpen = function() {
- return this.setOpen(undefined);
-};
-
-
-/**
- * Returns whether this field is set.
- * @return {boolean}
- */
-proto.PtyServerEvent.prototype.hasOpen = function() {
- return jspb.Message.getField(this, 3) != null;
-};
-
-
-/**
- * optional PtyEventExit exit = 4;
- * @return {?proto.PtyEventExit}
- */
-proto.PtyServerEvent.prototype.getExit = function() {
- return /** @type{?proto.PtyEventExit} */ (
- jspb.Message.getWrapperField(this, proto.PtyEventExit, 4));
-};
-
-
-/**
- * @param {?proto.PtyEventExit|undefined} value
- * @return {!proto.PtyServerEvent} returns this
-*/
-proto.PtyServerEvent.prototype.setExit = function(value) {
- return jspb.Message.setOneofWrapperField(this, 4, proto.PtyServerEvent.oneofGroups_[0], value);
-};
-
-
-/**
- * Clears the message field making it undefined.
- * @return {!proto.PtyServerEvent} returns this
- */
-proto.PtyServerEvent.prototype.clearExit = function() {
- return this.setExit(undefined);
-};
-
-
-/**
- * Returns whether this field is set.
- * @return {boolean}
- */
-proto.PtyServerEvent.prototype.hasExit = function() {
- return jspb.Message.getField(this, 4) != null;
-};
-
-
-/**
- * optional PtyEventStartError start_error = 5;
- * @return {?proto.PtyEventStartError}
- */
-proto.PtyServerEvent.prototype.getStartError = function() {
- return /** @type{?proto.PtyEventStartError} */ (
- jspb.Message.getWrapperField(this, proto.PtyEventStartError, 5));
-};
-
-
-/**
- * @param {?proto.PtyEventStartError|undefined} value
- * @return {!proto.PtyServerEvent} returns this
-*/
-proto.PtyServerEvent.prototype.setStartError = function(value) {
- return jspb.Message.setOneofWrapperField(this, 5, proto.PtyServerEvent.oneofGroups_[0], value);
-};
-
-
-/**
- * Clears the message field making it undefined.
- * @return {!proto.PtyServerEvent} returns this
- */
-proto.PtyServerEvent.prototype.clearStartError = function() {
- return this.setStartError(undefined);
-};
-
-
-/**
- * Returns whether this field is set.
- * @return {boolean}
- */
-proto.PtyServerEvent.prototype.hasStartError = function() {
- return jspb.Message.getField(this, 5) != null;
-};
-
-
-
-
-
-if (jspb.Message.GENERATE_TO_OBJECT) {
-/**
- * Creates an object representation of this proto.
- * Field names that are reserved in JavaScript and will be renamed to pb_name.
- * Optional fields that are not set will be set to undefined.
- * To access a reserved field use, foo.pb_, eg, foo.pb_default.
- * For the list of reserved names please see:
- * net/proto2/compiler/js/internal/generator.cc#kKeyword.
- * @param {boolean=} opt_includeInstance Deprecated. whether to include the
- * JSPB instance for transitional soy proto support:
- * http://goto/soy-param-migration
- * @return {!Object}
- */
-proto.PtyEventStart.prototype.toObject = function(opt_includeInstance) {
- return proto.PtyEventStart.toObject(opt_includeInstance, this);
-};
-
-
-/**
- * Static version of the {@see toObject} method.
- * @param {boolean|undefined} includeInstance Deprecated. Whether to include
- * the JSPB instance for transitional soy proto support:
- * http://goto/soy-param-migration
- * @param {!proto.PtyEventStart} msg The msg instance to transform.
- * @return {!Object}
- * @suppress {unusedLocalVariables} f is only used for nested messages
- */
-proto.PtyEventStart.toObject = function(includeInstance, msg) {
- var f, obj = {
- columns: jspb.Message.getFieldWithDefault(msg, 2, 0),
- rows: jspb.Message.getFieldWithDefault(msg, 3, 0)
- };
-
- if (includeInstance) {
- obj.$jspbMessageInstance = msg;
- }
- return obj;
-};
-}
-
-
-/**
- * Deserializes binary data (in protobuf wire format).
- * @param {jspb.ByteSource} bytes The bytes to deserialize.
- * @return {!proto.PtyEventStart}
- */
-proto.PtyEventStart.deserializeBinary = function(bytes) {
- var reader = new jspb.BinaryReader(bytes);
- var msg = new proto.PtyEventStart;
- return proto.PtyEventStart.deserializeBinaryFromReader(msg, reader);
-};
-
-
-/**
- * Deserializes binary data (in protobuf wire format) from the
- * given reader into the given message object.
- * @param {!proto.PtyEventStart} msg The message object to deserialize into.
- * @param {!jspb.BinaryReader} reader The BinaryReader to use.
- * @return {!proto.PtyEventStart}
- */
-proto.PtyEventStart.deserializeBinaryFromReader = function(msg, reader) {
- while (reader.nextField()) {
- if (reader.isEndGroup()) {
- break;
- }
- var field = reader.getFieldNumber();
- switch (field) {
- case 2:
- var value = /** @type {number} */ (reader.readUint32());
- msg.setColumns(value);
- break;
- case 3:
- var value = /** @type {number} */ (reader.readUint32());
- msg.setRows(value);
- break;
- default:
- reader.skipField();
- break;
- }
- }
- return msg;
-};
-
-
-/**
- * Serializes the message to binary data (in protobuf wire format).
- * @return {!Uint8Array}
- */
-proto.PtyEventStart.prototype.serializeBinary = function() {
- var writer = new jspb.BinaryWriter();
- proto.PtyEventStart.serializeBinaryToWriter(this, writer);
- return writer.getResultBuffer();
-};
-
-
-/**
- * Serializes the given message to binary data (in protobuf wire
- * format), writing to the given BinaryWriter.
- * @param {!proto.PtyEventStart} message
- * @param {!jspb.BinaryWriter} writer
- * @suppress {unusedLocalVariables} f is only used for nested messages
- */
-proto.PtyEventStart.serializeBinaryToWriter = function(message, writer) {
- var f = undefined;
- f = message.getColumns();
- if (f !== 0) {
- writer.writeUint32(
- 2,
- f
- );
- }
- f = message.getRows();
- if (f !== 0) {
- writer.writeUint32(
- 3,
- f
- );
- }
-};
-
-
-/**
- * optional uint32 columns = 2;
- * @return {number}
- */
-proto.PtyEventStart.prototype.getColumns = function() {
- return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 2, 0));
-};
-
-
-/**
- * @param {number} value
- * @return {!proto.PtyEventStart} returns this
- */
-proto.PtyEventStart.prototype.setColumns = function(value) {
- return jspb.Message.setProto3IntField(this, 2, value);
-};
-
-
-/**
- * optional uint32 rows = 3;
- * @return {number}
- */
-proto.PtyEventStart.prototype.getRows = function() {
- return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 3, 0));
-};
-
-
-/**
- * @param {number} value
- * @return {!proto.PtyEventStart} returns this
- */
-proto.PtyEventStart.prototype.setRows = function(value) {
- return jspb.Message.setProto3IntField(this, 3, value);
-};
-
-
-
-
-
-if (jspb.Message.GENERATE_TO_OBJECT) {
-/**
- * Creates an object representation of this proto.
- * Field names that are reserved in JavaScript and will be renamed to pb_name.
- * Optional fields that are not set will be set to undefined.
- * To access a reserved field use, foo.pb_, eg, foo.pb_default.
- * For the list of reserved names please see:
- * net/proto2/compiler/js/internal/generator.cc#kKeyword.
- * @param {boolean=} opt_includeInstance Deprecated. whether to include the
- * JSPB instance for transitional soy proto support:
- * http://goto/soy-param-migration
- * @return {!Object}
- */
-proto.PtyEventData.prototype.toObject = function(opt_includeInstance) {
- return proto.PtyEventData.toObject(opt_includeInstance, this);
-};
-
-
-/**
- * Static version of the {@see toObject} method.
- * @param {boolean|undefined} includeInstance Deprecated. Whether to include
- * the JSPB instance for transitional soy proto support:
- * http://goto/soy-param-migration
- * @param {!proto.PtyEventData} msg The msg instance to transform.
- * @return {!Object}
- * @suppress {unusedLocalVariables} f is only used for nested messages
- */
-proto.PtyEventData.toObject = function(includeInstance, msg) {
- var f, obj = {
- message: jspb.Message.getFieldWithDefault(msg, 2, "")
- };
-
- if (includeInstance) {
- obj.$jspbMessageInstance = msg;
- }
- return obj;
-};
-}
-
-
-/**
- * Deserializes binary data (in protobuf wire format).
- * @param {jspb.ByteSource} bytes The bytes to deserialize.
- * @return {!proto.PtyEventData}
- */
-proto.PtyEventData.deserializeBinary = function(bytes) {
- var reader = new jspb.BinaryReader(bytes);
- var msg = new proto.PtyEventData;
- return proto.PtyEventData.deserializeBinaryFromReader(msg, reader);
-};
-
-
-/**
- * Deserializes binary data (in protobuf wire format) from the
- * given reader into the given message object.
- * @param {!proto.PtyEventData} msg The message object to deserialize into.
- * @param {!jspb.BinaryReader} reader The BinaryReader to use.
- * @return {!proto.PtyEventData}
- */
-proto.PtyEventData.deserializeBinaryFromReader = function(msg, reader) {
- while (reader.nextField()) {
- if (reader.isEndGroup()) {
- break;
- }
- var field = reader.getFieldNumber();
- switch (field) {
- case 2:
- var value = /** @type {string} */ (reader.readString());
- msg.setMessage(value);
- break;
- default:
- reader.skipField();
- break;
- }
- }
- return msg;
-};
-
-
-/**
- * Serializes the message to binary data (in protobuf wire format).
- * @return {!Uint8Array}
- */
-proto.PtyEventData.prototype.serializeBinary = function() {
- var writer = new jspb.BinaryWriter();
- proto.PtyEventData.serializeBinaryToWriter(this, writer);
- return writer.getResultBuffer();
-};
-
-
-/**
- * Serializes the given message to binary data (in protobuf wire
- * format), writing to the given BinaryWriter.
- * @param {!proto.PtyEventData} message
- * @param {!jspb.BinaryWriter} writer
- * @suppress {unusedLocalVariables} f is only used for nested messages
- */
-proto.PtyEventData.serializeBinaryToWriter = function(message, writer) {
- var f = undefined;
- f = message.getMessage();
- if (f.length > 0) {
- writer.writeString(
- 2,
- f
- );
- }
-};
-
-
-/**
- * optional string message = 2;
- * @return {string}
- */
-proto.PtyEventData.prototype.getMessage = function() {
- return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 2, ""));
-};
-
-
-/**
- * @param {string} value
- * @return {!proto.PtyEventData} returns this
- */
-proto.PtyEventData.prototype.setMessage = function(value) {
- return jspb.Message.setProto3StringField(this, 2, value);
-};
-
-
-
-
-
-if (jspb.Message.GENERATE_TO_OBJECT) {
-/**
- * Creates an object representation of this proto.
- * Field names that are reserved in JavaScript and will be renamed to pb_name.
- * Optional fields that are not set will be set to undefined.
- * To access a reserved field use, foo.pb_, eg, foo.pb_default.
- * For the list of reserved names please see:
- * net/proto2/compiler/js/internal/generator.cc#kKeyword.
- * @param {boolean=} opt_includeInstance Deprecated. whether to include the
- * JSPB instance for transitional soy proto support:
- * http://goto/soy-param-migration
- * @return {!Object}
- */
-proto.PtyEventResize.prototype.toObject = function(opt_includeInstance) {
- return proto.PtyEventResize.toObject(opt_includeInstance, this);
-};
-
-
-/**
- * Static version of the {@see toObject} method.
- * @param {boolean|undefined} includeInstance Deprecated. Whether to include
- * the JSPB instance for transitional soy proto support:
- * http://goto/soy-param-migration
- * @param {!proto.PtyEventResize} msg The msg instance to transform.
- * @return {!Object}
- * @suppress {unusedLocalVariables} f is only used for nested messages
- */
-proto.PtyEventResize.toObject = function(includeInstance, msg) {
- var f, obj = {
- columns: jspb.Message.getFieldWithDefault(msg, 2, 0),
- rows: jspb.Message.getFieldWithDefault(msg, 3, 0)
- };
-
- if (includeInstance) {
- obj.$jspbMessageInstance = msg;
- }
- return obj;
-};
-}
-
-
-/**
- * Deserializes binary data (in protobuf wire format).
- * @param {jspb.ByteSource} bytes The bytes to deserialize.
- * @return {!proto.PtyEventResize}
- */
-proto.PtyEventResize.deserializeBinary = function(bytes) {
- var reader = new jspb.BinaryReader(bytes);
- var msg = new proto.PtyEventResize;
- return proto.PtyEventResize.deserializeBinaryFromReader(msg, reader);
-};
-
-
-/**
- * Deserializes binary data (in protobuf wire format) from the
- * given reader into the given message object.
- * @param {!proto.PtyEventResize} msg The message object to deserialize into.
- * @param {!jspb.BinaryReader} reader The BinaryReader to use.
- * @return {!proto.PtyEventResize}
- */
-proto.PtyEventResize.deserializeBinaryFromReader = function(msg, reader) {
- while (reader.nextField()) {
- if (reader.isEndGroup()) {
- break;
- }
- var field = reader.getFieldNumber();
- switch (field) {
- case 2:
- var value = /** @type {number} */ (reader.readUint32());
- msg.setColumns(value);
- break;
- case 3:
- var value = /** @type {number} */ (reader.readUint32());
- msg.setRows(value);
- break;
- default:
- reader.skipField();
- break;
- }
- }
- return msg;
-};
-
-
-/**
- * Serializes the message to binary data (in protobuf wire format).
- * @return {!Uint8Array}
- */
-proto.PtyEventResize.prototype.serializeBinary = function() {
- var writer = new jspb.BinaryWriter();
- proto.PtyEventResize.serializeBinaryToWriter(this, writer);
- return writer.getResultBuffer();
-};
-
-
-/**
- * Serializes the given message to binary data (in protobuf wire
- * format), writing to the given BinaryWriter.
- * @param {!proto.PtyEventResize} message
- * @param {!jspb.BinaryWriter} writer
- * @suppress {unusedLocalVariables} f is only used for nested messages
- */
-proto.PtyEventResize.serializeBinaryToWriter = function(message, writer) {
- var f = undefined;
- f = message.getColumns();
- if (f !== 0) {
- writer.writeUint32(
- 2,
- f
- );
- }
- f = message.getRows();
- if (f !== 0) {
- writer.writeUint32(
- 3,
- f
- );
- }
-};
-
-
-/**
- * optional uint32 columns = 2;
- * @return {number}
- */
-proto.PtyEventResize.prototype.getColumns = function() {
- return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 2, 0));
-};
-
-
-/**
- * @param {number} value
- * @return {!proto.PtyEventResize} returns this
- */
-proto.PtyEventResize.prototype.setColumns = function(value) {
- return jspb.Message.setProto3IntField(this, 2, value);
-};
-
-
-/**
- * optional uint32 rows = 3;
- * @return {number}
- */
-proto.PtyEventResize.prototype.getRows = function() {
- return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 3, 0));
-};
-
-
-/**
- * @param {number} value
- * @return {!proto.PtyEventResize} returns this
- */
-proto.PtyEventResize.prototype.setRows = function(value) {
- return jspb.Message.setProto3IntField(this, 3, value);
-};
-
-
-
-
-
-if (jspb.Message.GENERATE_TO_OBJECT) {
-/**
- * Creates an object representation of this proto.
- * Field names that are reserved in JavaScript and will be renamed to pb_name.
- * Optional fields that are not set will be set to undefined.
- * To access a reserved field use, foo.pb_, eg, foo.pb_default.
- * For the list of reserved names please see:
- * net/proto2/compiler/js/internal/generator.cc#kKeyword.
- * @param {boolean=} opt_includeInstance Deprecated. whether to include the
- * JSPB instance for transitional soy proto support:
- * http://goto/soy-param-migration
- * @return {!Object}
- */
-proto.PtyEventOpen.prototype.toObject = function(opt_includeInstance) {
- return proto.PtyEventOpen.toObject(opt_includeInstance, this);
-};
-
-
-/**
- * Static version of the {@see toObject} method.
- * @param {boolean|undefined} includeInstance Deprecated. Whether to include
- * the JSPB instance for transitional soy proto support:
- * http://goto/soy-param-migration
- * @param {!proto.PtyEventOpen} msg The msg instance to transform.
- * @return {!Object}
- * @suppress {unusedLocalVariables} f is only used for nested messages
- */
-proto.PtyEventOpen.toObject = function(includeInstance, msg) {
- var f, obj = {
-
- };
-
- if (includeInstance) {
- obj.$jspbMessageInstance = msg;
- }
- return obj;
-};
-}
-
-
-/**
- * Deserializes binary data (in protobuf wire format).
- * @param {jspb.ByteSource} bytes The bytes to deserialize.
- * @return {!proto.PtyEventOpen}
- */
-proto.PtyEventOpen.deserializeBinary = function(bytes) {
- var reader = new jspb.BinaryReader(bytes);
- var msg = new proto.PtyEventOpen;
- return proto.PtyEventOpen.deserializeBinaryFromReader(msg, reader);
-};
-
-
-/**
- * Deserializes binary data (in protobuf wire format) from the
- * given reader into the given message object.
- * @param {!proto.PtyEventOpen} msg The message object to deserialize into.
- * @param {!jspb.BinaryReader} reader The BinaryReader to use.
- * @return {!proto.PtyEventOpen}
- */
-proto.PtyEventOpen.deserializeBinaryFromReader = function(msg, reader) {
- while (reader.nextField()) {
- if (reader.isEndGroup()) {
- break;
- }
- var field = reader.getFieldNumber();
- switch (field) {
- default:
- reader.skipField();
- break;
- }
- }
- return msg;
-};
-
-
-/**
- * Serializes the message to binary data (in protobuf wire format).
- * @return {!Uint8Array}
- */
-proto.PtyEventOpen.prototype.serializeBinary = function() {
- var writer = new jspb.BinaryWriter();
- proto.PtyEventOpen.serializeBinaryToWriter(this, writer);
- return writer.getResultBuffer();
-};
-
-
-/**
- * Serializes the given message to binary data (in protobuf wire
- * format), writing to the given BinaryWriter.
- * @param {!proto.PtyEventOpen} message
- * @param {!jspb.BinaryWriter} writer
- * @suppress {unusedLocalVariables} f is only used for nested messages
- */
-proto.PtyEventOpen.serializeBinaryToWriter = function(message, writer) {
- var f = undefined;
-};
-
-
-
-
-
-if (jspb.Message.GENERATE_TO_OBJECT) {
-/**
- * Creates an object representation of this proto.
- * Field names that are reserved in JavaScript and will be renamed to pb_name.
- * Optional fields that are not set will be set to undefined.
- * To access a reserved field use, foo.pb_, eg, foo.pb_default.
- * For the list of reserved names please see:
- * net/proto2/compiler/js/internal/generator.cc#kKeyword.
- * @param {boolean=} opt_includeInstance Deprecated. whether to include the
- * JSPB instance for transitional soy proto support:
- * http://goto/soy-param-migration
- * @return {!Object}
- */
-proto.PtyEventExit.prototype.toObject = function(opt_includeInstance) {
- return proto.PtyEventExit.toObject(opt_includeInstance, this);
-};
-
-
-/**
- * Static version of the {@see toObject} method.
- * @param {boolean|undefined} includeInstance Deprecated. Whether to include
- * the JSPB instance for transitional soy proto support:
- * http://goto/soy-param-migration
- * @param {!proto.PtyEventExit} msg The msg instance to transform.
- * @return {!Object}
- * @suppress {unusedLocalVariables} f is only used for nested messages
- */
-proto.PtyEventExit.toObject = function(includeInstance, msg) {
- var f, obj = {
- exitCode: jspb.Message.getFieldWithDefault(msg, 1, 0),
- signal: jspb.Message.getFieldWithDefault(msg, 2, 0)
- };
-
- if (includeInstance) {
- obj.$jspbMessageInstance = msg;
- }
- return obj;
-};
-}
-
-
-/**
- * Deserializes binary data (in protobuf wire format).
- * @param {jspb.ByteSource} bytes The bytes to deserialize.
- * @return {!proto.PtyEventExit}
- */
-proto.PtyEventExit.deserializeBinary = function(bytes) {
- var reader = new jspb.BinaryReader(bytes);
- var msg = new proto.PtyEventExit;
- return proto.PtyEventExit.deserializeBinaryFromReader(msg, reader);
-};
-
-
-/**
- * Deserializes binary data (in protobuf wire format) from the
- * given reader into the given message object.
- * @param {!proto.PtyEventExit} msg The message object to deserialize into.
- * @param {!jspb.BinaryReader} reader The BinaryReader to use.
- * @return {!proto.PtyEventExit}
- */
-proto.PtyEventExit.deserializeBinaryFromReader = function(msg, reader) {
- while (reader.nextField()) {
- if (reader.isEndGroup()) {
- break;
- }
- var field = reader.getFieldNumber();
- switch (field) {
- case 1:
- var value = /** @type {number} */ (reader.readUint32());
- msg.setExitCode(value);
- break;
- case 2:
- var value = /** @type {number} */ (reader.readUint32());
- msg.setSignal(value);
- break;
- default:
- reader.skipField();
- break;
- }
- }
- return msg;
-};
-
-
-/**
- * Serializes the message to binary data (in protobuf wire format).
- * @return {!Uint8Array}
- */
-proto.PtyEventExit.prototype.serializeBinary = function() {
- var writer = new jspb.BinaryWriter();
- proto.PtyEventExit.serializeBinaryToWriter(this, writer);
- return writer.getResultBuffer();
-};
-
-
-/**
- * Serializes the given message to binary data (in protobuf wire
- * format), writing to the given BinaryWriter.
- * @param {!proto.PtyEventExit} message
- * @param {!jspb.BinaryWriter} writer
- * @suppress {unusedLocalVariables} f is only used for nested messages
- */
-proto.PtyEventExit.serializeBinaryToWriter = function(message, writer) {
- var f = undefined;
- f = message.getExitCode();
- if (f !== 0) {
- writer.writeUint32(
- 1,
- f
- );
- }
- f = /** @type {number} */ (jspb.Message.getField(message, 2));
- if (f != null) {
- writer.writeUint32(
- 2,
- f
- );
- }
-};
-
-
-/**
- * optional uint32 exit_code = 1;
- * @return {number}
- */
-proto.PtyEventExit.prototype.getExitCode = function() {
- return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 1, 0));
-};
-
-
-/**
- * @param {number} value
- * @return {!proto.PtyEventExit} returns this
- */
-proto.PtyEventExit.prototype.setExitCode = function(value) {
- return jspb.Message.setProto3IntField(this, 1, value);
-};
-
-
-/**
- * optional uint32 signal = 2;
- * @return {number}
- */
-proto.PtyEventExit.prototype.getSignal = function() {
- return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 2, 0));
-};
-
-
-/**
- * @param {number} value
- * @return {!proto.PtyEventExit} returns this
- */
-proto.PtyEventExit.prototype.setSignal = function(value) {
- return jspb.Message.setField(this, 2, value);
-};
-
-
-/**
- * Clears the field making it undefined.
- * @return {!proto.PtyEventExit} returns this
- */
-proto.PtyEventExit.prototype.clearSignal = function() {
- return jspb.Message.setField(this, 2, undefined);
-};
-
-
-/**
- * Returns whether this field is set.
- * @return {boolean}
- */
-proto.PtyEventExit.prototype.hasSignal = function() {
- return jspb.Message.getField(this, 2) != null;
-};
-
-
-
-
-
-if (jspb.Message.GENERATE_TO_OBJECT) {
-/**
- * Creates an object representation of this proto.
- * Field names that are reserved in JavaScript and will be renamed to pb_name.
- * Optional fields that are not set will be set to undefined.
- * To access a reserved field use, foo.pb_, eg, foo.pb_default.
- * For the list of reserved names please see:
- * net/proto2/compiler/js/internal/generator.cc#kKeyword.
- * @param {boolean=} opt_includeInstance Deprecated. whether to include the
- * JSPB instance for transitional soy proto support:
- * http://goto/soy-param-migration
- * @return {!Object}
- */
-proto.PtyEventStartError.prototype.toObject = function(opt_includeInstance) {
- return proto.PtyEventStartError.toObject(opt_includeInstance, this);
-};
-
-
-/**
- * Static version of the {@see toObject} method.
- * @param {boolean|undefined} includeInstance Deprecated. Whether to include
- * the JSPB instance for transitional soy proto support:
- * http://goto/soy-param-migration
- * @param {!proto.PtyEventStartError} msg The msg instance to transform.
- * @return {!Object}
- * @suppress {unusedLocalVariables} f is only used for nested messages
- */
-proto.PtyEventStartError.toObject = function(includeInstance, msg) {
- var f, obj = {
- message: jspb.Message.getFieldWithDefault(msg, 1, "")
- };
-
- if (includeInstance) {
- obj.$jspbMessageInstance = msg;
- }
- return obj;
-};
-}
-
-
-/**
- * Deserializes binary data (in protobuf wire format).
- * @param {jspb.ByteSource} bytes The bytes to deserialize.
- * @return {!proto.PtyEventStartError}
- */
-proto.PtyEventStartError.deserializeBinary = function(bytes) {
- var reader = new jspb.BinaryReader(bytes);
- var msg = new proto.PtyEventStartError;
- return proto.PtyEventStartError.deserializeBinaryFromReader(msg, reader);
-};
-
-
-/**
- * Deserializes binary data (in protobuf wire format) from the
- * given reader into the given message object.
- * @param {!proto.PtyEventStartError} msg The message object to deserialize into.
- * @param {!jspb.BinaryReader} reader The BinaryReader to use.
- * @return {!proto.PtyEventStartError}
- */
-proto.PtyEventStartError.deserializeBinaryFromReader = function(msg, reader) {
- while (reader.nextField()) {
- if (reader.isEndGroup()) {
- break;
- }
- var field = reader.getFieldNumber();
- switch (field) {
- case 1:
- var value = /** @type {string} */ (reader.readString());
- msg.setMessage(value);
- break;
- default:
- reader.skipField();
- break;
- }
- }
- return msg;
-};
-
-
-/**
- * Serializes the message to binary data (in protobuf wire format).
- * @return {!Uint8Array}
- */
-proto.PtyEventStartError.prototype.serializeBinary = function() {
- var writer = new jspb.BinaryWriter();
- proto.PtyEventStartError.serializeBinaryToWriter(this, writer);
- return writer.getResultBuffer();
-};
-
-
-/**
- * Serializes the given message to binary data (in protobuf wire
- * format), writing to the given BinaryWriter.
- * @param {!proto.PtyEventStartError} message
- * @param {!jspb.BinaryWriter} writer
- * @suppress {unusedLocalVariables} f is only used for nested messages
- */
-proto.PtyEventStartError.serializeBinaryToWriter = function(message, writer) {
- var f = undefined;
- f = message.getMessage();
- if (f.length > 0) {
- writer.writeString(
- 1,
- f
- );
- }
-};
-
-
-/**
- * optional string message = 1;
- * @return {string}
- */
-proto.PtyEventStartError.prototype.getMessage = function() {
- return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, ""));
-};
-
-
-/**
- * @param {string} value
- * @return {!proto.PtyEventStartError} returns this
- */
-proto.PtyEventStartError.prototype.setMessage = function(value) {
- return jspb.Message.setProto3StringField(this, 1, value);
-};
-
-
-
-
-
-if (jspb.Message.GENERATE_TO_OBJECT) {
-/**
- * Creates an object representation of this proto.
- * Field names that are reserved in JavaScript and will be renamed to pb_name.
- * Optional fields that are not set will be set to undefined.
- * To access a reserved field use, foo.pb_, eg, foo.pb_default.
- * For the list of reserved names please see:
- * net/proto2/compiler/js/internal/generator.cc#kKeyword.
- * @param {boolean=} opt_includeInstance Deprecated. whether to include the
- * JSPB instance for transitional soy proto support:
- * http://goto/soy-param-migration
- * @return {!Object}
- */
-proto.PtyCwd.prototype.toObject = function(opt_includeInstance) {
- return proto.PtyCwd.toObject(opt_includeInstance, this);
-};
-
-
-/**
- * Static version of the {@see toObject} method.
- * @param {boolean|undefined} includeInstance Deprecated. Whether to include
- * the JSPB instance for transitional soy proto support:
- * http://goto/soy-param-migration
- * @param {!proto.PtyCwd} msg The msg instance to transform.
- * @return {!Object}
- * @suppress {unusedLocalVariables} f is only used for nested messages
- */
-proto.PtyCwd.toObject = function(includeInstance, msg) {
- var f, obj = {
- cwd: jspb.Message.getFieldWithDefault(msg, 1, "")
- };
-
- if (includeInstance) {
- obj.$jspbMessageInstance = msg;
- }
- return obj;
-};
-}
-
-
-/**
- * Deserializes binary data (in protobuf wire format).
- * @param {jspb.ByteSource} bytes The bytes to deserialize.
- * @return {!proto.PtyCwd}
- */
-proto.PtyCwd.deserializeBinary = function(bytes) {
- var reader = new jspb.BinaryReader(bytes);
- var msg = new proto.PtyCwd;
- return proto.PtyCwd.deserializeBinaryFromReader(msg, reader);
-};
-
-
-/**
- * Deserializes binary data (in protobuf wire format) from the
- * given reader into the given message object.
- * @param {!proto.PtyCwd} msg The message object to deserialize into.
- * @param {!jspb.BinaryReader} reader The BinaryReader to use.
- * @return {!proto.PtyCwd}
- */
-proto.PtyCwd.deserializeBinaryFromReader = function(msg, reader) {
- while (reader.nextField()) {
- if (reader.isEndGroup()) {
- break;
- }
- var field = reader.getFieldNumber();
- switch (field) {
- case 1:
- var value = /** @type {string} */ (reader.readString());
- msg.setCwd(value);
- break;
- default:
- reader.skipField();
- break;
- }
- }
- return msg;
-};
-
-
-/**
- * Serializes the message to binary data (in protobuf wire format).
- * @return {!Uint8Array}
- */
-proto.PtyCwd.prototype.serializeBinary = function() {
- var writer = new jspb.BinaryWriter();
- proto.PtyCwd.serializeBinaryToWriter(this, writer);
- return writer.getResultBuffer();
-};
-
-
-/**
- * Serializes the given message to binary data (in protobuf wire
- * format), writing to the given BinaryWriter.
- * @param {!proto.PtyCwd} message
- * @param {!jspb.BinaryWriter} writer
- * @suppress {unusedLocalVariables} f is only used for nested messages
- */
-proto.PtyCwd.serializeBinaryToWriter = function(message, writer) {
- var f = undefined;
- f = message.getCwd();
- if (f.length > 0) {
- writer.writeString(
- 1,
- f
- );
- }
-};
-
-
-/**
- * optional string cwd = 1;
- * @return {string}
- */
-proto.PtyCwd.prototype.getCwd = function() {
- return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, ""));
-};
-
-
-/**
- * @param {string} value
- * @return {!proto.PtyCwd} returns this
- */
-proto.PtyCwd.prototype.setCwd = function(value) {
- return jspb.Message.setProto3StringField(this, 1, value);
-};
-
-
-goog.object.extend(exports, proto);
diff --git a/web/packages/teleterm/src/sharedProcess/api/protogen/ptyHostService_pb.ts b/web/packages/teleterm/src/sharedProcess/api/protogen/ptyHostService_pb.ts
new file mode 100644
index 0000000000000..cd6cd61badcea
--- /dev/null
+++ b/web/packages/teleterm/src/sharedProcess/api/protogen/ptyHostService_pb.ts
@@ -0,0 +1,836 @@
+/* eslint-disable */
+// @generated by protobuf-ts 2.9.3 with parameter long_type_number,eslint_disable,add_pb_suffix,client_grpc1,server_grpc1,ts_nocheck
+// @generated from protobuf file "ptyHostService.proto" (syntax proto3)
+// tslint:disable
+// @ts-nocheck
+//
+//
+// Teleport
+// Copyright (C) 2023 Gravitational, Inc.
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU Affero General Public License for more details.
+//
+// You should have received a copy of the GNU Affero General Public License
+// along with this program. If not, see .
+//
+//
+// TODO(ravicious): Before introducing any changes, move this file to the /proto dir and
+// remove the generate-grpc-shared script.
+//
+import { ServiceType } from "@protobuf-ts/runtime-rpc";
+import type { BinaryWriteOptions } from "@protobuf-ts/runtime";
+import type { IBinaryWriter } from "@protobuf-ts/runtime";
+import { WireType } from "@protobuf-ts/runtime";
+import type { BinaryReadOptions } from "@protobuf-ts/runtime";
+import type { IBinaryReader } from "@protobuf-ts/runtime";
+import { UnknownFieldHandler } from "@protobuf-ts/runtime";
+import type { PartialMessage } from "@protobuf-ts/runtime";
+import { reflectionMergePartial } from "@protobuf-ts/runtime";
+import { MessageType } from "@protobuf-ts/runtime";
+import { Struct } from "./google/protobuf/struct_pb";
+/**
+ * @generated from protobuf message PtyId
+ */
+export interface PtyId {
+ /**
+ * @generated from protobuf field: string id = 1;
+ */
+ id: string;
+}
+/**
+ * @generated from protobuf message PtyCreate
+ */
+export interface PtyCreate {
+ /**
+ * @generated from protobuf field: string path = 3;
+ */
+ path: string;
+ /**
+ * @generated from protobuf field: repeated string args = 4;
+ */
+ args: string[];
+ /**
+ * @generated from protobuf field: string cwd = 5;
+ */
+ cwd: string;
+ /**
+ * @generated from protobuf field: google.protobuf.Struct env = 7;
+ */
+ env?: Struct;
+ /**
+ * @generated from protobuf field: string init_message = 8;
+ */
+ initMessage: string;
+}
+/**
+ * @generated from protobuf message PtyClientEvent
+ */
+export interface PtyClientEvent {
+ /**
+ * @generated from protobuf oneof: event
+ */
+ event: {
+ oneofKind: "start";
+ /**
+ * @generated from protobuf field: PtyEventStart start = 2;
+ */
+ start: PtyEventStart;
+ } | {
+ oneofKind: "resize";
+ /**
+ * @generated from protobuf field: PtyEventResize resize = 3;
+ */
+ resize: PtyEventResize;
+ } | {
+ oneofKind: "data";
+ /**
+ * @generated from protobuf field: PtyEventData data = 4;
+ */
+ data: PtyEventData;
+ } | {
+ oneofKind: undefined;
+ };
+}
+/**
+ * @generated from protobuf message PtyServerEvent
+ */
+export interface PtyServerEvent {
+ /**
+ * @generated from protobuf oneof: event
+ */
+ event: {
+ oneofKind: "resize";
+ /**
+ * @generated from protobuf field: PtyEventResize resize = 1;
+ */
+ resize: PtyEventResize;
+ } | {
+ oneofKind: "data";
+ /**
+ * @generated from protobuf field: PtyEventData data = 2;
+ */
+ data: PtyEventData;
+ } | {
+ oneofKind: "open";
+ /**
+ * @generated from protobuf field: PtyEventOpen open = 3;
+ */
+ open: PtyEventOpen;
+ } | {
+ oneofKind: "exit";
+ /**
+ * @generated from protobuf field: PtyEventExit exit = 4;
+ */
+ exit: PtyEventExit;
+ } | {
+ oneofKind: "startError";
+ /**
+ * @generated from protobuf field: PtyEventStartError start_error = 5;
+ */
+ startError: PtyEventStartError;
+ } | {
+ oneofKind: undefined;
+ };
+}
+/**
+ * @generated from protobuf message PtyEventStart
+ */
+export interface PtyEventStart {
+ /**
+ * @generated from protobuf field: uint32 columns = 2;
+ */
+ columns: number;
+ /**
+ * @generated from protobuf field: uint32 rows = 3;
+ */
+ rows: number;
+}
+/**
+ * @generated from protobuf message PtyEventData
+ */
+export interface PtyEventData {
+ /**
+ * @generated from protobuf field: string message = 2;
+ */
+ message: string;
+}
+/**
+ * @generated from protobuf message PtyEventResize
+ */
+export interface PtyEventResize {
+ /**
+ * @generated from protobuf field: uint32 columns = 2;
+ */
+ columns: number;
+ /**
+ * @generated from protobuf field: uint32 rows = 3;
+ */
+ rows: number;
+}
+/**
+ * @generated from protobuf message PtyEventOpen
+ */
+export interface PtyEventOpen {
+}
+/**
+ * @generated from protobuf message PtyEventExit
+ */
+export interface PtyEventExit {
+ /**
+ * @generated from protobuf field: uint32 exit_code = 1;
+ */
+ exitCode: number;
+ /**
+ * @generated from protobuf field: optional uint32 signal = 2;
+ */
+ signal?: number;
+}
+/**
+ * @generated from protobuf message PtyEventStartError
+ */
+export interface PtyEventStartError {
+ /**
+ * @generated from protobuf field: string message = 1;
+ */
+ message: string;
+}
+/**
+ * @generated from protobuf message PtyCwd
+ */
+export interface PtyCwd {
+ /**
+ * @generated from protobuf field: string cwd = 1;
+ */
+ cwd: string;
+}
+// @generated message type with reflection information, may provide speed optimized methods
+class PtyId$Type extends MessageType {
+ constructor() {
+ super("PtyId", [
+ { no: 1, name: "id", kind: "scalar", T: 9 /*ScalarType.STRING*/ }
+ ]);
+ }
+ create(value?: PartialMessage): PtyId {
+ const message = globalThis.Object.create((this.messagePrototype!));
+ message.id = "";
+ if (value !== undefined)
+ reflectionMergePartial(this, message, value);
+ return message;
+ }
+ internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: PtyId): PtyId {
+ let message = target ?? this.create(), end = reader.pos + length;
+ while (reader.pos < end) {
+ let [fieldNo, wireType] = reader.tag();
+ switch (fieldNo) {
+ case /* string id */ 1:
+ message.id = reader.string();
+ break;
+ default:
+ let u = options.readUnknownField;
+ if (u === "throw")
+ throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);
+ let d = reader.skip(wireType);
+ if (u !== false)
+ (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);
+ }
+ }
+ return message;
+ }
+ internalBinaryWrite(message: PtyId, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {
+ /* string id = 1; */
+ if (message.id !== "")
+ writer.tag(1, WireType.LengthDelimited).string(message.id);
+ let u = options.writeUnknownFields;
+ if (u !== false)
+ (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
+ return writer;
+ }
+}
+/**
+ * @generated MessageType for protobuf message PtyId
+ */
+export const PtyId = new PtyId$Type();
+// @generated message type with reflection information, may provide speed optimized methods
+class PtyCreate$Type extends MessageType {
+ constructor() {
+ super("PtyCreate", [
+ { no: 3, name: "path", kind: "scalar", T: 9 /*ScalarType.STRING*/ },
+ { no: 4, name: "args", kind: "scalar", repeat: 2 /*RepeatType.UNPACKED*/, T: 9 /*ScalarType.STRING*/ },
+ { no: 5, name: "cwd", kind: "scalar", T: 9 /*ScalarType.STRING*/ },
+ { no: 7, name: "env", kind: "message", T: () => Struct },
+ { no: 8, name: "init_message", kind: "scalar", T: 9 /*ScalarType.STRING*/ }
+ ]);
+ }
+ create(value?: PartialMessage): PtyCreate {
+ const message = globalThis.Object.create((this.messagePrototype!));
+ message.path = "";
+ message.args = [];
+ message.cwd = "";
+ message.initMessage = "";
+ if (value !== undefined)
+ reflectionMergePartial(this, message, value);
+ return message;
+ }
+ internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: PtyCreate): PtyCreate {
+ let message = target ?? this.create(), end = reader.pos + length;
+ while (reader.pos < end) {
+ let [fieldNo, wireType] = reader.tag();
+ switch (fieldNo) {
+ case /* string path */ 3:
+ message.path = reader.string();
+ break;
+ case /* repeated string args */ 4:
+ message.args.push(reader.string());
+ break;
+ case /* string cwd */ 5:
+ message.cwd = reader.string();
+ break;
+ case /* google.protobuf.Struct env */ 7:
+ message.env = Struct.internalBinaryRead(reader, reader.uint32(), options, message.env);
+ break;
+ case /* string init_message */ 8:
+ message.initMessage = reader.string();
+ break;
+ default:
+ let u = options.readUnknownField;
+ if (u === "throw")
+ throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);
+ let d = reader.skip(wireType);
+ if (u !== false)
+ (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);
+ }
+ }
+ return message;
+ }
+ internalBinaryWrite(message: PtyCreate, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {
+ /* string path = 3; */
+ if (message.path !== "")
+ writer.tag(3, WireType.LengthDelimited).string(message.path);
+ /* repeated string args = 4; */
+ for (let i = 0; i < message.args.length; i++)
+ writer.tag(4, WireType.LengthDelimited).string(message.args[i]);
+ /* string cwd = 5; */
+ if (message.cwd !== "")
+ writer.tag(5, WireType.LengthDelimited).string(message.cwd);
+ /* google.protobuf.Struct env = 7; */
+ if (message.env)
+ Struct.internalBinaryWrite(message.env, writer.tag(7, WireType.LengthDelimited).fork(), options).join();
+ /* string init_message = 8; */
+ if (message.initMessage !== "")
+ writer.tag(8, WireType.LengthDelimited).string(message.initMessage);
+ let u = options.writeUnknownFields;
+ if (u !== false)
+ (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
+ return writer;
+ }
+}
+/**
+ * @generated MessageType for protobuf message PtyCreate
+ */
+export const PtyCreate = new PtyCreate$Type();
+// @generated message type with reflection information, may provide speed optimized methods
+class PtyClientEvent$Type extends MessageType {
+ constructor() {
+ super("PtyClientEvent", [
+ { no: 2, name: "start", kind: "message", oneof: "event", T: () => PtyEventStart },
+ { no: 3, name: "resize", kind: "message", oneof: "event", T: () => PtyEventResize },
+ { no: 4, name: "data", kind: "message", oneof: "event", T: () => PtyEventData }
+ ]);
+ }
+ create(value?: PartialMessage): PtyClientEvent {
+ const message = globalThis.Object.create((this.messagePrototype!));
+ message.event = { oneofKind: undefined };
+ if (value !== undefined)
+ reflectionMergePartial(this, message, value);
+ return message;
+ }
+ internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: PtyClientEvent): PtyClientEvent {
+ let message = target ?? this.create(), end = reader.pos + length;
+ while (reader.pos < end) {
+ let [fieldNo, wireType] = reader.tag();
+ switch (fieldNo) {
+ case /* PtyEventStart start */ 2:
+ message.event = {
+ oneofKind: "start",
+ start: PtyEventStart.internalBinaryRead(reader, reader.uint32(), options, (message.event as any).start)
+ };
+ break;
+ case /* PtyEventResize resize */ 3:
+ message.event = {
+ oneofKind: "resize",
+ resize: PtyEventResize.internalBinaryRead(reader, reader.uint32(), options, (message.event as any).resize)
+ };
+ break;
+ case /* PtyEventData data */ 4:
+ message.event = {
+ oneofKind: "data",
+ data: PtyEventData.internalBinaryRead(reader, reader.uint32(), options, (message.event as any).data)
+ };
+ break;
+ default:
+ let u = options.readUnknownField;
+ if (u === "throw")
+ throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);
+ let d = reader.skip(wireType);
+ if (u !== false)
+ (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);
+ }
+ }
+ return message;
+ }
+ internalBinaryWrite(message: PtyClientEvent, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {
+ /* PtyEventStart start = 2; */
+ if (message.event.oneofKind === "start")
+ PtyEventStart.internalBinaryWrite(message.event.start, writer.tag(2, WireType.LengthDelimited).fork(), options).join();
+ /* PtyEventResize resize = 3; */
+ if (message.event.oneofKind === "resize")
+ PtyEventResize.internalBinaryWrite(message.event.resize, writer.tag(3, WireType.LengthDelimited).fork(), options).join();
+ /* PtyEventData data = 4; */
+ if (message.event.oneofKind === "data")
+ PtyEventData.internalBinaryWrite(message.event.data, writer.tag(4, WireType.LengthDelimited).fork(), options).join();
+ let u = options.writeUnknownFields;
+ if (u !== false)
+ (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
+ return writer;
+ }
+}
+/**
+ * @generated MessageType for protobuf message PtyClientEvent
+ */
+export const PtyClientEvent = new PtyClientEvent$Type();
+// @generated message type with reflection information, may provide speed optimized methods
+class PtyServerEvent$Type extends MessageType {
+ constructor() {
+ super("PtyServerEvent", [
+ { no: 1, name: "resize", kind: "message", oneof: "event", T: () => PtyEventResize },
+ { no: 2, name: "data", kind: "message", oneof: "event", T: () => PtyEventData },
+ { no: 3, name: "open", kind: "message", oneof: "event", T: () => PtyEventOpen },
+ { no: 4, name: "exit", kind: "message", oneof: "event", T: () => PtyEventExit },
+ { no: 5, name: "start_error", kind: "message", oneof: "event", T: () => PtyEventStartError }
+ ]);
+ }
+ create(value?: PartialMessage): PtyServerEvent {
+ const message = globalThis.Object.create((this.messagePrototype!));
+ message.event = { oneofKind: undefined };
+ if (value !== undefined)
+ reflectionMergePartial(this, message, value);
+ return message;
+ }
+ internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: PtyServerEvent): PtyServerEvent {
+ let message = target ?? this.create(), end = reader.pos + length;
+ while (reader.pos < end) {
+ let [fieldNo, wireType] = reader.tag();
+ switch (fieldNo) {
+ case /* PtyEventResize resize */ 1:
+ message.event = {
+ oneofKind: "resize",
+ resize: PtyEventResize.internalBinaryRead(reader, reader.uint32(), options, (message.event as any).resize)
+ };
+ break;
+ case /* PtyEventData data */ 2:
+ message.event = {
+ oneofKind: "data",
+ data: PtyEventData.internalBinaryRead(reader, reader.uint32(), options, (message.event as any).data)
+ };
+ break;
+ case /* PtyEventOpen open */ 3:
+ message.event = {
+ oneofKind: "open",
+ open: PtyEventOpen.internalBinaryRead(reader, reader.uint32(), options, (message.event as any).open)
+ };
+ break;
+ case /* PtyEventExit exit */ 4:
+ message.event = {
+ oneofKind: "exit",
+ exit: PtyEventExit.internalBinaryRead(reader, reader.uint32(), options, (message.event as any).exit)
+ };
+ break;
+ case /* PtyEventStartError start_error */ 5:
+ message.event = {
+ oneofKind: "startError",
+ startError: PtyEventStartError.internalBinaryRead(reader, reader.uint32(), options, (message.event as any).startError)
+ };
+ break;
+ default:
+ let u = options.readUnknownField;
+ if (u === "throw")
+ throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);
+ let d = reader.skip(wireType);
+ if (u !== false)
+ (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);
+ }
+ }
+ return message;
+ }
+ internalBinaryWrite(message: PtyServerEvent, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {
+ /* PtyEventResize resize = 1; */
+ if (message.event.oneofKind === "resize")
+ PtyEventResize.internalBinaryWrite(message.event.resize, writer.tag(1, WireType.LengthDelimited).fork(), options).join();
+ /* PtyEventData data = 2; */
+ if (message.event.oneofKind === "data")
+ PtyEventData.internalBinaryWrite(message.event.data, writer.tag(2, WireType.LengthDelimited).fork(), options).join();
+ /* PtyEventOpen open = 3; */
+ if (message.event.oneofKind === "open")
+ PtyEventOpen.internalBinaryWrite(message.event.open, writer.tag(3, WireType.LengthDelimited).fork(), options).join();
+ /* PtyEventExit exit = 4; */
+ if (message.event.oneofKind === "exit")
+ PtyEventExit.internalBinaryWrite(message.event.exit, writer.tag(4, WireType.LengthDelimited).fork(), options).join();
+ /* PtyEventStartError start_error = 5; */
+ if (message.event.oneofKind === "startError")
+ PtyEventStartError.internalBinaryWrite(message.event.startError, writer.tag(5, WireType.LengthDelimited).fork(), options).join();
+ let u = options.writeUnknownFields;
+ if (u !== false)
+ (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
+ return writer;
+ }
+}
+/**
+ * @generated MessageType for protobuf message PtyServerEvent
+ */
+export const PtyServerEvent = new PtyServerEvent$Type();
+// @generated message type with reflection information, may provide speed optimized methods
+class PtyEventStart$Type extends MessageType {
+ constructor() {
+ super("PtyEventStart", [
+ { no: 2, name: "columns", kind: "scalar", T: 13 /*ScalarType.UINT32*/ },
+ { no: 3, name: "rows", kind: "scalar", T: 13 /*ScalarType.UINT32*/ }
+ ]);
+ }
+ create(value?: PartialMessage): PtyEventStart {
+ const message = globalThis.Object.create((this.messagePrototype!));
+ message.columns = 0;
+ message.rows = 0;
+ if (value !== undefined)
+ reflectionMergePartial(this, message, value);
+ return message;
+ }
+ internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: PtyEventStart): PtyEventStart {
+ let message = target ?? this.create(), end = reader.pos + length;
+ while (reader.pos < end) {
+ let [fieldNo, wireType] = reader.tag();
+ switch (fieldNo) {
+ case /* uint32 columns */ 2:
+ message.columns = reader.uint32();
+ break;
+ case /* uint32 rows */ 3:
+ message.rows = reader.uint32();
+ break;
+ default:
+ let u = options.readUnknownField;
+ if (u === "throw")
+ throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);
+ let d = reader.skip(wireType);
+ if (u !== false)
+ (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);
+ }
+ }
+ return message;
+ }
+ internalBinaryWrite(message: PtyEventStart, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {
+ /* uint32 columns = 2; */
+ if (message.columns !== 0)
+ writer.tag(2, WireType.Varint).uint32(message.columns);
+ /* uint32 rows = 3; */
+ if (message.rows !== 0)
+ writer.tag(3, WireType.Varint).uint32(message.rows);
+ let u = options.writeUnknownFields;
+ if (u !== false)
+ (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
+ return writer;
+ }
+}
+/**
+ * @generated MessageType for protobuf message PtyEventStart
+ */
+export const PtyEventStart = new PtyEventStart$Type();
+// @generated message type with reflection information, may provide speed optimized methods
+class PtyEventData$Type extends MessageType {
+ constructor() {
+ super("PtyEventData", [
+ { no: 2, name: "message", kind: "scalar", T: 9 /*ScalarType.STRING*/ }
+ ]);
+ }
+ create(value?: PartialMessage): PtyEventData {
+ const message = globalThis.Object.create((this.messagePrototype!));
+ message.message = "";
+ if (value !== undefined)
+ reflectionMergePartial(this, message, value);
+ return message;
+ }
+ internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: PtyEventData): PtyEventData {
+ let message = target ?? this.create(), end = reader.pos + length;
+ while (reader.pos < end) {
+ let [fieldNo, wireType] = reader.tag();
+ switch (fieldNo) {
+ case /* string message */ 2:
+ message.message = reader.string();
+ break;
+ default:
+ let u = options.readUnknownField;
+ if (u === "throw")
+ throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);
+ let d = reader.skip(wireType);
+ if (u !== false)
+ (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);
+ }
+ }
+ return message;
+ }
+ internalBinaryWrite(message: PtyEventData, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {
+ /* string message = 2; */
+ if (message.message !== "")
+ writer.tag(2, WireType.LengthDelimited).string(message.message);
+ let u = options.writeUnknownFields;
+ if (u !== false)
+ (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
+ return writer;
+ }
+}
+/**
+ * @generated MessageType for protobuf message PtyEventData
+ */
+export const PtyEventData = new PtyEventData$Type();
+// @generated message type with reflection information, may provide speed optimized methods
+class PtyEventResize$Type extends MessageType {
+ constructor() {
+ super("PtyEventResize", [
+ { no: 2, name: "columns", kind: "scalar", T: 13 /*ScalarType.UINT32*/ },
+ { no: 3, name: "rows", kind: "scalar", T: 13 /*ScalarType.UINT32*/ }
+ ]);
+ }
+ create(value?: PartialMessage): PtyEventResize {
+ const message = globalThis.Object.create((this.messagePrototype!));
+ message.columns = 0;
+ message.rows = 0;
+ if (value !== undefined)
+ reflectionMergePartial(this, message, value);
+ return message;
+ }
+ internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: PtyEventResize): PtyEventResize {
+ let message = target ?? this.create(), end = reader.pos + length;
+ while (reader.pos < end) {
+ let [fieldNo, wireType] = reader.tag();
+ switch (fieldNo) {
+ case /* uint32 columns */ 2:
+ message.columns = reader.uint32();
+ break;
+ case /* uint32 rows */ 3:
+ message.rows = reader.uint32();
+ break;
+ default:
+ let u = options.readUnknownField;
+ if (u === "throw")
+ throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);
+ let d = reader.skip(wireType);
+ if (u !== false)
+ (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);
+ }
+ }
+ return message;
+ }
+ internalBinaryWrite(message: PtyEventResize, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {
+ /* uint32 columns = 2; */
+ if (message.columns !== 0)
+ writer.tag(2, WireType.Varint).uint32(message.columns);
+ /* uint32 rows = 3; */
+ if (message.rows !== 0)
+ writer.tag(3, WireType.Varint).uint32(message.rows);
+ let u = options.writeUnknownFields;
+ if (u !== false)
+ (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
+ return writer;
+ }
+}
+/**
+ * @generated MessageType for protobuf message PtyEventResize
+ */
+export const PtyEventResize = new PtyEventResize$Type();
+// @generated message type with reflection information, may provide speed optimized methods
+class PtyEventOpen$Type extends MessageType {
+ constructor() {
+ super("PtyEventOpen", []);
+ }
+ create(value?: PartialMessage): PtyEventOpen {
+ const message = globalThis.Object.create((this.messagePrototype!));
+ if (value !== undefined)
+ reflectionMergePartial(this, message, value);
+ return message;
+ }
+ internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: PtyEventOpen): PtyEventOpen {
+ return target ?? this.create();
+ }
+ internalBinaryWrite(message: PtyEventOpen, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {
+ let u = options.writeUnknownFields;
+ if (u !== false)
+ (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
+ return writer;
+ }
+}
+/**
+ * @generated MessageType for protobuf message PtyEventOpen
+ */
+export const PtyEventOpen = new PtyEventOpen$Type();
+// @generated message type with reflection information, may provide speed optimized methods
+class PtyEventExit$Type extends MessageType {
+ constructor() {
+ super("PtyEventExit", [
+ { no: 1, name: "exit_code", kind: "scalar", T: 13 /*ScalarType.UINT32*/ },
+ { no: 2, name: "signal", kind: "scalar", opt: true, T: 13 /*ScalarType.UINT32*/ }
+ ]);
+ }
+ create(value?: PartialMessage): PtyEventExit {
+ const message = globalThis.Object.create((this.messagePrototype!));
+ message.exitCode = 0;
+ if (value !== undefined)
+ reflectionMergePartial(this, message, value);
+ return message;
+ }
+ internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: PtyEventExit): PtyEventExit {
+ let message = target ?? this.create(), end = reader.pos + length;
+ while (reader.pos < end) {
+ let [fieldNo, wireType] = reader.tag();
+ switch (fieldNo) {
+ case /* uint32 exit_code */ 1:
+ message.exitCode = reader.uint32();
+ break;
+ case /* optional uint32 signal */ 2:
+ message.signal = reader.uint32();
+ break;
+ default:
+ let u = options.readUnknownField;
+ if (u === "throw")
+ throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);
+ let d = reader.skip(wireType);
+ if (u !== false)
+ (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);
+ }
+ }
+ return message;
+ }
+ internalBinaryWrite(message: PtyEventExit, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {
+ /* uint32 exit_code = 1; */
+ if (message.exitCode !== 0)
+ writer.tag(1, WireType.Varint).uint32(message.exitCode);
+ /* optional uint32 signal = 2; */
+ if (message.signal !== undefined)
+ writer.tag(2, WireType.Varint).uint32(message.signal);
+ let u = options.writeUnknownFields;
+ if (u !== false)
+ (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
+ return writer;
+ }
+}
+/**
+ * @generated MessageType for protobuf message PtyEventExit
+ */
+export const PtyEventExit = new PtyEventExit$Type();
+// @generated message type with reflection information, may provide speed optimized methods
+class PtyEventStartError$Type extends MessageType {
+ constructor() {
+ super("PtyEventStartError", [
+ { no: 1, name: "message", kind: "scalar", T: 9 /*ScalarType.STRING*/ }
+ ]);
+ }
+ create(value?: PartialMessage): PtyEventStartError {
+ const message = globalThis.Object.create((this.messagePrototype!));
+ message.message = "";
+ if (value !== undefined)
+ reflectionMergePartial(this, message, value);
+ return message;
+ }
+ internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: PtyEventStartError): PtyEventStartError {
+ let message = target ?? this.create(), end = reader.pos + length;
+ while (reader.pos < end) {
+ let [fieldNo, wireType] = reader.tag();
+ switch (fieldNo) {
+ case /* string message */ 1:
+ message.message = reader.string();
+ break;
+ default:
+ let u = options.readUnknownField;
+ if (u === "throw")
+ throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);
+ let d = reader.skip(wireType);
+ if (u !== false)
+ (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);
+ }
+ }
+ return message;
+ }
+ internalBinaryWrite(message: PtyEventStartError, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {
+ /* string message = 1; */
+ if (message.message !== "")
+ writer.tag(1, WireType.LengthDelimited).string(message.message);
+ let u = options.writeUnknownFields;
+ if (u !== false)
+ (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
+ return writer;
+ }
+}
+/**
+ * @generated MessageType for protobuf message PtyEventStartError
+ */
+export const PtyEventStartError = new PtyEventStartError$Type();
+// @generated message type with reflection information, may provide speed optimized methods
+class PtyCwd$Type extends MessageType {
+ constructor() {
+ super("PtyCwd", [
+ { no: 1, name: "cwd", kind: "scalar", T: 9 /*ScalarType.STRING*/ }
+ ]);
+ }
+ create(value?: PartialMessage): PtyCwd {
+ const message = globalThis.Object.create((this.messagePrototype!));
+ message.cwd = "";
+ if (value !== undefined)
+ reflectionMergePartial(this, message, value);
+ return message;
+ }
+ internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: PtyCwd): PtyCwd {
+ let message = target ?? this.create(), end = reader.pos + length;
+ while (reader.pos < end) {
+ let [fieldNo, wireType] = reader.tag();
+ switch (fieldNo) {
+ case /* string cwd */ 1:
+ message.cwd = reader.string();
+ break;
+ default:
+ let u = options.readUnknownField;
+ if (u === "throw")
+ throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);
+ let d = reader.skip(wireType);
+ if (u !== false)
+ (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);
+ }
+ }
+ return message;
+ }
+ internalBinaryWrite(message: PtyCwd, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {
+ /* string cwd = 1; */
+ if (message.cwd !== "")
+ writer.tag(1, WireType.LengthDelimited).string(message.cwd);
+ let u = options.writeUnknownFields;
+ if (u !== false)
+ (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
+ return writer;
+ }
+}
+/**
+ * @generated MessageType for protobuf message PtyCwd
+ */
+export const PtyCwd = new PtyCwd$Type();
+/**
+ * @generated ServiceType for protobuf service PtyHost
+ */
+export const PtyHost = new ServiceType("PtyHost", [
+ { name: "CreatePtyProcess", options: {}, I: PtyCreate, O: PtyId },
+ { name: "ExchangeEvents", serverStreaming: true, clientStreaming: true, options: {}, I: PtyClientEvent, O: PtyServerEvent },
+ { name: "GetCwd", options: {}, I: PtyId, O: PtyCwd }
+]);
diff --git a/web/packages/teleterm/src/sharedProcess/ptyHost/index.ts b/web/packages/teleterm/src/sharedProcess/ptyHost/index.ts
index 4f0f5d3778fe5..afe07d9a76920 100644
--- a/web/packages/teleterm/src/sharedProcess/ptyHost/index.ts
+++ b/web/packages/teleterm/src/sharedProcess/ptyHost/index.ts
@@ -17,5 +17,6 @@
*/
export * from './types';
-export * from '../api/protogen/ptyHostService_grpc_pb';
+export * from '../api/protogen/ptyHostService_pb.grpc-server';
+export * from '../api/protogen/ptyHostService_pb.grpc-client';
export * from '../api/protogen/ptyHostService_pb';
diff --git a/web/packages/teleterm/src/sharedProcess/ptyHost/ptyEventsStreamHandler.ts b/web/packages/teleterm/src/sharedProcess/ptyHost/ptyEventsStreamHandler.ts
index 92a7953d2577d..dd122964b356c 100644
--- a/web/packages/teleterm/src/sharedProcess/ptyHost/ptyEventsStreamHandler.ts
+++ b/web/packages/teleterm/src/sharedProcess/ptyHost/ptyEventsStreamHandler.ts
@@ -20,6 +20,12 @@ import { ServerDuplexStream } from '@grpc/grpc-js';
import Logger from 'teleterm/logger';
+import {
+ ptyEventOneOfIsData,
+ ptyEventOneOfIsResize,
+ ptyEventOneOfIsStart,
+} from 'teleterm/helpers';
+
import {
PtyClientEvent,
PtyEventData,
@@ -43,7 +49,7 @@ export class PtyEventsStreamHandler {
private readonly ptyProcesses: Map
) {
this.ptyId = stream.metadata.get('ptyId')[0].toString();
- this.ptyProcess = ptyProcesses.get(this.ptyId);
+ this.ptyProcess = ptyProcesses.get(this.ptyId)!;
this.logger = new Logger(`PtyEventsStreamHandler (id: ${this.ptyId})`);
stream.addListener('data', event => this.handleStreamData(event));
@@ -52,49 +58,70 @@ export class PtyEventsStreamHandler {
}
private handleStreamData(event: PtyClientEvent): void {
- switch (event.getEventCase()) {
- case PtyClientEvent.EventCase.START:
- return this.handleStartEvent(event.getStart());
- case PtyClientEvent.EventCase.DATA:
- return this.handleDataEvent(event.getData());
- case PtyClientEvent.EventCase.RESIZE:
- return this.handleResizeEvent(event.getResize());
+ if (ptyEventOneOfIsStart(event.event)) {
+ return this.handleStartEvent(event.event.start);
+ }
+
+ if (ptyEventOneOfIsData(event.event)) {
+ return this.handleDataEvent(event.event.data);
+ }
+
+ if (ptyEventOneOfIsResize(event.event)) {
+ return this.handleResizeEvent(event.event.resize);
}
}
private handleStartEvent(event: PtyEventStart): void {
this.ptyProcess.onData(data =>
this.stream.write(
- new PtyServerEvent().setData(new PtyEventData().setMessage(data))
+ PtyServerEvent.create({
+ event: {
+ oneofKind: 'data',
+ data: PtyEventData.create({ message: data }),
+ },
+ })
)
);
this.ptyProcess.onOpen(() =>
- this.stream.write(new PtyServerEvent().setOpen(new PtyEventOpen()))
+ this.stream.write(
+ PtyServerEvent.create({
+ event: {
+ oneofKind: 'open',
+ open: PtyEventOpen.create(),
+ },
+ })
+ )
);
this.ptyProcess.onExit(({ exitCode, signal }) =>
this.stream.write(
- new PtyServerEvent().setExit(
- new PtyEventExit().setExitCode(exitCode).setSignal(signal)
- )
+ PtyServerEvent.create({
+ event: {
+ oneofKind: 'exit',
+ exit: PtyEventExit.create({ exitCode, signal }),
+ },
+ })
)
);
this.ptyProcess.onStartError(message => {
this.stream.write(
- new PtyServerEvent().setStartError(
- new PtyEventStartError().setMessage(message)
- )
+ PtyServerEvent.create({
+ event: {
+ oneofKind: 'startError',
+ startError: PtyEventStartError.create({ message }),
+ },
+ })
);
});
- this.ptyProcess.start(event.getColumns(), event.getRows());
+ this.ptyProcess.start(event.columns, event.rows);
this.logger.info(`stream has started`);
}
private handleDataEvent(event: PtyEventData): void {
- this.ptyProcess.write(event.getMessage());
+ this.ptyProcess.write(event.message);
}
private handleResizeEvent(event: PtyEventResize): void {
- this.ptyProcess.resize(event.getColumns(), event.getRows());
+ this.ptyProcess.resize(event.columns, event.rows);
}
private handleStreamError(error: Error): void {
diff --git a/web/packages/teleterm/src/sharedProcess/ptyHost/ptyHostService.ts b/web/packages/teleterm/src/sharedProcess/ptyHost/ptyHostService.ts
index 4a60aac44787a..651a196e5ad6d 100644
--- a/web/packages/teleterm/src/sharedProcess/ptyHost/ptyHostService.ts
+++ b/web/packages/teleterm/src/sharedProcess/ptyHost/ptyHostService.ts
@@ -20,26 +20,28 @@ import { unique } from 'teleterm/ui/utils';
import Logger from 'teleterm/logger';
+import { Struct } from 'teleterm/sharedProcess/api/protogen/google/protobuf/struct_pb';
+
import { PtyProcess } from './ptyProcess';
-import { IPtyHostServer } from './../api/protogen/ptyHostService_grpc_pb';
+import { IPtyHost } from './../api/protogen/ptyHostService_pb.grpc-server';
import { PtyCwd, PtyId } from './../api/protogen/ptyHostService_pb';
import { PtyEventsStreamHandler } from './ptyEventsStreamHandler';
-export function createPtyHostService(): IPtyHostServer {
+export function createPtyHostService(): IPtyHost {
const logger = new Logger('PtyHostService');
const ptyProcesses = new Map();
return {
createPtyProcess: (call, callback) => {
- const ptyOptions = call.request.toObject();
+ const ptyOptions = call.request;
const ptyId = unique();
try {
const ptyProcess = new PtyProcess({
path: ptyOptions.path,
- args: ptyOptions.argsList,
+ args: ptyOptions.args,
cwd: ptyOptions.cwd,
ptyId,
- env: call.request.getEnv()?.toJavaScript() as Record,
+ env: Struct.toJson(call.request.env!) as Record,
initMessage: ptyOptions.initMessage,
});
ptyProcesses.set(ptyId, ptyProcess);
@@ -48,11 +50,11 @@ export function createPtyHostService(): IPtyHostServer {
callback(error);
return;
}
- callback(null, new PtyId().setId(ptyId));
+ callback(null, PtyId.create({ id: ptyId }));
logger.info(`created PTY process for id ${ptyId}`);
},
getCwd: (call, callback) => {
- const id = call.request.getId();
+ const id = call.request.id;
const ptyProcess = ptyProcesses.get(id);
if (!ptyProcess) {
const message = `PTY process with id: ${id} does not exist`;
@@ -62,7 +64,7 @@ export function createPtyHostService(): IPtyHostServer {
ptyProcess
.getCwd()
.then(cwd => {
- const response = new PtyCwd().setCwd(cwd);
+ const response = PtyCwd.create({ cwd });
callback(null, response);
})
.catch(error => {
diff --git a/web/packages/teleterm/src/sharedProcess/sharedProcess.ts b/web/packages/teleterm/src/sharedProcess/sharedProcess.ts
index 33419c8e69b11..b4f0f5c06c861 100644
--- a/web/packages/teleterm/src/sharedProcess/sharedProcess.ts
+++ b/web/packages/teleterm/src/sharedProcess/sharedProcess.ts
@@ -31,7 +31,8 @@ import {
import { RuntimeSettings } from 'teleterm/mainProcess/types';
import Logger from 'teleterm/logger';
-import { PtyHostService } from './api/protogen/ptyHostService_grpc_pb';
+import { ptyHostDefinition } from 'teleterm/sharedProcess/api/protogen/ptyHostService_pb.grpc-server';
+
import { createPtyHostService } from './ptyHost/ptyHostService';
const runtimeSettings = getRuntimeSettings();
@@ -73,8 +74,7 @@ async function initializeServer(
}
const server = new Server();
- // @ts-expect-error we have a typed service
- server.addService(PtyHostService, createPtyHostService());
+ server.addService(ptyHostDefinition, createPtyHostService());
// grpc-js requires us to pass localhost:port for TCP connections,
const grpcServerAddress = address.replace('tcp://', '');
diff --git a/web/packages/teleterm/src/types.ts b/web/packages/teleterm/src/types.ts
index 0244a2421fca9..1b3bcfb9ba77c 100644
--- a/web/packages/teleterm/src/types.ts
+++ b/web/packages/teleterm/src/types.ts
@@ -16,13 +16,15 @@
* along with this program. If not, see .
*/
-import { ITshdEventsServiceServer } from 'gen-proto-js/teleport/lib/teleterm/v1/tshd_events_service_grpc_pb';
+import { ITshdEventsService } from 'gen-proto-ts/teleport/lib/teleterm/v1/tshd_events_service_pb.grpc-server';
+
+import { sendUnaryData, ServerUnaryCall } from 'grpc';
-import { TshdClient } from 'teleterm/services/tshd/types';
-import { PtyServiceClient } from 'teleterm/services/pty';
-import { RuntimeSettings, MainProcessClient } from 'teleterm/mainProcess/types';
-import { FileStorage } from 'teleterm/services/fileStorage';
import { Logger, LoggerService } from 'teleterm/services/logger/types';
+import { FileStorage } from 'teleterm/services/fileStorage';
+import { MainProcessClient, RuntimeSettings } from 'teleterm/mainProcess/types';
+import { PtyServiceClient } from 'teleterm/services/pty';
+import { TshdClient } from 'teleterm/services/tshd/types';
export type {
Logger,
@@ -78,13 +80,11 @@ export type {
* actually uses the returned object.
*/
export type TshdEventContextBridgeService = {
- [RpcName in keyof ITshdEventsServiceServer]: (args: {
+ [RpcName in keyof ITshdEventsService]: (args: {
/**
* request is the result of calling call.request.toObject() in a gRPC handler.
*/
- request: ReturnType<
- Parameters[0]['request']['toObject']
- >;
+ request: ExtractRequestType[0]>;
/**
* onRequestCancelled sets up a callback that is called when the request gets canceled by the
* client (tshd in this case).
@@ -93,14 +93,18 @@ export type TshdEventContextBridgeService = {
}) => Promise<
// The following type maps to the object version of the response type expected as the second
// argument to the callback function in a gRPC handler.
- ReturnType<
- Parameters<
- Parameters[1]
- >[1]['toObject']
- >
+ ExtractResponseType[1]>
>;
};
+export type ExtractRequestType = T extends ServerUnaryCall
+ ? Req
+ : never;
+
+export type ExtractResponseType = T extends sendUnaryData
+ ? Res
+ : never;
+
export type ElectronGlobals = {
readonly mainProcessClient: MainProcessClient;
readonly tshClient: TshdClient;
diff --git a/web/packages/teleterm/src/ui/AppInitializer/AppInitializer.tsx b/web/packages/teleterm/src/ui/AppInitializer/AppInitializer.tsx
index 5d6b0d6336eb3..c931f0fcab39a 100644
--- a/web/packages/teleterm/src/ui/AppInitializer/AppInitializer.tsx
+++ b/web/packages/teleterm/src/ui/AppInitializer/AppInitializer.tsx
@@ -36,11 +36,8 @@ export const AppInitializer = () => {
const initializeApp = useCallback(async () => {
try {
await appContext.pullInitialState();
-
setShouldShowUi(true);
-
await showStartupModalsAndNotifications(appContext);
-
appContext.mainProcessClient.signalUserInterfaceReadiness({
success: true,
});
diff --git a/web/packages/teleterm/src/ui/ClusterConnect/ClusterLogin/ClusterLogin.story.tsx b/web/packages/teleterm/src/ui/ClusterConnect/ClusterLogin/ClusterLogin.story.tsx
index 29c82eccacd28..47c2e7a0a5e13 100644
--- a/web/packages/teleterm/src/ui/ClusterConnect/ClusterLogin/ClusterLogin.story.tsx
+++ b/web/packages/teleterm/src/ui/ClusterConnect/ClusterLogin/ClusterLogin.story.tsx
@@ -50,7 +50,7 @@ function makeProps(): ClusterLoginPresentationProps {
data: {
preferredMfa: 'webauthn',
localAuthEnabled: true,
- authProvidersList: [],
+ authProviders: [],
type: '',
secondFactor: 'optional',
hasMessageOfTheDay: false,
@@ -172,7 +172,7 @@ export const SsoOnly = () => {
const props = makeProps();
props.initAttempt.data.localAuthEnabled = false;
props.initAttempt.data.authType = 'github';
- props.initAttempt.data.authProvidersList = [
+ props.initAttempt.data.authProviders = [
{ type: 'github', name: 'github', displayName: 'github' },
{ type: 'saml', name: 'microsoft', displayName: 'microsoft' },
];
@@ -205,7 +205,7 @@ export const LocalLoggedInUserWithPasswordless = () => {
export const LocalWithSso = () => {
const props = makeProps();
- props.initAttempt.data.authProvidersList = [
+ props.initAttempt.data.authProviders = [
{ type: 'github', name: 'github', displayName: 'github' },
{ type: 'saml', name: 'microsoft', displayName: 'microsoft' },
];
@@ -243,7 +243,7 @@ export const PasswordlessWithLocalLoggedInUser = () => {
export const SsoWithLocalAndPasswordless = () => {
const props = makeProps();
props.initAttempt.data.authType = 'github';
- props.initAttempt.data.authProvidersList = [
+ props.initAttempt.data.authProviders = [
{ type: 'github', name: 'github', displayName: 'github' },
{ type: 'saml', name: 'microsoft', displayName: 'microsoft' },
];
diff --git a/web/packages/teleterm/src/ui/ClusterConnect/ClusterLogin/FormLogin/FormLogin.tsx b/web/packages/teleterm/src/ui/ClusterConnect/ClusterLogin/FormLogin/FormLogin.tsx
index 0da2df062128a..1653a5e3ba64c 100644
--- a/web/packages/teleterm/src/ui/ClusterConnect/ClusterLogin/FormLogin/FormLogin.tsx
+++ b/web/packages/teleterm/src/ui/ClusterConnect/ClusterLogin/FormLogin/FormLogin.tsx
@@ -39,7 +39,7 @@ export default function LoginForm(props: Props) {
const {
loginAttempt,
onAbort,
- authProvidersList,
+ authProviders,
localAuthEnabled = true,
shouldPromptSsoStatus,
webauthnLogin,
@@ -53,7 +53,7 @@ export default function LoginForm(props: Props) {
return ;
}
- const ssoEnabled = authProvidersList?.length > 0;
+ const ssoEnabled = authProviders?.length > 0;
// If local auth was not enabled, disregard any primary auth type config
// and display sso providers if any.
@@ -107,7 +107,7 @@ const Primary = ({
hasTransitionEnded,
...otherProps
}: Props & StepComponentProps) => {
- const ssoEnabled = otherProps.authProvidersList?.length > 0;
+ const ssoEnabled = otherProps.authProviders?.length > 0;
let otherOptionsAvailable = true;
let $primary;
@@ -161,7 +161,7 @@ const Secondary = ({
refCallback,
...otherProps
}: Props & StepComponentProps) => {
- const ssoEnabled = otherProps.authProvidersList?.length > 0;
+ const ssoEnabled = otherProps.authProviders?.length > 0;
const { primaryAuthType, allowPasswordless } = otherProps;
let $secondary;
diff --git a/web/packages/teleterm/src/ui/ClusterConnect/ClusterLogin/FormLogin/FormSso/FormSso.tsx b/web/packages/teleterm/src/ui/ClusterConnect/ClusterLogin/FormLogin/FormSso/FormSso.tsx
index a51d308a2ef08..9aa3474e0d36e 100644
--- a/web/packages/teleterm/src/ui/ClusterConnect/ClusterLogin/FormLogin/FormSso/FormSso.tsx
+++ b/web/packages/teleterm/src/ui/ClusterConnect/ClusterLogin/FormLogin/FormSso/FormSso.tsx
@@ -25,7 +25,7 @@ import type { Props } from '../FormLogin';
export const FormSso = ({
loginAttempt,
- authProvidersList,
+ authProviders,
onLoginWithSso,
autoFocus = false,
}: Props) => {
@@ -34,7 +34,7 @@ export const FormSso = ({
diff --git a/web/packages/teleterm/src/ui/ConnectMyComputer/DocumentConnectMyComputer/Setup.story.tsx b/web/packages/teleterm/src/ui/ConnectMyComputer/DocumentConnectMyComputer/Setup.story.tsx
index 981829732c491..29fd1e4c12f94 100644
--- a/web/packages/teleterm/src/ui/ConnectMyComputer/DocumentConnectMyComputer/Setup.story.tsx
+++ b/web/packages/teleterm/src/ui/ConnectMyComputer/DocumentConnectMyComputer/Setup.story.tsx
@@ -136,7 +136,7 @@ export function NoAccess() {
export function AccessUnknown() {
const cluster = makeRootCluster();
- cluster.loggedInUser.userType = UserType.USER_TYPE_UNSPECIFIED;
+ cluster.loggedInUser.userType = UserType.UNSPECIFIED;
const appContext = new MockAppContext({});
return (
diff --git a/web/packages/teleterm/src/ui/ConnectMyComputer/DocumentConnectMyComputer/Setup.test.tsx b/web/packages/teleterm/src/ui/ConnectMyComputer/DocumentConnectMyComputer/Setup.test.tsx
index 6f9cae7f07f4a..5d26f150de4d2 100644
--- a/web/packages/teleterm/src/ui/ConnectMyComputer/DocumentConnectMyComputer/Setup.test.tsx
+++ b/web/packages/teleterm/src/ui/ConnectMyComputer/DocumentConnectMyComputer/Setup.test.tsx
@@ -167,7 +167,7 @@ function setupAppContext(): {
list: true,
read: true,
edit: true,
- pb_delete: true,
+ delete: true,
use: true,
},
},
diff --git a/web/packages/teleterm/src/ui/ConnectMyComputer/DocumentConnectMyComputer/Status.story.tsx b/web/packages/teleterm/src/ui/ConnectMyComputer/DocumentConnectMyComputer/Status.story.tsx
index a19806d2937e9..0f46c1cdf5376 100644
--- a/web/packages/teleterm/src/ui/ConnectMyComputer/DocumentConnectMyComputer/Status.story.tsx
+++ b/web/packages/teleterm/src/ui/ConnectMyComputer/DocumentConnectMyComputer/Status.story.tsx
@@ -68,7 +68,7 @@ export function Running() {
Promise.resolve(
makeServer({
hostname: 'staging-mac-mini',
- labelsList: makeLabelsList({
+ labels: makeLabelsList({
hostname: 'staging-mac-mini',
'teleport.dev/connect-my-computer/owner': 'testuser@goteleport.com',
}),
diff --git a/web/packages/teleterm/src/ui/ConnectMyComputer/DocumentConnectMyComputer/Status.tsx b/web/packages/teleterm/src/ui/ConnectMyComputer/DocumentConnectMyComputer/Status.tsx
index dc2e1462e96a4..b28493ecd3458 100644
--- a/web/packages/teleterm/src/ui/ConnectMyComputer/DocumentConnectMyComputer/Status.tsx
+++ b/web/packages/teleterm/src/ui/ConnectMyComputer/DocumentConnectMyComputer/Status.tsx
@@ -227,7 +227,7 @@ export function Status(props: { closeDocument?: () => void }) {
{/* Explicitly check for existence of agentNode because Transition doesn't seem to
unmount immediately when `in` becomes falsy. */}
- {agentNode?.labelsList && renderLabels(agentNode.labelsList)}
+ {agentNode?.labels && renderLabels(agentNode.labels)}
)}
diff --git a/web/packages/teleterm/src/ui/ConnectMyComputer/access.test.ts b/web/packages/teleterm/src/ui/ConnectMyComputer/access.test.ts
index 494c66a6d31f7..cbe29910e407d 100644
--- a/web/packages/teleterm/src/ui/ConnectMyComputer/access.test.ts
+++ b/web/packages/teleterm/src/ui/ConnectMyComputer/access.test.ts
@@ -70,7 +70,7 @@ test.each(testCases)('$name', testCase => {
list: false,
use: false,
read: false,
- pb_delete: false,
+ delete: false,
},
},
});
diff --git a/web/packages/teleterm/src/ui/ConnectMyComputer/access.ts b/web/packages/teleterm/src/ui/ConnectMyComputer/access.ts
index bea3c41961baf..2729cba25192e 100644
--- a/web/packages/teleterm/src/ui/ConnectMyComputer/access.ts
+++ b/web/packages/teleterm/src/ui/ConnectMyComputer/access.ts
@@ -52,13 +52,13 @@ export function getConnectMyComputerAccess(
if (
!loggedInUser ||
- loggedInUser.userType === tsh.UserType.USER_TYPE_UNSPECIFIED ||
+ loggedInUser.userType === tsh.UserType.UNSPECIFIED ||
!loggedInUser.acl
) {
return { status: 'unknown' };
}
- if (loggedInUser.userType === tsh.UserType.USER_TYPE_SSO) {
+ if (loggedInUser.userType === tsh.UserType.SSO) {
return { status: 'no-access', reason: 'sso-user' };
}
diff --git a/web/packages/teleterm/src/ui/ConnectMyComputer/connectMyComputerContext.test.tsx b/web/packages/teleterm/src/ui/ConnectMyComputer/connectMyComputerContext.test.tsx
index 12fadfe00acd4..714df65ef1af9 100644
--- a/web/packages/teleterm/src/ui/ConnectMyComputer/connectMyComputerContext.test.tsx
+++ b/web/packages/teleterm/src/ui/ConnectMyComputer/connectMyComputerContext.test.tsx
@@ -58,7 +58,7 @@ function getMocks() {
list: false,
use: false,
read: false,
- pb_delete: false,
+ delete: false,
},
},
}),
diff --git a/web/packages/teleterm/src/ui/DocumentCluster/ActionButtons.story.tsx b/web/packages/teleterm/src/ui/DocumentCluster/ActionButtons.story.tsx
index 67f80c77286f9..f0aa95f897ae8 100644
--- a/web/packages/teleterm/src/ui/DocumentCluster/ActionButtons.story.tsx
+++ b/web/packages/teleterm/src/ui/DocumentCluster/ActionButtons.story.tsx
@@ -114,7 +114,7 @@ function HttpApp() {
function Server() {
const appContext = new MockAppContext();
const testCluster = makeRootCluster();
- testCluster.loggedInUser.sshLoginsList = ['ec2-user'];
+ testCluster.loggedInUser.sshLogins = ['ec2-user'];
appContext.workspacesService.setState(d => {
d.rootClusterUri = testCluster.uri;
});
diff --git a/web/packages/teleterm/src/ui/DocumentCluster/ActionButtons.tsx b/web/packages/teleterm/src/ui/DocumentCluster/ActionButtons.tsx
index a2b881abe7c1c..bcdb9b3a33ede 100644
--- a/web/packages/teleterm/src/ui/DocumentCluster/ActionButtons.tsx
+++ b/web/packages/teleterm/src/ui/DocumentCluster/ActionButtons.tsx
@@ -50,7 +50,7 @@ export function ConnectServerActionButton(props: {
function getSshLogins(): string[] {
const cluster = ctx.clustersService.findClusterByResource(props.server.uri);
- return cluster?.loggedInUser?.sshLoginsList || [];
+ return cluster?.loggedInUser?.sshLogins || [];
}
function connect(login: string): void {
diff --git a/web/packages/teleterm/src/ui/DocumentCluster/DocumentCluster.story.tsx b/web/packages/teleterm/src/ui/DocumentCluster/DocumentCluster.story.tsx
index 211c19075240e..2337cbd6276ec 100644
--- a/web/packages/teleterm/src/ui/DocumentCluster/DocumentCluster.story.tsx
+++ b/web/packages/teleterm/src/ui/DocumentCluster/DocumentCluster.story.tsx
@@ -65,13 +65,13 @@ export const OnlineEmptyResourcesAndCanAddResourcesAndConnectComputer = () => {
makeRootCluster({
uri: rootClusterDoc.clusterUri,
loggedInUser: makeLoggedInUser({
- userType: tsh.UserType.USER_TYPE_LOCAL,
+ userType: tsh.UserType.LOCAL,
acl: {
tokens: {
create: true,
list: true,
edit: true,
- pb_delete: true,
+ delete: true,
read: true,
use: true,
},
@@ -101,13 +101,13 @@ export const OnlineEmptyResourcesAndCanAddResourcesButCannotConnectComputer =
makeRootCluster({
uri: rootClusterDoc.clusterUri,
loggedInUser: makeLoggedInUser({
- userType: tsh.UserType.USER_TYPE_SSO,
+ userType: tsh.UserType.SSO,
acl: {
tokens: {
create: true,
list: true,
edit: true,
- pb_delete: true,
+ delete: true,
read: true,
use: true,
},
@@ -141,7 +141,7 @@ export const OnlineEmptyResourcesAndCannotAddResources = () => {
create: false,
list: true,
edit: true,
- pb_delete: true,
+ delete: true,
read: true,
use: true,
},
diff --git a/web/packages/teleterm/src/ui/DocumentCluster/DocumentCluster.test.tsx b/web/packages/teleterm/src/ui/DocumentCluster/DocumentCluster.test.tsx
index edfa57a91194c..5d6802dfdce64 100644
--- a/web/packages/teleterm/src/ui/DocumentCluster/DocumentCluster.test.tsx
+++ b/web/packages/teleterm/src/ui/DocumentCluster/DocumentCluster.test.tsx
@@ -48,13 +48,13 @@ it('displays a button for Connect My Computer in the empty state if the user can
makeRootCluster({
uri: doc.clusterUri,
loggedInUser: makeLoggedInUser({
- userType: tsh.UserType.USER_TYPE_LOCAL,
+ userType: tsh.UserType.LOCAL,
acl: {
tokens: {
create: true,
list: true,
edit: true,
- pb_delete: true,
+ delete: true,
read: true,
use: true,
},
@@ -118,13 +118,13 @@ it('does not display a button for Connect My Computer in the empty state if the
makeRootCluster({
uri: doc.clusterUri,
loggedInUser: makeLoggedInUser({
- userType: tsh.UserType.USER_TYPE_LOCAL,
+ userType: tsh.UserType.LOCAL,
acl: {
tokens: {
create: false,
list: true,
edit: true,
- pb_delete: true,
+ delete: true,
read: true,
use: true,
},
diff --git a/web/packages/teleterm/src/ui/DocumentCluster/UnifiedResources.tsx b/web/packages/teleterm/src/ui/DocumentCluster/UnifiedResources.tsx
index dae70baace1ae..0437934111708 100644
--- a/web/packages/teleterm/src/ui/DocumentCluster/UnifiedResources.tsx
+++ b/web/packages/teleterm/src/ui/DocumentCluster/UnifiedResources.tsx
@@ -37,10 +37,10 @@ import * as icons from 'design/Icon';
import Image from 'design/Image';
import stack from 'design/assets/resources/stack.png';
-import { DefaultTab } from 'shared/services/unifiedResourcePreferences';
-
import { Attempt } from 'shared/hooks/useAsync';
+import { DefaultTab } from 'gen-proto-ts/teleport/userpreferences/v1/unified_resource_preferences_pb';
+
import {
UnifiedResourceResponse,
UserPreferences,
@@ -86,8 +86,7 @@ export function UnifiedResources(props: {
() => ({
kinds: props.queryParams.resourceKinds,
sort: props.queryParams.sort,
- pinnedOnly:
- unifiedResourcePreferences.defaultTab === DefaultTab.DEFAULT_TAB_PINNED,
+ pinnedOnly: unifiedResourcePreferences.defaultTab === DefaultTab.PINNED,
search: props.queryParams.advancedSearchEnabled
? ''
: props.queryParams.search,
@@ -190,7 +189,7 @@ const Resources = memo(
field: props.queryParams.sort.fieldName,
},
search: props.queryParams.search,
- kindsList: props.queryParams.kinds,
+ kinds: props.queryParams.kinds,
query: props.queryParams.query,
pinnedOnly: props.queryParams.pinnedOnly,
startKey: paginationParams.startKey,
@@ -228,24 +227,23 @@ const Resources = memo(
return cleanup;
}, [onResourcesRefreshRequest, fetch, clear]);
- const resourceIdsList =
- props.userPreferences.clusterPreferences?.pinnedResources
- ?.resourceIdsList;
+ const resourceIds =
+ props.userPreferences.clusterPreferences?.pinnedResources?.resourceIds;
const { updateUserPreferences } = props;
const pinning = useMemo(() => {
- return resourceIdsList
+ return resourceIds
? {
kind: 'supported',
- getClusterPinnedResources: async () => resourceIdsList,
+ getClusterPinnedResources: async () => resourceIds,
updateClusterPinnedResources: pinnedIds =>
updateUserPreferences({
clusterPreferences: {
- pinnedResources: { resourceIdsList: pinnedIds },
+ pinnedResources: { resourceIds: pinnedIds },
},
}),
}
: { kind: 'not-supported' };
- }, [updateUserPreferences, resourceIdsList]);
+ }, [updateUserPreferences, resourceIds]);
return (
{
const newPreferences: UserPreferences = {
clusterPreferences: {},
unifiedResourcePreferences: {
- viewMode: ViewMode.VIEW_MODE_LIST,
- defaultTab: DefaultTab.DEFAULT_TAB_PINNED,
- labelsViewMode: LabelsViewMode.LABELS_VIEW_MODE_COLLAPSED,
+ viewMode: ViewMode.LIST,
+ defaultTab: DefaultTab.PINNED,
+ labelsViewMode: LabelsViewMode.COLLAPSED,
},
};
@@ -201,9 +202,9 @@ describe('updating preferences', () => {
const newPreferences: UserPreferences = {
clusterPreferences: {},
unifiedResourcePreferences: {
- viewMode: ViewMode.VIEW_MODE_LIST,
- defaultTab: DefaultTab.DEFAULT_TAB_PINNED,
- labelsViewMode: LabelsViewMode.LABELS_VIEW_MODE_COLLAPSED,
+ viewMode: ViewMode.LIST,
+ defaultTab: DefaultTab.PINNED,
+ labelsViewMode: LabelsViewMode.COLLAPSED,
},
};
@@ -232,11 +233,11 @@ describe('updating preferences', () => {
// (e.g., because they were changed it in the browser in the meantime)
act(() =>
resolveUpdateUserPreferencesPromise({
- clusterPreferences: { pinnedResources: { resourceIdsList: ['abc'] } },
+ clusterPreferences: { pinnedResources: { resourceIds: ['abc'] } },
unifiedResourcePreferences: {
- viewMode: ViewMode.VIEW_MODE_CARD,
- defaultTab: DefaultTab.DEFAULT_TAB_PINNED,
- labelsViewMode: LabelsViewMode.LABELS_VIEW_MODE_COLLAPSED,
+ viewMode: ViewMode.CARD,
+ defaultTab: DefaultTab.PINNED,
+ labelsViewMode: LabelsViewMode.COLLAPSED,
},
})
);
@@ -248,7 +249,7 @@ describe('updating preferences', () => {
);
expect(
result.current.userPreferences.clusterPreferences.pinnedResources
- .resourceIdsList
+ .resourceIds
).toEqual(['abc']);
});
});
diff --git a/web/packages/teleterm/src/ui/DocumentCluster/useUserPreferences.ts b/web/packages/teleterm/src/ui/DocumentCluster/useUserPreferences.ts
index 033ac6fc31fdb..f1113f509d8b6 100644
--- a/web/packages/teleterm/src/ui/DocumentCluster/useUserPreferences.ts
+++ b/web/packages/teleterm/src/ui/DocumentCluster/useUserPreferences.ts
@@ -32,10 +32,10 @@ import {
import {
DefaultTab,
- ViewMode,
- UnifiedResourcePreferences,
LabelsViewMode,
-} from 'shared/services/unifiedResourcePreferences';
+ UnifiedResourcePreferences,
+ ViewMode,
+} from 'gen-proto-ts/teleport/userpreferences/v1/unified_resource_preferences_pb';
import { useAppContext } from 'teleterm/ui/appContextProvider';
@@ -62,16 +62,16 @@ export function useUserPreferences(clusterUri: ClusterUri): {
routing.ensureRootClusterUri(clusterUri)
)
) || {
- defaultTab: DefaultTab.DEFAULT_TAB_ALL,
- viewMode: ViewMode.VIEW_MODE_CARD,
- labelsViewMode: LabelsViewMode.LABELS_VIEW_MODE_COLLAPSED,
+ defaultTab: DefaultTab.ALL,
+ viewMode: ViewMode.CARD,
+ labelsViewMode: LabelsViewMode.COLLAPSED,
}
);
const [clusterPreferences, setClusterPreferences] = useState<
UserPreferences['clusterPreferences']
>({
// we pass an empty array, so pinning is enabled by default
- pinnedResources: { resourceIdsList: [] },
+ pinnedResources: { resourceIds: [] },
});
const [initialFetchAttempt, runInitialFetchAttempt] = useAsync(
@@ -221,17 +221,16 @@ function mergeWithDefaultUnifiedResourcePreferences(
return {
defaultTab: unifiedResourcePreferences
? unifiedResourcePreferences.defaultTab
- : DefaultTab.DEFAULT_TAB_ALL,
+ : DefaultTab.ALL,
viewMode:
unifiedResourcePreferences &&
- unifiedResourcePreferences.viewMode !== ViewMode.VIEW_MODE_UNSPECIFIED
+ unifiedResourcePreferences.viewMode !== ViewMode.UNSPECIFIED
? unifiedResourcePreferences.viewMode
- : ViewMode.VIEW_MODE_CARD,
+ : ViewMode.CARD,
labelsViewMode:
unifiedResourcePreferences &&
- unifiedResourcePreferences.labelsViewMode !==
- LabelsViewMode.LABELS_VIEW_MODE_UNSPECIFIED
+ unifiedResourcePreferences.labelsViewMode !== LabelsViewMode.UNSPECIFIED
? unifiedResourcePreferences.labelsViewMode
- : LabelsViewMode.LABELS_VIEW_MODE_COLLAPSED,
+ : LabelsViewMode.COLLAPSED,
};
}
diff --git a/web/packages/teleterm/src/ui/DocumentTerminal/useTshFileTransferHandlers.ts b/web/packages/teleterm/src/ui/DocumentTerminal/useTshFileTransferHandlers.ts
index 7eed1e058c741..5fdc9c3b2835e 100644
--- a/web/packages/teleterm/src/ui/DocumentTerminal/useTshFileTransferHandlers.ts
+++ b/web/packages/teleterm/src/ui/DocumentTerminal/useTshFileTransferHandlers.ts
@@ -21,7 +21,8 @@ import {
createFileTransferEventsEmitter,
} from 'shared/components/FileTransfer';
-import { FileTransferDirection } from 'teleterm/services/tshd/types';
+import { FileTransferDirection } from 'gen-proto-ts/teleport/lib/teleterm/v1/service_pb';
+
import { retryWithRelogin } from 'teleterm/ui/utils';
import { useAppContext } from 'teleterm/ui/appContextProvider';
import { IAppContext } from 'teleterm/ui/types';
@@ -40,7 +41,7 @@ export function useTshFileTransferHandlers() {
appContext,
file,
abortController,
- FileTransferDirection.FILE_TRANSFER_DIRECTION_UPLOAD
+ FileTransferDirection.UPLOAD
);
},
download(
@@ -51,7 +52,7 @@ export function useTshFileTransferHandlers() {
appContext,
file,
abortController,
- FileTransferDirection.FILE_TRANSFER_DIRECTION_DOWNLOAD
+ FileTransferDirection.DOWNLOAD
);
},
};
diff --git a/web/packages/teleterm/src/ui/HeadlessAuthn/HeadlessAuthentication.tsx b/web/packages/teleterm/src/ui/HeadlessAuthn/HeadlessAuthentication.tsx
index 298cd8cfeaddf..83cfc4b78c896 100644
--- a/web/packages/teleterm/src/ui/HeadlessAuthn/HeadlessAuthentication.tsx
+++ b/web/packages/teleterm/src/ui/HeadlessAuthn/HeadlessAuthentication.tsx
@@ -20,11 +20,11 @@ import React, { useRef, useEffect } from 'react';
import { useAsync } from 'shared/hooks/useAsync';
+import { HeadlessAuthenticationState } from 'gen-proto-ts/teleport/lib/teleterm/v1/service_pb';
+
import { useAppContext } from 'teleterm/ui/appContextProvider';
import { RootClusterUri } from 'teleterm/ui/uri';
-import { HeadlessAuthenticationState } from 'teleterm/services/tshd/types';
-
import { HeadlessPrompt } from './HeadlessPrompt';
interface HeadlessAuthenticationProps {
@@ -55,7 +55,7 @@ export function HeadlessAuthentication(props: HeadlessAuthenticationProps) {
async function handleHeadlessApprove(): Promise {
const [, error] = await updateHeadlessState(
- HeadlessAuthenticationState.HEADLESS_AUTHENTICATION_STATE_APPROVED
+ HeadlessAuthenticationState.APPROVED
);
if (!error) {
props.onSuccess();
@@ -64,7 +64,7 @@ export function HeadlessAuthentication(props: HeadlessAuthenticationProps) {
async function handleHeadlessReject(): Promise {
const [, error] = await updateHeadlessState(
- HeadlessAuthenticationState.HEADLESS_AUTHENTICATION_STATE_DENIED
+ HeadlessAuthenticationState.DENIED
);
if (!error) {
props.onSuccess();
diff --git a/web/packages/teleterm/src/ui/Search/actions.tsx b/web/packages/teleterm/src/ui/Search/actions.tsx
index 7f6ee5d16c326..a76478fdc9079 100644
--- a/web/packages/teleterm/src/ui/Search/actions.tsx
+++ b/web/packages/teleterm/src/ui/Search/actions.tsx
@@ -65,7 +65,7 @@ export function mapToAction(
parameter: {
getSuggestions: async () =>
ctx.clustersService.findClusterByResource(result.resource.uri)
- ?.loggedInUser?.sshLoginsList,
+ ?.loggedInUser?.sshLogins,
placeholder: 'Provide login',
},
perform: login => {
diff --git a/web/packages/teleterm/src/ui/Search/pickers/ActionPicker.tsx b/web/packages/teleterm/src/ui/Search/pickers/ActionPicker.tsx
index 7bf4b6b4edf6c..e925389c276c2 100644
--- a/web/packages/teleterm/src/ui/Search/pickers/ActionPicker.tsx
+++ b/web/packages/teleterm/src/ui/Search/pickers/ActionPicker.tsx
@@ -966,7 +966,7 @@ function Labels(
scoreMap.set(match.labelName, currentScore + match.score);
});
- const sortedLabelsList = [...searchResult.resource.labelsList];
+ const sortedLabelsList = [...searchResult.resource.labels];
sortedLabelsList.sort(
(a, b) =>
// Highest score first.
diff --git a/web/packages/teleterm/src/ui/Search/pickers/results.story.tsx b/web/packages/teleterm/src/ui/Search/pickers/results.story.tsx
index e87c399c961d5..263e9d72f432b 100644
--- a/web/packages/teleterm/src/ui/Search/pickers/results.story.tsx
+++ b/web/packages/teleterm/src/ui/Search/pickers/results.story.tsx
@@ -110,7 +110,7 @@ const SearchResultItems = () => {
hostname: 'long-label-list',
uri: `${clusterUri}/servers/2f96e498-88ec-442f-a25b-569fa915041c`,
name: '2f96e498-88ec-442f-a25b-569fa915041c',
- labelsList: makeLabelsList({
+ labels: makeLabelsList({
arch: 'aarch64',
external: '32.192.113.93',
internal: '10.0.0.175',
@@ -127,7 +127,7 @@ const SearchResultItems = () => {
tunnel: true,
uri: `${clusterUri}/servers/90a29595-aac7-42eb-a484-c6c0e23f1a21`,
name: '90a29595-aac7-42eb-a484-c6c0e23f1a21',
- labelsList: makeLabelsList({
+ labels: makeLabelsList({
arch: 'aarch64',
service: 'ansible',
external: '32.192.113.93',
@@ -144,7 +144,7 @@ const SearchResultItems = () => {
tunnel: true,
uri: `${clusterUri}/servers/bbaaceba-6bd1-4750-9d3d-1a80e0cc8a63`,
name: 'bbaaceba-6bd1-4750-9d3d-1a80e0cc8a63',
- labelsList: makeLabelsList({
+ labels: makeLabelsList({
internal: '10.0.0.175',
service: 'ansible',
external: '32.192.113.93',
@@ -158,7 +158,7 @@ const SearchResultItems = () => {
hostname:
'super-long-server-name-with-uuid-2f96e498-88ec-442f-a25b-569fa915041c',
uri: `${longClusterUri}/servers/super-long-desc`,
- labelsList: makeLabelsList({
+ labels: makeLabelsList({
internal: '10.0.0.175',
service: 'ansible',
external: '32.192.113.93',
@@ -172,7 +172,7 @@ const SearchResultItems = () => {
uri: `${clusterUri}/apps/no-desc`,
name: 'no-desc',
desc: '',
- labelsList: makeLabelsList({
+ labels: makeLabelsList({
access: 'cloudwatch-metrics,ec2,s3,cloudtrail',
'aws/Environment': 'demo-13-biz',
'aws/Owner': 'foobar',
@@ -187,7 +187,7 @@ const SearchResultItems = () => {
uri: `${clusterUri}/apps/short-desc`,
name: 'short-desc',
desc: 'Lorem ipsum',
- labelsList: makeLabelsList({
+ labels: makeLabelsList({
access: 'cloudwatch-metrics,ec2,s3,cloudtrail',
'aws/Environment': 'demo-13-biz',
'aws/Owner': 'foobar',
@@ -202,7 +202,7 @@ const SearchResultItems = () => {
uri: `${clusterUri}/apps/long-desc`,
name: 'long-desc',
desc: 'Eget dignissim lectus nisi vitae nunc',
- labelsList: makeLabelsList({
+ labels: makeLabelsList({
access: 'cloudwatch-metrics,ec2,s3,cloudtrail',
'aws/Environment': 'demo-13-biz',
'aws/Owner': 'foobar',
@@ -217,7 +217,7 @@ const SearchResultItems = () => {
uri: `${clusterUri}/apps/super-long-desc`,
name: 'super-long-desc',
desc: 'Duis id tortor at purus tincidunt finibus. Mauris eu semper orci, non commodo lacus. Praesent sollicitudin magna id laoreet porta. Nunc lobortis varius sem vel fringilla.',
- labelsList: makeLabelsList({
+ labels: makeLabelsList({
access: 'cloudwatch-metrics,ec2,s3,cloudtrail',
'aws/Environment': 'demo-13-biz',
'aws/Owner': 'foobar',
@@ -232,7 +232,7 @@ const SearchResultItems = () => {
name: 'super-long-app-with-uuid-1f96e498-88ec-442f-a25b-569fa915041c',
desc: 'short-desc',
uri: `${longClusterUri}/apps/super-long-desc`,
- labelsList: makeLabelsList({
+ labels: makeLabelsList({
access: 'cloudwatch-metrics,ec2,s3,cloudtrail',
'aws/Environment': 'demo-13-biz',
'aws/Owner': 'foobar',
@@ -248,7 +248,7 @@ const SearchResultItems = () => {
uri: `${clusterUri}/dbs/no-desc`,
name: 'no-desc',
desc: '',
- labelsList: makeLabelsList({
+ labels: makeLabelsList({
'aws/Accounting': 'dev-ops',
'aws/Environment': 'demo-13-biz',
'aws/Name': 'db-bastion-4-13biz',
@@ -266,7 +266,7 @@ const SearchResultItems = () => {
uri: `${clusterUri}/dbs/short-desc`,
name: 'short-desc',
desc: 'Lorem ipsum',
- labelsList: makeLabelsList({
+ labels: makeLabelsList({
'aws/Environment': 'demo-13-biz',
'aws/Name': 'db-bastion-4-13biz',
'aws/Accounting': 'dev-ops',
@@ -284,7 +284,7 @@ const SearchResultItems = () => {
uri: `${clusterUri}/dbs/long-desc`,
name: 'long-desc',
desc: 'Eget dignissim lectus nisi vitae nunc',
- labelsList: makeLabelsList({
+ labels: makeLabelsList({
'aws/Environment': 'demo-13-biz',
'aws/Name': 'db-bastion-4-13biz',
'aws/Accounting': 'dev-ops',
@@ -302,7 +302,7 @@ const SearchResultItems = () => {
uri: `${clusterUri}/dbs/super-long-desc`,
name: 'super-long-desc',
desc: 'Duis id tortor at purus tincidunt finibus. Mauris eu semper orci, non commodo lacus. Praesent sollicitudin magna id laoreet porta. Nunc lobortis varius sem vel fringilla.',
- labelsList: makeLabelsList({
+ labels: makeLabelsList({
'aws/Environment': 'demo-13-biz',
'aws/Accounting': 'dev-ops',
'aws/Name': 'db-bastion-4-13biz',
@@ -319,7 +319,7 @@ const SearchResultItems = () => {
resource: makeDatabase({
name: 'super-long-server-db-with-uuid-2f96e498-88ec-442f-a25b-569fa915041c',
uri: `${longClusterUri}/dbs/super-long-desc`,
- labelsList: makeLabelsList({
+ labels: makeLabelsList({
'aws/Environment': 'demo-13-biz',
'aws/Accounting': 'dev-ops',
'aws/Name': 'db-bastion-4-13biz',
@@ -335,7 +335,7 @@ const SearchResultItems = () => {
kind: 'kube',
resource: makeKube({
name: 'short-label-list',
- labelsList: makeLabelsList({
+ labels: makeLabelsList({
'im-just-a-smol': 'kube',
kube: 'kubersson',
with: 'little-to-no-labels',
@@ -347,7 +347,7 @@ const SearchResultItems = () => {
resource: makeKube({
name: 'long-label-list',
uri: `${clusterUri}/kubes/long-label-list`,
- labelsList: makeLabelsList({
+ labels: makeLabelsList({
'aws/Environment': 'demo-13-biz',
'aws/Owner': 'foobar',
'aws/Name': 'db-bastion-4-13biz',
@@ -361,7 +361,7 @@ const SearchResultItems = () => {
resource: makeKube({
name: 'super-long-kube-name-with-uuid-2f96e498-88ec-442f-a25b-569fa915041c',
uri: `/clusters/teleport-very-long-cluster-name-with-uuid-2f96e498-88ec-442f-a25b-569fa915041c/kubes/super-long-desc`,
- labelsList: makeLabelsList({
+ labels: makeLabelsList({
'im-just-a-smol': 'kube',
kube: 'kubersson',
with: 'little-to-no-labels',
diff --git a/web/packages/teleterm/src/ui/Search/searchResult.ts b/web/packages/teleterm/src/ui/Search/searchResult.ts
index e3c4e27da86e8..006dafffeb7bd 100644
--- a/web/packages/teleterm/src/ui/Search/searchResult.ts
+++ b/web/packages/teleterm/src/ui/Search/searchResult.ts
@@ -109,10 +109,7 @@ export const mainResourceField: {
// fields of string type.
export const searchableFields: {
[Kind in ResourceSearchResult['kind']]: ReadonlyArray<
- Exclude<
- keyof resourcesServiceTypes.SearchResultResource,
- 'labelsList'
- >
+ Exclude, 'labels'>
>;
} = {
server: ['name', 'hostname', 'addr'],
diff --git a/web/packages/teleterm/src/ui/Search/useSearch.test.tsx b/web/packages/teleterm/src/ui/Search/useSearch.test.tsx
index f8034b68969e5..d61f35b34d5e3 100644
--- a/web/packages/teleterm/src/ui/Search/useSearch.test.tsx
+++ b/web/packages/teleterm/src/ui/Search/useSearch.test.tsx
@@ -58,7 +58,7 @@ describe('rankResults', () => {
const server = makeResourceResult({
kind: 'server',
resource: makeServer({
- labelsList: makeLabelsList({ quux: 'bar-baz', foo: 'bar' }),
+ labels: makeLabelsList({ quux: 'bar-baz', foo: 'bar' }),
}),
});
@@ -87,7 +87,7 @@ describe('rankResults', () => {
makeResourceResult({
kind: 'server',
resource: makeServer({
- labelsList: makeLabelsList({ foo: 'bar1' }),
+ labels: makeLabelsList({ foo: 'bar1' }),
}),
})
);
@@ -99,7 +99,7 @@ describe('rankResults', () => {
kind: 'server',
resource: makeServer({
uri: lowestScoreServerUri,
- labelsList: makeLabelsList({ foo: 'bar123456' }),
+ labels: makeLabelsList({ foo: 'bar123456' }),
}),
})
);
@@ -111,7 +111,7 @@ describe('rankResults', () => {
kind: 'server',
resource: makeServer({
uri: highestScoreServerUri,
- labelsList: makeLabelsList({ foo: 'bar' }),
+ labels: makeLabelsList({ foo: 'bar' }),
}),
})
);
diff --git a/web/packages/teleterm/src/ui/Search/useSearch.ts b/web/packages/teleterm/src/ui/Search/useSearch.ts
index 85cc9c9fcac2c..ca6a31eb36674 100644
--- a/web/packages/teleterm/src/ui/Search/useSearch.ts
+++ b/web/packages/teleterm/src/ui/Search/useSearch.ts
@@ -277,7 +277,7 @@ function populateMatches(
const resourceMatches: ResourceMatch[] = [];
terms.forEach(term => {
- searchResult.resource.labelsList.forEach(label => {
+ searchResult.resource.labels.forEach(label => {
// indexOf is faster on Chrome than includes or regex.
// https://jsbench.me/b7lf9kvrux/1
const nameIndex = label.name.toLocaleLowerCase().indexOf(term);
@@ -328,7 +328,7 @@ function calculateScore(
let searchResultScore = 0;
const labelMatches = searchResult.labelMatches.map(match => {
- const label = searchResult.resource.labelsList.find(
+ const label = searchResult.resource.labels.find(
label => label.name === match.labelName
);
let matchedValue: string;
diff --git a/web/packages/teleterm/src/ui/TopBar/Identity/Identity.story.tsx b/web/packages/teleterm/src/ui/TopBar/Identity/Identity.story.tsx
index ed40a8fe5b01a..40bf70dceca99 100644
--- a/web/packages/teleterm/src/ui/TopBar/Identity/Identity.story.tsx
+++ b/web/packages/teleterm/src/ui/TopBar/Identity/Identity.story.tsx
@@ -97,8 +97,8 @@ export function OneClusterWithActiveCluster() {
proxyHost: 'localhost:3080',
loggedInUser: makeLoggedInUser({
name: 'alice',
- rolesList: ['access', 'editor'],
- sshLoginsList: ['root'],
+ roles: ['access', 'editor'],
+ sshLogins: ['root'],
}),
});
@@ -183,8 +183,8 @@ export function ManyClustersWithActiveCluster() {
proxyHost: 'localhost:3080',
loggedInUser: makeLoggedInUser({
name: activeIdentityRootCluster.userName,
- rolesList: ['access', 'editor'],
- sshLoginsList: ['root'],
+ roles: ['access', 'editor'],
+ sshLogins: ['root'],
}),
});
@@ -234,7 +234,7 @@ export function LongNamesWithManyRoles() {
proxyHost: 'localhost:3080',
loggedInUser: makeLoggedInUser({
name: activeIdentityRootCluster.userName,
- rolesList: [
+ roles: [
'circle-mark-app-access',
'grafana-lite-app-access',
'grafana-gold-app-access',
@@ -245,7 +245,7 @@ export function LongNamesWithManyRoles() {
'sales-center-shop-app-access',
'sales-center-floor-db-access',
],
- sshLoginsList: ['root'],
+ sshLogins: ['root'],
}),
});
diff --git a/web/packages/teleterm/src/ui/TopBar/Identity/IdentityList/IdentityList.tsx b/web/packages/teleterm/src/ui/TopBar/Identity/IdentityList/IdentityList.tsx
index 4da4221e9c17d..b1cf1a8bb86f0 100644
--- a/web/packages/teleterm/src/ui/TopBar/Identity/IdentityList/IdentityList.tsx
+++ b/web/packages/teleterm/src/ui/TopBar/Identity/IdentityList/IdentityList.tsx
@@ -48,7 +48,7 @@ export function IdentityList(props: IdentityListProps) {
{props.loggedInUser.name}
- {props.loggedInUser.rolesList.map(role => (
+ {props.loggedInUser.roles.map(role => (
diff --git a/web/packages/teleterm/src/ui/services/clusters/clustersService.ts b/web/packages/teleterm/src/ui/services/clusters/clustersService.ts
index fd0c6140d26ea..0ad49bef48897 100644
--- a/web/packages/teleterm/src/ui/services/clusters/clustersService.ts
+++ b/web/packages/teleterm/src/ui/services/clusters/clustersService.ts
@@ -177,6 +177,7 @@ export class ClustersService extends ImmutableStore
clusters.map(c => [c.uri, this.removeInternalLoginsFromCluster(c)])
);
});
+
clusters
.filter(c => c.connected)
.forEach(c => this.syncRootClusterAndCatchErrors(c.uri));
@@ -520,7 +521,7 @@ export class ClustersService extends ImmutableStore
// TODO: this information should eventually be gathered by getCluster
const assumedRequests = cluster.loggedInUser
? await this.fetchClusterAssumedRequests(
- cluster.loggedInUser.activeRequestsList,
+ cluster.loggedInUser.activeRequests,
clusterUri
)
: undefined;
@@ -555,7 +556,7 @@ export class ClustersService extends ImmutableStore
requestsMap[request.id] = {
id: request.id,
expires: new Date(request.expires.seconds * 1000),
- roles: request.rolesList,
+ roles: request.roles,
};
return requestsMap;
}, {});
@@ -569,7 +570,7 @@ export class ClustersService extends ImmutableStore
...cluster,
loggedInUser: cluster.loggedInUser && {
...cluster.loggedInUser,
- sshLoginsList: cluster.loggedInUser.sshLoginsList.filter(
+ sshLogins: cluster.loggedInUser.sshLogins.filter(
login => !login.startsWith('-')
),
},
@@ -583,7 +584,7 @@ export function makeServer(source: tsh.Server) {
id: source.name,
clusterId: source.name,
hostname: source.hostname,
- labels: source.labelsList,
+ labels: source.labels,
addr: source.addr,
tunnel: source.tunnel,
sshLogins: [],
@@ -600,7 +601,7 @@ export function makeDatabase(source: tsh.Database) {
source.protocol as DbProtocol
).title,
protocol: source.protocol,
- labels: source.labelsList,
+ labels: source.labels,
};
}
@@ -608,7 +609,7 @@ export function makeKube(source: tsh.Kube) {
return {
uri: source.uri,
name: source.name,
- labels: source.labelsList,
+ labels: source.labels,
};
}
diff --git a/web/packages/teleterm/src/ui/services/fileTransferClient/fileTransferService.ts b/web/packages/teleterm/src/ui/services/fileTransferClient/fileTransferService.ts
index de6e3d9910350..b64574ffe6db6 100644
--- a/web/packages/teleterm/src/ui/services/fileTransferClient/fileTransferService.ts
+++ b/web/packages/teleterm/src/ui/services/fileTransferClient/fileTransferService.ts
@@ -18,11 +18,9 @@
import { FileTransferListeners } from 'shared/components/FileTransfer';
-import {
- FileTransferDirection,
- FileTransferRequest,
- TshdClient,
-} from 'teleterm/services/tshd/types';
+import { FileTransferDirection } from 'gen-proto-ts/teleport/lib/teleterm/v1/service_pb';
+
+import { FileTransferRequest, TshdClient } from 'teleterm/services/tshd/types';
import { UsageService } from 'teleterm/ui/services/usage';
export class FileTransferService {
@@ -52,17 +50,12 @@ export class FileTransferService {
{ once: true }
);
const listeners = this.tshClient.transferFile(options, abortSignal);
- if (
- options.direction ===
- FileTransferDirection.FILE_TRANSFER_DIRECTION_DOWNLOAD
- ) {
+ if (options.direction === FileTransferDirection.DOWNLOAD) {
this.usageService.captureFileTransferRun(options.serverUri, {
isUpload: false,
});
}
- if (
- options.direction === FileTransferDirection.FILE_TRANSFER_DIRECTION_UPLOAD
- ) {
+ if (options.direction === FileTransferDirection.UPLOAD) {
this.usageService.captureFileTransferRun(options.serverUri, {
isUpload: true,
});
diff --git a/web/packages/teleterm/src/ui/services/resources/resourcesService.test.ts b/web/packages/teleterm/src/ui/services/resources/resourcesService.test.ts
index c613fbdca9c4d..718c23aa739f1 100644
--- a/web/packages/teleterm/src/ui/services/resources/resourcesService.test.ts
+++ b/web/packages/teleterm/src/ui/services/resources/resourcesService.test.ts
@@ -45,7 +45,7 @@ describe('getServerByHostname', () => {
{
name: 'returns a server when the hostname matches a single server',
getServersMockedValue: {
- agentsList: [server],
+ agents: [server],
totalCount: 1,
startKey: 'foo',
},
@@ -54,7 +54,7 @@ describe('getServerByHostname', () => {
{
name: 'throws an error when the hostname matches multiple servers',
getServersMockedValue: {
- agentsList: [server, server],
+ agents: [server, server],
totalCount: 2,
startKey: 'foo',
},
@@ -63,7 +63,7 @@ describe('getServerByHostname', () => {
{
name: 'returns nothing if the hostname does not match any servers',
getServersMockedValue: {
- agentsList: [],
+ agents: [],
totalCount: 0,
startKey: 'foo',
},
@@ -107,22 +107,22 @@ describe('searchResources', () => {
const tshClient: Partial = {
getServers: jest.fn().mockResolvedValueOnce({
- agentsList: [server],
+ agents: [server],
totalCount: 1,
startKey: '',
}),
getDatabases: jest.fn().mockResolvedValueOnce({
- agentsList: [db],
+ agents: [db],
totalCount: 1,
startKey: '',
}),
getKubes: jest.fn().mockResolvedValueOnce({
- agentsList: [kube],
+ agents: [kube],
totalCount: 1,
startKey: '',
}),
getApps: jest.fn().mockResolvedValueOnce({
- agentsList: [app],
+ agents: [app],
totalCount: 1,
startKey: '',
}),
@@ -161,7 +161,7 @@ describe('searchResources', () => {
const server = makeServer();
const tshClient: Partial = {
getServers: jest.fn().mockResolvedValueOnce({
- agentsList: [server],
+ agents: [server],
totalCount: 1,
startKey: '',
}),
diff --git a/web/packages/teleterm/src/ui/services/resources/resourcesService.ts b/web/packages/teleterm/src/ui/services/resources/resourcesService.ts
index 7d9730e2aa42a..fcf8dadbc2609 100644
--- a/web/packages/teleterm/src/ui/services/resources/resourcesService.ts
+++ b/web/packages/teleterm/src/ui/services/resources/resourcesService.ts
@@ -38,7 +38,7 @@ export class ResourcesService {
hostname: string
): Promise {
const query = `name == "${hostname}"`;
- const { agentsList: servers } = await this.fetchServers({
+ const { agents: servers } = await this.fetchServers({
clusterUri,
query,
limit: 2,
@@ -94,7 +94,7 @@ export class ResourcesService {
const getServers = () =>
this.fetchServers(params).then(
res =>
- res.agentsList.map(resource => ({
+ res.agents.map(resource => ({
kind: 'server' as const,
resource,
})),
@@ -104,7 +104,7 @@ export class ResourcesService {
const getApps = () =>
this.fetchApps(params).then(
res =>
- res.agentsList.map(resource => ({
+ res.agents.map(resource => ({
kind: 'app' as const,
resource: makeApp(resource),
})),
@@ -113,7 +113,7 @@ export class ResourcesService {
const getDatabases = () =>
this.fetchDatabases(params).then(
res =>
- res.agentsList.map(resource => ({
+ res.agents.map(resource => ({
kind: 'database' as const,
resource,
})),
@@ -123,7 +123,7 @@ export class ResourcesService {
const getKubes = () =>
this.fetchKubes(params).then(
res =>
- res.agentsList.map(resource => ({
+ res.agents.map(resource => ({
kind: 'kube' as const,
resource,
})),
diff --git a/web/packages/teleterm/src/ui/services/usage/usageService.ts b/web/packages/teleterm/src/ui/services/usage/usageService.ts
index 17ee6535842eb..e2092f590283d 100644
--- a/web/packages/teleterm/src/ui/services/usage/usageService.ts
+++ b/web/packages/teleterm/src/ui/services/usage/usageService.ts
@@ -16,12 +16,12 @@
* along with this program. If not, see .
*/
+import { SubmitConnectEventRequest } from 'gen-proto-ts/prehog/v1alpha/connect_pb';
+
+import { Timestamp } from 'gen-proto-ts/google/protobuf/timestamp_pb';
+
import { ClusterOrResourceUri, ClusterUri, routing } from 'teleterm/ui/uri';
-import {
- Cluster,
- ReportUsageEventRequest,
- TshdClient,
-} from 'teleterm/services/tshd/types';
+import { Cluster, TshdClient } from 'teleterm/services/tshd/types';
import { RuntimeSettings } from 'teleterm/mainProcess/types';
import { ConfigService } from 'teleterm/services/config';
import Logger from 'teleterm/logger';
@@ -30,7 +30,7 @@ import { NotificationsService } from 'teleterm/ui/services/notifications';
import { DocumentOrigin } from 'teleterm/ui/services/workspacesService';
type PrehogEventReq = Omit<
- ReportUsageEventRequest['prehogReq'],
+ SubmitConnectEventRequest,
'distinctId' | 'timestamp'
>;
@@ -59,14 +59,17 @@ export class UsageService {
}
const { arch, platform, osVersion, appVersion } = this.runtimeSettings;
this.reportEvent(clusterProperties.authClusterId, {
- clusterLogin: {
- clusterName: clusterProperties.clusterName,
- userName: clusterProperties.userName,
- connectorType,
- arch,
- os: platform,
- osVersion,
- appVersion,
+ event: {
+ oneofKind: 'clusterLogin',
+ clusterLogin: {
+ clusterName: clusterProperties.clusterName,
+ userName: clusterProperties.userName,
+ connectorType,
+ arch,
+ os: platform,
+ osVersion,
+ appVersion,
+ },
},
});
}
@@ -84,11 +87,14 @@ export class UsageService {
return;
}
this.reportEvent(clusterProperties.authClusterId, {
- protocolUse: {
- clusterName: clusterProperties.clusterName,
- userName: clusterProperties.userName,
- protocol,
- origin,
+ event: {
+ oneofKind: 'protocolUse',
+ protocolUse: {
+ clusterName: clusterProperties.clusterName,
+ userName: clusterProperties.userName,
+ protocol,
+ origin,
+ },
},
});
}
@@ -105,10 +111,13 @@ export class UsageService {
return;
}
this.reportEvent(clusterProperties.authClusterId, {
- accessRequestCreate: {
- clusterName: clusterProperties.clusterName,
- userName: clusterProperties.userName,
- kind,
+ event: {
+ oneofKind: 'accessRequestCreate',
+ accessRequestCreate: {
+ clusterName: clusterProperties.clusterName,
+ userName: clusterProperties.userName,
+ kind,
+ },
},
});
}
@@ -122,9 +131,12 @@ export class UsageService {
return;
}
this.reportEvent(clusterProperties.authClusterId, {
- accessRequestReview: {
- clusterName: clusterProperties.clusterName,
- userName: clusterProperties.userName,
+ event: {
+ oneofKind: 'accessRequestReview',
+ accessRequestReview: {
+ clusterName: clusterProperties.clusterName,
+ userName: clusterProperties.userName,
+ },
},
});
}
@@ -138,9 +150,12 @@ export class UsageService {
return;
}
this.reportEvent(clusterProperties.authClusterId, {
- accessRequestAssumeRole: {
- clusterName: clusterProperties.clusterName,
- userName: clusterProperties.userName,
+ event: {
+ oneofKind: 'accessRequestAssumeRole',
+ accessRequestAssumeRole: {
+ clusterName: clusterProperties.clusterName,
+ userName: clusterProperties.userName,
+ },
},
});
}
@@ -157,18 +172,24 @@ export class UsageService {
return;
}
this.reportEvent(clusterProperties.authClusterId, {
- fileTransferRun: {
- clusterName: clusterProperties.clusterName,
- userName: clusterProperties.userName,
- isUpload,
+ event: {
+ oneofKind: 'fileTransferRun',
+ fileTransferRun: {
+ clusterName: clusterProperties.clusterName,
+ userName: clusterProperties.userName,
+ isUpload,
+ },
},
});
}
captureUserJobRoleUpdate(jobRole: string): void {
this.reportNonAnonymizedEvent({
- userJobRoleUpdate: {
- jobRole,
+ event: {
+ oneofKind: 'userJobRoleUpdate',
+ userJobRoleUpdate: {
+ jobRole,
+ },
},
});
}
@@ -185,12 +206,16 @@ export class UsageService {
return;
}
this.reportEvent(clusterProperties.authClusterId, {
- connectMyComputerSetup: {
- clusterName: clusterProperties.clusterName,
- userName: clusterProperties.userName,
- success: properties.success,
- failedStep:
- (properties.success === false && properties.failedStep) || undefined,
+ event: {
+ oneofKind: 'connectMyComputerSetup',
+ connectMyComputerSetup: {
+ clusterName: clusterProperties.clusterName,
+ userName: clusterProperties.userName,
+ success: properties.success,
+ failedStep:
+ (properties.success === false && properties.failedStep) ||
+ undefined,
+ },
},
});
}
@@ -204,9 +229,12 @@ export class UsageService {
return;
}
this.reportEvent(clusterProperties.authClusterId, {
- connectMyComputerAgentStart: {
- clusterName: clusterProperties.clusterName,
- userName: clusterProperties.userName,
+ event: {
+ oneofKind: 'connectMyComputerAgentStart',
+ connectMyComputerAgentStart: {
+ clusterName: clusterProperties.clusterName,
+ userName: clusterProperties.userName,
+ },
},
});
}
@@ -232,7 +260,7 @@ export class UsageService {
authClusterId,
prehogReq: {
distinctId: this.runtimeSettings.installationId,
- timestamp: new Date(),
+ timestamp: Timestamp.now(),
...prehogEventReq,
},
});
diff --git a/web/packages/teleterm/src/ui/services/workspacesService/workspacesService.ts b/web/packages/teleterm/src/ui/services/workspacesService/workspacesService.ts
index 9023845454fc8..6c94dc2497e21 100644
--- a/web/packages/teleterm/src/ui/services/workspacesService/workspacesService.ts
+++ b/web/packages/teleterm/src/ui/services/workspacesService/workspacesService.ts
@@ -25,11 +25,11 @@ import { arrayObjectIsEqual } from 'shared/utils/highbar';
import { ResourceKind } from 'e-teleport/Workflow/NewRequest/useNewRequest';
import {
- UnifiedResourcePreferences,
DefaultTab,
- ViewMode,
LabelsViewMode,
-} from 'shared/services/unifiedResourcePreferences';
+ UnifiedResourcePreferences,
+ ViewMode,
+} from 'gen-proto-ts/teleport/userpreferences/v1/unified_resource_preferences_pb';
import { ModalsService } from 'teleterm/ui/services/modals';
import { ClustersService } from 'teleterm/ui/services/clusters';
diff --git a/web/packages/teleterm/src/ui/tshdEvents.ts b/web/packages/teleterm/src/ui/tshdEvents.ts
index df80d0675fb83..4a84aed01f544 100644
--- a/web/packages/teleterm/src/ui/tshdEvents.ts
+++ b/web/packages/teleterm/src/ui/tshdEvents.ts
@@ -61,7 +61,10 @@ export function createTshdEventsContextBridgeService(
promptMfaRequest: request as tshdEvents.PromptMfaRequest,
onSuccess: totpCode => resolve({ hasCanceledModal: false, totpCode }),
onCancel: () =>
- resolve({ hasCanceledModal: true, totpCode: undefined }),
+ resolve({
+ hasCanceledModal: true,
+ totpCode: undefined,
+ }),
});
// If Webauthn is available, tshd starts two goroutines – one that sends this request and
diff --git a/web/packages/teleterm/webpack.main.config.js b/web/packages/teleterm/webpack.main.config.js
deleted file mode 100644
index 41e39cc58b446..0000000000000
--- a/web/packages/teleterm/webpack.main.config.js
+++ /dev/null
@@ -1,97 +0,0 @@
-const path = require('path');
-const { spawn } = require('child_process');
-
-const { CleanWebpackPlugin } = require('clean-webpack-plugin');
-const resolvepath = require('@gravitational/build/webpack/resolvepath');
-const configFactory = require('@gravitational/build/webpack/webpack.base');
-
-function onFirstBuildDonePlugin(env) {
- let isInitialBuild = true;
- return {
- apply: compiler => {
- compiler.hooks.done.tap('OnFirstBuildDonePlugin', (/*compilation*/) => {
- if (!isInitialBuild) {
- return;
- }
- isInitialBuild = false;
-
- const child = spawn('yarn', ['start-electron', '--inspect'], {
- shell: true,
- env,
- stdio: 'inherit',
- detached: true, // detaching the process will allow restarting electron without terminating the dev server
- });
-
- child.unref();
- });
- },
- };
-}
-
-const cfg = {
- entry: {
- main: './src/main.ts',
- preload: './src/preload.ts',
- sharedProcess: './src/sharedProcess/sharedProcess.ts',
- agentCleanupDaemon: './src/agentCleanupDaemon/agentCleanupDaemon.js',
- },
-
- output: {
- path: resolvepath('build/app/dist/main'),
- filename: '[name].js',
- },
-
- resolve: {
- ...configFactory.createDefaultConfig().resolve,
- alias: {
- ...configFactory.createDefaultConfig().resolve.alias,
- teleterm: path.join(__dirname, './src'),
- },
- },
-
- devtool: false,
-
- target: 'electron-main',
-
- optimization: {
- minimize: false,
- },
-
- module: {
- strictExportPresence: true,
- rules: [configFactory.rules.jsx()],
- },
-
- externals: {
- 'node-pty': 'commonjs2 node-pty',
- },
-
- plugins: [new CleanWebpackPlugin()],
-
- /**
- * Disables webpack processing of __dirname and __filename.
- * If you run the bundle in node.js it falls back to these values of node.js.
- * https://github.com/webpack/webpack/issues/2010
- */
- node: {
- __dirname: false,
- __filename: false,
- },
-};
-
-module.exports = (env, argv) => {
- if (argv.mode === 'development') {
- process.env.BABEL_ENV = 'development';
- process.env.NODE_ENV = 'development';
- cfg.mode = 'development';
- cfg.plugins.push(onFirstBuildDonePlugin(process.env));
- }
-
- if (argv.mode === 'production') {
- process.env.BABEL_ENV = 'production';
- process.env.NODE_ENV = 'production';
- cfg.mode = 'production';
- }
-
- return cfg;
-};
diff --git a/web/packages/teleterm/webpack.renderer.dev.config.js b/web/packages/teleterm/webpack.renderer.dev.config.js
deleted file mode 100644
index 9390f095169a6..0000000000000
--- a/web/packages/teleterm/webpack.renderer.dev.config.js
+++ /dev/null
@@ -1,36 +0,0 @@
-const { spawn } = require('child_process');
-const path = require('path');
-
-const defaultCfg = require('@gravitational/build/webpack/webpack.dev.config');
-const configFactory = require('@gravitational/build/webpack/webpack.base');
-
-const { extend } = require('./webpack.renderer.extend');
-const devCfg = extend(defaultCfg);
-
-devCfg.devServer = {
- hot: true,
- static: {
- publicPath: '/',
- directory: path.join(__dirname, 'build/app/dist/renderer'),
- serveIndex: false,
- },
- allowedHosts: 'all',
- server: {
- type: 'https',
- },
- onBeforeSetupMiddleware() {
- spawn('yarn', ['start-main'], {
- shell: true,
- env: process.env,
- stdio: 'inherit',
- }).on('error', spawnError => console.error(spawnError));
- },
-};
-
-devCfg.output.publicPath = '';
-devCfg.plugins.push(
- configFactory.plugins.tsChecker(),
- configFactory.plugins.reactRefresh()
-);
-
-module.exports = devCfg;
diff --git a/web/packages/teleterm/webpack.renderer.extend.js b/web/packages/teleterm/webpack.renderer.extend.js
deleted file mode 100644
index baf59de2af169..0000000000000
--- a/web/packages/teleterm/webpack.renderer.extend.js
+++ /dev/null
@@ -1,72 +0,0 @@
-const path = require('path');
-
-const HtmlWebPackPlugin = require('html-webpack-plugin');
-const resolvepath = require('@gravitational/build/webpack/resolvepath');
-
-function extend(cfg) {
- const isDev = cfg.mode === 'development';
-
- cfg.entry = { app: ['./src/ui/boot'] };
- cfg.output.publicPath = 'auto';
- cfg.output.path = resolvepath('build/app/dist/renderer');
- cfg.output.libraryTarget = 'umd';
- cfg.output.globalObject = 'this';
- cfg.resolve.alias['teleterm'] = path.join(__dirname, './src');
- cfg.plugins = [createHtmlPlugin({ isDev })];
-
- return cfg;
-}
-
-function createHtmlPlugin({ isDev }) {
- const csp = getCsp({ isDev });
-
- return new HtmlWebPackPlugin({
- filename: 'index.html',
- title: '',
- inject: true,
- templateContent: `
-
-
-
-
-
-
-
-
-
-
-
-
- `,
- });
-}
-
-function getCsp({ isDev }) {
- // feedbackAddress needs to be kept in sync with the same property in staticConfig.ts.
- const feedbackAddress = isDev
- ? 'https://kcwm2is93l.execute-api.us-west-2.amazonaws.com/prod'
- : 'https://usage.teleport.dev';
-
- let csp = `
-default-src 'self';
-connect-src 'self' ${feedbackAddress};
-style-src 'self' 'unsafe-inline';
-img-src 'self' data: blob:;
-object-src 'none';
-font-src 'self' data:;
-`
- .replaceAll('\n', ' ')
- .trim();
-
- if (isDev) {
- // Required to make source maps work in dev mode.
- csp += " script-src 'self' 'unsafe-eval';";
- }
-
- return csp;
-}
-
-module.exports = {
- extend,
- createHtmlPlugin,
-};
diff --git a/web/packages/teleterm/webpack.renderer.prod.config.js b/web/packages/teleterm/webpack.renderer.prod.config.js
deleted file mode 100644
index 53f4b1096c97a..0000000000000
--- a/web/packages/teleterm/webpack.renderer.prod.config.js
+++ /dev/null
@@ -1,11 +0,0 @@
-const { CleanWebpackPlugin } = require('clean-webpack-plugin');
-
-const defaultCfg = require('@gravitational/build/webpack/webpack.prod.config');
-
-const { extend } = require('./webpack.renderer.extend');
-
-const prodCfg = extend(defaultCfg);
-
-prodCfg.plugins.unshift(new CleanWebpackPlugin());
-
-module.exports = prodCfg;
diff --git a/yarn.lock b/yarn.lock
index 397c47a5314d4..a456bd86f8d0f 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -33,10 +33,10 @@
"@babel/highlight" "^7.23.4"
chalk "^2.4.2"
-"@babel/compat-data@^7.13.11", "@babel/compat-data@^7.16.0", "@babel/compat-data@^7.16.4", "@babel/compat-data@^7.22.9":
- version "7.23.2"
- resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.23.2.tgz#6a12ced93455827037bfb5ed8492820d60fc32cc"
- integrity sha512-0S9TQMmDHlqAZ2ITT95irXKfxN9bncq8ZCoJhun3nHL/lLUxd2NKBJYoNGWH7S0hz6fRQwWlAWn/ILM0C70KZQ==
+"@babel/compat-data@^7.13.11", "@babel/compat-data@^7.16.0", "@babel/compat-data@^7.16.4", "@babel/compat-data@^7.23.5":
+ version "7.23.5"
+ resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.23.5.tgz#ffb878728bb6bdcb6f4510aa51b1be9afb8cfd98"
+ integrity sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==
"@babel/core@7.12.9":
version "7.12.9"
@@ -60,33 +60,33 @@
semver "^5.4.1"
source-map "^0.5.0"
-"@babel/core@^7.11.6", "@babel/core@^7.12.10", "@babel/core@^7.12.3", "@babel/core@^7.23.2", "@babel/core@^7.7.5":
- version "7.23.2"
- resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.23.2.tgz#ed10df0d580fff67c5f3ee70fd22e2e4c90a9f94"
- integrity sha512-n7s51eWdaWZ3vGT2tD4T7J6eJs3QoBXydv7vkUM06Bf1cbVD2Kc2UrkzhiQwobfV7NwOnQXYL7UBJ5VPU+RGoQ==
+"@babel/core@^7.11.6", "@babel/core@^7.12.10", "@babel/core@^7.12.3", "@babel/core@^7.23.2", "@babel/core@^7.23.5", "@babel/core@^7.7.5":
+ version "7.23.7"
+ resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.23.7.tgz#4d8016e06a14b5f92530a13ed0561730b5c6483f"
+ integrity sha512-+UpDgowcmqe36d4NwqvKsyPMlOLNGMsfMmQ5WGCu+siCe3t3dfe9njrzGfdN4qq+bcNUt0+Vw6haRxBOycs4dw==
dependencies:
"@ampproject/remapping" "^2.2.0"
- "@babel/code-frame" "^7.22.13"
- "@babel/generator" "^7.23.0"
- "@babel/helper-compilation-targets" "^7.22.15"
- "@babel/helper-module-transforms" "^7.23.0"
- "@babel/helpers" "^7.23.2"
- "@babel/parser" "^7.23.0"
+ "@babel/code-frame" "^7.23.5"
+ "@babel/generator" "^7.23.6"
+ "@babel/helper-compilation-targets" "^7.23.6"
+ "@babel/helper-module-transforms" "^7.23.3"
+ "@babel/helpers" "^7.23.7"
+ "@babel/parser" "^7.23.6"
"@babel/template" "^7.22.15"
- "@babel/traverse" "^7.23.2"
- "@babel/types" "^7.23.0"
+ "@babel/traverse" "^7.23.7"
+ "@babel/types" "^7.23.6"
convert-source-map "^2.0.0"
debug "^4.1.0"
gensync "^1.0.0-beta.2"
json5 "^2.2.3"
semver "^6.3.1"
-"@babel/generator@^7.12.11", "@babel/generator@^7.12.5", "@babel/generator@^7.23.0", "@babel/generator@^7.23.5", "@babel/generator@^7.7.2":
- version "7.23.5"
- resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.23.5.tgz#17d0a1ea6b62f351d281350a5f80b87a810c4755"
- integrity sha512-BPssCHrBD+0YrxviOa3QzpqwhNIXKEtOa2jQrm4FlmkC2apYgRnQcmPWiGZDlGxiNtltnUFolMe8497Esry+jA==
+"@babel/generator@^7.12.11", "@babel/generator@^7.12.5", "@babel/generator@^7.23.6", "@babel/generator@^7.7.2":
+ version "7.23.6"
+ resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.23.6.tgz#9e1fca4811c77a10580d17d26b57b036133f3c2e"
+ integrity sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==
dependencies:
- "@babel/types" "^7.23.5"
+ "@babel/types" "^7.23.6"
"@jridgewell/gen-mapping" "^0.3.2"
"@jridgewell/trace-mapping" "^0.3.17"
jsesc "^2.5.1"
@@ -106,14 +106,14 @@
"@babel/helper-explode-assignable-expression" "^7.16.0"
"@babel/types" "^7.16.0"
-"@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.16.0", "@babel/helper-compilation-targets@^7.16.3", "@babel/helper-compilation-targets@^7.22.15":
- version "7.22.15"
- resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz#0698fc44551a26cf29f18d4662d5bf545a6cfc52"
- integrity sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==
+"@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.16.0", "@babel/helper-compilation-targets@^7.16.3", "@babel/helper-compilation-targets@^7.23.6":
+ version "7.23.6"
+ resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz#4d79069b16cbcf1461289eccfbbd81501ae39991"
+ integrity sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==
dependencies:
- "@babel/compat-data" "^7.22.9"
- "@babel/helper-validator-option" "^7.22.15"
- browserslist "^4.21.9"
+ "@babel/compat-data" "^7.23.5"
+ "@babel/helper-validator-option" "^7.23.5"
+ browserslist "^4.22.2"
lru-cache "^5.1.1"
semver "^6.3.1"
@@ -209,10 +209,10 @@
dependencies:
"@babel/types" "^7.22.15"
-"@babel/helper-module-transforms@^7.12.1", "@babel/helper-module-transforms@^7.16.0", "@babel/helper-module-transforms@^7.22.15", "@babel/helper-module-transforms@^7.23.0":
- version "7.23.0"
- resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.23.0.tgz#3ec246457f6c842c0aee62a01f60739906f7047e"
- integrity sha512-WhDWw1tdrlT0gMgUJSlX0IQvoO1eN279zrAUbVB+KpV2c3Tylz8+GnKOLllCS6Z/iZQEyVYxhZVUdPTqs2YYPw==
+"@babel/helper-module-transforms@^7.12.1", "@babel/helper-module-transforms@^7.16.0", "@babel/helper-module-transforms@^7.22.15", "@babel/helper-module-transforms@^7.23.3":
+ version "7.23.3"
+ resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz#d7d12c3c5d30af5b3c0fcab2a6d5217773e2d0f1"
+ integrity sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==
dependencies:
"@babel/helper-environment-visitor" "^7.22.20"
"@babel/helper-module-imports" "^7.22.15"
@@ -286,10 +286,10 @@
resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz#c4ae002c61d2879e724581d96665583dbc1dc0e0"
integrity sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==
-"@babel/helper-validator-option@^7.14.5", "@babel/helper-validator-option@^7.22.15":
- version "7.22.15"
- resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.22.15.tgz#694c30dfa1d09a6534cdfcafbe56789d36aba040"
- integrity sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA==
+"@babel/helper-validator-option@^7.14.5", "@babel/helper-validator-option@^7.22.15", "@babel/helper-validator-option@^7.23.5":
+ version "7.23.5"
+ resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz#907a3fbd4523426285365d1206c423c4c5520307"
+ integrity sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==
"@babel/helper-wrap-function@^7.16.0":
version "7.16.0"
@@ -301,14 +301,14 @@
"@babel/traverse" "^7.16.0"
"@babel/types" "^7.16.0"
-"@babel/helpers@^7.12.5", "@babel/helpers@^7.23.2":
- version "7.23.2"
- resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.23.2.tgz#2832549a6e37d484286e15ba36a5330483cac767"
- integrity sha512-lzchcp8SjTSVe/fPmLwtWVBFC7+Tbn8LGHDVfDp9JGxpAY5opSaEFgt8UQvrnECWOTdji2mOWMz1rOhkHscmGQ==
+"@babel/helpers@^7.12.5", "@babel/helpers@^7.23.7":
+ version "7.23.8"
+ resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.23.8.tgz#fc6b2d65b16847fd50adddbd4232c76378959e34"
+ integrity sha512-KDqYz4PiOWvDFrdHLPhKtCThtIcKVy6avWD2oG4GEvyQ+XDZwHD4YQd+H2vNMnq2rkdxsDkU82T+Vk8U/WXHRQ==
dependencies:
"@babel/template" "^7.22.15"
- "@babel/traverse" "^7.23.2"
- "@babel/types" "^7.23.0"
+ "@babel/traverse" "^7.23.7"
+ "@babel/types" "^7.23.6"
"@babel/highlight@^7.23.4":
version "7.23.4"
@@ -319,10 +319,10 @@
chalk "^2.4.2"
js-tokens "^4.0.0"
-"@babel/parser@^7.1.0", "@babel/parser@^7.12.11", "@babel/parser@^7.12.7", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.22.15", "@babel/parser@^7.23.0", "@babel/parser@^7.23.5":
- version "7.23.5"
- resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.5.tgz#37dee97c4752af148e1d38c34b856b2507660563"
- integrity sha512-hOOqoiNXrmGdFbhgCzu6GiURxUgM27Xwd/aPuu8RfHEZPBzL1Z54okAHAQjXfcQNwvrlkAmAp4SlRTZ45vlthQ==
+"@babel/parser@^7.1.0", "@babel/parser@^7.12.11", "@babel/parser@^7.12.7", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.22.15", "@babel/parser@^7.23.6":
+ version "7.23.6"
+ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.6.tgz#ba1c9e512bda72a47e285ae42aff9d2a635a9e3b"
+ integrity sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==
"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.16.2":
version "7.16.2"
@@ -648,12 +648,12 @@
dependencies:
"@babel/helper-plugin-utils" "^7.22.5"
-"@babel/plugin-transform-arrow-functions@^7.12.1", "@babel/plugin-transform-arrow-functions@^7.16.0":
- version "7.16.0"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.16.0.tgz#951706f8b449c834ed07bd474c0924c944b95a8e"
- integrity sha512-vIFb5250Rbh7roWARvCLvIJ/PtAU5Lhv7BtZ1u24COwpI9Ypjsh+bZcKk6rlIyalK+r0jOc1XQ8I4ovNxNrWrA==
+"@babel/plugin-transform-arrow-functions@^7.12.1", "@babel/plugin-transform-arrow-functions@^7.16.0", "@babel/plugin-transform-arrow-functions@^7.23.3":
+ version "7.23.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.23.3.tgz#94c6dcfd731af90f27a79509f9ab7fb2120fc38b"
+ integrity sha512-NzQcQrzaQPkaEwoTm4Mhyl8jI1huEL/WWIEvudjTCMJ9aBZNpsJbMASx7EQECtQQPS/DcnFpo0FIh3LvEO9cxQ==
dependencies:
- "@babel/helper-plugin-utils" "^7.14.5"
+ "@babel/helper-plugin-utils" "^7.22.5"
"@babel/plugin-transform-async-to-generator@^7.16.0":
version "7.16.0"
@@ -1096,26 +1096,26 @@
"@babel/parser" "^7.22.15"
"@babel/types" "^7.22.15"
-"@babel/traverse@^7.1.6", "@babel/traverse@^7.12.11", "@babel/traverse@^7.12.9", "@babel/traverse@^7.13.0", "@babel/traverse@^7.16.0", "@babel/traverse@^7.23.2", "@babel/traverse@^7.4.5":
- version "7.23.5"
- resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.23.5.tgz#f546bf9aba9ef2b042c0e00d245990c15508e7ec"
- integrity sha512-czx7Xy5a6sapWWRx61m1Ke1Ra4vczu1mCTtJam5zRTBOonfdJ+S/B6HYmGYu3fJtr8GGET3si6IhgWVBhJ/m8w==
+"@babel/traverse@^7.1.6", "@babel/traverse@^7.12.11", "@babel/traverse@^7.12.9", "@babel/traverse@^7.13.0", "@babel/traverse@^7.16.0", "@babel/traverse@^7.23.7", "@babel/traverse@^7.4.5":
+ version "7.23.7"
+ resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.23.7.tgz#9a7bf285c928cb99b5ead19c3b1ce5b310c9c305"
+ integrity sha512-tY3mM8rH9jM0YHFGyfC0/xf+SB5eKUu7HPj7/k3fpi9dAlsMc5YbQvDi0Sh2QTPXqMhyaAtzAr807TIyfQrmyg==
dependencies:
"@babel/code-frame" "^7.23.5"
- "@babel/generator" "^7.23.5"
+ "@babel/generator" "^7.23.6"
"@babel/helper-environment-visitor" "^7.22.20"
"@babel/helper-function-name" "^7.23.0"
"@babel/helper-hoist-variables" "^7.22.5"
"@babel/helper-split-export-declaration" "^7.22.6"
- "@babel/parser" "^7.23.5"
- "@babel/types" "^7.23.5"
- debug "^4.1.0"
+ "@babel/parser" "^7.23.6"
+ "@babel/types" "^7.23.6"
+ debug "^4.3.1"
globals "^11.1.0"
-"@babel/types@^7.0.0", "@babel/types@^7.12.11", "@babel/types@^7.12.7", "@babel/types@^7.16.0", "@babel/types@^7.2.0", "@babel/types@^7.20.7", "@babel/types@^7.22.15", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.23.5", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4":
- version "7.23.5"
- resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.5.tgz#48d730a00c95109fa4393352705954d74fb5b602"
- integrity sha512-ON5kSOJwVO6xXVRTvOI0eOnWe7VdUcIpsovGo9U/Br4Ie4UVFQTboO2cYnDhAGU6Fp+UxSiT+pMft0SMHfuq6w==
+"@babel/types@^7.0.0", "@babel/types@^7.12.11", "@babel/types@^7.12.7", "@babel/types@^7.16.0", "@babel/types@^7.2.0", "@babel/types@^7.20.7", "@babel/types@^7.22.15", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.23.6", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4":
+ version "7.23.6"
+ resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.6.tgz#be33fdb151e1f5a56877d704492c240fc71c7ccd"
+ integrity sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==
dependencies:
"@babel/helper-string-parser" "^7.23.4"
"@babel/helper-validator-identifier" "^7.22.20"
@@ -1406,111 +1406,226 @@
resolved "https://registry.yarnpkg.com/@emotion/weak-memoize/-/weak-memoize-0.2.5.tgz#8eed982e2ee6f7f4e44c253e12962980791efd46"
integrity sha512-6U71C2Wp7r5XtFtQzYrW5iKFT67OixrSxjI4MptCHzdSVlgabczzqLe0ZSgnub/5Kp4hSbpDB1tMytZY9pwxxA==
+"@esbuild/aix-ppc64@0.19.11":
+ version "0.19.11"
+ resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.19.11.tgz#2acd20be6d4f0458bc8c784103495ff24f13b1d3"
+ integrity sha512-FnzU0LyE3ySQk7UntJO4+qIiQgI7KoODnZg5xzXIrFJlKd2P2gwHsHY4927xj9y5PJmJSzULiUCWmv7iWnNa7g==
+
+"@esbuild/android-arm64@0.19.11":
+ version "0.19.11"
+ resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.19.11.tgz#b45d000017385c9051a4f03e17078abb935be220"
+ integrity sha512-aiu7K/5JnLj//KOnOfEZ0D90obUkRzDMyqd/wNAUQ34m4YUPVhRZpnqKV9uqDGxT7cToSDnIHsGooyIczu9T+Q==
+
"@esbuild/android-arm64@0.19.8":
version "0.19.8"
resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.19.8.tgz#fb7130103835b6d43ea499c3f30cfb2b2ed58456"
integrity sha512-B8JbS61bEunhfx8kasogFENgQfr/dIp+ggYXwTqdbMAgGDhRa3AaPpQMuQU0rNxDLECj6FhDzk1cF9WHMVwrtA==
+"@esbuild/android-arm@0.19.11":
+ version "0.19.11"
+ resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.19.11.tgz#f46f55414e1c3614ac682b29977792131238164c"
+ integrity sha512-5OVapq0ClabvKvQ58Bws8+wkLCV+Rxg7tUVbo9xu034Nm536QTII4YzhaFriQ7rMrorfnFKUsArD2lqKbFY4vw==
+
"@esbuild/android-arm@0.19.8":
version "0.19.8"
resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.19.8.tgz#b46e4d9e984e6d6db6c4224d72c86b7757e35bcb"
integrity sha512-31E2lxlGM1KEfivQl8Yf5aYU/mflz9g06H6S15ITUFQueMFtFjESRMoDSkvMo8thYvLBax+VKTPlpnx+sPicOA==
+"@esbuild/android-x64@0.19.11":
+ version "0.19.11"
+ resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.19.11.tgz#bfc01e91740b82011ef503c48f548950824922b2"
+ integrity sha512-eccxjlfGw43WYoY9QgB82SgGgDbibcqyDTlk3l3C0jOVHKxrjdc9CTwDUQd0vkvYg5um0OH+GpxYvp39r+IPOg==
+
"@esbuild/android-x64@0.19.8":
version "0.19.8"
resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.19.8.tgz#a13db9441b5a4f4e4fec4a6f8ffacfea07888db7"
integrity sha512-rdqqYfRIn4jWOp+lzQttYMa2Xar3OK9Yt2fhOhzFXqg0rVWEfSclJvZq5fZslnz6ypHvVf3CT7qyf0A5pM682A==
+"@esbuild/darwin-arm64@0.19.11":
+ version "0.19.11"
+ resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.19.11.tgz#533fb7f5a08c37121d82c66198263dcc1bed29bf"
+ integrity sha512-ETp87DRWuSt9KdDVkqSoKoLFHYTrkyz2+65fj9nfXsaV3bMhTCjtQfw3y+um88vGRKRiF7erPrh/ZuIdLUIVxQ==
+
"@esbuild/darwin-arm64@0.19.8":
version "0.19.8"
resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.19.8.tgz#49f5718d36541f40dd62bfdf84da9c65168a0fc2"
integrity sha512-RQw9DemMbIq35Bprbboyf8SmOr4UXsRVxJ97LgB55VKKeJOOdvsIPy0nFyF2l8U+h4PtBx/1kRf0BelOYCiQcw==
+"@esbuild/darwin-x64@0.19.11":
+ version "0.19.11"
+ resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.19.11.tgz#62f3819eff7e4ddc656b7c6815a31cf9a1e7d98e"
+ integrity sha512-fkFUiS6IUK9WYUO/+22omwetaSNl5/A8giXvQlcinLIjVkxwTLSktbF5f/kJMftM2MJp9+fXqZ5ezS7+SALp4g==
+
"@esbuild/darwin-x64@0.19.8":
version "0.19.8"
resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.19.8.tgz#75c5c88371eea4bfc1f9ecfd0e75104c74a481ac"
integrity sha512-3sur80OT9YdeZwIVgERAysAbwncom7b4bCI2XKLjMfPymTud7e/oY4y+ci1XVp5TfQp/bppn7xLw1n/oSQY3/Q==
+"@esbuild/freebsd-arm64@0.19.11":
+ version "0.19.11"
+ resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.11.tgz#d478b4195aa3ca44160272dab85ef8baf4175b4a"
+ integrity sha512-lhoSp5K6bxKRNdXUtHoNc5HhbXVCS8V0iZmDvyWvYq9S5WSfTIHU2UGjcGt7UeS6iEYp9eeymIl5mJBn0yiuxA==
+
"@esbuild/freebsd-arm64@0.19.8":
version "0.19.8"
resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.8.tgz#9d7259fea4fd2b5f7437b52b542816e89d7c8575"
integrity sha512-WAnPJSDattvS/XtPCTj1tPoTxERjcTpH6HsMr6ujTT+X6rylVe8ggxk8pVxzf5U1wh5sPODpawNicF5ta/9Tmw==
+"@esbuild/freebsd-x64@0.19.11":
+ version "0.19.11"
+ resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.19.11.tgz#7bdcc1917409178257ca6a1a27fe06e797ec18a2"
+ integrity sha512-JkUqn44AffGXitVI6/AbQdoYAq0TEullFdqcMY/PCUZ36xJ9ZJRtQabzMA+Vi7r78+25ZIBosLTOKnUXBSi1Kw==
+
"@esbuild/freebsd-x64@0.19.8":
version "0.19.8"
resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.19.8.tgz#abac03e1c4c7c75ee8add6d76ec592f46dbb39e3"
integrity sha512-ICvZyOplIjmmhjd6mxi+zxSdpPTKFfyPPQMQTK/w+8eNK6WV01AjIztJALDtwNNfFhfZLux0tZLC+U9nSyA5Zg==
+"@esbuild/linux-arm64@0.19.11":
+ version "0.19.11"
+ resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.19.11.tgz#58ad4ff11685fcc735d7ff4ca759ab18fcfe4545"
+ integrity sha512-LneLg3ypEeveBSMuoa0kwMpCGmpu8XQUh+mL8XXwoYZ6Be2qBnVtcDI5azSvh7vioMDhoJFZzp9GWp9IWpYoUg==
+
"@esbuild/linux-arm64@0.19.8":
version "0.19.8"
resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.19.8.tgz#c577932cf4feeaa43cb9cec27b89cbe0df7d9098"
integrity sha512-z1zMZivxDLHWnyGOctT9JP70h0beY54xDDDJt4VpTX+iwA77IFsE1vCXWmprajJGa+ZYSqkSbRQ4eyLCpCmiCQ==
+"@esbuild/linux-arm@0.19.11":
+ version "0.19.11"
+ resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.19.11.tgz#ce82246d873b5534d34de1e5c1b33026f35e60e3"
+ integrity sha512-3CRkr9+vCV2XJbjwgzjPtO8T0SZUmRZla+UL1jw+XqHZPkPgZiyWvbDvl9rqAN8Zl7qJF0O/9ycMtjU67HN9/Q==
+
"@esbuild/linux-arm@0.19.8":
version "0.19.8"
resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.19.8.tgz#d6014d8b98b5cbc96b95dad3d14d75bb364fdc0f"
integrity sha512-H4vmI5PYqSvosPaTJuEppU9oz1dq2A7Mr2vyg5TF9Ga+3+MGgBdGzcyBP7qK9MrwFQZlvNyJrvz6GuCaj3OukQ==
+"@esbuild/linux-ia32@0.19.11":
+ version "0.19.11"
+ resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.19.11.tgz#cbae1f313209affc74b80f4390c4c35c6ab83fa4"
+ integrity sha512-caHy++CsD8Bgq2V5CodbJjFPEiDPq8JJmBdeyZ8GWVQMjRD0sU548nNdwPNvKjVpamYYVL40AORekgfIubwHoA==
+
"@esbuild/linux-ia32@0.19.8":
version "0.19.8"
resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.19.8.tgz#2379a0554307d19ac4a6cdc15b08f0ea28e7a40d"
integrity sha512-1a8suQiFJmZz1khm/rDglOc8lavtzEMRo0v6WhPgxkrjcU0LkHj+TwBrALwoz/OtMExvsqbbMI0ChyelKabSvQ==
+"@esbuild/linux-loong64@0.19.11":
+ version "0.19.11"
+ resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.19.11.tgz#5f32aead1c3ec8f4cccdb7ed08b166224d4e9121"
+ integrity sha512-ppZSSLVpPrwHccvC6nQVZaSHlFsvCQyjnvirnVjbKSHuE5N24Yl8F3UwYUUR1UEPaFObGD2tSvVKbvR+uT1Nrg==
+
"@esbuild/linux-loong64@0.19.8":
version "0.19.8"
resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.19.8.tgz#e2a5bbffe15748b49356a6cd7b2d5bf60c5a7123"
integrity sha512-fHZWS2JJxnXt1uYJsDv9+b60WCc2RlvVAy1F76qOLtXRO+H4mjt3Tr6MJ5l7Q78X8KgCFudnTuiQRBhULUyBKQ==
+"@esbuild/linux-mips64el@0.19.11":
+ version "0.19.11"
+ resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.19.11.tgz#38eecf1cbb8c36a616261de858b3c10d03419af9"
+ integrity sha512-B5x9j0OgjG+v1dF2DkH34lr+7Gmv0kzX6/V0afF41FkPMMqaQ77pH7CrhWeR22aEeHKaeZVtZ6yFwlxOKPVFyg==
+
"@esbuild/linux-mips64el@0.19.8":
version "0.19.8"
resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.19.8.tgz#1359331e6f6214f26f4b08db9b9df661c57cfa24"
integrity sha512-Wy/z0EL5qZYLX66dVnEg9riiwls5IYnziwuju2oUiuxVc+/edvqXa04qNtbrs0Ukatg5HEzqT94Zs7J207dN5Q==
+"@esbuild/linux-ppc64@0.19.11":
+ version "0.19.11"
+ resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.19.11.tgz#9c5725a94e6ec15b93195e5a6afb821628afd912"
+ integrity sha512-MHrZYLeCG8vXblMetWyttkdVRjQlQUb/oMgBNurVEnhj4YWOr4G5lmBfZjHYQHHN0g6yDmCAQRR8MUHldvvRDA==
+
"@esbuild/linux-ppc64@0.19.8":
version "0.19.8"
resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.19.8.tgz#9ba436addc1646dc89dae48c62d3e951ffe70951"
integrity sha512-ETaW6245wK23YIEufhMQ3HSeHO7NgsLx8gygBVldRHKhOlD1oNeNy/P67mIh1zPn2Hr2HLieQrt6tWrVwuqrxg==
+"@esbuild/linux-riscv64@0.19.11":
+ version "0.19.11"
+ resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.19.11.tgz#2dc4486d474a2a62bbe5870522a9a600e2acb916"
+ integrity sha512-f3DY++t94uVg141dozDu4CCUkYW+09rWtaWfnb3bqe4w5NqmZd6nPVBm+qbz7WaHZCoqXqHz5p6CM6qv3qnSSQ==
+
"@esbuild/linux-riscv64@0.19.8":
version "0.19.8"
resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.19.8.tgz#fbcf0c3a0b20f40b5fc31c3b7695f0769f9de66b"
integrity sha512-T2DRQk55SgoleTP+DtPlMrxi/5r9AeFgkhkZ/B0ap99zmxtxdOixOMI570VjdRCs9pE4Wdkz7JYrsPvsl7eESg==
+"@esbuild/linux-s390x@0.19.11":
+ version "0.19.11"
+ resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.19.11.tgz#4ad8567df48f7dd4c71ec5b1753b6f37561a65a8"
+ integrity sha512-A5xdUoyWJHMMlcSMcPGVLzYzpcY8QP1RtYzX5/bS4dvjBGVxdhuiYyFwp7z74ocV7WDc0n1harxmpq2ePOjI0Q==
+
"@esbuild/linux-s390x@0.19.8":
version "0.19.8"
resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.19.8.tgz#989e8a05f7792d139d5564ffa7ff898ac6f20a4a"
integrity sha512-NPxbdmmo3Bk7mbNeHmcCd7R7fptJaczPYBaELk6NcXxy7HLNyWwCyDJ/Xx+/YcNH7Im5dHdx9gZ5xIwyliQCbg==
+"@esbuild/linux-x64@0.19.11":
+ version "0.19.11"
+ resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.19.11.tgz#b7390c4d5184f203ebe7ddaedf073df82a658766"
+ integrity sha512-grbyMlVCvJSfxFQUndw5mCtWs5LO1gUlwP4CDi4iJBbVpZcqLVT29FxgGuBJGSzyOxotFG4LoO5X+M1350zmPA==
+
"@esbuild/linux-x64@0.19.8":
version "0.19.8"
resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.19.8.tgz#b187295393a59323397fe5ff51e769ec4e72212b"
integrity sha512-lytMAVOM3b1gPypL2TRmZ5rnXl7+6IIk8uB3eLsV1JwcizuolblXRrc5ShPrO9ls/b+RTp+E6gbsuLWHWi2zGg==
+"@esbuild/netbsd-x64@0.19.11":
+ version "0.19.11"
+ resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.19.11.tgz#d633c09492a1721377f3bccedb2d821b911e813d"
+ integrity sha512-13jvrQZJc3P230OhU8xgwUnDeuC/9egsjTkXN49b3GcS5BKvJqZn86aGM8W9pd14Kd+u7HuFBMVtrNGhh6fHEQ==
+
"@esbuild/netbsd-x64@0.19.8":
version "0.19.8"
resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.19.8.tgz#c1ec0e24ea82313cb1c7bae176bd5acd5bde7137"
integrity sha512-hvWVo2VsXz/8NVt1UhLzxwAfo5sioj92uo0bCfLibB0xlOmimU/DeAEsQILlBQvkhrGjamP0/el5HU76HAitGw==
+"@esbuild/openbsd-x64@0.19.11":
+ version "0.19.11"
+ resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.19.11.tgz#17388c76e2f01125bf831a68c03a7ffccb65d1a2"
+ integrity sha512-ysyOGZuTp6SNKPE11INDUeFVVQFrhcNDVUgSQVDzqsqX38DjhPEPATpid04LCoUr2WXhQTEZ8ct/EgJCUDpyNw==
+
"@esbuild/openbsd-x64@0.19.8":
version "0.19.8"
resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.19.8.tgz#0c5b696ac66c6d70cf9ee17073a581a28af9e18d"
integrity sha512-/7Y7u77rdvmGTxR83PgaSvSBJCC2L3Kb1M/+dmSIvRvQPXXCuC97QAwMugBNG0yGcbEGfFBH7ojPzAOxfGNkwQ==
+"@esbuild/sunos-x64@0.19.11":
+ version "0.19.11"
+ resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.19.11.tgz#e320636f00bb9f4fdf3a80e548cb743370d41767"
+ integrity sha512-Hf+Sad9nVwvtxy4DXCZQqLpgmRTQqyFyhT3bZ4F2XlJCjxGmRFF0Shwn9rzhOYRB61w9VMXUkxlBy56dk9JJiQ==
+
"@esbuild/sunos-x64@0.19.8":
version "0.19.8"
resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.19.8.tgz#2a697e1f77926ff09fcc457d8f29916d6cd48fb1"
integrity sha512-9Lc4s7Oi98GqFA4HzA/W2JHIYfnXbUYgekUP/Sm4BG9sfLjyv6GKKHKKVs83SMicBF2JwAX6A1PuOLMqpD001w==
+"@esbuild/win32-arm64@0.19.11":
+ version "0.19.11"
+ resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.19.11.tgz#c778b45a496e90b6fc373e2a2bb072f1441fe0ee"
+ integrity sha512-0P58Sbi0LctOMOQbpEOvOL44Ne0sqbS0XWHMvvrg6NE5jQ1xguCSSw9jQeUk2lfrXYsKDdOe6K+oZiwKPilYPQ==
+
"@esbuild/win32-arm64@0.19.8":
version "0.19.8"
resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.19.8.tgz#ec029e62a2fca8c071842ecb1bc5c2dd20b066f1"
integrity sha512-rq6WzBGjSzihI9deW3fC2Gqiak68+b7qo5/3kmB6Gvbh/NYPA0sJhrnp7wgV4bNwjqM+R2AApXGxMO7ZoGhIJg==
+"@esbuild/win32-ia32@0.19.11":
+ version "0.19.11"
+ resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.19.11.tgz#481a65fee2e5cce74ec44823e6b09ecedcc5194c"
+ integrity sha512-6YOrWS+sDJDmshdBIQU+Uoyh7pQKrdykdefC1avn76ss5c+RN6gut3LZA4E2cH5xUEp5/cA0+YxRaVtRAb0xBg==
+
"@esbuild/win32-ia32@0.19.8":
version "0.19.8"
resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.19.8.tgz#cbb9a3146bde64dc15543e48afe418c7a3214851"
integrity sha512-AIAbverbg5jMvJznYiGhrd3sumfwWs8572mIJL5NQjJa06P8KfCPWZQ0NwZbPQnbQi9OWSZhFVSUWjjIrn4hSw==
+"@esbuild/win32-x64@0.19.11":
+ version "0.19.11"
+ resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.19.11.tgz#a5d300008960bb39677c46bf16f53ec70d8dee04"
+ integrity sha512-vfkhltrjCAb603XaFhqhAF4LGDi2M4OrCRrFusyQ+iTLQ/o60QQXxc9cZC/FFpihBI9N1Grn6SMKVJ4KP7Fuiw==
+
"@esbuild/win32-x64@0.19.8":
version "0.19.8"
resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.19.8.tgz#c8285183dbdb17008578dbacb6e22748709b4822"
@@ -1857,7 +1972,7 @@
"@jridgewell/gen-mapping" "^0.3.0"
"@jridgewell/trace-mapping" "^0.3.9"
-"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14":
+"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14", "@jridgewell/sourcemap-codec@^1.4.15":
version "1.4.15"
resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32"
integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==
@@ -2418,6 +2533,18 @@
resolved "https://registry.yarnpkg.com/@polka/url/-/url-1.0.0-next.21.tgz#5de5a2385a35309427f6011992b544514d559aa1"
integrity sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==
+"@protobuf-ts/runtime-rpc@^2.9.3":
+ version "2.9.3"
+ resolved "https://registry.yarnpkg.com/@protobuf-ts/runtime-rpc/-/runtime-rpc-2.9.3.tgz#7316373f2ffc2b5ab4c7e0c1ca0cad0a3c92585d"
+ integrity sha512-WelHpctvZeG8yhbb7tnsrLzotq9xjMCXuGuhJ8qMyEdNoBBEodbXseofAYFTebo2/PN2LzyEq3X6vwr5f8jqTA==
+ dependencies:
+ "@protobuf-ts/runtime" "^2.9.3"
+
+"@protobuf-ts/runtime@^2.9.3":
+ version "2.9.3"
+ resolved "https://registry.yarnpkg.com/@protobuf-ts/runtime/-/runtime-2.9.3.tgz#b906223debaf42c9bd281e985a9f5652729153a4"
+ integrity sha512-nivzCpg/qYD0RX2OmHOahJALb8ndjGmUhNBcTJ0BbXoqKwCSM6vYA+vegzS3rhuaPgbyC7Ec8idlnizzUfIRuw==
+
"@protobufjs/aspromise@^1.1.1", "@protobufjs/aspromise@^1.1.2":
version "1.1.2"
resolved "https://registry.yarnpkg.com/@protobufjs/aspromise/-/aspromise-1.1.2.tgz#9b8b0cc663d669a7d8f6f5d0893a14d348f30fbf"
@@ -5762,7 +5889,7 @@ browser-assert@^1.2.1:
resolved "https://registry.yarnpkg.com/browser-assert/-/browser-assert-1.2.1.tgz#9aaa5a2a8c74685c2ae05bfe46efd606f068c200"
integrity sha512-nfulgvOR6S4gt9UKCeGJOuSGBPGiFT6oQ/2UBnvTY/5aQ1PnksW72fhZkM30DzoRRv2WpwZf1vHHEr3mtuXIWQ==
-browserslist@^4.12.0, browserslist@^4.14.5, browserslist@^4.17.6, browserslist@^4.21.9:
+browserslist@^4.12.0, browserslist@^4.14.5, browserslist@^4.17.6:
version "4.22.1"
resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.22.1.tgz#ba91958d1a59b87dab6fed8dfbcb3da5e2e9c619"
integrity sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==
@@ -5772,6 +5899,16 @@ browserslist@^4.12.0, browserslist@^4.14.5, browserslist@^4.17.6, browserslist@^
node-releases "^2.0.13"
update-browserslist-db "^1.0.13"
+browserslist@^4.22.2:
+ version "4.22.2"
+ resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.22.2.tgz#704c4943072bd81ea18997f3bd2180e89c77874b"
+ integrity sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A==
+ dependencies:
+ caniuse-lite "^1.0.30001565"
+ electron-to-chromium "^1.4.601"
+ node-releases "^2.0.14"
+ update-browserslist-db "^1.0.13"
+
bser@2.1.1:
version "2.1.1"
resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05"
@@ -5860,6 +5997,11 @@ c8@^7.6.0:
yargs "^16.2.0"
yargs-parser "^20.2.7"
+cac@^6.7.14:
+ version "6.7.14"
+ resolved "https://registry.yarnpkg.com/cac/-/cac-6.7.14.tgz#804e1e6f506ee363cb0e3ccbb09cad5dd9870959"
+ integrity sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==
+
cacache@^15.0.5:
version "15.3.0"
resolved "https://registry.yarnpkg.com/cacache/-/cacache-15.3.0.tgz#dc85380fb2f556fe3dda4c719bfa0ec875a7f1eb"
@@ -5987,6 +6129,11 @@ caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001541:
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001547.tgz#d4f92efc488aab3c7f92c738d3977c2a3180472b"
integrity sha512-W7CrtIModMAxobGhz8iXmDfuJiiKg1WADMO/9x7/CLNin5cpSbuBjooyoIUVB5eyCc36QuTVlkVa1iB2S5+/eA==
+caniuse-lite@^1.0.30001565:
+ version "1.0.30001579"
+ resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001579.tgz#45c065216110f46d6274311a4b3fcf6278e0852a"
+ integrity sha512-u5AUVkixruKHJjw/pj9wISlcMpgFWzSrczLZbrqBSxukQixmg0SJ5sZTpvaFvxU0HoQKd4yoyAogyrAz9pzJnA==
+
case-sensitive-paths-webpack-plugin@^2.3.0:
version "2.4.0"
resolved "https://registry.yarnpkg.com/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.4.0.tgz#db64066c6422eed2e08cc14b986ca43796dbc6d4"
@@ -7440,6 +7587,23 @@ electron-to-chromium@^1.4.535:
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.551.tgz#14db6660a88f66ce095ea2657abe5653bc7f42ed"
integrity sha512-/Ng/W/kFv7wdEHYzxdK7Cv0BHEGSkSB3M0Ssl8Ndr1eMiYeas/+Mv4cNaDqamqWx6nd2uQZfPz6g25z25M/sdw==
+electron-to-chromium@^1.4.601:
+ version "1.4.637"
+ resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.637.tgz#ed8775cf5e0c380c3e8452e9818a0e4b7a671ac4"
+ integrity sha512-G7j3UCOukFtxVO1vWrPQUoDk3kL70mtvjc/DC/k2o7lE0wAdq+Vwp1ipagOow+BH0uVztFysLWbkM/RTIrbK3w==
+
+electron-vite@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/electron-vite/-/electron-vite-2.0.0.tgz#707424b0040602f0e48eca3712794d9762fa1a74"
+ integrity sha512-EQiuPVSwJQRPGbZiVrCsCFMDVfNyNtSpDiyUV4fNwPKNadTjBfYMOudnLUpSeBTocKUZYf58SXSzSCAkNg0GTQ==
+ dependencies:
+ "@babel/core" "^7.23.5"
+ "@babel/plugin-transform-arrow-functions" "^7.23.3"
+ cac "^6.7.14"
+ esbuild "^0.19.8"
+ magic-string "^0.30.5"
+ picocolors "^1.0.0"
+
electron@28.1.1:
version "28.1.1"
resolved "https://registry.yarnpkg.com/electron/-/electron-28.1.1.tgz#37254967e32a4a69e18378f3b1aba1475522d08d"
@@ -7723,6 +7887,35 @@ esbuild@^0.19.3:
"@esbuild/win32-ia32" "0.19.8"
"@esbuild/win32-x64" "0.19.8"
+esbuild@^0.19.8:
+ version "0.19.11"
+ resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.19.11.tgz#4a02dca031e768b5556606e1b468fe72e3325d96"
+ integrity sha512-HJ96Hev2hX/6i5cDVwcqiJBBtuo9+FeIJOtZ9W1kA5M6AMJRHUZlpYZ1/SbEwtO0ioNAW8rUooVpC/WehY2SfA==
+ optionalDependencies:
+ "@esbuild/aix-ppc64" "0.19.11"
+ "@esbuild/android-arm" "0.19.11"
+ "@esbuild/android-arm64" "0.19.11"
+ "@esbuild/android-x64" "0.19.11"
+ "@esbuild/darwin-arm64" "0.19.11"
+ "@esbuild/darwin-x64" "0.19.11"
+ "@esbuild/freebsd-arm64" "0.19.11"
+ "@esbuild/freebsd-x64" "0.19.11"
+ "@esbuild/linux-arm" "0.19.11"
+ "@esbuild/linux-arm64" "0.19.11"
+ "@esbuild/linux-ia32" "0.19.11"
+ "@esbuild/linux-loong64" "0.19.11"
+ "@esbuild/linux-mips64el" "0.19.11"
+ "@esbuild/linux-ppc64" "0.19.11"
+ "@esbuild/linux-riscv64" "0.19.11"
+ "@esbuild/linux-s390x" "0.19.11"
+ "@esbuild/linux-x64" "0.19.11"
+ "@esbuild/netbsd-x64" "0.19.11"
+ "@esbuild/openbsd-x64" "0.19.11"
+ "@esbuild/sunos-x64" "0.19.11"
+ "@esbuild/win32-arm64" "0.19.11"
+ "@esbuild/win32-ia32" "0.19.11"
+ "@esbuild/win32-x64" "0.19.11"
+
escalade@^3.1.1:
version "3.1.1"
resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40"
@@ -8233,6 +8426,17 @@ fast-glob@^2.2.6:
merge2 "^1.2.3"
micromatch "^3.1.10"
+fast-glob@^3.2.12:
+ version "3.3.2"
+ resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129"
+ integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==
+ dependencies:
+ "@nodelib/fs.stat" "^2.0.2"
+ "@nodelib/fs.walk" "^1.2.3"
+ glob-parent "^5.1.2"
+ merge2 "^1.3.0"
+ micromatch "^4.0.4"
+
fast-glob@^3.2.9, fast-glob@^3.3.1:
version "3.3.1"
resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.1.tgz#784b4e897340f3dbbef17413b3f11acf03c874c4"
@@ -8875,10 +9079,10 @@ globrex@^0.1.2:
resolved "https://registry.yarnpkg.com/globrex/-/globrex-0.1.2.tgz#dd5d9ec826232730cd6793a5e33a9302985e6098"
integrity sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==
-google-protobuf@^3.20.1:
- version "3.20.1"
- resolved "https://registry.yarnpkg.com/google-protobuf/-/google-protobuf-3.20.1.tgz#1b255c2b59bcda7c399df46c65206aa3c7a0ce8b"
- integrity sha512-XMf1+O32FjYIV3CYu6Tuh5PNbfNEU5Xu22X+Xkdb/DUexFlCzhvv7d5Iirm4AOwn8lv4al1YvIhzGrg2j9Zfzw==
+google-protobuf@^3.21.2:
+ version "3.21.2"
+ resolved "https://registry.yarnpkg.com/google-protobuf/-/google-protobuf-3.21.2.tgz#4580a2bea8bbb291ee579d1fefb14d6fa3070ea4"
+ integrity sha512-3MSOYFO5U9mPGikIYCzK0SaThypfGgS6bHqrUGXG3DPHCrb+txNqeEcns1W0lkGfk0rCyNXm7xB9rMxnCiZOoA==
gopd@^1.0.1:
version "1.0.1"
@@ -11003,6 +11207,13 @@ lz-string@^1.5.0:
resolved "https://registry.yarnpkg.com/lz-string/-/lz-string-1.5.0.tgz#c1ab50f77887b712621201ba9fd4e3a6ed099941"
integrity sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==
+magic-string@^0.30.1, magic-string@^0.30.5:
+ version "0.30.5"
+ resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.5.tgz#1994d980bd1c8835dc6e78db7cbd4ae4f24746f9"
+ integrity sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA==
+ dependencies:
+ "@jridgewell/sourcemap-codec" "^1.4.15"
+
make-dir@^2.0.0, make-dir@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5"
@@ -12033,6 +12244,11 @@ node-releases@^2.0.13:
resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.13.tgz#d5ed1627c23e3461e819b02e57b75e4899b1c81d"
integrity sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==
+node-releases@^2.0.14:
+ version "2.0.14"
+ resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.14.tgz#2ffb053bceb8b2be8495ece1ab6ce600c4461b0b"
+ integrity sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==
+
nopt@^7.0.0:
version "7.2.0"
resolved "https://registry.yarnpkg.com/nopt/-/nopt-7.2.0.tgz#067378c68116f602f552876194fd11f1292503d7"
@@ -15639,6 +15855,26 @@ vfile@^5.0.0:
unist-util-stringify-position "^3.0.0"
vfile-message "^3.0.0"
+vite-plugin-commonjs@^0.10.1:
+ version "0.10.1"
+ resolved "https://registry.yarnpkg.com/vite-plugin-commonjs/-/vite-plugin-commonjs-0.10.1.tgz#18585abc6020adaee733150847972f55a1f88c55"
+ integrity sha512-taP8R9kYGlCW5OzkVR0UIWRCnG6rSxeWWuA7tnU5b9t5MniibOnDY219NhisTeDhJAeGT8cEnrhVWZ9A5yD+vg==
+ dependencies:
+ acorn "^8.8.2"
+ fast-glob "^3.2.12"
+ magic-string "^0.30.1"
+ vite-plugin-dynamic-import "^1.5.0"
+
+vite-plugin-dynamic-import@^1.5.0:
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/vite-plugin-dynamic-import/-/vite-plugin-dynamic-import-1.5.0.tgz#a28f4768da977f0e448009489617aec259180b63"
+ integrity sha512-Qp85c+AVJmLa8MLni74U4BDiWpUeFNx7NJqbGZyR2XJOU7mgW0cb7nwlAMucFyM4arEd92Nfxp4j44xPi6Fu7g==
+ dependencies:
+ acorn "^8.8.2"
+ es-module-lexer "^1.2.1"
+ fast-glob "^3.2.12"
+ magic-string "^0.30.1"
+
vite-plugin-wasm@^3.2.2:
version "3.2.2"
resolved "https://registry.yarnpkg.com/vite-plugin-wasm/-/vite-plugin-wasm-3.2.2.tgz#7a66fef27733a0dea9b2b14f942a6389a2523f7c"